簡単言語

NO_593_SUBR LABEL

・配列にマイナスのインデックスを渡すバグ修正
使う人のバグではあるがw

#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
;モジュールのメンバ変数に値を代入。変数とか言って
;代入する命令がないので、定数を格納するかんじだったか、とりあえずで作ってほっといたかw
;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_init str _p_name,int _p_ID,int _p_l_value
	newmod o_label,mod_label,_p_name,_p_ID,_p_l_value
	fv_ID++
	return
#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
;変数をIDだけでも名前だけで識別してるわけでもなく
;IDを渡して返ってきた名前と引数で指定した名前が等しい時 指定が正しい。としています
;IDだけだと間違いやすく
;名前だけだと検索するのに時間がかかるので
;取得はめんどくさいですが
;二つのやり方のいいとこどりとなっています
set_ID_sw_zero@label_manage
x_label_init@label_manage "x",3,10
x_label_init@label_manage "y",6,20
dump@label_manage
	l1=pre_get_x_label_value@label_manage("x",0)
	l2=pre_get_x_label_value@label_manage("y",1)
;	l3=pre_get_x_label_value@label_manage("xx",3);error
;	l4=pre_get_x_label_value@label_manage("x",9);error
	dump@label_manage
sch1=label_search_from_ID@label_manage(3)
mes "search "+sch1
sch2=label_search_from_ID@label_manage(6)
mes "search "+sch2
sch3=label_search_from_ID@label_manage(9);error
mes "search "+sch3
mes "hit"+is_hit_after_label_search@label_manage("x",sch1)
mes "hit"+is_hit_after_label_search@label_manage("xx",sch1);error
mes "hit"+is_hit_after_label_search@label_manage("y",sch2)
mes "hit"+is_hit_after_label_search@label_manage("z",sch3);error
	v1=0
	v2=0
	v1=get_x_label_value@label_manage("x",3)
	v2=get_x_label_value@label_manage("y",6)
	v3=get_x_label_value@label_manage("z",9);error
	dump@label_manage
;	sch1=var_search_from_ID@variable_manage(1)
;	mes "search "+sch1
;	hit1=is_hit_after_var_search@variable_manage("x",sch1)
;	mes "hit"+hit1
;	if (sch1!=-1)&&(hit1!=-1){
;		v1=get_x_var_value@variable_manage("x",sch1)
;	}
;	sch2=var_search_from_ID@variable_manage(6)
;	mes "search "+sch2
;	hit2=is_hit_after_var_search@variable_manage("y",sch2)
;	mes "hit"+hit2
;	if (sch2!=-1)&&(hit2!=-1){
;		v2=pre_get_x_var_value@variable_manage("y",sch2)
;	}
	f1=100
	set_x_label_value@label_manage "x",3,f1
	f2=200
	set_x_label_value@label_manage "y",6,f2
	f3=300
	set_x_label_value@label_manage "z",9,f3;error
	dump@label_manage
;	sch1=var_search_from_ID@variable_manage(1)
;	mes "search "+sch1
;	hit1=is_hit_after_var_search@variable_manage("x",sch1)
;	mes "hit"+hit1
;	if (sch1!=-1)&&(hit1!=-1){
;;		v1=get_x_var_value@variable_manage("x",hit1)
;		pre_set_x_var_value@variable_manage "x",sch1,v1
;	}
;;	set_x_var_value@variable_manage "x",1,v1
;	sch2=var_search_from_ID@variable_manage(6)
;	mes "search "+sch2
;	hit2=is_hit_after_var_search@variable_manage("y",sch2)
;	mes "hit"+hit2
;	if (sch2!=-1)&&(hit2!=-1){
;;		v2=get_x_var_value@variable_manage("y",hit2)
;		pre_set_x_var_value@variable_manage "y",sch2,v2
;	}
;;	set_x_var_value@variable_manage "y",6,v2
;	mes v1
;	mes v2
;	dump@variable_manage
;	button "NEXT",*l_add
;	stop