luat_lib_win32.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include "luat_base.h"
  2. #include "luat_mem.h"
  3. #include "luat_timer.h"
  4. #define LUAT_LOG_TAG "win32"
  5. #include "luat_log.h"
  6. extern int cmdline_argc;
  7. extern char** cmdline_argv;
  8. static int l_win32_args(lua_State *L) {
  9. int index = luaL_optinteger(L, 1, 2);
  10. lua_newtable(L);
  11. if (cmdline_argc > index) {
  12. for (size_t i = index; i < cmdline_argc; i++)
  13. {
  14. //printf("args[%d] %s\n", i, win32_argv[i]);
  15. lua_pushinteger(L, i + 1 - index);
  16. lua_pushstring(L, cmdline_argv[i]);
  17. lua_settable(L, -3);
  18. }
  19. }
  20. return 1;
  21. }
  22. static int timer_handler(lua_State *L, void* ptr) {
  23. luat_timer_t *timer = (luat_timer_t *)ptr;
  24. uint64_t* idp = (uint64_t*)timer->id;
  25. lua_pushboolean(L,1);
  26. luat_cbcwait(L, *idp, 1);
  27. return 0;
  28. }
  29. static int l_test_cwait_delay(lua_State *L) {
  30. lua_gettop(L);
  31. if (lua_isinteger(L, 1)) {
  32. lua_Integer ms = luaL_checkinteger(L, 1);
  33. if (ms)
  34. {
  35. uint64_t id = luat_pushcwait(L);
  36. luat_timer_t *timer = (luat_timer_t*)luat_heap_malloc(sizeof(luat_timer_t));
  37. uint64_t* idp = (uint64_t*)luat_heap_malloc(sizeof(uint64_t));
  38. memcpy(idp, &id, sizeof(uint64_t));
  39. timer->id = (size_t)idp;
  40. timer->timeout = ms;
  41. timer->repeat = 0;
  42. timer->func = &timer_handler;
  43. int re = luat_timer_start(timer);
  44. return 1;
  45. }
  46. }
  47. return 0;
  48. }
  49. static int l_test_cwait_error(lua_State *L) {
  50. lua_pushstring(L,"result1");
  51. lua_pushstring(L,"result2");
  52. lua_pushstring(L,"result3");
  53. luat_pushcwait_error(L,3);
  54. return 1;
  55. }
  56. #include "rotable.h"
  57. static const rotable_Reg reg_win32[] =
  58. {
  59. { "args", l_win32_args, 0},
  60. { "testCwaitDelay", l_test_cwait_delay, 0},
  61. { "testCwaitError", l_test_cwait_error, 0},
  62. { NULL, NULL, 0}
  63. };
  64. LUAMOD_API int luaopen_win32( lua_State *L ) {
  65. luat_newlib(L, reg_win32);
  66. return 1;
  67. }