VMS Help  —  MRD Library, mrd_map_element
    mrd_map_element - Map an absolute element address to a zero
    relative one.

    Windows NT         mrd.dll
    UNIX               /usr/lib/libmrd.a
    OpenVMS            MRD$RTL.EXE

    #include <mrd_common.h>
    #include <mrd_message.h>

    int mrd_map_element(
        const robot_info_t *robot_info,
        const int           address,
        char               *result) ;

1  –  Parameters

    o  robot_info - This is the address of a robot_info_t structure
       initialized using mrd_startup(3mrd) or mrd_show(3mrd). This
       data structure contains the element starting address and
       counts for each type of element, which are needed to map an
       absolute element to the correct zero relative address and
       type.

    o  address - This is the absolute element address that is to be
       mapped.

    o  result - This is the address where the zero relative element
       address is to be written. Like other element addresses used
       by the Media Robot Driver Library, it is a character string. A
       character array of MRD_NAME_SIZE bytes should be used.

2  –  Description

    Given a robot_info_t structure and absolute element address,
    this routine figures out the corresponding element type and zero
    relative address. The relative address is formatted into the
    space provided by result and the element type is returned.

    A valid robot_info_t structure can be obtained by using mrd_
    startup(3mrd) or mrd_show(3mrd) to open the robot and fill in the
    robot_info_t structure.

    The SCSI-2 specification allows an absolute address of zero (0)
    to refer to a default transport, when a medium-changer has more
    than one. When handed zero as the absolute address, this routine
    will reflect this convention even if the particular medium-
    changer doesn't.

3  –  Example

    /*
     *   For the specified robot, walk through the remainder of
     *   argument list and have mrd_map_element(3mrd) convert
     *   each address to a relative element address and type.
     *
     *      mrd_map_element robot address [ address... ]
     */
    #ifndef   lint
    static   char   SccsId[] = "@(#)mrd_map_element.c   1.2 3/5/97" ;
    #endif

    #include <stdio.h>
    #include <stdlib.h>
    #include <mrd_common.h>
    #include <mrd_message.h>

    main(int argc, char *argv[])
    {
       char      *robot ;   /* Robot for command */
       int      status ;   /* status from mrd_startup(3mrd) */
       int      address ;   /* Input argument */
       int      type ;      /* element type */
       int      i ;      /* index counter */
       robot_info_t   robot_info ;   /* Set by mrd_startup(3mrd) */
       char      result[MRD_NAME_SIZE+1] ;   /* relative address */
       char      log_info[MRD_MAX_LOG_STRING+1] ;   /* error text */

       /*
        *   Two required arguments, many optional ones.
        */
       if( argc < 3 ) {
          printf("usage: %s robot address [ address... ]\n", argv[0]) ;
          exit(1) ;
       }
       else
          robot = argv[1] ;

       /*
        *   Open the robot.  Must set channel to BAD_CHANNEL so
        *   it will really open the robot.
        */
       robot_info.channel = BAD_CHANNEL ;

       status = mrd_startup(robot, &robot_info, log_info) ;

       if( status != MRD_STATUS_SUCCESS ) {
          printf("Can't open robot %s: %s: %s.\n", robot,
             mrd_strstatus(status),
             log_info[0] ? log_info : "none") ;

          exit(1) ;
       }

       /*
        *   We don't need to keep the robot for the remainder of
        *   the example.
        */
       (void)mrd_shutdown(&robot_info) ;

       /*
        *   For each address in the list, call mrd_map_element(3mrd).
        */
       for(i = 2; i < argc; i++) {
          address = atoi(argv[i]) ;

          type = mrd_map_element(&robot_info, address, result) ;

          if( type == 0 )
             printf("Can't map %d on robot %s.\n", address, robot) ;
          else
             printf("Element %d -> %s %s\n", address,
                mrd_strelement(type), result) ;
       }

       return 0 ;
    }

4  –  Return Values

    Upon successful completion, the mrd_map_element(3mrd) function
    returns the element type, which is one of SLOT, PORT, DRIVE or
    TRANSPORT. On an error it returns zero (0). The two possible
    errors are the robot_info address being NULL and the address not
    one used by this medium-changer.

5  –  Related Functions

    Functions:

    o  mrd_show(3mrd)

    o  mrd_home(3mrd)

    o  mrd_find_cartridge(3mrd)
Close Help