Răsfoiți Sursa

add `conio` module

blueloveTH 1 an în urmă
părinte
comite
f65eec9add

+ 1 - 0
include/pocketpy/interpreter/modules.h

@@ -1,6 +1,7 @@
 #pragma once
 #pragma once
 
 
 void pk__add_module_pkpy();
 void pk__add_module_pkpy();
+void pk__add_module_conio();
 void pk__add_module_os();
 void pk__add_module_os();
 void pk__add_module_sys();
 void pk__add_module_sys();
 void pk__add_module_math();
 void pk__add_module_math();

+ 2 - 0
include/typings/conio.pyi

@@ -0,0 +1,2 @@
+def _kbhit() -> int: ...
+def _getch() -> int: ...

+ 2 - 0
src/interpreter/vm.c

@@ -205,6 +205,8 @@ void VM__ctor(VM* self) {
 
 
     // add modules
     // add modules
     pk__add_module_pkpy();
     pk__add_module_pkpy();
+    pk__add_module_conio();
+    
     pk__add_module_os();
     pk__add_module_os();
     pk__add_module_sys();
     pk__add_module_sys();
     pk__add_module_math();
     pk__add_module_math();

+ 29 - 2
src/modules/pkpy.c

@@ -1,5 +1,32 @@
 #include "pocketpy/pocketpy.h"
 #include "pocketpy/pocketpy.h"
 
 
-void pk__add_module_pkpy() {
-    py_newmodule("pkpy");
+void pk__add_module_pkpy() { py_newmodule("pkpy"); }
+
+#ifdef _WIN32
+
+#include <conio.h>
+
+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
 }
 }