diff --git a/libs/basic/CMakeLists.txt b/libs/basic/CMakeLists.txt index e6d2238..3911060 100644 --- a/libs/basic/CMakeLists.txt +++ b/libs/basic/CMakeLists.txt @@ -4,15 +4,15 @@ SPDX-FileCopyrightText: 2021 Avinal Kumar #]=======================================================================] cmake_minimum_required(VERSION 3.16) -project(basic LANGUAGES C CXX) +project(basic LANGUAGES C) file(GLOB BASIC_SRC src/*.c) add_library(basic "") target_sources(basic PRIVATE ${BASIC_SRC}) target_include_directories(basic PRIVATE include/basic) -add_executable(basic_exec main.cc) -target_include_directories(basic_exec PRIVATE include/basic include) -target_link_libraries(basic_exec PRIVATE basic) +#add_executable(basic_exec main.cc) +#target_include_directories(basic_exec PRIVATE include/basic) +#target_link_libraries(basic_exec PRIVATE basic) diff --git a/libs/basic/include/basic.hpp b/libs/basic/include/basic.hpp deleted file mode 100644 index edd21a8..0000000 --- a/libs/basic/include/basic.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/** - * SPDX-License-Identifier: Apache-2.0 - * SPDX-FileCopyrightText: 2021 Avinal Kumar - * - * @file basic.hpp - * @brief Wrapper around basic - */ - -#ifndef BASIC_BASIC_HPP_ -#define BASIC_BASIC_HPP_ - -#include -extern "C" { -#include "basic/parser.h" -} - -class basic { -private: - std::string last_error = ""; - static std::string output; - static int out(int ch) { - output.push_back(ch); - return 1; - } - - static int in() { return getchar(); } - -public: - basic(); - ~basic(); - bool evaluate_line(const std::string& line); - std::string run(); - std::string get_error(); -}; - -std::string basic::output = ""; - -basic::basic() { - basic_init(1024 * 8, 2048); - basic_register_io(out, in); -} - -basic::~basic() { basic_destroy(); } - -bool basic::evaluate_line(const std::string& line) { - char* input = const_cast(line.c_str()); - basic_eval(input); - if (evaluate_last_error()) { - last_error.append(evaluate_last_error()); - clear_last_error(); - return false; - } - return true; -} - -std::string basic::get_error() { return last_error; } - -std::string basic::run() { return output; } - -#endif // BASIC_BASIC_HPP_ \ No newline at end of file diff --git a/libs/basic/include/basic/basic.hpp b/libs/basic/include/basic/basic.hpp new file mode 100644 index 0000000..d39c5a4 --- /dev/null +++ b/libs/basic/include/basic/basic.hpp @@ -0,0 +1,57 @@ +/** + * SPDX-License-Identifier: Apache-2.0 + * SPDX-FileCopyrightText: 2021 Avinal Kumar + * + * @file basic.hpp + * @brief Wrapper around basic + */ + +#ifndef BASIC_BASIC_HPP_ +#define BASIC_BASIC_HPP_ + +#include +extern "C" { +#include "parser.h" +} + +class basic { +private: + std::string last_error = ""; + static std::string output; + static int out(int ch) { + output.push_back(ch); + return 1; + } + + static int in() { return getchar(); } + +public: + basic() { + basic_init(1024 * 8, 2048); + basic_register_io(out, in); + } + + ~basic() { basic_destroy(); } + + bool evaluate_line(const std::string& line) { + char* input = const_cast(line.c_str()); + basic_eval(input); + if (evaluate_last_error()) { + last_error.append(evaluate_last_error()); + clear_last_error(); + return false; + } + return true; + } + + std::string get_error() { return last_error; } + + std::string run() { + evaluate_line("RUN"); + return output; + } + + void clear_output() { output = ""; } +}; + +#endif // BASIC_BASIC_HPP_ \ No newline at end of file diff --git a/libs/basic/include/basic/parser.h b/libs/basic/include/basic/parser.h index 4df0b76..2e19005 100644 --- a/libs/basic/include/basic/parser.h +++ b/libs/basic/include/basic/parser.h @@ -8,9 +8,9 @@ #ifndef BASIC_PARSER_H_ #define BASIC_PARSER_H_ -#include +#include "io.h" #include -#include +#include "tokenizer.h" float evaluate(char* expression_string);