プリンタ占有プログラム(富山清風さん投稿)
富山清風さんより掲示板に投稿していただいた『1 「プリンタ占有プログラム」の公開』のプログラムを実行してみました。
富山清風さんより
皆さんもすでに、自作でお持ちだとは思いますが、「プリンタ占有プログラム」を公開します。 以前、「旧家イトウ家の小技裏技(その7)」にプリンタ占有プログラムが載っていましたが、 小生も、「ステップ数の少ない」かつ「見やすい」プリンタ占有プログラムを作成しましたので 公開します。 「プリンタ占有プログラム」の必要性については記述しませんが、・・・ 使用方法は 1.本プログラムを起動する→PRN999(ステーション対応プリンタ?)が「使用中」となり、かつ、 入力待ちになる 2.入力待ちでエンターでプログラム終了(プリンタ開放) XXXリターンで現在使用中のプリンタが開放され、PRNXXXが「使用中」となり、再度、入力待ち になる 以下、2を繰り返す。 ごくごく、簡単なプログラムです。 |
COBOL85でコンパイル、#LINKでリンクします。
COBOL85のパラメータは以下のような感じ。
#LINKのパラメータは以下のような感じ。
以上で実行用のロードモジュールが完成です。
実行してみます。
MSD002のTESTAPLMLというところにロードモジュールを入れた場合、RUNコマンドで以下のように入力します。
こんな画面になりました。
さて、プリンタ占有しているか確認してみましょう。
PRN999という名前のプリンタ占有プログラムを実行したままの状態で、印刷してみることにします。
とりあえず#ABCを実行して、『MSD000のSYS@LMLのファイル詳細情報』でも印刷してみます。(とりあえずプリンタに印刷するようなプログラムなら何でも良い。)
下のようにPRN999のプリンタを指定して印刷(①)しようとすると、画面下に「L3941: プリンタ使用中(PRN100).」と表示されました。
プリンタ占有プログラムが先にプリンタを使用しているので、後から同じプリンタを使おうとしたプログラムは「プリンタ使用中」というメッセージを出しています。
「PRN999のプリンタを使用しようとしたのに、メッセージ中はPRN100となっていておかしい!」と思う方もいらっしゃるかもしれませんが、これは問題ありません。ちょっと難しいですが、本当のプリンタの名前はPRN100で、仮の名前はPRN999ということです。詳しくはプリンタのところの説明か「データ管理説明書」の「プリンタファイル」の章を読んでください。
プリンタ印刷中となった後でどうなるかは、システムがどのような設定になっているかによって変わります。
例えば、下のように「アクションパラメータ(Y/N/W/C/ADV)」というメッセージが出ることもあります。プリンタ使用中のときに特定の動作を行うように設定されていれば、このようなメッセージは表示されず、そのまま先に進むこともあります。
これは「ビジースプール機能」が働いたからです。この辺りは「システム管理説明書」の「スプール機能」の説明を読んでください。
「Y」を押して、印刷データをシステムスプールに保存することにします。
それでは、システムスプールに保存されたか確認してみましょう。
#SPOOLを実行してみます。
印刷イメージを開いて見てみます。確かにさっき印刷したファイル詳細情報がシステムスプールに保存されています。
富山清風さんが書かれているように、プリンタ番号を入力することもできるようなので、PRN999以外のプリンタも占有できるようです。
「印刷する必要もないんだけど、プログラムが印刷するようになっちゃってるんで、毎回印刷しちゃうんだよねぇ。」というようなときに、このプログラムが使えるかもしれません。
(他の用途としては、別のプリンタに印刷したいときや印刷内容を見てから印刷するかどうか判断したい時など?)
ソースは以下。(なぜか終了時にエラーになったので、WG-PRNをX項目に直しています。)
000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. PRN999. 000030****************************************************************** 000040* PRN999使用中 * 000050****************************************************************** 000060 DATE-COMPILED. 000070 ENVIRONMENT DIVISION. 000080 CONFIGURATION SECTION. 000090 SOURCE-COMPUTER. SYSTEM150. 000100 OBJECT-COMPUTER. SYSTEM150. 000110 INPUT-OUTPUT SECTION. 000120 FILE-CONTROL. 000130 SELECT LPF 000140 ASSIGN LPF-PRN999. 000150 DATA DIVISION. 000160 FILE SECTION. 000170 FD LPF 000180 LABEL RECORD OMITTED 000190 LINAGE 66. 000200 01 LP-RC PIC X(300). 000210****************************************************************** 000220 WORKING-STORAGE SECTION. 000230 01 QASG01. 000240 03 QASG0101 PIC X(06). 000250 01 QASG02. 000260 03 QASG0201 PIC X(06). 000270 01 FILE-STATUS. 000280 03 STSXXX PIC X(02). 000290 01 WG-AREA. 000300 03 F PIC X(03) VALUE "PRN". 000310 03 WG-PRN PIC X(03). 000320 01 WG-PRN999. 000330 03 WG-PRN001 PIC N(03). 000340 03 WG-PRN002 PIC N(03). 000350 03 WG-PRN003 PIC N(03). 000360****************************************************************** 000370 SCREEN SECTION. 000380 SD GAMEN END STATUS ESTS. 000390 01 GA. 000400 03 GA-PRN LINE 23 COLUMN 77 PIC X(03) INTO WG-PRN 000410 CHECK OVERFLOW NO IFC. 000420 01 GD. 000430 03 GD-PRN LINE 12 COLUMN 30 PIC N(09) FROM WG-PRN999 000440 BLINK REVERSE. 000450****************************************************************** 000460 PROCEDURE DIVISION. 000470 ST. 000480 MOVE "PRN" TO WG-PRN001. 000490 MOVE "999" TO WG-PRN002. 000500 MOVE NC"使用中" TO WG-PRN003. 000510 DISPLAY GD-PRN. 000520 OPEN OUTPUT LPF. 000530 PERFORM MAIN-RTN THRU MAIN-EXT 000540 CLOSE LPF. 000550 ST-END. 000560 STOP RUN. 000570****************************************************************** 000580 MAIN-RTN. 000590 ACCEPT GA-PRN. 000600 IF ( WG-PRN = " " ) GO MAIN-EXT. 000610 CLOSE LPF. 000620 MOVE WG-AREA TO QASG0101. 000630 MOVE " " TO QASG0201. 000640 CALL "CBLASGN" USING LPF QASG01 QASG02. 000660 MOVE "PRN" TO WG-PRN001. 000670 MOVE WG-PRN TO WG-PRN002. 000680 MOVE NC"使用中" TO WG-PRN003. 000690 DISPLAY GD-PRN. 000700 OPEN OUTPUT LPF. 000710 GO MAIN-RTN. 000720 MAIN-EXT. 000730 EXIT. |
●A-VXの実行用ロードモジュールをダウンロードできるようにしました。
ダウンロード