|
|
1.1 ! root 1: #define NONE -1 ! 2: #define MANY 128 ! 3: #define NPROG 32768 ! 4: ! 5: #define DEF_CH 3 /* default number of channels */ ! 6: ! 7: #define PICO 1 ! 8: #define DUMP 2 ! 9: #define RUNCODE 3 ! 10: ! 11: struct SRC { ! 12: int sx, sy, ex, ey; /* window into image */ ! 13: int ll, nl; /* length and nr of scanlines in file */ ! 14: int ox, oy; /* wander point, only used in 0 and 1 */ ! 15: unsigned char incore; /* 1: mem allocated, 2: pixels read */ ! 16: unsigned char nchan; /* #channels allocated in mem */ ! 17: unsigned char used; /* was this picture referenced */ ! 18: unsigned char type; /* PICO or DUMP file format */ ! 19: char fname[128]; /* unix file name */ ! 20: int fd; /* file descriptor */ ! 21: int sop; /* start of picture in file */ ! 22: unsigned char *pixred; /* pixel values as 1-dim arrays */ ! 23: unsigned char *pixgrn; ! 24: unsigned char *pixblu; ! 25: }; ! 26: ! 27: typedef ! 28: enum ! 29: { ! 30: OASS, OCOMMA, ACOMMA, COMP, OADD, ! 31: OMUL, OXOR, OOR, OAND, OBIC, ! 32: OSUB, OANDAND, OOROR, OPOW, ! 33: ONOT, OMINUS, ONEG, ODIV, ! 34: OLT, OLE, OEQ, ONE, ! 35: OGE, OGT, OLSH, ! 36: ! 37: CONST, CONSTB, VAR, REG, ! 38: DEREFB, DEREFS, DEREFL, CONDI, ! 39: ! 40: OISUB, OIDIV, ! 41: ! 42: LABL, GOTO, ! 43: ! 44: OCALL, CCALL, OARG, ORETURN, ! 45: ! 46: DIVV, MODU, ! 47: } Ntype; ! 48: ! 49: typedef ! 50: struct Node ! 51: { ! 52: Ntype type; ! 53: struct Node *left, *right; ! 54: union ! 55: { long Uarg; ! 56: struct Node * Uother; ! 57: } u; ! 58: } Node; ! 59: ! 60: typedef ! 61: struct SNode ! 62: { ! 63: Node *n, *x, *y; ! 64: char i; ! 65: } SNode; ! 66: ! 67: struct AR ! 68: { int sz; /* dimension */ ! 69: long *base; /* array base */ ! 70: }; ! 71: ! 72: struct FU ! 73: { char usednew; /* did it access new==tmp? */ ! 74: char usedold; /* did it access old? */ ! 75: char *fct; /* compiled function code */ ! 76: char nrparams; /* number of formal params */ ! 77: }; ! 78: ! 79: struct BL ! 80: { char usednew; ! 81: int (*faddr)(); ! 82: char nrparams; ! 83: }; ! 84: ! 85: typedef ! 86: struct Symbol ! 87: { char *name; ! 88: short type; /* array, function, variable, keyword or name */ ! 89: int depth; /* nesting level of declaration */ ! 90: union { ! 91: struct AR *ar; /* array */ ! 92: struct FU *fu; /* function */ ! 93: struct BL *bl; /* builtin */ ! 94: long val; /* variable */ ! 95: } u; ! 96: struct Symbol *next; ! 97: } Symbol; ! 98: ! 99: #define arg u.Uarg ! 100: #define other u.Uother ! 101: #define NR(n) new(CONST, Z, Z, n) ! 102: #define VR(n) new(VAR, Z, Z, n) ! 103: #define RL(A,B) new(DEREFL, VR(A), B, Z) ! 104: #define Z ((Node *)0) ! 105: ! 106: #define Prompt if (INPUT == stdin)\ ! 107: { fprintf(stderr, "%d: ", linenumber);\ ! 108: fflush(stderr);\ ! 109: } ! 110: #define Old (&src[CUROLD]) ! 111: #define Scratch (&src[CURSCRATCH]) ! 112: #define oldred (src[CUROLD].pixred) ! 113: #define scratchred (src[CURSCRATCH].pixred) ! 114: #define oldgrn (src[CUROLD].pixgrn) ! 115: #define scratchgrn (src[CURSCRATCH].pixgrn) ! 116: #define oldblu (src[CUROLD].pixblu) ! 117: #define scratchblu (src[CURSCRATCH].pixblu) ! 118: ! 119: #define snore() { if (frameb) fbsnore(); \ ! 120: else if (metheus) om_open(whichdevice); \ ! 121: } ! 122: #define getscreen(m) { if (frameb) fbgetitall(m); \ ! 123: else if (metheus) metgetitall(m); \ ! 124: setscratch(Old, Scratch); } ! 125: #define putscreen(m) { if (frameb) fbputitall(m); \ ! 126: else if (metheus) metputitall(m); } ! 127: #define upit() { if (frameb) fbup(); } ! 128: #define downit() { if (frameb) fbdown(); } ! 129: ! 130: #define udone (lastguy == '\n') ! 131: #define Used usedold = usednew = 1 ! 132: ! 133: #define NLOOP 1 /* execute once */ ! 134: #define BLOOP 2 /* default loop on x, y, and i=ll*y+x */ ! 135: #define SLOOP 3 /* loop on 0<=i<=255 */ ! 136: ! 137: #define RESIDENT { Old->incore = Scratch->incore = 2; } ! 138: #define ABSENT { Old->incore = Scratch->incore = 1; } ! 139: ! 140: Node *new(), *Index(), *sumchans(), *cast(), *weird(); ! 141: Node *notnew(), *divide(), *modulo(), *splatter(); ! 142: Node *newloop(), *newhile(), *newuntil(); ! 143: Node *threechans(), *ncopy(), *par(); ! 144: Node *mapred(), *mapgrn(), *mapblu(), *mapall(); ! 145: SNode *nsup(), *super(); ! 146: char *Emalloc(), *strcpy(), *strncpy(), *mktemp(), *strcat(); ! 147: Symbol *lookup(), *newsym(); ! 148: ! 149: #define min(a, b) ((a<b)?(a):(b)) ! 150: #define max(a, b) ((a>b)?(a):(b))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.