summaryrefslogtreecommitdiff
path: root/example/test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'example/test.cpp')
-rw-r--r--example/test.cpp104
1 files changed, 104 insertions, 0 deletions
diff --git a/example/test.cpp b/example/test.cpp
new file mode 100644
index 0000000..dcba390
--- /dev/null
+++ b/example/test.cpp
@@ -0,0 +1,104 @@
+/*************************************************************************
+ > File Name: main.c
+ > Author: pxz
+ > Created Time: Thu 09 Jul 2020 07:08:40 AM CST
+ ************************************************************************/
+extern "C"
+{
+ #include<stdio.h>
+ #include<string.h>
+ #include<stdlib.h>
+}
+#include"../include/tsg_lua_interface.h"
+
+static char *get_file_to_buffer(const char *file, size_t *len)
+{
+ FILE *fp = fopen(file, "r");
+ if (fp)
+ {
+ fseek(fp, 0, 2);
+ *len = ftell(fp);
+ fseek(fp, 0, 0);
+ if (*len == 0)
+ {
+ fclose(fp);
+ return NULL;
+ }
+ char *buff = (char *)malloc((*len) + 1);
+ int num = fread(buff, 1, *len, fp);
+ if (num != 0)
+ {
+ buff[num] = 0;
+ *len = num - 1;
+ fclose(fp);
+ return buff;
+ }
+ free(buff);
+ fclose(fp);
+ }
+ return NULL;
+}
+
+int main(int argc, const char *argv[])
+{
+ if (argc < 3)
+ {
+ printf("please input datafile and script.");
+ return -1;
+ }
+ const char *filename = argv[1];
+ const char *script = argv[2];
+ tsg_lua_handle L = NULL;
+
+ size_t data_len = 0;
+ char *data = get_file_to_buffer(filename, &data_len);
+
+ /* 初始化1个虚拟机 */
+ printf("\n*********************tsg_lua_vm_create************************\n");
+ printf("[C]:call tsg_lua_vm_create...\n");
+ L = tsg_lua_vm_create();
+ if (L == NULL)
+ {
+ printf("[C]:call tsg_lua_vm_create failed.\n");
+ free(data);
+ return -1;
+ }
+ printf("[C]:call tsg_lua_vm_create success.\t lua:%p\n", L);
+
+ char out[255];
+ memset(out, 0, sizeof(out));
+ size_t out_len;
+ size_t out_type;
+ printf("\n=============================file==================================\n");
+ printf("\n*********************tsg_lua_exec_file************************\n");
+ printf("[C]:call tsg_lua_exec_file, exec %s ...\n", script);
+ int ret = tsg_lua_exec_file(L, script, data, data_len, out, &out_len, &out_type);
+ if (ret < 0)
+ {
+ printf("[C]:call tsg_lua_exec_file failed.\n");
+ free(data);
+ return -1;
+ }
+ printf("[C]:call tsg_lua_exec_file success.\n");
+ printf("[C]:out_len:%zu\n", out_len);
+ printf("[C]:out_type:%zu\n", out_type);
+ switch(out_type)
+ {
+ case STRING:
+ printf("[C]:out_data:%s\n", out);
+ break;
+ case INTEGER:
+ printf("[C]:out_data:%ld\n", *(long int *)out);
+ break;
+ case BOOLEAN:
+ printf("[C]:out_data:%d\n", out[0]);
+ break;
+ }
+
+ /* 关闭lua */
+ tsg_destory_lua(L);
+ printf("[C]:Every day is good day!\n");
+
+ free(data);
+ return 0;
+}