UNVIS(3) FreeBSD ライブラリ関数マニュアル UNVIS(3)
名称
unvis, strunvis − キャラクタの画像表現のデコード |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <vis.h> int |
unvis(char *cp, int c, int *astate, int flag); int |
strunvis(char *dst, const char *src); |
解説 |
unvis() および strunvis() 関数は、例えば vis(3) 関数によって作り出された ようなキャラクタの画像表現をデコードして元の形に戻します。 unvisは c にあ る連続するキャラクタとともに有効なシーケンスが認識されるまで呼び出され、 それが認識されるとデコードされたキャラクタが cp によって指されるキャラク タのところに置かれます。 strunvisは、 src により指されるキャラクタを dst により指されるバッファへデコードします。 strunvis() 関数は、エスケープシーケンスをデコードしながら単に src を dst へコピーし、 dst に置かれたキャラクタの数を返すか、または無効なエスケープ シーケンスが検出された場合には −1 を返します。 dst のサイズは、 src のサ イズに等しくなければなりません (すなわち、デコード中には拡張は起こりませ ん)。 unvis() 関数は、任意のバイトストリームをデコードできるステートマシンをイ ンプリメントしています。デコードされるそのバイトに付随するすべてのステー トは、 unvis() 関数の外に保存されますから (すなわち、ステートへのポインタ は渡されますから)、異なるストリームをデコードする呼び出しを自由に混在する ことができます。バイトストリームのデコードを開始するには、まず整数をゼロ に初期化します。この整数へのポインタおよびデコード先キャラクタへのポイン タとともに連続するバイトのそれぞれに unvis() を呼び出します。 unvis() 関 数は、適切に取扱わねばならないいくつかのリターンコードを持っています。そ れらは次の通りです: |
0 (ゼロ)
キャラクタがもう一つ必要であり、まだ何も認識されていませ ん。 UNVIS_VALID UNVIS_VALIDPUSH UNVIS_NOCHAR UNVIS_SYNBAD ストリームのすべてのバイトが処理されたとき、 flag を UNVIS_END に設定して もう一度 unvis() を呼び出して残っているキャラクタを抽出します (渡された キャラクタは無視されます)。 次のような部分的コードは、 unvis() の適切な使用法を示しています。 int state = 0; while ((ch = getchar()) != EOF) { |
switch(unvis(&out, ch, &state, 0)) { |
|||
case 0: |
|||
case UNVIS_NOCHAR: |
|||
break; |
|||
case UNVIS_VALID: |
|||
(void) putchar(out); |
|||
break; |
|||
case UNVIS_VALIDPUSH: |
|||
(void) putchar(out); |
|||
goto again; |
|||
case UNVIS_SYNBAD: |
|||
(void)fprintf(stderr, "bad sequence!\n"); |
|||
} |
} |
(void) putchar(out); |
関連項目
歴史
unvis() 関数は、 4.4BSD ではじめて登場しました。 FreeBSD 10.0 December 11, 1993 FreeBSD 10.0 |