|
|
1.1 root 1: /* Copyright Bell Telephone Laboratories Whippany, N.J.
2:
3: * ***********************************
4: * ***********************************
5: * ***** LIST THE PROGRAM BUFFER *****
6: * *** R. B. Drake WH 8C-005 X4163 ***
7: * **** Fri Aug 24 17:41:50 1979 *****
8: * ***********************************
9: * ***********************************
10:
11: */
12: /* "@(#) list.c: V 1.1 12/21/80" */
13:
14: #include "bas.h"
15: int start,finish; /* first and last line numbers */
16: int stpflg;
17: extern char linbuf[];
18: stopl()
19: {
20: stpflg = 1;
21: printf("\n%s %d\n","INTERRUPT LINE",inst.thing.linno);
22: signal(2,stopl);
23: }
24: char *expand();
25: static int n;
26: extern int aut,autflg,inc;
27: #define retrn(x) {signal(2,quit);stpflg=0;return(x);}
28: list(opt)
29: int opt;
30: {
31: extern char *lbdptr,*curptr;
32: int quit();
33: /* if there is no expression then list the
34: * entire program */
35:
36: signal(2,stopl);
37: n=0;
38: if(expr[0] == 0)
39: {
40: if(opt != 1)
41: {
42: if(fetch(0,&lbdptr) < 0)
43: {
44: error(0,5);
45: retrn(-1);
46: }
47: prin();
48: }
49: else
50: lbdptr = curptr;
51: while(fetch(-1,&lbdptr) == 0 && stpflg == 0)
52: {
53: prin();
54: if(n==23 && opt == 1) break;
55: }
56: retrn(0);
57: }
58: /* there is an expression so parse it into
59: * start and finish */
60: lnpars();
61: if(fetch(start,&lbdptr) == -1)
62: {
63: error(0,5);
64: retrn(-1);
65: }
66: prin(); /* print the first line */
67: if(inst.thing.linno < finish)
68: while(fetch(-1,&lbdptr) == 0 && stpflg == 0)
69: {
70: if(inst.thing.linno > finish)
71: {
72: lbdptr=curptr;
73: retrn(0);
74: }
75: prin();
76: }
77: retrn(0);
78: }
79: /* print routine */
80:
81: prin()
82: {
83: char *op;
84: int i;
85: n++;
86: expand();
87: printf("%d",inst.thing.linno);
88: if((inst.thing.opcode.hibyte&0377) > 0200)
89: {
90: i=(inst.thing.opcode.hibyte&0377) - 0200;
91: while(i--)
92: printf("\t");
93: }
94: else printf(" ");
95: op = decode(inst.thing.opcode.lobyte);
96: if(op[0] == '\010')
97: printf("%s\n",linbuf);
98: else
99: printf("%s %s\n",op,linbuf);
100: aut = inst.thing.linno;
101: return(0);
102: }
103: char *expand()
104: {
105: char c;
106: char *pt,*strcat(),*carcat(),*lin;
107: int i,quoflg;
108: pt=lin=linbuf;
109: quoflg = 1;
110: for(i=0;i<LINMAX;linbuf[i++]=0);
111: while((c = *expr++) != '\0')
112: {
113: if(c== '"') quoflg *= -1;
114: if((c >= '\001') && ( c <= '\037') && !nocode(inst.thing.opcode.lobyte)
115: && quoflg != -1)
116: {
117: pt=carcat(pt,' ');
118: pt=strcat(pt,keyword[c-1]);
119: pt=carcat(pt,' ');
120: if(c != '\15') /* if non an "=" */
121: lin=pt; /* after the last keyword has been
122: encountered, lin will point to the
123: line number portion of the expression */
124: }
125: else
126: pt=carcat(pt,c);
127: }
128: return(lin); /* return pointer to line number, used by resequence
129: to find referenced line numbers in "if", "goto" etc */
130: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.