Bläddra i källkod

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)

Roberto Ierusalimschy 31 år sedan
förälder
incheckning
31d58e2f01
2 ändrade filer med 44 tillägg och 17 borttagningar
  1. 39 13
      inout.c
  2. 5 4
      inout.h

+ 39 - 13
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 <stdio.h>
 #include <stdlib.h>
@@ -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();
+}
+

+ 5 - 4
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