]> diplodocus.org Git - nmh/blobdiff - sbr/fmt_compile.c
Put parameter names in h/utils.h memory function prototypes.
[nmh] / sbr / fmt_compile.c
index dd43dc8acfa3f17c4f0cc41f86b0a8a0c96fa501..84ef5983e77e7684437abaf35181ba33def9fbeb 100644 (file)
@@ -177,6 +177,7 @@ static struct ftable functable[] = {
      { "localmbox",  TF_LMBOX, FT_LS_LIT,      0,              TFL_PUTS },
      { "plus",       TF_NUM,   FT_LV_PLUS_L,   0,              TFL_PUTN },
      { "minus",      TF_NUM,   FT_LV_MINUS_L,  0,              TFL_PUTN },
+     { "multiply",   TF_NUM,   FT_LV_MULTIPLY_L, 0,            TFL_PUTN },
      { "divide",     TF_NUM,   FT_LV_DIVIDE_L, 0,              TFL_PUTN },
      { "modulo",     TF_NUM,   FT_LV_MODULO_L, 0,              TFL_PUTN },
      { "charleft",   TF_NONE,  FT_LV_CHAR_LEFT, 0,             TFL_PUTN },
@@ -267,13 +268,15 @@ static struct colormap colortable[] = {
     { NULL,            0,      0 }
 };
 
-/* 
- * Hash function for component name.  The function should be
- * case independent and probably shouldn't involve a routine
- * call.  This function is pretty good but will not work on
- * single character component names.  
- */
-#define        CHASH(nm) (((((nm)[0]) - ((nm)[1])) & 0x1f) + (((nm)[2]) & 0x5f))
+/* Hash function for component name.  Deliberately avoids a function
+ * call.  Is case independent.  Covers interval [0, 126] so never uses
+ * the last element of wantcomp[]. This function is "pretty good". */
+#define CHASH(nm) ( \
+        (( \
+            ((nm)[0]) - ((nm)[0] ? ((nm)[1]) : 0) \
+        ) & 0x1f) + \
+        ((nm[1]) ? (((nm)[2]) & 0x5f) : 0) \
+    )
 
 /*
  * Find a component in the hash table.
@@ -398,8 +401,6 @@ fmt_compile(char *fstring, struct format **fmt, int reset_comptable)
        comptable_initialized = 1;
     }
 
-    memset((char *) &fmt_mnull, 0, sizeof(fmt_mnull));
-
     /* it takes at least 4 char to generate one format so we
      * allocate a worst-case format array using 1/4 the length
      * of the format string.  We actually need twice this much
@@ -408,11 +409,7 @@ fmt_compile(char *fstring, struct format **fmt, int reset_comptable)
      */
     i = strlen(fstring)/2 + 1;
                if (i==1) i++;
-    next_fp = formatvec = (struct format *)mh_xcalloc ((size_t) i,
-                                                  sizeof(struct format));
-    if (next_fp == NULL)
-       adios (NULL, "unable to allocate format storage");
-
+    next_fp = formatvec = mh_xcalloc(i, sizeof *next_fp);
     infunction = 0;
 
     cp = compile(format_string);