swriter.exe - 超代筆君 MEGA-Mix Copyright (c) YumemiYougie-Project |
|
ダウンロードページから「ソースを含む実用パッケージ」をダウンロード
使用言語
Microsoft Visual C++ 6.0
tools.h patol.lib(同封)が必要です。
機能のカスタマイズ
module フォルダ内に以下のファイルが格納されています。
function_base.cpp ベースとなるソース
function_base2.cpp ベースとなるソース(簡略版)
ここでは解説を簡単にするために function_base2.cpp のソースを使います。
function_base.cpp を消去または移動して、function_base2.cpp を function_base.cpp にリネームして下さい。
パッケージをコンパイルした時点で機能「function_base」は有効になっています(基本的にモジュールファイル名と機能名は同じになっています)。
付属している sample.swb を実行すると function_base.cpp の実行結果 res_sample.txt が出力されます。
バッチファイル sample.swb
[script] function_base [files] |
結果 res_sample.txt
file:DOC\command.txt DOC\command.txt file:DOC\how to use.txt DOC\how to use.txt file:DOC\technical.txt DOC\technical.txt Completed... |
ソース function_base.cpp (元はfunction_base2.cpp)
//====================================================================================== // 変換ルーチンベースプログラム // // もっとも単純な構造のサンプルプログラム //====================================================================================== //------------------------------------------------------------------ void FUNCTION_BASE::quit(int et){} //====================================================================================== #define FUNCTION_BASE_OUTAREA 2 // 変換後の容量は仮に元の倍取っている 内容によって変更して下さい //------------------------------------------------------------------ FUNCTION_BASE m_function_base; |
function_base.cpp は単にデータをコピーして同名のファイルにそのまま上書き、結果には処理したファイルのファイル名を出力しています。
何もしない、ただデータをコピーするだけのサンプルです。
コピーの代わりに何かをする処理を挟む事で望みのフィルターに変更する事ができます。
メインとなる部分は func(...) の中央部分の
// 変換処理部分 i = j = 0; while(i < len){ // 変換処理 このサンプルではただコピーしているだけ *(out+j++) = *(mem+i++); } |
です。
ここで元データ mem から出力用バッファの out にそのままコピーしています。
ここを用途に合わせて修正すれば目的の機能に変更する事ができます。
試しにテキスト内の全角文字「あ」を「い」に変えるコンバータを作ってみます。
// 変換処理部分 i = j = 0; while(i < len){ if( _ismbblead(*(mem+i)) != 0 ){ // 全角文字だ if(_WCHAR(mem+i) == 'あ'){ *(WORD*)(out+j) = swap_word('い'); i+=2; j+=2; }else{ *(out+j++) = *(mem+i++); *(out+j++) = *(mem+i++); } }else{ *(out+j++) = *(mem+i++); } } |
WCHAR()
swap_word()
は tools.h で定義されているマクロです。
#define swap_word(code) (((code)&0xff)*0x100+(code)/0x100)
#define _WCHAR(ch) (*((u_char*)ch)*0x100 + *((u_char*)ch+1))
上位バイトと下位バイトを入れ代えます。
テキストコントロールに使うためのルーチンやマクロがいくつか組み込まれていますが、カスタマイズの際には普段利用しているライブラリを組み込むなどした方が使いやすいと思います。
機能の新規追加
独自のスクリプト名の機能を追加する方法を解説します。
プロジェクトと同フォルダにある addfunc.exe を実行します。
FuncName : 「(デフォルトではsmpl_func)」 ボックスにスクリプト名。
上部の大きいボックスに機能説明(未入力でも可)を入力して「開始」ボタンを押します。
ソース swriter.cpp が書き換えられ、デフォルトのままの場合、smpl_func というスクリプトが追加され、moduleフォルダに smpl_func.cpp が追加されています。
(swriter.cpp に手を加えた場合、正しく追加修正されない場合があるので注意)
通常、取得するパラメータを変更する場合以外は swriter.cpp に変更を加える事はないかと思います。
smpl_func.cpp はfunction_base.cpp がそのままコピーされます。
(function_base.cpp に予め修正を加えておけばそれがコピーされるので使いやすいベースを作成しておくと便利です)
これに「機能のカスタマイズ」解説した変更を加えれば、マイスクリプト追加の完了です。
即興で作成、継続して使用する事のなさそうな機能には頭に smpl_ つける等して区別すると、後で整理する時に便利ですのでお薦めです。