src/error.c

Wed, 02 Jul 2025 23:21:17 +0200

author
Mike Becker <universe@uap-core.de>
date
Wed, 02 Jul 2025 23:21:17 +0200
changeset 174
0009b982bc7d
parent 149
560772519ff9
permissions
-rw-r--r--

resolve TODOs regarding input.h

a) mouse position must be integer, because it can be negative (though rarely)
b) we should not trade "access complexity" for space in the scancodes array

106
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 * Copyright 2025 Mike Becker. All rights reserved.
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 *
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 * Redistribution and use in source and binary forms, with or without
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * modification, are permitted provided that the following conditions are met:
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 *
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 * 1. Redistributions of source code must retain the above copyright
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * notice, this list of conditions and the following disclaimer.
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 *
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 * 2. Redistributions in binary form must reproduce the above copyright
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * notice, this list of conditions and the following disclaimer in the
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * documentation and/or other materials provided with the distribution.
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 *
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * POSSIBILITY OF SUCH DAMAGE.
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 */
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 #include "ascension/context.h"
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 #include "ascension/error.h"
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30
107
a35b39abe2b2 remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
31 #include <stdio.h>
a35b39abe2b2 remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
32 #include <stdarg.h>
106
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33 #include <cx/printf.h>
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35 #include <GL/glew.h>
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36
107
a35b39abe2b2 remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
37 void asc_printf(const char *level, const char *file, unsigned line, const char *fmt, ...) {
a35b39abe2b2 remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
38 printf("[%s %s %u] ", level, file, line);
a35b39abe2b2 remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
39 va_list ap;
a35b39abe2b2 remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
40 va_start(ap, fmt);
a35b39abe2b2 remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
41 vprintf(fmt, ap);
a35b39abe2b2 remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
42 va_end(ap);
a35b39abe2b2 remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
43 putchar('\n');
a35b39abe2b2 remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
44 }
106
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
45
149
560772519ff9 resolve east-west conflict
Mike Becker <universe@uap-core.de>
parents: 111
diff changeset
46 void asc_error_(const char *file, unsigned line, const char *fmt, ...) {
106
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
47 asc_set_flag(asc_context.flags, ASC_FLAG_HAS_ERROR);
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
48
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
49 // write to error buffer
149
560772519ff9 resolve east-west conflict
Mike Becker <universe@uap-core.de>
parents: 111
diff changeset
50 CxBuffer *buf = &asc_context.error_buffer;
107
a35b39abe2b2 remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
51 size_t bufpos = buf->pos;
106
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
52 va_list args;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
53 va_start(args, fmt);
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
54 int written = cx_vfprintf(buf, cxBufferWriteFunc, fmt, args);
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
55 cxBufferPut(buf, '\n');
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
56 va_end(args);
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
57
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
58 // also print to stderr
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
59 // avoid double-formatting, get it directly from the buffer
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
60 fprintf(stderr, "[ERROR %s %u] %.*s\n",
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
61 file, line, written, buf->space+bufpos);
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
62 }
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
63
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
64 bool asc_has_error(void) {
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
65 return asc_test_flag(asc_context.flags, ASC_FLAG_HAS_ERROR);
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
66 }
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
67
149
560772519ff9 resolve east-west conflict
Mike Becker <universe@uap-core.de>
parents: 111
diff changeset
68 const char *asc_get_error(void) {
106
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
69 // we zero-terminate the current buffer contents before providing them
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
70 cxBufferPut(&asc_context.error_buffer, 0);
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
71 --asc_context.error_buffer.pos;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
72 --asc_context.error_buffer.size;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
73 return asc_context.error_buffer.space;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
74 }
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
75
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
76 void asc_clear_error(void) {
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
77 cxBufferClear(&asc_context.error_buffer);
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
78 asc_clear_flag(asc_context.flags, ASC_FLAG_HAS_ERROR);
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
79 }
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
80
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
81 void asc_error_gl(unsigned code, const char *message) {
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
82 const char *glerr;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
83 switch(code) {
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
84 case GL_NO_ERROR:
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
85 return;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
86 case GL_INVALID_ENUM:
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
87 glerr = "invalid enum";
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
88 break;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
89 case GL_INVALID_VALUE:
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
90 glerr = "invalid value";
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
91 break;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
92 case GL_INVALID_OPERATION:
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
93 glerr = "invalid operation";
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
94 break;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
95 case GL_INVALID_FRAMEBUFFER_OPERATION:
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
96 glerr = "invalid framebuffer operation";
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
97 break;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
98 case GL_OUT_OF_MEMORY:
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
99 glerr = "out of memory";
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
100 break;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
101 case GL_STACK_UNDERFLOW:
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
102 glerr = "stack underflow";
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
103 break;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
104 case GL_STACK_OVERFLOW:
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
105 glerr = "stack overflow";
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
106 break;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
107 default:
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
108 glerr = "unknown GL error";
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
109 }
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
110 asc_error("%s\nGL Error: %s", message, glerr);
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
111 }
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
112
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
113 int asc_error_catch_all_gl(void) {
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
114 GLenum error;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
115 int ret = 0;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
116 while ((error = glGetError()) != GL_NO_ERROR) {
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
117 asc_error_gl(error, "Uncaught");
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
118 ret = 1;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
119 }
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
120 return ret;
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
121 }

mercurial