home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1998 January (DVD)
/
VPR980100.ISO
/
OLS
/
WIN32
/
KAKIMAC
/
KAKIMACM.LZH
/
K_MARKM.MAC
< prev
next >
Wrap
Text File
|
1996-02-28
|
10KB
|
444 lines
// k_MARKM.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// 移動
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,位置の強制上書き
##F=#i-0x6F;
call writeLINE ##F;
if(#oneActionQuiet)goto ending;
else #N=##F;
}else if(#i==0x20){//Space
call nextMarkNumb y,0;//下方向
}else if(#i==0x10){//Shift
call nextMarkNumb 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_markL.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;
}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;
if(!#oneActionQuiet)break;
else goto ending;
}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;
nextMarkNumb://マークの上なら次のマーカー番号へ。上でないなら、次のマーカーを見つけて移動。
##yy=y;
if(!#N){
call checkOnTheMark;
#N=##return;
}
if(#N<=0){
call getMarkNext ##1,##2;// param:現在の行数,方向
##mL=##return-1;
if(#dispConstLine){
disabledraw;
moveto 0,##mL;
if(#dispLineNum<0)##dL=y-(windowheight/2)+5;
else ##dL=##mL+1-#dispLineNum;
enabledraw ##dL;
}else{
moveto 0,##mL;
##dL=##return-1;
}
call markNewOn;
}else{
call nextMarkNum ##2;
}
return ##dL;
nextMarkNum://次のマーク番号へ
if(!##1)call findNextML #N;
else call findForwordML #N;
#N=##return;
if(#N>0){
call jumpByNumber #N;
if(##return){
call dispNewTitle;
}
}else{
beep;
}
return;
dispOrgTitle://基本タイトル表示
call setMarkTitleAll;
call dispTitle;
return;
findNextML://次検出
while(1){
if(#M[#N+##k+1]!=0){
return #N+##k+1;
}else ##k=##k+1;
if((#N+##k+1)>9){
##k=0;
while(1){
if(#M[##k+1]!=0){
return ##k+1;
}else ##k=##k+1;
if(#N<=##k+1)return 0;
}
return 0;
}
}
return;
findForwordML://前検出
while(1){
if((#N+##k-1)==0){
##k=10;
while(1){
if(#N>=##k-1)return 0;
if(#M[##k-1]!=0){
return ##k-1;
}else ##k=##k-1;
}
return 0;
}
if(#M[#N+##k-1]!=0){
return #N+##k-1;
}else ##k=##k-1;
}
return;
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){
if(##2!=0 && ##2<##3+1)##g=##2;
else ##g=linecount+1;
}else if(##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;
findNear://最近探査
##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;
else call getSmallerMax #M[##j],##near,##1;
##near=##return;
if(##j==9)break;
}
#N=##j;
return ##near;
getMarkNext://もっとも近い行マークを見つけ、行番号を数値で返す
call findNear ##1,##2;// 現在の行数,方向
##near=##return;
if(!##2){
if(##near>=linecount+1){
call findNear -1,##2;
##near=##return;
}else if(##near==-1)return ##1+1;
}else{
if(##near==-1){
call findNear linecount,##2;
##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;
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;
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;
ending://終了処理
if($t[1]+$t[2]+$t[3]+$t[4]+$t[5]+$t[6]+$t[7]+$t[8]+$t[9]=="")writeinistr $f,$fn,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;