高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technote 1133

The New PrGeneral Version Opcode


目次

新 PrGeneral OP コード

プリンタドライバのデベロッパが知っておくべき事柄

アプリケーションのデベロッパが知っておくべき事柄

wDev の登録

参考文献

去 12 年間、プリンタドライバのデベロッパは、プリントレコードの TPrStl データ構造体内の wDev フィールドを使って、デバイスの情報を保存してきました。特に、例外なくこのフィールドの上位バイト (wDev ID と呼ばれています) を使ってデバイス情報を保存してきました。残念ながら、プリントレコードと wDev フィールドの設計上の制限のため、Printing Manager で使用できるのは最大で 256 個の ID だけです。驚くべきことに、プリンタ市場の拡大とともにこの数では足りなくなってしまいました。このためわれわれは、LaserWriter ドライバのバージョン 8.4 で、Printing Manager に PrGeneral OP コードと新しい構造体を追加して、デベロッパがこの制約を回避できるようにしました。

この TECHNOTE はプリンタドライバとアプリケーションのデベロッパ向けに書かれたものです。ここで説明する新しい情報を利用するにはコードを追加する必要がありますが、変更は最小限で済むようにしてあります。アプリケーションが特定のプリンタドライバの機能を調べるために、新しいバージョン情報を取り出す方法を示すサンプルコードを以下に示します。


新 PrGeneral OP コード: kPrVersionOp

LaserWriter ドライバのバージョン 8.4 では、新しい PrGeneral OP コードがいくつか導入されました。そのうちのひとつがドライバのバージョン情報のための OP コード、kPrVersionOp です。kPrVersionOp の使用は現在、アプリケーションが現在使用中のプリンタドライバを調べるための望ましい方法です。新しい PrGeneral OP コードを使わない、アップデート前のプリンタドライバも使えるよう、従来どおりの wDev によるチェックを行うコードも残しておく必要があります。
LaserWriter バージョン 8.4 で導入された、拡張プリントレコード OP コードの詳細については、『develop 27: Print Hints: The All-New LaserWriter Driver Version 8.4』を参照してください。アップルのプリンタドライバでサポートされている、他のすべての PrGeneral OP コードのリストが掲載されています。PrGeneral の詳細については、『develop 3: Trap That Makes the Most of the Printing Manager』を参照してください。


プリンタドライバのデベロッパが知っておくべき事柄


今後、アップルの Developer Support Center はすべてのドライバに対して wDev ID の 255 という値を割り当てます。古い wDev ID (255 より小さい数) を使っている場合は、その番号をそのまま使い続けて、ドライバの wDev に依存するアプリケーションを破壊しないようにしなければなりません。さらに、新しい kPrVersionOp OP コードをここの説明の通りに実装して、新しいアプリケーションがドライバの新機能を活用できるようにする必要があります。
リスト 1 には、PDEF 7 リソースに実装する必要のある新しい OP コードと構造体が載っています。TPrVersion 構造体の driver.creator フィールドにクリエータタイプを設定する必要があります。driver.release にバージョン番号を設定し、アプリケーションのデベロッパに利用可能なドライバのバージョンを知らせる必要もあります。
    release と intefaces フィールドは、'vers' リソースの最初の long と同じ形式です。つまり、4 個の 1 バイトの値で、それぞれ、メジャー・バージョン番号、マイナー・バージョン番号、改訂の段階 (開発中= 0x20、アルファ = 0x40、ベータ = 0x60、リリース = 0x80)、リリース前のバージョン番号です。
リスト 1 新しいバージョン OP コードと構造体
enum {
...
    kPrVersionOp = 22           // LaserWriter バージョン 8.4 以降のみ
};
typedef struct {
    OSType architecture;        // アーキテクチャ (例えば 'pwpc' や 'm68k')
    OSType creator;             // ドライバのクリエータタイプ (例えば 'AAPL')
    unsigned long release;      // リリース番号 (例えば 0x8480)
    unsigned long interfaces;   // インタフェースバージョン (例えば 0x8480)
} TVersion;
 
typedef struct {
    short iOpCode;              // kPrVersionOp でなければならない
    short iError;               // エラーを返すため
    long lReserved;             // 予約、0 に設定
    TVersion driver;            // ドライバ情報
    TVersion reserved;          // 予約、0 に設定
} TPrVersion;
 
ドライバで新しい PrGeneral OP コードをサポートするためにしなければならないことは以上です。とても簡単でしょう。

アプリケーションのデベロッパが知っておくべき事柄


アップルはデベロッパがプリントレコードの wDev フィールドをチェックすることをすすめていませんが、これをやっている人がたくさんいます。こういう人たちは、特定の wDev の値によってプリンタにある特定の機能があるものと判断するのです。例えば、多くのデベロッパは、wDev が 3 だと、プリンタドライバが PostScript[tm] をサポートすることを意味すると思っています。実際には、そのプリンタがアップルの LaserWriter ドライバを使用することを示しているだけです。これでは、ユーザが、例えば ID が 243 の、アップル以外の PostScript ドライバを使っているという可能性について考慮されていません。
アップルはアプリケーションのデベロッパに wDev フィールド (同様に PrGeneral OP コードも) に頼ることをおすすめしませんが、返り値やクリエータに基づいてアプリケーションの動作を変更する場合は、少なくともこれを正確に行って、プリンタドライバの将来のリリースでアプリケーションが壊れることがないようにしなければなりません。可能であれば、PrGeneral kPrVersionOp OP コードを使用して、構造体を取得し、driver.creator および driver.release フィールドをチェックして、現在のプリンタドライバのバージョンをチェックすることをおすすめします (リスト 1 を参照)。新しい PrGeneral OP コードにアップデートされていないプリンタドライバの wDev を使用した古い方法も引き続きサポートする必要があります。参考のために、この記事に掲載されている PrGeneral Version のサンプルには、バージョンと wDev 情報を正しく取り出す方法が示してあります。

さあやってみよう


おわかりのように、新しい PrGeneral OP コードをサポートするためにプリンタドライバとアプリケーションのデベロッパが行う変更は、非常にわずかなものです。この新しい方式はすでに LaserWriter のバージョン 8.4.x のドライバに採用されています。みなさんもぜひ採用してください。

wDevの登録


現在はすべてのプリンタドライバに 255 という wDev ID が割り当てられていることになりますが、それでも、クリエータタイプの衝突を回避するため、プリンタドライバをアップルの Developer Support Center に登録していただくようお願いします。アップルの wDev 登録ページで登録を行ってください。その際には次の情報を提供していただく必要があります。

  • 会社名と所在地
  • 担当者名、電話番号、電子メールアドレス
  • サポートするデバイスの製品名とモデル名 (例: Apple LaserWriter 16/600)
  • 接続タイプ (例: シリアル)
  • クリエータタイプ (例: 'AAPL')

5〜10 営業日のうちに登録の確認をお送りいたします。wDev の登録についてのご質問は devprograms@apple.com までお問い合わせください。

参考文献

更新日: 1998 年 6 月 8 日