Add an error check for correct formatting in Deflate uncompressed
[sgt/halibut] / main.c
diff --git a/main.c b/main.c
index 4304c7c..dae6581 100644 (file)
--- a/main.c
+++ b/main.c
@@ -43,6 +43,7 @@ int main(int argc, char **argv) {
     int nogo;
     int errs;
     int reportcols;
+    int list_fonts;
     int input_charset;
     int debug;
     int backendbits, prebackbits;
@@ -50,7 +51,16 @@ int main(int argc, char **argv) {
     paragraph *cfg, *cfg_tail;
     void *pre_backend_data[16];
 
+    /*
+     * Use the specified locale everywhere. It'll be used for
+     * output of error messages, and as the default character set
+     * for input files if one is not explicitly specified.
+     * 
+     * However, we need to use standard numeric formatting for
+     * output of things like PDF.
+     */
     setlocale(LC_ALL, "");
+    setlocale(LC_NUMERIC, "C");
 
     /*
      * Set up initial (default) parameters.
@@ -59,6 +69,7 @@ int main(int argc, char **argv) {
     nfiles = 0;
     nogo = errs = FALSE;
     reportcols = 0;
+    list_fonts = 0;
     input_charset = CS_ASCII;
     debug = 0;
     backendbits = 0;
@@ -74,7 +85,7 @@ int main(int argc, char **argv) {
      */
     while (--argc) {
        char *p = *++argv;
-       if (*p == '-') {
+       if (*p == '-' && p[1]) {
            /*
             * An option.
             */
@@ -139,6 +150,8 @@ int main(int argc, char **argv) {
                        } else if (!strcmp(opt, "-list-charsets")) {
                            listcharsets();
                            nogo = TRUE;
+                       } else if (!strcmp(opt, "-list-fonts")) {
+                           list_fonts = TRUE;
                        } else if (!strcmp(opt, "-precise")) {
                            reportcols = 1;
                        } else {
@@ -251,7 +264,10 @@ int main(int argc, char **argv) {
            /*
             * A non-option argument.
             */
-           infiles[nfiles++] = p;
+           if (!strcmp(p, "-"))
+               infiles[nfiles++] = NULL;   /* special case: read stdin */
+           else
+               infiles[nfiles++] = p;
        }
     }
 
@@ -263,7 +279,7 @@ int main(int argc, char **argv) {
     /*
      * Do the work.
      */
-    if (nfiles == 0) {
+    if (nfiles == 0 && !list_fonts) {
        error(err_noinput);
        usage();
        exit(EXIT_FAILURE);
@@ -288,6 +304,10 @@ int main(int argc, char **argv) {
        idx = make_index();
 
        sourceform = read_input(&in, idx);
+       if (list_fonts) {
+           listfonts();
+           exit(EXIT_SUCCESS);
+       }
        if (!sourceform)
            exit(EXIT_FAILURE);
 
@@ -450,6 +470,8 @@ static void dbg_prtwordlist(int level, word *w) {
            printf("\"");
        } else
            printf("(no text)");
+       if (w->breaks)
+           printf(" [breaks]");
        if (w->alt) {
            printf(" alt = {\n");
            dbg_prtwordlist(level+1, w->alt);