build system revision
[vg.git] / vg_console.h
1 /* Copyright (C) 2021-2024 Harry Godden (hgn) - All Rights Reserved */
2
3 #pragma once
4 #include "vg_platform.h"
5
6 #define VG_VAR_F32( NAME, ... ) \
7 { u32 flags=0x00; __VA_ARGS__ ;\
8 vg_console_reg_var( #NAME, &NAME, k_var_dtype_f32, flags ); }
9
10 #define VG_VAR_I32( NAME, ... ) \
11 { u32 flags=0x00; __VA_ARGS__ ;\
12 vg_console_reg_var( #NAME, &NAME, k_var_dtype_i32, flags ); }
13
14 #define VG_VAR_PERSISTENT 0x1
15 #define VG_VAR_CHEAT 0x2
16
17 typedef struct vg_var vg_var;
18 typedef struct vg_cmd vg_cmd;
19
20 struct vg_console
21 {
22 struct vg_var{
23 void *data;
24 const char *name;
25
26 enum vg_var_dtype{
27 k_var_dtype_i32,
28 k_var_dtype_u32,
29 k_var_dtype_f32,
30 k_var_dtype_str
31 }
32 data_type;
33 u32 flags;
34 }
35 vars[ 128 ];
36
37 struct vg_cmd{
38 int (*function)( int argc, char const *argv[] );
39 void (*poll_suggest)( int argc, char const *argv[] );
40 const char *name;
41 }
42 functions[ 32 ];
43
44 struct {
45 const char *str;
46 int len;
47
48 u32 lev_score;
49 }
50 suggestions[12];
51 u32 suggestion_count;
52 int suggestion_select,
53 suggestion_pastepos,
54 suggestion_maxlen;
55
56 u32 var_count, function_count;
57
58 char input[96],
59 input_copy[96];
60
61 char history[32][96];
62 int history_last, history_pos, history_count;
63
64 i32 enabled, cheats;
65 }
66 extern vg_console;
67
68 void vg_console_reg_var( const char *alias, void *ptr, enum vg_var_dtype type,
69 u32 flags );
70
71 void vg_console_reg_cmd( const char *alias,
72 int (*function)(int argc, const char *argv[]),
73 void (*poll_suggest)(int argc, const char *argv[]) );
74 void vg_console_load_autos(void);
75 void vg_console_draw(void);
76 void vg_console_init(void);
77 int vg_console_exec( int argc, const char *argv[] );
78 void vg_execute_console_input( const char *cmd, bool silent );
79 static void vg_console_write_persistent(void);
80 void console_suggest_score_text( const char *str, const char *input,
81 int minscore );
82 vg_var *vg_console_match_var( const char *kw );
83 vg_cmd *vg_console_match_cmd( const char *kw );
84 static void console_suggest_next(void);
85 static void console_suggest_prev(void);