This is aux.h in view mode; [Download] [Up]
/* * some useful definitions for memory allocation and string * handling */ #ifndef AUX_INCLUDED #define AUX_INCLUDED #define DOUBLEREAL 1 #ifdef DOUBLEREAL typedef double real; #else typedef float real; #endif #define pi 3.141592654 #define qval 1.602e-19 #define sqrt0_75 0.866025403784 #define sqrt3_0 1.732050807569 #define efac (real)332.0636 #define undef (real)9999.99 typedef unsigned short Index; #define noIndex (Index)65535 typedef unsigned char bool; #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <strings.h> #include <ctype.h> #include <math.h> #ifdef SUN #include <unistd.h> #endif #ifdef IRIS #include <bstring.h> #include <malloc.h> #include <limits.h> #endif /* #ifdef HP #include <string.h> #endif */ #ifdef IRIS extern void *malloc(size_t); extern void *realloc(void *, size_t); extern void free(void *p); #define usleep(t) sginap((long)(((t)*CLK_TCK)/1000)) #endif #ifdef NEXT #include <libc.h> #define HZ 60 #endif #include <math.h> #ifndef MODNAME #define MODNAME "unknown" #endif #ifndef NOANSI #define assert(expr) if (!(expr)) error("%s: Assertion failed: "#expr".", MODNAME) #else #define assert(expr) if (!(expr)) error("%s: Assertion failed: expr.", MODNAME) #endif #define arr_debug(arr) { \ debug(#arr": p=%x, len=%d, max=%d.\n",(arr).p, (arr).len, (arr).max); } #define DEB_NONE 0 #define DEB_CPU 1 #define DEB_REAL 2 #define DEB_MEM 3 #define DEB_ALL 4 #define debug pdebug #define ndebug npdebug extern char *deb_pref; extern int deb_mode; extern void deb_print(char *s); #define DEB_EXIT 0 #define DEB_CORE 1 extern int deb_crash; #if PARIX #define bcopy(b1, b2, len) { register char *b_p1, *b_p2, *b_l; \ for(b_p1=(char *)(b1), b_l=b_p1+len, b_p2=(char *)(b2); b_p1<b_l;) \ *(b_p2++)=*(b_p1++); } #define bzero(b1, len) { register char *b_p1, *b_l; \ for(b_p1=(char *)(b1), b_l=b_p1+len; b_p1<b_l;) \ *(b_p1++)='\0'; } extern char *rindex(char *s, char c); #else #ifdef SUN extern void vprintf(); extern void vsprintf(); extern void bcopy(); extern void bzero(); extern int _filbuf(); /* God knows why these are not in /usr/include or /usr/5include */ #endif #endif #define flags_set(flags, mask) flags |= (mask) #define flags_clear(flags, mask) flags &= ~(mask) #define flags_off(flags, mask) (!(flags&(mask))) #define flags_on(flags, mask) ((flags&(mask))==(mask)) #define max(a, b) ((a) > (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b)) #define memory(str) if (memory_flag) { \ mddebug("Memory used in %s, %s: %d.\n", MODNAME, str, memsize()); } #define arr_min 4 #define arr_inc 4 #define array(typ) struct { typ *p; int len, max; } #define sarray(typ) struct { typ *p; short unsigned len, max; } #define arr_init(arr) { (arr).p=0; (arr).max=0; (arr).len=0; } #define arr_empty(arr) { (arr).len=0; } #ifndef NOANSI #define arr_debug(arr) { \ debug(#arr": p=%x, len=%d, max=%d.\n",(arr).p, (arr).len, (arr).max); } #define arr_printf(arr) #arr"[%d/%d](%x)",(arr).len,(arr).max,(arr).p #define arr_alloc(arr, ind) { register int a_n=ind+1; \ if (!(arr).p) (arr).p = (void *)malloc(a_n*sizeof(*(arr).p)); \ else if (a_n!=(arr).max) (arr).p = (void *)realloc((arr).p, a_n*sizeof(*(arr).p)); \ if (!(arr).p) { perror("array"); error("Could not allocate "#arr" at "#ind"=%d.\n", (ind)); } \ mem_size+=(a_n-(arr).max)*sizeof(*(arr).p); \ /* for (a_n=(arr).max; a_n<=ind; a_n++) (arr).p[a_n]=0; */ (arr).max=(ind)+1; } #define arr_dim(arr, siz) { register int a_i=(siz); \ if ((!(arr).p && (arr).max) || ((arr).p && !(arr).max)) \ error("Illegal array "#arr": p=%x, max=%d, len=%d.\n", (arr).p, (arr).max, (arr).len); \ if (!a_i) arr_empty(arr) else {if ((a_i--)>(arr).max) arr_alloc(arr, a_i) (arr).len=a_i+1; }} #define arr_check(arr, ind) { register int a_i, a_ind=(ind); \ if ((!(arr).p && (arr).max) || ((arr).p && !(arr).max)) \ error("Illegal array "#arr": p=%x, max=%d, len=%d.\n", (arr).p, (arr).max, (arr).len); \ if (a_ind>=(arr).max) { \ for (a_i=(arr).max; a_ind>=a_i; a_i+=(a_i/arr_inc+1)); \ arr_alloc(arr, a_i); }} #else #define arr_debug(arr) { \ debug("arr: p=%x, len=%d, max=%d.\n",(arr).p, (arr).len, (arr).max); } #define arr_printf(arr) "arr[%d/%d](%x)",(arr).len,(arr).max,(arr).p #define arr_alloc(arr, ind) { register int a_n=ind+1; \ if (!(arr).p) (arr).p = (void *)malloc(a_n*sizeof(*(arr).p)); \ else if (a_n!=(arr).max) (arr).p = (void *)realloc((arr).p, a_n*sizeof(*(arr).p)); \ if (!(arr).p) { perror("array"); error("Could not allocate arr at ind=%d.\n", ind); } \ mem_size+=(a_n-(arr).max)*sizeof(*(arr).p); \ /* for (a_n=(arr).max; a_n<=ind; a_n++) (arr).p[a_n]=0; */ (arr).max=(ind)+1; } #define arr_dim(arr, siz) { register int a_i=(siz); \ if ((!(arr).p && (arr).max) || ((arr).p && !(arr).max)) \ error("Illegal array arr: p=%x, max=%d, len=%d.\n", (arr).p, (arr).max, (arr).len); \ if (!a_i) arr_empty(arr) else {if ((a_i--)>(arr).max) arr_alloc(arr, a_i) (arr).len=a_i+1; }} #define arr_check(arr, ind) { register int a_i, a_ind=(ind); \ if ((!(arr).p && (arr).max) || ((arr).p && !(arr).max)) \ error("Illegal array arr: p=%x, max=%d, len=%d.\n", (arr).p, (arr).max, (arr).len); \ if (a_ind>=(arr).max) { \ for (a_i=(arr).max; a_ind>=a_i; a_i+=(a_i/arr_inc+1)); \ arr_alloc(arr, a_i); }} #endif #define arr_copy(arr1, arr2) { \ arr_init(arr1); \ arr_dim(arr1, (arr2).len); \ bcopy((char *)(arr2).p, (char *)(arr1).p, sizeof(*(arr2).p)*(arr2).len); } #define arr_add(arr, elem) { arr_check(arr, (arr).len); (arr).p[(arr).len++]=(elem); } #define arr_add2(arr, arr2, elem) { arr_check(arr2, (arr).len-1); \ (arr2).p[(arr).len-1]=(elem); (arr2).len=(arr).len; } #define arr_free(arr) { \ if ((arr).p) { free((arr).p); mem_size-=(arr).max*sizeof(*(arr).p); } \ (arr).p=0; (arr).max=0; (arr).len=0; } #define arr_lfree(arr) { int a_i; \ for (a_i=0; a_i<(arr).len; a_i++) cfree((arr).p[a_i]); \ if ((arr).p) { free((arr).p); mem_size-=(arr).max*sizeof(*(arr).p)); } \ (arr).p=0; (arr).max=0; (arr).len=0; } #define blank(chr) ((chr)==' ' || (chr)=='\t' || (chr)=='\n') extern int mem_size; #ifndef NOANSI #define m_alloc(ptr,num,typ) { int a_n=(num); \ if (a_n) ptr = (typ *)malloc(a_n*sizeof(typ)); else ptr=NULL; \ mem_size+=a_n*sizeof(typ); if (ptr==NULL && a_n) \ error("Could not allocate ("#typ")"#ptr"["#num"=%d]", a_n); \ } #define mfree(ptr, num, typ) { typ *a_p=NULL; int a_n=(num); \ if (ptr==a_p && a_n) error("Cannot free ("#typ")"#ptr"["#num"=%d]", a_n); \ if (a_n) free(ptr); ptr=NULL; mem_size-=a_n*sizeof(typ); \ } #define mfree_o(ptr, ofs, num, typ) { typ *a_p=NULL; int a_n=(num); \ if (ptr==a_p && a_n) error("Cannot free ("#typ")"#ptr"["#num"=%d]", a_n); \ if (a_n) free(ptr+(ofs)); ptr=NULL; mem_size-=a_n*sizeof(typ); \ } #define mext(ptr, num, num2, typ) { typ *a_p=NULL; int a_n1=(num), a_n2=(num2); \ if (ptr==a_p && a_n1) \ error("Cannot extend NULL ("#typ")"#ptr"["#num"=%d, "#num2"=%d]", a_n1, a_n2); \ if (a_n1 && a_n2) ptr = (typ *)realloc((char*)ptr, a_n2*sizeof(typ)); \ else if (a_n2) ptr = (typ *)malloc(a_n2*sizeof(typ)); else { free(ptr); ptr=NULL; } \ if (ptr==NULL && a_n2) \ error("Could not extend ("#typ")"#ptr"["#num"=%d, "#num2"=%d]", a_n1, a_n2); \ mem_size+=(a_n2-a_n1)*sizeof(typ); \ } #else #define m_alloc(ptr, num, typ) { int a_n=(num); \ if (a_n) ptr = (typ *)malloc(a_n*sizeof(typ)); else ptr=NULL; \ mem_size+=a_n*sizeof(typ); if (ptr==NULL && a_n) \ error("Could not allocate (typ)ptr[num=%d]", a_n); \ } #define mfree(ptr, num, typ) { typ *a_p=NULL; int a_n=(num); \ if (ptr==a_p && a_n) error("Cannot free (typ)ptr[num=%d]", a_n); \ if (a_n) free(ptr); ptr=NULL; mem_size-=a_n*sizeof(typ); \ } #define mfree_o(ptr, ofs, num, typ) { typ *a_p=NULL; int a_n=(num); \ if (ptr==a_p && a_n) error("Cannot free (typ)ptr[num=%d]", a_n); \ if (a_n) free(ptr+(ofs)); ptr=NULL; mem_size-=a_n*sizeof(typ); \ } #define mext(ptr, num, num2, typ) { typ *a_p=NULL; int a_n1=(num), a_n2=(num2); \ if (ptr==a_p && a_n1) \ error("Cannot extend NULL (typ)ptr[num=%d, num2=%d]", a_n1, a_n2); \ if (a_n1 && a_n2) ptr = (typ *)realloc((char*)ptr, a_n2*sizeof(typ)); \ else if (a_n2) ptr = (typ *)malloc(a_n2*sizeof(typ)); else { free(ptr); ptr=NULL; } \ if (ptr==NULL && a_n2) \ error("Could not extend (typ)ptr[num=%d, num2=%d]", a_n1, a_n2); \ mem_size+=(a_n2-a_n1)*sizeof(typ); \ } #endif #define m_allocz(ptr,num,typ) { int z_n=(num); \ m_alloc(ptr, z_n, typ); \ bzero((char *)ptr, (z_n)*sizeof(typ)); } #define mat_alloc(ptr, nx, ny, typ) { int m_i, m_x=(nx), m_y=(ny); typ **m_p; \ m_alloc(m_p, m_x, typ *); m_alloc(m_p[0], m_x*m_y, typ); \ for (m_i=1; m_i<m_x; m_i++) m_p[m_i] = m_p[m_i-1] + m_y; \ ptr = m_p;} #define mat_ext(ptr, nxo, nyo, nx, ny, typ) { \ int m_i, m_x=(nx), m_y=(ny), m_xo=(nxo), m_yo=(nyo); typ **m_p=(ptr); \ mext(m_p, m_xo, m_x, typ *); mext(m_p[0], m_xo*m_yo, m_x*m_y, typ); \ for (m_i=1; m_i<m_x; m_i++) m_p[m_i] = m_p[m_i-1] + m_y; \ ptr = m_p;} #define mat_free(ptr, nx, ny, typ) { int m_x=(nx), m_y=(ny); \ mfree((ptr)[0], m_x*m_y, typ); mfree(ptr, m_x, typ *); } #define aux_bufsiz 4098 extern char aux_buf[], aux_buf2[], *aux_bufp; #define aux_bufstring(p) { unsigned l; \ p = aux_bufp; aux_bufp += (l=strlen(aux_buf))+1; \ if (aux_bufp>= aux_buf2+aux_bufsiz || aux_bufp < aux_buf2) \ { p=aux_buf2; aux_bufp=p+l+1; } \ strcpy(p, aux_buf); } #define aux_bufnstring(p, n) { unsigned l=(n); \ p = aux_bufp; aux_bufp += l; \ if (aux_bufp>= aux_buf2+aux_bufsiz || aux_bufp < aux_buf2) \ { p=aux_buf2; aux_bufp=p+l; } \ bcopy(aux_buf, p, l); } #define aux_sprintf(p, format) { va_list ap; \ va_start(ap, format); \ vsprintf(aux_buf, format, ap); \ va_end(ap); \ aux_bufstring(p); } #define check(ptr,num,defnum,typ) \ ptr = (typ *)checkalloc((char *)ptr,(num)*sizeof(typ),(defnum)*sizeof(typ)) #define newstring(ptr,defnum) { ptr=NULL; check(ptr,1,defnum,char); ptr[0]='\0'; } #define cfree(ptr) if (ptr!=NULL) { free(ptr); ptr=NULL; } #define lfree(ptr) { int i; if (ptr!=NULL) for(i=0;ptr[i]!=NULL;i++) cfree(ptr[i]); } #define nfree(ptr,n) { int i; if (ptr!=NULL) for(i=0;i<n;i++) cfree(ptr[i]); } #define ncopy(ptr,len,typ) (typ *)copydata((char *)ptr,(len)*sizeof(typ)) extern int debug_flag; extern int memory_flag; extern real realtime(); extern real cputime(); extern void warning(char *format, ...); extern void error(char *format, ...); extern void pdebug(char *format, ...); extern void npdebug(char *format, ...); extern int memsize(); extern char *checkalloc(); /* (char *p,int len,int deflen); */ extern char *copy(); /* (const char *str); */ extern char *stringf(char *format, ...); extern char *substr(const char *str, int ofs, int len); extern char *copydata(); /* (const char *str,int len); */ extern char *append(); /* (char *s1,const char *s2); */ extern FILE *ropen(); /* (const char *fn); */ extern FILE *wopen(); /* (const char *fn); */ extern void time_init(void); extern void time_start(char *s); extern void time_seq(char *s); extern void time_stop(char *s); extern void time_reset(char *str); extern real time_val(char *str); extern real time_lap(char *str); extern char *time_string_lap(char *str); extern void time_print(void); extern real ran_real(void); extern char *s_lst(int* p, int len); #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.