diff options
Diffstat (limited to 'src/info2html/main.c')
-rw-r--r-- | src/info2html/main.c | 216 |
1 files changed, 103 insertions, 113 deletions
diff --git a/src/info2html/main.c b/src/info2html/main.c index 4bae84aa..3ac12cc6 100644 --- a/src/info2html/main.c +++ b/src/info2html/main.c @@ -3,6 +3,8 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <gnome.h> +#include <zlib.h> #include "data.h" #include "html.h" @@ -15,90 +17,61 @@ static int be_quiet=1; /* line_number we're on */ static int work_line_number; +static char *requested_nodename=NULL; +static struct poptOption options[] = { + {NULL, 'a', POPT_ARG_STRING, &requested_nodename}, + {NULL, 'b', POPT_ARG_STRING, &OverrideBaseFilename}, + {NULL} +}; int main(int argc, char **argv) { - FILE *f; + gzFile f = NULL; char line[250]; - - char *requested_nodename=NULL; - int aptr; + poptContext ctx; int result; int foundit=0; char convanc[1024]; - NODE *node; + + const char **args; + int curarg; if (!be_quiet) printf("info2html Version %s\n",INFO2HTML_VERSION); - - /* simplistic command line parsing for now */ - aptr = argc; - while (aptr > 2) { - if (!strcmp(argv[argc-aptr+1], "-a")) { - char *s, *t; - int len; - - requested_nodename = strdup(argv[argc-aptr+2]); - /* strip off quotes */ - for (s=requested_nodename; *s == '\"'; ) { - len = strlen( s ); - memmove(s, s+1, len); - } - - t = s + strlen(s) - 1; - while (*t == '\"') - t--; - - *(t+1) = '\0'; - - /* convert anchor so matching works */ - map_spaces_to_underscores(requested_nodename); -#ifdef DEBUG - fprintf(stderr, "outputting node %s\n", - requested_nodename); -#endif - aptr -= 2; - } else if (!strcmp(argv[argc-aptr+1], "-b")) { - OverrideBaseFilename = strdup(argv[argc-aptr+2]); -#ifdef DEBUG - fprintf(stderr, "outputting basefile %s\n", - OverrideBaseFilename); -#endif - aptr -= 2; - } - } - if (aptr == 1) { - f = stdin; - strcpy(work_filename, "STDIN"); - } else { - if ((f=fopen(argv[argc-aptr+1], "r"))==NULL) { - fprintf(stderr, "File %s not found.\n",argv[1]); - exit(1); - } - strcpy(work_filename, argv[1]); - } + ctx = poptGetContext("gnome-info2html2", argc, argv, options, 0); - work_line_number = 0; + while(poptGetNextOpt(ctx) >= 0) + /**/ ; + args = poptGetArgs(ctx); + curarg = 0; + + if(requested_nodename) + { + char *s, *t; + int len; + /* strip off quotes */ + for (s=requested_nodename; *s == '\"'; ) { + len = strlen( s ); + memmove(s, s+1, len); + } + + t = s + strlen(s) - 1; + while (*t == '\"') + t--; + + *(t+1) = '\0'; + + /* convert anchor so matching works */ + map_spaces_to_underscores(requested_nodename); + } + + work_line_number = 0; - /* scan for start of real data */ - for (;1;) { - fgets(line,250,f); - if (feof(f)) - { - fprintf(stderr,"Info file had no contents\n"); - exit(1); - } - - work_line_number++; - if (*line == INFO_COOKIE) - break; - - } /* hack, just send to stdout for now */ fprintf(stdout, "<BODY><HTML>\n"); @@ -108,68 +81,85 @@ main(int argc, char **argv) /* No need to store all nodes, etc since we let web server */ /* handle resolving tags! */ for (;1 || !foundit || !requested_nodename;) { - fgets(line,250,f); - if (feof(f)) - break; + if(!f) { + if(args && args[curarg]) + { + f = gzopen(args[curarg++], "r"); + if(!f) + break; + num_files_left = args[curarg]?1:0; + for(work_line_number = 0, gzgets(f, line, sizeof(line)); *line != INFO_COOKIE; + gzgets(f, line, sizeof(line)), work_line_number++) + /**/ ; + } + else + break; + } + if(!gzgets(f, line, sizeof(line))) + { + gzclose(f); + f = NULL; + continue; + } - work_line_number++; + work_line_number++; /* found a node definition line */ - if (!strncmp(line, "File:", 5)) { - node = alloc_node(); - result=read_node( f, line, node ); - if ( result == READ_ERR ) { - fprintf(stderr, "Error reading the node " - "contents\n"); - fprintf(stderr, "line was |%s|\n",line); - continue; - } + if (!strncmp(line, "File:", 5)) { + node = alloc_node(); + result=read_node( f, line, node ); + if ( result == READ_ERR ) { + fprintf(stderr, "Error reading the node " + "contents\n"); + fprintf(stderr, "line was |%s|\n",line); + continue; + } - /* see if this is the requested node name */ - strncpy(convanc, node->nodename, sizeof(convanc)); - map_spaces_to_underscores(convanc); - if (requested_nodename && - strcmp(requested_nodename, convanc)) { + /* see if this is the requested node name */ + strncpy(convanc, node->nodename, sizeof(convanc)); + map_spaces_to_underscores(convanc); + if (requested_nodename && + strcmp(requested_nodename, convanc)) { #ifdef DEBUG - fprintf(stderr, "skipping ->%s<-\n", - node->nodename); + fprintf(stderr, "skipping ->%s<-\n", + node->nodename); #endif - continue; - } + continue; + } - foundit = 1; - strcpy(work_node,node->nodename); + foundit = 1; + strcpy(work_node,node->nodename); - BaseFilename = node->filename; + BaseFilename = node->filename; #ifdef DEBUG - printf("NEW NODE\n"); - printf("\tFile:|%s|\n\tNode:|%s|\n\tNext:|%s|\n", - node->filename, node->nodename,node->next); - printf("\tPrev:|%s|\n\tUp:|%s|\n\n", - node->prev, node->up); - printf("-------------------------------------------" - "-----------\n"); + printf("NEW NODE\n"); + printf("\tFile:|%s|\n\tNode:|%s|\n\tNext:|%s|\n", + node->filename, node->nodename,node->next); + printf("\tPrev:|%s|\n\tUp:|%s|\n\n", + node->prev, node->up); + printf("-------------------------------------------" + "-----------\n"); #endif - /* now lets make some html */ - dump_html_for_node( node ); + /* now lets make some html */ + dump_html_for_node( node ); - if (node) { - if ( node->contents ) - free(node->contents); + if (node) { + if ( node->contents ) + free(node->contents); - free(node); - BaseFilename = NULL; - } - } - else - continue; + free(node); + BaseFilename = NULL; + } + } + else + continue; } if (!foundit && requested_nodename) { - fprintf(stderr, "Requested node <b>%s</b> not found\n", - requested_nodename); - exit(1); + fprintf(stderr, "Requested node <b>%s</b> not found\n", + requested_nodename); + exit(1); } fprintf(stdout, "</BODY></HTML>\n"); |