|
|
1.1 ! root 1: # include <ingres.h> ! 2: # include <aux.h> ! 3: # include <tree.h> ! 4: # include <symbol.h> ! 5: # include "globs.h" ! 6: # include <sccs.h> ! 7: ! 8: SCCSID(@(#)makenode.c 8.1 12/31/84) ! 9: ! 10: ! 11: ! 12: ! 13: /* ! 14: ** Make a copy of a tree. ! 15: */ ! 16: ! 17: QTREE * ! 18: copytree(r, buf) ! 19: register QTREE *r; ! 20: char *buf; ! 21: { ! 22: register QTREE *q; ! 23: register int length; ! 24: extern char *need(); ! 25: ! 26: if (r == NULL) ! 27: return (0); ! 28: ! 29: length = r->sym.len & I1MASK; ! 30: q = (QTREE *) need(buf, length + QT_HDR_SIZ); ! 31: bmove((char *)&r->sym, (char *)&q->sym, length + SYM_HDR_SIZ); ! 32: ! 33: q->left = copytree(r->left, buf); ! 34: q->right = copytree(r->right, buf); ! 35: ! 36: return (q); ! 37: } ! 38: /* ! 39: ** Make a new copy of the root by making ! 40: ** new AND nodes and connecting them to the ! 41: ** same branches. ! 42: ** ! 43: ** Trace Flags: ! 44: ** 64 ! 45: */ ! 46: ! 47: QTREE * ! 48: copy_ands(root, buf) ! 49: QTREE *root; ! 50: char *buf; ! 51: { ! 52: register QTREE *q; ! 53: register QTREE *x, *y; ! 54: QTREE *newroot; ! 55: extern char *need(); ! 56: register int len; ! 57: ! 58: # ifdef xDTR1 ! 59: if (tTf(64, -1)) ! 60: printf("COPY_ANDS"); ! 61: # endif ! 62: newroot = (QTREE *) need(buf, 0); ! 63: y = 0; ! 64: ! 65: for (q=root; q->sym.type != QLEND; q=q->right) ! 66: { ! 67: len = q->sym.len & I1MASK; ! 68: x = (QTREE *) need(buf, len + QT_HDR_SIZ); ! 69: x->left = q->left; ! 70: bmove((char *)&q->sym, (char *)&x->sym, len + SYM_HDR_SIZ); ! 71: if (y) ! 72: y->right = x; ! 73: y = x; ! 74: } ! 75: y->right = q; ! 76: ! 77: # ifdef xDTR1 ! 78: if (tTf(64, 0)) ! 79: { ! 80: printf("New tree\n"); ! 81: treepr(newroot); ! 82: } ! 83: # endif ! 84: return(newroot); ! 85: } ! 86: ! 87: ! 88: ! 89: QTREE * ! 90: makroot(buf) ! 91: char *buf; ! 92: { ! 93: register QTREE *s; ! 94: extern char *need(); ! 95: ! 96: s = (QTREE *) need(buf, QT_HDR_SIZ + sizeof (struct rootnode)); ! 97: s->right = De.de_qle; ! 98: s->left = De.de_tr; ! 99: s->sym.value.sym_root.rootuser = FALSE; ! 100: s->sym.value.sym_root.lvarm = 0; ! 101: s->sym.value.sym_root.rvarm = 0; ! 102: s->sym.value.sym_root.tvarc = 0; ! 103: s->sym.value.sym_root.lvarc = 0; ! 104: s->sym.type = ROOT; ! 105: s->sym.len = sizeof (struct rootnode); ! 106: return (s); ! 107: } ! 108: ! 109: ! 110: QTREE * ! 111: makresdom(buf, node) ! 112: char *buf; ! 113: QTREE *node; ! 114: { ! 115: register QTREE *res, *n; ! 116: extern char *need(); ! 117: ! 118: n = node; ! 119: res = (QTREE *) need(buf, QT_HDR_SIZ + sizeof(struct resdomnode)); ! 120: res->sym.type = RESDOM; ! 121: res->sym.len = sizeof(struct resdomnode); ! 122: if (n->sym.type == AOP) ! 123: { ! 124: res->sym.value.sym_resdom.resfrmt = n->sym.value.sym_op.agfrmt; ! 125: res->sym.value.sym_resdom.resfrml = n->sym.value.sym_op.agfrml; ! 126: } ! 127: else ! 128: { ! 129: res->sym.value.sym_resdom.resfrmt = n->sym.value.sym_var.varfrmt; ! 130: res->sym.value.sym_resdom.resfrml = n->sym.value.sym_var.varfrml; ! 131: } ! 132: return (res); ! 133: } ! 134: ! 135: QTREE * ! 136: makavar(node, varnum, attnum) ! 137: QTREE *node; ! 138: int varnum, attnum; ! 139: { ! 140: register QTREE *avar, *n; ! 141: extern char *need(); ! 142: ! 143: n = node; ! 144: ! 145: avar = (QTREE *) need(De.de_qbuf, QT_HDR_SIZ + sizeof(struct varnode)); ! 146: avar->left = avar->right = NULL; ! 147: avar->sym.value.sym_var.valptr = NULL; ! 148: avar->sym.type = VAR; ! 149: avar->sym.len = sizeof(struct varnode); ! 150: avar->sym.value.sym_var.varfrmt = n->sym.value.sym_var.varfrmt; ! 151: avar->sym.value.sym_var.varfrml = n->sym.value.sym_var.varfrml; ! 152: avar->sym.value.sym_var.varno = varnum; ! 153: avar->sym.value.sym_var.attno = attnum; ! 154: # ifdef xDTR1 ! 155: if (tTf(64, 3)) ! 156: { ! 157: printf("makavar: node=%x ", n); ! 158: nodepr(avar); ! 159: } ! 160: # endif ! 161: return(avar); ! 162: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.