static char sccsid
[] = "@(#)listrefs.c 2.3 %G%";
Listrefs - list references for bib system
Authored by: Tim Budd, University of Arizona, 1983.
lookup routines written by gary levin 2/82
Various modifications suggested by:
David Cherveny - Duke University Medical Center
Phil Garrison - UC Berkeley
M. J. Hawley - Yale University
# define MAXLIST 2000 /* maximum number of references that can be listed */
# define getch(c,fd) (c = getc(fd))
FILE *rfd
; /* reference file position */
char reffile
[] = TMPREFFILE
; /* temporary file (see bib.h) */
struct refinfo refinfo
[MAXLIST
]; /* references temporary file, seek positions */
struct refinfo
*refshash
[HASHSIZE
];
long int rend
= 1; /* last used position in reference file */
int numrefs
= -1; /* number of references */
extern int sort
; /* see if things are to be sorted */
strcat(defult
,"/bib.list");
rfd
= fopen(reffile
,"w+");
error("can't open temporary reference file");
putc('x', rfd
); /* put garbage in first position */
doargs(argc
, argv
, defult
);
qsort(refinfo
, numrefs
, sizeof(struct refinfo
), rcomp
);
for (i
= 0; i
< numrefs
; i
++)
/* rdtext - process a file */
{ char c
, *p
, rec
[REFSIZE
];
while (getch(c
, ifile
) == '\n')
biblineno
++; /* skip leading newlines */
p
= rec
; /* read a reference */
for (*p
++ = c
; getch(c
, ifile
) != '\n'; )
error("ill formed reference file");
if (getch(c
, ifile
) == '\n' || c
== EOF
) {
if (c
== '.' || c
== '%')
/* didn't match any existing reference, create new one */
error("too many references, max of %d", MAXLIST
);
refinfo
[numrefs
].ri_pos
= rend
;
refinfo
[numrefs
].ri_length
= lg
;
refinfo
[numrefs
].ri_hp
= refshash
[hash
];
refinfo
[numrefs
].ri_n
= numrefs
;
refshash
[hash
] = &refinfo
[numrefs
];
wrref(&refinfo
[numrefs
], rec
);