名前
vis - 文字を表示可能文字にエンコードする
書式
.Fd #include <vis.h>
char *
vis char *dst char c int flag char nextcint
strvis char *dst char *src int flagint
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関数は、 src を
NUL 文字が現れるまでエンコードする。
strvisx関数は、 src をちょうど len 文字分だけエンコードする (これは
NULを含むデータブロックをエンコードするのに役立つ)。 どちらの形式でも、 dst は
NUL終端される。 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 ビット目を使う文字) を表現するためには、
を使うこと。
制御文字
( iscntrl(3)
を参照) を表現するためには、キャレット
を使うこと。
以下のフォーマットが使われる:
| |
\^C | 制御文字
を表す。
から
の間の文字と
(
と同じ) を表す。
|
\M-C | 8 ビット目がセットされている文字
を表す。
から
の間の文字を表す。
|
\M^C | 8 ビット目がセットされている制御文字
を表す。
with the 8th bit set.
Spans characters
から
の間の文字と
(
と同じ) を表す。
|
\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文字を
ではなく
としてエンコードするかを決定するために、引き数 nextc が参照される。
nextc
が 1 個の 8 進数の場合、曖昧さを避けるため後者の表現が使われる。
| |
VIS_OCTAL | |
3 個の 8 進数シーケンスを使う。
という形式が使われる。
ここで
d
は 8 進数を表す。
| |
さらに、もう 1 つフラグ
VIS_NOSLASHがある。 このフラグは、2 つのバックスラッシュと デフォルトフォーマットで前におかれるバックスラッシュを使わないようにする。 (つまり、制御文字は
^C
で、メタ文字は
M-C
で表される)。
このフラグが設定されると、エンコードは曖昧で可逆でなくなる。
関連項目
履歴
これらの関数は 4.4BSD で初めて登場した。