PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 1 ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE SHOW OBJECT MODULE PLACED IN SHOW.OBJ COMPILER INVOKED BY: :F0: SHOW.PLM XREF OPTIMIZE(3) DEBUG $ TITLE('SHOW 2.1: Show Disk Data') $ COMPACT /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * SHOW * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* Modfification log: Oct 82 whf Version changes CCPM86 v2.0 Nov 82 F.Borda */ $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. = ****/ 1 show: do; 2 1 declare cpmversion literally '20h', /* requires 2.0 cp/m */ cpm3 literally '30h'; 3 1 declare copyright(*) byte data (' Copyright (c) 1983, Digital Research '); PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 2 4 1 declare verdate (*) byte data('10/19/82'); 5 1 declare version (*) byte data ('SHOW 2.1',0); /* m p / m s h o w c o m m a n d */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* show show show show show show */ /* copyright(c) 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983 digital research box 579 pacific grove, ca 93950 */ /* modified 10/30/78 to fix the space computation */ /* modified 01/28/79 to remove despool dependencies */ /* modified 07/26/79 to operate under cp/m 2.0 */ /* modified 01/20/80 by Thomas Rolander */ /* show created 05/19/81 */ /* show modified for MP/M-86 9/4/81, changes in upper case */ /* modified 06/23/82 by Bill Fitler for CCP/M-86 */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MP/M INTERFACE * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 3 /* function call 32 returns the address of the disk parameter block for the currently selected disk, which consists of: scptrk (2 by) number of sectors per track blkshf (1 by) log2 of blocksize (2**blkshf=blksize) blkmsk (1 by) 2**blkshf-1 extmsk (1 by) logical/physical extents maxall (2 by) max alloc number dirmax (2 by) size of directory-1 dirblk (2 by) reservation bits for directory chksiz (2 by) size of checksum vector offset (2 by) offset for operating system */ 6 1 declare maxb address external, /* addr field of jmp BDOS */ fcb (33) byte external, /* default file control block */ buff(128)byte external, /* default buffer */ buffa literally '.buff', /* default buffer */ fcba literally '.fcb', /* default file control block */ dolla literally '.fcb(6dh-5ch)', /* dollar sign position */ parma literally '.fcb(6eh-5ch)', /* parameter, if sent */ rreca literally '.fcb(7dh-5ch)', /* random record 7d,7e,7f */ rreco literally '.fcb(7fh-5ch)', /* high byte of random overflow */ sectorlen literally '128', /* sector length */ memsize literally 'maxb', /* end of memory */ rrec address at(rreca), /* random record address */ rovf byte at(rreco), /* overflow on getfile */ doll byte at(dolla), /* dollar parameter */ parm byte at(parma), /* parameter */ user$code byte, /* current user code */ cversion byte, /* cpm version # */ cdisk byte, /* current disk */ DPBPTR POINTER, /* disk parameter block address */ DPB BASED DPBPTR structure (spt address, bls byte, bms byte, exm byte, mxa address, dmx address, dbl address, cks address, ofs address), scptrk literally 'dpb.spt', blkshf literally 'dpb.bls', blkmsk literally 'dpb.bms', extmsk literally 'dpb.exm', maxall literally 'dpb.mxa', dirmax literally 'dpb.dmx', dirblk literally 'dpb.dbl', chksiz literally 'dpb.cks', offset literally 'dpb.ofs'; 7 1 mon1: procedure(f,a) external; 8 2 declare f byte, a address; 9 2 end mon1; 10 1 mon2: procedure(f,a) byte external; 11 2 declare f byte, a address; 12 2 end mon2; PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 4 /* declare mon3 literally 'mon2a'; */ 13 1 mon3: procedure(f,a) address external; 14 2 declare f byte, a address; 15 2 end mon3; 16 1 MON4: PROCEDURE(F,A) POINTER EXTERNAL; 17 2 DECLARE F BYTE, A ADDRESS; 18 2 END MON4; 19 1 declare alloca address, /* alloca is the address of the disk allocation vector */ alloc based alloca (1024) byte; /* allocation vector */ 20 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'; 21 1 printchar: procedure(char); 22 2 declare char byte; 23 2 call mon1(2,char); 24 2 end printchar; 25 1 printb: procedure; /* print blank character */ 26 2 call printchar(' '); 27 2 end printb; 28 1 printx: procedure(a); 29 2 declare a address; 30 2 declare s based a byte; 31 2 do while s <> 0; 32 3 call printchar(s); 33 3 a = a + 1; 34 3 end; 35 2 end printx; 36 1 break: procedure byte; 37 2 return mon2(11,0); /* console ready */ 38 2 end break; 39 1 crlf: procedure; 40 2 call printchar(cr); 41 2 call printchar(lf); 42 2 if break then 43 2 do; call mon1 (1,0); /* read character */ 45 3 call mon1 (0,0); /* system reset */ PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 5 46 3 end; 47 2 end crlf; 48 1 print: procedure(a); 49 2 declare a address; /* print the string starting at address a until the next 0 is encountered */ 50 2 call crlf; 51 2 call printx(a); 52 2 end print; 53 1 declare dcnt byte; 54 1 get$version: procedure byte; /* returns current cp/m version # */ 55 2 return mon2(12,0); 56 2 end get$version; 57 1 select: procedure(d); 58 2 declare d byte; 59 2 call mon1(14,d); 60 2 end select; 61 1 open: procedure(fcb); 62 2 declare fcb address; 63 2 dcnt = mon2(15,fcb); 64 2 end open; 65 1 declare anything byte; 66 1 declare dirbuf (128) byte; 67 1 declare user(16) byte, /* any files in user i? */ used(16) address, /* # files in user i */ nSFCB address, /* # SFCB's */ free$dir address; /* # free directory entries */ 68 1 check$user: procedure; 69 2 do forever; 70 3 if anything then return; 72 3 if dcnt = 0ffh then return; 74 3 if dirbuf(ror (dcnt,3) and 110$0000b) = user$code then return; 76 3 dcnt = mon2(18,0); 77 3 end; 78 2 end check$user; 79 1 search: procedure(fcb); 80 2 declare fcb address; 81 2 declare fcb0 based fcb byte; 82 2 anything = (fcb0 = '?'); 83 2 dcnt = mon2(17,fcb); 84 2 call check$user; 85 2 end search; 86 1 searchn: procedure; 87 2 dcnt = mon2(18,0); 88 2 call check$user; PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 6 89 2 end searchn; 90 1 cselect: procedure byte; /* return current disk number */ 91 2 return mon2(25,0); 92 2 end cselect; 93 1 setdma: procedure(dma); 94 2 declare dma address; 95 2 call mon1(26,dma); 96 2 end setdma; 97 1 getalloca: procedure address; /* get base address of alloc vector */ 98 2 return mon3(27,0); 99 2 end getalloca; 100 1 getlogin: procedure address; /* get the login vector */ 101 2 return mon3(24,0); 102 2 end getlogin; 103 1 writeprot: procedure; /* write protect the current disk */ 104 2 call mon1(28,0); 105 2 end writeprot; 106 1 getrodisk: procedure address; /* get the read-only disk vector */ 107 2 return mon3(29,0); 108 2 end getrodisk; 109 1 setind: procedure; /* set file indicators for current fcb */ 110 2 call mon1(30,fcba); 111 2 end setind; 112 1 set$dpb: procedure; /* set disk parameter block values */ 113 2 DPBPTR = MON4(31,0); /* base of dpb */ 114 2 end set$dpb; 115 1 getuser: procedure byte; /* return current user number */ 116 2 return mon2(32,0ffh); 117 2 end getuser; 118 1 setuser: procedure(user); 119 2 declare user byte; 120 2 call mon1(32,user); 121 2 end setuser; 122 1 getfilesize: procedure(fcb); 123 2 declare fcb address; 124 2 call mon1(35,fcb); 125 2 end getfilesize; PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 7 126 1 getfreesp: procedure(d); 127 2 declare d byte; 128 2 call mon1(46,d); 129 2 end getfreesp; 130 1 getlbl: procedure(d) byte; 131 2 declare d byte; 132 2 return mon2(101,d); 133 2 end getlbl; 134 1 declare parse$fn structure ( buff$adr address, fcb$adr address), delimiter based parse$fn.buff$adr byte; 135 1 parse: procedure address; 136 2 return mon3(152,.parse$fn); 137 2 end parse; 138 1 terminate: procedure; 139 2 call mon1 (0,0); /* system reset */ 140 2 end terminate; /***************************************************** Time & Date ASCII Conversion Code *****************************************************/ 141 1 declare tod$adr address; 142 1 declare tod based tod$adr structure ( opcode byte, date address, hrs byte, min byte, sec byte, ASCII (21) byte ); 143 1 declare string$adr address; 144 1 declare string based string$adr (1) byte; 145 1 declare index byte; 146 1 emitchar: procedure(c); 147 2 declare c byte; 148 2 string(index := index + 1) = c; 149 2 end emitchar; 150 1 emitn: procedure(a); 151 2 declare a address; 152 2 declare c based a byte; 153 2 do while c <> '$'; 154 3 string(index := index + 1) = c; 155 3 a = a + 1; PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 8 156 3 end; 157 2 end emitn; 158 1 emit$bcd: procedure(b); 159 2 declare b byte; 160 2 call emitchar('0'+b); 161 2 end emit$bcd; 162 1 emit$bcd$pair: procedure(b); 163 2 declare b byte; 164 2 call emit$bcd(shr(b,4)); 165 2 call emit$bcd(b and 0fh); 166 2 end emit$bcd$pair; 167 1 emit$colon: procedure(b); 168 2 declare b byte; 169 2 call emit$bcd$pair(b); 170 2 call emitchar(':'); 171 2 end emit$colon; 172 1 emit$bin$pair: procedure(b); 173 2 declare b byte; 174 2 call emit$bcd(b/10); /* makes garbage if not < 10 */ 175 2 call emit$bcd(b mod 10); 176 2 end emit$bin$pair; 177 1 emit$slant: procedure(b); 178 2 declare b byte; 179 2 call emit$bin$pair(b); 180 2 call emitchar('/'); 181 2 end emit$slant; 182 1 declare chr byte; 183 1 gnc: procedure; /* get next command byte */ 184 2 if chr = 0 then return; 186 2 if index = 20 then 187 2 do; 188 3 chr = 0; 189 3 return; 190 3 end; 191 2 chr = string(index := index + 1); 192 2 end gnc; 193 1 deblank: procedure; 194 2 do while chr = ' '; 195 3 call gnc; 196 3 end; 197 2 end deblank; 198 1 numeric: procedure byte; /* test for numeric */ 199 2 return (chr - '0') < 10; 200 2 end numeric; PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 9 201 1 scan$numeric: procedure(lb,ub) byte; 202 2 declare (lb,ub) byte; 203 2 declare b byte; 204 2 b = 0; 205 2 call deblank; 206 2 if not numeric then call terminate; 208 2 do while numeric; 209 3 if (b and 1110$0000b) <> 0 then call terminate; 211 3 b = shl(b,3) + shl(b,1); /* b = b * 10 */ 212 3 if carry then call terminate; 214 3 b = b + (chr - '0'); 215 3 if carry then call terminate; 217 3 call gnc; 218 3 end; 219 2 if (b < lb) or (b > ub) then call terminate; 221 2 return b; 222 2 end scan$numeric; 223 1 scan$delimiter: procedure(d,lb,ub) byte; 224 2 declare (d,lb,ub) byte; 225 2 call deblank; 226 2 if chr <> d then call terminate; 228 2 call gnc; 229 2 return scan$numeric(lb,ub); 230 2 end scan$delimiter; 231 1 declare base$year lit '78', /* base year for computations */ base$day lit '0', /* starting day for base$year 0..6 */ month$size (*) byte data /* jan feb mar apr may jun jul aug sep oct nov dec */ ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31), month$days (*) address data /* jan feb mar apr may jun jul aug sep oct nov dec */ ( 000,031,059,090,120,151,181,212,243,273,304,334); 232 1 leap$days: procedure(y,m) byte; 233 2 declare (y,m) byte; /* compute days accumulated by leap years */ 234 2 declare yp byte; 235 2 yp = shr(y,2); /* yp = y/4 */ 236 2 if (y and 11b) = 0 and month$days(m) < 59 then /* y not 00, y mod 4 = 0, before march, so not leap yr */ 237 2 return yp - 1; /* otherwise, yp is the number of accumulated leap days */ 238 2 return yp; 239 2 end leap$days; 240 1 declare word$value address; 241 1 get$next$digit: procedure byte; /* get next lsd from word$value */ 242 2 declare lsd byte; 243 2 lsd = word$value mod 10; 244 2 word$value = word$value / 10; 245 2 return lsd; 246 2 end get$next$digit; PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 10 247 1 bcd: procedure (val) byte; 248 2 declare val byte; 249 2 return shl((val/10),4) + val mod 10; 250 2 end bcd; 251 1 declare (month, day, year, hrs, min, sec) byte; 252 1 set$date$time: procedure; 253 2 declare (i, leap$flag) byte; /* temporaries */ 254 2 month = scan$numeric(1,12) - 1; /* may be feb 29 */ 255 2 if (leap$flag := month = 1) then i = 29; 257 2 else i = month$size(month); 258 2 day = scan$delimiter('/',1,i); 259 2 year = scan$delimiter('/',base$year,99); /* ensure that feb 29 is in a leap year */ 260 2 if leap$flag and day = 29 and (year and 11b) <> 0 then 261 2 /* feb 29 of non-leap year */ call terminate; /* compute total days */ 262 2 tod.date = month$days(month) + 365 * (year - base$year) + day - leap$days(base$year,0) + leap$days(year,month); 263 2 tod.hrs = bcd (scan$numeric(0,23)); 264 2 tod.min = bcd (scan$delimiter(':',0,59)); 265 2 if tod.opcode = 2 then /* date, hours and minutes only */ 266 2 do; 267 3 if chr = ':' then i = scan$delimiter (':',0,59); 269 3 tod.sec = 0; 270 3 end; /* include seconds */ 271 2 else tod.sec = bcd (scan$delimiter(':',0,59)); 272 2 end set$date$time; 273 1 bcd$pair: procedure(a,b) byte; 274 2 declare (a,b) byte; 275 2 return shl(a,4) or b; 276 2 end bcd$pair; 277 1 compute$year: procedure; /* compute year from number of days in word$value */ 278 2 declare year$length address; 279 2 year = base$year; 280 2 do forever; 281 3 year$length = 365; 282 3 if (year and 11b) = 0 then /* leap year */ 283 3 year$length = 366; 284 3 if word$value <= year$length then PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 11 285 3 return; 286 3 word$value = word$value - year$length; 287 3 year = year + 1; 288 3 end; 289 2 end compute$year; 290 1 declare week$day byte, /* day of week 0 ... 6 */ day$list (*) byte data ('Sun$Mon$Tue$Wed$Thu$Fri$Sat$'), leap$bias byte; /* bias for feb 29 */ 291 1 compute$month: procedure; 292 2 month = 12; 293 2 do while month > 0; 294 3 if (month := month - 1) < 2 then /* jan or feb */ 295 3 leapbias = 0; 296 3 if month$days(month) + leap$bias < word$value then return; 298 3 end; 299 2 end compute$month; 300 1 declare date$test byte, /* true if testing date */ test$value address; /* sequential date value under test */ 301 1 get$date$time: procedure; /* get date and time */ 302 2 hrs = tod.hrs; 303 2 min = tod.min; 304 2 sec = tod.sec; 305 2 word$value = tod.date; /* word$value contains total number of days */ 306 2 week$day = (word$value + base$day - 1) mod 7; 307 2 call compute$year; /* year has been set, word$value is remainder */ 308 2 leap$bias = 0; 309 2 if (year and 11b) = 0 and word$value > 59 then 310 2 /* after feb 29 on leap year */ leap$bias = 1; 311 2 call compute$month; 312 2 day = word$value - (month$days(month) + leap$bias); 313 2 month = month + 1; 314 2 end get$date$time; 315 1 emit$date$time: procedure; 316 2 if tod.opcode = 0 then 317 2 do; 318 3 call emitn(.day$list(shl(week$day,2))); 319 3 call emitchar(' '); 320 3 end; 321 2 call emit$slant(month); 322 2 call emit$slant(day); 323 2 call emit$bin$pair(year); 324 2 call emitchar(' '); 325 2 call emit$colon(hrs); 326 2 call emit$colon(min); 327 2 if tod.opcode = 0 then 328 2 call emit$bcd$pair(sec); PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 12 329 2 end emit$date$time; 330 1 tod$ASCII: procedure (parameter); 331 2 declare parameter address; 332 2 declare ret address; 333 2 ret = 0; 334 2 tod$adr = parameter; 335 2 string$adr = .tod.ASCII; 336 2 if (tod.opcode = 0) or (tod.opcode = 3) then 337 2 do; 338 3 call get$date$time; 339 3 index = -1; 340 3 call emit$date$time; 341 3 end; else 342 2 do; 343 3 if (tod.opcode = 1) or (tod.opcode = 2) then 344 3 do; 345 4 chr = string(index:=0); 346 4 call set$date$time; 347 4 ret = .string(index); 348 4 end; else 349 3 do; 350 4 call terminate; 351 4 end; 352 3 end; 353 2 end tod$ASCII; /******************************************************** TOD INTERFACE TO SHOW ********************************************************/ 354 1 declare lcltod structure ( opcode byte, date address, hrs byte, min byte, sec byte, ASCII (21) byte ); 355 1 declare datapgadr address; 356 1 declare datapg based datapgadr address; 357 1 declare extrnl$todadr address; 358 1 declare extrnl$tod based extrnl$todadr structure ( date address, hrs byte, PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 13 min byte, sec byte ); 359 1 declare ret address; /* display$tod: procedure; lcltod.opcode = 0; call move (5,.extrnl$tod.date,.lcltod.date); call tod$ASCII (.lcltod); call write$console (0dh); do i = 0 to 20; call write$console (lcltod.ASCII(i)); end; end display$tod; */ 360 1 display$ts: procedure (tsadr); 361 2 dcl i byte; 362 2 dcl tsadr address; 363 2 lcltod.opcode = 3; /* display time and date stamp, no seconds */ 364 2 call move (4,tsadr,.lcltod.date); /* don't copy seconds */ 365 2 call tod$ASCII (.lcltod); 366 2 do i = 0 to 13; 367 3 call printchar (lcltod.ASCII(i)); 368 3 end; 369 2 end display$ts; /******** End TOD Code ********/ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * BASIC ROUTINES * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 370 1 declare fcbmax literally '512'; /* max fcb count */ 371 1 declare bpb address; /* bytes per block */ 372 1 set$bpb: procedure; 373 2 call set$dpb; /* disk parameters set */ 374 2 bpb = shl(double(1),blkshf) * sectorlen; 375 2 end set$bpb; 376 1 select$disk: procedure(d); 377 2 declare d byte; /* select disk and set bpb */ 378 2 call select(cdisk:=d); 379 2 call set$bpb; /* bytes per block */ PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 14 380 2 end select$disk; 381 1 getalloc: procedure(i) byte; /* return the ith bit of the alloc vector */ 382 2 declare i address; 383 2 return rol(alloc(shr(i,3)), (i and 111b) + 1); 384 2 end getalloc; 385 1 declare accum(4) byte, /* accumulator */ ibp byte; /* input buffer pointer */ 386 1 compare: procedure(a) byte; /* compare accumulator with four bytes addressed by a */ 387 2 declare a address; 388 2 declare (s based a) (4) byte; 389 2 declare i byte; 390 2 do i = 0 to 3; 391 3 if s(i) <> accum(i) then return false; 393 3 end; 394 2 return true; 395 2 end compare; 396 1 scan: procedure; /* fill accum with next input value */ 397 2 declare (i,b) byte; 398 2 setacc: procedure(b); 399 3 declare b byte; 400 3 accum(i) = b; i = i + 1; 402 3 end setacc; /* deblank input */ 403 2 do while buff(ibp) = ' '; ibp=ibp+1; 405 3 end; /* initialize accum length */ 406 2 i = 0; 407 2 do while i < 4; 408 3 if (b := buff(ibp)) > 1 then /* valid */ 409 3 call setacc(b); else /* blank fill */ 410 3 call setacc(' '); 411 3 if b <= 1 or b = ',' or b = ':' or b = '*' or b = '.' or b = '>' or b = '<' or b = '=' then buff(ibp) = 1; else 413 3 ibp = ibp + 1; 414 3 end; 415 2 ibp = ibp + 1; 416 2 end scan; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* fill string @ s for c bytes with f */ 417 1 fill: proc(s,f,c); 418 2 dcl s addr, (f,c) byte, a based s byte; PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 15 419 2 do while (c:=c-1)<>255; 420 3 a = f; 421 3 s = s+1; 422 3 end; 423 2 end fill; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * PRINT A NUMBER * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 424 1 declare val (7) byte initial(0,0,0,0,0,0,0), /* BCD digits */ fac (7) byte initial(0,0,0,0,0,0,0), /* hibyte factor */ f0 (7) byte initial(6,3,5,5,6,0,0), /* 65,536 */ f1 (7) byte initial(2,7,0,1,3,1,0), /* 131,072 */ f2 (7) byte initial(4,4,1,2,6,2,0), /* 262,144 */ f3 (7) byte initial(8,8,2,4,2,5,0), /* 524,288 */ f4 (7) byte initial(6,7,5,8,4,0,1), /* 1,048,576 */ f5 (7) byte initial(2,5,1,7,9,0,2), /* 2,097,152 */ f6 (7) byte initial(4,0,3,4,9,1,4), /* 4,194,304 */ ptr (7) address initial(.f0,.f1,.f2,.f3,.f4,.f5,.f6); /* print decimal value of address v */ 425 1 pdecimal: procedure(v,prec,zerosup); /* print value v with precision prec (1,10,100,1000,10000) with leading zero suppression if zerosup = true */ 426 2 declare v address, /* value to print */ prec address, /* precision */ zerosup byte, /* zero suppression flag */ d byte; /* current decimal digit */ 427 2 do while prec <> 0; 428 3 d = v / prec ; /* get next digit */ 429 3 v = v mod prec;/* get remainder back to v */ 430 3 prec = prec / 10; /* ready for next digit */ 431 3 if prec <> 0 and zerosup and d = 0 then call printb; else 433 3 do; 434 4 zerosup = false; 435 4 call printchar('0'+d); 436 4 end; 437 3 end; 438 2 end pdecimal; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* BCD - convert 16 bit binary to 7 one byte BCD digits */ 439 1 getbcd: procedure(value); PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 16 440 2 declare (value,prec) address, i byte; 441 2 prec = 10000; 442 2 i = 5; /* digits: 4,3,2,1,0 */ 443 2 do while prec <> 0; 444 3 val(i:=i-1) = value / prec; /* get next digit */ 445 3 value = value mod prec; /* remainder in value */ 446 3 prec = prec / 10; 447 3 end; 448 2 end getbcd; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* print BCD number in val array */ 449 1 printbcd: procedure; 450 2 declare (zerosup, i) byte; 451 2 pchar: procedure(c); 452 3 declare c byte; 453 3 if val(i) = 0 then 454 3 if zerosup then 455 3 if i <> 0 then do; 457 4 call printb; 458 4 return; 459 4 end; /* else */ 460 3 call printchar(c); 461 3 zerosup = false; 462 3 end pchar; 463 2 zerosup = true; 464 2 i = 7; 465 2 do while (i:=i-1) <> -1; 466 3 call pchar('0'+val(i)); 467 3 if i = 6 or i = 3 then 468 3 call pchar(','); 469 3 end; 470 2 end printbcd; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* add two BCD numbers result in second */ 471 1 add: procedure(ap,bp); 472 2 declare (ap,bp) address, a based ap (7) byte, b based bp (7) byte, (c,i) byte; 473 2 c = 0; /* carry */ 474 2 do i = 0 to 6; /* 0 = LSB */ 475 3 b(i) = a(i) + b(i) + c; 476 3 c = b(i) / 10; 477 3 b(i) = b(i) mod 10; PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 17 478 3 end; 479 2 end add; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* print 3 byte value based at byte3adr */ 480 1 p3byte: procedure(byte3adr); 481 2 declare i byte, high$byte byte, byte3adr address, b3 based byte3adr structure ( lword address, hbyte byte); 482 2 call fill(.val,0,7); 483 2 call fill(.fac,0,7); 484 2 call getbcd(b3.lword); /* put 16 bit value in val */ 485 2 high$byte = b3.hbyte; 486 2 do i = 0 to 6; /* factor for bit i */ 487 3 if high$byte then /* LSB is 1 */ 488 3 call add(ptr(i),.fac); /* add in factor */ 489 3 high$byte = shr(high$byte,1); /* get next bit */ 490 3 end; 491 2 call add(.fac,.val); /* add factor to value */ 492 2 call printbcd; /* print value */ 493 2 end p3byte; /* divide 3 byte value by 8 */ 494 1 shr3byte: procedure(byte3adr); 495 2 dcl byte3adr address, b3 based byte3adr structure ( lword address, hbyte byte), temp1 based byte3adr (2) byte, temp2 byte; 496 2 temp2 = ror(b3.hbyte,3) and 11100000b; /* get 3 bits */ 497 2 b3.hbyte = shr(b3.hbyte,3); 498 2 b3.lword = shr(b3.lword,3); 499 2 temp1(1) = temp1(1) or temp2; /* or in 3 bits from hbyte */ 500 2 end shr3byte; /* multiply 3 byte value by #records per block */ 501 1 shl3byte: procedure(byte3adr); 502 2 dcl byte3adr address, b3 based byte3adr structure ( lword address, hbyte byte), temp1 based byte3adr (2) byte; 503 2 b3.hbyte = (rol(temp1(1),blkshf) and blkmsk) or shl(b3.hbyte,blkshf); 504 2 b3.lword = shl(b3.lword,blkshf); 505 2 end shl3byte; PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 18 506 1 show$drive: procedure; 507 2 call printchar(cdisk+'A'); 508 2 call printx(.(': ',0)); 509 2 end show$drive; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CALCULATE SIZE * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 510 1 add$block: procedure(ak,ab); 511 2 declare (ak, ab) address; /* add one block to the kilobyte accumulator */ 512 2 declare kaccum based ak address; /* kilobyte accum */ 513 2 declare baccum based ab address; /* byte accum */ 514 2 baccum = baccum + bpb; 515 2 do while baccum >= 1024; 516 3 baccum = baccum - 1024; 517 3 kaccum = kaccum + 1; 518 3 end; 519 2 end add$block; 520 1 count: procedure(mode) address; 521 2 declare mode byte; /* true if counting 0's */ /* count kb remaining, kaccum set upon exit */ 522 2 declare ka address, /* kb accumulator */ ba address, /* byte accumulator */ i address, /* local index */ bit byte; /* always 1 if mode = false */ 523 2 ka, ba = 0; 524 2 bit = 0; 525 2 do i = 0 to maxall; 526 3 if mode then bit = getalloc(i); 528 3 if not bit then call add$block(.ka,.ba); 530 3 end; 531 2 return ka; 532 2 end count; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * STATUS ROUTINES * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 19 /* characteristics of current drive */ 533 1 drivestatus: procedure; 534 2 dcl b3a address, b3 based b3a structure ( lword address, hbyte byte); /* print 3 byte value */ 535 2 pv3: procedure; 536 3 call crlf; 537 3 call p3byte(.dirbuf); 538 3 call printchar(':'); 539 3 call printb; 540 3 end pv3; /* print address value v */ 541 2 pv: procedure(v); 542 3 dcl v address; 543 3 b3.hbyte = 0; 544 3 b3.lword = v; 545 3 call pv3; 546 3 end pv; /* print the characteristics of the currently selected drive */ 547 2 b3a = .dirbuf; 548 2 call print(.(' ',0)); 549 2 call show$drive; 550 2 call printx(.('Drive Characteristics',0)); 551 2 b3.hbyte = 0; 552 2 b3.lword = maxall + 1; /* = # blocks */ 553 2 call shl3byte(.dirbuf); /* # blocks * records/block */ 554 2 call pv3; 555 2 call printx(.('128 Byte Record Capacity',0)); 556 2 call shr3byte(.dirbuf); /* divide by 8 */ 557 2 call pv3; 558 2 call printx(.('Kilobyte Drive Capacity',0)); 559 2 call pv(dirmax+1); 560 2 call printx(.('32 Byte Directory Entries',0)); 561 2 call pv(shl(chksiz,2)); 562 2 call printx(.('Checked Directory Entries',0)); 563 2 call pv((extmsk+1) * 128); 564 2 call printx(.('Records / Directory Entry',0)); 565 2 call pv(shl(double(1),blkshf)); 566 2 call printx(.('Records / Block',0)); 567 2 call pv(scptrk); 568 2 call printx(.('Sectors / Track',0)); 569 2 call pv(offset); 570 2 call printx(.('Reserved Tracks',0)); 571 2 call crlf; 572 2 end drivestatus; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* characteristics of all logged in disks */ PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 20 573 1 diskstatus: procedure; /* display disk status */ 574 2 declare login address, d byte; 575 2 login = getlogin; /* login vector set */ 576 2 d = 0; 577 2 do while login <> 0; 578 3 if low(login) then 579 3 do; call select$disk(d); 581 4 call drivestatus; 582 4 end; 583 3 login = shr(login,1); 584 3 d = d + 1; 585 3 end; 586 2 end diskstatus; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* help message */ 587 1 help: procedure; /* display possible commands */ 588 2 call print(.('Drive Status : SHOW DRIVE: SHOW d:DRIVE:',0)); 589 2 call print(.('User Status : SHOW USERS: SHOW d:USERS:',0)); 590 2 call print(.('Directory Label : SHOW LABEL: SHOW d:LABEL:',0)); 591 2 call print(.('Free Disk Space : SHOW SPACE: SHOW d:SPACE:',0)); /* call print(.('Locked Records : LOCKED:',0)); call print(.('Open Files : OPEN:',0)); */ 592 2 call crlf; 593 2 end help; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* parse error message */ 594 1 parse$error: procedure; 595 2 call print(.version); 596 2 call crlf; 597 2 call print(.('Invalid Option, use the following:',0)); 598 2 call crlf; 599 2 call help; 600 2 call terminate; 601 2 end parse$error; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DISK STATUS * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 21 602 1 pvalue: procedure(v); 603 2 declare (d,zero) byte, (k,v) address; 604 2 k = 10000; 605 2 zero = false; 606 2 do while k <> 0; 607 3 d = low(v/k); v = v mod k; 609 3 k = k / 10; 610 3 if zero or k = 0 or d <> 0 then 611 3 do; zero = true; call printchar('0'+d); 614 4 end; 615 3 end; 616 2 end pvalue; 617 1 prcount: procedure; /* print the actual byte count */ 618 2 if cversion < cpm3 then do; 620 3 alloca = getalloca; 621 3 call pvalue(count(true)); 622 3 end; 623 2 else do; 624 3 call setdma(.dirbuf); 625 3 call getfreesp(cdisk); 626 3 call shr3byte(.dirbuf); 627 3 call p3byte(.dirbuf); 628 3 end; 629 2 call printchar('k'); 630 2 end prcount; 631 1 stat: procedure(rodisk); 632 2 declare rodisk address; 633 2 call crlf; 634 2 call show$drive; 635 2 call printchar('R'); 636 2 if low(rodisk) then 637 2 call printchar('O'); else 638 2 call printchar('W'); 639 2 call printx(.(', Space: ',0)); 640 2 call prcount; 641 2 end stat; 642 1 prstatus: procedure; /* print the status of the disk system */ 643 2 declare (login, rodisk) address; 644 2 declare d byte; 645 2 login = getlogin; /* login vector set */ 646 2 rodisk = getrodisk; /* read only disk vector set */ 647 2 d = 0; 648 2 do while login <> 0; 649 3 if low(login) then 650 3 do; 651 4 if fcb(0) <> 0 then do; 653 5 if fcb(0)-1 = d then PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 22 654 5 call stat(rodisk); /* do specific disk */ 655 5 end; 656 4 else do; 657 5 call select$disk(d); 658 5 call stat(rodisk); /* do all disks */ 659 5 end; 660 4 end; 661 3 login = shr(login,1); rodisk = shr(rodisk,1); 663 3 d = d + 1; 664 3 end; 665 2 end prstatus; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * USER STATUS * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 666 1 get$usr$files: procedure; 667 2 declare ufcb(*) byte data ('????????????',0,0,0), (i,j) byte, nfcbs address, extptr address, modptr address, fmod based modptr byte, fext based extptr byte; 668 2 do i = 0 to 15; 669 3 user(i),used(i) = 0; 670 3 end; 671 2 nSFCB = 0; 672 2 call setdma(.dirbuf); 673 2 call search(.ufcb); 674 2 nfcbs = 0; 675 2 do while dcnt <> 255; 676 3 j = shl(dcnt,5); /* which fcb in dirbuf */ 677 3 ge0: if (i := dirbuf(j)) <> 0e5h then do; 679 4 if i <> 33 then do; /* SFCB ? */ 681 5 extptr = .dirbuf(j + 12); 682 5 modptr = extptr + 2; 683 5 nfcbs = nfcbs + 1; 684 5 j = i; /* Save for xfcb test */ 685 5 user(i := i and 0fh) = true; 686 5 if j > 15 then go to ge2; 688 5 if fext > extmsk then go to ge2; 690 5 if fmod = 0 then used(i) = used(i) + 1; 692 5 end; PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 23 693 4 else nSFCB = nSFCB + 1; 694 4 end; 695 3 ge2: call searchn; 696 3 end; 697 2 if nSFCB > 0 then nSFCB = shr(dirmax+1,2);/* Because search ends at high water mark*/ 699 2 free$dir = ((dirmax + 1) - nSFCB) - nfcbs; 700 2 end get$usr$files; 701 1 userstatus: procedure; /* display active user numbers */ 702 2 declare i byte; /*declare user(15) byte; declare ufcb(*) byte data ('????????????',0,0,0);*/ 703 2 call set$bpb; 704 2 call crlf; 705 2 call show$drive; 706 2 call printx(.('Active User :',0)); 707 2 call pdecimal(getuser,100,true); 708 2 call crlf; 709 2 call show$drive; 710 2 call printx(.('Active Files:',0)); 711 2 call get$usr$files; /*do i = 0 to last(user); user(i) = false; end; call setdma(.dirbuf); call search(.ufcb); do while dcnt <> 255; if (i := dirbuf(shl(dcnt and 11b,5))) <> 0e5h then user(i and 0fh) = true; call searchn; end;*/ 712 2 do i = 0 to last(user); 713 3 if user(i) then call pdecimal(i,100,true); 715 3 end; 716 2 call crlf; 717 2 call show$drive; 718 2 call printx(.('# of files :',0)); 719 2 do i = 0 to last(user); 720 3 if user(i) then call pdecimal(used(i),100,true); 722 3 end; 723 2 end userstatus; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 24 * * * MP/M II DISK & FILE STATUS * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 724 1 versionerr: procedure; 725 2 call print(.('Option not compatible with this O.S.',0)); 726 2 call terminate; 727 2 end versionerr; 728 1 openfiles: procedure; 729 2 if cversion < cpm3 then 730 2 call versionerr; 731 2 call print(.('Not yet implemented',0)); 732 2 end openfiles; 733 1 lockedstatus: procedure; 734 2 if cversion < cpm3 then 735 2 call versionerr; 736 2 call print(.('Not yet implemented',0)); 737 2 end lockedstatus; /******************************************************* L A B E L S T A T U S ********************************************************/ 738 1 readlbl: proc; 739 2 dcl d byte data('?'); 740 2 call setdma(.dirbuf); 741 2 call search(.d); 742 2 do while dcnt <> 0ffH; 743 3 if dirbuf(ror(dcnt,3) and 110$0000b)=20H then 744 3 return; 745 3 call searchn; 746 3 end; 747 2 end readlbl; /* HEADER */ 748 1 dcl label1 (*) byte data ( 'Directory Passwds Stamp Stamp',0); 749 1 dcl label2 (*) byte data ( 'Label Reqd ',0); 750 1 dcl label3 (*) byte data ( ' Update Label Created Label Updated',0); 751 1 dcl label4 (*) byte data ( '------------ ------- ------ ------ -------------- --------------',0); PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 25 752 1 labelstatus: procedure; 753 2 dcl (lbl, make) byte; 754 2 dcl fnam lit '11'; 755 2 dcl ftyp lit '9'; 756 2 dcl fcbp address; 757 2 dcl fcbv based fcbp (32) byte; /* template over dirbuf */ /* print file name */ 758 2 printfn: proc; 759 3 declare k byte; 760 3 do k = 1 to fnam; 761 4 if k = ftyp then 762 4 call printchar('.'); 763 4 call printchar(fcbv(k) and 7fh); 764 4 end; 765 3 end printfn; 766 2 if cversion < cpm3 then 767 2 call versionerr; 768 2 lbl = getlbl(cdisk); 769 2 if lbl > 0 then do; 771 3 call readlbl; 772 3 fcbp = shl(dcnt,5) + .dirbuf; /* print heading */ 773 3 call print(.('Label for drive ',0)); 774 3 call show$drive; 775 3 call crlf; 776 3 call print(.label1); 777 3 call print(.label2); 778 3 if (lbl and 40h) = 40h then 779 3 call printx(.('Access',0)); else 780 3 call printx(.('Create',0)); 781 3 call printx(.label3); 782 3 call print(.label4); 783 3 call crlf; 784 3 call printfn; 785 3 if (lbl and 80h) = 80h then 786 3 call printx(.(' on ',0)); else 787 3 call printx(.(' off ',0)); /* if (make:=(lbl and 10h) = 10h) then call printx(.(' on ',0)); (Removed with Make XFCB option) else call printx(.(' off ',0));*/ 788 3 if ((lbl and 40h) = 40h) or make then 789 3 call printx(.(' on ',0)); else 790 3 call printx(.(' off ',0)); 791 3 if (lbl and 20h) = 20h then 792 3 call printx(.(' on ',0)); else 793 3 call printx(.(' off',0)); PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 26 794 3 call printx(.(' ',0)); 795 3 call display$ts(.fcbv(24)); 796 3 call printx(.(' ',0)); 797 3 call display$ts(.fcbv(28)); 798 3 end; else 799 2 call print(.('No Directory Label exists',0)); 800 2 call crlf; 801 2 end labelstatus; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * PARSING * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 802 1 parse$next: procedure; /* skip comma or space delimiter */ 803 2 parse$fn.buff$adr = parse$fn.buff$adr + 1; 804 2 parse$fn.buff$adr = parse; 805 2 if parse$fn.buff$adr = 0ffffh then 806 2 call parse$error; 807 2 if delimiter = ']' or delimiter = ':' then /* skip */ 808 2 parse$fn.buff$adr = parse$fn.buff$adr + 1; 809 2 if delimiter = 0 then 810 2 parse$fn.buff$adr = 0; 811 2 end parse$next; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MAIN PROGRAM * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 812 1 declare i byte initial(1), last$dseg$byte byte initial (0); 813 1 PLMSTART: PROCEDURE PUBLIC; /* process request */ 814 2 cversion = get$version; 815 2 ibp=1; 816 2 if cversion < cpmversion then 817 2 call printx(.('Requires CP/M 2.0',0)); else PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 27 818 2 do; /* scan for global option */ 819 3 do while buff(i)=' '; 820 4 i = i + 1; 821 4 end; 822 3 if buff(i) = '[' then /* skip leading [ */ 823 3 parse$fn.buff$adr = .buff(i); else 824 3 parse$fn.buff$adr = .buff; 825 3 parse$fn.fcb$adr = .fcb; 826 3 cdisk = cselect; 827 3 user$code = getuser; 828 3 do while parse$fn.buff$adr <> 0; 829 4 call parse$next; 830 4 if fcb(0) <> 0 then /* get drive */ 831 4 call select$disk(fcb(0)-1); 832 4 if delimiter = '[' then 833 4 call parse$next; /* get option */ 834 4 if fcb(1) = ' ' or fcb(1) = 'S' then 835 4 call prstatus; 836 4 else if fcb(1) = 'U' then 837 4 call userstatus; 838 4 else if fcb(1) = 'H' then 839 4 call help; 840 4 else if fcb(1) = 'D' then 841 4 do; 842 5 if fcb(0)<>0 then 843 5 call drivestatus; else 844 5 call diskstatus; 845 5 end; 846 4 else if fcb(1) = 'O' then 847 4 call openfiles; 848 4 else if fcb(1) = 'L' then do; 850 5 if fcb(2) = 'A' then 851 5 call labelstatus; 852 5 else if fcb(2) = 'O' then 853 5 call lockedstatus; else 854 5 call parse$error; 855 5 end; else 856 4 call parse$error; 857 4 end; 858 3 end; 859 2 call terminate; 860 2 END PLMSTART; 861 1 end show; PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 28 CROSS-REFERENCE LISTING ----------------------- DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES ----- ------ ----- -------------------------------- 418 0000H 1 A. . . . . . . . . BYTE BASED(S) 420 273 0006H 1 A. . . . . . . . . BYTE PARAMETER AUTOMATIC 274 275 386 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 387 388 391 28 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 29 30 31 32 33 10 0000H 2 A. . . . . . . . . WORD PARAMETER 11 472 0000H 7 A. . . . . . . . . BYTE BASED(AP) ARRAY(7) 475 13 0000H 2 A. . . . . . . . . WORD PARAMETER 14 7 0000H 2 A. . . . . . . . . WORD PARAMETER 8 150 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 151 152 153 154 155 48 0004H 2 A. . . . . . . . . WORD PARAMETER AUTOMATIC 49 51 16 0000H 2 A. . . . . . . . . WORD PARAMETER 17 510 0004H 2 AB . . . . . . . . WORD PARAMETER AUTOMATIC 511 513 514 515 516 385 012BH 4 ACCUM. . . . . . . BYTE ARRAY(4) 391 400 471 098DH 75 ADD. . . . . . . . PROCEDURE STACK=0006H 488 491 510 0AA8H 35 ADDBLOCK . . . . . PROCEDURE STACK=0006H 529 20 ADDR . . . . . . . LITERALLY 418 510 0006H 2 AK . . . . . . . . WORD PARAMETER AUTOMATIC 511 512 517 19 0000H 1024 ALLOC. . . . . . . BYTE BASED(ALLOCA) ARRAY(1024) 383 19 0004H 2 ALLOCA . . . . . . WORD 19 383 620 65 006EH 1 ANYTHING . . . . . BYTE 70 82 471 0006H 2 AP . . . . . . . . WORD PARAMETER AUTOMATIC 472 475 354 0006H 21 ASCII. . . . . . . BYTE ARRAY(21) MEMBER(LCLTOD) 367 142 0006H 21 ASCII. . . . . . . BYTE ARRAY(21) MEMBER(TOD) 335 472 0000H 7 B. . . . . . . . . BYTE BASED(BP) ARRAY(7) 475 476 477 273 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 274 275 397 0132H 1 B. . . . . . . . . BYTE 408 409 411 167 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 168 169 398 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 399 400 177 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 178 179 158 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 159 160 172 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 173 174 175 203 0101H 1 B. . . . . . . . . BYTE 204 209 211 214 219 221 162 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 163 164 165 495 0000H 3 B3 . . . . . . . . STRUCTURE BASED(BYTE3ADR) 496 497 498 481 0000H 3 B3 . . . . . . . . STRUCTURE BASED(BYTE3ADR) 484 485 502 0000H 3 B3 . . . . . . . . STRUCTURE BASED(BYTE3ADR) 503 504 534 0000H 3 B3 . . . . . . . . STRUCTURE BASED(B3A) 543 544 551 552 534 0058H 2 B3A. . . . . . . . WORD 534 543 544 547 551 552 522 0054H 2 BA . . . . . . . . WORD 523 529 513 0000H 2 BACCUM . . . . . . WORD BASED(AB) 514 515 516 231 BASEDAY. . . . . . LITERALLY 306 231 BASEYEAR . . . . . LITERALLY 259 262 279 247 0417H 39 BCD. . . . . . . . PROCEDURE BYTE STACK=0006H 263 264 271 273 055FH 17 BCDPAIR. . . . . . PROCEDURE BYTE STACK=0006H 522 017BH 1 BIT. . . . . . . . BYTE 524 527 528 6 BLKMSK . . . . . . LITERALLY 503 6 BLKSHF . . . . . . LITERALLY 374 503 504 565 6 0002H 1 BLS. . . . . . . . BYTE MEMBER(DPB) 374 503 504 565 6 0003H 1 BMS. . . . . . . . BYTE MEMBER(DPB) 503 PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 29 471 0004H 2 BP . . . . . . . . WORD PARAMETER AUTOMATIC 472 475 476 477 371 0040H 2 BPB. . . . . . . . WORD 374 514 36 0039H 15 BREAK. . . . . . . PROCEDURE BYTE STACK=0008H 42 6 0000H 128 BUFF . . . . . . . BYTE ARRAY(128) EXTERNAL(2) 403 408 412 819 822 823 824 6 BUFFA. . . . . . . LITERALLY 134 0000H 2 BUFFADR. . . . . . WORD MEMBER(PARSEFN) 134 803 804 805 807 808 809 810 823 824 828 832 501 0004H 2 BYTE3ADR . . . . . WORD PARAMETER AUTOMATIC 502 503 504 494 0004H 2 BYTE3ADR . . . . . WORD PARAMETER AUTOMATIC 495 496 497 498 499 480 0004H 2 BYTE3ADR . . . . . WORD PARAMETER AUTOMATIC 481 484 485 417 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 418 419 146 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 147 148 472 0176H 1 C. . . . . . . . . BYTE 473 475 476 451 0004H 1 C. . . . . . . . . BYTE PARAMETER AUTOMATIC 452 460 152 0000H 1 C. . . . . . . . . BYTE BASED(A) 153 154 CARRY. . . . . . . BUILTIN 212 215 6 006CH 1 CDISK. . . . . . . BYTE 378 507 625 768 826 21 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 22 23 68 00B8H 63 CHECKUSER. . . . . PROCEDURE STACK=0008H 84 88 6 CHKSIZ . . . . . . LITERALLY 561 182 0100H 1 CHR. . . . . . . . BYTE 184 188 191 194 199 214 226 267 345 6 000BH 2 CKS. . . . . . . . WORD MEMBER(DPB) 561 386 07A2H 46 COMPARE. . . . . . PROCEDURE BYTE STACK=0004H 291 05A5H 59 COMPUTEMONTH . . . PROCEDURE STACK=0002H 311 277 0570H 53 COMPUTEYEAR. . . . PROCEDURE STACK=0002H 307 3 0018H 38 COPYRIGHT. . . . . BYTE ARRAY(38) DATA 520 0ACBH 82 COUNT. . . . . . . PROCEDURE WORD STACK=000CH 621 2 CPM3 . . . . . . . LITERALLY 618 729 734 766 2 CPMVERSION . . . . LITERALLY 816 20 CR . . . . . . . . LITERALLY 40 39 0048H 43 CRLF . . . . . . . PROCEDURE STACK=000EH 50 536 571 592 596 598 633 704 708 716 775 783 800 90 012EH 15 CSELECT. . . . . . PROCEDURE BYTE STACK=0008H 826 6 006BH 1 CVERSION . . . . . BYTE 618 729 734 766 814 816 130 0004H 1 D. . . . . . . . . BYTE PARAMETER AUTOMATIC 131 132 57 0004H 1 D. . . . . . . . . BYTE PARAMETER AUTOMATIC 58 59 223 0008H 1 D. . . . . . . . . BYTE PARAMETER AUTOMATIC 224 226 644 017FH 1 D. . . . . . . . . BYTE 647 653 657 663 574 017CH 1 D. . . . . . . . . BYTE 576 580 584 603 017DH 1 D. . . . . . . . . BYTE 607 610 613 739 0086H 1 D. . . . . . . . . BYTE DATA 741 126 0004H 1 D. . . . . . . . . BYTE PARAMETER AUTOMATIC 127 128 376 0004H 1 D. . . . . . . . . BYTE PARAMETER AUTOMATIC 377 378 426 0172H 1 D. . . . . . . . . BYTE 428 431 435 356 0000H 2 DATAPG . . . . . . WORD BASED(DATAPGADR) 355 003AH 2 DATAPGADR. . . . . WORD 356 142 0001H 2 DATE . . . . . . . WORD MEMBER(TOD) 262 305 358 0000H 2 DATE . . . . . . . WORD MEMBER(EXTRNLTOD) 354 0001H 2 DATE . . . . . . . WORD MEMBER(LCLTOD) 364 300 010EH 1 DATETEST . . . . . BYTE 251 0105H 1 DAY. . . . . . . . BYTE 258 260 262 312 322 290 005BH 28 DAYLIST. . . . . . BYTE ARRAY(28) DATA 318 6 0009H 2 DBL. . . . . . . . WORD MEMBER(DPB) 20 DCL. . . . . . . . LITERALLY 53 006DH 1 DCNT . . . . . . . BYTE 63 72 74 76 83 87 675 676 742 743 772 193 0311H 17 DEBLANK. . . . . . PROCEDURE STACK=0006H 205 225 134 0000H 1 DELIMITER. . . . . BYTE BASED(PARSEFN.BUFFADR) 807 809 832 PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 30 6 DIRBLK . . . . . . LITERALLY 66 006FH 128 DIRBUF . . . . . . BYTE ARRAY(128) 74 537 547 553 556 624 626 627 672 677 681 740 743 772 6 DIRMAX . . . . . . LITERALLY 559 698 699 573 0C1FH 50 DISKSTATUS . . . . PROCEDURE STACK=0030H 844 360 0713H 64 DISPLAYTS. . . . . PROCEDURE STACK=002AH 795 797 93 0004H 2 DMA. . . . . . . . WORD PARAMETER AUTOMATIC 94 95 6 0007H 2 DMX. . . . . . . . WORD MEMBER(DPB) 559 698 699 6 0011H 1 DOLL . . . . . . . BYTE EXTERNAL(1) AT 6 DOLLA. . . . . . . LITERALLY 6 DOUBLE . . . . . . BUILTIN 374 565 6 0000H 15 DPB. . . . . . . . STRUCTURE BASED(DPBPTR) 374 503 504 525 552 559 561 563 565 567 569 688 698 699 6 0000H 4 DPBPTR . . . . . . POINTER 6 113 374 503 504 525 552 559 561 563 565 567 569 688 698 699 533 0B1DH 211 DRIVESTATUS. . . . PROCEDURE STACK=002CH 581 843 158 0268H 16 EMITBCD. . . . . . PROCEDURE STACK=000AH 164 165 174 175 162 0278H 27 EMITBCDPAIR. . . . PROCEDURE STACK=0010H 169 328 172 02A6H 39 EMITBINPAIR. . . . PROCEDURE STACK=0010H 179 323 146 0224H 28 EMITCHAR . . . . . PROCEDURE STACK=0004H 160 170 180 319 324 167 0293H 19 EMITCOLON. . . . . PROCEDURE STACK=0016H 325 326 315 064AH 95 EMITDATETIME . . . PROCEDURE STACK=001AH 340 150 0240H 40 EMITN. . . . . . . PROCEDURE STACK=0004H 318 177 02CDH 19 EMITSLANT. . . . . PROCEDURE STACK=0016H 321 322 6 0004H 1 EXM. . . . . . . . BYTE MEMBER(DPB) 563 688 6 EXTMSK . . . . . . LITERALLY 563 688 667 0064H 2 EXTPTR . . . . . . WORD 667 681 682 688 358 0000H 5 EXTRNLTOD. . . . . STRUCTURE BASED(EXTRNLTODADR) 357 003CH 2 EXTRNLTODADR . . . WORD 358 16 0000H 1 F. . . . . . . . . BYTE PARAMETER 17 10 0000H 1 F. . . . . . . . . BYTE PARAMETER 11 7 0000H 1 F. . . . . . . . . BYTE PARAMETER 8 417 0006H 1 F. . . . . . . . . BYTE PARAMETER AUTOMATIC 418 420 13 0000H 1 F. . . . . . . . . BYTE PARAMETER 14 424 0141H 7 F0 . . . . . . . . BYTE ARRAY(7) INITIAL 424 424 0148H 7 F1 . . . . . . . . BYTE ARRAY(7) INITIAL 424 424 014FH 7 F2 . . . . . . . . BYTE ARRAY(7) INITIAL 424 424 0156H 7 F3 . . . . . . . . BYTE ARRAY(7) INITIAL 424 424 015DH 7 F4 . . . . . . . . BYTE ARRAY(7) INITIAL 424 424 0164H 7 F5 . . . . . . . . BYTE ARRAY(7) INITIAL 424 424 016BH 7 F6 . . . . . . . . BYTE ARRAY(7) INITIAL 424 424 013AH 7 FAC. . . . . . . . BYTE ARRAY(7) INITIAL 483 488 491 20 FALSE. . . . . . . LITERALLY 392 434 461 605 61 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 62 63 122 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 123 124 79 0004H 2 FCB. . . . . . . . WORD PARAMETER AUTOMATIC 80 81 82 83 6 0000H 33 FCB. . . . . . . . BYTE ARRAY(33) EXTERNAL(1) 6 110 651 653 825 830 831 834 836 838 840 842 846 848 850 852 81 0000H 1 FCB0 . . . . . . . BYTE BASED(FCB) 82 6 FCBA . . . . . . . LITERALLY 110 134 0002H 2 FCBADR . . . . . . WORD MEMBER(PARSEFN) 825 370 FCBMAX . . . . . . LITERALLY 756 0068H 2 FCBP . . . . . . . WORD 757 763 772 795 797 757 0000H 32 FCBV . . . . . . . BYTE BASED(FCBP) ARRAY(32) 763 795 797 667 0000H 1 FEXT . . . . . . . BYTE BASED(EXTPTR) 688 417 085DH 32 FILL . . . . . . . PROCEDURE STACK=0008H 482 483 667 0000H 1 FMOD . . . . . . . BYTE BASED(MODPTR) 690 PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 31 754 FNAM . . . . . . . LITERALLY 760 20 FOREVER. . . . . . LITERALLY 69 280 67 0028H 2 FREEDIR. . . . . . WORD 699 755 FTYP . . . . . . . LITERALLY 761 677 0E04H GE0. . . . . . . . LABEL 695 0E6FH GE2. . . . . . . . LABEL 687 689 381 0784H 30 GETALLOC . . . . . PROCEDURE BYTE STACK=0004H 527 97 014DH 15 GETALLOCA. . . . . PROCEDURE WORD STACK=0008H 620 439 08D3H 76 GETBCD . . . . . . PROCEDURE STACK=0004H 484 301 05E0H 106 GETDATETIME. . . . PROCEDURE STACK=0006H 338 122 01D1H 16 GETFILESIZE. . . . PROCEDURE STACK=000AH 126 01E1H 19 GETFREESP. . . . . PROCEDURE STACK=000AH 625 130 01F4H 19 GETLBL . . . . . . PROCEDURE BYTE STACK=000AH 768 100 015CH 15 GETLOGIN . . . . . PROCEDURE WORD STACK=0008H 575 645 241 03F7H 32 GETNEXTDIGIT . . . PROCEDURE BYTE STACK=0002H 106 017AH 15 GETRODISK. . . . . PROCEDURE WORD STACK=0008H 646 115 01AFH 15 GETUSER. . . . . . PROCEDURE BYTE STACK=0008H 707 827 666 0DB3H 239 GETUSRFILES. . . . PROCEDURE STACK=0012H 711 54 0083H 15 GETVERSION . . . . PROCEDURE BYTE STACK=0008H 814 183 02E0H 49 GNC. . . . . . . . PROCEDURE STACK=0002H 195 217 228 534 0002H 1 HBYTE. . . . . . . BYTE MEMBER(B3) 543 551 502 0002H 1 HBYTE. . . . . . . BYTE MEMBER(B3) 503 495 0002H 1 HBYTE. . . . . . . BYTE MEMBER(B3) 496 497 481 0002H 1 HBYTE. . . . . . . BYTE MEMBER(B3) 485 587 0C51H 36 HELP . . . . . . . PROCEDURE STACK=001AH 599 839 481 0179H 1 HIGHBYTE . . . . . BYTE 485 487 489 251 0107H 1 HRS. . . . . . . . BYTE 302 325 142 0003H 1 HRS. . . . . . . . BYTE MEMBER(TOD) 263 302 358 0002H 1 HRS. . . . . . . . BYTE MEMBER(EXTRNLTOD) 354 0003H 1 HRS. . . . . . . . BYTE MEMBER(LCLTOD) 812 0186H 1 I. . . . . . . . . BYTE INITIAL 819 820 822 823 253 010AH 1 I. . . . . . . . . BYTE 256 257 258 268 702 0182H 1 I. . . . . . . . . BYTE 712 713 714 719 720 721 667 0180H 1 I. . . . . . . . . BYTE 668 669 677 679 684 685 691 522 0056H 2 I. . . . . . . . . WORD 525 527 481 0178H 1 I. . . . . . . . . BYTE 486 488 472 0177H 1 I. . . . . . . . . BYTE 474 475 476 477 450 0175H 1 I. . . . . . . . . BYTE 453 455 464 465 466 467 440 0173H 1 I. . . . . . . . . BYTE 442 444 397 0131H 1 I. . . . . . . . . BYTE 400 401 406 407 389 0130H 1 I. . . . . . . . . BYTE 390 391 381 0004H 2 I. . . . . . . . . WORD PARAMETER AUTOMATIC 382 383 361 012AH 1 I. . . . . . . . . BYTE 366 367 385 012FH 1 IBP. . . . . . . . BYTE 403 404 408 412 413 415 815 145 00FFH 1 INDEX. . . . . . . BYTE 148 154 186 191 339 345 347 667 0181H 1 J. . . . . . . . . BYTE 676 677 681 684 686 759 0185H 1 K. . . . . . . . . BYTE 760 761 763 603 005CH 2 K. . . . . . . . . WORD 604 606 607 608 609 610 522 0052H 2 KA . . . . . . . . WORD 523 529 531 512 0000H 2 KACCUM . . . . . . WORD BASED(AK) 517 748 0087H 37 LABEL1 . . . . . . BYTE ARRAY(37) DATA 776 749 00ACH 24 LABEL2 . . . . . . BYTE ARRAY(24) DATA 777 750 00C4H 40 LABEL3 . . . . . . BYTE ARRAY(40) DATA 781 751 00ECH 70 LABEL4 . . . . . . BYTE ARRAY(70) DATA 782 752 0FABH 239 LABELSTATUS. . . . PROCEDURE STACK=002EH 851 LAST . . . . . . . BUILTIN 712 719 812 0187H 1 LASTDSEGBYTE . . . BYTE INITIAL PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 32 223 0006H 1 LB . . . . . . . . BYTE PARAMETER AUTOMATIC 224 229 201 0006H 1 LB . . . . . . . . BYTE PARAMETER AUTOMATIC 202 219 753 0183H 1 LBL. . . . . . . . BYTE 768 769 778 785 788 791 354 010FH 27 LCLTOD . . . . . . STRUCTURE 363 364 365 367 290 010DH 1 LEAPBIAS . . . . . BYTE 295 296 308 310 312 232 03CBH 44 LEAPDAYS . . . . . PROCEDURE BYTE STACK=0006H 262 253 010BH 1 LEAPFLAG . . . . . BYTE 255 260 20 LF . . . . . . . . LITERALLY 41 20 LIT. . . . . . . . LITERALLY 231 754 755 733 0F60H 22 LOCKEDSTATUS . . . PROCEDURE STACK=001EH 853 574 005AH 2 LOGIN. . . . . . . WORD 575 577 578 583 643 005EH 2 LOGIN. . . . . . . WORD 645 648 649 661 LOW. . . . . . . . BUILTIN 578 607 636 649 242 0103H 1 LSD. . . . . . . . BYTE 243 245 534 0000H 2 LWORD. . . . . . . WORD MEMBER(B3) 544 552 502 0000H 2 LWORD. . . . . . . WORD MEMBER(B3) 504 495 0000H 2 LWORD. . . . . . . WORD MEMBER(B3) 498 481 0000H 2 LWORD. . . . . . . WORD MEMBER(B3) 484 232 0004H 1 M. . . . . . . . . BYTE PARAMETER AUTOMATIC 233 236 753 0184H 1 MAKE . . . . . . . BYTE 788 6 MAXALL . . . . . . LITERALLY 525 552 6 0000H 2 MAXB . . . . . . . WORD EXTERNAL(0) 6 MEMSIZE. . . . . . LITERALLY 251 0108H 1 MIN. . . . . . . . BYTE 303 326 142 0004H 1 MIN. . . . . . . . BYTE MEMBER(TOD) 264 303 358 0003H 1 MIN. . . . . . . . BYTE MEMBER(EXTRNLTOD) 354 0004H 1 MIN. . . . . . . . BYTE MEMBER(LCLTOD) 520 0004H 1 MODE . . . . . . . BYTE PARAMETER AUTOMATIC 521 526 667 0066H 2 MODPTR . . . . . . WORD 667 682 690 7 0000H MON1 . . . . . . . PROCEDURE EXTERNAL(3) STACK=0000H 23 44 45 59 95 104 110 120 124 128 139 10 0000H MON2 . . . . . . . PROCEDURE BYTE EXTERNAL(4) STACK=0000H 37 55 63 76 83 87 91 116 132 13 0000H MON3 . . . . . . . PROCEDURE WORD EXTERNAL(5) STACK=0000H 98 101 107 136 16 0000H MON4 . . . . . . . PROCEDURE POINTER EXTERNAL(6) STACK=0000H 113 251 0104H 1 MONTH. . . . . . . BYTE 254 255 257 262 292 293 294 296 312 313 321 231 0000H 24 MONTHDAYS. . . . . WORD ARRAY(12) DATA 236 262 296 312 231 004FH 12 MONTHSIZE. . . . . BYTE ARRAY(12) DATA 257 MOVE . . . . . . . BUILTIN 364 6 0005H 2 MXA. . . . . . . . WORD MEMBER(DPB) 525 552 667 0062H 2 NFCBS. . . . . . . WORD 674 683 699 67 0026H 2 NSFCB. . . . . . . WORD 671 693 697 698 699 198 0322H 17 NUMERIC. . . . . . PROCEDURE BYTE STACK=0002H 206 208 6 OFFSET . . . . . . LITERALLY 569 6 000DH 2 OFS. . . . . . . . WORD MEMBER(DPB) 569 142 0000H 1 OPCODE . . . . . . BYTE MEMBER(TOD) 265 316 327 336 343 354 0000H 1 OPCODE . . . . . . BYTE MEMBER(LCLTOD) 363 61 00A5H 19 OPEN . . . . . . . PROCEDURE STACK=000AH 728 0F4AH 22 OPENFILES. . . . . PROCEDURE STACK=001EH 847 480 09D8H 112 P3BYTE . . . . . . PROCEDURE STACK=001EH 537 627 330 0004H 2 PARAMETER. . . . . WORD PARAMETER AUTOMATIC 331 334 6 0012H 1 PARM . . . . . . . BYTE EXTERNAL(1) AT 6 PARMA. . . . . . . LITERALLY 6 135 0207H 15 PARSE. . . . . . . PROCEDURE WORD STACK=0008H 804 594 0C75H 31 PARSEERROR . . . . PROCEDURE STACK=001EH 806 854 856 134 002AH 4 PARSEFN. . . . . . STRUCTURE 134 136 803 804 805 807 808 809 810 823 824 825 828 832 PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 33 802 10D1H 58 PARSENEXT. . . . . PROCEDURE STACK=0022H 829 833 451 095EH 47 PCHAR. . . . . . . PROCEDURE STACK=0014H 466 468 425 087DH 86 PDECIMAL . . . . . PROCEDURE STACK=0018H 707 714 721 813 110BH 251 PLMSTART . . . . . PROCEDURE PUBLIC STACK=0034H 617 0CF1H 64 PRCOUNT. . . . . . PROCEDURE STACK=0022H 640 440 0050H 2 PREC . . . . . . . WORD 441 443 444 445 446 425 0006H 2 PREC . . . . . . . WORD PARAMETER AUTOMATIC 426 427 428 429 430 431 48 0073H 16 PRINT. . . . . . . PROCEDURE STACK=0016H 548 588 589 590 591 595 597 725 731 736 773 776 777 782 799 25 0015H 11 PRINTB . . . . . . PROCEDURE STACK=000EH 432 457 539 449 091FH 63 PRINTBCD . . . . . PROCEDURE STACK=0018H 492 21 0002H 19 PRINTCHAR. . . . . PROCEDURE STACK=000AH 26 32 40 41 367 435 460 507 538 613 629 635 637 638 762 763 758 109AH 55 PRINTFN. . . . . . PROCEDURE STACK=000EH 784 28 0020H 25 PRINTX . . . . . . PROCEDURE STACK=0010H 51 508 550 555 558 560 562 564 566 568 570 639 706 710 718 779 780 781 786 787 789 790 792 793 794 796 817 20 PROC . . . . . . . LITERALLY 417 738 758 642 0D5FH 84 PRSTATUS . . . . . PROCEDURE STACK=002CH 835 424 0042H 14 PTR. . . . . . . . WORD ARRAY(7) INITIAL 488 541 0C08H 23 PV . . . . . . . . PROCEDURE STACK=0028H 559 561 563 565 567 569 535 0BF0H 24 PV3. . . . . . . . PROCEDURE STACK=0022H 545 554 557 602 0C94H 93 PVALUE . . . . . . PROCEDURE STACK=0010H 621 738 0F76H 53 READLBL. . . . . . PROCEDURE STACK=0012H 771 332 0038H 2 RET. . . . . . . . WORD 333 347 359 003EH 2 RET. . . . . . . . WORD 643 0060H 2 RODISK . . . . . . WORD 646 654 658 662 631 0004H 2 RODISK . . . . . . WORD PARAMETER AUTOMATIC 632 636 ROL. . . . . . . . BUILTIN 383 503 ROR. . . . . . . . BUILTIN 74 496 743 6 0023H 1 ROVF . . . . . . . BYTE EXTERNAL(1) AT 6 0021H 2 RREC . . . . . . . WORD EXTERNAL(1) AT 6 RRECA. . . . . . . LITERALLY 6 6 RRECO. . . . . . . LITERALLY 6 417 0008H 2 S. . . . . . . . . WORD PARAMETER AUTOMATIC 418 420 421 388 0000H 4 S. . . . . . . . . BYTE BASED(A) ARRAY(4) 391 30 0000H 1 S. . . . . . . . . BYTE BASED(A) 31 32 396 07D0H 117 SCAN . . . . . . . PROCEDURE STACK=0008H 223 03AAH 33 SCANDELIMITER. . . PROCEDURE BYTE STACK=001AH 258 259 264 268 271 201 0333H 119 SCANNUMERIC. . . . PROCEDURE BYTE STACK=0010H 229 254 263 6 SCPTRK . . . . . . LITERALLY 567 79 00F7H 34 SEARCH . . . . . . PROCEDURE STACK=000EH 673 741 86 0119H 21 SEARCHN. . . . . . PROCEDURE STACK=000CH 695 745 251 0109H 1 SEC. . . . . . . . BYTE 304 328 142 0005H 1 SEC. . . . . . . . BYTE MEMBER(TOD) 269 271 304 358 0004H 1 SEC. . . . . . . . BYTE MEMBER(EXTRNLTOD) 354 0005H 1 SEC. . . . . . . . BYTE MEMBER(LCLTOD) 6 SECTORLEN. . . . . LITERALLY 374 57 0092H 19 SELECT . . . . . . PROCEDURE STACK=000AH 378 376 0770H 20 SELECTDISK . . . . PROCEDURE STACK=0012H 580 657 831 398 0845H 24 SETACC . . . . . . PROCEDURE STACK=0004H 409 410 372 0753H 29 SETBPB . . . . . . PROCEDURE STACK=000CH 379 703 252 043EH 289 SETDATETIME. . . . PROCEDURE STACK=001EH 346 93 013DH 16 SETDMA . . . . . . PROCEDURE STACK=000AH 624 672 740 112 0198H 23 SETDPB . . . . . . PROCEDURE STACK=0008H 373 109 0189H 15 SETIND . . . . . . PROCEDURE STACK=0008H 118 01BEH 19 SETUSER. . . . . . PROCEDURE STACK=000AH PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 34 SHL. . . . . . . . BUILTIN 211 249 275 318 374 503 504 561 565 676 772 501 0A66H 45 SHL3BYTE . . . . . PROCEDURE STACK=0006H 553 1 0002H SHOW . . . . . . . PROCEDURE STACK=0000H 506 0A93H 21 SHOWDRIVE. . . . . PROCEDURE STACK=0014H 549 634 705 709 717 774 SHR. . . . . . . . BUILTIN 164 235 383 489 497 498 583 661 662 698 494 0A48H 30 SHR3BYTE . . . . . PROCEDURE STACK=0004H 556 626 6 0000H 2 SPT. . . . . . . . WORD MEMBER(DPB) 567 631 0D31H 46 STAT . . . . . . . PROCEDURE STACK=0028H 654 658 144 0000H 1 STRING . . . . . . BYTE BASED(STRINGADR) ARRAY(1) 148 154 191 345 347 143 0030H 2 STRINGADR. . . . . WORD 144 148 154 191 335 345 347 502 0000H 2 TEMP1. . . . . . . BYTE BASED(BYTE3ADR) ARRAY(2) 503 495 0000H 2 TEMP1. . . . . . . BYTE BASED(BYTE3ADR) ARRAY(2) 499 495 017AH 1 TEMP2. . . . . . . BYTE 496 499 138 0216H 14 TERMINATE. . . . . PROCEDURE STACK=0008H 207 210 213 216 220 227 261 350 600 726 859 300 0036H 2 TESTVALUE. . . . . WORD 142 0000H 27 TOD. . . . . . . . STRUCTURE BASED(TODADR) 262 263 264 265 269 271 302 303 304 305 316 327 335 336 343 141 002EH 2 TODADR . . . . . . WORD 142 262 263 264 265 269 271 302 303 304 305 316 327 334 335 336 343 330 06A9H 106 TODASCII . . . . . PROCEDURE STACK=0024H 365 20 TRUE . . . . . . . LITERALLY 69 280 394 463 612 621 685 707 714 721 360 0004H 2 TSADR. . . . . . . WORD PARAMETER AUTOMATIC 362 364 223 0004H 1 UB . . . . . . . . BYTE PARAMETER AUTOMATIC 224 229 201 0004H 1 UB . . . . . . . . BYTE PARAMETER AUTOMATIC 202 219 667 0077H 15 UFCB . . . . . . . BYTE ARRAY(15) DATA 673 67 0006H 32 USED . . . . . . . WORD ARRAY(16) 669 691 721 118 0004H 1 USER . . . . . . . BYTE PARAMETER AUTOMATIC 119 120 67 00EFH 16 USER . . . . . . . BYTE ARRAY(16) 669 685 712 713 719 720 6 006AH 1 USERCODE . . . . . BYTE 74 827 701 0EA2H 153 USERSTATUS . . . . PROCEDURE STACK=001CH 837 602 0004H 2 V. . . . . . . . . WORD PARAMETER AUTOMATIC 603 607 608 541 0004H 2 V. . . . . . . . . WORD PARAMETER AUTOMATIC 542 544 425 0008H 2 V. . . . . . . . . WORD PARAMETER AUTOMATIC 426 428 429 247 0004H 1 VAL. . . . . . . . BYTE PARAMETER AUTOMATIC 248 249 424 0133H 7 VAL. . . . . . . . BYTE ARRAY(7) INITIAL 444 453 466 482 491 439 0004H 2 VALUE. . . . . . . WORD PARAMETER AUTOMATIC 440 444 445 4 003EH 8 VERDATE. . . . . . BYTE ARRAY(8) DATA 5 0046H 9 VERSION. . . . . . BYTE ARRAY(9) DATA 595 724 0F3BH 15 VERSIONERR . . . . PROCEDURE STACK=001AH 730 735 767 290 010CH 1 WEEKDAY. . . . . . BYTE 306 318 240 0032H 2 WORDVALUE. . . . . WORD 243 244 284 286 296 305 306 309 312 103 016BH 15 WRITEPROT. . . . . PROCEDURE STACK=0008H 232 0006H 1 Y. . . . . . . . . BYTE PARAMETER AUTOMATIC 233 235 236 251 0106H 1 YEAR . . . . . . . BYTE 259 260 262 279 282 287 309 323 278 0034H 2 YEARLENGTH . . . . WORD 281 283 284 286 234 0102H 1 YP . . . . . . . . BYTE 235 237 238 603 017EH 1 ZERO . . . . . . . BYTE 605 610 612 450 0174H 1 ZEROSUP. . . . . . BYTE 454 461 463 425 0004H 1 ZEROSUP. . . . . . BYTE PARAMETER AUTOMATIC 426 431 434 MODULE INFORMATION: CODE AREA SIZE = 1206H 4614D CONSTANT AREA SIZE = 03E6H 998D PL/M-86 COMPILER SHOW 2.1: SHOW DISK DATA PAGE 35 VARIABLE AREA SIZE = 0188H 392D MAXIMUM STACK SIZE = 0034H 52D 1524 LINES READ 0 PROGRAM ERROR(S) END OF PL/M-86 COMPILATION