Annotation of libwww/Library/src/wwwsys.html, revision 2.36.2.1

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

Webmaster