テキストエディタ SakuraEditor 専用拡張子連動設定ソフト  SAKUEXT.EXE
    << HSP 2.55 + ANTARES' HSP Compiler 1.10 にてコンパイルされています >>

このソフトウェアが原因で何らかのトラブルが発生しても作者は一切責任を負い
ません。それが納得できない場合は本ソフトウェアは使用なさらず、即刻、削除
願います。

◎ 概要
	本ソフトウェアは、テキストエディタ Sakura.Editor 専用の拡張子連動設定
	ソフトです。コンセプトは

	(1)例えば拡張子 .html に対して関連付けを実施した場合、
	   ・htmlファイルをマウスダブルクリックで起動するとブラウザで開く。
	   ・htmlファイルをマウス右クリック → [エディタ]を選択するとエディタで
	   　開く。
	   という具合に、既存の他のアプリケーションの設定を極力壊さず、既存の
	   設定の中に溶け込むように関連付けられる。

	(2)関連付け解除時には、極力、元通り、設定する前の状態に戻す。

	なお、作者の元には Windows 95 以外の環境が無いため、Windows 95 以外での
	動作試験を一切おこなっておりません。
	# この辺が最も要注意だったりします。 (;^^Ａ


◎ インストール
	Sakura Editor の本体である sakura.exe と同じフォルダにソフトウェア本体
	（ SakuEXT.exeというファイル１個のみ）以下のファイルを
	コピーしてください。その後、SakuEXT.exe を起動すれば動作します。

◎ アンインストール
	インストール時にコピーしたファイルを削除するだけです。
	「このソフトウェア自身の情報」はレジストリに書き込まれたりはしません。

	# もちろん、関連付け作業はレジストリ弄りなわけですが、その辺の事は無視
	# するとしてね。 (^^;


◎ 基本動作
	SakuEXT.exe を起動すると、SakuEXT.exe と同じフォルダにある sakura.iniを
	読み込みます。
	同じフォルダに sakura.ini が無い場合、同じフォルダにある sakura.exe を
	-NOWIN オプション付きで実行し、sakura.ini を作成させます。

	sakura.exe が無かった場合、または sakura.exe が実行された後、最大30秒待
	っても sakura.ini が作成されなかった場合、エラーメッセージを出して終了
	します。

	sakura.ini の中からタイプ別設定の“設定名称”と“カンマ区切りの拡張子の
	リスト”を取得します。その一覧情報をコンボボックスに表示します。

	コンボボックスで何か他のタイプが選択されると、そのタイプの拡張子に関す
	る拡張子連動の状況をレジストリから取得し、チェックボックスの on/off で
	示します。

	チェックボックスのチェックを付けたり外したりすると、それに応じてレジス
	トリ値を変更して、それらの拡張子に対して sakura.exe を関連付けしたり、
	逆に sakura.exe に関する情報を削除したりします。

	動作の特徴としては、
	・チェックを on にする時、
	　│
	　├既存の拡張子連動設定が既にある場合、その右クリックした時のメニュー
	　│の中に sakura.exe の項目を追加する。ファイルの種類の情報も
	　│sakura.exe 内で設定されている名称に修正する。
	　│
	　└既存の拡張子連動設定がなければ、関連付け情報を全て新規に作成・設定
	　　する。
	
	・「右クリックのメニューに登録するだけ」か、「標準に設定してしまう
	　（ファイルをマウスでダブルクリックした時に実行されるようにする）」か
	　を選択出来ます。
	
	・チェックを off にする時は、↑上記で追加した情報を全て削除し、変更した
	　物を全て元に戻す。


◎ コマンドラインから実行
	SakuEXT.exe 実行時にコマンドラインにオプションパラメータを付けて実行す
	る事により、任意アプリケーションの設定を行う事が可能です。

	なお、実際のコマンドラインはかなりの長さになってしまう事が多いため、
	MS-DOSプロンプト内で直接キー入力して実行するのは無理な事があります。
	（MS-DOSプロンプトで受け付ける文字列長さの限界がかなり少ないため）
	そのような場合はバッチファイルを作成し、その中にコマンドラインを記述し
	て、そのバッチを実行するようにします。
	（Win95系のMS-DOSプロンプト内ではバッチファイルの1行の文字列長さの限界
	　がかなり緩いので）

	オプションパラメータの説明
	　・/a /e /r オプションは常に全て指示しなくてはなりません。
	　・/m /n オプションは /aA 処理の時のみ有効ですが、指定しなくても構いま
	　　せん。
	　・各オプションパラメータの文字は英大小文字を区別しません。
	　・各オプションパラメータとその後の文字列との間は半角スペース文字があ
	　　っても無くても構いません。
	　・オプションパラメータの後の文字列をアプリケーション実行時のコマンド
	　　ライン文字列とみなします。
	　・コマンドライン文字列中の % １文字は、全て %% と２文字で指示しなくて
	　　はならない点が要注意です。

	★ /d：デバッグモード
	       オプションパラメータの指示内容をダイアログに表示する。
	       指示内容を表示するだけで設定の変更を一切おこなわない。
	       オプションパラメータの与え方が合っているかどうかを確認するために
	       使用すると便利です。

	★ /a：後に続く文字列で、何の処理を実行するかを指示する。(指示必須)

	  /aA 指定アプリケーションをメニューに追加する。
	      Aの後ろに 1 を付加(/aA1)すると、メニューに追加した上で、それを
	      標準（ダブルクリックで実行する）に設定する。
	      （メニューに追加後、/aD1 を実行する事と同じ）

	  /aR 指定アプリケーションをメニューから削除する。

	  /aD 指定アプリケーションを標準に設定する／標準設定を解除する。
	      Dの後ろに 1 を付加(/aD1)すると、指定アプリケーションを標準（ダブ
	      ルクリックで実行する）に設定する。
	      Dの後ろに 0 を付加する(/aD0)すると、指定アプリケーションの標準設
	      定を解除する。（/aD1で標準に設定する前の環境に戻す。）

	★ /e：処理対象の拡張子を指定する。(指示必須)
	       カンマで区切る事で複数の拡張子を一度に指示する事が可能。
	       拡張子にはピリオド（小数点文字）は付けないように！！

	       "/e html,htm,asp" という指示で .html .htm .asp の３種類に対して
	       処理される。

	★ /r：アプリケーション登録時のレジストリキー名称を指定する。(指示必須)
	       "/r SakuraEditor" という指示で、SakuraEditor という名前でレジス
	       トリ内に登録する。

	★ /m：右クリックメニューに表示する文字列を指定する。
	       /aA 処理時のみ有効。（他の処理時は指定しても無視される。）
	       省略時は何も書き込まれない。

	★ /n：ファイルの種類を指示する。
	       ファイルのプロパティ表示時の「種類」に表示される名称
	       /aA 処理時のみ有効。（他の処理時は指定しても無視される。）
	       省略時は何も変更されない。

	● 実行例１
	   SakuEXT /aa /e lzh,zip,arj,cab /rLHMelting "C:\Program Files\LHMELT\
	   LHMELT.EXE" "%%1"
	
	   処理内容
	   lzh,zip,arj,cab の４種類の拡張子に対して、      {/e lzh,zip,arj,cab}
	   LHMelting というレジストリキー名で、            {/rLHMelting}
	   "C:\Program Files\LHMELT\LHMELT.EXE" "%1" というコマンドラインの
	   アプリケーションを、                    {末尾のコマンドライン文字列}
	   メニューに追加する。                            {/aa}
	
	● 実行例２
	   SakuEXT  /aa1 /e lzh,zip,arj,cab /rLHMelting /M"&LHMelting" /n書庫
	    "C:\Program Files\LHMELT\LHMELT.EXE" "%%1"
	
	   処理内容
	   lzh,zip,arj,cab の４種類の拡張子に対して、      {/e lzh,zip,arj,cab}
	   LHMelting というレジストリキー名で、            {/rLHMelting}
	   "C:\Program Files\LHMELT\LHMELT.EXE" "%1" というコマンドラインのアプ
	   リケーションを、                        {末尾のコマンドライン文字列}
	   メニューに追加し、さらにこれを標準（ダブルクリックで実行される）に設
	   定する。                                                    {/aa1}
	   
	   これら４種類のファイルの種類の名前は“書庫”に設定する。    {/n書庫}
	   
	   右クリックメニューに表示される文字列は“&LHMelting”に設定する。
	                                                       {/M"&LHMelting"}

	● 実行例３
	   SakuEXT  /ad0 /e lzh,zip,arj,cab /rLHMelting

	   処理内容
	   lzh,zip,arj,cab の４種類の拡張子に対して、      {/e lzh,zip,arj,cab}
	   LHMelting というレジストリキー名で登録されているアプリケーションが
	                                                   {/rLHMelting}
	   標準（ダブルクリックで実行される）に設定されていたらそれを解除する。
	                                                   {/ad0}

	● 実行例４
	   SakuEXT  /ad1 /e lzh,zip,arj,cab /rLHMelting

	   処理内容
	   lzh,zip,arj,cab の４種類の拡張子に対して、      {/e lzh,zip,arj,cab}
	   LHMelting というレジストリキー名で登録されているアプリケーションを
	                                                   {/rLHMelting}
	   標準（ダブルクリックで実行される）に設定する。  {/ad1}

	● 実行例５
	   SakuEXT  /a R /elzh,zip,arj,cab /r LHMelting

	   処理内容
	   lzh,zip,arj,cab の４種類の拡張子に対して、       {/elzh,zip,arj,cab}
	   LHMelting というレジストリキー名で登録されているアプリケーションを
	                                                    {/r LHMelting}
	   削除する。                                       {/a R}

	とりあえず
SakuEXT /AA /e lzh,zip,arj,cab,ish,rar,tar,z,taz,gzip,gz,tgz,bzip2,bz2,tbz /rLHMelting /m&LHMelting "C:\Program Files\LHMELT\LHMELT.EXE" "%%1"
	ですか。 (^^;


◎ 他
	作者としては本ソフトウェアを直接そのままエンドユーザーが使ってしまう事
	をあまり望んでいなかったりします。 (^^;
	例えば、次の様な状況、

	　・sakura.exe のタイプ別設定 [HTML] の拡張子は [ html,htm ] に設定
	　　されている。

	　・このソフトウェアでタイプ [HTML] を拡張子連動設定してある。

	という時に、sakura.exe 上で拡張子 html をタイプ HTML から削除してしまう
	と、永久に拡張子 html に関する設定が変更されたままになってしまうことに
	なります。
	他にも色々な状況が考えられますが、sakura.exe 側での変更内容との同期が
	タイムリーには取れない事が何かとトラブルの元になり得ますよね。


◎ もし、ソフトウェアにレジストリ操作部を直接実装する気になったら

	本体プログラムはかなりややこしく見えるかもしれませんが、実態はそれほど
	でもないです。
	HSP は、ちょっとでも何か凝った事をやろうとすると、例えば
	「チェックボックスがクリックされたら、今まではこのチェックボックスは ON
	　だったから OFF に変更して、、、」
	というような処理まで全て自前で処理しなくてはならなくなってしまうという
	側面があるためにアレやコレやとゴテゴテした作り（というか気付けばスパゲ
	ッティというパターン）になってしまっているのです。＜ 特にメインループ
	周辺 (sakuext.as 内の後半)

	もともとメインループ周りはレジストリ操作関数部の動作確認のためだけに
	“うわ〜〜っ”と適当に作っただけの物なので、ソフトウェアを書き始める前
	の設計も何もせず書いていって後から「ちょい付け足ししてみよ」状態なので
	グチャグチャなのは当然(なのか?)ですし、動作を解読してもそもそも意味が無
	いです。

	ですから恐れずに、というかそもそもメインループ周辺なんて無視しませう。
	移植に必要なのは registry.as 内の関数のみです。
	ここには指定された単一の拡張子に対して
	・拡張子連動の設定をする。
	・標準に設定する。
	・設定を全て解除（削除）する。
	といった基本的な関数が入っています。
	条件判定とかは結構ありますけど、処理の流れ的にはスタートからゴールまで
	一直線、ループ等無しの単純処理ばかりですから簡単でしょう。
	これさえ移植できれば後はそれを利用するだけですから簡単かと。
	最も、移植できてもきちんと動くかどうか（アルゴリズム的に間違いが無いか
	どうか）いまいち自身が無いのですが。...(((ヽ^^)（って、おいコラ ＞ 私）

◎ ファイル構成
	[ソースファイル]
	SAKUEXT.AS    このソフトウェアの main部分 (操作部・コマンドライン処理)
	├ GETCMDLN.AS   基本ライブラリ (コマンドライン解析関連)
	├ _BACKCLR.AS   基本ライブラリ (背景色情報の取得処理関連)
	├ CHECKBOX.AS   基本ライブラリ (チェックボックス操作関連)
	└ REGISTRY.AS   関連付け設定関連処理
	　 ├ RegAPI.AS     基本ライブラリ (レジストリ操作関連)
	　 └ TOLOWER.AS    基本ライブラリ (文字列処理 tolower)

	[他]
	RegAPI.KWD    RegAPI.AS 内で定義されている関数を SakuraEditor で強調表
	              示するためのキーワード定義ファイル

	SAKURA.ICO    使用するアイコン
	SAKUEXT.PRM   コンパイラーの設定ファイル(ANTARES' HSP Compiler用)
	COMPILE.BAT   コンパイル処理バッチ
	COMPILE.PIF   ↑の設定ファイル
	
	SAKUEXT.EXE   コンパイル結果のバイナリー
	SAKUEXT.TXT   このファイル
	PACKCAB.BAT   ↑上記ファイル群を cab書庫に格納するバッチ

	# HSP (Hot Soup Processor) http://www.onionsoft.net/hsp/
	# ANTARES' HSP Compiler http://www3.tky.3web.ne.jp/~arsene/
	# cab32.dll(PACKCAB.BAT) http://www.lightship.co.jp/
	# cab32.exe(PACKCAB.BAT) http://member.nifty.ne.jp/k-takata/

◎ 変訂履歴
2002/01/05	Ver. 0.03
	★ 同じフォルダに sakura.ini が無い場合、同じフォルダにある sakura.exe
	   を -NOWIN オプションで実行し、sakura.ini を作成させるようにした。

2001/08/09
	★ 標準（ダブルクリックで実行される）に設定時、設定変更前の値が空文字列
	   の場合は、バックアップ文字列があろうがなかろうが標準設定解除時の結果
	   は同じになる（元通りに戻る）ので、バックアップ文字列は無駄である。
	   よって、変更前の値が空文字列の場合はバックアップ文字列を生成しないよ
	   うにした。

2001/08/08	Ver. 0.02
	★ レジストリに値を書き込む RegSetValueEx の使い方が間違っていたので修
	   正した。文字列 REG_SZ 書込み時は文字列終端 NULL までを含めた文字列長
	   さを指定する必要がある（APIの仕様）のに NULL 分を含めていなかった。
	   だって Win 95 だと長さ指示なんていい加減でもきちんとデータ書込みされ
	   ちゃうんだもん、気付かなかったっす。 ＜ 言いわけ
	   Win NT 3.51 では、書き込んだ文字列の取得時に異状になる可能性がある。
	   他の OS ではどうなるのか知〜らないっと。

2001/08/06	Ver.0.01
↓間違い↑修正
2001/08/03
	★バージョン番号を付けてみたりして。
	　メイン操作画面にてキーボードで操作出来るようにした。
	　sakura.ini が無い場合、きちんとしたエラーメッセージを出すようにした。
	
	★コマンドラインからオプションパラメータ指示で任意アプリケーションの
	　登録／削除等の指示が出来るようにした。
	
	★レジストリ操作を HSP拡張機能（HSPEXT.DLLの機能）でおこなっていたのを
	　LOADLIB.DLL を使って ADVAPI32.DLL の API を直接使用するようにした。
	　そのため、
	
	(1)変更前の元の情報を保存している文字列が不要になっても削除出来ず、
	   ゴミとして残ってしまっていた問題が解決した。
	
	(2)本体の .EXEファイルのみで OK。LOADLIB.DLL が不要になった。
	
##	   ・従来の構成：HSPEXT.DLL と LOADLIB.DLL を使用。
##	     SakuEXT.EXE(=ソフトウェア + HSPEXT.DLL) + LOADLIB.DLL
##	     // hsp2maxランタイム使用
##	
##	   ・今回の構成：LOADLIB.DLL のみ使用。
##	     SakuEXT.EXE(=ソフトウェア + LOADLIB.DLL)
##	     // loadlibランタイム使用
	
	★アルゴリズムを全体的に変更した。従来の手抜き処理よりも少しまともに
	　なったと思う。が、ソースは短くなったような、ソフトウェア的にも若干
	　簡潔になったような？(謎)．．．気のせいだろうか？
	
	従来：新規にレジストリキーを作成する時、その中に「このキーは新規作成し
	　　　ましたよ」という目印データを書き込んでおく。
	　　　設定解除時には↑この「新規作成」の目印があるキーを問答無用で削除
	　　　していた。
	
	今回：「新規作成」という目印データの類は一切書き込まない。
	　　　設定解除時には、解除時のレジストリの状況を見て、他に何も拡張子連
	　　　動がらみの情報が無い場合のみバッサリ削除する。
	
	この変更により、このソフトウェアにて関連付け情報が新規に作成された後、
	何か他の設定を書き加えたりした場合などは、関連付け解除処理をおこなって
	も、それら後から追加された情報はそのまま残ってくれる。
	
	副作用として、逆にこのソフトウェアで新規に作成した関連付け情報ではなく
	とも、関連付け解除処理時に他に何も関連付け情報が設定されていない場合は
	バッサリ削除される。
	
##	設定解除時のレジストリキー削除判定・処理内容
##	
##	HKEY_CLASSES_ROOT
##	├ .txt       →  (標準) = txtfile
##	├ ....
##	├ txtfile
##	│  └ shell
##	の例
##	
##	(1)条件１−１
##	   txtfile\shell の下から SakuraEditor のキーを削除後、txtfile\shell の
##	   階層下に他に何もレジストリキーが無い。
##	  （ txtfile\shell\open 等があるなら、この条件を満たさないので削除され
##	  　ない）
##	
##	(2)条件１−２
##	   txtfile の下に DefaultIcon と shell 以外のレジストリキーが無い。
##	  （ txtfile\QuickView ,txtfile\shellex 等があるなら、この条件を満たさ
##	   　ないので削除されない）
##	
##	(1)(2)の両条件を満たした場合のみ txtfile キーをバッサリ削除し、さらに
##	.txt の (標準) の値を削除する。
##
##	↑上記の削除処理を実行した場合のみ、さらに .txt の中を調べ、次の (3)(4)
##	の両条件を満たした場合のみ .txt キーをバッサリ削除する。
##
##	  (3)条件２−１
##	     .txt の階層下に何もレジストリキーが無い。
##	     （.txt\ShellEx等があるなら、この条件を満たさないので削除されない）
##
##	  (4)条件２−２
##	     .txt の中に何もデータが無い。
##	     （"Content Type"等の値があるならこの条件を満たさないので削除され
##	     　ない）

2001/07/16
	初版

file end.
