diff options
| author | Lua Team <team@lua.org> | 1997-07-01 12:00:00 +0000 |
|---|---|---|
| committer | repogen <> | 1997-07-01 12:00:00 +0000 |
| commit | 4f8c5d0f284e1f4da717aea5008915f185cd2e05 (patch) | |
| tree | 5671acf8a2cacf0c0524ce96d22959590a3aa5af /clients/lua/lua.c | |
| parent | 47a298a24ad3a8202440051de5938618502302a0 (diff) | |
| download | lua-github-3.0.tar.gz | |
Lua 3.03.0
Diffstat (limited to 'clients/lua/lua.c')
| -rw-r--r-- | clients/lua/lua.c | 76 |
1 files changed, 73 insertions, 3 deletions
diff --git a/clients/lua/lua.c b/clients/lua/lua.c index a6d558a2..afa2b560 100644 --- a/clients/lua/lua.c +++ b/clients/lua/lua.c @@ -3,12 +3,13 @@ ** Linguagem para Usuarios de Aplicacao */ -char *rcs_lua="$Id: lua.c,v 1.14 1996/09/24 17:30:28 roberto Exp $"; +char *rcs_lua="$Id: lua.c,v 1.18 1997/06/19 18:55:40 roberto Exp $"; #include <stdio.h> #include <string.h> #include "lua.h" +#include "auxlib.h" #include "lualib.h" @@ -19,6 +20,74 @@ char *rcs_lua="$Id: lua.c,v 1.14 1996/09/24 17:30:28 roberto Exp $"; #endif +#define DEBUG 0 + +static void testC (void) +{ +#if DEBUG +#define getnum(s) ((*s++) - '0') +#define getname(s) (nome[0] = *s++, nome) + + static int locks[10]; + lua_Object reg[10]; + char nome[2]; + char *s = luaL_check_string(1); + nome[1] = 0; + while (1) { + switch (*s++) { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + lua_pushnumber(*(s-1) - '0'); + break; + + case 'c': reg[getnum(s)] = lua_createtable(); break; + + case 'P': reg[getnum(s)] = lua_pop(); break; + + case 'g': { int n = getnum(s); reg[n] = lua_getglobal(getname(s)); break; } + + case 'G': { int n = getnum(s); + reg[n] = lua_rawgetglobal(getname(s)); + break; + } + + case 'l': locks[getnum(s)] = lua_ref(1); break; + case 'L': locks[getnum(s)] = lua_ref(0); break; + + case 'r': { int n = getnum(s); reg[n] = lua_getref(locks[getnum(s)]); break; } + + case 'u': lua_unref(locks[getnum(s)]); break; + + case 'p': { int n = getnum(s); reg[n] = lua_getparam(getnum(s)); break; } + + case '=': lua_setglobal(getname(s)); break; + + case 's': lua_pushstring(getname(s)); break; + + case 'o': lua_pushobject(reg[getnum(s)]); break; + + case 'f': lua_call(getname(s)); break; + + case 'i': reg[getnum(s)] = lua_gettable(); break; + + case 'I': reg[getnum(s)] = lua_rawgettable(); break; + + case 't': lua_settable(); break; + + case 'T': lua_rawsettable(); break; + + default: luaL_verror("unknown command in `testC': %c", *(s-1)); + + } + if (*s == 0) return; + if (*s++ != ' ') lua_error("missing ` ' between commands in `testC'"); + } +#else + lua_error("`testC' not active"); +#endif +} + + static void manual_input (void) { if (isatty(0)) { @@ -41,6 +110,7 @@ int main (int argc, char *argv[]) iolib_open (); strlib_open (); mathlib_open (); + lua_register("testC", testC); if (argc < 2) manual_input(); else for (i=1; i<argc; i++) { @@ -59,8 +129,8 @@ int main (int argc, char *argv[]) result = lua_dofile (argv[i]); if (result) { if (result == 2) { - fprintf(stderr, "lua: cannot execute file `%s' - ", argv[i]); - perror(NULL); + fprintf(stderr, "lua: cannot execute file "); + perror(argv[i]); } return 1; } |
