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