Artifact Content

Not logged in

Artifact bc1665b745683ac3647eca488eb764253558ac40


     1  
     2  =★ B2E(Bridge To Executables) Script 仕様書
     3  =★                                                  2010/10/14
     4  =★                           k.inaba ( http://www.kmonos.net/ )
     5  
     6  
     7  
     8  1.概要 ------------------------------------------------------
     9  
    10    Noahは、定義ファイルを追加することで他のexeのフロントエンド
    11   となることが出来ます。つまり、「コマンドライン用の圧縮解凍ソ
    12   フトは面倒!」と思ったら、Noahと連携させて簡単なGUIで操作が
    13   できるようになるわけです。
    14  
    15    定義ファイルは、Noah.exeと同じ階層のb2eフォルダに入れること
    16   で自動で認識されます。以下ではこの定義ファイルの書き方を解説
    17   していきます。
    18  
    19  
    20  
    21  2.ファイル名 ------------------------------------------------
    22  
    23   ・拡張子は b2e
    24   ・ファイル名に対応拡張子を記述
    25  
    26   ex) 拡張子ishとuueとuuを展開可能にするためのスクリプトなら
    27      ish.uue.uu.b2e
    28   ex) となります。zzを展開するためのモノなら、単に
    29      zz.b2e
    30   ex) ですね。圧縮しか行わない場合は出来れば、
    31      #rar.b2e
    32   ex) のように、頭に # を付けて下さい。(必須ではありません)
    33  
    34  
    35  
    36  3.サンプル -------------------------------------------------------
    37  
    38   | load:
    39   |  (name Rar.exe)
    40   |  (type rar Fast Default *Best)
    41   | 
    42   | encode:
    43   |  (if (method 1) (cmd a -m1 -r0 (arc.rar) (list\*.*)))
    44   |  (if (method 2) (cmd a -m3 -r0 (arc.rar) (list\*.*)))
    45   |  (if (method 3) (cmd a -m5 -mm -r0 (arc.rar) (list\*.*)))
    46   | 
    47   | sfx:
    48   |  (cmd s (arc))
    49  
    50   | load:
    51   |  (name 777.exe)
    52   |  (type 777 777)
    53   | 
    54   | encode:
    55   |  (if (method 1) (cmd a (arc.777) (list\*) -mg))
    56   | 
    57   | decode:
    58   |  (cmd x (arc))
    59  
    60  
    61  
    62  4.構造 ------------------------------------------------------
    63  
    64   ・load:   EXE名などを書く部分
    65   ・decode: 解凍コマンドを書く部分
    66   ・encode: 圧縮コマンドを書く部分
    67   ・sfx:    書庫→SFX変換コマンドを書く部分
    68  
    69   の4セクションに分かれます。
    70  
    71  
    72  
    73  5.load: -----------------------------------------------------
    74  
    75   | load:
    76   |  (name EXE名)
    77   |  (type 圧縮形式名 圧縮レベル名1 圧縮レベル名2 ...)
    78  
    79   と書きます。圧縮を行わない時は、type の文は書かなくてOK。
    80   ※ 圧縮レベル名の頭に * を付けると、それが標準圧縮レベルになります。
    81  
    82  
    83  
    84  6.decode: ---------------------------------------------------
    85  
    86   | decode:
    87   |  (cmd 実行するコマンド)
    88  
    89   コマンド中の以下の文字列については自動で置き換えられます。
    90  
    91    (arc)        … 解凍する書庫名
    92    (dir)        … 解凍先フォルダ名
    93    (arc-.xx ln) … 書庫名から拡張子.xxを除いたもの
    94  
    95  
    96  
    97  7.encode: ---------------------------------------------------
    98  
    99   | encode:
   100   |  (if (method 1) (cmd 圧縮レベル1のときのコマンド))
   101   |  (if (method 2) (cmd 圧縮レベル2のときのコマンド))
   102   |  以下同様
   103  
   104   自動置き換えは以下の通り。
   105  
   106    (arc.xxx)  … 圧縮先書庫名(拡張子xxx)
   107    (dir)      … 圧縮したいファイルのあるフォルダ名
   108    (arc d)    … 圧縮先フォルダ名
   109    (list)     … 圧縮したいファイルのリスト
   110    (list\*)   … 圧縮したいファイルのリスト
   111    (list\*.*) … 圧縮したいファイルのリスト
   112         { ↑フォルダ名を渡すときに使うワイルドカードが違います }
   113         { それぞれ、"dir" "dir\*" "dir\*.*" という形式を使います }
   114         { どれを使えばよいやらわからなかったら、とりあえず }
   115         { (list\*) と書いておいてください。 }
   116  
   117  
   118  
   119  8.sfx: ------------------------------------------------------
   120  
   121   | sfx:
   122   |  (cmd 書庫からSFXへ変換するコマンド)
   123  
   124   自動置き換えは以下の通り。
   125  
   126    (arc)     … 元書庫名
   127    (arc.exe) … SFX書庫名
   128    (dir)     … 作業フォルダ名
   129  
   130  
   131  
   132  9.encode1: sfxd: --------------------------------------------
   133  
   134    書庫化機能がない圧縮ソフトやテキストエンコーダなど、圧縮時
   135   には一つしかファイルを受け取らないソフトがあります。このよう
   136   なソフトに対応するときは、encode: の代わりに、encode1: と
   137   書いておいてください。そうすればNoah側で適当にうまいこと処理
   138   します。
   139  
   140    書庫→SFX変換機能がなく、直接一気にSFXに圧縮するしかない
   141   ソフトもあります。そんなときには sfx: の代わりに sfxd: を
   142   使います。SFX圧縮時にはNoahは直接 sfxd: を使うようになります。
   143  
   144    encode1: も sfxd: も、自動置き換えは encode: と全く同じです。
   145  
   146  
   147  
   148  10.休憩 -------------------------------------------------------
   149  
   150    さっぱりわからないぃ〜状態の人は、実際に完成したファイルを
   151   眺めてみると、頭が整理されるかもしれません。
   152  
   153    http://b2efile.tripod.co.jp/
   154     ( yc氏のサイト。100個以上のb2eが公開されています。 )
   155  
   156    仕様書なんてこんな固いもん見てもわかるか!状態の人は、
   157   実際どんな手順で書いていけばよいか、を解説したサイトが
   158   きっと役に立つことでしょう。
   159  
   160    http://homepage3.nifty.com/scriba/manu/
   161     ( SB氏のサイトの一角。Noah付属のものよりずっと丁寧な
   162      マニュアルとなっています。 )
   163  
   164  
   165   さて、ここから下は、結構内容が濃いです。知らなくても普通に
   166   b2eを書く分には全く困らない知識ばっかりです。(^^;
   167   それでも読んでみたい奇特な人だけどうぞ……
   168  
   169  
   170  
   171  
   172  
   173  
   174  
   175  
   176  
   177  
   178  
   179  
   180  
   181  
   182  
   183  
   184  
   185  
   186  
   187  
   188  
   189  =★
   190  =★ 第二部
   191  =★
   192  
   193  
   194  
   195  11.英語モードでexeを実行する技 -------------------------------
   196  
   197   日本語版WindowsのDOS窓で動かすと、なんだか ロロロロン と出てきて
   198   格好悪かったり、最悪の場合全く動かない…というアーカイバに
   199   出会ったことはありませんか?
   200   これらは、"usモード" に切り替えてから実行すると上手く動く
   201   ことが多いです。Noahでこの切り替えを行うには、最初の name で、
   202  
   203    (name EXE名 us)
   204  
   205   と、後ろに us を付けて下さい。これで、そのb2eに書かれた(cmd)や
   206   (xcmd)の実行の際には、自動でusモードになるようになります。
   207  
   208  
   209  
   210  12.統合アーカイバDLL用スクリプト -----------------------------
   211  
   212   load: のところで (name DLL名) とすればOKですが、それだと
   213    ・ファイル内容による書庫判定
   214    ・書庫閲覧&部分解凍
   215   が出来ません。致命的です。
   216  
   217   前者を有効にするには、
   218    check:
   219   って一行どこかに書いてください。中身は要りません。
   220  
   221   後者を有効にするには、decode1: セクションを書きます。
   222   自動置き換えは decode: セクションと同じものに加え、
   223   (list) と書くとそこに解凍ファイル名リストが入るようになります。
   224   decode1: セクションでは、出来るだけグラフやエラーメッセージを
   225   抑止するようなオプションをつけて cmd して下さい。
   226  
   227   DLL名からAPI名を算出するため、大文字小文字は間違えないように。
   228   基本的には[最初一文字大、あと小]で大丈夫ですが、UnZip は Z も
   229   大文字に。UnGCA も要注意。
   230  
   231   また、元々Noahに内蔵されているルーチンはb2eより優先されるため、
   232   ただb2eファイルを追加しただけでは、例えばUnlha32.dll用の動作を
   233   置き換えることは出来ません。noah.ini ファイルに次の形式で
   234   隠し設定を記述することで、内蔵ルーチンを使わないようにできます。
   235  
   236    Kill=使いたくない内蔵ルーチン
   237  
   238     例えば Kill=LCT なら、Unlha32,Cab32,Tar32 を使用しなくなります。
   239       L … Unlha32 Z … UnZip32 z … Zip32j
   240       R … Unrar32 C … Cab32  T … Tar32
   241       B … Bga32  G … UnGCA32 A … Unarj32j
   242       a … UnaceV2 Y … Yz1   c … Cpt
   243       7 … 7-zip32 M … MS-Compress
   244  
   245  
   246  
   247  13.大量のb2eを入れると ---------------------------------------
   248  
   249   バージョン情報の表示が遅くなる環境があるそうです。
   250   そんな場合は Noah.ini ファイルに
   251    OldAbout=1
   252   と一行付け加えてください。
   253  
   254  
   255  
   256  14. As a Script Language --------------------------------------
   257  
   258    上でさんざん[自動置き換え]として (arc) とかを紹介しましたが、
   259   気分的には全然違います。( 機能名 引数1 引数2 ... ) の形の
   260   functionをひたすら組み合わせて書く、Lispのまがい物のような
   261   スクリプト言語のつもり。
   262  
   263    例 (+ 25 8)     = 33
   264      (* 3 7)     = 21
   265      (+ 11 (* 3 4)) = 23
   266  
   267   こんな感じで計算もできます。+ だったら一個目の数と二個目の数を
   268   足した結果を返す[関数]と考えられるのと同様、(arc) も、適当な
   269   オプションをとって書庫名を返す[関数]として実装しています。
   270  
   271  ====================================================
   272  ◇変数処理
   273  
   274   変数名はアルファベット一文字、a-z, A-Z の52個が使えます。
   275  
   276    例 (let a 25)
   277      (let b 10)
   278      (+ %a %b)
   279  
   280   最後の足し算の計算結果は 35 になります。
   281   letで変数に値を代入して、%変数名、で入れた値を取り出せます。
   282  
   283    例 (let d (arc d))
   284      (cmd a -d%d (list\*.*))
   285  
   286   変数には文字列も入るので、上のような使い方も可能です。
   287  
   288  ====================================================
   289  ◇使うときに注意が必要な文字
   290  
   291   送りたいコマンドや圧縮レベル名などに %"() の4種類の字を
   292   そのまま書くとバグります。
   293   それぞれ %%, %", %(, %) というように前に % を付けて下さい。
   294  
   295  ====================================================
   296  ◇全functionリファレンス
   297  
   298   ★実行制御系
   299  
   300    (exec ...)
   301  
   302  		機能:左から順に、単純に引数を実行していく
   303  		返値:最後の引数の値
   304  
   305    (if A B C)
   306  
   307  		機能:Aが真ならBを実行。Cがある場合,Aが偽ならCを実行
   308  		返値:実行した方の文(BかC)の値
   309  
   310    (while A B)
   311  
   312  		機能:Aが真である間、Bを繰り返し実行
   313  		返値:無し
   314  
   315   ★代入系
   316  
   317    (let A B)
   318  
   319  		機能:変数Aに、Bを代入。
   320  				※Aには、変数名から%を除いた文字が入る。
   321  		返値:Aに入った値
   322  
   323   ★演算系
   324  
   325    ( +  A B) … A+B
   326    ( -  A B) … A−B
   327    ( *  A B) … A×B
   328    ( /  A B) … A÷B
   329    (mod A B) … AをBで割った余り
   330  
   331    ( =  A B) … AとBが等しければ真、等しくなければ偽
   332    ( !  A B) … AとBが等しければ偽、等しくなければ真
   333    ( !  A)   … Aが偽なら、真なら偽
   334    ( <  A B) … A < B なら真、でなければ偽
   335    ( >  A B) … A > B なら真、でなければ偽
   336    (between A B C) … A <= B <= C なら真、それ以外なら偽
   337  
   338    ( +  A B) … A or B (足し算は、論理和にも使えます)
   339    ( *  A B) … A and B(掛け算は、論理積にも使えます)
   340  
   341   ★load: 系
   342  
   343  	(name A)
   344  	(type A B C D ...)
   345  
   346  		上の説明通り。
   347  
   348    (use A B C D ...)
   349  
   350      そのb2eで、nameで指定したexe以外に利用するファイルがあるなら
   351      このuseによって設定します。例えば
   352       ex)  (use sfx32gui.dat zcrypt23.dll)
   353      などと書いておくと、Noahのバージョン情報に、sfx32gui.datなどが
   354      表示されるようになります。ただし、ここに書いたからと言って
   355      実際の圧縮解凍作業に変化はありません。
   356  
   357   ★その他のセクションで使えるもの(単純)
   358  
   359  	(dir)
   360  
   361  		基準フォルダ名を「ショートファイル名・フルパス」で返します。
   362  		decode:中は解凍先、encode:中は圧縮元 sfx:中は作業ディレクトリ
   363  		をたぶん返します。
   364  
   365  	(is_folder)
   366  
   367  		ドロップされたものがフォルダ一つだったら真、でなければ偽。
   368  
   369  	(is_file)
   370  
   371  		ドロップされたものがファイル一つだったら真、でなければ偽。
   372  
   373  	(is_multiple)
   374  
   375  		ドロップされたものが複数だったら真、でなければ偽。
   376  
   377  	(cd A)
   378  
   379  		カレントディレクトリをAに設定します。
   380  
   381  	(method A)
   382  
   383  		encode: encode1: sfxd: の時のみ意味があります。
   384  		単に (method) と書くと、ユーザーが指定した圧縮レベルを返します。
   385  		(method 1) などと書くと、指定したレベルが 1 かどうかの真偽を返します。
   386  
   387  	(size A)
   388  
   389  		ファイルAのサイズをバイト単位で返します。
   390  
   391    (slash A)
   392  
   393      文字列Aの中の \ を / に置き換えた文字列を返します。
   394      Unix系のコマンドで \ をディレクトリと認識してくれないもの向けに。
   395  
   396    (find A)
   397  
   398      名前がAのファイルをPATHの通ったディレクトリから探し、
   399      見つかったらフルパス、見つからなければ偽を返します。
   400       ex)  (if (find notepad.exe) (....))
   401      notepad.exeがある時だけ何か実行。
   402       ex)  (let s (find stubwin.sfx)) (cmd s %s (arc))
   403      stubwin.sfxをシステムフォルダなどから探してきてsにそのフルパスを入れる。
   404  
   405  	(cmd ARG1 ARG2 ARG3 ...)
   406  
   407  		(name)で指定した実行ファイルへコマンドを送ります。
   408  		上では(arc)は自動置き換え…とか書きましたが、
   409  		functionを使っているので当然の如く
   410  			(cmd ##(arc)##)
   411  		とかやっても ##c:\windows\install.cab## というコマンドが送られたりはしません。
   412  		つまり、スペースで離された一パラメータの場合しか置き換えは効かないわけです。
   413  		そうでない置き換えをしたいときには、(let) で一旦変数に代入してから
   414  		変数名を埋め込めばOKです。
   415      (cmd)命令自体の値は、実行の終了コードとなります。
   416       ex) (if (! 0 (cmd ...)) エラー処理)
   417      xcmdについても同様。
   418  
   419  	(xcmd A ARG1 ARG2 ...)
   420  
   421  		外部コマンド呼び出し。
   422  		最初に実行ファイル名を書いて、以降のパラメータでコマンドを書きます。
   423  		(xcmd del A) とか (xcmd copy B C) など、DOSの内部コマンドの起動も可能。
   424  
   425   ★その他のセクションで使えるもの(複雑)
   426  
   427  	(input MESSAGE DEFAULT)
   428  
   429  		ユーザーに文字列を入力させるときに使います。入力を促すメッセージを
   430  		第一引数に、デフォルトの入力値を第二引数に書いて下さい(省略可能)。
   431  		入力された文字列が値として返されます。
   432  			(let p (input "パスワードを入れてね"))
   433  			(cmd x -p%p (arc))
   434  		とかそんな感じに利用。
   435  
   436  	(arc[+-].ext [slfnd])
   437  
   438  		書庫名指定。Noah は内部変数として、
   439  		 ・書庫のあるフォルダ名  <-- 書庫の存在するDir(解SFX) or 出力先Dir(圧)
   440  		 ・書庫名(LongFileName)  <-- 書庫名(解SFX) or dropした一個目のファイル名(圧)
   441  		 ・書庫名(ShortFileName) <-- 書庫名(解SFX) or dropした一個目のファイル名(圧)
   442  		を持っています。
   443  
   444  		まず右の[slfnd]は置いといて左の部分を解説。
   445  
   446  		 (arc        … 書庫名をそのままストレートに
   447  		 (arc.       … 書庫名から拡張子を全て除いたもの
   448  		 (arc.lzh    … 書庫名から拡張子を全て除いて、.lzh につけかえたもの
   449  		 (arc+.lzh   … 書庫名の拡張子は取らず、後ろに .lzh をくっつけたもの
   450  		 (arc-.szip  … szipという拡張子だったらそれをとりのぞいたもの、
   451  		         # そうでなかったら、後ろに .decompressed をくっつけたもの
   452  
   453  		それぞれ
   454  		 ===解凍・SFX変換時の書庫名指定
   455  		 ===CPShrink対策 (--;)
   456  		 ===圧縮時の普通の書庫名指定
   457  		 ===aaa.txt を圧縮するとき書庫名を aaa.txt.gz にしたいとき便利
   458  		 ===aaa.txt.gz を解凍するとき名前を aaa.txt に戻したいとき便利
   459  		です。
   460  
   461  		次、[slfnd] の解説。1番目のパラメータにこれらの文字があると、
   462  		 s … 書庫名にはShortFileNameを使う
   463  		 l … 書庫名にはLongFileNameを使う
   464  		 f … 書庫名はディレクトリ+名前(FullPath)で。
   465  		 n … 書庫名は名前(NameOnly)で。
   466  		 d … 書庫名はディレクトリ(Direcotry)で。
   467  		という指定になります。
   468  
   469  		 s === 短いファイル名しか通さないアーカイバに便利。
   470  		 d === 書庫名を直接指定できないで、出力先しか指定できないものに便利。
   471  
   472  		デフォルトオプション(  単に (arc) と書いたときのオプション )は、
   473  		 decode: lf
   474  		 encode: lf
   475  		 sfx:    ln
   476  
   477  		例題。書庫名が "c:\programs\あいうえお.lzh" の場合、
   478  
   479  		 1) (arc d)
   480  		 2) (arc-.lzh sn)
   481  		 3) (arc.cab lf)
   482  		 4) (arc+.txt ln)
   483  
   484  		はそれぞれどうなるでしょう?
   485  
   486  	(list[r|\*|\*.*] [slfn])
   487  
   488  		圧縮時に、ファイル名リストを返します。
   489  		slfn は (arc) と同じ。デフォルトは ln。
   490  		\* 等については、ディレクトリ名を渡すときの渡し方指定になります。
   491  		例えば (listr) コマンドを使うと、ディレクトリをワイルドカードで
   492  		渡さずにNoahが自力で展開してからexeに渡せます。
   493  
   494  		例題。"c:\file\" の中の "かきくけこ.txt" "abcde.bmp" "xxx"(ディレクトリ) を渡す場合、
   495  
   496  		 5) (list)
   497  		 6) (list\* s)
   498  		 7) (list\*.* lf)
   499  		 8) (list sf)
   500  
   501  		はそれぞれどうなるでしょう?
   502  
   503  	(resp A)
   504  	(resq A)
   505  
   506  		引数の内容を改行で区切ってテンポラリファイルに出力し、そのテンポラリ
   507  		ファイルのファイル名を返します。respは、引数A内の二重引用符を消しません。
   508  		resqは、変数A内の二重引用符を消去します。
   509  		(resp@ A) とすると "@tempfilename"、(resp-o A) とすると "-otempfilename"
   510  		のような返し方も可能です。
   511  
   512  		言ってしまえば、
   513  			(cmd -a -mz (arc.cab) (resp@ (listr)))
   514  		という使い方を想定しています。
   515  
   516  
   517  
   518  15.例題の答え -------------------------------------------------
   519  
   520  	1) c:\programs\
   521  	2) あいう~1
   522  	3) c:\programs\あいうえお.cab
   523  	4) あいうえお.lzh.txt
   524  	5) かきくけこ.txt abcde.bmp xxx
   525  	6) かきく~1.txt abcde.bmp xxx\*
   526  	7) c:\file\かきくけこ.txt c:\file\abcde.bmp c:\file\xxx\*.*
   527  	8) c:\file\かきく~1.txt c:\file\abcde.bmp c:\file\xxx
   528  
   529  
   530  
   531  
   532  
   533  
   534  
   535  
   536  
   537  
   538  =★
   539  =★ 第三部
   540  =★
   541  
   542  16.list:セクション、(scan) -----------------------------------
   543  
   544   前述の decode1: セクションと、今から説明する list: セクションを
   545   追加することで、外部exeを利用するタイプのb2eでも書庫内容閲覧を
   546   行えるようになります。万能ではありません。うまく行けば儲けモノ。(^^;
   547  
   548   list: セクションでは普通、次のfunctionを使って格納ファイル名の
   549   リストを手に入れます。
   550  
   551    (scan A B C D E command...)
   552  
   553   まず command... というコマンドを実行し、その出力を解析します。
   554   つまり、command... にはリスト表示コマンドを書くことになります。
   555  
   556   解析オプション A,B,C,D,E は次のような意味です。
   557  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   558   Aで始まる行の B行後ろから Cで始まる行の直前まで D行ずつ読み、
   559   先頭E文字飛ばしてファイル名として読み込み。
   560  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   561  
   562   具体例を見て行きましょう。
   563  
   564  
   565  
   566  
   567  例1)7za.exe の出力結果 ++++++++++++++++++++++++++++++++++++++++++++++++++++
   568  
   569  7-Zip (A) 2.30 Beta 10  Copyright (c) 1999-2002 Igor Pavlov  2002-01-11
   570  
   571  Listing archive: b2e.7z
   572  
   573     Date      Time    Attr         Size   Compressed  Name
   574  ------------------- ----- ------------ ------------  ------------
   575  2002-01-19 00:20:48 ....A          459       103732  b2e\7z.b2e
   576  2002-01-19 11:39:38 ....A          212            0  b2e\bh.b2e
   577  2002-01-19 00:37:34 ....A          193            0  b2e\bix.b2e
   578  2002-01-19 12:04:52 ....A          200            0  b2e\j.b2e
   579  2002-01-19 00:19:46 ....A          215            0  b2e\rk.b2e
   580  2002-01-19 12:04:32 ....A          231            0  b2e\sbc.b2e
   581  2002-01-19 00:54:16 ....A          199            0  b2e\uha.b2e
   582  2002-01-19 12:10:44 ....A       426044            0  Noah.exe
   583  ------------------- ----- ------------ ------------  ------------
   584                                  427753       103732  8 files
   585  
   586  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   587  
   588  "---"で始まる行の1行後ろから、"---"で始まる行の直前まで1行ずつ読み、
   589  先頭53文字飛ばして、残りがファイル名となっています。従って、b2eの書き方は
   590  
   591  list:
   592   (scan "---" 1 "---" 1 53 l (arc))
   593  
   594  となります。
   595  
   596  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   597  
   598  
   599  
   600  例2)imp.exe の出力結果 ++++++++++++++++++++++++++++++++++++++++++++++++++++
   601  
   602  IMP 1.12  High-Performance Archiver.  Copyright 1998-2000 Technelysium Pty Ltd.
   603  
   604  Name/Comment
   605     Size           Created              Modified       Attr   OS     Unit
   606  ----------  -------------------  -------------------  ----- ----- ---------
   607  b2e\j.b2e
   608         196  Jan 19 2002 12:22am  Jan 19 2002 12:12pm  A.... Win32         1
   609  b2e\uha.b2e
   610         199  Jan 19 2002 12:38am  Jan 19 2002 12:54am  A.... Win32         1
   611  b2e\bix.b2e
   612         195  Jan 19 2002 12:34am  Jan 19 2002 12:12pm  A.... Win32         1
   613  b2e\bh.b2e
   614         214  Jan 19 2002 12:58am  Jan 19 2002 12:13pm  A.... Win32         1
   615  b2e\7z.b2e
   616         461  Jan 18 2002 06:11pm  Jan 19 2002 12:12pm  A.... Win32         1
   617  b2e\sbc.b2e
   618         233  Jan 19 2002 11:52am  Jan 19 2002 12:14pm  A.... Win32         1
   619  b2e\rk.b2e
   620         217  Nov 26 2001 09:52am  Jan 19 2002 12:13pm  A.... Win32         1
   621  b2e\imp.b2e
   622         235  Jan 19 2002 12:21pm  Jan 19 2002 12:24pm  A.... Win32         1
   623  Noah.exe
   624      426044  Nov 25 2001 10:08pm  Jan 19 2002 12:19pm  A.... Win32         1
   625  
   626  Total: 427994 bytes in 9 files
   627  Compressed size: 104730 bytes (24% of original)
   628  Newest file modified Jan 19 2002 12:24pm
   629  
   630  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   631  
   632  "---"で始まる行の1行後ろから、空行の直前まで2行ずつ読み、
   633  先頭0文字飛ばしたところがファイル名となっています。従って、b2eの書き方は
   634  
   635  list:
   636   (scan "---" 1 "" 2 0 v (arc))
   637  
   638  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   639  
   640  
   641  
   642  Eは「先頭E文字飛ばして」の意味と書きましたが、これでは不十分な場合があります。
   643  ファイル名が右揃えになっていて、左端が一定ではない場合など。このようなときには、
   644  「頭から○番目の固まり」という形で指定したくなります。
   645  
   646  
   647  
   648  例3)sbc.exe の出力結果 ++++++++++++++++++++++++++++++++++++++++++++++++++++
   649  
   650  トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト
   651  ョョ SBC v0.910 beta  Copyright (c) 2000-2001 Sami J. M・inen (sjm@pp.inet.fi) ッッ
   652  UNREGISTERED VERSION!   Evaluate 30 days, then please register!   See the docs!
   653  トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトト
   654  Listing archive: "b2e.SBC"...
   655                               Filename        Size     Date       Time    Attr.
   656                               --------        ----     ----       ----    -----
   657                              b2e/j.b2e         199  01/19/2002  00:33:16  A
   658                            b2e/uha.b2e         199  01/19/2002  00:54:16  A
   659                            b2e/bix.b2e         193  01/19/2002  00:37:34  A
   660                             b2e/7z.b2e         459  01/19/2002  00:20:48  A
   661                             b2e/rk.b2e         215  01/19/2002  00:19:46  A
   662                             b2e/bh.b2e         212  01/19/2002  11:39:38  A
   663                            b2e/sbc.b2e         210  01/19/2002  11:59:50  A
   664                               Noah.ilk      807600  01/19/2002  00:17:50  A
   665                            UNACEV2.DLL       75264  12/27/2001  02:00:00  A
   666                               Noah.exe      426044  01/19/2002  00:17:52  A
   667  
   668  Archive contains 10 files, 1310595 bytes of original data.
   669  
   670  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   671  
   672  "                             --------"で始まる行の1行後ろから、空行の直前まで
   673  1行ずつ読み、先頭から1つ目の固まりがファイル名です。というわけで
   674  
   675  list:
   676   (scan "                             --------" 1 "" 1 -1 l (arc))
   677  
   678  となります。ブロック単位で指定したいときは、マイナスをつけて指定します。
   679  
   680  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   681  
   682  
   683  (scan A B C D E command...)
   684     Aで始まる行の B行後ろから Cで始まる行の直前まで D行ずつ読み、
   685     先頭E文字飛ばしてファイル名として読み込み。
   686  
   687   特別な仕様。
   688    Aを "" にした場合、「先頭からB行目」から読むようになります。
   689    「""で始まる行のB行後ろから」ではなくて。
   690  
   691    Cを "" にした場合、「空行の直前まで」になります。
   692    「""で始まる行(どんな行にも当てはまってしまう)まで」ではなくて。
   693  
   694  (xscan A B C D E command...)
   695     Aで始まる行の B行後ろから Cで始まる行の直前まで D行ずつ読み、
   696     先頭E文字飛ばしてファイル名として読み込み。
   697     command... の一個目に、外部実行ファイルを指定します。