*
* - 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
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 */
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;
};
{ "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 },
{ "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 },
while ((nm = t->name)) {
if (*nm == c && strcmp (nm, name) == 0)
- return (ftbl = t);
+ return ftbl = t;
t++;
}
inform("\"%s\": format compile error - %s",
&usr_fstring[errpos-errctx], str);
- adios (NULL, "%*s", errctx+1, "^");
+ die("%*s", errctx+1, "^");
}
/*
{
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
*fmt = formatvec;
free(format_string);
- return (ncomp);
+ return ncomp;
}
static char *
break;
}
if (c == 0)
- return (cp);
+ return cp;
switch (c = *++cp) {
case '%':
case '>':
case '?':
case ']':
- return (cp);
+ return cp;
case '<':
cp = do_if(++cp);
{
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') {
fp->f_width = wid;
fp->f_fill = fill;
- return (cp);
+ return cp;
}
/*
char *cp = sp;
int c;
int i;
- static int primed = 0;
+ static bool primed;
while (isalnum(c = *cp++) || c == '-' || c == '_')
;
case FT_GETMYADDR:
if (!primed) {
ismymbox(NULL);
- primed++;
+ primed = true;
}
/* FALLTHRU */
case FT_PARSEADDR:
cm->c_type |= CT_ADDR;
break;
}
- return (cp);
+ return cp;
}
/*
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 != ')')
while (cmap->colorname != NULL) {
if (strcasecmp(sp, cmap->colorname) == 0)
- break;
+ break;
cmap++;
}
if (! code)
code = get_term_stringparm(t->type == TF_FGCOLR ? "setf" : "setb",
- cmap->nonansinum, 0);
+ cmap->nonansinum, 0);
LS(t->f_type, code);
break;
CERROR("')' expected");
}
--infunction;
- return (cp);
+ return cp;
}
/*
} 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;
}
/*
{
char *cp = sp;
struct format *fexpr,
- *fif = (struct format *)NULL;
+ *fif = NULL;
int c = '<';
for (;;) {
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;
if (fexpr) /* IF ... [ELSIF ...] ENDIF */
fexpr->f_skip = next_fp - fexpr;
- return (cp);
+ return cp;
}
/*
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();
}
/*
FINDCOMP(cm, component);
if (cm)
- return 0;
+ return 0;
NEWCOMP(cm, 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 {
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);
}
}
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);
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);
}
}