VMS Help  —  MRD Library, mrd_show, 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 ;
    }
Close Help