おちゃめさんの書かれてるやり方が、分かりやすくてバグも出にくいと思います。
相談は解決してますが、自分の知ってることの整理もかねてプチコンでのDEFのルールを書いてみます。
・DEF FUNC OUT A,B,C
と宣言したら、OUT変数は必ず全てDEF内で初期化しないとエラーになる
・DEF FUNC()
と宣言したら、必ずRETURNで値を返さないとエラーになる。使う側も X=FUNC()と返り値を受け取らないとエラーになる。
・DEF FUNC OUT A
のようにOUT1つで宣言したDEF命令は、
X=FUNC()
の形で呼び出すこともできる。
・逆に、DEF FUNC()
の形で宣言した関数は、
FUNC OUT X
の形でも呼び出せる。
64~66行目のWHILE文で、下準備として引数のOFSTがもし負だったら、配列サイズの16(=BSIZ)の倍数を足して、OFSTを0以上の値にしてます。
67行目でPOSに足してます。
しかし、単に足しただけでは配列のサイズである16を越える可能性があります。もし16以上だったら16を引いて0~15の範囲にしたいのですが、これをやっているのが MOD BSIZ(=16)です。