summaryrefslogtreecommitdiff
path: root/src/info2html/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/info2html/main.c')
-rw-r--r--src/info2html/main.c216
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");