// Initialize.tjs - システムの初期化
// Copyright (C)2001-2008, W.Dee and contributors 改変?配布は自由です
var lockKey = ""; // ロック区分用
var kagVersion = "SKN 2011/6/120"; // システムバージョン
("property debugWindowEnabled { getter() { return " + (System.getArgument("-debugwin") != "no") + "; } }")!;
("property inXP3archivePacked { getter() { return " + (Storages.getPlacedPath("startup.tjs").indexOf(">") >= 0) + "; } }")!;
Scripts.exec(@"
@set (PACKED=${inXP3archivePacked})");
if (!debugWindowEnabled) {
// リリース時処理
System.exceptionHandler = function (e) {
Debug.logAsError(); // ログのファイルへの書き出し動作の開始など
var event_disabled = System.eventDisabled;
System.eventDisabled = true;
System.inform(e.message);
System.terminate();
return true;
};
global.DEBUG = false;
global.NDEBUG = true;
Scripts.exec("@set (NDEBUG=1)"); // プリプロセッサ指定
// コンソール?コントローラーを殺す
var dummy = %[];
&Debug.console = dummy;
&Debug.controller = dummy;
} else {
// デバッグ時処理
System.exceptionHandler = function (e) {
// どこにも捕捉されない例外がシステム側で捕捉された場合、この関数が呼ばれる。e は例外オブジェクト。
if (e instanceof "ConductorException") {
// コンダクタの投げた例外の場合
Debug.logAsError(); // ログのファイルへの書き出し動作の開始など
var event_disabled = System.eventDisabled;
System.eventDisabled = true;
// エラーの理由を表示させている間にイベントが発生するとやっかいなのでいったんイベント発生を停止させる
System.inform(e.message);
System.eventDisabled = event_disabled;
// イベントを発生するかどうかを元の状態に
return true; // true を返すと本体側で例外の処理は行わなくなる
}
return false; // false を返すと通常の例外処理
};
global.DEBUG = true;
global.NDEBUG = false;
Scripts.exec("@set (DEBUG=1)"); // プリプロセッサ指定
};
global.dm = Debug.message;
// パスの設定 後に指定した物が、より優先されて使用される
var archive_exists = %[]; // アーカイブが存在するかキャッシュ
// name が存在していたらそのアーカイブを使う
function useArchiveIfExists(name) {
with (Storages) name = .chopStorageExt(.extractStorageName(name));
var arcname = System.exePath + name + ".xp3";
if(Storages.isExistentStorage(arcname)) {
archive_exists[name.toLowerCase()] = true;
Storages.addAutoPath(arcname + ">");
}
}
// 検索パスを設定しつつ,name.xp3 が存在していたらそのアーカイブを使う
function addArchive(name) {
Storages.addAutoPath(System.exePath + "data.xp3>" + name + "/");
Storages.addAutoPath(name + "/");
useArchiveIfExists(name);
}
// サブフォルダつき検索パス登録
function addArchiveWithSubFolder(name, arr*) {
var arcname = System.exePath + name + ".xp3";
var isexist = archive_exists[name.toLowerCase()];
for (var i = 0; i < arr.count; i++) {
var sub = arr[i];
if (sub != "") {
Storages.addAutoPath(name + "/" + sub + "/");
Storages.addAutoPath(arcname + ">" + sub + "/") if (isexist);
}
}
}
// サブフォルダ検索パス登録
function setupSubFolders(list) {
var binds = %[], names = [];
for (var path, i = 0; i < list.count; i++) {
if ((path = list[i]) == "") continue;
var div = path.split("/");
var name = div[0];
if (name == "" || div.count <= 1) continue;
div.erase(0);
if (binds[name] === void) {
binds[name] = [];
names.add(name);
}
binds[name].add(div.join("/",,true));
}
for (var i = 0; i < names.count; i++) {
//dm("setupSubFolders", names[i], binds[names[i]]*);
addArchiveWithSubFolder(names[i], binds[names[i]]*);
}
}
// フォルダ登録及びアーカイブの検索と使用(後に登録した物ほど検索の優先度が高くなります)
if (debugWindowEnabled) {
Storages.addAutoPath(System.exePath + "tools/"); // exePath 以下の tools/
Storages.addAutoPath(System.exePath + "tools/debug/"); // exePath 以下の tools/debug
useArchiveIfExists("debug");
}
Storages.addAutoPath(System.exePath + "video/"); // exePath 以下の video/
Storages.addAutoPath("data/"); // data フォルダ
{
// data以下のサブフォルダを登録
// もしこれらの名前を持ったアーカイブが実行可能ファイルと同じ場所にあった場合、それを優先して使う