印刷物に罫線をつける方法を説明します。これには、(1)5250の印刷装置制御コードの指定と、(2)DDSキーワード(BOX,
LINE ※使ったことないです(ーー;))によるもの、(3)APWによるもの、(4)AFPによるもの、とがありますが、ここでは、(1) 5250の印刷装置制御コードの指定、について説明します。この機能もSYSTEM38から存在していました。というより、5250の機能として、昔からあったのですね。
印刷不能文字です
これは、プログラム内部記述(O仕様書)で、罫線コードを指定する方法です。このコードは、SCS(SNA
Character String)コードと呼ばれます。尚、印刷装置ファイルは、必ず、RPLUNPRT(*NO)にしてください。このSCSコードそのものは、空白未満のコードを含み、それ自体がそもそも、印刷不能文字なのです。これを、別の値に置き換えて、スプールしてしまうと、そのコードが働かなくなります(置き換えられたコードがプリンターに渡るので、無意味になるわけです。)また、コードを間違えると、印刷不能文字なので、バシバシと印刷不能文字を含むものとして、保留されます。正しい値であれば、印刷不能文字であっても、実際に印刷すると、何事もなく、飲み込まれ、期待通りの印刷結果が出てきます。
SCS制御コードの形式
値はすべて、16進数で指定します。
制御コード |
カウント |
パラメータ1 |
パラメータ2 ... |
1 or 2 byte |
1 byte |
1 or 2 byte |
1 or 2 byte |
マニュアル 「日本語5250ワークステーション・プログラム使用者の手引き」 第七章 印刷装置の制御コードより
印刷装置の罫線指定 Define Grid Line (DGL)
機能
この制御コードは、罫線の位置の指定と印刷の開始および中止を制御します。
形式
nn カウント
制御コードに続く、パラメータ(カウント自体も含む)のバイト数を1バイトで示しています。たとえば、1バイトのパラメータを2つ伴っている場合のカウントは、カウント自身を含めるので、x'03'になります。
xx ラインタイプ
00 |
細線 |
01 |
太線 |
02 |
2重線(細) |
08 |
破線(細) |
09 |
破線(太) |
0A |
2重破線(細) |
yy オプション
00 |
罫線中止と罫線情報の消去 |
40 |
垂直方向の罫線の印刷開始 |
80 |
G1からGnで指定された区間への水平方向の罫線の印刷 |
C0 |
垂直、水平方向の罫線の印刷開始 |
G1 - Gn
左マージンからの位置を、1/1440インチ(2.54/1440cm)単位で設定する2バイトのパラメータです。但し、これらの数値は数の小さい値から順番に並べてください。そうしないと、パラメータは無視されます。
注意 : G1〜Gnの値は、パラメータyyの値によって下記に示す制約を受けます。
yy |
00 |
G1〜Gnは無視されます。 |
40 |
垂直方向の罫線が各Gi (1≦i≦n) から印刷されます。 |
80 |
G1〜Gnまで水平方向の罫線が印刷されます。(n=1の場合は、点(ドット)が印刷されます。) |
C0 |
垂直方向の罫線が各Giから印刷され、水平方向の罫線がG1からGnまで印刷されます。 |
nn |
00〜01の場合はDGL制御コードは無効です。G1からGnまでのパラメータはすべて2バイトのため、カウントnnは、それが5以上の場合、必ず偶数にしてください。偶数でない場合は、DGL制御コードは無効です。 |
コーディング例
制御コード |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
2B |
FD |
08 |
00 |
00 |
80 |
2D |
00 |
33 |
30 |
10進数11520 |
10進数13104 |
固定情報 |
カウンター |
固定情報 |
細線 |
水平方向の罫線印刷 |
1440×8 : 行の左端から8インチの位置から罫線印刷 |
1440×9.1 : 行の左端から9.1インチの位置まで罫線印刷 |
わかりやすい解説(だといいな)
以上は、マニュアルの丸写し(WWWマニュアルには出ていない内容)ですが、これだけでは、とてもわかりにくいですね。そこで、解説をしていきます。上記パラメータのうち、nn,
xx, yyは、さほど難しくないですね。問題は、2バイトのパラメータ、G1からGnの部分ですね。徹底的に、ここを理解しましょう。
1/1440インチとはどういう意味か
マニュアルの文言「1/1440インチ(2.54/1440cm)単位で設定する」、「(n=1の場合は、点(ドット)が印刷されます。)」と言う言葉から分かるように、1/1440インチ=2.54/1440cm、つまりは、1(インチ)対1440(ドット)という比例関係を表していますね。これは、「1インチあたりのドッド数は1440個」という事です(実は、「ドット」かどうかは分からないのですが、この方が分かりやすいので、こう書きます。)。これは、重要なことです。印刷関係で、1インチあたり...といえば、CPI(character
per inch)ですね。1インチあたりの文字数が10で、それが1440ドットならば、1文字あたり、144ドットですよね。10cpiならば144ドット、12cpiならば120ドット、15cpiならば96です。この文字数を元に、罫線の位置を指定する方が楽ですね。
どうして、2バイトなのか
「1/1440インチとはどういう意味か」を踏まえて、最大は、144×132=19008ですね。1バイトの16進数が表現できる10進数は、0から255までで、ぜんぜん足りません。しかし2バイトだと、0から65535となりますので、十分に足ります。これで、このパラメータが2バイト必要なわけです。
カウントnnは、それが5以上の場合、必ず偶数にしてください、って?
制御コード |
パラメータバイト数 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
2B |
FD |
08 |
00 |
00 |
80 |
G1 |
G2 |
結局、カウントが5以上の「カウントが05」の位置は、G1なのですが、G1〜Gnは1パラメータ長が、2バイトなので、カウントが5以上の場合は、カウント=4
+ 2n = 2 (2+n) = (ここで2+nをiとすると) 2i
となるので、必ず、偶数になるのです。ところで、分からないのは、「00〜01の場合はDGL制御コードは無効です。」の部分です。00,01が無効なのはいいんですが、じゃあ02,03は有効なんでしょうか?ちなみに、04は、2BFD04000000で消去になりますね。
yyとG1〜Gnの関係
yy=40 : 垂直
制御コード |
パラメータバイト数 |
01 |
02 |
03 |
04 |
05 |
06 |
2B |
FD |
06 |
00 |
00 |
40 |
v1 |
制御コード |
パラメータバイト数 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
2B |
FD |
0A |
00 |
00 |
40 |
v1 |
v2 |
v3 |
yy=80 : 水平
制御コード |
パラメータバイト数 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
2B |
FD |
08 |
00 |
00 |
80 |
h1 |
h2 |
制御コード |
パラメータバイト数 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
2B |
FD |
0C |
00 |
00 |
80 |
h1 |
h2 |
h3 |
h4 |
だいたい、これでお分かりだと思います。最初に印刷不能文字だと言ったのは、この制御コード〜Gnの部分のことです。値はみな16進数なので、もう制御コード自体が、「印刷不能文字」ですね。でも、このコードで始まるものだけは、エラーにならずに、罫線の命令になります。罫線以外のSCS制御コードは、9.29. SNA Character String Codeについて を参考にしてください。文字の倍角やら、たて倍横倍とか、あります。
具体的なコーディングは、9.53.
罫線を印刷物につけたい(2) にて説明します。
続く...
2000-8-8 |