------------------------------------------------------------------------ 1998年8月 株式会社日立製作所 ストレージシステム事業部 ------------------------------------------------------------------------ 1.はじめに ----------  日立製作所ストレージシステム事業部(以下、弊社)製ディスクサブ システムでは、その制御プログラムの立上時にツールの一つとして GNU のフリーソフトウェアである gzip に変更を加えたものを使用しています。  本ファイルは弊社のディスクサブシステムで使用する gzip について 説明したものです。 2.GNUとgzip -----------  GNU は Free Software Foundation, Inc. の運営する GNU Project の通称であり、多くのフリーソフトウェアの開発と頒布を行っています。  gzip は GNU Project で作成され、頒布されているフリーソフトウェア の一つであり、データの圧縮と解凍の機能を持つプログラムです。  gzip についての詳細な情報は以下のURLから得られます。 http://www.gzip.org/ (The gzip home page) http://w3.teaser.fr/~jlgailly/ (Jean-loup's home page)  gzip は一般にアーカイブの状態で入手でき、このアーカイブ中にソース ファイルが含まれています。gzip を弊社のディスクサブシステムで使用 するにあたって、変更の元としたアーカイブは gzip-1.2.4 です。  以下、これらをオリジナルのアーカイブまたはオリジナルのソースファ イルと呼びます。  オリジナルのアーカイブは以下の FTP サイトを始め、多くのサイトから 入手できます。 ftp://prep.ai.mit.edu:/pub/gnu/ ftp://ftp.iij.ad.jp/pub/GNU/ 3.ディスクサブシステム制御ソフトウェア中の gzip の位置付け ----------------------------------------------------------  弊社のディスクサブシステムでは、その制御プログラムの立上時に gzip の解凍機能を使用しています。  この機能は外部呼出し形式の実行モジュールとして実装しており、 制御ソフトウェアの本体をロードするプログラムローダがこの外部実行 モジュールを使用します。  制御ソフトウェアの本体では gzip を使用しません。また、プログラム ローダは、同じ機能とインタフェースを持つ実行モジュールであればこの 実行モジュールをファイル単位で他のものと置き換え可能な構造になって います。 4.本フロッピーディスクの内容 ----------------------------  本フロッピーディスクは弊社のディスクサブシステムの制御ソフト ウェアのインストール用ディスクのうちの1枚であり、gzip に関わる 内容は全てこの1枚のディスク中に納められています。  本フロッピーディスクには以下のファイルを含んでいます。 \ --+-- DKC200 ----- MP ----- DKC --+-- DKA ----- 1inflodd.prg | +-- CHA ----- 1inflodc.prg | +-- CHS ----- 1inflods.prg | +-- CHF ----- 1inflodf.prg | +--- GZIP --+-- SRC --+-- inflate.c | +-- inflate.h | +-- makefile | +-- COPYING +-- readme.txt +-- readme_j.txt 1inflodx.prg(xは任意の1文字)  gzip の解凍機能部分の実行モジュールです。  装置構成に依り上記に挙げた4つのファイルのうちの 幾つかが存在しない場合や、上記のファイル名以外の ものが存在する場合もあります。  これらのファイルがプログラムローダから読み込ま れて使用されます。 inflate.c  オリジナルのソースファイルから解凍機能部分を取り 出し、関数インタフェース持つように変更したソース ファイルです。  このファイルの内容は、オリジナルのソースファイル 中の inflate.c から解凍機能に必要の無いコードを削除 したものに、同じくオリジナルソースファイル中の util.c から必要なコードを取り入れたものです。  このファイルには弊社による変更が含まれています。 inflate.h  inflate.c の解凍機能部分のインタフェースを記した ヘッダファイルです。  inflate.c のコンパイル時と解凍機能を使用する モジュールのソースファイルのコンパイル時に必要となり ます。  このファイルは弊社で作成したものです。 makefile  inflate.c, inflate.h から 1inflodx.prg を作成する ためのメイクファイルの例です。  このファイルは弊社で作成したものです。 COPYING  GNU GENERAL PUBLIC LICENCE(Versino 2, June 1991、 以下 GPL)です。  GNU の公開しているフリーソフトウェアの著作権と、 使用からソースファイルの変更、再配布までを含めた 使用許諾条件が記載されたファイルです。 readme.txt, readme_j.txt このファイルです(英文及び和文)。 御注意:  本フロッピーディスクをディスクサブシステムのインストール 用として使用する限り、上記に示すファイル名、ディレクトリ名、 ディレクトリ構成及びファイル自体を変更してはいけません。 5.著作権 --------  オリジナルの gzip の著作権は GNU と gzip の作成者に帰属します。  オリジナルのソースファイル中の inflate.c には「Not copyrighted」 の記述がありますが、法的に著作権の放棄の認められない日本等の地域に おいては事実上の著作権は依然 GNU と gzip の作成者に帰属しています。  本フロッピーディスク中の inflate.c への弊社の変更部分と弊社の作成 したファイル inflate.h, makefile の著作権は弊社に帰属します。  ソースファイルの変更部分は、オリジナルのアーカイブ中のファイル との差分を取ることにより得られます。 6.使用許諾、改変、頒布 ----------------------  オリジナルの gzip はフリーソフトウェアであり、その使用、改変、 頒布の条件は GPL に規定されています。  GPL に規定される条件に従い、弊社は本フロッピーディスク中のファ イルをフリーソフトウェアとします。また、これらのファイルに GPL を 適用します。  弊社は本フロッピーディスクの内容に対して、媒体とその引き渡しに 費やす実費以外のいかなる対価も得るものではありません。  本フロッピーディスクの内容の使用、改変、再頒布は以下の条件を満 たす限りにおいて自由です。 ・次章の「保証、免責」の内容を理解し、同意することが必要  です。 ・再頒布する場合には、改変を行ったか行わなかったかに関わら  ず、このファイル(英文及び和文の両方)及び GPL を一緒に  添付しなければいけません。この時、これらのファイルの内容  及びファイル名( readme.txt, readmej.txt 及び COPYING )  を変更してはいけません。 ・本フロッピーディスクそのものを譲渡することはできません。  (本フロッピーディスクは弊社のディスクサブシステムの付属  物です。)  譲渡する場合は他の媒体に複写してください。この時その媒体  が複製物であることを明示しなければいけません。 ・改変したものを再頒布する場合は、ファイルを改変した旨と  その日付を明示しなければいけません。 ・GPL に規定された内容を遵守することが必要です。 7.保証、免責 ------------  本フロッピーディスクの内容を弊社のディスクサブシステムのインス トール用ディスクとしての目的以外で使用する場合、そのような使用の もとに発生したいかなる損害に対しても、弊社および弊社のディスクサブ システムの販売元は一切の責任を負いません。また、弊社はそのような 使用に関する問合わせに対して回答する義務を負いません。  gzip は弊社による変更部分も含めてフリーソフトウェアであり、弊社 が提供する製品ではありません。  GNU はオリジナルの gzip に対して、いかなる保証もしていません。  また、gzip の作成者等はその開発にあたって、特許や著作権について 入念な調査を行ったことは、先に示す URL で公開されている情報から 読み取れますが、法的に第三者の知的所有権を侵害していないことを保障 しているものではありません。 8.プログラム作成環境 --------------------  本フロッピーディスク中に含まれるソースファイル inflate.c, inflate.h は、以下の環境でコンパイル、リンクするように作成したものです。 Cコンパイラ gcc gcc960 version cygnus-2.0.2 リンカ ld gld version BFD 1.95 メイク make GNU make version 3.62 作成環境 SunOS4.1.3-JLE, 4.1.4-JLE (JLE: Japanese Language Edition) 9.プログラムのインタフェース ----------------------------  inflate.c, inflate.h により、メモリ上の圧縮データを解凍するため の関数が使用できるようになります。  以下にそれらの関数の仕様と簡単な使用例を示します。 関数仕様 -------- #include "inflate.h" void gzip_clear_bufs( ZFILE* zfile ) unsigned long gzip_updcrc( unsigned char *window, unsigned outcnt ) int gzip_get_method( void ); int gzip_copy_code( char *dest, int size ) int gzip_get_outbytes( void ); unsigned char gzip_get_byte( void );  gzip_clear_bufs() は圧縮データを解凍するための作業用 メモリエリアをクリアする等の初期化の処理をおこないます。  ZFILE構造体は inflate.h 中で定義された構造体で、メモリ 中に置かれた圧縮データをファイル構造体のように扱います。 zfile はその構造体へのポインタです。  gzip_updcrc() は解凍したデータの CRC を返します。2つ 目の引数 outcnt には常に 0 を指定します。  1つめの引数 window が NULL の場合、gzip_updcrc は CRC の計算のための初期化を行います。window が非 NULL の場合、 解凍済みデータから計算した CRC を返します。  gzip_get_method() は圧縮データのメソッドコードを返します。  gzip_copy_code() は圧縮データから最大で size バイトの解凍 データを取り出して dest に格納し、実際に解凍したデータの バイト数を返します。  gzip_get_outbytes() は解凍済みのデータのバイト数を返し ます。  gzip_get_byte() は圧縮データ末尾の CRC とデータ長の情報 を1バイトずつ読み出すために使用します。 使用例 ------ /* 圧縮データの設定 */ zfile->file_ptr = ... ; zfile->zfile_size = ... ; .... /* 解凍後のデータのバイト数の設定 */ size = ... ; gzip_clear_bufs( zfile ); gzip_updcrc( NULL, 0 ); if( gzip_get_method() < 0 ) { /* Error */ } for( s = size ; s > 0 ; s -= n ) { n = gzip_copy_code( dest, size ); dest += n; } crc = gzip_get_byte(); crc *= 256; crc += gzip_get_byte(); crc *= 256; crc += gzip_get_byte(); crc *= 256; crc += gzip_get_byte(); len = gzip_get_byte(); len *= 256; len += gzip_get_byte(); len *= 256; len += gzip_get_byte(); len *= 256; len += gzip_get_byte(); /* 解凍したバイト数の確認 */ if( len != gzip_get_outbytes() ) { /* Error */ } /* 解凍したデータの CRC の確認 */ if( crc != gzip_updcrc( (unsigned char*)(!NULL), 0 ) { /* Error */ } ------------------------------------------------------------------------ 株式会社日立製作所 ストレージシステム事業部 神奈川県小田原市国付津2880番地 TEL (0465)48-1111