*DECK BKSPSQ
          IDENT  BKSPSQ 
          SST 
          TITLE  BKSPSQ - BACKSPACE SEQUENTIAL FILE 
          COMMENT  BKSPSQ - BACKSPACE SEQUENTIAL FILE 
* 
**        BKSPSQ - BACKSPACE SEQUENTIAL FILE 1 RECORD 
* 
*         CALL FROM SYMPL VIA BKSPSQ (FET); 
*                ONLY GOOD FOR FILES WITH Z RECORDS 
* 
*CALL COBIOM
          ENTRY  BKSPSQ 
 BKSPSQ   DATA   0
          SB1    1
          SA2    X1          GET FET ADDRESS
          SA3    X2          GET FET WORD 0 
          LX3    59 
          NG     X3,BKSPNR   JP IF IO COMPLETE
          RECALL X2          WAIT FOR COMPLETION
 BKSPNR   BSS    0
          FETCH  X2,FIRST,X5
          SB3    X5 
          FETCH  X2,IN,X3 
          SB4    X3 
          FETCH  X2,OUT,X4
          SB5    X4 
          FETCH  X2,LIMIT,X5
          SB6    X5 
          SX4    B6-B3       LIMIT-FIRST - MAX AMOUNT READ
          AX4    6
          LX4    6           ROUND TO PRU MULT
          SB2    X4 
          SB2    B4-B2       IN-AMOUNT READ = IN FOR LAST FULL READ 
          GE     B2,B3,BKSP0  JP IF NO WRAP AROUND
          SB7    B6-B3       LIMIT-FIRST
          SB2    B2+B7       SET TO LIMIT - (FIRST - PTR) 
 BKSP0    BSS    0
          SB7    B5-B1       OUT-1 (LAST WD OF LAST RECORD) 
          MX0    60-12
          NE     B4,B6,BKSP1 JP IF IN NOT = LIMIT 
          SB4    B3          SET IN TO FIRST
 BKSP1    BSS    0
          NE     B3,B5,BKSPLP JP IF OUT NOT = FIRST 
          SB7    B6-B1       SET TO LIMIT-1 - WRAP AROUND 
 BKSPLP   BSS    0           FIND A ZERO BYTE 
          EQ     B4,B7,BKSP1A  JP IF AT FIRST 
          NE     B2,B7,BKSP3  JP IF LAST WORD PROCESSED NOT LAST GOOD WD
 BKSP1A   BSS    0
          SX6    B6-B3       LIMIT-FIRST = SIZE OF BUFFER 
          SX4    X6+77B      ROUND
          AX4    6           PRUS IN BUFFER ROUNDED UP
          BKSPRU X2,X4,RCL   BACK UP TO PREVIOUS PRU
          LX4    6           NBR WORDS BACKSPACED 
          SB2    X4 
          SB4    B4-B2       IN - THIS NUMBER 
 BKSP2    BSS    0
          GE     B4,B3,BKSP2A  JP IF NEW IN IN BUFFER 
          SB2    B6-B3       LIMIT-FIRST
          SB4    B4+B2       SET TO LIMIT - (FIRST - NEW IN)
          EQ     BKSP2       SEE IF IN BUFFER NOW 
 BKSP2A   BSS    0
          SB2    B4          SET NEW POINTER TO FIRST NEW WORD READ 
          STORE  X2,IN=B4    SET NEW IN 
          STORE  X2,OUT=B4   SET OUT = IN OR BUFFER EMPTY 
          READ   X2,RCL      READ THE STUFF INCLUDING THE PREV PRU
          FETCH  X2,IN,X5    GET END OF DATA
          SB4    X5          NEW IN 
 BKSP3    BSS    0
          SX6    B7          SAVE OLD POINTER 
          SB7    B7-B1
          GE     B7,B3,BKSP4 JP IF POINTER NOT LESS THAN FIRST
          SB7    B6-B1       SET TO LIMIT-1 
 BKSP4    BSS    0
          SA3    B7          GET WORD AT POINTER
          BX3    -X0*X3 
          NZ     X3,BKSPLP   JP IF NOT ZERO BYTE
          STORE  X2,OUT=X6
          EQ     BKSPSQ      EXIT 
          END 
