155 lines
2.2 KiB
C
155 lines
2.2 KiB
C
/*% cc -c -O %
|
|
*/
|
|
#include "vars.h"
|
|
#ifdef PDP11
|
|
typedef long ulong;
|
|
#else
|
|
typedef unsigned long ulong;
|
|
#endif
|
|
int col;
|
|
putdn(i)
|
|
{
|
|
putlong((ulong)i);
|
|
putchar('\n');
|
|
}
|
|
#ifdef PDP11
|
|
/*
|
|
* In version 6, ldiv() is in the library. In version 7, it is separate:
|
|
.globl _ldiv, _ldivr
|
|
_ldiv:
|
|
mov 2(sp), r0
|
|
mov 4(sp), r1
|
|
div 6(sp), r0
|
|
mov r1,_ldivr
|
|
rts pc
|
|
.bss
|
|
_ldivr: .=.+2
|
|
*/
|
|
putlong(i)
|
|
long i;
|
|
{
|
|
register char r;
|
|
extern int ldiv(), ldivr;
|
|
|
|
/* the following pornography saves bundles of memory */
|
|
i = ldiv(i,10);
|
|
r = ldivr + '0';
|
|
if (i)
|
|
putlong(i);
|
|
putchar(r);
|
|
}
|
|
#endif
|
|
#ifndef PDP11
|
|
putlong(i)
|
|
ulong i;
|
|
{
|
|
register r;
|
|
r = i%10;
|
|
i /= 10;
|
|
if(i)
|
|
putlong(i);
|
|
putchar('0'+r);
|
|
}
|
|
#endif
|
|
putl(sp)
|
|
register char *sp;
|
|
{
|
|
listf++;
|
|
puts(sp);
|
|
listf = FALSE;
|
|
}
|
|
puts(sp)
|
|
register char *sp;
|
|
{
|
|
col = 0;
|
|
while (*sp)
|
|
putchar(*sp++);
|
|
putchar('\n');
|
|
}
|
|
display(lf)
|
|
{
|
|
register int *a1;
|
|
register int r;
|
|
register char *p;
|
|
register i;
|
|
int nf;
|
|
listf = (lf == 'l' || lf == 'L');
|
|
nf = (lf == 'P' || lf == 'L');
|
|
lf = listf;
|
|
setdot();
|
|
nonzero();
|
|
a1 = addr1;
|
|
r = (a1 - zero) & 077777;
|
|
do{
|
|
col = 0;
|
|
if(nf){
|
|
putlong((ulong)r++);
|
|
for(i=0; i<NBUFS; i++)
|
|
if((*a1|01) == names[i]){
|
|
putchar('\'');
|
|
putchar(bname[i]);
|
|
}
|
|
listf = 0;
|
|
putchar('\t');
|
|
col = 8;
|
|
listf = lf;
|
|
}
|
|
for(p = getline(*a1++,linebuf);*p;putchar(*p++));
|
|
putchar('\n');
|
|
}while (a1 <= addr2);
|
|
dot = addr2;
|
|
listf = FALSE;
|
|
}
|
|
putct(c){
|
|
putchar(c);
|
|
putchar('\t');
|
|
}
|
|
putchar(c)
|
|
register char c;
|
|
{
|
|
register char *lp;
|
|
|
|
lp = linp;
|
|
if (listf) {
|
|
if (c=='\n') {
|
|
if(linp!=line && linp[-1]==' ') {
|
|
*lp++ = '\\';
|
|
*lp++ = 'n';
|
|
}
|
|
} else {
|
|
if (col >= (72-4-2)) {
|
|
*lp++ = '\\';
|
|
*lp++ = '\n';
|
|
*lp++ = '\t';
|
|
col = 8;
|
|
}
|
|
col++;
|
|
if (c=='\b' || c=='\\' || c=='\t') {
|
|
*lp++ = '\\';
|
|
c = c=='\b'? 'b' : c=='\t'? 't' : '\\';
|
|
col++;
|
|
} else if ((c&0200) || c<' ' || c=='\177') {
|
|
*lp++ = '\\';
|
|
*lp++ = ((c>>6)&03)+'0';
|
|
*lp++ = ((c>>3)&07)+'0';
|
|
c = ( c &07)+'0';
|
|
col += 3;
|
|
}
|
|
}
|
|
}
|
|
*lp++ = c;
|
|
if(c == '\n' || lp >= &line[(sizeof line)-2-4]) {
|
|
linp = lp;
|
|
flush();
|
|
lp = linp;
|
|
}
|
|
linp = lp;
|
|
}
|
|
flush()
|
|
{
|
|
if(linp != line){
|
|
write(1, line, linp-line);
|
|
linp = line;
|
|
}
|
|
}
|