|
|
1.1 ! root 1: /* gen_defs.h */ ! 2: ! 3: /* General(ly useful) constant, macro, and type definitions */ ! 4: ! 5: /* $Id: gen_defs.h,v 1.27 2004/11/19 03:41:07 rswindell Exp $ */ ! 6: ! 7: /**************************************************************************** ! 8: * @format.tab-size 4 (Plain Text/Source Code File Header) * ! 9: * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * ! 10: * * ! 11: * Copyright 2004 Rob Swindell - http://www.synchro.net/copyright.html * ! 12: * * ! 13: * This library is free software; you can redistribute it and/or * ! 14: * modify it under the terms of the GNU Lesser General Public License * ! 15: * as published by the Free Software Foundation; either version 2 * ! 16: * of the License, or (at your option) any later version. * ! 17: * See the GNU Lesser General Public License for more details: lgpl.txt or * ! 18: * http://www.fsf.org/copyleft/lesser.html * ! 19: * * ! 20: * Anonymous FTP access to the most recent released source is available at * ! 21: * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net * ! 22: * * ! 23: * Anonymous CVS access to the development source and modification history * ! 24: * is available at cvs.synchro.net:/cvsroot/sbbs, example: * ! 25: * cvs -d :pserver:[email protected]:/cvsroot/sbbs login * ! 26: * (just hit return, no password is necessary) * ! 27: * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src * ! 28: * * ! 29: * For Synchronet coding style and modification guidelines, see * ! 30: * http://www.synchro.net/source.html * ! 31: * * ! 32: * You are encouraged to submit any modifications (preferably in Unix diff * ! 33: * format) via e-mail to [email protected] * ! 34: * * ! 35: * Note: If this box doesn't appear square, then you need to fix your tabs. * ! 36: ****************************************************************************/ ! 37: ! 38: #ifndef _GEN_DEFS_H ! 39: #define _GEN_DEFS_H ! 40: ! 41: #include <errno.h> ! 42: ! 43: /* Resolve multi-named errno constants */ ! 44: #if defined(EDEADLK) && !defined(EDEADLOCK) ! 45: #define EDEADLOCK EDEADLK ! 46: #endif ! 47: ! 48: #if defined(_WIN32) ! 49: #define WIN32_LEAN_AND_MEAN /* Don't bring in excess baggage */ ! 50: #include <windows.h> ! 51: #elif defined(__OS2__) ! 52: #define INCL_BASE /* need this for DosSleep prototype */ ! 53: #include <os2.h> ! 54: #else ! 55: #if (defined(__APPLE__) && defined(__MACH__) && defined(__POWERPC__)) || defined (__NetBSD__) ! 56: #ifndef __unix__ ! 57: #define __unix__ ! 58: #endif ! 59: #endif ! 60: #endif ! 61: ! 62: ! 63: #include <sys/types.h> ! 64: ! 65: /* Control characters */ ! 66: #define STX 0x02 /* Start of text ^B */ ! 67: #define ETX 0x03 /* End of text ^C */ ! 68: #define BEL 0x07 /* Bell/beep ^G */ ! 69: #define FF 0x0c /* Form feed ^L */ ! 70: #define ESC 0x1b /* Escape ^[ */ ! 71: #define DEL 0x7f /* Delete ^BS */ ! 72: #define BS '\b' /* Back space ^H */ ! 73: #define TAB '\t' /* Horizontal tabulation ^I */ ! 74: #define LF '\n' /* Line feed ^J */ ! 75: #define CR '\r' /* Carriage return ^M */ ! 76: ! 77: enum { ! 78: CTRL_A=1 ! 79: ,CTRL_B ! 80: ,CTRL_C ! 81: ,CTRL_D ! 82: ,CTRL_E ! 83: ,CTRL_F ! 84: ,CTRL_G ! 85: ,CTRL_H ! 86: ,CTRL_I ! 87: ,CTRL_J ! 88: ,CTRL_K ! 89: ,CTRL_L ! 90: ,CTRL_M ! 91: ,CTRL_N ! 92: ,CTRL_O ! 93: ,CTRL_P ! 94: ,CTRL_Q ! 95: ,CTRL_R ! 96: ,CTRL_S ! 97: ,CTRL_T ! 98: ,CTRL_U ! 99: ,CTRL_V ! 100: ,CTRL_W ! 101: ,CTRL_X ! 102: ,CTRL_Y ! 103: ,CTRL_Z ! 104: }; ! 105: ! 106: /* Unsigned type short-hands */ ! 107: #ifndef uchar ! 108: #define uchar unsigned char ! 109: #endif ! 110: #ifndef __GLIBC__ ! 111: #ifndef ushort ! 112: #define ushort unsigned short ! 113: #define uint unsigned int ! 114: #define ulong unsigned long ! 115: #endif ! 116: #endif ! 117: ! 118: /* Windows Types */ ! 119: #ifndef BYTE ! 120: #define BYTE uchar ! 121: #endif ! 122: #ifndef WORD ! 123: #define WORD ushort ! 124: #endif ! 125: #ifndef DWORD ! 126: #define DWORD ulong ! 127: #endif ! 128: #ifndef BOOL ! 129: #define BOOL int ! 130: #endif ! 131: #ifndef TRUE ! 132: #define TRUE 1 ! 133: #define FALSE 0 ! 134: #endif ! 135: #ifndef INT_TO_BOOL ! 136: #define INT_TO_BOOL(x) ((x)?TRUE:FALSE) ! 137: #endif ! 138: #ifndef HANDLE ! 139: #define HANDLE void* ! 140: #endif ! 141: ! 142: /* Custom Types */ ! 143: typedef struct { ! 144: char* name; ! 145: char* value; ! 146: } named_string_t; ! 147: ! 148: typedef struct { ! 149: char* name; ! 150: int value; ! 151: } named_int_t; ! 152: ! 153: typedef struct { ! 154: char* name; ! 155: uint value; ! 156: } named_uint_t; ! 157: ! 158: typedef struct { ! 159: char* name; ! 160: long value; ! 161: } named_long_t; ! 162: ! 163: typedef struct { ! 164: char* name; ! 165: ulong value; ! 166: } named_ulong_t; ! 167: ! 168: typedef struct { ! 169: char* name; ! 170: short value; ! 171: } named_short_t; ! 172: ! 173: typedef struct { ! 174: char* name; ! 175: ushort value; ! 176: } named_ushort_t; ! 177: ! 178: typedef struct { ! 179: char* name; ! 180: BOOL value; ! 181: } named_bool_t; ! 182: ! 183: /************************/ ! 184: /* Handy Integer Macros */ ! 185: /************************/ ! 186: ! 187: /* Data Block Length Alignment Macro (returns required padding length for proper alignment) */ ! 188: #define PAD_LENGTH_FOR_ALIGNMENT(len,blk) (((len)%(blk))==0 ? 0 : (blk)-((len)%(blk))) ! 189: ! 190: /***********************/ ! 191: /* Handy String Macros */ ! 192: /***********************/ ! 193: ! 194: /* This is a bound-safe version of strcpy basically - only works with fixed-length arrays */ ! 195: #define SAFECOPY(dst,src) sprintf(dst,"%.*s",(int)sizeof(dst)-1,src) ! 196: #define TERMINATE(str) str[sizeof(str)-1]=0 ! 197: #define SAFEPRINTF(dst,fmt,arg) snprintf(dst,sizeof(dst),fmt,arg), TERMINATE(dst) ! 198: #define SAFEPRINTF2(dst,fmt,a1,a2) snprintf(dst,sizeof(dst),fmt,a1,a2), TERMINATE(dst) ! 199: #define SAFEPRINTF3(dst,fmt,a1,a2,a3) snprintf(dst,sizeof(dst),fmt,a1,a2,a3), TERMINATE(dst) ! 200: #define SAFEPRINTF4(dst,fmt,a1,a2,a3,a4) snprintf(dst,sizeof(dst),fmt,a1,a2,a3,a4), TERMINATE(dst) ! 201: ! 202: /* Replace every occurance of c1 in str with c2, using p as a temporary char pointer */ ! 203: #define REPLACE_CHARS(str,c1,c2,p) for((p)=(str);*(p);(p)++) if(*(p)==(c1)) *(p)=(c2); ! 204: ! 205: /* ASCIIZ char* parsing helper macros */ ! 206: #define SKIP_WHITESPACE(p) while(*(p) && isspace(*(p))) (p)++; ! 207: #define FIND_WHITESPACE(p) while(*(p) && !isspace(*(p))) (p)++; ! 208: #define SKIP_CHAR(p,c) while(*(p)==c) (p)++; ! 209: #define FIND_CHAR(p,c) while(*(p) && *(p)!=c) (p)++; ! 210: #define SKIP_CHARSET(p,s) while(*(p) && strchr(s,*(p))!=NULL) (p)++; ! 211: #define FIND_CHARSET(p,s) while(*(p) && strchr(s,*(p))==NULL) (p)++; ! 212: #define SKIP_ALPHA(p) while(*(p) && isalpha(*(p))) (p)++; ! 213: #define FIND_ALPHA(p) while(*(p) && !isalpha(*(p))) (p)++; ! 214: #define SKIP_ALPHANUMERIC(p) while(*(p) && isalnum(*(p))) (p)++; ! 215: #define FIND_ALPHANUMERIC(p) while(*(p) && !isalnum(*(p))) (p)++; ! 216: #define SKIP_DIGIT(p) while(*(p) && isdigit(*(p))) (p)++; ! 217: #define FIND_DIGIT(p) while(*(p) && !isdigit(*(p))) (p)++; ! 218: #define SKIP_HEXDIGIT(p) while(*(p) && isxdigit(*(p))) (p)++; ! 219: #define FIND_HEXDIGIT(p) while(*(p) && !isxdigit(*(p))) (p)++; ! 220: ! 221: /* Variable/buffer initialization (with zeros) */ ! 222: #define ZERO_VAR(var) memset(&(var),0,sizeof(var)) ! 223: #define ZERO_ARRAY(array) memset(array,0,sizeof(array)) ! 224: ! 225: /****************************************************************************/ ! 226: /* MALLOC/FREE Macros for various compilers and environments */ ! 227: /* MALLOC is used for allocations of 64k or less */ ! 228: /* FREE is used to free buffers allocated with MALLOC */ ! 229: /* LMALLOC is used for allocations of possibly larger than 64k */ ! 230: /* LFREE is used to free buffers allocated with LMALLOC */ ! 231: /* REALLOC is used to re-size a previously MALLOCed or LMALLOCed buffer */ ! 232: /* FAR16 is used to create a far (32-bit) pointer in 16-bit compilers */ ! 233: /* HUGE16 is used to create a huge (32-bit) pointer in 16-bit compilers */ ! 234: /****************************************************************************/ ! 235: #if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__) ! 236: #define HUGE16 huge ! 237: #define FAR16 far ! 238: #if defined(__TURBOC__) ! 239: #define REALLOC(x,y) farrealloc(x,y) ! 240: #define LMALLOC(x) farmalloc(x) ! 241: #define MALLOC(x) farmalloc(x) ! 242: #define LFREE(x) farfree(x) ! 243: #define FREE(x) farfree(x) ! 244: #elif defined(__WATCOMC__) ! 245: #define REALLOC realloc ! 246: #define LMALLOC(x) halloc(x,1) /* far heap, but slow */ ! 247: #define MALLOC malloc /* far heap, but 64k max */ ! 248: #define LFREE hfree ! 249: #define FREE free ! 250: #else /* Other 16-bit Compiler */ ! 251: #define REALLOC realloc ! 252: #define LMALLOC malloc ! 253: #define MALLOC malloc ! 254: #define LFREE free ! 255: #define FREE free ! 256: #endif ! 257: #else /* 32-bit Compiler or Small Memory Model */ ! 258: #define HUGE16 ! 259: #define FAR16 ! 260: #define REALLOC realloc ! 261: #define LMALLOC malloc ! 262: #define MALLOC malloc ! 263: #define LFREE free ! 264: #define FREE free ! 265: #endif ! 266: ! 267: /********************************/ ! 268: /* Handy Pointer-freeing Macros */ ! 269: /********************************/ ! 270: #define FREE_AND_NULL(x) if(x!=NULL) { FREE(x); x=NULL; } ! 271: #define FREE_LIST_ITEMS(list,i) if(list!=NULL) { \ ! 272: for(i=0;list[i]!=NULL;i++) \ ! 273: FREE_AND_NULL(list[i]); \ ! 274: } ! 275: #define FREE_LIST(list,i) FREE_LIST_ITEMS(list,i) FREE_AND_NULL(list) ! 276: ! 277: /********************************/ ! 278: /* Other Pointer-List Macros */ ! 279: /********************************/ ! 280: #define COUNT_LIST_ITEMS(list,i) { i=0; if(list!=NULL) while(list[i]!=NULL) i++; } ! 281: ! 282: #if defined(__unix__) ! 283: #include <syslog.h> ! 284: #else ! 285: /* ! 286: * log priorities (copied from BSD syslog.h) ! 287: */ ! 288: #define LOG_EMERG 0 /* system is unusable */ ! 289: #define LOG_ALERT 1 /* action must be taken immediately */ ! 290: #define LOG_CRIT 2 /* critical conditions */ ! 291: #define LOG_ERR 3 /* error conditions */ ! 292: #define LOG_WARNING 4 /* warning conditions */ ! 293: #define LOG_NOTICE 5 /* normal but significant condition */ ! 294: #define LOG_INFO 6 /* informational */ ! 295: #define LOG_DEBUG 7 /* debug-level messages */ ! 296: #endif ! 297: ! 298: ! 299: #endif /* Don't add anything after this #endif statement */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.