Lua improvements:
authorPierre Habouzit <madcoder@debian.org>
Sun, 18 Mar 2007 13:15:15 +0000 (14:15 +0100)
committerPierre Habouzit <madcoder@debian.org>
Sun, 18 Mar 2007 13:15:15 +0000 (14:15 +0100)
  * remove old lib-lua cruft.
  * make luapkg2c support bool type.
  * make luapkg2c support C bit-fields.
  * import beep{,_new}, and hcache_backend.

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
init.h
lib-lua/Makefile.am
lib-lua/lib-lua_priv.h [deleted file]
lib-lua/lua-token.sh
lib-lua/luapkg2c.pl
lib-lua/madmutt.cpkg
lib-lua/runtime.c
lib-ui/curs_main.c
lib-ui/curses.h
mutt.h

diff --git a/init.h b/init.h
index af3445f..a5e6ca3 100644 (file)
--- a/init.h
+++ b/init.h
@@ -319,18 +319,6 @@ struct option_t MuttVars[] = {
    ** unset, you must first use the ``tag-prefix'' function (default: "\fT;\fP") to
    ** make the next function apply to all tagged messages.
    */
-  {"beep", DT_BOOL, R_NONE, OPTBEEP, "yes" },
-  /*
-   ** .pp
-   ** When this variable is \fIset\fP, Madmutt will beep when an error occurs.
-   */
-  {"beep_new", DT_BOOL, R_NONE, OPTBEEPNEW, "no" },
-  /*
-   ** .pp
-   ** When this variable is \fIset\fP, Madmutt will beep whenever it prints a message
-   ** notifying you of new mail.  This is independent of the setting of the
-   ** ``$$beep'' variable.
-   */
   {"bounce", DT_QUAD, R_NONE, OPT_BOUNCE, "ask-yes" },
   /*
    ** .pp
index b28c98d..8f149f5 100644 (file)
@@ -8,11 +8,11 @@ noinst_LIBRARIES = liblua.a
 
 liblua_a_DEPENDENCIES = madmutt.h
 liblua_a_SOURCES = madmutt.cpkg \
-                  lib-lua.h lib-lua_priv.h \
+                  lib-lua.h \
                   runtime.c \
                   $(BUILT_SOURCES)
 
-noinst_HEADERS   = lib-lua.h lib-lua_priv.h
+noinst_HEADERS   = lib-lua.h
 
 lua-token.c lua-token.h: lua-token.sh
        sh $< $@ || (rm -f $@; exit 1)
diff --git a/lib-lua/lib-lua_priv.h b/lib-lua/lib-lua_priv.h
deleted file mode 100644 (file)
index 93dd397..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or (at
- *  your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- *  MA 02110-1301, USA.
- *
- *  Copyright © 2007 Pierre Habouzit
- */
-
-#ifndef MUTT_LIB_LUA_LIB_LUA_PRIV_H
-#define MUTT_LIB_LUA_LIB_LUA_PRIV_H
-
-#include "lib-lua.h"
-
-#include <lua.h>
-#include <lualib.h>
-#include <lauxlib.h>
-
-typedef struct reg_entry {
-    int type;
-    union {
-        int i;
-        char *s;
-    };
-} reg_entry;
-
-
-#endif
index 5c61d66..3f45eb5 100644 (file)
@@ -110,10 +110,13 @@ chmod -w $1
 exit 0
 
 ############ Put tokens here ############
+## beep
+## beep_new
 ## bindir
 ## docdir
 ## dotlock
 ## editor
+## hcache_backend
 ## quit
 ## sendmail
 ## shell
index 2d152cb..72d84c7 100755 (executable)
@@ -86,10 +86,10 @@ sub parse_type($$) {
         if (/^\s*\.(push|kind|ctype|check)\s*=\s*(.*?)\s*;\s*$/) {
             $t{$1} = $2;
             if ($1 eq "kind") {
-                if ($2 =~ /^'([si])'$/) {
+                if ($2 =~ /^'([bis])'$/) {
                     $t{kind} = $1;
                 } else {
-                    fatal($src, "error: .kind should be 'i' or 's' got $2)");
+                    fatal($src, "error: .kind should be [ibs] got $2)");
                 }
             }
         } elsif (!/^\s*$/) {
@@ -101,15 +101,22 @@ sub parse_type($$) {
         fatal($src, "incomplete type $type: missing .$i") unless defined $t{$i};
     }
     unless (defined $t{check}) {
-        if ($t{kind} eq 's') {
-            $t{check} = 'luaL_checkstring($L, $$)';
+        if ($t{kind} eq 'b') {
+            $t{check} = '(luaL_checkint($L, $$) == 0)';
         }
 
         if ($t{kind} eq 'i') {
-            $t{check} = 'luaL_checkint($l, $$)';
+            $t{check} = 'luaL_checkint($L, $$)';
+        }
+
+        if ($t{kind} eq 's') {
+            $t{check} = 'luaL_checkstring($L, $$)';
         }
     }
 
+    $t{ctypefmt} .= ' %s' unless (($t{ctypefmt} = $t{ctype}) =~ s/:/ \%s :/);
+    $t{ctype} =~ s/:.*//;
+
     return $types{$type} = \%t;
 }
 
@@ -212,6 +219,16 @@ sub dump_fun($$) {
         $call =~ s/\$\$/$t{type}->{push}/;
     }
 
+    if ($t{type}->{kind} eq 'b') {
+        put_line($f, 0);
+        print "    lua_pushboolean(L, $call);\n";
+    }
+
+    if ($t{type}->{kind} eq 'i') {
+        put_line($f, 0);
+        print "    lua_pushint(L, $call);\n";
+    }
+
     if ($t{type}->{kind} eq 's') {
         if ($t{const}) {
             put_line($f, 0);
@@ -226,11 +243,6 @@ sub dump_fun($$) {
         }
     }
 
-    if ($t{type}->{kind} eq 'i') {
-        put_line($f, 0);
-        print "    lua_pushint(L, $call);\n";
-    }
-
     printf "    return %d;\n", ($f->{type} ne "void");
     print "}\n";
 }
@@ -253,6 +265,7 @@ sub dump_struct_full($) {
             put_line($p, 0);
             print "    $p->{init},\n";
         } else {
+            print "    0,\n"    if ($t{type}->{kind} eq 'b');
             print "    0,\n"    if ($t{type}->{kind} eq 'i');
             print "    NULL,\n" if ($t{type}->{kind} eq 's');
         }
@@ -273,8 +286,9 @@ EOF
         next if $t{const};
 
         put_line($p, 0);
-        print "        m_strreplace(&$var, $p->{init});\n" if ($t{type}->{kind} eq 's');
+        print "        $var = $p->{init};\n"               if ($t{type}->{kind} eq 'b');
         print "        $var = $p->{init};\n"               if ($t{type}->{kind} eq 'i');
+        print "        m_strreplace(&$var, $p->{init});\n" if ($t{type}->{kind} eq 's');
     }
     print "};\n";
 };
@@ -286,7 +300,7 @@ sub dump_struct_short($) {
     foreach (@{$pkg->{props}}) {
         my $p = $pkg->{members}{$_};
         my %t = find_type($p, $p->{type});
-        print "    $t{type}->{ctype} $p->{name};\n";
+        printf "    $t{type}->{ctypefmt};\n", $p->{name};
     }
     put_line($pkg, 0);
     print <<EOF;
@@ -329,14 +343,18 @@ EOF
         my $tok = $p->{name};
         $tok =~ tr/a-z/A-Z/;
 
-        if ($t{type}->{kind} eq 's') {
-            $call = "lua_pushstring(L, $call)";
+        if ($t{type}->{kind} eq 'b') {
+            $call = "lua_pushboolean(L, $call)";
         }
 
         if ($t{type}->{kind} eq 'i') {
             $call = "lua_pushinteger(L, $call)";
         }
 
+        if ($t{type}->{kind} eq 's') {
+            $call = "lua_pushstring(L, $call)";
+        }
+
         if (defined $t{type}->{push}) {
             $call =~ s/\$\$/$t{type}->{push}/;
         }
@@ -376,8 +394,9 @@ EOF
 
         put_line($p, 0);
         print  "      case LTK_$tok: \n";
-        print "        m_strreplace(&$var, $check)" if ($t{type}->{kind} eq 's');
+        print "        $var = $check"               if ($t{type}->{kind} eq 'b');
         print "        $var = $check"               if ($t{type}->{kind} eq 'i');
+        print "        m_strreplace(&$var, $check)" if ($t{type}->{kind} eq 's');
 
         print  ";\n        return 1;\n";
     }
@@ -469,7 +488,6 @@ sub do_c($) {
             print;
         }
     }
-    print "/* vi"."m:set ft=c: */\n";
 
     stream_close(\%src);
 }
index f11fc65..9d1ffd7 100644 (file)
@@ -45,6 +45,11 @@ static const char *luaM_path_post(const char *val)
     return path;
 }
 
+@type bool = {
+    .kind = 'b';
+    .ctype = unsigned : 1;
+};
+
 @type string_t = {
     .kind = 's';
     .ctype = const char *;
@@ -59,22 +64,36 @@ static const char *luaM_path_post(const char *val)
 @type quadopt_t = {
     .kind  = 'i';
     .check = luaM_checkquadopt($L, $$);
-    .ctype = quadopt_t;
+    .ctype = unsigned : 2;
 };
 
+#if defined(HAVE_QDBM)
+#  define HCACHE_BACKEND "qdbm"
+#elif defined(HAVE_GDBM)
+#  define HCACHE_BACKEND "gdbm"
+#elif defined(HAVE_DB4)
+#  define HCACHE_BACKEND "db4"
+#else
+#  define HCACHE_BACKEND "unknown"
+#endif
+
 @package madmutt {
     const string_t version    = VERSION;
     const string_t sysconfdir = SYSCONFDIR;
     const string_t bindir     = BINDIR;
     const string_t docdir     = PKGDOCDIR;
+    const string_t hcache_backend = HCACHE_BACKEND;
 
     path_t dotlock  = BINDIR "/mutt_dotlock";
     path_t editor   = getenv("VISUAL") ?: getenv("EDITOR") ?: "vi";
     path_t sendmail = SENDMAIL " -eom -oi";
     path_t shell    = madmutt_init_shell();
 
-    quadopt_t quit  = M_YES;
+    quadopt_t quit     = M_YES;
+    bool      beep     = 1;
+    bool      beep_new = 0;
 
     const string_t pwd(void) = madmutt_pwd();
 } ml_core;
 
+/* vim:set ft=c: */
index e4482f2..34de3bb 100644 (file)
  */
 
 #include <lib-lib/lib-lib.h>
-#include "lib-lua_priv.h"
+#include <lib-lua/lib-lua.h>
 
 static lua_State *L;
 
-
 void luaM_initialize(void)
 {
     static const luaL_Reg lualibs[] = {
index 246f240..600932a 100644 (file)
@@ -479,7 +479,7 @@ int mutt_index_menu (void)
           sidebar_draw ();
           mutt_message (_("New mail in this mailbox."));
 
-          if (option (OPTBEEPNEW))
+          if (ml_core.beep_new)
             beep ();
         }
         else if (check == M_FLAGS)
@@ -506,7 +506,7 @@ int mutt_index_menu (void)
         menu->redraw |= REDRAW_SIDEBAR;
       }
       if (do_buffy_notify) {
-        if (buffy_notify () && option (OPTBEEPNEW))
+        if (buffy_notify () && ml_core.beep_new)
           beep ();
       }
       else
index 4304363..c86b651 100644 (file)
@@ -62,7 +62,7 @@
 #define CLEARLINE_WIN(x) move(x,(option(OPTMBOXPANE)?SidebarWidth:0)), clrtoeol()
 #define CLEARLINE(x) move(x,0), clrtoeol()
 #define CENTERLINE(x,y) move(y, (COLS-strlen(x))/2), addstr(x)
-#define BEEP() do { if (option (OPTBEEP)) beep(); } while (0)
+#define BEEP() do { if (ml_core.beep) beep(); } while (0)
 
 #if ! (defined(USE_SLANG_CURSES) || defined(HAVE_CURS_SET))
 #define curs_set(x)
diff --git a/mutt.h b/mutt.h
index 4758623..d30984f 100644 (file)
--- a/mutt.h
+++ b/mutt.h
@@ -225,8 +225,6 @@ enum {
   OPTATTACHSPLIT,
   OPTAUTOEDIT,
   OPTAUTOTAG,
-  OPTBEEP,
-  OPTBEEPNEW,
   OPTBOUNCEDELIVERED,
   OPTBRAILLEFRIENDLY,
   OPTCHECKNEW,