// DATE 040222
// NOHALT
*
*** RUN MAINT.
*
// LOAD $MAINT,F1
// RUN
// COPY FROM-READER,TO-F1,RETAIN-R,LIBRARY-S,NAME-$GETD
       MACRO
       $GETD
.*
.*     5703-XM1 SEARCH THE NULL DIRECTORY
.*
       TEXT
       TITLE 'SGETDB - GET USER DIRECTORY BLOCK ROUTINE'
***********************************************************************
*  5703-XM1 COPYRIGHT IBM CORP. 1970                                  *
*           REFER TO INSTRUCTIONS ON COPY RIGHT NOTICE, 120-2083      *
*                                                                     *
***********************************************************************
*STATUS                                                               *
*   VERSION 1 MODIFICATION 0                                          *
*                                                                     *
*FUNCTION                                                             *
*   * SGETDB PROVIDES TWO PRIMARY FUNCTIONS. IT WILL SEARCH THE       *
*     PASSWORD DIRECTORY FOR A SPECIFIED PASSWORD ONLY, OR IF         *
*     INDICATED WILL GO AND READ IN THE FIRST USER BLOCK ASSOCIATED   *
*     WITH THAT PASSWORD.                                             *
*   * IF THE PASSWORD SEARCH ONLY IS REQUESTED A SWITCH IS SET TO     *
*     INHIBIT READING THE DIRECTORY ON SUBSEQUENT ENTRIES.            *
*   * THE ERROR CODE FOR PASSWORD NOT FOUND IS ALWAYS SET IN $CAERR.  *
*     IF THE PASSWORD IS OR IS NOT FOUND THE INDICATOR IN SMIND1 IS   *
*     SET APPROPRIATELY.                                              *
*                                                                     *
*ENTRY POINTS                                                         *
*   SGETDB - ENTRY TO SEARCH PASSWORD DIRECTORY AND GET               *
*            ASSOCIATED USER DIRECTORY. THE CALLING SEQUENCE IS       *
*            AS FOLLOWS:                                              *
*              B     SGETDB                                           *
*                                                                     *
*INPUT                                                                *
*   * THE BASE ADDRESS OF THE LIBRARY MUST BE IN SM1FDA IN TSMLES.    *
*   * THE PASSWORD MUST BE IN SMPSWD.                                 *
*   * IF THE PASSWORD DIRECTORY IS TO BE SEARCHED ONLY, THEN SM1PDS   *
*     IN SMIND1 MUST BE SET TO 1. IF THE FIRST USER DIRECTORY BLOCK   *
*     ASSOCIATED WITH THE SPECIFIED PASSWORD IS TO BE READ IN THEN    *
*     THEN SM1PDS MUST BE SET TO 0.                                   *
*                                                                     *
*OUTPUT                                                               *
*   * IF THE SPECIFIED PASSWORD IS FOUND THE ADDRESS OF THE LEFT BYTE *
*     OF THE ENTRY IS PLACED IN SMPEAD, SM1PNF IN SMIND1 IS SET TO 0. *
*     AND THE USER DIRECTORY RDADDR IS PLACED IN SMFUDA.              *
*   * IF THE USER DIRECTORY WAS REQUESTED, THE READ OPERATION IS      *
*     STARTED BUT NO WAIT IS PERFORMED. THE USER DIRECTORIES OVERLAY  *
*     THE PASSWORD DIRECTORIES IN CORE.                               *
*   * IF THE SPECIFIED PASSWORD WAS NOT FOUND SM1PNF, IS SET TO 1 AND *
*     THE ADDRESS FOR THE NEXT AVAILABLE ENTRY IS IN SMPEAD.          *
*                                                                     *
*EXTERNAL REFERENCES                                                  *
*         $CAERR - LOCATION FOR SYSTEM ERROR CODE                     *
*         SMIND1 - DATA MANAGEMENT INDICATOR                          *
*         DL2RAD - LOCATION OF FILE PHYSICAL BASE ADDRESS             *
*         SMBFDA - LOCATION OF LIBRARY BASE ADDRESS                   *
*         DL2ICS - ENTRY TO DISK I/O ROUTINE                          *
*         $DISKN - ENTRY TO SYSTEM DISK IOCS                          *
*         $WAITF - LOCATION OF COMMON I/O WAIT FUNCTION               *
*         SMPSWD - LOCATION PASSWORD ARGUMENT                         *
*         SMPEAD - LOCATION OF PASSWORD ENTRY ADDRESS                 *
*         SMFUDA - LOCATION OF USER DIRECTORY RDADDR                  *
*                                                                     *
*EXITS, NORMAL                                                        *
*   NORMAL EXIT IS TO THE FIRST INSTRUCTION FOLLOWING THE BRANCH      *
*   TO SGETDB                                                         *
*                                                                     *
*EXITS, ERROR                                                         *
*   NONE                                                              *
*                                                                     *
*TABLES/WORKAREAS                                                     *
*   NONE                                                              *
*                                                                     *
*ATTRIBUTES                                                           *
*   RELOCATABLE                                                       *
*   REUSABLE                                                          *
*                                                                     *
*CHARACTER CODE DEPENDENCY                                            *
*   THE OPERATION OF THIS MODULE DOES NOT DEPEND UPON A PARTICULAR    *
*   INTERNAL REPRESENTATION OF THE EXTERNAL CHARACTER SET.            *
*                                                                     *
*NOTES                                                                *
*   ERROR PROCEDURES                                                  *
*      THE ERROR CODE FOR PASSWORD NOT FOUND IS ALWAYS SET BUT SGETDB *
*      DETECTS NO PARTICULAR ERROR. THE CONDITION AS TO IF THE        *
*      PASSWORD WAS OR WAS NOT FOUND IS INDICATED HOWEVER.            *
*                                                                     *
*   REGISTER USAGE                                                    *
*      @BR AND @XR1 ARS SAVED AND RESTORED. @BR IS USED AS A BASE     *
*      REGISTER AND @XR IS USED AS AN INDEX TO THE PASSWORD DIRCTY.   *
*      @ARR IS USED TO PROVIDE THE RETURN ADDRESS.                    *
*                                                                     *
*   SAVED/RESTORED AREAS                                              *
*      NONE                                                           *
*                                                                     *
*   MODIFICATION CONSIDERATIONS                                       *
*      IN USING SGETDB THE USER MUST TAKE INTO CONSIDERATION THAT     *
*      SGETDB DOES NOT WAIT FOR THE USER DIRECTORY BLOCK TO BE IN     *
*      CORE BEFORE RETURNING.                                         *
*                                                                     *
*   REQUIRED MODULES                                                  *
*      @SYSEQ - SYSTEM SOFTWARE EQUATES                               *
*      @FXDEQ - NUCLEUS EQUATES                                       *
*      @DIREQ - LIBRARY DIRECTORY EQUATES                             *
*      DL2ICS - DISK IOCS                                             *
*      TSMLES - DATA MANAGEMENT COMMUNICATIONS AREA                   *
*                                                                     *
*   OTHER                                                             *
*      NONE                                                           *
***********************************************************************
*SGETDB ENTER BASE,SGETDB,EXIT,SGE90,@BR,@XR,@ARR
       USING SGETDB,@BR                BASE ADDRESS SPECIFICATION
SGETDB EQU   *                         MODULE ENTRY POINT
       ST    SGE900+@OP1,@BR           SAVE @BR
       LA    SGETDB,@BR                LOAD BASE REGISTER
       ST    SGE901+@OP1(,@BR),@XR     SAVE @XR
       ST    SGE902+@OP1(,@BR),@ARR    SAVE RETURN ADDRESS
*** END OF EXPANSION ***
       SPACE
       MVI   $CAERR,@@E210             PASSWORD NOT ON DISK
       SBF   SMIND1,SM1PNF             INITIALIZE INDICATOR TO FOUND
SGE050 JC    SGE055,@NOP               SET SWITCH FOR 2ND ENTRY
       MVI   SGE050+@Q(,@BR),@UCB      TURN SWITCH ON FOR NEXT ENTRY
       MVC   DL2RAD,SMBFDA             STUFF IN THE BASE ADDR
       B     DL2ICS                    CALL DISK I/O ROUTINE
       DC    AL2(SGEDPL)               POINTER TO PARAMETER LIST
       B     $DISKN                    WAIT FOR DIRCTY TO LOAD
       DC    AL2($WAITF)               WAIT FOR DIRCTY
       SPACE
SGE055 L     SGEDPL+@DBFR2(,@BR),@XR   PASSWORD BUFFER CADDR
       MVC   SGECNT(1,@BR),##DPHC(,@XR)  ENTRY COUNT TO WORK
       LA    ##DPE1(,@XR),@XR          BUMP TO FIRST PASSWORD
*
SGE060 CLC   SMPSWD(##LPEN),##DPEN(,@XR)  LOOK AT PSWD ENTRY
       JE    SGE070                    FOUND THE PSWD
       LA    ##LPE(,@XR),@XR           BUMP TO LOOK AT NEXT ENTRY
       SLC   SGECNT(1,@BR),SGEC01(,@BR)  DECR ENTRY COUNT
       BNE   SGE060(,@BR)              BACK FOR LOOK AT ENTRY
       SBN   SMIND1,SM1PNF             NOT FOUND INDICATOR
*
*            THE PASSWORD OR THE END OF THE DIRCTY HAS BEEN FOUND,
*            SAVE THE POINTERS.
*
SGE070 ST    SMPEAD,@XR                SAVE ENTRY ADDRESS
       MVC   SMFUDA(@DADDR),##DPEA(,@XR)  POSSIBLE USER DADDR OF BLK
       TBN   SMIND1,SM1PDS             TEST SEARCH BIT ONLY ON
       JT    SGE900                    SEARCH ONLY SO EXIT
       CLI   SGECNT(,@BR),@ZERO        TEST COUNT IF ENTRY FOUND
       JE    SGE900                    JUMP IF NOT FOUND
SGE080 MVC   SGEDPL+@DSAD(@DADDR,@BR),##DPEA(,@XR)  BLK ADDR TO DPL
       B     DL2ICS                    CALL TO READ USER DIRCTY
       DC    AL2(SGEDPL)               POINTER TO PARAMETER LIST
*
       MVI   SGE050+@Q(,@BR),@NOP      TURN OFF SKIP INSTR
       MVC   SGEDPL+@DSAD(@DADDR,@BR),SGERAD(,@BR)  RESTORE DSAD PSWD
*
*SGE900 EXIT @BR,@XR,,RETURN
SGE900 LA    *-*,@BR                   RESTORE OBR
SGE901 LA    *-*,@XR                   RESTORE OXR
SGE902 B     *-*                       RETURN TO CALLING PROGRAM
*** END OF EXPANSION ***
*
*            DPL TO READ IN THE PASSWORD DIRCTY
*
*SGEDPL $DPL  FUNC-@DGET,DADDR-##RP,CNT-##LP,CADDR-SMPDB1
SGEDPL EQU   *                         DISK PARAMETER
       DC    AL1(@DGET)                REQUESTED FUNCTION
       DC    AL2(##RP)                 DISK ADDRESS
       DC    AL1(##LP)                 SECTOR COUNT
       DC    AL2(SMPDB1)               BUFFER ADDRESS
*** END OF EXPANSION ***
       SPACE
SGERAD DC    AL2(##RP)                 RELATIVE DADDR OF DIRCTY
SGECNT DS    CL1                       SAVE AREA FOR ENTRY COUNT
SGEC01 DC    IL2'1'                    CONSTANT 1 FOR ADDR MODIFCATION
       SPACE
SGEEND EQU   *                         END ADDR OF SGETDB
***                       END OF SGETDB                             ***
       MEND
// CEND
// END
*
// READER CONSOLE
