|
|
DataMuseum.dkPresents historical artifacts from the history of: Philips Data Systems |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Philips Data Systems Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 46124 (0xb42c)
Notes: pts_type(SC)
Names: »FMTASK.SC«
└─⟦173d42e04⟧ Bits:30009663 Philips computer tape "600105"
└─⟦this⟧ »TOSSWORK/FMTASK.SC«
IDENT FMTASK REL 10.0 80-03-15 870105041000 * * ************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * * FMTASK = TOSS FILE MANAGEMENT TASK * * * * * ************************************************** * * * TOSS FILE MANAGEMENT TASK CONTAINS THE * FOLLOWING FILE ADMINISTRATION MODULES: * * - FMOPEN OPEN/CREATE/EXTEND FILE * - FMCLOS CLOSE/DELETE FILE * - FMRDFP READ FILE PARAMETERS * * A SPECIAL ENTRY IS USED FOR I/O * FUNCTIONS WHERE REQUESTED SECTORS ARE * SPLIT OVER TWO OR MORE FILE EXTENTS: * * - FMRDWR READ/WRITE (SPLIT EXTENT I/O) * * FMTASK ALSO CONTAINS THE FILE MANAGEMENT * SYSTEM INITIALIZATION ROUTINE, FMINIT. * * EJECT FMTASK * * *********** * ENTRIES * *********** * * ENTRY FMRDWR READ/WRITE (SPLIT EXTENT I/O) ENTRY FM:ADM FM ADMINISTRATION FUNCTIONS ENTRY FMINIT FILE MANAGEMENT INITIALIZATION ENTRY TTABFM FMTASK TTAB ENTRY FWTPAR FILE ACCESS PARAMETERS ENTRY FWTFNR FILE NUMBER ENTRY FWTTAB TTAB FOR TASK WITH EXCLUSIVE ACCESS ENTRY FWTEW1 POINTER TO 2ND EWT BLOCK IN FWT ENTRY FWTEXB FILE EXTENT BASE, FIRST EXTENT ENTRY FWTVOL VOLUME FILE CODE ENTRY EWTEXL EXTENT LENGTH ENTRY EWTEXB EXTENT BASE ENTRY EWTVOL VOLUME FILE CODE * EJECT FMTASK * * ENTRY FPB:RL RECORD LENGTH ENTRY FPB:BF BLOCK FACTOR ENTRY FPB:FO FILE ORGANIZATION ENTRY FPB:BO BASIC ORDERS ENTRY FPB:FN FILE NAME ENTRY FPB:EL ENLARGE ENTRY FPB:V1 VOLUME NAME 1 ENTRY FPB:S1 SIZE 1 ENTRY FPB:V2 VOLUME NAME 2 ENTRY FPB:S2 SIZE 2 ENTRY FPB:V3 VOLUME NAME 3 ENTRY FPB:S3 SIZE 3 ENTRY FPB:V4 VOLUME NAME 4 ENTRY FPB:S4 SIZE 4 ENTRY FPB:FR FILE RECORD NUMBER ENTRY FPB:US NUMBER OF USERS ENTRY FPB:SH SHAREABILITY ENTRY FPB:MN MONITOR NUMBER ENTRY FPB:SN SOP SWITCH NUMBER ENTRY FPB:IF NUMBER OF INDEX FILES ENTRY FPB:KA KEY ADDRESS IN RECORD ENTRY FPB:CD CREATION DATE ENTRY FPB:RP RETENTION PERIOD EJECT FMTASK * * ************* * EXTERNALS * ************* * * EXTRN QMEXIT QUEUE TASK AND EXIT MONITOR TASK EXTRN GETBLK STORE PARAMETERS IN MONITOR BLOCK EXTRN FREBLK GET PARAMETERS FROM MONITOR BLOCK EXTRN FNDTID FIND TTAB ADDRESS FROM TASK ID EXTRN FNDDWD FIND DISC DWT ADDRESS EXTRN FCHECK CHECK ACCESS PAR. AND RETURN FWT ADDRESS EXTRN FCHEC2 FCHECK 2ND ENTRY EXTRN LKMERR HALT SYSTEM DUE TO FATAL LKM ERROR EXTRN TIODM DM ADDRESS BLOCK EXTRN DFTAB DISC FILE CODE TABLE EXTRN DFTABE END OF DFTAB EXTRN SCTNOF NUMBER OF FILES EXTRN SCTFWT FWT CHAIN START ADDRESS EXTRN SCTFWL FILE WORK TABLE LENGTH EXTRN SCTDMT DM TASKS IN SYSTEM EXTRN NVLTAB NVL TABLE EXTRN NVLDMT DM TASK NVL TABLE EXTRN NVLEND END OF NVLTAB EXTRN NVLBIT NVL BIT MASK EXTRN DWTST DWT STATUS EXTRN DWTADR ADDRESS TO ADDRESS BLOCK EXTRN DWTMEC MMU ECB ADDRESS EXTRN DWTVOL VOLUME NAME EXTRN DWTNVL NVL INDICATOR EXTRN FDBMEC FDB MMU ECB DISPLACEMENT IN FWT * EJECT FMTASK * * EXTRN TTB:MT MMU TABLE EXTRN TTB:SA SAVE AREA EXTRN ECBFC ECB FILE CODE (FILE NUMBER) EXTRN ECBBA ECB BUFFER ADDRESS (FPB ADDRESS) EXTRN ECBRC ECB RETURN CODE EXTRN ECBCW1 CONTROL WORD 1 EXTRN ECBCW2 CONTROL WORD 2 EJECT FMTASK * * *************************************** * * CONDITIONAL ASSEMBLY * *************************************** * * A PROGRAM VERSION USING TOSS MMU PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1. * MMUPAG EQU 0 * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 1 * * * A PROGRAM VERSION SUPPORTING SPLIT EXTENT I/O * IS OBTAINED BY SETTING XTSPLI EQU 1. * XTSPLI EQU 0 * EJECT FMTASK * * ******************** * VL DISPLACEMENTS * ******************** * * VOLUME LABEL DISPLACEMENTS * VOL:VN EQU 0 VOLUME NAME VOL:EL EQU 6 VTOC EXTENT LENGTH VOL:EB EQU 10 VTOC EXTENT BASE VOL:RL EQU 12 VTOC RECORD LENGTH VOL:FS EQU 46 FSAT LENGTH * * ************* * CONSTANTS * ************* * * VTOCRL EQU 42 VTOC RECORD LENGTH VTOCBF EQU 6 VTOC BLOCK FACTOR * EJECT FMTASK * * ********************** * VTOC DISPLACEMENTS * ********************** * * VOLUME TABLE OF CONTENTS DISPLACEMENTS * VTC:FN EQU 0 FILE NAME VTC:MN EQU 8 MONITOR NUMBER (L-FILE) VTC:FS EQU 8 FILE SECTION NUMBER (S-FILE) VTC:SN EQU 9 SOP SWITCH NUMBER VTC:EN EQU 10 FILE EXTENT NUMBER VTC:EL EQU 12 FILE EXTENT LENGTH VTC:EB EQU 16 FILE EXTENT BASE VTC:LR EQU 20 LAST RECORD NUMBER VTC:RL EQU 24 RECORD LENGTH VTC:BF EQU 26 BLOCK FACTOR VTC:FO EQU 27 FILE ORGANIZATION VTC:CD EQU 28 CREATION DATE VTC:RP EQU 34 RETENTION PERIOD VTC:IF EQU 37 NUMBER OF INDEX FILES VTC:KA EQU 38 KEY ADDRESS IN RECORD VTC:ST EQU 41 STATUS BYTE * EJECT FMTASK * * ********************* * FWT DISPLACEMENTS * ********************* * * FILE WORK TABLE DISPLACEMENTS * FWTLNK EQU /00 LINK NEXT FWT * IFT MMUPAG=0 FWTBAS EQU FWTLNK+/10 XIF * IFT MMUPAG=1 FWTBAS EQU FWTLNK+/14 XIF * FWTVTC EQU FWTBAS+/00 VTOC SECTOR NUMBER (FIRST EXTENT) FWTPAR EQU FWTBAS+/02 FILE ACCESS PARAMETERS FWTFNR EQU FWTBAS+/03 FILE NUMBER FWTTAB EQU FWTBAS+/04 TTAB FOR TASK WITH EXCLUSIVE ACCESS FWTEW1 EQU FWTBAS+/06 POINTER TO 2ND EWT BLOCK IN FWT FWTSEX EQU FWTBAS+/08 FILE SECTION/EXTENT NUMBER FWTEXL EQU FWTBAS+/0A EXTENT LENGTH IN SECTORS (FIRST EXTENT) FWTEW2 EQU FWTBAS+/0C POINTER TO NEXT EWT STRUCTURE FWTVOL EQU FWTBAS+/0E VOLUME FILE CODE (FIRST EXTENT) FWTEXB EQU FWTBAS+/10 EXTENT BASE (FIRST EXTENT) FWTNAM EQU FWTBAS+/12 FILE NAME * EJECT FMTASK * * ********************* * EWT DISPLACEMENTS * ********************* * * EXTENT WORK TABLE DISPLACEMENTS * EWTLNK EQU 0 LINK NEXT EWT BLOCK * * BLOCK 1 * EWTSEX EQU 2 FILE SECTION/EXTENT NUMBER EWTEXL EQU 4 EXTENT LENGTH IN SECTORS * * BLOCK 2 * EWTVOL EQU 2 VOLUME FILE CODE EWTEXB EQU 4 EXTENT BASE * EWTLEN EQU 6 EXTENT WORK TABLE BLOCK LENGTH * EJECT FMTASK * * ********************* * FPB DISPLACEMENTS * ********************* * * FILE PARAMETER BLOCK DISPLACEMENTS * FPB:RL EQU 0 RECORD LENGTH FPB:BF EQU 2 BLOCK FACTOR FPB:FO EQU 3 FILE ORGANIZATION FPB:BO EQU 5 BASIC ORDERS FPB:FN EQU 8 FILE NAME FPB:EL EQU 17 ENLARGE FPB:V1 EQU 18 VOLUME NAME 1 FPB:S1 EQU 24 SIZE 1 FPB:V2 EQU 28 VOLUME NAME 2 FPB:S2 EQU 34 SIZE 2 FPB:V3 EQU 38 VOLUME NAME 3 FPB:S3 EQU 44 SIZE 3 FPB:V4 EQU 48 VOLUME NAME 4 FPB:S4 EQU 54 SIZE 4 FPB:FR EQU 58 FILE RECORD NUMBER FPB:US EQU 62 NUMBER OF USERS FPB:SH EQU 64 SHAREABILITY FPB:MN EQU 65 MONITOR NUMBER FPB:SN EQU 66 SOP SWITCH NUMBER FPB:IF EQU 67 NUMBER OF INDEX FILES FPB:KA EQU 68 KEY ADDRESS IN RECORD FPB:CD EQU 70 CREATION DATE FPB:RP EQU 76 RETENTION PERIOD * FPBLEN EQU 80 FILE PARAMETER BLOCK LENGTH * EJECT FMTASK * * TTABFM (FMTASK TTAB) * IFT MMUPAG=1 RES 16 FMTASK MMU TABLE XIF * DATA 0 CURRENT SEGMENT BASE (DUMMY) VOLUME DATA 0 CURRENT VOLUME NAME DISPLACEMENT DATA 0 SEGMENT BLOCK ADDRESS * TTABFM EQU * TTABFM ENTRY DATA 0 DISPATCHER QUEUE LINK DATA '#A' TASK IDENTIFICATION DATA 49 PRIORITY LEVEL DATA 0 PENDING POINTER DATA /C4C0 PSW (PROGRAM STATUS WORD) DATA 0 DISPATCH ADDRESS DATA 0,0,0,0,0,0,0 REGISTER SAVE AREA, A1-A14 DATA FM:ECB A8 = FM:ECB ADDRESS DATA 0,0,0,0,0,0 * EJECT FMTASK * * FMTASK DATA AREAS * FM:ECB DATA /8000,FM:BUF,256 FMTASK ECB AREA DATA 0,0,0,0 * RES 6 FMTASK STACK FM:STB EQU *-2 FMTASK STACK BASE * IFT MMUPAG=1 FM:FPB RES 40 FILE PARAMETER BLOCK AREA XIF * EJECT FMTASK * * ********** * FMINIT * ********** * * * FMINIT IS THE FILE MANAGEMENT INITIALIZATION ROUTINE. * IT IS CALLED FROM PFINIT AFTER IPL AND AT POWER ON. * WHEN CALLED AT POWER ON, AN IMMEDIATE RETURN IS MADE. * * FMINIT WILL ZEROIZE THE FWT AREA, AND LINK THE FWT:S * TOGETHER. THE POINTER FWTEW1 IS ALSO INITIALIZED, AS * WELL AS FWTFNR (FILE NUMBER). * THE PART OF FMINIT THAT IS NOT EXECUTED AT POWER ON * WILL BE USED AS THE INTERNAL BUFFER FOR THE FMTASK. * FMINIT EQU * FMINIT ENTRY LDKL A1,/F03E RTNA15 INSTRUCTION CODE ST A1,FMINIT CLOSE THE DOOR * EJECT FMTASK * * FM:BUF EQU FMINIT+2 START OF FMTASK INTERNAL BUFFER * * PERFORM INITIALIZATION * LD A1,SCTFWT FWT CHAIN START ADDRESS LD A4,SCTNOF NUMBER OF FILES LDK A5,0 LDKL A6,/8000 DWT BUSY BIT LDKL A7,TIODM DM ADDRESS BLOCK * FMI:30 EQU * IFT MMUPAG=1 LDKL A8,FDBMEC FDB MMU ECB DISPLACEMENT IN FWT ADR A8,A1 MMU ECB ADDRESS XIF * LDR A2,A1 CURRENT FWT ADDRESS LDR A3,A1 AD A3,SCTFWL NEXT FWT ADDRESS ADK A5,1 NEXT FILE NUMBER SUK A4,1 RF(N) FMI:50 INITIALIZATION COMPLETED RF(Z) FMI:40 ONE FWT LEFT TO INITIALIZE STR A3,A1 LINK CURRENT FWT TO THE NEXT FWT ADK A1,2 INCREMENT FWT POINTER * EJECT FMTASK * * FMI:40 EQU * CMR A1 ADK A1,2 INCREMENT FWT POINTER CWR A1,A3 CHECK IF END OF THIS FWT RB(NE) FMI:40 NOT END OF THE FWT SU A3,SCTFWL ADK A3,FWTEW2 FWTEW2 ADDRESS ST A3,FWTEW1,A2 INITIALIZE FWTEW1 POINTER ST A5,FWTFNR,A2 SET FILE NUMBER IN FWT ST A6,DWTST,A2 INDICATE FWT NOT BUSY ST A7,DWTADR,A2 DM ADDRESS BLOCK (ACTIVATION ADDRESS) * IFT MMUPAG=1 ST A8,DWTMEC,A2 SET MMU ECB ADDRESS XIF * RB FMI:30 CONTINUE WITH NEXT FWT * EJECT FMTASK * * FILL IN NVLTAB WITH DM TTAB ADDRESSES (IF ANY) * FMI:50 EQU * LD A1,SCTDMT DM TASKS IN SYSTEM RF(Z) FMI:75 NO DM TASKS IN SYSTEM LDK A3,4 LOOP COUNTER LDKL A4,NVLDMT DM TASK NVL TABLE LDKL A7,'#D' TASK ID 1ST DM TASK * FMI:60 EQU * SRC A1,1 RF(NN) FMI:70 THIS DM TASK NOT IN SYSTEM CF A15,FNDTID FIND DM TASK TTAB ADDRESS STR A2,A4 STORE IN NVLTAB * FMI:70 EQU * ADK A4,2 INCREMENT NVLTAB POINTER ADK A7,1 NEXT DM TASK ID SUK A3,1 DECREMENT LOOP COUNTER RB(P) FMI:60 * EJECT FMTASK * * COMPUTE NVL BIT MASK * FMI:75 EQU * LDK A1,0 INITIALIZE BIT MASK LDK A2,1 LDKL A3,NVLTAB NVLTAB ADDRESS * FMI:80 EQU * LDR* A4,A3 GET ONE ENTRY FROM NVLTAB RF(Z) FMI:85 THIS ENTRY NOT USED ORR A1,A2 INDICATE TTAB PRESENT * FMI:85 EQU * SLL A2,1 ADK A3,2 INCREMENT NVLTAB POINTER CWK A3,NVLEND CHECK IF END OF NVLTAB RB(NE) FMI:80 NOT END OF NVLTAB * FMI:90 EQU * ORR A1,A2 ADD ONE BIT FOR USER TASKS ST A1,NVLBIT SET NVL BIT MASK RTN A15 * IFT MMUPAG=0 RES 57 XIF * IFT MMUPAG=1 RES 52 XIF * EJECT FMTASK * * ********** * FMTASK * ********** * * * THE FILE MANAGEMENT TASK PERFORMS * FILE ADMINISTRATION FUNCTIONS. IT * IS ACTIVATED BY THE FILE MANAGEMENT * LKM PROCESSOR AT ENTRY FM:ADM. * AFTER SOME HOUSEKEEPING THE FOLLOWING * MODULES WILL PERFORM THE FILE ADMINISTRATION: * * - FMOPEN OPEN/CREATE/EXTEND FILE (OPTIONS: 0, 2, 1) * - FMCLOS CLOSE/DELETE FILE ( " : 0, 2) * - FMRDFP READ FILE PARAMETERS ( " : 0) * * A SPECIAL ENTRY IS USED FOR I/O * FUNCTIONS WHERE REQUESTED SECTORS ARE * SPLIT OVER TWO OR MORE FILE EXTENTS: * * - FMRDWR READ/WRITE (SPLIT EXTENT I/O) (OPTIONS: 0) * * EJECT FMTASK * * ********** * FM:ADM * ********** * * * ENTRY PARAMETERS: * * A1 = ORDER CODE AND OPTION * A3 = TTAB ADDRESS OF CALLING TASK * A4 = USER ECB ADDRESS * FM:ADM EQU * FM ADMINISTRATION FUNCTIONS ENTRY LDR A5,A3 TTAB ADDRESS OF CALLING TASK LDR A7,A1 ORDER CODE/OPTION LDR A9,A4 USER ECB ADDRESS LDKL A14,FM:STB FMTASK STACK BASE * IFT MMUPAG=0 LD A10,ECBBA,A9 FPB ADDRESS XIF * IFT MMUPAG=1 LDKL A3,TTABFM FMTASK TTAB ADDRESS TL TTB:MT,A5 USER MMU TABLE TS TTB:MT,A3 STORE IN FMTASK MMU TABLE * * MOVE USER FPB TO SYSTEM AREA (FM:FPB) * EL A1,ECBBA,A9 USER FPB ADDRESS LDKL A2,FM:FPB FM FPB ADDRESS LDR A10,A2 SAVE IT LDK A4,FPBLEN FPB LENGTH MVUS A4 MOVE USER FPB TO FM:FPB XIF * EJECT FMTASK * * CHECK WHAT FUNCTION THAT IS REQUESTED * AND BRANCH TO APPROPRIATE FUNCTION HANDLER. * * THE FOLLOWING PARAMETERS ARE SUPPLIED TO * THE RESP. FUNCTION HANDLER: * * A1 = ORDER OPTION * A5 = TTAB ADDRESS OF CALLING TASK * A9 = USER ECB ADDRESS * A10 = FPB ADDRESS * ECR A1,A7 ORDER CODE AND OPTION ANK A7,/7F ORDER CODE SUK A7,/03 ABL(Z) FMRDFP READ FILE PARAMETERS SUK A7,/22-/03 ABL(Z) FMCLOS CLOSE/DELETE * EJECT FMTASK * * ********** * FMOPEN * ********** * * * FILE MANAGEMENT ADMINISTRATION FUNCTIONS: * OPEN/CREATE/EXTEND FILE * * ENTRY PARAMETERS: * * A1 = ORDER OPTION * A5 = TTAB ADDRESS OF CALLING TASK * A9 = USER ECB ADDRESS * A10 = FPB ADDRESS * FMOPEN EQU * OPEN/CREATE/EXTEND FILE ANK A1,/FF ORDER OPTION ABL(NZ) FM:RQE ILLEGAL ORDER OPTION * EJECT FMTASK * * ******** * OPEN * ******** * * OPEN EQU * OPEN FILE LDK A7,FPB:V1 1ST VOLUME NAME DISPLACEMENT ST A7,VOLUME CF A14,FNDVOL FIND VOLUME LDR A12,A2 SAVE FILE CODE RF(Z) OP:055 VOLUME NOT FOUND CF A14,FNDFWT FIND FWT ADDRESS ADK A6,0 SET CR RF(Z) OP:030 NO FREE FWT AVAILABLE LDR* A1,A6 FIRST WORD OF FWT ANK A1,1 CHECK IF ALREADY OPENED RF(Z) OP:060 NOT OPENED * * FILE IS ALREADY OPENED CC A1,FPB:SH,A10 SHAREABILITY PARAMETER RF(E) OP:040 NOT EA WHEN ALREADY OPENED LD A2,FWTTAB,A6 TTAB ADDRESS FOR EA TASK RF(NZ) OP:040 FILE PROTECTED LC A1,FWTPAR,A6 ACCESS PARAMETERS LDR A2,A1 ANK A1,/3F NUMBER OF USERS SUK A1,/3F ABL(NZ) OP:250 * EJECT FMTASK * * ERROR EXITS * LDKL A4,/0210 RETURN CODE (TOO MANY USERS) RF OP:RTN * OP:030 EQU * NO FREE FWT AVAILABLE LDKL A4,/8400 RETURN CODE RF OP:RTN * OP:040 EQU * FILE PROTECTED LDK A4,/40 RETURN CODE RF OP:RTN * OP:050 EQU * VOLUME/FILE NOT FOUND CF A14,RELBLK RELEASE EWT STRUCTURE BLOCKS * OP:055 EQU * LDKL A4,/8800 RETURN CODE * OP:RTN EQU * ABL FM:RTC FMOPEN ERROR EXIT * EJECT FMTASK * * FILE IS NOT OPENED BEFORE: * FIND ALL FILE EXTENTS, BUILD FWT AND EWT:S * OP:060 EQU * * * MOVE FILE NAME FROM FPB TO FWT * LDR A1,A10 FPB ADDRESS ADK A1,FPB:FN LDR A3,A6 FWT ADDRESS ADK A3,FWTNAM LDK A2,8 NO OF CHARACTERS TO MOVE CF A14,MOVE MOVE FILE NAME LDR A2,A12 RESTORE FILE CODE RF OP:075 * * FIND ONE VOLUME * OP:070 EQU * ST A7,VOLUME SAVE VOLUME NAME DISPLACEMENT CF A14,FNDVOL FIND VOLUME ADK A2,0 RB(Z) OP:050 VOLUME NOT FOUND * EJECT FMTASK * * FIND ONE FILE EXTENT * OP:075 EQU * CF A14,FNDVTC FIND VTOC ENTRY LDR A11,A2 SAVE CURRENT VTOC SECTOR NUMBER RB(Z) OP:050 NO FILE EXTENT FOUND * OP:080 EQU * LDR A1,A6 SAVE FWT ADDRESS LDR* A2,A8 DISC FILE CODE INH CF A15,FNDDWD DISC DWT ADDRESS AND INDEX ENB ADR A2,A2 DOUBLE INDEX ADR A2,A6 ADD DWT ADDRESS LDK A3,0 SC A3,DWTNVL+1,A2 CLEAR NVL BITS LDR A6,A1 RESTORE FWT ADDRESS LD A3,VTC:EN,A13 FILE EXTENT NUMBER LD A2,VTC:FO,A13 FILE ORGANIZATION ANK A2,/FF SUK A2,'L' RF(Z) OP:085 L-FILE LD A2,VTC:FS,A13 FILE SECTION NUMBER SRC A2,2 ECR A3,A3 FILE EXTENT NUMBER NOW IN LEFT BYTE ORR A2,A3 LDR A3,A2 * EJECT FMTASK * * OP:085 EQU * LC A2,VTC:EL+1,A13 FILE EXTENT LENGTH LD A1,VTC:EL+2,A13 ADK A3,0 SET CR RF(Z) OP:090 FIRST FILE EXTENT INH CF A15,GETBLK EWT BLOCK 1 RF OP:100 * OP:090 EQU * ST A2,FWTEXL-2,A6 STORE FILE EXTENT LENGTH, FIRST EXTENT ST A1,FWTEXL,A6 * EJECT FMTASK * * OP:100 EQU * LDR* A2,A8 VOLUME FILE CODE ECR A2,A2 FILE CODE NOW IN LEFT BYTE LC A2,VTC:EB+1,A13 FILE EXTENT BASE LD A1,VTC:EB+2,A13 ADK A3,0 SET CR RF(NZ) OP:120 NOT FIRST FILE EXTENT ST A2,FWTEXB-2,A6 STORE FILE EXTENT BASE, FIRST EXTENT ST A1,FWTEXB,A6 ST A11,FWTVTC,A6 STORE VTOC SECTOR NUMBER, FIRST EXTENT * * FIND REMAINING EXTENTS FOR THIS FILE * OP:110 EQU * CF A14,FVTC30 FIND NEXT VTOC ENTRY LDR A11,A2 SAVE CURRENT VTOC SECTOR NUMBER RF(Z) OP:160 NO MORE FILE EXTENTS ON THIS VOLUME RB OP:080 * EJECT FMTASK * * INSERT NEW EWT BLOCKS IN EWT CHAIN * OP:120 EQU * LDR A3,A4 ADDRESS EWT BLOCK 1 CF A15,GETBLK EWT BLOCK 2 ENB STR A4,A3 LINK EWT2 TO EWT1 LDR A1,A6 FWT ADDRESS ADK A1,FWTEW2 * OP:130 EQU * LDR* A2,A1 ADDRESS NEXT EWT STRUCTURE RF(NZ) OP:150 * OP:140 EQU * STR A2,A4 INSERT NEW EWT BLOCK STR A3,A1 RB OP:110 CONTINUE * OP:150 EQU * LC A11,EWTSEX,A2 FILE SECTION AND EXTENT NUMBER CC A11,EWTSEX,A3 RB(G) OP:140 INSERT NEW EWT BLOCKS LDR* A1,A2 ADDRESS TO 2ND EWT BLOCK RB OP:130 * EJECT FMTASK * * OP:160 EQU * LD A7,VOLUME CURRENT VOLUME NAME DISPLACEMENT CWK A7,FPB:V4 RF(E) OP:170 ALL VOLUMES CHECKED ADK A7,FPB:V2-FPB:V1 LDR A1,A10 FPB ADDRESS ADR A1,A7 POINT TO VOLUME NAME LDR* A1,A1 CHECK IF MORE VOLUMES SPECIFIED RF(Z) OP:170 NO MORE VOLUMES SUKL A1,/2020 SPACES IF NO MORE VOLUMES RB(NZ) OP:070 FIND NEXT VOLUME * OP:170 EQU * * * ALL VOLUMES FOUND. * SCAN EWT STRUCTURE CHAIN AND CHECK * THAT ALL FILE EXTENTS ARE PRESENT. * LD A1,FWTVTC,A6 VTOC SECTOR NUMBER, FIRST EXTENT RB(Z) OP:050 FIRST FILE EXTENT MISSING LDR A1,A6 FWT ADDRESS ADK A1,FWTEW1 LDK A4,0 FILE SECTION AND EXTENT NUMBER * EJECT FMTASK * * OP:180 EQU * LDR* A1,A1 ADDRESS TO 2ND EWT BLOCK LDR* A1,A1 ADDRESS TO NEXT EWT STRUCTURE RF(Z) OP:230 END OF EWT CHAIN LC A13,EWTSEX,A1 FILE SECTION AND EXTENT NUMBER LDR A3,A13 ANK A3,/C0 FILE SECTION NUMBER LDR A7,A4 ANK A7,/C0 FILE SECTION NUMBER SUR A7,A3 COMPARE FILE SECTION NUMBERS RF(Z) OP:190 FILE SECTION NUMBERS EQUAL ADK A7,/40 MAXIMUM DIFFERENCE = 1 RF(NZ) OP:200 FILE SECTION MISSING LDR A3,A13 ANK A3,/3F EXTENT NUMBER SHOULD BE ZERO RF OP:200 * OP:190 EQU * LDR A3,A13 ANK A3,/3F FILE EXTENT NUMBER ANK A4,/3F FILE EXTENT NUMBER SUR A4,A3 COMPARE FILE EXTENT NUMBER ADK A4,1 DIFFERENCE SHOULD BE ONE * OP:200 EQU * ABL(NZ) OP:050 FILE EXTENT MISSING LDR A4,A13 SAVE LAST FILE SECTION AND EXTENT NUMBER RB OP:180 * EJECT FMTASK * * OP:230 EQU * LC A2,FPB:SH,A10 SHAREABILITY PARAMETER ANK A2,/FF RF(Z) OP:240 NO EA REQUESTED ST A5,FWTTAB,A6 SET TTAB ADDRESS IN FWT * OP:240 EQU * IMR A6 INDICATE FWT USED (BIT 15 IN 1ST WORD) LDK A2,/40 PREPARE FOR BASIC ORDERS * EJECT FMTASK * * COMMON EXIT FOR ACCEPTED OPEN REQUESTS * OP:250 EQU * LD A1,FPB:BO,A10 BASIC ORDERS PARAMETERS ANK A1,/FF RF(NZ) OP:260 BASIC ORDERS WANTED, NO ACTION ANK A2,/BF PHYSICAL ORDERS REQUESTED * OP:260 EQU * ADK A2,1 ADD ONE USER TO THIS FILE SC A2,FWTPAR,A6 SET NEW ACCESS PARAMETERS LD A4,FWTFNR,A6 FILE NUMBER * IFT MMUPAG=0 SC A4,ECBFC,A9 SET FILE NUMBER IN ECB XIF * IFT MMUPAG=1 ELR A2,A9 ANKL A2,/FF00 ANK A4,/FF FILE NUMBER ORR A2,A4 ESR A2,A9 SET FILE NUMBER IN ECB XIF * LDK A4,0 RETURN CODE ABL FM:RTC * EJECT FMTASK * * ********** * CREATE * ********** * * CREATE EQU * CREATE FILE * TO BE IMPLEMENTED EJECT FMTASK * * ********** * EXTEND * ********** * * EXTEND EQU * EXTEND FILE * TO BE IMPLEMENTED EJECT FMTASK * * ********** * FMCLOS * ********** * * * FILE MANAGEMENT ADMINISTRATION FUNCTIONS: * CLOSE/DELETE FILE * * ENTRY PARAMETERS: * * A1 = ORDER OPTION * A5 = TTAB ADDRESS OF CALLING TASK * A9 = USER ECB ADDRESS * A10 = FPB ADDRESS * FMCLOS EQU * CLOSE/DELETE FILE ANK A1,/FF ORDER OPTION ABL(NZ) FM:RQE ILLEGAL ORDER OPTION * EJECT FMTASK * * ********* * CLOSE * ********* * * CLOSE EQU * CLOSE FILE CF A14,RDVTOC READ VTOC RECORD (FIRST EXTENT) ADK A1,0 CHECK RETURN CODE RF(Z) CL:005 OK, CONTINUE ST A4,ECBRC,A8 SET RETURN CODE IN ECB SUK A1,/20 CHECK IF NVL RF(Z) CL:010 NVL, DON'T WRITE VTOC ABL FM:RTC ERROR * CL:005 EQU * LD A1,FPB:FR,A10 FILE RECORD NUMBER LD A3,FPB:FR+2,A10 ST A1,VTC:LR,A13 SET LRN IN VTOC RECORD ST A3,VTC:LR+2,A13 ORR A1,A3 CHECK FILE RECORD NUMBER RF(Z) CL:010 FRN ZERO, DON'T WRITE VTOC LD A1,FWTPAR,A6 ACCESS PARAMETERS RF(NN) CL:007 NOT NVL LDK A1,/20 SET NVL IN RETURN CODE ST A1,ECBRC,A8 RF CL:010 * CL:007 EQU * CF A14,FM:PWR WRITE VTOC RECORD TO DISC * EJECT FMTASK * * CL:010 EQU * LC A1,FWTPAR,A6 ACCESS PARAMETERS LDR A2,A1 ANK A1,/C0 SKIP NUMBER OF USERS ANK A2,/3F NUMBER OF USERS SUK A2,1 DECREMENT NO OF USERS BY ONE SC A2,FPB:US,A10 RETURN REMAINING NO OF USERS RF(P) CL:020 DON'T RELEASE FWT IF ANY USER LEFT * EJECT FMTASK * * RELEASE FWT AND EWT BLOCKS * LDK A2,1 XRRS A2,A6 RESET USED BIT IN FWT CF A14,RELBLK RELEASE EWT STRUCTURE BLOCKS RF CL:030 * CL:020 EQU * ORR A1,A2 PUT TOGETHER ACCESS PARAMETERS SC A1,FWTPAR,A6 * CL:030 EQU * LD A4,ECBRC,A8 RETURN CODE RF FMEXIT RETURN * CL:040 EQU * ENTRY USED BY FM:LKM ADKL A14,4 ADJUST STACK POINTER RB CL:010 * EJECT FMTASK * * ********** * DELETE * ********** * * DELETE EQU * DELETE FILE * TO BE IMPLEMENTED EJECT FMTASK * * ********** * FMRDFP * ********** * * * FILE MANAGEMENT ADMINISTRATION FUNCTIONS: * READ FILE PARAMETERS * * ENTRY PARAMETERS: * * A1 = ORDER OPTION * A5 = TTAB ADDRESS OF CALLING TASK * A9 = USER ECB ADDRESS * A10 = FPB ADDRESS * FMRDFP EQU * READ FILE PARAMETERS ANK A1,/FF ORDER OPTION RF(NZ) FM:RQE ILLEGAL ORDER OPTION CF A14,RDVTOC READ VTOC RECORD (FIRST EXTENT) ADK A1,0 CHECK RETURN CODE RF(NZ) FM:RTC ERROR * * CLEAR FPB AREA * LDR A1,A10 FPB ADDRESS LDK A2,FPBLEN FPB AREA LENGTH * FMR:00 EQU * CMR A1 ADK A1,2 SUK A2,2 RB(P) FMR:00 * EJECT FMTASK * * LDR A1,A10 FPB ADDRESS ADK A1,FPB:V2 2ND VOLUME NAME LDK A2,3 LOOP COUNTER, OUTER LOOP LDKL A4,/2020 SPACES * FMR:02 EQU * OUTER LOOP ENTRY LDK A3,3 LOOP COUNTER, INNER LOOP * FMR:04 EQU * INNER LOOP ENTRY STR A4,A1 MOVE SPACES TO VOLUME NAME ADK A1,2 SUK A3,1 RB(P) FMR:04 ADK A1,FPB:V2-FPB:S1 NEXT VOLUME NAME SUK A2,1 RB(P) FMR:02 * EJECT FMTASK * * MOVE PARAMETERS FROM VTOC AND FWT TO FPB * LD A1,VTC:RL,A13 RECORD LENGTH STR A1,A10 LD A1,VTC:BF,A13 BLOCK FACTOR AND FILE ORGANIZATION ST A1,FPB:BF,A10 LD A1,VTC:LR,A13 LAST RECORD NUMBER ST A1,FPB:FR,A10 LD A1,VTC:LR+2,A13 LRN, PART 2 ST A1,FPB:FR+2,A10 LD A1,VTC:MN,A13 MONITOR AND SOP SWITCH NUMBER ECR A1,A1 SC A1,FPB:MN,A10 STORE MONITOR NUMBER LC A1,VTC:IF,A13 NUMBER OF INDEX FILES ST A1,FPB:IF,A10 LD A1,VTC:KA,A13 KEY ADDRESS IN RECORD ST A1,FPB:KA,A10 LDK A2,1 LD A1,FWTTAB,A6 SHAREABILITY PARAMETER RF(Z) FMR:05 NO EA SC A2,FPB:SH,A10 INDICATE OPENED EXCLUSIVELY * FMR:05 EQU * LD A1,FWTPAR,A6 ACCESS PARAMETERS SLL A1,1 RF(NN) FMR:10 PHYSICAL ORDERS FOR THIS FILE SC A2,FPB:BO,A10 INDICATE BASIC ORDERS * FMR:10 EQU * SLC A1,7 ANK A1,/3F NUMBER OF USERS SC A1,FPB:US,A10 * EJECT FMTASK * * MOVE CREATION DATE AND RETENTION PERIOD * LDR A1,A13 VTOC ADDRESS ADK A1,VTC:CD LDR A3,A10 FPB ADDRESS ADK A3,FPB:CD LDK A2,9 NO OF CHARACTERS TO MOVE CF A14,MOVE MOVE CREATION DATE AND RETENTION PERIOD * * MOVE FILE NAME FROM FWT TO FPB * LDR A1,A6 FWT ADDRESS ADK A1,FWTNAM SUK A3,FPBLEN-FPB:FN-1 POINT TO FILE NAME LDK A2,8 NO OF CHARACTERS TO MOVE CF A14,MOVE MOVE FILE NAME ADK A3,FPB:V1-FPB:FN-8 ADK A6,FWTEW1 ADDRESS TO FIRST EWT STRUCTURE LDR A11,A6 LDR* A12,A11 ADDRESS TO 2ND EWT BLOCK * EJECT FMTASK * * READ VOLUME NAME AND COMPUTE SIZE OF FILE SECTION * FMR:20 EQU * LC A2,EWTVOL,A12 DISC FILE CODE LDR A13,A2 SAVE FILE CODE CF A14,FNDNAM FIND VOLUME NAME ADDRESS * * MOVE VOLUME NAME FROM DWT TO FPB * LDR A1,A6 VOLUME NAME ADDRESS CF A14,MOVE MOVE VOLUME NAME LD A1,EWTEXL-2,A11 FILE EXTENT LENGTH ANK A1,/FF LD A2,EWTEXL,A11 * EJECT FMTASK * * COMPUTE FILE SECTION SIZE(S) * FMR:35 EQU * LDR* A11,A12 ADDRESS TO NEXT EWT STRUCTURE RF(Z) FMR:50 END OF EWT CHAIN LD A6,EWTEXL-2,A11 FILE EXTENT LENGTH ANK A6,/FF LD A7,EWTEXL,A11 LDR* A12,A11 ADDRESS TO 2ND EWT BLOCK CC A13,EWTVOL,A12 CHECK FILE CODE RF(NE) FMR:50 END OF THIS FILE SECTION * IFT CPU852=0 DAR A6 ACKUMULATE FILE SECTION LENGTH XIF * IFT CPU852=1 ADR A1,A6 ACKUMULATE FILE SECTION LENGTH ADR A2,A7 RF(O) FMR:45 OVERFLOW RB FMR:35 * FMR:45 EQU * ADK A1,1 OVERFLOW CORRECTION ANKL A2,/7FFF XIF * RB FMR:35 * FMR:50 EQU * STR A1,A3 STORE FILE SECTION SIZE IN FPB ST A2,2,A3 ADK A3,FPB:V2-FPB:S1 INCREMENT FPB POINTER LDR A4,A11 CHECK EWT BLOCK ADDRESS RB(NZ) FMR:20 NOT END OF EWT CHAIN * EJECT FMTASK * * ********** * FMEXIT * ********** * * * COMMON EXIT FOR FILE MANAGEMENT * ADMINISTRATION FUNCTIONS * FMEXIT EQU * IFT MMUPAG=1 * * MOVE SYSTEM FPB (FM:FPB) TO USER AREA (USER FPB) * * INPUT: A9 = USER ECB ADDRESS * A10 = FM:FPB ADDRESS * LDR A1,A10 FM:FPB ADDRESS EL A2,ECBBA,A9 USER FPB ADDRESS LDK A3,FPBLEN FPB LENGTH MVSU A3 MOVE FM:FPB TO USER FPB XIF * EJECT FMTASK * * ********** * FM:RTC * * FM:RQE * ********** * * * SET RETURN CODE IN USER ECB * * INPUT: A4 = RETURN CODE * A5 = TTAB ADDRESS OF CALLING TASK * A9 = USER ECB ADDRESS * FM:RTC EQU * GENERAL RETURN CODE EXIT IFT MMUPAG=0 ST A4,ECBRC,A9 SET RETURN CODE IN ECB XIF * IFT MMUPAG=1 ES A4,ECBRC,A9 SET RETURN CODE IN ECB XIF * ABL QMEXIT QUEUE TASK AND EXIT FMTASK * FM:RQE EQU * REQUEST ERROR EXIT LDKL A4,/8000 RETURN CODE RB FM:RTC * EJECT FMTASK * * ********** * FM:PWR * * FMREAD * ********** * * * INPUT: A2 = SECTOR NUMBER, PART 2 * A5 = TTAB ADDRESS OF CALLING TASK * A8 = FMTASK ECB ADDRESS * A9 = USER ECB ADDRESS * * OUTPUT: A4 = 0 * A7 IS DESTROYED * FM:PWR EQU * PHYSICAL WRITE ENTRY LDK A7,/95 PHYSICAL WRITE RF FM:LKM * FMREAD EQU * PHYSICAL READ ENTRY LDK A7,/91 PHYSICAL READ * EJECT FMTASK * * FM:LKM EQU * COMMON I/O ROUTINE ENTRY ST A2,ECBCW2,A8 SET SECTOR NUMBER IN ECB LKM DATA 1 LD A4,ECBRC,A8 RETURN CODE ANKL A4,/FEFF SKIP RETRY BIT RF(Z) FM:RTN RETURN IF OK * * ERROR: CHECK WHY AND DECIDE IF REQUEST TO BE ABORTED * LDK A7,/A2 CLOSE ORDER CC A7,TTB:SA+15,A5 CHECK IF CLOSE ORDER RUNNING ABL(E) CL:040 YES, COMPLETE CLOSE ACTION SUK A7,1 OPEN ORDER CW A7,TTB:SA+14,A5 CHECK IF OPEN ORDER RUNNING RB(NE) FM:RTC ABORT IF NOT OPEN LDK A7,/20 NEW VOLUME LOADED BIT TM A4,A7 CHECK RETURN CODE RB(Z) FM:RTC NOT NVL, ABORT RB FMREAD NVL AT OPEN, REPEAT REQUEST * FM:RTN EQU * RTN A14 * EJECT FMTASK * * ********** * RELBLK * ********** * * * RELBLK WILL RELEASE THE MONITOR BLOCKS * THAT ARE USED IN THE EWT STRUCTURE. * * INPUT: A6 = FWT ADDRESS * * OUTPUT: A1-A4 ARE DESTROYED * RELBLK EQU * RELEASE EWT STRUCTURE BLOCKS LD A4,FWTEW2,A6 ADDRESS TO FIRST EWT STRUCTURE RF(Z) REL:20 NO MORE BLOCKS TO RELEASE * REL:10 EQU * INH CF A15,FREBLK RELEASE EWT BLOCK ENB LDR A4,A3 EWT BLOCK ADDRESS RB(NZ) REL:10 * REL:20 EQU * CM FWTVTC,A6 RESET VTOC SECTOR NUMBER CM FWTTAB,A6 RESET TTAB ADDRESS (EA PARAMETER) CM FWTEW2,A6 RESET EWT STRUCTURE POINTER RTN A14 * EJECT FMTASK * * ********** * FNDNAM * ********** * * FNDNAM WILL CONVERT THE SUPPLIED FILE CODE * TO VOLUME NAME ADDRESS IN THE DISC DWT. * * INPUT: A2 = FILE CODE * * OUTPUT: A2 = 6 * A6 = VOLUME NAME ADDRESS * A4 = DESTROYED * FNDNAM EQU * FIND VOLUME NAME ADDRESS ANK A2,/FF INH CF A15,FNDDWD FIND DISC DWT ADDRESS ENB * FNAM05 EQU * LD A4,DWTST,A6 ANK A4,1 RF(NZ) FNAM10 POWER ON COMPLETED FOR THIS DISC LKM DATA 0 SWITCH TASKS RB FNAM05 CHECK DISC AGAIN * FNAM10 EQU * ADK A6,6 NEXT VOLUME NAME IN DWT SUK A2,1 DECREMENT INDEX RB(NN) FNAM10 LDK A2,6 ADKL A6,DWTVOL-6 RTN A14 * EJECT FMTASK * * ********** * FNDVOL * ********** * * * FNDVOL SEARCHES THE REQUESTED * VOLUME SPECIFIED IN THE FPB. * * INPUT: A7 = VOLUME NAME DISPLACEMENT IN FPB * A10 = FPB ADDRESS * * OUTPUT: A2 = DISC FILE CODE IF FOUND, ELSE * = 0 IF VOLUME NOT FOUND * A1, A3-A4, A12 ARE DESTROYED * FNDVOL EQU * FIND VOLUME (FILE CODE) LDKL A1,DFTAB-1 DISC FILE CODE TABLE ADDRESS-1 LDR A12,A6 SAVE FWT ADDRESS * FVOL10 EQU * ADK A1,1 POINT TO NEXT FILE CODE CWK A1,DFTABE CHECK IF END OF DFTAB RF(E) FVOL30 END OF DFTAB LCR A2,A1 NEXT FILE CODE CF A14,FNDNAM FIND VOLUME NAME ADDRESS LDR* A3,A6 FIRST WORD OF VOLUME NAME RB(Z) FVOL10 NO VOLUME * EJECT FMTASK * * LDR A3,A10 FPB ADDRESS ADR A3,A7 ADD VOLUME NAME DISPLACEMENT * FVOL20 EQU * COMPARE VOLUME NAMES LDR* A4,A6 CWR* A4,A3 RB(NE) FVOL10 VOLUME NAMES NOT EQUAL ADK A3,2 INCREMENT POINTERS ADK A6,2 SUK A2,2 RB(P) FVOL20 LCR A2,A1 FILE CODE * FVOL25 EQU * LDR A6,A12 RESTORE FWT ADDRESS RTN A14 * FVOL30 EQU * VOLUME NOT FOUND LDK A2,0 RETURN CODE RB FVOL25 * EJECT FMTASK * * ********** * RDVTOC * ********** * * * RDVTOC WILL CALL FCHEC2 FOR CHECK OF THE * ACCESS PARAMETERS AND READ THE VTOC RECORD * OF THE FIRST FILE EXTENT. * * INPUT: A5 = TTAB ADDRESS * A9 = USER ECB ADDRESS * * OUTPUT: A6 = FWT ADDRESS * A13 = VTOC RECORD ADDRESS IN FM:BUF * A1-A4, A7, A11 ARE DESTROYED * RDVTOC EQU * CHECK ACCESS PAR. AND READ VTOC RECORD IFT MMUPAG=0 LDR* A2,A9 FILE NUMBER XIF * IFT MMUPAG=1 ELR A2,A9 FILE NUMBER XIF * INH CF A15,FCHEC2 CHECK ACCESS PAR. AND RETURN FWT ADDRESS ENB LDR A4,A1 RETURN CODE RF(NZ) RDVT20 ERROR, RETURN * EJECT FMTASK * * LDR A6,A3 FWT ADDRESS LC A2,FWTVOL,A6 DISC FILE CODE (FIRST EXTENT) SC A2,ECBFC,A8 LD A2,FWTVTC,A6 VTOC SECTOR NUMBER (FIRST EXTENT) CF A14,FVTC10 READ VTOC SECTOR AND ONE VTOC RECORD * RDVT10 EQU * LD A1,VTC:EN,A13 FILE EXTENT NUMBER RF(Z) RDVT20 FIRST EXTENT FOUND CF A14,FVTC30 READ NEXT VTOC RECORD FOR THIS FILE RB RDVT10 CHECK IF THIS IS THE FIRST EXTENT * RDVT20 EQU * RTN A14 * EJECT FMTASK * * ********** * FNDVTC * ********** * * * FNDVTC SEARCHES THE REQUESTED * FILE SPECIFIED IN THE FPB. * RETURN IS MADE WHEN ONE EXTENT * HAS BEEN FOUND. * * INPUT: A2 = FILE CODE * A5 = TTAB ADDRESS * A6 = FWT ADDRESS * A9 = USER ECB ADDRESS * * OUTPUT: A2 = VTOC SECTOR NUMBER IF FOUND, ELSE * = 0 IF NO FILE EXTENT FOUND * A13 = VTOC RECORD ADDRESS IN FM:BUF * A1, A3-A4, A7, A11-A12 ARE DESTROYED * FNDVTC EQU * FIND VTOC ENTRY SC A2,ECBFC,A8 SET FILE CODE IN ECB LDK A2,0 SECTOR NUMBER CF A14,FMREAD READ SECTOR 0 LD A2,FM:BUF+VOL:EB VTOC EXTENT BASE LDR A12,A2 AD A2,FM:BUF+VOL:FS SKIP FSAT SECTORS AD A12,FM:BUF+VOL:EL LAST VTOC SECTOR+1 * EJECT FMTASK * * FVTC10 EQU * ENTRY USED BY RDVTOC CF A14,FMREAD READ ONE VTOC SECTOR LDKL A13,FM:BUF FM:BUF ADDRESS LDK A7,VTOCBF VTOC BLOCK FACTOR * FVTC20 EQU * LD A4,VTC:ST,A13 VTOC STATUS BYTE ANK A4,/FF RF(NZ) FVTC50 VTOC USED * FVTC30 EQU * ENTRY USED BY OPEN LD A2,ECBCW2,A8 CURRENT VTOC SECTOR NUMBER ADKL A13,VTOCRL NEXT VTOC ADDRESS SUK A7,1 RB(P) FVTC20 MORE VTOC:S IN THIS SECTOR ADK A2,1 NEXT VTOC SECTOR CWR A2,A12 CHECK IF END OF VTOC EXTENT RB(NE) FVTC10 NOT LAST VTOC SECTOR LDK A2,0 RETURN CODE RTN A14 * EJECT FMTASK * * FVTC50 EQU * LDR A1,A6 FWT ADDRESS ADK A1,FWTNAM LDR A3,A13 VTOC ADDRESS LDK A4,4 LOOP COUNTER * FVTC60 EQU * COMPARE FILE NAMES LDR* A11,A3 CWR* A11,A1 RB(NE) FVTC30 FILE NAMES NOT EQUAL ADK A1,2 INCREMENT POINTERS ADK A3,2 SUK A4,1 RB(P) FVTC60 RTN A14 ONE FILE EXTENT FOUND * EJECT FMTASK * * ********** * FNDFWT * ********** * * * FNDFWT IS USED TO FIND OUT IF THE SPECIFIED * FILE IS ALREADY OPENED, AND IF SO RETURN * THE FWT ADDRESS FOR THE FILE. * IF NOT OPENED, A FREE FWT ADDRESS IS RETURNED. * * INPUT: A10 = FPB ADDRESS * A12 = DISC FILE CODE, FIRST EXTENT * * OUTPUT: A6 = FWT ADDRESS (=0 IF NO FREE FWT AVAILABLE) * A1-A4, A7, A11 ARE DESTROYED * FNDFWT EQU * LDK A3,0 LD A7,SCTFWT FWT CHAIN START ADDRESS * FNDF10 EQU * LDK A2,1 * FNDF15 EQU * LDR A6,A7 NEXT FWT ADDRESS RF(Z) FNDF40 NO MORE FWT:S AVAILABLE LDR* A7,A6 FIRST WORD OF FWT TM A7,A2 CHECK IF USED RF(NZ) FNDF20 USED, CHECK FILE NAME ADK A3,0 CHECK IF FREE FWT ADDRESS ALREADY SAVED RB(NZ) FNDF15 YES, DON'T SAVE IT LDR A3,A6 NO, SAVE THIS FWT ADDRESS RB FNDF15 CONTINUE SEARCH * EJECT FMTASK * * FNDF20 EQU * POINT TO FILE NAMES LDK A1,4 LOOP COUNTER LDR A2,A6 FWT ADDRESS ADK A2,FWTNAM LDR A4,A10 FPB ADDRESS ADK A4,FPB:FN SUK A7,1 SKIP FWT USED BIT * FNDF30 EQU * COMPARE FILE NAMES LDR* A11,A2 CWR* A11,A4 RB(NE) FNDF10 FILE NAMES NOT EQUAL ADK A2,2 INCREMENT POINTERS ADK A4,2 SUK A1,1 RB(P) FNDF30 CC A12,FWTVOL,A6 CHECK FILE CODE OF FIRST EXTENT RB(NE) FNDF10 NOT THIS FILE RTN A14 FILE FOUND, RETURN * FNDF40 EQU * FILE NOT FOUND LDR A6,A3 FREE FWT ADDRESS RTN A14 * EJECT FMTASK * * ******** * MOVE * ******** * * * INPUT: A1 = INPUT BUFFER ADDRESS * A2 = NUMBER OF CHARACTERS TO MOVE * A3 = OUTPUT BUFFER ADDRESS * * OUTPUT: A2 = 0 * A1, A3 = ADDRESSES OF LAST MOVED CHARACTERS+1 * A4 IS DESTROYED * MOVE EQU * MOVE STRING LCR A4,A1 MOVE ONE CHARACTER SCR A4,A3 ADK A1,1 INCREMENT BUFFER POINTERS ADK A3,1 SUK A2,1 DECREMENT LOOP COUNTER RB(P) MOVE RTN A14 * EJECT FMTASK * * ********** * FMRDWR * ********** * * * FILE MANAGEMENT I/O FUNCTIONS. * FMRDWR IS ENTERED WHEN THE REQUESTED * SECTORS ARE SPLIT OVER MORE THAN * ONE EXTENT. * FMRDWR EQU * BASIC AND PHYSICAL READ/WRITE IFT XTSPLI=0 ABL LKMERR NOT INCLUDED IN THIS VERSION XIF * IFT XTSPLI=1 ABL LKMERR TO BE IMPLEMENTED XIF * * * END