ftp.nice.ch/pub/next/graphics/movie/Movie.3.0.NIHS.bs.tar.gz#/Movie3.0/Source/xanim/aux.h

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.