.TITLE BINIO / / / FIRST PRINTING, FEBRUARY 1974 / / THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO / CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED / AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. / DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPON- / SIBILITY FOR ANY ERRORS THAT MAY APPEAR IN THIS / DOCUMENT. / / THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FUR- / NISHED TO THE PURCHASER UNDER A LICENSE FOR USE ON / A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH / INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR / USE IN SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PRO- / VIDED IN WRITING BY DIGITAL. / / DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY / FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIP- / MENT THAT IS NOT SUPPLIED BY DIGITAL. / / COPYRIGHT (C) 1974, BY DIGITAL EQUIPMENT CORPORATION / / .EJECT /COPYRIGHT 1972,1973, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. 01754 /EDIT #020 9 AUG 73 TAM(19,18)*REF(006)*WAD(009*REF* /DEFINE %V5A FOR V5A SYSTEM /DEFINE RSX FOR RSX PLUS III (PRODUCES SAME VERSION AS V5A) .IFDEF RSX %V5A=0 .ENDC .IFUND %V5A %DOS15=0 .ENDC /BINARY I/O OBJECT-TIME PACKAGE. / INTERNAL GLOBALS-- .GLOBL .FS /BINARY READ .GLOBL .FX /BINARY WRITE .GLOBL .FB /BINARY ARRAY I/O .GLOBL .RB /* RANDOM BINARY ARRAY I/O .GLOBL .FJ /BINARY ELEMENT I/O .GLOBL .RJ /* RANDOM BINARY ELEMENT I/O .GLOBL .FG /BINARY I/O CLEANUP .GLOBL .BUFLC /* LOC. OF BUFF. PTR. .GLOBL .RDTV /* READ TRANS. VEC. .GLOBL .WRTV /* WRITE TRANS. VEC. .GLOBL .IBLB /* INIT. BIN. L.B. .GLOBL .ID /* I.D. NUMBER .GLOBL .IDLOC /* PTR. TO I.D. WORD .GLOBL BINIO /FOR EXPLICIT USE BINIO=. /WITH CHAIN / VIRTUAL GLOBALS-- .GLOBL .FH /READ/WRITE FLAG. .GLOBL .FC /I/O DEVICE INITIALIZER. .GLOBL .FQ /LINE BUFFER TRANSFER ROUTINE. .GLOBL .FM /LINE BUFFER SIZE. .GLOBL .FN /LINE BUFFER. .GLOBL .ER /ERROR ROUTINE. .GLOBL .ER4 /REINIT. LOCATION (OTSER) .IFDEF %DOS15 .GLOBL .DSK,.FLRA,.FLTB1,.STADD,.FLZW0 .ENDC / CONSTANTS AND WORKING STORAGE-- C00001 .DSA 1 C00003 .DSA 3 S17777 .DSA 017777 V00000 300000 W00000 .DSA 400000 S00077 .DSA 77 SLOT .DSA 0 .ID .DSA 0 WD2 .DSA 0 WD5 .DSA 0 CNT .DSA 0 WCNT .DSA 0 DADD .DSA 0 LBADD .DSA 0 LBCNT .DSA 0 .IDLOC .DSA 0 HDR2 .DSA 0 LDRTV .DSA READ /* LOAD READ T.V. LDWTV .DSA WRITE /* LOAD WRITE T.V. .BUFLC XX /* .RDTV XX /* .WRTV XX /* .TITLE .FS - - BINARY READ /BINARY READ / CALLING SEQUENCE -- JMS .FS / .DSA ADDRESS OF SLOT NUMBER .FS CAL 0 /* /INIT. BINIO FOR SEQ. ACC. LAC LDRTV /* DAC .RDTV /* JN .FI LAC .FN /* DAC .BUFLC /* IN .IBLB / DZM* .FH /SET READ/WRITE FLAG TO READ. LAC* .FS /INITALIZE INPUT DEVICE. JMS* .FC DAC SLOT /SAVE SLOT NUMBER. .IFDEF %DOS15 DAC FS3 /SET UP .SEEK JMS* .DSK /A DISK? SNA JMP FS2 /NO LAC SLOT /FILE OPEN FOR RAND. ACC.? JMS* .FLRA JMP FS2 /YES FS7A LAC SLOT /NO-OPEN DEFAULT FILE IF NO FILE ACTIVE JMS* .FLTB1 JMP FS6 /RETURNS HERE IF A FILE ACTIVE-CHECK I/O DIR. DAC FS4 /NO FILE ACTIVE--DIR ENTRY BUFF. INTO LAC* .STADD /ZERO SO .INIT WILL GO THRO IN .FC DAC FS5 DZM* FS5 LAC* .FS /SLOT JMS* .FC /INIT FOR INPUT FS3 0 /FS4---.SEEK 3 FS4 0 /BUFF ADDR. .ENDC FS2 ISZ .FS /BUMP RETURN ADDRESS. JMS READ /READ FIRST RECORD. JMP* .FS /EXIT. .IFDEF %DOS15 FS5 0 /TEMP. FS6 SPA /IF AC POS.,FILE ACTIVE FOR OUTPUT /CLOSE OUTPUT FILE AND REOPEN IT THRO FS7A JMP FS2 /FILE ACTIVE FOR INPUT. O.K.(JUST CONT.) LAC SLOT /.DAT SLOT INTO AC DAC FS7 /SET .CLOSE CAL JMS* .FLZW0 /ZERO FILE ACTIVE WORD FS7 0 /.CLOSE 6 JMP FS7A /REOPEN FILE FOR INPUT .ENDC .TITLE .FX - - BINARY WRITE /BINARY WRITE / CALLING SEQUENCE -- JMS .FX / .DSA ADDRESS OF SLOT NUMBER. .FX CAL 0 /* /INIT. BINIO FOR SEQ. ACC. LAC LDWTV /* DAC .WRTV /* IN .FJ LAC .FN /* DAC .BUFLC /* IN .IBLB / LAC C00001 /SET READ/WRITE FLAG TO WRITE. DAC* .FH LAC* .FX /INITIALIZE OUTPUT DEVICE. JMS* .FC DAC SLOT /SAVE SLOT NUMBER. .IFDEF %DOS15 DAC FX3 /SET UP .ENTER JMS* .DSK /A DISK? SNA JMP FX2 /NO LAC SLOT /FILE OPEN FOR RAND. ACC.? JMS* .FLRA JMP FX2 /YES LAC SLOT /NO-OPEN DEFAULT FILE IF NO FILE ACTIVE JMS* .FLTB1 JMP FX6 /FILE ACTIVE-CHECK I/O DIRECTION DAC FX4 /FILE NOT ACTIVE-DIR. ENTRY BUFF ADDRR. LAC* .STADD DAC FS5 DZM* FS5 LAC* .FX /SLOT JMS* .FC /INIT FOR OUTPUT FX3 0 /.ENTER 4 FX4 0 .ENDC FX2 ISZ .FX /BUMP RETURN ADDRESS. DZM .ID /SET FIRST RECORD ID TO ZERO. JMS .IBLB /INITIALIZE LINE BUFFER PARAMETERS. JMP* .FX /EXIT. .IFDEF %DOS15 FX6 SMA /IF AC NEG,FILE ACT. FOR INPUT-ERROR JMP FX2 JMS* .ER /.OTS 51 000051 .ENDC .TITLE .FB (.RB) - - BINARY ARRAY I/O, .RB IF RANDOM ACCESS /BINARY ARRAY I/O / CALLING SEQUENCE -- JMS .FB (.RB - FOR RAN. ACC.) / .DSA ADDRESS OF DIMENSION INFORMATION. .RB=. /* R.A. ENTRY .FB CAL 0 LAC* .FB DAC WD5 /ADDRESS OF WORD 5 OF DIMENSION INFO. SPA /1 MORE LEVEL? LAC* WD5 /YES DAC WD5 /RESTORE TAD (-3) DAC WD2 LAC* WD2 /GET ARRAY SIZE CMA /SET CNT = 2'S COMPLEMENT OF ARRAY SIZE TAD C00001 DAC CNT LAC* WD5 /SET UP BINARY ELEMENT I/O CALL WITH ARGU- DAC FB2 /MENT = ARRAY ADDRESS. LAW -1 /MODE 0 ALWAYS INDICATED BECAUSE FB1 JMS .FJ /TRANSFER ONE BINARY WORD TO LINE BUFFER. FB2 .DSA 0 /LAW -MODE ALSO PASSED ON RETURN FROM ELEMENT I/O ISZ FB2 /INCREMENT DATA ADDRESS. ISZ CNT /INCREMENT WORD COUNTER AND TEST FOR EXIT. JMP FB1 / CNT.NE.0, TRANSFER ANOTHER WORD. ISZ .FB / CNT.EQ.0, BUMP RETURN ADDRES AND EXIT. JMP* .FB .TITLE .FJ(.RJ) - - ELEMENT I/O (.RJ IF RANDOM ACCESS) /BINARY ELEMENT I/O / CALLING SEQUENCE-- / 1'S COMPLEMENT OF MODE PASSED IN AC / JMS* .FJ (.RJ FOR R.A.) / .DSA ELEMENT ADDRESS (BIT0=1 IF TRANSFER VECTOR) / 1'S COMPLEMENT OF MODE RETURNED IN AC / .RJ=. /* R.A. ENTRY .FJ CAL DAC ACSAVE /SAVE PASSED MODE FOR RETURN SAD (777774) /IF IT IS 1'S COMPLEMENT OF 3, ADJUST FOR TAD (2) /TWO WORDS PER ELEMENT. ELSE 1'S COMP OF MODE = 2'S DAC WCNT /COMP. OF NO. WDS. PER DATA ITEM LAC* .FJ /STORE ADDRESS OF FIRST DATA WORD IN LOCA- DAC DADD / TION DADD. IF ARGUMENT IS A TRANSFER SPA / VECTOR, GO ONE MORE LEVEL OF INDIRECT. LAC* DADD DAC DADD ISZ .FJ /BUMP RETURN ADDRESS LAC* .FH /BRANCH PER READ OR WRITE. SZA JMP FI03 FI02 ISZ LBCNT JMP .+3 JMS* .RDTV /* IF LB EMPTY, READ NEW RCD ISZ LBCNT LAC* LBADD /READ--STORE LINE BUFFER WORD IN DATA DAC* DADD / LOCATION. ISZ LBADD /BUMP L.B. ADDRESS AND L.B. WORD COUNT. ISZ DADD /BUMP DATA LOCATION AND DATA WORD COUNT. ISZ WCNT JMP FI02 /MORE WORD(S) TO GO. JMP ACSAVE /FINISHED, EXIT FI03 ISZ LBCNT JMP .+3 JMS* .WRTV /* IF L.B. FULL, WRITE THIS RCD. ISZ LBCNT LAC* DADD /WRITE--STORE DATA WORD IN LINE BUFFER. DAC* LBADD ISZ LBADD /BUMP L.B. ADDRESS AND L.B. WORD COUNT. ISZ DADD /BUMP DATA LOCATION AND DATA WORD COUNT. ISZ WCNT JMP FI03 /MORE WORD(S) TO GO. ACSAVE LAW /LAW 1'S COMPLEMENT OF MODE EXECUTED BEFORE RETURN JMP* .FJ /FINISHED--EXIT .TITLE .FG - - I/O CLEANUP /BINARY I/O CLEANUP /CALLING SEQUENCE -- JMS .FG .FG CAL 0 LAC* .FH /BRANCH PER READ OR WRITE. SNA JMP FZ02 DZM* LBADD /WRITE--FILL REMAINING UNFILLED WORDS IN ISZ LBADD / LINE BUFFER WITH ZEROES. LAC LBCNT TAD (2 TAD* .FM DAC* .FM LAC .ID /SET BIT 0 OF RECORD ID AS AN INDICATOR XOR W00000 / THAT THIS IS THE LAST PHYSICAL RECORD DAC .ID / IN THIS LOGICAL RECORD. JMS WRITE /WRITE LAST RECORD AND EXIT. JMP FZ03 FZ02 LAC* .IDLOC /READ--CONTINUE READING PHYSICAL RECORDS SPA / UNTIL THE LAST ONE IN THE LOGICAL JMP FZ03 / RECORD HAS BEEN READ -- THEN EXIT JMS READ JMP FZ02 FZ03 LAC (NOP /REINIT. .ER DAC* .ER4 JMP* .FG .TITLE BINIO /INITIALIZE BINARY LINE BUFFER PARAMETERS. / CALLING SEQUENCE -- JMS .IBLB .IBLB CAL 0 LAC .BUFLC /* ADDRESS OF 1ST L.B. WORD (HEADER WD 1) TAD C00001 DAC HDR2 /ADDRESS OF 2ND L.B. WORD (HEADER WD 2) TAD C00001 DAC .IDLOC /ADDRESS OF 3RD L.B. WORD (RECORD ID) TAD C00001 DAC LBADD /ADDRESS OF 4TH L.B. WORD (1ST DATA WD) LAC* .FM /SET DATA WORD COUNTER (LBCNT) = TWOS CMA / COMPLEMENT OF THE NO. OF DATA WORDS TAD C00003 / IN THE LINE BUFFER (.FM-3) MINUS ONE DAC LBCNT JMP* .IBLB /EXIT. .EJECT /READ BINARY RECORD / CALLING SEQUENCE -- JMS READ READ CAL 0 LAC SLOT /READ IN NEW LINE BUFFER IN IOPS-BINARY. JMS* .FQ LAC* .FN /VERIFY MODE IN HEADER WORD. AND S00077 SNA JMP READ1 /IF IOPS-BINARY, O.K. JMS* .ER /IF NOT, GO TO ERROR EXIT. .DSA 11 READ1 JMS .IBLB /INITIALIZE L.B. PARAMETERS. JMP* READ /EXIT .EJECT /WRITE BINARY RECORD / CALLING SEQUENCE -- JMS WRITE WRITE CAL 0 JMS .IBLB /INITIALIZE L.B. PARAMETERS. LAC* .FM /PREPARE IOPS HEADER WORD. CLL; RTL; RTL; RTL; RTL AND (777000 /SAVE ONLY BITS #0-8 DAC* .FN DZM* HDR2 LAC .ID /STORE CURRENT RECORD ID IN THIRD BUFFER DAC* .IDLOC / WORD. LAC SLOT /OUTPUT LINE BUFFER IN IOPS-BINARY. JMS* .FQ ISZ .ID /BUMP RECORD ID. JMP* WRITE /EXIT. .END