(George Source)
Macros used: ACROSS, ALTLEN, BLOCK, CLOSEST, GEOERR, KEEPMESS, MENDAREA, MFINDSU, MHUNTW, MUSEST, OPENST, READST, RELST, SEGENTRY, SETREP, TESTREPNOT, TRACE, UNLOCKSU, UP, USEST, USESTX
22FL #SEG EXOPEN867 22^= # 23DW # COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982 23YG # 24D6 # 24XQ #LIS K0EXOPEN 25CB 8HEXOPEN 25X2 # SEGMENT TO FIND FILE INDEX CELL FOR SPECIFIED FILE 26BL # ACTION DETERMINED BY MARKERS IN EXMARK OF EXOF BLOCK 26W= # ENTERED VIA DOWN FROM VARIOUS SEGMENTS TO REFIND FIP 27*W # OR ACROSS FROM SOUP TO LOCATE FIP FOR OPEN MODE 27TG # OUTPUT IS REPLY OK OR EXFAIL ,IF EXFAIL MARKERS FOR REASON SET IN 28*6 # EMARK OF GEXD BLOCK AS FOLLOWS: 28SQ # ABREAK = BREAK-IN WHILST WAITING FOR SU TO COME ONLINE 29#B # OR WAITING FOR SCALO 29S2 # AFAIL = TRANSFER FAIL WHILST READING FIP CELLS 2=?L # OR SCA CORRUPT 2=R= # APLINKF= IPB FAILURE - SCALO NOT AVAILABLE 2?=W # ANONL = UNIT NOT ONLINE (PLEASE LOAD REQUQEST SUPRESSED) 2?QG # ARITE = CD REPLY TO PLEASE LOAD REQUEST 2#=6 # ANFOUND= FILE NOT FOUND 2#PQ # 2*9B # 2*P2 SEGENTRY K1EXOPEN,QK1EXOPEN [REFIND FIP 2B8L SEGENTRY K2EXOPEN,QK2EXOPEN [LOCATE FIP FOR OPEN 2BN= # 2C7W XEWS +EWSCA 2CMG XEWN +EWNOL 2D76 # 2DLQ NX4 #777777 2F6B NX5 #37777777 2FL2 # 2G5L # 2GK= XER1 GEOERR 1,EXOTRAN 2H4W # 2HJG # S/R TO SET X2 POINTING TO EWDAS/EXOF 2J46 # AND X3 POINTING TO EWDAS/GEXD 2JHQ # 2K3B XHUNT MHUNTW 2,EWDAS,EXOF 2KH2 MHUNTW 3,EWDAS,GEXD 2L2L EXIT 5 0 2LG= # 2L^W # 2MFG # S/R TO FIND AND GET NEXT S.U. 2M^6 # LINK X7 2NDQ # ON ENTRY AND EXIT X1 POINTS TO CURRENT SU ASTUC 2NYB # X2 EXOF BLOCK 2PD2 # X3 GEXD BLOCK 2PXL # 2QC= # USES X4,X5 2QWW # 2RBG NEXTSU 2RW6 SBX 7 FX1 2S*Q LDN 4 0 2STB NX2 LDX 1 FPTR(1) 2T*2 TXU 1 CXCC 2TSL BCC NX1 [JUMP IF END OF CHAIN 2W#= LDX 0 BACK1(1) 2WRW BZE 0 NX1 [JUMP IF NO MORE ASTUCS 2X?G BNG 0 NX2 [JUMP IF DEAD ASTUC 2XR6 LDCT 0 #200 2Y=Q ANDX 0 ASMARK(1) 2YQB BNZ 0 NX2 [OR DISENGAGED 2^=2 LDX 5 BACK1(1) [SAVE SERIAL NO 2^PL USESTX 5,NX9,,TBREAK,NX9 [ADD ONE TO COUNT OF USERS AND GET SC 329= ADN 7 1 [UPDATE LINK TO EXIT OK 32NW MHUNTW 3,EWDAS,GEXD 338G STO 5 ESERL(3) [SAVE SERIAL NUMBER OF THIS UNIT 33N6 NX1 BZE 4 NX10 [JUMP IF NO UNIT SAVED 347Q RELST 4 [OTHERWISE RELEASE IT 34MB NX10 CALL 5 XHUNT 3572 ADX 7 FX1 35LL EXIT 7 0 366= # 36KW # SCALO NOT AVAILABLE OR IN USE BY S-TRUSTED 375G # 37K6 NX9 BZE 4 NX11 [JUMP IF NO UNIT SAVED 384Q RELST 4 38JB NX11 LDX 4 5 [SAVE NEW UNIT SERIAL NO. 3942 MFINDSU 1,4 [REFIND ASTUC 39HL CALL 5 XHUNT 3=3= BRN NX2 [JUMP TO GET NEXT UNIT 3=GW # 3?2G # BREAKIN WHILE WAITING FOR LOCK-OUT FROM OTHER PROCESSOR 3?G6 # 3?^Q TBREAK 3#FB CALL 5 XHUNT 3#^2 LDN 0 ABREAK 3*DL ORS 0 EMARK(3) [SET BREAK IN MARKER 3*Y= BRN NX1 3BCW # 3BXG # 3CC6 # 3CWQ # READ S/R LINK X5 ADDRESS X1 3DBB # 3DW2 XREAD 3F*L SBX 5 FX1 [READ S/R 3FT= READST 1,XRD1 3G#W TESTREPNOT OK,XRD2 3GSG LDX 1 ECOR(3) 3H#6 XRD1 MHUNTW 2,EWDAS,EXOF 3HRQ ADX 5 FX1 3J?B EXIT 5 1 3JR2 XRD2 TESTREPNOT EXFAIL,XER1 3K=L ADX 5 FX1 3KQ= EXIT 5 0 3L9W # 3LPG # 3M96 # UNLOCK UNIT S/R LINK X7 SERIAL NUMBER X1 3MNQ # 3N8B XUNLOCK 3NN2 SBX 7 FX1 3P7L UNLOCKSU 1 3PM= CALL 5 XHUNT 3Q6W ADX 7 FX1 3QLG EXIT 7 0 3R66 # 3RKQ # OPEN UNIT S/R LINK X7 SERIAL NO. ESERL(3) 3S5B # 3SK2 XOPEN 3T4L OPENST 3TJ= EXIT 7 0 3W3W # 3WHG # 3X36 # START HERE 3XGQ # THROUGHOUT X2 POINTS TO EXOF BLOCK 3Y2B # X3 POINTS TO GEXD BLOCK 3YG2 # 3Y^L QK2EXOPEN 3^F= NGNC 0 1 3^YW QK1EXOPEN 42DG LDN 0 0 42Y6 STO 0 AWORK1(2) 43CQ CALL 5 XHUNT 43XB STOZ EMARK(3) [ZEROISE RESULT MARKER 44C2 ... TRACE EXMARK(2),EXOPEN 44WL ... TRACE ASUSN(2), 45B= # 45TW # CHECK VALID ENTRY PARAMS 46*G # 46T6 LDX 0 EXMARK(2) 47#Q ANDN 0 BOPEN [BOPEN MUST BE SET 47SB BNZ 0 XOPOK 48#2 XMARK GEOERR 1,MARKERR [OTHERWISE ERROR 48RL XOPOK LDX 0 EXMARK(2) 49?= ANDN 0 BCREATE+BRITE 49QW BNZ 0 XMARK 4==G # 4=Q6 LDX 0 EXMARK(2) 4?9Q ANDN 0 BLOCK 4?PB BNZ 0 PS1 [JUMP IF UNIT ALREADY LOCKED 4#92 LDX 0 EXMARK(2) 4#NL ANDN 0 BSERL 4*8= BZE 0 SERCH [JUMP IF SERIAL NUMBER NOT SPECIFIED 4*MW # 4B7G # SERIAL NUMBER SPECIFIED 4BM6 # GET UNIT ONLINE IF NECESSARY 4C6Q # 4CLB USEST ASUSN(2),P2A,,P2F,P2H 4D62 # 4DKL # UNIT NOW MARKED "TO BE KEPT ONLINE" + SCALO CLAIMED 4F5= # 4FJW P2G CALL 5 XHUNT 4G4G LDX 0 ASUSN(2) 4GJ6 STO 0 ESERL(3) [PUT SERIAL NUMBER IN GEXD 4H3Q BRN PS1 [GO TO SEARCH FIP CELLS 4HHB # 4J32 # UNIT NOT ONLINE OR IN USE BY S-TRUSTED 4JGL # 4K2= P2A CALL 5 XHUNT 4KFW LDX 0 EXMARK(2) 4K^G ANDN 0 BSUPP [CHECK IF TO SUPPRESS LOAD MESSAGE 4LF6 BZE 0 P2C [JUMP IF NOT 4LYQ KEEPMESS XEWN(1),ASUSN(2) [UNIT NOT ONLINE 4MDB LDN 4 ANONL 4MY2 BRN P2D 4NCL # 4NX= # SCALO NOT AVAILABLE - IPB FAILURE 4PBW # 4PWG P2H LDN 4 APLINKF [IPB FAIL 4QB6 BRN P2D 4QTQ # 4R*B # OUTPUT REQUEST FOR UNIT TO BE PUT ONLINE 4RT2 # 4S#L P2C MUSEST ASUSN(2),P2E,P2F,,P2H 4SS= BRN P2G 4T?W # 4TRG # CANTDO TO REQUEST 4W?6 # 4WQQ P2E LDN 4 ARITE 4X=B BRN P2D 4XQ2 # 4Y9L # BREAK-IN WHILST WAITING FOR UNIT TO BE PUT ONLINE 4YP= # 4^8W P2F LDN 4 ABREAK [BREAKIN 4^NG P2D CALL 5 XHUNT 5286 ORS 4 EMARK(3) 52MQ BRN XERR 537B # 53M2 # BSERL NOT SPECIFIED - START SEARCH OF ALL ONLINE UNITS 546L # 54L= SERCH STOZ ASUSN(2) [ SEARCH ALL ONLINE UNITS 555W LDN 1 BCCB 55KG CALL 7 NEXTSU [GET NEXT UNIT ONLINE 5656 BRN TF4 [NO SUITABLE UNIT FOUND 56JQ # 574B # SEARCH FIP CELLS OF SPECIFIED OR CURRENT UNIT 57J2 # 583L PS1 CALL 7 XOPEN [OPEN UNIT 58H= PS1A LDN 0 147 592W STO 0 HOME(2) [START OF FIP CELLS 59GG PS1B LDX 1 HOME(2) 5=26 CALL 5 XREAD [READ NEXT CELL 5=FQ BRN TF1 [TRANSFER ERROR 5=^B PS1C LDX 0 0(1) 5?F2 BNG 0 US1 [CHECK IF CELL UNUSED 5?YL LDX 5 2(1) 5#D= LDX 6 3(1) 5#XW LDX 7 4(1) [CHECK FILENAMES 5*CG TXU 5 FIP(2) 5*X6 TXU 6 FIP+1(2) 5BBQ TXU 7 FIP+2(2) 5BWB BCS P5 [JUMP IF DIFFERENT 5CB2 LDX 0 EXMARK(2) 5CTL ANDN 0 BSPEC 5D*= BZE 0 P6 [JUMP IF GEN NUMBER NOT SPECIFIED 5DSW LDX 0 6(1) [OTHERWISE CHECK 5F#G SRL 0 12 5FS6 LDX 4 FIP+4(2) 5G?Q SRL 4 12 5GRB TXU 0 4 5H?2 BCS P5 [JUMP IF DIFFERENT 5HQL PS1D LDX 0 ESERL(3) 5J== STO 0 ASUSN(2) [SAVE SERIAL NUMBER 5JPW ADN 2 FIP 5K9G ADN 1 2 5KP6 MOVE 1 15 5L8Q SBN 2 FIP 5LNB SBN 1 2 5M82 LDX 6 1(1) [POINTER TO FDCELL 5MML PS1E LDN 0 1 5N7= STO 0 FBUK(2) 5NLW LDEX 7 FIP+5(2) 5P6G LDX 4 7 5PL6 SLL 4 1 5Q5Q ADX 4 7 5QKB SLL 4 1 [X6 =WORDS REQUIRED FOR FDCELLS 5R52 ADN 4 FDCELLS-A1 5RJL TXU 4 ALOGLEN(2) [JUMP IF BLOCK ALREADY 5S4= BCC PS1F [THE CORRECT LENGTH 5SHW LDX 3 2 5T3G ALTLEN 3,4 [ALTER LENGTH OF EXOF 5TH6 CALL 5 XHUNT 5W2Q PS1F BZE 7 P8 [JUMP IF NO CELLS 5WGB ADN 4 A1-6 5X22 STO 4 EFDC(3) [POINTER TO LAST CELL 5XFL PS1G LDX 1 6 5X^= CALL 5 XREAD 5YDW BRN TF2 [TRANSFER FAIL 5YYG LDX 6 FIP+8(2) 5^D6 ANDN 6 #77 [BUCKET SIZE 5^XQ ADX 2 EFDC(3) [REORGANIZE CELL INTO EXOF 62CB LDX 0 3(1) [SERIAL NUMBER 62X2 SMO FX1 63BL ANDX 0 NX4 63W= STO 0 0(2) 64*W LDX 5 1(1) [GET STARTING CYLINDER,STARTING BLOCK 64TG SMO FX1 65*6 ANDX 5 NX5 65SQ DVS 4 4(1) [ IN X5 AND X4 66#B STO 5 1(2) [ 66S2 STO 4 2(2) 67?L SBN 4 1 67R= SBN 5 1 68=W NGS 4 4(2) 68QG NGS 5 3(2) 69=6 LDX 5 2(1) [CALCULATE EB,EC 69PQ SMO FX1 6=9B ANDX 5 NX5 6=P2 SBN 5 1 6?8L DVS 4 4(1) 6?N= ADS 5 3(2) [NUMBER OF CYLINDERS IN AREA 6#7W ADS 4 4(2) [NUMBER OF SEGMENTS/CYLINDER 6#MG LDX 4 3(2) [CALCULATE NUMBER OF BUCKETS IN AREA 6*76 MPY 4 4(2) [X4= TOTAL BLOCKS 6*LQ DVD 4 6 6B6B BZE 4 PS1H 6BL2 GEOERR 1,EXBUCK 6C5L PS1H STO 5 5(2) [NUMBER OF LB'S IN THIS AREA 6CK= LDCT 4 #400 6D4W ANDX 4 2(1) 6DJG ORS 4 3(2) [SAVE FULL DEPTH MARKER 6F46 LDN 0 6 6FHQ SBS 0 EFDC(3) [UPDATE CELL POINTER 6G3B SBN 7 1 6GH2 LDX 6 0(1) [ADDRESS NEXT CELL 6H2L BZE 7 P8 [ JUMP IF NO MORE CELLS 6HG= BNZ 6 PS1G [BACK FOR NEXT CELL 6H^W BRN TF3 6JFG # 6J^6 # NO MORE FILE AREAS 6KDQ # 6KYB P8 STOZ EMARK(3) 6LD2 CALL 5 XHUNT [DO CUMULATIVE TOTALS FOR HIGHEST LBN 6LXL LDEX 4 FIP+5(2) 6MC= BZE 4 P8B [JUMP IF NONE 6MWW ADN 2 FDCELLS-1 6NBG P8A LDX 0 0(2) [HIGHEST LBN IN THIS AREA 6NW6 ADS 0 6(2) [ADD TO NUMBER IN NEXT AREA GIVING 6P*Q [HIGHEST LBN IN THAT AREA 6PTB ADN 2 6 6Q*2 BCT 4 P8A [BACK FOR NEXT AREA IF ANY 6QSL P8B CLOSEST XEND 6R#= TESTREPNOT OK,XER1 6RRW BRN XEND 6S?G # 6SR6 # FILENAME OR GEN DIFFERENT 6T=Q # GET NEXT FIP CELL 6TQB # 6W=2 P5 LDX 0 0(1) [POINTER TO NEXT CELL 6WPL BNZ 0 P5A [JUMPIF NEXT CELL NOT CONSECUTIVE 6X9= LDN 1 17 6XNW ADS 1 ECOR(3) [UPDATE CORE POINTER 6Y8G ADS 1 HOME(2) [ UPDATE B.S HOME 6YN6 LDX 1 ECOR(3) 6^7Q BRN PS1C 6^MB P5A SMO FX1 7272 TXU 0 NX5 [CHECK IF END OF CHAIN 72LL BCC US1 [JUMP IF IT IS 736= STO 0 HOME(2) 73KW BRN PS1B 745G # 74K6 # NO MORE USED CELLS 754Q # 75JB US1 LDN 0 ANFOUND 7642 US1A ORS 0 EMARK(3) 76HL CLOSEST US1B 773= TESTREPNOT OK,XER1 77GW CALL 5 XHUNT 782G US1B LDX 0 EXMARK(2) 78G6 ANDN 0 BSERL 78^Q BNZ 0 S3 [JUMP IF SERIAL NUMBER SPECIFIED 79FB US1C LDX 6 ESERL(3) 79^2 SMO FX2 7=DL STO 6 AWORK4 [PRESERVE X6 7=Y= MFINDSU 1,6 7?CW CALL 7 NEXTSU [GET NEXT S.U,IF ANY 7?XG BRN S3 [JUMP IF NO MORE 7#C6 SMO FX2 7#WQ LDX 6 AWORK4 7*BB LDCT 0 #400 7*W2 ANDX 0 EMARK(3) 7B*L ERS 0 EMARK(3) [UNSET 7BT= BNZ 0 PS1 [J IF NOT TO UNLOCK PREVIOUS UNIT 7C#W LDX 1 6 7CSG CALL 7 XUNLOCK [UNLOCK UNIT 7D#6 RELST 6 7DRQ CALL 5 XHUNT 7F?B BRN PS1 [BACK TO SEARCH NEXT UNIT 7FR2 # 7G=L # NO MORE UNITS TO SEARCH 7GQ= # 7H9W S3 LDX 0 EXMARK(2) 7HPG ANDN 0 BHIGH 7J96 BZE 0 Q4 [J IF NOT HIGHEST GEN 7JNQ # 7K8B # HIGHEST GEN SEARCH-CHECK IF FILE FOUND 7KN2 # 7L7L LDCT 0 #200 7LM= ANDX 0 EMARK(3) 7M6W BZE 0 Q3 [JUMP IF FILE NOT FOUND 7MLG LDX 0 ASUSN(2) 7N66 TXU 0 ESERL(3) [CHECK IF FOUND ON CURRENT UNIT 7NKQ BCC S3A [JUMP IF SAME SU 7P5B LDX 1 ESERL(3) 7PK2 CALL 7 XUNLOCK [UNLOCK UNIT 7Q4L RELST ESERL(3) [AND RELEASE CURRENT UNIT 7QJ= CALL 5 XHUNT 7R3W LDX 0 ASUSN(2) 7RHG STO 0 ESERL(3) 7S36 CALL 7 XOPEN [OPEN UNIT 7SGQ S3A LDX 6 EFDC(3) [START OF FDCELLS 7T2B LDX 0 EHOME(3) 7TG2 STO 0 HOME(2) [GET HOME OF FIP 7T^L BRN PS1E 7WF= # 7WYW # HIGHEST OR ANY GENERATION NUMBER SEARCH 7XDG # 7XY6 P6 LDX 0 EXMARK(2) 7YCQ ANDN 0 BANY 7YXB BNZ 0 PS1D [J0MP IF ANY GEN NUMBER 7^C2 LDX 0 EXMARK(2) 7^WL ANDN 0 BHIGH 82B= BNZ 0 P6A 82TW GEOERR 1,WRNGEN [ERROR IN GEN SPECIFICATION 83*G P6A LDCT 0 #200 83T6 ANDX 0 EMARK(3) 84#Q BZE 0 P6B [JUMP IF NO FILE FOUND YET 84SB LDX 0 FIP+4(2) 85#2 SRL 0 12 85RL LDX 4 6(1) 86?= SRL 4 12 86QW TXL 0 4 87=G BCC P5 [JUMP IF THIS GEN LESS THAN ONE 87Q6 P6B ADN 1 2 [SAVED 889Q ADN 2 FIP 88PB MOVE 1 15 8992 SBN 1 2 89NL SBN 2 FIP 8=8= LDX 0 1(1) 8=MW STO 0 EFDC(3) [POINTER TO FDCELLS 8?7G LDX 0 HOME(2) 8?M6 STO 0 EHOME(3) [SAVE B S HOME 8#6Q LDX 4 ASUSN(2) 8#LB LDX 0 ESERL(3) [SAME 8*62 STO 0 ASUSN(2) [OTHERWISE SAVE SERIAL NUMBER IN EXOF 8*KL LDCT 0 #200 8B5= ANDX 0 EMARK(3) 8BJW BZE 0 P6C 8C4G TXU 4 ESERL(3) [JUMP IF PREVIOUSLY SAVED 8CJ6 BCC P6C [UNIT IS CURRENT UNIT 8D3Q LDX 1 4 8DHB CALL 7 XUNLOCK 8F32 RELST 4 [UNLOCK AND RELEASE OLD UNIT 8FGL CALL 5 XHUNT 8G2= P6C LDCT 0 #600 8GFW ORS 0 EMARK(3) [SET FILE FOUND AND CURRENT 8G^G [UNIT NOT TO BE RELEASED BITS 8HF6 LDX 1 ECOR(3) 8HYQ BRN P5 8JDB # 8JY2 Q4 LDN 0 BLOCK 8KCL ANDX 0 EXMARK(2) 8KX= BNZ 0 Q3A [JUMP IF UNIT LOCKED ON ENTRY 8LBW Q3 LDX 1 ESERL(3) 8LWG CALL 7 XUNLOCK 8MB6 RELST ESERL(3) [UNLOCK AND RELEASE UNIT 8MTQ CALL 5 XHUNT 8N*B Q3A LDX 0 EMARK(3) 8NT2 BNZ 0 XERR [JUMP IF ERROR OCCURRED 8P#L # 8PS= XEND SETREP OK 8Q?W SMO FX2 8QRG LDX 0 AWORK1 8R?6 BZE 0 XEND1 8RQQ ACROSS CHINTEG,1 8S=B XEND1 UP 8SQ2 # 8T9L # FAILURE CASES 8TP= # 8W8W # 8WNG # TRANSFER FAIL WHILE READING FIP CELLS 8X86 # 8XMQ TF1 CALL 5 XHUNT 8Y7B LDN 0 AFAIL 8YM2 ORS 0 EMARK(3) [SET FAIL BIT 8^6L LDX 0 EXMARK(2) 8^L= ANDN 0 BSERL 925W BZE 0 US1C [JUMP IF SERIAL NUMBER NOT SPECIFIED 92KG BRN S3 9356 # 93JQ # 944B # TRANSFER FAIL WHILST READING FACS 94J2 # 953L TF2 CALL 5 XHUNT 95H= LDN 0 AFAIL 962W ORS 0 EMARK(3) 96GG BRN Q4 9726 # 97FQ # SCA CORRUPT 97^B # 98F2 TF3 LDX 1 FX1 98YL KEEPMESS XEWS(1),ESERL(3) 99D= CALL 5 XHUNT 99XW LDN 0 AFAIL 9=CG ORS 0 EMARK(3) 9=X6 CLOSEST TF3A 9?BQ TESTREPNOT OK,XER1 9?WB TF3A CALL 5 XHUNT 9#B2 BRN Q3 9#TL # 9**= # 9*SW # NO SUITABLE SU FOUND 9B#G # 9BS6 TF4 CALL 5 XHUNT 9C?Q LDX 0 EMARK(3) 9CRB ANDN 0 ABREAK 9D?2 BNZ 0 XERR [J IF BREAK IN 9DQL LDN 0 ANFOUND 9F== ORS 0 EMARK(3) 9FPW # 9G9G XERR SETREP EXFAIL 9GP6 SMO FX2 9H8Q LDX 0 AWORK1 9HNB BZE 0 XEND1 9J82 ACROSS CHINERR,1 9JML # 9K7= # 9KLW # 9L6G MENDAREA 30,K99EXOPEN 9LL6 #END ^^^^ ...376130770003