Annotation of sbbs/src/xpdev/gen_defs.h, revision 1.1

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.36 2006/05/28 22:01:57 deuce 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 2006 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: #ifndef STX
        !            67: #define STX    0x02                            /* Start of text                        ^B      */
        !            68: #endif
        !            69: #ifndef ETX
        !            70: #define ETX    0x03                            /* End of text                          ^C      */
        !            71: #endif
        !            72: #ifndef BEL
        !            73: #define BEL            0x07                            /* Bell/beep                            ^G      */
        !            74: #endif
        !            75: #ifndef FF
        !            76: #define FF             0x0c                            /* Form feed                            ^L      */
        !            77: #endif
        !            78: #ifndef ESC
        !            79: #define ESC    0x1b                            /* Escape                                       ^[      */
        !            80: #endif
        !            81: #ifndef DEL
        !            82: #define DEL            0x7f                            /* Delete                                       ^BS     */
        !            83: #endif
        !            84: #ifndef BS
        !            85: #define BS             '\b'                            /* Back space                           ^H      */
        !            86: #endif
        !            87: #ifndef TAB
        !            88: #define TAB    '\t'                            /* Horizontal tabulation        ^I      */
        !            89: #endif
        !            90: #ifndef LF
        !            91: #define LF             '\n'                            /* Line feed                            ^J      */
        !            92: #endif
        !            93: #ifndef CR
        !            94: #define CR             '\r'                            /* Carriage return                      ^M      */
        !            95: #endif
        !            96: 
        !            97: 
        !            98: enum {
        !            99:         CTRL_A=1
        !           100:        ,CTRL_B
        !           101:        ,CTRL_C
        !           102:        ,CTRL_D 
        !           103:        ,CTRL_E
        !           104:        ,CTRL_F
        !           105:        ,CTRL_G
        !           106:        ,CTRL_H
        !           107:        ,CTRL_I
        !           108:        ,CTRL_J
        !           109:        ,CTRL_K
        !           110:        ,CTRL_L
        !           111:        ,CTRL_M
        !           112:        ,CTRL_N
        !           113:        ,CTRL_O
        !           114:        ,CTRL_P
        !           115:        ,CTRL_Q
        !           116:        ,CTRL_R
        !           117:        ,CTRL_S
        !           118:        ,CTRL_T
        !           119:        ,CTRL_U
        !           120:        ,CTRL_V
        !           121:        ,CTRL_W
        !           122:        ,CTRL_X
        !           123:        ,CTRL_Y
        !           124:        ,CTRL_Z
        !           125: };
        !           126: 
        !           127: /* Unsigned type short-hands   */
        !           128: #ifndef uchar
        !           129:        #define uchar   unsigned char
        !           130: #endif
        !           131: #ifndef __GLIBC__
        !           132:        #ifndef ushort
        !           133:        #define ushort  unsigned short
        !           134:        #define uint    unsigned int
        !           135:        #define ulong   unsigned long
        !           136:        #endif
        !           137: #endif
        !           138: 
        !           139: /* Windows Types */
        !           140: #ifndef BYTE
        !           141: #define BYTE   uchar
        !           142: #endif
        !           143: #ifndef WORD
        !           144: #define WORD   ushort
        !           145: #endif
        !           146: #ifndef DWORD
        !           147: #define DWORD  ulong
        !           148: #endif
        !           149: #ifndef BOOL
        !           150: #define BOOL   int
        !           151: #endif
        !           152: #ifndef TRUE
        !           153: #define TRUE   1
        !           154: #define FALSE  0
        !           155: #endif
        !           156: #ifndef INT_TO_BOOL
        !           157: #define INT_TO_BOOL(x) ((x)?TRUE:FALSE)
        !           158: #endif
        !           159: #ifndef HANDLE
        !           160: #define HANDLE void*
        !           161: #endif
        !           162: 
        !           163: /* Custom Types */
        !           164: typedef struct {
        !           165:        char*   name;
        !           166:        char*   value;
        !           167: } named_string_t;
        !           168: 
        !           169: typedef struct {
        !           170:        char*   name;
        !           171:        int             value;
        !           172: } named_int_t;
        !           173: 
        !           174: typedef struct {
        !           175:        char*   name;
        !           176:        uint    value;
        !           177: } named_uint_t;
        !           178: 
        !           179: typedef struct {
        !           180:        char*   name;
        !           181:        long    value;
        !           182: } named_long_t;
        !           183: 
        !           184: typedef struct {
        !           185:        char*   name;
        !           186:        ulong   value;
        !           187: } named_ulong_t;
        !           188: 
        !           189: typedef struct {
        !           190:        char*   name;
        !           191:        short   value;
        !           192: } named_short_t;
        !           193: 
        !           194: typedef struct {
        !           195:        char*   name;
        !           196:        ushort  value;
        !           197: } named_ushort_t;
        !           198: 
        !           199: typedef struct {
        !           200:        char*   name;
        !           201:        float   value;
        !           202: } named_float_t;
        !           203: 
        !           204: typedef struct {
        !           205:        char*   name;
        !           206:        double  value;
        !           207: } named_double_t;
        !           208: 
        !           209: typedef struct {
        !           210:        char*   name;
        !           211:        BOOL    value;
        !           212: } named_bool_t;
        !           213: 
        !           214: typedef struct {
        !           215:        int             key;
        !           216:        char*   value;
        !           217: } keyed_string_t;
        !           218: 
        !           219: typedef struct {
        !           220:        int             key;
        !           221:        int             value;
        !           222: } keyed_int_t;
        !           223: 
        !           224: 
        !           225: /************************/
        !           226: /* Handy Integer Macros */
        !           227: /************************/
        !           228: 
        !           229: /* Data Block Length Alignment Macro (returns required padding length for proper alignment) */
        !           230: #define PAD_LENGTH_FOR_ALIGNMENT(len,blk)      (((len)%(blk))==0 ? 0 : (blk)-((len)%(blk)))
        !           231: 
        !           232: /***********************/
        !           233: /* Handy String Macros */
        !           234: /***********************/
        !           235: 
        !           236: /* Null-Terminate an ASCIIZ char array */
        !           237: #define TERMINATE(str)                                 str[sizeof(str)-1]=0
        !           238: 
        !           239: /* This is a bound-safe version of strcpy basically - only works with fixed-length arrays */
        !           240: #ifdef SAFECOPY_USES_SPRINTF
        !           241: #define SAFECOPY(dst,src)                              sprintf(dst,"%.*s",(int)sizeof(dst)-1,src)
        !           242: #else  /* strncpy is faster */
        !           243: #define SAFECOPY(dst,src)                              (strncpy(dst,src,sizeof(dst)), TERMINATE(dst))
        !           244: #endif
        !           245: 
        !           246: /* Bound-safe version of sprintf() - only works with fixed-length arrays */
        !           247: #if (defined __FreeBSD__) || (defined __NetBSD__) || (defined __OpenBSD__) || (defined(__APPLE__) && defined(__MACH__) && defined(__POWERPC__))
        !           248: /* *BSD *nprintf() is already safe */
        !           249: #define SAFEPRINTF(dst,fmt,arg)                        snprintf(dst,sizeof(dst),fmt,arg)
        !           250: #define SAFEPRINTF2(dst,fmt,a1,a2)             snprintf(dst,sizeof(dst),fmt,a1,a2)
        !           251: #define SAFEPRINTF3(dst,fmt,a1,a2,a3)  snprintf(dst,sizeof(dst),fmt,a1,a2,a3)
        !           252: #define SAFEPRINTF4(dst,fmt,a1,a2,a3,a4) snprintf(dst,sizeof(dst),fmt,a1,a2,a3,a4)
        !           253: #else
        !           254: #define SAFEPRINTF(dst,fmt,arg)                        snprintf(dst,sizeof(dst),fmt,arg), TERMINATE(dst)
        !           255: #define SAFEPRINTF2(dst,fmt,a1,a2)             snprintf(dst,sizeof(dst),fmt,a1,a2), TERMINATE(dst)
        !           256: #define SAFEPRINTF3(dst,fmt,a1,a2,a3)  snprintf(dst,sizeof(dst),fmt,a1,a2,a3), TERMINATE(dst)
        !           257: #define SAFEPRINTF4(dst,fmt,a1,a2,a3,a4) snprintf(dst,sizeof(dst),fmt,a1,a2,a3,a4), TERMINATE(dst)
        !           258: #endif
        !           259: 
        !           260: /* Replace every occurance of c1 in str with c2, using p as a temporary char pointer */
        !           261: #define REPLACE_CHARS(str,c1,c2,p)     for((p)=(str);*(p);(p)++) if(*(p)==(c1)) *(p)=(c2);
        !           262: 
        !           263: /* ASCIIZ char* parsing helper macros */
        !           264: #define SKIP_WHITESPACE(p)                     while(*(p) && isspace(*(p)))                    (p)++;
        !           265: #define FIND_WHITESPACE(p)                     while(*(p) && !isspace(*(p)))                   (p)++;
        !           266: #define SKIP_CHAR(p,c)                         while(*(p)==c)                                                  (p)++;
        !           267: #define FIND_CHAR(p,c)                         while(*(p) && *(p)!=c)                                  (p)++;
        !           268: #define SKIP_CHARSET(p,s)                      while(*(p) && strchr(s,*(p))!=NULL)             (p)++;
        !           269: #define FIND_CHARSET(p,s)                      while(*(p) && strchr(s,*(p))==NULL)             (p)++;
        !           270: #define SKIP_ALPHA(p)                          while(*(p) && isalpha(*(p)))                    (p)++;
        !           271: #define FIND_ALPHA(p)                          while(*(p) && !isalpha(*(p)))                   (p)++;
        !           272: #define SKIP_ALPHANUMERIC(p)           while(*(p) && isalnum(*(p)))                    (p)++;
        !           273: #define FIND_ALPHANUMERIC(p)           while(*(p) && !isalnum(*(p)))                   (p)++;
        !           274: #define SKIP_DIGIT(p)                          while(*(p) && isdigit(*(p)))                    (p)++;
        !           275: #define FIND_DIGIT(p)                          while(*(p) && !isdigit(*(p)))                   (p)++;
        !           276: #define SKIP_HEXDIGIT(p)                       while(*(p) && isxdigit(*(p)))                   (p)++;
        !           277: #define FIND_HEXDIGIT(p)                       while(*(p) && !isxdigit(*(p)))                  (p)++;
        !           278: 
        !           279: /* Variable/buffer initialization (with zeros) */
        !           280: #define ZERO_VAR(var)                          memset(&(var),0,sizeof(var))
        !           281: #define ZERO_ARRAY(array)                      memset(array,0,sizeof(array))
        !           282: 
        !           283: /****************************************************************************/
        !           284: /* MALLOC/FREE Macros for various compilers and environments                           */
        !           285: /* MALLOC is used for allocations of 64k or less                                                       */
        !           286: /* FREE is used to free buffers allocated with MALLOC                                          */
        !           287: /* LMALLOC is used for allocations of possibly larger than 64k                         */
        !           288: /* LFREE is used to free buffers allocated with LMALLOC                                        */
        !           289: /* REALLOC is used to re-size a previously MALLOCed or LMALLOCed buffer        */
        !           290: /* FAR16 is used to create a far (32-bit) pointer in 16-bit compilers          */
        !           291: /* HUGE16 is used to create a huge (32-bit) pointer in 16-bit compilers        */
        !           292: /****************************************************************************/
        !           293: #if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
        !           294:        #define HUGE16 huge
        !           295:        #define FAR16 far
        !           296:        #if defined(__TURBOC__)
        !           297:                #define REALLOC(x,y) farrealloc(x,y)
        !           298:                #define LMALLOC(x) farmalloc(x)
        !           299:                #define MALLOC(x) farmalloc(x)
        !           300:                #define LFREE(x) farfree(x)
        !           301:                #define FREE(x) farfree(x)
        !           302:        #elif defined(__WATCOMC__)
        !           303:                #define REALLOC realloc
        !           304:                #define LMALLOC(x) halloc(x,1)  /* far heap, but slow */
        !           305:                #define MALLOC malloc                   /* far heap, but 64k max */
        !           306:                #define LFREE hfree
        !           307:                #define FREE free
        !           308:        #else   /* Other 16-bit Compiler */
        !           309:                #define REALLOC realloc
        !           310:                #define LMALLOC malloc
        !           311:                #define MALLOC malloc
        !           312:                #define LFREE free
        !           313:                #define FREE free
        !           314:        #endif
        !           315: #else          /* 32-bit Compiler or Small Memory Model */
        !           316:        #define HUGE16
        !           317:        #define FAR16
        !           318:        #define REALLOC realloc
        !           319:        #define LMALLOC malloc
        !           320:        #define MALLOC malloc
        !           321:        #define LFREE free
        !           322:        #define FREE free
        !           323: #endif
        !           324: 
        !           325: /********************************/
        !           326: /* Handy Pointer-freeing Macros */
        !           327: /********************************/
        !           328: #define FREE_AND_NULL(x)                       if(x!=NULL) { FREE(x); x=NULL; }
        !           329: #define FREE_LIST_ITEMS(list,i)                if(list!=NULL) {                                \
        !           330:                                                                                for(i=0;list[i]!=NULL;i++)      \
        !           331:                                                                                        FREE_AND_NULL(list[i]); \
        !           332:                                                                        }
        !           333: #define FREE_LIST(list,i)                      FREE_LIST_ITEMS(list,i) FREE_AND_NULL(list)
        !           334: 
        !           335: /********************************/
        !           336: /* Other Pointer-List Macros   */
        !           337: /********************************/
        !           338: #define COUNT_LIST_ITEMS(list,i)       { i=0; if(list!=NULL) while(list[i]!=NULL) i++; }
        !           339: 
        !           340: #if defined(__unix__)
        !           341:        #include <syslog.h>
        !           342: #else
        !           343:        /*
        !           344:         * log priorities (copied from BSD syslog.h)
        !           345:         */
        !           346:        #define LOG_EMERG       0       /* system is unusable */
        !           347:        #define LOG_ALERT       1       /* action must be taken immediately */
        !           348:        #define LOG_CRIT        2       /* critical conditions */
        !           349:        #define LOG_ERR         3       /* error conditions */
        !           350:        #define LOG_WARNING     4       /* warning conditions */
        !           351:        #define LOG_NOTICE      5       /* normal but significant condition */
        !           352:        #define LOG_INFO        6       /* informational */
        !           353:        #define LOG_DEBUG       7       /* debug-level messages */
        !           354: #endif
        !           355: 
        !           356: /* Special hackery for SDL */
        !           357: #ifdef WITH_SDL
        !           358:        #include <SDL.h>
        !           359: 
        !           360:        #ifdef main
        !           361:                #undef main
        !           362:        #endif
        !           363:        #define main    XPDEV_main
        !           364: #endif
        !           365: 
        !           366: #endif /* Don't add anything after this #endif statement */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.