Annotation of embedaddon/readline/examples/rlfe/os.h, revision 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>