// DATE 200622
// NOHALT
*
*** RUN MAINT.
*
// LOAD $MAINT,F1
// RUN
// COPY FROM-READER,TO-F1,RETAIN-R,LIBRARY-S,NAME-$GFND
       MACRO
       $GFND
.*
.*     5703-XM1 GRABIT -- BUFFER PRIMER
.*
       TEXT
       TITLE 'GFINDN -- BUFFER PRIMER'
***********************************************************************
* 5703-XM1      COPYRIGHT IBM CORP. 1970                              *
*               REFER TO INSTRUCTIONS ON COPYRIGHT NOTICE, 120-2083   *
*                                                                     *
***********************************************************************
*STATUS                                                               *
*   VERSION 1 MODIFICATION 0                                          *
*                                                                     *
*FUNCTION                                                             *
*   GFINDN IS DESIGNED FOR USE WITH GRABIT IN ACCESSING A GIVEN LINE  *
*   IN THE WORK FILE.  THE LINE NUMBER SUPPLIED TO GFILNO IS SEARCHED *
*   ON THROUGH THE FIT.  THE DB CONTAINING THIS NUMBER ALONG WITH     *
*   THE NEXT LOGICAL DB ARE READ INTO CORE, AND GRABIT IS INITIALIZED *
*   AND CALLED.  CONTROL IS THEN RETURNED TO THE CALLING PROGRAM.     *
*                                                                     *
*ENTRY POINTS                                                         *
*   GFINDN - ENTERED VIA A BRANCH.  GFILNO MUST BE PRIMED WITH THE    *
*   LINE NUMBER TO BE SEARCHED FOR.                                   *
*                                                                     *
*INPUT                                                                *
*   INPUT TO GFINDN IS THE LINE NUMBER SUPPLIED INTO GFILNO FOR THE   *
*   SEARCH TO BE MADE.                                                *
*                                                                     *
*OUTPUT                                                               *
*   OUTPUT IS THE PRIMED BUFFERS FOR GRABIT, WHICH CONTAIN THE DB     *
*   WHICH CONTAINS THE SPECIFIED LINE NUMBER AND THE NEXT LOGICAL     *
*   DB. (DATA BLOCK)                                                  *
*                                                                     *
*EXTERNAL REFERENCES                                                  *
*      $$FITS - CORE ADDRESS OF THE FILE INDEX TABLE (FIT)            *
*      DL4ICS - FOUR TRACK LOGICAL DISK IOCS                          *
*      GRABIT - DISK FILE LINE RETRIEVER                              *
*      GRSRDA - DADDR SAVE AREA PRIMED FOR GRABIT                     *
*      GRWHAT - GRABIT INDR                                           *
*      GRAFRA - BUFFER ADDR FOR GRABIT                                *
*                                                                     *
*EXITS, NORMAL                                                        *
*   NEXT SEQUENTIAL INSTRUCTION AFTER CALL FROM USING PROGRAM.        *
*                                                                     *
*EXITS, ERROR                                                         *
*   N/A                                                               *
*                                                                     *
*TABLES/WORK AREAS                                                    *
*   WORK AREAS AND DPL'S ARE LOCATED AT END OF MODULE.                *
*                                                                     *
*ATTRIBUTES                                                           *
*   REUSABLE                                                          *
*                                                                     *
*CHARACTER CODE DEPMENCY                                              *
*   CHARACTER CODE DEPENDENCY CLASS - A                               *
*   THE OPERATION OF THIS MOMLE DOES NOT DEPEND UPON A PAATICULAO     *
*   INTERNAL REPRESENTATION OR THE EXTERNAL CNANATTEN SET.            *
*                                                                     *
*NOTES                                                                *
*   ERROR PROCEDURES                                                  *
*      N/A                                                            *
*                                                                     *
*   REGISTER USAGE                                                    *
*      INDEX REGISTER 1 (@BR) IS SAVED AND RESTORED AND USED AS A     *
*      BASE REGISTER DURING EXECUTION.  INDEX REGISTER 2 (@XR) IS     *
*      NOT SAVED OR RESTORED BUT IT IS USED TO INDEX THROUGH FIT      *
*      IT SEARCHING FOR LINE NUMBER.                                  *
*                                                                     *
*   SAVED/RESTORED AREAS                                              *
*      N/A                                                            *
*                                                                     *
*   MODIFICATION CONSIDERATIONS                                       *
*      $FINDN IS INTERDEPENDENT WITH GRABIT (IE. WHEN PRIMING         *
*      SPECIFIC FIELDS IN GRABIT).  ALSO, NOTE 'OTHER'.               *
*                                                                     *
*   REQUIRED MODULES                                                  *
*      @SYSEQ - COMMON SYSTEM SOFTWARE EQUATES                        *
*      @CANEQ - COMMON CORE LOCATION EQUATES OUTSIDE NUCLEUS          *
*      DL4ICS - FOUR TRACK LOGICAL DISK IOCS                          *
*      GRABIT - FILE LINE RETRIEVER                                   *
*                                                                     *
*   OTHER                                                             *
*      GFINDN CAN BE FORCED TO DETECT THAT FIT DB'S ARE NEVER CON-    *
*      TIGUOUS BY MOVING A @NOP TO LABEL GFI200 PLUS @Q.              *
*                                                                     *
***********************************************************************
       EJECT
***********************************************************************
*                                                                     *
*            GFINON MODULE EQUATES                                    *
*                                                                     *
***********************************************************************
       SPACE
GFICT1 EQU   1                         COUNT CODE 1
GFICT2 EQU   2                         COUNT CODE 2
*
GFIDS0 EQU   0                         DISPLACEMENT OF 0
GFIDS1 EQU   1                         DISPLACEMENT OF 1
GFIDS2 EQU   2                         DISPLACEMENT OF 2
GFIDS3 EQU   3                         DISPLACEMENT OF 3
GFIDS4 EQU   4                         DISPLACEMENT OF 4
GFIDS5 EQU   5                         DISPLACEMENT OF 5
GFIDS8 EQU   8                         DISPLACEMENT OF 8
*
GFILN1 EQU   1                         LENGTH CODE 1
GFILN2 EQU   2                         LENGTH OF 2
*
GRBFR1 EQU   GFIBF1                    ADDR OF FIRST CORE BUFFER
*
GFITAD EQU   $$FITS                    ADDR OF FIT IN CORE
*
GFINTY EQU   GFITAD+GFIDS8             ADDR FIRST ENTRY IN FIT
*
GFIDTA EQU   3                         ADDR FIRST FIT DATA SECTOR
*
***********************************************************************
       EJECT
***********************************************************************
*                                                                     *
*            INIT REGS FOR GCLEAR AND SAVE REGS FOR CALLING ROUTINE   *
*                                                                     *
***********************************************************************
*
*GFINDN ENTER BASE=GFIBSE,EXIT=GFIND,@BR,,@ARR
       USING GFIBSE,@BR                BASE ADDRESS SPECIFICATION
GFINDN EQU   *                         MODULE ENTRY POINT
       ST    GFIND0+@OP1,@BR           SAVE @BR
       LA    GFIBSE,@BR                LOAD BASE REGISTER
       ST    GFIND2+@OP1(,@BR),@ARR    SAVE RETURN ADDRESS
*
*            SEARCH FILE INDEX TABLE FOR NUMBER IN GFLINO
*
GFIBSE EQU   *
       LA    GFINTY,@XR                LOAD XR WITH ADDR OF FIRST
*                                      * ENTRY IN FIT
GFI100 LA    GFIDS4(,@XR),@XR          INDEX TO NEXT FIT ENTRY
*
GFI150 CLC   GFIDS2(GFILN2,@XR),GFILNO(,@BR)  THIS DB CONTAIN NUMBER
*                                      * IN GFILNO ?
       BL    GFI100(,@BR)              NO, CHECK NEXT FIT ENTRY
       SPACE
***********************************************************************
*                                                                     *
*            READ DATA BLOCKS INTO CORE BUFFERS                       *
*                                                                     *
***********************************************************************
*
       MVI   GFIRED+@DSAD(,@BR),GFIDTA  INIT DPL FOR 1ST DATA SECTOR
       ALC   GFIRED+@DSAD(GFILN1,@BR),@ZERO(,@XR)  DISP FROM 1ST SECTOR
       MVI   GFIRED+@DCNT(,@BR),GFICT2  INIT DPL SECTOR COUNT
*
*            CHECK IF DB'S ARE CONTINUOUS
*
       MVC   GFIWRK(GFILN1,@BR),GFIDS4(,@XR)  COMPUTE IF DB'S ARE
       SLC   GFIWRK(GFILN1,@BR),@ZERO(,@XR)   * CONTIGUOUS ON DISK
       CLI   GFIWRK(,@BR),GFICT1       ARE DB'S CONTIGUOUS FOR READ ?
GFI200 JC    GFI500,@BE                YES, DB'S ARE CONTIGUOUS
*
***********************************************************************
       EJECT
***********************************************************************
*                                                                     *
*            PROCESSING OF NON-CONTIGUOUS DATA BLOCKS                 *
*                                                                     *
***********************************************************************
*
       MVI   GFIRAD+@DSAD(,@BR),GFIDTA  MODIFY SECTOR ADDR
       ALC   GFIRAD+@DSAD(GFILN1,@BR),GFIDS4(,@XR)
       SPACE
*       DSKL4 GFIRAD                    READ SECOND DB
       B     DL4ICS                    PERFORM RELATIVE DISK OP
       DC    AL2(GFIRAD)               DPL ADDRESS
*** END OF EXPANSION ***
*
       MVI   GFIRED+@DCNT(,@BR),GFICT1  MODIFY DPL SECTOR COUNT
       SPACE
*GFI500 DSKL4 WIRED                     READ DB(S)
GFI500 B     DL4ICS                    PERFORM RELATIVE DISK OP
       DC    AL2(GFIRED)               DPL ADDRESS
*** END OF EXPANSION ***
       SPACE
***********************************************************************
*                                                                     *
*            INITIALIZATION FOR GRABIT                                *
*                                                                     *
***********************************************************************
*
       MVC   GRSRDA(@CADDR),GFIRED+@DSAD(,@BR)  PRIME GRABIT DISK ADDR
       MVI   GRWHAT,@ZERO              PRIME GRWHAT FOR GRABIT
       MVC   GRBFRA(@CADDR),GFIBR1     PRIME GRABIT
*
       B     GRABIT                    GET NEXT STATEMENT
*
       MVI   GRWHAT,GFICT1             SET GRABIT FUNCTION CODE
       SPACE
***********************************************************************
*                                                                     *
*            END OF ROUTINE PROCESSING                                *
*                                                                     *
***********************************************************************
*
*GFIND  EXIT  @BR,,RETURN
GFIND0 LA    *-*,@BR                   RESTORE @BR
GFIND2 B     *-*                       RETURN TO CALING PROGRAM
*** END OF EXPANSION ***
       EJECT
***********************************************************************
*                                                                     *
*            DATA CONSTANTS, BUFFERS, AND WORK AREAS                  *
*                                                                     *
***********************************************************************
*
GFILNO DS    CL2                       INPUT AREA FOR LINE NUMPER TO
*                                      * BE SEARCHED FOR
GFIWRK DS    CL1                       USED TO COMPUTE IF DB'S ARE
*                                      * CONTIGUOUS IN CORE
*            DPL MODIFIED FOR READING OF DATA BLOCKS
*
*GFIRED DPL   FUNC=@DGET,DADDR=@WSFIT,CADDR=GFIBF1
GFIRED EQU   *                         DISK PARAMETER LIST
       DC    AL1(@DGET)                REQUESTED FUNCTION
       DC    AL2(@WSFIT)               DISK ADDRESS
       DC    AL1(*-*)                  SECTOR COUNT
       DC    AL2(GFIBF1)               BUFFER ADDRESS
*** END OF EXPANSION ***
       SPACE
GFIBR1 EQU   GFIRED+@DBFR2             ADDR OF FIRST BUFFER
*
*GFIRAD  DPL  FUNC=@DGET,DADDR=@WSFIT,CNT=@B1,CADDR=GFIBF2
GFIRAD EQU   *                         DISK PARAMETER LIST
       DC    AL1(@DGET)                REQUESTED FUNCTION
       DC    AL2(@WSFIT)               DISK ADDRESS
       DC    AL1(@B1)                  SECTOR COUNT
       DC    AL2(GFIBF2)               BUFFER ADDRESS
*** END OF EXPANSION ***
       SPACE
GFIBR2 EQU   GFIRAD+@DBFR2             ADDR OF SECOND BUFFER
*
***                       END OF GFINDN                             ***
       MEND
// CEND
// END
*
// READER CONSOLE
