22FL ... SEG LOADX,60,OWEN N JOHN(CENT) 22^= # 23DW SEGENTRY K1LOADX,XENT1 23YG SEGENTRY K2LOADX,XENT2 24D6 # 24XQ # 25CB #DEF T=0 25X2 # LANGUAGE CODES USED IN S/FS CONTAINING BINARY PROGRAM 26BL SFA100 4HA100 [PERMANENT UNIT OF PROGRAM 26W= SFA101 4HA101 [PROGRAM FILE WHICH MAY CONTAIN OVERL 27*W SFA4 4H00A4 [OVERLAY UNIT 27TG # 28*6 ZBUCK #777777 [NO. OF BUCKETS IN LS 3 CHARS. 28SQ ZLENG #17777777 29#B ...N7 7 + G4 [LIMIT OF PERMISSABLE BLK TYPES 29J8 ...#DEF X512=512 [MAX NO OF CHARS FOR MOVEDATA SUBR 29S2 #SKIP G4 2=?L ( 2=R= XB9 #100000 2?=W X64 64 2?QG XBN1T7 #40177777 2#=6 SPAREC #73000007 2#PQ MASK #57777700 2*9B XB16LS #177777 2*P2 PERM +GWRITE [PERM USED IN CHECKB 2B8L ) 2BN= # 2C7W # LABELS OF ERROR MESSAGES 2CMG NOENT +JNOENT 2D76 RINF +JINFF 2DLQ RCHER +JCHER 2F6B WERRES +GRESLL 2FL2 WRBLK +JWRBLK 2G5L # 2GK= # 2H4W # DEFINITIONS OF WORDS USED IN ADATA/AWKSB 2HJG # 2J46 #DEF WBLOCK=A1 [BLOCK OF FILE IN CORE 2JHQ #DEF WFRAGSIZE=WBLOCK+1 [NO. OF BUCKETS STILL TO BE READ IN 2K3B [ [CURRENT FRAGMENT OF DIRECTORY SUBFIL 2KH2 #DEF NEXTFRAG=WFRAGSIZE+1 [1ST BUCKET OF NEXT FRAGMENT OF DIREC 2L2L [ [SUBFILE 2LG= #DEF NEXTORG=NEXTFRAG+1 [NEXT ORGANIZATIONAL BUCK OF PERM UNI 2L^W #DEF ORGREC=NEXTORG+1 [NEXT ORGANIZATIONAL RECORD IN CURREN 2MFG [ [BUCKET 2M^6 #DEF PROGDEST=ORGREC+1 [PROG ADDRESS IN TYPE 5 2N8Y ...#DEF TABDEST=PROGDEST 2NDQ #DEF REMDATA=PROGDEST+1 [AMT OF DATA STILL TO BE TRANSFERRED 2NYB [ [PRESENT TRANSFER - PRINC FOF TYPE 5 2PD2 #DEF TYPE5BUCK=REMDATA+1 [NO OF CURRENT TYPE5 DATA BUCK 2PMS ...#DEF TABSRCE=TYPE5BUCK 2PXL #DEF WCHECKSUM=TYPE5BUCK+1 [CHECKSUM FOR TYPE5 DATA 2QC= #SKIP G4 2QWW ( 2RBG #DEF XQUOTA=WFRAGSIZE [B0-13-PAGES TO BE KEPT IN CORE - 1 2RW6 [B14=1 SOME PAGES LOCKED IN 2S*Q #DEF SPA1=WCHECKSUM+1 [NO OF SPA BUCKETS/WORD ADDR OF SPAS 2STB #DEF SPA2=SPA1+1 [NO OF BUCKET HOLDING SPAS 2T*2 #DEF SPA3=WFRAGSIZE 2TSL #DEF SPA4=NEXTFRAG 2W#= #DEF SPA5=ORGREC 2WDN ...#DEF UNITTYPE=SPA2+1 2WK6 ...[ 2WPJ ...[ THIS EXTRA WORD IS A RESULT OF HR 194(B 0979) 2WW2 ...[ 2X2D ...REC7 +7 [DEFINES TYPE 7 REC SPECIFIER 2X6W ...[ 2X?G ) 2XR6 #SKIP G3 2Y=Q #DEF UNITTYPE=WCHECKSUM+1 [TYPE OF FILE CONTAINING OVERLAYS 2YQB [ THE REMAINDER OF THE BLOCK IS USED FOR THE OVERLAY TABLE. INITIALLY 2^=2 [ IT HAS TWO WDS FOR THE PERM UNIT. 2^PL #DEF WKLENGTH=UNITTYPE+3-A1 [INITIAL LENGTH OF ADATA/AWKSB 329= # 32NW # DEFINITIONS OF WORDS USED IN ACTIVITY BLOCK 338G # 33N6 #DEF XLDEX=EXTPS+3 [MAY HOLD 1STBUCK OF DIR S/F 347Q #DEF XLDEXA=EXTPS+4 [CONTAINS SWITCHES 34MB [ B14=1 ON 1ST BUCK OF A DIR S/F FRAGMENT 3572 [ B15=1 SUPP R/S HAS BEEN FOUND 35LL [ B16=1 R/S HAS BEEN FOUND 366= [ B17,B18 ONLY USEFUL FOR G4 36KW [ B17=1 TRANSFERRING TYPE 0 BLOCK 375G [ B18=1 TRANSFERRING OVERLAY DIRECTORY 37K6 [ B19 PERM UNIT HAS BEEN FOUND IN DIR S/F 384Q #DEF NOVERS=ACOMMUNE1 [NO OF OVERLAY UNITS FOUND IN CURRENT 38JB [ [BUCKET OF DIRECTORY S/F 3942 #DEF WBUCKLENG=ACOMMUNE2 [NO OF USEFUL WDS IN CURR BUCK 39HL # 3=3= # 3=GW # 3?2G NSFD 3?G6 # SETS POINTERS TO NEXT SFD IN CURR&NT BUCKET OF DIR S/F. 3?^Q # NORMAL EXIT 1. EXITS 0 IF NO MORE SFD'S IN BUCKET 3#FB [ ENTRY LINK X5 3#^2 [ ABSOLUTE PTR TO LAST REC X3 3*DL [ PTR TO LAST REC REL TO START OF BUCK X4 3*Y= [EXIT LINK X5 3BCW [ X3,4 UPDATED TO NEXT RECORD IF FOUND 3BXG LDX 0 0(3) [1ST WORD OF SFD 3CC6 ANDN 0 #77 [LENGTH OF SFD 3CWQ ADX 3 0 [ 3DBB ADX 4 0 3DW2 SMO FX2 3F*L TXL 4 WBUCKLENG 3FT= BCC NSFDX [SFD NOT IN THI2 BUCK 3G#W EXIT 5 1 3GSG NSFDX 3H#6 SMO FX2 3HRQ TXU 4 WBUCKLENG 3J?B BCS XRECLENG [REC HEADER WRONG 3JR2 EXIT 5 0 3K=L # 3KQ= # 3L9W # 3LPG READED 3M96 # 3MNQ # GIVES PTRS TO DESIRED BUCKET WITHIN A 512 WD BLOCK, READING DOWN THE 3N8B # APPROPRIATE BLOCK IF NECESSARY 3NN2 [ ENTRY LINK X5 3P7L [ PTR TO ADATA/AWKSB X2 3PM= [ BUCKET NO. X7 3Q6W [ EXIT LINK X5 3QLG [ PTR TO ADATA/AWKSB X2 3R66 [ PTR TO START OF BUCKET (ABSOLUTE) X3 3RKQ [ PTR TO START OF BUCKET (RELATIVE TO ST OF FILE/FRRB) X6 3S5B [ FIND BUCKET CONTAINING REQUIRED BUCKET IF FILE TREATED AS 4-BLOCK BUCK 3SK2 LDX 6 7 3T4L ADN 6 3 3TJ= SRL 6 2 3W3W LDX 0 WBLOCK(2) [NO OF 4-BLOCK BUCKET IN CORE 3WHG BZE 0 READBLOCK [NONE IN CORE 3X36 BXE 6 0,REDBLOCK [REQUIRED BLOCK IS IN CORE 3XGQ MFREEW FILE,FRRB 3Y2B READBLOCK 3YG2 SBX 5 FX1 3Y^L READED 6,4 3^F= TESTRPN2 OK,XFILEMISS 3^YW MHUNTW 2,ADATA,AWKSB 42DG STO 6 WBLOCK(2) 42Y6 ADX 5 FX1 43CQ REDBLOCK 43XB MHUNTW 3,FILE,FRRB 44C2 LDX 6 7 44WL SBN 6 1 [1ST BUCK NUMBERED 1 45B= SLL 6 7 [*128 45TW ANDN 6 #777 [MODULO 512 46*G ADX 3 6 46T6 EXIT 5 0 47#Q # 47SB # 48#2 # 48RL PERMUNIT 49?= # STORE INFO REGARDING PERM UNIT IN AWKSB 49QW [ ENTRY LINK X5 4==G [ PTR TO SFD X3 4=Q6 [ PTR TO AWKSB X2 4?9Q [ X1=FX1 4?PB [ EXIT SAME 4#92 # THE DATA S/F SHOULD NEVER BE FRAGMENTED 4#NL LDX 0 6(3) [NEXT FRAG OF S/F 4*8= BZE 0 NOTFRAGD 4*MW TRACE 0,DATAFRAG 4B7G NOTFRAGD 4BM6 LDX 0 4(3) [1ST ORGANIZATIONAL BUCK 4C6Q ANDX 0 ZBUCK(1) 4CLB BZE 0 XFILEMISS [SILLY BUCK NO 4D62 STO 0 NEXTORG(2) 4DKL EXIT 5 0 4F5= # 4FJW # 4G4G # 4GJ6 NORGBUCK 4H3Q # GETS THE NEXT ORG BUCK INTO A FILE/FRB 4HHB [ ENTRY LINK X4 4J32 [ PTR TO AWKSB UX2 4JGL [ PTR TO FRB X3 4K2= [ BUCK NO X7 4KFW [ EXIT LINK X5 4K^G [ PTR TO AWKSB X2 4LF6 [ PTR TO FRB X3 4LYQ SBX 4 FX1 4MDB # IF BUCK ISBUCK 2,3,4 OFCURR FRRB OR 1STBUCK OF NEXT FRRB WE USE READED 4MY2 # OTHERWISE WE READ 128 WDS AND LEAVE FRRB ALONE 4NCL LDX 0 7 4NX= ADN 0 2 4PBW SRL 0 2 4PWG BXE 0 WBLOCK(2),SEQUENCE 4QB6 FREECORE 3 [OLD FRB 4QTQ READED 7,1 4R*B TESTRPN2 OK,XFILEMISS 4RT2 MHUNTW 2,ADATA,AWKSB 4S#L MHUNTW 3,FILE,FRRB 4SS= NAME 3,FILE,FRB 4T?W LDX 0 A1(3) [NO OF WORDS IN BUCK 4TRG SBN 0 4 4W?6 BNG 0 XORGHEAD [NO ORG RECS IN BUCK 4WQQ SBN 0 125 4X=B BPZ 0 XORGHEAD [TW MANY RECS IN BUCKET 4XQ2 LDX 5 4 [MOVE LINK 4Y9L BRN ORGCHEK 4YP= SEQUENCE 4^8W CALL 5 READED 4^NG LDX 5 4 [KEEP LINK 5286 # MOVES ORG BUCK INTO FRB 52MQ LDX 0 A1(3) [NO OF WORDS IN BUCK 537B SBN 0 4 53M2 BNG 0 XORGHEAD [NO ORG RECS IN BUCK 546L SBN 0 125 54L= BPZ 0 XORGHEAD [TO MANY RECS IN BUCK 555W MHUNTW 1,FILE,FRB 55KG LDN 4 A1(1) 5656 ADN 3 A1 56JQ SMO 0(3) 574B MOVE 3 0 57J2 LDX 3 1 [X3 -> FILE/FRB 583L ORGCHEK 58H= # VALIDATE CONTENTS OF ORG BUCK 592W LDN 1 A1+2(3) 59GG LDX 0 A1(3) 5=26 SBN 0 2 5=FQ SMO 0 5=^B SUM 0 0 5?F2 BNZ 0 XCHS [CHECKSUM ERROR IN ORG BUCKET 5?YL ADX 5 FX1 5#D= EXIT 5 0 5#XW # 5*CG # 5*X6 # 5BBQ MOVEDATA 5BWB # 5CB2 # MOVES DATA INTO AN OBJECT PROGR1M 5CTL [ LINK X7 5D*= [ START OF DATA X3 5DSW [ START ADDR IN OP X4 5F#G [ LENGTH OF DATA X5 5FS6 [ EXIT LINK X7 5G?Q [ PTR TO AWKSB X2 5GRB [ X5 UNTHANGED 5H?2 [ X6 DESTROYED IN G4 5HQL SBX 7 FX1 5J== FPCACA 2,FX2 5JPW #SKI T 5K9G ( 5KP6 TRACE 3,FROM 5L8Q TRACE 4,TO 5LNB TRACE 5,HOW MANY 5M82 ) 5MML LDN 1 8 5N7= TXL 4 1 5NLW BCC NOACCS [JUMP IF NOT ACCESSING ACCS. 5P6G SMO FX2 5PL6 ORS 1 XLDEXA [SET MARKER TO SHOW THAT PROGRAM SETS 5Q5Q [UP ITS OWN ACCS. 5QKB NOACCS 5R52 LDX 1 FX1 5RJL CHECKB 4,5,XRESV,2,PERM(1),WCOOR,,2 5S4= MOVE 5SHW FINMOVE 2,4,3,5,HLOCK1,2 5T3G #SKI G4 5TH6 ( 5W2Q MHUNTW 3,ADATA,AWKSB [RELOCATE WORK BLOCK 5WGB LDX 6 XQUOTA(3) 5X22 BNG 6 ZLK9 [J IF SUFFICIENT PAGES LOCKED IN CORE 5XFL BNZ 6 ZLK4 [J IF SOME PAGES ALREADY LOCKED 5X^= LDX 0 HLOCK1+1(2) [WE DON'T LOCK PAGE 0 5YDW BZE 0 ZLK9 5YYG HUNT2 1,BSTB,BSCB,2 5^D6 LDX 0 AMAXSIZE(1) 5^XQ BPZ 0 ZLK2 62CB LDX 0 HLOCK1+1(2) 62X2 TXL 0 BIT11 [OR IN THE CASE OF A SPARSE 63BL BCS ZLK8 [KEEP PAGES BELOW 4K. 63W= ZLK2 LDX 6 HLOCK1+1(2) 64*W STO 6 HLOCK2+1(2) 64TG LDX 6 AQUOTA(1) 65*6 SLL 6 10 [SET X6 TO INDICATE NO OF PAGES TO BE 65SQ SBN 6 3584 [KEPT IN CORE - QUOTA-3.& SET B14 66#B LDN 0 CHREAD+CHWRITE [STORE PERMISSION IN 2ND HLOCK AREA 66S2 STO 0 HLOCK2(2) 67?L BNG 6 ZLK8 67R= ZLK4 LDX 3 HLOCK2+1(2) [START OF AREA ALREADY LOCKED 68=W LDX 4 HLOCK2(2) 68QG ANDX 4 B2T13 [LENGTH OF AREA 69=6 ADX 3 4 69PQ TXL 3 HLOCK1+1(2) [JUMP UNLESS THE CURRENT AREA 6=9B BCS ZLK8 [CONTAINS A PAGE WHICH FOLLOWS ON 6=P2 LDX 0 HLOCK1(2) [IMMEDIATELY AFTER AREA ALREADY 6?8L ANDX 0 B2T13 [LOCKED 6?N= ADX 0 HLOCK1+1(2) 6#7W TXL 3 0 6#MG BCC ZLK8 6*76 SBX 3 4 [ADD ONE PAGE TO THE AREA ALREADY 6*LQ ADN 4 1024 [LOCKED 6B6B CLEAR 2,0,HLOCK2,2 6BL2 LDX 1 FX1 6C5L CHECKB 3,4,(GEOERR),2,PERM(1),(GEOERR),HLOCK2,2 6CK= SBN 6 1024 6D4W ZLK7 BPZ 6 ZLK4 6DJG ZLK8 6F46 ZLK9 CLEAR 2,0,HLOCK1,2 6FHQ ) 6G3B MHUNTW 2,ADATA,AWKSB 6GH2 #SKIP G4 6H2L STO 6 XQUOTA(2) 6HG= ADX 7 FX1 6H^W EXIT 7 0 6JFG #SKI G4 6J^6 ( 6KDQ WCOOR 6KYB # FIND PTRS AGAIN IF CHECKA COORDINATES 6LD2 FPCACA 2 6LXL LDN 0 #140 [TYPE 0 AND OVERLAY DIR BITS 6MC= SMO FX2 6MWW ANDX 0 XLDEXA 6NBG BNZ 0 WCOOR1 [NOT DEALING WITH TYPE 5 6NW6 MHUNTW 3,FILE,FRRB 6P*Q ADN 3 A1 6PTB ADX 3 6 6Q*2 BRN MOVE 6QSL WCOOR1 6R#= SRC 0 7 6RRW BPZ 0 WCOOR2 [NOT DEALING WITH TYPE 0 6S?G MHUNTW 3,FILE,FRB 6SR6 MHUNTW 1,ADATA,AWKSB 6T=Q ADN 3 A1+2 6TQB ADX 3 ORGREC(1) 6W=2 BRN MOVE 6WPL WCOOR2 [SETTING UP OLAY TABLE 6X9= MHUNTW 3,ADATA,AWKSB 6XNW ADN 3 UNITTYPE 6Y8G BRN MOVE 6YN6 ) 6^7Q # 6^MB # 7272 # 72LL XENT1 736= # SET UP WORKING SPACE BLOCK 73KW MHUNTW 1,FILE,ENT 745G LDCT 7 #77 74K6 ANDX 7 ETM(1) [REMEMBER FILE TYPE 754Q SETNCORE WKLENGTH,2,ADATA,AWKSB 75JB STOZ WBLOCK(2) [MARK NO FRRB'S IN CORE 7642 STO 7 UNITTYPE(2) [NEEDED IF PROG OVERLAID 76HL # A BINARY PROGRAM IS HELD IN A COMPOSITE SUBFILE. THE 1ST DIRECTORY S/F 773= # STARTS IN BUCKET 1 AND THE 1ST SFD IS FOR THE PROGRAM S/F. IT IS EITHE 77GW # LANGUAGE A100 FOR A DATA S/F CONTAINI THE PROGRAM (NON-OVERLAID) OR IS 782G # LANGUAGE A101 FOR A DIRECTORY S/F WITH SFD'S FOR DATA S/F'S HOLDING 78G6 # OVERLAY UNITS (POSSIBLY NONE) AND A PERMANENT UNIT 78^Q LDN 7 1 [BUCKET NO. 79FB CALL 5 READED [GET 1ST BUCKET 79^2 LDX 0 A1+2+6(3) [NEXT FRAGMENT OF TOP LEVEL DIRECTORY 7=DL BZE 0 NOTFRAGC 7=Y= TRACE 0,COMPFRAG 7?CW NOTFRAGC 7?XG # LOOK AT THE FIRST SFD IN THE COMPOSITE FILE 7#C6 # REMEMBER 1ST BUCK IN CASE S/F IS A DIRECTORY S/F 7#WQ LDX 7 A1+2+8+4(3) [1ST BUCK OF THIS S/F 7*BB ANDX 7 ZBUCK(1) 7*W2 # IF WD 5 OF R/S = 0 THE BUCK MUST BE STORED IN OP WD 40- REMEMBER IT 7B*L SMO FX2 7BT= STO 7 XLDEX 7C#W LDX 0 A1+2+8+8(3) [LANGUAGE 7CSG TRACE 0,FILELANG 7D#6 BXE 0 SFA101(1),NFRAGD [TOP LEVEL DIR IS NOT PERM UNIT 7DRQ BXU 0 SFA100(1),XSFCODE [ILLEGAL LANGUAGE CODE 7F?B ADN 3 A1+2+8 [X3 -> SFD 7FR2 CALL 5 PERMUNIT [REMEMBER START BUCK ETC 7G=L # DONT ALTER _WD 40 IF NOT OVERLAID 7GQ= SMO FX2 7H9W STOZ XLDEX 7HPG BRN RRS 7J96 NFRAGD 7JNQ # 7K8B # START IN NEXT FRAGMENT OF TOP-LEVEL DIRECTORY S/F 7KN2 LDN 0 #1000 7L7L SMO FX2 7LM= ORS 0 XLDEXA [SET MARK FOR 1ST BUCK IN FRAGMENT 7M6W BRN NDIRBUCK1 7MLG NDIRBUCK 7N66 NGN 5 #1001 7NKQ SMO FX2 7P5B ANDS 5 XLDEXA [REMOVE MARK FOR 1ST BUCK IN FRAGMENT 7PK2 # 7Q4L # READ NEXT BUCKET IN THIS FRAGMENT 7QJ= ADN 7 1 [BUCKETS IN FRAGMENT ARE SEQUENTIAL 7R3W STO 0 WFRAGSIZE(2) [CORRECT NO OF BUCKETS LEFT 7RHG NDIRBUCK1 7S36 CALL 5 READED [NEXT BUCKET OF DIRECTORY S/F 7SGQ LDX 0 A1+1(3) 7T2B ANDN 0 #7777 [LENGTH OF BUCKET 7TG2 SMO FX2 7T^L STO 0 WBUCKLENG 7WF= SBN 0 129 7WYW BPZ 0 XBUCKLENG [ERROR IF > 128 7XDG SMO FX2 7XY6 STOZ NOVERS [INITIALIZE COUNT OF OLAY UNITS IN BU 7YCQ LDN 4 2 [X4 -> NEXT RECORD IN BUCKET (REL TO 7YXB ADN 3 A1+2 [X3 -> NEXT REC ABSOLUTELY 7^C2 LDN 0 #1000 [1ST BUCK IN FRAGMENT 7^WL SMO FX2 82B= ANDX 0 XLDEXA 82TW BZE 0 NODD [1ST REC NOT A D.D. 83*G # PICK UP THE NO. OF BUCKS IN THIS FRAGMENT AND THE 1ST BUCK OF NEXT 83T6 # FRAGMENT FROM DIRECTORY DESCRIPTION 84#Q SMO FX2 84SB LDX 0 WBUCKLENG 85#2 SBN 0 10 85RL BNG 0 XBUCKLENG [ERROR IF NO DIR DESC. 86?= LDX 0 0(3) 86QW ANDN 0 #77 87=G SBN 0 8 87Q6 BNZ 0 XRECLENG [D.D. MUST BE 8 WDS 889Q LDX 0 5(3) [NO OF BUCKS IN FRAGMENT 88PB ANDX 0 ZBUCK(1) 8992 BZE 0 XFRAGSIZE [ERROR IF NONE 89NL STO 0 WFRAGSIZE(2) 8=8= LDX 0 6(3) [1ST BUCK OF NEXT FRAGMENT 8=MW STO 0 NEXTFRAG(2) 8?7G NEXTSFD 8?M6 CALL 5 NSFD [MOVE PTRS TO NEXT SFD 8#6Q BRN ZENDBUCK [NO MORE IN BUCKET 8#LB NODD 8*62 # EMPTY SPACE SFD HAS ZERO IN 1ST WD OF S/F NAME. IGNORE EMPTY SPACH 8*KL LDX 0 1(3) 8B5= BZE 0 NEXTSFD 8BJW LDX 0 8(3) [LANGUAGE OF S/F 8C4G TRACE 0,S/FLANG 8CJ6 BXU 0 SFA100(1),OVERCOUNT [NOT PERM UNIT 8D3Q # SET MARK THAT PERM UNIT HAS BEEN FOUND, REMEMBER SIZE AND STARTING BUC 8DHB # AND THEN CONTINUE DEALING WITH OVERLAYS 8F32 LDN 0 #20 8FGL SMO FX2 8G2= ANDX 0 XLDEXA 8GFW BNZ 0 X2PERMS [THIS IS 2ND PERM UNIT 8G^G LDN 0 #20 8HF6 SMO FX2 8HYQ ORS 0 XLDEXA 8JDB CALL 5 PERMUNIT [REMEMBER DETAILS OF PERM UNIT 8JY2 BRN NEXTSFD 8KCL OVERCOUNT 8KX= SRL 0 12 8LBW BXU 0 SFA4(1),XSFCODE [NOT AN OVERLAY UNIT EITHER 8LWG LDN 0 1 8MB6 SMO FX2 8MTQ ADS 0 NOVERS 8N*B BRN NEXTSFD 8NT2 ZENDBUCK 8P#L # 8PS= # AT THE END OF EACH DIRECTORY S/F BUCK WE COLLECT THE INFORMATION RE EA 8Q?W # OVERLAY UNIT WHICH MAY LATER BE STORED IN OVERLAY DIRECTORY TABLE OF O 8QRG SMO FX2 8R?6 LDX 5 NOVERS 8RQQ BZE 5 NOOVERS [NO OVERLAY UNITS IN THIS BUCK 8S=B TRACE 5,NO.OVERS 8SQ2 # LENGTHEN AWKSB FOR EXTRA INFO. - 2 WDS PER OVERLAY 8T9L SLL 5 1 8TP= LDX 3 ALOGLEN(2) 8W8W ADX 3 5 8WNG LDX 4 2 8X86 ALTLEN 4,3,ADATA,AWKSB 8XMQ MHUNTW 3,FILE,FRRB 8Y7B ADX 3 6 [X3 -> START OF BUCK 8YM2 ADN 3 A1+2+8 8^6L LDN 4 2+8 8^L= # IF NOT 1ST BUCK IN FRAGMENT THERE IS NO DIR DESC 925W LDN 0 #1000 92KG ANDX 0 XLDEXA(2) 9356 BNZ 0 YBUCK1 93JQ SBN 3 8 [RESET PTRS TO 1ST REC 944B SBN 4 8 [ = 1ST SFD 94J2 YBUCK1 953L MHUNTW 2,ADATA,AWKSB 95H= ADX 2 ALOGLEN(2) 962W SBN 2 2 [ALLOW FOR PERM UNIT SPACE 96GG SBX 2 5 [X2 -> START OF NEW AREA 9726 NEXTOLAY 97FQ LDX 0 1(3) 97^B BZE 0 NOTOVER [MISS OUT EMPTY SPACE SFD 98F2 LDX 0 8(3) 98YL BXE 0 SFA100(1),NOTOVER [MISS OUT PERM UNIT 99D= LDX 0 15(3) [AREA AND UNIT NOS. 99XW STO 0 A1(2) 9=CG LDX 0 4(3) [1ST BUCK 9=X6 ANDX 0 ZBUCK(1) 9?BQ STO 0 A1+1(2) 9?WB ADN 2 2 [SET X2 TO NEXT ENTRY IN OLAY TABLE 9#B2 NOTOVER 9#TL LDX 6 2 [REMEMBER POS IN BLK 9**= MHUNTW 2,ADATA,AWKSB 9*SW CALL 5 NSFD [SET PTRS TO NEXT SFD 9B#G BRN NOOVERS [NO MORE OVERLAYS 9BS6 LDX 2 6 [GET BACK BLK PTR 9C?Q BRN NEXTOLAY 9CRB NOOVERS 9D?2 LDX 0 WFRAGSIZE(2) 9DQL BCT 0 NDIRBUCK [MORE BUCKS IN THIS FRAGMENT 9F== LDX 7 NEXTFRAG(2) [1ST BUCK OF NEXT FRAGMENT 9FPW BNZ 7 NFRAGD [NO MORE FRAGMENTS IF ZERO 9G9G # WE HAVE FINISHED THE DIRECTORY S/F 9GP6 LDN 0 #20 9H8Q SMO FX2 9HNB ANDX 0 XLDEXA 9J82 BZE 0 XPERM [THERE WAS NO PERMANENT UNIT 9JML # SET ENTRY FOR PERM UNIT IN O'LAY TABLE 9K7= RRS 9KLW LDX 7 NEXTORG(2) [1ST BUCK 9L6G ADX 2 ALOGLEN(2) 9LL6 SBN 2 2 9M5Q STOZ A1(2) [AREA/UNIT=0 FOR PERM UNIT 9MKB STO 7 A1+1(2) 9N52 # READ 1ST ORGANIZATIONAL BUCK (CONTAINING R/S AND PERHAPS /UPP R/S) 9NJL # AND CHECK ITS CONTENTS. PASS BACK TO LDSTART 9P4= SETNCORE 128,3,FILE,FRB 9PHW MHUNTW 2,ADATA,AWKSB 9Q3G LDX 7 NEXTORG(2) [BUCK NO 9QH6 CALL 4 NORGBUCK 9R2Q # WE DONT WANT TO LEAVE ALARGE LBLOCK IN COPE WHILE GETTING COPE FOR O.P 9RGB STOZ WBLOCK(2) 9S22 MFREEW FILE,FRRB 9SFL ACROSS LDSTART,5 9S^= # 9TDW # 9TYG # 9WD6 XENT2 9WXQ SETNCORE 128,3,FILE,FRB [TO HOLD ORG BUCKETS 9XCB MHUNTW 2,ADATA,AWKSB 9XX2 #SKI G4 9YBL ( 9YW= STOZ SPA1(2) [SET NO SPAS MARK 9^*W STOZ XQUOTA(2) [INIT 'PAGES TO BE KEPT IN CORE' IND 9^TG ) =2*6 LDX 7 NEXTORG(2) [NEXT ORGANIZATIONAL BUCKET =2SQ BRN READORG =3#B NORGREC =3S2 MHUNTW 3,FILE,FRB =4?L LDX 4 ORGREC(2) [PTR TO LAST REC =4R= SMO 4 =4T8 ... LDX 6 A1(3) =4X6 ...[ =4^4 ...[ THIS IS A RESULT OF HR 194(B 0979) =532 ...[ CAUSED BY FACT TYPE 7 DOES NOT HAVE A WORD COUNT IN HEADER =54Y ...[ =56W ...#SKI G4 =58S ...( =5=Q ... LDCH 5 6 [FIND TYPE =5#3 ... SMO FX1 =5*# ... BXU 5 REC7,NTYP7 =5BL ... SMO 4 [ITS A TYPE 7 SO WE EXTRACT COUNT =5DJ ... LDX 6 A1+1(3) =5GG ... BRN REC7B =5JD ...NTYP7 =5LB ...) =5N# ...[ =5QG SRL 6 12 =6=6 ANDN 6 #77 =6FY ...REC7B =6PQ ADX 4 6 =79B BXL 4 A1(3),NORG [MORE RECS IN THIS BUCK =7P2 LDX 7 NEXTORG(2) [THIS BUCK =88L ADX 7 A1+1(3) =8N= STO 7 NEXTORG(2) =97W READORG =9MG BZE 7 XENDORG ==76 CALL 4 NORGBUCK ==LQ LDN 4 3 =?6B NORG =?L2 LDX 1 FX1 =#5L # GET REC LENGTH FOR ALL TYPE ROUTINES =#K= SMO 4 =*4W LDX 6 A1(3) [BLOCK SPECIFIER =*6N ... LDCH 5 6 [BLOCK TYPE =*8G ...#SKI G4 =*=# ...( =*#6 ...[ =**Y ...[ THIS TOO IS CAUSED BY HR 194(B 0979) =*CQ ...[ AND THE FACT TYPE 7 IS NON STANDARD RECORD TYPE =*FJ ...[ DONE 27.SP.74 :CENT =*HB ...[ =*K8 ... BXU 5 REC7(1),NTYP7A [J. IF NOT TYPE 7 =*M2 ... SMO 4 =*NS ... LDX 6 A1+1(3) =*QL ... BRN REC7A [THAT PUTS NUMBER OF WDS IN X6 =*SD ...NTYP7A =*W= ...) =*Y4 ...[ =*^W ... =B46 SRL 6 12 =BHQ ANDN 6 #77 [LENGTH OF ORG REC =BRJ ...REC7A =C3B NGN 0 #101 =CH2 SMO FX2 =D2L ANDS 0 XLDEXA [REMOVER MARKER FOR PARTICULAR TYPES =DG= LDX 0 A1(3) =D^W SBX 0 4 =FFG SBX 0 6 =F^6 BNG 0 XORGHEAD [PART OF ORG REC NOT WITHIN HEADER =GDQ ADX 3 4 [X3 -> START OF NEXT ORG REC =GYB STO 4 ORGREC(2) [REMEMBER PTR TO REC WITHIN BUCK =HD2 BXGE 5 N7(1),XBLOCKTYPE [CHECK BLOCK TYPE =HXL #SKI T =JC= TRACE 5,TYPE =JWW # USE BLOCK TYPE IN X5 TO JUMP TO APPROPRIATE ROUTINE WITH REC LENGTH IN =KBG SMO 5 =KW6 BRN TABTYP [BRN TO ROUTINE APPROPRIATE FOR TYPE =L*Q TABTYP =LTB BRN TYPE0 =M*2 BRN TYPE1 =MSL BRN TYPE2 =N#= BRN TYPE3 =NRW BRN XTYPE4 [TYPE 4 ILLEGAL ON PERM UNIT =P?G BRN TYPE5 =PB5 ... BRN TYPE6 =PDN ...[ =PH? ...[ THE FOLLOWING HAS BEEN ALTERED DUE TO HR 194 ET AL(B 0979) =PKW ...[ THAT IS THE ADDITIONAL 'BRN ' BELOW AND THE SETTING =PNF ...[ OF 'N7 ' .AS BEFORE IN GEORGE 4 IF AND SPA BLOCK =PR4 ...[ WAS FOUND BEFORE THE REAT OF BINARY PROG AN ERROR =PTM ...[ WAS WRONGLY REPORTED =PY= ...[ DONE 18.SEPT.74 :CENT =Q2T ...[ =Q5D ... BRN NORGREC =Q83 ...[ =Q=Q # =QQB # =R=2 TYPE0 =RPL # TYPE 0 MUST BE 3 TO 29 WDS LONG =S9= SBN 6 3 =SNW BNG 6 XRECSIZE =T8G SBN 6 27 =TN6 BPZ 6 XRECSIZE =W7Q ADN 6 28 [NO OF WORDS OF DATA =WMB SMO A1+1(3) =X72 LDN 4 0 [X4 -> PROG ADDRESS =XLL LDX 5 6 =Y6= ADN 3 A1+2 [X3 -> START OF DATA =YKW LDN 0 #100 =^5G SMO FX2 =^K6 ORS 0 XLDEXA [SET TYPE 0 SWITCH ?24Q CALL 7 MOVEDATA ?2JB BRN NORGREC ?342 # ?3HL # ?43= TYPE1 ?4GW # WE COME THROUGH HERE FOR THE R/S IN MAIN PART OF LOAD IN ORDER TO GET ?52G # THE POINTERS RIGHT ?5G6 LDN 0 #200 ?5^Q SMO FX2 ?6FB ANDX 0 XLDEXA ?6^2 BNZ 0 X2RS [2ND R/S - ERROR ?7DL LDN 0 #200 ?7Y= SMO FX2 ?8CW ORS 0 XLDEXA ?8XG BRN NORGREC ?9C6 # ?9WQ # ?=BB TYPE2 ?=W2 TYPE3 ??*L # TYPE 2 AND 3 ENTRY BLOCKS MUST BE 2 WDS LONG ??T= SBN 6 2 ?##W BNZ 6 XRECSIZE ?#SG # MOVE ENTRY BLOCK TO START OF __ FRB FOR LOADFIN ?*#6 LDX 4 A1(3) ?*RQ LDX 5 A1+1(3) ?B?B #SKIP G4 ?BR2 ( ?C=L LDX 0 SPA1(2) [J IF SPECIAL PERM AREAS ?CQ= BNZ 0 SPA [-IF THERE ARE PROG IS NOT OVERLAYED ?D9W ) ?DPG MHUNTW 1,FILE,FRB ?F96 XENDSPAS ?FNQ STO 4 A1(1) ?G8B STO 5 A1+1(1) ?GN2 # OVERLAY PROGS MUST HAVE AN OVERLAY DIRECTORY TABLE SET UP ?H7L # IF WD 5 OF R/S IS NON-ZERO IT CONTAINS THE START ADDRESS FOR THE INF C ?HM= # EARLIER TO BE MOVE TO (SEE 1900 PRM) ?J6W # OTHERWISE THE 1ST BUCK NO FOR THE DIRECTORY S/F IS PUT IN WD 40 ?JLG # AND THE PROGRAM MUST BE RESUMED TO SET UP THE TABLE ?K66 FPCACA 3,FX2 ?KKQ HUNT2 3,AOBRES,0 ?L5B LDX 1 A1+5(3) ?LK2 LDX 3 2 [X3 -> TO ADATA/AWKSB ?M4L LDN 4 0(1) [ADDR IN B2-23 ?MJ= LDX 5 ALOGLEN(3) ?N3W SBN 5 UNITTYPE-A1 ?NHG BNZ 1 OLAYDIR ?P36 SMO FX2 ?PGQ LDX 6 XLDEX ?Q2B BZE 6 NOLAID ?QG2 LDN 4 40 [ADDR IN OP ?Q^L LDN 5 1 [NO OF WDS ?RF= STO 6 UNITTYPE(3) [ADDR OF WD TO BE MOVED ?RYW OLAYDIR ?SDG #SKI T ?SY6 TRACE 5,TOTOVERS ?TCQ LDN 0 #40 ?TXB SMO FX2 ?WC2 ORS 0 XLDEXA ?WWL ADN 3 UNITTYPE [X3 PTS TO START OF DATA ?WY5 ...MVSTART ?W^J ... SBN 5 X512 ?X33 ... BNG 5 MVREST ?X4G ... STO 5 REMDATA(2) ?X5^ ... LDX 7 3 [X3 = GEORGE ADDRESS ?X7D ... SBX 7 2 [X7 = REL ADD IN ADATA/AWKSB ?X8X ... STO 7 TABSRCE(2) [SAVE THIS IN CASE COORDINATE ?X=B ... STO 4 TABDEST(2) [SAVE PROG ADD - G4 MAY OVERWRITE ?X?T ... LDN 5 X512 [MOVE IN 512 WORD BLOCKS ?X*# ... CALL 7 MOVEDATA ?XBR ... LDX 5 REMDATA(2) ?XD= ... LDX 4 TABDEST(2) [RESTORE AND INCREMENT ?XFP ... ADN 4 X512 [DESTINATION ADDRESS ?XH8 ... LDX 3 TABSRCE(2) [RELATIVE SOURCE ADDRESS ?XJM ... ADX 3 2 [ABSOLUTE ?XL6 ... ADN 3 X512 [INCREMENT ?XMK ... BRN MVSTART ?XP4 ...MVREST ?XQH ... ADN 5 X512 ?XS2 ... CALL 7 MOVEDATA ?XTW NOLAID ?Y*G FREECORE 2 [ADATA/AWKSB ?YT6 XEND ?^#Q VFREE FILE,FRRB ?^SB ACROSS LOADFIN,1 #2#2 # #2RL # #3?= TYPE5 #3QW # TYPE 5 RECORD MUST BE 5 WORDS #4=G SBN 6 5 #4Q6 BNZ 6 XRECSIZE #59Q # THE DATA FOR A TYPE 5 BLOCK IS IN CONSECUTIVE BUCKETS STARTING BUT NO #5PB # NECESSARILY ENDING, ON A BUCKET BOUNDARY. #692 # WE USE A LOOP TRANSFERRING THE CONTENTS OF A 512-WD BS BLOCK IN EACH P #6NL # (THE METHOD DEPENDS ON S/R READED READING A WHOLE BS BLOCK) #78= # WE CHECKA AND CLEAR WITH EACH TRANSFER TO REDUCE THE NO OF PAGES LOCKE #7MW # IN GEORGE 4 #87G SMO A1+1(3) [DESTINATION IN PROGRAM #8M6 LDN 0 0 #96Q STO 0 PROGDEST(2) #9LB LDX 0 A1+2(3) [AMOUNT OF DATA #=62 ANDX 0 ZLENG(1) #=KL BZE 0 XNODATA #?5= STO 0 REMDATA(2) #?JW LDX 0 A1+3(3) [NEG CHECKSUM ##4G STO 0 WCHECKSUM(2) ##J6 LDX 7 NEXTORG(2) [NO OF CURRENT BUCKET #*3Q ADX 7 A1+4(3) [1ST BUCK OF DATA #*HB MOREDATA #B32 STO 7 TYPE5BUCK(2) #BGL CALL 5 READED #C2= ADN 3 A1 [START OF DATA IN FRRB #CFW LDX 4 PROGDEST(2) [ #C^G # X6 -> START OF BUCKET WITHIN FRRB. THE AMOUNT OF DATA TO BE TRANSFERRE #DF6 # FROM THIS FRRB IS MIN(REMDATA,512-[X6]) #DYQ LDN 5 512 #FDB SBX 5 6 #FY2 BXL 5 REMDATA(2),STILLMORE #GCL LDX 5 REMDATA(2) #GX= STILLMORE #HBW LDX 1 3 #HWG SMO 5 #JB6 SUM 0 0 #JTQ ADS 0 WCHECKSUM(2) [ADD THIS LOT TO TOTAL CHECKSUM #K*B BVCR £ [IGNORE OVERFLOW #KT2 CALL 7 MOVEDATA #L#L LDX 0 REMDATA(2) #LS= SBX 0 5 #M?W BZE 0 T5END [NO MORE DATA FOR THIS TYPE5 #MRG STO 0 REMDATA(2) [UPDATE AMT LEFT TO TRANSFER #N?6 ADS 5 PROGDEST(2) [RES&T DEST ADD IN PROGRAM #NQQ # TURN COUNT INTO NO OF BUCKETS AND ADD TO 7 FOR NEXT BUCKET. (LAST MOVE #P=B # MUST HAVE BEEN MULT OF 128) #PQ2 SRL 5 7 #Q9L LDX 7 TYPE5BUCK(2) [ADDR OF LAST BUCKET #QP= ADX 7 5 #R8W BRN MOREDATA #RNG T5END #S86 LDX 0 WCHECKSUM(2) #SMQ BZE 0 NORGREC #T7B BRN XCHS [CHECKSUM ERROR #TM2 # #W6L # #WL= TYPE6 #X5W # TYPE 6 MUST BE 8 WDS LONC #XKG SBN 6 8 #Y56 BNZ 6 XRECSIZE #YJQ LDN 0 #400 #^4B SMO FX2 #^J2 ANDX 0 XLDEXA *23L BNZ 0 X2SRS [2ND SUPP R/S *2H= LDN 0 #400 *32W SMO FX2 *3GG ORS 0 XLDEXA [SET MARKER *426 # *4FQ # IN GEORGE 4 SPA1 & SPA2 ARE SET UP TO HOLD THE LOCATION OF *4^B # THE BUCKETS DEFINING THE PROGRAMS SPECIAL PERM.AREAS. *5F2 # *5YL #SKIP G4 *6D= ( *6XW LDX 6 A1+4(3) [ADDR -F SPAS *7CG ANDX 6 XBN1T7(1) *7X6 BZE 6 TYP6C [J IF NO SPAS *8BQ LDXC 6 6 *8WB BZE 6 XNOSPAS [ERROR IF PP BIT BUT NO SPAS *9B2 LDX 0 6 *9TL SRL 0 15 *=*= BNZ 0 TYP6A [J UNLESS SPAS IN THIS BUCKET *=SW ADX 6 XB9(1) [NO OF BUCKETS = 1 *?#G BRN TYP6B *?S6 TYP6A LDX 0 6 *#?Q ANDX 0 BSP16 [REL BUCKET NO OF SPAS *#RB ERS 0 6 [SET'WITHIN BUCKET ADDR TO ZERO'. **?2 TYP6B ADX 0 NEXTORG(2) [ABS BUCKET NO.WITH SPAS **QL STO 0 SPA2(2) [SET SPA1 & 2 *B== STO 6 SPA1(2) *BPW TYP6C *C9G ) *CP6 FPCACA 3,FX2 *D8Q HUNT2 3,AOBRES,0 *DNB LDX 0 ALOGLEN(3) *F82 SBN 0 24 *FML BZE 0 NORGREC [SUPP R/S ALREADY DEALT WITH BY LDSTA *G7= ALTLEND 3,24 *GLW FPCACA 1,2 *H6G HUNT2 3,AOBRES,0,1 *HL6 MHUNTW 2,FILE,FRB *J5Q ADN 2 A1 *JKB ADX 2 4 [X2 ->TYPE 6 REC *K52 ADN 3 A1+16 *KJL MOVE 2 8 *L4= BRN NORGREC *LHW # *M3G # *MH6 # *N2Q # THIS SECTION READS THE BUCKETS DEFINING A PROGRAMS SPECIAL *NGB # PERMISSION AREAS AND INSERTS THE APPROP PERM BITS IN THE PAGE *P22 # TABLES. *PFL # WORKING SPACE USED IS AS FOLLOWS *P^= # SPA1 -REL PTR TO RECORD BEING PROCESSED *QDW # SPA2 -NO OF BUCKET BEING PROCESSED *QYG # SPA3 -NOT USED ANYMORE *RD6 # SPA4 -REL PTR TO END OF BUCKET *RXQ # SPA5 -END OF PROG-FROM RQS *SCB # *SX2 # *TBL # IT SHOULD CHECK (BUT DOESN'T) THAT BUCKET HEADER CORRECT. *TW= # *W*W # *WTG #SKIP G4 *X*6 ( *XSQ SPA *Y#B LDX 3 FX2 *YS2 STO 4 AWORK1(3) [WE PRESERVE ENTRY BLOCK IN AWORK *^?L STO 5 AWORK2(3) [WRDS & WHEN SPAS HAVE BEEN DEALT *^R= [WITH MOVE IT BACK INTO AN FRB B2=W ANDX 0 BSP16 B2QG STO 0 SPA1(2) B3=6 FPCACA 1,FX2 B3PQ HUNT2 1,AOBRES,0 [EXTRACT CORE REQ WORD FROM RQS B49B LDX 0 A1+3(1) [& STORE IN WORKING BLOCK B4P2 LDX 1 FX1 B58L SRC 0 9 B5N= ANDX 0 MASK(1) B67W STO 0 SPA5(2) B6MG #SKIP B776 ( B7LQ # THIS CODE WAS INCLUDED IN AN ATTEMPT TO TAKE ADVANTAGE OF ANY B86B # INFO LEFT IN CORE BY THE EARLIER PARTS OF LOADX. B8L2 # IT WAS REMOVED WHEN A CASE WAS ENCOUNTER&D WHERE THERE WAS NO B95L # FILE,FRRB BLOCK AROUND B9K= LDX 0 SPA2(2) B=4W TXU 0 NEXTORG(2) [J IF SPAS CONTAINED IN CURRENT BCKET B=JG BCC Z404 B?46 ADN 0 3 B?HQ SRL 0 2 B#3B TXU 0 WBLOCK(2) [J UNLESS FIRST SPA RECORD CONTAINED B#H2 BCS Z408 [ IN FRRB B*2L MHUNTW 1,FILE,FRB [LOCATE BLOCKS B*G= MHUNTW 3,FILE,FRRB B*^W LDX 0 SPA2(2) [CALC POSN OF SPA BUCKET IN FRRB BBFG SBN 0 1 BB^6 ANDN 0 3 BCDQ SLL 0 7 BCYB ADN 0 A1(3) BDD2 ADN 1 A1 BDXL MOVE 0 128 [MOVE SPA BUCKET INTO FRB BFC= Z404 MFREE FILE,FRRB [FREE FRRB BFWW MHUNTW 3,FILE,FRB BGBG NAME 3,FILE,FRRB [& RENAME FRB BGW6 BRN Z414 BH*Q ) BHTB Z408 LDX 6 SPA2(2) [SPA BUCKET NOT IN CORE-GET ITS ADDR BJ*2 VFREE FILE,FRB [IN CASE NO FILE,FRB AT START OF SPAS BJSL BRN Z412 [J TO READ BUCKET DOWN BK#= # BKRW # READ DOWN NEXT BUCKET , CHECK THAT IT CONTAINS SPAS & INITIALISE BL?G # PTRS TO RECORDS WITHIN THE BLOCK BLR6 # BM=Q Z410 LDX 6 SPA2(2) [ADDR OF NEXT BUCKET BMQB BNZ 6 Z411 [J UNLESS NONE LEFT BN=2 NAME 3,FILE,FRB [RENAME FRRB BNPL LDX 1 FX2 [RESTORE X4 & X5 BP9= LDX 4 AWORK1(1) BPNW LDX 5 AWORK2(1) BQ8G LDX 1 3 BQN6 BRN XENDSPAS [J TO DEAL WITH OVERLAY TABLE BR7Q Z411 STOZ SPA1(2) [INIT REL RECORD PTR BRMB Z412 LDN 7 128 [NO OF WORDS TO READ BS72 VFREE FILE,FRRB [MAY BE NO &ILE,FRRB AT START OF SPAS BSLL READED 6,1,7 [NEXT BUCKET BT6= TESTRPN2 OK,SPAREAD [REPORT ERRORS BTKW MHUNTW 3,FILE,FRRB [LOCATE SPA BUCKET BW5G Z414 MHUNTW 2,ADATA,AWKSB BWK6 ADX 3 SPA1(2) [PTR TO SPA RECORD BX4Q LDX 0 A1+3(3) [REL ADDR OF NEXT SPA BUCKET BXJB ADS 0 SPA2(2) [ADDR OF NEXT BUCKET BY42 BNZ 0 Z415 [J UNLESS LAST BUCKET BYHL STOZ SPA2(2) [INDICATE NO MORE B^3= Z415 B^GW LDX 0 A1(3) C22G TXU 0 SPAREC(1) [ERROR UNLESS TYPE 7 C2G6 BCS SPAFORMAT C2^Q LDX 0 A1+1(3) C3FB SBN 0 6 [ERROR UNLESS AT LEAST 6 WORDS LONG C3^2 BNG 0 SPALENG C4DL ADN 0 6 C4Y= ADX 0 SPA1(2) C5CW STO 0 SPA4(2) [PTR TO END OF BUCKET C5XG SBN 0 129 C6C6 BPZ 0 SPALENG [ERROR IF LENGTH EXCEEDS 128 C6WQ LDN 0 A1(3) C7BB SMO A1+1(3) [CHECKSUM SPA RECORD C7W2 SUM 7 0 C8*L BNZ 7 SPACKSUM C8T= LDN 0 4 C9#W ADS 0 SPA1(2) [RELATIVE ADDR OF FIRST SPA PAIR C9SG ADN 3 4 C=#6 BRN Z421 [J TO PROCESS FIRST SPA RECORD C=RQ # C??B # LOCATE NEXT SPA PAIR TO PROCESS C?R2 # C#=L Z420 MHUNTW 2,ADATA,AWKSB C#Q= MHUNTW 3,FILE,FRRB C*9W LDX 0 SPA1(2) C*PG ADN 0 2 CB96 TXL 0 SPA4(2) CBNQ BCC Z410 [J IF END OF BUCKET CC8B STO 0 SPA1(2) CCN2 ADX 3 SPA1(2) [PTR TO NEXT SPA PAIR ( - A1) CD7L Z421 CDM= # CF6W # EXTRACT INFO FROM WORD PAIR DEFINING SPA CFLG # CG66 LDX 4 A1(3) [VIRTUAL ADDRESS CGKQ ANDX 4 BITS22LS CH5B BZE 4 SPAPAGE [SPA FOR PAGE 0 CHK2 LDX 5 A1+1(3) [LENGTH CJ4L LDCH 6 A1+1(3) [PERMISSION CJJ= SMO FX1 CK3W ANDX 5 XB16LS [A ZERO LENGTH INDICATES 64K CKHG BNZ 5 Z422 CL36 LDCT 5 2 CLGQ Z422 ANDN 6 #74 [ISOLATE PERM BITS CM2B LDX 0 6 CMG2 SRC 0 3 CM^L BPZ 0 Z422A [J UNLESS AREA SHAREABLE CNF= SRC 0 1 CNYW BPZ 0 XSHWRITE [ERROR UNLESS NO WRITE PERM CPDG Z422A CPY6 ERN 6 #70 [SWITCH BITS TO INDICATE PERM TO GIVE CQCQ SLL 6 4 [MOVE TO REQD POSN CQXB FPCACA 3,FX2 [CHECK THAT AREA LIES WITHIN RESERVS CRC2 CHECKBX 4,5,SPARV,3 CRWL # CSB= # CONVERT AREA TO A NO.OF WHOLE PAGES-NOTING THAT IF AN SPA CSTW # EXTENDS TO THE END OF A PROG THE LAST PAGE IS INC IN THE AREA CT*G ADX 5 4 CTT6 TXU 5 SPA5(2) CW#Q BCS Z423 [J UNLESS SPA GOES TO END OF PROG CWSB ADN 5 1023 CX#2 Z423 SRL 5 10 CXRL ADN 4 1023 CY?= SRL 4 10 [PAGE NO OF START OF AREA CYQW SBX 5 4 [NO.OF PAGES IN AREA C^=G # C^Q6 # IF THE WHOLE OF A SEGMENT IS TO BE MARKED THEN THE HPERM AREA D29Q # IN THE SCB HAS TO BE ADJUSTED D2PB # D392 Z430 LDCH 1 4 D3NL BNZ 1 Z432 [J IF NOT START OF SEG D48= SMO FX1 D4MW TXL 5 X64 D57G BCS Z432 [J UNLESS WHOLE OF SEG IN AREA D5M6 HUNT2 2,BSTB,BSCB,3 [LOCATE SCB & SET HPERM BITS D66Q LDX 1 4 D6LB SRL 1 9 D762 ADN 2 HPERM(1) [ADDR OF HPERM WORD TO BE ALTERED D7KL LDX 1 4 D85= SRL 1 6 D8JW ANDN 1 7 [SEG NO.WITHIN WORD D94G SMO 1 D9J6 ADN 1 0(1) [MULT BY 3 D=3Q NGN 0 8 D=HB SRC 0 3(1) D?32 ANDS 0 0(2) [CLEAR PERM BITS REFERRING TO SEG D?GL LDX 0 6 D#2= SRL 0 7 D#FW SRC 0 3(1) D#^G ORS 0 0(2) [SET THEM TO NEW VALUE D*F6 ORX 6 GSIGN [SET FLAG TO INDICATE WHOLE SEG D*YQ # DBDB # USE SCANPT MACRO TO OBTAIN ADDRESS OF PAGE TABLES AND INSERT PERMS DBY2 # UNLESS THE WHOLE SEG WAS SPEC ONLY'ACCESSED'PAGES WILL BE MARKED DCCL # DCX= Z432 LDX 2 ASEGTAB(3) DDBW SCANPT 7,Z420,Z432,Z439,2,4,5,2,7 DDWG ADX 4 7 [ADJUST VIRTUAL ADDRESS DFB6 LDXC 6 6 [TRANSFER FLAG TO X7 DFTQ BCC Z434 DG*B ORX 7 GSIGN DGT2 Z434 LMASK 1,2 DH#L ADN 1 1 [LENGTH OF PAGE TABLE DHS= Z435 DJ?W BNG 7 Z436 [J IF WHOLE SEG INCLUDED DJRG LDCT 0 #100 DK?6 SMO 1 DKQQ ANDX 0 0(2) DL=B BNZ 0 Z438 [J IF NOT ACCESSED DLQ2 Z436 NGN 0 #1701 DM9L ANDS 0 0(2) DMP= ORS 6 0(2) [SET PERMISSION DN8W Z438 ADN 2 1 DNNG BCT 7 Z435 DP86 BRN Z430 DPMQ Z439 ADX 4 7 [IGNORE GAP DQ7B BRN Z430 DQM2 ) DR6L # DRL= # DS5W # DSKG # ERROR SECTION DT56 XENDORG DTJQ LDN 1 NOENT DW4B BRN XERROR DWJ2 #SKIP G4 DX3L ( DXH= XSPAOVER [SPAS AND OVERLAYS DY2W XNOSPAS [PROG MARKED AS PURE PROCEEDURE BUT HAS NO SPAS. DYGG SPAFORMAT [SPA DOES NOT START WITH CORRECT HEADER D^26 SPAPAGE [SPA FOR PAGE 0 NOT ALLOWED D^FQ SPALENG [SPA LENGTH INCORRECT D^^B SPACKSUM [SPA CHECKSUM NO CORRECT F2F2 SPAREAD [ERROR IN ATTEMPTING TO READ AN SPA BUCKET F2YL XSHWRITE [SHAREABLE AREA CANNOT HAVE WRITE PERM F3D= ) F3XW XNODATA F4CG XRECLENG F4X6 XFILEMISS F5BQ XORGHEAD F5WB XSFCODE F6B2 XBUCKLENG F6TL XFRAGSIZE F7*= X2PERMS F7SW XPERM F8#G XRECSIZE F8S6 LDN 1 RINF F9?Q BRN XERROR F9RB XCHS F=?2 LDN 1 RCHER F=QL BRN XERROR F?== #SKIP G4 F?PW SPARV [SPA OUTSIDE ADDR&SSING RANGE F#9G XRESV F#P6 LDN 1 WERRES F*8Q BRN XERROR F*NB XBLOCKTYPE FB82 XTYPE4 FBML XTYPE7 FC7= X2RS FCLW X2SRS FD6G LDN 1 WRBLK FDL6 XERROR FF5Q SMO FX1 FFKB LDX 5 0(1) FFT8 ... VFREEW FILE,FRRB FG52 ACROSS LOADERR,2 FGJL MENDAREA 60,K99LOADX FH4= #END ^^^^ ...54107136000500000000