EN JA
VIS(3)
VIS(3) FreeBSD Library Functions Manual VIS(3)

名前

vis文字を表示可能文字にエンコードする

書式

#include <vis.h> char * vis( char *dst, char c, int flag, char nextc) int strvis( char *dst, char *src, int flag) int strvisx( char *dst, char *src, int len, int flag)

説明

vis() 関数は、文字 c を表現する文字列を dst にコピーする。 c をエンコードする必要がない場合、変更せずにコピーされる。文字列は NUL 文字で終端され、文字列の最後の文字へのポインタが返される。エンコードされた文字の最大長は 4 文字である (最後の NUL 文字 は含まない)。よって、複数の文字をバッファにエンコードする場合、バッファの大きさは「エンコードされる文字の数の 4 倍 + 最後の NUL 文字 のための 1 文字」でなければならない。引き数 flag は、エンコードまたは表示可能文字に変更される文字のデフォルトの範囲を変更する。その他の文字 nextc は、エンコードフォーマット VIS_CSTYLE (以下で説明する) を選択する場合にのみ使われる。

strvis() と strvisx() 関数は、文字列 src を表示可能文字にしたものを dst にコピーする。 strvis() 関数は、 srcNUL 文字 が現れるまでエンコードする。 strvisx() 関数は、 src をちょうど len 文字分だけエンコードする (これは NUL を含むデータブロックをエンコードするのに役立つ)。どちらの形式でも、 dstNUL 終端される。 dst の大きさは、エンコードされる文字 src の数の 4 倍 (+ NUL のための 1 文字分) でなければならない。どちらの形式でも dst の文字数が返される (最後の NUL は含まない)。

エンコードは唯一のもので、全て表示文字から構成された可逆表現になっている。つまり、エンコードされた文字は、 unvis(3)strunvis(3) 関数を用いて元の形式にデコードすることができる。

制御可能な 2 つのパラメータがある: エンコードされる文字の範囲と使われる表現のタイプである。デフォルトでは、スペース・タブ・改行以外の非表示文字がエンコードされる ( isgraph(3) を参照)。以下のフラグは、この動作を変更する:

VIS_SP
スペースもエンコードする。
VIS_TAB
タブもエンコードする。
VIS_NL
改行もエンコードする。
VIS_WHITE
VIS_SP | VIS_TAB | VIS_NL と同じ。
VIS_SAFE
「安全でない」文字だけをエンコードする。安全でないとは、一般的な端末に予期せぬ機能を動作させてしまうことを意味する。現在のところ、スペース・タブ・改行・バックスペース・ベル・リターン - そして全ての表示可能文字 - はエンコードされない。

3 つのエンコード形式がある。全ての形式で、バックスペース‘ \’が特殊シーケンスの始まりとして使われる。 2 つのバックスペースが実際のバックスペースを表現するために使われる。以下のような可視化フォーマットがある:

(デフォルト)
メタ文字 (8 ビット目を使う文字) を表現するためには、‘ M’を使うこと。制御文字 ( iscntrl(3) を参照) を表現するためには、キャレット‘ ^’を使うこと。以下のフォーマットが使われる:
\^C
制御文字‘ C’を表す。‘ \000’から‘ \037’の間の文字と‘ \177’ (‘ \^?’と同じ) を表す。
\M-C
8 ビット目がセットされている文字‘ C’を表す。‘ \241’から‘ \376’の間の文字を表す。
\M^C
8 ビット目がセットされている制御文字‘ C’を表す。 with the 8th bit set. Spans characters ‘ \200’から‘ \237’の間の文字と‘ \377’ (‘ \M^?’と同じ) を表す。
\040
ASCII スペースを表す。
\240
メタスペースを表す。
VIS_CSTYLE
標準的な非表示文字を表現するために、 C 言語形式のバックスラッシュシーケンスを使う。このような文字を表すために以下のシーケンスが使われる:

\a - BEL (007) 
\b - BS (010) 
\f - NP (014) 
\n - NL (012) 
\r - CR (015) 
\t - HT (011) 
\v - VT (013) 
\0 - NUL (000)

このフォーマットを使った場合、 NUL 文字を‘ \000’ではなく‘ \0’としてエンコードするかを決定するために、引き数 nextc が参照される。 nextc が 1 個の 8 進数の場合、曖昧さを避けるため後者の表現が使われる。

VIS_OCTAL
3 個の 8 進数シーケンスを使う。‘ \ddd’という形式が使われる。ここで d は 8 進数を表す。

さらに、もう 1 つフラグ VIS_NOSLASH がある。このフラグは、2 つのバックスラッシュとデフォルトフォーマットで前におかれるバックスラッシュを使わないようにする。 (つまり、制御文字は‘ ^C’で、メタ文字は‘ M-C’で表される)。このフラグが設定されると、エンコードは曖昧で可逆でなくなる。

関連項目

vis(1), unvis(1), unvis(3)

履歴

これらの関数は 4.4BSD で初めて登場した。
June 9, 1993 Linux NetKit (0.17)