#author("2018-03-16T00:46:34+09:00","","")
white_space企画の現状 labelモジュール ver 0.1.0
#author("2018-03-16T00:47:20+09:00","","")
*white_space企画の現状 labelモジュール ver 0.1.0 [#a31e367a]

ラベル構造体を移植しました

 #include "mdl_value.as"
 #include "mdl_value.as" //includeガードが効いてるかのTEST
 #ifndef _MY_WS_DEFINE_
 #define _MY_WS_DEFINE_
 // knowbugが配列インスタンスを800くらいまでしか表示してくれないため
 #define STACK_MEMBERS 			750
 #define HEAP_MEMBERS 			400
 #define MAX_LABELS 			200
 #define MAX_LABEL_LENGTH 		500
 #define MAX_INSTRUCTIONS 		24
 #define MAX_INSTRUCTION_LENGTH 	        5
 #define MAX_NESTED_SUBROUTINES	        20
 #endif 
 //struct heap_model {
 //	long long* address;
 //	long long* value;
 //	long elements;
 //} heap;
 #module label_2youso label_youso_str_id,label_youso_location
 #modinit
 	label_youso_location=-1
 	newmod label_youso_str_id,mdl_one_value
 	return
 #modfunc local set_location int __p_int
 	label_youso_location=__p_int
 	return 1
 #modfunc local set_str_id var __p_value
 //	logmes "vv"+__p_value
 	set@mdl_one_value label_youso_str_id,__p_value
 	return 1
 #modcfunc local get_location
 	return label_youso_location
 #modcfunc local get_str_id
 	return get@mdl_one_value(label_youso_str_id)
 #modcfunc local ret_vartype_value
 	return ret_vartype@mdl_one_value(label_youso_str_id)
 #modcfunc local tostr_vartype_value
 	return tostr_vartype@mdl_one_value(label_youso_str_id)
 #global
 //////////////////////////////////////////////////////////////////////
 
 
 #module label_model label_youso,labels_size,total_labels
 #modinit int p_size
 	labels_size = p_size
 	logmes ""+p_size
 	repeat p_size
 		newmod label_youso,label_2youso
 	loop
 	total_labels=0
 	return
 #modcfunc local get_size
 	return labels_size
 #modfunc local set_location int pp_value,int pp_index
 	if pp_index < 0:return -1
 	if pp_index >= labels_size:return -1
 	set_location@label_2youso label_youso.pp_index,pp_value
 	return 1
 #modfunc local set_str_id var ppp_value,int ppp_index
 	if ppp_index < 0:return -1
 ;	logmes "l"+ppp_index
 ;	logmes "l"+labels_size
 ;	logmes "l"+ppp_value
 	if ppp_index >= labels_size:return -1
 	set_str_id@label_2youso label_youso.ppp_index,ppp_value
 	return 1
 #modfunc local set_total_labels int p_index
 	if p_index < 0:return -1
 	if p_index >= labels_size:return -1
 	total_labels = p_index
 	return
 #modcfunc local get_location int p_index
 	if p_index < 0:return -1
 	if p_index >= labels_size:return -1
 	return get_location@label_2youso(label_youso.p_index)
 #modcfunc local get_str_id int p_index
 	if p_index < 0:return -1
 	if p_index >= labels_size:return -1
 	return get_str_id@label_2youso(label_youso.p_index)
 #modcfunc local get_labels_size
 	return labels_size
 #modcfunc local get_total_labels
 	return total_labels
 #modcfunc local ret_vartype_value int p_index
 	if p_index < 0:return -1
 	if p_index >= labels_size:return -1
 	return ret_vartype_value@label_2youso(label_youso.p_index)
 #modcfunc local tostr_vartype_value int p_index
 	return tostr_vartype_value@label_2youso(label_youso.p_index)
 #modfunc local cleanup
 	i=0
 	for i,labels_size-1,-1,-1
 		delmod label_youso.i
 	next
 	return
 #global
 //↓重要w
 newmod label_table,label_model,MAX_LABELS@
 
 #if 1
 repeat 5
 tmp=cnt*3
 set_location@label_model label_table,tmp,cnt
 loop
 tmp_s="111"
 set_str_id@label_model label_table,tmp_s,0
 tmp_s="112"
 set_str_id@label_model label_table,tmp_s,1
 tmp_s="121"
 set_str_id@label_model label_table,tmp_s,2
 ;set_elements@heap_model heap,7
 
 repeat 5
 logmes "label location "+cnt+":"+get_location@label_model(label_table,cnt)
 loop
 repeat 5
 logmes "label str id "+cnt+":"+get_str_id@label_model(label_table,cnt)
 loop
 
 repeat 5
 logmes "label type "+ret_vartype_value@label_model(label_table,cnt)
 logmes "label type "+tostr_vartype_value@label_model(label_table,cnt)
 loop
 #endif
 //bool create_label_table(void)
 //{
 //	if (label_table.label_id = (char**)calloc(MAX_LABELS, sizeof(char*))) {
 //		if (label_table.label_location = (int*)calloc(MAX_LABELS, sizeof(int))) {
 //			return true;
 //		}
 //		free (label_table.label_id);
 //	}
 //	return false;
 //}
 #module
 #deffunc create_label_table local loc_tmp,local loc_tmp_s
 // stackのsizeは途中から変えれなくなったw
 	loc_tmp=0
 	loc_tmp_s="000"
 	repeat MAX_LABELS@
 		set_location@label_model label_table@,loc_tmp,cnt
 		set_str_id@label_model label_table@,loc_tmp_s,cnt
 	loop
 	set_total_labels@label_model label_table@,0
 	return 1
 #deffunc label_set_total_labels int _p_int
 	set_total_labels@label_model label_table@,_p_int
 	return
 #defcfunc label_get_total_labels
 	return get_total_labels@label_model(label_table@)
 #defcfunc label_get_size
 	return get_size@label_model(label_table@)
 #deffunc label_set_location int _pp_value,int _pp_index
 	set_location@label_model label_table@,_pp_value,_pp_index
 	return 1
 #deffunc label_set_str_id var _pp_value,int _pp_index
 //	logmes "v"+_pp_value
 //	logmes "v"+_pp_index
 	set_str_id@label_model label_table@,_pp_value,_pp_index
 	return 1
 #defcfunc label_get_location int _p_index
 	return get_location@label_model(label_table@,_p_index)
 #defcfunc label_get_str_id int _p_index
 	return get_str_id@label_model(label_table@,p_index)
 
 #defcfunc label_ret_vartype_value int _p_int
 	return ret_vartype_value@label_model(label_table@,_p_int)
 #defcfunc label_tostr_vartype_value int _p_int
 	return tostr_vartype_value@label_model(label_table@,_p_int)
 #deffunc label_cleanup
 	cleanup@label_model(label_table@)
 	delmod label_table@
 	return
 #global
 #if 1
 create_label_table
 
 baz="2111"
 label_set_str_id baz,0
 label_set_location 10,0
 baz="2112"
 label_set_str_id baz,1
 label_set_location 20,1
 baz="2121"
 label_set_str_id baz,2
 label_set_location 30,2
 logmes "label get loc"+label_get_location(0)
 logmes "label get id "+label_get_str_id(0)
 logmes "label get loc"+label_get_location(1)
 logmes "label get id "+label_get_str_id(1)
 logmes "label get loc"+label_get_location(2)
 logmes "label get id "+label_get_str_id(2)
 logmes "label type "+label_ret_vartype_value(1)
 logmes "label type "+label_tostr_vartype_value(1)
 #endif
 #if 0
 label_cleanup
 #endif