diff options
Diffstat (limited to 'src/inout.c')
| -rw-r--r-- | src/inout.c | 140 |
1 files changed, 33 insertions, 107 deletions
diff --git a/src/inout.c b/src/inout.c index 7bd7c235..c73030e3 100644 --- a/src/inout.c +++ b/src/inout.c @@ -5,7 +5,7 @@ ** Also provides some predefined lua functions. */ -char *rcs_inout="$Id: inout.c,v 2.16 1994/12/20 21:20:36 roberto Exp $"; +char *rcs_inout="$Id: inout.c,v 2.25 1995/10/25 13:05:51 roberto Exp $"; #include <stdio.h> #include <stdlib.h> @@ -19,27 +19,19 @@ char *rcs_inout="$Id: inout.c,v 2.16 1994/12/20 21:20:36 roberto Exp $"; #include "tree.h" #include "lua.h" -/* Exported variables */ -Word lua_linenumber; -Bool lua_debug; -Word lua_debugline = 0; - -/* Internal variables */ - #ifndef MAXFUNCSTACK #define MAXFUNCSTACK 100 #endif - -typedef struct FuncStackNode { - struct FuncStackNode *next; - char *file; - Word function; - Word line; -} FuncStackNode; - -static FuncStackNode *funcStack = NULL; -static Word nfuncstack=0; + +#define MAXMESSAGE MAXFUNCSTACK*80 + + +/* Exported variables */ +Word lua_linenumber; +Bool lua_debug = 0; +char *lua_parsedfile; + static FILE *fp; static char *st; @@ -66,16 +58,23 @@ static int stringinput (void) */ char *lua_openfile (char *fn) { - lua_linenumber = 1; lua_setinput (fileinput); - fp = fopen (fn, "r"); + if (fn == NULL) + { + fp = stdin; + fn = "(stdin)"; + } + else + fp = fopen (fn, "r"); if (fp == NULL) { - static char buff[32]; - sprintf(buff, "unable to open file %.10s", fn); + static char buff[255]; + sprintf(buff, "unable to open file `%.200s'", fn); return buff; } - return lua_addfile (fn); + lua_linenumber = 1; + lua_parsedfile = lua_constcreate(fn)->ts.str; + return NULL; } /* @@ -83,9 +82,8 @@ char *lua_openfile (char *fn) */ void lua_closefile (void) { - if (fp != NULL) + if (fp != NULL && fp != stdin) { - lua_delfile(); fclose (fp); fp = NULL; } @@ -94,16 +92,12 @@ void lua_closefile (void) /* ** Function to open a string to be input unit */ -char *lua_openstring (char *s) +void lua_openstring (char *s) { - lua_linenumber = 1; lua_setinput (stringinput); st = s; - { - char sn[64]; - sprintf (sn, "String: %10.10s...", s); - return lua_addfile (sn); - } + lua_linenumber = 1; + lua_parsedfile = lua_constcreate("(string)")->ts.str; } /* @@ -111,75 +105,6 @@ char *lua_openstring (char *s) */ void lua_closestring (void) { - lua_delfile(); -} - - -/* -** Called to execute SETFUNCTION opcode, this function pushs a function into -** function stack. -*/ -void lua_pushfunction (char *file, Word function) -{ - FuncStackNode *newNode; - if (nfuncstack++ >= MAXFUNCSTACK) - { - lua_reportbug("function stack overflow"); - } - newNode = new(FuncStackNode); - newNode->function = function; - newNode->file = file; - newNode->line= lua_debugline; - newNode->next = funcStack; - funcStack = newNode; -} - -/* -** Called to execute RESET opcode, this function pops a function from -** function stack. -*/ -void lua_popfunction (void) -{ - FuncStackNode *temp = funcStack; - if (temp == NULL) return; - --nfuncstack; - lua_debugline = temp->line; - funcStack = temp->next; - luaI_free(temp); -} - -/* -** Report bug building a message and sending it to lua_error function. -*/ -void lua_reportbug (char *s) -{ - char msg[MAXFUNCSTACK*80]; - strcpy (msg, s); - if (lua_debugline != 0) - { - if (funcStack) - { - FuncStackNode *func = funcStack; - int line = lua_debugline; - sprintf (strchr(msg,0), "\n\tactive stack:\n"); - do - { - sprintf (strchr(msg,0), - "\t-> function \"%s\" at file \"%s\":%u\n", - lua_constant[func->function]->str, func->file, line); - line = func->line; - func = func->next; - lua_popfunction(); - } while (func); - } - else - { - sprintf (strchr(msg,0), - "\n\tin statement begining at line %u of file \"%s\"", - lua_debugline, lua_filename()); - } - } - lua_error (msg); } @@ -218,7 +143,7 @@ void lua_print (void) { if (lua_isnumber(obj)) printf("%g\n",lua_getnumber(obj)); else if (lua_isstring(obj)) printf("%s\n",lua_getstring(obj)); - else if (lua_isfunction(obj)) printf("function: %p\n",bvalue(luaI_Address(obj))); + else if (lua_isfunction(obj)) printf("function: %p\n",(luaI_Address(obj))->value.tf); else if (lua_iscfunction(obj)) printf("cfunction: %p\n",lua_getcfunction(obj) ); else if (lua_isuserdata(obj)) printf("userdata: %p\n",lua_getuserdata(obj)); @@ -235,9 +160,11 @@ void lua_print (void) void luaI_type (void) { lua_Object o = lua_getparam(1); + int t; if (o == LUA_NOOBJECT) lua_error("no parameter to function 'type'"); - switch (lua_type(o)) + t = lua_type(o); + switch (t) { case LUA_T_NIL : lua_pushliteral("nil"); @@ -252,15 +179,14 @@ void luaI_type (void) lua_pushliteral("table"); break; case LUA_T_FUNCTION : - lua_pushliteral("function"); - break; case LUA_T_CFUNCTION : - lua_pushliteral("cfunction"); + lua_pushliteral("function"); break; default : lua_pushliteral("userdata"); break; } + lua_pushnumber(t); } /* @@ -289,6 +215,6 @@ void luaI_error (void) { char *s = lua_getstring(lua_getparam(1)); if (s == NULL) s = "(no message)"; - lua_reportbug(s); + lua_error(s); } |
