|
|
1.1 root 1: /*% cc -c -O %
2: */
3: #include "vars.h"
4: #ifdef PDP11
5: typedef long ulong;
6: #else
7: typedef unsigned long ulong;
8: #endif
9: int col;
10: putdn(i)
11: {
12: putlong((ulong)i);
13: putchar('\n');
14: }
15: #ifdef PDP11
16: /*
17: * In version 6, ldiv() is in the library. In version 7, it is separate:
18: .globl _ldiv, _ldivr
19: _ldiv:
20: mov 2(sp), r0
21: mov 4(sp), r1
22: div 6(sp), r0
23: mov r1,_ldivr
24: rts pc
25: .bss
26: _ldivr: .=.+2
27: */
28: putlong(i)
29: long i;
30: {
31: register char r;
32: extern int ldiv(), ldivr;
33:
34: /* the following pornography saves bundles of memory */
35: i = ldiv(i,10);
36: r = ldivr + '0';
37: if (i)
38: putlong(i);
39: putchar(r);
40: }
41: #endif
42: #ifndef PDP11
43: putlong(i)
44: ulong i;
45: {
46: register r;
47: r = i%10;
48: i /= 10;
49: if(i)
50: putlong(i);
51: putchar('0'+r);
52: }
53: #endif
54: putl(sp)
55: register char *sp;
56: {
57: listf++;
58: puts(sp);
59: listf = FALSE;
60: }
61: puts(sp)
62: register char *sp;
63: {
64: col = 0;
65: while (*sp)
66: putchar(*sp++);
67: putchar('\n');
68: }
69: display(lf)
70: {
71: register int *a1;
72: register int r;
73: register char *p;
74: register i;
75: int nf;
76: listf = (lf == 'l' || lf == 'L');
77: nf = (lf == 'P' || lf == 'L');
78: lf = listf;
79: setdot();
80: nonzero();
81: a1 = addr1;
82: r = (a1 - zero) & 077777;
83: do{
84: col = 0;
85: if(nf){
86: putlong((ulong)r++);
87: for(i=0; i<NBUFS; i++)
88: if((*a1|01) == names[i]){
89: putchar('\'');
90: putchar(bname[i]);
91: }
92: listf = 0;
93: putchar('\t');
94: col = 8;
95: listf = lf;
96: }
97: for(p = getline(*a1++,linebuf);*p;putchar(*p++));
98: putchar('\n');
99: }while (a1 <= addr2);
100: dot = addr2;
101: listf = FALSE;
102: }
103: putct(c){
104: putchar(c);
105: putchar('\t');
106: }
107: putchar(c)
108: register char c;
109: {
110: register char *lp;
111:
112: lp = linp;
113: if (listf) {
114: if (c=='\n') {
115: if(linp!=line && linp[-1]==' ') {
116: *lp++ = '\\';
117: *lp++ = 'n';
118: }
119: } else {
120: if (col >= (72-4-2)) {
121: *lp++ = '\\';
122: *lp++ = '\n';
123: *lp++ = '\t';
124: col = 8;
125: }
126: col++;
127: if (c=='\b' || c=='\\' || c=='\t') {
128: *lp++ = '\\';
129: c = c=='\b'? 'b' : c=='\t'? 't' : '\\';
130: col++;
131: } else if ((c&0200) || c<' ' || c=='\177') {
132: *lp++ = '\\';
133: *lp++ = ((c>>6)&03)+'0';
134: *lp++ = ((c>>3)&07)+'0';
135: c = ( c &07)+'0';
136: col += 3;
137: }
138: }
139: }
140: *lp++ = c;
141: if(c == '\n' || lp >= &line[(sizeof line)-2-4]) {
142: linp = lp;
143: flush();
144: lp = linp;
145: }
146: linp = lp;
147: }
148: flush()
149: {
150: if(linp != line){
151: write(1, line, linp-line);
152: linp = line;
153: }
154: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.