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

2.7       timbl       1: <HTML>
                      2: <HEAD>
2.2       timbl       3: <TITLE>System dependencies in the W3 library</TITLE>
2.9       timbl       4: <NEXTID N="z5">
2.7       timbl       5: </HEAD>
2.2       timbl       6: <BODY>
                      7: <H1>System Dependencies</H1>System-system differences for TCP
                      8: include files and macros. This file
                      9: includes for each system the files
                     10: necessary for network and file I/O.
2.9       timbl      11:  Part of <A
                     12: NAME="z4" HREF="Overview.html">libwww</A>.
2.2       timbl      13: <H3>Authors</H3>
                     14: <DL>
                     15: <DT>TBL
                     16: <DD> Tim Berners-Lee, W3 project,
                     17: CERN, &lt;timbl@info.cern.ch>
                     18: <DT>EvA
                     19: <DD> Eelco van Asperen &lt;evas@cs.few.eur.nl>
                     20: <DT>MA
                     21: <DD> Marc Andreesen NCSA
2.7       timbl      22: <DT>MD
                     23: <DD> Mark Donszelmann &lt;duns@vxcern.cern.ch>
2.2       timbl      24: <DT>AT
2.4       timbl      25: <DD> Aleksandar Totic &lt;atotic@ncsa.uiuc.edu>
                     26: <DT>SCW
2.5       timbl      27: <DD> Susan C. Weber &lt;sweber@kyle.eitech.com>
2.2       timbl      28: </DL>
                     29: 
                     30: <H3>History:</H3>
                     31: <DL>
                     32: <DT>22 Feb 91
                     33: <DD> Written (TBL) as part of
                     34: the WWW library.
                     35: <DT>16 Jan 92
2.7       timbl      36: <DD> PC code from (EvA)
2.2       timbl      37: <DT>22 Apr 93
                     38: <DD> Merged diffs bits from
                     39: xmosaic release
2.4       timbl      40: <DT>29 Apr 93
2.7       timbl      41: <DD> Windows/NT code from (SCW)
                     42: <DT>29 Sep 93
                     43: <DD> VMS fixes (MD)
2.2       timbl      44: </DL>
                     45: 
2.1       timbl      46: <PRE>
                     47: #ifndef TCP_H
                     48: #define TCP_H
                     49: 
2.2       timbl      50: </PRE>
                     51: <H2>Default values</H2>These values may be reset and altered
                     52: by system-specific sections later
                     53: on.  there are also a bunch of <A
2.7       timbl      54: NAME="z2" HREF="#z1">defaults
2.3       timbl      55: at the end</A> .
2.2       timbl      56: <PRE>/* Default values of those: */
2.1       timbl      57: #define NETCLOSE close     /* Routine to close a TCP-IP socket         */
                     58: #define NETREAD  read      /* Routine to read from a TCP-IP socket     */
                     59: #define NETWRITE write     /* Routine to write to a TCP-IP socket      */
                     60: 
                     61: /* Unless stated otherwise, */
2.2       timbl      62: #define SELECT                 /* Can handle >1 channel.               */
2.1       timbl      63: #define GOT_SYSTEM             /* Can call shell with string           */
                     64: 
                     65: #ifdef unix
                     66: #define GOT_PIPE
                     67: #endif
                     68: #ifdef VM
                     69: #define GOT_PIPE               /* Of sorts */
                     70: #endif
                     71: 
                     72: #ifdef DECNET
                     73: typedef struct sockaddr_dn SockA;  /* See netdnet/dn.h or custom vms.h */
                     74: #else /* Internet */
                     75: typedef struct sockaddr_in SockA;  /* See netinet/in.h */
                     76: #endif
                     77: 
                     78: 
2.2       timbl      79: </PRE>
                     80: <H2>Macintosh - Think-C</H2>Think-C is one development environment
                     81: on the Mac.<P>
                     82: We recommend that you compile with
                     83: 4-byte ints to be compatible with
                     84: MPW C.  We used Tom Milligan's s_socket
                     85: library which was written for 4 byte
                     86: int, and the MacTCP library assumes
                     87: 4-byte int.
                     88: <PRE>#ifdef THINK_C
2.1       timbl      89: #undef GOT_SYSTEM
                     90: #define DEBUG                  /* Can't put it on the CC command line  */
                     91: #define NO_UNIX_IO             /* getuid() missing                     */
                     92: #define NO_GETPID              /* getpid() does not exist              */
                     93: #define NO_GETWD               /* getwd() does not exist               */
                     94: 
                     95: #undef NETCLOSE                    /* Routine to close a TCP-IP socket         */
                     96: #undef NETREAD             /* Routine to read from a TCP-IP socket     */
                     97: #undef NETWRITE            /* Routine to write to a TCP-IP socket      */
                     98: #define NETCLOSE s_close    /* Routine to close a TCP-IP socket                */
                     99: #define NETREAD  s_read            /* Routine to read from a TCP-IP socket     */
                    100: #define NETWRITE s_write    /* Routine to write to a TCP-IP socket     */
                    101: 
                    102: #define bind s_bind        /* Funny names presumably to prevent clashes */
                    103: #define connect s_connect
                    104: #define accept s_accept
                    105: #define listen s_listen
                    106: #define socket s_socket
                    107: #define getsockname s_getsockname
                    108: 
                    109: /* The function prototype checking is better than the include files
                    110: */
                    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);
                    125: 
                    126: #endif /* THINK_C */
                    127: 
                    128: 
2.2       timbl     129: </PRE>
                    130: <H2>Macintosh - MPW</H2>MPW is one development environment
                    131: on the Mac.<P>
                    132: This entry was created by Aleksandar
                    133: Totic (atotic@ncsa.uiuc.edu) this
                    134: file is compatible with sockets package
                    135: released by NCSA.  One major conflict
                    136: is that this library redefines write/read/etc
                    137: as macros.  In some of HTML code
                    138: these macros get executed when they
                    139: should not be. Such files should
                    140: define NO_SOCKET_DEFS on top. This
                    141: is a temporary hack.
                    142: <PRE>#ifdef applec                     /* MPW  */
                    143: #undef GOT_SYSTEM
                    144: #define DEBUG                  /* Can't put it on the CC command line */
                    145: #define NO_UNIX_IO             /* getuid() missing
                    146: */
                    147: #define NO_GETPID              /* getpid() does not exist
                    148: */
                    149: #define NO_GETWD               /* getwd() does not exist
                    150: */
                    151: 
                    152: #undef NETCLOSE                    /* Routine to close a TCP-IP socket */
                    153: #undef NETREAD             /* Routine to read from a TCP-IP socket */
                    154: #undef NETWRITE            /* Routine to write to a TCP-IP socket */
                    155: #define NETCLOSE s_close    /* Routine to close a TCP-IP socket */
                    156: #define NETREAD  s_read            /* Routine to read from a TCP-IP socket */
                    157: #define NETWRITE s_write    /* Routine to write to a TCP-IP socket */
                    158: #define _ANSI_SOURCE
                    159: #define GUI
                    160: #define LINEFEED 10
                    161: #define ANON_FTP_HOSTNAME
                    162: #ifndef NO_SOCKET_DEFS
                    163: #include &lt;MacSockDefs.h>
                    164: #endif
                    165: 
                    166: #include &lt;socket.ext.h>
                    167: #include &lt;string.h>
                    168: 
                    169: #endif                 /* MPW */
                    170: 
                    171: 
                    172: 
2.1       timbl     173: #ifndef STDIO_H
2.2       timbl     174: #include &lt;stdio.h>
2.1       timbl     175: #define STDIO_H
                    176: #endif
                    177: 
2.2       timbl     178: </PRE>
2.6       timbl     179: <H2>Big Blue - the world of incompatibility</H2>
                    180: <H2>IBM RS600</H2>On the IBM RS-6000, AIX is almost
                    181: Unix.
                    182: <PRE>#ifdef _AIX
2.2       timbl     183: #define AIX
                    184: #endif
2.1       timbl     185: #ifdef AIX
                    186: #define unix
                    187: #endif
                    188: 
2.2       timbl     189: /*    AIX 3.2
                    190: **    -------
                    191: */
                    192: 
                    193: #ifdef _IBMR2
2.6       timbl     194: #define USE_DIRENT             /* sys V style directory open */
2.2       timbl     195: #endif
                    196: 
                    197: 
                    198: </PRE>
2.4       timbl     199: <H2>IBM VM-CMS, VM-XA Mainframes</H2>MVS is compiled as for VM. MVS has
                    200: no unix-style I/O.  The command line
                    201: compile options seem to come across
                    202: in lower case.
                    203: <PRE>#ifdef mvs
2.1       timbl     204: #define MVS
                    205: #endif
                    206: 
                    207: #ifdef MVS
                    208: #define VM
                    209: #endif
                    210: 
                    211: #ifdef NEWLIB
                    212: #pragma linkage(newlib,OS)     /* Enables recursive NEWLIB */
                    213: #endif
                    214: 
                    215: /*     VM doesn't have a built-in predefined token, so we cheat: */
                    216: #ifndef VM
2.2       timbl     217: #include &lt;string.h>         /* For bzero etc - not  VM */
                    218: #endif
                    219: 
                    220: /*     Note:   All include file names must have 8 chars max (+".h")
                    221: **
                    222: **     Under VM, compile with "(DEF=VM,SHORT_NAMES,DEBUG)"
                    223: **
                    224: **     Under MVS, compile with "NOMAR DEF(MVS)" to get rid of 72 char margin
                    225: **       System include files TCPIP and COMMMAC neeed line number removal(!)
                    226: */
                    227: 
                    228: #ifdef VM                      /* or MVS -- see above. */
                    229: #define NOT_ASCII              /* char type is not ASCII */
                    230: #define NO_UNIX_IO             /* Unix I/O routines are not supported */
                    231: #define NO_GETPID              /* getpid() does not exist */
                    232: #define NO_GETWD               /* getwd() does not exist */
                    233: #ifndef SHORT_NAMES
                    234: #define SHORT_NAMES            /* 8 character uniqueness for globals */
                    235: #endif
                    236: #include &lt;manifest.h>                                                           
                    237: #include &lt;bsdtypes.h>                                                           
                    238: #include &lt;stdefs.h>                                                             
                    239: #include &lt;socket.h>                                                             
                    240: #include &lt;in.h>
                    241: #include &lt;inet.h>
                    242: #include &lt;netdb.h>                                                                 
                    243: #include &lt;errno.h>      /* independent */
                    244: extern char asciitoebcdic[], ebcdictoascii[];
                    245: #define TOASCII(c)   (c=='\n' ?  10  : ebcdictoascii[c])
                    246: #define FROMASCII(c) (c== 10  ? '\n' : asciitoebcdic[c])                                   
                    247: #include &lt;bsdtime.h>
                    248: #include &lt;time.h>
                    249: #include &lt;string.h>                                                            
                    250: #define INCLUDES_DONE
                    251: #define TCP_INCLUDES_DONE
2.1       timbl     252: #endif
                    253: 
                    254: 
2.2       timbl     255: </PRE>
                    256: <H2>IBM-PC running MS-DOS with SunNFS
                    257: for TCP/IP</H2>This code thanks to Eelco van Asperen
2.3       timbl     258: &lt;evas@cs.few.eur.nl>
                    259: <PRE>#ifdef PCNFS
                    260: #include &lt;sys/types.h>
2.2       timbl     261: #include &lt;string.h>
                    262: #include &lt;errno.h>      /* independent */
                    263: #include &lt;sys/time.h>           /* independent */
                    264: #include &lt;sys/stat.h>
                    265: #include &lt;fcntl.h>      /* In place of sys/param and sys/file */
                    266: #define INCLUDES_DONE
                    267: #define FD_SET(fd,pmask) (*(unsigned*)(pmask)) |=  (1&lt;&lt;(fd))
                    268: #define FD_CLR(fd,pmask) (*(unsigned*)(pmask)) &amp;= ~(1&lt;&lt;(fd))
                    269: #define FD_ZERO(pmask)   (*(unsigned*)(pmask))=0
                    270: #define FD_ISSET(fd,pmask) (*(unsigned*)(pmask) &amp; (1&lt;&lt;(fd)))
                    271: #endif  /* PCNFS */
                    272: 
2.4       timbl     273: </PRE>
                    274: <H2>IBM-PC running Windows NT</H2>These parameters providede by  Susan
                    275: C. Weber &lt;sweber@kyle.eitech.com>.
                    276: <PRE>#ifdef _WINDOWS
                    277: #include "fcntl.h"                     /* For HTFile.c */
                    278: #include "sys\types.h"                 /* For HTFile.c */
                    279: #include "sys\stat.h"                  /* For HTFile.c */
                    280: 
                    281: #undef NETREAD
                    282: #undef NETWRITE
                    283: #undef NETCLOSE
                    284: #define NETREAD(s,b,l) ((s)>10 ? recv((s),(b),(l),0) : read((s),(b),(l)))
                    285: #define NETWRITE(s,b,l)        ((s)>10 ? send((s),(b),(l),0) : write((s),(b),(l)))
                    286: #define NETCLOSE(s)    ((s)>10 ? closesocket(s) : close(s))
                    287: #include &lt;io.h>
                    288: #include &lt;string.h>
                    289: #include &lt;process.h>
                    290: #include &lt;time.h>
                    291: #include &lt;direct.h>
                    292: #include &lt;stdio.h>
                    293: #include &lt;winsock.h>
                    294: typedef struct sockaddr_in SockA;  /* See netinet/in.h */
                    295: #define INCLUDES_DONE
                    296: #define TCP_INCLUDES_DONE
                    297: #endif  /* WINDOWS */
                    298:  
2.2       timbl     299: 
                    300: 
                    301: </PRE>
2.4       timbl     302: <H2>VAX/VMS</H2>Under VMS, there are many versions
                    303: of TCP-IP. Define one if you do not
                    304: use Digital's UCX product:
                    305: <DL>
                    306: <DT>UCX
2.5       timbl     307: <DD> DEC's "Ultrix connection" (default)
2.4       timbl     308: <DT>WIN_TCP
2.5       timbl     309: <DD> From Wollongong, now GEC
                    310: software.
2.4       timbl     311: <DT>MULTINET
2.5       timbl     312: <DD> From SRI, now from TGV Inv.
2.4       timbl     313: <DT>DECNET
2.5       timbl     314: <DD> Cern's TCP socket emulation
2.4       timbl     315: over DECnet
                    316: </DL>
                    317: The last three do not interfere with
                    318: the unix i/o library, and so they
                    319: need special calls to read, write
                    320: and close sockets. In these cases
                    321: the socket number is a VMS channel
                    322: number, so we make the @@@ HORRIBLE
                    323: @@@ assumption that a channel number
                    324: will be greater than 10 but a unix
                    325: file descriptor less than 10.  It
                    326: works.
2.16      duns      327: <PRE>#ifdef VMS 
2.7       timbl     328: #define CACHE_FILE_PREFIX  "SYS$LOGIN:Z_"
                    329: 
                    330: #ifdef WIN_TCP
2.1       timbl     331: #undef NETREAD
                    332: #undef NETWRITE
                    333: #undef NETCLOSE
2.2       timbl     334: #define NETREAD(s,b,l) ((s)>10 ? netread((s),(b),(l)) : read((s),(b),(l)))
                    335: #define NETWRITE(s,b,l)        ((s)>10 ? netwrite((s),(b),(l)) : write((s),(b),(l)))
                    336: #define NETCLOSE(s)    ((s)>10 ? netclose(s) : close(s))
2.16      duns      337: #endif /* WIN_TCP */
2.1       timbl     338: 
                    339: #ifdef MULTINET
                    340: #undef NETCLOSE
                    341: #undef NETREAD
                    342: #undef NETWRITE
2.2       timbl     343: #define NETREAD(s,b,l) ((s)>10 ? socket_read((s),(b),(l)) : read((s),(b),(l)))
                    344: #define NETWRITE(s,b,l)        ((s)>10 ? socket_write((s),(b),(l)) : \
2.1       timbl     345:                                write((s),(b),(l)))
2.2       timbl     346: #define NETCLOSE(s)    ((s)>10 ? socket_close(s) : close(s))
2.16      duns      347: #endif /* MULTINET */
2.1       timbl     348: 
                    349: #ifdef DECNET
                    350: #undef SELECT  /* not supported */
                    351: #undef NETREAD
                    352: #undef NETWRITE
                    353: #undef NETCLOSE
2.2       timbl     354: #define NETREAD(s,b,l) ((s)>10 ? recv((s),(b),(l),0) : read((s),(b),(l)))
                    355: #define NETWRITE(s,b,l)        ((s)>10 ? send((s),(b),(l),0) : write((s),(b),(l)))
                    356: #define NETCLOSE(s)    ((s)>10 ? socket_close(s) : close(s))
2.1       timbl     357: #endif /* Decnet */
                    358: 
                    359: /*     Certainly this works for UCX and Multinet; not tried for Wollongong
                    360: */
                    361: #ifdef MULTINET
2.16      duns      362: #ifdef __TIME_T
                    363: #define __TYPES
                    364: #define __TYPES_LOADED
                    365: #endif /* __TIME_T */
2.1       timbl     366: #include "multinet_root:[multinet.include.sys]types.h"
                    367: #include "multinet_root:[multinet.include]errno.h"
2.16      duns      368: #ifdef __TYPES
                    369: #define __TIME_T
                    370: #endif /* __TYPE */
                    371: #ifdef __TIME_LOADED
                    372: #define __TIME
                    373: #endif /* __TIME_LOADED */
2.1       timbl     374: #include "multinet_root:[multinet.include.sys]time.h"
2.16      duns      375: #else /* not MULTINET */
                    376: #include &lt;types.h>
                    377: #include &lt;errno.h>
                    378: #include &lt;time.h>
                    379: #endif /* not MULTINET */
2.1       timbl     380: 
                    381: #include string
                    382: 
                    383: #ifndef STDIO_H
                    384: #include stdio
                    385: #define STDIO_H
                    386: #endif
                    387: 
                    388: #include file
                    389: 
                    390: #ifndef DECNET  /* Why is it used at all ? Types conflict with "types.h" */
                    391: #include unixio
                    392: #endif
                    393: 
                    394: #define INCLUDES_DONE
                    395: 
                    396: #ifdef MULTINET  /* Include from standard Multinet directories */
                    397: #include "multinet_root:[multinet.include.sys]socket.h"
                    398: #ifdef __TIME_LOADED  /* defined by sys$library:time.h */
                    399: #define __TIME  /* to avoid double definitions in next file */
                    400: #endif
                    401: #include "multinet_root:[multinet.include.netinet]in.h"
                    402: #include "multinet_root:[multinet.include.arpa]inet.h"
                    403: #include "multinet_root:[multinet.include]netdb.h"
2.16      duns      404: #include "multinet_root:[multinet.include.sys]ioctl.h"
2.1       timbl     405: 
                    406: #else  /* not multinet */
                    407: #ifdef DECNET
                    408: #include "types.h"  /* for socket.h */
                    409: #include "socket.h"
                    410: #include "dn"
                    411: #include "dnetdb"
                    412: /* #include "vms.h" */
                    413: 
                    414: #else /* UCX or WIN */
2.16      duns      415: #ifdef CADDR_T
                    416: #define __CADDR_T
                    417: #endif /* problem with xlib.h inclusion */
                    418: #include &lt;socket.h>
                    419: #include &lt;in.h>
                    420: #include &lt;inet.h>
                    421: #include &lt;netdb.h>
2.1       timbl     422: 
                    423: #endif  /* not DECNET */
                    424: #endif  /* of Multinet or other TCP includes */
                    425: 
                    426: #define TCP_INCLUDES_DONE
                    427: 
2.7       timbl     428: </PRE>On VMS machines, the linker needs
                    429: to be told to put global data sections
                    430: into a data segment using these storage
                    431: classes. (MarkDonszelmann)
                    432: <PRE>#ifdef VAXC
                    433: #define GLOBALDEF globaldef
                    434: #define GLOBALREF globalref
                    435: #endif /*  VAXC */
                    436: 
2.1       timbl     437: #endif /* vms */
                    438: 
2.7       timbl     439: </PRE>On non-VMS machines, the GLOBALDEF
                    440: and GLOBALREF storage types default
                    441: to normal C storage types.
                    442: <PRE>#ifndef GLOBALREF
                    443: #define GLOBALDEF
                    444: #define GLOBALREF extern
                    445: #endif
                    446: 
2.1       timbl     447: 
                    448: 
2.2       timbl     449: </PRE>
                    450: <H2>SCO ODT unix version</H2>
                    451: <PRE>
                    452: #ifdef sco
                    453: #include &lt;sys/fcntl.h>
                    454: #define USE_DIRENT
2.1       timbl     455: #endif
                    456: 
2.2       timbl     457: </PRE>
                    458: <H2>MIPS unix</H2>
                    459: <PRE>/* Mips hack (bsd4.3/sysV mixture...) */
2.1       timbl     460: 
                    461: #ifdef mips
                    462: extern int errno;
                    463: #endif
                    464: 
2.8       timbl     465: </PRE>
2.10      luotonen  466: <H2>Solaris</H2>
2.14      luotonen  467: (And Linux, thanks to Rainer Klute)
2.10      luotonen  468: <PRE>
2.20    ! frystyk   469: /* Added `sco' in here as it needs unistd.h as well, May 11 94 Henrik */
        !           470: #if defined(__svr4__) || defined(_POSIX_SOURCE) || defined(__hpux) || defined(sco)
2.11      luotonen  471: #include &lt;unistd.h>
2.10      luotonen  472: #endif
                    473: </PRE>
2.8       timbl     474: <H2>OSF/1</H2>
                    475: <PRE>#ifdef __osf__
                    476: #define USE_DIRENT
                    477: #endif /* OSF1 AXP */
                    478: 
2.2       timbl     479: 
                    480: </PRE>
                    481: <H2>Regular BSD unix versions</H2>These are a default unix where not
                    482: already defined specifically.
                    483: <PRE>#ifndef INCLUDES_DONE
                    484: #include &lt;sys/types.h>
                    485: /* #include &lt;streams/streams.h>                     not ultrix */
                    486: #include &lt;string.h>
                    487: 
                    488: #include &lt;errno.h>      /* independent */
                    489: #include &lt;sys/time.h>           /* independent */
                    490: #include &lt;sys/stat.h>
                    491: #include &lt;sys/param.h>
                    492: #include &lt;sys/file.h>           /* For open() etc */
2.1       timbl     493: #define INCLUDES_DONE
                    494: #endif /* Normal includes */
                    495: 
2.2       timbl     496: /*                     Directory reading stuff - BSD or SYS V
                    497: */
2.1       timbl     498: #ifdef unix                    /* if this is to compile on a UNIX machine */
                    499: #define GOT_READ_DIR 1    /* if directory reading functions are available */
2.2       timbl     500: #ifdef USE_DIRENT             /* sys v version */
                    501: #include &lt;dirent.h>
                    502: #define direct dirent
                    503: #else
                    504: #include &lt;sys/dir.h>
2.1       timbl     505: #endif
2.2       timbl     506: #if defined(sun) &amp;&amp; defined(__svr4__)
                    507: #include &lt;sys/fcntl.h>
                    508: #include &lt;limits.h>
                    509: #endif
2.18      frystyk   510: #ifndef FNDELAY
                    511: #define FNDELAY                O_NDELAY
                    512: #endif
2.2       timbl     513: #endif
2.1       timbl     514: 
2.2       timbl     515: </PRE>
2.13      luotonen  516: <H2>NeXT</H2>
                    517: <PRE>
                    518: #ifdef NeXT
                    519: #include "sys/types.h"
                    520: #include "sys/stat.h"
2.15      luotonen  521: 
2.17      luotonen  522: typedef unsigned short mode_t;
                    523: 
2.15      luotonen  524: #ifndef S_ISDIR
                    525: #define S_ISDIR(m)     (m &amp; S_IFDIR)
                    526: #define S_ISREG(m)     (m &amp; S_IFREG)
                    527: #define S_ISCHR(m)     (m &amp; S_IFCHR)
                    528: #define S_ISBLK(m)     (m &amp; S_IFBLK)
                    529: #define S_ISLNK(m)     (m &amp; S_IFLNK)
                    530: #define S_ISSOCK(m)    (m &amp; S_IFSOCK)
                    531: #define S_ISFIFO(m)    (NO)
                    532: #endif
                    533: 
                    534: #ifndef WEXITSTATUS
                    535: #define WEXITSTATUS(s) (((s).w_status &gt;&gt; 8) &amp; 0377)
                    536: #endif
                    537: 
                    538: #ifndef S_IRWXU
                    539: #define S_IRWXU 0000700
                    540: #define S_IRWXG 0000070
                    541: #define S_IRWXO 0000007
2.17      luotonen  542: #define S_IRUSR 0000400
                    543: #define S_IWUSR 0000200
                    544: #define S_IXUSR 0000100
                    545: #define S_IRGRP 0000040
                    546: #define S_IWGRP 0000020
                    547: #define S_IXGRP 0000010
                    548: #define S_IROTH 0000004
                    549: #define S_IWOTH 0000002
                    550: #define S_IXOTH 0000001
2.15      luotonen  551: #endif
                    552: 
2.13      luotonen  553: #endif
                    554: 
                    555: </PRE>
2.2       timbl     556: <H2><A
2.7       timbl     557: NAME="z1">Defaults</A></H2>
2.2       timbl     558: <H3>Include files for TCP</H3>
                    559: <PRE>#ifndef TCP_INCLUDES_DONE
                    560: #include &lt;sys/socket.h>
                    561: #include &lt;netinet/in.h>
2.19      luotonen  562: 
                    563: /* #ifndef __hpux */ /* this may or may not be good -marc -- according
                    564:                        to somebody, it wasn't a good thing...(?) -- Ari */
2.2       timbl     565: #include &lt;arpa/inet.h>          /* Must be after netinet/in.h */
2.19      luotonen  566: /* #endif */
                    567: 
2.2       timbl     568: #include &lt;netdb.h>
2.1       timbl     569: #endif /* TCP includes */
                    570: 
                    571: 
2.2       timbl     572: </PRE>
                    573: <H3>Macros for manipulating masks for
                    574: select()</H3>
                    575: <PRE>#ifdef SELECT
2.1       timbl     576: #ifndef FD_SET
                    577: typedef unsigned int fd_set;
2.2       timbl     578: #define FD_SET(fd,pmask) (*(pmask)) |=  (1&lt;&lt;(fd))
                    579: #define FD_CLR(fd,pmask) (*(pmask)) &amp;= ~(1&lt;&lt;(fd))
2.1       timbl     580: #define FD_ZERO(pmask)   (*(pmask))=0
2.2       timbl     581: #define FD_ISSET(fd,pmask) (*(pmask) &amp; (1&lt;&lt;(fd)))
2.1       timbl     582: #endif  /* FD_SET */
                    583: #endif  /* SELECT */
                    584: 
2.2       timbl     585: </PRE>
                    586: <H3><A
2.9       timbl     587: NAME="z0">M</A> acros for converting characters</H3>
2.2       timbl     588: <PRE>#ifndef TOASCII
2.1       timbl     589: #define TOASCII(c) (c)
                    590: #define FROMASCII(c) (c)                                   
2.5       timbl     591: #endif
                    592: 
                    593: </PRE>
                    594: <H3>Cache file prefix</H3>This is something onto which we tag
                    595: something meaningful to make a cache
                    596: file name.  used in HTWSRC.c at least.
2.6       timbl     597: If it is nor defined at all, caching
2.5       timbl     598: is turned off.
                    599: <PRE>#ifndef CACHE_FILE_PREFIX
                    600: #ifdef unix
2.6       timbl     601: #define CACHE_FILE_PREFIX  "/usr/wsrc/"
2.5       timbl     602: #endif
2.1       timbl     603: #endif
2.17      luotonen  604: </PRE>
                    605: 
                    606: 
                    607: <H2>SOCKS</H2>
                    608: SOCKS modifications by Ian Dunkin &lt;imd1707@ggr.co.uk&gt;.
                    609: <PRE>
                    610: #if defined(SOCKS) && !defined(RULE_FILE)
                    611: #define connect Rconnect
                    612: #define accept  Raccept
                    613: #define getsockname Rgetsockname
                    614: #define bind Rbind 
                    615: #define listen Rlisten  
                    616: #endif
                    617: </PRE>
2.1       timbl     618: 
2.2       timbl     619: 
2.17      luotonen  620: <PRE>
2.2       timbl     621: 
2.17      luotonen  622: #endif /* TCP_H */
2.1       timbl     623: 
2.9       timbl     624: </PRE>end of system-specific file</A></BODY>
2.7       timbl     625: </HTML>

Webmaster