// DATE 280222
// NOHALT
*
*** RUN MAINT.
*
// LOAD $MAINT,F1
// RUN
// COPY FROM-READER,TO-F1,RETAIN-R,LIBRARY-S,NAME-$VOL2
       MACRO
       $VOL2
.*
.*     5703-XM1 SEARCH FOR VOLUME ID
.*
       TEXT
       TITLE 'SVOL2D - RESOLVE SPECIFIED VOLUME-ID'
***********************************************************************
* 5703-XM1  COPYRIGHT IBM CORP. 1970                                  *
*           REFER TO INSTRUCTIONS ON COPYRIGHT NOTICE  120-2083       *
*                                                                     *
***********************************************************************
*STATUS                                                               *
*   VERSION 1 MODIFICATION 0                                          *
*                                                                     *
*FUNCTION                                                             *
*   THE FUNCTION OF SVOLID IS TO SEARCH THE CORE RESIDENT TABLE OF    *
*   VOLUME ID'S ON THE SYSTEM FOR A SPECIFIED VOLUME ID. IF THE       *
*   VOLUME IS NOT FOUND, AN ERROR CODE WILL BE PUT IN $CAERR AND AN   *
*   EXIT TO $VOERR IN THE CALLING ROUTINE WILL BE TAKEN. IF MORE      *
*   THAN ONE VOLUME WITH THE SAME VOL-ID IS FOUND ON THE SYSTEM, THE  *
*   USER OF THE SYSTEM IS REQUESTED TO INDICATE WHICH DRIVE AND DISK  *
*   IS TO BE USED. IF THE USER IS UNABLE TO RESOLVE THE CONFLICT,     *
*   THE COMMAND IS REJECTED. IF THE INPUT SOURCE IS NOT THE KEYBOARD, *
*   THE COMMAND IS REJECTED. OTHERWISE THE FILE LIBRARY ADDRESS OF    *
*   THE RESOLVED VOLUME IS PLACED IN SMBFDA IN THE TSMLES COMMUNICA-  *
*   TIONS REGION, AND A NORMAL RETURN IS TAKEN.                       *
*                                                                     *
*ENTRY POINTS                                                         *
*   $VOLID - THE FIRST EXECUTABLE INSTRUCTION. IT IS ASSUMED THAT     *
*   SMVOID IN TSMLES HAS BEEN PRIMER. ALSO, IF THE VM OPTION OF       *
*   SVOLID HAS BEEN ASSEMBLED FOR EXECUTION TIME USAGE.               *
*   THE FIELDS SVOIOF AND SVODSK SHOULD BE PRIMED WITH THE GET/PUT    *
*   GET/PUT FILENAME AND DISK FILENAME, RESPETIVELY.                  *
*                                                                     *
*INPUT                                                                *
*   INPUT TO SVOLID IS THE SPECIFIED VOL-ID IN THE TSMLES REGION -    *
*   SMVOID.                                                           *
*                                                                     *
*OUTPUT                                                               *
*   OUTPUT FROM SVOLID IS THE FILE LIBRARY ADDRESS OF THE RESOLVED    *
*   SPECIFIED VOL-ID - PLACED IN SMBFDA.                              *
*                                                                     *
*EXTERNAL REFERENCES                                                  *
*       SVOBUF - TEMPORARY SECTOR BUFFER SAVE AREA - USER SUPPLIED    *
*       SVOERR - ERROR EXIT ADDR FROM SVOLID                          *
*       TSMLES - DATA MANAGEMENT COMMUNICATIONS REGION                *
*       $$ILHD - FIRST BYTE OF INPUT LINE HEADER                      *
*       $$XIND - EXECUTION INDR PASS AREA                             *
*       $$INND - LAST CHARACTER OF INPUT LINE BUFFER                  *
*       $$INLN - FIRST CHARACTER OF INPUT LINE BUFFER                 *
*       $$PRES - ENTRY TO ENABLE KEYBOARD                             *
*       $VOLID - ADDR IN SYSTEM NUCLEUS - VOLUME ID TABLE             *
*       $CAERR - ADDR IN SYSTEM NUCLEUS - ERROR CODE SAVE AREA        *
*       $KEYCD - INDR BYTE CONTAINING KEYBOARD INDR IN SYSTEM NUCLEUS *
*       $CARDI - MASK IN SKEYCD - CARD INPUT MODE                     *
*       $SPRNT - ADDR IN SYSTEM NUCLEUS-SYSTEM PRINTER IOCR INTERFACE *
*       $CIMSK - ADDR IN SYSTEM NUCLEUS-IR MASK ROUTINE INDR          *
*       $WAITF - ADDR IN SYSTEM NUCLEUS-DISK WAITS DPL                *
*       $KYBSY - MASK IN $KEYCD - KEYBOARD BUSY                       *
*       $TRUNK - MASK IN $KEYCD - TRUNCATED LINE INDR                 *
*       $UNHSK - ADDR IN SYSTEM NUCLEUS-ENTRY TO UNMASK IR            *
*                                                                     *
*EXITS, NORMAL                                                        *
*   NEXT SEQUENTIAL INSTRUCTION IN CALL ROUTINE.                      *
*                                                                     *
*EXITS, ERROR                                                         *
*   $VOERR - ERROR EXIT ROUTINE IN CALL ROUTINE.                      *
*   (NOTE: ERROR PROCEDURES).                                         *
*                                                                     *
*TABLES/WORK AREAS                                                    *
*   CONSTANTS, PPL'S. AND WORK AREAS WHICH ARE ADDRESSED BY THE BASE  *
*   REGISTER (@BR) ARE LOCATED TO BE REFERENCED AS SUCH. THOSE        *
*   WHICH ARE NOT ADDRESSED BY A BASE REGISTER ARE LOCATED AT THE     *
*   END OF THE MODULE.                                                *
*                                                                     *
*ATTRIBUTES                                                           *
*   RELOCATABLE, CONDITIONALLY REUSABLE (SEE OTHER).                  *
*                                                                     *
*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. THE FOLLOWING ARE THE   *
*   SPECIAL CONSIDERATIONS FOR THIS MODULE:                           *
*   * CHARACTER CONSTANT FOR DECIMAL L(ONE) — INTERNAL EQUATE         *
*   * CHARACTER CONSTANT FOR DECIMAL 2(TWO) — INTERNAL EQUATE         *
*   * @BLANK - PART OF @SYSEQ - FOR SYNTAX CHECK                      *
*   * @CHARR - PART OF @SYSEQ - FOR SYNTAX CHECK                      *
*   * @CHARF - PART OF @SYSEQ - FOR SYNTAX CHECK                      *
*   * @EOS   - PART OF @SYSEQ - FOR SYNTAX CHECK                      *
*                                                                     *
*NOTES                                                                *
*   ERROR PROCEDURES                                                  *
*      THE FOLLOWING CONDITIONS WILL CAUSE AN ERROR CODE TO BE PLACED *
*      IN SCAERR AND AN EXIT BRANCH TO BE TAKEN TO SVOERR:            *
*      * THE SPECIFIED VOLUME ID IS NOT ON THE SYSTEM.                *
*      * DUPLICATE VOLUME ID'S ARE RTLADO. AND INPUT IS NOT FROM      *
*        THE KEYBOARD.                                                *
*      * THE SPECIFIED PHYSICAL ID FROM THE KEYBOARD DOES NOT CONTAIN *
*        ONE OF THE MULTIPLY DEFINED VOLUME ID'S.                     *
*      * THE SPECIFIEC OR RESOLVED VOLUME DOES NOT CONTAIN A LIBRARY  *
*        AREA.                                                        *
*                                                                     *
*   REGISTER USAGE                                                    *
*      INDEX REGISTER 1 (@BR) IS USED PRIMARILY AS A BASE REGISTER    *
*      AND SECONDLY AS AN INDEX IN THE VOL—ID TABLE.                  *
*      INDEX REGISTER 2 (@XR) IS USED PRIMARILY AS AN INDEX REGISTER  *
*      IN THE VOL-ID TABLE AND SECONDLY AS AN INDEX TO SYNTAX CHECK   *
*      KEYBOARD INPUT WHEN VOLUMES ARE MULTIPLY DEFINED.              *
*                                                                     *
*   SAVED/RESTORED AREAS                                              *
*      NOBE                                                           *
*                                                                     *
*   MODIFICATION CONSIDERATIONS                                       *
*      VOLID'S SEARCH OF THE VOL-ID TABLE (SVOLID) IS TOTALLY         *
*      DEPENDENT ON THE FORMAT OF THE TABLE AS IT EXISTS; ESPECIALLY  *
*      THE NUMBER OF ENTRIES WHICH NOW EXIST (IE. FOUR).              *
*                                                                     *
*   REQUIRED MODULES                                                  *
*        @CANEQ - COMMON CORE LOCATIONS OUTSIDE SYSTEM NUCLEUS        *
*        @DIREQ - SYSTEM LIBRARY DIRECTORY EQUATES                    *
*        @ERMEQ - ERROR MESSAGE EQUATES                               *
*        @FXDEQ - COMMON CORE LOCATIONS WITHIN THE SYSTEM NUCLEUS     *
*        @SYSEQ - COMMON SYSTEM SOFTWARE EQUATES                      *
*        TSMLES - DATA MANAGEMENT COMMUNICATION REGIONS               *
*                                                                     *
*   OTHER                                                             *
*      SVOLID MAY BE RE-USED IF THE CALL ROUTINE WILL PRIME 'SVOCT1'  *
*      WITH A '4', AND 'SVOCT2' WITH A '0' BEFORE EACH RE-ENTRY.      *
*      BOTH OF THESE FIELDS ARE 1 BYTE LONG AND CONTIGUOUS, RESPEC-   *
*      TIVELY. (IE. CAN BE INITIALIZED WITH 'MVC' OF X'0400').        *
*                                                                     *
*      THIS VERSION OF VOLID DEVIATES FROM $VOLID.                    *
*      MESSAGES @@M048 AND @@M049 ARE ADDED.                          *
***********************************************************************
       EJECT
***********************************************************************
*                                                                     *
*      SVOLID MODULE EQUATES                                          *
*                                                                     *
***********************************************************************
*
SVOLN1 EQU   1                         LENGTH CODE OF ONE
*
SVO001 EQU   X'F1'                     CONSTANT OF 1 FOR COMPARE
SVO002 EQU   X'F2'                     CONSTANT OF 2 FOR COMPARE
*
SVOINP EQU   $$XIND-$$ILHD+@B1         LENGTH INPUT BUFFER
SVOEND EQU   $$XIND-$$ILHD             DISP TO END OF SVOBUF
       SPACE
***********************************************************************
*                                                                     *
*      INITIALIZATION OF MODULE                                       *
*                                                                     *
***********************************************************************
*
SVOLID EQU   *                         ENTRY POINT
       USING SVOBSE,@BR                BASE ADDRESS
       ST    SVO274+@OP1,@BR           SAVE BASE CONTENTS
       LA    SVOBSE,@BR                LOAD BASE ADDRESS
       ST    SVO276+@OP1(,@BR),@XR     SAVE INDEX REGISTER
       ST    SVO290+@OP1(,@BR),@ARR    SAVE RETURN ADDR
       SPACE
***********************************************************************
*                                                                     *
*      SEARCH VOL-ID TABLE                                            *
*                                                                     *
***********************************************************************
*
       LA    $VOLID+@VOLID-@B1,@XR     LOAD XR AS POINTER INTO NUCLEUS
SVOBSE EQU   *
SVO100 CLC   @ZERO(@VOLID,@XR),SMVOID  IS THIS THE VOL-ID ?
       BNE   SVO200(,@BR)              NO, CHECK NEXT ENTRY
       MVC   SMBFDA(@DADDR),@DADDR(,@XR)  SAVE DADDR-DUPLICATE CHECK
       ALC   SVOCT2(SVOLN1,@BR),SVOONE(,@BR)  INCREMENT COUNT
SVO200 LA    @VOLID+@DADDR(,@XR),@XR   INCREMENT XR
       SLC   SVOCT1(SVOLN1,@BR),SVOONE(,@BR)  IS THE LAST ENTRY ?
       BNZ   SVO100(,@BR)              NO, CHECK NEXT ONE
*
***********************************************************************
       EJECT
***********************************************************************
*                                                                     *
*      PROCESS ENTRY IF FOUND                                         *
*                                                                     *
***********************************************************************
*
       CLI   SVOCT2(,@BR),@D1          WAS AN ID FOUND ?
       MVI   $CAERR,@@E217             ERROR - NO ID FOUND
       BL    SVO270(,@BR)              NO, ERROR EXIT
       BH    SVO300(,@BR)              MORE THAN 1 ID
       SPACE
***********************************************************************
*                                                                     *
*      CHECK DISK ADDR OF LIBRARY                                     *
*                                                                     *
***********************************************************************
*
SVO260 CLI   SMBFDA-@B1,@ZERO          IS THERE A LIBRARY ?
       JNE   SVO274                    YES, RETURN
       MVI   $CAERR,@@E351             ERROR - NO LIBRARY
SVO270 MVI   SVO280+@Q,@UCB            SET ERROR EXIT
       SPACE
***********************************************************************
*                                                                     *
*      END OF MODULE PROCESSING                                       *
*                                                                     *
***********************************************************************
*
SVO274 LA    *-*,@BR                   RESTORE BASE REGISTER
SVO276 LA    *-*,@XR                   RESTORE INDEX REGISTER
*
SVO280 BC    SVOERR,@NOP               ERROR EXIT
SVO290 B     *-*                       RETURN
*
***********************************************************************
       EJECT
***********************************************************************
*                                                                     *
*      DATA CONSTANTS, BUFFERS, WORK AREAS AND SAVE AREAS             *
*                                                                     *
***********************************************************************
*
SVOCT1 DS    CL1                       COUNTER - NUMBER OF DISKS - 4
       ORG   SVOCT1                    RESET FOR INITIALIZATION
       DC    XL1'04'                   INITIALIZED TO 4
*
SVOCT2 DS    CL1                       COUNTER - DUPLICATE DISK LABELS
       ORG   SVOCT2                    RESET FOR INITIALIZATION
       DC    XL1'00'                   INITIALIZED TO 0
SVOONE DC    XL1'01'                   INITIALIZED TO 1 FOR COUNTER
       SPACE
***********************************************************************
*                                                                     *
*      PROCESS MULTIPLE ENTRIES                                       *
*                                                                     *
***********************************************************************
*
SVO300 TBN   $KEYCD,$CARDI             IS KEYBOARD INPUT MODE ?
SVO310 MVI   $CAERR,@@E212             KEYBOARD NOT INPUT MODE
SVO315 BT    SVO270(,@BR)              NO ERROR EXIT
       EJECT
***********************************************************************
*                                                                     *
*      ASK USER FOR DRIVE CLARIFICATION                               *
*                                                                     *
***********************************************************************
*
SVO320 EQU   *                         PRINT MESSAGES
       B     $SPRNT                    PRINT HEADING
       DC    AL2(@@M049)               PPL ADDR
       B     $SPRNT                    PRINT MESSAGE
       DC    AL2(SVOPPM)               PPL ADDRESS
*
       B     $SPRNT                    PRINT HEADER
       DC    AL2(@@M048)               ADDR PPL
       B     $SPRNT                    PRINT G/P FILENAME
       DC    AL2(SVOPPL)               ADDR PPL
*
       B     $SPRNT                    PRINT MESSAGE
       DC    AL2(@@M300)               ERROR MESSAGE PPL
*
       MVC   SVO335+@VQ(@B1),$CIMSK    OBTAIN CURRENT MASK STATUS
       B     $SPRNT                    WAIT FOR PRINT
       DC    AL2($WAITF)               ADDR OF PPL
       SPACE
***********************************************************************
*                                                                     *
*      MODIFY INPUT BUFFER FOR ACCEPTANCE OF INPUT ANSWER             *
*                                                                     *
***********************************************************************
*
SVO330 EQU   *                         ENABLE INPUT ROUTINE
*
SVO333 MVI   $$INND,@BLANK             CLEAR INPUT BUFFER
       MVC   $$INND-@B1($$INND-$$INLN),$$INND
*
SVO335 BC    $UNMSK,@VQ                BRANCH IF UNMASKED
       B     $$PRES                    GET USER'S RESRONSE
SVO350 TBN   $KEYCD,$KYBSY             IS KEYBOARD BUSY ?
       BT    SVO350                    YES, WAIT
       B     $SPRNT                    WAIT FOR PRINTER RETURN
       DC    AL2($WAITF)               ADDR OF PPL
       EJECT
***********************************************************************
*                                                                     *
*      VERIFY VOL-ID ON DRIVE SPECIFIED                               *
*                                                                     *
***********************************************************************
*
       LA    $$INLN-@B1,@XR            ADDR FIRST RESPONSE BYTE
       LA    $VOLID+@VOLID-@B1,@BR     REFERENCE POINT FOR THE VOLID
*
SVO360 LA    @B1(,@XR),@XR             INDEX BY BLANK
       CLI   @ZERO(,@XR),@BLANK        IS IT A BLANK ?
       BE    SVO360                    YES, CHECK NEXT BYTE
*
       CLI   @B1(,@XR),SVO001          IS IT DRIVE 1 ?
       JE    SVO400                    YES, CHECK DISK TYPE
*
       CLI   @B1(,@XR),SVO002          IS IT DRIVE 2 ?
       BNE   SVO320                    NO, ASK USER AGAIN
       LA    2*@VOLID+2*@DADDR(,@BR),@BR  SET INDEX FOR DRIVE 2
SVO400 CLI   @ZERO(,@XR),@CHARR        IS IT REMOVABLE ?
       JE    SVO440
*
       CLI   @ZERO(,@XR),@CHARF        IS IT FIXED ?
       BNE   SVO320                    ASK AGAIN
       LA    @VOLID+@DADDR(,@BR),@BR   SET INDEX FOR FIXED
SVO440 LA    @B1(,@XR),@XR             INCREMENT TO NEXT BYTE
SVO445 LA    @B1(,@XR),@XR             INCREMENT TO NEXT BYTE
       CLI   @ZERO(,@XR),@BLANK        IS IT A BLANK ?
       BE    SVO445                    YES, CHECK NEXT BYTE
*
       CLI   @ZERO(,@XR),@EOS          AT EOS ?
       BNE   SVO320                    ASK AGAIN
*
SVO450 CLC   @ZERO(@VOLID,@BR),SMVOID  IS IT THE VOLID ?
       MVI   $CAERR,@@E216             VOLUME NOT ON THAT DRIVE
       BNE   SVO270                    NO, ERROR EXIT
*
***********************************************************************
       EJECT
***********************************************************************
*                                                                     *
*      SAVE VOL-ID LIBRARY ADDR                                       *
*                                                                     *
***********************************************************************
*
       MVC   SMBFDA(@DADDR),@DADDR(,@BR)  SAVE LIBRARY ADDR
       SBF   $KEYCD,$TRUNK             SET OFF RM EXCEEDED INDR
       B     SVO260                    NORMAL EXIT
       SPACE
***********************************************************************
*                                                                     *
*      MULTIPLE VOLID MESSAGE AND PRINT PPL                           *
*                                                                     *
***********************************************************************
*
SVOPPM DC    AL1(@PRETR)               PPL FOR MESSAGE
       DC    AL1(##LUEN)               MESSAGE LENGTH
       DC    AL2(SVOMMS)               MESSAGE ADDR
SVOMMS EQU   *                         MESSAGE
* PRIMED BY CALL ROUTINE FOR PRINT OF DISK FILENAME
SVODSK DC    CL8'        '
SVOPPL DC    AL1(@PRETR)               PPL FOR MESSAGE
       DC    AL1(##LUEN)               MESSAGE LENGTH
       DC    AL2(SVOMES)               MESSAGE ADOR
SVOMES EQU   *                         MESSAGE ADOR
* PRIMED BY CALL ROUTINE FOR PRINT OF I/O FILENAME
SVOIOF DC    CL8'        '
*
***********************************************************************
***                       END OF SVOLID                             ***
       MEND
// CEND
// END
*
// READER CONSOLE
