home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / utils / file / hex / dump-1.000 / dump-1 / dump-1.0 / od.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-08-07  |  2.7 KB  |  188 lines

  1. #ifndef lint
  2. static char *RCSid = "$Header: /dd/USR/MIKEH/YUP/rcs/od.c_v 1.1 94/06/03 18:06:47 mikeh Exp $";
  3. #endif
  4.  
  5. /*
  6.  * $Log:    od.c_v $
  7.  * Revision 1.1  94/06/03  18:06:47  mikeh
  8.  * Initial revision
  9.  * 
  10.  */
  11.  
  12. /* Od.c Octal dump */
  13.  
  14. #include <stdio.h>
  15. #include <ctype.h>
  16. #include "cnv.h"
  17.  
  18. char *usgmsg[] = {
  19.     "Syntax: dump [<opts>] [<path>] [<opts>]\n",
  20.     "Function: formatted display of contents of a file\n",
  21.     "Options:\n",
  22.     "   -b    binary display\n",
  23.     "   -d    decimal display\n",
  24. #ifdef OSK
  25.     "   -h    hexadecimal display\n",
  26.     "   -o    octal display (default)\n",
  27. #else
  28.     "   -h    hexadecimal display (default)\n",
  29.     "   -o    octal display\n",
  30. #endif
  31.     "   -z    read from standard input\n",
  32.     "   -v    version\n",
  33.     NULL
  34. };
  35.  
  36. version(name)
  37. char *name;
  38. {
  39.     fprintf(stderr,"%s: Version %d.%d %s\n",name,VERSION,REVISION,RELEASE);
  40. }
  41.  
  42. usage()
  43. {
  44.     int i = 0;
  45.  
  46.     while(usgmsg[i])
  47.         fputs(usgmsg[i++],stderr);
  48.     exit(0);
  49. }
  50.  
  51. header(hdrs)
  52. char **hdrs;
  53. {
  54.     int i = 0;
  55.     
  56.     printf("\n");
  57.     while(hdrs[i])
  58.         printf("%s\n",hdrs[i++]);
  59. }
  60.  
  61. main(argc,argv)
  62. int    argc;
  63. char **argv;
  64. {
  65.     FILE *fp;
  66.     int i;
  67.     int files   = 0;
  68.     int rdstdin = 0;
  69.     char *opt;
  70.  
  71.     if (argc < 2)
  72.         usage();
  73.         
  74.     for (i = 1; i < argc ; i++)
  75.     {
  76.         if (argv[i][0] == '-')
  77.         {
  78.             
  79.             if (argv[i][1] == '\0')
  80.             {
  81.                 rdstdin = TRUE;
  82.             }
  83.             else
  84.             {
  85.                 opt = &argv[i][1];
  86.                 while (*opt)
  87.                 {
  88.                     switch (toupper(*opt++))
  89.                     {
  90.                     case 'Z' :
  91.                         rdstdin = TRUE;
  92.                         break;
  93.                     case 'O':
  94.                         base = OCTAL;
  95.                         break;
  96.                     case 'H':
  97.                         base = HEX;
  98.                         break;
  99.                     case 'B':
  100.                         base = BINARY;
  101.                         break;
  102.                     case 'D':
  103.                         base = DECIMAL;
  104.                         break;
  105.                     case 'V':
  106.                         version(argv[0]);
  107.                     default :
  108.                         usage();
  109.                     }
  110.                 }
  111.             }
  112.         }
  113.         else
  114.             files++;
  115.     }
  116.  
  117.     if (files == 0    && ! rdstdin)
  118.         usage();
  119.  
  120.     initialize(base);
  121.  
  122.     if (rdstdin)
  123.         dump(stdin);
  124.     else for (i = 1; i < argc ; i++)
  125.     {
  126.         if (argv[i][0] != '-')
  127.         {
  128.             if ((fp = fopen(argv[i],"r")) != (FILE *)NULL)
  129.             {
  130.                 dump(fp);
  131.                 fclose(fp);
  132.             }
  133.             else
  134.             {
  135.                     printf("Can't open '%s'.\n",argv[i]);
  136.                 exit(errno);
  137.             }
  138.         }
  139.     }
  140. }
  141.  
  142. dump(fp)
  143. FILE *fp;
  144. {
  145.     int k = 0;
  146.     int i = 0;
  147.     int pos = 0;
  148.     int ch;
  149.     char string[40];
  150.     char buffer[80];
  151.     char *strptr;
  152.     char *s;
  153.  
  154.     s = buffer;
  155.     *buffer = '\0';
  156.     strptr = string;
  157.     *string = '\0';
  158.     while ((ch = fgetc(fp)) != EOF)
  159.     {
  160.         *strptr++ = (isprint(ch) && ((ch & 0x80) == 0)) ? ch : '.';
  161.         *strptr = '\0';            
  162.         s = outtype(s,ch);
  163.         i++;
  164.         if (i == maxwide)
  165.         {
  166.             if ((pos % maxline) == 0)
  167.                 header(hdrs);
  168.             printf(fmt,typeint(pos),buffer, string);
  169.             k++;
  170.             pos++;
  171.             i = 0;
  172.             s = buffer;
  173.             *buffer = '\0';
  174.             strptr = string;
  175.             *string = '\0';
  176.             if (k == maxline)
  177.                 k = 0;
  178.         }
  179.     }
  180.     if (k == 0 && i > 0)
  181.         header(hdrs);
  182.     if (i > 0)
  183.         printf(fmt,typeint(pos),buffer, string);
  184. }
  185.  
  186.  
  187.  
  188.