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
つのバックスペースが実際のバックスペースを表現するために使われる。
以下のような可視化フォーマットがある:
- (デフォルト)
- メタ文字 (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
で初めて登場した。