|
|
1.1 ! root 1: # include "stdio.h" ! 2: # include "ctype.h" ! 3: # include "assert.h" ! 4: # define SEP 001 ! 5: # define SAME 1 ! 6: # define DIFFERENT 0 ! 7: main(argc,argv) ! 8: char *argv[]; ! 9: { ! 10: char bf[2000],*p, *s; ! 11: char oname[100], tname[100]; ! 12: int ct, type, ntype; ! 13: oname[0] = 0; ! 14: ct = type = 0; ! 15: while (gets(bf)) ! 16: { ! 17: p=bf; ! 18: gname(tname,p); ! 19: /* if a date we don't care about month */ ! 20: datetrim(tname); ! 21: if (compare(tname, oname) != SAME) ! 22: { ! 23: if (ct > 0) ! 24: printf(".ct %d\n", ct); ! 25: printf(".nn %s\n", tname); ! 26: ct = 0; ! 27: type = 0; ! 28: } ! 29: strcpy (oname, tname); ! 30: ntype = gtype(p); ! 31: if (ntype != type) ! 32: printf(".ty %d\n", ntype); ! 33: type = ntype; ! 34: while (*p++ != SEP); ! 35: for (s=p; *s; s++) ! 36: { ! 37: assert (s<bf+2000); ! 38: if (*s == SEP) ! 39: *s = '\n'; ! 40: } ! 41: while (*p=='\n')p++; ! 42: puts(".br\n.["); ! 43: puts(p); ! 44: puts(".]"); ! 45: ct++; ! 46: } ! 47: if (ct>0) printf(".ct %d\n",ct); ! 48: } ! 49: ! 50: gname(buf, s) ! 51: char *buf, *s; ! 52: { ! 53: int c; ! 54: for ( ; (c= *s) && c != SEP && c != '*'; s++) ! 55: *buf++ = (c != '_' ? c : ' '); ! 56: *buf=0; ! 57: } ! 58: gtype(s) ! 59: char *s; ! 60: { ! 61: while (*s && *s!= '*') ! 62: s++; ! 63: return (*s ? s[1] - '0' : 0); ! 64: } ! 65: compare(s1, s2) ! 66: char *s1, *s2; ! 67: { ! 68: /* compare last names */ ! 69: while (*s1++== *s2++) ! 70: { ! 71: if (*s1==0) return(SAME); ! 72: if (*s1==' ') break; ! 73: } ! 74: if (*s1 != ' ' || *s2 != ' ') return(DIFFERENT); ! 75: while (*s1==' ') s1++; ! 76: while (*s2==' ') s2++; ! 77: #/* compare first initials */ ! 78: if (*s1++ != *s2++) return (DIFFERENT); ! 79: while (*s1==' ') s1++; ! 80: while (*s2==' ') s2++; ! 81: /* if no middle initials OK */ ! 82: if (*s1==0 || *s2==0) return(SAME); ! 83: /* but if middle initials must be same */ ! 84: if (*s1==*s2) return(SAME); ! 85: return (DIFFERENT); ! 86: } ! 87: datetrim(p) ! 88: char *p; ! 89: { ! 90: if (isdigit(p[0])&& isdigit(p[1])) ! 91: { ! 92: while(isdigit(*p))p++; ! 93: *p=0; ! 94: } ! 95: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.