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: }

Defined functions

getargs defined in line 220; used 2 times
ispp defined in line 260; used 1 times
main defined in line 5; never used
prefix defined in line 236; used 3 times
sprefix defined in line 254; used 1 times
  • in line 91
substr defined in line 244; used 2 times

Defined variables

months defined in line 3; used 2 times
Last modified: 1981-07-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 985
Valid CSS Valid XHTML 1.0 Strict