1107120Sjulian/* Copyright (c) 1993-2002
2107120Sjulian *      Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
3107120Sjulian *      Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
4107120Sjulian * Copyright (c) 1987 Oliver Laumann
5107120Sjulian *
6107120Sjulian * This program is free software; you can redistribute it and/or modify
7107120Sjulian * it under the terms of the GNU General Public License as published by
8107120Sjulian * the Free Software Foundation; either version 2, or (at your option)
9107120Sjulian * any later version.
10107120Sjulian *
11107120Sjulian * This program is distributed in the hope that it will be useful,
12107120Sjulian * but WITHOUT ANY WARRANTY; without even the implied warranty of
13107120Sjulian * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14107120Sjulian * GNU General Public License for more details.
15107120Sjulian *
16107120Sjulian * You should have received a copy of the GNU General Public License
17107120Sjulian * along with this program (see the file COPYING); if not, write to the
18107120Sjulian * Free Software Foundation, Inc.,
19107120Sjulian * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
20107120Sjulian *
21107120Sjulian ****************************************************************
22107120Sjulian * $Id: os.h,v 1.10 1994/05/31 12:32:22 mlschroe Exp $ FAU
23107120Sjulian */
24107120Sjulian
25107120Sjulian#include <stdio.h>
26107120Sjulian#include <errno.h>
27107120Sjulian
28121054Semax#include <sys/param.h>
29107120Sjulian
30107120Sjulian/* In strict ANSI mode, HP-UX machines define __hpux but not hpux */
31107120Sjulian#if defined(__hpux) && !defined(hpux)
32107120Sjulian# define hpux
33121054Semax#endif
34107120Sjulian
35158834Smarkus#if defined(__bsdi__) || defined(__386BSD__) || defined(_CX_UX) || defined(hpux) || defined(_IBMR2) || defined(linux)
36107120Sjulian# include <signal.h>
37107120Sjulian#endif /* __bsdi__ || __386BSD__ || _CX_UX || hpux || _IBMR2 || linux */
38107120Sjulian
39158834Smarkus#ifdef ISC
40107120Sjulian# ifdef ENAMETOOLONG
41107120Sjulian#  undef ENAMETOOLONG
42107120Sjulian# endif
43107120Sjulian# ifdef ENOTEMPTY
44107120Sjulian#  undef ENOTEMPTY
45107120Sjulian# endif
46107120Sjulian# include <sys/bsdtypes.h>
47107120Sjulian# include <net/errno.h>
48107120Sjulian#endif
49107120Sjulian
50107120Sjulian#ifdef sun
51107120Sjulian# define getpgrp __getpgrp
52114879Sjulian# define exit __exit
53107120Sjulian#endif
54107120Sjulian#ifdef POSIX
55107120Sjulian# include <unistd.h>
56107120Sjulian# if defined(__STDC__)
57107120Sjulian#  include <stdlib.h>
58107120Sjulian# endif /* __STDC__ */
59107120Sjulian#endif /* POSIX */
60107120Sjulian#ifdef sun
61114879Sjulian# undef getpgrp
62107120Sjulian# undef exit
63107120Sjulian#endif /* sun */
64107120Sjulian
65107120Sjulian#ifndef linux /* all done in <errno.h> */
66107120Sjulianextern int errno;
67107120Sjulian#endif /* linux */
68107120Sjulian#ifndef HAVE_STRERROR
69107120Sjulian/* No macros, please */
70107120Sjulian#undef strerror
71107120Sjulian#endif
72107120Sjulian
73107120Sjulian#if !defined(SYSV) && !defined(linux)
74107120Sjulian# ifdef NEWSOS
75107120Sjulian#  define strlen ___strlen___
76107120Sjulian#  include <strings.h>
77114879Sjulian#  undef strlen
78107120Sjulian# else /* NEWSOS */
79107120Sjulian#  include <strings.h>
80107120Sjulian# endif /* NEWSOS */
81107120Sjulian#else /* SYSV */
82107120Sjulian# if defined(SVR4) || defined(NEWSOS)
83107120Sjulian#  define strlen ___strlen___
84107120Sjulian#  include <string.h>
85107120Sjulian#  undef strlen
86107120Sjulian#  if !defined(NEWSOS) && !defined(__hpux)
87107120Sjulian    extern size_t strlen(const char *);
88107120Sjulian#  endif
89107120Sjulian# else /* SVR4 */
90107120Sjulian#  include <string.h>
91107120Sjulian# endif /* SVR4 */
92107120Sjulian#endif /* SYSV */
93107120Sjulian
94107120Sjulian#ifdef USEVARARGS
95107120Sjulian# if defined(__STDC__)
96107120Sjulian#  include <stdarg.h>
97107120Sjulian#  define VA_LIST(var) va_list var;
98107120Sjulian#  define VA_DOTS ...
99107120Sjulian#  define VA_DECL
100107120Sjulian#  define VA_START(ap, fmt) va_start(ap, fmt)
101107120Sjulian#  define VA_ARGS(ap) ap
102107120Sjulian#  define VA_END(ap) va_end(ap)
103107120Sjulian# else
104107120Sjulian#  include <varargs.h>
105107120Sjulian#  define VA_LIST(var) va_list var;
106107120Sjulian#  define VA_DOTS va_alist
107107120Sjulian#  define VA_DECL va_dcl
108107120Sjulian#  define VA_START(ap, fmt) va_start(ap)
109107120Sjulian#  define VA_ARGS(ap) ap
110107120Sjulian#  define VA_END(ap) va_end(ap)
111107120Sjulian# endif
112107120Sjulian#else
113107120Sjulian# define VA_LIST(var)
114107120Sjulian# define VA_DOTS p1, p2, p3, p4, p5, p6
115107120Sjulian# define VA_DECL unsigned long VA_DOTS;
116107120Sjulian# define VA_START(ap, fmt)
117107120Sjulian# define VA_ARGS(ap) VA_DOTS
118107120Sjulian# define VA_END(ap)
119107120Sjulian# undef vsnprintf
120107120Sjulian# define vsnprintf xsnprintf
121107120Sjulian#endif
122107120Sjulian
123107120Sjulian#if !defined(sun) && !defined(B43) && !defined(ISC) && !defined(pyr) && !defined(_CX_UX)
124107120Sjulian# include <time.h>
125107120Sjulian#endif
126107120Sjulian#include <sys/time.h>
127107120Sjulian
128107120Sjulian#ifdef M_UNIX   /* SCO */
129107120Sjulian# include <sys/stream.h>
130107120Sjulian# include <sys/ptem.h>
131107120Sjulian# define ftruncate(fd, s) chsize(fd, s)
132107120Sjulian#endif
133107120Sjulian
134107120Sjulian#ifdef SYSV
135107120Sjulian# define index strchr
136107120Sjulian# define rindex strrchr
137107120Sjulian# define bzero(poi,len) memset(poi,0,len)
138107120Sjulian# define bcmp memcmp
139107120Sjulian# define killpg(pgrp,sig) kill( -(pgrp), sig)
140107120Sjulian#endif
141107120Sjulian
142121054Semax#ifndef HAVE_GETCWD
143107120Sjulian# define getcwd(b,l) getwd(b)
144107120Sjulian#endif
145107120Sjulian
146107120Sjulian#ifndef USEBCOPY
147107120Sjulian# ifdef USEMEMMOVE
148107120Sjulian#  define bcopy(s,d,len) memmove(d,s,len)
149107120Sjulian# else
150107120Sjulian#  ifdef USEMEMCPY
151107120Sjulian#   define bcopy(s,d,len) memcpy(d,s,len)
152107120Sjulian#  else
153107120Sjulian#   define NEED_OWN_BCOPY
154107120Sjulian#   define bcopy xbcopy
155107120Sjulian#  endif
156107120Sjulian# endif
157107120Sjulian#endif
158107120Sjulian
159114879Sjulian#ifdef hpux
160107120Sjulian# define setreuid(ruid, euid) setresuid(ruid, euid, -1)
161107120Sjulian# define setregid(rgid, egid) setresgid(rgid, egid, -1)
162107120Sjulian#endif
163107120Sjulian
164107120Sjulian#if defined(HAVE_SETEUID) || defined(HAVE_SETREUID)
165107120Sjulian# define USE_SETEUID
166107120Sjulian#endif
167107120Sjulian
168107120Sjulian#if !defined(HAVE__EXIT) && !defined(_exit)
169107120Sjulian#define _exit(x) exit(x)
170107120Sjulian#endif
171107120Sjulian
172107120Sjulian#ifndef HAVE_UTIMES
173107120Sjulian# define utimes utime
174107120Sjulian#endif
175107120Sjulian
176107120Sjulian#ifdef BUILTIN_TELNET
177107120Sjulian# include <netinet/in.h>
178107120Sjulian# include <arpa/inet.h>
179107120Sjulian#endif
180107120Sjulian
181107120Sjulian#if defined(USE_LOCALE) && (!defined(HAVE_SETLOCALE) || !defined(HAVE_STRFTIME))
182107120Sjulian# undef USE_LOCALE
183107120Sjulian#endif
184107120Sjulian
185107120Sjulian/*****************************************************************
186107120Sjulian *    terminal handling
187107120Sjulian */
188107120Sjulian
189107120Sjulian#ifdef POSIX
190107120Sjulian# include <termios.h>
191107120Sjulian# ifdef hpux
192107120Sjulian#  include <bsdtty.h>
193107120Sjulian# endif /* hpux */
194114879Sjulian# ifdef NCCS
195107120Sjulian#  define MAXCC NCCS
196107120Sjulian# else
197107120Sjulian#  define MAXCC 256
198107120Sjulian# endif
199107120Sjulian#else /* POSIX */
200107120Sjulian# ifdef TERMIO
201107120Sjulian#  include <termio.h>
202107120Sjulian#  ifdef NCC
203107120Sjulian#   define MAXCC NCC
204114879Sjulian#  else
205107120Sjulian#   define MAXCC 256
206107120Sjulian#  endif
207107120Sjulian#  ifdef CYTERMIO
208107120Sjulian#   include <cytermio.h>
209107120Sjulian#  endif
210107120Sjulian# else /* TERMIO */
211107120Sjulian#  include <sgtty.h>
212107120Sjulian# endif /* TERMIO */
213107120Sjulian#endif /* POSIX */
214107120Sjulian
215107120Sjulian#ifndef VDISABLE
216107120Sjulian# ifdef _POSIX_VDISABLE
217107120Sjulian#  define VDISABLE _POSIX_VDISABLE
218107120Sjulian# else
219107120Sjulian#  define VDISABLE 0377
220107120Sjulian# endif /* _POSIX_VDISABLE */
221107120Sjulian#endif /* !VDISABLE */
222107120Sjulian
223107120Sjulian
224107120Sjulian/* on sgi, regardless of the stream head's read mode (RNORM/RMSGN/RMSGD)
225107120Sjulian * TIOCPKT mode causes data loss if our buffer is too small (IOSIZE)
226107120Sjulian * to hold the whole packet at first read().
227107120Sjulian * (Marc Boucher)
228107120Sjulian *
229107120Sjulian * matthew green:
230107120Sjulian * TIOCPKT is broken on dgux 5.4.1 generic AViiON mc88100
231107120Sjulian *
232107120Sjulian * Joe Traister: On AIX4, programs like irc won't work if screen
233107120Sjulian * uses TIOCPKT (select fails to return on pty read).
234107120Sjulian */
235107120Sjulian#if defined(sgi) || defined(DGUX) || defined(_IBMR2)
236107120Sjulian# undef TIOCPKT
237107120Sjulian#endif
238107120Sjulian
239107120Sjulian/* linux ncurses is broken, we have to use our own tputs */
240107120Sjulian#if defined(linux) && defined(TERMINFO)
241121054Semax# define tputs xtputs
242107120Sjulian#endif
243107120Sjulian
244107120Sjulian/* Alexandre Oliva: SVR4 style ptys don't work with osf */
245107120Sjulian#ifdef __osf__
246121054Semax# undef HAVE_SVR4_PTYS
247107120Sjulian#endif
248107120Sjulian
249107120Sjulian/*****************************************************************
250107120Sjulian *   utmp handling
251107120Sjulian */
252107120Sjulian
253107120Sjulian#ifdef GETUTENT
254107120Sjulian  typedef char *slot_t;
255107120Sjulian#else
256107120Sjulian  typedef int slot_t;
257107120Sjulian#endif
258107120Sjulian
259107120Sjulian#if defined(UTMPOK) || defined(BUGGYGETLOGIN)
260107120Sjulian# if defined(SVR4) && !defined(DGUX) && !defined(__hpux) && !defined(linux)
261107120Sjulian#  include <utmpx.h>
262107120Sjulian#  define UTMPFILE	UTMPX_FILE
263107120Sjulian#  define utmp		utmpx
264107120Sjulian#  define getutent	getutxent
265107120Sjulian#  define getutid	getutxid
266107120Sjulian#  define getutline	getutxline
267107120Sjulian#  define pututline	pututxline
268107120Sjulian#  define setutent	setutxent
269107120Sjulian#  define endutent	endutxent
270107120Sjulian#  define ut_time	ut_xtime
271107120Sjulian# else /* SVR4 */
272107120Sjulian#  include <utmp.h>
273107120Sjulian# endif /* SVR4 */
274107120Sjulian# ifdef apollo
275107120Sjulian   /*
276107120Sjulian    * We don't have GETUTENT, so we dig into utmp ourselves.
277107120Sjulian    * But we save the permanent filedescriptor and
278107120Sjulian    * open utmp just when we need to.
279107120Sjulian    * This code supports an unsorted utmp. jw.
280107120Sjulian    */
281107120Sjulian#  define UTNOKEEP
282107120Sjulian# endif /* apollo */
283107120Sjulian
284107120Sjulian# ifndef UTMPFILE
285107120Sjulian#  ifdef UTMP_FILE
286107120Sjulian#   define UTMPFILE	UTMP_FILE
287107120Sjulian#  else
288107120Sjulian#   ifdef _PATH_UTMP
289107120Sjulian#    define UTMPFILE	_PATH_UTMP
290107120Sjulian#   else
291107120Sjulian#    define UTMPFILE	"/etc/utmp"
292107120Sjulian#   endif /* _PATH_UTMP */
293121054Semax#  endif
294107120Sjulian# endif
295107120Sjulian
296107120Sjulian#endif /* UTMPOK || BUGGYGETLOGIN */
297107120Sjulian
298107120Sjulian#if !defined(UTMPOK) && defined(USRLIMIT)
299107120Sjulian# undef USRLIMIT
300107120Sjulian#endif
301107120Sjulian
302121054Semax#ifdef LOGOUTOK
303107120Sjulian# ifndef LOGINDEFAULT
304107120Sjulian#  define LOGINDEFAULT 0
305107120Sjulian# endif
306107120Sjulian#else
307107120Sjulian# ifdef LOGINDEFAULT
308107120Sjulian#  undef LOGINDEFAULT
309107120Sjulian# endif
310107120Sjulian# define LOGINDEFAULT 1
311107120Sjulian#endif
312107120Sjulian
313107120Sjulian
314107120Sjulian/*****************************************************************
315107120Sjulian *    file stuff
316107120Sjulian */
317107120Sjulian
318107120Sjulian#ifndef F_OK
319107120Sjulian#define F_OK 0
320114879Sjulian#endif
321107120Sjulian#ifndef X_OK
322114879Sjulian#define X_OK 1
323107120Sjulian#endif
324107120Sjulian#ifndef W_OK
325107120Sjulian#define W_OK 2
326107120Sjulian#endif
327107120Sjulian#ifndef R_OK
328107120Sjulian#define R_OK 4
329107120Sjulian#endif
330114879Sjulian
331107120Sjulian#ifndef S_IFIFO
332107120Sjulian#define S_IFIFO  0010000
333114879Sjulian#endif
334107120Sjulian#ifndef S_IREAD
335114879Sjulian#define S_IREAD  0000400
336107120Sjulian#endif
337114879Sjulian#ifndef S_IWRITE
338107120Sjulian#define S_IWRITE 0000200
339107120Sjulian#endif
340107120Sjulian#ifndef S_IEXEC
341107120Sjulian#define S_IEXEC  0000100
342107120Sjulian#endif
343107120Sjulian
344107120Sjulian#if defined(S_IFIFO) && defined(S_IFMT) && !defined(S_ISFIFO)
345107120Sjulian#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
346107120Sjulian#endif
347107120Sjulian#if defined(S_IFSOCK) && defined(S_IFMT) && !defined(S_ISSOCK)
348107120Sjulian#define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
349107120Sjulian#endif
350107120Sjulian#if defined(S_IFCHR) && defined(S_IFMT) && !defined(S_ISCHR)
351107120Sjulian#define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
352107120Sjulian#endif
353107120Sjulian#if defined(S_IFDIR) && defined(S_IFMT) && !defined(S_ISDIR)
354107120Sjulian#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
355107120Sjulian#endif
356107120Sjulian#if defined(S_IFLNK) && defined(S_IFMT) && !defined(S_ISLNK)
357107120Sjulian#define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
358107120Sjulian#endif
359107120Sjulian
360114879Sjulian/*
361107120Sjulian * SunOS 4.1.3: `man 2V open' has only one line that mentions O_NOBLOCK:
362114879Sjulian *
363107120Sjulian *     O_NONBLOCK     Same as O_NDELAY above.
364114879Sjulian *
365107120Sjulian * on the very same SunOS 4.1.3, I traced the open system call and found
366107120Sjulian * that an open("/dev/ttyy08", O_RDWR|O_NONBLOCK|O_NOCTTY) was blocked,
367107120Sjulian * whereas open("/dev/ttyy08", O_RDWR|O_NDELAY  |O_NOCTTY) went through.
368107120Sjulian *
369107120Sjulian * For this simple reason I now favour O_NDELAY. jw. 4.5.95
370107120Sjulian */
371107120Sjulian#if defined(sun) && !defined(SVR4)
372114879Sjulian# undef O_NONBLOCK
373107120Sjulian#endif
374107120Sjulian
375114879Sjulian#if !defined(O_NONBLOCK) && defined(O_NDELAY)
376107120Sjulian# define O_NONBLOCK O_NDELAY
377114879Sjulian#endif
378107120Sjulian
379114879Sjulian#if !defined(FNBLOCK) && defined(FNONBLOCK)
380107120Sjulian# define FNBLOCK FNONBLOCK
381107120Sjulian#endif
382107120Sjulian#if !defined(FNBLOCK) && defined(FNDELAY)
383107120Sjulian# define FNBLOCK FNDELAY
384107120Sjulian#endif
385107120Sjulian#if !defined(FNBLOCK) && defined(O_NONBLOCK)
386107120Sjulian# define FNBLOCK O_NONBLOCK
387107120Sjulian#endif
388107120Sjulian
389107120Sjulian#ifndef POSIX
390107120Sjulian#undef mkfifo
391107120Sjulian#define mkfifo(n,m) mknod(n,S_IFIFO|(m),0)
392107120Sjulian#endif
393107120Sjulian
394107120Sjulian#if !defined(HAVE_LSTAT) && !defined(lstat)
395107120Sjulian# define lstat stat
396107120Sjulian#endif
397107120Sjulian
398107120Sjulian/*****************************************************************
399107120Sjulian *    signal handling
400107120Sjulian */
401107120Sjulian
402114879Sjulian#ifdef SIGVOID
403107120Sjulian# define SIGRETURN
404114879Sjulian# define sigret_t void
405114879Sjulian#else
406114879Sjulian# define SIGRETURN return 0;
407114879Sjulian# define sigret_t int
408114879Sjulian#endif
409114879Sjulian
410114879Sjulian/* Geeeee, reverse it? */
411114879Sjulian#if defined(SVR4) || (defined(SYSV) && defined(ISC)) || defined(_AIX) || defined(linux) || defined(ultrix) || defined(__386BSD__) || defined(__bsdi__) || defined(POSIX) || defined(NeXT)
412114879Sjulian# define SIGHASARG
413114879Sjulian#endif
414114879Sjulian
415114879Sjulian#ifdef SIGHASARG
416114879Sjulian# define SIGPROTOARG   (int)
417114879Sjulian# define SIGDEFARG     (sigsig) int sigsig;
418114879Sjulian# define SIGARG        0
419114879Sjulian#else
420114879Sjulian# define SIGPROTOARG   (void)
421114879Sjulian# define SIGDEFARG     ()
422114879Sjulian# define SIGARG
423114879Sjulian#endif
424114879Sjulian
425114879Sjulian#ifndef SIGCHLD
426114879Sjulian#define SIGCHLD SIGCLD
427114879Sjulian#endif
428114879Sjulian
429114879Sjulian#if defined(POSIX) || defined(hpux)
430114879Sjulian# define signal xsignal
431114879Sjulian#else
432114879Sjulian# ifdef USESIGSET
433114879Sjulian#  define signal sigset
434114879Sjulian# endif /* USESIGSET */
435114879Sjulian#endif
436114879Sjulian
437114879Sjulian/* used in screen.c and attacher.c */
438114879Sjulian#ifndef NSIG		/* kbeal needs these w/o SYSV */
439114879Sjulian# define NSIG 32
440114879Sjulian#endif /* !NSIG */
441114879Sjulian
442114879Sjulian
443114879Sjulian/*****************************************************************
444114879Sjulian *    Wait stuff
445114879Sjulian */
446158834Smarkus
447158834Smarkus#if (!defined(sysV68) && !defined(M_XENIX)) || defined(NeXT) || defined(M_UNIX)
448158834Smarkus# include <sys/wait.h>
449158834Smarkus#endif
450158834Smarkus
451158834Smarkus#ifndef WTERMSIG
452158834Smarkus# ifndef BSDWAIT /* if wait is NOT a union: */
453158834Smarkus#  define WTERMSIG(status) (status & 0177)
454158834Smarkus# else
455158834Smarkus#  define WTERMSIG(status) status.w_T.w_Termsig
456158834Smarkus# endif
457158834Smarkus#endif
458158834Smarkus
459158834Smarkus#ifndef WSTOPSIG
460158834Smarkus# ifndef BSDWAIT /* if wait is NOT a union: */
461158834Smarkus#  define WSTOPSIG(status) ((status >> 8) & 0377)
462158834Smarkus# else
463158834Smarkus#  define WSTOPSIG(status) status.w_S.w_Stopsig
464158834Smarkus# endif
465158834Smarkus#endif
466158834Smarkus
467158834Smarkus/* NET-2 uses WCOREDUMP */
468158834Smarkus#if defined(WCOREDUMP) && !defined(WIFCORESIG)
469158834Smarkus# define WIFCORESIG(status) WCOREDUMP(status)
470158834Smarkus#endif
471158834Smarkus
472158834Smarkus#ifndef WIFCORESIG
473107120Sjulian# ifndef BSDWAIT /* if wait is NOT a union: */
474107120Sjulian#  define WIFCORESIG(status) (status & 0200)
475107120Sjulian# else
476114879Sjulian#  define WIFCORESIG(status) status.w_T.w_Coredump
477107120Sjulian# endif
478107120Sjulian#endif
479107120Sjulian
480107120Sjulian#ifndef WEXITSTATUS
481114879Sjulian# ifndef BSDWAIT /* if wait is NOT a union: */
482107120Sjulian#  define WEXITSTATUS(status) ((status >> 8) & 0377)
483107120Sjulian# else
484107120Sjulian#  define WEXITSTATUS(status) status.w_T.w_Retcode
485107120Sjulian# endif
486114879Sjulian#endif
487107120Sjulian
488107120Sjulian
489107120Sjulian/*****************************************************************
490107120Sjulian *    select stuff
491114879Sjulian */
492107120Sjulian
493107120Sjulian#if defined(M_XENIX) || defined(M_UNIX) || defined(_SEQUENT_)
494107120Sjulian#include <sys/select.h>		/* for timeval + FD... */
495107120Sjulian#endif
496114879Sjulian
497114879Sjulian/*
498107120Sjulian * SunOS 3.5 - Tom Schmidt - Micron Semiconductor, Inc - 27-Jul-93
499107120Sjulian * tschmidt@vax.micron.com
500107120Sjulian */
501107120Sjulian#ifndef FD_SET
502114879Sjulian# ifndef SUNOS3
503107120Sjuliantypedef struct fd_set { int fds_bits[1]; } fd_set;
504107120Sjulian# endif
505107120Sjulian# define FD_ZERO(fd) ((fd)->fds_bits[0] = 0)
506107120Sjulian# define FD_SET(b, fd) ((fd)->fds_bits[0] |= 1 << (b))
507114879Sjulian# define FD_ISSET(b, fd) ((fd)->fds_bits[0] & 1 << (b))
508114879Sjulian# define FD_SETSIZE 32
509107120Sjulian#endif
510107120Sjulian
511107120Sjulian
512107120Sjulian/*****************************************************************
513114879Sjulian *    user defineable stuff
514107120Sjulian */
515107120Sjulian
516107120Sjulian#ifndef TERMCAP_BUFSIZE
517107120Sjulian# define TERMCAP_BUFSIZE 2048
518114879Sjulian#endif
519107120Sjulian
520107120Sjulian#ifndef MAXPATHLEN
521107120Sjulian# define MAXPATHLEN 1024
522107120Sjulian#endif
523114879Sjulian
524107120Sjulian/*
525107120Sjulian * you may try to vary this value. Use low values if your (VMS) system
526107120Sjulian * tends to choke when pasting. Use high values if you want to test
527107120Sjulian * how many characters your pty's can buffer.
528114879Sjulian */
529107120Sjulian#define IOSIZE		4096
530107120Sjulian
531107120Sjulian