home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1998 January (DVD)
/
VPR980100.ISO
/
OLS
/
WIN32
/
KAKIMAC
/
KAKIMACM.LZH
/
K_MARKL.MAC
< prev
next >
Wrap
Text File
|
1996-02-28
|
9KB
|
390 lines
// k_MARKL.mac (書きマクロシリーズ第M集)
// k_MARK Ver.1 行番号順に自動移動する、マーカーマクロ
// by 水銀水(Suigwinsui)/小田明夫(HGD01603)
// 平成08年02月28日(水) 午後01時50分00秒
//*設定開始
//●一回の操作での動作指定( []内の数字はデフォルト)
#oneActionQuiet=0; //[0] 1=1回の記憶や移動で即、マクロ終了(文書を把握している人向き)、0=[Esc]か[Ret]で終了
//●発見表示行
#dispConstLine=1; //[1]行マーカー行を、秀丸の設定にまかせて表示させるか=0、上から何行目かを当マクロで強制的に一定位置に指定するか=1,
#dispLineNum=-1; //[-1]上から約n行目=n、画面の縦位置の中央より少し上(^^)=-1、
//*設定終了
call starting;
call checkFileName;
call markNewOn;
disablebreak;
while(1){
#i=keypressed;
if(#i==0x1B){// Esc 破棄
break;
}else if(#i==0x2E){// [Del]
call markDelete;
call markNewOn;
}else if(#i==13){// return
break;
}else if(#i==0x08 || #i==0x4F){//BackSpace 破棄
call backToOrgPosOrgHM;
call markNewOn;
}else if((#i>=0x31&i<=0x39)||(#i>=0x61&i<=0x69)){//1-9// jump
if(#i<=0x39)#N=#i-0x30;
else #N=#i-0x60;
call jumpByNumber #N;
if(##return){if(#oneActionQuiet)goto ending;}
}else if(#i>=0x70&i<=0x78){//F1-F9,位置は強制上書きさせる// write
##F=#i-0x6F;
call writeLINE ##F;
if(#oneActionQuiet)goto ending;
else #N=##F;
}else if(#i==0x20){//Space
call nextMarkLine y,0;//方向
}else if(#i==0x10){//Shift
call nextMarkLine y,1;//上方向
}else if(#i==0x24 || #i==0x54){//Home
#N=0;
gofiletop;
call markNewOn;//???スピードも気になる(^^;
}else if(#i==0x23 || #i==0x45){//End
#N=0;
gofileend;
call markNewOn;//???スピードも気になる(^^;
}else if(#i==0x21){//PgUp
#N=0;
prevpage;
call markNewOn;
}else if(#i==0x22){//PgDn
#N=0;
nextpage;
call markNewOn;
}else if(#i==0x27){//→
golineend;
}else if(#i==0x25){//←
golinetop;
}else if(#i==0x26){//↑
#N=0;
up;
call markNewOn;
}else if(#i==0x28){//↓
#N=0;
down;
call markNewOn;
}else if(#i==0x09){//Tabウィンドウ切り替え
call changeHM;
}else if(#i==0x4C){//lL
writeinistr $f,$fn,"latest",date;
execmacro "k_markM.mac";
}else if(#i==0x48){//hH for HELP
call k_helpMARK 1;
}else if(#i==0x55){// [U]最新登録番号の取り消し(letest undo)
call latestOneUndo;
}else if(#i!=0){
beep;
}
if(imestate)imeswitch;
}
goto ending;
backToOrgPosOrgHM:
if(#orgY[#hwnd[#w]]==y){
if(hidemaruhandle(0)!=#hwnd[0]){
#w=0;
setactivehidemaru #hwnd[#w];
call getIni;
}else beep;
}
moveto #orgX[#hwnd[#w]],#orgY[#hwnd[#w]];
return;
markNewOn://マーク行にあるかどうか
call checkOnTheMark;
#N=##return;
call dispNewTitle;
return;
changeHM://Tabウィンドウ切り替え
if(hidemarucount==1)beep;
else{
title 1;
nexthidemaru;//nexthidemaruicon;
}
#w=#w+1;
#hwnd[#w]=hidemaruhandle(0);
#orgX[#hwnd[#w]]=x;#orgY[#hwnd[#w]]=y;
call getIni;
call dispOrgTitle;
return;
checkOnTheMark://マークされた行番号の上にあるかどうか
while(1){
if(#M[##o+1]==y+1){
return (##o+1);
}else ##o=##o+1;
if(##o==9){
return 0;
}
}
return ;
dispNewTitle://新規タイトル
call setMarkTitleAll;
$t[#N]="("+str(#N)+")"+str(#M[#N])+" ";
call dispTitle;
return;
dispTitle://表示
if(##1==0)$hmH="●行順<H> ";
else if(##1==1){
$hmH="[×]削除<H> ";
call getIni;
}
$tt=$t[1]+$t[2]+$t[3]+$t[4]+$t[5]+$t[6]+$t[7]+$t[8]+$t[9];
if($tt=="")title $hmH+" (行マーカー未登録)...[H:help]";
else title $hmH+$tt;
return;
markDelete://マーク削除
call dispTitle 1;
while(1){
##k=keypressed;
if(##k==0x1B || ##k==0x2E){// Esc あるいは、再度[Del]...破棄
break;
return 0;
}else if(##k==0x30 || ##k==0x60){//0
question "●確認...当ファイル("+filename+")の全マーク情報を消去しますが、よろしいですね?";
if(!result)break;
else{
##deleteAll=1;
call deleteAllMark;
if(!#oneActionQuiet)break;
else goto ending;
}
}else if(##k>=0x70&#k<=0x78){//F1-F9
##N=##k-0x6F;
if(#M[##N]!=0){
call deleteMARK ##N;
break;
}else beep;
}else if(##k==0x48){//hH for HELP
call k_helpMARK 2;
}else if(##k!=0)beep;
if(imestate)imeswitch;
}
return ##deleteAll;
deleteAllMark:
writeinistr $f,$fn,0,0;
call getIni;
call setMarkTitleAll;
call dispTitle 1;
return;
deleteMARK:// キー削除実行部
#latestL=#M[##1];//維持行番号(保存前)
#latestM=##1;//維持行マーカー
writeinistr $f,$fn,str(##1),0;//
#M[##1]=0;
$t[##1]="";
call getIni;
call checkOnTheMark;
#N=##return;
call setMarkTitleAll;
call dispTitle 1;
return;
jumpByNumber://番号キーにより、対応するマーカー番号の行へジャンプする
#N=##1;
if(#M[#N]!=0 && #M[#N]<=linecount){
if(!#dispConstLine)moveto 0,#M[#N]-1;
else{
disabledraw;
moveto 0,#M[#N]-1;
if(#dispLineNum<0)##dL=y-(windowheight/2)+5;
else ##dL=y-#dispLineNum;
enabledraw ##dL;
}
call dispNewTitle;
}else{
if(#M[#N]!=0)call dispNewTitle;
beep;
return 0;
}
return 1;
nextMarkLine://##1:調査開始y座標// ##2:検索方向↓0、↑1
##yy=y;
if(#dispConstLine){
disabledraw;
call getMarkNext ##1,##2;
##mL=##return-1;
moveto 0,##mL;
if(#dispLineNum<0)##dL=y-(windowheight/2)+5;
else ##dL=##return-#dispLineNum;
enabledraw ##dL;
}else{
call getMarkNext ##1,##2;
moveto 0,##return-1;
##dL=##return-1;
}
if(y==##yy)beep;
call markNewOn;
return ##dL;
getLargerMin:// 文末方向で、最も小さな行数を返す。
if(##1<##3+1 && ##2<##3+1)##g=linecount+1;
else if(##1>##3+1 && ##2<##3+1)##g=##1;
else if(##1<##3+1 && ##2>##3+1)##g=##2;
else if(##1>##3+1 && ##2>##3+1){
if(##1<=##2)##g=##1;
else ##g= ##2;
}else{
if(##1==##3+1)##g=##2;
else ##g=##1;
}
return ##g;
getSmallerMax://カーソルより小さく、最も大きな数を返す
if(##1>##3+1 && ##2>##3+1){
if(##1==0)##g=-1;
##g=linecount+1;
}else if(##1==##3+1){// || ##2==##3+1){
if(##2!=0 && ##2<##3+1)##g=##2;
else ##g=linecount+1;
}else if(##2==##3+1){// || ##2==##3+1){
if(##1!=0 && ##1<##3+1)##g=##1;
else ##g=linecount+1;
}else if(##1<##3+1 && ##2>##3+1)##g= ##1;
else if(##1>##3+1 && ##2<##3+1)##g= ##2;
else if(##1<##3+1 && ##2<##3+1){
if(##1>=##2)##g= ##1;
else ##g= ##2;
}
if(##1==0 && ##g==0)##g= -1;
return ##g;
dispOrgTitle://基本タイトル表示
call setMarkTitleAll;
call dispTitle;
return;
findNear:// ##1:調査開始y座標// ##2:検索方向↓0、↑1
##j=0;
##near=y+1;
while(1){
##j=##j+1;
if(!##2)call getLargerMin #M[##j],##near,##1;
else call getSmallerMax #M[##j],##near,##1;
##near=##return;
if(##j==9)break;
}
return ##near;
getMarkNext://もっとも近い行マークを見つけ行番号を数値で返す
call findNear ##1,##2;
##near=##return;
if(!##2){
if(##near>=linecount+1){
call findNear -1,0;
##near=##return;
}else if(##near==-1)return ##1+1;
}else{
if(##near==-1){
call findNear linecount,1;
##near=##return;
}
if(##near>=linecount+1)return ##1+1;
}
return ##near;
writeLINE://行マーカーの行番号を記憶(マーカーは固定)
#latestL=#M[##1];
writeininum $f,$fn,str(##1),y+1;
#M[##1]=y+1;
#latestM=##1;
call getIni;
call dispNewTitle;
call markNewOn;
return;
starting:
if(imestate)#imeON=1;
$f=hidemarudir+"\\kakimac\\k_MARK.kdf";
$f0=hidemarudir+"\\kakimac\\kakimac.kdf";
$fn=filename;
#hwnd[#w]=hidemaruhandle(0);
#orgX[#hwnd[#w]]=x;#orgY[#hwnd[#w]]=y;
return;
latestOneUndo://直前登録アンドゥ
if(#latestM){
if(#latestL){
writeininum $f,$fn,str(#latestM),#latestL;
#M[#latestM]=#latestL;
#N=#latestM;
call markNewOn;
#latestM=0;
}else{
writeininum $f,$fn,str(#latestM), 0;
$t[#latestM]="";
#M[#latestM]=0;
call checkOnTheMark;
#N=##return;
call dispTitle;
#latestM=0;
}
}else beep;
return;
checkFileName:// ファイル名のチェック
//if(filename=="")#fileNameNO=1;
//else writeinistr $f,"",0,0;// 無題ファイルも普通とおり記憶するが、ファイル名のあるファイルでk_MARKを起動すると、無題の記憶は破棄される
$latestDate=getinistr($f,$fn,"latest");
call getIni;
//writeinistr $f,$fn,"latest",date;
return;
ending://終了処理
if($t[1]+$t[2]+$t[3]+$t[4]+$t[5]+$t[6]+$t[7]+$t[8]+$t[9]=="")writeinistr $f,filename,0,0;
else writeinistr $f,$fn,"latest",date;
if(#imeON){
if(!imestate)imeswitch;
}else if(imestate)imeswitch;
endmacroall;
setMarkTitleAll://変数格納
if(#M[1]!=0)$t[1]="[1]"+str(#M[1])+" ";else $t[1]="";
if(#M[2]!=0)$t[2]="[2]"+str(#M[2])+" ";else $t[2]="";
if(#M[3]!=0)$t[3]="[3]"+str(#M[3])+" ";else $t[3]="";
if(#M[4]!=0)$t[4]="[4]"+str(#M[4])+" ";else $t[4]="";
if(#M[5]!=0)$t[5]="[5]"+str(#M[5])+" ";else $t[5]="";
if(#M[6]!=0)$t[6]="[6]"+str(#M[6])+" ";else $t[6]="";
if(#M[7]!=0)$t[7]="[7]"+str(#M[7])+" ";else $t[7]="";
if(#M[8]!=0)$t[8]="[8]"+str(#M[8])+" ";else $t[8]="";
if(#M[9]!=0)$t[9]="[9]"+str(#M[9])+" ";else $t[9]="";
return;
getIni://読み込み
$fn=filename;
#M[1]=getininum($f,$fn,"1");
#M[2]=getininum($f,$fn,"2");
#M[3]=getininum($f,$fn,"3");
#M[4]=getininum($f,$fn,"4");
#M[5]=getininum($f,$fn,"5");
#M[6]=getininum($f,$fn,"6");
#M[7]=getininum($f,$fn,"7");
#M[8]=getininum($f,$fn,"8");
#M[9]=getininum($f,$fn,"9");
return;
k_helpMARK://外部分離ヘルプ起動
writeininum $f0,"MARK","helpNumb",##1;
execmacro "k_markHL.mac";
return;