Google
オフコン練習帳内を検索
インターネット全体を検索

NECオフコン関連
オフコン一般
情報
トップ  >  プリンタ占有プログラム

プリンタ占有プログラム(富山清風さん投稿)

富山清風さんより掲示板に投稿していただいた『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の実行用ロードモジュールをダウンロードできるようにしました。

ダウンロード