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

  1. //  左寄せマクロ ver.8.00
  2. //  by JRくん(GFB03426)  97.3.7
  3.  
  4.     if (readonly) {
  5.         message "左寄せ:「上書き禁止」なので実行を中止します。";
  6.         endmacro;
  7.     }
  8.     if (browsemode) {
  9.         message "左寄せ:「閲覧モード」なので実行を中止します。";
  10.         endmacro;
  11.     }
  12.  
  13.     $b=searchbuffer;
  14.     #s=searchoption;
  15.  
  16.     disableinvert;
  17.  
  18. //  処理範囲を取得
  19.  
  20.     if ((selecting) || (rectselecting)) {
  21.         #y1 = seltopy;
  22.         #y2 = selendy;
  23.         if (selendx == 0) #y2 = #y2 - 1;
  24.         escape;
  25.     } else {
  26.         #y1 = y;
  27.         #y2 = y;
  28.     }
  29.  
  30. //  1行分の文字列を処理するルーチン
  31.     OneLineLoop:
  32.     moveto 0, #y1;
  33.  
  34. //  (EOF対策)
  35.     #IsEof = ( #y1 == linecount - 1 );
  36.  
  37. //  その行の開始x座標を取得
  38.  
  39.     #xstart = 0;
  40.     #Code = code;
  41.     if (#Code == 0x0d) {
  42.         //  改行だけだった場合
  43.         goto OneLineEnd;
  44.     } else if ((#Code == 0x20) || (#Code == 0x8140)
  45.         || (#Code == 0)    || (#Code == 0x09))  {
  46.         //  半角/全角スペース・ヌル文字・タブ
  47.         searchdown "[^  \t]",regular;
  48.         if ((y > #y1) || (code == 0x0d) || (code == eof)) {
  49.             //  その行すべてがスペース等だった場合
  50.             goto AllChrDel;
  51.         } else {
  52.             #xstart = x;
  53.         }
  54.     }
  55.  
  56. //  終了x座標を取得
  57.  
  58.     golineend;
  59.     #Code = code;
  60.     if ((#Code == 0x20) || (#Code == 0x8140) || (#Code == 0)
  61.      || (#Code == 0x09) || (#Code == 0x0d)   || (#Code == eof))  {
  62.         //  半角/全角スペース・ヌル文字・タブ・改行・EOFの場合
  63.         searchup "[^  \t]",regular;
  64.     }
  65.     right;
  66.     #xend = x;
  67.     #yend = y;
  68.  
  69.  
  70. //  タブ処理
  71.     moveto 0, #y1;
  72.     beginsel;
  73.     golineend;
  74.     tospace;
  75.     escape;
  76.  
  77. //  カット後の文字列を取得
  78.     $tcutted = gettext(#xstart, #y1, #xend, #yend);
  79.  
  80.  
  81. //  左寄せ
  82.  
  83.     #len = strlen($tcutted);
  84.  
  85.     moveto 0, #y1;
  86.  
  87. //  前行末に半角分の空きがある場合には改行を追加挿入するための下準備
  88.     $preface = "";
  89.     if (column != 0) {
  90.         up;
  91.         if (linelen < width) $preface = "\n";
  92.         down;
  93.     }
  94.  
  95. //  文字列挿入処理
  96.     beginsel;
  97.     if (#IsEof) {
  98.         golineend;
  99.         insert $preface + $tcutted;
  100.     } else if (#len >= width) {
  101.         down;
  102.         insert $preface + $tcutted;
  103.     } else {
  104.         down;
  105.         insert $preface + $tcutted + "\n";
  106.     }
  107.  
  108.     goto OneLineEnd;
  109.  
  110. //  その行すべてがスペース等の場合は、改行と置き換える、または削除
  111.     AllChrDel:
  112.     moveto 0, #y1;
  113.     beginsel;
  114.     if (#IsEof) {
  115.         golineend;
  116.         delete;
  117.     } else {
  118.         down;
  119.         insert "\n";
  120.     }
  121.  
  122. //  ループ
  123.     OneLineEnd:
  124.     #y1 = #y1 + 1;
  125.     if (#y1 <= #y2) goto OneLineLoop;
  126.  
  127. //  終了処理
  128.     setsearch $b,#s;
  129.     enableinvert;
  130.     endmacro;
  131.