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