ご来訪ありがとうございます。
当サイトは http://www.kmonos.net/ へ移転しました。
(2002/08/11)
B2E(Bridge To Executables) Script 仕様書
仕様書だけじゃ全然わからん、という方。あるいは、作ってみたけど 果たしてこれでよいのか自信ないから合わせてみたいという方。これからb2eを 書こうと思っているので、いろいろ弄れる叩き台が欲しいという方、 そんな方々向けの情報サイトとしてこんなページを作ってみました。
load: (name Unbel32.dll) decode: (cmd (arc) (dir))
load: (name Aish32.dll) (type ish sjis jis7 jis8 nk-sjis uuencode) decode: (cmd (arc)) encode1: (cd (arc d)) (if (method 1) (cmd -s -d (list f))) (if (method 2) (cmd -7 -d (list f))) (if (method 3) (cmd -8 -d (list f))) (if (method 4) (cmd -n -d (list f))) (if (method 5) (cmd -u -d (list f)))
load: (name Unlha32.dll) (type lzh lh5 lh6 lh7) check: decode: (cmd x -a1 -jf0 (arc)) decode1: (cmd x -a1 -jf0 -p1 -n -gm -- (arc) (list)) encode: (if (method 1) (cmd a -d -jso1 -- -jm2 (arc.lzh) (list))) (if (method 2) (cmd a -d -jso1 -- -jm3 (arc.lzh) (list))) (if (method 3) (cmd a -d -jso1 -- -jm4 (arc.lzh) (list))) sfx: (cmd s -gw3 -x1 (arc))
load: (name Zip32j.dll) (type zip store *normal password) encode: (if (method 1) (cmd -rS0 (arc.zip) (list\*.*))) (if (method 2) (cmd -rS9 (arc.zip) (list\*.*))) (if (method 3) (cmd -rS9e (arc.zip) (list\*.*))) sfx: (cmd --sfx (arc))
load: (name UnZip32.dll) check: decode: (cmd -x (arc)) decode1: (cmd -x --i -o (arc))
load: (name Unrar32.dll) check: decode: (cmd -x (arc)) decode1: (cmd -x -s -y -- (arc))
load: (name Unarj32j.dll) check: decode: (cmd x -jyc (arc)) decode1: (cmd x -y -p -hm -i -! (arc))
load: (name UnGCA32.dll) check: decode: (cmd e -sx1 (arc)) decode1: (cmd ex -xx1 -sx0 (arc))
load: (name Cab32.dll) (type cab MSZIP *LZX21) check: decode: (cmd -x (arc)) decode1: (cmd -x -i -o (arc) (list)) encode: (if (method 1) (cmd -a -r -mz (arc.cab) (list\*.*))) (if (method 2) (cmd -a -r -ml:21 (arc.cab) (list\*.*))) sfx: (cmd -f (arc))
load: (name Yz1.dll) (type yz1 normal password) check: decode: (cmd x (arc)) decode1: (cmd x -y -z -i2 -- (arc) (list)) encode: (if (method 1) (cmd c (arc.yz1) (list))) (if (method 2) (cmd c -p (arc.yz1) (list))) sfx: (cmd s (arc))
load: (name Bga32.dll) (type bga gzip *bzip2) check: decode: (cmd x -a (arc)) decode1: (cmd x -a -i -o (arc) (list)) encode: (if (method 1) (cmd a -r -a (arc.gza) (list\*.*))) (if (method 2) (cmd a -r -a (arc.bza) (list\*.*))) sfx: (cmd s (arc))
load: (name Tar32.dll) (type tar normal *gzip bzip2) check: decode: (cmd -xvf (arc)) decode1: (cmd --check-all-path=1 --display-dialog=0 -xvf (arc) (list)) encode: (if (method 1) (cmd -cvf (arc.tar) (list\*.*))) (if (method 2) (cmd -cvfz (arc.tgz) (list\*.*))) (if (method 3) (cmd -cvfB (arc.tbz) (list\*.*)))
load: (name 7-zip32.dll) (type 7z LZMA PPMd) check: decode: (cmd x (arc)) decode1: (cmd x -y -hide (arc) (list)) encode: (if (method 1) (cmd a -t7z -m0=LZMA -r0 -mx (arc.7z) (list\*))) (if (method 2) (cmd a -t7z -m0=PPMd -r0 (arc.7z) (list\*))) sfxd: (if (method 1) (cmd a -t7z -sfx7z.sfx -m0=LZMA -r0 -mx (arc.7z) (list\*))) (if (method 2) (cmd a -t7z -sfx7z.sfx -m0=PPMd -r0 (arc.7z) (list\*)))
load: (name 7-zip32.dll) (type zip 7-zip) encode: (cmd a -tzip -r0 (arc.zip) (list\*)))
(list) == ReadMe.txt b2e Noah.exe NoahXt.dll (list\*) == ReadMe.txt b2e\* Noah.exe NoahXt.dll (list\*.*) == ReadMe.txt b2e\*.* Noah.exe NoahXt.dll (listr) == ReadMe.txt b2e\jak.b2e b2e\aboutb2e.txt Noah.exe NoahXt.dll
Noahに「ReadMe.txt」「jak.b2eとaboutb2e.txtの入ったb2eフォルダ」「Noah.exe」「NoahXt.dll」の 4つがドロップされた場合、list命令はそれぞれ上のように展開されます。違うのはフォルダの扱いだけ、ということが解るかと思います。
(resp (listr)) == ReadMe.txt b2e\jak.b2e b2e\aboutb2e.txt Noah.exe NoahXt.dll という中身のファイルをテンポラリに書き出し、そのファイルの名前を返す。つまり、 (cmd a (arc.cab) (resp (listr))) と言う文は、 a d:\desktop\ReadMe.cab c:\temp\filelist などというコマンドをexeやdllに送ることになる。 c:\temp\filelistは、上に書いたような5行のテキストファイルになっている。
(listr) を使うと、ファイル名の数が増えすぎて、上手く圧縮できなくなることがあります。 パラメータは1024個まで…などの制限が加わっているソフトは結構ありますので。 その場合、「レスポンスファイル」という機能をアーカイバがもし持っていれば、これを 活用することが出来ます。
大抵は、@listfile や !listfile という形でリストファイルを指定すると、 その中からファイル名を読み込んで圧縮する…という機能なので、上の例のように 直接リストファイル名を指定してしまうと、そのリストファイル自体が圧縮されてしまって 困ってしまいます。ちゃんと @listfile 形式にするには、下のようにやります。
(cmd a (arc.cab) (resp@ (listr))) と言う文は、 a d:\desktop\ReadMe.cab @c:\temp\filelist などというコマンドをexeやdllに送ることになる。
resq と resp は、ファイル名に半角スペースが入ったときの扱いが違います。 (resq は ""でくくらない、respは""でくくる。) これも、どちらが適切かはアーカイバ次第なので、試して決めましょう。
(xcmd xcopy.exe (resp (listr)) (arc d))
余談ですが、↑のようにするとリストファイルを圧縮先に残せたりするので、 デバッグに便利かもしれません。^^;
load: (name Upx.exe us) (type upx best) encode1: (cmd --best --compress-icon=0 (list))
load: (name Rar.exe) (type rar maximum *max+media) encode: (if (method 1) (cmd a -s -m5 -r0 (arc.rar) (list\*.*))) (if (method 2) (cmd a -s -m5 -mm -r0 (arc.rar) (list\*.*))) sfx: (cmd s (arc))
load: (name Rk.exe us) (type rk fast *max) decode: (cmd -x (arc)) encode: (if (method 1) (cmd -mf1 -I5 (arc.rk) (listr))) (if (method 2) (cmd -mx3 -I5 (arc.rk) (listr))) sfxd: (if (method 1) (cmd -SFX -mf1 -I5 (arc.exe) (listr))) (if (method 2) (cmd -SFX -mx3 -I5 (arc.exe) (listr)))
load: (name Gcac.exe) (type gca normal *solid single) encode: (if (method 1) (cmd a (resq-o (listr)) (arc.gca))) (if (method 2) (cmd s (resq-o (listr)) (arc.gca))) (if (method 3) (cmd s (arc.gca) (list))) (comment method 1,2ではディレクトリ構造が無視されます。 method 3ではファイルもしくはフォルダ一つしか圧縮できません)