相変わらず暑い夏が残っている。3週間経ってしまったら、次に何を書こうとしていたのかすっかり忘れてしまったのだが、たぶん全体の構成を説明しようと考えていたのだろう。ダイナミックハフマンコードのデコードVIのサブVIの階層は下のようになっている。
一番上がデコードVIになっている。これも将来はサブVIになる予定だが、今のところ下のようなダイアグラムになっている。前回書いたように仕様を理解する過程でずいぶん大変だったが、出来上がったものは固定ハフマンコードでの伸長プログラムと大きな違いはない。
"Block Head"はブロックヘッダーの3ビットを読み取って圧縮方式を調べている。本来はここで固定圧縮、ダイナミック圧縮、無圧縮の場合わけが行われるのだが、今回は単に表示されるだけだ。
"Block Head"の次のDynamicCode.viはダイナミックコードを読み取ってハフマンコードを作り出すVIだ。
ホワイルループの中のDynamicDecorder.viはダイナミックコードを使って伸長を行なっている。
この中で使っている距離・長さのデコードは固定コードの場合と基本的には違いはないが、距離コードもハフマンコードを使うため、少し込み入ってきている。固定でもダイナミックでも共通に使えるように改造した。(commonLenDist_Decorder.vi)
今日はこれを書きながら、これまでのVIを整理してZIPの読み取りプログラムにまとめることができた。次回はそれを紹介してみよう。