フォーム使用時のプリンターのエラーを回避する方法

     ◇   元山 よし子  
         ◇ 事例/お薦めプログラムの目次へ
《コメント---フォームを使用する時は、プリンターの設定をWINDOWSモード以外にしておかないとエラーになってしまいます。そこでWINDOWSモードだった時のみ、プリンターの機種を確認させて、エラーで落ちるわずらわしさを回避させる事例です。》

 DOS/V PIPS と、ソードのプリンターのみを使用している時は、FORM使用時になんの問題もなかったのですが、Win版PIPSの環境でプリンターも混在している状態で、しかもプリンターをWindowsモードに変更するケースも出てくると、問題が発生するようになりました。
 注文入力作業で「エラーがでています」との声があがり始めました。
 「注文入力はフォームを使用しているので、エラーがでたら大体プリンターがWindowsモードになっているケースだからコマンドの CHGPRT でプリンターを変更してね」と説明をしても、作業する人間にとってこの作業はフォームであの印刷は制御コードを使用なんて覚えきれないといおうか関係ないことなのです。
 そこでこれはやはりプログラムのなかでサポートをすべきだと考えました。

 この「プリンター確認PRO 」でフォームの作業の前に Z40 をつかって GOSUB で飛んで、プリンターがWindowsモードだったら要注意とのことでプリンターの機種の確認をさせようと考えました。また、スタート時点でWindowsモードだった時は、作業後にまた戻しています。
 V39はフォーム入力の定義表です。
 V31はデータを格納するバインダーです。

 なお、ENV(8)が現在設定しているプリンターの情報であって、実際の印字できるプリンターをチェックする関数ではないようで残念です(NEC のプリンターがつながっているのにESC/P モードを指定しまうと印刷の時、化けます。あたりまえのことですが念のため)。

<入力PRO>
LET Z40=0.123456789;
GOSUB プリンター確認PRO;CLERA Z40;
FORM;I;G;%V39/1;%V31;G;E;
IF V11<>"5" THEN GOTO $終了;
CHGPRT;5; /* プリンターをWINDOWSモードに戻す */
$終了:STOP;


<プリンター確認PRO>
$DEF1:IF ENV(8)=1 OR 2 OR 3 OR 4 THEN GOTO $DEF2;
IF ENV(8)=5 THEN LET V11="5";
IF ENV(8)=5 THEN GOTO $WIN ELSE GOTO $ERR2;
$WIN:ACCEPT "プリンターは 1==EPSON,2=NEC,3=SORD,4=TOSHIBA,0=中止",V30;
IF ERR(0)=55 OR V30="0"THEN GOTO $終了;
IF V30="1" THEN GOTO $EPSON;
IF V30="2" THEN GOTO $NEC;
IF V30="3" THEN GOTO $SORD;
IF V30="4" THEN GOTO $TOSHIBA ELSE GOTO $ERR2;
$TOSHIBA:CHGPRT;1;GOTO $DEF2;
$SORD:CHGPRT;2;1;GOTO $DEF2;
$NEC:CHGPRT;3;GOTO $DEF2;
$EPSON:CHGPRT;4;GOTO $DEF2;
$DEF2:IF Z40=0.123456789 THEN GOTO $戻り ELSE GOTO $終了;
$戻り:RETURN;
$終了:CLOSE;STOP;
$ERR2:CLOSE;BELL;MESSAGE "プリンターの指定が正しくありません";
GOTO $終了;


このページのTOPへ戻る