1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 1 ($$$LOGO.) F 2 2 INPUT $$$LOGO. 1 2 3 4 5 6 7 8 9 10 * ......... BBBBBBBBBBBBBBBBBB TTTTTTTTTTTTTTTTTTTTTTTT IIIIIIIIIIII 11 * ................. BBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTTTTTTTTTTTTTT IIIIIIIIIIII 12 * ..........##......... BBBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTTTTTTTTTTTTTT IIIIIIIIIIII 13 * ............##........... BBBBBB BBBBBB TTTTTT TTTTTT TTTTTT IIIIII 14 * .............##............ BBBBBB BBBBBB TTTTT TTTTTT TTTTT IIIIII 15 * .............##............ BBBBBB BBBBBBB TTTT TTTTTT TTTT IIIIII 16 * ..............##............. BBBBBBBBBBBBBBBBBBB TTTTTT IIIIII 17 * ..............##............. BBBBBBBBBBBBBBBBB TTTTTT IIIIII 18 * ..............##............. BBBBBBBBBBBBBBBBBBB TTTTTT IIIIII 19 * .............##.............. BBBBBB BBBBBB TTTTTT IIIIII 20 * ...........##.............. BBBBBB BBBBBB TTTTTT IIIIII 21 * ..........##............... BBBBBB BBBBBB TTTTTT IIIIII 22 * ........##............... BBBBBB BBBBBBB TTTTTT IIIIII 23 * .....##.............. BBBBBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTT IIIIIIIIIIII 24 * ................. BBBBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTT IIIIIIIIIIII 25 * ......... BBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTT IIIIIIIIIIII 26 * 27 * 28 * ****** Copyright 1982, 1983, 1984, 1985, 1986, 1987, 1988, 29 * 1989, 1990, 1991, 1992 BTI Computer Systems ****** 30 * 31 * This document and the program it describes are the exclusive property 32 * of and proprietary to BTI Computer Systems. No use, reproduction, or 33 * disclosure of this document or its contents, either in full or in part, 34 * by any means whatsoever regardless of purpose may be made without the 35 * prior written consent of BTI Computer Systems. 36 * 37 * BTI Computer Systems 38 * Sunnyvale, California 94086 3 4 5 * RRRRRR EEEEEE BBBBB UU UU IIII LL DDDDD 6 * RR RR EE BB BB UU UU II LL DD DD 7 * RR RR EE BB BB UU UU II LL DD DD 8 * RRRRRR EEEEE BBBBB UU UU II LL DD DD 9 * RR RR EE BB BB UU UU II LL DD DD 10 * RR RR EE BB BB UU UU II LL DD DD 11 * RR RR EEEEEE BBBBB UUUUU IIII LLLLLL DDDDD 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 2 F 0 13 14 ********************************************************************************** 15 * * 16 * Revision Date * 17 * -------- ---- * 18 * 1.1 8210 11 Oct 82 * 19 * misc cleanups. Emulated disks removed. * 20 * 1.2 8210 16 Oct 82 * 21 * checks for beyond volume end. * 22 * tries to follow structure even if block * 23 * is a duplicate. Reports more FBI field * 24 * errors. RC * 25 * 1.3 8306 18 June 83 * 26 * added error messages for unknown FBI type * 27 * counts actual number of IDX entries. RC * 28 * 1.4 8311 27 Oct 83 * 29 * new field in DISKCB, DCBVOLSIZE, * 30 * to hold physical pack size. DH * 31 * 1.5 8401 19 Jan 84 * 32 * Change to FETCHITEMR routine, now OK to * 33 * terminate a number with ':'. DH * 34 * 1.6 8409 20 Sep 84 * 35 * Change PAGEIN to call subroutines to check FBI * 36 * and correct fields. MH * 37 * Convert to run online under ONPL. MH * 38 * 1.7 8409 21 Sep 84 * 39 * Check UDIRs for ascending order FDEs. * 40 * Check UDIR1 index match with UDIR2 first FDE. * 41 * Check UDIR entries are hashed into correct IDX. * 42 * Check online version for exclusive disk access. MH * 43 * 1.8 8409 26 Sep 84 * 44 * Write out blocks which have changed FBI's. * 45 * Fix bug in BUILDADTL. (set PREVBLOCK for PAGEIN) MH * 46 * A8410 05 Oct 84 * 47 * Change to date revision code. * 48 * Fix check for exclusive disk access. MH * 49 * A8410a 05 Oct 84 * 50 * Put in two flags as a temporary fix to skip * 51 * over some FBI field checks. (RLBLKFLAG and * 52 * SLFSNFLAG) MH * 53 * A8410b 08 Oct 84 * 54 * Require exact match of Y, YES, N, or NO on response * 55 * to rebuild ADTs question. * 56 * Minor bug fixes. MH * 57 * A8410c 11 Oct 84 * 58 * List FBI type expected when wrong FBI type is found. * 59 * List previous block on SAF block errors. * 60 * Correct flags set error message. * 61 * Zero out REUSEMARK after reporting block reuse. * 62 * Change CURDATE to a week past last known date. MH * 63 * A8410d 16 Oct 84 * 64 * Remove substitution list entries if they are free * 65 * blocks. * 66 * A8411 18 Nov 84 * 67 * Put in the present date on incorrect FBI3 dates. * 68 * A8412 03 Dec 84 * 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 3 F 0 69 * Sort minor access blocks for optimal disk order. * 70 * A8412a 17 Dec 84 * 71 * Get CURDATE from @VGETDATE. * 72 * A8501 17 Jan 84 * 73 * CHANGEFLAG -1 now indicates don't tell about * 74 * FBI problems, just fix them. Other misc fixes. * 75 * A8502 26 Feb 85 * 76 * Moved SECPTR from variables area to program area. * 77 * A8503 08 Mar 85 * 78 * Moved call to MOVESTUFF out of SORT. Other changes * 79 * to REBSORT to allow usage by DiskCopy. MH * 80 * A8503a 08 Mar 85 * 81 * Read in secondary security block to check its FBI. MH * 82 * A8504a 09 Apr 85 * 83 * Set major access block index in RAF data pages. * 84 * Remove SLFSNFLAG and jump around ASN check. MH * 85 * A8505 16 May 85 * 86 * Check code files for maintence and backup privileges. MH * 87 * A8506 12 Jun 85 * 88 * Added flag and code necessary for a directory * 89 * verify option. HET * 90 * A8507 15 Jul 85 * 91 * Added checking of the ADT chains if the volume is * 92 * not rebuilt. Moved reporting of free space on volume * 93 * to before check for rebuilding ADTs. Added CHECKADT * 94 * parameter. * 95 * A8507a 15 Jul 85 * 96 * Fix PAR R4 instructions in calls to PREPOUT for * 97 * various error conditions. * 98 * A8601 21 Jan 86 * 99 * Fix free block block error message type. * 100 * Set R1 before calling OPENDISK (indicates sub's area). * 101 * Add one hour to CURDATE to prevent wrong date messages. * 102 * Bad tracks block reuse error message changed. * 103 * Look for tiny RAFs when marking RAF file types. * 104 * * 105 * A8602 07 Feb 86 * 106 * Added checking of SAF records for validity. If the * 107 * CHANGEFLAG is set to 1 or -1 then SAF end pointers * 108 * which are zero are set correctly. LB * 109 * A8602a 18 Feb 86 * 110 * FBI checking ensures substitution block has the * 111 * no-sub flag set. Moved calls to MARKBTRX after * 112 * call to UNSUB or on the non rebuild path out of * 113 * MARKVOLL. * 114 * A8602b 20 Feb 86 * 115 * Misc comment changes. CSRCH to SRCHI. Default * 116 * for SUBFLAG is now 1. Fix in UNSUB for case * 117 * where subs list is full. RC * 118 * A8603 04 Mar 86 * 119 * Added a flag (WARNFLAG) which allows the user * 120 * the option of having the SAF end pointer zero * 121 * warning to be output or not. Set to -1 it * 122 * will not output the warning. Anything else * 123 * will cause it to output the warning. LB * 124 * Changes made for modifications to FDE. * 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 4 F 0 125 * EMPTY changed to an EQU, and EMPTY2 removed. MH * 126 * Misc. bug fixes in SAF checking routines. LB * 127 * A8608 12 Aug 86 * 128 * A pointer was moved out of the variable area * 129 * so that TOPL would load it. RC * 130 * A8608a 29 Aug 86 * 131 * Fixes in saf end pointer correction. JB * 132 * Fixes to do UNSUB and MARKBTRX before attempting * 133 * to calculate number of now free blocks. RC * 134 * A8611a 07 Nov 86 * 135 * Fix to set the non-substitution bit in the FBI of * 136 * the security block. JB * 137 * A8703 31 Mar 87 * 138 * Fix to not set alarm bit with front panel * 139 * messages. RC * 140 * A8707 24 Jul 87 * 141 * Added code to set the ghost bit on a file * 142 * if it is found to be bad. Semi-temporary * 143 * to cure immediate problem. RC * 144 * A8801 13 Jan 88 * 145 * Change to make sure NOSUBS and WRITECK bits * 146 * are set in the security block FBI. JB * 147 * A8801a 28 Jan 88 * 148 * Changes to AFT and IDX relative block * 149 * number check to match against table * 150 * index. RC * 151 * A8803 04 Mar 88 * 152 * Changes to FBI field checks to always * 153 * check last change date (only block omitted * 154 * before was ADT). RC * 155 * A8803a 07 Mar 88 * 156 * Changes to MARKIDX to do IDXes in * 157 * ascending order. RC * 158 * A8805 27 May 88 * 159 * Added new codes from VOPENDISK. DH * 160 * A8806 07 Jun 88 * 161 * Added CHECKSTRAYS (enabled by STRAYFLAG). DH * 162 * A8806a 29 Jun 88 * 163 * Changed ERRMARK (name only) to REUSEMARK. * 164 * Fixed bug in pagein concerning reporting * 165 * of blocks beyond volume end. * 166 * Split error lines up to prevent lines longer * 167 * than 80 characters. * 168 * Now sets SECMNTDAT when the ADTs are * 169 * re-written. * 170 * A8806b 29 Jun 88 * 171 * Revamp of FBI correction code. RC * 172 * A8808 26 Aug 88 * 173 * Now sets SECLASTDT when the ADTs are * 174 * rewritten. RC * 175 * A8810 17 Oct 88 * 176 * Added code to print pack ID info. RC * 177 * A8810a 26 Oct 88 * 178 * Removed RLBLKFLAG (check is now a normal * 179 * part of FBICHECK) and set default value * 180 * for CHANGEFLAG to 1. RC * 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 5 F 0 181 * A8810b 27 Oct 88 * 182 * Added PWCHKFLAG and code to inform * 183 * about accounts without passwords. RC * 184 * A8810c 27 Oct 88 * 185 * Changed PW check to always print BTI * 186 * and proprietary accounts with null PWs. RC * 187 * A8901 24 Jan 89 * 188 * Added new hardware type for VT. Fixed so * 189 * that MARKBTRX not called twice if operator * 190 * refuses rebuild for minor errors. RC * 191 * A9002 27 Feb 90 * 192 * Changed PAGEIN to check FBIDEFFLAGS instead * 193 * of FBIFLAGS, and separately check the FBIMEMERR. * 194 * A9003 10 Mar 90 * 195 * Added a separate buffer for FBIs of minor * 196 * access blocks. CG * 197 * A9003a 19 Mar 90 * 198 * Gave major access blocks their own FBI buffer. * 199 * Changed MARKMINOR to not sort the block numbers * 200 * if SORTMINOR is 0. Changed MARKMINOR to compute * 201 * filesize component by counting the number of * 202 * blocks it reads successfully. CG * 203 * A9107 29 Jul 91 * 204 * Changes made to check DCBSCSI to see if SCSI disk drive. * 205 * A9208 06 Aug 92 * 206 * CHECKSTRAYS message fixed to display block type correctly. RC * 207 * * 208 ********************************************************************************** 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 6 F 0 210 211 ********************************************************************************** 212 * * 213 * The code file produced from this source, REBUILD, is saved * 214 * in OFFLINE.!!! under two different names. A flag determines * 215 * which variation the code file is. One file is named REBUILD * 216 * and functions as a disk rebuild program. The other file is * 217 * named DIRVERIFY and functions as a disk directory verify * 218 * program. * 219 * * 220 * REBUILD follows the entire disk structure reading in every * 221 * block, checking its FBI for valid fields, and marking the * 222 * block as in use. Account saved block sizes are recalculated * 223 * and updated in the UDIR, too. Any disk structure errors * 224 * are reported, along with FBI errors and incorrect account * 225 * sizes. After the entire structure has been followed * 226 * the remaining blocks on the disk are declared free blocks * 227 * and the ADT tables are rebuilt using these free blocks. * 228 * This in effect, recovers all space that may have been * 229 * lost on the volume due to system crashes, etc. * 230 * * 231 * DIRVERIFY verifies the directory structure of the selected * 232 * disk volume. The volume's disk structure tree is followed * 233 * with all blocks being read and verified up to the file data * 234 * block level. File data blocks are NOT ever read. The file * 235 * data block addresses that are available without further disk * 236 * reads (RAF blocks, CODE blocks, and the root SAF block) are * 237 * checked for being duplicates and for being beyond the end * 238 * of the volume. Any errors encountered are reported. At * 239 * the termination of this program if ANY error occurred then * 240 * DIRVERIFY displays the message "Directory error encountered * 241 * on volume ". Otherwise it terminates normally. * 242 * * 243 * Again, the difference between the code files is merely some * 244 * flag settings which are illustrated as follows: * 245 * * 246 * REBUILD : DIRVERIFY=0, REBUILDFLAG=1, SIZECALC=1 * 247 * DIRVERIFY : DIRVERIFY=1, REBUILDFLAG=0, SIZECALC=0 * 248 * * 249 * Note that if DIRVERIFY = 1 then the program zeroes * 250 * REBUILDFLAG and SIZECALC. * 251 * * 252 ********************************************************************************** 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 7 F 0 Variable Definitions 255 256 BLOCK 257 EXT 258 259 START ONPLSTART 260 START2 ALONESTART 261 262 INPUT $$$MACROS 1 * Including MACROS.ASSEM Version A8607. 263 INPUT SOURCE.OPSYS:MACHDEFS 264 INPUT SOURCE.OPSYS:IODEFS 265 INPUT SOURCE.OPSYS:DISKDEFS 266 INPUT SOURCE.OPSYS:VIRTDEFS 267 INPUT BOOT.OPSYS:OPLVECTORS 268 INPUT BOOT.OPSYS:DISKCB 269 0000000D ABS 270 CR EQU 0D 0000000A ABS 271 LF EQU 0A 272 273 INITPSECT 03000,04000,PROGRAM 274 275 VARS 276 277 ********************************************************************************** 278 * * 279 * Global Variables * 280 * * 281 ********************************************************************************** 282 00004000 283 PLPLACE BSS WPP place for the pack label 00004400 284 BTRXPLACE BSS WPP place for bad tracks list 00004800 285 SUBSPLACE BSS WPP place for sustitution list 00004C00 286 VOLLPLACE BSS WPP place for volume label 00005000 287 SECPLACE BSS WPP security block 00005400 288 AFTPLACE BSS WPP account finder table 00005800 289 IDXPLACE BSS WPP account index 00005C00 290 DIR1PLACE BSS WPP primary directory block 00006000 291 DIR2PLACE BSS WPP secondary directory block 02006400 292 CHRDATAPT BSSC 0 character pointer to block 00006400 293 DATAPLACE BSS WPP file data blocks 00006800 294 MINPLACE BSS WPP minor access blocks 00006C00 295 MAJPLACE BSS WPP major access blocks 00007000 296 FREEPLACE BSS WPP free blocks going out 00007400 297 ADTPLACE BSS WPP available disk tables 00007800 298 SORTPLACE BSS WPP place to sort minor access blocks 00007C00 299 MERGEPLACE BSS WPP place to use for merge sort 300 BSS 1 merge stores zero past end of block 301 00008001 302 PLFBI BSS FBILNTH 0000800C 303 BTRXFBI BSS FBILNTH 00008017 304 SUBSFBI BSS FBILNTH 00008022 305 VOLLFBI BSS FBILNTH 0000802D 306 SECFBI BSS FBILNTH 00008038 307 AFTFBI BSS FBILNTH 00008043 308 IDXFBI BSS FBILNTH 0000804E 309 DIRFBI BSS FBILNTH 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 8 F 0 00008059 310 DIR2FBI BSS FBILNTH 00008064 311 DATAFBI BSS FBILNTH 0000806F 312 MINORFBI BSS FBILNTH 0000807A 313 MAJORFBI BSS FBILNTH 00008085 314 FREEPFBI BSS FBILNTH 00008090 315 ADTFBI BSS FBILNTH 316 317 * Global Variables used in MARKSAF 318 0000809B 319 CHARDISP BSS 1 byte displacement within block 0000809C 320 CHAROFFST BSS 1 record character offset within a block 0000809D 321 ENDBLK BSS 1 block end of SAF pointer 0000809E 322 ENDBYTE BSS 1 character end of SAF pointer 0000809F 323 ERRORFLG BSS 1 1 if a record if bad 000080A0 324 FILEBADFLG BSS 1 non-zero if a file has been found bad 000080A1 325 HDRBLOCK BSS 1 current block 000080A2 326 HDRDISP BSS 1 current offset within the above block 000080A3 327 RECORDSIZE BSS 1 current record length 000080A4 328 SAFSIZE BSS 1 size of the SAF 000080A5 329 SAVER2 BSS 1 holds the record length 000080A6 330 WORDOFFST BSS 1 record word offset within a block 331 332 000080A7 333 CURDATE BSS 1 current date (on disk) 000080A8 334 WIDETIME BSS2 1 time of invocation 000080AA 335 RELBLOCK BSS 1 relative block number 000080AB 336 FREED BSS 1 incremented for each freed 000080AC 337 ONCEFREE BSS 1 what was free on volume 000080AD 338 VOLSIZE BSS 1 size of volume 000080AE 339 ADTLSIZE BSS 1 number of blocks in each ADT list 000080AF 340 SECDA BSS 1 disk address of security block 000080B0 341 SEC2DA BSS 1 disk address of second security block 000080B1 342 LASTFREE BSS 1 last free block 000080B2 343 NEWFBITYPE BSS 1 ***when converting, FBI going to 000080B3 344 DISKNAME BSS 1 pak6 disk name (DSKscu) 000080B4 345 RDISKCB BSS DCBLEN configuration block for offline disk 346 000080BC 347 OUTBUF BSS 25 line output buffer 348 000080D5 349 OFFLINE BSS 1 sez 1 if offline, 0 if online 000080D6 350 CURBLK BSS 1 disk address 000080D7 351 FBICHANG BSS 1 non-zero means FBI alterations made 000080D8 352 PNTRFDE BSS 1 pointer to current FDE 000080D9 353 REUSEMARK BSS 1 1 sez this block was a reuse 000080DA 354 ERRDIRVF BSS 1 1 sez a reuse error or bad MS address 000080DB 355 ERRORCNT BSS 1 count of non-fatal errors 000080DC 356 ERRORCODE BSS 1 numeric error code 000080DD 357 ERRORTEMP BSS 1 temp for error output 000080DE 358 BLOCKCHANG BSS 1 non-zero if block modified 000080DF 359 READASN BSS2 1 account serial number of current account 000080E1 360 READSERIAL BSS 2 serial number of current file 000080E3 361 PREVBLOCK BSS 1 previous block in a saf 000080E4 362 UDIRTYPE BSS 1 UDIR FBI type 000080E5 363 UDIRBLOCK BSS 1 UDIR block number 000080E6 364 SECPTRAK BSS 1 sectors per track 000080E7 365 SECPCYL BSS 1 sectors per cylinder 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 9 F 0 000080E8 366 SECTORSW LABEL 004080E8 367 SECTORS BSSB 1:32 bit array for sector ordering 368 000080E9 369 ERRORBLOCK LABEL 000080E9 370 READVOL BSS 2 000080EB 371 READSYS BSS 1 000080EC 372 READSYSPW BSS 2 000080EE 373 READACCT BSS 2 000080F0 374 READPROJ BSS 1 000080F1 375 READACCTPW BSS 2 000080F3 376 READNAME BSS 2 000080F5 377 READEXT BSS 1 000080F6 378 READFILEPW BSS 2 379 380 * Global Constants used in MARKSAF 381 00001010 BYTE 382 BADFILETYP EQU BIT 8 bad file type if set 00900000 ABS 383 EOD EQU 0900000 end of data value 00800000 ABS 384 FILEMARK EQU 0800000 file mark value 00000003 ABS 385 RECHDRLEN EQU 3 size of SAF record header 00001810 BYTE 386 UNUSEDSAF EQU BIT 12 unused bit in a SAF record header 387 388 ********************************************************************************** 389 * * 390 * The bit array. Each bit in the following array corresponds * 391 * to one file block on the volume. A zero indicates that it is * 392 * (as yet) unused, a one indicates that it has been marked. * 393 * * 394 ********************************************************************************** 395 000F4240 ABS 396 MAXBLK EQU 1000000 maximum number of blocks on a volume 000080F8 397 ARRAYW LABEL 004080F8 398 ARRAY BSSB 1:MAXBLK bit array of blocks 399 BSS 0 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 10 F 0 Initialization 402 403 PROG 03000 FE0E301D 404 JMP ALONESTART ensure that start at 3000 works 405 * --- 406 03001 41393230 407 VERSION TEXTZ "A9208" 408 03003 004880E8 409 SECPTR PTR SECTORS pointer into the bit array for sectors 03004 004880F8 410 BITP PTR ARRAY pointer indexed by blocknum 03005 00FFFFFF 411 MSMASK VFD ONEBITS/MSBLKFIELD 03006 0007FFFF 412 MASK VFD 07FFFF a mask used to get the record length 413 03007 D805C200 414 PAKYES PAK6 YES 03008 D59F8000 415 PAKY PAK6 Y 03009 964C9000 416 PAKNO PAK6 NO 0300A 927C0000 417 PAKN PAK6 N 0300B 52269A93 418 CHECKADT PAK12 CHECKADT 0300D E1D48000 419 DOTBANG PAK6 ! beyond last customer project 420 0300E 379EFD4E 421 OLDDATE VFD 0379EFD4E oldest date we will allow on a disk 422 * 01-Jan-80 0:00 0300F 00000001 423 SIZECALC VFD 1 non-zero if to redo account size 03010 00000001 424 SUBFLAG VFD 1 non-zero says remove bogus sublist entries 03011 00000001 425 CHANGEFLAG VFD 1 0 sez don't change FBI problems 426 * 1 sez fix busted FBIs and tattle 427 * -1 sez fix busted FBIs and keep quiet 03012 FFFFFFFF 428 WARNFLAG VFD -1 -1 sez skip the SAF end ptr message 429 * 0 sez output the warning message 03013 00000000 430 CONVFLAG VFD 0 non-zero if to do conversion 03014 00000001 431 REBUILDFLAG VFD 1 zero sez don't rebuild ADTs 03015 10000000 432 NWREVISION VFD 010000000 if convert, new disk revision code 03016 00000000 433 DIRVERIFY VFD 0 non-zero sez just do a directory verify 03017 00000000 434 DROPBAD VFD 0 non-zero sez mark bad file as ghost 03018 00000000 435 STRAYFLAG VFD 0 non-zero to display unattached blocks 436 * N.B. must also clear REBUILDFLAG for STRAYFLAG to work!! 03019 00000000 437 PWCHKFLAG VFD 0 non-zero sez tattle on accounts 438 * with no password. N.B. always reports 439 * such BTI and proprietary accounts. 440 * 441 * Ordinarily, a minor access block is sorted for optimal access 442 * before reading each data block referenced therein. If we 443 * want to write the access block back, we need to avoid this. 444 * This is done by setting SORTMINOR to 0. 445 * 0301A 00000001 446 SORTMINOR VFD 1 1 sez to sort minor access block 447 00000000 ABS 448 EMPTY EQU 0 nothing here 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 11 F 0 Initialization 450 451 ********************************************************************************** 452 * * 453 * We start here if running under ONPL (online). We must be * 454 * sure we have exclusive use of the disk if we are to actually * 455 * rebuild it. * 456 * * 457 ********************************************************************************** 458 0000301B 459 ONPLSTART LABEL 0301B EC0080D5 460 STZ OFFLINE say we are running under ONPL 0301C FE0E301E 461 JMP ONPLMERGE and merge in with OPL code 462 * --- 463 464 ********************************************************************************** 465 * * 466 * Start from OPL. We ask the operator who to rebuild and then * 467 * do it. We set the OFFLINE flag since we do a couple of illegal * 468 * online instructions (PFRD) that must be skipped. * 469 * * 470 ********************************************************************************** 471 0000301D 472 ALONESTART LABEL 0301D EDC080D5 473 STW OFFLINE say we are running under OPL 0000301E 474 ONPLMERGE LABEL 475 * 476 * Tell the guy what program we are acting as : REBUILD or DIRVERIFY 477 * 0301E 5C003016 478 CMZ DIRVERIFY if we are running as DIRVERIFY 0301F FE0C3025 479 JNE SAYDIRVER then go say so 480 * \ / else say REBUILD 03020 DC5013E3 @ 481 CALLNP @VDISPLAY tell the world who is here 03021 52454255 482 ASCII 2,REBUILD "REBUILD " 03023 20200000 483 VFD " " AND 03F3F0000 03024 FE0E302B 484 JMP GETDISK go get the disk 485 * --- 486 * 487 * Announce ourselves as DIRVERIFY 488 * 00003025 489 SAYDIRVER LABEL 03025 DC5013E3 @ 490 CALLNP @VDISPLAY say we are DIRVERIFY 03026 44495256 491 ASCII 2,DIRVERIF "DIRVERIFY " 03028 19200000 492 VFD "Y " AND 03F3F0000 03029 EC00300F 493 STZ SIZECALC say no account size recalculations 0302A EC003014 494 STZ REBUILDFLAG and no ADT rebuilding 0000302B 495 GETDISK LABEL 0302B DC5013F8 @ 496 CALLNP @VFETCHITMH fetch the drive name in PAK6 0302C F678311E 1 497 JBT R1/BIT 28 ALONEHELP if no param, give help 0302D F27C31C3 1 498 JBF R1/BIT 30 ALONEBADF jump if not symbol, error 499 * \ / 500 501 * Disk given as its drive name DSKscu where s=slot,c=chan,u=unit. 502 0302E FACC31C3 3 503 JNEZ R3 ALONEBADF only a 6 char symbol is allowed 0302F E48080B3 2 504 ST R2 DISKNAME save it 03030 5C003016 505 CMZ DIRVERIFY are we in DIRVERIFY mode? 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 12 F 0 Initialization 03031 FE0C3038 506 JNE HAVEPARAMS if so then no more parameters 507 * \ / 508 03032 DC5013F8 @ 509 CALLNP @VFETCHITMH see if any other parameters 03033 F6783038 1 510 JBT R1/BIT 28 HAVEPARAMS if no more params, continue 03034 F27C31C3 1 511 JBF R1/BIT 30 ALONEBADF jump if not symbol, error 03035 6A80300B 23 512 UCPR2 R2 CHECKADT is it a request to check the ADT's 03036 FE0C31C3 513 JNE ALONEBADF if not, then complain 03037 EC003014 514 STZ REBUILDFLAG don't rebuild the disk 515 * \ / 516 00003038 517 HAVEPARAMS LABEL 03038 600080B3 0 518 LD R0 DISKNAME R0 = disk name 03039 60440000 1 IMM 519 LD R1 0 indicate we are using system's subs area 0303A 610480B4 4 IMM 520 LD R4 ADR RDISKCB R4 -> our disk control block 0303B DC5013EB @ 521 CALLNP @VOPENDISK open the disk 0303C FA0230B6 0 522 JEQZ R0 SHARE jump if successful 0303D DC00369D 523 CALL FINDTEXTZ find right error message 0303E 41520000 0 REG 524 PARV R0 0303F 40003045 525 PARL OPENERRTAB 03040 60520000 1 0 REG 526 LD R1 R0 R1 -> error message 03041 DC1013F9 @ 527 CALL @VPREPOUT tell user about our troubles 03042 410080B3 528 PAR DISKNAME 03043 40164400 1 @R 529 PARL @R1 03044 FE0E30E5 530 JMP CHECKSTOP and die horribly 531 * --- 532 00003045 533 OPENERRTAB LABEL errors from OPENDISK 03045 20457272 534 TEXTZ " Error code zero." 0304A 20496E76 535 TEXTZ " Invalid disk name, \R1\." 03051 205C5231 536 TEXTZ " \R1\ is not a disk." 03057 20446973 537 TEXTZ " Disk \R1\ is not online." 0305E 20457272 538 TEXTZ " Error reading pack label on \R1\." 03067 20457272 539 TEXTZ " Error reading volume label on \R1\." 03071 20457272 540 TEXTZ " Error reading substitution block on \R1\." 0307C 20496E73 541 TEXTZ " Insufficient memory for substitution list for \R1\." 0308A 20496E74 542 TEXTZ " Internal error attempting to mount \R1\." 03095 20536F6D 543 TEXTZ " Someone else already has \R1\ maintenance mounted." 030A2 205C5231 544 TEXTZ " \R1\ is writeprotected." 030A9 20496E73 545 TEXTZ " Insufficient system resources to mount \R1\." 030B5 00000000 546 VFD 0 547 548 549 * Print either the REBUILD header message or the DIRVERIFY header message 550 000030B6 551 SHARE LABEL 030B6 E45F8001 1 6 STAK 552 ST R1 STAK SP,1 save R1 030B7 60170802 0 4 BASE 553 LD R0 R4,DCBSECPTRK get sectors per track 030B8 E40080E6 0 554 ST R0 SECPTRAK and save em 030B9 60570803 1 4 BASE 555 LD R1 R4,DCBTRKPCYL tracks per cylinder 030BA 1C124000 0 1 REG 556 MUL R0 R1 turn into sectors per cylinder 030BB E40080E7 0 557 ST R0 SECPCYL and save for sort routines 558 * \ / 030BC 610430F0 4 IMM 559 LD R4 ADR DVVERSIONM address of DIRVERIFY's header message 030BD 5C003016 560 CMZ DIRVERIFY if in directory verify mode 030BE FE0C30C0 561 JNE PRINTHEADR then we have what we want to print 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 13 F 0 Initialization 030BF 610430E6 4 IMM 562 LD R4 ADR VERSIONM else we want REBUILD's header 563 * \ / 000030C0 564 PRINTHEADR LABEL print the correct header 030C0 DC1013F9 @ 565 CALL @VPREPOUT output the header messages 030C1 41003001 566 PAR VERSION version of program 030C2 40170400 4 @R 567 PARL @R4 pointer to correct header message 030C3 5C0080D5 568 CMZ OFFLINE see if we need exclusive disk access 030C4 FE0C30D2 569 JNE ANNOUNCE if not then go announce ourself 570 * \ / 030C5 5C003016 571 CMZ DIRVERIFY if we are doing a directory verify 030C6 FE0C30D2 572 JNE ANNOUNCE then we don't need exclusive disk access 573 * \ / 030C7 605F8001 1 6 STAK 574 LD R1 STAK SP,1 restore R1 030C8 5C124000 1 REG 575 CMZ R1 do we have exclusive access? 030C9 FE0230D2 576 JEQ ANNOUNCE if so then go announce ourself 577 * \ / 030CA DC1013F9 @ 578 CALL @VPREPOUT tell user he can't mess with the DISK 030CB 410080B3 579 PAR DISKNAME the disk 030CC 40003112 580 PARL BUSYDSKM what to say 030CD EC00300F 581 STZ SIZECALC set all flags to protect disk 030CE EC003010 582 STZ SUBFLAG 030CF EC003011 583 STZ CHANGEFLAG 030D0 EC003013 584 STZ CONVFLAG 030D1 EC003014 585 STZ REBUILDFLAG 586 * \ / 000030D2 587 ANNOUNCE LABEL 030D2 DC5013FB @ 588 CALLNP @VGETDATE get the current time and date 030D3 E68080A8 23 589 ST2 R2 WIDETIME save two word time 030D4 600AA800 0 2 CBM 590 LD R0 R2/BITS 20:19 want the 32-bit version 030D5 604AC140 1 3 CBM 591 LD R1 R3/BITS 0:19 030D6 E44A1940 1 0 CBM 592 ST R1 R0/BITS 12:31 030D7 1804036E 0 IMM 593 ADD R0 FOURSECSH give some grace period for online 030D8 E40080A7 0 594 ST R0 CURDATE and presto, the current date 595 030D9 5C00300F 596 CMZ SIZECALC are we readjusting acct size? 030DA FE0230DD 597 JEQ NOSIZECALC jump if not 030DB DC1013F9 @ 598 CALL @VPREPOUT inform him that we are 030DC 400030FC 599 PARL SIZECALCM 600 * \ / 601 000030DD 602 NOSIZECALC LABEL 030DD 5C003013 603 CMZ CONVFLAG are we doing a conversion? 030DE FE0230E2 604 JEQ NOCONVERT jump if not 030DF DC1013F9 @ 605 CALL @VPREPOUT inform him that we are 030E0 41003015 606 PAR NWREVISION 030E1 40003107 607 PARL CONVERTM 608 000030E2 609 NOCONVERT LABEL 030E2 DC4031D0 610 CALLNP FREEVOL free the volume 611 * \ / 030E3 610480B4 4 IMM 612 LD R4 ADR RDISKCB R4 => our disk control block 030E4 DC5013EC @ 613 CALLNP @VCLOSEDISK clean up before leaving 614 * \ / 615 000030E5 616 CHECKSTOP LABEL 030E5 5C8013F0 617 LDPC VDONEEXIT return to OPL (or ONPL) 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 14 F 0 Initialization 618 * --- 619 620 * Initiation messages. 030E6 20566F6C 621 VERSIONM TEXTZ " Volume ADT rebuilder. Version \C1\." 030F0 20446972 622 DVVERSIONM TEXTZ " Directory structure verifier. Version \C1\." 030FC 20202052 623 SIZECALCM TEXTZ " Recalculating account saved block size." 03107 20202043 624 CONVERTM TEXTZ " Converting the volume to version \H1\." 03112 20074469 625 BUSYDSKM TEXTZ " Disk \R1\ already mounted. Cannot change it." 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 15 F 0 Initialization 627 628 ********************************************************************************** 629 * * 630 * Outputs help message. * 631 * * 632 ********************************************************************************** 633 0000311E 634 ALONEHELP LABEL 0311E 6104312D 4 IMM 635 LD R4 ADR AHM1 address of REBUILD's help message 0311F 5C003016 636 CMZ DIRVERIFY but, is this really directory verify ?? 03120 FE023122 637 JEQ HELPLOOP no, it is REBUILD, have correct message 638 * \ / 03121 6104318C 4 IMM 639 LD R4 ADR DIRHELP1 get DIRVERIFY message instead 00003122 640 HELPLOOP LABEL 03122 E50080DD 4 641 ST R4 ERRORTEMP 03123 DC1013F9 @ 642 CALL @VPREPOUT 03124 40170400 4 @R 643 PARL @R4 03125 600080DD 0 644 LD R0 ERRORTEMP pick up message address 03126 60440050 1 IMM 645 LD R1 80 and reasonable max string length 03127 DA1C0800 0 1 646 SRCHI R0 R1 000 look for a character of zero 03128 610A1F10 4 0 CBM 647 LD R4 R0/BITS 15:31 03129 19040001 4 IMM 648 ADD R4 1 0312A 5C170800 4 BASE 649 CMZ R4,0 0312B FE0C3122 650 JNE HELPLOOP 0312C FE0E30E5 651 JMP CHECKSTOP 652 * --- 653 0312D 20202054 654 AHM1 TEXTZ " This program rebuilds the available disk table on the" 0313C 20737065 655 TEXTZ " specified volume by following all of the structures on" 0314A 20746865 656 TEXTZ " the disk and then declaring anything else free. The" 03158 206F7074 657 TEXTZ " optional parameter CHECKADT, if given, will cause the ADTs" 03167 20746F20 658 TEXTZ " to be checked for duplicate entries, but not rebuilt." 03175 2043616C 659 AHM2 TEXTZ " Call from OPL is:" 0317A 20202052 660 TEXTZ " REBUILD,DSKscu [,CHECKADT] where s=slot,c=channel, and u=unit" 0318B 00000000 661 VFD 0 662 0318C 20202054 663 DIRHELP1 TEXTZ " This program performs a directory verification on the" 0319B 20737065 664 TEXTZ " specified volume by following the directory structure." 031A9 20446174 665 TEXTZ " Data blocks are not read." 031B0 2043616C 666 DIRHELP2 TEXTZ " Call from OPL is:" 031B5 20202044 667 TEXTZ " DIRVERIFY,DSKscu where s=slot,c=channel,u=unit" 031C2 00000000 668 VFD 0 669 670 * Bad format when running under OPL 000031C3 671 ALONEBADF LABEL 031C3 DC1013F9 @ 672 CALL @VPREPOUT 031C4 400031CA 673 PARL BADFORM 031C5 61043175 4 IMM 674 LD R4 ADR AHM2 031C6 5C003016 675 CMZ DIRVERIFY but, is this really directory verify ?? 031C7 FE023122 676 JEQ HELPLOOP no, it is REBUILD, have correct message 677 * \ / 031C8 610431B0 4 IMM 678 LD R4 ADR DIRHELP2 get DIRVERIFY message instead 031C9 FE0E3122 679 JMP HELPLOOP 680 * --- 681 031CA 20426164 682 BADFORM TEXTZ " Bad parameter format." 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 16 F 0 Free the Volume 685 686 BLOCK 687 ENTRY FREEVOL 688 689 BLOCK 690 ENTRY FREEVOL 691 692 ********************************************************************************** 693 * * 694 * Routine to find all of the used space on a volume and then * 695 * rebuild the ADT and write freeness on top of all of the unused * 696 * blocks. * 697 * Call: * 698 * CALLNP FREEVOL * 699 * * 700 * Eats R0:R5. * 701 * * 702 ********************************************************************************** 703 704 BEGFRAME 00178801 6 BASE 705 THISLIST BSS 1 number of ADT list being created 706 ENDFRAME 707 031D0 DD5F8002 6 STAK 708 FREEVOL ENTRNP PUSH 031D1 6045E848 1 IMM 709 LD R1 MAXBLK/8 load number of chars in array 031D2 608480F8 2 IMM 710 LD R2 ADR ARRAYW load array address 031D3 FE580000 711 CFILL 000 and clear it out (to unused) 031D4 EC0080AB 712 STZ FREED 031D5 EC0080DB 713 STZ ERRORCNT 031D6 EC0080DA 714 STZ ERRDIRVF signals errors for dirverify 031D7 6044003C 1 IMM 715 LD R1 15*CPW load size of file name block 031D8 608480E9 2 IMM 716 LD R2 ADR ERRORBLOCK its address 031D9 FE580000 717 CFILL 000 and clear it out 718 031DA DC4036C8 719 CALLNP MARKPACKL make the pack label used 031DB DC403700 720 CALLNP MARKBOOT make the boot routine used 031DC DC40370B 721 CALLNP MARKVOLL make the volume label and its tables used 722 * \ / 723 724 ********************************************************************************** 725 * * 726 * Remove bogus substitution list entries. If we are doing * 727 * only a directory verify then we cannot check for bogus list * 728 * entries because we did not account for all possible blocks. * 729 * * 730 ********************************************************************************** 731 031DD 5C003016 732 CMZ DIRVERIFY if we are doing a directory verify 031DE FE0C3235 733 JNE DIRVERDONE then take directory verify exit 734 * \ / 735 736 ********************************************************************************** 737 * * 738 * Here we check for serious errors encountered during the * 739 * rebuild. If we got an error on any non-leaf block, we will have * 740 * failed to mark the subsidiary blocks. Therefore, writing new * 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 17 F 0 Free the Volume 741 * ADTs will destroy all of the potentially recoverable subsidiary * 742 * data. We don't even bother to ask the operator, this is too * 743 * serious to fool with. Note that any bogus entries in the subs * 744 * list are removed and the entries in the bad tracks are marked * 745 * so as not to enter in the computation of available free blocks. * 746 * Note also that the bad track blocks are marked after the call * 747 * to remove the bogus subs entries is made. * 748 * * 749 ********************************************************************************** 750 751 * \ / 031DF 600080DB 0 752 LD R0 ERRORCNT pick up total error count 031E0 64050000 0 IMM 753 CPR R0 010000 check fatal field for marks 031E1 FE063257 754 JGE ERRORDONE and crap out if any 031E2 DC403759 755 CALLNP UNSUB clean the substitution list 031E3 DC40378D 756 CALLNP MARKBTRX mark any remaining unmarked bad blocks 757 * \ / 758 759 * Inform the user of the space recovered 031E4 DC1013F9 @ 760 CALL @VPREPOUT tell number of blocks previously available 031E5 410080E9 761 PAR READVOL 031E6 410080AC 762 PAR ONCEFREE 031E7 40003293 763 PARL LINE1 031E8 600080AD 0 764 LD R0 VOLSIZE get volume size 031E9 900080AB 0 765 SUBM R0 FREED calculate number now free 031EA DC1013F9 @ 766 CALL @VPREPOUT tell actual amount recovered 031EB 410080AB 767 PAR FREED number now free 031EC 410080AD 768 PAR VOLSIZE total number of blocks on volume 031ED 400032A0 769 PARL LINE2 the message 031EE 5C003014 770 CMZ REBUILDFLAG should we rebuild the ADTs? 031EF FE023260 771 JEQ NOREBUILD 772 * \ / 773 774 ********************************************************************************** 775 * * 776 * Write the new ADT to the volume. * 777 * * 778 ********************************************************************************** 779 780 * \ / 031F0 600080AD 0 781 LD R0 VOLSIZE begin at the end of the volume 031F1 E40080B1 0 782 ST R0 LASTFREE 031F2 14040008 0 IMM 783 DIV R0 SECADTNUM 031F3 18040008 0 IMM 784 ADD R0 SECADTNUM calculate the size of each ADT list 031F4 E40080AE 0 785 ST R0 ADTLSIZE 786 * \ / 787 788 ********************************************************************************** 789 * * 790 * If there were fatal errors, we don't get here. If there * 791 * were non-fatal errors, we ask the user if we may rebuild * 792 * the ADT. Non-fatal errors are disk and structure errors * 793 * that occur in user files. If the system structures are * 794 * bad, the ADT is automaticly not rebuilt. * 795 * * 796 ********************************************************************************** 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 18 F 0 Free the Volume 797 798 * \ / 031F5 5C0080DB 799 CMZ ERRORCNT any non-fatal? 031F6 FE02320F 800 JEQ NOERRORS jump if none 000031F7 801 ASKPERM LABEL 031F7 DC1013F9 @ 802 CALL @VPREPOUT ask for permission to rebuild ADTs 031F8 400032B7 803 PARL ASKERRORS 031F9 DC403C97 804 CALLNP PREPIN get the response 031FA 610480BC 4 IMM 805 LD R4 ADR OUTBUF R4 -> buffer 031FB DC5013F5 @ 806 CALLNP @VFETCHITEM get the response packed 031FC F27C3205 1 807 JBF R1/TALPH BADRESP if not alpha then wrong 031FD 64803007 2 808 CPR R2 PAKYES is the response yes? 031FE FE02320F 809 JEQ YESIT if so then do it 031FF 64803008 2 810 CPR R2 PAKY we will allow a y 03200 FE02320F 811 JEQ YESIT 03201 64803009 2 812 CPR R2 PAKNO is the respnse no? 03202 FE023258 813 JEQ ERRORDONEA if so then done 03203 6480300A 2 814 CPR R2 PAKN N is same as no 03204 FE023258 815 JEQ ERRORDONEA 816 * \ / 00003205 817 BADRESP LABEL 03205 DC1013F9 @ 818 CALL @VPREPOUT tell user he screwed up 03206 40003208 819 PARL BADRESPM " Bad response, try again." 03207 FE0E31F7 820 JMP ASKPERM go try again 821 * --- 822 03208 20074261 823 BADRESPM TEXTZ " Bad response, try again." 824 0000320F 825 YESIT LABEL 0000320F 826 NOERRORS LABEL 0320F DC1013F9 @ 827 CALL @VPREPOUT tell user what we are up to 03210 400032AD 828 PARL LINE3 "Beginning to rewrite the ADT tables..." 829 * \ / 830 831 ********************************************************************************** 832 * * 833 * Destroy the old ADT pointers. We also destroy the last * 834 * mounted time stamp so that some system will not attempt to * 835 * remount this volume! Note that this does not actually take * 836 * effect until the ADTs are completely re-written and we * 837 * write out the security blocks. We will gamble that the * 838 * user does not abort the ADT write in the middle. * 839 * * 840 ********************************************************************************** 841 842 * \ / 03211 60440060 1 IMM 843 LD R1 SECADTNUM*CPW*3 how many to destroy 03212 60840008 2 IMM 844 LD R2 SECADTTOP indicate where they are 03213 FE580000 845 CFILL 00 zap them mothers 03214 620080A8 01 846 LD2 R0 WIDETIME get two word time 03215 E6005229 01 847 ST2 R0 SECPLACE(SECLASTDT) and put in last known date field 03216 E6005002 01 848 ST2 R0 SECPLACE(SECMNTDAT) fix last mounted time 849 * \ / 850 851 ********************************************************************************** 852 * * 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 19 F 0 Free the Volume 853 * Make the new ADT lists. * 854 * * 855 ********************************************************************************** 856 857 * \ / 03217 EC178801 6 BASE 858 STZ SP,THISLIST begin with list zero 00003218 859 NEXTADTL LABEL 03218 61538000 5 6 REG 860 LD R5 SP save SP 03219 DC0032C4 861 CALL BUILDADTL build one list 0321A 40174801 5 BASE 862 PARL R5,THISLIST index of list to be created 0321B FE0E3284 863 JMP VOLNOWBAD go here if problems 0321C BC178801 0 6 BASE 864 INCL R0 SP,THISLIST count the created list 0321D 64040008 0 IMM 865 CPR R0 SECADTNUM all created? 0321E FE083218 866 JLT NEXTADTL jump if more to do 867 * \ / 868 869 ********************************************************************************** 870 * * 871 * Write out the updated security block. * 872 * * 873 ********************************************************************************** 874 875 * \ / 0321F DC00349B 876 CALL PAGEOUT write to the first security block 03220 410080AF 877 PAR SECDA its disk address 03221 41005000 878 PAR SECPLACE where we have been keeping it 03222 4000802D 879 PARL SECFBI and its FBI 03223 FE0E3274 880 JMP SECBAD go to if problems 03224 DC00349B 881 CALL PAGEOUT now write to the other security block 03225 410080B0 882 PAR SEC2DA its disk address 03226 41005000 883 PAR SECPLACE where we have been keeping it 03227 4000802D 884 PARL SECFBI and its FBI 03228 FE0E3274 885 JMP SECBAD where to go on error 886 * \ / 887 03229 DC1013F9 @ 888 CALL @VPREPOUT tell 'em we are done 0322A 410080E9 889 PAR READVOL so they remember what volume was rebuilt 0322B 4000322D 890 PARL DONELINE 0000322C 891 VOLEXIT LABEL 0322C 5D1F8002 6 STAK 892 LEAVE POP get out of here 893 * --- 894 0322D 20414454 895 DONELINE TEXTZ " ADTs rebuilt on volume \S1\." 896 897 ********************************************************************************** 898 * * 899 * Directory verify is finished. * 900 * * 901 ********************************************************************************** 902 00003235 903 DIRVERDONE LABEL 03235 5C0080DA 904 CMZ ERRDIRVF duplicate block or illegal block ?? 03236 FE0C3247 905 JNE DIRVERERRS yes, go report it 906 * \ / 03237 5C0080DB 907 CMZ ERRORCNT ANY other error encountered ?? 03238 FE0C3247 908 JNE DIRVERERRS yes, go report it 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 20 F 0 Free the Volume 909 * \ / 03239 DC1013F9 @ 910 CALL @VPREPOUT no error, finish gracefully 0323A 410080E9 911 PAR READVOL volume that was scanned 0323B 4000323D 912 PARL VERDONEMES completion message 0323C FE0E322C 913 JMP VOLEXIT print it and leave 914 * --- 915 0323D 204E6F20 916 VERDONEMES TEXTZ " No directory errors on volume \S1\." 917 918 ********************************************************************************** 919 * * 920 * Directory errors were encountered. * 921 * * 922 ********************************************************************************** 923 00003247 924 DIRVERERRS LABEL 03247 DC1013F9 @ 925 CALL @VPREPOUT go report that errors occurred 03248 410080E9 926 PAR READVOL volume that was scanned 03249 4000324B 927 PARL VERERRMES error completion message 0324A FE0E322C 928 JMP VOLEXIT print it and leave 929 * --- 930 0324B 20446972 931 VERERRMES TEXTZ " Directory errors encountered on volume \S1\." 932 933 ********************************************************************************** 934 * * 935 * Output routines for error conditions. * 936 * * 937 ********************************************************************************** 938 00003257 939 ERRORDONE LABEL fatal errors, not rebuilding 03257 DC40378D 940 CALLNP MARKBTRX mark any remaining unmarked bad blocks 00003258 941 ERRORDONEA LABEL minor errors, operator reject 03258 DC1013F9 @ 942 CALL @VPREPOUT inform the world 03259 4000325B 943 PARL ERRORLINE 0325A FE0E322C 944 JMP VOLEXIT then leave 945 * --- 946 0325B 20414454 947 ERRORLINE TEXTZ " ADTs not rebuilt." 948 949 ********************************************************************************** 950 * * 951 * Don't want the ADTs rebuilt. * 952 * * 953 ********************************************************************************** 954 00003260 955 NOREBUILD LABEL REBUILDFLAG says don't 03260 DC1013F9 @ 956 CALL @VPREPOUT tell the user what is happening 03261 40003269 957 PARL NOBUILDLINE " Scanning the ADTs." 03262 DC403357 958 CALLNP ADTCHECK let's check these out 03263 5C003018 959 CMZ STRAYFLAG want to see unmarked blocks? 03264 FE02322C 960 JEQ VOLEXIT jump if not 03265 DC1013F9 @ 961 CALL @VPREPOUT tell the user what is happening 03266 4000326E 962 PARL STRAYLINE " Checking stray blocks." 03267 DC403C61 963 CALLNP CHECKSTRAYS report un-attached blocks 03268 FE0E322C 964 JMP VOLEXIT then go home 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 21 F 0 Free the Volume 965 * --- 966 03269 20536361 967 NOBUILDLINE TEXTZ " Scanning the ADTs." 0326E 20436865 968 STRAYLINE TEXTZ " Checking stray blocks." 969 970 ********************************************************************************** 971 * * 972 * The security blocks wouldn't write. * 973 * * 974 ********************************************************************************** 975 00003274 976 SECBAD LABEL 03274 DC1013F9 @ 977 CALL @VPREPOUT 03275 410080AF 978 PAR SECDA 03276 40003278 979 PARL SECBADM 03277 FE0E3284 980 JMP VOLNOWBAD the volume is now no good 981 * --- 982 03278 20536563 983 SECBADM TEXTZ " Security block wouldn't write. Block = \H1\." 984 985 ********************************************************************************** 986 * * 987 * Volume is now fouled up. It can be rebuilt but otherwise... * 988 * * 989 ********************************************************************************** 990 00003284 991 VOLNOWBAD LABEL 03284 DC1013F9 @ 992 CALL @VPREPOUT give the bad news 03285 40003287 993 PARL VOLNOWBADM 03286 FE0E322C 994 JMP VOLEXIT then hang your head and leave 995 * --- 996 03287 202A2A2A 997 VOLNOWBADM TEXTZ " ***Volume now unusable but rebuildable!!***" 998 03293 20546865 999 LINE1 TEXTZ " There were \D2\ known free blocks on volume \S1\." 032A0 20546865 1000 LINE2 TEXTZ " There are \D1\ unused blocks out of \D2\ possible." 032AD 20426567 1001 LINE3 TEXTZ " Beginning to rewrite the ADT tables..." 032B7 2A4E6F6E 1002 ASKERRORS TEXTZ "*Non-fatal errors. Should ADTs be rebuilt (Y/N)? " 1004 1005 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 22 F 0 Rebuild ADT Lists 1007 1008 BLOCK 1009 ENTRY BUILDADTL 1010 1011 ********************************************************************************** 1012 * * 1013 * Routine to build one ADT list. It begins where the last * 1014 * left off and builds the list until there are no more free * 1015 * blocks or until the list has its maximum blocks in it. * 1016 * Call: * 1017 * * 1018 * call buildadtl * 1019 * parvl index of list being created * 1020 * jmp didn't work * 1021 * * 1022 * Routine destroys R0 thru R5. * 1023 * * 1024 ********************************************************************************** 1025 1026 BEGFRAME 00178801 6 BASE 1027 THISBLK BSS 1 address of this ADT block 00178802 6 BASE 1028 PREVADTB BSS 1 address of previous ADT block 00178803 6 BASE 1029 LISTSIZ BSS 1 number of blocks in list 00178804 6 BASE 1030 FIRSTADTB BSS 1 first block in ADT list 00178805 6 BASE 1031 ADTCNUM BSS 1 index of this list 1032 ENDFRAME 1033 032C4 DD1F8006 6 STAK 1034 BUILDADTL ENTR PUSH 032C5 C0578805 6 BASE 1035 STPVL SP,ADTCNUM 032C6 5C0080B1 1036 CMZ LASTFREE are there any to free? 032C7 FE0A32F3 1037 JLE EXIT jump if nothing to do 1038 * \ / 1039 1040 ********************************************************************************** 1041 * * 1042 * Initialize the page that will be written over the free * 1043 * blocks -- ones for data and "free" for the FBI. * 1044 * * 1045 ********************************************************************************** 1046 1047 * \ / 032C8 60441000 1 IMM 1048 LD R1 CPP how many chars to fill 032C9 60847000 2 IMM 1049 LD R2 ADR FREEPLACE where to put them 032CA FE5800FF 1050 CFILL 0FF what to put in them 032CB 60048085 0 IMM 1051 LD R0 ADR FREEPFBI now do the FBI 032CC DC40334D 1052 CALLNP ZAPFBI 032CD 6044007F 1 IMM 1053 LD R1 FBITFREE the FBI type for a free block 032CE E4480080 1 0 ZBM 1054 ST R1 R0,FBITYPE put it in the FBI 1055 * \ / 1056 032CF EC178803 6 BASE 1057 STZ SP,LISTSIZ initialize various things 032D0 EC178802 6 BASE 1058 STZ SP,PREVADTB 032D1 EC178804 6 BASE 1059 STZ SP,FIRSTADTB 032D2 60048090 0 IMM 1060 LD R0 ADR ADTFBI now we want to clean up the ADT's FBI 032D3 DC40334D 1061 CALLNP ZAPFBI zap it 032D4 60440007 1 IMM 1062 LD R1 FBITADT get the ADT FBI type code 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 23 F 0 Rebuild ADT Lists 032D5 E4480080 1 0 ZBM 1063 ST R1 R0,FBITYPE and put it in the FBI 1064 * \ / 1065 1066 ********************************************************************************** 1067 * * 1068 * Create one ADT block. * 1069 * * 1070 ********************************************************************************** 1071 1072 * \ / 000032D6 1073 NEXTADTB LABEL 032D6 60047400 0 IMM 1074 LD R0 ADR ADTPLACE where we will build the ADT 032D7 DC403352 1075 CALLNP ZAPADTBLK clean it up first 032D8 EC0BC010 7 CBM 1076 STZ R7/BIT 0 bit off sez first time through 032D9 600080B1 0 1077 LD R0 LASTFREE R0 = last block freed 032DA 60578803 1 6 BASE 1078 LD R1 SP,LISTSIZ 032DB 6107FF36 4 IMM 1079 LD R4 -ADTECNT-2 number of blocks per ADT block 032DC FE0E32E7 1080 JMP CHECKFULL see if ADT list is full first 1081 * --- 1082 000032DD 1083 NOTFREE LABEL loop for each block 032DD 10040001 0 IMM 1084 SUB R0 1 032DE FA0A32EA 0 1085 JLEZ R0 BLOCKDN jump if all addresses tested 032DF 5C303004 0 @ 1086 CMZ @BITP(R0) is this block free? 032E0 FE0C32DD 1087 JNE NOTFREE jump if not 032E1 F7C032E5 7 1088 JBT R7/BIT 0 INTOBLOCK jump if not first time 032E2 E4178801 0 6 BASE 1089 ST R0 SP,THISBLK save as the address of the ADT block 032E3 EDCBC010 7 CBM 1090 STW R7/BIT 0 say after the first time 032E4 FE0E32E6 1091 JMP NOT2BLOCK 1092 * --- 1093 000032E5 1094 INTOBLOCK LABEL 032E5 E42874C8 0 4 1095 ST R0 ADTPLACE(ADTECNT+R4) store block addr in ADT 000032E6 1096 NOT2BLOCK LABEL 032E6 BC578803 1 6 BASE 1097 INCL R1 SP,LISTSIZ count a freed block 000032E7 1098 CHECKFULL LABEL 032E7 644080AE 1 1099 CPR R1 ADTLSIZE is the list full? 032E8 FE0632EA 1100 JGE BLOCKDN jump if so 032E9 FB2032DD 4 1101 IRJ R4 NOTFREE jump if ADT block not full 1102 * \ / 1103 1104 ********************************************************************************** 1105 * * 1106 * The ADT block is full -- see whether to link the new * 1107 * block into the list being built or whether to just put * 1108 * the list into the security block and return. The above * 1109 * creation loop will just fall through if either all of the * 1110 * disk blocks are in the ADT or if this ADT list is full. * 1111 * * 1112 ********************************************************************************** 1113 1114 * \ / 000032EA 1115 BLOCKDN LABEL 032EA E40080B1 0 1116 ST R0 LASTFREE save last freed block 032EB F7C032F5 7 1117 JBT R7/BIT 0 LINKIN jump if something created 1118 * \ / 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 24 F 0 Rebuild ADT Lists 1119 1120 ********************************************************************************** 1121 * * 1122 * Place this created list into the security block. * 1123 * * 1124 ********************************************************************************** 1125 1126 * \ / 032EC 60578805 1 6 BASE 1127 LD R1 SP,ADTCNUM pick up index to which list 032ED 60978804 2 6 BASE 1128 LD R2 SP,FIRSTADTB pointer to beginning of ADT chains 032EE E4A25008 2 1 1129 ST R2 SECPLACE/SECADTTOP(R1) put it in the security block 032EF 60978802 2 6 BASE 1130 LD R2 SP,PREVADTB pointer to end of ADT chains 032F0 E4A25010 2 1 1131 ST R2 SECPLACE/SECADTBTM(R1) put in the security block 032F1 60978803 2 6 BASE 1132 LD R2 SP,LISTSIZ number of free blocks in the chain 032F2 E4A25018 2 1 1133 ST R2 SECPLACE/SECADTCNT(R1) into the security block 000032F3 1134 EXIT LABEL 032F3 19C40001 7 IMM 1135 ADD R7 1 success return 000032F4 1136 BLDADTERR LABEL 032F4 5D1F8006 6 STAK 1137 LEAVE POP bye bye 1138 * --- 1139 1140 ********************************************************************************** 1141 * * 1142 * We are linking the ADT block into the list. First * 1143 * we write "free" information onto the unused blocks that are * 1144 * pointed to by the ADT block. * 1145 * * 1146 ********************************************************************************** 1147 000032F5 1148 LINKIN LABEL 032F5 6107FC00 4 IMM 1149 LD R4 -WPP 000032F6 1150 FREEOUT LABEL 032F6 5C287800 4 1151 CMZ ADTPLACE(R4+WPP) is this the last entry? 032F7 FE0232FE 1152 JEQ FREEOUTD jump if so 032F8 DC00349B 1153 CALL PAGEOUT write out the free info 032F9 41287800 4 1154 PAR ADTPLACE(R4+WPP) disk address to write to 032FA 41007000 1155 PAR FREEPLACE where it is now 032FB 40008085 1156 PARL FREEPFBI and its FBI 032FC FE0E3325 1157 JMP NOFREEW error if it didn't write 032FD FB2032F6 4 1158 IRJ R4 FREEOUT go do it again 000032FE 1159 FREEOUTD LABEL 1160 * \ / 1161 1162 ********************************************************************************** 1163 * * 1164 * Link the ADT block into the chain. * 1165 * * 1166 ********************************************************************************** 1167 1168 * \ / 032FE 60048090 0 IMM 1169 LD R0 ADR ADTFBI 032FF 604080A7 1 1170 LD R1 CURDATE get current date 03300 E4560803 1 0 BASE 1171 ST R1 R0,FBILCD and put in FBI 03301 60D78802 3 6 BASE 1172 LD R3 SP,PREVADTB 03302 E4C81182 3 0 ZBM 1173 ST R3 R0,FBIBLINK point this to the last 03303 FAF23306 3 1174 JNZA R3 NOTFIRST is this the first in the chain? 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 25 F 0 Rebuild ADT Lists 03304 60578801 1 6 BASE 1175 LD R1 SP,THISBLK if it is remember the address 03305 E4578804 1 6 BASE 1176 ST R1 SP,FIRSTADTB 00003306 1177 NOTFIRST LABEL 03306 EC081180 0 ZBM 1178 STZ R0,FBIFLINK no forward link 03307 61538000 5 6 REG 1179 LD R5 SP 03308 DC00349B 1180 CALL PAGEOUT write it out 03309 41174801 5 BASE 1181 PAR R5,THISBLK disk address 0330A 41007400 1182 PAR ADTPLACE present location 0330B 40008090 1183 PARL ADTFBI its FBI 0330C FE0E3332 1184 JMP NOADTW jump if it wouldn't write 0330D 5C178802 6 BASE 1185 CMZ SP,PREVADTB was there a previous block? 0330E FE023320 1186 JEQ NOPREVB jump if not 0330F 61538000 5 6 REG 1187 LD R5 SP 03310 EC0080AA 1188 STZ RELBLOCK to check when read in 03311 DC003376 1189 CALL PAGEIN read in the previous block 03312 41440007 IMM 1190 PARV FBITADT FBI type expected 03313 41174802 5 BASE 1191 PAR R5,PREVADTB disk address 03314 41007400 1192 PAR ADTPLACE where to put the block 03315 40008090 1193 PARL ADTFBI where to put its FBI 03316 FE0E333F 1194 JMP NOADTR go here if problems 03317 60048090 0 IMM 1195 LD R0 ADR ADTFBI get pointer to ADT's FBI 03318 60578801 1 6 BASE 1196 LD R1 SP,THISBLK block index 03319 E4481180 1 0 ZBM 1197 ST R1 R0,FBIFLINK put forward link on prev block 0331A 61538000 5 6 REG 1198 LD R5 SP 0331B DC00349B 1199 CALL PAGEOUT send it to the disk 0331C 41174802 5 BASE 1200 PAR R5,PREVADTB disk address 0331D 41007400 1201 PAR ADTPLACE where the block is now 0331E 40008090 1202 PARL ADTFBI where it FBI is 0331F FE0E3332 1203 JMP NOADTW go here on write error 00003320 1204 NOPREVB LABEL 03320 60178802 0 6 BASE 1205 LD R0 SP,PREVADTB get previous block number 03321 E40080E3 0 1206 ST R0 PREVBLOCK remember for checking bLink in PAGEIN 03322 60178801 0 6 BASE 1207 LD R0 SP,THISBLK current block number 03323 E4178802 0 6 BASE 1208 ST R0 SP,PREVADTB the current becomes the last 03324 FE0E32D6 1209 JMP NEXTADTB try to create another 1210 * --- 1211 1212 ********************************************************************************** 1213 * * 1214 * The free block wouldn't write. * 1215 * * 1216 ********************************************************************************** 1217 00003325 1218 NOFREEW LABEL 03325 DC1013F9 @ 1219 CALL @VPREPOUT output the message 03326 41287800 4 1220 PAR ADTPLACE(R4+WPP) the block address 03327 40003329 1221 PARL NOFREEWM the message 03328 FE0E32F4 1222 JMP BLDADTERR go to error exit 1223 * --- 1224 03329 20467265 1225 NOFREEWM TEXTZ " Free block \H1\ wouldn't write." 1226 1227 ********************************************************************************** 1228 * * 1229 * The ADT block wouldn't write. * 1230 * * 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 26 F 0 Rebuild ADT Lists 1231 ********************************************************************************** 1232 00003332 1233 NOADTW LABEL 03332 61538000 5 6 REG 1234 LD R5 SP 03333 DC1013F9 @ 1235 CALL @VPREPOUT write the error message 03334 41174801 5 BASE 1236 PAR R5,THISBLK the block number 03335 40003337 1237 PARL NOADTWM 03336 FE0E32F4 1238 JMP BLDADTERR go to error message 1239 * --- 1240 03337 20436F75 1241 NOADTWM TEXTZ " Couldn't write ADT block \H1\." 1242 1243 ********************************************************************************** 1244 * * 1245 * The previous ADT block wouldn't read. * 1246 * * 1247 ********************************************************************************** 1248 0000333F 1249 NOADTR LABEL 0333F 61538000 5 6 REG 1250 LD R5 SP 03340 DC1013F9 @ 1251 CALL @VPREPOUT tell the user about it 03341 41174802 5 BASE 1252 PAR R5,PREVADTB the block number 03342 40003344 1253 PARL NOADTRM 03343 FE0E32F4 1254 JMP BLDADTERR go to the error exit 1255 03344 20436F75 1256 NOADTRM TEXTZ " Couldn't read ADT block \H1,6\." 1257 1258 END of BUILDADTL 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 27 F 0 Zappers 1261 1262 BLOCK 1263 ENTRY ZAPFBI 1264 1265 ********************************************************************************** 1266 * * 1267 * Routine to zero an FBI. * 1268 * Call: * 1269 * ld r0 => FBI * 1270 * CALLNP ZAPFBI * 1271 * * 1272 * Eats R1. * 1273 * * 1274 ********************************************************************************** 1275 1276 BEGFRAME 1277 ENDFRAME 1278 0334D DD5F8001 6 STAK 1279 ZAPFBI ENTRNP PUSH 0334E 6044000A 1 IMM 1280 LD R1 FBILNTH-1 how many to ZAP 0000334F 1281 ZAPLOOP LABEL 0334F EC1C0800 01 BASE 1282 STZ R0,0(R1) zap it 03350 FA66334F 1 1283 JDR R1 ZAPLOOP do it again 03351 5D1F8001 6 STAK 1284 LEAVE POP all done 1285 * --- 1286 1287 END of ZAPFBI 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 28 F 0 Zappers 1289 1290 BLOCK 1291 ENTRY ZAPADTBLK 1292 1293 ********************************************************************************** 1294 * * 1295 * Routine to make an ADT block empty. * 1296 * Call: * 1297 * ld r0 => ADT block * 1298 * CALLNP ZAPADTBLK * 1299 * * 1300 * Eats R0:R2. * 1301 * * 1302 ********************************************************************************** 1303 1304 BEGFRAME 1305 ENDFRAME 1306 03352 DD5F8001 6 STAK 1307 ZAPADTBLK ENTRNP PUSH 03353 60441000 1 IMM 1308 LD R1 CPP number of characters to zap 03354 60920000 2 0 REG 1309 LD R2 R0 where they are at 03355 FE580000 1310 CFILL 000 what to zap 'em with 03356 5D1F8001 6 STAK 1311 LEAVE POP night now 1312 * --- 1313 1314 END of ZAPADTBLK 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 29 F 0 ADT Checker 1317 1318 ********************************************************************************** 1319 * * 1320 * ADTCHECK * 1321 * * 1322 * This subroutine scans the ADT lists and calls MARKBLK * 1323 * for each block found therein. This will cause an error to * 1324 * be reported if any block that is actually being used in a * 1325 * data structure is also in the ADT... this should be viewed * 1326 * as a serious screw-up and the cause determined. Also, this * 1327 * will detect a block appearing twice in the ADT. * 1328 * Call: * 1329 * CALLNP ADTCHECK * 1330 * * 1331 * Eats R0:R5 * 1332 * * 1333 ********************************************************************************** 1334 1335 ADTCHECK BLOCK 1336 ENTRY ADTCHECK 1337 1338 BEGFRAME 00178801 6 BASE 1339 SECADTINDX BSS 1 where we are in the security block 1340 ENDFRAME 1341 03357 DD5F8002 6 STAK 1342 ADTCHECK ENTRNP PUSH 03358 D1578801 6 BASE 1343 STMW SP,SECADTINDX start at the beginning 1344 * \ / 1345 00003359 1346 ADTLOOP LABEL 03359 EC0080E3 1347 STZ PREVBLOCK no previous block number 0335A EC0080AA 1348 STZ RELBLOCK none of this either 0335B BC178801 0 6 BASE 1349 INCL R0 SP,SECADTINDX where are we in the security block? 0335C 60E05008 3 0 1350 LD R3 SECPLACE(SECADTTOP)(R0) pick up the head of the chain 0335D FAC23375 3 1351 JEQZ R3 ADTSDONE jump if we are done 1352 * \ / 1353 0000335E 1354 CHAINLOOP LABEL 0335E 6012C000 0 3 REG 1355 LD R0 R3 copy this for the marking 0335F DC4036AC 1356 CALLNP MARKBLK mark this block as in use 03360 DC003376 1357 CALL PAGEIN read in the ADT block 03361 41440007 IMM 1358 PARV FBITADT expecting an ADT block 03362 4152C000 3 REG 1359 PARV R3 the disk block address 03363 41007400 1360 PAR ADTPLACE where to put the buger 03364 40008090 1361 PARL ADTFBI and the FBI 03365 FE0E3359 1362 JMP ADTLOOP if we can't continue down this chain try 1363 * the next one 03366 E4C080E3 3 1364 ST R3 PREVBLOCK remember this 03367 61440000 5 IMM 1365 LD R5 0 set the index 00003368 1366 MARKLOOP LABEL 03368 602A7400 0 5 1367 LD R0 ADTPLACE(R5) get address of a free block 03369 FA023371 0 1368 JEQZ R0 MARKDONE zero indicates done with this block 0336A E40080D6 0 1369 ST R0 CURBLK put here for MSGCHECK 0336B DC4036AC 1370 CALLNP MARKBLK mark this as in use 0336C DC0036B5 1371 CALL MSGCHECK check for reuse error 0336D 4044007F IMM 1372 PARVL FBITFREE FBI type 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 30 F 0 ADT Checker 0336E 19440001 5 IMM 1373 ADD R5 1 move to the next block 0336F 654400C8 5 IMM 1374 CPR R5 ADTECNT done with this block? 03370 FE083368 1375 JLT MARKLOOP if not then keep going 1376 * \ / 1377 00003371 1378 MARKDONE LABEL 03371 60048090 0 IMM 1379 LD R0 ADR ADTFBI R0 -> FBI 03372 60C81180 3 0 ZBM 1380 LD R3 R0,FBIFLINK pick up pointer to next ADT block 03373 FACC335E 3 1381 JNEZ R3 CHAINLOOP continue down the chain 03374 FE0E3359 1382 JMP ADTLOOP continue through security block's chain 1383 * --- 1384 00003375 1385 ADTSDONE LABEL 03375 5D1F8002 6 STAK 1386 LEAVE POP 1387 * --- 1388 1389 END ADTCHECK 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 31 F 0 Page Input and Output 1392 1393 BLOCK 1394 ENTRY PAGEIN 1395 ENTRY FATALTAB 1396 ENTRY ACCTBIT 1397 ENTRY TYPETAB 1398 1399 ********************************************************************************** 1400 * * 1401 * Routine to read in the specified page. * 1402 * This routine also does all of the checking for FBI field validity. * 1403 * Any errors found in the FBI are corrected. However, CHANGEFLAG is * 1404 * consulted to determine if the corrected block should be written to * 1405 * the disk. * 1406 * Call: * 1407 * call pagein * 1408 * parv fbi type (zero will cause no check) * 1409 * parv disk address * 1410 * par memory address for the block * 1411 * parl memory address for the FBI * 1412 * jmp error * 1413 * * 1414 * Gets R0:R2,R5. * 1415 * * 1416 ********************************************************************************** 1417 1418 BEGFRAME 00178801 6 BASE 1419 FBITYPEX BSS 1 FBI type expected 00178802 6 BASE 1420 PAGEINBL BSS 1 data block memory address 00178803 6 BASE 1421 FBIADR BSS 1 fbi location 00178804 6 BASE 1422 PAGEINR34 BSS 2 save for R3,R4 00178806 6 BASE 1423 PAGEERROR BSS 1 temporary storage 1424 ENDFRAME 1425 03376 DD1F8007 6 STAK 1426 PAGEIN ENTR PUSH 03377 C1578801 6 BASE 1427 STPV SP,FBITYPEX FBI type expected 03378 C14080D6 1428 STPV CURBLK block to get 03379 C1178802 6 BASE 1429 STP SP,PAGEINBL memory address for the block 0337A C0178803 6 BASE 1430 STPL SP,FBIADR and its FBI 0337B E6D78804 346 BASE 1431 ST2 R3 SP,PAGEINR34 save R3,R4 0337C EC0080D7 1432 STZ FBICHANG indicate clean FBI (so far) 0337D 61538000 5 6 REG 1433 LD R5 SP make copy of stack pointer 0337E 60003005 0 1434 LD R0 MSMASK mask for disk addresses 0337F 780080D6 0 1435 AND R0 CURBLK remove extra bits from disk address 03380 E40080D6 0 1436 ST R0 CURBLK remember given addr 03381 640080AD 0 1437 CPR R0 VOLSIZE check for beyond volume end 03382 FE0633F1 1438 JGE PASTVOLEND jump if so 1439 * \ / 1440 03383 60D78802 3 6 BASE 1441 LD R3 SP,PAGEINBL get the block location 03384 5C0080D5 1442 CMZ OFFLINE are we running under OPL or ONPL? 03385 FE023389 1443 JEQ HAVEPAGE if online then don't play with PF 03386 60CADE70 3 3 CBM 1444 LD PFPTR R3/FLDPAGE get the page number from it 03387 18C40080 3 IMM 1445 ADD PFPTR MONPF make it in the monitor 03388 8092C000 3 REG 1446 PFRD R3 get the page file for the page 00003389 1447 HAVEPAGE LABEL 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 32 F 0 Page Input and Output 03389 610480B4 4 IMM 1448 LD R4 ADR RDISKCB get the control block addr 0338A DC1013E0 @ 1449 CALL @VREAD read in the page 0338B 414080D6 1450 PARV CURBLK the block desired 0338C 4152C000 3 REG 1451 PARV R3 where we want it 0338D 41174C03 5 FPVR 1452 PAR @(R5,FBIADR) (we know memory is one-to-one) 0338E 41440000 IMM 1453 PARV 0 just check CS and FBIDA 0338F 400033F2 1454 PARL READERROR go here if problems 1455 * \ / 1456 1457 ********************************************************************************** 1458 * * 1459 * READ thought that it succeeded in reading the block. We * 1460 * verify that the FBIDA is correct before doing anything. If it * 1461 * is okay, we start a long series of checks to verify that the * 1462 * entire FBI is correct. Any errors found are corrected (in * 1463 * memory). They will be reported and/or the block will be * 1464 * written back with the corrections depending on the state of * 1465 * CHANGEFLAG. * 1466 * In the following code: * 1467 * R2 => FBI * 1468 * R3 = FBI type expected * 1469 * * 1470 ********************************************************************************** 1471 1472 * \ / 03390 60978803 2 6 BASE 1473 LD R2 SP,FBIADR load FBI ptr for the following tests 03391 60D78801 3 6 BASE 1474 LD R3 SP,FBITYPEX get the FBI type expected 03392 FAC23396 3 1475 JEQZ R3 ANYTYPE don't check the FBI type if zero 03393 64C88080 3 2 ZBM 1476 CPR R3 R2,FBITYPE verify it's the right kind of block 03394 60040008 0 IMM 1477 LD R0 ECFBITYPE error code 03395 FE0C33F2 1478 JNE READERROR jump if wrong type of block 1479 * \ / 1480 00003396 1481 ANYTYPE LABEL 03396 64C40009 3 IMM 1482 CPR R3 FBITUDIR1 see if we have read in a UDIR1 03397 FE0C339A 1483 JNE NOTUDIR1 if not then continue on 03398 62005C20 01 1484 LD2 R0 DIR1PLACE/UDSERNO get the account serial number 03399 E60080DF 01 1485 ST2 R0 READASN save it for other checks 1486 * \ / 1487 1488 ********************************************************************************** 1489 * * 1490 * Now all the FBI fields are checked for validity. * 1491 * * 1492 ********************************************************************************** 1493 0000339A 1494 NOTUDIR1 LABEL 0339A 6036341F 0 3 @ 1495 LD R0 @TYPETAB(R3) get word indicating what to check for 0339B F63233A1 0 1496 JBT R0/FLINKBIT CHEKFLAG if set then don't check now 0339C DC003477 1497 CALL FBIFLDCHEK check for a zero field 0339D 4144000E IMM 1498 PARV ECFBIFLNK error code 0339E 41440000 IMM 1499 PARV EMPTY check for nothing 0339F 40089180 2 ZBM 1500 PARL R2,FBIFLINK what to check 033A0 6036341F 0 3 @ 1501 LD R0 @TYPETAB(R3) get word indicating what to check for 1502 * \ / 000033A1 1503 CHEKFLAG LABEL 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 33 F 0 Page Input and Output 033A1 DC003477 1504 CALL FBIFLDCHEK check flag field value 033A2 4144000F IMM 1505 PARV ECFBIFLAG error code 033A3 41763423 3 @ 1506 PARV @FBIFLAGPTR(R3) value depends on the FBI type 033A4 40088221 2 ZBM 1507 PARL R2,FBIDEFFLAGS what to check 1508 * \ / 033A5 5C088611 2 ZBM 1509 CMZ R2,FBIMEMERR parity error flag on? 033A6 FE0233AD 1510 JEQ DOCDCHEK 033A7 DC00366F 1511 CALL RPTERROR tell world about error 033A8 41440007 IMM 1512 PARV ECMPE indicate parity error when written 033A9 414080D6 1513 PARV CURBLK the block number 033AA 40488080 2 ZBM 1514 PARVL R2,FBITYPE and the FBI type expected (and found) 033AB 60978803 2 6 BASE 1515 LD R2 SP,FBIADR get FBI back 033AC 60D78801 3 6 BASE 1516 LD R3 SP,FBITYPEX get FBI type back 1517 * \ / 1518 000033AD 1519 DOCDCHEK LABEL 033AD DC40345F 1520 CALLNP CDCHEK go check the last change date 1521 * \ / 1522 033AE 6036341F 0 3 @ 1523 LD R0 @TYPETAB(R3) get word indicating what to check for 033AF F63433B5 0 1524 JBT R0/BLINKBIT BLINKIN what to do about backward link 033B0 DC003477 1525 CALL FBIFLDCHEK check for no backward link 033B1 41440011 IMM 1526 PARV ECFBIBLNE error code 033B2 41440000 IMM 1527 PARV EMPTY should be nothing there 033B3 40089182 2 ZBM 1528 PARL R2,FBIBLINK check back link 033B4 FE0E33B9 1529 JMP CHEKRELBLK continue on 1530 * --- 1531 000033B5 1532 BLINKIN LABEL 033B5 DC003477 1533 CALL FBIFLDCHEK check for backward link 033B6 4144000B IMM 1534 PARV ECFBIBLNK error code 033B7 414080E3 1535 PARV PREVBLOCK should match previous block # 033B8 40089182 2 ZBM 1536 PARL R2,FBIBLINK check back link 1537 * \ / 1538 000033B9 1539 CHEKRELBLK LABEL 033B9 DC40343B 1540 CALLNP RELBLKCHEK check the relative block number 1541 * \ / 1542 033BA 6036341F 0 3 @ 1543 LD R0 @TYPETAB(R3) get word indicating what to check for 033BB F63A33C1 0 1544 JBT R0/ACCTBIT ACCTIN what to do about the account name 033BC DC003489 1545 CALL FBI2FLDCHEK check for no account name 033BD 41440015 IMM 1546 PARV ECFBINBAN error code 033BE 43440000 IMM 1547 PARV2 EMPTY nothing there 033BF 40168805 2 BASE 1548 PARL R2,FBIACCT what to check 033C0 FE0E33C5 1549 JMP CHEKPROJ continue on 1550 * --- 1551 000033C1 1552 ACCTIN LABEL 033C1 DC003489 1553 CALL FBI2FLDCHEK check for account name 033C2 41440009 IMM 1554 PARV ECFBIACCT error code 033C3 434080EE 1555 PARV2 READACCT check against this 033C4 40168805 2 BASE 1556 PARL R2,FBIACCT what to check 1557 * \ / 1558 000033C5 1559 CHEKPROJ LABEL 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 34 F 0 Page Input and Output 033C5 6036341F 0 3 @ 1560 LD R0 @TYPETAB(R3) get word indicating what to check for 033C6 F63C33CC 0 1561 JBT R0/PROJBIT PROJIN what to do about the project name 033C7 DC003477 1562 CALL FBIFLDCHEK check for no project 033C8 41440016 IMM 1563 PARV ECFBINBPJ error code 033C9 41440000 IMM 1564 PARV EMPTY should be nothing there 033CA 40168807 2 BASE 1565 PARL R2,FBIPROJ what to check 033CB FE0E33D0 1566 JMP CHEKFSN continue on 1567 * --- 1568 000033CC 1569 PROJIN LABEL 033CC DC003477 1570 CALL FBIFLDCHEK check for project 033CD 41440017 IMM 1571 PARV ECFBIPROJ error code 033CE 414080F0 1572 PARV READPROJ what should be there 033CF 40168807 2 BASE 1573 PARL R2,FBIPROJ what to check 1574 * \ / 1575 000033D0 1576 CHEKFSN LABEL 033D0 6036341F 0 3 @ 1577 LD R0 @TYPETAB(R3) get word indicating what to check for 033D1 F23E33DA 0 1578 JBF R0/FSNBIT NOFSN jump if FSN should be empty 033D2 F23633D5 0 1579 JBF R0/ASNBIT HAVESN jump if don't need to get ASN 033D3 620080DF 01 1580 LD2 R0 READASN 033D4 E60080E1 01 1581 ST2 R0 READSERIAL put account serial # here 1582 * \ / 1583 000033D5 1584 HAVESN LABEL 033D5 DC003489 1585 CALL FBI2FLDCHEK check for no file serial number 033D6 4144000A IMM 1586 PARV ECFBIFSN error code "FSN/ASN wrong" 033D7 434080E1 1587 PARV2 READSERIAL what to check for 033D8 40168808 2 BASE 1588 PARL R2,FBISERNO what to check 033D9 FE0E33DE 1589 JMP FBICKDONE continue on 1590 * --- 1591 000033DA 1592 NOFSN LABEL 033DA DC003489 1593 CALL FBI2FLDCHEK check for file serial number 033DB 41440018 IMM 1594 PARV ECFBINBFS error code 033DC 43440000 IMM 1595 PARV2 EMPTY what to check for 033DD 40168808 2 BASE 1596 PARL R2,FBISERNO what to check 1597 * \ / 1598 000033DE 1599 FBICKDONE LABEL 033DE 5C003011 1600 CMZ CHANGEFLAG are we allowed to change the disk? 033DF FE0233E8 1601 JEQ NOWRITE jump if not 033E0 5C0080D7 1602 CMZ FBICHANG is there any reason to change the disk? 033E1 FE0233E8 1603 JEQ NOWRITE jump if not 033E2 61138000 4 6 REG 1604 LD R4 SP copy the stack pointer 033E3 DC00349B 1605 CALL PAGEOUT call to write the page 033E4 414080D6 1606 PARV CURBLK pass the MS address 033E5 41170C02 4 FPVR 1607 PAR @(R4,PAGEINBL) pass memory address of data block 033E6 40168400 2 @R 1608 PARL @R2 pass FBI address 033E7 FEC00000 1609 NOP 0 for now, ignore write errors 000033E8 1610 NOWRITE LABEL 1611 033E8 5C0080D9 1612 CMZ REUSEMARK is this a block reuse? 033E9 FE0233EE 1613 JEQ READOK jump if not 1614 * \ / 1615 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 35 F 0 Page Input and Output 1616 * This block is being used for two different purposes. However, 1617 * since we got here, the structure that we are processing now 1618 * is most likely the correct one. We will report the fact of 1619 * the reuse and continue. 1620 033EA DC00366F 1621 CALL RPTERROR tell world about error 033EB 4144000D IMM 1622 PARV ECBLKREUS indicate block re-use. 033EC 414080D6 1623 PARV CURBLK the block number 033ED 40574801 5 BASE 1624 PARVL R5,FBITYPEX and the FBI type expected (and found) 1625 * \ / 000033EE 1626 READOK LABEL 033EE 19C40001 7 IMM 1627 ADD R7 1 000033EF 1628 ERROREXIT LABEL 033EF 62D78804 346 BASE 1629 LD2 R3 SP,PAGEINR34 restore R3,R4 033F0 5D1F8007 6 STAK 1630 LEAVE POP 1631 * --- 1632 000033F1 1633 PASTVOLEND LABEL 033F1 6004000C 0 IMM 1634 LD R0 ECDA code for beyond volume end 1635 000033F2 1636 READERROR LABEL R0 has error code 033F2 E4178806 0 6 BASE 1637 ST R0 SP,PAGEERROR 033F3 5C0080D9 1638 CMZ REUSEMARK did a disk reuse also occur? 033F4 FE0233F8 1639 JEQ NOREUSE jump if not 033F5 DC1013F9 @ 1640 CALL @VPREPOUT yes, give the user some additional warning 033F6 40003415 1641 PARL REUSEMES with this message 033F7 EC0080D9 1642 STZ REUSEMARK no need to warn them again 000033F8 1643 NOREUSE LABEL 033F8 DC00366F 1644 CALL RPTERROR tell the world about the error 033F9 41574806 5 BASE 1645 PARV R5,PAGEERROR the error code 033FA 414080D6 1646 PARV CURBLK the block number 033FB 40574801 5 BASE 1647 PARVL R5,FBITYPEX the block type 1648 * \ / 033FC 60178806 0 6 BASE 1649 LD R0 SP,PAGEERROR get the errorcode again 033FD 64040008 0 IMM 1650 CPR R0 ECFBITYPE was it wrong FBI type? 033FE FE0C340A 1651 JNE ERRTIDY if not then just clean up and leave 1652 * \ / 033FF 60978803 2 6 BASE 1653 LD R2 SP,FBIADR get pointer to FBI 03400 60488080 1 2 ZBM 1654 LD R1 R2,FBITYPE and extract the FBI type 03401 6444007F 1 IMM 1655 CPR R1 FBITFREE see if it is a free block 03402 FE02340E 1656 JEQ FREEBLOCK if so then treat special 1657 * \ / 03403 DC00369D 1658 CALL FINDTEXTZ find the type message 03404 41524000 1 REG 1659 PARV R1 FBI type 03405 400035C6 1660 PARL FBITYPETAB what table to look in 03406 60520000 1 0 REG 1661 LD R1 R0 R1 -> message 1662 * \ / 1663 00003407 1664 SENDMESS LABEL 03407 DC1013F9 @ 1665 CALL @VPREPOUT report the wrong type 03408 41164400 1 @R 1666 PAR @R1 pointer to FBI type message 03409 40003410 1667 PARL WRONGMES our message prototype 1668 * \ / 1669 0000340A 1670 ERRTIDY LABEL 1671 * Summarize this happening in the error counter. 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 36 F 0 Page Input and Output 0340A 60178801 0 6 BASE 1672 LD R0 SP,FBITYPEX get FBI type that we expected 0340B 60203424 0 0 1673 LD R0 FATALTAB(R0) get our response 0340C 980080DB 0 1674 ADDM R0 ERRORCNT and add it to previous happenings 1675 * \ / 1676 1677 * We got an error. Return indication to caller. 0340D FE0E33EF 1678 JMP ERROREXIT 1679 * --- 1680 0000340E 1681 FREEBLOCK LABEL 0340E 60443615 1 IMM 1682 LD R1 ADR FREEMESS R1 -> free block message 0340F FE0E3407 1683 JMP SENDMESS now go send it 1684 * --- 1685 03410 2020466F 1686 WRONGMES TEXTZ " Found \C1\ block." 03415 2A426C6F 1687 REUSEMES TEXTZ "*Block reuse. " 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 37 F 0 Page Input and Output 1689 1690 ********************************************************************************** 1691 * * 1692 * The following tables and definitions are used to determine * 1693 * what to check for in each field of the FBI. TYPETABLE is indexed * 1694 * by FBITYPE and has bits set in each word to indicate whether a * 1695 * field should be empty. * 1696 * * 1697 ********************************************************************************** 1698 00003210 BYTE 1699 FLINKBIT EQU BIT 25 forward link 00003410 BYTE 1700 BLINKBIT EQU BIT 26 backward link 00003610 BYTE 1701 ASNBIT EQU BIT 27 account serial number 1702 * EQU BIT 28 (was create date) 00003A10 BYTE 1703 ACCTBIT EQU BIT 29 account name 00003C10 BYTE 1704 PROJBIT EQU BIT 30 project name 00003E10 BYTE 1705 FSNBIT EQU BIT 31 file serial number 1706 00000040 ABS 1707 FLNKB EQU 1*FLINKBIT 00000020 ABS 1708 BLNKB EQU 1*BLINKBIT 00000004 ABS 1709 ACTB EQU 1*ACCTBIT 00000002 ABS 1710 PRJB EQU 1*PROJBIT 00000010 ABS 1711 ASNB EQU 1*ASNBIT 00000001 ABS 1712 FSNB EQU 1*FSNBIT 1713 03418 00000000 1714 TYPETABLE VFDB 8:0 03418 00000000 1715 VFDB 8:0 1 - pack label 03418 00000000 1716 VFDB 8:0 2 - bad trax block 03419 00000000 1717 VFDB 8:0 3 - bootstrap code 03419 00000000 1718 VFDB 8:0 4 - volume label 03419 00000000 1719 VFDB 8:0 5 - substitution list 03419 00000000 1720 VFDB 8:0 6 - security block 0341A 00000060 1721 VFDB 8:FLNKB+BLNKB 7 - ADT block 0341A 00000000 1722 VFDB 8:0 8 - IDX block 0341A 00000017 1723 VFDB 8:ACTB+PRJB+ASNB+FSNB 9 - UDIR primary block 0341A 00000017 1724 VFDB 8:ACTB+PRJB+ASNB+FSNB A - UDIR secondary block 0341B 00000000 1725 VFDB 8:0 B - system use misc 0341B 00000067 1726 VFDB 8:FLNKB+BLNKB+ACTB+PRJB+FSNB C - SAF 0341B 00000007 1727 VFDB 8:ACTB+PRJB+FSNB D - RAF major block 0341B 00000007 1728 VFDB 8:ACTB+PRJB+FSNB E - RAF minor block 0341C 00000007 1729 VFDB 8:ACTB+PRJB+FSNB F - RAF data block 0341C 00000000 1730 VFDB 8:0 10 - AFT 0341C 00000017 1731 VFDB 8:ACTB+PRJB+ASNB+FSNB 11 - account shared list block 0341C 00000007 1732 VFDB 8:ACTB+PRJB+FSNB 12 - file shared list block 0341D 00000007 1733 VFDB 8:ACTB+PRJB+FSNB 13 - code control block 0341D 00000007 1734 VFDB 8:ACTB+PRJB+FSNB 14 - code block 0341D 00000017 1735 VFDB 8:ACTB+PRJB+ASNB+FSNB 15 - authorization list block 0341F 020C3419 1736 TYPETAB PTR TYPETABLE 1737 1738 ********************************************************************************** 1739 * * 1740 * This table contains the FBI flag values depending on * 1741 * the type of block (FBI type) we are checking. * 1742 * The 002 bit indicates that a write check should be * 1743 * done. This is not yet implemented in the system due to * 1744 * the difficulties involved in preventing alterations before * 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 38 F 0 Page Input and Output 1745 * the write check can be done. * 1746 * The 001 bit indicates that substitutions are prohibited. * 1747 * * 1748 ********************************************************************************** 0341F 00000000 1749 FBIFLAGVAL VFDB 3:0 0341F 00000003 1750 VFDB 3:3,3,3,3,3 pack, bad tracks, boot, volume, substitution 0341F 00000003 1751 VFDB 3:3 security block 03420 00000000 1752 VFDB 3:0,0,0,0,0,0,0,0 03421 00000000 1753 VFDB 3:0,0,0,0,0,0,0 and the rest 03423 00C83420 1754 FBIFLAGPTR PTR FBIFLAGVAL 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 39 F 0 Page Input and Output 1756 1757 ********************************************************************************** 1758 * * 1759 * This table is indexed by FBI type and gives the appropriate * 1760 * amount of fear to add into the error counter. The philosophy * 1761 * here, is that anything that causes a part of the structure to * 1762 * be missed is fatal, while errors at the bottom level will have * 1763 * no effect on the rebuilding of the ADT since they are properly * 1764 * marked, even though we couldn't read them. * 1765 * * 1766 ********************************************************************************** 1767 00003424 1768 FATALTAB LABEL 03424 00010001 1769 VFD 00010001 unknown type 03425 00010001 1770 VFD 00010001 pack label 03426 00010001 1771 VFD 00010001 bad tracks list 03427 00000001 1772 VFD 00000001 bootstrap 03428 00010001 1773 VFD 00010001 volume label 03429 00010001 1774 VFD 00010001 substitution list 0342A 00010001 1775 VFD 00010001 security block 0342B 00000001 1776 VFD 00000001 ADT (shouldn't try to read one) 0342C 00010001 1777 VFD 00010001 IDX 0342D 00010001 1778 VFD 00010001 UDIR1 0342E 00010001 1779 VFD 00010001 UDIR2 0342F 00000001 1780 VFD 00000001 swapping (shouldn't try to read one) 03430 00000001 1781 VFD 00000001 SAF 03431 00010001 1782 VFD 00010001 RAF major access block 03432 00010001 1783 VFD 00010001 RAF minor access block 03433 00000001 1784 VFD 00000001 RAF data 03434 00000001 1785 VFD 00000001 AFT 03435 00000001 1786 VFD 00000001 account share list 03436 00000001 1787 VFD 00000001 file share list 03437 00010001 1788 VFD 00010001 CCB 03438 00000001 1789 VFD 00000001 code data 03439 00000001 1790 VFD 00000001 auth list 0343A 00010001 1791 VFD 00010001 extra type 1792 1793 END of PAGEIN 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 40 F 0 Page Input and Output 1795 1796 BLOCK 1797 ENTRY RELBLKCHEK 1798 1799 ********************************************************************************** 1800 * * 1801 * RELBKLCHEK checks the relative block number in FBIs. * 1802 * It checks RAF data blocks and code data blocks by * 1803 * comparing their block numbers against the block number * 1804 * in MINPLACE at the offset of the relative block number in * 1805 * the FBI for the block. * 1806 * Call: * 1807 * R3 = FBI type * 1808 * R2 -> FBI * 1809 * CALLNP RELBLKCHEK * 1810 * * 1811 * Eats R0,R1 * 1812 * * 1813 ********************************************************************************** 1814 1815 BEGFRAME 1816 ENDFRAME 1817 0008ACA4 2 ZBM 1818 FBIMINBITS EQU FBIWORDE/BITS 22:31 minor access relative block number 000898A4 2 ZBM 1819 FBIMAJBITS EQU FBIWORDE/BITS 12:21 major access relative block number 1820 0343B DD5F8001 6 STAK 1821 RELBLKCHEK ENTRNP PUSH 0343C 64C40014 3 IMM 1822 CPR R3 FBITCODED is it a code data block? 0343D FE023445 1823 JEQ RAFCHECK if so, treat it like a RAF data block 0343E 64C4000F 3 IMM 1824 CPR R3 FBITRAFD is it a RAF data block? 0343F FE023445 1825 JEQ RAFCHECK these get checked special 1826 * \ / 1827 03440 DC003477 1828 CALL FBIFLDCHEK go check the relative block number 03441 41440014 IMM 1829 PARV ECFBIRBN error code 03442 414080AA 1830 PARV RELBLOCK what it should be 03443 40089184 2 ZBM 1831 PARL R2,FBIRELBLK relative block field 00003444 1832 RELBLKEND LABEL 03444 5D1F8001 6 STAK 1833 LEAVE POP 1834 * --- 1835 00003445 1836 RAFCHECK LABEL 03445 6008ACA4 0 2 ZBM 1837 LD R0 R2,FBIMINBITS the relative block number 03446 60206800 0 0 1838 LD R0 MINPLACE(R0) get the block number of the associated block 03447 78003005 0 1839 AND R0 MSMASK just want the block number 03448 640080D6 0 1840 CPR R0 CURBLK see if we have the correct block 03449 FE0C344D 1841 JNE BADRELNUM if not then see what to do 0344A 600898A4 0 2 ZBM 1842 LD R0 R2,FBIMAJBITS get the major access part 0344B 640080AA 0 1843 CPR R0 RELBLOCK these should match the minor index number 0344C FE023444 1844 JEQ RELBLKEND if all matches then lets go 1845 * \ / 1846 0000344D 1847 BADRELNUM LABEL 0344D 5C003011 1848 CMZ CHANGEFLAG should we tell about the problem 0344E FE083453 1849 JLT KEEPQUIET -1 sez we don't tell 1850 * \ / 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 41 F 0 Page Input and Output 1851 0344F DC00366F 1852 CALL RPTERROR tell about the bad relative block number 03450 41440014 IMM 1853 PARV ECFBIRBN error code 03451 414080D6 1854 PARV CURBLK block number 03452 4052C000 3 REG 1855 PARVL R3 FBI type 1856 * \ / 1857 00003453 1858 KEEPQUIET LABEL 03453 600403FF 0 IMM 1859 LD R0 WPP-1 index into MINPLACE 00003454 1860 FINDLOOP LABEL 03454 60606800 1 0 1861 LD R1 MINPLACE(R0) get the entry 03455 78403005 1 1862 AND R1 MSMASK clear off extra crud 03456 644080D6 1 1863 CPR R1 CURBLK see if this is the block 03457 FE02345A 1864 JEQ FOUNDIT 03458 FA263454 0 1865 JDR R0 FINDLOOP if not then try the next place 1866 * \ / 1867 * should not ever fall through. What to do here if it does? 03459 FE0E3444 1868 JMP RELBLKEND 1869 * --- 1870 0000345A 1871 FOUNDIT LABEL 0345A E408ACA4 0 2 ZBM 1872 ST R0 R2,FBIMINBITS put in the correct relative block # 0345B 600080AA 0 1873 LD R0 RELBLOCK minor access block number 0345C E40898A4 0 2 ZBM 1874 ST R0 R2,FBIMAJBITS put in the major block place 0345D D00080D7 1875 INC FBICHANG indicate FBI altered 0345E FE0E3444 1876 JMP RELBLKEND 1877 * --- 1878 1879 END of RELBLKCHEK 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 42 F 0 Page Input and Output 1881 1882 BLOCK 1883 ENTRY CDCHEK 1884 1885 ********************************************************************************** 1886 * * 1887 * CDCHEK checks the creation date in the FBI for a valid date. * 1888 * The comparison is between Jan 1, 1980 0:00 and one hour past the * 1889 * last known date as recorded in the Security Block. * 1890 * Call: * 1891 * LD R2 ADR * 1892 * CALLNP CDCHEK * 1893 * * 1894 * Eats R0:R1 * 1895 * * 1896 ********************************************************************************** 1897 1898 BEGFRAME 1899 ENDFRAME 1900 0345F DD5F8001 6 STAK 1901 CDCHEK ENTRNP PUSH 03460 60168803 0 2 BASE 1902 LD R0 R2,FBILCD get the last changed date from FBI 03461 5C120000 0 REG 1903 CMZ R0 has the block been changed? 03462 FE02346A 1904 JEQ CDZERO see if valid to be blank 03463 6400300E 0 1905 CPR R0 OLDDATE is it newer than oldest possible date? 03464 60440012 1 IMM 1906 LD R1 ECFBIODAT error code for date too old 03465 FE08346D 1907 JLT CDERR 03466 640080A7 0 1908 CPR R0 CURDATE is it a date in the future? 03467 60440013 1 IMM 1909 LD R1 ECFBIFDAT error code for future date 03468 FE04346D 1910 JGT CDERR jump if illegal 1911 * \ / 1912 00003469 1913 CDEXIT LABEL 03469 5D1F8001 6 STAK 1914 LEAVE POP 1915 * --- 1916 0000346A 1917 CDZERO LABEL 0346A 64C40004 3 IMM 1918 CPR R3 FBITVL is FBI type volume or less? 0346B FE0A3469 1919 JLE CDEXIT if so then ok so leave 0346C 60440019 1 IMM 1920 LD R1 ECFBIBDAT get the error code 1921 * \ / 1922 0000346D 1923 CDERR LABEL 0346D 5C003011 1924 CMZ CHANGEFLAG should we tattle on this problem 0346E FE083473 1925 JLT DONTTELL -1 sez keep quiet 1926 * \ / 1927 0346F DC00366F 1928 CALL RPTERROR tell about the problem 03470 41524000 1 REG 1929 PARV R1 error code 03471 414080D6 1930 PARV CURBLK pass block DA 03472 4052C000 3 REG 1931 PARVL R3 FBI type 1932 * \ / 1933 00003473 1934 DONTTELL LABEL 03473 600080A7 0 1935 LD R0 CURDATE get the current date 03474 E4168803 0 2 BASE 1936 ST R0 R2,FBILCD put it in as last change date 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 43 F 0 Page Input and Output 03475 D00080D7 1937 INC FBICHANG indicate FBI altered 03476 FE0E3469 1938 JMP CDEXIT 1939 * --- 1940 1941 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 44 F 0 Page Input and Output 1943 1944 BLOCK 1945 ENTRY FBIFLDCHEK 1946 1947 ********************************************************************************** 1948 * * 1949 * FBIFLDCHEK checks to see if the FBI location passed to * 1950 * it contains the specified value. If not, an error message * 1951 * is printed and the problem is fixed. * 1952 * Call: * 1953 * R3 = FBI type * 1954 * R2 => FBI * 1955 * CALL FBIFLDCHEK * 1956 * PARV * 1957 * PARV * 1958 * PARL * 1959 * * 1960 * Eats R0,R1 * 1961 * * 1962 ********************************************************************************** 1963 1964 BEGFRAME 00178801 6 BASE 1965 ERRCODE BSS 1 error to give if bad 00178802 6 BASE 1966 VALUE BSS 1 expected value 00178803 6 BASE 1967 FBILOC BSS 1 pointer to FBI field 1968 ENDFRAME 1969 03477 DD1F8004 6 STAK 1970 FBIFLDCHEK ENTR PUSH 03478 C1578801 6 BASE 1971 STPV SP,ERRCODE save proper error code 03479 C1578802 6 BASE 1972 STPV SP,VALUE save correct value 0347A C0178803 6 BASE 1973 STPL SP,FBILOC pointer to FBI field to check 0347B 60178C03 0 6 FPVR 1974 LD R0 @(SP,FBILOC) get FBI value to compare 0347C 64178802 0 6 BASE 1975 CPR R0 SP,VALUE is it correct? 0347D FE023488 1976 JEQ FLDCHKEND if so then done 1977 * \ / 1978 0347E 5C003011 1979 CMZ CHANGEFLAG should we tattle on the FBI? 0347F FE083485 1980 JLT NOTELL -1 sez keep quiet 1981 * \ / 1982 03480 60178801 0 6 BASE 1983 LD R0 SP,ERRCODE pick up the error code 03481 DC00366F 1984 CALL RPTERROR report the error 03482 41520000 0 REG 1985 PARV R0 pass error code 03483 414080D6 1986 PARV CURBLK block number 03484 4052C000 3 REG 1987 PARVL R3 FBI type 1988 * \ / 1989 00003485 1990 NOTELL LABEL 03485 60178802 0 6 BASE 1991 LD R0 SP,VALUE get the correct value 03486 E4178C03 0 6 FPVR 1992 ST R0 @(SP,FBILOC) and put it where it belongs 03487 D00080D7 1993 INC FBICHANG indicate FBI altered 1994 * \ / 1995 00003488 1996 FLDCHKEND LABEL 03488 5D1F8004 6 STAK 1997 LEAVE POP 1998 * --- 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 45 F 0 Page Input and Output 1999 2000 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 46 F 0 Page Input and Output 2002 2003 BLOCK 2004 ENTRY FBI2FLDCHEK 2005 2006 ********************************************************************************** 2007 * * 2008 * FBI2FLDCHEK checks to see if the (double) FBI location * 2009 * passed to it contains the specified value. If not, an error * 2010 * message is printed and the problem is fixed. * 2011 * Call: * 2012 * R3 = FBI type * 2013 * R2 => FBI * 2014 * CALL FBI2FLDCHEK * 2015 * PARV * 2016 * PARV2 * 2017 * PARL * 2018 * * 2019 * Eats R0,R1 * 2020 * * 2021 ********************************************************************************** 2022 2023 BEGFRAME 00178801 6 BASE 2024 ERRCODE BSS 1 error to give if bad 00178802 6 BASE 2025 VALUE BSS2 1 expected value 00178804 6 BASE 2026 FBILOC BSS 1 pointer to FBI field 2027 ENDFRAME 2028 03489 DD1F8005 6 STAK 2029 FBI2FLDCHEK ENTR PUSH 0348A C1578801 6 BASE 2030 STPV SP,ERRCODE 0348B C3578802 6 BASE 2031 STPV2 SP,VALUE correct value 0348C C0178804 6 BASE 2032 STPL SP,FBILOC address of FBI location to check 0348D 62178C04 016 FPVR 2033 LD2 R0 @(SP,FBILOC) get FBI value to compare 0348E 66178802 016 BASE 2034 CPR2 R0 SP,VALUE is it correct? 0348F FE02349A 2035 JEQ FLD2CHKEND if so then done 2036 * \ / 2037 03490 5C003011 2038 CMZ CHANGEFLAG should we tattle on the FBI? 03491 FE083497 2039 JLT TELLNOT -1 sez keep quiet 2040 * \ / 2041 03492 60178801 0 6 BASE 2042 LD R0 SP,ERRCODE pick up error code from stack 03493 DC00366F 2043 CALL RPTERROR report the error 03494 41520000 0 REG 2044 PARV R0 pass error code 03495 414080D6 2045 PARV CURBLK block number 03496 4052C000 3 REG 2046 PARVL R3 FBI type 2047 * \ / 2048 00003497 2049 TELLNOT LABEL 03497 62178802 016 BASE 2050 LD2 R0 SP,VALUE get the correct value 03498 E6178C04 016 FPVR 2051 ST2 R0 @(SP,FBILOC) and put it where it belongs 03499 D00080D7 2052 INC FBICHANG indicate FBI altered 2053 * \ / 2054 0000349A 2055 FLD2CHKEND LABEL 0349A 5D1F8005 6 STAK 2056 LEAVE POP 2057 * --- 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 47 F 0 Page Input and Output 2058 2059 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 48 F 0 Page Input and Output 2061 2062 BLOCK PAGEOUT 2063 ENTRY PAGEOUT 2064 2065 ********************************************************************************** 2066 * * 2067 * Routine to write out the specified page. It also * 2068 * calculates and places the checksum in the FBI. * 2069 * Call: * 2070 * call pageout * 2071 * parv disk address * 2072 * par page to write block from * 2073 * parl place of the FBI * 2074 * jmp error * 2075 * * 2076 * Gets R0 thru R3. * 2077 * * 2078 ********************************************************************************** 2079 2080 BEGFRAME 00178801 6 BASE 2081 PAGEOUTBL BSS 1 block location 00178802 6 BASE 2082 PAGEOUTFL BSS 1 FBI location 00178803 6 BASE 2083 PAGEOUTDA BSS 1 disk address 00178804 6 BASE 2084 PAGEOUTR4 BSS 1 save for R4 2085 ENDFRAME 2086 0349B DD1F8005 6 STAK 2087 PAGEOUT ENTR PUSH 0349C C1578803 6 BASE 2088 STPV SP,PAGEOUTDA disk address 0349D C1178801 6 BASE 2089 STP SP,PAGEOUTBL present location of block 0349E C0178802 6 BASE 2090 STPL SP,PAGEOUTFL and its FBI 0349F 60578803 1 6 BASE 2091 LD R1 SP,PAGEOUTDA get the disk address 034A0 78403005 1 2092 AND R1 MSMASK make sure it is a valid block number 034A1 60978802 2 6 BASE 2093 LD R2 SP,PAGEOUTFL get the FBI location 034A2 E4489181 1 2 ZBM 2094 ST R1 R2,FBIDA put the disk address into the FBI 034A3 E4578803 1 6 BASE 2095 ST R1 SP,PAGEOUTDA and save the masked DA 2096 * \ / 034A4 60D78801 3 6 BASE 2097 LD R3 SP,PAGEOUTBL get the block location 034A5 5C0080D5 2098 CMZ OFFLINE are we running under OPL or ONPL? 034A6 FE0234AA 2099 JEQ GOTPAGE if online then don't play with PF 034A7 60CADE70 3 3 CBM 2100 LD PFPTR R3/FLDPAGE get the page number from it 034A8 18C40080 3 IMM 2101 ADD PFPTR MONPF make it in the monitor 034A9 8092C000 3 REG 2102 PFRD R3 get the page file for the page 2103 * \ / 000034AA 2104 GOTPAGE LABEL 034AA E5178804 4 6 BASE 2105 ST R4 SP,PAGEOUTR4 save this register 034AB 610480B4 4 IMM 2106 LD R4 ADR RDISKCB R4=>disk control block 034AC 60938000 2 6 REG 2107 LD R2 SP 034AD DC1013E1 @ 2108 CALL @VWRITE write the page 034AE 41568803 2 BASE 2109 PARV R2,PAGEOUTDA where to put it 034AF 4152C000 3 REG 2110 PARV R3 where it is now 034B0 41168C02 2 FPVR 2111 PAR @(R2,PAGEOUTFL) (we know memory is one-to-one) 034B1 400034B5 2112 PARL APOUTDE disk error 034B2 61178804 4 6 BASE 2113 LD R4 SP,PAGEOUTR4 restore this register 034B3 19C40001 7 IMM 2114 ADD R7 1 success return 000034B4 2115 POUTERROR LABEL 034B4 5D1F8005 6 STAK 2116 LEAVE POP 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 49 F 0 Page Input and Output 2117 * --- 2118 2119 * Stand alone disk driver reported an error. Say why. 000034B5 2120 APOUTDE LABEL 034B5 DC00369D 2121 CALL FINDTEXTZ get right error message 034B6 41520000 0 REG 2122 PARV R0 error code 034B7 400034BF 2123 PARL DEMESTAB table to look through 034B8 60520000 1 0 REG 2124 LD R1 R0 R1 -> error message 034B9 60938000 2 6 REG 2125 LD R2 SP 034BA DC1013F9 @ 2126 CALL @VPREPOUT tell user about it 034BB 41168803 2 BASE 2127 PAR R2,PAGEOUTDA disk address 034BC 40164400 1 @R 2128 PARL @R1 error message 2129 * \ / 2130 2131 * The disk gave an error. Return it to the caller. 034BD 61178804 4 6 BASE 2132 LD R4 SP,PAGEOUTR4 restore this register 034BE FE0E34B4 2133 JMP POUTERROR go to error return 2134 * --- 2135 000034BF 2136 DEMESTAB LABEL 034BF 202A2A2A 2137 TEXTZ " *** Error code zero. Block = \H1,6\." 034C9 202A2A2A 2138 TEXTZ " *** Disk data error. Block = \H1,6\." 034D3 202A2A2A 2139 TEXTZ " *** Disk block FBI error. Block = \H1,6\." 034DE 202A2A2A 2140 TEXTZ " *** Disk channel error. Block = \H1,6\." 034E9 202A2A2A 2141 TEXTZ " *** Disk error while seeking. Block = \H1,6\." 034F5 202A2A2A 2142 TEXTZ " *** Disk not ready. Block = \H1,6\." 034FF 202A2A2A 2143 TEXTZ " *** Disk write protected. Block = \H1,6\." 0350A 202A2A2A 2144 TEXTZ " *** Memory parity error on disk write. Block = \H1,6\." 03519 00000000 2145 VFD 0 2146 2147 END of PAGEOUT 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 50 F 0 RPTERROR - Report Input Error 2150 2151 ********************************************************************************** 2152 * * 2153 * RPTERROR will report an I/O error encountered by * 2154 * READINDISK. * 2155 * Call: * 2156 * CALL RPTERROR * 2157 * PARV errorcode - see ERRCODETAB below * 2158 * PARV diskaddr - disk block number * 2159 * PARVL fbitype - type of disk block * 2160 * * 2161 * Eats R0:R1. * 2162 * * 2163 ********************************************************************************** 2164 2165 BLOCK 2166 ENTRY RPTERROR 2167 ENTRY FBITYPETAB 2168 ENTRY FBITYPEMAX 2169 ENTRY FREEMESS 2170 2171 BEGFRAME 00178801 6 BASE 2172 RPTESR4 BSS 1 spot to save a register 00178802 6 BASE 2173 BLOCKNUM BSS 1 disk block number 00178803 6 BASE 2174 FBITYPEX BSS 1 fbi type expected 2175 ENDFRAME 2176 2177 * Following is the list of error message codes: 0000351A 2178 ERRCODETAB BSS2 0 0351A 636F6465 2179 TEXTZ "code 0" 0 - should never happen 0351C 64617461 2180 TEXTZ "data error" 1 - data error (from @READ) 0351F 46424920 2181 TEXTZ "FBI checksum or address" 2 - fbi checksum error 03525 6368616E 2182 TEXTZ "channel error" 3 - channel error (from @READ) 03529 7365656B 2183 TEXTZ "seek error" 4 - seek error (from @READ) 0352C 6469736B 2184 TEXTZ "disk not ready" 5 - not ready 03530 6469736B 2185 TEXTZ "disk write protected" 6 - write protected unit 03536 6D656D6F 2186 TEXTZ "memory parity error on write" 7 - channel found MPE 0353E 46424920 2187 TEXTZ "FBI type wrong" 8 - fbi type field is bad 03542 46424920 2188 TEXTZ "FBI account wrong" 9 - wrong account in fbi 03547 46424920 2189 TEXTZ "FBI FSN/ASN wrong" 10 - wrong fsn 0354C 46424920 2190 TEXTZ "FBI backward link wrong" 11 - wrong bLink (SAF) 03552 426C6F63 2191 TEXTZ "Block beyond volume end" 12 - bogus disk address 03558 426C6F63 2192 TEXTZ "Block reuse" 13 - block used twice 0355B 466F7277 2193 TEXTZ "Forward link non-zero" 14 - fLink not empty 03561 46424920 2194 TEXTZ "FBI WORDB flags incorrect" 15 - FBI flags incorrect 03568 4E6F2D53 2195 TEXTZ "No-Sub flag not set" 16 - Expected a no-Sub block 0356D 4261636B 2196 TEXTZ "Backward link non-zero" 17 - bLink not empty 03573 4368616E 2197 TEXTZ "Change date too old" 18 - before 1980 03578 4368616E 2198 TEXTZ "Change date not reached yet" 19 - in the future 0357F 52656C61 2199 TEXTZ "Relative block number bad" 20 - 03586 46424920 2200 TEXTZ "FBI Account name is non-blank" 21 - garbage in acct name 0358E 46424920 2201 TEXTZ "FBI Project name is non-blank" 22 - garbage in proj name 03596 46424920 2202 TEXTZ "FBI project wrong" 23 - incorrect proj 0359B 46424920 2203 TEXTZ "FBI file serial # is non-zero" 24 035A3 46424920 2204 TEXTZ "FBI change date unset" 25 - blank FBI LCD field 035A9 55444952 2205 TEXTZ "UDIR entries out of order" 26 - non-ascending order 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 51 F 0 RPTERROR - Report Input Error 035B0 426F6775 2206 TEXTZ "Bogus entry in substitution list" 27 - read it 035B9 53414620 2207 TEXTZ "SAF end pointer is incorrect" 28 035C1 5265636F 2208 TEXTZ "Record mismatch" 29 - SAF has a bad record 035C5 00000000 2209 VFD 0 2210 2211 * Following is the list of fbi types: 000035C6 2212 FBITYPETAB BSS2 0 035C6 756E6B6E 2213 TEXTZ "unknown type" 00 - used when unknown 035CA 7061636B 2214 TEXTZ "pack label" 01 - pack label 035CD 62616420 2215 TEXTZ "bad tracks" 02 - bad tracks block 035D0 626F6F74 2216 TEXTZ "bootstrap" 03 - bootstrap block 035D3 766F6C75 2217 TEXTZ "volume label" 04 - volume label 035D7 73756273 2218 TEXTZ "substitution" 05 - substitution block 035DB 73656375 2219 TEXTZ "security" 06 - security block 035DE 41445400 2220 TEXTZ "ADT" 07 - available disk table block 035DF 49445800 2221 TEXTZ "IDX" 08 - IDX block 035E0 55444952 2222 TEXTZ "UDIR1" 09 - primary user directory block 035E2 55444952 2223 TEXTZ "UDIR2" 0A - secondary user directory block 035E4 73776170 2224 TEXTZ "swapping" 0B - miscellaneous system block 035E7 53414620 2225 TEXTZ "SAF data" 0C - SAF data block 035EA 52414620 2226 TEXTZ "RAF major access" 0D - RAF major access block 035EF 52414620 2227 TEXTZ "RAF minor access" 0E - RAF minor access block 035F4 52414620 2228 TEXTZ "RAF data" 0F - RAF data block 035F7 41465400 2229 TEXTZ "AFT" 10 - account finder table 035F8 6163636F 2230 TEXTZ "account share list" 11 - account share list block 035FD 66696C65 2231 TEXTZ "file share list" 12 - file share list block 03601 636F6465 2232 TEXTZ "code control" 13 - code file code control block 03605 636F6465 2233 TEXTZ "code data" 14 - code file data block 03608 61757468 2234 TEXTZ "authorization list" 15 - authorization list block 0360D 61206261 2235 TEXTZ "a bad block" 16 - for blocks from bad list 03610 756E6B6E 2236 TEXTZ "unknown type" 17 & up 03614 00000000 2237 VFD 0 marks table end 2238 03615 41206672 2239 FREEMESS TEXTZ "A free" 2240 2241 * The following table is indexed by the fbi type and gives 2242 * a pointer to the prototype of the appropriate message. 00003617 2243 MESSAGETAB BSS 0 0361A 00000000 2244 VFD 0,0,0,0 00-03 0361E 00000000 2245 VFD 0,0,0,0 04-07 03622 00000000 2246 VFD 0,1,1,0 08-0B 03626 00000002 2247 VFD 3,2,2,2 0C-0F 0362A 00000002 2248 VFD 0,1,2,2 10-13 0362D 00000000 2249 VFD 2,1,0 14-16 00000017 ABS 2250 FBITYPEMAX EQU DISPW MESSAGETAB 2251 2252 * Following are the message prototypes. 0000362E 2253 MESSAGES LABEL 0362E 20074572 2254 TEXTZ " Error: \C1\ on \C3\, block #\H2,6\." 2255 03638 20074572 2256 TEXT " Error: \C1\ on \C3\, block #\H2,6\" 03641 00000041 2257 VFDC ".",cr,lf,"A" 03642 63636F75 2258 TEXTZ "ccount: \S4\.\R5\" 2259 03647 20074572 2260 TEXT " Error: \C1\ on \C3\, block #\H2,6\" 03650 00000046 2261 VFDC ".",cr,lf,"F" 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 52 F 0 RPTERROR - Report Input Error 03651 696C653A 2262 TEXTZ "ile: \S4\.\R5\:\S6\.\R7\" 2263 03658 20074572 2264 TEXT " Error: \C1\ on \C3\, block #\H2,6\" 03661 00000046 2265 VFDC ".",cr,lf,"F" 03662 696C653A 2266 TEXTZ "ile: \S4\.\R5\:\S6\.\R7\. Previous block #\H8,6\." 2267 2268 0366F DD1F8004 6 STAK 2269 RPTERROR ENTR PUSH 03670 C14080DC 2270 STPV ERRORCODE 03671 C1578802 6 BASE 2271 STPV SP,BLOCKNUM 03672 C0578803 6 BASE 2272 STPVL SP,FBITYPEX FBI type code 2273 03673 DC00369D 2274 CALL FINDTEXTZ translate the error code 03674 414080DC 2275 PARV ERRORCODE index into message table 03675 4000351A 2276 PARL ERRCODETAB the message table 03676 E40080DC 0 2277 ST R0 ERRORCODE ERRORCODE -> ascii string 2278 2279 * Check for free block (type 7F) and other illegal types 03677 60178803 0 6 BASE 2280 LD R0 SP,FBITYPEX get type code under investigation 03678 6404007F 0 IMM 2281 CPR R0 FBITFREE check for free block 03679 FE0C367E 2282 JNE NOTFREE jump if not 0367A 60043615 0 IMM 2283 LD R0 ADR FREEMESS get address of appropriate text 0367B E4178803 0 6 BASE 2284 ST R0 SP,FBITYPEX and save pointer 0367C 60040001 0 IMM 2285 LD R0 1 get 'type' of appropriate message 0367D FE0E3683 2286 JMP FERM and go process 2287 * --- 2288 0000367E 2289 NOTFREE LABEL 0367E 50040017 0 IMM 2290 MIN R0 FBITYPEMAX convert all illegal to same 0367F DC00369D 2291 CALL FINDTEXTZ translate the FBI type 03680 41520000 0 REG 2292 PARV R0 pass manipulated FBI type 03681 400035C6 2293 PARL FBITYPETAB search this table 03682 E0178803 0 6 BASE 2294 EXCH R0 SP,FBITYPEX FBITYPEX -> ascii string, R0 = fbi type 2295 00003683 2296 FERM LABEL 03683 DC00369D 2297 CALL FINDTEXTZ get pointer to right error message 03684 41603617 0 2298 PARV MESSAGETAB(R0) index of right message 03685 4000362E 2299 PARL MESSAGES table with the message 03686 60520000 1 0 REG 2300 LD R1 R0 R1 -> message text 2301 03687 E5178801 4 6 BASE 2302 ST R4 SP,RPTESR4 save this register 03688 61138000 4 6 REG 2303 LD R4 SP 03689 DC1013F9 @ 2304 CALL @VPREPOUT print the message 0368A 411080DC @ 2305 PAR @ERRORCODE error code (ascii string) 0368B 41170802 4 BASE 2306 PAR R4,BLOCKNUM disk block number 0368C 41170C03 4 FPVR 2307 PAR @(R4,FBITYPEX) fbi type (ascii string) 0368D 410080EE 2308 PAR READACCT account number 0368E 410080F0 2309 PAR READPROJ division/project 0368F 410080F3 2310 PAR READNAME file name 03690 410080F5 2311 PAR READEXT file extension 03691 410080E3 2312 PAR PREVBLOCK previous block 03692 40164400 1 @R 2313 PARL @R1 message prototype 03693 61178801 4 6 BASE 2314 LD R4 SP,RPTESR4 restore this register 2315 03694 EDC080DA 2316 STW ERRDIRVF remember error occurred for DIRVERIFY 03695 5D1F8004 6 STAK 2317 LEAVE POP 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 53 F 0 RPTERROR - Report Input Error 2318 * --- 2319 2320 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 54 F 0 FINDTEXTZ - Find a String by Index 2323 2324 ********************************************************************************** 2325 * * 2326 * FINDTEXTZ - Find a String by Index * 2327 * * 2328 * This routine will search an array of zero-terminated (TEXTZ) * 2329 * strings, for a particular one. * 2330 * * 2331 * Call: * 2332 * TABLE TEXTZ " string 0 " * 2333 * TEXTZ " string 1 " * 2334 * TEXTZ " string 2 " * 2335 * ... * 2336 * TEXTZ " string n " * 2337 * VFD 0 * 2338 * * 2339 * CALL FINDTEXTZ * 2340 * PARV * 2341 * PARL * 2342 * ST R0
* 2343 * * 2344 * Value returned in R0, eats R1. * 2345 * * 2346 ********************************************************************************** 2347 2348 BLOCK 2349 ENTRY FINDTEXTZ 2350 2351 BEGFRAME 00178801 6 BASE 2352 INDEX BSS 1 2353 ENDFRAME 2354 03696 20457272 2355 ERRSTRING TEXTZ " Error code out of range." 2356 0369D DD1F8002 6 STAK 2357 FINDTEXTZ ENTR PUSH 0369E C1578801 6 BASE 2358 STPV SP,INDEX 0369F C0120000 0 REG 2359 STPL R0 R0 -> string zero 2360 000036A0 2361 LOOP LABEL 036A0 5C160800 0 BASE 2362 CMZ R0,0 off end of table? 036A1 FE0236AA 2363 JEQ GIVEERR jump if yes 036A2 5C178801 6 BASE 2364 CMZ SP,INDEX 036A3 FE0836AA 2365 JLT GIVEERR jump if index too small 036A4 FE0236AB 2366 JEQ RETURN jump if found right string 036A5 604400FF 1 IMM 2367 LD R1 0FF reasonable max length for string 036A6 DA1C0800 0 1 2368 SRCHI R0 R1 000 look for zero byte at end 036A7 38160801 0 0 BASE 2369 LEA R0 R0,1 R0 = word addr of next string 036A8 D0578801 6 BASE 2370 DEC SP,INDEX 036A9 FE0E36A0 2371 JMP LOOP try next string 2372 * --- 2373 000036AA 2374 GIVEERR LABEL index out of range 036AA 60043696 0 IMM 2375 LD R0 ADR ERRSTRING return pointer to error string 2376 * \ / 2377 000036AB 2378 RETURN LABEL R0 = addr of string 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 55 F 0 FINDTEXTZ - Find a String by Index 036AB 5D1F8002 6 STAK 2379 LEAVE POP 2380 * --- 2381 2382 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 56 F 0 Markers 2385 2386 BLOCK 2387 ENTRY MARKBLK 2388 2389 ********************************************************************************** 2390 * * 2391 * This routine marks the block in the block usage array, and * 2392 * indicates a block re-use by setting REUSEMARK to non-zero. Otherwise * 2393 * REUSEMARK is set to zero. * 2394 * Call: * 2395 * ld r0 the block number * 2396 * CALLNP MARKBLK * 2397 * * 2398 ********************************************************************************** 2399 2400 BEGFRAME 2401 ENDFRAME 2402 036AC DD5F8001 6 STAK 2403 MARKBLK ENTRNP PUSH 036AD 78003005 0 2404 AND R0 MSMASK eliminate volume part or other garbage 036AE EC0080D9 2405 STZ REUSEMARK indicate not duplicate block 036AF D1F03004 0 @ 2406 SETT @BITP(R0) set bit in used space array 036B0 FE0236B3 2407 JEQ DUPBLK jump if already marked 036B1 D00080AB 2408 INC FREED increase count of blocks found in use 000036B2 2409 MARKBLKXIT LABEL 036B2 5D1F8001 6 STAK 2410 LEAVE POP 2411 * --- 2412 000036B3 2413 DUPBLK LABEL 036B3 EDC080D9 2414 STW REUSEMARK indicate duplicate block 036B4 FE0E36B2 2415 JMP MARKBLKXIT go to good exit 2416 * --- 2417 2418 END of MARKBLK 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 57 F 0 message checker 2421 2422 BLOCK 2423 ENTRY MSGCHECK 2424 2425 ********************************************************************************** 2426 * * 2427 * This routine will print out a message about disk block * 2428 * reuse if REUSEMARK is non-zero. It also checks CURBLK for * 2429 * being past the volume end and prints out a different message * 2430 * for that. If either occurs, the flag ERRDIRVF is set to 1. * 2431 * Call: * 2432 * CALL MSGCHECK * 2433 * PARVL * 2434 * Eats R0:R4 * 2435 * * 2436 ********************************************************************************** 2437 2438 BEGFRAME 2439 ENDFRAME 2440 036B5 DD1F8001 6 STAK 2441 MSGCHECK ENTR PUSH 036B6 C0524000 1 REG 2442 STPVL R1 pick up FBI type 036B7 600080D6 0 2443 LD R0 CURBLK get the current block number 036B8 640080AD 0 2444 CPR R0 VOLSIZE check for beyond volume end 036B9 FE0836BF 2445 JLT ADROKAY jump if address okay 036BA DC00366F 2446 CALL RPTERROR call to mention this error 036BB 4144000C IMM 2447 PARV ECDA which is bogus address 036BC 414080D6 2448 PARV CURBLK at this phony address 036BD 40524000 1 REG 2449 PARVL R1 and this FBI type 036BE FE0E36C6 2450 JMP SETERRFLAG tell DIRVERIFY this happened 2451 * --- 2452 000036BF 2453 ADROKAY LABEL 036BF 5C0080D9 2454 CMZ REUSEMARK do we need to report anything? 036C0 FE0236C7 2455 JEQ NOERR jump if not 036C1 DC00366F 2456 CALL RPTERROR call to speak up on this error 036C2 4144000D IMM 2457 PARV ECBLKREUS which is block duplicate 036C3 414080D6 2458 PARV CURBLK this disk address 036C4 40524000 1 REG 2459 PARVL R1 and this FBI type 036C5 EC0080D9 2460 STZ REUSEMARK make sure we don't report this error again 000036C6 2461 SETERRFLAG LABEL 036C6 EDC080DA 2462 STW ERRDIRVF signal an error has occurred 000036C7 2463 NOERR LABEL 036C7 5D1F8001 6 STAK 2464 LEAVE POP and return 2465 * --- 2466 2467 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 58 F 0 Mark Pack Label 2470 2471 BLOCK 2472 ENTRY MARKPACKL 2473 2474 ********************************************************************************** 2475 * * 2476 * Routine to mark the pack label. * 2477 * The bad trax table is indeed dependent, but we don't * 2478 * mark it until the end of the rebuild process so that blocks * 2479 * that are still in use (and probably substituted) get reported * 2480 * properly. * 2481 * Call: * 2482 * CALLNP MARKPACKL * 2483 * * 2484 * Eats R0:R3 * 2485 * Affects the global variables VOLSIZE, RDISKSPT, and RDISKTPC. * 2486 * * 2487 ********************************************************************************** 2488 2489 BEGFRAME 2490 ENDFRAME 2491 036C8 DD5F8001 6 STAK 2492 MARKPACKL ENTRNP PUSH 036C9 EDC080AD 2493 STW VOLSIZE ensure volume is big enough to read pack label 036CA 60040000 0 IMM 2494 LD R0 PLDA get the address of pack label 036CB DC4036AC 2495 CALLNP MARKBLK 036CC EC0080AA 2496 STZ RELBLOCK to check against when read in 036CD DC003376 2497 CALL PAGEIN read in the pack label 036CE 41440001 IMM 2498 PARV FBITPL pack label FBI type 036CF 41440000 IMM 2499 PARV PLDA pass pack label address 036D0 41004000 2500 PAR PLPLACE where we want the block 036D1 40008001 2501 PARL PLFBI the FBI location 036D2 FE0E36E5 2502 JMP PLBAD where to go if problems 036D3 60004013 0 2503 LD R0 PLPLACE/PLSIZE pick up total volume size 036D4 E40080AD 0 2504 ST R0 VOLSIZE store the size of the volume 036D5 600480B4 0 IMM 2505 LD R0 ADR RDISKCB DCB address 036D6 5C080816 0 ZBM 2506 CMZ R0,DCBSCSI is this a SCSI disk drive 036D7 FE0C36DF 2507 JNE MPLSCSI jump if yes 036D8 DC1013F9 @ 2508 CALL @VPREPOUT let operator know 036D9 41004000 2509 PAR PLPLACE/PLMAKER pass pack manufacturer 036DA 41004001 2510 PAR PLPLACE/PLSERNO pass his serial number 036DB 41004007 2511 PAR PLPLACE/PLINIDATE(0) and initialization date 036DC 41004008 2512 PAR PLPLACE/PLINIDATE(1) 036DD 400036E6 2513 PARL MPLMSG1 and pass pointer to message prototype. 036DE FE0E36E5 2514 JMP PLBAD all finished 2515 * --- 2516 000036DF 2517 MPLSCSI LABEL 036DF DC1013F9 @ 2518 CALL @VPREPOUT let operator know 036E0 41004019 2519 PAR PLPLACE/PLSDVID pass pack manufacturer 036E1 41004001 2520 PAR PLPLACE/PLSERNO pass his serial number 036E2 41004007 2521 PAR PLPLACE/PLINIDATE(0) and initialization date 036E3 41004008 2522 PAR PLPLACE/PLINIDATE(1) 036E4 400036F4 2523 PARL MPLMSG2 and pass pointer to message prototype. 000036E5 2524 PLBAD LABEL 036E5 5D1F8001 6 STAK 2525 LEAVE POP 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 59 F 0 Mark Pack Label 2526 * --- 2527 036E6 20506163 2528 MPLMSG1 TEXTZ " Pack Mfg \R1\, SerialNum \D2\, InitDate \H3,3\ \H4\." 036F4 205C4331 2529 MPLMSG2 TEXTZ " \C1\, SerialNum \D2\, InitDate \H3,3\ \H4\." 2530 2531 END of MARKPACKL 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 60 F 0 Mark Boot Block 2534 2535 BLOCK 2536 ENTRY MARKBOOT 2537 2538 ********************************************************************************** 2539 * * 2540 * Routine to mark the boot block as used. * 2541 * Call: * 2542 * CALLNP MARKBOOT * 2543 * * 2544 * Eats R0:R3. * 2545 * * 2546 ********************************************************************************** 2547 2548 BEGFRAME 2549 ENDFRAME 2550 03700 DD5F8001 6 STAK 2551 MARKBOOT ENTRNP PUSH 03701 60040002 0 IMM 2552 LD R0 BOOTDA disk address of boot 03702 DC4036AC 2553 CALLNP MARKBLK 03703 EC0080AA 2554 STZ RELBLOCK to check against when read in 03704 DC003376 2555 CALL PAGEIN try to read the boot block 03705 41440003 IMM 2556 PARV FBITBOOT indicate FBI type 03706 41440002 IMM 2557 PARV BOOTDA disk address 03707 41006400 2558 PAR DATAPLACE buffer address 03708 40008064 2559 PARL DATAFBI and FBI address 03709 FE0E370A 2560 JMP BOOTBAD disk error 0000370A 2561 BOOTBAD LABEL 0370A 5D1F8001 6 STAK 2562 LEAVE POP 2563 * --- 2564 2565 END of MARKBOOT 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 61 F 0 Mark Volume Label 2568 2569 BLOCK 2570 ENTRY MARKVOLL 2571 2572 ********************************************************************************** 2573 * * 2574 * Routine to mark the volume label as used space. also * 2575 * marks any tables pointed to by the volume label. That is, * 2576 * it marks the security block which ends up marking all * 2577 * of the account file structures. * 2578 * Call: * 2579 * CALLNP MARKVOLL * 2580 * * 2581 * Gets R0 thru R5 and affects the global variables SECDA, * 2582 * SEC2DA, READVOL, and ERRORBLOCK. * 2583 * * 2584 ********************************************************************************** 2585 2586 BEGFRAME 2587 ENDFRAME 2588 0370B DD5F8001 6 STAK 2589 MARKVOLL ENTRNP PUSH 0370C 60040001 0 IMM 2590 LD R0 VOLLABELDA pick up volume label address 0370D DC4036AC 2591 CALLNP MARKBLK mark the address as used 0370E EC0080AA 2592 STZ RELBLOCK to check against when read in 0370F DC003376 2593 CALL PAGEIN get the volume label from the disk 03710 41440004 IMM 2594 PARV FBITVL volume label FBI type 03711 41440001 IMM 2595 PARV VOLLABELDA pass volume label address 03712 41004C00 2596 PAR VOLLPLACE where we want it 03713 40008022 2597 PARL VOLLFBI and its FBI 03714 FE0E3725 2598 JMP VOLLBAD jump if it didn't work 2599 * \ / 2600 03715 62004C04 01 2601 LD2 R0 VOLLPLACE(VLVNAME) get the volume name 03716 E60080E9 01 2602 ST2 R0 READVOL and save it 03717 60004C12 0 2603 LD R0 VOLLPLACE(VLSECBDA) get the security block address 03718 E40080AF 0 2604 ST R0 SECDA save address of the security block 03719 60004C13 0 2605 LD R0 VOLLPLACE(VLSECB2DA) get the second sec block address 0371A E40080B0 0 2606 ST R0 SEC2DA and save it 2607 * \ / 2608 2609 * Say what volume either REBUILD or DIRVERIFY is working upon 2610 0371B 61043733 4 IMM 2611 LD R4 ADR DVWHOVOLM get address of DIRVERIFY message 0371C 5C003016 2612 CMZ DIRVERIFY if doing a directory verify 0371D FE0C371F 2613 JNE PRINTMESS then go say so 2614 * \ / 0371E 61043726 4 IMM 2615 LD R4 ADR VOLLWHO else say REBUILD 0000371F 2616 PRINTMESS LABEL print either message 0371F DC1013F9 @ 2617 CALL @VPREPOUT say who 03720 410080E9 2618 PAR READVOL volume name 03721 410080AD 2619 PAR VOLSIZE volume size 03722 40170400 4 @R 2620 PARL @R4 pointer to message 2621 * \ / 03723 DC403740 2622 CALLNP MARKSUBS mark the substituted blocks 2623 * \ / 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 62 F 0 Mark Volume Label 2624 03724 DC4037BD 2625 CALLNP MARKSECB mark the security block as in use 2626 * \ / 2627 00003725 2628 VOLLBAD LABEL 03725 5D1F8001 6 STAK 2629 LEAVE POP 2630 * --- 2631 03726 20566F6C 2632 VOLLWHO TEXTZ " Volume being rebuilt = \S1\. Size = \D2\ blocks." 03733 20566F6C 2633 DVWHOVOLM TEXTZ " Volume being verified = \S1\. Size = \D2\ blocks." 2634 2635 END of MARKVOLL 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 63 F 0 Mark Substitution List 2638 2639 BLOCK 2640 ENTRY MARKSUBS 2641 2642 ********************************************************************************** 2643 * * 2644 * Routine to mark the substituted blocks. * 2645 * Call: * 2646 * CALLNP MARKSUBS * 2647 * * 2648 * Since all of the original blocks will be marked by * 2649 * the particular structure markers, we must mark all of the * 2650 * substituted destination blocks. After all of the structures * 2651 * are marked, all of the original and substitute blocks * 2652 * should be marked. This will not be true if substitution * 2653 * entries exist for a structure that is no longer present. * 2654 * These bogus substitution entries will be removed in UNSUB, * 2655 * if writing is allowed. * 2656 * All bad blocks are also marked individually to ensure * 2657 * that none are included in the available disk space. This * 2658 * will be the normal marking for such blocks, since subs * 2659 * entries are normally transient. * 2660 * * 2661 ********************************************************************************** 2662 2663 BEGFRAME 2664 ENDFRAME 2665 03740 DD5F8001 6 STAK 2666 MARKSUBS ENTRNP PUSH 03741 61004C10 4 2667 LD R4 VOLLPLACE/VLSUBSDA get addr of substitution list 03742 FB023758 4 2668 JEQZ R4 NOSUBSLIST jump if nothing to read or mark 03743 60130000 0 4 REG 2669 LD R0 R4 R0 => block to be marked 03744 DC4036AC 2670 CALLNP MARKBLK mark the substitution block as in use 03745 EC0080AA 2671 STZ RELBLOCK to check against when read in 03746 DC003376 2672 CALL PAGEIN read in the substitution block 03747 41440005 IMM 2673 PARV FBITSUBS FBI type 03748 41530000 4 REG 2674 PARV R4 disk address 03749 41004800 2675 PAR SUBSPLACE where to put it 0374A 40008017 2676 PARL SUBSFBI where to put its FBI 0374B FE0E3758 2677 JMP SUBSBAD go here if problem 2678 * \ / 2679 0374C 61444800 5 IMM 2680 LD R5 ADR SUBSPLACE R5=>this disk subs entry 0000374D 2681 NEXTSUBS LABEL 0374D 60174800 0 5 BASE 2682 LD R0 R5,SUBSBADDY get the bad block addr 0374E FA023758 0 2683 JEQZ R0 NOMORESUBS jump if the end of the list 2684 * \ / 2685 0374F 60174801 0 5 BASE 2686 LD R0 R5,SUBSSUB get address of substitute 03750 78003005 0 2687 AND R0 MSMASK remove upper garbage 03751 E40080D6 0 2688 ST R0 CURBLK save for later printout 03752 DC4036AC 2689 CALLNP MARKBLK mark this one as used 03753 DC0036B5 2690 CALL MSGCHECK check for error printing 03754 40440000 IMM 2691 PARVL 0 unspecified FBI type 03755 19440002 5 IMM 2692 ADD R5 SUBSLNTH move the pointer in the disk block 03756 65444C00 5 IMM 2693 CPR R5 ADR (SUBSPLACE(WPP)) end of the block? 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 64 F 0 Mark Substitution List 03757 FE08374D 2694 JLT NEXTSUBS if not, look for another 2695 * \ / 2696 00003758 2697 NOMORESUBS LABEL 00003758 2698 NOSUBSLIST LABEL 00003758 2699 SUBSBAD LABEL 03758 5D1F8001 6 STAK 2700 LEAVE POP 2701 * --- 2702 2703 END of MARKSUBS 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 65 F 0 Clean the Substitution List 2706 2707 BLOCK 2708 ENTRY UNSUB 2709 2710 ********************************************************************************** 2711 * * 2712 * UNSUB checks the entries in the substitution list for * 2713 * bogus entries, and if found removes the bad entry from the * 2714 * list. A bogus substitution list entry is one which is not * 2715 * in use by any existing structure. Therefore it only makes * 2716 * sense to check this after all structures have been marked * 2717 * (except for the entries in the bad tracks list). * 2718 * * 2719 * As near as I can tell, the proper rules for detecting * 2720 * bogus Subs entries are as follows: * 2721 * * 2722 * Bad block Sub block * 2723 * --------- --------- * 2724 * Not in use Not in use Erase entry, free subs * 2725 * Not in use In use Erase subs entry * 2726 * In use Not in use Normal * 2727 * In use In use leave as is, bad situation * 2728 * * 2729 * Call: * 2730 * CALLNP UNSUB * 2731 * * 2732 * Eats R0:R5 * 2733 * * 2734 ********************************************************************************** 2735 2736 BEGFRAME 00178801 6 BASE 2737 UNSUBR4 BSS 1 save R3:R4 2738 ENDFRAME 2739 03759 DD5F8002 6 STAK 2740 UNSUB ENTRNP PUSH 0375A EC12C000 3 REG 2741 STZ R3 say no changes to block 0375B 61044800 4 IMM 2742 LD R4 ADR SUBSPLACE R4 -> substitution block 0000375C 2743 UNSUBLP LABEL 0375C 60170800 0 4 BASE 2744 LD R0 R4,SUBSBADDY get the bad block address 0375D FA023763 0 2745 JEQZ R0 UNSUBEXIT leave if zero 0375E 5C303004 0 @ 2746 CMZ @BITP(R0) see if the bad block has been used 0375F FE02377A 2747 JEQ REMOVENT if not then remove it 2748 * \ / 2749 00003760 2750 NEXTSUB LABEL 03760 19040002 4 IMM 2751 ADD R4 SUBSLNTH move to next entry 03761 65044C00 4 IMM 2752 CPR R4 ADR SUBSPLACE(WPP) check for end of block 03762 FE08375C 2753 JLT UNSUBLP loop back through all subs entries 2754 * \ / subs block completely full 2755 00003763 2756 UNSUBEXIT LABEL 03763 FAC2376A 3 2757 JEQZ R3 UNSUBLEAV if no changes then leave 2758 * \ / 2759 03764 60C48017 3 IMM 2760 LD R3 ADR SUBSFBI R3 -> substitution block's FBI 03765 DC00349B 2761 CALL PAGEOUT write out the changed page 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 66 F 0 Clean the Substitution List 03766 4148D181 3 ZBM 2762 PARV R3,FBIDA disk address 03767 41004800 2763 PAR SUBSPLACE where the block is now 03768 40008017 2764 PARL SUBSFBI and its FBI 03769 FE0E376B 2765 JMP UNSUBERR on error 2766 * \ / 2767 0000376A 2768 UNSUBLEAV LABEL 0376A 5D1F8002 6 STAK 2769 LEAVE POP 2770 * --- 2771 0000376B 2772 UNSUBERR LABEL 0376B DC1013F9 @ 2773 CALL @VPREPOUT tell user 0376C 4000376E 2774 PARL UNSUBERRM 0376D FE0E376A 2775 JMP UNSUBLEAV 2776 * --- 2777 0376E 20556E61 2778 UNSUBERRM TEXTZ " Unable to write changed substitution block." 2779 2780 ********************************************************************************** 2781 * * 2782 * To remove a bogus entry we simply move the remaining block * 2783 * forward one entry and store zero over the last possible entry * 2784 * in the block. * 2785 * * 2786 ********************************************************************************** 2787 0000377A 2788 REMOVENT LABEL 0377A E5178801 4 6 BASE 2789 ST R4 SP,UNSUBR4 save our sub block pointer 0377B 60920000 2 0 REG 2790 LD R2 R0 block address 0377C DC00366F 2791 CALL RPTERROR report the situation 0377D 4144001B IMM 2792 PARV ECSUBENT error code 0377E 41528000 2 REG 2793 PARV R2 disk address 0377F 40440000 IMM 2794 PARVL 0 unknown block FBI type 03780 61178801 4 6 BASE 2795 LD R4 SP,UNSUBR4 restore this now 03781 60C03010 3 2796 LD R3 SUBFLAG should we fix this problem? 03782 FAC23760 3 2797 JEQZ R3 NEXTSUB if not, go on to next entry 03783 EDD2C000 3 REG 2798 STW R3 say we are changing this block 2799 03784 60444C00 1 IMM 2800 LD R1 ADR (SUBSPLACE(WPP)) end of substitution block 03785 10530000 1 4 REG 2801 SUB R1 R4 R4 = #words left in block 03786 1C440004 1 IMM 2802 MUL R1 CPW convert to number of chars 2803 03787 60930000 2 4 REG 2804 LD R2 R4 where we want things moved to 03788 60171002 0 4 REG 2805 LD R0 R4+SUBSLNTH and where to get them from 03789 FE400000 2806 CMOVE move everything forward one entry 2807 0378A 60440008 1 IMM 2808 LD R1 SUBSLNTH*CPW 0378B FE580000 2809 CFILL 00 zero out last positions on the block 0378C FE0E375C 2810 JMP UNSUBLP continue through the list 2811 * --- 2812 2813 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 67 F 0 Mark Bad Tracks List 2816 2817 BLOCK 2818 ENTRY MARKBTRX 2819 2820 ********************************************************************************** 2821 * * 2822 * Routine to mark the bad tracks. If the bad block was a * 2823 * recent addition, its address may still be in use. This only * 2824 * happens when there is also a subs list entry for this block. * 2825 * In this event, these bad blocks will be printed out in block * 2826 * reuse messages. * 2827 * We may also get re-use messages when BTI has manually * 2828 * made entries in the bad trax list. * 2829 * Call: * 2830 * CALLNP markbtrx * 2831 * * 2832 * Eats R0:R3. * 2833 * * 2834 ********************************************************************************** 2835 2836 BEGFRAME 2837 ENDFRAME 2838 0378D DD5F8001 6 STAK 2839 MARKBTRX ENTRNP PUSH 0378E 60004018 0 2840 LD R0 PLPLACE/PLBDTRXDA get bad trax list address 0378F FA0237AC 0 2841 JEQZ R0 NOBADTRX jump if no list here 03790 DC4036AC 2842 CALLNP MARKBLK mark the bad tracks block 03791 EC0080AA 2843 STZ RELBLOCK to check against when read in 03792 DC003376 2844 CALL PAGEIN read in the bad tracks block 03793 41440002 IMM 2845 PARV FBITBTRX FBI type 03794 41404018 2846 PARV PLPLACE/PLBDTRXDA disk address 03795 41004400 2847 PAR BTRXPLACE where we want the block 03796 4000800C 2848 PARL BTRXFBI where to put the FBI 03797 FE0E37AC 2849 JMP BTRXBAD what to do if problems 2850 * \ / 2851 03798 60C7FE00 3 IMM 2852 LD R3 -BTRXECNT R3=maximum number of entries 00003799 2853 BTRXLOOP LABEL 03799 62264800 01 3 2854 LD2 R0 BTRXPLACE(BTRXECNT)(R3) get an entry 0379A 5C0A0080 0 CBM 2855 CMZ R0/BTRXREASON any more? 0379B FE0237AC 2856 JEQ ENDBTRX if not then done 0379C 78003005 0 2857 AND R0 MSMASK remove the reason 0379D E40080D6 0 2858 ST R0 CURBLK save address 0379E 640080AD 0 2859 CPR R0 VOLSIZE check for beyond volume end 0379F FE0837A5 2860 JLT ADROKAY jump if address okay 2861 * bad address, don't attempt to mark 037A0 DC00366F 2862 CALL RPTERROR call to mention this error 037A1 4144000C IMM 2863 PARV ECDA which is bogus address 037A2 414080D6 2864 PARV CURBLK at this phony address 037A3 40440000 IMM 2865 PARVL 00 use FBI type of UNKNOWN 037A4 FE0E37AB 2866 JMP NOERR skip meaningless re-use message 2867 * --- 2868 000037A5 2869 ADROKAY LABEL 037A5 DC4036AC 2870 CALLNP MARKBLK mark as in use 037A6 5C0080D9 2871 CMZ REUSEMARK do we need to report anything? 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 68 F 0 Mark Bad Tracks List 037A7 FE0237AB 2872 JEQ NOERR jump if not 037A8 DC1013F9 @ 2873 CALL @VPREPOUT call to speak up on this error 037A9 410080D6 2874 PAR CURBLK which is block duplicate 037AA 400037AE 2875 PARL REUSEDMESS what we will say 000037AB 2876 NOERR LABEL 037AB FAE03799 3 2877 IRJ R3 BTRXLOOP 2878 * \ / 2879 000037AC 2880 ENDBTRX LABEL 000037AC 2881 NOBADTRX LABEL 000037AC 2882 BTRXBAD LABEL 037AC EC0080D9 2883 STZ REUSEMARK make sure this is clear 037AD 5D1F8001 6 STAK 2884 LEAVE POP 2885 * --- 2886 037AE 20426C6F 2887 REUSEDMESS TEXTZ " Block #\H1,6\ is in bad tracks list and in use elsewhere." 2888 2889 END of MARKBTRX 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 69 F 0 Mark Security Block 2892 2893 BLOCK 2894 ENTRY MARKSECB 2895 2896 ********************************************************************************** 2897 * * 2898 * Routine to mark the security block and all of its associated * 2899 * tables to which it points. * 2900 * Call: * 2901 * CALLNP marksecb * 2902 * * 2903 * Gets R0 thru R5. * 2904 * * 2905 ********************************************************************************** 2906 2907 BEGFRAME 2908 ENDFRAME 2909 2910 037BD DD5F8001 6 STAK 2911 MARKSECB ENTRNP PUSH 037BE 600080AF 0 2912 LD R0 SECDA security block disk address 037BF DC4036AC 2913 CALLNP MARKBLK mark the block 037C0 EC0080AA 2914 STZ RELBLOCK to check against when read in 037C1 DC003376 2915 CALL PAGEIN get the block resident 037C2 41440006 IMM 2916 PARV FBITSEC expecting security block 037C3 410080AF 2917 PAR SECDA indicate where it is 037C4 41005000 2918 PAR SECPLACE and where to put it 037C5 4000802D 2919 PARL SECFBI where to put FBI 037C6 FE0E37D6 2920 JMP BADSEC go here if trouble 2921 * \ / 2922 2923 * We read in the secondary security block to see if it is alright. 2924 * It might be nice to compare this against the first one. (some other day) 037C7 600080B0 0 2925 LD R0 SEC2DA get address of secondary sec block 037C8 DC4036AC 2926 CALLNP MARKBLK 037C9 DC003376 2927 CALL PAGEIN get the secondary block 037CA 41440006 IMM 2928 PARV FBITSEC expecting security block 037CB 410080B0 2929 PAR SEC2DA indicate where it is 037CC 41006400 2930 PAR DATAPLACE and where to put it 037CD 40008064 2931 PARL DATAFBI where to put FBI 037CE FEC00000 2932 NOP 0 ignore error return 2933 * \ / 2934 2935 ********************************************************************************** 2936 * * 2937 * We total up the counts of free space available. Note * 2938 * that we use the list counts from the security block which are * 2939 * not frequently updated during the operation of the system and * 2940 * so, if the system previously crashed, may be in error. * 2941 * * 2942 ********************************************************************************** 2943 2944 * \ / 037CF 60040000 0 IMM 2945 LD R0 0 initialize previous free counter 037D0 6047FFF8 1 IMM 2946 LD R1 -SECADTNUM number of ADT lists to look at 000037D1 2947 COUNTFREE LABEL 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 70 F 0 Mark Security Block 037D1 18225020 0 1 2948 ADD R0 SECPLACE/SECADTCNT(SECADTNUM+R1) add count in this list 037D2 FA6037D1 1 2949 IRJ R1 COUNTFREE and do all lists 037D3 E40080AC 0 2950 ST R0 ONCEFREE store count of blocks previously free 2951 * \ / 2952 037D4 DC4037D7 2953 CALLNP MARKAFT mark the account finder table 2954 037D5 DC4037EA 2955 CALLNP MARKIDX mark the IDX and subsidiaries 2956 * \ / 2957 000037D6 2958 BADSEC LABEL 037D6 5D1F8001 6 STAK 2959 LEAVE POP 2960 * --- 2961 2962 END of MARKSECB 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 71 F 0 Mark Account Finder Table 2965 2966 BLOCK 2967 ENTRY MARKAFT 2968 2969 ********************************************************************************** 2970 * * 2971 * Routine to mark the account finder table blocks as in * 2972 * use. It reads in the blocks just to make sure the FBI type * 2973 * is good. * 2974 * Call: * 2975 * CALLNP markaft * 2976 * * 2977 * Gets R0 thru R5. * 2978 * * 2979 ********************************************************************************** 2980 2981 BEGFRAME 00178801 6 BASE 2982 AFTINDEX BSS 1 index of AFT block being marked 2983 ENDFRAME 2984 037D7 DD5F8002 6 STAK 2985 MARKAFT ENTRNP PUSH 037D8 60005029 0 2986 LD R0 SECPLACE(SECAFTSIZ) get size of AFT 037D9 E4178801 0 6 BASE 2987 ST R0 SP,AFTINDEX save size of the AFT 037DA FE0E37E7 2988 JMP EMPTYBUKT start with a cound and test 2989 * --- 2990 000037DB 2991 NEXTBLK LABEL 037DB 60178801 0 6 BASE 2992 LD R0 SP,AFTINDEX get current AFT block index 037DC 61205129 4 0 2993 LD R4 SECPLACE/SECAFTPTR(R0) get current block DA 037DD FB0237E7 4 2994 JEQZ R4 EMPTYBUKT a zero DA says no block 037DE E40080AA 0 2995 ST R0 RELBLOCK to check against when read in 037DF 60130000 0 4 REG 2996 LD R0 R4 R0 = disk address 037E0 DC4036AC 2997 CALLNP MARKBLK say disk place in use 037E1 DC003376 2998 CALL PAGEIN read in the block 037E2 41440010 IMM 2999 PARV FBITAFT FBI type 037E3 41530000 4 REG 3000 PARV R4 disk address 037E4 41005400 3001 PAR AFTPLACE where we want it 037E5 40008038 3002 PARL AFTFBI put the FBI here 037E6 FE0E37E7 3003 JMP BADBLOCK what to do if trouble 3004 * \ / 3005 000037E7 3006 BADBLOCK LABEL 000037E7 3007 EMPTYBUKT LABEL 037E7 D0578801 6 BASE 3008 DEC SP,AFTINDEX count the processed bucket 037E8 FE0637DB 3009 JGE NEXTBLK jump if more to do 3010 * \ / 3011 037E9 5D1F8002 6 STAK 3012 LEAVE POP 3013 * --- 3014 3015 END of MARKAFT 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 72 F 0 Mark User Index Table 3018 3019 BLOCK 3020 ENTRY MARKIDX 3021 3022 ********************************************************************************** 3023 * * 3024 * Routine to mark the IDX and the structures it points to * 3025 * as in use. This has the effect of marking all accounts and * 3026 * their files. * 3027 * Call: * 3028 * CALLNP markidx * 3029 * * 3030 * Gets R0 thru R5. * 3031 * * 3032 ********************************************************************************** 3033 3034 BEGFRAME 00178801 6 BASE 3035 INDEX BSS 1 pointer into current IDX block 00178802 6 BASE 3036 BUCKET BSS 1 index to bucket being processed 00178803 6 BASE 3037 ACCOUNTS BSS 1 number of accounts marked 3038 ENDFRAME 3039 037EA DD5F8004 6 STAK 3040 MARKIDX ENTRNP PUSH 037EB EC178803 6 BASE 3041 STZ SP,ACCOUNTS initialize number of accounts marked 037EC D1578802 6 BASE 3042 STMW SP,BUCKET initialize bucket index 037ED FE0E3809 3043 JMP ENDOFBUKT start with count and test 3044 * --- 3045 000037EE 3046 NEXTBUKT LABEL 037EE 6120502C 4 0 3047 LD R4 SECPLACE/SECIDXPTR(R0) get DA of current IDX block 037EF FB023809 4 3048 JEQZ R4 ENDOFBUKT zero addr says end of bucket 037F0 E40080AA 0 3049 ST R0 RELBLOCK to check against when read in 037F1 60130000 0 4 REG 3050 LD R0 R4 copy block number to R0 037F2 DC4036AC 3051 CALLNP MARKBLK say this block is in use 037F3 DC003376 3052 CALL PAGEIN read in this IDX block 037F4 41440008 IMM 3053 PARV FBITIDX indicate FBI type 037F5 41530000 4 REG 3054 PARV R4 block number 037F6 41005800 3055 PAR IDXPLACE buffer address 037F7 40008043 3056 PARL IDXFBI we want the FBI put here 037F8 FE0E3809 3057 JMP BADIDX go here if trouble 3058 * \ / 3059 037F9 61445800 5 IMM 3060 LD R5 ADR IDXPLACE pointer to first element 037FA E5578801 5 6 BASE 3061 ST R5 SP,INDEX save the index 000037FB 3062 NEXTENT LABEL 037FB 62174800 015 BASE 3063 LD2 R0 R5,IDXACNO get the account number 037FC FA2C3805 0 3064 JEQMW R0 BFILLER jump if deleted entry filler 037FD FA1C3800 01 3065 JNEZ2 R0 THISPLACE jump if an account is here 037FE 5C174802 5 BASE 3066 CMZ R5,IDXACNOP check the extension 037FF FE023809 3067 JEQ ENDOFBUKT jump if nothing here 00003800 3068 THISPLACE LABEL 03800 61138000 4 6 REG 3069 LD R4 SP 03801 DC003827 3070 CALL MARKACCT mark the account in use 03802 41570802 4 BASE 3071 PARV R4,BUCKET bucket number 03803 40174400 5 @R 3072 PARL @R5 pointer to IDX entry 03804 D0178803 6 BASE 3073 INC SP,ACCOUNTS count this account 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 73 F 0 Mark User Index Table 3074 * \ / 3075 00003805 3076 BFILLER LABEL 03805 61440005 5 IMM 3077 LD R5 IDXLNTH length of entry 03806 B9578801 5 6 BASE 3078 ADDB R5 SP,INDEX move to the next entry 03807 65445BFC 5 IMM 3079 CPR R5 ADR(IDXPLACE(IDXECNT*IDXLNTH)) see if more 03808 FE0837FB 3080 JLT NEXTENT jump if more 00003809 3081 ENDOFBUKT LABEL 00003809 3082 BADIDX LABEL 03809 BC178802 0 6 BASE 3083 INCL R0 SP,BUCKET advance to next bucket number 0380A 64005028 0 3084 CPR R0 SECPLACE(SECIDXSIZ) number of blocks in IDX 0380B FE0837EE 3085 JLT NEXTBUKT jump if some left 3086 * \ / 0380C 60178803 0 6 BASE 3087 LD R0 SP,ACCOUNTS load count of accounts that we found 0380D 6400502A 0 3088 CPR R0 SECPLACE/SECIDXENTS same as SEC block number? 0380E FE023818 3089 JEQ GOODCOUNT no problem if same 3090 0380F 61538000 5 6 REG 3091 LD R5 SP 03810 DC1013F9 @ 3092 CALL @VPREPOUT print out the warning 03811 4100502A 3093 PAR SECPLACE/SECIDXENTS pass old number 03812 41174803 5 BASE 3094 PAR R5,ACCOUNTS pass actual number 03813 40003819 3095 PARL IDXCNTMSG and pointer to message 3096 03814 5C00300F 3097 CMZ SIZECALC are we allowing modifications to these numbers? 03815 FE023818 3098 JEQ GOODCOUNT jump if we leave the disk alone 03816 60178803 0 6 BASE 3099 LD R0 SP,ACCOUNTS load our new count 03817 E400502A 0 3100 ST R0 SECPLACE/SECIDXENTS and stuff into security block 00003818 3101 GOODCOUNT LABEL 03818 5D1F8004 6 STAK 3102 LEAVE POP 3103 * --- 3104 03819 20436F75 3105 IDXCNTMSG TEXTZ " Count of IDX entries wrong. Old=\D1\, Actual=\D2\." 3106 3107 END of MARKIDX 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 74 F 0 Mark an Account 3110 3111 BLOCK 3112 ENTRY MARKACCT 3113 3114 ********************************************************************************** 3115 * * 3116 * Given a pointer to an IDX entry this routine marks the * 3117 * directory and all of the associated files. * 3118 * Call: * 3119 * call markacct * 3120 * parv * 3121 * parl => IDX entry * 3122 * * 3123 * Gets R0 thru R5. * 3124 * * 3125 ********************************************************************************** 3126 3127 BEGFRAME 00178801 6 BASE 3128 DIR1INDEX BSS 1 index into primary directory block 00178802 6 BASE 3129 DIR2INDEX BSS 1 index into secondary directory block 00178803 6 BASE 3130 ACCTINIDX BSS 1 pointer to IDX entry 00178804 6 BASE 3131 ACCTSIZE BSS 1 size of account in disk blocks 00178805 6 BASE 3132 UDIR1NAME BSS2 1 UDIR1 name index 00178807 6 BASE 3133 UDIR1EXT BSS 1 UDIR1 extension index 00178808 6 BASE 3134 CURUDIR1 BSS 1 block number of UDIR1 00178809 6 BASE 3135 BUCKNUM BSS 1 bucket number 3136 ENDFRAME 3137 03827 DD1F800A 6 STAK 3138 MARKACCT ENTR PUSH 03828 C1578809 6 BASE 3139 STPV SP,BUCKNUM store the bucket number 03829 C0178803 6 BASE 3140 STPL SP,ACCTINIDX pointer to IDX 0382A 62960800 230 BASE 3141 LD2 R2 R0,IDXACNO pick up account 0382B E68080EE 23 3142 ST2 R2 READACCT and save it 0382C 60960802 2 0 BASE 3143 LD R2 R0,IDXACNOP and project 0382D E48080F0 2 3144 ST R2 READPROJ 0382E EC178804 6 BASE 3145 STZ SP,ACCTSIZE no blocks known yet 0382F 61160803 4 0 BASE 3146 LD R4 R0,IDXDIRDA R4:=disk addr of directory 03830 60D60804 3 0 BASE 3147 LD R3 R0,IDXDIRDA2 R3:=second disk addr 3148 * \ / 3149 03831 FAC23835 3 3150 JEQZ R3 NODIR1DUP jump if UDIR1 block not duplicated 03832 6012C000 0 3 REG 3151 LD R0 R3 need block number in R0 03833 DC4036AC 3152 CALLNP MARKBLK mark the shadow UDIR1 block 03834 D0178804 6 BASE 3153 INC SP,ACCTSIZE account for directory block 00003835 3154 NODIR1DUP LABEL 3155 03835 60130000 0 4 REG 3156 LD R0 R4 03836 E4178808 0 6 BASE 3157 ST R0 SP,CURUDIR1 save UDIR1 block number 03837 DC4036AC 3158 CALLNP MARKBLK mark the primary directory block 3159 * \ / 03838 EC0080AA 3160 STZ RELBLOCK to compare against when read in 03839 60040009 0 IMM 3161 LD R0 FBITUDIR1 FBI type 0383A E40080E4 0 3162 ST R0 UDIRTYPE save it for error processing 0383B E50080E5 4 3163 ST R4 UDIRBLOCK save block # for error processing 3164 * \ / 0383C DC003376 3165 CALL PAGEIN get the UDIR1 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 75 F 0 Mark an Account 0383D 41440009 IMM 3166 PARV FBITUDIR1 FBI type 0383E 41530000 4 REG 3167 PARV R4 block number 0383F 41005C00 3168 PAR DIR1PLACE where to put UDIR 03840 4000804E 3169 PARL DIRFBI and its FBI 03841 FE0E38BB 3170 JMP BADDIR1 where to go on error 3171 * \ / 3172 * Verify that the account name in the user directory matches the 3173 * account name in the IDX. Horrible things happen otherwise. 3174 * \ / 3175 03842 60978803 2 6 BASE 3176 LD R2 SP,ACCTINIDX R2 -> IDX entry 03843 62168800 012 BASE 3177 LD2 R0 R2,IDXACNO R0,R1 = account name 03844 66005C00 01 3178 CPR2 R0 DIR1PLACE/UDACCT is it right? 03845 FE0C3849 3179 JNE NAMEBAD jump if not 03846 60168802 0 2 BASE 3180 LD R0 R2,IDXACNOP R0 = project name 03847 64005C02 0 3181 CPR R0 DIR1PLACE/UDPROJ does it match? 03848 FE023851 3182 JEQ NAMEGOOD jump if all is ok 3183 * \ / 3184 00003849 3185 NAMEBAD LABEL 03849 DC1013F9 @ 3186 CALL @VPREPOUT tell user about mismatch names 0384A 410080E9 3187 PAR ERRORBLOCK account from IDX 0384B 41005C00 3188 PAR DIR1PLACE/UDACCT account name from UDIR1 0384C 41005C02 3189 PAR DIR1PLACE/UDPROJ project name from UDIR1 0384D 41008053 3190 PAR DIRFBI/FBIACCT account name from UDIR1 FBI 0384E 41008055 3191 PAR DIRFBI/FBIPROJ project name from UDIR1 FBI 0384F 400038CD 3192 PARL NAMEBADMSG message prototype 03850 D00080DB 3193 INC ERRORCNT 00003851 3194 NAMEGOOD LABEL 3195 * \ / 3196 * Verify that the UDIR is hashed into the correct IDX block 3197 * \ / 3198 IDXHASH R0,R1,DIR1PLACE/UDACCT,DIR1PLACE/UDPROJ,SECPLACE/SECIDXSIZ 03851 62005C00 01 3198 LD2 R0 DIR1PLACE/UDACCT get the account name into R0 and R1 03852 744A1000 1 0 CBM 3198 XOR R1 R0/BITS 8:7 mix up the account number 03853 60005C02 0 3198 LD R0 DIR1PLACE/UDPROJ fetch up the project 03854 744A2000 1 0 CBM 3198 XOR R1 R0/BITS 16:15 mix in the project shifted 03855 60040000 0 IMM 3198 LD R0 0 initialize register for marth 03856 58C40010 IMM 3198 IORPSR PSRMODIF say that we want the remainder 03857 14005028 0 3198 DIV R0 SECPLACE/SECIDXSIZ divide by number of buckets 03858 58840010 IMM 3198 CLBPSR PSRMODIF restore normalcy 03859 64578809 1 6 BASE 3199 CPR R1 SP,BUCKNUM is it in the right place? 0385A FE023860 3200 JEQ IDXHASHOK if so then don't complain 3201 * \ / 0385B DC1013F9 @ 3202 CALL @VPREPOUT tell about the boo boo 0385C 41005C00 3203 PAR DIR1PLACE/UDACCT the account causing the problem 0385D 41005C02 3204 PAR DIR1PLACE/UDPROJ the project of the account... 0385E 400038EB 3205 PARL IDXBADMESS the message to send 0385F D00080DB 3206 INC ERRORCNT 3207 * \ / 00003860 3208 IDXHASHOK LABEL 3209 * \ / 3210 * Verify that the UDIR has been assigned a non-null password. 3211 * \ / 03860 5C005C03 3212 CMZ DIR1PLACE/UDPASS is the logon password null? 03861 FE0C386B 3213 JNE PWNOTNULL jump if not, we're happy 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 76 F 0 Mark an Account 03862 60005C02 0 3214 LD R0 DIR1PLACE/UDPROJ get the project 03863 6800300D 0 3215 UCPR R0 DOTBANG check for heavy account 03864 FE063867 3216 JGE PRINTIT if so, print always 03865 5C003019 3217 CMZ PWCHKFLAG is the user interested? 03866 FE02386B 3218 JEQ PWNOTNULL jump if not, darn 00003867 3219 PRINTIT LABEL 03867 DC1013F9 @ 3220 CALL @VPREPOUT tell about null pw 03868 41005C00 3221 PAR DIR1PLACE/UDACCT the account causing the problem 03869 41005C02 3222 PAR DIR1PLACE/UDPROJ the project of the account... 0386A 400038F6 3223 PARL NULLPWMESS the message to send 0000386B 3224 PWNOTNULL LABEL 0386B D0178804 6 BASE 3225 INC SP,ACCTSIZE account for directory block 3226 * \ / 0386C 61005C3C 4 3227 LD R4 DIR1PLACE/UDSHLLIST get share list entry 0386D F3003878 4 3228 JBF R4/SHLDSKFLGB CONTSHL jump if no shared list block 0386E 60130000 0 4 REG 3229 LD R0 R4 copy MS address 0386F DC4036AC 3230 CALLNP MARKBLK mark the shared list block 03870 EC0080AA 3231 STZ RELBLOCK to check against when read in 03871 DC003376 3232 CALL PAGEIN to read in the SHL block for check 03872 41440011 IMM 3233 PARV FBITASLB type is account share list 03873 41530000 4 REG 3234 PARV R4 pass disk address 03874 41006400 3235 PAR DATAPLACE buffer addr 03875 40008064 3236 PARL DATAFBI FBI addr 03876 FE0E3878 3237 JMP BADASHL jump if bad read 03877 D0178804 6 BASE 3238 INC SP,ACCTSIZE account for shared list block 00003878 3239 CONTSHL LABEL 00003878 3240 BADASHL LABEL 3241 * \ / 03878 61005C40 4 3242 LD R4 DIR1PLACE/UDAUTHLIST get authorization list entry 03879 FB023884 4 3243 JEQZ R4 CONTAUTH jump if no auth list 0387A 60130000 0 4 REG 3244 LD R0 R4 copy MS address 0387B DC4036AC 3245 CALLNP MARKBLK mark the auth list 0387C EC0080AA 3246 STZ RELBLOCK to check against when read in 0387D DC003376 3247 CALL PAGEIN to read in the AUT block for check 0387E 41440015 IMM 3248 PARV FBITAUTLB type is account share list 0387F 41530000 4 REG 3249 PARV R4 pass disk address 03880 41006400 3250 PAR DATAPLACE buffer addr 03881 40008064 3251 PARL DATAFBI FBI addr 03882 FE0E3884 3252 JMP BADAUTH jump if bad read 03883 D0178804 6 BASE 3253 INC SP,ACCTSIZE count the block 00003884 3254 CONTAUTH LABEL 00003884 3255 BADAUTH LABEL 3256 * \ / 3257 03884 EC178801 6 BASE 3258 STZ SP,DIR1INDEX begin at the begining 03885 EE0080F3 3259 STZ2 READNAME to compare against for order 03886 EC0080F5 3260 STZ READEXT first one will be in order 03887 60045C00 0 IMM 3261 LD R0 ADR DIR1PLACE point to UDIR1 block 03888 5C08001A 0 ZBM 3262 CMZ R0,UDTYPE is this a big directory? 03889 FE0C3900 3263 JNE BIGDIR jump if big 3264 * \ / 3265 0388A EC0080DE 3266 STZ BLOCKCHANG no changes yet 0388B 60D78801 3 6 BASE 3267 LD R3 SP,DIR1INDEX get our place in UDIR 0000388C 3268 NEXTFDE LABEL 0388C 39265C60 4 3 3269 LEA R4 DIR1PLACE/UDFDLIST(R3) get pointer to FD entry 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 77 F 0 Mark an Account 0388D 5C170800 4 BASE 3270 CMZ R4,0 is there an entry? 0388E FE023896 3271 JEQ DIR1FDEMP jump if empty 0388F E50080D8 4 3272 ST R4 PNTRFDE set pointer to FDE 03890 DC403970 3273 CALLNP MARKFILE call to mark this file 03891 98178804 0 6 BASE 3274 ADDM R0 SP,ACCTSIZE add in this file's size 3275 * \ / 3276 3277 * Move to the next entry 03892 60C40018 3 IMM 3278 LD R3 FDLNTH length of entry 03893 B8D78801 3 6 BASE 3279 ADDB R3 SP,DIR1INDEX move over the last entry 03894 64C40390 3 IMM 3280 CPR R3 UDFDECNT*FDLNTH the end? 03895 FE08388C 3281 JLT NEXTFDE 3282 * \ / 3283 3284 * See if the directory block needs to be written because of change. 3285 * \ / 00003896 3286 DIR1FDEMP LABEL 03896 5C0080DE 3287 CMZ BLOCKCHANG did the block change 03897 FE0238A1 3288 JEQ NODIR1W jump if not 03898 5C00300F 3289 CMZ SIZECALC are we supposed to write? 03899 FE0238A1 3290 JEQ NODIR1W jump if not 0389A 60178803 0 6 BASE 3291 LD R0 SP,ACCTINIDX get pointer to IDX 0389B 61160803 4 0 BASE 3292 LD R4 R0,IDXDIRDA R4=disk address of the block 0389C DC00349B 3293 CALL PAGEOUT write out the page 0389D 41530000 4 REG 3294 PARV R4 disk address 0389E 41005C00 3295 PAR DIR1PLACE where it is now 0389F 4000804E 3296 PARL DIRFBI where its FBI is 038A0 FE0E38BC 3297 JMP BADD1WR cannot write the block 000038A1 3298 NODIR1W LABEL 3299 * \ / 3300 3301 ********************************************************************************** 3302 * * 3303 * See if the account's actual size is the same as what is * 3304 * in the directory block. If not, give a message and possibly * 3305 * rewrite it. * 3306 * Directory verify does not count data blocks so it cannot * 3307 * check the old size of an account vs. a counted size (as * 3308 * REBUILD does). * 3309 * * 3310 ********************************************************************************** 3311 3312 * \ / 000038A1 3313 MAYBESZD LABEL 038A1 5C003016 3314 CMZ DIRVERIFY if we are in directory verify mode 038A2 FE0C38BB 3315 JNE NOCHANGE then we cannot even compare sizes 3316 * \ / 038A3 38405C2B 1 3317 LEA R1 DIR1PLACE(UDLIMITS) get pointer to limits 038A4 60085188 0 1 ZBM 3318 LD R0 R1,DSKUSD get the recorded size 038A5 64178804 0 6 BASE 3319 CPR R0 SP,ACCTSIZE same as actual size? 038A6 FE0238BB 3320 JEQ NOCHANGE jump if nothing to report 038A7 E40080DD 0 3321 ST R0 ERRORTEMP save the recorded size 038A8 61538000 5 6 REG 3322 LD R5 SP 038A9 DC1013F9 @ 3323 CALL @VPREPOUT give informative message 038AA 410080E9 3324 PAR ERRORBLOCK block causing problem 038AB 410080DD 3325 PAR ERRORTEMP 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 78 F 0 Mark an Account 038AC 41174804 5 BASE 3326 PAR R5,ACCTSIZE size of the account 038AD 400038E0 3327 PARL NEWACCTSZ its new size 038AE 5C00300F 3328 CMZ SIZECALC are we supposed to write the diff? 038AF FE0238BB 3329 JEQ NOCHANGE jump if not 038B0 38405C2B 1 3330 LEA R1 DIR1PLACE(UDLIMITS) get pointer to limits 038B1 60178804 0 6 BASE 3331 LD R0 SP,ACCTSIZE 038B2 E4085188 0 1 ZBM 3332 ST R0 R1,DSKUSD update the recorded size 038B3 60178803 0 6 BASE 3333 LD R0 SP,ACCTINIDX get pointer to IDX 038B4 61160803 4 0 BASE 3334 LD R4 R0,IDXDIRDA R4=disk addr of directory 038B5 E50080DD 4 3335 ST R4 ERRORTEMP save for error handler 038B6 DC00349B 3336 CALL PAGEOUT write out the block 038B7 41530000 4 REG 3337 PARV R4 block number 038B8 41005C00 3338 PAR DIR1PLACE where we keep the block 038B9 4000804E 3339 PARL DIRFBI and its FBI 038BA FE0E38BC 3340 JMP BADD1WR cannot write the block 3341 * \ / 000038BB 3342 NOCHANGE LABEL 000038BB 3343 BADDIR1 LABEL 038BB 5D1F800A 6 STAK 3344 LEAVE POP 3345 * --- 3346 000038BC 3347 BADD1WR LABEL 038BC DC1013F9 @ 3348 CALL @VPREPOUT tell about the problem 038BD 410080E9 3349 PAR ERRORBLOCK account 038BE 410080DD 3350 PAR ERRORTEMP block number 038BF 400038C1 3351 PARL BADD1WRM 038C0 FE0E38BB 3352 JMP BADDIR1 die on error 3353 * --- 3354 038C1 2043616E 3355 BADD1WRM TEXTZ " Cannot write UDIR1. Acct=\A1\, block=\H2\." 3356 038CD 20416363 3357 NAMEBADMSG TEXT " Account name mismatch. IDX=\A1" 038D5 0000000A 3358 VFDC "\",",",cr,lf 038D6 20554449 3359 TEXTZ " UDIR1=\S2\.\R3\, UDIR1 FBI=\S4\.\R5\" 038E0 205C4131 3360 NEWACCTSZ TEXTZ " \A1\ size wrong. UD=\D2\, actual=\D3\." 038EB 20075C53 3361 IDXBADMESS TEXTZ " \S1\.\R2\ hashed into wrong IDX block." 038F6 205C5331 3362 NULLPWMESS TEXTZ " \S1\.\R2\ has a null logon password." 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 79 F 0 Mark an Account 3364 3365 ********************************************************************************** 3366 * * 3367 * The directory is a big one so we scan through the * 3368 * major block and read in each of the minor blocks and * 3369 * mark the files in them. * 3370 * * 3371 ********************************************************************************** 3372 00003900 3373 BIGDIR LABEL 03900 60D78801 3 6 BASE 3374 LD R3 SP,DIR1INDEX where we are in UDIR1 00003901 3375 NEXTDIR2 LABEL 03901 39265C60 4 3 3376 LEA R4 DIR1PLACE/UDFDLIST(R3) pointer to entry 03902 5C170800 4 BASE 3377 CMZ R4,0 another entry? 03903 FE02393E 3378 JEQ DIR1IDEMP jump if no more 03904 60170804 0 4 BASE 3379 LD R0 R4,UDINDXDA2 get UDIR2 shadow 03905 FA023908 0 3380 JEQZ R0 NODIR2DUP jump if none 03906 DC4036AC 3381 CALLNP MARKBLK mark it 03907 D0178804 6 BASE 3382 INC SP,ACCTSIZE account for directory block 00003908 3383 NODIR2DUP LABEL 03908 62170800 014 BASE 3384 LD2 R0 R4,UDINDXNAM get the first name in UDIR2 03909 E6178805 016 BASE 3385 ST2 R0 SP,UDIR1NAME 0390A 60170802 0 4 BASE 3386 LD R0 R4,UDINDXEXT get the extension, too 0390B E4178807 0 6 BASE 3387 ST R0 SP,UDIR1EXT 0390C 60091183 0 4 ZBM 3388 LD R0 R4,UDINDXADR get UDIR2 address 0390D E40080E5 0 3389 ST R0 UDIRBLOCK and save it for error processing 0390E DC4036AC 3390 CALLNP MARKBLK say disk space used 3391 * \ / 0390F EC0080AA 3392 STZ RELBLOCK to compare against when read in 03910 6004000A 0 IMM 3393 LD R0 FBITUDIR2 FBI type 03911 E40080E4 0 3394 ST R0 UDIRTYPE save it for error processing 3395 * \ / 03912 DC003376 3396 CALL PAGEIN get the pointer page in 03913 4144000A IMM 3397 PARV FBITUDIR2 FBI type 03914 414080E5 3398 PARV UDIRBLOCK disk address 03915 41006000 3399 PAR DIR2PLACE where we want it put 03916 40008059 3400 PARL DIR2FBI where to pput the FBI 03917 FE0E393A 3401 JMP BADDIR2 what to do when problems 03918 EC0080DE 3402 STZ BLOCKCHANG block not changed yet 03919 D0178804 6 BASE 3403 INC SP,ACCTSIZE account for dir block 3404 * \ / 3405 0391A EC178802 6 BASE 3406 STZ SP,DIR2INDEX begin at the beginning 0391B 60D78802 3 6 BASE 3407 LD R3 SP,DIR2INDEX 3408 3409 * check the first UDIR2 entry's name for a match against UDIR1 3410 * 0391C 39266000 4 3 3411 LEA R4 DIR2PLACE(R3) get pointer to entry 0391D 62170802 014 BASE 3412 LD2 R0 R4,FDNAME get the name from UDIR2 0391E 6A178805 016 BASE 3413 UCPR2 R0 SP,UDIR1NAME compare against UDIR1 0391F FE0C3950 3414 JNE BADUDIRNAM report any problems 03920 60170804 0 4 BASE 3415 LD R0 R4,FDEXTEN get the extension 03921 68178807 0 6 BASE 3416 UCPR R0 SP,UDIR1EXT see if it matches 03922 FE0C3950 3417 JNE BADUDIRNAM report any problem 3418 * \ / 00003923 3419 NEXTFDEX LABEL 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 80 F 0 Mark an Account 03923 39266000 4 3 3420 LEA R4 DIR2PLACE(R3) get pointer to entry 03924 5C170800 4 BASE 3421 CMZ R4,0 is there another entry? 03925 FE02392D 3422 JEQ DIR2FDEMP jump if not 03926 E50080D8 4 3423 ST R4 PNTRFDE set pointer to FDE 03927 DC403970 3424 CALLNP MARKFILE call to mark this file 03928 98178804 0 6 BASE 3425 ADDM R0 SP,ACCTSIZE add in this file's size 3426 * \ / 3427 3428 * Move to the next entry 03929 60C40018 3 IMM 3429 LD R3 FDLNTH size of entry 0392A B8D78802 3 6 BASE 3430 ADDB R3 SP,DIR2INDEX move over the entry 0392B 64C403F0 3 IMM 3431 CPR R3 UD2FDECNT*FDLNTH past the end? 0392C FE083923 3432 JLT NEXTFDEX jump if possibly more 3433 * \ / 3434 3435 * See if the block needs writing out because of size or conversion 3436 * \ / 0000392D 3437 DIR2FDEMP LABEL 0392D 5C0080DE 3438 CMZ BLOCKCHANG has the block changed? 0392E FE02393A 3439 JEQ NODIR2W jump if not 0392F 5C00300F 3440 CMZ SIZECALC are we supposed to write? 03930 FE02393A 3441 JEQ NODIR2W jump if not 03931 60D78801 3 6 BASE 3442 LD R3 SP,DIR1INDEX where we are in UDIR1 03932 39265C60 4 3 3443 LEA R4 DIR1PLACE/UDFDLIST(R3) pointer to entry 03933 61091183 4 4 ZBM 3444 LD R4 R4,UDINDXADR disk address 03934 E50080DD 4 3445 ST R4 ERRORTEMP save for error handler 03935 DC00349B 3446 CALL PAGEOUT write out the block 03936 41530000 4 REG 3447 PARV R4 disk address 03937 41006000 3448 PAR DIR2PLACE where it is now 03938 40008059 3449 PARL DIR2FBI where its FBI is 03939 FE0E393F 3450 JMP BADD2WR jump if it wouldn't write 0000393A 3451 NODIR2W LABEL 3452 * \ / 3453 3454 * Move to next secondary directory block 0000393A 3455 BADDIR2 LABEL 0393A 60C40005 3 IMM 3456 LD R3 UDINDXLEN length of index 0393B B8D78801 3 6 BASE 3457 ADDB R3 SP,DIR1INDEX move to the next block pointer 0393C 64C4039D 3 IMM 3458 CPR R3 UDINDCNT*UDINDXLEN past the end? 0393D FE083901 3459 JLT NEXTDIR2 jump if possibly more 3460 * \ / 3461 0000393E 3462 DIR1IDEMP LABEL 0393E FE0E38A1 3463 JMP MAYBESZD check for account size wrong 3464 * --- 3465 3466 * Cannot write the modified block. 0000393F 3467 BADD2WR LABEL 0393F DC1013F9 @ 3468 CALL @VPREPOUT tell someone 03940 410080E9 3469 PAR ERRORBLOCK the problem account 03941 410080DD 3470 PAR ERRORTEMP the problem block 03942 40003944 3471 PARL BADD2WRM 03943 FE0E393A 3472 JMP BADDIR2 die on error 3473 * --- 3474 03944 2043616E 3475 BADD2WRM TEXTZ " Cannot write UDIR2. Acct=\A1\, block=\H2\." 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 81 F 0 Mark an Account 3476 00003950 3477 BADUDIRNAM LABEL 03950 61538000 5 6 REG 3478 LD R5 SP 03951 DC1013F9 @ 3479 CALL @VPREPOUT complain a bit 03952 410080E5 3480 PAR UDIRBLOCK UDIR2 block number 03953 41170802 4 BASE 3481 PAR R4,FDNAME first entry's name 03954 41170804 4 BASE 3482 PAR R4,FDEXTEN and its extension 03955 41174808 5 BASE 3483 PAR R5,CURUDIR1 UDIR1 block number 03956 41174805 5 BASE 3484 PAR R5,UDIR1NAME UDIR1 index file name 03957 41174807 5 BASE 3485 PAR R5,UDIR1EXT and its extension 03958 4000395B 3486 PARL BADNAMEM 03959 EC12C000 3 REG 3487 STZ R3 restore for loop 0395A FE0E3923 3488 JMP NEXTFDEX 3489 * --- 3490 0395B 20074572 3491 BADNAMEM TEXTZ " Error UDIR2 #\H1,6\ FDE=\S2\.\R3\ doesn't match UDIR1 #\H4,6\ index=\S5\.\R6\." 3492 3493 END of MARKACCT 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 82 F 0 Mark an Account 3495 3496 BLOCK MARKFILE 3497 ENTRY MARKFILE 3498 3499 ********************************************************************************** 3500 * * 3501 * This routine just passes control on to the appropriate * 3502 * file processor. * 3503 * Call: * 3504 * CALLNP MARKFILE * 3505 * R0 = total space used (including share list) * 3506 * undefined if doing a directory verify * 3507 * * 3508 ********************************************************************************** 3509 3510 BEGFRAME 00178801 6 BASE 3511 FILESHL BSS 1 flag saying file shared list 3512 ENDFRAME 3513 03970 DD5F8002 6 STAK 3514 MARKFILE ENTRNP PUSH 03971 610080D8 4 3515 LD R4 PNTRFDE get pointer to FDE 03972 62170802 014 BASE 3516 LD2 R0 R4,FDNAME fetch up file name 03973 6A0080F3 01 3517 UCPR2 R0 READNAME are we in ascending order 03974 E60080F3 01 3518 ST2 R0 READNAME and save for error printer 03975 FE08399F 3519 JLT NOORDER complain if out of order 03976 60170804 0 4 BASE 3520 LD R0 R4,FDEXTEN fetch up file name extension 03977 FE0C397A 3521 JNE NOCHEKEXT don't check extension for order... 3522 * \ / ... if name already different 03978 680080F5 0 3523 UCPR R0 READEXT names matched so check extensions 03979 FE08399F 3524 JLT NOORDER report the error 3525 * \ / 0000397A 3526 NOCHEKEXT LABEL 0397A E40080F5 0 3527 ST R0 READEXT and likewise save 0000397B 3528 RETERROR LABEL 0397B 6217080A 014 BASE 3529 LD2 R0 R4,FDSERNO pick up file serial number 0397C E60080E1 01 3530 ST2 R0 READSERIAL and save for checker 0397D 61170814 4 4 BASE 3531 LD R4 R4,FDSHL get key to shared list 0397E EC178801 6 BASE 3532 STZ SP,FILESHL assume no share list yet 0397F F300398A 4 3533 JBF R4/SHLDSKFLGB NOSHL jump if no disk shared list 03980 60130000 0 4 REG 3534 LD R0 R4 copy address 03981 DC4036AC 3535 CALLNP MARKBLK say in use 03982 EC0080AA 3536 STZ RELBLOCK to compare against when read in 03983 DC003376 3537 CALL PAGEIN to read in the SHL block for check 03984 41440012 IMM 3538 PARV FBITFSLB type is account share list 03985 41530000 4 REG 3539 PARV R4 pass disk address 03986 41006400 3540 PAR DATAPLACE buffer addr 03987 40008064 3541 PARL DATAFBI FBI addr 03988 FE0E398A 3542 JMP BADFSHL jump if bad read 03989 EDD78801 6 BASE 3543 STW SP,FILESHL say a shared list is present 0000398A 3544 NOSHL LABEL 0000398A 3545 BADFSHL LABEL 0398A EC0080A0 3546 STZ FILEBADFLG indicate file okay (so far) 0398B 610080D8 4 3547 LD R4 PNTRFDE => file dir entry 0398C 60092A60 0 4 ZBM 3548 LD R0 R4,FDET get the type of the device 0398D 50040010 0 IMM 3549 MIN R0 TYPELAST make it within bounds 0398E 602039B0 0 0 3550 LD R0 MFTYPETAB(R0) get the address of subroutine to call 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 83 F 0 Mark an Account 0398F DC560400 0 @R 3551 CALLNP @R0 call MARKxxxx 3552 * \ / 3553 3554 * Okay, the file is now marked. Check the various results. 3555 03990 610080D8 4 3556 LD R4 PNTRFDE => file dir entry 3557 03991 5C003017 3558 CMZ DROPBAD are we to ghost out bad files? 03992 FE023997 3559 JEQ NODROP jump if not 03993 5C0080A0 3560 CMZ FILEBADFLG was it a bad file? 03994 FE023997 3561 JEQ NODROP jump if good 03995 EDC93610 4 ZBM 3562 STW R4,FDGHOST mark as ghost 03996 D00080DE 3563 INC BLOCKCHANG and mark dir as modified 00003997 3564 NODROP LABEL 3565 3566 * See if the file's actual size is different than the directory. 03997 64091186 0 4 ZBM 3567 CPR R0 R4,FDLEN is actual the same as recorded? 03998 FE02399D 3568 JEQ NOFSZCHNG jump if not different 03999 5C00300F 3569 CMZ SIZECALC are we to change this stuff? 0399A FE02399D 3570 JEQ NOFSZCHNG jump if not 0399B E4091186 0 4 ZBM 3571 ST R0 R4,FDLEN update the remembered length 0399C D00080DE 3572 INC BLOCKCHANG remember that the block was diddled 0000399D 3573 NOFSZCHNG LABEL 0399D 18178801 0 6 BASE 3574 ADD R0 SP,FILESHL add one if share list present 0399E 5D1F8002 6 STAK 3575 LEAVE POP return 3576 * --- 3577 0000399F 3578 NOORDER LABEL 0399F 60170804 0 4 BASE 3579 LD R0 R4,FDEXTEN fetch up file name extension 039A0 E40080F5 0 3580 ST R0 READEXT and likewise save 039A1 DC00366F 3581 CALL RPTERROR complain about order (like MacDonalds) 039A2 4144001A IMM 3582 PARV ECUDIRORD error code "UDIR entries out of order" 039A3 414080E5 3583 PARV UDIRBLOCK block number 039A4 404080E4 3584 PARVL UDIRTYPE FBI type 3585 * \ / 039A5 DC1013F9 @ 3586 CALL @VPREPOUT tell them the file name 039A6 410080F3 3587 PAR READNAME file name 039A7 410080F5 3588 PAR READEXT and extention 039A8 400039AB 3589 PARL FILELINE 039A9 610080D8 4 3590 LD R4 PNTRFDE need to point to FDE 039AA FE0E397B 3591 JMP RETERROR return to processing UDIR 3592 * --- 3593 039AB 20202020 3594 FILELINE TEXTZ " file \S1\.\R2\ " 3595 3596 ********************************************************************************** 3597 * * 3598 * Calls to subroutines to free the different disk * 3599 * structures indexed by structure code. * 3600 * * 3601 ********************************************************************************** 3602 000039B0 3603 MFTYPETAB LABEL 039B0 000039E5 3604 ADR MARKOTHER 0 - illegal 039B1 000039E8 3605 ADR MARKSAF 1 - SAF 039B2 00003AC8 3606 ADR MARKRAF 2 - RAF 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 84 F 0 Mark an Account 039B3 00003C06 3607 ADR MARKCODE 3 - CODE 039B4 00003C5E 3608 ADR MARKPATH 4 - PATH 039B5 000039E5 3609 ADR MARKOTHER 5 - DIR 039B6 000039E5 3610 ADR MARKOTHER 6 - NULL 039B7 000039E5 3611 ADR MARKOTHER 7 - TERM 039B8 00003C5E 3612 ADR MARKLOCK 8 - LOCK 039B9 000039E5 3613 ADR MARKOTHER 9 - TASK 039BA 000039E5 3614 ADR MARKOTHER 10 - CDR 039BB 000039E5 3615 ADR MARKOTHER 11 - LP 039BC 000039E5 3616 ADR MARKOTHER 12 - MT 039BD 000039E5 3617 ADR MARKOTHER 13 - CT 039BE 000039E5 3618 ADR MARKOTHER 14 - VOL 039BF 000039E5 3619 ADR MARKOTHER 15 - VT 00000010 ABS 3620 TYPELAST EQU DISPW MFTYPETAB 039C0 000039E5 3621 ADR MARKOTHER anything bigger than above 3622 3623 END of MARKFILE 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 85 F 0 Volume Conversion Routines 3626 3627 BLOCK 3628 ENTRY FBICONVERT do FBI conversion 3629 3630 ********************************************************************************** 3631 * * 3632 * This routine does the conversion of old FBI types to * 3633 * new types. * 3634 * Call: * 3635 * call fbiconvert * 3636 * parv diskaddress * 3637 * par block location * 3638 * parl fbilocation * 3639 * * 3640 ********************************************************************************** 3641 3642 BEGFRAME 00178801 6 BASE 3643 FBICONVDA BSS 1 disk address 00178802 6 BASE 3644 FBICONVBL BSS 1 block location 00178803 6 BASE 3645 FBICONVFL BSS 1 FBI location 3646 ENDFRAME 3647 039C1 DD1F8004 6 STAK 3648 FBICONVERT ENTR PUSH 039C2 C1578801 6 BASE 3649 STPV SP,FBICONVDA disk address 039C3 C1178802 6 BASE 3650 STP SP,FBICONVBL block location 039C4 C0178803 6 BASE 3651 STPL SP,FBICONVFL FBI location 039C5 5C003013 3652 CMZ CONVFLAG are we supposed to convert? 039C6 FE0239CF 3653 JEQ FBICONVXIT just exit if not 039C7 604080B2 1 3654 LD R1 NEWFBITYPE get the new FBI code 039C8 E4480080 1 0 ZBM 3655 ST R1 R0,FBITYPE put it in the block 039C9 61538000 5 6 REG 3656 LD R5 SP 039CA DC00349B 3657 CALL PAGEOUT write the change to the disk 039CB 41574801 5 BASE 3658 PARV R5,FBICONVDA disk address 039CC 41174C02 5 FPVR 3659 PAR @(R5,FBICONVBL) where the block is 039CD 40174C03 5 FPVR 3660 PARL @(R5,FBICONVFL) where the FBI is 039CE FE0E39D0 3661 JMP NOWRITEIT jump if block will not write 000039CF 3662 FBICONVXIT LABEL 039CF 5D1F8004 6 STAK 3663 LEAVE POP 3664 * --- 3665 3666 * The corrected block will not write to the disk. 000039D0 3667 NOWRITEIT LABEL 039D0 61538000 5 6 REG 3668 LD R5 SP 039D1 DC1013F9 @ 3669 CALL @VPREPOUT tell about the problem 039D2 41174801 5 BASE 3670 PAR R5,FBICONVDA disk address 039D3 400039D5 3671 PARL NOWRITEM 039D4 00000000 3672 HALT 0 die horribly 3673 * --- 3674 039D5 2043616E 3675 NOWRITEM TEXTZ " Cannot write conversion block. Block=\H1\." 3676 3677 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 86 F 0 Volume Conversion Routines 3679 3680 BLOCK 3681 ENTRY FDCONVERT 3682 3683 ********************************************************************************** 3684 * * 3685 * This routine provides for conversion to the file directory entry. * 3686 * * 3687 ********************************************************************************** 3688 3689 BEGFRAME 3690 ENDFRAME 3691 039E1 DD5F8001 6 STAK 3692 FDCONVERT ENTRNP PUSH 039E2 5C003013 3693 CMZ CONVFLAG doing a conversion? 039E3 FE0239E4 3694 JEQ CONVERTXIT jump if not 3695 * inc blockchang mark this block as changed 000039E4 3696 CONVERTXIT LABEL 039E4 5D1F8001 6 STAK 3697 LEAVE POP 3698 * --- 3699 3700 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 87 F 0 Mark a non-Disk File 3703 3704 BLOCK 3705 ENTRY MARKOTHER 3706 3707 ********************************************************************************** 3708 * * 3709 * Routine to mark a non-disk file. * 3710 * Call: * 3711 * CALLNP MARKOTHER * 3712 * ST R0 size of file in blocks * 3713 * * 3714 * Assume it gets R0-R5. * 3715 * * 3716 ********************************************************************************** 3717 039E5 DD524000 1 REG 3718 MARKOTHER ENTRNP R1 039E6 60040000 0 IMM 3719 LD R0 0 no blocks occupied by file 039E7 5D124000 1 REG 3720 LEAVE R1 3721 * --- 3722 3723 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 88 F 0 Mark a SAF 3726 3727 BLOCK 3728 ENTRY MARKSAF 3729 3730 ********************************************************************************** 3731 * * 3732 * Routine to mark a SAF. * 3733 * Call: * 3734 * CALLNP MARKSAF * 3735 * ST R0 size of the SAF in blocks * 3736 * undefined if in directory verify * 3737 * * 3738 * Gets R0 thru R5. * 3739 * * 3740 ********************************************************************************** 3741 3742 BEGFRAME 3743 ENDFRAME 3744 039E8 DD5F8001 6 STAK 3745 MARKSAF ENTRNP PUSH 039E9 DC403A18 3746 CALLNP INITIALIZE set up for SAF checking 3747 * 3748 * If we are doing a directory verify then we will go ahead and mark 3749 * this first data block since we have its address. But that is as 3750 * far as we can go since we don't want to read any data blocks. 3751 * 039EA 5C003016 3752 CMZ DIRVERIFY if we are in directory verify mode 039EB FE0C39FB 3753 JNE SAFCHKDUP then go check for a duplicate/illegal 3754 * \ / 039EC FE0E39F0 3755 JMP FIRSTREAD read in 1st block of the file 3756 * --- 3757 000039ED 3758 READNEXT LABEL 039ED 60048064 0 IMM 3759 LD R0 ADR DATAFBI get pointer to the FBI 039EE 61081180 4 0 ZBM 3760 LD R4 R0,FBIFLINK get the address of the next block 039EF FB0239F9 4 3761 JEQZ R4 SAFDONE jump if done with SAF 3762 * \ / 000039F0 3763 FIRSTREAD LABEL 039F0 DC403A27 3764 CALLNP NEXTSAF read in the next block 039F1 FE0E39F9 3765 JMP SAFDONE error in reading in 3766 * \ / 039F2 5C00809F 3767 CMZ ERRORFLG check for bad record 039F3 FE0C39ED 3768 JNE READNEXT error found, no record checking now 3769 * \ / 039F4 DC403A3C 3770 CALLNP SAFCHECKER check the file's records 039F5 FE0E39F7 3771 JMP ERRORCHK find out what kind of error occurred 3772 * \ / 039F6 FE0E39F9 3773 JMP SAFDONE return to caller 3774 * --- 3775 000039F7 3776 ERRORCHK LABEL 039F7 5C00809F 3777 CMZ ERRORFLG 039F8 FE0C39ED 3778 JNE READNEXT record mismatch, no more record checks 3779 * \ / 000039F9 3780 SAFDONE LABEL 039F9 600080A4 0 3781 LD R0 SAFSIZE return size in R0 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 89 F 0 Mark a SAF 000039FA 3782 SAFEXIT LABEL 039FA 5D1F8001 6 STAK 3783 LEAVE POP 3784 * --- 3785 * 3786 * Call MSGCHECK to see if the current block (CURBLK) is a duplicate 3787 * or an illegal disk address. 3788 * 000039FB 3789 SAFCHKDUP LABEL 039FB 60130000 0 4 REG 3790 LD R0 R4 put MS address into useable register 039FC 78003005 0 3791 AND R0 MSMASK make it a legit block number format 039FD E40080D6 0 3792 ST R0 CURBLK save block number for MSGCHECK 039FE DC4036AC 3793 CALLNP MARKBLK say the block is in use 039FF DC0036B5 3794 CALL MSGCHECK go see if our block is OK 03A00 4044000C IMM 3795 PARVL FBITSAF say it's a saf block 03A01 FE0E39FA 3796 JMP SAFEXIT bye 3797 * --- 3798 3799 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 90 F 0 Mark a SAF 3801 3802 BLOCK 3803 ENTRY GETABYTE 3804 3805 ********************************************************************************** 3806 * * 3807 * GETABYTE. * 3808 * This routine will get the next record byte. * 3809 * Call: * 3810 * CALLNP GETABYTE * 3811 * JMP ERROR read error * 3812 * * 3813 * R0 - on exit contains the byte requested * 3814 * Eats R0:R1, R3:R5 * 3815 * * 3816 ********************************************************************************** 3817 3818 BEGFRAME 3819 ENDFRAME 3820 03A02 DD5F8001 6 STAK 3821 GETABYTE ENTRNP PUSH 03A03 BC40809B 1 3822 INCL R1 CHARDISP advance and pick up the pointer 00003A04 3823 CHECKAGAIN LABEL 03A04 64441000 1 IMM 3824 CPR R1 CPP check for beyond end of file block 03A05 FE063A0A 3825 JGE CROSSBNDS crossed a page boundary 3826 * \ / 03A06 60323A09 0 1 @ 3827 LD R0 @CHARPTR(R1) get the byte 03A07 19C40001 7 IMM 3828 ADD R7 1 increment return address 03A08 5D1F8001 6 STAK 3829 LEAVE POP 3830 * --- 3831 03A09 020C6400 3832 CHARPTR PTR CHRDATAPT pointer to data block 3833 00003A0A 3834 CROSSBNDS LABEL 03A0A 38C08064 3 3835 LEA R3 DATAFBI address of the FBI buffer 03A0B 6108D180 4 3 ZBM 3836 LD R4 R3,FBIFLINK get the address of the next block to read in 03A0C FB023A15 4 3837 JEQZ R4 PROBLEM incorrect forward pointer or bad record length 03A0D 10441000 1 IMM 3838 SUB R1 CPP find displacement in next page 03A0E E440809B 1 3839 ST R1 CHARDISP save for now 03A0F E48080A5 2 3840 ST R2 SAVER2 save R2 03A10 DC403A27 3841 CALLNP NEXTSAF go get it 03A11 FE0E3A16 3842 JMP BADRTN bad read 3843 * \ / 03A12 6040809B 1 3844 LD R1 CHARDISP retrieve the block displacement 03A13 608080A5 2 3845 LD R2 SAVER2 restore R2 03A14 FE0E3A04 3846 JMP CHECKAGAIN make sure record is in this block 3847 * --- 3848 00003A15 3849 PROBLEM LABEL 03A15 DC403AA9 3850 CALLNP RECERROR call record error routine 00003A16 3851 BADRTN LABEL 03A16 EDC080A0 3852 STW FILEBADFLG mark this file as bad 03A17 5D1F8001 6 STAK 3853 LEAVE POP and return 3854 * --- 3855 3856 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 91 F 0 Mark a SAF 3858 3859 BLOCK 3860 ENTRY INITIALIZE 3861 3862 ********************************************************************************** 3863 * * 3864 * INITIALIZE. * 3865 * This routine sets up counters and flags used * 3866 * by SSCAN. * 3867 * Call: * 3868 * CALLNP INITIALIZE * 3869 * * 3870 * Eats R0:R2, R4 * 3871 * * 3872 ********************************************************************************** 3873 3874 BEGFRAME 3875 ENDFRAME 3876 03A18 DD5F8001 6 STAK 3877 INITIALIZE ENTRNP PUSH 03A19 D140809B 3878 STMW CHARDISP initialize the offset within the current block 03A1A EC00809F 3879 STZ ERRORFLG say no error yet 03A1B EC0080A1 3880 STZ HDRBLOCK say no current block 03A1C EC0080E3 3881 STZ PREVBLOCK say no previous block 03A1D EC0080A4 3882 STZ SAFSIZE zero size so far 03A1E EC0080A3 3883 STZ RECORDSIZE zero out the record link's length 03A1F D14080AA 3884 STMW RELBLOCK start with no previous blocks 03A20 600080D8 0 3885 LD R0 PNTRFDE => file dir entry 03A21 60560811 1 0 BASE 3886 LD R1 R0,FDEND get SAF block end pointer 03A22 60960810 2 0 BASE 3887 LD R2 R0,FDEPP get SAF byte end pointer 03A23 E440809D 1 3888 ST R1 ENDBLK save for now 03A24 E480809E 2 3889 ST R2 ENDBYTE 03A25 61081185 4 0 ZBM 3890 LD R4 R0,FDDA get the root address of the file 03A26 5D1F8001 6 STAK 3891 LEAVE POP 3892 * --- 3893 3894 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 92 F 0 Mark a SAF 3896 3897 BLOCK 3898 ENTRY NEXTSAF 3899 3900 ********************************************************************************** 3901 * * 3902 * NEXTSAF. * 3903 * This routine reads in the requested block. * 3904 * Call: * 3905 * LD R4 address of the block to be read in * 3906 * CALLNP NEXTSAF * 3907 * JMP ERROR error return * 3908 ** \ / * 3909 * * 3910 * Eats R0:R5 * 3911 * * 3912 ********************************************************************************** 3913 3914 BEGFRAME 3915 ENDFRAME 3916 03A27 DD5F8001 6 STAK 3917 NEXTSAF ENTRNP PUSH 03A28 60130000 0 4 REG 3918 LD R0 R4 put MS address into useable register 03A29 78003005 0 3919 AND R0 MSMASK make it a legit block number format 03A2A E40080D6 0 3920 ST R0 CURBLK save block number for MSGCHECK 03A2B D00080AA 3921 INC RELBLOCK next block should be one greater 03A2C 38408064 1 3922 LEA R1 DATAFBI address of FBI buffer 03A2D 608080A1 2 3923 LD R2 HDRBLOCK last block's DA (zero if 1st time) 03A2E E48080E3 2 3924 ST R2 PREVBLOCK save as last block loaded 03A2F DC4036AC 3925 CALLNP MARKBLK say the block is in use 03A30 DC003376 3926 CALL PAGEIN get the file page in 03A31 4144000C IMM 3927 PARV FBITSAF FBI type 03A32 41530000 4 REG 3928 PARV R4 disk address 03A33 41006400 3929 PAR DATAPLACE where the block should go 03A34 40008064 3930 PARL DATAFBI where to put FBI 03A35 FE0E3A3A 3931 JMP ERRORRTN where to go if trouble 03A36 D00080A4 3932 INC SAFSIZE one more block in the file 3933 * \ / 3934 03A37 E50080A1 4 3935 ST R4 HDRBLOCK new block in 03A38 19C40001 7 IMM 3936 ADD R7 1 normal exit 03A39 5D1F8001 6 STAK 3937 LEAVE POP return to caller 3938 * --- 00003A3A 3939 ERRORRTN LABEL 03A3A EDC080A0 3940 STW FILEBADFLG mark this file as bad 03A3B 5D1F8001 6 STAK 3941 LEAVE POP and return 3942 * --- 3943 3944 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 93 F 0 Mark a SAF 3946 3947 BLOCK 3948 ENTRY SAFCHECKER 3949 3950 ********************************************************************************** 3951 * * 3952 * SAFCHECKER. * 3953 * This routine will follow a SAF structure on a disk for * 3954 * incorrect forward or backward links. This routine will * 3955 * output a message if a bad record link is found. As the * 3956 * routine finishes it checks the SAF end block and end record * 3957 * pointers in the file's FDE to make sure that they match with * 3958 * what has been found. In case of an error an appropriate * 3959 * message is printed out and no record checking is done for the * 3960 * remainder of the file. * 3961 * Call: * 3962 * CALLNP SAFCHECKER * 3963 * JMP ERROR Error return (bad read or bad record) * 3964 ** \ / * 3965 * * 3966 * Eats: R0:R4 * 3967 * * 3968 ********************************************************************************** 3969 3970 BEGFRAME 3971 ENDFRAME 3972 03A3C DD5F8001 6 STAK 3973 SAFCHECKER ENTRNP PUSH 00003A3D 3974 AGAIN LABEL 03A3D 60840000 2 IMM 3975 LD R2 0 clear out R2 03A3E EC0080A2 3976 STZ HDRDISP clear out the character displacement also 03A3F DC403A02 3977 CALLNP GETABYTE go get a byte for the record 03A40 FE0E3A6B 3978 JMP ERROREXIT bad read 3979 * \ / 03A41 E40A9080 0 2 CBM 3980 ST R0 R2/CH1 put it in the appropriate place 03A42 64820120 2 IMM 3981 CPR R2 EOD 03A43 FE023A61 3982 JEQ DONE found the end of the file 3983 * \ / 03A44 6040809B 1 3984 LD R1 CHARDISP save the current offset 03A45 E44080A2 1 3985 ST R1 HDRDISP 03A46 DC403A02 3986 CALLNP GETABYTE go get a byte for the record 03A47 FE0E3A6B 3987 JMP ERROREXIT bad read 03A48 E40AA080 0 2 CBM 3988 ST R0 R2/CH2 3989 * \ / 03A49 DC403A02 3990 CALLNP GETABYTE go get a byte for the record 03A4A FE0E3A6B 3991 JMP ERROREXIT bad read 3992 * \ / 03A4B E40AB080 0 2 CBM 3993 ST R0 R2/CH3 03A4C 64820100 2 IMM 3994 CPR R2 FILEMARK is this a file mark? 03A4D FE023A3D 3995 JEQ AGAIN yes, therefore get next record 3996 * \ / 03A4E F6903A5F 2 3997 JBT R2/BADFILETYP ERROR bad record header 03A4F F6983A5F 2 3998 JBT R2/UNUSEDSAF ERROR bad record header 03A50 E48080A3 2 3999 ST R2 RECORDSIZE save the record's length 03A51 78803006 2 4000 AND R2 MASK mask off unwanted bits 03A52 9880809B 2 4001 ADDM R2 CHARDISP point to next record header 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 94 F 0 Mark a SAF 03A53 60840000 2 IMM 4002 LD R2 0 clear out R2 03A54 DC403A02 4003 CALLNP GETABYTE go get a byte for the record 03A55 FE0E3A6B 4004 JMP ERROREXIT bad read 4005 * \ / 03A56 E40A9080 0 2 CBM 4006 ST R0 R2/CH1 put it in the appropriate place 03A57 DC403A02 4007 CALLNP GETABYTE go get a byte for the record 03A58 FE0E3A6B 4008 JMP ERROREXIT bad read 4009 * \ / 03A59 E40AA080 0 2 CBM 4010 ST R0 R2/CH2 03A5A DC403A02 4011 CALLNP GETABYTE go get a byte for the record 03A5B FE0E3A6B 4012 JMP ERROREXIT bad read 4013 * \ / 03A5C E40AB080 0 2 CBM 4014 ST R0 R2/CH3 03A5D 648080A3 2 4015 CPR R2 RECORDSIZE do we have a match? 03A5E FE023A3D 4016 JEQ AGAIN yes, therefore continue on 4017 * \ / 00003A5F 4018 ERROR LABEL 03A5F DC403AA9 4019 CALLNP RECERROR take care of the error 03A60 FE0E3A6B 4020 JMP ERROREXIT found a error, stop checking records 4021 * --- 4022 4023 * Final checking of the SAF end pointers 4024 00003A61 4025 DONE LABEL 03A61 6000809B 0 4026 LD R0 CHARDISP get the byte offset pointer 03A62 604080AA 1 4027 LD R1 RELBLOCK get the relative block number 03A63 E44A0140 1 0 CBM 4028 ST R1 R0/BITS 0:19 merge the two together 03A64 6140809D 5 4029 LD R5 ENDBLK get the SAF block end pointer 03A65 FB423A6C 5 4030 JEQZ R5 BADENDPTR if pointer zero, set it correctly 4031 * \ / 03A66 654080A1 5 4032 CPR R5 HDRBLOCK do the two match? 03A67 FE0C3A6C 4033 JNE BADENDPTR SAF block end pointer is bad 4034 * \ / 03A68 6400809E 0 4035 CPR R0 ENDBYTE do the two match? 03A69 FE0C3A6C 4036 JNE BADENDPTR no, therefore bad byte offset pointer 4037 * \ / 03A6A 19C40001 7 IMM 4038 EXIT ADD R7 1 increment return address 03A6B 5D1F8001 6 STAK 4039 ERROREXIT LEAVE POP return to MARKSAF 4040 * --- 4041 4042 * output that the SAF's end of block pointer is not set 4043 00003A6C 4044 BADENDPTR LABEL 03A6C 61003011 4 4045 LD R4 CHANGEFLAG get the what to do flag 03A6D FB023A74 4 4046 JEQZ R4 JUSTPRINT don't change a thing, but tattle 03A6E 604080A1 1 4047 LD R1 HDRBLOCK get the correct SAF end block pointer 03A6F 608080D8 2 4048 LD R2 PNTRFDE => file dir entry 03A70 E4568811 1 2 BASE 4049 ST R1 R2,FDEND fix the SAF end block pointer 03A71 E4168810 0 2 BASE 4050 ST R0 R2,FDEPP fix the SAF end byte pointer 03A72 EDC080DE 4051 STW BLOCKCHANG indicate that the UDIRx is changed 03A73 FB2C3A6A 4 4052 JEQMW R4 EXIT do not output anything 4053 * \ / 4054 00003A74 4055 JUSTPRINT LABEL 03A74 FB423A7E 5 4056 JEQZ R5 ZEROENDPTR jump to give zero end pointer message 03A75 DC1013F9 @ 4057 CALL @VPREPOUT 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 95 F 0 Mark a SAF 03A76 410080EE 4058 PAR READACCT account name 03A77 410080F0 4059 PAR READPROJ division/project 03A78 410080F3 4060 PAR READNAME file name 03A79 410080F5 4061 PAR READEXT file extension 03A7A 4100809D 4062 PAR ENDBLK assumed last block 03A7B 4100809E 4063 PAR ENDBYTE assumed EPP 03A7C 40003A98 4064 PARL SAFBADMES the message template 03A7D FE0E3A6A 4065 JMP EXIT return to MARKSAF's main control 4066 * --- 4067 00003A7E 4068 ZEROENDPTR LABEL 03A7E 5C003012 4069 CMZ WARNFLAG 03A7F FE0C3A6A 4070 JNE EXIT no warnings are to be output 4071 * \ / 03A80 DC1013F9 @ 4072 CALL @VPREPOUT 03A81 410080EE 4073 PAR READACCT account name 03A82 410080F0 4074 PAR READPROJ division/project 03A83 410080F3 4075 PAR READNAME file name 03A84 410080F5 4076 PAR READEXT file extension 03A85 40003A87 4077 PARL SAFZEROMES the message template 03A86 FE0E3A6A 4078 JMP EXIT return to MARKSAF's main control 4079 * --- 4080 00003A87 4081 SAFZEROMES LABEL 03A87 20576172 4082 TEXTZ " Warning SAF File: \S1\.\R2\:\S3\.\R4\. Had Zero SAF End Pointers" 00003A98 4083 SAFBADMES LABEL 03A98 20534146 4084 TEXTZ " SAF File: \S1\.\R2\:\S3\.\R4\ Bad pointers Blk = \H5\ Epp = \H6\." 4085 4086 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 96 F 0 Mark a SAF 4088 4089 BLOCK 4090 ENTRY RECERROR 4091 4092 ********************************************************************************** 4093 * * 4094 * RECERROR. * 4095 * A record mismatch occurred, output the appropriate message. * 4096 * Call: * 4097 * CALLNP RECERROR * 4098 * * 4099 * Eats R0:R3 * 4100 * * 4101 ********************************************************************************** 4102 4103 BEGFRAME 4104 ENDFRAME 4105 4106 03AA9 DD5F8001 6 STAK 4107 RECERROR ENTRNP PUSH 4108 * \ / 03AAA D000809F 4109 INC ERRORFLG set the error flag 03AAB EDC080A0 4110 STW FILEBADFLG mark this file as bad 03AAC 608080A2 2 4111 LD R2 HDRDISP get the current byte position 03AAD 600ABC20 0 2 CBM 4112 LD R0 R2/BITS 30:31 get the character offset 03AAE E400809C 0 4113 ST R0 CHAROFFST save for now 03AAF 600A9160 0 2 CBM 4114 LD R0 R2/BITS 8:29 get the word offset 03AB0 E40080A6 0 4115 ST R0 WORDOFFST save for now 4116 4117 * output the record mismatch message 4118 03AB1 DC00366F 4119 CALL RPTERROR 03AB2 4144001D IMM 4120 PARV ECRECBAD 03AB3 414080A1 4121 PARV HDRBLOCK 03AB4 4044000C IMM 4122 PARVL FBITSAF 4123 4124 * output the header message 4125 03AB5 DC1013F9 @ 4126 CALL @VPREPOUT 03AB6 410080A6 4127 PAR WORDOFFST 03AB7 4100809C 4128 PAR CHAROFFST 03AB8 40003ABA 4129 PARL HEADERMES 03AB9 5D1F8001 6 STAK 4130 LEAVE POP return 4131 * --- 4132 03ABA 20526563 4133 HEADERMES TEXTZ " Record Header at word \H1,4\ character offset \H2,4\ " 4134 4135 END of MARKSAF 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 97 F 0 Mark a RAF 4138 4139 BLOCK 4140 ENTRY MARKRAF mark a RAF 4141 4142 ********************************************************************************** 4143 * * 4144 * Routine to mark a RAF. * 4145 * Call: * 4146 * CALLNP MARKRAF * 4147 * ST R0 size of the RAF in blocks * 4148 * undefined if in directory verify * 4149 * * 4150 * Gets R0 thru R5. * 4151 * * 4152 ********************************************************************************** 4153 4154 BEGFRAME 00178801 6 BASE 4155 MAJINDEX BSS 1 index into major access block 00178802 6 BASE 4156 RAFSIZE BSS 1 size of the RAF in blocks 4157 ENDFRAME 4158 03AC8 DD5F8003 6 STAK 4159 MARKRAF ENTRNP PUSH 03AC9 EC178802 6 BASE 4160 STZ SP,RAFSIZE zero so far 03ACA 60C080D8 3 4161 LD R3 PNTRFDE => File dir entry 03ACB 6108D185 4 3 ZBM 4162 LD R4 R3,FDDA get the root of the file 03ACC EC0080AA 4163 STZ RELBLOCK no block number for minor or major RAFs 4164 03ACD 6048FC20 1 3 ZBM 4165 LD R1 R3,FDRAFTYPE pick up the RAF type from the FDE 03ACE 5CA23ACF 1 4166 LDPC RAFJTAB(R1) act accordingly 4167 * --- 4168 00003ACF 4169 RAFJTAB LABEL 03ACF 00003AD3 4170 VFD ADR CHEKTYPE empty RAF 03AD0 00003AEC 4171 VFD ADR TINYRAF tiny RAF 03AD1 00003ADB 4172 VFD ADR ITSSMALL small RAF 03AD2 00003AF8 4173 VFD ADR LARGERAF large RAF 4174 00003AD3 4175 CHEKTYPE LABEL 03AD3 FB023AE8 4 4176 JEQZ R4 OKEXIT if actually empty, then done 4177 * The RAF type is invalid. Decide what is the correct type 03AD4 60440002 1 IMM 4178 LD R1 RAFTSMALL guess that it is a small RAF 03AD5 D188E810 3 ZBM 4179 CLRT R3,FDLRAF was our guess correct? 03AD6 FE023AD8 4180 JEQ GOODGUESS 03AD7 60440003 1 IMM 4181 LD R1 RAFTLARGE it must be a large RAF 00003AD8 4182 GOODGUESS LABEL 03AD8 E448FC20 1 3 ZBM 4183 ST R1 R3,FDRAFTYPE set this in the FDE 03AD9 D00080DE 4184 INC BLOCKCHANG mark the directory as changed 03ADA 5CA23ACF 1 4185 LDPC RAFJTAB(R1) try the jump table again 4186 * --- 4187 00003ADB 4188 ITSSMALL LABEL 03ADB 60130000 0 4 REG 4189 LD R0 R4 03ADC DC4036AC 4190 CALLNP MARKBLK say the block is in use 03ADD DC003376 4191 CALL PAGEIN get the small raf index 03ADE 4144000E IMM 4192 PARV FBITSRAF FBI type 03ADF 41530000 4 REG 4193 PARV R4 block address 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 98 F 0 Mark a RAF 03AE0 41006800 4194 PAR MINPLACE where to put it 03AE1 4000806F 4195 PARL MINORFBI and its FBI 03AE2 FE0E3AEA 4196 JMP BAILOUT if problems 03AE3 D0178802 6 BASE 4197 INC SP,RAFSIZE account for the index block 4198 * \ / 4199 03AE4 DC003B18 4200 CALL MARKMINOR mark all those pointed to 03AE5 4144000F IMM 4201 PARV FBITRAFD FBI type 03AE6 40440400 IMM 4202 PARVL WPP number of words to scan 03AE7 98178802 0 6 BASE 4203 ADDM R0 SP,RAFSIZE add in the blocks 4204 * \ / 4205 00003AE8 4206 OKEXIT LABEL 03AE8 60178802 0 6 BASE 4207 LD R0 SP,RAFSIZE return size in R0 03AE9 5D1F8003 6 STAK 4208 LEAVE POP 4209 * --- 00003AEA 4210 BAILOUT LABEL 03AEA EDC080A0 4211 STW FILEBADFLG mark this file as bad 03AEB FE0E3AE8 4212 JMP OKEXIT and return 4213 * --- 4214 4215 ********************************************************************************** 4216 * * 4217 * Tiny RAF -- just mark the single data block. * 4218 * * 4219 ********************************************************************************** 4220 00003AEC 4221 TINYRAF LABEL 03AEC FB023AE8 4 4222 JEQZ R4 OKEXIT jump if nothing to mark 03AED 60130000 0 4 REG 4223 LD R0 R4 03AEE DC4036AC 4224 CALLNP MARKBLK mark the block as in use 03AEF E5006800 4 4225 ST R4 MINPLACE(0) fake a minor access block so 4226 * relative block check will work 03AF0 DC003376 4227 CALL PAGEIN read the page in 03AF1 4144000F IMM 4228 PARV FBITRAFD fbi type 03AF2 41530000 4 REG 4229 PARV R4 block address 03AF3 41006400 4230 PAR DATAPLACE place for the block 03AF4 40008064 4231 PARL DATAFBI and the FBI 03AF5 FE0E3AEA 4232 JMP BAILOUT 03AF6 D0178802 6 BASE 4233 INC SP,RAFSIZE account for the block 03AF7 FE0E3AE8 4234 JMP OKEXIT all done 4235 * --- 4236 4237 ********************************************************************************** 4238 * * 4239 * Large RAF -- mark everything. * 4240 * * 4241 ********************************************************************************** 4242 00003AF8 4243 LARGERAF LABEL 03AF8 60130000 0 4 REG 4244 LD R0 R4 disk address 03AF9 DC4036AC 4245 CALLNP MARKBLK mark the block 03AFA DC003376 4246 CALL PAGEIN read in the major access block 03AFB 4144000D IMM 4247 PARV FBITLRAF FBI type 03AFC 41530000 4 REG 4248 PARV R4 disk address 03AFD 41006C00 4249 PAR MAJPLACE where we want block 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 99 F 0 Mark a RAF 03AFE 4000807A 4250 PARL MAJORFBI and FBI 03AFF FE0E3AEA 4251 JMP BAILOUT if problems 03B00 D0178802 6 BASE 4252 INC SP,RAFSIZE account for the major index 4253 * \ / 4254 03B01 60C403FF 3 IMM 4255 LD R3 WPP-1 number of locations to search minus one 00003B02 4256 NEXTMAJB LABEL 03B02 61266C00 4 3 4257 LD R4 MAJPLACE(R3) is there a block here? 03B03 FB023B14 4 4258 JEQZ R4 MAJHOLE jump if not and try next 03B04 E4D78801 3 6 BASE 4259 ST R3 SP,MAJINDEX save index 03B05 E4C080AA 3 4260 ST R3 RELBLOCK relative block number for minor 03B06 60130000 0 4 REG 4261 LD R0 R4 disk address 03B07 DC4036AC 4262 CALLNP MARKBLK say the minor block is in use 03B08 DC003376 4263 CALL PAGEIN read the minor access block in 03B09 4144000E IMM 4264 PARV FBITSRAF FBI type 03B0A 41530000 4 REG 4265 PARV R4 disk address 03B0B 41006800 4266 PAR MINPLACE where we want it 03B0C 4000806F 4267 PARL MINORFBI and its FBI 03B0D FE0E3B16 4268 JMP BADMIN if problems 03B0E D0178802 6 BASE 4269 INC SP,RAFSIZE account for the minor index block 4270 * \ / 4271 03B0F DC003B18 4272 CALL MARKMINOR mark those pointed to 03B10 4144000F IMM 4273 PARV FBITRAFD FBI type 03B11 40440400 IMM 4274 PARVL WPP number of words to scan 03B12 98178802 0 6 BASE 4275 ADDM R0 SP,RAFSIZE add in the blocks therein 00003B13 4276 RESMINPTR LABEL 03B13 60D78801 3 6 BASE 4277 LD R3 SP,MAJINDEX where we are in major block 4278 * \ / 4279 00003B14 4280 MAJHOLE LABEL 03B14 FAE63B02 3 4281 JDR R3 NEXTMAJB count and jump if more 03B15 FE0E3AE8 4282 JMP OKEXIT go to good exit 4283 * --- 4284 00003B16 4285 BADMIN LABEL 03B16 EDC080A0 4286 STW FILEBADFLG mark this file as bad 03B17 FE0E3B13 4287 JMP RESMINPTR 4288 * --- 4289 4290 END of MARKRAF 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 100 F 0 Mark a RAF 4292 4293 BLOCK 4294 ENTRY MARKMINOR 4295 4296 ********************************************************************************** 4297 * * 4298 * Routine that marks the pages pointed to by a minor * 4299 * access block. * 4300 * Call: * 4301 * CALL MARKMINOR * 4302 * PARV FBI type of data pages * 4303 * PARVL number of words to scan in the block * 4304 * ST R0 number of blocks marked * 4305 * undefined if in directory verify * 4306 * * 4307 * Gets R0 thru R5. * 4308 * * 4309 ********************************************************************************** 4310 4311 BEGFRAME 00178801 6 BASE 4312 TYPEFBI BSS 1 type of data page FBIs 00178802 6 BASE 4313 MINORSIZE BSS 1 accumulation of number marked 4314 ENDFRAME 4315 03B18 DD1F8003 6 STAK 4316 MARKMINOR ENTR PUSH 03B19 C1578801 6 BASE 4317 STPV SP,TYPEFBI FBI type 03B1A C0524000 1 REG 4318 STPVL R1 number of words to scan in block 4319 * \ / 4320 4321 ********************************************************************************** 4322 * * 4323 * If we are in directory verify mode then we do not want * 4324 * to read the data blocks. We just want to mark them as being * 4325 * in use. If we are in rebuild then we want to read them, but * 4326 * first they will be sorted into an optimal disk read order. * 4327 * * 4328 ********************************************************************************** 4329 4330 * \ / 03B1B 5C003016 4331 CMZ DIRVERIFY if directory verify mode 03B1C FE0C3B44 4332 JNE MARKDATA then just mark the data blocks 4333 * \ / 03B1D 5C00301A 4334 CMZ SORTMINOR should we do the sort? 03B1E FE0C3B24 4335 JNE DOSORT no way jose! 03B1F 70D24000 3 1 REG 4336 LDN R3 R1 setup to do the whole block 03B20 39006800 4 4337 LEA R4 MINPLACE block address 03B21 391D0800 4 41 BASE 4338 LEA R4 R4,0(R1) end of the block 03B22 EC178802 6 BASE 4339 STZ SP,MINORSIZE set number to zero 03B23 FE0E3B33 4340 JMP NEXTMINE start the copy 4341 * --- 4342 00003B24 4343 DOSORT LABEL 03B24 DC403BBB 4344 CALLNP MOVESTUFF move data into working area and 03B24 DC403BBB 4345 get rid of zero entries 03B25 DC003B4F 4346 CALL SORT sort the minor access block 03B26 40524000 1 REG 4347 PARVL R1 number of non-zero elements to sort 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 101 F 0 Mark a RAF 03B27 E4578802 1 6 BASE 4348 ST R1 SP,MINORSIZE save the size of the block 03B28 600480B4 0 IMM 4349 LD R0 ADR RDISKCB address of DCB element 03B29 5C080816 0 ZBM 4350 CMZ R0,DCBSCSI is this a SCSI disk drive? 03B2A FE0C3B2F 4351 JNE MMSCSI jump if it is 03B2B DC403BC6 4352 CALLNP DIVSECTOR get the sector of each one 03B2C 60578802 1 6 BASE 4353 LD R1 SP,MINORSIZE get the size of the block again 03B2D DC403BD3 4354 CALLNP ORDERCYL order the cylinders 03B2E 60578802 1 6 BASE 4355 LD R1 SP,MINORSIZE one more time 00003B2F 4356 MMSCSI LABEL 03B2F 391B0C00 4 41 @R 4357 LEA R4 @R4(R1) R4 <- end of data 03B30 70D24000 3 1 REG 4358 LDN R3 R1 use R3 for a loop counter 03B31 FAC63B40 3 4359 JGEZ R3 EMPTYMIN jump if empty 03B32 EC178802 6 BASE 4360 STZ SP,MINORSIZE initialize our counter 4361 * \ / 00003B33 4362 NEXTMINE LABEL 03B33 605D1800 1 43 BASE 4363 LD R1 R4,0(R3) get the address of the block 03B34 FA423B3F 1 4364 JEQZ R1 NEXTEND skip holes 03B35 60124000 0 1 REG 4365 LD R0 R1 disk address 03B36 DC4036AC 4366 CALLNP MARKBLK mark data block as in use 03B37 60978801 2 6 BASE 4367 LD R2 SP,TYPEFBI FBI type 03B38 DC003376 4368 CALL PAGEIN read in the data block to check type 03B39 41528000 2 REG 4369 PARV R2 FBI type 03B3A 41524000 1 REG 4370 PARV R1 disk address 03B3B 41006400 4371 PAR DATAPLACE where to put it 03B3C 40008064 4372 PARL DATAFBI and its FBI 03B3D FE0E3B42 4373 JMP DATABAD if trouble 03B3E D0178802 6 BASE 4374 INC SP,MINORSIZE one more block seen 4375 * \ / 00003B3F 4376 NEXTEND LABEL 03B3F FAE03B33 3 4377 IRJ R3 NEXTMINE restore the index 4378 * \ / 00003B40 4379 EMPTYMIN LABEL 03B40 60178802 0 6 BASE 4380 LD R0 SP,MINORSIZE return number marked in R0 00003B41 4381 MINOREXIT LABEL 03B41 5D1F8003 6 STAK 4382 LEAVE POP 4383 * --- 4384 00003B42 4385 DATABAD LABEL 03B42 EDC080A0 4386 STW FILEBADFLG mark this file as bad 03B43 FE0E3B3F 4387 JMP NEXTEND 4388 * --- 4389 4390 * This routine will mark up to R1 blocks pointed to by the 4391 * minor index block located in MINPLACE. Holes are skipped. 4392 00003B44 4393 MARKDATA LABEL 03B44 E4575001 1 5 REG 4394 ST R1 R5+1 bias number of blocks down into an index 4395 4396 * This loop indexes through the minor block from the 4397 * last entry down to the first entry, skipping over 4398 * holes (0 entry). R5 is the loop counter. 4399 4400 * \ / 00003B45 4401 NEXTBLOCK LABEL 03B45 602A6800 0 5 4402 LD R0 MINPLACE(R5) get a disk block number 03B46 FA023B4D 0 4403 JEQZ R0 AHOLE if zero then its a hole, goto next one 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 102 F 0 Mark a RAF 4404 * \ / 03B47 78003005 0 4405 AND R0 MSMASK make it a legit block number format 03B48 E40080D6 0 4406 ST R0 CURBLK make it the current block 03B49 DC4036AC 4407 CALLNP MARKBLK mark it as in use 03B4A 60178801 0 6 BASE 4408 LD R0 SP,TYPEFBI get type (either code or raf) 03B4B DC0036B5 4409 CALL MSGCHECK check for duplicate/illegal block 03B4C 40520000 0 REG 4410 PARVL R0 pass it the FBI type 00003B4D 4411 AHOLE LABEL 03B4D FB663B45 5 4412 JDR R5 NEXTBLOCK continue until we tried zeroth entry 4413 * \ / 03B4E FE0E3B41 4414 JMP MINOREXIT done so leave 4415 * --- 4416 4417 END of MARKMINOR 4418 4419 INPUT OFFLINE.OPSYS:REBSORT 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 103 (REBSORT) F 10 Sort Minor Access Block 3 4 ********************************************************************************** 5 * * 6 * SORT sorts the elements found in SORTPLACE into * 7 * ascending order using either a merge or bubble sort. * 8 * * 9 * Call: * 10 * CALL SORT * 11 * PARVL * 12 * * 13 * Eats R0:R4 * 14 * Leaves R1 = number of non-zero elements, R4 -> sorted data * 15 * R3 -> free page * 16 * * 17 ********************************************************************************** 18 19 BLOCK 20 21 ENTRY SORT 22 23 BEGFRAME 00178801 6 BASE 24 NUMELEM BSS 1 number of elements 25 ENDFRAME 26 0000000F ABS 27 MINELEMS EQU 15 minimum number to merge sort 28 03B4F DD1F8002 6 STAK 29 SORT ENTR PUSH 03B50 C0578801 6 BASE 30 STPVL SP,NUMELEM save the number of good data words 03B51 60578801 1 6 BASE 31 LD R1 SP,NUMELEM 03B52 6444000F 1 IMM 32 CPR R1 MINELEMS see if enough elements 03B53 FE083B57 33 JLT BUBSORT if not then bubble sort them 34 * \ / 35 03B54 DC403B5D 36 CALLNP MSORT merge sort the suckers 37 * \ / 38 00003B55 39 SORTEND LABEL 03B55 60578801 1 6 BASE 40 LD R1 SP,NUMELEM get the number of elements 03B56 5D1F8002 6 STAK 41 LEAVE POP 42 * --- 43 00003B57 44 BUBSORT LABEL 03B57 64440001 1 IMM 45 CPR R1 1 see if there are any elements to sort 03B58 FE0A3B5A 46 JLE BUBSEND if not then don't bother 47 * \ / 48 03B59 DC403BAB 49 CALLNP BSORT bubble sort 50 * \ / 51 00003B5A 52 BUBSEND LABEL 03B5A 61047800 4 IMM 53 LD R4 ADR SORTPLACE R4 -> sorted stuff 03B5B 60C47C00 3 IMM 54 LD R3 ADR MERGEPLACE R3 -> free page 03B5C FE0E3B55 55 JMP SORTEND 56 * --- 57 58 END of SORT 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 104 (REBSORT) F 10 Sort Minor Access Block 60 61 ********************************************************************************** 62 * * 63 * MSORT sorts the contents of SORTPLACE using a mergesort. * 64 * It just uses MSBLKFIELD as the sorting key for the words in * 65 * SORTPLACE. * 66 * Call: * 67 * LD R1 * 68 * CALLNP MSORT * 69 * * 70 * Eats R0:R4 * 71 * Leaves R4 -> sorted block * 72 * R3 -> free page * 73 * * 74 ********************************************************************************** 75 76 BLOCK 77 78 ENTRY MSORT 79 80 BEGFRAME 00178801 6 BASE 81 PASSSIZE BSS 1 size of blocks in the current pass 00178802 6 BASE 82 HICOUNT BSS 1 counter for words left in high block 00178803 6 BASE 83 LOCOUNT BSS 1 counter for words left in low block 00178804 6 BASE 84 HIBLOCK BSS 1 pointer to the high block 00178805 6 BASE 85 BLOCKEND BSS 1 address of end of current block 00178806 6 BASE 86 CURBLOCK BSS 1 address of current block 00178807 6 BASE 87 DESTBLOCK BSS 1 address of destination block 00178808 6 BASE 88 NUMELEM BSS 1 number of elements 89 ENDFRAME 90 03B5D DD5F8009 6 STAK 91 MSORT ENTRNP PUSH 03B5E E4578808 1 6 BASE 92 ST R1 SP,NUMELEM save the number of elements 03B5F 60C40001 3 IMM 93 LD R3 1 size of first pass 03B60 E4D78801 3 6 BASE 94 ST R3 SP,PASSSIZE 03B61 E4D78803 3 6 BASE 95 ST R3 SP,LOCOUNT set the count for the low block 03B62 E4D78802 3 6 BASE 96 ST R3 SP,HICOUNT set the count for the high block 97 03B63 61047C00 4 IMM 98 LD R4 ADR MERGEPLACE R4 -> destination block 03B64 60847800 2 IMM 99 LD R2 ADR SORTPLACE pointer to first of data 100 * \ / 101 102 * R2 -> source, R4 -> destination, R1 = number of elements, R3 = PASSSIZE 00003B65 103 PASSLOOP LABEL 03B65 E4978806 2 6 BASE 104 ST R2 SP,CURBLOCK call our current block 03B66 E5178807 4 6 BASE 105 ST R4 SP,DESTBLOCK save our destination block address 03B67 18528000 1 2 REG 106 ADD R1 R2 create address of end of block 03B68 E4578805 1 6 BASE 107 ST R1 SP,BLOCKEND and save it 108 * \ / 109 110 * R2 -> low block, R3 = PASSSIZE = size of block = LOCOUNT, 00003B69 111 OUTLOOP LABEL 03B69 18D28000 3 2 REG 112 ADD R3 R2 set pointer to high block 03B6A 64D78805 3 6 BASE 113 CPR R3 SP,BLOCKEND see if there is any data this far out 03B6B FE063B97 114 JGE PASSEND if beyond end then quit 03B6C E4D78804 3 6 BASE 115 ST R3 SP,HIBLOCK save pointer to high block 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 105 (REBSORT) F 10 Sort Minor Access Block 116 03B6D 30D78805 3 6 BASE 117 RSB R3 SP,BLOCKEND get number of words left in block 03B6E 50D78801 3 6 BASE 118 MIN R3 SP,PASSSIZE keep if smaller than size of block 03B6F E4D78802 3 6 BASE 119 ST R3 SP,HICOUNT number of words in high block 03B70 60D78804 3 6 BASE 120 LD R3 SP,HIBLOCK restore high block pointer 121 03B71 60089180 0 2 ZBM 122 LD R0 R2,0/MSBLKFIELD get first disk address number 03B72 6048D180 1 3 ZBM 123 LD R1 R3,0/MSBLKFIELD from both blocks 124 * \ / 125 126 ********************************************************************************** 127 * * 128 * This is the central loop of the merge sort. It uses R2 and R3 * 129 * to point to the current position within the blocks being merged, and * 130 * R0 and R1 contain the current words pointed at by these. When all of * 131 * one block is merged the remaining elements are moved using a CMOVE. * 132 * * 133 ********************************************************************************** 134 * \ / 135 00003B73 136 LOOP LABEL 03B73 64124000 0 1 REG 137 CPR R0 R1 see which is less 03B74 FE043B7C 138 JGT PUTINR1 and put the lessor in the buffer 139 * \ / 140 03B75 E4170800 0 4 BASE 141 ST R0 R4,0 put R0 in the buffer 03B76 19040001 4 IMM 142 ADD R4 1 move up the buffer pointer 03B77 D0578803 6 BASE 143 DEC SP,LOCOUNT one less in the lower block 03B78 FE023B83 144 JEQ LODONE done with the lower block? 03B79 18840001 2 IMM 145 ADD R2 1 move up within the block 03B7A 60089180 0 2 ZBM 146 LD R0 R2,0/MSBLKFIELD get the next word 03B7B FE0E3B73 147 JMP LOOP 148 * --- 149 00003B7C 150 PUTINR1 LABEL 03B7C E4570800 1 4 BASE 151 ST R1 R4,0 put R1 in the buffer 03B7D 19040001 4 IMM 152 ADD R4 1 move up the buffer pointer 03B7E D0578802 6 BASE 153 DEC SP,HICOUNT one less word in the high block 03B7F FE023B8A 154 JEQ HIDONE done with lower block if zero 03B80 18C40001 3 IMM 155 ADD R3 1 move up within high block 03B81 6048D180 1 3 ZBM 156 LD R1 R3,0/MSBLKFIELD get the next word 03B82 FE0E3B73 157 JMP LOOP and go around again 158 * --- 159 00003B83 160 LODONE LABEL 03B83 6012C000 0 3 REG 161 LD R0 R3 R0 -> remaining words 03B84 60578802 1 6 BASE 162 LD R1 SP,HICOUNT number of words remaining 03B85 1C440004 1 IMM 163 MUL R1 CPW convert to characters 03B86 60930000 2 4 REG 164 LD R2 R4 R2 -> destination 03B87 FE400000 165 CMOVE finish moving them 03B88 19178802 4 6 BASE 166 ADD R4 SP,HICOUNT move up the destination pointer 03B89 FE0E3B90 167 JMP LOOPEND through with inner loop 168 * --- 169 00003B8A 170 HIDONE LABEL 03B8A 60128000 0 2 REG 171 LD R0 R2 R0 -> remaining words 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 106 (REBSORT) F 10 Sort Minor Access Block 03B8B 60578803 1 6 BASE 172 LD R1 SP,LOCOUNT get number of words left to move 03B8C 1C440004 1 IMM 173 MUL R1 CPW convert to character count 03B8D 60930000 2 4 REG 174 LD R2 R4 R2 -> destination 03B8E FE400000 175 CMOVE and finish moving them 03B8F 19178803 4 6 BASE 176 ADD R4 SP,LOCOUNT move up the destination pointer 177 * \ / 178 00003B90 179 LOOPEND LABEL 03B90 60978804 2 6 BASE 180 LD R2 SP,HIBLOCK get address of last high block 03B91 18978801 2 6 BASE 181 ADD R2 SP,PASSSIZE move to beginning of next block 03B92 64978805 2 6 BASE 182 CPR R2 SP,BLOCKEND are we beyond the data 03B93 FE063B9D 183 JGE PASSEND1 done with pass and nothing to move 03B94 60D78801 3 6 BASE 184 LD R3 SP,PASSSIZE get the pass block size 03B95 E4D78803 3 6 BASE 185 ST R3 SP,LOCOUNT and call it the low block word count 03B96 FE0E3B69 186 JMP OUTLOOP 187 * --- 188 189 190 * We get here when there is no high block to merge with the low block 191 * so we just move the low block to the destination and do another pass. 00003B97 192 PASSEND LABEL 03B97 60128000 0 2 REG 193 LD R0 R2 set up for CMOVE, R0 -> source 03B98 60578805 1 6 BASE 194 LD R1 SP,BLOCKEND get end of block's address 03B99 10528000 1 2 REG 195 SUB R1 R2 get number of words left in block 03B9A 1C440004 1 IMM 196 MUL R1 CPW convert to a character count 03B9B 60930000 2 4 REG 197 LD R2 R4 R2 -> destination 03B9C FE400000 198 CMOVE move the remaining words 199 * \ / 200 00003B9D 201 PASSEND1 LABEL 03B9D 60D78801 3 6 BASE 202 LD R3 SP,PASSSIZE get the size of the last pass 03B9E 18D2C000 3 3 REG 203 ADD R3 R3 double the size for this pass 03B9F 64D78808 3 6 BASE 204 CPR R3 SP,NUMELEM see if we are done 03BA0 FE063BA7 205 JGE MERGEDONE 206 * \ / 207 03BA1 E4D78801 3 6 BASE 208 ST R3 SP,PASSSIZE save the size of this pass 03BA2 E4D78803 3 6 BASE 209 ST R3 SP,LOCOUNT set the low block count 03BA3 60578808 1 6 BASE 210 LD R1 SP,NUMELEM get the number of elements 03BA4 61178806 4 6 BASE 211 LD R4 SP,CURBLOCK R4 -> new destination block 03BA5 60978807 2 6 BASE 212 LD R2 SP,DESTBLOCK R2 -> new source block 03BA6 FE0E3B65 213 JMP PASSLOOP do another pass 214 * --- 215 00003BA7 216 MERGEDONE LABEL 03BA7 60578808 1 6 BASE 217 LD R1 SP,NUMELEM get the number of elements 03BA8 61178807 4 6 BASE 218 LD R4 SP,DESTBLOCK R4 -> destination 03BA9 60D78806 3 6 BASE 219 LD R3 SP,CURBLOCK R3 -> free block 03BAA 5D1F8009 6 STAK 220 LEAVE POP 221 * --- 222 223 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 107 (REBSORT) F 10 Sort Minor Access Block 225 226 ********************************************************************************** 227 * * 228 * BSORT performs a bubble sort on the words in SORTPLACE. * 229 * It just uses MSBLKFIELD as the sorting key for the words in * 230 * SORTPLACE. * 231 * Call: * 232 * LD R1 * 233 * CALLNP BSORT * 234 * * 235 * Eats R0:R4 * 236 * * 237 ********************************************************************************** 238 239 BLOCK 240 241 ENTRY BSORT 242 243 BEGFRAME 244 ENDFRAME 245 03BAB DD5F8001 6 STAK 246 BSORT ENTRNP PUSH 03BAC E4571002 1 4 REG 247 ST R1 R4+2 set up outer loop counter 248 00003BAD 249 LOOP LABEL 03BAD 60D30000 3 4 REG 250 LD R3 R4 03BAE 60447800 1 IMM 251 LD R1 ADR SORTPLACE R1 -> what needs to be sorted 03BAF 60840000 2 IMM 252 LD R2 0 clear our change flag 00003BB0 253 INNRLOOP LABEL 03BB0 60085180 0 1 ZBM 254 LD R0 R1,0/MSBLKFIELD get first disk address 03BB1 64085181 0 1 ZBM 255 CPR R0 R1,1/MSBLKFIELD see if in order 03BB2 FE0A3BB6 256 JLE INEND if so go to end of inner loop 257 * \ / 258 03BB3 E0164801 0 1 BASE 259 EXCH R0 R1,1 exchange the two words 03BB4 E4164800 0 1 BASE 260 ST R0 R1,0 finish up the exchange 03BB5 60840001 2 IMM 261 LD R2 1 say an exchange happened 00003BB6 262 INEND LABEL 03BB6 18440001 1 IMM 263 ADD R1 1 move to the next word 03BB7 FAE63BB0 3 264 JDR R3 INNRLOOP go around again 265 * \ / 266 03BB8 FA823BBA 2 267 JEQZ R2 BUBEND if no changes quit 03BB9 FB263BAD 4 268 JDR R4 LOOP go around again 269 * \ / 270 00003BBA 271 BUBEND LABEL 03BBA 5D1F8001 6 STAK 272 LEAVE POP 273 * --- 274 275 END BSORT 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 108 (REBSORT) F 10 Sort Minor Access Block 277 278 ********************************************************************************** 279 * * 280 * MOVESTUFF moves the words in MINPLACE to SORTPLACE * 281 * and eliminates all zero elements. * 282 * Call: * 283 * LD R1 * 284 * CALLNP MOVESTUFF * 285 * ST R1 * 286 * * 287 * Eats R0:R3 * 288 * * 289 ********************************************************************************** 290 291 BLOCK 292 293 ENTRY MOVESTUFF 294 295 BEGFRAME 296 ENDFRAME 297 03BBB DD5F8001 6 STAK 298 MOVESTUFF ENTRNP PUSH 03BBC 38E26800 3 1 299 LEA R3 MINPLACE(R1) set R2 -> end of source 03BBD 70924000 2 1 REG 300 LDN R2 R1 initialize index into MINPLACE 03BBE 60440000 1 IMM 301 LD R1 0 initialize word count 302 00003BBF 303 MOVELOOP LABEL 03BBF 601CD000 0 32 BASE 304 LD R0 R3,0(R2) get a word 03BC0 FA023BC4 0 305 JEQZ R0 MOVELPEND if it is zero skip it 03BC1 78003005 0 306 AND R0 MSMASK just keep the block address 03BC2 E4227800 0 1 307 ST R0 SORTPLACE(R1) put the word in place 03BC3 18440001 1 IMM 308 ADD R1 1 say another word has been found 309 * \ / 310 00003BC4 311 MOVELPEND LABEL 03BC4 FAA03BBF 2 312 IRJ R2 MOVELOOP and get the next word 313 * \ / 314 03BC5 5D1F8001 6 STAK 315 LEAVE POP 316 * --- 317 318 END of MOVESTUFF 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 109 (REBSORT) F 10 Sort Minor Access Block 320 321 ********************************************************************************** 322 * * 323 * DIVSECTOR determines the sector number of each block * 324 * in the sorted page pointed to by R4, and stores the sector * 325 * number in BITS 0:3 of the word containing the block number. * 326 * Call: * 327 * LD R1 number of entries in block * 328 * LD R4 ADR * 329 * SECPTRAK = sectors per track of disk being rebuilt * 330 * CALLNP DIVSECTOR * 331 * * 332 * Leaves R4 -> sorted block * 333 * Eats R0:R2 * 334 * * 335 ********************************************************************************** 336 00000040 BYTE 337 SECTBITS EQU BITS 0:3 bits containing sector number 338 339 BLOCK 340 341 ENTRY DIVSECTOR 342 343 BEGFRAME 344 ENDFRAME 345 03BC6 DD5F8001 6 STAK 346 DIVSECTOR ENTRNP PUSH 03BC7 FA423BD2 1 347 JEQZ R1 DIVEND don't do this if there aren't any 03BC8 58C40010 IMM 348 IORPSR PSRMODIF set funky arithmetic 03BC9 E4569001 1 2 REG 349 ST R1 R2+1 initialize our index 350 00003BCA 351 DIVLOOP LABEL 03BCA 605D1000 1 42 BASE 352 LD R1 R4,0(R2) get a word 03BCB 60040000 0 IMM 353 LD R0 0 for funny math 03BCC 140080E6 0 354 DIV R0 SECPTRAK figure out the sector number 03BCD 601D1000 0 42 BASE 355 LD R0 R4,0(R2) get the word back 03BCE E44A0040 1 0 CBM 356 ST R1 R0/SECTBITS put the sector in the high bits 03BCF E41D1000 0 42 BASE 357 ST R0 R4,0(R2) put the word back 03BD0 FAA63BCA 2 358 JDR R2 DIVLOOP go around again 359 * \ / 360 03BD1 58840010 IMM 361 CLBPSR PSRMODIF clear bizarre mathematics 00003BD2 362 DIVEND LABEL 03BD2 5D1F8001 6 STAK 363 LEAVE POP 364 * --- 365 366 END 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 110 (REBSORT) F 10 Sort Minor Access Block 368 369 ********************************************************************************** 370 * * 371 * ORDERCYL orders the sorted minor access block to optimize * 372 * disk reads. * 373 * Call: * 374 * LD R1 number of entries * 375 * LD R3 ADR * 376 * LD R4 ADR * 377 * CALLNP ORDERCYL * 378 * * 379 * Leaves R4 -> destination block * 380 * Eats R0:R5 * 381 * * 382 ********************************************************************************** 383 384 BLOCK 385 386 ENTRY ORDERCYL 387 388 BEGFRAME 00178801 6 BASE 389 FOUNDFLAG BSS 1 counter used to determine when cylinder is done 00178802 6 BASE 390 DESTBLOCK BSS 1 destination for ordered stuff 00178803 6 BASE 391 NEXTCYL BSS 1 index to the next cylinder 00178804 6 BASE 392 THISCYL BSS 1 index to beginning of current cylinder 393 ENDFRAME 394 03BD3 DD5F8005 6 STAK 395 ORDERCYL ENTRNP PUSH 03BD4 64440001 1 IMM 396 CPR R1 1 see if it makes sense to optimize 03BD5 FE0A3C01 397 JLE ONLYONE if not then don't 03BD6 E4D78802 3 6 BASE 398 ST R3 SP,DESTBLOCK destination address 03BD7 19124000 4 1 REG 399 ADD R4 R1 R4 -> end of block 03BD8 70524000 1 1 REG 400 LDN R1 R1 make into a negative index 03BD9 E4578803 1 6 BASE 401 ST R1 SP,NEXTCYL where to start next cylinder at 402 * \ / 403 00003BDA 404 ORDLOOP LABEL 03BDA 60578803 1 6 BASE 405 LD R1 SP,NEXTCYL start at the beginning of the next cylinder 03BDB E4578804 1 6 BASE 406 ST R1 SP,THISCYL so we know where we are 03BDC 615D0800 5 41 BASE 407 LD R5 R4,0(R1) get the first block number 03BDD 79403005 5 408 AND R5 MSMASK remove sector bits 03BDE 154080E7 5 409 DIV R5 SECPCYL determine the cylinder of this block 03BDF 19440001 5 IMM 410 ADD R5 1 we want the next cylinder 03BE0 1D4080E7 5 411 MUL R5 SECPCYL get to the beginning of next cylinder 412 03BE1 600080E6 0 413 LD R0 SECPTRAK sectors per track 03BE2 E4178801 0 6 BASE 414 ST R0 SP,FOUNDFLAG will decrement each time around that a 415 * sector is not found. 416 * 0 indicates through with this cylinder 03BE3 EC0080E8 417 STZ SECTORSW zero out the sector bit array 03BE4 60840000 2 IMM 418 LD R2 0 first sector to look for 419 * \ / 420 00003BE5 421 SECTLOOP LABEL 03BE5 601D0800 0 41 BASE 422 LD R0 R4,0(R1) get the block's address 03BE6 FA023BEB 0 423 JEQZ R0 SECTLEND 0 indicates word already is used 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 111 (REBSORT) F 10 Sort Minor Access Block 03BE7 654A1180 5 0 CBM 424 CPR R5 R0/MSBLKFIELD see if block is on the cylinder 03BE8 FE0A3BFB 425 JLE CYLINEND 03BE9 648A0040 2 0 CBM 426 CPR R2 R0/SECTBITS just check bits indicating the sector 03BEA FE023BEF 427 JEQ FOUNDSEC 00003BEB 428 SECTLEND LABEL 03BEB FA603BE5 1 429 IRJ R1 SECTLOOP go around again until end of cylinder 430 * \ / 431 432 * end of block has been reached 03BEC D0578801 6 BASE 433 DEC SP,FOUNDFLAG a round done with no success 03BED FE023C04 434 JEQ ORDEND if zero, done with last cylinder 03BEE FE0E3BFE 435 JMP NEXTSEC do the next sector 436 * --- 437 438 00003BEF 439 FOUNDSEC LABEL 03BEF EC1D0800 41 BASE 440 STZ R4,0(R1) this entry is now used 03BF0 78003005 0 441 AND R0 MSMASK get rid of misc bits 03BF1 E416C800 0 3 BASE 442 ST R0 R3,0 move this entry into our new ordered list 03BF2 18C40001 3 IMM 443 ADD R3 1 move up for next word 03BF3 18840002 2 IMM 444 ADD R2 2 move to the next wanted sector 445 * \ / 446 00003BF4 447 SECTMOD LABEL 03BF4 60578804 1 6 BASE 448 LD R1 SP,THISCYL initialize for SECTLOOP 03BF5 648080E6 2 449 CPR R2 SECPTRAK see if valid sector number 03BF6 FE083BF8 450 JLT CHEKSECT see if this sector exists still 03BF7 108080E6 2 451 SUB R2 SECPTRAK adjust to a valid sector 00003BF8 452 CHEKSECT LABEL 03BF8 5C343003 2 @ 453 CMZ @SECPTR(R2) is this sector exhausted? 03BF9 FE023BE5 454 JEQ SECTLOOP if zero then some still left 03BFA FAA03BF4 2 455 IRJ R2 SECTMOD move to next sector and check 456 * --- 457 00003BFB 458 CYLINEND LABEL 03BFB E4578803 1 6 BASE 459 ST R1 SP,NEXTCYL and save for end of cylinder processing 03BFC D0578801 6 BASE 460 DEC SP,FOUNDFLAG a round done with no success 03BFD FE023BDA 461 JEQ ORDLOOP if zero then start the next cylinder 462 * \ / 463 00003BFE 464 NEXTSEC LABEL 03BFE EDF43003 2 @ 465 STW @SECPTR(R2) say none of this sector left 03BFF 18840001 2 IMM 466 ADD R2 1 try for the next sector 03C00 FE0E3BF4 467 JMP SECTMOD share sector modulo code 468 * --- 469 00003C01 470 ONLYONE LABEL 03C01 E5178802 4 6 BASE 471 ST R4 SP,DESTBLOCK 03C02 60003005 0 472 LD R0 MSMASK get mask for block numbers 03C03 F8170800 0 4 BASE 473 ANDM R0 R4,0 get rid of sector number of block 474 * \ / 475 00003C04 476 ORDEND LABEL 03C04 61178802 4 6 BASE 477 LD R4 SP,DESTBLOCK destination address 03C05 5D1F8005 6 STAK 478 LEAVE POP 479 * --- 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 112 (REBSORT) F 10 Sort Minor Access Block 480 481 END 4420 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 113 F 0 Mark a CODE 4423 4424 BLOCK 4425 ENTRY MARKCODE 4426 4427 ********************************************************************************** 4428 * * 4429 * Routine to mark a CODE file as in use. * 4430 * Call: * 4431 * CALLNP markcode * 4432 * st r0 size of CODE in blocks * 4433 * * 4434 * Gets R0 thru R5. * 4435 * * 4436 ********************************************************************************** 4437 4438 BEGFRAME 00178801 6 BASE 4439 CODESIZE BSS 1 accumulation of CODE size 4440 ENDFRAME 4441 03C06 DD5F8002 6 STAK 4442 MARKCODE ENTRNP PUSH 03C07 EC178801 6 BASE 4443 STZ SP,CODESIZE size is zero to start with 03C08 60C080D8 3 4444 LD R3 PNTRFDE => file dir entry 03C09 6108D185 4 3 ZBM 4445 LD R4 R3,FDDA get root address of the file 03C0A 60130000 0 4 REG 4446 LD R0 R4 disk address 03C0B DC4036AC 4447 CALLNP MARKBLK mark the block as in use 03C0C EC0080AA 4448 STZ RELBLOCK no block number for CCBs 03C0D DC003376 4449 CALL PAGEIN get the root block in 03C0E 41440013 IMM 4450 PARV FBITCCB FBI type 03C0F 41530000 4 REG 4451 PARV R4 disk address 03C10 41006800 4452 PAR MINPLACE where we want the block 03C11 4000806F 4453 PARL MINORFBI and its FBI 03C12 FE0E3C35 4454 JMP BAILOUT only if trouble with read 03C13 D0178801 6 BASE 4455 INC SP,CODESIZE account for CCB space 4456 * \ / 4457 03C14 60046BE8 0 IMM 4458 LD R0 ADR MINPLACE(CCBINFO) R0 -> code block info 03C15 5C083210 0 ZBM 4459 CMZ R0,CCBMAINTR/CCBALWFRC does this file have maintenance read? 03C16 FE023C1E 4460 JEQ CHEKMWRT if not then check write 4461 * \ / 4462 03C17 DC1013F9 @ 4463 CALL @VPREPOUT print the message 03C18 410080EE 4464 PAR READACCT account number 03C19 410080F0 4465 PAR READPROJ division/project 03C1A 410080F3 4466 PAR READNAME file name 03C1B 410080F5 4467 PAR READEXT file extension 03C1C 40003C37 4468 PARL MAINTRMESS 03C1D 60046BE8 0 IMM 4469 LD R0 ADR MINPLACE(CCBINFO) R0 -> code block info 4470 * \ / 4471 00003C1E 4472 CHEKMWRT LABEL 03C1E 5C083410 0 ZBM 4473 CMZ R0,CCBMAINTW/CCBALWFRC does this file have maintenance write? 03C1F FE023C27 4474 JEQ CHEKBKUP if not then check backup privileges 4475 * \ / 4476 03C20 DC1013F9 @ 4477 CALL @VPREPOUT print the message 03C21 410080EE 4478 PAR READACCT account number 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 114 F 0 Mark a CODE 03C22 410080F0 4479 PAR READPROJ division/project 03C23 410080F3 4480 PAR READNAME file name 03C24 410080F5 4481 PAR READEXT file extension 03C25 40003C45 4482 PARL MAINTWMESS 03C26 60046BE8 0 IMM 4483 LD R0 ADR MINPLACE(CCBINFO) R0 -> code block info 4484 * \ / 4485 00003C27 4486 CHEKBKUP LABEL 03C27 5C080611 0 ZBM 4487 CMZ R0,CCBBACKUP/CCBALWFRC does this file have maintenance write? 03C28 FE023C2F 4488 JEQ CHEXDONE privilege checks are done 4489 * \ / 4490 03C29 DC1013F9 @ 4491 CALL @VPREPOUT print the message 03C2A 410080EE 4492 PAR READACCT account number 03C2B 410080F0 4493 PAR READPROJ division/project 03C2C 410080F3 4494 PAR READNAME file name 03C2D 410080F5 4495 PAR READEXT file extension 03C2E 40003C53 4496 PARL BACKUPMESS 4497 * \ / 4498 00003C2F 4499 CHEXDONE LABEL 03C2F DC003B18 4500 CALL MARKMINOR mark pointed to blocks 03C30 41440014 IMM 4501 PARV FBITCODED FBI type 03C31 404403E8 IMM 4502 PARVL CCBMAXPAGE how much to scan 03C32 98178801 0 6 BASE 4503 ADDM R0 SP,CODESIZE add in those marked 00003C33 4504 TAKEXIT LABEL 03C33 60178801 0 6 BASE 4505 LD R0 SP,CODESIZE return number of block in R0 03C34 5D1F8002 6 STAK 4506 LEAVE POP 4507 * --- 4508 00003C35 4509 BAILOUT LABEL 03C35 EDC080A0 4510 STW FILEBADFLG mark this file as bad 03C36 FE0E3C33 4511 JMP TAKEXIT 4512 * --- 4513 03C37 20205C53 4514 MAINTRMESS TEXTZ " \S1\.\R2\:\S3\.\R4\ has maintenance read privilege." 03C45 20205C53 4515 MAINTWMESS TEXTZ " \S1\.\R2\:\S3\.\R4\ has maintenance write privilege." 03C53 20205C53 4516 BACKUPMESS TEXTZ " \S1\.\R2\:\S3\.\R4\ has backup privilege." 4517 4518 END of MARKCODE 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 115 F 0 Mark a PATH and LOCK 4521 4522 BLOCK 4523 ENTRY MARKLOCK 4524 ENTRY MARKPATH 4525 4526 ********************************************************************************** 4527 * * 4528 * Routine to mark the hardware types that do not have any * 4529 * disk storage. * 4530 * Call: * 4531 * CALLNP mark.... * 4532 * st r0 size of the file (always zero) * 4533 * * 4534 * Assume it gets R0 thru R5. * 4535 * * 4536 ********************************************************************************** 4537 4538 BEGFRAME 4539 ENDFRAME 4540 00003C5E 4541 MARKPATH LABEL 03C5E DD5F8001 6 STAK 4542 MARKLOCK ENTRNP PUSH 03C5F 60040000 0 IMM 4543 LD R0 0 size of the file in R0 03C60 5D1F8001 6 STAK 4544 LEAVE POP 4545 * --- 4546 4547 END of MARKLOCK, MARKPATH 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 116 F 0 Display remaining unmarked blocks 4550 4551 ********************************************************************************** 4552 * * 4553 * CHECKSTRAYS. Subroutine to identify remaining unmarked, non-free * 4554 * blocks. This lets user find blocks that are rudely disconnected * 4555 * from their structures (after a crash, e.g.). * 4556 * Call: * 4557 * * 4558 * CALLNP CHECKSTRAYS * 4559 * * 4560 * Eats: R0:R3, R5 * 4561 * Eats FREEPLACE and FREEPFBI buffers * 4562 * * 4563 ********************************************************************************** 4564 4565 BLOCK CHECKSTRAYS subroutine 4566 ENTRY CHECKSTRAYS 4567 4568 BEGFRAME 00178801 6 BASE 4569 PAGEBUF BSS 1 buffer loc to hand VREAD 4570 ENDFRAME 4571 03C61 DD5F8002 6 STAK 4572 CHECKSTRAYS ENTRNP PUSH 03C62 60C47000 3 IMM 4573 LD R3 ADR FREEPLACE get the buffer location 03C63 5C0080D5 4574 CMZ OFFLINE are we running under OPL or ONPL? 03C64 FE023C68 4575 JEQ HAVEADDR if online then don't play with PF 03C65 60CADE70 3 3 CBM 4576 LD PFPTR R3/FLDPAGE get the page number from it 03C66 18C40080 3 IMM 4577 ADD PFPTR MONPF make it in the monitor 03C67 8092C000 3 REG 4578 PFRD R3 get the page file for the page 00003C68 4579 HAVEADDR LABEL 03C68 E4D78801 3 6 BASE 4580 ST R3 SP,PAGEBUF save on stack 4581 * \ / 4582 4583 * loop through marked bit map 03C69 614080AD 5 4584 LD R5 VOLSIZE begin at the end of the volume 00003C6A 4585 MOVEDOWN LABEL 03C6A 11440001 5 IMM 4586 SUB R5 1 move down 03C6B FB4A3C8C 5 4587 JLEZ R5 OTHERSCKD jump if done 03C6C 5C3A3004 5 @ 4588 CMZ @BITP(R5) already marked block? 03C6D FE0C3C6A 4589 JNE MOVEDOWN jump if so 4590 * \ / 4591 4592 * R5 = block number of an unmarked block 03C6E 610480B4 4 IMM 4593 LD R4 ADR RDISKCB DCB 03C6F 60D78801 3 6 BASE 4594 LD R3 SP,PAGEBUF for call 03C70 DC1013E0 @ 4595 CALL @VREAD read in the block 03C71 41534000 5 REG 4596 PARV R5 disk address 03C72 4152C000 3 REG 4597 PARV R3 where to put the block 03C73 41008085 4598 PAR FREEPFBI where to put its FBI 03C74 41440000 IMM 4599 PARV 0 just check CS and FBIDA 03C75 40003C76 4600 PARL CKERROR error address 00003C76 4601 CKERROR LABEL 03C76 60048085 0 IMM 4602 LD R0 ADR FREEPFBI point to FBI 03C77 60080080 0 0 ZBM 4603 LD R0 R0,FBITYPE get block type 03C78 6404007F 0 IMM 4604 CPR R0 FBITFREE free? 03C79 FE023C6A 4605 JEQ MOVEDOWN jump if so, not interested 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 117 F 0 Display remaining unmarked blocks 03C7A 50040017 0 IMM 4606 MIN R0 FBITYPEMAX convert all illegal to same 03C7B 6070341F 1 0 @ 4607 LD R1 @TYPETAB(R0) get check code 03C7C F27A3C6A 1 4608 JBF R1/ACCTBIT MOVEDOWN move on if not interesting 4609 * \ / 4610 4611 * have a live one! R5 = MS address of a loose block, so 4612 * display FBI info (somewhat) formatted 03C7D E54080D6 5 4613 ST R5 CURBLK save DA 03C7E DC00369D 4614 CALL FINDTEXTZ translate the FBI type 03C7F 41520000 0 REG 4615 PARV R0 pass manipulated FBI type 03C80 400035C6 4616 PARL FBITYPETAB search this table 03C81 60520000 1 0 REG 4617 LD R1 R0 copy for call 03C82 60848085 2 IMM 4618 LD R2 ADR FREEPFBI for call 03C83 DC1013F9 @ 4619 CALL @VPREPOUT tell user 03C84 41168805 2 BASE 4620 PAR R2,FBIACCT account name 03C85 41168807 2 BASE 4621 PAR R2,FBIPROJ account division/project 03C86 41168808 2 BASE 4622 PAR R2,FBISERNO(0) serial number (upper) 03C87 41168809 2 BASE 4623 PAR R2,FBISERNO(1) serial number (lower) 03C88 410080D6 4624 PAR CURBLK disk address 03C89 41164400 1 @R 4625 PAR @R1 type in ASCII string 03C8A 40003C8D 4626 PARL OTHERMSG basic message 03C8B FE0E3C6A 4627 JMP MOVEDOWN look for more 4628 * --- 4629 00003C8C 4630 OTHERSCKD LABEL 03C8C 5D1F8002 6 STAK 4631 LEAVE POP return 4632 * --- 4633 03C8D 20205C53 4634 OTHERMSG TEXTZ " \S1\.\S2\ \H3,3\ \H4\ \H5,6\ \C6\" 4635 4636 END CHECKSTRAYS subroutine 4637 4638 END of FREEVOL 1 Assembler C9101 Disk ADT Rebuilder 7-Aug-92 10:37 PAGE 118 F 0 Input Preparation Routine 4641 4642 BLOCK 4643 ENTRY PREPIN 4644 4645 ********************************************************************************** 4646 * * 4647 * Routine to get input from the input unit. Checks to see * 4648 * whether online or off line. * 4649 * Call: * 4650 * CALLNP PREPIN * 4651 * * 4652 * Gets R0 thru R3 and puts the read line in OUTBUF. * 4653 * * 4654 ********************************************************************************** 4655 4656 BEGFRAME 4657 ENDFRAME 4658 03C97 DD5F8001 6 STAK 4659 PREPIN ENTRNP PUSH 03C98 60440050 1 IMM 4660 LD R1 80 size of buffer 03C99 608480BC 2 IMM 4661 LD R2 ADR OUTBUF address of buffer 03C9A DC5013F3 @ 4662 CALLNP @VREADLINE read a line in 03C9B 30440050 1 IMM 4663 RSB R1 80 find out how long it was 03C9C 608480BC 2 IMM 4664 LD R2 ADR OUTBUF R2 => buffer 03C9D EC1A8800 21 CACH 4665 STZ CACH R2,0(R1) place terminator at the end 03C9E 5D1F8001 6 STAK 4666 LEAVE POP 4667 * --- 4668 4669 END of PREPIN 4671 4672 END of everything 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 1 ACCOUNTS 00178803 F 0 3037= 3041s 3073s 3087 3094a 3099 ACCTBIT 00003A10 F 0 1396 1544j 1703= 1709e 4608j ACCTIN 000033C1 F 0 1544j 1552= ACCTINIDX 00178803 F 0 3130= 3140s 3176 3291 3333 ACCTSIZE 00178804 F 0 3131= 3145s 3153s 3225s 3238s 3253s 3274s 3319 3326a 3331 3382s 3403s 3425s ACTB 00000004 F 0 1709= 1723x 1724x 1726x 1727x 1728x 1729x 1731x 1732x 1733x 1734x 1735x ADDRESS 00000011 F 4 26= 35e 36e 37e 38e 134e 232 233 ADROKAY 000036BF F 0 2445j 2453= ADROKAY 000037A5 F 0 2860j 2869= ADTCHECK 00003357 F 0 958 1335= 1336 1342= 1389 ADTCNUM 00178805 F 0 1031= 1035s 1127 ADTECNT 000000C8 F 0 1079 1095s 1374 F 6 1505= 1511 ADTFBI 00008090 F 0 315= 1060a 1169a 1183a 1193a 1195a 1202a 1361a 1379a *ADTLIST 00000000 F 6 1511= ADTLOOP 00003359 F 0 1346= 1362j 1382j ADTLSIZE 000080AE F 0 339= 785s 1099 ADTPLACE 00007400 F 0 297= 1074a 1095s 1151 1154a 1182a 1192a 1201a 1220a 1360a 1367 ADTSDONE 00003375 F 0 1351j 1385= AFTFBI 00008038 F 0 307= 3002a AFTINDEX 00178801 F 0 2982= 2987s 2992 3008s AFTPLACE 00005400 F 0 288= 3001a AGAIN 00003A3D F 0 3974= 3995j 4016j AHM1 0000312D F 0 635a 654= AHM2 00003175 F 0 659= 674a AHOLE 00003B4D F 0 4403j 4411= ALONEBADF 000031C3 F 0 498j 503j 511j 513j 671= ALONEHELP 0000311E F 0 497j 634= ALONESTART 0000301D F 0 260a 404j 472= ANNOUNCE 000030D2 F 0 569j 572j 576j 587= ANYTYPE 00003396 F 0 1475j 1481= APOUTDE 000034B5 F 0 2112a 2120= ARRAY 004080F8 F 0 398= 410a ARRAYW 000080F8 F 0 397= 710a ASKERRORS 000032B7 F 0 803a 1002= ASKPERM 000031F7 F 0 801= 820j ASNB 00000010 F 0 1711= 1723x 1724x 1731x 1735x ASNBIT 00003610 F 0 1579j 1701= 1711e *AUTHDSK 0016C804 F 6 1756= *AUTHDSKA 0016C805 F 6 1757= *AUTHENTBG 00000004 F 6 1749= *AUTHLELEN 0000000C F 6 1762= AUTHLENTRY 000007B0 F 6 1752= 1762e *AUTHSDSK 0016C806 F 6 1758= *AUTHSDSKA 0016C807 F 6 1759= *AUTHTIME 00000000 F 6 1746= *AUTHTIMEA 00000001 F 6 1747= *AUTHVNAME 0016C800 F 6 1753= BACKUPMESS 00003C53 F 0 4496a 4516= BADASHL 00003878 F 0 3237j 3240= BADAUTH 00003884 F 0 3252j 3255= BADBLOCK 000037E7 F 0 3003j 3006= BADD1WR 000038BC F 0 3297j 3340j 3347= BADD1WRM 000038C1 F 0 3351a 3355= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 2 BADD2WR 0000393F F 0 3450j 3467= BADD2WRM 00003944 F 0 3471a 3475= BADDIR1 000038BB F 0 3170j 3343= 3352j BADDIR2 0000393A F 0 3401j 3455= 3472j BADENDPTR 00003A6C F 0 4030j 4033j 4036j 4044= BADFILETYP 00001010 F 0 382= 3997j BADFORM 000031CA F 0 673a 682= BADFSHL 0000398A F 0 3542j 3545= BADIDX 00003809 F 0 3057j 3082= BADMIN 00003B16 F 0 4268j 4285= BADNAMEM 0000395B F 0 3486a 3491= BADRELNUM 0000344D F 0 1841j 1847= BADRESP 00003205 F 0 807j 817= BADRESPM 00003208 F 0 819a 823= BADRTN 00003A16 F 0 3842j 3851= BADSEC 000037D6 F 0 2920j 2958= BADUDIRNAM 00003950 F 0 3414j 3417j 3477= BAILOUT 00003AEA F 0 4196j 4210= 4232j 4251j BAILOUT 00003C35 F 0 4454j 4509= *BFDCHKSEG 0000000A F 5 665= *BFDEF18 00000230 F 5 733= *BFDEF9A 00000240 F 5 739= *BFDFNCLFLT 00000011 F 5 748= *BFDFNCLOFS 00000044 F 5 759= *BFDFNDSE 00000081 F 5 761= *BFDFNDSINT 00000028 F 5 756= *BFDFNDSL 00000082 F 5 762= *BFDFNENINT 00000024 F 5 755= *BFDFNOFSB 00000042 F 5 758= *BFDFNOFSF 00000041 F 5 757= *BFDFNRDS 00000084 F 5 763= *BFDFNRESET 00000048 F 5 760= *BFDFNSAFE 00000020 F 5 752= *BFDFNSISE 00000021 F 5 753= *BFDFNSOLNT 00000014 F 5 750= *BFDFNUISE 00000022 F 5 754= *BFDFNUOLNT 00000018 F 5 751= *BFDFNZERO 00000012 F 5 749= *BFDFORMAT 00000260 F 5 774= *BFDFORMATW F0783C1E F 5 775= *BFDFUNC 00000220 F 5 746= *BFDIDSTEST 00002080 F 5 669= *BFDINTBIT 00003010 F 5 787= *BFDINTERNS 00000250 F 5 742= *BFDMAGICHD 000000FF F 5 809= *BFDNUMSEGS 0000000A F 5 664= *BFDPRESENT 00002080 F 5 741= *BFDREAD 00000230 F 5 765= *BFDREADY 00001080 F 5 740= *BFDSACYL 00000100 F 5 681= *BFDSAHEAD 00002080 F 5 682= *BFDSASEC 00003080 F 5 683= *BFDSEEK 00000210 F 5 679= *BFDSEGSIZE 00000073 F 5 663= *BFDSELECT 00000200 F 5 744= *BFDSELECTB 00000008 F 5 777= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 3 *BFDSS 00000220 F 5 685= *BFDSSCEOV 00003610 F 5 717= *BFDSSDNUM 00002030 F 5 699= *BFDSSEBITS 00001080 F 5 694= *BFDSSERRCD 00003840 F 5 720= *BFDSSFAULT 00000E10 F 5 693= *BFDSSHDECD 00003030 F 5 707= *BFDSSIFPE 00002C10 F 5 704= *BFDSSLOSTD 00002A10 F 5 703= *BFDSSNSAFE 00000410 F 5 688= *BFDSSOLINT 00000010 F 5 686= *BFDSSONCYL 00000A10 F 5 691= *BFDSSRDY 00000810 F 5 690= *BFDSSRSPER 00002E10 F 5 705= *BFDSSSKERR 00000C10 F 5 692= *BFDSSWCERR 00002810 F 5 702= *BFDSSWPROT 00000610 F 5 689= *BFDUNITS 00000008 F 5 666= *BFDUNLDCYL 000003FF F 5 810= *BFDWRCH 00000250 F 5 772= *BFDWRITE 00000240 F 5 770= BFILLER 00003805 F 0 3064j 3076= BIGDIR 00003900 F 0 3263j 3373= BITP 00003004 F 0 410= 1086 2406s 2746 4588 BLDADTERR 000032F4 F 0 1136= 1222j 1238j 1254j BLINKBIT 00003410 F 0 1524j 1700= 1708e BLINKIN 000033B5 F 0 1524j 1532= BLNKB 00000020 F 0 1708= 1721x 1726x BLOCKCHANG 000080DE F 0 358= 3266s 3287 3402s 3438 3563s 3572s 4051s 4184s BLOCKDN 000032EA F 0 1085j 1100j 1115= BLOCKEND 00178805 F 10 85= 107s 113 117 182 194 BLOCKNUM 00178802 F 0 2173= 2271s 2306a BLOCKSIZE 00000400 F 6 6= 933e 1233e 1572e 2210e 2223e BOOTBAD 0000370A F 0 2560j 2561= BOOTDA 00000002 F 0 2552 2557 F 6 981= BOOTLOC 00001000 F 4 154= 155e *BOOTREV 00000001 F 6 985= BSORT 00003BAB F 10 49 241 246= *BTRXACDE 00000030 F 6 928= BTRXBAD 000037AC F 0 2849j 2882= *BTRXDATE 00000001 F 6 930= BTRXECNT 00000200 F 0 2852 2854 F 6 933= BTRXEL 00000000 F 6 922= 931e BTRXFBI 0000800C F 0 303= 2848a *BTRXFSDE 00000040 F 6 929= *BTRXLCDE 00000010 F 6 926= BTRXLNTH 00000002 F 6 931= 933e BTRXLOOP 00003799 F 0 2853= 2877j BTRXPLACE 00004400 F 0 284= 2847a 2854 BTRXREASON 00000080 F 0 2855 F 6 923= *BTRXRTDE 00000020 F 6 927= BUBEND 00003BBA F 10 267j 271= BUBSEND 00003B5A F 10 46j 52= BUBSORT 00003B57 F 10 33j 44= BUCKET 00178802 F 0 3036= 3042s 3071 3083s BUCKNUM 00178809 F 0 3135= 3139s 3199 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 4 BUILDADTL 000032C4 F 0 861 1009 1034= *BUSCIP 60000000 F 5 39= *BUSCREAD 20000000 F 5 35= *BUSCREAD2 30000000 F 5 36= *BUSCRMW 10000000 F 5 34= *BUSCST 50000000 F 5 38= *BUSCWRITE 00000000 F 5 33= *BUSCWRU 40000000 F 5 37= BUSYDSKM 00003112 F 0 580a 625= BYTEDISP 000028C0 F 6 55= 2365e 2470e *CAIMABORT 0000000D F 4 261= *CAIMALLXR 00000007 F 4 255= *CAIMARITH 00000003 F 4 251= *CAIMBREAK 00000006 F 4 254= *CAIMCALL 00000002 F 4 250= *CAIMCKBDS 00000004 F 4 252= *CAIMGUNIT 0000000E F 4 262= *CAIMINST 00000001 F 4 249= *CAIMMPV 00000005 F 4 253= *CAIMMSG 0000000B F 4 259= *CAIMNEPATH 00000009 F 4 257= *CAIMNETERM 00000008 F 4 256= *CAIMTIME 0000000A F 4 258= *CAIMVMF 0000000C F 4 260= *CAINTADR 0016080A F 4 244= *CAINTENABL 0008001B F 4 247= CAINTMASK 0016080B F 4 245= 247e *CALINK 0016080C F 4 266= CALNTH 0000000F F 4 274= 275e *CALOG 00000004 F 4 275= *CAMSR 00160801 F 4 234= *CANUMREGS 0000000C F 4 265= *CANUMUREGS 0000000A F 4 264= CAPC 00081F10 F 4 233= 265e F 6 2538e *CAPSR 000800F0 F 4 232= CAR0 00160802 F 4 235= 264e F 6 2539e *CAR1 00160803 F 4 236= *CAR2 00160804 F 4 237= *CAR3 00160805 F 4 238= *CAR4 00160806 F 4 239= *CAR5 00160807 F 4 240= *CAR6 00160808 F 4 241= *CAR7 00160809 F 4 242= *CASTACKPTR 0016080D F 4 268= *CAXOPERAND 0016080E F 4 272= *CCB2TRANS 0016080A F 6 2539= CCBALWFRC 00003E10 F 0 4459 4473 4487 F 6 2530= CCBBACKUP 00080421 F 0 4487 F 6 2529= *CCBDIVFRC 00003A10 F 6 2532= *CCBFLD2TRN 00000000 F 7 578= *CCBFLDBKUP 0000001A F 7 576= *CCBFLDIAR 0000000B F 7 565= *CCBFLDIMR 0000000A F 7 564= *CCBFLDMGR 00000019 F 7 575= *CCBFLDMNTR 00000016 F 7 572= *CCBFLDMNTW 00000017 F 7 573= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 5 *CCBFLDOPR 00000018 F 7 574= *CCBFLDOWND 00000010 F 7 566= CCBFLDPC 00000008 F 7 562= 577e *CCBFLDPSR 00000009 F 7 563= *CCBFLDPTRN 00000008 F 7 577= CCBFLDR0 00000000 F 7 554= 578e *CCBFLDR1 00000001 F 7 555= *CCBFLDR2 00000002 F 7 556= *CCBFLDR3 00000003 F 7 557= *CCBFLDR4 00000004 F 7 558= *CCBFLDR5 00000005 F 7 559= *CCBFLDR6 00000006 F 7 560= *CCBFLDR7 00000007 F 7 561= *CCBFLDRG1 00000011 F 7 567= *CCBFLDRG2 00000012 F 7 568= *CCBFLDRG3 00000013 F 7 569= *CCBFLDRG4 00000014 F 7 570= *CCBFLDRG5 00000015 F 7 571= CCBINFO 000003E8 F 0 4458a 4469a 4483a F 6 2552= CCBINFOL 00000018 F 6 2541= 2545e CCBINFPROT 00000839 F 6 2517= 2541e 2542a CCBMAINTR 00083210 F 0 4459 F 6 2524= CCBMAINTW 00083410 F 0 4473 F 6 2525= *CCBMANAGR 00083A40 F 6 2527= CCBMAXPAGE 000003E8 F 0 4502 F 6 2545= 2547 *CCBOPREQ 00083620 F 6 2526= *CCBOWNDIR 00080211 F 6 2528= *CCBOWNFRC 00003C10 F 6 2531= *CCBPAGE0 00000000 F 6 2546= CCBPERMIT 00160800 F 6 2518= 2536 CCBPREGS 00160808 F 6 2537= 2538e 2539e *CCBPRJFRC 00003810 F 6 2533= *CCBPROTECT 00000010 F 6 2551= *CCBPTRANS 00081F18 F 6 2538= *CCBRSTCTG1 00080050 F 6 2519= *CCBRSTCTG2 00080A50 F 6 2520= *CCBRSTCTG3 00081450 F 6 2521= *CCBRSTCTG4 00081E50 F 6 2522= *CCBRSTCTG5 00082850 F 6 2523= *CCBUSRFRC 00003610 F 6 2534= CDCHEK 0000345F F 0 1520 1883 1901= CDERR 0000346D F 0 1907j 1910j 1923= CDEXIT 00003469 F 0 1913= 1919j 1938j CDZERO 0000346A F 0 1904j 1917= *CH0 00000080 F 4 43= CH1 00001080 F 0 3980s 4006s F 4 44= CH2 00002080 F 0 3988s 4010s F 4 45= CH3 00003080 F 0 3993s 4014s F 4 46= CHAINLOOP 0000335E F 0 1354= 1381j CHANGEFLAG 00003011 F 0 425= 583s 1600 1848 1924 1979 2038 4045 CHARDISP 0000809B F 0 319= 3822s 3839s 3844 3878s 3984 4001s 4026 *CHARM MACRO F 3 298= CHAROFFST 0000809C F 0 320= 4113s 4128a CHARPTR 00003A09 F 0 3827 3832= CHECKADT 0000300B F 0 418= 512 CHECKAGAIN 00003A04 F 0 3823= 3846j 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 6 CHECKFULL 000032E7 F 0 1080j 1098= CHECKSTOP 000030E5 F 0 530j 616= 651j CHECKSTRAYS 00003C61 F 0 963 4566 4572= CHEKBKUP 00003C27 F 0 4474j 4486= CHEKFLAG 000033A1 F 0 1496j 1503= CHEKFSN 000033D0 F 0 1566j 1576= CHEKMWRT 00003C1E F 0 4460j 4472= CHEKPROJ 000033C5 F 0 1549j 1559= CHEKRELBLK 000033B9 F 0 1529j 1539= CHEKSECT 00003BF8 F 10 450j 452= CHEKTYPE 00003AD3 F 0 4170a 4175= CHEXDONE 00003C2F F 0 4488j 4499= CHRDATAPT 02006400 F 0 292= 3832a *CIAAEOP 00003810 F 5 894= *CIABOARDS 00000008 F 5 884= *CIABRDF 00003430 F 5 886= *CIACHARS 00000100 F 5 896= *CIAEOP 00003A10 F 5 893= *CIAERR 00003610 F 5 895= *CIAERROR 00000203 F 5 903= *CIAFULL 00003C10 F 5 892= *CIAINTACK 00000201 F 5 898= *CIAINTMASK 00000202 F 5 900= *CIAMODE 00000209 F 5 940= *CIAMODEM 00000002 F 5 943= *CIAMODEN 00000000 F 5 941= *CIAMODET 00000001 F 5 942= *CIAPBAUD 00002100 F 5 990= *CIAPECHO 00001410 F 5 984= *CIAPFI 00001810 F 5 986= *CIAPFO 00001A10 F 5 987= *CIAPICH 00002080 F 5 949= *CIAPMODM 00003E10 F 5 951= *CIAPOCH 00001080 F 5 948= *CIAPORT 00000280 F 5 945= *CIAPPBRD 00000008 F 5 885= *CIAPSIB 00001C10 F 5 988= *CIAPSOB 00001E10 F 5 989= *CIAPSTAT 00000080 F 5 947= *CIAPSTS 00001610 F 5 985= *CIAPWAIT 00003C10 F 5 950= *CIASDREAD 00000207 F 5 932= *CIASETTICK 00000206 F 5 926= *CIASREAD 00000204 F 5 922= *CIASRWACK 00000080 F 5 934= *CIASRWCNT 00002100 F 5 936= *CIASRWMSK 00001080 F 5 935= *CIASWRITE 00000205 F 5 924= *CIATICK 00003E10 F 5 891= CIATICKPSEC 000001C6 F 5 929= 930e *CIATICKTIME 0000002D F 5 930= CIATPS 0000000A F 5 928= 930e *CIATRMBUFL 00000100 F 5 887= *CIAVERSION 00000208 F 5 938= *CIAWHYINT 00000201 F 5 889= CKERROR 00003C76 F 0 4600a 4601= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 7 CODESIZE 00178801 F 0 4439= 4443s 4455s 4503s 4505 CONAREA 00000000 F 4 231= 274e 276a CONTAUTH 00003884 F 0 3243j 3254= CONTSHL 00003878 F 0 3228j 3239= CONVERTM 00003107 F 0 607a 624= CONVERTXIT 000039E4 F 0 3694j 3696= CONVFLAG 00003013 F 0 430= 584s 603 3652 3693 COUNTFREE 000037D1 F 0 2947= 2949j CPP 00001000 F 0 1048 1308 3824 3838 F 4 34= F 5 1154e 1159e 1168e *CPU4 00000001 F 5 75= *CPUA 00000002 F 5 224= *CPUCCA 0000000A F 5 216= *CPUCOFFSET 00030000 F 5 229= *CPUI 00000001 F 5 223= *CPUIAPR 00000004 F 5 235= *CPUMSR 00000009 F 5 215= *CPUOOFFSET 00020000 F 5 221= *CPUPC 00000008 F 5 214= *CPUPFOFSET 00010000 F 5 219= *CPUPMS 00000004 F 5 226= *CPUPSR 00000000 F 5 222= *CPUPTCHCMD 00000703 F 5 238= *CPUQ 00000003 F 5 225= *CPUREG 00000000 F 5 213= *CPUREGOFST 00000000 F 5 212= *CPURUN 00000000 F 5 231= *CPUSCYCLE 00000002 F 5 233= *CPUSSTEP 00000003 F 5 234= *CPUSTOP 00000001 F 5 232= *CPUUCODELD 00000700 F 5 237= *CPUUS 00000005 F 5 227= CPW 00000004 F 0 715 843 2802 2808 F 4 31= 34e F 5 1159e F 6 1174 2205 2206 F 10 163 173 196 CR 0000000D F 0 270= 2257x 2261x 2265x 3358x CRANDALL 00000000 F 6 5= 2642a CROSSBNDS 00003A0A F 0 3825j 3834= *CTDIOSIZE 000047F8 F 5 1159= CURBLK 000080D6 F 0 350= 1369s 1428s 1435 1436s 1450 1513 1606 1623 1646 1840 1854 1863 1930 1986 2045 2443 2448 2458 2688s 2858s 2864 2874a 3792s 3920s 4406s 4613s 4624a CURBLOCK 00178806 F 10 86= 104s 211 219 CURDATE 000080A7 F 0 333= 594s 1170 1908 1935 CURUDIR1 00178808 F 0 3134= 3157s 3483a *CUSTNUM 00000100 F 6 1145= CYLINEND 00003BFB F 10 425j 458= DATABAD 00003B42 F 0 4373j 4385= DATAFBI 00008064 F 0 311= 2559a 2931a 3236a 3251a 3541a 3759a 3835a 3922a 3930a 4231a 4372a DATAPLACE 00006400 F 0 293= 2558a 2930a 3235a 3250a 3540a 3929a 4230a 4371a *DATEHORD 00082800 F 6 164= *DCBBTRAX 00081187 F 9 27= DCBFILLADR 00160802 F 9 15= 28e *DCBFILLLEN 00000006 F 9 28= DCBLEN 00000008 F 0 345 F 9 30= *DCBLUN 0016001C F 9 26= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 8 *DCBMAIMNT 00080216 F 9 22= *DCBNORETRY 00080416 F 9 23= *DCBNOSUBS 00080016 F 9 21= *DCBPFILE 00160800 F 9 13= DCBSCSI 00080816 F 0 2506 4350 F 9 25= DCBSECPTRK 00160802 F 0 553 F 9 16= *DCBSUBLIST 00160804 F 9 18= DCBTRKPCYL 00160803 F 0 555 F 9 17= *DCBUNIT 00160801 F 9 14= *DCBVERIFY 00080616 F 9 24= *DCBVOLSIZE 00160805 F 9 19= DCBWORD 00160806 F 9 20= 21e 22e 23e 24e 25e DEMESTAB 000034BF F 0 2123a 2136= DESTBLOCK 00178807 F 10 87= 105s 212 218 DESTBLOCK 00178802 F 10 390= 398s 471s 477 *DEVBIT 00000200 F 5 599= *DEVERPFE 000000E0 F 7 210= *DEVERPIBO 000000E2 F 7 212= *DEVERPPE 000000E1 F 7 211= *DEVERTRE 000000E3 F 7 214= DIR1FDEMP 00003896 F 0 3271j 3286= DIR1IDEMP 0000393E F 0 3378j 3462= DIR1INDEX 00178801 F 0 3128= 3258s 3267 3279s 3374 3442 3457s DIR1PLACE 00005C00 F 0 290= 1484 3168a 3178 3181 3188a 3189a 3198 3198 3203a 3204a 3212 3214 3221a 3222a 3227 3242 3261a 3269a 3295a 3317a 3330a 3338a 3376a 3443a DIR2FBI 00008059 F 0 310= 3400a 3449a DIR2FDEMP 0000392D F 0 3422j 3437= DIR2INDEX 00178802 F 0 3129= 3406s 3407 3430s DIR2PLACE 00006000 F 0 291= 3399a 3411a 3420a 3448a DIRFBI 0000804E F 0 309= 3169a 3190a 3191a 3296a 3339a DIRHELP1 0000318C F 0 639a 663= DIRHELP2 000031B0 F 0 666= 678a DIRVERDONE 00003235 F 0 733j 903= DIRVERERRS 00003247 F 0 905j 908j 924= DIRVERIFY 00003016 F 0 433= 478 505 560 571 636 675 732 2612 3314 3752 4331 DISKCTLBLK 00000000 F 9 12= 30e 31a DISKNAME 000080B3 F 0 344= 504s 518 528a 579a *DISPFIELD 00002CA0 F 4 150= DIVEND 00003BD2 F 10 347j 362= DIVLOOP 00003BCA F 10 351= 358j DIVSECTOR 00003BC6 F 0 4352 F 10 341 346= DOCDCHEK 000033AD F 0 1510j 1519= DONE 00003A61 F 0 3982j 4025= DONELINE 0000322D F 0 890a 895= DONTTELL 00003473 F 0 1925j 1934= DOSORT 00003B24 F 0 4335j 4343= DOTBANG 0000300D F 0 419= 3215 DROPBAD 00003017 F 0 434= 3558 *DSKLIM 00092187 F 6 1614= *DSKSAVL 00090186 F 6 1612= DSKUSD 00091188 F 0 3318 3332s F 6 1615= *DSKWARN 00093186 F 6 1613= DUPBLK 000036B3 F 0 2407j 2413= *DVCTBFD 00000001 F 5 613= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 9 *DVCTCOMM 00000008 F 5 615= *DVCTCTC 0000000A F 5 617= *DVCTLPC 00000002 F 5 614= *DVCTMTC 00000009 F 5 616= *DVCTSDC 0000000C F 5 619= *DVCTVTC 0000000B F 5 618= DVSNDISP 0000FA00 F 6 93= 95e *DVSNPART1 00000170 F 6 94= *DVSNPART2 0000007D F 6 95= DVVERSIONM 000030F0 F 0 559a 622= DVWHOVOLM 00003733 F 0 2611a 2633= *DWRUDD 00002080 F 5 623= *DWRUMREV 00001080 F 5 621= *DWRUTYPE 00000080 F 5 611= ECBLKREUS 0000000D F 0 1622 2457 F 9 74= *ECCHAN 00000003 F 9 64= ECDA 0000000C F 0 1634 2447 2863 F 9 73= *ECDATA 00000001 F 9 62= *ECFBI 00000002 F 9 63= ECFBIACCT 00000009 F 0 1554 F 9 70= ECFBIBDAT 00000019 F 0 1920 F 9 86= ECFBIBLNE 00000011 F 0 1526 F 9 78= ECFBIBLNK 0000000B F 0 1534 F 9 72= ECFBIFDAT 00000013 F 0 1909 F 9 80= ECFBIFLAG 0000000F F 0 1505 F 9 76= ECFBIFLNK 0000000E F 0 1498 F 9 75= ECFBIFSN 0000000A F 0 1586 F 9 71= ECFBINBAN 00000015 F 0 1546 F 9 82= ECFBINBFS 00000018 F 0 1594 F 9 85= ECFBINBPJ 00000016 F 0 1563 F 9 83= ECFBIODAT 00000012 F 0 1906 F 9 79= ECFBIPROJ 00000017 F 0 1571 F 9 84= ECFBIRBN 00000014 F 0 1829 1853 F 9 81= *ECFBISUB 00000010 F 9 77= ECFBITYPE 00000008 F 0 1477 1650 F 9 69= ECMPE 00000007 F 0 1512 F 9 68= *ECNOCODE 00000000 F 9 61= *ECNOTRDY 00000005 F 9 66= ECRECBAD 0000001D F 0 4120 F 9 90= *ECSAFBAD 0000001C F 9 89= *ECSEEK 00000004 F 9 65= ECSUBENT 0000001B F 0 2792 F 9 88= ECUDIRORD 0000001A F 0 3582 F 9 87= *ECWRPROT 00000006 F 9 67= EMPTY 00000000 F 0 448= 1499 1527 1547 1564 1595 EMPTYBUKT 000037E7 F 0 2988j 2994j 3007= EMPTYMIN 00003B40 F 0 4359j 4379= ENDBLK 0000809D F 0 321= 3888s 4029 4062a ENDBTRX 000037AC F 0 2856j 2880= ENDBYTE 0000809E F 0 322= 3889s 4035 4063a ENDOFBUKT 00003809 F 0 3043j 3048j 3067j 3081= EOD 00900000 F 0 383= 3981 ERRCODE 00178801 F 0 1965= 1971s 1983 ERRCODE 00178801 F 0 2024= 2030s 2042 ERRCODETAB 0000351A F 0 2178= 2276a ERRDIRVF 000080DA F 0 354= 714s 904 2316s 2462s 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 10 ERROR 00003A5F F 0 3997j 3998j 4018= ERRORBLOCK 000080E9 F 0 369= 716a 3187a 3324a 3349a 3469a ERRORCHK 000039F7 F 0 3771j 3776= ERRORCNT 000080DB F 0 355= 713s 752 799 907 1674s 3193s 3206s ERRORCODE 000080DC F 0 356= 2270s 2275 2277s 2305a ERRORDONE 00003257 F 0 754j 939= ERRORDONEA 00003258 F 0 813j 815j 941= ERROREXIT 000033EF F 0 1628= 1678j ERROREXIT 00003A6B F 0 3978j 3987j 3991j 4004j 4008j 4012j 4020j 4039= ERRORFLG 0000809F F 0 323= 3767 3777 3879s 4109s ERRORLINE 0000325B F 0 943a 947= ERRORRTN 00003A3A F 0 3931j 3939= ERRORTEMP 000080DD F 0 357= 641s 644 3321s 3325a 3335s 3350a 3445s 3470a ERRSTRING 00003696 F 0 2355= 2375a ERRTIDY 0000340A F 0 1651j 1670= EXIT 000032F3 F 0 1037j 1134= EXIT 00003A6A F 0 4038= 4052j 4065j 4070j 4078j FATALTAB 00003424 F 0 1395 1673 1768= FBI2FLDCHEK 00003489 F 0 1545 1553 1585 1593 2004 2029= FBIACCT 00168805 F 0 1548a 1556a 3190a 4620a F 6 780= FBIADR 00178803 F 0 1421= 1430s 1452a 1473 1515 1653 FBIBLINK 00089182 F 0 1173s 1528a 1536a F 6 749= FBICHANG 000080D7 F 0 351= 1432s 1602 1875s 1937s 1993s 2052s FBICKDONE 000033DE F 0 1589j 1599= *FBICKSUM 0016880A F 6 784= FBICONVBL 00178802 F 0 3644= 3650s 3659a FBICONVDA 00178801 F 0 3643= 3649s 3658 3670a FBICONVERT 000039C1 F 0 3628 3648= FBICONVFL 00178803 F 0 3645= 3651s 3660a FBICONVXIT 000039CF F 0 3653j 3662= *FBICSMASK FFE00000 F 6 788= FBIDA 00089181 F 0 2094s 2762 F 6 747= FBIDEFFLAGS 00088221 F 0 1507a F 6 746= FBIFLAGPTR 00003423 F 0 1506 1754= FBIFLAGS 00088041 F 6 740= 741e 742e 744e 745e 746e FBIFLAGVAL 00C03420 F 0 1749= 1754a FBIFLDCHEK 00003477 F 0 1497 1504 1525 1533 1562 1570 1828 1945 1970= FBIFLINK 00089180 F 0 1178s 1197s 1380 1500a 3760 3836 F 6 738= *FBIGMASK FFC00000 F 6 787= FBILCD 00168803 F 0 1171s 1902 1936s F 6 777= FBILNTH 0000000B F 0 302 303 304 305 306 307 308 309 310 311 312 313 314 315 1280 F 6 7= 783 786e 787e 788e FBILOC 00178803 F 0 1967= 1973s 1974 1992s FBILOC 00178804 F 0 2026= 2032s 2033 2051s *FBILOG 00000004 F 6 786= FBIMAJBITS 000898A4 F 0 1819= 1842 1874s FBIMEMERR 00088611 F 0 1509 F 6 745= FBIMINBITS 0008ACA4 F 0 1818= 1837 1872s *FBINOREWRIT 00088011 F 6 741= *FBINOSUB 00088411 F 6 744= FBIPROJ 00168807 F 0 1565a 1573a 3191a 4621a F 6 781= FBIRELBLK 00089184 F 0 1831a F 6 779= FBISERNO 00168808 F 0 1588a 1596a 4622a 4623a F 6 782= FBITADT 00000007 F 0 1062 1190 1358 F 6 759= FBITAFT 00000010 F 0 2999 F 6 768= FBITASLB 00000011 F 0 3233 F 6 769= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 11 FBITAUTLB 00000015 F 0 3248 F 6 773= FBITBOOT 00000003 F 0 2556 F 6 755= FBITBTRX 00000002 F 0 2845 F 6 754= FBITCCB 00000013 F 0 4450 F 6 771= FBITCODED 00000014 F 0 1822 4501 F 6 772= *FBITESTB 0000007E F 6 774= FBITFREE 0000007F F 0 1053 1372 1655 2281 4604 F 6 775= FBITFSLB 00000012 F 0 3538 F 6 770= FBITIDX 00000008 F 0 3053 F 6 760= FBITLRAF 0000000D F 0 4247 F 6 765= FBITPL 00000001 F 0 2498 F 6 753= FBITRAFD 0000000F F 0 1824 4201 4228 4273 F 6 767= FBITSAF 0000000C F 0 3795 3927 4122 F 6 764= FBITSEC 00000006 F 0 2916 2928 F 6 758= FBITSRAF 0000000E F 0 4192 4264 F 6 766= FBITSUBS 00000005 F 0 2673 F 6 757= *FBITSYS 0000000B F 6 763= FBITUDIR1 00000009 F 0 1482 3161 3166 F 6 761= FBITUDIR2 0000000A F 0 3393 3397 F 6 762= FBITVL 00000004 F 0 1918 2594 F 6 756= FBITYPE 00088080 F 0 1054s 1063s 1476 1514 1654 3655s 4603 F 6 734= FBITYPEMAX 00000017 F 0 2168 2250= 2290 4606 FBITYPETAB 000035C6 F 0 1660a 2167 2212= 2293a 4616a FBITYPEX 00178801 F 0 1419= 1427s 1474 1516 1624 1647 1672 FBITYPEX 00178803 F 0 2174= 2272s 2280 2284s 2294s 2307a *FBIWCHK 00088211 F 6 742= FBIWORDA 00168800 F 6 731= 734e 738e 783 FBIWORDB 00168801 F 6 732= 740e 747e FBIWORDC 00168802 F 6 733= 749e FBIWORDE 00168804 F 0 1818e 1819e F 6 778= 779e *FDACCESSES 0016C80C F 6 1847= *FDACSAO 00000002 F 6 1789= *FDACSLK 0008D040 F 6 1780= *FDACSMW 00000004 F 6 1791= *FDACSNWB 00003E10 F 6 1792= *FDACSRO 00000001 F 6 1788= *FDACSRW 00000000 F 6 1787= *FDACSXO 00000003 F 6 1790= FDCONVERT 000039E1 F 0 3681 3692= *FDCREDAT 0016C80F F 6 1854= *FDCUSE 0008C101 F 6 1830= FDDA 0008D185 F 0 3890 4162 4445 F 6 1835= FDEND 0016C811 F 0 3886 4049s F 6 1856= FDEPP 0016C810 F 0 3887 4050s F 6 1855= FDEPROT 000007BC F 6 1775= 1860e FDET 0008EA60 F 0 3548 F 6 1801= FDEXTEN 0016C804 F 0 3415 3482a 3520 3579 F 6 1833= *FDFBD 0008DE10 F 6 1793= *FDFLOG 0008FA10 F 6 1823= *FDFWWSC 0008E610 F 6 1799= FDGHOST 0008F610 F 0 3562s F 6 1821= *FDLACC 0016C808 F 6 1842= *FDLBU 0016C809 F 6 1843= *FDLCD 0016C807 F 6 1841= FDLEN 0008D186 F 0 3567 3571s F 6 1838= FDLNTH 00000018 F 0 3278 3280 3429 3431 F 6 1860= 2211e 2212e 2223e 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 12 2234e 2238e FDLRAF 0008E810 F 0 4179s F 6 1800= *FDMWACS 0008E2FC F 6 1850= FDNAME 0016C802 F 0 3412 3481a 3516 F 6 1832= *FDNBU 0008E010 F 6 1794= *FDPRIV 0008D830 F 6 1786= *FDPURG 0008E410 F 6 1796= *FDPURGE 0016C018 F 6 1836= *FDRACS 0008C10C F 6 1848= FDRAFTYPE 0008FC20 F 0 4165 4183s F 6 1824= *FDRFB 0008E210 F 6 1795= *FDRUSE 0008C10D F 6 1851= FDSERNO 0016C80A F 0 3529 F 6 1844= FDSHL 0016C814 F 0 3531 F 6 1858= FDSTART 0016C800 F 6 1776= 1857 *FDSUN 0016C000 F 6 1779= *FDTRANS 0008F810 F 6 1822= *FDUSRFLD 0016C80E F 6 1853= *FDWACS 0008E01C F 6 1849= *FDWUSE 0008E10D F 6 1852= FERM 00003683 F 0 2286j 2296= *FILAEOD 0000000B F 6 2362= FILAEODB 00003C10 F 6 2356= 2362e FILEBADFLG 000080A0 F 0 324= 3546s 3560 3852s 3940s 4110s 4211s 4286s 4386s 4510s FILELINE 000039AB F 0 3589a 3594= FILEMARK 00800000 F 0 384= 3994 FILEODB 00003E10 F 6 2355= 2361e 2362e *FILEOF 00000008 F 6 2360= FILESHL 00178801 F 0 3511= 3532s 3543s 3574 *FILNEOD 00000009 F 6 2361= *FILREODB 00003A10 F 6 2357= *FILRLEN 00001B30 F 6 2350= FILSFLAGB 00003810 F 6 2359= 2360e 2361e 2362e *FILTYPE 00001040 F 6 2343= FINDLOOP 00003454 F 0 1860= 1865j FINDTEXTZ 0000369D F 0 523 1658 2121 2274 2291 2297 2349 2357= 4614 FIRSTADTB 00178804 F 0 1030= 1059s 1128 1176s FIRSTREAD 000039F0 F 0 3755j 3763= FLD2CHKEND 0000349A F 0 2035j 2055= *FLDABSPG 000014C0 F 4 151= FLDADRS 00001F10 F 4 36= 40e *FLDBITS 00001F60 F 4 42= *FLDCHARS 00001F30 F 4 41= FLDCHKEND 00003488 F 0 1976j 1996= FLDMODE 00001450 F 4 39= 40e *FLDMODEADR 00001560 F 4 40= FLDPAGE 00001E70 F 0 1444 2100 4576 F 4 37= *FLDRELOCB 00001C10 F 4 35= FLINKBIT 00003210 F 0 1496j 1699= 1707e FLNKB 00000040 F 0 1707= 1721x 1726x *FNAMBLKLEN 0000000A F 9 100= FNBLKPROT 00000000 F 9 92= 100e 101a FOUNDFLAG 00178801 F 10 389= 414s 433s 460s FOUNDIT 0000345A F 0 1864j 1871= FOUNDSEC 00003BEF F 10 427j 439= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 13 *FOURSECSD 00005265 F 6 184= FOURSECSH 0000036E F 0 593 F 6 183= *FOURSECSM 0000000E F 6 182= *FRAGACCT 000001CD F 7 625= *FRAGACCTT 000001CF F 7 630= *FRAGBUSY 000001C9 F 7 622= *FRAGCPUL 000001C0 F 7 613= *FRAGCPUU 000001C1 F 7 614= *FRAGDFLTR 000001D2 F 7 632= *FRAGDSKL 000001C4 F 7 617= *FRAGDSKU 000001C5 F 7 618= *FRAGENCF 000001D3 F 7 638= *FRAGFAC 000001CA F 7 623= *FRAGINITP 000001CE F 7 627= *FRAGPWAC 000001CB F 7 624= *FRAGSAVL 000001C7 F 7 620= *FRAGSERNO 000001D0 F 7 635= *FRAGSHAD 000001D1 F 7 631= *FRAGSSCF 000001C8 F 7 621= *FRAGWARN 000001C6 F 7 619= *FRAGWLCKL 000001C2 F 7 615= *FRAGWLCKU 000001C3 F 7 616= *FRALIAS 000001A0 F 7 598= *FRASACCT 000001ED F 7 651= *FRASACCTT 000001EF F 7 656= *FRASCPUL 000001E0 F 7 641= *FRASCPUU 000001E1 F 7 642= *FRASDFLTR 000001F2 F 7 660= *FRASDSKL 000001E4 F 7 645= *FRASENCF 000001F3 F 7 663= *FRASFAC 000001EA F 7 649= *FRASINITP 000001EE F 7 653= *FRASPASS 000001F0 F 7 658= *FRASPWAC 000001EB F 7 650= *FRASSAVL 000001E7 F 7 647= *FRASSSCF 000001E8 F 7 648= *FRASWARN 000001E6 F 7 646= *FRASWLCKL 000001E2 F 7 643= *FRASWLCKU 000001E3 F 7 644= *FRBKSP 00000016 F 7 297= *FRBLKLIM 00000150 F 7 529= *FRBLKUSED 00000151 F 7 532= *FRCACCESS 000000C0 F 7 432= *FRCATALOG 000000E0 F 7 454= *FRCG2TRANS 00000181 F 7 539= *FRCGBCKUP 0000018C F 7 550= *FRCGMANAGR 00000189 F 7 547= *FRCGMANTR 0000018A F 7 548= *FRCGMANTW 0000018B F 7 549= *FRCGOPREQ 00000188 F 7 546= *FRCGOWND 00000182 F 7 540= *FRCGPTRANS 00000180 F 7 538= *FRCGRG1 00000183 F 7 541= *FRCGRG2 00000184 F 7 542= *FRCGRG3 00000185 F 7 543= *FRCGRG4 00000186 F 7 544= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 14 *FRCGRG5 00000187 F 7 545= *FRCHAIN 00000130 F 7 515= *FRCHGTRANS 000000C1 F 7 433= *FRCLEAR 00000011 F 7 292= *FRCLOSE 00000060 F 7 388= *FRCLRVVFU 00000251 F 7 697= *FRCONCP 00000133 F 7 521= *FRCREATP 00000134 F 7 518= *FRCS2TRANS 00000191 F 7 581= *FRCSBCKUP 0000019C F 7 592= *FRCSMANAGR 00000199 F 7 589= *FRCSMANTR 0000019A F 7 590= *FRCSMANTW 0000019B F 7 591= *FRCSOPREQ 00000198 F 7 588= *FRCSOWND 00000192 F 7 582= *FRCSPTRANS 00000190 F 7 580= *FRCSRG1 00000193 F 7 583= *FRCSRG2 00000194 F 7 584= *FRCSRG3 00000195 F 7 585= *FRCSRG4 00000196 F 7 586= *FRCSRG5 00000197 F 7 587= *FRCYCLE 0000001D F 7 303= *FRDELPAGE 00000098 F 7 419= *FRDESTROY 00000170 F 7 535= *FRDEVSTAT 0000001F F 7 305= *FRECHOGET 00000242 F 7 692= *FRECHOOFF 00000241 F 7 690= *FRECHOUNIT 00000240 F 7 688= FREEBLOCK 0000340E F 0 1656j 1681= FREED 000080AB F 0 336= 712s 765s 767a 2408s FREEMESS 00003615 F 0 1682a 2169 2239= 2283a FREEOUT 000032F6 F 0 1150= 1158j FREEOUTD 000032FE F 0 1152j 1159= FREEPFBI 00008085 F 0 314= 1051a 1156a 4598a 4602a 4618a FREEPLACE 00007000 F 0 296= 1049a 1155a 4573a FREEVOL 000031D0 F 0 610 687 690 708= *FREPP 0000001E F 7 304= *FREQUIP 00000050 F 7 347= *FREQUIPMW 00000054 F 7 350= *FREQUIPNA 00000057 F 7 351= *FREQUIPR 00000051 F 7 349= *FREQUIPW 00000050 F 7 348= *FRFILELOCK 00000200 F 7 666= *FRFILELOKT 00000202 F 7 674= *FRFILEULOK 00000201 F 7 667= *FRFORCE 0000001A F 7 301= *FRFWSP 00000015 F 7 296= *FRGETCCB 0000018F F 7 553= *FRGETTRANS 000000C2 F 7 436= *FRINSRTP 00000132 F 7 517= *FRMAKEPATH 00000270 F 7 700= *FRMAPIN 00000091 F 7 404= *FRMAPINOC 00000094 F 7 406= *FRMAPINR 00000092 F 7 405= *FRMODACS 000000D0 F 7 439= *FRMODFLOG 000000DB F 7 450= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 15 *FRMODFWWSC 000000D4 F 7 443= *FRMODGHOST 000000D7 F 7 446= *FRMODLBKU 000000D6 F 7 445= *FRMODLRD 000000D9 F 7 448= *FRMODLWD 000000D8 F 7 447= *FRMODNBKUP 000000D3 F 7 442= *FRMODPRGI 000000D2 F 7 441= *FRMODTRANS 000000DA F 7 449= *FRMODUSRN 000000D5 F 7 444= *FRNOPEN 00000260 F 7 361= *FRNOPENC 00000268 F 7 366= *FRNOPENCMW 0000026C F 7 369= *FRNOPENCNA 0000026F F 7 370= *FRNOPENCR 00000269 F 7 368= *FRNOPENCW 00000268 F 7 367= *FRNOPENMW 00000264 F 7 364= *FRNOPENNA 00000267 F 7 365= *FRNOPENR 00000261 F 7 363= *FRNOPENW 00000260 F 7 362= *FROPEN 00000050 F 7 353= *FROPENMW 00000054 F 7 356= *FROPENNA 00000057 F 7 357= *FROPENR 00000051 F 7 355= *FROPENW 00000050 F 7 354= *FRPGPROTG 00000096 F 7 413= *FRPGPROTS 00000097 F 7 416= *FRPOSITION 00000090 F 7 400= *FRRAFCPOS 00000095 F 7 410= *FRRAFLAST 00000093 F 7 408= *FRRAFNEXT 00000099 F 7 421= *FRREAD 00000030 F 7 323= *FRREADB 00000031 F 7 324= *FRREADSHL 000000E1 F 7 455= *FRRELEASE 00000013 F 7 294= *FRRENAMER 00000100 F 7 461= *FRRESLOCKR 00000203 F 7 669= *FRRESLOCKT 00000206 F 7 679= *FRRESLOCKW 00000204 F 7 670= *FRRESLOKT 00000206 F 7 678= *FRRESSWTCH 00000290 F 7 703= *FRRESULOCK 00000205 F 7 671= *FRREWIND 00000012 F 7 293= *FRRWRITE 00000020 F 7 313= *FRRWRITEB 00000022 F 7 316= *FRRWRITEC 00000025 F 7 319= *FRRWRITEF 00000023 F 7 317= *FRRWRITEL 00000024 F 7 318= *FRRWRITET 00000020 F 7 314= *FRRWRITETF 00000021 F 7 315= *FRSAVE 00000070 F 7 392= *FRSEFB 00000018 F 7 299= *FRSEFF 00000017 F 7 298= *FRSEOD 00000014 F 7 295= *FRSETCCB 0000019F F 7 595= *FRSETUPP 00000131 F 7 516= *FRSETVVFU 00000250 F 7 695= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 16 *FRSHARE 000000A0 F 7 425= *FRSREAD 00000032 F 7 325= *FRSREADB 00000033 F 7 326= *FRSTATUS 00000010 F 7 291= *FRSWRITE 000002A0 F 7 339= *FRSWRITEB 000002A2 F 7 342= *FRSWRITEF 000002A3 F 7 343= *FRSWRITET 000002A0 F 7 340= *FRSWRITETF 000002A1 F 7 341= *FRTBREAK 000001B5 F 7 608= *FRTCLRXOFF 000001B6 F 7 610= *FRTDELAY 000001B4 F 7 606= *FRTFLSHI 000001B1 F 7 602= *FRTFLSHIO 000001B2 F 7 603= *FRTFLSHO 000001B0 F 7 601= *FRTGETBKSP 00000124 F 7 493= *FRTGETBRCH 00000233 F 7 506= *FRTGETCRD 00000121 F 7 490= *FRTGETCW 00000126 F 7 495= *FRTGETECHO 00000128 F 7 497= *FRTGETFFD 00000123 F 7 492= *FRTGETHTD 00000232 F 7 505= *FRTGETINFO 00000234 F 7 510= *FRTGETIRAT 0000012C F 7 500= *FRTGETKILL 00000125 F 7 494= *FRTGETLFD 00000122 F 7 491= *FRTGETMODE 00000230 F 7 503= *FRTGETOPT 00000231 F 7 504= *FRTGETPORT 0000012E F 7 501= *FRTGETRATE 00000129 F 7 498= *FRTGETRCVR 0000012F F 7 502= *FRTGETSH 00000127 F 7 496= *FRTGETTCG 0000012A F 7 499= *FRTGETTCS 0000012B F 7 512= *FRTGETTYPE 00000120 F 7 488= *FRTGETXOIQ 00000235 F 7 507= *FRTRESET 000001B3 F 7 604= *FRTSETBKSP 00000114 F 7 469= *FRTSETBRCH 00000223 F 7 482= *FRTSETCRD 00000111 F 7 466= *FRTSETCW 00000116 F 7 471= *FRTSETECHO 00000118 F 7 473= *FRTSETFFD 00000113 F 7 468= *FRTSETHTD 00000222 F 7 481= *FRTSETIRAT 0000011C F 7 476= *FRTSETKILL 00000115 F 7 470= *FRTSETLFD 00000112 F 7 467= *FRTSETMODE 00000220 F 7 479= *FRTSETOPT 00000221 F 7 480= *FRTSETORAT 0000011D F 7 477= *FRTSETRATE 00000119 F 7 474= *FRTSETSH 00000117 F 7 472= *FRTSETTCG 0000011A F 7 475= *FRTSETTCS 0000011B F 7 485= *FRTSETTRNS 0000011F F 7 478= *FRTSETTYPE 00000110 F 7 464= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 17 *FRTSETXOIQ 00000224 F 7 483= *FRUNEQUIP 00000060 F 7 386= *FRUNITID 00000210 F 7 682= *FRUNITIE 00000211 F 7 683= *FRUNITIGET 00000212 F 7 685= *FRUNSAVE 00000080 F 7 396= *FRUNSHARE 000000B0 F 7 429= *FRUOPEN 00000280 F 7 374= *FRUOPENC 00000288 F 7 379= *FRUOPENCMW 0000028C F 7 382= *FRUOPENCNA 0000028F F 7 383= *FRUOPENCR 00000289 F 7 381= *FRUOPENCW 00000288 F 7 380= *FRUOPENMW 00000284 F 7 377= *FRUOPENNA 00000287 F 7 378= *FRUOPENR 00000281 F 7 376= *FRUOPENW 00000280 F 7 375= *FRWFM 00000019 F 7 300= *FRWRITE 00000040 F 7 329= *FRWRITEB 00000042 F 7 332= *FRWRITEC 00000045 F 7 335= *FRWRITEF 00000043 F 7 333= *FRWRITEL 00000044 F 7 334= *FRWRITEMOD 0000001C F 7 302= *FRWRITET 00000040 F 7 330= *FRWRITETF 00000041 F 7 331= *FRXSAVE 00000140 F 7 525= FSNB 00000001 F 0 1712= 1723x 1724x 1726x 1727x 1728x 1729x 1731x 1732x 1733x 1734x 1735x FSNBIT 00003E10 F 0 1578j 1705= 1712e GETABYTE 00003A02 F 0 3803 3821= 3977 3986 3990 4003 4007 4011 GETDISK 0000302B F 0 484j 495= GIVEERR 000036AA F 0 2363j 2365j 2374= GOODCOUNT 00003818 F 0 3089j 3098j 3101= GOODGUESS 00003AD8 F 0 4180j 4182= GOTPAGE 000034AA F 0 2099j 2104= HAVEADDR 00003C68 F 0 4575j 4579= HAVEPAGE 00003389 F 0 1443j 1447= HAVEPARAMS 00003038 F 0 506j 510j 517= HAVESN 000033D5 F 0 1579j 1584= HDRBLOCK 000080A1 F 0 325= 3880s 3923 3935s 4032 4047 4121 HDRDISP 000080A2 F 0 326= 3976s 3985s 4111 HEADERMES 00003ABA F 0 4129a 4133= HELPLOOP 00003122 F 0 637j 640= 650j 676j 679j HIBLOCK 00178804 F 10 84= 115s 120 180 HICOUNT 00178802 F 10 82= 96s 119s 153s 162 166 HIDONE 00003B8A F 10 154j 170= *HTYPECDR 0000000A F 6 1813= *HTYPECODE 00000003 F 6 1806= *HTYPECT 0000000D F 6 1816= *HTYPEDIR 00000005 F 6 1808= *HTYPELAST 00000010 F 6 1819= *HTYPELP 0000000B F 6 1814= *HTYPEMT 0000000C F 6 1815= *HTYPENULL 00000006 F 6 1809= *HTYPEPATH 00000004 F 6 1807= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 18 *HTYPERAF 00000002 F 6 1805= *HTYPESAF 00000001 F 6 1804= *HTYPETASK 00000009 F 6 1812= *HTYPETERM 00000007 F 6 1810= *HTYPEVOL 0000000E F 6 1817= *HTYPEVT 0000000F F 6 1818= IDXACNO 00178800 F 0 3063 3141 3177 F 6 1566= 1571e IDXACNOP 00178802 F 0 3066 3143 3180 F 6 1567= IDXBADMESS 000038EB F 0 3205a 3361= IDXCNTMSG 00003819 F 0 3095a 3105= IDXDIRDA 00178803 F 0 3146 3292 3334 F 6 1569= IDXDIRDA2 00178804 F 0 3147 F 6 1570= IDXECNT 000000CC F 0 3079a F 6 1572= IDXFBI 00008043 F 0 308= 3056a IDXHASH MACRO F 0 3198 F 6 1335= IDXHASHOK 00003860 F 0 3200j 3208= IDXLNTH 00000005 F 0 3077 3079a F 6 1571= 1572e IDXPLACE 00005800 F 0 289= 3055a 3060a 3079a INDEX 00178801 F 0 2352= 2358s 2364 2370s INDEX 00178801 F 0 3035= 3061s 3078s INEND 00003BB6 F 10 256j 262= INITIALIZE 00003A18 F 0 3746 3860 3877= INITPSECT MACRO F 0 273 F 3 63= 72 INNRLOOP 00003BB0 F 10 253= 264j INTOBLOCK 000032E5 F 0 1088j 1094= INTSOFF 0000E000 F 4 82= 86e INTSON 0000F000 F 4 81= 83e 85e *IPRPPUCHAN 00001080 F 5 56= *IPRPPUSTAT 00002100 F 5 57= *IPRSSUSTAT 00003080 F 5 403= ITSSMALL 00003ADB F 0 4172a 4188= JUSTPRINT 00003A74 F 0 4046j 4055= KEEPQUIET 00003453 F 0 1849j 1858= LARGERAF 00003AF8 F 0 4173a 4243= LASTFREE 000080B1 F 0 342= 782s 1036 1077 1116s LF 0000000A F 0 271= 2257x 2261x 2265x 3358x *LIMACSALW 00003E10 F 6 1602= *LIMACSDIV 00003A10 F 6 1604= *LIMACSPROJ 00003810 F 6 1605= *LIMACSSYS 00003C10 F 6 1603= *LIMACSUSR 00003610 F 6 1606= *LIMFACCESS 00000040 F 6 1596= LIMITS 0000079C F 6 1592= 1618e LIMITSIZE 00000009 F 6 1618= 2199 2200 *LIMLOGSPOT 00001A50 F 6 1599= *LIMPACCESS 00000840 F 6 1597= LINE1 00003293 F 0 763a 999= LINE2 000032A0 F 0 769a 1000= LINE3 000032AD F 0 828a 1001= LINKIN 000032F5 F 0 1117j 1148= LISTSIZ 00178803 F 0 1029= 1057s 1078 1097s 1132 *LOCKBIT 80000000 F 4 17= LOCKBITB 00000010 F 4 16= 17e LOCOUNT 00178803 F 10 83= 95s 143s 172 176 185s 209s LODONE 00003B83 F 10 144j 160= *LOGSLOTS 00000004 F 4 48= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 19 LOOP 000036A0 F 0 2361= 2371j LOOP 00003B73 F 10 136= 147j 157j LOOP 00003BAD F 10 249= 268j LOOPEND 00003B90 F 10 167j 179= *LPCLRCTL 00000201 F 5 1444= *LPINT 00000080 F 5 1435= *LPLOADVFU 0000020C F 5 1447= *LPNOP 00000200 F 5 1442= *LPSETCTL 00000202 F 5 1445= *LPSKIP 00000210 F 5 1450= *LPSTATUS 00000220 F 5 1452= *LPSTBADWRT 00003610 F 5 1476= *LPSTBUFE 00000610 F 5 1455= *LPSTBUFRDY 00002E10 F 5 1473= *LPSTERROR 00000840 F 5 1456= *LPSTFAULT 00000010 F 5 1453= *LPSTILINE 00003410 F 5 1475= *LPSTIPRE 00003010 F 5 1474= *LPSTIRDY 00003E10 F 5 1478= *LPSTIVFU 00003C10 F 5 1477= *LPSTOOP 00000210 F 5 1454= *LPSTPSKP 00001610 F 5 1470= *LPSTREADY 00002410 F 5 1472= *LPSTUNIT 00001840 F 5 1471= *LPSTVFU 00001410 F 5 1469= *LPWRFORM 00001E10 F 5 1481= *LPWRHDR 00002C20 F 5 1482= *LPWRITE 00000240 F 5 1480= *LPWRLNTH 00003080 F 5 1483= *LPWRUITYP 00003460 F 5 1440= *LPWRUOPT 00002080 F 5 1438= *LPWRUPPUE 00003010 F 5 1439= *LUNAIN 000000C9 F 7 232= *LUNAOUT 000000CA F 7 233= *LUNCMCNTL 000000D2 F 7 236= *LUNCMLOW 000000C9 F 7 235= *LUNSERR 00000003 F 7 230= *LUNSIN 00000001 F 7 228= *LUNSOUT 00000002 F 7 229= LWPP 0000000A F 4 33= 37e 134e MAINTRMESS 00003C37 F 0 4468a 4514= MAINTWMESS 00003C45 F 0 4482a 4515= MAJHOLE 00003B14 F 0 4258j 4280= MAJINDEX 00178801 F 0 4155= 4259s 4277 MAJORFBI 0000807A F 0 313= 4250a MAJPLACE 00006C00 F 0 295= 4249a 4257 MARKACCT 00003827 F 0 3070 3112 3138= MARKAFT 000037D7 F 0 2953 2967 2985= MARKBLK 000036AC F 0 1356 1370 2387 2403= 2495 2553 2591 2670 2689 2842 2870 2913 2926 2997 3051 3152 3158 3230 3245 3381 3390 3535 3793 3925 4190 4224 4245 4262 4366 4407 4447 MARKBLKXIT 000036B2 F 0 2409= 2415j MARKBOOT 00003700 F 0 720 2536 2551= MARKBTRX 0000378D F 0 756 940 2818 2839= MARKCODE 00003C06 F 0 3607a 4425 4442= MARKDATA 00003B44 F 0 4332j 4393= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 20 MARKDONE 00003371 F 0 1368j 1378= MARKFILE 00003970 F 0 3273 3424 3497 3514= MARKIDX 000037EA F 0 2955 3020 3040= MARKLOCK 00003C5E F 0 3612a 4523 4542= MARKLOOP 00003368 F 0 1366= 1375j MARKMINOR 00003B18 F 0 4200 4272 4294 4316= 4500 MARKOTHER 000039E5 F 0 3604a 3609a 3610a 3611a 3613a 3614a 3615a 3616a 3617a 3618a 3619a 3621a 3705 3718= MARKPACKL 000036C8 F 0 719 2472 2492= MARKPATH 00003C5E F 0 3608a 4524 4541= MARKRAF 00003AC8 F 0 3606a 4140 4159= MARKSAF 000039E8 F 0 3605a 3728 3745= MARKSECB 000037BD F 0 2625 2894 2911= MARKSUBS 00003740 F 0 2622 2640 2666= MARKVOLL 0000370B F 0 721 2570 2589= MASK 00003006 F 0 412= 4000 *MATEDATE1 80000005 F 6 871= *MATEDATE2 80000006 F 6 872= *MATERUNNUM 04000004 F 6 869= *MATEVOLSIZ 80000004 F 6 870= MAXAFTSIZE 000000FD F 6 1321= 1362 MAXBLK 000F4240 F 0 396= 398 709 MAXIDXSIZE 000000FD F 6 1320= 1321e 1361 *MAXLOCAL 00000064 F 7 231= *MAXMAPVALS 00000004 F 4 166= MAYBESZD 000038A1 F 0 3313= 3463j MERGEDONE 00003BA7 F 10 205j 216= MERGEPLACE 00007C00 F 0 299= F 10 54a 98a MESSAGES 0000362E F 0 2253= 2299a MESSAGETAB 00003617 F 0 2243= 2250e 2298 MFTYPETAB 000039B0 F 0 3550 3603= 3620e MINELEMS 0000000F F 10 27= 32 MINOREXIT 00003B41 F 0 4381= 4414j MINORFBI 0000806F F 0 312= 4195a 4267a 4453a MINORSIZE 00178802 F 0 4313= 4339s 4348s 4353 4355 4360s 4374s 4380 MINPLACE 00006800 F 0 294= 1838 1861 4194a 4225s 4266a 4337a 4402 4452a 4458a 4469a 4483a F 10 299a *MIRRORSECT 00000380 F 6 861= MMSCSI 00003B2F F 0 4351j 4356= *MONBIT 00003010 F 4 148= *MONMSR 0000F1F0 F 4 85= *MONMSRIOFF 0000E1F0 F 4 86= MONPF 00000080 F 0 1445 2101 4577 F 4 136= 153e 155e MOVEDOWN 00003C6A F 0 4585= 4589j 4605j 4608j 4627j MOVELOOP 00003BBF F 10 303= 312j MOVELPEND 00003BC4 F 10 305j 311= MOVESTUFF 00003BBB F 0 4344 F 10 293 298= MPLMSG1 000036E6 F 0 2513a 2528= MPLMSG2 000036F4 F 0 2523a 2529= MPLSCSI 000036DF F 0 2507j 2517= MSBLKFIELD 00001180 F 0 411x F 6 38= 738e 747e 749e 779e 1694e F 10 122 123 146 156 254 255 424 MSBLKLOG 00000018 F 4 30= F 6 38e 39e 1612 1613 1614 1615 1834 1835 1838 2247 MSECSD 05265C00 F 6 177= 184e MSECSH 0036EE80 F 6 176= 177e 183e 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 21 MSECSM 0000EA60 F 6 175= 176e 182e MSECSS 000003E8 F 6 174= 175e MSGCHECK 000036B5 F 0 1371 2423 2441= 2690 3794 4409 MSMASK 00003005 F 0 411= 1434 1839 1862 2092 2404 2687 2857 3791 3919 4405 F 10 306 408 441 472 MSORT 00003B5D F 10 36 78 91= MSRFORMON 000001F0 F 4 84= 85e 86e MSRFRELOC 00000040 F 4 77= 84e MSRFRELOCB 00003210 F 4 68= 77e *MSRIAPRB 00002A10 F 4 61= MSRINTCNT 00002040 F 4 56= 81e 81e 82e 82e MSRIRELOC 00000010 F 4 79= 84e MSRIRELOCB 00003610 F 4 70= 79e MSRMON 00000100 F 4 74= 84e MSRMONB 00002E10 F 4 63= 74e *MSRMPEPRCB 00001E10 F 4 54= *MSRPFINTE 00000800 F 4 75= MSRPFINTEB 00002810 F 4 58= 75e MSRPRELOC 00000020 F 4 78= 84e MSRPRELOCB 00003410 F 4 69= 78e *MSRRSTRT 00000080 F 4 52= *MSRSLOT 00003840 F 4 72= MSRSRELOC 00000080 F 4 76= 84e MSRSRELOCB 00003010 F 4 67= 76e *MSRTRACEIB 00002C10 F 4 62= *MTCMERASE 00000260 F 5 1421= *MTCMFUNC 00000230 F 5 1403= *MTCMREAD 00000240 F 5 1417= *MTCMRESET 00000200 F 5 1401= *MTCMWRITE 00000250 F 5 1419= *MTDIOSIZE 0000C000 F 5 1154= *MTDST9 00003010 F 5 1369= *MTDSTBOT 00003610 F 5 1373= *MTDSTBREW 00003A10 F 5 1376= *MTDSTDEN 00003E10 F 5 1379= *MTDSTEOT 00003210 F 5 1371= *MTDSTPRS 00003C10 F 5 1378= *MTDSTRDY 00003410 F 5 1372= *MTDSTTPK 00003A10 F 5 1377= *MTDSTWPRT 00003810 F 5 1375= *MTFNBKSP 00000006 F 5 1408= *MTFNCYCLE 00000001 F 5 1404= *MTFNDENSEL 0000000C F 5 1413= *MTFNDSCIOF 00000008 F 5 1410= *MTFNDSCION 00000009 F 5 1411= *MTFNFWSP 00000007 F 5 1409= *MTFNOFFL 0000000A F 5 1412= *MTFNREWIND 00000002 F 5 1405= *MTFNSEFB 00000004 F 5 1406= *MTFNSEFF 00000005 F 5 1407= *MTFNTRSEL 00000010 F 5 1414= *MTFNWFM 00000018 F 5 1415= *MTIDSTEST 00002080 F 5 1174= *MTINTREQ 00000080 F 5 1399= *MTLD2STAT 00000220 F 5 1381= *MTLDDRVST 00000240 F 5 1386= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 22 *MTLDSTAT 00000210 F 5 1204= *MTSELECT 00000008 F 5 1397= *MTSTANER 00000410 F 5 1207= *MTSTDPPE 00002010 F 5 1342= *MTSTDRVST 00003080 F 5 1366= *MTSTDSC 00000010 F 5 1205= *MTSTEOF 00001010 F 5 1218= *MTSTERSTAT 00001650 F 5 1226= *MTSTSCIEN 00000210 F 5 1206= *MTSTTMBK 00000002 F 5 1222= *MTSTTMBKB 00001210 F 5 1224= *MTSTTMD 00001220 F 5 1219= *MTSTTMFW 00000001 F 5 1221= *MTSTTMFWB 00001410 F 5 1225= *MTSTTMLOST 00000003 F 5 1223= *NAME 00000005 F 9 96= NAMEBAD 00003849 F 0 3179j 3185= NAMEBADMSG 000038CD F 0 3192a 3357= *NAMEEXT 00000007 F 9 97= NAMEGOOD 00003851 F 0 3182j 3194= NEWACCTSZ 000038E0 F 0 3327a 3360= NEWFBITYPE 000080B2 F 0 343= 3654 NEXTADTB 000032D6 F 0 1073= 1209j NEXTADTL 00003218 F 0 859= 866j NEXTBLK 000037DB F 0 2991= 3009j NEXTBLOCK 00003B45 F 0 4401= 4412j NEXTBUKT 000037EE F 0 3046= 3085j NEXTCYL 00178803 F 10 391= 401s 405 459s NEXTDIR2 00003901 F 0 3375= 3459j NEXTEND 00003B3F F 0 4364j 4376= 4387j NEXTENT 000037FB F 0 3062= 3080j NEXTFDE 0000388C F 0 3268= 3281j NEXTFDEX 00003923 F 0 3419= 3432j 3488j NEXTMAJB 00003B02 F 0 4256= 4281j NEXTMINE 00003B33 F 0 4340j 4362= 4377j NEXTSAF 00003A27 F 0 3764 3841 3898 3917= NEXTSEC 00003BFE F 10 435j 464= NEXTSUB 00003760 F 0 2750= 2797j NEXTSUBS 0000374D F 0 2681= 2694j *NMTPUNITS 00000004 F 5 1152= *NNVMCLOCKS 00000300 F 6 340= NOADTR 0000333F F 0 1194j 1249= NOADTRM 00003344 F 0 1253a 1256= NOADTW 00003332 F 0 1184j 1203j 1233= NOADTWM 00003337 F 0 1237a 1241= NOBADTRX 000037AC F 0 2841j 2881= NOBUILDLINE 00003269 F 0 957a 967= NOCHANGE 000038BB F 0 3315j 3320j 3329j 3342= NOCHEKEXT 0000397A F 0 3521j 3526= NOCONVERT 000030E2 F 0 604j 609= NODIR1DUP 00003835 F 0 3150j 3154= NODIR1W 000038A1 F 0 3288j 3290j 3298= NODIR2DUP 00003908 F 0 3380j 3383= NODIR2W 0000393A F 0 3439j 3441j 3451= NODROP 00003997 F 0 3559j 3561j 3564= NOERR 000036C7 F 0 2455j 2463= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 23 NOERR 000037AB F 0 2866j 2872j 2876= NOERRORS 0000320F F 0 800j 826= NOFREEW 00003325 F 0 1157j 1218= NOFREEWM 00003329 F 0 1221a 1225= NOFSN 000033DA F 0 1578j 1592= NOFSZCHNG 0000399D F 0 3568j 3570j 3573= NOMORESUBS 00003758 F 0 2683j 2697= NOORDER 0000399F F 0 3519j 3524j 3578= NOPREVB 00003320 F 0 1186j 1204= NOREBUILD 00003260 F 0 771j 955= NOREUSE 000033F8 F 0 1639j 1643= NOSHL 0000398A F 0 3533j 3544= NOSIZECALC 000030DD F 0 597j 602= NOSUBSLIST 00003758 F 0 2668j 2698= NOT2BLOCK 000032E6 F 0 1091j 1096= NOTELL 00003485 F 0 1980j 1990= NOTFIRST 00003306 F 0 1174j 1177= NOTFREE 000032DD F 0 1083= 1087j 1101j NOTFREE 0000367E F 0 2282j 2289= NOTUDIR1 0000339A F 0 1483j 1494= NOWRITE 000033E8 F 0 1601j 1603j 1610= NOWRITEIT 000039D0 F 0 3661j 3667= NOWRITEM 000039D5 F 0 3671a 3675= NPS 00000080 F 4 134= 135e 136e 148e NULLPWMESS 000038F6 F 0 3223a 3362= NUMELEM 00178801 F 10 24= 30s 31 40 NUMELEM 00178808 F 10 88= 92s 204 210 217 NUMSLOTS 00000010 F 4 47= 48e *NVMBASE 00000002 F 6 208= NVMCLKBYTS 00000004 F 6 300= 301 340 *NVMDATDRFT 00000033 F 6 237= NVMDEADCNT 00000010 F 6 303= 305 *NVMDEATH 00000080 F 6 307= *NVMDEATHE 00000060 F 6 304= *NVMFACACC 00000001 F 6 257= *NVMFACCPU 00000001 F 6 251= *NVMFACCTC 00000001 F 6 272= *NVMFACCTU 00000001 F 6 275= *NVMFACDISK 00000001 F 6 266= *NVMFACLPC 00000001 F 6 269= *NVMFACMCU 00000001 F 6 245= *NVMFACMSC 00000001 F 6 263= *NVMFACMTC 00000001 F 6 278= *NVMFACMTU 00000001 F 6 281= *NVMFACPAGE 00000020 F 6 248= *NVMFACPORT 00000008 F 6 260= *NVMFACPPU 00000001 F 6 254= *NVMFACVTC 00000001 F 6 284= *NVMFACVTU 00000001 F 6 287= *NVMLFPPW 00000011 F 6 214= *NVMLFPPW1 00000012 F 6 215= *NVMLFPPW2 0000001A F 6 216= *NVMMAXACC 00000044 F 6 256= *NVMMAXCPU 00000042 F 6 250= *NVMMAXCTC 00000049 F 6 271= *NVMMAXCTU 0000004A F 6 274= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 24 *NVMMAXDISK 00000047 F 6 265= *NVMMAXLPC 00000048 F 6 268= *NVMMAXMCU 00000040 F 6 244= *NVMMAXMSC 00000046 F 6 262= *NVMMAXMTC 0000004B F 6 277= *NVMMAXMTU 0000004C F 6 280= *NVMMAXPAGE 00000041 F 6 247= *NVMMAXPORT 00000045 F 6 259= *NVMMAXPPU 00000043 F 6 253= *NVMMAXVTC 0000004D F 6 283= *NVMMAXVTU 0000004E F 6 286= *NVMRFPPW 00000000 F 6 210= *NVMRFPPW1 00000001 F 6 211= *NVMRFPPW2 00000009 F 6 212= *NVMSIZE 00000080 F 6 207= *NVMSSN 0000003C F 6 242= *NVMSSUSN 00000038 F 6 240= *NVMTAPEPW 00000022 F 6 233= NWREVISION 00003015 F 0 432= 606a *ODBADNAME 00000001 F 9 41= *ODBADPL 00000004 F 9 44= *ODBADSB 00000006 F 9 46= *ODBADVL 00000005 F 9 45= *ODISYR 0000000B F 9 51= *ODNOTDISK 00000002 F 9 42= *ODOFFLINE 00000003 F 9 43= *ODOOPS 00000008 F 9 48= *ODPFM 0000000A F 9 50= *ODSUBBIG 00000007 F 9 47= *ODVIU 00000009 F 9 49= OFFLINE 000080D5 F 0 349= 460s 473s 568 1442 2098 4574 OKEXIT 00003AE8 F 0 4176j 4206= 4212j 4222j 4234j 4282j OLDDATE 0000300E F 0 421= 1905 ONCEFREE 000080AC F 0 337= 762a 2950s ONEBITS FFFFFFFF F 0 411x F 4 15= 81e 82e ONLYONE 00003C01 F 10 397j 470= ONPLMERGE 0000301E F 0 461j 474= ONPLSTART 0000301B F 0 259a 459= *ONVMCLOCKS 00000050 F 6 301= OPENERRTAB 00003045 F 0 525a 533= OPLVECTPC! 00000000 F 8 10= 54a *ORADDAFT 000000A2 F 7 1079= *ORATTACH 00000013 F 7 1001= *ORBKCACCT 00000051 F 7 1039= *ORBKUPACT 000000C1 F 7 1090= *ORBKUPDONE 000000C4 F 7 1096= *ORBKUPFIL 000000C2 F 7 1091= *ORBKUPVOL 000000C0 F 7 1089= *ORBUSYVOL 00000047 F 7 1034= *ORCANOPMSG 00000162 F 7 1201= *ORCAUTHDL 000000F2 F 7 1133= *ORCAUTHSL 000000F3 F 7 1134= *ORCHGAUTHL 000000E1 F 7 1121= *ORCLRPNUM 00000171 F 7 1205= *ORCPUSTOP 000001B1 F 7 1256= *ORCPUSTRT 000001B2 F 7 1257= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 25 *ORCREACCT 00000050 F 7 1038= *ORCREAUTHE 000000F0 F 7 1128= *ORCREAUTHL 000000E0 F 7 1118= *ORCVOLNAME 00000190 F 7 1222= *ORCVOLNEWO 00000193 F 7 1231= *ORCVOLPWD 00000191 F 7 1225= *ORCVOLSSN 00000192 F 7 1228= *ORCVOLTITLE 00000194 F 7 1234= *ORDELAFT 000000A3 F 7 1080= ORDEND 00003C04 F 10 434j 476= ORDERCYL 00003BD3 F 0 4354 F 10 386 395= *ORDESACCT 00000060 F 7 1042= *ORDESAUTHE 000000F8 F 7 1129= *ORDESAUTHL 000000E8 F 7 1124= *ORDEVINFO 00000110 F 7 1150= *ORDISMOUNT 00000041 F 7 1016= *ORDISMTDRV 00000045 F 7 1027= ORDLOOP 00003BDA F 10 404= 461j *ORFORMAT 00000152 F 7 1186= *ORGAUTENS 000000FF F 7 1141= *ORGAUTHDL 000000FA F 7 1137= *ORGAUTHSL 000000FB F 7 1138= *ORGENOPMSG 00000160 F 7 1196= *ORGETAUTHL 000000E9 F 7 1125= *ORGETFP 000000C3 F 7 1092= *ORGETOPMSG 00000161 F 7 1199= *ORGETTRC 00000138 F 7 1165= *ORGOODBYE 00000011 F 7 997= *ORGSYSINFO 000001A0 F 7 1249= *ORGVOLNAME 00000198 F 7 1237= *ORGVOLNEWO 0000019B F 7 1243= *ORGVOLSSN 0000019A F 7 1240= *ORGVOLTITLE 0000019C F 7 1246= *ORHEADCHK 00000154 F 7 1190= *ORHELLO 00000010 F 7 995= *ORINHIBVOL 00000042 F 7 1019= *ORINITEND 000000D4 F 7 1111= *ORINITFMT 00000155 F 7 1192= *ORINITVOL 000000D0 F 7 1104= *ORLOGONP 00000012 F 7 999= *ORMAINTR 00000140 F 7 1175= *ORMAINTRSUB 00000142 F 7 1176= *ORMAINTW 00000150 F 7 1181= *ORMAPFP 000000C5 F 7 1100= *ORMOUNT 00000040 F 7 1014= *ORMOUNTMAI 000000B0 F 7 1084= *ORMOUNTVOL 00000046 F 7 1031= *ORPABORT 00000093 F 7 1070= *ORPALLOW 00000071 F 7 1046= *ORPEVICT 00000091 F 7 1067= *ORPGO 000001D1 F 7 1262= *ORPINFO 00000072 F 7 1049= *ORPINHIB 00000070 F 7 1045= *ORPRESET 00000074 F 7 1053= *ORPROCINFO 00000092 F 7 1069= *ORPSTOP 000001D0 F 7 1261= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 26 *ORPTERMIN 00000090 F 7 1066= *ORPUTFP 000000D3 F 7 1107= *ORPUTPFP 000000D5 F 7 1115= *ORPWARN 00000073 F 7 1051= *ORRCVRACT 000000D1 F 7 1105= *ORRCVRACTL 000000D6 F 7 1108= *ORRCVRFIL 000000D2 F 7 1106= *ORREADAFT 000000A0 F 7 1074= *ORREADCNT 00000101 F 7 1144= *ORREADIDX 000000A1 F 7 1077= *ORREADNVM 00000141 F 7 1178= *ORRESETDRV 00000156 F 7 1193= *ORRESETVM 00000014 F 7 1003= *ORRWCOUNTS 00000103 F 7 1146= *ORSECTRK 00000153 F 7 1188= *ORSESSINFO 00000092 F 7 1068= *ORSETCPU 000001B0 F 7 1253= *ORSETPNUM 00000170 F 7 1204= *ORSLEEP 00000030 F 7 1009= *ORSTOPDYNW 00000132 F 7 1163= *ORSTOPMON 00000131 F 7 1162= *ORSTOPTRC 00000130 F 7 1161= *ORSTOPXMON 00000133 F 7 1164= *ORSTRTBAT 00000180 F 7 1210= *ORSTRTDYNW 00000122 F 7 1156= *ORSTRTJOB 00000182 F 7 1216= *ORSTRTMON 00000121 F 7 1155= *ORSTRTSPLR 00000183 F 7 1218= *ORSTRTTERM 00000181 F 7 1214= *ORSTRTTRC 00000120 F 7 1153= *ORSTRTXMON 00000123 F 7 1157= *ORTADJUST 00000081 F 7 1058= *ORTAKEPAGS 000001C0 F 7 1259= *ORTIMPAR 00000082 F 7 1063= *ORTZONE 00000080 F 7 1056= *ORVANISH 00000020 F 7 1006= *ORVINFO 00000043 F 7 1022= *ORVOLHANDLE 000000B1 F 7 1085= *ORVOLINFO 00000044 F 7 1025= *ORWRITECNT 00000102 F 7 1145= *ORWRITENVM 00000151 F 7 1183= OTHERMSG 00003C8D F 0 4626a 4634= OTHERSCKD 00003C8C F 0 4587j 4630= OUTBUF 000080BC F 0 347= 805a 4661a 4664a OUTLOOP 00003B69 F 10 111= 186j *PAGEANDISP 00001560 F 4 145= PAGEBUF 00178801 F 0 4569= 4580s 4594 PAGEERROR 00178806 F 0 1423= 1637s 1645 1649 *PAGEFIELD 00001C80 F 4 147= PAGEIN 00003376 F 0 1189 1357 1394 1426= 2497 2555 2593 2672 2844 2915 2927 2998 3052 3165 3232 3247 3396 3537 3926 4191 4227 4246 4263 4368 4449 PAGEINBL 00178802 F 0 1420= 1429s 1441 1607a PAGEINR34 00178804 F 0 1422= 1431s 1629 PAGEOUT 0000349B F 0 876 881 1153 1180 1199 1605 2063 2087= 2761 3293 3336 3446 3657 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 27 PAGEOUTBL 00178801 F 0 2081= 2089s 2097 PAGEOUTDA 00178803 F 0 2083= 2088s 2091 2095s 2109 2127a PAGEOUTFL 00178802 F 0 2082= 2090s 2093 2111a PAGEOUTR4 00178804 F 0 2084= 2105s 2113 2132 PAKN 0000300A F 0 417= 814 PAKNO 00003009 F 0 416= 812 PAKY 00003008 F 0 415= 810 PAKYES 00003007 F 0 414= 808 *PARAMM MACRO F 3 280= PASSEND 00003B97 F 10 114j 192= PASSEND1 00003B9D F 10 183j 201= PASSLOOP 00003B65 F 10 103= 213j PASSSIZE 00178801 F 10 81= 94s 118 181 184 202 208s PASTVOLEND 000033F1 F 0 1438j 1633= PFALTBIT 00001C10 F 4 129= 131e *PFCNTL 00001A30 F 4 127= *PFNOREFVAL 00060000 F 4 131= *PFPAGENUM 000028C0 F 4 133= PFPTR 0012C000 F 0 1444 1445 2100 2101 4576 4577 F 4 124= *PFREFBIT 00001E10 F 4 130= PFROBIT 00001A10 F 4 128= 131e *PFSIZE 00000100 F 4 135= *PFSLOT 00000840 F 4 126= PGNUMFLD 00000140 F 6 52= 2364e PGNUMFLDMAJ 000000A0 F 6 53= 2466e PGNUMFLDMIN 000014A0 F 6 54= 2468e PLBAD 000036E5 F 0 2502j 2514j 2524= PLBDTRXDA 00000018 F 0 2840 2846 F 6 838= *PLCYLPPCK 00000012 F 6 835= PLDA 00000000 F 0 2494 2499 F 6 814= PLFBI 00008001 F 0 302= 2501a *PLFLAGS 00000004 F 6 822= *PLFORMNEW 00002E10 F 6 824= *PLFORMRFRB 00002C10 F 6 825= *PLFRMTRID 00000005 F 6 827= PLINIDATE 00000007 F 0 2511a 2512a 2521a 2522a F 6 828= *PLINITSCANS 00000009 F 6 829= PLMAKER 00000000 F 0 2509a F 6 818= PLMODESN 00000021 F 6 844= 845e *PLMODESNL 0000004C F 6 845= *PLNODRVID 00003010 F 6 823= PLPLACE 00004000 F 0 283= 2500a 2503 2509a 2510a 2511a 2512a 2519a 2520a 2521a 2522a 2840 2846 *PLSDFREV 0000001F F 6 842= *PLSDPID 0000001B F 6 841= PLSDVID 00000019 F 0 2519a F 6 840= *PLSECPTRK 00000010 F 6 833= *PLSERIAL 00000000 F 6 817= PLSERNO 00000001 F 0 2510a 2520a F 6 819= PLSIZE 00000013 F 0 2503 F 6 836= *PLTRKPCYL 00000011 F 6 834= *PNBOOTLOC 00000084 F 4 155= *PNPAGEZERO 00000080 F 4 153= PNTRFDE 000080D8 F 0 352= 3272s 3423s 3515 3547 3556 3590 3885 4048 4161 4444 *PORTALWRIT 0000008B F 5 1076= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 28 *PORTBOF 00003010 F 5 1017= *PORTBREAK 00000087 F 5 1068= *PORTBRK 00003610 F 5 1020= *PORTCD 00003A10 F 5 1022= *PORTCHKPAR 00003810 F 5 1085= *PORTCIRATE 00000081 F 5 1052= *PORTCLRAIN 0000008C F 5 1078= *PORTCORATE 00000082 F 5 1053= *PORTCRALL 0000001F F 5 1103= PORTCRCXON 00003A10 F 5 1100= 1103e *PORTCRESET 0000008E F 5 1097= PORTCRFBR 00003610 F 5 1098= 1103e 1104e PORTCRFI 00003E10 F 5 1102= 1103e PORTCRFO 00003C10 F 5 1101= 1103e PORTCRFS 00003810 F 5 1099= 1103e 1104e *PORTCRINIT 00000018 F 5 1104= *PORTCS 00003E10 F 5 1024= *PORTCSTAT 00000083 F 5 1056= *PORTCSTAT2 0000008D F 5 1080= *PORTCZAP 0000008F F 5 1106= *PORTDSR 00003C10 F 5 1023= *PORTDWELL 00000086 F 5 1066= *PORTECHOOF 00000089 F 5 1072= *PORTECHOON 00000088 F 5 1070= *PORTEVENP 00000002 F 5 1093= *PORTFBRK 00003410 F 5 1019= *PORTFFE 00003210 F 5 1018= *PORTFLUSHI 00000085 F 5 1064= *PORTFLUSHO 00000084 F 5 1062= *PORTHIBIT 00000001 F 5 1092= *PORTIERR 00000091 F 5 1114= *PORTLAST 00003010 F 5 1013= *PORTNOPAR 00000000 F 5 1091= *PORTODDP 00000003 F 5 1094= *PORTPARITY 00003A20 F 5 1087= *PORTPCINIT 00000090 F 5 1111= *PORTRI 00003810 F 5 1021= *PORTSBRK 00003410 F 5 1083= *PORTSCD 00003210 F 5 1058= *PORTSCTS 00003010 F 5 1081= *PORTSDTR 00003410 F 5 1059= *PORTSRDE 00003610 F 5 1084= *PORTSRI 00003010 F 5 1057= *PORTSRTS 00003810 F 5 1060= *PORTSSTOP2 00003E10 F 5 1095= *PORTSTAT 00003210 F 5 1014= *PORTSXOF 00003210 F 5 1082= *PORTWRITIN 0000008A F 5 1074= POUTERROR 000034B4 F 0 2115= 2133j *PPU3WRD 00000008 F 5 589= *PPUABORT 00000001 F 5 572= *PPUADDR1 00000005 F 5 582= *PPUADDR2 00000007 F 5 587= *PPUAMEMA 00001560 F 5 584= *PPUASLOT 00000840 F 5 583= *PPUCABLED 00000000 F 5 542= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 29 *PPUCCOUNT 000022F0 F 5 580= *PPUCHAN 00003020 F 5 539= *PPUCHANS 00000004 F 5 540= *PPUCHANS1 00000002 F 5 573= *PPUCHANS2 00000003 F 5 574= *PPUCLAST 00002010 F 5 579= *PPUCNT1 00000004 F 5 578= *PPUCNT2 00000006 F 5 586= *PPUIBCNR 00003210 F 5 552= *PPUIBTR 00002010 F 5 564= *PPUICIA 00002810 F 5 559= *PPUICONF 00002A10 F 5 558= *PPUIDMAD 00003E10 F 5 545= *PPUIDMAE 00003A10 F 5 547= *PPUIDMANB 00003010 F 5 553= *PPUIDPPE 00002410 F 5 562= *PPUIINTC 00003810 F 5 548= *PPUIINTP 00003C10 F 5 546= *PPUIINTR 00002C10 F 5 556= *PPUILAST 00003410 F 5 551= *PPUIMPE 00002E10 F 5 555= *PPUINTSTAT 00000001 F 5 544= *PPUIPIA 00002610 F 5 561= *PPUIROLL 00003610 F 5 550= *PPUITOUT 00001E10 F 5 569= *PPUIXTRA 00002210 F 5 563= *PPURESET 00000000 F 5 571= *PPUSCSTAT 00000003 F 5 576= *PPUSSSTAT 00000002 F 5 575= PREPIN 00003C97 F 0 804 4643 4659= *PREPOUTM MACRO F 3 251= PREVADTB 00178802 F 0 1028= 1058s 1130 1172 1185 1191a 1200a 1205 1208s 1252a PREVBLOCK 000080E3 F 0 361= 1206s 1347s 1364s 1535 2312a 3881s 3924s PRINTHEADR 000030C0 F 0 561j 564= PRINTIT 00003867 F 0 3216j 3219= PRINTMESS 0000371F F 0 2613j 2616= *PRIVWORD 00170801 F 6 1595= PRJB 00000002 F 0 1710= 1723x 1724x 1726x 1727x 1728x 1729x 1731x 1732x 1733x 1734x 1735x PROBLEM 00003A15 F 0 3837j 3849= PROG MACRO F 0 403 F 3 82= PROGRAM! 00003000 F 0 273e 273= 273a 273e 275e 275= 403a F 3 72a 72e 72e 72= PROJBIT 00003C10 F 0 1561j 1704= 1710e PROJIN 000033CC F 0 1561j 1569= PSECT! 00000000 F 0 273= 275e 275e 275a 275a 275= 403a 403a 403= 403e 403e F 3 72= *PSRBCDOTRP 00002C10 F 4 90= *PSRCARRY 00000004 F 4 100= PSRCARRYB 00003A10 F 4 96= 100e *PSRCONDB 00003C20 F 4 97= *PSRFIXATRP 00003010 F 4 91= *PSRFLTATRP 00003210 F 4 92= PSRMODIF 00000010 F 0 3198 3198 F 4 99= F 10 348 361 PSRMODIFB 00003610 F 4 94= 99e 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 30 PSROVERFB 00003810 F 4 95= 101e *PSROVERFLOW 00000008 F 4 101= *PSRUNDETRP 00003410 F 4 93= *PURGESDV 0000005A F 6 1837= PUTINR1 00003B7C F 10 138j 150= PWCHKFLAG 00003019 F 0 437= 3217 PWNOTNULL 0000386B F 0 3213j 3218j 3224= *PWRUPADDR 00000000 F 4 12= *RAFCHARIDX 000028C0 F 6 2470= RAFCHECK 00003445 F 0 1823j 1825j 1836= RAFJTAB 00003ACF F 0 4166 4169= 4185 *RAFMAJINDX 000000A0 F 6 2466= *RAFMININDX 000014A0 F 6 2468= RAFSIZE 00178802 F 0 4156= 4160s 4197s 4203s 4207 4233s 4252s 4269s 4275s *RAFTEMPTY 00000000 F 6 1825= RAFTLARGE 00000003 F 0 4181 F 6 1828= RAFTSMALL 00000002 F 0 4178 F 6 1827= *RAFTTINY 00000001 F 6 1826= RDISKCB 000080B4 F 0 345= 520a 612a 1448a 2106a 2505a 4349a 4593a READACCT 000080EE F 0 373= 1555 2308a 3142s 4058a 4073a 4464a 4478a 4492a *READACCTPW 000080F1 F 0 375= READASN 000080DF F 0 359= 1485s 1580 READERROR 000033F2 F 0 1454a 1478j 1636= READEXT 000080F5 F 0 377= 2311a 3260s 3523 3527s 3580s 3588a 4061a 4076a 4467a 4481a 4495a *READFILEPW 000080F6 F 0 378= READNAME 000080F3 F 0 376= 2310a 3259s 3517 3518s 3587a 4060a 4075a 4466a 4480a 4494a READNEXT 000039ED F 0 3758= 3768j 3778j READOK 000033EE F 0 1613j 1626= READPROJ 000080F0 F 0 374= 1572 2309a 3144s 4059a 4074a 4465a 4479a 4493a READSERIAL 000080E1 F 0 360= 1581s 1587 3530s *READSYS 000080EB F 0 371= *READSYSPW 000080EC F 0 372= READVOL 000080E9 F 0 370= 761a 889a 911a 926a 2602s 2618a REBUILDFLAG 00003014 F 0 431= 494s 514s 585s 770 RECERROR 00003AA9 F 0 3850 4019 4090 4107= *RECHDRLEN 00000003 F 0 385= RECORDSIZE 000080A3 F 0 327= 3883s 3999s 4015 RELBLKCHEK 0000343B F 0 1540 1797 1821= RELBLKEND 00003444 F 0 1832= 1844j 1868j 1876j RELBLOCK 000080AA F 0 335= 1188s 1348s 1830 1843 1873 2496s 2554s 2592s 2671s 2843s 2914s 2995s 3049s 3160s 3231s 3246s 3392s 3536s 3884s 3921s 4027 4163s 4260s 4448s REMOVENT 0000377A F 0 2747j 2788= RESMINPTR 00003B13 F 0 4276= 4287j *RESTRWORD 00170800 F 6 1593= RETERROR 0000397B F 0 3528= 3591j RETURN 000036AB F 0 2366j 2378= REUSEDMESS 000037AE F 0 2875a 2887= REUSEMARK 000080D9 F 0 353= 1612 1638 1642s 2405s 2414s 2454 2460s 2871 2883s REUSEMES 00003415 F 0 1641a 1687= *REVBACKUP 00000000 F 6 13= *REVMNTVOL 18000000 F 6 10= *REVVOLLRAF 10000000 F 6 11= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 31 *REVVOLUME 08000000 F 6 9= RPTERROR 0000366F F 0 1511 1621 1644 1852 1928 1984 2043 2166 2269= 2446 2456 2791 2862 3581 4119 RPTESR4 00178801 F 0 2172= 2302s 2314 *RTYPEBIN 00000002 F 6 2346= *RTYPECOMM 00000005 F 6 2349= *RTYPEFORM 00000003 F 6 2347= *RTYPELABEL 00000004 F 6 2348= *RTYPETEXT 00000000 F 6 2344= *RTYPETEXTF 00000001 F 6 2345= SAFBADMES 00003A98 F 0 4064a 4083= *SAFBLKNUM 00000140 F 6 2364= *SAFCHARNUM 000028C0 F 6 2365= SAFCHECKER 00003A3C F 0 3770 3948 3973= SAFCHKDUP 000039FB F 0 3753j 3789= SAFDONE 000039F9 F 0 3761j 3765j 3773j 3780= SAFEXIT 000039FA F 0 3782= 3796j SAFSIZE 000080A4 F 0 328= 3781 3882s 3932s SAFZEROMES 00003A87 F 0 4077a 4081= SAVER2 000080A5 F 0 329= 3840s 3845 SAYDIRVER 00003025 F 0 479j 489= SEC2DA 000080B0 F 0 341= 882a 2606s 2925 2929a SECADTBTM 00000010 F 0 1131s F 6 1354= SECADTCNT 00000018 F 0 1133s 2948 F 6 1355= SECADTINDX 00178801 F 0 1339= 1343s 1349s SECADTNUM 00000008 F 0 783 784 843 865 2946 2948 F 6 1322= 1353 1354 1355 SECADTTOP 00000008 F 0 844 1129s 1350 F 6 1353= *SECAFTENTS 0000002B F 6 1360= SECAFTPTR 00000129 F 0 2993 F 6 1362= SECAFTSIZ 00000029 F 0 2986 F 6 1358= SECBAD 00003274 F 0 880j 885j 976= SECBADM 00003278 F 0 979a 983= *SECBKUPE 00000240 F 6 1396= *SECBUDATE 00000001 F 6 1348= SECDA 000080AF F 0 340= 877a 978a 2604s 2912 2917a *SECDATCOR 0000022F F 6 1372= *SECDATDRFT 0000022E F 6 1370= *SECDATERR 0000022D F 6 1369= SECFBI 0000802D F 0 306= 879a 884a 2919a SECIDXENTS 0000002A F 0 3088 3093a 3100s F 6 1359= SECIDXPTR 0000002C F 0 3047 F 6 1361= SECIDXSIZ 00000028 F 0 3084 3198 F 6 1357= SECLASTDT 00000229 F 0 847s F 6 1367= *SECLASTSL 0000022B F 6 1368= SECMNTDAT 00000002 F 0 848s F 6 1350= *SECNUMACC 00000235 F 6 1385= *SECNUMCPU 00000233 F 6 1383= *SECNUMCTC 0000023A F 6 1390= *SECNUMCTU 0000023B F 6 1391= *SECNUMDISK 00000238 F 6 1388= *SECNUMLPC 00000239 F 6 1389= *SECNUMMCU 00000231 F 6 1381= *SECNUMMSC 00000237 F 6 1387= *SECNUMMTC 0000023C F 6 1392= *SECNUMMTU 0000023D F 6 1393= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 32 *SECNUMPAGE 00000232 F 6 1382= *SECNUMPORT 00000236 F 6 1386= *SECNUMPPU 00000234 F 6 1384= *SECNUMVTC 0000023E F 6 1394= *SECNUMVTU 0000023F F 6 1395= SECPCYL 000080E7 F 0 365= 557s F 10 409 411 SECPLACE 00005000 F 0 287= 847s 848s 878a 883a 1129s 1131s 1133s 1350 2918a 2948 2986 2993 3047 3084 3088 3093a 3100s 3198 SECPTR 00003003 F 0 409= F 10 453 465s SECPTRAK 000080E6 F 0 364= 554s F 10 354 413 449 451 *SECSUN 00000000 F 6 1347= SECTBITS 00000040 F 10 337= 356s 426 SECTLEND 00003BEB F 10 423j 428= SECTLOOP 00003BE5 F 10 421= 429j 454j SECTMOD 00003BF4 F 10 447= 455j 467j SECTORS 004080E8 F 0 367= 409a SECTORSW 000080E8 F 0 366= F 10 417s *SECTZONE 00000226 F 6 1364= *SELFDATE1 80000001 F 6 866= *SELFDATE2 80000002 F 6 867= *SELFRUNNUM 04000000 F 6 864= *SELFVOLSIZ 80000000 F 6 865= SENDMESS 00003407 F 0 1664= 1683j SETERRFLAG 000036C6 F 0 2450j 2461= SHARE 000030B6 F 0 522j 551= *SHLACCT 0016C801 F 6 1704= *SHLACCTP 0016C803 F 6 1705= *SHLACCTSYS 0016C806 F 6 1709= *SHLACTOPT 0008C220 F 6 1697= *SHLACTPRIV 0008C630 F 6 1698= *SHLACTPRVM 00000002 F 6 1701= *SHLACTPRVR 00000001 F 6 1700= *SHLACTPRVW 00000000 F 6 1699= *SHLACTPRVX 00000003 F 6 1702= *SHLACTPW 0008C210 F 6 1695= *SHLACTSYS 0008C410 F 6 1696= *SHLDISK 0008D180 F 6 1694= *SHLDSKFLG 0008C010 F 6 1693= SHLDSKFLGB 00000010 F 0 3228j 3533j F 6 1691= 1693e *SHLENTLEN 00000004 F 6 1706= *SHLENTPLEN 00000006 F 6 1708= *SHLENTRYF 0008CC10 F 6 1703= *SHLENTSLEN 00000007 F 6 1710= SHLFLAGW 0016C800 F 6 1688= 1693e 1694e 1695e 1696e 1697e 1698e 1703e 1706e 1708e 1710e *SHLPWORD 0016C804 F 6 1707= SIZECALC 0000300F F 0 423= 493s 581s 596 3097 3289 3328 3440 3569 SIZECALCM 000030FC F 0 599a 623= *SLTTCPU 00000002 F 5 69= *SLTTMEM 00000001 F 5 68= *SLTTPPU 00000003 F 5 70= *SLTTSSU 00000004 F 5 71= *SLTTUNK 00000000 F 5 67= *SMUPCC 00001840 F 5 127= *SMUPCMND 00000C10 F 5 126= *SMUPCRCEL 00000002 F 5 135= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 33 SORT 00003B4F F 0 4346 F 10 21 29= SORTEND 00003B55 F 10 39= 55j SORTMINOR 0000301A F 0 446= 4334 SORTPLACE 00007800 F 0 298= F 10 53a 99a 251a 307s *SSUALARM 00003610 F 5 447= *SSUBOOTFP 00000010 F 5 469= *SSUBREAKB 00002E10 F 5 426= *SSUCHARIN 0000000D F 5 451= *SSUCHAROUT 00000008 F 5 425= *SSUCLOCKL 00000002 F 5 415= *SSUCLOCKU 00000001 F 5 414= *SSUCLOKAD 00000017 F 5 505= *SSUCOFFSET 00001400 F 5 409= *SSUCPUBUSE 00000007 F 5 422= *SSUCPUERR 00000006 F 5 421= *SSUCPUHALT 00000005 F 5 420= *SSUDECCLK 00000004 F 5 417= *SSUDISP03 0000000A F 5 443= *SSUDISP47 0000000B F 5 444= *SSUDISP89 0000000C F 5 445= *SSUDWELLB 00002C10 F 5 427= *SSUERRLOG 00000012 F 5 485= *SSUFENCE 00000009 F 5 433= *SSUFPSWCH 00000011 F 5 472= *SSUHORN 00003410 F 5 446= *SSUIMCI 00003010 F 5 460= *SSUIMCLKSTR 00003610 F 5 463= *SSUIMCO 00003210 F 5 461= *SSUIMERR 00003810 F 5 464= *SSUIMFPS 00003C10 F 5 466= *SSUIMNVM 00003A10 F 5 465= *SSUIMTICK 00003E10 F 5 467= *SSUINCCLK 00000003 F 5 416= *SSUINTMASK 0000000F F 5 458= *SSUMAXCC 000000FF F 5 428= *SSUMISCST 0000000E F 5 453= *SSUMSBC 00003C10 F 5 455= *SSUMSLFP 00003E10 F 5 454= *SSUMSNVM 00003A10 F 5 456= *SSUNVM 00001800 F 5 509= *SSURFP 00000010 F 5 474= *SSUROFFSET 00001000 F 5 407= SSUSW1 00003810 F 5 479= 483e SSUSW2 00003A10 F 5 480= 483e SSUSW3 00003C10 F 5 481= 483e SSUSW4 00003E10 F 5 482= 483e *SSUSWITCH 00003840 F 5 483= *SSUSWMAINT 00003410 F 5 477= *STORE 00000000 F 4 14= *STPDUBL 00000C10 F 4 29= *STPNLAST 00000810 F 4 27= *STPVALUE 00000A10 F 4 28= STRAYFLAG 00003018 F 0 435= 959 STRAYLINE 0000326E F 0 962a 968= SUBFLAG 00003010 F 0 424= 582s 2796 SUBSBAD 00003758 F 0 2677j 2699= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 34 SUBSBADDY 00000000 F 0 2682 2744 F 6 1229= 1232e *SUBSECNT 00000200 F 6 1233= SUBSFBI 00008017 F 0 304= 2676a 2760a 2764a SUBSLNTH 00000002 F 0 2692 2751 2805 2808 F 6 1232= 1233e SUBSPLACE 00004800 F 0 285= 2675a 2680a 2693a 2742a 2752a 2763a 2800a SUBSSUB 00000001 F 0 2686 F 6 1231= *SYSACCT 00000000 F 9 93= *SYSPROJ 00000002 F 9 94= *SYSTNUM 00002100 F 6 1146= TAKEXIT 00003C33 F 0 4504= 4511j TALPH 00003C10 F 0 807j F 8 48= *TBLNK 00003610 F 8 51= *TDELM 00003A10 F 8 49= TELLNOT 00003497 F 0 2039j 2049= *TEOL 00003810 F 8 50= *TERR 00000000 F 8 52= THISBLK 00178801 F 0 1027= 1089s 1175 1181a 1196 1207 1236a THISCYL 00178804 F 10 392= 406s 448 THISLIST 00178801 F 0 705= 858s 862a 864s THISPLACE 00003800 F 0 3065j 3068= *TIMLIM 00170802 F 6 1608= *TIMUSD 00170803 F 6 1609= TINYRAF 00003AEC F 0 4171a 4221= *TNUM 00003E10 F 8 47= TYPEFBI 00178801 F 0 4312= 4317s 4367 4408 TYPELAST 00000010 F 0 3549 3620= TYPETAB 0000341F F 0 1397 1495 1501 1523 1543 1560 1577 1736= 4607 TYPETABLE 02003419 F 0 1714= 1736a UD 00000000 F 6 2162= 2205 2210e 2238e *UD1LFDE 000003D8 F 6 2234= *UD1LINDX 000003F8 F 6 2256= UD2FDECNT 0000002A F 0 3431 F 6 2212= 2238e *UD2LFDE 000003D8 F 6 2238= UDACCT 00000000 F 0 3178 3188a 3198 3203a 3221a F 6 2163= UDAUTHLIST 00000040 F 0 3242 F 6 2203= *UDBYE 0000001A F 6 2180= *UDBYEAC 00000015 F 6 2177= *UDBYEACP 00000017 F 6 2178= *UDBYEACPW 00000018 F 6 2179= *UDBYEEXT 0000001C F 6 2181= *UDBYEPW 0000001D F 6 2182= *UDENCRFLG 00000010 F 6 2186= UDFDECNT 00000026 F 0 3280 F 6 2211= 2234e UDFDLIST 00000060 F 0 3269a 3376a 3443a F 6 2207= 2210e 2234e 2256e UDFDSIZE 000003A0 F 6 2210= 2211e 2252e *UDHPR 00000010 F 6 2174= *UDHPRAC 0000000B F 6 2171= *UDHPRACP 0000000D F 6 2172= *UDHPRACPW 0000000E F 6 2173= *UDHPREXT 00000012 F 6 2175= *UDHPRPW 00000013 F 6 2176= UDINDCNT 000000B9 F 0 3458 F 6 2252= 2256e UDINDXADR 0008D183 F 0 3388 3444 F 6 2247= UDINDXDA2 0016C804 F 0 3379 F 6 2248= *UDINDXDAW 0016C803 F 6 2245= UDINDXEXT 0016C802 F 0 3386 F 6 2244= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 35 UDINDXLEN 00000005 F 0 3456 3458 F 6 2251= 2252e 2256e UDINDXNAM 0016C800 F 0 3384 F 6 2243= *UDINDXNUM 0016C00C F 6 2246= UDINDXPROT 00000834 F 6 2242= 2251e UDIR1EXT 00178807 F 0 3133= 3387s 3416 3485a UDIR1NAME 00178805 F 0 3132= 3385s 3413 3484a UDIRBLOCK 000080E5 F 0 363= 3163s 3389s 3398 3480a 3583 UDIRTYPE 000080E4 F 0 362= 3162s 3394s 3584 *UDLFDE 000003E8 F 6 2223= UDLIMITS 0000002B F 0 3317a 3330a F 6 2198= UDPASS 00000003 F 0 3212 F 6 2165= *UDPRIORITY 00000029 F 6 2189= *UDPRIVS 0000002A F 6 2190= UDPROJ 00000002 F 0 3181 3189a 3198 3204a 3214 3222a F 6 2164= UDSERNO 00000020 F 0 1484 F 6 2187= *UDSFLAGS 0000001F F 6 2183= UDSHLLIST 0000003C F 0 3227 F 6 2202= UDSHLSIZE 00000004 F 6 1713= 1857 1858 2202 *UDTITLE 0000004E F 6 2206= UDTITLEL 00000048 F 6 2204= 2205 2206 UDTYPE 0008001A F 0 3262 F 6 2169= UDWORDB 0000000A F 6 2168= 2169e *UINTARTHOV 00000010 F 7 67= *UINTATTACH 00000075 F 7 94= *UINTBCDO 0000000F F 7 66= *UINTBREAK 00000020 F 7 79= *UINTBRKINS 00000079 F 7 95= *UINTCEM 00000008 F 7 59= *UINTCHAIN 0000007B F 7 97= *UINTCKB 0000000C F 7 63= *UINTDIV0 00000011 F 7 68= *UINTFIXOVN 00000013 F 7 70= *UINTFIXOVP 00000012 F 7 69= *UINTFLTOVN 00000014 F 7 71= *UINTFLTOVP 00000016 F 7 73= *UINTFLTUFN 00000015 F 7 72= *UINTFLTUFP 00000017 F 7 74= *UINTGUNIT 00000028 F 7 87= *UINTIMI 00000006 F 7 57= *UINTIMS 00000003 F 7 54= *UINTINST 00000018 F 7 76= *UINTIONOV 0000000A F 7 61= *UINTLOGIN 0000007F F 7 107= *UINTLOGOFF 0000007A F 7 96= *UINTMPV 00000074 F 7 93= *UINTMSG 00000026 F 7 85= *UINTNEPATH 00000023 F 7 82= *UINTNETERM 00000022 F 7 81= *UINTOPRQ 0000007D F 7 99= *UINTOPRQA 00000027 F 7 86= *UINTOPRQL 00000001 F 7 100= *UINTOPRQP 00000005 F 7 104= *UINTOPRQT 00000002 F 7 101= *UINTOPRQUL 00000004 F 7 103= *UINTOPRQW 00000003 F 7 102= *UINTPARL 00000009 F 7 60= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 36 *UINTPTERM 0000007E F 7 105= *UINTSTKO 0000000E F 7 65= *UINTSTNG 0000000D F 7 64= *UINTTDISC 00000024 F 7 83= *UINTTIMCUT 00000021 F 7 80= *UINTTIMINT 00000025 F 7 84= *UINTTRACEI 0000001F F 7 77= *UINTUMODE 00000002 F 7 53= *UINTUMP 00000004 F 7 55= *UINTUNDEF 00000018 F 7 75= *UINTUOP 00000001 F 7 52= *UINTUOP2 0000000B F 7 62= *UINTVAR 0000007C F 7 98= *UINTVMFDE 00000071 F 7 90= *UINTVMFIDS 00000072 F 7 91= *UINTVMFISR 00000073 F 7 92= *UINTVMFPE 00000070 F 7 89= *UINTXTI 00000007 F 7 58= UNSUB 00003759 F 0 755 2708 2740= UNSUBERR 0000376B F 0 2765j 2772= UNSUBERRM 0000376E F 0 2774a 2778= UNSUBEXIT 00003763 F 0 2745j 2756= UNSUBLEAV 0000376A F 0 2757j 2768= 2775j UNSUBLP 0000375C F 0 2743= 2753j 2810j UNSUBR4 00178801 F 0 2737= 2789s 2795 UNUSEDSAF 00001810 F 0 386= 3998j *UPR15 000000F0 F 4 38= *URACCTCPUL 000000A8 F 7 849= *URACCTWCL 000000A9 F 7 852= *URBLKLIM 000000B2 F 7 863= *URBLKUSED 000000B3 F 7 866= *URBYE 00000090 F 7 836= *URCANOPMSG 00000151 F 7 945= *URCERPROC 00000089 F 7 830= *URCLRDEBUG 00000086 F 7 822= *URCLRTIMIN 00000142 F 7 939= *URCNAME 00000180 F 7 964= *URCPTIMEG 000000A1 F 7 843= *URCPTIMES 000000A0 F 7 840= *URDELAY 00000140 F 7 933= *URDELAYR 00000143 F 7 934= *URDROPPRIV 00000182 F 7 968= *URERRORGET 00000028 F 7 751= *UREXCLPAGE 000000C2 F 7 874= *URFORCEP 000000C4 F 7 875= *URFREELUN 00000122 F 7 922= *URFREEPAGE 000000C0 F 7 869= *URFSERNO 00000061 F 7 782= *URGENOPMSG 00000150 F 7 943= *URGETMSG 00000161 F 7 951= *URGETMSGA 00000162 F 7 953= *URGETPNUM 00000170 F 7 960= *URGETSSN 00000053 F 7 762= *URGETVERS 00000054 F 7 764= *URGIVELUN 00000123 F 7 924= *URGIVEUNIT 00000190 F 7 971= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 37 *URGRUNLUN 00000120 F 7 918= *URINTRGO 0000008A F 7 833= *URINTRTN 00000082 F 7 818= *URLEA 00000130 F 7 928= *URLEA2 00000131 F 7 929= *URLOADFACT 00000051 F 7 756= *URLUNITS 00000057 F 7 772= *URMAPINAS 00000110 F 7 915= *URMAYIRUN 00000055 F 7 766= *URNEXTLUN 00000121 F 7 920= *URPACKFI 00000101 F 7 910= *URPACKFS 00000102 F 7 911= *URPACKI 00000100 F 7 907= *URPAGETYPE 000000C1 F 7 872= *URPAKTIME 0000006C F 7 799= *URPAKTIML 0000006D F 7 800= *URPDSTRY 000000D2 F 7 884= *URPDSTRYA 000000D3 F 7 887= *URPDSTRYAP 000000D6 F 7 890= *URPDSTRYP 000000D5 F 7 889= *URPGETREG 000000F0 F 7 903= *URPGO 000000D0 F 7 881= *URPROCINFO 00000052 F 7 760= *URPROCLVL 00000058 F 7 774= *URPSETREG 000000E0 F 7 899= *URPSTEP 000000D4 F 7 882= *URRAWDATE 00000060 F 7 781= *URRCVUNIT 00000191 F 7 974= *URSCINTARM 00000081 F 7 816= *URSCMSGA 00000164 F 7 956= *URSENDERR 00000087 F 7 826= *URSENDMSG 00000160 F 7 948= *URSERPROC 00000088 F 7 829= *URSESBLKG 000000B1 F 7 860= *URSESBLKS 000000B0 F 7 856= *URSESSINFO 00000052 F 7 759= *URSESWCLK 000000A7 F 7 846= *URSETDEBUG 00000085 F 7 821= *URSETLGFSES 00000181 F 7 966= *URSETTIMIN 00000141 F 7 937= *URSSINTARM 00000080 F 7 815= *URSSMSGA 00000163 F 7 955= *URSTOP 00000070 F 7 803= *URSTOPA 00000078 F 7 808= *URSTOPAR 0000007A F 7 810= *URSTOPAZ 00000079 F 7 809= *URSTOPAZR 0000007B F 7 811= *URSTOPI 00000074 F 7 807= *URSTOPIA 0000007C F 7 812= *URSTOPR 00000072 F 7 805= *URSTOPZ 00000071 F 7 804= *URSTOPZR 00000073 F 7 806= *URTRAFFIC 00000050 F 7 755= *URUDRPINFO 00000056 F 7 769= *URUGDATE 00000064 F 7 793= *URULDATE 00000065 F 7 794= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 38 *URUNLDATE 00000063 F 7 788= *URUNRDATE 00000062 F 7 787= *URVARGET 00000020 F 7 742= *URVARGETS 00000021 F 7 747= *URVARSET 00000010 F 7 734= *URVARSETS 00000011 F 7 738= *URWRITEP 000000C5 F 7 876= *USERMSR 0000F000 F 4 83= VALUE 00178802 F 0 1966= 1972s 1975 1991 VALUE 00178802 F 0 2025= 2031s 2034 2050 VARIABLES! 0000FB0A F 0 273= 275a 403e 403= F 3 72= VARS MACRO F 0 275 F 3 74= VCLOSEDISK 000013EC F 0 613 F 8 26= *VDISKCB 000013E4 F 8 18= VDISPLAY 000013E3 F 0 481 490 F 8 17= VDONEEXIT 000013F0 F 0 617 F 8 32= VERDONEMES 0000323D F 0 912a 916= VERERRMES 0000324B F 0 927a 931= *VERRLOGPT1 000013FA F 8 42= *VERRLOGPTR 000013EA F 8 24= VERSION 00003001 F 0 407= 566a VERSIONM 000030E6 F 0 562a 621= *VEXTRACPUS 000013FC F 8 44= *VFETCHFNM 000013F6 F 8 38= VFETCHITEM 000013F5 F 0 806 F 8 37= VFETCHITMH 000013F8 F 0 496 509 F 8 40= VGETDATE 000013FB F 0 588 F 8 43= *VLAVREV 0000000C F 6 1163= *VLBKUPE 00000040 F 6 1175= *VLCDATE 00000008 F 6 1158= *VLFLAGINV 00000210 F 6 1161= *VLFLAGNEWO 00000410 F 6 1162= *VLFLAGS 0000000B F 6 1160= VLSECB2DA 00000013 F 0 2605 F 6 1171= VLSECBDA 00000012 F 0 2603 F 6 1170= *VLSSN 00000000 F 6 1140= VLSUBSDA 00000010 F 0 2667 F 6 1168= *VLTITLE 00000020 F 6 1174= VLTITLELEN 00000080 F 6 1173= 1174 VLVNAME 00000004 F 0 2601 F 6 1149= *VLVPASSW 00000006 F 6 1152= *VLVREV 0000000D F 6 1165= *VMEMPF 000013E6 F 8 20= *VMEMSPACE 000013ED F 8 27= VOLEXIT 0000322C F 0 891= 913j 928j 944j 960j 964j 994j *VOLFIELD 00000080 F 6 39= VOLLABELDA 00000001 F 0 2590 2595 F 6 1137= VOLLBAD 00003725 F 0 2598j 2628= VOLLFBI 00008022 F 0 305= 2597a VOLLPLACE 00004C00 F 0 286= 2596a 2601 2603 2605 2667 VOLLWHO 00003726 F 0 2615a 2632= VOLNOWBAD 00003284 F 0 863j 980j 991= VOLNOWBADM 00003287 F 0 993a 997= VOLSIZE 000080AD F 0 338= 764 768a 781 1437 2444 2493s 2504s 2619a 2859 4584 VOPENDISK 000013EB F 0 521 F 8 25= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 39 *VPF4SSU 000013E5 F 8 19= *VPFWNDO1 000013E8 F 8 22= *VPFWNDO2 000013E9 F 8 23= VPREPOUT 000013F9 F 0 527 565 578 598 605 642 672 760 766 802 818 827 888 910 925 942 956 961 977 992 1219 1235 1251 1640 1665 2126 2304 2508 2518 2617 2773 2873 3092 3186 3202 3220 3323 3348 3468 3479 3586 3669 4057 4072 4126 4463 4477 4491 4619 F 8 41= VREAD 000013E0 F 0 1449 4595 F 8 14= *VREADCHAR 000013F1 F 8 33= VREADLINE 000013F3 F 0 4662 F 8 35= *VSCANOVER 000013F7 F 8 39= *VSLOTWRU 000013E7 F 8 21= *VSRCHDIR 000013E2 F 8 16= *VSRCHDIRSN 000013EE F 8 28= *VTDIOSIZE 0000C000 F 5 1168= VWRITE 000013E1 F 0 2108 F 8 15= *VWRITECHAR 000013F2 F 8 34= *VWRITELINE 000013F4 F 8 36= *WAITCOUNT 00040000 F 4 106= WARNFLAG 00003012 F 0 428= 4069 WIDETIME 000080A8 F 0 334= 589s 846 *WLCKLIM 00170804 F 6 1610= *WLCKUSD 00170805 F 6 1611= WORDLNTH 00000020 F 4 25= 35e 36e 36e 37e 37e 38e 232 WORDOFFST 000080A6 F 0 330= 4115s 4127a WPP 00000400 F 0 283 284 285 286 287 288 289 290 291 293 294 295 296 297 298 299 1149 1151 1154a 1220a 1859 2693a 2752a 2800a 4202 4255 4274 F 4 32= 33e 34e 155e F 6 6e 2212e 2545e WRONGMES 00003410 F 0 1667a 1686= *WRU0CPUSUB 00001040 F 5 74= *WRU0DD 00000D20 F 5 73= *WRU0INT 00000A10 F 5 72= *WRU0MREV 00003080 F 5 76= *WRU0SMUDEV 00000001 F 5 85= *WRU0TYPE 00000040 F 5 66= *WRUMEMBAD 00002E10 F 5 99= *WRUMEMDEVT 00001040 F 5 83= *WRUMEMHERE 00003080 F 5 100= *WRUMEMINC 00002040 F 5 86= *WRUMEMNO0 00002E10 F 5 90= *WRUMEMNONE 00002C10 F 5 98= *XREQERAIR 000000BA F 7 183= *XREQERBFN 0000008F F 7 129= *XREQERBSBL 0000009E F 7 149= *XREQERBVAR 00000097 F 7 142= *XREQERDAA 000000B0 F 7 173= *XREQERDCM 000000C3 F 7 192= *XREQERDIO 000000C4 F 7 194= *XREQERDNA 000000AF F 7 172= *XREQERDNC 000000B1 F 7 174= *XREQERDNR 000000AE F 7 171= *XREQERDSE 0000009F F 7 150= *XREQERDSKL 00000087 F 7 117= *XREQERESDL 000000C5 F 7 196= *XREQERFAU 00000089 F 7 119= *XREQERFBZ 0000008A F 7 121= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 40 *XREQERFHBD 00000090 F 7 130= *XREQERFIP 000000A8 F 7 163= *XREQERFNF 0000008D F 7 124= *XREQERFPRG 00000092 F 7 132= *XREQERIAUT 000000A7 F 7 162= *XREQERILOP 00000091 F 7 131= *XREQERILR 00000080 F 7 109= *XREQERINHI 000000A9 F 7 164= *XREQERISAV 00000088 F 7 118= *XREQERISYR 00000093 F 7 133= *XREQERITK 000000C9 F 7 200= *XREQERITM 000000CA F 7 201= *XREQERLAE 00000083 F 7 113= *XREQERLAS 0000008B F 7 122= *XREQERLBZ 000000C6 F 7 197= *XREQERLNE 00000081 F 7 111= *XREQERLNS 0000008C F 7 123= *XREQERLPE 00000095 F 7 137= *XREQERMNRP 000000A2 F 7 157= *XREQERMWNA 00000086 F 7 116= *XREQERNAE 0000008E F 7 128= *XREQERNDS 000000B6 F 7 179= *XREQERNDT 000000B7 F 7 180= *XREQERNFSV 0000009D F 7 148= *XREQERNR 000000AC F 7 169= *XREQERNSE 000000AB F 7 168= *XREQERNSL 000000AA F 7 167= *XREQERNSPP 000000A3 F 7 158= *XREQERNSS 000000B5 F 7 178= *XREQERNSV 000000A6 F 7 161= *XREQEROFC 000000A0 F 7 155= *XREQEROIO 000000B9 F 7 182= *XREQERPFM 00000084 F 7 114= *XREQERPNS 00000094 F 7 136= *XREQERPOB 00000082 F 7 112= *XREQERPWW 00000096 F 7 138= *XREQERREOD 000000A4 F 7 159= *XREQERRIB 000000B8 F 7 181= *XREQERRNA 00000085 F 7 115= *XREQERSCU 000000C7 F 7 198= *XREQERSDE 000000C0 F 7 189= *XREQERSIB 000000BD F 7 186= *XREQERSIO 000000BB F 7 184= *XREQERSIU 00000099 F 7 144= *XREQERSPB 000000BF F 7 188= *XREQERSUSP 000000AD F 7 170= *XREQERTMD 000000C2 F 7 191= *XREQERUAM 0000009A F 7 145= *XREQERUIB 000000BE F 7 187= *XREQERUKC 000000B3 F 7 176= *XREQERUKF 000000B4 F 7 177= *XREQERUKP 000000BC F 7 185= *XREQERUKS 000000B2 F 7 175= *XREQERULT 000000C1 F 7 190= *XREQERVBB 000000C8 F 7 199= *XREQERVIU 000000A1 F 7 156= 1 Jimbo's CREF Extractor 2.0 Disk ADT Rebuilder 7-Aug-92 10:39 PAGE 41 *XREQERVLB 0000009B F 7 146= *XREQERVNMR 0000009C F 7 147= *XREQERWANA 000000A5 F 7 160= *XREQERWPT 00000098 F 7 143= *XREQRSTR 00000050 F 6 1594= *XRFLDCODE 00002CA0 F 7 266= XRFLDNRWD 00002210 F 7 270= 271e *XRFLDREQ 00002C60 F 7 268= *XRFLDSUBOP 00003840 F 7 267= XRFLDSUSP 00001E20 F 7 272= 273e 274e XRMAIFLD 00002630 F 7 1168= 1169e 1170e 1171e *XRNOERRS 00000800 F 7 1170= *XRNOREWND 00004000 F 7 271= *XRNOSUB 00001000 F 7 1169= *XRSUSPERR 00008000 F 7 274= *XRSUSPNORM 00000000 F 7 273= *XRWWCHK 00000400 F 7 1171= YESIT 0000320F F 0 809j 811j 825= ZAPADTBLK 00003352 F 0 1075 1291 1307= ZAPFBI 0000334D F 0 1052 1061 1263 1279= ZAPLOOP 0000334F F 0 1281= 1283j ZERO 00000000 F 4 11= 12e 155e ZEROENDPTR 00003A7E F 0 4056j 4068=