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