sample方式にリファクタリングしました
ほっとくと永遠にリファクタしがちな僕w
新しい処理も含めながら 攻めの気持ちでリファクタリング出来たならw
リファクタ前はNO483です
#module mod_label i_name,i_ID,i_l_value #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 #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 #deffunc local x_label_init int sw_new_p,str _p_name,int _p_l_value ; global fv_ID if sw_new_p==1{ fv_ID=0 } newmod o_label,mod_label,_p_name,fv_ID,_p_l_value fv_ID++ return #defcfunc local get_x_label_l_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) #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++: ;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: 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 1:cp1=1:goto *sw_begin eq_B 2:cp2="a":goto *sw_begin eq_B 3:cp3=label_pc:goto *sw_begin eq_B 4:x_label_init@mod_label 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: my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //2 logmes ""+13 logmes ""+num_stack.my_line logmes "途中inE2" if my_pc_B==1{cr_com=en_cls0: my_pc_B=1:cmd_pc++:goto *com_sw } ; cmd_pc++: ; cr_com=en_cls0: goto *com_sw goto *sw_begin } } //case 3: my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //3 switch my_pc_B eq_B 1:cp1=120:goto *sw_begin eq_B 2:cp2=24: goto *sw_begin eq_B 3:cr_com=en_objsize: my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin swend } } //case 4: my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //4 logmes "inE4" switch my_pc_B eq_B 1:cp1="aa1":goto *sw_begin eq_B 2:cp2=1: goto *sw_begin eq_B 3:cr_com=en_get_my_label: my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin swend } } //case 5: my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //5 logmes "inE5" switch my_pc_B eq_B 1:cp1="X足す1":goto *sw_begin eq_B 2:bt_pc_1=my_label: goto *sw_begin eq_B 3:cr_com=en_button_A my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin swend } } //case 6: my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //6 switch my_pc_B eq_B 1:cp1="ab1":goto *sw_begin eq_B 2:cp2=2: goto *sw_begin eq_B 3:cr_com=en_get_my_label: my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin swend } } //case 7: my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //7 switch my_pc_B eq_B 1:cp1="X引く1":goto *sw_begin eq_B 2:bt_pc_2=my_label: goto *sw_begin eq_B 3:cr_com=en_button_B my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin swend } } //case 8: my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //8 switch my_pc_B eq_B 1:cp1=150:goto *sw_begin eq_B 2:cp2=0: goto *sw_begin eq_B 3:cr_com=en_pos my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin swend } } //case 9: my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //9 switch my_pc_B eq_B 1:cp1="ボタンを押してください":goto *sw_begin eq_B 2:cr_com=en_mes my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin swend } } //case 10: my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //10 if my_pc_B==1{cr_com=en_stop my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin } } } //case 11:"aa1" my_line=int(__LINE__) //x行でcaseみたいな処理 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 1:cp1=0:goto *sw_begin eq_B 2:cp2="aa1":goto *sw_begin eq_B 3:cp3=label_pc:goto *sw_begin eq_B 4:x_label_init@mod_label cp1,cp2,cp3:goto *sw_begin eq_B 5:my_pc_B=1:label_pc++:goto *sw_begin swend } } //case 12: my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search // 変数値取得 if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //12 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{ //12 switch my_pc_B eq_B 3:reg3=reg1+1:goto *sw_begin eq_B 4:reg2+=2:goto *sw_begin eq_B 5:cr_com=en_calc:goto *com_sw: goto *sw_begin swend } } // 代入 if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //12 switch my_pc_B eq_B 6:x=reg3:goto *sw_begin eq_B 7:y=reg2:my_pc_B=1:cmd_pc++:goto *sw_begin swend } } //case 13: my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //13 switch my_pc_B eq_B 1:cp1="ax1a":goto *sw_begin eq_B 2:cp2=3:goto *sw_begin eq_B 3:cr_com=en_get_my_label: my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin swend } } //case 14: my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //14 if my_pc_B==1{logmes ""+my_label:my_pc_B=1:cp1=my_label:cr_com=en_goto:goto *com_sw: goto *sw_begin } } } //case 15:"ab1" my_line=int(__LINE__) //x行でcaseみたいな処理 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 1:cp1=0:goto *sw_begin eq_B 2:cp2="ab1":goto *sw_begin eq_B 3:cp3=label_pc:goto *sw_begin eq_B 4:x_label_init@mod_label cp1,cp2,cp3:goto *sw_begin eq_B 5:my_pc_B=1:label_pc++:goto *sw_begin swend } } //case 16: my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search // 変数値取得 if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //16 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{ //16 switch my_pc_B eq_B 3:reg3=reg1-1:goto *sw_begin eq_B 4:reg2-=2:goto *sw_begin eq_B 5:cr_com=en_calc:goto *com_sw: goto *sw_begin swend } } // 代入 if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //16 switch my_pc_B eq_B 6:x=reg3:goto *sw_begin eq_B 7:y=reg2:my_pc_B=1:cmd_pc++:goto *sw_begin swend } } //case 17: my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //17 switch my_pc_B eq_B 1:cp1="ax1a":goto *sw_begin eq_B 2:cp2=3:goto *sw_begin eq_B 3:cr_com=en_get_my_label: my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin swend } } //case 18 my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //18 if my_pc_B==1{logmes ""+my_label:my_pc_B=1:cp1=my_label:cr_com=en_goto:goto *com_sw: goto *sw_begin } } } //case 19:"ax1a" my_line=int(__LINE__) //x行でcaseみたいな処理 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 1:cp1=0:goto *sw_begin eq_B 2:cp2="ax1a":goto *sw_begin eq_B 3:cp3=label_pc:goto *sw_begin eq_B 4:x_label_init@mod_label cp1,cp2,cp3:goto *sw_begin eq_B 5:my_pc_B=1:label_pc++:goto *sw_begin swend } } //case 20 my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //20 if my_pc_B==1{cr_com=en_cls0: my_pc_B=1:cmd_pc++:goto *com_sw :goto *sw_begin} } } //case 21 my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //21 switch my_pc_B eq_B 1:cp1=120:goto *sw_begin eq_B 2:cp2=24: goto *sw_begin eq_B 3:cr_com=en_objsize: my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin swend } } //case 22 my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //22 switch my_pc_B eq_B 1:cp1="a":goto *sw_begin eq_B 2:cp2=0: goto *sw_begin eq_B 3:cr_com=en_get_my_label: my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin swend } } //case 23 my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //23 switch my_pc_B eq_B 1:cp1="NEXT":goto *sw_begin eq_B 2:bt_pc_1=my_label: goto *sw_begin eq_B 3:cr_com=en_button_A my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin swend } } //case 24 my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //24 switch my_pc_B eq_B 1:cp1=150:goto *sw_begin eq_B 2:cp2=0: goto *sw_begin eq_B 3:cr_com=en_pos my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin swend } } //case 25 my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //25 switch my_pc_B eq_B 1:cp1="Xの値は"+x+"です":goto *sw_begin eq_B 2:cr_com=en_mes my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin swend } } //case 26 my_line=int(__LINE__) //x行でcaseみたいな処理 gosub *sbr_l_search gosub *sbr_lab_search if flag_on_do==1{ if cmd_pc==num_stack.my_line{ //26 if my_pc_B==1{cr_com=en_stop logmes "in stop A" my_pc_B=1:cmd_pc++:goto *com_sw: goto *sw_begin } } } //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_l_value@mod_label(cp1,cp2):swbreak 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