public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Gaius Mulley <gaius@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/modula-2] Renamed libgm2 C files to C++ and removed unnecessary file. Date: Thu, 7 Jul 2022 16:03:03 +0000 (GMT) [thread overview] Message-ID: <20220707160303.852C63856972@sourceware.org> (raw) https://gcc.gnu.org/g:619a463632aa35bd3878a4637f2180fdec2ebd95 commit 619a463632aa35bd3878a4637f2180fdec2ebd95 Author: Gaius Mulley <gaius.mulley@southwales.ac.uk> Date: Thu Jul 7 16:02:29 2022 +0100 Renamed libgm2 C files to C++ and removed unnecessary file. gcc/m2/ChangeLog: * gm2-libs-iso/ErrnoCategory.c (Removed). libgm2/ChangeLog: * libm2iso/ErrnoCategory.cc (Renamed from ErrnoCategory.c). * libm2iso/RTco.cc (Renamed from RTco.c). * libm2pim/termios.cc (Renamed from termios.c). * libm2pim/SysExceptions.cc (Renamed from SysExceptions.c). * libm2pim/errno.cc (Renamed from errno.c). Signed-off-by: Gaius Mulley <gaius.mulley@southwales.ac.uk> Diff: --- gcc/m2/gm2-libs-iso/ErrnoCategory.c | 138 --- libgm2/libm2iso/ErrnoCategory.c | 180 ---- libgm2/libm2iso/RTco.c | 467 -------- libgm2/libm2pim/SysExceptions.c | 259 ----- libgm2/libm2pim/errno.c | 70 -- libgm2/libm2pim/termios.c | 1987 ----------------------------------- 6 files changed, 3101 deletions(-) diff --git a/gcc/m2/gm2-libs-iso/ErrnoCategory.c b/gcc/m2/gm2-libs-iso/ErrnoCategory.c deleted file mode 100644 index 4334ebb0009..00000000000 --- a/gcc/m2/gm2-libs-iso/ErrnoCategory.c +++ /dev/null @@ -1,138 +0,0 @@ -/* ErrnoCategory.c provides an interface to errno. - -Copyright (C) 2008-2021 Free Software Foundation, Inc. -Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>. - -This file is part of GNU Modula-2. - -GNU Modula-2 is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GNU Modula-2 is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -Under Section 7 of GPL version 3, you are granted additional -permissions described in the GCC Runtime Library Exception, version -3.1, as published by the Free Software Foundation. - -You should have received a copy of the GNU General Public License and -a copy of the GCC Runtime Library Exception along with this program; -see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -<http://www.gnu.org/licenses/>. */ - - -#include <p2c/p2c.h> -#include "ChanConsts.h" - -#if defined(HAVE_ERRNO_H) -# include <errno.h> -#endif - -#if defined(HAVE_SYS_ERRNO_H) -# include <sys/errno.h> -#endif - - -/* - * IsErrnoHard - returns TRUE if the value of errno is associated with - * a hard device error. - */ - -int ErrnoCategory_IsErrnoHard (int e) -{ -#if defined(HAVE_ERRNO_H) || defined(HAVE_SYS_ERRNO_H) - return ((e == EPERM) || (e == ENOENT) || (e == EIO) || - (e == ENXIO) || (e == EACCES) || (e == ENOTBLK) || - (e == ENODEV) || (e == EINVAL) || (e == ENFILE) || - (e == EROFS) || (e == EMLINK)); -#else - return FALSE; -#endif -} - - -/* - * IsErrnoSoft - returns TRUE if the value of errno is associated with - * a soft device error. - */ - -int ErrnoCategory_IsErrnoSoft (int e) -{ -#if defined(HAVE_ERRNO_H) || defined(HAVE_SYS_ERRNO_H) - return ((e == ESRCH) || (e == EINTR) || (e == E2BIG) || - (e == ENOEXEC) || (e == EBADF) || (e == ECHILD) || - (e == EAGAIN) || (e == ENOMEM) || (e == EFAULT) || - (e == EBUSY) || (e == EEXIST) || - (e == EXDEV) || (e == ENOTDIR) || (e == EISDIR) || - (e == EMFILE) || (e == ENOTTY) || (e == ETXTBSY) || - (e == EFBIG) || (e == ENOSPC) || (e == EPIPE)); -#else - return FALSE; -#endif -} - - -int ErrnoCategory_UnAvailable (int e) -{ -#if defined(HAVE_ERRNO_H) || defined(HAVE_SYS_ERRNO_H) - return ((e == ENOENT) || (e == ESRCH) || (e == ENXIO) || - (e == ECHILD) || (e == ENOTBLK) || (e == ENODEV) || - (e == ENOTDIR)); -#else - return FALSE; -#endif -} - - -/* - * GetOpenResults - maps errno onto the ISO Modula-2 enumerated - * type, OpenResults. - */ - -openResults -ErrnoCategory_GetOpenResults (int e) -{ - if (e == 0) - return opened; -#if defined(HAVE_ERRNO_H) || defined(HAVE_SYS_ERRNO_H) - switch (e) { - case EPERM: return wrongPermissions; break; - case ENOENT: return noSuchFile; break; - case ENXIO: return noSuchFile; break; - case EACCES: return wrongPermissions; break; - case ENOTBLK: return wrongFileType; break; - case EEXIST: return fileExists; break; - case ENODEV: return noSuchFile; break; - case ENOTDIR: return wrongFileType; break; - case EISDIR: return wrongFileType; break; - case EINVAL: return wrongFlags; break; - case ENFILE: return tooManyOpen; break; - case EMFILE: return tooManyOpen; break; - case ENOTTY: return wrongFileType; break; - case ENOSPC: return noRoomOnDevice; break; - case EROFS: return wrongPermissions; break; - - default: - return otherProblem; - } -#else - return otherProblem; -#endif -} - - -/* - * GNU Modula-2 linking fodder. - */ - -void _M2_ErrnoCategory_init (void) -{ -} - -void _M2_ErrnoCategory_finish (void) -{ -} diff --git a/libgm2/libm2iso/ErrnoCategory.c b/libgm2/libm2iso/ErrnoCategory.c deleted file mode 100644 index ce673135dbe..00000000000 --- a/libgm2/libm2iso/ErrnoCategory.c +++ /dev/null @@ -1,180 +0,0 @@ -/* ErrnoCatogory.cc categorizes values of errno maps onto ChanConsts.h. - -Copyright (C) 2008-2022 Free Software Foundation, Inc. -Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>. - -This file is part of GNU Modula-2. - -GNU Modula-2 is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GNU Modula-2 is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -Under Section 7 of GPL version 3, you are granted additional -permissions described in the GCC Runtime Library Exception, version -3.1, as published by the Free Software Foundation. - -You should have received a copy of the GNU General Public License and -a copy of the GCC Runtime Library Exception along with this program; -see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -<http://www.gnu.org/licenses/>. */ - -#include "config.h" - -#include "ChanConsts.h" - -#if defined(HAVE_ERRNO_H) -#include "errno.h" -#endif - -#if defined(HAVE_SYS_ERRNO_H) -#include "sys/errno.h" -#endif - -#include "m2rts.h" - -#if !defined(FALSE) -#define FALSE (1 == 0) -#endif - -#if !defined(TRUE) -#define TRUE (1 == 1) -#endif - -/* IsErrnoHard - returns TRUE if the value of errno is associated - with a hard device error. */ - -extern "C" int -ErrnoCategory_IsErrnoHard (int e) -{ -#if defined(HAVE_ERRNO_H) || defined(HAVE_SYS_ERRNO_H) - return ((e == EPERM) || (e == ENOENT) || (e == EIO) || (e == ENXIO) - || (e == EACCES) || (e == ENOTBLK) || (e == ENODEV) || (e == EINVAL) - || (e == ENFILE) || (e == EROFS) || (e == EMLINK)); -#else - return FALSE; -#endif -} - -/* IsErrnoSoft - returns TRUE if the value of errno is associated - with a soft device error. */ - -extern "C" int -ErrnoCategory_IsErrnoSoft (int e) -{ -#if defined(HAVE_ERRNO_H) || defined(HAVE_SYS_ERRNO_H) - return ((e == ESRCH) || (e == EINTR) || (e == E2BIG) || (e == ENOEXEC) - || (e == EBADF) || (e == ECHILD) || (e == EAGAIN) || (e == ENOMEM) - || (e == EFAULT) || (e == EBUSY) || (e == EEXIST) || (e == EXDEV) - || (e == ENOTDIR) || (e == EISDIR) || (e == EMFILE) || (e == ENOTTY) - || (e == ETXTBSY) || (e == EFBIG) || (e == ENOSPC) || (e == EPIPE)); -#else - return FALSE; -#endif -} - -extern "C" int -ErrnoCategory_UnAvailable (int e) -{ -#if defined(HAVE_ERRNO_H) || defined(HAVE_SYS_ERRNO_H) - return ((e == ENOENT) || (e == ESRCH) || (e == ENXIO) || (e == ECHILD) - || (e == ENOTBLK) || (e == ENODEV) || (e == ENOTDIR)); -#else - return FALSE; -#endif -} - -/* GetOpenResults - maps errno onto the ISO Modula-2 enumerated type, - OpenResults. */ - -extern "C" openResults -ErrnoCategory_GetOpenResults (int e) -{ - if (e == 0) - return opened; -#if defined(HAVE_ERRNO_H) || defined(HAVE_SYS_ERRNO_H) - switch (e) - { - case EPERM: - return wrongPermissions; - break; - case ENOENT: - return noSuchFile; - break; - case ENXIO: - return noSuchFile; - break; - case EACCES: - return wrongPermissions; - break; - case ENOTBLK: - return wrongFileType; - break; - case EEXIST: - return fileExists; - break; - case ENODEV: - return noSuchFile; - break; - case ENOTDIR: - return wrongFileType; - break; - case EISDIR: - return wrongFileType; - break; - case EINVAL: - return wrongFlags; - break; - case ENFILE: - return tooManyOpen; - break; - case EMFILE: - return tooManyOpen; - break; - case ENOTTY: - return wrongFileType; - break; - case ENOSPC: - return noRoomOnDevice; - break; - case EROFS: - return wrongPermissions; - break; - - default: - return otherProblem; - } -#else - return otherProblem; -#endif -} - -/* GNU Modula-2 linking fodder. */ - -extern "C" void -_M2_ErrnoCategory_init (int, char *argv[], char *env[]) -{ -} - -extern "C" void -_M2_ErrnoCategory_finish (int, char *argv[], char *env[]) -{ -} - -extern "C" void -_M2_ErrnoCategory_dep (void) -{ -} - -struct _M2_ErrnoCategory_ctor { _M2_ErrnoCategory_ctor (); } _M2_ErrnoCategory_ctor; - -_M2_ErrnoCategory_ctor::_M2_ErrnoCategory_ctor (void) -{ - M2RTS_RegisterModule ("ErrnoCategory", _M2_ErrnoCategory_init, _M2_ErrnoCategory_finish, - _M2_ErrnoCategory_dep); -} diff --git a/libgm2/libm2iso/RTco.c b/libgm2/libm2iso/RTco.c deleted file mode 100644 index f97e7dad299..00000000000 --- a/libgm2/libm2iso/RTco.c +++ /dev/null @@ -1,467 +0,0 @@ -/* RTco.c provides minimal access to thread primitives. - -Copyright (C) 2019-2022 Free Software Foundation, Inc. -Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>. - -This file is part of GNU Modula-2. - -GNU Modula-2 is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GNU Modula-2 is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -Under Section 7 of GPL version 3, you are granted additional -permissions described in the GCC Runtime Library Exception, version -3.1, as published by the Free Software Foundation. - -You should have received a copy of the GNU General Public License and -a copy of the GCC Runtime Library Exception along with this program; -see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -<http://www.gnu.org/licenses/>. */ - -#include "config.h" -#include <unistd.h> -#include <pthread.h> -#include <sys/select.h> -#include <stdlib.h> -#include <m2rts.h> - -// #define TRACEON - -#define POOL -#define SEM_POOL 10000 -#define THREAD_POOL 10000 - -#define _GTHREAD_USE_COND_INIT_FUNC -#include "gthr.h" - -/* Ensure that ANSI conform stdio is used. This needs to be set - before any system header file is included. */ -#if defined __MINGW32__ -#define _POSIX 1 -#define gm2_printf gnu_printf -#else -#define gm2_printf __printf__ -#endif - -#if !defined(TRUE) -#define TRUE (1 == 1) -#endif - -#if !defined(FALSE) -#define FALSE (1 == 0) -#endif - -#if defined(TRACEON) -#define tprintf printf -#else -/* sizeof is not evaluated. */ -#define tprintf (void)sizeof -#endif - -typedef struct threadCB_s -{ - void (*proc) (void); - int execution; - pthread_t p; - int tid; - unsigned int interruptLevel; -} threadCB; - - -typedef struct threadSem_s -{ - __gthread_mutex_t mutex; - __gthread_cond_t counter; - int waiting; - int sem_value; -} threadSem; - -static unsigned int nThreads = 0; -static threadCB *threadArray = NULL; -static unsigned int nSemaphores = 0; -static threadSem **semArray = NULL; - -/* These are used to lock the above module data structures. */ -static threadSem lock; -static int initialized = FALSE; - - -extern "C" int RTco_init (void); - - -extern "C" void -_M2_RTco_dep (void) -{ -} - -extern "C" void -_M2_RTco_init (int argc, char *argv[], char *envp[]) -{ -} - -extern "C" void -_M2_RTco_finish (int argc, char *argv[], char *envp[]) -{ -} - -static void -initSem (threadSem *sem, int value) -{ - __GTHREAD_COND_INIT_FUNCTION (&sem->counter); - __GTHREAD_MUTEX_INIT_FUNCTION (&sem->mutex); - sem->waiting = FALSE; - sem->sem_value = value; -} - -static void -waitSem (threadSem *sem) -{ - __gthread_mutex_lock (&sem->mutex); - if (sem->sem_value == 0) - { - sem->waiting = TRUE; - __gthread_cond_wait (&sem->counter, &sem->mutex); - sem->waiting = FALSE; - } - else - sem->sem_value--; - __gthread_mutex_unlock (&sem->mutex); -} - -static void -signalSem (threadSem *sem) -{ - __gthread_mutex_unlock (&sem->mutex); - if (sem->waiting) - __gthread_cond_signal (&sem->counter); - else - sem->sem_value++; - __gthread_mutex_unlock (&sem->mutex); -} - -void stop (void) {} - -extern "C" void -RTco_wait (int sid) -{ - RTco_init (); - tprintf ("wait %d\n", sid); - waitSem (semArray[sid]); -} - -extern "C" void -RTco_signal (int sid) -{ - RTco_init (); - tprintf ("signal %d\n", sid); - signalSem (semArray[sid]); -} - -static int -newSem (void) -{ -#if defined(POOL) - semArray[nSemaphores] - = (threadSem *)malloc (sizeof (threadSem)); - nSemaphores += 1; - if (nSemaphores == SEM_POOL) - M2RTS_Halt (__FILE__, __LINE__, __FUNCTION__, - "too many semaphores created"); -#else - threadSem *sem - = (threadSem *)malloc (sizeof (threadSem)); - - /* We need to be careful when using realloc as the lock (semaphore) - operators use the semaphore address. So we keep an array of pointer - to semaphores. */ - if (nSemaphores == 0) - { - semArray = (threadSem **)malloc (sizeof (sem)); - nSemaphores = 1; - } - else - { - nSemaphores += 1; - semArray = (threadSem **)realloc (semArray, - sizeof (sem) * nSemaphores); - } - semArray[nSemaphores - 1] = sem; -#endif - return nSemaphores - 1; -} - -static int -initSemaphore (int value) -{ - int sid = newSem (); - - initSem (semArray[sid], value); - tprintf ("%d = initSemaphore (%d)\n", sid, value); - return sid; -} - -extern "C" int -RTco_initSemaphore (int value) -{ - int sid; - - RTco_init (); - waitSem (&lock); - sid = initSemaphore (value); - signalSem (&lock); - return sid; -} - -/* signalThread signal the semaphore associated with thread tid. */ - -extern "C" void -RTco_signalThread (int tid) -{ - int sem; - RTco_init (); - tprintf ("signalThread %d\n", tid); - waitSem (&lock); - sem = threadArray[tid].execution; - signalSem (&lock); - RTco_signal (sem); -} - -/* waitThread wait on the semaphore associated with thread tid. */ - -extern "C" void -RTco_waitThread (int tid) -{ - RTco_init (); - tprintf ("waitThread %d\n", tid); - RTco_wait (threadArray[tid].execution); -} - -extern "C" int -currentThread (void) -{ - int tid; - - for (tid = 0; tid < nThreads; tid++) - if (pthread_self () == threadArray[tid].p) - return tid; - M2RTS_Halt (__FILE__, __LINE__, __FUNCTION__, - "failed to find currentThread"); -} - -extern "C" int -RTco_currentThread (void) -{ - int tid; - - RTco_init (); - waitSem (&lock); - tid = currentThread (); - tprintf ("currentThread %d\n", tid); - signalSem (&lock); - return tid; -} - -/* currentInterruptLevel returns the interrupt level of the current thread. */ - -extern "C" unsigned int -RTco_currentInterruptLevel (void) -{ - RTco_init (); - tprintf ("currentInterruptLevel %d\n", - threadArray[RTco_currentThread ()].interruptLevel); - return threadArray[RTco_currentThread ()].interruptLevel; -} - -/* turninterrupts returns the old interrupt level and assigns the - interrupt level to newLevel. */ - -extern "C" unsigned int -RTco_turnInterrupts (unsigned int newLevel) -{ - int tid = RTco_currentThread (); - unsigned int old = RTco_currentInterruptLevel (); - - tprintf ("turnInterrupts from %d to %d\n", old, newLevel); - waitSem (&lock); - threadArray[tid].interruptLevel = newLevel; - signalSem (&lock); - return old; -} - -static void -never (void) -{ - M2RTS_Halt (__FILE__, __LINE__, __FUNCTION__, - "the main thread should never call here"); -} - -static void * -execThread (void *t) -{ - threadCB *tp = (threadCB *)t; - - tprintf ("exec thread tid = %d function = 0x%p arg = 0x%p\n", tp->tid, - tp->proc, t); - RTco_waitThread ( - tp->tid); /* Forcing this thread to block, waiting to be scheduled. */ - tprintf (" exec thread [%d] function = 0x%p arg = 0x%p\n", tp->tid, - tp->proc, t); - tp->proc (); /* Now execute user procedure. */ -#if 0 - M2RTS_CoroutineException ( __FILE__, __LINE__, __COLUMN__, __FUNCTION__, "coroutine finishing"); -#endif - M2RTS_Halt (__FILE__, __LINE__, __FUNCTION__, "execThread should never finish"); - return NULL; -} - -static int -newThread (void) -{ -#if defined(POOL) - nThreads += 1; - if (nThreads == THREAD_POOL) - M2RTS_Halt (__FILE__, __LINE__, __FUNCTION__, "too many threads created"); - return nThreads - 1; -#else - if (nThreads == 0) - { - threadArray = (threadCB *)malloc (sizeof (threadCB)); - nThreads = 1; - } - else - { - nThreads += 1; - threadArray - = (threadCB *)realloc (threadArray, sizeof (threadCB) * nThreads); - } - return nThreads - 1; -#endif -} - -static int -initThread (void (*proc) (void), unsigned int stackSize, - unsigned int interrupt) -{ - int tid = newThread (); - pthread_attr_t attr; - int result; - - threadArray[tid].proc = proc; - threadArray[tid].tid = tid; - threadArray[tid].execution = initSemaphore (0); - threadArray[tid].interruptLevel = interrupt; - - /* set thread creation attributes. */ - result = pthread_attr_init (&attr); - if (result != 0) - M2RTS_Halt (__FILE__, __LINE__, __FUNCTION__, - "failed to create thread attribute"); - - if (stackSize > 0) - { - result = pthread_attr_setstacksize (&attr, stackSize); - if (result != 0) - M2RTS_Halt (__FILE__, __LINE__, __FUNCTION__, - "failed to set stack size attribute"); - } - - tprintf ("initThread [%d] function = 0x%p (arg = 0x%p)\n", tid, proc, - (void *)&threadArray[tid]); - result = pthread_create (&threadArray[tid].p, &attr, execThread, - (void *)&threadArray[tid]); - if (result != 0) - M2RTS_Halt (__FILE__, __LINE__, __FUNCTION__, "thread_create failed"); - tprintf (" created thread [%d] function = 0x%p 0x%p\n", tid, proc, - (void *)&threadArray[tid]); - return tid; -} - -extern "C" int -RTco_initThread (void (*proc) (void), unsigned int stackSize, - unsigned int interrupt) -{ - int tid; - - RTco_init (); - waitSem (&lock); - tid = initThread (proc, stackSize, interrupt); - signalSem (&lock); - return tid; -} - -/* transfer unlocks thread p2 and locks the current thread. p1 is - updated with the current thread id. */ - -extern "C" void -RTco_transfer (int *p1, int p2) -{ - int tid = currentThread (); - - if (!initialized) - M2RTS_Halt ( - __FILE__, __LINE__, __FUNCTION__, - "cannot transfer to a process before the process has been created"); - if (tid == p2) - { - /* error. */ - M2RTS_Halt (__FILE__, __LINE__, __FUNCTION__, - "attempting to transfer to ourself"); - } - else - { - *p1 = tid; - tprintf ("start, context switching from: %d to %d\n", tid, p2); - RTco_signalThread (p2); - RTco_waitThread (tid); - tprintf ("end, context back to %d\n", tid); - } -} - -extern "C" int -RTco_select (int p1, fd_set *p2, fd_set *p3, fd_set *p4, const timespec *p5) -{ - tprintf ("[%x] RTco.select (...)\n", pthread_self ()); - return pselect (p1, p2, p3, p4, p5, NULL); -} - -extern "C" int -RTco_init (void) -{ - if (!initialized) - { - int tid; - - tprintf ("RTco initialized\n"); - initSem (&lock, 0); - /* Create initial thread container. */ -#if defined(POOL) - threadArray = (threadCB *)malloc (sizeof (threadCB) * THREAD_POOL); - semArray = (threadSem **)malloc (sizeof (threadSem *) * SEM_POOL); -#endif - tid = newThread (); /* For the current initial thread. */ - threadArray[tid].tid = tid; - threadArray[tid].execution = initSemaphore (0); - threadArray[tid].p = pthread_self (); - threadArray[tid].interruptLevel = 0; - threadArray[tid].proc - = never; /* This shouldn't happen as we are already running. */ - initialized = TRUE; - tprintf ("RTco initialized completed\n"); - signalSem (&lock); - } - return 0; -} - -struct _M2_RTco_ctor { _M2_RTco_ctor (); } _M2_RTco_ctor; - -_M2_RTco_ctor::_M2_RTco_ctor (void) -{ - M2RTS_RegisterModule ("RTco", _M2_RTco_init, _M2_RTco_finish, - _M2_RTco_dep); -} diff --git a/libgm2/libm2pim/SysExceptions.c b/libgm2/libm2pim/SysExceptions.c deleted file mode 100644 index 859bb6303eb..00000000000 --- a/libgm2/libm2pim/SysExceptions.c +++ /dev/null @@ -1,259 +0,0 @@ -/* SysExceptions.c configure the signals to create m2 exceptions. - -Copyright (C) 2009-2022 Free Software Foundation, Inc. -Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>. - -This file is part of GNU Modula-2. - -GNU Modula-2 is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GNU Modula-2 is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -Under Section 7 of GPL version 3, you are granted additional -permissions described in the GCC Runtime Library Exception, version -3.1, as published by the Free Software Foundation. - -You should have received a copy of the GNU General Public License and -a copy of the GCC Runtime Library Exception along with this program; -see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -<http://www.gnu.org/licenses/>. */ - -#include <config.h> - -#if defined(HAVE_SIGNAL_H) -#include <signal.h> -#endif - -#if defined(HAVE_ERRNO_H) -#include <errno.h> -#endif - -#if defined(HAVE_SYS_ERRNO_H) -#include <sys/errno.h> -#endif - -#if defined(HAVE_STDIO_H) -#include <stdio.h> -#endif - -#include "m2rts.h" - -#if 0 -/* Signals. */ -#define SIGHUP 1 /* Hangup (POSIX). */ -#define SIGINT 2 /* Interrupt (ANSI). */ -#define SIGQUIT 3 /* Quit (POSIX). */ -#define SIGILL 4 /* Illegal instruction (ANSI). */ -#define SIGTRAP 5 /* Trace trap (POSIX). */ -#define SIGABRT 6 /* Abort (ANSI). */ -#define SIGIOT 6 /* IOT trap (4.2 BSD). */ -#define SIGBUS 7 /* BUS error (4.2 BSD). */ -#define SIGFPE 8 /* Floating-point exception (ANSI). */ -#define SIGKILL 9 /* Kill, unblockable (POSIX). */ -#define SIGUSR1 10 /* User-defined signal 1 (POSIX). */ -#define SIGSEGV 11 /* Segmentation violation (ANSI). */ -#define SIGUSR2 12 /* User-defined signal 2 (POSIX). */ -#define SIGPIPE 13 /* Broken pipe (POSIX). */ -#define SIGALRM 14 /* Alarm clock (POSIX). */ -#define SIGTERM 15 /* Termination (ANSI). */ -#define SIGSTKFLT 16 /* Stack fault. */ -#define SIGCLD SIGCHLD /* Same as SIGCHLD (System V). */ -#define SIGCHLD 17 /* Child status has changed (POSIX). */ -#define SIGCONT 18 /* Continue (POSIX). */ -#define SIGSTOP 19 /* Stop, unblockable (POSIX). */ -#define SIGTSTP 20 /* Keyboard stop (POSIX). */ -#define SIGTTIN 21 /* Background read from tty (POSIX). */ -#define SIGTTOU 22 /* Background write to tty (POSIX). */ -#define SIGURG 23 /* Urgent condition on socket (4.2 BSD). */ -#define SIGXCPU 24 /* CPU limit exceeded (4.2 BSD). */ -#define SIGXFSZ 25 /* File size limit exceeded (4.2 BSD). */ -#define SIGVTALRM 26 /* Virtual alarm clock (4.2 BSD). */ -#define SIGPROF 27 /* Profiling alarm clock (4.2 BSD). */ -#define SIGWINCH 28 /* Window size change (4.3 BSD, Sun). */ -#define SIGPOLL SIGIO /* Pollable event occurred (System V). */ -#define SIGIO 29 /* I/O now possible (4.2 BSD). */ -#define SIGPWR 30 /* Power failure restart (System V). */ -#define SIGSYS 31 /* Bad system call. */ -#define SIGUNUSED 31 - -/* The list of Modula-2 exceptions is shown below */ - - (indexException, rangeException, caseSelectException, invalidLocation, - functionException, wholeValueException, wholeDivException, realValueException, - realDivException, complexValueException, complexDivException, protException, - sysException, coException, exException - ); - -#endif - -/* Note: wholeDivException and realDivException are caught by SIGFPE - and depatched to the appropriate Modula-2 runtime routine upon - testing FPE_INTDIV or FPE_FLTDIV. realValueException is also - caught by SIGFPE and dispatched by testing FFE_FLTOVF or FPE_FLTUND - or FPE_FLTRES or FPE_FLTINV. indexException is caught by SIGFPE - and dispatched by FPE_FLTSUB. */ - -#if defined(HAVE_SIGNAL_H) -static struct sigaction sigbus; -static struct sigaction sigfpe; -static struct sigaction sigsegv; - -static void (*indexProc) (void *); -static void (*rangeProc) (void *); -static void (*assignmentrangeProc) (void *); -static void (*caseProc) (void *); -static void (*invalidlocProc) (void *); -static void (*functionProc) (void *); -static void (*wholevalueProc) (void *); -static void (*wholedivProc) (void *); -static void (*realvalueProc) (void *); -static void (*realdivProc) (void *); -static void (*complexvalueProc) (void *); -static void (*complexdivProc) (void *); -static void (*protectionProc) (void *); -static void (*systemProc) (void *); -static void (*coroutineProc) (void *); -static void (*exceptionProc) (void *); - -static void -sigbusDespatcher (int signum, siginfo_t *info, void *ucontext) -{ - switch (signum) - { - - case SIGSEGV: - case SIGBUS: - if (info) - (*invalidlocProc) (info->si_addr); - break; - default: - perror ("not expecting to arrive here with this signal"); - } -} - -static void -sigfpeDespatcher (int signum, siginfo_t *info, void *ucontext) -{ - switch (signum) - { - - case SIGFPE: - if (info) - { - if (info->si_code | FPE_INTDIV) - (*wholedivProc) (info->si_addr); /* Integer divide by zero. */ - if (info->si_code | FPE_INTOVF) - (*wholevalueProc) (info->si_addr); /* Integer overflow. */ - if (info->si_code | FPE_FLTDIV) - (*realdivProc) (info->si_addr); /* Floating-point divide by zero. */ - if (info->si_code | FPE_FLTOVF) - (*realvalueProc) (info->si_addr); /* Floating-point overflow. */ - if (info->si_code | FPE_FLTUND) - (*realvalueProc) (info->si_addr); /* Floating-point underflow. */ - if (info->si_code | FPE_FLTRES) - (*realvalueProc) ( - info->si_addr); /* Floating-point inexact result. */ - if (info->si_code | FPE_FLTINV) - (*realvalueProc) ( - info->si_addr); /* Floating-point invalid result. */ - if (info->si_code | FPE_FLTSUB) - (*indexProc) (info->si_addr); /* Subscript out of range. */ - } - break; - default: - perror ("not expecting to arrive here with this signal"); - } -} - -extern "C" void -SysExceptions_InitExceptionHandlers ( - void (*indexf) (void *), void (*range) (void *), void (*casef) (void *), - void (*invalidloc) (void *), void (*function) (void *), - void (*wholevalue) (void *), void (*wholediv) (void *), - void (*realvalue) (void *), void (*realdiv) (void *), - void (*complexvalue) (void *), void (*complexdiv) (void *), - void (*protection) (void *), void (*systemf) (void *), - void (*coroutine) (void *), void (*exception) (void *)) -{ - struct sigaction old; - - indexProc = indexf; - rangeProc = range; - caseProc = casef; - invalidlocProc = invalidloc; - functionProc = function; - wholevalueProc = wholevalue; - wholedivProc = wholediv; - realvalueProc = realvalue; - realdivProc = realdiv; - complexvalueProc = complexvalue; - complexdivProc = complexdiv; - protectionProc = protection; - systemProc = systemf; - coroutineProc = coroutine; - exceptionProc = exception; - - sigbus.sa_sigaction = sigbusDespatcher; - sigbus.sa_flags = (SA_SIGINFO); - sigemptyset (&sigbus.sa_mask); - - if (sigaction (SIGBUS, &sigbus, &old) != 0) - perror ("unable to install the sigbus signal handler"); - - sigsegv.sa_sigaction = sigbusDespatcher; - sigsegv.sa_flags = (SA_SIGINFO); - sigemptyset (&sigsegv.sa_mask); - - if (sigaction (SIGSEGV, &sigsegv, &old) != 0) - perror ("unable to install the sigsegv signal handler"); - - sigfpe.sa_sigaction = sigfpeDespatcher; - sigfpe.sa_flags = (SA_SIGINFO); - sigemptyset (&sigfpe.sa_mask); - - if (sigaction (SIGFPE, &sigfpe, &old) != 0) - perror ("unable to install the sigfpe signal handler"); -} - -#else -extern "C" void -SysExceptions_InitExceptionHandlers (void *indexf, void *range, void *casef, - void *invalidloc, void *function, - void *wholevalue, void *wholediv, - void *realvalue, void *realdiv, - void *complexvalue, void *complexdiv, - void *protection, void *systemf, - void *coroutine, void *exception) -{ -} -#endif - - -extern "C" void -_M2_SysExceptions_init (int, char *[], char *[]) -{ -} - -extern "C" void -_M2_SysExceptions_finish (int, char *[], char *[]) -{ -} - -extern "C" void -_M2_SysExceptions_dep (void) -{ -} - -struct _M2_SysExceptions_ctor { _M2_SysExceptions_ctor (); } _M2_SysExceptions_ctor; - -_M2_SysExceptions_ctor::_M2_SysExceptions_ctor (void) -{ - M2RTS_RegisterModule ("SysExceptions", _M2_SysExceptions_init, _M2_SysExceptions_finish, - _M2_SysExceptions_dep); -} diff --git a/libgm2/libm2pim/errno.c b/libgm2/libm2pim/errno.c deleted file mode 100644 index e1a5400174e..00000000000 --- a/libgm2/libm2pim/errno.c +++ /dev/null @@ -1,70 +0,0 @@ -/* errno.c provide access to the errno value. - -Copyright (C) 2009-2022 Free Software Foundation, Inc. -Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>. - -This file is part of GNU Modula-2. - -GNU Modula-2 is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GNU Modula-2 is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -Under Section 7 of GPL version 3, you are granted additional -permissions described in the GCC Runtime Library Exception, version -3.1, as published by the Free Software Foundation. - -You should have received a copy of the GNU General Public License and -a copy of the GCC Runtime Library Exception along with this program; -see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -<http://www.gnu.org/licenses/>. */ - -#include <config.h> - -#if defined(HAVE_SYS_ERRNO_H) -#include <sys/errno.h> -#endif - -#if defined(HAVE_ERRNO_H) -#include <errno.h> -#endif - -#include "m2rts.h" - -extern "C" int -errno_geterrno (void) -{ -#if defined(HAVE_ERRNO_H) || defined(HAVE_SYS_ERRNO_H) - return errno; -#else - return -1; -#endif -} - -extern "C" void -_M2_errno_init (int, char *[], char *[]) -{ -} - -extern "C" void -_M2_errno_finish (int, char *[], char *[]) -{ -} - -extern "C" void -_M2_errno_dep (void) -{ -} - -struct _M2_errno_ctor { _M2_errno_ctor (); } _M2_errno_ctor; - -_M2_errno_ctor::_M2_errno_ctor (void) -{ - M2RTS_RegisterModule ("errno", _M2_errno_init, _M2_errno_finish, - _M2_errno_dep); -} diff --git a/libgm2/libm2pim/termios.c b/libgm2/libm2pim/termios.c deleted file mode 100644 index d3b3ebcf589..00000000000 --- a/libgm2/libm2pim/termios.c +++ /dev/null @@ -1,1987 +0,0 @@ -/* termios.cc provide access to the terminal. - -Copyright (C) 2010-2022 Free Software Foundation, Inc. -Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>. - -This file is part of GNU Modula-2. - -GNU Modula-2 is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GNU Modula-2 is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -Under Section 7 of GPL version 3, you are granted additional -permissions described in the GCC Runtime Library Exception, version -3.1, as published by the Free Software Foundation. - -You should have received a copy of the GNU General Public License and -a copy of the GCC Runtime Library Exception along with this program; -see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -<http://www.gnu.org/licenses/>. */ - -#include <config.h> -#include <m2rts.h> - -#if defined(HAVE_STDIO_H) -#include <stdio.h> -#endif -#if defined(HAVE_STDARG_H) -#include <stdarg.h> -#endif -#if defined(HAVE_STDLIB_H) -#include <stdlib.h> -#endif -#if defined(HAVE_STRING_H) -#include <string.h> -#endif -#if defined(HAVE_STRINGS_H) -#include <strings.h> -#endif - -#ifdef TERMIOS_NEEDS_XOPEN_SOURCE -#define _XOPEN_SOURCE -#endif - -#if defined(HAVE_SYS_TYPES_H) -#include <sys/types.h> -#endif - -#if defined(HAVE_TERMIOS_H) -#include <termios.h> -#endif - -void _M2_termios_init (void); -void _M2_termios_finish (void); - -#if defined(HAVE_TERMIOS_H) - -#define EXPORT(X) termios##_##X - -typedef enum { - vintr, - vquit, - verase, - vkill, - veof, - vtime, - vmin, - vswtc, - vstart, - vstop, - vsusp, - veol, - vreprint, - vdiscard, - vwerase, - vlnext, - veol2 -} ControlChar; - -typedef enum { - /* Input flag bits. */ - ignbrk, - ibrkint, - ignpar, - iparmrk, - inpck, - istrip, - inlcr, - igncr, - icrnl, - iuclc, - ixon, - ixany, - ixoff, - imaxbel, - /* Output flag bits. */ - opost, - olcuc, - onlcr, - ocrnl, - onocr, - onlret, - ofill, - ofdel, - onl0, - onl1, - ocr0, - ocr1, - ocr2, - ocr3, - otab0, - otab1, - otab2, - otab3, - obs0, - obs1, - off0, - off1, - ovt0, - ovt1, - /* Baud rate. */ - b0, - b50, - b75, - b110, - b135, - b150, - b200, - b300, - b600, - b1200, - b1800, - b2400, - b4800, - b9600, - b19200, - b38400, - b57600, - b115200, - b240400, - b460800, - b500000, - b576000, - b921600, - b1000000, - b1152000, - b1500000, - b2000000, - b2500000, - b3000000, - b3500000, - b4000000, - maxbaud, - crtscts, - /* Character size. */ - cs5, - cs6, - cs7, - cs8, - cstopb, - cread, - parenb, - parodd, - hupcl, - clocal, - /* Local flags. */ - lisig, - licanon, - lxcase, - lecho, - lechoe, - lechok, - lechonl, - lnoflsh, - ltopstop, - lechoctl, - lechoprt, - lechoke, - lflusho, - lpendin, - liexten -} Flag; - -/* Prototypes. */ -extern "C" void *EXPORT (InitTermios) (void); -extern "C" void *EXPORT (KillTermios) (struct termios *p); -extern "C" int EXPORT (cfgetospeed) (struct termios *t); -extern "C" int EXPORT (cfgetispeed) (struct termios *t); -extern "C" int EXPORT (cfsetospeed) (struct termios *t, unsigned int b); -extern "C" int EXPORT (cfsetispeed) (struct termios *t, unsigned int b); -extern "C" int EXPORT (cfsetspeed) (struct termios *t, unsigned int b); -extern "C" int EXPORT (tcgetattr) (int fd, struct termios *t); -extern "C" int EXPORT (tcsetattr) (int fd, int option, struct termios *t); -extern "C" void EXPORT (cfmakeraw) (struct termios *t); -extern "C" int EXPORT (tcsendbreak) (int fd, int duration); -extern "C" int EXPORT (tcdrain) (int fd); -extern "C" int EXPORT (tcflushi) (int fd); -extern "C" int EXPORT (tcflusho) (int fd); -extern "C" int EXPORT (tcflushio) (int fd); -extern "C" int EXPORT (tcflowoni) (int fd); -extern "C" int EXPORT (tcflowoffi) (int fd); -extern "C" int EXPORT (tcflowono) (int fd); -extern "C" int EXPORT (tcflowoffo) (int fd); -extern "C" int EXPORT (GetFlag) (struct termios *t, Flag f, int *b); -extern "C" int EXPORT (SetFlag) (struct termios *t, Flag f, int b); -extern "C" int EXPORT (GetChar) (struct termios *t, ControlChar c, char *ch); -extern "C" int EXPORT (SetChar) (struct termios *t, ControlChar c, char ch); -extern "C" int EXPORT (tcsnow) (void); -extern "C" int EXPORT (tcsflush) (void); -extern "C" int EXPORT (tcsdrain) (void); -extern "C" int doSetUnset (unsigned int *bitset, unsigned int mask, int value); - -/* InitTermios new data structure. */ - -extern "C" void -*EXPORT (InitTermios) (void) -{ - struct termios *p = (struct termios *)malloc (sizeof (struct termios)); - - memset (p, 0, sizeof (struct termios)); - return p; -} - -/* KillTermios delete data structure. */ - -extern "C" void* -EXPORT (KillTermios) (struct termios *p) -{ - free (p); - return NULL; -} - -/* tcsnow return the value of TCSANOW. */ - -extern "C" int -EXPORT (tcsnow) (void) { return TCSANOW; } - -/* tcsdrain return the value of TCSADRAIN. */ - -extern "C" int -EXPORT (tcsdrain) (void) { return TCSADRAIN; } - -/* tcsflush return the value of TCSAFLUSH. */ - -extern "C" int -EXPORT (tcsflush) (void) { return TCSAFLUSH; } - -/* cfgetospeed return output baud rate. */ - -extern "C" int -EXPORT (cfgetospeed) (struct termios *t) { return cfgetospeed (t); } - -/* cfgetispeed return input baud rate. */ - -extern "C" int -EXPORT (cfgetispeed) (struct termios *t) { return cfgetispeed (t); } - -/* cfsetospeed set output baud rate. */ - -extern "C" int -EXPORT (cfsetospeed) (struct termios *t, unsigned int b) -{ - return cfsetospeed (t, b); -} - -/* cfsetispeed set input baud rate. */ - -extern "C" int -EXPORT (cfsetispeed) (struct termios *t, unsigned int b) -{ - return cfsetispeed (t, b); -} - -/* cfsetspeed set input and output baud rate. */ - -extern "C" int -EXPORT (cfsetspeed) (struct termios *t, unsigned int b) -{ - int val = cfsetispeed (t, b); - if (val == 0) - return cfsetospeed (t, b); - cfsetospeed (t, b); - return val; -} - -/* tcgetattr get state of, fd, into, t. */ - -extern "C" int -EXPORT (tcgetattr) (int fd, struct termios *t) -{ - return tcgetattr (fd, t); -} - -/* tcsetattr set state of, fd, to, t, using option. */ - -int EXPORT (tcsetattr) (int fd, int option, struct termios *t) -{ - return tcsetattr (fd, option, t); -} - -/* cfmakeraw sets the terminal to raw mode. */ - -extern "C" void -EXPORT (cfmakeraw) (struct termios *t) -{ -#if defined(HAVE_CFMAKERAW) - return cfmakeraw (t); -#endif -} - -/* tcsendbreak send zero bits for duration. */ - -extern "C" int -EXPORT (tcsendbreak) (int fd, int duration) -{ - return tcsendbreak (fd, duration); -} - -/* tcdrain waits for pending output to be written on, fd. */ - -extern "C" int -EXPORT (tcdrain) (int fd) { return tcdrain (fd); } - -/* tcflushi flush input. */ - -extern "C" int -EXPORT (tcflushi) (int fd) -{ -#if defined(TCIFLUSH) - return tcflush (fd, TCIFLUSH); -#else - return 1; -#endif -} - -/* tcflusho flush output. */ - -extern "C" int -EXPORT (tcflusho) (int fd) -{ -#if defined(TCOFLUSH) - return tcflush (fd, TCOFLUSH); -#else - return 1; -#endif -} - -/* tcflushio flush input and output. */ - -extern "C" int -EXPORT (tcflushio) (int fd) -{ -#if defined(TCIOFLUSH) - return tcflush (fd, TCIOFLUSH); -#else - return 1; -#endif -} - -/* tcflowoni restart input on, fd. */ - -extern "C" int -EXPORT (tcflowoni) (int fd) -{ -#if defined(TCION) - return tcflow (fd, TCION); -#else - return 1; -#endif -} - -/* tcflowoffi stop input on, fd. */ - -extern "C" int -EXPORT (tcflowoffi) (int fd) -{ -#if defined(TCIOFF) - return tcflow (fd, TCIOFF); -#else - return 1; -#endif -} - -/* tcflowono restart output on, fd. */ - -extern "C" int -EXPORT (tcflowono) (int fd) -{ -#if defined(TCOON) - return tcflow (fd, TCOON); -#else - return 1; -#endif -} - -/* tcflowoffo stop output on, fd. */ - -extern "C" int -EXPORT (tcflowoffo) (int fd) -{ -#if defined(TCOOFF) - return tcflow (fd, TCOOFF); -#else - return 1; -#endif -} - -/* doSetUnset applies mask or undoes mask depending upon value. */ - -extern "C" int -doSetUnset (unsigned int *bitset, unsigned int mask, int value) -{ - if (value) - (*bitset) |= mask; - else - (*bitset) &= (~mask); - return 1; -} - -/* GetFlag sets a flag value from, t, in, b, and returns TRUE - if, t, supports, f. */ - -extern "C" int -EXPORT (GetFlag) (struct termios *t, Flag f, int *b) -{ - switch (f) - { - - case ignbrk: -#if defined(IGNBRK) - *b = ((t->c_iflag & IGNBRK) == IGNBRK); - return 1; -#else - return 0; -#endif - case ibrkint: -#if defined(BRKINT) - *b = ((t->c_iflag & BRKINT) == BRKINT); - return 1; -#else - return 0; -#endif - case ignpar: -#if defined(IGNPAR) - *b = ((t->c_iflag & IGNPAR) == IGNPAR); - return 1; -#else - return 0; -#endif - case iparmrk: -#if defined(PARMRK) - *b = ((t->c_iflag & PARMRK) == PARMRK); - return 1; -#else - return 0; -#endif - case inpck: -#if defined(INPCK) - *b = ((t->c_iflag & INPCK) == INPCK); - return 1; -#else - return 0; -#endif - case istrip: -#if defined(ISTRIP) - *b = ((t->c_iflag & ISTRIP) == ISTRIP); - return 1; -#else - return 0; -#endif - case inlcr: -#if defined(INLCR) - *b = ((t->c_iflag & INLCR) == INLCR); - return 1; -#else - return 0; -#endif - case igncr: -#if defined(IGNCR) - *b = ((t->c_iflag & IGNCR) == IGNCR); - return 1; -#else - return 0; -#endif - case icrnl: -#if defined(ICRNL) - *b = ((t->c_iflag & ICRNL) == ICRNL); - return 1; -#else - return 0; -#endif - case iuclc: -#if defined(IUCLC) - *b = ((t->c_iflag & IUCLC) == IUCLC); - return 1; -#else - return 0; -#endif - case ixon: -#if defined(IXON) - *b = ((t->c_iflag & IXON) == IXON); - return 1; -#else - return 0; -#endif - case ixany: -#if defined(IXANY) - *b = ((t->c_iflag & IXANY) == IXANY); - return 1; -#else - return 0; -#endif - case ixoff: -#if defined(IXOFF) - *b = ((t->c_iflag & IXOFF) == IXOFF); - return 1; -#else - return 0; -#endif - case imaxbel: -#if defined(IMAXBEL) - *b = ((t->c_iflag & IMAXBEL) == IMAXBEL); - return 1; -#else - return 0; -#endif - case opost: -#if defined(OPOST) - *b = ((t->c_oflag & OPOST) == OPOST); - return 1; -#else - return 0; -#endif - case olcuc: -#if defined(OLCUC) - *b = ((t->c_oflag & OLCUC) == OLCUC); - return 1; -#else - return 0; -#endif - case onlcr: -#if defined(ONLCR) - *b = ((t->c_oflag & ONLCR) == ONLCR); - return 1; -#else - return 0; -#endif - case ocrnl: -#if defined(OCRNL) - *b = ((t->c_oflag & OCRNL) == OCRNL); - return 1; -#else - return 0; -#endif - case onocr: -#if defined(ONOCR) - *b = ((t->c_oflag & ONOCR) == ONOCR); - return 1; -#else - return 0; -#endif - case onlret: -#if defined(ONLRET) - *b = ((t->c_oflag & ONLRET) == ONLRET); - return 1; -#else - return 0; -#endif - case ofill: -#if defined(OFILL) - *b = ((t->c_oflag & OFILL) == OFILL); - return 1; -#else - return 0; -#endif - case ofdel: -#if defined(OFDEL) - *b = ((t->c_oflag & OFDEL) == OFDEL); - return 1; -#else - return 0; -#endif - case onl0: -#if defined(NL0) - *b = ((t->c_oflag & NL0) == NL0); - return 1; -#else - return 0; -#endif - case onl1: -#if defined(NL1) - *b = ((t->c_oflag & NL1) == NL1); - return 1; -#else - return 0; -#endif - case ocr0: -#if defined(CR0) - *b = ((t->c_oflag & CR0) == CR0); - return 1; -#else - return 0; -#endif - case ocr1: -#if defined(CR1) - *b = ((t->c_oflag & CR1) == CR1); - return 1; -#else - return 0; -#endif - case ocr2: -#if defined(CR2) - *b = ((t->c_oflag & CR2) == CR2); - return 1; -#else - return 0; -#endif - case ocr3: -#if defined(CR3) - *b = ((t->c_oflag & CR3) == CR3); - return 1; -#else - return 0; -#endif - case otab0: -#if defined(TAB0) - *b = ((t->c_oflag & TAB0) == TAB0); - return 1; -#else - return 0; -#endif - case otab1: -#if defined(TAB1) - *b = ((t->c_oflag & TAB1) == TAB1); - return 1; -#else - return 0; -#endif - case otab2: -#if defined(TAB2) - *b = ((t->c_oflag & TAB2) == TAB2); - return 1; -#else - return 0; -#endif - case otab3: -#if defined(TAB3) - *b = ((t->c_oflag & TAB3) == TAB3); - return 1; -#else - return 0; -#endif - case obs0: -#if defined(BS0) - *b = ((t->c_oflag & BS0) == BS0); - return 1; -#else - return 0; -#endif - case obs1: -#if defined(BS1) - *b = ((t->c_oflag & BS1) == BS1); - return 1; -#else - return 0; -#endif - case off0: -#if defined(FF0) - *b = ((t->c_oflag & FF0) == FF0); - return 1; -#else - return 0; -#endif - case off1: -#if defined(FF1) - *b = ((t->c_oflag & FF1) == FF1); - return 1; -#else - return 0; -#endif - case ovt0: -#if defined(VT0) - *b = ((t->c_oflag & VT0) == VT0); - return 1; -#else - return 0; -#endif - case ovt1: -#if defined(VT1) - *b = ((t->c_oflag & VT1) == VT1); - return 1; -#else - return 0; -#endif - case b0: -#if defined(B0) - *b = ((t->c_cflag & B0) == B0); - return 1; -#else - return 0; -#endif - case b50: -#if defined(B50) - *b = ((t->c_cflag & B50) == B50); - return 1; -#else - return 0; -#endif - case b75: -#if defined(B75) - *b = ((t->c_cflag & B75) == B75); - return 1; -#else - return 0; -#endif - case b110: -#if defined(B110) - *b = ((t->c_cflag & B110) == B110); - return 1; -#else - return 0; -#endif - case b135: -#if defined(B134) - *b = ((t->c_cflag & B134) == B134); - return 1; -#else - return 0; -#endif - case b150: -#if defined(B150) - *b = ((t->c_cflag & B150) == B150); - return 1; -#else - return 0; -#endif - case b200: -#if defined(B200) - *b = ((t->c_cflag & B200) == B200); - return 1; -#else - return 0; -#endif - case b300: -#if defined(B300) - *b = ((t->c_cflag & B300) == B300); - return 1; -#else - return 0; -#endif - case b600: -#if defined(B600) - *b = ((t->c_cflag & B600) == B600); - return 1; -#else - return 0; -#endif - case b1200: -#if defined(B1200) - *b = ((t->c_cflag & B1200) == B1200); - return 1; -#else - return 0; -#endif - case b1800: -#if defined(B1800) - *b = ((t->c_cflag & B1800) == B1800); - return 1; -#else - return 0; -#endif - case b2400: -#if defined(B2400) - *b = ((t->c_cflag & B2400) == B2400); - return 1; -#else - return 0; -#endif - case b4800: -#if defined(B4800) - *b = ((t->c_cflag & B4800) == B4800); - return 1; -#else - return 0; -#endif - case b9600: -#if defined(B9600) - *b = ((t->c_cflag & B9600) == B9600); - return 1; -#else - return 0; -#endif - case b19200: -#if defined(B19200) - *b = ((t->c_cflag & B19200) == B19200); - return 1; -#else - return 0; -#endif - case b38400: -#if defined(B38400) - *b = ((t->c_cflag & B38400) == B38400); - return 1; -#else - return 0; -#endif - case b57600: -#if defined(B57600) - *b = ((t->c_cflag & B57600) == B57600); - return 1; -#else - return 0; -#endif - case b115200: -#if defined(B115200) - *b = ((t->c_cflag & B115200) == B115200); - return 1; -#else - return 0; -#endif - case b240400: -#if defined(B230400) - *b = ((t->c_cflag & B230400) == B230400); - return 1; -#else - return 0; -#endif - case b460800: -#if defined(B460800) - *b = ((t->c_cflag & B460800) == B460800); - return 1; -#else - return 0; -#endif - case b500000: -#if defined(B500000) - *b = ((t->c_cflag & B500000) == B500000); - return 1; -#else - return 0; -#endif - case b576000: -#if defined(B576000) - *b = ((t->c_cflag & B576000) == B576000); - return 1; -#else - return 0; -#endif - case b921600: -#if defined(B921600) - *b = ((t->c_cflag & B921600) == B921600); - return 1; -#else - return 0; -#endif - case b1000000: -#if defined(B1000000) - *b = ((t->c_cflag & B1000000) == B1000000); - return 1; -#else - return 0; -#endif - case b1152000: -#if defined(B1152000) - *b = ((t->c_cflag & B1152000) == B1152000); - return 1; -#else - return 0; -#endif - case b1500000: -#if defined(B1500000) - *b = ((t->c_cflag & B1500000) == B1500000); - return 1; -#else - return 0; -#endif - case b2000000: -#if defined(B2000000) - *b = ((t->c_cflag & B2000000) == B2000000); - return 1; -#else - return 0; -#endif - case b2500000: -#if defined(B2500000) - *b = ((t->c_cflag & B2500000) == B2500000); - return 1; -#else - return 0; -#endif - case b3000000: -#if defined(B3000000) - *b = ((t->c_cflag & B3000000) == B3000000); - return 1; -#else - return 0; -#endif - case b3500000: -#if defined(B3500000) - *b = ((t->c_cflag & B3500000) == B3500000); - return 1; -#else - return 0; -#endif - case b4000000: -#if defined(B4000000) - *b = ((t->c_cflag & B4000000) == B4000000); - return 1; -#else - return 0; -#endif - case maxbaud: -#if defined(MAX) - *b = ((t->c_cflag & __MAX_BAUD) == __MAX_BAUD); - return 1; -#else - return 0; -#endif - case crtscts: -#if defined(CRTSCTS) - *b = ((t->c_cflag & CRTSCTS) == CRTSCTS); - return 1; -#else - return 0; -#endif - case cs5: -#if defined(CS5) - *b = ((t->c_cflag & CS5) == CS5); - return 1; -#else - return 0; -#endif - case cs6: -#if defined(CS6) - *b = ((t->c_cflag & CS6) == CS6); - return 1; -#else - return 0; -#endif - case cs7: -#if defined(CS7) - *b = ((t->c_cflag & CS7) == CS7); - return 1; -#else - return 0; -#endif - case cs8: -#if defined(CS8) - *b = ((t->c_cflag & CS8) == CS8); - return 1; -#else - return 0; -#endif - case cstopb: -#if defined(CSTOPB) - *b = ((t->c_cflag & CSTOPB) == CSTOPB); - return 1; -#else - return 0; -#endif - case cread: -#if defined(CREAD) - *b = ((t->c_cflag & CREAD) == CREAD); - return 1; -#else - return 0; -#endif - case parenb: -#if defined(PARENB) - *b = ((t->c_cflag & PARENB) == PARENB); - return 1; -#else - return 0; -#endif - case parodd: -#if defined(PARODD) - *b = ((t->c_cflag & PARODD) == PARODD); - return 1; -#else - return 0; -#endif - case hupcl: -#if defined(HUPCL) - *b = ((t->c_cflag & HUPCL) == HUPCL); - return 1; -#else - return 0; -#endif - case clocal: -#if defined(CLOCAL) - *b = ((t->c_cflag & CLOCAL) == CLOCAL); - return 1; -#else - return 0; -#endif - case lisig: -#if defined(ISIG) - *b = ((t->c_lflag & ISIG) == ISIG); - return 1; -#else - return 0; -#endif - case licanon: -#if defined(ICANON) - *b = ((t->c_lflag & ICANON) == ICANON); - return 1; -#else - return 0; -#endif - case lxcase: -#if defined(XCASE) - *b = ((t->c_lflag & XCASE) == XCASE); - return 1; -#else - return 0; -#endif - case lecho: -#if defined(ECHO) - *b = ((t->c_lflag & ECHO) == ECHO); - return 1; -#else - return 0; -#endif - case lechoe: -#if defined(ECHOE) - *b = ((t->c_lflag & ECHOE) == ECHOE); - return 1; -#else - return 0; -#endif - case lechok: -#if defined(ECHOK) - *b = ((t->c_lflag & ECHOK) == ECHOK); - return 1; -#else - return 0; -#endif - case lechonl: -#if defined(ECHONL) - *b = ((t->c_lflag & ECHONL) == ECHONL); - return 1; -#else - return 0; -#endif - case lnoflsh: -#if defined(NOFLSH) - *b = ((t->c_lflag & NOFLSH) == NOFLSH); - return 1; -#else - return 0; -#endif - case ltopstop: -#if defined(TOSTOP) - *b = ((t->c_lflag & TOSTOP) == TOSTOP); - return 1; -#else - return 0; -#endif - case lechoctl: -#if defined(ECHOCTL) - *b = ((t->c_lflag & ECHOCTL) == ECHOCTL); - return 1; -#else - return 0; -#endif - case lechoprt: -#if defined(ECHOPRT) - *b = ((t->c_lflag & ECHOPRT) == ECHOPRT); - return 1; -#else - return 0; -#endif - case lechoke: -#if defined(ECHOKE) - *b = ((t->c_lflag & ECHOKE) == ECHOKE); - return 1; -#else - return 0; -#endif - case lflusho: -#if defined(FLUSHO) - *b = ((t->c_lflag & FLUSHO) == FLUSHO); - return 1; -#else - return 0; -#endif - case lpendin: -#if defined(PENDIN) - *b = ((t->c_lflag & PENDIN) == PENDIN); - return 1; -#else - return 0; -#endif - case liexten: -#if defined(IEXTEN) - *b = ((t->c_lflag & IEXTEN) == IEXTEN); - return 1; -#else - return 0; -#endif - } - return 0; -} - -/* SetFlag sets a flag value in, t, to, b, and returns TRUE if - this flag value is supported. */ - -extern "C" int -EXPORT (SetFlag) (struct termios *t, Flag f, int b) -{ - switch (f) - { - - case ignbrk: -#if defined(IGNBRK) - return doSetUnset (&t->c_iflag, IGNBRK, b); -#else - return 0; -#endif - case ibrkint: -#if defined(BRKINT) - return doSetUnset (&t->c_iflag, BRKINT, b); -#else - return 0; -#endif - case ignpar: -#if defined(IGNPAR) - return doSetUnset (&t->c_iflag, IGNPAR, b); -#else - return 0; -#endif - case iparmrk: -#if defined(PARMRK) - return doSetUnset (&t->c_iflag, PARMRK, b); -#else - return 0; -#endif - case inpck: -#if defined(INPCK) - return doSetUnset (&t->c_iflag, INPCK, b); -#else - return 0; -#endif - case istrip: -#if defined(ISTRIP) - return doSetUnset (&t->c_iflag, ISTRIP, b); -#else - return 0; -#endif - case inlcr: -#if defined(INLCR) - return doSetUnset (&t->c_iflag, INLCR, b); -#else - return 0; -#endif - case igncr: -#if defined(IGNCR) - return doSetUnset (&t->c_iflag, IGNCR, b); -#else - return 0; -#endif - case icrnl: -#if defined(ICRNL) - return doSetUnset (&t->c_iflag, ICRNL, b); -#else - return 0; -#endif - case iuclc: -#if defined(IUCLC) - return doSetUnset (&t->c_iflag, IUCLC, b); -#else - return 0; -#endif - case ixon: -#if defined(IXON) - return doSetUnset (&t->c_iflag, IXON, b); -#else - return 0; -#endif - case ixany: -#if defined(IXANY) - return doSetUnset (&t->c_iflag, IXANY, b); -#else - return 0; -#endif - case ixoff: -#if defined(IXOFF) - return doSetUnset (&t->c_iflag, IXOFF, b); -#else - return 0; -#endif - case imaxbel: -#if defined(IMAXBEL) - return doSetUnset (&t->c_iflag, IMAXBEL, b); -#else - return 0; -#endif - case opost: -#if defined(OPOST) - return doSetUnset (&t->c_oflag, OPOST, b); -#else - return 0; -#endif - case olcuc: -#if defined(OLCUC) - return doSetUnset (&t->c_oflag, OLCUC, b); -#else - return 0; -#endif - case onlcr: -#if defined(ONLCR) - return doSetUnset (&t->c_oflag, ONLCR, b); -#else - return 0; -#endif - case ocrnl: -#if defined(OCRNL) - return doSetUnset (&t->c_oflag, OCRNL, b); -#else - return 0; -#endif - case onocr: -#if defined(ONOCR) - return doSetUnset (&t->c_oflag, ONOCR, b); -#else - return 0; -#endif - case onlret: -#if defined(ONLRET) - return doSetUnset (&t->c_oflag, ONLRET, b); -#else - return 0; -#endif - case ofill: -#if defined(OFILL) - return doSetUnset (&t->c_oflag, OFILL, b); -#else - return 0; -#endif - case ofdel: -#if defined(OFDEL) - return doSetUnset (&t->c_oflag, OFDEL, b); -#else - return 0; -#endif - case onl0: -#if defined(NL0) - return doSetUnset (&t->c_oflag, NL0, b); -#else - return 0; -#endif - case onl1: -#if defined(NL1) - return doSetUnset (&t->c_oflag, NL1, b); -#else - return 0; -#endif - case ocr0: -#if defined(CR0) - return doSetUnset (&t->c_oflag, CR0, b); -#else - return 0; -#endif - case ocr1: -#if defined(CR1) - return doSetUnset (&t->c_oflag, CR1, b); -#else - return 0; -#endif - case ocr2: -#if defined(CR2) - return doSetUnset (&t->c_oflag, CR2, b); -#else - return 0; -#endif - case ocr3: -#if defined(CR3) - return doSetUnset (&t->c_oflag, CR3, b); -#else - return 0; -#endif - case otab0: -#if defined(TAB0) - return doSetUnset (&t->c_oflag, TAB0, b); -#else - return 0; -#endif - case otab1: -#if defined(TAB1) - return doSetUnset (&t->c_oflag, TAB1, b); -#else - return 0; -#endif - case otab2: -#if defined(TAB2) - return doSetUnset (&t->c_oflag, TAB2, b); -#else - return 0; -#endif - case otab3: -#if defined(TAB3) - return doSetUnset (&t->c_oflag, TAB3, b); -#else - return 0; -#endif - case obs0: -#if defined(BS0) - return doSetUnset (&t->c_oflag, BS0, b); -#else - return 0; -#endif - case obs1: -#if defined(BS1) - return doSetUnset (&t->c_oflag, BS1, b); -#else - return 0; -#endif - case off0: -#if defined(FF0) - return doSetUnset (&t->c_oflag, FF0, b); -#else - return 0; -#endif - case off1: -#if defined(FF1) - return doSetUnset (&t->c_oflag, FF1, b); -#else - return 0; -#endif - case ovt0: -#if defined(VT0) - return doSetUnset (&t->c_oflag, VT0, b); -#else - return 0; -#endif - case ovt1: -#if defined(VT1) - return doSetUnset (&t->c_oflag, VT1, b); -#else - return 0; -#endif - case b0: -#if defined(B0) - return doSetUnset (&t->c_cflag, B0, b); -#else - return 0; -#endif - case b50: -#if defined(B50) - return doSetUnset (&t->c_cflag, B50, b); -#else - return 0; -#endif - case b75: -#if defined(B75) - return doSetUnset (&t->c_cflag, B75, b); -#else - return 0; -#endif - case b110: -#if defined(B110) - return doSetUnset (&t->c_cflag, B110, b); -#else - return 0; -#endif - case b135: -#if defined(B134) - return doSetUnset (&t->c_cflag, B134, b); -#else - return 0; -#endif - case b150: -#if defined(B150) - return doSetUnset (&t->c_cflag, B150, b); -#else - return 0; -#endif - case b200: -#if defined(B200) - return doSetUnset (&t->c_cflag, B200, b); -#else - return 0; -#endif - case b300: -#if defined(B300) - return doSetUnset (&t->c_cflag, B300, b); -#else - return 0; -#endif - case b600: -#if defined(B600) - return doSetUnset (&t->c_cflag, B600, b); -#else - return 0; -#endif - case b1200: -#if defined(B1200) - return doSetUnset (&t->c_cflag, B1200, b); -#else - return 0; -#endif - case b1800: -#if defined(B1800) - return doSetUnset (&t->c_cflag, B1800, b); -#else - return 0; -#endif - case b2400: -#if defined(B2400) - return doSetUnset (&t->c_cflag, B2400, b); -#else - return 0; -#endif - case b4800: -#if defined(B4800) - return doSetUnset (&t->c_cflag, B4800, b); -#else - return 0; -#endif - case b9600: -#if defined(B9600) - return doSetUnset (&t->c_cflag, B9600, b); -#else - return 0; -#endif - case b19200: -#if defined(B19200) - return doSetUnset (&t->c_cflag, B19200, b); -#else - return 0; -#endif - case b38400: -#if defined(B38400) - return doSetUnset (&t->c_cflag, B38400, b); -#else - return 0; -#endif - case b57600: -#if defined(B57600) - return doSetUnset (&t->c_cflag, B57600, b); -#else - return 0; -#endif - case b115200: -#if defined(B115200) - return doSetUnset (&t->c_cflag, B115200, b); -#else - return 0; -#endif - case b240400: -#if defined(B230400) - return doSetUnset (&t->c_cflag, B230400, b); -#else - return 0; -#endif - case b460800: -#if defined(B460800) - return doSetUnset (&t->c_cflag, B460800, b); -#else - return 0; -#endif - case b500000: -#if defined(B500000) - return doSetUnset (&t->c_cflag, B500000, b); -#else - return 0; -#endif - case b576000: -#if defined(B576000) - return doSetUnset (&t->c_cflag, B576000, b); -#else - return 0; -#endif - case b921600: -#if defined(B921600) - return doSetUnset (&t->c_cflag, B921600, b); -#else - return 0; -#endif - case b1000000: -#if defined(B1000000) - return doSetUnset (&t->c_cflag, B1000000, b); -#else - return 0; -#endif - case b1152000: -#if defined(B1152000) - return doSetUnset (&t->c_cflag, B1152000, b); -#else - return 0; -#endif - case b1500000: -#if defined(B1500000) - return doSetUnset (&t->c_cflag, B1500000, b); -#else - return 0; -#endif - case b2000000: -#if defined(B2000000) - return doSetUnset (&t->c_cflag, B2000000, b); -#else - return 0; -#endif - case b2500000: -#if defined(B2500000) - return doSetUnset (&t->c_cflag, B2500000, b); -#else - return 0; -#endif - case b3000000: -#if defined(B3000000) - return doSetUnset (&t->c_cflag, B3000000, b); -#else - return 0; -#endif - case b3500000: -#if defined(B3500000) - return doSetUnset (&t->c_cflag, B3500000, b); -#else - return 0; -#endif - case b4000000: -#if defined(B4000000) - return doSetUnset (&t->c_cflag, B4000000, b); -#else - return 0; -#endif - case maxbaud: -#if defined(__MAX_BAUD) - return doSetUnset (&t->c_cflag, __MAX_BAUD, b); -#else - return 0; -#endif - case crtscts: -#if defined(CRTSCTS) - return doSetUnset (&t->c_cflag, CRTSCTS, b); -#else - return 0; -#endif - case cs5: -#if defined(CS5) - return doSetUnset (&t->c_cflag, CS5, b); -#else - return 0; -#endif - case cs6: -#if defined(CS6) - return doSetUnset (&t->c_cflag, CS6, b); -#else - return 0; -#endif - case cs7: -#if defined(CS7) - return doSetUnset (&t->c_cflag, CS7, b); -#else - return 0; -#endif - case cs8: -#if defined(CS8) - return doSetUnset (&t->c_cflag, CS8, b); -#else - return 0; -#endif - case cstopb: -#if defined(CSTOPB) - return doSetUnset (&t->c_cflag, CSTOPB, b); -#else - return 0; -#endif - case cread: -#if defined(CREAD) - return doSetUnset (&t->c_cflag, CREAD, b); -#else - return 0; -#endif - case parenb: -#if defined(PARENB) - return doSetUnset (&t->c_cflag, PARENB, b); -#else - return 0; -#endif - case parodd: -#if defined(PARODD) - return doSetUnset (&t->c_cflag, PARODD, b); -#else - return 0; -#endif - case hupcl: -#if defined(HUPCL) - return doSetUnset (&t->c_cflag, HUPCL, b); -#else - return 0; -#endif - case clocal: -#if defined(CLOCAL) - return doSetUnset (&t->c_cflag, CLOCAL, b); -#else - return 0; -#endif - case lisig: -#if defined(ISIG) - return doSetUnset (&t->c_lflag, ISIG, b); -#else - return 0; -#endif - case licanon: -#if defined(ICANON) - return doSetUnset (&t->c_lflag, ICANON, b); -#else - return 0; -#endif - case lxcase: -#if defined(XCASE) - return doSetUnset (&t->c_lflag, XCASE, b); -#else - return 0; -#endif - case lecho: -#if defined(ECHO) - return doSetUnset (&t->c_lflag, ECHO, b); -#else - return 0; -#endif - case lechoe: -#if defined(ECHOE) - return doSetUnset (&t->c_lflag, ECHOE, b); -#else - return 0; -#endif - case lechok: -#if defined(ECHOK) - return doSetUnset (&t->c_lflag, ECHOK, b); -#else - return 0; -#endif - case lechonl: -#if defined(ECHONL) - return doSetUnset (&t->c_lflag, ECHONL, b); -#else - return 0; -#endif - case lnoflsh: -#if defined(NOFLSH) - return doSetUnset (&t->c_lflag, NOFLSH, b); -#else - return 0; -#endif - case ltopstop: -#if defined(TOSTOP) - return doSetUnset (&t->c_lflag, TOSTOP, b); -#else - return 0; -#endif - case lechoctl: -#if defined(ECHOCTL) - return doSetUnset (&t->c_lflag, ECHOCTL, b); -#else - return 0; -#endif - case lechoprt: -#if defined(ECHOPRT) - return doSetUnset (&t->c_lflag, ECHOPRT, b); -#else - return 0; -#endif - case lechoke: -#if defined(ECHOKE) - return doSetUnset (&t->c_lflag, ECHOKE, b); -#else - return 0; -#endif - case lflusho: -#if defined(FLUSHO) - return doSetUnset (&t->c_lflag, FLUSHO, b); -#else - return 0; -#endif - case lpendin: -#if defined(PENDIN) - return doSetUnset (&t->c_lflag, PENDIN, b); -#else - return 0; -#endif - case liexten: -#if defined(IEXTEN) - return doSetUnset (&t->c_lflag, IEXTEN, b); -#else - return 0; -#endif - } - return 0; -} - -/* GetChar sets a CHAR, ch, value from, t, and returns TRUE if - this value is supported. */ - -extern "C" int -EXPORT (GetChar) (struct termios *t, ControlChar c, char *ch) -{ - switch (c) - { - - case vintr: -#if defined(VINTR) - *ch = t->c_cc[VINTR]; - return 1; -#else - return 0; -#endif - case vquit: -#if defined(VQUIT) - *ch = t->c_cc[VQUIT]; - return 1; -#else - return 0; -#endif - case verase: -#if defined(VERASE) - *ch = t->c_cc[VERASE]; - return 1; -#else - return 0; -#endif - case vkill: -#if defined(VKILL) - *ch = t->c_cc[VKILL]; - return 1; -#else - return 0; -#endif - case veof: -#if defined(VEOF) - *ch = t->c_cc[VEOF]; - return 1; -#else - return 0; -#endif - case vtime: -#if defined(VTIME) - *ch = t->c_cc[VTIME]; - return 1; -#else - return 0; -#endif - case vmin: -#if defined(VMIN) - *ch = t->c_cc[VMIN]; - return 1; -#else - return 0; -#endif - case vswtc: -#if defined(VSWTC) - *ch = t->c_cc[VSWTC]; - return 1; -#else - return 0; -#endif - case vstart: -#if defined(VSTART) - *ch = t->c_cc[VSTART]; - return 1; -#else - return 0; -#endif - case vstop: -#if defined(VSTOP) - *ch = t->c_cc[VSTOP]; - return 1; -#else - return 0; -#endif - case vsusp: -#if defined(VSUSP) - *ch = t->c_cc[VSUSP]; - return 1; -#else - return 0; -#endif - case veol: -#if defined(VEOL) - *ch = t->c_cc[VEOL]; - return 1; -#else - return 0; -#endif - case vreprint: -#if defined(VREPRINT) - *ch = t->c_cc[VREPRINT]; - return 1; -#else - return 0; -#endif - case vdiscard: -#if defined(VDISCARD) - *ch = t->c_cc[VDISCARD]; - return 1; -#else - return 0; -#endif - case vwerase: -#if defined(VWERASE) - *ch = t->c_cc[VWERASE]; - return 1; -#else - return 0; -#endif - case vlnext: -#if defined(VLNEXT) - *ch = t->c_cc[VLNEXT]; - return 1; -#else - return 0; -#endif - case veol2: -#if defined(VEOL2) - *ch = t->c_cc[VEOL2]; - return 1; -#else - return 0; -#endif - default: - return 0; - } -} - -/* SetChar sets a CHAR value in, t, and returns TRUE if, c, - is supported. */ - -extern "C" int -EXPORT (SetChar) (struct termios *t, ControlChar c, char ch) -{ - switch (c) - { - - case vintr: -#if defined(VINTR) - t->c_cc[VINTR] = ch; - return 1; -#else - return 0; -#endif - case vquit: -#if defined(VQUIT) - t->c_cc[VQUIT] = ch; - return 1; -#else - return 0; -#endif - case verase: -#if defined(VERASE) - t->c_cc[VERASE] = ch; - return 1; -#else - return 0; -#endif - case vkill: -#if defined(VKILL) - t->c_cc[VKILL] = ch; - return 1; -#else - return 0; -#endif - case veof: -#if defined(VEOF) - t->c_cc[VEOF] = ch; - return 1; -#else - return 0; -#endif - case vtime: -#if defined(VTIME) - t->c_cc[VTIME] = ch; - return 1; -#else - return 0; -#endif - case vmin: -#if defined(VMIN) - t->c_cc[VMIN] = ch; - return 1; -#else - return 0; -#endif - case vswtc: -#if defined(VSWTC) - t->c_cc[VSWTC] = ch; - return 1; -#else - return 0; -#endif - case vstart: -#if defined(VSTART) - t->c_cc[VSTART] = ch; - return 1; -#else - return 0; -#endif - case vstop: -#if defined(VSTOP) - t->c_cc[VSTOP] = ch; - return 1; -#else - return 0; -#endif - case vsusp: -#if defined(VSUSP) - t->c_cc[VSUSP] = ch; - return 1; -#else - return 0; -#endif - case veol: -#if defined(VEOL) - t->c_cc[VEOL] = ch; - return 1; -#else - return 0; -#endif - case vreprint: -#if defined(VREPRINT) - t->c_cc[VREPRINT] = ch; - return 1; -#else - return 0; -#endif - case vdiscard: -#if defined(VDISCARD) - t->c_cc[VDISCARD] = ch; - return 1; -#else - return 0; -#endif - case vwerase: -#if defined(VWERASE) - t->c_cc[VWERASE] = ch; - return 1; -#else - return 0; -#endif - case vlnext: -#if defined(VLNEXT) - t->c_cc[VLNEXT] = ch; - return 1; -#else - return 0; -#endif - case veol2: -#if defined(VEOL2) - t->c_cc[VEOL2] = ch; - return 1; -#else - return 0; -#endif - default: - return 0; - } -} -#endif - -extern "C" void -_M2_termios_init (int, char *[], char *[]) -{ -} - -extern "C" void -_M2_termios_finish (int, char *[], char *[]) -{ -} - -extern "C" void -_M2_termios_dep (void) -{ -} - -struct _M2_termios_ctor { _M2_termios_ctor (); } _M2_termios_ctor; - -_M2_termios_ctor::_M2_termios_ctor (void) -{ - M2RTS_RegisterModule ("termios", _M2_termios_init, _M2_termios_finish, - _M2_termios_dep); -}
reply other threads:[~2022-07-07 16:03 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220707160303.852C63856972@sourceware.org \ --to=gaius@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).