|
|
1.1 root 1: /* Copyright (c) 1979 Regents of the University of California */
2: #
3: /*
4: * pi - Pascal interpreter code translator
5: *
6: * Charles Haley, Bill Joy UCB
7: * Version 1.2 November 1978
8: *
9: * pxp - Pascal execution profiler
10: *
11: * Bill Joy UCB
12: * Version 1.2 November 1978
13: */
14:
15: #include "whoami"
16: #include "0.h"
17: #ifndef PI01
18: #ifndef PXP
19: #include "send.h"
20: #endif
21: #endif
22:
23: /*
24: * STRING SPACE DECLARATIONS
25: *
26: * Strng is the base of the current
27: * string space and strngp the
28: * base of the free area therein.
29: * Strp is the array of descriptors.
30: */
31: #ifndef PI0
32: STATIC char strings[STRINC];
33: STATIC char *strng = strings;
34: STATIC char *strngp = strings;
35: #else
36: char *strng, *strngp;
37: #endif
38: #ifndef PI01
39: #ifndef PXP
40: STATIC char *strp[20];
41: STATIC char **stract strp;
42: int strmax;
43: #endif
44: #endif
45:
46: #ifndef PI01
47: #ifndef PXP
48: #ifndef PI0
49: initstring()
50: #else
51: initstring(strings)
52: char *strings;
53: #endif
54: {
55:
56: *stract++ = strings;
57: #ifdef PI0
58: strng = strngp = strings;
59: #endif
60: strmax = STRINC * 2;
61: }
62: #endif
63: #endif
64:
65: /*
66: * Copy a string into the string area.
67: */
68: char *
69: savestr(cp)
70: register char *cp;
71: {
72: register int i;
73:
74: i = strlen(cp) + 1;
75: if (strngp + i >= strng + STRINC) {
76: strngp = malloc(STRINC);
77: if (strngp == -1) {
78: yerror("Ran out of memory (string)");
79: pexit(DIED);
80: }
81: #ifndef PI01
82: #ifndef PXP
83: *stract++ = strngp;
84: strmax =+ STRINC;
85: #endif
86: #endif
87: strng = strngp;
88: }
89: strcpy(strngp, cp);
90: cp = strngp;
91: strngp = cp + i;
92: #ifdef PI0
93: send(RSTRING, cp);
94: #endif
95: return (cp);
96: }
97:
98: #ifndef PI1
99: #ifndef PXP
100: esavestr(cp)
101: char *cp;
102: {
103:
104: #ifdef PI0
105: send(REVENIT);
106: #endif
107: strngp = ( (char *) ( ( (int) (strngp + 1) ) &~ 1 ) );
108: return (savestr(cp));
109: }
110: #endif
111: #endif
112:
113: #ifndef PI01
114: #ifndef PXP
115: soffset(cp)
116: register char *cp;
117: {
118: register char **sp;
119: register int i;
120:
121: if (cp == NIL || cp == OCT || cp == HEX)
122: return (-cp);
123: for (i = STRINC, sp = strp; sp < stract; sp++) {
124: if (cp >= *sp && cp < (*sp + STRINC))
125: return (i + (cp - *sp));
126: i =+ STRINC;
127: }
128: i = nlfund(cp);
129: if (i != 0)
130: return (i);
131: panic("soffset");
132: }
133: #ifdef PI1
134: sreloc(i)
135: register int i;
136: {
137:
138: if (i == 0 || i == -OCT || i == -HEX)
139: return (-i);
140: if (i < STRINC) {
141: if (i >= INL)
142: panic("sreloc INL");
143: i = nl[i].symbol;
144: if (i == 0)
145: panic("sreloc nl[i]");
146: return (i);
147: }
148: if (i > strmax || i < 0)
149: panic("sreloc");
150: return (strp[(i / STRINC) - 1] + (i % STRINC));
151: }
152:
153: evenit()
154: {
155:
156: strngp = (strngp + 1) &~ 1;
157: }
158: #endif
159: #endif
160: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.