*DECK SKSBDSQ                                                              GBK
          IDENT     SKSB$SQ                                              GBK
          COMMENT   CRMSQ SBF BACKSPACE ROUTINE 
          LIST      C,F,X 
          SST                                                            V2PL 
 1        MICRO     1,, B1                                               V2PL 
          B1=1                                                           V2PL 
*#                                                                       V2PL 
*1CD  SKSB$SQ                                                            GBK
*0D   PURPOSE                                                            V2PL 
*                                                                        V2PL 
*         (1) PERFORM SKIPBL DUTIES FOR FILES THAT HAVE BEEN             V2PL 
*             OPES$SQ-D SUCCESSFULLY.                                    GBK
*0D   CALLING SEQUENCE                                                   V2PL 
*                                                                        V2PL 
*                   SB6       M                                          V2PL 
*                   EQ        =XSKSB$SQ                                  GBK
*         M         BSS       0                                          V2PL 
*0D   PARAMETERS                                                         V2PL 
*         A0        FIT ADDRESS                                          V2PL 
*         B2        -(SKIP COUNT)... NEG SKIP COUNT                      V2PL 
*0D   REGISTERS                                                          V2PL 
*         ALL VOLATILE                                                   V2PL 
*0D   ACTION                                                             V2PL 
*#                                                                       V2PL 
 SKSB$SQ  TITLE     SKSB$SQ 
 SKSB$SQ  CAP.RM    TRANSIENT 
          SB4       #EOR#                                                T030113
          ON.RM     CNF,DONE       DO NOTHING ON CONNECTED FILE          GBK
          F.RM      SKP,B2         B2 = SKIP COUNT
          ON.RM     RSI,WSI        IF GETWR/PUTWR 
          RCL.RM    A0,AUTO        WAIT FOR I/O TO STOP 
          SA2       A0
          MX3       47
          BX4       -X3*X2
          AX4       10             ISOLATE BITS 13-10 OF CODE-AND-STATUS
          SX6       104B
          NZ        X4,=YERR$RM    IF UNABLE TO FLUSH BUFFER
          F.RM      IN,2
          F.RM      OUT,3 
          IX4       X2-X3 
          ZR        X4,EMPTY       IF NOTHING IN BUFFER 
          ON.RM     WPN,EMPTY      IF LAST OPERATION WAS OUTPUT 
          OFF.RM    SOL,EMPTY      IF SCOPE DEVICE
 MORE     BSS       0 
          SA4       X3             LOAD S/L CONTROL WORD
          SX3       X3+B1          FOR CONTROL WORD 
          BUFINC    X,3,4,3        POSITION TO NEXT SLCW
          SB2       B2+B1          INCREMENT SKIP COUNT 
          IX5       X3-X2 
          NZ        X5,MORE        IF MORE RECORDS IN BUFFER
          EQ        EMPTY 
          SPACE     1 
 WSI      BSS       0 
          SX6       111 
          OFF.RM    CKS,=YERR$RM   CHEKS NOT CALLED 
          SX6       TEMPSCR                                              T030113
          SET.RM    FIRST,X6       STORE *FIRST* IN FET                  V2PL 
          SA6       A7+B1          STORE *IN* IN FET.                    V2PL 
          SA6       A6+B1          STORE *OUT* IN FET.                   V2PL 
          SX6       X6+2           LIMIT=FIRST+2                         V2PL 
          SET.RM    LIMIT,X6       STORE *LIMIT* IN FET..                V2PL 
 EMPTY    BSS       0 
          IFC       NE,/"OS.NAME"/KRONOS/,1 
          SET.RM    RSC,0                                                V2PL 
          LE        B2,B0,RTURN                                          T030113
          DEC.RM    RC,B2          DECREMENT RECORD COUNT                T030113
          SET.RM    LOP,#SB#
*#                                                                       V2PL 
*0D       BACK OVER RECORDS CHECKING EACH FOR EOF OR BOI                 V2PL 
*#                                                                       V2PL 
          SX6       "1"            SET SKIP COUNT TO 1                   T030113
 RLOOP    BSS       0                                                    T030113
          SYSY      640B,R,6       BACKSPACE SCOPE LOGICAL RECORD        GBK
 #SYS#    IFC       NE,/"OS.NAME"/KRONOS/ 
          F.RM      RSC 
          NZ        X1,BOI
 #SYS#    ELSE
          F.RM      FCS 
          MX7       58
          BX1       X7*X1 
          SX7       50B 
          BX1       X1-X7 
          ZR        X1,BOI
 #SYS#    ENDIF 
          SYSY      20B,R          READ SKIP 1 RECORD                    GBK
          F.RM      OUT,3                                                T030113
          SET.RM    IN,X3          SET BUFFER EMPTY                      T030113
          F.RM      F18                                                  GBK
          SX2       30B                                                  T030113
          BX1       -X1*X2                                               T030113
          ZR        X1,FMARK       IF EOF, SKIP                          T030113
          SB2       B2-"1"         DECREMENT SKIPCOUNT                   T030113
          SX6       "1"+"1"        SET SKIP COUNT TO 2                   T030113
          GT        B2,B0,RLOOP    IF MORE TO SKIP, RETURN               T030113
 RETURN   SX6       "1"            ELSE, BACK OVER LAST RECORD           T030113
          SYSY      640B,R,6       BACKSPACE SCOPE LOGICAL RECORD        GBK
 RTURN    BSS       0                                                    T030113
          IFC       EQ,/"OS.NAME"/KRONOS/ 
          SA1       A0             CLEAR EOR BIT
          SX7       20B 
          BX7       -X7*X1
          SA7       A0
          ENDIF 
          SET.RM    FP,B4          STORE FILE POSITION                   T030113
DONE      JP        B6             GO BACK TO USER..                     T030113
*#                                                                       V2PL 
*0D       IF EOF ENCOUNTERED SET FP=EOP AND RSC TO RECORD                V2PL 
*#                                                                       V2PL 
 FMARK    BSS       0                                                    T030113
          INC.RM    RC,B2          RESET RECORD COUNT                    T030113
          SB2       B2-"1"                                               T030113
          SB4       #EOP#          SET FP                                T030113
          SX6       "1"                                                  V2PL 
          SYSY      44B,R,6                                              GBK
          EQ        DEXIT                                                V2PL 
*#                                                                       V2PL 
*0D       IF BOI HIT SET FP=EOL AND RSC TO RECORDS NO SKIPPED            V2PL 
*#                                                                       V2PL 
 BOI      BSS       0                                                    T030113
          SET.RM    RC,0                                                 T030113
          SET.RM    RSC,0          CLEAR RSC                             T030113
          SB4       #BOI#          SET FP                                T030113
*#                                                                       V2PL 
*0D       DATA EXIT ROUTINE... SETS FP TO #BOI# OR #EOP#, RL TO          V2PL 
*         ZERO, AND SETS UP THE RETURN JUMP BEFORE GOING TO THE          V2PL 
*         USER DATA EXIT (DX) IF SPECIFIED, ELSE RETURNS TO THE          V2PL 
*         USER (DX=0)...                                                 V2PL 
*#                                                                       V2PL 
DEXIT     BSS       0                                                    V2PL 
          SET.RM    FP,B4          FP TO #BOI# OR #EOP#                  V2PL 
          SET.RM    RL,0           RL IS ZEROED.                         T030113
          SX0       B2                                                   V2PL 
          F.RM      DX,B2          GET USERS DX                          V2PL 
          EQ        B2,B0,DONE     IF DX=0, ALL DONE...                  V2PL 
          SX2       40B            * ELSE GENERATE AN                    V2PL 
          SX7       B6             * EQ  B6  INSTRUCTION                 V2PL 
          LX2       21             *                                     V2PL 
          BX7       X7+X2          *                                     V2PL 
          LX7       30             *                                     V2PL 
          SA7       B2             STORE INSTR IN DX ADR FOR RTN JMP     V2PL 
          JP        B2+1           GO TO USERS DX+1                      V2PL 
*                                                                        V2PL 
*  TEMPORARY SCRATCH TO POINT BUFFER FOR READ SKIP OPERATION -           V2PL 
*  (THIS IS IN CASE THE USER MEM-ED AWAY THE REAL BUFFER).               V2PL 
*                                                                        V2PL 
 TEMPSCR  BSSZ      3              THREE WDS TO BE SUPER-SAFE            T030113
          END                                                            V2PL 
