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