1: static char *sccsid = "@(#)uniq.c	4.1 (Berkeley) 10/1/80";
   2: /*
   3:  * Deal with duplicated lines in a file
   4:  */
   5: #include <stdio.h>
   6: #include <ctype.h>
   7: int fields;
   8: int letters;
   9: int linec;
  10: char    mode;
  11: int uniq;
  12: char    *skip();
  13: 
  14: main(argc, argv)
  15: int argc;
  16: char *argv[];
  17: {
  18:     static char b1[1000], b2[1000];
  19: 
  20:     while(argc > 1) {
  21:         if(*argv[1] == '-') {
  22:             if (isdigit(argv[1][1]))
  23:                 fields = atoi(&argv[1][1]);
  24:             else mode = argv[1][1];
  25:             argc--;
  26:             argv++;
  27:             continue;
  28:         }
  29:         if(*argv[1] == '+') {
  30:             letters = atoi(&argv[1][1]);
  31:             argc--;
  32:             argv++;
  33:             continue;
  34:         }
  35:         if (freopen(argv[1], "r", stdin) == NULL)
  36:             printe("cannot open %s\n", argv[1]);
  37:         break;
  38:     }
  39:     if(argc > 2 && freopen(argv[2], "w", stdout) == NULL)
  40:         printe("cannot create %s\n", argv[2]);
  41: 
  42:     if(gline(b1))
  43:         exit(0);
  44:     for(;;) {
  45:         linec++;
  46:         if(gline(b2)) {
  47:             pline(b1);
  48:             exit(0);
  49:         }
  50:         if(!equal(b1, b2)) {
  51:             pline(b1);
  52:             linec = 0;
  53:             do {
  54:                 linec++;
  55:                 if(gline(b1)) {
  56:                     pline(b2);
  57:                     exit(0);
  58:                 }
  59:             } while(equal(b1, b2));
  60:             pline(b2);
  61:             linec = 0;
  62:         }
  63:     }
  64: }
  65: 
  66: gline(buf)
  67: register char buf[];
  68: {
  69:     register c;
  70: 
  71:     while((c = getchar()) != '\n') {
  72:         if(c == EOF)
  73:             return(1);
  74:         *buf++ = c;
  75:     }
  76:     *buf = 0;
  77:     return(0);
  78: }
  79: 
  80: pline(buf)
  81: register char buf[];
  82: {
  83: 
  84:     switch(mode) {
  85: 
  86:     case 'u':
  87:         if(uniq) {
  88:             uniq = 0;
  89:             return;
  90:         }
  91:         break;
  92: 
  93:     case 'd':
  94:         if(uniq) break;
  95:         return;
  96: 
  97:     case 'c':
  98:         printf("%4d ", linec);
  99:     }
 100:     uniq = 0;
 101:     fputs(buf, stdout);
 102:     putchar('\n');
 103: }
 104: 
 105: equal(b1, b2)
 106: register char b1[], b2[];
 107: {
 108:     register char c;
 109: 
 110:     b1 = skip(b1);
 111:     b2 = skip(b2);
 112:     while((c = *b1++) != 0)
 113:         if(c != *b2++) return(0);
 114:     if(*b2 != 0)
 115:         return(0);
 116:     uniq++;
 117:     return(1);
 118: }
 119: 
 120: char *
 121: skip(s)
 122: register char *s;
 123: {
 124:     register nf, nl;
 125: 
 126:     nf = nl = 0;
 127:     while(nf++ < fields) {
 128:         while(*s == ' ' || *s == '\t')
 129:             s++;
 130:         while( !(*s == ' ' || *s == '\t' || *s == 0) )
 131:             s++;
 132:     }
 133:     while(nl++ < letters && *s != 0)
 134:             s++;
 135:     return(s);
 136: }
 137: 
 138: printe(p,s)
 139: char *p,*s;
 140: {
 141:     fprintf(stderr, p, s);
 142:     exit(1);
 143: }

Defined functions

equal defined in line 105; used 2 times
gline defined in line 66; used 3 times
main defined in line 14; never used
pline defined in line 80; used 4 times
printe defined in line 138; used 2 times
skip defined in line 120; used 3 times

Defined variables

fields defined in line 7; used 2 times
letters defined in line 8; used 2 times
linec defined in line 9; used 5 times
mode defined in line 10; used 2 times
sccsid defined in line 1; never used
uniq defined in line 11; used 5 times
Last modified: 1987-02-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2806
Valid CSS Valid XHTML 1.0 Strict