LibGame v0.4.0
The LG Game Engine - Copyright (C) 2024-2026 ETMSoftware
Loading...
Searching...
No Matches
lg_misc.h
1/*
2 * LibGame - Copyright (C) Emmanuel Thomas-Maurin 2011-2026
3 * All rights reserved
4 */
5
6#ifndef LG_MISC_H
7#define LG_MISC_H
8
9/*
10 * Wrappers for these file ops funcs
11 */
12#define mkdir_2(...) mkdir(__VA_ARGS__)
13#define fopen_2(...) fopen(__VA_ARGS__)
14
15/* GL errors checking */
16#define CHECK_GL_E lg_check_gl_errors(lg_log_time(), __FILE__ , __LINE__, __func__)
17
18#define CHECK_GL_E_2 {if (lg_check_gl_errors(lg_log_time(), __FILE__, __LINE__, __func__) != LG_OK) exit(-1);}
19
20/* Checking for NULL pointers */
21#define CHECKV_R(what, ret_value) {if (what == NULL) {INFO_ERR("NULL pointer\n") return ret_value;}}
22
23/* Where is this used ? */
24#define STH_WRONG_HERE \
25 { \
26 static int i = 0; \
27 if (i == 0) { \
28 INFO_OUT("VARO TÄSSÄ\n%s [%s: %d] %s(): jotain pitää korjata\n", UTF8_RW_ROUNDED_ARROW, __FILE__, __LINE__, __func__) \
29 i++; \
30 } \
31 }
32
33/* Debugging stuff (trivial) */
34#define DEBUG_ENTER_FUNC INFO_OUT("\n\nDEBUG **** %s() ****\n\n", __func__)
35#define DEBUG_ENTER_FUNC2(str) INFO_OUT("\n\nDEBUG **** %s() -> %s ****\n\n", __func__, str)
36#define DEBUG_CHK_PTR(ptr) \
37 { \
38 if (ptr == NULL) { \
39 INFO_OUT("\n\nDEBUG **** [%s: %d] %s() -> POINTER IS NULL ****\n\n", __FILE__, __LINE__, __func__) \
40 exit(-1); \
41 } \
42 }
43
44/* Testing if value is in interval */
45#define IN_RANGE_i_(v, min, max) (v >= min && v <= max ? TRUE : FALSE) /* _i_ = inclusive */
46#define IN_RANGE_e_(v, min, max) (v > min && v < max ? TRUE : FALSE) /* _e_ = exclusive */
47#define OUT_OF_RANGE_i_(v, min, max) (v <= min && v >= max ? TRUE : FALSE)
48#define OUT_OF_RANGE_e_(v, min, max) (v < min && v > max ? TRUE : FALSE)
49
50typedef enum {LG_LITTLE_ENDIAN, LG_BIG_ENDIAN} lg_endianness;
51
52/*
53 * A few conversions helpers
54 *
55 * 1 knot (KT) = 1 nautical mile (NM) / h
56 */
57#define FEET_TO_METERS 0.3048
58#define METERS_TO_FEET (1 / FEET_TO_METERS)
59#define MILES_TO_KM 1.852
60#define KM_TO_MILES (1 / MILES_TO_KM)
61#define KNOTS_TO_KMH MILES_TO_KM
62#define KMH_TO_KNOTS KM_TO_MILES
63
64/* Only for backward compatibility */
65#define UTF8_RW_ROUNDED_ARROW RW_ROUNDED_ARROW_UTF8
66
67// === Tokens, UTF-8 hex codes and drawings ===
68
69#define LEFT_ARROW_LIGHT_UTF8 "\u2190" // ←
70#define RIGHT_ARROW_LIGHT_UTF8 "\u2192" // →
71#define UP_ARROW_LIGHT_UTF8 "\u2191" // ↑
72#define DOWN_ARROW_LIGHT_UTF8 "\u2193" // ↓
73#define RW_ROUNDED_ARROW_UTF8 "\u279c" // ➜
74
75/*
76 BOX_N_UTF8
77
78 1--2--3-----4
79 5 | |
80 6-----7-----8
81 | | |
82 9----10----11
83*/
84
85#define BOX_1_UTF8 "\u250c" // ┌
86#define BOX_2_UTF8 "\u2500" // ─
87#define BOX_3_UTF8 "\u252c" // ┬
88#define BOX_4_UTF8 "\u2510" // ┐
89#define BOX_5_UTF8 "\u2502" // │
90#define BOX_6_UTF8 "\u251c" // ├
91#define BOX_7_UTF8 "\u253c" // ┼
92#define BOX_8_UTF8 "\u2524" // ┤
93#define BOX_9_UTF8 "\u2514" // └
94#define BOX_10_UTF8 "\u2534" // ┴
95#define BOX_11_UTF8 "\u2518" // ┘
96
97typedef struct {
98 struct timeval start_time; /* In s and µs */
99 float elapsed_time; /* In ms */
101
102#define STACK_N_MAX_ELEMENTS 1024
103
104/* Dynamic stacks */
105typedef struct {
106 int *v;
107 int max_n;
108 int i;
109} LG_Stack_i;
110
111typedef struct {
112 float *v;
113 int max_n;
114 int i;
115} LG_Stack_f;
116
117/* Width in bytes */
118typedef enum {
119 WBY_8_BIT = 1,
120 WBY_16_BIT = 2,
121 WBY_32_BIT = 4,
122 WBY_64_BIT = 8
123} WidthInBytes;
124
126
128
129int lg_check_gl_errors(long long, const char *, int, const char *);
130
132
133lg_endianness lg_get_arch_endianness();
134
135float lg_tv_diff(struct timeval *, struct timeval *, struct timeval *);
136
138
140
142
144
145int delta_i(int);
146
147float delta_f(float);
148
149zboolean has_changed_i(int);
150
151zboolean has_changed_f(float);
152
153double clamp(double, double, double);
154
156
158
159void lg_swap_values(void *, void *, WidthInBytes);
160
162
163void debug_max_int_in_loop(unsigned long, const char *, int);
164
166
168
169void debug_max_float_in_loop(float, const char *, int);
170
172
174
175void lg_show_struct_sizes(zboolean);
176
178
179void lg_show_utf8_drawings(zboolean);
180
181#endif /* LG_MISC_H */
lg_endianness lg_get_arch_endianness()
Definition lg_misc.c:100
void debug_max_int_in_loop(unsigned long i, const char *file, int line)
Definition lg_misc.c:403
void lg_show_struct_sizes(zboolean everything)
Definition lg_misc.c:568
int lg_check_gl_context()
Definition lg_misc.c:74
int delta_i(int i)
Definition lg_misc.c:212
void lg_stopwatch_start(LG_Stopwatch *stopwatch)
Definition lg_misc.c:167
void debug_max_float_in_loop(float f, const char *file, int line)
Definition lg_misc.c:441
float lg_tv_diff(struct timeval *t_diff, struct timeval *t2, struct timeval *t1)
Definition lg_misc.c:133
void lg_swap_values(void *x, void *y, WidthInBytes width)
Definition lg_misc.c:352
int lg_show_pixel_format_info_from_sdl_display_mode(SDL_DisplayMode *display_mode)
Definition lg_misc.c:670
void debug_start_max_float_in_loop()
Definition lg_misc.c:427
void debug_end_max_int_in_loop()
Definition lg_misc.c:414
double clamp(double v, double min, double max)
Definition lg_misc.c:264
float lg_stopwatch_get_elapsed_time(LG_Stopwatch *stopwatch)
Definition lg_misc.c:201
int lg_check_gl_errors(long long log_time, const char *file, int line, const char *func)
Definition lg_misc.c:40
zboolean has_changed_i(int i)
Definition lg_misc.c:240
zboolean has_changed_f(float f)
Definition lg_misc.c:251
void lg_disable_transparency()
Definition lg_misc.c:26
void lg_enable_transparency()
Definition lg_misc.c:17
void debug_end_max_float_in_loop()
Definition lg_misc.c:452
float delta_f(float f)
Definition lg_misc.c:226
void lg_stopwatch_resume(LG_Stopwatch *stopwatch)
Definition lg_misc.c:190
void * lg_align_up_to_next_4_bytes_boundary(void *addr)
Definition lg_misc.c:280
int lg_check_datatype_sizes()
Definition lg_misc.c:464
void lg_show_utf8_drawings(zboolean extra_n)
Definition lg_misc.c:712
void debug_start_max_int_in_loop()
Definition lg_misc.c:374
void lg_stopwatch_pause(LG_Stopwatch *stopwatch)
Definition lg_misc.c:178
void * lg_align_up_to_next_8_bytes_boundary(void *addr)
Definition lg_misc.c:299
Definition lg_misc.h:111
Definition lg_misc.h:105
Definition lg_misc.h:97