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