static char sccsid
[] = "%Z%%M% %I% %G%";
"input available (signal)",
/* general printing routines ($) */
INT narg
, i
, stat
, name
, limit
;
register struct nlist
*sp
;
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
);
if (cursym
&& !strcmp(cursym
->n_un
.n_name
, "start"))
printf("%s(", cursym
? cursym
->n_un
.n_name
: "?");
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
printf(") from %X\n",callpc
); /* jkf mod */
THEN WHILE
localsym(frame
,argp
)
DO word
=get(localval
,DSP
);
printf("%8t%s:%10t", cursym
->n_un
.n_name
);
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
!INSTACK(frame
))
for (sp
= symtab
; sp
< esymtab
; sp
++) {
if (sp
->n_type
==(N_DATA
|N_EXT
) ORF sp
->n_type
==(N_BSS
|N_EXT
))
printf("%s:%12t%R\n", sp
->n_un
.n_name
, get(sp
->n_value
,DSP
));
error("No algol 68 on VAX");
printf("breakpoints\ncount%8tbkpt%24tcommand\n");
for (bkptr
=bkpthead
; bkptr
; bkptr
=bkptr
->nxtbkpt
)
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
<sizeof signals
/sizeof signals
[0])
THEN
prints(signals
[signo
]); FI