(57)【要約】【課題】  プリンタの仕様毎に異なる準備を行うことなく、仕様の異なるプリンタを制御する。【解決手段】  印刷制御装置（１）が、プリンタ（１５）でサポートされている言語種類を前記プリンタから受信する手段と、前記受信した言語種類が前記印刷制御装置でサポートされている特定の言語種類に適合する場合に、前記プリンタがサポートしている仕様に関する仕様情報を取得するための仕様情報取得コマンドを、前記プリンタに送信する手段（２１）と、前記仕様情報取得コマンドに応答して、前記プリンタの仕様情報を前記プリンタから受信する手段（２１）と、前記受信した仕様情報に応じた印刷制御処理を実行する制御手段（２１）とを備える。【選択図】  図２
2010086555.tif 000002
【特許請求の範囲】
【請求項１】
プリンタで特定の言語種類がサポートされているかどうかを表すサポート言語情報を前記プリンタから受信する手段と、
前記受信したサポート言語情報を参照して、前記印刷制御装置でサポートされている前記特定の言語種類が前記プリンタでサポートされているかを判別する手段と、
前記特定の言語種類が前記プリンタでサポートされているとの判別結果が得られた場合に、前記プリンタがサポートしている仕様に関する仕様情報を取得するための仕様情報取得コマンドを前記プリンタに送信する手段と、
前記仕様情報取得コマンドに応答して前記仕様情報を前記プリンタから受信する手段と、
前記受信した仕様情報に応じた印刷制御処理を実行する制御手段と
を備える印刷制御装置。
【請求項２】
前記受信された仕様情報は、各種印刷条件毎に複数の印刷パラメータを含んでおり、
前記制御手段は、前記受信された仕様情報に基づいて、各種印刷条件毎に前記複数の印刷パラメータの中からユーザ所望の印刷パラメータの選択を受け付けるための印刷パラメータ選択画面を表示手段に表示し、前記印刷パラメータ選択画面で選択された印刷パラメータを用いた印刷制御処理を実行する、
請求項１記載の印刷制御装置。
【請求項３】
前記受信された仕様情報は、第一種の印刷条件に関わる複数の第一種印刷パラメータと、第二種の印刷条件に関わる複数の第二種印刷パラメータとを含み、
前記制御手段は、前記印刷パラメータ選択画面において或る第一種印刷パラメータが選択された場合には、前記受信された仕様情報に基づいて、前記或る第一種印刷パラメータに対応した一以上の第二印刷パラメータを選択可能に前記表示手段に表示する、
請求項２記載の印刷制御装置。
【請求項４】
前記仕様情報取得コマンドを送信する前に、前記プリンタが前記印刷制御装置との間で双方向通信を行うどうかを検出する手段と、
所定の印刷パラメータ群を記憶している記憶手段と
を更に備え、
前記プリンタが前記双方向通信を行うとの検出結果が得られ、更に、前記プリンタが前記特定の言語種類をサポートしているとの判別結果が得られたという第一の結果の場合、前記仕様情報取得コマンドを前記プリンタに送信し、
前記プリンタが前記双方向通信を行わないとの検出結果が得られ、更に、前記プリンタが前記特定の言語種類をサポートしているとの判別結果が得られたという第二の結果の場合、前記記憶手段に記憶されている前記印刷パラメータ群中の印刷パラメータに基づいて印刷制御処理を実行する、
請求項１記載の印刷制御装置。
【請求項５】
前記制御手段は、
前記第一の結果の場合には、前記受信された仕様情報中の複数の印刷パラメータを選択可能に受付ける印刷パラメータ選択画面を前記表示手段に表示し、前記第二の結果の場合には、前記所定の印刷パラメータ群中の複数の印刷パラメータを選択可能に受付ける印刷パラメータ画面を前記表示手段に表示し、
前記印刷パラメータ選択画面で選択された印刷パラメータを用いた印刷制御処理を実行する、
請求項４記載の印刷制御装置。
【請求項６】
一つの印刷ジョブに関する複数のクラスが入れ子構造になっており、
前記複数のクラスには、少なくとも、第一のクラスと、前記第一のクラスに入れ込まれた第二のクラスとが含まれており、
前記制御手段が、前記入れ子構造に基づき、或る印刷ジョブについて、
前記第一のクラスに関する処理の開始を意味するコマンドを前記プリンタに送信した後に、前記第二のクラスに関する処理の開始を意味するコマンドを前記プリンタに送信し、
前記第二のクラスに関する処理の終了を意味するコマンドを前記プリンタに送信した後に、前記第一のクラスに関する処理の終了を意味するコマンドを前記プリンタに送信する、
請求項１記載の印刷制御装置。
【請求項７】
コンピュータを印刷制御装置として動作させるためのコンピュータプログラムであって、
プリンタで特定の言語種類がサポートされているかどうかを表す、前記プリンタから受信されたサポート言語情報を参照するステップと、
前記コンピュータプログラムでサポートされている前記特定の言語種類が前記プリンタでサポートされているかを判別するステップと、
前記特定の言語種類が前記プリンタでサポートされているとの判別結果が得られた場合に、前記プリンタがサポートしている仕様に関する仕様情報を取得するための仕様情報取得コマンドを前記プリンタに送信するステップと、
前記仕様情報取得コマンドに応答して前記プリンタから受信した前記仕様情報に応じた印刷制御処理を実行するステップと
をコンピュータに実行させるためのコンピュータプログラム。
【請求項８】
印刷制御装置と、
前記印刷制御装置に接続されるプリンタと
を備え、
前記印刷制御装置が、
前記プリンタで特定の言語種類がサポートされているかどうかを表すサポート言語情報を前記プリンタから受信する手段と、
前記受信したサポート言語情報を参照して、前記印刷制御装置でサポートされている前記特定の言語種類が前記プリンタでサポートされているかを判別する手段と、
前記特定の言語種類が前記プリンタでサポートされているとの判別結果が得られた場合に、前記プリンタがサポートしている仕様に関する仕様情報を取得するための仕様情報取得コマンドを前記プリンタに送信する手段と、
前記仕様情報取得コマンドに応答して前記仕様情報を前記プリンタから受信する手段と、
前記受信した仕様情報に応じた印刷コマンドを前記プリンタに送信する制御手段と
を備え、
前記プリンタが、
前記サポート言語情報を記憶する第一の記憶手段と、
前記仕様情報を記憶する第二の記憶手段と、
前記第一の記憶手段に記憶されているサポート言語情報を前記印刷制御装置に送信する手段と、
前記印刷制御装置でサポートされている前記特定の言語種類が前記プリンタでサポートされていると前記印刷制御装置で判別された場合に、前記仕様情報取得コマンドを前記印刷制御装置から受信する手段と、
前記仕様情報取得コマンドに応答して前記第二の記憶手段に記憶されている仕様情報を前記印刷制御装置に送信する手段と、
前記印刷制御装置からの印刷コマンドに従う印刷処理を行う処理手段と
を備える、
プリントシステム。
【請求項９】
前記印刷制御装置が、
前記仕様情報取得コマンドを送信する前に、前記プリンタが前記印刷制御装置との間で双方向通信を行うどうかを検出する手段と、
前記プリンタの仕様情報とは別の所定の仕様情報を記憶している記憶手段と
を更に備え、
前記プリンタが前記双方向通信を行うとの検出結果が得られ、更に、前記プリンタが前記特定の言語種類をサポートしているとの判別結果が得られたという第一の結果の場合、前記仕様情報取得コマンドを前記プリンタに送信し、前記仕様情報取得コマンドに応答して受信した前記仕様情報に応じた印刷パラメータを前記プリンタに送信し、
前記プリンタが前記双方向通信を行わないとの検出結果が得られ、更に、前記プリンタが前記特定の言語種類をサポートしているとの判別結果が得られたという第二の結果の場合、前記記憶手段に記憶されている前記所定の仕様情報に応じた印刷パラメータを前記プリンタに送信し、
前記プリンタが、前記プリンタの仕様では処理できない別の仕様に基づく印刷パラメータを前記印刷制御装置から受けた場合、前記受けた印刷パラメータを、前記プリンタの仕様に基づく印刷パラメータに変更する手段を備え、
前記プリンタの前記処理手段が、変更後の前記印刷パラメータに基づいて印刷処理を行う、
請求項８記載のプリントシステム。
【請求項１０】
前記プリンタの前記変更する手段が、予め定められた第一種と第二種の印刷条件の優先順位に基づき、優先順位の高い第一種の印刷条件に対応した第一種印刷パラメータを優先的に変更し、優先順位の低い第二種の印刷条件に対応した第二種印刷パラメータを、変更後の第一種印刷パラメータに応じて変更する、
請求項９記載のプリントシステム。
【請求項１１】
前記仕様情報は、複数種類の印刷条件と、各種印刷条件に対応した一以上の印刷パラメータとを含んでおり、
前記プリンタの仕様情報を送信する手段が、印刷条件の種類に基づく入れ子構造になった複数の印刷パラメータを前記印刷制御装置に送信する、
請求項８記載のプリントシステム。
【請求項１２】
一つの印刷ジョブに関する複数のクラスが入れ子構造になっており、
前記複数のクラスには、少なくとも、第一のクラスと、前記第一のクラスに入れ込まれた第二のクラスとが含まれており、
前記制御手段が、前記入れ子構造に基づき、或る印刷ジョブについて、
前記第一のクラスに関する処理の開始を意味するコマンドを前記プリンタに送信した後に、前記第二のクラスに関する処理の開始を意味するコマンドを前記プリンタに送信し、
前記第二のクラスに関する処理の終了を意味するコマンドを前記プリンタに送信した後に、前記第一のクラスに関する処理の終了を意味するコマンドを前記プリンタに送信し、
前記プリンタが、前記第二のクラスに関する処理の開始を意味するコマンドを受けた後、該第二のクラスに関する処理の終了を意味するコマンドを受ける前に、前記第一のクラスに関する処理の開始又は終了を意味するコマンドを受けた場合には、該受けたコマンドを読み捨てる、
請求項８記載のプリントシステム。
【請求項１３】
印刷制御装置とプリンタにより実現される印刷制御方法において、
プリンタが、前記プリンタで特定の言語種類がサポートされているかどうかを表すサポート言語情報を前記印刷制御装置に送信するステップと、
印刷制御装置が、前記プリンタから受信したサポート言語情報を参照して、前記印刷制御装置でサポートされている前記特定の言語種類が前記プリンタでサポートされているかを判別するステップと、
前記印刷制御装置が、前記特定の言語種類が前記プリンタでサポートされているとの判別結果が得られた場合に、前記プリンタがサポートしている仕様に関する仕様情報を取得するための仕様情報取得コマンドを前記プリンタに送信するステップと、
前記プリンタが、前記印刷制御装置から受信した前記仕様情報取得コマンドに応答して、前記仕様情報を前記印刷制御装置に送信するステップと、
前記印刷制御装置が、前記プリンタから受信した仕様情報に応じた印刷コマンドを前記プリンタに送信するステップと、
前記プリンタが、前記印刷制御装置からの印刷コマンドに従う印刷処理を行うステップと
を有する印刷制御方法。
【請求項１４】
印刷制御装置に接続されるプリンタにおいて、
プリンタで特定の言語種類がサポートされているかどうかを表すサポート言語情報を記憶する第一の記憶手段と、
プリンタがサポートしている仕様に関する仕様情報を記憶する第二の記憶手段と、
前記第一の記憶手段に記憶されているサポート言語情報を印刷制御装置に送信する手段と、
前記印刷制御装置でサポートされている前記特定の言語種類が前記プリンタでサポートされていると前記印刷制御装置で判別された場合に、前記仕様情報取得コマンドを前記印刷制御装置から受信する手段と、
前記仕様情報取得コマンドに応答して前記第二の記憶手段に記憶されている仕様情報を前記印刷制御装置に送信する手段と、
前記仕様情報を受けた前記印刷制御装置から印刷コマンドを受信する手段と、
前記受信した印刷コマンドに従う印刷処理を行う処理手段と
を備えるプリンタ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、印刷制御のための技術に関する。
【背景技術】
【０００２】
印刷制御のための技術として、例えば、特許文献１に開示の技術がある。
【０００３】
デジタルカメラがプリンタに接続されている。プリンタは、ハードウェア仕様をデジタルカメラに通知し、デジタルカメラは、そのハードウェア仕様に対応した印刷条件設定ファイルを複数の印刷条件設定ファイルの中から抽出し、抽出した印刷条件設定ファイルの内容をカラー液晶パネルに表示する。カラー液晶パネルを介してユーザに選択された印刷条件に基づいて、印刷の制御が行われる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−１７５６５７号公報（例えば段落６９〜段落７８）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、上述した技術によれば、プリンタのハードウェア仕様毎に、予め、デジタルカメラに印刷設定条件ファイルを準備しておく必要がある。このような準備をしなくても、ハードウェア仕様等のプリンタ仕様の異なる複数のプリンタを制御することができれば便利である。
【０００６】
従って、本発明の一つの目的は、プリンタの仕様毎に異なる準備を行うことなく、仕様の異なるプリンタを制御することにある。
【０００７】
本発明の更なる目的は、後述の記載から明らかになるであろう。
【課題を解決するための手段】
【０００８】
本発明の第一の側面に従う印刷制御装置は、プリンタで特定の言語種類がサポートされているかどうかを表すサポート言語情報を前記プリンタから受信する手段と、前記受信したサポート言語情報を参照して、前記印刷制御装置でサポートされている前記特定の言語種類が前記プリンタでサポートされているかを判別する手段と、前記特定の言語種類が前記プリンタでサポートされているとの判別結果が得られた場合に、前記プリンタがサポートしている仕様に関する仕様情報を取得するための仕様情報取得コマンドを前記プリンタに送信する手段と、前記仕様情報取得コマンドに応答して前記仕様情報を前記プリンタから受信する手段と、前記受信した仕様情報に応じた印刷制御処理を実行する制御手段とを備える。
【０００９】
前記制御手段は、例えば、前記受信した仕様情報に基づいて印刷コマンドを生成し、生成した印刷コマンドを前記プリンタに送信することができる。
【００１０】
また、印刷制御装置は、前記プリンタにおいて或る言語種類を処理する或る言語処理モードになっている場合、前記特定の言語種類を処理する特定言語処理モードに移行するためのコマンドを前記プリンタに送信する手段を備え、それにより、前記プリンタに或る言語処理モードから前記特定言語処理モードに移行させてから、前記特定の言語種類に基づく印刷制御処理を開始してもよい。印刷制御装置は、例えば、プリンタにおいてどんな言語処理モードになっているかを、プリンタに問い合わせたり、或いは、プリンタにどんなコマンドを送信してきたかを管理したりすることにより、判別することができる。もし、別の言語処理モードと前記或る言語処理モードが既存の言語処理モードである場合、プリンタにおいて、別の言語処理モードになっている場合に、特定の言語処理モードに移行させるならば、印刷制御装置は、別の言語処理モードから前記或る言語処理モードに移行させるためのコマンドを送信し、その後に、前記或る言語処理モードから前記特定言語処理モードに移行させるためのコマンドを送信することにより、別の言語処理モードから特定言語処理モードに移行させることができる。
【００１１】
印刷制御装置の第一の実施態様では、前記受信された仕様情報は、各種印刷条件毎に複数の印刷パラメータを含んでいてもよい。その場合、前記制御手段は、前記受信された仕様情報に基づいて、各種印刷条件毎に前記複数の印刷パラメータの中からユーザ所望の印刷パラメータの選択を受け付けるための印刷パラメータ選択画面を表示手段（例えばディスプレイモニタ）に表示し、前記印刷パラメータ選択画面で選択された印刷パラメータを用いた印刷制御処理を実行することができる。
【００１２】
印刷制御装置の第二の実施態様では、前記第一の実施態様において、前記受信された仕様情報は、第一種の印刷条件に関わる複数の第一種印刷パラメータと、第二種の印刷条件に関わる複数の第二種印刷パラメータとを含んでいてもよい。この場合、前記制御手段は、前記印刷パラメータ選択画面において或る第一種印刷パラメータが選択された場合には、前記受信された仕様情報に基づいて、前記或る第一種印刷パラメータに対応した一以上の第二印刷パラメータを選択可能に前記表示手段に表示することができる。なお、受信された仕様情報では、どの第一種印刷パラメータが選択された場合にはどの一以上の第二種印刷パラメータが選択可能かを前記制御手段が理解できるように対応付けされていてもよい。
【００１３】
印刷制御装置の第三の実施態様では、印刷制御装置は、前記仕様情報取得コマンドを送信する前に、前記プリンタが前記印刷制御装置との間で双方向通信を行うどうかを検出する手段と、所定の印刷パラメータ群（例えば、各種印刷条件毎に予め用意された印刷パラメータを含む印刷パラメータ群）を記憶している記憶手段とを更に備えることができる。この場合、印刷制御装置は、前記プリンタが前記双方向通信を行うとの検出結果が得られ、更に、前記プリンタが前記特定の言語種類をサポートしているとの判別結果が得られたという第一の結果の場合、前記仕様情報取得コマンドを前記プリンタに送信することができる。また、印刷制御装置は、前記プリンタが前記双方向通信を行わないとの検出結果が得られ、更に、前記プリンタが前記特定の言語種類をサポートしているとの判別結果が得られたという第二の結果の場合、前記記憶手段に記憶されている前記印刷パラメータ群中の印刷パラメータに基づいて印刷制御処理を実行することができる。
【００１４】
印刷制御装置の第四の実施態様では、前記第三の実施態様において、前記制御手段は、前記第一の結果の場合には、前記受信された仕様情報中の複数の印刷パラメータを選択可能に受付ける印刷パラメータ選択画面を前記表示手段に表示し、前記第二の結果の場合には、前記所定の印刷パラメータ群中の複数の印刷パラメータを選択可能に受付ける印刷パラメータ画面を前記表示手段に表示することができる。また、前記制御手段は、前記印刷パラメータ選択画面で選択された印刷パラメータを用いた印刷制御処理を実行することができる。
【００１５】
印刷制御装置の第五の実施態様では、一つの印刷ジョブに関する複数のクラスが入れ子構造になっていてもよい。前記複数のクラスには、少なくとも、第一のクラスと、前記第一のクラスに入れ込まれた第二のクラスとが含まれていてもよい。この場合、前記制御手段が、前記入れ子構造に基づき、或る印刷ジョブについて、前記第一のクラスに関する処理の開始を意味するコマンドを前記プリンタに送信した後に、前記第二のクラスに関する処理の開始を意味するコマンドを前記プリンタに送信し、前記第二のクラスに関する処理の終了を意味するコマンドを前記プリンタに送信した後に、前記第一のクラスに関する処理の終了を意味するコマンドを前記プリンタに送信することができる。
【００１６】
この第五の実施態様では、例えば、以下の具体的な実施態様が考えられる。
【００１７】
すなわち、前記複数のクラスには、印刷ジョブに関わる印刷条件に関する第一のクラスと、前記第一のクラスに入れ込まれたクラスであって、印刷ジョブの本体に関する第二のクラスと、前記第二のクラスに入れ込まれたクラスであって、印刷ジョブを構成するページに関する第三のクラスと、前記第三のクラスに入れ込まれたクラスであって、ページに記述されたデータに関する第四のクラスとが含まれている。この場合、前記制御手段は、前記入れ子構造に基づき、或る印刷ジョブについて、（１）〜（４）の処理、
（１）該印刷ジョブに関わる印刷条件を前記プリンタに送信する処理、
（２）該印刷ジョブの本体の始まりを意味するコマンドを前記プリンタに送信する処理、
（３）該印刷ジョブの各ページ毎に、ページの開始を意味するコマンドの送信と、該ページに記述されたデータの送信と、該ページの終了を意味するコマンドの送信とを、ページの数に応じて繰り返し行う処理、
（４）最後のページについて該ページの終了を意味するコマンドを送信した後に、該印刷ジョブの終了を意味するコマンドを送信する処理、
を、前記（１）〜（４）の順番で行うことができる。
【００１８】
本発明の第二の側面に従うコンピュータプログラムは、コンピュータを印刷制御装置として動作させるためのコンピュータプログラムであって、プリンタで特定の言語種類がサポートされているかどうかを表す、前記プリンタから受信されたサポート言語情報を参照するステップと、前記コンピュータプログラムでサポートされている前記特定の言語種類が前記プリンタでサポートされているかを判別するステップと、前記特定の言語種類が前記プリンタでサポートされているとの判別結果が得られた場合に、前記プリンタがサポートしている仕様に関する仕様情報を取得するための仕様情報取得コマンドを前記プリンタに送信するステップと、前記仕様情報取得コマンドに応答して前記プリンタから受信した前記仕様情報に応じた印刷制御処理を実行するステップとをコンピュータに実行させる。これらの各ステップは、例えば、このコンピュータプログラムがプロセッサ（例えばＣＰＵ）に読みこまれることにより実行することができる。また、そのコンピュータプログラムは、受信された情報、又は、送信される情報を、コンピュータに備えられる記憶手段（例えばメモリ）に記憶させることができる。
【００１９】
本発明の第三の側面に従うプリントシステムは、印刷制御装置と、前記印刷制御装置に接続されるプリンタとを備える。前記印刷制御装置が、前記プリンタで特定の言語種類がサポートされているかどうかを表すサポート言語情報を前記プリンタから受信する手段と、前記受信したサポート言語情報を参照して、前記印刷制御装置でサポートされている前記特定の言語種類が前記プリンタでサポートされているかを判別する手段と、前記特定の言語種類が前記プリンタでサポートされているとの判別結果が得られた場合に、前記プリンタがサポートしている仕様に関する仕様情報を取得するための仕様情報取得コマンドを前記プリンタに送信する手段と、前記仕様情報取得コマンドに応答して前記仕様情報を前記プリンタから受信する手段と、前記受信した仕様情報に応じた印刷コマンドを前記プリンタに送信する制御手段とを備える。前記プリンタが、前記サポート言語情報を記憶する第一の記憶手段と、前記仕様情報を記憶する第二の記憶手段と、前記第一の記憶手段に記憶されているサポート言語情報を前記印刷制御装置に送信する手段と、前記印刷制御装置でサポートされている前記特定の言語種類が前記プリンタでサポートされていると前記印刷制御装置で判別された場合に、前記仕様情報取得コマンドを前記印刷制御装置から受信する手段と、前記仕様情報取得コマンドに応答して前記第二の記憶手段に記憶されている仕様情報を前記印刷制御装置に送信する手段と、前記印刷制御装置からの印刷コマンドに従う印刷処理を行う処理手段とを備える。
【００２０】
プリントシステムの第一の実施態様では、前記印刷制御装置が、前記仕様情報取得コマンドを送信する前に、前記プリンタが前記印刷制御装置との間で双方向通信を行うどうかを検出する手段と、前記プリンタの仕様情報とは別の所定の仕様情報を記憶している記憶手段とを更に備えることができる。また、前記印刷制御装置が、前記プリンタが前記双方向通信を行うとの検出結果が得られ、更に、前記プリンタが前記特定の言語種類をサポートしているとの判別結果が得られたという第一の結果の場合、前記仕様情報取得コマンドを前記プリンタに送信し、前記仕様情報取得コマンドに応答して受信した前記仕様情報に応じた印刷パラメータを前記プリンタに送信することができる。また、前記印刷制御装置が、前記プリンタが前記双方向通信を行わないとの検出結果が得られ、更に、前記プリンタが前記特定の言語種類をサポートしているとの判別結果が得られたという第二の結果の場合、前記記憶手段に記憶されている前記所定の仕様情報に応じた印刷パラメータを前記プリンタに送信することができる。前記プリンタが、前記プリンタの仕様では処理できない別の仕様に基づく印刷パラメータを前記印刷制御装置から受けた場合、前記受けた印刷パラメータを、前記プリンタの仕様に基づく印刷パラメータに変更する手段を備えることができる。前記プリンタの前記処理手段が、変更後の前記印刷パラメータに基づいて印刷処理を行うことができる。
【００２１】
プリントシステムの第二の実施態様では、前記第一の実施態様において、前記プリンタの前記変更する手段が、予め定められた第一種と第二種の印刷条件の優先順位に基づき、優先順位の高い第一種の印刷条件に対応した第一種印刷パラメータを優先的に変更し、優先順位の低い第二種の印刷条件に対応した第二種印刷パラメータを、変更後の第一種印刷パラメータに応じて変更することができる。
【００２２】
具体的には、例えば、前記印刷制御装置は、第一種の印刷条件に関する第一種印刷パラメータと、第二種の印刷条件に関する第二種印刷パラメータとを前記プリンタに送信することができる。前記プリンタが、複数種類の第二種印刷パラメータのうちのどの第二種印刷パラメータが採用された場合には複数種類の第一種印刷パラメータのうちのどの一以上の第一種印刷パラメータを採用することができるかを表したパラメータ管理情報を記憶する第三の記憶手段を備えることができる。前記プリンタの前記変更する手段が、前記第二種印刷パラメータが前記プリンタの仕様に対応しておらず、且つ、前記第一種の印刷条件よりも前記第二種の印刷条件の方が優先度が高いことが前記プリンタに予め定められている場合には、前記印刷制御装置から受けた第二種印刷パラメータを前記プリンタの仕様に応じた第二種印刷パラメータに変更し、変更後の第二種印刷パラメータに対応した一以上の第一種印刷パラメータを前記パラメータ管理情報を参照することにより特定し、前記印刷制御装置から受けた第一印刷パラメータに基づいて、前記特定された一以上の第一種印刷パラメータの中から印刷処理のための第一種印刷パラメータを選択することができる。前記プリンタの前記処理する手段が、前記変更後の第二種印刷パラメータと前記選択された第一種印刷パラメータとに基づいて印刷処理を行うことができる。
【００２３】
プリントシステムの第三の実施態様では、前記仕様情報は、複数種類の印刷条件と、各種印刷条件に対応した一以上の印刷パラメータとを含んでいてもよい。前記プリンタの仕様情報を送信する手段が、印刷条件の種類に基づく入れ子構造になった複数の印刷パラメータを前記印刷制御装置に送信することができる。なお、前記プリンタが、更に、複数の印刷パラメータを、印刷条件の種類に基づく入れ子構造にする手段を備えてもよい。この場合、前記仕様情報を送信する手段が、前記入れ子構造にする手段によって入れ子構造にされた複数の印刷パラメータを送信することができる。
【００２４】
この第三実施態様では、例えば、第一種の印刷条件よりも第二種の印刷条件の方が高いという優先順位が予めプリンタに定められている場合、プリンタは、優先順位の高い第一種の印刷条件に対応した或る第一種印刷パラメータに対し、優先順位の低い第二種の印刷条件に対応した印刷パラメータであって、該或る第一種印刷パラメータに対応した一以上の第二種印刷パラメータを入れ子にして、該或る第一種印刷パラメータと該一以上の第二種印刷パラメータとを印刷制御装置に送信する。
【００２５】
プリントシステムの第四の実施態様では、一つの印刷ジョブに関する複数のクラスが入れ子構造になっていてもよい。前記複数のクラスには、少なくとも、第一のクラスと、前記第一のクラスに入れ込まれた第二のクラスとが含まれていてもよい。この場合、前記制御手段が、前記入れ子構造に基づき、或る印刷ジョブについて、前記第一のクラスに関する処理の開始を意味するコマンドを前記プリンタに送信した後に、前記第二のクラスに関する処理の開始を意味するコマンドを前記プリンタに送信し、前記第二のクラスに関する処理の終了を意味するコマンドを前記プリンタに送信した後に、前記第一のクラスに関する処理の終了を意味するコマンドを前記プリンタに送信することができる。前記プリンタは、前記第二のクラスに関する処理の開始を意味するコマンドを受けた後、該第二のクラスに関する処理の終了を意味するコマンドを受ける前に、前記第一のクラスに関する処理の開始又は終了を意味するコマンドを受けた場合には、該受けたコマンドを読み捨てることができる。
【００２６】
本発明の第四の側面に従う印刷制御方法は、プリンタが、前記プリンタで特定の言語種類がサポートされているかどうかを表すサポート言語情報を前記印刷制御装置に送信するステップと、印刷制御装置が、前記プリンタから受信したサポート言語情報を参照して、前記印刷制御装置でサポートされている前記特定の言語種類が前記プリンタでサポートされているかを判別するステップと、前記印刷制御装置が、前記特定の言語種類が前記プリンタでサポートされているとの判別結果が得られた場合に、前記プリンタがサポートしている仕様に関する仕様情報を取得するための仕様情報取得コマンドを前記プリンタに送信するステップと、前記プリンタが、前記印刷制御装置から受信した前記仕様情報取得コマンドに応答して、前記仕様情報を前記印刷制御装置に送信するステップと、前記印刷制御装置が、前記プリンタから受信した仕様情報に応じた印刷コマンドを前記プリンタに送信するステップと、前記プリンタが、前記印刷制御装置からの印刷コマンドに従う印刷処理を行うステップとを有する。
【００２７】
本発明の第五の側面に従うプリンタは、プリンタで特定の言語種類がサポートされているかどうかを表すサポート言語情報を記憶する第一の記憶手段と、プリンタがサポートしている仕様に関する仕様情報を記憶する第二の記憶手段と、前記第一の記憶手段に記憶されているサポート言語情報を印刷制御装置に送信する手段と、前記印刷制御装置でサポートされている前記特定の言語種類が前記プリンタでサポートされていると前記印刷制御装置で判別された場合に、前記仕様情報取得コマンドを前記印刷制御装置から受信する手段と、前記仕様情報取得コマンドに応答して前記第二の記憶手段に記憶されている仕様情報を前記印刷制御装置に送信する手段と、前記仕様情報を受けた前記印刷制御装置から印刷コマンドを受信する手段と、前記受信した印刷コマンドに従う印刷処理を行う処理手段とを備える。
【００２８】
プリンタは、例えば、プリンタから印刷制御装置に送信される所定の情報を送信する際にその所定の情報に含めてサポート言語情報を送ることもできるし、それとは関係なくわざわざサポート言語情報を送ることもできる。
【００２９】
上述した印刷制御装置、プリントシステム及びプリンタにおける各手段は、ハードウェア、コンピュータプログラム、或いはそれらの組み合わせによって実現することができる。また、各手段の処理は、一つの要素（例えば、ハードウェア、コンピュータプログラム又はそれらの組み合わせ）によって行うこともできるし、複数の要素によって行うこともできる。
【図面の簡単な説明】
【００３０】
【図１】図１は、本発明の一実施形態に係るプリントシステムの構成例を示す。
【図２】図２は、レイアウト管理テーブル６１の構成例を示す。
【図３】図３は、印刷方法管理テーブル６３の構成例を示す。
【図４】図４は、本実施形態に係るプリントシステムにおいて行われる通信を処理するプロトコル層の構成例を示す。
【図５】図５は、ソフトウェア群に含まれる複数のコンピュータプログラムと、複数のコンピュータプログラムにより構成される印刷パスを示す。
【図６】図６は、プリンタ１５に存在する複数の言語処理モードと言語処理モードの遷移の流れとを示す。
【図７】図７は、本実施形態に係るプリントシステムで行われる処理流れの概要の一部を示す。
【図８】図８は、本実施形態に係るプリントシステムで行われる処理流れの概要の他の一部を示す。
【図９】図９Ａは、デバイスＩＤの構成例を示す。図９Ｂは、ホスト装置１に送信される仕様情報の構造の概念を表す。図９Ｃは、ホスト装置１に送信される仕様情報の具体例を示す。
【図１０】図１０は、印刷パラメータ選択画面８０の構成例を示す。
【図１１】図１１Ａは、特定言語で記述されたコマンドのフォーマット例を示す。図１１Ｂは、クラスフィールドに書かれるクラスの種類の一例を示す。
【図１２】図１２は、図８のＳ１５の印刷処理で行われる具体的な処理流れの一例を示す。
【図１３】図１３Ａは、ソフトウェア群３７の構成例を示す。図１３Ｂは、ＤＰＣ１３１がコントロールするモジュール群３３５の一例を示す。図１３Ｃは、モジュールの配列を表す情報の構成例を示す。図１３Ｄは、モジュールのステータスの遷移の様子を示す。
【図１４】図１４Ａは、各モジュールが有する機能を示す。図１４Ｂは、イニシエータモジュール、メンバモジュール及びターミネータモジュールの各々が有する機能を示す。
【図１５】図１５は、印刷パスにおけるデータ処理の流れの一例を示す。
【図１６】図１６は、レガシー言語で記述されたコマンドを受信した後に特定言語で記述されたコマンドを受信した場合にプリンタ１５で行われる一連の処理流れの一部を示す。
【図１７】図１７は、図１６で示した流れの続きの流れを示す。
【図１８】図１８は、図１７で示した流れの続きの流れを示す。
【図１９】図１９は、本発明の一実施形態の第一変形例におけるプリンタドライバの構成例を示す。
【図２０】図２０は、図１９のプリンタドライバからデータを受信するプリンタにおける印刷パスの構成例を示す。
【発明を実施するための最良の形態】
【００３１】
以下、図面を参照して本発明の一実施形態を説明する。なお、以下の説明では、画像が印刷されるメディアを便宜上「用紙」と称するが、「用紙」は、紙に限らず、他種の印刷メディア、例えば、ＣＤ（Compact Disk）やＯＨＰフィルム等であってもよい。
【００３２】
図１は、本発明の一実施形態に係るプリントシステムの構成例を示す。
【００３３】
ホスト装置（例えばパーソナルコンピュータ）１のインタフェース回路（以下、「Ｉ／Ｆ」と略記）３と、プリンタ１５のＩ／Ｆ１３とがケーブル８を介して接続されている。Ｉ／Ｆ３及びＩ／Ｆ１３は、例えば、ＵＳＢプロトコルに従う通信を行うインタフェース回路、又は、パラレル通信を行うインタフェース回路である。
【００３４】
ホスト装置１は、入力装置５（例えば複数の入力キーやポインティングデバイス）と、ディスプレイ画面７と、ホスト記憶域１９と、プロセッサ（例えばＣＰＵ）１７とを備える。入力装置５とディスプレイ画面７は、例えばタッチ式パネルのように、一体になっていてもよい。
【００３５】
ホスト記憶域１９は、例えば、メモリ及びハードディスクのうちの少なくとも一方が有する記憶領域である。ホスト記憶域１９には、例えば、画像データを出力するアプリケーションソフト２２と、アプリケーションソフト２２から出力されたＲＧＢ表色系の画像データを必要に応じて処理しプリンタ１５に転送するプリンタドライバ２１とが記憶される。アプリケーションソフト２２やプリンタドライバ２１は、プロセッサ１７に読み込まれることにより、動作する。プロセッサ１７に読み込まれたプリンタドライバ２１が行う処理については、後に詳述する。
【００３６】
プリンタ１５は、どのような種類のプリンタであってもよい（例えばレーザプリンタであっても、インクジェットプリンタ等のようなシリアルプリンタであってもよい）。プリンタ１５は、画像や文字等のオブジェクトを印刷する印刷エンジン４３と、ホスト装置１からのコマンドに基づいて印刷データを生成する印刷コントローラ３１と、印刷コントローラ３１により生成された印刷データに基づいて印刷エンジン４３を制御するエンジンコントローラ４１とを備える。また、プリンタ１５は、Ｉ／Ｆ１３の他に、別のＩ／Ｆ７３を備えることができる（これについては、後述する）。
【００３７】
印刷コントローラ３１は、プリンタ記憶域３３とプロセッサ（例えばＣＰＵ）３５とを備える。
【００３８】
プリンタ記憶域３３は、一又は複数の記憶装置（例えば、揮発性のメモリと不揮発性のメモリとのうちの少なくとも一方）により提供される記憶領域である。プリンタ記憶域３３には、例えば、ソフトウェア群３７と、レイアウト管理テーブル６１と、印刷方法管理テーブル６３とが記憶される。
【００３９】
ソフトウェア群３７は、プロセッサ３５に読み込まれることにより動作する複数のコンピュータプログラムを含んでいる。例えば、ソフトウェア群３７は、ホスト装置１からＲＧＢ表色系の画像データを受け、その画像データを別の表色系（例えばＣＭＹ表色系）の画像データに変換する色変換処理を行い、更に、ハーフトーニング処理（例えば二値化処理）を行うことができる。
【００４０】
レイアウト管理テーブル６１には、どんな用紙サイズではどんな用紙種類がありどんなレイアウトが可能かが記録されている。例えば、図２に例示するように、レイアウト管理テーブル６１には、複数の用紙種類の各々について、用紙種類を表す用紙種類パラメータと、その用紙種類をサポートしている各用紙サイズを表す各用紙サイズパラメータと、その用紙サイズで可能なレイアウトを表すレイアウトパラメータとが記録されている。図２によれば、例えば、このプリンタ１５では、用紙サイズ「Ａ４」が指定された場合には、プロセッサ３５は、レイアウト管理テーブル６１を参照することにより、用紙サイズ［Ａ４］に対応した用紙種類が「写真用紙」、「光沢紙」、「フォトマット紙」及び「普通紙」であることと、いわゆる縁なし印刷と縁有り印刷とのうちのどちらも行うことができることとを特定することができる。
【００４１】
なお、パラメータは、例えば、人間が理解できる言葉をテキスト形式で表したものであっても良いし、人間は理解できないがコンピュータプログラムが理解できるコードであっても良い。後者の場合、例えば、プリンタドライバ２１は、パラメータを人間が理解できる言葉で表示することができる。
【００４２】
印刷方法管理テーブル６３には、どんな用紙種類でどんな印刷品質の場合にどのような印刷処理を行うかが記録されている。例えば、図３に例示するように、印刷方法管理テーブル６３には、どんな用紙種類パラメータでどんな印刷品質パラメータの場合に、出力解像度（換言すれば、印刷された画像の解像度）をどんな値にし、双方向印刷と単方向印刷のどちらを採用し、ドットサイズのバージョンとしてどれを採用するかが記録されている。図３によれば、例えば、用紙種類パラメータ「写真用紙」で印刷品質パラメータ「High」が指定された場合には、プロセッサ３５は、印刷方法管理テーブル６３を参照することにより、単方向印刷且つドットサイズバージョン「VSD3」で、出力解像度「横2880dpi×横720dpi」の画像を印刷すべきであることを特定することができる。
【００４３】
なお、図３を参照すればわかるように、この実施形態では、印刷品質パラメータとして、「High」、「Normal」及び「Draft」の３つが採用される（これらの３種類に限定する必要は無い）。「High」は、画質が最も良いことを意味し、「Normal」は、画質は「High」程ではないが印刷速度は「High」よりも速いことを意味し、「Draft」は、画質は「Normal」程ではないが印刷速度は「Normal」よりも早いことを意味する。
【００４４】
また、この実施形態において、「双方向印刷」とは、主操作方向に往復移動する印刷ヘッドが往路でも復路でもドットを打つことを意味し、それに対し、「単方向印刷」とは、印刷ヘッドが往路又は復路のどちらか一方ではドットを打つが他方ではドットを打たないことを意味する。つまり、図３のテーブル６３は、プリンタ１５がシリアルプリンタの場合の一例である。図３のテーブル６３では、「双方向印刷ON」が双方向印刷を行うことを意味し、「双方向印刷OFF」が双方向印刷を行わないことを意味する。また、図３のテーブル６３において、「ON/OFF」の表記があるが、これは、双方向印刷と単方向印刷のどちらでも可能であることを意味する。双方向印刷よりも単方向印刷の方が高品質の印刷結果が得られやすい。
【００４５】
また、この実施形態において、「ドットサイズバージョン」とは、印刷ヘッドから吐出するインク滴の量を表す。この実施形態では、「VSD」の後に続く数値が大きいほど、インク滴の量が少なく、それゆえ、高精細の印刷結果が得られやすい。
【００４６】
図４は、本実施形態に係るプリントシステムにおいて行われる通信を処理するプロトコル層の構成例を示す。
【００４７】
この実施形態では、最下層に物理層があり、その上に、IEEE1284.4のプロトコル層（以下、IEEE1284.4を便宜上「D4」と称する）があり、更にその上に、アプリケーション層（以下、「AP層」と略記）がある。ホスト装置１では、プリンタドライバ２１もアプリケーションソフト２２も、AP層での通信を行う。
【００４８】
なお、Ｄ４プロトコル層は、必ずしも、ホスト装置１とプリンタ１５との両方に存在するものではなく、例えば、いずれか片方にしか存在しない場合や、両方に存在しない場合もあり得る。
【００４９】
さて、以下、本実施形態についてより詳細に説明する。
【００５０】
図５は、ソフトウェア群に含まれる複数のコンピュータプログラムと、複数のコンピュータプログラムにより構成される印刷パスを示す。
【００５１】
ソフトウェア群３７には、例えば、ハードウェアインタフェースドライバ（以下、「ＩＦＤ」と略記）１０１と、データ取得モジュール１０３と、レガシー言語処理モジュール１０５と、印刷エンジンドライバ（以下、「ＰＥＤ」と略記）１０７と、特定言語処理モジュール１１３と、色変換／ハーフトーニング処理モジュール１１５と、インタフェース処理モジュール１１７と、印刷処理モジュール１１９と、データ処理パスコントローラ（以下、ＤＰＣ）１３１とが含まれている。
【００５２】
ＩＦＤ１０１は、所定のハードウェア（例えばＩ／Ｆ３）の動作を制御するコンピュータプログラムとして存在し、ＰＥＤ１０７は、エンジンコントローラ４１の動作を制御するコンピュータプログラムとして存在する。そして、モジュール１０３、１０５、１１３、１１５、１１７及び１１９は、データ処理パスを管理するＤＰＣ１３１からの指示により、動的に起動又は終了することができる。
【００５３】
例えば、プリンタ１５には、ＤＰＣ１３１からの指示により、データ取得モジュール１０３及びレガシー言語処理モードモジュール１０５が起動することで、それらのモジュール１０３及び１０５を構成要素として備えるレガシーパスが構築される。レガシーパスとは、例えば、従前から存在する種類の言語（以下、「レガシー言語」と言う）で書かれたコマンドが流れるデータ処理パス（このパスはプリンタにおけるパスなので、以下、「印刷パス」と称することがある）であり、より具体的には、例えば、ＲＧＢからＣＭＹへの色変換やハーフトーニング処理が施された印刷画像データが流れる印刷パスである。印刷画像データは、例えば、プリンタ１５のインク構成（例えば、インクの色、色数、又は種類）やインク滴の構成（例えば、大中小の三段階）、更には印字ヘッド（図示せず）のノズル数やノズルピッチに対応している。
【００５４】
また、プリンタ１５は、印刷画像データだけでなく、ＲＧＢ表色系の画像データ（以下、ＲＧＢ画像データ）を入力し、そのＲＧＢ画像データに基づいて印刷画像データを生成し、生成した印刷画像データを用いて印刷を行うことができるようになっている。具体的には、例えば、プリンタ１５は、別のＩＦＤ１１１の制御により、別のＩ／Ｆ７１を介して、ホスト装置１とは別のデバイス７３（例えば、メモリカード或いはデジタルカメラ）からＲＧＢ画像データを受信し、そのＲＧＢ画像データの印刷画像データを生成して印刷を行うことができる。以下の説明では、印刷画像データ（つまり、ＲＧＢからＣＭＹへの色変換処理が施されたデータ）が流れる印刷パスを「レガシーパス」と称するのに対し、ＲＧＢ画像データが流れる印刷パスを「ＲＧＢ印刷パス」と称する。ＤＰＣ１３１によって、特定言語処理モジュール１１３、色変換／ハーフトーニング処理モジュール１１５、インターレース処理モジュール１１７及び印刷処理モジュール１１９が起動されることにより、それらのモジュール１１３、１１５、１１７及び１１９を構成要素とするＲＧＢ印刷パスが構築される。
【００５５】
この実施形態では、例えば、プリンタ１５と、プリンタ１５の通信相手デバイスとの間で、これから入力されるデータの種別が特定される所定のネゴシエーションが行われた場合には、ＲＧＢ印刷パスが構築され（例えば、レガシーパスを構築することなくＲＧＢ印刷パスが構築され）、レガシーパスを介することなく、別のＩＦＤ１１１を介して、ＲＧＢ画像データがＲＧＢ印刷パスに入力される。換言すれば、上記所定のネゴシエーションによりこれからＲＧＢ画像データが入力されることが特定された場合には、別のＩＦＤ１１が、ＲＧＢ画像データの入口として採用され、ＲＧＢ印刷パスが構築される。
【００５６】
一方、この実施形態では、例えば、プリンタ１５と、プリンタ１５の通信相手デバイスとの間で、これから入力されるデータの種別が特定される所定のネゴシエーションが行われなかった場合には、レガシーパスが構築され、レガシーパスにデータが入力される。換言すれば、例えば、上記所定のネゴシエーションが行われなかった場合には、ＩＦＤ１０１が、入力されるデータの入口として採用され、レガシーパスが構築される。その後、レガシーパスにデータが入力され、そのデータが実はＲＧＢ画像データであることが判明した場合には、プリンタ１５では、レガシーパスが有効になったままＲＧＢ印刷パスが構築され、ＲＧＢ画像データが、レガシーパスを介してＲＧＢ印刷パスに入力される。
【００５７】
このように、プリンタ１５には、ホスト装置１から受信した印刷画像データが流れるレガシーパスと、ホスト装置１とは別のデバイス７３から受信したＲＧＢ画像データが流れるＲＧＢ印刷パスとを構築することができる。プリンタ１５は、ホスト装置１からのデータやコマンドが流れる印刷パスを、レガシーパスからＲＧＢ印刷パスに切り替えることができる。
【００５８】
具体的には、例えば、ホスト装置１からのデータやコマンドは、Ｉ／Ｆ３で受信される。ＩＦＤ１０１は、ホスト装置１からのデータやコマンドを、例えば、プリンタ記憶域３３（又は、Ｉ／Ｆ１３のメモリ（図示せず））上に設けられたデータバッファ１３３に蓄積する。データバッファ１３３に蓄積されたデータやコマンドは、データ取得モジュール１０３により、読み出され（例えば所定サイズ毎に読み出され）、レガシー言語処理モジュール１０５に渡される。レガシー言語処理モジュール１０５は、渡されたコマンドの記述言語を判別し、レガシー言語で書かれていると判別した場合、そのコマンドを解釈し、それの解釈結果に基づいて、ＰＥＤ１０７を制御するためのコマンドをＰＥＤ１０７に出力する。つまり、レガシー言語処理モジュール１０５は、渡されたコマンドの記述言語がレガシー言語であれば、レガシー言語処理モードを実行する。ＰＥＤ１０７は、レガシー言語処理モジュール１０５からのコマンドに基づいて、エンジンコントローラ４１を制御することにより、印刷エンジン４３を制御する。
【００５９】
一方、レガシー言語処理モジュール１０５は、渡されたコマンドの記述言語が特定言語であると判別した場合には、そのコマンドを、特定言語処理モジュール１１３に渡し、それ以降、特定言語処理モードの終了命令（又は、別の言語処理モードへの移行命令）を受信するまで、取得されるコマンドやデータを格別解釈することなく特定言語処理モジュール１１３へ転送する。
【００６０】
特定言語処理モジュール１１３は、特定言語処理モードを実行する。特定言語処理モードとは、従前から存在する種類の言語に加えて新規に設けられた種類の言語（以下、「特定言語」と言う）を処理するモードである。特定言語とは、例えば、ホスト装置１から入力されるコマンドが、ＲＧＢ表色系の画像データを印刷するためのコマンドであることを表す言語である。特定言語処理モジュール１１３は、例えば、レガシー言語処理モジュール１０５から渡されるコマンドを解釈し、その解釈結果に基づく処理を実行したり、渡されるＲＧＢ画像データを色変換／ハーフトーニング処理モジュール１１５に渡したりする。色変換／ハーフトーニング処理モジュール１１５は、渡されたＲＧＢ画像データをＣＭＹ画像データに変換し、且つ、変換後のＣＭＹ画像データに対してハーフトーニング処理を施し、ハーフトーニング処理が施されたＣＭＹ画像データをインターレース処理モジュール１１７に出力する。インターレース処理モジュール１１７は、必要に応じて（例えばプリンタドライバ２１からの指示に応じて）、インターレース印刷が行われるための処理を、上記出力されたＣＭＹ画像データに施し、そのＣＭＹ画像データをイメージバッファ（図示せず）に出力する。イメージバッファは、例えば、プリンタ記憶域３３に設けられており、印刷ヘッドのノズル構成などに基づく構成となっている。印刷処理モジュール１１９は、そのイメージバッファに出力されたＣＭＹ画像データに基づいて、ＰＥＤ１０７を制御するためのコマンドを生成し、そのコマンドをＰＥＤ１０７に出力する。ＰＥＤ１０７は、印刷処理モジュール１１９からのコマンドに基づいて、エンジンコントローラ４１を制御することにより、印刷エンジン４３を制御する。
【００６１】
以上が、プリンタ１５において行われる印刷処理の概要である。なお、本実施形態において、例えば、特定言語処理モジュール１１３は、レガシー言語処理モジュール１０５を介してではなく、データバッファ１３３からデータやコマンドを取得してもよい。また、レガシー言語は、例えば、ＥＳＣ／Ｐ（Epson Standard Code for Printer）とすることができる。それに対し、特定言語は、例えば、ＲＧＢ画像データを送信するということから、「ＥＳＣ／Ｐ−Ｒ」と称することができる。
【００６２】
図６は、プリンタ１５に存在する複数の言語処理モードと言語処理モードの遷移の様子とを示す。
【００６３】
プリンタ１５には、前述したレガシー言語処理モード及び特定言語処理モードの他に、リモートモードと他の言語処理モード（例えば、PostScriptを処理するモード）とがある（リモートモードの存在意義については後述する）。プリンタ１５では、ホスト装置１からの指示により、レガシー言語処理モードを基点に、モード遷移が行われる。例えば、プリンタ１５は、特定言語処理モードから一旦レガシー言語処理モードに遷移してから、リモートモードに遷移することができるようになっており、特定言語処理モードから直接リモートモードへ遷移することができるようにはなっていない。逆の場合も同様で、プリンタ１５は、リモートモードから特定言語処理モードへの遷移を行うためには、リモートモードからレガシー言語処理モードを介して特定言語処理モードへ遷移するようになっている。特定言語処理モードは、プリンタ１５に新たに搭載された言語処理モードのため、従前から用意されているレガシー言語処理モードとの間でのみ遷移する方が、エラーの発生頻度の少ない安定性の高いプリンタ１５を作成する観点から好ましいと考えられる。
【００６４】
言語処理モードの遷移の制御は、例えば、レガシー言語処理モジュール１０５が実行することができる。レガシー言語処理モジュール１０５は、例えば、レガシー言語処理モード中に、特定言語処理モードへの移行コマンドを受信した場合には、それ以降に受信するコマンドを、特定言語で記述されたコマンドとして認識する。レガシー言語処理モジュール１０５は、特定言語処理モード中に、特定言語処理モードへの移行コマンド（及び／又は、リモートモードや他の言語処理モードへの移行コマンド）を受けた場合には、それを無視する（例えば読み捨てる）。
【００６５】
また、例えば、レガシー言語処理モジュール１０５は、特定言語処理モード中に、レガシー言語処理モードへの移行コマンドを受信した場合には、それ以降に受信するコマンドを、レガシー言語で記述されたコマンドとして認識する。レガシー言語処理モジュール１０５は、レガシー言語処理モード中に、レガシー言語処理モードへの移行コマンドを受信した場合には、それを無視する（例えば読み捨てる）。
【００６６】
また、例えば、レガシー言語処理モジュール１０５は、特定言語処理モードへ移行する以前に、レガシー言語処理モードやリモートモードにおいて少なくとも一種類の項目が設定された場合、以下の（１）〜（４）の項目
（１）給紙パスに関する設定（例えば、どの給紙トレーから用紙を取り込むか、どの排紙ビンに用紙を排出するか）、
（２）用紙サイズや印刷領域（例えば、縁有りと縁無しのどちらか）に関する設定、
（３）印刷モード（例えば、印刷品質及び用紙種類）に関する設定、
（４）メカ制御に関する設定（例えば給紙シーケンス）、
のうちの少なくとも一つの項目については、設定を初期値に戻し、特定言語処理モード中に受信した設定（特定言語で書かれた設定）を採用する。
【００６７】
以下、本実施形態に係るプリントシステムで行われる処理流れの概要を説明し、その後で、その処理流れにおける各ステップで行われる処理の詳細について説明する。なお、以下の説明では、レガシー言語処理モードを「レガシーモード」と略記し、特定言語処理モードを「特定モード」と略記する場合がある。
【００６８】
図７及び図８は、本実施形態に係るプリントシステムで行われる処理流れの概要を示す。
【００６９】
ホスト装置１のＩ／Ｆ３がプリンタ１５のＩ／Ｆ１３に通信可能に接続される（ステップＳ１）。この場合、ホスト装置１が、プリンタ１５が単方向通信と双方向通信のどちらを行うかを判別する（Ｓ２）。例えば、ホスト装置１とプリンタ１５との通信がＵＳＢにより行われる場合には、ホスト装置１は、デバイスディスクリプタをプリンタ１５から受信し、そのデバイスディスクリプタを解析することにより、プリンタ１５が単方向通信と双方向通信のどちらを行うかを判別することができる。また、例えば、ホスト装置１がプリンタ１５にパラレルでデータを送信するようになっている場合、ホスト装置１は、所定の信号線（例えばリバースの信号線）のレベルが変化したか否かにより、プリンタ１５が単方向通信と双方向通信のどちらを行うかを判別することができる。
【００７０】
ホスト装置１は、デバイスＩＤ（デバイスを識別するためのＩＤ）をプリンタ１５に問い合わせる（Ｓ３）。プリンタ１５は、その問合せに応答して、デバイスＩＤをホスト装置１に送信する（Ｓ４）。なお、プリンタ１５は、自分が特定モードを実行できる場合には、その旨を表す情報（以下、「特定言語サポート情報」と言う）を、デバイスＩＤのＣＭＤフィールドにセットし、特定言語サポート情報がセットされたデバイスＩＤを、ホスト装置１に送信する。デバイスＩＤには、例えば、図９Ａに例示するように、データ長フィールドや、ＭＦＧフィールドや、ＣＭＤフィールドがある。プリンタ１５は、データ長フィールドに、デバイスＩＤのデータ長（例えば何バイトであるか）をセットし、ＭＦＧフィールドに、プリンタ１５のメーカＩＤ（例えばメーカ名）をセットし、ＣＭＤフィールドに、特定言語サポート情報をセットすることができる。もし、プリンタ１５が、特定モードを実行することができないプリンタである場合には、ＣＭＤフィールドには別の情報をセットする（何もセットせず空きフィールドになっていてもよい）。また、特定モードに複数種類のレベルが存在する場合には、プリンタ１５は、自分がサポートしている特定モードのレベルをＣＭＤにセットしても良い。例えば、プリンタドライバ２１は、特定モードのレベルとして「１」がセットされていれば、プリンタ１５には特定モードの処理のために必要最低限の機能が搭載されていると判断し、レベルが「２」以降がセットされていれば、その必要最低限の機能よりも多くの機能としてどんな機能がプリンタ１５に搭載されているかを判別することができる。なお、レベル「２」以降では、例えば、後述するクラスの追加、コマンドの追加、パラメータユニットの追加及びパラメータの追加のうちの少なくとも一つを行うことができる。パラメータユニットが追加される場合には、新たにコマンドが追加されてもよい。パラメータの追加は、同一コマンドでの追加が許可されてもよい。プリンタ１５は、コマンドサポートレベルと合わないパラメータを受けた場合には、そのパラメータを無視してもよい。
【００７１】
図７に示すように、ホスト装置１は、プリンタ１５からプリンタＩＤを受信する（Ｓ５）。以上のＳ１〜Ｓ５の処理は、物理層で行われる。そして、それ以降のＳ６〜Ｓ１５の処理は、ＡＰ層で行うことができ、場合によっては、Ｄ４プロトコル層がＡＰ層での処理をサポートすることができる。なお、「場合によっては」と記載したのは、ホスト装置１及びプリンタ１５の少なくとも一方がＤ４プロトコル層を備えていない場合や、Ｄ４プロトコル層を備えていてもその層が利用されない場合があるからである。
【００７２】
さて、ホスト装置１のプリンタドライバ２１は、受信したプリンタＩＤのＣＭＤフィールドを解析する（Ｓ６）。プリンタドライバ２１は、それにより、プリンタ１５が特定モードをサポートしているか否かを判別することができる（例えば、特定言語サポート情報を検出した場合には、プリンタ１５では特定言語がサポートされていると判断できる）。また、Ｓ２において、プリンタ１５が単方向通信を行うか双方向通信を行うかが判別されており、例えば、その判別結果が記録された記憶領域を参照する等の方法により、プリンタドライバ２１は、Ｓ２での判別結果を取得することができる。従って、プリンタドライバ２１は、プリンタ１５が、以下の（ａ）〜（ｃ）、
（ａ）単方向通信を行い、且つ、特定モードに対応していること、
（ｂ）双方向通信を行い、且つ、特定モードに対応していること、
（ｃ）単方向通信を行うか双方向通信を行うかに関わらず特定モードをサポートしていないこと、
のいずれに該当するかを、判断することができる（Ｓ７）。
【００７３】
Ｓ７において、プリンタ１５が（ｃ）に該当すると判断された場合、プリンタドライバ２１は、レガシーモードに対応した印刷制御処理を実行する（Ｓ８）。例えば、プリンタドライバ２１は、アプリケーションソフト２２から出力されたＲＧＢ画像データをＣＭＹ画像データの印刷画像データに変換し、その印刷画像データを印刷するためのコマンドをレガシー言語で記述し、レガシー言語で記述されたコマンドをプリンタ１５に送信する。
【００７４】
Ｓ７において、プリンタ１５が（ａ）に該当すると判断された場合、プリンタドライバ２１は、図８に示すように、プリンタ１５の仕様の問合せを行なうことなく、後述するＳ１２以降の処理を行う。なぜなら、プリンタ１５の仕様を問い合わせても、プリンタ１５は双方向通信を行わないので、プリンタ１５から、プリンタ１５の仕様に関する仕様情報を受信することがないからである。
【００７５】
Ｓ７において、プリンタ１５が（ｂ）に該当すると判断された場合、プリンタドライバ２１は、図８に示すように、プリンタの仕様の問合せを行う（Ｓ９）。例えば、プリンタドライバ２１は、プリンタの仕様に関する仕様情報を取得するためのコマンド（以下、仕様情報取得コマンド）をプリンタ１５に送信する。ここでは、例えば、プリンタドライバ２１は、Ｄ４プロトコルに従う形式の仕様情報取得コマンドを送信する。すなわち、ここでは、ホスト装置１とプリンタ１５との間では、Ｄ４プロトコル層での通信が行われる。
【００７６】
プリンタ１５は、仕様の問合せに応答して、所定構造にした仕様情報をホスト装置１に送信する（Ｓ１０）。具体的には、例えば、プリンタ１５は、仕様情報取得コマンドに応答して、プリンタ記憶域３３に記憶されているレイアウト管理テーブル６１や印刷方法管理テーブル６３を参照し、それにより、どんな用紙サイズではどんな用紙種類がサポートされており且つどんなレイアウトで印刷が可能かや、どの用紙種類ではどんな印刷品質がサポートされているかを特定し、特定された結果に基づいて所定構造の仕様情報を生成し、その仕様情報をホスト装置１に送信する。ホスト装置１に送信される仕様情報は、例えば、図９Ｂ及び図９Ｃに示すように、プリンタ１５によって入れ子構造にされる。図９Ｂは、ホスト装置１に送信される仕様情報の構造の概念を表し、図９Ｃは、ホスト装置１に送信される仕様情報の具体例を示す。なお、図９Ｃにおいて、””で囲まれた部分は、所定の文字データ（例えばASCII文字データ）を示し、＜＞で囲まれた部分は、バイナリデータを示す。
【００７７】
例えば、用紙サイズを表す情報が先頭になる。用紙サイズの先頭タグ（例えば図９Ｃの参照番号２１１で表される部分）は、所定コード（例えば「S」）で表され、終端タグ（例えば図９Ｃの参照番号２１２で表される部分）は、別の所定コード（例えば「/」）で表される。また、用紙サイズの先頭タグの後に続くパラメータ１（例えば図９Ｃの参照番号２１３で表される部分）は、用紙サイズのID（例えば１バイトのバイナリで表される）である。
【００７８】
用紙サイズの先頭タグと、用紙サイズの終端タグとの間には、その用紙サイズについてサポートされている用紙種類と、その用紙種類でサポートされている印刷品質と、その用紙サイズでサポートされているレイアウトの情報とが入れ込まれる。より具体的には、例えば、用紙種類の先頭タグ（例えば図９Ｃの参照番号２１４で表される部分）は、所定コード（例えば「T」）で表され、終端タグ（例えば図９Ｃの参照番号２１９で表される部分）は、別の所定コード（例えば「/」）で表される。また、用紙サイズの先頭タグと終端タグとの間に存在するパラメータ１（例えば図９Ｃの参照番号２１５で表される部分）は、用紙種類のID（例えば１バイトのバイナリで表される）である。そして、そのパラメータ１の後に続くパラメータ２は、印刷モード（印刷品質とレイアウト）を表すID（例えば１バイとのバイナリ）である。パラメータ２では、例えば、最初の所定数ビット（例えば３ビット）で印刷品質が表され、最後の所定数ビット（例えば１ビット）で縁無し印刷可能か否かが表される。具体的には、例えば、パラメータ２において、そのパラメータ２に関わる用紙種類で「Draft」がサポートされていればｎ（例えば０）番目のビットが「１」になり、その用紙種類で「Normal」がサポートされていればｍ（例えば１）番目のビットが「１」になり、その用紙種類で「High」がサポートされていればｐ（例えば２）番目のビットが「１」になり、そのパラメータ２が関わる用紙サイズで縁無し印刷がサポートされていればｑ（例えば７）番目のビットが「１」になる。
【００７９】
或る用紙サイズについて、複数種類の用紙種類がサポートされている場合には、そのサポートされている用紙種類と同じ数だけ、用紙種類の先頭タグ、パラメータ１、パラメータ２及び終端タグのセットが、その用紙サイズの先頭タグと終端タグとの間に入れ込まれる。
【００８０】
上記の入れ子構造は、例えば、プリンタ１５における印刷条件の優先順位に基づく構造になっている。例えば、プリンタ１５では、後述するように、印刷品質、レイアウト、用紙種類及び用紙サイズの順に優先順位が高くなっているので、それにあわせて、用紙サイズが最も外にあり、その中に、用紙種類、レイアウト及び印刷品質を入れ込んだ入れ子構造にすることができる。
【００８１】
プリンタドライバ２１は、図９Ｂ及び図９Ｃで表す入れ子構造の仕様情報を受信し、その仕様情報を解析することで、プリンタ１５の仕様、すなわち、プリンタ１５でどんな用紙サイズがサポートされており、各用紙サイズではどんな用紙種類がサポートされており且つどんなレイアウトで印刷が可能であり、どの用紙種類ではどんな印刷品質がサポートされているかを、特定することができる。
【００８２】
再び図８を参照する。プリンタドライバ２１は、プリンタ１５から受信した仕様情報をホスト記憶域１９に記憶させる（Ｓ１１）。
【００８３】
プリンタドライバ２１は、ユーザから入力装置５を介してユーザインタフェース（以下、ＵＩ）の表示要求を受けた場合には（Ｓ１２でＹＥＳ）、ホスト記憶域１９に記憶されている仕様情報の中から各種印刷条件毎にユーザ所望の印刷パラメータを受け付けるためのＵＩ（以下、印刷パラメータ選択画面）を表示する（Ｓ１３）。
【００８４】
図１０は、印刷パラメータ選択画面８０の構成例を示す。
【００８５】
印刷条件として、例えば、用紙サイズ、用紙種類、印刷品質及びレイアウトがある。印刷パラメータ選択画面８０には、各種印刷条件毎に、印刷パラメータの選択を受け付けるためのメニュー（例えばプルダウン式のメニュー）が表示される。プリンタドライバ２１は、各種印刷条件毎に、メニューの表示（選択可能に表示する印刷パラメータをどれにするか）を制御することができる。
【００８６】
例えば、プリンタドライバ２１において、優先順位として、高い方から低い順に、用紙サイズ、用紙種類、レイアウト及び印刷品質が設定されているとする。この場合、プリンタドライバ２１は、仕様情報３４に含まれている一以上の用紙サイズパラメータの中から或る用紙サイズパラメータが選択された場合には、用紙種類のメニューには、その用紙サイズパラメータに関わる用紙種類パラメータを選択可能に表示し、且つ、レイアウトのメニューには、その用紙サイズパラメータに関わるレイアウトパラメータを選択可能に表示し、その用紙サイズパラメータでサポートされていないパラメータ（例えば、その用紙サイズの先頭タグと終端タグとの間に入れ込まれていないパラメータ）は、選択可能に表示しない。また、プリンタドライバ２１は、同様に、或る用紙種類パラメータが選択された場合には、その用紙種類パラメータに対応する印刷品質パラメータを印刷品質のメニューとして選択可能に表示する。
【００８７】
また、プリンタドライバ２１は、優先順位の設定をユーザから受けてもよい。例えば、プリンタドライバ２１は、用紙種類を最優先することを選択された場合には、仕様情報３４に含まれている複数の用紙種類パラメータの全てを選択可能に表示し、その用紙種類パラメータから或る用紙種類パラメータが選択された場合には、その用紙種類パラメータに対応する用紙サイズパラメータを選択可能に表示しても良い。
【００８８】
このように、プリンタドライバ２１は、プリンタ１５から仕様情報３４を受信した場合には、その仕様情報３４に基づいて、印刷パラメータを選択可能に表示するので、必ず、プリンタ１５でサポートされている印刷パラメータを選択させ、且つ、各種印刷条件毎に選択された印刷パラメータの関係（例えば、用紙サイズ、用紙種類、印刷品質及びレイアウトの関係）も、プリンタ１５でサポートされている関係とすることができる。
【００８９】
なお、プリンタドライバ２１は、プリンタ１５が双方向通信を行うようになっていない場合、プリンタ１５から仕様情報を受けることはできない。
【００９０】
この場合には、プリンタドライバ２１は、所定の印刷パラメータ群２６を記憶しており、その所定の印刷パラメータ群２６に基づいて、各種印刷条件毎の印刷パラメータメニューの表示を制御することができる。所定の印刷パラメータ群２６の構成も、プリンタ１５から受信する仕様情報３４と同様の入れ子構造になっていてもよい。所定の印刷パラメータ群２６の構造及びそれに含まれている印刷パラメータは、プリンタの全ての機種に対応しているわけではないので、プリンタ１５に送信される各種印刷条件毎の印刷パラメータの関係は、プリンタ１５でサポートされていない場合もある。その場合に、プリンタ１５が、後に詳述する補正処理を行うことで、ユーザの要求に近い印刷結果を出力することができる。
【００９１】
さて、再び図８を参照する。上述した印刷パラメータ選択画面８０を介して各種印刷条件毎に印刷パラメータが選択され、ユーザから印刷実行の命令を受けた場合には（Ｓ１４）、プリンタドライバ２１は、選択された印刷パラメータを用いた印刷処理を実行する（Ｓ１５）。印刷パラメータ選択画面８０で印刷パラメータの選択を受けずに、或いは印刷パラメータ選択画面８０を表示することなく（Ｓ１２でＮＯ）、印刷実行の命令を受けた場合には（Ｓ１４）、プリンタドライバ２１は、デフォルトの印刷パラメータを用いた印刷処理を実行する（Ｓ１５）。
【００９２】
以上が、本実施形態に係るプリントシステムで行われる処理流れの概要である。
【００９３】
このプリントシステムにおいて、プリンタドライバ２１は、プリンタの機種毎に対応させる必要の無いいわゆる汎用型のドライバとすることができる。そのため、プリンタドライバ２１は、プリンタ１５が双方向通信を行う場合には、プリンタ１５に仕様を問合せ、それに応答して、仕様情報をプリンタ１５から受信し、その仕様情報中の印刷パラメータを用いた印刷処理を行うことができる。つまり、プリンタ１５は、プリンタ１５から仕様情報を受信することで、どんな機種のプリンタ１５が接続されても、その機種の仕様に応じた印刷処理を行うことができる。
【００９４】
また、プリンタドライバ１５は、プリンタ１５が双方向通信を行わないとわかった場合には、プリンタ１５に対して仕様の問合せを行わない。プリンタ１５が単方向プリンタであっても、プリンタドライバ２１は、予め記憶されている印刷パラメータ群２６中の印刷パラメータを用いて、印刷処理を行うことができる。
【００９５】
Ｓ１５で行われる印刷処理は、図７のＳ７において、プリンタ１５が（ａ）又は（ｂ）に該当するものであると判断された場合に行われる処理である。そのため、Ｓ１５の印刷処理では、特定モードが実行され、その特定モード中に、特定言語で記述されたコマンドがプリンタドライバ２１からプリンタ１５に送信される。
【００９６】
図１１Ａは、特定言語で記述されたコマンドのフォーマット例を示す。
【００９７】
特定言語で記述されたコマンド（以下、「特定言語コマンド」と称する）には、ヘッダフィールド２５１と、クラスフィールド２５３と、パラメータレングスフィールド２５５と、コマンド名フィールド２５７と、パラメータブロックフィールド２５９とがある。特定言語コマンド全体のデータサイズは、可変サイズとすることができる。
【００９８】
ヘッダフィールド２５１は、所定サイズ、例えば1バイトである。ヘッダフィールド２５１には、例えば、所定のヘッダ情報が所定形式で記述される。
【００９９】
クラスフィールド２５３は、所定サイズ、例えば１バイトである。クラスフィールド２５３には、特定モードに関わる複数のクラスのうちの一つのクラスを表すクラス情報（例えばＩＤ）が例えば所定形式（例えばＡＳＣＩＩコード）で登録される。プリンタ１５は、クラスフィールド２５３に書かれたクラス情報を参照することにより、受信した特定言語コマンドがどのクラスに属するコマンドであるかを特定することができる。
【０１００】
パラメータレングスフィールド２５５は、所定サイズ、例えば４バイトであり、そのフィールド２５５には、パラメータブロックフィールド２５９に登録されるパラメータブロックのデータ長を表すデータが登録される。そのデータとしては、例えば、リトルエンディアンが採用される。
【０１０１】
コマンド名フィールド２５７は、所定サイズ、例えば４バイトであり、そのフィールド２５７には、コマンド名を表すデータが登録される。プリンタ１５は、このフィールド２５７に書かれたコマンド名と、クラスフィールド２５３に書かれたクラスとにより、受信した特定言語コマンドを識別することができる。
【０１０２】
パラメータブロックフィールド２５９は、可変サイズであり、そのフィールド２５９には、パラメータブロックが書かれる。パラメータブロックは、一又は複数のパラメータユニットで構成される。各パラメータユニットでは、コマンド毎に、各パラメータの値のサイズと順序が規定される。また、パラメータユニットにおいて、パラメータの値として所定バイト（例えば２バイト）以上の数値が用いられる場合には、各特定言語コマンドの定義で特に示さない限り、ビッグエンディアンが採用される。
【０１０３】
以下、各フィールドに書かれる情報について詳細に説明する。
【０１０４】
図１１Ｂは、クラスフィールドに書かれるクラスの種類の一例を示す。
【０１０５】
クラスフィールド２５３には、特定モードに関する複数種類のクラスの中からプリンタドライバ２１によって選択されたクラスが登録される。特定モードに関する複数種類のクラスとして、例えば、ＬＵＴ（ルックアップテーブル）、クオリティ、ジョブ、ページ及びデータの５種類が用意されている。
【０１０６】
クラス「ＬＵＴ」は、ルックアップテーブルの提供を表すクラスである。クラス「ＬＵＴ」を表すコード（例えば「l」）は、ルックアップテーブルがプリンタドライバ２１からプリンタ１５に送信される場合に、クラスフィールド２５３にセットされる。このクラスの特定言語コマンドと、或るルックアップテーブルとがプリンタ１５に送信された場合、プリンタ１５では、その送信された或るルックアップテーブルが、所定の画像処理、例えばハーフトーニング処理の際に使用される。一方、このクラスの特定言語コマンドがプリンタ１５に送信されない場合には、プリンタ１５に内蔵のデフォルトのルックアップテーブルが画像処理の際に使用される。
【０１０７】
クラス「クオリティ」は、品質に関するパラメータの提供を表すクラスである。クラス「クオリティ」を表すコード（例えば「q」）は、パラメータがプリンタドライバ２１からプリンタ１５に送信される場合に、クラスフィールド２５３にセットされる。このクラス「クオリティ」の特定言語コマンドにおいて、パラメータユニットとしてセットされるパラメータとしては、複数種類、例えば、以下の（１）〜（９）の種類、
（１）用紙種類ＩＤ（バイトオフセット０、バイト長１）、
（２）印刷品質（バイトオフセット１、バイト長１）、
（３）カラー／モノクロ（バイトオフセット２、バイト長１）、
（４）明度強度設定（バイトオフセット３、バイト長１）、
（５）コントラスト強度設定（バイトオフセット４、バイト長１）、
（６）彩度強度設定（バイトオフセット５、バイト長１）、
（７）カラープレーン（バイトオフセット６、バイト長１）、
（８）パレットサイズ（バイトオフセット７、バイト長２）、
（９）パレットデータ（バイトオフセット８、データサイズ分のバイト長）、
のパラメータがある。この実施形態では、優先順位の高い方から低い方にかけて、用紙種類ＩＤ＞印刷品質＞カラープレーン＞パレットサイズ＞パレットデータとなっている。
【０１０８】
「用紙種類ＩＤ」は、用紙種類を表すＩＤである。用紙種類としては、写真用紙、普通紙、光沢紙など、様々な種類を採用することができる。
【０１０９】
印刷品質とは、印刷結果となる画像の品質であり、例えば、前述したように、「Draft」、「Normal」及び「High」の三種類がある。
【０１１０】
「カラー／モノクロ」は、黒を、シアン、マゼンタ及びイエローの三色で表現するか（カラー）、或いは、黒インクのみで表現するか（モノクロ）を表す。
【０１１１】
「明度強度設定」、「コントラスト強度設定」及び「彩度強度設定」は、いずれも、プリンタに指示する補正量を表すパラメータである。各種設定は、各色毎に行うことができる。各種設定は、例えば、第一の値（例えば−５０）〜第二の値（例えば＋５０）の範囲で行うことができる。もし、第一の値よりも小さい値が設定された場合、プリンタ１５では、第一の値が設定されたものとして補正が行われ、第二の値よりも大きい値が設定された場合、プリンタ１５では、第二の値が設定されたものとして補正が行われる。
【０１１２】
「カラープレーン」は、プリンタ１５に転倒される印刷データの種別を表す。例えば、「カラープレーン」には、フルカラーと２５６カラーというのがある。フルカラーは、ＲＧＢ画像データの１ピクセルのカラーが３バイトで表現されていることを表し、２５６カラーは、ＲＧＢ画像データの１ピクセルが１バイトで表現されていることを表す。
【０１１３】
「カラーパレットサイズ」は、「カラープレーン」で２５６カラーの場合のカラーパレットのサイズを表す。「カラープレーン」でフルカラーの場合、「カラーパレットサイズ」は０（ゼロ）と設定される。
【０１１４】
「カラーパレットデータ」は、「カラーパレットサイズ」で設定された値のデータサイズを持つカラーパレットのデータ列である。つまり、「カラープレーン」で２５６カラーがセットされた場合、プリンタドライバ２１は、或る記憶領域に記憶されたカラーパレット（例えばプリンタドライバ２１が保持している）をプリンタ１５に送信する。「カラープレーン」がフルカラーの場合、プリンタドライバ２１は、カラーパレットのデータを送らない。
【０１１５】
クラス「ジョブ」は、印刷ジョブに関するジョブパラメータの提供を表すクラスである。クラス「ジョブ」の特定言語コマンドが送信される場合、例えば、そのコマンドのクラスフィールド２５３には、クラス「ジョブ」を表すコード（例えば「j」）がセットされ、コマンド名フィールド２５７に、ジョブのスタートを表すコード（例えば「setj」）と、ジョブのエンドを表すコード（例えば「endj」）とのいずれかがセットされる。また、ジョブのスタートを表すコードが特定言語コマンドにセットされた場合、そのコマンドのパラメータユニットには、複数種類のジョブパラメータ、例えば、以下の（１）〜（８）の種類のジョブパラメータ、
（１）定型用紙幅（バイトオフセット０、バイト長４）、
（２）定型用紙長（バイトオフセット４、バイト長４）、
（３）上マージン（バイトオフセット８、バイト長２）、
（４）左マージン（バイトオフセット１０、バイト長２）、
（５）印刷領域幅（バイトオフセット１２、バイト長４）、
（６）印刷領域長（バイトオフセット１６、バイト長４）、
（７）入力画像密度（バイトオフセット２０、バイト長１）、
（８）双方向印刷／単方向印刷（バイトオフセット２１、バイト長１）、
がセットされる。
【０１１６】
「定型用紙幅」は、用紙幅をあらわし、「定型用紙長」は、用紙長を表す。これらの値は、単位は例えばピクセル（例えば、インチ×３６０ｐｐｉ（ピクセル／インチ））であり、プリンタ１５でサポートされる値である。より具体的には、例えば、プリンタドライバ２１は、各種用紙サイズ毎に、用紙幅及び用紙長を記憶しており、同様に、プリンタ１５も、各種用紙サイズ毎に、用紙幅及び用紙長を記憶している。プリンタドライバ１５は、印刷パラメータ選択画面８０（図１０参照）等で或る用紙サイズが選択された場合、記憶されている情報から、その用紙サイズに対応した用紙幅及び用紙長を特定し、特定された用紙幅及び用紙長をセットする（つまり、用紙サイズを用紙幅及び用紙長の値でセットする）。プリンタ１５は、その用紙幅及び用紙長に基づいて、印刷画像データを生成する。なお、もし、セットされた用紙幅又は用紙長が、プリンタ１５でサポートされていない値である場合には、プリンタ１５が、その用紙幅又は用紙長を、プリンタ１５の記憶域に設定されている複数の用紙幅又は用紙長のうちの最も近い用紙幅又は用紙長に変換し、変換後の用紙幅又は用紙長を用いて処理を進める。
【０１１７】
「上マージン」は、用紙上端から上端印刷ドットまでの距離を表し、「左マージン」は、用紙左端から左端印刷ドットまでの距離である。これらの値は、例えば単位はピクセル（例えば、インチ×入力画像密度（３６０又は７２０ｐｐｉ））である。なお、入力画像密度とは、プリンタ１５に送信されるＲＧＢ画像データの解像度である。それに対し、出力解像度とは、印刷される画像の解像度（印刷画像データの解像度）、換言すれば、印刷解像度である。
【０１１８】
「印刷領域幅」は、印刷画像データの幅を表し、「印刷領域長」は、印刷画像データの長さを表す。これらの値は、例えば単位はピクセル（例えば、インチ×入力画像密度（３６０又は７２０ｐｐｉ））である。
【０１１９】
「入力画像密度」は、プリンタ１５に送信されるＲＧＢ画像データの画像密度（換言すれば解像度）を表す。例えば、水平方向密度×垂直方向密度で言うと、３６０×３６０ｐｐｉと、７２０×７２０ｐｐｉの二種類がある。例えば、前者は、印刷対象が画像の場合に採用され、後者は、印刷対象が画像と文字のいずれの場合にも採用されることができる。
【０１２０】
「双方向印刷／単方向印刷」は、前述した双方向印刷と単方向印刷のどちらをプリンタ１５に実行させるかを表す。
【０１２１】
クラス「ページ」は、ページに関する情報の提供を表すクラスである。クラス「ページ」の特定言語コマンドが送信される場合、例えば、そのコマンドのクラスフィールド２５３には、クラス「ページ」を表すコード（例えば「p」）がセットされ、コマンド名フィールド２５７に、ページのスタートを表すコード（例えば「sttp」）と、ページのエンドを表すコード（例えば「endp」）とのいずれかがセットされる。また、ページのエンドを表すコードが特定言語コマンドにセットされた場合、そのコマンドのパラメータユニットには、次のページが有るか無いかを表す情報がセットされる。プリンタは、次のページが有ることを表す情報を検出した場合には、所定タイミングで（例えばその検出と同時に）、次のページの給紙動作を実行することができる。
【０１２２】
クラス「データ」は、ＲＧＢ画像データ（例えば一ラスタ分のＲＧＢデータ）の提供を表すクラスである。クラス「データ」の特定言語コマンドが送信される場合、例えば、そのコマンドのクラスフィールド２５３には、クラス「データ」を表すコード（例えば「d」）がセットされ、パラメータユニットには、複数種類のデータパラメータ、例えば、以下の（１）〜（５）の種類のデータパラメータ、
（１）Ｘオフセット（バイトオフセット０、バイト長２）、
（２）Ｙオフセット（バイトオフセット２、バイト長２）、
（３）圧縮種別（バイトオフセット４、バイト長１）、
（４）ラスタデータサイズ（バイトオフセット５、バイト長２）、
（５）ＲＧＢラスタデータ（バイトオフセット７、ＲＧＢラスタデータそれ自体のバイト長）、
がセットされる。
【０１２３】
「Ｘオフセット」とは、ページ基点（例えば左上隅）からのＸ座標（水平方向に沿った座標）のオフセットである（単位は例えばピクセル）。これは、例えば、入力画像密度に依存する。
【０１２４】
「Ｙオフセット」とは、ページ基点（例えば左上隅）からのＹ座標（垂直方向に沿った座標）のオフセットである（単位は例えばピクセル）。これは、例えば、入力画像密度に依存する。本実施形態では、１ラスタずつＲＧＢデータが転送されるので、この「Ｙオフセット」の値は、１ずつインクリメントされる。
【０１２５】
「圧縮種別」は、１ラスタのＲＧＢデータの圧縮種別である。複数の圧縮種別として、例えば、非圧縮と、点順次ランレングス圧縮とがある。プリンタドライバ２１は、１ラスタのＲＧＢデータ毎に、点順次ランレングス圧縮を行い、非圧縮のＲＧＢデータのデータサイズと、圧縮後のＲＧＢデータのデータサイズとを比較し、非圧縮のＲＧＢデータのデータサイズの方が小さければ、非圧縮でＲＧＢデータを送信し、逆に、圧縮後のＲＧＢデータのデータサイズの方が小さければ、圧縮後のＲＧＢデータを送信する。また、非圧縮か圧縮かに応じて、プリンタドライバ２１は、パラメータユニットとしてセットする「圧縮種別」の内容を違える。
【０１２６】
「ラスタデータサイズ」は、ＲＧＢラスタデータのデータサイズである。
【０１２７】
「ＲＧＢラスタデータ」は、ＲＧＢラスタデータそれ自体である。フルカラーの場合、Ｒ、Ｇ、Ｂの順で、１ピクセルあたり３バイトのデータであり、２５６カラーの場合、１ピクセルあたり１バイトのデータである。
【０１２８】
このクラス「データ」では、プリンタドライバ２１は、同一のラスタのＲＧＢデータを二回以上送信しないようになっている。もし、同一ラスタのＲＧＢデータを二回以上送信されたならば、プリンタ１５は、例えば、二回目以降のＲＧＢデータがセットされたコマンドを読み捨てる。
【０１２９】
また、このクラス「データ」では、プリンタドライバ２１は、同一ページにおけるクラス「データ」の特定言語コマンドにおいて、「Ｙオフセット」の値を、同一ページにおける前回の値（例えば５）以前の値（例えば４）にしないようにする。もし、「Ｙオフセット」の値が前回の値以前の値になって送信されたならば、プリンタ１５は、例えば、その前回の値以前の値がセットされたコマンドを読み捨てる。
【０１３０】
以上が、特定言語コマンドに関する説明である。特定言語コマンドは、図８のＳ１５の印刷処理において、プリンタドライバ２１からプリンタ１５に送信される。
【０１３１】
図１２は、図８のＳ１５の印刷処理で行われる具体的な処理流れの一例を示す。
【０１３２】
この図１２に示すように、Ｓ１５の印刷処理では、例えば、段階Ａ〜段階Ｓの順で、処理が行われる。以下、各段階について、詳細に説明する。
【０１３３】
（１）段階Ａ。
【０１３４】
プリンタ１５が双方向通信を行う場合には、前述したように、プリンタドライバ２１が、Ｄ４プロトコルに従う形式で、仕様情報取得コマンドをプリンタ１５に送信し、プリンタ１５は、そのコマンドに応答して、Ｄ４プロトコルで、入れ子構造の仕様情報をプリンタドライバ２１に送信する。この場合、プリンタ１５において、Ｄ４プロトコルに係るポートがオープンになっている。
【０１３５】
しかし、プリンタ１５が双方向通信ではなく単方向通信を行う場合には、前述したように、プリンタドライバ２１は、プリンタ１５の仕様情報を知ることはできない。単方向プリンタには、Ｄ４プロトコル層を有しているものもあれば、Ｄ４プロトコル層を有していないものもある。プリンタドライバ２１は、プリンタ１５が単方向プリンタの場合には、そのプリンタ１５がＤ４プロトコル層を有しているのかどうかを知ることはできない。
【０１３６】
そこで、まず、この段階Ａで、プリンタドライバ２１は、Ｄ４プロトコルをプリンタ１５に解除させるためのコマンド（以下、Ｄ４プロトコル解除コマンド）を生成し、そのＤ４プロトコル解除コマンドを、プリンタ１５に送信する。
【０１３７】
プリンタ１５は、双方向通信を行うが故にＤ４プロトコルに係るポートをオープンにしていれば、Ｄ４プロトコル解除コマンドを読み捨て、Ｄ４プロトコルの解除を行わないようにする。プリンタ１５が双方向通信を行う場合には、プリンタドライバ２１は、Ｄ４プロトコル層での通信を行うことができるので、そのコマンドがプリンタ１５で読み捨てられても問題がない。
【０１３８】
一方、例えば、プリンタ１５が、単方向プリンタである場合であって、且つ、Ｄ４プロトコル層を有している場合には、そのプリンタ１５は、Ｄ４プロトコルを解除する。プリンタ１５がＤ４プロトコル層を有していない場合には、そのプリンタ１５は、Ｄ４プロトコル解除コマンドを読み捨てる。いずれにしても、単方向プリンタに対しては、プリンタドライバ２１は、プリンタ１５がＤ４プロトコル層を有していないという前提で、Ｄ４プロトコル層を利用しない通信を行うことができる。
【０１３９】
（２）段階Ｂ。
【０１４０】
プリンタドライバ２１は、Ｄ４プロトコル解除コマンドを送信した後、或るタイミングで（例えば、Ｄ４プロトコル解除コマンドに対する所定の応答をプリンタ１５から受けた場合に）、初期化コマンド（例えば「ＥＳＣ＠」というコードを含んだコマンド）を、プリンタ１５に送信する。プリンタ１５は、その初期化コマンドに応答して、所定の初期化処理を行う。この初期化処理では、例えば、プリンタ１５は、プリンタ記憶域３３に設定されている印刷パラメータを初期（デフォルト）のパラメータに戻す等の処理を行う。
【０１４１】
（３）段階Ｃ。
【０１４２】
プリンタドライバ２１は、初期化コマンドを送信した後、或るタイミングで（例えば、初期化コマンドに対する所定の応答を受けた場合に）、リモートモードに移行させるためのコマンド（以下、リモート移行コマンド）をプリンタ１５に送信する。プリンタ１５は、そのリモート移行コマンドに応答して、レガシーモードからリモートモードに移行する。
【０１４３】
なお、この段階Ｃでは、プリンタドライバ２１は、一旦、レガシーモードに移行させるためのコマンド（以下、レガシー移行コマンド）を送信し、その後で（例えば所定の応答が返って来た後で）、リモート移行コマンドを送信しても良い。この場合、プリンタ１５は、レガシーモード以外のモードになっている場合には、レガシー移行コマンドに応答してレガシーモードに移行し、レガシーモードになっている場合にレガシー移行コマンドを受けた場合には、そのコマンドを読み捨てることができる。
【０１４４】
（４）段階Ｄ。
【０１４５】
プリンタドライバ２１は、或るタイミングで（例えば、リモート移行コマンドに対してモード以降完了通知をプリンタ１５から受けた後に）、レガシーモードでのジョブ開始を意味するコマンド（以下、レガシージョブ開始コマンド）を、プリンタ１５に送信する。プリンタ１５は、レガシージョブ開始コマンドに応答して、ジョブ開始をプリンタ記憶域３３（又はバッファ１３３）にセットし、それ以降、レガシーモードでのジョブ終了を意味するコマンド（以下、レガシージョブ終了コマンド）を受けるまでに、コマンドやデータを受信した場合には、そのコマンドやデータは、レガシーモードにおける一つの印刷ジョブに関わるコマンドやデータであると認識する。
【０１４６】
レガシーモードでは、例えば、コマンドやデータがストリームでプリンタドライバ２１からプリンタ１５に流れ込み、プリンタ記憶域３３に蓄積されていく。このため、このままでは、プリンタ１５は、プリンタ記憶域３３のどこからどこまでは一つの印刷ジョブに係るコマンドやデータであるかを特定することができない。
【０１４７】
そこで、レガシーモードでコマンドやデータを送信する前に、プリンタドライバ２１が、プリンタ１５における言語処理モードを、レガシーモードとは別のリモートモードに移行させ、そのリモートモードにおいて、ジョブの開始や終了を伝える。これにより、プリンタ１５は、レガシーモードにおいてストリームでコマンドやデータを受信し記憶していっても、どこからどこまでが一つの印刷ジョブに関わるコマンドやデータで有るかを特定することができる。
【０１４８】
（５）段階Ｅ。
【０１４９】
プリンタドライバ２１は、或るタイミングで（例えば、レガシージョブ開始コマンドに応答してセット完了通知を受けた場合に）、レガシー移行コマンドを、プリンタ１５に送信する。プリンタ１５は、そのレガシー移行コマンドに応答して、リモートモードからレガシーモードに移行する。
【０１５０】
なお、この実施形態では、このレガシー移行コマンドが、リモートモードの解除と、レガシーモードへの移行との両方の意味を持っているが、リモートモードを解除するためのコマンドが送信された後に、レガシー移行コマンドが送信されても良い。
【０１５１】
（６）段階Ｆ。
【０１５２】
プリンタドライバ２１は、或るタイミングで（例えば、レガシーモードへの移行の完了通知を受けたプリンタ１５から場合に）、特定モードへ移行するためのコマンド（以下、特定モード移行コマンド）を、プリンタ１５に送信する。プリンタ１５は、その特定モード移行コマンドに応答して、レガシーモードから特定モードに移行する。
【０１５３】
（７）段階Ｇ。
【０１５４】
この段階Ｇから、後述の段階Ｍまでが、特定モードにおいて行われる処理である（図１２で、点線枠で囲まれた部分）。特定モードにおいて送信されるコマンドやデータは、ストリームで、プリンタ１５に流れ込むようになっている。この場合、プリンタ１５は、ストリームで流れ込んで来るコマンドやデータを前述したバッファ１３３に蓄積していく。
【０１５５】
さて、この段階Ｇでは、プリンタドライバ２１は、クラス「ＬＵＴ」に関する特定言語コマンド（以下、ＬＵＴコマンド）を生成し、ＬＵＴコマンドをプリンタ１５に送信する。ここでは、プリンタドライバ２１は、そのＬＵＴコマンドにより、ＬＵＴを送ることができる。プリンタ１５は、ＬＵＴを受信した場合は、そのＬＵＴを用いて画像処理（例えばハーフトーニング処理又は色変換処理）を行い、ＬＵＴを受信しない場合には、予めプリンタ記憶域３３に記憶されているＬＵＴ（図示せず）を用いて画像処理を行う。
【０１５６】
（８）段階Ｈ。
【０１５７】
プリンタドライバ２１は、ＬＵＴコマンドに続いて、クラス「クオリティ」に関する特定言語コマンド（以下、クオリティコマンド）をプリンタ１５に送信する。プリンタドライバ２１は、前述したように、用紙種類ＩＤや印刷品質等のパラメータをクオリティコマンドにセットして送信する。プリンタドライバ２１は、クオリティコマンドにセットするパラメータのうち、例えば、用紙種類ＩＤ及び印刷品質については、印刷パラメータ選択画面８０を介してユーザに選択されたもの（例えば用紙種類パラメータ及び印刷品質パラメータ）に基づいて、セットすることができる。
【０１５８】
プリンタ１５は、受信したクオリティコマンドにセットされている各種印刷パラメータを抽出し、抽出された各種印刷パラメータを、プリンタ記憶域３３に書き込む。
【０１５９】
（９）段階Ｉ。
【０１６０】
プリンタドライバ２１は、クオリティコマンドに続いて、クラス「ジョブ」に関する特定言語コマンドであって、ジョブの開始を意味するコードを含んだコマンド（以下、特定ジョブ開始コマンド）を、プリンタ１５に送信する。プリンタドライバ２１は、前述したように、用紙サイズに関する情報（定型用紙幅、定型用紙長）や、印刷領域に関する情報（上マージン、左マージン、印刷領域幅、印刷領域長）等のパラメータを特定ジョブ開始コマンドにセットして送信する。プリンタドライバ２１は、特定ジョブ開始コマンドにセットするパラメータのうち、例えば、用紙サイズに関する情報や印刷領域に関する情報については、印刷パラメータ選択画面８０を介してユーザに選択されたもの（例えば用紙サイズパラメータ及びレイアウトパラメータ）に基づいて、算出し、算出された情報をセットすることができる。
【０１６１】
プリンタ１５は、特定ジョブ開始コマンドに応答して、特定モードにおけるジョブの開始をプリンタ記憶域３３（又はバッファ１３３）にセットする。プリンタ１５は、それ以降、特定モードでのジョブ終了を意味するコマンド（以下、特定ジョブ終了コマンド）を受けるまでに、コマンドやデータを受信した場合には、そのコマンドやデータは、特定モードにおける一つの印刷ジョブに関わるコマンドやデータであると認識することができる。
【０１６２】
なお、段階Ｉまでが終了すると、プリンタ１５が行う処理にとって必要な複数のパラメータがセットされることになる。しかし、セットされた複数のパラメータの全てが、特にプリンタ１５が単方向プリンタである場合には、プリンタ１５でサポートされているとは限らない。そのため、セットされた複数のパラメータのうちプリンタ１５でサポートされていないパラメータについては、プリンタ１５でサポートされているパラメータに補正する必要がある。その補正に関わる処理は、例えば、段階Ｉの終了時点から、１ページ分のＲＧＢデータがプリンタ１５に蓄積されてその１ページ分のＲＧＢデータに基づく印刷画像データが生成されるまでの任意のタイミングで、プリンタ１５が行うことができる。
【０１６３】
プリンタ１５は、パラメータの補正に関わる印刷条件の優先順位を例えばプリンタ記憶域３３において記憶している。その印刷条件の優先順位は、例えば、高い方から低い方にかけて、用紙サイズ、用紙種類、レイアウト、印刷品質となっている。この優先順位の基準は、所定の観点、例えば、メモリカード等からＲＧＢ画像を読み込んで印刷するいわゆるダイレクト印刷では、プリンタ１５が画像のレイアウトを行うが、本実施形態における特定モードでは、プリンタドライバ２１が画像のレイアウトを行って出力する点に基づいて定められている。すなわち、プリンタドライバ２１がＲＧＢ画像データのレイアウトを行っても、プリンタでなるべくエラーを起こさずに印刷することができるようにするということに基づいて、上記優先順位が定められている。なお、プリンタドライバ２１が行うレイアウトとは、例えば、アプリケーションソフト２２から出力された所定の解像度（ｐｐｉ）の画像を、ユーザ所望の用紙サイズ及びレイアウトに基づいて、単位長あたりのピクセル数を増減してサイズ調整する行為である。
【０１６４】
プリンタ１５は、上記優先順位に従って、パラメータの補正を行うことができる。
【０１６５】
例えば、プリンタ１５は、プリンタドライバ２１からの用紙サイズに関する情報（例えば定型用紙幅、定型用紙長）がプリンタ１５でサポートされているどの用紙サイズに関する情報にもマッチしない場合には、プリンタドライバ２１からの用紙サイズに関する情報を、プリンタ１５がサポートしている最大の用紙サイズに関する情報に補正する。
【０１６６】
また、例えば、プリンタ１５は、用紙サイズに関する情報はマッチしているが、用紙種類に関する情報（例えば用紙種類ＩＤ）がマッチしていない場合には、プリンタドライバ２１からの用紙種類に関する情報を、上記マッチしている用紙サイズに関する情報に属する範囲内で、プリンタ１５がサポートしている用紙種類に関する情報に補正する。具体的には、例えば、図２を参照して言えば、プリンタドライバ２１から用紙サイズ「Ｌ判」で用紙種類「光沢紙」を受けた場合、プリンタ１５は、その用紙種類「光沢紙」を採用するためには用紙サイズを例えば「Ａ４」に変更すれば良いが、そうはせずに、用紙サイズ「Ｌ判」を優先的に採用し、プリンタドライバ２１からの用紙種類「光沢紙」を、用紙サイズ「Ｌ判」に対応した用紙種類「写真用紙」に補正する。もし、その用紙サイズに対応した用紙種類が複数個存在する場合には、プリンタ１５は、手動で又は自動で、一つの用紙種類を選択し、プリンタドライバ２１からの用紙種類を、その選択された用紙種類に補正することができる。
【０１６７】
以降、プリンタ１５は、レイアウト及び印刷品質についても、用紙種類についての補正と同様に、上記優先順位に基づいて、必要に応じて補正していく。なお、プリンタ１５は、例えば、縁有りから縁無しに補正する場合には、印刷領域を拡大する補正も行うことができる。また、例えば、プリンタ１５は、縁無しから縁有りに補正する場合には、印刷領域を縮小する（又は、印刷領域の所定端をマージンが生じる分だけカットする）補正も行うことができる。また、例えば、プリンタ１５は、印刷品質「Draft」を補正する場合には、「Normal」の方を「High」よりも優先的に採用することができ、「Normal」を補正する場合には、「High」の方を「Draft」よりも優先的に採用することができ、「High」を補正する場合には、「Normal」の方を「Draft」よりも優先的に採用することができる（つまり、プリンタドライバ２１からの印刷品質にできるだけ近い印刷品質に補正することができる）。
【０１６８】
（１０）段階Ｊ。
【０１６９】
プリンタドライバ２１は、特定ジョブ開始コマンドに続いて、ページの開始を意味する特定言語コマンド（以下、ページ開始コマンド）を、プリンタ１５に送信する。プリンタ１５は、ページ開始コマンドに応答して、ページ開始をプリンタ記憶域３３（又はバッファ１３３）にセットし、それ以降、ページ終了を意味する特定言語コマンド（以下、ページ終了コマンド）を受けるまでに、コマンドやデータを受信した場合には、そのコマンドやデータは、特定モードにおける一つのページに関わるコマンドやデータであると認識する。また、プリンタ１５は、ページ開始コマンドに応答して、直ちに、給紙を開始してもよい。
【０１７０】
（１１）段階Ｋ。
【０１７１】
プリンタドライバ２１は、ページ開始コマンドに続いて、一ラスタ分のＲＧＢデータを有するデータコマンドをプリンタ１５に送信する。プリンタドライバ２１は、１ページ分のＲＧＢラスタデータの送信を終えるまで、データコマンドを送り続ける。その際、プリンタドライバ２１は、前述したように、ＲＧＢラスタデータの圧縮前と圧縮後のデータサイズの違いを比較し、より小さいデータサイズで送れる方法でＲＧＢラスタデータを送信する。プリンタ１５は、受信するデータコマンドをバッファ１３３に蓄積していく。プリンタ１５は、所定ラスタ分（例えば一ページ分）のＲＧＢラスタデータが蓄積された場合には、蓄積されたＲＧＢラスタデータを、プリンタ記憶域３３にセットされた各種パラメータに基づいて処理を行っても良い。また、プリンタ１５は、入力されたＲＧＢデータがあらかじめ指定された印刷領域（例えば、実際に受信したＲＧＢラスタデータで構成される印刷領域長が、プリンタドライバ２１からの印刷領域長）に満たない場合、残りは空白のデータが送られたものと判断してもよい。
【０１７２】
（１２）段階Ｌ。
【０１７３】
プリンタドライバ２１は、一ページ分のＲＧＢラスタデータを送信した場合、それに続いて、次のページが存在するか否かを表す次ページ有無情報がセットされたページ終了コマンドをプリンタ１５に送信する。
【０１７４】
プリンタ１５は、ページ終了コマンドに応答して、ページ終了をプリンタ記憶域３３（又はバッファ１３３）にセットする。また、プリンタ１５は、そのページ終了コマンドに応答して、次ページ有無情報を参照し、次ページがあれば、次の給紙処理を開始しても良いし、次ページが無ければ、所定の終了処理を行っても良い。
【０１７５】
一つのジョブにおいてｎ枚のページがあれば、段階Ｊ、Ｋ及びＬが、ｎ回繰り返される。
【０１７６】
（１３）段階Ｍ。
【０１７７】
プリンタドライバ２１は、最後のページのページ終了コマンドに続いて、特定ジョブ終了コマンドをプリンタ１５に送信する。
【０１７８】
プリンタ１５は、特定ジョブ終了コマンドに応答して、特定ジョブ終了をプリンタ記憶域３３（又はバッファ１３３）にセットする。また、プリンタ１５は、特定ジョブ終了コマンドを受けた場合には、バッファ１３３（又はプリンタ記憶域３３）に蓄積されたデータを全て読み出し、排紙が未完了であれば排紙処理を行っても良い。
【０１７９】
（１４）段階Ｎ。
【０１８０】
プリンタドライバ２１は、例えば、特定ジョブ終了コマンドに続いて、レガシー移行コマンドを、プリンタ１５に送信する。プリンタ１５は、そのレガシー移行コマンドに応答して、特定モードからレガシーモードに移行する。
【０１８１】
なお、この実施形態では、このレガシー移行コマンドが、特定モードの解除と、レガシーモードへの移行との両方の意味を持っているが、特定モードを解除するためのコマンドが送信された後に、レガシー移行コマンドが送信されても良い。
【０１８２】
（１５）段階Ｏ。
【０１８３】
プリンタドライバ２１は、或るタイミングで（例えば、レガシー移行コマンドに対する所定の応答を受けた場合に）、リモート移行コマンドをプリンタ１５に送信する。プリンタ１５は、そのリモート移行コマンドに応答して、レガシーモードからリモートモードに移行する。
【０１８４】
（１６）段階Ｐ。
【０１８５】
プリンタドライバ２１は、或るタイミングで（例えば、リモート移行コマンドに対してモード以降完了通知をプリンタ１５から受けた後に）、レガシージョブ終了コマンドを、プリンタ１５に送信する。プリンタ１５は、レガシージョブ終了コマンドに応答して、ジョブ終了をプリンタ記憶域３３（又はバッファ１３３）にセットする。
【０１８６】
（１７）段階Ｑ。
【０１８７】
プリンタドライバ２１は、或るタイミングで（例えば、レガシージョブ終了コマンドに応答して完了通知を受けた場合に）、レガシー移行コマンドを、プリンタ１５に送信する。プリンタ１５は、そのレガシー移行コマンドに応答して、リモートモードからレガシーモードに移行する。
【０１８８】
なお、この実施形態では、このレガシー移行コマンドが、リモートモードの解除と、レガシーモードへの移行との両方の意味を持っているが、リモートモードを解除するためのコマンドが送信された後に、レガシー移行コマンドが送信されても良い。
【０１８９】
（１８）段階Ｒ。
【０１９０】
プリンタドライバ２１は、或るタイミングで（例えば、レガシー移行コマンドに対する所定の応答をプリンタ１５から受けた場合に）、初期化コマンド（例えば「ＥＳＣ＠」というコードを含んだコマンド）を、プリンタ１５に送信する。プリンタ１５は、その初期化コマンドに応答して、所定の初期化処理を行う。この初期化処理では、例えば、プリンタ１５は、特定モードにおいてプリンタ記憶域３３に設定された印刷パラメータを初期（デフォルト）のパラメータに戻す等の処理を行う。
【０１９１】
以上が、図８のＳ１５の印刷処理についての説明である。なお、この印刷処理において、特定モードでは、送信される複数のクラスに関わるコマンドの送信手順（例えば入れ子構造になった手順）が、予め定められている。プリンタ１５は、その送信手順とは異なる手順でコマンドを受信した場合（例えば、ページ終了コマンドを受ける前に新たなページ開始コマンドを受けた場合）には、そのコマンドを読み捨てる。
【０１９２】
また、プリンタドライバ２１は、特定言語で記述された新たな印刷ジョブをプリンタ１５に実行させる場合には、特定ジョブ開始コマンドを送った後、特定モードを解除させること無く、特定ジョブ開始コマンドを送信してもよい。すなわち、特定モードにおいて、一旦レガシーモードに移行することなく、段階Ｉ〜段階Ｍが繰り返し行われても良い。
【０１９３】
上述した実施形態によれば、プリンタドライバ２１は、ＲＧＢ画像データを送信することができるようになっている。また、ホスト装置１では、プリンタ１５が単方向通信と双方向通信のどちらを行うかや、プリンタ１５が特定言語をサポートしているかどうかが検出される。プリンタドライバ２１は、プリンタ１５が双方向通信を行い且つ特定言語をサポートしているとわかった場合に、プリンタ２１の仕様情報を問い合わせ、それに応答して受信するプリンタ２１の仕様情報中のパラメータを用いた印刷コマンドを送る。この場合、プリンタ１５は、自分の仕様情報に基づく印刷コマンドを受けるので、その印刷コマンドを確実に処理できる。以上のことから、プリンタ１５の機種別にプリンタドライバ２１を構築することなく、汎用型のプリンタドライバ２１を提供することができる。
【０１９４】
ところで、上述した実施形態において、印刷パスを構成する複数のモジュールや、それら複数のモジュールを管理するＤＰＣ１３１等が、プロセッサ３５に読み込まれて、処理を実行することで、プリンタ１５からの印刷が行われる。そして、その処理は、以下に説明するソフトウェア群３７の構成や機能の下で行われる。ゆえに、まず、図１３Ａ〜図１５を参照して、プリンタ１５におけるソフトウェア群３７の構成や機能を説明し、その後、図１６〜図１８を参照して、プリンタ１５における詳細な処理流れを説明する。
【０１９５】
図１３Ａは、ソフトウェア群３７の構成例を示す。
【０１９６】
ソフトウェア群３７は、図１３Ａに示すような階層構造を有することができる。例えば、最下位に、オペレーティングシステム（ＯＳ）３３３があり、その上位に、プリンタ１５の各種ハードウェア（例えばＩ／Ｆ１３やエンジンコントローラ４１）を制御する各種ハードウェア制御モジュール３３１が用意されている。各種ハードウェア制御モジュール３３１の上位には、モジュール群３３５がある。モジュール群３３５の上位には、モジュール群３３５中のモジュールや必要なハードウェア制御モジュール３３１を選択して印刷パスを構築するＤＰＣ１３１がある。ＤＰＣ１３１の上位には、下位から上位へ、ファンクション３２７、サービス３２３、ユーザインタフェース（ＵＩ）３２１がある。
【０１９７】
ファンクション３２７は、プリンタ１５に元から用意されていた機能とは異なる一群の機能を実現するために用意されている。例えば、ファンクション３２７は、メモリカードが別のＩ／Ｆ７１に挿されてそのメモリカードから画像が読み出される場合に呼び出される。
【０１９８】
サービス３２３は、例えばＵＩ３２１と協働して、プリンタ１５に設けられた操作パネル（図示せず）からの要求や、外部の機器（例えばホスト装置１や別のデバイス７３）からの要求を受け取り、各種の印刷処理を起動する。例えば、ＵＩ３２１を介して、外部からの要求を受け取ったサービス３２３は、ハーネス群３２５中の所定のハーネスを用いて、ファンクション３２７やＤＰＣ１３１、あるいはその他のモジュールを呼び出すことができる。ハーネスと呼ばれる機能別の単位を用意しているのは、プリンタ１５の内部には、単純にソフトウェアにより処理される種々の機能以外に、それらの機能に関わるＩＦＤ１０１や各種ハードウェアのステータスを管理するステータス管理モジュールＤＳＭなども存在するからである。ハーネスと呼ばれる機能別の単位を用意することで、ソフトウェアモジュール群の呼び出しを、ＤＰＣ１３１を用いて行なうことができる。
【０１９９】
ＤＰＣ１３１は、例えば以下のことをきっかけとして動作することができる。すなわち、例えば、所定のイベント（例えば、ＵＩ３２１を介したユーザ操作、或いは、ホスト装置１からのコマンドの受信）が検出され、サービス３２３が、それの下層のハーネス群３２５の中から、イベントに関わるハードウェア（例えば、コマンドを受信したＩ／Ｆ１３）に対応したハーネスを選択して呼び出した場合に、ＤＰＣ１３１が、そのハーネスの呼び出しをきっかけとして、動作することができる。上位の層からみれば、ＤＰＣ１３１に対して種々のアプリケーションインタフェース（例えば、モジュールの確保を行なわせる関数（例えば「LockProcess」）など）が定義されている。上位の層は、所望のアプリケーションインタフェース（以下、ＡＰＩ）を用いて、ＤＰＣ１３１を制御する。ＤＰＣ１３１は、機能別の単位であるハーネスから呼び出されて動作を開始し、ハーネスが要求する処理を実現するのに必要なモジュールの組合わせを実現するのである。
【０２００】
補足すれば、例えば、サービス３２３は、印刷アプリケーションを機種仕様に合わせて複数個保有することができる。その保有しているものはハーネス機能を含むファンクションモジュールという形で持つことができる。例えば、プリンタ１５が、スキャナを有し、スキャナでスキャンされたイメージを印刷するといういわゆるコピー機能を有していれば、コピー機能のためのファンクションモジュールが、サービス３２３の管理下にぶら下がることができる。また、例えば、プリンタ１５が、ＲＧＢ画像データが記憶されたメモリカードからそのＲＧＢ画像データを読み込んで印刷する機能を有している場合には、カード印刷のためのファンクションモジュールが、サービス３２３の管理下にぶら下がることができる。ホスト装置１からのデータを受けるＩ／Ｆ１３のハーネスも、上記と同様にファンクションという位置付けで、サービス３２３の管理下にぶら下がることができる。従って、サービス３２３が、モジュール実行の指示を各ファンクション（ハーネスという位置付けであっても良い）に対して行い、各ファンクションが、ＤＰＣ１３１の定義する印刷パスを指定して（例えば、印刷処理ＩＤをＤＰＣ１３１に通知して）、ＤＰＣ１３１で定義されているＡＰＩをそれの手続きに従って実行することができる。これにより、一つのアプリケーションに相当する印刷処理の実行が可能となる。
【０２０１】
図１３Ｂは、ＤＰＣ１３１がコントロールするモジュール群３３５の一例を示す。
【０２０２】
モジュール群３３５には、「イニシエータ」というモジュール種類に属する一以上のモジュール（以下、イニシエータモジュール）と、「ターミネータ」というモジュール種類に属する一以上のモジュール（以下、ターミネータモジュール）と、「メンバ」というモジュール種類に属する一以上のモジュール（以下、メンバモジュール）とがある。イニシエータモジュール（例えばデータ取得モジュール１０３）は、印刷パスの先頭に位置するものとして規定されているモジュールである。ターミネータモジュールは、印刷パスの終端に位置するものとして規定されているモジュールである。メンバモジュールは、イニシエータモジュールとターミネータモジュールとの間に位置するものとして規定されているモジュールである。
【０２０３】
モジュール群３３５に含まれる各モジュールがどのモジュール種類に属するかという情報（例えば、モジュールのＩＤと種類との対応付け）は、所定の場所（例えば、ＤＰＣ１３１又はそれとは別のプリンタ記憶域３３上の場所）に登録されている。ＤＰＣ１３１が、その情報を参照することにより、モジュール群３３５に含まれる各モジュールがどのモジュール種類に属するかを特定することができる。
【０２０４】
イニシエータモジュール、メンバモジュール及びターミネータモジュールの配列については、実現すべき印刷処理の内容毎に予め決められている。具体的には、図１３Ｃに例示するように、モジュールの配列（例えば、先頭から終端の順に並べられたモジュールＩＤ）が、印刷処理を識別するための印刷処理ＩＤと、その印刷処理の際に呼び出されるハーネスのＩＤとに対応付けられている。モジュールの配列を表す情報（例えば、モジュール配列と、印刷処理ＩＤと、呼び出しハーネスＩＤとの対応付け）は、所定の場所（例えば、ＤＰＣ１３１又はそれとは別のプリンタ記憶域３３上の場所）に登録されている。ＤＰＣ１３１が、その情報を参照することにより、どの印刷処理を行うときにどのハーネスが呼び出されどのような印刷パスを構築すればよいかを特定することができる。
【０２０５】
この実施形態では、モジュール（特に、例えばモジュール群３３５中のモジュール）には幾つかのステータスがあり、そのステータスは例えば以下のように遷移する。
【０２０６】
図１３Ｄは、モジュールのステータスの遷移の様子を示す。
【０２０７】
モジュールのステータスとしては、例えば、「STAND-BY」、「READY」及び「PROCESSING」の３つがある。「STAND-BY」は、モジュールがＤＰＣ１３１から呼び出し可能であることを意味する。「READY」は、モジュールが、「STAND-BY」の場合に、ＤＰＣ１３１から後述するG-READY関数による呼び出しを受けることにより、ジョブの実行が可能になった状態であることを意味する。「PROCESSING」は、「READY」の場合に、ＤＰＣ１３１から後述のSTART-J関数を受けることにより、ジョブの実行中になったことを意味する。モジュールは、「PROCESSING」状態の場合に、ジョブの終了を受けたならば、「READY」状態に戻り、「READY」状態の場合に、キャンセルを受けたならば、「STAND-BY」状態に戻る。
【０２０８】
次に、モジュールとモジュールとの間のデータのやりとりについて説明する。
【０２０９】
図１４Ａは、各モジュールが有する機能を示す。
【０２１０】
各モジュールは、下流側のモジュールに対する機能（換言すれば、上流側のモジュールとしての機能）と、上流側のモジュールに対する機能（換言すれば、下流側のモジュールとしての機能）とを有する。下流側のモジュールに対する機能には、以下の（Ａ）又は（Ｂ）、
（Ａ）ＲＰ（Read Providing）：ストリームリード関数を提供する機能、
（Ｂ）ＷＣ（Write Call）：ストリームライト関数を呼び出す機能、
がある。一方、上流側のモジュールに対する機能には、以下の（ａ）又は（ｂ）、
（ａ）ＲＣ（Read Call）：ストリームリード関数を呼び出す機能、
（ｂ）ＷＰ（Write Providing）：ストリームライト関数を提供する機能、
がある。
【０２１１】
モジュール群３３５のうち、ＤＰＣ１３１により指定された二以上のモジュールが、ＤＰＣ１３１により指定された配列で並ぶことにより、印刷パス、すなわち、ストリームが流れるパス（換言すれば、データ処理の流れ）を構築する。その際、各モジュールは、上流側のモジュールの用意したデータを読み取るストリームリード関数、あるいはデータを下流側のモジュールに書き込むストリームライト関数のいずれかを用いてデータをやりとりする。
【０２１２】
ここで、下流側のモジュールがデータを上流側へ読みに行く場合、データがおかれている場所（ポインタの位置）は、データを用意した上流側のモジュールが知っていると考えられる。一方、上流側のモジュールが下流側へデータを書きに行く場合、データを書き込む場所（ポインタの位置）は、データを受け取る下流側のモジュールが知っていると考えられる。
【０２１３】
本出願人は、この点に着目し、本実施形態において、ストリームリード関数およびストリームライト関数については、その関数を提供する側と、その関数を用いてデータの読み書きを実際に行なう側とを区別し、モジュールの組み合わせによらず、データのやりとりが行なえる仕組みを用意している。これらの機能の組み合わせを示したのが、この図１４Ａである。
【０２１４】
図１４Ｂは、イニシエータモジュール、メンバモジュール及びターミネータモジュールの各々が有する機能を示す。
【０２１５】
メンバモジュールは、上流側のモジュールとしての機能「ＲＣ」及び「ＷＰ」のうちのいずれかと、下流側のモジュールとしての機能「ＲＰ」及び「ＷＣ」のうちのいずれかとを有するので、図１４Ｂに示す通り、全部で４通りのモジュールとなり得る。各モジュールがいずれの機能を有するかは、各モジュールの処理内容により決定することができるが、好適には、例えば、そのモジュール内部での処理によりバッファにデータを蓄えるタイプのモジュールは、機能「ＷＣ」を有するモジュールとして設計される。
【０２１６】
イニシエータモジュールは、データ処理の先頭に位置し、上流側にモジュールが存在することはないので、上流側のモジュールに対する機能「ＲＰ」及び「ＷＣ」を有する必要はなく、下流側のモジュールに対する機能「ＲＣ」又は「ＷＰ」を有すれば良い。
【０２１７】
ターミネータモジュールは、データ処理の終端に位置し、下流側にモジュールが存在することはないので、下流側のモジュールに対する機能「ＲＣ」及び「ＷＰ」を有する必要はなく、上流側のモジュールに対する機能「ＲＰ」及び「ＷＣ」を有すれば良い。
【０２１８】
ＤＰＣ１３１は、ハーネスから所定の印刷処理の実施を指示された場合、図１３Ｃに例示した情報（例えばテーブル）を参照し、その情報中の印刷パス定義に従って、組み合わせるべきモジュール特定する。次に、ＤＰＣ１３１は、各モジュールに対して、G-READY関数を呼び出して、各モジュールの使用を予約する。各モジュールは、ＤＰＣ１３１からの呼び出しに応答できる場合は、G-READY関数の引数に、次の値を入れて返す。ＤＰＣ１３１からG-READY関数を呼び出す際、引数としては［Ｘ１，ＩＸ１，Ｙ１，ＩＹ１］の四つが与えられる。この引数の内容は次の通りである。
（１）Ｘ１：下流側モジュールに対する機能として「ＲＰ」を有するイニシエータモジュール又はメンバモジュールが、自ら提供するストリームリード関数のポインタを入れて返す引数である。上流側に対する機能として「ＲＣ」を有するターミネータモジュール又はメンバモジュールは、この引数にヌル（ＮＵＬＬ）を入れて返す。ＮＵＬＬは、何も指定されてないことを示す変数である。
（２）ＩＸ１：下流側モジュールに対する機能として「ＲＰ」を有するイニシエータモジュールまたはメンバモジュールが、自ら提供するストリームリード関数の呼び出しの際に指定すべきコンテクストＩＤを入れて返す引数である。上流側に対する機能として「ＲＣ」を有するターミネータモジュール又はメンバモジュールは、この引数に値０を入れて返す。各モジュールが、コンテクストＩＤを返すのは、同じモジュールが同時に二つの処理に用いられる場合が有り得るからである。この場合、ＤＰＣ１３１は、各モジュールに対して処理開始や終了を指示する際、このコンテクストＩＤを用いて、処理の開始と終了のどちらであるかを特定する。
（３）Ｙ１：上流側モジュールに対する機能として「ＷＰ」を有するメンバモジュール又はターミネータモジュールが、自ら提供するストリームライト関数のポインタを入れて返す引数である。下流側に対する機能として「ＷＣ」を有するイニシエータモジュール又はメンバモジュールは、この引数にヌル（ＮＵＬＬ）を入れて返す。
（４）ＩＹ１：上流側モジュールに対する機能として「ＷＰ」を有するメンバモジュール又はターミネータモジュールが、自ら提供するストリームライト関数の呼び出しの際に指定すべきコンテクストＩＤを入れて返す引数である。下流側に対する機能として「ＷＣ」を有するイニシエータモジュール又はメンバモジュールは、この引数に値０を入れて返す。
【０２１９】
図１５は、印刷パスにおけるデータ処理の流れの一例を示す。この図１５では、説明をより分かりやすくするために、ストリームリード関数又はストリームライト関数のいずれかを提供するモジュールの部分がハッチングで示されている。この例では、印刷パスは、ＲＧＰ印刷パスであり、先頭から終端にかけて、ＲＰを有するイニシエータモジュールＩ−Ａ（特定言語処理モジュール１１３）、ＲＣとＷＣとを有するメンバモジュールＭ−Ｅ（色変換／ハーフトーニング処理モジュール１１５）、ＷＰとＲＰとを有するメンバモジュールＭ−Ｈ（インターレース処理モジュール１１７）、及びＲＣを有するターミネータモジュールＴ−Ａの順で配列される。
【０２２０】
ＤＰＣ１３１からG-READY関数が呼び出されると、イニシエータモジュールＩ−Ａは、上記のG-READY関数の定義に従い、ストリームリード関数を提供するとして、その関数のポインタＳＲ１と、そのコンテクストＩＤ（ＲＩＤ１）を有効な引数として、ＤＰＣ１３１に返す。メンバモジュールＭ−Ｅは、自らは提供する関数がないとして、有効な引数は返さない。メンバモジュールＭ−Ｈは、ストリームリード関数とストリームライト関数とを提供するとして、下流側に対するポインタＳＲ２、そのコンテクストＩＤ（ＲＩＤ２）、上流側に対するポインタＳＷ１、及びそのコンテクストＩＤ（ＷＩＤ１）を、引数として返す。ターミネータモジュールＴ−Ａは、自らは提供する関数がないとして、有効な引数は返さない。
【０２２１】
ＤＰＣ１３１は、これらの引数を受け取った後、データ処理に必要なタイミングで、各モジュールに対して、START-J関数を呼び出すことで、データ処理の開始を指示する。このとき、START-J関数には、次の引数［Ｕ１，ＩＵ１，Ｖ１，ＩＶ１］が与えられる。この引数の内容は次の通りである。
（１）Ｕ１：モジュールが、使用するストリームリード関数のポインタを与える。このストリームリード関数のポインタは、上流側に位置しＲＰを有するイニシエータモジュール又はメンバモジュールが、提供するものである。ＷＰを有するターミネータモジュール及びメンバモジュールは呼び出す際には、この引数をヌル（ＮＵＬＬ）としなければならない。
（２）ＩＵ１：ストリームリード関数を利用するモジュールが指定すべきコンテクストＩＤである。このコンテクストＩＤは、上流側に位置しＲＰを有するイニシエータモジュール又はメンバモジュールが、提供するものである。ＷＰを有するターミネータモジュールおよびメンバモジュールは呼び出す際には、この引数を値０としなければならない。
（３）Ｖ１：モジュールが、使用するストリームライト関数のポインタを与える。このストリームライト関数のポインタは、下流側に位置しＷＰを有するターミネータモジュールまたはメンバモジュールが、提供するものである。ＲＰを有するイニシエータモジュールおよびメンバモジュールは呼び出す際には、この引数をヌル（ＮＵＬＬ）としなければならない。
（４）ＩＶ１：ストリームライト関数を利用するモジュールが指定すべきコンテクストＩＤである。このコンテクストＩＤは、下流側に位置しＷＰを有するターミネータモジュールまたはメンバモジュールが、提供するものである。ＲＰを有するイニシエータモジュールおよびメンバモジュールは呼び出す際には、この引数を値０としなければならない。
【０２２２】
上記の規則に従って、各モジュールに対してSTART-J関数の呼び出しの際に、引数が引き渡される。すなわち、ストリームリード関数については、上流側のモジュールが用意したポインタが下流側のモジュールに引き渡され、ストリームライト関数については、下流側のモジュールが用意したポインタが上流側のモジュールに引き渡される。この結果、図１５の右側に示す通り、各モジュールは、ストリームリード関数を用いる場合には、下流側のモジュールが上流側のモジュールが用意したポインタを利用してデータを読み出し、ストリームライト関数を利用する場合には、上流側のモジュールが下流側のモジュールが用意したポインタを利用してデータを書き込む。こうして、各モジュールは、自らのデータを書き込んだり、相手のデータを読み出したりする条件について、ＤＰＣ１３１により呼び出されるまで全く知らなくても、スムーズにデータのやりとりを行なうことができる。
【０２２３】
以上が、プリンタ１５におけるソフトウェア群３７の構成や機能についての説明である。次に、その構成や機能の下でプリンタ１５において行われる処理流れの一例を説明する。
【０２２４】
図１６乃至図１８は、レガシー言語で記述されたコマンドを受信した後に特定言語で記述されたコマンドを受信した場合にプリンタ１５で行われる一連の処理流れを示す。
【０２２５】
ホスト装置１からプリンタ１５のＩ／Ｆ１３がコマンドを受信した場合（Ｓ２１）、ＩＦＤ１０１が、ハーネス群３２５中のＩ／Ｆ１３に対応したハーネス（以下、ＩＦハーネス）３０３の第一のＡＰＩをコールして、データ到着通知をＩＦハーネス３０３に送る（Ｓ２２）。ＩＦハーネス３０３は、複数のＡＰＩを有しており、ＩＦＤ１０１は、それら複数のＡＰＩのうちＳ２１の場合には第一のＡＰＩをコールするように構成されている。
【０２２６】
ＩＦハーネス３０３は、データ到着通知の受信に応答して、サービス３２３が有する一以上のＡＰＩのうちの所定のＡＰＩをコールし、データ到着通知をサービス３２３に送る（Ｓ２３）。
【０２２７】
サービス３２３は、プリンタ１５における印刷パスの排他を管理している。例えば、サービス３２３は、ダイレクト印刷のための印刷パスが構築されている場合には、他の印刷パスを構築しないようビジー状態になっておおり、どの印刷パスも構築されていない場合には、アイドル状態になっている。サービス３２３は、ビジー状態の場合には、コール元のＩＦハーネス３０３にエラーを返す。一方、サービス３２３は、アイドル状態の場合には、ＩＦハーネス３０３の第二のＡＰＩをコールして、印刷開始通知（コールバック関数）をＩＦハーネス３０３に送る（Ｓ２４）。サービス３２３は、ＩＦハーネス３０３からのデータ到着通知に対して印刷開始通知を出す場合にはＩＦハーネス３０３の第二のＡＰＩをコールするように構成されている。第二のＡＰＩがコールされると、その第二のＡＰＩが実行されることにより、例えば以下のＳ２５及びＳ２８の処理が行われる。
【０２２８】
ＩＦハーネス３０３は、印刷処理のＩＤと、その印刷処理のための印刷パスを構成するモジュールの確保要求とを、ＤＰＣ１３１に出す（Ｓ２５）。Ｓ２１からＳ２５の処理は、ホスト装置１からのコマンド受信に起因して行われたものであり、受信したコマンドは、レガシー言語で記述されている可能性が高い。そのため、このＳ２５では、ＩＦハーネス３０３は、印刷処理のＩＤとして、レガシー言語モード印刷をＤＰＣ１３１に通知する。
【０２２９】
ＤＰＣ１３１は、印刷処理ＩＤの通知とモジュール確保要求とに応答して、受けた印刷処理ＩＤに対応する印刷パス定義を、図１３Ｃに例示した情報を参照することにより特定し、特定された印刷パス定義が表す印刷パスの構成にとりかかる。ここでは、ＤＰＣ１３１は、印刷処理ＩＤとしてレガシー言語モード印刷を受けるので、レガシーパスの構成にとりかかる。ＤＰＣ１３１は、図１３Ｃに例示した情報から、レガシーパスを構成するモジュールとして、データ取得モジュール１０３（イニシエータモジュールＩ−Ｂ）とレガシー言語処理モジュール１０５（ターミネータモジュールＴ−Ｂ）とを特定し、それぞれを、G-READY関数によって呼び出す（Ｓ２６及びＳ２７）。これにより、呼び出されたデータ取得モジュール１０３及びレガシー言語処理モジュール１０５は、「STAND-BY」状態から「READY」状態に遷移する。
【０２３０】
次に、ＩＦハーネス３０３は、印刷処理の実行を、ＤＰＣ１３１に要求する（Ｓ２８）。ＤＰＣ１３１は、その要求に応答して、データ取得モジュール１０３とレガシー言語処理モジュール１０５とに、START-J関数を送る（Ｓ２９及びＳ３０）。START-J関数を受けたデータ取得モジュール１０３及びレガシー言語処理モジュール１０５は、「READY」状態から「PROCESSING」状態に遷移する。これにより、レガシーパスが構築されたことになる。なお、この際、レガシー言語処理モジュール１０５は、ＰＥＤ１０７に対して排他要求を発行する。これより、ＰＥＤ１０７は、その後に別のモジュールから排他要求を受けても、排他状態を解除するまでは、その排他要求を受け付けない。
【０２３１】
以降、印刷コマンドがレガシーパスに流れ込んできた場合には、印刷コマンドがバッファ１３３に蓄積され、その印刷コマンドに基づく処理が行われる。例えば、レガシー言語処理モジュール１０５は、データ取得モジュール１０３にデータを要求し（Ｓ３１−１）、それに応答して、データ取得モジュール１０３が、補助バッファ（例えばバッファ１３３よりも容量の少ないバッファ）１３４から、データ（例えば所定サイズ分（例えば一バイト）のデータ）を読み出し、読み出したデータをレガシー言語処理モジュール１０５に渡す（Ｓ３１−４）。レガシー言語処理モジュール１０５は、そのデータに基づくコマンドをＰＥＤ１０７に送る。このＳ３１−１及びＳ３１−４の処理が、繰り返される。なお、このＳ３１−１及びＳ３１−４の処理は、例えば、図１５を参照して説明した方法で行われる。そのため、補助バッファ（例えば２５６バイトの容量を持ったバッファ）１３４は、データ取得モジュール１０３が有していても良い。また、データ取得モジュール１０３は、補助バッファ１３４にデータが無い場合には、ＩＦＤ１０１にデータを要求し（Ｓ３１−２）、ＩＦＤ１０１が、バッファ１３３からデータを取得し、取得したデータをデータ取得モジュール１０３に渡すことができる。
【０２３２】
レガシー言語処理モジュール１０５は、Ｓ３１−４により取得されたコマンドを解析し、その解析結果に基づく処理を行う。例えば、レガシー言語処理モジュール１０５により、特定モード移行コマンドが検出されるまでは、例えば、前述した仕様情報をホスト装置１に通知することや、図１２の段階Ａ〜段階Ｅまでの処理が行われる。
【０２３３】
Ｓ３１−１及びＳ３１−４の処理が繰り返し行われている間も、印刷コマンド（ストリーム）が流れ込んできた場合には、バッファ１３３にその印刷コマンドは蓄積される。これは、レガシー言語ではなく特定言語で書かれた印刷コマンドが流れ込んできた場合も同様である。レガシー言語処理モジュール１０５が所定のコマンド（例えばレガシージョブ終了コマンド又は特定モード移行コマンド）を検出するまで、図１７に示すように、Ｓ３１−１〜Ｓ３１−４の処理が行われる（Ｓ３２−１〜Ｓ３２−４）。
【０２３４】
Ｓ３２−４において、レガシー言語処理モジュール１０５は、特定モード移行コマンドを検出した場合には、ＩＦハーネス３０３の第三のＡＰＩをコールし、ＲＧＢ画像の印刷開始をＩＦハーネス３０３に通知する（Ｓ３３）。すなわち、レガシーパスからＲＧＢ印刷パスへの切り替えのための処理が開始される。ここでは、データ取得モジュール１０３が、レガシー言語処理モジュール１０５から所定の通知を受け、それに応答して、ＩＦハーネス３０３の第三のＡＰＩをコールし、ＲＧＢ画像の印刷開始をＩＦハーネス３０３に通知しても良い。第三のＡＰＩは、コマンドの検出に応答してコールされるＡＰＩなので、第一のＡＰＩと類似した構成とすることができる。
【０２３５】
ＲＧＢ画像の印刷開始通知を受けたＩＦハーネス３０３は、図１６のＳ２５及びＳ２８と実質的に同様の処理を行うことができる（Ｓ３４及びＳ３７）。
【０２３６】
すなわち、ＩＦハーネス３０３は、印刷処理のＩＤと、その印刷処理のための印刷パスを構成するモジュールの確保要求（例えば「LockProcess−ＲＧＢ印刷パス」）を、ＤＰＣ１３１に出す（Ｓ３４）。ＩＦハーネス３０３は、ＲＧＢ画像の印刷開始通知を受けたので、印刷処理のＩＤとして、特定言語モード印刷をＤＰＣ１３１に通知する。
【０２３７】
ＤＰＣ１３１は、印刷処理ＩＤとして特定言語モード印刷を受けるので、ＲＧＢ印刷パスの構成にとりかかる。ＤＰＣ１３１は、図１３Ｃに例示した情報から、ＲＧＢ印刷パスを構成するモジュールとして、特定言語処理モジュール１１３（イニシエータモジュールＩ−Ａ）、色変換／ハーフトーニング処理モジュール１１５（メンバモジュールＭ−Ｅ）、インターレース処理モジュール１１７（メンバモジュールＭ−Ｈ）及び印刷処理モジュール１１９（ターミネータモジュールＴ−Ａ）を特定し、それぞれを、G-READY関数によって呼び出す（Ｓ３５及びＳ３６）。
【０２３８】
次に、ＩＦハーネス３０３は、印刷処理の実行（例えば「StartProcess−ＲＧＢ印刷パス」）を、ＤＰＣ１３１に要求する（Ｓ３７）。ＤＰＣ１３１は、その要求に応答して、各モジュール１１３、１１５、１１７及び１１９に、START-J関数を送る（Ｓ３８及びＳ３９）。START-J関数を受けた各モジュール１１３、１１５、１１７及び１１９は、「READY」状態から「PROCESSING」状態に遷移する。これにより、ＲＧＢ印刷パスが構築されたことになる。なお、この際、ＲＧＢ印刷パスのイニシエータとなる印刷処理モジュール１１９は、レガシーパスのイニシエータのように、ＰＥＤ１０７に対して排他要求を発行することは行わずに、データを送るようにする。なぜなら、レガシーパスの構築によって既にＰＥＤ１０７の確保はできているので、排他要求を発行せずとも、ＰＥＤ１０７にデータを受け取ってもらえ、且つ、わざわざ排他要求を発行しても、ＰＥＤ１０７は前述したように既に別のイニシエータによって確保済みなので、その排他要求を受け付けてもらえないからである。
【０２３９】
本実施形態では、印刷パスを構築しようとするタイミング（換言すれば、ＤＰＣ１３１から各モジュールのAPI（G-READY、START-J等）が呼ばれるタイミング）で、ＤＰＣが、その印刷パス（例えばレガシーパスやＲＧＢ印刷パス）を構成する各モジュールに、印刷パスを表す情報（つまりデータ処理経路の情報）を伝える。具体的には、例えば、ＤＰＣ１３１は、呼び出すＡＰＩの引数に印刷パス情報を入れてそのＡＰＩをコールする。印刷パス情報としては、例えば、該印刷パス情報の提供先となるモジュールの最も近くに位置する上流側及び下流側のうちの少なくとも一方のモジュールのＩＤとすることができる。
【０２４０】
Ｓ３９までの処理が完了すると、レガシーパスの切り替え先となるＲＧＢ印刷パスが構築される。図１６〜図１８の処理流れ例では、ＲＧＢ印刷パスは、プリンタ１５において特定モード移行コマンドが検出されたときに、構築される。
【０２４１】
ＲＧＢ印刷パスが構築されたならば、図１７に点線枠７０３で示すように、前述した特定モードの実行（換言すれば、図１２の段階Ｇ〜段階Ｍまでの処理）が可能となる。特定モードにおいて、図１６〜図１８の処理流れ例では、ＲＧＢ印刷パスのイニシエータ（つまり特定言語処理モジュール１１３）は、レガシーパスのターミネータ（つまりレガシー言語処理モジュール）１０５からデータをもらい、そのデータを、下流へ流す。具体的には、例えば、特定言語処理モジュール１１３は、例えば、レガシー言語処理モジュール１０５にデータを要求する（Ｓ４０）。レガシー言語処理モジュール１０５は、データ取得モジュール１０３にデータを要求し（Ｓ４１−１）、それに応答して、データ取得モジュール１０３が、補助バッファ１３４から、データ（コマンド）を読み出し、読み出したデータをレガシー言語処理モジュール１０５に渡す（Ｓ４１−４）。必要に応じて、図１６のＳ３１−２及びＳ３１−３と同様の処理が行われる（Ｓ４１−２及びＳ４１−３）。レガシー言語処理モジュール１０５は、データ取得モジュール１０３からのデータを特定言語処理モジュール１１３に渡す（Ｓ４２）。特定言語処理モジュール１１３は、渡されたデータ（特定言語で書かれたコマンド）を解析し、そのコマンドに基づく処理を実行する。渡されたものがＲＧＢデータの場合、特定言語処理モジュール１１３は、取得したＲＧＢデータを下流のモジュールに流す（Ｓ４３）。流されたＲＧＢデータは、各メンバモジュール１１５、１１７によって、色変換、ハーフトーニング及びインターレース等の処理が施される。それらの処理が施されたＲＧＢデータに基づいて、印刷処理モジュール１１９によって、ＰＥＤ１０７の制御コマンドが作られ、その制御コマンドが、ＰＥＤ１０７に送られる（Ｓ４４）。
【０２４２】
レガシー言語処理モジュール１０５と特定言語処理モジュール１１３との間でデータの授受を可能にするために、モジュール１０５及び１１３は、イニシエータ又はターミネータであっても、メンバモジュールと実質的に同様の構成（つまり、上流側に対する機能と下流側に対する機能との双方を有する構成）になっていてもよい。
【０２４３】
上記のように、特定モードになった場合、レガシー言語処理モジュール１０５は、取得されるコマンドを全く解析することなく、特定言語処理モジュール１１３にコマンドを流す。このため、レガシー言語処理モジュール１０５は、特定モードの実行中に、特定モードの解除を意味するレガシー移行コマンドが流れてきても、それを検出せずに、そのレガシー移行コマンドを特定言語処理モジュール１１３に流す。特定言語モジュール１１３は、そのレガシー移行コマンドを検出する。また、そのレガシー移行コマンドは、より下流に流れて、下流側のモジュール１１５、１１７及び１１９のうちの少なくとも一つも検出しても良い。また、この検出は、上流側から下流側にかけて順次に行われても良い。特定モードの解除を検出したモジュール（例えば１１３、１１５、１１７及び１１９）は、例えばその解除が検出された順に、ＤＰＣ１３１に、特定モード解除通知（例えば「EndJob」）を出す（Ｓ４５、Ｓ４６）。各モジュール１１３、１１５、１１７及び１１９は、この場合に、「PROCESSING」状態から「READY」状態になることができる。
【０２４４】
各モジュールから特定モード解除通知を受けたＤＰＣ１３１は、ＩＦハーネス３０３の第四のＡＰＩをコールし、特定モードの解除のための処理要求（例えば「StartProcess−ＲＧＢ印刷パス−コールバック」）を、ＩＦハーネス３０３に出す（Ｓ４７）。
【０２４５】
ＩＦハーネス３０３は、Ｓ３７で印刷処理の実行を要求してから、コールされるまで待ち状態となっている。その状態において、ＩＦハーネス３０３は、特定モードの解除のための処理要求を受けた場合、ＤＰＣ１３１の所定のＡＰＩをコールし、特定モードの解除処理の要求（例えば「RelaeseProcess−ＲＧＢ印刷パス）を出す（Ｓ４８）。ＤＰＣ１３１は、その要求に応答して、ＲＧＢ印刷パスを構成する各モジュール１１３、１１５、１１７及び１１９に、キャンセル要求（例えば「CancelReady」）を出す（Ｓ４９及びＳ５０）。このキャンセル要求は、特定モード解除通知を受信した順序と同じ順序で発行することができる。各モジュール１１３、１１５、１１７及び１１９は、その要求に応答して、「READY」状態から「STAND-BY」状態になることができる。これにより、ＲＧＢ印刷パスが解除される。換言すれば、ＲＧＢ印刷パスがなくなる。
【０２４６】
また、ＩＦハーネス３０３は、レガシー言語処理モジュール１０５に、特定モードの解除通知を出す（Ｓ５１）。レガシー言語処理モジュール１０５は、その解除通知を受けてからは、再び、データ取得モジュール１０３から渡されるデータ（コマンド）の解析を行う。すなわち、例えば、図１６のＳ３１−１〜Ｓ３１−４の処理が行われる（Ｓ５２−１〜Ｓ５２−４）。
【０２４７】
補助バッファ１３４が空になった場合、データ取得モジュール１０３が、ＩＦＤ１０１にデータを要求する。しかし、バッファ１３３も空になっていれば、データはデータ取得モジュール１０３には送られて来ない（例えば、バッファ１３３が空になっていることを意味する通知がＩＦＤ１０１からデータ取得モジュール１０３に送られる）。
【０２４８】
この場合には、レガシーパスも解除され、プリンタ１５からレガシーパスが無くなる。具体的には、例えば、バッファ１３３が空になったことは、まず、データ取得モジュール１０３で検出され、レガシーモード解除通知（例えば「EndJob」）が、データ取得モジュール１０３からＤＰＣ１３１に送られる（Ｓ５３）。その後、バッファ１３３が空になったことが、データ取得モジュール１０３からレガシー言語処理モジュール１０５に通知されて、レガシー言語処理モジュール１０５でも検出され、レガシーモード解除通知（例えば「EndJob」）が、レガシー言語処理モジュール１０５からＤＰＣ１３１に送られる（Ｓ５４）。
【０２４９】
レガシーパスの構成要素である全てのモジュール１０３及び１０５からレガシーモード解除通知を受けたＤＰＣ１３１は、ＩＦハーネス３０３の第五のＡＰＩをコールし、レガシーモードの解除のための処理要求（例えば「StartProcess−レガシーパス−コールバック」）を、ＩＦハーネス３０３に出す（Ｓ５５）。各モジュール１０３、１０５は、この場合に、「PROCESSING」状態から「READY」状態になることができる。
【０２５０】
ＩＦハーネス３０３は、レガシーモードの解除のための処理要求を受けた場合、ＤＰＣ１３１の所定のＡＰＩをコールし、レガシーモードの解除処理の要求（例えば「RelaeseProcess−レガシーパス）を出す（Ｓ５６）。ＤＰＣ１３１は、その要求に応答して、レガシーパスを構成するモジュール１０３及び１０５に対し、例えば、レガシーモード解除通知を受けた順序と同じ順序で、キャンセル要求（例えば「CancelReady」）を出す（Ｓ５７及びＳ５８）。各モジュール１０３、１０５は、その要求に応答して、「READY」状態から「STAND-BY」状態になることができる。これにより、レガシーパスが解除される。換言すれば、ＲＧＢ印刷パスがなくなる。
【０２５１】
最後に、ＩＦハーネス３０３は、印刷終了通知をサービス３０５に出す（Ｓ５９）。これにより、サービス３０５は、排他を解除し、印刷処理の要求を受け付けることができる。例えば、サービス３０５は、印刷終了通知を受けるまでは、他の印刷処理要求（例えばダイレクト印刷のための要求）を別のハーネスから受けても、その印刷処理要求を受け付けないが、印刷終了通知を受けた後は、その印刷処理要求を受け付けることができる。
【０２５２】
以上、上述した実施形態によれば、プリンタ１５では、ホスト装置１から受信されるデータの種別に関わらず、とりあえずは全てレガシーパスでデータを受け、特定の種別のデータであるということがレガシーパスの特定の場所で検出された場合に、特定の種別のデータが、その特定の種別のデータを処理するための別の印刷パスに転送され、その別の印刷パスで処理される。これにより、レガシーパスそれ自体の構成を変更するといった大きな設計変更を行うことなく、特定の種別のデータを処理するための機能を設けることができる。
【０２５３】
ところで、上述した実施形態について、以下のような幾つかの変形例が考えられる。以下、それについて説明する。
【０２５４】
（１）第一の変形例。
【０２５５】
図１９は、本発明の一実施形態の第一変形例におけるプリンタドライバの構成例を示す。図２０は、図１９のプリンタドライバからデータを受信するプリンタにおける印刷パスの構成例を示す。
【０２５６】
この第一変形例は、レガシーパスと、ＲＧＢデータ処理するパスとが同時に使用される別の例に関わる。具体的には、この第一変形例では、プリンタドライバ２１から送信されるＲＧＢデータを、XHTML-Print（MIME Multiplexed）のＲＧＢデータとすることができる。
【０２５７】
しかし、単純に、ＲＧＢデータを、XHTML-PrintのＲＧＢデータとしてしまうことは好ましくないと考えられる。なぜなら、第一に、XHTML-Printでは、処理対象として画像が参照されるため、プリンタ１５がホスト装置１から別途その画像を読み込むことになり、それゆえ、プリンタ１５が双方向通信を行う能力を持っていなければならず、双方向通信を行えないプリンタでは、XHTML-Printを実行できないからである。また、第二に、処理対象の画像のデータサイズは大きいこともあるので、ホスト装置１からの読み込みに長い時間がかかり、印刷速度が遅くなってしまうことがあり得るからである。
【０２５８】
そこで、この第一変形例では、図１９に示すように、プリンタドライバ２１が、パッキング処理部３９０を備え、その処理部３９０により、参照される画像もパッキング（エンコード）し、XHTML-Printに関わるコマンドをストリームデータでプリンタに送るように構成されている。プリンタ１５では、レガシーパスでそのストリームデータを受け、レガシーパスの特定の場所（例えばレガシー言語処理モジュール１０５）で、XHTML-Printに関わるコマンドであると検出された場合に、ＤＰＣ１３１により、また別のＲＧＢ印刷パスが構築され、そのまた別のＲＧＢ印刷パスにより、XHTML-Printに関わるコマンドが処理される。また別のＲＧＢ印刷パスは、例えば、前述したＲＧＢ印刷パスの特定言語処理モジュール１１３と、色変換／ハーフトーニング処理モジュールとの間に、上流側から下流側かにかけて、MIME（Multipurpose Internet Mail Extension）に関する処理を行うMIME処理モジュール４４１と、XHTML-Printに関わる処理（例えばデコード）を行うXHTML-Print印刷処理モジュール４４３とを有する。
【０２５９】
（２）第二の変形例。
【０２６０】
プリンタ１５（例えば、その中のサービス３２３）は、レガシーパスしか構築されていないときは、ホストからのＲＧＢデータを処理するためのＲＧＢ印刷パスとは別のＲＧＢ印刷パス（例えば、ダイレクト印刷のための印刷パス）を構築しても良い。その場合、ＰＥＤ１０７は、レガシーパスにより予約をかけられて排他状態となっているから、排紙はできないが、ＲＧＢデータを、印刷の直前の状態（例えばインターレース処理まで済んだ状態）にしてプリンタ記憶域３３に一時記憶させておき、レガシーパスの解除後に、その記憶させておいたデータを読み込んで印刷してもよい。
【０２６１】
（３）第三の変形例。
【０２６２】
プリンタ１５は、ホスト装置１から何かしらデータを受信した場合にレガシーパスを構築するが、その場合に（例えば、レガシーパスの構築と同じ（例えば実質的に同じ）タイミングで）、ＲＧＢ印刷パスも構築しても良い。
【０２６３】
（４）第四の変形例。
【０２６４】
補助バッファ１３４が無く、バッファ１３３から読み出されたデータをレガシー言語処理モジュール１０５が受けても良い。その場合、特定モード移行コマンドが読み出されて、ＲＧＢ印刷パスが構築されたならば、それ以降のデータは、特定言語処理モジュール１１３が、バッファ１３３から直接取得しても良い。また、特定言語処理モジュール１１３がバッファ１３３から直接データを取得するようになった場合には、プリンタ１５は、所定のイベントが検出されるまで（例えば特定言語処理モード１１３が特定モードの解除を検出するまで）、レガシーパスを解除してもよく、そのイベントが検出された場合に、再度、レガシーパスを構築しても良い。
【０２６５】
以上、本発明の好適な実施形態及び幾つかの変形例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施形態及び変形例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、ホスト装置１とプリンタ１５とは、インターネット等の通信ネットワークを介して接続され、プリンタ１５は、その通信ネットワークを介してホスト装置１にデバイスＩＤや仕様情報を送信してもよい。また、例えば、プリンタ１５に記憶されている優先順位のどこまでがユーザが許容できるレベルであるかを、プリンタ１５の操作パネル或いはプリンタドライバ２１等のユーザインタフェースを介してプリンタ１５に設定し、プリンタ１５は、設定された順位よりも高い順位の印刷条件に関するパラメータも変更しなければいけない場合には、印刷できないことを表す情報（更に、このパラメータを設定してくれれば印刷できるということを表す情報が含まれていても良い）をプリンタドライバ２１に送信してもよい。
【符号の説明】
【０２６６】
１…ホスト装置  ３…インタフェース回路  ５…入力装置  ７…ディスプレイ画面  １３…インタフェース回路  １５…プリンタ  １７…プロセッサ  １９…ホスト記憶域  ２１…プリンタドライバ  ２２…アプリケーションソフト  ３１…印刷コントローラ  ３３…プリンタ記憶域  ３５…プロセッサ  ３７…ソフトウェア群  ４１…エンジンコントローラ  ４３…印刷エンジン  ６１…レイアウト管理テーブル  ６３…印刷方法管理テーブル  １０１…インタフェースドライバ（ＩＦＤ）  １０３…データ取得モジュール  １０５…レガシー言語処理モジュール  １０７…印刷エンジンドライバ（ＰＥＤ）  １１３…特定言語処理モジュール  １１５…色変換／ハーフトーニング処理モジュール  １１７…インターレース処理モジュール  １１９…印刷処理モジュール
【図１】
2010086555.tif 000003
【図２】
2010086555.tif 000004
【図３】
2010086555.tif 000005
【図４】
2010086555.tif 000006
【図５】
2010086555.tif 000007
【図６】
2010086555.tif 000008
【図７】
2010086555.tif 000009
【図８】
2010086555.tif 000010
【図９】
2010086555.tif 000011
【図１０】
2010086555.tif 000012
【図１１】
2010086555.tif 000013
【図１２】
2010086555.tif 000014
【図１３】
2010086555.tif 000015
【図１４】
2010086555.tif 000016
【図１５】
2010086555.tif 000017
【図１６】
2010086555.tif 000018
【図１７】
2010086555.tif 000019
【図１８】
2010086555.tif 000020
【図１９】
2010086555.tif 000021
【図２０】
2010086555.tif 000022