#ifndef _UTILS_H_ #define _UTILS_H_ /************************************************************************ * Structures * ************************************************************************/ /* int_table Interface */ typedef struct TABLE_ENTRY { long int key; long int value; struct TABLE_ENTRY *next; } table_entry; typedef struct { int len; table_entry **table; } int_table; /* For the Int-Set Package */ typedef struct { int current; /* Current element */ int len; /* # of elements in the array */ int maxlen; /* Length of array */ int *list; /* Pointer to the array */ } int_set; /************************************************************************ * Macros/Defines * ************************************************************************/ #define int_number(I, P) ((P)->list[I]) #define first_int(P) ((P)->len == 0 ? SET_END : ((P)->current = 1, *(P)->list)) #define next_int(P) ((P)->current < (P)->len ? \ (P)->list[(P)->current++] : SET_END) #define set_size(P) ((P)->len) #define is_empty(P) (set_size(P) == 0) #define NOT_IN_TABLE -65536L #define SET_END -65536 #define TABLE_END ((char *)(-1)) #define MAGIC_ZHEADER '\037' #define MAGIC_GZIP '\213' #define MAGIC_COMPRESS '\235' #define IS_GZIP 1 #define IS_COMPRESS 2 /************************************************************************ * Prototypes * ************************************************************************/ int cmp_player(const void *a, const void *b); int cmp_alpha(const void *a, const void *b); void init_rand(void); int randperc(void); Boolean match (char *p, char *q); Boolean infile(char *file, char *line); int strtlookup(char *elem, char **table, int *begin, int *end); int glookup(char *elem,int n,char **table, int (*strcmpfun)(const char *s1, const char *s2, size_t n)); int tlookup(char *elem,char **table); int xlookup(char *elem,char **table); char *lowercase(char *str); char *uppercase(char *str); void xfree(void *ptr); void *xmalloc(int nelem, int elem_size); void *resize_array(void *start, int elem_size, int oldlen, int newlen); int addordel(char file_name[80], char check[80]); int addname(char file_name[80], char name[80]); int delname(char file_name[80], char name[80]); int fnumlines(char file[200]); void fileseek(FILE *file, int lines); Boolean tstbits(int w, int m); Boolean tst_bit(LongInt *f,int b); void set_bit(LongInt *f,int b); void clr_bit(LongInt *f,int b); Boolean dtst_bit(DLongInt *f, int b); void dset_bit(DLongInt *f,int b); void dclr_bit(DLongInt *f,int b); void insertch(char *s, char ch, int i); char *my_crypt(char *buf,char *pw,int len); char *mk_string(char *b,char *str,int k,int stopch); char *x_strcpy(char *d, char *s); /* int_set interface */ void init_intset(int_set *p, int len); void free_intset(int_set *p); Boolean add_int(int n, int_set *p); Boolean remove_int(int n, int_set *p); int find_int(int n, int_set *p); int find_int_number(int n, int_set *p); int foreach_int(int_set *p, int (*func)(int)); void remove_current(int_set *p); int get_set_mem_usage(int_set *p); void init_inttable(int_table *p, int size); void free_inttable(int_table *p); Boolean insert_entry(long int key, long int value, int_table *p); Boolean remove_entry(long int key, int_table *p); long lookup_entry(long int key, int_table *p); long change_entry(long int key, long int new_value, int_table *p); int get_table_mem_usage(int_table *p); void write_date_stderr (void); int check_file_magic (char *filename); FILE *zopen (char *filename); void zclose (FILE *fp); #ifdef SYS_EQBUG int strcasecmp(char *s1, char *s2); int strncasecmp(const char *s1, const char *s2, size_t n); #endif #endif