xref: /csrg-svn/contrib/bib/src/listrefs.c (revision 13111)
1*13111Srrh #ifndef lint
2*13111Srrh static char sccsid[] = "@(#)listrefs.c	1.2	06/14/83";
3*13111Srrh #endif not lint
4*13111Srrh 
512912Sgarrison /*
612912Sgarrison         list all documents in ref index file
712912Sgarrison                                                         */
812912Sgarrison # include <stdio.h>
912912Sgarrison # include <ctype.h>
1012912Sgarrison # include "bib.h"
1112912Sgarrison # include "streams.h"
1212912Sgarrison # define MAXLINE 250
1312912Sgarrison 
1412912Sgarrison FILE *tfd;
1512912Sgarrison int  count = 1;
1612912Sgarrison char refs[REFSIZE], *rp;
1712912Sgarrison 
1812912Sgarrison main(argc, argv)
1912912Sgarrison    int argc;
2012912Sgarrison    char **argv;
2112912Sgarrison {
2212912Sgarrison    tfd = stdout;
2312912Sgarrison    doargs(argc, argv, "/usr/lib/bmac/bib.list");
2412912Sgarrison    exit(0);
2512912Sgarrison }
2612912Sgarrison 
2712912Sgarrison /* rdtext - process a file */
2812912Sgarrison    rdtext(ifile)
2912912Sgarrison    FILE *ifile;
3012912Sgarrison {
3112912Sgarrison    long int start, length;
3212912Sgarrison    int  i, numauths, numeds;
3312912Sgarrison    char *p, c;
3412912Sgarrison 
3512912Sgarrison    start = length = 0L;
3612912Sgarrison 
3712912Sgarrison    for (;;) {
3812912Sgarrison       start = nextrecord(ifile, start + length);
3912912Sgarrison       if (start == EOF) break;
4012912Sgarrison       length = recsize(ifile, start);
4112912Sgarrison 
4212912Sgarrison       /* count number of authors */
4312912Sgarrison       numauths = numeds = 0;
4412912Sgarrison       p = refs;
4512912Sgarrison       for (i = length; i > 0; i--)
4612912Sgarrison          if ((*p++ = getc(ifile)) == '%') {
4712912Sgarrison             i--;
4812912Sgarrison             c = *p++ = getc(ifile);
4912912Sgarrison             if (c == 'A')
5012912Sgarrison                numauths++;
5112912Sgarrison             else if (c == 'E')
5212912Sgarrison                numeds++;
5312912Sgarrison             }
5412912Sgarrison 
5512912Sgarrison       *p = 0;
5612912Sgarrison       expand(refs);
5712912Sgarrison       rp = refs;
5812912Sgarrison       dumpref(stdout, numauths, numeds);
5912912Sgarrison 
6012912Sgarrison      }
6112912Sgarrison }
6212912Sgarrison 
6312912Sgarrison /* get a line from reference file */
6412912Sgarrison    char refgets(line)
6512912Sgarrison    char line[];
6612912Sgarrison {
6712912Sgarrison    char c, *p;
6812912Sgarrison 
6912912Sgarrison    if (*rp == 0)
7012912Sgarrison       return(0);
7112912Sgarrison    for (p = line;;) {
7212912Sgarrison       while ((c = *rp++) != '\n')
7312912Sgarrison          if (c == 0)
7412912Sgarrison             return(0);
7512912Sgarrison          else
7612912Sgarrison             *p++ = c;
7712912Sgarrison       c = *rp;
7812912Sgarrison       if (c == 0)
7912912Sgarrison          break;
8012912Sgarrison       if (c == '.' || c == '%' || c == '\n')
8112912Sgarrison          break;
8212912Sgarrison       *p++ = ' ';
8312912Sgarrison       }
8412912Sgarrison    *p++ = '\n';
8512912Sgarrison    *p = 0;
8612912Sgarrison    return(' ');
8712912Sgarrison }
8812912Sgarrison 
8912912Sgarrison /* dump reference */
9012912Sgarrison    dumpref(ofile, maxauths, maxeds)
9112912Sgarrison    FILE *ofile;
9212912Sgarrison    int maxauths, maxeds;
9312912Sgarrison {
9412912Sgarrison    char line[250], *p;
9512912Sgarrison    int  numauths, numeds;
9612912Sgarrison 
9712912Sgarrison    fprintf(tfd, ".[-\n");
9812912Sgarrison    fprintf(tfd, ".ds [F %d\n", count++);
9912912Sgarrison    numauths = numeds = 0;
10012912Sgarrison    while (refgets(line) != 0) {
10112912Sgarrison       if (line[0] == '\n')
10212912Sgarrison          break;
10312912Sgarrison       else if (line[0] == '.')
10412912Sgarrison          fprintf(ofile, "%s\n", line);
10512912Sgarrison       else {
10612912Sgarrison          if (line[0] == '%') {
10712912Sgarrison             for (p = &line[2]; isspace(*p); p++);
10812912Sgarrison             if (line[1] == 'A')
10912912Sgarrison                numauths++;
11012912Sgarrison             else if (line[1] == 'E')
11112912Sgarrison                numeds++;
11212912Sgarrison             doline(line[1], p, numauths, maxauths, numeds, maxeds, ofile);
11312912Sgarrison             }
11412912Sgarrison          }
11512912Sgarrison       }
11612912Sgarrison    fprintf(tfd, ".][\n");
11712912Sgarrison }
118