|
|
1.1 root 1: /* $Header: print.c,v 1.1 86/03/24 16:19:21 rcs Exp $ */
2: /* (C) Copyright 1985 Third Eye Software, Inc. - All Rights Reserved */
3:
4: #include "tes42.h"
5:
6: int vindent;
7: #define SbFIss(iss) (vsbNewStr + iss)
8:
9:
10: /* P R I N T T Q */
11:
12: local void PrintTq(tq)
13: int tq;
14: {
15: switch (tq) {
16: case tqArray: printf("Array of "); break;
17: case tqPtr: printf("Pointer to "); break;
18: case tqProc: printf("Function returning "); break;
19: } /* switch */
20: } /* PrintTq */
21:
22:
23: /* P R I N T B T */
24:
25: local void PrintBt(bt)
26: int bt;
27: {
28: switch (bt) {
29: default: printf("Unknown-bt(%d)", bt); break;
30: case btNil: printf("btNil "); break;
31: case btAdr: printf("Adr "); break;
32: case btChar: printf("Char "); break;
33: case btUChar: printf("UChar "); break;
34: case btShort: printf("Short "); break;
35: case btUShort: printf("UShort "); break;
36: case btInt: printf("Int "); break;
37: case btUInt: printf("UInt "); break;
38: case btLong: printf("Long "); break;
39: case btULong: printf("ULong "); break;
40: case btFloat: printf("Float "); break;
41: case btDouble: printf("Double "); break;
42: case btStruct: printf("Struct "); break;
43: case btUnion: printf("Union "); break;
44: case btEnum: printf("Enum "); break;
45: case btTypedef: printf("User type "); break;
46: } /* switch */
47: } /* PrintBt */
48:
49:
50: /* I A U X F P R I N T T Y P E */
51:
52: local void IauxFPrintType(iaux)
53: int4 iaux;
54: {
55: TIR ati;
56: AUXU aaux, aaux2;
57: DIMR adim;
58:
59: aaux = AuxFIaux(iaux++);
60: PrintTq(aaux.ti.tq0);
61: PrintTq(aaux.ti.tq1);
62: PrintTq(aaux.ti.tq2);
63: PrintTq(aaux.ti.tq3);
64: PrintTq(aaux.ti.tq4);
65: PrintTq(aaux.ti.tq5);
66: PrintBt(aaux.ti.bt);
67:
68: if (FComplexBt(aaux.ti.bt))
69: printf("ref = %ld ", AuxFIaux(iaux++));
70:
71: #define PRINTDIM(tq)\
72: if (tq == tqArray) {\
73: aaux2 = AuxFIaux(iaux++); \
74: printf("[%d, %d] ", aaux2.dim.dnLow, aaux2.dim.dnMac); \
75: } /* if */
76: PRINTDIM(aaux.ti.tq5);
77: PRINTDIM(aaux.ti.tq4);
78: PRINTDIM(aaux.ti.tq3);
79: PRINTDIM(aaux.ti.tq2);
80: PRINTDIM(aaux.ti.tq1);
81: PRINTDIM(aaux.ti.tq0);
82:
83: return(iaux);
84: } /* IauxFPrintType */
85:
86:
87: /* P R I N T S Y M */
88:
89: local void PrintSym(sym)
90: pSYMR sym;
91: {
92: int4 iaux;
93:
94: if (sym->iss != issNil)
95: printf("\"%s\": ", SbFIss(sym->iss));
96: else
97: printf("\"\": ");
98:
99: switch (sym->st) {
100: case stParam:
101: case stLocal:
102: case stTypedef:
103: case stNil: printf("%ld, ", sym->value);
104: break;
105: case stProc: if (sym->index != viauxProcPhony)
106: vindent++;
107: case stLabel:
108: case stEnd:
109: case stFile:
110: case stBlock:
111: case stStatic:
112: case stGlobal: printf("%#lx, ", sym->value);
113: break;
114: case stMember: printf("offset %ld, ", sym->value);
115: break;
116: } /* switch */
117:
118: switch (sym->st) {
119: case stNil: printf("stNil "); break;
120: case stGlobal: printf("Extern "); break;
121: case stStatic: printf("Static "); break;
122: case stParam: printf("Param "); break;
123: case stLocal: printf("Local "); break;
124: case stLabel: printf("Label "); break;
125: case stBlock: printf("Block "); vindent++; break;
126: case stProc: printf("Procedure "); break;
127: case stMember: printf("Member "); break;
128: case stEnd: printf("End "); break;
129: case stTypedef: printf("Typedef "); break;
130: case stFile: printf("File name "); vindent++; break;
131: } /* switch */
132:
133: switch (sym->sc) {
134: case scNil: printf("scNil "); break;
135: case scText: printf("Text "); break;
136: case scData: printf("Data "); break;
137: case scBss: printf("Bss "); break;
138: case scRegister: printf("Register "); break;
139: case scAbs: /* printf("Absolute "); */ break;
140: case scUndefined: printf("scUndefined "); break;
141: case scInfo: printf("Info "); break;
142: case scBits: printf("BitField "); break;
143: } /* switch */
144:
145: iaux = sym->index;
146: switch (sym->st) {
147: default: printf("ref = %ld ", iaux); break;
148:
149: case stProc:
150: printf("ref = %ld ", AuxFIaux(iaux++));
151: /* fall through */
152:
153: case stMember:
154: if (iaux == 0) /* it MUST be an ENUM name */
155: break;
156: /* fall through */
157:
158: case stGlobal:
159: case stLocal:
160: case stParam:
161: case stTypedef:
162: iaux = IauxFPrintType(iaux);
163: if (sym->sc == scBits)
164: printf("width = %ld ", AuxFIaux(iaux));
165: break;
166: } /* switch */
167: printf("\n");
168:
169: } /* PrintSym */
170:
171:
172: /* P R I N T I N D E N T */
173:
174: local void PrintIndent()
175: {
176: register int i;
177:
178: for (i = 0; i < vindent; i++)
179: printf(" ");
180: } /* PrintIndent */
181:
182:
183: /* P R I N T L I N E S */
184:
185: local void PrintLines(iline)
186: register int iline;
187: {
188: int i;
189: ADRT dadr, dadrLast;
190:
191: dadrLast = 0;
192: for (i = 0; iline < vilineMac; i++, iline++) {
193: dadr = vrgLine[iline].dadr;
194: if (vrgLine[iline].dadr < dadrLast)
195: break;
196: printf("%s%3d %3d: 0x%lx", (i % 4) ? "\t" : "\n\t",
197: iline, vrgLine[iline].iln, dadr);
198: dadrLast = dadr;
199: } /* for */
200: } /* PrintLines */
201:
202:
203: /* P R I N T F I L E S */
204:
205: local void PrintFiles()
206: {
207: register int ifd;
208: register pFDR fd;
209:
210: for (ifd = 0, fd = vrgFd; ifd < vifdMac; ifd++, fd++) {
211: printf("%3d: \"%s\" %#lx", ifd, SbFIss(fd->iss), fd->adr);
212: if (fd->ipd != ipdNil)
213: printf("\t\"%s\"", SbFIss(SymFIsym(vrgPd[fd->ipd].isym)->iss) );
214: printf("\n");
215: } /* for */
216: } /* PrintFiles */
217:
218:
219: /* P R I N T P R O C S */
220:
221: local void PrintProcs()
222: {
223: register int ipd;
224: pSYMR sym;
225: pPDR pd;
226:
227: pd = vrgPd;
228: for (ipd = 0; ipd < vipdMac; ipd++, pd++) {
229: sym = vrgSym + pd->isym;
230: printf("%3d: \"%s\" addr: %#lx isym: %ld",
231: ipd, SbFIss(SymFIsym(pd->isym)->iss), pd->adr, pd->isym);
232: if (pd->iline > 0)
233: PrintLines(pd->iline);
234: printf("\n");
235: } /* for */
236: } /* PrintProcs */
237:
238:
239: /* P R I N T A L L */
240:
241: export void PrintAll()
242: {
243: register int i;
244:
245: printf("Header infomation:\n");
246:
247: printf(" vstamp: %8ld\n", vahdr.vstamp);
248: printf(" cbText: %8ld\n", vahdr.cbText);
249: printf(" cbData: %8ld\n", vahdr.cbData);
250: printf(" cbBss: %8ld\n", vahdr.cbBss);
251: printf(" ipdMax: %8ld\n", vahdr.ipdMax);
252: printf(" cbPdOffset: %8ld\n", vahdr.cbPdOffset);
253: printf(" ifdMax: %8ld\n", vahdr.ifdMax);
254: printf(" cbFdOffset: %8ld\n", vahdr.cbFdOffset);
255: printf(" ilineMax: %8ld\n", vahdr.ilineMax);
256: printf(" cbLineOffset: %8ld\n", vahdr.cbLineOffset);
257: printf(" issMax: %8ld\n", vahdr.issMax);
258: printf(" cbSsOffset: %8ld\n", vahdr.cbSsOffset);
259: printf(" isymMax: %8ld\n", vahdr.isymMax);
260: printf(" cbSymOffset: %8ld\n", vahdr.cbSymOffset);
261: printf(" isymGl: %8ld\n", vahdr.isymGl);
262: printf(" isymGlMax: %8ld\n", vahdr.isymGlMax);
263: printf(" iauxMax: %8ld\n", vahdr.iauxMax);
264: printf(" cbAuxOffset: %8ld\n", vahdr.cbAuxOffset);
265:
266: vindent = 0;
267: printf("\n\nSYMBOLS:\n\n");
268: for (i = 0 ; i < visymMac; i++) {
269: if (vrgSym[i].st == stEnd)
270: vindent--;
271: PrintIndent();
272: printf("%d. ", i);
273: PrintSym(vrgSym + i);
274: } /* for */
275:
276: printf("\n\nGLOBALS:\n\n");
277: for (i= 0 ; i < visymGlMac; i++)
278: PrintSym(vrgSymGlobal + i);
279:
280: printf("\n\nPROCS:\n\n");
281: PrintProcs();
282:
283: printf("\n\nFILES:\n\n");
284: PrintFiles();
285: } /* PrintAll */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.