OS/2マシンにネットワークプリンターを繋ぐ2020年04月19日 16:09

一番下がPX-203、その上がEP-979A3、一番上がBJC-35vII

昨年の夏、エプソンのEP-979A3を購入しました。次の機種が出てお手ごろな価格になっていたのと、 手差しですがA3の用紙が使えることで購入に踏みきりました。

さて、わたしの所では、OS/2が現役で動いています。すでに、IBMのサポートが終了し20年になるでしょうか。 使う上でいろいろと制約があります。新しいハードウェアに対応していないし、最近のソフトウェアテクノロジーにも 対応していません。だからといってWindowsですべて賄う気にはなりません。 重いし、よくトラブルし、いらない物がてんこ盛りだし。 起動すると「すべてお任せください」なんて表示してくるけれど安心できないです。

と言う訳で、OS/2からネットワーク越しにEP-979A3を接続できないかと検討してみました。結果を先に述べると、 モノクロ印刷との制限がありますができました。考えたよりも簡単に接続できました。

プリンター・ドライバーは、OMNIJドライバーに"OMNI.Epson Generic ESC2P"があります。これを使ってみます。 EP-979A3はエプソンの製品なので、ESC/Pぐらいはサポートしているだろうと予想しました。

Windows PCとプリンタを共用を考慮するとネットワーク越しの接続になります。LANサーバーの環境では WindowsとOS/2の接続は、SambaサーバーやNetDriveなどを使う必要がありそうでやめました。残る手段はTCP/IPの 印刷サービスである"lpd"と"lpdportd"を使う方向で考えます。

方針が決まりましたので、早速、構築してみます。

まずは、TCP/IPの構成です。"TCP/IP シャドー"ホルダーの "TCP/IP 構成"ホルダーの"TCP/IP 構成(ローカル)"アイコンをクリックして"TCP/IP 構成ノート ブック"を開きます。

"自動始動"タブのベージで、"lpd"と"lpdportd"の"自動開始サービス"にチェックマークを入れ、全景セッションを 選択します。"lpdportd"には、実行時のログが取れるように"パラメーター"に"-t"を追加します。(プリンターのホスト名や IPアドレスも登録すると後で便利です。)

ここでOS/2を再起動して、"lpd"と"lpdportd"が正常に起動することと、プリンターがネットワークに接続していることを 確認します。

次に、プリンター・ドライバーのインストールです。"ftp.software.ibm.com"から、 "OMNIJP.EXE"を入手します。 "OMNIJP.EXE"を実行するとたくさんのファイルが出てきます。

"OMNI.DRV"アイコンをクリックすると、これまたたくさんの プリンターのアイコンが出てきます。

その中なら"OMNI.Epson Generic ESC2P"をデスクトップにドロップします。

それでは、プリンター・ドライバーの設定をします。

デスクトップにドラッグしたプリンタのアイコンのプロパティーを開きます。"プリンター・ドライバー"タグで "省略時のプリンター・ドライバー"が"OMNI.Epson Generic ESC2P"になっていることを確認します。 "出力ポート"タブで"出力ポート"で"\PIPE\LPD0"を選択します。


そのアイコンをダブルクリックして "\PIPE\LPD0 - 設定"パネルを開き、
  1. "プリント出力先"の"LPDサーバー"にプリンターのホスト名を
  2. "プリント出力先"の"LPDプリンター"にプリンターの装置名を
  3. "プリント・ソース"の"ホスト名"にプリンターをセットアップしているPCのホスト名を
  4. "プリント・ソース"の"ユーザー"に適当なユーザー名を
それぞれ記入し、"印刷ポート設定の表示"にチェックを入れます。印刷が安定してできるようになったらば チェックを外します。

"アイコン"タブの"タイトル"にプリンターの適当な名前を入れておきます。"ep-979a3(Generic ESP2C)"に しました。

以上で設定はすべて終わりです。

テスト印刷をします。印刷の前に、プリンターの"ジョブのアイコン表示"を開き、 "状況の変更"メニューで"保留"にしておきます。また、 "ep-979a3(Generic ESP2C) - ジョブのアイコン表示"の左肩のアイコンの"オープン"の"ポート表示"を選択すると "スプーラー - ポート表示"パネルが開き、"\PIPE\LPD0"がアイドル状態になっているのが 分かります。

まず、テキストエディターEPMから印刷します。EPMで"\AUTOEXEC.BAT"を開きそのまま、印刷してみます。 "ep-979a3(Generic ESP2C) - ジョブのアイコン表示"にスプールされたジョブが表示されます。ジョブの保留を 解除すると少し間が空き、印刷が始まります。印刷結果を見ると、印刷領域の上部が非常に狭かったので、 "プリンター・プロパティー"の"用紙サイズ"で、上下左右のマージンを1cmに設定し"プリントレイアウト"で 上マージンを30mmに、下マージンを10mmに、左右のマージンを15mmに設定し、良好な結果を得ています。

PC-DOS 2000 で遊ぶ -- その2 DOSCALLSライブラリー2020年04月29日 18:22

随分昔のことです。IBM JXを手に入れた頃、アセンブラでプログラミング に挑戦しました。8086アセンブラを理解するには、経験値が少なくて、無謀 な挑戦でした。8086マクロアセンブラーやDOSの内部構造やプログラムインタ ーフェイスの資料など、いろいろと集めていたようで、手元に残ってます。 今回はよい機会と思い、アセンブラプログラミングに再挑戦しました。

目標をDOSのファンクションコールを使ったプログラムの作成をサポート するライブラリーを作ることとしました。生でファンクションコールを使お うとすると、マニュアルを参照しながらレジスタに値を設定し"INT 21H"を 実行することになりますが、もう少し見通しのよいやり方を模索してみまし た。結果、マクロとファンクションコールのライブラリーを作り込みました。

アプリケーションからファンクションコールを使うには、マクロ呼び出し を使い、ファンクションコールライブラリーをリンク時にリンクする事にし ました。今回は、FCBを使ったファイルの操作や代替のある古いファンクショ ンコールなど、割愛した機能があります。

まずは、サンプルプログラム"xchdir"から抜き出したコードをご覧くださ い。@DosCurDisk、@DosChdir、@DosDispString、@DosExitが今回作成したマ クロの呼び出しです。これらのマクロに引数を渡すことにより、高級言語っ ぽくコードを書く事ができます。

main            PROC
                MOV     AX, SEG myData  ; setup DS
                MOV     DS, AX

                @getArgc argc
                CMP     argc, 1
                JE      main1
                @DosDispString errMsg1
                JMP     main0
main1:          
                @getArgv argc directory
                MOV     SI, OFFSET directory
                CMP     BYTE PTR [SI+1], ':'
                JNE     main2
                MOV     AL, BYTE PTR [SI]
                MOV     drive, AL
                @DosCurDisk drive
                JNC     main2
                @DosDispString errMsg2
                JMP     main0
main2:
                @DosChdir directory
                JNC     main0
                @DosDispString errMsg3
                
main0:          
                MOV     rc, 00H
                @DosExit rc
main            ENDP

マクロの引数は、アドレス渡しで統一されていますので冗長になってし まう部分がありますし、また、ライブラリーを呼び出すオーバーヘッドが生じ ますが、プログラムの見通しを良くする手段として妥当であると判断しました。

作成したファンクションコールライブラリーは、 DOSCALLS.ZIPです。 サンプルプログラムは、 SAMPLES.ZIPです。ご参照下さい。

ファイルの操作に関しては、もう一枚、ラップする必要がありますね。 少なくとも、入出力エラーを含めることと、一文字単位の入出力や行単位の 入出力は欲しいところです。実際、"typeout.asm"では、不完全ですがこれら のルーチンを作成しています。