coding UTF-8;

// License: CC0

// **************************************************************************************************************
// * このファイルでは、RINPn の各種設定パラメータの値を指定できます。
// * ファイルの内容は、C言語系の文法の簡易スクリプト言語「 Vnano 」で書かれています。
// * ( 初見での開きやすさ優先で、拡張子が「.txt」になっていますが、「 .vnano 」に変えても読み込まれます。)
// * 設定内容を編集する際は、以下の点にご注意ください:
// * 
// *   ・各行の「 // 」よりも右側は読み飛ばされます（設定行の無効化や、コメントの記述のために使用されます）。
// *   ・各設定行の内容（コメント記述部分を除く）は、「 ; 」記号で終わっている必要があります。
// * 
// * その他、Vnano の詳しい文法については、以下をご参照ください：
// * 
// *    https://www.vcssl.org/ja-jp/vnano/doc/tutorial/language
// * 
// **************************************************************************************************************


// **************************************************************************************************************
//         - ユーザー関連の設定 -
// **************************************************************************************************************


// --------------------------------------------------------------------------------------------------------------
// ロケールコードを指定します。メッセージの表示言語は、このロケールコードによって決定されます。
// (型: string)
// --------------------------------------------------------------------------------------------------------------

// localeCode = "AUTO";      // 環境に応じて自動設定
// localeCode = "en-US";     // アメリカ英語
localeCode = "ja-JP";        // 日本語





// **************************************************************************************************************
//         - 画面関連の設定 -
// **************************************************************************************************************


// --------------------------------------------------------------------------------------------------------------
// ウィンドウの大きさを指定します。
// (型: int)
// --------------------------------------------------------------------------------------------------------------

windowWidth = 540;     // 幅  (ピクセル)
windowHeight = 340;    // 高さ(ピクセル)
retractedWindowHeight = 160;  // キーパネル収納時の高さ(ピクセル)


// --------------------------------------------------------------------------------------------------------------
// 文字フォントの大きさを指定します。
// (型: int)
// --------------------------------------------------------------------------------------------------------------

textFieldFontSize = 18;    // INPUT/OUTPUTテキストフィールドのフォントサイズ
numberKeyFontSize = 18;    // 数字キーのフォントサイズ
behaviorKeyFontSize = 18;  // 動作キーのフォントサイズ ("=", "C", ...)
functionKeyFontSize = 14;  // 関数キーのフォントサイズ ("sin", "cos", ...)


// --------------------------------------------------------------------------------------------------------------
// RINPn のウィンドウを、常に最前面に表示するかどうかを指定します。
// (型: bool)
// --------------------------------------------------------------------------------------------------------------

stayOnTopOfAllWindows = false;        // 最前面の必要は無い
// stayOnTopOfAllWindows = true;      // 最前面に表示する


// --------------------------------------------------------------------------------------------------------------
// ウィンドウの不透明度を指定します。
// (型: float)
// --------------------------------------------------------------------------------------------------------------

windowOpacity = 0.9;     // 0.0 ~ 1.0


// --------------------------------------------------------------------------------------------------------------
// ウィンドウの背景色を指定します。
// (型: int)
// --------------------------------------------------------------------------------------------------------------

windowBackgroundColorR = 180;        // 赤成分 (0 ~ 255)
windowBackgroundColorG = 220;        // 緑成分 (0 ~ 255)
windowBackgroundColorB = 255;        // 青成分 (0 ~ 255)


// --------------------------------------------------------------------------------------------------------------
// INPUT/OUTPUT テキストフィールドの背景色を指定します。
// (型: int)
// --------------------------------------------------------------------------------------------------------------

textFieldBackgroundColorR = 100;     // 赤成分 (0 ~ 255)
textFieldBackgroundColorG = 100;     // 緑成分 (0 ~ 255)
textFieldBackgroundColorB = 100;     // 青成分 (0 ~ 255)


// --------------------------------------------------------------------------------------------------------------
// INPUT/OUTPUT テキストフィールドの前景色（文字の色）を指定します。
// (型: int)
// --------------------------------------------------------------------------------------------------------------

textFieldForegroundColorR = 140;     // 赤成分 (0 ~ 255)
textFieldForegroundColorG = 255;     // 緑成分 (0 ~ 255)
textFieldForegroundColorB = 180;     // 青成分 (0 ~ 255)


// --------------------------------------------------------------------------------------------------------------
// INPUT/OUTPUT テキストフィールドの上にある、ラベルの前景色（文字の色）を指定します。
// (Type: int)
// --------------------------------------------------------------------------------------------------------------

textLabelForgroundColorR = 100;     // 赤成分 (0 ~ 255)
textLabelForgroundColorG = 120;     // 緑成分 (0 ~ 255)
textLabelForgroundColorB = 140;     // 青成分 (0 ~ 255)


// --------------------------------------------------------------------------------------------------------------
// キーパネル折り畳みラベルの前景色（文字の色）を指定します。
// (Type: int)
// --------------------------------------------------------------------------------------------------------------

keyRetractorForegroundColorR = 100;     // 赤成分 (0 ~ 255)
keyRetractorForegroundColorG = 120;     // 緑成分 (0 ~ 255)
keyRetractorForegroundColorB = 200;     // 青成分 (0 ~ 255)





// **************************************************************************************************************
//         - 計算関連の設定 -
// **************************************************************************************************************


// --------------------------------------------------------------------------------------------------------------
// 計算結果を丸めて表示するかどうかを指定します。
// ただし、このオプションを無効（false）にした場合でも、2進数の内部データを10進数の有限桁の値に変換するために、
// 一種の暗黙的な丸めは行われる事に留意してください（「 performImplicitRoundingBeforeRounding 」の説明参照）。
// (型: bool)
// --------------------------------------------------------------------------------------------------------------

outputRounderEnabled = true;        // 丸める
// outputRounderEnabled = false;    // 丸めない


// --------------------------------------------------------------------------------------------------------------
// 計算結果をどのように丸めるかを指定します。
// (型: string)
// --------------------------------------------------------------------------------------------------------------

roundingMode = "HALF_UP";
// roundingMode = "HALF_DOWN";
// roundingMode = "HALF_TO_EVEN";
// roundingMode = "UP";
// roundingMode = "DOWN";


// --------------------------------------------------------------------------------------------------------------
// 計算結果の中で、丸めたい箇所を指定します。
// (型: string)
// --------------------------------------------------------------------------------------------------------------

roundingTarget = "SIGNIFICAND";           // 浮動小数点数の仮数部(有効桁数)
// roundingTarget = "AFTER_FIXED_POINT";  // 固定小数点数の小数点以下の部分


// --------------------------------------------------------------------------------------------------------------
// 上の "roundingTarget" で指定した部分を、何桁に丸めたいかを指定します。
// (型: int)
// --------------------------------------------------------------------------------------------------------------

roundingLength = 10;


// --------------------------------------------------------------------------------------------------------------
// 計算結果を丸める前に、暗黙的な丸めを行うかどうかを指定します。
// 暗黙的な丸めは、このソフトウェア内において2進数で扱われる内部データ（64bit float）を、表示用に10進変換する際、
// その結果が一般に無限桁になり得るため、精度的な限界付近（または以降）の桁を丸めるために行われる丸め処理です。
// outputRounderEnabled オプションが無効の際は常に作用します。加えて、以下のオプションが有効（true）な場合は、
// outputRounderEnabled オプション有効時にも作用するようになります（暗黙的な丸め後に、設定に応じて丸められます）。
// 例えば「 1.005 」を入力した場合、丸め前の内部データの値は、10進数表現で 1.00499... になります。これを HALF_UP
// モードで3桁に丸めた結果は、暗黙的な丸め無しでは 1 に、暗黙的な丸めありでは 1.01 になります。
// (型: bool)
// --------------------------------------------------------------------------------------------------------------

performImplicitRoundingBeforeRounding = true;        // 暗黙的な丸めあり
// performImplicitRoundingBeforeRounding = false;    // 暗黙的な丸めなし


// --------------------------------------------------------------------------------------------------------------
// INPUT欄に入力された数式内に記述された整数を、浮動小数点数（64bit精度）として扱うオプションです。
// このオプションを無効化した場合、整数同士の割り算の結果は整数になる事にご注意ください。
// なお、このオプションは、スクリプトファイル内のコード内容の解釈には影響しません。
// (型: bool)
// --------------------------------------------------------------------------------------------------------------

evalIntLiteralAsFloat = true;          // 有効化する
// evalIntLiteralAsFloat = false;      // 無効化する


// --------------------------------------------------------------------------------------------------------------
// INPUT欄に入力された数式内で、浮動小数点数以外の値/変数/関数（戻り値）の使用を不可能にするオプションです。
// 「 evalIntLiteralAsFloat 」オプションが有効な場合、計算式への整数の混入（意図しない整数除算などの原因になり得ます）
// の見落としを防ぐために、このオプションも併せて有効化する事が強く推奨されます。
// なお、このオプションは、スクリプトファイル内のコード内容の解釈には影響しません。
// (型: bool)
// --------------------------------------------------------------------------------------------------------------

evalOnlyFloat = evalIntLiteralAsFloat;


// --------------------------------------------------------------------------------------------------------------
// INPUT欄に入力された内容の中で、式以外の記述（変数宣言やループなど）を不可能にするオプションです。
// そのような処理はスクリプトとしてファイル内に書くのが望ましく、
// 上記のデータ型関連のオプションなどの作用による不要な混乱を避けるために存在するオプションです。
// このオプションは、スクリプトファイル内のコード内容の解釈には影響しません。
// (型: bool)
// --------------------------------------------------------------------------------------------------------------

evalOnlyExpression = true;          // 有効化する
// evalOnlyExpression = false;      // 無効化する


// --------------------------------------------------------------------------------------------------------------
// INPUT欄の入力内容の中の文字に対して、Unicode正規化を行うかどうかを指定します。
// (型: bool)
// --------------------------------------------------------------------------------------------------------------

inputNormalizerEnabled = true;        // 正規化する
// inputNormalizerEnabled = false;    // 正規化しない





// **************************************************************************************************************
//         - ライブラリ/プラグイン関連の設定 -
// **************************************************************************************************************

// 備考: 新しいライブラリスクリプトやプラグインを追加するには、以下のファイルを編集してください:
//   * lib/VnanoLibraryList.txt
//   * plugin/VnanoPluginList.txt

// --------------------------------------------------------------------------------------------------------------
// 計算（またはスクリプトの実行）毎に、プラグインを再読み込みするかどうかを指定します。
// このオプションは、新しいプラグインを開発し、それをGUIモードでテスト/デバッグする際に役立つかもしれません。
// ただし、このオプションを有効化（true に設定）すると、内部で何らかの状態を保持するようなプラグインの挙動は、
// 計算毎に内部状態がリセットされるため、通常とは変化してしまう事に注意してください。
// そのため、新規プラグインの開発完了後は、このオプションの値を false に戻しておく事が推奨されます。
// (型: bool)
// --------------------------------------------------------------------------------------------------------------

reloadPlugin = false;     // 再読み込みしない
// reloadPlugin = true;   // 再読み込みする


// --------------------------------------------------------------------------------------------------------------
// 計算（またはスクリプトの実行）毎に、ライブラリスクリプトの内容を再読み込みするかどうかを指定します。
// このオプションを無効化（false に設定）すると、計算の応答が若干早くなる可能性があります。
// ただし、現状のバージョンでは、有効/無効でレスポンスに大差は生じません。
// (型: bool)
// --------------------------------------------------------------------------------------------------------------

reloadLibrary = true;       // 再読み込みする
// reloadLibrary = false;   // 再読み込みしない





// **************************************************************************************************************
//         - スクリプト処理関連の設定 -
// **************************************************************************************************************


// --------------------------------------------------------------------------------------------------------------
// GUIモードであっても、エラー情報を標準エラー出力に表示するかどうかを指定します。
// このオプションを false にすると、GUIモードでは、ウィンドウ上にのみエラーメッセージが表示されるようになります。
// (Type: bool)
// --------------------------------------------------------------------------------------------------------------

alwaysPrintError = true;       // 常に標準エラー出力に表示する
// alwaysPrintError = false;   // CUIモードでのみ標準エラー出力に表示する


// --------------------------------------------------------------------------------------------------------------
// 例外発生時に、スタックトレースを標準エラー出力に表示するかどうかを指定します。（デバッグ用）
// (型: bool)
// --------------------------------------------------------------------------------------------------------------

exceptionStackTracerEnabled = true;        // 表示する
// exceptionStackTracerEnabled = false;    // 表示しない


// --------------------------------------------------------------------------------------------------------------
// 中間コードや抽象構文木(AST)などをダンプするかどうかを指定します。（デバッグ用）
// (型: bool)
// --------------------------------------------------------------------------------------------------------------

dumperEnabled = false;      // ダンプしない
// dumperEnabled = true;    // ダンプする


// --------------------------------------------------------------------------------------------------------------
// ダンプする対象を指定します。（デバッグ用）
// (型: string)
// --------------------------------------------------------------------------------------------------------------

dumperTarget = "ALL";                  // 下記の内容のすべて
// dumperTarget = "INPUTTED_CODE";     // エンジンに入力されたコードの内容
// dumperTarget = "PREPROCESSED_CODE"; // プリプロセッサ処理済みの内容
// dumperTarget = "TOKEN";             // 字句解析結果のトークン
// dumperTarget = "PARSED_AST";        // 構文解析結果のAST
// dumperTarget = "ANALYZED_AST";      // 意味解析結果のAST
// dumperTarget = "ASSEMBLY_CODE";     // コンパイル結果の仮想的なアセンブリコード
// dumperTarget = "OBJECT_CODE";       // VM上で実行される、アセンブル済みの仮想的なオブジェクトコード
// dumperTarget = "ACCELERATOR_CODE";  // 高速版VM上で実行される、最適化済みの命令コード 
// dumperTarget = "ACCELERATOR_STATE"; // 高速版VMの初期化後の内部状態


// --------------------------------------------------------------------------------------------------------------
// 高速版のVMを有効化するかどうかを指定します。挙動がおかしい場合は、試しに無効にしてみてください。
// (型: bool)
// --------------------------------------------------------------------------------------------------------------

acceleratorEnabled = true;         // 有効化する  (最大演算速度: 約 700 MFLOPS ~ 10 GFLOPS)
// acceleratorEnabled = false;     // 無効化する  (最大演算速度: 約 20 MFLOPS)


// --------------------------------------------------------------------------------------------------------------
// 高速版VMにおける最適化レベルを指定します。
// 値が大きいほど高速ですが、より多くの最適化が施されるため、未知のバグに会う確率も上がってしまうかもしれません。
// (型: int)
// --------------------------------------------------------------------------------------------------------------

acceleratorOptimizationLevel = 0;
// acceleratorOptimizationLevel = 1; // データアクセスのオーバーヘッドを削減する最適化を適用
// acceleratorOptimizationLevel = 2; // コード構造が保たれるレベルでの命令列の最適化を適用
// acceleratorOptimizationLevel = 3; // コードの構造変更を伴う最適化を適用(インライン展開など)

