white_space企画の現状 labelモジュール ver 0.1.0

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

#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