Digital Research
This commit is contained in:
2020-11-06 18:50:37 +01:00
parent 621ed8ccaf
commit 31738079c4
8481 changed files with 1888323 additions and 0 deletions

View File

@@ -0,0 +1,950 @@
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE DIR
OBJECT MODULE PLACED IN DIRCMD.OBJ
COMPILER INVOKED BY: :F0: DIRCMD.PLM XREF OPTIMIZE(3) DEBUG
$TITLE('CONCURRENT CP/M 86 --- DIR 1.0 ')
$compact
/* Conditional compile:
rsp=0ffh produce a DIR.RSP type of file
rsp=0 produce a DIR.CMD file
*/
$set(rsp=0h)
$include(dirm.plm)
= /* dirm:
= This is the module included by DIRRSP or DIRCMD.
=
= Revised:
= Jan 80 by Thomas Rolander
= July 81 by Doug Huskey
= June 82 by Bill Fitler
= July 82 by Danny Horovitz (made an RSP)
= Dec 82 by Fran Borda (conditional comp)
= Mar 83 by Bill Fitler ( " " )
= Mar 83 by Danny Horovitz (control C fixes)
=
= Conditional compile:
= rsp=0ffh produce a DIR.RSP type of file
= rsp=0 produce a DIR.CMD file
= */
=
= /**** Vax commands to compile DIR.RSP and DIR.CMD:
=
= $ ccpmsetup
= $ plm86 dircmd.plm 'p1' 'p2' 'p3' 'p4' optimize(3) debug
= $ link86 f1:scd.obj, dircmd.obj to dircmd.lnk
= $ loc86 dircmd.lnk od(sm(code,dats,data,stack,const))-
= ad(sm(code(0), dats(10000h))) ss(stack(+32)) to dircmd.
= $ h86 dircmd
= $ ! DIR.RSP
= $ ! Note: separate code and data
= $ asm86 rhdir.a86 !Rsp Header DIR
= $ plm86 dirrsp.plm 'p1' 'p2' 'p3' 'p4' optimize(3) debug
= $ link86 rhdir.obj, dirrsp.obj to dirrsp.lnk
= $ loc86 dirrsp.lnk od(sm(code,dats,data,stack,const))-
= ad(sm(code(0), dats(10000h))) ss(stack(0)) to dirrsp.
= $ h86 dirrsp
=
= **** Then, on a micro:
= A>vax dircmd.h86 $fans
= A>vax dirrsp.h86 $fans
= A>gencmd dircmd data[b1000]
= A>ren dir.cmd=dircmd.cmd
= A>gencmd dirrsp data[b1000]
= A>ren dir.rsp=dirrsp.cmd
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 2
=
= **** Notes: Both DIRCMD.PLM and DIRRSP.PLM include DIRM.PLM, after setting
= RSP flag appropriately.
=
= ****/
=
=
1 = dir:
= do;
=
= $include (:f1:copyrt.lit)
=1
=1 /*
=1 Copyright (C) 1983
=1 Digital Research
=1 P.O. Box 579
=1 Pacific Grove, CA 93950
=1 */
=1
=
= $include (:f1:comlit.lit)
=1
2 1 =1 declare
=1 lit literally 'literally',
=1 dcl lit 'declare',
=1 true lit '0ffh',
=1 false lit '0',
=1 no lit 'not',
=1 boolean lit 'byte',
=1 forever lit 'while true',
=1 cr lit '13',
=1 lf lit '10',
=1 tab lit '9',
=1 ctrlc lit '3',
=1 ff lit '12',
=1 page$len$offset lit '1ch',
=1 nopage$mode$offset lit '2Ch',
=1 sectorlen lit '128';
=
= $include (:f1:mfunc.lit)
=1
=1 /* Concurrent CP/M function numbers */
=1
3 1 =1 dcl m$prtbuf lit '9',
=1 m$select lit '14',
=1 m$openf lit '15',
=1 m$closef lit '16',
=1 m$deletef lit '19',
=1 m$readf lit '20',
=1 m$writef lit '21',
=1 m$makef lit '22',
=1 m$getlogin lit '24',
=1 m$curdsk lit '25',
=1 m$setdma lit '26',
=1 m$setatt lit '30',
=1 m$setusr lit '32',
=1 m$readrf lit '33',
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 3
=1 m$writerf lit '34',
=1 m$resetdrv lit '37',
=1 m$errmode lit '45',
=1 m$dirbios lit '50',
=1 m$makeq lit '134',
=1 m$openq lit '135',
=1 m$deleteq lit '136',
=1 m$readq lit '137',
=1 m$creadq lit '138',
=1 m$writeq lit '139',
=1 m$cwriteq lit '140',
=1 m$delay lit '141',
=1 m$dispatch lit '142',
=1 m$setprior lit '145',
=1 m$attach lit '146',
=1 m$detach lit '147',
=1 m$setcns lit '148',
=1 m$parse lit '152',
=1 m$getcns lit '153',
=1 m$sysdat lit '154',
=1 m$getpd lit '156',
=1 m$abort lit '157';
=1
=1 /* Internal calls */
=1
4 1 =1 dcl mi$sleep lit '0212H',
=1 mi$wakeup lit '0213H';
=1
=
= $include (:f1:proces.lit)
=1
=1 /*
=1 Proces Literals MP/M-8086 II
=1 */
=1
5 1 =1 declare pnamsiz literally '8';
=1
6 1 =1 declare pd$hdr literally 'structure
=1 (link word,thread word,stat byte,prior byte,flag word,
=1 name (8) byte,uda word,dsk byte,user byte,ldsk byte,luser byte,
=1 mem word';
=1
7 1 =1 declare pd$structure literally 'pd$hdr,
=1 dvract word,wait word,org byte,net byte,parent word,
=1 cns byte,abort byte,conmode word,lst byte,sf3 byte,sf4 byte,sf5 byte,
=1 reservd (4) byte,pret word,scratch word)';
=1
8 1 =1 declare psrun lit '00',
=1 pspoll lit '01',
=1 psdelay lit '02',
=1 psswap lit '03',
=1 psterm lit '04',
=1 pssleep lit '05',
=1 psdq lit '06',
=1 psnq lit '07',
=1 psflagwait lit '08',
=1 psciowait lit '09';
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 4
=1
9 1 =1 declare pf$sys lit '00001h',
=1 pf$keep lit '00002h',
=1 pf$kernal lit '00004h',
=1 pf$pure lit '00008h',
=1 pf$table lit '00010h',
=1 pf$resource lit '00020h',
=1 pf$raw lit '00040h',
=1 pf$ctlc lit '00080h',
=1 pf$active lit '00100h',
=1 pf$tempkeep lit '00200h',
=1 pf$ctld lit '00400h',
=1 pf$childabort lit '00800h',
=1 pf$noctls lit '01000h';
=1
10 1 =1 declare pcm$11 lit '00001h',
=1 pcm$ctls lit '00002h',
=1 pcm$rout lit '00004h',
=1 pcm$ctlc lit '00008h',
=1 pcm$ctlo lit '00080h',
=1 pcm$rsx lit '00300h';
=
= $include (:f1:qd.lit)
=1
=1 /* Queue Descriptor */
=1
11 1 =1 dcl qnamsiz lit '8';
=1
12 1 =1 dcl qd$structure lit 'structure(
=1 link word,
=1 net byte,
=1 org byte,
=1 flags word,
=1 name(qnamsiz) byte,
=1 msglen word,
=1 nmsgs word,
=1 dq word,
=1 nq word,
=1 msgcnt word,
=1 msgout word,
=1 buffer word)';
=1
=1 /* queue flag values */
=1
13 1 =1 dcl qf$mx lit '001h'; /* Mutual Exclusion */
14 1 =1 dcl qf$keep lit '002h'; /* NO DELETE */
15 1 =1 dcl qf$hide lit '004h'; /* Not User writable */
16 1 =1 dcl qf$rsp lit '008h'; /* rsp queue */
17 1 =1 dcl qf$table lit '010h'; /* from qd table */
18 1 =1 dcl qf$rpl lit '020h'; /* rpl queue */
19 1 =1 dcl qf$dev lit '040h'; /* device queue */
=1
=1 /* Queue Parameter Block */
=1
20 1 =1 dcl qpb$structure lit 'structure(
=1 flgs byte,
=1 net byte,
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 5
=1 qaddr word,
=1 nmsgs word,
=1 buffptr word,
=1 name (qnamsiz) byte )';
=1
=
= /**************************************
= * *
= * B D O S INTERFACE *
= * *
= **************************************/
=
=
21 1 = mon1:
= procedure (func,info) external;
22 2 = declare func byte;
23 2 = declare info address;
24 2 = end mon1;
=
25 1 = mon2:
= procedure (func,info) byte external;
26 2 = declare func byte;
27 2 = declare info address;
28 2 = end mon2;
=
29 1 = mon3:
= procedure (func,info) address external;
30 2 = declare func byte;
31 2 = declare info address;
32 2 = end mon3;
=
33 1 = mon4:
= procedure (func,info) pointer external;
34 2 = declare func byte;
35 2 = declare info address;
36 2 = end mon4;
=
=
=
37 1 = patch: procedure public; /* dummy area for patching code segments */
38 2 = declare i address;
= /* first statement = 9 bytes, rest are 5 bytes */
39 2 = i=i+5; i=i+5; i=i+5; i=i+5; i=i+5;
44 2 = i=i+5; i=i+5; i=i+5; i=i+5; i=i+5;
49 2 = i=i+5; i=i+5; i=i+5; i=i+5; i=i+5; /* about 79 bytes */
54 2 = end patch;
=
=
= $if rsp
= declare fcb (36) byte; /* 1st default fcb */
= declare fcb16 (1) byte at (@fcb(16)); /* 2nd default fcb */
= $else
55 1 = declare fcb (1) byte external; /* 1st default fcb */
56 1 = declare fcb16 (1) byte external; /* 2nd default fcb */
= $endif
=
57 1 = write$console:
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 6
= procedure (char);
58 2 = declare char byte;
59 2 = call mon1 (2,char);
60 2 = end write$console;
=
61 1 = print$buf:
= procedure (buffer$address);
62 2 = declare buffer$address address;
63 2 = call mon1 (9,buffer$address);
64 2 = end print$buf;
=
65 1 = check$ctrl$c:
= procedure byte;
= $if rsp
= if (dir$pd.flag and pf$ctlC) <> 0 then
= do;
= dir$pd.flag = dir$pd.flag and not double(pf$ctlC);
= return(true);
= end;
= $endif
66 2 = return (false);
67 2 = end check$ctrl$c;
=
68 1 = search$first:
= procedure (fcb$address) byte;
69 2 = declare fcb$address address;
70 2 = return mon2 (17,fcb$address);
71 2 = end search$first;
=
72 1 = search$next:
= procedure (fcb$address) byte;
73 2 = declare fcb$address address;
74 2 = return mon2 (18,fcb$address);
75 2 = end search$next;
=
76 1 = setdma: procedure(dma);
77 2 = declare dma address;
78 2 = call mon1(26,dma);
79 2 = end setdma;
=
=
80 1 = get$user$code:
= procedure byte;
81 2 = return mon2 (32,0ffh);
82 2 = end get$user$code;
=
83 1 = set$user$code:
= procedure(user);
84 2 = declare user byte;
85 2 = call mon1 (32,user);
86 2 = end set$user$code;
=
87 1 = terminate:
= procedure;
88 2 = call mon1 (0,0);
89 2 = end terminate;
=
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 7
90 1 = declare
= parse$fn structure (
= buff$adr address,
= fcb$adr address),
= delimiter based parse$fn.buff$adr byte;
91 1 = declare tail$len address;
=
92 1 = parse: procedure address;
93 2 = return mon3(152,.parse$fn);
94 2 = end parse;
=
=
95 1 = crlf:
= procedure;
96 2 = call write$console (0dh);
97 2 = call write$console (0ah);
98 2 = end crlf;
=
=
= /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
=
=
= * * * GLOBAL VARIABLES * * *
=
=
= * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
=
=
=
99 1 = declare dir$title (*) byte initial
= ('Directory for User x:','$');
=
100 1 = declare (sys,temp,dcnt,cnt,user) byte;
101 1 = declare
= i byte,
= new$user byte,
= sys$exists byte,
= incl$sys byte,
= option byte;
=
102 1 = declare
= dirbuf (128) byte;
=
=
= /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
=
=
= * * * DIRECTORY DISPLAY * * *
=
=
= * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
=
=
= /* display directory heading */
103 1 = heading: procedure;
=
104 2 = if user > 9 then
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 8
105 2 = do;
106 3 = dir$title(19) = '1';
107 3 = dir$title(20) = user - 10 + '0';
108 3 = end;
= else
109 2 = do;
110 3 = dir$title(19) = ' ';
111 3 = dir$title(20) = user + '0';
112 3 = end;
113 2 = call print$buf (.dir$title);
114 2 = end heading;
=
= /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
=
= /*
= help: procedure;
= call mon1(m$prt$buf, .(cr, lf, tab, tab, tab ,'DIR EXAMPLES$'));
= call mon1(m$prt$buf, .(cr, lf, lf, 'dir', tab, tab,
= '(show all directory files on current drive and user)
= call mon1(m$prt$buf, .(cr, lf, 'dir [g3]', tab, tab, tab, tab,
= '(show non system files under user 3)$'));
= call mon1(m$prt$buf, .(cr, lf, 'dir a: b: [s]', tab, tab, tab,
= tab, '(show all files under current user on a: and b:)$'));
= call terminate;
= end help;
= */
=
= /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
=
= /* do next directory display */
115 1 = directory: procedure boolean;
=
116 2 = shown$nothing = false;
117 2 = if new$user then do;
119 3 = call heading;
120 3 = new$user = false;
121 3 = end;
122 2 = sys$exists = false;
123 2 = cnt = -1;
= /* if drive is 0 (default)
= then set to current disk */
124 2 = if fcb(0) = 0
= then fcb(0) = mon2 (m$curdsk,0) + 1;
126 2 = if fcb(1) = ' ' then
= /* check for blank filename => wildcard */
127 2 = do i = 1 to 11;
128 3 = fcb(i) = '?';
129 3 = end;
= /* get first file */
130 2 = if (dcnt := search$first (.fcb)) <> 0ffh then
131 2 = do while dcnt <> 0ffh;
132 3 = temp = shl(dcnt,5);
133 3 = sys = ((dirbuf(temp+10) and 80h) = 80h);
134 3 = if (dirbuf(temp) = user) and
= (incl$sys or not sys) then
135 3 = do;
136 4 = if ((cnt:=cnt+1) mod 4) = 0 then
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 9
137 4 = do;
138 5 = call crlf;
139 5 = call write$console ('A'+fcb(0)-1);
140 5 = end;
= else
141 4 = do;
142 5 = call write$console (' ');
143 5 = end;
144 4 = call write$console (':');
145 4 = call write$console (' ');
146 4 = do i = 1 to 11;
147 5 = if i = 9 then call write$console (' ');
149 5 = call write$console
= (dirbuf(temp+i) and 7fh);
150 5 = if check$ctrl$c then
151 5 = return(false);
152 5 = end;
153 4 = end;
154 3 = else if sys then
155 3 = sys$exists = true;
= dcnt = search$next (.fcb);
157 3 = end;
158 2 = if cnt = -1 then
159 2 = do;
160 3 = call print$buf (.(0dh,0ah,
= 'File not found.','$'));
161 3 = end;
162 2 = if sys$exists then
163 2 = call print$buf (.(0dh,0ah,
= 'System Files Exist','$'));
164 2 = return(true);
165 2 = end directory;
=
= /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
=
=
= * * * PARSING * * *
=
=
= * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
=
=
= /* parse one file name, return true if got one */
166 1 = parse$file: procedure boolean;
167 2 = dcl i address;
168 2 = dcl buf based parse$fn.buff$adr (1) byte;
169 2 = dcl parse$ret address;
=
170 2 = if (parse$ret := parse$fn.buff$adr) = 0 then
171 2 = return(false);
172 2 = fcb(0), i = 0;
173 2 = parse$ret = parse; /* kludge around */
174 2 = do while parse$ret = 0 and buf(i) = '['; /* parse file name bugs */
175 3 = if (i := findb(@buf(i), ']', tail$len - i)) <> 0ffffh then
176 3 = do;
177 4 = parse$fn.buff$adr = .buf(i) + 1; /* skip right bracket */
178 4 = i = 0;
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 10
179 4 = parse$ret = parse;
180 4 = end;
= else
181 3 = buf(i) = 0;
182 3 = end;
183 2 = parse$fn.buff$adr = parse$ret;
=
=
184 2 = if parse$fn.buff$adr <> 0ffffh then
185 2 = do;
186 3 = if fcb(1) <> ' ' then
187 3 = do;
188 4 = if parse$fn.buff$adr <> 0 and delimiter <> '[' and delimiter <> 0 then
189 4 = parse$fn.buff$adr = parse$fn.buff$adr + 1;
190 4 = return(true); /* parse$fn.buff$adr could = 0 */
191 4 = end;
192 3 = else if fcb(0) <> 0 and fcb(1) = ' ' then /* drive spec */
193 3 = do;
194 4 = call setb('?', @fcb(1), 11);
195 4 = return(true);
196 4 = end;
= end;
= else /* if parse$fn.buff$adr = 0ffffh then */
198 2 = do;
199 3 = call print$buf(.(cr, lf, 'Invalid filespec.$'));
200 3 = shown$nothing = false; /* don't show directory */
201 3 = return(false); /* also if parse$fn.buf$adr = 0 and fcb(0) = ' ' */
202 3 = end;
203 2 = end parse$file;
=
=
= /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
=
=
= /* parse & interpret all options - assume global */
204 1 = parse$options: procedure boolean;
205 2 = dcl (n,i) word;
206 2 = dcl (options, in$brackets, error) boolean;
207 2 = i = 0; /* parse file name doesn't work with delimiters */
208 2 = parse$fn.fcb$adr = .dirbuf;
209 2 = error = false;
210 2 = options = true;
211 2 = do while options and not error;
212 3 = if (n := findb(@tbuff(i), '[', tail$len - i)) = 0ffffh then
213 3 = options = false;
= else
214 3 = do;
215 4 = i = i + n + 1;
216 4 = parse$fn.buff$adr = .tbuff(i);
217 4 = in$brackets = true;
218 4 = do while in$brackets and not error;
219 5 = if (parse$fn.buff$adr := parse) <> 0ffffh then
220 5 = do;
221 6 = if dirbuf(1) = 'S' then
222 6 = incl$sys = true;
223 6 = else if dirbuf(1) = 'G' then
224 6 = do;
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 11
225 7 = if dirbuf(3) <> ' ' then
226 7 = temp = dirbuf(3) - '0' + 10;
227 7 = else if dirbuf(2) <> ' ' then
228 7 = temp = dirbuf(2) - '0';
= if temp < 16 then
230 7 = do;
231 8 = call mon1(m$setusr, (user:=temp));
232 8 = new$user = true;
233 8 = end;
234 7 = end;
= else
235 6 = error = true;
236 6 = end; /* if parse */
237 5 = if delimiter = ']' or parse$fn.buff$adr = 0 or
= parse$fn.buff$adr = 0ffffh then
238 5 = in$brackets = false;
239 5 = end; /* while in$brackets */
240 4 = end; /* else */
241 3 = end; /* while options */
=
242 2 = if error then
243 2 = do;
244 3 = call print$buf(.(cr, lf, 'Invalid Command Option$'));
245 3 = return(false);
= /* call help; */
246 3 = end;
247 2 = return(true);
248 2 = end parse$options;
=
=
=
= /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
=
=
= * * * M A I N P R O G R A M * * *
=
=
= * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
=
= $if rsp
= declare cpd$pointer pointer; /* Calling PD pointer stuff */
= declare cpd$ptr structure (
= offset address, segment address) at (@cpd$pointer);
= declare calling$pd based cpd$pointer pd$structure;
= declare dpd$pointer pointer; /* DIR RSP PD pointer stuff */
= declare dpd$ptr structure (
= offset address, segment address) at (@dpd$pointer);
= declare dir$pd based dpd$pointer pd$structure;
= declare qdbuf (131) byte;
= declare dirqd qd$structure initial
= (0, 0, 0, qf$keep + qf$rsp, 'DIR ', 131, 1, 0, 0, 0, 0, .qdbuf);
= declare qpbbuf (131) byte;
= declare cpd$offset address at (@qpbbuf(0));
= declare tbuff (128) byte at (@qpbbuf(2));
= declare dirqpb qpb$structure initial
= (0, 0, 0, 0, .qpbbuf, 'DIR ');
= $else
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 12
249 1 = declare tbuff (128) byte external;
= $endif
=
250 1 = declare shown$nothing boolean;
=
251 1 = plmstart: procedure public;
=
= /* initialization */
=
= $if rsp
= call mon1(m$make$q, .dirqd);
= call mon1(m$open$q, .dirqpb);
= call mon1(m$set$prior, 200); /* Set priority same as other transients*/
= $else
252 2 = user = get$user$code; /* ????? whf */
253 2 = incl$sys = (fcb(1) = 'S'); /* ????? why exclude if rsp? whf */
= $endif
=
254 2 = call setdma(.dirbuf);
= $if rsp
= cpd$pointer,dpd$pointer = mon4(m$sysdat, 0);
= dpd$ptr.offset = mon3(m$getpd,0);
= /* Don't allow control S, turn on tempkeep for control C checking */
= dir$pd.flag = dir$pd.flag or pf$noctls or pf$tempkeep;
= /* Read RSP Queue forever */
= do forever;
= call mon1(m$readq, .dirqpb);
= dir$pd.flag = dir$pd.flag and not double(pf$ctlC);
= /* Could be on from last DIR */
= /* set defaults same as calling process's, have both PDs so will poke */
= /* and not call O.S. */
= cpd$ptr.offset = cpd$offset;
= call mon1(m$setcns, calling$pd.cns);
= call mon1(m$setusr, (user := calling$pd.user));
= call mon1(m$select, calling$pd.dsk);
= $endif
255 2 = new$user = true;
256 2 = sys$exists, incl$sys = false;
257 2 = tail$len = findb(@tbuff, 0, 128);
=
= /* scan for options - all are global */
=
258 2 = if not parse$options then
259 2 = goto done; /* option error */
=
= /* do command line */
=
260 2 = shown$nothing = true;
= $if rsp
= parse$fn.buff$adr = .tbuff;
= $else
261 2 = parse$fn.buff$adr = (.tbuff) + 1;/* Skip # of bytes in buffer */
= $endif
262 2 = parse$fn.fcb$adr = .fcb;
263 2 = do while parse$file; /* false when no more files, sets */
264 3 = if not directory then /* shown$nothing=false if parsing error */
265 3 = goto done; /* directory = false if console inpute */
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 13
266 3 = end;
=
267 2 = if shown$nothing then /* no files specified on command line */
268 2 = do;
269 3 = call setb('?', @fcb(1), 11);
270 3 = if not directory then
271 3 = goto done; /* false on console input */
272 3 = end;
273 2 = done:
= $if rsp
= call mon1(m$detach, 0);
= end; /* do forever */
= $else
= call terminate;
= $endif
=
274 2 = end plmstart;
=
275 1 = end dir;
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 14
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
2 BOOLEAN. . . . . . LITERALLY 115 166 204 206 250
168 0000H 1 BUF. . . . . . . . BYTE BASED(PARSEFN.BUFFADR) ARRAY(1) 174 175 177 181
90 0000H 2 BUFFADR. . . . . . WORD MEMBER(PARSEFN) 90 168 170 174 175 177 181 183 184
188 189 216 219 237 261
61 0004H 2 BUFFERADDRESS. . . WORD PARAMETER AUTOMATIC 62 63
57 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 58 59
65 007AH 7 CHECKCTRLC . . . . PROCEDURE BYTE STACK=0002H 150
100 002AH 1 CNT. . . . . . . . BYTE 123 136 158
2 CR . . . . . . . . LITERALLY 199 244
95 00F0H 17 CRLF . . . . . . . PROCEDURE STACK=000EH 138
2 CTRLC. . . . . . . LITERALLY
2 DCL. . . . . . . . LITERALLY
100 0029H 1 DCNT . . . . . . . BYTE 130 131 132 156
90 0000H 1 DELIMITER. . . . . BYTE BASED(PARSEFN.BUFFADR) 188 237
1 0002H DIR. . . . . . . . PROCEDURE STACK=0000H
102 0031H 128 DIRBUF . . . . . . BYTE ARRAY(128) 133 134 149 208 221 223 225 226 227 228
254
115 012DH 339 DIRECTORY. . . . . PROCEDURE BYTE STACK=0012H 264 270
99 0010H 23 DIRTITLE . . . . . BYTE ARRAY(23) INITIAL 106 107 110 111 113
76 0004H 2 DMA. . . . . . . . WORD PARAMETER AUTOMATIC 77 78
273 04E9H DONE . . . . . . . LABEL 259 265 271
206 00B3H 1 ERROR. . . . . . . BYTE 209 211 218 235 242
2 FALSE. . . . . . . LITERALLY 66 116 120 122 151 171 200 201 209 213 238
245 256
55 0000H 1 FCB. . . . . . . . BYTE ARRAY(1) EXTERNAL(4) 124 125 126 128 130 139 156 172
186 192 194 253 262 269
56 0000H 1 FCB16. . . . . . . BYTE ARRAY(1) EXTERNAL(5)
68 0004H 2 FCBADDRESS . . . . WORD PARAMETER AUTOMATIC 69 70
72 0004H 2 FCBADDRESS . . . . WORD PARAMETER AUTOMATIC 73 74
90 0002H 2 FCBADR . . . . . . WORD MEMBER(PARSEFN) 208 262
2 FF . . . . . . . . LITERALLY
FINDB. . . . . . . BUILTIN 175 212 257
2 FOREVER. . . . . . LITERALLY
33 0000H 1 FUNC . . . . . . . BYTE PARAMETER 34
21 0000H 1 FUNC . . . . . . . BYTE PARAMETER 22
25 0000H 1 FUNC . . . . . . . BYTE PARAMETER 26
29 0000H 1 FUNC . . . . . . . BYTE PARAMETER 30
80 00B1H 15 GETUSERCODE. . . . PROCEDURE BYTE STACK=0008H 252
103 0101H 44 HEADING. . . . . . PROCEDURE STACK=000EH 119
38 0000H 2 I. . . . . . . . . WORD 39 40 41 42 43 44 45 46 47 48 49 50
51 52 53
167 0008H 2 I. . . . . . . . . WORD 172 174 175 177 178 181
101 002CH 1 I. . . . . . . . . BYTE 127 128 146 147 149
205 000EH 2 I. . . . . . . . . WORD 207 212 215 216
206 00B2H 1 INBRACKETS . . . . BYTE 217 218 238
101 002FH 1 INCLSYS. . . . . . BYTE 134 222 253 256
25 0000H 2 INFO . . . . . . . WORD PARAMETER 27
33 0000H 2 INFO . . . . . . . WORD PARAMETER 35
29 0000H 2 INFO . . . . . . . WORD PARAMETER 31
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 15
21 0000H 2 INFO . . . . . . . WORD PARAMETER 23
2 LF . . . . . . . . LITERALLY 199 244
2 LIT. . . . . . . . LITERALLY 2 3 4 8 9 10 11 12 13 14 15
16 17 18 19 20
3 MABORT . . . . . . LITERALLY
3 MATTACH. . . . . . LITERALLY
3 MCLOSEF. . . . . . LITERALLY
3 MCREADQ. . . . . . LITERALLY
3 MCURDSK. . . . . . LITERALLY 125
3 MCWRITEQ . . . . . LITERALLY
3 MDELAY . . . . . . LITERALLY
3 MDELETEF . . . . . LITERALLY
3 MDELETEQ . . . . . LITERALLY
3 MDETACH. . . . . . LITERALLY
3 MDIRBIOS . . . . . LITERALLY
3 MDISPATCH. . . . . LITERALLY
3 MERRMODE . . . . . LITERALLY
3 MGETCNS. . . . . . LITERALLY
3 MGETLOGIN. . . . . LITERALLY
3 MGETPD . . . . . . LITERALLY
4 MISLEEP. . . . . . LITERALLY
4 MIWAKEUP . . . . . LITERALLY
3 MMAKEF . . . . . . LITERALLY
3 MMAKEQ . . . . . . LITERALLY
21 0000H MON1 . . . . . . . PROCEDURE EXTERNAL(0) STACK=0000H 59 63 78 85 88 231
25 0000H MON2 . . . . . . . PROCEDURE BYTE EXTERNAL(1) STACK=0000H 70 74 81 125
29 0000H MON3 . . . . . . . PROCEDURE WORD EXTERNAL(2) STACK=0000H 93
33 0000H MON4 . . . . . . . PROCEDURE POINTER EXTERNAL(3) STACK=0000H
3 MOPENF . . . . . . LITERALLY
3 MOPENQ . . . . . . LITERALLY
3 MPARSE . . . . . . LITERALLY
3 MPRTBUF. . . . . . LITERALLY
3 MREADF . . . . . . LITERALLY
3 MREADQ . . . . . . LITERALLY
3 MREADRF. . . . . . LITERALLY
3 MRESETDRV. . . . . LITERALLY
3 MSELECT. . . . . . LITERALLY
3 MSETATT. . . . . . LITERALLY
3 MSETCNS. . . . . . LITERALLY
3 MSETDMA. . . . . . LITERALLY
3 MSETPRIOR. . . . . LITERALLY
3 MSETUSR. . . . . . LITERALLY 231
3 MSYSDAT. . . . . . LITERALLY
3 MWRITEF. . . . . . LITERALLY
3 MWRITEQ. . . . . . LITERALLY
3 MWRITERF . . . . . LITERALLY
205 000CH 2 N. . . . . . . . . WORD 212 215
101 002DH 1 NEWUSER. . . . . . BYTE 117 120 232 255
2 NO . . . . . . . . LITERALLY
2 NOPAGEMODEOFFSET . LITERALLY
101 0030H 1 OPTION . . . . . . BYTE
206 00B1H 1 OPTIONS. . . . . . BYTE 210 211 213
2 PAGELENOFFSET. . . LITERALLY
92 00E1H 15 PARSE. . . . . . . PROCEDURE WORD STACK=0008H 173 179 219
166 0280H 213 PARSEFILE. . . . . PROCEDURE BYTE STACK=000EH 263
90 0002H 4 PARSEFN. . . . . . STRUCTURE 90 93 168 170 174 175 177 181 183 184 188
189 208 216 219 237 261 262
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 16
204 0355H 269 PARSEOPTIONS . . . PROCEDURE BYTE STACK=000EH 258
169 000AH 2 PARSERET . . . . . WORD 170 173 174 179 183
37 0002H 85 PATCH. . . . . . . PROCEDURE PUBLIC STACK=0002H
10 PCM11. . . . . . . LITERALLY
10 PCMCTLC. . . . . . LITERALLY
10 PCMCTLO. . . . . . LITERALLY
10 PCMCTLS. . . . . . LITERALLY
10 PCMROUT. . . . . . LITERALLY
10 PCMRSX . . . . . . LITERALLY
6 PDHDR. . . . . . . LITERALLY
7 PDSTRUCTURE. . . . LITERALLY
9 PFACTIVE . . . . . LITERALLY
9 PFCHILDABORT . . . LITERALLY
9 PFCTLC . . . . . . LITERALLY
9 PFCTLD . . . . . . LITERALLY
9 PFKEEP . . . . . . LITERALLY
9 PFKERNAL . . . . . LITERALLY
9 PFNOCTLS . . . . . LITERALLY
9 PFPURE . . . . . . LITERALLY
9 PFRAW. . . . . . . LITERALLY
9 PFRESOURCE . . . . LITERALLY
9 PFSYS. . . . . . . LITERALLY
9 PFTABLE. . . . . . LITERALLY
9 PFTEMPKEEP . . . . LITERALLY
251 0462H 140 PLMSTART . . . . . PROCEDURE PUBLIC STACK=0016H
5 PNAMSIZ. . . . . . LITERALLY
61 006AH 16 PRINTBUF . . . . . PROCEDURE STACK=000AH 113 160 163 199 244
8 PSCIOWAIT. . . . . LITERALLY
8 PSDELAY. . . . . . LITERALLY
8 PSDQ . . . . . . . LITERALLY
8 PSFLAGWAIT . . . . LITERALLY
8 PSNQ . . . . . . . LITERALLY
8 PSPOLL . . . . . . LITERALLY
8 PSRUN. . . . . . . LITERALLY
8 PSSLEEP. . . . . . LITERALLY
8 PSSWAP . . . . . . LITERALLY
8 PSTERM . . . . . . LITERALLY
12 QDSTRUCTURE. . . . LITERALLY
19 QFDEV. . . . . . . LITERALLY
15 QFHIDE . . . . . . LITERALLY
14 QFKEEP . . . . . . LITERALLY
13 QFMX . . . . . . . LITERALLY
18 QFRPL. . . . . . . LITERALLY
16 QFRSP. . . . . . . LITERALLY
17 QFTABLE. . . . . . LITERALLY
11 QNAMSIZ. . . . . . LITERALLY
20 QPBSTRUCTURE . . . LITERALLY
68 0081H 16 SEARCHFIRST. . . . PROCEDURE BYTE STACK=000AH 130
72 0091H 16 SEARCHNEXT . . . . PROCEDURE BYTE STACK=000AH 156
2 SECTORLEN. . . . . LITERALLY
SETB . . . . . . . BUILTIN 194 269
76 00A1H 16 SETDMA . . . . . . PROCEDURE STACK=000AH 254
83 00C0H 19 SETUSERCODE. . . . PROCEDURE STACK=000AH
SHL. . . . . . . . BUILTIN 132
250 00B4H 1 SHOWNNOTHING . . . BYTE 116 200 260 267
100 0027H 1 SYS. . . . . . . . BYTE 133 134 154
101 002EH 1 SYSEXISTS. . . . . BYTE 122 155 162 256
PL/M-86 COMPILER CONCURRENT CP/M 86 --- DIR 1.0 PAGE 17
2 TAB. . . . . . . . LITERALLY
91 0006H 2 TAILLEN. . . . . . WORD 175 212 257
249 0000H 128 TBUFF. . . . . . . BYTE ARRAY(128) EXTERNAL(6) 212 216 257 261
100 0028H 1 TEMP . . . . . . . BYTE 132 133 134 149 226 228 229 231
87 00D3H 14 TERMINATE. . . . . PROCEDURE STACK=0008H 273
2 TRUE . . . . . . . LITERALLY 155 164 190 195 210 217 222 232 235 247 255
260
100 002BH 1 USER . . . . . . . BYTE 104 107 111 134 231 252
83 0004H 1 USER . . . . . . . BYTE PARAMETER AUTOMATIC 84 85
57 0057H 19 WRITECONSOLE . . . PROCEDURE STACK=000AH 96 97 139 142 144 145 148 149
MODULE INFORMATION:
CODE AREA SIZE = 04EEH 1262D
CONSTANT AREA SIZE = 0054H 84D
VARIABLE AREA SIZE = 00B5H 181D
MAXIMUM STACK SIZE = 0016H 22D
699 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION