[osask 6934] edimg0f, ARCINFO0.

  こんにちは、川合です。

  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/

ML番号でジャンプ
ML単語検索