Copyright Digital Equipment Corp. All rights reserved.

Example

   /*
    *   Example to do mrd_show(3mrd) on the first element of each type.
    *   The usage of this command is:
    *
    *      mrd_show robot
    *
    *   This examples show keeping the robot open across multiple
    *   calls to mrd_show(3mrd).  In one happens to close it, the
    *   channel will be reset the BAD_CHANNEL and the next one will
    *   open it again.  On some robot subsystems, opening the robot
    *   is fairly time consuming and if multiple "shows" are needed
    *   the time savings can be signficiant.
    *
    *   The subsystems where this is most noticable are HSJ and HSD
    *   connected robots, which aren't supported on Digital UNIX.
    */
   #ifndef   lint
   static   char   SccsId[] = "@(#)mrd_show.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[])
   {
      robot_info_t   robot_info ;   /* keep the robot open */
      element_info_t   element ;   /* place to put element data */
      int      el ;      /* type index */
      int      status ;   /* status from mrd_show(3mrd) */
      char      *robot ;   /* Robot to use */
      char      *content ;   /* pointer to a content string */
      char      log_info[MRD_MAX_LOG_STRING+1] ;   /* error text */

      /*
       *   Only one argument is used; the robot name.
       */
      if( argc == 1 ) {
         printf("usage: %s robot\n", argv[0]) ;
         exit(1) ;
      }
      else
         robot = argv[1] ;

      /*
       *   The channel number must be set to BAD_CHANNEL before
       *   mrd_startup or mrd_show is called, otherwise it will
       *   assume the robot is already open and not try to open
       *   it again.
       */
      robot_info.channel = BAD_CHANNEL ;

      /*
       *   In this case we want to open the robot once, and then
       *   call mrd_show(3mrd) in turn for each type of element.
       *   If there is an error and it happens to close the robot,
       *   the channel will be reset and the robot opened again on
       *   the next call.
       */
      status = mrd_startup(robot, &robot_info, log_info) ;

      if( status != MRD_STATUS_SUCCESS ) {
         printf("Startup failed: %s (%s).\n", mrd_strstatus(status),
            log_info[0] ? log_info : "none") ;

         exit(1) ;
      }

      /*
       *   We rely on the fact that the element numbers are
       *   are 1 through 4.
       */
      for(el = 1; el <= 4; el++) {
         log_info[0] = '\0' ;

         status = mrd_show(robot, &robot_info, el, "0", 1,
               &element, log_info) ;

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

            continue ;
         }

         if( element.status != MRD_STATUS_SUCCESS ) {
            printf("Can't show %s 0: %s\n", mrd_strelement(el),
               mrd_strstatus(element.status)) ;

            continue ;
         }

         if( element.name[0] )
            content = element.name ;
         else if( element.state & ELEMENT_FULL )
            content = "Full" ;
         else if( element.state & ELEMENT_EXCEPT )
            content = "Exception" ;
         else
            content = "Empty" ;

         printf("%-9s 0: %s\n", mrd_strelement(el), content) ;
      }

      /*
       *   Close it when done.
       */
      (void)mrd_shutdown(&robot_info) ;

      return 0 ;
   }