#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