396 |
396 |
397 void *visit(action_c *symbol) { |
397 void *visit(action_c *symbol) { |
398 switch (wanted_sfcgeneration) { |
398 switch (wanted_sfcgeneration) { |
399 case actionbody_sg: |
399 case actionbody_sg: |
400 s4o.print(s4o.indent_spaces + "if("); |
400 s4o.print(s4o.indent_spaces + "if("); |
|
401 s4o.print(GET_VAR); |
|
402 s4o.print("("); |
401 print_variable_prefix(); |
403 print_variable_prefix(); |
402 s4o.print("__action_list["); |
404 s4o.print("__action_list["); |
403 s4o.print(SFC_STEP_ACTION_PREFIX); |
405 s4o.print(SFC_STEP_ACTION_PREFIX); |
404 symbol->action_name->accept(*this); |
406 symbol->action_name->accept(*this); |
405 s4o.print("].state) {\n"); |
407 s4o.print("].state)) {\n"); |
406 s4o.indent_right(); |
408 s4o.indent_right(); |
407 |
409 |
408 // generate action code |
410 // generate action code |
409 symbol->function_block_body->accept(*generate_c_code); |
411 symbol->function_block_body->accept(*generate_c_code); |
410 |
412 |
495 s4o.print("("); |
497 s4o.print("("); |
496 print_step_argument(current_step, "state"); |
498 print_step_argument(current_step, "state"); |
497 s4o.print(")) {\n"); |
499 s4o.print(")) {\n"); |
498 s4o.indent_right(); |
500 s4o.indent_right(); |
499 s4o.print(s4o.indent_spaces); |
501 s4o.print(s4o.indent_spaces); |
500 print_action_argument(symbol->action_name, "state"); |
502 s4o.print(SET_VAR); |
501 s4o.print(" = 1;\n"); |
503 s4o.print("("); |
|
504 print_action_argument(symbol->action_name, "state", true); |
|
505 s4o.print(",1);\n"); |
502 s4o.indent_left(); |
506 s4o.indent_left(); |
503 s4o.print(s4o.indent_spaces + "}"); |
507 s4o.print(s4o.indent_spaces + "}"); |
504 } |
508 } |
505 break; |
509 break; |
506 default: |
510 default: |
543 s4o.indent_right(); |
547 s4o.indent_right(); |
544 s4o.print(s4o.indent_spaces); |
548 s4o.print(s4o.indent_spaces); |
545 if (strcmp(qualifier, "N") == 0 || strcmp(qualifier, "P") == 0 || |
549 if (strcmp(qualifier, "N") == 0 || strcmp(qualifier, "P") == 0 || |
546 strcmp(qualifier, "D") == 0 || strcmp(qualifier, "L") == 0 || |
550 strcmp(qualifier, "D") == 0 || strcmp(qualifier, "L") == 0 || |
547 strcmp(qualifier, "P0") == 0 || strcmp(qualifier, "P1") == 0) { |
551 strcmp(qualifier, "P0") == 0 || strcmp(qualifier, "P1") == 0) { |
548 print_action_argument(current_action, "state"); |
552 s4o.print(SET_VAR); |
549 s4o.print(" = 1;\n"); |
553 s4o.print("("); |
|
554 print_action_argument(current_action, "state", true); |
|
555 s4o.print(",1);\n"); |
550 } |
556 } |
551 if (strcmp(qualifier, "S") == 0 || strcmp(qualifier, "SL") == 0) { |
557 if (strcmp(qualifier, "S") == 0 || strcmp(qualifier, "SL") == 0) { |
552 print_action_argument(current_action, "set"); |
558 print_action_argument(current_action, "set"); |
553 s4o.print(" = 1;\n"); |
559 s4o.print(" = 1;\n"); |
554 } |
560 } |
717 s4o.print(s4o.indent_spaces + "for (i = 0; i < "); |
723 s4o.print(s4o.indent_spaces + "for (i = 0; i < "); |
718 print_variable_prefix(); |
724 print_variable_prefix(); |
719 s4o.print("__nb_actions; i++) {\n"); |
725 s4o.print("__nb_actions; i++) {\n"); |
720 s4o.indent_right(); |
726 s4o.indent_right(); |
721 s4o.print(s4o.indent_spaces); |
727 s4o.print(s4o.indent_spaces); |
722 print_variable_prefix(); |
728 s4o.print(SET_VAR); |
723 s4o.print("__action_list[i].state = 0;\n"); |
729 s4o.print("("); |
|
730 print_variable_prefix(); |
|
731 s4o.print(",__action_list[i].state,0);\n"); |
724 s4o.print(s4o.indent_spaces); |
732 s4o.print(s4o.indent_spaces); |
725 print_variable_prefix(); |
733 print_variable_prefix(); |
726 s4o.print("__action_list[i].set = 0;\n"); |
734 s4o.print("__action_list[i].set = 0;\n"); |
727 s4o.print(s4o.indent_spaces); |
735 s4o.print(s4o.indent_spaces); |
728 print_variable_prefix(); |
736 print_variable_prefix(); |
837 s4o.print("__action_list[i].reset_remaining_time = __time_to_timespec(1, 0, 0, 0, 0, 0);\n" + s4o.indent_spaces); |
845 s4o.print("__action_list[i].reset_remaining_time = __time_to_timespec(1, 0, 0, 0, 0, 0);\n" + s4o.indent_spaces); |
838 print_variable_prefix(); |
846 print_variable_prefix(); |
839 s4o.print("__action_list[i].stored = 0;\n"); |
847 s4o.print("__action_list[i].stored = 0;\n"); |
840 s4o.indent_left(); |
848 s4o.indent_left(); |
841 s4o.print(s4o.indent_spaces + "}\n" + s4o.indent_spaces); |
849 s4o.print(s4o.indent_spaces + "}\n" + s4o.indent_spaces); |
842 print_variable_prefix(); |
850 s4o.print(SET_VAR); |
843 s4o.print("__action_list[i].state |= "); |
851 s4o.print("("); |
844 print_variable_prefix(); |
852 print_variable_prefix(); |
845 s4o.print("__action_list[i].stored;\n"); |
853 s4o.print(",__action_list[i].state,"); |
|
854 s4o.print(GET_VAR); |
|
855 s4o.print("("); |
|
856 print_variable_prefix(); |
|
857 s4o.print("__action_list[i].state) | "); |
|
858 print_variable_prefix(); |
|
859 s4o.print("__action_list[i].stored);\n"); |
846 s4o.indent_left(); |
860 s4o.indent_left(); |
847 s4o.print(s4o.indent_spaces + "}\n\n"); |
861 s4o.print(s4o.indent_spaces + "}\n\n"); |
848 |
862 |
849 /* generate action execution */ |
863 /* generate action execution */ |
850 s4o.print(s4o.indent_spaces + "// Actions execution\n"); |
864 s4o.print(s4o.indent_spaces + "// Actions execution\n"); |
865 s4o.print("("); |
879 s4o.print("("); |
866 print_variable_prefix(); |
880 print_variable_prefix(); |
867 s4o.print(","); |
881 s4o.print(","); |
868 pt->symbol->accept(*this); |
882 pt->symbol->accept(*this); |
869 s4o.print(","); |
883 s4o.print(","); |
|
884 s4o.print(GET_VAR); |
|
885 s4o.print("("); |
870 print_variable_prefix(); |
886 print_variable_prefix(); |
871 s4o.print("__action_list["); |
887 s4o.print("__action_list["); |
872 s4o.print(SFC_STEP_ACTION_PREFIX); |
888 s4o.print(SFC_STEP_ACTION_PREFIX); |
873 pt->symbol->accept(*this); |
889 pt->symbol->accept(*this); |
874 s4o.print("].state);\n"); |
890 s4o.print("].state));\n"); |
875 } |
891 } |
876 } |
892 } |
877 } |
893 } |
878 for(i = 0; i < symbol->n; i++) { |
894 for(i = 0; i < symbol->n; i++) { |
879 generate_c_sfc_elements->generate(symbol->elements[i], generate_c_sfc_elements_c::actionbody_sg); |
895 generate_c_sfc_elements->generate(symbol->elements[i], generate_c_sfc_elements_c::actionbody_sg); |