マクロ使って文短縮〜♪
#module mod_label i_name,i_ID,i_l_value ;i_nameラベル変数の名前 ;i_nameラベル変数のID ;i_nameラベル変数の値、コマンド番号を格納する(だったようなw) #modinit str p_name,int p_ID,int p_l_value i_name=p_name i_ID=p_ID i_l_value=p_l_value return ;getter #modcfunc local get_i_name return i_name #modcfunc local get_i_ID return i_ID #modcfunc local get_i_l_value return i_l_value #modfunc local set_i_l_value var _p4set_value i_l_value = _p4set_value return #modfunc local dump mes "dump_A"+i_l_value mes "dump_B"+i_ID return #global #module label_manage #deffunc local set_ID_sw_zero ; global fv_ID fv_ID=0 return #deffunc local x_label_search_init str _p_name,int _p_ID,int _p_l_value,local loc_r loc_r=label_search_from_ID_non_error_mes(_p_ID) if loc_r==-1{ newmod o_label,mod_label,_p_name,_p_ID,_p_l_value fv_ID++ return } dialog "your ID already rgst:"+_p_ID,1 return #defcfunc local label_search_from_ID_non_error_mes int _3p_ID,local loc_i,local loc_get_index for loc_i,0,fv_ID,1 loc_get_index=get_i_ID@mod_label(o_label.loc_i) ; mes "ID"+get_i_ID@mod_variable(o_var.loc_i) if loc_get_index==_3p_ID:return loc_i next return -1 #defcfunc local label_search_from_ID int _3p_ID,local loc_i,local loc_get_index for loc_i,0,fv_ID,1 loc_get_index=get_i_ID@mod_label(o_label.loc_i) ; mes "ID"+get_i_ID@mod_variable(o_var.loc_i) if loc_get_index==_3p_ID:return loc_i next dialog "don't find from labelID"+_3p_ID,1 return -1 #defcfunc local is_hit_after_label_search str _4p_name,int _4p_i if _4p_i==-1:return -1 rr_name=get_i_name@mod_label(o_label._4p_i) if rr_name==_4p_name:return 1 dialog "don't hit from labelID"+_4p_i,1 ; dialog ""+rr_name,1 return -1 #defcfunc local pre_get_x_label_value str __p_name,int __p_ID,local r_name r_name=get_i_name@mod_label(o_label.__p_ID) if r_name!=__p_name:return -1 return get_i_l_value@mod_label(o_label.__p_ID) #defcfunc local get_x_label_value str __p_name,int _p3b_ID,local loc_sch,local loc_hit loc_sch=label_search_from_ID@label_manage(_p3b_ID) loc_hit=is_hit_after_label_search@label_manage(__p_name,loc_sch) if (loc_sch!=-1){ if (loc_hit!=-1){ return pre_get_x_label_value@label_manage(__p_name,loc_sch) } } return -1 #deffunc local pre_set_x_label_value str __p_name,int __p_ID,var __p4set,local r_name r_name=get_i_name@mod_label(o_label.__p_ID) logmes ""+__p4set logmes ""+r_name if r_name!=__p_name:return -1 set_i_l_value@mod_label o_label.__p_ID,__p4set return #deffunc local set_x_label_value str _p3c_name,int _p3c_ID,var _p3c_4set,local loc_sch_b,local loc_hit_b loc_sch_b=label_search_from_ID@label_manage(_p3c_ID) loc_hit_b=is_hit_after_label_search@label_manage(_p3c_name,loc_sch_b) if (loc_sch_b!=-1){ if (loc_hit_b!=-1){ pre_set_x_label_value@label_manage _p3c_name,loc_sch_b,_p3c_4set } } return -1 #deffunc local dump dump@mod_label o_label.0 dump@mod_label o_label.1 return #global #module mod_variable v_i_name,v_i_ID,v_i_v_value #modinit str p_name,int p_ID,int p_v_value v_i_name=p_name v_i_ID=p_ID v_i_v_value=p_v_value return #modcfunc local get_i_name return v_i_name #modcfunc local get_i_ID return v_i_ID #modcfunc local get_i_v_value return v_i_v_value #modfunc local set_i_v_value var _p4set_value v_i_v_value = _p4set_value return #modfunc local dump mes "dump_A"+v_i_v_value mes "dump_B"+v_i_ID return #global #module variable_manage #deffunc local set_ID_sw_zero fv_ID=0 return #deffunc local x_var_search_init str _p_name,int _p_ID,int _p_v_value,local loc_r loc_r=var_search_from_ID_non_error_mes(_p_ID) if loc_r==-1{ newmod o_var,mod_variable,_p_name,_p_ID,_p_v_value fv_ID++ return } dialog "your ID already rgst:"+_p_ID,1 return #deffunc local x_var_init str _p_name,int _p_ID,int _p_v_value newmod o_var,mod_variable,_p_name,_p_ID,_p_v_value ; mes get_i_ID@mod_variable(o_var.fv_ID) fv_ID++ return #defcfunc local var_search_from_ID_non_error_mes int _3p_ID,local loc_i,local loc_get_index for loc_i,0,fv_ID,1 loc_get_index=get_i_ID@mod_variable(o_var.loc_i) ; mes "ID"+get_i_ID@mod_variable(o_var.loc_i) if loc_get_index==_3p_ID:return loc_i next return -1 #defcfunc local var_search_from_ID int _3p_ID,local loc_i,local loc_get_index for loc_i,0,fv_ID,1 loc_get_index=get_i_ID@mod_variable(o_var.loc_i) ; mes "ID"+get_i_ID@mod_variable(o_var.loc_i) if loc_get_index==_3p_ID:return loc_i next dialog "don't find from varID"+_3p_ID,1 return -1 #defcfunc local is_hit_after_var_search str _4p_name,int _4p_i if _4p_i==-1:return -1 rr_name=get_i_name@mod_variable(o_var._4p_i) if rr_name==_4p_name:return 1 dialog "don't hit from varID"+_4p_i,1 ; dialog ""+rr_name,1 return -1 #deffunc local set_x_var_value str _p3c_name,int _p3c_ID,var _p3c_4set,local loc_sch_b,local loc_hit_b loc_sch_b=var_search_from_ID@variable_manage(_p3c_ID) loc_hit_b=is_hit_after_var_search@variable_manage(_p3c_name,loc_sch_b) if (loc_sch_b!=-1){ if (loc_hit_b!=-1){ pre_set_x_var_value@variable_manage _p3c_name,loc_sch_b,_p3c_4set } } return -1 #defcfunc local pre_get_x_var_value str __p_name,int __p_ID,local r_name r_name=get_i_name@mod_variable(o_var.__p_ID) if r_name!=__p_name:return -1 return get_i_v_value@mod_variable(o_var.__p_ID) #deffunc local pre_set_x_var_value str __p_name,int __p_ID,var __p4set,local r_name r_name=get_i_name@mod_variable(o_var.__p_ID) logmes ""+__p4set logmes ""+r_name if r_name!=__p_name:return -1 set_i_v_value@mod_variable o_var.__p_ID,__p4set return #defcfunc local get_x_var_value str __p_name,int _p3b_ID,local loc_sch,local loc_hit loc_sch=var_search_from_ID@variable_manage(_p3b_ID) loc_hit=is_hit_after_var_search@variable_manage(__p_name,loc_sch) if (loc_sch!=-1){ if (loc_hit!=-1){ return pre_get_x_var_value@variable_manage(__p_name,loc_sch) } } return -1 #deffunc local dump dump@mod_variable o_var.0 dump@mod_variable o_var.1 return #global dim pc_stack,500 n_pc_stack=0 hoge_pc=1 dim num_stack,500 repeat length(num_stack) num_stack.cnt=-1 loop // line search のみ有効 flag_on_do=0 flag_on_line_search=1 flag_on_label_search=0 #define ctype l_avoid(%1) goto *l_a_%1 #define ctype catch_l_avoid(%1)*l_a_%1 #define ctype l_def(%1)*l_def_%1 #define ctype l_def_go(%1) *l_def_%1 #define switch_set_B my_pc_B #define eq_B(%1) case %1:my_pc_B++: #define eq_B_one(%1,%2) case %1:my_pc_B++:%2:goto *sw_begin: #define eq_B_two(%1,%2,%3):\ case %1:my_pc_B++:%2:goto *sw_begin:case %1+1:my_pc_B++:%3:goto *sw_begin: #define eq_B_three(%1,%2,%3,%4):\ case %1:my_pc_B++:%2:goto *sw_begin:case %1+1:my_pc_B++:%3:goto *sw_begin:\ case %1+2:my_pc_B++:%4:goto *sw_begin: #define cmd_fin :my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin ;goto *l_def_A ;goto l_def(A) ;l_def(E): ;*l_def_B ;x_label_init@mod_label 1,"a",1 ;0 ;x_label_init@mod_label 0,"aa1",11 ;1 ;x_label_init@mod_label 0,"ab1",13 ;2 ;x_label_init@mod_label 0,"ax1a",15 ;3 dim one_code,256 x=0 f_stop=0 // ボタンによって選択される選択肢のID selected_btnext="a" #enum nop=0 #enum en_get_my_label #enum en_button_A #enum en_button_B #enum en_cls0 #enum en_objsize #enum en_pos #enum en_mes #enum en_stop #enum en_goto #enum en_calc my_pc=1 my_pc_B=1 flag_on_l_search=1 goto *@f *search_l_end flag_on_l_search=0 goto *sw_begin *@ flag_on_line_search=1 if 0{ *count_b flag_on_line_search=0 flag_on_label_search=1 flag_on_do=0 label_pc=1 } if 0{ *count_c flag_on_line_search=0 flag_on_label_search=0 flag_on_do=1 cmd_pc=1 } *sw_begin await 1 ; logmes "BEGIN" goto *sbr_end *sbr_l_search if flag_on_line_search==1{ pc_stack.hoge_pc=my_line:hoge_pc++ } return *sbr_lab_search if flag_on_label_search==1{ if label_pc==num_stack.my_line{ if my_pc_B==1{;logmes "途中C": my_pc_B=1:label_pc++:goto *sw_begin }// label } } return *sbr_do if flag_on_do==1{ ; logmes "途中D" ; logmes ""+num_stack.my_line ; logmes "pc"+cmd_pc if cmd_pc==num_stack.my_line{ ; logmes "途中inE1" my_pc_B=1:cmd_pc++:goto *sw_begin } } return ;*flag_clear ; on_flag_on_line_search=0 ; on_flag_on_label_search=0 ; on_flag_on_do==0 ; return *sbr_end // case 1: // def label my_line=int(__LINE__) ; on_flag_on_line_search=1 ; on_flag_on_label_search=1 ; on_flag_on_do=1 gosub *sbr_l_search gosub *sbr_do if flag_on_label_search==1{ if label_pc==num_stack.my_line{ logmes "途中A" switch my_pc_B eq_B_three 1,cp1="a",cp2=1,cp3=label_pc eq_B 4:x_label_search_init@label_manage cp1,cp2,cp3:goto *sw_begin eq_B 5:logmes "途中B":my_pc_B=1:label_pc++:goto *sw_begin swend } } ; gosub *flag_clear // case 2: // cls 0 my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ logmes "途中inE2" if my_pc_B==1:cr_com=en_cls0:cmd_fin } } // case 3: // objsize my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B_two 1,cp1=120,cp2=24 eq_B 3:cr_com=en_objsize:cmd_fin swend } } // case 4: my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search // read label if flag_on_do==1{ if cmd_pc==num_stack.my_line{ logmes "inE4" switch my_pc_B eq_B_two 1,cp1="aa1",cp2=11 eq_B 3:cr_com=en_get_my_label: goto *com_sw: goto *sw_begin swend } } // button if flag_on_do==1{ if cmd_pc==num_stack.my_line{ logmes "inE5" switch my_pc_B eq_B 4:cp1="X足す1":goto *sw_begin eq_B 5:bt_pc_1=my_label: goto *sw_begin eq_B 6:cr_com=en_button_A:cmd_fin swend } } // case 5: my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search // read label if flag_on_do==1{ if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B_two 1,cp1="ab1",cp2=12 eq_B 3:cr_com=en_get_my_label: goto *com_sw: goto *sw_begin swend } } // button if flag_on_do==1{ if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B 4:cp1="X引く1":goto *sw_begin eq_B 5:bt_pc_2=my_label: goto *sw_begin eq_B 6:cr_com=en_button_B:cmd_fin swend } } // case 6: // pos my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B_two 1,cp1=150,cp2=0 eq_B 3:cr_com=en_pos:cmd_fin swend } } // case 7: // mes my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B 1:cp1="ボタンを押してください":goto *sw_begin eq_B 2:cr_com=en_mes:cmd_fin swend } } // case 8: // stop my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ if my_pc_B==1:cr_com=en_stop:cmd_fin } } // case 9:"aa1" // def label my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_do if flag_on_label_search==1{ if label_pc==num_stack.my_line{ switch my_pc_B eq_B_three 1,cp1="aa1",cp2=11,cp3=label_pc eq_B 4:x_label_search_init@label_manage cp1,cp2,cp3:goto *sw_begin swend } if label_pc==num_stack.my_line{ ;x_var_search_init@variable_manage "x",1,2 switch my_pc_B eq_B_three 5,cp1="x",cp2=10,cp3=0 eq_B 8:x_var_search_init@variable_manage cp1,cp2,cp3:goto *sw_begin swend } if label_pc==num_stack.my_line{ switch my_pc_B eq_B_three 9,cp1="y",cp2=20,cp3=0 eq_B 12:x_var_search_init@variable_manage cp1,cp2,cp3 my_pc_B=1:label_pc++:goto *sw_begin swend } } // case 10: // calc my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search // 変数値取得 if flag_on_do==1{ ; v1=get_x_var_value@variable_manage("x",1) if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B_two 1,cp1="x",cp2=10 eq_B 3:reg1=get_x_var_value@variable_manage(cp1,cp2):logmes ""+reg1:goto *sw_begin swend switch my_pc_B eq_B_two 4,cp1="y",cp2=20 eq_B 6:reg2=get_x_var_value@variable_manage(cp1,cp2):goto *sw_begin swend ; switch my_pc_B ; eq_B 1:reg1=x:goto *sw_begin ; eq_B 2:reg2=y:goto *sw_begin ; swend } } // 演算 if flag_on_do==1{ if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B 7:reg3=reg1+1:goto *sw_begin eq_B 8:reg2+=2:goto *sw_begin eq_B 9:cr_com=en_calc:goto *com_sw: goto *sw_begin swend } } // 代入 if flag_on_do==1{ ; set_x_var_value@variable_manage "x",1,v1 if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B_three 10,cp1="x",cp2=10,cp3=reg3 eq_B 13:set_x_var_value@variable_manage cp1,cp2,cp3:goto *sw_begin swend switch my_pc_B eq_B_three 14,cp1="y",cp2=20,cp3=reg2 eq_B 17:set_x_var_value@variable_manage cp1,cp2,cp3: logmes "通過check B":cmd_fin swend } } // case 11: my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search // read label if flag_on_do==1{ if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B_two 1,cp1="ax1a",cp2=21 eq_B 3:cr_com=en_get_my_label: goto *com_sw: goto *sw_begin swend } } // goto if flag_on_do==1{ if cmd_pc==num_stack.my_line{ if my_pc_B==4:logmes ""+my_label:cp1=my_label:cr_com=en_goto::cmd_fin } } // case 12:"ab1" // def label my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_do if flag_on_label_search==1{ if label_pc==num_stack.my_line{ switch my_pc_B eq_B_three 1,cp1="ab1",cp2=12,cp3=label_pc eq_B 4:x_label_search_init@label_manage cp1,cp2,cp3:goto *sw_begin eq_B 5:my_pc_B=1:label_pc++:goto *sw_begin swend } } // case 13: // calc my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search // 変数値取得 if flag_on_do==1{ ; v1=get_x_var_value@variable_manage("x",1) if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B_two 1,cp1="x",cp2=10 eq_B 3:reg1=get_x_var_value@variable_manage(cp1,cp2):logmes ""+reg1:goto *sw_begin swend switch my_pc_B eq_B_two 4,cp1="y",cp2=20 eq_B 6:reg2=get_x_var_value@variable_manage(cp1,cp2):goto *sw_begin swend ; switch my_pc_B ; eq_B 1:reg1=x:goto *sw_begin ; eq_B 2:reg2=y:goto *sw_begin ; swend } } // 演算 if flag_on_do==1{ if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B 7:reg3=reg1-1:goto *sw_begin eq_B 8:reg2-=2:goto *sw_begin eq_B 9:cr_com=en_calc:goto *com_sw: goto *sw_begin swend } } // 代入 if flag_on_do==1{ ; set_x_var_value@variable_manage "x",1,v1 if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B_three 10,cp1="x",cp2=10,cp3=reg3 eq_B 13:set_x_var_value@variable_manage cp1,cp2,cp3:goto *sw_begin swend switch my_pc_B eq_B_three 14,cp1="y",cp2=20,cp3=reg2 eq_B 17:set_x_var_value@variable_manage cp1,cp2,cp3: logmes "通過check B" my_pc_B=1:cmd_pc++:goto *sw_begin swend } } // case 14 my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search // read label if flag_on_do==1{ if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B_two 1,cp1="ax1a",cp2=21 eq_B 3:cr_com=en_get_my_label:cmd_fin swend } } // goto if flag_on_do==1{ if cmd_pc==num_stack.my_line{ if my_pc_B==4:logmes ""+my_label:cp1=my_label:cr_com=en_goto:cmd_fin } } // case 15:"ax1a" // def label my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_do if flag_on_label_search==1{ if label_pc==num_stack.my_line{ switch my_pc_B eq_B_three 1,cp1="ax1a",cp2=21,cp3=label_pc eq_B 4:x_label_search_init@label_manage cp1,cp2,cp3:goto *sw_begin eq_B 5:my_pc_B=1:label_pc++:goto *sw_begin swend } } // case 16 // cls 0 my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ if my_pc_B==1:cr_com=en_cls0:cmd_fin } } // case 17 // objsize my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B_two 1,cp1=120,cp2=24 eq_B 3:cr_com=en_objsize:cmd_fin swend } } // case 18 my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search // read label if flag_on_do==1{ if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B_two 1,cp1="a",cp2=1 eq_B 3:cr_com=en_get_my_label: goto *com_sw: goto *sw_begin swend } } // button if flag_on_do==1{ if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B 4:cp1="NEXT":goto *sw_begin eq_B 5:bt_pc_1=my_label: goto *sw_begin eq_B 6:cr_com=en_button_A:cmd_fin swend } } // case 19 // pos my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B_two 1,cp1=150,cp2=0 eq_B 3:cr_com=en_pos:cmd_fin swend } } // case 20 // mes my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ switch my_pc_B eq_B_two 1,cp1="x",cp2=10 eq_B 3:reg1=get_x_var_value@variable_manage(cp1,cp2):logmes ""+reg1:goto *sw_begin swend switch my_pc_B eq_B_two 4,cp1="y",cp2=20 eq_B 6:reg2=get_x_var_value@variable_manage(cp1,cp2):goto *sw_begin swend switch my_pc_B eq_B 7:cp1="Xの値は"+reg1+"です":goto *sw_begin eq_B 8:cr_com=en_mes:cmd_fin swend } } // case 21 // stop my_line=int(__LINE__) gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ if my_pc_B==1:cr_com=en_stop:cmd_fin } } //if flag_on_label_search==1:mes 6:goto *_2do // pc_stack dump if flag_on_line_search==1{ mes "dump" repeat 30 logmes ""+cnt+" "+pc_stack.cnt loop repeat 30 if pc_stack.cnt!=0{ num_stack(pc_stack.cnt)=cnt } loop repeat 500 logmes ""+cnt+":"+num_stack.cnt loop } ;mes 6 ; goto *sw_begin ;} if flag_on_line_search==1{ ; logmes "B" goto *count_b } if flag_on_label_search==1{ goto *count_c } mes "stop" stop *com_sw switch cr_com case en_get_my_label: my_label=get_x_label_value@label_manage(cp1,cp2):goto *sw_begin case en_button_A: button cp1,*bt_hoge_1:swbreak case en_button_B: button cp1,*bt_hoge_2:swbreak case en_cls0: cls 0:swbreak case en_objsize:objsize cp1,cp2:swbreak case en_pos: pos cp1,cp2:swbreak case en_mes: mes ""+cp1:swbreak case en_stop: f_stop=1:swbreak case en_calc: goto *sw_begin case en_goto: cmd_pc=cp1:goto *sw_begin swend if f_stop==1:f_stop=0:stop goto *sw_begin *get_my_label my_label=get_x_label_l_value@mod_label(cp1,cp2) ; my_label=get_x_label_l_value@mod_label("a",0) goto *sw_begin *bt_hoge_1 ; mes my_pc ; mes bt_pc_1 cmd_pc=bt_pc_1 goto *sw_begin *bt_hoge_2 cmd_pc=bt_pc_2 goto *sw_begin *sw_end stop