Annotation of embedaddon/readline/examples/rlfe/os.h, revision 1.1.1.1

1.1       misho       1: /* Copyright (c) 1993-2002
                      2:  *      Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
                      3:  *      Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
                      4:  * Copyright (c) 1987 Oliver Laumann
                      5:  *
                      6:  * This program is free software; you can redistribute it and/or modify
                      7:  * it under the terms of the GNU General Public License as published by
                      8:  * the Free Software Foundation; either version 2, or (at your option)
                      9:  * any later version.
                     10:  *
                     11:  * This program is distributed in the hope that it will be useful,
                     12:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
                     13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     14:  * GNU General Public License for more details.
                     15:  *
                     16:  * You should have received a copy of the GNU General Public License
                     17:  * along with this program (see the file COPYING); if not, write to the
                     18:  * Free Software Foundation, Inc.,
                     19:  * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
                     20:  *
                     21:  ****************************************************************
                     22:  * $Id: os.h,v 1.10 1994/05/31 12:32:22 mlschroe Exp $ FAU
                     23:  */
                     24: 
                     25: #include <stdio.h>
                     26: #include <errno.h>
                     27: 
                     28: #include <sys/param.h>
                     29: 
                     30: /* In strict ANSI mode, HP-UX machines define __hpux but not hpux */
                     31: #if defined(__hpux) && !defined(hpux)
                     32: # define hpux
                     33: #endif
                     34: 
                     35: #if defined(__bsdi__) || defined(__386BSD__) || defined(_CX_UX) || defined(hpux) || defined(_IBMR2) || defined(linux)
                     36: # include <signal.h>
                     37: #endif /* __bsdi__ || __386BSD__ || _CX_UX || hpux || _IBMR2 || linux */
                     38: 
                     39: #ifdef ISC
                     40: # ifdef ENAMETOOLONG
                     41: #  undef ENAMETOOLONG
                     42: # endif
                     43: # ifdef ENOTEMPTY
                     44: #  undef ENOTEMPTY
                     45: # endif
                     46: # include <sys/bsdtypes.h>
                     47: # include <net/errno.h>
                     48: #endif
                     49: 
                     50: #ifdef sun
                     51: # define getpgrp __getpgrp
                     52: # define exit __exit
                     53: #endif
                     54: #ifdef POSIX
                     55: # include <unistd.h>
                     56: # if defined(__STDC__)
                     57: #  include <stdlib.h>
                     58: # endif /* __STDC__ */
                     59: #endif /* POSIX */
                     60: #ifdef sun
                     61: # undef getpgrp
                     62: # undef exit
                     63: #endif /* sun */
                     64: 
                     65: #ifndef linux /* all done in <errno.h> */
                     66: extern int errno;
                     67: #endif /* linux */
                     68: #ifndef HAVE_STRERROR
                     69: /* No macros, please */
                     70: #undef strerror
                     71: #endif
                     72: 
                     73: #if !defined(SYSV) && !defined(linux)
                     74: # ifdef NEWSOS
                     75: #  define strlen ___strlen___
                     76: #  include <strings.h>
                     77: #  undef strlen
                     78: # else /* NEWSOS */
                     79: #  include <strings.h>
                     80: # endif /* NEWSOS */
                     81: #else /* SYSV */
                     82: # if defined(SVR4) || defined(NEWSOS)
                     83: #  define strlen ___strlen___
                     84: #  include <string.h>
                     85: #  undef strlen
                     86: #  if !defined(NEWSOS) && !defined(__hpux)
                     87:     extern size_t strlen(const char *);
                     88: #  endif
                     89: # else /* SVR4 */
                     90: #  include <string.h>
                     91: # endif /* SVR4 */
                     92: #endif /* SYSV */
                     93: 
                     94: #ifdef USEVARARGS
                     95: # if defined(__STDC__)
                     96: #  include <stdarg.h>
                     97: #  define VA_LIST(var) va_list var;
                     98: #  define VA_DOTS ...
                     99: #  define VA_DECL
                    100: #  define VA_START(ap, fmt) va_start(ap, fmt)
                    101: #  define VA_ARGS(ap) ap
                    102: #  define VA_END(ap) va_end(ap)
                    103: # else
                    104: #  include <varargs.h>
                    105: #  define VA_LIST(var) va_list var;
                    106: #  define VA_DOTS va_alist
                    107: #  define VA_DECL va_dcl
                    108: #  define VA_START(ap, fmt) va_start(ap)
                    109: #  define VA_ARGS(ap) ap
                    110: #  define VA_END(ap) va_end(ap)
                    111: # endif
                    112: #else
                    113: # define VA_LIST(var)
                    114: # define VA_DOTS p1, p2, p3, p4, p5, p6
                    115: # define VA_DECL unsigned long VA_DOTS;
                    116: # define VA_START(ap, fmt)
                    117: # define VA_ARGS(ap) VA_DOTS
                    118: # define VA_END(ap)
                    119: # undef vsnprintf
                    120: # define vsnprintf xsnprintf
                    121: #endif
                    122: 
                    123: #if !defined(sun) && !defined(B43) && !defined(ISC) && !defined(pyr) && !defined(_CX_UX)
                    124: # include <time.h>
                    125: #endif
                    126: #include <sys/time.h>
                    127: 
                    128: #ifdef M_UNIX   /* SCO */
                    129: # include <sys/stream.h>
                    130: # include <sys/ptem.h>
                    131: # define ftruncate(fd, s) chsize(fd, s)
                    132: #endif
                    133: 
                    134: #ifdef SYSV
                    135: # define index strchr
                    136: # define rindex strrchr
                    137: # define bzero(poi,len) memset(poi,0,len)
                    138: # define bcmp memcmp
                    139: # define killpg(pgrp,sig) kill( -(pgrp), sig)
                    140: #endif
                    141: 
                    142: #ifndef HAVE_GETCWD
                    143: # define getcwd(b,l) getwd(b)
                    144: #endif
                    145: 
                    146: #ifndef USEBCOPY
                    147: # ifdef USEMEMMOVE
                    148: #  define bcopy(s,d,len) memmove(d,s,len)
                    149: # else
                    150: #  ifdef USEMEMCPY
                    151: #   define bcopy(s,d,len) memcpy(d,s,len)
                    152: #  else
                    153: #   define NEED_OWN_BCOPY
                    154: #   define bcopy xbcopy
                    155: #  endif
                    156: # endif
                    157: #endif
                    158: 
                    159: #ifdef hpux
                    160: # define setreuid(ruid, euid) setresuid(ruid, euid, -1)
                    161: # define setregid(rgid, egid) setresgid(rgid, egid, -1)
                    162: #endif
                    163: 
                    164: #if defined(HAVE_SETEUID) || defined(HAVE_SETREUID)
                    165: # define USE_SETEUID
                    166: #endif
                    167: 
                    168: #if !defined(HAVE__EXIT) && !defined(_exit)
                    169: #define _exit(x) exit(x)
                    170: #endif
                    171: 
                    172: #ifndef HAVE_UTIMES
                    173: # define utimes utime
                    174: #endif
                    175: 
                    176: #ifdef BUILTIN_TELNET
                    177: # include <netinet/in.h>
                    178: # include <arpa/inet.h>
                    179: #endif
                    180: 
                    181: #if defined(USE_LOCALE) && (!defined(HAVE_SETLOCALE) || !defined(HAVE_STRFTIME))
                    182: # undef USE_LOCALE
                    183: #endif
                    184: 
                    185: /*****************************************************************
                    186:  *    terminal handling
                    187:  */
                    188: 
                    189: #if defined (POSIX) || defined (__FreeBSD__)
                    190: # include <termios.h>
                    191: # ifdef hpux
                    192: #  include <bsdtty.h>
                    193: # endif /* hpux */
                    194: # ifdef NCCS
                    195: #  define MAXCC NCCS
                    196: # else
                    197: #  define MAXCC 256
                    198: # endif
                    199: #else /* POSIX */
                    200: # ifdef TERMIO
                    201: #  include <termio.h>
                    202: #  ifdef NCC
                    203: #   define MAXCC NCC
                    204: #  else
                    205: #   define MAXCC 256
                    206: #  endif
                    207: #  ifdef CYTERMIO
                    208: #   include <cytermio.h>
                    209: #  endif
                    210: # else /* TERMIO */
                    211: #  if defined (HAVE_SGTTY_H)
                    212: #    include <sgtty.h>
                    213: #  endif
                    214: # endif /* TERMIO */
                    215: #endif /* POSIX */
                    216: 
                    217: #ifndef VDISABLE
                    218: # ifdef _POSIX_VDISABLE
                    219: #  define VDISABLE _POSIX_VDISABLE
                    220: # else
                    221: #  define VDISABLE 0377
                    222: # endif /* _POSIX_VDISABLE */
                    223: #endif /* !VDISABLE */
                    224: 
                    225: 
                    226: /* on sgi, regardless of the stream head's read mode (RNORM/RMSGN/RMSGD)
                    227:  * TIOCPKT mode causes data loss if our buffer is too small (IOSIZE)
                    228:  * to hold the whole packet at first read().
                    229:  * (Marc Boucher)
                    230:  *
                    231:  * matthew green:
                    232:  * TIOCPKT is broken on dgux 5.4.1 generic AViiON mc88100
                    233:  *
                    234:  * Joe Traister: On AIX4, programs like irc won't work if screen
                    235:  * uses TIOCPKT (select fails to return on pty read).
                    236:  */
                    237: #if defined(sgi) || defined(DGUX) || defined(_IBMR2)
                    238: # undef TIOCPKT
                    239: #endif
                    240: 
                    241: /* linux ncurses is broken, we have to use our own tputs */
                    242: #if defined(linux) && defined(TERMINFO)
                    243: # define tputs xtputs
                    244: #endif
                    245: 
                    246: /* Alexandre Oliva: SVR4 style ptys don't work with osf */
                    247: #ifdef __osf__
                    248: # undef HAVE_SVR4_PTYS
                    249: #endif
                    250: 
                    251: /*****************************************************************
                    252:  *   utmp handling
                    253:  */
                    254: 
                    255: #ifdef GETUTENT
                    256:   typedef char *slot_t;
                    257: #else
                    258:   typedef int slot_t;
                    259: #endif
                    260: 
                    261: #if defined(UTMPOK) || defined(BUGGYGETLOGIN)
                    262: # if defined(SVR4) && !defined(DGUX) && !defined(__hpux) && !defined(linux)
                    263: #  include <utmpx.h>
                    264: #  define UTMPFILE     UTMPX_FILE
                    265: #  define utmp         utmpx
                    266: #  define getutent     getutxent
                    267: #  define getutid      getutxid
                    268: #  define getutline    getutxline
                    269: #  define pututline    pututxline
                    270: #  define setutent     setutxent
                    271: #  define endutent     endutxent
                    272: #  define ut_time      ut_xtime
                    273: # else /* SVR4 */
                    274: #  include <utmp.h>
                    275: # endif /* SVR4 */
                    276: # ifdef apollo
                    277:    /* 
                    278:     * We don't have GETUTENT, so we dig into utmp ourselves.
                    279:     * But we save the permanent filedescriptor and
                    280:     * open utmp just when we need to. 
                    281:     * This code supports an unsorted utmp. jw.
                    282:     */
                    283: #  define UTNOKEEP
                    284: # endif /* apollo */
                    285: 
                    286: # ifndef UTMPFILE
                    287: #  ifdef UTMP_FILE
                    288: #   define UTMPFILE    UTMP_FILE
                    289: #  else
                    290: #   ifdef _PATH_UTMP
                    291: #    define UTMPFILE   _PATH_UTMP
                    292: #   else
                    293: #    define UTMPFILE   "/etc/utmp"
                    294: #   endif /* _PATH_UTMP */
                    295: #  endif
                    296: # endif
                    297: 
                    298: #endif /* UTMPOK || BUGGYGETLOGIN */
                    299: 
                    300: #if !defined(UTMPOK) && defined(USRLIMIT)
                    301: # undef USRLIMIT
                    302: #endif
                    303: 
                    304: #ifdef LOGOUTOK
                    305: # ifndef LOGINDEFAULT
                    306: #  define LOGINDEFAULT 0
                    307: # endif
                    308: #else
                    309: # ifdef LOGINDEFAULT
                    310: #  undef LOGINDEFAULT
                    311: # endif
                    312: # define LOGINDEFAULT 1
                    313: #endif
                    314: 
                    315: 
                    316: /*****************************************************************
                    317:  *    file stuff
                    318:  */
                    319: 
                    320: #ifndef F_OK
                    321: #define F_OK 0
                    322: #endif
                    323: #ifndef X_OK
                    324: #define X_OK 1
                    325: #endif
                    326: #ifndef W_OK
                    327: #define W_OK 2
                    328: #endif
                    329: #ifndef R_OK
                    330: #define R_OK 4
                    331: #endif
                    332: 
                    333: #ifndef S_IFIFO
                    334: #define S_IFIFO  0010000
                    335: #endif
                    336: #ifndef S_IREAD
                    337: #define S_IREAD  0000400
                    338: #endif
                    339: #ifndef S_IWRITE
                    340: #define S_IWRITE 0000200
                    341: #endif
                    342: #ifndef S_IEXEC
                    343: #define S_IEXEC  0000100
                    344: #endif
                    345: 
                    346: #if defined(S_IFIFO) && defined(S_IFMT) && !defined(S_ISFIFO)
                    347: #define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
                    348: #endif
                    349: #if defined(S_IFSOCK) && defined(S_IFMT) && !defined(S_ISSOCK)
                    350: #define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
                    351: #endif
                    352: #if defined(S_IFCHR) && defined(S_IFMT) && !defined(S_ISCHR)
                    353: #define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
                    354: #endif
                    355: #if defined(S_IFDIR) && defined(S_IFMT) && !defined(S_ISDIR)
                    356: #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
                    357: #endif
                    358: #if defined(S_IFLNK) && defined(S_IFMT) && !defined(S_ISLNK)
                    359: #define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
                    360: #endif
                    361: 
                    362: /*
                    363:  * SunOS 4.1.3: `man 2V open' has only one line that mentions O_NOBLOCK:
                    364:  *
                    365:  *     O_NONBLOCK     Same as O_NDELAY above.
                    366:  *
                    367:  * on the very same SunOS 4.1.3, I traced the open system call and found
                    368:  * that an open("/dev/ttyy08", O_RDWR|O_NONBLOCK|O_NOCTTY) was blocked,
                    369:  * whereas open("/dev/ttyy08", O_RDWR|O_NDELAY  |O_NOCTTY) went through.
                    370:  *
                    371:  * For this simple reason I now favour O_NDELAY. jw. 4.5.95
                    372:  */
                    373: #if defined(sun) && !defined(SVR4)
                    374: # undef O_NONBLOCK
                    375: #endif
                    376: 
                    377: #if !defined(O_NONBLOCK) && defined(O_NDELAY)
                    378: # define O_NONBLOCK O_NDELAY
                    379: #endif
                    380: 
                    381: #if !defined(FNBLOCK) && defined(FNONBLOCK)
                    382: # define FNBLOCK FNONBLOCK
                    383: #endif
                    384: #if !defined(FNBLOCK) && defined(FNDELAY)
                    385: # define FNBLOCK FNDELAY
                    386: #endif
                    387: #if !defined(FNBLOCK) && defined(O_NONBLOCK)
                    388: # define FNBLOCK O_NONBLOCK
                    389: #endif
                    390: 
                    391: #ifndef POSIX
                    392: #undef mkfifo
                    393: #define mkfifo(n,m) mknod(n,S_IFIFO|(m),0)
                    394: #endif
                    395: 
                    396: #if !defined(HAVE_LSTAT) && !defined(lstat)
                    397: # define lstat stat
                    398: #endif
                    399: 
                    400: /*****************************************************************
                    401:  *    signal handling
                    402:  */
                    403: 
                    404: #ifdef SIGVOID
                    405: # define SIGRETURN
                    406: # define sigret_t void
                    407: #else
                    408: # define SIGRETURN return 0;
                    409: # define sigret_t int
                    410: #endif
                    411: 
                    412: /* Geeeee, reverse it? */
                    413: #if defined(SVR4) || (defined(SYSV) && defined(ISC)) || defined(_AIX) || defined(linux) || defined(ultrix) || defined(__386BSD__) || defined(__bsdi__) || defined(POSIX) || defined(NeXT)
                    414: # define SIGHASARG
                    415: #endif
                    416: 
                    417: #ifdef SIGHASARG
                    418: # define SIGPROTOARG   (int)
                    419: # define SIGDEFARG     (sigsig) int sigsig;
                    420: # define SIGARG        0
                    421: #else
                    422: # define SIGPROTOARG   (void)
                    423: # define SIGDEFARG     ()
                    424: # define SIGARG
                    425: #endif
                    426: 
                    427: #ifndef SIGCHLD
                    428: #define SIGCHLD SIGCLD
                    429: #endif
                    430: 
                    431: #if defined(POSIX) || defined(hpux)
                    432: # define signal xsignal
                    433: #else
                    434: # ifdef USESIGSET
                    435: #  define signal sigset
                    436: # endif /* USESIGSET */
                    437: #endif
                    438: 
                    439: /* used in screen.c and attacher.c */
                    440: #ifndef NSIG           /* kbeal needs these w/o SYSV */
                    441: # define NSIG 32
                    442: #endif /* !NSIG */
                    443: 
                    444: 
                    445: /*****************************************************************
                    446:  *    Wait stuff
                    447:  */
                    448: 
                    449: #if (!defined(sysV68) && !defined(M_XENIX)) || defined(NeXT) || defined(M_UNIX)
                    450: # include <sys/wait.h>
                    451: #endif
                    452: 
                    453: #ifndef WTERMSIG
                    454: # ifndef BSDWAIT /* if wait is NOT a union: */
                    455: #  define WTERMSIG(status) (status & 0177)
                    456: # else
                    457: #  define WTERMSIG(status) status.w_T.w_Termsig 
                    458: # endif
                    459: #endif
                    460: 
                    461: #ifndef WSTOPSIG
                    462: # ifndef BSDWAIT /* if wait is NOT a union: */
                    463: #  define WSTOPSIG(status) ((status >> 8) & 0377)
                    464: # else
                    465: #  define WSTOPSIG(status) status.w_S.w_Stopsig 
                    466: # endif
                    467: #endif
                    468: 
                    469: /* NET-2 uses WCOREDUMP */
                    470: #if defined(WCOREDUMP) && !defined(WIFCORESIG)
                    471: # define WIFCORESIG(status) WCOREDUMP(status)
                    472: #endif
                    473: 
                    474: #ifndef WIFCORESIG
                    475: # ifndef BSDWAIT /* if wait is NOT a union: */
                    476: #  define WIFCORESIG(status) (status & 0200)
                    477: # else
                    478: #  define WIFCORESIG(status) status.w_T.w_Coredump
                    479: # endif
                    480: #endif
                    481: 
                    482: #ifndef WEXITSTATUS
                    483: # ifndef BSDWAIT /* if wait is NOT a union: */
                    484: #  define WEXITSTATUS(status) ((status >> 8) & 0377)
                    485: # else
                    486: #  define WEXITSTATUS(status) status.w_T.w_Retcode
                    487: # endif
                    488: #endif
                    489: 
                    490: 
                    491: /*****************************************************************
                    492:  *    select stuff
                    493:  */
                    494: 
                    495: #if defined(M_XENIX) || defined(M_UNIX) || defined(_SEQUENT_) || defined (__INTERIX)
                    496: #include <sys/select.h>                /* for timeval + FD... */
                    497: #endif
                    498: 
                    499: /*
                    500:  * SunOS 3.5 - Tom Schmidt - Micron Semiconductor, Inc - 27-Jul-93
                    501:  * tschmidt@vax.micron.com
                    502:  */
                    503: #ifndef FD_SET
                    504: # ifndef SUNOS3
                    505: typedef struct fd_set { int fds_bits[1]; } fd_set;
                    506: # endif
                    507: # define FD_ZERO(fd) ((fd)->fds_bits[0] = 0)
                    508: # define FD_SET(b, fd) ((fd)->fds_bits[0] |= 1 << (b))
                    509: # define FD_ISSET(b, fd) ((fd)->fds_bits[0] & 1 << (b))
                    510: # define FD_SETSIZE 32
                    511: #endif
                    512: 
                    513: 
                    514: /*****************************************************************
                    515:  *    user defineable stuff
                    516:  */
                    517: 
                    518: #ifndef TERMCAP_BUFSIZE
                    519: # define TERMCAP_BUFSIZE 2048
                    520: #endif
                    521: 
                    522: #ifndef MAXPATHLEN
                    523: # define MAXPATHLEN 1024
                    524: #endif
                    525: 
                    526: /* 
                    527:  * you may try to vary this value. Use low values if your (VMS) system
                    528:  * tends to choke when pasting. Use high values if you want to test
                    529:  * how many characters your pty's can buffer.
                    530:  */
                    531: #define IOSIZE         4096

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>