|
|
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: 29928 (0x74e8)
Notes: pts_type(SC)
Names: »DMOPCL.SC«
└─⟦48601905a⟧ Bits:30009668 Philips computer tape "600121"
└─⟦this⟧ »M:TU10/DMOPCL.SC«
└─⟦d2a299635⟧ Bits:30009698 Philips computer tape "600415"
└─⟦this⟧ »M:TU10/DMOPCL.SC«
IDENT DMOPCL REL 10.0 80-03-14 870105041000 =3 ,RECORD LGTH 256 79-11-28 =2, COMMIT CHECK 79-11-22 =1 ,CONCURRENT OPEN 79-11-02 **************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * DMOPCL HANDLES OPEN CLOSE AND READ FILE PARAMETERS * IT IS ACTIVATED FROM DMTASK * * * * * **************************************************** * EJECT * *************** * ENTRIES * *************** * * ENTRY DMOPEN,DMCLOS,DMRFP EJECT * ***************** * EXTERNALS * ***************** * EXTRN CLRBUF,CRNCDF,CRNCIF,CRNGET,CRNQUE EXTRN ECBRC EXTRN FDBADF,FDBBLF,FDBCRL,FDBECB,FDBKA,FDBLRN EXTRN FDBMEC,FDBMIA,FDBNIF,FDBRLE,FDBSTA EXTRN FDBTNR EXTRN FNDFDB,DMTWM EXTRN FWTFNR,FWTPAR,FWTVOL EXTRN MOV:SU,MOV:US EXTRN MPYMOD,MXIND,TENDIO,TTB:MT EXTRN DIVMOD EXTRN FDBDBR,FDBMRO,FDBDMI,FDBBLZ EXTRN ECBFC EXTRN ECBBA EXTRN ECBEL EXTRN ECBRL EXTRN DWTECB EXTRN DWTOR EXTRN DWTTAB,DWTOPT,BLKMXL EXTRN FPB:RL,FPB:BF,FPB:FO,FPB:BO,FPB:FN,FPB:EL EXTRN FPB:V1,FPB:S1,FPB:V2,FPB:S2,FPB:V3,FPB:S3,FPB:V4,FPB:S4 EXTRN FPB:FR,FPB:US,FPB:SH,FPB:MN,FPB:SN,FPB:IF,FPB:KA EXTRN QOPEN,QRFP EXTRN PRUN EXTRN CRNSTA,DFTAB,DMTIDP EXTRN MONMMU,DMTERX,QCL EXTRN DMTRBU,DMTBM EXTRN DMTIOT EXTRN EARELB EXTRN TASHLT EXTRN FDBEAL EXTRN RECBFZ,REQERR EXTRN DMTBMR EJECT DMTASK * CONDITIONAL ASSEMBLY ************************** * * * A PROGRAM VERSION USING TOSS MMU PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1. * MMUPAG EQU 0 * * * * A PROGRAM VERSION FOR INDEXED ACCESS HANDLING * IS OBTAINED BY SETTING INDXAC = 1 X:B EQU 0 INDXAC EQU 00000 * * EJECT FPBSTA EQU 0 START ADDR FPB FPB:IV EQU FPBSTA+58 VOL NAME INDEX FPB:IS EQU FPBSTA+64 INDEX SIZE FPB:NI EQU FPBSTA+68 NR OF INDEX FPB:I1 EQU FPBSTA+70 INDEX ID 1 FPB:K1 EQU FPBSTA+77 NR OF KEY ITEMS FPB:A1 EQU FPBSTA+78 KEY ADDR 1 FPB:L1 EQU FPBSTA+80 KEY LENGTH 1 FPB:I2 EQU FPBSTA+82 FPB:L4 EQU FPBSTA+116 * FPB:FM EQU FPBSTA+6 TOSS FILE NR * FPBSIZ EQU 60 SIZE OF FPB AREA IN WORDS * FPBRES EQU 8 RESERVED FIELD LENGTH IN FILE PAR BLOCK * NOCORE EQU 1 NO CORE ERROR CODE * ERPAR EQU 4 WRONG PAR ERR CODE * OFLW EQU 3 OVERFLOW ERR CODE * ERKEYL EQU 8 LONG KEY ERR CODE EJECT ************************ * DATA DEFINITIONS * ************************ * HERE FOLLOWS NON-REENTRANT AREAS USED BY ORDERS : * OPEN,CLOSE,READ FILE PARAMETERS. * OPESPA DATA ' ' 2 SPACES OPEFN EQU * FILE NAME PREFIXES DATA ' ' DATA 'I1M1' DATA 'I2M2' DATA 'I3M3' DATA 'I4M4' OPEFNR EQU * OPENED FILE NRS DATA 0,0,0 OPEFCD EQU * OPENED FILE CODES DATA 0,0,0 OPEFWT EQU * FWT ADDRESSES DATA 0,0,0,0,0 OPEMXI EQU * MASTER INDEX ADDRESSES DATA 0,0,0,0,0 OPELRN DATA 0,0,0,0,0,0,0,0,0,0 LAST REC NRS OPEKAD DATA 0,0,0,0,0 KEY ADDRESSES OPEKYL DATA 0,0,0,0,0 KEY LENGTH DELAY DATA 0 NROFIX DATA 0 NR OF INDEX FILES INDVOL RES 3 VOLUME NAME INDEX FILES OPEFPB RES FPBSIZ FILE ADM PARAM. BLOCK OPEEND EQU *-OPEFNR NR OF BYTES EJECT DMRFP EQU * READ FILE PARAMETERS * * A1 = A6 * A6 = FDB ADDRESS ALL ORDERS * A7 = ORDER CODE ALL ORDERS * LDR A10,A6 FBD ADDR LC A6,FDBNIF,A10 NR OF INDEX ANK A6,/FF ST A6,NROFIX * STORE FILE NRS IN OPEFNR * LDK A5,10 2 * INDEXES RFP100 EQU * SUK A5,2 RF(N) OPE099 ALL FILES LDR A4,A10 ADR A4,A5 LD A3,FDBADF,A4 FDB ADDR RF(Z) RFP130 NO FILE LC A6,FWTFNR,A3 FILE NR RFP130 EQU * LDR A4,A5 SRL A4,1 SC A6,OPEFNR,A4 SAVE FILE NR RB RFP100 NEXT FILE EJECT * A1 = A6 * A6 = FDB ADDRESS ALL ORDERS * A7 = ORDER CODE ALL ORDERS * DMOPEN EQU * OPEN * * A8 = ECB ADDR * A9 = FPB ADDR * A10= SYSTEM FWT ADDR * A11= CURRENT FWT ADDR * A12= LOOP COUNTER (FILE INDEX) * LDKL A9,OPEFPB AS ABOVE * CHECK OPTIONS * LDR A10,A6 SYSTEM FWT ADDR LDR A11,A10 LC A2,DWTOPT,A10 OPTION LDR A3,A2 ANK A2,/FC SUK A2,/8 RF(NZ) OPE020 NOT INPUT ANK A3,/3 RF(NZ) OPEERR ONLY UNPROT RF OPE030 OPE020 EQU * SUK A2,/30 RF(NZ) OPEERR NOT INP/OUTP ANK A3,/3 RF(Z) OPEERR UNPROT NOT ALLOWED SUK A3,3 RF(Z) OPEERR NOT BOTH OPE030 EQU * EJECT * A12 = LOOP COUNTER FILES * * 1 = DATA FILE * 2 = INDEX 1 * 3 = MASTER INDEX 1 * 4 = INDEX 2 * ETC * * CLEAR WORK AREA * LDK A2,OPEEND NR OF BYTE TO CLEAR OPE050 EQU * SUK A2,2 RF(N) OPE060 NO MORE WORDS CM OPEFNR,A2 RB OPE050 NEXT WORD OPE060 EQU * * * MOVE IN PARAMETER BLOCK * LD A3,DWTECB,A10 USER ECB ADDR LD A1,ECBBA,A3 FD ADDR USER ADK A1,FPBRES RESERVED FIELDS LDR A2,A9 FPB ADDR LDK A3,FPB:L4+1 MAX SIGN LENGTH IFT MMUPAG=1 LD A4,DWTTAB,A10 USER TTAB ADDR CF A14,MOV:US XIF IFT MMUPAG=0 LDR A2,A3 LDR A3,A9 TO ADDR CF A14,DMTBM XIF IFT INDXAC=1 * * SAVE VOLUME NAME INDEX FILES * LDR A1,A9 FPB ADDR ADKL A1,FPB:IV FROM ADDR LDKL A3,INDVOL TO ADDR LDK A2,6 CF A14,DMTBM XIF LC A5,FPB:BO,A9 TOSS OPTIONS ANK A5,2 SLL A5,14 ST A5,DELAY IFT INDXAC=1 LC A5,FPB:FO,A9 ANK A5,/FF RF(Z) OPE099 STANDARD FILE LD A5,DWTECB,A10 USER ECB ADDR LD A5,ECBRL,A5 REQ LGTH CWK A5,FPB:NI+FPBRES RF(NG) OPEERR NO INDEX LC A5,FPB:NI,A9 NR OF INDEXES SC A5,NROFIX+1 EJECT * * SAVE BASE ADDRESSES FOR INDEXES * LDK A2,FPB:A1 ADR A2,A9 ADDR FIRST KEY ADDR ANK A5,/F LDK A3,2 OFFSET INDEX 1 OPE070 EQU * SUK A5,1 RF(N) OPE099 ALL INDEXES LDK A1,0 LC A1,-1,A2 NR OF KEY ITEMS SUK A1,1 RF(NZ) OPEER4 ERR LC A1,2,A2 KEY LENGTH ST A1,OPEKYL,A3 LDR* A1,A2 KEY OFFSET ST A1,OPEKAD,A3 ADK A2,FPB:I2-FPB:I1 ADK A3,2 RB OPE070 XIF EJECT OPE099 LDKL A12,1 DATA FILE INDEX OPE100 EQU * FILE LOOP * * OPEN FM FILE * LDKL A9,OPEFPB FPB ADDR LDR A8,A10 ADKL A8,FDBECB ECB ADDR ST A9,ECBBA,A8 FPB ADDR LC A5,FPB:BO,A9 ANK A5,1 SC A5,FPB:BO,A9 ONLY BASIC ALLOWED LDK A5,0 SC A5,FPB:SH,A9 NOT EXCLUSIVE CWK A10,FDBSTA RF(NE) OPE110 READ FILE PAR ORDER LDK A7,/A1 OPEN LKM DATA 15 LDR A1,A10 MAIN FDB CF A14,DMTIOT ERR CHECK LDR A1,A1 RF(NZ) OPEER0 ERR EJECT * * STORE FILE NR * LDR A1,A12 LOOP INDEX SRL A1,1 LDR* A6,A8 SC A6,OPEFNR,A1 OPENED FILE NRS OPE110 EQU * * * GET FWT ADDR IN A11 * ANK A6,/FF LDKL A11,FDBSTA SYST FDB ADDR LDR A3,A6 FILE NR OPE150 EQU * RF(Z) OPE190 END COUNT LDR* A11,A11 NEXT FDB ANKL A11,/FFFE USE BIT SUK A3,1 RB OPE150 EJECT OPEERR LDKL A1,REQERR GENERAL ERR CODE RF OPEER2 OPEER0 EQU * LDR A5,A1 RET CODE ECR A6,A5 ANK A6,/F BIT 4-7 IN RC RF(Z) OPEERA NO SPECIAL CODE ANK A6,/A GET BIT 4 AND 6 FROM RC ADK A6,1 B4=9,B5=1,B6=3 OPEERS EQU * LDR A1,A10 SYST FDB CF A14,CRNGET GET CURRENCY BUFFER SC A6,CRNSTA,A2 STAT CODE ANKL A5,/F1EF NOT BIT 4,5,6,11 ORK A5,/80 INF AVAIL OPEERA LDR A1,A5 RET CODE OPEER2 EQU * LD A9,DWTECB,A10 USER ECB ADDR ORS A1,ECBRC,A9 SEND CODE ABL OPEER1 OPEER3 LDK A6,OFLW OVERFLOW RF OPEERQ OPEER4 LDK A6,ERPAR WRONG PARAMETER OPEERQ LDKL A5,REQERR BIT 0 RB OPEERS OPEER8 LDK A6,ERKEYL LONG KEY RB OPEERQ EJECT OPE190 EQU * FWT ADDR IN A11 * * READ FILE PARAMETERS * STR A6,A8 FILE NR LDK A7,/83 RFP LKM DATA 15 LDR A1,A10 MAIN FDB CF A14,DMTIOT ERR CHECK ORS A1,ECBRC,A9 RET CODE LDKL A9,OPEFPB FPB ADDR CWK A12,1 RF(NE) OPE192 INDEX FILE LD A7,NROFIX NR OF INDEXES CWK A7,4 RB(G) OPEERR TOO MANY INDEXES SLL A7,1 ADK A7,2 LDR A12,A7 NEW LOOPER SUR A13,A13 REL ADDR IN TABLES OF OPEN RF OPE191 OPE192 EQU * LDR A7,A12 ANK A7,/FE REL ADDR LDR A13,A7 OPE191 EQU * CWK A10,FDBSTA ABL(NE) OPE300 READ FILE PAR ORDER LDR A1,A1 RB(NZ) OPEER2 EJECT * * CHECK OPENED FILE * LDK A3,/53 'S' CC A3,FPB:FO,A9 RB(NE) OPEERR NOT STD FILE LC A3,FPB:US,A9 NR OF USERS SUK A3,1 RF(Z) OPE195 FIRST OPEN LC A3,DWTOPT,A10 OPTION LDR A2,A3 ANK A3,/02 EXCL RB(NZ) OPEERR EXCLUSIVE WANTED IN VAIN ANK A2,/3 WANTED MODE LC A3,FDBDBR,A11 ANK A3,/3 OLD MODE CWR A2,A3 RB(NE) OPEERR ALL OPEN SAME ! LC A3,FDBNIF,A11 NR OF INDEX BEFORE FOR THIS FILE CW A3,NROFIX NR OF INDEXES RB(NE) OPEER4 ALW SAME INDEXES LD A2,DELAY RF(N) OPE193 2ND DELAY WANTED IN VAIN LDKL A2,/7FFF ANS A2,FDBDBR,A11 NO DELAY OPE193 EQU * ABL OPE300 EJECT OPE195 EQU * * * CLEAR FDB * LDKL A2,FDBMEC SUKL A2,FDBECB LENGTH OPE196 EQU * SUK A2,2 RF(N) OPE200 OK LDR A7,A11 ADR A7,A2 CM FDBECB,A7 RB OPE196 OPE200 EQU * LD A2,DELAY ST A2,FDBDBR,A11 SET DELAY FOR NEW FILE EJECT * * BUILD FWT FDB PART * OPE250 EQU * LD A3,FPB:RL,A9 ST A3,FDBRLE,A11 RECORD LENGTH LC A3,FPB:BF,A9 SC A3,FDBBLF,A11 BLOCK FACTOR LD A3,NROFIX NR OF INDEXES SC A3,FDBNIF,A11 NR OF INDEX FILES LC A3,FPB:FR+1,A9 SC A3,FDBLRN,A11 LD A3,FPB:FR+2,A9 ST A3,FDBLRN+1,A11 LAST REC NR LD A3,OPEMXI,A13 ST A3,FDBMIA,A11 MASTER INDEX ADDR RF(Z) OPE255 NO MASTER INDEX LD A3,FPB:KA,A9 CW A3,OPEKAD,A13 RB(NE) OPEER4 WRONG KEY ST A3,FDBKA,A11 KEY ADDR OPE255 EQU * LC A3,FPB:BO,A9 SLL A3,6 TOSS OPTIONS DELAY AND BASIC LC A4,DWTOPT,A10 ANK A4,/3 OPTIONS ORR A3,A4 ANK A4,1 =2 RF(Z) OPE257 NOT PROTECT =2 IM FDBBLZ,A11 COMMIT FLAG =2 OPE257 EQU * =2 SLL A3,8 ORS A3,FDBDBR,A11 BASIC + OPTION * CALCULATE DMTASK ID * LC A3,FWTVOL,A11 FIRST EXTENT VOLUME FC LDK A6,0 OPE260 CC A3,DFTAB,A6 RF(E) OPE270 THIS DISC ADK A6,1 RB OPE260 SEARCH NEXT DISC CODE OPE270 LC A3,DMTIDP,A6 REL DMTASK ID SC A3,FDBDMI,A11 MAIN DMTASK ID * * CALCULATE MAX FDBRRO * LD A6,FDBRLE,A11 REC LENGTH ADK A6,1 LDK A7,0 LC A7,FDBBLF,A11 BLOCK FACT SUK A7,1 CF A14,MPYMOD A1,A2=A6*A7 ST A2,FDBMRO,A11 MAX FDBRRO * CALCULATE BLOCK SIZE * AD A2,FDBRLE,A11 BLOCK LGTH ADK A2,1 STATUS =3 LDR A1,A2 RESULT SRL A2,8 SECTOR NR ANK A1,/FF RF(Z) OPE290 NO SPILL ADK A2,1 OPE290 EQU * SC A2,FDBBLZ,A11 BLOCK SIZE SLL A2,7 WORDS CWK A2,BLKMXL ABL(G) OPEER4 TOO LARGE BLOCK SIZE ST A11,FDBADF,A11 OPE300 EQU * ST A11,OPEFWT,A13 SAVE FWT ADDR LDR A13,A13 ABL(Z) OPE800 DATA FILE IFT INDXAC=1 LDR A3,A12 ANK A3,/1 ABL(Z) OPE600 INDEX FILE EJECT OPE400 EQU * MASTER INDEX BRANCH CWK A10,FDBSTA ABL(NE) OPE700 ORDER READ FILE PAR LDR A8,A10 ADKL A8,FDBECB ECB ADDR LD* A3,DWTECB,A10 FILE CODE ANK A3,/FF ST A3,-36,A14 FC ENTRY IN TTAB DMTASK ST A11,-34,A14 STR A3,A8 LDK A2,0 SC A2,FDBDBR,A11 NO SPECIAL FUNCTIONS ALLOWED SC A2,FDBBLZ+1,A11 NO COMMIT CHECK =2 LDK A2,1 SC A2,FDBDMI,A11 LET DMTASK 1 READ MASTER INDEX * * CALC NO OF WORDS NEEDED IN MASTRE INDEX * LD A6,FPB:RL,A9 REC LGTH LDR A1,A6 SUK A1,3 KEY LENGTH CW A1,OPEKYL,A13 REQUESTED ABL(NE) OPEER4 ERR LD A7,FPB:FR+2,A9 NO OF RECS CF A14,MPYMOD A1,A2=NO OF BYTES NEEDED SRC A1,1 ORR A2,A1 GET MOST SIGN BIT ADK A2,5 SRL A2,1 NO OF WORDS NEEDED RF(Z) DMT570 WRONG SIZE LD A4,MXIND LENGTH MXIND SUK A4,4 MAX A5 VALUE LDKL A5,-2 OFFSET DMT540 EQU * ADK A5,4 GET ENTRY CWR A5,A4 RF(G) DMT570 NO ENTRY FOUND LD A3,MXIND,A5 RB(Z) DMT540 ZERO ENTRY LD A6,MXIND+2,A5 RB(N) DMT540 ENTRY USED SUR A6,A2 NO OF SPARE WORDS RB(N) DMT540 LARGER ENTRY NEEDED * * SUFFICIENT SPACE FOUND * LDKL A1,/8000 USED BIT ORS A1,MXIND+2,A5 MARK ENTRY USED LDR A7,A12 ANK A7,/0E ST A3,OPEMXI,A7 MASTER INDEX ADDR LD A7,FPB:FR+2,A9 STR A7,A3 NO OF ENTRIES LD A1,FPB:RL,A9 ST A1,2,A3 ENTRY LENGTH ADK A3,4 SKIP MX HEADRER ST A3,ECBBA,A8 BUFFER ADDR ST A1,ECBRL,A8 REQ LGTH LDR A1,A5 MXIND ENTRY PAR TO REACTIVATION CWR A1,A4 MXIND ENTRY RF(NL) DMT590 LAST ENTRY LD A3,MXIND+6,A1 RF(N) DMT590 NEXT ENTRY USED * * MOVE SPARE WORDS TO NEXT ENTRY * LD A2,MXIND+2,A1 ANKL A2,/7FFF REMOVE USE BIT SUR A2,A6 ORKL A2,/8000 USE BIT ST A2,MXIND+2,A1 ADS A6,MXIND+6,A1 MAKE NEXT ENTRY LARGER LD A7,MXIND,A1 PREVIOUS POINTER SLL A2,1 NO OF BYTES ADR A7,A2 ST A7,MXIND+4,A1 EJECT DMT590 EQU * * * NOW READ MASTER INDEX WITH SEQUENTIAL READ * LDKL A7,/0082 SEQ READ LKM DATA 1 LD A2,ECBRC,A8 ANKL A2,/FEFF BIT 7 ONLY RETRIES RF(Z) DMT560 NO ERROR * * REMOVE THE ONLY CRN BUFFER * LDR A4,A11 FDB ADDR LD A5,FDBCRL,A4 CRN BUF ADR RF(Z) DMT553 NO CRN CM FDBCRL,A4 INH LD A6,CRNQUE STR A6,A5 ST A5,CRNQUE ENB DMT553 EQU * LDR A1,A2 ANKL A2,/1000 BIT 3 = EOF RF(NZ) DMT595 READY ,WHOLIE MXINDEX IS READ ABL OPEER2 ERR DMT560 EQU * * * RECORD READ,READ NEXRT * LD A2,ECBRL,A8 ADS A2,ECBBA,A8 REC LENGTH RB DMT590 READ NEXT RECORD DMT570 EQU * LDK A6,NOCORE CORE EXHAUSTED ABL OPEERQ * CLOSE MASTER INDEX FILE * DMT595 EQU * ST A10,-34,A14 CLOSE FC ENTRY LDR A8,A10 FWT ADDR ADKL A8,FDBECB ECB ADDR CM FPB:FR+2,A9 DO NOT WRITE LRN LDR A7,A12 LOOP COUNT SRL A7,1 LC A7,OPEFNR,A7 FILE NR SC A7,ECBFC,A8 ST A9,ECBBA,A8 PAR BLOCK ADDR LDK A7,/A2 CLOSE CF A14,CLRBUF RELEASE ALL FREE BUFFERS LKM DATA 15 LDR A1,A10 MAIN FDB CF A14,DMTIOT ERR CHECK LDR A1,A1 ABL(NZ) OPEER2 LDKL A9,OPEFPB FPB ADDR RF OPE700 NEXT FILE EJECT OPE600 EQU * INDEX FILE * * UPDATE PAR BLOCK * LD A3,OPEFWT DATA FILE FDB ADDR LC A2,FDBNIF,A3 CM FPB:NI,A9 FILLER SC A2,FPB:NI,A9 NR OF INDEX LDR A3,A12 SRL A3,1 LDR A2,A3 LDR A4,A9 LDKL A5,FPB:I2 SUKL A5,FPB:I1 OFFSET SUR A4,A5 OPE630 EQU * ADR A4,A5 REL ADDR SUK A2,1 NEXT INDEX RB(NZ) OPE630 ECR A3,A3 ADK A3,1 TYPE DUPL ST A3,FPB:I1,A4 ID AND TYPE CM FPB:I1+2,A4 CM FPB:I1+4,A4 LDK A7,1 ST A7,FPB:I1+6,A4 NR OF ITEMS LD A7,FDBKA,A11 KEY OFFSET ST A7,FPB:A1,A4 KEY ADDR LD A7,FDBRLE,A11 REC LGTH SUK A7,6 CM FPB:L1,A4 FILLER SC A7,FPB:L1,A4 KEY LENGTH ADK A7,8 SRL A7,1 WORD CWK A7,RECBFZ ABL(G) OPEER8 LONG KEY EJECT * * CALCULATE INDEX SIZE * LD A1,FPB:S1,A9 LD A2,FPB:S1+2,A9 SIZE IN SECTORS LC A6,FDBBLZ,A11 BLOCK SIZE ANK A6,/FF CF A14,DIVMOD ABL(O) OPEER3 LONG FILE CM FPB:IS,A9 ST A2,FPB:IS+2,A9 SIZE IN BLOCKS * * GET INDEX VOLUME NAME * LDKL A1,FPB:V1 LDK A3,FPB:IV ADR A1,A9 FROM ADDR ADR A3,A9 TO LDK A2,6 LGTH CF A14,DMTBM MOVE XIF EJECT * OPE700 EQU * NEXT FILE IFF INDXAC=1 NO INDEX RF OPE900 NO INDEX XIF IFT INDXAC=1 INDEXES YES SUKL A12,1 FILE LOOP CWK A12,1 ABL(NG) OPE900 ALL INDEXES ARE OPENED CWK A10,FDBSTA RF(NE) OPE740 READ FILE PAR ORDER * * SKIP MASTER INDEX AT SECONDARY OPEN * LD A1,OPEFWT DATA FILE LC A1,FWTPAR,A1 ANK A1,/3E NR OF OPEN BEYOND 1 RF(Z) OPE710 FIRST ANKL A12,/E NO MASTER INDEX OPE710 EQU * * * NEXT FILE NAME LDR A7,A12 SLL A7,1 WORD ADDR LD A1,OPEFN,A7 FIRST 2 CHAR IN FILE NAME ST A1,FPB:FN,A9 FILE NAME * * FETCH VOLUME NAME FOR INDEXES * LDKL A1,INDVOL FROM ADDR LDR A3,A9 ADKL A3,FPB:V1 TO ADDR LDK A2,6 CF A14,DMTWM MOVE VOLUME NAME * * MOVE SPACES TO OTHER VOLUME NAMES * LDK A6,30 NR OF VOLUME NAMES * 10 OPE750 EQU * SUK A6,10 RF(N) OPE770 ALL LDKL A1,OPESPA FROM ADDR LDR A3,A9 ADKL A3,FPB:V2 ADR A3,A6 TO ADDR LDK A2,6 NR OF CHAR CF A14,DMTWM RB OPE750 OPE740 EQU * GET FILE NR FOR READ FILE PAR LDR A7,A12 SRL A7,1 LC A6,OPEFNR,A7 OPE770 EQU * CM DELAY NO DELAY FOR INDEXES CM NROFIX NO INDEX FOR NEXT FILE ABL OPE100 XIF EJECT OPE800 EQU * DATA FILE * * UPDATE USER PAR BLOCK * LC A2,FDBNIF,A11 ANK A2,/FF RF(Z) OPE830 NO INDEX LDK A2,1 OPE830 EQU * SC A2,FPB:FO,A9 FILE ORG LDK A2,1 SC A2,FPB:FO+1,A9 DEVICE TYPE LC A2,OPEFNR FILE NR SC A2,FPB:FM,A9 LD A2,FDBDBR,A11 SRL A2,14 SC A2,FPB:BO,A9 DELAY BASIC TOSS OPTIONS * * CONVERT SIZE TO NR OF RECORDS * LDK A5,3 4 VOLUMES LDR A13,A9 OPE850 EQU * LD A1,FPB:S1,A13 LENGTH IN SECTORS LD A2,FPB:S1+2,A13 LC A6,FDBBLZ,A11 NR OF SECT IN BLOCK ANK A6,/FF CF A14,DIVMOD ABL(O) OPEER3 OVERFLOW LDR A6,A2 NR OF BLOCKS LC A7,FDBBLF,A11 NR OF REC IN BLOCK ANK A7,/FF CF A14,MPYMOD NR OF RECS ST A1,FPB:S1,A13 ST A2,FPB:S1+2,A13 ADKL A13,10 SUK A5,1 RB(NN) OPE850 MORE VOLUMES * * MOVE PART OF BLOCK TO USER * LDKL A3,FPB:FR SUKL A3,FPB:RL LENGTH LD A4,DWTECB,A10 USER ECB ADDR LD A1,ECBRL,A4 REQ LENGTH SUK A1,FPBRES RESERVED CWR A3,A1 RF(NG) OPE860 TAKE SHORTEST LDR A3,A1 OPE860 EQU * LDR A1,A3 ADK A1,FPBRES ST A1,ECBEL,A4 SET EFFECTIVE LENGTH LDR A1,A9 FROM ADDR IFT MMUPAG=1 LD A2,ECBBA,A4 TO ADDR ADK A2,FPBRES RESERVED FIELD LD A4,DWTTAB,A10 TTAB ADDR USER CF A14,MOV:SU XIF IFT MMUPAG=0 LDR A2,A3 LENGTH LD A3,ECBBA,A4 TO ADDR ADK A3,FPBRES RESERVED ITEM CF A14,DMTBM MOVE XIF * * ADJUST FILE NAME FOR INDEXES * LDR A1,A9 ADKL A1,FPB:FN FROM ADDR LDR A3,A1 ADK A3,2 TO LDK A2,6 NO OF CHAR CF A14,DMTBMR MOVE ABL OPE700 EJECT OPE900 EQU * FINISH LD A11,OPEFWT FDB ADDR DATA FILE CWK A10,FDBSTA RF(NE) OPE990 READ FILE PAR ORDER * * STORE FDB ADDRESSES IN ALL FDB'S * LDK A5,10 NR OF FILES * 2 DMT625 EQU * SUK A5,2 RF(N) DMT635 ALL FDB UPPDATED LD A3,OPEFWT,A5 FDB ADDR INDEX RB(Z) DMT625 NO INDEX FILE LDKL A1,OPEFWT FROM ADDR ADKL A3,FDBADF TO ADDR LDK A2,10 NO OF BYTES CF A14,DMTWM MOVE 5 WORDS RB DMT625 DMT635 EQU * * * CONNECT FILE CODE OF DATA FILE * LD* A2,DWTECB,A10 FILE CODE ANK A2,/FF SC A2,OPEFCD SAVE LDK A5,0 TTAB AND CDTAB LD A1,DWTTAB,A10 USER TTAB ADDR CF A14,FNDFDB ST A11,2,A4 FWT ADDR * * REMOVE CURRENCY BUFFER * LDR A1,A10 CF A14,CRNGET ADDR IN A2 ADKL A1,FDBCRL ROOT INH OPE940 EQU * LDR* A3,A1 NEXT BUFFER CWR A3,A2 RF(E) OPE950 THIS LDR A1,A3 RB OPE940 OPE950 EQU * LDR* A4,A3 NEXT STR A4,A1 LD A3,CRNQUE STR A3,A2 ST A2,CRNQUE ENB =1 OPE990 EQU * * * CHECK USER SIZE AND UPDATE PARAMETER BLOCK * LDK A1,FPB:IV LC A2,FDBNIF,A11 NR OF INDEX ANK A2,/F IFT INDXAC=1 RF(Z) OPE994 LDR A3,A2 SLL A2,3 SLL A3,2 ADR A2,A3 MULT WITH 12 ADK A2,FPB:I1 SUR A2,A1 MAX NR OF REM CHAR OPE994 EQU * XIF ADR A1,A9 FROM ADDR LD A3,DWTECB,A10 USER ECB LD A4,ECBRL,A3 TOT LGTH SUK A4,FPB:IV+FPBRES CWR A2,A4 REM LGTH RF(NG) OPE995 TAKE SHORTEST LDR A2,A4 OPE995 EQU * LDR A4,A2 ADK A4,FPB:IV+FPBRES ST A4,ECBEL,A3 SET EFF LENGTH IFT MMUPAG=0 LD A3,ECBBA,A3 TO ADDR ADK A3,FPB:IV+FPBRES CF A14,DMTBM MOVE XIF IFT MMUPAG=1 LDR A4,A2 LD A2,ECBBA,A3 ADK A2,FPB:IV+FPBRES TO ADDER LDR A3,A4 LENGTH LD A4,DWTTAB,A10 USER TTAB ADDR CF A14,MOV:SU XIF LDR A6,A10 SYSTEM FWT ADDR LDK A1,0 RET CODE ABL DMTERX TENDIO+EXIT IN DMTASK EJECT DMCLOS EQU * CLOSE * * A1 = A6 * (A3= BLOCK BUFFER ADDRESS ) * (A5 = BLOCK ADDRESS ) * A6 = FDB ADDRESS ALL ORDERS * A7 = ORDER CODE ALL ORDERS * (A8 = FDBECB ADDRESS ) * (A9 = USER ECB ADDRESS ) * LD A4,FDBDBR,A1 RF(NN) CLO200 NO DELAY LDK A7,/95 WRITE LKM DATA 15 FM IO CF A14,DMTIOT ERR CHECK CLO200 EQU * CF A14,DMTRBU RELEASE BUFFER * * CLEAR CURRENCY * LDR A1,A6 FDB ADDR =1 CF A14,CRNGET GET CURRENCY BUFFER =1 LDK A1,0 SC A1,CRNSTA,A2 STATUS CM CRNCDF,A2 CM CRNCDF+2,A2 IFT INDXAC=1 CM CRNCIF,A2 CM CRNCIF+2,A2 XIF * * BUILD CLOSE TABLES * LC A7,ECBFC,A9 FILE CODE LDK A5,10 2 * FILES CLO210 EQU * SUK A5,2 RF(N) CLO300 ALL FILES LDR A4,A6 ADR A4,A5 LDK A1,0 LDK A2,0 SUR A8,A8 SUR A9,A9 SUR A10,A10 LD A3,FDBADF,A4 FDB ADDR RF(Z) CLO230 NO FILE LD A8,FDBMIA,A3 MASTER INDEX ADDR LC A2,FWTFNR,A3 FILE NR LC A9,FDBLRN,A3 LAST REC NR LD A10,FDBLRN+1,A3 CLO230 EQU * ST A8,OPEMXI,A5 ST A3,OPEFWT,A5 LDR A4,A5 SRL A4,1 SC A2,OPEFNR,A4 FILE NR SC A1,OPEFCD,A4 FILE CODE SLL A4,2 ST A9,OPELRN,A4 LAST REC NR ST A10,OPELRN+2,A4 RB CLO210 NEXT FILE CLO300 EQU * SC A7,OPEFCD FILE CODE LDR A10,A6 MAIN FDB ADDR EJECT OPEER1 EQU * RECOVERY AT ERRORS LDR A6,A10 MAIN FDB LD A2,DWTOR,A10 ORDER ANK A2,/FF CWK A2,QRFP READ FILE PAR ABL(E) DMTERX * FREE FILE CODES,MASTER INDEXES,FILES, CURRENCY * LDKL A12,5 OPEE10 EQU * SUKL A12,1 RF(NN) OPEE20 MORE FILES LDR A6,A10 MAIN FDB ADDR LDK A1,0 RET CODE ABL DMTERX OPEE20 EQU * * RESET FILE CODE* * LC A2,OPEFCD,A12 FILE CODE ANK A2,/FF RF(Z) OPEE25 NO CODE LDK A5,0 TTAB AND CDTAB LD A1,DWTTAB,A10 USER TTAB ADDR CF A14,FNDFDB LDR A2,A2 RET CD RF(Z) OPEE25 NO ENTRY LDKL A7,FDBSTA SYSTEM FDB ADDR ST A7,2,A4 SYSTEM FWT ADDR OPEE25 EQU * EJECT * * RELEASE EA+CRN BUFFERS * LDR A7,A12 SLL A7,1 WORDS LD A11,OPEFWT,A7 FDB ADDR RF(Z) DMT894 NO FDB LDR A1,A11 LDKL A2,/C000 SUR A9,A9 CF A14,EARELB REL PROTECT BUFFERS ENB LC A5,FWTPAR,A11 ANK A5,/3F NR OF USERS SUK A5,1 RF(NZ) DMT894 MORE THAN ONE OPEN LD A5,FDBEAL,A11 PRO LINK ABL(NZ) TASHLT DM ERR EJECT * * RELEASE CURRENCY BUFFERS * LDKL A5,FDBCRL ADR A5,A11 LINK ROOT LDR* A4,A5 CMR A5 CLEAR FDB RF DMT830 DMT820 EQU * LDR A4,A5 BUFFER ADDRESS DMT830 EQU * RF(Z) DMT840 ALL BUFFER S REMOVED LDR* A5,A4 NEXT BUFFER ADDRESS * * RETIURN BUFFER TO POOL * INH LD A3,CRNQUE STR A3,A4 ST A4,CRNQUE ENB RB DMT820 EJECT DMT840 EQU * IFT INDXAC=1 * RELEASE MASRTER INDEX * LD A1,OPEMXI,A7 MASTER INDEX ADDR RF(Z) DMT894 NO MX LD A5,MXIND LENTH SUK A5,2 DMT885 EQU * SUK A5,4 RF(Z) DMT890 FIRST INDEX RF(N) DMT894 NO MATER IX CW A1,MXIND+2,A5 RB(NE) DMT885 LD A4,MXIND,A5 RF(N) DMT890 PREVIOUS ENTRY USED LD A4,MXIND+4,A5 NO OF WORDS ANKL A4,/7FFF REMOV USE BIT ADS A4,MXIND,A5 NR OF WORDS EJECT * * * MOVE UP REST OF MXIND * LDKL A1,MXIND+6 ADR A1,A5 FROM ADDR LDR A3,A1 SUK A3,4 TO ADDR LD A2,MXIND SUR A2,A5 SUK A2,2 NO OF CHAR CF A14,DMTWM MOVE UOP RF DMT894 DMT890 EQU * LDKL A4,/7FFF ANS A4,MXIND+4,A5 REMOVE USE BIT XIF EJECT * * CLOSE FILE * DMT894 LDR A8,A10 ADKL A8,FDBECB ECB ADDR LDKL A9,OPEFPB FPB ADDR LDR A7,A12 SLL A7,2 2 WORD INDEX LD A1,OPELRN,A7 LAST REC NR ST A1,FPB:FR,A9 LD A1,OPELRN+2,A7 ST A1,FPB:FR+2,A9 LC A7,OPEFNR,A12 ANK A7,/FF RF(Z) DMT898 NO FILE OPENED ST A7,ECBFC-1,A8 FILE NR ST A9,ECBBA,A8 PAR BLOCK ADDR LDK A7,/A2 CLOSE CF A14,CLRBUF CLEAR FREE BUFFERS LKM DATA 15 LDR A1,A10 MAIN FDB CF A14,DMTIOT ERR CHECK ORS A1,ECBRC,A9 SEND CODE DMT898 EQU * ABL OPEE10 NEXT FILE END