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>