1.9.3 C ライブラリのロケールデータブロックの定義

ロケールデータブロックによって独自のロケールをカスタマイズできます。

ロケールデータブロックは、rt_locale.s にある一連のアセンブリ言語マクロを使用して定義されます。このため、アセンブリ言語ソースファイルを記述してロケールデータブロックを定義することを推奨します。ツールチェーンには、LC_CTYPELC_COLLATELC_MONETARYLC_NUMERICLC_TIME など、ロケールデータブロックのタイプごとに一連のマクロが用意されています。各ロケールブロックの定義は、1 つの _begin マクロ、複数のデータマクロ、および 1 つの _end マクロを使用して同じ方法で定義します。

ロケールブロックの定義の開始

ロケールブロックの定義を開始するには、_begin マクロを呼び出します。このマクロでは、2 つの引数、1 つの接頭文字、およびテキストによる名前が使用されます。
LC_TYPE_begin prefix, name
各項目には以下の意味があります。
TYPE
以下のいずれかを指定します。
  • CTYPE
  • COLLATE
  • MONETARY
  • NUMERIC
  • TIME
prefix
ロケールデータ内で定義済みのアセンブラシンボル用の接頭辞です。
name
そのロケールデータのテキストによる名前です。

ロケールブロックのデータの指定

ロケールブロックにデータを指定するには、そのロケールタイプ用のマクロを、その特定のロケールタイプ用に指定されている順番で呼び出します。構文は以下のとおりです。
LC_TYPE_function
各項目には以下の意味があります。
TYPE
以下のいずれかを指定します。
  • CTYPE
  • COLLATE
  • MONETARY
  • NUMERIC
  • TIME
関数
使用しているロケールデータに関連する特定の関数(table()full_wctype()、または multibyte())です。
ロケールデータの指定時には、対応する関数ごとにマクロの呼び出しを繰り返す必要があります。

ロケールブロックの定義の終了

ロケールデータブロックの定義を完了するには、_end マクロを呼び出します。以下に示すように、このマクロは引数を取りません。
LC_TYPE_end
各項目には以下の意味があります。
TYPE
以下のいずれかを指定します。
  • CTYPE
  • COLLATE
  • MONETARY
  • NUMERIC
  • TIME

固定ロケールブロックの例

常に同じロケールを返す固定関数を記述するには、マクロで定義されている _start シンボル名を使用します。以下に、CTYPE ロケール用のそのマクロの実装方法を示します。
        GET rt_locale.s
        AREA my_locales, DATA, READONLY
        LC_CTYPE_begin my_ctype_locale, "MyLocale"
        ...; 他の LC_CTYPE_xxx マクロをここでインクルード
        LC_CTYPE_end
        AREA my_locale_func, CODE, READONLY
    _get_lc_ctype FUNCTION
        LDR r0, =my_ctype_locale_start
        BX lr
        ENDFUNC

複数の連続ロケールブロックの例

_findlocale() 関数に渡す近接するロケールブロックは、順番に宣言する必要があります。ロケールブロックのシーケンスを終了するには、マクロ LC_index_end を呼び出す必要があります。以下に、CTYPE ロケール用のそのマクロの実装方法を示します。
        GET rt_locale.s
        AREA my_locales, DATA, READONLY
    my_ctype_locales
        LC_CTYPE_begin my_first_ctype_locale, "MyLocale1"
        ...; 他の LC_CTYPE_xxx マクロをここでインクルード
        LC_CTYPE_end
        LC_CTYPE_begin my_second_ctype_locale, "MyLocale2"
        ...; 他の LC_CTYPE_xxx マクロをここでインクルード
        LC_CTYPE_end
        LC_index_end
        AREA my_locale_func, CODE, READONLY
        IMPORT _findlocale
    _get_lc_ctype FUNCTION
        LDR r0, =my_ctype_locales
        B _findlocale
        ENDFUNC
関連する参考文書
1.9.4 LC_CTYPE データブロック
1.9.5 LC_COLLATE データブロック
1.9.6 LC_MONETARY データブロック
1.9.7 LC_NUMERIC データブロック
1.9.8 LC_TIME データブロック
非機密扱いPDF file icon PDF 版ARM DUI0808CJ
Copyright © 2014, 2015 ARM.All rights reserved.