home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2003 July
/
VPR0307.ISO
/
OLS
/
LINYO152
/
linyo152.lzh
/
linyom.mac
< prev
next >
Wrap
Text File
|
2003-04-30
|
13KB
|
515 lines
//
// 秀丸&鶴亀 行頭引用符・コメント文字挿入・削除マクロ(メニュー版)
// Ver 1.0 99/05/24 by SAS
// Ver 1.1 99/05/26 by SAS
// ・置換モード時のメタキャラクタ対応
// Ver 1.2 99/05/30 by SAS
// 動作環境の引用記号設定を本マクロで変更できるようにした
// Ver 1.3 2000/11/22 by SAS
// メニュー登録・削除
// 置換モードで挿入・削除後、検索フラグの置換bitをクリアするようにした。
// Ver 1.31 2001/02/04 by SAS
// ・マクロフォルダを設定していない時、設定ファイルを秀丸フォルダでは無く
// ルートから読み込もうとする不具合に対応。
// Ver 1.4 2001/11/07 by SAS
// ・鶴亀メール対応
// ・鶴亀メール対応の都合上、マクロフォルダをレジストリでは無く、 macrodir から
// 取得するよう変更及び、loaddll/dllfunc 関数を使用するようにした。
// これに伴い、本マクロは 秀丸Ver3.02 未満では利用できなくなった。
// Ver 1.41 2001/11/09 by SAS
// ・置換モードOFF/削除モードで全角文字を含む削除が正常に行えていなかった
// 不具合を修正した。
// Ver 1.42 2003/02/07 by SAS
// ・macrodir でなく、currentmacrodirectoryを使用することにした。
// これに伴い、本マクロは 秀丸Ver3.09 未満では利用できなくなった。
// Ver 1.5 2003/02/25 by SAS
// ・メニューを出さないモードに自由入力以外に、必ず秀丸(鶴亀)設定の
// 引用符を必ず使う非入力モードを追加。
// また、非メニュー時、挿入・削除が選択できるモードも追加した。
// ・範囲非選択時の動作を選択できるようにした。
// ・一部コード見直し
// Ver 1.51 2003/04/25 by SAS
// ・上書き禁止、閲覧モードをチェックするようにした。
// Ver 1.52 2003/05/01 by SAS
// ・「現在の設定引用記号」がメニューの先頭以外にあっても「引用記号設定」
// 実行後、メニュー先頭を書き替える不具合があったので修正
// ・一部コード見直し
//
$inifile = "linyom.ini";
$envkey = "Software\\Hidemaruo\\Hidemaru\\Env";
$turu_cfgkey = "Software\\Hidemaruo\\Turukame\\Config";
#iniflg = 1; // 何らかの理由でinifileを使用したくない場合は、この値を 0 にしてください
$cfgmenustr = "(&0)登録記号追加・削除";
$cfgaddstr = "(&A)登録記号追加";
$cfgdelstr = "(&D)登録記号削除";
call ChkTrukame;
#is_turukame = ##return; // 0: 秀丸, 1: 鶴亀
if (readonly || browsemode) {
if (#is_turukame) {
message "編集が許可されていない為、実行できません";
} else {
message "『上書き禁止』及び『閲覧モード』では実行できません";
}
endmacro;
}
if (#iniflg == 0) {
//-----------
// inifile 非使用時の初期設定処理
//-----------
$freestr = "自由入力"; // 自由入力メニュー文字列
$delstr = "現在削除モード";
$insstr = "現在挿入モード";
$reponstr = "現在置換モードON";
$repoffstr = "現在置換モードOFF";
$cfginyo = "(現在の設定引用記号)";
$setinyostr = "引用記号設定";
#repflg = 0; // 処理を置換で行うかどうか 1:行う
#nomenu = 0; // メニュー表示
// 0:表示する
// 1:表示しない(自由入力)
// 2:表示しない(非入力)
// 3:表示しない(自由入力+挿入削除選択)
// 4:表示しない(非入力+挿入削除選択)
#delflg = 0; // 0: 挿入モード、 1: 削除モード
#endmode = 0; // 終了時のカーソル位置
// 0:処理最終論理行末, 1:処理最終論理行頭, 2:処理先頭論理行頭
#selmode = 0; // 範囲非選択時の動作 0: カーソル行のみ処理, 1:全ての行を処理
#turu_setinyo = 0; // 鶴亀での引用記号設定 0:無効 1:強制的に有効(非サポート機能)
} else {
$inifile = currentmacrodirectory + "\\" + $inifile;
$freestr = getinistr($inifile, "Config", "freestr");
$delstr = getinistr($inifile, "Config", "delstr");
$insstr = getinistr($inifile, "Config", "insstr");
$reponstr = getinistr($inifile, "Config", "reponstr");
$repoffstr = getinistr($inifile, "Config", "repoffstr");
$cfginyo = getinistr($inifile, "Config", "cfginyo");
$setinyostr = getinistr($inifile, "Config", "setinyostr");
#repflg = getininum($inifile, "Config", "replace");
#nomenu = getininum($inifile, "Config", "nomenu");
#delflg = getininum($inifile, "Config", "delmode");
#endmode = getininum($inifile, "Config", "endmode");
#selmode = getininum($inifile, "Config", "selmode");
#turu_setinyo = getininum($inifile, "Config", "turu_setinyo");
}
call MainProc;
endmacro;
SetInyoMenu:
#tbl_cfginyo = -1;
if (#delflg == 1) {
$insdelstr = $delstr;
} else {
$insdelstr = $insstr;
}
if (#repflg == 1) {
$repstr = $reponstr;
} else {
$repstr = $repoffstr;
}
call CfgInyoStr $cfginyo;
$cfginyostr = $$return;
##i = 0;
if (#iniflg == 0) {
//-----------
// inifile 非使用時のメニュー設定処理
//-----------
// 順番入れ替えは自由
$inyotbl[##i] = $cfginyostr;
#tbl_cfginyo = ##i;
##i = ##i + 1;
$inyotbl[##i] = "》";
##i = ##i + 1;
$inyotbl[##i] = ">";
##i = ##i + 1;
$inyotbl[##i] = ">>";
##i = ##i + 1;
$inyotbl[##i] = "//";
##i = ##i + 1;
$inyotbl[##i] = "#";
##i = ##i + 1;
$inyotbl[##i] = ";";
##i = ##i + 1;
$inyotbl[##i] = ">";
##i = ##i + 1;
$inyotbl[##i] = "≫";
##i = ##i + 1;
$inyotbl[##i] = $freestr;
##i = ##i + 1;
$inyotbl[##i] = $setinyostr;
##i = ##i + 1;
$inyotbl[##i] = $repstr;
##i = ##i + 1;
$inyotbl[##i] = $insdelstr;
##i = ##i + 1;
} else {
##j = 1;
while (##j <= 35) {
$inyotbl[##i] = getinistr($inifile, "Menu", str(##j));
if ($inyotbl[##i] != "") {
if ($inyotbl[##i] == "$freestr") {
$inyotbl[##i] = $freestr;
} else if ($inyotbl[##i] == "$modechg") {
$inyotbl[##i] = $insdelstr;
} else if ($inyotbl[##i] == "$repchg") {
$inyotbl[##i] = $repstr;
} else if ($inyotbl[##i] == "$cfginyo") {
$inyotbl[##i] = $cfginyostr;
#tbl_cfginyo = ##i;
} else if ($inyotbl[##i] == "$setinyostr") {
$inyotbl[##i] = $setinyostr;
}
#strnumtbl[##i] = ##j;
##i = ##i + 1;
}
##j = ##j + 1;
}
}
return ##i;
MainProc:
if (#nomenu == 3 || #nomenu == 4) {
call MenuInsDel;
if (##return == 0) {
return;
}
#nomenu = #nomenu - 2;
}
if (#nomenu == 1) {
$inyofu = $freestr;
} else if (#nomenu == 2) {
call GetInyofu;
$inyofu = $$return;
} else {
call SetInyoMenu;
##icnt = ##return;
while (1) {
##idx = 0;
while (##idx < ##icnt) {
call CnvMenuStr ##idx + 1, $inyotbl[##idx];
$menutbl[##idx] = $$return;
##idx = ##idx + 1;
}
if (#iniflg == 0) {
menuarray $menutbl, ##icnt;
} else {
$menutbl[##icnt] = $cfgmenustr;
menuarray $menutbl, ##icnt+1;
}
##m_result = result;
if (##m_result == 0) {
return;
} else if (##m_result == ##icnt + 1) {
menu $cfgaddstr, $cfgdelstr;
if (result == 1) {
call AddInyoMenu;
if (##return == true) {
call SetInyoMenu;
##icnt = ##return;
}
} else if (result == 2) {
menuarray $menutbl, ##icnt;
##r = result;
if (##r != 0) {
writeinistr $inifile, "Menu", str(#strnumtbl[##r-1]), "";
call SetInyoMenu;
##icnt = ##return;
}
}
continue;
} else {
$inyofu = $inyotbl[##m_result - 1];
if ($inyofu == $insdelstr) {
#delflg = #delflg ^ 1;
if (#delflg == 1)
$insdelstr = $delstr;
else
$insdelstr = $insstr;
$inyotbl[##m_result - 1] = $insdelstr;
} else if ($inyofu == $repstr) {
#repflg = #repflg ^ 1;
if (#repflg == 1)
$repstr = $reponstr;
else
$repstr = $repoffstr;
$inyotbl[##m_result - 1] = $repstr;
} else if ($inyofu == $cfginyostr) {
call GetInyofu;
$inyofu = $$return;
break;
} else if ($inyofu == $setinyostr) {
call SetInyofu;
if (#tbl_cfginyo != -1) {
call CfgInyoStr $cfginyo;
$cfginyostr = $$return;
$inyotbl[#tbl_cfginyo] = $cfginyostr;
}
} else {
break;
}
}
}
}
if ($inyofu == $freestr) {
call GetInyofu;
$inyofu = input("文字列入力", $$return);
if (result == false) {
return;
}
}
//-------------------
// 挿入・削除処理
//-------------------
##selecting = selecting;
if (##selecting == 1) {
if (seltopy < 0 && selendy < 0) {
return;
}
#sel_topx = seltopx;
#sel_topy = seltopy;
#sel_endx = selendx;
#sel_endy = selendy;
if (#sel_topy < 0) {
#sel_topy = 0;
}
if (#sel_endy < 0) {
#sel_endy = 0;
}
} else {
if (#selmode == 1) {
#sel_topx = 0;
#sel_topy = 0;
gofileend;;
#sel_endx = x;
#sel_endy = y;
##selecting = 1;
} else {
if (y < 0) {
return;
}
}
}
if (#repflg == 0) {
if (##selecting == 1) {
escape;
moveto #sel_topx,#sel_topy;
#lno = lineno;
moveto #sel_endx,#sel_endy;
if (column == 0) // 論理行頭なら1行前まで
#endlno = lineno - 1;
else
#endlno = lineno;
} else {
#lno = lineno;
#endlno = lineno;
}
#toplno = #lno;
while (#lno <= #endlno) {
movetolineno 1,#lno;
if (#delflg == 1)
call DelStr $inyofu;
else
insert $inyofu;
#lno = #lno + 1;
}
} else {
if (##selecting == 1) {
call ChkMetaAll $inyofu;
$inyofu = $$return;
moveto #sel_topx, #sel_topy;
#toplno = lineno;
golinetop2;
escape;
beginsel;
moveto #sele_endx, #sel_endy;
if (#delflg == 1)
replaceallfast "^"+$inyofu+"\\f.?","\\1",regular,inselect;
else
replaceallfast "^",$inyofu,regular,inselect;
setsearch searchbuffer, searchoption & 0xfb;
} else {
#toplno = lineno;
golinetop2;
if (#delflg == 1)
call DelStr $inyofu;
else
insert $inyofu;
}
}
if (#endmode == 1) {
golinetop2;
} else if (#endmode == 2) {
movetolineno 1,#toplno;
} else {
golineend2;
}
return;
// 設定されている引用符の取得
GetInyofu:
if (#is_turukame) {
openreg "CURRENTUSER", $turu_cfgkey;
$$inyofu = getregstr("Quote");
closereg;
} else {
openreg "CURRENTUSER", $envkey;
$$refmark = getregstr("RefMark");
closereg;
// 前後の@を省く
$$inyofu = midstr($$refmark, 1, strlen($$refmark) - 2);
}
return $$inyofu;
SetInyofu:
if (#is_turukame && #turu_setinyo == 0) {
message "この機能は鶴亀メールでは利用できません";
return;
}
call GetInyofu;
$$inyofu = input("引用記号設定", $$return);
if (result == true) {
$$inyofu = leftstr($$inyofu, 4);
if (#is_turukame) {
openreg "CURRENTUSER", $turu_cfgkey;
writeregstr "Quote", $$inyofu;
closereg;
} else {
openreg "CURRENTUSER", $envkey;
writeregstr "RefMark", "@" + $$inyofu + "@";
closereg;
envchanged;
}
}
return;
// カーソル位置の文字が指定文字列なら削除する
// $$1: 削除したい文字列
DelStr:
##len = strlen($$1);
$$strtmp = gettext(x, y, x + ##len, y);
if ($$strtmp == $$1) {;
while (##len > 0) {
if (code >= 0x0100) { // 2byte ?
delete;
##len = ##len - 2;
} else {
delete;
##len = ##len - 1;
}
}
}
return;
// 設定引用符用文字列作成
// $$1: 引用符の後ろにつける文字列
CfgInyoStr:
call GetInyofu;
return $$return + " " + $$1;
// メニュー用文字列の作成
// ##1: 番号
// $$2: 文字列
CnvMenuStr:
if (##1 <= 9) {
$$acckey = str(##1);
} else {
$$acckey = char(0x41 + (##1 - 10));
}
$$menustr = "(&" + $$acckey + ") " + $$2;
return $$menustr;
// 文字列中にメタキャラクタがあれば \ を付加する
// $$1: 文字列
ChkMetaAll:
$$meta = "[]()^$.*+?|";
call ChkMeta $$1, "\\";
$$s = $$return;
##len = strlen($$meta);
##i = 0;
while (##i < ##len) {
call ChkMeta $$s, midstr($$meta, ##i, 1);
$$s = $$return;
##i = ##i + 1;
}
return $$s;
// 文字列中に指定のメタキャラクタがあれば \ を付加する
// $$1: 文字列
// $$2: メタキャラクタ
ChkMeta:
$$tmpstr = $$1;
$$s = "";
while (1) {
##point = strstr($$tmpstr, $$2);
if (##point == -1) {
$$s = $$s + $$tmpstr;
break;
}
if (##point == 0) {
$$s = $$s + "\\" + $$2;
} else {
$$s = $$s + leftstr($$tmpstr, ##point) + "\\" + $$2;
}
##len = strlen($$tmpstr) - (##point + 1);
if (##len == 0)
break;
$$tmpstr = rightstr($$tmpstr, ##len);
}
return $$s;
AddInyoMenu:
$$toumoji = input("登録する記号を入力してください","");
if (result == false) {
##rcode = false;
} else {
##i = 1;
while (##i <= 35) {
$$strtmp = getinistr($inifile, "Menu", str(##i));
if ($$strtmp == "") {
writeinistr $inifile, "Menu", str(##i), $$toumoji;
break;
}
##i = ##i + 1;
}
if (##i == 36) {
message "これ以上登録できません";
##rcode = false;
} else {
##rcode = true;
}
}
return ##rcode;
MenuInsDel:
if (#delflg == 1) {
menu
"削除モード(&D)",
"挿入モード(&I)";
} else {
menu
"挿入モード(&I)",
"削除モード(&D)";
}
if (result == 2) {
#delflg = #delflg ^ 1;
}
return result;
ChkTrukame:
loaddll "TKInfo.dll";
if (result) {
if (dllfunc("IsTuruKame")) {
// 鶴亀で実行中
return 1;
}
freedll;
}
return 0;