Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
first draft of lua bindings
[simgrid.git] / src / bindings / lua / tasktest.c
1 #include "Msglua.h"
2
3
4
5 // *** Testing Stuff !!
6 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test,
7     "Messages specific for this msg example");
8
9 int master_lua(int argc, char *argv[]); 
10 int slave_lua(int argc, char *argv[]); 
11 int load_lua(char * file);
12 //int forwarder(int argc, char *argv[]); LUA
13 MSG_error_t test_all(const char *platform_file, const char *application_file);
14
15 typedef enum {
16
17   PORT_22 = 0,
18       MAX_CHANNEL
19
20 } channel_t;
21
22 lua_State *L;
23
24 //***************************** LOAD LUA *************************************************
25 int load_lua(char * luaFile) {
26   L = lua_open();
27
28   luaL_openlibs(L);
29
30   // Lua Stuff
31   Task_register(L);
32   Host_register(L);
33   Process_register(L);
34
35   if (luaL_loadfile(L, luaFile) || lua_pcall(L, 0, 0, 0)) {
36     printf("error while parsing %s: %s", luaFile, lua_tostring(L, -1));
37     return -1;
38   }
39
40   return 0;
41
42 }
43
44 int lua_wrapper(int argc, char *argv[]) {
45   // Table that Lua will read to read Arguments
46   lua_newtable(L);
47
48   // Seek the right lua function
49   lua_getglobal(L,argv[0]);
50   if(!lua_isfunction(L,-1)) {
51     lua_pop(L,1);
52     ERROR1("The lua function %s does not seem to exist",argv[0]);
53     return -1;
54   }
55
56   // push arguments onto the stack
57   int i;
58   for(i=1;i<argc;i++)
59     lua_pushstring(L,argv[i]);
60
61   // Call the function
62   lua_call(L,argc-1,0); // takes argc-1 argument, returns nothing
63
64   // User process terminated
65   lua_pop(L, 1);
66   return 0;
67 }
68
69
70
71 //*****************************************************************************
72
73 int main(int argc,char * argv[])
74 {
75
76
77   MSG_error_t res = MSG_OK;
78
79   MSG_global_init(&argc, argv);
80
81   if(argc < 4)
82   {
83     printf("Usage: %s platform_file deployment_file lua_script\n", argv[0]);
84     printf("example: %s msg_platform.xml msg_deployment.xml script_lua.lua\n", argv[0]);
85     exit(1);
86
87   }
88
89   load_lua(argv[3]);
90
91   /* MSG_config("surf_workstation_model","KCCFLN05"); */
92   MSG_create_environment(argv[1]);
93   MSG_function_register_default(&lua_wrapper);
94   MSG_launch_application(argv[2]);
95   MSG_set_channel_number(10);
96   res = MSG_main();
97
98   INFO1("Simulation time %g", MSG_get_clock());
99
100   MSG_clean();
101   lua_close(L);
102
103   if (res == MSG_OK)
104     return 0;
105   else
106     return 1;
107 }     
108
109
110
111
112
113