From 03b944b832df7e85d70756c6f583cd53e765d543 Mon Sep 17 00:00:00 2001
From: dos-reis <gdr@axiomatics.org>
Date: Thu, 22 May 2008 04:30:09 +0000
Subject: 	* hyper/hthits.c (regerr): Remove. 	* include/ex2ht.H1:
 Remove. 	* include/hthits.H1: Remove.

---
 src/hyper/ex2ht.c  | 266 ++++++++++++------------
 src/hyper/hthits.c | 599 ++++++++++++++++++++++++++---------------------------
 2 files changed, 429 insertions(+), 436 deletions(-)

(limited to 'src/hyper')

diff --git a/src/hyper/ex2ht.c b/src/hyper/ex2ht.c
index de6afe03..994ad277 100644
--- a/src/hyper/ex2ht.c
+++ b/src/hyper/ex2ht.c
@@ -36,7 +36,6 @@
 /* ex2ht creates a cover page for structured HyperDoc example pages */
 
 
-#define _EX2HT_C
 #include "openaxiom-c-macros.h"
 
 #include "debug.h"
@@ -47,6 +46,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/time.h>
+#include "cfuns.h"
 
 
 
@@ -59,43 +59,120 @@ extern int utimes(const char *, const struct timeval [2]);
 #define MaxLineLength 512
 #define MaxFiles      100
 
-char *files[MaxFiles];
-int numFiles = 0;
-struct timeval latest_date[2] ={{0,0},{0,0}};
+static char *files[MaxFiles];
+static int numFiles = 0;
+static struct timeval latest_date[2] ={{0,0},{0,0}};
 
-#include "ex2ht.H1"
+static FILE *coverFile;
 
 
-int
-main(int argc, char **argv)
+static void
+addFile(const char* filename)
 {
-    int i;
+    FILE *file = fopen(filename, "r");
+    int c;
 
-    if (argc == 1) {
-        fprintf(stderr, "usage: %s exfile.ht ...\n", argv[0]);
-        return (-1);
+    if (file == NULL) {
+        fprintf(stderr, "Couln't open %s for reading\n", filename);
+        exit(-1);
     }
-    openCoverPage();
-    for (i = 1; i < argc; i++)
-        exToHt(argv[i]);
-    closeCoverPage();
-    for (i = 0; i < numFiles; i++)
-        addFile(files[i]);
-    closeCoverFile();
-    return 0;
+    while ((c = getc(file)) != EOF)
+        putc(c, coverFile);
+    putc('\n', coverFile);
+    fclose(file);
+    oa_unlink(filename);
 }
 
-char *
-allocString(char *s)
+
+static void
+emitCoverLink(const char* name, char *title)
 {
-    char *t = (char *) malloc(strlen(s) + 1);
+    fprintf(coverFile, "{\\downlink{%s}{%s}}\n", title, name);
+}
 
-    strcpy(t, s);
-    return t;
+static void
+closeCoverFile(void)
+{
+    fclose(coverFile);
+#ifdef HP9platform
+    times("coverex.ht",latest_date);
+#else
+    utimes("coverex.ht",latest_date);
+#endif
+}
+
+static void
+closeCoverPage(void)
+{
+    fprintf(coverFile, "}\\endscroll\\end{page}\n\n");
+}
+/* cover page functions */
+
+static void
+openCoverPage(void)
+{
+    coverFile = fopen("coverex.ht", "w");
+    if (coverFile == NULL) {
+        fprintf(stderr, "couldn't open coverex.ht for writing\n");
+        exit(-1);
+    }
+    fprintf(coverFile, "%% DO NOT EDIT! Created by ex2ht.\n\n");
+    fprintf(coverFile, "\\begin{page}{ExampleCoverPage}{Examples Of AXIOM Commands}\n");
+    fprintf(coverFile, "\\beginscroll\\table{\n");
+}
+
+static void
+emitSpadCommand(const char* line, const char* prefix, FILE *outFile)
+{
+    int braceCount = 1;
+    char command[MaxLineLength], *t = command;
+
+    while (1) {
+        if (*line == '}')
+            braceCount--;
+        if (braceCount == 0)
+            break;
+        if (*line == '{')
+            braceCount++;
+        *t++ = *line++;
+    }
+    *t = '\0';
+    fprintf(outFile, "%s%s}\n", prefix, command);
+}
+
+/* s is pageName}{title} */
+static void
+emitMenuEntry(const char* line, FILE *outFile)
+{
+    char pageName[MaxLineLength], title[MaxLineLength];
+    char *p = pageName, *t = title;
+
+    while (*line != '}')
+        *p++ = *line++;
+    *p = '\0';
+    line++;
+    while (*line != '}')
+        *t++ = *line++;
+    *t = '\0';
+    fprintf(outFile, "\\menudownlink%s}{%s}\n", title, pageName);
+}
+
+static void 
+emitHeader(FILE *outFile, char *pageName, char *pageTitle)
+{
+    fprintf(outFile, "\\begin{page}{%s}{%s}\n", pageName, pageTitle);
+    fprintf(outFile, "\\beginscroll\\beginmenu\n");
 }
 
-char *
-strPrefix(char *prefix, char *s)
+static void 
+emitFooter(FILE *outFile)
+{
+    fprintf(outFile, "\\endmenu\\endscroll\\end{page}\n");
+}
+
+
+static char *
+strPrefix(char* prefix, char *s)
 {
     while (*prefix != '\0' && *prefix == *s) {
         prefix++;
@@ -106,8 +183,19 @@ strPrefix(char *prefix, char *s)
     return NULL;
 }
 
-char *
-getExTitle(FILE *inFile, char *line)
+
+static char *
+allocString(const char* s)
+{
+    char *t = (char *) malloc(strlen(s) + 1);
+
+    strcpy(t, s);
+    return t;
+}
+
+
+static char *
+getExTitle(FILE *inFile, char* line)
 {
     char *title;
 
@@ -120,10 +208,12 @@ getExTitle(FILE *inFile, char *line)
     return NULL;
 }
 
-void 
-exToHt(char *filename)
+
+static void 
+exToHt(const char* filename)
 {
-    char line[MaxLineLength], *line2;
+    char line[MaxLineLength];
+    const char* line2;
     char *title, *pagename;
     FILE *inFile = fopen(filename, "r");
     FILE *outFile;
@@ -179,108 +269,22 @@ exToHt(char *filename)
         }
 }
 
-void 
-emitHeader(FILE *outFile, char *pageName, char *pageTitle)
-{
-    fprintf(outFile, "\\begin{page}{%s}{%s}\n", pageName, pageTitle);
-    fprintf(outFile, "\\beginscroll\\beginmenu\n");
-}
-
-void 
-emitFooter(FILE *outFile)
-{
-    fprintf(outFile, "\\endmenu\\endscroll\\end{page}\n");
-}
-
-/* s is pageName}{title} */
-void
-emitMenuEntry(char *line, FILE *outFile)
-{
-    char pageName[MaxLineLength], title[MaxLineLength];
-    char *p = pageName, *t = title;
-
-    while (*line != '}')
-        *p++ = *line++;
-    *p = '\0';
-    line++;
-    while (*line != '}')
-        *t++ = *line++;
-    *t = '\0';
-    fprintf(outFile, "\\menudownlink%s}{%s}\n", title, pageName);
-}
-
-void
-emitSpadCommand(char *line, char *prefix, FILE *outFile)
-{
-    int braceCount = 1;
-    char command[MaxLineLength], *t = command;
-
-    while (1) {
-        if (*line == '}')
-            braceCount--;
-        if (braceCount == 0)
-            break;
-        if (*line == '{')
-            braceCount++;
-        *t++ = *line++;
-    }
-    *t = '\0';
-    fprintf(outFile, "%s%s}\n", prefix, command);
-}
-
-/* cover page functions */
-
-FILE *coverFile;
-
-void
-openCoverPage(void)
-{
-    coverFile = fopen("coverex.ht", "w");
-    if (coverFile == NULL) {
-        fprintf(stderr, "couldn't open coverex.ht for writing\n");
-        exit(-1);
-    }
-    fprintf(coverFile, "%% DO NOT EDIT! Created by ex2ht.\n\n");
-    fprintf(coverFile, "\\begin{page}{ExampleCoverPage}{Examples Of AXIOM Commands}\n");
-    fprintf(coverFile, "\\beginscroll\\table{\n");
-}
-
-void
-closeCoverPage(void)
-{
-    fprintf(coverFile, "}\\endscroll\\end{page}\n\n");
-}
-
-void
-closeCoverFile(void)
-{
-    fclose(coverFile);
-#ifdef HP9platform
-    times("coverex.ht",latest_date);
-#else
-    utimes("coverex.ht",latest_date);
-#endif
-}
-
-void
-emitCoverLink(char *name, char *title)
-{
-    fprintf(coverFile, "{\\downlink{%s}{%s}}\n", title, name);
-}
 
-void
-addFile(char *filename)
+int
+main(int argc, char **argv)
 {
-    FILE *file = fopen(filename, "r");
-    int c;
+    int i;
 
-    if (file == NULL) {
-        fprintf(stderr, "Couln't open %s for reading\n", filename);
-        exit(-1);
+    if (argc == 1) {
+        fprintf(stderr, "usage: %s exfile.ht ...\n", argv[0]);
+        return (-1);
     }
-    while ((c = getc(file)) != EOF)
-        putc(c, coverFile);
-    putc('\n', coverFile);
-    fclose(file);
-    unlink(filename);
+    openCoverPage();
+    for (i = 1; i < argc; i++)
+        exToHt(argv[i]);
+    closeCoverPage();
+    for (i = 0; i < numFiles; i++)
+        addFile(files[i]);
+    closeCoverFile();
+    return 0;
 }
diff --git a/src/hyper/hthits.c b/src/hyper/hthits.c
index ffaf2ad9..f7162f51 100644
--- a/src/hyper/hthits.c
+++ b/src/hyper/hthits.c
@@ -48,7 +48,7 @@
  *
  * SMW Feb 91
  */
-#define _HTHITS_C
+
 #include "openaxiom-c-macros.h"
 
 #include "debug.h"
@@ -69,13 +69,11 @@
 #define MAX_ENTRY_NAME  1024    /* E.g. DifferentialCalculusPage */
 #define MAX_COMP_REGEX  1024
 
-typedef struct pgInfo {
+typedef struct PgInfo {
     char name[MAX_ENTRY_NAME];
     long start, size;
 } PgInfo ;
 
-#include "hthits.H1"
-
 /*
  * Global variables set according to the command line.
  */
@@ -86,343 +84,334 @@ char *htdbFName;
 int gverifydates=0;
 regex_t reg_pattern;
 
-int
-main(int argc,char ** argv)
+static void 
+badDB(void)
 {
-    cmdline(argc, argv);
-
-    regcomp(&reg_pattern, pattern, REG_NEWLINE);
-
-    handleHtdb();
-    return(0);
+   fprintf(stderr, "%s:  bad database file %s\n", progName, htdbFName);
+   exit(1);
 }
 
-void
-cmdline(int argc,char ** argv)
-{
-    progName = argv[0];
-
-    if (argc != 3) {
-        fprintf(stderr, "Usage: %s pattern htdb-file\n", progName);
-        exit(1);
-    }
 
-    pattern = argv[1];
-    htdbFName = argv[2];
-}
-
-void
-handleHtdb(void)
+static void 
+untexbuf(register char* s)
 {
-    FILE *htdbFile;
-    int c;
-
-    htdbFile = fopen(htdbFName, "r");
-    if (htdbFile == NULL)
-        badDB();
-
-    while ((c = getc(htdbFile)) != EOF) {
-        if (c != '\t')
-            badDB();
-        ungetc(c, htdbFile);
-
-        handleFile(htdbFile);
-    }
-    fclose(htdbFile);
+   register char *d = s;
+   
+   while (*s)
+      switch (*s) {
+      case '\\':
+         *d++ = ' ';
+         s++;
+         if (*s != '%')
+            while (isalpha(*s))
+               s++;
+         break;
+      case '%':
+         *d++ = ' ';
+         s++;
+         while (*s && *s != '\n')
+            s++;
+         break;
+      case '{':
+      case '}':
+      case '#':
+         *d++ = ' ';
+         s++;
+         break;
+      default:
+         *d++ = *s++;
+      }
+   *d = 0;
 }
 
 
-void
-handleFile(FILE *htdbFile)
+/*
+ * Any newlines and separator characters in the title are changed to blanks.
+ */
+
+static void 
+splitpage(char* buf, char** ptitle, char** pbody)
 {
-    static PgInfo *pgInfoV = 0;
-    static int pgInfoC = 0;
-
-    char htdbLine[MAX_HTDB_LINE];
-    char htfname[MAX_HTDB_LINE];
-    time_t httime;
-    long htsize;
-    struct stat htstat;
-
-    long fstart, fend;
-    int rc, i, npages;
-
-    char entname[MAX_ENTRY_NAME], enttype[MAX_ENTRY_TYPE];
-    long entoffset, entlineno;
-
-    fgets(htdbLine, MAX_HTDB_LINE, htdbFile);
-
-    sscanf(htdbLine, " %s %ld", htfname, &httime);
-
-    /*
-     * 1. Verify file: get size and check modification time.
-     */
-    rc = stat(htfname, &htstat);
-    if (rc == -1) {
-        fprintf(stderr, "%s: Cannot access %s\n", progName, htfname);
-        exit(1);
-    }
-    if (gverifydates && (htstat.st_mtime != httime)) {
-
-        fprintf(stderr, "%s: Out of date file %s\n", progName, htfname);
-        exit(1);
-    }
-    htsize = htstat.st_size;
-
-    /*
-     * 2. Count the pages in the file.
-     */
-    npages = 0;
-    fstart = ftell(htdbFile);
-    fend = ftell(htdbFile);
-
-    while (fgets(htdbLine, MAX_HTDB_LINE, htdbFile) != NULL) {
-        if (htdbLine[0] == '\t')
-            break;
-        if (!strncmp(htdbLine, "\\page", 5))
-            npages++;
-        fend = ftell(htdbFile);
-    }
-
-    /*
-     * 3. Find offset and size of each \page (skipping \newcommands etc.)
-     */
-    if (npages > pgInfoC) {
-        if (pgInfoV)
-            free(pgInfoV);
-
-        pgInfoC = npages;
-        pgInfoV = (PgInfo *)
-            malloc(npages * sizeof(PgInfo));
-
-        if (!pgInfoV) {
-            fprintf(stderr, "%s: out of memory\n", progName);
-            exit(1);
-        }
-    }
-
-    fseek(htdbFile, fstart, 0);
-
-    for (i = 0; fgets(htdbLine, MAX_HTDB_LINE, htdbFile) != NULL;) {
-        if (htdbLine[0] == '\t')
+   int n, depth, tno;
+   char *s;
+   
+   switch (buf[1]) {
+   case 'p':
+      tno = 2;
+      break;                  /* \page{Name}{Title} */
+   case 'b':
+      tno = 3;
+      break;                  /* \begin{page}{Name}{Title} */
+   default:
+      fprintf(stderr, "%s: Invalid page format: %s\n", progName, buf);
+      exit(1);
+   }
+
+   n = 0;
+   depth = 0;
+   
+   for (s = buf; *s; s++) {
+      if (*s == '{')
+         if (++depth == 1 && ++n == tno)
+            *ptitle = s + 1;
+      if (*s == '}')
+         if (depth-- == 1 && n == tno) {
+            *s = 0;
+            *pbody = s + 1;
             break;
+         }
+   }
+}
 
-        sscanf(htdbLine, "%s %s %ld %ld",
-               enttype, entname, &entoffset, &entlineno);
-
-        if (i > 0 && pgInfoV[i - 1].size == -1)
-            pgInfoV[i - 1].size = entoffset - pgInfoV[i - 1].start;
-
-        if (!strcmp(enttype, "\\page")) {
-            strncpy(pgInfoV[i].name, entname, MAX_ENTRY_NAME);
-            pgInfoV[i].start = entoffset;
-            pgInfoV[i].size = -1;
-
-            i++;
-        }
-    }
-    if (i > 0 && pgInfoV[i - 1].size == -1)
-        pgInfoV[i - 1].size = htsize - pgInfoV[i - 1].start;
-
-    if (i != npages)
-        badDB();
 
-    /*
-     * 4. Position database input to read next file-description
-     */
-    fseek(htdbFile, fend, 0);
+/*
+ * Given string s and length n, output ` followed by the first n characters
+ * of s with ` and newline converted to blanks. This function destructively
+ * modifies s.
+ */
 
-    /*
-     * 5. Process the pages of the file.
-     */
-    handleFilePages(htfname, npages, pgInfoV);
+static void 
+squirt(char* s, int n)
+{
+   register char *t, *e;
+   int c;
+   
+   c = s[n];
+   
+   for (t = s, e = s + n; t < e; t++)
+      if (*t == '`' || *t == '\n')
+         *t = ' ';
+   
+   if (s[n] != 0) {
+      s[n] = 0;
+   }
+   printf("{%.*s}", n, s);
+   s[n] = c;
 }
 
-void
-handleFilePages(char *fname, int pgc, PgInfo *pgv)
+static void 
+searchPage(char* pgname, char* pgtitle, char* pgbody)
 {
-    FILE *infile;
-    int i;
-
-    infile = fopen(fname, "r");
-    if (infile == NULL) {
-        fprintf(stderr, "%s: Cannot read file %s\n", progName, fname);
-        exit(1);
-    }
-
-
-    for (i = 0; i < pgc; i++)
-        handlePage(infile, pgv + i);
-
-    fclose(infile);
-
+   char *bodyrest;
+   regmatch_t match_pos;
+   int nhits = 0;
+   
+   if (!regexec(&reg_pattern, pgtitle, 1, &match_pos, 0)) 
+      nhits++;
+   
+   bodyrest = pgbody;
+   while (!regexec(&reg_pattern, bodyrest, 1, &match_pos, 0)) {
+      nhits++;
+      bodyrest += match_pos.rm_eo;
+   }
+   if (nhits) {
+      printf("\\newsearchresultentry{%d}{%s}",nhits, pgtitle);
+      squirt(pgname, strlen(pgname));
+      printf("\n");
+   }
 }
 
-void
-handlePage(FILE *infile,PgInfo * pg)
+static void
+handlePage(FILE* infile, PgInfo* pg)
 {
-    static char *pgBuf = 0;
-    static int pgBufSize = 0;
-
-    char *title, *body;
-
-    if (pg->size > pgBufSize - 1) {
-        if (pgBuf)
-            free(pgBuf);
-        pgBufSize = pg->size + 20000;
-        pgBuf = (char *)malloc(pgBufSize);
-
-        if (!pgBuf) {
-            fprintf(stderr,"%s: Out of memory\n", progName);
-            exit(1);
-        }
-    }
-
-    fseek(infile, pg->start, 0);
-    fread(pgBuf, pg->size, 1, infile);
-    pgBuf[pg->size] = 0;
-
-    splitpage(pgBuf, &title, &body);
-    /*untexbuf(title);*/
-    untexbuf(body);
+   static char *pgBuf = 0;
+   static int pgBufSize = 0;
+   
+   char *title, *body;
+   
+   if (pg->size > pgBufSize - 1) {
+      if (pgBuf)
+         free(pgBuf);
+      pgBufSize = pg->size + 20000;
+      pgBuf = (char *)malloc(pgBufSize);
+      
+      if (!pgBuf) {
+         fprintf(stderr,"%s: Out of memory\n", progName);
+         exit(1);
+      }
+   }
+   
+   fseek(infile, pg->start, 0);
+   fread(pgBuf, pg->size, 1, infile);
+   pgBuf[pg->size] = 0;
+   
+   splitpage(pgBuf, &title, &body);
+   /*untexbuf(title);*/
+   untexbuf(body);
 
 #ifdef DEBUG
-    printf("-------------- %s -------------\n%s", pg->name, pgBuf);
-    printf("============== %s =============\n", title);
-    printf("%s", body);
+   printf("-------------- %s -------------\n%s", pg->name, pgBuf);
+   printf("============== %s =============\n", title);
+   printf("%s", body);
 #endif
-
-    searchPage(pg->name, title, body);
-
+   
+   searchPage(pg->name, title, body);
 }
 
-void 
-searchPage(char *pgname,char * pgtitle,char * pgbody)
+static void
+handleFilePages(const char* fname, int pgc, PgInfo* pgv)
 {
-    char *bodyrest;
-    regmatch_t match_pos;
-    int nhits = 0;
-
-    if (!regexec(&reg_pattern, pgtitle, 1, &match_pos, 0)) 
-        nhits++;
-
-    bodyrest = pgbody;
-    while (!regexec(&reg_pattern, bodyrest, 1, &match_pos, 0)) {
-        nhits++;
-        bodyrest += match_pos.rm_eo;
-    }
-    if (nhits) {
-        printf("\\newsearchresultentry{%d}{%s}",nhits, pgtitle);
-        squirt(pgname, strlen(pgname));
-        printf("\n");
-    }
+   FILE *infile;
+   int i;
+   
+   infile = fopen(fname, "r");
+   if (infile == NULL) {
+      fprintf(stderr, "%s: Cannot read file %s\n", progName, fname);
+      exit(1);
+   }
+
+   for (i = 0; i < pgc; i++)
+      handlePage(infile, pgv + i);
+   
+   fclose(infile);
 }
 
-/*
- * Given string s and length n, output ` followed by the first n characters
- * of s with ` and newline converted to blanks. This function destructively
- * modifies s.
- */
-
-void 
-squirt(char *s, int n)
+static void
+handleFile(FILE* htdbFile)
 {
-    register char *t, *e;
-    int c;
-
-    c = s[n];
-
-    for (t = s, e = s + n; t < e; t++)
-        if (*t == '`' || *t == '\n')
-            *t = ' ';
-
-    if (s[n] != 0) {
-        s[n] = 0;
-    }
-    printf("{%.*s}", n, s);
-    s[n] = c;
+   static PgInfo *pgInfoV = 0;
+   static int pgInfoC = 0;
+   
+   char htdbLine[MAX_HTDB_LINE];
+   char htfname[MAX_HTDB_LINE];
+   time_t httime;
+   long htsize;
+   struct stat htstat;
+   
+   long fstart, fend;
+   int rc, i, npages;
+   
+   char entname[MAX_ENTRY_NAME], enttype[MAX_ENTRY_TYPE];
+   long entoffset, entlineno;
+   
+   fgets(htdbLine, MAX_HTDB_LINE, htdbFile);
+   
+   sscanf(htdbLine, " %s %ld", htfname, &httime);
+   
+   /*
+    * 1. Verify file: get size and check modification time.
+    */
+   rc = stat(htfname, &htstat);
+   if (rc == -1) {
+      fprintf(stderr, "%s: Cannot access %s\n", progName, htfname);
+      exit(1);
+   }
+   if (gverifydates && (htstat.st_mtime != httime)) {
+      
+      fprintf(stderr, "%s: Out of date file %s\n", progName, htfname);
+      exit(1);
+   }
+   htsize = htstat.st_size;
+   
+   /*
+    * 2. Count the pages in the file.
+    */
+   npages = 0;
+   fstart = ftell(htdbFile);
+   fend = ftell(htdbFile);
+   
+   while (fgets(htdbLine, MAX_HTDB_LINE, htdbFile) != NULL) {
+      if (htdbLine[0] == '\t')
+         break;
+      if (!strncmp(htdbLine, "\\page", 5))
+         npages++;
+      fend = ftell(htdbFile);
+   }
+   
+   /*
+    * 3. Find offset and size of each \page (skipping \newcommands etc.)
+    */
+   if (npages > pgInfoC) {
+      if (pgInfoV)
+         free(pgInfoV);
+      
+      pgInfoC = npages;
+      pgInfoV = (PgInfo *)
+         malloc(npages * sizeof(PgInfo));
+      
+      if (!pgInfoV) {
+         fprintf(stderr, "%s: out of memory\n", progName);
+         exit(1);
+      }
+   }
+   
+   fseek(htdbFile, fstart, 0);
+   
+   for (i = 0; fgets(htdbLine, MAX_HTDB_LINE, htdbFile) != NULL;) {
+      if (htdbLine[0] == '\t')
+         break;
+      
+      sscanf(htdbLine, "%s %s %ld %ld",
+             enttype, entname, &entoffset, &entlineno);
+      
+      if (i > 0 && pgInfoV[i - 1].size == -1)
+         pgInfoV[i - 1].size = entoffset - pgInfoV[i - 1].start;
+      
+      if (!strcmp(enttype, "\\page")) {
+         strncpy(pgInfoV[i].name, entname, MAX_ENTRY_NAME);
+         pgInfoV[i].start = entoffset;
+         pgInfoV[i].size = -1;
+         
+         i++;
+      }
+   }
+   if (i > 0 && pgInfoV[i - 1].size == -1)
+      pgInfoV[i - 1].size = htsize - pgInfoV[i - 1].start;
+   
+   if (i != npages)
+      badDB();
+   
+   /*
+    * 4. Position database input to read next file-description
+    */
+   fseek(htdbFile, fend, 0);
+   
+   /*
+    * 5. Process the pages of the file.
+    */
+   handleFilePages(htfname, npages, pgInfoV);
 }
 
-/*
- * Any newlines and separator characters in the title are changed to blanks.
- */
-void 
-splitpage(char *buf, char **ptitle, char **pbody)
+static void
+handleHtdb(void)
 {
-    int n, depth, tno;
-    char *s;
-
-    switch (buf[1]) {
-      case 'p':
-        tno = 2;
-        break;                  /* \page{Name}{Title} */
-      case 'b':
-        tno = 3;
-        break;                  /* \begin{page}{Name}{Title} */
-      default:
-        fprintf(stderr, "%s: Invalid page format: %s\n", progName, buf);
-        exit(1);
-    }
-
-    n = 0;
-    depth = 0;
-
-    for (s = buf; *s; s++) {
-        if (*s == '{')
-            if (++depth == 1 && ++n == tno)
-                *ptitle = s + 1;
-        if (*s == '}')
-            if (depth-- == 1 && n == tno) {
-                *s = 0;
-                *pbody = s + 1;
-                break;
-            }
-    }
+   FILE *htdbFile;
+   int c;
+   
+   htdbFile = fopen(htdbFName, "r");
+   if (htdbFile == NULL)
+      badDB();
+   
+   while ((c = getc(htdbFile)) != EOF) {
+      if (c != '\t')
+         badDB();
+      ungetc(c, htdbFile);
+      
+      handleFile(htdbFile);
+   }
+   fclose(htdbFile);
 }
 
-
-void 
-untexbuf(register char *s)
+static void
+cmdline(int argc, char** argv)
 {
-    register char *d = s;
-
-    while (*s)
-        switch (*s) {
-          case '\\':
-            *d++ = ' ';
-            s++;
-            if (*s != '%')
-                while (isalpha(*s))
-                    s++;
-            break;
-          case '%':
-            *d++ = ' ';
-            s++;
-            while (*s && *s != '\n')
-                s++;
-            break;
-          case '{':
-          case '}':
-          case '#':
-            *d++ = ' ';
-            s++;
-            break;
-          default:
-            *d++ = *s++;
-        }
-    *d = 0;
+   progName = argv[0];
+   
+   if (argc != 3) {
+      fprintf(stderr, "Usage: %s pattern htdb-file\n", progName);
+      exit(1);
+   }
+   
+   pattern = argv[1];
+   htdbFName = argv[2];
 }
 
-void 
-badDB(void)
-{
-    fprintf(stderr, "%s:  bad database file %s\n", progName, htdbFName);
-    exit(1);
-}
 
-void
-regerr(int code)
+int
+main(int argc, char** argv)
 {
-    fprintf(stderr, "%s: regular expression error %d for \"%s\"\n",
-            progName, code, pattern);
+    cmdline(argc, argv);
+    regcomp(&reg_pattern, pattern, REG_NEWLINE);
+    handleHtdb();
+    return(0);
 }
-- 
cgit v1.2.3