|
|
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.