/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ----------------------------------------------------------------------------- * File: Console.c * Description: * This file contains the functions for reading and writting to the console. * * Author: Mineplay * ----------------------------------------------------------------------------- */ #include "../../Include/Iony/Core/Console.h" #include "Iony/Utils/Error.h" #if defined(_WIN32) #include static HANDLE iony_standard_console_in = 0; #elif defined(__GNUC__) #include "../../Include/Iony/Utils/System.h" #endif IonyError iony_print(const char *text, const long length) { if (text == 0) { return IONY_ERROR_INVALID_POINTER; } #if defined(_WIN32) static HANDLE standard_console_out_handle = 0; if (standard_console_out_handle == 0) { standard_console_out_handle = GetStdHandle(STD_OUTPUT_HANDLE); } DWORD characters_written; if (!WriteFile(standard_console_out_handle, text, length, &characters_written, 0)) { return IONY_ERROR_SYSTEM_CALL_FAILED; } #elif defined(__GNUC__) if (iony_system_call(IONY_SYS_WRITE, 1, (long)text, length, 0, 0, 0) < 0) { return IONY_ERROR_SYSTEM_CALL_FAILED; } #endif return IONY_ERROR_NONE; } IonyError iony_get_character(char *character) { if (character == 0) { return IONY_ERROR_INVALID_POINTER; } #if defined(_WIN32) if (iony_standard_console_in == 0) { iony_standard_console_in = GetStdHandle(STD_INPUT_HANDLE); } DWORD characters_read; if (!ReadFile(iony_standard_console_in, character, 1, &characters_read, 0)) { return IONY_ERROR_SYSTEM_CALL_FAILED; } #elif defined(__GNUC__) if (iony_system_call(IONY_SYS_READ, 0, (long)character, 1, 0, 0, 0)) { return IONY_ERROR_SYSTEM_CALL_FAILED; } #endif return IONY_ERROR_NONE; }