# include # include # include # include # include "../decomp/globs.h" # include SCCSID(@(#)prsym.c 8.2 1/17/85) prsym(s) register SYMBOL *s; { register union symvalue *p; register int type; register int len; union symvalue temp; type = s->type; len = s->len & I1MASK; p = &s->value; if (type == S_VAR) { /* actually, S_VAR's are rendered the same as VAR's * by call_ovqp70.c's ovqpnod() */ printf("s_"); /* first part of "s_var" message */ type = VAR; /* execute var portion */ } if (type == VAR) { printf("var:att#=%d:", p->sym_var.attno); type = p->sym_var.varfrmt; len = p->sym_var.varfrml; if (type != CHAR) { /* move anytype to symvalue boundary */ bmove((char *)p->sym_var.valptr, (char *)&temp, sizeof *p); p = &temp; } } xputchar(type); printf("%d:value='", len); switch (type) { case AND: printf("%d [AND] (operator)", p->sym_op.opno); break; case AOP: printf("%d [AOP] (operator)", p->sym_op.opno); break; case BOP: printf("%d [BOP] (operator)", p->sym_op.opno); break; case OR: printf("%d [OR] (operator)", p->sym_op.opno); break; case RESDOM: printf("%d [RESDOM] (operator)", p->sym_op.opno); break; case UOP: printf("%d [UOP] (operator)", p->sym_op.opno); break; case COP: printf("%d [COP] (operator)", p->sym_op.opno); break; case INT: switch (len) { case 1: printf("%d", p->sym_data.i1type); break; case 2: printf("%d", p->sym_data.i2type); break; case 4: printf("%ld", p->sym_data.i4type); } break; case FLOAT: printf("%10.3f", p->sym_data.f4type); break; case RESULTID: case SOURCEID: case CHAR: printf("%x=", p->sym_data.c0type); prstr(p->sym_data.c0type, len); break; case AGHEAD: printf("AGHEAD (delim)"); break; case BYHEAD: printf("BYHEAD (delim)"); break; case QLEND: printf("QLEND (delim)"); break; case ROOT: printf("ROOT (delim)"); break; case TREE: printf("TREE (delim)"); break; case CHANGESTRAT: case REOPENRES: case EXIT: case QMODE: case RETVAL: case USERQRY: if (len) printf("%d", p->sym_op.opno); printf(" (status)"); break; default: printf("\nError in prsym: bad type= %d\n", type); } printf("'\n"); } prstack(s) register SYMBOL *s; { if (s->type == CHAR) { printf("c%d:value='%x=", s->len,s->value.sym_data.cptype); prstr(s->value.sym_data.cptype, s->len & I1MASK); printf("'\n"); } else prsym(s); } prstr(p, l) register char *p; register int l; { while (--l >= 0) putchar(*p++); }