サブルーチン

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

// モジュール変数 一つを格納するサブルーチンです
// インクルードガード
#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

仕様定数

インクルードガード

#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

#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