#define fatal(msg) fatal3(msg, /*"*/__FI ## LE__/*"*/, /*"*/__LI ## NE__/*"*/) #define new(p) if (((p)=malloc(sizeof(*(p))))); else fatal3("out of memory", /*"*/__FI ## LE__/*"*/, /*"*/__LI ## NE__/*"*/) #define dispose(p) if (!(p)) ; else (free(p), (p) = (void*)0) #define heapmax(p) 9999999 #define newstring(s) heap_newstring(s, -1, /*"*/__FI ## LE__/*"*/, /*"*/__LI ## NE__/*"*/) #define newnstring(s,n) heap_newstring(s, n, /*"*/__FI ## LE__/*"*/, /*"*/__LI ## NE__/*"*/) #define newarray(p,n) if (((p)=malloc((n)*sizeof(*(p))))); else fatal3("out of memory", /*"*/__FI ## LE__/*"*/, /*"*/__LI ## NE__/*"*/) #define renewarray(p,n) if (((p)=realloc(p,(n)*sizeof(*(p))))); else fatal3("out of memory", /*"*/__FI ## LE__/*"*/, /*"*/__LI ## NE__/*"*/) void fatal3(const char *s, const char *file, const int line); char * heap_newstring(const char *s, int n, const char *file, int line);