ステージ 2 のプリンター・コード・ページ変換
コード・ポイント変換の 2 番目のステージでは、1 つ以上のステージ 2 変換テーブルが、中間コード・ページからプリンターに適したものにコード・ポイントを変換します。
データベース・コロン・ファイル内の t0 から t9 属性は、ステージ 2 変換テーブルの絶対パス名を指定します。t0 から t9 属性はそれぞれ、名前をコンマで区切ることによって複数のステージ 2 変換テーブルを指定できます。印刷フォーマッターは、これらのステージ 2 変換テーブルを読み込み、1 つのリングに連結します。現行プリンター・コード・ページ用のテーブルから始めて、フォーマッターは入力印刷ファイルの各文字を処理します。最初に行う判断は、文字がそのプリンター・コード・ページ内で定義されているかどうかです。 言い換えれば、コード・ポイント値がテーブル内のコード・ポイント数より大きくなく、値が SC でないことを判断します。
文字がコード・ページに含まれていれば、変換されたコード・ポイントがプリンターに送信されます。フォーマッターは、適切なプリンター・コマンド・ストリングを送信して、プリンター・コード・ページを選択します。 規則により、プリンター・コマンド・ストリングの 2 文字の属性名は、コマンド名配列のインデックス 0 にあります。文字がコード・ページに含まれていない場合、フォーマッターはリング内で次にあるステージ 2 変換テーブルの処理を繰り返します。文字を印刷できる変換テーブルがリング内で見つからない場合、フォーマッターは置換文字 (下線) を代わりに印刷します。
次の C 言語コード例は、XYZ.999 という名前のステージ 2 変換テーブルを生成します。このテーブルは、中間コード・ページのコード・ポイントを、プリンターのコード・ページ用のコード・ポイントに変換します。c1 属性は、コード・ページ XYZ.999 を選択するようにプリンターに指示する、プリンター・コマンド・ストリングを格納していることが前提です。
#include <piostruct.h>
#include <fcntl.h>
/*** Table to Translate Code Points for the Intermediate ***/
/*** Code Page to Code Points for a Printer Code Page ***/
struct transtab table[] = {
/* 00 (000) */ {CP}, {CP}, {CP}, {CP},
.
.
.
/* FC (252) */ {63}, {CP}, {94,1}, {SC} }; /*** Command Names for the Translate Table ***/
char cmdnames[][2] = {
{'c', '1'}, /* index 0 - select the code page */
{'e', 'b'} }; /* index 1 - next byte is graphic */ /*** Write the Table To a File (Error Processing Not Shown) ***/
main() {
int fildes;
int num_commands = sizeof(cmdnames) / 2;
fildes = open("/usr/lib/lpd/pio/trans2/XYZ.999", O_CREAT |
O_WRONLY,¥ 0664);
write(fildes, "PIOSTAGE2XLATE00", 16);
write(fildes, &num_commands, sizeof(num_commands));
write(fildes, cmdnames, sizeof(cmdnames));
write(fildes, table, sizeof(table));
return(0);
}コード・ポイント 252 の {63} は、コード・ポイント 252 をプリンターに送信する前にコード・ポイント 63 に変換することを示しています。コード・ポイント 253 の {CP} は、コード・ポイント 253 を変換せずにプリンターに送信することを示しています。コード・ポイント 254 の {94,1} は、コード・ポイント 254 をプリンターに送信する前にコード・ポイント 94 に変換することを示しています。{94,1} の ,1 は、コード・ポイントを送信する前に、コマンド名配列のインデックス 1 に入った 2 文字の属性名をもつプリンター・コマンド・ストリングをプリンターに送信することを示しています。コード・ポイント 255 の SC は、このステージ 2 変換テーブルによって記述されているプリンター・コード・ページを使用して、中間コード・ページのコード・ポイント 255 の文字を印刷できないことを示しています。