src/context.c

changeset 7
9dd76cbd6c90
parent 6
302971e8599b
child 11
d83af80eb09b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/context.c	Wed Nov 01 21:00:33 2023 +0100
@@ -0,0 +1,84 @@
+/*
+ * 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/context.h"
+#include "ascension/error.h"
+#include "ascension/utils.h"
+
+#include <cx/linked_list.h>
+
+#include <SDL2/SDL.h>
+#include <SDL2/SDL_ttf.h>
+
+AscContext asc_context;
+
+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 data
+    memset(asc_context.windows, 0, sizeof (asc_context.windows));
+
+    // 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 data
+    for (unsigned int i = 0 ; i < ASC_MAX_WINDOWS ; i++) {
+        asc_window_destroy(&asc_context.windows[i]);
+    }
+
+    // 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.");
+}

mercurial