2.7.3. ロケールブロックの定義

ロケールデータブロックは、rt_locale.s ファイルにある一連のアセンブリ言語マクロを使用して定義されます。 このため、アセンブリ言語ソース ファイルを記述してロケールデータブロックを定義することをお勧めします。 RVCT には、LC_CTYPE, LC_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

function

使用しているロケールデータに関連する特定の関数です。

ロケールデータの指定時には、対応する関数ごとにマクロの呼び出しを繰り返す必要があります。

終了位置の指定

ロケールデータブロックの定義を完了するには、_end マクロを呼び出します。 このマクロは、引数をとりません。 以下に例を示します。

LC_TYPE_end

各項目には以下の意味があります。

TYPE

以下のいずれかを指定します。

  • CTYPE

  • COLLATE

  • MONETARY

  • NUMERIC

  • TIME

固定ロケールの指定

常に同じロケールを返す固定関数を記述するには、マクロで定義されている _start シンボル名を使用します。Example 2.2 に、この関数の CTYPE ロケール用の実装方法を示します。

Example 2.2. 固定ロケール

        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 を呼び出して、ロケールブロックのシーケンスを終了します。Example 2.3 に、CTYPE ロケール用のそのマクロの実装方法を示します。

Example 2.3. 複数ロケール

        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
Copyright © 2007 ARM Limited. All rights reserved.ARM DUI 0349AJ
Non-Confidential