|
|
1.1 ! root 1: #ifndef lint ! 2: static char *sccsid = "@(#)nptx.c 2.5 (smail) 9/15/87"; ! 3: #endif ! 4: ! 5: #include <stdio.h> ! 6: #include <sys/types.h> ! 7: #include <sys/stat.h> ! 8: #include <pwd.h> ! 9: #include "defs.h" ! 10: #include <ctype.h> ! 11: ! 12: char *malloc(), *index(), *fullname(); ! 13: void nptx(), free(), dotspace(); ! 14: ! 15: enum edebug debug; /* not used by nptx */ ! 16: char *fnlist = NULL; /* not used by nptx */ ! 17: ! 18: main() ! 19: { ! 20: int i; ! 21: char buf[SMLBUF], *p, *name, *last, *nick, *ctmp; ! 22: ! 23: while(gets(buf) != NULL) { ! 24: /* line should be in form ! 25: ** ! 26: ** login First Last ! 27: ** or ! 28: ** login First Last(Nickname) ! 29: ** ! 30: */ ! 31: if((p = index(buf, '\t')) == NULL) { ! 32: (void) fprintf(stderr, "format error: %s\n", buf); ! 33: continue; ! 34: } ! 35: ! 36: *p++ = '\0'; ! 37: name = fullname(p); ! 38: dotspace(name); ! 39: ! 40: if (last = rindex(name, '.')) { ! 41: last++; ! 42: } else { ! 43: last = NULL; ! 44: } ! 45: ! 46: if ((nick = index(p, '(')) != NULL) { ! 47: nick++; ! 48: if ((ctmp = index(nick, ')')) == NULL) { ! 49: nick = NULL; ! 50: } else { ! 51: *ctmp = '\0'; ! 52: } ! 53: } ! 54: ! 55: nptx(buf, name); ! 56: ! 57: if((last != NULL) && (nick != NULL)) { ! 58: i=strlen(nick) + strlen(last) + 2; ! 59: if((name = malloc(i)) != NULL) { ! 60: (void) strcpy(name, nick); ! 61: (void) strcat(name, "."); ! 62: (void) strcat(name, last); ! 63: dotspace(name); ! 64: nptx(buf, name); ! 65: free(name); ! 66: } ! 67: } ! 68: } ! 69: return(0); ! 70: } ! 71: ! 72: void ! 73: dotspace(s) ! 74: char *s; ! 75: { ! 76: register char *p, *t; ! 77: ! 78: /* turn whitespace to '.' */ ! 79: for(p = s; *p != '\0'; p++) { ! 80: if((*p == ' ') || (*p == '\t')) { ! 81: *p = '.'; ! 82: } ! 83: } ! 84: ! 85: /* elide leading '.'s */ ! 86: for(p = s; *p == '.' ; p++) ! 87: ; ! 88: ! 89: /* elide mulitple '.'s and all "'"s */ ! 90: for(t = s; *p != '\0'; p++, t++) { ! 91: *t = *p; ! 92: ! 93: if(*t == '\'') { ! 94: t--; ! 95: continue; ! 96: } ! 97: ! 98: if(*p == '.') { ! 99: while(*(++p) == '.') ! 100: ; ! 101: p--; ! 102: } ! 103: } ! 104: *t = '\0'; ! 105: ! 106: /* elide trailing '.' */ ! 107: if((t > s) && (*(--t) == '.')) *t = '\0'; ! 108: } ! 109: ! 110: void ! 111: nptx(login, name) ! 112: char *login, *name; ! 113: { ! 114: int i,j,k,N,lim,mask; ! 115: int ii,ji,ki,Ni,limi,maski; ! 116: char nl[11][100], il[11][100]; ! 117: char *pi, *p, *rindex(); ! 118: char buf[100]; ! 119: char bufi[100]; ! 120: ! 121: if((name == NULL) || (*name == '\0')) { ! 122: return; ! 123: } ! 124: ! 125: for(i=0; i < 10; i++) { ! 126: if((p = rindex(name, '.')) == NULL) break; ! 127: (void) strcpy(nl[i], p+1); ! 128: *p = NULL; ! 129: } ! 130: (void) strcpy(nl[i], name); ! 131: ! 132: while((strcmpic(nl[i], "Mr" ) == 0) ! 133: || (strcmpic(nl[i], "Dr" ) == 0) ! 134: || (strcmpic(nl[i], "Mrs" ) == 0) ! 135: || (strcmpic(nl[i], "Miss") == 0) ! 136: || (strcmpic(nl[i], "Ms" ) == 0)) { ! 137: i--; ! 138: } ! 139: ! 140: while((strcmpic(nl[0], "Jr") == 0) ! 141: || (strcmpic(nl[0], "Sr") == 0)) { ! 142: for(j=0; j < i; j++) { ! 143: (void) strcpy(nl[j], nl[j+1]); ! 144: } ! 145: i--; ! 146: } ! 147: ! 148: N = i; ! 149: lim = 1 << (N+1); ! 150: for(mask = 1 << N ; mask < lim ; mask++) { ! 151: buf[0] = '\0'; ! 152: for(j = 1, k = N; j < lim; j <<=1, k--) { ! 153: if(j & mask) { ! 154: (void) strcat(buf, nl[k]); ! 155: (void) strcat(buf, "."); ! 156: } ! 157: } ! 158: if((p = rindex(buf, '.')) != NULL) { ! 159: *p = '\0'; ! 160: } ! 161: ! 162: for(ii=0; ii < 10; ii++) { ! 163: if((pi = rindex(buf, '.')) == NULL) break; ! 164: (void) strcpy(il[ii], pi+1); ! 165: *pi = NULL; ! 166: } ! 167: (void) strcpy(il[ii], buf); ! 168: Ni = ii; ! 169: limi = 1 << (Ni+1); ! 170: for(maski = 1 << Ni /* 0 */ ; maski < limi ; maski++) { ! 171: bufi[0] = '\0'; ! 172: for(ji = 1, ki = Ni; ji < limi; ji <<=1, ki--) { ! 173: if(ji & maski) { ! 174: (void) strcat(bufi, il[ki]); ! 175: } else { ! 176: char init[3]; ! 177: init[0] = il[ki][0]; ! 178: init[1] = '\0'; ! 179: (void) strcat(bufi, init); ! 180: } ! 181: (void) strcat(bufi, "."); ! 182: } ! 183: if((pi = rindex(bufi, '.')) != NULL) { ! 184: *pi = '\0'; ! 185: } ! 186: #ifdef DOT_REQD ! 187: if(index(bufi, '.') == NULL) { ! 188: continue; ! 189: } ! 190: #endif /* DOT_REQD */ ! 191: (void) printf("%s\t%s\n",bufi, login); /* */ ! 192: } ! 193: } ! 194: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.