モジュール機能、ユーザー定義命令(関数)

モジュール機能とはスクリプトを整理し再利用可能にするための仕組みです。(HSPマニュアルより)
ユーザー定義命令と組み合わせれば、スクリプトをよりシンプルに書くことができます。

命令を定義するには#deffuncを使います。
#deffunc 命令の名前で定義できます。#deffuncからreturnまでの間が命令の内容になります。
サブルーチンと似ていますが、注意しなければいけないのは、
必ず命令の定義位置より後に命令を書かなければならない点です。

モジュール空間とは、変数名やラベル名を独立して扱える領域のことです。
#module#globalで囲まれた部分がモジュール空間になります。

下のサンプルでは、testという命令を定義して使っています。
モジュール空間の変数aとその外にあるaが別物である事に注目してください。

#module
#deffunc test
mes a
a++
return
#global

a = 10
test
test
test
mes a

また、ユーザー定義命令にはパラメータを渡す事が可能です。
#deffunc 命令の名前 パラメータタイプ1 エイリアス名1,・・・
パラメータタイプは以下の中から選びます。エイリアスは、ほとんど変数と同様のものです。

タイプ内容
int整数値
var変数(配列なし)
array変数(配列あり)
str文字列
double実数値
labelラベル
localローカル変数

下のサンプルは、文字列と整数値をパラメータとして受け取り、文字列aをb回表示します。

#module
#deffunc test str a, int b
repeat b
mes a
loop
return
#global

test "テスト",3

#defcfuncで関数も定義できます。
定義命令と違い、returnで返り値(パラメータ)を指定する必要があります。
下の関数はaのb乗を返します。

#module
#defcfunc power int a,int b
x = 1
repeat b
x = x * a
loop
return x
#global

mes power(3,5)