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