49#ifndef _ACF_UTILS_DR_CMD_REG_H_
50#define _ACF_UTILS_DR_CMD_REG_H_
65API_EXPORT XPLMCommandRef
dcr_find_cmd(PRINTF_FORMAT(
const char *fmt),
66 XPLMCommandCallback_f cb,
bool before,
void *refcon, ...)
69 XPLMCommandCallback_f cb,
bool before,
void *refcon, va_list ap);
70API_EXPORT XPLMCommandRef
f_dcr_find_cmd(PRINTF_FORMAT(const
char *fmt),
71 XPLMCommandCallback_f cb,
bool before,
void *refcon, ...)
74 XPLMCommandCallback_f cb,
bool before,
void *refcon, va_list ap);
76 const
char *cmddesc, XPLMCommandCallback_f cb,
bool before,
void *refcon);
82#pragma GCC diagnostic push
83#pragma GCC diagnostic ignored "-Wnull-dereference"
90#define DCR_CREATE_COMMON(type, dr_ptr, ...) \
92 void *__rdr = dcr_alloc_rdr(); \
93 dr_t *__dr = dcr_get_dr(__rdr); \
94 dr_create_ ## type ## _cfg(__dr, __VA_ARGS__); \
95 dcr_insert_rdr(__rdr); \
96 if ((dr_ptr) != NULL) \
97 *(dr_t **)(dr_ptr) = __dr; \
115#define DCR_CREATE_I(dr_p, __value, __writable, ...) \
116 DCR_CREATE_COMMON(i, dr_p, __value, \
117 (dr_cfg_t){ .writable = (__writable) }, __VA_ARGS__)
118#define DCR_CREATE_I_CFG(dr_p, __value, __cfg, ...) \
119 DCR_CREATE_COMMON(i, dr_p, __value, __cfg, __VA_ARGS__)
123#define DCR_CREATE_F(dr_p, __value, __writable, ...) \
124 DCR_CREATE_COMMON(f, dr_p, __value, \
125 (dr_cfg_t){ .writable = (__writable) }, __VA_ARGS__)
126#define DCR_CREATE_F_CFG(dr_p, __value, __cfg, ...) \
127 DCR_CREATE_COMMON(f, dr_p, __value, __cfg, __VA_ARGS__)
131#define DCR_CREATE_F64(dr_p, __value, __writable, ...) \
132 DCR_CREATE_COMMON(f64, dr_p, __value, \
133 (dr_cfg_t){ .writable = (__writable) }, __VA_ARGS__)
134#define DCR_CREATE_F64_CFG(dr_p, __value, __cfg, ...) \
135 DCR_CREATE_COMMON(f64, dr_p, __value, __cfg, __VA_ARGS__)
140#define DCR_CREATE_VI(dr_p, __value, __n, __writable, ...) \
141 DCR_CREATE_COMMON(vi, dr_p, __value, \
142 (dr_cfg_t){ .writable = (__writable), .count = (__n) }, __VA_ARGS__)
143#define DCR_CREATE_VI_CFG(dr_p, __value, __cfg, ...) \
144 DCR_CREATE_COMMON(vi, dr_p, __value, __cfg, __VA_ARGS__)
149#define DCR_CREATE_VF(dr_p, __value, __n, __writable, ...) \
150 DCR_CREATE_COMMON(vf, dr_p, __value, \
151 (dr_cfg_t){ .writable = (__writable), .count = (__n)}, __VA_ARGS__)
152#define DCR_CREATE_VF_CFG(dr_p, __value, __cfg, ...) \
153 DCR_CREATE_COMMON(vf, dr_p, __value, __cfg, __VA_ARGS__)
158#define DCR_CREATE_VF64(dr_p, __value, __n, __writable, ...) \
159 DCR_CREATE_COMMON(vf64, dr_p, __value, \
160 (dr_cfg_t){ .writable = (__writable), .count = (__n) }, __VA_ARGS__)
161#define DCR_CREATE_VF64_CFG(dr_p, __value, __cfg, ...) \
162 DCR_CREATE_COMMON(vf64, dr_p, __value, __cfg, __VA_ARGS__)
167#define DCR_CREATE_VI_AUTOSCALAR(dr_p, __value, __n, __writable, ...) \
168 DCR_CREATE_COMMON(vi_autoscalar, dr_p, __value, \
169 (dr_cfg_t){ .writable = (__writable), .count = (__n) }, __VA_ARGS__)
170#define DCR_CREATE_VI_AUTOSCALAR_CFG(dr_p, __value, __cfg, ...) \
171 DCR_CREATE_COMMON(vi_autoscalar, dr_p, __value, __cfg, __VA_ARGS__)
176#define DCR_CREATE_VF_AUTOSCALAR(dr_p, __value, __n, __writable, ...) \
177 DCR_CREATE_COMMON(vf_autoscalar, dr_p, __value, \
178 (dr_cfg_t){ .writable = (__writable), .count = (__n) }, __VA_ARGS__)
179#define DCR_CREATE_VF_AUTOSCALAR_CFG(dr_p, __value, __cfg, ...) \
180 DCR_CREATE_COMMON(vf_autoscalar, dr_p, __value, __cfg, __VA_ARGS__)
185#define DCR_CREATE_VF64_AUTOSCALAR(dr_p, __value, __n, __writable, ...) \
186 DCR_CREATE_COMMON(vf64_autoscalar, dr_p, __value, \
187 (dr_cfg_t){ .writable = (__writable), .count = (__n) }, __VA_ARGS__)
188#define DCR_CREATE_VF64_AUTOSCALAR_CFG(dr_p, __value, __cfg, ...) \
189 DCR_CREATE_COMMON(vf64_autoscalar, dr_p, __value, __cfg, __VA_ARGS__)
194#define DCR_CREATE_B(dr_p, __value, __n, __writable, ...) \
195 DCR_CREATE_COMMON(b, dr_p, __value, \
196 (dr_cfg_t){ .writable = (__writable), .count = (__n) }, __VA_ARGS__)
197#define DCR_CREATE_B_CFG(dr_p, __value, __cfg, ...) \
198 DCR_CREATE_COMMON(b, dr_p, __value, __cfg, __VA_ARGS__)
201#pragma GCC diagnostic pop
XPLMCommandRef dcr_find_cmd(const char *fmt, XPLMCommandCallback_f cb, bool before, void *refcon,...)
XPLMCommandRef f_dcr_find_cmd_v(const char *fmt, XPLMCommandCallback_f cb, bool before, void *refcon, va_list ap)
dr_t * dcr_get_dr(void *token)
void dcr_insert_rdr(void *token)
XPLMCommandRef f_dcr_find_cmd(const char *fmt, XPLMCommandCallback_f cb, bool before, void *refcon,...)
void * dcr_alloc_rdr(void)
XPLMCommandRef dcr_create_cmd(const char *cmdname, const char *cmddesc, XPLMCommandCallback_f cb, bool before, void *refcon)
XPLMCommandRef dcr_find_cmd_v(const char *fmt, XPLMCommandCallback_f cb, bool before, void *refcon, va_list ap)