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/* Width in bytes */
24typedef enum {
25 WBY_8_BIT = 1,
26 WBY_16_BIT = 2,
27 WBY_32_BIT = 4,
28 WBY_64_BIT = 8
29} WidthInBytes;
30
31/*
32 * A few conversions helpers
33 *
34 * 1 knot (KT) = 1 nautical mile (NM) / h
35 */
36#define FEET_TO_METERS 0.3048
37#define METERS_TO_FEET (1 / FEET_TO_METERS)
38#define MILES_TO_KM 1.852
39#define KM_TO_MILES (1 / MILES_TO_KM)
40#define KNOTS_TO_KMH MILES_TO_KM
41#define KMH_TO_KNOTS KM_TO_MILES
42
43/* Only for backward compatibility */
44#define UTF8_RW_ROUNDED_ARROW RW_ROUNDED_ARROW_UTF8
45
46// === Tokens, UTF-8 hex codes and drawings ===
47
48#define LEFT_ARROW_LIGHT_UTF8 "\u2190" // ←
49#define RIGHT_ARROW_LIGHT_UTF8 "\u2192" // →
50#define UP_ARROW_LIGHT_UTF8 "\u2191" // ↑
51#define DOWN_ARROW_LIGHT_UTF8 "\u2193" // ↓
52#define RW_ROUNDED_ARROW_UTF8 "\u279c" // ➜
53
54/*
55 BOX_N_UTF8
56
57 1--2--3-----4
58 5 | |
59 6-----7-----8
60 | | |
61 9----10----11
62*/
63
64#define BOX_1_UTF8 "\u250c" // ┌
65#define BOX_2_UTF8 "\u2500" // ─
66#define BOX_3_UTF8 "\u252c" // ┬
67#define BOX_4_UTF8 "\u2510" // ┐
68#define BOX_5_UTF8 "\u2502" // │
69#define BOX_6_UTF8 "\u251c" // ├
70#define BOX_7_UTF8 "\u253c" // ┼
71#define BOX_8_UTF8 "\u2524" // ┤
72#define BOX_9_UTF8 "\u2514" // └
73#define BOX_10_UTF8 "\u2534" // ┴
74#define BOX_11_UTF8 "\u2518" // ┘
75
76typedef struct {
77 struct timeval start_time; /* In s and µs */
78 float elapsed_time; /* In ms */
80
82
84
85int lg_check_gl_errors(uint64_t, const char *, int, const char *);
86
88
89lg_endianness lg_get_arch_endianness();
90
91float lg_tv_diff(struct timeval *, struct timeval *, struct timeval *);
92
94
96
98
100
101int delta_i(int);
102
103float delta_f(float);
104
105zboolean has_changed_i(int);
106
107zboolean has_changed_f(float);
108
109double clamp(double, double, double);
110
112
114
115void lg_swap_values(void *, void *, WidthInBytes);
116
118
119void debug_max_int_in_loop(unsigned long, const char *, int);
120
122
124
125void debug_max_float_in_loop(float, const char *, int);
126
128
130
131void lg_show_struct_sizes(zboolean);
132
134
135void lg_show_utf8_drawings(zboolean);
136
137#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
int lg_check_gl_errors(uint64_t log_time, const char *file, int line, const char *func)
Definition lg_misc.c:40
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:668
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
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:710
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:76