Copyright Digital Equipment Corp. All rights reserved.

Example

   /*
    *   This is an example of using mrd_request_sense(3mrd)
    *   to see what state a medium changer is in.  The MRD
    *   implementation of Request Sense only collects the
    *   Sense Key, Additional Sense Code and Additional Sense
    *   Code Qualifier.
    *
    *   Usage:
    *
    *      mrd_request_sense robot [ more-robots... ]
    */
   #ifndef   lint
   static  char  SccsId[] = "@(#)mrd_request_sense.c   1.1 4/16/97" ;
   #endif

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

   char   *device_sense = "Sense data for %s: %s (%d,0x%x,0x%x).\n" ;
   char   *sense_failed = "Request Sense failed on %s: %s.\n" ;

   main(int argc, char *argv[])
   {
      int      rc ;      /* counter */
      int      status ;   /* return status */
      char      *robot ;   /* Robot to open */
      robot_info_t   robot_info ;   /* Robot data */
      dev_status_t   dev_status ;   /* Device status */
      char      log_info[MRD_MAX_LOG_STRING+1] ;

      /*
       *   Check that there are enough arguments.
       */
      if( argc < 2 ) {
         printf("usage: %s robot [ robot... ]\n", argv[0]) ;
         exit(1) ;
      }

      /*
       *   Initialize the channel field of the robot_info, so
       *   mrd_startup(3mrd) will actually open the robot.
       */
      robot_info.channel = BAD_CHANNEL ;

      for(rc = 1; rc < argc; rc++) {
         /*
          *   The robot for this command.
          */
         robot = argv[rc] ;

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

         if( status != MRD_STATUS_SUCCESS ) {
            printf("Startup failed on %s: %s.\n", robot,
               mrd_strstatus(status)) ;

            continue ;
         }

         memset((void *)&dev_status, 0, sizeof(dev_status)) ;

         /*
          *   mrd_request_sense(3mrd) will never return
          *   MRD_STATUS_SUCCESS.  If no Request Sense data
          *   is available, it will return MRD_STATUS_NO_SENSE.
          */
         status = mrd_request_sense(&robot_info, &dev_status,
               MRD_CHECK_SENSE) ;

         /*
          *   Print the Key/ASC/ASCQ data for device errors.
          */
         if( dev_status.valid )
            printf(device_sense, robot, mrd_strstatus(status),
               dev_status.key, dev_status.asc,
               dev_status.ascq) ;
         /*
          *   Just print the MRD error.
          */
         else
            printf(sense_failed, robot, mrd_strstatus(status)) ;

         (void)mrd_shutdown(&robot_info) ;
      }

      return 0 ;
   }