Annotation of 43BSDReno/contrib/bib/src/listrefs.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)listrefs.c 2.5     10/12/84";
        !             3: #endif not lint
        !             4: /*
        !             5:         Listrefs - list references for bib system
        !             6: 
        !             7:         Authored by: Tim Budd, University of Arizona, 1983.
        !             8:                 lookup routines written by gary levin 2/82
        !             9: 
        !            10:                 version 7/4/83
        !            11: 
        !            12:         Various modifications suggested by:
        !            13:                 David Cherveny - Duke University Medical Center
        !            14:                 Phil Garrison - UC Berkeley
        !            15:                 M. J. Hawley - Yale University
        !            16: 
        !            17: 
        !            18: 
        !            19: 
        !            20:                                                         */
        !            21: # include <stdio.h>
        !            22: # include <ctype.h>
        !            23: # include "bib.h"
        !            24: # include "streams.h"
        !            25: # define MAXLIST 2000  /* maximum number of references that can be listed */
        !            26: # define getch(c,fd) (c = getc(fd))
        !            27: 
        !            28: FILE *tfd;
        !            29: 
        !            30: #ifndef INCORE
        !            31: FILE *rfd;                      /* reference file position */
        !            32: char reffile[] = TMPREFFILE;    /* temporary file (see bib.h) */
        !            33: #endif INCORE
        !            34: struct refinfo refinfo[MAXLIST];      /* references temporary file, seek positions */
        !            35: struct refinfo *refshash[HASHSIZE];
        !            36: long int rend = 1;              /* last used position in reference file */
        !            37: int numrefs = 0;               /* number of references */
        !            38: extern int sort;                /* see if things are to be sorted */
        !            39: extern char bibfname[];
        !            40: extern int biblineno;
        !            41: 
        !            42: #include <signal.h>
        !            43: main(argc, argv)
        !            44:    int argc;
        !            45:    char **argv;
        !            46: {  char defult[120];
        !            47:    int  i, rcomp(), intr();
        !            48: 
        !            49:    strcpy(BMACLIB, N_BMACLIB);
        !            50:    strcpy(COMFILE, N_COMFILE);
        !            51:    strcpy(DEFSTYLE, N_DEFSTYLE);
        !            52: 
        !            53:    signal(SIGINT, intr);
        !            54:    tfd = stdout;
        !            55:    strcpy(defult, BMACLIB);
        !            56:    strcat(defult,"/bib.list");
        !            57: #ifndef INCORE
        !            58:    mktemp(reffile);
        !            59:    rfd = fopen(reffile,"w+");
        !            60:    if (rfd == NULL)
        !            61:       error("can't open temporary reference file");
        !            62:    putc('x', rfd);      /* put garbage in first position */
        !            63: #endif not INCORE
        !            64: 
        !            65:    doargs(argc, argv, defult);
        !            66: 
        !            67:    if (sort)
        !            68:       qsort(refinfo, numrefs, sizeof(struct refinfo), rcomp);
        !            69:    makecites();
        !            70:    disambiguate();
        !            71: 
        !            72:    for (i = 0; i < numrefs; i++)
        !            73:       dumpref(i, stdout);
        !            74: 
        !            75:    cleanup(0);
        !            76: }
        !            77: intr()
        !            78: {
        !            79:   cleanup(1);
        !            80: }
        !            81: cleanup(val)
        !            82: {
        !            83: #ifndef INCORE
        !            84:   fclose(rfd);
        !            85:   unlink(reffile);
        !            86: #endif not INCORE
        !            87:   exit(val);
        !            88: }
        !            89: 
        !            90: /* rdtext - process a file */
        !            91:    rdtext(ifile)
        !            92:    FILE *ifile;
        !            93: {  char c, *p, rec[REFSIZE];
        !            94:    int i;
        !            95:    int hash, lg;
        !            96: 
        !            97:    biblineno = 1;
        !            98:    for (;;) {
        !            99:       while (getch(c, ifile) == '\n')
        !           100:          biblineno++;   /* skip leading newlines */
        !           101:       if (c == EOF)
        !           102:          return;
        !           103: 
        !           104:       p = rec;          /* read a reference */
        !           105:       for (;;) {
        !           106:          for (*p++ = c; getch(c, ifile) != '\n'; )
        !           107:             if (c == EOF)
        !           108:                error("ill formed reference file");
        !           109:             else
        !           110:                *p++ = c;
        !           111:          if (getch(c, ifile) == '\n' || c == EOF) {
        !           112:             biblineno++;
        !           113:             *p++ = '\n';
        !           114:             break;
        !           115:             }
        !           116:          if (c == '.' || c == '%')
        !           117:             *p++ = '\n';
        !           118:          else
        !           119:             *p++ = ' ';
        !           120:          }
        !           121: 
        !           122:       *p = 0;
        !           123:       expand(rec);
        !           124: 
        !           125:       /* didn't match any existing reference, create new one */
        !           126:       if (numrefs >= MAXLIST)
        !           127:        error("too many references, max of %d", MAXLIST);
        !           128:       hash = strhash(rec);
        !           129:       lg = strlen(rec) + 1;
        !           130:       refinfo[numrefs].ri_pos = rend;
        !           131:       refinfo[numrefs].ri_length = lg;
        !           132:       refinfo[numrefs].ri_hp = refshash[hash];
        !           133:       refinfo[numrefs].ri_n = numrefs;
        !           134:       refshash[hash] = &refinfo[numrefs];
        !           135:       wrref(&refinfo[numrefs], rec);
        !           136:       numrefs++;
        !           137:       }
        !           138: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.