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