Add LibTemple/Input functions
This commit is contained in:
parent
e6cff10e60
commit
cc4f8dfa51
5 changed files with 51 additions and 2 deletions
12
System/LibTemple/Input.HC
Normal file
12
System/LibTemple/Input.HC
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
Bool @input_key_down(I64 sc)
|
||||||
|
{
|
||||||
|
return Bt(kbd.down_bitmap, sc);
|
||||||
|
}
|
||||||
|
|
||||||
|
U0 input_key_down()
|
||||||
|
{
|
||||||
|
PUSH_SYSV_REGS
|
||||||
|
GET_SYSV_ARGS
|
||||||
|
@input_key_down(p0);
|
||||||
|
POP_SYSV_REGS
|
||||||
|
}
|
|
@ -5,6 +5,7 @@
|
||||||
#include "FFI/ELF64";
|
#include "FFI/ELF64";
|
||||||
|
|
||||||
// LibTemple support files
|
// LibTemple support files
|
||||||
|
#include "LibTemple/Input";
|
||||||
#include "LibTemple/OS";
|
#include "LibTemple/OS";
|
||||||
|
|
||||||
#include "MuJS";
|
#include "MuJS";
|
||||||
|
|
1
src/libtemple/input.h
Normal file
1
src/libtemple/input.h
Normal file
|
@ -0,0 +1 @@
|
||||||
|
uint64_t input_key_down(uint64_t sc);
|
|
@ -1,3 +1,5 @@
|
||||||
|
unsigned long input_key_down(unsigned long sc) { return 0; }
|
||||||
|
|
||||||
unsigned long os_call_ext_str(char const* func) { return 0; }
|
unsigned long os_call_ext_str(char const* func) { return 0; }
|
||||||
|
|
||||||
unsigned long os_call_ext_str_1(char const* func, unsigned long arg1) { return 0; }
|
unsigned long os_call_ext_str_1(char const* func, unsigned long arg1) { return 0; }
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
#include "../libtemple/input.h"
|
||||||
#include "../libtemple/os.h"
|
#include "../libtemple/os.h"
|
||||||
|
|
||||||
#define value_or_number(v, x) js_isundefined(J, x) ? v : js_tonumber(J, x)
|
#define value_or_number(v, x) js_isundefined(J, x) ? v : js_tonumber(J, x)
|
||||||
|
@ -168,6 +169,22 @@ uint64_t get_glbl_var_addr(char* name)
|
||||||
return addr ? *(uint64_t*)(addr + 0x78) : 0;
|
return addr ? *(uint64_t*)(addr + 0x78) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Input_get_char(js_State *J)
|
||||||
|
{
|
||||||
|
js_pushnumber(J, os_call_ext_str_3("GetChar", 0, 0, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Input_get_string(js_State *J)
|
||||||
|
{
|
||||||
|
char* res = (char*)os_call_ext_str_3("GetStr", js_isundefined(J, 1) ? 0 : (uint64_t)js_tostring(J, 1), 0, 0);
|
||||||
|
if (!res) {
|
||||||
|
js_pushundefined(J);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
js_pushstring(J, res);
|
||||||
|
free(res);
|
||||||
|
}
|
||||||
|
|
||||||
void Input_mouse_x(js_State *J)
|
void Input_mouse_x(js_State *J)
|
||||||
{
|
{
|
||||||
uint64_t* res = (uint64_t*)get_glbl_var_addr("ms");
|
uint64_t* res = (uint64_t*)get_glbl_var_addr("ms");
|
||||||
|
@ -192,16 +209,31 @@ void Input_mouse_rb(js_State *J)
|
||||||
js_pushboolean(J, res[0xa1]); // offset(CMsStateGlbls.rb)
|
js_pushboolean(J, res[0xa1]); // offset(CMsStateGlbls.rb)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Input_key_down(js_State *J)
|
||||||
|
{
|
||||||
|
js_pushboolean(J, input_key_down(js_tonumber(J, 1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Input_press_a_key(js_State *J)
|
||||||
|
{
|
||||||
|
js_pushnumber(J, os_call_ext_str("PressAKey"));
|
||||||
|
}
|
||||||
|
|
||||||
void jsLT_initinput(js_State *J)
|
void jsLT_initinput(js_State *J)
|
||||||
{
|
{
|
||||||
js_pushobject(J, jsV_newobject(J, -1, J->Object_prototype));
|
js_pushobject(J, jsV_newobject(J, -1, J->Object_prototype));
|
||||||
{
|
{
|
||||||
|
jsB_propf(J, "Input.get_char", Input_get_char, 0);
|
||||||
|
jsB_propf(J, "Input.get_string", Input_get_string, 1);
|
||||||
jsB_propf(J, "Input.mouse_x", Input_mouse_x, 0);
|
jsB_propf(J, "Input.mouse_x", Input_mouse_x, 0);
|
||||||
jsB_propf(J, "Input.mouse_y", Input_mouse_y, 0);
|
jsB_propf(J, "Input.mouse_y", Input_mouse_y, 0);
|
||||||
jsB_propf(J, "Input.mouse_lb", Input_mouse_lb, 0);
|
jsB_propf(J, "Input.mouse_lb", Input_mouse_lb, 0);
|
||||||
jsB_propf(J, "Input.mouse_rb", Input_mouse_rb, 0);
|
jsB_propf(J, "Input.mouse_rb", Input_mouse_rb, 0);
|
||||||
|
jsB_propf(J, "Input.press_a_key", Input_press_a_key, 0);
|
||||||
|
jsB_propf(J, "Input.key_down", Input_key_down, 1);
|
||||||
}
|
}
|
||||||
js_defglobal(J, "Input", JS_DONTENUM);
|
js_defglobal(J, "Input", JS_DONTENUM);
|
||||||
|
js_dostring(J, "Input.key_up = function(sc) { return !Input.key_down(sc) }");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** OS **/
|
/** OS **/
|
||||||
|
@ -261,8 +293,9 @@ void OS_read_file_as_string(js_State *J)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const char* filename = js_tostring(J, 1);
|
const char* filename = js_tostring(J, 1);
|
||||||
long file_as_string = os_call_ext_str_3("FileRead", (uint64_t)filename, 0, 0);
|
char* file_as_string = (char*)os_call_ext_str_3("FileRead", (uint64_t)filename, 0, 0);
|
||||||
js_pushstring(J, file_as_string ? (char*)file_as_string : "");
|
js_pushstring(J, file_as_string ? file_as_string : "");
|
||||||
|
free(file_as_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
// U0 Reboot()
|
// U0 Reboot()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue