1: /* 2: # ISCOPE(3.icon) 3: # 4: # Inspect Icon internals 5: # 6: # Ralph E. Griswold and William H. Mitchell 7: # 8: # Last modified 8/19/84 9: # 10: */ 11: 12: #include "../h/rt.h" 13: #ifdef VAX 14: 15: /* 16: * Word2(x,y) - return second word of descriptor as integer 17: */ 18: 19: XWord2(nargs, arg2, arg1, arg0) 20: int nargs; 21: struct descrip arg2, arg1, arg0; 22: { 23: long i; 24: 25: defint(&arg2, &i, 0); 26: if (i == 0) 27: DeRef(arg1) 28: mkint(arg1.value.integr, &arg0); 29: } 30: 31: Procblock(Word2,2) 32: 33: /* 34: * Word1(x,y) - return first word of descriptor as integer. 35: */ 36: 37: XWord1(nargs, arg2, arg1, arg0) 38: int nargs; 39: struct descrip arg2, arg1, arg0; 40: { 41: long i; 42: 43: defint(&arg2, &i, 0); 44: if (i == 0) 45: DeRef(arg1) 46: mkint(arg1.type, &arg0); 47: } 48: 49: Procblock(Word1,2) 50: 51: /* 52: * Descr(x,y) - consstruct descriptor from integers i1 and i2. 53: */ 54: 55: XDescr(nargs, arg2, arg1, arg0) 56: int nargs; 57: struct descrip arg2, arg1, arg0; 58: { 59: int t1, t2; 60: long i1, i2; 61: DeRef(arg1) 62: DeRef(arg2) 63: defint(&arg1, &i1, 0); 64: defint(&arg2, &i2, 0); 65: arg0.type = i1; 66: arg0.value.integr = i2; 67: 68: } 69: 70: Procblock(Descr,2) 71: 72: /* 73: * Indir(x) - return integer to where x points. 74: */ 75: 76: XIndir(nargs, arg1, arg0) 77: int nargs; 78: struct descrip arg1, arg0; 79: { 80: int *i; 81: int j; 82: 83: DeRef(arg1) 84: i = (int *) arg1.value.integr; 85: j = *i; 86: mkint(j, &arg0); 87: } 88: 89: Procblock(Indir,1) 90: 91: XPfp(nargs, arg0) 92: int nargs; 93: struct descrip arg0; 94: { 95: register int r11, r10; 96: 97: asm(" movl 12(fp),r11"); 98: mkint(r11, &arg0); 99: } 100: Procblock(Pfp,0) 101: 102: XEfp(nargs, arg0) 103: int nargs; 104: struct descrip arg0; 105: { 106: register int r11, r10; 107: 108: asm(" movl -4(ap),r11"); 109: mkint(r11, &arg0); 110: } 111: Procblock(Efp,0) 112: 113: XGfp(nargs, arg0) 114: int nargs; 115: struct descrip arg0; 116: { 117: register int r11, r10; 118: 119: asm(" movl -8(ap),r11"); 120: mkint(r11, &arg0); 121: } 122: Procblock(Gfp,0) 123: 124: /* 125: * Symbol(x) - get address of Icon symbol. 126: */ 127: 128: XSymbol(nargs, arg1, arg0) 129: int nargs; 130: struct descrip arg1, arg0; 131: { 132: extern globals, eglobals, gnames; 133: char sbuf[MAXSTRING]; 134: DeRef(arg1) 135: if (cvstr(&arg1, sbuf) == NULL) 136: runerr(103, &arg1); 137: qtos(&arg1, sbuf); 138: ((arg0).type) = D_INTEGER; 139: if (strcmp(sbuf, "globals") == 0) 140: INTVAL(arg0) = (int) &globals; 141: else if (strcmp(sbuf, "eglobals") == 0) 142: INTVAL(arg0) = (int) &eglobals; 143: else if (strcmp(sbuf, "gnames") == 0) 144: INTVAL(arg0) = (int) &gnames; 145: else if (strcmp(sbuf, "strings") == 0) 146: INTVAL(arg0) = (int) strings; 147: else if (strcmp(sbuf, "sfree") == 0) 148: INTVAL(arg0) = (int) sfree; 149: else if (strcmp(sbuf, "hpbase") == 0) 150: INTVAL(arg0) = (int) hpbase; 151: else if (strcmp(sbuf, "hpfree") == 0) 152: INTVAL(arg0) = (int) hpfree; 153: else if (strcmp(sbuf, "stacks") == 0) 154: INTVAL(arg0) = (int) stacks; 155: else if (strcmp(sbuf, "esfree") == 0) 156: INTVAL(arg0) = (int) esfree; 157: else fail(); 158: } 159: 160: Procblock(Symbol,1) 161: #endif VAX