home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 100-199 / ff174.lzh / Strings / Strings.c < prev    next >
C/C++ Source or Header  |  1989-02-04  |  3KB  |  164 lines

  1. /*
  2.  * strings : display all ascii strings in a file
  3.  *            by Joel Swank August 1988
  4.  *           Version 1.0
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <fcntl.h>
  9. #include <exec/types.h>
  10. #define MAX 80     /* size of string buffer */
  11. #define STRINGSIZE 3
  12. #define MAXSTRINGSIZE MAX-1
  13. #define MINSTRINGSIZE 1
  14. #define STDIN 0   /* file descriptor for stdin */
  15.  
  16. char buffer[MAX];
  17. int stringsize = STRINGSIZE;
  18. int caps = FALSE;        /* caps only flag */
  19. int small = FALSE;       /* small only flag */
  20. int numerics = FALSE;    /* include numerics flag */
  21. FILE *fdopen();
  22.  
  23. int fileflag = FALSE;    /* detect no files - use stdin */
  24.  
  25. main(argc,argv)
  26. int argc;
  27. char *argv[];
  28. {
  29.     register FILE    *filep ;
  30.     register cnt ;
  31.  
  32.         /* get command line options */
  33.     getcmd(argc, argv);
  34.  
  35.         /* get command line filenames */
  36.     for (cnt=1; cnt < argc; cnt++)
  37.     {    if (*argv[cnt] != '-')
  38.         {
  39.             if ((filep = fopen(argv[cnt], "r")) == NULL)
  40.                 fatal("can't open %s", argv[cnt]) ;
  41.  
  42.             printf("FILE: %s\n",argv[cnt]);
  43.             dofile(filep);
  44.             fclose(filep);
  45.             fileflag = TRUE;
  46.         }
  47.     }
  48.  
  49.     if (!fileflag)  /* if no files given, use stdin */
  50.     {
  51.         filep = fdopen(STDIN, "r");
  52.         dofile(filep);
  53.         fclose(filep);
  54.     }
  55.     exit(0);
  56. }
  57.  
  58. /*
  59.  * process open file via stream pointer
  60.  */
  61.  
  62. dofile(filep)
  63. FILE *filep;
  64. {
  65.     register int accept;
  66.     register int pos = 0;
  67.     register int chr;
  68.  
  69.     while ((chr = getc(filep)) != EOF)
  70.     {    
  71.         accept = FALSE;    /* assume invalid */
  72.         /* check all requested characters */
  73.         if ((chr <= 'z' && chr >= 'a') && !caps ) accept = TRUE;
  74.         if ((chr <= 'Z' && chr >= 'A') && !small ) accept = TRUE;
  75.         if ((chr <= '9' && chr >= '0') && numerics ) accept = TRUE;
  76.         if (chr == '_') accept = TRUE;
  77.         if (pos >= MAX-1) accept = FALSE;
  78.         if (accept)
  79.             {
  80.             buffer[pos++] = chr;
  81.             } else if (pos != 0) {
  82.             buffer[pos] = '\0';
  83.             if (strlen(buffer) >= stringsize) printf("%s\n",buffer);
  84.             pos = 0;
  85.             }
  86.     }
  87. }
  88.  
  89. /*
  90.  *  fatal - print standard error msg and halt process
  91.  */
  92. fatal(ptrn, data1, data2)
  93. register char    *ptrn, *data1, *data2 ;
  94. {
  95.     printf("ERROR: ");
  96.     printf(ptrn, data1, data2) ;
  97.     putchar('\n');
  98.     exit(1);
  99. }
  100.  
  101.     
  102.  
  103.  
  104. /*
  105.  *  getcmd - get arguments from command line 
  106.  */
  107. getcmd(argc, argv)
  108. register argc ;
  109. register char    *argv[] ;
  110. {
  111.     register cnt ;
  112.                     /* get command options */
  113.     for (cnt=1; cnt < argc; cnt++)
  114.     {    if (*argv[cnt] == '-')
  115.         {    switch(argv[cnt][1])
  116.             {
  117.                case 'l':
  118.                 stringsize = atoi(&argv[cnt][2]) ;
  119.                 if (stringsize < MINSTRINGSIZE
  120.                  || stringsize > MAXSTRINGSIZE)
  121.                     fatal("Bad -l value: %s", argv[cnt]) ;
  122.                 break ;
  123.  
  124.                case 'c':
  125.                 caps = TRUE;
  126.                 break ;
  127.  
  128.                case 's':
  129.                 small = TRUE;
  130.                 break ;
  131.  
  132.                case 'n':
  133.                 numerics = TRUE;
  134.                 break ;
  135.  
  136.                case '?':                    /* help option */
  137.                  usage();
  138.                  printf(" Strings Ver 1.0 - display ASCII strings from a file.\n");
  139.                  printf(" Options:\n");
  140.                  printf(" lnnn - set minimum length of string to display - default 3.\n");
  141.                  printf(" c    - include capital letters only.\n");
  142.                  printf(" s    - include lower case letters only.\n");
  143.                  printf(" n    - include the digits 0 through 9.\n");
  144.                  printf(" ?    - display this list.\n");
  145.                 exit(0);
  146.  
  147.                default:
  148.                  usage();
  149.                  exit(0);
  150.             }
  151.         }
  152.     }
  153.  
  154. }
  155.  
  156.  
  157.  
  158. usage()
  159. {
  160. printf("usage:strings [-lnnn] [-c] [-s] [-n] [-?] [file ...]\n");
  161. }
  162.  
  163.  
  164.