Fn strunvis 関数は、エスケープシーケンスをデコードしながら単に src を dst へコピーし、 dst に置かれたキャラクタの数を返すか、または無効な エスケープシーケンスが検出された場合には -1 を返します。 dst のサイズは、 src のサイズに等しくなければなりません (すなわち、デコード中には拡張は 起こりません)。
Fn unvis 関数は、任意のバイトストリームをデコードできるステートマシンを インプリメントしています。デコードされるそのバイトに付随するすべての ステートは、 Fn unvis 関数の外に保存されますから (すなわち、ステートへの ポインタは渡されますから)、異なるストリームをデコードする呼び出しを自由に 混在することができます。バイトストリームのデコードを開始するには、まず 整数をゼロに初期化します。この整数へのポインタおよびデコード先キャラクタ へのポインタとともに連続するバイトのそれぞれに Fn unvis を呼び出します。 Fn unvis 関数は、適切に取扱わねばならないいくつかのリターンコードを 持っています。それらは次の通りです:
ストリームのすべてのバイトが処理されたとき、 flag を UNVIS_END に設定してもう一度 Fn unvis を呼び出して残っているキャラクタを 抽出します (渡されたキャラクタは無視されます)。
次のような部分的コードは、 Fn unvis の適切な使用法を示しています。
int state = 0; char out; while ((ch = getchar()) != EOF) { again: 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"); exit(1); } } if (unvis(&out, (char)0, &state, UNVIS_END) == UNVIS_VALID) (void) putchar(out);