メディア上にあるかどうか判定する。
なんか前にも作ったような気もするんだが。
nscr.exeを起動した時に、そのnscr.exeが記録ができないメディア上にあるか、記録できるハードディスク上にあるか、判別する関数を提供するスクリプト
cd.lua
-- cd.lua do -- nscr.exeが起動した時、それがハードディスク上にあるか、書き込めないCD上にあるかを判定するライブラリ -- 方法論としては大変簡単で、適当に書き込んでみて、成功すればHD上、そうでなければメディア上と判断する。 -- 書き込みできるかどうか試すファイル名。 local filename = "write_test.txt" -- 絶対にかぶらないファイル名に変更すること。 local can_write = nil -- 書き込み可能かどうかのフラグ。 local fh = io.open(filename, "w") -- 書き込みモードでファイルを開いてみる。 if type(io.type(fh))=="nil" then -- 開けなかったら。 can_write = false -- フラグをfalseに設定 else can_write = true -- フラグをtrueに設定 fh:close() -- ファイルハンドルを閉じる。 os.remove(filename) -- 削除する。 end -- 外部に提供するメソッド群 -- ハードディスク上にあるかどうか。 function is_on_disk() return can_write end -- CD上にあるかどうか。 function is_on_media() return not(is_on_disk()) end end -- また、同種の命令をNScripter側にも提供する。 local b2n = function(bool) if bool then return 1 else return 0 end NSExec("_luasub is_on_disk") _G.NSCOM_is_on_disk = function() NSSetIntValue(NSPopIntRef(), b2n(is_on_disk())) end NSExec("_luasub is_on_media") _G.NSCOM_is_on_media = function() NSSetIntValue(NSPopIntRef(), b2n(is_on_media())) end end
使い方
上記スクリプトをcd.luaとか名付けて保存して、これをsystem.luaの早い内にNL_dofile()で読み込む。
すると、下記の関数ができる。
また、NScripter側にも、同名の命令を追加する。
注意
これは飽くまでも判別するだけなので、判別した後どのような動作をするかはプログラマーにまかされているが、一般的にはメディア上だった場合はちゃんとインストールするなりハードディスクにコピーするなり、警告を出してから終了する動作をするだろう。
*media_alert is_on_media %0 ; 判定 if %0=1 return mesbox "CDからハードディスクにコピーしてからプレイしてください。","セーブができません。" end