/* general printing routines ($) */
INT narg
, i
, stat
, name
, limit
;
IF cntflg
==0 THEN cntval
= -1; FI
THEN REP file
[index
++]=lastc
;
IF index
>=63 THEN
error(LONGFIL
); FI
THEN infile
=open(file
,0);
THEN infile
=0; error(NOTOPEN
);
ELSE outfile
=open(file
,1);
THEN outfile
=creat(file
,0644);
ELSE
lseek(outfile
,0L,2);
if (adrval
<2 || adrval
>16) {printf("must have 2 <= radix <= 16"); break;}
printf("radix=%d base ten",radix
=adrval
);
case 'q': case 'Q': case '%':
maxpos
=(adrflg
?adrval
:MAXPOS
);
maxoff
=(adrflg
?adrval
:MAXOFF
);
THEN
printc((i
<=9 ? '0' : 'a'-10) + i
);
printf(" = %Q\n",var
[i
]);
printmap("? map",&txtmap
);
printmap("/ map",&datmap
);
THEN
printf("pcs id = %d\n",pid
);
ELSE
prints("no process\n");
word
=get(adrval
+6,DSP
)&0xFFFF;
THEN
/* 'calls', can figure out argp */
argp
=adrval
+20+((word
>>14)&3); word
&= 0xFFF;
WHILE word DO IF word
&1 THEN argp
+=4; FI word
>>=1; OD
ELSE
/* 'callg', can't tell where argp is */ argp
=frame
;
callpc
=get(frame
+16,DSP
);
ELSE argp
= *(ADDR
*)(((ADDR
)&u
)+AP
);
frame
= *(ADDR
*)(((ADDR
)&u
)+FP
);
callpc
= *(ADDR
*)(((ADDR
)&u
)+PC
);
printf("%.8s(", findsym(callpc
,ISYM
)==-1 ? "?":symbol
.symc
);
narg
= get(argp
,DSP
); IF narg
&~0xFF THEN narg
=0; FI
LOOP IF narg
==0 THEN
break; FI
printf("%R", get(argp
+= 4, DSP
));
IF
--narg
!=0 THEN
printc(','); FI
THEN WHILE
localsym(frame
,argp
)
DO word
=get(localval
,DSP
);
printf("%8t%.8s:%10t", symbol
.symc
);
IF errflg THEN
prints("?\n"); errflg
=0; ELSE
printf("%R\n",word
); FI
callpc
=get(frame
+16, DSP
);
frame
=get(frame
+12, DSP
)&EVEN
;
IF frame
==0 ORF (!adrflg
ANDF (frame
&0xF0000000)!=0x70000000)
IF symp
->symf
==(N_DATA
|N_EXT
) ORF symp
->symf
==(N_BSS
|N_EXT
)
THEN
printf("%.8s:%12t%R\n", symp
->symc
, get(symp
->symv
,DSP
));
frame
=(adrflg
? adrval
: *(ADDR
*)(((ADDR
)&u
)+FP
));
stat
=get(frame
,DSP
); dynam
=get(frame
+2,DSP
); link
=get(frame
+4,DSP
);
THEN
printf("%8O:%8t%-8o,%-8o,%-8o",frame
,stat
,dynam
,link
);
IF stat
==1 THEN
break; FI
IF errflg THEN
error(A68BAD
); FI
IF
get(link
-4,ISP
)!=04767
THEN IF
get(link
-2,ISP
)!=04775
ELSE
/*compute entry point of routine*/
valpr(name
=shorten(link
)+get(link
-2,ISP
),ISYM
);
name
=get(leng(name
-2),ISP
);
printf("%8t\""); limit
=8;
REP word
=get(leng(name
),DSP
); name
+= 2;
lo
=word
&LOBYTE
; hi
=(word
>>8)&LOBYTE
;
PER lo ANDF hi ANDF limit
-- DONE
limit
=4; i
=6; printf("%24targs:%8t");
DO
printf("%8t%o",get(frame
+i
,DSP
)); i
+= 2; OD
printf("breakpoints\ncount%8tbkpt%24tcommand\n");
FOR bkptr
=bkpthead
; bkptr
; bkptr
=bkptr
->nxtbkpt
THEN
printf("%-8.8d",bkptr
->count
);
psymoff(leng(bkptr
->loc
),ISYM
,"%24t");
WHILE
*comptr DO
printc(*comptr
++); OD
printf("%s%12t`%s'\n",s
,(file
<0 ? "-" : (file
==fcor
? corfil
: symfil
)));
printf("b1 = %-16R",amap
->b1
);
printf("e1 = %-16R",amap
->e1
);
printf("f1 = %-16R",amap
->f1
);
printf("\nb2 = %-16R",amap
->b2
);
printf("e2 = %-16R",amap
->e2
);
printf("f2 = %-16R",amap
->f2
);
FOR p
=reglist
; p
< ®list
[24]; p
++
DO
printf("%s%6t%R %16t", p
->rname
, v
= *(ADDR
*)(((ADDR
)&u
)+p
->roffs
));
valpr(v
,(p
->roffs
==PC
?ISYM
:DSYM
));
FOR p
=reglist
; p
< ®list
[24]; p
++
DO
IF (regnxt
=readchar()) != *regptr
++
dot
= *(ADDR
*)(((ADDR
)&u
)+PC
);
psymoff(dot
,ISYM
,":%16t"); printins(0,ISP
,chkget(dot
,ISP
));
IF (signo
>=0) ANDF (signo
<=MAXSIG
) THEN
prints(signals
[signo
]); FI