;;; @file fileutil.nsc ;;; @brief senzogawa作「fileutil.dll」のラッパ ;;; @desc ・適切な「番号.txt」に名前を変えて使用してください。 ;;; ・変数番号の先頭は FILEUTIL_ARG_BEGIN で指定できます。 ;;; ・変数番号の末尾は FILEUTIL_ARG_END で定義されます。 ;;; ・「fileutil.dll」をカレントディレクトリ以外に置く場合は、 ;;; FILEUTIL_DLL にディレクトリ名を指定してください。 ;;; その際、パス区切りには「\」を用いてください。 ;;; @version 1.0(fileutil.dll Ver.0.1, NScripter Ver.2.82) ;;; @author senzogawa *fileutil_plugin stralias FILEUTIL_DLL,"fileutil.dll" numalias FILEUTIL_ARG_BEGIN,180 stralias FILEUTIL_PARAM_SEP,"|" stralias FILEUTIL_LIST_SEP,"|" defsub fileutil_version defsub mkdir defsub rmdir defsub curdir defsub fileread defsub filewrite defsub fileappend defsub filerename defsub filesize defsub filecopy defsub filelist defsub dirlist defsub fileutil_exec defsub fileutil_execwith defsub dirlist_each defsub filelist_each defsub dirlist_eachbreak defsub filelist_eachbreak ;// private defsub fileutil_setproc defsub fileutil_callproc mov %0,FILEUTIL_ARG_BEGIN numalias fileutil_command,%0:inc %0 numalias fileutil_dir,%0:inc %0 numalias fileutil_file,%0:inc %0 numalias fileutil_from,%0:inc %0 numalias fileutil_param,%0:inc %0 numalias fileutil_proc,%0:inc %0 numalias fileutil_result,%0:inc %0 numalias fileutil_str,%0:inc %0 numalias fileutil_to,%0:inc %0 ; for "each" numalias fileutil_dirbreak,%0:inc %0 numalias fileutil_diritem,%0:inc %0 numalias fileutil_dirlist,%0:inc %0 numalias fileutil_dirproc,%0:inc %0 numalias fileutil_filebreak,%0:inc %0 numalias fileutil_fileitem,%0:inc %0 numalias fileutil_filelist,%0:inc %0 numalias fileutil_fileproc,%0:inc %0 numalias FILEUTIL_ARG_END,%0-1 return ;;; @brief バージョン情報を取得する。 ;;; @usage fileutil_version %バージョン ;;; @note バージョンが大きければ新しい。 *fileutil_version getparam i%fileutil_result fileutil_exec "version" getret %%fileutil_result return ;;; @brief ディレクトリを作成する。 ;;; @usage mkdir ディレクトリ名 ;;; @note *mkdir getparam $fileutil_dir fileutil_execwith "mkdir",$fileutil_dir return ;;; @brief ディレクトリを削除する。 ;;; @usage rmdir ディレクトリ名 ;;; @note *rmdir getparam $fileutil_dir fileutil_execwith "rmdir",$fileutil_dir return ;;; @brief 現在のディレクトリパスを取得する。 ;;; @usage curdir $ディレクトリパス ;;; @note *curdir getparam s%fileutil_result fileutil_exec "curdir" getret $%fileutil_result return ;;; @brief ファイルから文字列を読み込む。 ;;; @usage fileread $文字列, ファイル名 ;;; @note 改行は「\」に置換される。 *fileread getparam s%fileutil_result,$fileutil_file fileutil_execwith "fileread",$fileutil_file getret $%fileutil_result return ;;; @brief ファイルに文字列を書き込む。 ;;; @usage filewrite ファイル名, 文字列 ;;; @note *filewrite getparam $fileutil_file,$fileutil_str fileutil_execwith "filewrite",$fileutil_file+FILEUTIL_PARAM_SEP+$fileutil_str return ;;; @brief ファイルに文字列を追記する。 ;;; @usage fileappend ファイル名, 文字列 ;;; @note ファイルが無い場合は作成する。 *fileappend getparam $fileutil_file,$fileutil_str fileutil_execwith "fileappend",$fileutil_file+FILEUTIL_PARAM_SEP+$fileutil_str return ;;; @brief ファイル名を変更する。 ;;; @usage filerename 変更元のファイル名, 変更先のファイル名 ;;; @note *filerename getparam $fileutil_from,$fileutil_to fileutil_execwith "filerename",$fileutil_from+FILEUTIL_PARAM_SEP+$fileutil_to return ;;; @brief ファイルサイズを取得する。 ;;; @usage filesize %ファイルサイズ, ファイル名 ;;; @note ファイルが無い場合は-1が返る。 *filesize getparam i%fileutil_result,$fileutil_file fileutil_execwith "filesize",$fileutil_file getret %%fileutil_result return ;;; @brief ファイルをコピーする。 ;;; @usage filecopy コピー元のファイル名, コピー先のファイル名 ;;; @note *filecopy getparam $fileutil_from,$fileutil_to fileutil_execwith "filecopy",$fileutil_from+FILEUTIL_PARAM_SEP+$fileutil_to return ;;; @brief ファイルリストを取得する。 ;;; @usage filelist $ファイルリスト, 対象ディレクトリ名 ;;; @note 区切り文字はFILEUTIL_LIST_SEPを参照。 ;;; @see filelist_each *filelist getparam s%fileutil_result,$fileutil_dir fileutil_execwith "filelist",$fileutil_dir getret $%fileutil_result return ;;; @brief ディレクトリリストを取得する。 ;;; @usage dirlist $ディレクトリリスト, 対象ディレクトリ名 ;;; @note 区切り文字はFILEUTIL_LIST_SEPを参照。 ;;; @see dirlist_each *dirlist getparam s%fileutil_result,$fileutil_dir fileutil_execwith "dirlist",$fileutil_dir getret $%fileutil_result return ;;; @brief fileutilプラグインを実行する。 ;;; @usage fileutil コマンド ;;; @note *fileutil_exec getparam $fileutil_command exec_dll FILEUTIL_DLL+"/"+$fileutil_command return ;;; @brief fileutilプラグインを引数付で実行する。 ;;; @usage fileutil コマンド, パラメータ ;;; @note パラメータの区切りはFILEUTIL_PARAM_SEPを用いる。 *fileutil_execwith getparam $fileutil_command,$fileutil_param exec_dll FILEUTIL_DLL+"/"+$fileutil_command+" "+$fileutil_param return ;// ヘルパー ;;; @brief ディレクトリリストの各ディレクトリを処理する。 ;;; @usage dirlist_each ディレクトリリスト, *コールバック ;;; @note ディレクトリリストの各ディレクトリに対し、コールバックを呼び出す。 ;;; @desc ;;; コールバック: ;;; 第一引数にはディレクトリ名を渡す。 ;;; dirlist_eachの再呼び出しは不可 *dirlist_each getparam $fileutil_dirlist,$fileutil_dirproc labelexist %fileutil_dirproc,$fileutil_dirproc if %fileutil_dirproc==0 return mov %fileutil_dirbreak,0 *dirlist_eachloop if $fileutil_dirlist=="" return split $fileutil_dirlist,FILEUTIL_LIST_SEP,$fileutil_diritem len %fileutil_dirlist,$fileutil_dirlist len %fileutil_diritem,$fileutil_diritem fileutil_setproc $fileutil_dirproc fileutil_callproc $fileutil_diritem if %fileutil_dirbreak==1 return if %fileutil_dirlist==%fileutil_diritem return inc %fileutil_diritem ; セパレータ分を加算 mid $fileutil_dirlist,$fileutil_dirlist,%fileutil_diritem,%fileutil_dirlist-%fileutil_diritem goto *dirlist_eachloop return ;;; @brief ファイルリストの各ファイルを処理する。 ;;; @usage filelist_each ファイルリスト, *コールバック ;;; @note ファイルリストの各ファイルに対し、コールバックを呼び出す。 ;;; @desc ;;; コールバック: ;;; 第一引数にはディレクトリ名を渡す。 ;;; dirlist_each, filelist_eachの呼び出しは不可 *filelist_each getparam $fileutil_filelist,$fileutil_fileproc labelexist %fileutil_fileproc,$fileutil_fileproc if %fileutil_fileproc==0 return mov %fileutil_filebreak,0 *filelist_eachloop if $fileutil_filelist=="" return split $fileutil_filelist,FILEUTIL_LIST_SEP,$fileutil_fileitem len %fileutil_filelist,$fileutil_filelist len %fileutil_fileitem,$fileutil_fileitem fileutil_setproc $fileutil_fileproc fileutil_callproc $fileutil_fileitem if %fileutil_filebreak==1 return if %fileutil_filelist==%fileutil_fileitem return inc %fileutil_fileitem ; セパレータ分を加算 mid $fileutil_filelist,$fileutil_filelist,%fileutil_fileitem,%fileutil_filelist-%fileutil_fileitem goto *filelist_eachloop return ;;; @brief ディレクトリリスト処理を途中で終了する。 ;;; @usage dirlist_eachbreak ;;; @note *dirlist_eachbreak mov %fileutil_dirbreak,1 return ;;; @brief ファイルリスト処理を途中で終了する。 ;;; @usage filelist_eachbreak ;;; @note *filelist_eachbreak mov %fileutil_filebreak,1 return ;// private ;;; コールバックを設定する。 *fileutil_setproc getparam $fileutil_proc return ;;; コールバックを呼び出す。 *fileutil_callproc goto $fileutil_proc