stage4/generate_c/generate_c_sfc.cc
changeset 793 268bf4ca5fa1
parent 682 966f32af570d
parent 704 1adc8df05d2b
child 861 443e8243f289
equal deleted inserted replaced
785:b08167f156a1 793:268bf4ca5fa1
   201             symbol->step_name->accept(*this);
   201             symbol->step_name->accept(*this);
   202             s4o.print(" action associations\n");
   202             s4o.print(" action associations\n");
   203             current_step = symbol->step_name;
   203             current_step = symbol->step_name;
   204             s4o.print(s4o.indent_spaces + "{\n");
   204             s4o.print(s4o.indent_spaces + "{\n");
   205             s4o.indent_right();
   205             s4o.indent_right();
   206             s4o.print(s4o.indent_spaces + "char activated = ");
   206             s4o.print(s4o.indent_spaces + "char activated, desactivated, active;\n");
       
   207             s4o.print(s4o.indent_spaces + "activated = ");
   207             s4o.print(GET_VAR);
   208             s4o.print(GET_VAR);
   208             s4o.print("(");
   209             s4o.print("(");
   209             print_step_argument(current_step, "state");
   210             print_step_argument(current_step, "state");
   210             s4o.print(") && !");
   211             s4o.print(") && !");
   211             print_step_argument(current_step, "prev_state");
   212             print_step_argument(current_step, "prev_state");
   212             s4o.print(";\n");
   213             s4o.print(";\n");
   213             s4o.print(s4o.indent_spaces + "char desactivated = !");
   214             s4o.print(s4o.indent_spaces + "desactivated = !");
   214             s4o.print(GET_VAR);
   215             s4o.print(GET_VAR);
   215             s4o.print("(");
   216             s4o.print("(");
   216             print_step_argument(current_step, "state");
   217             print_step_argument(current_step, "state");
   217             s4o.print(") && ");
   218             s4o.print(") && ");
   218             print_step_argument(current_step, "prev_state");
   219             print_step_argument(current_step, "prev_state");
   219             s4o.print(";\n");
   220             s4o.print(";\n");
   220             s4o.print(s4o.indent_spaces + "char active = ");
   221             s4o.print(s4o.indent_spaces + "active = ");
   221             s4o.print(GET_VAR);
   222             s4o.print(GET_VAR);
   222             s4o.print("(");
   223             s4o.print("(");
   223             print_step_argument(current_step, "state");
   224             print_step_argument(current_step, "state");
   224             s4o.print(");\n");
   225             s4o.print(");\n");
   225             symbol->action_association_list->accept(*this);
   226             symbol->action_association_list->accept(*this);
   574                 print_variable_prefix();
   575                 print_variable_prefix();
   575                 s4o.print(",");
   576                 s4o.print(",");
   576                 current_action->accept(*this);
   577                 current_action->accept(*this);
   577                 s4o.print(",1);\n");
   578                 s4o.print(",1);\n");
   578                 s4o.indent_left();
   579                 s4o.indent_left();
   579                 s4o.print("}\n");
   580                 s4o.print(s4o.indent_spaces + "}\n");
   580                 s4o.print(s4o.indent_spaces + "else if (active) {\n");
   581                 s4o.print(s4o.indent_spaces + "else if (active) {\n");
   581                 s4o.indent_right();
   582                 s4o.indent_right();
       
   583                 s4o.print(s4o.indent_spaces);
   582                 if (vartype == search_var_instance_decl_c::external_vt)
   584                 if (vartype == search_var_instance_decl_c::external_vt)
   583                   s4o.print(SET_EXTERNAL);
   585                   s4o.print(SET_EXTERNAL);
   584                 else if (vartype == search_var_instance_decl_c::located_vt)
   586                 else if (vartype == search_var_instance_decl_c::located_vt)
   585                   s4o.print(SET_LOCATED);
   587                   s4o.print(SET_LOCATED);
   586                 else
   588                 else
   608               s4o.print(" = 1;\n");
   610               s4o.print(" = 1;\n");
   609             }
   611             }
   610             if (strcmp(qualifier, "SD") == 0 || strcmp(qualifier, "DS") == 0 || 
   612             if (strcmp(qualifier, "SD") == 0 || strcmp(qualifier, "DS") == 0 || 
   611                 strcmp(qualifier, "SL") == 0) {
   613                 strcmp(qualifier, "SL") == 0) {
   612               if (strcmp(qualifier, "SL") == 0) {
   614               if (strcmp(qualifier, "SL") == 0) {
   613                 print_action_argument(current_action, "reset_remaining_time");
   615             	s4o.print(s4o.indent_spaces);
       
   616             	print_action_argument(current_action, "reset_remaining_time");
   614               }
   617               }
   615               else {
   618               else {
   616                 print_action_argument(current_action, "set_remaining_time");
   619                 print_action_argument(current_action, "set_remaining_time");
   617               }
   620               }
   618               s4o.print(" = ");
   621               s4o.print(" = ");
   620               s4o.print(";\n");
   623               s4o.print(";\n");
   621             }
   624             }
   622             s4o.indent_left();
   625             s4o.indent_left();
   623             s4o.print(s4o.indent_spaces + "}\n");
   626             s4o.print(s4o.indent_spaces + "}\n");
   624             if (strcmp(qualifier, "DS") == 0) {
   627             if (strcmp(qualifier, "DS") == 0) {
   625               s4o.print(s4o.indent_spaces + "if (");
   628               s4o.print(s4o.indent_spaces + "if (desactivated) {\n");
   626               s4o.print("desactivated");
       
   627               s4o.print(") {\n");
       
   628               s4o.indent_right();
   629               s4o.indent_right();
   629               s4o.print(s4o.indent_spaces);
   630               s4o.print(s4o.indent_spaces);
   630               print_action_argument(current_action, "set_remaining_time");
   631               print_action_argument(current_action, "set_remaining_time");
   631               s4o.print(" = __time_to_timespec(1, 0, 0, 0, 0, 0);\n");
   632               s4o.print(" = __time_to_timespec(1, 0, 0, 0, 0, 0);\n");
   632               s4o.indent_left();
   633               s4o.indent_left();
   697         symbol->elements[i]->accept(*this);
   698         symbol->elements[i]->accept(*this);
   698         generate_c_sfc_elements->generate(symbol->elements[i], generate_c_sfc_elements_c::transitionlist_sg);
   699         generate_c_sfc_elements->generate(symbol->elements[i], generate_c_sfc_elements_c::transitionlist_sg);
   699       }
   700       }
   700       
   701       
   701       s4o.print(s4o.indent_spaces +"INT i;\n");
   702       s4o.print(s4o.indent_spaces +"INT i;\n");
   702       s4o.print(s4o.indent_spaces +"BOOL transition;\n");
       
   703       s4o.print(s4o.indent_spaces +"TIME elapsed_time, current_time;\n\n");
   703       s4o.print(s4o.indent_spaces +"TIME elapsed_time, current_time;\n\n");
   704       
   704       
   705       /* generate elapsed_time initializations */
   705       /* generate elapsed_time initializations */
   706       s4o.print(s4o.indent_spaces + "// Calculate elapsed_time\n");
   706       s4o.print(s4o.indent_spaces + "// Calculate elapsed_time\n");
   707       s4o.print(s4o.indent_spaces +"current_time = __CURRENT_TIME;\n");
   707       s4o.print(s4o.indent_spaces +"current_time = __CURRENT_TIME;\n");