AUSAM/source/S/cdb3.c
#
/*
C debugger - variable group handlers
*/
#include <param.h>
#include <user.h>
#include "cdb.h"
gcom(grp)
{
register struct grpmem *gp1,*gp2;
if (grp>9 || grp<0) {
errflg++;
return;
}
while (*lp==' ' || *lp=='\t')
lp++;
if (*lp=='\n') {
dalloc(group[grp].memptr);
group[grp].memptr = NULL;
return;
}
gp1 = gp2 = NULL;
recur++;
while (expr()) {
if (gp1==NULL)
gp1 = gp2 = alloc(sizeof membr);
else {
gp1->link = alloc(sizeof membr);
gp1 = gp1->link;
}
if (is_auto) {
gp1->adr = pokeval;
gp1->offset = symval;
gp1->fcnnam = fcnstr;
gp1->fcnnam =- 11;
gp1->varnam = symptr;
gp1->varnam =- 12;
} else
gp1->offset = gp1->adr = tdot;
if (*lp=='/') {
lp++;
gp1->mode = *lp++;
} else
gp1->mode = 'o';
gp1->mode =| (symflg<<8);
gp1->link = NULL;
if (*lp==',')
lp++;
is_auto = 0;
}
recur = 0;
if (*lp!='\n' || errflg) {
errflg++;
dalloc(gp2);
return;
}
dalloc(group[grp].memptr);
group[grp].memptr = gp2;
}
grprnt(grp)
{
extern lastype,lastcom;
register struct grpmem *ptr;
printf("\n");
modifier = 0;
ptr = group[grp].memptr;
while (ptr != NULL) {
symflg = ptr->mode>>8;
lastype = ptr->mode&0377;
if (ptr->adr == ptr->offset) {
dot = ptr->adr;
psymoff(dot,010000);
printf("/%c\t",lastype);
} else {
printf("%s:%s/%c\t",ptr->fcnnam,ptr->varnam,lastype);
symval = ptr->offset;
if (localsym(ptr->adr))
dot = ssymval;
else {
printf("???\n");
ptr = ptr->link;
continue;
}
}
switch (lastype) {
case '!':
case 'o':
case 'i':
case 'd':
case 'f':
lastcom = '/';
break;
default:
lastcom = lastype;
}
scommand(1);
ptr = ptr->link;
}
printf("\n");
}
dalloc(p)
{
register struct grpmem *p1,*p2;
p1 = p;
if (p1 == NULL)
return;
do {
p2 = p1->link;
free(p1);
p1 = p2;
} while (p2 != NULL);
}