|
|
1.1 ! root 1: /* ! 2: * ISCOPE ! 3: * ! 4: * Inspect Icon internals. ! 5: * ! 6: * Ralph E. Griswold ! 7: * ! 8: * Last modified 6/8/86 ! 9: * ! 10: */ ! 11: ! 12: #include "../h/rt.h" ! 13: ! 14: /* ! 15: * Vword(x) - return second word of descriptor as integer ! 16: */ ! 17: ! 18: FncDcl(Vword,1) ! 19: { ! 20: Arg0.dword = D_Integer; ! 21: Arg0.vword.integr = Arg1.vword.integr; ! 22: Return; ! 23: } ! 24: ! 25: ! 26: /* ! 27: * Dword(x) - return first word of descriptor as integer. ! 28: */ ! 29: ! 30: FncDcl(Dword,1) ! 31: { ! 32: Arg0.dword = D_Integer; ! 33: Arg0.vword.integr = Arg1.dword; ! 34: Return; ! 35: } ! 36: ! 37: /* ! 38: * Descr(x,y) - construct descriptor from integer values of x and y ! 39: */ ! 40: ! 41: FncDcl(Descr,2) ! 42: { ! 43: defshort(&Arg1, 0); ! 44: defshort(&Arg2, 0); ! 45: Arg0.dword = Arg1.vword.integr; ! 46: Arg0.vword.integr = Arg2.vword.integr; ! 47: Return; ! 48: } ! 49: ! 50: /* ! 51: * Indir(x) - return integer to where x points. ! 52: */ ! 53: ! 54: FncDcl(Indir,1) ! 55: { ! 56: Arg0.dword = D_Integer; ! 57: Arg0.vword.integr = *((int *) Arg1.vword.integr); ! 58: Return; ! 59: } ! 60: ! 61: /* ! 62: * Symbol(x) - get address of Icon symbol. ! 63: */ ! 64: ! 65: FncDcl(Symbol,1) ! 66: { ! 67: extern globals, eglobals, gnames; ! 68: char sbuf[MaxCvtLen]; ! 69: if (cvstr(&Arg1, sbuf) == NULL) ! 70: runerr(103, &Arg1); ! 71: qtos(&Arg1, sbuf); ! 72: ((Arg0).dword) = D_Integer; ! 73: if (strcmp(sbuf, "globals") == 0) ! 74: IntVal(Arg0) = (int) &globals; ! 75: else if (strcmp(sbuf, "eglobals") == 0) ! 76: IntVal(Arg0) = (int) &eglobals; ! 77: else if (strcmp(sbuf, "gnames") == 0) ! 78: IntVal(Arg0) = (int) &gnames; ! 79: else if (strcmp(sbuf, "strbase") == 0) ! 80: IntVal(Arg0) = (int) strbase; ! 81: else if (strcmp(sbuf, "strfree") == 0) ! 82: IntVal(Arg0) = (int) strfree; ! 83: else if (strcmp(sbuf, "blkbase") == 0) ! 84: IntVal(Arg0) = (int) blkbase; ! 85: else if (strcmp(sbuf, "blkfree") == 0) ! 86: IntVal(Arg0) = (int) blkfree; ! 87: else runerr(205, &Arg1); ! 88: Return; ! 89: } ! 90: /* ! 91: * Ivar(x) - get value of interpreter state variable ! 92: */ ! 93: ! 94: FncDcl(Ivar,1) ! 95: { ! 96: char sbuf[MaxCvtLen]; ! 97: if (cvstr(&Arg1, sbuf) == NULL) ! 98: runerr(103, &Arg1); ! 99: qtos(&Arg1, sbuf); ! 100: ((Arg0).dword) = D_Integer; ! 101: if (strcmp(sbuf, "sp") == 0) ! 102: IntVal(Arg0) = (int)sp; ! 103: else if (strcmp(sbuf, "efp") == 0) ! 104: IntVal(Arg0) = (int)efp; ! 105: else if (strcmp(sbuf, "gfp") == 0) ! 106: IntVal(Arg0) = (int)gfp; ! 107: else if (strcmp(sbuf, "argp") == 0) ! 108: IntVal(Arg0) = (int)argp; ! 109: else if (strcmp(sbuf, "pfp") == 0) ! 110: IntVal(Arg0) = (int)pfp; ! 111: else if (strcmp(sbuf, "ilevel") == 0) ! 112: IntVal(Arg0) = (int)ilevel; ! 113: else runerr(205, &Arg1); ! 114: Return; ! 115: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.