diff --git a/include/pocketpy/interpreter/modules.h b/include/pocketpy/interpreter/modules.h index bcd70eae..659da832 100644 --- a/include/pocketpy/interpreter/modules.h +++ b/include/pocketpy/interpreter/modules.h @@ -1,6 +1,7 @@ #pragma once void pk__add_module_pkpy(); +void pk__add_module_conio(); void pk__add_module_os(); void pk__add_module_sys(); void pk__add_module_math(); diff --git a/include/typings/conio.pyi b/include/typings/conio.pyi new file mode 100644 index 00000000..c9c7b873 --- /dev/null +++ b/include/typings/conio.pyi @@ -0,0 +1,2 @@ +def _kbhit() -> int: ... +def _getch() -> int: ... diff --git a/src/interpreter/vm.c b/src/interpreter/vm.c index 3614a9b8..da9abd15 100644 --- a/src/interpreter/vm.c +++ b/src/interpreter/vm.c @@ -205,6 +205,8 @@ void VM__ctor(VM* self) { // add modules pk__add_module_pkpy(); + pk__add_module_conio(); + pk__add_module_os(); pk__add_module_sys(); pk__add_module_math(); diff --git a/src/modules/pkpy.c b/src/modules/pkpy.c index f3aa0fdc..517204bb 100644 --- a/src/modules/pkpy.c +++ b/src/modules/pkpy.c @@ -1,5 +1,32 @@ #include "pocketpy/pocketpy.h" -void pk__add_module_pkpy() { - py_newmodule("pkpy"); +void pk__add_module_pkpy() { py_newmodule("pkpy"); } + +#ifdef _WIN32 + +#include + +static bool conio__kbhit(int argc, py_Ref argv) { + PY_CHECK_ARGC(0); + int ret = _kbhit(); + py_newint(py_retval(), ret); + return true; +} + +static bool conio__getch(int argc, py_Ref argv) { + PY_CHECK_ARGC(0); + int ret = _getch(); + py_newint(py_retval(), ret); + return true; +} + +#endif + +void pk__add_module_conio() { + py_Ref mod = py_newmodule("conio"); + +#ifdef _WIN32 + py_bindfunc(mod, "_kbhit", conio__kbhit); + py_bindfunc(mod, "_getch", conio__getch); +#endif } \ No newline at end of file