]> diplodocus.org Git - nmh/blobdiff - sbr/fmt_compile.c
Commit ddf3a8574f65 is a fix to commit af586ebe59b7.
[nmh] / sbr / fmt_compile.c
index aa555c623fd050dce66ed0ed07861bafca77b5e0..925a06342012c2d281c82c9786708b3c645fd930 100644 (file)
  *
  * - Add code to fmttest.c to display your new function.
  *
- * - Document the new function in the mh-format(5) man page.
+ * - Document the new function in mh-format(5).
  *
  */
 
-#include <h/mh.h>
-#include <h/addrsbr.h>
-#include <h/tws.h>
-#include <h/fmt_scan.h>
-#include <h/fmt_compile.h>
-#include <h/mts.h>
-#include <h/utils.h>
+#include "h/mh.h"
+#include "getcpy.h"
+#include "error.h"
+#include "h/addrsbr.h"
+#include "h/tws.h"
+#include "h/fmt_scan.h"
+#include "h/fmt_compile.h"
+#include "h/mts.h"
+#include "h/utils.h"
 #include "terminal.h"
 
 #ifdef HAVE_SYS_TIME_H
@@ -69,13 +71,13 @@ static int infunction;                      /* function nesting cnt  */
 extern struct mailname fmt_mnull;
 
 /* ftable->type (argument type) */
-#define        TF_COMP    0        /* component expected                 */
-#define        TF_NUM     1        /* number expected                    */
-#define        TF_STR     2        /* string expected                    */
-#define        TF_EXPR    3        /* component or func. expected        */
-#define        TF_NONE    4        /* no argument                        */
-#define        TF_MYBOX   5        /* special - get current user's mbox  */
-#define        TF_NOW     6        /* special - get current unix time    */
+#define        TF_COMP    0        /* component expected                 */
+#define        TF_NUM     1        /* number expected                    */
+#define        TF_STR     2        /* string expected                    */
+#define        TF_EXPR    3        /* component or func. expected        */
+#define        TF_NONE    4        /* no argument                        */
+#define        TF_MYBOX   5        /* special - get current user's mbox  */
+#define        TF_NOW     6        /* special - get current unix time    */
 #define        TF_EXPR_SV 7        /* like expr but save current str reg */
 #define        TF_NOP     8        /* like expr but no result            */
 #define TF_MYNAME  9        /* special - get current name of user */
@@ -126,7 +128,7 @@ extern struct mailname fmt_mnull;
 struct ftable {
     char *name;                /* function name                  */
     char type;         /* argument type                  */
-    char f_type;       /* fmt type                       */
+    char f_type;       /* fmt type                       */
     char extra;                /* arg. type dependent extra info */
     char flags;
 };
@@ -158,6 +160,7 @@ static struct ftable functable[] = {
      { "decodecomp", TF_COMP,  FT_LS_DECODECOMP, 0,            TFL_PUTS },
      { "decode",     TF_EXPR,  FT_LS_DECODE,   0,              TFL_PUTS },
      { "trim",       TF_EXPR,  FT_LS_TRIM,     0,              0 },
+     { "trimr",      TF_EXPR,  FT_LS_TRIM,     0,              TFL_PUTS },
      { "kilo",       TF_EXPR,  FT_LS_KILO,     0,              TFL_PUTS },
      { "kibi",       TF_EXPR,  FT_LS_KIBI,     0,              TFL_PUTS },
      { "compval",    TF_COMP,  FT_LV_COMP,     0,              TFL_PUTN },
@@ -226,7 +229,7 @@ static struct ftable functable[] = {
      { "getmymbox",  TF_COMP,  FT_STR,         FT_GETMYMBOX,   0 },
      { "getmyaddr",  TF_COMP,  FT_LS_ADDR,     FT_GETMYADDR,   TFL_PUTS },
 
-     { "unquote",    TF_EXPR,  FT_LS_UNQUOTE,  0,              TFL_PUTS },
+     { "unquote",    TF_EXPR,  FT_LS_UNQUOTE,  0,              TFL_PUTS },
 
      { "bold",       TF_BOLD,  FT_LS_LIT,      0,              TFL_PUTS },
      { "underline",  TF_UNDERLN,FT_LS_LIT,     0,              TFL_PUTS },
@@ -352,7 +355,7 @@ lookup(char *name)
 
     while ((nm = t->name)) {
        if (*nm == c && strcmp (nm, name) == 0)
-           return (ftbl = t);
+           return ftbl = t;
 
        t++;
     }
@@ -376,7 +379,7 @@ compile_error(char *str, char *cp)
 
     inform("\"%s\": format compile error - %s",
           &usr_fstring[errpos-errctx], str);
-    adios (NULL, "%*s", errctx+1, "^");
+    die("%*s", errctx+1, "^");
 }
 
 /*
@@ -390,14 +393,14 @@ fmt_compile(char *fstring, struct format **fmt, int reset_comptable)
 {
     char *cp;
     size_t i;
-    static int comptable_initialized = 0;
+    static bool comptable_initialized;
 
     format_string = mh_xstrdup(fstring);
     usr_fstring = fstring;
 
     if (reset_comptable || !comptable_initialized) {
-       free_comptable();
-       comptable_initialized = 1;
+       free_comptable();
+       comptable_initialized = true;
     }
 
     /* it takes at least 4 char to generate one format so we
@@ -419,7 +422,7 @@ fmt_compile(char *fstring, struct format **fmt, int reset_comptable)
     *fmt = formatvec;
 
     free(format_string);
-    return (ncomp);
+    return ncomp;
 }
 
 static char *
@@ -444,7 +447,7 @@ compile (char *sp)
            break;
        }
        if (c == 0)
-           return (cp);
+           return cp;
 
        switch (c = *++cp) {
        case '%':
@@ -456,7 +459,7 @@ compile (char *sp)
        case '>':
        case '?':
        case ']':
-           return (cp);
+           return cp;
 
        case '<':
            cp = do_if(++cp);
@@ -488,15 +491,13 @@ do_spec(char *sp)
 {
     char *cp = sp;
     int c;
-#ifndef        lint
-    int ljust = 0;
-#endif /* not lint */
+    bool ljust = false;
     int wid = 0;
     char fill = ' ';
 
     c = *cp++;
     if (c == '-') {
-       ljust++;
+       ljust = true;
        c = *cp++;
     }
     if (c == '0') {
@@ -531,7 +532,7 @@ do_spec(char *sp)
     fp->f_width = wid;
     fp->f_fill = fill;
 
-    return (cp);
+    return cp;
 }
 
 /*
@@ -545,7 +546,7 @@ do_name(char *sp, int preprocess)
     char *cp = sp;
     int c;
     int i;
-    static int primed = 0;
+    static bool primed;
 
     while (isalnum(c = *cp++) || c == '-' || c == '_')
        ;
@@ -575,7 +576,7 @@ do_name(char *sp, int preprocess)
     case FT_GETMYADDR:
        if (!primed) {
            ismymbox(NULL);
-           primed++;
+           primed = true;
        }
        /* FALLTHRU */
     case FT_PARSEADDR:
@@ -595,7 +596,7 @@ do_name(char *sp, int preprocess)
        cm->c_type |= CT_ADDR;
        break;
     }
-    return (cp);
+    return cp;
 }
 
 /*
@@ -662,45 +663,45 @@ do_func(char *sp)
        break;
 
     case TF_MYBOX:
-       LS(t->f_type, getusername());
+       LS(t->f_type, getusername(1));
        break;
 
     case TF_MYNAME:
-       LS(t->f_type, getfullname());
+       LS(t->f_type, getfullname());
        break;
 
     case TF_MYHOST:
-       LS(t->f_type, LocalName(0));
+       LS(t->f_type, LocalName(0));
        break;
 
     case TF_LMBOX:
-       LS(t->f_type, getlocalmbox());
+       LS(t->f_type, getlocalmbox());
        break;
 
     case TF_BOLD:
-       LS(t->f_type, get_term_stringcap("bold"));
+       LS(t->f_type, get_term_stringcap("bold"));
        break;
 
     case TF_UNDERLN:
-       LS(t->f_type, get_term_stringcap("smul"));
+       LS(t->f_type, get_term_stringcap("smul"));
        break;
 
     case TF_STNDOUT:
-       LS(t->f_type, get_term_stringcap("smso"));
+       LS(t->f_type, get_term_stringcap("smso"));
        break;
 
     case TF_RESET:
-       LS(t->f_type, get_term_stringcap("sgr0"));
+       LS(t->f_type, get_term_stringcap("sgr0"));
        break;
 
     case TF_HASCLR:
-       LV(t->f_type, get_term_numcap("colors") > 1);
+       LV(t->f_type, get_term_numcap("colors") > 1);
        break;
 
     case TF_FGCOLR:
     case TF_BGCOLR: {
        struct colormap *cmap = colortable;
-       char *code;
+       char *code;
 
        sp = cp - 1;
        while (c && c != ')')
@@ -709,7 +710,7 @@ do_func(char *sp)
 
        while (cmap->colorname != NULL) {
            if (strcasecmp(sp, cmap->colorname) == 0)
-               break;
+               break;
            cmap++;
        }
 
@@ -727,7 +728,7 @@ do_func(char *sp)
 
        if (! code)
            code = get_term_stringparm(t->type == TF_FGCOLR ? "setf" : "setb",
-                                      cmap->nonansinum, 0);
+                                      cmap->nonansinum, 0);
 
        LS(t->f_type, code);
        break;
@@ -759,7 +760,7 @@ do_func(char *sp)
        CERROR("')' expected");
     }
     --infunction;
-    return (cp);
+    return cp;
 }
 
 /*
@@ -778,13 +779,13 @@ do_expr (char *sp, int preprocess)
     } else if (c == '(') {
        cp = do_func (cp);
     } else if (c == ')') {
-       return (--cp);
+       return --cp;
     } else if (c == '%' && *cp == '<') {
        cp = do_if (cp+1);
     } else {
        CERROR ("'(', '{', '%<' or ')' expected");
     }
-    return (cp);
+    return cp;
 }
 
 /*
@@ -856,7 +857,7 @@ do_if(char *sp)
 {
     char *cp = sp;
     struct format *fexpr,
-                          *fif = (struct format *)NULL;
+        *fif = NULL;
     int c = '<';
 
     for (;;) {
@@ -897,7 +898,7 @@ do_if(char *sp)
            fif = fp;                   /* loc of GOTO */
            fexpr->f_skip = next_fp - fexpr;
 
-           fexpr = (struct format *)NULL;/* no extra ENDIF */
+           fexpr = NULL;               /* no extra ENDIF */
 
            cp = compile (cp);          /* compile ELSE stmts */
            fif->f_skip = next_fp - fif;
@@ -921,7 +922,7 @@ do_if(char *sp)
     if (fexpr)                         /* IF ... [ELSIF ...] ENDIF */
        fexpr->f_skip = next_fp - fexpr;
 
-    return (cp);
+    return cp;
 }
 
 /*
@@ -943,18 +944,18 @@ fmt_free(struct format *fmt, int reset_comptable)
     struct format *fp = fmt;
 
     if (fp) {
-       while (! (fp->f_type == FT_DONE && fp->f_value == 0)) {
+       while (! (fp->f_type == FT_DONE && fp->f_value == 0)) {
            if (fp->f_flags & FF_STRALLOC)
-               free(fp->f_text);
+               free(fp->f_text);
            if (fp->f_flags & FF_COMPREF)
-               free_component(fp->f_comp);
+               free_component(fp->f_comp);
            fp++;
        }
        free(fmt);
     }
 
     if (reset_comptable)
-       free_comptable();
+       free_comptable();
 }
 
 /*
@@ -1021,7 +1022,7 @@ fmt_addcompentry(char *component)
     FINDCOMP(cm, component);
 
     if (cm)
-       return 0;
+       return 0;
 
     NEWCOMP(cm, component);
 
@@ -1046,13 +1047,15 @@ fmt_addcompentry(char *component)
 int
 fmt_addcomptext(char *component, char *text)
 {
-    int i, found = 0, bucket = CHASH(component);
+    int i;
+    bool found = false;
+    int bucket = CHASH(component);
     struct comp *cptr = wantcomp[bucket];
     char *cp;
 
     while (cptr) {
        if (strcasecmp(component, FENDNULL(cptr->c_name)) == 0) {
-           found++;
+           found = true;
            if (! cptr->c_text) {
                cptr->c_text = getcpy(text);
            } else {
@@ -1085,9 +1088,9 @@ fmt_appendcomp(int bucket, char *component, char *text)
     struct comp *cptr;
 
     if (bucket != -1) {
-       for (cptr = wantcomp[bucket]; cptr; cptr = cptr->c_next)
+       for (cptr = wantcomp[bucket]; cptr; cptr = cptr->c_next)
            if (strcasecmp(component, FENDNULL(cptr->c_name)) == 0)
-               cptr->c_text = add(text, cptr->c_text);
+               cptr->c_text = add(text, cptr->c_text);
     }
 }
 
@@ -1121,7 +1124,7 @@ free_comptable(void)
     struct comp *cm, *cm2;
 
     for (i = 0; i < DIM(wantcomp); i++) {
-       cm = wantcomp[i];
+       cm = wantcomp[i];
        while (cm != NULL) {
            cm2 = cm->c_next;
            free_component(cm);
@@ -1142,13 +1145,13 @@ static void
 free_component(struct comp *cm)
 {
     if (--cm->c_refcount <= 0) {
-       /* Shouldn't ever be NULL, but just in case ... */
+       /* Shouldn't ever be NULL, but just in case ... */
         free(cm->c_name);
         free(cm->c_text);
        if (cm->c_type & CT_DATE)
            free(cm->c_tws);
        if (cm->c_type & CT_ADDR && cm->c_mn && cm->c_mn != &fmt_mnull)
            mnfree(cm->c_mn);
-       free(cm);
+       free(cm);
     }
 }