実行環境

82. 印刷スプールの CCSID とは

印刷スプール、いわゆるスプールはデータ・ベースと同じように文字情報の集まりである。
しかし WRKOUTQ で「8=属性」でスプールの属性を調べてみても CCSID の属性は見つからない。
スプールが、これほど文字情報の集まりでありながら CCSID 情報がないのでは
一体、プリンターは、どのようにして正しい文字コードを識別すればよいのだろうか、と
思ってしまうのも無理はない。
例えば CCSID 5026 の環境下で印刷出力したデータは、スプールに出力されて保管されるのであれば
そのスプールは 5026 であると、スプール属性のどこかに記録されるべきであろう。
一方、すべてのスプールは何らかの印刷ファイルに基づいて出力されているのだから
印刷ファイルに CCSID が指定されている、と考えることもできる。
調べてみると確かに DSPJOB コマンドの出力結果である、印刷ファイル : QSYS/QPDSPJOB
CCSID 5026 と指定されている。
ところが一般的に使用頻度の高い QPRINTQSYSPRT は CCSID が 0 と指定されている。
実はスプールの内部には CCSID は隠れてちゃんと登録されている。
API: スプール・ファイル属性の検索(QUSRSPLA) でスプールの属性を検索することができるが
日本語ILR BookManager によるマニュアルを参照してもスプールのCCSID を探し出すことはできない。
これは英文マニュアルでのみしか公開されていないからである。( OS : V5R4M0 以降 )

スプール・ファイル属性の検索( QUSRSPLA ) API

必須パラメーター・グループ:

1.レシーバー変数出力Char(*)
2.レシーバー変数の長さ入力Binary(4)
3.形式名入力Char(8)
4.修飾ジョブ名入力Char(26)
5.内部ジョブ識別コード入力Char(16)
6.内部スプール・ファイル識別コード入力Char(16)
7.スプール・ファイル名入力Char(10)
8.スプール・ファイル番号入力Binary(4)

任意選択パラメータ:

9.エラー・コード入出力Char(*)

レシーバー変数

結果を受け取る変数の名前(ポインター)

レシーバー変数の長さ

結果を受け取る変数の長さ

形式名

SPLA0100基本スプールの属性
SPLA0200拡張スプールの属性......CCSID が保管されているのは、この属性である。

修飾ジョブ名

ジョブ名(10桁) + ユーザー名(10桁) + ジョブ番号(6桁)

内部ジョブ識別コード

修飾ジョブ名を指定するときはこの欄はブランクにセットしておく

スプール・ファイル名

10桁のスプール・ファイル名

スプール・ファイル番号

スプール・ファイル固有の番号

SPLA0200 形式

オフセットタイプフィールド
10進数16進数
00BINARY(4)返されるバイト数
44BINARY(4)使用可能バイト数
88CHAR(8)形式名
1610CHAR(16)内部ジョブ識別コード
3220CHAR(16)内部スプール・ファイル識別コード
4830CHAR(10)ジョブ名
583ACHAR(10)ユーザー名
6844CHAR(6)ジョブ番号
744ACHAR(10)スプール・ファイル名
8454BINARY(4)スプール・ファイル番号
8858CHAR(10)用紙タイプ
9862CHAR(10)ユーザー指定データ
1086CCHAR(10)状況
11876CHAR(10)ファイルが使用可能になる時点
12880CHAR(10)書き出し前のファイルの保留
1388ACHAR(10)書き出し後のファイルの保留
14894BINARY(4)合計ページ数
15298BINARY(4)書き出し中のページまたはレコード
1569CBINARY(4)開始ページ
160A0BINARY(4)終了ページ
::::
2976BA0BINARY(4)ジョブのCCSID
::::
3316CF4BINARY(4)CCSID
::::
【解説】

CCSID」というテキストの項目があるが、実はこれはスプールのコンテンツのCCSID を
表しているのではなく、スプールにある10バイトの「ユーザー情報」の文字列の
CCSID を代表しているに過ぎない。
何の説明もなく CCSID と表現されると、てっきりスプールの中身のことを言及しているものと
思われがちだが、スプールの中身とは関係がない。
唯一、「ジョブのCCSID」がスプールのCCSID を表しているのにほぼ近いと言える。
実は、スプールの中身を表現している CCSID はどこにも見当たらない。
QPRINTQSYSPRT や省略時の CCSID を考慮すると、「ジョブのCCSID」がスプールの
CCSID を表していると、ほぼ言えるだろう。