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