67 #define printf_fmt_LREAL "%Lf" |
67 #define printf_fmt_LREAL "%Lf" |
68 #define printf_fmt_STRING "%.*Q" |
68 #define printf_fmt_STRING "%.*Q" |
69 |
69 |
70 #define printf_fmt_separator ", " |
70 #define printf_fmt_separator ", " |
71 |
71 |
72 #define printf_fmt_SIMPLE(C_type, name, _A) #name " : " printf_fmt_##C_type |
72 #define printf_fmt_SIMPLE(C_type, C_name, name, _A) #name " : " printf_fmt_##C_type |
73 #define printf_fmt_OBJECT(C_type, name, _A) #name " : {{ " TYPE_##C_type(printf_fmt, _A) " }}" |
73 #define printf_fmt_OBJECT(C_type, C_name, name, _A) #name " : {{ " TYPE_##C_type(printf_fmt, _A) " }}" |
74 |
74 |
75 #define scanf_fmt_BOOL "%B" |
75 #define scanf_fmt_BOOL "%B" |
76 #define scanf_fmt_SINT "%hhd" |
76 #define scanf_fmt_SINT "%hhd" |
77 #define scanf_fmt_USINT "%uhhd" |
77 #define scanf_fmt_USINT "%uhhd" |
78 #define scanf_fmt_INT "%hd" |
78 #define scanf_fmt_INT "%hd" |
85 #define scanf_fmt_LREAL "%Lf" |
85 #define scanf_fmt_LREAL "%Lf" |
86 #define scanf_fmt_STRING "%M" |
86 #define scanf_fmt_STRING "%M" |
87 |
87 |
88 #define scanf_fmt_separator ", " |
88 #define scanf_fmt_separator ", " |
89 |
89 |
90 #define scanf_fmt_SIMPLE(C_type, name, _A) #name " : " scanf_fmt_##C_type |
90 #define scanf_fmt_SIMPLE(C_type, C_name, name, _A) #name " : " scanf_fmt_##C_type |
91 #define scanf_fmt_OBJECT(C_type, name, _A) #name " : {{ " TYPE_##C_type(scanf_fmt, _A) " }}" |
91 #define scanf_fmt_OBJECT(C_type, C_name, name, _A) #name " : {{ " TYPE_##C_type(scanf_fmt, _A) " }}" |
92 |
92 |
93 #define scanf_arg_BOOL(name, data_ptr) &data_ptr->name |
93 #define scanf_arg_BOOL(name, data_ptr) &data_ptr->name |
94 #define scanf_arg_SINT(name, data_ptr) &data_ptr->name |
94 #define scanf_arg_SINT(name, data_ptr) &data_ptr->name |
95 #define scanf_arg_USINT(name, data_ptr) &data_ptr->name |
95 #define scanf_arg_USINT(name, data_ptr) &data_ptr->name |
96 #define scanf_arg_INT(name, data_ptr) &data_ptr->name |
96 #define scanf_arg_INT(name, data_ptr) &data_ptr->name |
103 #define scanf_arg_LREAL(name, data_ptr) &data_ptr->name |
103 #define scanf_arg_LREAL(name, data_ptr) &data_ptr->name |
104 #define scanf_arg_STRING(name, data_ptr) scan_string, &data_ptr->name |
104 #define scanf_arg_STRING(name, data_ptr) scan_string, &data_ptr->name |
105 |
105 |
106 #define scanf_args_separator , |
106 #define scanf_args_separator , |
107 |
107 |
108 #define scanf_args_SIMPLE(C_type, name, data_ptr) scanf_arg_##C_type(name, data_ptr) |
108 #define scanf_args_SIMPLE(C_type, C_name, name, data_ptr) scanf_arg_##C_type(C_name, data_ptr) |
109 #define scanf_args_OBJECT(C_type, name, data_ptr) TYPE_##C_type(scanf_args, (&data_ptr->name)) |
109 #define scanf_args_OBJECT(C_type, C_name, name, data_ptr) TYPE_##C_type(scanf_args, (&data_ptr->C_name)) |
110 |
110 |
111 #define printf_arg_BOOL(name, data_ptr) data_ptr->name |
111 #define printf_arg_BOOL(name, data_ptr) data_ptr->name |
112 #define printf_arg_SINT(name, data_ptr) data_ptr->name |
112 #define printf_arg_SINT(name, data_ptr) data_ptr->name |
113 #define printf_arg_USINT(name, data_ptr) data_ptr->name |
113 #define printf_arg_USINT(name, data_ptr) data_ptr->name |
114 #define printf_arg_INT(name, data_ptr) data_ptr->name |
114 #define printf_arg_INT(name, data_ptr) data_ptr->name |
121 #define printf_arg_LREAL(name, data_ptr) data_ptr->name |
121 #define printf_arg_LREAL(name, data_ptr) data_ptr->name |
122 #define printf_arg_STRING(name, data_ptr) data_ptr->name.len, data_ptr->name.body |
122 #define printf_arg_STRING(name, data_ptr) data_ptr->name.len, data_ptr->name.body |
123 |
123 |
124 #define printf_args_separator , |
124 #define printf_args_separator , |
125 |
125 |
126 #define printf_args_SIMPLE(C_type, name, data_ptr) printf_arg_##C_type(name, data_ptr) |
126 #define printf_args_SIMPLE(C_type, C_name, name, data_ptr) printf_arg_##C_type(C_name, data_ptr) |
127 #define printf_args_OBJECT(C_type, name, data_ptr) TYPE_##C_type(printf_args, (&data_ptr->name)) |
127 #define printf_args_OBJECT(C_type, C_name, name, data_ptr) TYPE_##C_type(printf_args, (&data_ptr->C_name)) |
128 |
128 |
129 static void scan_string(const char *str, int len, void *user_data) {{ |
129 static void scan_string(const char *str, int len, void *user_data) {{ |
130 IEC_STRING *iecstr = (IEC_STRING*)user_data; |
130 IEC_STRING *iecstr = (IEC_STRING*)user_data; |
131 __strlen_t ieclen = len > STR_MAX_LEN ? STR_MAX_LEN : len; |
131 __strlen_t ieclen = len > STR_MAX_LEN ? STR_MAX_LEN : len; |
132 printf("%.*s", len, str); |
132 printf("%.*s", len, str); |