xref: /csrg-svn/old/refer/NOTUSED/kaiser.c (revision 12297)
1*12297Stut #ifndef lint
2*12297Stut static char *sccsid = "@(#)kaiser.c	4.1 (Berkeley) 05/06/83";
3*12297Stut #endif
4*12297Stut 
5*12297Stut #include <stdio.h>
6*12297Stut #include <ctype.h>
7*12297Stut 
8*12297Stut char *months[] {
9*12297Stut 	"Jan", "Feb", "Mar", "Apr", "May", "Jun",
10*12297Stut 	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec", 0};
11*12297Stut 
12*12297Stut main()
13*12297Stut {
14*12297Stut 	int state 1000, i, book, volume, corp, report;
15*12297Stut 	int na;
16*12297Stut 	char *v[20], **vv, **rr;
17*12297Stut 	char ubuff[1000], *up;
18*12297Stut 	char line[100];
19*12297Stut 	char *p, *s, *r, *q;
20*12297Stut 	while (gets(line))
21*12297Stut 	{
22*12297Stut 		if (line[1]>'9' || line[1]<'0') continue;
23*12297Stut 		switch(line[0])
24*12297Stut 		{
25*12297Stut 		case 'T':
26*12297Stut 			if (state > 'T')
27*12297Stut 			{
28*12297Stut 				book=0;
29*12297Stut 				report=0;
30*12297Stut 				printf("\n%%T ");
31*12297Stut 			}
32*12297Stut 			printf("%s\n", line+18);
33*12297Stut 			state='T';
34*12297Stut 			na = getargs(line+18, v);
35*12297Stut 			for(i=0;i<na;i++)
36*12297Stut 				if (strcmp(v[i], "(Book)")==0)
37*12297Stut 					book=1;
38*12297Stut 			continue;
39*12297Stut 		case 'A':
40*12297Stut 			state = 'A';
41*12297Stut 			na=getargs(line+18, vv=v);
42*12297Stut 			if (na<=0) continue;
43*12297Stut 			while (na>0)
44*12297Stut 			{
45*12297Stut 				printf("%%A ");
46*12297Stut 				corp=0;
47*12297Stut 				for(p=vv[1]; *p; p++)
48*12297Stut 					if (islower(*p))
49*12297Stut 						corp=1;
50*12297Stut 				if (corp==0)
51*12297Stut 				{
52*12297Stut 					for(p=vv[1]; *p; p++)
53*12297Stut 						printf("%c. ", *p);
54*12297Stut 					if (na>2 &&strcmp(vv[2], "+"))
55*12297Stut 					{
56*12297Stut 						printf("%s", vv[0]);
57*12297Stut 						if (strcmp(vv[2], "Jr.")==0)
58*12297Stut 							printf(",");
59*12297Stut 						printf(" %s\n",vv[2]);
60*12297Stut 						vv++;
61*12297Stut 						na--;
62*12297Stut 					}
63*12297Stut 					else
64*12297Stut 						printf("%s\n", vv[0]);
65*12297Stut 				}
66*12297Stut 				else
67*12297Stut 					printf("%s %s\n",vv[0],vv[1]);
68*12297Stut 				vv+=2;
69*12297Stut 				na-=2;
70*12297Stut 				if (strcmp(vv[0], "+")==0)
71*12297Stut 				{
72*12297Stut 					vv++;
73*12297Stut 					na--;
74*12297Stut 				}
75*12297Stut 			}
76*12297Stut 			continue;
77*12297Stut 		case 'U':
78*12297Stut 			if (state!='U')
79*12297Stut 				ubuff[0]=0;
80*12297Stut 			else
81*12297Stut 				strcat(ubuff, " ");
82*12297Stut 			state = 'U';
83*12297Stut 			strcat(ubuff, line+18);
84*12297Stut 			if (line[2]=='.')
85*12297Stut 			{ /* end of item */
86*12297Stut 				p=ubuff; /*start*/
87*12297Stut 				volume=0;
88*12297Stut 				for(s=ubuff; *s; s++)
89*12297Stut 					if (s[-1]==' ' && prefix("Vol", s))
90*12297Stut 					{
91*12297Stut 						for(q=s-1; q>ubuff; q--)
92*12297Stut 						{
93*12297Stut 							if (*q==' ' || *q==',') *q=0;
94*12297Stut 							else break;
95*12297Stut 						}
96*12297Stut 						volume=1;
97*12297Stut 						break;
98*12297Stut 					}
99*12297Stut 				if (*s==0)
100*12297Stut 					for(s=ubuff; *s && (*s!=',' || sprefix("Inc", s+1)); s++)
101*12297Stut 						;
102*12297Stut 				else
103*12297Stut 					s++;
104*12297Stut 				if (*s==',')*s++=0;
105*12297Stut 				if (book)
106*12297Stut 					printf("%%I %s\n",ubuff);
107*12297Stut 				else if (volume)
108*12297Stut 					printf("%%J %s\n", ubuff);
109*12297Stut 				else if (substr(ubuff, "Report")!=0)
110*12297Stut 				{
111*12297Stut 					report=1;
112*12297Stut 					printf("%%R %s\n", ubuff);
113*12297Stut 				}
114*12297Stut 				else
115*12297Stut 					printf("%%J %s\n", ubuff);
116*12297Stut 				if (volume)
117*12297Stut 				{
118*12297Stut 					s += 3; /* Vol */
119*12297Stut 					if (*s=='.') s++;
120*12297Stut 					while (*s==' ')s++;
121*12297Stut 					printf("%%V ");
122*12297Stut 					while (*s && *s != ' ' && *s!=',' && *s!=';' && *s!= ':')
123*12297Stut 						putchar(*s++);
124*12297Stut 					putchar('\n');
125*12297Stut 					if (*s==':')
126*12297Stut 					{
127*12297Stut 						printf("%%N ");
128*12297Stut 						while (*s==' ')s++;
129*12297Stut 						while (isdigit(*s))
130*12297Stut 							putchar(*s++);
131*12297Stut 						putchar('\n');
132*12297Stut 					}
133*12297Stut 					*s++=0;
134*12297Stut 					while (*s==' ')*s++=0;
135*12297Stut 					if (s[0]=='N' && s[1]=='o' && (s[2]==' '||s[2]=='.'))
136*12297Stut 					{
137*12297Stut 						s+=2;
138*12297Stut 						while (*s==' '||*s=='.')s++;
139*12297Stut 						printf("%%N ");
140*12297Stut 						while (isdigit(*s)||*s=='-')
141*12297Stut 							putchar(*s++);
142*12297Stut 						putchar('\n');
143*12297Stut 					}
144*12297Stut 					if (*s==',') *s++=0;
145*12297Stut 				}
146*12297Stut 				for(rr=months; *rr; rr++)
147*12297Stut 				{
148*12297Stut 					q= substr(s, *rr);
149*12297Stut 					if (q)
150*12297Stut 					{
151*12297Stut 						for(r=q; *r; r++);
152*12297Stut 						r--;
153*12297Stut 						if (*r=='.')*r=0;
154*12297Stut 						printf("%%D %s\n",q);
155*12297Stut 						*(q-1)=0;
156*12297Stut 						break;
157*12297Stut 					}
158*12297Stut 				}
159*12297Stut 				if (*rr==0)
160*12297Stut 				{
161*12297Stut 					for(q=s; *q; q++)
162*12297Stut 					{
163*12297Stut 						if (q[0]=='1' && q[1]=='9' && (q[4]==0 || (q[4]=='.' && q[5]==0)))
164*12297Stut 						{
165*12297Stut 							if (q[4]=='.') q[4]=0;
166*12297Stut 							printf("%%D %s\n",q);
167*12297Stut 							rr=months;
168*12297Stut 							q[-1]=0;
169*12297Stut 							if (q==s) q[0]=0;
170*12297Stut 							break;
171*12297Stut 						}
172*12297Stut 					}
173*12297Stut 				}
174*12297Stut 				if (*rr==0) /* no date */
175*12297Stut 					printf("%%D 19xx\n");
176*12297Stut 				/* if book bite off next field for city, if report for issuer */
177*12297Stut 				if (book)
178*12297Stut 				{
179*12297Stut 					for(q=s; *q && *q != ','; q++)
180*12297Stut 						;
181*12297Stut 					if (*q==',')
182*12297Stut 					{
183*12297Stut 						r=q;
184*12297Stut 						r++;
185*12297Stut 						while (*r==' ')r++;
186*12297Stut 						if (isupper(r[0]) && isupper(r[1]))
187*12297Stut 						{
188*12297Stut 							r+=2;
189*12297Stut 							*r++=0;
190*12297Stut 							while (*r==' ')r++;
191*12297Stut 						}
192*12297Stut 						else
193*12297Stut 							*q=0;
194*12297Stut 						printf("%%C %s\n", s);
195*12297Stut 						s=r;
196*12297Stut 					}
197*12297Stut 				}
198*12297Stut 				for(q=s; *q; q++)
199*12297Stut 				{
200*12297Stut 					if (q[0]==' ' && q[1]=='p' && (q[2]=='p'||q[2]==0))
201*12297Stut 					{
202*12297Stut 						for(r=q; r>s; r--)
203*12297Stut 						{
204*12297Stut 							if (*r==' ' || *r==',')
205*12297Stut 								*r=0;
206*12297Stut 						}
207*12297Stut 						*q=0;
208*12297Stut 						q+=2;
209*12297Stut 						if (q[0]=='p')q++;
210*12297Stut 						while (*q==' '||*q=='.')q++;
211*12297Stut 						r=q;
212*12297Stut 						while (isdigit(*q)||*q=='.'||*q=='-'||isalpha(*q))q++;
213*12297Stut 						*q++=0;
214*12297Stut 						while (*q==' ')q++;
215*12297Stut 						printf("%%P %s\n",r);
216*12297Stut 						break;
217*12297Stut 					}
218*12297Stut 				}
219*12297Stut 				s=ispp(s);
220*12297Stut 				while (*s==' ')s++;
221*12297Stut 				while (*q==' ')q++;
222*12297Stut 				if (*s||*q)
223*12297Stut 					printf("%%O %s %s\n", *s?s:"", *q?q:"");
224*12297Stut 			}
225*12297Stut 			continue;
226*12297Stut 		}
227*12297Stut 	}
228*12297Stut }
229*12297Stut 
230*12297Stut getargs(s, arps)
231*12297Stut char *s, *arps[];
232*12297Stut {
233*12297Stut 	int i;
234*12297Stut 	i = 0;
235*12297Stut 	while (1)
236*12297Stut 	{
237*12297Stut 		arps[i++]=s;
238*12297Stut 		while (*s != 0 && *s!=' '&& *s != '\t')s++;
239*12297Stut 		if (*s==0) break;
240*12297Stut 		*s++ =0;
241*12297Stut 		while (*s==' ' || *s=='\t')s++;
242*12297Stut 		if (*s==0)break;
243*12297Stut 	}
244*12297Stut 	return(i);
245*12297Stut }
246*12297Stut 
247*12297Stut prefix(small, big)
248*12297Stut char *small, *big;
249*12297Stut {
250*12297Stut 	int c;
251*12297Stut 	while ((c= *small++) == *big++)
252*12297Stut 		if (c==0) return(1);
253*12297Stut 	return(c==0);
254*12297Stut }
255*12297Stut 
256*12297Stut substr(big, small)
257*12297Stut char *small, *big;
258*12297Stut {
259*12297Stut 	while (*big)
260*12297Stut 		if (prefix(small, big))
261*12297Stut 			return(big);
262*12297Stut 		else
263*12297Stut 			big++;
264*12297Stut 	return(0);
265*12297Stut }
266*12297Stut 
267*12297Stut sprefix(small, big)
268*12297Stut char *small, *big;
269*12297Stut {
270*12297Stut 	while (*big==' ') big++;
271*12297Stut 	return(prefix(small,big));
272*12297Stut }
273*12297Stut 
274*12297Stut ispp(s)
275*12297Stut char *s;
276*12297Stut {
277*12297Stut 	static char buff[50];
278*12297Stut 	char *p, *t;
279*12297Stut 	p=s;
280*12297Stut 	while (*p==' ') p++;
281*12297Stut 	if (!isdigit(*p)) return(s);
282*12297Stut 	t=p;
283*12297Stut 	while (isdigit(*p))p++;
284*12297Stut 	if (p[0]!='p' || p[1]!='p') return(s);
285*12297Stut 	*p=0;
286*12297Stut 	sprintf(buff, "%spp.", t);
287*12297Stut 	return(buff);
288*12297Stut }
289