VIS(3) | 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
() 関数は、
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
つのバックスペースが実際のバックスペースを表現するために使われる。
以下のような可視化フォーマットがある:
M
’
を使うこと。
制御文字 (iscntrl(3)
を参照)
を表現するためには、キャレット
‘^
’
を使うこと。
以下のフォーマットが使われる:
VIS_CSTYLE
\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
\ddd
’
という形式が使われる。
ここで
d は 8
進数を表す。さらに、もう 1
つフラグ VIS_NOSLASH
がある。
このフラグは、2
つのバックスラッシュと
デフォルトフォーマットで前におかれるバックスラッシュを使わないようにする。
(つまり、制御文字は
‘^C
’
で、メタ文字は
‘M-C
’
で表される)。
このフラグが設定されると、エンコードは曖昧で可逆でなくなる。
これらの関数は 4.4BSD で初めて登場した。
June 9, 1993 | Linux NetKit (0.17) |