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