Add an error check for correct formatting in Deflate uncompressed
[sgt/halibut] / halibut.h
index f76d059..11b8ac2 100644 (file)
--- a/halibut.h
+++ b/halibut.h
@@ -35,7 +35,6 @@ typedef struct paragraph_Tag paragraph;
 typedef struct word_Tag word;
 typedef struct keywordlist_Tag keywordlist;
 typedef struct keyword_Tag keyword;
-typedef struct userstyle_Tag userstyle;
 typedef struct numberstate_Tag numberstate;
 typedef struct indexdata_Tag indexdata;
 typedef struct indextag_Tag indextag;
@@ -63,6 +62,7 @@ struct input_Tag {
     int nfiles;                               /* how many in the list */
     FILE *currfp;                     /* the currently open one */
     int currindex;                    /* which one is that in the list */
+    int wantclose;                    /* does the current file want closing */
     pushback *pushback;                       /* pushed-back input characters */
     int npushback, pushbacksize;
     filepos pos;
@@ -178,14 +178,15 @@ enum {
     attr_First  = 0x0001,             /* the first of a series */
     attr_Last   = 0x0002,             /* the last of a series */
     attr_Always        = 0x0003,              /* any other part of a series */
-    attr_mask   = 0x0003,
+    attr_mask   = 0x0003
 };
 /* aux values for quote-type words */
 enum {
     quote_Open  = 0x0010,
     quote_Close = 0x0020,
-    quote_mask  = 0x0030,
+    quote_mask  = 0x0030
 };
+#define isvis(x) ( ( (x) >= word_Normal && (x) <= word_LowerXref ) )
 #define isattr(x) ( ( (x) > word_Normal && (x) < word_WhiteSpace ) || \
                     ( (x) > word_WhiteSpace && (x) < word_internal_endattrs ) )
 #define sameattr(x,y) ( (((x)-(y)) & 3) == 0 )
@@ -206,6 +207,8 @@ enum {
     err_nomemory,                     /* out of memory */
     err_optnoarg,                     /* option `-%s' requires an argument */
     err_nosuchopt,                    /* unrecognised option `-%s' */
+    err_cmdcharset,                   /* unrecognised charset %s (cmdline) */
+    err_futileopt,                    /* futile option `-%s'%s */
     err_noinput,                      /* no input files */
     err_cantopen,                     /* unable to open input file `%s' */
     err_nodata,                               /* no data in input files */
@@ -237,11 +240,28 @@ enum {
     err_multikw,                      /* keyword clash in sections */
     err_misplacedlcont,                       /* \lcont not after a list item */
     err_sectmarkerinblock,            /* section marker appeared in block */
-    err_infodirentry,                 /* \cfg{info-dir-entry} missing param */
+    err_cfginsufarg,                  /* \cfg{%s} insufficient args (<%d) */
     err_infonodechar,                 /* colon/comma in node name in info */
     err_text_codeline,                /* \c line too long in text backend */
     err_htmlver,                      /* unrecognised HTML version keyword */
     err_charset,                      /* unrecognised character set name */
+    err_nofont,                       /* unrecognised font name */
+    err_afmeof,                       /* eof in AFM file */
+    err_afmkey,                       /* missing expected keyword in AFM */
+    err_afmvers,                      /* unsupported AFM version */
+    err_afmval,                       /* missing value(s) for AFM key */
+    err_pfeof,                        /* eof in Type 1 font file */
+    err_pfhead,                               /* bad Type 1 header line */
+    err_pfbad,                        /* otherwise invalide Type 1 font */
+    err_pfnoafm,                      /* Type 1 font but no AFM */
+    err_chmnames,                     /* need both or neither of hhp+chm */
+    err_sfntnotable,                  /* required sfnt table missing */
+    err_sfntnopsname,                 /* sfnt has no PostScript name */
+    err_sfntbadtable,                 /* sfnt table not valid */
+    err_sfntnounicmap,                /* sfnt has no UCS-2 cmap */
+    err_sfnttablevers,                /* sfnt table version unknown */
+    err_sfntbadhdr,                   /* sfnt has bad header */
+    err_sfntbadglyph,                 /* sfnt cmap references bad glyph */
     err_whatever                       /* random error of another type */
 };
 
@@ -263,7 +283,7 @@ void sfree(void *p);
 void free_word_list(word *w);
 void free_para_list(paragraph *p);
 word *dup_word_list(word *w);
-char *dupstr(char *s);
+char *dupstr(char const *s);
 
 #define snew(type) ( (type *) smalloc (sizeof (type)) )
 #define snewn(number, type) ( (type *) smalloc ((number) * sizeof (type)) )
@@ -314,6 +334,7 @@ int ustrwid(wchar_t const *s, int charset);
 void help(void);
 void usage(void);
 void showversion(void);
+void listcharsets(void);
 
 /*
  * licence.c
@@ -323,7 +344,7 @@ void licence(void);
 /*
  * version.c
  */
-const char *const version;
+extern const char *const version;
 
 /*
  * misc.c
@@ -354,6 +375,7 @@ void rdadds(rdstring *rs, wchar_t const *p);
 wchar_t *rdtrim(rdstring *rs);
 void rdaddc(rdstringc *rs, char c);
 void rdaddsc(rdstringc *rs, char const *p);
+void rdaddsn(rdstringc *rc, char const *p, int len);
 char *rdtrimc(rdstringc *rs);
 
 int compare_wordlists(word *a, word *b);
@@ -379,6 +401,22 @@ paragraph *cmdline_cfg_simple(char *string, ...);
 paragraph *read_input(input *in, indexdata *idx);
 
 /*
+ * in_afm.c
+ */
+void read_afm_file(input *in);
+
+/*
+ * in_pf.c
+ */
+void read_pfa_file(input *in);
+void read_pfb_file(input *in);
+
+/*
+ * in_sfnt.c
+ */
+void read_sfnt_file(input *in);
+
+/*
  * keywords.c
  */
 struct keywordlist_Tag {
@@ -458,12 +496,6 @@ void number_free(numberstate *);
 void gen_citations(paragraph *, keywordlist *);
 
 /*
- * style.c
- */
-struct userstyle_Tag {
-};
-
-/*
  * bk_text.c
  */
 void text_backend(paragraph *, keywordlist *, indexdata *, void *);
@@ -497,6 +529,7 @@ paragraph *info_config_filename(char *filename);
  * bk_paper.c
  */
 void *paper_pre_backend(paragraph *, keywordlist *, indexdata *);
+void listfonts(void);
 
 /*
  * bk_ps.c