|
|
1.1 ! root 1: /* NOTICE-NOT TO BE DISCLOSED OUTSIDE BELL SYS EXCEPT UNDER WRITTEN AGRMT */ ! 2: /* Writer's Workbench version 2.0, January 1981 */ ! 3: #include <stdio.h> ! 4: #include <ctype.h> ! 5: #define MAXCHAR 50 ! 6: #define isvowel(c) (c=='a'||c=='e'||c=='i'||c=='o'||c=='u') ! 7: char a[MAXCHAR],b[MAXCHAR]; ! 8: ! 9: main(argc,argv) ! 10: int argc; ! 11: char *argv[]; ! 12: { ! 13: register int nsyl,var; ! 14: if(argc == 3){ ! 15: if(*argv[1] != '-'){ ! 16: fprintf(stderr,"Usage: syl [-integer] filename\n"); ! 17: exit(1); ! 18: } ! 19: var = *(argv[1]+1); ! 20: if(!isdigit(var)){ ! 21: fprintf(stderr,"Usage: syl [-integer] filename\n"); ! 22: exit(1); ! 23: } ! 24: var = atoi(argv[1]+1); ! 25: } ! 26: else var = 0; ! 27: while(getword()!=EOF){ ! 28: if(a[0] == '\0')continue; ! 29: change(); ! 30: nsyl=estimate(); ! 31: if(nsyl >= var) ! 32: printf("%d-%s\n",nsyl,a); ! 33: } ! 34: ! 35: } ! 36: getword(){ ! 37: int skip,c2; ! 38: int ret; ! 39: register char *aptr; ! 40: char last; ! 41: ret = skip = 0; ! 42: for(aptr=a;aptr<&a[MAXCHAR];aptr++){ ! 43: *aptr = getchar(); ! 44: if(*aptr == EOF){ ! 45: ret=EOF; ! 46: break; ! 47: } ! 48: if(isdigit(*aptr)){ ! 49: skip = 1; ! 50: continue; ! 51: } ! 52: if(isspace(*aptr)) break; ! 53: if(!isalnum(*aptr)){ ! 54: last = *(aptr-1); ! 55: switch(*aptr){ ! 56: case '-': ! 57: if(((c2=getchar())=='o' && last=='o')|| ! 58: (c2=='e' && last=='e')) ! 59: ungetc(c2,stdin); ! 60: else if(skip==0){ ! 61: ungetc(c2,stdin); ! 62: goto found; ! 63: } ! 64: else{ ! 65: ungetc(c2,stdin); ! 66: goto found; ! 67: } ! 68: break; ! 69: case '\'': ! 70: if(last=='x' || last=='c' ||last=='s' ! 71: || last=='h' ||(*(aptr-2)=='g' && last=='e')) ! 72: *aptr='\''; ! 73: else if ((c2=getchar())=='t' && last=='n'){ ! 74: ungetc(c2,stdin); ! 75: *aptr='\''; ! 76: } ! 77: else{ ! 78: ungetc(c2,stdin); ! 79: aptr--; ! 80: } ! 81: break; ! 82: case ',': ! 83: case ';': ! 84: case '?': ! 85: case '!': ! 86: case ':': ! 87: case '~': ! 88: case '/': ! 89: goto found; ! 90: default: ! 91: aptr--; ! 92: } ! 93: } ! 94: } ! 95: found: ! 96: *aptr= '\0'; ! 97: return(ret); ! 98: } ! 99: ! 100: change() ! 101: { ! 102: register char *aptr, *bptr; ! 103: ! 104: char temp; ! 105: for(aptr=a, bptr=b;*aptr!='\0';aptr++,bptr++){ ! 106: switch(*aptr){ ! 107: case 'a': ! 108: case 'A': ! 109: case 'Y': ! 110: case 'E': ! 111: case 'O': ! 112: case 'I': ! 113: case 'U': ! 114: case 'o': ! 115: case '\'': ! 116: *bptr='V'; ! 117: break; ! 118: ! 119: case 'e': ! 120: if(*(aptr+1)=='a'){ ! 121: if(scmp("creat",(aptr-2)) && *(aptr+3) != 'u') ! 122: *bptr = 'S'; ! 123: else if(scmp("reac",(aptr-1)) && *(aptr+3) != 'h') ! 124: *bptr='S'; ! 125: else if(*(aptr+2) == '\0')*bptr = 'S'; ! 126: else if(*(aptr+2) == 's' && *(aptr+3) == '\0') ! 127: *bptr = 'S'; ! 128: else if(scmp("reali",(aptr-1)))*bptr='S'; ! 129: else *bptr='V'; ! 130: } ! 131: else if(*(aptr+1)=='o'){ ! 132: if(aptr == &a[1] && (*(aptr-1) == 'd' || *(aptr-1) == 'r')) ! 133: *bptr = 'S'; ! 134: else if(aptr == &a[2] && (*(aptr-2) == 'p' && *(aptr-1) == 'r')) ! 135: *bptr= 'S'; ! 136: else if(*(aptr+2)=='u') *bptr='S'; ! 137: else if(*(aptr+2) == '0') *bptr='S'; ! 138: else *bptr='V'; ! 139: } ! 140: else if(*(bptr-2)=='C' && *(aptr-2)!='l' && ! 141: *(aptr-1)=='l') *bptr='V'; ! 142: else if( *(aptr+1)=='l' &&*(aptr+2)=='y' ) ! 143: *bptr='C'; ! 144: else if(scmp("liness",aptr+1))*bptr='C'; ! 145: else if(scmp("lihood",aptr+1))*bptr='C'; ! 146: else if(scmp("ful",aptr+1))*bptr = 'C'; ! 147: else if(scmp("nless",aptr+1))*bptr = 'C'; ! 148: else if(scmp("ment",aptr+1))*bptr = 'C'; ! 149: else if(scmp("ship",aptr+1))*bptr='C'; ! 150: else *bptr='V'; ! 151: break; ! 152: ! 153: case 'i': ! 154: if(*(aptr+1)=='e'){ ! 155: if(*(aptr+2)=='r') *bptr='S'; ! 156: else if(*(aptr+2)=='t') *bptr='S'; ! 157: else if(scmp("icient",aptr-2))*bptr='V'; ! 158: else if(scmp("nient",aptr-1))*bptr='V'; ! 159: else if(*(aptr+2)=='n' && *(aptr+3)=='t') ! 160: *bptr='S'; ! 161: else if(scmp("icienc",aptr-2))*bptr='V'; ! 162: else if(scmp("nienc",aptr-1))*bptr='V'; ! 163: else if(*(aptr+2)=='n' && *(aptr+3)=='c') ! 164: *bptr='S'; ! 165: else *bptr='V'; ! 166: } ! 167: else if(*(aptr+1)=='o'){ ! 168: if(*(aptr-1)=='v' && *(aptr+2)=='r') *bptr='V'; ! 169: else if(*(aptr-1)=='r') *bptr='S'; ! 170: else if(*(aptr+2)=='u') *bptr='S'; ! 171: else if(*(aptr-1)=='v' || *(aptr-1)=='V') ! 172: *bptr='S'; ! 173: else if(*(aptr+2) == '\0') *bptr='S'; ! 174: else *bptr='V'; ! 175: } ! 176: else if(*(aptr+1)=='a'){ ! 177: if((*(aptr-1)=='c' || *(aptr-1)=='t') && ! 178: *(aptr-2)=='o') *bptr='S'; ! 179: else if (*(aptr-1)=='c' || *(aptr-1)=='t') ! 180: *bptr='V'; ! 181: else *bptr='S'; ! 182: } ! 183: else *bptr='V'; ! 184: break; ! 185: case 'u': ! 186: if(*(aptr-1) == 'q' || *(aptr-1) == 'Q') ! 187: *bptr = 'C'; ! 188: else if( (*(aptr-1) == 'g' || *(aptr-1) == 'G') && ! 189: (isvowel(*(aptr+1))||*(aptr+1) == 'y')) *bptr='C'; ! 190: else if(*(aptr+1)=='a'){ ! 191: if(*(aptr-1)=='t' || *(aptr-1)=='d' || ! 192: *(aptr-1)=='s') *bptr='S'; ! 193: else if(*(aptr+2)=='t') *bptr='S'; ! 194: else *bptr='V'; ! 195: } ! 196: else if(*(aptr+1)=='e'){ ! 197: if(*(aptr-1)=='l') *bptr='S'; ! 198: else if(*(aptr-2)=='g' && *(aptr-1)=='r') ! 199: *bptr='S'; ! 200: else *bptr='V'; ! 201: } ! 202: else *bptr='V'; ! 203: break; ! 204: case 'y': ! 205: if((aptr>a&& *(aptr+1) != '\0') && *(bptr-1) == 'V' ! 206: && (isvowel(*(aptr+1)))) ! 207: *bptr='C'; ! 208: else *bptr='V'; ! 209: break; ! 210: case 'n': ! 211: if(*(aptr-1)=='i' && *(aptr+1)=='g'){ ! 212: *(bptr-1)='C'; ! 213: *bptr='V'; ! 214: } ! 215: else *bptr='C'; ! 216: break; ! 217: default: ! 218: *bptr='C'; ! 219: } ! 220: } ! 221: ! 222: *bptr='\0'; ! 223: /*sitting on last char*/ ! 224: aptr--; ! 225: bptr--; ! 226: if(*(aptr-1)=='e' && *aptr=='d'){ ! 227: if(*(aptr-2)=='t' || *(aptr-2) == 'd'||(*(bptr-3)=='C' && *(aptr-2)=='l' ! 228: && *(aptr-3) !='l')){ ! 229: *(bptr) = *(bptr-2) = 'C'; ! 230: *(bptr-1)='V'; ! 231: } ! 232: else{ ! 233: *bptr = *(bptr-1)= 'C'; ! 234: } ! 235: return; ! 236: } ! 237: temp = *(aptr-2); ! 238: if((temp=='s'||temp=='g'|| temp== 'h'|| temp=='c'|| temp=='z') && (*(aptr-1)=='e' && *aptr=='s')){ ! 239: *bptr = *(bptr-2)='C'; ! 240: *(bptr-1)='V'; ! 241: return; ! 242: } ! 243: if(*(bptr-3)=='C' && temp=='l' && *(aptr-1)=='e' && *aptr=='s'){ ! 244: *bptr = *(bptr-2)='C'; ! 245: *(bptr-1)='V'; ! 246: return; ! 247: } ! 248: if(*(aptr-1)=='e' && *aptr=='s'){ ! 249: *bptr = *(bptr-1) = 'C'; ! 250: return; ! 251: } ! 252: if(*(bptr-2)=='C' && *(aptr-1)=='l' && *aptr=='e'){ ! 253: *bptr='V'; ! 254: *(bptr-1)='C'; ! 255: return; ! 256: } ! 257: if(*aptr=='e') *bptr='C'; ! 258: ! 259: } ! 260: ! 261: estimate() ! 262: { ! 263: register char *bptr; ! 264: int k,f,i; ! 265: k=0; ! 266: f=1; ! 267: for(bptr=b;*bptr!='\0';bptr++){ ! 268: if(f==1 && *bptr=='V'){ ! 269: f=2; ! 270: k++; ! 271: } ! 272: if(f==1 && *bptr=='S') k++; ! 273: if(f==2 && *bptr=='C') f=1; ! 274: else if(f==2 && *bptr=='S'){ ! 275: f=1; ! 276: k++; ! 277: } ! 278: } ! 279: if(k>0) return(k); ! 280: else return(1); ! 281: } ! 282: ! 283: scmp(s1,s2) ! 284: char *s1,*s2; ! 285: { ! 286: char *s, *p; ! 287: for(s=s1, p=s2;*s != '\0';s++,p++){ ! 288: if(*s != *p)return(0); ! 289: } ! 290: return(1); ! 291: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.