108 } |
108 } |
109 |
109 |
110 void print_step_argument(symbol_c *step_name, const char* argument, bool setter=false) { |
110 void print_step_argument(symbol_c *step_name, const char* argument, bool setter=false) { |
111 print_variable_prefix(); |
111 print_variable_prefix(); |
112 if (setter) s4o.print(","); |
112 if (setter) s4o.print(","); |
113 s4o.print("__step_list["); |
113 step_name->accept(*this); // in the generated C code, the 'step_name' will have been previously #define'd as equiv to '__step_list[<step_number>]", so now we simply print out the name! |
114 s4o.print(SFC_STEP_ACTION_PREFIX); |
114 s4o.print("."); |
115 step_name->accept(*this); |
|
116 s4o.print("]."); |
|
117 s4o.print(argument); |
115 s4o.print(argument); |
118 } |
116 } |
119 |
117 |
120 void print_action_argument(symbol_c *action_name, const char* argument, bool setter=false) { |
118 void print_action_argument(symbol_c *action_name, const char* argument, bool setter=false) { |
121 print_variable_prefix(); |
119 print_variable_prefix(); |
133 |
131 |
134 void print_reset_step(symbol_c *step_name) { |
132 void print_reset_step(symbol_c *step_name) { |
135 s4o.print(s4o.indent_spaces); |
133 s4o.print(s4o.indent_spaces); |
136 s4o.print(SET_VAR); |
134 s4o.print(SET_VAR); |
137 s4o.print("("); |
135 s4o.print("("); |
138 print_step_argument(step_name, "state", true); |
136 print_step_argument(step_name, "X", true); |
139 s4o.print(",,0);\n"); |
137 s4o.print(",,0);\n"); |
140 } |
138 } |
141 |
139 |
142 void print_set_step(symbol_c *step_name) { |
140 void print_set_step(symbol_c *step_name) { |
143 s4o.print(s4o.indent_spaces); |
141 s4o.print(s4o.indent_spaces); |
144 s4o.print(SET_VAR); |
142 s4o.print(SET_VAR); |
145 s4o.print("("); |
143 s4o.print("("); |
146 print_step_argument(step_name, "state", true); |
144 print_step_argument(step_name, "X", true); |
147 s4o.print(",,1);\n" + s4o.indent_spaces); |
145 s4o.print(",,1);\n" + s4o.indent_spaces); |
148 print_step_argument(step_name, "elapsed_time"); |
146 print_step_argument(step_name, "elapsed_time"); |
149 s4o.print(" = __time_to_timespec(1, 0, 0, 0, 0, 0);\n"); |
147 s4o.print(" = __time_to_timespec(1, 0, 0, 0, 0, 0);\n"); |
150 } |
148 } |
151 |
149 |
164 s4o.print(s4o.indent_spaces + "{\n"); |
162 s4o.print(s4o.indent_spaces + "{\n"); |
165 s4o.indent_right(); |
163 s4o.indent_right(); |
166 s4o.print(s4o.indent_spaces + "char activated = "); |
164 s4o.print(s4o.indent_spaces + "char activated = "); |
167 s4o.print(GET_VAR); |
165 s4o.print(GET_VAR); |
168 s4o.print("("); |
166 s4o.print("("); |
169 print_step_argument(current_step, "state"); |
167 print_step_argument(current_step, "X"); |
170 s4o.print(") && !"); |
168 s4o.print(") && !"); |
171 print_step_argument(current_step, "prev_state"); |
169 print_step_argument(current_step, "prev_state"); |
172 s4o.print(";\n"); |
170 s4o.print(";\n"); |
173 s4o.print(s4o.indent_spaces + "char desactivated = !"); |
171 s4o.print(s4o.indent_spaces + "char desactivated = !"); |
174 s4o.print(GET_VAR); |
172 s4o.print(GET_VAR); |
175 s4o.print("("); |
173 s4o.print("("); |
176 print_step_argument(current_step, "state"); |
174 print_step_argument(current_step, "X"); |
177 s4o.print(") && "); |
175 s4o.print(") && "); |
178 print_step_argument(current_step, "prev_state"); |
176 print_step_argument(current_step, "prev_state"); |
179 s4o.print(";\n"); |
177 s4o.print(";\n"); |
180 s4o.print(s4o.indent_spaces + "char active = "); |
178 s4o.print(s4o.indent_spaces + "char active = "); |
181 s4o.print(GET_VAR); |
179 s4o.print(GET_VAR); |
182 s4o.print("("); |
180 s4o.print("("); |
183 print_step_argument(current_step, "state"); |
181 print_step_argument(current_step, "X"); |
184 s4o.print(");\n"); |
182 s4o.print(");\n"); |
185 symbol->action_association_list->accept(*this); |
183 symbol->action_association_list->accept(*this); |
186 s4o.indent_left(); |
184 s4o.indent_left(); |
187 s4o.print(s4o.indent_spaces + "}\n\n"); |
185 s4o.print(s4o.indent_spaces + "}\n\n"); |
188 } |
186 } |
205 s4o.indent_right(); |
203 s4o.indent_right(); |
206 s4o.print(s4o.indent_spaces + "char activated, desactivated, active;\n"); |
204 s4o.print(s4o.indent_spaces + "char activated, desactivated, active;\n"); |
207 s4o.print(s4o.indent_spaces + "activated = "); |
205 s4o.print(s4o.indent_spaces + "activated = "); |
208 s4o.print(GET_VAR); |
206 s4o.print(GET_VAR); |
209 s4o.print("("); |
207 s4o.print("("); |
210 print_step_argument(current_step, "state"); |
208 print_step_argument(current_step, "X"); |
211 s4o.print(") && !"); |
209 s4o.print(") && !"); |
212 print_step_argument(current_step, "prev_state"); |
210 print_step_argument(current_step, "prev_state"); |
213 s4o.print(";\n"); |
211 s4o.print(";\n"); |
214 s4o.print(s4o.indent_spaces + "desactivated = !"); |
212 s4o.print(s4o.indent_spaces + "desactivated = !"); |
215 s4o.print(GET_VAR); |
213 s4o.print(GET_VAR); |
216 s4o.print("("); |
214 s4o.print("("); |
217 print_step_argument(current_step, "state"); |
215 print_step_argument(current_step, "X"); |
218 s4o.print(") && "); |
216 s4o.print(") && "); |
219 print_step_argument(current_step, "prev_state"); |
217 print_step_argument(current_step, "prev_state"); |
220 s4o.print(";\n"); |
218 s4o.print(";\n"); |
221 s4o.print(s4o.indent_spaces + "active = "); |
219 s4o.print(s4o.indent_spaces + "active = "); |
222 s4o.print(GET_VAR); |
220 s4o.print(GET_VAR); |
223 s4o.print("("); |
221 s4o.print("("); |
224 print_step_argument(current_step, "state"); |
222 print_step_argument(current_step, "X"); |
225 s4o.print(");\n"); |
223 s4o.print(");\n"); |
226 symbol->action_association_list->accept(*this); |
224 symbol->action_association_list->accept(*this); |
227 s4o.indent_left(); |
225 s4o.indent_left(); |
228 s4o.print(s4o.indent_spaces + "}\n\n"); |
226 s4o.print(s4o.indent_spaces + "}\n\n"); |
229 } |
227 } |
435 if (symbol->step_name != NULL) { |
433 if (symbol->step_name != NULL) { |
436 switch (wanted_sfcgeneration) { |
434 switch (wanted_sfcgeneration) { |
437 case transitiontest_sg: |
435 case transitiontest_sg: |
438 s4o.print(GET_VAR); |
436 s4o.print(GET_VAR); |
439 s4o.print("("); |
437 s4o.print("("); |
440 print_step_argument(symbol->step_name, "state"); |
438 print_step_argument(symbol->step_name, "X"); |
441 s4o.print(")"); |
439 s4o.print(")"); |
442 break; |
440 break; |
443 case stepset_sg: |
441 case stepset_sg: |
444 print_set_step(symbol->step_name); |
442 print_set_step(symbol->step_name); |
445 break; |
443 break; |
460 switch (wanted_sfcgeneration) { |
458 switch (wanted_sfcgeneration) { |
461 case transitiontest_sg: |
459 case transitiontest_sg: |
462 for(int i = 0; i < symbol->n; i++) { |
460 for(int i = 0; i < symbol->n; i++) { |
463 s4o.print(GET_VAR); |
461 s4o.print(GET_VAR); |
464 s4o.print("("); |
462 s4o.print("("); |
465 print_step_argument(symbol->elements[i], "state"); |
463 print_step_argument(symbol->elements[i], "X"); |
466 s4o.print(")"); |
464 s4o.print(")"); |
467 if (i < symbol->n - 1) { |
465 if (i < symbol->n - 1) { |
468 s4o.print(" && "); |
466 s4o.print(" && "); |
469 } |
467 } |
470 } |
468 } |
742 print_variable_prefix(); |
740 print_variable_prefix(); |
743 s4o.print("__step_list[i].prev_state = "); |
741 s4o.print("__step_list[i].prev_state = "); |
744 s4o.print(GET_VAR); |
742 s4o.print(GET_VAR); |
745 s4o.print("("); |
743 s4o.print("("); |
746 print_variable_prefix(); |
744 print_variable_prefix(); |
747 s4o.print("__step_list[i].state);\n"); |
745 s4o.print("__step_list[i].X);\n"); |
748 s4o.print(s4o.indent_spaces + "if ("); |
746 s4o.print(s4o.indent_spaces + "if ("); |
749 s4o.print(GET_VAR); |
747 s4o.print(GET_VAR); |
750 s4o.print("("); |
748 s4o.print("("); |
751 print_variable_prefix(); |
749 print_variable_prefix(); |
752 s4o.print("__step_list[i].state)) {\n"); |
750 s4o.print("__step_list[i].X)) {\n"); |
753 s4o.indent_right(); |
751 s4o.indent_right(); |
754 s4o.print(s4o.indent_spaces); |
752 s4o.print(s4o.indent_spaces); |
755 print_variable_prefix(); |
753 print_variable_prefix(); |
756 // s4o.print("__step_list[i].elapsed_time = __time_add(__BOOL_LITERAL(TRUE), NULL, "); |
754 // s4o.print("__step_list[i].elapsed_time = __time_add(__BOOL_LITERAL(TRUE), NULL, "); |
757 // s4o.print("__step_list[i].elapsed_time = ADD_TIME(__BOOL_LITERAL(TRUE), NULL, "); |
755 // s4o.print("__step_list[i].elapsed_time = ADD_TIME(__BOOL_LITERAL(TRUE), NULL, "); |