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