名称
nl_tools_16: ADVANCE(), byte_status(), BYTE_STATUS(), CHARADV(), CHARAT(),
c_colwidth(), C_COLWIDTH(), firstof2(), FIRSTof2(), secof2(), SECof2(),
WCHAR(), WCHARADV() ― 16 ビット文字処理用ツール (10.30 で廃止)
構文
#include <nl_ctype.h>
int firstof2(int c);
int secof2(int c);
int byte_status(int c, int laststatus);
int c_colwidth(int c);
int FIRSTof2(int c);
int SECof2(int c);
int BYTE_STATUS(int c, int laststatus);
int C_COLWIDTH(int c);
int CHARAT(const char *p);
int ADVANCE(const char *p);
int CHARADV(const char *p);
int WCHAR(wchar_t wc, char *p);
int WCHARADV(wchar_t wc, char *p);
void PCHAR(int c, char *p);
void PCHARADV(int c, char *p);
特記事項
上記のインタフェースのうち、大文字で始まるものはマクロで実現されています。それ以外のインタフェースは関数です。
これらのマクロと関数は一般にはもう使用されていません。警告を参照してください。
説明
以下のマクロと関数はロードされている NLS 環境に基づいて処理を行います setlocale(3C) を参照)。
| FIRSTof2() | | 1 バイトの引き数をとり、ロードされている NLS 環境に照らして、2 バイト文字の 1 バイト目になり得るかどうか判定します。なり得るときは 0 以外の値を、なり得ないときは 0 を返します。 |
| SECof2() | | 1 バイトの引き数をとり、ロードされている NLS 環境に照らして、2 バイト文字の 2 バイト目になり得るかどうか判定します。なり得るときは 0 以外の値を、なり得ないときは 0 を返します。 |
| BYTE_STATUS() | | c で与えた現在注目しているバイト値と、直前に呼び出した BYTE_STATUS() の返した直前のバイト値のステータス laststatus に基づき、以下の値のどれかを返します。 これらは <nl_ctype.h> で定義されたステータス値です。 | ONEBYTE | | シングルバイト文字 | | SECOF2 | | 2 バイト文字の 2 バイト目 | | FIRSTOF2 | | 2 バイト文字の 2 バイト目 |
2 バイト文字を正しく確認するためには、1 バイト目、2 バイト目の両方を確認する必要があります。 laststatus の値が FIRSTOF2 であっても、 SECof2(c) が偽を返せば BYTE_STATUS(c, laststatus) は ONEBYTE を返します。 |
| C_COLWIDTH() | | 1 バイト文字か 2 バイト文字の 1 バイト目を引き数にとり、その文字がターミナル画面で占める文字数を返します。 マクロ BYTE_STATUS(), C_COLWIDTH(), FIRSTof2(), SEC0of2() に与える引き数 c が-1 (EOF) 未満であるか 255 より大きい場合、これらのマクロの戻り値は定義されていません。 |
| CHARAT() | | 1 バイト文字か 2 バイト文字の 1 バイト目を指すポインター p を引き数にとります。 どちらの場合も CHARAT() はポインター p の指す文字に対応した wchar_t 型の値を返します。 |
| ADVANCE() | | 引き数に与えたポインターの指す文字の大きさ (1 バイトか 2 バイトです)
だけポインターを進めます。 |
| CHARADV() | | 関数 CHARAT() と ADVANCE() を 1 つのマクロで実現したものです。 1 バイト文字か 2 バイト文字の 2 バイト目を指すポインター p を引き数にとります。 どちらの場合も CHARADV() はポインター p の指す文字に対応した wchar_t 型の値を返し、その文字の次にポインター p を進めます。 |
| WCHAR() | | wchar_t 型の値 wc を対応する 1 バイト文字、または 2 バイト文字に変換し、 p で指定する場所に書き込みます。 WCHAR() は wchar_t 型の値 wc を返します。 |
| WCHARADV() | | 関数 WCHAR() と ADVANCE() を 1 つのマクロで実現したものです。 wchar_t 型の値 wc
を対応する 1 バイト文字、または 2 バイト文字に変換し、 p で指定する場所に書き込みます。その後で p をその文字の次に進めます。 WCHARADV() は wchar_t 型の値 wc を返します。 |
| firstof2() | | |
| secof2() | | |
| byte_status() | | |
| c_colwidth() | | 先に説明した同等のマクロをサブルーチンで実現したものです。
これらの関数は C 言語以外の言語からも呼び出せます。 |
多言語化対応
Locale
LC_CTYPE カテゴリがシングル/マルチバイト文字の解釈を決定します。
警告
このマニュアル項目で説明する HP 独自の関数とマクロは、 一般にはもう使用されていません。
それらは、他のベンダーのシステムに移植性がなく、将来の HP-UX リリースで提供されません。
移植性を最大限に保持するために、マルチバイト文字の処理にはマニュアル項目 multibyte(3C) で説明するルーチンを使ってください。
WCHAR() や WCHARADV() に与える 1 番目の引き数には、このマニュアル項目で説明した他のマクロは使えません。
たとえば、
を
WCHARADV(CHARADV
(f),t) で実現することはできません。
代わりにこのようにしてください。
int c; ... c = CHARADV
(f), WCHARADV (c,t)
式や文の一部以外に用いられると、 WCHAR() と WCHARADV() は lint(1) による警告 "null
effect" を発生させる可能性があります。 これは両方のマクロの機能には影響を与えません。
WCHAR() と WCHARADV() が「文字を置き換える」マクロではないことに注意してください。
2 バイト文字の 1 バイト目にシングルバイト文字をオーバーライトすると
2 バイト文字の 2 バイト目が取り残されてしまいますが、 WCHAR() や WCHARADV() はこのような事態を特に考慮していません。
CHARAT(), ADVANCE(), CHARADV() は引き数のポインターの指す場所の次のバイト値の、 SECof2 などによる検査は行いません。
著者
nl_tools_16() は HP で開発されました。