 ------------------------------------------------------------------------------
	unzzip.dll		Version 1.5+1	Copyright (c)2011-2026 TORO
 ------------------------------------------------------------------------------

	zlib を使った zip 書庫の展開ライブラリです。
	OpenArchive API のサブセットの API を用意しており、一般的な zip
	書庫の一覧取得や展開を行うことができます。
	また、x86(32bit版) / x64(64bit版) / ARM64 版があります。

	※ 一般的な zip 書庫は本 DLL で展開し、その他の zip 書庫は別の
	   DLL で展開することが可能な拙作 PPx 向けに作成した DLL であり、
	   前記運用を目的としているため、他の zip 書庫用 OpenArchive API
	   DLL よりも、対応する zip 書庫が少なくなっています。詳細は次の
	   仕様を参照してください。


## 動作環境と対応するファイル

	unzzip を使用するアプリに合わせて対応する dll を使用してください。
	・Windows Vista / Server 2008 以降 x86(32bit版)  unzzip32.dll
	・Windows Vista / Server 2008 以降 x64(64bit版)  unzzip64.dll
	・Windows 10 以降 ARM64                          unzzip64a.dll
	  ※ unzzip64a.dll を unzzip64.dll に名前変更して使用してください。
	・Windows XP / Server 2003 以降 x86              unzzip32xp.dll
	  ※ unzzip32xp.dll を unzzip32.dll に名前変更して使用してください。


## 仕様

	・Windows 95/98/Me, NT, 2000 では動作しません。

	・無圧縮、Deflate、Deflate64 形式に対応しています。
	  上記以外の形式(PPMd, BZip2, LZMA など)は対応していません。

	・パスワード保護は、ZipCrypt, AES (128, 192, 256)に対応しています。
	  但し、Windows XP, Server 2003 は、AES 暗号の展開ができません。
	  上記以外の形式は対応していません。

	・UTF-8 形式ファイル名(utf flag、Info-ZIP unicode path)の書庫に
	  対応しています。また、utf flag が設定されていなくても、UTF-8 と
	  して扱えるファイル名であれば、UTF-8 として処理します。

	・ファイルとディレクトリの展開のみ対応しています。
	  シンボリックリンクなどの展開は対応していません。

	・分割書庫に対応していません。

	・セキュリティ属性等の特別な属性に対応していません。

	・同名ファイルが展開先にあるときは、書き込み日付が新しいときのみ
	  上書きする指定が規定値になっています。

	・unzzip は、タスクバーのアイコンで経過表示を行うため、
	  経過ウィンドウの表示はありません。
	  また、アイコンを開こうとすると中止操作ができます。

	・ARM64版は unzzip64A.dll を unzzip64.dllに名前変更して使ってください。

	・ディレクトリトラバース等の意図しない展開先指定の対策として、
	  ファイル名中の特定の文字を「#」に置換します。また、ファイル名末尾
	  （通常は拡張子の末尾）の１文字も「#」に置換して、誤って実行させ
	  ないようにします。
	  この動作を無効にする場合は、-: を指定します。
	  1) ファイル名中の「:」(ドライブ名、ストリーム指定)
	  2) ディレクトリエントリ末尾の「..」(親ディレクトリ指定、末尾ピリオド)
	  3) ファイル名先頭の「\」「/」（ルート指定）
	  4) 制御文字(改行、タブ、BS、ESCなど)

	・zip 内ファイルのパス長と、展開先として指定可能なパス長は、
	  それぞれ 511 文字までです。
	  ※ 文字数は、Shift-JIS や UTF-8 等のマルチバイト文字コードに
	     よるバイト換算です。

	・展開時の crc チェックは -t による指定が無い限り行いません。

	・全数展開時、一定条件を満たしたときはマルチスレッド動作になり、
	  同時に 2 以上のファイルを展開します。-R で変更可能です。
	  また、SSD 等のシークが不要のデバイスの場合は、スレッド数が
	  増加します。デバイスの種類が検出できないとき、ボリューム名に
	  "ssd", "SSD", "ram", "RAM" が含まれていると SSD 扱いになります。
	  自動で選択されるスレッド数は最大 4 までになっています。

	・ファイル操作用のバッファとして 2Mbytes * スレッド数分のメモリを
	  使用します。


## コマンドライン版 unzzip.exe

	コマンドライン版 unzzip.exe は、UnZzip を直接実行します。
	・Windows Vista / Server 2008 以降 x64(64bit版) 用です。


## API

	以下のAPIが用意されています。

	UnZzipGetVersion        Version 0.1 なら、10 を返します。
	UnZzipGetRunning
	UnZzipCheckArchive
	UnZzipQueryFunctionList
	UnZzipOpenArchive
	UnZzipCloseArchive
	UnZzipFindFirst         WildName に正規表現は指定できません。
	UnZzipFindNext
	UnZzipGetOriginalSize
	UnZzipGetWriteTimeEx
	UnZzipGetCreateTimeEx
	UnZzipGetAccessTimeEx
	UnZzipGetOriginalSizeEx
	UnZzipSetUnicodeMode
	UnZzip                  コマンドラインの書式は次項を参照してください。


## UnZzip コマンドライン

	UnZzip は書庫ファイルの展開を行います。
	UnZzip コマンドラインは、unzip32.dll, Info-ZIP の UnZip に近い
	記載方法を用いています。

	[オプション] 書庫ファイル名 [展開先] [展開対象]

	オプション:
	-B  バックアップ：既存のファイルを filename~1.ext と
	   ファイル名の末尾に「~」と数値を付加します。
	   ※ Info-UnZip は filename.ext~1 になります。

	-c  ログにファイルを展開します(ファイルのみログ出力)。

	-d path  展開先を指定します。指定したときは、[展開先] を解釈しません。

	--debug  デバッグ用の経過ログを出力します。

	-f  アップデート：新規作成しません。
	   書庫側が新しいときのみ上書きします。。

	-i  Windows 7 以降でタスクバー上の経過表示をします(規定値)。

	--i  タスクバー上の経過表示をなくします。

	-j  階層指定があっても無視します。

	-l  書庫内ファイルの一覧表示を行います。

	-lj  書庫内ファイルの一覧表示を行います(JSON形式)。

	-lv  書庫内ファイルの一覧表示を行います。

	-n  スキップ：既存ファイルがあれば展開しません。

	-o  上書き：常に既存ファイルを上書きします。

	-p  ログにファイルを展開します(他のログも残る)

	-P password  パスワードを指定します。不一致の時は、
	   ダイアログで再入力可能です。

	-q  経過ログの出力種類を減らします。エラーログ出力のみにします。
	   ※通常は、エラー、スキップ等のログ出力を行い、
	     展開ファイル名のログ出力を行いません。

	-qq  経過ログの出力を無くします。エラーログも無くなります。

	--q  経過ログの出力種類を増やします。
	   エラー、スキップ等のログ出力に加えて、
	   展開ファイル名のログ出力を行います。

	-qr0  正規表現・ワイルドカードの解釈を無効にします。
	   *, *.* 以外の表記の解釈を行いません。

	-qr1  正規表現・ワイルドカードの解釈を有効にします。
	   unzzip 自体は正規表現等を使えませんが、unzip32/
	   Info-Unzip の正規表現を想定した表記を適切に無視
	   するようになります。

	-R n  展開時の最大スレッド数を指定します。
	   0 のときは、シングルスレッドで、展開と経過表示を
	   同じスレッドで行います。
	   1 以上のときは、展開用に指定した数のスレッドと、
	   経過表示用のスレッド(呼び出し時のスレッドを使用)を使用します。
	   指定可能な範囲は 0-8 です。

	-Q  既存ファイルがあるときは、選択ダイアログを表示します。

	-t  書庫の crc テストを行います。
	    展開時に指定した場合は、展開ファイルの crc テストを行います。

	-u  新規(規定値)：書庫側が新しいときのみ上書きします。

	-v  書庫内ファイルの一覧表示を行います。

	-x  ファイルを展開します(規定値)。

	-Z  書庫内ファイルの一覧表示を行います。

	--Z=type  コマンドラインオプションの意味や、動作挙動を指定します。
	   指定した後の挙動が変わるため、先頭に記載することをお奨めします。

		--Z=z  unzzip 既定設定
		  -qr0 が規定値、-x は展開、
		  -l, -lv, -v は Info-UnZip 風

		--Z=Z  unzzip 設定
		  -qr0 が規定値、-x は未定義、
		  -l, -lv, -v は Info-UnZip 風

		--Z=u  unzip32.dll 風設定
		  -qr1 が規定値、-x は展開、
		  -l, -lv, -v は unzip32.dll 風

		--Z=i  Info-UnZip 風設定
		  -qr1 が規定値、-x は未定義、
		  -l, -lv, -v は Info-UnZip 風

	--ZoneID  Mark of the Web の伝播を有効にします。
	   zip ファイルに ADS の :Zone.Identifier が設定されている場合、
	   その内容を展開ファイルの :Zone.Identifier に反映させます。
	   ※ :Zone.Identifier の反映はコピーではなく、加工されます。

	--long-path[=y|n|c]  パスが 260 文字以上となる場所に
	   ファイルを展開するかどうかの指定です。

	   260 文字(MAX_PATH)以上のパスは、標準では
	   扱えないため、アプリによっては開けなかったり、
	   異常終了したりする恐れがあります。
	   この指定がない場合、若しくは c 指定のとき、260 文字以上になる
	   場所に展開しようとすると確認ダイアログが表示されます。

	-:  ディレクトリトラバース対策を無効にします。

	書庫ファイル名:
	  展開する zip 書庫のファイル名です。
	  自己展開型もある程度対応しています。

	展開先:
	  展開先のディレクトリです。

	展開対象:
	  展開する書庫内のファイルです。

	  全数展開なら * 又は *.* を指定します。
	  他の正規表現・ワイルドカードは対応していません。

	  １ファイルなら、そのファイル名を指定します。

	  複数ファイルなら、レスポンスファイルを使用します。
	  １行に１ファイル名を記載したファイルを用意し、
	  @ファイル名 と指定します。


## unzip32.dll 互換 API

	unzzip32.dll を unzip32.dll に名前変更することで、unzip32.dll を
	使用するアプリケーションで使用することができます。

	次の注意点があります。
	・コマンドラインが unzip32 風(--Z=u)になります。
	・正規表現・ワイルドカードに対応していません。展開対象として *, *.* を
	  指定して全数展開することは可能ですが、正規表現・ワイルドカードと
	  して認識していません。
	・対応 API は前記各 API に対応する UnZip～ API と、UnZipGetFileCount, 
	  UnZipExtractMem になります。それ以外の API は指定が無視されたり
	  します。


## 設定例

	拙作 Paper Plane xUI に登録する場合、次のように登録します。
	※他の zip 用 DLL より前に記載すると優先使用されます。

P_arc	= {
UNZZIP64.DLL	= B00000010,7,UnZzip
	i=.zip
	a=-x > "%1" "%!2%\" *
	e=-x -j > "%1" "%!2%\" %@
	s=-x -j > "%1" "%2" "%C"
UNZZIP32.DLL	= B00000001,7,UnZzip
	i=.zip
	a=-x > "%1" "%!2%\" *
	e=-x -j > "%1" "%!2%\" %@
	s=-x -j > "%1" "%2" "%C"
}


## 最後に

	・zlib 1.3.1 (c)Jean-loup Gailly and Mark Adler  https://zlib.net/
	  を使用しています。

	・このソフトウェアはフリーソフトウェアです。zlib 由来のコード
	  を除く部分の著作権は「TORO」、「高橋 良和」にあります。

	・このソフトウェアのライセンスは、zlib License に準じます。

	・unzzip32xp.dll は、Visual Studio 2008 を用いて構築しています。
	  その他の版は、Visual Studio 2022 を用いて構築しています。
	  unzzip のソースを展開したディレクトリに zlib-1.3.1 の
	  ソースを展開した状態で構築しています。


## 履歴
Version 1.5+1	2026/04/11
・展開完了後に異常終了することがあるのを修正

Version 1.5	2026/03/20
・全数展開時のマルチスレッド展開に対応
・既存ファイルがあるときの処理指定ダイアログを追加
・unzip32.dll 互換 API を用意 (unzip32.dll に名前変更して使用可能)
・Info-ZIP Unicode Path に対応
・260 文字以上のパスに対応
・260 文字以上のパスへの展開を許可する指定を追加(--long-path)
・Mark of the Web の伝播(--ZoneID)を追加
・書庫のテスト／展開時の crc テスト(-t)を追加
・AES 暗号化ファイル(128, 192, 256 bits)の展開に対応(Windows Vista 以降)
・書庫内ファイルの一覧表示(-l -lv -lj -v -Z)を追加
・既存ファイルのバックアップ(-B)を追加
・経過表示が表示されないことがあるのを修正

Version 1.4	2025/05/03
・ファイル作成時のエラーを返さない時があったのを修正
・各種ダイアログに操作中の書庫名を表示するようにした

Version 1.3	2024/02/24
・zlib 1.3.1 を使用
・Deflate64 に対応
・ARM64 版を作成 (unzzip64A.dll を unzzip64.dll に名前変更する必要あり)

Version 1.2	2021/08/14
・経過表示のフォーカス制御を調整

Version 1.1	2019/12/30
・1.0でパスワード入力ダイアログが表示されないのを修正

Version 1.0	2019/07/28
・zip64の処理が誤っていたのを修正

Version 0.9	2017/07/08
・zlib 1.2.11を使用
・作成日時、アクセス日時を参照できるようにした
・UnZzipGetWriteTimeEx,UnZzipGetCreateTimeEx,UnZzipGetAccessTimeExを追加
・UnZzipQueryFunctionListを追加
・パスワード入力ダイアログのフォント種類・サイズをWindowsから取得するようにした

Version 0.8	2016/05/14
・zlib 1.2.8を使用
・空フォルダの展開漏れがあったのを修正
・完全に展開されないファイルがあったのを修正

Version 0.7	2013/10/06
・Windows7のタスクバーを使った経過表示を追加

Version 0.6	2013/02/22
・パスワード入力ダイアログでキャンセルが正常に機能しないのを修正した
・階層付きUTF-8文字列を正しく認識できないのを修正した
・自己展開zipファイルに対応

Version 0.5	2012/09/29
・zlib 1.2.7を使用
・UnZzipでログを使用するようにした
・UnZzipGetRunning,UnZzipGetOriginalSize,UnZzipGetOriginalSizeExを追加
・Zip64と暗号化に対応

Version 0.4	2011/11/13
・UNICODEモード時の動作を調整した

Version 0.3	2011/09/16
・ディレクトリ指定付きファイルの展開ができないことがあるのを修正

Version 0.2	2011/09/12
・展開ファイルを複数指定しても１ファイルのみしか展開しないのを修正

Version 0.1	2011/09/10
・初版


## 連絡先／一次配布先						TORO／高橋 良和

E-mail	toroid.jp@gmail.com
WWW	https://toro.d.dooo.jp/	https://toroidj.github.io/
