15 22FL ...#SEG APPEND [JUDY BIDGOOD. 14 22_= #OPT K0APPEND=K0ACCESS>K0FILESTORE>K0ALLGEO 7 23DW #LIS K0APPEND 14 23YG #OPT K6APPEND=K6ACCESS>K6FILESTORE>K6ALLGEO 7 24D6 8HAPPEND 10 24XQ SEGENTRY K1APPEND,NAPP 11 25CB SEGENTRY K2APPEND,SSTEP 11 25X2 SEGENTRY K5APPEND,WAITCOMM 12 26BL SEGENTRY K8APPEND,NAPPFORCE 11 26W= SEGENTRY K9APPEND,NAPPANS 12 27*W SEGENTRY K10APPEND,NAPPBREAK 11 27TG SEGENTRY K11APPEND,ZAPP 12 28*6 SEGENTRY K12APPEND,ZAPPFORCE 11 28SQ SEGENTRY K13APPEND,ZAPPANS 12 29#B SEGENTRY K14APPEND,ZAPPBREAK 12 29S2 SEGENTRY K20APPEND,STEPFORCE 11 2=?L SEGENTRY K21APPEND,STEPANS 12 2=R= SEGENTRY K22APPEND,STEPBREAK 4 2?=W # 17 2?QG MCOMCOM #01000100 [WAITING BITS IN COMM 5 2*9B SFMAP 8 2*P2 #HAL FILE+FMAPP,0 5 2B8L SFULLB 8 2BN= #HAL BSTB+FULLB,0 4 2CMG # 21 2D76 FILETRAN [SUBROUTINES FOR SPECIAL FILESTORE 18 2DLQ [B.S. TRANSFER ROUTINES. 14 2F6B # THIS SEGMENT IMPLEMENTS THE ACCESS MACROS 18 2FL2 # APPEND (ENTRY POINTS K1 AND K11) 16 2G5L # STEP-PART OF THE APPEND CASE (ENTRY POINT K2) 15 2GK= # IN CONJUNCTION WITH THE FILESTORE RING SYSTEM 4 2H4W # 9 2HJG # USE OF AWORK WORDS 4 2J46 # 21 2JHQ # AWORK1 : CONTAINS CMOD AS ON ENTRY,FOR POSSIBLE USE IN ADJUSTING 14 2K3B # THE READ POINTERS AT THE END 16 2KH2 # AWORK2 : BI WAITED 2X - COMMUNICATION FILES 12 2L2L # B2 WAITED ONCE ) 19 2LG= # B5 EXTENDING FCB-DON'T READ DOWN USAGE BLOCK 21 2L_W # B15-23 :SIZE OF STEP-APPENDEE,IFZERO NOT STEP(APPEND) 10 2MFG # AWORK3 : DEPTH OF FILE 11 2M_6 # AWORK4 : G.P. WORK WORD 4 2NDQ # 4 2NYB # 5 2PD2 ZGEOERR 20 2PXL # THIS IMPLEMENTS MOST OF APPEND'S GEOERRS. IT IS CALLED BY X6 TO 16 2QC= # GIVE A LINK TO PART OF SEGMENT REQUESTING GEOERR. 9 2QWW GEOERR 1,APPEND! 4 2RBG # 4 2RW6 SFUB 8 2S*Q STO 0 GEN6 17 2STB SFUB 1,7,1,(GEN6) [X1->FURB IF THERE. 8 2T*2 LDX 0 GEN6 7 2TSL EXIT 0 1 4 2W#= # 15 2WRW SFSTACK [LONG MACRO 8 2X?G LDX 2 FX2 14 2XR6 SFSTACK AWORK3(2),2 [X2 ->FCA 7 2Y=Q EXIT 7 0 20 2YQB SFREGBAC [ENTRY TO FREE B.S. & TRY TO GET 16 2_=2 SBX 7 FX1 [ANOTHER BLOCK 8 2_PL LDX 2 FX2 9 329= STO 7 AWORK4(2) 9 32NW BRN SFREEB 5 338G SGETBAC 14 33N6 SBX 7 FX1 [DATUMISE 14 347Q LDX 2 FX2 [ & STORE 14 34MB STO 7 AWORK4(2) [ LINK 5 3572 RGETBACK 20 35LL LDX 7 ACOMMUNE1(2) [PRESERVE 2ND. PARAM. TO MACRO. 19 366= GETBACK 5 [ GET 1 BLOCK B.S. IN EXEC1 10 36KW STO 7 ACOMMUNE1(2) 10 375G ADDSKIP I516A,BSGET 16 37K6 LDX 4 ACOMMUNE7(2) [NEW B.S. BLOCK. 15 384Q CALL 7 SFSTACK [X2 -> FCA 8 38JB PSTAC 3,2 15 3942 BFCBX 3,3 [X3 -> FCB 19 39HL BXE 5 BSPRE(3),OKBSP [J IF B.S.PREFIX UNCHANGED 5 3=3= SFREEB 18 3=GW LDX 3 BSPRE(3) [PRESERNE NEW B.S.PREFIX 19 3?2G [ N.B IT MAY CHANGE AGAIN DURING THE FREEBACK- THO' ITS VERY 20 3?G6 [ UNLIKELY: HOWEVER WE'LL PICK UP THE CHANGE NEXT TIME ROUND. 15 3?_Q FREEBACK 5,4 [FREE B.S. 10 3#FB ADDSKIP I516A,ADLFBL 15 3#_2 LDX 5 3 [NEW B.S.P 15 3*DL BRN RGETBACK [TRY AGAIN 5 3*Y= OKBSP 17 3BCW SMO FX2 [PICK UP LINK AGAIN 9 3BXG LDX 7 AWORK4 8 3CC6 ADX 7 FX1 13 3CWQ EXIT 7 0 [EXIT 4 3DBB # 21 3DW2 SEEKFULLB [ENTRY TO SEARCH FOR FULLB FROM FCB 16 3H#6 LDX 1 FPTR(3) [J OVER FSTACK 21 3HRQ SKFULLB [ENTRY TO SEARCH FOR FULLB FROM FSTAC 15 3J?B LDX 1 FPTR(1) [NEXT BLOCK 21 3JR2 BXE 1 CXFI,(7) [EXIT,NOTFOUND,IF END OF FILE CHAIN 9 3K=L LDX 0 ATYPE(1) 18 3KQ= BXE 0 FILEPLUSFCB,(7) [EXIT,NOTFOUND,IF FCB. 8 3L9W SMO FX1 17 3LPG BXU 0 SFULLB,SKFULLB [J BACK IF NOT FULLB 9 3M96 LDX 0 BSPRE(3) 18 3MNQ BXU 0 A1+1(1),SKFULLB [J BACK IF NOT RIGHT FULLB 7 3NN2 EXIT 7 1 4 3P7L # 4 3PM= # 4 3Q6W # 6 3QLG SCAREGETB 4 3R66 # 20 3RKQ # THIS SUBROUTINE (CALLED BY X6) EXITS WITH X1-> THE FPTR OF THE 21 3S5B # LAST BLOCK IN A FURB,X2 -> FCA,X3 -> FCB.ANY CAREFUL UPDATING THAT 12 3SK2 # HAS TO BE DONE HAS BEEN DONE. 21 3T4L # IF BIT 5 OF AWORK2 IS SET THE USAGE BLOCK IS NOT READ DOWN AS WO 10 3TJ= # ARE EXTENDING THE FCB. 4 3W3W # 20 3WHG # X7 IS USED AS A SUBSIDIARY CALLING ACCUMULATOR,X5 CONTAINS THE 21 3X36 # B.S. PREFIX IF(A)THEEFILEEISSCAREFULL&(B)THE BIT FOR THE BLOCK IS 11 3XGQ # NOT SET. O/W IT IS ZERO 4 3Y2B # 20 3YG2 # WE EMPLOY A STANDARD LOCKOUT MECHANISM USING B0 &B12 OF FCOMM 21 3Y_L # AND W.S. #113 TO KEEP EVERYONE OUT WHEN WE DO THEY CAREFUL UPDAT- 6 3_F= # ING. 4 3_YW # 12 42DG # ON ENTRY X3 ->FFCB,X2->>FFCA. 4 42Y6 # 8 43CQ SBX 6 FX1 14 43XB LDN 5 0 [SWITCH 18 44C2 JBC NOTCAREF,3,BFCARE [J IF NOT A CAREFUL FILE. 5 44WL THRUAGEN 13 45B= LDX 4 2 [FCA 9 45TW LDX 0 FBLMOD(3) 21 46*G SBN 0 FBLKS-A1 [LAST BLOCK BIT(MAY BE UNUSED ONE @ 18 46T6 MAPBCH 0,3 [END,IF B5 AWORK2 SET) 7 47#Q LDX 2 4 19 47SB BNZ 0 NOTCAREF [J IF BIT SET FOR THIS BLOCK. 21 48#2 BS 3,BFAPPCARE [SET 'APPEND DOING CAREFUL UPDATING' 21 48RL JBC NEWFULLB,3,BFALTB [IF 'BLOCK NOS. ALTERED' BIT IS UNSET 20 49?= [WE CREATE A NEW FULLB. J IF SO. 16 49QW CALL 7 SEEKFULLB [LOOK FOR FULLB 15 4==G BRN NEWFULLB [J IF NONE 10 4=Q6 LDX 4 ALOGLEN(1) 16 4?9Q ADN 4 1 [LENGTHEN BY 1 7 4?PB LDX 3 1 8 4#92 ALTLEN 3,4 15 4#NL CALL 7 SFSTACK [X2 -> FCA 8 4*8= PSTAC 1,2 8 4*MW BFCBX 3,1 16 4B7G CALL 7 SEEKFULLB [X1 -> FULLB 15 4CLB CALL 6 ZGEOERR [NO FULLB! 9 4D62 BRN TNEXTBL 5 4DKL NEWFULLB 15 4F5= SETNCORE 3,3,BSTB,FULLB [SET UP FULLB 7 4FJW LDN 0 2 14 4G4G STO 0 A1(3) [R.HEADER 15 4GJ6 CALL 7 SFSTACK [X2 -> FCA 14 4H3Q STO 2 4 [PRESERVE 14 4HHB PSTAC 2,2 [X2 -> FSTACK 5 4J32 SLPNF 13 4MY2 LDX 2 FPTR(2) [NEXT BLOCK 9 4NCL LDX 0 ATYPE(2) 7 4NX= #SKI K6APPEND 4 4PBW ( 12 4PWG BXE 0 FILEPLUSFCB,ZGEOER4 9 4QB6 BXU 2 CXFI,XOK 5 4QTQ ZGEOER4 14 4R*B CALL 6 ZGEOERR [NO FMAPP 4 4RT2 XOK 4 4S#L ) 7 4SS= SMO FX1 19 4T?W BXU 0 SFMAP,SLPNF [J BACK IF NOT YET UP TO FMAPP 16 4W?6 CHAIN 3,2 [CHAIN BLOCK IN. 14 4WQQ LDX 1 3 [-> FULLB 14 4X=B LDX 2 4 [-> FCA 7 4XQ2 PSTAC 3,2 14 4Y9L BFCBX 3,3 [-> FCB 5 4YP= TNEXTBL 9 4_8W LDX 5 BSPRE(3) 16 4_NG STO 5 A1+1(1) [STORE IN FULLB 17 5286 CALL 7 SGETBAC [GET NEW BLOCK NO. 21 52MQ [N.B. X4 CONTAINS BLOCK NO. - WELL, 21 537B [SOMEWHERE TO KEEP IT- BUT MUST REMEM 21 53M2 NOTCAREF [BER TO CHANGE IT IF NECESSARY AFTER 16 546L PSTAC 1,2 [->FSTACK] [A COORDINATION. 9 54L= SMO FBLMOD(3) 17 555W LDX 7 A1-1(3) [B.N.OF USAGE BLOCK. 16 55KG CALL 0 SFUB [X1->USAGE BLOCK. 15 5656 BRN NOFURBX [J IF NONE. 5 56JQ YGOTBLOC 20 574B NAME 1,FILE,FUWB [ENSURE BLOCK GETS BACKWRITTEN. 21 57J2 BZE 5 SEXIT [IF NOT CAREFUL,OR IF BIT IN FUAPP 18 583L BXE 5 BSPRE(3),NOFREEBB [BLOCK WAS SET,GO TO EXIT 21 58H= CALL 7 SFREGBAC [CHECK B.S.PREFIX & IF NECESSARYYFREE 20 592W BRN NOTCAREF [BLOCK NUMBER & GET ANOTHER.... 5 59GG NOGETBL 8 5=26 BZE 5 SEXIT 9 5=FQ BRN UPDFCB 15 5=_B NOFREEBB [UPDATE FURB 15 5?F2 STO 5 BACK1(1) [B.S.PREFIX 15 5?YL STO 4 BACK2(1) [BLOCK NO. 17 5#D= UPDFCB [UPDATE FCB & FULLB 9 5#XW SMO FBLMOD(3) 14 5*CG LDX 5 A1-1(3) [OLD B.N. 9 5*X6 SMO FBLMOD(3) 16 5BBQ STO 4 A1-1(3) [STORE NEW ONE 15 5BWB STO 1 4 [-> USAGE BL 15 5CB2 [IF THERE IS ONE 16 5CTL CALL 7 SEEKFULLB [SET X1 -> FULLB 15 5D*= CALL 6 ZGEOERR [NO FULLB! 7 5DSW LDN 0 1 15 5F#G ADS 0 A1(1) [UPDATE R.H. 8 5FS6 SMO A1(1) 16 5G?Q STO 5 A1-1(1) [STORE OLD B.N. 9 5GRB LDX 0 FBLMOD(3) 9 5H?2 SBN 0 FBLKS-A1 13 5HQL STO 2 7 [FCA 19 5J== MAPBSE 0,3 [AT LAST WE CAN SET THE BIT 7 5JPW LDX 2 7 21 5K9G MBS 3,BFALTR,BFALTB [SET 'FILE AND BLOCK NOS. ALTERED' BI 21 5KP6 JBC NOFON113,3,BFCAREW [J IF NOONE WAITING FOR UPDATE TO FIN 7 5L8Q FON #113 9 5LNB LDX 2 7 [FCA 5 5M82 NOFON113 21 5MML MBC 3,BFAPPCARE,BFCAREW [UNSET 'DOING CAREFUL UPDATING' BIT A 19 5N7= [UNSET 'WAITING' BIT,IF SET. 17 5NLW LDX 1 4 [->FXRB ,IF THERE IS ONE 5 5P6G SEXIT 8 5PL6 ADX 6 FX1 7 5Q5Q EXIT 6 0 18 5QKB # X1 -> FURB (UNLESS R5 SET IN WHICH CASE IT'S RUBBISH 17 5R52 # X2 -> FCA, X3 -> FCB,X4,5,6,7 & AWORK4 OVERWRITTEN 4 5RJL # 18 5S4= NOFURBX [NO USAGE BLOCK,GET ONE 20 5SHW LDCT 0 #10 [^LENGTHENING FCB BLOCK^BIT 8 5T3G SMO FX2 20 5TH6 ANDX 0 AWORK2 [DON'T TRY TO READ DOWN BLOCK IF 17 5W2Q BNZ 0 NOGETBL [CURRENTLY UNUSED. 21 5WGB JBC NOGOL,3,BFLAST [J IF NOONE HAS GONE FOR LAST BLOCK. 21 5X22 BS 3,BFLASTW [SET 'WAITING FOR LAST BLOCK' BIT. 9 5XFL #SKI K6APPEND>199-199 10 5X_= TRACE FX2,AWT STY4 8 5YDW COOR3 #4 9 5YYG #SKI K6APPEND>199-199 10 5_D6 TRACE FX2,ARELSTY4 9 5_XQ CALL 7 SFSTACK 7 62CB PSTAC 3,2 7 62X2 BFCBX 3,3 9 63BL BRN NOTCAREF 5 63W= NOGOL 8 64*W VARIADNR 3 9 64TG LDX 7 FBLMOD(3) 8 65*6 ADN 7 A1-1 8 65SQ LDX 2 FX2 17 66#B ERX 6 AWORK3(2) [SWAP X6 & AWORK3 WVER 16 66S2 ERS 6 AWORK3(2) [[SO X6=DEPTH 9 67?L ERX 6 AWORK3(2) 20 67R= BS 3,BFLAST [SET 'GETTING LAST BLOCK' BIT. 9 6834 ... FILEREAD 6,FAIL,,7 20 68QG ERX 6 AWORK3(2) [SWAP X6 & AWORK3 OVER AGAIN 9 69=6 ERS 6 AWORK3(2) 9 69PQ ERX 6 AWORK3(2) 10 6=9B ADDSKIP I516A,APRD 10 6=P2 MHUNT 1,BSTB,BREAD 15 6?8L CALL 7 SFSTACK [X2 ] -> FCA 13 6?N= STO 2 7 [X7 ] 8 6#7W PSTAC 2,2 15 6#?2 ... BFCBX 3,2 [X3 -> FCB 9 6#B6 ... SMO FBLMOD(3) 9 6#F= ... LDX 0 A1-1(3) 18 6#JB ... STO 0 BACK2(1) [BLOCKNO OF LAST BLOCK 16 6#MG CHAIN 1,2 [CHAIN FURB IN 14 6*76 LDX 2 7 [-> FCA 15 6*LQ PSTAC 1,2 [-> FSTACK 21 6BL2 JBC NOFON,3,BFLASTW [J IF NOONE WAITING FOR LAST BLOCK. 15 6C5L FON 4 [FON WAITERS 14 6CK= CALL 7 SFSTACK [X2->FCA 15 6D4W PSTAC 1,2 [X1->FSTACK 5 6DJG NOFON 21 6F46 MBC 3,BFLAST,BFLASTW [UNSET 'GETTING LAST BLOCK' BIT AND 19 6FHQ [UNSET 'WAITING' BIT,IF SET. 15 6G3B LDX 1 FPTR(1) [X1 ->FURB. 9 6GH2 BRN YGOTBLOC 4 6H2L # 4 6HG= # 4 6H_W # 7 6JFG [ENTRY FROM STEP 19 6J_6 STEPBREAK [STEP PLUS BREAKIN PARAMETER 8 6KDQ LDCT 0 #400 9 6KYB BRN XLOBS3 19 6LD2 STEPANS [STEP PLUS ANSWER PARAMETER 8 6LXL LDCT 0 #200 9 6MC= BRN XLOBS3 19 6MWW STEPFORCE [STEP PLUS FORCED PARAMETER 8 6NBG LDCT 0 #100 9 6NW6 BRN XLOBS3 18 6P*Q SSTEP [STEP. NO 3RD PARAMETER. 7 6PTB LDN 0 0 5 6Q*2 XLOBS3 10 6QSL STO 0 ACOMMUNE1(2) 17 6R#= [ON ENTRY FROM STEP X3 CONTAINS - B0 TO B8 FILE DEPTH 21 6RRW [ - B9 TO B23 RECORD LENGTH TO BE APPENDED 7 6S?G LDX 6 3 20 6SR6 SRA 6 15 [PICK UP LEVEL PARAMETER IN X6 21 6T=Q ANDN 3 #777 [PUT LENGTH OF RECORD TO BE APPENDED 15 6TQB STO 3 AWORK2(2) [IN AWORK2 10 6W=2 ADDSKIP I516A,K2AP 9 6WPL BRN PARAPOINT 18 6X9= [ENTRY WHEN TRYING TO APPEND A RECORD TO THE TOP FILE OPEN 21 6XNW ZAPPBREAK [ZERO DEPTH PLUS BREAKIN PARAMETER. 8 6Y8G LDCT 0 #400 9 6YN6 BRN XLOBS1 21 6_7Q ZAPPANS [ZERO DEPTH PLUS ANSWER PARAMETER. 8 6_MB LDCT 0 #200 9 7272 BRN XLOBS1 21 72LL ZAPPFORCE [ZERO DEPTH PLUS FORCED PARAMETER. 8 736= LDCT 0 #100 9 73KW BRN XLOBS1 20 745G ZAPP [ZERO DEPTH. NO 2ND. PARAMETER. 7 74K6 LDN 0 0 5 754Q XLOBS1 10 75JB STO 0 ACOMMUNE1(2) 19 7642 LDN 6 0 [GIVE LEVEL PARAMETER ZERO 9 76HL BRN TOPAPP 17 773= [ENTRY WHEN TRYING TO APPEND TO FILE OPEN AT LEVEL %A 20 77GW NAPPBREAK [N/Z DEPTH PLUS BREAKIN PARAMETER 8 782G LDCT 0 #400 9 78G6 BRN XLOBS2 20 78_Q NAPPANS [N/Z DEPTH PLUS ANSWER PARAMETER 8 79FB LDCT 0 #200 9 79_2 BRN XLOBS2 20 7=DL NAPPFORCE [N/Z DEPTH PLUS FORCED PARAMETER 8 7=Y= LDCT 0 #100 9 7?CW BRN XLOBS2 19 7?XG NAPP [N/Z DEPTH. NO 2ND. PARAMETER 7 7#C6 LDN 0 0 5 7#WQ XLOBS2 10 7*BB STO 0 ACOMMUNE1(2) 10 7*W2 LDX 6 ACOMMUNE7(2) 8 7B*L SRA 6 15 5 7BT= TOPAPP 9 7C#W STOZ AWORK2(2) 10 7CSG ADDSKIP I516A,IAPPE 4 7D#6 PARA 6 7DRQ PARAPOINT 10 7F?B SKIPTRACE 599,6,ALEVEL 17 7FR2 FILENUMB 4 [X4 = NO. FILES OPEN 17 7G=L BPZ 6 POSLV [J IF DEPTH POSITIVE 20 7GQ= ADX 6 4 [IF NEGATIVE ADD NO OF FILES OPEN 7 7H9W #SKI K6APPEND 4 7HPG ( 17 7J96 BPZ 6 NOWP1 [ERROR IF STILL <0 5 7JNQ NOTENUF 14 7K8B CALL 6 ZGEOERR [NOPENAPP 4 7KN2 ) 5 7L7L POSLV 7 7LM= #SKI K6APPEND 9 7M6W BXGE 6 4,NOTENUF 5 7MLG NOWP1 15 7N66 STO 6 AWORK3(2) [STORE DEPTH. 15 7NKQ CALL 7 SFSTACK [X2 -> FCA 15 7P5B PSTAC 1,2 [X1 -> FSTACK 7 7PK2 #SKI K6APPEND 4 7Q4L ( 20 7QJ= JMBS XAPP,2,BAMAPP,BAMGEN [CHECK FILE OPEN IN APPEND OR 17 7R3W [GENERAL MODE. 14 7RHG CALL 6 ZGEOERR [CAN'TAPP 4 7S36 ) 4 7SGQ XAPP 15 7T2B BFCBX 3,1 [X3 -> FCB 5 7TG2 XMULT 20 7T_L JBC XLOCK,3,BFAPP [J IF NOONE APPENDING TO FILE. 21 7WF= BS 3,BFAPPW [SET 'WAITING FOR APPENDER TO FINISH' 16 7WYW [BIT AND WAIT. 18 7XDG COOR4 #131 [FINISH^ BIT AND WAIT. 9 7XY6 CALL 7 SFSTACK 8 7YCQ PSTAC 1,2 8 7YXB BFCBX 3,1 8 7_C2 BRN XMULT 5 7_WL XLOCK 19 82B= BS 3,BFAPP [SET 'APPEND BEING DONE' BIT. 8 82TW SMO FX2 9 83*G LDEX 0 AWORK2 17 83T6 BNZ 0 NOTINDEX [J IF STEP(APPEND) 19 84#Q LDN 0 #77 [B18-23 OF FINFC NON-ZERO, 18 84SB ANDX 0 FINFC(3) [IMPLIES INDEXED FILE. 15 85#2 BZE 0 NOTINDEX [ERROR IF SO 14 85RL CALL 6 ZGEOERR [INDEXED! 5 86?= NOTINDEX 21 86QW BS 2,BAAPP [SET BIT TO INDICATE 'AN APPEND HAS 17 87=G [BEEN DONE ON FILE'. 5 87Q6 XCALC 9 889Q LDN 0 FBLKS-A1 16 88PB BXE 0 FBLMOD(3),ZEMPT [J IF FILE EMPTY. 20 8992 CALL 6 SCAREGETB [GET BLOCK + CAREFULL UPDATING IF 15 89NL [NECESSARY 9 8=8= LDX 5 CMOD(3) 21 8=MW BPZ 5 ONEMOREC [J IF APPEND MODIFIER NOT NEGATIVE 8 8?7G LDN 5 A1 7 8?M6 LDN 0 0 5 8#6Q NOTZERO 20 8#LB SMO FX2 [STORE FOR END [IN CASE READ PTRS 16 8*62 STO 5 AWORK1 [NEED ADJUSTING 5 8*KL SCHDUM 18 8B5= ADX 5 0 [RECORD IN USAGE BLOCK 7 8BJW SMO 5 15 8C4G LDX 0 FRH(1) [NEXT R.H. 4 8CJ6 NDUM 17 8D3Q BZE 0 UPDATE [J IF END OF BLOCK 16 8DHB BPZ 0 NOTZERO [J IF NOT DUMMY 19 8F32 LDCT 7 #100 [THE ^UNAPPENDED RECORD BIT^ 21 8FGL ANDX 7 0 [IT IS EQUIVALENT TO END OF FILE,BUT 18 8G2= BNZ 7 UPDATE [WE WANT TO OVERWRITE IT 16 8GFW LDEX 0 0 [BOTTOM 9 BITS 9 8G_G BRN SCHDUM 5 8HF6 UPDATE 21 8HYQ SMO FX2 [MUST UPDATE CMOD HERE SO NOT FOUND 21 8JDB LDX 0 AWORK1 [TO BE NEGATIVE AFTER COORDINATION 18 8JY2 STO 0 CMOD(3) [IN FDRMAUTO LATER ON. 9 8KCL BRN NOTHERE 5 8KX= ONEMOREC 16 8LBW SMO FX2 [STORE FOR END. 9 8LWG STO 5 AWORK1 7 8MB6 SMO 5 21 8MTQ LDX 0 FRH(1) [PICK UP RECORD HEADER OF LAST RECORD 8 8N*B LDCT 7 #100 7 8NT2 ANDX 7 0 21 8P#L BNZ 7 NOTHERE [J IF THIS IS AN UNAPPENDED RECORD. 7 8PS= LDEX 0 0 7 8Q?W ADX 5 0 5 8QRG NOTHERE 7 8R?6 #SKI K6APPEND 4 8RQQ ( 21 8S=B BXL 5 BSBSA1,RECGOOD [CHECK WORD POINTER DOES NOT POINT 14 8SQ2 CALL 6 ZGEOERR [DIR MESS 4 8T9L ) 5 8TP= RECGOOD 8 8W8W SMO FX2 9 8WNG LDEX 7 AWORK2 15 8X86 BNZ 7 STEP [J IF STEP 4 8XMQ NST 18 8Y7B MHUNTW 2,FILE,FAPB [MANDATORY HUNT FOR FAPB 21 8YM2 LDEX 7 A1(2) [PICK UP LENGTH OF REC TO BE APPENDED 4 8_6L STEP 7 8_L= #SKI K6APPEND 4 925W ( 21 92KG BNG 7 WRONGLTH [ERROR IF RECORD LENGTH IS NEGATIVE 14 9356 BZE 7 WRONGLTH [OR ZERO 20 93JQ BXL 7 BSBS,OKLTH [J IF REC HEADER LESS THAN BSBS 5 944B WRONGLTH 15 94J2 CALL 6 ZGEOERR [FAPBRECHD 4 953L ) 5 95H= OKLTH 19 962W LDX 0 5 [REC LENGTH IN BLOCK ALREADY 18 96GG ADX 0 7 [ADD NEW RECORD LENGTH 20 9726 BXGE 0 BSBSA1,NOTFIT [J IF NEW REC WON'T FIT IN BLOCK 5 97FQ MOVEREC 10 97_B LDX 0 FCOMMCT(3) 19 98F2 BZE 0 NOTCOMF [J IF NOT COMMUNALLY OPENED 21 98YL STO 1 6 [STORE PTRS TO FUWB AND FAPB SOTHAT 21 99D= STO 2 4 [IF FDRMAUTO DOESN'T COORDINATE,WE 20 99XW [DONT NEED TO REHUNT THE BLOCKS. 20 9=CG FDRMAUTO STEPWAIT,XGETPTRS [AUTO ALL 'SUSIN'-ERS. J IF NONE. 14 9=X6 CALL 7 SFSTACK [X2 _ FCA 8 9?BQ PSTAC 1,2 8 9?WB BFCBX 3,1 9 9#B2 LDX 0 CMOD(3) 8 9#TL SMO FX2 19 9**= BXU 0 AWORK1,XCALC [CMOD MAY HAVE CHANGED DUE TO 17 9*SW CALL 6 SCAREGETB [DESTRUCTIVE READERS. 9 9B#G SMO CMOD(3) 16 9BS6 LDEX 5 FRH(1) [RECALCULATE CMOD 9 9C?Q ADX 5 CMOD(3) 5 9CRB NOTCOMF 8 9D?2 SMO FX2 9 9DQL LDEX 0 AWORK2 15 9F== BZE 0 NOTSTEP [J IF NOT STEP 9 9FPW BRN STEPOUT 5 9G9G STEPOUTA 16 9GP6 NGS 2 CMOD(3) [CMOD<0 FOR STEP 5 9H8Q STEPOUT 9 9HNB SETREP COORED 9 9J82 BRN NOTOK1 5 9JML XGETPTRS 7 9K7= LDX 1 6 7 9KLW LDX 2 4 9 9L6G BRN NOTCOMF 5 9LL6 NOTSTEP 15 9M5Q STO 5 CMOD(3) [UPDATE CMOD 10 9MKB MHUNT 2,FILE,FAPB 18 9N52 LDEX 7 A1+FRH(2) [GICK UP R.H.OF APPENDEE 17 9NJL LDX 4 7 [PUT REC.LENGTH IN X4 20 9P4= LDN 7 A1(2) [X7 -> BEGINNING OF REC IN FAPB 7 9PHW SMO 5 19 9Q3G LDN 0 FRH(1) [X0 -> WHERE REC APPENDED TO. 7 9QH6 SMO 4 19 9R2Q MOVE 7 0 [MOVE RECORD ACROSS TO FUB 7 9RGB ADX 5 4 17 9S22 NAME 1,FILE,FUWB [ENSURE THIS IS FUWB 7 9SFL SMO 5 20 9S_= STOZ 0(1) [APPEND ZERO REC @ END OF NEW REC 8 9TDW SMO FX1 9 9TYG LDX 0 MCOMCOM 9 9WD6 ANDX 0 COMM(3) 21 9WXQ BZE 0 NOWTAPP [J IF NO ACT WAITING FOR REC TO BE 14 9XCB [APPENDED 17 9XX2 ERS 0 COMM(3) [REMOVE WAITING BIT 9 9YBL #SKI K6APPEND>159-159 11 9YW= TRACEVER FBLMOD(3),FON 5 21 9_*W LONGON 5,BACK2(3) [RELFASE ACTIVITIES WAITING FOR THIS 14 9_TG [APPEND 5 =2*6 NOWTAPP 18 =2SQ BS 3,BFALTR [SET 'FILE ALTERED' BIT. 15 =3#B CALL 7 SFSTACK [X2 -> FCA 9 =3S2 LDX 0 FBLMOD(3) 21 =4?L ADN 0 A1 [ARE WE POSITIONED ON ^SPARE^ BL.NO. 10 =4R= SBX 0 FREADBLOCK(2) 14 =5=W BNZ 0 NOTFRIG [J IF NOT 10 =5QG LDX 0 FREADWORD(2) 20 =6=6 LDX 1 CMOD(3) [DEFAULT FOR^HAVE JUST READ EOF^ 19 =6PQ BPZ 0 NOTABL [J IF POS'ND ^HAVE READ EOF^ 19 =79B SMO FX2 [USE OLD CMOD,LEFT BY EARLIER 16 =7P2 LDX 1 AWORK1 [PART OF ROUTINE 5 =88L NOTABL 13 =8N= STO 1 FREADWORD(2) [STORE 17 =97W LDX 0 FBLMOD(3) [UPDATE FREADBLOCK 8 =9MG ADN 0 A1-1 10 ==76 STO 0 FREADBLOCK(2) 5 ==LQ NOTFRIG 7 =?6B SETREP OK 5 =?L2 NOTOK1 8 =?R8 ... SMO FX2 19 =?YB ... STOZ ACOMMUNE2 [CLEAR SUBSIDUARY REPLY WORD 19 =#5L JBS SETREPOK,3,BFDCF [J IF DCF TO SET OK REPLY. 14 =#K= JBS SETREPOK,3,BFGDR [J IF GDR 17 =#P7 ... LDX 5 FINFC(3) [ INDEXED IF BTM 6 BITS #0 8 =#T4 ... ANDN 5 #77 15 =#Y_ ... BZE 5 NOTINXF [ J - IF NOT INDEXED 18 =*4W ... DOWN INDEX,8 [ CHECK FNEARLY FOR INDEXED FILES 18 =*8R ... CALL 7 SFSTACK [ I.E. 4*FNEARLY !!!!, X2 -> FCA 8 =*#N ... PSTAC 3,2 12 =*DK ... BFCBX 3,3 [ X3 -> FCB 9 =*JG ... BRN SETREPOK 19 =*KR ... SEGENTRY FNYBLCK [RESTORE TIME MACRO FNYLIST 8 =*M4 ... +0 5 =*NC ...NOTINXF 18 =*QT ... SEGENTRY K98APPEND [RESTORE MACRO FNYLIST 8 =*T? ... BRN NORM2 17 =*XP ... [OVERWRITTEN BY FNYLIST 8 =B27 ... SMO FX1 9 =B4K ... NGX 0 FNYBLCK 9 =B73 ... ADX 0 FSIZE(3) 9 =B9F ... SBX 0 FBLMOD(3) 17 =B?Y ... ADN 0 AF2-A1 [ TEST FNEARLY FOR NON-INDEXED 9 =BHQ ... BPZ 0 SETREPOK 21 =BMM ... SREP FNEARLY2 [SETREP IF WITHIN CHOSEN LIMIT OF END 5 =BRJ ...NORM2 9 =BXF ... LDX 0 FBLMOD(3) 21 =C3B ... SBN 0 AF2-A1-FNEARLY [TEST FNEARLY FOR NON-INDEXED FILES 17 =C7? ... SBX 0 FSIZE(3) [ARE WE NEARLY FULL 9 =C?8 ... BNG 0 SETREPOK 21 =CC5 ... SETREP FNEARLY [SETREP FNEARLY IF FILE NEARLY FULL 5 =CH2 SETREPOK 7 =D2L STOZ 6 8 =DG= BRN NOBRK 4 =D_W XBRK 9 =FFG CALL 7 SFSTACK 8 =F_6 PSTAC 1,2 8 =GDQ BFCBX 3,1 7 =GYB NGN 6 1 5 =HD2 NOBRK 21 =HXL JBC NFON,3,BFAPPW [J IF NOONE WAITING FOR APPEND TO FIN 15 =JC= FON #131 [FON WAITERS 4 =JWW NFON 21 =KBG MBC 3,BFAPP,BFAPPW [UNSET 'APPEND BEING DONE' BIT AND 19 =KW6 [UNSET 'WAITING' BIT,IF SET. 15 =L*Q BNG 6 XBRK1 [J IF BREAKIN 8 =LTB LDX 2 FX2 9 =M*2 LDEX 0 AWORK2(2) 16 =MSL BZE 0 UP1 [J IF NOT STEP 10 =N#= TESTREP2 GLUTTON,UP2 10 =NRW TESTRPN2 REFUSED,UP1 4 =P?G UP2 18 =PR6 UPPLUS 2 [EXIT PAST 2ND STEP CALL 4 =Q=Q UP1 7 =QQB UPPLUS 1 5 =R=2 XBRK1 5 =RPL UP 5 =S9= NOTFIT 4 =SNW # 15 =T8G # THIS SECTION DEALS WITH THE SPENT BLOCK 4 =TN6 # 21 =W7Q SMO 5 [IN CASE IT WAS A ^NOT YET APPENDED 21 =WMB STOZ FRH(1) [RECORD & SIZE OF STEP-APPENDEE CHANGE 18 =X72 [SO IT DIDN'T FIT ANYMORE 16 =XLL JBC NODCF,3,BFDCF [J IF NOT A DCF. 18 =Y6= JBS SKCOP,3,BFVSF [J IF VITAL SYSTEM FILE 21 =YKW BRN UFIN [OTHERWISE LEAVE USAGE BLK IN CORE. 5 =_5G NODCF 21 =_K6 JBS UFIN,3,BFCORE [J IF 'LEAVE BLOCKS IN CORE' BIT SET. 5 ?24Q SKCOP 9 ?2JB LDX 4 FBLMOD(3) 20 ?342 ADN 4 A1-1 [PICK UP -> TO LAST BLOCK OF FILE 7 ?3HL LDX 7 4 18 ?43= SBN 7 1 [X7->LAST BLOCK BUT ONE. 20 ?4GW LDX 2 FPTR(3) [PICK UP POINTER TO FSTACK BLOCK 20 ?52G LDEX 0 ARINGNO(2) [NO OF ELEMENTS IN FSTACK BLOCK 7 ?5G6 SBN 0 1 19 ?5_Q BZE 0 ONEFCA [J IF ONLY 1 FCA IN FSTACK 7 ?6FB ADN 0 1 18 ?6_2 ADN 2 A1 [X2-> FIRST RING ELEMENT 6 ?7DL STACKLOOK 11 ?7Y= SKIPTRACE 999,4,STACKLUK 20 ?8CW BXE 4 FREADBLOCK(2),ZEMPT [J IF SOMEONE USING USAGE BLOCK 18 ?8XG BXE 7 FREADBLOCK(2),ZEMPT [OR PREVIOUS USAGE BLOCK. 9 ?9C6 ADN 2 FELLEN 21 ?9WQ BCT 0 STACKLOOK [J IF MORE RING ELEMENTS TO LOOK AT 5 ?=BB ONEFCA 9 ?=W2 LDX 0 ATYPE(1) 8 ??*L SRL 0 12 9 ??T= SBN 0 FILE+FUWB 18 ?##W BZE 0 UWRITE [J IF USAGE WRITE BLOCK 11 ?#SG SKIPTRACE 999,1,FRE APP 10 ?*#6 ADDSKIP I516A,APFR 15 ?*RQ FREECORE 1 [FREE THE FRB 8 ?B?B BRN UFIN 5 ?BR2 UWRITE 12 ?C=L SKIPTRACE 599,BACK2(1),BLNUM 8 ?CQ= CHAIN 1,FX2 10 ?D9W ADDSKIP I516A,APWR 8 ?DPG LDX 2 FX2 15 ?F96 LDX 6 AWORK3(2) [FILE DEPTH 9 ?FNQ LDX 7 FBLMOD(3) 8 ?G8B ADN 7 A1-1 8 ?GN2 VARIADNW 3 11 ?H7L FILEAUTW 6,FAIL+FREE,,7 4 ?HM= UFIN 15 ?J6W CALL 7 SFSTACK [X2 -> FCA 15 ?JLG PSTAC 1,2 [X1 -> FSTACK 15 ?K66 BFCBX 3,1 [X3 -> FCB 4 ?KKQ # 20 ?L5B # THIS SECTION CHECKS FOR FILEFULL-& IF FILEFULL&DC GOES TO A 20 ?LK2 # WAITING ROUTINE. OTHERWISE IT EXTENDS THE FCB -EITHER BY USING 20 ?M4L # A SPARE BLOCK @ THE END OF THE BLOCKLIST OR BY GETTING A NEW 13 ?MJ= # BLOCK IF THERE ISN'T A SPARE ONE. 4 ?N3W # 5 ?NHG ZEMPT 19 ?P36 LDX 0 FBLMOD(3) [LENGTH OF FCB BEING USED. 20 ?PGQ SBN 0 FBLKS-A1 [NO OF BLOX IN FILE BEING USED 20 ?Q2B BXGE 0 FSIZE(3),YESFULL [J IF FILE FULL. IN SOME D.C.FILE 21 ?QG2 [CASES IT IS POSSIBLE FOR THE FILE 21 ?Q_L [TO START OFF LARGER THAN ITS ^MAX- 19 ?RF= [IMUM SIZE^AS GIVEN BY[FSIZE] 4 ?RYW [ 21 ?SDG WAITCOMM [RE-ENTRY FROM COMMFILE AFTER WAITING 18 ?SY6 [FOR BLOCK TO BE FREED. 4 ?TCQ [ 14 ?TXB CALL 7 SFSTACK [X2->FCA 7 ?WC2 LDX 1 2 8 ?WWL LDX 2 FX2 14 ?XB= LDX 6 AWORK3(2) [DEPTH 20 ?XTW APPCUBS XBRK,1 [ARE WE ALLOWED ANY MORE BLOCKS? 9 ?Y*G CALL 7 SFSTACK 8 ?YT6 PSTAC 1,2 8 ?_#Q BFCBX 3,1 15 ?_SB TESTREPN OK,SETREPOK [J IF NOT. 9 #2#2 LDX 4 FBLMOD(3) 11 #2RL BXGE 4 FUSEBL(3),NEWFCB 20 #3?= # WE HAVE TO BE VERY CAREFUL OF WHEN WE UPDATE FBLMOD,AS READFILE 20 #3QW # USES IT AS WELL,SO WE HAVE TO LOCK OUT OTHER(COMMUNAL) READERS 20 #4=G # AND APPENDERS IF WE COORDINATE AFTER UPDATING FBLMOD BUT BEFORE 11 #4Q6 # ACTUALLY APPENDING ANYTHING. 4 #59Q # 19 #5PB ADN 4 1 [ADD ONE TO LENGTH OF USED 16 #692 STO 4 FBLMOD(3) [EXTEND FBLMOD 20 #6NL # THIS MEANS WE HAVE TO SET ^GONE FOR LAST BLOCK BIT ^ WHEN WE 21 #78= # SET UP THE CORE USAGE BLOCK,TO PREVENT ANOTHER APPENDER LEAPING 18 #7MW # IN & TRYING TO READ DOWN THE (SPURIOUS) LAST BLOCK. 21 #87G LDCT 0 #10 [SET ^DON'T READ DOWN USAGE BLOCK^BIT 8 #8M6 SMO FX2 9 #96Q ORS 0 AWORK2 19 #9LB CALL 6 SCAREGETB [DO CAREFUL UPDATING ON BLOCK 21 #=62 MBS 3,BFALTR,BFALTB [SET 'FILE AND BLOCK NOS. ALTERED' BI 8 #=KL BRN UPFCB 5 #?5= NEWFCB 21 #?JW MBS 3,BFALTR,BFALTB,BFNEW [SET 'FILE AND BLK NOS. ALTERED' 21 ##4G [BITS AND 'GONE FOR NEW BLK' BIT. 19 ##J6 JBC NMBIN,3,BFCARE [J IF FILE NOT CAREFUL 20 #*3Q LDX 0 FBLMOD(3) [SET A BIT AFTER LAST ONE IN FCB 10 #*HB SBN 0 FBLKS-A1-1 8 #B32 SMO FX2 14 #BGL LDX 6 AWORK3 [DEPTH 8 #C2= MAPBIN 0,6 9 #CFW CALL 7 SFSTACK 8 #C_G PSTAC 2,2 8 #DF6 BFCBX 3,2 5 #DYQ NMBIN 10 #FDB LDX 4 ALOGLEN(3) 7 #FY2 ADN 4 1 18 #GCL ALTLEN 3,4 [ADD ONE TO LENGTH OF CFB 15 #GX= CALL 7 SFSTACK [X2-> FCA 14 #HBW PSTAC 1,2 [X1->STACK 13 #HWG BFCBX 3,1 [X3->FCB 9 #JB6 LDX 5 BSPRE(3) 17 #JTQ CALL 7 SGETBAC [GET A BLOCK NUMBER 21 #K*B BC 3,BFNEW [UNSET 'GETTING NEW BLOCK' BIT. 21 #KH9 ... SMO FUSEBL(3) [STORE NEW B.N. AT END OF BLOCK LIST. 21 #KP4 ... STO 4 A1(3) [NB FUSEBL USED NOT FBLMOD IN CASE TH 20 #KWX ... [ARE NOW 'OUT OF STEP' SINCE A 19 #L4Q ... [DESTRUCTIVE READER MAY HAVE 21 #L=K ... [RESHUFFLED BLOCK NOS AND DECREMENTED 21 #LDD ... [FBLMOD WHILE APPEND COORDINATING. 21 #LL? ... [DURING ALTLEN OR GETBACK. SEE BUG NO 9 #LS= # SEE NOTE @ ^NOTFULL^ 7 #M?W LDN 0 1 16 #MRG ADS 0 FBLMOD(3) [EXTEND BLOCK. 9 #N?6 ADS 0 FUSEBL(3) 5 #NQQ UPFCB 17 #P=B SMO FBLMOD(3) [ LAST BLOCK NUMBER 9 #PQ2 LDX 7 A1-1(3) 7 #Q9L PSTAC 1,2 21 #QP= CALL 0 SFUB [FOR D.C. FILES BLOCK MAY STILL BE 17 #R8W BRN MUSTGETC [IN CORE. J IF NOT. 18 #RNG CHAIN 1,FPTR(3) [CHAIN ENXT TO THE FSTACK 9 #S86 BRN SETCMOD 5 #SMQ MUSTGETC 21 #T7B BS 3,BFLAST [SET 'GONE FOR LAST BLOCK' BIT. 18 #TM2 [SEE COMMENT ABOVE. 18 #W6L GETCORE BSBS,1 [GET CORE FOR USAGE BLOCK 8 #WL= MHUNT 1,GCB 15 #X5W CALL 7 SFSTACK [X2 -> FCA 15 #XKG PSTAC 3 ,2 [X3 -> FSTACK 20 #Y56 CHAIN 1,3 [CHAIN FUWB AFTER FSTACK BLOCK 15 #YJQ BFCBX 3,3 [X3 -> FCB 21 #_4B JBC NOFONN4,3,BFLASTW [J IF NOONE WAITING FOR LAST BLOC 15 #_J2 FON 4 [FON WAITERS 5 *23L NOFONN4 21 *2H= MBC 3,BFLAST,BFLASTW [UNSET 'GETTING LAST BLOCK' BIT AND 19 *32W [UNSET 'WAITING' BIT,IF SET. 9 *3GG LDX 0 BSPRE(3) 15 *426 LDX 2 FPTR(3) [-> FSTACK 14 *4FQ LDX 2 FPTR(2) [-> FURB 9 *4_B STO 0 BACK1(2) 20 *5F2 SMO FBLMOD(3) [UPDATE B.S HOME OF USAGE BLOCK. 9 *5YL LDX 0 A1-1(3) 9 *6D= STO 0 BACK2(2) 5 *6XW SETCMOD 17 *7CG LDX 1 FPTR(3) [X1 -> FSTACK BLOCK 15 *7X6 LDX 1 FPTR(1) [X1 -> FUWB 5 *8BQ NOWTNK 9 *8WB NAME 1,FILE,FUWB 17 *9B2 STOZ A1(1) [ZEROISE R.H OF FAPB 8 *9TL SMO FX2 9 *=*= LDEX 0 AWORK2 17 *=SW BNZ 0 STEPOUTA [J IF STEP(APPEND) 8 *?#G LDN 5 A1 15 *?S6 STO 5 CMOD(3) [UPATE CMOD 10 *#?Q MHUNT 2,FILE,FAPB 19 *#RB LDEX 7 A1(2) [LENGTH OF REC TO BE APPENDED 9 **?2 BRN NOTSTEP 5 **QL YESFULL 4 *B== [ 4 *BPW [ 18 *C9G [THIS SECTION DEALS WITH THE PROCEEDURE WHEN FILE IS FULL 4 *CP6 [ 4 *D8Q [ 18 *DNB JBS SDESTWT,3,BFDCF [J IF DEST. COMM. FILE 16 *F82 JBC XFULL,3,BFGDR [J IF NOT G.D.R. 10 *FML ... LDX 0 FCOMMCT(3) 18 *G7= ... BZE 0 XFULL [J IF NOT COMMUNALLY OPEN 8 *GLW LDN 0 #7777 18 *H6G ANDX 0 CTOPEN(3) [ANY COMMUNAL READERS? 14 *HL6 BNZ 0 SDESTWT [J IF SO. 5 *J5Q XFULL 8 *JKB #SKI K6APPEND>99-99 11 *K52 TRACE FLOC1(3),FILEFULL 9 *KJL SETREP FILEFULL 9 *KQW ... LDX 0 FINFC(3) 8 *K_6 ... ANDN 0 #77 9 *L7B ... BZE 0 SETREPOK 14 *L*L ... CALL 6 ZGEOERR [ INDEXED FILE FULL 5 *LHW SDESTWT 8 *M3G #SKI K6APPEND>99-99 11 *MH6 TRACE FLOC1(3),DEST AWT 9 *N2Q #SKI K6APPEND>159-159 12 *NGB TRACEVER FSIZE(3),APP WT1 8 *P22 LDX 2 FX2 9 *PFL LDX 0 AWORK3(2) 15 *P_= STO 0 ACOMMUNE2(2) [FILE DEPTH 19 *QDW ACROSS COMMFILE,3 [WAIT FOR BLOCK TO BE FREED 4 *RD6 #END 8 ____ ...75770554000500000000