int main(int argc, char **argv) { int rc = 0; char *fn, *sfn; INITIALIZE_UTILITY("dasdls"); /* Display program info message */ display_version (stderr, "Hercules DASD list program ", FALSE); if (argc < 2) { fprintf(stderr, "Usage: dasdls dasd_image [sf=shadow-file-name]...\n"); exit(2); } /* * If your version of Hercules doesn't have support in its * dasdutil.c for turning off verbose messages, then remove * the following line but you'll have to live with chatty * progress output on stdout. */ set_verbose_util(0); while (*++argv) { fn = *argv; if (*(argv+1) && strlen (*(argv+1)) > 3 && !memcmp(*(argv+1), "sf=", 3)) sfn = *++argv; else sfn = NULL; if (do_ls(fn, sfn)) rc = 1; } return rc; }
int main(int argc, char **argv) { char *pgmname; /* prog name in host format */ char *pgm; /* less any extension (.ext) */ char msgbuf[512]; /* message build work area */ int rc = 0; char *fn, *sfn; char *strtok_str = NULL; /* Set program name */ if ( argc > 0 ) { if ( strlen(argv[0]) == 0 ) { pgmname = strdup( UTILITY_NAME ); } else { char path[MAX_PATH]; #if defined( _MSVC_ ) GetModuleFileName( NULL, path, MAX_PATH ); #else strncpy( path, argv[0], sizeof( path ) ); #endif pgmname = strdup(basename(path)); #if !defined( _MSVC_ ) strncpy( path, argv[0], sizeof(path) ); #endif } } else { pgmname = strdup( UTILITY_NAME ); } pgm = strtok_r( strdup(pgmname), ".", &strtok_str); INITIALIZE_UTILITY( pgmname ); /* Display the program identification message */ MSGBUF( msgbuf, MSG_C( HHC02499, "I", pgm, "DASD list program" ) ); display_version (stderr, msgbuf+10, FALSE); if (argc < 2) { fprintf( stderr, MSG( HHC02463, "I", pgm, "" ) ); exit(2); } /* * If your version of Hercules doesn't have support in its * dasdutil.c for turning off verbose messages, then remove * the following line but you'll have to live with chatty * progress output on stdout. */ set_verbose_util(0); while (*++argv) { fn = *argv; if (*(argv+1) && strlen (*(argv+1)) > 3 && !memcmp(*(argv+1), "sf=", 3)) sfn = *++argv; else sfn = NULL; if (do_ls(fn, sfn)) rc = 1; } return rc; }
int parsecmd(int argc, char **argv, DADSM *dadsm) { int util_verbose = 0; // Hercules dasdutil.c diagnostic level int heads = 15; // # heads per cylinder on device int extnum = 0; // extent number for makext() int abscyl = 0; // absolute CC (default 0) int abshead = 0; // absolute HH (default 0) int abstrk = 1; // absolute tracks (default 1) int lrecl = 80; // default F1 DSCB lrecl // Usage: dasdseq [-debug] [-expert] [-ascii] image [sf=shadow] [attr] filespec argv++; // skip dasdseq command argv[0] if ((*argv) && (strcasecmp(*argv, "-debug") == 0)) { argv++; debug = 1; fprintf(stderr, "Command line DEBUG specified\n"); } if ((*argv) && (strcasecmp(*argv, "-expert") == 0)) { argv++; expert = 1; if (debug) fprintf(stderr, "EXPERT mode\n"); } if ((*argv) && (strcasecmp(*argv, "-ascii") == 0)) { argv++; tran_ascii = 1; if (debug) fprintf(stderr, "ASCII translation enabled\n"); } if (*argv) din = *argv++; // dasd image filename if (debug) fprintf(stderr, "IMAGE %s\n", din); if (*argv && strlen(*argv) > 3 && !memcmp(*argv, "sf=", 3)) { sfn = *argv++; // shadow file parm } else sfn = NULL; if (debug) fprintf(stderr, "SHADOW %s\n", sfn); dadsm->f1buf.ds1recfm = RECFM_FORMAT_F | RECFM_BLOCKED; // recfm FB for fbcopy if ((*argv) && (strcasecmp(*argv, "-recfm") == 0)) { argv++; // skip -recfm if ((*argv) && (strcasecmp(*argv, "fb") == 0)) { argv++; // skip fb if (debug) fprintf(stderr, "RECFM fb\n"); } else { argv++; // skip bad recfm fprintf(stderr, "Unsupported -recfm value %s\n", *argv); } } if ((*argv) && (strcasecmp(*argv, "-lrecl") == 0)) { argv++; // skip -lrecl if (*argv) lrecl = atoi(*argv++); // lrecl value if (debug) fprintf(stderr, "LRECL %d\n", lrecl); } dadsm->f1buf.ds1lrecl[0] = lrecl >> 8; // for fbcopy dadsm->f1buf.ds1lrecl[1] = lrecl - ((lrecl >> 8) << 8); if ((*argv) && (strcasecmp(*argv, "-heads") == 0)) { argv++; // skip -heads if (*argv) heads = atoi(*argv++); // heads value } if (debug) fprintf(stderr, "HEADS %d\n", heads); if ((*argv) && (strcasecmp(*argv, "-abs") == 0)) { absvalid = 1; // CCHH valid while ((*argv) && (strcasecmp(*argv, "-abs") == 0)) { argv++; // skip -abs abscyl = 0; abshead = 0; abstrk = 1; // defaults if (*argv) abscyl = atoi(*argv++); // abs cc if (*argv) abshead = atoi(*argv++); // abs hh if (*argv) abstrk = atoi(*argv++); // abs tracks // Build extent entry for -abs group makext(extnum, heads, (DSXTENT *) &dadsm->f1ext, abscyl, abshead, abstrk); extnum++; dadsm->f1buf.ds1noepv = extnum; // for fbcopy if (debug) fprintf(stderr, "Absolute CC %d HH %d tracks %d\n", abscyl, abshead, abstrk); if (extnum > MAX_EXTENTS) { fprintf(stderr, "Too many extents, abort\n"); exit(3); } } // if (debug) sayext(MAX_EXTENTS, dadsm->f1ext);// show extent table } if (debug) { fprintf(stderr, "parsecmd completed F1 DSCB\n"); data_dump(&dadsm->f1buf, sizeof(FORMAT1_DSCB)); } if (*argv) argdsn = *argv++; // [MVS dataset name/]output filename if (debug) fprintf(stderr, "DSN %s\n", argdsn); if ((*argv) && ( // support deprecated 'ascii' operand (strcasecmp(*argv, "ascii") == 0) || (strcasecmp(*argv, "-ascii") == 0) ) ) { argv++; tran_ascii = 1; if (debug) fprintf(stderr, "ASCII translation enabled\n"); } set_verbose_util(0); // default util verbosity if ((*argv) && (strcasecmp(*argv, "verbose") == 0)) { local_verbose = 1; argv++; if (*argv) local_verbose = atoi(*argv++); if (*argv) copy_verbose = atoi(*argv++); if (*argv) { util_verbose = atoi(*argv++); set_verbose_util(util_verbose); if (debug) fprintf(stderr, "Utility verbose %d\n", util_verbose); } } // If the user specified expert mode without -abs, give help & exit // Additionally, if the user has "extra" parms, show help & exit // No "extraneous parms" message is issued, since some of the code // above forces *argv to be true when it wants help displayed if ((argc < 3) || (*argv) || ((expert) && (!absvalid))) { showhelp(); // show syntax before bailing exit(2); } return 0; } /* parsecmd */
int main(int argc, char **argv) { char *pgm; /* less any extension (.ext) */ int rc = 0; CIFBLK *cif = 0; char *fn; char *sfn; INITIALIZE_UTILITY( UTILITY_NAME, "DASD cat program", &pgm ); if (argc < 2) { // "Usage: dasdcat..." WRMSG( HHC02405, "I", pgm ); return 1; } /* * If your version of Hercules doesn't have support in its * dasdutil.c for turning off verbose messages, then remove * the following line but you'll have to live with chatty * progress output on stdout. */ set_verbose_util(0); while (*++argv) { if (!strcmp(*argv, "-i")) { fn = *++argv; if (*(argv+1) && strlen (*(argv+1)) > 3 && !memcmp(*(argv+1), "sf=", 3)) sfn = *++argv; else sfn = NULL; if (cif) { close_ckd_image(cif); cif = 0; } cif = open_ckd_image(fn, sfn, O_RDONLY | O_BINARY, IMAGE_OPEN_NORMAL); if (!cif) { // "Failed opening %s" FWRMSG( stderr, HHC02403, "E", *argv ); rc = 1; break; } } else if (cif) { if ((rc = do_cat( cif, *argv )) != 0) { rc = 1; break; } } } if (cif) close_ckd_image(cif); return rc; }