(57)【特許請求の範囲】
【請求項１】
以下の手段を有することを特徴とするプリンタ制御装置。
（ａ）プリンタにイメージデータを印刷させるコマンドのデータ列を受け付ける受付手段と、
（ｂ）前記受付手段により受け付けられたコマンドのデータ列が所定のデータ列を含まない場合、当該コマンドのデータ列をプリンタに送信する第１の送信手段と、
（ｃ）前記受付手段により受け付けられたコマンドのデータ列が所定のデータ列を含む場合、そのそれぞれが当該所定のデータ列を含まない複数のコマンドのデータ列であって、プリンタに当該イメージデータと同じイメージデータを印刷させるものを生成する生成手段と、
（ｄ）前記生成手段により生成された複数のコマンドのデータ列をプリンタに送信する第２の送信手段。
【請求項２】
以下の手段を有することを特徴とするプリンタ制御装置。
（ａ）プリンタに送信するデータブロックを受け付ける受付手段と、
（ｂ）前記受付手段により受け付けられたデータブロックが所定のデータ列を含まない場合、当該データブロックをプリンタに送信する第１の送信手段と、
（ｃ）前記受付手段により受け付けられたデータブロックが所定のデータ列を含む場合、当該所定のデータ列を第１の部分と第２の部分とに分割し、前記第１の部分を含む第１のサブブロックと、前記第２の部分を含む第２のサブブロックとを生成する生成手段と、
（ｄ）前記生成手段により生成された前記第１のサブブロックと前記第２のサブブロックとを別々にプリンタに送信する第２の送信手段。
【請求項３】
プリンタに送信するための送信データ列が、所定のデータ列を含むか否かを判断する判断部と、
前記判断部による判断結果に基づいて、前記送信データ列が所定のデータ列を含む場合、当該所定のデータ列を含まないよう前記送信データ列を分割し複数の分割データ列群を生成する生成部であって、前記送信データ列と前記複数のデータ列群とは実質的に同じ機能を有し、
前記判断部による判断結果に基づいて、前記送信データ列または前記複数のデータ列群のいずれかをプリンタに送信する送信部とを有することを特徴とするプリンタ制御装置。
【請求項４】
請求項３記載のプリンタ制御装置において、
前記送信データ列および前記分割データ列群は、ヘッダ部とパラメータ部とを有し、
前記生成部は、前記送信データ列が有するヘッダ部を、前記分割データ列群のヘッダ部とすることを特徴とするプリンタ制御装置。
【請求項５】
請求項４記載のプリンタ制御装置において、
前記生成部は、前記送信データ列の分割数に応じて、前記分割データ列群の前記パラメータ部を生成することを特徴とするプリンタ制御装置。
【請求項６】
マトリクス状に配列される印刷データ列と、当該印刷データ列の行方向および列方向の長さを表わす長さパラメータとを有する送信データをプリンタに送信するプリンタ制御装置において、
前記印刷データ列が、所定のデータ列を含むか否かを判断する判断部と、
前記判断部による判断結果に基づいて、前記印刷データ列が前記所定のデータ列を含む場合、当該所定のデータ列が位置する行列を特定する特定部と、
前記特定部の特定結果に基づいて、前記所定のデータ列を分割すべく前記印刷データ列にダミーデータを挿入して複数の分割印刷データ列群を生成する分割部と、
前記特定部の特定結果に基づいて、前記送信データの前記長さパラメータから、前記分割印刷データ列群の各々に適合する長さパラメータ群を変換生成する変換部と、
前記判断部による判断結果に基づいて、前記分割部により生成された分割印刷データ列群と、前記変換部により変換生成された長さパラメータ群とからなる送信データ列群をプリンタに送信する送信部とを有することを特徴とするプリンタ制御装置。
【請求項７】
請求項６記載のプリンタ制御装置において、
前記分割部は、前記所定のデータ列が最下行から位置する場合を除いて、前印刷データ列にダミーデータを挿入することを特徴とするプリンタ制御装置。
【請求項８】
請求項６記載のプリンタ制御装置において、
前記分割部は、前記送信データの長さパラメータに基づいて、前記挿入すべきダミーデータの長さを決定することを特徴とするプリンタ制御装置。
【請求項９】
請求項６乃至８記載のプリンタ制御装置において、
前記分割部により分割生成された分割印刷データ列群の印刷開始位置を示すデータを生成する印刷開始位置指定部を有し、
前記送信部は、前記送信データ列群とともに、前記指定部により指定された印刷開始位置データを前記プリンタに送信することを特徴とするプリンタ制御装置。
【請求項１０】
請求項６乃至９記載のプリンタ制御装置において、
前記印刷データ列の列方向は、前記プリンタの印刷媒体搬送方向と実質的に同一であることを特徴とするプリンタ制御装置。
【請求項１１】
請求項１乃至１０記載のプリンタ制御装置において、
前記所定のデータ列は、当該プリンタのリアルタイムコマンドのデータ列であることを特徴とするプリンタ制御装置。
【請求項１２】
以下のステップを有することを特徴とするプリンタ制御方法。
（ａ）プリンタにイメージデータを印刷させるコマンドのデータ列を受け付ける受付ステップと、
（ｂ）前記受付ステップにおいて受け付けられたコマンドのデータ列が所定のデータ列を含まない場合、当該コマンドのデータ列をプリンタに送信する第１の送信ステップと、
（ｃ）前記受付ステップにおいて受け付けられたコマンドのデータ列が所定のデータ列を含む場合、そのそれぞれが当該所定のデータ列を含まない複数のコマンドのデータ列であって、プリンタに当該イメージデータと同じイメージデータを印刷させるものを生成する生成ステップと、
（ｄ）前記生成ステップにおいて生成された複数のコマンドのデータ列をプリンタに送信する第２の送信ステップ。
【請求項１３】
以下のステップを有することを特徴とするプリンタ制御方法。
（ａ）プリンタに送信するデータブロックを受け付ける受付ステップと、
（ｂ）前記受付ステップにおいて受け付けられたデータブロックが所定のデータ列を含まない場合、当該データブロックをプリンタに送信する第１の送信ステップと、
（ｃ）前記受付ステップにおいて受け付けられたデータブロックが所定のデータ列を含む場合、当該所定のデータ列を第１の部分と第２の部分とに分割し、前記第１の部分を含む第１のサブブロックと、前記第２の部分を含む第２のサブブロックとを生成する生成ステップと、
（ｄ）前記生成ステップにおいて生成された前記第１のサブブロックと前記第２のサブブロックとを別々にプリンタに送信する第２の送信ステップ。
【請求項１４】
プリンタに送信するための送信データ列が、所定のデータ列を含むか否かを判断する判断ステップと、
前記判断ステップによる判断結果に基づいて、前記送信データ列が所定のデータ列を含む場合、当該所定のデータ列を含まないよう前記送信データ列を分割し複数の分割データ列群を生成する生成ステップであって、前記送信データ列と前記複数のデータ列群とは実質的に同じ機能を有し、
前記判断ステップによる判断結果に基づいて、前記送信データ列または前記複数のデータ列群のいずれかをプリンタに送信する送信ステップとを有することを特徴とするプリンタ制御方法。
【請求項１５】
請求項１４記載のプリンタ制御方法において、
前記送信データ列および前記分割データ列群は、ヘッダ部とパラメータ部とを有し、
前記生成ステップは、前記送信データ列が有するヘッダ部を、前記分割データ列群のヘッダ部とすることを特徴とするプリンタ制御方法。
【請求項１６】
請求項１５記載のプリンタ制御方法において、
前記生成ステップは、前記送信データ列の分割数に応じて、前記分割データ列群の前記パラメータ部を生成することを特徴とするプリンタ制御方法。
【請求項１７】
マトリクス状に配列される印刷データ列と、当該印刷データ列の行方向および列方向の長さを表わす長さパラメータとを有する送信データをプリンタに送信するプリンタ制御方法において、
前記印刷データ列が、所定のデータ列を含むか否かを判断する判断ステップと、
前記判断ステップにおける判断結果に基づいて、前記印刷データ列が前記所定のデータ列を含む場合、当該所定のデータ列が位置する行列を特定する特定ステップと、
前記特定ステップの特定結果に基づいて、前記所定のデータ列を分割すべく前記印刷データ列にダミーデータを挿入して複数の分割印刷データ列群を生成する分割ステップと、
前記特定ステップの特定結果に基づいて、前記送信データの前記長さパラメータから、前記分割印刷データ列群の各々に適合する長さパラメータ群を変換生成する変換ステップと、
前記判断ステップによる判断結果に基づいて、前記分割ステップにより生成された分割印刷データ列群と、前記変換ステップにより変換生成された長さパラメータ群とからなる送信データ列群をプリンタに送信する送信ステップとを有することを特徴とするプリンタ制御方法。
【請求項１８】
請求項１７記載のプリンタ制御方法において、
前記分割ステップは、前記所定のデータ列が最下行から位置する場合を除いて、前印刷データ列にダミーデータを挿入することを特徴とするプリンタ制御方法。
【請求項１９】
請求項１７記載のプリンタ制御方法において、
前記分割ステップは、前記送信データの長さパラメータに基づいて、前記挿入すべきダミーデータの長さを決定することを特徴とする印刷制御方法。
【請求項２０】
請求項１７乃至１９記載のプリンタ制御方法において、
前記分割ステップにより分割生成された分割印刷データ列群の印刷開始位置を示すデータを生成する印刷開始位置指定ステップを有し、
前記送信ステップは、前記送信データ列群とともに、前記指定ステップにより指定された印刷開始位置データを前記プリンタに送信することを特徴とするプリンタ制御方法。
【請求項２１】
請求項１７乃至２０記載のプリンタ制御方法において、
前記印刷データ列の列方向は、前記プリンタの印刷媒体搬送方向と実質的に同一であることを特徴とするプリンタ制御方法。
【請求項２２】
請求項１２乃至２１記載のプリンタ制御方法において、
前記所定のデータ列は、当該プリンタのリアルタイムコマンドのデータ列であることを特徴とするプリンタ制御方法。
【請求項２３】
請求項１２乃至２２いずれか1項に記載のプリンタ制御方法を実現するためのコンピュータプログラムを格納したコンピュータ読み取り可能な情報記録媒体。
【請求項２４】
請求項２３記載の情報記録媒体において、
前記情報記録媒体は、コンパクトディスク、フロッピーディスク、ハードディスク、光磁気ディスク、ディジタルビデオディスク、磁気テープ、または、半導体メモリであることを特徴とする情報記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プリンタ制御装置、プリンタ制御方法および情報記録媒体に関する。特に、リアルタイムコマンドの処理を行うプリンタに対してリアルタイムコマンドのデータ列と同じデータ列を含むようなイメージデータを印刷する場合であっても、プリンタの誤動作を防止することができるプリンタ制御装置、プリンタ制御方法およびこれらを実現するプログラムを記録した情報記録媒体に関する。
【０００２】
【従来の技術】
プリンタ（印刷装置）は、紙などの印刷媒体に文字や図形を印刷するための装置として広く普及している。このようなプリンタはホストコンピュータ（情報処理装置）に接続され、ホストコンピュータは、文字や図形を印刷するためのデータ列や、プリンタ自体を制御するためのデータ列をプリンタに送信する。したがって、このようなホストコンピュータは、プリンタ制御装置として働く。
【０００３】
ホストコンピュータがプリンタに送信するデータは、ビット列として見ることもバイト列として見ることもできる。特に、プリンタにおいては、８ビット（１バイト）単位でコマンド体系が構築され、いずれのコマンドも８の倍数のビット数、すなわち、あるバイト数からなるデータ列によって構築されることが多い。
【０００４】
文字を印刷するためのデータ列としては、ＡＳＣＩＩコードと同じバイト値を使用する一方で、画像の印刷やユーザ定義フォントの定義においては、バイト列により白黒（すなわち、画像あるいはフォントを形成する各点を印字するか否か）を表す手法が使用されている。また、画像の印刷においては、画像の各点の色を各バイトに含まれる複数のビットによって表す手法もある。このような画像やフォントを表すデータをイメージデータという。
【０００５】
プリンタはインターフェース部を介して、ホストコンピュータから送信される１バイトもしくは数バイトのデータを受信すると、受信割り込みが発生し、受信割り込み処理が起動される。受信割り込み処理では、以下の処理が行われる。
（１）受信したデータにリアルタイムコマンドが含まれるか否かを判別し、含まれている場合には、そのリアルタイムコマンドに対応する処理を直ちに実行する。
（２）受信したデータをＲＡＭ（Random Access Memory）で構成される受信バッファに記憶する。
【０００６】
このように、通常のコマンドや印刷データは、受信バッファに格納された後ＦＩＦＯ（First-In-First-Out）的に処理されるのに対し、リアルタイムコマンドは、受信バッファに格納される前に処理される緊急性の高いコマンドであって、通常のコマンドや印刷データに優先して処理されるコマンドである。
上記の受信割り込み処理が終了すると通常処理に戻る。通常処理では、受信バッファに記憶されたデータ列を解釈して、ＲＡＭに用意されたプリントバッファに印刷イメージを展開する。印刷イメージは、印刷領域のどの部分を白くし、どの部分を黒くするか、すなわち、どのように印刷ヘッドを駆動するかを１と０のビット値で表現するのが一般的である。１パス分（例えば１行分）の印刷イメージが展開できたら、プリントバッファの内容にしたがって印刷ヘッドを駆動し、文字や図形を印刷する。
【０００７】
受信バッファから読み出されたデータ列がリアルタイムコマンドに相当するデータ列である場合は、受信割り込み処理において当該コマンドに対応する処理がすでに行われているため、通常処理においては単に読み飛ばされる。
【０００８】
さて、従来からリアルタイムコマンドとして、以下のようなものが使用されている。なお、以下のデータのバイト列は、ＡＳＣＩＩコードのニーモニックを使用して表示している。
・「DLE EOT NUL 」…プリンタの状態をリアルタイムにホストコンピュータに送信する。
・「DLE EOT BEL 」…プリンタのインクの状態をリアルタイムにホストコンピュータに送信する。
・「DLE EOT BS  」…ＭＩＣＲ（Magnetic Ink Character Recognition）の状態をリアルタイムにホストコンピュータに送信する。
・「DLE ENQ 」…プリンタに対するリアルタイム要求。
・「DLE DC4 SOH 」…指定パルスをリアルタイムに出力する。
【０００９】
ここで、各ニーモニックは十六進数表記で以下のように定義されるものであり、「0x」は十六進数を意味する接頭辞である。
0004320905.tif 000002
上記のとおりリアルタイムコマンドのデータ列には、NUL、SOH、EOT、ENQ、BEL、BS、DLE、DC4というバイト値以外は含まれない。
【００１０】
一方で、従来から使用されている通常コマンドの一つである画像印刷コマンドは以下のようなフォーマットを有する。
・「ESC 0x6d  n d1 … dn」
これは、高さ８ドット、行方向の幅「n」ドットの画像を印刷するコマンドである。「d1 … dn」のそれぞれは、高さ方向に８つ並んだドットのいずれを黒くし、いずれを白くするかを８ビットの値で現わす。すなわちd1 … dnがイメージデータのデータ列である。以下、この印刷コマンドのうち、nを長さパラメータ、nバイト長のデータ列であるd1 … dnをイメージデータパラメータと呼ぶ。これらのパラメータは、任意のバイト値をとることができる。
【００１１】
【発明が解決しようとする課題】
しかしながら、イメージデータのデータ列の中に、リアルタイムコマンドと同じデータ列が偶然に現われることがある。したがって、本来リアルタイムコマンドと解釈すべきでない場合であっても、上記のように受信割り込み処理において、リアルタイムコマンドに対応する処理が実行されてしまう、という可能性があった。
【００１２】
すなわち、ホストコンピュータが意図しないタイミングで意図しないリアルタイムコマンドの処理が実行されるため、例えば、ホストコンピュータ側でプリンタからのステータスデータを受信する準備がされておらず、プリンタとの整合性がとれなくなってしまうという可能性があった。
【００１３】
このため、リアルタイムコマンドのデータ列と同じデータ列を含むようなイメージデータのデータ列が与えられても、リアルタイムコマンドの処理は実行せずに、当該イメージデータを印刷したものと同じ結果が得られるようにしたい、という要望があった。
【００１４】
プリンタに対するコマンド体系を変更・拡張して、このような事態に対処する方策もありうる。しかしながら、既存のプリンタの資源を再利用できるような形でリアルタイムコマンドのデータ列とそれ以外のデータ列とを区別して処理させたい、という要望も大きい。
【００１５】
本発明は、以上のような問題を解決するためになされたもので、リアルタイムコマンドの処理を行うプリンタに対してリアルタイムコマンドのデータ列と同じデータ列を含むようなイメージデータを印刷させる場合であっても、プリンタの誤動作を防止することができるプリンタ制御装置、プリンタ制御方法およびこれらを実現するプログラムを記録した情報記録媒体を提供することを目的とする。
【００１６】
【課題を解決するための手段】
以上の目的を達成するため、本発明のプリンタ制御装置は、受付手段と、第１の送信手段と、生成手段と、第２の送信手段とを有し、受付手段は、プリンタにイメージデータを印刷させるコマンドのデータ列を受け付け、第１の送信手段は、受付手段により受け付けられたコマンドのデータ列が所定のデータ列を含まない場合、当該コマンドのデータ列をプリンタに送信し、生成手段は、受付手段により受け付けられたコマンドのデータ列が所定のデータ列を含む場合、そのそれぞれが当該所定のデータ列を含まない複数のコマンドのデータ列であって、プリンタに当該イメージデータと同じイメージデータを印刷させるものを生成し、第２の送信手段は、生成手段により生成された複数のコマンドのデータ列をプリンタに送信する。
【００１７】
また本発明のプリンタ制御装置は、受付手段と、第１の送信手段と、生成手段と、第２の送信手段とを有し、受付手段は、プリンタに送信するデータブロックを受け付け、第１の送信手段は、受付手段により受け付けられたデータブロックが所定のデータ列を含まない場合、当該データブロックをプリンタに送信し、生成手段は、受付手段により受け付けられたデータブロックが所定のデータ列を含む場合、当該所定のデータ列を第１の部分と第２の部分とに分割し、第１の部分を含む第１のサブブロックと、第２の部分を含む第２のサブブロックとを生成し、第２の送信手段は、生成手段により生成された第１のサブブロックと第２のサブブロックとを別々にプリンタに送信する。
【００１８】
これらの場合において、本発明のプリンタ制御装置が処理する所定のデータ列は、当該プリンタのリアルタイムコマンドのデータ列とすることができる。
【００１９】
また、本発明のプリンタ制御装置は、プリンタに送信するための送信データ列（例えばビットイメージ印刷コマンド）が、所定のデータ列（例えばリアルタイムコマンドのデータ列）を含むか否かを判断する判断部と、判断部による判断結果に基づいて、送信データ列が所定のデータ列を含む場合、当該所定のデータ列を含まないよう送信データ列を分割し複数の分割データ列群を生成する生成部であって、送信データ列と複数のデータ列群とは実質的に同じ機能を有し、判断部による判断結果に基づいて、送信データ列または複数のデータ列群のいずれかをプリンタに送信する送信部とを有することを特徴とする。
【００２０】
この場合において、送信データ列および分割データ列群は、ヘッダ部とパラメータ部とを有し、生成部は、送信データ列が有するヘッダ部を、分割データ列群のヘッダ部とし、また、送信データ列の分割数に応じて、分割データ列群のパラメータ部を生成することにより、複数のデータ列群に、送信データ列が有する機能と実質的に同じ機能を持たせることが容易に実現できる。
【００２１】
本発明によれば、プリンタにデータを送信する前にリアルタイムコマンドのパターンをホスト装置側で検出し、当該パターンを跨るように複数のブロックに分割した後送信することができるので、意図しないリアルタイムコマンドの実行による弊害を未然に防止することができる。
【００２２】
また、本発明のプリンタ制御装置は、マトリクス状に配列される印刷データ列と、当該印刷データ列の行方向および列方向の長さを表わす長さパラメータとを有する送信データをプリンタに送信するプリンタ制御装置において、印刷データ列が、所定のデータ列（例えば、当該プリンタを制御する特定のコマンドのデータ列と同様のデータ列）を含むか否かを判断する判断部と、判断部による判断結果に基づいて、印刷データ列が所定のデータ列を含む場合、当該所定のデータ列が位置する行列を特定する特定部と、特定部の特定結果に基づいて、所定のデータ列を分割すべく印刷データ列にダミーデータを挿入して複数の分割印刷データ列群を生成する分割部と、特定部の特定結果に基づいて、送信データの長さパラメータから、分割印刷データ列群の各々に適合する長さパラメータ群を変換生成する変換部と、判断部による判断結果に基づいて、分割部により生成された分割印刷データ列群と、変換部により変換生成された長さパラメータ群とからなる送信データ列群をプリンタに送信する送信部とを有することを特徴とする。
【００２３】
本発明によれば、マトリックス状に配列されるイメージデータの中にリアルタイムコマンドと同じデータ列があっても、ダミーデータを挿入してこれを分割した後プリンタに送信することにより、プリンタの誤動作を防止することができる。
【００２４】
この場合において、所定のデータ列がイメージデータのマトリックス内の最下行から配列される場合は、ダミーデータを挿入することなく、所定のデータ列と同じデータ列の先頭バイトを含む列までのデータと、それ以降のデータとに分割することにより、同様の効果を得ることができる。
【００２５】
また、挿入すべきダミーデータの長さは、送信データの長さパラメータに基づいて決定することが望ましい。また、分割に応じて分割印刷データ列群の印刷開始位置を示すデータを生成し、送信データ列群とともにプリンタに送信することが望ましい。これにより、プリンタの誤動作を防止するとともに所望の印刷結果を得ることができる。
【００２６】
なお、印刷データマトリックスの列方向は、プリンタの印刷媒体搬送方向と実質的に同一にすることができる。
【００２７】
また、本発明は、プリンタ制御方法としても把握することが適当であり、その場合においても同様の作用、効果を奏するものである。
【００２８】
本発明のプリンタ制御装置、プリンタ制御方法およびこれらを実現するプログラムをコンパクトディスク、フロッピーディスク、ハードディスク、光磁気ディスク、ディジタルビデオディスク、磁気テープ、半導体メモリなどの情報記録媒体に記憶することができる。このようなプログラムを「プリンタドライバ」と呼ぶ。
【００２９】
さらに、本発明のプリンタ制御装置を制御し、プリンタ制御方法を実現するためのプログラムを、汎用コンピュータで実行することにより、当該汎用コンピュータを本発明のプリンタ制御装置とすることができ、プリンタ制御方法を実現することができる。
【００３０】
また、本発明のプログラムをＷＷＷ（World Wide Web）のサーバコンピュータに配置し、ここからオペレータが適宜ダウンロードして情報処理装置に記憶させることにより、プログラムを更新して実行させることができる。
【００３１】
【発明の実施の形態】
以下に本発明の一実施形態を説明する。なお、以下に説明する実施形態は説明のためのものであり、本願発明の範囲を制限するものではない。したがって、当業者であればこれらの各要素もしくは全要素をこれと均等なものに置換した実施形態を採用することが可能であり、これらの実施形態も本願発明の範囲に含まれる。
【００３２】
以下では、本発明のプリンタ制御装置により制御されるプリンタ（従来から利用されているプリンタを含む）の概要を説明してから、本発明のプリンタ制御装置の説明を加えることとする。
【００３３】
（プリンタの実施例）
図１に、本発明のプリンタ制御装置（ホストコンピュータ）が制御するプリンタの一実施形態のブロック構成図を示す。
【００３４】
プリンタ１０１は、インターフェース１０２を介してホストコンピュータ１２０に接続されている。ホストコンピュータ１２０が送信したデータ列をインターフェース１０２を介して受信すると、ＣＰＵ（Central Processing Unit；中央処理ユニット）１０３に受信割り込みが発生し、受信割り込み処理が起動される。前述のとおり、受信割り込み処理においてＣＰＵ  １０３は、受信したデータ列にリアルタイムコマンドが含まれているかを判断し、含まれている場合はこれに対応するリアルタイム処理を実行する。さらに、受信割り込み処理では、ＲＡＭ  １０４に設けられた受信バッファ１１１に、受信したデータ列を記憶する。受信割り込み処理が終了すると、ＣＰＵ  １０３の制御は通常処理に戻る。
【００３５】
通常処理では、ＣＰＵ  １０３は、ＲＡＭ  １０４の受信バッファ１１１に記憶されたデータ列を印刷コマンドや印刷データ、プリンタ設定コマンドとして解釈し、フォントを記憶するＲＯＭ（Read Only Memory）１０５からフォント形状を取得したり、イメージデータを生成したりして、ＲＡＭ  １０４内に設けられたプリントバッファ１１２に印刷イメージを展開する。
【００３６】
さらに、プリントバッファ１１２に展開された印刷イメージが所定の量、例えば１行に達した場合などに、当該印刷イメージにしたがって印刷機構１０６を駆動して、紙などの印刷媒体に文字や図形を印刷する。
【００３７】
また、受信バッファ１１１に記憶されたデータ列がフォント定義コマンドである場合には、ＲＡＭ  １０４内に当該フォントの定義を記憶する。ＲＯＭ  １０５がＥＥＰＲＯＭ（Electrically Erasable Programmable ROM）やフラッシュメモリである場合には、フォント定義コマンドにしたがって、ＲＯＭ  １０５の内容を更新することも可能である。
【００３８】
また、ＲＡＭ  １０４には、受信割り込み処理で使用する現在のモードを記憶する領域１１３が設けられている。これにより、リアルタイムコマンドの途中を受信しているのか、それともそれ以外のデータを受信しているのかがわかる。
【００３９】
（プリンタの受信割り込み処理）
図２は、図１に示すプリンタ１０１の受信割り込み処理の流れの一実施形態を示すフローチャートである。この受信割り込み処理は、ホストコンピュータ１２０が送信するデータ列をプリンタ１０１のインターフェース１０２が受信する際に起動される。なお、以下では、インターフェース１０２が１バイトのデータを受信するごとに受信割り込みが発生する実施形態について説明するが、受信割り込みが１以上の任意のバイト数のデータを受信するごとに起動される場合であっても同様の制御が可能であり、当該実施形態も本発明の範囲に含まれる。
【００４０】
上述のように、本受信割り込み処理は、ホストコンピュータ１２０が送信するデータをプリンタ１０１のインターフェース１０２が受信する際に起動される。
【００４１】
受信割り込み処理が起動されると、まず、ＣＰＵ  １０３は、インターフェース１０２が受信した１バイトのデータをＲＡＭ  １０４内の受信バッファ１１１に記憶する（ステップＳ２０１）。受信バッファ１１１は、リングバッファとして構成するのが一般的である。
【００４２】
次に、ＲＡＭ  １０４のモード領域１１３に記憶された現在の受信割り込みモードを調べる（ステップＳ２０２）。受信割り込みモードの値によって、現在リアルタイムコマンドの途中を受信しているのか否かが示される。
【００４３】
さらに、ステップＳ２０１において受信されたデータの値に応じてＲＡＭ  １０４のモード領域１１３に記憶される受信割り込みモードの値を図３に示す状態遷移図にしたがって更新するとともに、必要があれば対応する処理を実施し（ステップＳ２０３）、本受信割り込み処理を終了する。
【００４４】
図３は、受信割り込みにおける状態遷移を示す説明図である。この状態遷移図は、前述のリアルタイムコマンドのデータ列の体系から決まるものである。
【００４５】
モードＡは、現在はリアルタイムコマンド以外のコマンドを解釈していることを意味するモードである。モードＡにいる場合、ステップＳ２０１において受信したデータの値が「DLE」であれば、モードＢに移行する。
【００４６】
モードＢは、現在はリアルタイムコマンドの１バイト目（DLE）を受信していることを意味するモードである。モードＢにいる場合、ステップＳ２０１において受信したデータの値に応じて、以下のように遷移する。
・「EOT」である場合は、モードＣに移行する。
・「ENQ」である場合は、プリンタ１０１のリアルタイム要求に対応する処理を実行して、モードＡに移行する。
・「DC4」である場合は、モードＤに移行する。
・これ以外である場合は、受信しているデータ列はリアルタイムコマンドのデータ列ではないことになるので、モードＡに移行する。
【００４７】
モードＣは、現在は「DLE EOT」で始まるリアルタイムコマンドを受信中であることを意味するモードである。モードＣにいる場合、ステップＳ２０１において受信したデータの値に応じて、以下のように遷移する。
・「NUL」である場合は、プリンタ１０１の状態をホストコンピュータ１２０にリアルタイム送信し、モードＡに移行する。
・「BEL」である場合は、プリンタ１０１の印刷機構１０６に含まれるインクの状態をホストコンピュータ１２０にリアルタイム送信し、モードＡに移行する。
・「BS」である場合は、プリンタ１０１のＭＩＣＲの状態をホストコンピュータ１２０にリアルタイム送信し、モードＡに移行する。
・これ以外である場合は、受信しているデータ列はリアルタイムコマンドのデータ列ではないことになるので、モードＡに移行する。
【００４８】
モードＤは、現在は「DLE DC4」で始まるリアルタイムコマンドを受信中であることを意味するモードである。モードＤにいる場合、ステップＳ２０１において受信したデータの値に応じて、以下のように遷移する。
・「SOH」である場合は、指定パルスのリアルタイム出力を実行し、モードＡに移行する。
・これ以外である場合は、受信しているデータ列はリアルタイムコマンドのデータ列ではないことになるので、モードＡに移行する。
【００４９】
比較的簡単な状態遷移の処理であれば、受信割り込み処理に必要な時間を短時間ですませることができる。
【００５０】
（プリンタの通常処理）
通常処理は、プリンタ１０１が受信し、受信バッファ１１１に記憶されたデータを解釈して印刷する処理である。図４は、図１に示すプリンタ１０１の通常処理の制御の流れを示すフローチャートである。通常処理を行っている途中であっても、前述の受信割り込み処理が割り込みによって起動されることがありうる。
【００５１】
なお、ＣＰＵ  １０３は、受信バッファ１１１に処理していないデータが残っている間は当該データを取得し、残っていない場合には、前述の受信割り込み処理により受信バッファ１１１にデータが記憶されるまで待機する。このようなコルーチン的な処理が実行されるが、以下の説明では、簡単のため、上記の処理を１回行って１バイトのデータを受信バッファ１１１から取得する場合と、複数回行って複数バイトのデータを受信バッファ１１１から取得する場合とを合わせて、「受信バッファからデータを取得」と称することとする。
【００５２】
まず、ＣＰＵ  １０３は、受信バッファ１１１からデータを取得し（ステップＳ４０１）、そのデータの種類を調べる（ステップＳ４０２）。
【００５３】
このデータがリアルタイムコマンドのデータ列であると判断された場合（ステップＳ４０２；リアルタイムコマンド）、これをスキップしてステップ４０１に戻る。すでに、前述した受信割り込み処理においてリアルタイムコマンドに対応するリアルタイム処理は実行済みだからである。
【００５４】
一方、それ以外のコマンド、すなわち、通常処理コマンドのデータ列であると判断された場合（ステップＳ４０２；通常コマンド）、当該コマンドに対応する通常処理を実行し（ステップＳ４０３）、ステップＳ４０１に戻る。
【００５５】
通常処理には、例えば、文字や図形の印刷、画像の印刷、フォントの登録、プリンタ１０１の設定などが含まれる。本発明は、特に、画像の印刷およびフォントの登録において、当該イメージのデータがプリンタ１０１に対してバイナリ表現で転送される場合に対処するものである。
【００５６】
本発明のプリンタ制御装置は、このようなすでに普及しているプリンタを制御することができる。
【００５７】
（プリンタ制御装置の実施例）
図５には、本発明のプリンタ制御装置（ホストコンピュータ）の一実施形態のブロック構成図を示す。
【００５８】
本発明のホストコンピュータ１２０は、ＣＰＵ  ５０１によって制御される。ホストコンピュータ１２０に電源が投入されると、ＣＰＵ  ５０１は、ＲＯＭ  ５０２内の所定の場所に記憶されたＩＰＬ（Initial Program Loader）を実行し、処理を開始し、さらに、ハードディスク、フロッピーディスク、ＣＤ−ＲＯＭ（Compact Disk ROM）などの不揮発性記憶装置５０３に記憶されたプログラムを実行することができる。プログラムの実行の際には、ＲＡＭ  ５０４を一時的な記憶装置として用いる。
【００５９】
文字や図形を印刷するアプリケーションプログラムを実行する際には、印刷コマンドのデータ列をインターフェース５０５を介してプリンタに送信する。
【００６０】
さらに、ホストコンピュータ１２０は、図示しないキーボードやマウスなどの入力装置、図示しないディスプレイなどの表示装置を備えることができる。
【００６１】
ホストコンピュータ１２０で動作するＯＳ（Operating System；オペレーティングシステム）は、これに接続されたハードウェア、例えばプリンタ１０１を資源として扱い、複数のアプリケーションから共用する場合の資源管理を行う。このような資源管理を行うためのプログラムが前述のプリンタドライバである。
【００６２】
ホストコンピュータにおいてこのようなプリンタドライバがＯＳの一部として動作する場合、当該ホストコンピュータを本発明のプリンタ制御装置と見ることができる。
【００６３】
アプリケーションからは、ＯＳに対するシステムコール呼び出しとしてイメージデータがプリンタドライバに送られ、プリンタドライバはこれを受け付ける。したがって、ＣＰＵ  ５０１は、ＲＡＭ  ５０４と共働して受付手段として機能する。
【００６４】
また、ＣＰＵ  ５０１は、ＲＡＭ  ５０４に記憶されたイメージデータを調べて、このデータを処理し、インターフェース５０５を介してプリンタ１０１に送信する。したがって、ＣＰＵ  ５０１は、ＲＡＭ  ５０４、インターフェース５０５と共働して、第１の送信手段、生成手段、第２の送信手段として機能する。同様に、判断部、生成部、送信部として、また、特定部、分割部、変換部、印刷開始位置指定部として機能する。
【００６５】
また、不揮発性記憶装置５０３は、プログラム（プリンタドライバ）を記録した情報記録媒体として機能する。
【００６６】
図６は、図５に示すプリンタ制御装置で実行されるプリンタ制御方法の処理の流れを示すフローチャートである。
【００６７】
本発明のプリンタ制御方法は、ＯＳが管理するアプリケーションが動作して、ＯＳに対して印刷を依頼するシステムコールを呼び出すことによって起動する。また、プリンタドライバ内部のサブルーチン処理として起動される態様もありうる。
【００６８】
本処理が開始されると、ＣＰＵ  ５０１は、当該呼び出しで指定された印刷したい処理に対応するデータを記憶するＲＡＭ  ５０４内のアドレスと、当該データの大きさを調べる（ステップＳ６０１）。
【００６９】
次に、ステップＳ６０１で取得したアドレスから順にデータを取得し（ステップＳ６０２）、当該データがどのような処理に対応するかを調べる（ステップＳ６０３）。
【００７０】
そのデータ列が、画像印刷コマンドであった場合（ステップＳ６０３；画像印刷）、当該画像印刷コマンドのパラメータ部に前述のリアルタイムコマンドのデータ列と同じものが含まれるか否かを調べる（ステップＳ６０４）。例えば、画像印刷コマンドとして上述のような「ESC 0x6d n d1…dn」の形式のデータが指定されている場合には、そのパラメータ部「n d1…dn」に前述のリアルタイムコマンドのデータ列と同じものが含まれるか否かを調べる。
【００７１】
含まれない場合には、その印刷コマンドのデータ列をプリンタ１０１に送信して（ステップＳ６０５）、ステップＳ６０９に進む。
【００７２】
含まれる場合には、以下に説明する変換処理を行い、その印刷コマンドのデータ列を複数に分割して新たな印刷コマンドのデータ列を生成する（ステップＳ６０６）。
【００７３】
さらに、生成された新たな印刷コマンドのデータ列のそれぞれについて、ステップＳ６０４〜ステップＳ６０６の処理を再帰的に行うことによりすべてのデータ列を処理して（ステップＳ６０７）、ステップＳ６０９に進む。
【００７４】
一方、ステップＳ６０３において、画像印刷コマンド以外であった場合（ステップＳ６０３；その他）、当該コマンドに対応する処理を実行し（ステップＳ６０８）、ステップＳ６０９に進む。
【００７５】
さらに、システムコールなどで指定されたデータ列をすべて処理したか調べ（ステップＳ６０９）、すべて処理した場合（ステップＳ６０９；Ｙｅｓ）、本処理を終了する。まだ処理していないデータ列が残っている場合は、ステップＳ６０２に戻る。
【００７６】
以下、上述の画像印刷コマンド「ESC 0x6d n d1…dn」を例に、ステップＳ６０６における分割生成変換処理の第１の実施形態について説明する。本実施形態では、リアルタイムコマンドのデータ列と同じデータ列が、画像印刷コマンドに含まれる場合は、以下の２通りの可能性がある。
（１）長さパラメータから当該リアルタイムコマンドのデータ列と同じデータ列が始まる場合。
（２）イメージデータパラメータに当該リアルタイムコマンドのデータ列と同じデータ列が含まれる場合。
【００７７】
このそれぞれについて、分割生成変換の処理を説明する。まず、長さパラメータからリアルタイムコマンドのデータ列と同じデータ列が始まる場合であるが、これは、長さパラメータがバイト値DLE=0x10=16の場合、すなわち、画像イメージが高さ８ドット、行方向の幅１６ドットの場合である。この場合、行方向の幅の和が１６になるような２つの画像印刷コマンドに分割すればよい。例えば、指定された印刷コマンドが以下のようなものである場合、
ESC 0x6d 16 d1 d2 d3 … d16
次に示す２つの印刷コマンドに分割することができる。
ESC 0x6d 1 d1
ESC 0x6d 15 d2 d3 … d16
ここでは、まず幅１ドットだけ画像イメージd1を印刷し、次に１５ドット幅だけ画像イメージd2 d3 … d16を印刷するように、画像印刷コマンドを分割している。その他、和が１６となるような任意の分割が考えられる。例えば、以下のように分割してもよい。
ESC 0x6d 2 d1 d2
ESC 0x6d 14 d3 … d16
このような分割生成変換処理により、長さパラメータからリアルタイムコマンドのデータ列と同じデータ列が始まらないようにすることができる。
【００７８】
次に、イメージデータパラメータにリアルタイムコマンドのデータ列と同じデータ列が含まれる場合について説明する。例えば、以下のような場合である。
ESC 0x6d (n+m+2) d1…dn DLE ENQ e1…em
ここでは、d1…dn DLE ENQ e1…em が長さ(n+m+2) バイトのイメージデータパラメータになっている。このような場合は、以下に示すように、リアルタイムコマンドのデータ列の途中で、画像印刷コマンドを分割すればよい。
ESC 0x6d (n+1) d1…dn DLE
ESC 0x6d (m+1) ENQ e1…em
まず、幅(n+1)ドットについて画像d1…dn DLEを印刷し、次に、幅(m+1)ドットについて画像ENQ e1…emを印刷するように分割することができる。
【００７９】
これらの分割を繰り返すことにより、リアルタイムコマンドのデータ列が現れないように、画像印刷コマンドを同等の画像が印刷できる複数の画像印刷コマンドに変換することができる。
【００８０】
次に、他の画像印刷コマンドを例に分割生成変換処理の第２の実施形態について説明する。本例の画像印刷コマンドは、以下のようなフォーマットを有する。
【００８１】
「ESC 0x2a m n d1 ・・・ dk」
ここで、mは表１に示すとおり、高さ（縦）方向のドット数を指定するとともに、高さ（縦）および幅（横）方向の印刷ドット密度（単位DPI：Dots Per Inch）を指定するパラメータである。
【００８２】
【表１】
0004320905.tif 000003
【００８３】
ｎは幅（横）方向のドット数を指定するパラメータである。また、kは、当該画像印刷コマンドにより送信されるイメージデータの総数を表しており、例えば、m=0、1の場合は高さ方向のドット数が８ドット（１バイト相当）であるのでk=nバイト、m=32、33の場合は高さ方向のドット数が２４ドット（３バイト相当）であるのでk=3nバイト、m=80、81の場合は高さ方向のドット数が４８ドット（６バイト相当）であるのでk=6nバイトとなる。なお、イメージパラメータd1 ・・・ dkは列（高さ）方向から行（幅）方向に順に並べられるものである（図８参照）。
【００８４】
本例の画像印刷コマンドに、リアルタイムコマンドのデータ列と同じデータ列が含まれる可能性は、上記と同様の２つの場合である。すなわち、（１）長さパラメータｎからリアルタイムコマンドのデータ列と同じデータ列が始まる場合と、（２）イメージデータパラメータd1 ・・・ dkにリアルタイムコマンドのデータ列と同じデータ列が含まれる場合である。
【００８５】
（１）長さパラメータｎからリアルタイムコマンドのデータ列と同じデータ列が始まる場合
これは、上記第１の実施形態と同様に長さパラメータｎがバイト値DLE=0x10=16の場合であって、上述の第１の実施形態で示した方法と同様にして、少なくとも２つの画像印刷コマンドに分割すればよい。
【００８６】
（２）イメージデータパラメータd1 ・・・ dkにリアルタイムコマンドのデータ列と同じデータ列が含まれる場合
本例の場合、印刷ドット密度パラメータｍの指定により複数のバイト列、すなわち３バイトまたは６バイトのデータ列が並ぶ場合がある。したがって、列の途中でイメージデータを分割する必要が生ずる。
【００８７】
この場合の分割生成変換処理の流れを図７および図８を参照して説明する。図７は、本発明の第2の実施形態に係る分割生成変換処理の流れを示すフローチャートである。また、図８は、本発明の第2の実施形態に係る分割生成変換処理におけるデータ構造を視覚的に表わした模式図である。
【００８８】
図６に示したステップＳ６０４においてリアルタイムコマンドと同様のデータ列が発見された場合、画像印刷コマンドのパラメータｍで指定された縦方向のドット数（バイト数）に相当するダミーデータ（例えばＮＵＬデータのような空白のデータ）を、リアルタイムコマンドと同様のデータ列の１バイト目と２バイト目のデータ間に挿入する（ステップＳ７０１）。例えば、図８（Ａ）に示すように、ｍ＝３２（縦３バイト）のとき、リアルタイムコマンドと同様のデータ列が、ある列（（ｊ−１）列）の２行目から存在する場合、図８（Ｂ）に示すように、１バイト目（ＲＴＣ１）と２バイト目（ＲＴＣ２）の間にダミーデータを３バイト分挿入する。なお、イメージデータの総数は、挿入したダミーデータ分、すなわち１列分だけ増えることになる。したがって、横方向のドット数がｎであった場合、ダミーデータ挿入後は（ｎ＋１）ドットとなり、全体のデータ数は３（ｎ＋１）バイトとなる。
【００８９】
次に、リアルタイムコマンドと同様のデータ列の１バイト目ＲＴＣ１を含むデータ列を最後列とする前段のデータ列と、その２バイト目ＲＴＣ２を含むデータ列または挿入したすべてのダミーデータを含む列のいずれかを最前列とする後段のデータ列とに分割する（ステップＳ７０２）。この様子を図８（Ｃ）に示す。
【００９０】
このとき、画像印刷コマンド「ＥＳＣ ＊ ３２ ｎ d(1) ・・・ RTC1 RTC2 ・・・ d(3n)」は、前記ステップS７０２における分割位置に応じて、長さパラメータｎを変換生成し以下の二つのコマンドに分割されることとなる。
【００９１】
前段：ESC * 32 (j-1) d1 ・・・ d(3j-5) RTC1 dummy1
後段：ESC * 32 (n-j+2) dummy2 dummy3 RTC2 d(3j+1) ・・・ d(3(n+1))
ここで、(j-1)が前段のデータの長さパラメータ、(n-j+2)が後段のデータの長さパラメータである。
【００９２】
そして、ダミーデータを挿入することにより１列分（１ドット分）行方向に移動した後段のデータ列の印刷位置を、例えば、印刷位置指定コマンドにより補正し（ステップＳ７０３）、前段のデータ列の最後列と後段のデータ列の最前列とが重なるようにして印刷を実行すればよい。
【００９３】
以上のように、リアルタイムコマンドのデータ列と同様のデータ列がイメージデータの中に存在する場合には、ダミーデータを挿入して当該イメージデータを分割するとともに、長さパラメータと印刷開始位置を補正することにより所望の印刷結果を得ることができる。
【００９４】
なお、リアルタイムコマンドと同様のデータ列が最下行から、例えば、上記図８の例ではRTC１が３行目から位置する場合は、挿入したすべてのダミーデータが後段のデータ列の最前列に位置することになる。したがって、必ずしもダミーデータを用いる必要はなく、単にRTC1を含む列とRTC2を含む列との間でイメージデータを分割することもできる。この場合は印刷開始位置を補正する必要がないので、制御を容易にするとともにプリンタのスループットを向上させることができる。
【００９５】
また、印刷開始位置を行と列とで指定し印刷することができる場合においては、ダミーデータを用いることなく、リアルタイムコマンドと同様のデータ列を含む行列部でイメージデータを分割し、後段のデータ列の印刷開始位置を行と列とで指定することにより所望の印字結果を得ることができる。
【００９６】
なお、前記実施形態においては、前述のリアルタイムコマンドおよび画像印刷コマンドの例にしたがって説明したが、他のコマンド体系を採用した場合であっても同様の処理を採用することが可能であり、そのような実施形態も本発明の範囲に含まれる。
【００９７】
また、前記実施形態においては、イメージデータを直接印刷させる通常コマンドを変換する技法について説明したが、ユーザによるフォント登録の場合においても同様の技法を適用することができる。またフォント登録による技法においても、同じイメージデータ（フォント形状）を印刷するコマンドのデータ列に変換することにかわりはないから、このような場合であっても本発明の範囲に含まれる。
【００９８】
【発明の効果】
以上説明したように、本発明によれば、以下の効果を奏する。
【００９９】
リアルタイムコマンドの処理を行うプリンタに対してリアルタイムコマンドのデータ列と同じデータ列を含むようなイメージデータを印刷させる場合であっても、プリンタの誤動作を防止することができるプリンタ制御装置、プリンタ制御方法を提供することができる。
【０１００】
特に、従来から利用されているプリンタについて、何らの変更も加えずに、プリンタに対して印刷指令を送るホストコンピュータ側のプリンタドライバに本発明を適用することにより、プリンタの誤動作を防止することができる。従来は、エンドユーザやアプリケーションメーカーがリアルタイムコマンドのデータ列を含まないように印刷指令を構成しなければならなかったが、このような負担の大きい作業が不要になる。
【０１０１】
さらに、プログラムを記録した情報記録媒体をソフトウェア商品として、汎用コンピュータやプリンタのハードウェアと独立して容易に配布したり販売したりすることができるようになる。本発明の情報記録媒体に記録されたプログラムを汎用コンピュータなどの情報処理装置で実行すれば、当該情報処理装置により、上記の発明に係るプリンタ制御装置、プリンタ制御方法が実現できる。
【図面の簡単な説明】
【図１】本発明のプリンタ制御装置に制御されるプリンタの一実施形態の概要を示すブロック構成図。
【図２】本発明のプリンタ制御装置に制御されるプリンタの受信割り込み処理の流れのを示すフローチャート。
【図３】本発明のプリンタ制御装置に制御されるプリンタの受信割り込みにおける状態遷移を示す説明図。
【図４】本発明のプリンタ制御装置に制御されるプリンタの通常処理の流れを示すフローチャート。
【図５】本発明のプリンタ制御装置の一実施形態の概要を示すブロック構成図。
【図６】本発明のプリンタ制御装置で実行されるプリンタ制御方法の処理の流れを示すフローチャート。
【図７】本発明の第2の実施形態に係る分割生成変換処理の流れを示すフローチャート。
【図８】本発明の第2の実施形態に係る分割生成変換処理におけるデータ構造を視覚的に表わした模式図。
【符号の説明】
１０１  プリンタ
１０２  インターフェース
１０３  ＣＰＵ
１０４  ＲＡＭ
１０５  ＲＯＭ
１０７  印刷機構
１１１  受信バッファ
１１２  プリントバッファ
１１３  現在のモード領域
１２０  ホストコンピュータ
５０１  ＣＰＵ
５０２  ＲＯＭ
５０３  不揮発性記憶装置
５０４  ＲＡＭ
５０５  インターフェース
【図１】
0004320905.tif 000004
【図２】
0004320905.tif 000005
【図３】
0004320905.tif 000006
【図４】
0004320905.tif 000007
【図５】
0004320905.tif 000008
【図６】
0004320905.tif 000009
【図７】
0004320905.tif 000010
【図８】
0004320905.tif 000011