こんにちは、川合です。
edimg0fをMLリリースします。
http://k.hideyosi.com/edimg0f.lzh (20.8KB)
これがOSASKアーカイブ支援機能をつけたedimgです。具体的には以下
の機能が追加されています。
・tek0圧縮されたディスクイメージをそのまま読める
→ たとえばimgin:kdun00b.binとやってよい。わざわざbim2binで解
凍しておく必要はない
・copy, ovrcopyコマンドにnocmp:オプションを追加
→ これを指定しておくと、圧縮されていたら自動で解凍してから、
コピーする。圧縮されていなければ普通にコピーする。
・copyallコマンドの追加
→ たとえば
prompt>edimg imgin:kdun00b.bin copyall from: !Atmark! : to:./
とやるだけで、kdun00b.binの中のファイルが全てカレントディ
レクトリに展開される。
以上、詳しいことについては添付のドキュメントを参照してください
。
---
さて、Jenny8以降で使えるようになったアーカイブの作り方などを詳
しく説明します。
アーカイブはかならずedimg0fに付いてくるsf16_40s.tekをベースに
生成します(参考:edimg0fのドキュメントの[例 - 6])。つまり、
opt imgin:sf16_40s.tek /* SF16_40 simplest image */
opt vsiz:8m
{ ARCINFO0.TXTのコピー }
{ アーカイブの中身のコピー }
release minibpb: nofrag: efat:
opt imgout:圧縮前のアーカイブ名
という手順になります。
ARCINFO0.TXTというのは、このアーカイブにどんなファイルが入って
いるかや、アプリケーションからのファイル要求にどのように応じるべ
きかを設定したファイルで、ディスクイメージ上ではディレクトリエン
トリの先頭かつ、ファイル領域の先頭に位置することになっています。
そのうえ、なにやら一見するとテキストファイルのように見えますが、
実態はバイナリファイルで、ようするに何バイト目に何を書くかがきっ
ちりと決まっています。不用意に改行位置を変えたりスペースを追加し
たり削ったりしてはいけません。0x00000100とかかれている部分を
0x100にすることもできません。Linuxで編集する場合も改行コードを変
更しないように細心の注意を払ってください。
kdun00bの例で説明します。ARCINFO0.TXTの中身はこうなっています
。
format_id: "OSASKARC0000"!
version: 0x00000000 !
levels: 0x00000000 !
!
dos_name: "KDUN00A .BIN"!
options: 0x00000100 !
num: 0x00000000 !
!
dos_name: "KAODUN .BG "!
options: 0x00000001 !
num: 0x00000000 !
!
dos_name: "KAODUN .CHR"!
options: 0x00000001 !
num: 0x00000000 !
!
dos_name: "KAODUN .ETC"!
options: 0x00000001 !
num: 0x00000000 !
!
基本的に最初の128バイトがヘッダ、あとは1ファイルにつき128バイ
トで情報が記述されています。format_idやversion、levelsはいじらな
いでください。いじると解釈不能とみなされ、アクセスできなくなりま
す。
最初に書かれるファイルは、OSASKARCにおいて「主ファイル」(主モ
ジュール)と呼ばれるものです。このアーカイブを読み取ったときに、
とりあえず中身としては主ファイルの中身が渡されます。そしてアーカ
イブ内のほかのファイルは、以後のアプリからの要求へのレスポンス用
と解釈されます。このようなレスポンス用ファイルは「副ファイル」(
副モジュール)と呼びます。
主ファイルは、optionsのbit8を1にしなければいけません。
さてoptionsのほかのbitについても説明します。
bit0-2の3bitはアプリからのダイレクトネームアクセス要求に対する
レスポンスです。
0:dos_nameが一致したら無条件でアーカイブ内のファイルで対応
1:dos_nameが一致してかつディスク内に同名のファイルがないとき
だけ、アーカイブ内のファイルで対応
7:ダイレクトネームアクセス要求には反応しない
bit4-6の3bitはアプリからファイルセレクタによるアクセス要求に対
するレスポンスです。
0:num値が一致したら無条件でアーカイブ内のファイルで対応
1:numが一致してかつオーダーがないときだけ、アーカイブ内のフ
ァイルで対応
7:num値フィールドは無効なので常に反応しない
ここでオーダーというのは、つまりpokonでTXTファイルを選ぶとか、
JPGファイルを選ぶとかした場合のことで、シェルがビューアとしてア
プリを起動した場合、引き渡すデータファイルをオーダーバッファにた
めているのです。
なお上記の例のようにnum値が有効でしかも同じ値のものが複数あっ
た場合、どのファイルがマッチしたと判定されるかは保証されません。
kdun00a.binはnum値をつかったオープンがないので、この場合は関係な
いのですが。
[OSASK 6930]によるとJenny8はさっそくバグもちだったようで、これ
からじっくりバグをつぶすことにします。
それでは。
--
川合 秀実(KAWAI Hidemi)
OSASK計画代表 / システム設計開発担当
E-mail:kawai !Atmark! osask.jp
Homepage http://osask.jp/