|
|
Power 6/32 Unix version 1.21
/* $Header: /var/lib/cvsd/repos/cci/cci/usr/src/usr.bin/cdb/transBsd/print.c,v 1.1.1.1 2019/07/28 12:25:33 root Exp $ */
/* (C) Copyright 1985 Third Eye Software, Inc. - All Rights Reserved */
#include "tes42.h"
int vindent;
#define SbFIss(iss) (vsbNewStr + iss)
/* P R I N T T Q */
local void PrintTq(tq)
int tq;
{
switch (tq) {
case tqArray: printf("Array of "); break;
case tqPtr: printf("Pointer to "); break;
case tqProc: printf("Function returning "); break;
} /* switch */
} /* PrintTq */
/* P R I N T B T */
local void PrintBt(bt)
int bt;
{
switch (bt) {
default: printf("Unknown-bt(%d)", bt); break;
case btNil: printf("btNil "); break;
case btAdr: printf("Adr "); break;
case btChar: printf("Char "); break;
case btUChar: printf("UChar "); break;
case btShort: printf("Short "); break;
case btUShort: printf("UShort "); break;
case btInt: printf("Int "); break;
case btUInt: printf("UInt "); break;
case btLong: printf("Long "); break;
case btULong: printf("ULong "); break;
case btFloat: printf("Float "); break;
case btDouble: printf("Double "); break;
case btStruct: printf("Struct "); break;
case btUnion: printf("Union "); break;
case btEnum: printf("Enum "); break;
case btTypedef: printf("User type "); break;
} /* switch */
} /* PrintBt */
/* I A U X F P R I N T T Y P E */
local void IauxFPrintType(iaux)
int4 iaux;
{
TIR ati;
AUXU aaux, aaux2;
DIMR adim;
aaux = AuxFIaux(iaux++);
PrintTq(aaux.ti.tq0);
PrintTq(aaux.ti.tq1);
PrintTq(aaux.ti.tq2);
PrintTq(aaux.ti.tq3);
PrintTq(aaux.ti.tq4);
PrintTq(aaux.ti.tq5);
PrintBt(aaux.ti.bt);
if (FComplexBt(aaux.ti.bt))
printf("ref = %ld ", AuxFIaux(iaux++));
#define PRINTDIM(tq)\
if (tq == tqArray) {\
aaux2 = AuxFIaux(iaux++); \
printf("[%d, %d] ", aaux2.dim.dnLow, aaux2.dim.dnMac); \
} /* if */
PRINTDIM(aaux.ti.tq5);
PRINTDIM(aaux.ti.tq4);
PRINTDIM(aaux.ti.tq3);
PRINTDIM(aaux.ti.tq2);
PRINTDIM(aaux.ti.tq1);
PRINTDIM(aaux.ti.tq0);
return(iaux);
} /* IauxFPrintType */
/* P R I N T S Y M */
local void PrintSym(sym)
pSYMR sym;
{
int4 iaux;
if (sym->iss != issNil)
printf("\"%s\": ", SbFIss(sym->iss));
else
printf("\"\": ");
switch (sym->st) {
case stParam:
case stLocal:
case stTypedef:
case stNil: printf("%ld, ", sym->value);
break;
case stProc: if (sym->index != viauxProcPhony)
vindent++;
case stLabel:
case stEnd:
case stFile:
case stBlock:
case stStatic:
case stGlobal: printf("%#lx, ", sym->value);
break;
case stMember: printf("offset %ld, ", sym->value);
break;
} /* switch */
switch (sym->st) {
case stNil: printf("stNil "); break;
case stGlobal: printf("Extern "); break;
case stStatic: printf("Static "); break;
case stParam: printf("Param "); break;
case stLocal: printf("Local "); break;
case stLabel: printf("Label "); break;
case stBlock: printf("Block "); vindent++; break;
case stProc: printf("Procedure "); break;
case stMember: printf("Member "); break;
case stEnd: printf("End "); break;
case stTypedef: printf("Typedef "); break;
case stFile: printf("File name "); vindent++; break;
} /* switch */
switch (sym->sc) {
case scNil: printf("scNil "); break;
case scText: printf("Text "); break;
case scData: printf("Data "); break;
case scBss: printf("Bss "); break;
case scRegister: printf("Register "); break;
case scAbs: /* printf("Absolute "); */ break;
case scUndefined: printf("scUndefined "); break;
case scInfo: printf("Info "); break;
case scBits: printf("BitField "); break;
} /* switch */
iaux = sym->index;
switch (sym->st) {
default: printf("ref = %ld ", iaux); break;
case stProc:
printf("ref = %ld ", AuxFIaux(iaux++));
/* fall through */
case stMember:
if (iaux == 0) /* it MUST be an ENUM name */
break;
/* fall through */
case stGlobal:
case stLocal:
case stParam:
case stTypedef:
iaux = IauxFPrintType(iaux);
if (sym->sc == scBits)
printf("width = %ld ", AuxFIaux(iaux));
break;
} /* switch */
printf("\n");
} /* PrintSym */
/* P R I N T I N D E N T */
local void PrintIndent()
{
register int i;
for (i = 0; i < vindent; i++)
printf(" ");
} /* PrintIndent */
/* P R I N T L I N E S */
local void PrintLines(iline)
register int iline;
{
int i;
ADRT dadr, dadrLast;
dadrLast = 0;
for (i = 0; iline < vilineMac; i++, iline++) {
dadr = vrgLine[iline].dadr;
if (vrgLine[iline].dadr < dadrLast)
break;
printf("%s%3d %3d: 0x%lx", (i % 4) ? "\t" : "\n\t",
iline, vrgLine[iline].iln, dadr);
dadrLast = dadr;
} /* for */
} /* PrintLines */
/* P R I N T F I L E S */
local void PrintFiles()
{
register int ifd;
register pFDR fd;
for (ifd = 0, fd = vrgFd; ifd < vifdMac; ifd++, fd++) {
printf("%3d: \"%s\" %#lx", ifd, SbFIss(fd->iss), fd->adr);
if (fd->ipd != ipdNil)
printf("\t\"%s\"", SbFIss(SymFIsym(vrgPd[fd->ipd].isym)->iss) );
printf("\n");
} /* for */
} /* PrintFiles */
/* P R I N T P R O C S */
local void PrintProcs()
{
register int ipd;
pSYMR sym;
pPDR pd;
pd = vrgPd;
for (ipd = 0; ipd < vipdMac; ipd++, pd++) {
sym = vrgSym + pd->isym;
printf("%3d: \"%s\" addr: %#lx isym: %ld",
ipd, SbFIss(SymFIsym(pd->isym)->iss), pd->adr, pd->isym);
if (pd->iline > 0)
PrintLines(pd->iline);
printf("\n");
} /* for */
} /* PrintProcs */
/* P R I N T A L L */
export void PrintAll()
{
register int i;
printf("Header infomation:\n");
printf(" vstamp: %8ld\n", vahdr.vstamp);
printf(" cbText: %8ld\n", vahdr.cbText);
printf(" cbData: %8ld\n", vahdr.cbData);
printf(" cbBss: %8ld\n", vahdr.cbBss);
printf(" ipdMax: %8ld\n", vahdr.ipdMax);
printf(" cbPdOffset: %8ld\n", vahdr.cbPdOffset);
printf(" ifdMax: %8ld\n", vahdr.ifdMax);
printf(" cbFdOffset: %8ld\n", vahdr.cbFdOffset);
printf(" ilineMax: %8ld\n", vahdr.ilineMax);
printf(" cbLineOffset: %8ld\n", vahdr.cbLineOffset);
printf(" issMax: %8ld\n", vahdr.issMax);
printf(" cbSsOffset: %8ld\n", vahdr.cbSsOffset);
printf(" isymMax: %8ld\n", vahdr.isymMax);
printf(" cbSymOffset: %8ld\n", vahdr.cbSymOffset);
printf(" isymGl: %8ld\n", vahdr.isymGl);
printf(" isymGlMax: %8ld\n", vahdr.isymGlMax);
printf(" iauxMax: %8ld\n", vahdr.iauxMax);
printf(" cbAuxOffset: %8ld\n", vahdr.cbAuxOffset);
vindent = 0;
printf("\n\nSYMBOLS:\n\n");
for (i = 0 ; i < visymMac; i++) {
if (vrgSym[i].st == stEnd)
vindent--;
PrintIndent();
printf("%d. ", i);
PrintSym(vrgSym + i);
} /* for */
printf("\n\nGLOBALS:\n\n");
for (i= 0 ; i < visymGlMac; i++)
PrintSym(vrgSymGlobal + i);
printf("\n\nPROCS:\n\n");
PrintProcs();
printf("\n\nFILES:\n\n");
PrintFiles();
} /* PrintAll */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.