(57)【特許請求の範囲】
【請求項１】
ホストコンピュータから受信したデータを一時保存する受信バッファと、
前記受信バッファに一時保存されたデータを解析するコマンド解析部と、
所定の有効定義域内にマクロを保存するマクロバッファと、
受信バッファまたはマクロバッファからデータを読み出し、前記コマンド解析部に読み出したデータを渡すデータルートと、を備え、
前記データルートは、マクロ定義時、前記コマンド解析部からのデータ読み取りリクエストに応じて、前記受信バッファからデータを読み出すとともに、前記マクロバッファに読み出したデータを書き込みポインタを用いて書き込み、
前記コマンド解析部は、前記マクロバッファに解析可能なデータが書き込まれる毎に、前記解析可能なデータの末尾に次書き込み位置マークを設定することを特徴とするプリンタ。
【請求項２】
前記マクロは、コマンドまたは印刷用の文字列からなり、
前記コマンド解析部は、前記ホストコンピュータからマクロ実行コマンドを受信すると、前記マクロバッファに記憶された前記コマンドまたは印刷用の文字列を順次処理することを特徴とする請求項１に記載のプリンタ。
【請求項３】
前記コマンド解析部及び前記データルートは、前記ホストコンピュータから送信されたマクロ定義コマンドとマクロ定義終了コマンドの間に受信したコマンドまたは文字列を前記マクロバッファに記憶することを特徴とする請求項１または２に記載のプリンタ。
【請求項４】
前記コマンド解析部は、前記ホストコンピュータからマクロ定義終了コマンドを受信すると、書き込みポインタの位置に定義領域終端マークを設定することを特徴とする請求項１〜３の何れか１項に記載のプリンタ。
【請求項５】
前記コマンド解析部は、前記書き込みポインタが有効定義域外に移動した場合、前記次書き込み位置マークの位置に前記書き込みポインタを移動させ、前記移動した書き込みポインタの位置に定義領域終端マークを設定することを特徴とする請求項１〜４の何れか１項に記載のプリンタ。
【請求項６】
前記コマンド解析部は、前記データルートが、マクロ定義が禁止されたマクロ定義不可コマンドをマクロバッファに書き込んだ場合には、書き込みポインタの位置を前記次書き込み位置マークに戻すことを特徴とする請求項１〜５の何れか１項に記載のプリンタ。
【請求項７】
ホストコンピュータから受信したデータを一時保存する一時保存ステップと、
前記一時保存されたデータを解析し、データを処理する解析処理ステップと、を備え、
前記解析処理ステップでは、前記データがマクロ定義開始コマンドであった場合、マクロ定義処理を実行するとともに、
前記マクロ定義処理においては、一時保存されたデータを解析処理するとともに、マクロバッファに読み出したデータを書き込みポインタを用いて書き込むステップと、
前記マクロバッファに解析可能なデータが書き込まれる毎に、前記解析可能なデータの末尾に次書き込み位置マークを設定するステップと、を実行することを特徴とするプリンタの制御方法。
【請求項８】
前記マクロは、コマンドまたは印刷用の文字列からなり、
前記ホストコンピュータからマクロ実行コマンドを受信すると、前記マクロバッファに記憶された前記コマンドまたは印刷用の文字列を順次処理することを特徴とする請求項７に記載のプリンタの制御方法。
【請求項９】
前記ホストコンピュータから送信されたマクロ定義コマンドとマクロ定義終了コマンドの間に受信したコマンドまたは文字列を前記マクロバッファに記憶することを特徴とする請求項７または８に記載のプリンタの制御方法。
【請求項１０】
前記ホストコンピュータからマクロ定義終了コマンドを受信すると、書き込みポインタの位置に定義領域終端マークを設定することを特徴とする請求項７〜９の何れか１項に記載のプリンタの制御方法。
【請求項１１】
前記書き込みポインタが有効定義域外に書き込みポインタが移動した場合、前記次書き込み位置マークの位置に前記書き込みポインタを移動させ、前記移動した書き込みポインタの位置に定義領域終端マークを設定することを特徴とする請求項７〜１０の何れか１項に記載のプリンタの制御方法。
【請求項１２】
マクロ定義が禁止されたマクロ定義不可コマンドをマクロバッファに書き込んだ場合には、書き込みポインタの位置を前記次書き込み位置マークに戻すことを特徴とする請求項７〜１１の何れか１項に記載のプリンタの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特定のデータ列をマクロバッファに記憶し、特定のコマンドを受信したときにマクロバッファ中の特定のデータ列に関する処理を実行するプリンタ及びプリンタの制御方法に関する。
【背景技術】
【０００２】
プリンタの中には、複数の特定のデータ列（含むコマンド）をマクロとしてマクロバッファに記憶し、特定のコマンドを受信したときにマクロバッファ中のマクロに関するマクロ処理を実行するものがある。例えば、マクロ中の特定のデータ列として、１行紙送りコマンドと、所定の文字列と、紙送りしつつ用紙カットを行うカットコマンドと、が記憶されていれば、特定のコマンドに応じてマクロとして設定された特定のデータ列を順に実行していくことにより、１行紙送り、所定の文字列印字、及び紙送りしつつ用紙カットが自動的にマクロ処理されることとなる。
【０００３】
ここで、マクロバッファはＲＡＭ中の一定の領域に定義されており、所定のデータ量以上のデータを記憶することはできない。したがって、マクロバッファがバッファフルとなり、マクロバッファに記憶可能なデータ量を超えたデータについては、エラー処理を避けるために、読み捨てられているのが実情であった。
【０００４】
ところで、マクロバッファとは異なるが、イメージバッファの記憶容量を越えた場合において、エラー処理を行なうことなく印字可能とする方法が提案されている。この方法では、テキストメモリ内のデータを複数のブロックに区分し、各ブロックを積算して作成されたドットパターンデータ量がイメージバッファの記憶容量を越えている場合にはイメージバッファに記憶可能なブロック数のドットパターンデータを印字するという処理を行うというものである（例えば、特許文献１参照）。
【０００５】
マクロバッファの場合であっても、バッファフルの場合には、何らかの処理を行わなければユーザが望んだマクロ処理を実行することはできない。そのため、従来では、ユーザが定義すると想定されるマクロの総データ量よりも、すなわち実用上よりも多めにマクロバッファの容量を設定することにより、マクロバッファがバッファフルとなる状態を回避しようとしていた。
【特許文献１】特開平５−３０５７３８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、バッファフルを避けるために実用上よりもマクロバッファの容量を多く設定しておくと、全体としてＲＡＭに要求される容量が増加してしまい、ＲＡＭの利用効率が低下してしまう。ＲＡＭの全容量を増加させない場合には、マクロバッファの割合増加によりＲＡＭ中の他の領域を制限してしまうことになり、好ましくない。
【０００７】
また、バッファフルになった時点で、最後に記録されたコマンドが中途半端に記録されてしまうことがあるが、プリンタは、マクロバッファ中のコマンドの終端を認識していないため、中途半端なコマンドが残されたままの状態となってしまっている。この中途半端なコマンドは、マクロコマンドの実行時に、解析が為されるまで無効であるかどうかわからないため、無駄な処理が行われてしまうこととなる。したがって、中途半端なコマンドがバッファに格納されてしまうのは、好ましくない。
【０００８】
本発明は、上記課題を解決するために為されたものであり、マクロバッファの容量を実用上に見合ったサイズとしつつ、適切にマクロコマンドを処理可能なプリンタ及びプリンタの制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、以下の構成を備える。
（１）  ホストコンピュータから受信したデータを一時保存する受信バッファと、
前記受信バッファに一時保存されたデータを解析するコマンド解析部と、
所定の有効定義域内にマクロを保存するマクロバッファと、
受信バッファまたはマクロバッファからデータを読み出し、前記コマンド解析部に読み出したデータを渡すデータルートと、を備え、
前記データルートは、マクロ定義時、前記コマンド解析部からのデータ読み取りリクエストに応じて、前記受信バッファからデータを読み出すとともに、前記マクロバッファに読み出したデータを書き込みポインタを用いて書き込み、
前記コマンド解析部は、前記マクロバッファに解析可能なデータが書き込まれる毎に、前記解析可能なデータの末尾に次書き込み位置マークを設定することを特徴とするプリンタ。
（２）  前記マクロは、コマンドまたは印刷用の文字列からなり、
前記コマンド解析部は、前記ホストコンピュータからマクロ実行コマンドを受信すると、前記マクロバッファに記憶された前記コマンドまたは印刷用の文字列を順次処理することを特徴とする（１に記載のプリンタ。
（３）  前記コマンド解析部及び前記データルートは、前記ホストコンピュータから送信されたマクロ定義コマンドとマクロ定義終了コマンドの間に受信したコマンドまたは文字列を前記マクロバッファに記憶することを特徴とする（１）または（２）に記載のプリンタ。
（４）  前記コマンド解析部は、前記ホストコンピュータからマクロ定義終了コマンドを受信すると、書き込みポインタの位置に定義領域終端マークを設定することを特徴とする（１）〜（３）の何れか１項に記載のプリンタ。
（５）  前記コマンド解析部は、前記書き込みポインタが有効定義域外に移動した場合、前記次書き込み位置マークの位置に前記書き込みポインタを移動させ、前記移動した書き込みポインタの位置に定義領域終端マークを設定することを特徴とする（１）〜（４）の何れか１項に記載のプリンタ。
（６）  前記コマンド解析部は、前記データルートが、マクロ定義が禁止されたマクロ定義不可コマンドをマクロバッファに書き込んだ場合には、書き込みポインタの位置を前記次書き込み位置マークに戻すことを特徴とする（１）〜（５）の何れか１項に記載のプリンタ。
（７）  ホストコンピュータから受信したデータを一時保存する一時保存ステップと、
前記一時保存されたデータを解析し、データを処理する解析処理ステップと、を備え、
前記解析処理ステップでは、前記データがマクロ定義開始コマンドであった場合、マクロ定義処理を実行するとともに、
前記マクロ定義処理においては、一時保存されたデータを解析処理するとともに、マクロバッファに読み出したデータを書き込みポインタを用いて書き込むステップと、
前記マクロバッファに解析可能なデータが書き込まれる毎に、前記解析可能なデータの末尾に次書き込み位置マークを設定するステップと、を実行することを特徴とするプリンタの制御方法。
（８）  前記マクロは、コマンドまたは印刷用の文字列からなり、
前記ホストコンピュータからマクロ実行コマンドを受信すると、前記マクロバッファに記憶された前記コマンドまたは印刷用の文字列を順次処理することを特徴とする（７）に記載のプリンタの制御方法。
（９）  前記ホストコンピュータから送信されたマクロ定義コマンドとマクロ定義終了コマンドの間に受信したコマンドまたは文字列を前記マクロバッファに記憶することを特徴とする（７）または（８）に記載のプリンタの制御方法。
（１０）  前記ホストコンピュータからマクロ定義終了コマンドを受信すると、書き込みポインタの位置に定義領域終端マークを設定することを特徴とする（７）〜（９）の何れか１項に記載のプリンタの制御方法。
（１１）  前記書き込みポインタが有効定義域外に書き込みポインタが移動した場合、前記次書き込み位置マークの位置に前記書き込みポインタを移動させ、前記移動した書き込みポインタの位置に定義領域終端マークを設定することを特徴とする（７）〜（１０）の何れか１項に記載のプリンタの制御方法。
（１２）  マクロ定義が禁止されたマクロ定義不可コマンドをマクロバッファに書き込んだ場合には、書き込みポインタの位置を前記次書き込み位置マークに戻すことを特徴とする（７）〜（１１）の何れか１項に記載のプリンタの制御方法。
【発明の効果】
【００１０】
本発明によれば、コマンド解析部は、マクロバッファに解析可能なデータが書き込まれる毎に、前記解析可能なデータの末尾に次書き込み位置マークを設定するので、マクロバッファへの書き込み中であっても、マクロとして実行可能なデータを常に確認し続けることが可能となる。即ち、次書き込み位置マークを設定することによって、マクロバッファに実行可能なデータが書き込まれたことを逐一確認することができるため、マクロバッファに書き込まれたデータの信頼性を高めることができる。
【００１１】
また、本発明によれば、コマンド解析部は、ホストコンピュータからマクロ定義終了コマンドを受信すると、書き込みポインタの位置に定義領域終端マークを設定する。このように、本発明によれば、定義領域終端マークを設定するので、マクロ実行時に、マクロの終端がどこであるか確実に判断することができ、マクロバッファに書き込まれているが、マクロの終端以降に書き込まれているデータが実行されてしまうことを未然に防ぐことができる。
【００１２】
また、本発明によれば、コマンド解析部は、書き込みポインタが有効定義域外に書き込みポインタが移動した場合、次書き込み位置マークの位置に前記書き込みポインタを移動させ、前記移動した書き込みポインタの位置に定義領域終端マークを設定する。書き込みポインタが有効定義域外に移動して、データを書き込んだ場合には、次書き込み位置マークを用いて、定義領域終端マークを有効定義域内に設定してやるので、有効定義域内に確実に実行されるマクロコマンドが含まれるように設定してやることができる。これにより、中途半端なコマンドがマクロの有効定義域内に一部残留しても、この中途半端なコマンドが処理されることを未然に防ぐことができる。
【００１３】
また、本発明によれば、コマンド解析部は、データルートがマクロ定義が禁止されたマクロ定義不可コマンドをマクロバッファに書き込んだ場合には、書き込みポインタの位置を前記次書き込み位置マークに戻す。したがって、マクロ定義不可コマンドがマクロバッファに書き込まれても、次書き込み位置マークに書き込みポインタの位置が戻るため、マクロ定義不可コマンドを実行可能なデータから排除することができる。したがって、マクロ定義不可コマンドをマクロバッファに実質的に記憶させないようにすることができ、マクロ定義不可コマンドが実行されることによる誤動作等を未然に防ぐことができる。また、不要なコマンドを記憶させないようにすることにより、実質的に必要なマクロバッファのサイズを小さくすることができる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明にかかるプリンタ及びプリンタの制御方法の一実施形態について、添付図面を参照しながら説明する。
【００１５】
図１は、本発明にかかるプリンタシステムの電気的構成の概要を示すブロック図である。
図１に示すように、本実施形態のプリンタシステム１は、プリンタ１０及びプリンタ１０と通信可能に接続されてプリンタ１０を制御するホストコンピュータ１００から構成されている。
【００１６】
プリンタ１０は、ドットインパクト方式、サーマル方式、インクジェット方式、電子写真方式等の記録方式により、図示せぬ用紙に画像を記録する画像記録装置（印刷装置）である。
【００１７】
プリンタ１０には、ＣＰＵ１２、フラッシュＲＯＭ１４及びＲＡＭ２０が制御部として設けられているとともに、ホストコンピュータ１００との通信を行うインタフェースとして通信インタフェース１８が設けられている。また、プリンタ１０には、制御部と通信をしつつ各種動作を行う機械的または電気的な機構部として、ユーザの走査を受け付けるボタン等からなる操作部３２、用紙の切断を行うカッタ機構３４、用紙に対して印刷（画像記録）を行う印刷機構３６、用紙を搬送する紙送り機構３８、プリンタ１０の状態を表示するＬＥＤランプ等からなる表示部４０が設けられており、これらはＩＦ部１６を介して制御部と通信可能となっている。ここで、ＣＰＵ１２、フラッシュＲＯＭ１４、ＩＦ部１６、通信インタフェース１８及びＲＡＭ２０は、内部バス１５により互いに通信可能に接続されている。
【００１８】
以下、簡単に制御部を構成する各構成要素について説明する。
【００１９】
ＣＰＵ１２は、プリンタ１０の、プリンタ１０の制御中枢であって、フラッシュＲＯＭ１４内の制御用のファームウェアに応じて、プリンタ１０に接続された操作部３２、カッタ機構３４、印刷機構３６、紙送り機構３８及び表示部４０の制御を行いつつ印刷等の所定の処理を実行する。
【００２０】
フラッシュＲＯＭ１４は、プリンタ１０における電気的に書き換え可能な不揮発性メモリである。このフラッシュＲＯＭ１４内部にはプリンタ１０の起動時に実行されるファームウェアが記憶されており、このファームウェアを実行することにより、プリンタ１０がホストコンピュータ１００と通信しつつ動作する。また、フラッシュＲＯＭ１４には、プリンタ１０の動作時において参照される各種設定値（動作の有効無効を示すフラグ、モードを示すフラグ等）が記憶されている。
【００２１】
ＩＦ（インタフェース）部７は、操作部３２、カッタ機構３４、印刷機構３６、紙送り機構３８及び表示部４０の制御を行うドライバである。ＣＰＵ１２からの指示は、このＩＦ部７を介して、各部３２〜４０に伝達され動作制御が行われる。
【００２２】
通信インタフェース１８は、ホストコンピュータ１００との通信を制御するインタフェースである。ホストコンピュータ１００から送信される各種コマンド及び印刷データ、並びにホストコンピュータ１００に送信される各種ステータス信号及び各種データは、この通信インタフェース１８の制御下において送受信が為される。
【００２３】
ＲＡＭ２０は、プリンタ１０における揮発性の記憶メモリであり、例えば、ＣＰＵ１２が各種演算を行ったり、データを展開したりするときのバッファ領域として用いられる。具体的に、ＲＡＭ２０の内部は、受信データを一時的に保存する受信バッファ２２、印刷データが展開されるイメージバッファ２４、マクロを記憶するマクロバッファ２６、各種演算処理に用いられるワークエリア２８等の複数の領域に機能毎に分割されている。
【００２４】
次に、マクロバッファ２６とこのマクロバッファに記憶されるマクロについて説明する。
【００２５】
マクロバッファ２６に記憶されるマクロとは、一または複数のコマンド（印刷データとしての文字列を含む）から構成されているもので、ホストコンピュータ１００から送信されるマクロ実行コマンドに応じて読み出され、格納されている順に順次実行されるものである。このようなマクロは、例えば定型の処理を実行するような場合に、ホストコンピュータ１００から複数のコマンドを逐一送信せずとも、一つのマクロ実行コマンドを送信することによって複数のコマンドに対応した処理を実行できるため、プリンタ１０とホストコンピュータ１００との間の通信速度が遅いような場合に、有効に利用することができる。
【００２６】
マクロバッファ２６は、例えば、所定のサイズの有効定義域（例えば２０４８バイト）を有している。この有効定義域は、プリンタの用途・種類やユーザのニーズに応じて適宜製造時に設定することも可能である。
【００２７】
図２は、マクロバッファ内におけるマクロの記憶例を示す模式図である。
図２の例では、先頭アドレスから順に１３バイト分文字が隙間なく連続的に記憶されている。このマクロバッファ２６は、最初の４バイトの文字「ＸＳ  Ｖ  ６５  １０」で一つのコマンドを表しており、次の１バイトの文字「ＬＦ」で一つのコマンドを表しており、また次の４バイトの文字「ＸＳ  Ｒ  ７０  ８２」で一つのコマンドを表しており、そして最後の４バイトの文字「ＸＳ  Ｒ  ７０  ９０」が一つのコマンドを表している。すなわち、図２に示すマクロバッファ２６には、４つのコマンドが記憶されている。
【００２８】
プリンタ１０は、このマクロバッファ２６内のマクロを実行する場合には、このマクロバッファ２６内の文字を１バイトずつ読み取り、意味のあるコマンドであると理解されたところでそのコマンドに対応する処理を実行する。これにより、マクロが実行されることにより、４つのコマンドに対応する処理が連続的に実行されることとなる。
【００２９】
マクロバッファ２６へのマクロの設定記憶（以下、“マクロの定義”と呼ぶ）は、ホストコンピュータ１００からマクロ定義開始コマンドを受信してから、マクロ定義終了コマンドを受信するまでの間に受信したコマンドまたは文字等のデータをマクロバッファに格納していくことにより実行される。なお、プリンタ１０は、マクロ定義時、マクロバッファにデータを格納するとともに、格納したデータに対応する処理を実行するように構成されている。
【００３０】
ここで、本実施形態においては、このマクロの定義に関し以下のような制約がある。
１）マクロバッファ２６に格納するデータは、文字単位またはコマンド単位である。
２）プリンタの動作に大きな影響を及ぼすある特定のコマンド（具体的には、ホストか      らのプリンタの選択を解除するコマンド）については、マクロとして定義しない。      （マクロバッファ２６に記憶させない）
３）マクロ定義中にマクロバッファ２６の領域を超えるデータの指定があった場合には      、その時点でマクロ定義を終了する。
４）あるコマンドのコマンドコードを書き込んでいる途中で、マクロバッファ２６の領      域を超える場合は、書き込み途中のコマンドに対応するコマンドコードをマクロ定      義から外して、マクロ定義を終了する。
５）マクロ定義中に、マクロの実行コマンド、不揮発性メモリへの書き込み動作を伴う      コマンド、大量のデータを扱うコマンド、モードを切り替えるコマンド、バッファ      クリアを実行するコマンドを処理した場合には、マクロ定義を中止し、マクロ定義      を未定義とする。
【００３１】
以下、図３に示すブロック図と、図４〜図１２に示すフローチャートを参照しながら、プリンタ１０におけるマクロの定義及びマクロの実行について詳細に説明する。
【００３２】
図３は、本実施形態のプリンタ１０における受信側内部処理の一部を示す機能的ブロック図である。
図３に示すように、プリンタ１０では、受信側内部処理を行う機能部として、受信部５２と、データルート５４と、コマンド解析部５６と、を備えている。
【００３３】
受信部５２は、ホストコンピュータ１００から送信される印刷データまたは各種コマンドを受信する受信手段である。受信部５２は、受信した印刷データまたは各種コマンドを受信バッファ２２に順次転送する。ここで、受信バッファ２２は、例えばリングバッファとして構成されており、転送され書き込まれた順にデータが読み出されるように構成されている。
【００３４】
データルート５４は、コマンド解析部５６からのリクエストに応じて、受信バッファ２２、マクロバッファ２６等のバッファからデータを１バイトずつ読み出してコマンド解析部５６に受け渡すデータ処理手段である。データルート５４は、通常時は、コマンド解析部５６のリクエストに応じて受信バッファ２２から順次データを読み出すが、マクロ実行時には、コマンド解析部５６のリクエストに応じてマクロバッファ２６から順次データを読み出す。また、データルート５４は、マクロ定義時には、コマンド解析部５６からのリクエストに応じて受信バッファ２２から順次データを読み出すとともに、マクロバッファ２２に読み出したデータを書き込む処理を行う。
【００３５】
コマンド解析部５６は、受信バッファ２２またはマクロバッファ２６に記憶されたデータをデータルート５４を介して読み出し、データの内容を解析して内容に応じた処理（コマンドの実行、印刷データの処理）を指示する解析処理部である。コマンド解析部５６は、解析結果に応じて、ＲＡＭ２０内のデータを書き換えたり、フラッシュＲＯＭ１４の設定値を書き換えたり、操作部３２，カッタ機構３４，印刷機構３６、紙送り機構３８，表示部４０等に所定の動作を行わせたりする。
【００３６】
なお、本実施形態では、コマンド解析部５６とデータルート５４とを分け、データルートが直接受信バッファ２２及びマクロバッファ２６にアクセスする形態を説明しているが、これに限られず、コマンド解析部５６とデータルート５４とがバッファ制御部として一体に構成され、このバッファ制御部が受信バッファ２２及びマクロバッファ２６にアクセスするように構成されていてもよい。本明細書では、コマンド解析部５６とデータルート５４をまとめて、バッファ制御部と呼ぶこととする。
【００３７】
特に、本実施形態では、コマンド解析部５６は、マクロ定義開始コマンドを受信した場合にはマクロの定義を開始し、マクロ実行コマンドを受信した場合にはマクロバッファ２６中のマクロの処理を行う。
【００３８】
本実施形態では、直接マクロバッファ２６にアクセスしてデータの書き込み／読み出しを行うのはデータルート５４である。データルート５４は、マクロ実行時には、「読み込みポインタ」を用いて読み込みアドレスを管理する。一方、データルート５４は、マクロ定義時には「書き込みポインタ」を用いて書き込みアドレスを管理するとともに、「次書き込み位置マーク」及び「定義領域終端マーク」の２つのマークを用いてマクロバッファを管理する。
【００３９】
まず、各用語の意味を説明する。
「書き込みポインタ」は、次にデータが１バイト書き込まれる位置を示しており、データルート５４は、この書き込みポインタの位置を書き込まれる毎に一つインクリメントしていくことにより、書き込み位置を連続的にずらしていく。
【００４０】
一方、「次書き込み位置マーク」は、コマンド解析部５６によって解釈可能なひとまとまりの文字列やコマンドの終端を示すマークであり、次の文字列やコマンドが書き込まれる位置を示している。
【００４１】
また、「定義領域終端マーク」は、複数のコマンドや文字列からなるマクロの終端、すなわちマクロバッファ２６におけるマクロ定義領域の終端を示すマークである。
【００４２】
以下、書き込みポインタ、次書き込み位置マーク及び定義領域終端マークとデータルート５４について、図４〜図７に示すマクロバッファ２６の模式図を参照しながら、書き込み処理の詳細について説明する。
【００４３】
まず、図４（ａ）に示すように、マクロバッファ２６にデータが書き込まれていない状態（マクロ未定義の状態）では、書き込みポインタ及び次書き込み位置マークは、それぞれ先頭アドレス（アドレス０）に設定されている。
【００４４】
データルート５４がコマンド解析部５６の指示に応じて、マクロバッファ２６へのデータ書き込みを実行すると、図４（ｂ）にしめすように１バイトずつ書き込みを行いつつ書き込みポインタが一つずつずれていく。そして、図４（ｃ）に示すように、「ＸＳ  Ｖ  ６５  １０」という一つのコマンドが書き込まれたとコマンド解析部５６が判断すると、データルート５４は、次書き込み位置マークを書き込みポインタの位置（アドレス４）に移動させる。
【００４５】
そして、図５（ａ）に示すように、アドレス４から「ＸＳ  Ｖ  ３２  ８」というコマンドが書き込まれると、図４（ｄ）と同様に、次書き込み位置マークが書き込みポインタの位置に移動する。そして、これでマクロが終了であれば、図５（ｂ）に示すように、この次書き込み位置マークの位置に定義領域終端マークが設定される。これにより、コマンド解析部５６は、定義領域終端マークを参照することにより、マクロ実行時にどこまでマクロが定義されているかを把握することができる。
【００４６】
ここで、マクロバッファ２６の有効定義域（ここでは、２０４８バイト）を超えてマクロが定義されようとした場合の処理について説明する。例えば、図６（ａ）に示すように、アドレス２０４４までデータが定義され、残り３バイトのところに４バイト以上のデータが書き込まれようとすると、図６（ｂ）に示すように、３バイト分のデータ「ＸＳ  Ｖ  ６５」までは書き込まれるが、４バイト目以降を書き込んだ場合は、コマンド解析部５６がコマンドと認識するまでに書き込まれたデータの総量が２０５２バイトを超えた場合、またはコマンド解析部５６がコマンドを認識後、データの総量が２０４８バイトを超えた場合には、図６（ｃ）に示すように書き込みポインタの位置を次書き込み位置マークの位置に移動し、そして、図６（ｄ）に示すように、この移動した書き込みポインタの位置に定義領域終端マークを設定して、マクロ定義を終了する。
【００４７】
また、マクロバッファ２６への書き込みが禁止されるプリンタの動作に大きな影響を及ぼすある特定のコマンドがマクロバッファ２６に書き込まれようとした場合には、このようなコマンドをマクロバッファ２６に書き込ませない。具体的には、図７（ａ）に示す状態において、書き込みが禁止されている「Ｇ  （  ４  １０」というコマンドを書き込もうとした場合には、図７（ｂ）に示すように一端マクロバッファに書き込まれるが、書き込まれた時点でコマンド解析部５６が禁止コマンドであると判断すると、図７（ｃ）に示すように書き込みポインタの位置を次書き込み位置マークの位置に移動させる。そして、次の文字列又はコマンドをこの書き込みポインタの位置から順に書き込んでいくため、図７（ｄ）に示すように、禁止コマンドは上書きされ、この時点で消去される。そして、次のコマンドが書き込まれた時点で、次書き込み位置マークが書き込みポインタの位置に移動して、消去処理が完了する。
【００４８】
なお、禁止コマンドがマクロ中の最後のコマンドであった場合には、書き込みポインタが移動するだけでマクロバッファ２６上から消去は為されないが、この書き込みポインタの位置に定義領域終端マークが設定されるため、禁止コマンドはマクロ定義外となり、マクロ実行時にも実行されないこととなる。すなわち、禁止コマンドは実質的にマクロバッファ２６に記憶されていないこととなる。
【００４９】
次に、マクロ定義処理及びマクロ実行処理について、図８〜図１６を参照しながら、具体的に説明していく。以下の説明では、受信バッファ２２にデータがバッファされ、その受信データをコマンド解析部５６が読み取って解析を行う説明を中心としてマクロの定義、マクロの実行について説明する。
【００５０】
図８は、コマンド解析部の一般的な処理手順を説明するフローチャートである。
【００５１】
まず、図８に示すように、コマンド解析部５６は、データルート５４に対し、受信バッファ２２からデータを１バイト取得するよう要求する（ステップＳ１１）。データルート５４は、リクエストを受けると図９に示す処理を実行して、受信バッファ２２から１バイトデータを取得し、コマンド解析部５６に送る（この処理については、後述する）。
【００５２】
コマンド解析部５６は、１バイト受領すると受領した１バイトを解析する（ステップＳ１２）。ここでの解析とは、既に受領したデータと今回受領したデータとを組み合わせて、意味のあるコマンド（または文字列）であるかどうかを判断する（ステップＳ１３）。ここで、コマンドが判別されなければ（ステップＳ１３：Ｎｏ）、ステップＳ１１に戻り、再度データルートにリクエストをおこなう。一方、コマンドが判別された場合は（ステップＳ１３：Ｙｅｓ）、ステップＳ１４以降に進む。
【００５３】
ステップＳ１４及びステップＳ１８では、このコマンドがマクロ定義開始コマンドであるか、マクロ実行コマンドであるか、またはその他のコマンドであるかを確認する。ここで、マクロ定義開始コマンドであれば、ステップＳ１５に進んでマクロ定義を開始し、マクロ実行コマンドであればステップＳ１９に進んでマクロの実行処理を行い、その他のコマンドであればステップＳ２１に進んでコマンド内容に応じた処理を実行する。
【００５４】
ステップＳ１５において、マクロ定義を開始するとマクロ定義モードに入り（例えば、ＲＡＭ２０中にマクロ定義フラグを立てる）、ステップＳ１６において書き込みポインタ及びマーク位置をマクロバッファ２６内の先頭アドレス（アドレス０）に設定し、ステップＳ１７においてマクロ定義処理を実行する。
【００５５】
一方、ステップＳ１９において、マクロ実行処理が開始されると、読み込みポインタをマクロバッファ２６内の先頭アドレス（アドレス０）に設定し、ステップＳ２０においてマクロ実行処理を行う。
【００５６】
ステップＳ１７、ステップＳ２０及びステップＳ２１において、マクロ定義開始コマンド、マクロ実行コマンド、またはその他のコマンドに対応する処理が終了すると、コマンド解析部５６は、ステップＳ１に戻って再度受信バッファ２２からのデータ取得解析を繰り返す。
【００５７】
以上が、通常時におけるコマンド解析部５６の処理ルーチンである。
【００５８】
次に、図８におけるマクロ定義処理について説明する。
図９は、マクロ定義時（マクロ定義モード）におけるコマンド解析部の処理手順を説明するフローチャートである。
【００５９】
マクロ定義モードにおいては、図９に示すように、コマンド解析部５６は、データルート５４に対し、データを１バイト取得するよう要求する（ステップＳ３１）。データルート５４は、リクエストを受けると図９に示す処理を実行し、受信バッファ２２から１バイトデータを取得し、コマンド解析部５６に送ると同時に、マクロバッファ２６に取得した１バイトデータを書き込む（この処理については、後述する）。
【００６０】
コマンド解析部５６は、１バイト受領すると受領した１バイトを解析する（ステップＳ３２）。ここでの解析とは、既に受領したデータと今回受領したデータとを組み合わせて、意味のあるコマンド（または文字列）であるかどうかを判断する（ステップＳ３３）。ここで、コマンドが判別されなければ（ステップＳ３３：Ｎｏ）、ステップＳ３１に戻り、再度データルートにリクエストをおこなう。一方、コマンドが判別された場合は（ステップＳ３３：Ｙｅｓ）、ステップＳ３４以降に進む。
【００６１】
ステップＳ３４では、コマンド解析部５６は、解析したコマンドがマクロ中断コマンドであるかどうか判断する。ここで、マクロ中断コマンドとは、マクロの実行コマンド、不揮発性メモリへの書き込み動作を伴うコマンド、大量のデータを扱うコマンド、モードを切り替えるコマンド、バッファクリアを実行するコマンドであり、解析したコマンドがこれらのコマンドであれば、ステップＳ３５に進んでマクロ未定義に設定してマクロ定義モードを終了する。
【００６２】
一方、解析したコマンドがマクロ中断コマンドでなければ、ステップＳ３６に進み、マクロ定義終了コマンドであるかどうか確認する。ここで、マクロ定義終了コマンドであれば（ステップＳ３６：Ｙｅｓ）、マクロを定義済みに設定し定義領域終端マークを書き込みポインタの位置に設定し、マクロ定義モードを終了する（ステップＳ３７）。
【００６３】
一方、ステップＳ３６において、マクロ定義終了コマンドでなければ、ステップＳ３８において開始来たコマンドを実行する。
【００６４】
そして、ステップＳ３９において、書き込みポインタの位置を確認し、書き込みポインタが２０４７バイト目より大きいアドレスに位置していれば、すなわちマクロバッファ２６の有効定義域外に書き込みポインタが位置しているかどうか確認する。ここで、書き込みポインタの位置が有効定義域内であれば、図４（ｃ）→図４（ｄ）のように、次書き込み位置マークの位置を書き込みポインタの位置に移動させて、ステップＳ３１に戻り、マクロ定義を継続する（ステップＳ４１）。
【００６５】
一方、書き込みポインタの位置が有効定義域外であれば、図６（ｂ）→図６（ｄ）のように、現在の次書き込み位置マークの位置に書き込みポインタの位置を移動させる。（ステップＳ４０）。そして、ステップＳ３７に移動して、マクロを定義済みに設定し定義領域終端マークを書き込みポインタの位置に設定し、マクロ定義モードを終了する（ステップＳ３７）。
【００６６】
以上が、マクロ定義時（マクロ定義モード）におけるコマンド解析部５６の処理ルーチンである。
【００６７】
次に、図８及び図９におけるデータルート５４の処理（データルートＡ）について説明する。
図１０は、データルートの処理手順を説明するフローチャートである。本フローチャートは、受信バッファ２２からデータを取得するフローであり、この処理をデータルートＡ処理と呼ぶ
【００６８】
まず、データルート５４は、コマンド解析部５６より１バイトデータを取得するようにリクエストを受けると（ステップＳ５１）、後述するマクロ実行時でなければ、接続先のバッファ、つまり受信バッファ２２から１バイトデータを取得する（ステップＳ５２）。
【００６９】
ここで、データルート５４は、マクロ定義フラグを確認し、マクロ定義中であれば（ステップＳ５３：Ｙｅｓ）、取得したデータをマクロバッファ２６に書き込むとともに（ステップＳ５４）、コマンド解析部５６に取得した１バイトを受け渡して終了する（ステップＳ５５）。
一方、マクロ定義中で無ければ、単にコマンド解析部５６に取得した１バイトを受け渡して終了する（ステップＳ５５）。
【００７０】
図１１は、データルートによるマクロバッファへのデータ書き込み処理（図１０のステップＳ５４の処理）の詳細を示すフローチャートである。
【００７１】
データルート５４は、取得した１バイトデータをマクロバッファ２６の書き込みポインタが示すアドレスに１バイト書き込み（ステップＳ６１）、そして書き込みポインタに１を加えて、書き込みポインタの位置を次アドレスに移動させる（ステップＳ６２）。
【００７２】
次に、書き込みポインタの位置がチェックされ、書き込みポインタの位置が有効定義域に若干の余裕（ここでは２０５２アドレス目、たかだか数アドレス）を加えた領域よりも大きい値を示しているかどうか確認される（ステップＳ６３）。ここで、有効定義域に若干の余裕を加えた範囲内に書き込みポインタが存在していれば（ステップＳ６３：Ｎｏ）、マクロバッファへの書き込み処理を終了、すなわち図１０のステップＳ５４の処理を終了する。
【００７３】
ここで、有効定義域に若干の余裕を加えた範囲内に書き込みポインタが存在していなければ（ステップＳ６３：Ｙｅｓ）、現在の次書き込み位置マークの位置に書き込みポインタの位置を移動させる。（ステップＳ６４）。そして、ステップＳ６５に移動して、マクロを定義済みに設定し定義領域終端マークを書き込みポインタの位置に設定し、マクロ定義モードを終了する（ステップＳ６５）。
【００７４】
以上が、データルートＡ処理時におけるデータルート５４の処理ルーチンである。
【００７５】
次に、図８のステップＳ２１及び図９のステップＳ３８の処理、コマンド解析部５６が解析後に実行するコマンドの実行処理について説明する。
図１２は、解析したコマンド処理時の流れを示すフローチャートである。
【００７６】
まず、コマンド解析部５６は、コマンドの解析を行うと、解析したコマンドを実行し、その処理を行う（ステップＳ７１）。その後、コマンド解析部５６は、マクロ定義中であるかどうか（ステップＳ７２）及び実行したコマンドがマクロ定義不可コマンド（ステップＳ７３）であるかを確認する。何れか一方がＮｏであれば、そのまま終了するが、双方ともＹｅｓであればステップＳ７４に進み、書き込みポインタの位置を次書き込みマークの位置に戻す。すなわち、図７（ｂ）→図７（ｃ）の操作に対応する処理を行い、マクロ定義不可コマンドがマクロバッファ２６に書き込まれてしまうことを防ぐ。
【００７７】
次に、図８におけるマクロ実行処理について説明する。
図１３は、マクロ実行時（マクロ実行モード）におけるコマンド解析部の初期の処理手順を説明するフローチャートである。
【００７８】
マクロ定義モードにおいて、マクロ実行処理が開始されると、まずコマンド解析部５６は、マクロがマクロバッファ２６に定義されているかどうかを確認する（ステップＳ８１）。マクロが定義されているかどうかは、マクロバッファ２６のデータの有無を確認してもよいし、定義時にＲＡＭ２０中にフラグを設定し、そのフラグを確認してもよい。
【００７９】
マクロが定義されていれば（ステップＳ８１：Ｙｅｓ）、読み込みポインタをマクロバッファ２６の先頭（アドレス０）に設定し（ステップＳ８２）、マクロの実行を行う（ステップＳ８３）。
【００８０】
図１４は、マクロの実行時のコマンド解析部の処理を説明するフローチャートである。
【００８１】
図１３のステップＳ８３にて、マクロの実行が開始されると、コマンド解析部５６は、データルート６４にデータをマクロバッファ２６から読み取るようにリクエストする（ステップＳ９１）。データルート５４は、リクエストを受けると図９に示す処理を実行し、受信バッファ２２から１バイトデータを取得し、コマンド解析部５６に送る。一方、データがなければ、データ無しをコマンド解析部５６に戻り値として返す。
【００８２】
そして、データルート９１は、マクロバッファ２６から戻り値が来ると、この戻り値が１バイトデータであるか、データ無しを示すデータであるかを確認する（ステップＳ９２）。ここで、戻り値がデータが無しであれば、マクロを全て読み出したとしてマクロ実行処理を終了する（ステップＳ９２：Ｎｏ）。
【００８３】
一方、戻り値がマクロバッファ２６から読み出された１バイトデータであれば、コマンド解析部５６は、受領した１バイトを解析する（ステップＳ９３）。ここでの解析とは、既に受領したデータと今回受領したデータとを組み合わせて、意味のあるコマンド（または文字列）であるかどうかを判断する（ステップＳ９４）。ここで、コマンドが判別されなければ（ステップＳ９４：Ｎｏ）、ステップＳ９１に戻り、再度データルートにリクエストをおこなう。
【００８４】
一方、コマンドが判別された場合は（ステップＳ９４：Ｙｅｓ）、ステップＳ３４に進み、解析したコマンドを実行する。この処理は、図１２に示す処理と同一である。コマンドの実行が為されると、ステップＳ９１に戻り、マクロバッファ２６からデータが無くなるまで（ステップＳ９２：Ｎｏとなるまで）繰り返される。
【００８５】
図１５は、マクロの実行時のデータルートの処理（データルートＢ）を説明するフローチャートである。本フローチャートは、マクロバッファ２６からデータを取得するフローであり、この処理をデータルートＢ処理と呼ぶ
【００８６】
まず、データルート５４は、コマンド解析部５６より１バイトデータを取得するようにリクエストを受けると（ステップＳ１０１）、マクロ実行時における接続先のバッファ、つまりマクロバッファ２６から読み取りを行い１バイトデータを取得する（ステップＳ５２）。そして、読み取った１バイトデータをコマンド解析部に戻り値として渡す。
【００８７】
図１６は、データルート５６によるマクロバッファの読み取り処理を詳細に示したものである。
【００８８】
まず、データルート５４は、読み込みポインタと定義領域終端マークの位置とを比較し、読み込みポインタの位置が定義領域終端マークのアドレス位置と同値またはそれより大きければ、ステップＳ１１４に移動し、読み取るべきデータがこれ以上ないと判断して、読み取り処理を終了する。
【００８９】
一方、読み込みポインタの位置が定義領域終端マークの手前であれば、ステップＳ１１２に移動し、読み込みポインタ位置の１バイトデータを読み取る。そして、読み込みポインタに１を加えて読み込みポインタの位置を次アドレスに移動させる（ステップＳ１１３）。読み取られた、１バイトデータは、図１５のステップＳ１０３において、コマンド解析部５６に渡される。
【００９０】
以上が、データルートＢ処理時におけるデータルート５４の処理ルーチンである。
【００９１】
このように、本実施形態では、次書き込み位置マークと定義領域終端マークを用いて位置マーキングを行うように構成されている。次書き込み位置マークと定義領域終端マークを上述したような処理によって、書き込みポインタ及び読み込みポインタを適宜移動させるように構成することにより、以下のような効果を達成することができる。
１）マクロで実行できないコマンドをマクロバッファに記憶させないようにする
２）マクロバッファが一杯になったらマクロ定義を確定させ、これ以上定義しない。
３）中途半端なコマンド列は、マクロバッファの有効定義域内に含めない。
【００９２】
したがって、マクロバッファに格納記憶されているデータに基づき、プリンタが誤動作してしまう可能性を予め除去し、使い勝手のよいマクロを提供することが可能となる。また、マクロバッファに不要なデータを記憶させないようにすることができるので、マクロバッファの実質的なサイズを小さくすることができ、ＲＡＭ２０全体の有効活用を図ることが可能である。
【００９３】
なお、本実施形態では、ＲＡＭ２０にマクロバッファ２６を設けるとしたが、これに限られず、フラッシュＲＯＭ１４等の不揮発性メモリにマクロを定義するように構成してもよい。
【図面の簡単な説明】
【００９４】
【図１】本発明にかかるプリンタシステムの電気的構成の概要を示すブロック図である。
【図２】マクロバッファ内におけるマクロの記憶例を示す模式図である。
【図３】本発明にかかるプリンタにおける受信側内部処理の一部を示す機能的ブロック図である。
【図４】マクロバッファへの書き込み処理を示す模式図である。
【図５】マクロバッファへの書き込み処理を示す模式図である。
【図６】マクロバッファへの書き込み処理を示す模式図である。
【図７】マクロバッファへの書き込み処理を示す模式図である。
【図８】コマンド解析部の処理を示すフローチャートである。
【図９】マクロ定義処理を示すフローチャートである。
【図１０】データルートＡ処理を示すフローチャートである。
【図１１】マクロバッファへの書き込み処理を示すフローチャートである。
【図１２】解析したコマンドの実行処理を示すフローチャートである。
【図１３】マクロ実行処理を示すフローチャートである。
【図１４】マクロ実行処理の詳細を示すフローチャートである。
【図１５】データルートＢ処理を示すフローチャートである。
【図１６】マクロバッファからの読み込み処理を示すフローチャートである。
【符号の説明】
【００９５】
１      プリンタシステム
１０    プリンタ
１２    ＣＰＵ
１４    フラッシュＲＯＭ
１６    ＩＦ部
１８    通信インタフェース
２０    ＲＡＭ
２２    受信バッファ
２６    マクロバッファ
５２    受信部
５４    データルート
５６    コマンド解析部
【図１】
0004635831.tif 000002
【図２】
0004635831.tif 000003
【図３】
0004635831.tif 000004
【図４】
0004635831.tif 000005
【図５】
0004635831.tif 000006
【図６】
0004635831.tif 000007
【図７】
0004635831.tif 000008
【図８】
0004635831.tif 000009
【図９】
0004635831.tif 000010
【図１０】
0004635831.tif 000011
【図１１】
0004635831.tif 000012
【図１２】
0004635831.tif 000013
【図１３】
0004635831.tif 000014
【図１４】
0004635831.tif 000015
【図１５】
0004635831.tif 000016
【図１６】
0004635831.tif 000017