(57)【特許請求の範囲】
【請求項１】
バンドが単一の圧縮イメージであるか否かを判別する第１判別手段と、
第１判別手段によりバンドが単一の圧縮イメージでないと判別された場合、圧縮イメージデータを伸長したイメージデータ及び罫線コマンドに基づくイメージデータをバンドメモリに展開し、前記バンドメモリに展開されたイメージデータをビデオ転送部に出力し、前記第１判別手段によりバンドが単一の圧縮イメージであると判別された場合、圧縮イメージデータを伸長したイメージデータをバンドメモリに展開することなく圧縮イメージデータをビデオ転送部に出力する制御手段とを有することを特徴とする印刷制御装置。
【請求項２】
バンドが単一の圧縮イメージであるか否かを判別する第１判別手段と、
第１判別手段によりバンドが単一の圧縮イメージでないと判別された場合、圧縮イメージデータを伸長したイメージデータ及び罫線コマンドに基づくイメージデータをバンドメモリに展開し、前記バンドメモリに展開されたイメージデータを出力し、前記第１判別手段によりバンドが単一の圧縮イメージであると判別された場合、圧縮イメージデータを伸長したイメージデータをバンドメモリに展開することなく圧縮イメージデータを出力する制御手段と、
前記制御手段により出力されるイメージデータをビデオ信号に変換して出力し、また前記制御手段により出力される圧縮イメージデータをイメージデータに伸長し、伸長したイメージデータをビデオ信号に変換して出力するビデオ転送手段と、
前記ビデオ転送手段により出力されるビデオ信号に基づき印刷を行うプリントエンジンとを有することを特徴とする印刷装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えばホストコンピュータから送られてくる印刷データを印刷出力する印刷システム及び印刷装置及び印刷制御方法に関するものである。
【０００２】
【従来の技術】
従来、イメージ出力に特化したページプリンタがあり、それはホストベースプリンタと呼ばれている。
【０００３】
この種のプリンタでは、ホストコンピュータ上で展開した１ページ分のイメージデータを、ページ先頭から次々に圧縮してプリンタのコントローラ部に送る。コントローラ部は送られてくる圧縮データを次々に伸長し、伸長したデータをビデオ信号に変換して、エンジン部の排紙のタイミングに同期させて、エンジン部に出力する。これによって、１ページ分の用紙の印刷を行なう。
【０００４】
この種のプリンタでは、圧縮されたイメージデータのビデオ信号への変換と、エンジン部へのビデオ信号出力は、ハードウェア回路が行なう仕組みとなっており、極端に言えば、コントローラ部には、ＣＰＵも不要であり、非常に安価なページプリンタが可能という長所がある。
【０００５】
【発明が解決しようとする課題】
しかしながら、上記従来のホストベースプリンタを用いるホストコンピュータでは、文字印字、図形描画、イメージの貼り付け等、全ての印刷データを、いったんホストコンピュータ上でイメージに展開してから、展開されたイメージを圧縮してプリンタに転送する。そのため、ホストからプリンタに転送すべきデータ量が大きくなってしまう。また、普通の文書でも、文字や文字以外の要素、例えば、表の罫線描画、図形描画、イメージの貼り付け等々も、いったんホストコンピュータ上でイメージに展開してから、まとめてイメージの圧縮を行なって、プリンタに転送しなければならない。このため、転送データ量が大きくなってしまうこと、また、ホスト上の処理時間がかかって、全体の処理時間が大きくなってしまうという問題があった。
【０００６】
本発明の目的は、ホストベースプリンタに近い、簡単な構成のイメージ専用プリンタでありながら、文字の部分は文字コードで受信して文字画像に変換し、罫線の部分は罫線コードで受信して展開することで、ホスト上での文字及び罫線の展開処理時間とホストからの転送データ量とを非常に小さくした印刷装置及び印刷システム及び印刷制御方法を提供することである。
【０００７】
また、本発明の他の目的は、必要なメモリ容量をできるだけ小さくした印刷装置及び印刷システム及び印刷制御方法を提供することである。
【０００８】
本発明の他の目的は、印刷装置上でバンド制御で印刷処理を行なう際の、文字展開数の限界、罫線展開数の限界を超える場合も、印刷可能とする印刷装置及び印刷システム及び印刷制御方法を提供することである。
【０００９】
【課題を解決するための手段】
上記目的を達成するため、本発明はつぎのような構成からなる。
【００１０】
バンドが単一の圧縮イメージであるか否かを判別する第１判別手段と、第１判別手段によりバンドが単一の圧縮イメージでないと判別された場合、圧縮イメージデータを伸長したイメージデータ及び罫線コマンドに基づくイメージデータをバンドメモリに展開し、前記バンドメモリに展開されたイメージデータを出力し、前記第１判別手段によりバンドが単一の圧縮イメージであると判別された場合、圧縮イメージデータを伸長したイメージデータをバンドメモリに展開することなく圧縮イメージデータを出力する制御手段と、前記制御手段により出力されるイメージデータをビデオ信号に変換して出力し、また前記制御手段により出力される圧縮イメージデータをイメージデータに伸長し、伸長したイメージデータをビデオ信号に変換して出力するビデオ転送手段と、前記ビデオ転送手段により出力されるビデオ信号に基づき印刷を行うプリントエンジンとを有することを特徴とする印刷制御装置。
【００１１】
あるいは、バンドが単一の圧縮イメージであるか否かを判別する第１判別手段と、第１判別手段によりバンドが単一の圧縮イメージでないと判別された場合、圧縮イメージデータを伸長したイメージデータ及び罫線コマンドに基づくイメージデータをバンドメモリに展開し、前記バンドメモリに展開されたイメージデータを出力し、前記第１判別手段によりバンドが単一の圧縮イメージであると判別された場合、圧縮イメージデータを伸長したイメージデータをバンドメモリに展開することなく圧縮イメージデータを出力する制御手段と、前記制御手段により出力されるイメージデータをビデオ信号に変換して出力し、また前記制御手段により出力される圧縮イメージデータをイメージデータに伸長し、伸長したイメージデータをビデオ信号に変換して出力するビデオ転送手段と、前記ビデオ転送手段により出力されるビデオ信号に基づき印刷を行うプリントエンジンとを有することを特徴とする印刷装置。
【００１７】
【発明の実施の形態】
［第１の実施の形態］
次に、図を用いて、第１の実施の形態としてホストコンピュータからデータをプリンタに送信して印刷する印刷システムを説明する。
＜（ａ）システムの構成＞
第１の実施の形態では、文字データ、罫線データ、イメージデータを、ＲＡＭ上のふたつのバンドメモリ上へ交互に展開して、エンジン部４へビデオ転送する。
【００１８】
図１は、システム全体を説明するためのブロック構成図である。
【００１９】
パーソナルコンピュータ１は、登録する文字イメージデータ、印字を指示する文字コード、罫線の描画を指示するデータ、圧縮されたイメージデータを作成してプリンタ２へ送るホストコンピュータである。プリンタ本体２は、コントローラ部３、エンジン部４を備えている。コントローラ部３は、ホストコンピュータ１から送られてくる文字データ、罫線データ、イメージデータを受信し、受信したデータからビデオ信号を生成し、エンジン部４に送る役目を負っている。エンジン部４は、コントローラ部３から受け取ったビデオ信号を用紙に転写して印刷し、排紙する役目を持つ。
【００２０】
コントローラ部３は、コントローラ部３全体を制御する中央処理装置（以下、ＣＰＵと呼ぶ）５、ＣＰＵ５による処理動作を記述したプログラムの入っているリード・オンリ・メモリ（以下、ＲＯＭと呼ぶ）８、ランダム・アクセス・メモリ（以下、ＲＡＭと呼ぶ）９、ホスト１から文字データ、罫線データ、イメージデータを受信し、受信したデータをＲＡＭ９内にある受信バッファ１０にセットする受信部６、受信した圧縮された文字データを伸長して、バンドメモリ７１，７２へ展開する文字伸長回路１７、受信した罫線データの指示に従って、罫線をバンドメモリ７１，７２上へ展開する罫線展開回路３１、受信した圧縮されたイメージデータを伸長して、バンドメモリ７１，７２に展開するイメージ伸長回路１６、バンドメモリ７１，７２内の展開イメージをビデオ信号に変換して、エンジン部４に出力するイメージ伸長・ビデオ転送回路７等で構成されている。
【００２１】
文字データ１８は、受信済みで受信バッファ１０にページ内のバンド毎にセットされた状態の文字データである。罫線データ１３２は受信済みで受信バッファ１０にページ内のバンド毎にセットされた状態の罫線データである。イメージデータ１９は受信済みで受信バッファ１０にページ内のバンド毎にセットされた状態のイメージデータを示している。
【００２２】
受信バッファ１０に受信、セットされるデータは、ページの中が１６のバンドに区別されて、バンドの区分の中に、文字データ、罫線データ、イメージデータがそれぞれ並んでいる。もちろん、ホストコンピュータ１上のドライバが、このような並びとして、プリンタ２へ出力している。
【００２３】
その他、ＲＡＭ９内には、プログラムのワーク領域１２、さらにその中には、受信バッファ１０に受信したページごとの文字データ１８、罫線データ１３２、イメージデータ１９を管理するためのページ管理表１３、圧縮された１文字ごとのドットイメージを貯蔵しておく登録文字データ領域１５、登録された文字データを管理するための登録文字管理表１４等が含まれている。
【００２４】
なお、受信した文字データ１８の中味は、登録文字、文字コードで構成されている。ホスト１上で印刷しようとしている文書で、最初に出現した文字は、圧縮して１文字ごとのドットイメージとして、登録文字としてプリンタ２に送られる。また、その最初の文字位置を含めて、以降の同一文字の印字は、文字コードによって指示される。
【００２５】
受信バッファ１０に一旦受信された登録文字は、登録文字データ領域１５に移し替えられ、貯えられる。文字コードによって印字を指示された場合は、登録文字データ領域１５から、文字コードに対応する登録文字データが抜き出され、文字伸長回路１７で伸長され、バンドメモリ７１，７２上に展開される形となる。
【００２６】
また、罫線データ１３２は、罫線展開回路３１によって、バンドメモリ７１，７２上に展開され、圧縮イメージデータ１９はイメージ伸長回路１６によりデータ伸長され、バンドメモリ７１，７２上に展開される。
【００２７】
なお、バンドメモリ７１，７２は二つ設けられており、バンドＡ７１の展開イメージがエンジン部４へビデオ転送中にバンドＢ７２へ文字、罫線、イメージの展開が行われ、あるいは、バンドＢ７２の展開イメージがエンジン部４へビデオ転送中にバンドＡ７１へ文字、罫線、イメージの展開が行われる、という作業が交互に行われて、１ページ分の印刷処理が完了する。ここでは、それぞれのバンド７１，７２の高さは、縦置きの用紙１ページを短冊形に均一に１６等分したものとして考えている。
【００２８】
イメージ伸長・ビデオ転送回路７は、バンドＡ７１、バンドＢ７２のメモリイメージを、交互にビデオ信号に変換してエンジン部４へ転送するだけでなく、ドライバから送られてくるあるバンドのデータとして、何もデータの含まない空白のバンドのときは、その部分のビデオ信号は何も転送しない機能と、さらに、ドライバから送られてくるあるバンドのデータとして、単一のブロックイメージしか含まれていないときは、その圧縮されたブロックイメージを、バンドメモリ７１，７２に展開せず、この回路が直接イメージデータ伸長を行ない、同時にビデオ信号に変換して、エンジン部４へ転送する機能を持つ。つまり、３つの機能を合わせ持っている。
【００２９】
ところで、コントローラ部３のＣＰＵ５は、ＲＡＭ９の内部の受信バッファ１０やページ管理表１３、登録文字管理表１４などを用いたメモリ管理を行なうだけなので、処理能力のそれほど高くない安価な製品で良い。
【００３０】
次に、エンジン部４の説明を行なう。エンジン部４にも、ＣＰＵ２１やメモリ２２があり、メモリ２２には制御プログラムの入ったＲＯＭ２３や、プログラムのワーク領域としてのＲＡＭ２４が含まれる。ビデオ受信部２５は、コントローラ部３からのビデオ信号を受信し、現像定着部２７で用紙に画像を転写する。給紙部２６は、未使用の白い用紙を用紙カセット等から取り込む役目をし、現像定着部２７は、上述のように用紙に画像を転写して定着し、排紙部２８は印刷済みの用紙を排出する。
【００３１】
なお、太い矢印は、文字データ、罫線データ、イメージデータやビデオ信号の流れ、あるいは、エンジン部４では、用紙の流れを示している。また、細い矢印は、各部分間の制御のやりとりを示している。コントローラ部３のＣＰＵ５と、エンジン部４のＣＰＵ２１も、互いに情報のやり取りを行なう。ビデオの転写や、用紙の搬送等の印刷処理の制御にかかわる情報である。
＜ビデオ信号出力の原理＞
図２は、プリンタ２内でのコントローラ部３におけるイメージと文字、罫線の合成のバンドによるビデオ信号出力の原理の説明図である。
【００３２】
図１でも一部説明したが、ホスト１上のドライバは印刷しようとする文書について、まず、文字部分、罫線部分と、その他の部分とに分離する。その他の部分はホスト１上のフレームバッファ上に、すべてイメージとして展開しておく。そして、１ページ内の１６分割されたバンド毎に、文字データ部分と、罫線データ部分と、イメージデータ部分とを別々にプリンタ２へ転送する。文字部分はまず文字のドットパターンの圧縮したデータをプリンタヘ送って登録しておき、印字データとして文字コード列を送る。文字の登録については、一つの文書毎に、一文字については一度登録すれば良い。また、一つの文書ジョブの印刷が終了すれば、登録した文字は消去される。
【００３３】
バンドの高さについては、１６分割されたバンドは、それぞれ同一である。つまり、均等に分割されている。
【００３４】
二つのバンドにまたがった文字については、それぞれのバンドに印字コードが所属する形で、ドライバからプリンタ２へ転送される。
【００３５】
大きな文字については、イメージとして展開されてから、ドライバからプリンタ２へ転送される。
【００３６】
罫線は、「一本の罫線とは、内部が黒く塗りつぶされた、細長い矩形領域」と定義される。その定義の上で、矩形領域の開始座標、終了座標が、一本の矩形データとして転送される。一本の罫線が二つ、あるいは複数のバンドにまたがった場合は、それぞれのバンドに分割された形で、矩形の罫線データが作成され、プリンタ２へ転送される。
【００３７】
ホスト１上のフレームバッファに展開されたイメージは、全体を１６のバンドに分割され、さらに、バンド内で実際にイメージのある矩形部分だけを取り出して、圧縮されて、単一のイメージブロックとして、ドライバからプリンタ２へ転送される。図２では、イメージデータの点線だ囲んだ部分だけが実際にイメージブロックとして転送されることを示している。
【００３８】
プリンタ２のコントローラ部３では、あるバンドがイメージブロックと文字データ、罫線データを３つとも含んでいる場合は、受信した圧縮イメージデータ１９は、イメージ伸長回路１６を使ってデータ伸長され、バンドＡ７１か、バンドＢ７２上に展開される。受信した文字データ１８は、文字コード列によって印字を指示されたそれぞれの文字について、登録されている圧縮されたドット文字データが、文字伸長回路１７によってデータ伸長され、バンドＡ７１か、バンドＢ７２上に展開される。受信した罫線データ１３２は、罫線展開回路１３１によってバンドＡ７１か、バンド７２上に展開される。
【００３９】
文字と罫線とイメージは、バンド上にＯＲ書きされる。
【００４０】
奇数の番号のバンドのときは、バンドＡ７１ヘ展開し、偶数の番号のバンドのときは、バンドＢ７２へ展開する。
【００４１】
バンドＡ７１への文字、罫線、及び、イメージの展開が終わったら、イメージ伸長・ビデオ転送回路７へ、エンジン部４へのビデオ転送を指示し、この回路によるビデオ信号の出力中に、バンドＢ７２への文字、罫線、イメージの展開を行なう。バンドＢ７２への展開が終わり、先に指示していたバンドＡ７１のビデオ出力が終わったなら、バンドＢ７２のビデオ信号出力を、イメージ伸長・ビデオ転送回路７に指示する。そして、バンドＡ７１への文字、罫線、イメージの展開を開始する。
【００４２】
以上のような二つのバンドメモリへの文字、罫線、イメージの展開と、ビデオ信号の出力を交互に行なうことで、１ページ分の印刷を行なう。
【００４３】
文字だけ、あるいは罫線だけ、あるいはイメージだけしか含まれていないバンドのときも、同一の動作である。
【００４４】
なお、文字も罫線もイメージも含まれていない空白のバンドのときは、イメージ伸長・ビデオ転送回路７にバンド高さ分、ビデオ信号をエンジン部４へ送らないよう、指示される。
【００４５】
また、あるバンドにイメージのブロックだけしか含まれていないときは、イメージ伸長・ビデオ転送回路７に対して、イメージブロックのデータ伸長とビデオ信号のエンジン部４への出力を指示する。つまり、バンドメモリ７１，７２へのイメージ展開を経由せずに、直接エンジン部４へのビデオ転送を行なうわけである。
【００４６】
このように、エンジン部４へのビデオ信号の出力径路は、▲１▼バンドメモリ７１から，▲２▼バンドメモリ７２から，▲３▼空白バンドはビデオ信号を送らない，▲４▼イメージのみの場合にはバンドメモリを経由しない、という４通りがある。
【００４７】
図２には、上記４つの経路で、ビデオ信号が出力されることが図示されている。これらの経路が混合した形で１ページの印刷が行われる。
【００４８】
図３は、ホスト１からプリンタ２へ送られる文字データ、罫線データ、イメージデータのコマンド構造の説明図である。
【００４９】
先頭には、ジョブ開始コマンド３１、次にページ毎にページ開始コマンド３２、ページ内のバンド毎にバンド開始コマンド８１と続く。バンド開始コマンド８１は、１ページあたり１６個繰返される。文字データ、罫線データ、イメージデータがないバンドについても、バンド開始コマンド８１は発行される。
【００５０】
さらに、印字位置を示すポインタの位置移動コマンド３３、その後に、種別コマンド３４、コマンド列３５と続く。種別コマンド３４は、その直後に続くコマンド列３５の種類を区別するためのコマンドである。コマンド列３５には、文字登録を行なうもの、文字の印字を指示するもの、罫線の描画を指示するもの、イメージの印字を指示するもの等、数種類の形式がある。詳細は図４で説明する。印刷する文書のページ数分、ページ開始コマンド３２以降の命令群が繰り返されて、最後にジョブ終了コマンド３６で、ひとつの文書の印字コマンドが終了する。
【００５１】
なお、図３では、種別コマンド３４の前に必ず位置移動コマンド３３がセットされているが、常時必要とは限らない。例えば、種別コマンド３４、コマンド列３５が文字の登録だけを行なう場合は、位置移動コマンド３３は不要である。
【００５２】
図４は、種別３４ごとのコマンド列３５の構造の説明図である。
【００５３】
種別３４が１の場合は、「文字登録のみ」の作業を示し、まず始めに書体番号４１が来て、次に文字コード４２、データの大きさ４３と続き、最後に、圧縮された文字のドットイメージデータ４４がセットされる。
【００５４】
登録される文字データは、ＲＡＭ９上の登録文字データ領域１５に、書体ごとに区分けされ、文字コードと１対１の関連を持って登録される。具体的には、これらの区分け、関連等は、登録文字管理表１４上で管理される。
【００５５】
種別３４が２の場合は、「文字登録＋印字」の作業を示し、登録と同時に印字も行なう。コマンド列３５の形式は、種別３４が１の場合と同一である。この場合の文字コード４２は、登録する文字のコード割り当てを意味すると同時に、すでに登録済みの文字、印字を指示する文字コードをも意味する。
【００５６】
種別３４が３の場合は、「文字イメージ印字のみ」の作業を示している。つまり、文字のドットイメージデータを、登録せずに印字するだけである。コマンド列３５は、データの大きさ４３に続き、圧縮された文字のドットイメージデータ４４があるだけである。
【００５７】
種別３４が４の場合は、「文字コード印字」の作業を示し、コマンド列３５は、書体番号４１の後に、文字コード４２が続くだけである。コントローラ部３は、この書体番号４１と文字コード４２をもとに、登録文字管理表１４を調べて、登録文字データ領域１５から目的の登録文字データを探し出し、文字伸長回路１７でデータを伸長してバンドメモリ７１，７２に展開することになる。
【００５８】
種別３４が５の場合は、「罫線の描画」の作業を示し、コマンド列３５は、一本の罫線をあらわす矩形の右下端のＸ座標４９、右下端Ｙ座標５０と続く。
【００５９】
種別３４が６の場合は、「ブロックイメージの貼り付け」の作業を示し、コマンド列３５は、ブロックイメージの縦のサイズ４５、ブロックイメージの横のサイズ４６、データの大きさ４７と続き、最後に圧縮されたブロックイメージデータ４８がセットされる。コントローラ部３は、圧縮されたブロックイメージデータをイメージ伸長回路１６を用いてデータ伸長し、バンドメモリ７１，７２上に展開する。
【００６０】
種別３４としては、上記６つだけである。
【００６１】
図５は、一本の罫線描画をコマンドで指示する時の説明図である。一本の罫線を示す、細長い矩形であって、左上端座標は、位置移動コマンド３３で指示され、右下端座標は、種別３４が５のときのコマンド列３５の右下端Ｘ座標４９、右下端Ｙ座標５０によって指示される。
【００６２】
図６は、コントローラ部３のＲＯＭ８に内蔵されている、プログラムを説明するための図である。
【００６３】
５１は、受信管理プログラムで、受信バッファ１０に貯蔵される各ページごとの文字データや、罫線データ、イメージデータを、ページ管理表１３を用いて管理する。受信部６への、受信データの受信バッファ１０上の書き込み位置の指示も行なう。
【００６４】
解析プログラム５２は、受信バッファ１０上に貯えられた文字データ、つまり文字登録や文字印字のコマンド群や、罫線データ、つまり罫線描画を指示するコマンド群や、イメージデータ、つまりイメージブロック貼り付けのコマンド群を解析して、文字登録プログラム５３に対して文字の登録処理を指示したり、印字プログラム５４に対して文字のバンドメモリ７１，７２への展開処理を指示したり、罫線のバンドメモリ７１，７２への展開を行なったり、イメージのバンドメモリ７１，７２への貼り付けを行ったりする。
【００６５】
また、バンドメモリ７１，７２への文字や、罫線、イメージの展開処理が完了した場合は、バンドメモリ７１，７２のイメージのエンジン部４へのビデオ転送と、エンジン部４への印刷処理の実行を指示する。そして排紙が完了したページについては、受信バッファ１０上からそのページのデータを削除する作業も行なう。削除すると言っても、ページ管理表１３から排紙済みページの登録を抹消するだけである。受信バッファ１０上でデータクリアを行なうわけではない。
【００６６】
まとめると、解析プログラム５２の中では、バンドごとの解析とバンドごとのビデオ出力、排紙作業が行なわれていることになる。
【００６７】
各プログラムの動作の詳細は、後述のフローチャートで詳しく説明する。
【００６８】
なお、受信管理プログラム５１と解析プログラム５２は、プリンタの電源オンと同時に立ち上り、ホスト１からデータ送信を待ち構えることになる。以後プリンタの電源オフまでふたつのプログラムはマルチタスクで動作を続ける。
【００６９】
図７は、受信バッファ１０内の受信したデータの書き込み処理が進行する際の、各ポインタの位置関係を説明するための図である。受信バッファ１０は、いわゆる「リングバッファ」の構造になっている。
【００７０】
受信部６は、予め受信管理プログラム７１から、限界ポインタ６１を指示されていて、受信バッファ１０内でこの位置まで受信したデータの直接書き込みが許されている。１バイトごとに加算される書き込み位置自体は、受信部６が管理している。
【００７１】
図７（ａ）で説明すると、プリンタ２の起動直後は、限界ポインタ６１は受信バッファ１０の最大値の位置、つまり、受信バッファ１０の領域の最後尾のアドレスと一致しているが、この図では説明のために、限界ポインタ６１が受信バッファ１０の最大値の少し手前に設定されている。そして、この状態では受信部６による受信データの書き込みが、限界ポインタ６１の少し手前まで進んできたことを示している。
【００７２】
また、受信済みのデータについては、解析プログラム５２によって、順次平行してデータ解析作業、バンドメモリ７１，７２への文字や、罫線、イメージの展開作業、エンジン部４へのビデオ転送作業、エンジン部４による印刷作業が実行される。エンジン部４への排紙の指示が完了したページまで、解析ポインタ６２が設定される。その後、排紙が無事完了したページについては、排紙ポインタ６３が設定される。受信したデータのうち、排紙ポインタ６３のアドレス以前の部分については、もうすでに排紙済みで不要なので、「消去」された状態になっていて、新しい受信データが書き込み可能である。「消去」と言っても実際にクリアされているわけではなく、新しい受信データは上書きされる形である。
【００７３】
なお、解析ポインタ６２、排紙ポインタ６３はページ単位に設定される。解析プログラム５２は、受信バッファ１０上のページ境界位置等を、受信管理プログラム５１が作成、管理しているページ管理表１３上で調べて分かる。
【００７４】
図７（ｂ）は、受信バッファ１０の最大値の位置まで受信データの書き込みが進んでしまい、受信管理プログラム５１が、限界ポインタ６１を受信バッファ１０の先頭位置付近に移動させるよう受信部６に指示し、実際に、受信部６による受信データの書き込みが、先頭部分で少し進んだ状態を示している。いわゆる「リングバッファ」の動作である。
【００７５】
限界ポインタ６１の変更は、次の手順で行なわれる。まず、受信部６による受信データの書き込みが、限界ポインタ６１まで進むと、受信部６は「限界に達してこれ以上書き込めない」ことを受信管理プログラム５１に知らせる。つまり、限界ポインタ６１の変更を催促する。催促された受信管理プログラム５１は、排紙ポインタ６３を調べ、新しく空いた領域がないかチェックする。そして、新しい限界ポインタ６１位置を排紙ポインタ６３位置として、受信部６へ指示する。これで、受信部６は、古い限界ポインタ６１位置から、新しい限界ポインタ６１位置まで、受信データの書き込みが可能になる。
【００７６】
なお、受信６は、「書き込み位置が限界ポインタ６１に達したとき」以外にも、受信データ中に「ジョブ開始コマンド４１を検知したとき」や、「ページの開始コマンド３２を検知したとき」、「ジョブ終了コマンド３６を検出したとき」等も、受信管理プログラム５１に連絡を行なう。これによって、受信管理プログラム５１は、受信の実作業、つまり、信号線の制御や受信したデータのメモリへの書き込み等々、受信部６に任せながら、受信したページの管理が可能になっている。
【００７７】
ところで、受信部６は、ホスト１から受信したデータを高速で受信バッファ１０に直接書き出す仕組み、いわゆるＤＭＡ（ダイナミック・メモリ・アクセス）受信回路を持っているわけだが、ＦＩＦＯ（ファーストイン・ファーストアウト）バッファが内蔵されており、ホスト１から送られてくるイメージデータは、いったん、このＦＩＦＯバッファに貯えられてから、受信管理プログラム５１から指示された受信バッファ１０上の書き込み位置へ高速で書き込まれる。技術的には広く知られたものなので、ここでは詳細な説明は省略する。
【００７８】
また、ワーク領域１２には、ページ管理表１３、登録文字管理表１４、登録文字データ領域１５等が存在するが、ここでは、各部分の内部の詳細な構造については説明しない。しかし、余計なメモリ容量を消費しないように、効率的な構造をとっている。
【００７９】
数式１は、一つのバンドに文字や罫線を展開するのに要する時間を知るための計算式を示している。
【００８０】
【数１】
0003792823.tif 000002
【００８１】
プリンタ２内のコントローラ部３では、「１バンド当たりの、文字展開や罫線展開、イメージの展開に使用できる許容時間」は決まっている。ホスト１上のドライバでバンド単位でプリンタ２へ送る文字データ、罫線データを作成する際には、１文字ごと、１本の罫線ごとに、数式１で示す計算式で求められる展開時間を加算してゆき、その合計値が「バンドあたりの展開許容時間」をオーバーする場合は、その時点以降の文字や罫線は、イメージとして処理することになる。
【００８２】
なお、イメージについては、１バンドあたり、１ブロックのイメージしか許さない。そのため、計算上イメージの展開時間としては、仮に、１バンドの大きさいっぱいの、しかも圧縮の効かないイメージブロックがあったとして、そのイメージブロックの展開時間をイメージの展開時間として割り当てている。つまり、最悪のケースを考慮している。
【００８３】
次に、文字と罫線について、数式１の説明をする。まず１文字あたりの展開時間は、文字の面積に比例しているとして、単純化して計算する。つまり、ドット単位での文字の大きさの２乗に比例する。この場合、文字はすべてＯＲ書きが前提である。
【００８４】
１本の罫線あたりの展開時間は、罫線として細長い矩形領域を考えて、ＯＲ書きしなければならない部分と、上書きで済む部分とに分解し、それぞれの処理時間を合計したものになる。詳細は、図８、図９で説明する。
【００８５】
ＯＲ書きは、バンドメモリ７１，７２から、展開位置の１バイトを罫線展開回路１３１内部の１バンドバッファにサンプリングし、その１バイトに、罫線の部分展開のための１バイトをＯＲ書きした後、その１バイトをバンドメモリ７１，７２へ戻さなければならないので時間がかかる。一方、上書きはｆｆＨの真っ黒な１バイトデータを、直接バンドメモリ７１，７２へ書き出すだけなので、短時間で済む。
【００８６】
これにより罫線では、ＯＲ書き部分と上書き部分とに分けて計算している。なお、上記文字や罫線の左右端部分がＯＲ書きでなければならない理由としては、コントローラ部３でバンドメモリ７１，７２のクリアのあとで、文字、罫線、イメージが展開されるが、相互に重ね書きされる可能性があるからである。
【００８７】
仮に、イメージの上に、文字、罫線をＯＲ書きでなく上書きで処理すると、イメージの上に、一つの文字が重なった場合はイメージが文字ボックスの大きさ分白く抜けて、その上に文字が描画されることになり、印刷結果の上では問題である。
【００８８】
また、イメージの上に罫線が重なった場合も、上書きだとすると、罫線の左右端の１バイトに満たない部分が白く抜けて、その上に罫線の左右端が描画されるので、印刷結果の上では問題である。
【００８９】
ホスト１上のアプリケーションの上で、ユーザが必ずしもイメージ、文字、罫線のＯＲ書きを指示しているとは限らないが、本実施の形態では最終的な印刷結果として、より問題の少ないと思われるＯＲ書きの方式を取っている。
【００９０】
なお、罫線は全体をＯＲ書きしてもかまわないが、左右端部分以外は、１バイトがｆｆＨの真っ黒な部分なので、ＯＲ書きよりも展開の速い上書きで良い。
【００９１】
図８は、１本の横罫線の展開時間を算出するための説明図である。
【００９２】
図では、太さ７ドット、長さ７バイト、ただし、左右の半端な１バイトになっている横に長い罫線の場合を示している。この時、ＯＲ書きしなければならないのは、左の１バイト部分、及び右の１バイト部分である。したがって数式１の計算式（ｂ）では、ＯＲ書き罫線係数に掛ける値は２になる。上書きで構わない部分は、中間の５バイトの部分である。数式１の計算式（ｂ）で、上書き罫線係数に掛ける上書き領域の長さは５となる。罫線の太さは７ドットであるが、数式１の計算式（ｂ）で罫線の高さは７となる。
【００９３】
これによって、数式１の計算式（ｂ）で１本の横に長い罫線の展開時間が算出される。
【００９４】
なお、罫線によっては、左の１バイトあるいは右の１バイトがぴったり１バイトにおさまってしまって、ＯＲ書き領域がない場合もある。その場合は、ＯＲ書き領域数によって、数式１のＯＲ書き罫線係数に掛ける数は１か０となる。
【００９５】
図９は、１本の縦罫線の展開時間を算出するための説明図である。
【００９６】
図では、長さ２１ドット、太さ２バイト、ただし、左右端は半端な１バイトになっている縦に長い罫線の場合を示している。この時、ＯＲ書きしなければならないのは、左の１バイト部分、及び右の１バイト部分である。数式１の計算式（ｂ）では、ＯＲ書き罫線係数に掛ける値は２になる。上書きで構わない部分はない。数式１の計算式（ｂ）で、上書き罫線係数に掛ける上書き領域の長さは０となる。罫線の長さは２１ドットであるが、数式１の計算式（ｂ）で罫線の高さは２１となる。
【００９７】
これによって、数式１の計算式（ｂ）で１本の縦に長い罫線の展開時間が算出される。
【００９８】
なお、罫線によっては、太さが小さくて１バイトのＯＲ書き領域の中におさまってしまう場合もある。その場合は、数式１のＯＲ書き罫線係数に掛ける数は１となる。
＜（ｂ）動作の説明＞
次に、本発明の第１の実施の形態の動作を、フローチャートを用いて説明する。
＜プリンタドライバプログラム＞
図１０，１１は、ホスト１上のプリンタドライバの動作を説明するフローチャートである。プリンタドライバは、ユーザが用いるアプリケーションソフトで作成された文書データから、図３，図４で説明した文字やイメージのプリンタコマンドを作成してプリンタ２へ転送する。ユーザがアプリケーションソフトから文書の印刷を指示すると、ホスト１内でプリンタドライバが起動される。
【００９９】
ドライバは起動時にはホスト１のメモリ上に１ページ分の大きさのイメージ展開領域としてのフレームバッファを確保し、同時にフレームバッファをクリアする。また、ドライバの文書印刷処理の終了時には、フレームバッファとして使われていたメモリ領域は開放される。
【０１００】
処理としては、まず、ステップＳ１でジョブ開始コマンド３１をプリンタ２へ転送し、次にステップＳ２で変数ｍに印刷しようとしている文書のページ数に１を加算した値をセットし、ステップＳ３で変数ｍｐに１をセットする。そして、ステップＳ４で変数ｍｐが変数ｍより小さいかチェックし、ＮＯなら文書のすべてのページ数の処理が終わったことになるので、ステップＳ５でジョブ終了コマンド３６を転送して、ドライバの処理を終了する。
【０１０１】
ステップＳ４でＹＥＳなら、ステップＳ６でページ開始コマンド３２をプリンタ２へ転送し、ステップＳ７でｍｐページ目のアプリケーションからの文字印字指示、罫線描画指示を蓄積し、ステップＳ８で蓄積した文字印字指示について印字位置によるソーティング、蓄積した罫線の描画指示について描画開始位置によりソーティングを実行し、ステップＳ９でｍｐページ目のアプリケーションからの文字印字指示、及び、罫線描画指示、以外の描画指示をホスト１上のフレームバッファに展開する。ここで、文字印字指示、罫線描画指示、以外の描画指示とは、図形描画、イメージの貼り付け等である。
【０１０２】
また、ステップＳ８における印字位置、描画位置によるソーティングとは、まず用紙の長手方向によるソーティング、次に、用紙の短手方向によるソーティングを行なうことである。Ａ４サイズの用紙を縦置きした時に、印字位置、描画位置によって上から下へ、さらに左から右へと並べ替えたことになる。
【０１０３】
次にステップＳ１０で、変数ｎに１７をセットする。１７と言う値は、用紙サイズを長手方向に均等に１６バンドに分割する意味での「１６」の値に１を加算した値である。そしてステップＳ１１で変数ｎｐに１をセットし、ステップＳ１２で変数ｎｐが変数ｎより小さいかチェックし、ＮＯなら１ページの１６個のバンド処理が終了したことを意味するので、変数ｍｐに１を加算してステップＳ４の直前に戻り、次のページのバンド出力処理に移る。
【０１０４】
ステップＳ１２でＹＥＳなら、ステップＳ１４でバンド開始コマンド８１をプリンタ２へ転送し、ステップＳ１５で、変数Ｔに単一ブロックイメージのバンドへの貼り付け時間をセットする。この時間は、数式１で説明したバンドいっぱいの大きさの圧縮の効かない単一イメージブロックのバンドへの展開時間を意味している固定値である。
【０１０５】
そして、ステップＳ１６では、変数Ｔｍａｘに、コントローラ部３が許している文字、罫線、イメージの展開に対しての１バンドあたりの展開許容時間をセットする。これも固定値である。
【０１０６】
次に、ステップＳ１７で蓄積したアプリからの印字指示からｎｐバンド目に含まれる文字印字指示をピックアップし、ステップＳ１８で変数ｓにピックアップした文字数に１を加算した値をセットして、ステップＳ１９で変数ｓｐヘ１をセットする。
【０１０７】
なお、ステップＳ１７でピックアップする文字印字指示は、ｎｐバンド目に文字の一部でもかかっているものはすべてピックアップする。よって、文字の印字位置によっては、二つのバンドにまたがる場合がある。
【０１０８】
次にステップＳ２０で変数ｓｐが変数ｓより小さいかチェックし、ＮＯならｎｐバンド目に含まれる文字データの転送処理はすべて済んだことになるので、ステップＳ２１でバンドごとの罫線コマンド処理を行ない、ステップＳ２２以降でｎｐバンド目のイメージデータの転送処理に移ることになる。
【０１０９】
ステップＳ２１の動作の詳細は、図１２で説明する。
【０１１０】
ところで、ステップＳ２２では、ホスト上のフレームバッファから、ｎｐバンド目の位置と大きさのイメージを切り出し、ステップＳ２３で空白のバンドかチェックし、ＹＥＳなら何もせずステップＳ２７に移る。
【０１１１】
ステップＳ２３でＮＯなら、ステップＳ２４でイメージが実際に含まれる矩形領域を単一のブロックとして切り出し、まずステップＳ２５でブロックの貼り付け位置を示す位置移動コマンド３３をプリンタ２へ転送し、ステップＳ２６で種別３４が６、つまりブロックイメージコマンド４５，４６，４７，４８をプリンタ２へ転送する。当然ながら、ブロックイメージデータはデータ圧縮されて転送される。
【０１１２】
そして、ステップＳ２７で変数ｎｐに１を加算し、ステップＳ１２の直前に戻り、次のバンドの転送処理に移る。
【０１１３】
ステップＳ２０でＹＥＳの場合は、ステップＳ２８で変数Ｔに、印字の指示をしようとしている文字の１文字展開時間を加算し、ステップＳ２９では変数ＴがＴｍａｘより小さいかチェックし、ＮＯならステップＳ３０で変数ＴからステップＳ２８で加算した１文字展開時間を減算し、ステップＳ３１で印字の指示をしようとしている１文字を、フレームバッファ上に展開し、ステップＳ３９へ飛ぶ。
【０１１４】
なお、ステップＳ２８で加算する１文字展開時間は、数式１で説明した計算式で算出される。
【０１１５】
ステップＳ２９でＹＥＳなら、ステップＳ３２でｓｐ番目の文字はこの文書で初めて現れる文字の印字の指示かチェックし、初めてならばステップＳ３３で印字位置を示す位置移動コマンド３３をプリンタ２へ転送し、ステップＳ３４でプリンタ２側が登録可能な文字数の限界に達したかチェックし、限界に達したならステップＳ３６で種別３４が３、つまり、文字イメージ印字のみのコマンド４３，４４をプリンタ２へ転送して、ステップＳ３９へ移る。
【０１１６】
ステップＳ３４で限界に達していないとわかれば、ステップＳ３５で種別３４が２、つまり文字登録＋印字コマンド４１，４２，４３，４４をプリンタ２へ転送してからステップＳ３９ヘ移る。当然ながら、プリンタ２へ転送される一文字のドットイメージは、データ圧縮されて転送される。
【０１１７】
ステップＳ３２でＮＯならば、この文字の印字の指示が文書の中で２度目以降の指示であることを示しているので、ステップＳ３７で印字位置を示す位置移動命令３３をプリンタ２へ転送し、次にステップＳ３８で種別３４が４、つまり文字コード印字コマンド４１，４２をプリンタ２へ転送する。
【０１１８】
そして、ステップＳ３９で変数ｓｐに１を加算して、ステップＳ２０の直前に戻り、次の文字データのプリンタ２への転送処理を行なう。
＜罫線コマンド処理プログラム＞
図１２は、図１０，１１のステップＳ２１の処理、つまり、バンドごとの罫線コマンド処理ルーチンの動作の詳細を説明するためのフローチャートである。
【０１１９】
まず、ステップＳ４１では、ｎｐバンド目にかかる罫線描画指示をピックアップし、ステップＳ４２で変数ｓにピックアップした罫線数に１を加算した値をセットし、ステップＳ４３で変数ｓｐに１をセットする。
【０１２０】
そして、ステップＳ４４で変数ｓｐが変数ｓより小さいかチェックし、ＮＯならこのルーチンからリターンする。ＹＥＳならステップＳ４５で変数Ｔにプリンタ２に対して描画のコマンドを送ろうとしている、１本の罫線の展開時間を加算する。この罫線展開時間は、前述の数式１で算出される。
【０１２１】
次に、ステップＳ４６では、変数Ｔが変数Ｔｍａｘより小さいかチェックし、ＮＯならステップＳ４７で変数ＴからステップＳ４５で加算した１本の罫線展開時間を減算し、ステップＳ４８でホスト１上のフレームバッファに直接罫線の展開を行って、ステップＳ５１へ移る。
【０１２２】
ステップＳ４６でＹＥＳなら、ステップＳ４９で位置移動コマンド３３を転送し、ステップＳ５０で種別３４が５、つまり、罫線コマンド４９，５０を転送する。図４で説明したように、罫線コマンド４９，５０は、罫線を細長い矩形とした場合に、その矩形の右下端のＸ座標４９、及び、Ｙ座標５０をあらわしている。
【０１２３】
そのあと、ステップＳ５１へ移り、変数ｓｐに１を加算して、ステップＳ４４の直前に戻り、次の罫線の処理に移る。
【０１２４】
ところで、ステップＳ５０でプリンタ２に転送する罫線コマンドは、バンドの領域以内の部分の細長い矩形である。アプリケーションからドライバが罫線の指示を受けたときは、例えば、ページの先頭からページの下端にまで届く長い罫線だとしても、プリンタ２へコマンドを転送するときには、バンド毎に分割された小さな罫線コマンドになっていることになる。
【０１２５】
なお、ステップＳ４８で、フレームバッファ上に直接罫線を描画しているが、この時描画するのも、バンドの領域以内の部分だけである。
＜受信管理プログラム＞
図１３，１４は、受信管理プログラム５１の動作を説明するためのフローチャートである。このプログラムはプリンタ２の電源立ち上げと同時に動作を開始する。
【０１２６】
まず、ステップＳ６１で受信バッファ１０、バンドメモリ７１，７２、ワーク領域１２内にあるページ管理表１３、登録文字管理表１４等をクリアし、ステップＳ６２で、受信部６に受信データ書き込みの限界値、つまり図７で説明した限界ポインタ６１の値を、受信バッファの最大値にセットする。これで受信部６は、受信バッファの大きさまでフルに書き込めることになる。そのあと、ステップＳ６３でユーザがプリンタを電源オフしたかチェックし、ＹＥＳならこのプログラムの処理を終了する。
【０１２７】
ステップＳ６３でＮＯなら、ステップＳ６４で受信部６から受信開始の知らせあったかチェックする。受信開始の知らせとは、受信部６がホスト１から受け取った転送データの中から、ジョブ開始コマンド３１を検知したかどうかの知らせである。ステップＳ６４でＮＯなら、ステップＳ６３の直前に戻り、ループを形成してホスト１からのプリントコマンドの転送を待つ。
【０１２８】
ステップＳ６４でＹＥＳなら、ステップＳ６５で受信部６へ受信データの受信バッファ１０への書き込み開始を指示する。
【０１２９】
なお、受信部６はジョブ開始コマンド３１を検知したら、まずホスト１からの受信を一時停止し、受信管理プログラム５１に対してジョブ開始コマンド３１を検知したことを知らせ、それから受信管理プログラム５１から受信データの受信バッファ１０への書き込み開始が指示されるまで待つ。これがステップＳ６５に相当する。また、受信部６は、ジョブ開始コマンド３１を検知するまでの受信データは、すべて受け捨てる形になっている。つまりホスト１からデータは受信するが、受信バッファ１０には書き込まない。
【０１３０】
ステップＳ６５の後は、ステップＳ６６で１秒待つ。この１秒の間に、受信部６が受信データの受信バッファ１０への書き込みを進めている形である。そのあとステップＳ６７で、受信部６からページ開始コマンド３２、あるいは、ジョブ終了コマンド３６を検知したかどうかの知らせをチェックし、ＹＥＳならステップＳ６８でページ管理表１３に受信したページの登録を行なう。この時、単一のページだけでなく、複数のページを同時にページ管理表１３に登録することも有り得る。つまり、ステップＳ６７の時点で、いくつかのページ開始コマンドやジョブ終了コマンドが重なっていることも有り得る。
【０１３１】
そして、ステップＳ６９で受信部６からの知らせの中身に、ジョブ終了コマンド３６が含まれていたかチェックし、ＹＥＳならステップＳ７７で受信部６に書き込み終了を指示してから、ステップＳ６３の直前に戻り、ループを形成して次のジョブの受信を待つ。ステップＳ６９でＮＯなら、ステップＳ６６の直前に戻り、ループを形成して、受信データの受信バッファ１０への書込みを続ける。
【０１３２】
なお、受信部６はジョブ終了コマンドを検知したら、一旦データ受信を停止する。つまり、複数のジョブの連続がホスト１から送られてきても、一気に受信バッファ１０に勝手に書き込むのではなく、受信管理プログラム５１の指示のもとで、ジョブ単位に受信バッファ１０への書込みを行なう。
【０１３３】
ステップＳ６７でＮＯなら、ステップＳ７０で受信部６から受信データの書き込みが指定された限界値に達したとの知らせがあったかチェックし、ＮＯならステップＳ６６の直前に戻ってループを形成し、受信部６による受信データの書き込みを続ける。ステップＳ７０でＹＥＳならステップＳ７１で新しい限界値を受信部６に指示可能かチェックし、ＹＥＳならステップＳ７２で新しい限界値を受信部６に知らせて、その後はステップＳ６６の直前に戻り、ループを形成して受信部６による受信データの受信バッファ１０への書き込みを続ける。
【０１３４】
ステップＳ７１でＮＯなら、ステップＳ７３で受信データが大きすぎるかチェックする。“大きすぎる”とは、受信バッファ１０をすべて使ってもある１ページ分のデータが受信しきれないことを示している。大きすぎると判断できた場合は、ステップＳ７４でプリンタ２のパネル上にエラー表示を行ない、ステップＳ７５で、受信バッファ１０、バンドメモリ７１，７２、ワーク領域１２内にあるページ管理表１３、登録文字管理表１４等をクリアし、ステップＳ７６で受信部６に対し、受信データ書き込みの限界値を受信バッファの最大値とセットする。その後、ステップＳ７７で受信部６に書き込み終了を指示してから、ステップＳ６３の直前に戻り、ループを形成して次の文書のジョブ開始の知らせを待つ。これによって、大きすぎてエラーとなってしまったページを含んだ文書ジョブは、巨大なページ以降、すべて受け捨てられることになる。
【０１３５】
ステップＳ７３でＮＯならば、ステップＳ７８で１秒待ち、解析プログラム７２によって解析が進み、受信バッファ１０に空きができるの待つことになる。そして、ステップＳ７１の直前に戻りループを形成して、ステップＳ７１で受信バッファ１０の空きを確認することになる。
【０１３６】
なお、ステップＳ７４で、“プリンタ２のパネル上にエラー表示”と記載したが、パネルは図１のブロック構成図では記載、説明していない。しかし、通常のプリンタ等では、“印刷可”の状態なのか“エラー”の状態なのか“用紙なし”の状態なのか区別するために、プリンタ２の前面か上面に液晶パネルか状態表示ランプが設置されているのが普通である。詳細な説明は省略する。
＜受信部の動作＞
図１５，１６は、受信部６の動作を説明するためのフローチャートである。図１３，１４では、受信管理プログラム５１の動作を説明する際に、ついでに受信部６の動作も言葉で説明したが、より詳しく説明するためにフローチャートにして図１５，１６とした。もちろん、受信部６はハードウェアの回路であって、通常のプログラムとは異なるが、動作の順序をフローチャートで説明する。
【０１３７】
受信部６は、プリンタ２の電源オンと同時に動作を開始するが、まず、ステップＳ８１で受信を一旦停止する。これは、プリンタ２側をビジー状態として、ホスト１からのデータ転送を拒否することである。そのあと、ステップＳ８２で、受信管理プログラム５１から受信バッファ１０上の書き込み位置の限界値の指示があるまで待ち、指示があったなら、ステップＳ８３でホスト１からのデータの受信は可能だが、受信したデータは受け捨てる状態とする。
【０１３８】
そして、ステップＳ８４で、ユーザがプリンタ２の電源をオフしたかチェックし、ＹＥＳなら受信部６の動作を終了する。ＮＯならステップＳ８５で受信したデータからジョブ開始コマンド３１を検知したかチェックし、ＮＯならステップＳ８４の直前に戻り、ホスト１からのジョブ開始コマンド３１を待ち受ける。
【０１３９】
ステップＳ８５でＹＥＳなら、ステップＳ８６で一旦受信を停止し、ステップＳ８７でジョブ開始コマンド３１を検知したことを受信管理プログラム５１へ知らせる。受信を一旦停止するとは、プリンタ２がビジー状態で、ホスト１からのデータの受信を拒否している状態である。
【０１４０】
次に、ステップＳ８８で受信管理プログラム５１から受信バッファ１０への書き込み開始の指示があるまで待ち、指示があったならステップＳ８９でホスト１からの受信を行ない、受信したデータは受信バッファ１０上に書き込む動作を開始し、続行する。そして、ステップＳ９０でページ開始コマンド３２を検知したかチェックし、ＹＥＳならステップＳ９１で受信管理プログラム５１にページ開始コマンド３２を検知したことを知らせる。
【０１４１】
この時点で、受信管理プログラム５１は、受信文書のページ位置をページ管理表１３に記録する。ステップＳ９１の後は、ステップＳ８９の直前に戻り、受信と書き込みを続行する。
【０１４２】
ステップＳ９０でＮＯなら、ステップＳ９２でジョブ終了コマンド３６を検知したかチェックし、ＹＥＳならステップＳ９３で受信を一旦停止し、ステップＳ９４でジョブ終了コマンド３６を検知したことを受信管理プログラム５１に知らせる。この時点で、受信管理プログラム５１は、ジョブの終了をページ管理表１３上に記録する。
【０１４３】
次にステップＳ９５で、受信管理プログラム５１から受信は可だが受信したデータは受け捨てる、との指示があるまで待ち、指示があったならステップＳ８３の直前に戻り、次の文書のジョブ開始コマンド３１を待つ。
【０１４４】
ステップＳ９２でＮＯなら、ステップＳ９６で受信バッファ１０上への書き込み位置が限界に達してしまったかチェックし、ＹＥＳならステップＳ９７で受信を一旦停止し、ステップＳ９８で受信管理プログラム５１へ受信バッファ１０への書き込みが限界に達したことを知らせる。
【０１４５】
次に、ステップＳ９９で受信管理プログラム５１から受信バッファ１０上の新しい書き込み位置の限界値の指示があったかチェックし、ＮＯならステップＳ１００で受信管理プログラム５１から書き込み終了の指示があったかチェックし、ＮＯならステップＳ９９の直前に戻り、ループを形成する。つまり、受信管理プログラム５１からの新しい限界値の指示か、書き込み終了の指示があるまで待つことになる。
【０１４６】
なお、ステップＳ１００で受信管理プログラム５１から書き込み終了の指示があるのは、１ページ分のデータが大きすぎて、受信バッファ１０全部の領域を使っても、１ページ分のデータが納まりきらなくてエラーとなったときである。
【０１４７】
一方、ステップＳ９９でＹＥＳの場合はステップＳ８９の直前に戻り、受信と書き込みを続行する。また、ステップＳ１００でＹＥＳの場合はステップＳ８３の直前に戻り、以後のデータはジョブ開始コマンド３１が来るまでは受信してもすべて受け捨てることになる。つまり、ある文書で大きすぎてエラーとなったページ以降の文書内のページは、すべて受け捨てられることになる。
【０１４８】
ステップＳ９６でＮＯの場合もステップＳ８９の直前に戻り、データの受信と受信バッファへの書き込みが続行される。
【０１４９】
図１７〜図２０は、解析プログラム５２の動作を説明するためのフローチャートである。解析プログラム５２も、プリンタ２の電源オンとともに立ち上がり、以後、受信部６によって書き込まれた、受信バッファ１０の中のプリントコマンドの解析、及び、排紙処理を行なう。
【０１５０】
まず、ステップＳ１１１で、ユーザがプリンタ２を電源オフしたかチェックし、ＹＥＳならこのプログラムの処理を終了する。ＮＯならステップＳ１１２で受信バッファ１０内に受信済みのページのデータがあるかチェックし、ないならばステップＳ１１１の直前に戻りループを形成して、ホスト１からのデータの受信を待つ。
【０１５１】
なお、ステップＳ１１２では、ページ管理表１３を調べることによって、受信済みのページが存在するかどうかをチェックする。ページ管理表１３は、図１３，１４で説明したような動作で、受信管理プログラム５１が管理を行なっている。
【０１５２】
ステップＳ１１２でＹＥＳならば、以後そのページのプリントコマンドを次々と解析して処理してゆくわけだが、まずステップＳ１１３で変数ｎに「１７」をセットする。「１７」は１ページのバンド分割数「１６」に１を加算した値である。次にステップＳ１１４で、変数ｎｐに１をセットし、ステップＳ１１５で変数ｎｐが変数ｎより小さいかチェックし、ＮＯならバンドの処理がすべて完了したことを示し、ステップＳ１５５へ飛び、排紙の完了を待つ。
【０１５３】
ステップＳ１１５でＹＥＳなら、ステップＳ１１６でバンドｎｐ番目のデータは、文字データも罫線データもイメージデータもなく、空白バンドなのかチェックし、ＹＥＳならステップＳ１１７で変数ｔに０をセットする。そしてステップＳ１２３へ飛ぶ。
【０１５４】
ステップＳ１１６でＮＯなら、ステップＳ１１８でバンドｎｐ番目のデータに文字データが含まれているかチェックし、ＹＥＳならステップＳ１１９で変数ｎｐが奇数なら変数ｔに１をセットし、変数ｎｐが偶数なら変数ｔに２をセットし、ステップＳ１２３へ飛ぶ。
【０１５５】
ステップＳ１１８でＮＯなら、ステップＳ１２０でバンドｎｐ番目のデータに罫線データが含まれているかチェックし、ＹＥＳならステップＳ１１９で変数ｎｐが奇数なら変数ｔに１をセットし、変数ｎｐが偶数なら変数ｔに２をセットし、ステップＳ１２３へ飛ぶ。
【０１５６】
ステップＳ１２０でＮＯなら、バンドｎｐ番目のデータとしては、単一のブロックイメージしか存在しないことを示しているが、ステップＳ１２２で変数ｔに３をセットして、ステップＳ１２３へ飛ぶ。
【０１５７】
ステップＳ１２３では、変数ｔが１あるいは２かチェックし、ＹＥＳならステップＳ１２４以降でバンドｎｐ番目に含まれる文字データや罫線データ、ブロックイメージデータを先頭から解析して行き、バンドメモリＡ７１、バンドメモリＢ７２への展開処理を行なう。まず、ステップＳ１２４では、変数ｔが１ならバンドメモリＡ７１をクリアし、変数ｔが２ならバンドメモリＢ７２をクリアする。そして、ステップＳ１２５で解析しようとしているコマンドが、位置移動コマンド３３かチェックする。ＹＥＳならステップＳ１２６でカーソルの移動を行なう。ここで言うカーソルとは、バンドメモリ７１，７２上で文字、あるいは、罫線、あるいはイメージを展開する位置を示すための概念上のポインタである。具体的には、ワーク領域１２上にＸ座標、Ｙ座標を示す変数として確保されている。カーソル位置は、バンドの左上端を原点としている。ドライバから送られてくる位置移動コマンド３３も、各バンドの左上端を原点と考える相対位置を前提として転送されてくる。ページの左上端を原点としているわけではない。
【０１５８】
ステップＳ１２６のあとは、ステップＳ１４０へ飛ぶ。
【０１５９】
ステップＳ１２５でＮＯならば、ステップＳ１２７でそのコマンドが種別コマンド３４で種別が１かチェックし、ＹＥＳならばステップＳ１２８で文字登録プログラム５３による文字の登録処理を行なってから、ステップＳ１４０へ飛ぶ。文字の登録処理は、後述の図２１のフローチャートで動作の詳細を説明する。
【０１６０】
ステップＳ１２７でＮＯならば、ステップＳ１２９でそのコマンドが種別コマンド３４で種別が２かチェックし、ＹＥＳならばステップＳ１３０で文字の登録処理を行ない、ステップＳ１３１で印字処理を行なってからステップＳ１４０へ飛ぶ。ステップＳ１３０の文字の登録処理と、前述のステップＳ１２８の文字の登録処理は同一である。また、ステップＳ１３１の印字処理は、印字プログラム５４によって行なわれるが、詳細は後述の図２２で説明する。
【０１６１】
ステップＳ１２９でＮＯならば、ステップＳ１３２でそのコマンドが種別コマンド３４で種別が３かチェックし、ＹＥＳならばステップＳ１３３で文字イメージの印字処理のみを行ない、そのあとステップＳ１４０へ飛ぶ。
【０１６２】
ステップＳ１３２でＮＯならば、ステップＳ１３４でそのコマンドが種別コマンド３４で種別が４かチェックし、ＹＥＳならばステップＳ１３５で印字処理を行ない、そのあとステップＳ１４０へ飛ぶ。ステップＳ１３５の印字処理は、前述のステップＳ１３１の印字処理と同一である。
【０１６３】
ステップＳ１３４でＮＯならば、ステップＳ１３６でそのコマンドが種別コマンド３４で種別か５かチェックし、ＹＥＳならばステップＳ１３７で罫線展開回路１３１を使用して、罫線展開作業を実行する。変数ｔが１なら、バンドメモリＡ７１に展開し、変数ｔが２ならバンドメモリＢ７２に展開する。その後、ステップＳ１４０へ飛ぶ。
【０１６４】
ステップＳ１３６でＮＯなら、ステップＳ１３８でそのコマンドが種別コマンド３４で、種別が６かチェックし、ＹＥＳならばステップＳ１３９でイメージ伸長回路１６を使用して、圧縮イメージデータの伸長作業をし、伸長したブロックイメージのバンドメモリ７１，７２への貼り付け作業を行なう。その際、変数ｔが１なら、バンドメモリＡ７１への貼り付けを行ない、変数ｔが２ならばンド１５への貼り付けを行なう。そして、ステップＳ１４０へ飛ぶ。
【０１６５】
ステップＳ１２６、ステップＳ１２８、ステップＳ１３１、ステップＳ１３３、ステップＳ１３５、ステップＳ１３７、ステップＳ１３９のあとか、あるいはステップＳ１３８でＮＯならばステップＳ１４０へ移る。ステップＳ１４０では、バンドｎｐ番目の受信データで、解析していないコマンドがまだ残っているかチェックし、残っているならば、ステップＳ１２５の直前に戻って、その未解析コマンドの解析処理を行なう。
【０１６６】
ステップＳ１２３でＮＯの場合、あるいはステップＳ１４０でＮＯの場合は、図１９のステップＳ１４１へ飛ぶ。
【０１６７】
ステップＳ１４１以降、ステップＳ１５４まではバンド単位のエンジン部４へのビデオ信号出力処理を示している。
【０１６８】
まず、ステップＳ１４１では、変数ｎｐが１かチェックする。つまり、あるページの最初のバンドかチェックするわけである。最初のバンドであれば、ステップＳ１４２でエンジン部４に給紙開始を指示して、ステップＳ１４３で用紙があるかチェックし、用紙なしならばステップＳ１４４でユーザが用紙を追加セットするまで待ち、それからステップＳ１４７へ飛ぶ。ステップＳ１４３でＮＯならば、つまり用紙があるならステップＳ１４７へ飛ぶ。
【０１６９】
ステップＳ１４１で最初のバンドではないと判断されたならば、ステップＳ１４５で前のバンドのビデオ転送処理が終了するまで待つ。但し、待っている間に、紙ジャム、つまり紙詰りが発生しているかをステップＳ１４６で常に監視している。仮に紙ジャムが発生しているのならば、ステップＳ１４６からステップＳ１６０へ飛び、紙ジャムからの復帰処理を行なう。
【０１７０】
ステップＳ１４５でＹＥＳなら、つまり前のバンドのビデオ転送が終了したなら、ステップＳ１４７で変数ｔが０かチェックし、ＹＥＳならステップＳ１４８でイメージ伸長・ビデオ転送回路７に空白バンドの出力処理を指示してステップＳ１５４へ飛ぶ。
【０１７１】
ステップＳ１４７でＮＯなら、ステップＳ１４９で変数ｔが１かチェックし、ＹＥＳならステップＳ１５０でイメージ伸長・ビデオ転送回路７にバンドメモリＡ７１のビデオ信号出力指示を行ない、ステップＳ１５４へ飛ぶ。
【０１７２】
ステップＳ１４９でＮＯならば、ステップＳ１５１で変数ｔが２かチェックし、ＹＥＳならステップＳ１５２でイメージ伸長・ビデオ転送回路７にバンドメモリＢ７２のビデオ信号出力指示を行ない、ステップＳ１５４へ飛ぶ。
【０１７３】
ステップＳ１５１でＮＯならば、ステップＳ１５３でイメージ伸長・ビデオ転送回路７にｎｐ番目のバンドデータに含まれる単一イメージブロックを、圧縮イメージのデータ伸長をしながらビデオ信号を出力することを指示して、ステップＳ１５４へ飛ぶ。
【０１７４】
ステップＳ１５４では変数ｎｐに１を加算してから、ステップＳ１１５の直前に戻り、次のバンドデータのバンドメモリへの展開、及びビデオ信号出力処理へ移る。
【０１７５】
ステップＳ１１５でＮＯの場合は、バンド出力処理がすべて終了して、あとはステップＳ１５５以降で印刷された用紙の排紙の完了を待つだけとなるが、まずステップＳ１５５では排紙が完了したかチェックし、ＮＯならばステップＳ１５９で紙ジャム、つまり紙詰まりが発生したかチェックし、ＮＯならばステップＳ１１５の直前に戻りループを形成して排紙の完了まで待つことになる。
【０１７６】
ステップＳ１５５で、排紙が完了したと判断したならば、ステップＳ１５６でページ管理表１３上の、排紙済みページの記述をクリアし、ステップＳ１５７でジョブ終了、つまり、一つの文書の全ページを排紙し終わったかチェックし、ＹＥＳならステップＳ１５８で登録文字管理表１４をクリアし、ステップＳ１１１の直前に戻って、次の文書のジョブのデータ受信を待つ。
【０１７７】
ステップＳ１５７でＮＯならば、この時もステップＳ１１１の直前に戻って、その文書の後続のページのデータ受信を待つことになる。
【０１７８】
ステップＳ１５９でＹＥＳならば、ステップＳ１６０で紙ジャム発生をパネル表示し、ステップＳ１６１でユーザが詰まった紙を取り除くまで待ち、取除いたことがわかればステップＳ１１１の直前まで戻り、もう一度前回処理を行なった受信済みページデータのバンドへの展開、ビデオ出力、排紙処理を試みる。
【０１７９】
なお、ステップＳ１５６では、ページ管理表１３上のページの登録をクリアしているが、受信管理プログラム５１は、この領域がクリアされていることをチェックして、受信部６に対して新しい受信データ書き込みの限界値の指示を行なう。
＜文字登録プログラム＞
図２１は文字登録プログラム５３の動作の詳細を説明するためのフローチャートである。
【０１８０】
このプログラムは、解析プログラム５２からコールされるが、まず、ステップＳ１７１で圧縮された文字のドットイメージデータをそのまま登録文字データ領域１５へ移し替える。そして、ステップＳ１７２で登録文字管理表１４内に登録アドレスや、書体番号、文字コード、等を記録し、このプログラムの処理を終了する。
＜印字プログラム＞
図２２は印字プログラム５４の動作の詳細を説明するためのフローチャートである。このプログラムも、解析プログラム５２からコールされる。
【０１８１】
まず、ステップＳ１８１で、登録文字管理表１４をサーチして、書体番号、文字コードの一致する登録文字の登録文字データ領域１５上の登録アドレスを得る。そして、ステップＳ１８２で文字伸長回路１７で圧縮された文字のドットイメージデータを伸長し、ステップＳ１８３で貼り付ける文字がバンド境界上にかかってしまうかチェックし、境界上にかかってしまうと判断できれば、ステップＳ１８４で文字イメージの境界値処理を行ない、カーソル位置の微調整も行なってからステップＳ１８５へ移る。ステップＳ１８３でＮＯの場合も、ステップＳ１８５へ移る。
【０１８２】
ステップＳ１８４での境界値処理とは、一文字の文字イメージのうち、バンドの領域内にかかる部分だけ切り出してくることである。その小さなイメージ部分だけをバンド領域内に貼ることになるので、カーソル位置も微調整してバンド領域内に移動しなければならない場合がある。
【０１８３】
例えば、ある文字がバンドの上端の境界で文字ボックスの上半分ぐらいはみ出しているとする。カーソル位置は、文字ボックスの左上端なので、この時点ではバンド領域外にある。次に境界値処理を行なって、バンド領域内におさまる文字ボックスの下半分のイメージだけを切り出してくる。とすれば、下半分だけの文字の文字ボックスの左上端位置が、新しいカーソル位置となる。この位置は、バンド領域の上端の境界上に位置する。これが、「カーソル位置の微調整」の作業である。
【０１８４】
また、文字ボックスが、バンド領域の四隅にかかってしまう場合も、同様にバンド領域内にかかる部分の文字イメージの切り出しと、カーソル位置の微調整が行なわれる。
【０１８５】
ステップＳ１８５では、伸長済みの文字のドットイメージをバンドＡ７１か、バンドＢ７２上のカーソル位置に貼り付ける。図１７，１８で説明した変数ｔが１ならバンドＡ７１に貼り付け、変数ｔ２がバンドＢ７２に貼り付ける。そして、このプログラムの処理を終了する。
＜罫線展開回路の動作＞
図２３，２４は、罫線展開回路１３１の動作を説明したフローチャートである。罫線展開回路１３１は、ハードウェアとしての回路であって、プログラムではないが、説明のためにフローチャートを用いる。
【０１８６】
解析プログラム５２から、１本の罫線展開の指示が来て、罫線展開回路１３１は動作を開始するわけだが、１本の罫線展開の指示とは、内部が真っ黒の細長い矩形の描画の指示である。罫線展開回路１３１は、バンドメモリ７１，７２上に、その細長い矩形を、上から順に１ラスタごとに描画することで、その矩形を完成させる。なお、矩形の展開座標位置は、バンドメモリ７１，７２上のドット単位で指示がある。もちろん、バンドメモリ７１，７２のいずれに展開するかの指示もある。
【０１８７】
罫線展開の指示がくると、まず、ステップＳ１９１で変数ｍに矩形の高さ［ドット］をセットする。そして、ステップＳ１９２で変数ｎに０をセットし、ステップＳ１９３で変数ａｄに描画の開始アドレス［バイト］をセットし、ステップＳ１９４で変数ａｄｌに変数ａｄの値をセットする。
【０１８８】
次に、ステップＳ１９５で変数ａｄｓに１ラスタごとに描画する際のラスタの開始位置の加算値［バイト］をセットし、ステップＳ１９６では変数ｌｍに１ラスタ描画分の長さ［バイト］をセットし、ステップＳ１９７で変数ｌｎに０をセットする。
【０１８９】
そして、ステップＳ１９８では、１ラスタ描画の際に左端をＯＲ書きするかチェックし、ＮＯならステップＳ１９９で変数ｔｌに０をセットし、ＹＥＳならステップＳ２００で変数ｔｌに１をセットする。なお、ＯＲ書きするかどうかのチェック方法は、解析プログラム５２からの罫線展開の開始位置［ドット］の指示が８で割り切れるかどうかである。割り切れれば、ＯＲ書きはしない。
【０１９０】
そのあと、ステップＳ２０１で１ラスタ描画の際に右端をＯＲ書きするかチェックし、ＮＯならステップＳ２０２で変数ｔｒに０をセットし、ＹＥＳならステップＳ２０３で変数ｔｒに１をセットする。なお、ＯＲ書きするかどうかのチェック方法は、解析プログラム５２からの罫線展開の終了位置［ドット］の指示＋１が８で割り切れるかどうかである。割り切れればＯＲ書きはしない。
【０１９１】
そして、ステップＳ２０４ヘ移るが、ステップＳ２０４では変数ｎが変数ｍより小さいかチェックし、ＮＯなら、全ラスタの描画が終了、つまり罫線の描画がすべて終了したことを意味するので、罫線展開回路１３１の動作を終了する。
【０１９２】
ＹＥＳなら、ステップＳ２０５で変数ｌｎが変数ｌｍより小さいかチェックし、ＮＯなら１ラスタ分の描画の終了を意味するので、ステップＳ２０６以降でアドレス調整を行って、次の１ラスタの描画に移るが、まず、ステップＳ２０６で変数ａｄに変数ａｄｓを加算し、ステップＳ２０７で変数ａｄｌに変数ａｄの値をセットし、ステップＳ２０８で変数ｎに１を加算し、ステップＳ２０９で変数ｌｎに０をセットして、ステップＳ２０４の直前に戻り、次の１ラスタの描画を続ける。
【０１９３】
ステップＳ２０５でＹＥＳなら、ステップＳ２１０で変数ｌｎが０かチェックし、つまり、１ラスタの描画のうちの最初の１バイト目の描画かチェックし、ＹＥＳならステップＳ２１１で変数ｔｌが１かチェックする。つまり、左端をＯＲ書きするかどうかである。ここで、ＮＯならステップＳ２１７へ飛び、上書き処理を行なう。ここで、ＹＥＳならステップＳ２１４へ飛び、ＯＲ書き処理を行なう。
【０１９４】
ステップＳ２１０でＮＯの場合は、ステップＳ２１２で変数ｌｎが、変数ｌｍから１を引いた数に等しいかチェックする。つまり、１ラスタ分の描画で、最後の１バイトの描画かチェックする。ＮＯなら、ステップＳ２１７で上書き処理を行ない、ＹＥＳならステップＳ２１３で変数ｔｒが１かチェックし、つまり、右端のＯＲ書きをするかどうかチェックし、ＹＥＳならステップＳ２１４以降でＯＲ書き処理を行ない、ＮＯならステップＳ２１７で上書き処理を行なう。
【０１９５】
ステップＳ２１７の上書き処理とは、アドレスａｄｌ［バイト］の位置に、真っ黒なｆｆＨの１バイトを単純にセットすることである。
【０１９６】
また、ステップＳ２１４以降のＯＲ書き処理とは、まずステップＳ２１４でバンドメモリ７１，７２上のアドレスａｄｌ［バイト］位置から、１バイトを読み出してきて、ステップＳ２１５でその読み出してきた１バイトに罫線の左端か、右端の半端なパターンの１バイトをＯＲ書きし、ステップＳ２１６でその結果の１バイトをバンドメモリ７１，７２上のアドレスａｄｌ［バイト］位置へ書き出す。
【０１９７】
そして、ステップＳ２１６、あるいはステップＳ２１７のあとは、ステップＳ２１８で変数ａｄｌに１を加算し、ステップＳ２１９で変数ｌｎに１を加算したあと、ステップＳ２０５の直前に飛んで、描画中の１ラスタの中の次の１バイトの描画作業に移る。
【０１９８】
なお、細い縦罫線の場合、例えば太さ１ドットの縦罫線の場合は、ステップＳ１９６において変数ｌｍ、つまり、１ラスタ分の罫線のバイト数は１であり、また、左端のＯＲ書きをあらわす、変数ｔｌは１である。そして、１ラスタの描画はステップＳ２１０からステップＳ２１１、ステップＳ２１４と一度だけ通過するだけである。右端をＯＲ書きするかしないかをあらわす変数ｔｒの値は、処理の上で意味はなくなる。
＜イメージ伸長・ビデオ転送回路の動作＞
次に、図２５、図２６，２７、図２８で、イメージ伸長・ビデオ転送回路７の動作を説明する。イメージ伸長・ビデオ転送回路７は、ハードウェア回路であって、プログラムではないが、その動作を図２６，２７、図２８のフローチャートを用いて説明する。なお、前述したように、解析プログラム５２がイメージ伸長・ビデオ転送回路７に指示をして、エンジン部４に対してビデオ信号の出力を実行させる。イメージ伸長・ビデオ転送回路７の処理の中には、空白バンドの処理、バンドメモリＡ７１、バンドメモリＢ７２からのビデオ信号出力処理、圧縮されたブロックイメージデータから直接の圧縮イメージデータの伸長と、伸長したデータからのビデオ信号出力処理の３つが含まれる。
【０１９９】
また、図示はしていないが、イメージ伸長・ビデオ転送回路７の中には、ブロックイメージデータから１ライン分、圧縮イメージデータを伸長したあとで、伸長したデータをとっておくためのラインバッファが内蔵されている。このラインバッファのデータをもとに、ビデオ信号を作成してエンジン部４に出力する。
【０２００】
まず、図２５では図２６，２７、図２８のフローチャートで用いる各変数の説明をする。
【０２０１】
変数ｈは、バンドの高さを示す。これは、ビデオ信号を出力する際のライン数に相当する。変数ｌは、バンドの幅を示す。この大きさはバイトを単位としている。つまり、８の倍数のドット数が、ビデオ信号の白黒のビットに変換されて出力される。
【０２０２】
変数ｈａは、イメージブロックに到達するまでの上マージンである。ビデオ信号は、何も送る必要のない部分のライン数である。変数ｈｂは、イメージブロックの高さ、つまりブロックのライン数である。
【０２０３】
変数ｌａは、イメージブロックの左マージンである。この部分は、ビデオ信号は何も送る必要がない。変数ｌｂは、イメージブロックの幅である。ｌａ，ｌｂの値についても、大きさはバイトを単位としている。つまり８の倍数のドット数が、ビデオ信号の白黒のビットに変換されて出力される。
【０２０４】
前述したホスト１上のドライバの動作としては、バンドやブロックイメージデータの幅方向は、“バイト単位の大きさ”に揃えることについては何も記述されていなかったが、ハードウェア回路を用いた高速なイメージ出力を可能にするには上記のような区切りの良くなる工夫が必要になる。ドライバも、このような工夫を前提としてプリントコマンドをプリンタ２へ転送する。
【０２０５】
次に、図２６，２７、図２８でイメージ伸長・ビデオ転送回路７の動作を説明する。
【０２０６】
この回路は、プリンタ２の電源オンと同時に動作を開始するが、まずステップＳ２２１でユーザがプリンタ２を電源オフしたかチェックし、ＹＥＳならこの回路は動作を終了する。ＮＯならステップＳ２２２で解析プログラム５２からのビデオ信号出力の指示があったかチェックし、ＮＯならステップＳ２２１の直前に戻り、ループを形成して解析プログラム５２からの指示を待つ。
【０２０７】
ステップＳ２２２でＹＥＳならステップＳ２２３で変数ｈにバンドの高さ、つまり、バンドの総ライン数をセットする。この値は解析プログラム５２からビデオ信号の出力の指示があったときに同時に与えられる。そして、ステップＳ２２４で解析プログラム５２からの指示が空白バンドの出力指示かチェックし、ＹＥＳならステップＳ２２５で変数ｔに０をセットしてステップＳ２３０へ飛ぶ。
【０２０８】
ステップＳ２２４でＮＯならば、ステップＳ２２６で変数ｌにバンド幅の値をセットする。この値も解析プログラム５２からビデオ信号の出力の指示があったときに同時に与えられる。次に、ステップＳ２２７で解析プログラム５２からの指示が、バンドメモリＡ７１、あるいはバンドメモリＢ７２からのビデオ信号出力指示かチェックし、ＹＥＳならステップＳ２２８で変数ｔに１をセットして、ステップＳ２３０へ飛ぶ。
【０２０９】
ステップＳ２２７でＮＯならば、バンド内に単一のイメージブロックがあって、その圧縮されたイメージブロックデータを、イメージ伸長・ビデオ転送回路７に対して、データ伸長を行なってビデオ信号を出力することを指示していることを意味する。そこで、ステップＳ２２９で変数ｔに２をセットし、変数ｈａにはブロックの上マージン、変数ｈｂにはブロック高さ、つまりブロックの総ライン数、変数ｌａにはブロックの左マージン、変数ｌｂにはブロックの幅をセットする。これらの値も、解析プログラム５２からビデオ信号の出力の指示があったときに、同時に与えられている。そして、ステップＳ２３０へ移る。
【０２１０】
ステップＳ２３０では、変数ｈｐに０をセットする。変数ｈｐは、ビデオ信号を出力すべきバンド上のラインの位置を示すカウンタである。そしてステップＳ２３１で変数ｔが０、あるいは１かチェックし、０か１ならステップＳ２３２でエンジン部４からビデオ信号の出力要求があったかチェックし、ＮＯならループを形成して、この要求があるまで待つ。ビデオ信号出力要求があったなら、ステップＳ２３３で変数ｔが１かチェックし、ＮＯならステップＳ２３５へ飛ぶ。ＹＥＳなら、ステップＳ２３４でバンドメモリＡ７１かＢ７２上のｈｐ番目のラインをビデオ信号に変換して、エンジン部４へ出力してステップＳ２３５へ移る。ステップＳ２３４でバンドメモリＡ７１から出力するのか、バンドメモリＢ７２から出力するのかの指示は、解析プログラム５２からビデオ信号の出力の指示があったときに同時に与えられている。
【０２１１】
ステップＳ２３５では、変数ｈｐに１を加算して、ステップＳ２３６で変数ｈｐが変数ｈよりも小さいかチェックし、ＹＥＳなら、つまりバンド内のラインでまだビデオ信号が送り終っていない部分が残っているなら、ステップＳ２３２の直前に戻って次のラインのビデオ信号出力作業を続ける。
【０２１２】
ステップＳ２３６でＮＯなら、つまりバンド内のすべてのラインはビデオ信号を送り終わったならば、ステップＳ２３７で解析プログラム５２に対して指示のあったバンドのビデオ信号の出力が完了したことを知らせる。この中には、空白バンドの出力処理が完了したことも含まれる。そして、ステップＳ２２１の直前に戻って、解析プログラム５２からの次のビデオ出力指示を待つ。
【０２１３】
ステップＳ２３１でＮＯなら、バンド内のブロックイメージデータからのビデオ信号出力指示であるわけだが、図２８でまずステップＳ２３８でブロックデータ中の第１のラインの圧縮イメージデータの伸長を実行し、伸長したデータをイメージ伸長・ビデオ転送回路７内に存在するラインバッファにセットする。これは、圧縮データの伸長作業を前もってしておくことで、ビデオ信号出力時に伸長作業を行なったのでは、ビデオ出力のタイミングに間に合わなくなることを防ぐためである。
【０２１４】
そのあとステップＳ２３９でループを形成して、エンジン部４からのビデオ信号要求があるまで待ち、あったならばステップＳ２４０で変数ｈｐが変数ｈａより小さいかチェックし、ＹＥＳなら何もせずステップＳ２４７へ飛ぶ。これは、ブロックの上マージンの部分では、ビデオ信号を送らず何もしないことを意味している。
【０２１５】
ステップＳ２４０でＮＯならば、ステップＳ２４１で変数ｈｐが、変数ｈａと変数ｎｂを加算した値より小さいかチェックし、ここでＮＯならばビデオ信号を送らず何もせずステップＳ２４７へ飛ぶ。これは、バンド内でブロックの下の部分が空いているのであれば、つまり、下マージンがあるなら、その部分にはビデオ信号を送らないことを示している。
【０２１６】
ステップＳ２４１でＹＥＳならば、ステップＳ２４２でラインの上で変数ｌａの大きさ分、ビデオ信号を送らず、ステップＳ２４３で変数ｌｂの大きさ分、イメージ伸長・ビデオ転送回路７の中にあるラインバッファ上のデータをビデオ信号に変換して、ビデオ信号をエンジン部４へ出力する。そして、ステップＳ２４４で変数ｈｂｐに、変数ｈｐの値から変数ｈａの値を減算し、さらに１を加算した値をセットする。
【０２１７】
次に、ステップＳ２４５で変数ｈｂｐが変数ｈｂより小さいかチェックし、ＮＯなら、つまりブロック内のすべてのラインのビデオ信号出力が終わったなら何もせずステップＳ２４７へ飛ぶ。
【０２１８】
ステップＳ２４５でＹＥＳなら、つまりブロック内でまだビデオ信号出力していないラインが残っているのなら、ステップＳ２４６でブロックデータ中の変数ｈｂｐ番目のラインの圧縮イメージデータの伸長処理を実行し、伸長したデータをイメージ伸長・ビデオ転送回路７の中にあるラインバッファにセットして、ステップＳ２４７へ飛ぶ。
【０２１９】
これも圧縮データの伸長作業を前もってしておくことで、ビデオ信号出力時に伸長作業を行なったのでは、ビデオ出力のタイミングに間に合わなくなることを防ぐことである。
【０２２０】
ステップＳ２４７では、変数ｈｐに１を加算してから、ステップＳ２４８で変数ｈｐが変数ｈより小さいかチェックし、ＹＥＳならステップＳ２３９の直前に戻って、バンド内の次のラインのビデオ信号出力処理を続ける。
【０２２１】
ステップＳ２４８でＮＯなら、図２７のステップＳ２３７へ飛んで、ビデオ信号の出力が完了したことを解析プログラム５２へ知らせてから、ステップＳ２２１の直前に戻って解析プログラム５２からの次のビデオ信号出力指示を待つ。
【０２２２】
なお、ステップＳ２３７で、イメージ伸長・ビデオ転送回路７が、解析プログラム５２に対してビデオ信号の出力完了を知らせてから、解析プログラム５２が、次のバンドのビデオ信号出力指示をイメージ伸長・ビデオ転送回路７に指示するまでの間は、非常に短時間でなければならない。この間に時間的な空きが入ると、その間、ビデオ信号が出力されないので、印刷された用紙を見ると、そのラインの部分だけ白い筋が入ったような現象となる。つまり、バンドとバンドの間に隙間ができる。
【０２２３】
したがって解析プログラム５２の排紙時のバンドとバンドの間の処理は、極めて迅速に行なわなければならない。
［第１の実施の形態特有の効果］
上記の構成により、本実施の形態はつぎのような効果を奏する。
（１）本実施の形態では、フレームバッファではなく、バンドメモリを設けて、バンド処理による印刷出力を行なうので、メモリが少なくて済む。従ってプリンタ装置を低コストで作成できる。
（２）本実施の形態では、ドライバは文字や罫線はコードやコマンドでプリンタへ転送することになっているので、文字の多い文書や、表の文書ではデータ量が少なくて済む。したがって転送時間が短くなり、印刷処理が迅速に行える。
（３）本実施の形態では、ドライバは、文字や罫線はコードやコマンドでプリンタ転送することになっているが、プリンタ内の処理としてバンドメモリ上への文字や罫線の展開が時間的に間に合わない場合には、文字や罫線をイメージとしてプリンタに送る。これによって、文字や罫線の数の限界は事実上ないことになる。
（４）本実施の形態では、受信バッファへ１ページ分のデータを受信してから印刷を開始する。「ホストベースプリンタ」のように、プリンタへのデータ転送を最優先にするために、ホスト上で他のアプリケーションがロックするというような現象は起こらない。
（５）本実施の形態では、ホスト上のドライバは、バンドの大きさそのもののイメージデータをプリンタに送るのではなくて、バンドの領域の中の、実際にイメージのある矩形部分だけを、プリンタへ送るので、転送データ量は小さくなる。このため、データ転送時間が短くなり印刷時間も短縮できる。
（６）本実施の形態では、空白のバンドがある場合は、コントローラ部では、バンドメモリ上に空白部を展開して、そのビデオ信号をエンジン部に送るのではなく、空白部に相当する部分は、イメージ伸長・ビデオ転送回路に対して、ビデオ信号を送らないよう指示するだけなので、ＣＰＵの負荷が小さくなる。また展開処理が減るため、印刷時間が短くなる。
（７）本実施の形態では、文字や罫線がなく、イメージだけが含まれるバンドがある場合は、コントローラ部では、バンドメモリ上にイメージを展開して、そのビデオ信号をエンジン部に出力するのではなく、圧縮されたイメージデータを、イメージ伸長とビデオ信号への変換、エンジン部への出力を指示するだけなので、ＣＰＵの負荷が小さくなる。またこうすることで展開処理が減るため、印刷時間が短くなる。
［第２の実施の形態］
第１の実施の形態はバンドメモリを有しており、バンドメモリに展開したバンド単位のイメージを、２つのバンドメモリへのイメージの展開と、バンドメモリからの出力を交互に行うことで印刷出力を実現していた。このバンドメモリのかわりに、フレームメモリをプリンタに持たせるようにしても、第１の実施形態と同様のプリンタが実現できる。
【０２２４】
ただし、フレームメモリを有する場合には、メモリ上への文字、罫線、イメージの展開が１ページ分すべて完了してからエンジンの印刷処理を開始する。そのため、一方のバンドメモリから出力している間に他方のバンドメモリへのイメージの展開が終了するか否かのチェック、すなわちバンド内の文字数の限界、罫線数の限界は考慮する必要はない。したがってドライバ上にも限界のチェック機能はいらない。
【０２２５】
このように構成することで、イメージ形成に要する時間をチェックする必要が無くなるので、その分第１の実施の形態のプリンタに対して高速化が図れる。
［第３の実施の形態］
第１の実施の形態では、罫線の展開作業にハードウェアの回路である罫線展開回路を使用していたが、その代わりにソフトウェアを用いて展開作業をしても構わない。動作の詳細は図２３，２４のフローチャートで説明した処理と同一である。
［第４の実施の形態］
第１乃至第３の実施形態のプリンタについて、バンドの数、高さを可変とし、ドライバ上ではイメージデータについて、バンドの単位に繰り返しのイメージのパターンがある場合は、バンドの繰り返しのコマンドをプリンタに送ることで、イメージデータの転送量を小さくすることができる。図を用いて、第４の実施の形態を説明する。
【０２２６】
第１の実施の形態では、１ページは１６バンドに均等に分割することを前提としていたが、第３の実施の形態では、バンドの数、高さを可変とし、ドライバ上ではイメージデータについて、バンド単位に繰り返しのイメージパターンがある場合は、バンドの繰り返しのコマンドをプリンタに送ることで、イメージデータの転送量を小さくしていることが大きな違いである。
【０２２７】
しかし、各種構成要素、プログラムの動作等については、ほとんどは第１の実施の形態と同一であるので、以下では、主に違いのある部分を説明する。
【０２２８】
ブロック構成については、第１の実施の形態の図１と同一なので省略する。本実施の形態では、バンド高さは任意としたが、図１のＲＡＭ９上にある、バンドＡ７１、バンドＢ７２のバンド高さ以下、という制限はある。
【０２２９】
図２９は、原理の説明図である。
【０２３０】
ホスト１のドライバ上で、印刷しようとしている文書を、文字データと罫線データとイメージデータとに分けてプリンタ２に転送することは、第１の実施の形態と同様である。
【０２３１】
本実施の形態では、ドライバがホスト１上に設けたフレームバッファ上に展開した１ページイメージの中で、プリンタ１にイメージデータを送る前に、バンド単位のパターン認識を行ない、繰り返しのバンドがあるかチェックする。ここでは、バンド高さは任意に変えられるとしている。パターン認識の技術については、各種の方法が公知になっているので、ここでの詳細な説明は省略する。
【０２３２】
図２９（Ａ）では、波形の図形を含むイメージＡのバンド、空白バンド、輪の連続の図形を含むイメージＢのバンドセットが、３度繰り返されている。そこで、２度目以降に出現するイメージＡのバンド、イメージＢのバンドについては、最初に出現したイメージＡのバンドデータ、あるいは、イメージＢのバンドデータと同一であることを、プリントコマンドとして、プリンタ２に転送するようにした。文字データ部分の処理については、第２の実施の形態と同一である。
【０２３３】
図２９のような例は、実際の文書では、あまりないと思えるが、図３０のようなイメージのバンドの繰り返しの例は、実際の文書でも頻繁に有り得ると思われる。ただし、この場合は、罫線は全てイメージとして処理すると仮定している。
【０２３４】
この例では、罫線データの部分だけで考えると、図３０（Ａ）のように、バンドの１番からバンドの６番まで分割できて、バンドの１番、２番、６番については、そのまま、イメージデータとしてブロックイメージコマンドをプリンタ２へ転送するが、バンドの３番、４番、５番はバンド２番の繰り返しだとして、「バンド２番の繰り返し」のプリントコマンドをプリンタ２へ転送する。なお、表などの場合には罫線の繰り返しが現れる可能性が高いため、繰り返しパターンとして罫線データを含めることもできる。罫線データはバンド間のパターンの同一性のチェックをイメージに比べて簡単に行えるため、予想される出現頻度の高さを考え合わせれば高い効果が期待できる。
【０２３５】
図３１は、ホスト１からプリンタ２へ送られる文字データ、イメージデータのコマンド構造の説明図である。第１の実施の形態の図３との違いは、バンド開始コマンド８１のあとに、バンド高さコマンド８２、繰り返しバンド番号８３、があることだけである。その他の要素は同一である。
【０２３６】
バンド開始コマンド８１は、１ページあたり任意の個数繰り返される。バンド高さ８２もバンド毎に任意だが、バンドＡ７１、バンドＢ７２のバンド高さ以下である。また繰り返しバンド番号８３は、そのページで出現したバンドの順番で、ページの先頭のバンド番号を１としてあらわす。そのバンドが、繰り返しのイメージを含んでいない場合、つまり新規のイメージを含んだバンドの場合は、−１がセットされる。
＜ドライバプログラム＞
ホストのプリンタドライバにおいては、図３２，３３の手順で処理が行われる。図１０と共通するステップには同一の参照番号を付し、説明は省略する。
【０２３７】
図３２，３３において、ステップＳ９の直後に、フレームバッファ内でバンド単位のパターンの繰り返しが無いか調べ、繰り返しが見つからなければ、バンド管理表に、１ページを１６等分したバンド番号、バンド高さ、パターンを繰返す場合のバンド番号の欄に−１をセットする。一方、もし繰り返しパターンが見出されたなら、ホスト上に設けたバンド管理表にバンド番号，バンド高さ、繰返されるバンド番号をセットする（ステップＳ３２１）。
【０２３８】
その後、ステップＳ１４の直後に、これから送信するバンドについて、切り分けられたバンドの高さを示すバンド高さコマンドと、繰り返しバンド番号コマンドを送信する。繰り返しバンドでない場合には、このコマンドは−１である。
【０２３９】
また、ステップＳ２１の直後に、それが繰り返しイメージを含むバンドであるかテストし、繰り返しであれば実体的なデータはないため、ステップＳ２７の直前に分岐する（ステップＳ３２３）。
【０２４０】
コントローラ部３側では、ＲＯＭ８に内蔵されいるプログラムの名称については、第１の実施の形態の図６で示された内容と同一である。動作についても、解析プログラム５２以外は、第１の実施の形態と同一である。受信部６の動作は、第１の実施の形態と同一、イメージ伸長・ビデオ転送回路７の動作も、第１の実施の形態と同一のなので、説明は省略する。
＜解析プログラムの手順＞
図３４〜図３７は、解析プログラム５２の動作を説明するためのフローチャートである。解析プログラム５２も、プリンタ２の電源オンとともに立ち上がり、以後、受信部６によって書込まれた受信バッファ１０の中のプリントコマンドの解析及び排紙処理を行なう。この手順は図１７〜図２０とほとんど同じであるので、異なる部分のみについて説明する。また、図３５と図３７はそれぞれ図１８，図２０と変わるところがないが、一連の手順の一部であるため示してある。
【０２４１】
図３４にておいて、ステップＳ１１４の直後に、バンド高さを変数ｂｈにセットする（ステップＳ３４１）。また、ステップＳ１２４の直後に、繰り返しバンド番号が−１であるか判定し（ステップＳ３４２）、−１でなければ繰り返しバンドであるため、ｔ＝１であればバンドＡに、ｔ＝２ならばバンドＢに指定されたバンド番号のブロックイメージを、イメージ伸長回路を用いて張り付ける（ステップＳ３４３）。こうすることで、くり返し指定がされたバンドのイメージをバンドメモリを経由して印刷出力できる。
【０２４２】
さらに、図３６において、ステップＳ１５１の直後に、繰り返しバンド番号が−１であるか判定し（ステップＳ３４４）、−１でなければ、すなわち繰り返しバンド指定があるならば、そのバンドのブロックイメージを、イメージ伸長・ビデオ転送回路によりビデオ出力させ（ステップＳ３４５）、繰り返しバンド指定がないならば、第ｎｐ番目のバンドのブロックイメージを、イメージ伸長・ビデオ転送回路によりビデオ出力させる（ステップＳ３４６）。こうすることにより、イメージだけが含まれるバンドを、バンドメモリを用いずに出力させることができる。
＜第４の実施の形態特有の効果＞
（１）本実施の形態では、ドライバがフレームバッファ上のイメージパターンを分析して、バンド単位に同じパターンが繰り返されるときは、繰り返しのバンド部分のデータとして繰り返しのコマンドを送るだけなので、イメージデータの転送量が小さくて済む。また、転送時間が少なくて済む。また、プリンタ側の受信バッファのメモリ消費量も節約できる。
［第５の実施の形態］
次に、図を用いて、第５の実施の形態を説明する。
＜システムの構成＞
第５の実施の形態では、プリンタの受信バッファに納まりきらない巨大なイメージを印刷する場合に、第１〜第４の実施の形態として説明した印刷制御方法のいずれかの代わりに、受信バッファを幾つかの部分に分割し、ひとつの部分から出力している間に他の部分に受信して格納することを繰返して巨大なイメージを印刷する。
【０２４３】
具体的には、文書は全てイメージデータで扱い、プリンタのＲＡＭのほとんどを受信バッファとして使用し、受信バッファ上の巨大イメージページのデータをイメージ伸長・ビデオ転送回路で直接イメージ伸長作業とエンジン部へのビデオ転送作業を行なうことで、巨大イメージページの文書も印刷可能としている。本実施の形態の各種構成要素、プログラムの動作等については、ほとんどは第１の実施の形態と同一であるので、以下では主に違いのある部分を説明する。
【０２４４】
なお、以下の説明では、第１の実施の形態での印刷方式を「合成方式」と呼ぶ。これは、ホスト上では文字と罫線とイメージを分離して扱い、プリンタ上で文字と罫線とイメージの論理和をとって合成して出力するからである。また、巨大イメージを出力する方式を「簡易同期式」と呼ぶ。これは、あまりに１ページのイメージデータが巨大な場合は、ホストからの細かなバンド単位のデータ転送と、プリンタでの用紙の搬送を、成り行きの形で同期させて繰り返すことで印刷を実行するからである。
【０２４５】
図３８，３９は、簡易同期式の原理を説明するための図である。本実施形態のプリンタは受信バッファとして２ＭＢのメモリを備えているものとしている。図３８（ａ）は、圧縮してもその受信バッファ容量を越える巨大イメージを示している。このような巨大イメージは、ホストのプリンタドライバでそのサイズを判定し、図３８（ｂ）のように、最初の１ＭＢで区切り、残りを１００ＫＢずつ区切って各ブロックごとにプリンタに送り付ける。
【０２４６】
図３９は、図３８（ｂ）のようにして送られたイメージを、プリンタにおいて受信し、再構成して印刷する様子を示す図である。ホストから受信したイメージは、ＲＡＭ９内にブロックごとに圧縮されて格納される。プリンタでは、それらブロックを、一つのブロックごとに伸長して印刷出力する。２番目以降のブロックは最初のブロックに比べて小さいため、伸張処理を迅速に行えるので、伸張処理時間によってオーバーランを生じることはない。第５の実施の形態は、上記「合成方式」と「簡易同期式」を合体させたものである。
【０２４７】
【他の実施形態】
なお、本発明は、複数の機器（例えばホストコンピュータ，インタフェイス機器，リーダ，プリンタなど）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機，ファクシミリ装置など）に適用してもよい。
【０２４８】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読出し実行することによっても達成される。
【０２４９】
この場合、記憶媒体から読出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【０２５０】
プログラムコードを供給するための記憶媒体としては、例えば、フロッピディスク，ハードディスク，光ディスク，光磁気ディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，磁気テープ，不揮発性のメモリカード，ＲＯＭなどを用いることができる。
【０２５１】
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳ（オペレーティングシステム）などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
【０２５２】
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
【０２５３】
【発明の効果】
以上説明したように、本発明は、ホストから文書を印刷する際に、ホスト上では、文書を文字データ部分、罫線データ部分と、その他のデータ部分に分け、その他の部分はすべてイメージとして処理する。また、文字データ部分についても、ある文字が最初に出現した場合に、その文字イメージをプリンタへ登録し、それ以降は文字コードによって文字の印字をプリンタへ指示する。これによって文字データ部分は大部分が文字コードになる。また、罫線データ部分は、罫線コマンドとしてプリンタへ転送する。
【０２５４】
こうすることで、本発明によれば、文字部分についてはほとんど文字コードによる処理なので、ホスト上では文字展開時間がそれほどいらないし、データ量も小さい。同様に、罫線部分も、罫線コマンドによる処理なので、ホスト上での罫線展開時間がいらないし、データ量も小さい。よって、文書データだけでなく、表データの高速出力も可能になるという効果がある。
【０２５５】
また、フレームメモリの代わりにバンドメモリを備えることで、必要とするメモリ容量を小さく押さえることが可能になるという効果がある。
【０２５６】
また、バンドメモリへの大量の文字や罫線の展開が時間的に間に合わない場合を考慮して、プリンタコマンドを作成する際には、バンドあたりの文字数や罫線数に限界を設けて、その限界を超える文字や罫線はイメージデータとして処理することで、通常の文書や表データは高速に出力できると同時に、文字数や罫線数が非常に多い場合でもエラーを発生させることなく印刷出力できるという効果がある。
【０２５７】
【図面の簡単な説明】
【図１】第１の実施の形態のシステム全体を説明するためのブロック構成図である。
【図２】イメージデータと文字データと罫線データの合成の原理の説明図である。
【図３】コマンドの構造の説明図である。
【図４】コマンド列の構造の説明図である。
【図５】罫線の座標指定の説明図である。
【図６】ＲＯＭに内蔵されたプログラムを説明するための図である。
【図７】受信バッファのポインタの説明図である。
【図８】横罫線の描画の説明図である。
【図９】縦罫線の描画の説明図である。
【図１０】プリンタドライバの動作を説明するフローチャートである。
【図１１】プリンタドライバの動作を説明するフローチャートである。
【図１２】バンドごとの罫線処理の説明図である。
【図１３】受信管理プログラムの動作を説明するためのフローチャートである。
【図１４】受信管理プログラムの動作を説明するためのフローチャートである。
【図１５】受信部の動作を説明するためのフローチャートである。
【図１６】受信部の動作を説明するためのフローチャートである。
【図１７】解析プログラムの動作を説明するためのフローチャートである。
【図１８】解析プログラムの動作を説明するためのフローチャートである。
【図１９】解析プログラムの動作を説明するためのフローチャートである。
【図２０】解析プログラムの動作を説明するためのフローチャートである。
【図２１】登録プログラムの動作を説明するためのフローチャートである。
【図２２】印字プログラムの動作を説明するためのフローチャートである。
【図２３】罫線展開回路の動作を説明するためのフローチャートである。
【図２４】罫線展開回路の動作を説明するためのフローチャートである。
【図２５】バンドのビデオ出力をする際の各変数の説明図である。
【図２６】イメージ伸長・ビデオ転送回路の動作を説明するためのフローチャートである。
【図２７】イメージ伸長・ビデオ転送回路の動作を説明するためのフローチャートである。
【図２８】イメージ伸長・ビデオ転送回路の動作を説明するためのフローチャートである。
【図２９】第４の実施の形態のイメージバンドの繰り返しの原理の説明図である。
【図３０】イメージバンドの繰り返しの例の説明図である。
【図３１】コマンドの構造の説明図である。
【図３２】プリンタドライバの動作を説明するフローチャートである。
【図３３】プリンタドライバの動作を説明するフローチャートである。
【図３４】解析プログラムの動作を説明するためのフローチャートである。
【図３５】解析プログラムの動作を説明するためのフローチャートである。
【図３６】解析プログラムの動作を説明するためのフローチャートである。
【図３７】解析プログラムの動作を説明するためのフローチャートである。
【図３８】巨大イメージを出力する手順の原理を示す図である。
【図３９】巨大イメージを出力する際のプリンタのようすを示す図である。
【符号の説明】
１  ホスト
２  プリンタ
３  コントローラ部
４  エンジン部
５  ＣＰＵ
６  受信部
７  イメージ伸長・ビデオ転送回路
８  ＲＯＭ
９  ＲＡＭ
１０  受信バッファ
１１  文字データ
１２  罫線データ
１３  イメージデータ
１４  バンドメモリＡ
１５  バンドメモリＢ
１６  ワーク領域
１７  ページ管理表
１８  登録文字管理表
１９  登録文字データ領域
２０  文字伸長回路
２１  罫線展開回路
２２  イメージ伸長回路
３１  ＣＰＵ
３２  メモリ
３３  ＲＯＭ
３４  ＲＡＭ
３５  ビデオ受信部
３６  給紙部
３７  現像定着部
３８  排紙部
【図１】
0003792823.tif 000003
【図２】
0003792823.tif 000004
【図３】
0003792823.tif 000005
【図４】
0003792823.tif 000006
【図５】
0003792823.tif 000007
【図６】
0003792823.tif 000008
【図７】
0003792823.tif 000009
【図８】
0003792823.tif 000010
【図９】
0003792823.tif 000011
【図１０】
0003792823.tif 000012
【図１１】
0003792823.tif 000013
【図１２】
0003792823.tif 000014
【図１３】
0003792823.tif 000015
【図１４】
0003792823.tif 000016
【図１５】
0003792823.tif 000017
【図１６】
0003792823.tif 000018
【図１７】
0003792823.tif 000019
【図１８】
0003792823.tif 000020
【図１９】
0003792823.tif 000021
【図２０】
0003792823.tif 000022
【図２１】
0003792823.tif 000023
【図２２】
0003792823.tif 000024
【図２３】
0003792823.tif 000025
【図２４】
0003792823.tif 000026
【図２５】
0003792823.tif 000027
【図２６】
0003792823.tif 000028
【図２７】
0003792823.tif 000029
【図２８】
0003792823.tif 000030
【図２９】
0003792823.tif 000031
【図３０】
0003792823.tif 000032
【図３１】
0003792823.tif 000033
【図３２】
0003792823.tif 000034
【図３３】
0003792823.tif 000035
【図３４】
0003792823.tif 000036
【図３５】
0003792823.tif 000037
【図３６】
0003792823.tif 000038
【図３７】
0003792823.tif 000039
【図３８】
0003792823.tif 000040
【図３９】
0003792823.tif 000041