|
|
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: 36462 (0x8e6e)
Notes: pts_type(SC)
Names: »SDMOCR.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/SDMOCR.SC«
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
└─⟦this⟧ »TOSSWORK/SDMOCR.SC«
IDENT SDMOCR REL 11.0 81-05-12 870105041100 =8,CONDITION FOR CR,DE,EX =8,REL 11.0 81-04-02 =7,NO DEL OF FILE WHEN NOT OP. EXC. =7,REL 11.0 81-03-24 =6,NO EXCLUSIVE ACCESS WHEN MXIND READ =6,REL 11.0 81-03-16 =5,NO DEL OF FIL WHEN OPEN I/O EXCL. FAILS =5,REL 11.0 81-03-16 =4,STATUS INF. NOT CORRECT =4,REL 11.0 81-02-24 =3,FORMAT FIRST RECORD ALSO WHEN LRN=0 =3,REL 11.0 81-02-12 =2,FILE NBR IN WRONG REG. WHEN RFP =2,REL 11.0 81-02-04 =1,CLOSE FORMAT CHANGED =1,REL 11.0 81-01-26 **************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * SDMOCR HANDLES OPEN CLOSE AND READ FILE PARAMETERS * IT IS ACTIVATED FROM SDMTSK * * * * * **************************************************** * EJECT * *************** * ENTRIES * *************** * * ENTRY SDMOPN,SDMCLO,SDMRFP ENTRY OPEFPB EJECT * ***************** * EXTERNALS * ***************** * EXTRN CLRBUF,CRNCDF,CRNCIF,CRNGET,CRNQUE EXTRN ECBRC EXTRN FDBADF,FDBBLF,FDBCRL,FDBECB,FDBKA,FDBLRN EXTRN FDBMEC,FDBMIA,FDBNIF,FDBRLE,FDBSTA,FDBEXC EXTRN FDBENL EXTRN FNDFDB EXTRN FWTFNR,FWTPAR,FWTVOL EXTRN MOV:SU,MOV:US EXTRN MPYMOD,MXIND EXTRN DIVMOD EXTRN FDBDBR,FDBMRO,FDBDMI,FDBBLZ EXTRN FDBOMD EXTRN ECBFC EXTRN ECBBA EXTRN ECBEL EXTRN ECBRL EXTRN DWTECB EXTRN DWTOR EXTRN DWTTAB,DWTOPT EXTRN FPB:RL,FPB:BF,FPB:FO,FPB:BO,FPB:FN EXTRN FPB:V1,FPB:S1,FPB:V2,FPB:MN,FPB:EL EXTRN FPB:FR,FPB:US,FPB:SH,FPB:KA EXTRN CASZEN,COSZEN EXTRN GTBKBU,FRMFIL,FMIOCR,FMIODL EJECT EXTRN CRNSTA,DFTAB,DMTIDP EXTRN SDMERX EXTRN MOVFW EXTRN EARELB EXTRN TASHLT EXTRN FDBEAL EXTRN RECBFZ,REQERR EXTRN MOVBW EXTRN FMIOOP,FMIOCL,FMIORF,FMIOWR EXTRN SDMOIE,SDMOOS EXTRN CARRBL EXTRN SDMOOR,SDMOEE EXTRN FDBRRO,FDBSNR EXTRN FORMER EXTRN ADDMOD EXTRN SDMRLB,SDMTTD EXTRN ORDFLP EXTRN ENLFAC EJECT SDMTSK ************************* * 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:A EQU 0 INDXAC EQU X:A * * A VERSION LEAVING OUT OPEN MODES: * OPEN OUTPUT,OPEN EXTEND AND DISCARD * IS OBTAINED BY SETTING Y:C=0 * X:B EQU 0 =8 CRDEEX EQU X:B =8 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: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 * ILLNAM EQU 9 ILLEGAL NAME =4 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 EJECT 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-2 NR OF BYTES EJECT ********************************************* * R E A D F I L E P A R A M E T E R S * ********************************************* SDMRFP EQU * READ FILE PARAMETERS * * A10,A11 = FDB ADDRESS ALL ORDERS * A7 = ORDER CODE ALL ORDERS * LDR A10,A11 FBD ADDR LC A2,FDBNIF,A11 NR OF INDEX ANK A2,/FF ST A2,NROFIX * STORE FILE NRS IN OPEFNR * LDK A5,10 2 * INDEXES RFP100 EQU * SUK A5,2 RF(N) SDMO30 ALL FILES LDR A4,A11 ADR A4,A5 LD A3,FDBADF,A4 FDB ADDR RF(Z) RFP130 NO FILE LC A2,FWTFNR,A3 FILE NR RFP130 EQU * LDR A4,A5 SRL A4,1 SC A2,OPEFNR,A4 SAVE FILE NR RB RFP100 NEXT FILE EJECT *************** * O P E N * *************** SDMOPN EQU * OPEN * * A8 = ECB ADDR * A9 = LOOP COUNTER * A10,A11 = SYSTEM FDB ADDRESS * A12 = FPB ADDRESS * * A9 = LOOP COUNTER FILES * * 1 = DATA FILE * 2 = INDEX 1 * 3 = MASTER INDEX 1 * 4 = INDEX 2 * ETC * LDR A10,A11 SYSTEM FWT ADDR EJECT * * CLEAR WORK AREA * LDK A2,OPEEND NR OF BYTE TO CLEAR SDMO10 EQU * CM OPEFNR,A2 SUK A2,2 RB(NN) SDMO10 NO MORE WORDS TO CLEAR * * MOVE IN PARAMETER BLOCK * LD A1,DWTECB,A11 USER ECB ADDRESS LD A1,ECBBA,A1 FD ADDR USER ADK A1,FPBRES RESERVED FIELDS LDR A2,A12 FPB ADDR LDK A3,FPB:L4+1 MAX SIGN LENGTH IFT MMUPAG=1 LD A4,DWTTAB,A11 USER TTAB ADDR CF A14,MOV:US XIF IFT MMUPAG=0 CF A14,MOVFW XIF IFT INDXAC=1 EJECT * * SAVE VOLUME NAME INDEX FILES * LDR A1,A12 FPB ADDR ADKL A1,FPB:IV FROM ADDR LDKL A2,INDVOL TO ADDR LDK A3,6 CF A14,MOVFW XIF LC A5,FPB:BO,A12 TOSS OPTIONS ANK A5,2 SLL A5,14 ST A5,DELAY IFT INDXAC=1 LC A5,FPB:FO,A12 ANK A5,/FF RF(Z) SDMO30 STANDARD FILE LC A5,DWTOR+1,A11 ORDER CODE SUKL A5,SDMOEE ABL(NN) OERQER OUTPUT SEQ.,RAND.,EXT. NOT ALLOWED LD A5,DWTECB,A11 USER ECB ADDR LD A5,ECBRL,A5 REQ LGTH SUK A5,FPB:NI+FPBRES ABL(NP) OERQER INDEX NOT DEFINED LC A5,FPB:NI,A12 NR OF INDEXES SC A5,NROFIX+1 EJECT * * SAVE BASE ADDRESSES FOR INDEXES * LDK A2,FPB:A1 ADR A2,A12 ADDR FIRST KEY ADDR ANK A5,/F LDK A3,2 OFFSET INDEX 1 SDMO20 EQU * SUK A5,1 RF(N) SDMO30 ALL INDEXES LDK A1,0 LC A1,-1,A2 NR OF KEY ITEMS SUK A1,1 ABL(NZ) OESWP4 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 SDMO20 XIF SDMO30 EQU * LDKL A9,1 INDICATE DATA FILE EJECT ************************************* * F I L E L O O P E N T R Y * ************************************* * * O P E N O R C R E A T E F I L E W I T H F M * OPLENT EQU * ST A12,ECBBA,A8 FPB ADDR LC A5,FPB:BO,A12 ANK A5,1 SC A5,FPB:BO,A12 ONLY BASIC ALLOWED LDK A5,0 SC A5,FPB:SH,A12 NOT EXCLUSIVE CWK A11,FDBSTA RF(NE) OPL130 READ FILE PAR ORDER IFT CRDEEX=1 =8 * * IF OPEN OUTPUT RANDOM OR * OPEN OUTPUT SEQUENTIAL * THEN CREATE FILE * LC A5,DWTOR+1,A11 SUKL A5,SDMOOS RF(N) OPL120 NO CREATION OF FILE EJECT * * C R E A T E F I L E * CF A14,CASZEN CALCULATE SIZES * * BUILD PART OF FPB SPECIAL FOR CREATE * LDK A1,'S' FILE TYPE SC A1,FPB:FO,A12 LDKL A1,FPB:MN ADR A1,A12 POINTER IN FPB LDK A2,11 NUMBER OF BYTES TO RESET LDK A3,0 OPL110 EQU * SCR A3,A1 RESET BYTE ADK A1,1 UPDATE POINTER SUK A2,1 RB(P) OPL110 NEXT CHARACTER LDKL A3,' ' STR A3,A1 RETENTION PERIOD SC A3,2,A1 CF A14,FMIOCR CREATE FILE RF(NZ) OERCA1 ERROR RF OPL125 XIF =8 EJECT * * O P E N F I L E * OPL120 EQU * CF A14,FMIOOP OPEN RF(NZ) OERCA1 ERR * * SAVE FILE NR * OPL125 EQU * LDR A1,A9 LOOP INDEX SRL A1,1 LDR* A2,A8 SC A2,OPEFNR,A1 OPENED FILE NRS OPL130 EQU * * * GET FWT ADDR IN A10 * ANK A2,/FF LDKL A10,FDBSTA SYST FDB ADDR LDR A3,A2 FILE NR OPL140 EQU * RF(Z) OPL150 END COUNT LDR* A10,A10 NEXT FDB ANKL A10,/FFFE USE BIT SUK A3,1 RB OPL140 EJECT * * R E A D F I L E P A R A M E T E R S * OPL150 EQU * FWT ADDR IN A11 LDK A6,0 DEFAULT ENLARGE FACTOR LC A3,DWTOR+1,A11 INTERN ORDER CODE SUKL A3,SDMOEE RF(N) OPL155 NO ENLARGE DECLARED LD A6,FPB:EL,A12 ENLARGE FACTOR OPL155 EQU * STR A2,A8 FILE NR CF A14,FMIORF READ FILE PARAMETERS (A11=SYSFDB) ST A6,FPB:EL,A12 SET ENLARGE FACTOR LD A2,DWTECB,A11 USER ECB ADDRESS ORS A1,ECBRC,A2 RET CODE XRR A10,A11 XRR A11,A10 XRR A10,A11 EJECT * * A10 = SYSTEM FDB ADDRESS * A11 = CURRENT FDB ADDRESS * IFT INDXAC=1 CWK A9,1 RF(NE) OPL160 INDEX FILE LD A7,NROFIX NR OF INDEXES CWK A7,4 RF(G) OERQER TOO MANY INDEXES SLL A7,1 ADK A7,2 LDR A9,A7 NEW LOOPER SUR A13,A13 REL ADDR IN TABLES OF OPEN RF OPL170 OPL160 EQU * LDR A7,A9 ANK A7,/FE REL ADDR LDR A13,A7 OPL170 EQU * XIF IFT INDXAC=0 SUR A13,A13 IDICATE DATA FILE XIF CWK A10,FDBSTA ABL(NE) OPSPLT READ FILE PAR ORDER LDR A1,A1 RF(NZ) OERCOM EJECT ****************************************** * C H E C K O P E N E D F I L E * ****************************************** LDK A3,'S' 'S' CC A3,FPB:FO,A12 RF(NE) OERQER NOT STANDARD FILE LC A3,FPB:US,A12 NR OF USERS SUK A3,1 RF(Z) OPFRST FIRST OPEN LC A3,DWTOR+1,A10 LD A2,FDBEXC,A11 TTAB IF OPENED EXCLUSIVE RF(NZ) OERQER OPENED EXCLUSIVE BEFORE CC A3,FDBOMD,A11 RF(NE) OERQER THIS OPEN NOT SAME AS OLD OPEN LC A3,FDBNIF,A11 NR OF INDEX BEFORE FOR THIS FILE CW A3,NROFIX NR OF INDEXES RF(NE) OESWP4 ALW SAME INDEXES LD A2,DELAY RF(N) OPL180 2ND DELAY WANTED IN VAIN LDKL A2,/7FFF ANS A2,FDBDBR,A11 NO DELAY OPL180 EQU * ABL OPSPLT EJECT ******************* * E R R O R S * ******************* OERCA1 EQU * =4 LDR A6,A1 RETURN CODE =4 ANKL A6,/E10 MASK BITS 4,5,6 AND 11 =4 RF(Z) OERCOM NO STATUS TO SET =4 SLL A6,4 BIT 4 =4 RF(N) OESIN9 ILLEGAL NAME =4 SLL A6,1 BIT 5 =4 RF(N) OESNC1 NO CORE =4 OESOF3 EQU * =4 LDK A6,OFLW OVERFLOW =4 RF OESCOM =4 OESIN9 EQU * =4 LDK A6,ILLNAM ILLEGAL NAME =4 RF OESCOM =4 OESNC1 EQU * =4 LDK A6,NOCORE CORE EXHAUSTED =4 RF OESCOM =4 OESWP4 EQU * =4 LDK A6,ERPAR WRONG PARAMETER =4 RF OESCOM =4 OESLK8 EQU * =4 LDK A6,ERKEYL LONG KEY =4 OESCOM EQU * =4 LDR A11,A10 MAIN FDB ADDRESS =4 CF A14,CRNGET GET CURRENCY BUFFER =4 SC A6,CRNSTA,A2 SET STATUS =4 LDKL A1,/8080 SET RETURN CODE =4 RF OERCOM =4 OERQER EQU * =4 LDKL A1,/8000 RC REQUEST ERROR =4 OERCOM EQU * =4 LDR A11,A10 MAIN FDB ADDRESS =4 LD A9,DWTECB,A11 USER ECB ADDRESS =4 ORS A1,ECBRC,A9 SET RETURN CODE =4 ABL CLOCOM CLOSE EVENTUALLY FILES =4 EJECT *************************** * F I R S T O P E N * *************************** * * CLEAR FDB * OPFRST EQU * LDKL A2,FDBMEC SUKL A2,FDBECB LENGTH OPF100 EQU * SUK A2,2 RF(N) OPF110 OK LDR A7,A11 ADR A7,A2 CM FDBECB,A7 RB OPF100 EJECT * * BUILD FWT FDB PART * OPF110 EQU * LD A2,DELAY ST A2,FDBDBR,A11 SET DELAY FOR NEW FILE LD A3,FPB:RL,A12 ST A3,FDBRLE,A11 RECORD LENGTH LC A3,FPB:BF,A12 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,A12 SC A3,FDBLRN,A11 LD A3,FPB:FR+2,A12 ST A3,FDBLRN+1,A11 LAST REC NR CM FDBSNR,A11 LDK A3,1 ST A3,FDBSNR+2,A11 RESET SECTOR NUMBER LD A3,OPEMXI,A13 ST A3,FDBMIA,A11 MASTER INDEX ADDR RF(Z) OPF120 NO MASTER INDEX LD A3,FPB:KA,A12 CW A3,OPEKAD,A13 RB(NE) OESWP4 WRONG KEY ST A3,FDBKA,A11 KEY ADDR OPF120 EQU * LC A3,FPB:BO,A12 SLL A3,8 ORS A3,FDBDBR,A11 BASIC + OPTION EJECT * * CALCULATE SDMTSK ID * LC A3,FWTVOL,A11 FIRST EXTENT VOLUME FC LDKL A6,-1 OPF140 EQU * ADK A6,1 CC A3,DFTAB,A6 RB(NE) OPF140 NOT THIS DISC LC A3,DMTIDP,A6 REL DM TASK ID SC A3,FDBDMI,A11 MAIN SDMTSK ID * * CALCULATE MAX FDBRRO AND BLOCKSIZE IN SECTORS * CF A14,CARRBL RB(G) OESWP4 TOO LARGE BLOCK SIZE ST A1,FDBMRO,A11 MAX FDBRRO SC A2,FDBBLZ,A11 BLOCK SIZE IN SECTORS ST A11,FDBADF,A11 IFT CRDEEX=1 =8 * * CALCULATE ENLARGE FACTOR * LDR A4,A2 BLOCK SIZE IN SECTORS CF A14,ENLFAC RB(O) OESOF3 OVERFLOW ST A3,FDBENL,A11 SAVE ENLARGE FACTOR XIF =8 EJECT * * SET OPEN MODE * LDK A1,0 DEFAULT VALUE LD A3,DWTOR,A10 SC A3,FDBOMD,A11 OPEN MODE LDR A2,A3 SLL A2,6 RF(NN) OPF150 EXCLUSIVE ACCESS NOT WANTED LD A1,DWTTAB,A10 TTAB ADDRESS OPF150 EQU * ST A1,FDBEXC,A11 SET EXCLUSIVE ACCESS USER IFT CRDEEX=1 =8 ANK A3,/FF CWK A3,SDMOOR RF(NE) OPSPLT NOT OUTPUT RANDOM,DON'T FORMAT * * FORMAT FILE IF OPEN OUTPUT RANDOM * CF A14,GTBKBU GET BLOCK BUFFER LDR A4,A5 BUFFER ADDRESS CF A14,FRMFIL FORMAT FILE RB(NZ) OERCOM ERROR WHEN FORMATTING XIF =8 EJECT *********************************************************************** * D A T A , I N D E X O R M A S T E R I N D E X F I L E * *********************************************************************** OPSPLT EQU * ST A11,OPEFWT,A13 SAVE FWT ADDR IFT INDXAC=1 LDR A13,A13 ABL(Z) OPDATA DATA FILE LDR A3,A9 ANK A3,/1 ABL(Z) OPINDX INDEX FILE EJECT ******************************* * M A S T E R I N D E X * ******************************* OPMRIX EQU * CWK A10,FDBSTA ABL(NE) OPCHEK ORDER READ FILE PAR LD* A3,DWTECB,A10 FILE CODE ANK A3,/FF ST A3,SDMTTD,A14 FC ENTRY IN TTAB SDMTSK ST A11,SDMTTD+2,A14 STR A3,A8 LDK A2,0 SC A2,FDBDBR,A11 NO SPECIAL FUNCTIONS ALLOWED SC A2,FDBBLZ+1,A11 NO COMMIT CHECK LDK A2,1 SC A2,FDBDMI,A11 LET SDMTSK 1 READ MASTER INDEX EJECT * * CALC NO OF WORDS NEEDED IN MASTER INDEX * LD A6,FPB:RL,A12 REC LGTH LDR A1,A6 SUK A1,3 KEY LENGTH CW A1,OPEKYL,A13 REQUESTED ABL(NE) OESWP4 ERR LD A7,FPB:FR+2,A12 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) OPM140 WRONG SIZE LD A4,MXIND LENGTH MXIND SUK A4,4 MAX A5 VALUE LDKL A5,-2 OFFSET OPM100 EQU * ADK A5,4 GET ENTRY CWR A5,A4 RF(G) OPM140 NO ENTRY FOUND LD A3,MXIND,A5 RB(Z) OPM100 ZERO ENTRY LD A6,MXIND+2,A5 RB(N) OPM100 ENTRY USED SUR A6,A2 NO OF SPARE WORDS RB(N) OPM100 LARGER ENTRY NEEDED EJECT * * SUFFICIENT SPACE FOUND * LDKL A1,/8000 USED BIT ORS A1,MXIND+2,A5 MARK ENTRY USED LDR A7,A9 ANK A7,/0E ST A3,OPEMXI,A7 MASTER INDEX ADDR LD A7,FPB:FR+2,A12 STR A7,A3 NO OF ENTRIES LD A1,FPB:RL,A12 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) OPM110 LAST ENTRY LD A3,MXIND+6,A1 RF(N) OPM110 NEXT ENTRY USED EJECT * * 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 * * R E A D M A S T E R I N D E X * OPM110 EQU * * * DATA MANAGEMENT REQUEST: * GET MASTER INDEX WITH READ SEQUENTIAL * LD A2,FDBEXC,A11 EXCLUSIVE TTAB =6 CM FDBEXC,A11 INDICATE NO EXCLUSIVE ACCESS =6 LDK A7,/82 READ SEQUENTIAL LKM DATA 1 ST A2,FDBEXC,A11 EXCLUSIVE ACCESS CORRECT AGAIN =6 LD A2,ECBRC,A8 ANKL A2,/FEFF BIT 7 ONLY RETRIES RF(Z) OPM130 NO ERROR * * REMOVE THE ONLY CRN BUFFER * LD A5,FDBCRL,A11 CRN BUF ADR RF(Z) OPM120 NO CRN CM FDBCRL,A11 INH LD A6,CRNQUE STR A6,A5 ST A5,CRNQUE ENB OPM120 EQU * LDR A1,A2 ANKL A2,/1000 BIT 3 = EOF RF(NZ) OPM150 READY ,WHOLIE MXINDEX IS READ ABL OERCOM ERR EJECT OPM130 EQU * * * RECORD READ,READ NEXRT * LD A2,ECBRL,A8 ADS A2,ECBBA,A8 REC LENGTH RB OPM110 READ NEXT RECORD OPM140 EQU * ABL OESNC1 CORE EXHAUSTED =4 EJECT * * C O M P L E T E M A S T E R I N D E X F I L E R E A D * * CLOSE MASTER INDEX FILE * OPM150 EQU * ST A10,SDMTTD+2,A14 CLOSE FC ENTRY CM FPB:FR+2,A12 DO NOT WRITE LRN LDR A7,A9 LOOP COUNT SRL A7,1 LC A7,OPEFNR,A7 FILE NR SC A7,ECBFC,A8 ST A12,ECBBA,A8 PAR BLOCK ADDR CF A14,CLRBUF RELEASE ALL FREE BUFFERS XRR A10,A11 XRR A11,A10 XRR A10,A11 CF A14,FMIOCL CLOSE (MAIN FDB ADDRESS) XRR A10,A11 XRR A11,A10 XRR A10,A11 ADK A1,0 ABL(NZ) OERCOM ABL OPCHEK NEXT FILE EJECT *************************** * I N D E X F I L E * *************************** OPINDX EQU * INDEX FILE * * UPDATE PAR BLOCK * LD A3,OPEFWT DATA FILE FDB ADDR LC A2,FDBNIF,A3 CM FPB:NI,A12 FILLER SC A2,FPB:NI,A12 NR OF INDEX LDR A3,A9 SRL A3,1 LDR A2,A3 LDR A4,A12 LDK A5,FPB:I2-FPB:I1 SUR A4,A5 EJECT OPI100 EQU * ADR A4,A5 REL ADDR SUK A2,1 NEXT INDEX RB(NZ) OPI100 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) OESLK8 LONG KEY EJECT * * CALCULATE INDEX SIZE * LD A1,FPB:S1,A12 LD A2,FPB:S1+2,A12 SIZE IN SECTORS LC A6,FDBBLZ,A11 BLOCK SIZE ANK A6,/FF CF A14,DIVMOD ABL(O) OESOF3 LONG FILE CM FPB:IS,A12 ST A2,FPB:IS+2,A12 SIZE IN BLOCKS * * GET INDEX VOLUME NAME * LDKL A1,FPB:V1 ADR A1,A12 FROM ADDR LDK A2,FPB:IV ADR A2,A12 TO LDK A3,6 LGTH CF A14,MOVFW MOVE RF OPCHEK XIF EJECT ************************* * D A T A F I L E * ************************* OPDATA EQU * DATA FILE * * UPDATE USER PAR BLOCK * LC A2,FDBNIF,A11 ANK A2,/FF RF(Z) OPD100 NO INDEX LDK A2,1 OPD100 EQU * SC A2,FPB:FO,A12 FILE ORG LDK A2,1 SC A2,FPB:FO+1,A12 DEVICE TYPE LC A2,OPEFNR FILE NR SC A2,FPB:FM,A12 LD A2,FDBDBR,A11 SRL A2,14 SC A2,FPB:BO,A12 DELAY BASIC TOSS OPTIONS * * CONVERT SIZE TO NUMBER OF RECORDS AND * ENLARGE FACTOR TO PERCENTAGE * CF A14,COSZEN EJECT * * 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) OPD120 TAKE SHORTEST LDR A3,A1 OPD120 EQU * LDR A1,A3 ADK A1,FPBRES ST A1,ECBEL,A4 SET EFFECTIVE LENGTH LDR A1,A12 FROM ADDR LD A2,ECBBA,A4 TO ADDR ADK A2,FPBRES RESERVED FIELD IFT MMUPAG=1 LD A4,DWTTAB,A10 TTAB ADDR USER CF A14,MOV:SU XIF IFT MMUPAG=0 CF A14,MOVFW MOVE XIF * * ADJUST FILE NAME FOR INDEXES * LDR A1,A12 ADKL A1,FPB:FN FROM ADDR LDR A2,A1 ADK A2,2 TO LDK A3,6 NO OF CHAR CF A14,MOVBW MOVE EJECT ***************************************************************** * C H E C K I F A L L F I L E S A R E O P E N E D * ***************************************************************** OPCHEK EQU * NEXT FILE IFT INDXAC=1 INDEXES YES SUKL A9,1 FILE LOOP CWK A9,1 RF(NG) OPEND ALL INDEXES ARE OPENED EJECT ******************************************* * M O R E F I L E S T O O P E N * ******************************************* CWK A10,FDBSTA RF(NE) OPN120 READ FILE PAR ORDER OPNEXT EQU * * * 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) OPN100 FIRST ANKL A9,/E NO MASTER INDEX OPN100 EQU * * * NEXT FILE NAME LDR A7,A9 SLL A7,1 WORD ADDR LD A1,OPEFN,A7 FIRST 2 CHAR IN FILE NAME ST A1,FPB:FN,A12 FILE NAME * * FETCH VOLUME NAME FOR INDEXES * LDKL A1,INDVOL FROM ADDR LDR A2,A12 ADKL A2,FPB:V1 TO ADDR LDK A3,6 CF A14,MOVFW MOVE VOLUME NAME EJECT * * MOVE SPACES TO OTHER VOLUME NAMES * LDK A6,30 NR OF VOLUME NAMES * 10 OPN110 EQU * SUK A6,10 RF(N) OPN130 ALL LDKL A1,OPESPA FROM ADDR LDR A2,A12 ADKL A2,FPB:V2 ADR A2,A6 TO ADDR LDK A3,6 NR OF CHAR CF A14,MOVFW RB OPN110 OPN120 EQU * GET FILE NR FOR READ FILE PAR LDR A7,A9 SRL A7,1 LC A2,OPEFNR,A7 GET FILE NUMBER =2 OPN130 EQU * CM DELAY NO DELAY FOR INDEXES CM NROFIX NO INDEX FOR NEXT FILE LDR A11,A10 SYSTEM FDB ADDRESS ABL OPLENT XIF EJECT *********************************************** * A L L F I L E S A R E O P E N E D * *********************************************** OPEND EQU * FINISH LD A11,OPEFWT FDB ADDR DATA FILE CWK A10,FDBSTA RF(NE) OPE140 READ FILE PAR ORDER * * STORE FDB ADDRESSES IN ALL FDB'S * LDK A5,10 NR OF FILES * 2 OPE100 EQU * SUK A5,2 RF(N) OPE110 ALL FDB UPPDATED LD A2,OPEFWT,A5 FDB ADDR INDEX RB(Z) OPE100 NO INDEX FILE LDKL A1,OPEFWT FROM ADDR ADKL A2,FDBADF TO ADDR LDK A3,10 NO OF BYTES CF A14,MOVFW MOVE 5 WORDS RB OPE100 OPE110 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 A4=TTAB/SCTCDT ENTRY ADDRESS ST A11,2,A4 FWT ADDR EJECT * * REMOVE CURRENCY BUFFER * XRR A10,A11 XRR A11,A10 XRR A10,A11 CF A14,CRNGET ADDR IN A2 XRR A10,A11 XRR A11,A10 XRR A10,A11 LDR A3,A10 ADKL A3,FDBCRL ROOT INH OPE120 EQU * LDR A1,A3 LDR* A3,A3 NEXT BUFFER CWR A3,A2 RB(NE) OPE120 NEXT BUFFER LDR* A4,A3 NEXT STR A4,A1 LD A3,CRNQUE STR A3,A2 ST A2,CRNQUE ENB EJECT OPE140 EQU * * * CHECK USER SIZE AND UPDATE PARAMETER BLOCK * LDK A1,FPB:IV LC A3,FDBNIF,A11 NR OF INDEX ANK A3,/F IFT INDXAC=1 RF(Z) OPE150 LDR A4,A3 SLL A3,3 SLL A4,2 ADR A3,A4 MULT WITH 12 ADK A3,FPB:I1 SUR A3,A1 MAX NR OF REM CHAR OPE150 EQU * XIF ADR A1,A12 FROM ADDR LD A6,DWTECB,A10 USER ECB LD A2,ECBRL,A6 TOT LENGTH SUK A2,FPB:IV+FPBRES CWR A3,A2 REM LGTH RF(NG) OPE160 TAKE SHORTEST LDR A3,A2 EJECT OPE160 EQU * LDR A2,A3 ADK A2,FPB:IV+FPBRES ST A2,ECBEL,A6 SET EFFECTIVE LENGTH LD A2,ECBBA,A6 ADK A2,FPB:IV+FPBRES TO ADDER IFT MMUPAG=0 CF A14,MOVFW MOVE XIF IFT MMUPAG=1 LD A4,DWTTAB,A10 USER TTAB ADDR CF A14,MOV:SU XIF EJECT * **************** * OPEN END * **************** * LDR A11,A10 MAIN FDB ADDRESS LDK A1,0 RET CODE ABL SDMERX TENDIO+EXIT IN SDMTSK EJECT ***************** * C L O S E * ***************** SDMCLO EQU * CLOSE * * (A4= BLOCK BUFFER ADDRESS ) * (A5 = BLOCK BUFFER DATA ADDRESS ) * A11= FDB ADDRESS ALL ORDERS * A7 = ORDER CODE ALL ORDERS * (A8 = FDBECB ADDRESS ) * (A9 = USER ECB ADDRESS ) * LD A9,DWTECB,A11 USER ECB ADDRESS LD A3,FDBDBR,A11 RF(NN) SDMC10 NO DELAY CF A14,FMIOWR WRITE ORS A1,ECBRC,A9 SET RETURN CODE SDMC10 EQU * IFT CRDEEX=1 =8 LC A3,DWTOPT,A11 ANK A3,2 RF(NZ) SDMC20 CLOSE DISCARD EJECT * * CLOSE LOCK * LC A3,FDBOMD,A11 OPEN MODE CWK A3,SDMOOR RF(E) SDMC20 DON'T FORMAT,OUTPUT RANDOM CWK A3,SDMOEE RF(L) SDMC20 DON'T FORMAT,NOT EXTEND OR SEQ. * * FORMAT FILE IF OPENED OUTPUT SEQUENTIAL OR EXTEND * LDR A4,A5 BLOCK BUFFER DATA ADDRESS LD A3,FDBRRO,A11 RECORD OFFSET IN BLOCK =1 LD A1,FDBBLZ,A11 SLL A1,8 BLOCK SIZE IN BYTES LD A5,FDBLRN+1,A11 =3 RF(NZ) SDMC12 FILE NOT EMPTY =3 LC A5,FDBLRN,A11 =3 ADK A5,0 SET CR =3 RF(Z) SDMC16 FILE EMPTY =3 SDMC12 EQU * =3 AD A3,FDBRLE,A11 RECORD LENGTH =1 ADK A3,1 OFFSET TO LRN + 1 =1 SUR A1,A3 LENGTH LEFT IN BUFFER =1 SDMC16 EQU * =3 ADR A3,A4 RECORD POINTER LRN+1 =1 CF A14,FORMER BUILD FORMATTED BUFFER =1 CF A14,FMIOWR WRITE BLOCK BUFFER LDR A2,A1 RETURN CODE SLL A2,2 RF(N) SDMC20 END OF FILE ORS A1,ECBRC,A9 SET RETURN CODE LD A1,FDBSNR,A11 SECTOR NUMBER LD A2,FDBSNR+2,A11 LDK A6,0 LD A7,FDBBLZ,A11 BLOCK SIZE IN SECTORS CF A14,ADDMOD GET NEXT SECTOR ST A1,FDBSNR,A11 ST A2,FDBSNR+2,A11 CF A14,FRMFIL FORMAT REST OF FILE ORS A1,ECBRC,A9 SET RETURN CODE RF SDMC30 SDMC20 EQU * XIF =8 LD A4,FDBEXC,A11 EXCLUSIVE ACCESS INDICATOR =7 RF(NZ) SDMC25 OPENED EXCLUSIVE =7 SC A4,DWTOPT,A11 INDICATE CLOSE LOCK =7 SDMC25 EQU * =7 CF A14,SDMRLB RELEASE BLOCK BUFFER SDMC30 EQU * * * CLEAR CURRENCY * CF A14,CRNGET GET CURRENCY BUFFER 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 EJECT * * BUILD CLOSE TABLES * LC A7,ECBFC,A9 FILE CODE LDK A5,10 2 * FILES SDMC40 EQU * SUK A5,2 RF(N) SDMC60 ALL FILES LDR A4,A11 ADR A4,A5 LDK A1,0 LDK A2,0 LDK A6,0 SUR A9,A9 SUR A10,A10 LD A3,FDBADF,A4 FDB ADDR RF(Z) SDMC50 NO FILE LD A6,FDBMIA,A3 MASTER INDEX ADDR LC A2,FWTFNR,A3 FILE NR LC A9,FDBLRN,A3 LAST REC NR LD A10,FDBLRN+1,A3 SDMC50 EQU * ST A6,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 SDMC40 NEXT FILE EJECT SDMC60 EQU * SC A7,OPEFCD FILE CODE * * A11=MAIN FDB ADDRESS * CLOCOM EQU * RECOVERY AT ERRORS LC A2,DWTOR+1,A11 ORDER CODE INTERNAL CWK A2,ORDFLP ABL(E) SDMERX READ FILE PARAMETERS * * FREE FILE CODES,MASTER INDEXES,FILES, CURRENCY * LDKL A9,5 OPEE10 EQU * SUKL A9,1 RF(NN) OPEE20 MORE FILES EJECT * ***************** * CLOSE END * ***************** * LDK A1,0 RET CODE ABL SDMERX EJECT * * RESET FILE CODE* * OPEE20 EQU * LC A2,OPEFCD,A9 FILE CODE ANK A2,/FF RF(Z) OPEE25 NO CODE LDK A5,0 TTAB AND CDTAB LD A1,DWTTAB,A11 USER TTAB ADDR CF A14,FNDFDB LDR A2,A2 RET CD RF(Z) OPEE25 NO ENTRY LDKL A7,FDBSTA SYSTEM FDB ADDRESS ST A7,2,A4 SYSTEM FWT ADDR OPEE25 EQU * EJECT * * RELEASE EA+CRN BUFFERS * LDR A7,A9 SLL A7,1 WORDS LDR A13,A11 SAVE FDB ADDRESS LD A11,OPEFWT,A7 FDB ADDR RF(Z) CLODEL NO FDB LDKL A1,/C000 LDK A3,0 CF A14,EARELB REL PROTECT BUFFERS ENB LC A5,FWTPAR,A11 ANK A5,/3F NR OF USERS SUK A5,1 RF(NZ) CLODEL 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 RCRN20 RCRN10 EQU * LDR A4,A5 BUFFER ADDRESS RCRN20 EQU * RF(Z) RMIX10 ALL BUFFER S REMOVED LDR* A5,A4 NEXT BUFFER ADDRESS * * RETURN BUFFER TO POOL * INH LD A3,CRNQUE STR A3,A4 ST A4,CRNQUE ENB RB RCRN10 EJECT RMIX10 EQU * IFT INDXAC=1 * * RELEASE MASTER INDEX * LD A1,OPEMXI,A7 MASTER INDEX ADDR RF(Z) CLODEL NO MX LD A5,MXIND LENTH SUK A5,2 RMIX20 EQU * SUK A5,4 RF(Z) RMIX30 FIRST INDEX RF(N) CLODEL NO MASTER INDEX CW A1,MXIND+2,A5 RB(NE) RMIX20 LD A4,MXIND,A5 RF(N) RMIX30 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 A2,A1 SUK A2,4 TO ADDR LD A3,MXIND SUR A3,A5 SUK A3,2 NO OF CHAR CF A14,MOVFW MOVE RF CLODEL RMIX30 EQU * LDKL A4,/7FFF ANS A4,MXIND+4,A5 REMOVE USE BIT XIF EJECT * * CLOSE OR DELETE FILE * CLODEL EQU * LDR A7,A9 SLL A7,2 2 WORD INDEX LD A1,OPELRN,A7 LAST REC NR ST A1,FPB:FR,A12 LD A1,OPELRN+2,A7 ST A1,FPB:FR+2,A12 LC A7,OPEFNR,A9 ANK A7,/FF RF(Z) CLDL20 NO FILE OPENED ST A7,ECBFC-1,A8 FILE NR ST A12,ECBBA,A8 PAR BLOCK ADDR CF A14,CLRBUF CLEAR FREE BUFFERS LDR A11,A13 MAIN FDB ADDRESS EJECT IFT CRDEEX=1 =8 LC A7,DWTOPT,A11 ANK A7,/4F TEST MASK =5 SUK A7,2 =5 RF(Z) DELETE CLOSE DISCARD,OPEN OUT SEQ OR OPEN OUT RAN =5 XIF =8 CF A14,FMIOCL CLOSE IFT CRDEEX=1 =8 RF CLDL10 DELETE EQU * CF A14,FMIODL DELETE CLDL10 EQU * XIF =8 LD A2,DWTECB,A11 USER ECB ADDRESS ORS A1,ECBRC,A2 SEND CODE CLDL20 EQU * LDR A11,A13 MAIN FDB ADDRESS ABL OPEE10 NEXT FILE END