Annotation of libwww/Library/src/wwwsys.html, revision 2.81
2.7 timbl 1: <HTML>
2: <HEAD>
2.2 timbl 3: <TITLE>System dependencies in the W3 library</TITLE>
2.80 frystyk 4: <!-- Changed by: Henrik Frystyk Nielsen, 30-Nov-1995 -->
2.7 timbl 5: </HEAD>
2.2 timbl 6: <BODY>
2.35 frystyk 7:
8: <H1>System Dependencies</H1>
9:
10: <PRE>
11: /*
2.49 frystyk 12: ** (c) COPYRIGHT MIT 1995.
2.35 frystyk 13: ** Please first read the full copyright statement in the file COPYRIGH.
14: */
15: </PRE>
16:
17: System-system differences for TCP include files and macros. This file
18: includes for each system the files necessary for network and file
19: I/O. <P>
20:
21: This module is a part of the <A
2.72 frystyk 22: HREF="http://www.w3.org/pub/WWW/Library/">
2.57 frystyk 23: W3C Reference Library</A>.
2.26 frystyk 24:
2.2 timbl 25: <H3>Authors</H3>
26: <DL>
27: <DT>TBL
2.55 frystyk 28: <DD> Tim Berners-Lee, W3 project, CERN, <timbl@w3.org>
2.2 timbl 29: <DT>EvA
2.26 frystyk 30: <DD> Eelco van Asperen <evas@cs.few.eur.nl>
2.2 timbl 31: <DT>MA
32: <DD> Marc Andreesen NCSA
2.7 timbl 33: <DT>MD
2.26 frystyk 34: <DD> Mark Donszelmann <duns@vxcern.cern.ch>
2.2 timbl 35: <DT>AT
2.26 frystyk 36: <DD> Aleksandar Totic <atotic@ncsa.uiuc.edu>
2.4 timbl 37: <DT>SCW
2.26 frystyk 38: <DD> Susan C. Weber <sweber@kyle.eitech.com>
39: <DT>HF
2.55 frystyk 40: <DD> Henrik Frystyk, <frystyk@w3.org>
2.41 frystyk 41: <DT>CLB
2.48 frystyk 42: <DD> Charlie Brooks, <cbrooks@osf.org>
2.2 timbl 43: </DL>
44:
45: <H3>History:</H3>
46: <DL>
47: <DT>22 Feb 91
48: <DD> Written (TBL) as part of
49: the WWW library.
50: <DT>16 Jan 92
2.7 timbl 51: <DD> PC code from (EvA)
2.2 timbl 52: <DT>22 Apr 93
2.41 frystyk 53: <DD>Merged diffs bits from
2.2 timbl 54: xmosaic release
2.4 timbl 55: <DT>29 Apr 93
2.41 frystyk 56: <DD>Windows/NT code from (SCW)
2.7 timbl 57: <DT>29 Sep 93
2.48 frystyk 58: <DD>Mar 96 CLB - changed SLEEP() macro for Windows/NT MSC compiler
59: added BOOLEAN_DEFINED macro to avoid duplicate definitions in HUtils.h
60: changed netread() macros to support reading from stdin,etc. as well
61: as sockets. (Required for linemode browser to work).
2.2 timbl 62: </DL>
63:
2.1 timbl 64: <PRE>
65: #ifndef TCP_H
66: #define TCP_H
2.26 frystyk 67: </PRE>
68:
69: <H2>Default values</H2>These values may be reset and altered by
70: system-specific sections later on. There is also a bunch of
71: <A NAME="z5" HREF="#z2">defaults</A> at the end and a section for
72: <A NAME="z11" HREF="#z10">ordinary BSD unix versions</A>.
2.1 timbl 73:
2.37 frystyk 74: <PRE>
75: #define SELECT /* Can handle >1 channel */
76: #define GOT_SYSTEM /* Can call shell with string */
77: #define GOT_PASSWD /* Can we use getpass() command */
2.59 frystyk 78: #define TTY_IS_SELECTABLE /* TTY can be passed to select() call */
2.37 frystyk 79: </PRE>
2.1 timbl 80:
2.60 frystyk 81: If you want to use reentrant functions, for example
82: <CODE>gmtime_r</CODE> then enable this flag
83:
84: <PRE>
85: #if 0
86: #define HT_REENTRANT
87: #endif
88: </PRE>
89:
2.37 frystyk 90: <HR>
2.26 frystyk 91:
2.32 frystyk 92: <A NAME="z1"><H1>Platform Specific Stuff</H1></A>
2.26 frystyk 93:
2.37 frystyk 94: Information below this line is specific for most platforms. See also
95: <A NAME="z6" HREF="#z2">General Stuff</A>
2.26 frystyk 96:
2.68 frystyk 97: <H2>Macintosh - Metrowerks Codewarrior 6</H2>
2.1 timbl 98:
2.68 frystyk 99: Metrowerks Codewarrior is one development environment on the Mac. We
100: are using GUSI (1.5.9) by Matthias Neeracher
101: <neeri@iis.ee.ethz.ch> for our socket lib. <P>
102:
103: Compiles on PPC. Should compile on 68K. <P>
104:
105: August 31, 1995 by Steven T. Roussey <sroussey@eng.uci.edu> (STR)
106:
107: <PRE>
108: #ifdef __MWERKS__
109: #include <gusi.h>
110: #include <dirent.h>
111: #include <errno.h>
112: #include <sys/errno.h>
2.70 frystyk 113: #include <sioux.h>
2.68 frystyk 114:
115: #define INCLUDES_DONE
116: #define TCP_INCLUDES_DONE
2.1 timbl 117:
2.68 frystyk 118: #define GUSI /* Identifies changes made for GUSI */
119: #define NO_GETDOMAINNAME /* STR */
120: #define NO_PASSWD /* STR */
2.26 frystyk 121:
2.68 frystyk 122: #define NO_GETWD
123: #define HAS_GETCWD
124: #define USE_DIRENT
125: #define NO_GROUPS
126: #define GOT_READ_DIR
127:
128: #define NO_TIMEZONE /* STR */
129: #define NO_GMTOFF
130: #define HAVE_STRERROR
131:
132: #define STRUCT_DIRENT struct dirent
133: #define SLEEP(n) GUSIDefaultSpin( SP_SLEEP, n/60)
134:
135: #define MKDIR(a,b) mkdir(a)
136: #endif
2.26 frystyk 137: </PRE>
2.1 timbl 138:
2.26 frystyk 139: <H2>Macintosh - MPW</H2>
140:
141: MPW is one development environment on the Mac.<P>
2.1 timbl 142:
2.26 frystyk 143: This entry was created by Aleksandar Totic (atotic@ncsa.uiuc.edu) this
144: file is compatible with sockets package released by NCSA. One major conflict
145: is that this library redefines write/read/etc as macros. In some of HTML code
146: these macros get executed when they should not be. Such files should
147: define NO_SOCKET_DEFS on top. This is a temporary hack.
2.1 timbl 148:
2.26 frystyk 149: <PRE>
150: #ifdef applec /* MPW */
2.2 timbl 151: #undef GOT_SYSTEM
152: #define DEBUG /* Can't put it on the CC command line */
2.37 frystyk 153:
2.26 frystyk 154: #define NO_UNIX_IO /* getuid() missing */
155: #define NO_GETPID /* getpid() does not exist */
156: #define NO_GETWD /* getwd() does not exist */
2.2 timbl 157:
158: #define NETCLOSE s_close /* Routine to close a TCP-IP socket */
159: #define NETREAD s_read /* Routine to read from a TCP-IP socket */
160: #define NETWRITE s_write /* Routine to write to a TCP-IP socket */
2.37 frystyk 161:
2.2 timbl 162: #define _ANSI_SOURCE
163: #define GUI
164: #define LINEFEED 10
165: #define ANON_FTP_HOSTNAME
166: #ifndef NO_SOCKET_DEFS
2.32 frystyk 167: #include <MacSockDefs.h>
2.26 frystyk 168: #endif /* NO_SOCKET_DEFS */
2.2 timbl 169:
2.32 frystyk 170: #include <socket.ext.h>
171: #include <string.h>
2.2 timbl 172:
2.37 frystyk 173: #endif /* applec MPW */
2.26 frystyk 174: </PRE>
2.1 timbl 175:
2.6 timbl 176: <H2>Big Blue - the world of incompatibility</H2>
2.26 frystyk 177:
2.68 frystyk 178: <H3>IBM RS6000</H3>
2.43 frystyk 179:
180: On the IBM RS-6000, AIX is almost Unix. <P>
2.26 frystyk 181:
182: <PRE>
183: #ifdef _AIX
2.2 timbl 184: #define AIX
185: #endif
2.1 timbl 186: #ifdef AIX
2.43 frystyk 187: #define NO_ALTZONE
2.64 frystyk 188: #define RLOGIN_USER
2.1 timbl 189: #define unix
190: #endif
191:
2.2 timbl 192: /* AIX 3.2
193: ** -------
194: */
195:
196: #ifdef _IBMR2
2.6 timbl 197: #define USE_DIRENT /* sys V style directory open */
2.2 timbl 198: #endif
2.26 frystyk 199: </PRE>
2.2 timbl 200:
2.68 frystyk 201: <H3>IBM VM-CMS, VM-XA Mainframes</H3>
2.2 timbl 202:
2.26 frystyk 203: MVS is compiled as for VM. MVS has no unix-style I/O. The command line
204: compile options seem to come across in lower case.
205:
206: <PRE>
207: #ifdef mvs
2.1 timbl 208: #define MVS
209: #endif
210:
211: #ifdef MVS
212: #define VM
213: #endif
214:
215: #ifdef NEWLIB
216: #pragma linkage(newlib,OS) /* Enables recursive NEWLIB */
217: #endif
218:
219: /* VM doesn't have a built-in predefined token, so we cheat: */
220: #ifndef VM
2.32 frystyk 221: #include <string.h> /* For bzero etc - not VM */
2.2 timbl 222: #endif
223:
224: /* Note: All include file names must have 8 chars max (+".h")
225: **
226: ** Under VM, compile with "(DEF=VM,SHORT_NAMES,DEBUG)"
227: **
228: ** Under MVS, compile with "NOMAR DEF(MVS)" to get rid of 72 char margin
229: ** System include files TCPIP and COMMMAC neeed line number removal(!)
230: */
231:
232: #ifdef VM /* or MVS -- see above. */
2.37 frystyk 233: #define GOT_PIPE /* Of sorts */
2.2 timbl 234: #define NOT_ASCII /* char type is not ASCII */
235: #define NO_UNIX_IO /* Unix I/O routines are not supported */
236: #define NO_GETPID /* getpid() does not exist */
237: #define NO_GETWD /* getwd() does not exist */
238: #ifndef SHORT_NAMES
239: #define SHORT_NAMES /* 8 character uniqueness for globals */
240: #endif
2.32 frystyk 241: #include <manifest.h>
242: #include <bsdtypes.h>
243: #include <stdefs.h>
244: #include <socket.h>
245: #include <in.h>
246: #include <inet.h>
247: #include <netdb.h>
248: #include <errno.h> /* independent */
2.2 timbl 249: extern char asciitoebcdic[], ebcdictoascii[];
250: #define TOASCII(c) (c=='\n' ? 10 : ebcdictoascii[c])
2.26 frystyk 251: #define FROMASCII(c) (c== 10 ? '\n' : asciitoebcdic[c])
2.32 frystyk 252: #include <bsdtime.h>
253: #include <time.h>
254: #include <string.h>
2.2 timbl 255: #define INCLUDES_DONE
256: #define TCP_INCLUDES_DONE
2.63 frystyk 257: #define SIMPLE_TELNET
2.1 timbl 258: #endif
2.26 frystyk 259: </PRE>
2.1 timbl 260:
2.26 frystyk 261: <H2>IBM-PC running MS-DOS with SunNFS for TCP/IP</H2>
2.32 frystyk 262: This code thanks to Eelco van Asperen <evas@cs.few.eur.nl>
2.1 timbl 263:
2.26 frystyk 264: <PRE>
265: #ifdef PCNFS
2.32 frystyk 266: #include <sys/types.h>
267: #include <string.h>
268: #include <errno.h> /* independent */
269: #include <sys/time.h> /* independent */
270: #include <sys/stat.h>
271: #include <fcntl.h> /* In place of sys/param and sys/file */
2.2 timbl 272: #define INCLUDES_DONE
273: #define FD_SET(fd,pmask) (*(unsigned*)(pmask)) |= (1<<(fd))
274: #define FD_CLR(fd,pmask) (*(unsigned*)(pmask)) &= ~(1<<(fd))
275: #define FD_ZERO(pmask) (*(unsigned*)(pmask))=0
276: #define FD_ISSET(fd,pmask) (*(unsigned*)(pmask) & (1<<(fd)))
2.26 frystyk 277: #define NO_GROUPS
2.2 timbl 278: #endif /* PCNFS */
2.26 frystyk 279: </PRE>
2.2 timbl 280:
2.38 frystyk 281: <H2>PC running Windows (16-bit)</H2>
2.37 frystyk 282:
283: Help provided by Susan C. Weber <sweber@kyle.eitech.com>, Paul
284: Hounslow <P.M.Hounslow@reading.ac.uk>, and a lot of other PC people.
2.26 frystyk 285:
286: <PRE>
287: #ifdef _WINDOWS
2.37 frystyk 288: #include <windows.h>
289: #include <fcntl.h>
290: #include <sys\types.h>
291: #include <sys\stat.h>
292:
293: #define NETREAD(s,b,l) recv((s),(b),(l),0)
294: #define NETWRITE(s,b,l) send((s),(b),(l),0)
295: #define NETCLOSE(s) closesocket(s)
296: #define IOCTL(s,c,a) ioctlsocket(s,c, (long *) a)
2.4 timbl 297:
2.41 frystyk 298: #define MKDIR(a,b) mkdir((a))
2.56 frystyk 299: #define REMOVE(a) remove((a))
2.47 frystyk 300: #define DEFAULT_SUFFIXES "."
2.41 frystyk 301:
2.59 frystyk 302: #ifdef TTY_IS_SELECTABLE
303: #undef TTY_IS_SELECTABLE
304: #endif
305:
2.32 frystyk 306: #include <io.h>
307: #include <string.h>
308: #include <process.h>
309: #include <time.h>
310: #include <direct.h>
311: #include <stdio.h>
2.37 frystyk 312: #include <stdlib.h>
2.32 frystyk 313: #include <winsock.h>
2.37 frystyk 314:
2.78 frystyk 315: #ifndef _CONSOLE
316: #define NO_STDIO
2.37 frystyk 317: #endif
318:
319: #define NO_PASSWD
320: #define NO_GETWD
2.59 frystyk 321: #define NO_FCNTL
2.37 frystyk 322: #define HAS_GETCWD
323: #define NO_GETPASSWD
2.73 frystyk 324:
2.37 frystyk 325: #define NO_GETDOMAINNAME
2.73 frystyk 326: #define NO_RESOLV_CONF
327:
2.41 frystyk 328: #define BOOLEAN_DEFINED
2.4 timbl 329: #define INCLUDES_DONE
330: #define TCP_INCLUDES_DONE
2.37 frystyk 331:
2.79 frystyk 332: #define SOCKET SOCKET /* WinSocks socket descriptor */
2.37 frystyk 333: #define INVSOC INVALID_SOCKET /* WinSocks invalid socket */
334:
335: #define DESIRED_WINSOCK_VERSION 0x0101 /* we'd like winsock ver 1.1... */
336: #define MINIMUM_WINSOCK_VERSION 0x0101 /* ...but we'll take ver 1.1 :) */
337: </PRE>
338:
339: <H3>File Access</H3>
340:
341: These next defintions are because the UNIX stuff is not supplied with
342: BC4 (Paul Hounslow <P.M.Hounslow@reading.ac.uk>
343:
344: <PRE>
345: #define NO_UNIX_IO
346:
347: typedef unsigned long mode_t;
348:
2.48 frystyk 349: #define _IFMT 0170000 /* type of file */
2.37 frystyk 350: #define _IFDIR 0040000 /* directory */
351: #define _IFCHR 0020000 /* character special */
352: #define _IFBLK 0060000 /* block special */
353: #define _IFREG 0100000 /* regular */
354: #define _IFLNK 0120000 /* symbolic link */
355: #define _IFSOCK 0140000 /* socket */
356: #define _IFIFO 0010000 /* fifo */
357:
358: #define S_ISUID 0004000 /* set user id on execution */
359: #define S_ISGID 0002000 /* set group id on execution */
360: #define S_ISVTX 0001000 /* save swapped text even after use */
361:
362: #ifdef S_IREAD
363: #undef S_IREAD
364: #define S_IREAD 0000400 /* read permission, owner */
365: #endif
366:
367: #ifdef S_IWRITE
368: #undef S_IWRITE
369: #define S_IWRITE 0000200 /* write permission, owner */
370: #endif
371:
372: #ifdef S_IEXEC
373: #undef S_IEXEC
374: #define S_IEXEC 0000100 /* execute/search permission, owner */
375: #endif
376:
377: #define S_ENFMT 0002000 /* enforcement-mode locking */
378:
379: #ifdef S_IFMT
380: #undef S_IFMT
381: #define S_IFMT _IFMT
382: #endif
383:
384: #ifdef S_IDIR
385: #undef S_IDIR
386: #define S_IFDIR _IFDIR
387: #endif
388:
389: #ifdef S_IFCHR
390: #undef S_IFCHR
391: #define S_IFCHR _IFCHR
392: #endif
393:
394: #ifdef S_IBLK
395: #undef S_IBLK
396: #define S_IFBLK _IFBLK
397: #endif
398:
399: #ifdef S_IREG
400: #undef S_IREG
401: #define S_IFREG _IFREG
402: #endif
403:
404: #define S_IFLNK _IFLNK
405:
406: #ifdef S_IFIFO
407: #undef S_IFIFO
408: #define S_IFIFO _IFIFO
409: #endif
410:
411: #define S_IRWXU 0000700 /* rwx, owner */
412: #define S_IRUSR 0000400 /* read permission, owner */
413: #define S_IWUSR 0000200 /* write permission, owner */
414: #define S_IXUSR 0000100 /* execute/search permission, owner */
415: #define S_IRWXG 0000070 /* rwx, group */
416: #define S_IRGRP 0000040 /* read permission, group */
417: #define S_IWGRP 0000020 /* write permission, grougroup */
418: #define S_IXGRP 0000010 /* execute/search permission, group */
419: #define S_IRWXO 0000007 /* rwx, other */
420: #define S_IROTH 0000004 /* read permission, other */
421: #define S_IWOTH 0000002 /* write permission, other */
422: #define S_IXOTH 0000001 /* execute/search permission, other */
423:
424: #define S_ISREG(m) (((m)&_IFMT) == _IFREG)
425: </PRE>
426:
427: <H3>Errno and Return Codes</H3>
428:
429: Winsock has its own errno codes and it returns them through
430: WSAGetLastError(). However, it does also support BSD error codes, so
431: we make a compromise.
432:
433: <PRE>
434: /* extern int errno; */
435: #define socerrno WSAGetLastError()
436: #define ERRNO_DONE
437: </PRE>
438:
439: Return code for socket functions. We can't use -1 as return value
440:
441:
2.77 frystyk 442: WSA definitions moved from _WIN32 ifdef by EGP
2.2 timbl 443:
2.77 frystyk 444: <PRE>
2.38 frystyk 445:
2.77 frystyk 446: #define EWOULDBLOCK WSAEWOULDBLOCK
447: #define EINPROGRESS WSAEINPROGRESS
448: #define ECONNREFUSED WSAECONNREFUSED
449: #define ETIMEDOUT WSAETIMEDOUT
450: #define ENETUNREACH WSAENETUNREACH
451: #define EHOSTUNREACH WSAEHOSTUNREACH
452: #define EHOSTDOWN WSAEHOSTDOWN
453: #define EISCONN WSAEISCONN
2.38 frystyk 454:
2.80 frystyk 455: #if 0
2.77 frystyk 456: #undef NETREAD
457: #undef NETWRITE
2.41 frystyk 458:
459: #define NETREAD(s,b,l) ((s) >= 10) ? recv((s),(b),(l),0) : read((s), (b), (l))
2.48 frystyk 460: #define NETWRITE(s,b,l) ((s) >= 10) ? send((s),(b),(l),0) : write((s), (b), (l))
2.80 frystyk 461: #endif
2.77 frystyk 462: /* #undef NO_UNIX_IO */ /* CLB NT has some Unix IO - must be more specific */
2.48 frystyk 463:
464: /* Some compilers do only define WIN32 and NOT _WINDOWS */
2.77 frystyk 465: #define NO_GROUPS
466: #define NO_ALTZONE
2.48 frystyk 467: #undef MKDIR
2.77 frystyk 468: #ifdef _WIN32
2.48 frystyk 469: #define MKDIR(a,b) mkdir((a)) /* CLB NT has mkdir, but only one arg */
2.77 frystyk 470: #define SLEEP(n) Sleep((n)*1000)
471: #else
472: #define MKDIR(a,b) _mkdir((a)) /* CLB NT has mkdir, but only one arg */
2.50 frystyk 473: #endif /* WIN32 */
2.77 frystyk 474: #endif /* WINDOWS */
2.38 frystyk 475: </PRE>
476:
2.26 frystyk 477: <H2>VAX/VMS</H2>
2.38 frystyk 478:
2.26 frystyk 479: Under VMS, there are many versions of TCP-IP. Define one if you do not
2.4 timbl 480: use Digital's UCX product:
2.38 frystyk 481:
2.4 timbl 482: <DL>
483: <DT>UCX
2.5 timbl 484: <DD> DEC's "Ultrix connection" (default)
2.4 timbl 485: <DT>WIN_TCP
2.5 timbl 486: <DD> From Wollongong, now GEC
487: software.
2.4 timbl 488: <DT>MULTINET
2.5 timbl 489: <DD> From SRI, now from TGV Inv.
2.4 timbl 490: <DT>DECNET
2.5 timbl 491: <DD> Cern's TCP socket emulation
2.4 timbl 492: over DECnet
493: </DL>
2.37 frystyk 494:
495: The last three do not interfere with the unix i/o library, and so they
496: need special calls to read, write and close sockets. In these cases
497: the socket number is a VMS channel number, so we make the @@@ HORRIBLE
498: @@@ assumption that a channel number will be greater than 10 but a
499: unix file descriptor less than 10. It works.
2.26 frystyk 500:
501: <PRE>
2.76 frystyk 502: #ifdef VMS
503: #include "HTVMSUtils.h"
2.47 frystyk 504: #define CACHE_FILE_PREFIX "SYS$LOGIN:Z_"
505: #define DEFAULT_SUFFIXES "._"
2.7 timbl 506:
507: #ifdef WIN_TCP
2.32 frystyk 508: #define NETREAD(s,b,l) ((s)>10 ? netread((s),(b),(l)) : read((s),(b),(l)))
509: #define NETWRITE(s,b,l) ((s)>10 ? netwrite((s),(b),(l)) : write((s),(b),(l)))
510: #define NETCLOSE(s) ((s)>10 ? netclose(s) : close(s))
2.16 duns 511: #endif /* WIN_TCP */
2.1 timbl 512:
513: #ifdef MULTINET
514: #undef NETCLOSE
515: #undef NETREAD
516: #undef NETWRITE
2.32 frystyk 517: #define NETREAD(s,b,l) ((s)>10 ? socket_read((s),(b),(l)) : read((s),(b),(l)))
518: #define NETWRITE(s,b,l) ((s)>10 ? socket_write((s),(b),(l)) : \
2.1 timbl 519: write((s),(b),(l)))
2.32 frystyk 520: #define NETCLOSE(s) ((s)>10 ? socket_close(s) : close(s))
2.37 frystyk 521: #define IOCTL(s,c,a) socket_ioctl(s,c,a);
2.16 duns 522: #endif /* MULTINET */
2.1 timbl 523:
524: #ifdef DECNET
2.74 frystyk 525: #define DNP_OBJ 80 /* This one doesn't look busy, but we must check */
526: /* That one was for decnet */
527: #undef SELECT /* not supported */
2.32 frystyk 528: #define NETREAD(s,b,l) ((s)>10 ? recv((s),(b),(l),0) : read((s),(b),(l)))
529: #define NETWRITE(s,b,l) ((s)>10 ? send((s),(b),(l),0) : write((s),(b),(l)))
530: #define NETCLOSE(s) ((s)>10 ? socket_close(s) : close(s))
2.73 frystyk 531:
532: #define NO_GETHOSTNAME /* Decnet doesn't have a name server */
2.1 timbl 533: #endif /* Decnet */
2.73 frystyk 534:
535: #define NO_RESOLV_CONF
536: #define NO_GETDOMAINNAME
2.31 duns 537:
2.1 timbl 538: /* Certainly this works for UCX and Multinet; not tried for Wollongong
539: */
540: #ifdef MULTINET
2.32 frystyk 541: #include <time.h>
2.16 duns 542: #ifdef __TIME_T
543: #define __TYPES
544: #define __TYPES_LOADED
545: #endif /* __TIME_T */
2.37 frystyk 546: #include <multinet_root:[multinet.include.sys]types.h>
547: #include <multinet_root:[multinet.include]errno.h>
2.16 duns 548: #ifdef __TYPES
549: #define __TIME_T
550: #endif /* __TYPE */
551: #ifdef __TIME_LOADED
552: #define __TIME
553: #endif /* __TIME_LOADED */
2.37 frystyk 554: #include <multinet_root:[multinet.include.sys]time.h>
2.16 duns 555: #else /* not MULTINET */
2.32 frystyk 556: #include <types.h>
557: #include <errno.h>
558: #include <time.h>
2.16 duns 559: #endif /* not MULTINET */
2.1 timbl 560:
561: #include string
562:
563: #ifndef STDIO_H
2.24 luotonen 564: #include <stdio>
2.1 timbl 565: #define STDIO_H
566: #endif
567:
568: #include file
569:
2.37 frystyk 570: #ifndef DECNET /* Why is it used at all ? Types conflict with "types.h> */
2.1 timbl 571: #include unixio
572: #endif
573:
574: #define INCLUDES_DONE
575:
576: #ifdef MULTINET /* Include from standard Multinet directories */
2.37 frystyk 577: #include <multinet_root:[multinet.include.sys]socket.h>
2.1 timbl 578: #ifdef __TIME_LOADED /* defined by sys$library:time.h */
579: #define __TIME /* to avoid double definitions in next file */
580: #endif
2.37 frystyk 581: #include <multinet_root:[multinet.include.netinet]in.h>
582: #include <multinet_root:[multinet.include.arpa]inet.h>
583: #include <multinet_root:[multinet.include]netdb.h>
584: #include <multinet_root:[multinet.include.sys]ioctl.h>
2.1 timbl 585:
586: #else /* not multinet */
587: #ifdef DECNET
2.37 frystyk 588: #include <types.h> /* for socket.h */
589: #include <socket.h>
2.65 frystyk 590: #include <dn>
591: #include <dnetdb>
2.1 timbl 592:
593: #else /* UCX or WIN */
2.16 duns 594: #ifdef CADDR_T
595: #define __CADDR_T
596: #endif /* problem with xlib.h inclusion */
2.32 frystyk 597: #include <socket.h>
598: #include <in.h>
599: #include <inet.h>
600: #include <netdb.h>
601: #include <ucx$inetdef.h>
2.1 timbl 602:
603: #endif /* not DECNET */
604: #endif /* of Multinet or other TCP includes */
605:
606: #define TCP_INCLUDES_DONE
2.63 frystyk 607:
608: #ifdef UCX
609: #define SIMPLE_TELNET
610: #endif
2.26 frystyk 611: </PRE>
2.1 timbl 612:
2.31 duns 613: On VMS directory browsing is available through a separate
614: copy of dirent.c. The definition of R_OK seem to be missing
615: from the system include files...
616:
617: <PRE>
618: #define USE_DIRENT
2.37 frystyk 619: #define GOT_READ_DIR
620: #include <dirent.h>
2.31 duns 621: #define STRUCT_DIRENT struct dirent
622: #define R_OK 4
623: </PRE>
624:
2.37 frystyk 625: On VMS machines, the linker needs to be told to put global data
626: sections into a data segment using these storage
2.7 timbl 627: classes. (MarkDonszelmann)
2.26 frystyk 628:
629: <PRE>
630: #ifdef VAXC
2.7 timbl 631: #define GLOBALDEF globaldef
632: #define GLOBALREF globalref
633: #endif /* VAXC */
2.1 timbl 634: #endif /* vms */
2.26 frystyk 635: </PRE>
2.1 timbl 636:
2.26 frystyk 637: On non-VMS machines, the GLOBALDEF and GLOBALREF storage types default
2.7 timbl 638: to normal C storage types.
2.26 frystyk 639:
640: <PRE>
641: #ifndef GLOBALREF
2.7 timbl 642: #define GLOBALDEF
643: #define GLOBALREF extern
644: #endif
2.31 duns 645: </PRE>
646:
2.66 frystyk 647: On non-VMS machines STAT should be stat...On VMS machines
648: STAT is a function that converts directories and devices so that you
2.31 duns 649: can stat them.
650:
651: <PRE>
652: #ifdef VMS
2.37 frystyk 653: typedef unsigned long mode_t;
2.69 frystyk 654: #define HT_STAT HTStat
655: #define HT_LSTAT HTStat
656: #else
657: #define HT_STAT stat
658: #define HT_LSTAT lstat
2.31 duns 659: #endif /* non VMS */
2.26 frystyk 660: </PRE>
2.7 timbl 661:
2.41 frystyk 662: <H3>Strftime and other time stuff</H3>
663:
664: <PRE>
665: #ifdef VMS
666: #ifndef DECC
667: #define NO_STRFTIME
668: #endif
669: #define NO_MKTIME
670: #define NO_TIMEGM
671: #define NO_GMTOFF
672: #define NO_TIMEZONE
673: #endif
674: </PRE>
675:
2.37 frystyk 676: <H3>Definition of Errno</H3>
677:
678: <PRE>
679: #ifdef VMS
680: #ifndef __DECC
681: extern int uerrno; /* Deposit of error info (as per errno.h) */
682: extern volatile noshare int socket_errno; /* socket VMS error info
683: (used for translation of vmserrno) */
684: extern volatile noshare int vmserrno; /* Deposit of VMS error info */
685: extern volatile noshare int errno; /* noshare to avoid PSECT conflict */
686: #define ERRNO_DONE
687: #endif /* not DECC */
688: #endif /* VMS */
689: </PRE>
690:
2.26 frystyk 691: <H2>SCO ODT unix version</H2>
2.1 timbl 692:
2.32 frystyk 693: (by Brian King)
694:
2.2 timbl 695: <PRE>
696: #ifdef sco
2.32 frystyk 697: #include <grp.h>
698: #include <unistd.h>
699: #include <sys/fcntl.h>
700: #include <time.h>
2.2 timbl 701: #define USE_DIRENT
2.32 frystyk 702: #define NEED_INITGROUPS
2.37 frystyk 703: #define NO_GETDOMAINNAME
2.1 timbl 704: #endif
2.26 frystyk 705: </PRE>
2.1 timbl 706:
2.40 frystyk 707: <H2>BSDi BSD/386 Unix</H2>
708:
709: Specific stuff for BSDi BSD/386
710:
711: <PRE>
712: #ifdef bsdi
713: #define NO_GETDOMAINNAME
714: #endif
715: </PRE>
716:
2.2 timbl 717: <H2>MIPS unix</H2>
2.26 frystyk 718: Mips hack (bsd4.3/sysV mixture...)
2.1 timbl 719:
2.26 frystyk 720: <PRE>
2.25 luotonen 721: #ifdef Mips /* Bruker */
722: typedef mode_t int;
723: #define S_ENFMT S_ISGID /* record locking enforcement flag */
2.37 frystyk 724: #define S_ISCHR(m) ((m) & S_IFCHR)
725: #define S_ISBLK(m) ((m) & S_IFBLK)
726: #define S_ISDIR(m) (((m)& S_IFMT) == S_IFDIR)
727: #define S_ISREG(m) (((m)& S_IFMT) == S_IFREG)
2.32 frystyk 728: #define WEXITSTATUS(s) (((s).w_status >> 8) & 0377)
729: #define NO_STRFTIME
2.41 frystyk 730:
731: /* Mips can't uppercase non-alpha */
732: #define TOLOWER(c) (isupper(c) ? tolower(c) : (c))
733: #define TOUPPER(c) (islower(c) ? toupper(c) : (c))
2.26 frystyk 734: </PRE>
735:
736: <H3>File Permissions</H3>
2.1 timbl 737:
2.26 frystyk 738: <PRE>
739: #ifndef S_IRWXU
740: #define S_IRWXU 0000700
741: #define S_IRWXG 0000070
742: #define S_IRWXO 0000007
743: #define S_IRUSR 0000400
744: #define S_IWUSR 0000200
745: #define S_IXUSR 0000100
746: #define S_IRGRP 0000040
747: #define S_IWGRP 0000020
748: #define S_IXGRP 0000010
749: #define S_IROTH 0000004
750: #define S_IWOTH 0000002
751: #define S_IXOTH 0000001
752: #endif /* S_IRWXU */
753: #endif /* Mips */
2.8 timbl 754: </PRE>
2.26 frystyk 755:
2.74 frystyk 756: <H2>Linux</H2>
757:
758: Linux support (thanks to Rainer Klute)
759:
760: <PRE>
761: #ifdef linux
762: #include <unistd.h>
763: #include <limits.h>
764: #include <sys/fcntl.h>
765:
766: #define NO_ALTZONE
767: #define NO_GETWD
768: #define HAS_GETCWD
769: #define FULL_TELNET
770: #endif /* linux */
771: </PRE>
772:
2.10 luotonen 773: <H2>Solaris</H2>
2.32 frystyk 774:
2.74 frystyk 775: Solaris and other SVR4 based systems
2.32 frystyk 776:
2.10 luotonen 777: <PRE>
2.71 frystyk 778: #if defined(__svr4__) || defined(_POSIX_SOURCE) || defined(__hpux) || defined(__sgi)
2.32 frystyk 779:
2.74 frystyk 780: #if defined(__hpux)
2.42 frystyk 781: #define NO_ALTZONE
782: #endif
2.41 frystyk 783:
2.32 frystyk 784: #ifdef UTS4 /* UTS wants sys/types.h first */
785: #include <sys/types.h>
786: #endif
787:
2.28 luotonen 788: #include <unistd.h>
2.32 frystyk 789:
790: #ifdef UTS4
791: #include <sys/fcntl.h>
792: #define POSIXWAIT
793: #endif
794:
795: #ifdef AIX /* Apple Unix */
2.28 luotonen 796: #include <fcntl.h>
797: #else
798: #include <sys/fcntl.h>
799: #endif
800: </PRE>
801:
2.32 frystyk 802: This is for NCR 3000 and Pyramid that also are SVR4 systems. Thanks to
803: <EM>Alex Podlecki, <a.podlecki@att.com></EM>
804:
2.28 luotonen 805: <PRE>
2.32 frystyk 806: #ifndef NGROUPS_MAX
807: #include <limits.h>
808: #endif
2.41 frystyk 809:
810: /* Pyramid and Mips can't uppercase non-alpha */
811: #ifdef pyramid
812: #define TOLOWER(c) (isupper(c) ? tolower(c) : (c))
813: #define TOUPPER(c) (islower(c) ? toupper(c) : (c))
814: #endif
815:
2.37 frystyk 816: </PRE>
817:
818: <CODE>getwd()</CODE> is BSD. System V has <CODE>getcwd()</CODE>
819:
820: <PRE>
821: #define NO_GETWD
822: #define HAS_GETCWD
2.32 frystyk 823:
2.33 frystyk 824: #endif /* Solaris and SVR4 */
2.32 frystyk 825: </PRE>
2.28 luotonen 826:
2.32 frystyk 827: <H2>UTS 2.1 (BSD-like)</H2>
828: <PRE>
829: #ifdef UTS2
2.28 luotonen 830: #include <time.h>
2.32 frystyk 831: #include <fcntl.h>
2.28 luotonen 832:
2.41 frystyk 833: #ifndef R_OK
834: #define R_OK 4
835: #endif
2.32 frystyk 836: #define NO_STRFTIME
837: #define WEXITSTATUS(x) ((int)((x).w_T.w_Retcode))
2.28 luotonen 838:
2.32 frystyk 839: #undef POSIXWAIT
840: #endif /* UTS2 */
2.10 luotonen 841: </PRE>
2.28 luotonen 842:
2.8 timbl 843: <H2>OSF/1</H2>
2.44 frystyk 844:
2.26 frystyk 845: <PRE>
846: #ifdef __osf__
2.8 timbl 847: #define USE_DIRENT
2.44 frystyk 848: #define NO_TIMEZONE /* OSF/1 has gmtoff */
2.8 timbl 849: #endif /* OSF1 AXP */
2.43 frystyk 850: </PRE>
851:
852: <H2>Ultrix Decstation</H2>
853:
854: <PRE>
855: #ifdef decstation
2.69 frystyk 856: #include <unistd.h>
2.43 frystyk 857: #define NO_TIMEZONE /* Ultrix has gmtoff */
2.63 frystyk 858: #define RLOGIN_USER
2.43 frystyk 859: #endif
2.21 frystyk 860: </PRE>
861:
2.22 luotonen 862: <H2>ISC 3.0</H2>
863: by Lauren Weinstein <lauren@vortex.com>.
864: <PRE>
865:
2.30 luotonen 866: #ifdef ISC3 /* Lauren */
867: #define USE_DIRENT
2.37 frystyk 868: #define GOT_READ_DIR
2.30 luotonen 869: #include <sys/ipc.h>
870: #include <sys/dirent.h>
871: #define direct dirent
872: #include <sys/unistd.h>
873: #define d_namlen d_reclen
874: #include <sys/limits.h>
2.37 frystyk 875: typedef int mode_t;
2.41 frystyk 876:
2.30 luotonen 877: #define SIGSTP
2.41 frystyk 878:
2.30 luotonen 879: #define POSIXWAIT
2.37 frystyk 880: #define _POSIX_SOURCE
2.41 frystyk 881:
2.30 luotonen 882: #include <sys/types.h>
883: #include <sys/wait.h>
884: #include <net/errno.h>
2.22 luotonen 885:
2.30 luotonen 886: #define _SYSV3
887: #include <time.h>
2.22 luotonen 888:
2.25 luotonen 889: #include <sys/fcntl.h>
2.22 luotonen 890: #define S_ISDIR(m) (((m) & 0170000) == 0040000)
891: #define S_ISCHR(m) (((m) & 0170000) == 0020000)
892: #define S_ISBLK(m) (((m) & 0170000) == 0060000)
893: #define S_ISREG(m) (((m) & 0170000) == 0100000)
894: #define S_ISFIFO(m) (((m) & 0170000) == 0010000)
895: #define S_ISLNK(m) (((m) & 0170000) == 0120000)
896: #endif /* ISC 3.0 */
2.21 frystyk 897: </PRE>
898:
2.13 luotonen 899: <H2>NeXT</H2>
2.41 frystyk 900:
901: Next has a lot of strange changes in constants...
902:
2.13 luotonen 903: <PRE>
904: #ifdef NeXT
2.37 frystyk 905: #include <sys/types.h>
906: #include <sys/stat.h>
2.15 luotonen 907:
2.17 luotonen 908: typedef unsigned short mode_t;
909:
2.15 luotonen 910: #ifndef S_ISDIR
911: #define S_ISDIR(m) (m & S_IFDIR)
912: #define S_ISREG(m) (m & S_IFREG)
913: #define S_ISCHR(m) (m & S_IFCHR)
914: #define S_ISBLK(m) (m & S_IFBLK)
915: #define S_ISLNK(m) (m & S_IFLNK)
916: #define S_ISSOCK(m) (m & S_IFSOCK)
917: #define S_ISFIFO(m) (NO)
918: #endif
919:
920: #ifndef WEXITSTATUS
921: #define WEXITSTATUS(s) (((s).w_status >> 8) & 0377)
922: #endif
2.36 frystyk 923:
924: #ifndef O_NONBLOCK
925: #define O_NONBLOCK O_NDELAY
926: #endif
2.51 frystyk 927:
928: #define NO_TIMEZONE /* next has gmtoff */
2.25 luotonen 929: </PRE>
930:
2.26 frystyk 931: <H3>File Permissions for NeXT</H3>
2.25 luotonen 932: <PRE>
2.15 luotonen 933: #ifndef S_IRWXU
934: #define S_IRWXU 0000700
935: #define S_IRWXG 0000070
936: #define S_IRWXO 0000007
2.17 luotonen 937: #define S_IRUSR 0000400
938: #define S_IWUSR 0000200
939: #define S_IXUSR 0000100
940: #define S_IRGRP 0000040
941: #define S_IWGRP 0000020
942: #define S_IXGRP 0000010
943: #define S_IROTH 0000004
944: #define S_IWOTH 0000002
945: #define S_IXOTH 0000001
2.26 frystyk 946: #endif /* S_IRWXU */
947: #endif /* NeXT */
948: </PRE>
949:
2.32 frystyk 950: <H2>A/UX Apple UNIX</H2>
951:
952: <ADDRESS>Kelly King, bhutab@apple.com and Jim Jagielski,
953: jim@jagubox.gsfc.nasa.gov</ADDRESS>
954:
955: <PRE>
956: #ifdef _AUX
957: #include <time.h>
958: #define WEXITSTATUS(s) (((s).w_status >> 8) & 0377)
2.41 frystyk 959: #define NO_STRFTIME
2.58 frystyk 960: #endif
961: </PRE>
962:
963: <H2>Sony News</H2>
964:
965: Thanks to Isao SEKI, seki@tama.prug.or.jp
966:
967: <PRE>
968: #ifdef sony_news
969: #include <sys/wait.h>
970: #define WEXITSTATUS(s) (((s).w_status >> 8) & 0377)
971: typedef int mode_t;
2.32 frystyk 972: #endif
973: </PRE>
974:
2.26 frystyk 975: <H2><A NAME="z10">Regular BSD unix versions</H2>
976:
977: These are a default unix where not already defined specifically.
978:
979: <PRE>
980: #ifndef INCLUDES_DONE
981:
2.32 frystyk 982: #include <sys/types.h>
983: #include <string.h>
984:
985: #include <errno.h> /* independent */
986: #include <sys/time.h> /* independent */
987: #include <sys/stat.h>
988: #include <sys/param.h>
989: #include <sys/file.h> /* For open() etc */
2.26 frystyk 990: #define INCLUDES_DONE
991: #endif /* Normal includes */
2.45 frystyk 992:
993: #ifdef SUNOS
2.71 frystyk 994: #include <unistd.h>
2.45 frystyk 995: #define NO_TIMEZONE
996: #define NO_MKTIME
2.46 frystyk 997: #undef HAVE_STRERROR
2.62 frystyk 998: #endif
999:
1000: #ifdef NetBSD
1001: #define NO_TIMEZONE
1002: #define HAVE_STRERROR
2.45 frystyk 1003: #endif
1004:
2.81 ! frystyk 1005: #ifdef __FreeBSD__
! 1006: #define NO_TIMEZONE
! 1007: #define HAVE_STRERROR
! 1008: #define NO_GETWD
! 1009: #define HAS_GETCWD
! 1010: #define FULL_TELNET
! 1011: #endif
! 1012:
2.26 frystyk 1013: </PRE>
1014:
1015: <H3>Directory reading stuff - BSD or SYS V</H3>
1016: <PRE>
2.54 frystyk 1017: #if defined(unix) || defined(__unix__) /* If UNIX (thanks to Rainer Klute) */
2.37 frystyk 1018:
1019: #define GOT_PIPE /* We do have a pipe */
2.68 frystyk 1020: #define GOT_READ_DIR /* if directory reading functions are available */
1021: #define GOT_OWNER /* If a file has owner permissions */
2.37 frystyk 1022:
1023: #include <pwd.h>
1024: #include <grp.h>
1025:
1026: #include <stdio.h>
2.26 frystyk 1027:
2.27 frystyk 1028: #ifndef NeXT
2.26 frystyk 1029: #define USE_DIRENT /* Try this all the time, Henrik May 29 94 */
2.27 frystyk 1030: #endif
2.26 frystyk 1031: #ifdef USE_DIRENT /* sys v version */
2.32 frystyk 1032: #include <dirent.h>
2.26 frystyk 1033: #define STRUCT_DIRENT struct dirent
1034: #else
2.32 frystyk 1035: #include <sys/dir.h>
2.26 frystyk 1036: #define STRUCT_DIRENT struct direct
1037: #endif
1038:
2.45 frystyk 1039: #ifdef SOLARIS
2.32 frystyk 1040: #include <sys/fcntl.h>
1041: #include <limits.h>
2.26 frystyk 1042: #endif
1043: #ifndef FNDELAY
1044: #define FNDELAY O_NDELAY
2.25 luotonen 1045: #endif
2.37 frystyk 1046:
1047: #endif /* unix */
2.26 frystyk 1048: </PRE>
1049:
2.37 frystyk 1050: <HR>
2.26 frystyk 1051: <H1><A NAME="z2">General Stuff</A></H1>
2.15 luotonen 1052:
2.26 frystyk 1053: Information below this line is general for most platforms. <P>
1054:
1055: See also <A NAME="z3" HREF="#z1">Platform Specific Stuff</A>
2.39 frystyk 1056:
1057: <H3>Sleep System Call</H3>
1058:
1059: Some systems use milliseconds instead of seconds
1060:
1061: <PRE>
1062: #ifndef SLEEP
1063: #define SLEEP(n) sleep(n)
1064: #endif
1065: </PRE>
2.13 luotonen 1066:
2.37 frystyk 1067: <H3>SOCKS</H3>
1068:
1069: SOCKS modifications by Ian Dunkin <imd1707@ggr.co.uk>.
1070: <PRE>
1071: #if defined(SOCKS) && !defined(RULE_FILE)
1072: #define connect Rconnect
1073: #define accept Raccept
1074: #define getsockname Rgetsockname
1075: #define bind Rbind
1076: #define listen Rlisten
1077: #endif
1078: </PRE>
1079:
1080: <H3>Network Family</H3>
1081:
1082: <PRE>
1083: #ifdef DECNET
1084: typedef struct sockaddr_dn SockA; /* See netdnet/dn.h or custom vms.h */
1085: #else /* Internet */
1086: typedef struct sockaddr_in SockA; /* See netinet/in.h */
1087: #endif
1088: </PRE>
1089:
1090: <H3>Default Values of Network Access</H3>
1091:
1092: <PRE>
1093: #ifndef NETCLOSE
1094: #define NETCLOSE close /* Routine to close a TCP-IP socket */
1095: #endif
1096:
1097: #ifndef NETREAD
1098: #define NETREAD read /* Routine to read from a TCP-IP socket */
1099: #endif
1100:
1101: #ifndef NETWRITE
1102: #define NETWRITE write /* Routine to write to a TCP-IP socket */
1103: #endif
1104: </PRE>
1105:
2.2 timbl 1106: <H3>Include files for TCP</H3>
2.26 frystyk 1107: <PRE>
1108: #ifndef TCP_INCLUDES_DONE
2.32 frystyk 1109: #include <sys/socket.h>
1110: #include <netinet/in.h>
2.37 frystyk 1111: #include <arpa/inet.h> /* Must be after netinet/in.h */
1112: #include <netdb.h>
1113: #define TCP_INCLUDES_DONE
1114: #endif
1115: </PRE>
1116:
1117: <H3>Definition of errno and Return Code</H3>
1118:
2.41 frystyk 1119: This is the definition of error codes and the corresponding string
1120: constants. If we do not have the <CODE>strerror</CODE> function then
1121: try the error list table.
1122:
2.37 frystyk 1123: <PRE>
1124: #ifndef ERRNO_DONE
1125: extern int errno;
1126: #define socerrno errno
1127: #endif
2.41 frystyk 1128:
1129: #ifndef HAVE_STRERROR /* Otherwise use the table */
1130: extern char *sys_errlist[];
1131: extern int sys_nerr;
1132: #endif
2.37 frystyk 1133: </PRE>
1134:
1135: <H3>Definition of Socket Desrciptores</H3>
2.19 luotonen 1136:
2.37 frystyk 1137: This is necessary in order to support Windows NT...
2.19 luotonen 1138:
2.37 frystyk 1139: <PRE>
2.79 frystyk 1140: #ifndef SOCKET
1141: #define SOCKET int /* Unix like socket descriptor */
1142: #define INVSOC (-1) /* Unix invalid socket */
2.37 frystyk 1143: #endif
2.79 frystyk 1144:
1145: #ifdef __svr4__
1146: #define HT_BACKLOG 32 /* Number of pending connect requests (TCP) */
1147: #else
1148: #define HT_BACKLOG 5 /* Number of pending connect requests (TCP) */
1149: #endif /* __svr4__ */
2.26 frystyk 1150: </PRE>
2.59 frystyk 1151:
1152: <H3>Additional Network variables for SOCKET, file access bits</h3>
1153:
1154: <PRE>
2.66 frystyk 1155: #ifndef _WINSOCKAPI_
2.59 frystyk 1156: #define FD_READ 0x01
1157: #define FD_WRITE 0x02
1158: #define FD_OOB 0x04
1159: #define FD_ACCEPT 0x08
1160: #define FD_CONNECT 0x10
1161: #define FD_CLOSE 0x20
1162: #endif /* _WINSOCKAPI_ */
1163: </PRE>
2.1 timbl 1164:
2.26 frystyk 1165: <H3>Rough estimate of max path length</H3>
2.37 frystyk 1166:
2.26 frystyk 1167: <PRE>
1168: #ifndef HT_MAX_PATH
1169: #ifdef MAXPATHLEN
1170: #define HT_MAX_PATH MAXPATHLEN
1171: #else
1172: #ifdef PATH_MAX
1173: #define HT_MAX_PATH PATH_MAX
1174: #else
1175: #define HT_MAX_PATH 1024 /* Any better ideas? */
1176: #endif
1177: #endif
1178: #endif /* HT_MAX_PATH */
1179: </PRE>
2.1 timbl 1180:
2.37 frystyk 1181: <H3>Definition of NGROUPS</H3>
2.26 frystyk 1182:
1183: <PRE>
1184: #ifdef NO_UNIX_IO
1185: #define NO_GROUPS
1186: #endif
1187:
1188: #ifndef NO_GROUPS
1189: #ifndef NGROUPS
1190: #ifdef NGROUPS_MAX
1191: #define NGROUPS NGROUPS_MAX
1192: #else
1193: #define NGROUPS 20 /* Any better ideas? */
1194: #endif
2.37 frystyk 1195: #endif
2.34 frystyk 1196: #endif
1197: </PRE>
1198:
2.29 frystyk 1199: <H3>Definition of Max Domain Name Length</H3>
1200: <PRE>
1201: #ifndef MAXHOSTNAMELEN
1202: #define MAXHOSTNAMELEN 64 /* Any better ideas? */
1203: #endif
1204: </PRE>
1205:
2.41 frystyk 1206: <H3>File/Directory Management</H3>
1207: <PRE>
1208: #ifndef MKDIR
1209: #define MKDIR(a,b) mkdir((a), (b))
1210: #endif
1211:
2.56 frystyk 1212: #ifndef RMDIR
1213: #define RMDIR(a) rmdir((a))
1214: #endif
1215:
1216: #ifndef REMOVE
1217: #define REMOVE(a) unlink((a))
2.47 frystyk 1218: #endif
1219:
1220: #ifndef DEFAULT_SUFFIXES
1221: #define DEFAULT_SUFFIXES ".,_"
2.41 frystyk 1222: #endif
2.53 frystyk 1223:
1224: #ifndef FCNTL
1225: #define FCNTL(r,s,t) fcntl((r),(s),(t))
1226: #endif
2.41 frystyk 1227: </PRE>
1228:
2.26 frystyk 1229: <H3>Macros for manipulating masks for select()</H3>
1230: <PRE>
1231: #ifdef SELECT
2.1 timbl 1232: #ifndef FD_SET
1233: typedef unsigned int fd_set;
2.2 timbl 1234: #define FD_SET(fd,pmask) (*(pmask)) |= (1<<(fd))
1235: #define FD_CLR(fd,pmask) (*(pmask)) &= ~(1<<(fd))
2.1 timbl 1236: #define FD_ZERO(pmask) (*(pmask))=0
2.2 timbl 1237: #define FD_ISSET(fd,pmask) (*(pmask) & (1<<(fd)))
2.1 timbl 1238: #endif /* FD_SET */
1239: #endif /* SELECT */
2.26 frystyk 1240: </PRE>
1241:
1242: <H3>Macros for converting characters</H3>
2.1 timbl 1243:
2.26 frystyk 1244: <PRE>
1245: #ifndef TOASCII
2.1 timbl 1246: #define TOASCII(c) (c)
1247: #define FROMASCII(c) (c)
2.5 timbl 1248: #endif
2.26 frystyk 1249: </PRE>
1250:
1251: <H3>Cache file prefix</H3>
2.5 timbl 1252:
2.26 frystyk 1253: This is something onto which we tag something meaningful to make a cache
1254: file name. used in HTWSRC.c at least. If it is nor defined at all, caching
2.5 timbl 1255: is turned off.
2.26 frystyk 1256:
1257: <PRE>
1258: #ifndef CACHE_FILE_PREFIX
2.54 frystyk 1259: #if defined(unix) || defined(__unix__)
2.6 timbl 1260: #define CACHE_FILE_PREFIX "/usr/wsrc/"
2.5 timbl 1261: #endif
2.60 frystyk 1262: #endif
1263: </PRE>
1264:
1265: <H3>Thread Safe Setup</H3>
1266:
1267: These are some constants setting the size of buffers used by thread
1268: safe versions of some system calls.
1269:
1270: <PRE>
1271: #ifdef HT_REENTRANT
1272: #define HOSTENT_MAX 128
1273: #define CTIME_MAX 26
2.1 timbl 1274: #endif
2.17 luotonen 1275: </PRE>
1276:
1277: <PRE>
1278: #endif
1279: </PRE>
2.26 frystyk 1280: End of system-specific file
1281: </BODY>
2.7 timbl 1282: </HTML>
Webmaster