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

2.7       timbl       1: <HTML>
                      2: <HEAD>
2.99      frystyk     3: <!-- Changed by: Henrik Frystyk Nielsen, 15-Jul-1996 -->
2.97      frystyk     4:   <TITLE>W3C Reference Library libwww System Dependencies</TITLE>
2.7       timbl       5: </HEAD>
2.2       timbl       6: <BODY>
2.95      frystyk     7: <H1>
                      8:   System Dependencies
                      9: </H1>
2.35      frystyk    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>
2.95      frystyk    16: <P>
2.97      frystyk    17: This file makes up for the differencies in the systems and platforms supported
                     18: by libwww. On Unix, it is a question of <A HREF="../../INSTALL.html">using
                     19: autoconf</A> to figure out what environment we are in. This is done by running
                     20: the configure script which creates a <CODE>config.h</CODE> file. This
                     21: configuration include file contains a large set of macro definitions telling
                     22: what features we have and don't have. On platforms not supported by autoconf
                     23: (Windows, Mac, VMS etc.) you will find the information normally contained
                     24: in the <CODE>config.h</CODE> file directly included below. The
                     25: <A HREF="#Platform">second part of this file </A>uses all the information
                     26: that we either have from the config.h file or directly coded and actually
                     27: does the includes etc.
                     28: <P>
                     29: <UL>
                     30:   <LI>
                     31:     <A HREF="sysdep.html#Unix">Unix</A>
                     32:   <LI>
                     33:     <A HREF="sysdep.html#Microsoft">Microsoft Windows Win32 API</A>
                     34:   <LI>
                     35:     <A HREF="sysdep.html#Macintosh">Macintosh</A>
                     36:   <LI>
                     37:     <A HREF="sysdep.html#Macintosh">Vax VMS</A>
                     38: </UL>
2.95      frystyk    39: <P>
                     40: This module is a part of the <A HREF="http://www.w3.org/pub/WWW/Library/">
                     41: W3C Reference Library</A>.
                     42: <H3>
                     43:   Authors
                     44: </H3>
2.2       timbl      45: <DL>
2.95      frystyk    46:   <DT>
                     47:     TBL
                     48:   <DD>
                     49:     Tim Berners-Lee, W3 project, CERN, &lt;timbl@w3.org&gt;
                     50:   <DT>
                     51:     EvA
                     52:   <DD>
                     53:     Eelco van Asperen &lt;evas@cs.few.eur.nl&gt;
                     54:   <DT>
                     55:     MA
                     56:   <DD>
                     57:     Marc Andreesen NCSA
                     58:   <DT>
                     59:     MD
                     60:   <DD>
                     61:     Mark Donszelmann &lt;duns@vxcern.cern.ch&gt;
                     62:   <DT>
                     63:     AT
                     64:   <DD>
                     65:     Aleksandar Totic &lt;atotic@ncsa.uiuc.edu&gt;
                     66:   <DT>
                     67:     SCW
                     68:   <DD>
                     69:     Susan C. Weber &lt;sweber@kyle.eitech.com&gt;
                     70:   <DT>
                     71:     HF
                     72:   <DD>
                     73:     Henrik Frystyk, &lt;frystyk@w3.org&gt;
                     74:   <DT>
                     75:     CLB
                     76:   <DD>
                     77:     Charlie Brooks, &lt;cbrooks@osf.org&gt;
2.2       timbl      78: </DL>
2.95      frystyk    79: <H3>
                     80:   History:
                     81: </H3>
2.2       timbl      82: <DL>
2.95      frystyk    83:   <DT>
                     84:     22 Feb 91
                     85:   <DD>
                     86:     Written (TBL) as part of the WWW library.
                     87:   <DT>
                     88:     16 Jan 92
                     89:   <DD>
                     90:     PC code from (EvA)
                     91:   <DT>
                     92:     22 Apr 93
                     93:   <DD>
                     94:     Merged diffs bits from xmosaic release
                     95:   <DT>
                     96:     29 Apr 93
                     97:   <DD>
                     98:     Windows/NT code from (SCW)
                     99:   <DT>
                    100:     29 Sep 93
                    101:   <DD>
                    102:     Mar 96 CLB - changed SLEEP() macro for Windows/NT MSC compiler added
                    103:     BOOLEAN_DEFINED macro to avoid duplicate definitions in HUtils.h changed
                    104:     netread() macros to support reading from stdin,etc. as well as sockets. (Required
                    105:     for linemode browser to work).
                    106:   <DT>
                    107:     Henrik
                    108:   <DD>
                    109:     Changed to support autoconf for Unix
2.2       timbl     110: </DL>
2.1       timbl     111: <PRE>
2.88      frystyk   112: #ifndef SYSDEP_H
                    113: #define SYSDEP_H
2.26      frystyk   114: </PRE>
2.95      frystyk   115: <H1>
                    116:   Platform Specific Stuff
                    117: </H1>
                    118: <H2>
2.97      frystyk   119:   <A NAME="Unix">Unix</A>
2.95      frystyk   120: </H2>
                    121: <P>
2.97      frystyk   122: We rely on <I>autoconf</I> to do the dirty job. If you have any changhes
                    123: then please add them to the <A HREF="../../../INSTALL.html">configure
                    124: script</A>
2.26      frystyk   125: <PRE>
2.88      frystyk   126: #ifdef HAVE_CONFIG_H
                    127: #include &lt;config.h&gt;
2.1       timbl     128: #endif
2.26      frystyk   129: </PRE>
2.95      frystyk   130: <H2>
2.97      frystyk   131:   <A NAME="Microsoft">Microsoft Windows Win32 API</A>
2.95      frystyk   132: </H2>
                    133: <P>
2.83      frystyk   134: Help provided by Eric Prud'hommeaux, Susan C. Weber
                    135: &lt;sweber@kyle.eitech.com&gt;, Paul Hounslow
                    136: &lt;P.M.Hounslow@reading.ac.uk&gt;, and a lot of other PC people.
2.26      frystyk   137: <PRE>
2.83      frystyk   138: #if defined(_WINDOWS) || defined(_CONSOLE)
                    139: #define WWW_MSWINDOWS
                    140: #endif
                    141: 
2.95      frystyk   142: #if defined(_WINDOWS) &amp;&amp; !defined (_CONSOLE)
2.83      frystyk   143: #define WWW_WIN_WINDOW
                    144: #endif
                    145: 
                    146: #if defined(_CONSOLE)
                    147: #define WWW_WIN_CONSOLE
                    148: #endif
                    149: 
2.84      frystyk   150: #ifdef WWW_MSWINDOWS
2.37      frystyk   151: #include &lt;windows.h&gt;
                    152: #include &lt;fcntl.h&gt;
                    153: #include &lt;sys\types.h&gt;
                    154: #include &lt;sys\stat.h&gt;
                    155: 
                    156: #define NETREAD(s,b,l)  recv((s),(b),(l),0)
                    157: #define NETWRITE(s,b,l) send((s),(b),(l),0)
                    158: #define NETCLOSE(s)     closesocket(s)
                    159: #define IOCTL(s,c,a)   ioctlsocket(s,c, (long *) a)
2.4       timbl     160: 
2.41      frystyk   161: #define MKDIR(a,b)     mkdir((a))
2.56      frystyk   162: #define REMOVE(a)      remove((a))
2.47      frystyk   163: #define DEFAULT_SUFFIXES       "."
2.41      frystyk   164: 
2.59      frystyk   165: #ifdef TTY_IS_SELECTABLE 
                    166: #undef TTY_IS_SELECTABLE 
                    167: #endif 
                    168: 
2.32      frystyk   169: #include &lt;io.h&gt;
                    170: #include &lt;string.h&gt;
                    171: #include &lt;process.h&gt;
                    172: #include &lt;time.h&gt;
                    173: #include &lt;direct.h&gt;
2.88      frystyk   174: 
                    175: #define HAVE_STDIO_H
                    176: 
2.37      frystyk   177: #include &lt;stdlib.h&gt;
2.32      frystyk   178: #include &lt;winsock.h&gt;
2.37      frystyk   179: 
2.78      frystyk   180: #ifndef _CONSOLE
                    181: #define NO_STDIO
2.37      frystyk   182: #endif
                    183: 
2.88      frystyk   184: #undef HAVE_GETPASS
                    185: #undef HAVE_ALTZONE
2.37      frystyk   186: #define NO_GETWD
2.88      frystyk   187: #define HAVE_GETCWD
2.91      frystyk   188: #define BOOLEAN                                /* Windows have BOOLEAN defined */
2.73      frystyk   189: 
2.88      frystyk   190: #undef HAVE_GETDOMAINNAME
2.37      frystyk   191: 
2.79      frystyk   192: #define SOCKET SOCKET                  /* WinSocks socket descriptor */
2.37      frystyk   193: #define INVSOC INVALID_SOCKET          /* WinSocks invalid socket */
                    194: 
                    195: #define DESIRED_WINSOCK_VERSION        0x0101  /* we'd like winsock ver 1.1... */
                    196: #define MINIMUM_WINSOCK_VERSION        0x0101  /* ...but we'll take ver 1.1 :) */
                    197: </PRE>
2.95      frystyk   198: <H3>
                    199:   File and Directory Access
                    200: </H3>
                    201: <P>
                    202: These next defintions are because the UNIX stuff is not supplied with BC4
                    203: (Paul Hounslow &lt;P.M.Hounslow@reading.ac.uk&gt;)
2.37      frystyk   204: <PRE>
                    205: #define NO_UNIX_IO
                    206: 
                    207: typedef unsigned long mode_t;
                    208: 
2.84      frystyk   209: #define        _IFMT           0170000 /* type of file */
                    210: #define        _IFDIR          0040000 /* directory */
                    211: #define        _IFCHR          0020000 /* character special */
                    212: #define        _IFBLK          0060000 /* block special */
                    213: #define        _IFREG          0100000 /* regular */
                    214: #define        _IFLNK          0120000 /* symbolic link */
                    215: #define        _IFSOCK         0140000 /* socket */
                    216: #define        _IFIFO          0010000 /* fifo */
2.37      frystyk   217: 
                    218: #define        S_ISUID         0004000 /* set user id on execution */
                    219: #define        S_ISGID         0002000 /* set group id on execution */
                    220: #define        S_ISVTX         0001000 /* save swapped text even after use */
                    221: 
                    222: #ifdef S_IREAD
                    223: #undef S_IREAD
                    224: #define        S_IREAD         0000400 /* read permission, owner */
                    225: #endif
                    226: 
                    227: #ifdef S_IWRITE
                    228: #undef S_IWRITE
                    229: #define        S_IWRITE        0000200 /* write permission, owner */
                    230: #endif
                    231: 
                    232: #ifdef S_IEXEC
                    233: #undef S_IEXEC
                    234: #define        S_IEXEC         0000100 /* execute/search permission, owner */
                    235: #endif
                    236: 
                    237: #define        S_ENFMT         0002000 /* enforcement-mode locking */
                    238: 
                    239: #ifdef S_IFMT
                    240: #undef S_IFMT
                    241: #define        S_IFMT          _IFMT
                    242: #endif
                    243: 
                    244: #ifdef S_IDIR
                    245: #undef S_IDIR
                    246: #define        S_IFDIR         _IFDIR
                    247: #endif
                    248: 
                    249: #ifdef S_IFCHR
                    250: #undef S_IFCHR
                    251: #define        S_IFCHR         _IFCHR
                    252: #endif
                    253: 
                    254: #ifdef S_IBLK
                    255: #undef S_IBLK
                    256: #define        S_IFBLK         _IFBLK
                    257: #endif
                    258: 
                    259: #ifdef S_IREG
                    260: #undef S_IREG
                    261: #define        S_IFREG         _IFREG
                    262: #endif
                    263: 
                    264: #define        S_IFLNK         _IFLNK
                    265: 
                    266: #ifdef S_IFIFO
                    267: #undef S_IFIFO
                    268: #define        S_IFIFO         _IFIFO
                    269: #endif
                    270: 
                    271: #define        S_IRWXU         0000700 /* rwx, owner */
                    272: #define                S_IRUSR 0000400 /* read permission, owner */
                    273: #define                S_IWUSR 0000200 /* write permission, owner */
                    274: #define                S_IXUSR 0000100 /* execute/search permission, owner */
                    275: #define        S_IRWXG         0000070 /* rwx, group */
                    276: #define                S_IRGRP 0000040 /* read permission, group */
                    277: #define                S_IWGRP 0000020 /* write permission, grougroup */
                    278: #define                S_IXGRP 0000010 /* execute/search permission, group */
                    279: #define        S_IRWXO         0000007 /* rwx, other */
                    280: #define                S_IROTH 0000004 /* read permission, other */
                    281: #define                S_IWOTH 0000002 /* write permission, other */
                    282: #define                S_IXOTH 0000001 /* execute/search permission, other */
                    283: 
2.95      frystyk   284: #define        S_ISREG(m)      (((m)&amp;_IFMT) == _IFREG)
2.37      frystyk   285: </PRE>
2.95      frystyk   286: <H3>
                    287:   Errno and Return Codes
                    288: </H3>
                    289: <P>
                    290: Winsock has its own errno codes and it returns them through WSAGetLastError().
                    291: However, it does also support BSD error codes, so we make a compromise. WSA
                    292: definitions moved from _WIN32 ifdef by EGP
2.37      frystyk   293: <PRE>
                    294: #define socerrno WSAGetLastError()
                    295: #define ERRNO_DONE
                    296: </PRE>
2.95      frystyk   297: <P>
                    298: Return code for socket functions. We can't use -1 as return value
                    299: <P>
2.97      frystyk   300: <PRE>#define EWOULDBLOCK     WSAEWOULDBLOCK
2.77      frystyk   301: #define EINPROGRESS     WSAEINPROGRESS
                    302: #define ECONNREFUSED    WSAECONNREFUSED
                    303: #define ETIMEDOUT       WSAETIMEDOUT
                    304: #define ENETUNREACH     WSAENETUNREACH
                    305: #define EHOSTUNREACH    WSAEHOSTUNREACH
                    306: #define EHOSTDOWN       WSAEHOSTDOWN
                    307: #define EISCONN         WSAEISCONN
2.38      frystyk   308: 
2.48      frystyk   309: /* Some compilers do only define WIN32 and NOT _WINDOWS */
2.77      frystyk   310: #define NO_GROUPS
2.85      frystyk   311: 
2.77      frystyk   312: #ifdef _WIN32
2.85      frystyk   313: #define MKDIR(a,b)     mkdir((a))     /* CLB NT has mkdir, but only one arg */
2.77      frystyk   314: #define SLEEP(n)        Sleep((n)*1000)
                    315: #else
2.85      frystyk   316: #define MKDIR(a,b)     _mkdir((a))    /* CLB NT has mkdir, but only one arg */
2.50      frystyk   317: #endif /* WIN32 */
2.84      frystyk   318: 
                    319: #endif /* WWW_MSWINDOWS */
2.38      frystyk   320: </PRE>
2.95      frystyk   321: <H2>
2.97      frystyk   322:   <A NAME="Macintosh">Macintosh</A>
2.95      frystyk   323: </H2>
                    324: <P>
2.97      frystyk   325: We have two environments on Macintosh: Codeworrior and MPV.
                    326: <H3>
                    327:   Metrowerks Codewarrior 6
                    328: </H3>
                    329: <P>
2.95      frystyk   330: Metrowerks Codewarrior is one development environment on the Mac. We are
                    331: using GUSI (1.5.9) by Matthias Neeracher &lt;neeri@iis.ee.ethz.ch&gt; for
2.97      frystyk   332: our socket lib. You can find more information about the
                    333: <A HREF="http://err.ethz.ch/~neeri/macintosh/gusiman/">GUSI Library</A> from
                    334: Switzerland.
2.95      frystyk   335: <P>
                    336: Compiles on PPC. Should compile on 68K.
                    337: <P>
2.98      frystyk   338: August 31, 1995 by Steven T. Roussey &lt;sroussey@eng.uci.edu&gt; (STR). and 
                    339: jeff@macalot.com (Jeff Dripps). Thanks a bunch!
2.88      frystyk   340: <PRE>
                    341: #ifdef __MWERKS__
2.98      frystyk   342: #include &lt;gusi.h>
                    343: #include &lt;dirent.h>
                    344: #include &lt;errno.h>
                    345: #include &lt;sys/errno.h>
                    346: #include &lt;sioux.h>
2.88      frystyk   347: 
                    348: #define INCLUDES_DONE
                    349: #define TCP_INCLUDES_DONE
                    350: 
2.98      frystyk   351: #define GUSI                    /* Identifies changes made for GUSI */
2.88      frystyk   352: 
2.98      frystyk   353: #undef  HAVE_GETDOMAINNAME      /* STR */
2.88      frystyk   354: #undef  HAVE_GETPASS
                    355: #undef  HAVE_GETWD
                    356: 
                    357: #define HAVE_GETCWD
                    358: #define USE_DIRENT
                    359: #define NO_GROUPS
                    360: #define GOT_READ_DIR
                    361: 
2.98      frystyk   362: #undef  HAVE_TIMEZONE           /* STR */
2.88      frystyk   363: #define NO_GMTOFF
                    364: #define HAVE_STRERROR
2.98      frystyk   365: #define HAVE_GETHOSTNAME
2.88      frystyk   366: 
                    367: #define d_ino           d_fileno        /* backward compatibility */
                    368: 
2.98      frystyk   369: #define SLEEP(n)        GUSIDefaultSpin( SP_SLEEP, n/60)
2.88      frystyk   370: 
                    371: #define MKDIR(a,b)      mkdir(a)
2.98      frystyk   372: 
                    373: #define HAVE_STRFTIME           // added JTD:5/1/96
                    374: #define HAVE_MKTIME             // added JTD:5/1/96
                    375: #define HAVE_STRCHR             // added JTD:5/1/96
                    376: #define STDC_HEADERS            // added JTD:5/1/96
                    377: #define HAVE_MEMCPY             // added JTD:5/1/96
                    378: #define TTY_IS_SELECTABLE       // added JTD:5/1/96
                    379: #define HAVE_READDIR            // added JTD:5/1/96
                    380: #define HAVE_DIRENT_INO         // added JTD:5/1/96
                    381: #define HAVE_DIRENT_H           // added JTD:5/1/96
                    382: 
2.88      frystyk   383: #endif
                    384: </PRE>
2.97      frystyk   385: <H3>
                    386:   MPW
                    387: </H3>
2.95      frystyk   388: <P>
                    389: MPW is one development environment on the Mac.
                    390: <P>
                    391: This entry was created by Aleksandar Totic (atotic@ncsa.uiuc.edu) this file
                    392: is compatible with sockets package released by NCSA. One major conflict is
                    393: that this library redefines write/read/etc as macros. In some of HTML code
                    394: these macros get executed when they should not be. Such files should define
                    395: NO_SOCKET_DEFS on top. This is a temporary hack.
2.88      frystyk   396: <PRE>
                    397: #ifdef applec                  /* MPW  */
                    398: #undef HAVE_SYSTEM
                    399: #define DEBUG                  /* Can't put it on the CC command line */
                    400: 
                    401: #define NO_UNIX_IO             /* getuid() missing */
                    402: #undef  HAVE_GETPID            /* getpid() does not exist */
                    403: #define NO_GETWD               /* getwd() does not exist */
                    404: 
                    405: #define NETCLOSE s_close    /* Routine to close a TCP-IP socket */
                    406: #define NETREAD  s_read            /* Routine to read from a TCP-IP socket */
                    407: #define NETWRITE s_write    /* Routine to write to a TCP-IP socket */
                    408: 
                    409: #define _ANSI_SOURCE
                    410: #define GUI
                    411: #define LINEFEED 10
                    412: #define ANON_FTP_HOSTNAME
                    413: #ifndef NO_SOCKET_DEFS
                    414: #include &lt;MacSockDefs.h&gt;
                    415: #endif /* NO_SOCKET_DEFS */
                    416: 
                    417: #include &lt;socket.ext.h&gt;
                    418: #include &lt;string.h&gt;
                    419: 
                    420: #endif /* applec MPW */
                    421: </PRE>
2.95      frystyk   422: <H2>
2.97      frystyk   423:   <A NAME="VAX">VAX/VMS</A>
2.95      frystyk   424: </H2>
                    425: <P>
                    426: Under VMS, there are many versions of TCP-IP. Define one if you do not use
                    427: Digital's UCX product:
2.4       timbl     428: <DL>
2.95      frystyk   429:   <DT>
                    430:     UCX
                    431:   <DD>
                    432:     DEC's "Ultrix connection" (default)
                    433:   <DT>
                    434:     WIN_TCP
                    435:   <DD>
                    436:     From Wollongong, now GEC software.
                    437:   <DT>
                    438:     MULTINET
                    439:   <DD>
                    440:     From SRI, now from TGV Inv.
                    441:   <DT>
                    442:     DECNET
                    443:   <DD>
                    444:     Cern's TCP socket emulation over DECnet
2.4       timbl     445: </DL>
2.95      frystyk   446: <P>
                    447: The last three do not interfere with the unix i/o library, and so they need
                    448: special calls to read, write and close sockets. In these cases the socket
                    449: number is a VMS channel number, so we make the @@@ HORRIBLE @@@ assumption
                    450: that a channel number will be greater than 10 but a unix file descriptor
                    451: less than 10. It works.
2.26      frystyk   452: <PRE>
2.76      frystyk   453: #ifdef VMS
                    454: #include "HTVMSUtils.h"
2.47      frystyk   455: #define CACHE_FILE_PREFIX      "SYS$LOGIN:Z_"
                    456: #define DEFAULT_SUFFIXES       "._"
2.7       timbl     457: 
2.88      frystyk   458: #define HAVE_CUSERID
                    459: 
2.7       timbl     460: #ifdef WIN_TCP
2.32      frystyk   461: #define NETREAD(s,b,l) ((s)&gt;10 ? netread((s),(b),(l)) : read((s),(b),(l)))
                    462: #define NETWRITE(s,b,l)        ((s)&gt;10 ? netwrite((s),(b),(l)) : write((s),(b),(l)))
                    463: #define NETCLOSE(s)    ((s)&gt;10 ? netclose(s) : close(s))
2.16      duns      464: #endif /* WIN_TCP */
2.1       timbl     465: 
                    466: #ifdef MULTINET
                    467: #undef NETCLOSE
                    468: #undef NETREAD
                    469: #undef NETWRITE
2.32      frystyk   470: #define NETREAD(s,b,l) ((s)&gt;10 ? socket_read((s),(b),(l)) : read((s),(b),(l)))
                    471: #define NETWRITE(s,b,l)        ((s)&gt;10 ? socket_write((s),(b),(l)) : \
2.1       timbl     472:                                write((s),(b),(l)))
2.32      frystyk   473: #define NETCLOSE(s)    ((s)&gt;10 ? socket_close(s) : close(s))
2.37      frystyk   474: #define IOCTL(s,c,a)   socket_ioctl(s,c,a);
2.16      duns      475: #endif /* MULTINET */
2.1       timbl     476: 
                    477: #ifdef DECNET
2.74      frystyk   478: #define DNP_OBJ 80     /* This one doesn't look busy, but we must check */
                    479:                        /* That one was for decnet */
                    480: #undef SELECT          /* not supported */
2.32      frystyk   481: #define NETREAD(s,b,l) ((s)&gt;10 ? recv((s),(b),(l),0) : read((s),(b),(l)))
                    482: #define NETWRITE(s,b,l)        ((s)&gt;10 ? send((s),(b),(l),0) : write((s),(b),(l)))
                    483: #define NETCLOSE(s)    ((s)&gt;10 ? socket_close(s) : close(s))
2.73      frystyk   484: 
2.88      frystyk   485: #undef HAVE_GETHOSTNAME                        /* Decnet doesn't have a name server */
2.1       timbl     486: #endif /* Decnet */
2.73      frystyk   487: 
2.88      frystyk   488: #undef HAVE_GETDOMAINNAME
2.31      duns      489:          
2.1       timbl     490: /*     Certainly this works for UCX and Multinet; not tried for Wollongong
                    491: */
                    492: #ifdef MULTINET
2.32      frystyk   493: #include &lt;time.h&gt;
2.16      duns      494: #ifdef __TIME_T
                    495: #define __TYPES
                    496: #define __TYPES_LOADED
                    497: #endif /* __TIME_T */
2.37      frystyk   498: #include &lt;multinet_root:[multinet.include.sys]types.h&gt;
                    499: #include &lt;multinet_root:[multinet.include]errno.h&gt;
2.16      duns      500: #ifdef __TYPES
                    501: #define __TIME_T
                    502: #endif /* __TYPE */
                    503: #ifdef __TIME_LOADED
                    504: #define __TIME
                    505: #endif /* __TIME_LOADED */
2.37      frystyk   506: #include &lt;multinet_root:[multinet.include.sys]time.h&gt;
2.16      duns      507: #else /* not MULTINET */
2.32      frystyk   508: #include &lt;types.h&gt;
                    509: #include &lt;errno.h&gt;
                    510: #include &lt;time.h&gt;
2.16      duns      511: #endif /* not MULTINET */
2.1       timbl     512: 
                    513: #include string
                    514: 
                    515: #ifndef STDIO_H
2.24      luotonen  516: #include &lt;stdio&gt;
2.1       timbl     517: #define STDIO_H
                    518: #endif
                    519: 
                    520: #include file
                    521: 
2.37      frystyk   522: #ifndef DECNET  /* Why is it used at all ? Types conflict with "types.h&gt; */
2.1       timbl     523: #include unixio
                    524: #endif
                    525: 
                    526: #define INCLUDES_DONE
                    527: 
                    528: #ifdef MULTINET  /* Include from standard Multinet directories */
2.37      frystyk   529: #include &lt;multinet_root:[multinet.include.sys]socket.h&gt;
2.1       timbl     530: #ifdef __TIME_LOADED  /* defined by sys$library:time.h */
                    531: #define __TIME  /* to avoid double definitions in next file */
                    532: #endif
2.37      frystyk   533: #include &lt;multinet_root:[multinet.include.netinet]in.h&gt;
                    534: #include &lt;multinet_root:[multinet.include.arpa]inet.h&gt;
                    535: #include &lt;multinet_root:[multinet.include]netdb.h&gt;
                    536: #include &lt;multinet_root:[multinet.include.sys]ioctl.h&gt;
2.1       timbl     537: 
                    538: #else  /* not multinet */
                    539: #ifdef DECNET
2.37      frystyk   540: #include &lt;types.h&gt;  /* for socket.h */
                    541: #include &lt;socket.h&gt;
2.65      frystyk   542: #include &lt;dn&gt;
                    543: #include &lt;dnetdb&gt;
2.1       timbl     544: 
                    545: #else /* UCX or WIN */
2.16      duns      546: #ifdef CADDR_T
                    547: #define __CADDR_T
                    548: #endif /* problem with xlib.h inclusion */
2.32      frystyk   549: #include &lt;socket.h&gt;
                    550: #include &lt;in.h&gt;
                    551: #include &lt;inet.h&gt;
                    552: #include &lt;netdb.h&gt;
                    553: #include &lt;ucx$inetdef.h&gt;
2.1       timbl     554: 
                    555: #endif  /* not DECNET */
                    556: #endif  /* of Multinet or other TCP includes */
                    557: 
                    558: #define TCP_INCLUDES_DONE
2.63      frystyk   559: 
                    560: #ifdef UCX
                    561: #define SIMPLE_TELNET
                    562: #endif
2.26      frystyk   563: </PRE>
2.95      frystyk   564: <P>
                    565: On VMS directory browsing is available through a separate copy of dirent.c.
                    566: The definition of R_OK seem to be missing from the system include files...
2.31      duns      567: <PRE>
                    568: #define USE_DIRENT
2.37      frystyk   569: #define GOT_READ_DIR
                    570: #include &lt;dirent.h&gt;
2.88      frystyk   571: #define DIR struct dirent
2.31      duns      572: #define R_OK 4
                    573: </PRE>
2.95      frystyk   574: <P>
                    575: On VMS machines, the linker needs to be told to put global data sections
                    576: into a data segment using these storage classes. (MarkDonszelmann)
2.26      frystyk   577: <PRE>
                    578: #ifdef VAXC
2.7       timbl     579: #define GLOBALDEF globaldef
                    580: #define GLOBALREF globalref
                    581: #endif /*  VAXC */
2.1       timbl     582: #endif /* vms */
2.26      frystyk   583: </PRE>
2.95      frystyk   584: <P>
                    585: On non-VMS machines, the GLOBALDEF and GLOBALREF storage types default to
                    586: normal C storage types.
2.26      frystyk   587: <PRE>
                    588: #ifndef GLOBALREF
2.7       timbl     589: #define GLOBALDEF
                    590: #define GLOBALREF extern
                    591: #endif
2.31      duns      592: </PRE>
2.95      frystyk   593: <P>
                    594: On non-VMS machines STAT should be stat...On VMS machines STAT is a function
                    595: that converts directories and devices so that you can stat them.
2.31      duns      596: <PRE>
                    597: #ifdef VMS
2.37      frystyk   598: typedef unsigned long mode_t;
2.69      frystyk   599: #define HT_STAT                HTStat
                    600: #define HT_LSTAT       HTStat
                    601: #else
                    602: #define HT_STAT                stat
                    603: #define HT_LSTAT       lstat
2.31      duns      604: #endif /* non VMS */
2.26      frystyk   605: </PRE>
2.95      frystyk   606: <H3>
                    607:   Dynamic Memory
                    608: </H3>
                    609: <P>
                    610: Replace memory allocation and free C RTL functions with VAXC$xxx_OPT alternatives
                    611: for VAXC (but not DECC) on VMS. This makes a big performance difference.
                    612: (Foteos Macrides). Also have a look at the <A HREF="HTMemory.html">Dynamic
                    613: Memory Module</A> for how to handle <CODE>malloc</CODE> and
                    614: <CODE>calloc</CODE>.
2.88      frystyk   615: <PRE>
                    616: #ifdef VMS
                    617: #include &lt;stdio.h&gt;
                    618: #include &lt;stdlib.h&gt;
                    619: #include &lt;unixlib.h&gt;
                    620: #include &lt;ctype.h&gt;
2.95      frystyk   621: #if defined(VAXC) &amp;&amp; !defined(__DECC)
2.88      frystyk   622: #define malloc VAXC$MALLOC_OPT
                    623: #define calloc VAXC$CALLOC_OPT
                    624: #define free   VAXC$FREE_OPT
                    625: #define cfree  VAXC$CFREE_OPT
                    626: #define realloc        VAXC$REALLOC_OPT
                    627: #endif /* VAXC but not DECC */
                    628: #define unlink remove
                    629: #define gmtime localtime
                    630: #include &lt;stat.h&gt;
2.95      frystyk   631: #define S_ISDIR(m)      (((m)&amp;S_IFMT) == S_IFDIR)
                    632: #define S_ISREG(m)      (((m)&amp;S_IFMT) == S_IFREG)
2.88      frystyk   633: #define putenv HTVMS_putenv
                    634: #endif /* VMS */
                    635: </PRE>
2.95      frystyk   636: <H3>
                    637:   Strftime and other time stuff
                    638: </H3>
2.41      frystyk   639: <PRE>
                    640: #ifdef VMS
                    641: #ifndef DECC
2.88      frystyk   642: #undef  HAVE_STRFTIME
2.41      frystyk   643: #endif
2.88      frystyk   644: #undef  HAVE_MKTIME
                    645: #undef  HAVE_TIMEGM
2.41      frystyk   646: #define NO_GMTOFF
2.88      frystyk   647: #undef  HAVE_TIMEZONE
2.41      frystyk   648: #endif
2.90      eric      649: 
                    650: #ifdef WWW_MSWINDOWS
                    651: #define HAVE_MKTIME
                    652: #define HAVE_STRFTIME
                    653: #endif
2.41      frystyk   654: </PRE>
2.95      frystyk   655: <H3>
                    656:   Definition of Errno
                    657: </H3>
2.37      frystyk   658: <PRE>
                    659: #ifdef VMS
                    660: #ifndef __DECC
                    661: extern int uerrno;     /* Deposit of error info (as per errno.h) */
                    662: extern volatile noshare int socket_errno; /* socket VMS error info 
                    663:                                           (used for translation of vmserrno) */
                    664: extern volatile noshare int vmserrno;  /* Deposit of VMS error info */
                    665: extern volatile noshare int errno;  /* noshare to avoid PSECT conflict */
                    666: #define ERRNO_DONE
                    667: #endif /* not DECC */
                    668: #endif /* VMS */
                    669: </PRE>
2.95      frystyk   670: <P>
                    671:   <HR>
                    672: <H1>
2.97      frystyk   673:   <A NAME="Platform">Platform Independent Stuff</A>
2.95      frystyk   674: </H1>
                    675: <P>
2.88      frystyk   676: Here we use all the knowledge we got above...
2.95      frystyk   677: <H2>
                    678:   Include Files
                    679: </H2>
                    680: <P>
                    681: This file includes all system header files that are needed, iff they exist.
                    682: Their existance is discovered by <CODE>configure</CODE>.
2.40      frystyk   683: <PRE>
2.88      frystyk   684: /* stdio.h */
                    685: #ifdef HAVE_STDIO_H
                    686: #include &lt;stdio.h&gt;
2.40      frystyk   687: #endif
                    688: 
2.88      frystyk   689: /* types.h */
                    690: #ifdef HAVE_SYS_TYPES_H
                    691: #include &lt;sys/types.h&gt;
                    692: #else
                    693: #ifdef HAVE_TYPES_H
                    694: #include &lt;types.h&gt;
2.42      frystyk   695: #endif
2.32      frystyk   696: #endif
                    697: 
2.88      frystyk   698: /* unistd.h */
                    699: #ifdef HAVE_UNISTD_H
2.28      luotonen  700: #include &lt;unistd.h&gt;
2.88      frystyk   701: #else
                    702: #ifdef HAVE_SYS_UNISTD_H
                    703: #include &lt;sys/unistd.h&gt;
                    704: #endif
2.32      frystyk   705: #endif
                    706: 
2.88      frystyk   707: /* fcntl.h */
                    708: #ifdef HAVE_FCNTL_H
2.28      luotonen  709: #include &lt;fcntl.h&gt;
                    710: #else
2.88      frystyk   711: #ifdef HAVE_SYS_FCNTL_H
2.28      luotonen  712: #include &lt;sys/fcntl.h&gt;
                    713: #endif
2.88      frystyk   714: #endif
2.28      luotonen  715: 
2.88      frystyk   716: /* limits.h */
                    717: #ifdef HAVE_SYS_LIMITS_H
                    718: #include &lt;sys/limits.h&gt;
                    719: #else
                    720: #ifdef HAVE_LIMITS_H
2.32      frystyk   721: #include &lt;limits.h&gt;
2.88      frystyk   722: #endif
                    723: #endif
2.41      frystyk   724: 
2.88      frystyk   725: /* stat.h */
                    726: #ifdef HAVE_SYS_STAT_H
                    727: #include &lt;sys/stat.h&gt;
                    728: #else
                    729: #ifdef HAVE_STAT_H
                    730: #include &lt;stat.h&gt;
                    731: #endif
2.41      frystyk   732: #endif
                    733: 
2.88      frystyk   734: /* file.h */
                    735: #ifdef HAVE_SYS_FILE_H
                    736: #include &lt;sys/file.h&gt;
                    737: #endif
2.37      frystyk   738: 
2.88      frystyk   739: /* systeminfo.h */
                    740: #ifdef HAVE_SYS_SYSTEMINFO_H
                    741: #include &lt;sys/systeminfo.h&gt;
                    742: #endif
2.37      frystyk   743: 
2.88      frystyk   744: /* ioctl.h */
                    745: #ifdef HAVE_SYS_IOCTL_H
                    746: #include &lt;sys/ioctl.h&gt;
                    747: #endif
2.32      frystyk   748: 
2.88      frystyk   749: /* time.h */
                    750: #ifdef TIME_WITH_SYS_TIME
                    751: #include &lt;sys/time.h&gt;
                    752: #include &lt;time.h&gt;
                    753: #else
                    754: #ifdef HAVE_SYS_TIME_H
                    755: #include &lt;sys/time.h&gt;
                    756: #else
                    757: #ifdef HAVE_TIME_H
2.28      luotonen  758: #include &lt;time.h&gt;
2.88      frystyk   759: #endif
                    760: #endif
                    761: #endif
2.28      luotonen  762: 
2.88      frystyk   763: /* string{,s}.h */
                    764: #ifdef HAVE_STRING_H
                    765: #include &lt;string.h&gt;
                    766: #endif
                    767: #ifdef HAVE_STRINGS_H
                    768: #include &lt;strings.h&gt;
2.41      frystyk   769: #endif
2.28      luotonen  770: 
2.88      frystyk   771: /* syslog.h */
                    772: #ifdef HAVE_SYSLOG_H
                    773: #include &lt;syslog.h&gt;
                    774: #endif
2.28      luotonen  775: 
2.88      frystyk   776: /* socket.h */
                    777: #ifdef HAVE_SYS_SOCKET_H
                    778: #include &lt;sys/socket.h&gt;
                    779: #else
                    780: #ifdef HAVE_SOCKET_H
                    781: #include &lt;socket.h&gt;
                    782: #endif
                    783: #endif
2.44      frystyk   784: 
2.88      frystyk   785: /* socket.ext.h */
                    786: #ifdef HAVE_SOCKET_EXT_H
                    787: #include &lt;socket.ext.h&gt;
                    788: #endif
2.43      frystyk   789: 
2.88      frystyk   790: /* appkit.h */
                    791: #ifdef HAVE_APPKIT_APPKIT_H
2.91      frystyk   792: #include &lt;appkit/appkit.h&gt;
2.88      frystyk   793: #else
                    794: #ifdef HAVE_APPKIT_H
2.91      frystyk   795: #include &lt;appkit.h&gt;
2.88      frystyk   796: #endif
                    797: #endif
2.43      frystyk   798: 
2.88      frystyk   799: /* in.h */
                    800: #ifdef HAVE_NETINET_IN_H
                    801: #include &lt;netinet/in.h&gt;
                    802: #else
                    803: #ifdef HAVE_IN_H
                    804: #include &lt;in.h&gt;
                    805: #endif
2.43      frystyk   806: #endif
2.21      frystyk   807: 
2.88      frystyk   808: /* dn.h */
                    809: #ifdef HAVE_DN_H
                    810: #include &lt;dn.h&gt;
                    811: #endif
2.22      luotonen  812: 
2.88      frystyk   813: /* ipc.h */
                    814: #ifdef HAVE_SYS_IPC_H
2.30      luotonen  815: #include &lt;sys/ipc.h&gt;
2.88      frystyk   816: #endif
2.41      frystyk   817: 
2.88      frystyk   818: /* errno.h */
                    819: #ifdef HAVE_ERRNO_H
                    820: #include &lt;errno.h&gt;
                    821: #else
                    822: #ifdef HAVE_SYS_ERRNO_H
                    823: #include &lt;sys/errno.h&gt;
                    824: #else
                    825: #ifdef HAVE_NET_ERRNO_H
2.30      luotonen  826: #include &lt;net/errno.h&gt;
2.88      frystyk   827: #endif
                    828: #endif
                    829: #endif
2.22      luotonen  830: 
2.88      frystyk   831: /* pwd.h */
                    832: #ifdef HAVE_PWD_H
                    833: #include &lt;pwd.h&gt;
                    834: #endif
2.22      luotonen  835: 
2.88      frystyk   836: /* grp.h */
                    837: #ifdef HAVE_GRP_H
                    838: #include &lt;grp.h&gt;
                    839: #endif
2.21      frystyk   840: 
2.88      frystyk   841: /* inet.h */
                    842: #ifdef HAVE_ARPA_INET_H
                    843: #include &lt;arpa/inet.h&gt;
                    844: #else
                    845: #ifdef HAVE_INET_H
                    846: #include &lt;inet.h&gt;
                    847: #endif
                    848: #endif
2.41      frystyk   849: 
2.88      frystyk   850: /* netdb.h */
                    851: #ifdef HAVE_NETDB_H
                    852: #include &lt;netdb.h&gt;
                    853: #endif
2.41      frystyk   854: 
2.88      frystyk   855: /* manifest.h */
                    856: #ifdef HAVE_MANIFEST_H
                    857: #include &lt;manifest.h&gt;
                    858: #endif
2.15      luotonen  859: 
2.88      frystyk   860: /* bsdtypes.h */
                    861: #ifdef HAVE_BSDTYPES_H
                    862: #include &lt;bsdtypes.h&gt;
                    863: #endif
2.17      luotonen  864: 
2.88      frystyk   865: /* stdefs.h */
                    866: #ifdef HAVE_STDEFS_H
                    867: #include &lt;stdefs.h&gt;
2.15      luotonen  868: #endif
                    869: 
2.88      frystyk   870: /* bsdtime.h */
                    871: #ifdef HAVE_BSDTIME_H
                    872: #include &lt;bsdtime.h&gt;
2.15      luotonen  873: #endif
2.36      frystyk   874: 
2.88      frystyk   875: /* select.h */
                    876: #ifdef HAVE_SYS_SELECT_H
                    877: #include &lt;sys/select.h&gt;
                    878: #else
                    879: #ifdef HAVE_SELECT_H
                    880: #include &lt;select.h&gt;
2.36      frystyk   881: #endif
2.88      frystyk   882: #endif
2.51      frystyk   883: 
2.88      frystyk   884: /* dnetdb.h */
                    885: #ifdef HAVE_DNETDB_H
                    886: #include &lt;dnetdb.h&gt;
                    887: #endif
2.25      luotonen  888: 
2.88      frystyk   889: /* ucx$inetdef.h */
                    890: #ifdef HAVE_UCX_INETDEF_H
                    891: #include &lt;ucx$inetdef.h&gt;
                    892: #endif
2.26      frystyk   893: 
2.88      frystyk   894: /* libc.h */
                    895: #ifdef HAVE_LIBC_H
                    896: #include &lt;libc.h&gt;
                    897: #endif
2.32      frystyk   898: 
2.88      frystyk   899: /* stdlib.h */
                    900: #ifdef HAVE_STDLIB_H
                    901: #include &lt;stdlib.h&gt;
                    902: #endif
2.32      frystyk   903: 
2.88      frystyk   904: /* malloc.h */
                    905: #ifdef HAVE_MALLOC_H
                    906: #include &lt;malloc.h&gt;
2.58      frystyk   907: #endif
                    908: 
2.88      frystyk   909: /* memory.h */
                    910: #ifdef HAVE_MEMORY_H
                    911: #include &lt;memory.h&gt;
                    912: #endif
2.58      frystyk   913: 
2.88      frystyk   914: /* unixlib.h */
                    915: #ifdef HAVE_UNIXLIB_H
                    916: #include &lt;unixlib.h&gt;
                    917: #endif
2.58      frystyk   918: 
2.88      frystyk   919: /* ctype.h */
                    920: #ifdef HAVE_CTYPE_H
                    921: #include &lt;ctype.h&gt;
2.32      frystyk   922: #endif
                    923: 
2.88      frystyk   924: /* curses.h */
                    925: #ifdef CURSES
                    926: #ifdef HAVE_CURSESX_H
                    927: #include &lt;cursesX.h&gt;
                    928: #else
                    929: #ifdef HAVE_CURSES_H
                    930: #include &lt;curses.h&gt;
                    931: #endif
                    932: #endif
2.62      frystyk   933: #endif
                    934: 
2.88      frystyk   935: /* resource.h (some wait.h's require it) */
                    936: #ifdef HAVE_SYS_RESOURCE_H
                    937: #include &lt;sys/resource.h&gt;
                    938: #else
                    939: #ifdef HAVE_RESOURCE_H
                    940: #include &lt;resource.h&gt;
2.45      frystyk   941: #endif
2.81      frystyk   942: #endif
                    943: 
2.88      frystyk   944: /* dirent.h / ndir.h / dir.h */
                    945: #ifdef HAVE_DIRENT_H
2.32      frystyk   946: #include &lt;dirent.h&gt;
2.95      frystyk   947: #define NAMLEN(dirent) strlen((dirent)-&gt;d_name)
2.26      frystyk   948: #else
2.88      frystyk   949: #define dirent direct
2.95      frystyk   950: #define NAMLEN(dirent) (dirent)-&gt;d_namlen
2.88      frystyk   951: #ifdef HAVE_SYS_NDIR_H
                    952: #include &lt;sys/ndir.h&gt;
                    953: #endif
                    954: #ifdef HAVE_SYS_DIR_H
2.32      frystyk   955: #include &lt;sys/dir.h&gt;
2.88      frystyk   956: #endif
                    957: #ifdef HAVE_DIR_H
                    958: #include &lt;dir.h&gt;
                    959: #endif
                    960: #ifdef HAVE_NDIR_H
                    961: #include &lt;ndir.h&gt;
                    962: #endif
2.26      frystyk   963: #endif
                    964: 
2.90      eric      965: #if !defined(HAVE_STRCHR) &amp;&amp; !defined(WWW_MSWINDOWS)
2.88      frystyk   966: #define strchr index
                    967: #define strrchr rindex
2.26      frystyk   968: #endif
2.90      eric      969: #if !defined(HAVE_MEMCPY) &amp;&amp; !defined(WWW_MSWINDOWS)
2.88      frystyk   970: #define memcpy(d, s, n) bcopy((s), (d), (n))
                    971: #define memmove(d, s, n) bcopy((s), (d), (n))
2.25      luotonen  972: #endif
2.37      frystyk   973: 
2.88      frystyk   974: /* Standard headers */
                    975: #ifdef STDC_HEADERS
                    976: #include &lt;stdarg.h&gt;
                    977: #else
2.90      eric      978: #ifndef WWW_MSWINDOWS
2.88      frystyk   979: #include &lt;varargs.h&gt;
2.90      eric      980: #endif
2.88      frystyk   981: #endif
2.26      frystyk   982: 
2.88      frystyk   983: /* wait.h */
                    984: #ifdef HAVE_SYS_WAIT_H
                    985: #include &lt;sys/wait.h&gt;
                    986: #endif
                    987: #ifndef WEXITSTATUS
2.95      frystyk   988: #define WEXITSTATUS(stat_val) (((unsigned)(stat_val) &gt;&gt; 8) &amp; 255)
2.88      frystyk   989: #endif
                    990: #ifndef WIFEXITED
                    991: #define WIFEXITED(stat_val) (((stat_val) &amp; 255) == 0)
                    992: #endif
2.92      eric      993: </PRE>
2.95      frystyk   994: <H2>
                    995:   Booleans
                    996: </H2>
2.92      eric      997: <PRE>
                    998: #if !defined(BOOLEAN)
                    999: typedef char   BOOLEAN;                                    /* Logical value */
                   1000: #endif
                   1001: 
                   1002: #ifndef CURSES
                   1003: #ifndef TRUE
                   1004: #define TRUE   (BOOLEAN)1
                   1005: #define        FALSE   (BOOLEAN)0
                   1006: #endif
                   1007: #endif  /*  CURSES  */
                   1008: 
                   1009: #if !defined(BOOL) &amp;&amp; !defined(WWW_MSWINDOWS)
                   1010: #define BOOL BOOLEAN
                   1011: #endif
                   1012: 
                   1013: #ifndef YES
                   1014: #define YES             (BOOL)1
                   1015: #define NO              (BOOL)0
                   1016: #endif
                   1017: </PRE>
2.95      frystyk  1018: <H2>
                   1019:   NULL Definition
                   1020: </H2>
2.92      eric     1021: <PRE>
                   1022: #ifndef NULL
                   1023: #define NULL ((void *)0)
                   1024: #endif
2.95      frystyk  1025: </PRE>
                   1026: <H2>
                   1027:   Sleep System Call
                   1028: </H2>
                   1029: <P>
2.39      frystyk  1030: Some systems use milliseconds instead of seconds
                   1031: <PRE>
                   1032: #ifndef SLEEP
                   1033: #define SLEEP(n)       sleep(n)
                   1034: #endif
                   1035: </PRE>
2.95      frystyk  1036: <H2>
                   1037:   SOCKS
                   1038: </H2>
                   1039: <P>
                   1040: SOCKS is a package for allowing socket connections to tunnel through firewalls
                   1041: in carefully controlled situations. This package can be optionally compiled
                   1042: with SOCKS support; these definitions replace the normal socket calls with
                   1043: the SOCKS ones. Initial modification of the library is credited to Ian Dunkin
                   1044: &lt;imd1707@ggr.co.uk&gt;.
2.37      frystyk  1045: <PRE>
2.88      frystyk  1046: #ifdef SOCKS
2.37      frystyk  1047: #define connect Rconnect
                   1048: #define accept  Raccept
                   1049: #define getsockname Rgetsockname
                   1050: #define bind Rbind 
                   1051: #define listen Rlisten  
                   1052: #endif
                   1053: </PRE>
2.95      frystyk  1054: <H2>
                   1055:   Network Family
                   1056: </H2>
2.37      frystyk  1057: <PRE>
                   1058: #ifdef DECNET
                   1059: typedef struct sockaddr_dn SockA;  /* See netdnet/dn.h or custom vms.h */
                   1060: #else /* Internet */
                   1061: typedef struct sockaddr_in SockA;  /* See netinet/in.h */
                   1062: #endif
                   1063: </PRE>
2.95      frystyk  1064: <H2>
                   1065:   Default Values of Network Access
                   1066: </H2>
2.37      frystyk  1067: <PRE>
                   1068: #ifndef NETCLOSE
                   1069: #define NETCLOSE close         /* Routine to close a TCP-IP socket */
                   1070: #endif
                   1071: 
                   1072: #ifndef NETREAD
                   1073: #define NETREAD  read          /* Routine to read from a TCP-IP socket */
                   1074: #endif
                   1075: 
                   1076: #ifndef NETWRITE
                   1077: #define NETWRITE write         /* Routine to write to a TCP-IP socket */
                   1078: #endif
                   1079: </PRE>
2.95      frystyk  1080: <H2>
                   1081:   Definition of errno and Return Code
                   1082: </H2>
                   1083: <P>
                   1084: This is the definition of error codes and the corresponding string constants.
                   1085: If we do not have the <CODE>strerror</CODE> function then try the error list
                   1086: table.
2.37      frystyk  1087: <PRE>
                   1088: #ifndef ERRNO_DONE
                   1089: extern int errno;
                   1090: #define socerrno errno
                   1091: #endif
2.41      frystyk  1092: 
                   1093: #ifndef HAVE_STRERROR                            /* Otherwise use the table */
                   1094: extern char *sys_errlist[];
                   1095: extern int sys_nerr;
                   1096: #endif
2.37      frystyk  1097: </PRE>
2.95      frystyk  1098: <H2>
                   1099:   Definition of Socket Desrciptores
                   1100: </H2>
                   1101: <P>
2.37      frystyk  1102: This is necessary in order to support Windows NT...
                   1103: <PRE>
2.79      frystyk  1104: #ifndef SOCKET
                   1105: #define SOCKET int             /* Unix like socket descriptor */
                   1106: #define INVSOC (-1)            /* Unix invalid socket */
2.37      frystyk  1107: #endif
2.79      frystyk  1108: 
                   1109: #ifdef __svr4__
                   1110: #define HT_BACKLOG 32           /* Number of pending connect requests (TCP) */
                   1111: #else
                   1112: #define HT_BACKLOG 5            /* Number of pending connect requests (TCP) */
                   1113: #endif /* __svr4__ */
2.26      frystyk  1114: </PRE>
2.95      frystyk  1115: <H2>
                   1116:   Additional Network variables for SOCKET, file access bits
                   1117: </H2>
2.59      frystyk  1118: <PRE>
2.100.2.1! eric     1119: #if 0
2.66      frystyk  1120: #ifndef _WINSOCKAPI_
2.59      frystyk  1121: #define FD_READ         0x01
                   1122: #define FD_WRITE        0x02
                   1123: #define FD_OOB          0x04
                   1124: #define FD_ACCEPT       0x08
                   1125: #define FD_CONNECT      0x10
                   1126: #define FD_CLOSE        0x20
                   1127: #endif /* _WINSOCKAPI_ */
2.100.2.1! eric     1128: #endif
2.59      frystyk  1129: </PRE>
2.95      frystyk  1130: <H2>
                   1131:   Rough estimate of max path length
                   1132: </H2>
2.26      frystyk  1133: <PRE>
                   1134: #ifndef HT_MAX_PATH
                   1135: #ifdef MAXPATHLEN
                   1136: #define HT_MAX_PATH MAXPATHLEN
                   1137: #else
                   1138: #ifdef PATH_MAX
                   1139: #define HT_MAX_PATH PATH_MAX
                   1140: #else
                   1141: #define HT_MAX_PATH 1024                       /* Any better ideas? */
                   1142: #endif
                   1143: #endif
                   1144: #endif /* HT_MAX_PATH */
2.99      frystyk  1145: 
                   1146: #ifndef HT_MAX_TMPNAM
                   1147: #ifdef L_tmpnam
                   1148: #define HT_MAX_TMPNAM  L_tmpnam
                   1149: #else
                   1150: #define HT_MAX_TMPNAM  128
                   1151: #endif
                   1152: #endif
2.26      frystyk  1153: </PRE>
2.95      frystyk  1154: <H2>
                   1155:   Definition of NGROUPS
                   1156: </H2>
2.26      frystyk  1157: <PRE>
2.94      frystyk  1158: #ifdef GETGROUPS_T
2.26      frystyk  1159: #ifndef NGROUPS
                   1160: #ifdef NGROUPS_MAX
2.94      frystyk  1161: #define NGROUPS                NGROUPS_MAX
2.26      frystyk  1162: #else
2.94      frystyk  1163: #define NGROUPS                20                      /* Any better ideas? */
2.26      frystyk  1164: #endif
2.37      frystyk  1165: #endif
2.34      frystyk  1166: #endif
                   1167: </PRE>
2.95      frystyk  1168: <H2>
                   1169:   Definition of Max Domain Name Length
                   1170: </H2>
2.29      frystyk  1171: <PRE>
                   1172: #ifndef MAXHOSTNAMELEN
                   1173: #define MAXHOSTNAMELEN 64                      /* Any better ideas? */
                   1174: #endif
                   1175: </PRE>
2.95      frystyk  1176: <H2>
                   1177:   File/Directory Management
                   1178: </H2>
2.41      frystyk  1179: <PRE>
                   1180: #ifndef MKDIR
                   1181: #define MKDIR(a,b)     mkdir((a), (b))
                   1182: #endif
                   1183: 
2.56      frystyk  1184: #ifndef RMDIR
                   1185: #define RMDIR(a)       rmdir((a))
                   1186: #endif
                   1187: 
                   1188: #ifndef REMOVE
                   1189: #define REMOVE(a)      unlink((a))
2.47      frystyk  1190: #endif
                   1191: 
                   1192: #ifndef DEFAULT_SUFFIXES
                   1193: #define DEFAULT_SUFFIXES       ".,_"
2.41      frystyk  1194: #endif
2.100     frystyk  1195: 
                   1196: #ifndef F_OK
                   1197: #define R_OK    4
                   1198: #define W_OK    2
                   1199: #define X_OK    1
                   1200: #define F_OK    0
                   1201: #endif
2.41      frystyk  1202: </PRE>
2.95      frystyk  1203: <H2>
                   1204:   Macros for manipulating masks for select()
                   1205: </H2>
2.26      frystyk  1206: <PRE>
2.1       timbl    1207: #ifndef FD_SET
2.88      frystyk  1208: #define FD_SET(fd, m) (*(unsigned*)(m) |=  (1 &lt;&lt; (fd)))
                   1209: #endif
                   1210: 
                   1211: #ifndef FD_CLR
                   1212: #define FD_CLR(fd, m) (*(unsigned*)(m) &amp;= ~(1 &lt;&lt; (fd)))
                   1213: #endif
                   1214: 
                   1215: #ifndef FD_ZERO
                   1216: #define FD_ZERO(m)    (*(unsigned*)(m)) = 0
                   1217: #endif
                   1218: 
                   1219: #ifndef FD_ISSET
                   1220: #define FD_ISSET(fd, m) (*(unsigned*)(m) &amp; (1 &lt;&lt; (fd)))
                   1221: #endif
2.26      frystyk  1222: </PRE>
2.95      frystyk  1223: <H2>
                   1224:   Macros for converting characters
                   1225: </H2>
2.26      frystyk  1226: <PRE>
                   1227: #ifndef TOASCII
2.1       timbl    1228: #define TOASCII(c) (c)
                   1229: #define FROMASCII(c) (c)                                   
2.5       timbl    1230: #endif
2.26      frystyk  1231: </PRE>
2.95      frystyk  1232: <H2>
                   1233:   Cache file prefix
                   1234: </H2>
                   1235: <P>
2.26      frystyk  1236: This is something onto which we tag something meaningful to make a cache
2.95      frystyk  1237: file name. used in HTWSRC.c at least. If it is not defined at all, caching
2.5       timbl    1238: is turned off.
2.26      frystyk  1239: <PRE>
                   1240: #ifndef CACHE_FILE_PREFIX
2.88      frystyk  1241: #ifdef unix
2.6       timbl    1242: #define CACHE_FILE_PREFIX  "/usr/wsrc/"
2.5       timbl    1243: #endif
2.60      frystyk  1244: #endif
                   1245: </PRE>
2.95      frystyk  1246: <H2>
                   1247:   Thread Safe Setup
                   1248: </H2>
                   1249: <P>
                   1250: These are some constants setting the size of buffers used by thread safe
                   1251: versions of some system calls.
2.60      frystyk  1252: <PRE>
                   1253: #ifdef HT_REENTRANT
                   1254: #define HOSTENT_MAX    128
                   1255: #define CTIME_MAX      26
2.100.2.1! eric     1256: #endif /* HT_REENTRANT */
2.17      luotonen 1257: </PRE>
                   1258: <PRE>
                   1259: #endif
                   1260: </PRE>
2.95      frystyk  1261: <P>
                   1262:   <HR>
2.94      frystyk  1263: <ADDRESS>
2.100.2.1! eric     1264:   @(#) $Id: sysdep.html,v 2.100 1996/08/05 17:22:56 frystyk Exp $
2.94      frystyk  1265: </ADDRESS>
2.95      frystyk  1266: </BODY></HTML>

Webmaster