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