Example: Using the UCB scan service

The following is an example of how to use the UCB scan service to find the UCB currently associated with a particular VOLSER. The search is limited to direct access UCBs.
 FINDVOL      CSECT
 PROLOG       STM      14,R12,12(R13)
              BALR     R12,0
 PSTART       DS       OH
              USING    PSTART,R12
              ST       R13,MYSAVE+4              SAVE CALLER'S REGISTER 13
              LA       R2,MYSAVE                 GET MY SAVE AREA ADDRESS
              ST       R2,8(R13)                 CHAIN SAVE AREA TO CALLER'S
              LR       R13,R2                    SET UP TO USE LOCAL SAVE AREA
              ......
              ......
 SETUP        DS       OH                        SET UP FOR UCB SCAN SERVICE
              L        R3,CVTPTR                 GET CVT ADDRESS
              USING    CVTMAP,R3                 SET UP ADDRESSABILITY TO CVT
              XC       WORKAREA,WORKAREA         CLEAR WORK AREA
              LA       R1,WORKAREA               GET ADDRESS OF WORK AREA
              ST       R1,PARMWA                 STORE ADDRESS IN THE PARMLIST
              LA       R1,DEVCLASS               GET ADDRESS OF AREA CONTAINING           X
                                                 THE DEVICE CLASS TO BE SEARCHED
              ST       R1,PARMDEVT               STORE ADDRESS IN THE PARMLIST
              MVI      DEVCLASS,UCB3DACC         INDICATE ONLY DIRECT ACCESS UCBS
 *                                               ARE TO BE SEARCHED.
 *                                               NOTE:  IF ALL UCBS WERE TO BE
 *                                                      SEARCHED, DEVCLASS WOULD
 *                                                      BE SET TO X'00'.
              LA       R1,ADDRUCB                GET ADDRESS OF WORD WHERE SCAN           X
                                                 SERVICE WILL STORE THE UCB ADDRESS
              ST       R1,PARMUCB                STORE ADDRESS IN THE PARMLIST
              OI       PARMUCB,X'80'             INDICATE END OF PARMLIST
              USING    UCBOB,R2                  SET UP ADDRESSABILITY TO UCB
 SEARCH       DS       OH
              LA       R1,PARMLIST               PUT PARMLIST ADDRESS IN REGISTER 1
              L        R15,CVTUCBSC              GET SCAN SERVICE ADDRESS
              BALR     R14,R15                   GO TO SCAN SERVICE.
 *                                               INTERFACE:
 *                                                 REGISTER 1 =  ADDRESS OF THE
 *                                                               PARAMETER LIST
 *                                                 REGISTER 13=  ADDRESS OF AN
 *                                                               18-WORD SAVE AREA
 *                                                 REGISTER 14=  RETURN ADDRESS
 *                                                 REGISTER 15=  SCAN SERVICE ENTRY
 *                                                               POINT ADDRESS
              LTR      R15,R15                   HAS A UCB BEEN RETURNED?
              BNZ      NOMATCH                   NO, AT END OF DEVICE CLASS AND           X
                                                 NO MATCH FOUND
              L        R2,ADDRUCB                GET UCB ADDRESS THAT THE SCAN            X
                                                 SERVICE RETURNED

              CLC      UCBVOLI,SRCHVOL           IS THIS THE VOLSER WE'RE LOOKING         X
                                                 FOR?
              BNE      SEARCH                    NO, CONTINUE SCAN OF UCBS.
 *                                               NOTE:  THE WORK AREA MUST NOT BE
 *                                                      CHANGED BETWEEN CALLS TO THE
 *                                                      SCAN SERVICE ROUTINE
 FOUND        DS       OH
              ......
              ......
 NOMATCH      DS       OH
              ......
              ......
 ENDIT        DS       OH
              L        R13,MYSAVE+4              RESTORE CALLER'S REGISTER 13
              LM       R14,R12,12(R13)           RESTORE REMAINDER OF CALLER'S            X
                                                 REGISTERS
              BR       R14
              EJECT
 PARMLIST     DS       3F                        PARMLIST MAPPING
              ORG      PARMLIST
 PARMWA       DS       F                         ADDRESS OF 100-BYTE WORK AREA
 PARMDEVT     DS       F                         ADDRESS OF BYTE CONTAINING               X
                                                 THE DEVICE TYPE TO BE SEARCHED
 PARMUCB      DS       F                         ADDRESS OF WORD TO CONTAIN THE           X
                                                 UCB ADDRESS
              SPACE
 DEVCLASS     DS       CL1                       BYTE CONTAINING DEVICE CLASS TO          X
                                                 BE SEARCHED FOR
 ADDRUCB      DS       F                         WORD IN WHICH UCB SCAN WILL PLACE        X
                                                 THE ADDRESS OF THE UCBS.  ALIGN
              DS       0D                        ON DOUBLE-WORD BOUNDARY.  (THE
 *                                               WORK AREA FOR SCAN SERVICE MUST
 *                                               BE ON A DOUBLE-WORD BOUNDARY.)
 WORKAREA     DS       CL100                     WORK AREA
 MYSAVE       DS       18F
              ......
              ......
              DSECT
              IEFUCBOB                           UCB MACRO ID
              CVT      DSECT=YES
 EJECT
 END          FINDVOL