From 31d58e2f0193998d28f1c0587573fdc35da383fd Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Thu, 3 Nov 1994 20:34:29 -0200 Subject: [PATCH] more functions from opcode.c 'open_file' and 'open_string' return an error message lua_type renamed to luaI_type (I for Internal, as this function is not exported outside lua) --- inout.c | 52 +++++++++++++++++++++++++++++++++++++++------------- inout.h | 9 +++++---- 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/inout.c b/inout.c index 143acece..3c63c638 100644 --- a/inout.c +++ b/inout.c @@ -5,7 +5,7 @@ ** Also provides some predefined lua functions. */ -char *rcs_inout="$Id: inout.c,v 2.5 1994/10/17 19:04:19 celes Exp roberto $"; +char *rcs_inout="$Id: inout.c,v 2.6 1994/11/02 20:29:39 roberto Exp roberto $"; #include #include @@ -60,16 +60,20 @@ static int stringinput (void) /* ** Function to open a file to be input unit. -** Return 0 on success or 1 on error. +** Return 0 on success or error message on error. */ -int lua_openfile (char *fn) +char *lua_openfile (char *fn) { lua_linenumber = 1; lua_setinput (fileinput); fp = fopen (fn, "r"); - if (fp == NULL) return 1; - if (lua_addfile (fn)) return 1; - return 0; + if (fp == NULL) + { + static char buff[32]; + sprintf(buff, "unable to open file %.10s", fn); + return buff; + } + return lua_addfile (fn); } /* @@ -88,7 +92,7 @@ void lua_closefile (void) /* ** Function to open a string to be input unit */ -int lua_openstring (char *s) +char *lua_openstring (char *s) { lua_linenumber = 1; lua_setinput (stringinput); @@ -96,9 +100,8 @@ int lua_openstring (char *s) { char sn[64]; sprintf (sn, "String: %10.10s...", s); - if (lua_addfile (sn)) return 1; + return lua_addfile (sn); } - return 0; } /* @@ -208,19 +211,21 @@ void lua_print (void) else if (lua_iscfunction(obj)) printf("cfunction: %p\n",lua_getcfunction (obj) ); else if (lua_isuserdata(obj)) printf("userdata: %p\n",lua_getuserdata (obj)); - else if (lua_istable(obj)) printf("table: %p\n",obj); + else if (lua_istable(obj)) printf("table: %p\n",avalue(obj)); else if (lua_isnil(obj)) printf("nil\n"); else printf("invalid value to print\n"); } } - - + + /* ** Internal function: return an object type. */ -void lua_type (void) +void luaI_type (void) { Object *o = lua_getparam(1); + if (o == NULL) + lua_error("no parameter to function 'type'"); switch (tag(o)) { case LUA_T_NIL : @@ -247,3 +252,24 @@ void lua_type (void) } } +/* +** Internal function: convert an object to a number +*/ +void lua_obj2number (void) +{ + lua_Object o = lua_getparam(1); + if (lua_isnumber(o)) + lua_pushobject(o); + else if (lua_isstring(o)) + { + char c; + float f; + if (sscanf(lua_getstring(o),"%f %c",&f,&c) == 1) + lua_pushnumber(f); + else + lua_pushnil(); + } + else + lua_pushnil(); +} + diff --git a/inout.h b/inout.h index f8cc0e93..0714f1a4 100644 --- a/inout.h +++ b/inout.h @@ -1,5 +1,5 @@ /* -** $Id: inout.h,v 1.2 1994/10/11 14:38:17 celes Exp roberto $ +** $Id: inout.h,v 1.3 1994/11/02 20:29:39 roberto Exp roberto $ */ @@ -10,9 +10,9 @@ extern int lua_linenumber; extern int lua_debug; extern int lua_debugline; -int lua_openfile (char *fn); +char *lua_openfile (char *fn); void lua_closefile (void); -int lua_openstring (char *s); +char *lua_openstring (char *s); void lua_closestring (void); int lua_pushfunction (char *file, int function); void lua_popfunction (void); @@ -21,6 +21,7 @@ void lua_reportbug (char *s); void lua_internaldofile (void); void lua_internaldostring (void); void lua_print (void); -void lua_type (void); +void luaI_type (void); +void lua_obj2number (void); #endif