JSB ER6 NO SRCFL EQU * STB SVAEN SAVE ENTRY ADDR JSB SVPNS SAVE PACK NO. SEARCH ENVIRONMENT LDB SVAEN RESTORE ENTRY ADDR ADB D3 INCREMENT TO T/S OF DIRECTORY LDA B,I GET T/S START OF EFMP DIRECTORY LDB PNEAD GET ADDR OF PACK NO. ENTRY STA B,I STORE STARTING T/S JMP CSET1 NO SPNE1 EQU * CLA,INA NO NEW ENTRY SWITCH STA PNESW STORE SWITCH CSET1 EQU * JSB SETD1 SET UP FOR EFMP SEARCH JSB SRCDR SEARCH FOR FILE RSS FILE NOT FOUND JMP BLFTE FILE FOUND LDA ARG4,I GET PACK NO. SSA,RSS TRY ALL PACKS ? JSB ER3 NO JSB REPNS RESTORE PACK NO. SEARCH ENVIRONMENT JSB GTNPN YES, SEARCH FOR NEXT PACK NO. JSB ER6 NO PACK NO. AVAILABLE JMP SRCFL PACK NO. AVAILABLE BLFTE EQU * STB OCFPO OPEN/CLOSE FILE POSITION ADB D6 LDA B,I SECURITY CODE CPA ARG6,I VALID? RSS YES JSB ER7 CLA STA B,I CLEAR FOR IN CORE LDB ARG4,I GET PACK NO. SSB,RSS TRY ALL PACKS ? JMP MOVEN NO CLA,INA SEARCH FOR ACTIVE ENTRY SWITCH LDB DPNO GET PACK NO. JSB CKPNT PACK NO. IN TABLE JMP SFAVE NO CLA,INA NO NEW ENTRY SWITCH STA PNESW STORE SWITCH JMP MOVEN SFAVE EQU * CLA SEARCH FOR ENTRY SWITCH JSB CKPNT IS AN ENTRY AVAILABLE ? JSB ER16 NO LDA MD4 MOVE COUNT STA MOVCT STORE MOVE COUNT LDA ADPNE SOURCE ADDR LDB PNEAD DESTINATION ADDR JSB MOVE MOVE PACK NO. ENTRY FROM DUMMY TO REAL CLA NEW ENTRY USED SWITCH STA PNESW STORE SWITCH MOVEN EQU * LDA MXWPE MAX. WDS/ENTRY CMA,INA STA MOVCT NO. WDS TO MOVE LDA OCFPO O/C FILE POSITION(SOURCE) LDB NXOTL NEXT O.T. LOC.(DESTINATION) JSB MOVE INSERT NEXT ENTRY LDB NXOTL GET NEW OPEN TABLE ADDR ADB D2 INCREMENT TO PACK NO. OFFSET LDA B,I ZERO PACK NO OFFSET AND H8BT STA B,I STORE IT LDA NXOTL GET ADDR OF OPEN TABLE ENTRY JSB STPNO STORE PACK NO. OFFSET IN ENTRY LDA NXOTL GET ADDR OF OPEN TABLE ENTRY JSB SFSTS STORE STARTING T/S IN ENTRY LDB NXOTL GET ADDR OF OPEN TABLE ENTRY ADB D9 INCREMENT TO DIREC ENTRY T/S FIELD LDA TRKIO GET TRACK ALF,ALF SHIFT TRACK TO LEFT XOR SECIO GET DIRECTORY ENTRY SECTOR NO. STA B,I STORE DIRECTORY ENTRY T/S IN OPEN TABLE INB INCREMENT TO PACK NO. FIELD LDA DPNO GET PACK NO. STA B,I PACK NO. INB JSB GTRBN GET TRB NO. STA B,I TRB NO. LDA PAKSC PACK SUB CH. INB STA B,I INB CLA STA B,I T/S CUR. IN CORE ADB MD5 LDA B,I "HRA" ON DISC ADB D7 STA B,I "HRA" IN CORE LDB NXOTL NEXT O.T.LOC. JSB CKMRN CHECK MAX. RECD. NO. STA B,I NEXT RECORD BEING PROCESSED ADB D2 STB NXOTL UPDATE NEXT O.T. LOC. LDB PNESW GET PACK NO. ENTRY SWITCH SZB NEW ENTRY USED ? JMP EFCON NO LDB NXPTL GET ADDR OF NEXT PACK NO. ENTRY ADB D4 UPDATE ADDR FOR NEW ENTRY STB NXPTL STORE NEW ADDR JMP EFCON RETURN TO MAIN SPC 1 OTMFL EQU * "OPEN" TEMP FILE LDB ARG3 ADDR. OF FILE NAME JSB CKOPN CHECK IF FILE ALREADY OPEN JSB ER8 NOT IN DIR. FROM CREATE STB OCFPO SAVE FILE POSITION IN O.T. ADB D10 INCREMENT TO PACK NO. FIELD CLA PN000 CPA B,I PACK NO. = 0 ? RSS YES JSB ER8 NO LDB OCFPO GET ADDR OF START OF ENTRY JSB GTRBN GET TRB NO. ADB D11 STA B,I TRB NO. LDB OCFPO POSITION IN O.T. JSB CKMRN CHECK MAX. RECD. NO. STA B,I STARTING R.N. JMP EFCON RETURN TO MAIN SPC 1 CKMRN NOP CHECK MAX. RECD. NO. LDA ARG5,I RCDNO SSA JSB ER10 ADB D4 CMA,INA ADA B,I FILE LENGTH(IN RECORDS) SSA .GT. FILE SIZE? JSB ER10 YES LDA ARG5,I RCDNO ADB D10 POINT TO NEXT R.N. BEING ACC. SZA START AT EOF? JMP CKMRN,I NO INB LDA B,I "HRA" IN CORE ADB MD1 INA JMP CKMRN,I RETURN HED CLOSE FUNCTION * * CLOSE FUNCTION * FUN05 EQU * JSB CKVSU CHECK IF VALID DEFINE PREVIOUSLY LDA ARG3,I PICK UP 1ST WORD SZA CLOSE ALL FILES? JMP CLSIT NO, CLOSE ONLY ONE * CLOSE ALL FILES NXCLS EQU * NEXT CLOSE LDA OPNT1 START OF O.T. CMA ADA NXOTL NEXT O.T. LOC SSA .GE. (FINISHED)? JMP EFCON YES, RETURN TO MAIN LDB OPNT1 START OF O.T. STB ARG3 STORE ADDR OF FILE NAME JSB CLOS1 CLOSE 1ST ONE AND REPACK JMP NXCLS NEXT CLOSE SPC 1 CLSIT EQU * CLOSE IT LDB ARG3 ADDR. OF FILE NAME JSB CKOPN CHECK IF OPEN JSB ER11 FILE NOT OPEN JSB CLOS1 CLOSE THIS FILE ONLY JMP EFCON RETURN TO MAIN SKP * CLOS1 - CLOSE 1 FILE * ENTER: * B = ADDR. OF FILE NAME * EXIT: * FILE CLOSED (REMOVED FROM O.T.) AND * WORK AREA REPACKED IF NECESSARY (ALL * TRB'S WILL BE POSTED IF W.A. IS REPACKED) * CLOS1 NOP CLOSE 1 FILE STB OCFPO+1 O/C FILE POSITION ADB D12 INCREMENT TO SUBCHANNEL FIELD LDA B,I GET SUBCHANNEL STA PAKSC INIT PACK SUBCHANNEL ADB MD2 BACK UP TO PACK NO. FIELD LDA B,I GET PACK NO. SZA,RSS PN000 ? JMP DISRP YES LDB OCFPO+1 GET OPEN TABLE ENTRY JSB GETDE GET DIRECTORY ENTRY LDB CNAME GET ADDR OF DIRECTORY ENTRY STB OCFPO STORE ADDR LDB OCFPO+1 ADDR OF OPEN TABLE ENTRY ADB D11 LDA B,I TRB NO. LDB D3 ADA MD1 JSB MPY CALC. BIAS ADA FTRBE START OF TRB'S LDB A ADA D2 LDA A,I TRB POINTER TO O.T. CPA OCFPO+1 THIS TRB FOR THIS FILE? JSB POSTW POST IF NECESSARY LDB OCFPO+1 POINTER TO FILE IN O.T. ADB D8 LDA B,I H.R.N. WRITTEN ON DISC ADB D7 CMA,INA ADA B,I H.R.N. ACCESSED IN CORE ELA SAVE SIGN OF "A" LDA B,I H.R.N. ACCESSED IN CORE LDB OCFPO POINTER TO FILE IN $BUF ADB D8 SEZ UPDATE OLD HRN?(NEW .GT. OLD?) STA B,I YES LDA ARG4,I USER STATUS CODE ADB MD1 STA B,I UPDATE USER STATUS CODE CLA,INA WRITE LDB PAKSC GET SUBCHANNEL JSB PRWIO WRITE UPDATED DIRECTORY ENTRY LDB OCFPO+1 POINTER TO FILE IN O.T. ADB D2 INCREMENT TO PACK NO. OFFSET FIELD LDA B,I GET PACK NO. OFFSET STA SVPNO SAVE THE PACK NO. OFFSET ADB MD2 BACK UP TO START OF ENTRY JSB MOVOT MOVE OPEN TABLE LDA SVPNO GET PACK NO. OFFSET JSB MVPNT UPDATE PACK NO. TABLE JMP CLOS1,I RETURN DISRP EQU * LDB OCFPO+1 POINTER TO FILE IN O.T. STB FILPO INITIALIZE POINTER JSB POST JSB RPWKA REPACK WORK AREA JMP CLOS1,I RETURN SKP * MOVOT - MOVE OPEN TABLE AND UPDATE TRB POINTERS * ENTER: * B = STARTING ADDR. OF ENTRY TO BE * DELETED IN O.T. * EXIT: * OPEN TABLE AND TRB TRIPLET'S REPACKED * MOVOT NOP MOVE O.T. AND MODIFY TRB TRIPLET STB MVOT1 SAVE POINTER TO O.T. ADB WPOTE WORDS/O.T. ENTRY CMB,INB ADB NXOTL NEXT O.T. LOCATION LDA MVOT1 SZB,RSS ANY ENTRIES TO MOVE? JMP NOMOV NO CMB,INB STB MOVCT NO. OF WDS TO MOVE ADA WPOTE SOURCE ADDR. LDB MVOT1 DESTINATION ADDR. JSB MOVE STB NXOTL UPDATE NEXT O.T. LOC. RSS NOMOV EQU * NO MOVE STA NXOTL UPDATE NEXT O.T. LOC. LDA NOTRB NO. TRB CMA,INA STA MVOTX INITIALIZE INDEX LDB FTRBE ADB D2 MOVNA EQU * MOVE NEXT ADDR. LDA B,I PICK UP POINTER TO O.T. ENTRY CPA MVOT1 JMP CLRIT CLEAR IT CMA,INA ADA MVOT1 SSA,RSS .GE. TO ENTRY MOVED? JMP MVNTR NO LDA B,I POINTER TO OLD ENTRY IN O.T. ADA MWPOT BIAS BACK 1 ENTRY STA B,I RESTORE IT MVNTR EQU * MOVE TO NEXT TRB ADB D3 BIAS TO NEXT TRB TRIPLET ISZ MVOTX FINISHED? JMP MOVNA NO, MOVE NEXT ADDR. JMP MOVOT,I RETURN CLRIT EQU * CLEAR IT CLA STA B,I CLEAR THIS POINTER JMP MVNTR MOVE TO NEXT TRB HED OPEN/CLOSE ROUTINES * GTRBN - GET TRB NUMBER AND CHECK IT * ENTER: * ARG7 = ADDR. OF DESIRED TRB NO. * EXIT: * A = TRB NO. * B IS SAVED * GTRBN NOP GET TRB NO. LDA ARG7,I TRB NO SSA INVALID? JMP GTRB1 YES CMA,INA ADA NOTRB MAX. NO. TRB'S SSA .GT.? JMP *+3 YES LDA ARG7,I JMP *+2 GTRB1 EQU * CLA SZA,RSS INVALID 0? INA YES JMP GTRBN,I RETURN OCFPO OCT 0,0 OPEN/CLOSE FILE POSITION MVOT1 OCT 0 TEMP LOC. FOR MOVE O.T. MVOTX OCT 0 INDEX FOR MOVE O.T. SPC 3 * RPDIS - REPACK 1 DISC ENTRY * ENTER: * A = STARTING T/S OF NEXT DATA AREA * B = FILE POSITION * DISSC = DESIRED SUBCHANNEL * EXIT: * A = (-) NO. SECT. MOVED * P+1 = UPDATED LAST FILE ONLY * P+2 = UPDATED OTHER THAN LAST FILE * RPDIS NOP REPACK 1 DISC ENTRY JSB T.STS CONV. TO SECT. STA RPSTS LAS DATA FILE SECTOR+1 STB RPLOC FILE LOC. ADB D3 LDA B,I T/S IN WORK AREA JSB T.STS CONVERT TO SECTORS STA CFILS CURRENT FILE STARTING SECTOR INB LDA B,I FILE LENGTH (IN RECORDS) INB LDB B,I RECORD LENGTH (IN WORDS) JSB MPY CALC. FILE LENGTH IN WORDS JSB DIV CALC. FILE LENGTH IN SECTORS DEF D128 SOC OVERFLOW ? JSB ER23 YES, ERROR SHOULD NOT OCCUR SZB OVERFLOW TO ANOTHER SECTOR ? INA YES STA FILSI FILE SIZE(IN SECT.) I. E. DELTA CMA,INA STA FILSI+1 SAVE (-) VALUE CMA,INA ADA CFILS CURRENT FILE STARTING SECTOR STA NFILS STARTING SECT. FOR NEXT FILE CMA ADA RPSTS LAST FILE START SSA LAST FILE ? JMP RPD1 YES INA STA NSLTM NO. SECT LEFT TO MOVE LDA NOTRB NO. OF TRB'S LDB TRBSZ JSB MPY CALC. NO. SECT. IN TOTAL TRB STA BUFSZ SAVE TOTAL TRB SIZE (IN SECTORS) RPAKM EQU * CMA,INA ADA NSLTM NO. SECT. LEFT TO MOVE LDB NSLTM STA NSLTM SSA,RSS MORE TO BE MOVED THAN BUFF. SIZE ? LDB BUFSZ YES SZB,RSS FINISHED ? JMP RPD1-1 YES STB GNS NO. SECT. FOR GENERAL R/W LDA DISSC DESIRED SUBCHANNEL STA GSC SUBCHANNEL FOR GENERAL R/W LDA NFILS NEXT FILE SECTOR JSB STT.S CONV. TO T/S LDB TRBUF BUFFER ADDR JSB GRTXX READ LDA CFILS CURRENT FILE SECTOR JSB STT.S CONV. TO T/S LDB TRBUF JSB GWTXX WRITE LDA CFILS CURRENT FILE SECTOR (ABSOLUTE) ADA GNS NO. SECT. MOVED STA CFILS LDA NFILS NEXT FILE SECTOR (ABSOLUTE) ADA GNS NO. SECT. MOVED STA NFILS LDA BUFSZ TOTAL SIZE OF TRB (IN SECTORS) LDB NSLTM NO. SECT. LEFT TO MOVE SSB,RSS FINISHED ? JMP RPAKM NO, REPACK MORE ISZ RPDIS P+2 RPD1 EQU * LDA FILSI+1 (-) NO. OF SECT. MOVED JMP RPDIS,I RETURN RPSTS OCT 0 REPACK STARTING T/S RPLOC OCT 0 REPACK STARTING LOC. DISSC OCT 0 BUFSZ OCT 0 TOTAL SIZE OF TRB (IN SECTORS) CFILS OCT 0 CURRENT FILE STARTING SECTOR FILSI OCT 0,0 FILE SIZE NFILS OCT 0 NEXT FILE SIZE NSLTM OCT 0 NO. SECTORS LEFT TO MOVE HED INITIALIZE FUNCTION FUN07 EQU * JSB CKVSU CHECK IF VALID DEFINE PREVIOUSLY LDA ARG3,I GET PACK NUMBER JSB CKPN CHECK PACK NUMBER FOR EQUAL OR LESS THAN 999 SSA IS PACK NUMBER POSITIVE ? JSB ER15 NO SZA,RSS SYSTEM PACK DESIRED ? JSB ER15 YES JSB GETPN SEARCH FOR THE DESIRED PACK NUMBER JSB ER6 PACK NUMBER NOT AVAILABLE STB DIRPT SAVE DIRECTORY ADDRESS ADB D3 INCREMENT TO STARTING T/S FIELD LDA B,I GET STARTING T/S STA STRTS SAVE T/S ADB D1 INCREMENT TO FILE SIZE LDA B,I GET THE FILE SIZE STA FILSZ SAVE FILE SIZE LDA ARG4,I GET NUMBER OF DIRECTORY ENTRIES REQUESTED SSA POSITIVE ? JSB ER29 NO ADA D1 ADD ONE FOR EFMP'S OWN DIRECTORY ENTRY LDB MXWPE JSB MPY CALC. TOTAL WDS. NEEDED FOR DIRECTORY JSB DIV CALC. TOTAL SECT. NEEDED FOR DIRECTORY DEF D126 AMOUNT OF SECT USED PER TRAK7905 SOC OVERFLOW ? JSB ER29 DIRECTORY SIZE IS TOO LARGE SZB OVERFLOW TO ANOTHER SECTOR ? INA YES STA DIRSZ SAVE DIRECTORY SIZE CMA,INA TWO'S COMPLEMENT ADA FILSZ CALCULATE SPACE REMAINING BEYOND DIRECTORY SSA SPACE FOR DIRECTORY IN EFMP FILE ? JSB ER29 NO LDB DIBUF GET EFMP DIRECTORY BUFFER ADDRESS ADB D3 INCREMENT TO DIRECTORY SIZE FIELD LDA DIRSZ GET DIRECTORY SIZE STA B,I INITIALIZE DIRECTORY SIZE INB INCREMENT TO FILE SIZE FIELD LDA FILSZ GET FILE SIZE STA B,I INITIALIZE FILE SIZE ADB D4 INCREMENT TO LAST ALLOCATED SECTOR FIELD LDA DIRSZ CALCULATE LAST ALLOCATED SECTOR STA B,I INITIALIZE LAST ALLOCATED SECTOR LDA A$BUF GET ADDRESS OF $BUF STA A$BSV SAVE ADDR OF $BUF LDA DIBUF GET ADDRESS OF WRITE BUFFER STA A$BUF STORE IT FOR WRITE ROUTINE LDA TRKIO GET TRACK NO. STA SVTRK SAVE TRACK NO. LDA SECIO GET SECTOR NO. STA SVSEC SAVE SECTOR NO. LDA STRTS GET T/S WRITE ADDRESS JSB PRETS PREPARE IT FOR I/O LDA D1 WRITE INDICATOR LDB PAKSC GET CURRENT SUBCHANNEL JSB PRWIO WRITE FIRST SECTOR OF EFMP FILE LDA A$BSV GET ADDR OF $BUF STA A$BUF RESTORE THE ADDRESS OF $BUF LDB DIRPT GET DIRECTORY ADDRESS ADB D2 INCREMENT TO TYPE FIELD ISZ B,I CHANGE FROM BINARY TO ASCII LDA SVTRK GET TRACK NO. STA TRKIO RESTORE TRACK NO. LDA SVSEC GET SECTOR NO. STA SECIO RESTORE SECTOR NO. LDA D1 WRITE INDICATOR LDB PAKSC GET CURRENT SUBCHANNEL JSB PRWIO WRITE BACK DOSM ENTRY FOR THE PACK NUMBER JMP EFCON RETURN TO MAIN FNAM1 BSS 1 FNAM2 BSS 1 FNAM3 BSS 1 FDRSZ BSS 1 FLSIZ BSS 1 RESV1 BSS 1 RESV2 BSS 1 RESV3 BSS 1 LSTSA BSS 1 EODM BSS 1 DIBUF DEF FNAM1 A$BSV BSS 1 SAVE FOR $BUF ADDR DIRSZ BSS 1 DIRECTORY SIZE DIRPT BSS 1 DIRECTORY ENTRY POINTER STRTS BSS 1 EFMP STARTING T/S FILSZ BSS 1 EFMP SIZE SVTRK BSS 1 TRACK SAVE AREA SVSEC BSS 1 SECTOR SAVE AREA HED MISCEL. MOVE NOP JSB MASUB DEC 1 POST NOP JSB MASUB DEC 2 POSTW NOP JSB MASUB DEC 3 CKVSU NOP JSB MASUB DEC 4 CRPN0 NOP JSB MASUB DEC 6 CKPN NOP JSB MASUB DEC 7 SVPNS NOP JSB MASUB DEC 8 CKNAP NOP JSB MASUB DEC 9 SETD1 NOP JSB MASUB DEC 10 SETD2 NOP JSB MASUB DEC 11 GETDE NOP JSB MASUB DEC 12 REPNS NOP JSB MASUB DEC 13 MVPNT NOP JSB MASUB DEC 16 GETPN NOP JSB MASUB DEC 17 CKOPN NOP JSB MASUB DEC 18 SRCDR NOP JSB MASUB DEC 19 GTNPN NOP JSB MASUB DEC 20 CKDSP NOP JSB MASUB DEC 21 CKCLM NOP JSB MASUB DEC 22 CKPNT NOP JSB MASUB DEC 24 PKDIR NOP JSB MASUB DEC 25 T.STS NOP JSB MASUB DEC 26 STT.S NOP JSB MASUB DEC 27 STZ NOP JSB MASUB DEC 28 GRTXX NOP JSB MASUB DEC 29 GWTXX NOP JSB MASUB DEC 30 CKSPC NOP JSB MASUB DEC 31 STPNO NOP JSB MASUB DEC 32 SFSTS NOP JSB MASUB DEC 33 PRETS NOP JSB MASUB DEC 34 PRWIO NOP JSB MASUB DEC 35 MPY NOP JSB MASUB DEC 36 DIV NOP JSB MASUB DEC 37 SKP ER2 EQU * OCT 0 LDA D2 JSB ERR ER3 EQU * OCT 0 LDA D3 JSB ERR ER4 EQU * OCT 0 LDA D4 JSB ERR ER5 EQU * OCT 0 LDA D5 JSB ERR ER6 EQU * OCT 0 LDA D6 JSB ERR ER7 EQU * OCT 0 LDA D7 JSB ERR ER8 EQU * OCT 0 LDA D8 JSB ERR ER9 EQU * OCT 0 LDA D9 JSB ERR ER10 EQU * OCT 0 LDA D10 JSB ERR ER11 EQU * OCT 0 LDA D11 JSB ERR ER14 EQU * OCT 0 LDA D14 JSB ERR ER15 EQU * OCT 0 LDA D15 JSB ERR ER16 EQU * OCT 0 LDA D16 JSB ERR ER17 EQU * OCT 0 LDA D17 JSB ERR ER18 EQU * OCT 0 LDA D18 JSB ERR