|
|
researchv10 Norman
# include "stdio.h"
# include "ctype.h"
# include "assert.h"
# define SEP 001
# define SAME 1
# define DIFFERENT 0
main(argc,argv)
char *argv[];
{
char bf[2000],*p, *s;
char oname[100], tname[100];
int ct, type, ntype;
oname[0] = 0;
ct = type = 0;
while (gets(bf))
{
p=bf;
gname(tname,p);
/* if a date we don't care about month */
datetrim(tname);
if (compare(tname, oname) != SAME)
{
if (ct > 0)
printf(".ct %d\n", ct);
printf(".nn %s\n", tname);
ct = 0;
type = 0;
}
strcpy (oname, tname);
ntype = gtype(p);
if (ntype != type)
printf(".ty %d\n", ntype);
type = ntype;
while (*p++ != SEP);
for (s=p; *s; s++)
{
assert (s<bf+2000);
if (*s == SEP)
*s = '\n';
}
while (*p=='\n')p++;
puts(".br\n.[");
puts(p);
puts(".]");
ct++;
}
if (ct>0) printf(".ct %d\n",ct);
}
gname(buf, s)
char *buf, *s;
{
int c;
for ( ; (c= *s) && c != SEP && c != '*'; s++)
*buf++ = (c != '_' ? c : ' ');
*buf=0;
}
gtype(s)
char *s;
{
while (*s && *s!= '*')
s++;
return (*s ? s[1] - '0' : 0);
}
compare(s1, s2)
char *s1, *s2;
{
/* compare last names */
while (*s1++== *s2++)
{
if (*s1==0) return(SAME);
if (*s1==' ') break;
}
if (*s1 != ' ' || *s2 != ' ') return(DIFFERENT);
while (*s1==' ') s1++;
while (*s2==' ') s2++;
#/* compare first initials */
if (*s1++ != *s2++) return (DIFFERENT);
while (*s1==' ') s1++;
while (*s2==' ') s2++;
/* if no middle initials OK */
if (*s1==0 || *s2==0) return(SAME);
/* but if middle initials must be same */
if (*s1==*s2) return(SAME);
return (DIFFERENT);
}
datetrim(p)
char *p;
{
if (isdigit(p[0])&& isdigit(p[1]))
{
while(isdigit(*p))p++;
*p=0;
}
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.