home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / prof_c / 10dump / dump.c next >
Encoding:
C/C++ Source or Header  |  1988-08-11  |  1.8 KB  |  83 lines

  1. /*
  2.  *    dump -- display contents of non-ASCII files in hex byte and
  3.  *    ASCII character forms (like the DOS debug dump option)
  4.  */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <fcntl.h>
  9. #include <sys\types.h>
  10. #include <sys\stat.h>
  11. #include <io.h>
  12. #include <local\std.h>
  13.  
  14. #define STDINPUT    0
  15. #define LINEWIDTH    80
  16.  
  17. main(argc,argv)
  18. int argc;
  19. char *argv[];
  20. {
  21.     int ch;
  22.     BOOLEAN    sflag = FALSE,
  23.         vflag = FALSE,
  24.         errflag = FALSE;
  25.     int fd;
  26.     static char pgm[MAXNAME + 1] = { "dump" };
  27.  
  28.     extern int getopt(int, char **, char *);
  29.     extern char *optarg;
  30.     extern int optind, opterr;
  31.     extern void getpname(char *, char *);
  32.     extern int hexdump(int, BOOLEAN);
  33.     extern void fatal(char *, char *, int);
  34.  
  35.     if (_osmajor >= 3)
  36.         getpname(*argv, pgm);
  37.  
  38.     while ((ch = getopt(argc, argv, "sv")) != EOF)
  39.         switch (ch) {
  40.         case 's': /* strip -- convert all non-ASCII to '.' */
  41.             sflag = TRUE;
  42.             break;
  43.         case 'v': /* verbose -- tell user what's happening */
  44.             vflag = TRUE;
  45.             break;
  46.         case '?': /* bad option */
  47.             errflag = TRUE;
  48.             break;
  49.         }
  50.  
  51.     if (errflag == TRUE) {
  52.         fprintf(stderr, "Usage: %s [-sv] [file...]\n", pgm);
  53.         exit(1);
  54.     }
  55.  
  56.     if (optind == argc) {
  57.         if (setmode(STDINPUT, O_BINARY) == -1)
  58.             fatal(pgm, "Cannot set binary mode", 2);
  59.         hexdump(STDINPUT, sflag);
  60.         exit(0);
  61.     }
  62.  
  63.     for ( ; optind < argc; ++optind) {
  64.         if ((fd = open(argv[optind], O_BINARY | O_RDONLY)) == -1) {
  65.             fprintf(stderr,
  66.                 "%s: Error opening %s -- ", pgm, argv[optind]);
  67.             perror("");
  68.             continue;
  69.         }
  70.         if (vflag == TRUE)
  71.             fprintf(stdout, "\n%s:\n", argv[optind]);
  72.         if (hexdump(fd, sflag) == FAILURE) {
  73.             fprintf(stderr,
  74.                 "%s: Error reading %s -- ", pgm, argv[optind]);
  75.             perror("");
  76.         }
  77.         if (close(fd) == -1)
  78.             fatal(pgm, "Error closing input file", 3);
  79.     }
  80.  
  81.     exit(0);
  82. }
  83.