1 /*
2 * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
3 * Use is subject to license terms.
4 */
5
6 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
7 /* All Rights Reserved */
8
9 /*
10 * Copyright (c) 1980 Regents of the University of California.
11 * All rights reserved. The Berkeley software License Agreement
12 * specifies the terms and conditions for redistribution.
13 */
14
15 #pragma ident "%Z%%M% %I% %E% SMI"
16
17 #include <locale.h>
18 #include <stdio.h>
19 #include <assert.h>
20 #define unopen(fil) {if (fil != NULL) {fclose(fil); fil = NULL; }}
21
22 extern void err();
23 extern long indexdate, gdate();
24 extern FILE *iopen();
25
26 int ckexist(char *, char *);
27
28 static void
runbib(char * s)29 runbib(char *s)
30 {
31 /* make a file suitable for fgrep */
32 char tmp[200];
33 sprintf(tmp, "/usr/lib/refer/mkey '%s' > '%s.ig'", s, s);
34 system(tmp);
35 }
36
37 int
makefgrep(char * indexname)38 makefgrep(char *indexname)
39 {
40 FILE *fa, *fb;
41 if (ckexist(indexname, ".ig")) {
42 /* existing gfrep -type index */
43 #if D1
44 fprintf(stderr, "found fgrep\n");
45 #endif
46 fa = iopen(indexname, ".ig");
47 fb = iopen(indexname, "");
48 if (gdate(fb) > gdate(fa)) {
49 if (fa != NULL)
50 fclose(fa);
51 runbib(indexname);
52 fa = iopen(indexname, ".ig");
53 }
54 indexdate = gdate(fa);
55 unopen(fa);
56 unopen(fb);
57 } else
58 if (ckexist(indexname, "")) {
59 /* make fgrep */
60 #if D1
61 fprintf(stderr, "make fgrep\n");
62 #endif
63 runbib(indexname);
64 time(&indexdate);
65 } else /* failure */
66 return (0);
67 return (1); /* success */
68 }
69
70 int
ckexist(char * s,char * t)71 ckexist(char *s, char *t)
72 {
73 char fnam[100];
74 strcpy(fnam, s);
75 strcat(fnam, t);
76 return (access(fnam, 04) != -1);
77 }
78
79 FILE *
iopen(char * s,char * t)80 iopen(char *s, char *t)
81 {
82 char fnam[100];
83 FILE *f;
84 strcpy(fnam, s);
85 strcat(fnam, t);
86 f = fopen(fnam, "r");
87 if (f == NULL) {
88 err(gettext("Missing expected file %s"), fnam);
89 exit(1);
90 }
91 return (f);
92 }
93