xref: /illumos-gate/usr/src/cmd/refer/hunt8.c (revision 7a6d80f1660abd4755c68cbd094d4a914681d26e)
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 #include <locale.h>
16 #include <stdio.h>
17 #include <assert.h>
18 #define	unopen(fil) {if (fil != NULL) {fclose(fil); fil = NULL; }}
19 
20 extern void err();
21 extern long indexdate, gdate();
22 extern FILE *iopen();
23 
24 int ckexist(char *, char *);
25 
26 static void
27 runbib(char *s)
28 {
29 	/* make a file suitable for fgrep */
30 	char tmp[200];
31 	sprintf(tmp, "/usr/lib/refer/mkey '%s' > '%s.ig'", s, s);
32 	system(tmp);
33 }
34 
35 int
36 makefgrep(char *indexname)
37 {
38 	FILE *fa, *fb;
39 	if (ckexist(indexname, ".ig")) {
40 		/* existing gfrep -type index */
41 #if D1
42 		fprintf(stderr, "found fgrep\n");
43 #endif
44 		fa = iopen(indexname, ".ig");
45 		fb = iopen(indexname, "");
46 		if (gdate(fb) > gdate(fa)) {
47 			if (fa != NULL)
48 				fclose(fa);
49 			runbib(indexname);
50 			fa = iopen(indexname, ".ig");
51 		}
52 		indexdate = gdate(fa);
53 		unopen(fa);
54 		unopen(fb);
55 	} else
56 		if (ckexist(indexname, "")) {
57 			/* make fgrep */
58 #if D1
59 			fprintf(stderr, "make fgrep\n");
60 #endif
61 			runbib(indexname);
62 			time(&indexdate);
63 		} else /* failure */
64 			return (0);
65 	return (1); /* success */
66 }
67 
68 int
69 ckexist(char *s, char *t)
70 {
71 	char fnam[100];
72 	strcpy(fnam, s);
73 	strcat(fnam, t);
74 	return (access(fnam, 04) != -1);
75 }
76 
77 FILE *
78 iopen(char *s, char *t)
79 {
80 	char fnam[100];
81 	FILE *f;
82 	strcpy(fnam, s);
83 	strcat(fnam, t);
84 	f = fopen(fnam, "r");
85 	if (f == NULL) {
86 		err(gettext("Missing expected file %s"), fnam);
87 		exit(1);
88 	}
89 	return (f);
90 }
91