/****************************************************************************
 * KONOHA COPYRIGHT, LICENSE NOTICE, AND DISCRIMER  
 * 
 * Copyright (c) 2005-2008, Kimio Kuramitsu <kimio at ynu.ac.jp>
 *           (c) 2008-      Konoha Software Foundation  
 * All rights reserved.
 * 
 * You may choose one of the following two licenses when you use konoha. 
 * See www.konohaware.org/license.html for further information.
 * 
 * (1) GNU General Public License 2.0      (with    KONOHA_UNDER_GPL2)
 * (2) Konoha Software Foundation License 1.0
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *  
 ****************************************************************************/

#include<konoha/konoha_dev.h>


#ifdef __cplusplus 
extern "C" {
#endif

/* ======================================================================== */

static int local_lang = 1;

/* ------------------------------------------------------------------------ */

static char* knh_system_lang[] = {
    "en",
    "ja",
    "debug"
};

int knh_system_langid(char *lang)
{
    int i;
    for(i = 0; i < KONOHA_LANG_MAXSIZ; i++) {
        if(knh_strcmp(knh_system_lang[i], lang) == 0) return i;
    }
    return local_lang;
}

/* ------------------------------------------------------------------------ */

int knh_system_setLang(char *lang)
{
    local_lang = knh_system_langid(lang);
    return local_lang;
}

/* ------------------------------------------------------------------------ */

static int knh_message_typedata[] = {
    /* KMSG_NAME */ 0,
    /* KMSG_ERRATA */ 0,
    /* KMSG_ETIME */ 0,
    /* KMSG_ESYNTAX */ 1,
    /* KMSG_EFORGET_PARENTHESIS */ 2,
    /* KMSG_EMISMATCH */ 1,
    /* KMSG_WUNCLOSED */ 2,
    /* KMSG_WASCII */ 3,
    /* KMSG_WEOF */ 3,
    /* KMSG_WSEMICOLON */ 2,
    /* KMSG_IGSTMT */ 4,
    /* KMSG_ETOKEN */ 2,
    /* KMSG_ELENGTH */ 2,
    /* KMSG_WCLASSN */ 3,
    /* KMSG_WCONSTN */ 3,
    /* KMSG_WCMETHODN */ 3,
    /* KMSG_WNAME */ 3,
    /* KMSG_WIGNORED */ 3,
    /* KMSG_TEXPTN */ 1,
    /* KMSG_TNSNAME */ 1,
    /* KMSG_TCURN */ 1,
    /* KMSG_TNSCLASSN */ 1,
    /* KMSG_TTYPEN */ 1,
    /* KMSG_TMETHODN */ 1,
    /* KMSG_TCLASSTN */ 1,
    /* KMSG_TSTR */ 1,
    /* KMSG_TVARN */ 1,
    /* KMSG_TCLASSN */ 1,
    /* KMSG_TARGS */ 1,
    /* KMSG_TNAME */ 1,
    /* KMSG_TCMETHODN */ 1,
    /* KMSG_TMT */ 1,
    /* KMSG_TANY */ 1,
    /* KMSG_TSTMT1 */ 1,
    /* KMSG_TPEXPR */ 1,
    /* KMSG_TCATCHPARAM */ 1,
    /* KMSG_ELVALUE */ 1,
    /* KMSG_ENEXTPREV */ 1,
    /* KMSG_EEMPTYEXPR */ 1,
    /* KMSG_ETRINARY */ 1,
    /* KMSG_EPSTMT3 */ 1,
    /* KMSG_WLET */ 4,
    /* KMSG_WEMPTYPEXPR */ 3,
    /* KMSG_WEMPTYARGS */ 3,
    /* KMSG_UUOPTION */ 4,
    /* KMSG_UCONSTN */ 4,
    /* KMSG_UVARN */ 4,
    /* KMSG_USYSTEMVARN */ 4,
    /* KMSG_UCLASSN */ 4,
    /* KMSG_UTAG */ 4,
    /* KMSG_UTYPEN */ 4,
    /* KMSG_UMETHODN */ 4,
    /* KMSG_UFUNCN */ 4,
    /* KMSG_ULABEL */ 4,
    /* KMSG_UOP */ 2,
    /* KMSG_UNEW */ 2,
    /* KMSG_UMAP */ 2,
    /* KMSG_INTOVERFLOW */ 4,
    /* KMSG_FLOATOVERFLOW */ 4,
    /* KMSG_INT64OVERFLOW */ 4,
    /* KMSG_ETOOFEWPARAMS */ 2,
    /* KMSG_WTOOMANYPARAMS */ 3,
    /* KMSG_EOP2 */ 2,
    /* KMSG_EOPCMP */ 4,
    /* KMSG_EVOIDPARAM */ 3,
    /* KMSG_ENULLPARAM */ 3,
    /* KMSG_WNULLPARAM */ 3,
    /* KMSG_ETYPEPARAM */ 3,
    /* KMSG_EVOIDRETURN */ 3,
    /* KMSG_ENULLRETURN */ 3,
    /* KMSG_WNULLRETURN */ 3,
    /* KMSG_ETYPERETURN */ 3,
    /* KMSG_EVOIDLET */ 3,
    /* KMSG_ENULLLET */ 3,
    /* KMSG_WNULLLET */ 3,
    /* KMSG_ETYPELET */ 3,
    /* KMSG_WDUPFUNCNAME */ 5,
    /* KMSG_USCLASSFUNC */ 2,
    /* KMSG_USNNTYPE */ 2,
    /* KMSG_IGNNTYPE */ 2,
    /* KMSG_EEXTENDS */ 2,
    /* KMSG_EIMPLEMENTS */ 2,
    /* KMSG_DIFFDECL */ 2,
    /* KMSG_DIFFCLASSN */ 4,
    /* KMSG_DIFFNEWTYPE */ 4,
    /* KMSG_DIFFRTYPE */ 2,
    /* KMSG_DIFFPSIZE */ 2,
    /* KMSG_DIFFPTYPE */ 2,
    /* KMSG_DIFFPNAME */ 4,
    /* KMSG_TOOMANYVARS */ 2,
    /* KMSG_EOUTERLOOP */ 4,
    /* KMSG_IGFIELDVALUE */ 3,
    /* KMSG_IGSCRIPTNAME */ 3,
    /* KMSG_IGFIELDNAME */ 3,
    /* KMSG_NORETURN */ 2,
    /* KMSG_NORETURNVALUE */ 1,
    /* KMSG_IGRETURN */ 4,
    /* KMSG_AHISTORIC */ 2,
    /* KMSG_AOVERRIDE */ 2,
    /* KMSG_EOVERRIDE */ 2,
    /* KMSG_TOABSTRACT */ 4,
    0
};

int knh_message_type(int e)
{
    DEBUG_ASSERT(e<KMSG_MAXSIZ);
    return knh_message_typedata[e];
}

/* ------------------------------------------------------------------------ */

static char* knh_message_data[] = {
    /* KMSG_NAME  {*/ 
        /* en */ "Konoha",
        /* ja */ "木の葉",
        "NAME",
    /*},*/
    /* KMSG_ERRATA  {*/ 
        /* en */ "ERRATA",
        /* ja */ "訂正",
        "ERRATA",
    /*},*/
    /* KMSG_ETIME  {*/ 
        /* en */ "Elapsed Time",
        /* ja */ "実行時間",
        "ETIME",
    /*},*/
    /* KMSG_ESYNTAX  {*/ 
        /* en */ "Syntax Error",
        /* ja */ "文法間違いを直してください",
        "ESYNTAX",
    /*},*/
    /* KMSG_EFORGET_PARENTHESIS  {*/ 
        /* en */ NULL,
        /* ja */ "{の前で括弧を閉じ忘れています",
        "EFORGET_PARENTHESIS",
    /*},*/
    /* KMSG_EMISMATCH  {*/ 
        /* en */ NULL,
        /* ja */ "括弧の対応をあわせてください",
        "EMISMATCH",
    /*},*/
    /* KMSG_WUNCLOSED  {*/ 
        /* en */ NULL,
        /* ja */ "閉じてください",
        "WUNCLOSED",
    /*},*/
    /* KMSG_WASCII  {*/ 
        /* en */ NULL,
        /* ja */ "ASCII文字（半角）をお使いください",
        "WASCII",
    /*},*/
    /* KMSG_WEOF  {*/ 
        /* en */ NULL,
        /* ja */ "行の途中でファイルが終端しています",
        "WEOF",
    /*},*/
    /* KMSG_WSEMICOLON  {*/ 
        /* en */ "Add ';' at the end of the statement.",
        /* ja */ "文末にはセミコロン(;)を追加してください",
        "WSEMICOLON",
    /*},*/
    /* KMSG_IGSTMT  {*/ 
        /* en */ NULL,
        /* ja */ "無効果なステートメントなため無視されました",
        "IGSTMT",
    /*},*/
    /* KMSG_ETOKEN  {*/ 
        /* en */ NULL,
        /* ja */ "名前でも演算子でもありません",
        "ETOKEN",
    /*},*/
    /* KMSG_ELENGTH  {*/ 
        /* en */ NULL,
        /* ja */ "名前の長さを短くしてください",
        "ELENGTH",
    /*},*/
    /* KMSG_WCLASSN  {*/ 
        /* en */ NULL,
        /* ja */ "正しいクラス名に修正してください",
        "WCLASSN",
    /*},*/
    /* KMSG_WCONSTN  {*/ 
        /* en */ NULL,
        /* ja */ "正しい定数名に修正してください",
        "WCONSTN",
    /*},*/
    /* KMSG_WCMETHODN  {*/ 
        /* en */ NULL,
        /* ja */ "正しいクラスメソッド名に修正してください",
        "WCMETHODN",
    /*},*/
    /* KMSG_WNAME  {*/ 
        /* en */ NULL,
        /* ja */ "正しい名前に修正してください",
        "WNAME",
    /*},*/
    /* KMSG_WIGNORED  {*/ 
        /* en */ NULL,
        /* ja */ "次の字句は無視されました",
        "WIGNORED",
    /*},*/
    /* KMSG_TEXPTN  {*/ 
        /* en */ NULL,
        /* ja */ "正しい例外名を与えてください",
        "TEXPTN",
    /*},*/
    /* KMSG_TNSNAME  {*/ 
        /* en */ NULL,
        /* ja */ "正しい名前空間名を与えてください",
        "TNSNAME",
    /*},*/
    /* KMSG_TCURN  {*/ 
        /* en */ NULL,
        /* ja */ "クラス名かURNを与えてください",
        "TCURN",
    /*},*/
    /* KMSG_TNSCLASSN  {*/ 
        /* en */ NULL,
        /* ja */ "正しい名前空間付きのクラス名を与えてください",
        "TNSCLASSN",
    /*},*/
    /* KMSG_TTYPEN  {*/ 
        /* en */ NULL,
        /* ja */ "正しい型名を与えてください",
        "TTYPEN",
    /*},*/
    /* KMSG_TMETHODN  {*/ 
        /* en */ NULL,
        /* ja */ "正しいメソッド名を与えてください",
        "TMETHODN",
    /*},*/
    /* KMSG_TCLASSTN  {*/ 
        /* en */ NULL,
        /* ja */ "正しいクラス名（タグ付き）を与えてください",
        "TCLASSTN",
    /*},*/
    /* KMSG_TSTR  {*/ 
        /* en */ NULL,
        /* ja */ "正しい文字列を与えてください",
        "TSTR",
    /*},*/
    /* KMSG_TVARN  {*/ 
        /* en */ NULL,
        /* ja */ "正しい変数名を与えてください",
        "TVARN",
    /*},*/
    /* KMSG_TCLASSN  {*/ 
        /* en */ NULL,
        /* ja */ "正しいクラス名を与えてください",
        "TCLASSN",
    /*},*/
    /* KMSG_TARGS  {*/ 
        /* en */ NULL,
        /* ja */ "正しくパラメータをあたえてください",
        "TARGS",
    /*},*/
    /* KMSG_TNAME  {*/ 
        /* en */ NULL,
        /* ja */ "正しい名前を与えてください",
        "TNAME",
    /*},*/
    /* KMSG_TCMETHODN  {*/ 
        /* en */ NULL,
        /* ja */ "正しいクラス名付きメソッド名を与えてください",
        "TCMETHODN",
    /*},*/
    /* KMSG_TMT  {*/ 
        /* en */ NULL,
        /* ja */ "正しいフォーマッタ名を与えてください",
        "TMT",
    /*},*/
    /* KMSG_TANY  {*/ 
        /* en */ NULL,
        /* ja */ "正しいトークンを与えてください",
        "TANY",
    /*},*/
    /* KMSG_TSTMT1  {*/ 
        /* en */ NULL,
        /* ja */ "正しく行をはじめてください",
        "TSTMT1",
    /*},*/
    /* KMSG_TPEXPR  {*/ 
        /* en */ NULL,
        /* ja */ "正しく条件式を与えてください",
        "TPEXPR",
    /*},*/
    /* KMSG_TCATCHPARAM  {*/ 
        /* en */ NULL,
        /* ja */ "catch文のパラメータを与えてください",
        "TCATCHPARAM",
    /*},*/
    /* KMSG_ELVALUE  {*/ 
        /* en */ NULL,
        /* ja */ "代入可能な変数名を与えてください",
        "ELVALUE",
    /*},*/
    /* KMSG_ENEXTPREV  {*/ 
        /* en */ NULL,
        /* ja */ "--演算,++演算が評価できない式です",
        "ENEXTPREV",
    /*},*/
    /* KMSG_EEMPTYEXPR  {*/ 
        /* en */ NULL,
        /* ja */ "正しい式をあたえてください",
        "EEMPTYEXPR",
    /*},*/
    /* KMSG_ETRINARY  {*/ 
        /* en */ NULL,
        /* ja */ "三項演算子のtrueとfalseの式はコロン(:)で区切ってください",
        "ETRINARY",
    /*},*/
    /* KMSG_EPSTMT3  {*/ 
        /* en */ NULL,
        /* ja */ "for(stmt;expr;stmt) 文の文法に間違いがあります",
        "EPSTMT3",
    /*},*/
    /* KMSG_WLET  {*/ 
        /* en */ NULL,
        /* ja */ "条件式では代入を使わないでください",
        "WLET",
    /*},*/
    /* KMSG_WEMPTYPEXPR  {*/ 
        /* en */ NULL,
        /* ja */ "空っぽの条件式では困ります",
        "WEMPTYPEXPR",
    /*},*/
    /* KMSG_WEMPTYARGS  {*/ 
        /* en */ NULL,
        /* ja */ "引数を与えてください",
        "WEMPTYARGS",
    /*},*/
    /* KMSG_UUOPTION  {*/ 
        /* en */ NULL,
        /* ja */ "サポート外のusingオプションが利用されました",
        "UUOPTION",
    /*},*/
    /* KMSG_UCONSTN  {*/ 
        /* en */ NULL,
        /* ja */ "未定義の定数を使用しました",
        "UCONSTN",
    /*},*/
    /* KMSG_UVARN  {*/ 
        /* en */ NULL,
        /* ja */ "未宣言の変数を使用しました",
        "UVARN",
    /*},*/
    /* KMSG_USYSTEMVARN  {*/ 
        /* en */ NULL,
        /* ja */ "未定義のシステム変数を使用しました",
        "USYSTEMVARN",
    /*},*/
    /* KMSG_UCLASSN  {*/ 
        /* en */ NULL,
        /* ja */ "未定義のクラス名を使用しました",
        "UCLASSN",
    /*},*/
    /* KMSG_UTAG  {*/ 
        /* en */ NULL,
        /* ja */ "未定義のクラスタグを使用しました",
        "UTAG",
    /*},*/
    /* KMSG_UTYPEN  {*/ 
        /* en */ NULL,
        /* ja */ "未定義の型を使用しました",
        "UTYPEN",
    /*},*/
    /* KMSG_UMETHODN  {*/ 
        /* en */ NULL,
        /* ja */ "定義されていないメソッドを使用しました",
        "UMETHODN",
    /*},*/
    /* KMSG_UFUNCN  {*/ 
        /* en */ NULL,
        /* ja */ "定義されていない関数メソッドを使用しました",
        "UFUNCN",
    /*},*/
    /* KMSG_ULABEL  {*/ 
        /* en */ NULL,
        /* ja */ "未定義のラベルを用いました",
        "ULABEL",
    /*},*/
    /* KMSG_UOP  {*/ 
        /* en */ NULL,
        /* ja */ "定義されていない演算子を用いました",
        "UOP",
    /*},*/
    /* KMSG_UNEW  {*/ 
        /* en */ NULL,
        /* ja */ "定義されていないコンストラクタを用いました",
        "UNEW",
    /*},*/
    /* KMSG_UMAP  {*/ 
        /* en */ NULL,
        /* ja */ "マッピングは定義されていません",
        "UMAP",
    /*},*/
    /* KMSG_INTOVERFLOW  {*/ 
        /* en */ NULL,
        /* ja */ "整数(Int)の最大値もしくは最小値を超えました",
        "INTOVERFLOW",
    /*},*/
    /* KMSG_FLOATOVERFLOW  {*/ 
        /* en */ NULL,
        /* ja */ "浮動点少数(Float)の最大値もしくは最小値を超えました",
        "FLOATOVERFLOW",
    /*},*/
    /* KMSG_INT64OVERFLOW  {*/ 
        /* en */ NULL,
        /* ja */ "64ビット整数の最大値もしくは最小値を超えました",
        "INT64OVERFLOW",
    /*},*/
    /* KMSG_ETOOFEWPARAMS  {*/ 
        /* en */ NULL,
        /* ja */ "与えられた引数の数が少な過ぎます",
        "ETOOFEWPARAMS",
    /*},*/
    /* KMSG_WTOOMANYPARAMS  {*/ 
        /* en */ NULL,
        /* ja */ "与えられた引数の数が多過ぎます",
        "WTOOMANYPARAMS",
    /*},*/
    /* KMSG_EOP2  {*/ 
        /* en */ NULL,
        /* ja */ "この演算子は、2項演算子専用です",
        "EOP2",
    /*},*/
    /* KMSG_EOPCMP  {*/ 
        /* en */ NULL,
        /* ja */ "型が異なるため比較することはできません",
        "EOPCMP",
    /*},*/
    /* KMSG_EVOIDPARAM  {*/ 
        /* en */ NULL,
        /* ja */ "メソッド引数にはvoid型のメソッド（関数）を用いることはできません",
        "EVOIDPARAM",
    /*},*/
    /* KMSG_ENULLPARAM  {*/ 
        /* en */ NULL,
        /* ja */ "次のメソッド引数で必ずNull例外が発生します",
        "ENULLPARAM",
    /*},*/
    /* KMSG_WNULLPARAM  {*/ 
        /* en */ NULL,
        /* ja */ "次のメソッド引数においてNull例外が発生する可能性があります",
        "WNULLPARAM",
    /*},*/
    /* KMSG_ETYPEPARAM  {*/ 
        /* en */ NULL,
        /* ja */ "次のメソッド引数の型が一致しません",
        "ETYPEPARAM",
    /*},*/
    /* KMSG_EVOIDRETURN  {*/ 
        /* en */ NULL,
        /* ja */ "return文の戻り値としてvoid型のメソッド（関数）を使うことはできません",
        "EVOIDRETURN",
    /*},*/
    /* KMSG_ENULLRETURN  {*/ 
        /* en */ NULL,
        /* ja */ "このメソッドではnullをreturnすることはできません",
        "ENULLRETURN",
    /*},*/
    /* KMSG_WNULLRETURN  {*/ 
        /* en */ NULL,
        /* ja */ "return時にNull例外が発生する可能性があります",
        "WNULLRETURN",
    /*},*/
    /* KMSG_ETYPERETURN  {*/ 
        /* en */ NULL,
        /* ja */ "return文の型が一致しません",
        "ETYPERETURN",
    /*},*/
    /* KMSG_EVOIDLET  {*/ 
        /* en */ NULL,
        /* ja */ "void型のメソッド（関数）を代入することはできません",
        "EVOIDLET",
    /*},*/
    /* KMSG_ENULLLET  {*/ 
        /* en */ NULL,
        /* ja */ "Nullを代入することはできません",
        "ENULLLET",
    /*},*/
    /* KMSG_WNULLLET  {*/ 
        /* en */ NULL,
        /* ja */ "代入時にNull例外が発生する可能性があります",
        "WNULLLET",
    /*},*/
    /* KMSG_ETYPELET  {*/ 
        /* en */ NULL,
        /* ja */ "代入の右辺と左辺式の型が一致しません",
        "ETYPELET",
    /*},*/
    /* KMSG_WDUPFUNCNAME  {*/ 
        /* en */ NULL,
        /* ja */ "スタティック関数名とメソッド名が重複しています",
        "WDUPFUNCNAME",
    /*},*/
    /* KMSG_USCLASSFUNC  {*/ 
        /* en */ NULL,
        /* ja */ "与えられたクラスはクラス関数をサポートしていません",
        "USCLASSFUNC",
    /*},*/
    /* KMSG_USNNTYPE  {*/ 
        /* en */ NULL,
        /* ja */ "与えられたクラスではNonNull属性は使えません",
        "USNNTYPE",
    /*},*/
    /* KMSG_IGNNTYPE  {*/ 
        /* en */ NULL,
        /* ja */ "NonNull属性は無視されました",
        "IGNNTYPE",
    /*},*/
    /* KMSG_EEXTENDS  {*/ 
        /* en */ NULL,
        /* ja */ "finalクラスを拡張することはできません",
        "EEXTENDS",
    /*},*/
    /* KMSG_EIMPLEMENTS  {*/ 
        /* en */ NULL,
        /* ja */ "インターフェースとして実装するためには、@Interfaceが必要です",
        "EIMPLEMENTS",
    /*},*/
    /* KMSG_DIFFDECL  {*/ 
        /* en */ NULL,
        /* ja */ "既に別の型で宣言されています",
        "DIFFDECL",
    /*},*/
    /* KMSG_DIFFCLASSN  {*/ 
        /* en */ NULL,
        /* ja */ "class 文のクラス名とメソッドのクラス名が異なります",
        "DIFFCLASSN",
    /*},*/
    /* KMSG_DIFFNEWTYPE  {*/ 
        /* en */ NULL,
        /* ja */ "コンストラクタ(new メソッド）のクラスが異なります",
        "DIFFNEWTYPE",
    /*},*/
    /* KMSG_DIFFRTYPE  {*/ 
        /* en */ NULL,
        /* ja */ "既存のメソッドと戻り値の型が一致しません",
        "DIFFRTYPE",
    /*},*/
    /* KMSG_DIFFPSIZE  {*/ 
        /* en */ NULL,
        /* ja */ "既存のメソッドと引数の数が一致しません",
        "DIFFPSIZE",
    /*},*/
    /* KMSG_DIFFPTYPE  {*/ 
        /* en */ NULL,
        /* ja */ "既存のメソッドと引数の型が一致しません",
        "DIFFPTYPE",
    /*},*/
    /* KMSG_DIFFPNAME  {*/ 
        /* en */ NULL,
        /* ja */ "既存のメソッドと引数名が異なります",
        "DIFFPNAME",
    /*},*/
    /* KMSG_TOOMANYVARS  {*/ 
        /* en */ NULL,
        /* ja */ "変数を多く宣言しすぎました",
        "TOOMANYVARS",
    /*},*/
    /* KMSG_EOUTERLOOP  {*/ 
        /* en */ NULL,
        /* ja */ "ループの内側でないため無視されます",
        "EOUTERLOOP",
    /*},*/
    /* KMSG_IGFIELDVALUE  {*/ 
        /* en */ NULL,
        /* ja */ "フィールド変数の初期値は定数のみ認められます",
        "IGFIELDVALUE",
    /*},*/
    /* KMSG_IGSCRIPTNAME  {*/ 
        /* en */ NULL,
        /* ja */ "ここではスクリプト変数を新たに宣言することはできません",
        "IGSCRIPTNAME",
    /*},*/
    /* KMSG_IGFIELDNAME  {*/ 
        /* en */ NULL,
        /* ja */ "ここではフィールド変数を新たに宣言することはできません",
        "IGFIELDNAME",
    /*},*/
    /* KMSG_NORETURN  {*/ 
        /* en */ NULL,
        /* ja */ "return文がありません",
        "NORETURN",
    /*},*/
    /* KMSG_NORETURNVALUE  {*/ 
        /* en */ NULL,
        /* ja */ "return文に正しい戻り値を与えてください",
        "NORETURNVALUE",
    /*},*/
    /* KMSG_IGRETURN  {*/ 
        /* en */ NULL,
        /* ja */ "return文のパラメータは無視されました",
        "IGRETURN",
    /*},*/
    /* KMSG_AHISTORIC  {*/ 
        /* en */ NULL,
        /* ja */ "このステートメントを使用するためには@Historicが必要です",
        "AHISTORIC",
    /*},*/
    /* KMSG_AOVERRIDE  {*/ 
        /* en */ NULL,
        /* ja */ "再定義しなおすときは@Overrideが必要です",
        "AOVERRIDE",
    /*},*/
    /* KMSG_EOVERRIDE  {*/ 
        /* en */ NULL,
        /* ja */ "オーバーライドは許可されていません",
        "EOVERRIDE",
    /*},*/
    /* KMSG_TOABSTRACT  {*/ 
        /* en */ NULL,
        /* ja */ "コンパイルが中断されたため抽象メソッドとなります",
        "TOABSTRACT",
    /*},*/
};

char *knh_message_text(int e)
{
    char *msg;
    DEBUG_ASSERT(e<KMSG_MAXSIZ);
    msg = knh_message_data[e * (KONOHA_LANG_MAXSIZ) + local_lang];
    if(msg != NULL) return msg;
    return knh_message_data[e * (KONOHA_LANG_MAXSIZ) + KONOHA_LANG__debug];
}

/* ------------------------------------------------------------------------ */

char *knh_message_tochar(int e)
{
    DEBUG_ASSERT(e<KMSG_MAXSIZ);
    return knh_message_data[e * (KONOHA_LANG_MAXSIZ) + KONOHA_LANG__debug];
}

/* ------------------------------------------------------------------------ */

#ifdef __cplusplus
}
#endif
