home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 November / VPR9711A.ISO / VPR_DATA / Special / Okseik31 / okseik31.lzh / SVSEIKEI.MAC < prev   
Text File  |  1997-03-30  |  21KB  |  807 lines

  1. //  電子メール・会議室発言用整形マクロ マクロサーバ対応版
  2. //  SVSEIKEI.MAC ver.3.1
  3. //  by JRくん(GFB03426)  1996.3.23
  4.  
  5.  
  6.     if (readonly) {
  7.         message "電子メール・会議室発言用整形:\n"
  8.               + "「上書き禁止」なので実行を中止します。";
  9.         endmacro;
  10.     }
  11.     if (browsemode) {
  12.         message "電子メール・会議室発言用整形:\n"
  13.               + "「閲覧モード」なので実行を中止します。";
  14.         endmacro;
  15.     }
  16.  
  17.  
  18.     title "起動の準備をしています:■□□";
  19.  
  20.     //  マクロサーバー起動
  21.     run "macserv.exe /h";
  22.     ddeinitiate "HideMacroServer", "DlgService";
  23.     if( !result ) {
  24.         message "ddeinitiate failed";
  25.         endmacro;
  26.     }
  27.  
  28.  
  29.     title "起動の準備をしています:■■□";
  30.  
  31.     //  範囲選択しているかどうか調べる
  32.     if (rectselecting) {
  33.         //  BOX 範囲選択している場合に範囲選択を変更
  34.         #x1 = seltopx; #y1 = seltopy;
  35.         #x2 = selendx; #y2 = selendy;
  36.         escape;
  37.         moveto #x2, #y2;
  38.         beginsel;
  39.         moveto #x1, #y1;
  40.         #selecting = yes;
  41.     } else {
  42.         #selecting = selecting;
  43.     }
  44.  
  45.     #OptionChange = no;
  46.  
  47.     $Mes[no]  = "しない";
  48.     $Mes[yes] = "する";
  49.  
  50.     //  引用符を取得
  51.     $inyoufuini = getinistr("HIDEMARU.INI", "Env", "RefMark");
  52.     $inyoufu = midstr($inyoufuini, 1, strlen($inyoufuini) - 2);
  53.     #inyoufuLen = strlen($inyoufu);
  54.  
  55.     //  INIファイルを取得
  56.     $INIdir = getinistr("HIDEMARU.INI", "Env", "MacroPath");
  57.     if ($INIdir == "") $INIdir = hidemarudir;
  58.     $INIfile = $INIdir+"\\OKSEIKEI.INI";
  59.  
  60.     //  各種設定を取得
  61.     call GetEnv;
  62.  
  63.  
  64.     title "起動の準備をしています:■■■";
  65.  
  66. Menuoutput:
  67.  
  68.     //  禁則処理・折り返し文字数値の変換処理
  69.     call ConvertKinsokuOrikaesi;
  70.  
  71.     title 0;
  72.  
  73.  
  74.     //  メニュー表示
  75.     if (#AutoRun) {
  76.         writeininum $INIfile,"Env","AutoRun", 0;
  77.     } else {
  78.         call Error;
  79.         if ($$return != "") {
  80.             message $Error;
  81.             call OptionMenuOutput;
  82.             goto Menuoutput;
  83.         }
  84.  
  85.         if (#ConfigDlg) {
  86.         ConfigDlgMenu:
  87.             call OptionMenuOutput;
  88.             if (( $return == "202" ) || ( $return == "0" )) {
  89.                  ddeexecute "exit";
  90.                 endmacro;
  91.             }
  92.             call ConvertKinsokuOrikaesi;
  93.  
  94.             call Error;
  95.             if ($$return != "") {
  96.                 message $Error;
  97.                 goto ConfigDlgMenu;
  98.             }
  99.  
  100.         } else {
  101.             goto MainMenu;
  102.             MainMenuEnd:
  103.         }
  104.     }
  105.  
  106.  
  107.  
  108. //  整形開始
  109.  
  110.     title "整形の準備をしています:■□□□□";
  111.  
  112.     ddeexecute "exit";
  113.     disableinvert;
  114.  
  115.     //  自動インデント を 一時的に 無し にする
  116.     #indentstate = indentstate;
  117.     if (#indentstate != 0) {
  118.         config "i0";
  119.     }
  120.  
  121.     //  上書きモードの場合は、一時的に挿入モードにする
  122.     #overwrite = overwrite;
  123.     if( #overwrite ) overwriteswitch;
  124.  
  125.     //  前処理:タブ -> スペース変換、範囲選択処理
  126.     if ((#selecting) && (#Part)) {
  127.         #x1 = seltopx;        #y1 = seltopy;
  128.         #x2 = selendx;        #y2 = selendy;
  129.         if (#ClipBoard) {
  130.             selectall;
  131.             copy;
  132.             moveto #x1, #y1;
  133.             beginsel;
  134.             moveto #x2, #y2;
  135.          }
  136.         if (#Tospace) tospace;
  137.         escape;
  138.         moveto selendx, selendy;
  139.         #count = lineno;
  140.         if (#x2 != 0) {
  141.             #count = #count + 1;
  142.             insertreturn;
  143.         }
  144.         moveto #x1, #y1;
  145.         #count = #count - lineno;
  146.         if (#x1 != 0) insertreturn;
  147.     } else {
  148.         selectall;
  149.         if (#ClipBoard) {
  150.             copy;
  151.             selectall;
  152.         }
  153.         if (#Tospace) tospace;
  154.         escape;
  155.         gofileend;
  156.         if (column != 0) insertreturn;
  157.         #x1 = 0;        #y1 = 0;
  158.         #count = linecount + 1; //  ←ダミーに適当に大きな値
  159.         gofiletop;
  160.     }
  161.  
  162.     title "整形の準備をしています:■■□□□";
  163.  
  164.     //  ウィンドウを自動的に小さくする を 一時的に off にする
  165.     #AutoShrink = getininum("HIDEMARU.INI", "Env", "AutoShrink");
  166.     if (#AutoShrink) {
  167.         writeininum "HIDEMARU.INI", "Env", "AutoShrink", no;
  168.         envchanged;
  169.     }
  170.  
  171.      //  折り返し文字数の設定
  172.     #prevwindowwidth = windowwidth;
  173.     #prevOrikaesiNum = width;
  174.     config "w" + str(#OrikaesiNum);
  175.  
  176.     //  禁則処理の設定
  177.     #KinsokuChange = no;
  178.     if (#Kinsoku != -1) {
  179.         #prevKinsoku = kinsokustate;
  180.         if (#Kinsoku != #prevKinsoku) {
  181.             #KinsokuChange = yes;
  182.             if (#Kinsoku) {
  183.                 config "k+";
  184.             } else {
  185.                 config "k-";
  186.             }
  187.         }
  188.     }
  189.  
  190.     if (#DisableDraw) disabledraw;
  191.  
  192.     title "整形の準備をしています:■■■□□";
  193.  
  194.     //  ウィンドウを大きくする場合の処理
  195.     #Changewindowwidth = no;
  196.     #WindowNum = #OrikaesiNum;
  197.     if (linenostate) {    //  行番号分の文字数を追加
  198.         call LineNoNum;
  199.         #WindowNum = #WindowNum + ##return + 1;
  200.     }
  201.     if (kinsokustate) {    //  禁則処理分の文字数を追加
  202.         if (getininum("HIDEMARU.INI","Env","CRBurasage") == 1)
  203.             #WindowNum = #WindowNum + 1;
  204.         if (getininum("HIDEMARU.INI","Env","Burasage") > 0)
  205.             #WindowNum = #WindowNum + 2;
  206.     }
  207.     if (#WindowNum > windowwidth) {
  208.         #Changewindowwidth = yes;
  209.         setwindowsize #WindowNum, windowheight;
  210.     }
  211.  
  212.     //  左余白文字列をつくる
  213.     $LeftMargin = "";
  214.     #a = #LeftMargin;
  215.     if ((#a > 0) && (#a < width)) {
  216.         while(#a > 0) {
  217.             $LeftMargin = $LeftMargin + " ";
  218.             #a = #a - 1;
  219.         }
  220.     }
  221.     $InyouMargin = "";
  222.     #a = #InyouMargin;
  223.     if ((#a > 0) && (#a < width)) {
  224.         while(#a > 0) {
  225.             $InyouMargin = $InyouMargin + " ";
  226.             #a = #a - 1;
  227.         }
  228.     }
  229.  
  230.     //  引用行を区別しない場合のダミー処理
  231.     if (#INYOUlineProcess) {
  232.         #inyoufuLen = 0;
  233.         $inyoufu = "\n";
  234.     }
  235.  
  236.     title "整形の準備をしています:■■■■□";
  237.  
  238.     //  「埋め込みコマンド」の長さ、ふるい分け用文字列を取得
  239.     if (#CommandProcess) {
  240.         $CommandArray = "\n"; //←埋め込みコマンド処理しない時のダミー
  241.     } else {
  242.         #a = 1;
  243.         $CommandArray  = "";
  244.         $CommandArray2 = "";
  245.         while (#a <= #NumberOfCommand) {
  246.             #Com[#a] = strlen($Com[#a]);
  247.             $ThisCommand = "\n" + leftstr($Com[#a] + " ",2);
  248.             $CommandArray = $CommandArray + $ThisCommand;
  249.             $CommandArray2= $ThisCommand + $CommandArray2;
  250.             #a = #a+ 1;
  251.         }
  252.     }
  253.  
  254.     title "整形の準備をしています:■■■■■";
  255.  
  256.     //  「顔文字」の長さ、ふるい分け用文字列を取得
  257.     if (#KAOMOJIwrap) {
  258.         #a = 1;
  259.         $KAOMOJIArray  = "";
  260.         while (#a <= #NumberOfKAOMOJI) {
  261.             #KAO[#a] = strlen($KAO[#a]);
  262.             $KAOMOJIArray =$KAOMOJIArray + $KAO[#a];
  263.             #a = #a + 1;
  264.         }
  265.         if (kinsokustate) {
  266.             $TKin = getinistr("HIDEMARU.INI", "Env", "TKin");
  267.         } else {
  268.             $TKin = "\n";
  269.         }
  270.     } else {
  271.         $KAOMOJIArray  = "\n"; //←顔文字ラップしないためのダミー
  272.     }
  273.  
  274.  
  275.     title "整形中...";
  276.  
  277.  
  278. //  メインループ
  279. while (#count > 0) {
  280.  
  281.     if (code == eof) break;
  282.  
  283.     if (code == 0x0d) {
  284.         down;
  285.         golinetop2;
  286.         goto gogo;
  287.     }
  288.  
  289.     //  引用行の処理
  290.     if (gettext(0, y, #inyoufuLen, y) == $inyoufu) {
  291.  
  292.     title "整形中...("+str((y+1)*100/linecount)+"% 完了) [引用行 処理中]";
  293.         insert $InyouMargin;
  294.         golineend2;
  295.         if (code == eof) break;
  296.         down;
  297.         golinetop2;
  298.         goto gogo;
  299.     }
  300.  
  301.     //  埋め込みコマンドの処理
  302.     #ComNo = strstr($CommandArray, "\n" + char(code));
  303.     if (#ComNo != -1) goto LineTopCommandProcess;
  304.     LineTopCommandProcessEnd:
  305.  
  306.     //  普通行の処理
  307. NormalLineLoop:
  308.     insert $LeftMargin;
  309.     golineend;
  310.     if (code == eof) {
  311.         break;
  312.     } else if (code == 0x0d) {
  313.         down;
  314.         golinetop2;
  315.     } else {
  316.         right;
  317.  
  318.         if (strstr($KAOMOJIArray, char(code)) != -1) call KaoMojiWrap;
  319.  
  320.         if (code == eof) {
  321.             break;
  322.         } else if (code == 0x0d) {
  323.             down;
  324.             golinetop2;
  325.         } else {
  326.             insertreturn;
  327.             goto NormalLineLoop;
  328.         }
  329.     }
  330.  
  331.     title "整形中...("+str((y+1)*100/linecount)+"% 完了)";
  332. gogo:
  333.     #count = #count - 1;
  334. }
  335.  
  336.     goto MacroEnd;
  337.  
  338.  
  339.  
  340.     //  「埋め込みコマンド」処理
  341. LineTopCommandProcess:
  342.  
  343. title "整形中...("+str((y+1)*100/linecount)+"% 完了) [埋め込みコマンド 処理中]";
  344.  
  345.     $t = gettext(0, y, linelen, y);
  346.     #a = #ComNo / 3 + 1;
  347.  
  348.     #ComNo2 = strstr($CommandArray2, "\n" + char(code));
  349.     #ComNo2 = #NumberOfCommand - (#ComNo2 / 3);
  350.  
  351.     while (#a <= #ComNo2) {
  352.         if (leftstr($t,#Com[#a]) == $Com[#a]) {
  353.             golineend2;
  354.             if (code == eof) goto MacroEnd;
  355.             down;
  356.             golinetop2;
  357.             break;
  358.         }
  359.         #a = #a + 1;
  360.     }
  361.     if (#a <= #ComNo2) {
  362.         goto gogo;
  363.     }
  364.  
  365.     goto LineTopCommandProcessEnd;
  366.  
  367.  
  368.  
  369.  
  370. //  サブルーチン
  371.  
  372.  
  373.  
  374. //  顔文字ラップ ←このルーチンはちょっと怪しいような気がする(^^;)
  375. KaoMojiWrap:
  376.  
  377. title "整形中...("+str((y+1)*100/linecount)+"% 完了) [顔文字ラップ 処理中]";
  378.  
  379.     #xx = column + 1; #yy = lineno;
  380.  
  381.     #n = 1;
  382.     while (#n <= #NumberOfKAOMOJI) {
  383.         #xxx = #xx - #KAO[#n] + 1;
  384.         if (#xxx < 1) #xxx = 1;
  385.         movetolineno #xxx, #yy;
  386.         left;
  387.         #clm = column;
  388.         beginsel;
  389.         golineend2;
  390.         $LINE = gettext(seltopx, seltopy, selendx, selendy);
  391.         escape;
  392.         movetolineno #xx, #yy;
  393.         #KAOMOJIx = strstr($LINE, $KAO[#n]);
  394.         if ((#KAOMOJIx != -1) &&
  395.            ((#clm + #KAOMOJIx) >= (#xx - #KAO[#n] )) &&
  396.            ((#clm + #KAOMOJIx) <= (#xx + #KAO[#n] - 1))) {
  397.             #xend = #clm + 1 + #KAOMOJIx + #KAO[#n];
  398.             #wrapEndx = #OrikaesiNum + #KAOMOJIwrapMax + 1;
  399.             if (#xend <= #wrapEndx) {
  400.                 movetolineno #xend, #yy;
  401.                  if (strstr($TKin, char(code)) != -1) right;
  402.                 break;
  403.             } else {
  404.                 movetolineno #clm + 1 + #KAOMOJIx, #yy;
  405.                 break;
  406.             }
  407.         }
  408.         #n = #n + 1;
  409.     }
  410.     return;
  411.  
  412.  
  413.  
  414. //  メインダイアログの表示
  415. MainMenu:
  416.  
  417. MainMenuLoop:
  418.  
  419. ddepoke "newdialog", "44,電子メール・会議室発言用 簡易整形 ver.3.1";
  420. ddepoke "newcontrol","text,,現在の設定:";
  421. ddepoke "newcontrol","text,,・折り返す文字数:" + $OrikaesiNum;
  422. ddepoke "newcontrol","text,,・左余白の設定  普通行:" + str(#LeftMargin)
  423.                      + " 引用行:" + str(#InyouMargin);
  424. ddepoke "newcontrol","text,,・引用行を区別:"
  425.                         + $Mes[1-#INYOUlineProcess];
  426. ddepoke "newcontrol","text,,・埋め込みコマンド行を整形しない:"
  427.                         + $Mes[1-#CommandProcess];
  428. ddepoke "newcontrol","text,,・顔文字ラップ:" + $Mes[#KAOMOJIwrap];
  429. ddepoke "newcontrol","text,,・禁則処理:" + $Kinsoku;
  430. ddepoke "newcontrol","text,,・シグネチャ:" + $SigName[#Signature];
  431. ddepoke "newcontrol","text,,・タブ→スペース変換:" + $Mes[#Tospace];
  432.  
  433. if (#selecting) {
  434.     ddepoke "newcontrol","text,,・選択した範囲内のみ処理:" + $Mes[#Part];
  435. } else {
  436.     ddepoke "newcontrol","text,, (全文対象)";
  437. }
  438.  
  439. ddepoke "newcontrol", "button,,整形の実行(&E)";
  440. ddepoke "notify", "101";
  441. ddepoke "newcontrol", "button,,現在の設定の変更(&C)...";
  442. ddepoke "notify", "102";
  443.  
  444. if (#OptionChange) {
  445.     ddepoke "newcontrol", "button,,終了(&Q)";
  446. } else {
  447.     ddepoke "newcontrol", "button,,キャンセル(&Q)";
  448. }
  449. ddepoke "notify", "103";
  450. ddepoke "part", "28";
  451. ddepoke "newcontrol", "button,,ヘルプ(&H)";
  452. ddepoke "notify", "104";
  453.  
  454. call MakeDialog;
  455.  
  456.  
  457. if(( $$return == "103" ) || ( $$return == "0" )) { //  終了/キャンセル
  458.     ddeexecute "exit";
  459.     endmacro;
  460. } else if( $$return == "102" ) { //  現在の設定の変更
  461.     call OptionMenuOutput;
  462.     goto Menuoutput;
  463. } else if( $$return == "104" ) {
  464.     run "WINHELP.EXE " + $INIdir + "\\OKSEIKEI.HLP";
  465.     goto MainMenuLoop;
  466. }
  467. goto MainMenuEnd;
  468.  
  469.  
  470.  
  471. //  設定用ダイアログの表示
  472. OptionMenuOutput:
  473. ddepoke "newdialog", "38,電子メール・会議室発言用 簡易整形 ver.3.1 の 設定";
  474.  
  475. ddepoke "newcontrol", "check,INYOU,引用行を区別する(&I)";
  476. ddepoke "default", str(1 - #INYOUlineProcess);
  477. ddepoke "newcontrol","check,Command,埋め込みコマンド行/ヘッダ部を整形しない(&C)";
  478. ddepoke "default", str(1 - #CommandProcess);
  479.  
  480. ddepoke "newcontrol","check,KAOMOJIwrap,顔文字ラップ(&W)";
  481. ddepoke "default", str(#KAOMOJIwrap);
  482. ddepoke "newcontrol", "text,, 右にはみ出す最大文字数(&R):";
  483. ddepoke "part", "30";
  484. ddepoke "newcontrol", "edit,KAOMOJIwrapMax," + str(#KAOMOJIwrapMax);
  485. ddepoke "part", "5";
  486. ddepoke "newcontrol", "text,,";    //(ダミー)
  487.  
  488. ddepoke "newcontrol", "radio,Kinsoku,禁則処理の設定(&K):";
  489. ddepoke "item", "秀丸の設定に従う(" + $Mes[kinsokustate] + ")(&1)";
  490. ddepoke "item", "しない(&2)";
  491. ddepoke "item", "する(&3)";
  492. ddepoke "default", str(#Kinsoku + 2);
  493. ddepoke "part", "32";
  494. ddepoke "newcontrol", "text,,";    //(ダミー)
  495.  
  496. ddepoke "newcontrol","check,Tospace,タブ→スペース変換(&T)";
  497. ddepoke "default", str(#Tospace);
  498. ddepoke "newcontrol","check,ClipBoard,整形前に全文をクリップボードにコピー(&B)";
  499. ddepoke "default", str(#ClipBoard);
  500. ddepoke "newcontrol","check,DisableDraw,整形途中を表示しない(&D)";
  501. ddepoke "default", str(#DisableDraw);
  502.  
  503. ddepoke "newcolumn", "30";
  504.  
  505. ddepoke "newcontrol", "text,,・折り返す文字数(&M):";
  506. ddepoke "part", "21";
  507. ddepoke "newcontrol", "edit,OrikaesiNum," + str(#TmpOrikaesiNum);
  508. ddepoke "part", "6";
  509. ddepoke "newcontrol", "text,,";    //(ダミー)
  510.  
  511. ddepoke "newcontrol", "text,,・左余白";
  512. ddepoke "part", "9";
  513. ddepoke "newcontrol", "text,,普通行(&N):";
  514. ddepoke "part", "12";
  515. ddepoke "newcontrol", "edit,LeftMargin," + str(#LeftMargin);
  516. ddepoke "part", "5";
  517. ddepoke "newcontrol", "text,,";    //(ダミー)
  518. ddepoke "newcontrol", "text,,";
  519. ddepoke "part", "9";
  520. ddepoke "newcontrol", "text,,引用行(&Y):";
  521. ddepoke "part", "12";
  522. ddepoke "newcontrol", "edit,InyouMargin," + str(#InyouMargin);
  523. ddepoke "part", "5";
  524. ddepoke "newcontrol", "text,,";    //(ダミー)
  525.  
  526. ddepoke "newcontrol", "text,,シグネチャ(&S):";
  527. ddepoke "newcontrol","list,Signature,";
  528. #n = 0;
  529. while (#n <= #SignatureNum) {
  530.     ddepoke "item", $SigName[#n];
  531.     #n = #n + 1;
  532. }
  533. ddepoke "default", str(#Signature + 1);
  534. ddepoke "height", "5";
  535. ddepoke "newcontrol","text,,"; //←ダミー
  536.  
  537. if (#selecting) {
  538.     ddepoke "newcontrol","check,Part,選択した範囲内のみ(&L)";
  539.     ddepoke "default", str(#Part);
  540. } else {
  541.     ddepoke "newcontrol","text,,(全文対象)"; 
  542. }
  543.  
  544. if (#ConfigDlg) {
  545.     ddepoke "newcontrol", "button,,実行(&O)";
  546. } else {
  547.     ddepoke "newcontrol", "button,,&Ok";
  548. }
  549.  
  550. ddepoke "notify", "201";
  551. ddepoke "part", "11";
  552. ddepoke "newcontrol", "button,,キャンセル(&Q)";
  553. ddepoke "notify", "202";
  554. ddepoke "part", "11";
  555. ddepoke "newcontrol", "button,,ヘルプ(&H)";
  556. ddepoke "notify", "203";
  557.  
  558.  
  559. call MakeDialog;
  560. $return = $$return;
  561.  
  562. if( $return == "203" ) {
  563.     run "WINHELP.EXE " + $INIdir + "\\OKSEIKEI.HLP";
  564.     goto OptionMenuOutput;
  565. }
  566. if (($return != "0") && ($return != "202")) {
  567.  
  568. #TmpOrikaesiNum   =     val(dderequest("getstate OrikaesiNum"));
  569. #CommandProcess   = 1 - val(dderequest("getstate Command"));
  570. #INYOUlineProcess = 1 - val(dderequest("getstate INYOU"));
  571. #LeftMargin       =     val(dderequest("getstate LeftMargin"));
  572. #InyouMargin      =     val(dderequest("getstate InyouMargin"));
  573. #Kinsoku          =     val(dderequest("getstate Kinsoku")) - 2;
  574. #KAOMOJIwrap      =     val(dderequest("getstate KAOMOJIwrap"));
  575. #KAOMOJIwrapMax   =     val(dderequest("getstate KAOMOJIwrapMax"));
  576. #Signature        =     val(dderequest("getstate Signature")) - 1;
  577. if (#selecting) {
  578.     #Part     =     val(dderequest("getstate Part"));
  579. }
  580. #Tospace          =     val(dderequest("getstate Tospace"));
  581. #ClipBoard        =     val(dderequest("getstate ClipBoard"));
  582. #DisableDraw      =     val(dderequest("getstate DisableDraw"));
  583.  
  584. writeininum $INIfile,"Env","OrikaesiNum",     #TmpOrikaesiNum;
  585. writeininum $INIfile,"Env","CommandProcess",  #CommandProcess;
  586. writeininum $INIfile,"Env","INYOUlineProcess",#INYOUlineProcess;
  587. writeininum $INIfile,"Env","LeftMargin",      #LeftMargin;
  588. writeininum $INIfile,"Env","InyouMargin",     #InyouMargin;
  589. writeininum $INIfile,"Env","Kinsoku",         #Kinsoku;
  590. writeininum $INIfile,"Env","KAOMOJIwrap",     #KAOMOJIwrap;
  591. writeininum $INIfile,"Env","KAOMOJIwrapMax",  #KAOMOJIwrapMax;
  592. writeininum $INIfile,"Env","Signature",       #Signature;
  593. if (#selecting) {
  594.     writeininum $INIfile,"Env","Part",    #Part;
  595. }
  596. writeininum $INIfile,"Env","Tospace",         #Tospace;
  597. writeininum $INIfile,"Env","ClipBoard",       #ClipBoard;
  598. writeininum $INIfile,"Env","DisableDraw",     #DisableDraw;
  599.  
  600. #OptionChange = yes;
  601.  
  602. }
  603. return;
  604.  
  605.  
  606.  
  607. //  マクロサーバでダイアログを作成
  608. MakeDialog:
  609.     ##hwnd = hidemaruhandle(0);
  610.     ddeexecute "dialog " + str(##hwnd);
  611.     $$a = "";
  612.     ddestartadvice "dlgresult", $$a;
  613.     while( strlen($$a) == 0 ) {
  614.         ddewaitadvice $$a, 100;
  615.     }
  616.     ddestopadvice "dlgresult";
  617.     ddeexecute "enddialog";
  618.     return $$a;
  619.  
  620.  
  621.  
  622. //  禁則処理・折り返し文字数値の変換処理
  623. ConvertKinsokuOrikaesi:
  624.  
  625.     //  禁則処理の設定
  626.     if (#Kinsoku == -1) {
  627.         $Kinsoku = "秀丸の設定に従う(" + $Mes[kinsokustate] + ")";
  628.     } else {
  629.         $Kinsoku = $Mes[#Kinsoku];
  630.     }
  631.  
  632.     //  折り返し文字数の設定
  633.     if (#TmpOrikaesiNum == 0) {
  634.         $OrikaesiNum = "(折り返し文字数)";
  635.         #OrikaesiNum = width;
  636.     } else if (#TmpOrikaesiNum < 0) {
  637.         $OrikaesiNum = "(折り返し文字数)" + str(#TmpOrikaesiNum);
  638.         #OrikaesiNum = width + #TmpOrikaesiNum;
  639.     } else {
  640.         $OrikaesiNum = str(#TmpOrikaesiNum);
  641.         #OrikaesiNum = #TmpOrikaesiNum;
  642.     }
  643.     return;
  644.  
  645.  
  646.  
  647. //  行番号の表示されている桁数を返すサブルーチン
  648. LineNoNum:
  649.     ##LineCount = linecount;
  650.     ##LineNoNumber = 4;
  651.     ##mm = 10000;
  652.     while (1) {
  653.         if (##LineCount / ##mm < 1) break;
  654.         ##LineNoNumber = ##LineNoNumber + 1;
  655.         ##mm = ##mm * 10;
  656.     }
  657.     return ##LineNoNumber;
  658.  
  659.  
  660.  
  661. //  各種設定を取得
  662. GetEnv:
  663.     //  折り返す文字数
  664.     #TmpOrikaesiNum  =getininum($INIfile,"Env","OrikaesiNum");
  665.     //  普通行の左余白数
  666.     #LeftMargin      =getininum($INIfile,"Env","LeftMargin");
  667.     //  引用行の左余白数
  668.     #InyouMargin     =getininum($INIfile,"Env","InyouMargin");
  669.     //  引用符付きの行の右端を整形するかどうか
  670.     #INYOUlineProcess=getininum($INIfile,"Env","INYOUlineProcess");
  671.     //  埋め込みコマンド行を整形するかどうか
  672.     #CommandProcess  =getininum($INIfile,"Env","CommandProcess");
  673.     //  禁則処理をするかどうか
  674.     #Kinsoku         =getininum($INIfile,"Env","Kinsoku");
  675.     //  顔文字ラップをするかどうか
  676.     #KAOMOJIwrap     =getininum($INIfile,"Env","KAOMOJIwrap");
  677.     //  選択した範囲内のみ処理するかどうか
  678.     #Part            =getininum($INIfile,"Env","Part");
  679.     //  シグネチャの指定
  680.     #Signature       =getininum($INIfile,"Env","Signature");
  681.     //  シグネチャ文字列の数
  682.     #SignatureNum    =getininum($INIfile,"Signature_Name","SignatureNum");
  683.     //  シグネチャ項目
  684.     $SigName[0] = "(なし)";
  685.     #n = 1;
  686.     while (#n <= #SignatureNum) {
  687.         $SigName[#n] = getinistr($INIfile,"Signature_Name",str(#n));
  688.         $SigFile[#n] = getinistr($INIfile,"Signature_File",str(#n));
  689.         #n = #n + 1;
  690.     }
  691.     // 「埋め込みコマンド」の項目数
  692.     #NumberOfCommand=getininum($INIfile,"IgnoreLineTop","NumberOfCommand");
  693.     // 「埋め込みコマンド」項目
  694.     #n = 1;
  695.     while (#n <= #NumberOfCommand) {
  696.         $Com[#n] = getinistr($INIfile,"IgnoreLineTop",str(#n));
  697.         #n = #n + 1;
  698.     }
  699.     // 「顔文字ラップ」の項目数
  700.     #NumberOfKAOMOJI =getininum($INIfile,"KAOMOJIwrap","NumberOfKAOMOJI");
  701.     // 「顔文字ラップ」項目
  702.     #n = 1;
  703.     while (#n <= #NumberOfKAOMOJI) {
  704.         $KAO[#n] = getinistr($INIfile,"KAOMOJIwrap",str(#n));
  705.         #n = #n + 1;
  706.     }
  707.     //  「顔文字ラップ」時の、右端をはみ出す最大文字数
  708.     #KAOMOJIwrapMax  =getininum($INIfile,"Env","KAOMOJIwrapMax");
  709.     // タブ→スペース変換をするかどうか
  710.     #Tospace         =getininum($INIfile,"Env","Tospace");
  711.     // 整形前に全文をクリップボードにコピーするかどうか
  712.     #ClipBoard       =getininum($INIfile,"Env","ClipBoard");
  713.     // 整形途中を表示しないかどうか(1:表示しない, 0:表示する)
  714.     #DisableDraw     =getininum($INIfile,"Env","DisableDraw");
  715.     // いきなり設定画面
  716.     #ConfigDlg       =getininum($INIfile,"Env","ConfigDlg");
  717.     // 自動実行
  718.     #AutoRun         =getininum($INIfile,"Env","AutoRun");
  719.  
  720.     return;
  721.  
  722.  
  723.  
  724. //  終了処理
  725. MacroEnd:
  726.  
  727.     if (#KinsokuChange) {
  728.         if (#prevKinsoku) {
  729.             config "k+";
  730.         } else {
  731.             config "k-";
  732.         }
  733.     }
  734.  
  735.     config "w" + str(#prevOrikaesiNum);
  736.      if (#Changewindowwidth) setwindowsize #prevwindowwidth, windowheight;
  737.  
  738.     if (#AutoShrink) {
  739.         writeininum "HIDEMARU.INI", "Env", "AutoShrink", yes;
  740.         envchanged;
  741.     }
  742.  
  743.     if (#indentstate == 1) {
  744.         config "i1";
  745.     } else if (#indentstate == 3) {
  746.         config "i2";
  747.     } else if (#indentstate == 5) {
  748.         config "i3";
  749.     } else if (#indentstate == 7) {
  750.         config "i4";
  751.     }
  752.  
  753.     title 0;
  754.  
  755.     if (#DisableDraw) enabledraw;
  756.  
  757.     //  シグネチャ挿入
  758.     if (#Signature) {
  759.         gofileend;
  760.         if (column != 0) insertreturn;
  761.         $SignatureFile = $SigFile[#Signature];
  762.         $Mac = rightstr($SignatureFile, 4);
  763.         if (($Mac == ".mac") || ($Mac == ".MAC")) {
  764.             execmacro  $SignatureFile;
  765.         } else {
  766.             insertfile $INIdir + "\\" + $SignatureFile;
  767.         }
  768.     }
  769.  
  770.     if( #overwrite ) overwriteswitch;
  771.     enableinvert;
  772.  
  773.     endmacro;
  774.  
  775.  
  776.  
  777. Error:
  778.     //  エラー処理
  779.     $Error = "";
  780.  
  781.     if (#OrikaesiNum < 20) {
  782.         $Error =  "・折り返す文字数の設定値が小さすぎます。\n"
  783.             + " 20 から 250 までの間になるように\n"
  784.             + " 設定値を確認・変更してください。\n\n";
  785.     } else if ((#OrikaesiNum < 20) || (#OrikaesiNum > 250)) {
  786.         $Error =  "・折り返す文字数の設定値が大きすぎます。\n"
  787.             + " 20 から 250 までの間になるように\n"
  788.             + " 設定値を確認・変更してください。\n\n";
  789.     }
  790.  
  791.     if (#LeftMargin < 0) {
  792.         $Error = $Error + "・普通行の左余白が小さすぎます。\n"
  793.             + " 0または正の数を入力してください。\n\n";
  794.     } else if (#LeftMargin >= #OrikaesiNum) {
  795.         $Error = $Error + "・普通行の左余白が大きすぎます。\n"
  796.         + " 折り返す文字数よりも小さい値を入力してください。\n\n";
  797.     }
  798.  
  799.     if (#InyouMargin < 0) {
  800.         $Error = $Error + "・引用行の左余白が小さすぎます。\n"
  801.             + " 0または正の数を入力してください。\n\n";
  802.     } else if (#InyouMargin >= #OrikaesiNum) {
  803.         $Error = $Error + "・引用行の左余白が大きすぎます。\n"
  804.         + " 折り返す文字数よりも小さい値を入力してください。\n\n";
  805.     }
  806.     return $Error;
  807.