1 /*================================================================
2  * utility routines
3  *================================================================*/
4 
5 #ifndef UTIL_H_DEF
6 #define UTIL_H_DEF
7 
8 #ifndef TRUE
9 #define TRUE  1
10 #endif
11 #ifndef FALSE
12 #define FALSE 0
13 #endif
14 
15 #define numberof(ary)	(sizeof(ary)/sizeof(ary[0]))
16 #ifndef offsetof
17 #define offsetof(s_type,field) ((int)(((char*)(&(((s_type*)NULL)->field)))-((char*)NULL)))
18 #endif
19 
20 #define BITON(var,flag)	((var) |= (flag))
21 #define BITOFF(var,flag) ((var) &= ~(flag))
22 #define BITSWT(var,flag) ((var) ^= (flag))
23 
24 extern int verbose, debug;
25 #define DEBUG(LVL,XXX)	{if (verbose > LVL) { XXX; }}
26 
27 /* cmpopen.c */
28 int CmpSearchFile(char *name);
29 char *CmpExtension(int type);
30 FILE *CmpOpenFile(char *name, int *flag);
31 void CmpCloseFile(FILE *fp, int flag);
32 
33 /* malloc.c */
34 void *safe_malloc(int size);
35 void safe_free(void *ptr);
36 
37 /* signal.c */
38 void add_signal(int sig, void (*handler)(), int exit_after);
39 
40 /* fskip.c */
41 void fskip(int size, FILE *fd, int seekable);
42 
43 #endif
44