#author("2018-06-12T22:21:02+09:00","","")
#author("2018-06-12T23:14:38+09:00","","")
* サブルーチン [#s82041cf]

mdl_one_value~
について~
モジュール変数 一つを格納するサブルーチンです~

インクルードガード~
#ifndef _mdl_value_H_~

モジュール変数 オブジェクト~
mem_value~
格納するオブジェクト~
int str double のいずれかを格納~
ラベル型データ とかでもたぶん格納できます~
setter getter の関係で 変数に格納出来るデータのみです~

#modinit~
コンストラクタ~
引数を取りません なにもしません~
モジュール変数機能のため 定義が必要っぽいので実装しただけです~

#modfunc local set var p~
mem_valueのセッターです~
即値を渡そうとするとエラー~
変数のみ渡せます~
その代わり 渡せるデータの型を多いです~

#modcfunc local get~
mem_valueのゲッターです~
HSPの仕様で返せる型も多めです~

#modcfunc local ret_vartype~
データの型(数値)を返します~
label 1 str 2 dbl 3 int 4 modvar 5~

#modcfunc local tostr_vartype~
データの型(文字列)を返します~
"label" "str" "dbl" "int" "modvar"~

** mdl_value.as [#q3d4d216]

 // モジュール変数 一つを格納するサブルーチンです
 // インクルードガード
 #ifndef _mdl_value_H_
 #define _mdl_value_H_
 // mem_value
 // 格納するオブジェクト
 // int str double のいずれかを格納
 // ラベル型データ とかでもたぶん格納できます
 // setter getter の関係で 変数に格納出来るデータのみです
 #module mdl_one_value mem_value
 // コンストラクタ
 // 引数を取りません なにもしません
 // モジュール変数機能のため 定義が必要っぽいので実装しただけです
 #modinit
 	return
 // mem_valueのセッターです
 // 即値を渡そうとするとエラー
 // 変数のみ渡せます
 // その代わり 渡せるデータの型を多いです
 #modfunc local set var p
 	mem_value=p
 	return
 // mem_valueのゲッターです
 // HSPの仕様で返せる型も多めです
 #modcfunc local get
 	return mem_value
 // データの型(数値)を返します
 // label 1 str 2 dbl 3 int 4 modvar 5
 #modcfunc local ret_vartype
 	return vartype(mem_value)
 // データの型(文字列)を返します
 // "label" "str" "dbl" "int" "modvar"
 #modcfunc local tostr_vartype
 	switch vartype(mem_value)
 	case 1:return "label"
 	case 2:return "str"
 	case 3:return "dbl"
 	case 4:return "int"
 	case 5:return "modvar"
 	swend
 	return "other"
 #global
 #endif
 
 #if 0
 // TEST CODE
 newmod test_o_int,mdl_one_value
 newmod test_o_dbl,mdl_one_value
 newmod test_o_str,mdl_one_value
 a=1
 set@mdl_one_value test_o_int,a
 b=1.23
 set@mdl_one_value test_o_dbl,b
 c="HELLO"
 set@mdl_one_value test_o_str,c
 
 mes get@mdl_one_value(test_o_int)
 mes get@mdl_one_value(test_o_dbl)
 mes get@mdl_one_value(test_o_str)
 
 mes ret_vartype@mdl_one_value(test_o_int)
 mes ret_vartype@mdl_one_value(test_o_dbl)
 mes ret_vartype@mdl_one_value(test_o_str)
 
 mes tostr_vartype@mdl_one_value(test_o_int)
 mes tostr_vartype@mdl_one_value(test_o_dbl)
 mes tostr_vartype@mdl_one_value(test_o_str)
 #endif

* 仕様定数 [#gaa2c315]

インクルードガード~
#ifndef _MY_WS_DEFINE_~

STACK_MEMBERS~
スタックの大きさ~

HEAP_MEMBERS~
ヒープの大きさ~

MAX_LABELS~
定義できるラベルの多さ~

MAX_LABEL_LENGTH~
ラベルの名前の長さの最大~

MAX_INSTRUCTIONS~
命令の数の最大~

MAX_INSTRUCTION_LENGTH~
命令のデータの長さの最大~

MAX_NESTED_SUBROUTINES~
サブルーチンのネストの最大~

** mdl_ws_define.as [#ya8daea5]

 #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 		30
 // 命令のデータの長さの最大
 #define MAX_INSTRUCTION_LENGTH 	        10
 // サブルーチンのネストの最大
 #define MAX_NESTED_SUBROUTINES	        20
 #endif