Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
// This file: // http://anggtwu.net/LUA/Gdb1.c.html // http://anggtwu.net/LUA/Gdb1.c // (find-angg "LUA/Gdb1.c") // Author: Eduardo Ochs <eduardoochs@gmail.com> // // Superseded by: // (find-lisptree "call-lua.c") // // (defun c () (interactive) (message (find-sh0 "~/LUA/Gdb1.sh compileandrun"))) // (defun cs () (interactive) (find-fline "~/LUA/Gdb1.sh")) // (defun ec () (interactive) (find-angg "LUA/Gdb1.c")) // (defun eg () (interactive) (find-angg "LUA/Gdb1.gdb")) // (defun el () (interactive) (find-angg "LUA/Gdb1.lua")) // (defun es () (interactive) (find-angg "LUA/Gdb1.sh")) // (defun oc () (interactive) (find-angg ".lua51/PP.c")) // (defun og () (interactive) (find-angg ".lua51/PP.gdb")) // (defun rs () (interactive) (find-angg "LISP/2025-lua-runstring-0.c")) // (find-lua53manual "#lua_pop") // (find-lua53manual "#lua_pushvalue") // (find-lua53manual "#lua_pushnumber") // (find-lua53manual "#lua_call") // // «.lua_my_init» (to "lua_my_init") // «.PP» (to "PP") // «.PPstack» (to "PPstack") // «.lua_fs» (to "lua_fs") // «.lua_fss» (to "lua_fss") #include <lua.h> #include <lauxlib.h> #include <lualib.h> #include <stdio.h> static lua_State *L = NULL; // «lua_my_init» (to ".lua_my_init") void lua_my_init(void) { if (!L) { L = luaL_newstate(); luaL_openlibs (L); } } // «PP» (to ".PP") // Old, from: (find-angg ".lua51/PP.c") void PP(lua_State *L, int index) { lua_getglobal(L, "PP"); if (index==0) { /* 0 is never a valid index */ lua_pushnil(L); } else { lua_pushvalue(L, index); } lua_call(L, 1, 0); } // «PPstack» (to ".PPstack") // Calls: (find-angg "LUA/Gdb1.lua" "PPstack") // to print the whole stack with indices. // Leaves the stack unchanged. void PPstack(lua_State *L) { int n = lua_gettop(L); int i; lua_getglobal (L, "PPstack"); for (i=0;i<n;++i) lua_pushvalue (L, -n-1); lua_call (L, n, 0); } // «lua_fs» (to ".lua_fs") // Returns tostring(f(arg1)) const char *lua_fs(char *f, char *arg1) { const char *result; lua_getglobal (L, "tostring"); lua_getglobal (L, f); lua_pushstring (L, arg1); lua_call (L, 1, 1); lua_call (L, 1, 1); result = lua_tostring(L, -1); lua_pop(L, 1); return result; } // «lua_fss» (to ".lua_fss") // Returns tostring(f(arg1,arg2)) const char *lua_fss(char *f, char *arg1, char *arg2) { const char *result; lua_getglobal (L, "tostring"); lua_getglobal (L, f); lua_pushstring (L, arg1); lua_pushstring (L, arg2); lua_call (L, 2, 1); lua_call (L, 1, 1); result = lua_tostring(L, -1); lua_pop(L, 1); return result; } #ifdef MAIN int main(int argc, const char ** argv) { lua_my_init(); lua_fs ("dofile", "/home/edrx/LUA/Gdb1.lua"); lua_fs ("eval", "foo = function (a,b) return 10*a+b end"); lua_fs ("eval", "PPexpr = function (str) PP(expr(str)) end"); lua_fs ("PPexpr", "2+3"); lua_fs ("PPexpr", "foo(2,3)"); lua_fs ("print", "a"); lua_fss("print", "a", "b"); return 0; } #endif // (load "~/LUA/Gdb1.el") // (find-angg "LUA/Gdb1.el") // (find-preproc :end) #ifdef PREPROC lua_call(L, 22, 33); #endif /* * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) LUA_INCLUDE_DIR=/usr/include/lua5.3 LUA_LIB=lua5.3 STEM=Gdb1 gcc -gdwarf-4 -g3 -shared -I${LUA_INCLUDE_DIR} -o ${STEM}.so ${STEM}.c -l${LUA_LIB} gcc -gdwarf-4 -g3 -DMAIN -I${LUA_INCLUDE_DIR} -o ${STEM} ${STEM}.c -l${LUA_LIB} ls -lAF ${STEM}* ./${STEM} * (eepitch-sbcl) * (eepitch-kill) * (eepitch-sbcl) * (eepitch-sly) * (eepitch-kill) * (eepitch-sly) ** (find-angg "LUA/Gdb1.sh") * (find-sh0 "~/LUA/Gdb1.sh compile") (load #P"~/quicklisp/setup.lisp") (ql:quickload :cffi) (cffi:load-foreign-library "./Gdb1.so") ** (find-es "lisp" "cffi") (defun lua-my-init () (cffi:foreign-funcall "lua_my_init")) (defun lua-fs (f arg1) (cffi:foreign-funcall "lua_fs" :string f :string arg1 :string)) (defun lua-fss (f arg1 arg2) (cffi:foreign-funcall "lua_fss" :string f :string arg1 :string arg2 :string)) (defun lua-verbatimbox (str) (lua-fs (f arg1) (cffi:foreign-funcall "lua_fss" :string f :string arg1 :string arg2 :string)) (lua-my-init) (lua-fs "dofile" "/home/edrx/LUA/Gdb1.lua") (lua-fs "PP" "/home/edrx/LUA/Gdb1.lua") (lua-fs "eval" "foo = function (a,b) return 10*a+b end") (lua-fss "foo" "2" "3") (lua-fs "verbatimbgbox" "a__b") (lua-fs "verbatimbgbox" "a__. | | b c") (lua-runstring "return 'ab'..'cd'") ** (find-angg ".emacs" "my-gud-mode") */ // Local Variables: // coding: utf-8-unix // End: