AUSAM/source/mac/mac/mac23.c
#include "mac.h"
#include "mac.x"
/*
* Pseudo opcode line listing.
*/
plist(lc)
register int lc;
{
register struct st *q;
register int i;
register int l;
register int ps;
if (!OPTION('l'))
/* no listing required */
return;
ps = intercode.i_op;
/*
* Call header() if at top of page, and instruction
* to be listed is not 'title' or 'eject'.
*/
newpage();
switch (ps) {
case 0: /* dc's */
case 1:
case 2:
case 3:
l = head.h_bu_len;
if (OPTION('h'))
l =/ 4;
else
l =/ 3;
ps = head.dctype[ps].f_len;
printl(8, lc);
printf(" ");
for (i=0; i<ps; i++)
printl(l, *cp++);
/* padding */
i = 20 - (ps * l);
while (i--)
putchar(' ');
break;
case 13: /* dc special */
l = head.h_bu_len;
if (OPTION('h'))
l =/ 4;
else
l =/ 3;
printl(8, lc);
printf(" ");
for (i=0; i<length; i++)
printl(l, *cp++);
i = 20 - (length * l);
while (i-- > 0)
putchar(' ');
break;
case 6: /* align */
case 7: /* org */
case 9: /* ds */
case 10: /* end */
printl(8, lc);
for (i=0; i<23; i++)
putchar(' ');
break;
case 4: /* equ */
case 14: /* struc */
case 15: /* ends */
i = intercode.i_label;
if (i != ERR) {
q = &symtab[i];
printl(8, q->s_value);
}
else
printf(" ");
for (i=0; i<23; i++)
putchar(' ');
break;
case 5: /* global */
for (i=0; i<31; i++)
putchar(' ');
break;
case 8: /* seg */
printf(" %3d", lcntr);
for (i=0; i<26; i++)
putchar(' ');
break;
case 11: /* title */
case 12: /* eject */
getlin();
header();
return;
}
source(); /* print line of source */
return;
}
/*
* Dud line listing - just print source.
*/
tlist(lc)
{
register int i;
register int l;
if (!OPTION('l'))
/* listing not required */
return;
newpage();
if ((l = intercode.i_label) != ERR)
printl(8, lc);
else
printf(" ");
for (i=0; i<23; i++)
putchar(' ');
source();
return;
}
/*
* Opcode listing.
*/
olist(lc)
{
register int i;
register int l;
register int len;
if (!OPTION('l'))
/* listing not required */
return;
newpage();
/* location counter */
printl(8, lc);
printf(" ");
/* instruction */
len = head.h_bu_len;
if (OPTION('h'))
len =/ 4;
else
len =/ 3;
for (i=0; i<length; i++)
printl(len, *cp++);
/* padding */
l = 20 - (length * len);
for (i=0; i<l; i++)
putchar(' ');
/* remainder of line */
source();
return;
}