Bug in utoi(), which made it ignore a leading minus sign when
[sgt/halibut] / error.c
diff --git a/error.c b/error.c
index 2dae220..00d007d 100644 (file)
--- a/error.c
+++ b/error.c
@@ -19,8 +19,9 @@ static void do_error(int code, va_list ap) {
     int i, j;
     char *sp, *sp2;
     wchar_t *wsp, *wsp2;
+    unsigned wc;
     filepos fpos, fpos2, *fposp;
-    int flags;
+    int flags = 0;
 
     switch(code) {
       case err_nomemory:              /* no arguments */
@@ -333,7 +334,53 @@ static void do_error(int code, va_list ap) {
       case err_pfnoafm:
        fpos = *va_arg(ap, filepos *);
        sp = va_arg(ap, char *);
-       sprintf(error, "No metrics available for Type 1 font '%.200s'", sp);
+       sprintf(error, "no metrics available for Type 1 font '%.200s'", sp);
+       flags = FILEPOS;
+       break;
+      case err_chmnames:
+       sprintf(error, "only one of html-mshtmlhelp-chm and "
+               "html-mshtmlhelp-hhp found");
+       flags = PREFIX;
+       break;
+      case err_sfntnotable:
+       fpos = *va_arg(ap, filepos *);
+       sp = va_arg(ap, char *);
+       sprintf(error, "font has no '%.4s' table", sp);
+       flags = FILEPOS;
+       break;
+      case err_sfntnopsname:
+       fpos = *va_arg(ap, filepos *);
+       sprintf(error, "font has no PostScript name");
+       flags = FILEPOS;
+       break;
+      case err_sfntbadtable:
+       fpos = *va_arg(ap, filepos *);
+       sp = va_arg(ap, char *);
+       sprintf(error, "font has an invalid '%.4s' table", sp);
+       flags = FILEPOS;
+       break;
+      case err_sfntnounicmap:
+       fpos = *va_arg(ap, filepos *);
+       sprintf(error, "font has no UCS-2 character map");
+       flags = FILEPOS;
+       break;  
+      case err_sfnttablevers:
+       fpos = *va_arg(ap, filepos *);
+       sp = va_arg(ap, char *);
+       sprintf(error, "font has an unsupported '%.4s' table version", sp);
+       flags = FILEPOS;
+       break;
+      case err_sfntbadhdr:
+       fpos = *va_arg(ap, filepos *);
+       sprintf(error, "font has an invalid header");
+       flags = FILEPOS;
+       break;  
+      case err_sfntbadglyph:
+       fpos = *va_arg(ap, filepos *);
+       wc = va_arg(ap, unsigned);
+       sprintf(error,
+               "warning: character U+%04X references an non-existent glyph",
+               wc);
        flags = FILEPOS;
        break;
       case err_whatever:
@@ -346,7 +393,7 @@ static void do_error(int code, va_list ap) {
     if (flags & PREFIX)
        fputs("halibut: ", stderr);
     if (flags & FILEPOS) {
-       fprintf(stderr, "%s:", fpos.filename);
+       fprintf(stderr, "%s:", fpos.filename ? fpos.filename : "<standard input>");
        if (fpos.line > 0)
            fprintf(stderr, "%d:", fpos.line);
        if (fpos.col > 0)