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

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

ロケールデータブロックは、rt_locale.s にある一連のアセンブリ言語マクロを使用して定義されます。このため、アセンブリ言語ソースファイルを記述してロケールデータブロックを定義することを推奨します。 ARM® コンパイラツールチェーンには、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"         ...; include other LC_CTYPE_xxx macros here         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"         ...; include other LC_CTYPE_xxx macros here         LC_CTYPE_end         LC_CTYPE_begin my_second_ctype_locale, "MyLocale2"         ...; include other LC_CTYPE_xxx macros here         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.49 C ライブラリでのロケール関数をカスタマイズするためのアセンブラマクロ
関連する参考文書
1.55 LC_CTYPE データブロック
1.56 LC_COLLATE データブロック
1.57 LC_MONETARY データブロック
1.58 LC_NUMERIC データブロック
1.59 LC_TIME データブロック
非機密扱いPDF file icon PDF 版ARM DUI0475KJ
Copyright © 2010-2014 ARM.All rights reserved.