diff --git a/Makefile b/Makefile index 5ccab8c3e..3b65d7ffc 100644 --- a/Makefile +++ b/Makefile @@ -69,7 +69,7 @@ endif include ion/Makefile include kandinsky/Makefile include poincare/Makefile -#include python/Makefile +include python/Makefile include escher/Makefile # Executable Makefiles include apps/Makefile diff --git a/apps/code/editor_controller.cpp b/apps/code/editor_controller.cpp index 4c14f07c9..332c981b1 100644 --- a/apps/code/editor_controller.cpp +++ b/apps/code/editor_controller.cpp @@ -1,10 +1,52 @@ #include "editor_controller.h" +extern "C" { +#include +#include "py/compile.h" +#include "py/runtime.h" +#include "py/gc.h" +#include "py/stackctrl.h" +} + +mp_obj_t execute_from_str(const char *str) { + nlr_buf_t nlr; + if (nlr_push(&nlr) == 0) { + mp_lexer_t *lex = mp_lexer_new_from_str_len(0/*MP_QSTR_*/, str, strlen(str), false); + mp_parse_tree_t pt = mp_parse(lex, MP_PARSE_FILE_INPUT); + mp_obj_t module_fun = mp_compile(&pt, lex->source_name, MP_EMIT_OPT_NONE, false); + mp_call_function_0(module_fun); + nlr_pop(); + return 0; + } else { + // uncaught exception + return (mp_obj_t)nlr.ret_val; + } +} + +extern "C" +void mp_hal_stdout_tx_strn_cooked(const char * str, size_t len) { + KDContext * ctx = KDIonContext::sharedContext(); + ctx->drawString(str, KDPoint(0, 0)); +} + + EditorController::EditorController(Responder * parentResponder) : ViewController(parentResponder), - m_view(this, buffer, 256) + m_view(this, m_buffer, 256) { - memcpy(buffer, "Hello\nWorld\nOhOhOh\nThis\nLooks\nlike\nso\nmuch\nfun\nI\nwonder\nhow\nmany very very very very very very very long\nlines\nI\ncan\ndisplay", 256); + const char * program = + + "import kandinsky\n" +"red = kandinsky.color(255,0,0)\n" +"blue = kandinsky.color(0,0,255)\n" +"for i in range(100):\n" +" for j in range(100):\n" +" if ((i+j)%2 == 0):\n" +" kandinsky.set_pixel(i, j, red)\n" +" else:\n" +" kandinsky.set_pixel(i, j, blue)\n"; + + memcpy(m_buffer, program, 1024); } void EditorController::didBecomeFirstResponder() { @@ -16,10 +58,32 @@ View * EditorController::view() { return &m_view; } -/* +void EditorController::runPython() { + KDContext * c = KDIonContext::sharedContext(); + c->setOrigin(KDPoint(0,0)); + c->setClippingRect(KDRect(0, 0, 300, 200)); -const char * PicViewController::title() { - return "PicView"; + // Initialized stack limit + mp_stack_set_limit(40000); + + char * pythonHeap = (char *)malloc(16384); + + gc_init(pythonHeap, pythonHeap + 16384); + + // Initialize interpreter + mp_init(); + + if (execute_from_str(m_buffer)) { + mp_hal_stdout_tx_strn_cooked("Error", 0); + } + + free(pythonHeap); } -*/ +bool EditorController::handleEvent(Ion::Events::Event event) { + if (event == Ion::Events::OK) { + runPython(); + return true; + } + return false; +} diff --git a/apps/code/editor_controller.h b/apps/code/editor_controller.h index 346220634..05dfa498c 100644 --- a/apps/code/editor_controller.h +++ b/apps/code/editor_controller.h @@ -7,9 +7,11 @@ class EditorController : public ViewController { public: EditorController(Responder * parentResponder); View * view() override; + bool handleEvent(Ion::Events::Event event) override; void didBecomeFirstResponder() override; private: - char buffer[256]; + void runPython(); + char m_buffer[1024]; TextArea m_view; }; diff --git a/apps/main.cpp b/apps/main.cpp index ff7f450dd..61e58bcfb 100644 --- a/apps/main.cpp +++ b/apps/main.cpp @@ -1,72 +1,7 @@ #include "apps_container.h" -#define PYTHON_TEST 0 -extern "C" { -#include -#if PYTHON_TEST -#include "py/compile.h" -#include "py/runtime.h" -#include "py/gc.h" -#include "py/stackctrl.h" -#endif -} AppsContainer container; -#if PYTHON_TEST -mp_obj_t execute_from_str(const char *str) { - nlr_buf_t nlr; - if (nlr_push(&nlr) == 0) { - mp_lexer_t *lex = mp_lexer_new_from_str_len(0/*MP_QSTR_*/, str, strlen(str), false); - mp_parse_tree_t pt = mp_parse(lex, MP_PARSE_FILE_INPUT); - mp_obj_t module_fun = mp_compile(&pt, lex->source_name, MP_EMIT_OPT_NONE, false); - mp_call_function_0(module_fun); - nlr_pop(); - return 0; - } else { - // uncaught exception - return (mp_obj_t)nlr.ret_val; - } -} - -extern "C" -void mp_hal_stdout_tx_strn_cooked(const char * str, size_t len) { - KDContext * ctx = KDIonContext::sharedContext(); - ctx->drawString(str, KDPoint(0, 0)); -} -#endif - void ion_app() { -#if PYTHON_TEST - - // Initialized stack limit - mp_stack_set_limit(40000); - - char * pythonHeap = (char *)malloc(16384); - - gc_init(pythonHeap, pythonHeap + 16384); - - // Initialize interpreter - mp_init(); - - const char str[] = -"import kandinsky\n" -"red = kandinsky.color(255,0,0)\n" -"blue = kandinsky.color(0,0,255)\n" -"for i in range(100):\n" -" for j in range(100):\n" -" if ((i+j)%2 == 0):\n" -" kandinsky.set_pixel(i, j, red)\n" -" else:\n" -" kandinsky.set_pixel(i, j, blue)\n" -; - - if (execute_from_str(str)) { - mp_hal_stdout_tx_strn_cooked("Error", 0); - } - - while (1) { - } -#endif - container.run(); } diff --git a/python/port/modkandinsky_impl.cpp b/python/port/modkandinsky_impl.cpp index 9e20a44b3..74ff8a83a 100644 --- a/python/port/modkandinsky_impl.cpp +++ b/python/port/modkandinsky_impl.cpp @@ -8,8 +8,8 @@ mp_obj_t kandinsky_color(mp_obj_t red, mp_obj_t green, mp_obj_t blue) { MP_OBJ_NEW_SMALL_INT( KDColor::RGB888( mp_obj_get_int(red), - mp_obj_get_int(blue), - mp_obj_get_int(red) + mp_obj_get_int(green), + mp_obj_get_int(blue) ) ); }