diff -r 302971e8599b -r 9dd76cbd6c90 src/core.c --- a/src/core.c Wed Nov 01 20:09:49 2023 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,125 +0,0 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * Copyright 2023 Mike Becker. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "ascension/core.h" - -#include -#include - -#include -#include - -AscContext asc_context; - -// forward declare the destructor functions that reside in other units -void asc_window_destroy_impl(void* obj); - -void asc_context_initialize(void) { - if (asc_test_flag(asc_context.flags, ASC_FLAG_INITILIZED)) - return; - asc_clear_flag(&asc_context.flags, ASC_FLAG_HAS_ERROR); - - // initialize error buffer - cxBufferInit( - &asc_context.error_buffer, - NULL, - 256, - NULL, - CX_BUFFER_AUTO_EXTEND - ); - - // initialize lists - asc_context.windows = cxLinkedListCreateSimple(CX_STORE_POINTERS); - asc_context.windows->simple_destructor = - (cx_destructor_func)asc_window_destroy_impl; - - // initialize SDL - if (SDL_Init(SDL_INIT_VIDEO) < 0) { - asc_error(SDL_GetError()); - } else { - if (TTF_Init() < 0) { - asc_error(TTF_GetError()); - } - } - SDL_ClearError(); - asc_set_flag(&asc_context.flags, ASC_FLAG_INITILIZED); - asc_dprintf("Ascension context initialized."); -} - -void asc_context_destroy(void) { - // destroy lists - cxListDestroy(asc_context.windows); - - // quit SDL - if (TTF_WasInit()) - TTF_Quit(); - SDL_Quit(); - - // destroy the error buffer - cxBufferDestroy(&asc_context.error_buffer); - asc_context.flags = 0; - asc_dprintf("Ascension context destroyed."); -} - -void asc_error_cchar(char const* text) { - asc_error_cxstr(cx_str(text)); -} - -void asc_error_cuchar(unsigned char const* text) { - asc_error_cxstr(cx_str((char const*)text)); -} - -void asc_error_cxstr(cxstring text) { - if (text.length == 0) return; - - // write error to debug output - asc_dprintf("ERROR: %*.s", (int)text.length, text.ptr); - - // write error to buffer - CxBuffer* buf = &asc_context.error_buffer; - cxBufferWrite(text.ptr, 1, text.length, buf); - cxBufferPut(buf, '\n'); - - asc_set_flag(&asc_context.flags, ASC_FLAG_HAS_ERROR); -} - -bool asc_has_error(void) { - return asc_test_flag(asc_context.flags, ASC_FLAG_HAS_ERROR); -} - -char const* asc_get_error(void) { - // we zero-terminate the current buffer contents before providing them - cxBufferPut(&asc_context.error_buffer, 0); - --asc_context.error_buffer.pos; - --asc_context.error_buffer.size; - return asc_context.error_buffer.space; -} - -void asc_clear_error(void) { - cxBufferClear(&asc_context.error_buffer); - asc_clear_flag(&asc_context.flags, ASC_FLAG_HAS_ERROR); -}