PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 1 ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE ERASE OBJECT MODULE PLACED IN ERA.OBJ COMPILER INVOKED BY: :F0: ERA.PLM XREF OPTIMIZE(3) DEBUG $compact $title ('ERA: Utility to Erase File for MP/M & CCP/M') 1 erase: do; /* Revised: 19 Jan 80 by Thomas Rolander (MP/M 1.1) 19 July 81 by Doug Huskey (MP/M II ) 8 Aug 81 by Danny Horovitz (MP/M-86 ) 31 Jan 83 by Bill Fitler (CCP/M-86 ) */ /* ERA checks if files are open by other users */ $include (:f2:copyrt.lit) = = /* = Copyright (C) 1983 = Digital Research = P.O. Box 579 = Pacific Grove, CA 93950 = */ = $include (:f2:vaxcmd.lit) = = /**** VAX commands for generation - read the name of this program = for PROGNAME below. = = $ util := PROGNAME = $ ccpmsetup ! set up environment = $ assign 'f$directory()' f1: ! use local dir for temp files = $ plm86 'util'.plm xref 'p1' optimize(3) debug = $ link86 f2:scd.obj, 'util'.obj to 'util'.lnk = $ loc86 'util'.lnk od(sm(code,dats,data,stack,const)) - = ad(sm(code(0),dats(10000h))) ss(stack(+32)) to 'util'. = $ h86 'util' = = ***** Then, on a micro: = A>vax progname.h86 $fans = A>gencmd progname data[b1000] = = ***** Notes: Stack is increased for interrupts. Const(ants) are last = to force hex generation. = ****/ $include (:f2:vermpm.lit) = = /* This utility requires MP/M or Concurrent function calls */ = = /****** commented out for CCP/M-86 : PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 2 = declare Ver$OS literally '11h', = Ver$Needs$OS literally '''Requires MP/M-86'''; = ******/ = 2 1 = declare Ver$OS literally '14h', = Ver$Needs$OS literally '''Requires Concurrent CP/M-86'''; = = 3 1 = declare Ver$Mask literally '0fdh'; /* mask out Is_network bit */ = 4 1 = declare Ver$BDOS literally '30h'; /* minimal BDOS version rqd */ = 5 1 declare true literally '1', false literally '0', forever literally 'while true', lit literally 'literally', proc literally 'procedure', dcl literally 'declare', addr literally 'address', cr literally '13', lf literally '10', ctrlc literally '3', ctrlx literally '18h', bksp literally '8'; $include (:f2:proces.lit) = = /* = Proces Literals MP/M-8086 II = */ = 6 1 = declare pnamsiz literally '8'; = 7 1 = declare pd$hdr literally 'structure = (link word,thread word,stat byte,prior byte,flag word, = name (8) byte,uda word,dsk byte,user byte,ldsk byte,luser byte, = mem word'; = 8 1 = declare pd$structure literally 'pd$hdr, = dvract word,wait word,org byte,net byte,parent word, = cns byte,abort byte,conmode word,lst byte,sf3 byte,sf4 byte,sf5 byte, = reservd (4) byte,pret word,scratch word)'; = 9 1 = declare psrun lit '00', = pspoll lit '01', = psdelay lit '02', = psswap lit '03', = psterm lit '04', = pssleep lit '05', = psdq lit '06', = psnq lit '07', = psflagwait lit '08', = psciowait lit '09'; = 10 1 = declare pf$sys lit '00001h', PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 3 = pf$keep lit '00002h', = pf$kernal lit '00004h', = pf$pure lit '00008h', = pf$table lit '00010h', = pf$resource lit '00020h', = pf$raw lit '00040h', = pf$ctlc lit '00080h', = pf$active lit '00100h', = pf$tempkeep lit '00200h', = pf$ctld lit '00400h', = pf$childabort lit '00800h', = pf$noctls lit '01000h'; = 11 1 = declare pcm$11 lit '00001h', = pcm$ctls lit '00002h', = pcm$rout lit '00004h', = pcm$ctlc lit '00008h', = pcm$ctlo lit '00080h', = pcm$rsx lit '00300h'; $include (:f2:uda.lit) = = /* MP/M-86 II User Data Area format - August 8, 1981 */ = 12 1 = declare uda$structure lit 'structure ( = dparam word, = dma$ofst word, = dma$seg word, = func byte, = searchl byte, = searcha word, = searchabase word, = dcnt word, = dblk word, = error$mode byte, = mult$cnt byte, = df$password (8) byte, = pd$cnt byte)'; = 13 1 dcl stack$siz lit '16'; 14 1 dcl int3 lit '0CCCCh'; 15 1 dcl plmstack (stack$siz) word public initial( int3,int3,int3,int3, int3,int3,int3,int3, int3,int3,int3,int3, int3,int3,int3,int3); 16 1 dcl stack$size word public data(stack$siz + stack$siz); /************************************** * * * B D O S INTERFACE * * * **************************************/ 17 1 mon1: procedure (func,info) external; PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 4 18 2 declare func byte; 19 2 declare info address; 20 2 end mon1; 21 1 mon2: procedure (func,info) byte external; 22 2 declare func byte; 23 2 declare info address; 24 2 end mon2; 25 1 mon3: procedure (func,info) address external; 26 2 declare func byte; 27 2 declare info address; 28 2 end mon3; 29 1 mon4: procedure (func,info) pointer external; 30 2 declare func byte; 31 2 declare info address; 32 2 end mon4; 33 1 declare cmdrv byte external; /* command drive */ 34 1 declare fcb (1) byte external; /* 1st default fcb */ 35 1 declare fcb16 (1) byte external; /* 2nd default fcb */ 36 1 declare pass0 address external; /* 1st password ptr */ 37 1 declare len0 byte external; /* 1st passwd length */ 38 1 declare pass1 address external; /* 2nd password ptr */ 39 1 declare len1 byte external; /* 2nd passwd length */ 40 1 declare tbuff (1) byte external; /* default dma buffer */ /************************************** * * * B D O S Externals * * * **************************************/ 41 1 read$console: procedure byte; 42 2 return mon2 (1,0); 43 2 end read$console; 44 1 printchar: procedure(char); 45 2 declare char byte; 46 2 call mon1(2,char); 47 2 end printchar; 48 1 conin: procedure byte; 49 2 return mon2(6,0fdh); 50 2 end conin; PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 5 51 1 check$con$stat: procedure byte; 52 2 return mon2(11,0); 53 2 end check$con$stat; 54 1 print$buf: procedure (buffer$address); 55 2 declare buffer$address address; 56 2 call mon1 (9,buffer$address); 57 2 end print$buf; 58 1 version: procedure address; /* returns current cp/m version # */ 59 2 return mon3(12,0); 60 2 end version; 61 1 setdma: procedure(dma); 62 2 declare dma address; 63 2 call mon1(26,dma); 64 2 end setdma; 65 1 search: procedure (fcb$address) byte; 66 2 declare fcb$address address; 67 2 return mon2 (17,fcb$address); 68 2 end search; 69 1 searchn: procedure byte; 70 2 return mon2 (18,0); 71 2 end searchn; 72 1 delete$file: procedure (fcb$address) address; 73 2 declare fcb$address address; 74 2 return mon3 (19,fcb$address); 75 2 end delete$file; 76 1 get$user$code: procedure byte; 77 2 return mon2 (32,0ffh); 78 2 end get$user$code; /* 0ff => return BDOS errors */ 79 1 return$errors: procedure; 80 2 call mon1 (45,0ffh); 81 2 end return$errors; 82 1 terminate: procedure; 83 2 call mon1 (143,0); 84 2 end terminate; 85 1 declare parse$fn structure ( buff$adr address, PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 6 fcb$adr address); 86 1 declare (saveax,savecx) word external; /* reg return vals, set in mon1 */ 87 1 parse: procedure; 88 2 declare (retcode,errcode) word; 89 2 call mon1(152,.parse$fn); 90 2 retcode = saveax; 91 2 errcode = savecx; 92 2 if retcode = 0ffffh then /* parse returned an error*/ 93 2 do; 94 3 call print$buf(.('Invalid Filespec$')); 95 3 if errcode = 23 then call print$buf(.(' (drive)$')); 97 3 else if errcode = 24 then call print$buf(.(' (filename)$')); 99 3 else if errcode = 25 then call print$buf(.(' (filetype)$')); 101 3 else if errcode = 38 then call print$buf(.(' (password)$')); call print$buf(.('.',13,10,'$')); call terminate; 105 3 end; 106 2 end parse; 107 1 declare pd$pointer pointer, pd based pd$pointer pd$structure; 108 1 declare uda$pointer pointer, uda$ptr structure ( offset word, segment word) at (@uda$pointer), uda based uda$pointer uda$structure; 109 1 get$uda: procedure; 110 2 pd$pointer = mon4(156,0); 111 2 uda$ptr.segment = pd.uda; 112 2 uda$ptr.offset = 0; 113 2 end get$uda; /************************************** * * * GLOBAL VARIABLES * * * **************************************/ 114 1 declare xfcb byte initial(0); 115 1 declare successful lit '0FFh'; /************************************** * * * S U B R O U T I N E S * * * **************************************/ /* upper case character from console */ 116 1 crlf: proc; 117 2 call printchar(cr); 118 2 call printchar(lf); PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 7 119 2 end crlf; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* fill string @ s for c bytes with f */ 120 1 fill: proc(s,f,c); 121 2 dcl s addr, (f,c) byte, a based s byte; 122 2 do while (c:=c-1)<>255; 123 3 a = f; 124 3 s = s+1; 125 3 end; 126 2 end fill; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* error message routine */ 127 1 error: proc(code); 128 2 declare code byte; 129 2 call printchar(' '); 130 2 if code=1 then 131 2 call print$buf(.(cr,lf,'Disk I/O Error.$')); 132 2 if code=2 then 133 2 call print$buf(.(cr,lf,'Drive $')); 134 2 if code = 3 or code = 2 then 135 2 call print$buf(.('Read Only$')); 136 2 if code = 4 then 137 2 call print$buf(.(cr,lf,'Invalid Filespec (drive).$')); 138 2 if code = 5 then 139 2 call print$buf(.('Currently Opened$')); 140 2 if code = 7 then 141 2 call print$buf(.('Password Error$')); 142 2 if code < 3 or code = 4 then 143 2 call terminate; 144 2 end error; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* print file name */ 145 1 print$file: procedure(fcbp); 146 2 declare k byte; 147 2 declare typ lit '9'; /* file type */ 148 2 declare fnam lit '11'; /* file type */ 149 2 declare fcbp addr, fcbv based fcbp (32) byte; 150 2 do k = 1 to fnam; 151 3 if k = typ then 152 3 call printchar('.'); 153 3 call printchar(fcbv(k) and 7fh); 154 3 end; 155 2 end print$file; PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 8 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* try to delete fcb at fcb$address return error code if unsuccessful */ 156 1 delete: procedure(fcb$address) byte; 157 2 declare fcb$address address, fcbv based fcb$address (32) byte, error$code address, code byte; 158 2 if xfcb then 159 2 fcbv(5) = fcbv(5) or 80h; 160 2 call setdma(.fcb16); /* password */ 161 2 fcbv(0) = fcb(0); /* drive */ 162 2 error$code = delete$file(fcb$address); 163 2 fcbv(5) = fcbv(5) and 7fh; /* reset xfcb bit */ 164 2 if low(error$code) = 0FFh then do; 166 3 code = high(error$code); 167 3 if (code=1) or (code=2) or (code=4) then 168 3 call error(code); 169 3 return code; 170 3 end; 171 2 return successful; 172 2 end delete; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* upper case character from console */ 173 1 ucase: proc byte; 174 2 dcl c byte; 175 2 if (c:=conin) >= 'a' then 176 2 if c < '{' then 177 2 return(c-20h); 178 2 return c; 179 2 end ucase; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* get password and place at fcb + 16 */ 180 1 getpasswd: proc; 181 2 dcl (i,c) byte; 182 2 call crlf; 183 2 call print$buf(.('Password ? ','$')); 184 2 retry: call fill(.fcb16,' ',8); 185 2 do i = 0 to 7; 186 3 nxtchr: if (c:=ucase) >= ' ' then 187 3 fcb16(i)=c; 188 3 if c = cr then do; 190 4 call crlf; 191 4 goto exit; PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 9 192 4 end; 193 3 if c = ctrlx then 194 3 goto retry; 195 3 if c = bksp then do; 197 4 if i<1 then 198 4 goto retry; 199 4 else do; 200 5 fcb16(i:=i-1)=' '; 201 5 goto nxtchr; 202 5 end; 203 4 end; 204 3 if c = 3 then 205 3 call terminate; 206 3 end; 207 2 exit: c = check$con$stat; 208 2 end getpasswd; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* try deleting files one at a time */ 209 1 single$file: procedure; 210 2 declare (code,dcnt,sav$searchl) byte; 211 2 declare (fcba,sav$dcnt) addr; 212 2 file$err: procedure; 213 3 call crlf; 214 3 call print$buf(.('Not erased: $')); 215 3 call print$file(fcba); 216 3 call error(code); 217 3 end file$err; 218 2 call setdma(.tbuff); 219 2 dcnt = search(.fcb); 220 2 do while dcnt <> 0ffh; 221 3 fcba = shl(dcnt,5) + .tbuff; 222 3 sav$dcnt = uda.dcnt; 223 3 sav$searchl = uda.searchl; 224 3 if (code:=delete(fcba)) = 7 then do; 226 4 call file$err; 227 4 call getpasswd; 228 4 code = delete(fcba); 229 4 end; 230 3 if code <> successful then 231 3 call file$err; 232 3 call setdma(.tbuff); /* restore dcnt and search length of 11 */ 233 3 uda.dcnt = sav$dcnt; 234 3 uda.searchl = sav$searchl; 235 3 dcnt = searchn; 236 3 end; 237 2 end single$file; /************************************** * * * M A I N P R O G R A M * PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 10 * * **************************************/ 238 1 declare (i,response,user,code) byte; 239 1 declare ver address; 240 1 declare last$dseg$byte byte initial (0); 241 1 plm$start: procedure public; 242 2 ver = version; 243 2 if low(ver) < Ver$BDOS or (high(ver) and Ver$Mask) = 0 then do; 245 3 call print$buf (.(cr,lf,Ver$Needs$OS,'$')); 246 3 call mon1(0,0); 247 3 end; 248 2 parse$fn.buff$adr = .tbuff(1); 249 2 parse$fn.fcb$adr = .fcb; 250 2 user = get$user$code; 251 2 call getuda; /* get uda address */ 252 2 call return$errors; 253 2 if fcb(17) <> ' ' then 254 2 if fcb(17) = 'X' then 255 2 xfcb = true; 256 2 else do; 257 3 call print$buf (.( 'Invalid Command Option.$')); 258 3 call terminate; 259 3 end; 260 2 i = 0; 261 2 do while fcb(i:=i+1) = '?'; 262 3 ; 263 3 end; 264 2 if i > 11 then 265 2 if not xfcb then 266 2 do; 267 3 call print$buf (.( 'Confirm delete all user files (Y/N)?','$')); 268 3 response = read$console; 269 3 if not ((response = 'y') or (response = 'Y')) then call terminate; 271 3 end; 272 2 call parse; 273 2 if (code:=delete(.fcb)) <> successful then do; 275 3 if code = 0 then 276 3 call print$buf (.(cr,lf, 'File Not Found.','$')); 277 3 else if code < 3 or code = 4 then 278 3 call error(code); /* fatal errors */ else 279 3 call single$file; /* single file error */ 280 3 end; 281 2 call terminate; 282 2 end plm$start; PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 11 283 1 end erase; PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 12 CROSS-REFERENCE LISTING ----------------------- DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES ----- ------ ----- -------------------------------- 121 0000H 1 A. . . . . . . . . BYTE BASED(S) 123 107 0021H 1 ABORT. . . . . . . BYTE MEMBER(PD) 5 ADDR . . . . . . . LITERALLY 121 149 211 5 BKSP . . . . . . . LITERALLY 195 85 0000H 2 BUFFADR. . . . . . WORD MEMBER(PARSEFN) 248 54 0004H 2 BUFFERADDRESS. . . WORD PARAMETER AUTOMATIC 55 56 181 003DH 1 C. . . . . . . . . BYTE 186 187 188 193 195 204 207 120 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 121 122 174 003BH 1 C. . . . . . . . . BYTE 175 176 177 178 44 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 45 46 51 0033H 15 CHECKCONSTAT . . . PROCEDURE BYTE STACK=0008H 207 33 0000H 1 CMDRV. . . . . . . BYTE EXTERNAL(4) 107 0020H 1 CNS. . . . . . . . BYTE MEMBER(PD) 157 003AH 1 CODE . . . . . . . BYTE 166 167 168 169 238 0044H 1 CODE . . . . . . . BYTE 273 275 277 278 127 0004H 1 CODE . . . . . . . BYTE PARAMETER AUTOMATIC 128 130 132 134 136 138 140 142 210 003EH 1 CODE . . . . . . . BYTE 216 224 228 230 48 0024H 15 CONIN. . . . . . . PROCEDURE BYTE STACK=0008H 175 107 0022H 2 CONMODE. . . . . . WORD MEMBER(PD) 5 CR . . . . . . . . LITERALLY 117 131 133 137 188 245 276 116 015AH 17 CRLF . . . . . . . PROCEDURE STACK=000EH 182 190 213 5 CTRLC. . . . . . . LITERALLY 5 CTRLX. . . . . . . LITERALLY 193 108 000EH 2 DBLK . . . . . . . WORD MEMBER(UDA) 5 DCL. . . . . . . . LITERALLY 210 003FH 1 DCNT . . . . . . . BYTE 219 220 221 235 108 000CH 2 DCNT . . . . . . . WORD MEMBER(UDA) 222 233 156 0233H 91 DELETE . . . . . . PROCEDURE BYTE STACK=0016H 224 228 273 72 0090H 16 DELETEFILE . . . . PROCEDURE WORD STACK=000AH 162 108 0012H 8 DFPASSWORD . . . . BYTE ARRAY(8) MEMBER(UDA) 61 0004H 2 DMA. . . . . . . . WORD PARAMETER AUTOMATIC 62 63 108 0002H 2 DMAOFST. . . . . . WORD MEMBER(UDA) 108 0004H 2 DMASEG . . . . . . WORD MEMBER(UDA) 108 0000H 2 DPARAM . . . . . . WORD MEMBER(UDA) 107 0012H 1 DSK. . . . . . . . BYTE MEMBER(PD) 107 0018H 2 DVRACT . . . . . . WORD MEMBER(PD) 1 0002H ERASE. . . . . . . PROCEDURE STACK=0000H 88 0026H 2 ERRCODE. . . . . . WORD 91 95 97 99 101 127 018BH 112 ERROR. . . . . . . PROCEDURE STACK=0010H 168 216 278 157 0030H 2 ERRORCODE. . . . . WORD 162 164 166 108 0010H 1 ERRORMODE. . . . . BYTE MEMBER(UDA) 207 032FH EXIT . . . . . . . LABEL 191 120 0006H 1 F. . . . . . . . . BYTE PARAMETER AUTOMATIC 121 123 5 FALSE. . . . . . . LITERALLY 34 0000H 1 FCB. . . . . . . . BYTE ARRAY(1) EXTERNAL(5) 161 219 249 253 254 261 273 35 0000H 1 FCB16. . . . . . . BYTE ARRAY(1) EXTERNAL(6) 160 184 187 200 211 0032H 2 FCBA . . . . . . . WORD 215 221 224 228 156 0004H 2 FCBADDRESS . . . . WORD PARAMETER AUTOMATIC 157 159 161 162 163 PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 13 65 0004H 2 FCBADDRESS . . . . WORD PARAMETER AUTOMATIC 66 67 72 0004H 2 FCBADDRESS . . . . WORD PARAMETER AUTOMATIC 73 74 85 0002H 2 FCBADR . . . . . . WORD MEMBER(PARSEFN) 249 145 0004H 2 FCBP . . . . . . . WORD PARAMETER AUTOMATIC 149 153 149 0000H 32 FCBV . . . . . . . BYTE BASED(FCBP) ARRAY(32) 153 157 0000H 32 FCBV . . . . . . . BYTE BASED(FCBADDRESS) ARRAY(32) 159 161 163 212 03BAH 29 FILEERR. . . . . . PROCEDURE STACK=0014H 226 231 120 016BH 32 FILL . . . . . . . PROCEDURE STACK=0008H 184 107 0006H 2 FLAG . . . . . . . WORD MEMBER(PD) 148 FNAM . . . . . . . LITERALLY 150 5 FOREVER. . . . . . LITERALLY 29 0000H 1 FUNC . . . . . . . BYTE PARAMETER 30 17 0000H 1 FUNC . . . . . . . BYTE PARAMETER 18 108 0006H 1 FUNC . . . . . . . BYTE MEMBER(UDA) 21 0000H 1 FUNC . . . . . . . BYTE PARAMETER 22 25 0000H 1 FUNC . . . . . . . BYTE PARAMETER 26 180 02AEH 137 GETPASSWD. . . . . PROCEDURE STACK=0012H 227 109 0132H 40 GETUDA . . . . . . PROCEDURE STACK=0008H 251 76 00A0H 15 GETUSERCODE. . . . PROCEDURE BYTE STACK=0008H 250 HIGH . . . . . . . BUILTIN 166 243 238 0041H 1 I. . . . . . . . . BYTE 260 261 264 181 003CH 1 I. . . . . . . . . BYTE 185 187 197 200 21 0000H 2 INFO . . . . . . . WORD PARAMETER 23 17 0000H 2 INFO . . . . . . . WORD PARAMETER 19 25 0000H 2 INFO . . . . . . . WORD PARAMETER 27 29 0000H 2 INFO . . . . . . . WORD PARAMETER 31 14 INT3 . . . . . . . LITERALLY 15 146 0039H 1 K. . . . . . . . . BYTE 150 151 153 240 0045H 1 LASTDSEGBYTE . . . BYTE INITIAL 107 0014H 1 LDSK . . . . . . . BYTE MEMBER(PD) 37 0000H 1 LEN0 . . . . . . . BYTE EXTERNAL(8) 39 0000H 1 LEN1 . . . . . . . BYTE EXTERNAL(10) 5 LF . . . . . . . . LITERALLY 118 131 133 137 245 276 107 0000H 2 LINK . . . . . . . WORD MEMBER(PD) 5 LIT. . . . . . . . LITERALLY 9 10 11 12 13 14 115 147 148 LOW. . . . . . . . BUILTIN 164 243 107 0024H 1 LST. . . . . . . . BYTE MEMBER(PD) 107 0015H 1 LUSER. . . . . . . BYTE MEMBER(PD) 107 0016H 2 MEM. . . . . . . . WORD MEMBER(PD) 17 0000H MON1 . . . . . . . PROCEDURE EXTERNAL(0) STACK=0000H 46 56 63 80 83 89 246 21 0000H MON2 . . . . . . . PROCEDURE BYTE EXTERNAL(1) STACK=0000H 42 49 52 67 70 77 25 0000H MON3 . . . . . . . PROCEDURE WORD EXTERNAL(2) STACK=0000H 59 74 29 0000H MON4 . . . . . . . PROCEDURE POINTER EXTERNAL(3) STACK=0000H 110 108 0011H 1 MULTCNT. . . . . . BYTE MEMBER(UDA) 107 0008H 8 NAME . . . . . . . BYTE ARRAY(8) MEMBER(PD) 107 001DH 1 NET. . . . . . . . BYTE MEMBER(PD) 186 02D4H NXTCHR . . . . . . LABEL 201 108 0000H 2 OFFSET . . . . . . WORD MEMBER(UDAPTR) 112 107 001CH 1 ORG. . . . . . . . BYTE MEMBER(PD) 107 001EH 2 PARENT . . . . . . WORD MEMBER(PD) 87 00CDH 101 PARSE. . . . . . . PROCEDURE STACK=000EH 272 85 0020H 4 PARSEFN. . . . . . STRUCTURE 89 248 249 36 0000H 2 PASS0. . . . . . . WORD EXTERNAL(7) 38 0000H 2 PASS1. . . . . . . WORD EXTERNAL(9) 11 PCM11. . . . . . . LITERALLY PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 14 11 PCMCTLC. . . . . . LITERALLY 11 PCMCTLO. . . . . . LITERALLY 11 PCMCTLS. . . . . . LITERALLY 11 PCMROUT. . . . . . LITERALLY 11 PCMRSX . . . . . . LITERALLY 107 0000H 48 PD . . . . . . . . STRUCTURE BASED(PDPOINTER) 111 108 001AH 1 PDCNT. . . . . . . BYTE MEMBER(UDA) 7 PDHDR. . . . . . . LITERALLY 107 107 0028H 4 PDPOINTER. . . . . POINTER 107 110 111 8 PDSTRUCTURE. . . . LITERALLY 107 10 PFACTIVE . . . . . LITERALLY 10 PFCHILDABORT . . . LITERALLY 10 PFCTLC . . . . . . LITERALLY 10 PFCTLD . . . . . . LITERALLY 10 PFKEEP . . . . . . LITERALLY 10 PFKERNAL . . . . . LITERALLY 10 PFNOCTLS . . . . . LITERALLY 10 PFPURE . . . . . . LITERALLY 10 PFRAW. . . . . . . LITERALLY 10 PFRESOURCE . . . . LITERALLY 10 PFSYS. . . . . . . LITERALLY 10 PFTABLE. . . . . . LITERALLY 10 PFTEMPKEEP . . . . LITERALLY 15 0000H 32 PLMSTACK . . . . . WORD ARRAY(16) PUBLIC INITIAL 241 03D7H 246 PLMSTART . . . . . PROCEDURE PUBLIC STACK=001EH 6 PNAMSIZ. . . . . . LITERALLY 107 002CH 2 PRET . . . . . . . WORD MEMBER(PD) 54 0042H 16 PRINTBUF . . . . . PROCEDURE STACK=000AH 94 96 98 100 102 103 131 133 135 137 139 141 183 214 245 257 267 276 44 0011H 19 PRINTCHAR. . . . . PROCEDURE STACK=000AH 117 118 129 152 153 145 01FBH 56 PRINTFILE. . . . . PROCEDURE STACK=0010H 215 107 0005H 1 PRIOR. . . . . . . BYTE MEMBER(PD) 5 PROC . . . . . . . LITERALLY 116 120 127 173 180 9 PSCIOWAIT. . . . . LITERALLY 9 PSDELAY. . . . . . LITERALLY 9 PSDQ . . . . . . . LITERALLY 9 PSFLAGWAIT . . . . LITERALLY 9 PSNQ . . . . . . . LITERALLY 9 PSPOLL . . . . . . LITERALLY 9 PSRUN. . . . . . . LITERALLY 9 PSSLEEP. . . . . . LITERALLY 9 PSSWAP . . . . . . LITERALLY 9 PSTERM . . . . . . LITERALLY 41 0002H 15 READCONSOLE. . . . PROCEDURE BYTE STACK=0008H 268 107 0028H 4 RESERVD. . . . . . BYTE ARRAY(4) MEMBER(PD) 238 0042H 1 RESPONSE . . . . . BYTE 268 269 88 0024H 2 RETCODE. . . . . . WORD 90 92 184 02BBH RETRY. . . . . . . LABEL 194 198 79 00AFH 15 RETURNERRORS . . . PROCEDURE STACK=0008H 252 120 0008H 2 S. . . . . . . . . WORD PARAMETER AUTOMATIC 121 123 124 211 0034H 2 SAVDCNT. . . . . . WORD 222 233 86 0000H 2 SAVEAX . . . . . . WORD EXTERNAL(12) 90 86 0000H 2 SAVECX . . . . . . WORD EXTERNAL(13) 91 210 0040H 1 SAVSEARCHL . . . . BYTE 223 234 107 002EH 2 SCRATCH. . . . . . WORD MEMBER(PD) 65 0071H 16 SEARCH . . . . . . PROCEDURE BYTE STACK=000AH 219 108 0008H 2 SEARCHA. . . . . . WORD MEMBER(UDA) PL/M-86 COMPILER ERA: UTILITY TO ERASE FILE FOR MP/M & CCP/M PAGE 15 108 000AH 2 SEARCHABASE. . . . WORD MEMBER(UDA) 108 0007H 1 SEARCHL. . . . . . BYTE MEMBER(UDA) 223 234 69 0081H 15 SEARCHN. . . . . . PROCEDURE BYTE STACK=0008H 235 108 0002H 2 SEGMENT. . . . . . WORD MEMBER(UDAPTR) 111 61 0061H 16 SETDMA . . . . . . PROCEDURE STACK=000AH 160 218 232 107 0025H 1 SF3. . . . . . . . BYTE MEMBER(PD) 107 0026H 1 SF4. . . . . . . . BYTE MEMBER(PD) 107 0027H 1 SF5. . . . . . . . BYTE MEMBER(PD) SHL. . . . . . . . BUILTIN 221 209 0337H 131 SINGLEFILE . . . . PROCEDURE STACK=001AH 279 13 STACKSIZ . . . . . LITERALLY 15 16 16 0000H 2 STACKSIZE. . . . . WORD PUBLIC DATA 107 0004H 1 STAT . . . . . . . BYTE MEMBER(PD) 115 SUCCESSFUL . . . . LITERALLY 171 230 273 40 0000H 1 TBUFF. . . . . . . BYTE ARRAY(1) EXTERNAL(11) 218 221 232 248 82 00BEH 15 TERMINATE. . . . . PROCEDURE STACK=0008H 104 143 205 258 270 281 107 0002H 2 THREAD . . . . . . WORD MEMBER(PD) 5 TRUE . . . . . . . LITERALLY 255 147 TYP. . . . . . . . LITERALLY 151 173 028EH 32 UCASE. . . . . . . PROCEDURE BYTE STACK=000CH 186 108 0000H 27 UDA. . . . . . . . STRUCTURE BASED(UDAPOINTER) 222 223 233 234 107 0010H 2 UDA. . . . . . . . WORD MEMBER(PD) 111 108 002CH 4 UDAPOINTER . . . . POINTER 108 222 223 233 234 108 002CH 4 UDAPTR . . . . . . STRUCTURE AT 111 112 12 UDASTRUCTURE . . . LITERALLY 108 238 0043H 1 USER . . . . . . . BYTE 250 107 0013H 1 USER . . . . . . . BYTE MEMBER(PD) 239 0036H 2 VER. . . . . . . . WORD 242 243 4 VERBDOS. . . . . . LITERALLY 243 3 VERMASK. . . . . . LITERALLY 243 2 VERNEEDSOS . . . . LITERALLY 245 2 VEROS. . . . . . . LITERALLY 58 0052H 15 VERSION. . . . . . PROCEDURE WORD STACK=0008H 242 107 001AH 2 WAIT . . . . . . . WORD MEMBER(PD) 114 0038H 1 XFCB . . . . . . . BYTE INITIAL 158 255 265 MODULE INFORMATION: CODE AREA SIZE = 04CDH 1229D CONSTANT AREA SIZE = 012BH 299D VARIABLE AREA SIZE = 0046H 70D MAXIMUM STACK SIZE = 001EH 30D 566 LINES READ 0 PROGRAM ERROR(S) END OF PL/M-86 COMPILATION