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