71 lines
3.2 KiB
C
71 lines
3.2 KiB
C
enum {par_none, par_get, par_command, par_fmtdisp, par_fmt, par_scan, par_hide, par_done, par_readonly};
|
|
|
|
#define PARCHECK 0
|
|
// PARCHECK 1: check usage of parameters, does not create useful code!
|
|
// PARCHECK 0: create production code
|
|
#if (PARCHECK)
|
|
|
|
#define PAR_LONG const unsigned long
|
|
#define PAR_BYTE const signed char
|
|
#define PAR_TEXT const char
|
|
#define ParFixed(name, variable, dig) (&variable - (unsigned long *)0)
|
|
//#define ParNrFixed(nr, name, variable, dig) (&variable - (unsigned long *)0)
|
|
#define ParText(name, variable, update) (variable - (char *)0)
|
|
#define ParSetText(variable, value) (variable - (const char *)0)
|
|
#define ParEnum(name, variable, list) (&variable - (signed char *)0)
|
|
//#define ParNrEnum(nr, name, variable, list) (&variable - (signed char *)0)
|
|
#define ParFixedArray(name, variable, par_first, par_last, dig) (variable - (unsigned long *)0)
|
|
#define ParEnumArray(name, variable, par_first, par_last, dig) (variable - (signed char *)0)
|
|
#define ParEnumArrayCmd(name, variable, par_first, par_last, dig, cmd) (variable - (signed char *)0)
|
|
|
|
#else
|
|
|
|
// Arrays starting at index 1 have to be declared with one additional value at zero
|
|
#define PAR_LONG long
|
|
#define PAR_BYTE byte
|
|
#define PAR_TEXT char
|
|
#define ParFixed(name, variable, dig) ParFixed_(p_##variable, C(name), &variable, dig)
|
|
//#define ParNrFixed(nr, nameC40, variable, dig) ParFixed_(nr, nameC40, &(variable), dig)
|
|
#define ParText(name, variable, update) ParText_(p_##variable, C(name), variable, sizeof(variable), update)
|
|
#define ParSetText(variable, value) ParSetText_(p_##variable, variable, sizeof variable, value)
|
|
#define ParEnum(name, variable, list) ParEnum_(p_##variable, C(name), &variable, list)
|
|
//#define ParNrEnum(nr, nameC40, variable, list) ParEnum_(nr, nameC40, &(variable), list)
|
|
|
|
#define ParFixedArray(name, variable, par_first, par_last, dig) \
|
|
for (byte par_nr_n = par_first; par_nr_n <= par_last; par_nr_n++) { \
|
|
ParFixed_(p_##variable + par_nr_n, addNumToC40(C(name), par_nr_n), variable + par_nr_n, dig); \
|
|
}
|
|
#define ParEnumArray(name, variable, par_first, par_last, list) \
|
|
for (byte par_nr_n = par_first; par_nr_n <= par_last; par_nr_n++) { \
|
|
ParEnum_(p_##variable + par_nr_n, addNumToC40(C(name), par_nr_n), variable + par_nr_n, list); \
|
|
}
|
|
#define ParEnumArrayCmd(name, variable, par_first, par_last, list, cmd) \
|
|
for (byte par_nr_n = par_first; par_nr_n <= par_last; par_nr_n++) { \
|
|
if (ParEnum_(p_##variable + par_nr_n, addNumToC40(C(name), par_nr_n), variable + par_nr_n, list) == par_command) { \
|
|
cmd(par_nr_n); \
|
|
}; \
|
|
}
|
|
|
|
#endif
|
|
|
|
enum {par_serial_unchanged, par_display_unchanged, par_hidden};
|
|
|
|
// byte is not defined here, use uint8_t
|
|
|
|
typedef ulong name_t;
|
|
|
|
uint8_t ParCmd(name_t name, void (* command)(uint8_t cmd));
|
|
|
|
typedef uint8_t (*ScanFunc)(uint8_t nr, name_t name, const char *formatted, const char *astext, uint8_t unchanged);
|
|
|
|
typedef struct {
|
|
char action;
|
|
uint8_t nr; // byte
|
|
name_t name;
|
|
long value;
|
|
} ParAction;
|
|
|
|
#define ParSet(variable, value) ParSet_(p_##variable, (void *)&variable, sizeof variable, value)
|
|
#define ParArraySet(variable, index, value) ParSet_(p_##variable + index, (void *)(variable + index), sizeof (*variable), value)
|
|
//#define ParNrSet(nr, variable, value) ParSet_(nr, (void *)&(variable), sizeof variable, value)
|