1
0
mirror of synced 2026-02-26 16:23:33 +00:00
Files
1985-04-16 21:25:23 +00:00

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;
}
}