Files
Digital-Research-Source-Code/CPM OPERATING SYSTEMS/CPM 86/CONCURRENT/CCPM-86 2.0 SOURCE/sdir/search.lst
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

827 lines
45 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE SEARCH
OBJECT MODULE PLACED IN SEARCH
COMPILER INVOKED BY: :F0: SEARCH.PLM DEBUG OBJECT(SEARCH) OPTIMIZE(3) XREF
$title ('SDIR - Search For Files')
1 search:
do;
/* search module for extended dir */
$include (comlit.lit)
=
2 1 = declare
= lit literally 'literally',
= dcl lit 'declare',
= true lit '0ffh',
= false lit '0',
= boolean lit 'byte',
= forever lit 'while true',
= cr lit '13',
= lf lit '10',
= tab lit '9',
= ctrlc lit '3',
= ff lit '12',
= page$len$offset lit '1ch',
= nopage$mode$offset lit '2Ch',
= sectorlen lit '128';
$include (mon.plm)
=
= /* definitions for assembly interface module */
3 1 = declare
= fcb (33) byte external, /* default file control block */
= maxb address external, /* top of memory */
= buff(128)byte external; /* default buffer */
=
4 1 = mon1: procedure(f,a) external;
5 2 = declare f byte, a address;
6 2 = end mon1;
=
7 1 = mon2: procedure(f,a) byte external;
8 2 = declare f byte, a address;
9 2 = end mon2;
=
10 1 = mon3: procedure(f,a) address external;
11 2 = declare f byte, a address;
12 2 = end mon3;
=
13 1 dcl debug boolean external;
14 1 dcl first$pass boolean external;
15 1 dcl get$all$dir$entries boolean external;
16 1 dcl usr$vector address external;
17 1 dcl active$usr$vector address external;
18 1 dcl used$de address public; /* used directory entries */
19 1 dcl filesfound address public; /* num files collected in memory */
PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 2
$include(fcb.lit)
=
20 1 = declare
= f$drvusr lit '0', /* drive/user byte */
= f$name lit '1', /* file name */
= f$namelen lit '8', /* file name length */
= f$type lit '9', /* file type field */
= f$typelen lit '3', /* type length */
= f$rw lit '9', /* high bit is R/W attribute */
= f$dirsys lit '10', /* high bit is dir/sys attribute */
= f$arc lit '11', /* high bit is archive attribute */
= f$ex lit '12', /* extent */
= f$s1 lit '13', /* module byte */
= f$rc lit '15', /* record count */
= f$diskmap lit '16', /* file disk map */
= diskmaplen lit '16', /* disk map length */
= f$drvusr2 lit '16', /* fcb2 */
= f$name2 lit '17',
= f$type2 lit '25',
= f$cr lit '32', /* current record */
= f$rrec lit '33', /* random record */
= f$rreco lit '35'; /* " " overflow */
=
$include(xfcb.lit)
=
21 1 = declare /* XFCB */
= xfcb$type lit '10h', /* identifier on disk */
= xf$passmode lit '12', /* pass word protection mode */
= xf$pass lit '16', /* XFCB password */
= passlen lit '8', /* password length */
= xf$create lit '24', /* creation/access time stamp */
= xf$update lit '28'; /* update time stamp */
=
22 1 = declare /* directory label: special case of XFCB */
= dirlabeltype lit '20h', /* identifier on disk */
= dl$password lit '128', /* masks on data byte */
= dl$access lit '64',
= dl$update lit '32',
= dl$makexfcb lit '16',
= dl$exists lit '1';
=
23 1 = declare /* password mode of xfcb */
= pm$read lit '80h',
= pm$write lit '40h',
= pm$delete lit '20h';
=
24 1 declare
sfcb$type lit '21H',
deleted$type lit '0E5H';
$include (search.lit)
=
25 1 = declare /* what kind of file user wants to find */
= find$structure lit 'structure (
= dir byte,
PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 3
= sys byte,
= ro byte,
= rw byte,
= pass byte,
= xfcb byte,
= nonxfcb byte,
= exclude byte)';
=
26 1 = declare
= max$search$files literally '10';
=
27 1 = declare
= search$structure lit 'structure(
= drv byte,
= name(8) byte,
= type(3) byte,
= anyfile boolean)'; /* match on any drive if true */
=
28 1 dcl find find$structure external; /* what kind of files to look for */
29 1 dcl num$search$files byte external;
30 1 dcl search (max$search$files) search$structure external;
/* file specs to match on */
/* other globals */
31 1 dcl cur$usr byte external,
cur$drv byte external, /* current drive " " */
dir$label byte public; /* directory label for BDOS 3.0 */
/* -------- BDOS calls -------- */
32 1 read$char: procedure byte;
33 2 return mon2 (1,0);
34 2 end read$char;
/* -------- in sort.plm -------- */
35 1 mult23: procedure(f$info$index) address external;
36 2 dcl f$info$index address;
37 2 end mult23;
/* -------- in util.plm -------- */
38 1 print: procedure(string$adr) external;
39 2 dcl string$adr address;
40 2 end print;
41 1 print$char: procedure(char) external;
42 2 dcl char byte;
43 2 end print$char;
44 1 pdecimal:procedure(val,prec,zsup) external;
45 2 dcl (val, prec) address;
46 2 dcl zsup boolean;
PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 4
47 2 end pdecimal;
48 1 printfn: procedure(fnameadr) external;
49 2 dcl fnameadr address;
50 2 end printfn;
51 1 crlf: procedure external; /* print carriage return, linefeed */
52 2 end crlf;
53 1 add3byte: procedure(byte3adr,num) external;
54 2 dcl (byte3adr,num) address;
55 2 end add3byte;
/* add three byte number to 3 byte accumulater */
56 1 add3byte3: procedure(totalb,numb) external;
57 2 dcl (totalb,numb) address;
58 2 end add3byte3;
/* divide 3 byte value by 8 */
59 1 shr3byte: procedure(byte3adr) external;
60 2 dcl byte3adr address;
61 2 end shr3byte;
/* -------- In dpb86.plm -------- */
$include(dpb.lit)
=
= /* indices into disk parameter block, used as parameters to dpb procedure */
=
62 1 = dcl spt$w lit '0',
= blkshf$b lit '2',
= blkmsk$b lit '3',
= extmsk$b lit '4',
= blkmax$w lit '5',
= dirmax$w lit '7',
= dirblk$w lit '9',
= chksiz lit '11',
= offset$w lit '13';
=
63 1 dcl k$per$block byte external; /* set in dpb module */
64 1 base$dpb: procedure external;
65 2 end base$dpb;
66 1 dpb$byte: procedure(param) byte external;
67 2 dcl param byte;
68 2 end dpb$byte;
69 1 dpb$word: procedure(param) address external;
70 2 dcl param byte;
71 2 end dpb$word;
/* -------- Some Utility Routines -------- */
72 1 check$console$status: procedure byte;
PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 5
73 2 return mon2 (11,0);
74 2 end check$console$status;
75 1 search$first: procedure (fcb$address) byte public;
76 2 declare fcb$address address; /* shared with disp.plm */
77 2 return mon2 (17,fcb$address); /* for short display */
78 2 end search$first;
79 1 search$next: procedure byte public; /* shared with disp.plm */
80 2 return mon2 (18,0);
81 2 end search$next;
82 1 terminate: procedure external; /* in main.plm */
83 2 end terminate;
84 1 set$vec: procedure(vector,value) external; /* in main.plm */
85 2 dcl vector address,
value byte;
86 2 end set$vec;
/*break: procedure public; shared with disp.plm */
/* dcl x byte;
if check$console$status then
do;
x = read$char;
call terminate;
end;
end break;*/
/* -------- file information record declaration -------- */
$include(finfo.lit)
=
= /* file info record for SDIR - note if this structure changes in size */
= /* the multXX: routine in the sort.plm module must also change */
=
87 1 = declare
= f$info$structure lit 'structure(
= usr byte, name (8) byte, type (3) byte, onekblocks address,
= kbytes address, recs$lword address, recs$hbyte byte,
= hash$link address, x$i$adr address)';
88 1 = declare
= x$info$structure lit 'structure (
= create (4) byte,
= update (4) byte,
= passmode byte)';
=
89 1 declare
buf$fcb$adr address public, /* index into directory buffer */
buf$fcb based buf$fcb$adr (32) byte,
/* fcb template for dir */
(first$f$i$adr, f$i$adr, last$f$i$adr) address public,
/* indices into file$info array */
file$info based f$i$adr f$info$structure,
sfcb$adr address,
PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 6
dir$type based sfcb$adr byte,
sfcbs$present byte,
x$i$adr address public,
xfcb$info based x$i$adr x$info$structure;
90 1 compare: procedure(length, str1$adr, str2$adr) boolean;
91 2 dcl (length,i) byte,
(str1$adr, str2$adr) address,
str1 based str1$adr (1) byte,
str2 based str2$adr (1) byte;
/* str2 is the possibly wildcarded filename we are looking for */
92 2 do i = 0 to length - 1;
93 3 if ((str1(i) and 7fh) <> (str2(i) and 7fh)) and str2(i) <> '?' then
94 3 return(false);
95 3 end;
96 2 return(true);
97 2 end compare;
98 1 match: procedure boolean public;
99 2 dcl i byte,
temp address;
100 2 if (i := (buf$fcb(f$drvusr) and 0fh)) <> cur$usr then
101 2 if not get$all$dir$entries then /* Not looking for this user */
102 2 return(false); /* and not buffering all other*/
else /* specified user files on */
103 2 do; temp = 0; /* this drive. */
105 3 call set$vec(.temp,i);
106 3 if (temp and usr$vector) = 0 then /* Getting all dir entries, */
107 3 return(false); /* with user number corresp'g */
108 3 end; /* to a bit on in usr$vector */
109 2 if usr$vector <> 0 and i <> 0 and first$pass <> 0 then
110 2 call set$vec(.active$usr$vector,i); /* skip cur$usr files */
/* build active usr vector for this drive */
111 2 do i = 0 to num$search$files - 1;
112 3 if search(i).drv = 0ffh or search(i).drv = cur$drv then
/* match on any drive if 0ffh */
113 3 if search(i).anyfile = true then
114 3 return(not find.exclude); /* file found */
115 3 else if compare(11,.buf$fcb(f$name),.search(i).name(0)) then
116 3 return(not find.exclude); /* file found */
end;
118 2 return(find.exclude); /* file not found */
119 2 end match; /* find.exclude = the exclude option value */
120 1 dcl hash$table$size lit '128', /* must be power of 2 */
hash$table (hash$table$size) address at (.memory),
/* must be initialized on each*/
hash$entry$adr address, /* disk scan */
hash$entry based hash$entry$adr address; /* where to put a new entry's */
/* address */
121 1 hash$look$up: procedure boolean;
122 2 dcl (i,found,hash$index) byte;
123 2 hash$index = 0;
PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 7
124 2 do i = f$name to f$namelen + f$typelen;
125 3 hash$index = hash$index + (buf$fcb(i) and 7fh); /* attributes may */
126 3 end; /* only be set w/ 1st extent */
127 2 hash$index = hash$index + cur$usr;
128 2 hash$index = hash$index and (hash$table$size - 1);
129 2 hash$entry$adr = .hash$table(hash$index); /* put new entry in table if */
130 2 f$i$adr = hash$table(hash$index); /* unused ( = 0) */
131 2 found = false;
132 2 do while f$i$adr <> 0 and not found;
133 3 if file$info.usr = (buf$fcb(f$drvusr) and 0fh) and
compare(f$namelen + f$typelen,.file$info.name(0),.buf$fcb(f$name))
then
134 3 found = true;
else /* table entry used - collison */
135 3 do; hash$entry$adr = .file$info.hash$link; /* resolve by linked */
137 4 f$i$adr = file$info.hash$link; /* list */
138 4 end;
139 3 end;
140 2 if f$i$adr = 0 then
141 2 return(false); /* didn't find it, used hash$entry to keep new info */
142 2 else return(true); /* found it, file$info at matched entry */
143 2 end hash$look$up;
PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 8
$eject
144 1 store$file$info: procedure boolean;
/* Look for file name of last found fcb or xfcb in fileinfo */
/* array, if not found put name in fileinfo array. Copy other */
/* info to fileinfo or xfcbinfo. The lookup is hash coded with */
/* collisions handled by linking up file$info records through */
/* the hash$link field of the previous file$info record. */
/* The file$info array grows upward in memory and the xfcbinfo */
/* grows downward. */
/*
-------------------------<---.memory
__ | HASH TABLE |
hash = \ of filename -->| root of file$info list|------------>-----------|
func /__ letters | . | |
| . | |
lower memory ------------------------- <-- first$f$i$adr |
| file$info entry | |
(hash) -----<--| . | <----------------------|
(collision) | | . |
------->| . |
| . |-------------------->|
| last file$info entry | <- last$f$i$adr |
|-----------------------| |
| | |
| | |
| unused by dsearch, | |
| used by dsort | |
| for indices | |
| | |
| | |
|-----------------------| |
| last$xfcb entry | <- x$i$adr |
| . | |
| . | |
| . | <-------------------|
| first xfcb entry |
|-----------------------|
| un-usuable memory | <- maxb
higher memory ------------------------- */
145 2 dcl (i, j, d$map$cnt) byte,
temp address;
146 2 store$file: procedure;
147 3 call move(f$namelen + f$typelen, .buf$fcb(f$name),.file$info.name);
/* attributes are not in XFCBs to copy again in case */
/* XFCB came first in directory */
148 3 file$info.name(f$arc-1) = file$info.name(f$arc-1) and buf$fcb(f$arc);
/* 0 archive bit if it is 0 in any dir entry */
149 3 d$map$cnt = 0; /* count kilobytes for current dir entry */
150 3 i = 1; /* 1 or 2 byte block numbers ? */
151 3 if dpb$word(blk$max$w) > 255 then
152 3 i = 2;
153 3 do j = f$diskmap to f$diskmap + diskmaplen - 1 by i;
PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 9
154 4 temp = buf$fcb(j);
155 4 if i = 2 then /* word block numbers */
156 4 temp = temp or buf$fcb(j+1);
157 4 if temp <> 0 then /* allocated */
158 4 d$map$cnt = d$map$cnt + 1;
159 4 end;
160 3 if d$map$cnt > 0 then
161 3 do;
162 4 call add3byte
(.file$info.recs$lword,
d$map$cnt * (dpb$byte(blkmsk$b) + 1) -
( (128 - buf$fcb(f$rc)) and dpb$byte(blkmsk$b) )
);
163 4 file$info.onekblocks = file$info.onekblocks +
d$map$cnt * k$per$block -
shr( (128 - buf$fcb(f$rc)) and dpb$byte(blkmsk$b), 3 );
/* treat each directory entry separately for sparse files */
/* if copied to single density diskette, the number of 1kblocks */
164 4 file$info.kbytes = file$info.kbytes + d$map$cnt * k$per$block;
165 4 end;
166 3 end;
167 2 if buf$fcb(f$drvusr) <> sfcb$type then do; /* don't put SFCB's in table */
169 3 if not hash$look$up then /* not in table already */
/* hash$entry is where to put adr of new entry */
170 3 do; /* copy to new position in file info array */
171 4 if (temp := mult23(files$found + 1)) > x$i$adr then
172 4 return(false); /* out of memory */
173 4 if (temp < first$f$i$adr) then
174 4 return(false); /* wrap around - out of memory */
175 4 f$i$adr = (last$f$i$adr := last$f$i$adr + size(file$info));
176 4 filesfound = filesfound + 1;
177 4 call move(f$namelen + f$typelen, .buf$fcb(f$name),.file$info.name);
178 4 file$info.usr = buf$fcb(f$drvusr) and 0fh;
179 4 file$info.onekblocks,file$info.kbytes,file$info.recs$lword,
file$info.recs$hbyte, file$info.x$i$adr,file$info.hash$link = 0;
180 4 hash$entry = f$i$adr; /* save the address of file$info */
181 4 end; /* zero totals for the new file */
182 3 end;
/* else hash$lookup has set f$i$adr to the file entry already in the */
/* hash table */
183 2 if sfcbs$present then do; /* save sfcb,xfcb or fcb type info */
185 3 if (buf$fcb(f$drvusr) and xfcb$type) = 0 then do;
187 4 if buf$fcb(f$drvusr) <> sfcb$type then do;
189 5 if buf$fcb(f$ex) <= dpb$byte(extmsk$b) then do;
/* first extent? then store sfcb info into xfcb table */
191 6 if last$f$i$adr + size(file$info) > x$i$adr - size(xfcb$info) then
192 6 return(false); /* out of memory */
193 6 x$i$adr = x$i$adr - size(xfcb$info);
194 6 call move(9,sfcb$adr,.xfcb$info.create);
195 6 file$info.x$i$adr = x$i$adr;
196 6 end;
197 5 call store$file;
198 5 end;
199 4 end;
PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 10
200 3 end;
201 2 else do; /* no SFCB's present */
202 3 if (buf$fcb(f$drvusr) and xfcb$type) <> 0 then do; /* XFCB */
204 4 if last$f$i$adr + size(file$info) > x$i$adr - size(xfcb$info) then
205 4 return(false); /* out of memory */
206 4 x$i$adr = x$i$adr - size(xfcb$info);
207 4 call move(8,.buf$fcb(xf$create),.xfcb$info.create);
208 4 xfcb$info.passmode = buf$fcb(xf$passmode);
209 4 file$info.x$i$adr = x$i$adr;
210 4 end;
211 3 else call store$file; /* must be a regular fcb then */
212 3 end;
213 2 return(true); /* success */
214 2 end store$file$info;
/* Module Entry Point */
215 1 get$files: procedure public; /* with one scan through directory get */
216 2 dcl dcnt byte; /* files from currently selected drive */
217 2 last$f$i$adr = first$f$i$adr - size(file$info);
/* after hash table */
/* last$f$i$adr is the address of the highest file info record */
/* in memory */
218 2 do dcnt = 0 to hash$table$size - 1; /* init hash table */
219 3 hash$table(dcnt) = 0;
220 3 end;
221 2 x$i$adr = maxb; /* top of mem, put xfcb info here */
222 2 call base$dpb;
223 2 dir$label,filesfound, used$de = 0;
224 2 fcb(f$drvusr) = '?'; /* match all dir entries */
225 2 dcnt = search$first(.fcb);
226 2 sfcb$adr = 96 + .buff; /* determine if SFCB's are present */
227 2 if dir$type = sfcb$type then
228 2 do;
229 3 sfcbs$present = true;
230 3 used$de = shr(1+dpb$word(dirmax$w),2); /* count all sfcb's once */
231 3 end;
else
232 2 sfcbs$present = false;
233 2 do while dcnt <> 255;
234 3 buf$fcb$adr = shl(dcnt and 11b,5)+.buff; /* dcnt mod 4 * 32 */
235 3 if sfcbs$present then
236 3 sfcb$adr = 97 + (dcnt * 10) + .buff; /* SFCB time & date stamp adr */
237 3 if (buf$fcb(f$drvusr) <> deleted$type) then
238 3 do;
239 4 if (buf$fcb(f$drvusr) <> sfcb$type) then
240 4 used$de = used$de + 1;
241 4 if buf$fcb(f$drvusr) = dirlabel$type then /* dir label ? */
242 4 dir$label = buf$fcb(f$ex); /* save label info */
243 4 else if match then
244 4 do;
245 5 if not store$file$info then /* store fcb or xfcb info */
PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 11
246 5 do; /* out of space */
247 6 call print (.('Out of Memory',cr,lf,'$'));
248 6 return;
249 6 end;
250 5 end;
end;
/*call break;*/
252 3 dcnt = search$next; /* to next entry in directory */
253 3 end; /* of do while dcnt <> 255 */
254 2 end get$files;
255 1 search$init: procedure public; /* called once from main.plm */
256 2 if (first$f$i$adr := (.hash$table + size(hash$table))) + size(file$info)
> maxb then
257 2 do;
258 3 call print(.('Not Enough Memory',cr,lf,'$'));
259 3 call terminate;
260 3 end;
261 2 end search$init;
262 1 end search;
PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 12
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
7 0000H 2 A. . . . . . . . . WORD PARAMETER 8
10 0000H 2 A. . . . . . . . . WORD PARAMETER 11
4 0000H 2 A. . . . . . . . . WORD PARAMETER 5
17 0000H 2 ACTIVEUSRVECTOR. . WORD EXTERNAL(10) 110
53 0000H ADD3BYTE . . . . . PROCEDURE EXTERNAL(22) STACK=0000H 162
56 0000H ADD3BYTE3. . . . . PROCEDURE EXTERNAL(23) STACK=0000H
30 000CH 1 ANYFILE. . . . . . BYTE MEMBER(SEARCH) 113
64 0000H BASEDPB. . . . . . PROCEDURE EXTERNAL(26) STACK=0000H 222
62 BLKMAXW. . . . . . LITERALLY 151
62 BLKMSKB. . . . . . LITERALLY 162 163
62 BLKSHFB. . . . . . LITERALLY
2 BOOLEAN. . . . . . LITERALLY 13 14 15 30 46 90 98 121 144
3 0000H 128 BUFF . . . . . . . BYTE ARRAY(128) EXTERNAL(2) 226 234 236
89 0000H 32 BUFFCB . . . . . . BYTE BASED(BUFFCBADR) ARRAY(32) 100 115 125 133 147 148
154 156 162 163 167 177 178 185 187 189 202 207 208 237
239 241 242
89 0004H 2 BUFFCBADR. . . . . WORD PUBLIC 89 100 115 125 133 147 148 154 156 162
163 167 177 178 185 187 189 202 207 208 234 237 239 241
242
59 0000H 2 BYTE3ADR . . . . . WORD PARAMETER 60
53 0000H 2 BYTE3ADR . . . . . WORD PARAMETER 54
41 0000H 1 CHAR . . . . . . . BYTE PARAMETER 42
72 000FH 15 CHECKCONSOLESTATUS PROCEDURE BYTE STACK=0008H
62 CHKSIZ . . . . . . LITERALLY
90 003DH 65 COMPARE. . . . . . PROCEDURE BYTE STACK=0008H 115 133
2 CR . . . . . . . . LITERALLY 247 258
89 0000H 4 CREATE . . . . . . BYTE ARRAY(4) MEMBER(XFCBINFO) 194 207
51 0000H CRLF . . . . . . . PROCEDURE EXTERNAL(21) STACK=0000H
2 CTRLC. . . . . . . LITERALLY
31 0000H 1 CURDRV . . . . . . BYTE EXTERNAL(15) 112
31 0000H 1 CURUSR . . . . . . BYTE EXTERNAL(14) 100 127
2 DCL. . . . . . . . LITERALLY
216 0020H 1 DCNT . . . . . . . BYTE 218 219 225 233 234 236 252
13 0000H 1 DEBUG. . . . . . . BYTE EXTERNAL(6)
24 DELETEDTYPE. . . . LITERALLY 237
28 0000H 1 DIR. . . . . . . . BYTE MEMBER(FIND)
62 DIRBLKW. . . . . . LITERALLY
31 0016H 1 DIRLABEL . . . . . BYTE PUBLIC 223 242
22 DIRLABELTYPE . . . LITERALLY 241
62 DIRMAXW. . . . . . LITERALLY 230
89 0000H 1 DIRTYPE. . . . . . BYTE BASED(SFCBADR) 227
20 DISKMAPLEN . . . . LITERALLY 153
22 DLACCESS . . . . . LITERALLY
22 DLEXISTS . . . . . LITERALLY
22 DLMAKEXFCB . . . . LITERALLY
22 DLPASSWORD . . . . LITERALLY
22 DLUPDATE . . . . . LITERALLY
145 001FH 1 DMAPCNT. . . . . . BYTE 149 158 160 162 163 164
66 0000H DPBBYTE. . . . . . PROCEDURE BYTE EXTERNAL(27) STACK=0000H 162 163 189
PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 13
69 0000H DPBWORD. . . . . . PROCEDURE WORD EXTERNAL(28) STACK=0000H 151 230
30 0000H 1 DRV. . . . . . . . BYTE MEMBER(SEARCH) 112
28 0007H 1 EXCLUDE. . . . . . BYTE MEMBER(FIND) 114 116 118
62 EXTMSKB. . . . . . LITERALLY 189
4 0000H 1 F. . . . . . . . . BYTE PARAMETER 5
10 0000H 1 F. . . . . . . . . BYTE PARAMETER 11
7 0000H 1 F. . . . . . . . . BYTE PARAMETER 8
2 FALSE. . . . . . . LITERALLY 94 102 107 131 141 172 174 192 205 232
20 FARC . . . . . . . LITERALLY 148
3 0000H 33 FCB. . . . . . . . BYTE ARRAY(33) EXTERNAL(0) 224 225
75 0004H 2 FCBADDRESS . . . . WORD PARAMETER AUTOMATIC 76 77
20 FCR. . . . . . . . LITERALLY
20 FDIRSYS. . . . . . LITERALLY
20 FDISKMAP . . . . . LITERALLY 153
20 FDRVUSR. . . . . . LITERALLY 100 133 167 178 185 187 202 224 237 239 241
20 FDRVUSR2 . . . . . LITERALLY
20 FEX. . . . . . . . LITERALLY 189 242
2 FF . . . . . . . . LITERALLY
89 0008H 2 FIADR. . . . . . . WORD PUBLIC 89 130 132 133 136 137 140 147 148 162
163 164 175 177 178 179 180 195 209
89 0000H 23 FILEINFO . . . . . STRUCTURE BASED(FIADR) 133 136 137 147 148 162 163 164
175 177 178 179 191 195 204 209 217 256
19 0002H 2 FILESFOUND . . . . WORD PUBLIC 171 176 223
28 0000H 8 FIND . . . . . . . STRUCTURE EXTERNAL(11) 114 116 118
25 FINDSTRUCTURE. . . LITERALLY 28
35 0000H 2 FINFOINDEX . . . . WORD PARAMETER 36
87 FINFOSTRUCTURE . . LITERALLY 89
89 0006H 2 FIRSTFIADR . . . . WORD PUBLIC 173 217 256
14 0000H 1 FIRSTPASS. . . . . BYTE EXTERNAL(7) 109
20 FNAME. . . . . . . LITERALLY 115 124 133 147 177
20 FNAME2 . . . . . . LITERALLY
48 0000H 2 FNAMEADR . . . . . WORD PARAMETER 49
20 FNAMELEN . . . . . LITERALLY 124 133 147 177
2 FOREVER. . . . . . LITERALLY
122 001BH 1 FOUND. . . . . . . BYTE 131 132 134
20 FRC. . . . . . . . LITERALLY 162 163
20 FRREC. . . . . . . LITERALLY
20 FRRECO . . . . . . LITERALLY
20 FRW. . . . . . . . LITERALLY
20 FS1. . . . . . . . LITERALLY
20 FTYPE. . . . . . . LITERALLY
20 FTYPE2 . . . . . . LITERALLY
20 FTYPELEN . . . . . LITERALLY 124 133 147 177
15 0000H 1 GETALLDIRENTRIES . BYTE EXTERNAL(8) 101
215 043AH 234 GETFILES . . . . . PROCEDURE PUBLIC STACK=0016H
120 0000H 2 HASHENTRY. . . . . WORD BASED(HASHENTRYADR) 180
120 0012H 2 HASHENTRYADR . . . WORD 120 129 136 180
122 001CH 1 HASHINDEX. . . . . BYTE 123 125 127 128 129 130
89 0013H 2 HASHLINK . . . . . WORD MEMBER(FILEINFO) 136 137 179
121 0146H 189 HASHLOOKUP . . . . PROCEDURE BYTE STACK=000EH 169
120 0000H 256 HASHTABLE. . . . . WORD ARRAY(128) AT 129 130 219 256
120 HASHTABLESIZE. . . LITERALLY 120 128 218
145 001DH 1 I. . . . . . . . . BYTE 150 152 153 155
99 0019H 1 I. . . . . . . . . BYTE 100 105 109 110 111 112 113 115
122 001AH 1 I. . . . . . . . . BYTE 124 125
91 0018H 1 I. . . . . . . . . BYTE 92 93
145 001EH 1 J. . . . . . . . . BYTE 153 154 156
PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 14
89 000EH 2 KBYTES . . . . . . WORD MEMBER(FILEINFO) 164 179
63 0000H 1 KPERBLOCK. . . . . BYTE EXTERNAL(25) 163 164
89 000AH 2 LASTFIADR. . . . . WORD PUBLIC 175 191 204 217
90 0008H 1 LENGTH . . . . . . BYTE PARAMETER AUTOMATIC 91 92
2 LF . . . . . . . . LITERALLY 247 258
2 LIT. . . . . . . . LITERALLY 2 20 21 22 23 24 25 27 62 87 88
120
98 007EH 200 MATCH. . . . . . . PROCEDURE BYTE PUBLIC STACK=000CH 243
3 0000H 2 MAXB . . . . . . . WORD EXTERNAL(1) 221 256
26 MAXSEARCHFILES . . LITERALLY 30
0000H MEMORY . . . . . . BYTE ARRAY(0) 120
4 0000H MON1 . . . . . . . PROCEDURE EXTERNAL(3) STACK=0000H
7 0000H MON2 . . . . . . . PROCEDURE BYTE EXTERNAL(4) STACK=0000H 33 73 77 80
10 0000H MON3 . . . . . . . PROCEDURE WORD EXTERNAL(5) STACK=0000H
MOVE . . . . . . . BUILTIN 147 177 194 207
35 0000H MULT23 . . . . . . PROCEDURE WORD EXTERNAL(16) STACK=0000H 171
89 0001H 8 NAME . . . . . . . BYTE ARRAY(8) MEMBER(FILEINFO) 133 147 148 177
30 0001H 8 NAME . . . . . . . BYTE ARRAY(8) MEMBER(SEARCH) 115
28 0006H 1 NONXFCB. . . . . . BYTE MEMBER(FIND)
2 NOPAGEMODEOFFSET . LITERALLY
53 0000H 2 NUM. . . . . . . . WORD PARAMETER 54
56 0000H 2 NUMB . . . . . . . WORD PARAMETER 57
29 0000H 1 NUMSEARCHFILES . . BYTE EXTERNAL(12) 111
62 OFFSETW. . . . . . LITERALLY
89 000CH 2 ONEKBLOCKS . . . . WORD MEMBER(FILEINFO) 163 179
2 PAGELENOFFSET. . . LITERALLY
69 0000H 1 PARAM. . . . . . . BYTE PARAMETER 70
66 0000H 1 PARAM. . . . . . . BYTE PARAMETER 67
28 0004H 1 PASS . . . . . . . BYTE MEMBER(FIND)
21 PASSLEN. . . . . . LITERALLY
89 0008H 1 PASSMODE . . . . . BYTE MEMBER(XFCBINFO) 208
44 0000H PDECIMAL . . . . . PROCEDURE EXTERNAL(19) STACK=0000H
23 PMDELETE . . . . . LITERALLY
23 PMREAD . . . . . . LITERALLY
23 PMWRITE. . . . . . LITERALLY
44 0000H 2 PREC . . . . . . . WORD PARAMETER 45
38 0000H PRINT. . . . . . . PROCEDURE EXTERNAL(17) STACK=0000H 247 258
41 0000H PRINTCHAR. . . . . PROCEDURE EXTERNAL(18) STACK=0000H
48 0000H PRINTFN. . . . . . PROCEDURE EXTERNAL(20) STACK=0000H
32 0000H 15 READCHAR . . . . . PROCEDURE BYTE STACK=0008H
89 0012H 1 RECSHBYTE. . . . . BYTE MEMBER(FILEINFO) 179
89 0010H 2 RECSLWORD. . . . . WORD MEMBER(FILEINFO) 162 179
28 0002H 1 RO . . . . . . . . BYTE MEMBER(FIND)
28 0003H 1 RW . . . . . . . . BYTE MEMBER(FIND)
1 0000H SEARCH . . . . . . PROCEDURE STACK=0000H
30 0000H 130 SEARCH . . . . . . STRUCTURE ARRAY(10) EXTERNAL(13) 112 113 115
75 001EH 16 SEARCHFIRST. . . . PROCEDURE BYTE PUBLIC STACK=000AH 225
255 0524H 30 SEARCHINIT . . . . PROCEDURE PUBLIC STACK=0006H
79 002EH 15 SEARCHNEXT . . . . PROCEDURE BYTE PUBLIC STACK=0008H 252
27 SEARCHSTRUCTURE. . LITERALLY 30
2 SECTORLEN. . . . . LITERALLY
84 0000H SETVEC . . . . . . PROCEDURE EXTERNAL(30) STACK=0000H 105 110
89 000CH 2 SFCBADR. . . . . . WORD 89 194 226 227 236
89 0017H 1 SFCBSPRESENT . . . BYTE 183 229 232 235
24 SFCBTYPE . . . . . LITERALLY 167 187 227 239
SHL. . . . . . . . BUILTIN 234
SHR. . . . . . . . BUILTIN 163 230
PL/M-86 COMPILER SDIR - SEARCH FOR FILES PAGE 15
59 0000H SHR3BYTE . . . . . PROCEDURE EXTERNAL(24) STACK=0000H
SIZE . . . . . . . BUILTIN 175 191 193 204 206 217 256
62 SPTW . . . . . . . LITERALLY
146 0338H 258 STOREFILE. . . . . PROCEDURE STACK=000CH 197 211
144 0203H 309 STOREFILEINFO. . . PROCEDURE BYTE STACK=0012H 245
91 0000H 1 STR1 . . . . . . . BYTE BASED(STR1ADR) ARRAY(1) 93
90 0006H 2 STR1ADR. . . . . . WORD PARAMETER AUTOMATIC 91 93
91 0000H 1 STR2 . . . . . . . BYTE BASED(STR2ADR) ARRAY(1) 93
90 0004H 2 STR2ADR. . . . . . WORD PARAMETER AUTOMATIC 91 93
38 0000H 2 STRINGADR. . . . . WORD PARAMETER 39
28 0001H 1 SYS. . . . . . . . BYTE MEMBER(FIND)
2 TAB. . . . . . . . LITERALLY
145 0014H 2 TEMP . . . . . . . WORD 154 156 157 171 173
99 0010H 2 TEMP . . . . . . . WORD 104 105 106
82 0000H TERMINATE. . . . . PROCEDURE EXTERNAL(29) STACK=0000H 259
56 0000H 2 TOTALB . . . . . . WORD PARAMETER 57
2 TRUE . . . . . . . LITERALLY 96 113 134 142 213 229
89 0009H 3 TYPE . . . . . . . BYTE ARRAY(3) MEMBER(FILEINFO)
30 0009H 3 TYPE . . . . . . . BYTE ARRAY(3) MEMBER(SEARCH)
89 0004H 4 UPDATE . . . . . . BYTE ARRAY(4) MEMBER(XFCBINFO)
18 0000H 2 USEDDE . . . . . . WORD PUBLIC 223 230 240
89 0000H 1 USR. . . . . . . . BYTE MEMBER(FILEINFO) 133 178
16 0000H 2 USRVECTOR. . . . . WORD EXTERNAL(9) 106 109
44 0000H 2 VAL. . . . . . . . WORD PARAMETER 45
84 0000H 1 VALUE. . . . . . . BYTE PARAMETER 85
84 0000H 2 VECTOR . . . . . . WORD PARAMETER 85
28 0005H 1 XFCB . . . . . . . BYTE MEMBER(FIND)
89 0000H 9 XFCBINFO . . . . . STRUCTURE BASED(XIADR) 191 193 194 204 206 207 208
21 XFCBTYPE . . . . . LITERALLY 185 202
21 XFCREATE . . . . . LITERALLY 207
21 XFPASS . . . . . . LITERALLY
21 XFPASSMODE . . . . LITERALLY 208
21 XFUPDATE . . . . . LITERALLY
89 000EH 2 XIADR. . . . . . . WORD PUBLIC 89 171 191 193 194 195 204 206 207 208
209 221
89 0015H 2 XIADR. . . . . . . WORD MEMBER(FILEINFO) 179 195 209
88 XINFOSTRUCTURE . . LITERALLY 89
44 0000H 1 ZSUP . . . . . . . BYTE PARAMETER 46
MODULE INFORMATION:
CODE AREA SIZE = 0542H 1346D
CONSTANT AREA SIZE = 0024H 36D
VARIABLE AREA SIZE = 0021H 33D
MAXIMUM STACK SIZE = 0016H 22D
553 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION