summaryrefslogtreecommitdiff
path: root/src/inout.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/inout.c')
-rw-r--r--src/inout.c140
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);
}