名 前
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 で 初 め て 登 場 し た 。