xref: /csrg-svn/contrib/bib/src/listrefs.c (revision 12912)
1*12912Sgarrison /*
2*12912Sgarrison         list all documents in ref index file
3*12912Sgarrison                                                         */
4*12912Sgarrison # include <stdio.h>
5*12912Sgarrison # include <ctype.h>
6*12912Sgarrison # include "bib.h"
7*12912Sgarrison # include "streams.h"
8*12912Sgarrison # define MAXLINE 250
9*12912Sgarrison 
10*12912Sgarrison FILE *tfd;
11*12912Sgarrison int  count = 1;
12*12912Sgarrison char refs[REFSIZE], *rp;
13*12912Sgarrison 
14*12912Sgarrison main(argc, argv)
15*12912Sgarrison    int argc;
16*12912Sgarrison    char **argv;
17*12912Sgarrison {
18*12912Sgarrison    tfd = stdout;
19*12912Sgarrison    doargs(argc, argv, "/usr/lib/bmac/bib.list");
20*12912Sgarrison    exit(0);
21*12912Sgarrison }
22*12912Sgarrison 
23*12912Sgarrison /* rdtext - process a file */
24*12912Sgarrison    rdtext(ifile)
25*12912Sgarrison    FILE *ifile;
26*12912Sgarrison {
27*12912Sgarrison    long int start, length;
28*12912Sgarrison    int  i, numauths, numeds;
29*12912Sgarrison    char *p, c;
30*12912Sgarrison 
31*12912Sgarrison    start = length = 0L;
32*12912Sgarrison 
33*12912Sgarrison    for (;;) {
34*12912Sgarrison       start = nextrecord(ifile, start + length);
35*12912Sgarrison       if (start == EOF) break;
36*12912Sgarrison       length = recsize(ifile, start);
37*12912Sgarrison 
38*12912Sgarrison       /* count number of authors */
39*12912Sgarrison       numauths = numeds = 0;
40*12912Sgarrison       p = refs;
41*12912Sgarrison       for (i = length; i > 0; i--)
42*12912Sgarrison          if ((*p++ = getc(ifile)) == '%') {
43*12912Sgarrison             i--;
44*12912Sgarrison             c = *p++ = getc(ifile);
45*12912Sgarrison             if (c == 'A')
46*12912Sgarrison                numauths++;
47*12912Sgarrison             else if (c == 'E')
48*12912Sgarrison                numeds++;
49*12912Sgarrison             }
50*12912Sgarrison 
51*12912Sgarrison       *p = 0;
52*12912Sgarrison       expand(refs);
53*12912Sgarrison       rp = refs;
54*12912Sgarrison       dumpref(stdout, numauths, numeds);
55*12912Sgarrison 
56*12912Sgarrison      }
57*12912Sgarrison }
58*12912Sgarrison 
59*12912Sgarrison /* get a line from reference file */
60*12912Sgarrison    char refgets(line)
61*12912Sgarrison    char line[];
62*12912Sgarrison {
63*12912Sgarrison    char c, *p;
64*12912Sgarrison 
65*12912Sgarrison    if (*rp == 0)
66*12912Sgarrison       return(0);
67*12912Sgarrison    for (p = line;;) {
68*12912Sgarrison       while ((c = *rp++) != '\n')
69*12912Sgarrison          if (c == 0)
70*12912Sgarrison             return(0);
71*12912Sgarrison          else
72*12912Sgarrison             *p++ = c;
73*12912Sgarrison       c = *rp;
74*12912Sgarrison       if (c == 0)
75*12912Sgarrison          break;
76*12912Sgarrison       if (c == '.' || c == '%' || c == '\n')
77*12912Sgarrison          break;
78*12912Sgarrison       *p++ = ' ';
79*12912Sgarrison       }
80*12912Sgarrison    *p++ = '\n';
81*12912Sgarrison    *p = 0;
82*12912Sgarrison    return(' ');
83*12912Sgarrison }
84*12912Sgarrison 
85*12912Sgarrison /* dump reference */
86*12912Sgarrison    dumpref(ofile, maxauths, maxeds)
87*12912Sgarrison    FILE *ofile;
88*12912Sgarrison    int maxauths, maxeds;
89*12912Sgarrison {
90*12912Sgarrison    char line[250], *p;
91*12912Sgarrison    int  numauths, numeds;
92*12912Sgarrison 
93*12912Sgarrison    fprintf(tfd, ".[-\n");
94*12912Sgarrison    fprintf(tfd, ".ds [F %d\n", count++);
95*12912Sgarrison    numauths = numeds = 0;
96*12912Sgarrison    while (refgets(line) != 0) {
97*12912Sgarrison       if (line[0] == '\n')
98*12912Sgarrison          break;
99*12912Sgarrison       else if (line[0] == '.')
100*12912Sgarrison          fprintf(ofile, "%s\n", line);
101*12912Sgarrison       else {
102*12912Sgarrison          if (line[0] == '%') {
103*12912Sgarrison             for (p = &line[2]; isspace(*p); p++);
104*12912Sgarrison             if (line[1] == 'A')
105*12912Sgarrison                numauths++;
106*12912Sgarrison             else if (line[1] == 'E')
107*12912Sgarrison                numeds++;
108*12912Sgarrison             doline(line[1], p, numauths, maxauths, numeds, maxeds, ofile);
109*12912Sgarrison             }
110*12912Sgarrison          }
111*12912Sgarrison       }
112*12912Sgarrison    fprintf(tfd, ".][\n");
113*12912Sgarrison }
114