|
|
1.1 ! root 1: /* ! 2: * ! 3: * Things used to handle special requests (eg. manual feed) globally or on a per ! 4: * page basis. Requests are passed through to the translator using the -R option. ! 5: * The argument to -R can be "request", "request:page", or "request:page:file". ! 6: * If page is omitted (as in the first form) or set to 0 request will be applied ! 7: * to the global environment. In all other cases it applies only to the selected ! 8: * page. If a file is given, page must be supplied, and the lookup is in that file ! 9: * rather than *requestfile. ! 10: * ! 11: */ ! 12: ! 13: #include <stdio.h> ! 14: ! 15: #include "gen.h" /* general purpose definitions */ ! 16: #include "request.h" /* a few special definitions */ ! 17: #include "path.h" /* for the default request file */ ! 18: ! 19: Request request[MAXREQUEST]; /* next page or global request */ ! 20: int nextreq = 0; /* goes in request[nextreq] */ ! 21: char *requestfile = REQUESTFILE; /* default lookup file */ ! 22: ! 23: /*****************************************************************************/ ! 24: ! 25: saverequest(want) ! 26: ! 27: char *want; /* grab code for this stuff */ ! 28: ! 29: { ! 30: ! 31: char *page; /* and save it for this page */ ! 32: char *strtok(); ! 33: ! 34: /* ! 35: * ! 36: * Save the request until we get to appropriate page - don't even bother with ! 37: * the lookup right now. Format of *want string is "request", "request:page", or ! 38: * "request:page:file", and we assume we can change the string here as needed. ! 39: * If page is omitted or given as 0 the request will be done globally. If *want ! 40: * includes a file, request and page must also be given, and in that case *file ! 41: * will be used for the lookup. ! 42: * ! 43: */ ! 44: ! 45: if ( nextreq < MAXREQUEST ) { ! 46: request[nextreq].want = strtok(want, ": "); ! 47: if ( (page = strtok(NULL, ": ")) == NULL ) ! 48: request[nextreq].page = 0; ! 49: else request[nextreq].page = atoi(page); ! 50: if ( (request[nextreq].file = strtok(NULL, ": ")) == NULL ) ! 51: request[nextreq].file = requestfile; ! 52: nextreq++; ! 53: } else error(NON_FATAL, "too many requests - ignoring %s", want); ! 54: ! 55: } /* End of saverequest */ ! 56: ! 57: /*****************************************************************************/ ! 58: ! 59: writerequest(page, fp_out) ! 60: ! 61: int page; /* write everything for this page */ ! 62: FILE *fp_out; /* to this file */ ! 63: ! 64: { ! 65: ! 66: int i; /* loop index */ ! 67: ! 68: /* ! 69: * ! 70: * Writes out all the requests that have been saved for page. Page 0 refers to ! 71: * the global environment and is done during initial setup. ! 72: * ! 73: */ ! 74: ! 75: for ( i = 0; i < nextreq; i++ ) ! 76: if ( request[i].page == page ) ! 77: dumprequest(request[i].want, request[i].file, fp_out); ! 78: ! 79: } /* End of writerequest */ ! 80: ! 81: /*****************************************************************************/ ! 82: ! 83: dumprequest(want, file, fp_out) ! 84: ! 85: char *want; /* look for this string */ ! 86: char *file; /* in this file */ ! 87: FILE *fp_out; /* and write the value out here */ ! 88: ! 89: { ! 90: ! 91: char buf[100]; /* line buffer for reading *file */ ! 92: FILE *fp_in; ! 93: ! 94: /* ! 95: * ! 96: * Looks for *want in the request file and if it's found the associated value ! 97: * is copied to the output file. Keywords (ie. the *want strings) begin an @ in ! 98: * the first column of file, while the values (ie. the stuff that's copied to ! 99: * the output file) starts on the next line and extends to the next keyword or ! 100: * to the end of file. ! 101: * ! 102: */ ! 103: ! 104: if ( (fp_in = fopen(file, "r")) != NULL ) { ! 105: while ( fgets(buf, sizeof(buf), fp_in) != NULL ) ! 106: if ( buf[0] == '@' && strncmp(want, &buf[1], strlen(want)) == 0 ) ! 107: while ( fgets(buf, sizeof(buf), fp_in) != NULL ) ! 108: if ( buf[0] == '#' || buf[0] == '%' ) ! 109: continue; ! 110: else if ( buf[0] != '@' ) ! 111: fprintf(fp_out, "%s", buf); ! 112: else break; ! 113: fclose(fp_in); ! 114: } /* End if */ ! 115: ! 116: } /* End of dumprequest */ ! 117: ! 118: /*****************************************************************************/ ! 119:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.