// DATE 040222
// NOHALT
*
*** RUN MAINT.
*
// LOAD $MAINT,F1
// RUN
// COPY FROM-READER,TO-F1,RETAIN-R,LIBRARY-S,NAME-$RCHF
       MACRO
       $RCHF
.*
.*     5703-XM1 SEARCH FOR FILE NAME IN USER DIR
.*
       TEXT
       TITLE 'SRCHFN - SEARCH FOR FILE NAME IN USER DIRECTORY'
***********************************************************************
*  5703-XM1 COPYRIGHT IBM CORP. 1970                                  *
*           REFER TO INSTRUCTIONS ON COPY RIGHT NOTICE, 120-2083      *
*                                                                     *
***********************************************************************
*STATUS                                                               *
*   VERSION 1 MODIFICATION 0                                          *
*                                                                     *
*FUNCTION                                                             *
*   * SRCHFN SEARCHES A USER DIRECTORY FOR A SPECIFIED FILENAME. IT   *
*     IS ASSUMED THAT THE DIRECTORY TO BE SEARCHED HAS BEEN READ INTO *
*     CORE AT SMUDBI IN TSMLES.  IF THE DIRECTORY IS LINKED TO AN     *
*     ADDITIONAL BLOCK IT IS READ IN TO THE SECONDARY BUFFER WHILE    *
*     THE PRIMARY BLOCK IS SEARCHED.                                  *
*   * THE ADDRESS OF THE ENTRY OR THE ADDRESS FOR A NEW ENTRY IS      *
*     PLACED IN SMUDEA. THE ADDRESS OF THE ACTIVE DIRECTORY IS PLACED *
*     IN SMUDBA.  IF THE NAME WAS NOT FOUND SMIFNE IS SET TO 1 IN     *
*     SMIND1.  IF THE NAME WAS FOUND THE INDICATOR IS SET TO 0.       *
*                                                                     *
*ENTRY POINTS                                                         *
*   SRCHFN - ENTRY TO SEARCH FOR A FILENAME. THE CALLING SEQUENCE     *
*            IS AS FOLLOWS:                                           *
*               B    SRCHFN                                           *
*                                                                     *
*INPUT                                                                *
*   THE USER DIRECTORY BLOCK MUST BE READ INTO SMUDB1 IN TSMLES.      *
*   THE NAME OF THE ENTRY TO SEARCH FOR MUST BE IN SMFNAM IN TSMLES   *
*                                                                     *
*OUTPUT                                                               *
*   * IF THE FILE NAME IS FOUND THE ADDRESS OF THE ENTRY IS SET IN    *
*     SMUDEA. THE ADDRESS OF THE BUFFER CONTAINING THE ENTRY IS IN    *
*     SMUDBA, AND THE INDICATOR BIT SMIFNE IN SMIND1 IS SET TO 0.     *
*   * IF THE FILE NAME WAS NOT FOUND SMUDEA CONTAINS THE ADDRESS OF   *
*     WHERE THE NEXT ENTRY MAY BE MADE IN THE DIRECTORY. SMUDBA       *
*     CONTAINS THE ADDRESS OF THE BUFFER CONTAINING THE LAST BLOCK,   *
*     AND SMIFNE IS SET TO 1 IN SMIND1.                               *
*   * SMUDEA CONTAINS THE ADDRESS OF THE LEFTMOST BYTE OF THE FIELD,  *
*   * THE ERROR CODE FOR FILE NOT FOUND IS ALWAYS MOVED TO $CAERR,    *
*                                                                     *
*EXTERNAL REFERENCES                                                  *
*        $CAERR - LOCATION OF ERROR CODE INDICATOR.                   *
*        $DISKN - ENTRY TO DISK IOCS.                                 *
*        $WAITF - ADDRESS OF COMMON I/O WAIT FUNCTION.                *
*        DL2ICS - ENTRY TO DISK LOGICAL IOCS.                         *
*        SMFNAM - ADDRESS OF FILENAME SAVE AREA                       *
*        SMUDEA - ADDRESS OF USER DIRECTORY ENTRY ADDRESS.            *
*        SMUDBA - ADDRESS OF USER DIRECTORY BUFFER ADDRESS.           *
*        SMDAAD - LOCATION OF RELATIVE DISK ADDRESS OF ACTIVE BUFFER. *
*        SMIFNE - VALUE OF NOT FOUND INDICATOR.                       *
*        SMIND1 - LOCATION INDICATOR 1.                               *
*        SMUDB1 - ADDRESS OF DIRECTORY BLOCK BUFFER.                  *
*        SMUDB2 - ADDRESS OF DIRECTORY BLOCK BUFFER.                  *
*                                                                     *
*EXITS, NORMAL                                                        *
*   THE REGISTER @BR @XR ARE RESTORED AND THE EXIT IS TO THE          *
*   ADDRESS SAVED FROM THE @ARR REGISTER.                             *
*                                                                     *
*EXITS, ERROR                                                         *
*   NONE.                                                             *
*                                                                     *
*TABLES/WORKAREAS                                                     *
*   NONE                                                              *
*                                                                     *
*ATTRIBUTES                                                           *
*   RELOCATABLE                                                       *
*                                                                     *
*CHARACTER CODE DEPENDENCY                                            *
*   CHARACTER CODE DEPENDENCY CLASS - C                               *
*   THE OPERATION OF THIS MODULE DEPENDS UPON AN INTERNAL REPRESENTA- *
*   TION OF THE EXTERNAL CHARACTER SET WHICH IS EQUIVALENT TO THE ONE *
*   USED AT ASSEMBLY TIME.  THE CODING HAS BEEN ARRANGED SO THAT RE-  *
*   DEFINITION OF CHARACTER CONSTANTS, BY REASSEMBLY, WILL RESULT IN  *
*   A CORRECT MODULE FOR THE NEW DEFINITIONS.                         *
*                                                                     *
*NOTES                                                                *
*   ERROR PROCEDURES                                                  *
*      NONE                                                           *
*                                                                     *
*   REGISTER USAGE                                                    *
*      @BR AND @XR ARE SAVED ON ENTRY AND RESTORED AT EXIT.           *
*      @ARR IS USED AS THE RETURN ADDRESS.                            *
*                                                                     *
*   SAVED/RESTORED AREAS                                              *
*      NONE                                                           *
*                                                                     *
*   MODIFICATION CONSIDERATIONS                                       *
*      NONE                                                           *
*                                                                     *
*   REQUIRED MODULES                                                  *
*      @SYSEQ - SYSTEM SOFTWARE EQUATES.                              *
*      @DIREQ - LIBRARY DIRECTORY EQUATES.                            *
*      @FXDEQ - SYSTEM NUCLEUS EQUATES.                               *
*      DL2ICS - LOGICAL DISK IOCS.                                    *
*      TSMLES - DATA MANAGEMENT COMMUNICATIONS AREA.                  *
*                                                                     *
*   OTHER                                                             *
*      NONE                                                           *
***********************************************************************
       EJECT
SRCHFN EQU   *                         ENTRY TO SEARCH FILENAME
       ST    SRC900+@OP1,@BR           SAVE BASE REGISTER
       USING SRC010,@BR
SRC010 LA    SRC010,@BR                SET BASE ADDR
       ST    SRC910+@OP1(,@BR),@XR     SAVE INDEX REG
       ST    SRC920+@OP1(,@BR),@ARR    SAVE RETURN ADDR
       MVI   $CAERR,@@E211             FILE NOT FOUND
       MVC   SRCBF1(@CADDR,@BR),SRCBA1(,@BR)  INITIALIZE OLF POINTER
       MVC   SRCBF2(@CADDR,@BR),SRCBA2(,@BR)  ALTERNATE BUFFER
       MVC   SRCACT(@CADDR,@BR),SRCBF1(,@BR)  SET ACTIVE BUFFER
       SPACE
SRC020 B     $DISKN                    WAIT FOR USER BLOCK
       DC    AL2($WAITF)               WAIT OP DPL
*
       MVI   SRC055+@Q(,@BR),@UCB      RESET NOP FOR LINKED DIRCTY
       L     SRCACT(,@BR),@XR          PICKUP POINTER TO ACTIVE BUFFER
*
*            BLOCK LINK SHOULD ALWAYS BE GREATER THAN 1 IF IT IS
*            PRESENT. IF NOT THE LINK BYTE SHOULD BE ZERO.
*
       CLC   ##DUHB(@DADDR,@XR),SRCC01(,@BR)  TEST LIVE FIELD
       JL    SRC030                           JUMP NOT LINKED
       MVC   SRCBFR(@DADDR,@BR),SRCBF2(,@BR)  GET ALTERNATE BUFFER ADDR
       MVC   SRCDAD(@DADDR,@BR),##DUHB(,@XR)  SET LINK TO MEXT BLOCK
       B     DL2ICS                    READ NEXT BLOCK
       DC    AL2(SRCDPL)               POINTER TO DPL
*
       MVI   SRC055+@Q(,@BR),@NOP      SET SWITCH FOR LINKED BLOCK
SRC030 MVC   SRCCNT(1,@BR),##DUHC(,@XR)  GET ENTRY COUNT
       LA    ##DUEI(,@XR),@XR          BUMP TO FIRST ENTRY
       CLI   SRCCNT(,@BR),@ZERO        IS STARTING COUNT ZERO ?
       BE    SRC055(,@BR)              YES, RETURN NOT FOUND
SRC035 CLC   ##DUEN(##LUEN,@XR),SMFNAM LOOK AT ENTRY
       JE    SRC040                    JUMP IF THE NAME IS FOUND
       LA    ##LUE(,@XR),@XR           BUMP THE POINTER FOR NEXT ENTRY
       SLC   SRCCNT(1,@BR),SRCC01(,@BR)  DECR ENTRY COUNTER
       BNE   SRC035(,@BR)              BACK TO TEXT NEXT ENTRY
SRC055 JC    SRC060,*-*                LINK SWITCH
       MVC   SRCBF1(@CADDR,@BR),SRCBF2(,@BR)  SWITCH BUFFERS
       MVC   SRCBF2(@CADDR,@BR),SRCACT(,@BR)  *
       MVC   SRCACT(@CADDR,@BR),SRCBF1(,@BR)  SET ACTIVE BUFFER
       B     SRC020(,@BR)              GO BACK TO NEXT BUFFER
*
*            FILENAME HAS BEEN FOUND.
*
SRC040 ST    SMUDEA,@XR                SAVE ENTRY ADDR
       SBF   SMIND1,SM1FNE             TURN OFF NOT FOUND INDICATOR
SRC050 L     SRCACT(,@BR),@XR          GET CADDR OF ACTIVE BUFFER
       ST    SMUDBA,@XR                SAVE CADDR IN SMALES
       MVC   SMDAAD,##DUHA(@DADDR,@XR) SAVE RDADDR OF ACTIVE DIRCTY
SRC900 LA    *-*,@BR                   RESTORE CALLERS BASE
SRC910 LA    *-*,@XR                   RESTORE INDEX
SRC920 B     *-*                       RETURN
       SPACE
*
*            FILENAME WAS NOT FOUND. SAVE ADDR FOR NEXT ENTRY AND
*            SET THE INDICATOR.
*
SRC060 ST    SMUDEA,@XR                SAVE ADDR FOR NEXT ENTRY
       SBN   SMIND1,SM1FNE             TURN ON NOT FOUND INDICATOR
       B     SRC050(,@BR)              GO TO RETURN
       EJECT
*
*            CONSTANTS AND WORK AREA
*
SRCBF1 DS    CL(@CADDR)                WORK AREA PRIMARY BUFFER ADDR
SRCBF2 DS    CL(@CADDR)                WORK AREA SECONDARY BUFFER ADDR
SRCACT DS    CL(@CADDR)                SAVE AREA FOR ACTIVE BUFFER
SRCBA1 DC    AL2(SMUDB1)               ADDRESS OF USED DIRCTY BLUFFER 1
SRCBA2 DC    AL2(SMUDB2)               ADDRESS OF DIRCTY BUFFER 2
SRCCNT DS    CL1                       WORK AREA FOR ENTRY COUNT
SRCC01 DC    IL2'1'                    CONSTANT TO DECR ENTRY COUNT
SRCDPL EQU   *                         DEFINE LEFT END OF DPL
SRCGET DC    AL1(@DGET)                READ OP CODE
SRCDAD DS    CL(@DADDR)                RELATIVE ADDR OF BLOCK
SRCSCT DC    AL1(##LU)                 SECTOR COUNT FOR BLOCK
SRCBFR DS    CL(@CADDR)                BUFFER ADDR OF BLOCK
***                       END OF SRCHFN                             ***
       MEND
// CEND
// END
*
// READER CONSOLE
