xref: /csrg-svn/old/refer/NOTUSED/kaiser.c (revision 48291)
1*48291Sbostic /*-
2*48291Sbostic  * %sccs.include.proprietary.c%
3*48291Sbostic  */
4*48291Sbostic 
512297Stut #ifndef lint
6*48291Sbostic static char sccsid[] = "@(#)kaiser.c	4.2 (Berkeley) 04/18/91";
7*48291Sbostic #endif /* not lint */
812297Stut 
912297Stut #include <stdio.h>
1012297Stut #include <ctype.h>
1112297Stut 
1212297Stut char *months[] {
1312297Stut 	"Jan", "Feb", "Mar", "Apr", "May", "Jun",
1412297Stut 	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec", 0};
1512297Stut 
main()1612297Stut main()
1712297Stut {
1812297Stut 	int state 1000, i, book, volume, corp, report;
1912297Stut 	int na;
2012297Stut 	char *v[20], **vv, **rr;
2112297Stut 	char ubuff[1000], *up;
2212297Stut 	char line[100];
2312297Stut 	char *p, *s, *r, *q;
2412297Stut 	while (gets(line))
2512297Stut 	{
2612297Stut 		if (line[1]>'9' || line[1]<'0') continue;
2712297Stut 		switch(line[0])
2812297Stut 		{
2912297Stut 		case 'T':
3012297Stut 			if (state > 'T')
3112297Stut 			{
3212297Stut 				book=0;
3312297Stut 				report=0;
3412297Stut 				printf("\n%%T ");
3512297Stut 			}
3612297Stut 			printf("%s\n", line+18);
3712297Stut 			state='T';
3812297Stut 			na = getargs(line+18, v);
3912297Stut 			for(i=0;i<na;i++)
4012297Stut 				if (strcmp(v[i], "(Book)")==0)
4112297Stut 					book=1;
4212297Stut 			continue;
4312297Stut 		case 'A':
4412297Stut 			state = 'A';
4512297Stut 			na=getargs(line+18, vv=v);
4612297Stut 			if (na<=0) continue;
4712297Stut 			while (na>0)
4812297Stut 			{
4912297Stut 				printf("%%A ");
5012297Stut 				corp=0;
5112297Stut 				for(p=vv[1]; *p; p++)
5212297Stut 					if (islower(*p))
5312297Stut 						corp=1;
5412297Stut 				if (corp==0)
5512297Stut 				{
5612297Stut 					for(p=vv[1]; *p; p++)
5712297Stut 						printf("%c. ", *p);
5812297Stut 					if (na>2 &&strcmp(vv[2], "+"))
5912297Stut 					{
6012297Stut 						printf("%s", vv[0]);
6112297Stut 						if (strcmp(vv[2], "Jr.")==0)
6212297Stut 							printf(",");
6312297Stut 						printf(" %s\n",vv[2]);
6412297Stut 						vv++;
6512297Stut 						na--;
6612297Stut 					}
6712297Stut 					else
6812297Stut 						printf("%s\n", vv[0]);
6912297Stut 				}
7012297Stut 				else
7112297Stut 					printf("%s %s\n",vv[0],vv[1]);
7212297Stut 				vv+=2;
7312297Stut 				na-=2;
7412297Stut 				if (strcmp(vv[0], "+")==0)
7512297Stut 				{
7612297Stut 					vv++;
7712297Stut 					na--;
7812297Stut 				}
7912297Stut 			}
8012297Stut 			continue;
8112297Stut 		case 'U':
8212297Stut 			if (state!='U')
8312297Stut 				ubuff[0]=0;
8412297Stut 			else
8512297Stut 				strcat(ubuff, " ");
8612297Stut 			state = 'U';
8712297Stut 			strcat(ubuff, line+18);
8812297Stut 			if (line[2]=='.')
8912297Stut 			{ /* end of item */
9012297Stut 				p=ubuff; /*start*/
9112297Stut 				volume=0;
9212297Stut 				for(s=ubuff; *s; s++)
9312297Stut 					if (s[-1]==' ' && prefix("Vol", s))
9412297Stut 					{
9512297Stut 						for(q=s-1; q>ubuff; q--)
9612297Stut 						{
9712297Stut 							if (*q==' ' || *q==',') *q=0;
9812297Stut 							else break;
9912297Stut 						}
10012297Stut 						volume=1;
10112297Stut 						break;
10212297Stut 					}
10312297Stut 				if (*s==0)
10412297Stut 					for(s=ubuff; *s && (*s!=',' || sprefix("Inc", s+1)); s++)
10512297Stut 						;
10612297Stut 				else
10712297Stut 					s++;
10812297Stut 				if (*s==',')*s++=0;
10912297Stut 				if (book)
11012297Stut 					printf("%%I %s\n",ubuff);
11112297Stut 				else if (volume)
11212297Stut 					printf("%%J %s\n", ubuff);
11312297Stut 				else if (substr(ubuff, "Report")!=0)
11412297Stut 				{
11512297Stut 					report=1;
11612297Stut 					printf("%%R %s\n", ubuff);
11712297Stut 				}
11812297Stut 				else
11912297Stut 					printf("%%J %s\n", ubuff);
12012297Stut 				if (volume)
12112297Stut 				{
12212297Stut 					s += 3; /* Vol */
12312297Stut 					if (*s=='.') s++;
12412297Stut 					while (*s==' ')s++;
12512297Stut 					printf("%%V ");
12612297Stut 					while (*s && *s != ' ' && *s!=',' && *s!=';' && *s!= ':')
12712297Stut 						putchar(*s++);
12812297Stut 					putchar('\n');
12912297Stut 					if (*s==':')
13012297Stut 					{
13112297Stut 						printf("%%N ");
13212297Stut 						while (*s==' ')s++;
13312297Stut 						while (isdigit(*s))
13412297Stut 							putchar(*s++);
13512297Stut 						putchar('\n');
13612297Stut 					}
13712297Stut 					*s++=0;
13812297Stut 					while (*s==' ')*s++=0;
13912297Stut 					if (s[0]=='N' && s[1]=='o' && (s[2]==' '||s[2]=='.'))
14012297Stut 					{
14112297Stut 						s+=2;
14212297Stut 						while (*s==' '||*s=='.')s++;
14312297Stut 						printf("%%N ");
14412297Stut 						while (isdigit(*s)||*s=='-')
14512297Stut 							putchar(*s++);
14612297Stut 						putchar('\n');
14712297Stut 					}
14812297Stut 					if (*s==',') *s++=0;
14912297Stut 				}
15012297Stut 				for(rr=months; *rr; rr++)
15112297Stut 				{
15212297Stut 					q= substr(s, *rr);
15312297Stut 					if (q)
15412297Stut 					{
15512297Stut 						for(r=q; *r; r++);
15612297Stut 						r--;
15712297Stut 						if (*r=='.')*r=0;
15812297Stut 						printf("%%D %s\n",q);
15912297Stut 						*(q-1)=0;
16012297Stut 						break;
16112297Stut 					}
16212297Stut 				}
16312297Stut 				if (*rr==0)
16412297Stut 				{
16512297Stut 					for(q=s; *q; q++)
16612297Stut 					{
16712297Stut 						if (q[0]=='1' && q[1]=='9' && (q[4]==0 || (q[4]=='.' && q[5]==0)))
16812297Stut 						{
16912297Stut 							if (q[4]=='.') q[4]=0;
17012297Stut 							printf("%%D %s\n",q);
17112297Stut 							rr=months;
17212297Stut 							q[-1]=0;
17312297Stut 							if (q==s) q[0]=0;
17412297Stut 							break;
17512297Stut 						}
17612297Stut 					}
17712297Stut 				}
17812297Stut 				if (*rr==0) /* no date */
17912297Stut 					printf("%%D 19xx\n");
18012297Stut 				/* if book bite off next field for city, if report for issuer */
18112297Stut 				if (book)
18212297Stut 				{
18312297Stut 					for(q=s; *q && *q != ','; q++)
18412297Stut 						;
18512297Stut 					if (*q==',')
18612297Stut 					{
18712297Stut 						r=q;
18812297Stut 						r++;
18912297Stut 						while (*r==' ')r++;
19012297Stut 						if (isupper(r[0]) && isupper(r[1]))
19112297Stut 						{
19212297Stut 							r+=2;
19312297Stut 							*r++=0;
19412297Stut 							while (*r==' ')r++;
19512297Stut 						}
19612297Stut 						else
19712297Stut 							*q=0;
19812297Stut 						printf("%%C %s\n", s);
19912297Stut 						s=r;
20012297Stut 					}
20112297Stut 				}
20212297Stut 				for(q=s; *q; q++)
20312297Stut 				{
20412297Stut 					if (q[0]==' ' && q[1]=='p' && (q[2]=='p'||q[2]==0))
20512297Stut 					{
20612297Stut 						for(r=q; r>s; r--)
20712297Stut 						{
20812297Stut 							if (*r==' ' || *r==',')
20912297Stut 								*r=0;
21012297Stut 						}
21112297Stut 						*q=0;
21212297Stut 						q+=2;
21312297Stut 						if (q[0]=='p')q++;
21412297Stut 						while (*q==' '||*q=='.')q++;
21512297Stut 						r=q;
21612297Stut 						while (isdigit(*q)||*q=='.'||*q=='-'||isalpha(*q))q++;
21712297Stut 						*q++=0;
21812297Stut 						while (*q==' ')q++;
21912297Stut 						printf("%%P %s\n",r);
22012297Stut 						break;
22112297Stut 					}
22212297Stut 				}
22312297Stut 				s=ispp(s);
22412297Stut 				while (*s==' ')s++;
22512297Stut 				while (*q==' ')q++;
22612297Stut 				if (*s||*q)
22712297Stut 					printf("%%O %s %s\n", *s?s:"", *q?q:"");
22812297Stut 			}
22912297Stut 			continue;
23012297Stut 		}
23112297Stut 	}
23212297Stut }
23312297Stut 
getargs(s,arps)23412297Stut getargs(s, arps)
23512297Stut char *s, *arps[];
23612297Stut {
23712297Stut 	int i;
23812297Stut 	i = 0;
23912297Stut 	while (1)
24012297Stut 	{
24112297Stut 		arps[i++]=s;
24212297Stut 		while (*s != 0 && *s!=' '&& *s != '\t')s++;
24312297Stut 		if (*s==0) break;
24412297Stut 		*s++ =0;
24512297Stut 		while (*s==' ' || *s=='\t')s++;
24612297Stut 		if (*s==0)break;
24712297Stut 	}
24812297Stut 	return(i);
24912297Stut }
25012297Stut 
prefix(small,big)25112297Stut prefix(small, big)
25212297Stut char *small, *big;
25312297Stut {
25412297Stut 	int c;
25512297Stut 	while ((c= *small++) == *big++)
25612297Stut 		if (c==0) return(1);
25712297Stut 	return(c==0);
25812297Stut }
25912297Stut 
substr(big,small)26012297Stut substr(big, small)
26112297Stut char *small, *big;
26212297Stut {
26312297Stut 	while (*big)
26412297Stut 		if (prefix(small, big))
26512297Stut 			return(big);
26612297Stut 		else
26712297Stut 			big++;
26812297Stut 	return(0);
26912297Stut }
27012297Stut 
sprefix(small,big)27112297Stut sprefix(small, big)
27212297Stut char *small, *big;
27312297Stut {
27412297Stut 	while (*big==' ') big++;
27512297Stut 	return(prefix(small,big));
27612297Stut }
27712297Stut 
ispp(s)27812297Stut ispp(s)
27912297Stut char *s;
28012297Stut {
28112297Stut 	static char buff[50];
28212297Stut 	char *p, *t;
28312297Stut 	p=s;
28412297Stut 	while (*p==' ') p++;
28512297Stut 	if (!isdigit(*p)) return(s);
28612297Stut 	t=p;
28712297Stut 	while (isdigit(*p))p++;
28812297Stut 	if (p[0]!='p' || p[1]!='p') return(s);
28912297Stut 	*p=0;
29012297Stut 	sprintf(buff, "%spp.", t);
29112297Stut 	return(buff);
29212297Stut }
293