Copyright Digital Equipment Corp. All rights reserved.

Example

   /*
    *   Example to do slot to slot moves.  The command usage is:
    *
    *      mrd_home robot_name type address [ volume-tag ]
    *
    *   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_home.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 ;      /* Status from mrd_home(3mrd) */
      char   *robot ;      /* Robot to use */
      char   *element ;      /* Element address */
      char   *volume_tag = NULL ;   /* Optional volume tag */
      int   type ;         /* Element type */
      char   home[MRD_NAME_SIZE+1] ;   /* space for return address */
      int   home_type ;      /* return element type */
      char   log_info[MRD_MAX_LOG_STRING+1] ;   /* error string */

      /*
       *   Three required arguments; robot, element type and address.
       */
      if( argc < 4 ) {
         printf("usage: %s robot type address [ volume_tag ]\n",
            argv[0]) ;

         exit(1) ;
      }

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

      /*
       *   Optional volume tag.
       */
      if( argc > 4 )
         volume_tag = argv[4] ;

      /*
       *   Do the operation.
       */
      status = mrd_home(robot, volume_tag, element, type,
            home, &home_type, log_info) ;

      if( status != MRD_STATUS_SUCCESS )
         printf("Home failed: %s: %s.\n", mrd_strstatus(status),
            log_info[0] ? log_info : "none") ;
      else
         printf("The cartridge in %s %s was returned to %s %s.\n",
            mrd_strelement(type), element,
            mrd_strelement(home_type), home) ;

      return 0 ;
   }