Noah'S   eXtention 解説
for ver 2.50

Noah では、テキストファイルによるプラグインで、コマンドラインexeや
統合アーカイバDLLへの対応を拡張できます。
この文書ではそのやり方について解説します。

このNSX拡張は、上級者向け機能です。拡張しなくてもNoahは各種DLLには標準で
対応していますので、無理してこれを読む必要は全くありません。
NSXの書き方はわからないが拡張はしたいという人は、
「K.INABA's Homepage」で、拡張キットを手に入れることができます。


概要

Noahの拡張は、NSX という拡張子を持つテキスト形式のファイルを
typesフォルダに置くだけで完了です。

さて、ここでちょっとsample.lzhを解凍して、unlha32.nsxあたりを
テキストエディタで開いて見て下さい。

....見ましたね?
わかる人にはほとんどわかると思いますが、要は、DLLやEXEに送るコマンドの指定です。

K.INABAは説明下手なので、このファイルを読んでも何のことやらわからんかもしれないですが、
そのときはサンプルを見ればわかると思います。


フォーマット(1〜3行目)
NSXファイルに書くべき事項を説明します。まず絶対書かなくてはならない部分

1行目:DLLまたはEXEのファイル名
2行目:扱う書庫の標準的な拡張子
3行目:将来使うかもしれない。とりあえず空欄

  ※→DLL名についての注意
  ※「標準的な拡張子」は、EXEの場合、書庫かどうかの拡張子判定に使います。
    DLL操作の場合は補助的にしか使わないので、適当でも結構。


ここから下では、省略可能な部分を解説します。COMPRESS部、MELT部、SFX部の順番は
どういう順でも構いません。

フォーマット(4行目以降)

COMPRESS部は、圧縮に対応する場合に必要です。

1行目:<COMPRESS>
2行目以降(最大3つまで):形式名,拡張子,コマンド
 ・
 ・

MELT部は、解凍に対応する場合に必要です。

1行目:<MELT>
2行目:コマンド

MELTEACH部は、書庫内表示&部分解凍に対応する場合に必要です。
MELTEACH部がないと、部分解凍にはMELT部のコマンドが使用されます。

1行目:<MELTEACH>
2行目:コマンド

SFX部は、自己解凍形式圧縮に対応する場合に必要です。

1行目:<SFX>
2行目以降(最大3つまで):コマンド
 ・
 ・

  ※<COMPRESS>,<MELT>,<SFX>
     ここから○○部の始まり!ということを示します。必ず半角大文字で<COMPRESS>や
     <MELT>,<SFX>とだけ書いて置いて下さい。
  ※「形式名」・・・Noahの設定ダイアログの「圧縮形式」欄に表示される文字列。
  ※「拡張子」・・・書庫に付ける拡張子
  ※「コマンド」・・・EXEやDLLに送るコマンドを書きます。下参照。


コマンド

 コマンドでは、以下の文字を、Noahが内部で次のように置き換えてEXEやDLLに送ります。
 なんかいろいろありますが、良心的な(^^;DLLやEXEなら%aと%f以外使わないと思います。
  %a = 書庫名(Archive name)
     *圧縮先書庫名 or SFXに変換される元書庫名 or 解凍される書庫名
     圧縮解凍SFX(変換方式)

  %b = 基底ディレクトリ名(Base directory)
     *Noahに渡されたファイルのあるディレクトリ名
     圧縮SFX(直接方式)

  %d = 出力ディレクトリ名(Destination directory)
     *書庫出力先ディレクトリ名 or 解凍先ディレクトリ名
     圧縮解凍SFX

  %f = ファイル名のリスト( 「フォルダ内の全てのファイル」を表すワイルドカードは *.* を使う )(File list)
     *Noahに渡されたファイルのリスト or 部分解凍したいファイルのリスト
     圧縮解凍(部分解凍)SFX(直接方式)

  %w = ファイル名のリスト( 「フォルダ内の全てのファイル」を表すワイルドカードは * を使う )(Wild filelist)
     *Noahに渡されたファイルのリスト or 部分解凍したいファイルのリスト
     圧縮解凍(部分解凍)SFX(直接方式)

  %n = ファイル名のリスト( 「フォルダ内の全てのファイル」を表すときは単にフォルダ名を書く )(No Wildcard)
     *Noahに渡されたファイルのリスト
     圧縮SFX(直接方式)

  %o = Noahに渡された一個目のファイルの名前(One file)
     圧縮SFX(直接方式)

  %s = SFX書庫名(Sfx name)
     SFX

  %% = % という文字そのもの

 また、コマンドを送るときのカレントディレクトリは、
    圧縮時「Noahに渡されたファイルのあるディレクトリ」(%bと同じ)
   直接SFX時「Noahに渡されたファイルのあるディレクトリ」(%bと同じ)
   変換SFX時「SFX書庫出力ディレクトリ」(%dと同じ)
    解凍時「解凍先ディレクトリ」(%dと同じ)
 となります。

SFX部以外は、適当にnsxを眺めれば大体わかると思うので、SFXについて少し詳しく説明します。
SFXコマンドは最高三つまで書けます。もちろんCOMPRESS部に対応して使用されます。
つまり、COMPRESS部の上から2行目に書いた圧縮形式でSFX圧縮をしよう、とユーザーが
操作すると、使われるのはSFX部の上から2番目のコマンドになります。

「...だがちょっと待て」と、nsxファイルと見比べながらこの説明書を読んでるなら
貴方は言いたくなるでしょう。「unlha32.nsxとか、SFX部は一行だけだぞ?」

そう、そのとおり。でも大丈夫。SFX部に二行目がなかったら一行目が使われるようになってます。
普通は圧縮形式によってSFX変換コマンドを使い分ける必要はないですから。

でも一行目の形式はSFX化できるけど二行目のじゃできないとか言う場合どうする?
そのときは二行目に半角大文字で NO!! と書いて置いて下さい。(tar32.nsx参照)

     ☆ ☆ ☆ ☆

もう一点。SFX を作るコマンドは、世の中には2種類あります。
 「直接SFXを作りながら圧縮するもの」「普通の書庫をSFXに変換するもの」
NSXでは、どちらを書いてもOKです。Noahの得意技自動判別しますんで(^^;
前者の場合、c -s aaa.exe aaa.txt bbb.bmp のような形、
後者だと -f aaa.cab のような形になると思います。
後者には圧縮したいファイルのリストすなわち%fや%wや%nが無く、前者にはある、
というのが判断基準です。


注意事項

DLL名についての注意
 Noahでは、DLL名から関数名を自動取得しています。
 DLL名が Unrar32.dll だったら、Unrarを接頭辞として使う、と言った感じで。
 (このやり方で取得できなかった場合ccを接頭辞にして取得します)

 普通は、最初一文字が大文字、あと小文字とすれば大丈夫ですが、
 unzip32.dll は必ず UnZip32.dll とするようにして下さい。

NSXで呼び出すExeの設定
 Noahはexeを呼び出すと、exeが終了するまで無条件待機します。
 exeは圧縮/解凍処理が終わったら即終了する設定にしておくのが望ましいです。

NSXファイルのテキスト形式
 ファイルサイズは、32KBまでです。それ以降は切り捨てます。
 さらに、30行までです。それ以降は切り捨てます。
 SHIFT-JIS & CRLF のテキストファイルしか扱えません。

自作コマンドラインアーカイバを作ってる人へ
 ソフトを公開するときにNSXを添付して下さるとうれしいです、なんちゃって(^^;


14:27 00/03/20
K.INABA( k-inaba@ma3.justnet.ne.jp )
http://www3.justnet.ne.jp/~k-inaba/

書いてみてやっぱりわかりにくい説明だなぁ、と自分でも反省してるので、わかんなくて当然と
割り切って、どんどんメールで質問して下さい。具体的な例ならもう少しマシに説明できると思います。(^^;