/* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */This module is a part of the W3C Reference Library. See also the system dependent file tcp module for system specific information.
#ifndef HTUTILS_H #define HTUTILS_H
#if defined(__STDC__) || defined(__cplusplus) || defined(WWW_MSWINDOWS) #define _STANDARD_CODE_ #endif
#ifndef DEBUG #define DEBUG /* No one ever turns this off as trace is too important */ #endif
#ifdef DEBUG #ifdef WWW_WIN_DLL extern int * WWW_TraceFlag; /* In DLLs, we need the indirection */ #define WWWTRACE (*WWW_TraceFlag) #else extern int WWW_TraceFlag; /* Global flag for all W3 trace */ #define WWWTRACE (WWW_TraceFlag) #endif /* WWW_WIN_DLL */ #else #define WWWTRACE 0 #endif /* DEBUG */The WWWTRACE define outputs messages if verbose mode is active according to the following rules:
typedef enum _HTTraceFlags { SHOW_UTIL_TRACE = 0x1, /* 1 */ SHOW_APP_TRACE = 0x2, /* 10 */ SHOW_CACHE_TRACE = 0x4, /* 100 */ SHOW_SGML_TRACE = 0x8, /* 1000 */ SHOW_BIND_TRACE = 0x10, /* 1.0000 */ SHOW_THREAD_TRACE = 0x20, /* 10.0000 */ SHOW_STREAM_TRACE = 0x40, /* 100.0000 */ SHOW_PROTOCOL_TRACE = 0x80, /* 1000.0000 */ SHOW_MEM_TRACE = 0x100, /* 1.0000.0000 */ SHOW_URI_TRACE = 0x200, /* 10.0000.0000 */ SHOW_ANCHOR_TRACE = 0x800, /* 10.00.0000.0000 */ SHOW_ALL_TRACE = 0xFFF /* 11.11.1111.1111 */ } HTTraceFlags;The flags are made so that they can serve as a group flag for correlated trace messages, e.g. showing messages for SGML and HTML at the same time.
#define UTIL_TRACE (WWWTRACE & SHOW_UTIL_TRACE) #define APP_TRACE (WWWTRACE & SHOW_APP_TRACE) #define CACHE_TRACE (WWWTRACE & SHOW_CACHE_TRACE) #define SGML_TRACE (WWWTRACE & SHOW_SGML_TRACE) #define BIND_TRACE (WWWTRACE & SHOW_BIND_TRACE) #define THD_TRACE (WWWTRACE & SHOW_THREAD_TRACE) #define STREAM_TRACE (WWWTRACE & SHOW_STREAM_TRACE) #define PROT_TRACE (WWWTRACE & SHOW_PROTOCOL_TRACE) #define MEM_TRACE (WWWTRACE & SHOW_MEM_TRACE) #define URI_TRACE (WWWTRACE & SHOW_URI_TRACE) #define ANCH_TRACE (WWWTRACE & SHOW_ANCHOR_TRACE)
#define WWWTRACE_FILE 1 /* Output to file */ #define WWWTRACE_STDERR 2 /* Output to stderr */ #define WWWTRACE_TTY 3 /* Output to TTY */ #ifndef WWWTRACE_MODE #ifdef WWW_WIN_WINDOW #define WWWTRACE_MODE WWWTRACE_TTY #else #define WWWTRACE_MODE WWWTRACE_STDERR #endif #endif #if WWWTRACE_MODE == WWWTRACE_FILE extern FILE *WWWTrace; #ifndef HT_TRACE_FILE #define HT_TRACE_FILE "WWWTRACE.TXT" #endif #define TTYPrint fprintf #define TDEST WWWTrace #endif #if WWWTRACE_MODE == WWWTRACE_STDERR #define TTYPrint fprintf #define TDEST stderr #endif #if WWWTRACE_MODE == WWWTRACE_TTY #ifdef WWW_WIN_WINDOW /* standard windows 3.x and non-console WIN32 programs */ #define TDEST 0 #ifdef WWW_WIN_DLL typedef int TTYPrint_t(unsigned int target, const char* fmt, ...); extern TTYPrint_t** PTTYPrint; #define TTYPrint (**PTTYPrint) #else int TTYPrint(unsigned int target, const char* fmt, ...); #endif #else /* if there is a real console, us it */ #define TDEST stderr int TTYPrint(FILE* target, const char* fmt, ...); #endif #endif
malloc
and calloc
.
#ifdef vax #ifdef unix #define ultrix /* Assume vax+unix=ultrix */ #endif #endif #ifndef VMS #ifndef ultrix #ifdef NeXT #include <libc.h> /* NeXT */ #endif #ifndef Mips #ifndef MACH /* Vincent.Cate@furmint.nectar.cs.cmu.edu */ #include <stdlib.h> /* ANSI */ #endif #endif #else /* ultrix */ #include <malloc.h> #include <memory.h> #include <stdio.h> #include <stdlib.h> /* ANSI */ /* BSN */ #endif #else /* VMS */ #include <stdio.h> #include <stdlib.h> #include <unixlib.h> #include <ctype.h> #if defined(VAXC) && !defined(__DECC) #define malloc VAXC$MALLOC_OPT #define calloc VAXC$CALLOC_OPT #define free VAXC$FREE_OPT #define cfree VAXC$CFREE_OPT #define realloc VAXC$REALLOC_OPT #endif /* VAXC but not DECC */ #define unlink remove #define gmtime localtime #include <stat.h> #define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) #define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) #define putenv HTVMS_putenv #endif
#define PUBLIC /* Accessible outside this module */ #define PRIVATE static /* Accessible only within this module */ #ifdef _STANDARD_CODE_ #if defined(sco) && !defined(_SCO_DS) #define CONST /* The pre SCO 5.0 CC compiler does not know const */ #else #define CONST const /* "const" only exists in STDC */ #endif #else #define CONST #endif /* _STANDARD_CODE_ (ANSI) */
#ifdef _STANDARD_CODE_ #include <stdarg.h> #else #include <varargs.h> #endif
#ifndef BOOLEAN_DEFINED typedef char BOOLEAN; /* Logical value */ #endif #ifndef CURSES #ifndef TRUE #define TRUE (BOOLEAN)1 #define FALSE (BOOLEAN)0 #endif #endif /* CURSES */ #ifndef BOOL #define BOOL BOOLEAN #endif #ifndef YES #define YES (BOOL)1 #define NO (BOOL)0 #endif
#ifndef NULL #define NULL ((void *)0) #endif
#ifndef HTMIN #define HTMIN(a,b) ((a) <= (b) ? (a) : (b)) #define HTMAX(a,b) ((a) >= (b) ? (a) : (b)) #endif
#ifndef HTDABS #define HTDABS(a) ((a) < 0.0 ? (-(a)) : (a)) #endif
#define HT_OK 0 /* Generic success */ #define HT_ALL 1 /* Used by Net Manager */ #define HT_CLOSED 29992 /* The socket was closed */ #define HT_PERSISTENT 29993 /* Wait for persistent connection */ #define HT_IGNORE 29994 /* Ignore this in the Net manager */ #define HT_NO_DATA 29995 /* OK but no data was loaded */ #define HT_RELOAD 29996 /* If we must reload the document */ #define HT_PERM_REDIRECT 29997 /* Redo the retrieve with a new URL */ #define HT_TEMP_REDIRECT 29998 /* Redo the retrieve with a new URL */ #define HT_LOADED 29999 /* Instead of a socket */ #define HT_ERROR -1 /* Generic failure */ #define HT_NO_ACCESS -10 /* Access not available */ #define HT_FORBIDDEN -11 /* Access forbidden */ #define HT_RETRY -13 /* If service isn't available */ #define HT_INTERNAL -100 /* Weird -- should never happen. */ #define HT_WOULD_BLOCK -29997 /* If we are in a select */ #define HT_INTERRUPTED -29998 /* Note the negative value! */ #define HT_PAUSE -29999 /* If we want to pause a stream */
#include <ctype.h> #ifndef TOLOWER #define TOLOWER(c) tolower(c) #define TOUPPER(c) toupper(c) #endif
#ifdef FLT_EPSILON /* The ANSI C way define */ #define HT_EPSILON FLT_EPSILON #else #define HT_EPSILON 0.00000001 #endif
#define WHITE(c) isspace(c)
#define LF FROMASCII('\012') /* ASCII line feed LOCAL EQUIVALENT */ #define CR FROMASCII('\015') /* Will be converted to ^M for transmission */
#include "HTMemory.h"
#endif /* HT_UTILS.h */End of utility declarations