|
|
1.1 root 1: /* defs.h 1.1 83/08/13 */
2:
3: /*
4: * Public definitions, common to all.
5: */
6:
7: #include <stdio.h>
8:
9: #define new(type) ((type) malloc(sizeof(struct type)))
10: #define newarr(type, n) ((type *) malloc((unsigned) (n) * sizeof(type)))
11: #define dispose(ptr) { free((char *) ptr); ptr = 0; }
12:
13: #define public
14: #define private static
15:
16: #define ord(enumcon) ((unsigned int) enumcon)
17: #define nil 0
18: #define and &&
19: #define or ||
20: #define not !
21: #define div /
22: #define mod %
23: #define max(a, b) ((a) > (b) ? (a) : (b))
24: #define min(a, b) ((a) < (b) ? (a) : (b))
25:
26: #define assert(b) { \
27: if (not(b)) { \
28: panic("assertion failed at line %d in file %s", __LINE__, __FILE__); \
29: } \
30: }
31:
32: #define badcaseval(v) { \
33: panic("unexpected value %d at line %d in file %s", v, __LINE__, __FILE__); \
34: }
35:
36: #define checkref(p) { \
37: if (p == nil) { \
38: panic("reference through nil pointer at line %d in file %s", \
39: __LINE__, __FILE__); \
40: } \
41: }
42:
43: typedef int Integer;
44: typedef char Char;
45: typedef double Real;
46: typedef enum { false, true } Boolean;
47: typedef char *String;
48:
49: #define strdup(s) strcpy(malloc((unsigned) strlen(s) + 1), s)
50: #define streq(s1, s2) (strcmp(s1, s2) == 0)
51:
52: typedef FILE *File;
53: typedef int Fileid;
54: typedef String Filename;
55:
56: #define get(f, var) fread((char *) &(var), sizeof(var), 1, f)
57: #define put(f, var) fwrite((char *) &(var), sizeof(var), 1, f)
58:
59: #undef FILE
60:
61: extern long atol();
62: extern double atof();
63: extern char *malloc();
64: extern String strcpy(), index(), rindex();
65: extern int strlen();
66:
67: extern String cmdname;
68: extern String errfilename;
69: extern short errlineno;
70: extern int debug_flag[];
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.