#ifndef NULL #define NULL (void *)0 #endif #define LOWER(c) (((c)>='A' && (c) <= 'Z') ? ((c)+('a'-'A')) : (c)) #define UPPER(c) (((c)>='a' && (c) <= 'z') ? ((c)+('A'-'a')) : (c) ) /* strcasecmp -> stricmp -> str_cmp */ #ifdef LCCWIN32 int strcasecmp(const char *arg1, const char *arg2); int strncasecmp(const char *arg1, const char *arg2, int n); void str_upper(char *name); void str_lower(char *name); char *rindex(char *str, char c); #endif void dump(unsigned char *buffer, int num); #define CREATE(result, type, number) do {\ if ((number) * sizeof(type) <= 0) \ printf("SYSERR: Zero bytes or less requested at %s:%d.\n", __FILE__, __LINE__); \ if (!((result) = (type *) calloc ((number), sizeof(type)))) \ { perror("SYSERR: malloc failure"); abort(); } } while(0) #define RECREATE(result,type,number) do {\ if (!((result) = (type *) realloc ((result), sizeof(type) * (number))))\ { printf("SYSERR: realloc failure"); abort(); } } while(0) /* * ModuloRand and ModuloPlusRand. These macros are used to replace the * vast number of calls to rand()%mod which is low-order bits. These * instead use the high-order bits as suggested in the man page of rand(). * MRAND(10), returns 0-9. * MPRAND(5,10) returns 5-14. */ #define MRAND(mod) (int) ((float)mod * (rand() / (RAND_MAX + 1.0))) #define MPRAND(add, mod) add + MRAND(mod)