home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 November / VPR9711A.ISO / VPR_DATA / Special / movemn8s / movemn8s.lzh / INP_RIGT.MAC < prev    next >
Text File  |  1997-03-06  |  4KB  |  197 lines

  1. //  右端指定右寄せマクロ ver.8.00
  2. //  by JRくん(GFB03426)  97.3.7
  3.  
  4.  
  5.     if (readonly) {
  6.         message "右端指定右寄せ:「上書き禁止」なので実行を中止します。";
  7.         endmacro;
  8.     }
  9.     if (browsemode) {
  10.         message "右端指定右寄せ:「閲覧モード」なので実行を中止します。";
  11.         endmacro;
  12.     }
  13.  
  14.     $b=searchbuffer;
  15.     #s=searchoption;
  16.  
  17.     //  INIファイルを取得
  18.     $INIdir = getinistr("HIDEMARU.INI", "Env", "MacroPath");
  19.     if ($INIdir == "") $INIdir = hidemarudir;
  20.     $INIfile = $INIdir+"\\MOVEMENU.INI";
  21.  
  22.     //  右端のデフォルト値の設定
  23.     #default = getininum($INIfile, "Margin", "RightMargin");
  24.     if (#default == 0) {
  25.         #default = 70;
  26.     }
  27.  
  28.     $space80 = "                                                                               ";
  29.  
  30. //  ワードラップ使用時には警告
  31.     if ( kinsokustate ) {
  32.         if ( getininum("hidemaru.ini","Env","Wordwrap") == 1 ) {
  33.         question "右端指定右寄せ:\n"
  34.                + "現在この秀丸はワードラップ機能を使用していますが、\n"
  35.                + "このまま処理を続けると、レイアウトが崩れたり、\n"
  36.                + "行の最後が2文字程度欠落したりする場合があります。\n"
  37.                + "\nこのまま処理を続けますか?";
  38.         if ( result == no ) endmacro;
  39.         }
  40.     }
  41.  
  42. disableinvert;
  43.  
  44. //  処理範囲を取得
  45.  
  46.     if ((selecting) || (rectselecting)) {
  47.         #y2 = seltopy;
  48.         #y1 = selendy;
  49.         if (selendx == 0) #y1 = #y1 - 1;
  50.         escape;
  51.     } else {
  52.         #y1 = y;
  53.         #y2 = y;
  54.     }
  55.  
  56. //  右端を入力
  57.  
  58.     #imestate = imestate;
  59.     if (#imestate) imeswitch;
  60.  
  61.     PosInput:
  62.     $Pos = input("右端指定右寄せマクロ\n"
  63.            + "右端の値を入力してください。", str(#default));
  64.     if (result == no) endmacro;
  65.     #Pos = val($Pos);
  66.     if (#Pos <= 0) {
  67.         message "正の値を入力してください。";
  68.         goto PosInput;
  69.     }
  70.     if (#Pos != #default) {
  71.         writeininum $INIfile, "Margin", "RightMargin", #Pos;
  72.     }
  73.  
  74.     if (#imestate) imeswitch;
  75.  
  76.  
  77. //  1行分の文字列を処理するルーチン
  78. OneLineLoop:
  79.     moveto 0, #y1;
  80.  
  81. //  (EOF対策)
  82.     #IsEof = ( #y1 == linecount - 1 );
  83.  
  84. //  その行の開始x座標を取得
  85.  
  86.     #xstart = 0;
  87.     #Code = code;
  88.     if (#Code == 0x0d) {
  89.         //  改行だけだった場合
  90.         goto OneLineEnd;
  91.     } else if ((#Code == 0x20) || (#Code == 0x8140)
  92.         || (#Code == 0)    || (#Code == 0x09))  {
  93.         //  半角/全角スペース・ヌル文字・タブ
  94.         searchdown "[^  \t]",regular;
  95.         if ((y > #y1) || (code == 0x0d) || (code == eof)) {
  96.             //  その行すべてがスペース等だった場合
  97.             goto AllChrDel;
  98.         } else {
  99.             #xstart = x;
  100.         }
  101.     }
  102.  
  103. //  終了x座標を取得
  104.  
  105.     golineend;
  106.     #Code = code;
  107.     if ((#Code == 0x20) || (#Code == 0x8140) || (#Code == 0)
  108.      || (#Code == 0x09) || (#Code == 0x0d)   || (#Code == eof))  {
  109.         //  半角/全角スペース・ヌル文字・タブ・改行・EOFの場合
  110.         searchup "[^  \t]",regular;
  111.     }
  112.     right;
  113.     #xend = x;
  114.     #yend = y;
  115.  
  116.  
  117. //  タブ処理
  118.     moveto 0, #y1;
  119.     beginsel;
  120.     golineend;
  121.     tospace;
  122.     escape;
  123.  
  124. //  カット後の文字列を取得
  125.     $tcutted = gettext(#xstart, #y1, #xend, #yend);
  126.  
  127.  
  128. //  右寄せ
  129.  
  130. //  左側のスペースを計算
  131.     #len = strlen($tcutted);
  132.     if ((#Pos - #len) > 0) {
  133.         #space = #Pos - #len;
  134.     } else {
  135.         #space = 0;
  136.     }
  137.  
  138.     $space = "";
  139.     if (#space > 0) {
  140.  
  141.         #sp1 = #space / 80;
  142.         #sp2 = #space % 80;
  143.  
  144.         while (#sp1 > 0) {
  145.             $space = $space + $space80;
  146.             #sp1 = #sp1 - 1;
  147.         }
  148.         $space = $space + leftstr($space80, #sp2);
  149.     }
  150.  
  151.     moveto 0, #y1;
  152.  
  153. //  前行末に半角分の空きがある場合には改行を追加挿入するための下準備
  154.     $preface = "";
  155.     if (column != 0) {
  156.         up;
  157.         if (linelen < width) $preface = "\n";
  158.         down;
  159.     }
  160.  
  161. //  文字列挿入処理
  162.     beginsel;
  163.     if (#IsEof) {
  164.         golineend;
  165.         insert $preface + $space + $tcutted;
  166.     } else if (#len > width) {
  167.         down;
  168.         insert $preface + $space + $tcutted;
  169.     } else {
  170.         down;
  171.         insert $preface + $space + $tcutted + "\n";
  172.     }
  173.  
  174.     goto OneLineEnd;
  175.  
  176. //  その行すべてがスペース等の場合は、改行と置き換える、または削除
  177.     AllChrDel:
  178.     moveto 0, #y1;
  179.     beginsel;
  180.     if (#IsEof) {
  181.         golineend;
  182.         delete;
  183.     } else {
  184.         down;
  185.         insert "\n";
  186.     }
  187.  
  188. //  ループ
  189.     OneLineEnd:
  190.     #y1 = #y1 - 1;
  191.     if (#y1 >= #y2) goto OneLineLoop;
  192.  
  193. //  終了処理
  194.     setsearch $b,#s;
  195.     enableinvert;
  196.     endmacro;
  197.