Added format support for zputlit function escape. It requires
[mmh] / sbr / fmt_compile.c
index b4e8bcb..1d03b21 100644 (file)
@@ -35,6 +35,8 @@
  *
  * - Add the code in fmt_scan.c to handle your new function.
  *
+ * - Add code to fmtdump.c to display your new function.
+ *
  * - Document the new function in the mh-format(5) man page.
  *
  */
@@ -44,6 +46,7 @@
 #include <h/tws.h>
 #include <h/fmt_scan.h>
 #include <h/fmt_compile.h>
+#include <h/mts.h>
 
 #ifdef HAVE_SYS_TIME_H
 # include <sys/time.h>
@@ -75,6 +78,9 @@ extern struct mailname fmt_mnull;
 #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 */
+#define TF_MYHOST  10       /* special - get "local" hostname     */
+#define TF_LMBOX   11       /* special - get full local mailbox   */
 
 /* ftable->flags */
 /* NB that TFL_PUTS is also used to decide whether the test
@@ -133,6 +139,7 @@ static struct ftable functable[] = {
      { "putnumf",    TF_EXPR,  FT_NUMF,        0,              0 },
      { "putaddr",    TF_STR,   FT_PUTADDR,     0,              0 },
      { "putlit",     TF_STR,   FT_STRLIT,      0,              0 },
+     { "zputlit",    TF_STR,   FT_STRLITZ,     0,              0 },
      { "void",       TF_NOP,   0,              0,              0 },
 
      { "comp",       TF_COMP,  FT_LS_COMP,     0,              TFL_PUTS },
@@ -153,6 +160,9 @@ static struct ftable functable[] = {
      { "dat",        TF_NUM,   FT_LV_DAT,      0,              TFL_PUTN },
      { "strlen",     TF_NONE,  FT_LV_STRLEN,   0,              TFL_PUTN },
      { "me",         TF_MYBOX, FT_LS_LIT,      0,              TFL_PUTS },
+     { "myname",     TF_MYNAME,        FT_LS_LIT,      0,              TFL_PUTS },
+     { "myhost",     TF_MYHOST,        FT_LS_LIT,      0,              TFL_PUTS },
+     { "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 },
      { "divide",     TF_NUM,   FT_LV_DIVIDE_L, 0,              TFL_PUTN },
@@ -239,17 +249,12 @@ static struct ftable functable[] = {
 #define PUTLIT(str)            do { NEW(FT_LIT,0,0); fp->f_text = (str); } while (0)
 #define PUTC(c)                        do { NEW(FT_CHAR,0,0); fp->f_char = (c); } while (0)
 
-static char *format_string;
+char *format_string;
 static unsigned char *usr_fstring;     /* for CERROR */
 
 #define CERROR(str) compile_error (str, cp)
 
 /*
- * external prototypes
- */
-extern char *getusername(void);
-
-/*
  * static prototypes
  */
 static struct ftable *lookup(char *);
@@ -593,6 +598,18 @@ do_func(char *sp)
        LS(t->f_type, getusername());
        break;
 
+    case TF_MYNAME:
+       LS(t->f_type, getfullname());
+       break;
+
+    case TF_MYHOST:
+       LS(t->f_type, LocalName(0));
+       break;
+
+    case TF_LMBOX:
+       LS(t->f_type, getlocalmbox());
+       break;
+
     case TF_NOW:
        LV(t->f_type, time((time_t *) 0));
        break;