home *** CD-ROM | disk | FTP | other *** search
- /*
- * inc2shtml: Convert httpd <1.1 style includes to 1.2 style
- *
- * Rob McCool
- *
- * Usage: inc2shtml [filename]
- *
- * If filename is given, this program will open filename. If not, it will
- * look on stdin. It will output the new shtml file on stdout.
- */
-
-
- #include <stdio.h>
-
- #define MAX_STRING_LEN 256
-
- void usage(char *argv0) {
- fprintf(stderr,"Usage: %s [filename]\n",argv0);
- fprintf(stderr,"If filename is given, this program will open filename.\n");
- fprintf(stderr,"If not, it will look on stdin for the inc file.\n");
- fprintf(stderr,
- "In either case, it will write the new shtml file on stdout.\n");
- exit(1);
- }
-
- void translate_tag(char *tag, FILE *fd) {
- char *tp = tag, *tp2;
- int url;
-
- url = (*tp == 'U' || *tp == 'u' ? 1 : 0);
-
- while(*tp++ != '\"');
- tp2 = tp + 1;
- while(*tp2 != '\"') ++tp2;
- *tp2 = '\0';
- if(*tp == '|') {
- fprintf(fd,"<!--#exec cmd=\"%s",++tp);
- if(url) fputs(" '$QUERY_STRING_UNESCAPED'",fd);
- fputs("\"-->",fd);
- } else
- fprintf(fd,"<!--#include virtual=\"%s\"-->",tp);
- }
-
- main(int argc, char *argv[]) {
- FILE *f;
- int c,x,p;
- char c2;
- char *lookfor = "<inc srv";
-
- switch(argc) {
- case 1:
- f = stdin;
- break;
- case 2:
- if(!(f = fopen(argv[1],"r"))) {
- perror("fopen");
- exit(1);
- }
- break;
- default:
- usage(argv[0]);
- }
-
- p=0;
- while(1) {
- c = fgetc(f);
- if(c == -1) {
- fflush(stdout);
- exit(0);
- }
- c2 = (char)c;
- if(isalpha((char)c))
- c = tolower((char)c);
- if(c == lookfor[p]) {
- if(!lookfor[++p]) {
- char tag[MAX_STRING_LEN];
-
- x=0;
- c = fgetc(f); /* get space */
- while(c != '>') {
- tag[x++] = c;
- c = fgetc(f);
- if(c == -1) {
- fputs("<inc srv ",stdout);
- fputs(tag,stdout);
- fflush(stdout);
- exit(1);
- }
- }
- tag[x] = '\0';
- translate_tag(tag,stdout);
- p = 0;
- }
- }
- else {
- for(x=0;x<p;x++)
- fputc(lookfor[x],stdout);
- fputc(c2,stdout);
- p=0;
- }
- }
- }
-