055 ヒントをつかむ(4日目)
●055 ヒントをつかむ(4日目)
ときは平成Y+1年、気がついたらチャレンジの4日目になっていた。徹夜して夜が明けた。半分気絶していたのか記憶は曖昧。よくあることですね。
色々調べては試してみたが、もうどうしようもない感じがしていた。何もしないよりはマシかもと、1602h 〜 1D1Eh の範囲を手当たり次第に読み出して文字列を表示する。ぼうっとした頭で画面を見る。なんだか目が霞んできた。
ランダムにみえる文字列が画面を流れていく、とその時!
私「あれ、いまファイル名が流れてきた?」
急いでスクリプトを止めて範囲を絞って表示しなおす。moreコマンドで少しずつ見る。確かに、これは実験データのファイルの名前である。自分で付けた名前なので間違えようがない。
私「な、何故かな?」(...どきどきする)
ファイル名がディスクに残っているのは不思議だ。ファイルシステムの仕様上は有り得ない。
ファイル名を含むブロックとその前後をダンプする。文字列表示の閾値を下げて 2 文字以上にしてみる。すると「PK」という文字列が目に付く。
私「PK って、PKARC の PK?、もしかして ZIP ファイルかな」(...冷静に考えると PKARC ではなくて PKZIP ですね)
そう言えば、と気が付いた。外付けHDDは大容量だったので、ZIP 圧縮したファイルとそのままのファイルの両方を保存していたのだった。生のファイルがあるといつでも解析スクリプトで解析できて、ZIP 圧縮ファイルがあれば間違って実験ファイルを編集してしまう心配がなくて、結局、両方を保存していた。ZIP ファイルには圧縮格納したファイルの情報が含まれている。当然、ファイル名もあるはずだ。
***
古いものが大好きな私は時間があると図書館の古い雑誌を読んでいた。ビットとかアスキー、ログアウト、ザベ、ROM、ナイコン、エ/ロ、...等など。生まれる前の雑誌も、合本されて、静かで落ち着く地下の集密書庫に収納されているのを探し出して読んだ。ARC と PKARC の話や GIF 特許の記事も見つけた。
...、昔はスマホもインターネットもなくて(...JUNET はあったよ)、パソコンとモデムで通信していたらしい。最初は 300bps とか 1200bps だ。データ圧縮が必要とされるわけだ。ブラウザーなんかも無くて、ダム端末。エスケープシーケンスで紙芝居、良くてナプルプスな時代だ。ISH や LHA という国産ソフトもあったとか。QLD は画像用の圧縮フォーマットで MAJ さん作。
色々あったけれど、...、ZIP フォーマットは国際規格になって、オフィスファイルやスマホアプリは、拡張子は違うけれど、中身は ZIP ファイルだ。日々お世話になっていると言える。
なので、PK と言えば、直ちに ZIP と連想できた。
***
ZIP の仕様は「APPNOTE」で説明されている。他に「書類形式小辞典(第一版)」も参考になったので、いつか第二版を出してほしい。でも最後は APPNOTE で確認した。
ZIP ファイルには固定バイト列が含まれている。「PK34」や「PK56」などだ(...シグネチャともいう)。P と K はアスキーコードで「P」と「K」で、3 と 4 はバイナリで 03h と 04h だ。
実質的に、PK34 は ZIP ファイルの最初を示し、PK56 で ZIP ファイルの最後(から 22 バイト前)を示す。
見つけたファイル名を含むブロック周辺を探すと PK12 や PK56 が見つかる。幾らか遡ると PK34 も見つかった。PK34 の近くにもファイル名がある。これは間違いなく ZIP ファイルの残骸だ。
これらの ZIP ファイルのシグネチャを探索するスクリプトを作成しよう。
RUNすると、直ぐに幾つかのシグネチャが見つかり出す。手応えを感じる。思わず身震いする。これは行けるのでは。
全てを探索するには時間がかかるから、今日は帰ろう(...帰りました)。
明日につづく
***