// ------------------------------------------------------------ // 里珠 version 1.1.30 // ------------------------------------------------------------ ♪ これは何? 栞をperlスクリプトで実装するための栞DLLです. 一番低レベルレイヤのload/unload/request要求を perlスクリプトのon_load/on_unload/on_requestに呼び出すだけ です. 便宜上, perl.dll を直接使うものを単に 里珠/Direct, perl.exe を外部プロセスとして起動して使うものを 里珠/Proxy と呼んでみ ます. ♪ LISENCE 里珠は Perl と同様に Artistic もしくは GPL で配布されます. ♪ 注意事項 rishu.dll は, rishu-1.1.18 以降は付属していません. 里珠/Direct は現在停止しています. 要望がないから.(爆) # あと, VC.NET のソリューションが扱いにくいっていうのも... # make のが楽(爆) また, 里珠の実行に必要な modules/ ディレクトリは, ちょっとおっきいので別ファイルになっています. ♪ Contents - のファイルは含まれてないもの. - modules/ Perl モジュール及び DLL (別ファイル) proxy/ 里珠/Proxy ソースファイル readme.txt いま読んでるファイル rishu_proxy.pl 里珠/Direct での 里珠/Proxy エミュレート. rishu_remote.dll 里珠/Proxy 外部プロセス側スクリプト. rishu_remote.txt 里珠/Proxy 説明. - direct/ 里珠/Direct ソースファイル - rishu.dll 里珠/Direct 本体 rishu.pl 里珠/Direct サンプルソース (役立たず) rishu.txt 里珠/Direct 説明 ♪ 配布元 http://www.mikage.to/PerlShiori/ (山科 氷魚/YAMASHINA Hio, ) irc.sherry.jp:6667 #Perl栞 ♪ 関連 なゆき (里珠を使ったフレームワーク) http://nayuki.sherry.jp/ (沢渡 みかげ/SAWATARI Mikage) ♪ HISTORY (xがあたまについてるのは不具合が報告されています) 1.1.30 (2002/11/20) ・(FIX-1.1.30#1) (1.1.27以降?/socketぜんぶかも) remote側送信時に \n が \r\n 変換されていたバグの修正 x1.1.29 (2002/11/19) ・(FIX-1.1.29#1) (1.1.28以降) ログの位置がずれてたバグの修正 ・(BUG-1.1.30#1) x1.1.28 (2002/11/19) ・on_request の復帰値を \r\n をエスケープ表示するように. ・(BUG-1.1.29#1) ・(BUG-1.1.30#1) x1.1.27 (2002/11/17) ・異常時の終了メッセージの実装. ・(BUG-1.1.30#1) 1.1.26 (2002/11/16) ・Rishu::Remote->instance() 実装. ・ProxyログがGMTだったのを修正. ・ソケット通信にしてみる(nonblockingなってないぽい). 1.1.25 (2002/11/10) ・ログを開いた後維持するように変更. ・Proxy側ログ 時間を記録するように. 1.1.24 (2002/11/10) ・(FIX-1.1.24#1) (1.1.23のみ) request->send, 警告ログで落ちてたバグの修正. ・Rishu/Remote.pm, ログ機能. x1.1.23 (2002/11/10) ・送信後明示的にFlush挟むように. ・ログクリア時に.bakに保存するように. ・(BUG-1.1.24#1) 1.1.22 (2002/11/10) ・ログが1項目毎クリアされたバグの修正 ・(FIX-1.1.22#2) (1.1.18以降) Proxy通信後, hGlobal に書き戻してなかったバグの修正 x1.1.21 (2002/11/10) ・dynamicリンクになってたのでstaticに修正. ・ついでに速度最適化を設定. ・ログを起動毎クリアするように. ・(BUG-1.1.22#2) x1.1.20 (2002/11/09) ・PROXY 側, Content-Length を認識するように. ・(BUG-1.1.22#2) x1.1.19 (2002/11/09) ・里珠/PROXY, ログ設定を .ini に. ・(BUG-1.1.22#2) x1.1.18 (2002/11/09) ・里珠/PROXY の実装. ・(BUG-1.1.22#2) 1.1.17 (2002/08/18) ・LWP追加 ・多分 fork が動く模様 (後述の win32-fork の項も参照) 1.1.16 (2002/08/07) ・perl を vc7/STLport と static リンク. 1.1.15 (2002/08/07) ・rishu.dll を vc7 と static リンク. 1.1.14 (2002/08/04) ・perl-5.8.0 でこんぱいるしてみました 1.1.13 (2002/07/06) ・PROCESS_DETACH時にperlのDLLハンドルが残ってたら解放するように 1.1.11 ・perl-dllをmodules/.../perl58.dllのみを使うように 1.1.10 ・perl-5.8.0-RC1用に修正 1.1.9 ・クリティカルセクションがネストしてたら表示するように. 1.1.8 ・load/unload/requestにクリティカルセクションを張る. ver 1.00 ・module/ を modules/ に変更 ・perl56.dllを, Perl_Shiori.plのディレクトリから捜すように修正. ・Perl_Shiori.plのディレクトリを@INCに追加 ・$Shiori::CORE::VERSIONを設定. ・importsにPV_sv_setpvが追加. ver 1.00 RC1 ・CPANからビルドしたバイナリ/モジュールも同梱. ・起動スクリプトを Perl_Shiori.pl に変更. ver 0.06 ・ActivePerlのperl56.libとのリンクをはずす. ver 0.05 ・XSモジュールが使えなかったのを修正 ・ENDが起動直後によばれちゃうので修正 ver 0.04 ・perl初期化に失敗したら実行しないように修正 ・loadの引数の位置にあるshiori.plを実行 ver 0.03 ・perlスクリプトのグローバル部分を実行するように変更. ver 0.02 ・extern "C" が抜けていたので修正. ver 0.01 ・とりあえずつくってみた〜. ♪ Win32-fork fork は ithreads (interpreter-thread) を使って擬似的に実装されてい ます. 擬似子プロセスは, 親 interpreter の複製の, 別スレッドでの実 行となります. このため, この擬似子プロセスである子 interp を, 親 interp の終了に巻き込まないように, 親 interp の破棄のタイミングで, すべての子 interp の終了を待ちます. fork を使う里珠スクリプトでは, on_unload 時に, すべての子プロセスを kill するといった処理を加えるべきです. メモ: perl ソースの該当箇所. -perl.c:334 /* wait for all pseudo-forked children to finish */ PERL_WAIT_FOR_CHILDREN; -win32/win32.h:466 # define PERL_WAIT_FOR_CHILDREN \ STMT_START { \ if (w32_pseudo_children && w32_num_pseudo_children) { \ long children = w32_num_pseudo_children; \ WaitForMultipleObjects(children, \ w32_pseudo_child_handles, \ TRUE, INFINITE); \ while (children) \ CloseHandle(w32_pseudo_child_handles[--children]); \ } \ } STMT_END ♪ Perl のビルドに使った設定 (perl-5.8.0/win32/Makefile) (ccflags) -nologo -Gf -W3 -MT -DNDEBUG -O1 -D_STLP_USE_STATIC_LIB -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX -MT によって, VCランタイムライブラリ と static リンクしています. -D_STLP_USE_STATIC_LIB によって, STLport と static リンクしています. STLport は http://www.stlport.org 参照. (Makefile) * : 修正した設定 : (空白) デフォルトのままの設定 INST_DRV = c: * INST_TOP = $(INST_DRV)\pkg\perl-5.8.0 * INST_VER = \5.8.0 * INST_ARCH = \$(ARCHNAME) USE_MULTI = define USE_ITHREADS = define USE_IMP_SYS = define USE_PERLIO = define #USE_5005THREADS = define ? #CCTYPE = MSVC60 #CFG = Debug #USE_PERLCRT = define #USE_SETARGV = define * CRYPT_SRC = fcrypt.c #CRYPT_LIB = fcrypt.lib #PERL_MALLOC = define CCHOME = $(MSVCDIR) CCINCDIR = $(CCHOME)\include CCLIBDIR = $(CCHOME)\lib fcrypy.c は次の場所から. http://downloads.ActiveState.com/pub/staff/gsar/fcrypt.c あとたしか DEFINES に -D_STLP... を追加して, OPTIMIZE の -MD を -MT にした様な…. ( ### CHANGE THESE ONLY IF YOU MUST ### の先の, Options のあたり ) __END__