デバッグモードを追加する。

※試案につき、今後大きく変更される可能性があります。
nsluaを使ったNScripterスクリプトで、スクリプトに手を加えることなく、本番とデバッグを切り替える手段を提供するスクリプト

debug.lua

-- debug.lua
do
	-- デバッグモードかどうかを判定、記録する。
	local debug_mode = false
	local fh = io.open("debug.txt", "r")
	if io.type(fh) then
		fh:close()
		debug_mode = true
	end

	-- デバッグモードであるかどうかを返す関数。
	function is_debug() return debug_mode end
	-- 本番モードであるかどうかを返す関数。
	function is_on_air() return not(debug_mode) end

	-- NSOkBoxの上書き
	local body = NSOkBox
	-- バリデーション
	local valid = {}
	valid["nil"]      = function()     return "" end
	valid["number"]   = function(num)  return tostring(num) end
	valid["string"]   = function(str)  return str end
	valid["boolean"]  = function(bool) return bool and "真" or "偽" end -- 三項演算子もどき
	valid["table"]    = function(t)    return Json.Encode(t) end
	valid["function"] = function(func) return "これは関数です。" end
	valid["thread"]   = function()     return "これはスレッドです。" end
	valid["userdata"] = function()     return "これはユーザーデータです。" end
	
	NSOkBox = function(message, caption)
		message = valid[type(message)](message)
		caption = valid[type(caption)](caption)
		if debug_mode then body(message, caption) end
	end
end

使い方

これをsysytem.luaの中から呼び出すと、二つの関数が追加される。

is_debug()
現在の稼働モードがデバッグモードであれば、trueを返す。そうでなければfalseを返す。
is_on_air()
現在の稼働モードが本番モードであれば、trueを返す。そうでなければfalseを返す。

本番とデバッグモードの違いは、nscr.exeと同じフォルダの中にある、"debug.txt"の有無に求める。
debug.txt(中身は何でもいい)があればデバッグモードになり、そうでなければ本番モードになる。
また、デバッグモードで使用頻度が高いとおもわれるNSOkBoxを上書きする。
本番では一切NSOkBox関数を使わないと言う前提が必要になるが、デバッグモードならばNSOkBoxが通常通りに機能し、そうでなければNSOkBox関数は起動されても何もしなくなる。
つまり、開発環境ではdebug.txtを置いて必要な時に必要なデータを確認しながら実行できる。
配布の際には、debug.txtを削除してからCDに焼くと、スクリプトには一切手を加えることなく、実行環境へ移行できる(といいなあ)

さらに追記

NSOkBoxそのものの機能も補完してある。
本来のNSOkBoxは二つの文字列を引数に与えなければならず、これは第二引数を省略したり、引数に文字列型以外の値を与えてもエラーになる。
そこで、何を与えてもとりあえず文字列に変換して表示するようにしてみた。
そのため、このスクリプト前提として、Json.luaが必須になった。