*DECK SKIPDSQ 
          IDENT     SKIP$SQ 
          TITLE     SKIP$SQ - HANDLE FILE AND PHYSICAL SKIPS
          COMMENT   HANDLE FILE AND PHYSICAL SKIPS. 
          SST 
          B1=1
          TITLE     SKBF$SQ 
*#
*1CD  SKBF$SQ 
*0D   PURPOSE 
*         PERFORM SKIP BACKWARD FILE FUNCTIONS
* 
*0D   CALLING SEQUENCE
* 
*                   SB6     M 
*                   EQ      =XSKBF$RM 
*         M         BSS    0
* 
*0D   PARAMETERS
* 
*         A0        FIT ADDRESS 
* 
*0D   REGISTERS 
*         ALL VOLATILE
* 
*0D   ACTION
*         PICK UP SKIP COUNT
*         IF SKIP COUNT IS ZERO AND CODE AND STATUS IS EOF EXIT 
*         UNLESS DEVICE IS SOL - IN THIS CASE PAE MUST BE SET OR
*         FILE IS NOT LOGICALLY AT EOP AND ONE FILE MUST BE SKIPPED.
*         IF SKIP COUNT IS ZERO AND CODE AND STATUS IS NOT EOF
*         ONE FILE MUST BE SKIPPED
*         IF SKIP COUNT IS NOT ZERO, SKIP COUNT FILES MUST BE SKIPPED.
*         AFTER ANY OF THE ABOVE, ALL POINTERS ARE RESET AND
*         IF BOI HIT A DX IS TAKEN ELSE A NORMAL EXIT IS TAKEN
*#
 SKIP$SQ  CAP.RM    TRANSIENT 
          SAVE
          RCL.RM    A0,AUTO 
          F.RM      SKP,B2
          PL        B3,SKIPFWD
          SB3       -B3 
          EQ        B3,B1,SKBP$SQ 
 SKBF$SQ  BSS       0 
          NE        B2,B0,SKIP
          F.RM      FCS 
          SX2       30B 
          BX1       X1*X2 
          SB2       B1
          BX2       X1-X2 
          NZ        X2,SKIP 
          OFF.RM    SOL,SKIP
          ON.RM     PAE,NOSKIP
 SKIP     BSS       0 
          SX6       17B 
          SX3       B2
          SYSY      640B,R,3,6
 NOSKIP   BSS       0 
          SB4       #EOL# 
          LIST      F 
 #SYS#    IFC       NE,/"OS.NAME"/KRONOS/ 
          F.RM      RSC 
          NZ        X1,DEXIT
 #SYS#    ELSE
          F.RM      FCS 
          MX7       58
          BX1       X7*X1 
          SX7       50B 
          BX1       X1-X7 
          NZ        X1,NOTBOI 
          F.RM      FP,X1,-#BOF#
          ZR        X1,DEXIT
          SB4       #BOF# 
          EQ        RTURN 
 NOTBOI   BSS       0 
#SYS#     ENDIF 
          SB4       #EOP# 
          EQ        RTURN 
          TITLE     SKFF$SQ 
*#
*1CD  SKFF$SQ 
*0D   PURPOSE 
*         PERFORM SKIP FORWARD FILE FUNCTIONS 
* 
*OD   CALLING SEQUENCE
* 
*                   SB6     M 
*                   EQ      =XSKFF$SQ 
*         M         BSS     0 
*OD   PARAMETERS
* 
*         A0        FIT ADDRESS 
* 
*OD   REGISTERS 
*         ALL VOLATILE
*OD   ACTION
* 
*         PICK UP SKIP COUNT
*         IF ITS ZERO SET TO 1 UNLESS CODE AND STATUS IS EOF ON PRU 
*         DEVICE
*#
 SKIPFWD  EQ        B3,B1,SKFP$SQ 
 SKFF$SQ  BSS       0 
          NE        B2,B0,SOK 
          SB2       B1
 SOK      BSS       0 
          SX2       30B 
          SA1       A0
          BX3       X1
          SB4       #EOI# 
          LX1       59-9
          NG        X1,DEXIT
          BX1       X3*X2 
          BX3       X2-X1 
          NZ        X3,GO 
          ON.RM     SOL,CPAE
          F.RM      SKP,B2
          EQ        GO
*#
*         IF SOL DEVICE AND CODE AND STATUS IS EOF BUT PAE IS OFF 
*         THEN DECREMENT SKP BY ONE FOR PART OF FILE IN BUFFER
*#
 CPAE     BSS       0 
          F.RM      PAE,X2
          SX1       B1
          BX2       X1-X2 
          SB3       X2
          SB2       B2-B3 
*#
*         IF SKIP NOW ZERO EXIT 
*         ELSE SKIP SKP FILES 
*         AND CHECK CODE AND STATUS FOR EOI 
*         IF HIT SET FP TO EOI AND TAKE DX
*         IF NOT EXIT 
*#
 GO       BSS       0 
          EQ        B2,B0,CCDS
          SX6       17B 
          SX3       B2
          SYSY      240B,R,3,6
 CCDS     BSS       0 
          SA1       A0
          LX1       59-9
          NG        X1,DEXIT
          SB4       #EOP# 
          EQ        RTURN 
          TITLE     SKBP$SQ 
*#
*1CD  SKBP$SQ 
*0D   PURPOSE 
*         PERFORM SKIP BACKWARD PHYSICAL RECORD FUNCTIONS 
* 
*0D   CALLING SEQUENCE
* 
*                   SB6     M 
*                   EQ      =XSKBP$RM 
*         M         BSS    0
* 
*0D PARAMETERS
* 
*         AO        FIT ADDRESS 
* 
*0D   REGISTERS 
* 
*         ALL VOLATILE
* 
*0D   ACTION
* 
*         PICK UP SKIP COUNT
*         IF DEVICE TYPE IS PRU DEVICE
*                   IF SKIP COUNT=0 IF CODE AND STATUS IS EOR EXIT
*                                   ELSE SET SKIP COUNT TO 1
*                   ELSE BACK UP SKIP COUNT RECORDS ONE RECORD AT A 
*                        TIME CHECKING EACH FOR BOI OR EOF, IF EITHER 
*                        CONDITION HIT TAKE DX ELSE EXIT. 
* 
*         IF DEVICE TYPE IS SOL DEVICE
*                   IF SKIP COUNT IS O AND OUT NE BLP, SET SKIP COUNT =1
*                   INCREMENT SKIP COUNT BY NO. OF PHYSICAL RECORDS IN
*                   BUFFER. 
*                   IF CODE AND STATUS IS EOF AND PAE IS NOT SET INCREME
*                   SKIP COUNT BY 1 FOR EOF.
*                   BACK UP SKIP COUNT RECORDS ONE RECORD AT A TIME 
*                   CHECKING EACH FOR BOI OR EOF.  IF EITHER
*                   CONDITION FOUND TAKE DX, ELSE EXIT. 
*#
 SKBP$SQ  BSS       0 
          OFF.RM    SOL,PRUD
          F.RM      BLP,B4
          NZ        B2,INC
          F.RM      OUT,B3
          EQ        B3,B4,INC 
          SB2       B1
 INC      BSS       0 
          SX6       B1
          F.RM      IN,B3 
          EQ        B3,B4,FINI
 LP       BSS       0 
          SA1       B4
          SB5       X1+B1 
          BUFINC    B,4,5,3 
          SB4       X3
          SX6       X6+B1 
          NE        B3,B4,LP
 FINI     BSS       0 
          F.RM      FCS 
          SX2       30B 
          BX3       X2*X1 
          BX1       X3-X2 
          NZ        X1,BACK 
          ON.RM     PAE,BACK
          SB2       B2+B1 
 BACK     BSS       0 
          IFC       NE,/"OS.NAME#/KRONOS/,1 
          SET.RM    RSC,0 
          SB4       #EOS# 
          LE        B2,B0,RTURN 
*         BACK OVER RECORDS CHECKING EACH FOR EOF OR BOI
 RLOOP    BSS       0 
          SYSY      640B,R,6       BACKSPACE SCOPE LOGICAL RECORD 
 #SYS#    IFC       EQ,/"OS.NAME"/KRONOS/ 
          F.RM      FCS 
          MX7       58
          BX1       X7*X1 
          SX7       50B 
          BX1       X1-X7 
          ZR        X1,BOI
 #SYS#    ELSE
          F.RM      RSC 
          NZ        X1,BOI
 #SYS#    ENDIF 
          SYSY      20B,R          READ SKIP 1 RECORD 
          F.RM      OUT,3 
          SET.RM    IN,X3          SET BUFFER EMPTY 
          F.RM      FCS 
          SX2       30B 
          BX1       -X1*X2
          ZR        X1,FMARK       IF EOF 
          SB2       B2-B1 
          SX6       B1+B1          SET COUNT TO TWO 
          GT        B2,B0,RLOOP    IF MORE TO SKIP
          SX6       B1
          SYSY      640B,R,6       BACKSPACE SYSTEM LOGICAL RECORD
 RTURN    BSS       0 
          SET.RM    LOP,#SB#
*CALL /RSPTDSQ/ 
          SET.RM    FP,B4 
          CLCD.SQ 
          RESTORE 
          JP        B6             GO BACK TO USER
 FMARK    BSS       0 
          SB2       B2-B1 
          SB4       #EOP# 
          SX6       B1
          SYSY      44B,R,6        BACK OVER EOF
          EQ        DEXIT 
 BOI      BSS       0 
          SET.RM    RSC,0 
          SB4       #BOI# 
* 
*         DATA EXIT ROUTINE 
* 
 DEXIT    BSS       0 
          SET.RM    RL,0
          F.RM      DX,B2 
          EQ        B2,B0,RTURN    IF DX=0, EXIT
          RESTORE 
          SX2       40B            ELSE GENERATE AN EQ (B6) INSTRUCTION 
          SX7       B6
          LX2       21
          BX7       X7+X2 
          LX7       30
          SA7       B2             STORE IN DX ADDR FOR RTN JUMP
          SB6       B2+B1          SET RETURN TO DX+1 
          SAVE
          EQ        RTURN 
 PRUD     BSS       0 
          SX6       B1
          NE        B2,B0,BACK
          F.RM      FCS 
          LX1       59-4
          NG        X1,RTURN
          SB2       B1
          EQ        BACK
          TITLE     SKFP$SQ 
*#
*1CD  SKBF$SQ 
*0D   PURPOSE 
* 
*         PERFORM SKIP FORWARD PHYSICAL RECORD FUNCTIONS
* 
*0D   CALLING SEQUENCE
* 
*                   SB6     M 
*                   EQ      =XSKBF$RM 
*         M         BSS    0
* 
*0D   PARAMETERS
* 
*         A0        FIT ADDRESS 
* 
*0D   REGISTERS 
* 
*         ALL VOLITILE
* 
*OD   ACTION
* 
*         PICK UP SKIP COUNT
*         IF DEVICE TYPE IS SOL DEVICE
*                   COUNT THE NUMBER OF RECORDS(BLOCKS) IN
*                   THE BUFFER AND SUBTRACT THAT FROM THE SKIP COUNT
*                   IF THE CODE AND STATUS IS EOF AND PAE IS NOT ON 
*                   SUBTRACT 1 FROM THE SKIP COUNT
*                   IF SKIP COUNT IS NOW NEGATIVE, FILE MUST BE BACK- 
*                   SPACED TO MAKE PYHSICAL AND LOGICAL POSITIONS AGREE.
*                   ELSE CHECK FOR EOI OR EOF WITH PAE NOT SET AND IF 
*                   EITHER CONDITION EXISTS TAKE DATA EXIT. 
*                        IF SKIP COUNT IS ZERO, EXIT
*                        IF SKIP COUNT IS POSITIVE SKIP FOWARD SKIP COUN
*                        RECORDS CHECKING FOR EOF OR EOI
*                   RESET POINTERS AND EXIT.
*         IF DEVICE TYPE IS PRU DEVICE. 
*                   IF CODE AND STATUS IS EOR AND 
*                       IF SKIP COUNT IS ZERO EXIT
*                       IF PAE IS NOT SET, REDUCE SKIP COUNT
*                       BY 1
*                   IF SKIP COUNT IS ZERO EXIT
*                   ELSE SKIP FOWARD SKIP COUNT RECORDS CHECKING
*                   FOR EOF OR EOI. IF EITHER CONDITION IS DETECTED 
*                   TAKE DATA EXIT ELSE TAKE NORMAL EXIT WITH FP=EOS
*#
 SKFP$SQ  BSS       0 
          OFF.RM    SOL,PRU        IF PRU DEVICE
          F.RM      IN,B3 
          F.RM      OUT,B5
          BUFSP     B,3,5,6 
          ZR        X6,DONE        IF BUFFER EMPTY
          F.RM      BLP,B4
          NE        B4,B5,LOOP
          SB2       B2+B1 
 LOOP     BSS       0 
          SB2       B2-B1          DECREMENT SKIP COUNT FOR EACH BLOCK
          EQ        B4,B3,DONE     IF LAST BLOCK
          SA1       B4             FIND NEXT CONTROL WORD 
          SB5       X1+B1 
          BUFINC    B,4,5,6 
          SB4       X6
          EQ        LOOP
 DONE     BSS       0 
          F.RM      FCS 
          SX2       30B 
          BX3       X2*X1 
          BX1       X3-X2 
          NZ        X1,CKBK        IF EOF NOT READ
          ON.RM     PAE,CKBK
          SB2       B2-B1          COUNT LEVEL 17 PHYSICAL RECORD 
 CKBK     BSS       0 
          GT        B2,B0,FORWARD  IF MORE RECORDS TO SKIP
          SX6       -B2               ELSE BACK UP FILE SO PYHSICAL 
          SYSY      640B,R,6              AND LOGICAL POSITIONS AGREE 
          SB4       #EOS# 
          EQ        RTURN 
 FORWARD  BSS       0 
          SA2       A0
          LX2       59-9
          SB4       #EOI# 
          NG        X2,DEXIT       IF AT EOI
          LX2       9-3 
          MX3       1 
          F.RM      PAE 
          BX3       X3-X1 
          BX2       X2*X3 
          SB4       #EOP# 
          NG        X2,DEXIT       IF LOGICALLY AT EOF
 SKIPF    BSS       0 
          SB4       #EOS# 
          ZR        B2,RTURN            NOTHING TO SKIP 
          SX6       B1             SKIP ONE RECORD
          SYSY      240B,R,6       SKIP 
          SA2       A0
          LX2       59-9
          SB4       #EOI# 
          NG        X2,DEXIT       IF EOI HIT 
          LX2       9-3 
          SB4       #EOP# 
          NG        X2,DEXIT       IF EOF HIT 
          SB2       B2-B1 
          EQ        SKIPF          GO FOR NEXT RECORD 
 PRU      BSS       0 
          NZ        B2,NZERO
          SB2       1 
 NZERO    BSS       0 
          SA2       A0
          LX2       59-4
          PL        X2,SKIPF       IF NOT AT EOR
          F.RM      SKP 
          SB4       #EOS# 
          ZR        X1,RTURN       IF NOTHING TO SKIP 
          ON.RM     PAE,SKIPF      IF LOGICALLY AT EOR
          SB2       B2-B1             ELSE REDUCE COUNT FOR RECORD IN BU
          EQ        SKIPF 
          END 
