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/* Testing if value is in interval */
16#define IN_RANGE_i_(v, min, max) (v >= min && v <= max ? TRUE : FALSE) /* _i_ = inclusive */
17#define IN_RANGE_e_(v, min, max) (v > min && v < max ? TRUE : FALSE) /* _e_ = exclusive */
18#define OUT_OF_RANGE_i_(v, min, max) (v <= min && v >= max ? TRUE : FALSE)
19#define OUT_OF_RANGE_e_(v, min, max) (v < min && v > max ? TRUE : FALSE)
20
21typedef enum {LG_LITTLE_ENDIAN, LG_BIG_ENDIAN} lg_endianness;
22
23/*
24 * A few conversions helpers
25 *
26 * 1 knot (KT) = 1 nautical mile (NM) / h
27 */
28#define FEET_TO_METERS 0.3048
29#define METERS_TO_FEET (1 / FEET_TO_METERS)
30#define MILES_TO_KM 1.852
31#define KM_TO_MILES (1 / MILES_TO_KM)
32#define KNOTS_TO_KMH MILES_TO_KM
33#define KMH_TO_KNOTS KM_TO_MILES
34
35/* Only for backward compatibility */
36#define UTF8_RW_ROUNDED_ARROW RW_ROUNDED_ARROW_UTF8
37
38// === Tokens, UTF-8 hex codes and drawings ===
39
40#define LEFT_ARROW_LIGHT_UTF8 "\u2190" // ←
41#define RIGHT_ARROW_LIGHT_UTF8 "\u2192" // →
42#define UP_ARROW_LIGHT_UTF8 "\u2191" // ↑
43#define DOWN_ARROW_LIGHT_UTF8 "\u2193" // ↓
44#define RW_ROUNDED_ARROW_UTF8 "\u279c" // ➜
45
46/*
47 BOX_N_UTF8
48
49 1--2--3-----4
50 5 | |
51 6-----7-----8
52 | | |
53 9----10----11
54*/
55
56#define BOX_1_UTF8 "\u250c" // ┌
57#define BOX_2_UTF8 "\u2500" // ─
58#define BOX_3_UTF8 "\u252c" // ┬
59#define BOX_4_UTF8 "\u2510" // ┐
60#define BOX_5_UTF8 "\u2502" // │
61#define BOX_6_UTF8 "\u251c" // ├
62#define BOX_7_UTF8 "\u253c" // ┼
63#define BOX_8_UTF8 "\u2524" // ┤
64#define BOX_9_UTF8 "\u2514" // └
65#define BOX_10_UTF8 "\u2534" // ┴
66#define BOX_11_UTF8 "\u2518" // ┘
67
68typedef struct {
69 struct timeval start_time; /* In s and µs */
70 float elapsed_time; /* In ms */
72
73#define STACK_N_MAX_ELEMENTS 1024
74
75/* Dynamic stacks */
76typedef struct {
77 int *v;
78 int max_n;
79 int i;
81
82typedef struct {
83 float *v;
84 int max_n;
85 int i;
87
88/* Width in bytes */
89typedef enum {
90 WBY_8_BIT = 1,
91 WBY_16_BIT = 2,
92 WBY_32_BIT = 4,
93 WBY_64_BIT = 8
94} WidthInBytes;
95
97
99
100int lg_check_gl_errors(long long, const char *, int, const char *);
101
103
104lg_endianness lg_get_arch_endianness();
105
106float lg_tv_diff(struct timeval *, struct timeval *, struct timeval *);
107
109
111
113
115
116int delta_i(int);
117
118float delta_f(float);
119
120zboolean has_changed_i(int);
121
122zboolean has_changed_f(float);
123
124double clamp(double, double, double);
125
127
129
130void lg_swap_values(void *, void *, WidthInBytes);
131
133
134void debug_max_int_in_loop(unsigned long, const char *, int);
135
137
139
140void debug_max_float_in_loop(float, const char *, int);
141
143
145
146void lg_show_struct_sizes(zboolean);
147
149
150void lg_show_utf8_drawings(zboolean);
151
152#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:82
Definition lg_misc.h:76
Definition lg_misc.h:68