/* ===================================================================== Source: formhandler.rule ===================================================================== */ formhandler_def : FORMHANDLER identifier { isin_formhandler=1; clr_variable(); lastlineno=yylineno; A4GL_clr_extra_warnings(); clr_function_constants (); clr_call_list(); push_blockcommand("FORMHANDLER"); } define_section { //char errbuff[256]; //set_local_variables($4); } op_code op_bef_ev_list op_input_section op_aft_ev_list END_FORMHANDLER { $$=new_formhandler_definition($2, $8.str_list, $8.on_events, $7, $9); merge_variable_list(&$$->module_entry_u.formhandler_definition.variables, $4); sort_variables_v(&$$->module_entry_u.formhandler_definition.variables); A4GL_chk_and_clr_labels(); isin_formhandler=0; pop_blockcommand("FORMHANDLER"); } ; op_input_section : { //start_bind('i',0); $$.str_list=0; $$.on_events=0; } | input_section { $$.str_list= $1.str_list; $$.on_events=$1.on_events; } ; op_bef_ev_list : { $$=0;} | bef_ev_list {$$=$1;} ; bef_ev_list : bef_ev { $$=malloc(sizeof(on_events)); $$->event.event_len=1; $$->event.event_val=malloc(sizeof($$->event.event_val[0]) * $$->event.event_len); $$->event.event_val[$$->event.event_len-1]=$1; } | bef_ev_list bef_ev { $$=$1; $$->event.event_len=$1->event.event_len+1; $$->event.event_val=realloc($1->event.event_val, sizeof($$->event.event_val[0]) * $$->event.event_len); $$->event.event_val[$$->event.event_len-1]=$2; } ; bef_ev : BEFORE_EVENT atline commands_as_list { $$=new_event(EVENT_BEFORE_EVENT, NULL,$3,$2); } | BEFORE_OPEN_FORM atline commands_as_list { $$=new_event(EVENT_BEFORE_OPEN_FORM, NULL,$3,$2); } ; op_aft_ev_list : { $$=0;} | aft_ev_list {$$=$1;} ; aft_ev_list : aft_ev { $$=malloc(sizeof(on_events)); $$->event.event_len=1; $$->event.event_val=malloc(sizeof($$->event.event_val[0]) * $$->event.event_len); $$->event.event_val[$$->event.event_len-1]=$1; } | aft_ev_list aft_ev { $$=$1; $$->event.event_len=$1->event.event_len+1; $$->event.event_val=realloc($1->event.event_val, sizeof($$->event.event_val[0]) * $$->event.event_len); $$->event.event_val[$$->event.event_len-1]=$2; } ; aft_ev : AFTER_EVENT atline commands_as_list { $$=new_event(EVENT_AFTER_EVENT, NULL,$3,$2); } | BEFORE_CLOSE_FORM atline commands_as_list { $$=new_event(EVENT_BEFORE_CLOSE_FORM, NULL,$3,$2); } ; input_section : FINPUT formhandler_input_next field_ops END_INPUT{ $$.str_list= $2; $$.on_events=$3; } ; formhandler_input_next: { $$=0; //start_bind('i',0); } | expanded_ibind_var_list FROM in_id_list { $$=$3; } | BY_NAME expanded_ibind_var_list { $$=0; } ; in_id_list : identifier { $$=malloc(sizeof(str_list)); $$->str_list_entry.str_list_entry_len=1; $$->str_list_entry.str_list_entry_val=malloc(sizeof($$->str_list_entry.str_list_entry_val[0]) * $$->str_list_entry.str_list_entry_len); $$->str_list_entry.str_list_entry_val[$$->str_list_entry.str_list_entry_len-1]=strdup($1); } | in_id_list KW_COMMA identifier { $$=$1; $$->str_list_entry.str_list_entry_len=$1->str_list_entry.str_list_entry_len+1; $$->str_list_entry.str_list_entry_val=realloc($1->str_list_entry.str_list_entry_val, sizeof($$->str_list_entry.str_list_entry_val[0]) * $$->str_list_entry.str_list_entry_len); $$->str_list_entry.str_list_entry_val[$$->str_list_entry.str_list_entry_len-1]=strdup($3); } ; field_ops : field_op { $$=malloc(sizeof(on_events)); $$->event.event_len=1; $$->event.event_val=malloc(sizeof($$->event.event_val[0]) * $$->event.event_len); $$->event.event_val[$$->event.event_len-1]=$1; } | field_ops field_op { $$=$1; $$->event.event_len=$1->event.event_len+1; $$->event.event_val=realloc($1->event.event_val, sizeof($$->event.event_val[0]) * $$->event.event_len); $$->event.event_val[$$->event.event_len-1]=$2; } ; field_op : BEFORE_ANY atline commands_as_list {$$=new_event(EVENT_BEFORE_ANY, NULL,$3,$2);} | AFTER_ANY atline commands_as_list {$$=new_event(EVENT_AFTER_ANY, NULL,$3,$2);} | BEFORE in_id_list atline commands_as_list {$$=new_event(EVENT_BEFORE, $2,$4,$3);} | AFTER in_id_list atline commands_as_list {$$=new_event(EVENT_AFTER, $2,$4,$3);} | KW_ON in_id_list atline commands_as_list {$$=new_event(EVENT_ON, $2,$4,$3);} ; next_form_cmd : NEXTFORM identifier KWFIELD identifier { $$=new_next_form_cmd($2,$4); } ; enable_cmd : ENABLE field_name_list_as_struct { $$=new_enable_cmd($2); } ; enable_form_cmd : ENABLE_FORM form_name_p KWFIELD field_name_list_as_struct { $$=new_enable_form_cmd($2,$2); } ; disable_cmd : DISABLE field_name_list_as_struct { $$=new_disable_cmd($2); } ; disable_form_cmd : DISABLE_FORM form_name_p KWFIELD field_name_list_as_struct { $$=new_disable_form_cmd($2,$2); } ;