1: #include <stdio.h>
   2: 
   3: /* tr - transliterate data stream */
   4: int dflag   = 0;
   5: int sflag   = 0;
   6: int cflag = 0;
   7: int save    = 0;
   8: char    code[256];
   9: char    squeez[256];
  10: char    vect[256];
  11: struct string { int last, max; char *p; } string1, string2;
  12: 
  13: main(argc,argv)
  14: char **argv;
  15: {
  16:     register i;
  17:     int j;
  18:     register c, d;
  19:     char *compl;
  20:     int lastd;
  21: 
  22:     string1.last = string2.last = 0;
  23:     string1.max = string2.max = 0;
  24:     string1.p = string2.p = "";
  25: 
  26:     if(--argc>0) {
  27:         argv++;
  28:         if(*argv[0]=='-'&&argv[0][1]!=0) {
  29:             while(*++argv[0])
  30:                 switch(*argv[0]) {
  31:                 case 'c':
  32:                     cflag++;
  33:                     continue;
  34:                 case 'd':
  35:                     dflag++;
  36:                     continue;
  37:                 case 's':
  38:                     sflag++;
  39:                     continue;
  40:                 }
  41:             argc--;
  42:             argv++;
  43:         }
  44:     }
  45:     if(argc>0) string1.p = argv[0];
  46:     if(argc>1) string2.p = argv[1];
  47:     for(i=0; i<256; i++)
  48:         code[i] = vect[i] = 0;
  49:     if(cflag) {
  50:         while(c = next(&string1))
  51:             vect[c&0377] = 1;
  52:         j = 0;
  53:         for(i=1; i<256; i++)
  54:             if(vect[i]==0) vect[j++] = i;
  55:         vect[j] = 0;
  56:         compl = vect;
  57:     }
  58:     for(i=0; i<256; i++)
  59:         squeez[i] = 0;
  60:     lastd = 0;
  61:     for(;;){
  62:         if(cflag) c = *compl++;
  63:         else c = next(&string1);
  64:         if(c==0) break;
  65:         d = next(&string2);
  66:         if(d==0) d = lastd;
  67:         else lastd = d;
  68:         squeez[d&0377] = 1;
  69:         code[c&0377] = dflag?1:d;
  70:     }
  71:     while(d = next(&string2))
  72:         squeez[d&0377] = 1;
  73:     squeez[0] = 1;
  74:     for(i=0;i<256;i++) {
  75:         if(code[i]==0) code[i] = i;
  76:         else if(dflag) code[i] = 0;
  77:     }
  78: 
  79:     while((c=getc(stdin)) != EOF ) {
  80:         if(c == 0) continue;
  81:         if(c = code[c&0377]&0377)
  82:             if(!sflag || c!=save || !squeez[c&0377])
  83:                 putchar(save = c);
  84:     }
  85:     exit(0);
  86: }
  87: 
  88: next(s)
  89: struct string *s;
  90: {
  91: 
  92: again:
  93:     if(s->max) {
  94:         if(s->last++ < s->max)
  95:             return(s->last);
  96:         s->max = s->last = 0;
  97:     }
  98:     if(s->last && *s->p=='-') {
  99:         nextc(s);
 100:         s->max = nextc(s);
 101:         if(s->max==0) {
 102:             s->p--;
 103:             return('-');
 104:         }
 105:         if(s->max < s->last)  {
 106:             s->last = s->max-1;
 107:             return('-');
 108:         }
 109:         goto again;
 110:     }
 111:     return(s->last = nextc(s));
 112: }
 113: 
 114: nextc(s)
 115: struct string *s;
 116: {
 117:     register c, i, n;
 118: 
 119:     c = *s->p++;
 120:     if(c=='\\') {
 121:         i = n = 0;
 122:         while(i<3 && (c = *s->p)>='0' && c<='7') {
 123:             n = n*8 + c - '0';
 124:             i++;
 125:             s->p++;
 126:         }
 127:         if(i>0) c = n;
 128:         else c = *s->p++;
 129:     }
 130:     if(c==0) *--s->p = 0;
 131:     return(c&0377);
 132: }

Defined functions

main defined in line 13; never used
next defined in line 88; used 4 times
nextc defined in line 114; used 3 times

Defined variables

cflag defined in line 6; used 3 times
code defined in line 8; used 6 times
dflag defined in line 4; used 3 times
save defined in line 7; used 2 times
sflag defined in line 5; used 2 times
squeez defined in line 9; used 5 times
string1 defined in line 11; used 6 times
string2 defined in line 11; used 6 times
vect defined in line 10; used 6 times

Defined struct's

string defined in line 11; used 4 times
Last modified: 1981-07-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 368
Valid CSS Valid XHTML 1.0 Strict