|
@@ -8,10 +8,44 @@
|
|
|
*
|
|
|
*/
|
|
|
#include <stdio.h>
|
|
|
+#include <string.h>
|
|
|
+#include <math.h>
|
|
|
|
|
|
+extern "C" {
|
|
|
+#include <lua.h>
|
|
|
+#include <lauxlib.h>
|
|
|
+#include <lualib.h>
|
|
|
+}
|
|
|
+
|
|
|
+static int l_sin (lua_State *L) {
|
|
|
+ double d = luaL_checknumber(L, 1); /* get argument */
|
|
|
+ lua_pushnumber(L, sin(d)); /* push result */
|
|
|
+ return 1; /* number of results */
|
|
|
+}
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
|
{
|
|
|
- printf("Hello !\n");
|
|
|
+ char buff[256];
|
|
|
+ int error;
|
|
|
+ lua_State *L = luaL_newstate(); /* opens Lua */
|
|
|
+ luaL_openlibs(L); /* opens the basic library */
|
|
|
+
|
|
|
+ lua_pushcfunction(L, l_sin);
|
|
|
+ lua_setglobal(L, "mysin");
|
|
|
+ printf("[0]>");
|
|
|
+
|
|
|
+ while (fgets(buff, sizeof(buff), stdin) != NULL)
|
|
|
+ {
|
|
|
+ error = luaL_loadstring(L, buff) || lua_pcall(L, 0, LUA_MULTRET, 0);
|
|
|
+
|
|
|
+ if (error)
|
|
|
+ {
|
|
|
+ fprintf(stderr, "%s\n", lua_tostring(L, -1));
|
|
|
+ lua_pop(L, 1); /* pop error message from the stack */
|
|
|
+ }
|
|
|
+ printf("[%d]>", lua_gettop(L));
|
|
|
+ }
|
|
|
+
|
|
|
+ lua_close(L);
|
|
|
return 0;
|
|
|
}
|