/* * 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 ; }