VMS Help  —  MRD Library, mrd_position, Example
    /*
     *   Example to do slot to slot moves.  The command usage is:
     *
     *      mrd_position robot_name type address [ transport ]
     *
     *   Type can be one of:
     *
     *      slot, port, drive or transport
     *
     *   The optional transport argument can be a transport address
     *   number, the word "default" or an empty string.
     */
    #ifndef   lint
    static   char   SccsId[] = "@(#)mrd_position.c   1.2 3/5/97" ;
    #endif

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

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

    /*
     *   Given a string, resembling one of the element types,
     *   return the SCSI type code for it.
     */
    struct {
       int   code ;
       char   *string ;
    } etypes[] = {
       TRANSPORT,   "transport",
       SLOT,      "slot",
       DRIVE,      "drive",
       PORT,      "port",
    } ;

    convert_type(char *etype)
    {
       register i ;

       /*
        *   For each entry in the array.
        */
       for(i = 0; i < sizeof(etypes)/sizeof(etypes[0]); i++)
          /*
           *   Do a case insensitive comparison, allowing
           *   abbreviations.  Return as soon as a match is
           *   found.  Return -1 if one isn't found.
           */
    #ifdef   vms
          if( strncmp(etypes[i].string, etype, strlen(etype)) == 0 )
    #else
          if( strncasecmp(etypes[i].string, etype, strlen(etype)) == 0 )
    #endif
             return etypes[i].code ;

       return -1 ;
    }

    main(int argc, char *argv[])
    {
       int   status ;
       int   side = 1 ;
       char   *robot ;
       char   *cart = NULL ;
       char   *element ;
       char   *transport ;
       int   type ;
       char   log_info[MRD_MAX_LOG_STRING+1] ;

       if( argc < 4 ) {
          printf("usage: %s robot type address [ transport ]\n",
             argv[0]) ;

          exit(1) ;
       }

       robot   = argv[1] ;
       type    = convert_type(argv[2]) ;
       element = argv[3] ;

       if( argc > 4 ) {
          transport = argv[4] ;

          /*
           *   If "default" or a suitable abbreviation is used
           *   use NULL for the transport name, to indicate that
           *   the SCSI default transport should be used.
           */
    #ifdef   vms
          if( strncmp("default", transport, strlen(transport)) == 0 )
    #else
          if( strncasecmp("default", transport, strlen(transport)) == 0 )
    #endif
             transport = NULL ;
       }
       else
          transport = "0" ;

       status = mrd_position(robot, transport, element, type,
                             side, log_info) ;

       if( status != MRD_STATUS_SUCCESS )
          printf("Position failed: %s: %s.\n", mrd_strstatus(status),
             log_info[0] ? log_info : "none") ;
       else if ( transport == NULL )
          printf("Positioned default Transport to %s #%s\n",
             mrd_strelement(type), element) ;
       else
          printf("Positioned Transport #%s to %s #%s\n",
             mrd_strelement(type), element) ;

       return 0 ;
    }
Close Help