以下、本発明の実施の形態について図面を参照して説明する。以下の説明では同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがってそれらについての詳細な説明は繰返さない。
図1は、本発明の実施の形態の1つにおけるプリントシステムの全体概要を示す図である。図1を参照して、プリントシステム1は、画像処理装置として機能する複合機(以下、「MFP」という)100A,100B,100C,100Dと、パーソナルコンピューター(以下、「PC」という)200A,200B,200C,200Dと、サーバー300と、を含む。MFP(Multi Function Peripheral)100A,100B,100C,100DおよびPC200A,200B,200C,200Dそれぞれは、ネットワーク3に接続される。なお、図ではネットワーク3に4台のMFP100A,100B,100C,100Dが接続され、4台のPC200A,200B,200C,200Dが接続される例を示しているが、MFP100A,100B,100C,100DおよびPC200A,200B,200C,200Dの数はこれに限定されるものではなく、それぞれ1台以上であればよい。また、MFP100A,100B,100C,100Dに代えて、PC200A,200B,200C,200Dが制御可能な別の画像処理装置を用いることができる。PC200A,200B,200C,200Dが制御可能な画像処理装置の一例としては、スキャナ装置、ファクシミリ装置、プリンター等の画像形成装置、プロジェクションテレビ、投影装置等の表示装置、データを記憶する記憶装置がある。
ネットワーク3は、ローカルエリアネットワーク(LAN)であり、接続形態は有線または無線を問わない。また、ネットワーク3は、LANに限らず、ワイドエリアネットワーク(WAN)、公衆交換電話網(PSTN)、インターネット等であってもよい。
ネットワーク3は、インターネット5と接続されている。サーバー300は、インターネット5に接続されている。MFP100A〜100DおよびPC200A〜200Dそれぞれは、ネットワーク3およびインターネット5を介してサーバー300と通信可能である。
MFP100A〜100Dは、ここでは、機能が異なる場合を例に説明する。例えば、MFP100Aは、MFP100B〜100Dのいずれかが有する機能の全てを備えているが、MFP100B〜100Dそれぞれは、MFP100Aが備える複数の機能の一部を有していない。例えば、MFP100Bは、MFP100Aが備える自動原稿搬送装置を有していない。また、MFP100Cは、MFP100Aが備えるカラープリント機能を有していない。MFP100Dは、MFP100Aが備える後処理機能を有していない。このため、MFP100A〜100Dをそれぞれ制御するための4つのドライバープログラムは、異なる。
PC200A,200B,200C,200Dは、一般的なコンピューターである。PC200A,200B,200C,200Dそれぞれは、MFP100A,100B,100C,100Dにそれぞれ対応する複数のドライバープログラムがインストールされており、ドライバープログラムを実行することにより、MFP100A,100B,100C,100Dを制御して、MFP100Aに、画像形成処理、原稿読取処理等を実行させることが可能である。
本実施の形態においけるプリントシステム1においては、サーバー300において、MFP100A〜100Dそれぞれを制御するためのドライバープログラムが記憶されている。また、サーバー300には、ドライバープログラム生成プログラムがインストールされており、サーバー300は、ドライバープログラム生成装置として機能する。ドライバープログラム生成装置は、MFP100A〜100Dそれぞれを制御するためのドライバープログラムのうち1つを基準にして、その一部を変更することによって、新たなドライバープログラムを生成する。このため、MFP100A〜100Dとは異なる機能を有するMFPを制御するための新たなドライバープログラムを生成することができる。また、MFP100A〜100Dを制御するためのドライバープログラムにおいて、ユーザーインターフェースの部分を変更した新たなドライバープログラムを生成することができる。例えば、MFP100Aを制御するためのドライバープログラムの表示画面を、MFP100Bを制御するためのドライバープログラムで表示される表示画面に変更することができる。以下、プリントシステム1の詳細について、まず、MFP100A〜100Dそれぞれを制御するためのドライバープログラムについて説明し、その後、ドライバープログラム生成装置として機能するサーバー300について説明する。
MFP100A〜100Dの機能は異なるが、ここでは、MFP100B〜100Dが有する機能の全てを有するMFP100Aについて、そのハードウエア構成および機能を説明する。
図2は、MFPの外観を示す斜視図である。図3は、MFPのハードウエア構成の一例を示すブロック図である。図2および図3を参照して、MFP100Aは、自動原稿搬送装置(以下「ADF」という)121と、原稿読取部123と、原稿読取部123が原稿を読み取って出力する画像データに基づいて用紙等に画像を形成する画像形成部125と、画像形成部125に用紙を供給する給紙部127と、画像が形成された用紙を処理する後処理部128と、ユーザーインターフェースとしての操作パネル129と、メイン回路110と、を含む。
ADF121は、原稿給紙トレイ上にセットされた複数枚の原稿を1枚ずつ自動的に原稿読取部123のプラテンガラス上に設定された所定の原稿読み取り位置まで搬送し、原稿読取部123により原稿画像が読み取られた原稿を原稿排紙トレイ上に排出する。原稿読取部123は、原稿読取位置に搬送されてきた原稿に光を照射する光源と、原稿で反射した光を受光する光電変換素子とを含み、原稿のサイズに応じて原稿画像を走査する。光電変換素子は、受光した光を電気信号である画像データに変換して、画像形成部125に出力する。給紙部127は、給紙トレイに収納された用紙を画像形成部125に搬送する。
画像形成部125は、周知の電子写真方式により画像を形成するものであって、外部から受信された画像データ、または、原稿読取部123から入力される画像データにシェーディング補正などの各種のデータ処理を施し、データ処理後の画像データに基づいて、給紙部127により搬送される用紙に画像を形成する。
後処理部128は、画像が形成された用紙を排紙する。後処理部128は、複数の排紙トレイを有し、画像が形成された用紙をソートして排紙することが可能である。また、後処理部128は、パンチ穴加工部、ステープル加工部を備えており、排紙された用紙にパンチ穴加工、またはステープル加工することが可能である。また、MFP100Aは、その上面にユーザーとのユーザーインターフェースとしての操作パネル129を備えている。
メイン回路110は、CPU111と、通信インターフェース(I/F)部112と、ROM(Read Only Memory)113と、RAM(Random Access Memory)114と、EEPROM(Electrically Erasable and Programmable ROM)115と、大容量記憶装置としてのハードディスクドライブ(HDD)116と、ファクシミリ部117と、ネットワークI/F118と、CD(Compact Disk)−ROM119Aが装着される外部記憶装置119と、を含む。CPU111は、自動原稿搬送装置121、原稿読取部123、画像形成部125、給紙部127、後処理部128および操作パネル129と接続され、MFP100Aの全体を制御する。
ROM113は、CPU111が実行するプログラム、またはそのプログラムを実行するために必要なデータを記憶する。RAM114は、CPU111がプログラムを実行する際の作業領域として用いられる。また、RAM114は、原稿読取部123から連続的に送られてくる読取データ(画像データ)を一時的に記憶する。
操作パネル129は、MFP100Aの上面に設けられる。操作パネル129は、表示部131と操作部133とを含む。表示部131は、LCD、有機ELD(Electro−Luminescence Display)等のディスプレイであり、ユーザーに対する指示メニューや取得した画像データに関する情報等を表示する。操作部133は、複数のキーを備え、キーに対応するユーザーの操作による各種の指示、文字、数字などのデータの入力を受け付ける。操作部133は、表示部131の表示面の位置を検出するタッチパネル135をさらに含む。タッチパネル135は、表示部131の上面または下面に設けられ、ユーザーにより指示された位置の座標をCPU111に出力する。
通信I/F部112は、MFP100Aを外部の装置と接続するためのインターフェースである。ネットワークI/F118は、MFP100Aをネットワーク3に接続するためのインターフェースである。CPU111は、ネットワークI/F118を介してネットワーク3に接続されたPC200A,200B,200C,200Dとの間で通信し、データを送受信する。また、ネットワークI/F118は、ネットワーク3を介してインターネットに接続されたサーバー300等のコンピューターと通信が可能である。
ファクシミリ部117は、公衆交換電話網(PSTN)に接続され、ファクシミリデータを送受信する。ファクシミリ部117は、原稿読取部123により読み取られた画像データまたはHDD116に記憶されたデータをファクシミリデータに変換して、PSTNに接続されたファクシミリ装置に送信する。また、ファクシミリ部117は、受信されたファクシミリデータをHDD116に記憶するか、画像形成部125にファクシミリデータの画像を用紙に形成させる。
外部記憶装置119は、CD−ROM119Aが装着される。CPU111は、外部記憶装置119を介してCD−ROM119Aにアクセス可能である。CPU111は、外部記憶装置119に装着されたCD−ROM119Aに記録されたプログラムをRAM114にロードして実行する。なお、CPU111が実行するプログラムは、CD−ROM119Aに記録されたプログラムに限られず、HDD116に記憶されたプログラムをRAM114にロードして実行するようにしてもよい。この場合、ネットワーク3に接続された他のコンピューターが、MFP100AのHDD116に記憶されたプログラムを書き換える、または、新たなプログラムを追加して書き込むようにしてもよい。さらに、MFP100Aが、ネットワークに接続された他のコンピューターからプログラムをダウンロードして、そのプログラムをHDD116に記憶するようにしてもよい。ここでいうプログラムは、CPU111が直接実行可能なプログラムだけでなく、ソースプログラム、圧縮処理されたプログラム、暗号化されたプログラム等を含む。
PC200A,200B,200C,200Dのハードウエア構成および機能は同じなので、ここではPC200Aを例に説明する。
図4は、PCのハードウエア構成の一例を示すブロック図である。図4を参照して、PC200Aは、それぞれがバス208に接続されたCPU201、ROM202、RAM203、ネットワークI/F204、HDD205、表示部206、操作部207および外部記憶装置209を含む。
CPU201は、PC200Aの全体を制御する。ROM202は、CPU201が実行するプログラム等を記憶する。RAM203は、CPU201の作業領域として用いられる。ネットワークI/F204は、PC200Aをネットワーク3に接続するためのインターフェースである。HDD205は、大容量記憶装置であり、データを不揮発的に記憶する。表示部206は、液晶表示装置、陰極線管(CRT)、有機ELD(Electro−Luminescence Display)等の表示装置である。操作部207は、キーボード、および、マウス、タッチパネルなどのポインティングデバイスであり、ユーザーの操作の入力を受け付ける。
外部記憶装置209は、CD−ROM209Aが装着される。CPU201は、外部記憶装置209を介してCD−ROM209Aに記憶されたプログラムをRAM203にロードし、実行する。なお、プログラムを記憶する記録媒体としては、CD−ROM209Aに限られず、フレキシブルディスク、カセットテープ、光ディスク(MO/MD/DVD)、ICカード、光カード、マスクROM、EPROM、EEPROMなどの半導体メモリ等でもよい。また、HDD205に記憶されたプログラムをRAM203にロードして実行するようにしてもよい。この場合、PC200Aが、ネットワーク3に接続された他のコンピューターからプログラムをダウンロードして、そのプログラムをHDD205に記憶するようにしてもよい。ここでいうプログラムは、CPU201が直接実行可能なプログラムだけでなく、ソースプログラム、圧縮処理されたプログラム、暗号化されたプログラム等を含む。
図5は、サーバーのハードウエア構成の一例を示すブロック図である。図5を参照して、サーバー300は、それぞれがバス308に接続されたCPU301、ROM302、RAM303、ネットワークI/F304、HDD305、表示部306、操作部307および外部記憶装置309を含む。
CPU301は、サーバー300の全体を制御する。ROM302は、CPU301が実行するプログラム等を記憶する。RAM303は、CPU301の作業領域として用いられる。ネットワークI/F304は、サーバー300をネットワーク3に接続するためのインターフェースである。HDD305は、大容量記憶装置であり、データを不揮発的に記憶する。表示部306は、液晶表示装置、陰極線管(CRT)、有機ELD等の表示装置である。操作部307は、キーボード、および、マウス、タッチパネルなどのポインティングデバイスであり、ユーザーの操作の入力を受け付ける。
外部記憶装置309は、CD−ROM309Aが装着される。CPU301は、外部記憶装置309を介してCD−ROM309Aに記憶されたプログラムをRAM303にロードし、実行する。なお、プログラムを記憶する記録媒体としては、CD−ROM309Aに限られず、フレキシブルディスク、カセットテープ、光ディスク(MO/MD/DVD)、ICカード、光カード、マスクROM、EPROM、EEPROMなどの半導体メモリ等でもよい。また、HDD305に記憶されたプログラムをRAM303にロードして実行するようにしてもよい。この場合、サーバー300が、ネットワーク3に接続された他のコンピューターからプログラムをダウンロードして、そのプログラムをHDD305に記憶するようにしてもよい。ここでいうプログラムは、CPU301が直接実行可能なプログラムだけでなく、ソースプログラム、圧縮処理されたプログラム、暗号化されたプログラム等を含む。
次に、MFP100A〜100Dそれぞれを制御するためのドライバープログラムについて説明する。ここでは、PC200Aが、MFP100Aを制御するためのドライバープログラムを実行する場合を例に説明する。
図6は、ドライバープログラムを実行するPCが備えるCPUの機能の一例をHDDに記憶されるデータとともに示すブロック図である。図6に示す機能は、PC200Aが備えるCPU201が、HDD205に記憶されたMFP100Aを制御するためのドライバープログラムを実行することにより、CPU201に形成される機能である。
図6を参照して、PC200Aは、HDD205にMFP100Aを制御するためのドライバープログラム91を記憶している。ドライバープログラム91は、機能定義データ93と、機能間定義データ95と、を含む。機能定義データ93および機能間定義データ95は、XML(Extensible Markup Language)等のマックアップ言語、C言語などのプログラム言語で記載される。このため、機能定義データ93および機能間定義データ95を、編集プログラム等を用いて容易に変更することができる。なお、機能定義データ93および機能間定義データ95は、スクリプト言語をバイナリ化したデータ、または、プログラム言語をコンパイルし、バイナリ化したデータであってもよい。なお、ここでは、機能定義データ93および機能間定義データ95を、ドライバープログラムの一部としているが、機能定義データ93および機能間定義データ95は、ドライバープログラムとは別のデータとして、HDD205に記憶するようにしてもよい。
機能定義データ93は、複数のUI定義データと、複数のコマンド定義データとを含む。複数のUI定義データ各々は、複数の機能のいずれかに対応し、該機能に対して設定することが可能な1以上の設定値と、当該1以上の設定値を受け付けるための表示コマンドと、を定義する。表示コマンドは、CPU201に機能別画面を表示させるためのコマンドである。表示コマンドは、CPU201が表示部206に表示する画像中の位置を示す位置情報と、表示する部品を特定する部品特定情報とを含む。CPU201が表示部206に表示する部品は、予め準備された画像であり、例えば、ポップアップウィンドウ、コンボボックス、リストボックス、ラジオボタン等である。
複数のコマンド定義データ各々は、複数の機能のいずれかに対応し、当該機能に対して設定することが可能な1以上の設定値にそれぞれ対応し、MFP100A〜100Dで共通の1以上のプリントコマンドを定義する。プリントコマンドは、MFP100A〜100Dが解釈可能なコマンドであり、MFP100A〜100Dとの間で予め定められたコマンドである。プリントコマンドは、好ましくは、PJL(Print Job Language)、PCL(Printer Control Language)、XPS(XML Paper Specification)PrintTicket、PS(PostScript)である。
機能間定義データ95は、MFP100Aが有する複数の機能のうちから選ばれた2以上の関連機能において、2以上の関連機能のうち第1の関連機能に対して設定される設定値と、2以上の関連機能のうち第1関連機能とは別の第2の関連機能に設定することができない設定値、および、第2の関連機能に設定することができる設定値の組を定める。換言すれば、機能間定義データ95は、第2関連機能に対して設定可能な1以上の設定値のうちで、第1関連機能に対して第1設定値が設定される場合に、設定不可能な第2設定値と、設定可能な第3設定値と、を定める。機能間定義データは、メッセージ表示コマンドを含む場合がある。メッセージ表示コマンドは、第2の関連機能に対して第2設定値が設定されることをユーザーに通知するための禁則メッセージを含む。
PC200Aが備えるCPU201は、UI定義データ取得部51と、機能別画面表示部53と、設定値受付部55と、コマンド定義データ取得部57と、コマンド生成部59と、コマンド送信部61と、を含む。
UI定義データ取得部51は、HDD205に記憶された機能定義データ93のうちから複数のUI定義データを読出し、複数のUI定義データ各々に含まれる表示コマンドを、機能別画面表示部53に出力する。
機能別画面表示部53は、UI定義データ取得部51から複数の機能ごとに表示コマンドが入力される。機能別画面表示部53は、複数の機能を選択可能な機能選択画面を表示する。機能選択画面は、複数の機能各々の名称の画像を含むタブを配列した画面である。機能別画面表示部53は、生成された機能選択画面を、領域情報によって定められた位置に配置されるように、表示部206に表示する。このため、複数の機能ごとに機能別画面が定まる。
機能別画面表示部53は、機能別画面生成部63を含む。機能別画面生成部63は、ユーザーが機能選択画面に含まれる複数のタブのいずれかを指示する操作を操作部207に入力すれば、複数の機能のうちから指示されたタブに対応する機能を特定する。機能別画面生成部63は、特定した機能に対応する機能別画面を生成する。具体的には、機能別画面生成部63は、UI定義データ取得部51から入力される複数の機能ごとの表示コマンドのうちから、特定された機能に対応する表示コマンドを特定し、特定された表示コマンドに従って機能別画面を生成する。機能別画面生成部63は、表示部206に表示する画面中で表示コマンドに含まれる位置情報で特定される位置に、表示コマンドに含まれる部品特定情報で特定される部品を配置することによって機能別画面を生成する。機能別画面表示部53は、機能別画面を設定値受付部55に出力する。
設定値受付部55は、PC200Aを操作するユーザーが、機能別画面に従って操作部207に入力する設定値を、機能別画面に対応する機能に対して設定された設定値として受け付ける。設定値受付部55は、機能別画面に対応する機能を識別するための機能識別情報と、受け付けられた設定値との組をコマンド生成部59に出力する。
設定値受付部55は、制限部69を含む。制限部69は、HDD205から機能間定義データ95を読出し、機能間定義データ95に基づいて、機能別画面で設定可能な設定値を制限する。機能間定義データ95は、第1関連機能に対して設定される第1設定値と、第2関連機能に設定することが可能な第2設定値と、第2関連機能に設定することができない第3設定値との組を定める。制限部69は、機能別画面表示部53によって、第1関連機能に対応する機能別画面が表示された状態で、第1関連機能に対応する第1設定値が受け付けられる場合、機能間定義データ95によって第1設定値と組になる第2設定値を、第2関連機能に対応する設定値に設定する。制限部69は、機能間定義データ95がメッセージ表示コマンドを含む場合、メッセージ表示コマンドに従って禁則メッセージを特定し、特定された禁則メッセージを表示する。
また、制限部69は、第1関連機能に対応する設定値として第1設定値が設定された後、機能別画面表示部53によって第2関連機能に対応する機能別画面が表示される場合、第2関連機能に対応する設定値として受け付け可能な設定値を、機能間定義データ95によって第1設定値と組になる第2設定値に制限する。
また、制限部69は、第2関連機能に対応する設定値として第3設定値が設定された後、機能別画面表示部53によって第1関連機能に対応する設定値として第1設定値が設定される場合、第2関連機能に対応する設定値として設定されている第3設定値を、自動的に第2設定値に変更する。このため、第1関連機能に対して設定される第1設定値と、第2関連機能に設定することができない第3設定値との組が設定されるのを防止するとともに、第2関連機能に設定することが可能な第2設定値を自動的に設定することによりユーザーの操作を補助することができる。
例えば、第1関連機能を両面印刷処理、第2関連機能をステープル加工処理とする場合の一例を示す。両面印刷処理に対して、画像を両面に形成することを示す設定値「ON」と、画像を片面に形成することを示す設定値「OFF」とがあり、ステープル加工処理に対して、ステープル針を用紙の左端に1つ打ち込むことを示す設定値「1点左」、ステープル針を用紙の左端に2つ打ち込むことを示す設定値「2点左」、ステープル針を用紙の上端に2つ打ち込むことを示す設定値「2点上」、ステープル針を打ち込まないことを示す設定値「オフ」とがあるとする。この場合に、機能間定義データ95は、第1関連機能である両面印刷処理の第1設定値としての設定値「ON」と、第2関連機能であるステープル加工処理の第2設定値として「オフ」と、の組を定義する場合がある。これは、両面印刷が設定された場合には、ステープル加工を禁止することを意味する。制限部69は、両面印刷処理に対して、画像を両面に形成することを示す設定値「ON」が受け付けられた場合、ステープル針を打ち込まないことを示す設定値「オフ」を、第2関連機能であるステープル加工処理の設定値に設定する。さらに、機能間定義データ95が、「ステープルを”なし”にします。」の禁則メッセージを表示するメッセージ表示コマンドを含む場合、その禁則メッセージを表示する。共通画面表示部53によって、「ステープルを”なし”にします。」のメッセージが表示されるので、ユーザーにステープル加工処理に対する設定値として、ステープル針を打ち込まないことを示す設定値「オフ」が設定されたことを通知することができる。
さらに、制限部69は、第1関連機能である両面印刷処理に対して、画像を両面に形成することを示す設定値「ON」が受け付けられた後、機能別画面表示部53によってステープル加工処理に対応する機能別画面が表示される場合、機能間定義データ95を参照して、ステープル加工処理に対応する設定値として受け付け可能な設定値を、ステープル針を打ち込まないことを示す設定値「オフ」に制限する。これにより、ユーザーによって、第2関連機能であるステープル加工処理に、MFP100Aが実行することのできない設定値が設定されるのを防止することができる。
コマンド定義データ取得部57は、HDD205に記憶された機能定義データ93に含まれる複数のコマンド定義データを読出し、複数のコマンド定義データを、コマンド生成部59に出力する。
コマンド生成部59は、コマンド定義データ取得部57から入力される複数のコマンド定義データを順に選択し、設定値受付部55から入力される機能識別情報と設定値との複数の組のうちから、選択されたコマンド定義データの機能の機能識別情報を含む組を特定する。次に、コマンド生成部59は、選択されたコマンド定義データに含まれる1以上のプリントコマンドを順に選択し、コマンド定義データの機能の機能識別情報と組になる設定値に対応するか否かを判断する。コマンド生成部59は、選択されたコマンド定義データに含まれる1以上のプリントコマンドのうちから、特定された組に含まれる設定値に対応するプリントコマンドを選択する。コマンド生成部59は、選択されたプリントコマンドをコマンド送信部61に出力する。コマンド生成部59は、コマンド定義データ取得部57から入力される複数のコマンド定義データそれぞれについて、設定値受付部55において同じ機能に対して受け付けられた設定値に対応するプリントコマンドを選択し、選択されたプリントコマンドの全てをコマンド送信部61に出力する。
コマンド送信部61は、選択部65から入力される1以上のプリントコマンドを、プリントデータとともにネットワークI/F204を介してMFP100Aに送信する。
MFP100Aに新たな機能が追加される場合であっても、追加される機能に対応する新たなプリントコマンドを定めるコマンド定義データと、その機能に対して設定可能な1以上の設定値を定めたUI定義データとを追加すればよい。このため、ドライバープログラム自体を変更する必要がない。また、機能定義データ93は、XML等のマックアップ言語、C言語などのプログラム言語で記載されるので、UI定義データおよびコマンド定義データの変更が容易である。特に、ドライバープログラムをインストールすることなく、機能定義データ93および機能間定義データを書き換えるだけでよい。
図7は、コマンド定義データの一例を示す第1の図である。図7を参照して、コマンド定義データ93Aは、ステープル機能に対応し、UI定義データ1、およびUI定義データ5のいずれかにおいて設定された複数の設定値にそれぞれ対応して、MFP100A〜100Dで共通のプリントコマンドを対応付ける。具体的には、UI定義データ1において設定される設定値「1」に対してプリントコマンド「Staple=OFF」を対応付ける。UI定義データ1において設定される設定値「2」に対してプリントコマンド「Staple=LEFT1」を対応付ける。UI定義データ1において設定される設定値「3」に対してプリントコマンド「Staple=LEFT2」を対応付ける。UI定義データ1において設定される設定値「4」に対してプリントコマンド「Staple=RIGHT1」を対応付ける。UI定義データ1において設定される設定値「5」に対してプリントコマンド「Staple=RIGHT2」を対応付ける。UI定義データ5において設定される設定値「1」に対してプリントコマンド「Staple=ON」を対応付ける。UI定義データ5において設定される設定値「2」に対してプリントコマンド「Staple=ON」を対応付ける。
図8は、コマンド定義データの一例を示す第2の図である。図8を参照して、コマンド定義データ93Bは、パンチ機能に対応し、UI定義データ3において設定された複数の設定値にそれぞれ対応して、MFP100A〜100Dで共通のプリントコマンドを対応付ける。具体的には、UI定義データ3において設定される設定値「1」に対してプリントコマンド「Punch=OFF」を対応付ける。UI定義データ3において設定される設定値「2」に対してプリントコマンド「Punch=LEFT」を対応付ける。UI定義データ3において設定される設定値「3」に対してプリントコマンド「Punch=RIGHT」を対応付ける。UI定義データ3において設定される設定値「4」に対してプリントコマンド「Punch=TOP」を対応付ける。
図9は、機能間定義データの一例を示す図である。図9を参照して、機能間定義データ95Aは、UI定義データ1において設定された設定値「1」に対して、UI定義データ11において設定することのできない設定値「2」と、設定することができる設定値「0」を定める。また、UI定義データ2において設定された設定値「1」に対して、UI定義データ12において設定することのできない設定値「2」と、設定することができる設定値「0」を定める。また、また、UI定義データ3において設定された設定値「1」に対して、UI定義データ13において設定することのできない設定値「2」と、設定することができる設定値「0」を定める。また、UI定義データ4において設定された設定値「1」に対して、UI定義データ14において設定することのできない設定値「2」と、設定することができる設定値「0」を定める。
図10は、サーバーが備えるCPUの機能の一例を示すブロック図である。図10に示す機能は、サーバー300が備えるCPU301が、ROM302、HDD305またはCD−ROM309Aに記憶されたドライバープログラム生成プログラムを実行することにより、CPU301に形成される機能である。また、サーバー300は、HDD305に定義データベースと、MFP100A〜100Dそれぞれを制御するためのドライバープログラムのすべてと、を記憶している。
定義データベースは、複数のUI定義データおよび複数のコマンド定義データと、複数のUI定義データ各々を複数のコマンド定義データのいずれか1つと関連付ける第1関連付情報と、複数のコマンド定義データ各々を複数のUI定義データの1以上と関連付ける第2関連付情報と、複数の機能間定義データと、を含む。定義データベースに含まれる複数のUI定義データは、少なくともMFP100A〜100Dそれぞれを制御するためのドライバープログラムに含まれる複数のUI定義データを含む。定義データベースに含まれる複数のコマンド定義データは、少なくともMFP100A〜100Dそれぞれを制御するためのドライバープログラムに含まれる複数のUI定義データを含む。機能間定義データは、少なくともMFP100A〜100Dそれぞれを制御するためのドライバープログラムに含まれる複数の機能間定義データを含む。
図11は、第1関連付情報の一例を示す図である。図11を参照して、UI定義データ1に対してコマンド定義データ1を関連付けている。第1関連付情報は、1つのUI定義データに対して1つのコマンド定義データを関連付ける。
図12は、第2関連付情報の一例を示す図である。図12を参照して、コマンド定義データ1に対して、UI定義データ1と、UI定義データ5と、を関連付けている。第2関連付情報は、1つのコマンド定義データに対して、1以上のUI定義データを関連付ける。
図10を参照して、サーバー300が備えるCPU301は、操作受付部351と、プログラム取得部353と、アクセス部355と、変更部357と、補正部359と、制御情報生成部361と、代替生成部363と、機能間定義データ補正部365と、を含む。
操作受付部351は、ユーザーが操作部307に入力する操作を受け付ける。操作受付部351は、受け付けられた操作を、プログラム取得部353および変更部357に出力する。
プログラム取得部353は、操作受付部351から入力される操作に従って、HDD305に記憶されているMFP100A〜100Dそれぞれを制御するためのドライバープログラムのうちから1つを取得する。具体的には、HDD305に記憶されているMFP100A〜100Dそれぞれを制御するためのドライバープログラムのリストを表示部306に表示し、ユーザーがリストのうちから選択する操作を操作部307に入力すれば、ユーザーにより選択されたドライバープログラムをHDD305から読み出す。プログラム取得部353は、HDD305から読み出されたドライバープログラムを、変更部357に出力する。この時点で、ユーザーが選択するドライバープログラムは、新たなドライバープログラムを生成するための基準となるドライバープログラムである。以下、ユーザーが選択し、プログラム取得部353によって取得されるドライバープログラムを、変更前プログラムという。
アクセス部355は、HDD305に記憶された定義データベースにアクセスする。定義データベースは、複数のUI定義データ、複数のコマンド定義データおよび複数の機能間データを含む。アクセス部355は、定義データベースから任意のUI定義データ、コマンド定義データおよび機能間定義データを取得する。
変更部357は、プログラム取得部353から入力される変更前プログラムに含まれる複数のUI定義データおよび複数のコマンド定義データを、ユーザーによる指示に従って変更したドライバープログラムを生成する。以下、変更部357によって変更前プログラムが変更された後にドライバープログラムを変更後プログラムという。
変更部357は、変更後プログラムと、変更前プログラムと変更後プログラムとの差異を示す情報を補正部359に出力する。差異を示す情報は、変更前プログラムに含まれるが変更後プログラムに含まれないUI定義データを識別するためのUI定義データ識別情報を含む削除UI情報と、変更前プログラムに含まれないが変更後プログラムに含まれるUI定義データを識別するためのUI定義データ識別情報を含む追加UI情報と、変更前プログラムに含まれるが変更後プログラムに含まれないコマンド定義データを識別するためのコマンド定義データ識別情報を含む追加コマンド情報と、変更前プログラムに含まれないが変更後プログラムに含まれるコマンド定義データを識別するためのコマンド定義データ識別情報を含む追加コマンド情報と、を含む。
変更部357は、UI削除部371と、UI追加部373と、コマンド削除部375と、コマンド追加部377と、を含む。UI削除部371は、操作受付部351から入力される操作に従って、変更前プログラムに含まれる複数のUI定義データのうちから削除対象となるUI定義データを特定し、特定されたUI定義データを変更前プログラムから削除する。以下、変更前プログラムから削除されたUI定義データを削除UI定義データという。
UI追加部373は、操作受付部351から入力される操作に従って、定義データベースに含まれる複数のUI定義データのうちから追加対象となるUI定義データを特定し、特定されたUI定義データを変更前プログラムに追加する。以下、変更前プログラムに追加されたUI定義データを追加UI定義データという。
コマンド削除部375は、操作受付部351から入力される操作に従って、変更前プログラムに含まれる複数のコマンド定義データのうちから削除対象となるコマンド定義データを特定し、特定されたコマンド定義データを変更前プログラムから削除する。以下、変更前プログラムから削除されたコマンド定義データを削除コマンド定義データという。
コマンド追加部377は、操作受付部351から入力される操作に従って、定義データベースに含まれる複数のコマンド定義データのうちから追加対象となるコマンド定義データを特定し、特定されたコマンド定義データを変更前プログラムに追加する。以下、変更前プログラムに追加されたコマンド定義データを追加コマンド定義データという。
補正部359は、変更部357から入力される変更後プログラムを補正し、補正後の変更後プログラムを制御情報生成部361および機能間定義データ補正部365に出力する。以下、補正部359により変更後プログラムが補正された後の変更後プログラムを補正プログラムという。補正部358は、定義データベースに含まれる第1関連付情報および第2関連付情報を参照して、変更後プログラムに含まれる複数のUI定義データおよび複数のコマンド定義データの組み合わせを第1関連付情報および第2関連付情報により定められる関連付と整合させるために、変更後プログラムに含まれる複数のコマンド定義データの一部を変更する。補正部359は、候補抽出部381と、置換部383と、削除補正部385と、追加補正部387と、を含む。
候補抽出部381は、削除UI情報により特定される削除UI定義データに、第1関連付情報によって関連付けられたコマンド定義データを削除候補コマンド定義データに特定する。候補抽出部381は、特定された削除候補コマンド定義データが第2関連付情報によって、削除UI定義データとは別の1以上のUI定義データと関連付けられている場合、削除UI定義データとは別の1以上のUI定義データのすべてと、第2関連付情報によって関連付けられたコマンド定義データを追加候補コマンド定義データとして抽出する。候補抽出部381は、削除候補コマンド定義データおよび追加候補コマンド定義データを、置換部383に出力する。
置換部383は、変更後プログラムに含まれる候補抽出部381から入力される削除候補コマンド定義データを、候補抽出部381から入力される追加候補コマンド定義データで置き換える。換言すれば、変更後プログラムから削除候補コマンドデータを削除し、変更後プログラムに追加候補コマンドデータを追加する。
削除補正部385は、削除コマンド情報で特定される削除コマンド定義データと第2関連付情報によって関連付けられた1以上のUI定義データそれぞれを、そのUI定義データが第1関連付情報によって関連付けられたコマンド定義データが変更後プログラムに含まれていないことを条件に、変更後プログラムから削除する。
追加補正部387は、追加UI情報で特定される追加UI定義データと第1関連付情報によって関連付けられたコマンド定義データが、変更後プログラムに含まれない場合、追加UI定義データと第1関連付情報によって関連付けられたコマンド定義データを定義データベースから抽出し、抽出されたコマンド定義データを、変更後プログラムに追加する。
制御情報生成部361は、補正部359から補正プログラムが入力され、補正プログラムに基づいて、制御情報を生成し、生成された制御情報をユーザー通知部367および代替生成部363に出力する。制御情報は、コマンド定義データを識別するためのコマンド定義データ識別情報と、補正後プログラムに含まれないUI定義データに基づいて設定値が設定されたか否かの判断を実行しないことを示す禁止情報と、を含む。制御情報生成部361は、補正プログラムに含まれる複数のコマンド定義データそれぞれにおいて、第2関連付情報によって関連付けられた1以上のUI定義データのすべてが補正プログラムに含まれない場合、当該コマンド定義データを識別するためのコマンド定義データ識別情報と、補正プログラムに含まれないUI定義データに基づいて設定値が設定されたか否かの判断を実行しないことを示す禁止情報とを含む制御情報を生成する。
ユーザー通知部367は、制御情報生成部361から制御情報が入力されることに応じて、コマンド定義データの修正が必要である旨を通知する。例えば、制御情報に含まれるコマンド定義データ識別情報と、当該コマンド定義データ識別情報で特定されるコマンド定義データ中の制御情報に含まれる禁止情報で特定されるUI定義データに関する記述を含むメッセージ画面を、表示部306に表示する。ユーザー通知部367は、メッセージ画面を表示した後、ユーザーにより操作部307に入力される、代替コマンドの生成を指示する操作を受け付けると、代替生成部363に代替指示を出力する。
機能間定義データ補正部365は、補正部359から入力される補正プログラムを処理対象とする。機能間定義データ補正部365は、補正プログラムに含まれる複数のUI定義データに基づいて、変更前プログラムに含まれる複数の機能間定義データを補正する。機能間定義データ補正部365は、対象決定部391と、変更部393と、を含む。
対象決定部391は、変更前プログラムに含まれる複数のUI定義データのうち補正プログラムに含まれないUI定義データを削除UI定義データに決定し、補正プログラムに含まれる複数のUI定義データのうち変更前プログラムに含まれないUI定義データを追加UI定義データに決定する。対象決定部391は、削除UI定義データおよび追加UI定義データを、変更部393に出力する。
変更部393は、変更前プログラムに含まれる複数の機能間定義データを基準に、変更前プログラムに含まれる複数の機能間定義データのうち削除UI定義データに対応する機能間定義データを削除する。機能間定義データは、MFP100Aが有する複数の機能のうちから選ばれた2以上の関連機能において、2以上の関連機能のうち第1の関連機能に対して設定される設定値と、2以上の関連機能のうち第1関連機能とは別の第2の関連機能に設定することができない設定値、および、第2の関連機能に設定することができる設定値の組を定める。補正プログラムに含まれる複数の機能間定義データのうちに、削除UI定義データに対応する機能を第1関連機能および第2関連機能として定める機能間定義データが存在し、その機能間定義データにおいて定められる設定値が、削除UI定義データで設定可能な1以上の設定値のいずれかを含むならばその機能間定義データを補正プログラムから削除する。
また、変更部393は、定義データベースに含まれる複数の機能間定義データのうちから追加UI定義データに対応する機能間定義データを抽出し、抽出した機能間定義データを、補正プログラムに追加する。HDD305に記憶された定義データベースに含まれる複数の機能定義データの中に、追加UI定義データに対応する機能を第1関連機能および第2関連機能として定める機能間定義データが存在し、その機能間定義データにおいて定められる設定値が、追加UI定義データで設定可能な1以上の設定値のいずれかを含むならばその機能間定義データを補正プログラムに追加する。
変更部393は、機能間定義データを変更した後の補正プログラムを、HDD305に記憶するとともに、代替生成部363に出力する。
代替生成部363は、変更部393から機能間定義データを変更した後の補正プログラムが入力され、制御情報生成部361から制御情報が入力される。代替生成部363は、ユーザー通知部367から代替指示が入力されると、制御情報に含まれるコマンド定義データ識別情報で特定されるコマンド定義データ中の制御情報に含まれる禁止情報で特定されるUI定義データに関する記述を削除することによって、代替コマンド定義データを生成する。代替生成部363は、補正プログラムに含まれる制御情報に含まれるコマンド定義データ識別情報で特定されるコマンド定義データを、代替コマンド定義データで置き換えることによって新たなドライバープログラムを生成する。以下、代替生成部363が生成するドライバープログラムを、代替プログラムという。代替生成部363は、代替プログラムを生成する場合、代替プログラムをHDD305に記憶する。
図13は、ドライバープログラム生成処理の流れの一例を示すフローチャートである。ドライバープログラム生成処理は、サーバー300が備えるCPU301が、ROM302、HDD305またはCD−ROM309Aに記憶されたドライバープログラム生成プログラムを実行することにより、CPU301により実行される処理である。図13を参照して、CPU301は、ドライバープログラムの選択を受け付けたか否かを判断する(ステップS01)。HDD305に記憶されているMFP100A〜100Dをそれぞれ制御する4つのドライバーブログラムのうちいずれかを選択する操作を、操作部307が受け付けたか否かを判断する。ドライバープログラムの選択を受け付けるまで待機状態となり、ドライバープログラムの選択を受け付けたならば処理をステップS02に進める。
ステップS02においては、ユーザーにより選択されたドライバープログラムをHDD305から読み出すことにより、取得する。そして、変更指示を受け付けたか否かを判断する。ステップS02において取得されたドライバープログラムに含まれる複数のUI定義データおよび複数のコマンド定義データを変更する変更指示を、操作部307が受け付けたか否かを判断する。変更指示を受け付けたならば処理をステップS04に進めるが、そうでなければステップS04をスキップして処理をステップS05に進める。変更指示は、UI定義データを削除する指示、定義データベースに含まれる複数のUI定義データのいずれかを追加する指示、コマンド定義データを削除する指示、定義データベースに含まれる複数のコマンド定義データのいずれかを追加する指示を含む。ステップS04においては、ステップS03において受け付けられた変更指示に従って、ドライバープログラムを変更し、処理をステップS05に進める。以下、ステップS04において変更される前のドライバープログラムを変更前プログラムといい、変更された後のドライバープログラムを変更後プログラムと言う。
ステップS05においては、ドライバープログラムを変更する操作が終了したか否かを判断する。ユーザーが操作部307に変更指示を終了する操作を入力すれば、ドライバープログラムを変更する操作が終了したと判断する。ドライバープログラムを変更する操作が終了したならば処理をステップS06に進めるが、そうでなければ処理をステップS03に戻す。
ステップS06においては、補正処理を実行し、処理をステップS07に進める。補正処理の詳細は後述するが、ステップS04において変更されたドライバープログラムに含まれる複数のコマンド定義データを補正する処理である。
ステップS07においては、機能間定義データ補正処理を実行し、処理をステップS08に進める。機能間定義データ補正処理の詳細は後述するが、ステップS06において補正された補正プログラムに含まれる機能間定義データを補正する処理である。
ステップS08においては、制御情報生成処理を実行し、処理をステップS09に進める。制御情報生成処理の詳細は後述するが、ステップS06において補正されたドライバープログラムに基づいて制御情報を生成する処理である。制御情報は、コマンド定義データを識別するためのコマンド定義データ識別情報と、補正後プログラムに含まれないUI定義データに基づいて設定値が設定されたか否かの判断を実行しないことを示す禁止情報と、を含む。
ステップS09においては、メッセージ画面を表示部306に表示し、処理をステップS10に進める。メッセージ画面は、ステップS08において生成された制御情報に含まれるコマンド定義データ識別情報と、当該コマンド定義データ識別情報で特定されるコマンド定義データ中の制御情報に含まれる禁止情報で特定されるUI定義データに関する記述を含む。
次のステップS10においては、代替コマンド生成指示を受け付けたか否かを判断する。代替コマンド生成指示は、制御情報に基づいてコマンド定義データを変更した代替コマンド定義データの生成を指示する操作である。代替コマンド生成指示を受け付けたならば処理をステップS11に進めるが、そうでなければ処理を終了する。
ステップS11においては、代替プログラム生成処理を実行し、処理を終了する。代替プログラム生成処理の詳細は後述するが、制御情報に基づいてコマンド定義データを変更した代替コマンド定義データを生成し、補正後ブログラムに含まれるコマンド定義データを代替コマンドデータで置換する処理である。
図14は、補正処理の流れの一例を示すフローチャートである。補正処理は、図13に示したドライバーブログラム変更処理のステップS06において実行される処理である。図14を参照して、削除UI定義データが存在するか否かを判断する(ステップS21)。削除UI定義データは、変更前プログラムに含まれるが変更後プログラムに含まれないUI定義データである。削除UI定義データが存在すれば処理をステップS22に進めるが、そうでなければ処理をステップS28に進める。
ステップS22においては、削除候補コマンド定義データを決定する。削除候補コマンド定義データは、削除UI定義データと、定義データベースに含まれる第1関連付情報によって関連付けされたコマンド定義データである。
次のステップS23においては、削除候補コマンド定義データと関連する関連UI定義データを決定する。関連UI定義データは、削除候補コマンド定義データと、定義データベースに含まれる第2関連付情報によって関連付けられたUI定義データである。
次のステップS24においては、ステップS23において決定された関連UI定義データのうちに、ステップS21において特定された削除UI定義データとは別のUI定義データが含まれるか否かを判断する。関連UI定義データが削除UI定義データとは別のUI定義データを含むならば処理をステップS25に進めるが、そうでなければ処理をステップS27に進める。ステップS27においては、ステップS22において決定された削除候補コマンド定義データを、変更後プログラムから削除し、処理をステップS28に進める。
ステップS25においては、追加候補コマンド定義データが定義データベースに存在するか否かを判断する。追加候補コマンド定義データは、第2関連付情報によって関連UI定義データのすべてと関連付けられたコマンド定義データである。追加候補コマンドデータが存在するならば処理をステップS26に進めるが、そうでなければステップS26をスキップして処理をステップS28に進める。ステップS26においては、変更後プログラムに含まれる削除候補コマンドデータをステップS25において決定された追加候補コマンドデータで置き換える。換言すれば、変更後プログラムから削除候補コマンドデータを削除し、変更後プログラムに追加候補コマンドデータを追加する。
ステップS28においては、追加UI定義データが存在するか否かを判断する。追加UI定義データは、変更後プログラムに含まれるが変更前プログラムに含まれないUI定義データである。追加UI定義データが存在すれば処理をステップS29に進めるが、そうでなければ処理をステップS31に進める。
ステップS29においては、追加UI定義データと第1関連付情報によって関連付けられたコマンド定義データが、変更後プログラムに含まれるか否かを判断する。そのようなコマンド定義データが変更後プログラムに含まれなければ処理をステップS30に進めるが、そのようなコマンド定義データが変更後プログラムに含まれるならばステップS30をスキップして処理をステップS31に進める。ステップS30においては、追加UI定義データと第1関連付情報によって関連付けられたコマンド定義データが変更後プログラムにない場合、追加UI定義データと第1関連付情報によって関連付けられたコマンド定義データを定義データベースから抽出し、抽出されたコマンド定義データを、変更後プログラムに追加する。
ステップS31においては、削除コマンド定義データが存在するか否かを判断する。削除コマンド定義データは、変更後プログラムに含まれないが変更前プログラムに含まれるコマンド定義データである。削除コマンド定義データが存在すれば処理をステップS32に進めるが、そうでなければ処理を終了する。
ステップS32においては、削除コマンド定義データと第2関連付情報によって関連付けられたUI定義データが変更後プログラムに含まれるか否かを判断する。削除コマンド定義データと第2関連付情報によって関連付けられたUI定義データが変更後プログラムに含まれるならば処理をステップS33に進めるが、そうでなければ処理をドライバープログラム生成処理に戻す。ステップS33においては、削除コマンド定義データと第2関連付情報によって関連付けられたUI定義データが第1関連付情報によって関連付けられたコマンド定義データが変更後プログラムに含まれるか否かを判断する。そのようなコマンド定義データが変更後プログラムに含まれるならば処理をドライバープログラム生成処理に戻すが、そうでなければ処理をステップS34に進める。
ステップS34においては、削除コマンド定義データと第2関連付情報によって関連付けられたUI定義データを変更後プログラムから削除し、処理をドライバープログラム生成処理に戻す。
図15は、機能間定義データ補正処理の流れの一例を示すフローチャートである。機能間定義データ補正処理は、図13に示したドライバーブログラム変更処理のステップS07において実行される処理である。ステップS07が実行される前の段階で、ステップS06において実行される補正処理により、補正プログラムが生成されている。図15を参照して、CPU301は、1以上の削除UI定義データを特定する(ステップS41)。削除UI定義データは、変更前プログラムに含まれるが補正プログラムに含まれないUI定義データである。次のステップS42においては、1以上の削除UI定義データのうちから処理対象となる1つの削除UI定義データを選択する。そして、選択された削除UI定義データに対応する機能間定義データを補正プログラムから削除する(ステップS43)。機能間定義データは、MFP100Aが有する複数の機能のうちから選ばれた2以上の関連機能において、2以上の関連機能のうち第1の関連機能に対して設定される設定値と、2以上の関連機能のうち第1関連機能とは別の第2の関連機能に設定することができない設定値、および、第2の関連機能に設定することができる設定値の組を定める。削除UI定義データに対応する機能を第1関連機能および第2関連機能として定める機能間定義データが存在し、その機能間定義データにおいて定められる設定値が、削除UI定義データで設定可能な1以上の設定値のいずれかを含むならばその機能間定義データを補正プログラムから削除する。
ステップS44においては、ステップS42において処理対象に選択されていない削除UI定義データが存在するか否かを判断する。未処理の削除UI定義データが存在するならば処理をステップS42に戻すが、そうでなければ処理をステップS45に進める。
ステップS45においては、1以上の追加UI定義データを特定する(ステップS41)。追加UI定義データは、変更前プログラムに含まれないが補正プログラムに含まれるUI定義データである。次のステップS46においては、1以上の追加UI定義データのうちから処理対象となる1つの追加UI定義データを選択する。そして、選択された追加UI定義データに対応する機能間定義データを補正プログラムに追加する(ステップS44)。HDD305に記憶された定義データベース中に、追加UI定義データに対応する機能を第1関連機能および第2関連機能として定める機能間定義データが存在し、その機能間定義データにおいて定められる設定値が、追加UI定義データで設定可能な1以上の設定値のいずれかを含むならばその機能間定義データを補正プログラムに追加する。
ステップS48においては、ステップS46において処理対象に選択されていない追加UI定義データが存在するか否かを判断する。未処理の追加UI定義データが存在するならば処理をステップS46に戻すが、そうでなければ処理をステップS49に進める。
ステップS49においては、機能間定義データを変更した後の補正プログラムをHDD305に記憶し、処理をドライバープログラム生成処理に戻す。
図16は、制御情報生成処理の流れの一例を示すフローチャートである。制御情報生成処理は、図13に示したドライバーブログラム変更処理のステップS08において実行される処理である。ステップS08が実行される前の段階で、ステップS06において実行される補正処理により、補正プログラムが生成されている。図16を参照して、補正プログラムに含まれる複数のコマンド定義データ内から処理対象となる1つのコマンド定義データを選択する(ステップS51)。次のステップS52においては、コマンド定義データと第2関連付情報によって関連付けられたUI定義データの全てを特定する。そして、特定されたUI定義データのうちから処理対象となる1つのUI定義データを選択する(ステップS53)。ステップS54においては、選択されたUI定義データが補正プログラムに含まれるか否かを判断する。補正プログラムに含まれない場合は処理をステップS55に進めるが、補正プログラムに含まれるならばステップS55をスキップして処理をステップS56に進める。ステップS55においては、制御情報を生成する。制御情報は、ステップS51において選択されたコマンド定義データを識別するためのコマンド定義データ識別情報と、ステップS53において選択されたUI定義データに基づいて設定値が設定されたか否かの判断を実行しないことを示す禁止情報と、を含む。
ステップS56においては、ステップS53において処理対象に選択されていないUI定義データが存在するか否かを判断する。未処理のUI定義データが存在するならば処理をステップS53に戻すが、そうでなければ処理をステップS57に進める。ステップS57においては、ステップS51において処理対象に選択されていないコマンド定義データが存在するか否かを判断する。未処理のコマンド定義データが存在するならば処理をステップS51に戻すが、そうでなければ処理をドライバープログラム生成処理に戻す。
図17は、代替プログラム生成処理の流れの一例を示すフローチャートである。代替プログラム生成処理は、図13に示したドライバーブログラム変更処理のステップS11において実行される処理である。ステップS11が実行される前の段階で、ステップS06において実行される補正処理により補正プログラムが生成されており、ステップS08において実行される制御情報生成処理により制御情報が生成されている。制御情報は、コマンド定義データ識別情報と、UI定義データに基づいて設定値が設定されたか否かの判断を実行しないことを示す禁止情報と、を含む。
図17を参照して、CPU301は、処理対象とするべき1つの制御情報を選択する(ステップS61)。そして、制御情報に含まれるコマンド定義データ識別情報に基づいてコマンド定義データを特定する(ステップS62)。このコマンド定義データは、補正プログラムに含まれる。次のステップS63においては、代替コマンド定義データを生成する。具体的には、ステップS62において特定されたコマンド定義データを、制御情報に含まれる禁止情報で特定されるUI定義データに関する記述を削除することによって、代替コマンド定義データを生成する。
次のステップS64においては、補正プログラムに含まれるステップS62において特定されたコマンド定義データを、ステップS64において生成された代替コマンド定義データで置き換える。換言すれば、ステップS62において特定されたコマンド定義データを補正プログラムから削除し、ステップS63において生成された代替コマンド定義データを補正プログラムに追加する。
次のステップS65においては、ステップS61において処理対象に選択されていない制御情報が存在するか否かを判断する。未処理の制御情報が存在するならば処理をステップS61に戻すが、そうでなければ処理をステップS66に進める。
ステップS66においては、補正プログラムに含まれるコマンド定義データを代替コマンド定義データで置換した後の補正プログラムを代替プログラムとして、HDD305に記憶し、処理をドライバープログラム生成処理に戻す。
図18は、設定処理の流れの一例を示すフローチャートである。設定処理は、PC200Aが備えるCPU201が、HDD205に記憶されたMFP100Aに対応するドライバープログラムを実行することにより、CPU201により実行される処理である。図18を参照して、CPU201は、HDD205に記憶されたMFP100Aに対応するドライバープログラムに含まれる機能定義データ93のうち、処理対象となる機能に対応するUI定義データを読み出し、読み出されたUI定義データに含まれる表示コマンドを取得する(ステップS101)。次のステップS102においては、ステップS101において取得された表示コマンドに従って機能別画面を生成する。具体的には、表示部206に表示する画面中で表示コマンドに含まれる位置情報で特定される位置に、表示コマンドに含まれる部品特定情報で特定される部品を配置することによって機能別画面を生成する。
次のステップS103においては、表示部206に機能別画面を表示する。そして、操作を受け付けたか否かを判断する(ステップS104)。ユーザーが操作部207に操作を入力するまで待機状態となり(ステップS104でNO)、操作部207に入力される操作を検出すると(ステップS104でYES)、処理をステップS105に進める。ステップS105においては、受け付けられた操作に基づいて処理を分岐させる。操作がプリントを指示する操作ならば処理をステップS106に進め、機能を切り換える操作ならば処理をステップS107に進め、設定値を入力する操作ならば処理をステップS108に進める。
ステップS106においては、プリントジョブ生成処理を実行し、処理を終了する。プリントジョブ生成処理の詳細は後述する。ステップS107においては、ステップS104において受け付けられた操作により特定される機能を処理対象に設定し、処理をステップS101に戻す。ステップS108においては、設定値設定処理を実行し、処理をステップS104に戻す。
図19は、設定値設定処理の流れの一例を示すフローチャートである。設定値設定処理は、図18のステップS108において実行される処理である。図19を参照して、ユーザーが操作部207に入力する設定値を受け付ける(ステップS111)。そして、HDD205に記憶されている機能間定義データ95を検索する(ステップS112)。検索のキーは、処理対象に設定されている機能の機能識別情報およびステップS111において受け付けられた設定値である。そして、検索の結果に基づいて、関連機能が存在するか否かを判断する(ステップS113)。処理対象に設定されている機能の機能識別情報およびステップS111において受け付けられた設定値を含む機能間定義データ95が存在するならば、関連機能が存在すると判断し、その機能間定義データ95を特定して処理をステップS115に進めるが、そうでなければ、処理をステップS114に進める。ステップS114においては、処理対象に設定されている機能を識別するための機能識別情報とステップS111において受け付けられた設定値との組をRAM203に一時記憶し、処理を設定処理に戻す。
一方、ステップS115においては、ステップS113において特定された機能間定義データ95に基づいて、ステップS111において受け付けられた設定値の入力が制限されているか否かを判断する。設定値の入力が制限されているならば処理をステップS120に進め、制限されていなければ処理をステップS116に進める。ステップS113において特定された機能間定義データ95において、処理対象に設定されている機能が第2の関連機能として定められており、ステップS21において受け付けられた設定値が第2の関連機能に対応する設定値と同じであって、かつ、第1の関連機能とそれに対応する第1の設定値がRAM203に記憶されて、既に設定されている場合に、制限されると判断する。第1の関連機能とそれに対応する設定値がRAM203に記憶されるのは、ステップS116が実行される場合である。
ステップS120においては、エラーメッセージを表示部206に表示し、処理を設定処理に戻す。この際、ステップS111において受け付けられた設定値を破棄する。
ステップS116においては、ステップS114と同様に、処理対象に設定されている機能を識別するための機能識別情報とステップS21において受け付けられた設定値との組をRAM203に一時記憶し、処理をステップS117に進める。
次のステップS117においては、関連機能の設定値が特定されるか否かを判断する。関連機能の設定値が特定されるならば処理をステップS118に進めるが、そうでなければ処理を設定処理に戻す。ステップS113において特定された機能間定義データ95において、処理対象に設定されている機能が第1関連機能と一致し、ステップS111において受け付けられた設定値が、第1関連機能に対応する第1設定値と一致するならば、関連機能の設定値が特定されると判断する。
ステップS118においては、ステップS113において特定された機能間定義データ95に含まれるメッセージ表示コマンドに従って禁則メッセージを特定し、特定された禁則メッセージを、表示部206に表示し、処理をステップS119に進める。禁則メッセージは、第2の関連機能に対して第2設定値が設定されることをユーザーに通知するためのメッセージである。
次のステップS119においては、関連機能と設定値との組をRAM203に記憶し、処理を設定処理に戻す。ステップS113において特定された機能間定義データ95の第2の関連機能と、その第2の関連機能に対応する第2設定値との組をRAM203に記憶する。
図20は、プリントジョブ生成処理の流れの一例を示すフローチャートである。プリントジョブ生成処理は、図18のステップS106において実行される処理である。図20を参照して、CPU201は、HDD205に記憶されたMFP100Aに対応するプリンタードライバープログラムに含まれる複数のコマンド定義データ内から1つを選択する(ステップS121)。そして、コマンド定義データに記述されている1以上のUI定義データのうちから処理対象となる1つを選択する(ステップS122)。
次のステップS122においては、制御情報が存在するか否かを判断する。ステップS122において選択されたコマンド定義データのコマンド定義データを含む制御情報が、HDD205に記憶されたMFP100Aに対応するプリンタードライバープログラムに含まれているか否かを判断する。制御情報が存在すれば処理をステップS123に進めるが、そうでなければ処理をステップS127に進める。
ステップS123においては、ステップS121において選択されたコマンド定義データに記述されている1以上のUI定義データを選択する。そして、ステップS122において読み出された制御情報が、ステップS123において選択されたUI定義データに基づいて設定値が設定されたか否かの判断を実行しないことを示す禁止情報を含むか否かを判断する(ステップS124)。そのような禁止情報を含むならば処理をステップS123に戻すが、そうでなければ処理をステップS125に進める。ステップS125においては、ステップS123において選択されたUI定義データに対応する機能を識別するための機能識別情報と、そのUI定義データに対して、図19において説明した設定値設定処理が実行されて設定された設定値をRAM203から読み出す。これらは、図19のステップS114、またはステップS116においてRAM203に記憶されている。次のステップS126においては、ステップS123において処理対象に選択されていないUI定義データが存在するか否かを判断する。未処理のUI定義データが存在するのならば処理をステップS123に戻すが、そうでなければ処理をステップS130に進める。
ステップS127においては、ステップS121において選択されたコマンド定義データに記述されている1以上のUI定義データを選択する。そして、選択されたUI定義データに対応する機能を識別するための機能識別情報と、そのUI定義データに対して、図19において説明した設定値設定処理が実行されて設定された設定値をRAM203から読み出す(ステップS128)。これらは、図19のステップS114、またはステップS116においてRAM203に記憶されている。次のステップS129においては、ステップS127において処理対象に選択されていないUI定義データが存在するか否かを判断する。未処理のUI定義データが存在するのならば処理をステップS127に戻すが、そうでなければ処理をステップS130に進める。
ステップS130においては、ステップS125またはステップS128において読み出された機能識別情報と設定値との組に対応するプリントコマンドを選択する。次のステップS131においては、ステップS121において処理対象に選択されていないコマンド定義データが、存在するか否かを判断する。未処理のコマンド定義データが存在するならば処理をステップS121に戻すが、そうでなければ処理をステップS132に進める。
ステップS132においては、プリントジョブを生成する。RAM203に記憶されているプリントコマンドのすべてと、処理対象となるデータとを含むプリントジョブを生成する。そして、生成されたプリントジョブを、ネットワークI/F204を介してMFP100Aに送信し(ステップS133)、処理を設定処理に戻す。
なお、上述した実施の形態においては、サーバー300に定義データベースを記憶し、サーバー300においてドライバープログラムを生成する場合を例に説明したが、PC200A〜200Bからサーバー300に記憶された定義データベースにアクセス可能にして、PC200A〜200Bのいずれかでドライバープログラムを生成するようにしてもよい。この場合には、PC200A〜200Bのいずれかでドライバープログラム生成プログラムが実行され、図10に示した機能が、PC200A〜200Bのうちドライバープログラムを実行するPCのCPU201に形成される。さらに、図13〜図16に示した処理が、PC200A〜200Bのうちドライバープログラム生成プログラムを実行するPCのCPU201によって実行される。
以上説明したように本実施の形態におけるサーバー300は、ドライバープログラム生成装置として機能し、複数のUI定義データおよび複数のコマンド定義データと、複数のUI定義データ各々を複数のコマンド定義データのいずれか1つと関連付ける第1関連付情報と、複数のコマンド定義データ各々を複数のUI定義データの1以上と関連付ける第2関連付情報と、を含む定義データベースを記憶している。そして、MFP100A〜100Dそれぞれを制御するためのドライバープログラムのうちからユーザーにより指定された変更前プログラムを取得し、変更前プログラムに含まれる複数のUI定義データおよび複数のコマンド定義データを、ユーザーによる指示に従って変更した変更後プログラムを生成する。具体的には、変更前プログラムに含まれる複数のUI定義データのうちユーザーにより指定されたUI定義データを削除し、定義データベースに含まれる複数のUI定義データのうちユーザーにより指定されたUI定義データを変更前プログラムに追加する。そして、変更後プログラムに含まれる複数のUI定義データおよび複数のコマンド定義データの組み合わせを第1関連付情報および第2関連付情報により定められる関連付と整合させるために、変更後プログラムに含まれる複数のコマンド定義データの一部を変更することによって補正プログラムを生成する。このため、補正プログラムに含まれる複数のUI定義データと複数のコマンド定義データとを整合させることができる。
また、変更後プログラムにおいて変更前プログラムから削除されたUI定義データに第1関連付情報によって関連付けられたコマンド定義データが、削除されたUI定義データとは別の1以上のUI定義データと第2関連付情報によって関連付けられている場合、削除されたUI定義データとは別の1以上のUI定義データのみと第2関連付情報によって関連付けられたコマンド定義データを候補コマンド定義データとして抽出し、削除されたUI定義データに対応するコマンド定義データを削除し、候補コマンド定義データを追加する。また、変更後プログラムにおいて変更前のプログラムに追加されたUI定義データと第1関連付情報によって関連付けられたコマンド定義データが変更後プログラムに含まれない場合、追加されたUI定義データと第1関連付情報によって関連付けられたコマンド定義データを変更後プログラムに追加する。このため、変更後プログラムに含まれるUI定義データに関連するコマンド定義データを追加することができる。
また、変更後プログラムにおいて変更前プログラムから削除されたUI定義データに第1関連付情報によって関連付けられたコマンド定義データが、削除されたUI定義データとは別の1以上のUI定義データと第2関連付情報によって関連付けられている場合、そのコマンド定義データについて、コマンド定義データを識別するためのコマンド定義データ識別情報と、削除されたUI定義データに基づいて設定値が設定されたか否かの判断を実行しないことを示す禁止情報と、を含む制御情報を生成する。このため、制御情報は、削除されたUI定義データに基づいて設定値が設定されたか否かの判断を実行しないことを示す禁止情報を含むので、削除されたUI定義データと関連付けたられたコマンド定義データに基づいて、設定値が設定されたか否かの判断を、させないようにすることができる。その結果、ドライバープログラムを実行するコンピューターで不要な判断処理が実行されないようにし、負荷を低減することが可能なドライバープログラムを生成することができる。
また、変更後プログラムにおいて変更前プログラムから削除されたコマンド定義データと第2関連付情報によって関連付けられた1以上のUI定義データそれぞれを、当該UI定義データが第1関連付情報によって関連付けられたコマンド定義データが変更後プログラムに含まれていないことを条件に、変更後プログラムから削除した補正プログラムを生成する。このため、変更後プログラムに含まれないコマンド定義データに関連するUI定義データを削除することができるので、設定値を設定する必要のないUI定義データを削除することができる。
また、補正プログラムに含まれる複数のコマンド定義データそれぞれにおいて、第2関連付情報によって関連付けられた1以上のUI定義データのすべてが補正プログラムに含まれない場合、当該コマンド定義データを識別するためのコマンド定義データ識別情報と、補正プログラムに含まれないUI定義データに基づいて設定値が設定されたか否かの判断を実行しないことを示す禁止情報とを含む制御情報を生成する。このため、制御情報は、補正プログラムに含まれる複数のコマンド定義データそれぞれにおいて、補正プログラムに含まれないUI定義データに基づいて設定値が設定されたか否かの判断を実行しないことを示す禁止情報を含むので、補正プログラムに含まれる複数のコマンド定義データに基づいて、補正プログラムに含まれないUI定義データに基づいて設定値が設定されたか否かの判断を、させないようにすることができる。その結果、ドライバープログラムを実行するコンピューターで不要な判断処理が実行されないようにし、負荷を低減することが可能なドライバープログラムを生成することができる。
また、コマンド定義データ中で制御情報に含まれる禁止情報で特定されるUI定義データに関する記述を削除した代替コマンド定義データを生成するので、新たなコマンド定義データを容易に生成することができる。
さらに、補正プログラムに含まれる複数のUI定義データに基づいて、変更前プログラムに含まれる複数の機能間定義データを補正するので、複数の機能間定義データに基づいて、補正プログラムに含まれないUI定義データに基づいて設定値が設定可能か否かの判断する処理をさせないようにすることができる。その結果、ドライバープログラムを実行するコンピューターで不要な判断処理が実行されないようにし、負荷を低減することが可能なドライバープログラムを生成することができる。
なお、上述した実施の形態においては、ドライバープログラム生成装置の一例として、サーバー300またはPC200A〜200Dを例に説明したが、図13〜図17に示した処理をサーバー300またはPC200A〜200Dに実行させるドライバープログラム生成方法またはドライバープログラム生成プログラムとして発明を捉えることができるのは言うまでもない。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。