マクロの間違いがNo.06078
可愛村のたかし さん 09/03/22 21:15
 
マクロ勉強中の可愛村のたかしです。カーソルのある行を罫線で囲むマクロを考えて
います。
 いつものことなのですが、目標の形になりません。マクロの31行と45行の文が
実行されていないように見えます。 間違いは何処にあるのでしょうか?
(見る画面で、罫線の位置が違って見えるかもしれませんが、自作マクロでは、左側
の罫線が鍵型になっていません)
 また、マクロ文を短くまとめたいのですが、よい方法はないでしょうか?
 
目標の整形した文
あああああああああああああああああ
あああああああああああああああああ
┏━━━━━━━━━━━━━━┓
┃ああああああああああああああ┃
┗━━━━━━━━━━━━━━┛
ああああああああああああああああ
あああああああああああああ

マクロ実行後の文
あああああああああああああああああ
あああああああああああああああああ
━━━━━━━━━━━━━━━┓
┃ああああああああああああああ┃
━━━━━━━━━━━━━━━┛
ああああああああああああああああ
あああああああああああああ
   
//カーソル行を囲む
//罫線
   $a[0] = "─" ;   $a[1] = "│" ;
   $a[2] = "┌" ;   $a[3] = "┐" ;
   $a[4] = "└" ;   $a[5] = "┘" ;
   $a[6] = "━" ;   $a[7] = "┃" ;
   $a[8] = "┏" ;   $a[9] = "┓" ;
  $a[10] = "┗" ;  $a[11] = "┛" ;

//線種の選択
menu "─ 細線" , "━ 太線" ;
#r = result;
#r = ( #r -1 ) * 6 ;

if (linelen > 0) {
      #len = linelen;
        if (#len / 2 * 2 != #len) #len = #len + 1;
            #len = #len + 2 ;
        golinetop;
           insert $a[ #r + 1 ] ;
         golineend;
           insert $a[ #r + 1 ] + "\n" ;
         golinetop;
           insert $[ #r + 4 ] ;
         #a = 1 ;
         while(#a <= #len ){
           insert $a[ #r ] ;
           #a = #a + 2;
         }
         insert $a[ #r + 5 ] ;

         golinetop;
           up;
           up;
           golineend;
         insert "\n" ;

         insert $[ #r + 2 ] ;
         #a = 1 ;
         while( #a <= #len ){
           insert $a[ #r ] ;
           #a = #a + 2;
         }
         insert $a[ #r + 3 ] ;
       }
else {
    message "囲む行の上にカーソルを置いてください。";
     }
endmacro;

[ ]
RE:06078 マクロの間違いがNo.06079
h-tom さん 09/03/22 22:19
 

h-tom です。

> いつものことなのですが、目標の形になりません。マクロの31行と45行の文が
>実行されていないように見えます。 間違いは何処にあるのでしょうか?

単純に、変数が間違っている(?)だけですよ。
>           insert $[ #r + 4 ] ;
            insert $a[ #r + 4 ] ;
                   ==

>         insert $[ #r + 2 ] ;
          insert $a[ #r + 2 ] ;
                 ==

[ ]