home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 154_01 / uniq.c < prev    next >
Text File  |  1979-12-31  |  1KB  |  61 lines

  1. /* uniq.c:    filters-out contiguous, duplicate lines */
  2.  
  3. /* Adapted from Software Tools, by Chuck Allison, Apr 1985 */
  4.  
  5. #include <stdio.h>
  6. #define MAXLINE 256
  7. #define MAXFILES 150
  8.  
  9. main(argc,argv)
  10. int argc;
  11. char *argv[];
  12. {
  13.     int i, maxarg = MAXFILES, xargc;
  14.     char *xargv[MAXFILES];
  15.     FILE *f;
  16.  
  17.     if (argc == 1)
  18.         uniq(stdin);
  19.     else
  20.     {
  21.         /* expand filespecs (Mark Williams C only!).. */
  22.         xargc = exargs("files",argc,argv,xargv,maxarg);
  23.  
  24.         for (i = 0; i < xargc; ++i)
  25.             if ((f = fopen(xargv[i],"r")) == NULL)
  26.             {
  27.                 printf("can't open: \"%s\"\n",xargv[i]);
  28.                 exit(1);
  29.             } 
  30.             else
  31.                 uniq(f);
  32.     }
  33. }
  34.  
  35. uniq(f)
  36. FILE *f;
  37. {
  38.     char line1[MAXLINE], line2[MAXLINE], *l1, *l2;
  39.  
  40.     l1 = fgets(line1,MAXLINE-1,f);    /* ..get first line.. */
  41.  
  42.     while (l1 != NULL)
  43.     {
  44.         fputs(line1,stdout);
  45.  
  46.         /* ..skip duplicates of line1.. */
  47.         while ((l2 = fgets(line2,MAXLINE-1,f)) != NULL)
  48.             if (strcmp(line1,line2) != 0) break;
  49.  
  50.         /* ..check EOF.. */
  51.         if (l2 == NULL) break;
  52.  
  53.         fputs(line2,stdout);
  54.  
  55.         /* ..skip duplicates of line2.. */
  56.         while ((l1 = fgets(line1,MAXLINE-1,f)) != NULL)
  57.             if (strcmp(line1,line2)) break;
  58.     }
  59.     fclose(f);
  60. }
  61.