部品を寄せ集めて一つのモノを作るのは楽しい作業だ。集中ディレクトリからファイル名を取り出して表示し、ユーザーに選択してもらう。それに従って、ローカルディレクトリを見てサポートしている圧縮形式の場合に伸長を行う。
フロントパネルは下のようなそっけないものだ。圧縮プログラムができたら、まとめてきれいにしてみよう。
ダイアグラムは下のようなもので、SelectFile.viとmethod.viは新たに作成した。
リストの属性ノードに集中ディレクトリで調べたファイル名を入れてリストに表示し、セレクトボタンが押された時点のFile Listの数値を出力する。VI設定で、呼び出された時点で表示されて、選択が終了すると消えるように設定している。
decompress.viはローカルヘッダーに書かれているファイルサイズ分だけ一気に読取を行い、ブロックヘッダーをもとに圧縮方式を選んで伸長を行っている。大きなファイルやメモリの容量がない場合は、ファイルからの読み込みをホワイルループの中にいれて小刻みに読み込んでいったほうが良いのだが、面倒なのでとりあえずこんな方式でお茶を濁してしまった。
readBlock.viはブロックごとに指定される0;無圧縮、1;固定ハフマンコード、2;ダイナミックハフマンコード、3;エラーのそれぞれに対応して伸長した文字列を出力する。
短いファイルでしかテストしていないので、プログラムの動作速度やバグがないかどうか分からないが、とりあえず他のソフトで圧縮したファイルを伸長することができた。これだけではあまり役に立たないので次はZIP形式で書き込む(圧縮する)VIを作ってみよう。