1: #include "awk.def" 2: #include "awk.h" 3: #include "stdio.h" 4: node *ALLOC(n) 5: { node *x; 6: x = (node *)malloc(sizeof(node)+n*sizeof(node *)); 7: if (x == NULL) 8: error(FATAL, "out of space in ALLOC"); 9: return(x); 10: } 11: node *exptostat(a) node *a; 12: { 13: a->ntype = NSTAT; 14: return(a); 15: } 16: node *nullstat; 17: node *node0(a) 18: { node *x; 19: x=ALLOC(0); 20: x->nnext = NULL; 21: x->nobj=a; 22: return(x); 23: } 24: node *node1(a,b) node *b; 25: { node *x; 26: x=ALLOC(1); 27: x->nnext = NULL; 28: x->nobj=a; 29: x->narg[0]=b; 30: return(x); 31: } 32: node *node2(a,b,c) node *b, *c; 33: { node *x; 34: x = ALLOC(2); 35: x->nnext = NULL; 36: x->nobj = a; 37: x->narg[0] = b; 38: x->narg[1] = c; 39: return(x); 40: } 41: node *node3(a,b,c,d) node *b, *c, *d; 42: { node *x; 43: x = ALLOC(3); 44: x->nnext = NULL; 45: x->nobj = a; 46: x->narg[0] = b; 47: x->narg[1] = c; 48: x->narg[2] = d; 49: return(x); 50: } 51: node *node4(a,b,c,d,e) node *b, *c, *d, *e; 52: { node *x; 53: x = ALLOC(4); 54: x->nnext = NULL; 55: x->nobj = a; 56: x->narg[0] = b; 57: x->narg[1] = c; 58: x->narg[2] = d; 59: x->narg[3] = e; 60: return(x); 61: } 62: node *stat3(a,b,c,d) node *b, *c, *d; 63: { node *x; 64: x = node3(a,b,c,d); 65: x->ntype = NSTAT; 66: return(x); 67: } 68: node *op2(a,b,c) node *b, *c; 69: { node *x; 70: x = node2(a,b,c); 71: x->ntype = NEXPR; 72: return(x); 73: } 74: node *op1(a,b) node *b; 75: { node *x; 76: x = node1(a,b); 77: x->ntype = NEXPR; 78: return(x); 79: } 80: node *stat1(a,b) node *b; 81: { node *x; 82: x = node1(a,b); 83: x->ntype = NSTAT; 84: return(x); 85: } 86: node *op3(a,b,c,d) node *b, *c, *d; 87: { node *x; 88: x = node3(a,b,c,d); 89: x->ntype = NEXPR; 90: return(x); 91: } 92: node *stat2(a,b,c) node *b, *c; 93: { node *x; 94: x = node2(a,b,c); 95: x->ntype = NSTAT; 96: return(x); 97: } 98: node *stat4(a,b,c,d,e) node *b, *c, *d, *e; 99: { node *x; 100: x = node4(a,b,c,d,e); 101: x->ntype = NSTAT; 102: return(x); 103: } 104: node *valtonode(a, b) cell *a; 105: { node *x; 106: x = node0(a); 107: x->ntype = NVALUE; 108: x->subtype = b; 109: return(x); 110: } 111: node *genjump(a) 112: { node *x; 113: x = node0(a); 114: x->ntype = NSTAT; 115: return(x); 116: } 117: node *pa2stat(a,b,c) node *a, *b, *c; 118: { node *x; 119: x = node3(paircnt++, a, b, c); 120: x->ntype = NPA2; 121: return(x); 122: } 123: node *linkum(a,b) node *a, *b; 124: { node *c; 125: if(a == NULL) return(b); 126: else if(b == NULL) return(a); 127: for(c=a; c->nnext != NULL; c=c->nnext); 128: c->nnext = b; 129: return(a); 130: } 131: node *genprint() 132: { node *x; 133: x = stat2(PRINT,valtonode(lookup("$record", symtab), CFLD), nullstat); 134: return(x); 135: }