├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ ├── ci-workflow.yml │ └── metrics-workflow.yml ├── .gitignore ├── LICENSE ├── Makefile ├── README.md ├── apps ├── Makefile ├── alternate_empty_nested_menu_controller.cpp ├── alternate_empty_nested_menu_controller.h ├── apps_container.cpp ├── apps_container.h ├── apps_container_launch_default.cpp ├── apps_container_launch_on_boarding.cpp ├── apps_container_prompt_beta.cpp ├── apps_container_prompt_none.cpp ├── apps_container_prompt_update.cpp ├── apps_container_storage.cpp ├── apps_container_storage.h ├── apps_window.cpp ├── apps_window.h ├── backlight_dimming_timer.cpp ├── backlight_dimming_timer.h ├── battery_timer.cpp ├── battery_timer.h ├── battery_view.cpp ├── battery_view.h ├── calculation │ ├── Makefile │ ├── additional_outputs │ │ ├── complex_graph_cell.cpp │ │ ├── complex_graph_cell.h │ │ ├── complex_list_controller.cpp │ │ ├── complex_list_controller.h │ │ ├── complex_model.cpp │ │ ├── complex_model.h │ │ ├── expression_with_equal_sign_view.cpp │ │ ├── expression_with_equal_sign_view.h │ │ ├── expressions_list_controller.cpp │ │ ├── expressions_list_controller.h │ │ ├── illustrated_list_controller.cpp │ │ ├── illustrated_list_controller.h │ │ ├── illustration_cell.cpp │ │ ├── illustration_cell.h │ │ ├── integer_list_controller.cpp │ │ ├── integer_list_controller.h │ │ ├── list_controller.cpp │ │ ├── list_controller.h │ │ ├── matrix_list_controller.cpp │ │ ├── matrix_list_controller.h │ │ ├── rational_list_controller.cpp │ │ ├── rational_list_controller.h │ │ ├── scrollable_three_expressions_cell.cpp │ │ ├── scrollable_three_expressions_cell.h │ │ ├── trigonometry_graph_cell.cpp │ │ ├── trigonometry_graph_cell.h │ │ ├── trigonometry_list_controller.cpp │ │ ├── trigonometry_list_controller.h │ │ ├── trigonometry_model.cpp │ │ ├── trigonometry_model.h │ │ ├── unit_list_controller.cpp │ │ └── unit_list_controller.h │ ├── app.cpp │ ├── app.h │ ├── base.de.i18n │ ├── base.en.i18n │ ├── base.es.i18n │ ├── base.fr.i18n │ ├── base.it.i18n │ ├── base.nl.i18n │ ├── base.pt.i18n │ ├── calculation.cpp │ ├── calculation.h │ ├── calculation_icon.png │ ├── calculation_store.cpp │ ├── calculation_store.h │ ├── edit_expression_controller.cpp │ ├── edit_expression_controller.h │ ├── expression_field.cpp │ ├── expression_field.h │ ├── history_controller.cpp │ ├── history_controller.h │ ├── history_view_cell.cpp │ ├── history_view_cell.h │ ├── selectable_table_view.cpp │ ├── selectable_table_view.h │ └── test │ │ └── calculation_store.cpp ├── code │ ├── Makefile │ ├── app.cpp │ ├── app.h │ ├── base.de.i18n │ ├── base.en.i18n │ ├── base.es.i18n │ ├── base.fr.i18n │ ├── base.it.i18n │ ├── base.nl.i18n │ ├── base.pt.i18n │ ├── base.universal.i18n │ ├── catalog.de.i18n │ ├── catalog.en.i18n │ ├── catalog.es.i18n │ ├── catalog.fr.i18n │ ├── catalog.it.i18n │ ├── catalog.nl.i18n │ ├── catalog.pt.i18n │ ├── catalog.universal.i18n │ ├── code_icon.png │ ├── console_controller.cpp │ ├── console_controller.h │ ├── console_edit_cell.cpp │ ├── console_edit_cell.h │ ├── console_line.h │ ├── console_line_cell.cpp │ ├── console_line_cell.h │ ├── console_store.cpp │ ├── console_store.h │ ├── editor_controller.cpp │ ├── editor_controller.h │ ├── editor_view.cpp │ ├── editor_view.h │ ├── helpers.cpp │ ├── helpers.h │ ├── menu_controller.cpp │ ├── menu_controller.h │ ├── python_text_area.cpp │ ├── python_text_area.h │ ├── python_toolbox.cpp │ ├── python_toolbox.h │ ├── sandbox_controller.cpp │ ├── sandbox_controller.h │ ├── script.cpp │ ├── script.h │ ├── script_name_cell.cpp │ ├── script_name_cell.h │ ├── script_node.h │ ├── script_node_cell.cpp │ ├── script_node_cell.h │ ├── script_parameter_controller.cpp │ ├── script_parameter_controller.h │ ├── script_store.cpp │ ├── script_store.h │ ├── script_template.cpp │ ├── script_template.h │ ├── toolbox.de.i18n │ ├── toolbox.en.i18n │ ├── toolbox.es.i18n │ ├── toolbox.fr.i18n │ ├── toolbox.it.i18n │ ├── toolbox.nl.i18n │ ├── toolbox.pt.i18n │ ├── toolbox.universal.i18n │ ├── variable_box_controller.cpp │ ├── variable_box_controller.h │ ├── variable_box_empty_controller.cpp │ └── variable_box_empty_controller.h ├── constant.h ├── country_preferences.csv ├── country_preferences.h ├── empty_battery_window.cpp ├── empty_battery_window.h ├── exam_icon.png ├── exam_mode_configuration.h ├── exam_mode_configuration_non_official.cpp ├── exam_mode_configuration_official.cpp ├── exam_pop_up_controller.cpp ├── exam_pop_up_controller.h ├── exam_pop_up_controller_delegate.h ├── global_preferences.cpp ├── global_preferences.h ├── graph │ ├── Makefile │ ├── app.cpp │ ├── app.h │ ├── base.de.i18n │ ├── base.en.i18n │ ├── base.es.i18n │ ├── base.fr.i18n │ ├── base.it.i18n │ ├── base.nl.i18n │ ├── base.pt.i18n │ ├── continuous_function_store.cpp │ ├── continuous_function_store.h │ ├── graph │ │ ├── banner_view.cpp │ │ ├── banner_view.h │ │ ├── calculation_graph_controller.cpp │ │ ├── calculation_graph_controller.h │ │ ├── calculation_parameter_controller.cpp │ │ ├── calculation_parameter_controller.h │ │ ├── curve_parameter_controller.cpp │ │ ├── curve_parameter_controller.h │ │ ├── extremum_graph_controller.cpp │ │ ├── extremum_graph_controller.h │ │ ├── graph_controller.cpp │ │ ├── graph_controller.h │ │ ├── graph_controller_helper.cpp │ │ ├── graph_controller_helper.h │ │ ├── graph_view.cpp │ │ ├── graph_view.h │ │ ├── integral_graph_controller.cpp │ │ ├── integral_graph_controller.h │ │ ├── intersection_graph_controller.cpp │ │ ├── intersection_graph_controller.h │ │ ├── preimage_graph_controller.cpp │ │ ├── preimage_graph_controller.h │ │ ├── preimage_parameter_controller.cpp │ │ ├── preimage_parameter_controller.h │ │ ├── root_graph_controller.cpp │ │ ├── root_graph_controller.h │ │ ├── tangent_graph_controller.cpp │ │ └── tangent_graph_controller.h │ ├── graph_icon.png │ ├── list │ │ ├── domain_parameter_controller.cpp │ │ ├── domain_parameter_controller.h │ │ ├── list_controller.cpp │ │ ├── list_controller.h │ │ ├── list_parameter_controller.cpp │ │ ├── list_parameter_controller.h │ │ ├── text_field_function_title_cell.cpp │ │ ├── text_field_function_title_cell.h │ │ ├── text_field_with_max_length_and_extension.h │ │ ├── type_helper.cpp │ │ ├── type_helper.h │ │ ├── type_parameter_controller.cpp │ │ └── type_parameter_controller.h │ ├── test │ │ ├── caching.cpp │ │ ├── helper.cpp │ │ ├── helper.h │ │ └── ranges.cpp │ └── values │ │ ├── abscissa_title_cell.cpp │ │ ├── abscissa_title_cell.h │ │ ├── derivative_parameter_controller.cpp │ │ ├── derivative_parameter_controller.h │ │ ├── function_parameter_controller.cpp │ │ ├── function_parameter_controller.h │ │ ├── interval_parameter_selector_controller.cpp │ │ ├── interval_parameter_selector_controller.h │ │ ├── values_controller.cpp │ │ └── values_controller.h ├── hardware_test │ ├── Makefile │ ├── app.cpp │ ├── app.h │ ├── arrow_view.cpp │ ├── arrow_view.h │ ├── battery_test_controller.cpp │ ├── battery_test_controller.h │ ├── code_128b_view.cpp │ ├── code_128b_view.h │ ├── colors_lcd_test_controller.cpp │ ├── colors_lcd_test_controller.h │ ├── dead_pixels_test_controller.cpp │ ├── dead_pixels_test_controller.h │ ├── keyboard_model.cpp │ ├── keyboard_model.h │ ├── keyboard_test_controller.cpp │ ├── keyboard_test_controller.h │ ├── keyboard_view.cpp │ ├── keyboard_view.h │ ├── lcd_data_test_controller.cpp │ ├── lcd_data_test_controller.h │ ├── lcd_timing_test_controller.cpp │ ├── lcd_timing_test_controller.h │ ├── led_test_controller.cpp │ ├── led_test_controller.h │ ├── pop_up_controller.cpp │ ├── pop_up_controller.h │ ├── serial_number_controller.cpp │ ├── serial_number_controller.h │ ├── vblank_test_controller.cpp │ └── vblank_test_controller.h ├── helpers.mk ├── home │ ├── Makefile │ ├── app.cpp │ ├── app.h │ ├── app_cell.cpp │ ├── app_cell.h │ ├── apps_layout.csv │ ├── apps_layout.py │ ├── base.de.i18n │ ├── base.en.i18n │ ├── base.es.i18n │ ├── base.fr.i18n │ ├── base.it.i18n │ ├── base.nl.i18n │ ├── base.pt.i18n │ ├── controller.cpp │ └── controller.h ├── hwtest │ └── lowlevel │ │ └── Makefile ├── i18n.py ├── language_de.universal.i18n ├── language_en.universal.i18n ├── language_es.universal.i18n ├── language_fr.universal.i18n ├── language_it.universal.i18n ├── language_nl.universal.i18n ├── language_preferences.csv ├── language_pt.universal.i18n ├── lock_view.cpp ├── lock_view.h ├── main.cpp ├── math_toolbox.cpp ├── math_toolbox.h ├── math_variable_box_controller.cpp ├── math_variable_box_controller.h ├── math_variable_box_empty_controller.cpp ├── math_variable_box_empty_controller.h ├── on_boarding │ ├── Makefile │ ├── app.cpp │ ├── app.h │ ├── base.de.i18n │ ├── base.en.i18n │ ├── base.es.i18n │ ├── base.fr.i18n │ ├── base.it.i18n │ ├── base.nl.i18n │ ├── base.pt.i18n │ ├── localization_controller.cpp │ ├── localization_controller.h │ ├── logo_controller.cpp │ ├── logo_controller.h │ ├── logo_icon.png │ ├── logo_view.cpp │ ├── logo_view.h │ ├── power_on_self_test.cpp │ ├── power_on_self_test.h │ ├── prompt_controller.cpp │ └── prompt_controller.h ├── probability │ ├── Makefile │ ├── app.cpp │ ├── app.h │ ├── base.de.i18n │ ├── base.en.i18n │ ├── base.es.i18n │ ├── base.fr.i18n │ ├── base.it.i18n │ ├── base.nl.i18n │ ├── base.pt.i18n │ ├── base.universal.i18n │ ├── calculation │ │ ├── calculation.cpp │ │ ├── calculation.h │ │ ├── discrete_calculation.cpp │ │ ├── discrete_calculation.h │ │ ├── finite_integral_calculation.cpp │ │ ├── finite_integral_calculation.h │ │ ├── left_integral_calculation.cpp │ │ ├── left_integral_calculation.h │ │ ├── right_integral_calculation.cpp │ │ └── right_integral_calculation.h │ ├── calculation_cell.cpp │ ├── calculation_cell.h │ ├── calculation_controller.cpp │ ├── calculation_controller.h │ ├── calculation_type_controller.cpp │ ├── calculation_type_controller.h │ ├── cell.cpp │ ├── cell.h │ ├── distribution │ │ ├── binomial_distribution.cpp │ │ ├── binomial_distribution.h │ │ ├── chi_squared_distribution.cpp │ │ ├── chi_squared_distribution.h │ │ ├── distribution.cpp │ │ ├── distribution.h │ │ ├── exponential_distribution.cpp │ │ ├── exponential_distribution.h │ │ ├── fisher_distribution.cpp │ │ ├── fisher_distribution.h │ │ ├── geometric_distribution.cpp │ │ ├── geometric_distribution.h │ │ ├── helper.cpp │ │ ├── helper.h │ │ ├── hypergeometric_function.cpp │ │ ├── hypergeometric_function.h │ │ ├── normal_distribution.cpp │ │ ├── normal_distribution.h │ │ ├── one_parameter_distribution.h │ │ ├── poisson_distribution.cpp │ │ ├── poisson_distribution.h │ │ ├── regularized_gamma.cpp │ │ ├── regularized_gamma.h │ │ ├── student_distribution.cpp │ │ ├── student_distribution.h │ │ ├── two_parameter_distribution.cpp │ │ ├── two_parameter_distribution.h │ │ ├── uniform_distribution.cpp │ │ └── uniform_distribution.h │ ├── distribution_controller.cpp │ ├── distribution_controller.h │ ├── distribution_curve_view.cpp │ ├── distribution_curve_view.h │ ├── image_cell.cpp │ ├── image_cell.h │ ├── images │ │ ├── binomial_icon.png │ │ ├── calcul1_icon.png │ │ ├── calcul2_icon.png │ │ ├── calcul3_icon.png │ │ ├── calcul4_icon.png │ │ ├── chi_squared_icon.png │ │ ├── exponential_icon.png │ │ ├── fisher_icon.png │ │ ├── focused_binomial_icon.png │ │ ├── focused_calcul1_icon.png │ │ ├── focused_calcul2_icon.png │ │ ├── focused_calcul3_icon.png │ │ ├── focused_calcul4_icon.png │ │ ├── focused_chi_squared_icon.png │ │ ├── focused_exponential_icon.png │ │ ├── focused_fisher_icon.png │ │ ├── focused_geometric_icon.png │ │ ├── focused_normal_icon.png │ │ ├── focused_poisson_icon.png │ │ ├── focused_student_icon.png │ │ ├── focused_uniform_icon.png │ │ ├── geometric_icon.png │ │ ├── normal_icon.png │ │ ├── poisson_icon.png │ │ ├── student_icon.png │ │ └── uniform_icon.png │ ├── parameters_controller.cpp │ ├── parameters_controller.h │ ├── probability_icon.png │ ├── responder_image_cell.cpp │ ├── responder_image_cell.h │ └── test │ │ ├── distributions.cpp │ │ ├── hypergeometric_function.cpp │ │ └── regularized_gamma.cpp ├── regression │ ├── Makefile │ ├── app.cpp │ ├── app.h │ ├── banner_view.cpp │ ├── banner_view.h │ ├── base.de.i18n │ ├── base.en.i18n │ ├── base.es.i18n │ ├── base.fr.i18n │ ├── base.it.i18n │ ├── base.nl.i18n │ ├── base.pt.i18n │ ├── base.universal.i18n │ ├── calculation_controller.cpp │ ├── calculation_controller.h │ ├── column_title_cell.cpp │ ├── column_title_cell.h │ ├── even_odd_double_buffer_text_cell_with_separator.cpp │ ├── even_odd_double_buffer_text_cell_with_separator.h │ ├── go_to_parameter_controller.cpp │ ├── go_to_parameter_controller.h │ ├── graph_controller.cpp │ ├── graph_controller.h │ ├── graph_options_controller.cpp │ ├── graph_options_controller.h │ ├── graph_view.cpp │ ├── graph_view.h │ ├── linear_model_helper.cpp │ ├── linear_model_helper.h │ ├── model │ │ ├── cubic_model.cpp │ │ ├── cubic_model.h │ │ ├── exponential_model.cpp │ │ ├── exponential_model.h │ │ ├── linear_model.cpp │ │ ├── linear_model.h │ │ ├── logarithmic_model.cpp │ │ ├── logarithmic_model.h │ │ ├── logistic_model.cpp │ │ ├── logistic_model.h │ │ ├── model.cpp │ │ ├── model.h │ │ ├── power_model.cpp │ │ ├── power_model.h │ │ ├── proportional_model.cpp │ │ ├── proportional_model.h │ │ ├── quadratic_model.cpp │ │ ├── quadratic_model.h │ │ ├── quartic_model.cpp │ │ ├── quartic_model.h │ │ ├── trigonometric_model.cpp │ │ └── trigonometric_model.h │ ├── regression_context.cpp │ ├── regression_context.h │ ├── regression_controller.cpp │ ├── regression_controller.h │ ├── regression_icon.png │ ├── store.cpp │ ├── store.h │ ├── store_controller.cpp │ ├── store_controller.h │ ├── store_parameter_controller.cpp │ ├── store_parameter_controller.h │ └── test │ │ ├── graph.cpp │ │ └── model.cpp ├── sequence │ ├── Makefile │ ├── app.cpp │ ├── app.h │ ├── base.de.i18n │ ├── base.en.i18n │ ├── base.es.i18n │ ├── base.fr.i18n │ ├── base.it.i18n │ ├── base.nl.i18n │ ├── base.pt.i18n │ ├── graph │ │ ├── curve_parameter_controller.cpp │ │ ├── curve_parameter_controller.h │ │ ├── curve_view_range.cpp │ │ ├── curve_view_range.h │ │ ├── go_to_parameter_controller.cpp │ │ ├── go_to_parameter_controller.h │ │ ├── graph_controller.cpp │ │ ├── graph_controller.h │ │ ├── graph_view.cpp │ │ ├── graph_view.h │ │ ├── term_sum_controller.cpp │ │ └── term_sum_controller.h │ ├── list │ │ ├── list_controller.cpp │ │ ├── list_controller.h │ │ ├── list_parameter_controller.cpp │ │ ├── list_parameter_controller.h │ │ ├── sequence_toolbox.cpp │ │ ├── sequence_toolbox.h │ │ ├── type_parameter_controller.cpp │ │ └── type_parameter_controller.h │ ├── sequence_icon.png │ ├── test │ │ └── sequence.cpp │ └── values │ │ ├── interval_parameter_controller.cpp │ │ ├── interval_parameter_controller.h │ │ ├── values_controller.cpp │ │ └── values_controller.h ├── settings │ ├── Makefile │ ├── app.cpp │ ├── app.h │ ├── base.de.i18n │ ├── base.en.i18n │ ├── base.es.i18n │ ├── base.fr.i18n │ ├── base.it.i18n │ ├── base.nl.i18n │ ├── base.pt.i18n │ ├── cell_with_separator.cpp │ ├── cell_with_separator.h │ ├── main_controller.cpp │ ├── main_controller.h │ ├── main_controller_prompt_beta.cpp │ ├── main_controller_prompt_none.cpp │ ├── main_controller_prompt_update.cpp │ ├── message_table_cell_with_editable_text_with_separator.h │ ├── message_table_cell_with_gauge_with_separator.h │ ├── settings_icon.png │ └── sub_menu │ │ ├── about_controller.cpp │ │ ├── about_controller.h │ │ ├── about_controller_non_official.cpp │ │ ├── about_controller_official.cpp │ │ ├── display_mode_controller.cpp │ │ ├── display_mode_controller.h │ │ ├── exam_mode_controller.cpp │ │ ├── exam_mode_controller.h │ │ ├── exam_mode_controller_non_official.cpp │ │ ├── exam_mode_controller_official.cpp │ │ ├── generic_sub_controller.cpp │ │ ├── generic_sub_controller.h │ │ ├── localization_controller.cpp │ │ ├── localization_controller.h │ │ ├── preferences_controller.cpp │ │ ├── preferences_controller.h │ │ ├── selectable_view_with_messages.cpp │ │ ├── selectable_view_with_messages.h │ │ ├── storage_controller.cpp │ │ └── storage_controller.h ├── shared.de.i18n ├── shared.en.i18n ├── shared.es.i18n ├── shared.fr.i18n ├── shared.it.i18n ├── shared.nl.i18n ├── shared.pt.i18n ├── shared.universal.i18n ├── shared │ ├── Makefile │ ├── banner_view.cpp │ ├── banner_view.h │ ├── buffer_function_title_cell.cpp │ ├── buffer_function_title_cell.h │ ├── buffer_text_view_with_text_field.cpp │ ├── buffer_text_view_with_text_field.h │ ├── button_with_separator.cpp │ ├── button_with_separator.h │ ├── continuous_function.cpp │ ├── continuous_function.h │ ├── continuous_function_cache.cpp │ ├── continuous_function_cache.h │ ├── cursor_view.cpp │ ├── cursor_view.h │ ├── curve_view.cpp │ ├── curve_view.h │ ├── curve_view_cursor.cpp │ ├── curve_view_cursor.h │ ├── curve_view_range.cpp │ ├── curve_view_range.h │ ├── discard_pop_up_controller.cpp │ ├── discard_pop_up_controller.h │ ├── dots.cpp │ ├── dots.h │ ├── double_pair_store.cpp │ ├── double_pair_store.h │ ├── editable_cell_table_view_controller.cpp │ ├── editable_cell_table_view_controller.h │ ├── expiring_pointer.h │ ├── expression_field_delegate_app.cpp │ ├── expression_field_delegate_app.h │ ├── expression_model.cpp │ ├── expression_model.h │ ├── expression_model_handle.cpp │ ├── expression_model_handle.h │ ├── expression_model_list_controller.cpp │ ├── expression_model_list_controller.h │ ├── expression_model_store.cpp │ ├── expression_model_store.h │ ├── float_parameter_controller.cpp │ ├── float_parameter_controller.h │ ├── function.cpp │ ├── function.h │ ├── function_app.cpp │ ├── function_app.h │ ├── function_banner_delegate.cpp │ ├── function_banner_delegate.h │ ├── function_curve_parameter_controller.cpp │ ├── function_curve_parameter_controller.h │ ├── function_expression_cell.cpp │ ├── function_expression_cell.h │ ├── function_go_to_parameter_controller.cpp │ ├── function_go_to_parameter_controller.h │ ├── function_graph_controller.cpp │ ├── function_graph_controller.h │ ├── function_graph_view.cpp │ ├── function_graph_view.h │ ├── function_list_controller.cpp │ ├── function_list_controller.h │ ├── function_store.cpp │ ├── function_store.h │ ├── function_title_cell.cpp │ ├── function_title_cell.h │ ├── function_zoom_and_pan_curve_view_controller.cpp │ ├── function_zoom_and_pan_curve_view_controller.h │ ├── global_context.cpp │ ├── global_context.h │ ├── go_to_parameter_controller.cpp │ ├── go_to_parameter_controller.h │ ├── hideable.h │ ├── hideable_even_odd_buffer_text_cell.cpp │ ├── hideable_even_odd_buffer_text_cell.h │ ├── hideable_even_odd_cell.cpp │ ├── hideable_even_odd_cell.h │ ├── hideable_even_odd_editable_text_cell.cpp │ ├── hideable_even_odd_editable_text_cell.h │ ├── input_event_handler_delegate.h │ ├── input_event_handler_delegate_app.cpp │ ├── input_event_handler_delegate_app.h │ ├── interactive_curve_view_controller.cpp │ ├── interactive_curve_view_controller.h │ ├── interactive_curve_view_range.cpp │ ├── interactive_curve_view_range.h │ ├── interactive_curve_view_range_delegate.cpp │ ├── interactive_curve_view_range_delegate.h │ ├── interval.cpp │ ├── interval.h │ ├── interval_parameter_controller.cpp │ ├── interval_parameter_controller.h │ ├── labeled_curve_view.cpp │ ├── labeled_curve_view.h │ ├── layout_field_delegate.cpp │ ├── layout_field_delegate.h │ ├── list_parameter_controller.cpp │ ├── list_parameter_controller.h │ ├── localization_controller.cpp │ ├── localization_controller.h │ ├── memoized_curve_view_range.cpp │ ├── memoized_curve_view_range.h │ ├── message_controller.cpp │ ├── message_controller.h │ ├── message_view.cpp │ ├── message_view.h │ ├── ok_view.cpp │ ├── ok_view.h │ ├── parameter_text_field_delegate.cpp │ ├── parameter_text_field_delegate.h │ ├── poincare_helpers.h │ ├── post_and_hardware_tests.cpp │ ├── post_and_hardware_tests.h │ ├── range_1D.cpp │ ├── range_1D.h │ ├── range_parameter_controller.cpp │ ├── range_parameter_controller.h │ ├── regular_table_view_data_source.cpp │ ├── regular_table_view_data_source.h │ ├── round_cursor_view.cpp │ ├── round_cursor_view.h │ ├── scrollable_multiple_expressions_view.cpp │ ├── scrollable_multiple_expressions_view.h │ ├── scrollable_two_expressions_cell.cpp │ ├── scrollable_two_expressions_cell.h │ ├── separable.cpp │ ├── separable.h │ ├── separator_even_odd_buffer_text_cell.cpp │ ├── separator_even_odd_buffer_text_cell.h │ ├── sequence.cpp │ ├── sequence.h │ ├── sequence_cache_context.cpp │ ├── sequence_cache_context.h │ ├── sequence_context.cpp │ ├── sequence_context.h │ ├── sequence_store.cpp │ ├── sequence_store.h │ ├── sequence_title_cell.cpp │ ├── sequence_title_cell.h │ ├── settings_message_tree.h │ ├── shared_app.cpp │ ├── shared_app.h │ ├── simple_interactive_curve_view_controller.cpp │ ├── simple_interactive_curve_view_controller.h │ ├── store_cell.cpp │ ├── store_cell.h │ ├── store_context.h │ ├── store_controller.cpp │ ├── store_controller.h │ ├── store_parameter_controller.cpp │ ├── store_parameter_controller.h │ ├── store_selectable_table_view.cpp │ ├── store_selectable_table_view.h │ ├── store_title_cell.cpp │ ├── store_title_cell.h │ ├── sum_graph_controller.cpp │ ├── sum_graph_controller.h │ ├── tab_table_controller.cpp │ ├── tab_table_controller.h │ ├── test │ │ └── function_alignement.cpp │ ├── text_field_delegate.cpp │ ├── text_field_delegate.h │ ├── text_field_delegate_app.cpp │ ├── text_field_delegate_app.h │ ├── text_field_with_extension.cpp │ ├── text_field_with_extension.h │ ├── text_helpers.cpp │ ├── text_helpers.h │ ├── toolbox_helpers.cpp │ ├── toolbox_helpers.h │ ├── values_controller.cpp │ ├── values_controller.h │ ├── values_function_parameter_controller.cpp │ ├── values_function_parameter_controller.h │ ├── values_parameter_controller.cpp │ ├── values_parameter_controller.h │ ├── vertical_cursor_view.cpp │ ├── vertical_cursor_view.h │ ├── xy_banner_view.cpp │ ├── xy_banner_view.h │ ├── zoom_and_pan_curve_view_controller.cpp │ ├── zoom_and_pan_curve_view_controller.h │ ├── zoom_curve_view_controller.cpp │ └── zoom_curve_view_controller.h ├── shift_alpha_lock_view.cpp ├── shift_alpha_lock_view.h ├── solver │ ├── Makefile │ ├── app.cpp │ ├── app.h │ ├── base.de.i18n │ ├── base.en.i18n │ ├── base.es.i18n │ ├── base.fr.i18n │ ├── base.it.i18n │ ├── base.nl.i18n │ ├── base.pt.i18n │ ├── equation.cpp │ ├── equation.h │ ├── equation_list_view.cpp │ ├── equation_list_view.h │ ├── equation_models_parameter_controller.cpp │ ├── equation_models_parameter_controller.h │ ├── equation_store.cpp │ ├── equation_store.h │ ├── interval_controller.cpp │ ├── interval_controller.h │ ├── list_controller.cpp │ ├── list_controller.h │ ├── solutions_controller.cpp │ ├── solutions_controller.h │ ├── solver_icon.png │ └── test │ │ ├── equation_store.cpp │ │ ├── helpers.cpp │ │ └── helpers.h ├── statistics │ ├── Makefile │ ├── app.cpp │ ├── app.h │ ├── base.de.i18n │ ├── base.en.i18n │ ├── base.es.i18n │ ├── base.fr.i18n │ ├── base.it.i18n │ ├── base.nl.i18n │ ├── base.pt.i18n │ ├── box_axis_view.cpp │ ├── box_axis_view.h │ ├── box_banner_view.cpp │ ├── box_banner_view.h │ ├── box_controller.cpp │ ├── box_controller.h │ ├── box_range.cpp │ ├── box_range.h │ ├── box_view.cpp │ ├── box_view.h │ ├── calculation_controller.cpp │ ├── calculation_controller.h │ ├── calculation_selectable_table_view.cpp │ ├── calculation_selectable_table_view.h │ ├── histogram_banner_view.cpp │ ├── histogram_banner_view.h │ ├── histogram_controller.cpp │ ├── histogram_controller.h │ ├── histogram_parameter_controller.cpp │ ├── histogram_parameter_controller.h │ ├── histogram_view.cpp │ ├── histogram_view.h │ ├── multiple_boxes_view.cpp │ ├── multiple_boxes_view.h │ ├── multiple_data_view.cpp │ ├── multiple_data_view.h │ ├── multiple_data_view_controller.cpp │ ├── multiple_data_view_controller.h │ ├── multiple_histograms_view.cpp │ ├── multiple_histograms_view.h │ ├── stat_icon.png │ ├── statistics_context.cpp │ ├── statistics_context.h │ ├── store.cpp │ ├── store.h │ ├── store_controller.cpp │ ├── store_controller.h │ └── test │ │ └── store.cpp ├── suspend_timer.cpp ├── suspend_timer.h ├── title_bar_view.cpp ├── title_bar_view.h ├── toolbox.de.i18n ├── toolbox.en.i18n ├── toolbox.es.i18n ├── toolbox.fr.i18n ├── toolbox.it.i18n ├── toolbox.nl.i18n ├── toolbox.pt.i18n ├── toolbox.universal.i18n ├── usb │ ├── Makefile │ ├── app.cpp │ ├── app.h │ ├── base.de.i18n │ ├── base.en.i18n │ ├── base.es.i18n │ ├── base.fr.i18n │ ├── base.it.i18n │ ├── base.nl.i18n │ ├── base.pt.i18n │ ├── base.universal.i18n │ ├── usb_connected_controller.cpp │ └── usb_connected_controller.h ├── variables.de.i18n ├── variables.en.i18n ├── variables.es.i18n ├── variables.fr.i18n ├── variables.it.i18n ├── variables.nl.i18n └── variables.pt.i18n ├── bootloader ├── Makefile ├── boot.cpp ├── boot.h ├── cable.png ├── computer.png ├── interface.cpp ├── interface.h ├── jump_to_firmware.s ├── kernel_header.cpp ├── kernel_header.h ├── key.h ├── keys.csv ├── keys2h.py ├── main.cpp ├── slot.cpp ├── slot.h ├── trampoline.cpp ├── trampoline.h ├── usb_desc.cpp ├── userland_header.cpp └── userland_header.h ├── build ├── all.mak ├── config.mak ├── defaults.mak ├── device │ ├── check.py │ ├── dfu.py │ ├── elf2dfu.py │ ├── gdb_script.gdb │ ├── genkeys.py │ ├── memory_map.awk │ ├── openocd.n0100.cfg │ ├── openocd.n0110.cfg │ ├── ram_map.py │ ├── sign.py │ └── usb │ │ ├── __init__.py │ │ ├── _debug.py │ │ ├── _interop.py │ │ ├── _lookup.py │ │ ├── _objfinalizer.py │ │ ├── backend │ │ ├── __init__.py │ │ ├── libusb0.py │ │ ├── libusb1.py │ │ └── openusb.py │ │ ├── control.py │ │ ├── core.py │ │ ├── legacy.py │ │ ├── libloader.py │ │ └── util.py ├── helpers.mk ├── keys.mk ├── metrics │ └── binary_size.py ├── platform.blackbox.mak ├── platform.device.mak ├── platform.device.n0100.mak ├── platform.device.n0110.mak ├── platform.simulator.android.mak ├── platform.simulator.ios.mak ├── platform.simulator.linux.mak ├── platform.simulator.macos.mak ├── platform.simulator.mak ├── platform.simulator.web.mak ├── platform.simulator.windows.mak ├── rules.mk ├── scenario │ ├── Makefile │ └── afl.py ├── struct_layout │ ├── Makefile │ ├── ast_to_json.rb │ └── visualization.html ├── targets.blackbox.mak ├── targets.device.mak ├── targets.device.n0100.mak ├── targets.device.n0110.mak ├── targets.mak ├── targets.simulator.android.mak ├── targets.simulator.ios.mak ├── targets.simulator.linux.mak ├── targets.simulator.macos.mak ├── targets.simulator.mak ├── targets.simulator.web.mak ├── targets.simulator.windows.mak ├── toolchain.afl.mak ├── toolchain.android.mak ├── toolchain.apple.mak ├── toolchain.arm-gcc-m4f.mak ├── toolchain.arm-gcc-m7f.mak ├── toolchain.arm-gcc.mak ├── toolchain.arm-llvm.mak ├── toolchain.emscripten.mak ├── toolchain.host-clang.mak ├── toolchain.host-gcc.mak ├── toolchain.windows.mak └── variants.mak ├── docs ├── architecture.svg ├── build │ └── index.md ├── epsilon.svg ├── index.md ├── ion │ └── index.md └── poincare │ ├── baseline.svg │ ├── beautify.svg │ ├── expression-tree.svg │ ├── index.md │ ├── layout.svg │ ├── order.svg │ ├── reduce.svg │ ├── rtti.svg │ └── simplify.svg ├── escher ├── Makefile ├── image │ └── inliner.c ├── include │ ├── escher.h │ └── escher │ │ ├── alternate_empty_view_controller.h │ │ ├── alternate_empty_view_delegate.h │ │ ├── app.h │ │ ├── bank_view_controller.h │ │ ├── bordered.h │ │ ├── buffer_text_view.h │ │ ├── button.h │ │ ├── button_row_controller.h │ │ ├── button_state.h │ │ ├── chevron_view.h │ │ ├── clipboard.h │ │ ├── container.h │ │ ├── context_provider.h │ │ ├── editable_field.h │ │ ├── editable_text_cell.h │ │ ├── ellipsis_view.h │ │ ├── even_odd_buffer_text_cell.h │ │ ├── even_odd_cell.h │ │ ├── even_odd_cell_with_ellipsis.h │ │ ├── even_odd_editable_text_cell.h │ │ ├── even_odd_expression_cell.h │ │ ├── even_odd_message_text_cell.h │ │ ├── expression_field.h │ │ ├── expression_table_cell.h │ │ ├── expression_table_cell_with_expression.h │ │ ├── expression_table_cell_with_pointer.h │ │ ├── expression_view.h │ │ ├── gauge_view.h │ │ ├── highlight_cell.h │ │ ├── i18n.h │ │ ├── image.h │ │ ├── image_view.h │ │ ├── input_event_handler.h │ │ ├── input_event_handler_delegate.h │ │ ├── input_view_controller.h │ │ ├── invocation.h │ │ ├── key_view.h │ │ ├── layout_field.h │ │ ├── layout_field_delegate.h │ │ ├── list_view_data_source.h │ │ ├── message_table_cell.h │ │ ├── message_table_cell_with_buffer.h │ │ ├── message_table_cell_with_chevron.h │ │ ├── message_table_cell_with_chevron_and_buffer.h │ │ ├── message_table_cell_with_chevron_and_expression.h │ │ ├── message_table_cell_with_chevron_and_message.h │ │ ├── message_table_cell_with_editable_text.h │ │ ├── message_table_cell_with_expression.h │ │ ├── message_table_cell_with_gauge.h │ │ ├── message_table_cell_with_message.h │ │ ├── message_table_cell_with_switch.h │ │ ├── message_text_view.h │ │ ├── message_tree.h │ │ ├── metric.h │ │ ├── modal_view_controller.h │ │ ├── modal_view_empty_controller.h │ │ ├── nested_menu_controller.h │ │ ├── palette.h │ │ ├── pointer_text_view.h │ │ ├── pop_up_controller.h │ │ ├── progress_bar_view.h │ │ ├── responder.h │ │ ├── run_loop.h │ │ ├── scroll_view.h │ │ ├── scroll_view_data_source.h │ │ ├── scroll_view_indicator.h │ │ ├── scrollable_expression_view.h │ │ ├── scrollable_view.h │ │ ├── selectable_table_view.h │ │ ├── selectable_table_view_data_source.h │ │ ├── selectable_table_view_delegate.h │ │ ├── simple_list_view_data_source.h │ │ ├── simple_table_view_data_source.h │ │ ├── solid_color_view.h │ │ ├── stack_view.h │ │ ├── stack_view_controller.h │ │ ├── switch_view.h │ │ ├── tab_view.h │ │ ├── tab_view_cell.h │ │ ├── tab_view_controller.h │ │ ├── tab_view_data_source.h │ │ ├── table_cell.h │ │ ├── table_view.h │ │ ├── table_view_data_source.h │ │ ├── telemetry.h │ │ ├── text_area.h │ │ ├── text_area_delegate.h │ │ ├── text_cursor_view.h │ │ ├── text_field.h │ │ ├── text_field_delegate.h │ │ ├── text_input.h │ │ ├── text_input_helpers.h │ │ ├── text_view.h │ │ ├── tiled_view.h │ │ ├── timer.h │ │ ├── toggleable_dot_view.h │ │ ├── toggleable_view.h │ │ ├── toolbox.h │ │ ├── toolbox_message_tree.h │ │ ├── transparent_view.h │ │ ├── view.h │ │ ├── view_controller.h │ │ ├── warning_controller.h │ │ └── window.h ├── src │ ├── alternate_empty_view_controller.cpp │ ├── app.cpp │ ├── bank_view_controller.cpp │ ├── bordered.cpp │ ├── buffer_text_view.cpp │ ├── button.cpp │ ├── button_row_controller.cpp │ ├── button_state.cpp │ ├── chevron_view.cpp │ ├── clipboard.cpp │ ├── container.cpp │ ├── editable_text_cell.cpp │ ├── ellipsis_view.cpp │ ├── even_odd_buffer_text_cell.cpp │ ├── even_odd_cell.cpp │ ├── even_odd_cell_with_ellipsis.cpp │ ├── even_odd_editable_text_cell.cpp │ ├── even_odd_expression_cell.cpp │ ├── even_odd_message_text_cell.cpp │ ├── expression_field.cpp │ ├── expression_table_cell.cpp │ ├── expression_table_cell_with_expression.cpp │ ├── expression_table_cell_with_pointer.cpp │ ├── expression_view.cpp │ ├── gauge_view.cpp │ ├── highlight_cell.cpp │ ├── image_view.cpp │ ├── input_event_handler.cpp │ ├── input_view_controller.cpp │ ├── invocation.cpp │ ├── key_view.cpp │ ├── layout_field.cpp │ ├── list_view_data_source.cpp │ ├── message_table_cell.cpp │ ├── message_table_cell_with_buffer.cpp │ ├── message_table_cell_with_chevron.cpp │ ├── message_table_cell_with_chevron_and_buffer.cpp │ ├── message_table_cell_with_chevron_and_expression.cpp │ ├── message_table_cell_with_chevron_and_message.cpp │ ├── message_table_cell_with_editable_text.cpp │ ├── message_table_cell_with_expression.cpp │ ├── message_table_cell_with_gauge.cpp │ ├── message_table_cell_with_message.cpp │ ├── message_table_cell_with_switch.cpp │ ├── message_text_view.cpp │ ├── metric.cpp │ ├── modal_view_controller.cpp │ ├── modal_view_empty_controller.cpp │ ├── nested_menu_controller.cpp │ ├── palette.cpp │ ├── pointer_text_view.cpp │ ├── pop_up_controller.cpp │ ├── progress_bar_view.cpp │ ├── responder.cpp │ ├── run_loop.cpp │ ├── scroll_view.cpp │ ├── scroll_view_data_source.cpp │ ├── scroll_view_indicator.cpp │ ├── scrollable_expression_view.cpp │ ├── scrollable_view.cpp │ ├── selectable_table_view.cpp │ ├── simple_list_view_data_source.cpp │ ├── simple_table_view_data_source.cpp │ ├── solid_color_view.cpp │ ├── stack_view.cpp │ ├── stack_view_controller.cpp │ ├── switch_view.cpp │ ├── tab_view.cpp │ ├── tab_view_cell.cpp │ ├── tab_view_controller.cpp │ ├── tab_view_data_source.cpp │ ├── table_cell.cpp │ ├── table_view.cpp │ ├── table_view_data_source.cpp │ ├── text_area.cpp │ ├── text_cursor_view.cpp │ ├── text_field.cpp │ ├── text_input.cpp │ ├── text_input_helpers.cpp │ ├── text_view.cpp │ ├── tiled_view.cpp │ ├── timer.cpp │ ├── toggleable_dot_view.cpp │ ├── toggleable_view.cpp │ ├── toolbox.cpp │ ├── transparent_view.cpp │ ├── view.cpp │ ├── view_controller.cpp │ ├── warning_controller.cpp │ └── window.cpp └── test │ ├── clipboard.cpp │ └── layout_field.cpp ├── ion ├── Makefile ├── README.txt ├── include │ ├── ion.h │ └── ion │ │ ├── backlight.h │ │ ├── battery.h │ │ ├── board.h │ │ ├── clipboard.h │ │ ├── console.h │ │ ├── display.h │ │ ├── events.h │ │ ├── exam_mode.h │ │ ├── filesystem.h │ │ ├── keyboard.h │ │ ├── keyboard │ │ ├── event_data.h │ │ ├── layout_B2 │ │ │ └── layout_keyboard.h │ │ ├── layout_B3 │ │ │ └── layout_keyboard.h │ │ └── layout_events.h │ │ ├── led.h │ │ ├── power.h │ │ ├── storage.h │ │ ├── telemetry.h │ │ ├── timing.h │ │ ├── unicode │ │ ├── code_point.h │ │ ├── utf8_decoder.h │ │ └── utf8_helper.h │ │ └── usb.h ├── src │ ├── blackbox │ │ ├── Makefile │ │ ├── boot.cpp │ │ ├── compare.cpp │ │ ├── display.cpp │ │ ├── display.h │ │ ├── events.cpp │ │ ├── events.h │ │ ├── ion.cpp │ │ ├── lib_export_list.txt │ │ ├── library.cpp │ │ └── library.h │ ├── device │ │ ├── Makefile │ │ ├── bench │ │ │ ├── Makefile │ │ │ ├── bench.cpp │ │ │ ├── bench.h │ │ │ ├── command │ │ │ │ ├── adc.cpp │ │ │ │ ├── backlight.cpp │ │ │ │ ├── charge.cpp │ │ │ │ ├── command.cpp │ │ │ │ ├── command.h │ │ │ │ ├── crc.cpp │ │ │ │ ├── display.cpp │ │ │ │ ├── exit.cpp │ │ │ │ ├── external_flash_id.cpp │ │ │ │ ├── jump.cpp │ │ │ │ ├── keyboard.cpp │ │ │ │ ├── lcd_data.cpp │ │ │ │ ├── lcd_pins.cpp │ │ │ │ ├── lcd_timing.cpp │ │ │ │ ├── led.cpp │ │ │ │ ├── mcu_serial.cpp │ │ │ │ ├── ping.cpp │ │ │ │ ├── print.cpp │ │ │ │ ├── screen_id.cpp │ │ │ │ ├── sleep.cpp │ │ │ │ ├── standby.cpp │ │ │ │ ├── stop.cpp │ │ │ │ ├── usb_plugged.cpp │ │ │ │ ├── vblank.cpp │ │ │ │ └── write_pcb_version.cpp │ │ │ ├── command_handler.cpp │ │ │ ├── command_handler.h │ │ │ ├── command_list.cpp │ │ │ ├── command_list.h │ │ │ ├── config │ │ │ │ └── ram.ld │ │ │ └── runner.cpp │ │ ├── flasher │ │ │ ├── Makefile │ │ │ ├── config │ │ │ │ └── ram.ld │ │ │ ├── display.h │ │ │ ├── display_light.cpp │ │ │ ├── display_verbose.cpp │ │ │ └── main.cpp │ │ ├── log.cpp │ │ ├── n0100 │ │ │ ├── Makefile │ │ │ ├── drivers │ │ │ │ ├── board.cpp │ │ │ │ ├── cache.cpp │ │ │ │ ├── cache.h │ │ │ │ ├── config │ │ │ │ │ ├── backlight.h │ │ │ │ │ ├── battery.h │ │ │ │ │ ├── clocks.h │ │ │ │ │ ├── console.h │ │ │ │ │ ├── display.h │ │ │ │ │ ├── exam_mode.h │ │ │ │ │ ├── external_flash.h │ │ │ │ │ ├── internal_flash.h │ │ │ │ │ ├── keyboard.h │ │ │ │ │ ├── led.h │ │ │ │ │ ├── serial_number.h │ │ │ │ │ ├── swd.h │ │ │ │ │ ├── timing.h │ │ │ │ │ └── usb.h │ │ │ │ ├── external_flash.cpp │ │ │ │ ├── led.cpp │ │ │ │ ├── power.cpp │ │ │ │ ├── reset.cpp │ │ │ │ └── usb.cpp │ │ │ ├── flash.ld │ │ │ ├── platform_info.cpp │ │ │ └── regs │ │ │ │ └── config │ │ │ │ ├── cortex.h │ │ │ │ ├── crc.h │ │ │ │ ├── flash.h │ │ │ │ ├── pwr.h │ │ │ │ ├── rcc.h │ │ │ │ ├── syscfg.h │ │ │ │ └── usart.h │ │ ├── n0110 │ │ │ ├── Makefile │ │ │ ├── bootloader.A.ld │ │ │ ├── bootloader.B.ld │ │ │ ├── bootloader.common.ld │ │ │ ├── bootloader.ld │ │ │ ├── drivers │ │ │ │ ├── board.cpp │ │ │ │ ├── board_bootloader.cpp │ │ │ │ ├── cache.cpp │ │ │ │ ├── cache.h │ │ │ │ ├── config │ │ │ │ │ ├── backlight.h │ │ │ │ │ ├── battery.h │ │ │ │ │ ├── clocks.h │ │ │ │ │ ├── console.h │ │ │ │ │ ├── display.h │ │ │ │ │ ├── exam_mode.h │ │ │ │ │ ├── external_flash.h │ │ │ │ │ ├── internal_flash.h │ │ │ │ │ ├── keyboard.h │ │ │ │ │ ├── led.h │ │ │ │ │ ├── serial_number.h │ │ │ │ │ ├── swd.h │ │ │ │ │ ├── timing.h │ │ │ │ │ └── usb.h │ │ │ │ ├── external_flash.cpp │ │ │ │ ├── external_flash_tramp.cpp │ │ │ │ ├── led.cpp │ │ │ │ ├── power.cpp │ │ │ │ ├── power.h │ │ │ │ ├── power_bootloader.cpp │ │ │ │ ├── reset.cpp │ │ │ │ ├── trampoline.cpp │ │ │ │ ├── trampoline.h │ │ │ │ └── usb.cpp │ │ │ ├── flash.ld │ │ │ ├── internal_flash.ld │ │ │ ├── platform_info.cpp │ │ │ ├── platform_info_bootloader.cpp │ │ │ └── regs │ │ │ │ └── config │ │ │ │ ├── cortex.h │ │ │ │ ├── crc.h │ │ │ │ ├── flash.h │ │ │ │ ├── pwr.h │ │ │ │ ├── rcc.h │ │ │ │ ├── syscfg.h │ │ │ │ └── usart.h │ │ └── shared │ │ │ ├── Makefile │ │ │ ├── boot │ │ │ ├── Makefile │ │ │ ├── isr.c │ │ │ ├── isr.h │ │ │ └── rt0.cpp │ │ │ ├── drivers │ │ │ ├── Makefile │ │ │ ├── backlight.cpp │ │ │ ├── backlight.h │ │ │ ├── base64.cpp │ │ │ ├── base64.h │ │ │ ├── battery.cpp │ │ │ ├── battery.h │ │ │ ├── board.cpp │ │ │ ├── board.h │ │ │ ├── clipboard.cpp │ │ │ ├── console.h │ │ │ ├── console_display.cpp │ │ │ ├── console_dummy.cpp │ │ │ ├── console_uart.cpp │ │ │ ├── crc32.cpp │ │ │ ├── display.cpp │ │ │ ├── display.h │ │ │ ├── events_keyboard_platform.cpp │ │ │ ├── events_keyboard_platform.h │ │ │ ├── exam_mode.cpp │ │ │ ├── external_flash.h │ │ │ ├── filesystem.cpp │ │ │ ├── filesystem.h │ │ │ ├── filesystem_dummy.cpp │ │ │ ├── flash.cpp │ │ │ ├── flash.h │ │ │ ├── internal_flash.cpp │ │ │ ├── internal_flash.h │ │ │ ├── keyboard.cpp │ │ │ ├── keyboard.h │ │ │ ├── led.cpp │ │ │ ├── led.h │ │ │ ├── pcb_version.cpp │ │ │ ├── power.cpp │ │ │ ├── power.h │ │ │ ├── random.cpp │ │ │ ├── reset.cpp │ │ │ ├── reset.h │ │ │ ├── serial_number.cpp │ │ │ ├── serial_number.h │ │ │ ├── swd.cpp │ │ │ ├── swd.h │ │ │ ├── timing.cpp │ │ │ ├── timing.h │ │ │ ├── usb.cpp │ │ │ ├── usb.h │ │ │ ├── usb_desc.cpp │ │ │ ├── wakeup.cpp │ │ │ └── wakeup.h │ │ │ ├── events.cpp │ │ │ ├── ram.ld │ │ │ ├── regs │ │ │ ├── adc.h │ │ │ ├── cortex.h │ │ │ ├── crc.h │ │ │ ├── dma.h │ │ │ ├── exti.h │ │ │ ├── flash.h │ │ │ ├── fsmc.h │ │ │ ├── gpio.h │ │ │ ├── itm.h │ │ │ ├── mpu.h │ │ │ ├── nvic.h │ │ │ ├── otg.h │ │ │ ├── pwr.h │ │ │ ├── quadspi.h │ │ │ ├── rcc.h │ │ │ ├── register.h │ │ │ ├── regs.h │ │ │ ├── rng.h │ │ │ ├── sdio.h │ │ │ ├── spi.h │ │ │ ├── syscfg.h │ │ │ ├── tim.h │ │ │ └── usart.h │ │ │ ├── stack.cpp │ │ │ └── usb │ │ │ ├── Makefile │ │ │ ├── boot.cpp │ │ │ ├── calculator.cpp │ │ │ ├── calculator.h │ │ │ ├── dfu.ld │ │ │ ├── dfu_interface.cpp │ │ │ ├── dfu_interface.h │ │ │ ├── dfu_relocated.cpp │ │ │ ├── dfu_xip.cpp │ │ │ └── stack │ │ │ ├── descriptor │ │ │ ├── bos_descriptor.cpp │ │ │ ├── bos_descriptor.h │ │ │ ├── configuration_descriptor.cpp │ │ │ ├── configuration_descriptor.h │ │ │ ├── descriptor.cpp │ │ │ ├── descriptor.h │ │ │ ├── device_capability_descriptor.cpp │ │ │ ├── device_capability_descriptor.h │ │ │ ├── device_descriptor.cpp │ │ │ ├── device_descriptor.h │ │ │ ├── dfu_functional_descriptor.cpp │ │ │ ├── dfu_functional_descriptor.h │ │ │ ├── extended_compat_id_descriptor.cpp │ │ │ ├── extended_compat_id_descriptor.h │ │ │ ├── interface_descriptor.cpp │ │ │ ├── interface_descriptor.h │ │ │ ├── language_id_string_descriptor.cpp │ │ │ ├── language_id_string_descriptor.h │ │ │ ├── microsoft_os_string_descriptor.cpp │ │ │ ├── microsoft_os_string_descriptor.h │ │ │ ├── platform_device_capability_descriptor.cpp │ │ │ ├── platform_device_capability_descriptor.h │ │ │ ├── string_descriptor.cpp │ │ │ ├── string_descriptor.h │ │ │ ├── url_descriptor.cpp │ │ │ ├── url_descriptor.h │ │ │ ├── webusb_platform_descriptor.cpp │ │ │ └── webusb_platform_descriptor.h │ │ │ ├── device.cpp │ │ │ ├── device.h │ │ │ ├── endpoint0.cpp │ │ │ ├── endpoint0.h │ │ │ ├── interface.cpp │ │ │ ├── interface.h │ │ │ ├── request_recipient.cpp │ │ │ ├── request_recipient.h │ │ │ ├── setup_packet.cpp │ │ │ ├── setup_packet.h │ │ │ ├── streamable.cpp │ │ │ └── streamable.h │ ├── external │ │ ├── ed25519 │ │ │ ├── LICENSE │ │ │ ├── add_scalar.c │ │ │ ├── ed25519.h │ │ │ ├── fe.c │ │ │ ├── fe.h │ │ │ ├── fixedint.h │ │ │ ├── ge.c │ │ │ ├── ge.h │ │ │ ├── key_exchange.c │ │ │ ├── keypair.c │ │ │ ├── precomp_data.h │ │ │ ├── sc.c │ │ │ ├── sc.h │ │ │ ├── seed.c │ │ │ ├── sha512.c │ │ │ ├── sha512.h │ │ │ ├── sign.c │ │ │ └── verify.c │ │ ├── lz4 │ │ │ ├── lz4.c │ │ │ ├── lz4.h │ │ │ ├── lz4hc.c │ │ │ └── lz4hc.h │ │ └── spiffs │ │ │ ├── LICENSE │ │ │ ├── spiffs.h │ │ │ ├── spiffs_cache.c │ │ │ ├── spiffs_check.c │ │ │ ├── spiffs_config.h │ │ │ ├── spiffs_gc.c │ │ │ ├── spiffs_hydrogen.c │ │ │ ├── spiffs_nucleus.c │ │ │ └── spiffs_nucleus.h │ ├── shared │ │ ├── collect_registers.cpp │ │ ├── console_line.cpp │ │ ├── crc32_eat_byte.cpp │ │ ├── decompress.cpp │ │ ├── dummy │ │ │ ├── backlight.cpp │ │ │ ├── battery.cpp │ │ │ ├── board.cpp │ │ │ ├── display.cpp │ │ │ ├── exam_mode.cpp │ │ │ ├── fcc_id.cpp │ │ │ ├── led.cpp │ │ │ ├── pcb_version.cpp │ │ │ ├── power.cpp │ │ │ ├── serial_number.cpp │ │ │ ├── stack.cpp │ │ │ └── usb.cpp │ │ ├── events.cpp │ │ ├── events_benchmark.cpp │ │ ├── events_keyboard.cpp │ │ ├── events_modifier.cpp │ │ ├── events_replay.cpp │ │ ├── events_stdin.cpp │ │ ├── filesystem.cpp │ │ ├── keyboard │ │ │ ├── layout_B2 │ │ │ │ └── layout_events.cpp │ │ │ └── layout_B3 │ │ │ │ └── layout_events.cpp │ │ ├── stack_position.cpp │ │ ├── storage.cpp │ │ ├── telemetry_console.cpp │ │ ├── tools │ │ │ ├── Makefile │ │ │ ├── event_filter.cpp │ │ │ ├── event_generator.cpp │ │ │ ├── event_parser.cpp │ │ │ └── event_printer.cpp │ │ ├── unicode │ │ │ ├── utf8_decoder.cpp │ │ │ └── utf8_helper.cpp │ │ └── verify.cpp │ └── simulator │ │ ├── Makefile │ │ ├── android │ │ ├── Makefile │ │ ├── build.gradle │ │ ├── gradle.properties │ │ ├── gradle │ │ │ └── wrapper │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ ├── gradlew │ │ └── src │ │ │ ├── AndroidManifest.xml │ │ │ ├── cpp │ │ │ ├── haptics_enabled.cpp │ │ │ ├── platform_images.cpp │ │ │ ├── platform_language.cpp │ │ │ └── telemetry.cpp │ │ │ ├── java │ │ │ ├── com │ │ │ │ └── numworks │ │ │ │ │ └── calculator │ │ │ │ │ └── EpsilonActivity.java │ │ │ └── org │ │ │ │ └── libsdl │ │ │ │ └── app │ │ │ │ ├── HIDDevice.java │ │ │ │ ├── HIDDeviceBLESteamController.java │ │ │ │ ├── HIDDeviceManager.java │ │ │ │ ├── HIDDeviceUSB.java │ │ │ │ ├── SDL.java │ │ │ │ ├── SDLActivity.java │ │ │ │ ├── SDLAudioManager.java │ │ │ │ └── SDLControllerManager.java │ │ │ └── res │ │ │ ├── mipmap-v26 │ │ │ └── ic_launcher.xml │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── assets │ │ ├── background.jpg │ │ ├── horizontal_arrow.png │ │ ├── large_squircle.png │ │ ├── logo.svg │ │ ├── round.png │ │ ├── small_squircle.png │ │ └── vertical_arrow.png │ │ ├── external │ │ ├── Makefile │ │ ├── README.md │ │ ├── config.android.mak │ │ ├── config.ios.mak │ │ ├── config.linux.mak │ │ ├── config.macos.mak │ │ ├── config.web.mak │ │ ├── config.windows.mak │ │ └── sdl │ │ │ ├── include │ │ │ ├── SDL.h │ │ │ ├── SDL_assert.h │ │ │ ├── SDL_atomic.h │ │ │ ├── SDL_audio.h │ │ │ ├── SDL_bits.h │ │ │ ├── SDL_blendmode.h │ │ │ ├── SDL_clipboard.h │ │ │ ├── SDL_config.h │ │ │ ├── SDL_config_android.h │ │ │ ├── SDL_config_iphoneos.h │ │ │ ├── SDL_config_macosx.h │ │ │ ├── SDL_config_minimal.h │ │ │ ├── SDL_config_os2.h │ │ │ ├── SDL_config_pandora.h │ │ │ ├── SDL_config_psp.h │ │ │ ├── SDL_config_windows.h │ │ │ ├── SDL_config_winrt.h │ │ │ ├── SDL_config_wiz.h │ │ │ ├── SDL_copying.h │ │ │ ├── SDL_cpuinfo.h │ │ │ ├── SDL_egl.h │ │ │ ├── SDL_endian.h │ │ │ ├── SDL_error.h │ │ │ ├── SDL_events.h │ │ │ ├── SDL_filesystem.h │ │ │ ├── SDL_gamecontroller.h │ │ │ ├── SDL_gesture.h │ │ │ ├── SDL_haptic.h │ │ │ ├── SDL_hints.h │ │ │ ├── SDL_joystick.h │ │ │ ├── SDL_keyboard.h │ │ │ ├── SDL_keycode.h │ │ │ ├── SDL_loadso.h │ │ │ ├── SDL_log.h │ │ │ ├── SDL_main.h │ │ │ ├── SDL_messagebox.h │ │ │ ├── SDL_metal.h │ │ │ ├── SDL_mouse.h │ │ │ ├── SDL_mutex.h │ │ │ ├── SDL_name.h │ │ │ ├── SDL_opengl.h │ │ │ ├── SDL_opengl_glext.h │ │ │ ├── SDL_opengles.h │ │ │ ├── SDL_opengles2.h │ │ │ ├── SDL_opengles2_gl2.h │ │ │ ├── SDL_opengles2_gl2ext.h │ │ │ ├── SDL_opengles2_gl2platform.h │ │ │ ├── SDL_opengles2_khrplatform.h │ │ │ ├── SDL_pixels.h │ │ │ ├── SDL_platform.h │ │ │ ├── SDL_power.h │ │ │ ├── SDL_quit.h │ │ │ ├── SDL_rect.h │ │ │ ├── SDL_render.h │ │ │ ├── SDL_revision.h │ │ │ ├── SDL_rwops.h │ │ │ ├── SDL_scancode.h │ │ │ ├── SDL_sensor.h │ │ │ ├── SDL_shape.h │ │ │ ├── SDL_stdinc.h │ │ │ ├── SDL_surface.h │ │ │ ├── SDL_system.h │ │ │ ├── SDL_syswm.h │ │ │ ├── SDL_thread.h │ │ │ ├── SDL_timer.h │ │ │ ├── SDL_touch.h │ │ │ ├── SDL_types.h │ │ │ ├── SDL_version.h │ │ │ ├── SDL_video.h │ │ │ ├── SDL_vulkan.h │ │ │ ├── begin_code.h │ │ │ └── close_code.h │ │ │ └── src │ │ │ ├── SDL.c │ │ │ ├── SDL_assert.c │ │ │ ├── SDL_assert_c.h │ │ │ ├── SDL_dataqueue.c │ │ │ ├── SDL_dataqueue.h │ │ │ ├── SDL_error.c │ │ │ ├── SDL_error_c.h │ │ │ ├── SDL_hints.c │ │ │ ├── SDL_internal.h │ │ │ ├── SDL_log.c │ │ │ ├── atomic │ │ │ ├── SDL_atomic.c │ │ │ └── SDL_spinlock.c │ │ │ ├── audio │ │ │ ├── SDL_audio.c │ │ │ ├── SDL_audio_c.h │ │ │ ├── SDL_audiocvt.c │ │ │ ├── SDL_audiodev.c │ │ │ ├── SDL_audiodev_c.h │ │ │ ├── SDL_audiotypecvt.c │ │ │ ├── SDL_mixer.c │ │ │ ├── SDL_sysaudio.h │ │ │ ├── SDL_wave.c │ │ │ ├── SDL_wave.h │ │ │ ├── alsa │ │ │ │ ├── SDL_alsa_audio.c │ │ │ │ └── SDL_alsa_audio.h │ │ │ ├── android │ │ │ │ ├── SDL_androidaudio.c │ │ │ │ └── SDL_androidaudio.h │ │ │ ├── arts │ │ │ │ ├── SDL_artsaudio.c │ │ │ │ └── SDL_artsaudio.h │ │ │ ├── coreaudio │ │ │ │ ├── SDL_coreaudio.h │ │ │ │ └── SDL_coreaudio.m │ │ │ ├── directsound │ │ │ │ ├── SDL_directsound.c │ │ │ │ └── SDL_directsound.h │ │ │ ├── disk │ │ │ │ ├── SDL_diskaudio.c │ │ │ │ └── SDL_diskaudio.h │ │ │ ├── dsp │ │ │ │ ├── SDL_dspaudio.c │ │ │ │ └── SDL_dspaudio.h │ │ │ ├── dummy │ │ │ │ ├── SDL_dummyaudio.c │ │ │ │ └── SDL_dummyaudio.h │ │ │ ├── emscripten │ │ │ │ ├── SDL_emscriptenaudio.c │ │ │ │ └── SDL_emscriptenaudio.h │ │ │ ├── esd │ │ │ │ ├── SDL_esdaudio.c │ │ │ │ └── SDL_esdaudio.h │ │ │ ├── fusionsound │ │ │ │ ├── SDL_fsaudio.c │ │ │ │ └── SDL_fsaudio.h │ │ │ ├── haiku │ │ │ │ ├── SDL_haikuaudio.cc │ │ │ │ └── SDL_haikuaudio.h │ │ │ ├── jack │ │ │ │ ├── SDL_jackaudio.c │ │ │ │ └── SDL_jackaudio.h │ │ │ ├── nacl │ │ │ │ ├── SDL_naclaudio.c │ │ │ │ └── SDL_naclaudio.h │ │ │ ├── nas │ │ │ │ ├── SDL_nasaudio.c │ │ │ │ └── SDL_nasaudio.h │ │ │ ├── netbsd │ │ │ │ ├── SDL_netbsdaudio.c │ │ │ │ └── SDL_netbsdaudio.h │ │ │ ├── openslES │ │ │ │ ├── SDL_openslES.c │ │ │ │ └── SDL_openslES.h │ │ │ ├── paudio │ │ │ │ ├── SDL_paudio.c │ │ │ │ └── SDL_paudio.h │ │ │ ├── psp │ │ │ │ ├── SDL_pspaudio.c │ │ │ │ └── SDL_pspaudio.h │ │ │ ├── pulseaudio │ │ │ │ ├── SDL_pulseaudio.c │ │ │ │ └── SDL_pulseaudio.h │ │ │ ├── qsa │ │ │ │ ├── SDL_qsa_audio.c │ │ │ │ └── SDL_qsa_audio.h │ │ │ ├── sndio │ │ │ │ ├── SDL_sndioaudio.c │ │ │ │ └── SDL_sndioaudio.h │ │ │ ├── sun │ │ │ │ ├── SDL_sunaudio.c │ │ │ │ └── SDL_sunaudio.h │ │ │ ├── wasapi │ │ │ │ ├── SDL_wasapi.c │ │ │ │ ├── SDL_wasapi.h │ │ │ │ ├── SDL_wasapi_win32.c │ │ │ │ └── SDL_wasapi_winrt.cpp │ │ │ └── winmm │ │ │ │ ├── SDL_winmm.c │ │ │ │ └── SDL_winmm.h │ │ │ ├── core │ │ │ ├── android │ │ │ │ ├── SDL_android.c │ │ │ │ ├── SDL_android.h │ │ │ │ └── keyinfotable.h │ │ │ ├── linux │ │ │ │ ├── SDL_dbus.c │ │ │ │ ├── SDL_dbus.h │ │ │ │ ├── SDL_evdev.c │ │ │ │ ├── SDL_evdev.h │ │ │ │ ├── SDL_evdev_kbd.c │ │ │ │ ├── SDL_evdev_kbd.h │ │ │ │ ├── SDL_evdev_kbd_default_accents.h │ │ │ │ ├── SDL_evdev_kbd_default_keymap.h │ │ │ │ ├── SDL_fcitx.c │ │ │ │ ├── SDL_fcitx.h │ │ │ │ ├── SDL_ibus.c │ │ │ │ ├── SDL_ibus.h │ │ │ │ ├── SDL_ime.c │ │ │ │ ├── SDL_ime.h │ │ │ │ ├── SDL_threadprio.c │ │ │ │ ├── SDL_udev.c │ │ │ │ └── SDL_udev.h │ │ │ ├── unix │ │ │ │ ├── SDL_poll.c │ │ │ │ └── SDL_poll.h │ │ │ ├── windows │ │ │ │ ├── SDL_directx.h │ │ │ │ ├── SDL_windows.c │ │ │ │ ├── SDL_windows.h │ │ │ │ ├── SDL_xinput.c │ │ │ │ └── SDL_xinput.h │ │ │ └── winrt │ │ │ │ ├── SDL_winrtapp_common.cpp │ │ │ │ ├── SDL_winrtapp_common.h │ │ │ │ ├── SDL_winrtapp_direct3d.cpp │ │ │ │ ├── SDL_winrtapp_direct3d.h │ │ │ │ ├── SDL_winrtapp_xaml.cpp │ │ │ │ └── SDL_winrtapp_xaml.h │ │ │ ├── cpuinfo │ │ │ └── SDL_cpuinfo.c │ │ │ ├── dynapi │ │ │ ├── SDL_dynapi.c │ │ │ ├── SDL_dynapi.h │ │ │ ├── SDL_dynapi_overrides.h │ │ │ ├── SDL_dynapi_procs.h │ │ │ └── gendynapi.pl │ │ │ ├── events │ │ │ ├── SDL_clipboardevents.c │ │ │ ├── SDL_clipboardevents_c.h │ │ │ ├── SDL_displayevents.c │ │ │ ├── SDL_displayevents_c.h │ │ │ ├── SDL_dropevents.c │ │ │ ├── SDL_dropevents_c.h │ │ │ ├── SDL_events.c │ │ │ ├── SDL_events_c.h │ │ │ ├── SDL_gesture.c │ │ │ ├── SDL_gesture_c.h │ │ │ ├── SDL_keyboard.c │ │ │ ├── SDL_keyboard_c.h │ │ │ ├── SDL_mouse.c │ │ │ ├── SDL_mouse_c.h │ │ │ ├── SDL_quit.c │ │ │ ├── SDL_sysevents.h │ │ │ ├── SDL_touch.c │ │ │ ├── SDL_touch_c.h │ │ │ ├── SDL_windowevents.c │ │ │ ├── SDL_windowevents_c.h │ │ │ ├── blank_cursor.h │ │ │ ├── default_cursor.h │ │ │ ├── scancodes_darwin.h │ │ │ ├── scancodes_linux.h │ │ │ ├── scancodes_windows.h │ │ │ └── scancodes_xfree86.h │ │ │ ├── file │ │ │ ├── SDL_rwops.c │ │ │ └── cocoa │ │ │ │ ├── SDL_rwopsbundlesupport.h │ │ │ │ └── SDL_rwopsbundlesupport.m │ │ │ ├── filesystem │ │ │ ├── android │ │ │ │ └── SDL_sysfilesystem.c │ │ │ ├── cocoa │ │ │ │ └── SDL_sysfilesystem.m │ │ │ ├── dummy │ │ │ │ └── SDL_sysfilesystem.c │ │ │ ├── emscripten │ │ │ │ └── SDL_sysfilesystem.c │ │ │ ├── haiku │ │ │ │ └── SDL_sysfilesystem.cc │ │ │ ├── nacl │ │ │ │ └── SDL_sysfilesystem.c │ │ │ ├── unix │ │ │ │ └── SDL_sysfilesystem.c │ │ │ ├── windows │ │ │ │ └── SDL_sysfilesystem.c │ │ │ └── winrt │ │ │ │ └── SDL_sysfilesystem.cpp │ │ │ ├── haptic │ │ │ ├── SDL_haptic.c │ │ │ ├── SDL_haptic_c.h │ │ │ ├── SDL_syshaptic.h │ │ │ ├── android │ │ │ │ ├── SDL_syshaptic.c │ │ │ │ └── SDL_syshaptic_c.h │ │ │ ├── darwin │ │ │ │ ├── SDL_syshaptic.c │ │ │ │ └── SDL_syshaptic_c.h │ │ │ ├── dummy │ │ │ │ └── SDL_syshaptic.c │ │ │ ├── linux │ │ │ │ └── SDL_syshaptic.c │ │ │ └── windows │ │ │ │ ├── SDL_dinputhaptic.c │ │ │ │ ├── SDL_dinputhaptic_c.h │ │ │ │ ├── SDL_windowshaptic.c │ │ │ │ ├── SDL_windowshaptic_c.h │ │ │ │ ├── SDL_xinputhaptic.c │ │ │ │ └── SDL_xinputhaptic_c.h │ │ │ ├── hidapi │ │ │ ├── LICENSE-bsd.txt │ │ │ ├── LICENSE-gpl3.txt │ │ │ ├── LICENSE-orig.txt │ │ │ ├── LICENSE.txt │ │ │ ├── SDL_hidapi.c │ │ │ ├── android │ │ │ │ └── hid.cpp │ │ │ ├── hidapi │ │ │ │ └── hidapi.h │ │ │ ├── ios │ │ │ │ └── hid.m │ │ │ ├── libusb │ │ │ │ ├── hid.c │ │ │ │ └── hidusb.cpp │ │ │ ├── linux │ │ │ │ ├── hid.c │ │ │ │ ├── hid.cpp │ │ │ │ └── hidraw.cpp │ │ │ ├── mac │ │ │ │ └── hid.c │ │ │ └── windows │ │ │ │ └── hid.c │ │ │ ├── joystick │ │ │ ├── SDL_gamecontroller.c │ │ │ ├── SDL_gamecontrollerdb.h │ │ │ ├── SDL_joystick.c │ │ │ ├── SDL_joystick_c.h │ │ │ ├── SDL_sysjoystick.h │ │ │ ├── android │ │ │ │ ├── SDL_sysjoystick.c │ │ │ │ └── SDL_sysjoystick_c.h │ │ │ ├── bsd │ │ │ │ └── SDL_sysjoystick.c │ │ │ ├── controller_type.h │ │ │ ├── darwin │ │ │ │ ├── SDL_sysjoystick.c │ │ │ │ └── SDL_sysjoystick_c.h │ │ │ ├── dummy │ │ │ │ └── SDL_sysjoystick.c │ │ │ ├── emscripten │ │ │ │ ├── SDL_sysjoystick.c │ │ │ │ └── SDL_sysjoystick_c.h │ │ │ ├── haiku │ │ │ │ └── SDL_haikujoystick.cc │ │ │ ├── hidapi │ │ │ │ ├── SDL_hidapi_ps4.c │ │ │ │ ├── SDL_hidapi_switch.c │ │ │ │ ├── SDL_hidapi_xbox360.c │ │ │ │ ├── SDL_hidapi_xboxone.c │ │ │ │ ├── SDL_hidapijoystick.c │ │ │ │ └── SDL_hidapijoystick_c.h │ │ │ ├── iphoneos │ │ │ │ ├── SDL_sysjoystick.m │ │ │ │ └── SDL_sysjoystick_c.h │ │ │ ├── linux │ │ │ │ ├── SDL_sysjoystick.c │ │ │ │ └── SDL_sysjoystick_c.h │ │ │ ├── psp │ │ │ │ └── SDL_sysjoystick.c │ │ │ ├── sort_controllers.py │ │ │ ├── steam │ │ │ │ ├── SDL_steamcontroller.c │ │ │ │ └── SDL_steamcontroller.h │ │ │ └── windows │ │ │ │ ├── SDL_dinputjoystick.c │ │ │ │ ├── SDL_dinputjoystick_c.h │ │ │ │ ├── SDL_mmjoystick.c │ │ │ │ ├── SDL_windowsjoystick.c │ │ │ │ ├── SDL_windowsjoystick_c.h │ │ │ │ ├── SDL_xinputjoystick.c │ │ │ │ └── SDL_xinputjoystick_c.h │ │ │ ├── libm │ │ │ ├── e_atan2.c │ │ │ ├── e_exp.c │ │ │ ├── e_fmod.c │ │ │ ├── e_log.c │ │ │ ├── e_log10.c │ │ │ ├── e_pow.c │ │ │ ├── e_rem_pio2.c │ │ │ ├── e_sqrt.c │ │ │ ├── k_cos.c │ │ │ ├── k_rem_pio2.c │ │ │ ├── k_sin.c │ │ │ ├── k_tan.c │ │ │ ├── math_libm.h │ │ │ ├── math_private.h │ │ │ ├── s_atan.c │ │ │ ├── s_copysign.c │ │ │ ├── s_cos.c │ │ │ ├── s_fabs.c │ │ │ ├── s_floor.c │ │ │ ├── s_scalbn.c │ │ │ ├── s_sin.c │ │ │ └── s_tan.c │ │ │ ├── loadso │ │ │ ├── dlopen │ │ │ │ └── SDL_sysloadso.c │ │ │ ├── dummy │ │ │ │ └── SDL_sysloadso.c │ │ │ └── windows │ │ │ │ └── SDL_sysloadso.c │ │ │ ├── main │ │ │ ├── android │ │ │ │ └── SDL_android_main.c │ │ │ ├── dummy │ │ │ │ └── SDL_dummy_main.c │ │ │ ├── haiku │ │ │ │ ├── SDL_BApp.h │ │ │ │ ├── SDL_BeApp.cc │ │ │ │ └── SDL_BeApp.h │ │ │ ├── nacl │ │ │ │ └── SDL_nacl_main.c │ │ │ ├── psp │ │ │ │ └── SDL_psp_main.c │ │ │ ├── uikit │ │ │ │ └── SDL_uikit_main.c │ │ │ ├── windows │ │ │ │ ├── SDL_windows_main.c │ │ │ │ └── version.rc │ │ │ └── winrt │ │ │ │ ├── SDL2-WinRTResource_BlankCursor.cur │ │ │ │ ├── SDL2-WinRTResources.rc │ │ │ │ └── SDL_winrt_main_NonXAML.cpp │ │ │ ├── power │ │ │ ├── SDL_power.c │ │ │ ├── SDL_syspower.h │ │ │ ├── android │ │ │ │ └── SDL_syspower.c │ │ │ ├── emscripten │ │ │ │ └── SDL_syspower.c │ │ │ ├── haiku │ │ │ │ └── SDL_syspower.c │ │ │ ├── linux │ │ │ │ └── SDL_syspower.c │ │ │ ├── macosx │ │ │ │ └── SDL_syspower.c │ │ │ ├── psp │ │ │ │ └── SDL_syspower.c │ │ │ ├── uikit │ │ │ │ ├── SDL_syspower.h │ │ │ │ └── SDL_syspower.m │ │ │ ├── windows │ │ │ │ └── SDL_syspower.c │ │ │ └── winrt │ │ │ │ └── SDL_syspower.cpp │ │ │ ├── render │ │ │ ├── SDL_d3dmath.c │ │ │ ├── SDL_d3dmath.h │ │ │ ├── SDL_render.c │ │ │ ├── SDL_sysrender.h │ │ │ ├── SDL_yuv_sw.c │ │ │ ├── SDL_yuv_sw_c.h │ │ │ ├── direct3d │ │ │ │ ├── SDL_render_d3d.c │ │ │ │ ├── SDL_shaders_d3d.c │ │ │ │ └── SDL_shaders_d3d.h │ │ │ ├── direct3d11 │ │ │ │ ├── SDL_render_d3d11.c │ │ │ │ ├── SDL_render_winrt.cpp │ │ │ │ ├── SDL_render_winrt.h │ │ │ │ ├── SDL_shaders_d3d11.c │ │ │ │ └── SDL_shaders_d3d11.h │ │ │ ├── metal │ │ │ │ ├── SDL_render_metal.m │ │ │ │ ├── SDL_shaders_metal.metal │ │ │ │ ├── SDL_shaders_metal_ios.h │ │ │ │ ├── SDL_shaders_metal_osx.h │ │ │ │ ├── SDL_shaders_metal_tvos.h │ │ │ │ └── build-metal-shaders.sh │ │ │ ├── opengl │ │ │ │ ├── SDL_glfuncs.h │ │ │ │ ├── SDL_render_gl.c │ │ │ │ ├── SDL_shaders_gl.c │ │ │ │ └── SDL_shaders_gl.h │ │ │ ├── opengles │ │ │ │ ├── SDL_glesfuncs.h │ │ │ │ └── SDL_render_gles.c │ │ │ ├── opengles2 │ │ │ │ ├── SDL_gles2funcs.h │ │ │ │ ├── SDL_render_gles2.c │ │ │ │ ├── SDL_shaders_gles2.c │ │ │ │ └── SDL_shaders_gles2.h │ │ │ ├── psp │ │ │ │ └── SDL_render_psp.c │ │ │ └── software │ │ │ │ ├── SDL_blendfillrect.c │ │ │ │ ├── SDL_blendfillrect.h │ │ │ │ ├── SDL_blendline.c │ │ │ │ ├── SDL_blendline.h │ │ │ │ ├── SDL_blendpoint.c │ │ │ │ ├── SDL_blendpoint.h │ │ │ │ ├── SDL_draw.h │ │ │ │ ├── SDL_drawline.c │ │ │ │ ├── SDL_drawline.h │ │ │ │ ├── SDL_drawpoint.c │ │ │ │ ├── SDL_drawpoint.h │ │ │ │ ├── SDL_render_sw.c │ │ │ │ ├── SDL_render_sw_c.h │ │ │ │ ├── SDL_rotate.c │ │ │ │ └── SDL_rotate.h │ │ │ ├── sensor │ │ │ ├── SDL_sensor.c │ │ │ ├── SDL_sensor_c.h │ │ │ ├── SDL_syssensor.h │ │ │ ├── android │ │ │ │ ├── SDL_androidsensor.c │ │ │ │ └── SDL_androidsensor.h │ │ │ ├── coremotion │ │ │ │ ├── SDL_coremotionsensor.h │ │ │ │ └── SDL_coremotionsensor.m │ │ │ └── dummy │ │ │ │ ├── SDL_dummysensor.c │ │ │ │ └── SDL_dummysensor.h │ │ │ ├── stdlib │ │ │ ├── SDL_getenv.c │ │ │ ├── SDL_iconv.c │ │ │ ├── SDL_malloc.c │ │ │ ├── SDL_qsort.c │ │ │ ├── SDL_stdlib.c │ │ │ └── SDL_string.c │ │ │ ├── test │ │ │ ├── SDL_test_assert.c │ │ │ ├── SDL_test_common.c │ │ │ ├── SDL_test_compare.c │ │ │ ├── SDL_test_crc32.c │ │ │ ├── SDL_test_font.c │ │ │ ├── SDL_test_fuzzer.c │ │ │ ├── SDL_test_harness.c │ │ │ ├── SDL_test_imageBlit.c │ │ │ ├── SDL_test_imageBlitBlend.c │ │ │ ├── SDL_test_imageFace.c │ │ │ ├── SDL_test_imagePrimitives.c │ │ │ ├── SDL_test_imagePrimitivesBlend.c │ │ │ ├── SDL_test_log.c │ │ │ ├── SDL_test_md5.c │ │ │ ├── SDL_test_memory.c │ │ │ └── SDL_test_random.c │ │ │ ├── thread │ │ │ ├── SDL_systhread.h │ │ │ ├── SDL_thread.c │ │ │ ├── SDL_thread_c.h │ │ │ ├── generic │ │ │ │ ├── SDL_syscond.c │ │ │ │ ├── SDL_sysmutex.c │ │ │ │ ├── SDL_sysmutex_c.h │ │ │ │ ├── SDL_syssem.c │ │ │ │ ├── SDL_systhread.c │ │ │ │ ├── SDL_systhread_c.h │ │ │ │ └── SDL_systls.c │ │ │ ├── psp │ │ │ │ ├── SDL_syscond.c │ │ │ │ ├── SDL_sysmutex.c │ │ │ │ ├── SDL_sysmutex_c.h │ │ │ │ ├── SDL_syssem.c │ │ │ │ ├── SDL_systhread.c │ │ │ │ └── SDL_systhread_c.h │ │ │ ├── pthread │ │ │ │ ├── SDL_syscond.c │ │ │ │ ├── SDL_sysmutex.c │ │ │ │ ├── SDL_sysmutex_c.h │ │ │ │ ├── SDL_syssem.c │ │ │ │ ├── SDL_systhread.c │ │ │ │ ├── SDL_systhread_c.h │ │ │ │ └── SDL_systls.c │ │ │ ├── stdcpp │ │ │ │ ├── SDL_syscond.cpp │ │ │ │ ├── SDL_sysmutex.cpp │ │ │ │ ├── SDL_sysmutex_c.h │ │ │ │ ├── SDL_systhread.cpp │ │ │ │ └── SDL_systhread_c.h │ │ │ └── windows │ │ │ │ ├── SDL_sysmutex.c │ │ │ │ ├── SDL_syssem.c │ │ │ │ ├── SDL_systhread.c │ │ │ │ ├── SDL_systhread_c.h │ │ │ │ └── SDL_systls.c │ │ │ ├── timer │ │ │ ├── SDL_timer.c │ │ │ ├── SDL_timer_c.h │ │ │ ├── dummy │ │ │ │ └── SDL_systimer.c │ │ │ ├── haiku │ │ │ │ └── SDL_systimer.c │ │ │ ├── psp │ │ │ │ └── SDL_systimer.c │ │ │ ├── unix │ │ │ │ └── SDL_systimer.c │ │ │ └── windows │ │ │ │ └── SDL_systimer.c │ │ │ └── video │ │ │ ├── SDL_RLEaccel.c │ │ │ ├── SDL_RLEaccel_c.h │ │ │ ├── SDL_blit.c │ │ │ ├── SDL_blit.h │ │ │ ├── SDL_blit_0.c │ │ │ ├── SDL_blit_1.c │ │ │ ├── SDL_blit_A.c │ │ │ ├── SDL_blit_N.c │ │ │ ├── SDL_blit_auto.c │ │ │ ├── SDL_blit_auto.h │ │ │ ├── SDL_blit_copy.c │ │ │ ├── SDL_blit_copy.h │ │ │ ├── SDL_blit_slow.c │ │ │ ├── SDL_blit_slow.h │ │ │ ├── SDL_bmp.c │ │ │ ├── SDL_clipboard.c │ │ │ ├── SDL_egl.c │ │ │ ├── SDL_egl_c.h │ │ │ ├── SDL_fillrect.c │ │ │ ├── SDL_pixels.c │ │ │ ├── SDL_pixels_c.h │ │ │ ├── SDL_rect.c │ │ │ ├── SDL_rect_c.h │ │ │ ├── SDL_shape.c │ │ │ ├── SDL_shape_internals.h │ │ │ ├── SDL_stretch.c │ │ │ ├── SDL_surface.c │ │ │ ├── SDL_sysvideo.h │ │ │ ├── SDL_video.c │ │ │ ├── SDL_vulkan_internal.h │ │ │ ├── SDL_vulkan_utils.c │ │ │ ├── SDL_yuv.c │ │ │ ├── SDL_yuv_c.h │ │ │ ├── android │ │ │ ├── SDL_androidclipboard.c │ │ │ ├── SDL_androidclipboard.h │ │ │ ├── SDL_androidevents.c │ │ │ ├── SDL_androidevents.h │ │ │ ├── SDL_androidgl.c │ │ │ ├── SDL_androidgl.h │ │ │ ├── SDL_androidkeyboard.c │ │ │ ├── SDL_androidkeyboard.h │ │ │ ├── SDL_androidmessagebox.c │ │ │ ├── SDL_androidmessagebox.h │ │ │ ├── SDL_androidmouse.c │ │ │ ├── SDL_androidmouse.h │ │ │ ├── SDL_androidtouch.c │ │ │ ├── SDL_androidtouch.h │ │ │ ├── SDL_androidvideo.c │ │ │ ├── SDL_androidvideo.h │ │ │ ├── SDL_androidvulkan.c │ │ │ ├── SDL_androidvulkan.h │ │ │ ├── SDL_androidwindow.c │ │ │ └── SDL_androidwindow.h │ │ │ ├── cocoa │ │ │ ├── SDL_cocoaclipboard.h │ │ │ ├── SDL_cocoaclipboard.m │ │ │ ├── SDL_cocoaevents.h │ │ │ ├── SDL_cocoaevents.m │ │ │ ├── SDL_cocoakeyboard.h │ │ │ ├── SDL_cocoakeyboard.m │ │ │ ├── SDL_cocoamessagebox.h │ │ │ ├── SDL_cocoamessagebox.m │ │ │ ├── SDL_cocoametalview.h │ │ │ ├── SDL_cocoametalview.m │ │ │ ├── SDL_cocoamodes.h │ │ │ ├── SDL_cocoamodes.m │ │ │ ├── SDL_cocoamouse.h │ │ │ ├── SDL_cocoamouse.m │ │ │ ├── SDL_cocoamousetap.h │ │ │ ├── SDL_cocoamousetap.m │ │ │ ├── SDL_cocoaopengl.h │ │ │ ├── SDL_cocoaopengl.m │ │ │ ├── SDL_cocoaopengles.h │ │ │ ├── SDL_cocoaopengles.m │ │ │ ├── SDL_cocoashape.h │ │ │ ├── SDL_cocoashape.m │ │ │ ├── SDL_cocoavideo.h │ │ │ ├── SDL_cocoavideo.m │ │ │ ├── SDL_cocoavulkan.h │ │ │ ├── SDL_cocoavulkan.m │ │ │ ├── SDL_cocoawindow.h │ │ │ └── SDL_cocoawindow.m │ │ │ ├── directfb │ │ │ ├── SDL_DirectFB_WM.c │ │ │ ├── SDL_DirectFB_WM.h │ │ │ ├── SDL_DirectFB_dyn.c │ │ │ ├── SDL_DirectFB_dyn.h │ │ │ ├── SDL_DirectFB_events.c │ │ │ ├── SDL_DirectFB_events.h │ │ │ ├── SDL_DirectFB_modes.c │ │ │ ├── SDL_DirectFB_modes.h │ │ │ ├── SDL_DirectFB_mouse.c │ │ │ ├── SDL_DirectFB_mouse.h │ │ │ ├── SDL_DirectFB_opengl.c │ │ │ ├── SDL_DirectFB_opengl.h │ │ │ ├── SDL_DirectFB_render.c │ │ │ ├── SDL_DirectFB_render.h │ │ │ ├── SDL_DirectFB_shape.c │ │ │ ├── SDL_DirectFB_shape.h │ │ │ ├── SDL_DirectFB_video.c │ │ │ ├── SDL_DirectFB_video.h │ │ │ ├── SDL_DirectFB_window.c │ │ │ └── SDL_DirectFB_window.h │ │ │ ├── dummy │ │ │ ├── SDL_nullevents.c │ │ │ ├── SDL_nullevents_c.h │ │ │ ├── SDL_nullframebuffer.c │ │ │ ├── SDL_nullframebuffer_c.h │ │ │ ├── SDL_nullvideo.c │ │ │ └── SDL_nullvideo.h │ │ │ ├── emscripten │ │ │ ├── SDL_emscriptenevents.c │ │ │ ├── SDL_emscriptenevents.h │ │ │ ├── SDL_emscriptenframebuffer.c │ │ │ ├── SDL_emscriptenframebuffer.h │ │ │ ├── SDL_emscriptenmouse.c │ │ │ ├── SDL_emscriptenmouse.h │ │ │ ├── SDL_emscriptenopengles.c │ │ │ ├── SDL_emscriptenopengles.h │ │ │ ├── SDL_emscriptenvideo.c │ │ │ └── SDL_emscriptenvideo.h │ │ │ ├── haiku │ │ │ ├── SDL_BWin.h │ │ │ ├── SDL_bclipboard.cc │ │ │ ├── SDL_bclipboard.h │ │ │ ├── SDL_bevents.cc │ │ │ ├── SDL_bevents.h │ │ │ ├── SDL_bframebuffer.cc │ │ │ ├── SDL_bframebuffer.h │ │ │ ├── SDL_bkeyboard.cc │ │ │ ├── SDL_bkeyboard.h │ │ │ ├── SDL_bmodes.cc │ │ │ ├── SDL_bmodes.h │ │ │ ├── SDL_bopengl.cc │ │ │ ├── SDL_bopengl.h │ │ │ ├── SDL_bvideo.cc │ │ │ ├── SDL_bvideo.h │ │ │ ├── SDL_bwindow.cc │ │ │ └── SDL_bwindow.h │ │ │ ├── khronos │ │ │ ├── EGL │ │ │ │ ├── egl.h │ │ │ │ ├── eglext.h │ │ │ │ └── eglplatform.h │ │ │ ├── GLES2 │ │ │ │ ├── gl2.h │ │ │ │ ├── gl2ext.h │ │ │ │ └── gl2platform.h │ │ │ ├── KHR │ │ │ │ └── khrplatform.h │ │ │ └── vulkan │ │ │ │ ├── vk_icd.h │ │ │ │ ├── vk_layer.h │ │ │ │ ├── vk_platform.h │ │ │ │ ├── vk_sdk_platform.h │ │ │ │ ├── vulkan.h │ │ │ │ ├── vulkan.hpp │ │ │ │ ├── vulkan_android.h │ │ │ │ ├── vulkan_core.h │ │ │ │ ├── vulkan_fuchsia.h │ │ │ │ ├── vulkan_ios.h │ │ │ │ ├── vulkan_macos.h │ │ │ │ ├── vulkan_mir.h │ │ │ │ ├── vulkan_vi.h │ │ │ │ ├── vulkan_wayland.h │ │ │ │ ├── vulkan_win32.h │ │ │ │ ├── vulkan_xcb.h │ │ │ │ ├── vulkan_xlib.h │ │ │ │ └── vulkan_xlib_xrandr.h │ │ │ ├── kmsdrm │ │ │ ├── SDL_kmsdrmdyn.c │ │ │ ├── SDL_kmsdrmdyn.h │ │ │ ├── SDL_kmsdrmevents.c │ │ │ ├── SDL_kmsdrmevents.h │ │ │ ├── SDL_kmsdrmmouse.c │ │ │ ├── SDL_kmsdrmmouse.h │ │ │ ├── SDL_kmsdrmopengles.c │ │ │ ├── SDL_kmsdrmopengles.h │ │ │ ├── SDL_kmsdrmsym.h │ │ │ ├── SDL_kmsdrmvideo.c │ │ │ └── SDL_kmsdrmvideo.h │ │ │ ├── nacl │ │ │ ├── SDL_naclevents.c │ │ │ ├── SDL_naclevents_c.h │ │ │ ├── SDL_naclglue.c │ │ │ ├── SDL_naclopengles.c │ │ │ ├── SDL_naclopengles.h │ │ │ ├── SDL_naclvideo.c │ │ │ ├── SDL_naclvideo.h │ │ │ ├── SDL_naclwindow.c │ │ │ └── SDL_naclwindow.h │ │ │ ├── offscreen │ │ │ ├── SDL_offscreenevents.c │ │ │ ├── SDL_offscreenevents_c.h │ │ │ ├── SDL_offscreenframebuffer.c │ │ │ ├── SDL_offscreenframebuffer_c.h │ │ │ ├── SDL_offscreenopengl.c │ │ │ ├── SDL_offscreenopengl.h │ │ │ ├── SDL_offscreenvideo.c │ │ │ ├── SDL_offscreenvideo.h │ │ │ ├── SDL_offscreenwindow.c │ │ │ └── SDL_offscreenwindow.h │ │ │ ├── pandora │ │ │ ├── SDL_pandora.c │ │ │ ├── SDL_pandora.h │ │ │ ├── SDL_pandora_events.c │ │ │ └── SDL_pandora_events.h │ │ │ ├── psp │ │ │ ├── SDL_pspevents.c │ │ │ ├── SDL_pspevents_c.h │ │ │ ├── SDL_pspgl.c │ │ │ ├── SDL_pspgl_c.h │ │ │ ├── SDL_pspmouse.c │ │ │ ├── SDL_pspmouse_c.h │ │ │ ├── SDL_pspvideo.c │ │ │ └── SDL_pspvideo.h │ │ │ ├── qnx │ │ │ ├── gl.c │ │ │ ├── keyboard.c │ │ │ ├── sdl_qnx.h │ │ │ └── video.c │ │ │ ├── raspberry │ │ │ ├── SDL_rpievents.c │ │ │ ├── SDL_rpievents_c.h │ │ │ ├── SDL_rpimouse.c │ │ │ ├── SDL_rpimouse.h │ │ │ ├── SDL_rpiopengles.c │ │ │ ├── SDL_rpiopengles.h │ │ │ ├── SDL_rpivideo.c │ │ │ └── SDL_rpivideo.h │ │ │ ├── sdlgenblit.pl │ │ │ ├── uikit │ │ │ ├── SDL_uikitappdelegate.h │ │ │ ├── SDL_uikitappdelegate.m │ │ │ ├── SDL_uikitclipboard.h │ │ │ ├── SDL_uikitclipboard.m │ │ │ ├── SDL_uikitevents.h │ │ │ ├── SDL_uikitevents.m │ │ │ ├── SDL_uikitmessagebox.h │ │ │ ├── SDL_uikitmessagebox.m │ │ │ ├── SDL_uikitmetalview.h │ │ │ ├── SDL_uikitmetalview.m │ │ │ ├── SDL_uikitmodes.h │ │ │ ├── SDL_uikitmodes.m │ │ │ ├── SDL_uikitopengles.h │ │ │ ├── SDL_uikitopengles.m │ │ │ ├── SDL_uikitopenglview.h │ │ │ ├── SDL_uikitopenglview.m │ │ │ ├── SDL_uikitvideo.h │ │ │ ├── SDL_uikitvideo.m │ │ │ ├── SDL_uikitview.h │ │ │ ├── SDL_uikitview.m │ │ │ ├── SDL_uikitviewcontroller.h │ │ │ ├── SDL_uikitviewcontroller.m │ │ │ ├── SDL_uikitvulkan.h │ │ │ ├── SDL_uikitvulkan.m │ │ │ ├── SDL_uikitwindow.h │ │ │ ├── SDL_uikitwindow.m │ │ │ └── keyinfotable.h │ │ │ ├── vivante │ │ │ ├── SDL_vivanteopengles.c │ │ │ ├── SDL_vivanteopengles.h │ │ │ ├── SDL_vivanteplatform.c │ │ │ ├── SDL_vivanteplatform.h │ │ │ ├── SDL_vivantevideo.c │ │ │ ├── SDL_vivantevideo.h │ │ │ ├── SDL_vivantevulkan.c │ │ │ └── SDL_vivantevulkan.h │ │ │ ├── wayland │ │ │ ├── SDL_waylandclipboard.c │ │ │ ├── SDL_waylandclipboard.h │ │ │ ├── SDL_waylanddatamanager.c │ │ │ ├── SDL_waylanddatamanager.h │ │ │ ├── SDL_waylanddyn.c │ │ │ ├── SDL_waylanddyn.h │ │ │ ├── SDL_waylandevents.c │ │ │ ├── SDL_waylandevents_c.h │ │ │ ├── SDL_waylandmouse.c │ │ │ ├── SDL_waylandmouse.h │ │ │ ├── SDL_waylandopengles.c │ │ │ ├── SDL_waylandopengles.h │ │ │ ├── SDL_waylandsym.h │ │ │ ├── SDL_waylandtouch.c │ │ │ ├── SDL_waylandtouch.h │ │ │ ├── SDL_waylandvideo.c │ │ │ ├── SDL_waylandvideo.h │ │ │ ├── SDL_waylandvulkan.c │ │ │ ├── SDL_waylandvulkan.h │ │ │ ├── SDL_waylandwindow.c │ │ │ └── SDL_waylandwindow.h │ │ │ ├── windows │ │ │ ├── SDL_msctf.h │ │ │ ├── SDL_vkeys.h │ │ │ ├── SDL_windowsclipboard.c │ │ │ ├── SDL_windowsclipboard.h │ │ │ ├── SDL_windowsevents.c │ │ │ ├── SDL_windowsevents.h │ │ │ ├── SDL_windowsframebuffer.c │ │ │ ├── SDL_windowsframebuffer.h │ │ │ ├── SDL_windowskeyboard.c │ │ │ ├── SDL_windowskeyboard.h │ │ │ ├── SDL_windowsmessagebox.c │ │ │ ├── SDL_windowsmessagebox.h │ │ │ ├── SDL_windowsmodes.c │ │ │ ├── SDL_windowsmodes.h │ │ │ ├── SDL_windowsmouse.c │ │ │ ├── SDL_windowsmouse.h │ │ │ ├── SDL_windowsopengl.c │ │ │ ├── SDL_windowsopengl.h │ │ │ ├── SDL_windowsopengles.c │ │ │ ├── SDL_windowsopengles.h │ │ │ ├── SDL_windowsshape.c │ │ │ ├── SDL_windowsshape.h │ │ │ ├── SDL_windowstaskdialog.h │ │ │ ├── SDL_windowsvideo.c │ │ │ ├── SDL_windowsvideo.h │ │ │ ├── SDL_windowsvulkan.c │ │ │ ├── SDL_windowsvulkan.h │ │ │ ├── SDL_windowswindow.c │ │ │ ├── SDL_windowswindow.h │ │ │ └── wmmsg.h │ │ │ ├── winrt │ │ │ ├── SDL_winrtevents.cpp │ │ │ ├── SDL_winrtevents_c.h │ │ │ ├── SDL_winrtgamebar.cpp │ │ │ ├── SDL_winrtgamebar_cpp.h │ │ │ ├── SDL_winrtkeyboard.cpp │ │ │ ├── SDL_winrtmessagebox.cpp │ │ │ ├── SDL_winrtmessagebox.h │ │ │ ├── SDL_winrtmouse.cpp │ │ │ ├── SDL_winrtmouse_c.h │ │ │ ├── SDL_winrtopengles.cpp │ │ │ ├── SDL_winrtopengles.h │ │ │ ├── SDL_winrtpointerinput.cpp │ │ │ ├── SDL_winrtvideo.cpp │ │ │ └── SDL_winrtvideo_cpp.h │ │ │ ├── x11 │ │ │ ├── SDL_x11clipboard.c │ │ │ ├── SDL_x11clipboard.h │ │ │ ├── SDL_x11dyn.c │ │ │ ├── SDL_x11dyn.h │ │ │ ├── SDL_x11events.c │ │ │ ├── SDL_x11events.h │ │ │ ├── SDL_x11framebuffer.c │ │ │ ├── SDL_x11framebuffer.h │ │ │ ├── SDL_x11keyboard.c │ │ │ ├── SDL_x11keyboard.h │ │ │ ├── SDL_x11messagebox.c │ │ │ ├── SDL_x11messagebox.h │ │ │ ├── SDL_x11modes.c │ │ │ ├── SDL_x11modes.h │ │ │ ├── SDL_x11mouse.c │ │ │ ├── SDL_x11mouse.h │ │ │ ├── SDL_x11opengl.c │ │ │ ├── SDL_x11opengl.h │ │ │ ├── SDL_x11opengles.c │ │ │ ├── SDL_x11opengles.h │ │ │ ├── SDL_x11shape.c │ │ │ ├── SDL_x11shape.h │ │ │ ├── SDL_x11sym.h │ │ │ ├── SDL_x11touch.c │ │ │ ├── SDL_x11touch.h │ │ │ ├── SDL_x11video.c │ │ │ ├── SDL_x11video.h │ │ │ ├── SDL_x11vulkan.c │ │ │ ├── SDL_x11vulkan.h │ │ │ ├── SDL_x11window.c │ │ │ ├── SDL_x11window.h │ │ │ ├── SDL_x11xinput2.c │ │ │ ├── SDL_x11xinput2.h │ │ │ ├── edid-parse.c │ │ │ ├── edid.h │ │ │ ├── imKStoUCS.c │ │ │ └── imKStoUCS.h │ │ │ └── yuv2rgb │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── yuv_rgb.c │ │ │ ├── yuv_rgb.h │ │ │ ├── yuv_rgb_sse_func.h │ │ │ └── yuv_rgb_std_func.h │ │ ├── ios │ │ ├── Info.plist │ │ ├── Makefile │ │ ├── icon_assets.json │ │ ├── launch.storyboard │ │ └── telemetry.mm │ │ ├── linux │ │ ├── Makefile │ │ ├── incbin.py │ │ ├── include │ │ │ ├── SDL.h │ │ │ └── SDL_config.h │ │ ├── platform_files.cpp │ │ ├── platform_images.cpp │ │ └── platform_language.cpp │ │ ├── macos │ │ ├── Info.plist │ │ ├── Makefile │ │ └── platform_files.mm │ │ ├── shared │ │ ├── actions.cpp │ │ ├── actions.h │ │ ├── apple │ │ │ ├── helpers.mak │ │ │ ├── platform_images.mm │ │ │ ├── platform_language.mm │ │ │ └── targets.mak │ │ ├── clipboard.cpp │ │ ├── clipboard_helper.cpp │ │ ├── clipboard_helper.h │ │ ├── collect_registers.cpp │ │ ├── collect_registers_x86_64.s │ │ ├── console.cpp │ │ ├── crc32.cpp │ │ ├── display.cpp │ │ ├── display.h │ │ ├── dummy │ │ │ ├── haptics_enabled.cpp │ │ │ ├── journal.cpp │ │ │ ├── keyboard_callback.cpp │ │ │ ├── language.cpp │ │ │ ├── telemetry_init.cpp │ │ │ └── window_callback.cpp │ │ ├── events.cpp │ │ ├── events.h │ │ ├── events_platform.cpp │ │ ├── filesystem.cpp │ │ ├── filesystem.h │ │ ├── framebuffer.cpp │ │ ├── framebuffer.h │ │ ├── haptics.cpp │ │ ├── haptics.h │ │ ├── journal.cpp │ │ ├── journal.h │ │ ├── journal │ │ │ └── queue_journal.h │ │ ├── keyboard.cpp │ │ ├── keyboard.h │ │ ├── layout.cpp │ │ ├── layout.h │ │ ├── layout.json │ │ ├── main.cpp │ │ ├── platform.h │ │ ├── platform_info.cpp │ │ ├── random.cpp │ │ ├── random.h │ │ ├── state_file.cpp │ │ ├── state_file.h │ │ ├── telemetry.h │ │ ├── timing.cpp │ │ ├── window.cpp │ │ └── window.h │ │ ├── web │ │ ├── Makefile │ │ ├── calculator.js │ │ ├── clipboard_helper.cpp │ │ ├── exports.cpp │ │ ├── exports.h │ │ ├── include │ │ │ ├── SDL.h │ │ │ └── SDL_config.h │ │ ├── journal.cpp │ │ ├── keyboard_callback.cpp │ │ ├── layout.py │ │ ├── preamble_env.js │ │ ├── simulator.css │ │ ├── simulator.html.inc │ │ └── window_callback.cpp │ │ └── windows │ │ ├── Makefile │ │ ├── platform_files.cpp │ │ ├── platform_images.cpp │ │ ├── platform_language.cpp │ │ ├── resgen.py │ │ └── resources.rc └── test │ ├── crc32.cpp │ ├── device │ ├── Makefile │ └── n0110 │ │ ├── Makefile │ │ ├── external_flash_helper.h │ │ ├── external_flash_read.cpp │ │ ├── external_flash_tests.ld │ │ └── external_flash_write.cpp │ ├── events.cpp │ ├── keyboard.cpp │ ├── storage.cpp │ ├── utf8_decoder.cpp │ └── utf8_helper.cpp ├── kandinsky ├── Makefile ├── fonts │ ├── LargeFont.ttf │ ├── SmallFont.ttf │ ├── code_points.h │ └── rasterizer.c ├── include │ ├── kandinsky.h │ └── kandinsky │ │ ├── color.h │ │ ├── context.h │ │ ├── coordinate.h │ │ ├── font.h │ │ ├── framebuffer.h │ │ ├── framebuffer_context.h │ │ ├── ion_context.h │ │ ├── palette.h │ │ ├── point.h │ │ ├── rect.h │ │ └── size.h ├── src │ ├── color.cpp │ ├── context_line.cpp │ ├── context_pixel.cpp │ ├── context_rect.cpp │ ├── context_text.cpp │ ├── font.cpp │ ├── framebuffer.cpp │ ├── framebuffer_context.cpp │ ├── ion_context.cpp │ ├── line.cpp │ ├── point.cpp │ └── rect.cpp └── test │ ├── color.cpp │ ├── font.cpp │ └── rect.cpp ├── liba ├── Makefile ├── Makefile.bridge ├── README.txt ├── include │ ├── alloca.h │ ├── assert.h │ ├── bridge │ │ ├── alloca.h │ │ └── string.h │ ├── ctype.h │ ├── errno.h │ ├── float.h │ ├── limits.h │ ├── math.h │ ├── private │ │ ├── ieee754.h │ │ ├── macros.h │ │ └── memconfig.h │ ├── setjmp.h │ ├── stdarg.h │ ├── stdbool.h │ ├── stddef.h │ ├── stdint.h │ ├── stdio.h │ ├── stdlib.h │ ├── string.h │ ├── strings.h │ └── unistd.h ├── src │ ├── abs.c │ ├── aeabi-rt │ │ ├── README.txt │ │ ├── atexit.c │ │ ├── double.c │ │ ├── float.h │ │ ├── llsl.c │ │ ├── llsr.c │ │ ├── long.c │ │ ├── memclr.c │ │ └── memcpy.c │ ├── armv7m │ │ ├── longjmp.s │ │ └── setjmp.s │ ├── assert.c │ ├── bridge.c │ ├── bzero.c │ ├── calloc.c │ ├── ctype.c │ ├── errno.c │ ├── external │ │ ├── README.txt │ │ ├── openbsd │ │ │ ├── b_exp__D.c │ │ │ ├── b_log__D.c │ │ │ ├── b_tgamma.c │ │ │ ├── e_acos.c │ │ │ ├── e_acosf.c │ │ │ ├── e_acosh.c │ │ │ ├── e_acoshf.c │ │ │ ├── e_asin.c │ │ │ ├── e_asinf.c │ │ │ ├── e_atan2.c │ │ │ ├── e_atan2f.c │ │ │ ├── e_atanh.c │ │ │ ├── e_atanhf.c │ │ │ ├── e_cosh.c │ │ │ ├── e_coshf.c │ │ │ ├── e_exp.c │ │ │ ├── e_expf.c │ │ │ ├── e_fmod.c │ │ │ ├── e_fmodf.c │ │ │ ├── e_hypot.c │ │ │ ├── e_hypotf.c │ │ │ ├── e_lgamma_r.c │ │ │ ├── e_lgammaf_r.c │ │ │ ├── e_log.c │ │ │ ├── e_log10.c │ │ │ ├── e_log10f.c │ │ │ ├── e_log2.c │ │ │ ├── e_logf.c │ │ │ ├── e_pow.c │ │ │ ├── e_powf.c │ │ │ ├── e_rem_pio2.c │ │ │ ├── e_rem_pio2f.c │ │ │ ├── e_scalb.c │ │ │ ├── e_sinh.c │ │ │ ├── e_sinhf.c │ │ │ ├── e_sqrt.c │ │ │ ├── e_sqrtf.c │ │ │ ├── include │ │ │ │ ├── math.h │ │ │ │ └── sys │ │ │ │ │ ├── cdefs.h │ │ │ │ │ └── types.h │ │ │ ├── k_cos.c │ │ │ ├── k_cosf.c │ │ │ ├── k_rem_pio2.c │ │ │ ├── k_rem_pio2f.c │ │ │ ├── k_sin.c │ │ │ ├── k_sinf.c │ │ │ ├── k_tan.c │ │ │ ├── k_tanf.c │ │ │ ├── math_private.h │ │ │ ├── s_asinh.c │ │ │ ├── s_asinhf.c │ │ │ ├── s_atan.c │ │ │ ├── s_atanf.c │ │ │ ├── s_ceil.c │ │ │ ├── s_ceilf.c │ │ │ ├── s_copysign.c │ │ │ ├── s_copysignf.c │ │ │ ├── s_cos.c │ │ │ ├── s_cosf.c │ │ │ ├── s_erf.c │ │ │ ├── s_erff.c │ │ │ ├── s_expm1.c │ │ │ ├── s_expm1f.c │ │ │ ├── s_fabs.c │ │ │ ├── s_fabsf.c │ │ │ ├── s_floor.c │ │ │ ├── s_floorf.c │ │ │ ├── s_fmax.c │ │ │ ├── s_fmaxf.c │ │ │ ├── s_frexp.c │ │ │ ├── s_frexpf.c │ │ │ ├── s_log1p.c │ │ │ ├── s_log1pf.c │ │ │ ├── s_logb.c │ │ │ ├── s_logbf.c │ │ │ ├── s_modf.c │ │ │ ├── s_modff.c │ │ │ ├── s_nextafter.c │ │ │ ├── s_nextafterf.c │ │ │ ├── s_rint.c │ │ │ ├── s_round.c │ │ │ ├── s_roundf.c │ │ │ ├── s_scalbn.c │ │ │ ├── s_scalbnf.c │ │ │ ├── s_signgam.c │ │ │ ├── s_sin.c │ │ │ ├── s_sinf.c │ │ │ ├── s_tan.c │ │ │ ├── s_tanf.c │ │ │ ├── s_tanh.c │ │ │ ├── s_tanhf.c │ │ │ ├── s_trunc.c │ │ │ ├── s_truncf.c │ │ │ ├── w_lgamma.c │ │ │ └── w_lgammaf.c │ │ ├── softfloat │ │ │ ├── include │ │ │ │ ├── internals.h │ │ │ │ ├── primitiveTypes.h │ │ │ │ ├── primitives.h │ │ │ │ ├── softfloat.h │ │ │ │ └── softfloat_types.h │ │ │ ├── port │ │ │ │ ├── platform.h │ │ │ │ └── softfloat.h │ │ │ └── src │ │ │ │ ├── 8086 │ │ │ │ ├── s_commonNaNToF32UI.c │ │ │ │ ├── s_commonNaNToF64UI.c │ │ │ │ ├── s_f32UIToCommonNaN.c │ │ │ │ ├── s_f64UIToCommonNaN.c │ │ │ │ ├── s_propagateNaNF64UI.c │ │ │ │ ├── softfloat_raiseFlags.c │ │ │ │ └── specialize.h │ │ │ │ ├── f32_to_f64.c │ │ │ │ ├── f32_to_i64_r_minMag.c │ │ │ │ ├── f64_add.c │ │ │ │ ├── f64_div.c │ │ │ │ ├── f64_eq.c │ │ │ │ ├── f64_le.c │ │ │ │ ├── f64_lt.c │ │ │ │ ├── f64_mul.c │ │ │ │ ├── f64_sub.c │ │ │ │ ├── f64_to_f32.c │ │ │ │ ├── f64_to_i32_r_minMag.c │ │ │ │ ├── f64_to_i64_r_minMag.c │ │ │ │ ├── i32_to_f64.c │ │ │ │ ├── i64_to_f32.c │ │ │ │ ├── i64_to_f64.c │ │ │ │ ├── s_addMagsF64.c │ │ │ │ ├── s_approxRecip32_1.c │ │ │ │ ├── s_approxRecip_1Ks.c │ │ │ │ ├── s_countLeadingZeros32.c │ │ │ │ ├── s_countLeadingZeros64.c │ │ │ │ ├── s_countLeadingZeros8.c │ │ │ │ ├── s_mul64To128M.c │ │ │ │ ├── s_normRoundPackToF64.c │ │ │ │ ├── s_normSubnormalF32Sig.c │ │ │ │ ├── s_normSubnormalF64Sig.c │ │ │ │ ├── s_roundPackToF32.c │ │ │ │ ├── s_roundPackToF64.c │ │ │ │ ├── s_shiftRightJam32.c │ │ │ │ ├── s_shiftRightJam64.c │ │ │ │ ├── s_shortShiftRightJam64.c │ │ │ │ ├── s_subMagsF64.c │ │ │ │ ├── softfloat_state.c │ │ │ │ ├── ui32_to_f64.c │ │ │ │ └── ui64_to_f64.c │ │ └── sqlite │ │ │ ├── mem5.c │ │ │ └── sqliteInt.h │ ├── fpclassify.c │ ├── fpclassifyf.c │ ├── ieee754.c │ ├── malloc.c │ ├── memcmp.c │ ├── memcpy.c │ ├── memmove.c │ ├── memset.c │ ├── nearbyint.c │ ├── nearbyintf.c │ ├── strchr.c │ ├── strcmp.c │ ├── strcpy.c │ ├── strcspn.c │ ├── strlcat.c │ ├── strlcpy.c │ ├── strlen.c │ ├── strncat.c │ ├── strncpy.c │ ├── strnlen.c │ └── strspn.c └── test │ ├── aeabi.c │ ├── double.c │ ├── helpers.h │ ├── ieee754.c │ ├── long.c │ ├── math.c │ ├── setjmp.c │ ├── stddef.c │ ├── stdint.c │ └── strlcpy.c ├── libaxx ├── Makefile ├── README.txt ├── include │ ├── algorithm │ ├── cmath │ ├── complex │ ├── complex.h │ ├── external │ │ └── libcxx │ │ │ ├── complex │ │ │ ├── complex.cpp │ │ │ ├── complex.h │ │ │ └── include │ │ │ ├── __config │ │ │ ├── cmath │ │ │ └── type_traits │ ├── initializer_list │ ├── new │ ├── type_traits │ └── utility └── src │ ├── cxxabi │ ├── atexit.cpp │ └── pure_virtual.cpp │ └── new.cpp ├── poincare ├── Makefile ├── include │ ├── poincare │ │ ├── absolute_value.h │ │ ├── absolute_value_layout.h │ │ ├── addition.h │ │ ├── approximation_helper.h │ │ ├── arc_cosine.h │ │ ├── arc_sine.h │ │ ├── arc_tangent.h │ │ ├── arithmetic.h │ │ ├── array.h │ │ ├── based_integer.h │ │ ├── beta_function.h │ │ ├── binom_cdf.h │ │ ├── binom_pdf.h │ │ ├── binomial_coefficient.h │ │ ├── binomial_coefficient_layout.h │ │ ├── binomial_distribution.h │ │ ├── binomial_distribution_function.h │ │ ├── bracket_layout.h │ │ ├── bracket_pair_layout.h │ │ ├── ceiling.h │ │ ├── ceiling_layout.h │ │ ├── code_point_layout.h │ │ ├── complex.h │ │ ├── complex_argument.h │ │ ├── complex_cartesian.h │ │ ├── condensed_sum_layout.h │ │ ├── confidence_interval.h │ │ ├── conjugate.h │ │ ├── conjugate_layout.h │ │ ├── constant.h │ │ ├── context.h │ │ ├── context_with_parent.h │ │ ├── coordinate_2D.h │ │ ├── cosine.h │ │ ├── decimal.h │ │ ├── derivative.h │ │ ├── determinant.h │ │ ├── division.h │ │ ├── division_quotient.h │ │ ├── division_remainder.h │ │ ├── empty_context.h │ │ ├── empty_expression.h │ │ ├── empty_layout.h │ │ ├── equal.h │ │ ├── erf_inv.h │ │ ├── evaluation.h │ │ ├── exception_checkpoint.h │ │ ├── expression.h │ │ ├── expression_node.h │ │ ├── factor.h │ │ ├── factorial.h │ │ ├── float.h │ │ ├── floor.h │ │ ├── floor_layout.h │ │ ├── frac_part.h │ │ ├── fraction_layout.h │ │ ├── function.h │ │ ├── ghost.h │ │ ├── ghost_node.h │ │ ├── great_common_divisor.h │ │ ├── grid_layout.h │ │ ├── helpers.h │ │ ├── horizontal_layout.h │ │ ├── hyperbolic_arc_cosine.h │ │ ├── hyperbolic_arc_sine.h │ │ ├── hyperbolic_arc_tangent.h │ │ ├── hyperbolic_cosine.h │ │ ├── hyperbolic_sine.h │ │ ├── hyperbolic_tangent.h │ │ ├── hyperbolic_trigonometric_function.h │ │ ├── ieee754.h │ │ ├── imaginary_part.h │ │ ├── infinity.h │ │ ├── init.h │ │ ├── integer.h │ │ ├── integral.h │ │ ├── integral_layout.h │ │ ├── inv_binom.h │ │ ├── inv_norm.h │ │ ├── layout.h │ │ ├── layout_cursor.h │ │ ├── layout_helper.h │ │ ├── layout_node.h │ │ ├── least_common_multiple.h │ │ ├── left_parenthesis_layout.h │ │ ├── left_square_bracket_layout.h │ │ ├── logarithm.h │ │ ├── matrix.h │ │ ├── matrix_complex.h │ │ ├── matrix_dimension.h │ │ ├── matrix_echelon_form.h │ │ ├── matrix_identity.h │ │ ├── matrix_inverse.h │ │ ├── matrix_layout.h │ │ ├── matrix_reduced_row_echelon_form.h │ │ ├── matrix_row_echelon_form.h │ │ ├── matrix_trace.h │ │ ├── matrix_transpose.h │ │ ├── multiplication.h │ │ ├── n_ary_expression.h │ │ ├── n_ary_infix_expression.h │ │ ├── naperian_logarithm.h │ │ ├── norm_cdf.h │ │ ├── norm_cdf2.h │ │ ├── norm_pdf.h │ │ ├── normal_distribution.h │ │ ├── normal_distribution_function.h │ │ ├── nth_root.h │ │ ├── nth_root_layout.h │ │ ├── number.h │ │ ├── opposite.h │ │ ├── parametered_expression.h │ │ ├── parenthesis.h │ │ ├── parenthesis_layout.h │ │ ├── permute_coefficient.h │ │ ├── power.h │ │ ├── prediction_interval.h │ │ ├── preferences.h │ │ ├── print_float.h │ │ ├── print_int.h │ │ ├── product.h │ │ ├── product_layout.h │ │ ├── randint.h │ │ ├── random.h │ │ ├── rational.h │ │ ├── real_part.h │ │ ├── regularized_incomplete_beta_function.h │ │ ├── right_parenthesis_layout.h │ │ ├── right_square_bracket_layout.h │ │ ├── rightwards_arrow_expression.h │ │ ├── round.h │ │ ├── sequence.h │ │ ├── sequence_layout.h │ │ ├── serialization_helper.h │ │ ├── sign_function.h │ │ ├── sine.h │ │ ├── solver.h │ │ ├── square_bracket_layout.h │ │ ├── square_root.h │ │ ├── store.h │ │ ├── subtraction.h │ │ ├── sum.h │ │ ├── sum_and_product.h │ │ ├── sum_layout.h │ │ ├── symbol.h │ │ ├── symbol_abstract.h │ │ ├── tangent.h │ │ ├── tree_handle.h │ │ ├── tree_node.h │ │ ├── tree_pool.h │ │ ├── trigonometry.h │ │ ├── trigonometry_cheat_table.h │ │ ├── undefined.h │ │ ├── unit.h │ │ ├── unit_convert.h │ │ ├── unreal.h │ │ ├── variable_context.h │ │ ├── vector_cross.h │ │ ├── vector_dot.h │ │ ├── vector_norm.h │ │ ├── vector_norm_layout.h │ │ ├── vertical_offset_layout.h │ │ └── zoom.h │ ├── poincare_layouts.h │ └── poincare_nodes.h ├── src │ ├── absolute_value.cpp │ ├── addition.cpp │ ├── approximation_helper.cpp │ ├── arc_cosine.cpp │ ├── arc_sine.cpp │ ├── arc_tangent.cpp │ ├── arithmetic.cpp │ ├── based_integer.cpp │ ├── beta_function.cpp │ ├── binom_cdf.cpp │ ├── binom_pdf.cpp │ ├── binomial_coefficient.cpp │ ├── binomial_coefficient_layout.cpp │ ├── binomial_distribution.cpp │ ├── binomial_distribution_function.cpp │ ├── bracket_layout.cpp │ ├── bracket_pair_layout.cpp │ ├── ceiling.cpp │ ├── code_point_layout.cpp │ ├── complex.cpp │ ├── complex_argument.cpp │ ├── complex_cartesian.cpp │ ├── condensed_sum_layout.cpp │ ├── confidence_interval.cpp │ ├── conjugate.cpp │ ├── conjugate_layout.cpp │ ├── constant.cpp │ ├── cosine.cpp │ ├── decimal.cpp │ ├── derivative.cpp │ ├── determinant.cpp │ ├── division.cpp │ ├── division_quotient.cpp │ ├── division_remainder.cpp │ ├── empty_expression.cpp │ ├── empty_layout.cpp │ ├── equal.cpp │ ├── erf_inv.cpp │ ├── evaluation.cpp │ ├── exception_checkpoint.cpp │ ├── expression.cpp │ ├── expression_node.cpp │ ├── factor.cpp │ ├── factorial.cpp │ ├── float.cpp │ ├── floor.cpp │ ├── frac_part.cpp │ ├── fraction_layout.cpp │ ├── function.cpp │ ├── great_common_divisor.cpp │ ├── grid_layout.cpp │ ├── helpers.cpp │ ├── horizontal_layout.cpp │ ├── hyperbolic_arc_cosine.cpp │ ├── hyperbolic_arc_sine.cpp │ ├── hyperbolic_arc_tangent.cpp │ ├── hyperbolic_cosine.cpp │ ├── hyperbolic_sine.cpp │ ├── hyperbolic_tangent.cpp │ ├── hyperbolic_trigonometric_function.cpp │ ├── imaginary_part.cpp │ ├── infinity.cpp │ ├── init.cpp │ ├── integer.cpp │ ├── integral.cpp │ ├── integral_layout.cpp │ ├── inv_binom.cpp │ ├── inv_norm.cpp │ ├── layout.cpp │ ├── layout_cursor.cpp │ ├── layout_helper.cpp │ ├── layout_node.cpp │ ├── least_common_multiple.cpp │ ├── left_parenthesis_layout.cpp │ ├── left_square_bracket_layout.cpp │ ├── logarithm.cpp │ ├── matrix.cpp │ ├── matrix_complex.cpp │ ├── matrix_dimension.cpp │ ├── matrix_echelon_form.cpp │ ├── matrix_identity.cpp │ ├── matrix_inverse.cpp │ ├── matrix_layout.cpp │ ├── matrix_reduced_row_echelon_form.cpp │ ├── matrix_row_echelon_form.cpp │ ├── matrix_trace.cpp │ ├── matrix_transpose.cpp │ ├── multiplication.cpp │ ├── n_ary_expression.cpp │ ├── n_ary_infix_expression.cpp │ ├── naperian_logarithm.cpp │ ├── norm_cdf.cpp │ ├── norm_cdf2.cpp │ ├── norm_pdf.cpp │ ├── normal_distribution.cpp │ ├── normal_distribution_function.cpp │ ├── nth_root.cpp │ ├── nth_root_layout.cpp │ ├── number.cpp │ ├── opposite.cpp │ ├── parametered_expression.cpp │ ├── parenthesis.cpp │ ├── parenthesis_layout.cpp │ ├── parsing │ │ ├── parser.cpp │ │ ├── parser.h │ │ ├── token.h │ │ ├── tokenizer.cpp │ │ └── tokenizer.h │ ├── permute_coefficient.cpp │ ├── power.cpp │ ├── prediction_interval.cpp │ ├── preferences.cpp │ ├── print_float.cpp │ ├── print_int.cpp │ ├── product.cpp │ ├── product_layout.cpp │ ├── randint.cpp │ ├── random.cpp │ ├── rational.cpp │ ├── real_part.cpp │ ├── regularized_incomplete_beta_function.cpp │ ├── right_parenthesis_layout.cpp │ ├── right_square_bracket_layout.cpp │ ├── rightwards_arrow_expression.cpp │ ├── round.cpp │ ├── sequence.cpp │ ├── sequence_layout.cpp │ ├── serialization_helper.cpp │ ├── sign_function.cpp │ ├── sine.cpp │ ├── solver.cpp │ ├── square_root.cpp │ ├── store.cpp │ ├── subtraction.cpp │ ├── sum.cpp │ ├── sum_and_product.cpp │ ├── sum_layout.cpp │ ├── symbol.cpp │ ├── symbol_abstract.cpp │ ├── tangent.cpp │ ├── tree_handle.cpp │ ├── tree_node.cpp │ ├── tree_pool.cpp │ ├── trigonometry.cpp │ ├── trigonometry_cheat_table.cpp │ ├── undefined.cpp │ ├── unit.cpp │ ├── unit_convert.cpp │ ├── unreal.cpp │ ├── variable_context.cpp │ ├── vector_cross.cpp │ ├── vector_dot.cpp │ ├── vector_norm.cpp │ ├── vertical_offset_layout.cpp │ └── zoom.cpp └── test │ ├── approximation.cpp │ ├── arithmetic.cpp │ ├── context.cpp │ ├── derivative.cpp │ ├── erf_inv.cpp │ ├── expression.cpp │ ├── expression_order.cpp │ ├── expression_properties.cpp │ ├── expression_serialization.cpp │ ├── expression_to_layout.cpp │ ├── function_solver.cpp │ ├── helper.cpp │ ├── helper.h │ ├── helpers.cpp │ ├── integer.cpp │ ├── layout.cpp │ ├── layout_cursor.cpp │ ├── layout_serialization.cpp │ ├── layout_to_expression.cpp │ ├── parsing.cpp │ ├── print_float.cpp │ ├── print_int.cpp │ ├── rational.cpp │ ├── regularized_incomplete_beta_function.cpp │ ├── simplification.cpp │ ├── tree │ ├── blob_node.h │ ├── helpers.cpp │ ├── helpers.h │ ├── pair_node.h │ └── tree_handle.cpp │ └── zoom.cpp ├── python ├── Makefile ├── port │ ├── builtins.c │ ├── genhdr │ │ ├── moduledefs.h │ │ └── qstrdefs.in.h │ ├── helpers.cpp │ ├── helpers.h │ ├── mod │ │ ├── ion │ │ │ ├── modion.cpp │ │ │ ├── modion.h │ │ │ └── modion_table.cpp │ │ ├── kandinsky │ │ │ ├── modkandinsky.cpp │ │ │ ├── modkandinsky.h │ │ │ └── modkandinsky_table.c │ │ ├── matplotlib │ │ │ ├── modmatplotlib.cpp │ │ │ ├── modmatplotlib.h │ │ │ ├── modmatplotlib_table.c │ │ │ └── pyplot │ │ │ │ ├── modpyplot.cpp │ │ │ │ ├── modpyplot.h │ │ │ │ ├── modpyplot_table.c │ │ │ │ ├── plot_controller.cpp │ │ │ │ ├── plot_controller.h │ │ │ │ ├── plot_store.cpp │ │ │ │ ├── plot_store.h │ │ │ │ ├── plot_view.cpp │ │ │ │ └── plot_view.h │ │ ├── time │ │ │ ├── modtime.cpp │ │ │ ├── modtime.h │ │ │ └── modtime_table.c │ │ └── turtle │ │ │ ├── modturtle.cpp │ │ │ ├── modturtle.h │ │ │ ├── modturtle_table.c │ │ │ ├── turtle.cpp │ │ │ └── turtle.h │ ├── mpconfigport.h │ ├── mphalport.c │ ├── mphalport.h │ ├── port.cpp │ ├── port.h │ └── stackctrl.c ├── src │ ├── extmod │ │ ├── misc.h │ │ ├── moduos.c │ │ ├── modurandom.c │ │ ├── vfs.c │ │ ├── vfs.h │ │ ├── vfs_reader.c │ │ ├── vfs_spiffs.c │ │ ├── vfs_spiffs.h │ │ ├── vfs_spiffsx.c │ │ ├── vfs_spiffsx_file.c │ │ └── virtpin.h │ └── py │ │ ├── argcheck.c │ │ ├── asmarm.c │ │ ├── asmarm.h │ │ ├── asmbase.c │ │ ├── asmbase.h │ │ ├── asmthumb.c │ │ ├── asmthumb.h │ │ ├── asmx64.c │ │ ├── asmx64.h │ │ ├── asmx86.c │ │ ├── asmx86.h │ │ ├── asmxtensa.c │ │ ├── asmxtensa.h │ │ ├── bc.c │ │ ├── bc.h │ │ ├── bc0.h │ │ ├── binary.c │ │ ├── binary.h │ │ ├── builtin.h │ │ ├── builtinevex.c │ │ ├── builtinhelp.c │ │ ├── builtinimport.c │ │ ├── compile.c │ │ ├── compile.h │ │ ├── emit.h │ │ ├── emitbc.c │ │ ├── emitcommon.c │ │ ├── emitglue.c │ │ ├── emitglue.h │ │ ├── emitinlinethumb.c │ │ ├── emitinlinextensa.c │ │ ├── emitnarm.c │ │ ├── emitnative.c │ │ ├── emitnthumb.c │ │ ├── emitnx64.c │ │ ├── emitnx86.c │ │ ├── emitnxtensa.c │ │ ├── emitnxtensawin.c │ │ ├── formatfloat.c │ │ ├── formatfloat.h │ │ ├── frozenmod.c │ │ ├── frozenmod.h │ │ ├── gc.c │ │ ├── gc.h │ │ ├── grammar.h │ │ ├── lexer.c │ │ ├── lexer.h │ │ ├── makeqstrdata.py │ │ ├── malloc.c │ │ ├── map.c │ │ ├── misc.h │ │ ├── modarray.c │ │ ├── modbuiltins.c │ │ ├── modcmath.c │ │ ├── modcollections.c │ │ ├── modgc.c │ │ ├── modio.c │ │ ├── modmath.c │ │ ├── modmicropython.c │ │ ├── modstruct.c │ │ ├── modsys.c │ │ ├── modthread.c │ │ ├── moduerrno.c │ │ ├── mpconfig.h │ │ ├── mperrno.h │ │ ├── mphal.h │ │ ├── mpprint.c │ │ ├── mpprint.h │ │ ├── mpstate.c │ │ ├── mpstate.h │ │ ├── mpthread.h │ │ ├── mpz.c │ │ ├── mpz.h │ │ ├── nativeglue.c │ │ ├── nativeglue.h │ │ ├── nlr.c │ │ ├── nlr.h │ │ ├── nlrpowerpc.c │ │ ├── nlrsetjmp.c │ │ ├── nlrthumb.c │ │ ├── nlrx64.c │ │ ├── nlrx86.c │ │ ├── nlrxtensa.c │ │ ├── obj.c │ │ ├── obj.h │ │ ├── objarray.c │ │ ├── objarray.h │ │ ├── objattrtuple.c │ │ ├── objbool.c │ │ ├── objboundmeth.c │ │ ├── objcell.c │ │ ├── objclosure.c │ │ ├── objcomplex.c │ │ ├── objdeque.c │ │ ├── objdict.c │ │ ├── objenumerate.c │ │ ├── objexcept.c │ │ ├── objexcept.h │ │ ├── objfilter.c │ │ ├── objfloat.c │ │ ├── objfun.c │ │ ├── objfun.h │ │ ├── objgenerator.c │ │ ├── objgenerator.h │ │ ├── objgetitemiter.c │ │ ├── objint.c │ │ ├── objint.h │ │ ├── objint_longlong.c │ │ ├── objint_mpz.c │ │ ├── objlist.c │ │ ├── objlist.h │ │ ├── objmap.c │ │ ├── objmodule.c │ │ ├── objmodule.h │ │ ├── objnamedtuple.c │ │ ├── objnamedtuple.h │ │ ├── objnone.c │ │ ├── objobject.c │ │ ├── objpolyiter.c │ │ ├── objproperty.c │ │ ├── objrange.c │ │ ├── objreversed.c │ │ ├── objset.c │ │ ├── objsingleton.c │ │ ├── objslice.c │ │ ├── objstr.c │ │ ├── objstr.h │ │ ├── objstringio.c │ │ ├── objstringio.h │ │ ├── objstrunicode.c │ │ ├── objtuple.c │ │ ├── objtuple.h │ │ ├── objtype.c │ │ ├── objtype.h │ │ ├── objzip.c │ │ ├── opmethods.c │ │ ├── parse.c │ │ ├── parse.h │ │ ├── parsenum.c │ │ ├── parsenum.h │ │ ├── parsenumbase.c │ │ ├── parsenumbase.h │ │ ├── persistentcode.c │ │ ├── persistentcode.h │ │ ├── profile.c │ │ ├── profile.h │ │ ├── pystack.c │ │ ├── pystack.h │ │ ├── qstr.c │ │ ├── qstr.h │ │ ├── qstrdefs.h │ │ ├── reader.c │ │ ├── reader.h │ │ ├── repl.c │ │ ├── repl.h │ │ ├── ringbuf.c │ │ ├── ringbuf.h │ │ ├── runtime.c │ │ ├── runtime.h │ │ ├── runtime0.h │ │ ├── runtime_utils.c │ │ ├── scheduler.c │ │ ├── scope.c │ │ ├── scope.h │ │ ├── sequence.c │ │ ├── showbc.c │ │ ├── smallint.c │ │ ├── smallint.h │ │ ├── stackctrl.c │ │ ├── stackctrl.h │ │ ├── stream.c │ │ ├── stream.h │ │ ├── unicode.c │ │ ├── unicode.h │ │ ├── vm.c │ │ ├── vmentrytable.h │ │ ├── vstr.c │ │ └── warning.c ├── test │ ├── basics.cpp │ ├── execution_environment.cpp │ ├── execution_environment.h │ ├── ion.cpp │ ├── kandinsky.cpp │ ├── math.cpp │ ├── matplotlib.cpp │ ├── time.cpp │ ├── turtle.cpp │ └── urandom.cpp └── upgrade.md ├── quiz ├── Makefile ├── README.txt ├── gdb_script.gdb ├── include │ ├── quiz.h │ └── quiz │ │ └── stopwatch.h └── src │ ├── assertions.cpp │ ├── i18n.cpp │ ├── runner.cpp │ ├── stopwatch.cpp │ ├── symbols.awk │ └── symbols.h └── tests ├── calculation ├── calculation_addition.esc ├── calculation_display_mode.esc ├── calculation_display_mode2.esc ├── calculation_division.esc ├── calculation_exponential.esc ├── calculation_linear_input.esc ├── calculation_logarithm.esc ├── calculation_multiplication.esc ├── calculation_natural_input.esc ├── calculation_natural_input2.esc ├── calculation_natural_input3.esc ├── calculation_natural_input4.esc ├── calculation_polar.esc ├── calculation_power.esc ├── calculation_radian.esc ├── calculation_root.esc ├── calculation_subtraction.esc ├── calculation_symbol.esc ├── calculation_syntax_error.esc └── calculation_trigonometry.esc ├── dfu_test.py ├── function ├── function_graph.esc ├── function_graph_axes.esc ├── function_graph_calculations_integral.esc ├── function_graph_calculations_intersection.esc ├── function_graph_calculations_max.esc ├── function_graph_calculations_min.esc ├── function_graph_calculations_tangent.esc ├── function_graph_calculations_zero.esc ├── function_graph_derivative.esc ├── function_graph_goto.esc ├── function_graph_preadjustment.esc ├── function_graph_zoom.esc ├── function_list.esc ├── function_list_active.esc ├── function_list_rename.esc ├── function_sine.esc ├── function_table.esc ├── function_table_derivative.esc └── function_table_interval.esc ├── probability ├── probability_binomial.esc ├── probability_binomial_calculation.esc ├── probability_exponential.esc ├── probability_exponential_calculation.esc ├── probability_normal.esc ├── probability_normal_calculation.esc ├── probability_poisson.esc ├── probability_poisson_calculation.esc ├── probability_uniform.esc └── probability_uniform_calculation.esc ├── python ├── python_console.esc ├── python_console_delete.esc ├── python_console_toolbox.esc ├── python_console_variablebox.esc ├── python_editor.esc ├── python_editor_delete.esc ├── python_menu.esc ├── python_menu_auto_import.esc ├── python_menu_delete.esc └── python_menu_rename.esc ├── regression ├── regression_calculation.esc ├── regression_cubic.esc ├── regression_exponential.esc ├── regression_graph.esc ├── regression_graph_axes.esc ├── regression_graph_preadjustment.esc ├── regression_graph_zoom.esc ├── regression_list.esc ├── regression_list_clear.esc ├── regression_list_formula.esc ├── regression_logarithmic.esc ├── regression_multiple_regressions.esc ├── regression_power.esc ├── regression_quadratic.esc └── regression_quartic.esc ├── sequence ├── sequence_graph.esc ├── sequence_graph_axes.esc ├── sequence_graph_goto.esc ├── sequence_graph_preadjustment.esc ├── sequence_graph_sum.esc ├── sequence_graph_zoom.esc ├── sequence_linking.esc ├── sequence_list.esc ├── sequence_list_delete.esc ├── sequence_list_type.esc ├── sequence_recurring.esc ├── sequence_table.esc └── sequence_table_interval.esc ├── settings ├── settings.esc ├── settings_about.esc ├── settings_angle_unit.esc ├── settings_complex.esc ├── settings_exam_mode.esc ├── settings_language.esc ├── settings_result_format.esc └── settings_writing_format.esc ├── shared ├── toolbox.esc ├── variable_box_empty.esc ├── variable_box_expression.esc └── variable_box_function.esc ├── solver ├── solver_approximate_1.esc ├── solver_approximate_2.esc ├── solver_linear_system_1.esc ├── solver_linear_system_2.esc ├── solver_linear_system_3.esc ├── solver_linear_system_4.esc ├── solver_linear_system_5.esc ├── solver_linear_system_6.esc ├── solver_no_variable.esc ├── solver_non_linear_sytem.esc ├── solver_polynome_2.esc └── solver_undefined_equation.esc └── statistics ├── statistics_box.esc ├── statistics_calculation.esc ├── statistics_histo.esc ├── statistics_histo_parameters.esc ├── statistics_list.esc ├── statistics_list_clear.esc └── statistics_list_formula.esc /.gitignore: -------------------------------------------------------------------------------- 1 | /output/ 2 | /build/artifacts/ 3 | build/device/**/*.pyc 4 | build/device/keys.json 5 | -------------------------------------------------------------------------------- /apps/apps_container_launch_default.cpp: -------------------------------------------------------------------------------- 1 | #include "apps_container.h" 2 | 3 | App::Snapshot * AppsContainer::initialAppSnapshot() { 4 | // The backlight has not been initialized 5 | Ion::Backlight::init(); 6 | return appSnapshotAtIndex(numberOfApps() == 2 ? 1 : 0); 7 | } 8 | -------------------------------------------------------------------------------- /apps/apps_container_launch_on_boarding.cpp: -------------------------------------------------------------------------------- 1 | #include "apps_container.h" 2 | 3 | App::Snapshot * AppsContainer::initialAppSnapshot() { 4 | return onBoardingAppSnapshot(); 5 | } 6 | -------------------------------------------------------------------------------- /apps/apps_container_prompt_none.cpp: -------------------------------------------------------------------------------- 1 | #include "apps_container.h" 2 | 3 | I18n::Message AppsContainer::k_promptMessages[] = {}; 4 | 5 | KDColor AppsContainer::k_promptColors[] = {}; 6 | 7 | int AppsContainer::k_promptNumberOfMessages = 0; 8 | 9 | -------------------------------------------------------------------------------- /apps/backlight_dimming_timer.cpp: -------------------------------------------------------------------------------- 1 | #include "backlight_dimming_timer.h" 2 | 3 | BacklightDimmingTimer::BacklightDimmingTimer() : 4 | Timer(k_idleBeforeDimmingDuration/Timer::TickDuration) 5 | { 6 | } 7 | 8 | bool BacklightDimmingTimer::fire() { 9 | Ion::Backlight::setBrightness(k_dimBacklightBrightness); 10 | return false; 11 | } 12 | -------------------------------------------------------------------------------- /apps/backlight_dimming_timer.h: -------------------------------------------------------------------------------- 1 | #ifndef APPS_BACKLIGHT_DIMMING_TIMER_H 2 | #define APPS_BACKLIGHT_DIMMING_TIMER_H 3 | 4 | #include 5 | 6 | class BacklightDimmingTimer : public Timer { 7 | public: 8 | BacklightDimmingTimer(); 9 | private: 10 | constexpr static int k_idleBeforeDimmingDuration = 30*1000; // In miliseconds 11 | constexpr static int k_dimBacklightBrightness = 0; 12 | bool fire() override; 13 | }; 14 | 15 | #endif 16 | 17 | -------------------------------------------------------------------------------- /apps/battery_timer.cpp: -------------------------------------------------------------------------------- 1 | #include "battery_timer.h" 2 | #include "apps_container.h" 3 | 4 | BatteryTimer::BatteryTimer() : 5 | Timer(1) 6 | { 7 | } 8 | 9 | bool BatteryTimer::fire() { 10 | AppsContainer * container = AppsContainer::sharedAppsContainer(); 11 | bool needRedrawing = container->updateBatteryState(); 12 | if (Ion::Battery::level() == Ion::Battery::Charge::EMPTY && !Ion::USB::isPlugged()) { 13 | container->shutdownDueToLowBattery(); 14 | } 15 | return needRedrawing; 16 | } 17 | -------------------------------------------------------------------------------- /apps/battery_timer.h: -------------------------------------------------------------------------------- 1 | #ifndef APPS_BATTERY_TIMER_H 2 | #define APPS_BATTERY_TIMER_H 3 | 4 | #include 5 | 6 | class BatteryTimer : public Timer { 7 | public: 8 | BatteryTimer(); 9 | private: 10 | bool fire() override; 11 | }; 12 | 13 | #endif 14 | 15 | -------------------------------------------------------------------------------- /apps/calculation/additional_outputs/trigonometry_model.cpp: -------------------------------------------------------------------------------- 1 | #include "trigonometry_model.h" 2 | 3 | namespace Calculation { 4 | 5 | TrigonometryModel::TrigonometryModel() : 6 | Shared::CurveViewRange(), 7 | m_angle(NAN) 8 | { 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /apps/calculation/calculation_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/calculation/calculation_icon.png -------------------------------------------------------------------------------- /apps/code/base.en.i18n: -------------------------------------------------------------------------------- 1 | AddScript = "Add a script" 2 | AllowedCharactersaz09 = "Allowed characters: a-z, 0-9, _" 3 | Autocomplete = "Autocomplete" 4 | BuiltinsAndKeywords = "Builtins and keywords" 5 | Console = "Python shell" 6 | DeleteScript = "Delete script" 7 | ExecuteScript = "Execute script" 8 | FunctionsAndVariables = "Functions and variables" 9 | ImportedModulesAndScripts = "Imported modules and scripts" 10 | NoWordAvailableHere = "No word available here." 11 | ScriptInProgress = "Script in progress" 12 | ScriptOptions = "Script options" 13 | -------------------------------------------------------------------------------- /apps/code/base.universal.i18n: -------------------------------------------------------------------------------- 1 | CodeAppCapital = "PYTHON" 2 | ConsolePrompt = ">>> " 3 | ScriptParameters = "..." 4 | -------------------------------------------------------------------------------- /apps/code/code_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/code/code_icon.png -------------------------------------------------------------------------------- /apps/code/helpers.cpp: -------------------------------------------------------------------------------- 1 | #include "helpers.h" 2 | #include 3 | 4 | namespace Code { 5 | namespace Helpers { 6 | 7 | const char * PythonTextForEvent(Ion::Events::Event event) { 8 | for (size_t i=0; i 5 | 6 | namespace Code { 7 | namespace Helpers { 8 | 9 | const char * PythonTextForEvent(Ion::Events::Event event); 10 | 11 | } 12 | } 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /apps/code/toolbox.de.i18n: -------------------------------------------------------------------------------- 1 | Functions = "Funktionen" 2 | Catalog = "Katalog" 3 | Modules = "Module" 4 | LoopsAndTests = "Schleifen und Tests" 5 | -------------------------------------------------------------------------------- /apps/code/toolbox.en.i18n: -------------------------------------------------------------------------------- 1 | Functions = "Functions" 2 | Catalog = "Catalog" 3 | Modules = "Modules" 4 | LoopsAndTests = "Loops and tests" 5 | -------------------------------------------------------------------------------- /apps/code/toolbox.es.i18n: -------------------------------------------------------------------------------- 1 | Functions = "Functions" 2 | Catalog = "Catalog" 3 | Modules = "Modules" 4 | LoopsAndTests = "Loops and tests" 5 | -------------------------------------------------------------------------------- /apps/code/toolbox.fr.i18n: -------------------------------------------------------------------------------- 1 | Functions = "Fonctions" 2 | Catalog = "Catalogue" 3 | Modules = "Modules" 4 | LoopsAndTests = "Boucles et tests" 5 | -------------------------------------------------------------------------------- /apps/code/toolbox.it.i18n: -------------------------------------------------------------------------------- 1 | Functions = "Funzioni" 2 | Catalog = "Catalogo" 3 | Modules = "Moduli" 4 | LoopsAndTests = "Cicli e test" 5 | -------------------------------------------------------------------------------- /apps/code/toolbox.nl.i18n: -------------------------------------------------------------------------------- 1 | Functions = "Functies" 2 | Catalog = "Catalogus" 3 | Modules = "Modules" 4 | LoopsAndTests = "Herhalingen en testen" 5 | -------------------------------------------------------------------------------- /apps/code/toolbox.pt.i18n: -------------------------------------------------------------------------------- 1 | Functions = "Funções" 2 | Catalog = "Catálogo" 3 | Modules = "Módulos" 4 | LoopsAndTests = "Laços e testes" 5 | -------------------------------------------------------------------------------- /apps/code/variable_box_empty_controller.cpp: -------------------------------------------------------------------------------- 1 | #include "variable_box_empty_controller.h" 2 | #include 3 | 4 | namespace Code { 5 | 6 | VariableBoxEmptyController::VariableBoxEmptyView::VariableBoxEmptyView() : 7 | ::ModalViewEmptyController::ModalViewEmptyView() 8 | { 9 | initMessageViews(); 10 | m_message.setMessage(I18n::Message::NoWordAvailableHere); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /apps/constant.h: -------------------------------------------------------------------------------- 1 | #ifndef APPS_CONSTANT_H 2 | #define APPS_CONSTANT_H 3 | 4 | #include 5 | 6 | class Constant { 7 | public: 8 | constexpr static int MaxSerializedExpressionSize = 2*::TextField::maxBufferSize(); 9 | }; 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /apps/empty_battery_window.h: -------------------------------------------------------------------------------- 1 | #ifndef APPS_EMPTY_BATTERY_WINDOW_H 2 | #define APPS_EMPTY_BATTERY_WINDOW_H 3 | 4 | #include 5 | 6 | class EmptyBatteryWindow : public Window { 7 | public: 8 | EmptyBatteryWindow(); 9 | void drawRect(KDContext * ctx, KDRect rect) const; 10 | }; 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /apps/exam_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/exam_icon.png -------------------------------------------------------------------------------- /apps/exam_pop_up_controller_delegate.h: -------------------------------------------------------------------------------- 1 | #ifndef APPS_EXAM_POP_UP_CONTROLLER_DELEGATE_H 2 | #define APPS_EXAM_POP_UP_CONTROLLER_DELEGATE_H 3 | 4 | class ExamPopUpControllerDelegate { 5 | public: 6 | virtual void examDeactivatingPopUpIsDismissed() = 0; 7 | }; 8 | 9 | #endif 10 | 11 | -------------------------------------------------------------------------------- /apps/graph/graph_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/graph/graph_icon.png -------------------------------------------------------------------------------- /apps/graph/list/type_helper.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPH_LIST_TYPE_HELPER_H 2 | #define GRAPH_LIST_TYPE_HELPER_H 3 | 4 | #include 5 | #include 6 | 7 | namespace Graph { 8 | 9 | namespace PlotTypeHelper { 10 | 11 | constexpr static int NumberOfTypes = 3; 12 | I18n::Message Message(int index); 13 | Poincare::Layout Layout(int index); 14 | 15 | } 16 | 17 | } 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /apps/hardware_test/keyboard_model.cpp: -------------------------------------------------------------------------------- 1 | #include "keyboard_model.h" 2 | 3 | namespace HardwareTest { 4 | 5 | constexpr Ion::Keyboard::Key KeyboardModel::TestedKeys[KeyboardModel::NumberOfTestedKeys]; 6 | 7 | bool KeyboardModel::belongsToTestedKeysSubset(Ion::Keyboard::Key key) const { 8 | for (int i = 0; i < NumberOfTestedKeys; i++) { 9 | if (TestedKeys[i] == key) { 10 | return true; 11 | } 12 | } 13 | return false; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /apps/hardware_test/pop_up_controller.h: -------------------------------------------------------------------------------- 1 | #ifndef POP_UP_CONTROLLER_H 2 | #define POP_UP_CONTROLLER_H 3 | 4 | #include 5 | 6 | namespace HardwareTest { 7 | 8 | class PopUpController : public ::PopUpController { 9 | public: 10 | PopUpController(); 11 | }; 12 | 13 | } 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /apps/home/apps_layout.csv: -------------------------------------------------------------------------------- 1 | Default,calculation,graph,code,statistics,probability,solver,sequence,regression,settings 2 | HidePython,calculation,graph,solver,statistics,probability,regression,sequence,code,settings 3 | -------------------------------------------------------------------------------- /apps/home/base.de.i18n: -------------------------------------------------------------------------------- 1 | Apps = "Anwendungen" 2 | AppsCapital = "ANWENDUNGEN" 3 | ForbidenAppInExamMode1 = "Diese Anwendung ist im" 4 | ForbidenAppInExamMode2 = "Prüfungsmodus nicht erlaubt." 5 | -------------------------------------------------------------------------------- /apps/home/base.en.i18n: -------------------------------------------------------------------------------- 1 | Apps = "Applications" 2 | AppsCapital = "APPLICATIONS" 3 | ForbidenAppInExamMode1 = "This application is" 4 | ForbidenAppInExamMode2 = "forbidden in exam mode" 5 | -------------------------------------------------------------------------------- /apps/home/base.es.i18n: -------------------------------------------------------------------------------- 1 | Apps = "Aplicaciones" 2 | AppsCapital = "APLICACIONES" 3 | ForbidenAppInExamMode1 = "Esta aplicación está prohibida" 4 | ForbidenAppInExamMode2 = "en el modo de examen" 5 | -------------------------------------------------------------------------------- /apps/home/base.fr.i18n: -------------------------------------------------------------------------------- 1 | Apps = "Applications" 2 | AppsCapital = "APPLICATIONS" 3 | ForbidenAppInExamMode1 = "Cette application n'est" 4 | ForbidenAppInExamMode2 = "pas autorisée en mode examen." 5 | -------------------------------------------------------------------------------- /apps/home/base.it.i18n: -------------------------------------------------------------------------------- 1 | Apps = "Applicazioni" 2 | AppsCapital = "APPLICAZIONI" 3 | ForbidenAppInExamMode1 = "Questa applicazione è" 4 | ForbidenAppInExamMode2 = "proibita nella modalità d'esame" 5 | -------------------------------------------------------------------------------- /apps/home/base.nl.i18n: -------------------------------------------------------------------------------- 1 | Apps = "Applicaties" 2 | AppsCapital = "APPLICATIES" 3 | ForbidenAppInExamMode1 = "Deze applicatie is" 4 | ForbidenAppInExamMode2 = "uitgesloten in examenstand" 5 | -------------------------------------------------------------------------------- /apps/home/base.pt.i18n: -------------------------------------------------------------------------------- 1 | Apps = "Aplicações" 2 | AppsCapital = "APLICAÇÕES" 3 | ForbidenAppInExamMode1 = "Esta aplicação é" 4 | ForbidenAppInExamMode2 = "proibida no Modo de Exame" 5 | -------------------------------------------------------------------------------- /apps/hwtest/lowlevel/Makefile: -------------------------------------------------------------------------------- 1 | objs += $(addprefix apps/hwtest/lowlevel/,\ 2 | lowlevel.o \ 3 | ) 4 | 5 | apps/hwtest/lowlevel/lowlevel.o: SFLAGS += -O3 6 | -------------------------------------------------------------------------------- /apps/language_de.universal.i18n: -------------------------------------------------------------------------------- 1 | LanguageDE = "Deutsch " 2 | -------------------------------------------------------------------------------- /apps/language_en.universal.i18n: -------------------------------------------------------------------------------- 1 | LanguageEN = "English " 2 | -------------------------------------------------------------------------------- /apps/language_es.universal.i18n: -------------------------------------------------------------------------------- 1 | LanguageES = "Español " 2 | -------------------------------------------------------------------------------- /apps/language_fr.universal.i18n: -------------------------------------------------------------------------------- 1 | LanguageFR = "Français " 2 | -------------------------------------------------------------------------------- /apps/language_it.universal.i18n: -------------------------------------------------------------------------------- 1 | LanguageIT = "Italiano " 2 | -------------------------------------------------------------------------------- /apps/language_nl.universal.i18n: -------------------------------------------------------------------------------- 1 | LanguageNL = "Nederlands " 2 | -------------------------------------------------------------------------------- /apps/language_preferences.csv: -------------------------------------------------------------------------------- 1 | Language,I18n::Country 2 | en,US 3 | fr,FR 4 | nl,NL 5 | pt,PT 6 | it,IT 7 | de,DE 8 | es,ES 9 | ??,WW 10 | -------------------------------------------------------------------------------- /apps/language_pt.universal.i18n: -------------------------------------------------------------------------------- 1 | LanguagePT = "Português " 2 | -------------------------------------------------------------------------------- /apps/lock_view.h: -------------------------------------------------------------------------------- 1 | #ifndef APPS_LOCK_VIEW_H 2 | #define APPS_LOCK_VIEW_H 3 | 4 | #include 5 | 6 | class LockView : public TransparentView { 7 | public: 8 | void drawRect(KDContext * ctx, KDRect rect) const override; 9 | KDSize minimalSizeForOptimalDisplay() const override; 10 | constexpr static int k_lockHeight = 9; 11 | constexpr static int k_lockWidth = 7; 12 | }; 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /apps/on_boarding/Makefile: -------------------------------------------------------------------------------- 1 | app_on_boarding_src = $(addprefix apps/on_boarding/,\ 2 | app.cpp \ 3 | logo_controller.cpp \ 4 | logo_view.cpp \ 5 | localization_controller.cpp \ 6 | prompt_controller.cpp \ 7 | power_on_self_test.cpp \ 8 | ) 9 | 10 | apps_src += $(app_on_boarding_src) 11 | 12 | i18n_files += $(call i18n_without_universal_for,on_boarding/base) 13 | 14 | $(eval $(call depends_on_image,apps/on_boarding/logo_view.cpp,apps/on_boarding/logo_icon.png)) 15 | -------------------------------------------------------------------------------- /apps/on_boarding/logo_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/on_boarding/logo_icon.png -------------------------------------------------------------------------------- /apps/on_boarding/logo_view.h: -------------------------------------------------------------------------------- 1 | #ifndef APPS_LOGO_VIEW_H 2 | #define APPS_LOGO_VIEW_H 3 | 4 | #include 5 | 6 | namespace OnBoarding { 7 | 8 | class LogoView : public View { 9 | public: 10 | LogoView(); 11 | void drawRect(KDContext * ctx, KDRect rect) const override; 12 | private: 13 | int numberOfSubviews() const override; 14 | View * subviewAtIndex(int index) override; 15 | void layoutSubviews(bool force = false) override; 16 | ImageView m_logoView; 17 | }; 18 | 19 | } 20 | 21 | #endif 22 | 23 | -------------------------------------------------------------------------------- /apps/on_boarding/power_on_self_test.h: -------------------------------------------------------------------------------- 1 | #ifndef APPS_POWER_ON_SELF_TEST_H 2 | #define APPS_POWER_ON_SELF_TEST_H 3 | 4 | #include 5 | 6 | namespace OnBoarding { 7 | 8 | class PowerOnSelfTest { 9 | public: 10 | /* Performs self tests, lights up the LED to indicate the tests results and 11 | * returns the LED color previous to the tests. */ 12 | static KDColor Perform(); 13 | private: 14 | constexpr static int k_textErrorsLimit = 0; 15 | }; 16 | 17 | } 18 | 19 | #endif 20 | 21 | -------------------------------------------------------------------------------- /apps/probability/base.universal.i18n: -------------------------------------------------------------------------------- 1 | D1 = "d1" 2 | D2 = "d2" 3 | DiscreteLegend = "P(X=" 4 | FiniteIntegralFirstLegend = "P(" 5 | FiniteIntegralLegend = "≤X≤" 6 | Fisher = "Fisher" 7 | LeftIntegralFirstLegend = "P(X≤" 8 | LeftIntegralSecondLegend = ")=" 9 | Poisson = "Poisson" 10 | RightIntegralFirstLegend = "P(X≥" 11 | RightIntegralSecondLegend = ")=" 12 | Student = "Student" 13 | -------------------------------------------------------------------------------- /apps/probability/calculation/calculation.cpp: -------------------------------------------------------------------------------- 1 | #include "calculation.h" 2 | #include 3 | #include 4 | 5 | namespace Probability { 6 | 7 | double Calculation::lowerBound() { 8 | return -INFINITY; 9 | } 10 | 11 | double Calculation::upperBound() { 12 | return INFINITY; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /apps/probability/distribution/regularized_gamma.h: -------------------------------------------------------------------------------- 1 | #ifndef PROBABILITY_REGULARIZED_GAMMA_H 2 | #define PROBABILITY_REGULARIZED_GAMMA_H 3 | 4 | /* regularizedGamma(s,x) = int(e^-t * t^(s-1), t, 0, x) / gamma(s) 5 | * with : 6 | * regularizedGamma(s, 0) = 0 7 | * regularizedGamma(s, inf) = 1 */ 8 | 9 | bool regularizedGamma(double s, double x, double epsilon, int maxNumberOfIterations, double * result); 10 | 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /apps/probability/images/binomial_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/binomial_icon.png -------------------------------------------------------------------------------- /apps/probability/images/calcul1_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/calcul1_icon.png -------------------------------------------------------------------------------- /apps/probability/images/calcul2_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/calcul2_icon.png -------------------------------------------------------------------------------- /apps/probability/images/calcul3_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/calcul3_icon.png -------------------------------------------------------------------------------- /apps/probability/images/calcul4_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/calcul4_icon.png -------------------------------------------------------------------------------- /apps/probability/images/chi_squared_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/chi_squared_icon.png -------------------------------------------------------------------------------- /apps/probability/images/exponential_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/exponential_icon.png -------------------------------------------------------------------------------- /apps/probability/images/fisher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/fisher_icon.png -------------------------------------------------------------------------------- /apps/probability/images/focused_binomial_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/focused_binomial_icon.png -------------------------------------------------------------------------------- /apps/probability/images/focused_calcul1_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/focused_calcul1_icon.png -------------------------------------------------------------------------------- /apps/probability/images/focused_calcul2_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/focused_calcul2_icon.png -------------------------------------------------------------------------------- /apps/probability/images/focused_calcul3_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/focused_calcul3_icon.png -------------------------------------------------------------------------------- /apps/probability/images/focused_calcul4_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/focused_calcul4_icon.png -------------------------------------------------------------------------------- /apps/probability/images/focused_chi_squared_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/focused_chi_squared_icon.png -------------------------------------------------------------------------------- /apps/probability/images/focused_exponential_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/focused_exponential_icon.png -------------------------------------------------------------------------------- /apps/probability/images/focused_fisher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/focused_fisher_icon.png -------------------------------------------------------------------------------- /apps/probability/images/focused_geometric_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/focused_geometric_icon.png -------------------------------------------------------------------------------- /apps/probability/images/focused_normal_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/focused_normal_icon.png -------------------------------------------------------------------------------- /apps/probability/images/focused_poisson_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/focused_poisson_icon.png -------------------------------------------------------------------------------- /apps/probability/images/focused_student_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/focused_student_icon.png -------------------------------------------------------------------------------- /apps/probability/images/focused_uniform_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/focused_uniform_icon.png -------------------------------------------------------------------------------- /apps/probability/images/geometric_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/geometric_icon.png -------------------------------------------------------------------------------- /apps/probability/images/normal_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/normal_icon.png -------------------------------------------------------------------------------- /apps/probability/images/poisson_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/poisson_icon.png -------------------------------------------------------------------------------- /apps/probability/images/student_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/student_icon.png -------------------------------------------------------------------------------- /apps/probability/images/uniform_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/images/uniform_icon.png -------------------------------------------------------------------------------- /apps/probability/probability_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/probability/probability_icon.png -------------------------------------------------------------------------------- /apps/regression/base.universal.i18n: -------------------------------------------------------------------------------- 1 | ProportionalRegressionFormula = " y=a·x " 2 | QuadraticRegressionFormula = " y=a·x^2+b·x+c " 3 | CubicRegressionFormula = " y=a·x^3+b·x^2+c·x+d " 4 | QuarticRegressionFormula = " y=a·x^4+b·x^3+c·x^2+d·x+e " 5 | LogarithmicRegressionFormula = " y=a·ln(x)+b " 6 | ExponentialRegressionFormula = " y=a·exp(b·x) " 7 | PowerRegressionFormula = " y=a·x^b " 8 | TrigonometricRegressionFormula = " y=a·sin(b·x+c)+d " 9 | LogisticRegressionFormula = " y=c/(1+a·exp(-b·x)) " 10 | Dash = "-" 11 | Reg = "reg" 12 | -------------------------------------------------------------------------------- /apps/regression/linear_model_helper.cpp: -------------------------------------------------------------------------------- 1 | #include "linear_model_helper.h" 2 | 3 | namespace Regression { 4 | 5 | namespace LinearModelHelper { 6 | 7 | double Slope(double covariance, double variance) { 8 | return covariance / variance; 9 | } 10 | 11 | double YIntercept(double meanOfY, double meanOfX, double slope) { 12 | return meanOfY - slope * meanOfX; 13 | } 14 | 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /apps/regression/linear_model_helper.h: -------------------------------------------------------------------------------- 1 | #ifndef REGRESSION_LINEAR_MODEL_HELPER 2 | #define REGRESSION_LINEAR_MODEL_HELPER 3 | 4 | namespace Regression { 5 | 6 | namespace LinearModelHelper { 7 | 8 | double Slope(double covariance, double variance); 9 | double YIntercept(double meanOfY, double meanOfX, double slope); 10 | 11 | } 12 | 13 | } 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /apps/regression/regression_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/regression/regression_icon.png -------------------------------------------------------------------------------- /apps/sequence/graph/go_to_parameter_controller.cpp: -------------------------------------------------------------------------------- 1 | #include "go_to_parameter_controller.h" 2 | #include 3 | #include 4 | 5 | namespace Sequence { 6 | 7 | bool GoToParameterController::setParameterAtIndex(int parameterIndex, double f) { 8 | assert(parameterIndex == 0); 9 | return Shared::FunctionGoToParameterController::setParameterAtIndex(parameterIndex, std::fmax(0, std::round(f))); 10 | } 11 | 12 | } 13 | 14 | -------------------------------------------------------------------------------- /apps/sequence/sequence_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/sequence/sequence_icon.png -------------------------------------------------------------------------------- /apps/sequence/values/interval_parameter_controller.h: -------------------------------------------------------------------------------- 1 | #ifndef SEQUENCE_INTERVAL_PARAM_CONTROLLER_H 2 | #define SEQUENCE_INTERVAL_PARAM_CONTROLLER_H 3 | 4 | #include "../../shared/interval_parameter_controller.h" 5 | 6 | namespace Sequence { 7 | 8 | class IntervalParameterController : public Shared::IntervalParameterController { 9 | public: 10 | using Shared::IntervalParameterController::IntervalParameterController; 11 | bool setParameterAtIndex(int parameterIndex, double f) override; 12 | }; 13 | 14 | } 15 | 16 | #endif 17 | 18 | -------------------------------------------------------------------------------- /apps/settings/settings_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/settings/settings_icon.png -------------------------------------------------------------------------------- /apps/settings/sub_menu/about_controller_official.cpp: -------------------------------------------------------------------------------- 1 | #include "about_controller.h" 2 | 3 | namespace Settings { 4 | 5 | void AboutController::viewWillAppear() { 6 | GenericSubController::viewWillAppear(); 7 | m_view.setMessages(nullptr, 0); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /apps/settings/sub_menu/exam_mode_controller_non_official.cpp: -------------------------------------------------------------------------------- 1 | #include "exam_mode_controller.h" 2 | 3 | using namespace Poincare; 4 | using namespace Shared; 5 | 6 | namespace Settings { 7 | 8 | int ExamModeController::numberOfCautionLines() const { 9 | return k_numberOfCautionMessageLines; 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /apps/settings/sub_menu/exam_mode_controller_official.cpp: -------------------------------------------------------------------------------- 1 | #include "exam_mode_controller.h" 2 | 3 | using namespace Poincare; 4 | using namespace Shared; 5 | 6 | namespace Settings { 7 | 8 | int ExamModeController::numberOfCautionLines() const { 9 | return 0; 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /apps/shared/cursor_view.cpp: -------------------------------------------------------------------------------- 1 | #include "cursor_view.h" 2 | 3 | namespace Shared { 4 | 5 | void CursorView::drawRect(KDContext * ctx, KDRect rect) const { 6 | KDCoordinate width = bounds().width(); 7 | KDCoordinate height = bounds().height(); 8 | ctx->fillRect(KDRect((width-1)/2, 0, 1, height), KDColorBlack); 9 | ctx->fillRect(KDRect(0, (height-1)/2, width, 1), KDColorBlack); 10 | } 11 | 12 | KDSize CursorView::minimalSizeForOptimalDisplay() const { 13 | return KDSize(k_size, k_size); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /apps/shared/discard_pop_up_controller.cpp: -------------------------------------------------------------------------------- 1 | #include "discard_pop_up_controller.h" 2 | 3 | namespace Shared { 4 | 5 | DiscardPopUpController::DiscardPopUpController(Invocation OkInvocation) : 6 | PopUpController(2, OkInvocation) 7 | { 8 | m_contentView.setMessage(0, I18n::Message::ConfirmDiscard1); 9 | m_contentView.setMessage(1, I18n::Message::ConfirmDiscard2); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /apps/shared/discard_pop_up_controller.h: -------------------------------------------------------------------------------- 1 | #ifndef SHARED_DISCARD_POP_UP_CONTROLLER_H 2 | #define SHARED_DISCARD_POP_UP_CONTROLLER_H 3 | 4 | #include 5 | 6 | namespace Shared { 7 | 8 | class DiscardPopUpController : public PopUpController { 9 | public: 10 | DiscardPopUpController(Invocation OkInvocation); 11 | }; 12 | 13 | } 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /apps/shared/expression_model_handle.cpp: -------------------------------------------------------------------------------- 1 | #include "expression_model_handle.h" 2 | 3 | namespace Shared { 4 | 5 | ExpressionModelHandle::ExpressionModelHandle(Ion::Storage::Record record) : 6 | Ion::Storage::Record(record) 7 | { 8 | } 9 | 10 | bool ExpressionModelHandle::isDefined() { 11 | return !isEmpty(); 12 | } 13 | 14 | bool ExpressionModelHandle::isEmpty() { 15 | return value().size <= metaDataSize(); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /apps/shared/function_store.cpp: -------------------------------------------------------------------------------- 1 | #include "function_store.h" 2 | 3 | namespace Shared { 4 | 5 | uint32_t FunctionStore::storeChecksum() { 6 | return Ion::Storage::sharedStorage()->checksum(); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /apps/shared/hideable.h: -------------------------------------------------------------------------------- 1 | #ifndef APPS_SHARED_HIDEABLE_H 2 | #define APPS_SHARED_HIDEABLE_H 3 | 4 | #include 5 | 6 | namespace Shared { 7 | 8 | class Hideable { 9 | public: 10 | Hideable() : 11 | m_hide(false) 12 | {} 13 | static KDColor hideColor() { return Palette::WallScreenDark; } 14 | bool hidden() const { return m_hide; } 15 | virtual void setHide(bool hide) { m_hide = hide; } 16 | virtual void reinit() {} 17 | private: 18 | bool m_hide; 19 | }; 20 | 21 | } 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /apps/shared/hideable_even_odd_cell.cpp: -------------------------------------------------------------------------------- 1 | #include "hideable_even_odd_cell.h" 2 | 3 | namespace Shared { 4 | 5 | KDColor HideableEvenOddCell::backgroundColor() const { 6 | if (hidden()) { 7 | return hideColor(); 8 | } 9 | return EvenOddCell::backgroundColor(); 10 | } 11 | 12 | void HideableEvenOddCell::setHide(bool hide) { 13 | if (hidden() != hide) { 14 | Hideable::setHide(hide); 15 | reloadCell(); 16 | } 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /apps/shared/hideable_even_odd_cell.h: -------------------------------------------------------------------------------- 1 | #ifndef APPS_SHARED_HIDEABLE_EVEN_ODD_CELL_H 2 | #define APPS_SHARED_HIDEABLE_EVEN_ODD_CELL_H 3 | 4 | #include 5 | #include "hideable.h" 6 | 7 | namespace Shared { 8 | 9 | class HideableEvenOddCell : public EvenOddCell, public Hideable { 10 | public: 11 | HideableEvenOddCell() : 12 | EvenOddCell(), 13 | Hideable() 14 | {} 15 | KDColor backgroundColor() const override; 16 | void setHide(bool hide) override; 17 | }; 18 | 19 | } 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /apps/shared/ok_view.h: -------------------------------------------------------------------------------- 1 | #ifndef SHARED_OK_VIEW_H 2 | #define SHARED_OK_VIEW_H 3 | 4 | #include 5 | 6 | namespace Shared { 7 | 8 | class OkView : public TransparentView { 9 | public: 10 | void drawRect(KDContext * ctx, KDRect rect) const override; 11 | KDSize minimalSizeForOptimalDisplay() const override; 12 | constexpr static KDCoordinate k_okSize = 20; 13 | }; 14 | 15 | } 16 | 17 | #endif 18 | 19 | -------------------------------------------------------------------------------- /apps/shared/parameter_text_field_delegate.h: -------------------------------------------------------------------------------- 1 | #ifndef SHARED_PARAMETER_TEXT_FIELD_DELEGATE_H 2 | #define SHARED_PARAMETER_TEXT_FIELD_DELEGATE_H 3 | 4 | #include "text_field_delegate.h" 5 | 6 | namespace Shared { 7 | 8 | /* This textField delegate implements the behaviour of textField delegate in 9 | * parameter menu. */ 10 | 11 | class ParameterTextFieldDelegate : public TextFieldDelegate { 12 | public: 13 | bool textFieldDidReceiveEvent(TextField * textField, Ion::Events::Event event) override; 14 | }; 15 | 16 | } 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /apps/shared/shared_app.cpp: -------------------------------------------------------------------------------- 1 | #include "shared_app.h" 2 | #include "global_context.h" 3 | #include 4 | 5 | void SharedApp::Snapshot::pack(App * app) { 6 | /* Since the sequence store is now accessible from every app, when exiting 7 | * any application, we need to tidy it.*/ 8 | static_cast(AppsContainer::sharedAppsContainer()->globalContext())->sequenceStore()->tidy(); 9 | App::Snapshot::pack(app); 10 | } -------------------------------------------------------------------------------- /apps/shared/shared_app.h: -------------------------------------------------------------------------------- 1 | #ifndef SHARED_APP_H 2 | #define SHARED_APP_H 3 | 4 | #include 5 | 6 | class SharedApp : public App { 7 | public: 8 | class Snapshot : public App::Snapshot { 9 | public: 10 | void pack(App * app) override; 11 | }; 12 | }; 13 | 14 | #endif -------------------------------------------------------------------------------- /apps/shared/text_helpers.h: -------------------------------------------------------------------------------- 1 | #ifndef SHARED_TEXT_HELPERS_H 2 | #define SHARED_TEXT_HELPERS_H 3 | 4 | namespace Shared { 5 | namespace TextHelpers { 6 | 7 | void PadWithSpaces(char * buffer, int bufferSize, int * currentNumberOfChar, int maxGlyphLengthWithPadding); 8 | 9 | } 10 | } 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /apps/shared/vertical_cursor_view.cpp: -------------------------------------------------------------------------------- 1 | #include "vertical_cursor_view.h" 2 | 3 | namespace Shared { 4 | 5 | void VerticalCursorView::drawRect(KDContext * ctx, KDRect rect) const { 6 | KDCoordinate height = bounds().height(); 7 | ctx->fillRect(KDRect(0, 0, 1, height), KDColorBlack); 8 | } 9 | 10 | KDSize VerticalCursorView::minimalSizeForOptimalDisplay() const { 11 | return KDSize(1, 0); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /apps/shared/vertical_cursor_view.h: -------------------------------------------------------------------------------- 1 | #ifndef SHARED_VERTICAL_CURSOR_VIEW_H 2 | #define SHARED_VERTICAL_CURSOR_VIEW_H 3 | 4 | #include 5 | #include "cursor_view.h" 6 | 7 | namespace Shared { 8 | 9 | class VerticalCursorView : public CursorView { 10 | public: 11 | void drawRect(KDContext * ctx, KDRect rect) const override; 12 | KDSize minimalSizeForOptimalDisplay() const override; 13 | }; 14 | 15 | } 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /apps/solver/solver_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/solver/solver_icon.png -------------------------------------------------------------------------------- /apps/statistics/box_axis_view.cpp: -------------------------------------------------------------------------------- 1 | #include "box_axis_view.h" 2 | #include 3 | 4 | using namespace Shared; 5 | 6 | namespace Statistics { 7 | 8 | void BoxAxisView::drawRect(KDContext * ctx, KDRect rect) const { 9 | ctx->fillRect(rect, KDColorWhite); 10 | KDRect lineRect = KDRect(0, k_axisMargin, bounds().width(), 1); 11 | ctx->fillRect(lineRect, KDColorBlack); 12 | drawLabelsAndGraduations(ctx, rect, Axis::Horizontal, false, false, true, k_axisMargin); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /apps/statistics/calculation_selectable_table_view.cpp: -------------------------------------------------------------------------------- 1 | #include "calculation_selectable_table_view.h" 2 | 3 | namespace Statistics { 4 | 5 | bool CalculationSelectableTableView::handleEvent(Ion::Events::Event event) { 6 | if (event == Ion::Events::Up && selectedColumn() == 0 && selectedRow() == 1) { 7 | return false; 8 | } 9 | if (event == Ion::Events::Left && selectedColumn() == 1 && selectedRow() == 0) { 10 | return selectCellAtLocation(0, 1); 11 | } 12 | return SelectableTableView::handleEvent(event); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /apps/statistics/calculation_selectable_table_view.h: -------------------------------------------------------------------------------- 1 | #ifndef APPS_STATISTICS_CALCULATION_SELECTABLE_TABLE_VIEW_H 2 | #define APPS_STATISTICS_CALCULATION_SELECTABLE_TABLE_VIEW_H 3 | 4 | #include 5 | 6 | namespace Statistics { 7 | 8 | class CalculationSelectableTableView : public SelectableTableView { 9 | public: 10 | using SelectableTableView::SelectableTableView; 11 | bool handleEvent(Ion::Events::Event event) override; 12 | }; 13 | 14 | } 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /apps/statistics/stat_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/apps/statistics/stat_icon.png -------------------------------------------------------------------------------- /apps/statistics/statistics_context.h: -------------------------------------------------------------------------------- 1 | #ifndef STATISTICS_STATISTICS_CONTEXT_H 2 | #define STATISTICS_STATISTICS_CONTEXT_H 3 | 4 | #include "../shared/store_context.h" 5 | 6 | namespace Statistics { 7 | 8 | class StatisticsContext : public Shared::StoreContext { 9 | public: 10 | using Shared::StoreContext::StoreContext; 11 | const Poincare::Expression expressionForSymbolAbstract(const Poincare::SymbolAbstract & symbol, bool clone, float unknownSymbolValue = NAN) override; 12 | }; 13 | 14 | } 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /apps/suspend_timer.h: -------------------------------------------------------------------------------- 1 | #ifndef APPS_SUSPEND_TIMER_H 2 | #define APPS_SUSPEND_TIMER_H 3 | 4 | #include 5 | 6 | class SuspendTimer : public Timer { 7 | public: 8 | SuspendTimer(); 9 | private: 10 | constexpr static int k_idleBeforeSuspendDuration = 5*60*1000; // In miliseconds 11 | bool fire() override; 12 | }; 13 | 14 | #endif 15 | 16 | -------------------------------------------------------------------------------- /apps/usb/Makefile: -------------------------------------------------------------------------------- 1 | app_usb_src = $(addprefix apps/usb/,\ 2 | app.cpp \ 3 | usb_connected_controller.cpp \ 4 | ) 5 | 6 | apps_src += $(app_usb_src) 7 | 8 | i18n_files += $(call i18n_with_universal_for,usb/base) 9 | -------------------------------------------------------------------------------- /apps/usb/base.de.i18n: -------------------------------------------------------------------------------- 1 | USBConnected = "DER RECHNER IST ANGESCHLOSSEN" 2 | ConnectedMessage1 = "Um Daten zu übertragen, verbinden" 3 | ConnectedMessage2 = "Sie Sich von Ihrem Computer aus mit" 4 | ConnectedMessage3 = "workshop.numworks.com." 5 | ConnectedMessage4 = "Drücken Sie die RETURN-Taste am" 6 | ConnectedMessage5 = "Taschenrechner oder ziehen Sie das Kabel," 7 | ConnectedMessage6 = "um die Verbindung zu trennen." 8 | -------------------------------------------------------------------------------- /apps/usb/base.en.i18n: -------------------------------------------------------------------------------- 1 | USBConnected = "THE CALCULATOR IS CONNECTED" 2 | ConnectedMessage1 = "To transfer data, browse" 3 | ConnectedMessage2 = "our page from your computer" 4 | ConnectedMessage3 = "workshop.numworks.com" 5 | ConnectedMessage4 = "Press the BACK key of your" 6 | ConnectedMessage5 = "calculator or unplug it to" 7 | ConnectedMessage6 = "disconnect it." 8 | -------------------------------------------------------------------------------- /apps/usb/base.es.i18n: -------------------------------------------------------------------------------- 1 | USBConnected = "CALCULADORA CONECTADA" 2 | ConnectedMessage1 = "Para transferir datos, visite" 3 | ConnectedMessage2 = "nuestra página desde su ordenador" 4 | ConnectedMessage3 = "workshop.numworks.com" 5 | ConnectedMessage4 = "Pulse el botón RETURN de la" 6 | ConnectedMessage5 = "calculadora o desenchúfela para" 7 | ConnectedMessage6 = "desconectarla." -------------------------------------------------------------------------------- /apps/usb/base.fr.i18n: -------------------------------------------------------------------------------- 1 | USBConnected = "LA CALCULATRICE EST CONNECTÉE" 2 | ConnectedMessage1 = "Pour transférer des données, connectez-" 3 | ConnectedMessage2 = "vous depuis votre ordinateur sur le site" 4 | ConnectedMessage3 = "workshop.numworks.com" 5 | ConnectedMessage4 = "Appuyez sur la touche RETOUR" 6 | ConnectedMessage5 = "de la calculatrice ou débranchez-la" 7 | ConnectedMessage6 = "pour la déconnecter." 8 | -------------------------------------------------------------------------------- /apps/usb/base.it.i18n: -------------------------------------------------------------------------------- 1 | USBConnected = "CALCOLATRICE CONNESSA" 2 | ConnectedMessage1 = "Per trasferire dei dati, connettetevi" 3 | ConnectedMessage2 = "dal vostro computer sul sito" 4 | ConnectedMessage3 = "workshop.numworks.com" 5 | ConnectedMessage4 = "Premere sul tasto INDIETRO della" 6 | ConnectedMessage5 = "calcolatrice o scollegatela per" 7 | ConnectedMessage6 = "disconnetterla." 8 | -------------------------------------------------------------------------------- /apps/usb/base.nl.i18n: -------------------------------------------------------------------------------- 1 | USBConnected = "DE REKENMACHINE IS AANGESLOTEN" 2 | ConnectedMessage1 = "Om gegevens op te slaan," 3 | ConnectedMessage2 = "ga naar onze webpagina" 4 | ConnectedMessage3 = "workshop.numworks.com" 5 | ConnectedMessage4 = "Druk op de TERUG toets van je" 6 | ConnectedMessage5 = "rekenmachine of verwijder de" 7 | ConnectedMessage6 = " kabel om hem los te koppelen." 8 | -------------------------------------------------------------------------------- /apps/usb/base.pt.i18n: -------------------------------------------------------------------------------- 1 | USBConnected = "A CALCULADORA ESTÁ CONECTADA" 2 | ConnectedMessage1 = "Para transferir dados, navegue" 3 | ConnectedMessage2 = "na nossa página no seu computador" 4 | ConnectedMessage3 = "workshop.numworks.com" 5 | ConnectedMessage4 = "Pressione o botão RETURN na" 6 | ConnectedMessage5 = "calculadora ou desligue-a para a" 7 | ConnectedMessage6 = "desconectar." 8 | -------------------------------------------------------------------------------- /apps/usb/base.universal.i18n: -------------------------------------------------------------------------------- 1 | USBAppCapital = "USB" 2 | -------------------------------------------------------------------------------- /apps/usb/usb_connected_controller.h: -------------------------------------------------------------------------------- 1 | #ifndef USB_USB_CONNECTED_CONTROLLER_H 2 | #define USB_USB_CONNECTED_CONTROLLER_H 3 | 4 | #include 5 | #include "../shared/message_view.h" 6 | 7 | namespace USB { 8 | 9 | class USBConnectedController : public ViewController { 10 | public: 11 | USBConnectedController(); 12 | View * view() override { return &m_messageView; } 13 | bool handleEvent(Ion::Events::Event event) override { return false; } 14 | private: 15 | MessageView m_messageView; 16 | }; 17 | 18 | } 19 | 20 | #endif 21 | 22 | -------------------------------------------------------------------------------- /bootloader/cable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/bootloader/cable.png -------------------------------------------------------------------------------- /bootloader/computer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/bootloader/computer.png -------------------------------------------------------------------------------- /bootloader/interface.h: -------------------------------------------------------------------------------- 1 | #ifndef BOOTLOADER_INTERFACE 2 | #define BOOTLOADER_INTERFACE 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | namespace Bootloader { 9 | 10 | class Interface { 11 | 12 | private: 13 | static void drawImage(KDContext* ctx, const Image* image, int offset); 14 | 15 | public: 16 | static void draw(); 17 | 18 | }; 19 | 20 | } 21 | 22 | #endif -------------------------------------------------------------------------------- /bootloader/jump_to_firmware.s: -------------------------------------------------------------------------------- 1 | 2 | .syntax unified 3 | .section .text.jump_to_firmware 4 | .align 2 5 | .thumb 6 | .global jump_to_firmware 7 | jump_to_firmware: 8 | msr msp, r0 9 | bx r1 10 | -------------------------------------------------------------------------------- /bootloader/key.h: -------------------------------------------------------------------------------- 1 | #ifndef BOOTLOADER_KEY_H 2 | #define BOOTLOADER_KEY_H 3 | 4 | #include 5 | 6 | struct Key { 7 | const uint8_t ed25519_key[32]; 8 | const char name[16]; 9 | const bool trusted; 10 | }; 11 | 12 | #endif -------------------------------------------------------------------------------- /bootloader/keys.csv: -------------------------------------------------------------------------------- 1 | key,trusted,name 2 | d3d535f3e1547c25469f8bfda7bbab92cb3567055d08f93c80aa2ab1ba229f08,false,Numworks (Beta) 3 | 48bdfc8bf3a67e1a1795b4de0db30133bdd02138109dcccd193486d27dedcd5e,true,Numworks 4 | 3899b8c0087a30a79f29c4e57fad82d6a95a6b8ccea96dcfeca48073557d9dc0,true,Lambda -------------------------------------------------------------------------------- /bootloader/trampoline.h: -------------------------------------------------------------------------------- 1 | #ifndef BOOTLOADER_TRAMPOLINE_H 2 | #define BOOTLOADER_TRAMPOLINE_H 3 | 4 | namespace Bootloader { 5 | 6 | #define TRAMPOLINES_COUNT 13 7 | extern void* Trampolines[TRAMPOLINES_COUNT]; 8 | 9 | #define CUSTOM_TRAMPOLINES_COUNT 2 10 | extern void* CustomTrampolines[CUSTOM_TRAMPOLINES_COUNT]; 11 | 12 | } 13 | 14 | #endif -------------------------------------------------------------------------------- /bootloader/usb_desc.cpp: -------------------------------------------------------------------------------- 1 | 2 | namespace Ion { 3 | namespace Device { 4 | namespace USB { 5 | 6 | const char* stringDescriptor() { 7 | return "@Flash/0x90000000/08*004Kg,01*032Kg,63*064Kg,64*064Kg"; 8 | } 9 | 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /build/config.mak: -------------------------------------------------------------------------------- 1 | # You can override those settings on the command line 2 | 3 | PLATFORM ?= device 4 | DEBUG ?= 0 5 | 6 | EPSILON_VERSION ?= 15.5.0 7 | EPSILON_APPS ?= calculation graph code statistics probability solver sequence regression settings 8 | EPSILON_I18N ?= en fr nl pt it de es 9 | EPSILON_COUNTRIES ?= WW CA DE ES FR GB IT NL PT US 10 | EPSILON_GETOPT ?= 0 11 | EPSILON_KEY ?= build/device/keys.json 12 | ESCHER_LOG_EVENTS_BINARY ?= 0 13 | -------------------------------------------------------------------------------- /build/device/openocd.n0100.cfg: -------------------------------------------------------------------------------- 1 | source [find interface/stlink-v2.cfg] 2 | 3 | transport select hla_swd 4 | 5 | source [find target/stm32f4x.cfg] 6 | 7 | #reset_config srst_only 8 | -------------------------------------------------------------------------------- /build/device/openocd.n0110.cfg: -------------------------------------------------------------------------------- 1 | source [find interface/stlink.cfg] 2 | 3 | transport select hla_swd 4 | 5 | source [find target/stm32f7x.cfg] 6 | 7 | reset_config none separate 8 | -------------------------------------------------------------------------------- /build/keys.mk: -------------------------------------------------------------------------------- 1 | 2 | $(EPSILON_KEY): 3 | @echo "GENKEY $@" 4 | $(Q) $(PYTHON) build/device/genkeys.py $@ 5 | -------------------------------------------------------------------------------- /build/platform.blackbox.mak: -------------------------------------------------------------------------------- 1 | TOOLCHAIN ?= host-gcc 2 | USE_LIBA ?= 0 3 | ION_KEYBOARD_LAYOUT = layout_B2 4 | EXE = bin 5 | 6 | EPSILON_TELEMETRY ?= 0 -------------------------------------------------------------------------------- /build/platform.device.mak: -------------------------------------------------------------------------------- 1 | MODEL ?= n0110 2 | USE_LIBA = 1 3 | EXE = elf 4 | 5 | EPSILON_TELEMETRY ?= 0 6 | 7 | BUILD_DIR := $(BUILD_DIR)/$(MODEL) 8 | 9 | $(BUILD_DIR)/python/port/port.o: CXXFLAGS += -DMP_PORT_USE_STACK_SYMBOLS=1 10 | 11 | include build/platform.device.$(MODEL).mak 12 | -------------------------------------------------------------------------------- /build/platform.device.n0100.mak: -------------------------------------------------------------------------------- 1 | TOOLCHAIN ?= arm-gcc-m4f 2 | ION_KEYBOARD_LAYOUT = layout_B2 3 | PCB_LATEST = 0 4 | -------------------------------------------------------------------------------- /build/platform.device.n0110.mak: -------------------------------------------------------------------------------- 1 | TOOLCHAIN ?= arm-gcc-m7f 2 | ION_KEYBOARD_LAYOUT = layout_B3 3 | PCB_LATEST = 343 # PCB version 3.43 4 | -------------------------------------------------------------------------------- /build/platform.simulator.android.mak: -------------------------------------------------------------------------------- 1 | TOOLCHAIN = android 2 | EXE = so 3 | 4 | EPSILON_TELEMETRY ?= 1 5 | 6 | ARCHS = armeabi-v7a arm64-v8a x86 x86_64 7 | 8 | ifdef ARCH 9 | BUILD_DIR := $(BUILD_DIR)/$(ARCH) 10 | else 11 | HANDY_TARGETS_EXTENSIONS = apk 12 | endif 13 | -------------------------------------------------------------------------------- /build/platform.simulator.ios.mak: -------------------------------------------------------------------------------- 1 | TOOLCHAIN = apple 2 | EXE = bin 3 | 4 | APPLE_PLATFORM ?= ios 5 | APPLE_PLATFORM_MIN_VERSION = 8.0 6 | EPSILON_TELEMETRY ?= 1 7 | 8 | ifeq ($(APPLE_PLATFORM),ios) 9 | ARCHS = arm64 armv7 10 | UI_REQUIRED_CAPABILITIES += armv7 11 | else ifeq ($(APPLE_PLATFORM),ios-simulator) 12 | ARCHS = x86_64 13 | endif 14 | 15 | BUILD_DIR := $(subst $(TARGET),$(APPLE_PLATFORM),$(BUILD_DIR)) 16 | 17 | ifdef ARCH 18 | BUILD_DIR := $(BUILD_DIR)/$(ARCH) 19 | else 20 | HANDY_TARGETS_EXTENSIONS = ipa app 21 | endif 22 | -------------------------------------------------------------------------------- /build/platform.simulator.linux.mak: -------------------------------------------------------------------------------- 1 | TOOLCHAIN = host-gcc 2 | EXE = bin 3 | 4 | EPSILON_TELEMETRY ?= 0 5 | -------------------------------------------------------------------------------- /build/platform.simulator.macos.mak: -------------------------------------------------------------------------------- 1 | TOOLCHAIN = apple 2 | EXE = bin 3 | 4 | APPLE_PLATFORM = macos 5 | APPLE_PLATFORM_MIN_VERSION = 10.10 6 | EPSILON_TELEMETRY ?= 0 7 | 8 | ARCHS = x86_64 9 | 10 | ifdef ARCH 11 | BUILD_DIR := $(BUILD_DIR)/$(ARCH) 12 | else 13 | HANDY_TARGETS_EXTENSIONS = app 14 | endif 15 | -------------------------------------------------------------------------------- /build/platform.simulator.mak: -------------------------------------------------------------------------------- 1 | USE_LIBA = 0 2 | ION_KEYBOARD_LAYOUT = layout_B2 3 | EPSILON_GETOPT = 1 4 | 5 | SFLAGS += -fPIE 6 | 7 | TARGET ?= $(HOST) 8 | 9 | BUILD_DIR := $(BUILD_DIR)/$(TARGET) 10 | 11 | include build/platform.simulator.$(TARGET).mak 12 | -------------------------------------------------------------------------------- /build/platform.simulator.web.mak: -------------------------------------------------------------------------------- 1 | TOOLCHAIN = emscripten 2 | EXE = js 3 | 4 | EPSILON_TELEMETRY ?= 0 5 | -------------------------------------------------------------------------------- /build/platform.simulator.windows.mak: -------------------------------------------------------------------------------- 1 | TOOLCHAIN = windows 2 | EXE = exe 3 | 4 | EPSILON_TELEMETRY ?= 0 5 | -------------------------------------------------------------------------------- /build/targets.device.n0100.mak: -------------------------------------------------------------------------------- 1 | .PHONY: %_flash 2 | %_flash: $(BUILD_DIR)/%.dfu 3 | @echo "DFU $@" 4 | @echo "INFO About to flash your device. Please plug your device to your computer" 5 | @echo " using an USB cable and press the RESET button the back of your device." 6 | $(Q) until $(PYTHON) build/device/dfu.py -l | grep -E "0483:a291|0483:df11" > /dev/null 2>&1; do sleep 2;done 7 | $(Q) $(PYTHON) build/device/dfu.py -m -u $< 8 | -------------------------------------------------------------------------------- /build/targets.simulator.android.mak: -------------------------------------------------------------------------------- 1 | .PHONY: %_run 2 | %_run: $(BUILD_DIR)/%.apk 3 | $(call rule_label,ADB) 4 | $(Q) adb install $< 5 | -------------------------------------------------------------------------------- /build/targets.simulator.ios.mak: -------------------------------------------------------------------------------- 1 | ifeq ($(APPLE_PLATFORM),ios-simulator) 2 | .PHONY: %_run 3 | %_run: $(BUILD_DIR)/%.app 4 | $(call rule_label,XCRUN) 5 | $(Q) xcrun simctl install booted $^ 6 | endif 7 | -------------------------------------------------------------------------------- /build/targets.simulator.linux.mak: -------------------------------------------------------------------------------- 1 | .PHONY: %_run 2 | %_run: $(BUILD_DIR)/%.$(EXE) 3 | $(call rule_label,EXE) 4 | $(Q) ./$^ 5 | -------------------------------------------------------------------------------- /build/targets.simulator.macos.mak: -------------------------------------------------------------------------------- 1 | .PHONY: %_run 2 | %_run: $(BUILD_DIR)/%.app 3 | $(call rule_label,OPEN) 4 | $(Q) open $^ 5 | -------------------------------------------------------------------------------- /build/targets.simulator.mak: -------------------------------------------------------------------------------- 1 | -include build/targets.simulator.$(TARGET).mak 2 | -------------------------------------------------------------------------------- /build/targets.simulator.web.mak: -------------------------------------------------------------------------------- 1 | $(BUILD_DIR)/test.js: EMSCRIPTEN_MODULARIZE = 0 2 | 3 | HANDY_TARGETS += htmlpack htmlpack.official 4 | HANDY_TARGETS_EXTENSIONS += zip 5 | 6 | htmlpack_targets = .\ 7 | .official. \ 8 | 9 | define rule_htmlpack 10 | $$(BUILD_DIR)/htmlpack$(1)zip: $$(addprefix $$(BUILD_DIR)/ion/src/simulator/web/,calculator.html calculator.css) $$(BUILD_DIR)/epsilon$(1)js ion/src/simulator/web/calculator.js 11 | endef 12 | 13 | $(foreach target,$(htmlpack_targets),$(eval $(call rule_htmlpack,$(target)))) 14 | -------------------------------------------------------------------------------- /build/targets.simulator.windows.mak: -------------------------------------------------------------------------------- 1 | PHONY: %_run 2 | t %_run: $(BUILD_DIR)/%.$(EXE) 3 | $(call rule_label,EXE) 4 | $(Q) ./$^ 5 | -------------------------------------------------------------------------------- /build/toolchain.afl.mak: -------------------------------------------------------------------------------- 1 | export AFL_QUIET = 1 2 | CC = afl-clang 3 | CXX = afl-clang++ 4 | LD = afl-clang++ 5 | 6 | ifeq ($(ASAN),1) 7 | export AFL_USE_ASAN = 1 8 | endif 9 | 10 | # Prevent NDEBUG from being defined since we will always want assertions to run 11 | # when the code is being fuzzed 12 | SFLAGS := $(filter-out -DNDEBUG,$(SFLAGS)) 13 | -------------------------------------------------------------------------------- /build/toolchain.arm-gcc-m4f.mak: -------------------------------------------------------------------------------- 1 | include build/toolchain.arm-gcc.mak 2 | SFLAGS += -mthumb -mfloat-abi=hard 3 | SFLAGS += -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 4 | -------------------------------------------------------------------------------- /build/toolchain.arm-gcc-m7f.mak: -------------------------------------------------------------------------------- 1 | include build/toolchain.arm-gcc.mak 2 | SFLAGS += -mthumb -mfloat-abi=hard 3 | SFLAGS += -mcpu=cortex-m7 -mfpu=fpv5-sp-d16 4 | -------------------------------------------------------------------------------- /build/toolchain.arm-llvm.mak: -------------------------------------------------------------------------------- 1 | CC = clang 2 | CXX = clang++ 3 | LD = arm-none-eabi-ld.bfd 4 | GDB = arm-none-eabi-gdb 5 | OBJCOPY = arm-none-eabi-objcopy 6 | SIZE = arm-none-eabi-size 7 | 8 | SFLAGS += -target thumbv7em-unknown-eabi -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 9 | ifeq ($(DEBUG),1) 10 | SFLAGS += -ggdb3 11 | else 12 | SFLAGS += -fdata-sections -ffunction-sections 13 | LDFLAGS += --gc-sections 14 | endif 15 | -------------------------------------------------------------------------------- /build/toolchain.host-clang.mak: -------------------------------------------------------------------------------- 1 | CC = clang 2 | CXX = clang++ 3 | LD = clang++ 4 | GDB = lldb 5 | -------------------------------------------------------------------------------- /build/toolchain.host-gcc.mak: -------------------------------------------------------------------------------- 1 | CC = gcc 2 | CXX = g++ 3 | LD = g++ 4 | GDB = gdb 5 | -------------------------------------------------------------------------------- /escher/include/escher/bordered.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_BORDERED_H 2 | #define ESCHER_BORDERED_H 3 | 4 | #include 5 | #include 6 | 7 | class Bordered { 8 | public: 9 | void drawBorderOfRect(KDContext * ctx, KDRect rect, KDColor borderColor) const; 10 | void drawInnerRect(KDContext * ctx, KDRect rect, KDColor backgroundColor) const; 11 | protected: 12 | constexpr static KDCoordinate k_separatorThickness = Metric::CellSeparatorThickness; 13 | }; 14 | 15 | #endif 16 | 17 | -------------------------------------------------------------------------------- /escher/include/escher/context_provider.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_CONTEXT_PROVIDER_H 2 | #define ESCHER_CONTEXT_PROVIDER_H 3 | 4 | #include 5 | 6 | class ContextProvider { 7 | public: 8 | virtual Poincare::Context * context() const { return nullptr; } 9 | }; 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /escher/include/escher/even_odd_cell.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_EVEN_ODD_CELL_H 2 | #define ESCHER_EVEN_ODD_CELL_H 3 | 4 | #include 5 | 6 | class EvenOddCell : public HighlightCell { 7 | public: 8 | EvenOddCell(); 9 | virtual void setEven(bool even); 10 | virtual KDColor backgroundColor() const; 11 | void drawRect(KDContext * ctx, KDRect rect) const override; 12 | protected: 13 | bool m_even; 14 | }; 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /escher/include/escher/i18n.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_I18N_H 2 | #define ESCHER_I18N_H 3 | 4 | #include 5 | 6 | namespace I18n { 7 | enum class Message : uint16_t; 8 | enum class Language : uint8_t; 9 | const char * translate(Message m); 10 | int numberOfLanguages(); 11 | } 12 | 13 | #endif 14 | 15 | -------------------------------------------------------------------------------- /escher/include/escher/image_view.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_IMAGE_VIEW_H 2 | #define ESCHER_IMAGE_VIEW_H 3 | 4 | #include 5 | #include 6 | 7 | class ImageView : public View { 8 | public: 9 | ImageView(); 10 | void setImage(const Image * image); 11 | void drawRect(KDContext * ctx, KDRect rect) const override; 12 | private: 13 | const Image * m_image; 14 | }; 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /escher/include/escher/input_event_handler_delegate.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_INPUT_EVENT_HANDLER_DELEGATE_H 2 | #define ESCHER_INPUT_EVENT_HANDLER_DELEGATE_H 3 | 4 | class InputEventHandler; 5 | class Toolbox; 6 | class NestedMenuController; 7 | 8 | class InputEventHandlerDelegate { 9 | public: 10 | virtual Toolbox * toolboxForInputEventHandler(InputEventHandler * textInput) = 0; 11 | virtual NestedMenuController * variableBoxForInputEventHandler(InputEventHandler * textInput) = 0; 12 | }; 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /escher/include/escher/invocation.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_INVOCATION_H 2 | #define ESCHER_INVOCATION_H 3 | 4 | class Invocation { 5 | public: 6 | typedef bool (*Action)(void * context, void * sender); 7 | Invocation(Action a, void * c); 8 | bool perform(void * sender); 9 | private: 10 | Action m_action; 11 | void * m_context; 12 | }; 13 | 14 | #endif 15 | 16 | -------------------------------------------------------------------------------- /escher/include/escher/run_loop.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_RUN_LOOP_H 2 | #define ESCHER_RUN_LOOP_H 3 | 4 | #include 5 | #include 6 | 7 | class RunLoop { 8 | public: 9 | RunLoop(); 10 | void run(); 11 | void runWhile(bool (*callback)(void * ctx), void * ctx); 12 | protected: 13 | virtual bool dispatchEvent(Ion::Events::Event e) = 0; 14 | virtual int numberOfTimers(); 15 | virtual Timer * timerAtIndex(int i); 16 | private: 17 | bool step(); 18 | int m_time; 19 | }; 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /escher/include/escher/tab_view_data_source.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_TAB_VIEW_DATA_SOURCE_H 2 | #define ESCHER_TAB_VIEW_DATA_SOURCE_H 3 | 4 | extern "C" { 5 | #include 6 | } 7 | 8 | class TabViewDataSource { 9 | public: 10 | TabViewDataSource(); 11 | int activeTab() const; 12 | int selectedTab() const; 13 | void setSelectedTab(int index); 14 | void setActiveTab(int index); 15 | private: 16 | int8_t m_activeChildIndex; 17 | int8_t m_selectedChildIndex; 18 | }; 19 | 20 | #endif 21 | -------------------------------------------------------------------------------- /escher/include/escher/telemetry.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_TELEMETRY_H 2 | #define ESCHER_TELEMETRY_H 3 | 4 | #if EPSILON_TELEMETRY 5 | #define TELEMETRY_ID(x) const char * telemetryId() const override { return (x); } 6 | #else 7 | #define TELEMETRY_ID(x) 8 | #endif 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /escher/include/escher/text_area_delegate.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_TEXT_AREA_DELEGATE_H 2 | #define ESCHER_TEXT_AREA_DELEGATE_H 3 | 4 | class TextArea; 5 | 6 | class TextAreaDelegate { 7 | public: 8 | virtual bool textAreaDidReceiveEvent(TextArea * textArea, Ion::Events::Event event) = 0; 9 | }; 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /escher/include/escher/text_cursor_view.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_TEXT_CURSOR_VIEW_H 2 | #define ESCHER_TEXT_CURSOR_VIEW_H 3 | 4 | #include 5 | 6 | class TextCursorView : public View { 7 | public: 8 | using View::View; 9 | KDRect frame() const { return m_frame; } 10 | void drawRect(KDContext * ctx, KDRect rect) const override; 11 | KDSize minimalSizeForOptimalDisplay() const override; 12 | constexpr static KDCoordinate k_width = 1; 13 | }; 14 | 15 | #endif 16 | 17 | -------------------------------------------------------------------------------- /escher/include/escher/tiled_view.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_TILED_VIEW_H 2 | #define ESCHER_TILED_VIEW_H 3 | 4 | #include 5 | 6 | class TiledView : public View { 7 | using View::View; 8 | protected: 9 | void drawRect(KDContext * ctx, KDRect rect) const override; 10 | virtual void drawTile(KDContext * ctx, KDRect rect) const = 0; 11 | 12 | virtual KDColor * tile() const = 0; 13 | virtual KDSize tileSize() const = 0; 14 | }; 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /escher/include/escher/toggleable_view.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_TOGGLEABLE_VIEW_H 2 | #define ESCHER_TOGGLEABLE_VIEW_H 3 | 4 | #include 5 | 6 | class ToggleableView : public TransparentView { 7 | public: 8 | ToggleableView() : m_state(true) {} 9 | bool state() { return m_state; } 10 | void setState(bool state); 11 | protected: 12 | bool m_state; 13 | }; 14 | 15 | #endif -------------------------------------------------------------------------------- /escher/include/escher/transparent_view.h: -------------------------------------------------------------------------------- 1 | #ifndef ESCHER_TRANSPARENT_VIEW_H 2 | #define ESCHER_TRANSPARENT_VIEW_H 3 | 4 | #include 5 | 6 | class TransparentView : public View { 7 | protected: 8 | void markRectAsDirty(KDRect rect) override; 9 | }; 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /escher/src/even_odd_cell_with_ellipsis.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | EvenOddCellWithEllipsis::EvenOddCellWithEllipsis() : 4 | EvenOddCell() 5 | { 6 | } 7 | 8 | void EvenOddCellWithEllipsis::layoutSubviews(bool force) { 9 | m_ellipsisView.setFrame(bounds(), force); 10 | } 11 | -------------------------------------------------------------------------------- /escher/src/highlight_cell.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | HighlightCell::HighlightCell() : 4 | View(), 5 | m_highlighted(false) 6 | { 7 | } 8 | 9 | void HighlightCell::setHighlighted(bool highlight) { 10 | if (m_highlighted != highlight) { 11 | m_highlighted = highlight; 12 | reloadCell(); 13 | } 14 | } 15 | 16 | void HighlightCell::reloadCell() { 17 | markRectAsDirty(bounds()); 18 | } 19 | -------------------------------------------------------------------------------- /escher/src/invocation.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | Invocation::Invocation(Action a, void * c) : 4 | m_action(a), 5 | m_context(c) 6 | { 7 | } 8 | 9 | bool Invocation::perform(void * sender) { 10 | return (*m_action)(m_context, sender); 11 | } 12 | -------------------------------------------------------------------------------- /escher/src/message_table_cell_with_chevron.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | MessageTableCellWithChevron::MessageTableCellWithChevron(I18n::Message message, const KDFont * font) : 4 | MessageTableCell(message, font), 5 | m_accessoryView() 6 | { 7 | } 8 | 9 | View * MessageTableCellWithChevron::accessoryView() const { 10 | return (View *)&m_accessoryView; 11 | } 12 | 13 | -------------------------------------------------------------------------------- /escher/src/message_table_cell_with_switch.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | MessageTableCellWithSwitch::MessageTableCellWithSwitch(I18n::Message message, const KDFont * font) : 5 | MessageTableCell(message, font), 6 | m_accessoryView() 7 | { 8 | } 9 | 10 | View * MessageTableCellWithSwitch::accessoryView() const { 11 | return (View *)&m_accessoryView; 12 | } 13 | -------------------------------------------------------------------------------- /escher/src/scroll_view_data_source.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | bool ScrollViewDataSource::setOffset(KDPoint offset) { 4 | if (offset != m_offset) { 5 | m_offset = offset; 6 | if (m_delegate) { 7 | m_delegate->scrollViewDidChangeOffset(this); 8 | } 9 | return true; 10 | } 11 | return false; 12 | } 13 | -------------------------------------------------------------------------------- /escher/src/text_cursor_view.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void TextCursorView::drawRect(KDContext * ctx, KDRect rect) const { 4 | KDCoordinate height = bounds().height(); 5 | ctx->fillRect(KDRect(0, 0, 1, height), KDColorBlack); 6 | } 7 | 8 | KDSize TextCursorView::minimalSizeForOptimalDisplay() const { 9 | return KDSize(k_width, 0); 10 | } 11 | 12 | -------------------------------------------------------------------------------- /escher/src/timer.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | Timer::Timer(uint32_t period) : 4 | m_period(period), 5 | m_numberOfTicksBeforeFire(period) 6 | { 7 | } 8 | 9 | bool Timer::tick() { 10 | m_numberOfTicksBeforeFire--; 11 | if (m_numberOfTicksBeforeFire == 0) { 12 | bool needRedraw = fire(); 13 | reset(); 14 | return needRedraw; 15 | } 16 | return false; 17 | } 18 | 19 | void Timer::reset() { 20 | m_numberOfTicksBeforeFire = m_period; 21 | } 22 | -------------------------------------------------------------------------------- /escher/src/toggleable_view.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void ToggleableView::setState(bool state) { 4 | m_state = state; 5 | markRectAsDirty(bounds()); 6 | } -------------------------------------------------------------------------------- /escher/src/transparent_view.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void TransparentView::markRectAsDirty(KDRect rect) { 4 | if (m_superview) { 5 | m_superview->markRectAsDirty(rect.translatedBy(m_frame.origin())); 6 | } 7 | View::markRectAsDirty(rect); 8 | } 9 | -------------------------------------------------------------------------------- /ion/README.txt: -------------------------------------------------------------------------------- 1 | ION is the hardware abstraction layer. It does I/O. 2 | 3 | It exposes a set of headers that are implemented for various hardwares (device, simulator). 4 | It is also responsible for setting up the boot environment. 5 | -------------------------------------------------------------------------------- /ion/include/ion/backlight.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_BACKLIGHT_H 2 | #define ION_BACKLIGHT_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Backlight { 8 | 9 | constexpr uint8_t MaxBrightness = 240; 10 | void init(); 11 | bool isInitialized(); 12 | void shutdown(); 13 | void setBrightness(uint8_t b); 14 | uint8_t brightness(); 15 | 16 | } 17 | } 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /ion/include/ion/board.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_BOARD_H 2 | #define ION_BOARD_H 3 | 4 | namespace Ion { 5 | namespace Board { 6 | 7 | void lockUnlockedPCBVersion(); 8 | 9 | } 10 | } 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /ion/include/ion/clipboard.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_CLIPBOARD_H 2 | #define ION_CLIPBOARD_H 3 | 4 | namespace Ion { 5 | namespace Clipboard { 6 | 7 | /* Write the text to the system clipboard. */ 8 | void write(const char * text); 9 | 10 | /* Returns the system's clipboard text if it differs from the text previously 11 | * copied, and nullptr otherwise. */ 12 | const char * read(); 13 | 14 | } 15 | } 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /ion/include/ion/console.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_CONSOLE_H 2 | #define ION_CONSOLE_H 3 | 4 | namespace Ion { 5 | namespace Console { 6 | 7 | void writeChar(char c); 8 | char readChar(); 9 | 10 | // The lines are NULL-terminated 11 | void writeLine(const char * line, bool appendCRLF = true); 12 | void readLine(char * line, int maxLineLength); 13 | bool transmissionDone(); 14 | 15 | } 16 | } 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /ion/include/ion/exam_mode.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_EXAM_MODE_H 2 | #define ION_EXAM_MODE_H 3 | 4 | extern "C" { 5 | #include 6 | } 7 | 8 | namespace Ion { 9 | namespace ExamMode { 10 | 11 | uint8_t FetchExamMode(); 12 | void IncrementExamMode(uint8_t delta); 13 | 14 | } 15 | } 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /ion/include/ion/led.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_LED_H 2 | #define ION_LED_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace LED { 8 | 9 | KDColor getColor(); 10 | void setColor(KDColor c); 11 | void setBlinking(uint16_t periodInMilliseconds, float dutyCycle); 12 | 13 | KDColor updateColorWithPlugAndCharge(); 14 | 15 | } 16 | } 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /ion/include/ion/power.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_POWER_H 2 | #define ION_POWER_H 3 | 4 | namespace Ion { 5 | namespace Power { 6 | 7 | void suspend(bool checkIfOnOffKeyReleased = false); 8 | void standby(); 9 | 10 | } 11 | } 12 | 13 | #endif 14 | -------------------------------------------------------------------------------- /ion/include/ion/telemetry.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_TELEMETRY_H 2 | #define ION_TELEMETRY_H 3 | 4 | namespace Ion { 5 | namespace Telemetry { 6 | 7 | void reportScreen(const char * screenName); 8 | void reportEvent(const char * category, const char * action, const char * label); 9 | 10 | } 11 | } 12 | 13 | #endif 14 | -------------------------------------------------------------------------------- /ion/include/ion/timing.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_TIMING_H 2 | #define ION_TIMING_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Timing { 8 | 9 | void usleep(uint32_t us); 10 | void msleep(uint32_t ms); 11 | 12 | /* millis is the number of milliseconds ellapsed since a random epoch. 13 | * On the device, epoch is the boot time. */ 14 | uint64_t millis(); 15 | 16 | } 17 | } 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /ion/include/ion/usb.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_USB_H 2 | #define ION_USB_H 3 | 4 | namespace Ion { 5 | namespace USB { 6 | 7 | bool isPlugged(); 8 | bool isEnumerated(); // Speed-enumerated, to be accurate 9 | void clearEnumerationInterrupt(); 10 | 11 | void DFU(bool exitWithKeyboard = true); 12 | void enable(); 13 | void disable(); 14 | 15 | } 16 | } 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /ion/src/blackbox/display.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_BLACKBOX_DISPLAY_H 2 | #define ION_BLACKBOX_DISPLAY_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Display { 8 | namespace Blackbox { 9 | 10 | const KDColor * frameBufferAddress(); 11 | void setFrameBufferActive(bool enabled); 12 | void writeFrameBufferToFile(const char * filename); 13 | 14 | } 15 | } 16 | } 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /ion/src/blackbox/events.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_BLACKBOX_EVENT_H 2 | #define ION_BLACKBOX_EVENT_H 3 | 4 | namespace Ion { 5 | namespace Events { 6 | namespace Blackbox { 7 | 8 | void logAfter(int numberOfEvents); 9 | void dumpEventCount(int i); 10 | 11 | } 12 | } 13 | } 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /ion/src/blackbox/ion.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | void Ion::Timing::msleep(uint32_t ms) { 5 | } 6 | 7 | void Ion::Timing::usleep(uint32_t us) { 8 | } 9 | -------------------------------------------------------------------------------- /ion/src/blackbox/lib_export_list.txt: -------------------------------------------------------------------------------- 1 | _*epsilon_frame_buffer 2 | _*epsilon_main 3 | _*epsilon_send_event 4 | _*epsilon_wait_event_processed 5 | _*epsilon_write_frame_buffer_to_file 6 | -------------------------------------------------------------------------------- /ion/src/device/bench/bench.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_BENCH_BENCH_H 2 | #define ION_DEVICE_BENCH_BENCH_H 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace Bench { 7 | 8 | void run(); 9 | 10 | } 11 | } 12 | } 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /ion/src/device/bench/command/charge.cpp: -------------------------------------------------------------------------------- 1 | #include "command.h" 2 | #include 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace Bench { 7 | namespace Command { 8 | 9 | void Charge(const char * input) { 10 | if (input != nullptr) { 11 | reply(sSyntaxError); 12 | return; 13 | } 14 | if (Ion::Battery::isCharging()) { 15 | reply("CHARGE=ON"); 16 | } else { 17 | reply("CHARGE=OFF"); 18 | } 19 | } 20 | 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /ion/src/device/bench/command/exit.cpp: -------------------------------------------------------------------------------- 1 | #include "command.h" 2 | 3 | namespace Ion { 4 | namespace Device { 5 | namespace Bench { 6 | namespace Command { 7 | 8 | void Exit(const char * input) { 9 | if (input != nullptr) { 10 | reply(sSyntaxError); 11 | return; 12 | } 13 | reply(sOK); 14 | } 15 | 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ion/src/device/bench/command/ping.cpp: -------------------------------------------------------------------------------- 1 | #include "command.h" 2 | 3 | namespace Ion { 4 | namespace Device { 5 | namespace Bench { 6 | namespace Command { 7 | 8 | void Ping(const char * input) { 9 | if (input != nullptr) { 10 | reply(sSyntaxError); 11 | return; 12 | } 13 | reply("PONG"); 14 | } 15 | 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ion/src/device/bench/command/usb_plugged.cpp: -------------------------------------------------------------------------------- 1 | #include "command.h" 2 | #include 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace Bench { 7 | namespace Command { 8 | 9 | void USBPlugged(const char * input) { 10 | if (input != nullptr) { 11 | reply(sSyntaxError); 12 | return; 13 | } 14 | if (Ion::USB::isPlugged()) { 15 | reply(sON); 16 | } else { 17 | reply(sOFF); 18 | } 19 | } 20 | 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /ion/src/device/bench/command/vblank.cpp: -------------------------------------------------------------------------------- 1 | #include "command.h" 2 | #include 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace Bench { 7 | namespace Command { 8 | 9 | void VBlank(const char * input) { 10 | if (input != nullptr) { 11 | reply(sSyntaxError); 12 | return; 13 | } 14 | reply(Shared::POSTAndHardwareTests::VBlankOK() ? sOK : sKO); 15 | } 16 | 17 | } 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ion/src/device/bench/command_list.cpp: -------------------------------------------------------------------------------- 1 | #include "command_list.h" 2 | #include 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace Bench { 7 | 8 | const CommandHandler * CommandList::dispatch(const char * command) const { 9 | const CommandHandler * handler = m_handlers; 10 | while (handler->valid()) { 11 | if (handler->handle(command)) { 12 | return handler; 13 | } 14 | handler++; 15 | } 16 | Console::writeLine("NOT_FOUND"); 17 | return nullptr; 18 | } 19 | 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /ion/src/device/bench/command_list.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_BENCH_COMMAND_LIST_H 2 | #define ION_DEVICE_BENCH_COMMAND_LIST_H 3 | 4 | #include "command_handler.h" 5 | 6 | namespace Ion { 7 | namespace Device { 8 | namespace Bench { 9 | 10 | class CommandList { 11 | public: 12 | constexpr CommandList(const CommandHandler * handlers) : m_handlers(handlers) {} 13 | const CommandHandler * dispatch(const char * command) const; 14 | private: 15 | const CommandHandler * m_handlers; 16 | }; 17 | 18 | } 19 | } 20 | } 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /ion/src/device/bench/config/ram.ld: -------------------------------------------------------------------------------- 1 | /* Config file for a ram binary linked at address 0x20008000, up to 0x20030000. 2 | * This is used to build benchRAM. In what is left of the device's RAM, we might 3 | * put a flasher. */ 4 | 5 | CONFIG_OFFSET = 0x0; 6 | CONFIG_LENGTH = 192K - 32K; 7 | -------------------------------------------------------------------------------- /ion/src/device/bench/runner.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | void ion_main(int argc, const char * const argv[]) { 5 | // Initialize the backlight 6 | Ion::Backlight::init(); 7 | Ion::Device::Bench::run(); 8 | } 9 | -------------------------------------------------------------------------------- /ion/src/device/flasher/Makefile: -------------------------------------------------------------------------------- 1 | ion_device_flasher_src = $(addprefix ion/src/device/flasher/, \ 2 | main.cpp \ 3 | display_light.cpp:+light \ 4 | display_verbose.cpp:-light \ 5 | ) 6 | -------------------------------------------------------------------------------- /ion/src/device/flasher/config/ram.ld: -------------------------------------------------------------------------------- 1 | /* Config file for a ram binary linked at address 0x20032000, taking all the RAM 2 | * space available. It is used to build flasher that can write both in flash and 3 | * in RAM up to the address 0x20030000. */ 4 | 5 | CONFIG_OFFSET = 192K - 32K; 6 | CONFIG_LENGTH = 256K - 192K; 7 | -------------------------------------------------------------------------------- /ion/src/device/flasher/display.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_SHARED_USB_FLASHER_DISPLAY_H 2 | #define ION_DEVICE_SHARED_USB_FLASHER_DISPLAY_H 3 | 4 | namespace Flasher { 5 | namespace Display { 6 | 7 | void init(); 8 | 9 | } 10 | } 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /ion/src/device/flasher/display_light.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Flasher { 4 | namespace Display { 5 | 6 | void init() { 7 | Ion::Display::pushRectUniform(KDRect(0,0,Ion::Display::Width,Ion::Display::Height), KDColor::RGB24(0xFFFF00)); 8 | } 9 | 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ion/src/device/flasher/main.cpp: -------------------------------------------------------------------------------- 1 | #include "../shared/usb/calculator.h" 2 | #include "display.h" 3 | #include 4 | 5 | void ion_main(int argc, const char * const argv[]) { 6 | // Initialize the backlight 7 | Ion::Backlight::init(); 8 | // Initialize Flasher display 9 | Flasher::Display::init(); 10 | while (true) { 11 | Ion::USB::enable(); 12 | while (!Ion::USB::isEnumerated()) { 13 | } 14 | Ion::USB::DFU(false); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ion/src/device/log.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "regs/itm.h" 3 | 4 | // We're printing using SWO. 5 | // This is achieved by writing to the ITM register, which is sent through the 6 | // Cortex Debug bus 7 | 8 | void ion_log_string(const char * message) { 9 | char character = 0; 10 | while ((character = *message++) != 0) { 11 | if (ITM.TER()->get(0)) { 12 | ITM.STIM(0)->set(character); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ion/src/device/n0100/drivers/cache.cpp: -------------------------------------------------------------------------------- 1 | /* This is a dummy file to use in ion/src/device/shared/usb/Makefile for the 2 | * dfu.elf target. */ 3 | -------------------------------------------------------------------------------- /ion/src/device/n0100/drivers/config/serial_number.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0100_CONFIG_SERIAL_NUMBER_H 2 | #define ION_DEVICE_N0100_CONFIG_SERIAL_NUMBER_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Device { 8 | namespace SerialNumber { 9 | namespace Config { 10 | 11 | constexpr uint32_t UniqueDeviceIDAddress = 0x1FFF7A10; 12 | 13 | } 14 | } 15 | } 16 | } 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /ion/src/device/n0100/drivers/config/timing.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0100_CONFIG_TIMING_H 2 | #define ION_DEVICE_N0100_CONFIG_TIMING_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Device { 8 | namespace Timing { 9 | namespace Config { 10 | 11 | constexpr static int LoopsPerMillisecond = 2200; 12 | constexpr static int LoopsPerMicrosecond = 9; 13 | 14 | } 15 | } 16 | } 17 | } 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /ion/src/device/n0100/drivers/external_flash.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Ion { 4 | namespace Device { 5 | namespace ExternalFlash { 6 | 7 | void init() {} 8 | void shutdown() {} 9 | 10 | void MassErase() {} 11 | int SectorAtAddress(uint32_t) { return 0; } 12 | void EraseSector(int) {} 13 | void WriteMemory(uint8_t *, const uint8_t *, size_t) {} 14 | void JDECid(uint8_t *, uint8_t *, uint8_t *) {} 15 | 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ion/src/device/n0100/drivers/led.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Ion { 4 | namespace LED { 5 | 6 | KDColor updateColorWithPlugAndCharge() { 7 | /* Prevent updating LED color with charging status as the end of charge 8 | * current is never detected on N0100 model. */ 9 | return getColor(); 10 | } 11 | 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ion/src/device/n0100/drivers/usb.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace USB { 7 | 8 | void initVbus() { 9 | Config::VbusPin.init(); 10 | } 11 | 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /ion/src/device/n0100/regs/config/cortex.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0100_REGS_CONFIG_CORTEX_H 2 | #define ION_DEVICE_N0100_REGS_CONFIG_CORTEX_H 3 | 4 | #define REGS_CORTEX_CONFIG_CACHE 0 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /ion/src/device/n0100/regs/config/crc.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0100_REGS_CONFIG_CRC_H 2 | #define ION_DEVICE_N0100_REGS_CONFIG_CRC_H 3 | 4 | #define REGS_CRC_CONFIG_BYTE_ACCESS 0 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /ion/src/device/n0100/regs/config/flash.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0100_REGS_CONFIG_FLASH_H 2 | #define ION_DEVICE_N0100_REGS_CONFIG_FLASH_H 3 | 4 | #define REGS_FLASH_CONFIG_ART 0 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /ion/src/device/n0100/regs/config/pwr.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0100_REGS_CONFIG_PWR_H 2 | #define ION_DEVICE_N0100_REGS_CONFIG_PWR_H 3 | 4 | #define REGS_PWR_CONFIG_ADDITIONAL_FIELDS 0 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /ion/src/device/n0100/regs/config/rcc.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0100_REGS_CONFIG_RCC_H 2 | #define ION_DEVICE_N0100_REGS_CONFIG_RCC_H 3 | 4 | #define REGS_RCC_CONFIG_F730 0 5 | #define REGS_RCC_CONFIG_F412 1 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /ion/src/device/n0100/regs/config/syscfg.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0100_REGS_CONFIG_SYSCFG_H 2 | #define ION_DEVICE_N0100_REGS_CONFIG_SYSCFG_H 3 | 4 | #define REGS_SYSCFG_CONFIG_F412 1 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /ion/src/device/n0100/regs/config/usart.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0100_REGS_CONFIG_USART_H 2 | #define ION_DEVICE_N0100_REGS_CONFIG_USART_H 3 | 4 | #define REGS_USART_SR_OFFSET 0x00 5 | #define REGS_USART_RDR_OFFSET 0x04 6 | #define REGS_USART_TDR_OFFSET 0x04 7 | #define REGS_USART_BRR_OFFSET 0x08 8 | #define REGS_USART_CR1_OFFSET 0x0C 9 | 10 | #define REGS_USART_CR1_UE_BIT 13 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /ion/src/device/n0110/drivers/config/serial_number.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0110_CONFIG_SERIAL_NUMBER_H 2 | #define ION_DEVICE_N0110_CONFIG_SERIAL_NUMBER_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Device { 8 | namespace SerialNumber { 9 | namespace Config { 10 | 11 | constexpr uint32_t UniqueDeviceIDAddress = 0x1FF07A10; 12 | 13 | } 14 | } 15 | } 16 | } 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /ion/src/device/n0110/drivers/config/timing.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0110_CONFIG_TIMING_H 2 | #define ION_DEVICE_N0110_CONFIG_TIMING_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Device { 8 | namespace Timing { 9 | namespace Config { 10 | 11 | constexpr static int LoopsPerMillisecond = 4811; 12 | constexpr static int LoopsPerMicrosecond = 38; 13 | 14 | } 15 | } 16 | } 17 | } 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /ion/src/device/n0110/drivers/power.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0110_POWER_H 2 | #define ION_DEVICE_N0110_POWER_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Device { 8 | namespace Power { 9 | 10 | void standbyConfiguration(); 11 | 12 | } 13 | } 14 | } 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /ion/src/device/n0110/drivers/reset.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Ion { 4 | namespace Device { 5 | namespace Reset { 6 | 7 | void coreWhilePlugged() { 8 | core(); 9 | } 10 | 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ion/src/device/n0110/drivers/trampoline.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace Trampoline { 7 | 8 | uint32_t address(int index) { 9 | return 0x0020E000 + sizeof(void *) * index; 10 | } 11 | 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /ion/src/device/n0110/regs/config/cortex.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0110_REGS_CONFIG_CORTEX_H 2 | #define ION_DEVICE_N0110_REGS_CONFIG_CORTEX_H 3 | 4 | #define REGS_CORTEX_CONFIG_CACHE 1 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /ion/src/device/n0110/regs/config/crc.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0110_REGS_CONFIG_CRC_H 2 | #define ION_DEVICE_N0110_REGS_CONFIG_CRC_H 3 | 4 | #define REGS_CRC_CONFIG_BYTE_ACCESS 1 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /ion/src/device/n0110/regs/config/flash.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0110_REGS_CONFIG_FLASH_H 2 | #define ION_DEVICE_N0110_REGS_CONFIG_FLASH_H 3 | 4 | #define REGS_FLASH_CONFIG_ART 1 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /ion/src/device/n0110/regs/config/pwr.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0110_REGS_CONFIG_PWR_H 2 | #define ION_DEVICE_N0110_REGS_CONFIG_PWR_H 3 | 4 | #define REGS_PWR_CONFIG_ADDITIONAL_FIELDS 1 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /ion/src/device/n0110/regs/config/rcc.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0110_REGS_CONFIG_RCC_H 2 | #define ION_DEVICE_N0110_REGS_CONFIG_RCC_H 3 | 4 | #define REGS_RCC_CONFIG_F730 1 5 | #define REGS_RCC_CONFIG_F412 0 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /ion/src/device/n0110/regs/config/syscfg.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0110_REGS_CONFIG_SYSCFG_H 2 | #define ION_DEVICE_N0110_REGS_CONFIG_SYSCFG_H 3 | 4 | #define REGS_SYSCFG_CONFIG_F412 0 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /ion/src/device/n0110/regs/config/usart.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_N0110_REGS_CONFIG_USART_H 2 | #define ION_DEVICE_N0110_REGS_CONFIG_USART_H 3 | 4 | #define REGS_USART_SR_OFFSET 0x1C 5 | #define REGS_USART_RDR_OFFSET 0x24 6 | #define REGS_USART_TDR_OFFSET 0x28 7 | #define REGS_USART_BRR_OFFSET 0x0C 8 | #define REGS_USART_CR1_OFFSET 0x00 9 | 10 | #define REGS_USART_CR1_UE_BIT 0 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /ion/src/device/shared/Makefile: -------------------------------------------------------------------------------- 1 | include ion/src/device/shared/boot/Makefile 2 | include ion/src/device/shared/usb/Makefile 3 | include ion/src/device/shared/drivers/Makefile 4 | 5 | ion_device_src += $(addprefix ion/src/device/shared/, \ 6 | events.cpp \ 7 | stack.cpp \ 8 | ) 9 | -------------------------------------------------------------------------------- /ion/src/device/shared/boot/Makefile: -------------------------------------------------------------------------------- 1 | ion_device_src += $(addprefix ion/src/device/shared/boot/, \ 2 | isr.c \ 3 | rt0.cpp \ 4 | ) 5 | -------------------------------------------------------------------------------- /ion/src/device/shared/boot/isr.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_BOOT_ISR_H 2 | #define ION_DEVICE_BOOT_ISR_H 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | void start(); 9 | void abort(); 10 | void isr_systick(); 11 | 12 | #ifdef __cplusplus 13 | } 14 | #endif 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /ion/src/device/shared/drivers/backlight.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_SHARED_BACKLIGHT_H 2 | #define ION_DEVICE_SHARED_BACKLIGHT_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Device { 8 | namespace Backlight { 9 | 10 | void init(); 11 | bool isInitialized(); 12 | void shutdown(); 13 | void suspend(); 14 | void resume(); 15 | 16 | uint8_t level(); 17 | void setLevel(uint8_t level); 18 | 19 | void sendPulses(int n); 20 | 21 | } 22 | } 23 | } 24 | 25 | #endif 26 | -------------------------------------------------------------------------------- /ion/src/device/shared/drivers/base64.h: -------------------------------------------------------------------------------- 1 | namespace Ion { 2 | 3 | namespace Base64 { 4 | 5 | void encode(const unsigned char * input, unsigned int inputLength, char * output); 6 | 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /ion/src/device/shared/drivers/battery.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_SHARED_BATTERY_H 2 | #define ION_DEVICE_SHARED_BATTERY_H 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace Battery { 7 | 8 | void init(); 9 | void shutdown(); 10 | void initGPIO(); 11 | void initADC(); 12 | 13 | } 14 | } 15 | } 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /ion/src/device/shared/drivers/clipboard.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Ion { 4 | 5 | /* Dummy implementation 6 | * On the device, the clipboard is fully handled by Escher::Clipboard. */ 7 | 8 | void Clipboard::write(const char * text) {} 9 | const char * Clipboard::read() { return nullptr; } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /ion/src/device/shared/drivers/console.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_SHARED_CONSOLE_H 2 | #define ION_DEVICE_SHARED_CONSOLE_H 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace Console { 7 | 8 | void init(); 9 | void shutdown(); 10 | bool peerConnected(); 11 | 12 | } 13 | } 14 | } 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /ion/src/device/shared/drivers/events_keyboard_platform.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_SHARED_EVENTS_KEYBOARD_PLATFORM_H 2 | #define ION_DEVICE_SHARED_EVENTS_KEYBOARD_PLATFORM_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Events { 8 | 9 | Event getPlatformEvent(); 10 | 11 | } 12 | } 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /ion/src/device/shared/drivers/filesystem_dummy.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "filesystem.h" 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace FileSystem { 7 | 8 | void init() { 9 | 10 | } 11 | 12 | void shutdown() { 13 | 14 | } 15 | 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ion/src/device/shared/drivers/flash.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_SHARED_FLASH_H 2 | #define ION_DEVICE_SHARED_FLASH_H 3 | 4 | #include 5 | #include 6 | 7 | namespace Ion { 8 | namespace Device { 9 | namespace Flash { 10 | 11 | int TotalNumberOfSectors(); 12 | int SectorAtAddress(uint32_t address); 13 | 14 | void MassErase(); 15 | void EraseSector(int i); 16 | void WriteMemory(uint8_t * destination, uint8_t * source, size_t length); 17 | 18 | } 19 | } 20 | } 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /ion/src/device/shared/drivers/power.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_SHARED_POWER_H 2 | #define ION_DEVICE_SHARED_POWER_H 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace Power { 7 | 8 | void internalFlashSuspend(bool isLEDActive = false); 9 | void internalFlashStandby(); 10 | void configWakeUp(); 11 | 12 | void sleepConfiguration(); 13 | void stopConfiguration(); 14 | 15 | void waitUntilOnOffKeyReleased(); 16 | void enterLowPowerMode(); 17 | 18 | } 19 | } 20 | } 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /ion/src/device/shared/drivers/swd.cpp: -------------------------------------------------------------------------------- 1 | #include "swd.h" 2 | #include 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace SWD { 7 | 8 | using namespace Regs; 9 | 10 | void init() { 11 | for(const AFGPIOPin & p : Config::Pins) { 12 | p.init(); 13 | } 14 | } 15 | 16 | void shutdown() { 17 | for(const AFGPIOPin & p : Config::Pins) { 18 | p.shutdown(); 19 | } 20 | } 21 | 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /ion/src/device/shared/drivers/swd.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_SHARED_SWD_H 2 | #define ION_DEVICE_SHARED_SWD_H 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace SWD { 7 | 8 | void init(); 9 | void shutdown(); 10 | 11 | } 12 | } 13 | } 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /ion/src/device/shared/drivers/timing.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_SHARED_TIMING_H 2 | #define ION_DEVICE_SHARED_TIMING_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Device { 8 | namespace Timing { 9 | 10 | void init(); 11 | void setSysTickFrequency(int frequencyInMHz); 12 | void shutdown(); 13 | 14 | extern volatile uint64_t MillisElapsed; 15 | 16 | } 17 | } 18 | } 19 | 20 | #endif 21 | -------------------------------------------------------------------------------- /ion/src/device/shared/drivers/usb.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_DEVICE_SHARED_USB_H 2 | #define ION_DEVICE_SHARED_USB_H 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace USB { 7 | 8 | void init(); 9 | void shutdown(); 10 | void initVbus(); 11 | void initGPIO(); 12 | void shutdownGPIO(); 13 | void initOTG(); 14 | void shutdownOTG(); 15 | const char* stringDescriptor(); 16 | 17 | } 18 | } 19 | } 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /ion/src/device/shared/drivers/usb_desc.cpp: -------------------------------------------------------------------------------- 1 | #include "usb.h" 2 | #include 3 | #include 4 | 5 | namespace Ion { 6 | namespace Device { 7 | namespace USB { 8 | 9 | const char* stringDescriptor() { 10 | return Config::InterfaceStringDescriptor; 11 | } 12 | 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ion/src/device/shared/events.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Ion { 4 | namespace Events { 5 | 6 | void didPressNewKey() { 7 | } 8 | 9 | const char * Event::text() const { 10 | return defaultText(); 11 | } 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /ion/src/device/shared/stack.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | extern const void * _stack_start; 4 | extern const void * _stack_end; 5 | 6 | bool Ion::stackSafe() { 7 | volatile int stackDummy; 8 | volatile void * stackPointer = &stackDummy; 9 | return (stackPointer >= &_stack_end && stackPointer <= &_stack_start); 10 | } 11 | -------------------------------------------------------------------------------- /ion/src/device/shared/usb/boot.cpp: -------------------------------------------------------------------------------- 1 | extern "C" void abort() { 2 | } 3 | -------------------------------------------------------------------------------- /ion/src/device/shared/usb/dfu_xip.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "calculator.h" 3 | 4 | namespace Ion { 5 | namespace USB { 6 | 7 | void DFU(bool exitWithKeyboard) { 8 | Ion::updateSlotInfo(); 9 | Ion::Device::USB::Calculator::PollAndReset(exitWithKeyboard); 10 | } 11 | 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ion/src/device/shared/usb/stack/descriptor/descriptor.cpp: -------------------------------------------------------------------------------- 1 | #include "descriptor.h" 2 | #include 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace USB { 7 | 8 | void Descriptor::push(Channel * c) const { 9 | c->push(bLength()); 10 | c->push(m_bDescriptorType); 11 | } 12 | 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ion/src/device/shared/usb/stack/descriptor/device_capability_descriptor.cpp: -------------------------------------------------------------------------------- 1 | #include "device_capability_descriptor.h" 2 | 3 | namespace Ion { 4 | namespace Device { 5 | namespace USB { 6 | 7 | void DeviceCapabilityDescriptor::push(Channel * c) const { 8 | Descriptor::push(c); 9 | c->push(m_bDeviceCapabilityType); 10 | } 11 | 12 | uint8_t DeviceCapabilityDescriptor::bLength() const { 13 | return Descriptor::bLength() + sizeof(uint8_t); 14 | } 15 | 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ion/src/device/shared/usb/stack/descriptor/language_id_string_descriptor.cpp: -------------------------------------------------------------------------------- 1 | #include "language_id_string_descriptor.h" 2 | #include 3 | 4 | namespace Ion { 5 | namespace Device { 6 | namespace USB { 7 | 8 | void LanguageIDStringDescriptor::push(Channel * c) const { 9 | Descriptor::push(c); 10 | c->push((uint16_t)(0x0409)); 11 | } 12 | 13 | uint8_t LanguageIDStringDescriptor::bLength() const { 14 | return Descriptor::bLength() + sizeof(uint16_t); 15 | } 16 | 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ion/src/device/shared/usb/stack/descriptor/microsoft_os_string_descriptor.cpp: -------------------------------------------------------------------------------- 1 | #include "microsoft_os_string_descriptor.h" 2 | 3 | namespace Ion { 4 | namespace Device { 5 | namespace USB { 6 | 7 | void MicrosoftOSStringDescriptor::push(Channel * c) const { 8 | StringDescriptor::push(c); 9 | c->push(m_bMSVendorCode); 10 | c->push(m_bPad); 11 | } 12 | 13 | uint8_t MicrosoftOSStringDescriptor::bLength() const { 14 | return StringDescriptor::bLength() + 2 * sizeof(uint8_t); 15 | } 16 | 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ion/src/device/shared/usb/stack/streamable.cpp: -------------------------------------------------------------------------------- 1 | #include "streamable.h" 2 | 3 | namespace Ion { 4 | namespace Device { 5 | namespace USB { 6 | 7 | uint16_t Streamable::copy(void * target, size_t maxSize) const { 8 | Channel c(target, maxSize); 9 | push(&c); 10 | return maxSize - c.sizeLeft(); 11 | } 12 | 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ion/src/external/ed25519/keypair.c: -------------------------------------------------------------------------------- 1 | #include "ed25519.h" 2 | #include "sha512.h" 3 | #include "ge.h" 4 | 5 | 6 | void ed25519_create_keypair(unsigned char *public_key, unsigned char *private_key, const unsigned char *seed) { 7 | ge_p3 A; 8 | 9 | sha512(seed, 32, private_key); 10 | private_key[0] &= 248; 11 | private_key[31] &= 63; 12 | private_key[31] |= 64; 13 | 14 | ge_scalarmult_base(&A, private_key); 15 | ge_p3_tobytes(public_key, &A); 16 | } 17 | -------------------------------------------------------------------------------- /ion/src/external/ed25519/sc.h: -------------------------------------------------------------------------------- 1 | #ifndef SC_H 2 | #define SC_H 3 | 4 | /* 5 | The set of scalars is \Z/l 6 | where l = 2^252 + 27742317777372353535851937790883648493. 7 | */ 8 | 9 | void sc_reduce(unsigned char *s); 10 | void sc_muladd(unsigned char *s, const unsigned char *a, const unsigned char *b, const unsigned char *c); 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /ion/src/shared/crc32_eat_byte.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | constexpr uint32_t polynomial = 0x04C11DB7; 4 | 5 | uint32_t Ion::crc32EatByte(uint32_t crc, uint8_t data) { 6 | crc ^= data << 24; 7 | for (int i=8; i--;) { 8 | crc = crc & 0x80000000 ? ((crc<<1)^polynomial) : (crc << 1); 9 | } 10 | return crc; 11 | } 12 | -------------------------------------------------------------------------------- /ion/src/shared/decompress.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "../external/lz4/lz4.h" 3 | 4 | void Ion::decompress(const uint8_t * src, uint8_t * dst, int srcSize, int dstSize) { 5 | int outputSize = LZ4_decompress_safe(reinterpret_cast(src), reinterpret_cast(dst), srcSize, dstSize); 6 | (void)outputSize; // Make the compiler happy if assertions are disabled 7 | assert(outputSize == dstSize); 8 | } 9 | -------------------------------------------------------------------------------- /ion/src/shared/dummy/backlight.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Ion { 4 | namespace Backlight { 5 | 6 | uint8_t brightness() { 7 | return 0; 8 | } 9 | 10 | void setBrightness(uint8_t b) { 11 | } 12 | 13 | void init() { 14 | } 15 | 16 | bool isInitialized() { 17 | return true; 18 | } 19 | 20 | void shutdown() { 21 | } 22 | 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /ion/src/shared/dummy/battery.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | bool Ion::Battery::isCharging() { 4 | return false; 5 | } 6 | 7 | Ion::Battery::Charge Ion::Battery::level() { 8 | return Charge::FULL; 9 | } 10 | 11 | float Ion::Battery::voltage() { 12 | return 0.0f; 13 | } 14 | -------------------------------------------------------------------------------- /ion/src/shared/dummy/board.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void Ion::Board::lockUnlockedPCBVersion() { 4 | } 5 | -------------------------------------------------------------------------------- /ion/src/shared/dummy/display.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Ion { 4 | namespace Display { 5 | 6 | void POSTPushMulticolor(int rootNumberTiles, int tileSize) { 7 | } 8 | 9 | int displayUniformTilingSize10(KDColor c) { 10 | return 0; 11 | } 12 | 13 | int displayColoredTilingSize10() { 14 | return 0; 15 | } 16 | 17 | bool waitForVBlank() { 18 | return true; 19 | } 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /ion/src/shared/dummy/exam_mode.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Ion { 4 | namespace ExamMode { 5 | 6 | uint8_t FetchExamMode() { 7 | return false; 8 | } 9 | 10 | void IncrementExamMode(uint8_t delta) { 11 | } 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /ion/src/shared/dummy/fcc_id.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | const char * Ion::fccId() { 4 | return "NA"; 5 | } 6 | -------------------------------------------------------------------------------- /ion/src/shared/dummy/led.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Ion { 4 | namespace LED { 5 | 6 | KDColor getColor() { 7 | return KDColorBlack; 8 | } 9 | 10 | void setColor(KDColor c) { 11 | } 12 | 13 | void setBlinking(uint16_t period, float dutyCycle) { 14 | } 15 | 16 | KDColor updateColorWithPlugAndCharge() { 17 | return KDColorBlack; 18 | } 19 | 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ion/src/shared/dummy/pcb_version.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | const char * Ion::pcbVersion() { 4 | return "00.00"; 5 | } 6 | -------------------------------------------------------------------------------- /ion/src/shared/dummy/power.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Ion { 4 | namespace Power { 5 | 6 | void suspend(bool checkIfOnOffKeyReleased) { 7 | } 8 | 9 | void standby() { 10 | } 11 | 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ion/src/shared/dummy/serial_number.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | const char * Ion::serialNumber() { 4 | return "000000000000"; 5 | } 6 | -------------------------------------------------------------------------------- /ion/src/shared/dummy/stack.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | bool Ion::stackSafe() { 4 | return true; 5 | } 6 | -------------------------------------------------------------------------------- /ion/src/shared/dummy/usb.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Ion { 4 | namespace USB { 5 | 6 | bool isPlugged() { 7 | return false; 8 | } 9 | 10 | bool isEnumerated() { 11 | return false; 12 | } 13 | 14 | void clearEnumerationInterrupt() { 15 | } 16 | 17 | void DFU(bool) { 18 | } 19 | 20 | void enable() { 21 | } 22 | 23 | void disable() { 24 | } 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /ion/src/shared/events_stdin.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | /* Use this implementation of Ion::Events::getEvent to simulate pre-recorded key 6 | * presses. It streams event recorded to a file and played back from standard 7 | * input. */ 8 | 9 | Ion::Events::Event Ion::Events::getEvent(int * timeout) { 10 | int c = getchar(); 11 | if (c == EOF) { 12 | exit(0); 13 | } else { 14 | return Ion::Events::Event(c); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ion/src/shared/tools/Makefile: -------------------------------------------------------------------------------- 1 | $(BUILD_DIR)/ion/src/shared/tools/event_%: ion/src/shared/tools/event_%.cpp ion/src/shared/events.cpp 2 | @echo "HOSTCXX $@" 3 | @$(HOSTCXX) -std=c++11 -Iion/include $^ -o $@ 4 | -------------------------------------------------------------------------------- /ion/src/shared/tools/event_filter.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(int argc, char * argv[]) { 5 | unsigned char c = 0; 6 | while (std::cin >> c) { 7 | Ion::Events::Event e(c); 8 | if (e.isDefined() && e != Ion::Events::Termination) { 9 | std::cout << c; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ion/src/shared/verify.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "../external/ed25519/ed25519.h" 3 | 4 | bool Ion::verify(const uint8_t signature[64], const uint8_t *message, size_t message_len, const uint8_t public_key[32]) { 5 | return ed25519_verify(signature, message, message_len, public_key); 6 | } -------------------------------------------------------------------------------- /ion/src/simulator/android/gradle.properties: -------------------------------------------------------------------------------- 1 | android.enableJetifier=true 2 | android.useAndroidX=true 3 | -------------------------------------------------------------------------------- /ion/src/simulator/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/ion/src/simulator/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /ion/src/simulator/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /ion/src/simulator/android/src/res/mipmap-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /ion/src/simulator/android/src/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFB734 4 | #F7F7F7 5 | 6 | -------------------------------------------------------------------------------- /ion/src/simulator/android/src/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | NumWorks 3 | 4 | -------------------------------------------------------------------------------- /ion/src/simulator/assets/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/ion/src/simulator/assets/background.jpg -------------------------------------------------------------------------------- /ion/src/simulator/assets/horizontal_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/ion/src/simulator/assets/horizontal_arrow.png -------------------------------------------------------------------------------- /ion/src/simulator/assets/large_squircle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/ion/src/simulator/assets/large_squircle.png -------------------------------------------------------------------------------- /ion/src/simulator/assets/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /ion/src/simulator/assets/round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/ion/src/simulator/assets/round.png -------------------------------------------------------------------------------- /ion/src/simulator/assets/small_squircle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/ion/src/simulator/assets/small_squircle.png -------------------------------------------------------------------------------- /ion/src/simulator/assets/vertical_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/ion/src/simulator/assets/vertical_arrow.png -------------------------------------------------------------------------------- /ion/src/simulator/external/README.md: -------------------------------------------------------------------------------- 1 | The sdl directory contains a snapshot of the SDL source code at revision 2 | 13105:db9d0d0b7ebc 3 | 4 | Note that parts of SDL source code are also copied into the path 5 | ion/src/simulator/android/src/java because Gradle expects Java code to live 6 | there... 7 | -------------------------------------------------------------------------------- /ion/src/simulator/external/sdl/include/SDL_revision.h: -------------------------------------------------------------------------------- 1 | #define SDL_REVISION "hg-0:aaaaaaaaaaah" 2 | #define SDL_REVISION_NUMBER 0 3 | -------------------------------------------------------------------------------- /ion/src/simulator/external/sdl/src/audio/sun/SDL_sunaudio.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/ion/src/simulator/external/sdl/src/audio/sun/SDL_sunaudio.c -------------------------------------------------------------------------------- /ion/src/simulator/external/sdl/src/events/default_cursor.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/ion/src/simulator/external/sdl/src/events/default_cursor.h -------------------------------------------------------------------------------- /ion/src/simulator/external/sdl/src/haptic/android/SDL_syshaptic_c.h: -------------------------------------------------------------------------------- 1 | #include "SDL_config.h" 2 | 3 | #ifdef SDL_HAPTIC_ANDROID 4 | 5 | 6 | extern int Android_AddHaptic(int device_id, const char *name); 7 | extern int Android_RemoveHaptic(int device_id); 8 | 9 | 10 | #endif /* SDL_HAPTIC_ANDROID */ 11 | 12 | /* vi: set ts=4 sw=4 expandtab: */ 13 | -------------------------------------------------------------------------------- /ion/src/simulator/external/sdl/src/hidapi/LICENSE-orig.txt: -------------------------------------------------------------------------------- 1 | HIDAPI - Multi-Platform library for 2 | communication with HID devices. 3 | 4 | Copyright 2009, Alan Ott, Signal 11 Software. 5 | All Rights Reserved. 6 | 7 | This software may be used by anyone for any reason so 8 | long as the copyright notice in the source files 9 | remains intact. 10 | -------------------------------------------------------------------------------- /ion/src/simulator/external/sdl/src/hidapi/libusb/hidusb.cpp: -------------------------------------------------------------------------------- 1 | 2 | #define NAMESPACE HIDUSB 3 | #include "hid.c" 4 | -------------------------------------------------------------------------------- /ion/src/simulator/external/sdl/src/hidapi/linux/hidraw.cpp: -------------------------------------------------------------------------------- 1 | 2 | #define NAMESPACE HIDRAW 3 | #include "hid.c" 4 | -------------------------------------------------------------------------------- /ion/src/simulator/external/sdl/src/main/android/SDL_android_main.c: -------------------------------------------------------------------------------- 1 | /* 2 | SDL_android_main.c, placed in the public domain by Sam Lantinga 3/13/14 3 | 4 | As of SDL 2.0.6 this file is no longer necessary. 5 | */ 6 | 7 | /* vi: set ts=4 sw=4 expandtab: */ 8 | -------------------------------------------------------------------------------- /ion/src/simulator/external/sdl/src/main/uikit/SDL_uikit_main.c: -------------------------------------------------------------------------------- 1 | /* 2 | SDL_uiki_main.c, placed in the public domain by Sam Lantinga 3/18/2019 3 | */ 4 | #include "../../SDL_internal.h" 5 | 6 | /* Include the SDL main definition header */ 7 | #include "SDL_main.h" 8 | 9 | #ifdef main 10 | #undef main 11 | #endif 12 | 13 | int 14 | main(int argc, char *argv[]) 15 | { 16 | return SDL_UIKitRunApp(argc, argv, SDL_main); 17 | } 18 | 19 | /* vi: set ts=4 sw=4 expandtab: */ 20 | -------------------------------------------------------------------------------- /ion/src/simulator/external/sdl/src/main/windows/version.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/ion/src/simulator/external/sdl/src/main/windows/version.rc -------------------------------------------------------------------------------- /ion/src/simulator/external/sdl/src/main/winrt/SDL2-WinRTResource_BlankCursor.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/ion/src/simulator/external/sdl/src/main/winrt/SDL2-WinRTResource_BlankCursor.cur -------------------------------------------------------------------------------- /ion/src/simulator/external/sdl/src/main/winrt/SDL2-WinRTResources.rc: -------------------------------------------------------------------------------- 1 | #include "winres.h" 2 | LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 3 | 5000 CURSOR "SDL2-WinRTResource_BlankCursor.cur" 4 | -------------------------------------------------------------------------------- /ion/src/simulator/external/sdl/src/test/SDL_test_font.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/ion/src/simulator/external/sdl/src/test/SDL_test_font.c -------------------------------------------------------------------------------- /ion/src/simulator/external/sdl/src/video/SDL_RLEaccel.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/ion/src/simulator/external/sdl/src/video/SDL_RLEaccel.c -------------------------------------------------------------------------------- /ion/src/simulator/linux/include/SDL.h: -------------------------------------------------------------------------------- 1 | /* This file is a bit tricky. For some reason, SDL keeps including its config 2 | * this way: '#include "SDL_config.h"'. The problem with this approach is that 3 | * it prevents the usual trick of adding a header search path to use our own 4 | * version of SDL_config.h. 5 | * To work around this, and since SDL.h itself is always included using angle 6 | * brackets, we hook directly into SDL.h inclusion. */ 7 | 8 | #include "SDL_config.h" 9 | #include_next 10 | -------------------------------------------------------------------------------- /ion/src/simulator/linux/platform_files.cpp: -------------------------------------------------------------------------------- 1 | #include "../shared/platform.h" 2 | 3 | namespace Ion { 4 | namespace Simulator { 5 | namespace Platform { 6 | 7 | const char * filePathForReading(const char * extension) { 8 | return nullptr; 9 | } 10 | 11 | const char * filePathForWriting(const char * extension) { 12 | static char path[64]; 13 | if (snprintf(path, sizeof(path), "/tmp/epsilon.%s", extension) < 0) { 14 | return nullptr; 15 | } 16 | return path; 17 | } 18 | 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ion/src/simulator/linux/platform_language.cpp: -------------------------------------------------------------------------------- 1 | #include "../shared/platform.h" 2 | #include 3 | 4 | namespace Ion { 5 | namespace Simulator { 6 | namespace Platform { 7 | 8 | const char * languageCode() { 9 | static char buffer[3] = {0}; 10 | char * locale = setlocale(LC_ALL, ""); 11 | if (locale[2] == '_') { 12 | buffer[0] = locale[0]; 13 | buffer[1] = locale[1]; 14 | return buffer; 15 | } 16 | return nullptr; 17 | } 18 | 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/actions.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_SIMULATOR_ACTIONS_H 2 | #define ION_SIMULATOR_ACTIONS_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Simulator { 8 | namespace Actions { 9 | 10 | void saveState(); 11 | void takeScreenshot(); 12 | 13 | } 14 | } 15 | } 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/clipboard_helper.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_CLIPBOARD_HELPER_H 2 | #define ION_CLIPBOARD_HELPER_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Clipboard { 8 | 9 | void sendToSystemClipboard(const char * text); 10 | void fetchFromSystemClipboard(char * buffer, size_t bufferSize); 11 | 12 | } 13 | } 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/display.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_SIMULATOR_DISPLAY_H 2 | #define ION_SIMULATOR_DISPLAY_H 3 | 4 | #include 5 | #include 6 | 7 | namespace Ion { 8 | namespace Simulator { 9 | namespace Display { 10 | 11 | void init(SDL_Renderer * renderer); 12 | void shutdown(); 13 | 14 | void draw(SDL_Renderer * renderer, SDL_Rect * rect); 15 | 16 | } 17 | } 18 | } 19 | 20 | #endif 21 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/dummy/haptics_enabled.cpp: -------------------------------------------------------------------------------- 1 | #include "../haptics.h" 2 | 3 | namespace Ion { 4 | namespace Simulator { 5 | namespace Haptics { 6 | 7 | bool isEnabled() { 8 | /* Dummy default to false as failsafe. 9 | * Avoid to get haptics feedback that are not desactivable. */ 10 | return false; 11 | } 12 | 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/dummy/journal.cpp: -------------------------------------------------------------------------------- 1 | #include "../journal.h" 2 | 3 | namespace Ion { 4 | namespace Simulator { 5 | namespace Journal { 6 | 7 | void init() { 8 | } 9 | 10 | Ion::Events::Journal * replayJournal() { 11 | return nullptr; 12 | } 13 | 14 | Ion::Events::Journal * logJournal() { 15 | return nullptr; 16 | } 17 | 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/dummy/keyboard_callback.cpp: -------------------------------------------------------------------------------- 1 | #include "../keyboard.h" 2 | 3 | namespace Ion { 4 | namespace Simulator { 5 | namespace Keyboard { 6 | 7 | void didScan() { 8 | } 9 | 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/dummy/language.cpp: -------------------------------------------------------------------------------- 1 | #include "../platform.h" 2 | 3 | namespace Ion { 4 | namespace Simulator { 5 | namespace Platform { 6 | 7 | const char * languageCode() { 8 | return nullptr; 9 | } 10 | 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/dummy/telemetry_init.cpp: -------------------------------------------------------------------------------- 1 | #include "../platform.h" 2 | 3 | namespace Ion { 4 | namespace Simulator { 5 | namespace Telemetry { 6 | 7 | void init() { 8 | } 9 | 10 | void shutdown() { 11 | } 12 | 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/dummy/window_callback.cpp: -------------------------------------------------------------------------------- 1 | #include "../window.h" 2 | 3 | namespace Ion { 4 | namespace Simulator { 5 | namespace Window { 6 | 7 | void didRefresh() { 8 | } 9 | 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/events.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_SIMULATOR_EVENTS_H 2 | #define ION_SIMULATOR_EVENTS_H 3 | 4 | #include 5 | #include 6 | 7 | namespace Ion { 8 | namespace Events { 9 | 10 | static constexpr size_t sharedExternalTextBufferSize = sizeof(SDL_TextInputEvent::text); 11 | char * sharedExternalTextBuffer(); 12 | 13 | } 14 | } 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/filesystem.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_SIMULATOR_FILESYSTEM_H 2 | #define ION_SIMULATOR_FILESYSTEM_H 3 | 4 | #include 5 | 6 | #include 7 | 8 | namespace Ion { 9 | namespace Simulator { 10 | namespace FileSystem { 11 | 12 | void init(); 13 | 14 | namespace Config { 15 | 16 | constexpr size_t k_totalSize = 8 * 1024 * 1024; 17 | constexpr size_t k_pageSize = 256; 18 | constexpr size_t k_blockSize = 4 * 1024; 19 | 20 | } 21 | 22 | } 23 | } 24 | } 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/framebuffer.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_SIMULATOR_FRAMEBUFFER_H 2 | #define ION_SIMULATOR_FRAMEBUFFER_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Simulator { 8 | namespace Framebuffer { 9 | 10 | const KDColor * address(); 11 | void setActive(bool enabled); 12 | 13 | } 14 | } 15 | } 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/haptics.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_SIMULATOR_HAPTICS_H 2 | #define ION_SIMULATOR_HAPTICS_H 3 | 4 | namespace Ion { 5 | namespace Simulator { 6 | namespace Haptics { 7 | 8 | void init(); 9 | bool isEnabled(); 10 | void rumble(); 11 | void shutdown(); 12 | 13 | } 14 | } 15 | } 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/journal.cpp: -------------------------------------------------------------------------------- 1 | #include "journal.h" 2 | #include "journal/queue_journal.h" 3 | #include 4 | 5 | namespace Ion { 6 | namespace Simulator { 7 | namespace Journal { 8 | 9 | void init() { 10 | Events::logTo(logJournal()); 11 | } 12 | 13 | Events::Journal * replayJournal() { 14 | static QueueJournal journal; 15 | return &journal; 16 | } 17 | 18 | Events::Journal * logJournal() { 19 | static QueueJournal journal; 20 | return &journal; 21 | } 22 | 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/journal.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_SIMULATOR_JOURNAL_H 2 | #define ION_SIMULATOR_JOURNAL_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Simulator { 8 | namespace Journal { 9 | 10 | void init(); 11 | 12 | Ion::Events::Journal * replayJournal(); 13 | Ion::Events::Journal * logJournal(); 14 | 15 | } 16 | } 17 | } 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/keyboard.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_SIMULATOR_KEYBOARD_H 2 | #define ION_SIMULATOR_KEYBOARD_H 3 | 4 | #include 5 | #include 6 | 7 | namespace Ion { 8 | namespace Simulator { 9 | namespace Keyboard { 10 | 11 | void keyDown(Ion::Keyboard::Key k); 12 | void keyUp(Ion::Keyboard::Key k); 13 | bool scanHandlesSDLKey(SDL_Scancode key); 14 | void didScan(); 15 | 16 | } 17 | } 18 | } 19 | 20 | #endif 21 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/random.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_SIMULATOR_RANDOM_H 2 | #define ION_SIMULATOR_RANDOM_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Simulator { 8 | namespace Random { 9 | 10 | void init(); 11 | 12 | } 13 | } 14 | } 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/state_file.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_SIMULATOR_STATE_FILE_H 2 | #define ION_SIMULATOR_STATE_FILE_H 3 | 4 | namespace Ion { 5 | namespace Simulator { 6 | namespace StateFile { 7 | 8 | void load(const char * filename); 9 | void save(const char * filename); 10 | 11 | } 12 | } 13 | } 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/telemetry.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_SIMULATOR_TELEMETRY_H 2 | #define ION_SIMULATOR_TELEMETRY_H 3 | 4 | #include 5 | 6 | namespace Ion { 7 | namespace Simulator { 8 | namespace Telemetry { 9 | 10 | void init(); 11 | void shutdown(); 12 | 13 | } 14 | } 15 | } 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /ion/src/simulator/shared/window.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_SIMULATOR_WINDOW_H 2 | #define ION_SIMULATOR_WINDOW_H 3 | 4 | namespace Ion { 5 | namespace Simulator { 6 | namespace Window { 7 | 8 | void init(); 9 | void quit(); 10 | 11 | bool isHeadless(); 12 | 13 | void setNeedsRefresh(); 14 | void refresh(); 15 | void relayout(); 16 | 17 | void didRefresh(); 18 | 19 | } 20 | } 21 | } 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /ion/src/simulator/web/exports.h: -------------------------------------------------------------------------------- 1 | #ifndef ION_SIMULATOR_WEB_EXPORTS_H 2 | #define ION_SIMULATOR_WEB_EXPORTS_H 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | const char * IonSoftwareVersion(); 9 | const char * IonPatchLevel(); 10 | void IonDisplayForceRefresh(); 11 | void IonSimulatorKeyboardKeyDown(int keyNumber); 12 | void IonSimulatorKeyboardKeyUp(int keyNumber); 13 | void IonSimulatorEventsPushEvent(int eventNumber); 14 | 15 | #ifdef __cplusplus 16 | } 17 | #endif 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /ion/src/simulator/web/include/SDL.h: -------------------------------------------------------------------------------- 1 | /* This file is a bit tricky. For some reason, SDL keeps including its config 2 | * this way: '#include "SDL_config.h"'. The problem with this approach is that 3 | * it prevents the usual trick of adding a header search path to use our own 4 | * version of SDL_config.h. 5 | * To work around this, and since SDL.h itself is always included using angle 6 | * brackets, we hook directly into SDL.h inclusion. */ 7 | 8 | #include "SDL_config.h" 9 | #include_next 10 | -------------------------------------------------------------------------------- /ion/src/simulator/web/window_callback.cpp: -------------------------------------------------------------------------------- 1 | #include "../shared/window.h" 2 | #include 3 | 4 | namespace Ion { 5 | namespace Simulator { 6 | namespace Window { 7 | 8 | void didRefresh() { 9 | /* Notify JS that the display has been refreshed. 10 | * This gives us a chance to mirror the display in fullscreen mode. */ 11 | EM_ASM(if (typeof Module.onDisplayRefresh === "function") { Module.onDisplayRefresh(); }); 12 | } 13 | 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ion/test/device/Makefile: -------------------------------------------------------------------------------- 1 | -include ion/test/device/$(MODEL)/Makefile 2 | -------------------------------------------------------------------------------- /ion/test/device/n0110/Makefile: -------------------------------------------------------------------------------- 1 | test_ion_external_flash_read_src += $(addprefix ion/test/$(PLATFORM)/$(MODEL)/, \ 2 | external_flash_read.cpp \ 3 | ) 4 | 5 | test_ion_external_flash_write_src += $(addprefix ion/test/$(PLATFORM)/$(MODEL)/, \ 6 | external_flash_write.cpp \ 7 | ) 8 | 9 | test_ion_external_flash_src += $(test_ion_external_flash_read_src) $(test_ion_external_flash_write_src) 10 | $(call object_for,$(test_ion_external_flash_src)): SFLAGS += $(ION_DEVICE_SFLAGS) 11 | -------------------------------------------------------------------------------- /ion/test/keyboard.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | using namespace Ion::Keyboard; 6 | 7 | QUIZ_CASE(ion_keyboard) { 8 | for (Key k : ValidKeys) { 9 | for (Key l : ValidKeys) { 10 | quiz_assert(State(k).keyDown(l) == (k == l)); 11 | } 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /kandinsky/fonts/LargeFont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/kandinsky/fonts/LargeFont.ttf -------------------------------------------------------------------------------- /kandinsky/fonts/SmallFont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/kandinsky/fonts/SmallFont.ttf -------------------------------------------------------------------------------- /kandinsky/include/kandinsky.h: -------------------------------------------------------------------------------- 1 | #ifndef KANDINSKY_KANDINSKY_H 2 | #define KANDINSKY_KANDINSKY_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /kandinsky/include/kandinsky/coordinate.h: -------------------------------------------------------------------------------- 1 | #ifndef KANDINSKY_COORDINATE_H 2 | #define KANDINSKY_COORDINATE_H 3 | 4 | #include 5 | 6 | typedef int16_t KDCoordinate; 7 | 8 | #define KDCOORDINATE_MAX INT16_MAX 9 | #define KDCOORDINATE_MIN INT16_MIN 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /liba/Makefile.bridge: -------------------------------------------------------------------------------- 1 | SFLAGS += -Iliba/include/bridge 2 | 3 | liba_src += liba/src/bridge.c 4 | -------------------------------------------------------------------------------- /liba/include/alloca.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_ALLOCA_H 2 | #define LIBA_ALLOCA_H 3 | 4 | #define alloca(size) __builtin_alloca(size) 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /liba/include/assert.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_ASSERT_H 2 | #define LIBA_ASSERT_H 3 | 4 | #include "private/macros.h" 5 | 6 | #ifdef NDEBUG 7 | #define assert(e) ((void)0) 8 | #else 9 | #define assert(e) ((void) ((e) ? ((void)0) : __assert(#e, __FILE__, __LINE__))) 10 | #endif 11 | 12 | LIBA_BEGIN_DECLS 13 | 14 | void __assert(const char * expression, const char * file, int line); 15 | 16 | LIBA_END_DECLS 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /liba/include/bridge/alloca.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_BRIDGE_ALLOCA_H 2 | #define LIBA_BRIDGE_ALLOCA_H 3 | 4 | #if __MINGW32__ 5 | #include 6 | #else 7 | #include_next 8 | #endif 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /liba/include/bridge/string.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_BRIDGE_STRING_H 2 | #define LIBA_BRIDGE_STRING_H 3 | 4 | #include_next 5 | 6 | #include "../private/macros.h" 7 | 8 | LIBA_BEGIN_DECLS 9 | 10 | #if (__GLIBC__ || __MINGW32__) 11 | size_t strlcat(char * dst, const char * src, size_t dstSize); 12 | size_t strlcpy(char * dst, const char * src, size_t len); 13 | #endif 14 | 15 | LIBA_END_DECLS 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /liba/include/ctype.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_CTYPE_H 2 | #define LIBA_CTYPE_H 3 | 4 | int isupper(int c); 5 | int isxdigit(int c); 6 | int isdigit(int c); 7 | int tolower(int c); 8 | 9 | #endif 10 | -------------------------------------------------------------------------------- /liba/include/float.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_FLOAT_H 2 | #define LIBA_FLOAT_H 3 | 4 | #define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ 5 | 6 | #define FLT_MAX 1E+37f 7 | #define FLT_MIN 1E-37f 8 | #define FLT_EPSILON 1.1920928955078125e-7 9 | 10 | #define DBL_MAX 1.79769313486231571e+308 11 | #define DBL_MIN 2.22507385850720138e-308 12 | #define DBL_EPSILON 2.2204460492503131e-16 13 | 14 | #define LDBL_MANT_DIG (-1) 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /liba/include/limits.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_LIMITS_H 2 | #define LIBA_LIMITS_H 3 | 4 | #define INT_MAX 0x7fffffff 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /liba/include/private/ieee754.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_IEEE754_H 2 | #define LIBA_IEEE754_H 3 | 4 | #include 5 | 6 | uint32_t ieee754man32(float x); 7 | uint8_t ieee754exp32(float x); 8 | 9 | uint64_t ieee754man64(double x); 10 | uint16_t ieee754exp64(double x); 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /liba/include/private/macros.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_MACROS_H 2 | #define LIBA_MACROS_H 3 | 4 | #ifdef __cplusplus 5 | #define LIBA_BEGIN_DECLS extern "C" { 6 | #define LIBA_END_DECLS } 7 | #else 8 | #define LIBA_BEGIN_DECLS 9 | #define LIBA_END_DECLS 10 | #endif 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /liba/include/stdarg.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_STDARG_H 2 | #define LIBA_STDARG_H 3 | 4 | typedef __builtin_va_list va_list; 5 | 6 | #define va_start(ap,last) __builtin_va_start(ap,last) 7 | #define va_arg(ap,type) __builtin_va_arg(ap,type) 8 | #define va_end(ap) __builtin_va_end(ap) 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /liba/include/stdbool.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_STDBOOL_H 2 | #define LIBA_STDBOOL_H 3 | 4 | #ifndef __cplusplus 5 | 6 | typedef _Bool bool; 7 | 8 | #define true 1 9 | #define false 0 10 | 11 | #endif 12 | 13 | #endif 14 | -------------------------------------------------------------------------------- /liba/include/stddef.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_STDDEF_H 2 | #define LIBA_STDDEF_H 3 | 4 | #define NULL 0 5 | 6 | typedef int ssize_t; 7 | typedef unsigned int size_t; 8 | typedef int ptrdiff_t; 9 | 10 | #define offsetof(type, field) __builtin_offsetof(type, field) 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /liba/include/stdio.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_STDIO_H 2 | #define LIBA_STDIO_H 3 | 4 | #define stdin 0 5 | #define stdout 0 6 | #define EOF 0 7 | 8 | typedef void FILE; 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /liba/include/stdlib.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_MALLOC_H 2 | #define LIBA_MALLOC_H 3 | 4 | #include "private/macros.h" 5 | #include 6 | 7 | LIBA_BEGIN_DECLS 8 | 9 | void free(void *ptr); 10 | void * malloc(size_t size); 11 | void * realloc(void *ptr, size_t size); 12 | void * calloc(size_t count, size_t size); 13 | 14 | void abort(void) __attribute__((noreturn)); 15 | 16 | int abs(int n); 17 | 18 | LIBA_END_DECLS 19 | 20 | #endif 21 | -------------------------------------------------------------------------------- /liba/include/strings.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_STRINGS_H 2 | #define LIBA_STRINGS_H 3 | 4 | #include 5 | 6 | void bzero(void * s, size_t n); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /liba/include/unistd.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_UNISTD_H 2 | #define LIBA_UNISTD_H 3 | 4 | #define SEEK_SET 0 5 | #define SEEK_CUR 1 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /liba/src/abs.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int abs(int n) { 4 | return n < 0 ? -n : n; 5 | } -------------------------------------------------------------------------------- /liba/src/aeabi-rt/atexit.c: -------------------------------------------------------------------------------- 1 | /* See the "Run-time ABI for the ARM Architecture", Section 4.4.5 */ 2 | 3 | int __cxa_atexit(void (* dtor)(void * this), void * object, void * handle); 4 | 5 | int __aeabi_atexit(void * object, void (*destroyer)(void *), void * dso_handle) { 6 | return __cxa_atexit(destroyer, object, dso_handle); 7 | } 8 | -------------------------------------------------------------------------------- /liba/src/aeabi-rt/memclr.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | /* See the "Run-time ABI for the ARM Architecture", Section 4.3.4 */ 5 | 6 | void __aeabi_memclr(void * dest, size_t n) { 7 | memset(dest, 0, n); 8 | } 9 | 10 | void __aeabi_memclr4(void * dest, size_t n) { 11 | memset(dest, 0, n); 12 | } 13 | 14 | void __aeabi_memclr8(void * dest, size_t n) { 15 | memset(dest, 0, n); 16 | } 17 | -------------------------------------------------------------------------------- /liba/src/aeabi-rt/memcpy.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | /* See the "Run-time ABI for the ARM Architecture", Section 4.3.4 */ 5 | 6 | void __aeabi_memcpy(void * dest, const void * src, size_t n) { 7 | memcpy(dest, src, n); 8 | } 9 | 10 | // TODO: optimize aeabi_memcpy4 to take advantage of the 4-byte alignment 11 | void __aeabi_memcpy4(void * dest, const void * src, size_t n) { 12 | memcpy(dest, src, n); 13 | } 14 | -------------------------------------------------------------------------------- /liba/src/armv7m/setjmp.s: -------------------------------------------------------------------------------- 1 | .syntax unified 2 | 3 | .section .text 4 | .align 2 5 | .thumb 6 | .global setjmp 7 | setjmp: 8 | /* Save all the registers into the jump buffer */ 9 | mov ip, sp 10 | // storing r4-r9, r10=sl, r11=fp, ip=sp, lr 11 | stmia r0!, { r4-r11, ip, lr} 12 | // storing floating point registers 13 | vstmia r0!, {s16-s31} 14 | // Special storing: fpscr 15 | vmrs r1, fpscr 16 | str r1, [r0, #4] 17 | /* And then return 0 */ 18 | mov a1, #0 19 | bx lr 20 | .type setjmp, function 21 | -------------------------------------------------------------------------------- /liba/src/assert.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | void __attribute__((noinline)) __assert(const char * expression, const char * file, int line) { 5 | abort(); 6 | } 7 | -------------------------------------------------------------------------------- /liba/src/bridge.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #if (__GLIBC__ || __MINGW32__) 4 | #include "strlcat.c" 5 | #include "strlcpy.c" 6 | #endif 7 | -------------------------------------------------------------------------------- /liba/src/bzero.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void bzero(void * s, size_t n) { 4 | char *t = s; 5 | while (n != 0) { 6 | *t++ = 0; 7 | n--; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /liba/src/calloc.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void * calloc(size_t count, size_t size) { 4 | void * result = malloc(count * size); 5 | if (result != NULL) { 6 | bzero(result, count * size); 7 | } 8 | return result; 9 | } 10 | -------------------------------------------------------------------------------- /liba/src/ctype.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int isupper(int c) { 4 | return (c >= 'A' && c <= 'Z'); 5 | } 6 | 7 | int isxdigit(int c) { 8 | return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'); 9 | } 10 | 11 | int isdigit(int c) { 12 | return (c >= '0' && c <= '9'); 13 | } 14 | 15 | int tolower(int c) { 16 | return isupper(c) ? 'a' + c - 'A' : c; 17 | } 18 | -------------------------------------------------------------------------------- /liba/src/errno.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int errno = 0; 4 | -------------------------------------------------------------------------------- /liba/src/external/openbsd/include/sys/cdefs.h: -------------------------------------------------------------------------------- 1 | // OpenBSD requires this file to be present 2 | -------------------------------------------------------------------------------- /liba/src/external/openbsd/include/sys/types.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_OPENBSD_SYS_TYPES_H 2 | #define LIBA_OPENBSD_SYS_TYPES_H 3 | 4 | #include 5 | 6 | #define LITTLE_ENDIAN 0x1234 7 | #define BIG_ENDIAN 0x4321 8 | #define BYTE_ORDER LITTLE_ENDIAN 9 | 10 | typedef uint32_t u_int32_t; 11 | typedef uint64_t u_int64_t; 12 | 13 | #endif 14 | -------------------------------------------------------------------------------- /liba/src/external/openbsd/s_signgam.c: -------------------------------------------------------------------------------- 1 | #include "math.h" 2 | #include "math_private.h" 3 | int signgam = 0; 4 | -------------------------------------------------------------------------------- /liba/src/external/softfloat/port/platform.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_SOFTFLOAT_PORT_PLATFORM_H 2 | #define LIBA_SOFTFLOAT_PORT_PLATFORM_H 1 3 | 4 | #define LITTLEENDIAN 1 5 | #define INLINE inline 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /liba/src/fpclassify.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int __fpclassify(double x) { 5 | if (ieee754exp64(x) == 0) { 6 | if (ieee754man64(x) == 0x0) { 7 | return FP_ZERO; 8 | } else { 9 | return FP_SUBNORMAL; 10 | } 11 | } 12 | if (ieee754exp64(x) == 0x7FF) { 13 | if (ieee754man64(x) == 0) { 14 | return FP_INFINITE; 15 | } else { 16 | return FP_NAN; 17 | } 18 | } 19 | return FP_NORMAL; 20 | } 21 | -------------------------------------------------------------------------------- /liba/src/fpclassifyf.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int __fpclassifyf(float x) { 5 | if (ieee754exp32(x) == 0) { 6 | if (ieee754man32(x) == 0x0) { 7 | return FP_ZERO; 8 | } else { 9 | return FP_SUBNORMAL; 10 | } 11 | } 12 | if (ieee754exp32(x) == 0xFF) { 13 | if (ieee754man32(x) == 0) { 14 | return FP_INFINITE; 15 | } else { 16 | return FP_NAN; 17 | } 18 | } 19 | return FP_NORMAL; 20 | } 21 | -------------------------------------------------------------------------------- /liba/src/memcmp.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int memcmp(const void * s1, const void * s2, size_t n) { 4 | char * source1 = (char *)s1; 5 | char * source2 = (char *)s2; 6 | while (n--) { 7 | if (*source1 != *source2) { 8 | return *source1 - *source2; 9 | } 10 | source1++; 11 | source2++; 12 | } 13 | return 0; 14 | } 15 | -------------------------------------------------------------------------------- /liba/src/memcpy.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | // Work around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51205 4 | void * memcpy(void * dst, const void * src, size_t n) __attribute__((externally_visible)); 5 | 6 | void * __attribute__((noinline)) memcpy(void * dst, const void * src, size_t n) { 7 | char * destination = (char *)dst; 8 | char * source = (char *)src; 9 | 10 | while (n--) { 11 | *destination++ = *source++; 12 | } 13 | 14 | return dst; 15 | } 16 | -------------------------------------------------------------------------------- /liba/src/memset.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | // Work around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51205 4 | void * memset(void * b, int c, size_t len) __attribute__((externally_visible)); 5 | 6 | void * __attribute__((noinline)) memset(void * b, int c, size_t len) { 7 | char * destination = (char *)b; 8 | while (len--) { 9 | *destination++ = (unsigned char)c; 10 | } 11 | return b; 12 | } 13 | -------------------------------------------------------------------------------- /liba/src/nearbyint.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | // See nearbyintf.c for comments 4 | 5 | #undef nearbyint 6 | 7 | double nearbyint(double x) { 8 | return round(x); 9 | } 10 | -------------------------------------------------------------------------------- /liba/src/strchr.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | char * strchr(const char * s, int c) { 4 | while (*s != NULL && *s != c) { 5 | s++; 6 | } 7 | if (*s == c) { 8 | return (char *)s; 9 | } 10 | return NULL; 11 | } 12 | -------------------------------------------------------------------------------- /liba/src/strcmp.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int strcmp(const char *s1, const char *s2) { 4 | while(*s1 != NULL && *s1 == *s2) { 5 | s1++; 6 | s2++; 7 | } 8 | return (*(unsigned char *)s1) - (*(unsigned char *)s2); 9 | } 10 | 11 | int strncmp(const char *s1, const char *s2, size_t n) { 12 | while (n-- > 0) { 13 | if (*s1 == NULL || *s2 != *s1) { 14 | return (*(unsigned char *)s1) - (*(unsigned char *)s2); 15 | } 16 | s1++; 17 | s2++; 18 | } 19 | return 0; 20 | } 21 | -------------------------------------------------------------------------------- /liba/src/strcpy.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | char* strcpy(char * dst, const char * src) { 4 | const size_t srcLen = strlen(src); 5 | 6 | return memcpy(dst, src, srcLen); 7 | } 8 | -------------------------------------------------------------------------------- /liba/src/strcspn.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | size_t strcspn(const char *str, const char *chars) { 4 | size_t i = 0; 5 | while (str[i] && !strchr(chars, str[i])) 6 | i++; 7 | return i; 8 | } 9 | -------------------------------------------------------------------------------- /liba/src/strlcat.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | size_t strlcat(char * dst, const char * src, size_t dstSize) { 4 | const size_t srcLen = strlen(src); 5 | size_t dstLen = strlen(dst); 6 | if (dstLen >= dstSize) { 7 | return dstSize+srcLen; 8 | } 9 | if (srcLen < dstSize-dstLen) { 10 | memcpy(dst+dstLen, src, srcLen+1); 11 | } else { 12 | memcpy(dst+dstLen, src, dstSize-1); 13 | dst[dstLen+dstSize-1] = 0; 14 | } 15 | return dstLen+srcLen; 16 | } 17 | -------------------------------------------------------------------------------- /liba/src/strlcpy.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | size_t strlcpy(char * dst, const char * src, size_t dstSize) { 4 | const size_t srcLen = strlen(src); 5 | if (srcLen+1 < dstSize) { 6 | memcpy(dst, src, srcLen+1); 7 | } else if (dstSize != 0) { 8 | memcpy(dst, src, dstSize-1); 9 | dst[dstSize-1] = 0; 10 | } 11 | return srcLen; 12 | } 13 | -------------------------------------------------------------------------------- /liba/src/strlen.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | size_t strlen(const char * s) { 4 | const char * str = s; 5 | while (*str) 6 | str++; 7 | return str - s; 8 | } 9 | -------------------------------------------------------------------------------- /liba/src/strncat.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | char *strncat(char * dest, const char * src, size_t n) { 4 | int i, j; 5 | 6 | for (i = 0; dest[i] != '\0'; i++); 7 | 8 | for (j = 0; src[j] != '\0' && j < n; j++) { 9 | dest[i + j] = src[j]; 10 | } 11 | 12 | dest[i + j] = '\0'; 13 | 14 | return dest; 15 | } 16 | -------------------------------------------------------------------------------- /liba/src/strncpy.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | char* strncpy(char * dst, const char * src, size_t dstSize) { 4 | const size_t srcLen = strnlen(src, dstSize); 5 | 6 | if (srcLen != dstSize) 7 | memset(dst+srcLen, '\0', dstSize - srcLen); 8 | 9 | return memcpy(dst, src, srcLen); 10 | } 11 | -------------------------------------------------------------------------------- /liba/src/strnlen.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | size_t strnlen(const char * s, size_t max) { 4 | size_t i; 5 | 6 | for(i = 0; i < max; ++i) 7 | if (s[i] == '\0') 8 | break; 9 | 10 | return i; 11 | } 12 | -------------------------------------------------------------------------------- /liba/src/strspn.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | size_t strspn(const char *str, const char *chars) { 4 | size_t i = 0; 5 | while (str[i] && strchr(chars, str[i])) 6 | i++; 7 | return i; 8 | } 9 | -------------------------------------------------------------------------------- /liba/test/helpers.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBA_TEST_HELPERS_H 2 | #define LIBA_TEST_HELPERS_H 3 | 4 | #define assert_signed(type) assert((type)-1 < 0) 5 | #define assert_unsigned(type) assert((type)-1 >= 0) 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /liba/test/setjmp.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | QUIZ_CASE(set_jmp_long_jmp) { 6 | jmp_buf env; 7 | int res = setjmp(env); 8 | if (res == 1) { 9 | return; 10 | } 11 | int newres = (0 == res) ? res : res + 1; 12 | longjmp(env, newres); 13 | quiz_assert(false); 14 | } 15 | -------------------------------------------------------------------------------- /liba/test/stddef.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include "helpers.h" 5 | 6 | QUIZ_CASE(liba_stddef) { 7 | quiz_assert(NULL == 0); 8 | 9 | assert_unsigned(size_t); 10 | quiz_assert(sizeof(size_t) == __SIZEOF_SIZE_T__); 11 | assert_signed(ssize_t); 12 | quiz_assert(sizeof(ssize_t) == __SIZEOF_SIZE_T__); 13 | } 14 | -------------------------------------------------------------------------------- /liba/test/strlcpy.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | QUIZ_CASE(liba_strlcpy) { 6 | char * t = "Hello"; 7 | char buffer[16]; 8 | size_t result = strlcpy(buffer, t, 2); 9 | quiz_assert(result == strlen(t)); 10 | quiz_assert(buffer[0] == 'H'); 11 | quiz_assert(buffer[1] == NULL); 12 | } 13 | -------------------------------------------------------------------------------- /libaxx/Makefile: -------------------------------------------------------------------------------- 1 | SFLAGS += -Ilibaxx/include 2 | 3 | libaxx_src += $(addprefix libaxx/src/, new.cpp) 4 | libaxx_src += $(addprefix libaxx/src/cxxabi/, atexit.cpp pure_virtual.cpp) 5 | libaxx_src += $(addprefix libaxx/include/external/libcxx/, complex.cpp) 6 | -------------------------------------------------------------------------------- /libaxx/README.txt: -------------------------------------------------------------------------------- 1 | libaxx is an adhoc libc++, just like liba is an adhoc libc. 2 | 3 | See liba for more informations. 4 | -------------------------------------------------------------------------------- /libaxx/include/algorithm: -------------------------------------------------------------------------------- 1 | #ifndef LIBAXX_ALGORITHM 2 | #define LIBAXX_ALGORITHM 3 | 4 | namespace std { 5 | 6 | template 7 | inline const T & min(const T & a, const T & b ) { 8 | return (b < a) ? b : a; 9 | } 10 | 11 | template 12 | inline const T & max(const T & a, const T & b ) { 13 | return (b > a) ? b : a; 14 | } 15 | 16 | } 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /libaxx/include/complex: -------------------------------------------------------------------------------- 1 | #ifndef LIBAXX_COMPLEX 2 | #define LIBAXX_COMPLEX 3 | 4 | #define THINNER_HEADER 5 | #include "external/libcxx/complex" 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /libaxx/include/complex.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBAXX_COMPLEX 2 | #define LIBAXX_COMPLEX 3 | 4 | #include "external/libcxx/complex.h" 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /libaxx/include/new: -------------------------------------------------------------------------------- 1 | #ifndef LIBAXX_NEW 2 | #define LIBAXX_NEW 3 | 4 | #include 5 | 6 | inline void * operator new(size_t size, void * ptr) noexcept { 7 | return ptr; 8 | } 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /libaxx/include/type_traits: -------------------------------------------------------------------------------- 1 | #ifndef LIBAXX_TYPE_TRAITS 2 | #define LIBAXX_TYPE_TRAITS 3 | 4 | namespace std { 5 | 6 | template struct remove_reference {typedef T type;}; 7 | template struct remove_reference {typedef T type;}; 8 | template struct remove_reference {typedef T type;}; 9 | 10 | } 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /libaxx/include/utility: -------------------------------------------------------------------------------- 1 | #ifndef LIBAXX_UTILITY 2 | #define LIBAXX_UTILITY 3 | 4 | #include 5 | 6 | namespace std { 7 | 8 | template typename remove_reference::type&& move(T&& a) { 9 | return (typename remove_reference::type&&)a; 10 | } 11 | 12 | } 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /libaxx/src/cxxabi/pure_virtual.cpp: -------------------------------------------------------------------------------- 1 | extern "C" { 2 | #include 3 | } 4 | 5 | /* C++ code calls __cxa_pure_virtual when a pure-virtual method is called. 6 | * This is an error case, so we just redirect it to abort. */ 7 | 8 | extern "C" void __cxa_pure_virtual() { 9 | abort(); 10 | } 11 | -------------------------------------------------------------------------------- /libaxx/src/new.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | // See the C++ standard, section 3.7.4 for those definitions 4 | 5 | void * operator new(size_t size) { 6 | return malloc(size); 7 | } 8 | 9 | void operator delete(void * ptr) noexcept { 10 | free(ptr); 11 | } 12 | 13 | void * operator new[](size_t size) { 14 | return ::operator new(size); 15 | } 16 | 17 | void operator delete[](void * ptr) noexcept { 18 | ::operator delete(ptr); 19 | } 20 | -------------------------------------------------------------------------------- /poincare/include/poincare/erf_inv.h: -------------------------------------------------------------------------------- 1 | #ifndef POINCARE_ERFINV_H 2 | #define POINCARE_ERFINV_H 3 | 4 | namespace Poincare { 5 | 6 | double erfInv(double y); 7 | 8 | } 9 | 10 | #endif 11 | 12 | -------------------------------------------------------------------------------- /poincare/include/poincare/init.h: -------------------------------------------------------------------------------- 1 | #ifndef POINCARE_INIT_H 2 | #define POINCARE_INIT_H 3 | 4 | namespace Poincare { 5 | 6 | void Init(); 7 | 8 | void Tidy(); 9 | 10 | } 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /poincare/src/beta_function.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | namespace Poincare { 6 | 7 | double BetaFunction(double a, double b) { 8 | if (a < 0.0 || b < 0.0) { 9 | return NAN; 10 | } 11 | return std::exp(std::lgamma(a) + std::lgamma(b) - std::lgamma(a+b)); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /poincare/src/init.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | namespace Poincare { 7 | 8 | void Init() { 9 | // Create and register the shared static pool 10 | static TreePool pool; 11 | TreePool::RegisterPool(&pool); 12 | } 13 | 14 | void Tidy() { 15 | // Clean Expression (reset the SymbolReplacementsLock) 16 | Expression::Tidy(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /poincare/src/matrix_reduced_row_echelon_form.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Poincare { 4 | 5 | constexpr Expression::FunctionHelper MatrixReducedRowEchelonForm::s_functionHelper; 6 | 7 | const char * MatrixReducedRowEchelonFormNode::functionHelperName() const { return MatrixReducedRowEchelonForm::s_functionHelper.name(); } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /poincare/src/matrix_row_echelon_form.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace Poincare { 4 | 5 | constexpr Expression::FunctionHelper MatrixRowEchelonForm::s_functionHelper; 6 | 7 | const char * MatrixRowEchelonFormNode::functionHelperName() const { return MatrixRowEchelonForm::s_functionHelper.name(); } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /poincare/test/tree/helpers.h: -------------------------------------------------------------------------------- 1 | int pool_size(); 2 | void assert_pool_size(int i); 3 | 4 | #if POINCARE_TREE_LOG 5 | void log_pool(); 6 | void log_pool_tree(); 7 | #endif 8 | -------------------------------------------------------------------------------- /python/port/genhdr/moduledefs.h: -------------------------------------------------------------------------------- 1 | // Automatically generated by makemoduledefs.py. 2 | 3 | #if (MICROPY_PY_ARRAY) 4 | extern const struct _mp_obj_module_t mp_module_uarray; 5 | #define MODULE_DEF_MP_QSTR_UARRAY { MP_ROM_QSTR(MP_QSTR_uarray), MP_ROM_PTR(&mp_module_uarray) }, 6 | #else 7 | #define MODULE_DEF_MP_QSTR_UARRAY 8 | #endif 9 | 10 | 11 | #define MICROPY_REGISTERED_MODULES \ 12 | MODULE_DEF_MP_QSTR_UARRAY \ 13 | // MICROPY_REGISTERED_MODULES 14 | -------------------------------------------------------------------------------- /python/port/mod/ion/modion.cpp: -------------------------------------------------------------------------------- 1 | extern "C" { 2 | #include "modion.h" 3 | #include 4 | #include 5 | } 6 | #include 7 | #include "port.h" 8 | 9 | mp_obj_t modion_keyboard_keydown(mp_obj_t key_o) { 10 | Ion::Keyboard::Key key = static_cast(mp_obj_get_int(key_o)); 11 | Ion::Keyboard::State state = Ion::Keyboard::scan(); 12 | micropython_port_interrupt_if_needed(); 13 | return mp_obj_new_bool(state.keyDown(key)); 14 | } 15 | -------------------------------------------------------------------------------- /python/port/mod/ion/modion.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | mp_obj_t modion_keyboard_keydown(mp_obj_t key_o); 4 | -------------------------------------------------------------------------------- /python/port/mod/kandinsky/modkandinsky.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | mp_obj_t modkandinsky_color(size_t n_args, const mp_obj_t *args); 4 | mp_obj_t modkandinsky_get_pixel(mp_obj_t x, mp_obj_t y); 5 | mp_obj_t modkandinsky_set_pixel(mp_obj_t x, mp_obj_t y, mp_obj_t color); 6 | mp_obj_t modkandinsky_draw_string(size_t n_args, const mp_obj_t *args); 7 | mp_obj_t modkandinsky_fill_rect(size_t n_args, const mp_obj_t *args); 8 | -------------------------------------------------------------------------------- /python/port/mod/matplotlib/modmatplotlib.cpp: -------------------------------------------------------------------------------- 1 | extern "C" { 2 | #include "modmatplotlib.h" 3 | #include "pyplot/modpyplot.h" 4 | } 5 | #include 6 | 7 | 8 | // Internal functions 9 | 10 | mp_obj_t modmatplotlib___init__() { 11 | modpyplot___init__(); 12 | return mp_const_none; 13 | } 14 | -------------------------------------------------------------------------------- /python/port/mod/matplotlib/modmatplotlib.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | mp_obj_t modmatplotlib___init__(); 4 | -------------------------------------------------------------------------------- /python/port/mod/matplotlib/pyplot/plot_controller.cpp: -------------------------------------------------------------------------------- 1 | #include "plot_controller.h" 2 | 3 | namespace Matplotlib { 4 | 5 | void PlotController::viewWillAppear() { 6 | m_store->initRange(); 7 | curveView()->reload(); 8 | } 9 | 10 | void PlotController::viewDidDisappear() { 11 | m_store->flush(); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /python/port/mod/time/modtime.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | mp_obj_t modtime_sleep(mp_obj_t seconds_o); 4 | mp_obj_t modtime_monotonic(); 5 | -------------------------------------------------------------------------------- /python/port/mphalport.c: -------------------------------------------------------------------------------- 1 | #include "py/mpstate.h" 2 | #include "py/mphal.h" 3 | 4 | #if MICROPY_KBD_EXCEPTION 5 | 6 | int mp_interrupt_char; 7 | 8 | void mp_hal_set_interrupt_char(int c) { 9 | if (c != -1) { 10 | mp_obj_exception_clear_traceback(MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception))); 11 | } 12 | mp_interrupt_char = c; 13 | } 14 | 15 | void mp_keyboard_interrupt(void) { 16 | MP_STATE_VM(mp_pending_exception) = MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception)); 17 | } 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /python/port/mphalport.h: -------------------------------------------------------------------------------- 1 | #ifndef PYTHON_MPHALPORT_H 2 | #define PYTHON_MPHALPORT_H 3 | 4 | extern int mp_interrupt_char; 5 | void mp_hal_set_interrupt_char(int c); 6 | void mp_keyboard_interrupt(void); 7 | const char * mp_hal_input(const char * prompt); 8 | 9 | #endif 10 | -------------------------------------------------------------------------------- /python/test/time.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "execution_environment.h" 3 | 4 | QUIZ_CASE(python_time) { 5 | TestExecutionEnvironment env = init_environement(); 6 | assert_command_execution_fails(env, "monotonic()"); 7 | assert_command_execution_succeeds(env, "from time import *"); 8 | assert_command_execution_succeeds(env, "monotonic()"); 9 | assert_command_execution_succeeds(env, "sleep(23)"); 10 | deinit_environment(); 11 | } 12 | 13 | -------------------------------------------------------------------------------- /python/test/urandom.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "execution_environment.h" 3 | 4 | QUIZ_CASE(python_random) { 5 | TestExecutionEnvironment env = init_environement(); 6 | assert_command_execution_fails(env, "random()"); 7 | assert_command_execution_succeeds(env, "from urandom import *"); 8 | assert_command_execution_succeeds(env, "random()"); 9 | assert_command_execution_succeeds(env, "getrandbits(23)"); 10 | deinit_environment(); 11 | } 12 | -------------------------------------------------------------------------------- /quiz/README.txt: -------------------------------------------------------------------------------- 1 | Quiz is a simple test framework. 2 | 3 | To write a test using quiz, all you have to do is #include quiz.h, and then 4 | define tests using the TEST(my_test_name) macro. 5 | 6 | You should then add your test files to the "tests" variable in the Makefile. 7 | 8 | Then running "make test" will compile and run your tests! 9 | -------------------------------------------------------------------------------- /quiz/gdb_script.gdb: -------------------------------------------------------------------------------- 1 | # Let's connect to OpenOCD 2 | target remote localhost:3333 3 | 4 | # Load our executable 5 | load test.elf 6 | 7 | # Tell OpenOCD to reset and halt 8 | monitor reset halt 9 | 10 | # Add a breakpoint 11 | break debugger 12 | 13 | # Launch the test suite 14 | continue 15 | -------------------------------------------------------------------------------- /quiz/include/quiz.h: -------------------------------------------------------------------------------- 1 | #ifndef QUIZ_H 2 | #define QUIZ_H 3 | 4 | #include 5 | 6 | #ifdef __cplusplus 7 | #define QUIZ_CASE(name) extern "C" { void quiz_case_##name();}; void quiz_case_##name() 8 | #else 9 | #define QUIZ_CASE(name) void quiz_case_##name() 10 | #endif 11 | 12 | #ifdef __cplusplus 13 | extern "C" { 14 | #endif 15 | 16 | void quiz_assert(bool condition); 17 | void quiz_print(const char * message); 18 | 19 | #ifdef __cplusplus 20 | } 21 | #endif 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /quiz/include/quiz/stopwatch.h: -------------------------------------------------------------------------------- 1 | #ifndef QUIZ_STOPWATCH_H 2 | #define QUIZ_STOPWATCH_H 3 | 4 | #include 5 | 6 | #ifdef __cplusplus 7 | extern "C" { 8 | #endif 9 | 10 | uint64_t quiz_stopwatch_start(); 11 | void quiz_stopwatch_print_lap(uint64_t startTime); 12 | 13 | #ifdef __cplusplus 14 | } 15 | #endif 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /quiz/src/assertions.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | void quiz_assert(bool condition) { 6 | if (!condition) { 7 | abort(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /quiz/src/i18n.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace I18n { 4 | 5 | const char * translate(Message m) { 6 | return nullptr; 7 | } 8 | 9 | int numberOfLanguages() { 10 | return 0; 11 | } 12 | 13 | } 14 | 15 | -------------------------------------------------------------------------------- /quiz/src/symbols.h: -------------------------------------------------------------------------------- 1 | typedef void (*QuizCase)(void); 2 | 3 | extern QuizCase quiz_cases[]; 4 | extern char * quiz_case_names[]; 5 | -------------------------------------------------------------------------------- /tests/calculation/calculation_addition.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_addition.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_display_mode.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_display_mode.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_display_mode2.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_display_mode2.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_division.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_division.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_exponential.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_exponential.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_linear_input.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_linear_input.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_logarithm.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_logarithm.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_multiplication.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_multiplication.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_natural_input.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_natural_input.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_natural_input2.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_natural_input2.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_natural_input3.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_natural_input3.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_natural_input4.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_natural_input4.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_polar.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_polar.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_power.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_power.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_radian.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_radian.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_root.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_root.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_subtraction.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_subtraction.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_symbol.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_symbol.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_syntax_error.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_syntax_error.esc -------------------------------------------------------------------------------- /tests/calculation/calculation_trigonometry.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/calculation/calculation_trigonometry.esc -------------------------------------------------------------------------------- /tests/function/function_graph.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_graph.esc -------------------------------------------------------------------------------- /tests/function/function_graph_axes.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_graph_axes.esc -------------------------------------------------------------------------------- /tests/function/function_graph_calculations_integral.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_graph_calculations_integral.esc -------------------------------------------------------------------------------- /tests/function/function_graph_calculations_intersection.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_graph_calculations_intersection.esc -------------------------------------------------------------------------------- /tests/function/function_graph_calculations_max.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_graph_calculations_max.esc -------------------------------------------------------------------------------- /tests/function/function_graph_calculations_min.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_graph_calculations_min.esc -------------------------------------------------------------------------------- /tests/function/function_graph_calculations_tangent.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_graph_calculations_tangent.esc -------------------------------------------------------------------------------- /tests/function/function_graph_calculations_zero.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_graph_calculations_zero.esc -------------------------------------------------------------------------------- /tests/function/function_graph_derivative.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_graph_derivative.esc -------------------------------------------------------------------------------- /tests/function/function_graph_goto.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_graph_goto.esc -------------------------------------------------------------------------------- /tests/function/function_graph_preadjustment.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_graph_preadjustment.esc -------------------------------------------------------------------------------- /tests/function/function_graph_zoom.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_graph_zoom.esc -------------------------------------------------------------------------------- /tests/function/function_list.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_list.esc -------------------------------------------------------------------------------- /tests/function/function_list_active.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_list_active.esc -------------------------------------------------------------------------------- /tests/function/function_list_rename.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_list_rename.esc -------------------------------------------------------------------------------- /tests/function/function_sine.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_sine.esc -------------------------------------------------------------------------------- /tests/function/function_table.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_table.esc -------------------------------------------------------------------------------- /tests/function/function_table_derivative.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_table_derivative.esc -------------------------------------------------------------------------------- /tests/function/function_table_interval.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/function/function_table_interval.esc -------------------------------------------------------------------------------- /tests/probability/probability_binomial.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/probability/probability_binomial.esc -------------------------------------------------------------------------------- /tests/probability/probability_binomial_calculation.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/probability/probability_binomial_calculation.esc -------------------------------------------------------------------------------- /tests/probability/probability_exponential.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/probability/probability_exponential.esc -------------------------------------------------------------------------------- /tests/probability/probability_exponential_calculation.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/probability/probability_exponential_calculation.esc -------------------------------------------------------------------------------- /tests/probability/probability_normal.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/probability/probability_normal.esc -------------------------------------------------------------------------------- /tests/probability/probability_normal_calculation.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/probability/probability_normal_calculation.esc -------------------------------------------------------------------------------- /tests/probability/probability_poisson.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/probability/probability_poisson.esc -------------------------------------------------------------------------------- /tests/probability/probability_poisson_calculation.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/probability/probability_poisson_calculation.esc -------------------------------------------------------------------------------- /tests/probability/probability_uniform.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/probability/probability_uniform.esc -------------------------------------------------------------------------------- /tests/probability/probability_uniform_calculation.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/probability/probability_uniform_calculation.esc -------------------------------------------------------------------------------- /tests/python/python_console.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/python/python_console.esc -------------------------------------------------------------------------------- /tests/python/python_console_delete.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/python/python_console_delete.esc -------------------------------------------------------------------------------- /tests/python/python_console_toolbox.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/python/python_console_toolbox.esc -------------------------------------------------------------------------------- /tests/python/python_console_variablebox.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/python/python_console_variablebox.esc -------------------------------------------------------------------------------- /tests/python/python_editor.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/python/python_editor.esc -------------------------------------------------------------------------------- /tests/python/python_editor_delete.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/python/python_editor_delete.esc -------------------------------------------------------------------------------- /tests/python/python_menu.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/python/python_menu.esc -------------------------------------------------------------------------------- /tests/python/python_menu_auto_import.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/python/python_menu_auto_import.esc -------------------------------------------------------------------------------- /tests/python/python_menu_delete.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/python/python_menu_delete.esc -------------------------------------------------------------------------------- /tests/python/python_menu_rename.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/python/python_menu_rename.esc -------------------------------------------------------------------------------- /tests/regression/regression_calculation.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_calculation.esc -------------------------------------------------------------------------------- /tests/regression/regression_cubic.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_cubic.esc -------------------------------------------------------------------------------- /tests/regression/regression_exponential.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_exponential.esc -------------------------------------------------------------------------------- /tests/regression/regression_graph.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_graph.esc -------------------------------------------------------------------------------- /tests/regression/regression_graph_axes.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_graph_axes.esc -------------------------------------------------------------------------------- /tests/regression/regression_graph_preadjustment.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_graph_preadjustment.esc -------------------------------------------------------------------------------- /tests/regression/regression_graph_zoom.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_graph_zoom.esc -------------------------------------------------------------------------------- /tests/regression/regression_list.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_list.esc -------------------------------------------------------------------------------- /tests/regression/regression_list_clear.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_list_clear.esc -------------------------------------------------------------------------------- /tests/regression/regression_list_formula.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_list_formula.esc -------------------------------------------------------------------------------- /tests/regression/regression_logarithmic.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_logarithmic.esc -------------------------------------------------------------------------------- /tests/regression/regression_multiple_regressions.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_multiple_regressions.esc -------------------------------------------------------------------------------- /tests/regression/regression_power.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_power.esc -------------------------------------------------------------------------------- /tests/regression/regression_quadratic.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_quadratic.esc -------------------------------------------------------------------------------- /tests/regression/regression_quartic.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/regression/regression_quartic.esc -------------------------------------------------------------------------------- /tests/sequence/sequence_graph.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/sequence/sequence_graph.esc -------------------------------------------------------------------------------- /tests/sequence/sequence_graph_axes.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/sequence/sequence_graph_axes.esc -------------------------------------------------------------------------------- /tests/sequence/sequence_graph_goto.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/sequence/sequence_graph_goto.esc -------------------------------------------------------------------------------- /tests/sequence/sequence_graph_preadjustment.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/sequence/sequence_graph_preadjustment.esc -------------------------------------------------------------------------------- /tests/sequence/sequence_graph_sum.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/sequence/sequence_graph_sum.esc -------------------------------------------------------------------------------- /tests/sequence/sequence_graph_zoom.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/sequence/sequence_graph_zoom.esc -------------------------------------------------------------------------------- /tests/sequence/sequence_linking.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/sequence/sequence_linking.esc -------------------------------------------------------------------------------- /tests/sequence/sequence_list.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/sequence/sequence_list.esc -------------------------------------------------------------------------------- /tests/sequence/sequence_list_delete.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/sequence/sequence_list_delete.esc -------------------------------------------------------------------------------- /tests/sequence/sequence_list_type.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/sequence/sequence_list_type.esc -------------------------------------------------------------------------------- /tests/sequence/sequence_recurring.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/sequence/sequence_recurring.esc -------------------------------------------------------------------------------- /tests/sequence/sequence_table.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/sequence/sequence_table.esc -------------------------------------------------------------------------------- /tests/sequence/sequence_table_interval.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/sequence/sequence_table_interval.esc -------------------------------------------------------------------------------- /tests/settings/settings.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/settings/settings.esc -------------------------------------------------------------------------------- /tests/settings/settings_about.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/settings/settings_about.esc -------------------------------------------------------------------------------- /tests/settings/settings_angle_unit.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/settings/settings_angle_unit.esc -------------------------------------------------------------------------------- /tests/settings/settings_complex.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/settings/settings_complex.esc -------------------------------------------------------------------------------- /tests/settings/settings_exam_mode.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/settings/settings_exam_mode.esc -------------------------------------------------------------------------------- /tests/settings/settings_language.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/settings/settings_language.esc -------------------------------------------------------------------------------- /tests/settings/settings_result_format.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/settings/settings_result_format.esc -------------------------------------------------------------------------------- /tests/settings/settings_writing_format.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/settings/settings_writing_format.esc -------------------------------------------------------------------------------- /tests/shared/toolbox.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/shared/toolbox.esc -------------------------------------------------------------------------------- /tests/shared/variable_box_empty.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/shared/variable_box_empty.esc -------------------------------------------------------------------------------- /tests/shared/variable_box_expression.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/shared/variable_box_expression.esc -------------------------------------------------------------------------------- /tests/shared/variable_box_function.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/shared/variable_box_function.esc -------------------------------------------------------------------------------- /tests/solver/solver_approximate_1.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/solver/solver_approximate_1.esc -------------------------------------------------------------------------------- /tests/solver/solver_approximate_2.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/solver/solver_approximate_2.esc -------------------------------------------------------------------------------- /tests/solver/solver_linear_system_1.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/solver/solver_linear_system_1.esc -------------------------------------------------------------------------------- /tests/solver/solver_linear_system_2.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/solver/solver_linear_system_2.esc -------------------------------------------------------------------------------- /tests/solver/solver_linear_system_3.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/solver/solver_linear_system_3.esc -------------------------------------------------------------------------------- /tests/solver/solver_linear_system_4.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/solver/solver_linear_system_4.esc -------------------------------------------------------------------------------- /tests/solver/solver_linear_system_5.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/solver/solver_linear_system_5.esc -------------------------------------------------------------------------------- /tests/solver/solver_linear_system_6.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/solver/solver_linear_system_6.esc -------------------------------------------------------------------------------- /tests/solver/solver_no_variable.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/solver/solver_no_variable.esc -------------------------------------------------------------------------------- /tests/solver/solver_non_linear_sytem.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/solver/solver_non_linear_sytem.esc -------------------------------------------------------------------------------- /tests/solver/solver_polynome_2.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/solver/solver_polynome_2.esc -------------------------------------------------------------------------------- /tests/solver/solver_undefined_equation.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/solver/solver_undefined_equation.esc -------------------------------------------------------------------------------- /tests/statistics/statistics_box.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/statistics/statistics_box.esc -------------------------------------------------------------------------------- /tests/statistics/statistics_calculation.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/statistics/statistics_calculation.esc -------------------------------------------------------------------------------- /tests/statistics/statistics_histo.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/statistics/statistics_histo.esc -------------------------------------------------------------------------------- /tests/statistics/statistics_histo_parameters.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/statistics/statistics_histo_parameters.esc -------------------------------------------------------------------------------- /tests/statistics/statistics_list.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/statistics/statistics_list.esc -------------------------------------------------------------------------------- /tests/statistics/statistics_list_clear.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/statistics/statistics_list_clear.esc -------------------------------------------------------------------------------- /tests/statistics/statistics_list_formula.esc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lambda-Numworks/Lambda/424e8d9fb2e49e350e3df9df3d0366f6aa7c7876/tests/statistics/statistics_list_formula.esc --------------------------------------------------------------------------------