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>