「宛先名挿入マクロ」に機能追加の要望No.00224
siniti さん 08/06/08 02:33
 
ブックンさん

sinitiです。

「宛先名挿入マクロ Ver1.16」を便利で使わせて頂いております。
あわせて、「送付先チェックマクロ」も使わせて頂き、いろいろ要望を取り入れて頂
き、感謝いたしております。

そこで、「宛先名挿入マクロ Ver1.16」についても
下記の要望をご検討頂けないでしょうか?

「要望内容」
 宛先名の先頭に秀丸メールのアドレス帳に「グループ」を登録している場合に、宛
先名の先頭に「グループ名」を付けて頂きたい。
 これはOptionで結構です。できれば先頭にグループ名を付けるか否かの選択もOpti
onでできればモアベターです。

「要望理由」
 会社の中での人事異動により組織改定、本部、部、課等が結構換わるため、アドレ
ス帳の個人単位に部署名を設定しているとメンテナンスが大変です。
そこで、私は所属名をグループ名にしており、所属が変わった人のアドレス帳をドラ
ック&ドロップで新しいグループに移動しています。
このグループ名をうまく使う方法が無いかと考えました。

ご検討のほどよろしくお願いいたします。

[ ]
RE:00224 「宛先名挿入マクロ」に機能追加No.00225
プックン さん 08/06/11 00:49
 
sinitiさん、こんばんは。

>そこで、「宛先名挿入マクロ Ver1.16」についても
>下記の要望をご検討頂けないでしょうか?
>
>「要望内容」
> 宛先名の先頭に秀丸メールのアドレス帳に「グループ」を登録している場合に、
>宛先名の先頭に「グループ名」を付けて頂きたい。
> これはOptionで結構です。できれば先頭にグループ名を付けるか否かの選択もOpt
>ionでできればモアベターです。
いま下記機能があります。

|To,Ccの補足情報挿入処理。Default=0(挿入しない)
|    会社名,部署名をアドレス帳の備考欄に設定しておくことで、
|    その情報を名前の前に挿入することができる。
|    [hmml_ins_name.mac]
|    part_mode=0
|    part_modeとは(Default=0)
|    0 = 補足情報を挿入しない。
|    1 = アドレス帳の備考 を取得してつける
|    2 = アドレス帳の備考2を取得してつける
|    3 = アドレス帳の備考3を取得してつける
|    4 = アドレス帳の備考4を取得してつける(Ver4.64 Beta8以降で有効)
|    5 = アドレス帳の備考5を取得してつける(Ver4.64 Beta8以降で有効)
|    6 = アドレス帳の備考6を取得してつける(Ver4.64 Beta8以降で有効)
|    7 = アドレス帳の備考7を取得してつける(Ver4.64 Beta8以降で有効)
|    8 = アドレス帳の備考8を取得してつける(Ver4.64 Beta8以降で有効)
この機能に、このモードで下記のような動作を追加できるか検討してみます。
     9 = アドレス帳に登録されているその人のグループ名を取得してつける
        FindBookGroup関数を利用して、アドレス帳のグループ名を取得
        してつける
    10 = アドレス帳に登録されているその人のグループのパス名を取得してつける
        FindBookGroupPath関数を利用して、アドレス帳のグループパス名を取得
        してつける

ちなみに、 ブックン(bukkun)ではなくプックン(pukkun)です。
仕事でだいぶへたっているので、ぼちぼち修正できるか検討してみます。

[ ]
RE:00225 「宛先名挿入マクロ」に機能追加No.00226
siniti さん 08/06/11 07:12
 
プックン さん

sinitiです。

>ちなみに、 ブックン(bukkun)ではなくプックン(pukkun)です。

まず、最初にお詫び申し上げます。
名前(ハンドル名)を間違っており、ご指摘を頂きましたこと。
言い訳ではありませんが、目が悪意にもかかわらず、高解像度のディスプレイで
表示の文字フォントを「小」にしていたため、プ(pu)をブ(bu)と
読み違えておりました。

>この機能に、このモードで下記のような動作を追加できるか検討してみます。
>     9 = アドレス帳に登録されているその人のグループ名を取得してつける
>        FindBookGroup関数を利用して、アドレス帳のグループ名を取得
>        してつける
>    10 = アドレス帳に登録されているその人のグループのパス名を取得してつける
>        FindBookGroupPath関数を利用して、アドレス帳のグループパス名を取得
>        してつける
>仕事でだいぶへたっているので、ぼちぼち修正できるか検討してみます。

上記を検討していただけるとのこと、感謝しています。
よろしくお願いします。

ひとつの質問と、ひとつのお願いです。
質問1)上記の機能追加でグループ名をつける時の「アドレス帳のグループパス名」と
はどういう内容でしょうか?
 (私は秀丸マクロが勉強不足なので)
お願い1)上記の機能でグループ名を取得してつけるグループ名または、グループを
 つけないグループをオプションででも推定できるようにしていただけるとありがた
いです。
  →その理由は、アドレス帳に登録しているアドレスすべてにグループを着けたく
ないのです。
  できれば一部のグループあるいは指定したグループ以外の設定ができれば
  ベターです。

気長にお待ちしております。

[ ]
RE:00226 「宛先名挿入マクロ」に機能追加No.00227
プックン さん 08/06/12 00:00
 
sinitiさん、こんばんは。

>ひとつの質問と、ひとつのお願いです。
>質問1)上記の機能追加でグループ名をつける時の「アドレス帳のグループパス名」
>とはどういう内容でしょうか?
> (私は秀丸マクロが勉強不足なので)

 下記サンプルマクロをファイルに保存して、秀丸メールで実行してもらえば
 どんな感じになるかわかると思います。
 グループの階層の前に"\"がつくので、
 (1)最初の"\"を削除
 (2)"\"記号を指定した文字列に置換
 とかの処理を実施してグループ情報を利用すればいいかなと思っています。
 
//-------sample.mac-------------
$$email = "アドレス帳に存在するe-mailアドレスを入力してください";
$$email = input($$email);
if($$email == "") {
    message "e-mailアドレス情報が入力されませんでした\n" ;
    goto LEND;
}

//機能:TKInfo.dllをロードする
loaddll "TKInfo.dll";

//FindBookGroup関数(TkInfo.dll)
//アドレス帳に登録されているその人のグループ名を返します。
$$group = dllfuncstr( "FindBookGroup", $$email);
//FindBookGroupPath関数(TkInfo.dll)
//アドレス帳に登録されているグループのパス名、
//つまり、グループの階層全体を返します。各グループ名の前には「\」の記号が付
きます。
//先頭のグループ名は、"アドレス帳"か、またはLDAPサーバーの名前となります。
$$grouppath = dllfuncstr( "FindBookGroupPath", $$email);

//左端が"\"の場合、削除する。
if(leftstr( $$grouppath, 1 ) == "\\"){
 $$grouppath_ = midstr( $$grouppath, 1, strlen($$grouppath) -1 ) ;
}
else
 $$grouppath_ = $$grouppath ;

//"\"を")"に置換する。
freedll ;
loaddll hidemarudir + "\\DengakuDLL.dll";
//loaddllされている場合、ロードされているDLLのファイル名を返します。
//田楽dllの機能を利用
//GSUB
//使い方:$s = dllfuncstr("GSUB",$s1,$s2,$s3,#n4);
//説明:文字列中の部分文字列を別の文字列に置換します。
//引数:
// $s1:置換対象文字列
// $s2:検索文字列
// $s3:置換文字列
// #n4:最初から何個の文字列を置換するか
// (-1 を指定すると見つかったものを全て置換します)
//返り値:置換された結果の文字列が返ります。
$$grouppath_ = dllfuncstr("GSUB",$$grouppath_,"\\",")" ,-1);

message
    "e-mail=\n  " + $$email + "\n" +
    "Group=\n  " + $$group + "\n" +
    "GroupPath=\n  " + $$grouppath + "\n" +
    "GroupPath:文字列置換後=\n  " + $$grouppath_ ;

LEND:
freedll;
endmacro;
//-------sample.mac-------------

>お願い1)上記の機能でグループ名を取得してつけるグループ名または、グループを
> つけないグループをオプションででも推定できるようにしていただけるとありが
>たいです。
>  →その理由は、アドレス帳に登録しているアドレスすべてにグループを着けた
>くないのです。
>  できれば一部のグループあるいは指定したグループ以外の設定ができれば
>  ベターです。
この機能を実現する場合、
 (1)マクロの設定を保存しているiniファイルとかに、処理するグループ名を
    登録しておいて、FindBookGroup関数などでグループを取得した文字列
    を比較して、グループ名を利用するしないを判別する。
 (2)対象のアドレスの備考欄を利用して、グループ情報を有効にすることが
    認識できるような記述をしておけば、グループ名を利用する。という処理
    を実現する。
    例.
    アドレス帳 備考8に"enable_group"という記述をしている場合、
    " 9 = アドレス帳に登録されているその人のグループ名を取得してつける"
    "10 = アドレス帳に登録されているその人のグループのパス名を取得してつける"
    の動作を実施する。
みたいな方法があるのかなと思います。
(1)は、登録しているiniファイルのグループ情報が複数あるときに、取得したグループ
情報と一致判定するのがマクロを作るときにややこしいです。
(2)は、どの備考(備考,備考2,3,....8)からグループ情報を利用する"enable_group"
を取得するのかというのがマクロをつくるときにややこしそうです。あと、使用者の
方がグループ情報を挿入したいアドレス毎に備考に"enable_group"という情報を入れる
のがややこしそうです。

(2)で作ってみようかなと思います。"enable_group"は、とりあえず備考8から取得
するような形で作れるか検討してみます。

[ ]
RE:00227 「宛先名挿入マクロ」に機能追加No.00228
siniti さん 08/06/12 01:02
 
ぷっくんさん

sinitiです。
>>質問1)上記の機能追加でグループ名をつける時の「アドレス帳のグループパス名」
>とはどういう内容でしょうか?
>> (私は秀丸マクロが勉強不足なので)
>
> 下記サンプルマクロをファイルに保存して、秀丸メールで実行してもらえば
> どんな感じになるかわかると思います。

よく、判りました。
ありがとうございました。

>>お願い1)上記の機能でグループ名を取得してつけるグループ名または、グループを
>> つけないグループをオプションででも推定できるようにしていただけるとありが
>たいです。
>>  →その理由は、アドレス帳に登録しているアドレスすべてにグループを着けた
>くないのです。
>>  できれば一部のグループあるいは指定したグループ以外の設定ができれば
>>  ベターです。
>この機能を実現する場合、
> (1)マクロの設定を保存しているiniファイルとかに、処理するグループ名を
>    登録しておいて、FindBookGroup関数などでグループを取得した文字列
>    を比較して、グループ名を利用するしないを判別する。
> (2)対象のアドレスの備考欄を利用して、グループ情報を有効にすることが
>    認識できるような記述をしておけば、グループ名を利用する。という処理
>    を実現する。
>    例.
>    アドレス帳 備考8に"enable_group"という記述をしている場合、
>    " 9 = アドレス帳に登録されているその人のグループ名を取得してつける"
>    "10 = アドレス帳に登録されているその人のグループのパス名を取得してつける"
>    の動作を実施する。
>みたいな方法があるのかなと思います。
>(1)は、登録しているiniファイルのグループ情報が複数あるときに、取得したグループ
>情報と一致判定するのがマクロを作るときにややこしいです。
>(2)は、どの備考(備考,備考2,3,....8)からグループ情報を利用する"enable_group"
>を取得するのかというのがマクロをつくるときにややこしそうです。あと、使用者の
>方がグループ情報を挿入したいアドレス毎に備考に"enable_group"という情報を入れる
>のがややこしそうです。
>
>(2)で作ってみようかなと思います。"enable_group"は、とりあえず備考8から取得
>するような形で作れるか検討してみます。

私のイメージが、(1)でした。
何故なら、(2)でご指摘のとおり挿入したいグループに属しているアドレス単位に挿
入する、しないを個別に指定する必要があので使用者から見ると大変かな?。
(2)でも、解決策があるように思います。
 それは、秀丸メールのアドレス帳の仕様を追加しなければなりませんが、
 アドレス帳で、現在「グループの追加」では、グループ名」のみしか設定
 できませんが、ここに属性(たとえば今回のようなグループの備考)
を持てば
 言いように思います。

→To:秀まるおさん
  上記のような、アドレス帳のグル−プに属性を追加する機能追加は無理でしょう
か?
  ご検討いただけないでしょうか?

また、設定は、汎用的にするためには、たとえば以下のような
事が考えられます。
(1)の場合は、puku.iniに設定したグループについて行う。
(2)の場合の、備考のどこを使うかも、puku.iniに持てば汎用性がありますね。(マ
クロは難しくなりますが)


[ ]
RE:00228 「宛先名挿入マクロ」に機能追加No.00233
プックン さん 08/06/17 01:11
 
sinitiさん、こんばんは。

>私のイメージが、(1)でした。
>何故なら、(2)でご指摘のとおり挿入したいグループに属しているアドレス単位に挿
>入する、しないを個別に指定する必要があので使用者から見ると大変かな?。

(1)で作成することはちょっと面倒なのですが、可能です。
ただし、使用される方が、グループ名をpuku.iniファイルに記入するのが面倒。
マクロなどでグループ名を容易に指定する方法があればよいのですが、どのようにす
ればよいのか
具体的な方法が思い浮かばないです。
(2)のマクロをとりあえず作ってみました。末尾のマクロを試しに使ってみてください。
グループ情報を挿入する場合アドレス帳の備考8に小文字で"enable_group"を定義して
おいてください。備考8固定でつくっています。
もし備考8以外にしたければ、"FindBookNote8"の部分を使用したい備考にあわせて
修正していただければ動作するとおもいます。
"マクロ抜粋"
    else if(##part_mode == 9){
        //FindBook8関数(TkInfo.dll)
        //パラメータで渡された名前+Emailの中からEmail部分を取り出し、
        //そのEmailをアドレス帳から検索し、見つかった場合はその名前+Emailを
返し、
        //見つからなかった場合はパラメータで渡された名前+Emailを返します。
        //パラメータにはEmailのみでも名前+Emailでもどちらでも受け付けます。
        //アドレス帳に同じEmailが複数登録されている場合は一番先頭に登録され
ているメンバーのみが対象となります。
        //備考8の内容を返します。
        $$en = dllfuncstr( "FindBookNote8", $$inf);
        if($$en == "enable_group"){
        ・省略・
    else if(##part_mode == 10){
        $$en = dllfuncstr( "FindBookNote8", $$inf);
        if($$en == "enable_group"){
"マクロ修正"備考5を使用する場合
    else if(##part_mode == 9){
        //FindBook8関数(TkInfo.dll)
        //パラメータで渡された名前+Emailの中からEmail部分を取り出し、
        //そのEmailをアドレス帳から検索し、見つかった場合はその名前+Emailを
返し、
        //見つからなかった場合はパラメータで渡された名前+Emailを返します。
        //パラメータにはEmailのみでも名前+Emailでもどちらでも受け付けます。
        //アドレス帳に同じEmailが複数登録されている場合は一番先頭に登録され
ているメンバーのみが対象となります。
        //備考8の内容を返します。
        $$en = dllfuncstr( "FindBookNote5", $$inf); //FindBookNote8=>FindBoo
kNote5
        if($$en == "enable_group"){
        ・省略・
    else if(##part_mode == 10){
        $$en = dllfuncstr( "FindBookNote5", $$inf); //FindBookNote8=>FindBoo
kNote5
        if($$en == "enable_group"){

>また、設定は、汎用的にするためには、たとえば以下のような
>事が考えられます。
>(1)の場合は、puku.iniに設定したグループについて行う。
>(2)の場合の、備考のどこを使うかも、puku.iniに持てば汎用性がありますね。(マ
>クロは難しくなりますが)
このあたりは、ぼちぼちと考えて作っていきます。
どちらかというと、備考のどこを使うかを処理するマクロはHMML_INS_NAME.MACでは、
難しくありません。
下記のように設定情報から分岐をチェックする処理をずらずらと記述すればよいだけ
です。
    //グループEnable情報取得場所
    ##group_en = getininum($$ini,$$Section,"group_en");
    if(##group_en == 0){
        $$en = dllfuncstr( "FindBookNote", $$inf);
    }
    else if(##group_en == 1){
        $$en = dllfuncstr( "FindBookNote2", $$inf);
    }
    else if(##group_en == 2){
        $$en = dllfuncstr( "FindBookNote3", $$inf);
    }
        ・
        ・
        ・
    else if(##group_en == 7){
        $$en = dllfuncstr( "FindBookNote8", $$inf);
    }
どちらかというと、"HMML_INS_NAME_SETUP.MAC"の作成のほうがややこしいかも。


//------------HMML_INS_NAME.MAC-------------
$$ver  = "1.17Beta1";
$$date = "2007/07/27";
$$author = "プックン" ;
$$fname = currentmacrobasename ;
$info = "\n" + $$fname + " Ver " + $$ver+ "\n最終更新日付:"+$$date ;
$info = $info + "\n作者:"+$$author ;

    disabledraw ;   //画面の書き換えを禁止します。
   
    call HidemaruMail ;

    //ソフト版数チェック
    ##require = 450 ;
    ##ver = dllfunc("TuruKameVersion");
    if ( ##ver < ##require ) {
        message "秀丸メールがVer" +
                leftstr(str(##ver),1) + "." +
                midstr( str(##ver), 1, length(str(##ver))-1 ) +
                "です。Ver" +
                leftstr(str(##require),1) + "." +
                midstr( str(##require), 1, length(str(##require))-1 ) +
                "以降を使用してください。\n" ;
        goto LEND;
    }

    //秀丸メールの本体ウィンドウ中かどうか
    if(dllfunc("IsHidemaruMailMain")){
        message "秀丸メールエディタウィンドウで実行してください。\n" + $info ;
        goto LEND ;
    }
   
    //新規作成時処理用に情報を取得
    ##MailType = dllfunc("MailType") ;
    //-1:何も無い場合
    //0:新規作成のメール
    //1:返信メール
    //2:転送メール
    //3:受信したメールの場合
    //4:送信済みメールの場合
    //5:未送信フォルダまたは草稿フォルダに保存された未送信メール
    //6:「添付ファイルとして転送」で作成されたメールで、まだ保存されてない段
階の物。
    //-1:何も無い場合
    //0:新規作成のメール
    //1:返信メール
    //2:転送メール
    //3:受信したメールの場合
    //4:送信済みメールの場合
    //5:未送信フォルダまたは草稿フォルダに保存された未送信メール
    //6:「添付ファイルとして転送」で作成されたメールで、まだ保存されてない段
階の物。
    if(##MailType == 3){
        message "マクロの対象外メールです。" + $info ;
        goto LEND ;
    }
    //送信済みメールの場合
    else if(##MailType == 4){
        question "\"送信済みメール\"の編集を許可してもよいですか?\n" + $info ;
        if( result == yes ) {
            //送信済みメールや受信メールをエディタ・ウィンドウで開いている時
に、「編集を許可」します。
            //エディタ・ウィンドウ上で、編集が禁止された状態になっている時に
のみ有効な関数です。
            //編集できる状態かどうかは、秀丸マクロのreadonlyキーワードを使え
ば分かります。
            if(readonly){
                ##n = dllfunc( "EnableEdit" );
                call Res_check ##n , "編集を許可できませんでした\n" + $info ;
            }
        }
        else goto LEND ;
    }

    //検索実行後insertを実行したときに、"選択範囲"の場合に、検索した文字列
    //の上に挿入してしまうのを防ぐため。
    //検索での表示 点滅表示/範囲選択の情報を取得する。
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    #reg_search = searchmode;
    writeregnum "SelectFound",0;    //点滅表示に変更する
    envchanged;
    closereg ;
    $sbuf = searchbuffer ;  //マクロ終了時に、検索条件を復元するため記憶
    #sopt = searchoption ;
    $rbuf = replacebuffer;

    //文字列挿入
    //現在位置に、文字を挿入してカーソル位置を記録しておく。
    //To,Subjectが空白だと、その位置に移動するため、テンプレートで
    //指示した$cの位置を記憶する。
    $$cur_char = "@c@" ;
    ##cur_move = 0 ;
    //カーソル位置を確認する。
    if(y >= 0){     //メール本文の場合に、$$cur_charを挿入する。
        insert $$cur_char ;
        ##cur_move = 1 ;
    }
    else{          
    //Headerの場合 and
    //テンプレートでカーソル位置の指定があった場合に、、$$cur_charを挿入する。
        moveto 0,-1 ;
        tab ;
        if((x != 0) || (y != 0)){
            insert $$cur_char ;
            ##cur_move = 1 ;
        }
    }

//初期定義
    //アカウント名を取得
    $$account = dllfuncstr("ExecAtMain", "CurrentAccount") ;
    call Str_check $$account,"アカウントの取得に失敗しました。\n" + $info ;
    //INIファイル
    //定義ファイル(INIファイル)
    $$ini = dllfuncstr("HomeDir") +
            $$account +
            "\\puku.ini" ;
    //セクション
    $$Section = currentmacrobasename ;

    //Alt が押されているとき、CCの敬称付き宛名の先頭文字を省略する。
    if      ( iskeydown(0x12) ) {
        ##cc_char_disable = 1 ;
        writeinistr $$ini, $$Section, "cc_char_disable", "1" ;
    }

    //Shift が押されているとき、cc_modeを一時的に切り替える
    if      ( iskeydown(0x10) ) {##cc_mode_inv = 1 ;}
    //もしくはiniファイルの"cc_mode_inv"情報が"1"のとき
    //cc_modeを一時的に切り替える
    else if (getinistr($$ini,$$Section,"cc_mode_inv")  == "1") {
        ##cc_mode_inv = 1 ;
        writeinistr $$ini, $$Section, "cc_mode_inv", 0 ;
    }

    //to_skip
    //Ctrl が押されているとき、to_skip_modeを一時的に切り替える
    if      ( iskeydown(0x11) ) {##to_skip_mode_inv = 1 ;}
    //もしくはiniファイルの"cc_mode_inv"情報が"1"のとき
    //cc_modeを一時的に切り替える
    else if (getinistr($$ini,$$Section,"to_skip_mode_inv")  == "1") {
        ##to_skip_mode_inv = 1 ;
        writeinistr $$ini, $$Section, "to_skip_mode_inv", 0 ;
    }

    $$wk = getinistr($$ini,$$Section,"Get_info_ini");
    if($$wk == ""){
        //情報がなにもないのでiniファイルのサンプルを作成する。
        writeinistr $$ini, $$Section,  "Get_info_ini", "0" ;
        writeinistr $$ini, $$Section,  "//    Get_info_ini(Default=0) 0:ini
ファイルから敬称list情報を取得しない。1:取得する。", "" ;
        writeinistr $$ini, $$Section,  "//Get_info_ini", "1" ;
        writeinistr $$ini, $$Section,  "//    name(Default=0): 0 = アドレス
帳から名前を取得,1 = ヘッダから名前を取得", "" ;
        writeinistr $$ini, $$Section,  "//name", "0" ;
        writeinistr $$ini, $$Section,  "//    keisyou_modeとは(Default=0)",
"" ;
        writeinistr $$ini, $$Section,  "//    0 = Defaultの敬称をつける", "" ;
        writeinistr $$ini, $$Section,  "//    1 = アドレス帳の備考 を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//    2 = アドレス帳の備考2を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//    3 = アドレス帳の備考3を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//keisyou_mode", "3" ;
        writeinistr $$ini, $$Section,  "//    pos(Default=0): 0 = 先頭に挿入,
1 = 定義文字列の位置に挿入,2=カーソル位置に挿入", "" ;
        writeinistr $$ini, $$Section,  "//pos", "1" ;
        writeinistr $$ini, $$Section,  "//    home_c(Default=@P@): ホームポ
ジション定義キャラクタ", "" ;
        writeinistr $$ini, $$Section,  "//home_c", "@P@" ;
        writeinistr $$ini, $$Section,  "//    keisyou_def(Default=殿):敬称De
fault取得", "" ;
        writeinistr $$ini, $$Section,  "//keisyou_def", "様" ;
        writeinistr $$ini, $$Section,  "//    char_def(Default=なし): 複数の
名前の場合間に挿入するキャラクタ。ins_ret_mode=0のときに設定するとよい。", "" ;
        writeinistr $$ini, $$Section,  "//char_def", "," ;
        writeinistr $$ini, $$Section,  "//ins_ret_mode(Default=1) : 0 = なに
もしない,1= 複数の名前の間に改行を挿入する", "" ;
        writeinistr $$ini, $$Section,  "//ins_ret_mode", "0" ;
        writeinistr $$ini, $$Section,  "//    adr_mode(Default=1):0 = 何もし
ない,1 = To:の情報がないときにアドレス帳を起動する", "" ;
        writeinistr $$ini, $$Section,  "//adr_mode", "0" ;
        writeinistr $$ini, $$Section,  "//    div_name(Default=0):0 = 何もし
ない,1 = 半角空白を名前から探し、その前の部分のみ利用する", "" ;
        writeinistr $$ini, $$Section,  "//div_name", "1" ;
        writeinistr $$ini, $$Section,  "//    cc_mode(Default=0):0 = なにも
しない,1 = CCの情報から名前を取得しメール本文に挿入する", "" ;
        writeinistr $$ini, $$Section,  "//cc_mode", "1" ;
        writeinistr $$ini, $$Section,  "//    cc_char[Default=\"CC)\"]: ccで
取得した名前の前に挿入するキャラクタ", "" ;
        writeinistr $$ini, $$Section,  "//cc_char", "CC)" ;

        writeinistr $$ini, $$Section,  "//    del_to_name[Default=0]: To,Cc
の名前情報を削除するOption。0=To,Cc Headerの名前情報を削除しない。1=削除する。
", "" ;
        writeinistr $$ini, $$Section,  "//del_to_name", "0" ;
        writeinistr $$ini, $$Section,  "//    del_newmail_to_name[Default=
0]: 新規作成時To,Ccの名前情報を削除するOption。0=新規作成時To,Cc Headerの名
前情報を削除しない。1=削除する。", "" ;
        writeinistr $$ini, $$Section,  "//del_newmail_to_name", "0" ;
        writeinistr $$ini, $$Section,  "//    chg_to_name[Default=0]: Header
 Toの名前情報を変更するOption。0=To Headerの名前情報を変更しない。1=名前情報
を変更する。", "" ;
        writeinistr $$ini, $$Section,  "//chg_to_name", "0" ;
        writeinistr $$ini, $$Section,  "//    div_name_header[Default=0]: di
v_name_header=1のとき半角空白以降を削除するOption。0=半角空白以降を削除しな
い。1=半角空白以降を削除する。", "" ;
        writeinistr $$ini, $$Section,  "//div_name_header", "0" ;
        writeinistr $$ini, $$Section,  "//    add_to_keisyou[Default=0]: Hea
der Toの名前情報に敬称を追加するOption。0=Header Toに敬称を追加しない。1=Hea
der Toに敬称を追加する", "" ;
        writeinistr $$ini, $$Section,  "//add_to_keisyou", "0" ;
        writeinistr $$ini, $$Section,  "//    chg_cc_name[Default=0]: Header
 Ccの名前情報を変更するOption。0=To Headerの名前情報を変更しない。1=名前情報
を変更する。", "" ;
        writeinistr $$ini, $$Section,  "//chg_cc_name", "0" ;
        writeinistr $$ini, $$Section,  "//    add_cc_keisyou[Default=0]: Hea
der Ccの名前情報に敬称を追加するOption。0=Header Ccに敬称を追加しない。1=Hea
der Toに敬称を追加する。", "" ;
        writeinistr $$ini, $$Section,  "//add_cc_keisyou", "0" ;
        writeinistr $$ini, $$Section,  "//    to_skip_mode(Default=0):0 = な
にもしない,1 = Toの情報から名前を取得しメール本文に挿入するのを抑制する", "" ;
        writeinistr $$ini, $$Section,  "//to_skip_mode", "0" ;
        writeinistr $$ini, $$Section,  "//    part_modeとは(Default=0)", "" ;
        writeinistr $$ini, $$Section,  "//    0 = 補足情報を挿入しない", "" ;
        writeinistr $$ini, $$Section,  "//    1 = アドレス帳の備考 を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//    2 = アドレス帳の備考2を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//    3 = アドレス帳の備考3を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//keisyou_mode", "3" ;
    }

    //div_name
    //取得した名称に半角空白がある場合、その前の部分のみ取得するoption
    //0 = 何もしない
    //1 = 半角空白を名前から探し、その前の部分のみ利用する
        ##div_name = getininum($$ini,$$Section,"div_name");
        if((##div_name < 0) || (##div_name > 1)){
            ##div_name = 0 ; //default
        }
   
    //adr_mode
    //0 = 何もしない
    //1 = To:の情報がないときにアドレス帳を起動する
        //アドレス帳起動モードを取得
        $$wk = getinistr($$ini,$$Section,"adr_mode");
        if($$wk == ""){
            $$wk = "1" ;
        }
        ##adr_mode = val($$wk) ;
        //INIファイルから文字列を取りだします。
        if((##adr_mode < 0) || (##adr_mode > 1)){
            ##adr_mode = 1 ;    //default
        }

    //ホームポジション定義キャラクタ
        //ホームポジションキャラクタ:名前情報作成後、
        //カーソルをこの文字の位置に移動
        //ホームポジションキャラクタ取得
        $$home_c = getinistr($$ini,$$Section,"home_c");
        //INIファイルから文字列を取りだします。
        if($$home_c == ""){
            $$home_c = "@P@" ;  //default
        }

    //pos
    //0 = 先頭に挿入
    //1 = 定義文字列の位置に挿入
    //2 = カーソル位置に挿入
        //文字列挿入位置情報を取得
        ##pos = getininum($$ini,$$Section,"pos");
        //INIファイルから文字列を取りだします。
        if((##pos < 0) || (##pos > 2)){
            ##pos = 0 ; //default
        }

    //to_skip_mode
    //0 = なにもしない
    //1 = Toに対して文字列挿入処理をskipする
        //文字列挿入位置情報を取得
        ##to_skip_mode = getininum($$ini,$$Section,"to_skip_mode");
        //INIファイルから文字列を取りだします。
        if((##to_skip_mode < 0) || (##to_skip_mode > 1)){
            ##to_skip_mode = 0 ; //default
        }
        //Shiftを押して実行したときに#to_skip_modeを切り替える
        ##to_skip_mode = (##to_skip_mode + ##to_skip_mode_inv) % 2 ;

    //cc_mode
    //0 = なにもしない
    //1 = CCの情報から名前を取得しメール本文に挿入する
        //文字列挿入位置情報を取得
        ##cc_mode = getininum($$ini,$$Section,"cc_mode");
        //INIファイルから文字列を取りだします。
        if((##cc_mode < 0) || (##cc_mode > 1)){
            ##cc_mode = 0 ; //default
        }
        //Shiftを押して実行したときに#cc_modeを切り替える
        ##cc_mode = (##cc_mode + ##cc_mode_inv) % 2 ;
       
    //Toの名前情報を削除するflag
        //To,Ccの名前情報を削除するoption取得
        ##del_to_name = getininum($$ini,$$Section,"del_to_name");
        //新規作成時To,Ccの名前情報を削除するoption取得
        ##del_newmail_to_name = getininum($$ini,$$Section,"del_newmail_to_na
me");

    //Toの名前情報をアドレス帳の名前にするflag
    //敬称も付加する。
        ##chg_to_name = getininum($$ini,$$Section,"chg_to_name");
        ##div_name_header = getininum($$ini,$$Section,"div_name_header");
        ##add_to_keisyou = getininum($$ini,$$Section,"add_to_keisyou");

        ##chg_cc_name = getininum($$ini,$$Section,"chg_cc_name");
        ##add_cc_keisyou = getininum($$ini,$$Section,"add_cc_keisyou");

    //挿入文字列を変換する。英数字のみ半角化。
        ##cnv_filter = getininum($$ini,$$Section,"cnv_filter");
        if( (##cnv_filter == 1) &&
            (dllfunc("HidemaruMailVersion") <= 454)){
            message
                "変換用Filter機能は、\n"+
                "秀丸メールVer4.54以前では使用できません。\n" + $info ;
        }

//-------------------main------------------
    //アドレス帳の起動
    if(##adr_mode == 1){
        $$wk = dllfuncstr( "CurrentHeader", "To" );
        if($$wk == ""){
            #n = dllfunc( "AdrBook");
        }
    }

    //アドレス帳から名前取得
    //To_headerから名前取得
    //なければemailアドレス

    //Toの情報を取得する。
        //サブルーチン get_to_list:
        //機能:引数で指定したヘッダ情報を取得する。
        //第一引数: 文字列型,ヘッダー種類(To,Cc,Bccなど)
        //戻り値:   文字列型,引数で指定したヘッダ情報(複数の場合は、
        //"," + 改行が途中に入る
    if(##to_skip_mode == 0){
        call get_to_list "To" ;
        $$To_inf = $$return ;
    }

    //敬称情報の処理
    //敬称list情報をiniファイルから取得するか、否かの設定。
    //get_info_ini
    //0:iniファイルから取得しない。1:取得する。
    ##get_info_ini = getininum($$ini,$$Section,"Get_info_ini");

    $$key = "kei" ;
    //敬称のチェック用
    if(##get_info_ini == 1){
        call Set_default $$ini,$$Section,$$key ;
        call Get_list $$ini ,$$Section, $$key ;
        //戻り値:拡張子定義個数
        ##chk_cnt = ##return ;
    }
    else{
        //敬称の種類を登録
        //登録数
        writeinistr $$ini, $$Section, "Get_info_ini", "0" ;
        ##chk_cnt = 0 ;
        $get_list[##chk_cnt] = "殿" ;       ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "様" ;       ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "御中" ;     ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "さん" ;     ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "ちゃん" ;   ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "君" ;       ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "くん" ;     ##chk_cnt = ##chk_cnt + 1 ;
    }
    //敬称情報の正規表現文字列を作成。
    $$dllfile = loaddllfile ;
    if($$dllfile != "") freedll;
    if(existfile( hidemarudir + "\\DengakuDLL.dll")){
        ##dengaku_use = 1 ;
        call Dengaku ;
    }
    else{
        ##dengaku_use = 0 ;
    }

    //正規表現の敬称確認文字列作成。
    ##i = 0 ;
    $$reg_keisyou = "(" ;
    while(##i < ##chk_cnt){
        if((##i +1) == ##chk_cnt) $$wk = "" ;
        else $$wk = "|" ;
        call reg_escape $get_list[##i],##dengaku_use ;
        $$s = $$return ;
       
        $$reg_keisyou = $$reg_keisyou + $$s + $$wk ;
        ##i = ##i + 1;
    }
    $$reg_keisyou = $$reg_keisyou + ")$" ;
    if(##dengaku_use){
        //田楽DLLを開放
        freedll ;
        if($$dllfile != "") loaddll $$dllfile ;
    }
    //敬称のチェックする正規表現のoptionを作成。HmJre.dllを利用。
    freedll;
    call HmJre ;
    //戻り値:1=HmJreを利用してmatch判定ができる場合。0=利用できない場合。
    ##reg_flag = ##return ;
    freedll;
    call HidemaruMail ;
    //利用可能。
    if( ##reg_flag == 1 ) {
        writeinistr $$ini, $$Section, "reg_keisyou", $$reg_keisyou ;
    }
    //利用不可能。
    else{
        $$reg_keisyou = "" ;
        writeinistr $$ini, $$Section, "reg_keisyou", 0 ;
    }

    //Toの処理
    //サブルーチンget_to_listで取得した文字列が存在する場合
    if($$To_inf != ""){
        //グローバル変数$list(配列),
        //グローバル変数$list_keisyou(配列),
        //グローバル変数$list_part(配列)に代入する。
        call Make_name $$ini,$$Section,$$To_inf ;
        ##cnt = ##return ;
    }
    else {
        ##cnt = 0 ;
    }

    if(##cnt != 0){
            //Header To,Ccの名前情報を削除するOption
        if( (##del_to_name == 1) ||
            //新規作成時、To,Ccの名前情報を削除するOption
            ((##MailType == 0 ) && (##del_newmail_to_name == 1))){
            call del_to_name $$To_inf,"To" ;
        }
        else if(##chg_to_name){
            //Header Toの名前情報を変更する。
            call chg_to_name $$To_inf,"To",##add_to_keisyou ,##div_name_head
er,$$reg_keisyou ;
        }
        else if(##add_to_keisyou){
            //Header Ccの名前情報に敬称を付加する。
            call add_to_keisyou $$To_inf,"To" ,$$reg_keisyou;
        }
       
        if(##cnt != 0){
            //第四引数: 数値型,ccを実施するモードフラグ=0
            call Make_str $$ini,$$Section,##cnt ,0,##div_name;
            $$to_name = $$return ;
        }
    }
   
    //Ccの処理
    if( (##cc_mode == 1) ||
        (##del_to_name == 1) ||
        (##del_newmail_to_name == 1) ||
        (##chg_cc_name == 1) ||
        (##add_cc_keisyou == 1) ){
        //Ccの情報を取得する。
            //サブルーチン get_to_list:
            //機能:引数で指定したヘッダ情報を取得する。
            //第一引数: 文字列型,ヘッダー種類(To,Cc,Bccなど)
            //戻り値:   文字列型,引数で指定したヘッダ情報(複数の場合は、
            //"," + 改行が途中に入る
        call get_to_list "Cc" ;
        $$Cc_inf = $$return ;
       
        //サブルーチンget_to_listで取得した文字列が存在する場合
        if($$Cc_inf != ""){
            call Make_name $$ini,$$Section,$$Cc_inf ;
            ##cnt = ##return ;
        }
        else {
            ##cnt = 0 ;
        }
       
        if(##cnt != 0){
                //Header To,Ccの名前情報を削除するOption
            if( (##del_to_name == 1) ||
                //新規作成時、To,Ccの名前情報を削除するOption
                ((##MailType == 0 ) && (##del_newmail_to_name == 1))){
                call del_to_name $$Cc_inf,"Cc" ;
            }
            else if(##chg_cc_name){
                //Header Ccの名前情報を変更する。
                call chg_to_name $$Cc_inf,"Cc",##add_cc_keisyou ,##div_name_
header,$$reg_keisyou ;
            }
            else if(##add_cc_keisyou){
                //Header Ccの名前情報に敬称を付加する。
                call add_to_keisyou $$Cc_inf,"Cc" ,$$reg_keisyou ;
            }

            if(##cc_mode == 1){
                //第四引数: 数値型,ccを実施するモードフラグ=1
                call Make_str $$ini,$$Section,##cnt ,##cc_mode,##div_name;
                $$cc_name = $$return ;
            }
        }
    }
    if(##cc_char_disable == 1){
        writeinistr $$ini, $$Section, "cc_char_disable", 0 ;
    }
    //INIファイルにデータを書きこむ文です。
    //writeinistr INIファイル名, セクション名, キー名, 文字
    //writeinistr "HIDEMARU.INI", "Option", "RefMark", ">> ";

    //挿入位置に移動
    if(##pos == 0){
        moveto 0,0 ;    //本文の先頭に移動
    }
    else if(##pos == 1){
        moveto 0,-1 ;   //Headerの最終行に移動
        golineend2 ;    //論理行末に移動
        replacedown $$home_c , "" , casesense;
        if(!result){
            //ホームポジションの移動に失敗したとき、本文先頭に移動
            moveto 0,0 ;    
        }
    }
    else{   //##pos == 2のとき
        if(##cur_move == 1){
            moveto 0,-1;    //Headerの最終行に移動
            golineend2 ;    //論理行末に移動
            searchdown $$cur_char,casesense ;
            call Res_check result , "cur char not found.\n" + $$cur_char + "
\n" + $info ;
        }
        else{
            if(y < 0){      //Headerの場合、カーソルを本文先頭に移動。
                moveto 0,0 ;
            }
        }
    }
   
    //To情報の文字列挿入skip無効時 and To情報が存在するとき、文字列挿入を実施。
    if((##to_skip_mode == 0) && ($$to_name != "")){
        ##x = x ;##y = y ;
        insert $$to_name ;
        $$ret = "\n" ;
        if( (##cnv_filter == 1) &&
            (dllfunc("HidemaruMailVersion") > 454)){
            beginsel ;
            moveto ##x,##y ;
            execmacro currentmacrodirectory + "\\HMML_INS_NAME_FILTER.MAC" ;
            moveto selendx,selendy;
            escape ;
        }
    }
    //To情報の文字列情報挿入をskip
    else{
        $$ret = "" ;
    }

    //Cc情報の文字列挿入
    if  ((##cc_mode == 1) &&    //ccモード有効時 and
         ($$cc_name != "")){    //cc_nameに情報があるとき
        ##x = x ;##y = y ;
        insert $$ret + $$cc_name ;
        if( (##cnv_filter == 1) &&
            (dllfunc("HidemaruMailVersion") > 454)){
            beginsel ;
            moveto ##x,##y ;
            execmacro currentmacrodirectory + "\\HMML_INS_NAME_FILTER.MAC" ;
            moveto selendx,selendy;
            escape ;
        }
    }

    //カーソル移動用のキャラクタを挿入済みのときの処理
    //キャラクタを削除する。
    if(##cur_move == 1){
        moveto 0,-1;    //Headerの最終行に移動
        golineend2 ;    //論理行末に移動
        replacedown $$cur_char,"" ,casesense ;
        call Res_check result , "cur char not found.\n" + $$cur_char + "\n"
+ $info ;
    }
    //Subjectと、Toを取得し、空白の場合、その位置に移動する。
    $$To  = dllfuncstr( "CurrentHeader", "To" );
    if($$To == "") {
        moveto 0,-1;    //Headerの最終行に移動
        golineend2 ;    //論理行末に移動
        searchup "^To:",regular ;
        escape ;    //範囲選択を取り消す
        right ;
    }
    else{
        $$Sub = dllfuncstr( "CurrentHeader", "Subject" );
        if($$Sub == "") {
            moveto 0,-1;    //Headerの最終行に移動
            golineend2 ;    //論理行末に移動
            searchup "^Subject:",regular ;
            escape ;    //範囲選択を取り消す
            right ;
        }
    }

LEND:
    //敬称情報の正規表現文字列を削除
    if( existfile( hidemarudir + "\\DengakuDLL.dll") &&
        existfile( hidemarudir + "\\BREGEXP.dll")){
        writeinistr $$ini, $$Section, "reg_keisyou", 0 ;
    }
    setsearch $sbuf, #sopt; //開始時の検索文字,optionに戻す
    setreplace $rbuf ;
    //検索での表示 点滅表示/範囲選択の情報を戻す。
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    writeregnum "SelectFound",#reg_search;
    closereg;
    envchanged;

    enabledraw ;    //画面書き換えを許可します。
    freedll;
    endmacro;

HidemaruMail:   //秀丸メール起動チェック&DLLロード
//機能:TKInfo.dllをロードする
//秀シリーズサポートHPより 抜粋
    // DLL を Load する
    openreg "CURRENTUSER","Software\\Hidemaruo\\TuruKame\\Config";
    ##res = result ;
    closereg ;
    if( !##res ) {
        message "秀丸メールがインストールされてないです (^^;)\n"+$info;
        endmacro;
    }

    loaddll "TKInfo.dll";
    if( !result ) {
        message "DLLロードに失敗\n"+$info;
        endmacro;
    }
return ;

get_to_list:
//機能:引数で指定したヘッダ情報を取得する。
    //第一引数: 文字列型,ヘッダー種類(To,Cc,Bccなど)
    //戻り値:   文字列型,引数で指定したヘッダ情報(複数の場合は、"," + 改行が
途中に入る
    //引数渡し
    $$header = $$1;
    call Str_check $$header,"サブルーチンget_to_list 第一引数(文字列型)がお
かしいです\n" + $info ;

    $$to = "" ;//初期化

    ##Header_count = dllfunc("CountCurrentHeader", $$header);
    while( ##i < ##Header_count ) {
        $$wk = dllfuncstr("CurrentHeader2", $$header, ##i);
        ##wk = dllfunc("CountEmailList", $$wk);
        if(##wk != 0){
            if($$to != ""){
                $$to = $$to + ", \n        " + $$wk ;
            }
            else{
                $$to = $$wk ;
            }
        }
        ##i = ##i + 1;
    }
return $$to ;

Get_list:
//機能:引数で指定したiniファイルから情報を取得し、グローバル変数にsetする。
//引数渡し
    //第一引数: 文字列型,listを取得するiniファイルを指定
    $$ini = $$1;
    //第二引数: 文字列型,listを取得するiniファイルのセクション名を指定
    $$Section = $$2;
    //第三引数: 文字列型,listを取得するiniファイルのkeyを指定
    //keyは、"#" + 数字 + 指定文字列
    //を連結した文字列をgetinistrにて使用
    $$key = $$3;
    //戻り値
    //取得した配列の数
    //および、グローバル変数 $get_listに取得した配列を保存

    if($$ini == ""){
        message "サブルーチンGet_list:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    else if(! existfile( $$ini )) {
        //変数(配列) $listの内容を削除
        ##i = 0 ;
        while( $get_list[##i] != "" ) {
            //変数の値削除
            $get_list[##i] = "" ;
            ##i = ##i + 1;
        }
        return 0 ;
    }
    if($$Section ==""){
        message "サブルーチンGet_list:第二引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$key ==""){
        message "サブルーチンGet_list:第三引数エラー。\n" + $info ;
        goto LEND ;
    }


    //変数(配列) $get_listの内容を削除
    ##i = 0 ;
    while( $get_list[##i] != "" ) {
        //変数の値削除
        $get_list[##i] = "" ;
        ##i = ##i + 1;
    }

    //敬称登録最大数
    ##max_info = val(getinistr($$ini,$$Section,"max_info"));
    if(##max_info == 0){
        ##max_info = 20 ;
    }
    ##menu_su = 0 ;     //初期化
    while( ##menu_su < ##max_info )
    {
        //INIファイルから文字列を取りだします。
        //getinistr( s1, s2, s3 )
        //s1がiniファイル名、s2がセクション名、s3がキー名です。
        $$wk = getinistr( $$ini , $$Section , "#" + str( ##menu_su ) +"_"+ $
$key );
        if( $$wk == "" )
        {
            break;
        }
        $get_list[##menu_su] = $$wk ;
        ##menu_su = ##menu_su + 1;
    }

return ##menu_su ;

Set_default:
//処理:Iniファイルの各種設定情報がなければびデフォルトを設定する
    //第一引数: 文字列型,listを取得するiniファイルを指定
    $$ini = $$1;
    //第二引数: 文字列型,listを取得するiniファイルのセクション名を指定
    $$Section = $$2;
    //第二引数: 文字列型,listを取得するiniファイルのkeyを指定
    //keyは、"#" + 数字 + 指定文字列
    //を連結した文字列をgetinistrにて使用
    $$key = $$3;
    //戻り値
    //なし。

    if($$ini == ""){
        message "サブルーチンSet_default:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$Section ==""){
        message "サブルーチンSet_default:第二引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$key ==""){
        message "サブルーチンSet_default:第三引数エラー。\n" + $info ;
        goto LEND ;
    }

    //テンプレート名情報
    $$wk = getinistr( $$ini , $$Section , "#0_" + $$key );
    //iniファイルから$$Sectionの "#0_" + $keyの情報を取得し、情報が無ければ
    //デフォルト情報を設定する。
    if( $$wk == "" ){
        ##array_cnt = 0;
        $$array[##array_cnt] = "殿" ;       ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "様" ;       ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "御中" ;     ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "ちゃん" ;   ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "君" ;       ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "くん" ;     ##array_cnt = ##array_cnt + 1;
        ##i = 0 ;
        while( ##i < ##array_cnt ) {
            writeinistr $$ini, $$Section,  "#" + str( ##i ) + "_"+ $$key, $$
array[##i] ;
            //INIファイルにデータを書きこむ文です。
            //writeinistr INIファイル名, セクション名, キー名, 文字
            //writeinistr "HIDEMARU.INI", "Option", "RefMark", ">> ";
            ##i = ##i + 1;
        }
        message currentmacrobasename + "\nマクロ" +
                "敬称list情報を下記場所\n" +
                "  " + $$ini + "\n" +
                "に作成しました。";
    }
return ;

Make_name :
//処理: 第一引数で指定された文字列から名前情報を作成する。
//      作成した情報は
//      グローバル変数$list(配列),
//      グローバル変数$list_keisyou(配列),
//      グローバル変数$list_part(配列)に代入する。
//引数渡し
    //第一引数: 文字列型,listを取得するiniファイルを指定
    $$ini = $$1 ;
    //第二引数: 文字列型,listを取得するiniファイルのセクション名を指定
    $$Section = $$2 ;
    //第三引数: 文字列型,チェックを行うHeader
    $$To_inf = $$3 ;

    if($$ini == ""){
        message "サブルーチンMake_name:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    else if(! existfile( $$ini )) {
        message "サブルーチンMake_name:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$Section ==""){
        message "サブルーチンMake_name:第二引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$To_inf ==""){
        message "サブルーチンMake_name:第三引数エラー。\n" + $info ;
        goto LEND ;
    }

//処理
    //コンマで区切られたメールアドレス文字列の中から、メールアドレスの個数
    //を返します。
    //返り値(数値型)
    //メールアドレスの個数です。
    ##To_count = dllfunc("CountEmailList", $$To_inf);

    //変数初期化
    ##n = ##To_count ;
    while( ##n > 0 ) {
        $list[##n] = "" ;
        $list_keisyou[##n] = "" ;
        $list_part[##n] = "" ;
        ##n = ##n - 1;
    }

    //keisyou_mode
    //0 = Defaultの敬称をつける
    //1 = アドレス帳の備考 を取得してつける
    //2 = アドレス帳の備考2を取得してつける
    //3 = アドレス帳の備考3を取得してつける
    //4 = アドレス帳の備考4を取得してつける
    //5 = アドレス帳の備考5を取得してつける
    //6 = アドレス帳の備考6を取得してつける
    //7 = アドレス帳の備考7を取得してつける
    //8 = アドレス帳の備考8を取得してつける
    //9 = ドメイン別で敬称をつける
    //備考,備考2,備考3,備考4-8から取得できなかった場合、Defaultを定義する。

    //敬称モードを取得
    ##keisyou_mode = getininum($$ini,$$Section,"keisyou_mode");
    //FindBookNote4〜FindBookNote8が対応された秀丸メールの版数を
    //Ver4.65以降 or Ver464Beta8以降と定義する。
    //4.65より前の版数の場合、##keisyou_modeを一時的に修正する。
    //メモ:FindBookNote4〜FindBookNote8は、秀丸メールVer4.64Beta8より対応。

    //部署名モードを取得
    ##part_mode = getininum($$ini,$$Section,"part_mode");

    ##ver = dllfunc("TuruKameVersion");
    if(##ver == 464){
        //HidemaruMail 4.64beta8 (WinNT,500)
        //HidemaruMail 4.63 (WinNT,500)
        //HidemaruMail 4.64beta8  ←XmailerにWindowsのバージョンがない場合
        $$wk = dllfuncstr("XMailer") ;
        call Str_check $$wk , "XMailer情報取得エラー\n" + $info ;
        //版数を取得するため" "の位置を認識
        ##n = strstr($$wk," ");
        //文字列"HidemaruMail "を削除。
        $$wk = midstr($$wk,##n + 1,strlen($$wk) -1) ;
       
        ##n = strstr($$wk," ");
        //Windowsのバージョンがあるときに、秀丸メールの版数だけ取得する。
        if(##n != -1) {
            $$wk = leftstr($$wk,##n) ;
        }
        //betaの版数があるかどうかチェックする。
        ##n = strstr($$wk,"beta") ;
        if(##n != -1){
            ##beta = val(midstr($$wk,##n + strlen("beta") ,strlen($$wk) - st
rlen("beta"))) ;
            $$wk = leftstr($$wk,##n) ;
        }
        ##ver = val(leftstr($$wk,1) + midstr($$wk,2,2)) ;
    }

    //秀丸メール Ver4.64より前の版数 or
    //Ver4.64 Beta1〜Beta7の版数のとき
    if( (##ver < 464) ||
        ((##ver == 464) &&
         ((##beta > 0) && (##beta < 8)))){
        ##limit_bikou = 3 ;
        ##limit_keisyou = 3 ;
    }
    else{
        //備考=8 + グループ,グループパス
        ##limit_bikou = 8 + 2;
        //domain modeを追加
        ##limit_keisyou = 8 + 1 ;
    }
    //INIファイルから文字列を取りだします。
    if((##part_mode < 0) || (##part_mode > ##limit_bikou)){
        ##part_mode = 0 ; //default
    }
    //INIファイルから文字列を取りだします。
    if((##keisyou_mode < 0) || (##keisyou_mode > ##limit_keisyou)){
        ##keisyou_mode = 0 ; //default
    }
    //9 = ドメイン別で敬称をつける
    if(##keisyou_mode == 9){
        $$account = dllfuncstr("ExecAtMain", "CurrentAccount") ;
        ##n = dllfunc("LoadAccountProp", $$account );
        $$wk = dllfuncstr("GetAccountProp","szEmail");
       
        ##n = strstr($$wk,"@");
        if(##n == -1){
            message "Email:Domain error.\n" + $$wk + "\n" + $info ;
            goto LEND;
        }
        $$self_domain = midstr( $$wk, ##n +1, strlen($$wk) - ##n - 1 ) ;
        //自分のドメインと異なる場合の敬称
        $$keisyou_otherdomain = getinistr($$ini,$$Section,"keisyou_other");
        //未定義のとき
        if($$keisyou_otherdomain == "") $$keisyou_otherdomain = "様" ;
    }

    //敬称情報が下記定義のとき、敬称を付加しない。
    $$word = getinistr($$ini,$$Section,"not_apply");
    if($$word == "") $$word = "not_apply" ;
    //敬称list情報数を取得
    ##i = 0 ;
    while(1){
        if($get_list[##i] == "") break ;
        ##i = ##i + 1;
    }
    //敬称list情報の数
    ##chk_cnt = ##i ;

    ##i = 0;
    while( ##i < ##To_count ) {
        //GetEmailList
        //コンマで区切られたメールアドレス文字列の中から、
        //パラメータで指定された部分のメールアドレス部分を1つ取り出します。
        //返り値(文字列型)
        //取り出したメールアドレス部分です。ここは、abc <abc@abc> のように、
        //名前 + メールアドレスとなっていることもあります。
        //この部分はコンマで区切られた内容をそのまま返す。
        $$inf = dllfuncstr("GetEmailList", $$To_inf, ##i);

        //mode
        //0 = アドレス帳から名前を取得
        //1 = ヘッダから名前を取得
            //名前の情報を取得するモードを取得
            ##mode = getininum($$ini,$$Section,"name");
            //INIファイルから文字列を取りだします。
            if((##mode < 0) || (##mode > 1)){
                ##mode = 0 ; //default
            }

        if(##mode == 0 ){
            //パラメータで渡された名前+Emailの中からEmail部分を取り出し、
            //そのEmailをアドレス帳から検索し、見つかった場合はその名前
            //を返し、見つからなかった場合はパラメータで渡された文字列中
            //の名前部分を返す。
            //パラメータにはEmailのみでも名前+Emailでもどちらでも受け付
            //けます。
            //アドレス帳に同じEmailが複数登録されている場合は一番先頭に
            //登録されているメンバーのみが対象となります。
            $$name = dllfuncstr( "FindBook2", $$inf);
        }
        else{   //mode == 1
            //SetNameOnly
            //パラメータで渡された「名前+Email」の形式の文字列から、名前部分の
            //みを取り出して返します。
            //返り値(文字列型)
            //取り出された名前部分の文字列です。名前部分が見つからない場合は
            //メールアドレスをそのまま返します。
            $$name  = dllfuncstr( "SetNameOnly", $$inf );

            //SetEmailOnly
            //パラメータで渡された「名前+Email」の形式の文字列から、
            //Email部分のみを取り出して返します。
            $$email = dllfuncstr( "SetEmailOnly", $$inf );

            //内容が同じ場合、名前の取得を失敗している。
            //アドレス帳から名前を取得する処理を実施
            if($$email == $$name){
                $$name = dllfuncstr( "FindBook2", $$inf);
            }
        }
        //パラメータで渡された文字列がもしダブルクォーテーション記号で囲まれ
ていた場合に、そのダブルクォーテーション記号(のセット)を除去します。
        //返り値(文字列型)
        //ダブルクォーテーション記号の除去された文字列を返します。ダブルク
ォーテーション記号で囲まれてなかった場合は元の文字列をそのまま返します。
        $$name = dllfuncstr("UnDoubleQuote", $$name );
        //左端の空白を削除する
        while(1){
            if(leftstr($$name,1) == " ") $$name = midstr($$name,1,strlen($$n
ame) -1);
            else break ;
        }
        //右端の空白を削除する
        while(1){
            if(rightstr($$name,1) == " ") $$name = leftstr($$name,strlen($$n
ame) -1);
            else break ;
        }
       
        //敬称定義
        //敬称Default取得
        $$keisyou_def = getinistr($$ini,$$Section,"keisyou_def");
        //INIファイルから文字列を取りだします。
        if($$keisyou_def == ""){
            $$keisyou_def = "殿" ;  //default
        }

        $$keisyou = "" ;

        //敬称情報を取得する
        if(##keisyou_mode == 0){
            $$keisyou = $$keisyou_def ;
        }
        else if(##keisyou_mode == 1){
            //備考の内容を返します。
            $$keisyou = dllfuncstr( "FindBookNote", $$inf);
        }
        else if(##keisyou_mode == 2){
            //備考2の内容を返します。
            $$keisyou = dllfuncstr( "FindBookNote2", $$inf);
        }
        else if(##keisyou_mode == 3){
            //備考3の内容を返します。
            $$keisyou = dllfuncstr( "FindBookNote3", $$inf);
        }
        else if(##keisyou_mode == 4){
            //備考4の内容を返します。
            $$keisyou = dllfuncstr( "FindBookNote4", $$inf);
        }
        else if(##keisyou_mode == 5){
            //備考5の内容を返します。
            $$keisyou = dllfuncstr( "FindBookNote5", $$inf);
        }
        else if(##keisyou_mode == 6){
            //備考6の内容を返します。
            $$keisyou = dllfuncstr( "FindBookNote6", $$inf);
        }
        else if(##keisyou_mode == 7){
            //備考7の内容を返します。
            $$keisyou = dllfuncstr( "FindBookNote7", $$inf);
        }
        else if(##keisyou_mode == 8){
            //備考8の内容を返します。
            $$keisyou = dllfuncstr( "FindBookNote8", $$inf);
        }
        //9 = ドメイン別で敬称をつける
        else if(##keisyou_mode == 9){
            $$email = dllfuncstr( "SetEmailOnly", $$inf );
            ##n = strstr($$email,"@");
            if(##n != -1){
                $$domain = midstr( $$email, ##n +1, strlen($$email) - ##n -
1 ) ;
                $$self_domain = "," + $$self_domain + "," ;
                //自分のドメイン情報をiniファイルから取得
                $$wk = getinistr($$ini,$$Section,"selfdomain");
                //空白を削除 trim
                call Trim $$wk ;
                $$wk = $$return ;
                //↑空白を削除 trim終了

                //ドメインチェックを実施
                if($$wk != ""){
                    $$self_domain = $$self_domain + $$wk + "," ;
                }
                ##n = strstr($$self_domain,"," + $$domain + ",");
                //異なるドメインの場合
                if(##n == -1){
                    $$keisyou = $$keisyou_otherdomain ;
                }
                //同じドメインの場合
                else{
                    $$keisyou = $$keisyou_def ;
                }
            }
            else{
                $$keisyou = $$keisyou_def ;
            }
        }
        else{
            $$keisyou = $$keisyou_def ;
        }
        //敬称がない場合Defaultを定義
        if($$keisyou ==""){
            $$keisyou = $$keisyou_def ;
        }

        //部署名処理
        if(##part_mode == 0){
            $$part = "" ;
        }
        else if(##part_mode == 1){
            //備考の内容を返します。
            $$part = dllfuncstr( "FindBookNote", $$inf);
        }
        else if(##part_mode == 2){
            //備考2の内容を返します。
            $$part = dllfuncstr( "FindBookNote2", $$inf);
        }
        else if(##part_mode == 3){
            //備考3の内容を返します。
            $$part = dllfuncstr( "FindBookNote3", $$inf);
        }
        else if(##part_mode == 4){
            //備考4の内容を返します。
            $$part = dllfuncstr( "FindBookNote4", $$inf);
        }
        else if(##part_mode == 5){
            //備考5の内容を返します。
            $$part = dllfuncstr( "FindBookNote5", $$inf);
        }
        else if(##part_mode == 6){
            //備考6の内容を返します。
            $$part = dllfuncstr( "FindBookNote6", $$inf);
        }
        else if(##part_mode == 7){
            //備考7の内容を返します。
            $$part = dllfuncstr( "FindBookNote7", $$inf);
        }
        else if(##part_mode == 8){
            //備考8の内容を返します。
            $$part = dllfuncstr( "FindBookNote8", $$inf);
        }
        else if(##part_mode == 9){
            //FindBook8関数(TkInfo.dll)
            //パラメータで渡された名前+Emailの中からEmail部分を取り出し、
            //そのEmailをアドレス帳から検索し、見つかった場合はその名前+Emai
lを返し、
            //見つからなかった場合はパラメータで渡された名前+Emailを返します。
            //パラメータにはEmailのみでも名前+Emailでもどちらでも受け付けます。
            //アドレス帳に同じEmailが複数登録されている場合は一番先頭に登録
されているメンバーのみが対象となります。
            //備考8の内容を返します。
            $$en = dllfuncstr( "FindBookNote8", $$inf);
            if($$en == "enable_group"){
                //FindBookGroup関数(TkInfo.dll)
                //アドレス帳に登録されているその人のグループ名の内容を返しま
す。
                //アドレス帳の直下の場合は"アドレス帳"という文字列を返します。
                $$part = dllfuncstr( "FindBookGroup", $$inf);
                if(leftstr( $$part, 1 ) == "\\"){
                    $$part = midstr( $$part, 1, strlen($$part) -1 ) ;
                    call Gsub $$part,"\\\\" , ")" ;
                    $$part = $$return ;
                }
            }
            else $$part = "" ;
        }
        else if(##part_mode == 10){
            $$en = dllfuncstr( "FindBookNote8", $$inf);
            if($$en == "enable_group"){
                //FindBookGroupPath関数(TkInfo.dll)
                //アドレス帳に登録されているグループのパス名、つまり、グルー
プの
                //階層全体を返します。各グループ名の前には「\」の記号が付き
ます。
                //先頭のグループ名は、"アドレス帳"か、またはLDAPサーバーの名
前となります。
                //たとえば、"ABC"というグループ配下の"XYZ"というグループであ
る場合、
                //\アドレス帳\ABC\XYZ
                //という文字列を返します。
                $$part = dllfuncstr( "FindBookGroupPath", $$inf);
                if(leftstr( $$part, 1 ) == "\\"){
                    $$part = midstr( $$part, 1, strlen($$part) -1 ) ;
                    call Gsub $$part,"\\\\" , ")" ;
                    $$part = $$return ;
                }
                if(leftstr($$part,strlen("アドレス帳")) == "アドレス帳"){
                    $$part =
                        midstr($$part,strlen("アドレス帳") + strlen(")"),
                                strlen($$part) - strlen("アドレス帳") - strl
en(")")) ;
                }
            }
            else $$part = "" ;
        }

        //取得敬称情報が$$word="not_apply"でない場合
        if($$keisyou != $$word){
            //敬称のチェックを実施
            ##j = 0 ;
            ##res = 0 ;
            while( ##j < ##chk_cnt ) {
                //登録済み敬称の場合
                if($get_list[##j] == $$keisyou){
                    ##res = 1 ;
                    break ;
                }
                ##j = ##j + 1;
            }
            //$get_listに定義していない敬称の場合、Defaultにする
            if(##res ==0){
                $$keisyou = $$keisyou_def ;
            }
        }

        $list[##i] = $$name ;
        $list_keisyou[##i] = $$keisyou ;
        $list_part[##i] = $$part ;

        ##i = ##i + 1;
    }
return ##To_count ;

Make_str:
//処理:挿入文字列を作成する。グローバル変数$list,$list_keisyou,
//$list_part(共に配列)を使用する。
//引数渡し
    //第一引数: 文字列型,listを取得するiniファイルを指定
    $$ini = $$1;
    //第二引数: 文字列型,listを取得するiniファイルのセクション名を指定
    $$Section = $$2;
    //第三引数: 数値型,処理アドレス個数
    ##cnt = ##3;
    //第四引数: 数値型,ccを実施するモードフラグ
    ##cc_mode = ##4;
    //第五引数: 数値型,取得した名称に半角空白がある場合、その前の部分のみ取
得するoption
    ##div_name = ##5;
    if($$ini == ""){
        message "サブルーチンMake_str:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    else if(! existfile( $$ini )) {
        message "サブルーチンMake_str:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$Section ==""){
        message "サブルーチンMake_str:第二引数エラー。\n" + $info ;
        goto LEND ;
    }
    if(##cnt == 0){
        message "サブルーチンMake_str 第三引数Error\n" + $info ;
    }
   
    //敬称情報が下記定義のとき、敬称を付加しない。
    $$word = getinistr($$ini,$$Section,"not_apply");
    if($$word == "") $$word = "not_apply" ;


    //複数の名前の場合間に改行を挿入するモード
    //ins_ret_mode
    //0 = なにもしない
    //1= 複数の名前の間に改行を挿入する

    //ins_ret_mode取得
    $$wk = getinistr($$ini,$$Section,"ins_ret_mode");
    //INIファイルから文字列を取りだします。
    if($$wk == ""){
        ##ins_ret_mode = 1 ;    //default
    }
    else ##ins_ret_mode = val($$wk) ;
   
    if(##ins_ret_mode == 0){
        $$return_char = "" ;
    }
    else{
        $$return_char = "\n" ;
    }

    //to_char
    //toで取得した名前の前に挿入するキャラクタ
    //キャラクタDefault取得
    $$to_char_def = getinistr($$ini,$$Section,"to_char");
    //INIファイルから文字列を取りだします。
    if($$to_char_def == ""){
        $$to_char_def = "" ; //default
    }
    //toで取得した名前の前に挿入するキャラクタを抑制する
    if(getininum($$ini,$$Section,"to_char_enable") != 1){
        $$to_char_def = "" ;
    }

    //cc_char
    //ccで取得した名前の前に挿入するキャラクタ
    //キャラクタDefault取得
    $$cc_char_def = getinistr($$ini,$$Section,"cc_char");
    //INIファイルから文字列を取りだします。
    if($$cc_char_def == ""){
        $$cc_char_def = "CC) " ; //default
    }
    //ccで取得した名前の前に挿入するキャラクタを抑制する
    if(getinistr($$ini,$$Section,"cc_char_disable") == "1"){
        $$cc_char_def = "" ;
    }

    ##i = 0;
    //to,cc のとき、前につける文字を定義する
    //$$return_charが""のときは付加しない
    if($$return_char != ""){
        if(##cc_mode == 1){
            $$char = $$cc_char_def ;
        }
        else{
            $$char = $$to_char_def ;
        }
    }
    else{
        $$char = "" ;
    }
   
    //複数の敬称付き宛名挿入をする時に1行当たりに挿入する
    //数を指定する。
    ##namecnt_p_line = getininum($$ini,$$Section,"namecnt_p_line") ;
    if(##namecnt_p_line == 0) ##namecnt_p_line = 1 ;

    while( ##i < ##cnt ) {
        //##div_name optionが1のとき、空白より前だけを取得
        $$s = $list[##i] ;
        if(($list[##i] != "") && (##div_name == 1)){
            //$list[##i]に半角空白" " があるか探す
            ##n = strstr($list[##i]," ");
            //str1からstr2を検索し,見つかった場合はその位置を返します。
            //先頭が0です。見つからなかった場合は-1を返します。 返す値は数値
型です。
            if(##n != -1){
                $$s = leftstr( $list[##i], ##n ) ;
            }
        }

        //敬称情報の正規表現文字列を取得
        $$reg_keisyou = getinistr($$ini,$$Section,"reg_keisyou");
        // 敬称情報が$$wordで定義した文字列"not_apply"のとき)
        if($list_keisyou[##i] == $$word){
            $$wk = "" ;
        }
        //正規表現情報を取得した時、
        else if($$reg_keisyou != ""){
            freedll;
            //hmjre.dllの機能を利用
            call HmJre ;
            //名前情報に定義された敬称を含むか含まないかを確認する。
            //第1パラメータ(文字列型):検索したい正規表現文字列を指定します。
            //第2パラメータ(文字列型):検索対象の文字列を指定します。
            //第3パラメータ(数値型):検索を開始する桁位置を指定します。
            //  先頭から検索したい場合は0を指定します。
            //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返します。
            //ヒットしなかった場合は-1を返します。
            //正規表現の解釈その他でエラーが起きた場合は-2を返します。
            ##n = dllfunc( "FindRegular",
                $$reg_keisyou,
                $$s, 0 );
            //敬称文字列が一致。名前情報に登録された敬称が含まれる。
            if (##n >= 0) {
                $$wk = "" ;
            }
            //名前情報に登録された敬称が含まれない。
            else{
                $$wk = $list_keisyou[##i] ;
            }
            freedll;
            call HidemaruMail ;
        }
        //正規表現情報を取得しなかった時 and
        //名前情報の末尾が敬称情報と一致した時
        else if(rightstr($$s,strlen($list_keisyou[##i])) == $list_keisyou[##
i]){
            $$wk = "" ;
        }
        else $$wk = $list_keisyou[##i] ;
   
        //部署名情報の処理
        if($list_part[##i] != ""){
            $$part = $list_part[##i] + " " ;
        }
        else{
            $$part = "" ;
        }
       
        //改行キャラクタ作成処理
        if(##ins_ret_mode == 1){
            if( (##i % ##namecnt_p_line) == 0){
                $$return = $$return_char ;
            }
            else{
                $$return = "" ;
            }
        }
        else{
            $$return = $$return_char ;
        }

        //文字列が存在するとき。
        if($$str != ""){
            $$str = $$str +
                //char_def=複数の名前の場合間に挿入するキャラクタ。
                getinistr($$ini,$$Section,"char_def") +
                //複数の名前の間の改行。
                //ins_ret_mode=0:改行なし
                //ins_ret_mode=1:複数の名前の間に改行を挿入する
                $$return +
                //ccで取得した名前の前に挿入するキャラクタ
                $$char +
                //部署名
                $$part +
                //名前情報
                $$s +
                //敬称
                $$wk ;
        }
        //文字列が無い最初のとき。
        else{
            if(##cc_mode == 1) $$char_1st = $$cc_char_def ;
            else $$char_1st = $$to_char_def ;
            $$str =
                //to,ccで取得した名前の前に挿入するキャラクタ
                $$char_1st +
                //部署名
                $$part +
                //名前情報
                $$s +
                //敬称
                $$wk ;
        }
        ##i = ##i + 1;
    }
return $$str ;

chg_to_name:
//処理:第一引数で指定された文字列の名前情報を変更する。
//      作成した情報は第二引数のheaderにsetする。
//引数渡し
    //第一引数: 文字列型,処理を実施する文字列
    $$To_inf = $$1;
    //第ニ引数: 文字列型,処理後の情報をsetするheader
    $$header = $$2;
    //第三引数: 数値型,headerに敬称を付加するflag
    ##add_to_keisyou = ##3;
    //第四引数: 数値型,Headerの名前の半角空白以降を削除するflag
    ##div_name_header = ##4 ;
    //第五引数: 文字列型,登録している敬称すべてを正規表現で指定
    $$reg_keisyou = $$5 ;

    if($$To_inf == ""){
        message "サブルーチンchg_to_name 第一引数Error\n" + $info ;
    }
    if($$header == ""){
        message "サブルーチンchg_to_name 第ニ引数Error\n" + $info ;
    }

    //e-mailの個数を取得
    ##cnt_email = dllfunc("CountEmailList", $$To_inf);
    $$str = "" ;
    ##i = 0 ;
    //E-mail個数処理を繰り返す
    while(##i < ##cnt_email){
        //取得したHeaderから、指定した引数のE-mail情報を取得
        $$wk = dllfuncstr("GetEmailList", $$To_inf, ##i);
        //E-mailのみ取得する
        $$email = dllfuncstr( "SetEmailOnly", $$wk );
        //サブルーチンMake_nameで作成した名前を$$nameに代入
        $$name = $list[##i] ;
        //サブルーチンMake_nameで作成した補足情報を$$partに代入
        if($list_part[##i] != ""){
            $$part = $list_part[##i] + " " ;
        }
        else{
            $$part = "" ;
        }

        //名前とEmailが同じときは、名前情報を付けないようにする
        if($$name == $$email) {
            $$name = "" ;
        }
        $$s = $$part + $$name ;
        //名前 or 補足情報があるとき
        if(($$s != "") || ($$part != "")){
            //名前があるとき、e-mailに"<" ,">"をつける。
            $$email = "<" + $$email + ">" ;
            //敬称がすでに名前についている場合、付加しない
            //正規表現で示した敬称情報を利用してチェックする。
            if($$reg_keisyou != ""){
                freedll;
                //hmjre.dllの機能を利用
                call HmJre ;
                //第1パラメータ(文字列型):検索したい正規表現文字列を指定しま
す。
                //第2パラメータ(文字列型):検索対象の文字列を指定します。
                //第3パラメータ(数値型):検索を開始する桁位置を指定します。
                //  先頭から検索したい場合は0を指定します。
                //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返します。
                //ヒットしなかった場合は-1を返します。
                //正規表現の解釈その他でエラーが起きた場合は-2を返します。
                ##n = dllfunc( "FindRegular",
                    $$reg_keisyou,
                    $$s, 0 );
                //敬称文字列が一致
                if (##n >= 0) {
                    $$wk = "" ;
                }
                else{
                    $$wk = $list_keisyou[##i] ;
                }
                freedll;
                call HidemaruMail ;
            }
            //通常の文字列一致処理でチェックする。(登録済み敬称が存在する場合)
            else if(rightstr($$s,strlen($list_keisyou[##i])) == $list_keisyo
u[##i]){
                $$wk = "" ;
            }
            //登録済み敬称が存在しない場合
            else $$wk = $list_keisyou[##i] ;

            //ダブルクォーテーションで括られているかどうかチェックする。
            if( (leftstr($$s,1) == "\"") &&
                (rightstr($$s,1) == "\"")){
                ##double = 1 ;
                $$s = dllfuncstr("UnDoubleQuote", $$s ) ;
            }
            else ##double = 0 ;

            //##div_name_header optionが1のとき、空白より前だけを取得
            if(##div_name_header == 1){
                //$list[##i]に半角空白" " があるか探す
                ##n = strstr($$s," ");
                //空白を含むとき
                if(##n != -1){
                    $$s = leftstr( $$s, ##n ) ;
                }
            }
            if(##add_to_keisyou){
                //敬称がすでに名前についている場合、付加しない
                //正規表現で示した敬称情報を利用してチェックする。
                if($$reg_keisyou != ""){
                    freedll;
                    //hmjre.dllの機能を利用
                    call HmJre ;
                    //第1パラメータ(文字列型):検索したい正規表現文字列を指定
します。
                    //第2パラメータ(文字列型):検索対象の文字列を指定します。
                    //第3パラメータ(数値型):検索を開始する桁位置を指定します。
                    //  先頭から検索したい場合は0を指定します。
                    //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返
します。
                    //ヒットしなかった場合は-1を返します。
                    //正規表現の解釈その他でエラーが起きた場合は-2を返します。
                    ##n = dllfunc( "FindRegular",
                        $$reg_keisyou,
                        $$s, 0 );
                    //敬称文字列が一致
                    if (##n >= 0) {
                        $$wk = "" ;
                    }
                    else{
                        $$wk = $list_keisyou[##i] ;
                    }
                    freedll;
                    call HidemaruMail ;
                }
                //通常の文字列一致処理でチェックする。(登録済み敬称が存在す
る場合)
                else if(rightstr($$s,strlen($list_keisyou[##i])) == $list_ke
isyou[##i]){
                    $$wk = "" ;
                }
                //登録済み敬称が存在しない場合
                else $$wk = $list_keisyou[##i] ;

                //ダブルクォーテーションで括られている場合
                if( ##double == 1){
                    $$s = "\"" + $$s + $$wk + "\"" ;
                }
                else $$s = $$s + $$wk ;
            }

            call Add_double $$s ;
            $$s = $$return;
        }
        $$wk = $$s + " " + $$email ;
        //挿入する文字列を作成
        if($$str == ""){
            $$str = $$wk ;
        }
        else{
            $$str = $$str + ", " + $$wk ;
        }
        ##i = ##i + 1 ;
    }

    //現在のHeaderを削除する。
    ##Header_count = dllfunc("CountCurrentHeader", $$header);
    ##i = 0 ;
    while( ##i < ##Header_count ) {
        ##n = dllfunc( "DeleteHeader2", $$header, ##i );
        ##i = ##i + 1;
    }
    //作成された文字列をHeaderにsetする
    if($$str != ""){
        ##n = dllfunc( "SetHeader", $$header, $$str );
    }
return ;
del_to_name:
//処理:第一引数で指定された文字列に禁止文字がないか確認。あった場合全角に置換。
//引数渡し
    //第一引数: 文字列型,チェックを行う文字列
    $$To_inf = $$1;
    $$header = $$2;
    if($$To_inf == ""){
        message "サブルーチンdel_to_name 第一引数Error\n" + $info ;
    }
    if($$header == ""){
        message "サブルーチンdel_to_name 第ニ引数Error\n" + $info ;
    }

    //e-mailの個数を取得
    ##cnt_email = dllfunc("CountEmailList", $$To_inf);
    $$str = "" ;
    ##i = 0 ;
    //E-mail個数処理を繰り返す
    while(##i < ##cnt_email){
        //取得したHeaderから、指定した引数のE-mail情報を取得
        $$wk = dllfuncstr("GetEmailList", $$To_inf, ##i);
        //E-mailのみ取得する
        $$wk = dllfuncstr( "SetEmailOnly", $$wk );
        //挿入する文字列を作成
        if($$str == ""){
            $$str = $$wk ;
        }
        else{
            $$str = $$str + ", " + $$wk ;
        }
        ##i = ##i + 1 ;
    }

    //現在のHeaderを削除する。
    ##Header_count = dllfunc("CountCurrentHeader", $$header);
    ##i = 0 ;
    while( ##i < ##Header_count ) {
        ##n = dllfunc( "DeleteHeader2", $$header, ##i );
        ##i = ##i + 1;
    }
    //作成された文字列をHeaderにsetする
    if($$str != ""){
        ##n = dllfunc( "SetHeader", $$header, $$str );
    }
return ;


Add_double:
//処理:第一引数で指定された文字列に対象文字がある場合、ダブルクォーテーショ
ンで括る。
//引数渡し
    //第一引数: 文字列型,チェックを行う文字列
    $$str = $$1;
    if($$str == ""){
        message "サブルーチンAdd_double 第一引数Error\n" + $info ;
        goto LEND ;
    }
    $$Err_char = "<>[]()" ;
    ##loop = strlen($$Err_char) ;

    //ダブルクォーテーションで括られていない場合
    if( (leftstr($$str,1) != "\"") &&
        (rightstr($$str,1) != "\"")){
        ##i = 0 ;
        while(##i < ##loop){
            $$char = midstr($$Err_char,##i,1) ;
            while(strstr($$str,$$char) != -1){
                $$str = "\"" + $$str + "\"" ;
                ##flag = 1 ;
                break;
            }
            if(##flag) break;
            ##i = ##i + 1 ;
        }
    }

return $$str ;

add_to_keisyou:
//処理:第一引数で指定された文字列の名前情報を変更する。
//      作成した情報は第二引数のheaderにsetする。
//引数渡し
    //第一引数: 文字列型,処理を実施する文字列
    $$To_inf = $$1;
    //第ニ引数: 文字列型,処理後の情報をsetするheader
    $$header = $$2;
    //第三引数: 文字列型,登録している敬称すべてを正規表現で指定
    $$reg_keisyou = $$3 ;
    if($$To_inf == ""){
        message "サブルーチンadd_to_keisyou 第一引数Error\n" + $info ;
    }
    if($$header == ""){
        message "サブルーチンadd_to_keisyou 第ニ引数Error\n" + $info ;
    }

    //e-mailの個数を取得
    ##cnt_email = dllfunc("CountEmailList", $$To_inf);
    $$str = "" ;
    ##i = 0 ;
    //E-mail個数処理を繰り返す
    while(##i < ##cnt_email){
        //取得したHeaderから、指定した引数のE-mail情報を取得
        $$wk = dllfuncstr("GetEmailList", $$To_inf, ##i);
        //E-mailのみ取得する
        $$email = dllfuncstr( "SetEmailOnly", $$wk );
        //パラメータで渡された「名前+Email」の形式の文字列から、名前部分のみ
を取り出して返します。
        //名前情報は、Headerの名前を使用する。
        $$name = dllfuncstr( "SetNameOnly", $$wk );
       
        //名前とEmailが同じときは、名前情報を付けないようにする
        if($$name == $$email) {
            $$name = "" ;
        }
        if($$name != "") {
            //名前があるとき、e-mailに"<" ,">"をつける。
            $$email = "<" + $$email + ">" ;
            //敬称がすでに名前についている場合、付加しない
            //正規表現で示した敬称情報を利用してチェックする。
            if($$reg_keisyou != ""){
                freedll;
                //hmjre.dllの機能を利用
                call HmJre ;
                //第1パラメータ(文字列型):検索したい正規表現文字列を指定しま
す。
                //第2パラメータ(文字列型):検索対象の文字列を指定します。
                //第3パラメータ(数値型):検索を開始する桁位置を指定します。
                //  先頭から検索したい場合は0を指定します。
                //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返します。
                //ヒットしなかった場合は-1を返します。
                //正規表現の解釈その他でエラーが起きた場合は-2を返します。
                ##n = dllfunc( "FindRegular",
                    $$reg_keisyou,
                    $$name, 0 );
                //敬称文字列が一致
                if (##n >= 0) {
                    $$wk = "" ;
                }
                else{
                    $$wk = $list_keisyou[##i] ;
                }
                freedll;
                call HidemaruMail ;
            }
            //通常の文字列一致処理でチェックする。(登録済み敬称が存在する場合)
            else if(rightstr($$name,strlen($list_keisyou[##i])) == $list_kei
syou[##i]){
                $$wk = "" ;
            }
            //登録済み敬称が存在しない場合
            else $$wk = $list_keisyou[##i] ;

            //ダブルクォーテーションで括られているかどうかチェックする。
            if( (leftstr($$name,1) == "\"") &&
                (rightstr($$name,1) == "\"")){
                $$name = "\"" + dllfuncstr("UnDoubleQuote", $$name ) + $$wk
+ "\"" ;
            }
            else {
                $$name = $$name + $$wk ;
            }

            call Add_double $$name ;
            $$name = $$return;
        }
        $$wk = $$name + " " + $$email ;
        //挿入する文字列を作成
        if($$str == ""){
            $$str = $$wk ;
        }
        else{
            $$str = $$str + ", " + $$wk ;
        }
        ##i = ##i + 1 ;
    }

    //現在のHeaderを削除する。
    ##Header_count = dllfunc("CountCurrentHeader", $$header);
    ##i = 0 ;
    while( ##i < ##Header_count ) {
        ##n = dllfunc( "DeleteHeader2", $$header, ##i );
        ##i = ##i + 1;
    }
    //作成された文字列をHeaderにsetする
    if($$str != ""){
        ##n = dllfunc( "SetHeader", $$header, $$str );
    }
return ;

Res_check:
//処理:処理の判定&メッセージ表示
    //引数渡し
    ##num = ##1;    $$mes = $$2 ;
    if(##num != 1){
        message $$mes ;
        goto LEND;
    }
return ;

Str_check:
//処理:文字列の判定&メッセージ表示
    //引数渡し
    $$str = $$1;    $$mes = $$2 ;
    if($$str == ""){
        message $$mes ;
        goto LEND;
    }
return ;

Trim:
//機能: 前後の空白を削除する
    //第一引数: 文字列型,処理対象文字列
    //戻り値:   文字列型,処理後文字列
//引数渡し
    $$str = $$1;
    //空白を削除 trim
    //右の空白を削除
    while(1){
        if(rightstr($$str,1) == " ") $$str = leftstr($$str,strlen($$str) -1);
        else break ;
    }
    //左の空白を削除
    while(1){
        if(leftstr($$str,1) == " ") $$str = rightstr($$str,strlen($$str) -1);
        else break ;
    }
return $$str ;

Trim_L:
//機能: 前の空白を削除する
    //第一引数: 文字列型,処理対象文字列
    //戻り値:   文字列型,処理後文字列
//引数渡し
    $$str = $$1;
    while(1){
        if(leftstr($$str,1) == " ") $$str = rightstr($$str,strlen($$str) -1);
        else break ;
    }

return $$str ;
Trim_R:
//機能: 後の空白を削除する
    //第一引数: 文字列型,処理対象文字列
    //戻り値:   文字列型,処理後文字列
//引数渡し
    $$str = $$1;
    //右の空白を削除
    while(1){
        if(rightstr($$str,1) == " ") $$str = leftstr($$str,strlen($$str) -1);
        else break ;
    }
return $$str ;

HmJre:
    //  HmJre.DLLのロード
    loaddll "HmJre.dll" ;
    if(!result ){
        message "HmJre.dllのロードに失敗しました。";
        goto LEND;
    }
    //HmJre.dllの版数を取得。
    ##ver = (((dllfunc("JreGetVersion") & 0xFF00) / 256) * 100) +
            ((dllfunc("JreGetVersion") & 0xF0) / 16 * 10) +
            (dllfunc("JreGetVersion") & 0xF) ;  
    if (##ver < 150) {
        $$mes = "HmJre.DLLの版数が Ver1.50より古いです\n" +
        "現在のHmJre.DLL版数=" +
        leftstr(str(##ver),1) + "." +
        midstr(str(##ver),1,1) + "." +
        midstr(str(##ver),2,1) + "\n" +
        $info ;
        ##ret = 0 ;
    }
    else
        ##ret = 1 ;
   
return ##ret ;

reg_escape:
//機能: 正規表現の特定文字をエスケープ処理を実施する。
    //第一引数: 文字列型,処理対象文字列
    //第二引数: 数値型,田楽Dllを使用するかしないかを指定する。1=使用する。0=
使用しない。
    //戻り値:   文字列型,処理後文字列
    $$s = $$1 ;
    ##dengaku = ##2 ;
    $$str[##i] = "\\" ; ##i = ##i + 1 ;
    $$str[##i] = "." ; ##i = ##i + 1 ;
    $$str[##i] = "*" ; ##i = ##i + 1 ;
    $$str[##i] = "+" ; ##i = ##i + 1 ;
    $$str[##i] = "?" ; ##i = ##i + 1 ;
    $$str[##i] = "^" ; ##i = ##i + 1 ;
    $$str[##i] = "$" ; ##i = ##i + 1 ;
    $$str[##i] = "[" ; ##i = ##i + 1 ;
    $$str[##i] = "]" ; ##i = ##i + 1 ;
    $$str[##i] = "(" ; ##i = ##i + 1 ;
    $$str[##i] = ")" ; ##i = ##i + 1 ;
    $$str[##i] = "|" ; ##i = ##i + 1 ;
    ##cnt = 0;
    while( ##cnt < ##i ) {
        if(##dengaku == 1){
            //loaddllされている場合、ロードされているDLLのファイル名を返しま
す。
            //田楽dllの機能を利用
            //GSUB
            //使い方:$s = dllfuncstr("GSUB",$s1,$s2,$s3,#n4);
            //説明:文字列中の部分文字列を別の文字列に置換します。
            //引数:
            //  $s1:置換対象文字列
            //  $s2:検索文字列
            //  $s3:置換文字列
            //  #n4:最初から何個の文字列を置換するか
            //  (-1 を指定すると見つかったものを全て置換します)
            //返り値:置換された結果の文字列が返ります。
            $$s = dllfuncstr("GSUB",$$s,$$str[##cnt],"\\" + $$str[##cnt],-1);
        }
        else{
            $$wk = $$s ;
            $$s = "" ;
            while(1){
                ##n = strstr($$wk,$$str[##cnt]);
                if(##n != -1){
                    $$s = $$s + leftstr($$wk,##n) + "\\" + $$str[##cnt] ;
                    $$wk = midstr($$wk,##n+1,strlen($$wk) - ##n -1) ;
                }
                else {
                    $$s = $$s + $$wk ;
                    break ;
                }
            }
        }
        ##cnt = ##cnt + 1;
    }
return $$s ;

Dengaku:
    //  田楽DLLのロード
    if(existfile(hidemarudir+"\\DengakuDLL.dll"))loaddll hidemarudir+"\\Deng
akuDLL.dll";
    else {
        $$mes = "田楽DLLが見つかりませんでした。\n" +
                "田楽DLLを秀丸エディタインストールディレクトリにおいてくださ
い。\n" +
                "  秀丸エディタインストールディレクトリ:\n\t"+hidemarudir +
"\n\n" +
                "田楽DLL ダウンロードURL\n"+
                "  http://www.ceres.dti.ne.jp/~sugiura/hidemaru/macros/dgserver/
\n" +
                $info ;
        message $$mes ;
        goto LEND ;
    }

    if (!result) {
        message "田楽DLL をロードできませんでした。"+$info;
        goto LEND ;
    }
return;

Gsub:
//機能: "\"を第二引数で指定した文字に置換する
    //第一引数: 文字列型,処理対象文字列
    //第ニ引数: 文字列型,置換文字列
    //第三引数: 文字列型,第二引数で指定した文字列を置き換える文字列
    //戻り値:   文字列型,処理後文字列
    $$target = $$1 ;
    $$reg_str = $$2 ;
    $$gsub = $$3 ;

    if($$target == ""){
        message "サブルーチンGsub:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$reg_str == ""){
        message "サブルーチンGsub:第ニ引数エラー。\n" + $info ;
        goto LEND ;
    }

    //loaddllされている場合、ロードされているDLLのファイル名を返します。
    //ロードされていない場合は何もない文字列を返します。
    $$dllfile = loaddllfile ;
    if($$dllfile != "") freedll;

    //hmjre.dllの機能を利用
    call HmJre ;

    //FindRegular(V1.50以降から)
    //特定の文字列から特定の正規表現パターンのマッチングをして、ヒットした場
合は
    //その位置を返します。
    //第1パラメータ(文字列型): 検索したい正規表現文字列を指定します。
    //第2パラメータ(文字列型): 検索対象の文字列を指定します。
    //第3パラメータ(数値型): 検索を開始する桁位置を指定します。
    //先頭から検索したい場合は0を指定します。
    //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返します。
    //ヒットしなかった場合は-1を返します。
    //正規表現の解釈その他でエラーが起きた場合は-2を返します。
    ##n = dllfunc( "FindRegular",
        $$reg_str,
        $$target, 0 );
    //検索文字列が一致
    if (##n > 0) {
        while( ##n > 0 ) {
            $$target =
                leftstr( $$target, ##n ) +
                $$gsub +
                midstr( $$target, ##n +1, strlen($$target) - ##n - 1 ) ;
            ##n = dllfunc( "FindRegular",
                $$reg_str,
                $$target, 0 );
        }
    }
    else if(##n == -2){
        message "正規表現の解釈その他でエラーが発生" ;
    }

    if($$dllfile != ""){
        loaddll $$dllfile ;
        if(!result ){
            message $$dllfile + "\nのロードに失敗しました。" + $info ;
            goto LEND ;
        }
    }

return $$target ;

HmJre:
    //  HmJre.DLLのロード
    loaddll "HmJre.dll" ;
    if(!result ){
        message "HmJre.dllのロードに失敗しました。";
        goto LEND;
    }
    //HmJre.dllの版数を取得。
    ##ver = (((dllfunc("JreGetVersion") & 0xFF00) / 256) * 100) +
            ((dllfunc("JreGetVersion") & 0xF0) / 16 * 10) +
            (dllfunc("JreGetVersion") & 0xF) ;  
    if (##ver < 150) {
        $$mes = "HmJre.DLLの版数が Ver1.50より古いです\n" +
        "現在のHmJre.DLL版数=" +
        leftstr(str(##ver),1) + "." +
        midstr(str(##ver),1,1) + "." +
        midstr(str(##ver),2,1) + "\n" +
        $info ;
        ##ret = 0 ;
    }
    else
        ##ret = 1 ;
   
return ##ret ;
//------------HMML_INS_NAME.MAC-------------

[ ]
RE:00233 「宛先名挿入マクロ」に機能追加No.00234
プックン さん 08/06/17 01:19
 
追記.
修正して作ってみたマクロを使用するには、puku.iniファイルの
part_modeの値を9(グループ)もしくは10(グループパス)を
指定して使用してみてください。
[hmml_ins_name.mac]
part_mode=9
part_mode=10


>//------------HMML_INS_NAME.MAC-------------


[ ]
RE:00234 「宛先名挿入マクロ」に機能追加No.00235
siniti さん 08/06/18 19:55
 
プックンさん

sinitiです。

早々、β版の提供ありがとうございました。
最近仕事で遅くまでだったので返事が遅くなりました。

>part_modeの値を9(グループ)もしくは10(グループパス)を
>指定して使用してみてください。
>[hmml_ins_name.mac]
>part_mode=9
>part_mode=10

Q1)part_mode=9でグループ名を付加する際に、
  グループ名△氏名が表示されます。
  この△が半角空白ですが、これを半角「)」カッコにできませんか?

Q2)part_mode=10 が正常に動作しないように思えるのですが?
  part_mode=9と同じ動きに見えます。
  No.00227ではアドレス帳)グループ名」との事だったと思うのですが、「グルー
プ名 氏名」が表示されます。

[ ]
RE:00234 「宛先名挿入マクロ」に機能追加No.00237
siniti さん 08/06/18 20:16
 
プックンさん

sinitiです。

>(1)で作成することはちょっと面倒なのですが、可能です。
>ただし、使用される方が、グループ名をpuku.iniファイルに記入するのが面倒。
>マクロなどでグループ名を容易に指定する方法があればよいのですが、どのように
>すればよいのか
>具体的な方法が思い浮かばないです。

たとえば、プックン作の「CHECK_DOM_EMAIL_SETUP.MAC」のように
マクロを使用して、アドレス帳に登録しているグループ名を取得して、
グループ名やに登録するか削除するかを指定して、puku.iniに登録するのはだめです
か?
→これをするときには、アドレス帳のグループ名とは違うグループ名を指定して登録
する機能がほしいですね。

[ ]
RE:00235 「宛先名挿入マクロ」に機能追加No.00240
プックン さん 08/06/20 00:01
 
sinitiさん、こんばんは。

>Q1)part_mode=9でグループ名を付加する際に、
>  グループ名△氏名が表示されます。
>  この△が半角空白ですが、これを半角「)」カッコにできませんか?
グループpath情報の"\"および"グループ名の後に挿入する文字を
puku.iniのセクション情報"divider"から取得するようにマクロを修正してみたいと
思います。
[hmml_ins_name.mac]
divider=)


>Q2)part_mode=10 が正常に動作しないように思えるのですが?
>  part_mode=9と同じ動きに見えます。
>  No.00227ではアドレス帳)グループ名」との事だったと思うのですが、「グルー
>プ名 氏名」が表示されます。
FindBookGroupPath関数を実行すると、
|先頭のグループ名は、"アドレス帳"か、またはLDAPサーバーの名前となります。
とhelpに記載されているので、先頭の"アドレス帳"は不要かなと考えて"アドレス帳"
の部分を削除するように修正しています。

[ ]
RE:00237 「宛先名挿入マクロ」に機能追加No.00241
プックン さん 08/06/20 00:08
 
siniti

>たとえば、プックン作の「CHECK_DOM_EMAIL_SETUP.MAC」のように
>マクロを使用して、アドレス帳に登録しているグループ名を取得して、
>グループ名やに登録するか削除するかを指定して、puku.iniに登録するのはだめで
>すか?
>→これをするときには、アドレス帳のグループ名とは違うグループ名を指定して登
>録する機能がほしいですね。
アドレス帳のグループ情報を補足情報として挿入したいというためにpart_modeに9,1
0を追加しました。
アドレス帳のグループ名と異なる情報を挿入したいのであれば、"To,Ccの補足情報挿
入処理"として備考〜備考8のどこかから情報を取得するモードで利用していただけれ
ばいいのではないでしょうか。グループ情報で取得した情報を利用しないのに、グ
ループ情報を元に別のグループ名を処理するべき理由が今ひとつ理解できてません。

[ ]
RE:00241 「宛先名挿入マクロ」に機能追加No.00242
プックン さん 08/06/20 00:09
 
>siniti
編集中に送信処理をしてしまいました。
敬称などが抜けていました。失礼しました。
sinitiさん、こんばんは。

[ ]
RE:00240 「宛先名挿入マクロ」に機能追加No.00243
siniti さん 08/06/20 02:26
 
ぷっくんさん

sinitiです。

>グループpath情報の"\"および"グループ名の後に挿入する文字を
>puku.iniのセクション情報"divider"から取得するようにマクロを修正してみたいと
>思います。
>[hmml_ins_name.mac]
>divider=)

ありがとうございます。

>FindBookGroupPath関数を実行すると、
>|先頭のグループ名は、"アドレス帳"か、またはLDAPサーバーの名前となります。
>とhelpに記載されているので、先頭の"アドレス帳"は不要かなと考えて"アドレス帳
>"の部分を削除するように修正しています。

よろしくお願いします。

[ ]
RE:00241 「宛先名挿入マクロ」に機能追加No.00244
siniti さん 08/06/20 02:34
 
プックンさん

sinitiです。

>>→これをするときには、アドレス帳のグループ名とは違うグループ名を指定して登
>録する機能がほしいですね。
>アドレス帳のグループ情報を補足情報として挿入したいというためにpart_modeに9,
>10を追加しました。
>アドレス帳のグループ名と異なる情報を挿入したいのであれば、"To,Ccの補足情報
>挿入処理"として備考〜備考8のどこかから情報を取得するモードで利用していただ
>ければいいのではないでしょうか。
>グループ情報で取得した情報を利用しないのに、グループ情報を元に別のグループ
>名を処理するべき理由が今ひとつ理解できてません。

すみません。
言葉足らずで、かつ誤った記載でした。
訂正と、なぜグループ名以外の情報が必要かですが、

グループ名を会社名や部門などの正式名称で設定したらアドレス帳の
グループ名欄が長くなりすぎて見づらいので、略称で設定しています。
しかし、今回の対応でメールの宛先に挿入されるグループ名を自分が勝手に設定した
グループ名(略称会社名や略称の部門や略称の課名)ではメールを送信する相手には
失礼になるので、登録したグループ名(略称)とは別に正式名称を登録できれば便利
なのです。


[ ]
RE:00244 「宛先名挿入マクロ」に機能追加No.00247
プックン さん 08/06/25 00:34
 
sinitiさん、こんばんは。

>グループ名を会社名や部門などの正式名称で設定したらアドレス帳の
>グループ名欄が長くなりすぎて見づらいので、略称で設定しています。
別名を補助情報で挿入できるような感じで検討してみました。
アドレス帳の備考8に"enable_group"を指定することで、
グループ情報を補足情報挿入として利用できますが、
備考8に"alias:" + 補足情報として挿入したい文字列
を指定してください。
グループ名欄が長くなりすぎて見づらいときの略称を"補足情報として挿入したい文
字列"
として指定してください。
これで略称情報を利用できると思います。
また試してみてください。

設定方法
    グループ情報を利用する設定は
        part_mode=9
    グループパス情報を利用する設定は
        part_mode=10
    をpuku.iniに設定します。

アドレス帳で、グループ情報を利用したいアドレスが大半でグループ情報を
利用したくないアドレスの方がすくない場合、使用しないアドレスに対して
指定したほうが楽なので、下記設定 + アドレス帳備考8に"disable_group"
を指定することで、グループ情報を使用しなくなります。
指定しないアドレスはグループ情報を利用できます。
    追加設定
    [hmml_ins_name.mac]
    group_mode=1

今まで、"enable_group"を指定するアドレス帳の備考は備考8固定でしたが、
    engroup_mode=8      1〜8の間
を変更することで、変更できます。

例.
"disable_group"でグループ情報を利用しないアドレスを指定する設定
備考5から"enable_group","disable_group","alias:"+補足情報を取得する設定
[hmml_ins_name.mac]
divider=)
group_mode=1
part_mode=9
engroup_mode=5

例.
"enable_group"でグループ情報を利用するアドレスを指定する設定
グループパス情報を利用する設定
(group_modeを省略した場合も"enable_group"指定で利用アドレスを利用)
備考8から"enable_group","disable_group","alias:"+補足情報を取得する設定
(engroup_modeを省略した場合も備考8から取得)
[hmml_ins_name.mac]
divider=)
group_mode=0
part_mode=10
engroup_mode=8

//------------HMML_INS_NAME.MAC-------------
$$ver  = "1.17Beta2";
$$date = "2008/06/25";
$$author = "プックン" ;
$$fname = currentmacrobasename ;
$info = "\n" + $$fname + " Ver " + $$ver+ "\n最終更新日付:"+$$date ;
$info = $info + "\n作者:"+$$author ;

    disabledraw ;   //画面の書き換えを禁止します。

    call HidemaruMail ;

    //ソフト版数チェック
    ##require = 450 ;
    ##ver = dllfunc("TuruKameVersion");
    if ( ##ver < ##require ) {
        message "秀丸メールがVer" +
                leftstr(str(##ver),1) + "." +
                midstr( str(##ver), 1, length(str(##ver))-1 ) +
                "です。Ver" +
                leftstr(str(##require),1) + "." +
                midstr( str(##require), 1, length(str(##require))-1 ) +
                "以降を使用してください。\n" ;
        goto LEND;
    }

    //秀丸メールの本体ウィンドウ中かどうか
    if(dllfunc("IsHidemaruMailMain")){
        message "秀丸メールエディタウィンドウで実行してください。\n" + $info ;
        goto LEND ;
    }

    //新規作成時処理用に情報を取得
    ##MailType = dllfunc("MailType") ;
    //-1:何も無い場合
    //0:新規作成のメール
    //1:返信メール
    //2:転送メール
    //3:受信したメールの場合
    //4:送信済みメールの場合
    //5:未送信フォルダまたは草稿フォルダに保存された未送信メール
    //6:「添付ファイルとして転送」で作成されたメールで、まだ保存されてない段
階の物。
    //-1:何も無い場合
    //0:新規作成のメール
    //1:返信メール
    //2:転送メール
    //3:受信したメールの場合
    //4:送信済みメールの場合
    //5:未送信フォルダまたは草稿フォルダに保存された未送信メール
    //6:「添付ファイルとして転送」で作成されたメールで、まだ保存されてない段
階の物。
    if(##MailType == 3){
        message "マクロの対象外メールです。" + $info ;
        goto LEND ;
    }
    //送信済みメールの場合
    else if(##MailType == 4){
        question "\"送信済みメール\"の編集を許可してもよいですか?\n" + $info ;
        if( result == yes ) {
            //送信済みメールや受信メールをエディタ・ウィンドウで開いている時
に、「編集を許可」します。
            //エディタ・ウィンドウ上で、編集が禁止された状態になっている時に
のみ有効な関数です。
            //編集できる状態かどうかは、秀丸マクロのreadonlyキーワードを使え
ば分かります。
            if(readonly){
                ##n = dllfunc( "EnableEdit" );
                call Res_check ##n , "編集を許可できませんでした\n" + $info ;
            }
        }
        else goto LEND ;
    }

    //検索実行後insertを実行したときに、"選択範囲"の場合に、検索した文字列
    //の上に挿入してしまうのを防ぐため。
    //検索での表示 点滅表示/範囲選択の情報を取得する。
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    #reg_search = searchmode;
    writeregnum "SelectFound",0;    //点滅表示に変更する
    envchanged;
    closereg ;
    $sbuf = searchbuffer ;  //マクロ終了時に、検索条件を復元するため記憶
    #sopt = searchoption ;
    $rbuf = replacebuffer;

    //文字列挿入
    //現在位置に、文字を挿入してカーソル位置を記録しておく。
    //To,Subjectが空白だと、その位置に移動するため、テンプレートで
    //指示した$cの位置を記憶する。
    $$cur_char = "@c@" ;
    ##cur_move = 0 ;
    //カーソル位置を確認する。
    if(y >= 0){     //メール本文の場合に、$$cur_charを挿入する。
        insert $$cur_char ;
        ##cur_move = 1 ;
    }
    else{
    //Headerの場合 and
    //テンプレートでカーソル位置の指定があった場合に、、$$cur_charを挿入する。
        moveto 0,-1 ;
        tab ;
        if((x != 0) || (y != 0)){
            insert $$cur_char ;
            ##cur_move = 1 ;
        }
    }

//初期定義
    //アカウント名を取得
    $$account = dllfuncstr("ExecAtMain", "CurrentAccount") ;
    call Str_check $$account,"アカウントの取得に失敗しました。\n" + $info ;
    //INIファイル
    //定義ファイル(INIファイル)
    $$ini = dllfuncstr("HomeDir") +
            $$account +
            "\\puku.ini" ;
    //セクション
    $$Section = currentmacrobasename ;

    //Alt が押されているとき、CCの敬称付き宛名の先頭文字を省略する。
    if      ( iskeydown(0x12) ) {
        ##cc_char_disable = 1 ;
        writeinistr $$ini, $$Section, "cc_char_disable", "1" ;
    }

    //Shift が押されているとき、cc_modeを一時的に切り替える
    if      ( iskeydown(0x10) ) {##cc_mode_inv = 1 ;}
    //もしくはiniファイルの"cc_mode_inv"情報が"1"のとき
    //cc_modeを一時的に切り替える
    else if (getinistr($$ini,$$Section,"cc_mode_inv")  == "1") {
        ##cc_mode_inv = 1 ;
        writeinistr $$ini, $$Section, "cc_mode_inv", 0 ;
    }

    //to_skip
    //Ctrl が押されているとき、to_skip_modeを一時的に切り替える
    if      ( iskeydown(0x11) ) {##to_skip_mode_inv = 1 ;}
    //もしくはiniファイルの"cc_mode_inv"情報が"1"のとき
    //cc_modeを一時的に切り替える
    else if (getinistr($$ini,$$Section,"to_skip_mode_inv")  == "1") {
        ##to_skip_mode_inv = 1 ;
        writeinistr $$ini, $$Section, "to_skip_mode_inv", 0 ;
    }

    $$wk = getinistr($$ini,$$Section,"Get_info_ini");
    if($$wk == ""){
        //情報がなにもないのでiniファイルのサンプルを作成する。
        writeinistr $$ini, $$Section,  "Get_info_ini", "0" ;
        writeinistr $$ini, $$Section,  "//    Get_info_ini(Default=0) 0:ini
ファイルから敬称list情報を取得しない。1:取得する。", "" ;
        writeinistr $$ini, $$Section,  "//Get_info_ini", "1" ;
        writeinistr $$ini, $$Section,  "//    name(Default=0): 0 = アドレス
帳から名前を取得,1 = ヘッダから名前を取得", "" ;
        writeinistr $$ini, $$Section,  "//name", "0" ;
        writeinistr $$ini, $$Section,  "//    keisyou_modeとは(Default=0)",
"" ;
        writeinistr $$ini, $$Section,  "//    0 = Defaultの敬称をつける", "" ;
        writeinistr $$ini, $$Section,  "//    1 = アドレス帳の備考 を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//    2 = アドレス帳の備考2を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//    3 = アドレス帳の備考3を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//keisyou_mode", "3" ;
        writeinistr $$ini, $$Section,  "//    pos(Default=0): 0 = 先頭に挿入,
1 = 定義文字列の位置に挿入,2=カーソル位置に挿入", "" ;
        writeinistr $$ini, $$Section,  "//pos", "1" ;
        writeinistr $$ini, $$Section,  "//    home_c(Default=@P@): ホームポ
ジション定義キャラクタ", "" ;
        writeinistr $$ini, $$Section,  "//home_c", "@P@" ;
        writeinistr $$ini, $$Section,  "//    keisyou_def(Default=殿):敬称De
fault取得", "" ;
        writeinistr $$ini, $$Section,  "//keisyou_def", "様" ;
        writeinistr $$ini, $$Section,  "//    char_def(Default=なし): 複数の
名前の場合間に挿入するキャラクタ。ins_ret_mode=0のときに設定するとよい。", "" ;
        writeinistr $$ini, $$Section,  "//char_def", "," ;
        writeinistr $$ini, $$Section,  "//ins_ret_mode(Default=1) : 0 = なに
もしない,1= 複数の名前の間に改行を挿入する", "" ;
        writeinistr $$ini, $$Section,  "//ins_ret_mode", "0" ;
        writeinistr $$ini, $$Section,  "//    adr_mode(Default=1):0 = 何もし
ない,1 = To:の情報がないときにアドレス帳を起動する", "" ;
        writeinistr $$ini, $$Section,  "//adr_mode", "0" ;
        writeinistr $$ini, $$Section,  "//    div_name(Default=0):0 = 何もし
ない,1 = 半角空白を名前から探し、その前の部分のみ利用する", "" ;
        writeinistr $$ini, $$Section,  "//div_name", "1" ;
        writeinistr $$ini, $$Section,  "//    cc_mode(Default=0):0 = なにも
しない,1 = CCの情報から名前を取得しメール本文に挿入する", "" ;
        writeinistr $$ini, $$Section,  "//cc_mode", "1" ;
        writeinistr $$ini, $$Section,  "//    cc_char[Default=\"CC)\"]: ccで
取得した名前の前に挿入するキャラクタ", "" ;
        writeinistr $$ini, $$Section,  "//cc_char", "CC)" ;

        writeinistr $$ini, $$Section,  "//    del_to_name[Default=0]: To,Cc
の名前情報を削除するOption。0=To,Cc Headerの名前情報を削除しない。1=削除する。
", "" ;
        writeinistr $$ini, $$Section,  "//del_to_name", "0" ;
        writeinistr $$ini, $$Section,  "//    del_newmail_to_name[Default=
0]: 新規作成時To,Ccの名前情報を削除するOption。0=新規作成時To,Cc Headerの名
前情報を削除しない。1=削除する。", "" ;
        writeinistr $$ini, $$Section,  "//del_newmail_to_name", "0" ;
        writeinistr $$ini, $$Section,  "//    chg_to_name[Default=0]: Header
 Toの名前情報を変更するOption。0=To Headerの名前情報を変更しない。1=名前情報
を変更する。", "" ;
        writeinistr $$ini, $$Section,  "//chg_to_name", "0" ;
        writeinistr $$ini, $$Section,  "//    div_name_header[Default=0]: di
v_name_header=1のとき半角空白以降を削除するOption。0=半角空白以降を削除しな
い。1=半角空白以降を削除する。", "" ;
        writeinistr $$ini, $$Section,  "//div_name_header", "0" ;
        writeinistr $$ini, $$Section,  "//    add_to_keisyou[Default=0]: Hea
der Toの名前情報に敬称を追加するOption。0=Header Toに敬称を追加しない。1=Hea
der Toに敬称を追加する", "" ;
        writeinistr $$ini, $$Section,  "//add_to_keisyou", "0" ;
        writeinistr $$ini, $$Section,  "//    chg_cc_name[Default=0]: Header
 Ccの名前情報を変更するOption。0=To Headerの名前情報を変更しない。1=名前情報
を変更する。", "" ;
        writeinistr $$ini, $$Section,  "//chg_cc_name", "0" ;
        writeinistr $$ini, $$Section,  "//    add_cc_keisyou[Default=0]: Hea
der Ccの名前情報に敬称を追加するOption。0=Header Ccに敬称を追加しない。1=Hea
der Toに敬称を追加する。", "" ;
        writeinistr $$ini, $$Section,  "//add_cc_keisyou", "0" ;
        writeinistr $$ini, $$Section,  "//    to_skip_mode(Default=0):0 = な
にもしない,1 = Toの情報から名前を取得しメール本文に挿入するのを抑制する", "" ;
        writeinistr $$ini, $$Section,  "//to_skip_mode", "0" ;
        writeinistr $$ini, $$Section,  "//    part_modeとは(Default=0)", "" ;
        writeinistr $$ini, $$Section,  "//    0 = 補足情報を挿入しない", "" ;
        writeinistr $$ini, $$Section,  "//    1 = アドレス帳の備考 を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//    2 = アドレス帳の備考2を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//    3 = アドレス帳の備考3を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//keisyou_mode", "3" ;
    }

    //div_name
    //取得した名称に半角空白がある場合、その前の部分のみ取得するoption
    //0 = 何もしない
    //1 = 半角空白を名前から探し、その前の部分のみ利用する
        ##div_name = getininum($$ini,$$Section,"div_name");
        if((##div_name < 0) || (##div_name > 1)){
            ##div_name = 0 ; //default
        }

    //adr_mode
    //0 = 何もしない
    //1 = To:の情報がないときにアドレス帳を起動する
        //アドレス帳起動モードを取得
        $$wk = getinistr($$ini,$$Section,"adr_mode");
        if($$wk == ""){
            $$wk = "1" ;
        }
        ##adr_mode = val($$wk) ;
        //INIファイルから文字列を取りだします。
        if((##adr_mode < 0) || (##adr_mode > 1)){
            ##adr_mode = 1 ;    //default
        }

    //ホームポジション定義キャラクタ
        //ホームポジションキャラクタ:名前情報作成後、
        //カーソルをこの文字の位置に移動
        //ホームポジションキャラクタ取得
        $$home_c = getinistr($$ini,$$Section,"home_c");
        //INIファイルから文字列を取りだします。
        if($$home_c == ""){
            $$home_c = "@P@" ;  //default
        }

    //pos
    //0 = 先頭に挿入
    //1 = 定義文字列の位置に挿入
    //2 = カーソル位置に挿入
        //文字列挿入位置情報を取得
        ##pos = getininum($$ini,$$Section,"pos");
        //INIファイルから文字列を取りだします。
        if((##pos < 0) || (##pos > 2)){
            ##pos = 0 ; //default
        }

    //to_skip_mode
    //0 = なにもしない
    //1 = Toに対して文字列挿入処理をskipする
        //文字列挿入位置情報を取得
        ##to_skip_mode = getininum($$ini,$$Section,"to_skip_mode");
        //INIファイルから文字列を取りだします。
        if((##to_skip_mode < 0) || (##to_skip_mode > 1)){
            ##to_skip_mode = 0 ; //default
        }
        //Shiftを押して実行したときに#to_skip_modeを切り替える
        ##to_skip_mode = (##to_skip_mode + ##to_skip_mode_inv) % 2 ;

    //cc_mode
    //0 = なにもしない
    //1 = CCの情報から名前を取得しメール本文に挿入する
        //文字列挿入位置情報を取得
        ##cc_mode = getininum($$ini,$$Section,"cc_mode");
        //INIファイルから文字列を取りだします。
        if((##cc_mode < 0) || (##cc_mode > 1)){
            ##cc_mode = 0 ; //default
        }
        //Shiftを押して実行したときに#cc_modeを切り替える
        ##cc_mode = (##cc_mode + ##cc_mode_inv) % 2 ;

    //Toの名前情報を削除するflag
        //To,Ccの名前情報を削除するoption取得
        ##del_to_name = getininum($$ini,$$Section,"del_to_name");
        //新規作成時To,Ccの名前情報を削除するoption取得
        ##del_newmail_to_name = getininum($$ini,$$Section,"del_newmail_to_na
me");

    //Toの名前情報をアドレス帳の名前にするflag
    //敬称も付加する。
        ##chg_to_name = getininum($$ini,$$Section,"chg_to_name");
        ##div_name_header = getininum($$ini,$$Section,"div_name_header");
        ##add_to_keisyou = getininum($$ini,$$Section,"add_to_keisyou");

        ##chg_cc_name = getininum($$ini,$$Section,"chg_cc_name");
        ##add_cc_keisyou = getininum($$ini,$$Section,"add_cc_keisyou");

    //挿入文字列を変換する。英数字のみ半角化。
        ##cnv_filter = getininum($$ini,$$Section,"cnv_filter");
        if( (##cnv_filter == 1) &&
            (dllfunc("HidemaruMailVersion") <= 454)){
            message
                "変換用Filter機能は、\n"+
                "秀丸メールVer4.54以前では使用できません。\n" + $info ;
        }

//-------------------main------------------
    //アドレス帳の起動
    if(##adr_mode == 1){
        $$wk = dllfuncstr( "CurrentHeader", "To" );
        if($$wk == ""){
            #n = dllfunc( "AdrBook");
        }
    }

    //アドレス帳から名前取得
    //To_headerから名前取得
    //なければemailアドレス

    //Toの情報を取得する。
        //サブルーチン get_to_list:
        //機能:引数で指定したヘッダ情報を取得する。
        //第一引数: 文字列型,ヘッダー種類(To,Cc,Bccなど)
        //戻り値:   文字列型,引数で指定したヘッダ情報(複数の場合は、
        //"," + 改行が途中に入る
    if(##to_skip_mode == 0){
        call get_to_list "To" ;
        $$To_inf = $$return ;
    }

    //敬称情報の処理
    //敬称list情報をiniファイルから取得するか、否かの設定。
    //get_info_ini
    //0:iniファイルから取得しない。1:取得する。
    ##get_info_ini = getininum($$ini,$$Section,"Get_info_ini");

    $$key = "kei" ;
    //敬称のチェック用
    if(##get_info_ini == 1){
        call Set_default $$ini,$$Section,$$key ;
        call Get_list $$ini ,$$Section, $$key ;
        //戻り値:拡張子定義個数
        ##chk_cnt = ##return ;
    }
    else{
        //敬称の種類を登録
        //登録数
        writeinistr $$ini, $$Section, "Get_info_ini", "0" ;
        ##chk_cnt = 0 ;
        $get_list[##chk_cnt] = "殿" ;       ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "様" ;       ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "御中" ;     ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "さん" ;     ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "ちゃん" ;   ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "君" ;       ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "くん" ;     ##chk_cnt = ##chk_cnt + 1 ;
    }
    //敬称情報の正規表現文字列を作成。
    $$dllfile = loaddllfile ;
    if($$dllfile != "") freedll;
    if(existfile( hidemarudir + "\\DengakuDLL.dll")){
        ##dengaku_use = 1 ;
        call Dengaku ;
    }
    else{
        ##dengaku_use = 0 ;
    }

    //正規表現の敬称確認文字列作成。
    ##i = 0 ;
    $$reg_keisyou = "(" ;
    while(##i < ##chk_cnt){
        if((##i +1) == ##chk_cnt) $$wk = "" ;
        else $$wk = "|" ;
        call reg_escape $get_list[##i],##dengaku_use ;
        $$s = $$return ;

        $$reg_keisyou = $$reg_keisyou + $$s + $$wk ;
        ##i = ##i + 1;
    }
    $$reg_keisyou = $$reg_keisyou + ")$" ;
    if(##dengaku_use){
        //田楽DLLを開放
        freedll ;
        if($$dllfile != "") loaddll $$dllfile ;
    }
    //敬称のチェックする正規表現のoptionを作成。HmJre.dllを利用。
    freedll;
    call HmJre ;
    //戻り値:1=HmJreを利用してmatch判定ができる場合。0=利用できない場合。
    ##reg_flag = ##return ;
    freedll;
    call HidemaruMail ;
    //利用可能。
    if( ##reg_flag == 1 ) {
        writeinistr $$ini, $$Section, "reg_keisyou", $$reg_keisyou ;
    }
    //利用不可能。
    else{
        $$reg_keisyou = "" ;
        writeinistr $$ini, $$Section, "reg_keisyou", 0 ;
    }

    //Toの処理
    //サブルーチンget_to_listで取得した文字列が存在する場合
    if($$To_inf != ""){
        //グローバル変数$list(配列),
        //グローバル変数$list_keisyou(配列),
        //グローバル変数$list_part(配列)に代入する。
        call Make_name $$ini,$$Section,$$To_inf ;
        ##cnt = ##return ;
    }
    else {
        ##cnt = 0 ;
    }

    if(##cnt != 0){
            //Header To,Ccの名前情報を削除するOption
        if( (##del_to_name == 1) ||
            //新規作成時、To,Ccの名前情報を削除するOption
            ((##MailType == 0 ) && (##del_newmail_to_name == 1))){
            call del_to_name $$To_inf,"To" ;
        }
        else if(##chg_to_name){
            //区切り文字列を取得
            $$divider = getinistr($$ini,$$Section,"divider");
            if($$divider == "") $$divider = " " ;
            //Header Toの名前情報を変更する。
            call chg_to_name $$To_inf,"To",##add_to_keisyou ,##div_name_head
er,$$reg_keisyou,$$divider ;
        }
        else if(##add_to_keisyou){
            //Header Ccの名前情報に敬称を付加する。
            call add_to_keisyou $$To_inf,"To" ,$$reg_keisyou;
        }

        if(##cnt != 0){
            //第四引数: 数値型,ccを実施するモードフラグ=0
            call Make_str $$ini,$$Section,##cnt ,0,##div_name;
            $$to_name = $$return ;
        }
    }

    //Ccの処理
    if( (##cc_mode == 1) ||
        (##del_to_name == 1) ||
        (##del_newmail_to_name == 1) ||
        (##chg_cc_name == 1) ||
        (##add_cc_keisyou == 1) ){
        //Ccの情報を取得する。
            //サブルーチン get_to_list:
            //機能:引数で指定したヘッダ情報を取得する。
            //第一引数: 文字列型,ヘッダー種類(To,Cc,Bccなど)
            //戻り値:   文字列型,引数で指定したヘッダ情報(複数の場合は、
            //"," + 改行が途中に入る
        call get_to_list "Cc" ;
        $$Cc_inf = $$return ;

        //サブルーチンget_to_listで取得した文字列が存在する場合
        if($$Cc_inf != ""){
            call Make_name $$ini,$$Section,$$Cc_inf ;
            ##cnt = ##return ;
        }
        else {
            ##cnt = 0 ;
        }

        if(##cnt != 0){
                //Header To,Ccの名前情報を削除するOption
            if( (##del_to_name == 1) ||
                //新規作成時、To,Ccの名前情報を削除するOption
                ((##MailType == 0 ) && (##del_newmail_to_name == 1))){
                call del_to_name $$Cc_inf,"Cc" ;
            }
            else if(##chg_cc_name){
                //Header Ccの名前情報を変更する。
                call chg_to_name $$Cc_inf,"Cc",##add_cc_keisyou ,##div_name_
header,$$reg_keisyou,$$divider ;
            }
            else if(##add_cc_keisyou){
                //Header Ccの名前情報に敬称を付加する。
                call add_to_keisyou $$Cc_inf,"Cc" ,$$reg_keisyou ;
            }

            if(##cc_mode == 1){
                //第四引数: 数値型,ccを実施するモードフラグ=1
                call Make_str $$ini,$$Section,##cnt ,##cc_mode,##div_name;
                $$cc_name = $$return ;
            }
        }
    }
    if(##cc_char_disable == 1){
        writeinistr $$ini, $$Section, "cc_char_disable", 0 ;
    }
    //INIファイルにデータを書きこむ文です。
    //writeinistr INIファイル名, セクション名, キー名, 文字
    //writeinistr "HIDEMARU.INI", "Option", "RefMark", ">> ";

    //挿入位置に移動
    if(##pos == 0){
        moveto 0,0 ;    //本文の先頭に移動
    }
    else if(##pos == 1){
        moveto 0,-1 ;   //Headerの最終行に移動
        golineend2 ;    //論理行末に移動
        replacedown $$home_c , "" , casesense;
        if(!result){
            //ホームポジションの移動に失敗したとき、本文先頭に移動
            moveto 0,0 ;
        }
    }
    else{   //##pos == 2のとき
        if(##cur_move == 1){
            moveto 0,-1;    //Headerの最終行に移動
            golineend2 ;    //論理行末に移動
            searchdown $$cur_char,casesense ;
            call Res_check result , "cur char not found.\n" + $$cur_char + "
\n" + $info ;
        }
        else{
            if(y < 0){      //Headerの場合、カーソルを本文先頭に移動。
                moveto 0,0 ;
            }
        }
    }

    //To情報の文字列挿入skip無効時 and To情報が存在するとき、文字列挿入を実施。
    if((##to_skip_mode == 0) && ($$to_name != "")){
        ##x = x ;##y = y ;
        insert $$to_name ;
        $$ret = "\n" ;
        if( (##cnv_filter == 1) &&
            (dllfunc("HidemaruMailVersion") > 454)){
            beginsel ;
            moveto ##x,##y ;
            execmacro currentmacrodirectory + "\\HMML_INS_NAME_FILTER.MAC" ;
            moveto selendx,selendy;
            escape ;
        }
    }
    //To情報の文字列情報挿入をskip
    else{
        $$ret = "" ;
    }

    //Cc情報の文字列挿入
    if  ((##cc_mode == 1) &&    //ccモード有効時 and
         ($$cc_name != "")){    //cc_nameに情報があるとき
        ##x = x ;##y = y ;
        insert $$ret + $$cc_name ;
        if( (##cnv_filter == 1) &&
            (dllfunc("HidemaruMailVersion") > 454)){
            beginsel ;
            moveto ##x,##y ;
            execmacro currentmacrodirectory + "\\HMML_INS_NAME_FILTER.MAC" ;
            moveto selendx,selendy;
            escape ;
        }
    }

    //カーソル移動用のキャラクタを挿入済みのときの処理
    //キャラクタを削除する。
    if(##cur_move == 1){
        moveto 0,-1;    //Headerの最終行に移動
        golineend2 ;    //論理行末に移動
        replacedown $$cur_char,"" ,casesense ;
        call Res_check result , "cur char not found.\n" + $$cur_char + "\n"
+ $info ;
    }
    //Subjectと、Toを取得し、空白の場合、その位置に移動する。
    $$To  = dllfuncstr( "CurrentHeader", "To" );
    if($$To == "") {
        moveto 0,-1;    //Headerの最終行に移動
        golineend2 ;    //論理行末に移動
        searchup "^To:",regular ;
        escape ;    //範囲選択を取り消す
        right ;
    }
    else{
        $$Sub = dllfuncstr( "CurrentHeader", "Subject" );
        if($$Sub == "") {
            moveto 0,-1;    //Headerの最終行に移動
            golineend2 ;    //論理行末に移動
            searchup "^Subject:",regular ;
            escape ;    //範囲選択を取り消す
            right ;
        }
    }

LEND:
    //敬称情報の正規表現文字列を削除
    if( existfile( hidemarudir + "\\DengakuDLL.dll") &&
        existfile( hidemarudir + "\\BREGEXP.dll")){
        writeinistr $$ini, $$Section, "reg_keisyou", 0 ;
    }
    setsearch $sbuf, #sopt; //開始時の検索文字,optionに戻す
    setreplace $rbuf ;
    //検索での表示 点滅表示/範囲選択の情報を戻す。
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    writeregnum "SelectFound",#reg_search;
    closereg;
    envchanged;

    enabledraw ;    //画面書き換えを許可します。
    freedll;
    endmacro;

HidemaruMail:   //秀丸メール起動チェック&DLLロード
//機能:TKInfo.dllをロードする
//秀シリーズサポートHPより 抜粋
    // DLL を Load する
    openreg "CURRENTUSER","Software\\Hidemaruo\\TuruKame\\Config";
    ##res = result ;
    closereg ;
    if( !##res ) {
        message "秀丸メールがインストールされてないです (^^;)\n"+$info;
        endmacro;
    }

    loaddll "TKInfo.dll";
    if( !result ) {
        message "DLLロードに失敗\n"+$info;
        endmacro;
    }
return ;

get_to_list:
//機能:引数で指定したヘッダ情報を取得する。
    //第一引数: 文字列型,ヘッダー種類(To,Cc,Bccなど)
    //戻り値:   文字列型,引数で指定したヘッダ情報(複数の場合は、"," + 改行が
途中に入る
    //引数渡し
    $$header = $$1;
    call Str_check $$header,"サブルーチンget_to_list 第一引数(文字列型)がお
かしいです\n" + $info ;

    $$to = "" ;//初期化

    ##Header_count = dllfunc("CountCurrentHeader", $$header);
    while( ##i < ##Header_count ) {
        $$wk = dllfuncstr("CurrentHeader2", $$header, ##i);
        ##wk = dllfunc("CountEmailList", $$wk);
        if(##wk != 0){
            if($$to != ""){
                $$to = $$to + ", \n        " + $$wk ;
            }
            else{
                $$to = $$wk ;
            }
        }
        ##i = ##i + 1;
    }
return $$to ;

Get_list:
//機能:引数で指定したiniファイルから情報を取得し、グローバル変数にsetする。
//引数渡し
    //第一引数: 文字列型,listを取得するiniファイルを指定
    $$ini = $$1;
    //第二引数: 文字列型,listを取得するiniファイルのセクション名を指定
    $$Section = $$2;
    //第三引数: 文字列型,listを取得するiniファイルのkeyを指定
    //keyは、"#" + 数字 + 指定文字列
    //を連結した文字列をgetinistrにて使用
    $$key = $$3;
    //戻り値
    //取得した配列の数
    //および、グローバル変数 $get_listに取得した配列を保存

    if($$ini == ""){
        message "サブルーチンGet_list:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    else if(! existfile( $$ini )) {
        //変数(配列) $listの内容を削除
        ##i = 0 ;
        while( $get_list[##i] != "" ) {
            //変数の値削除
            $get_list[##i] = "" ;
            ##i = ##i + 1;
        }
        return 0 ;
    }
    if($$Section ==""){
        message "サブルーチンGet_list:第二引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$key ==""){
        message "サブルーチンGet_list:第三引数エラー。\n" + $info ;
        goto LEND ;
    }


    //変数(配列) $get_listの内容を削除
    ##i = 0 ;
    while( $get_list[##i] != "" ) {
        //変数の値削除
        $get_list[##i] = "" ;
        ##i = ##i + 1;
    }

    //敬称登録最大数
    ##max_info = val(getinistr($$ini,$$Section,"max_info"));
    if(##max_info == 0){
        ##max_info = 20 ;
    }
    ##menu_su = 0 ;     //初期化
    while( ##menu_su < ##max_info )
    {
        //INIファイルから文字列を取りだします。
        //getinistr( s1, s2, s3 )
        //s1がiniファイル名、s2がセクション名、s3がキー名です。
        $$wk = getinistr( $$ini , $$Section , "#" + str( ##menu_su ) +"_"+ $
$key );
        if( $$wk == "" )
        {
            break;
        }
        $get_list[##menu_su] = $$wk ;
        ##menu_su = ##menu_su + 1;
    }

return ##menu_su ;

Set_default:
//処理:Iniファイルの各種設定情報がなければびデフォルトを設定する
    //第一引数: 文字列型,listを取得するiniファイルを指定
    $$ini = $$1;
    //第二引数: 文字列型,listを取得するiniファイルのセクション名を指定
    $$Section = $$2;
    //第二引数: 文字列型,listを取得するiniファイルのkeyを指定
    //keyは、"#" + 数字 + 指定文字列
    //を連結した文字列をgetinistrにて使用
    $$key = $$3;
    //戻り値
    //なし。

    if($$ini == ""){
        message "サブルーチンSet_default:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$Section ==""){
        message "サブルーチンSet_default:第二引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$key ==""){
        message "サブルーチンSet_default:第三引数エラー。\n" + $info ;
        goto LEND ;
    }

    //テンプレート名情報
    $$wk = getinistr( $$ini , $$Section , "#0_" + $$key );
    //iniファイルから$$Sectionの "#0_" + $keyの情報を取得し、情報が無ければ
    //デフォルト情報を設定する。
    if( $$wk == "" ){
        ##array_cnt = 0;
        $$array[##array_cnt] = "殿" ;       ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "様" ;       ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "御中" ;     ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "ちゃん" ;   ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "君" ;       ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "くん" ;     ##array_cnt = ##array_cnt + 1;
        ##i = 0 ;
        while( ##i < ##array_cnt ) {
            writeinistr $$ini, $$Section,  "#" + str( ##i ) + "_"+ $$key, $$
array[##i] ;
            //INIファイルにデータを書きこむ文です。
            //writeinistr INIファイル名, セクション名, キー名, 文字
            //writeinistr "HIDEMARU.INI", "Option", "RefMark", ">> ";
            ##i = ##i + 1;
        }
        message currentmacrobasename + "\nマクロ" +
                "敬称list情報を下記場所\n" +
                "  " + $$ini + "\n" +
                "に作成しました。";
    }
return ;

Make_name :
//処理: 第一引数で指定された文字列から名前情報を作成する。
//      作成した情報は
//      グローバル変数$list(配列),
//      グローバル変数$list_keisyou(配列),
//      グローバル変数$list_part(配列)に代入する。
//引数渡し
    //第一引数: 文字列型,listを取得するiniファイルを指定
    $$ini = $$1 ;
    //第二引数: 文字列型,listを取得するiniファイルのセクション名を指定
    $$Section = $$2 ;
    //第三引数: 文字列型,チェックを行うHeader
    $$To_inf = $$3 ;

    if($$ini == ""){
        message "サブルーチンMake_name:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    else if(! existfile( $$ini )) {
        message "サブルーチンMake_name:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$Section ==""){
        message "サブルーチンMake_name:第二引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$To_inf ==""){
        message "サブルーチンMake_name:第三引数エラー。\n" + $info ;
        goto LEND ;
    }

//処理
    //コンマで区切られたメールアドレス文字列の中から、メールアドレスの個数
    //を返します。
    //返り値(数値型)
    //メールアドレスの個数です。
    ##To_count = dllfunc("CountEmailList", $$To_inf);

    //変数初期化
    ##n = ##To_count ;
    while( ##n > 0 ) {
        $list[##n] = "" ;
        $list_keisyou[##n] = "" ;
        $list_part[##n] = "" ;
        ##n = ##n - 1;
    }

    //keisyou_mode
    //0 = Defaultの敬称をつける
    //1 = アドレス帳の備考 を取得してつける
    //2 = アドレス帳の備考2を取得してつける
    //3 = アドレス帳の備考3を取得してつける
    //4 = アドレス帳の備考4を取得してつける
    //5 = アドレス帳の備考5を取得してつける
    //6 = アドレス帳の備考6を取得してつける
    //7 = アドレス帳の備考7を取得してつける
    //8 = アドレス帳の備考8を取得してつける
    //9 = ドメイン別で敬称をつける
    //備考,備考2,備考3,備考4-8から取得できなかった場合、Defaultを定義する。

    //敬称モードを取得
    ##keisyou_mode = getininum($$ini,$$Section,"keisyou_mode");
    //FindBookNote4〜FindBookNote8が対応された秀丸メールの版数を
    //Ver4.65以降 or Ver464Beta8以降と定義する。
    //4.65より前の版数の場合、##keisyou_modeを一時的に修正する。
    //メモ:FindBookNote4〜FindBookNote8は、秀丸メールVer4.64Beta8より対応。

    //部署名モードを取得
    ##part_mode = getininum($$ini,$$Section,"part_mode");

    ##ver = dllfunc("TuruKameVersion");
    if(##ver == 464){
        //HidemaruMail 4.64beta8 (WinNT,500)
        //HidemaruMail 4.63 (WinNT,500)
        //HidemaruMail 4.64beta8  ←XmailerにWindowsのバージョンがない場合
        $$wk = dllfuncstr("XMailer") ;
        call Str_check $$wk , "XMailer情報取得エラー\n" + $info ;
        //版数を取得するため" "の位置を認識
        ##n = strstr($$wk," ");
        //文字列"HidemaruMail "を削除。
        $$wk = midstr($$wk,##n + 1,strlen($$wk) -1) ;

        ##n = strstr($$wk," ");
        //Windowsのバージョンがあるときに、秀丸メールの版数だけ取得する。
        if(##n != -1) {
            $$wk = leftstr($$wk,##n) ;
        }
        //betaの版数があるかどうかチェックする。
        ##n = strstr($$wk,"beta") ;
        if(##n != -1){
            ##beta = val(midstr($$wk,##n + strlen("beta") ,strlen($$wk) - st
rlen("beta"))) ;
            $$wk = leftstr($$wk,##n) ;
        }
        ##ver = val(leftstr($$wk,1) + midstr($$wk,2,2)) ;
    }

    //秀丸メール Ver4.64より前の版数 or
    //Ver4.64 Beta1〜Beta7の版数のとき
    if( (##ver < 464) ||
        ((##ver == 464) &&
         ((##beta > 0) && (##beta < 8)))){
        ##limit_bikou = 3 ;
        ##limit_keisyou = 3 ;
    }
    else{
        //備考=8 + グループ,グループパス
        ##limit_bikou = 8 + 2;
        //domain modeを追加
        ##limit_keisyou = 8 + 1 ;
    }
    //INIファイルから文字列を取りだします。
    if((##part_mode < 0) || (##part_mode > ##limit_bikou)){
        ##part_mode = 0 ; //default
    }
    //INIファイルから文字列を取りだします。
    if((##keisyou_mode < 0) || (##keisyou_mode > ##limit_keisyou)){
        ##keisyou_mode = 0 ; //default
    }
    //9 = ドメイン別で敬称をつける
    if(##keisyou_mode == 9){
        $$account = dllfuncstr("ExecAtMain", "CurrentAccount") ;
        ##n = dllfunc("LoadAccountProp", $$account );
        $$wk = dllfuncstr("GetAccountProp","szEmail");

        ##n = strstr($$wk,"@");
        if(##n == -1){
            message "Email:Domain error.\n" + $$wk + "\n" + $info ;
            goto LEND;
        }
        $$self_domain = midstr( $$wk, ##n +1, strlen($$wk) - ##n - 1 ) ;
        //自分のドメインと異なる場合の敬称
        $$keisyou_otherdomain = getinistr($$ini,$$Section,"keisyou_other");
        //未定義のとき
        if($$keisyou_otherdomain == "") $$keisyou_otherdomain = "様" ;
    }

    //敬称情報が下記定義のとき、敬称を付加しない。
    $$word = getinistr($$ini,$$Section,"not_apply");
    if($$word == "") $$word = "not_apply" ;
    //敬称list情報数を取得
    ##i = 0 ;
    while(1){
        if($get_list[##i] == "") break ;
        ##i = ##i + 1;
    }
    //敬称list情報の数
    ##chk_cnt = ##i ;

    ##i = 0;
    while( ##i < ##To_count ) {
        //GetEmailList
        //コンマで区切られたメールアドレス文字列の中から、
        //パラメータで指定された部分のメールアドレス部分を1つ取り出します。
        //返り値(文字列型)
        //取り出したメールアドレス部分です。ここは、abc <abc@abc> のように、
        //名前 + メールアドレスとなっていることもあります。
        //この部分はコンマで区切られた内容をそのまま返す。
        $$inf = dllfuncstr("GetEmailList", $$To_inf, ##i);

        //mode
        //0 = アドレス帳から名前を取得
        //1 = ヘッダから名前を取得
            //名前の情報を取得するモードを取得
            ##mode = getininum($$ini,$$Section,"name");
            //INIファイルから文字列を取りだします。
            if((##mode < 0) || (##mode > 1)){
                ##mode = 0 ; //default
            }

        if(##mode == 0 ){
            //パラメータで渡された名前+Emailの中からEmail部分を取り出し、
            //そのEmailをアドレス帳から検索し、見つかった場合はその名前
            //を返し、見つからなかった場合はパラメータで渡された文字列中
            //の名前部分を返す。
            //パラメータにはEmailのみでも名前+Emailでもどちらでも受け付
            //けます。
            //アドレス帳に同じEmailが複数登録されている場合は一番先頭に
            //登録されているメンバーのみが対象となります。
            $$name = dllfuncstr( "FindBook2", $$inf);
        }
        else{   //mode == 1
            //SetNameOnly
            //パラメータで渡された「名前+Email」の形式の文字列から、名前部分の
            //みを取り出して返します。
            //返り値(文字列型)
            //取り出された名前部分の文字列です。名前部分が見つからない場合は
            //メールアドレスをそのまま返します。
            $$name  = dllfuncstr( "SetNameOnly", $$inf );

            //SetEmailOnly
            //パラメータで渡された「名前+Email」の形式の文字列から、
            //Email部分のみを取り出して返します。
            $$email = dllfuncstr( "SetEmailOnly", $$inf );

            //内容が同じ場合、名前の取得を失敗している。
            //アドレス帳から名前を取得する処理を実施
            if($$email == $$name){
                $$name = dllfuncstr( "FindBook2", $$inf);
            }
        }
        //パラメータで渡された文字列がもしダブルクォーテーション記号で囲まれ
ていた場合に、そのダブルクォーテーション記号(のセット)を除去します。
        //返り値(文字列型)
        //ダブルクォーテーション記号の除去された文字列を返します。ダブルク
ォーテーション記号で囲まれてなかった場合は元の文字列をそのまま返します。
        $$name = dllfuncstr("UnDoubleQuote", $$name );
        //左端の空白を削除する
        while(1){
            if(leftstr($$name,1) == " ") $$name = midstr($$name,1,strlen($$n
ame) -1);
            else break ;
        }
        //右端の空白を削除する
        while(1){
            if(rightstr($$name,1) == " ") $$name = leftstr($$name,strlen($$n
ame) -1);
            else break ;
        }

        //敬称定義
        //敬称Default取得
        $$keisyou_def = getinistr($$ini,$$Section,"keisyou_def");
        //INIファイルから文字列を取りだします。
        if($$keisyou_def == ""){
            $$keisyou_def = "殿" ;  //default
        }

        $$keisyou = "" ;

        //敬称情報を取得する
        if(##keisyou_mode == 0){
            $$keisyou = $$keisyou_def ;
        }
        else if((1 <= ##keisyou_mode) &&
                (##keisyou_mode <= 8)){
            call findbooknote $$inf,##keisyou_mode ;
            $$keisyou = $$return ;
        }
        //9 = ドメイン別で敬称をつける
        else if(##keisyou_mode == 9){
            $$email = dllfuncstr( "SetEmailOnly", $$inf );
            ##n = strstr($$email,"@");
            if(##n != -1){
                $$domain = midstr( $$email, ##n +1, strlen($$email) - ##n -
1 ) ;
                $$self_domain = "," + $$self_domain + "," ;
                //自分のドメイン情報をiniファイルから取得
                $$wk = getinistr($$ini,$$Section,"selfdomain");
                //空白を削除 trim
                call Trim $$wk ;
                $$wk = $$return ;
                //↑空白を削除 trim終了

                //ドメインチェックを実施
                if($$wk != ""){
                    $$self_domain = $$self_domain + $$wk + "," ;
                }
                ##n = strstr($$self_domain,"," + $$domain + ",");
                //異なるドメインの場合
                if(##n == -1){
                    $$keisyou = $$keisyou_otherdomain ;
                }
                //同じドメインの場合
                else{
                    $$keisyou = $$keisyou_def ;
                }
            }
            else{
                $$keisyou = $$keisyou_def ;
            }
        }
        else{
            $$keisyou = $$keisyou_def ;
        }
        //敬称がない場合Defaultを定義
        if($$keisyou ==""){
            $$keisyou = $$keisyou_def ;
        }

        //区切り文字列を取得
        $$divider = getinistr($$ini,$$Section,"divider");
        if($$divider == "") $$divider = " " ;
        //enable_group,disable_group情報を取得する先を
        //取得する。どの備考から取得するかを得る。
        ##engroup_mode = getininum($$ini,$$Section,"engroup_mode");
        if(##engroup_mode == 0 ){
            ##engroup_mode = 8 ;    //Default
        }
        //group_mode
        ##group_mode = getininum($$ini,$$Section,"group_mode");
        //0:enalbe_group指定があった場合、アドレス帳のグループ名を利用
        //1:disable_group指定が無い場合、アドレス帳のグループ名を利用
       
        //部署名処理
        if(##part_mode == 0){
            $$part = "" ;
        }
        else if((1 <= ##part_mode) &&
                (##part_mode <= 8)){
            call findbooknote $$inf,##part_mode ;
            $$part = $$return ;
        }
        else if(##part_mode == 9){
            //FindBook8関数(TkInfo.dll)
            //パラメータで渡された名前+Emailの中からEmail部分を取り出し、
            //そのEmailをアドレス帳から検索し、見つかった場合はその名前+Emai
lを返し、
            //見つからなかった場合はパラメータで渡された名前+Emailを返します。
            //パラメータにはEmailのみでも名前+Emailでもどちらでも受け付けます。
            //アドレス帳に同じEmailが複数登録されている場合は一番先頭に登録
されているメンバーのみが対象となります。
            //備考8の内容を返します。
            call findbooknote $$inf,##engroup_mode ;
            $$wk = $$return ;
            //":"を含む場合、文字列を分割する
            ##n = strstr($$wk,":");
            if(##n != -1){
                $$en = leftstr( $$wk, ##n ) ;
                $$wk = midstr( $$wk, ##n + 1, strlen($$wk) - ##n - 1) ;
            }
            //ToLower関数(TkInfo.dll)
            //ToLowerは小文字に変換します。
            $$en = dllfuncstr("ToLower",$$en) ;
            if($$en == "alias"){
                $$part = $$wk ;
            }
            else if(
                ($$en == "enable_group") ||
                ((##group_mode == 1) &&
                 ($$en != "disable_group"))){
                //FindBookGroup関数(TkInfo.dll)
                //アドレス帳に登録されているその人のグループ名の内容を返しま
す。
                //アドレス帳の直下の場合は"アドレス帳"という文字列を返します。
                $$part = dllfuncstr( "FindBookGroup", $$inf);
                //左端が"\"の場合、削除する。
                if(leftstr( $$part, 1 ) == "\\"){
                    $$part = midstr( $$part, 1, strlen($$part) -1 ) ;
                }
                //"\"を$$dividerに置換する
                if($$part != "")
                    call Gsub $$part,"\\\\" , $$divider ;
                $$part = $$return ;
            }
            else $$part = "" ;
        }
        else if(##part_mode == 10){
            call findbooknote $$inf,##engroup_mode ;
            $$wk = $$return ;
            //":"を含む場合、文字列を分割する
            ##n = strstr($$wk,":");
            if(##n != -1){
                $$en = leftstr( $$wk, ##n ) ;
                $$wk = midstr( $$wk, ##n + 1, strlen($$wk) - ##n - 1) ;
            }
            //ToLower関数(TkInfo.dll)
            //ToLowerは小文字に変換します。
            $$en = dllfuncstr("ToLower",$$en) ;
            if($$en == "alias"){
                $$part = $$wk ;
            }
            else if(
                ($$en == "enable_group") ||
                ((##group_mode == 1) &&
                 ($$en != "disable_group"))){
                //FindBookGroupPath関数(TkInfo.dll)
                //アドレス帳に登録されているグループのパス名、つまり、グルー
プの
                //階層全体を返します。各グループ名の前には「\」の記号が付き
ます。
                //先頭のグループ名は、"アドレス帳"か、またはLDAPサーバーの名
前となります。
                //たとえば、"ABC"というグループ配下の"XYZ"というグループであ
る場合、
                //\アドレス帳\ABC\XYZ
                //という文字列を返します。
                $$part = dllfuncstr( "FindBookGroupPath", $$inf);
                //左端が"\"の場合、削除する。
                if(leftstr( $$part, 1 ) == "\\"){
                    $$part = midstr( $$part, 1, strlen($$part) -1 ) ;
                }
                //"\"を$$dividerに置換する
                if($$part != "")
                    call Gsub $$part,"\\\\" , $$divider ;
                $$part = $$return ;
                //先頭ノグループが"アドレス帳"の場合削除する
                if(leftstr($$part,strlen("アドレス帳")) == "アドレス帳"){
                    $$part =
                        midstr($$part,strlen("アドレス帳") + strlen($$divider),
                                strlen($$part) - strlen("アドレス帳") - strl
en($$divider)) ;
                }
            }
            else $$part = "" ;
        }

        //取得敬称情報が$$word="not_apply"でない場合
        if($$keisyou != $$word){
            //敬称のチェックを実施
            ##j = 0 ;
            ##res = 0 ;
            while( ##j < ##chk_cnt ) {
                //登録済み敬称の場合
                if($get_list[##j] == $$keisyou){
                    ##res = 1 ;
                    break ;
                }
                ##j = ##j + 1;
            }
            //$get_listに定義していない敬称の場合、Defaultにする
            if(##res ==0){
                $$keisyou = $$keisyou_def ;
            }
        }

        $list[##i] = $$name ;
        $list_keisyou[##i] = $$keisyou ;
        $list_part[##i] = $$part ;

        ##i = ##i + 1;
    }
return ##To_count ;

Make_str:
//処理:挿入文字列を作成する。グローバル変数$list,$list_keisyou,
//$list_part(共に配列)を使用する。
//引数渡し
    //第一引数: 文字列型,listを取得するiniファイルを指定
    $$ini = $$1;
    //第二引数: 文字列型,listを取得するiniファイルのセクション名を指定
    $$Section = $$2;
    //第三引数: 数値型,処理アドレス個数
    ##cnt = ##3;
    //第四引数: 数値型,ccを実施するモードフラグ
    ##cc_mode = ##4;
    //第五引数: 数値型,取得した名称に半角空白がある場合、その前の部分のみ取
得するoption
    ##div_name = ##5;
    if($$ini == ""){
        message "サブルーチンMake_str:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    else if(! existfile( $$ini )) {
        message "サブルーチンMake_str:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$Section ==""){
        message "サブルーチンMake_str:第二引数エラー。\n" + $info ;
        goto LEND ;
    }
    if(##cnt == 0){
        message "サブルーチンMake_str 第三引数Error\n" + $info ;
    }

    //敬称情報が下記定義のとき、敬称を付加しない。
    $$word = getinistr($$ini,$$Section,"not_apply");
    if($$word == "") $$word = "not_apply" ;


    //複数の名前の場合間に改行を挿入するモード
    //ins_ret_mode
    //0 = なにもしない
    //1= 複数の名前の間に改行を挿入する

    //ins_ret_mode取得
    $$wk = getinistr($$ini,$$Section,"ins_ret_mode");
    //INIファイルから文字列を取りだします。
    if($$wk == ""){
        ##ins_ret_mode = 1 ;    //default
    }
    else ##ins_ret_mode = val($$wk) ;

    if(##ins_ret_mode == 0){
        $$return_char = "" ;
    }
    else{
        $$return_char = "\n" ;
    }

    //to_char
    //toで取得した名前の前に挿入するキャラクタ
    //キャラクタDefault取得
    $$to_char_def = getinistr($$ini,$$Section,"to_char");
    //INIファイルから文字列を取りだします。
    if($$to_char_def == ""){
        $$to_char_def = "" ; //default
    }
    //toで取得した名前の前に挿入するキャラクタを抑制する
    if(getininum($$ini,$$Section,"to_char_enable") != 1){
        $$to_char_def = "" ;
    }

    //cc_char
    //ccで取得した名前の前に挿入するキャラクタ
    //キャラクタDefault取得
    $$cc_char_def = getinistr($$ini,$$Section,"cc_char");
    //INIファイルから文字列を取りだします。
    if($$cc_char_def == ""){
        $$cc_char_def = "CC) " ; //default
    }
    //ccで取得した名前の前に挿入するキャラクタを抑制する
    if(getinistr($$ini,$$Section,"cc_char_disable") == "1"){
        $$cc_char_def = "" ;
    }

    ##i = 0;
    //to,cc のとき、前につける文字を定義する
    //$$return_charが""のときは付加しない
    if($$return_char != ""){
        if(##cc_mode == 1){
            $$char = $$cc_char_def ;
        }
        else{
            $$char = $$to_char_def ;
        }
    }
    else{
        $$char = "" ;
    }

    //複数の敬称付き宛名挿入をする時に1行当たりに挿入する
    //数を指定する。
    ##namecnt_p_line = getininum($$ini,$$Section,"namecnt_p_line") ;
    if(##namecnt_p_line == 0) ##namecnt_p_line = 1 ;

    while( ##i < ##cnt ) {
        //##div_name optionが1のとき、空白より前だけを取得
        $$s = $list[##i] ;
        if(($list[##i] != "") && (##div_name == 1)){
            //$list[##i]に半角空白" " があるか探す
            ##n = strstr($list[##i]," ");
            //str1からstr2を検索し,見つかった場合はその位置を返します。
            //先頭が0です。見つからなかった場合は-1を返します。 返す値は数値
型です。
            if(##n != -1){
                $$s = leftstr( $list[##i], ##n ) ;
            }
        }

        //敬称情報の正規表現文字列を取得
        $$reg_keisyou = getinistr($$ini,$$Section,"reg_keisyou");
        // 敬称情報が$$wordで定義した文字列"not_apply"のとき)
        if($list_keisyou[##i] == $$word){
            $$wk = "" ;
        }
        //正規表現情報を取得した時、
        else if($$reg_keisyou != ""){
            freedll;
            //hmjre.dllの機能を利用
            call HmJre ;
            //名前情報に定義された敬称を含むか含まないかを確認する。
            //第1パラメータ(文字列型):検索したい正規表現文字列を指定します。
            //第2パラメータ(文字列型):検索対象の文字列を指定します。
            //第3パラメータ(数値型):検索を開始する桁位置を指定します。
            //  先頭から検索したい場合は0を指定します。
            //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返します。
            //ヒットしなかった場合は-1を返します。
            //正規表現の解釈その他でエラーが起きた場合は-2を返します。
            ##n = dllfunc( "FindRegular",
                $$reg_keisyou,
                $$s, 0 );
            //敬称文字列が一致。名前情報に登録された敬称が含まれる。
            if (##n >= 0) {
                $$wk = "" ;
            }
            //名前情報に登録された敬称が含まれない。
            else{
                $$wk = $list_keisyou[##i] ;
            }
            freedll;
            call HidemaruMail ;
        }
        //正規表現情報を取得しなかった時 and
        //名前情報の末尾が敬称情報と一致した時
        else if(rightstr($$s,strlen($list_keisyou[##i])) == $list_keisyou[##
i]){
            $$wk = "" ;
        }
        else $$wk = $list_keisyou[##i] ;

        //区切り文字列を取得
        $$divider = getinistr($$ini,$$Section,"divider");
        if($$divider == "") $$divider = " " ;
        //部署名情報の処理
        if($list_part[##i] != ""){
            $$part = $list_part[##i] + $$divider ;
        }
        else{
            $$part = "" ;
        }

        //改行キャラクタ作成処理
        if(##ins_ret_mode == 1){
            if( (##i % ##namecnt_p_line) == 0){
                $$return = $$return_char ;
            }
            else{
                $$return = "" ;
            }
        }
        else{
            $$return = $$return_char ;
        }

        //文字列が存在するとき。
        if($$str != ""){
            $$str = $$str +
                //char_def=複数の名前の場合間に挿入するキャラクタ。
                getinistr($$ini,$$Section,"char_def") +
                //複数の名前の間の改行。
                //ins_ret_mode=0:改行なし
                //ins_ret_mode=1:複数の名前の間に改行を挿入する
                $$return +
                //ccで取得した名前の前に挿入するキャラクタ
                $$char +
                //部署名
                $$part +
                //名前情報
                $$s +
                //敬称
                $$wk ;
        }
        //文字列が無い最初のとき。
        else{
            if(##cc_mode == 1) $$char_1st = $$cc_char_def ;
            else $$char_1st = $$to_char_def ;
            $$str =
                //to,ccで取得した名前の前に挿入するキャラクタ
                $$char_1st +
                //部署名
                $$part +
                //名前情報
                $$s +
                //敬称
                $$wk ;
        }
        ##i = ##i + 1;
    }
return $$str ;

chg_to_name:
//処理:第一引数で指定された文字列の名前情報を変更する。
//      作成した情報は第二引数のheaderにsetする。
//引数渡し
    //第一引数: 文字列型,処理を実施する文字列
    $$To_inf = $$1;
    //第ニ引数: 文字列型,処理後の情報をsetするheader
    $$header = $$2;
    //第三引数: 数値型,headerに敬称を付加するflag
    ##add_to_keisyou = ##3;
    //第四引数: 数値型,Headerの名前の半角空白以降を削除するflag
    ##div_name_header = ##4 ;
    //第五引数: 文字列型,登録している敬称すべてを正規表現で指定
    $$reg_keisyou = $$5 ;
    //第六引数: 文字列型,補足情報の後に挿入する文字列
    $$divider = $$6 ;
    if($$divider == "") $$divider = " " ;

    if($$To_inf == ""){
        message "サブルーチンchg_to_name 第一引数Error\n" + $info ;
    }
    if($$header == ""){
        message "サブルーチンchg_to_name 第ニ引数Error\n" + $info ;
    }

    //区切り文字列を取得
    $$divider = getinistr($$ini,$$Section,"divider");
    if($$divider == "") $$divider = " " ;
    //e-mailの個数を取得
    ##cnt_email = dllfunc("CountEmailList", $$To_inf);
    $$str = "" ;
    ##i = 0 ;
    //E-mail個数処理を繰り返す
    while(##i < ##cnt_email){
        //取得したHeaderから、指定した引数のE-mail情報を取得
        $$wk = dllfuncstr("GetEmailList", $$To_inf, ##i);
        //E-mailのみ取得する
        $$email = dllfuncstr( "SetEmailOnly", $$wk );
        //サブルーチンMake_nameで作成した名前を$$nameに代入
        $$name = $list[##i] ;
        //サブルーチンMake_nameで作成した補足情報を$$partに代入
        if($list_part[##i] != ""){
            $$part = $list_part[##i] + $$divider ;
        }
        else{
            $$part = "" ;
        }

        //名前とEmailが同じときは、名前情報を付けないようにする
        if($$name == $$email) {
            $$name = "" ;
        }
        $$s = $$part + $$name ;
        //名前 or 補足情報があるとき
        if(($$s != "") || ($$part != "")){
            //名前があるとき、e-mailに"<" ,">"をつける。
            $$email = "<" + $$email + ">" ;
            //敬称がすでに名前についている場合、付加しない
            //正規表現で示した敬称情報を利用してチェックする。
            if($$reg_keisyou != ""){
                freedll;
                //hmjre.dllの機能を利用
                call HmJre ;
                //第1パラメータ(文字列型):検索したい正規表現文字列を指定しま
す。
                //第2パラメータ(文字列型):検索対象の文字列を指定します。
                //第3パラメータ(数値型):検索を開始する桁位置を指定します。
                //  先頭から検索したい場合は0を指定します。
                //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返します。
                //ヒットしなかった場合は-1を返します。
                //正規表現の解釈その他でエラーが起きた場合は-2を返します。
                ##n = dllfunc( "FindRegular",
                    $$reg_keisyou,
                    $$s, 0 );
                //敬称文字列が一致
                if (##n >= 0) {
                    $$wk = "" ;
                }
                else{
                    $$wk = $list_keisyou[##i] ;
                }
                freedll;
                call HidemaruMail ;
            }
            //通常の文字列一致処理でチェックする。(登録済み敬称が存在する場合)
            else if(rightstr($$s,strlen($list_keisyou[##i])) == $list_keisyo
u[##i]){
                $$wk = "" ;
            }
            //登録済み敬称が存在しない場合
            else $$wk = $list_keisyou[##i] ;

            //ダブルクォーテーションで括られているかどうかチェックする。
            if( (leftstr($$s,1) == "\"") &&
                (rightstr($$s,1) == "\"")){
                ##double = 1 ;
                $$s = dllfuncstr("UnDoubleQuote", $$s ) ;
            }
            else ##double = 0 ;

            //##div_name_header optionが1のとき、空白より前だけを取得
            if(##div_name_header == 1){
                //$list[##i]に半角空白" " があるか探す
                ##n = strstr($$s," ");
                //空白を含むとき
                if(##n != -1){
                    $$s = leftstr( $$s, ##n ) ;
                }
            }
            if(##add_to_keisyou){
                //敬称がすでに名前についている場合、付加しない
                //正規表現で示した敬称情報を利用してチェックする。
                if($$reg_keisyou != ""){
                    freedll;
                    //hmjre.dllの機能を利用
                    call HmJre ;
                    //第1パラメータ(文字列型):検索したい正規表現文字列を指定
します。
                    //第2パラメータ(文字列型):検索対象の文字列を指定します。
                    //第3パラメータ(数値型):検索を開始する桁位置を指定します。
                    //  先頭から検索したい場合は0を指定します。
                    //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返
します。
                    //ヒットしなかった場合は-1を返します。
                    //正規表現の解釈その他でエラーが起きた場合は-2を返します。
                    ##n = dllfunc( "FindRegular",
                        $$reg_keisyou,
                        $$s, 0 );
                    //敬称文字列が一致
                    if (##n >= 0) {
                        $$wk = "" ;
                    }
                    else{
                        $$wk = $list_keisyou[##i] ;
                    }
                    freedll;
                    call HidemaruMail ;
                }
                //通常の文字列一致処理でチェックする。(登録済み敬称が存在す
る場合)
                else if(rightstr($$s,strlen($list_keisyou[##i])) == $list_ke
isyou[##i]){
                    $$wk = "" ;
                }
                //登録済み敬称が存在しない場合
                else $$wk = $list_keisyou[##i] ;

                //ダブルクォーテーションで括られている場合
                if( ##double == 1){
                    $$s = "\"" + $$s + $$wk + "\"" ;
                }
                else $$s = $$s + $$wk ;
            }

            call Add_double $$s ;
            $$s = $$return;
        }
        $$wk = $$s + " " + $$email ;
        //挿入する文字列を作成
        if($$str == ""){
            $$str = $$wk ;
        }
        else{
            $$str = $$str + ", " + $$wk ;
        }
        ##i = ##i + 1 ;
    }

    //現在のHeaderを削除する。
    ##Header_count = dllfunc("CountCurrentHeader", $$header);
    ##i = 0 ;
    while( ##i < ##Header_count ) {
        ##n = dllfunc( "DeleteHeader2", $$header, ##i );
        ##i = ##i + 1;
    }
    //作成された文字列をHeaderにsetする
    if($$str != ""){
        ##n = dllfunc( "SetHeader", $$header, $$str );
    }
return ;
del_to_name:
//処理:第一引数で指定された文字列に禁止文字がないか確認。あった場合全角に置換。
//引数渡し
    //第一引数: 文字列型,チェックを行う文字列
    $$To_inf = $$1;
    $$header = $$2;
    if($$To_inf == ""){
        message "サブルーチンdel_to_name 第一引数Error\n" + $info ;
    }
    if($$header == ""){
        message "サブルーチンdel_to_name 第ニ引数Error\n" + $info ;
    }

    //e-mailの個数を取得
    ##cnt_email = dllfunc("CountEmailList", $$To_inf);
    $$str = "" ;
    ##i = 0 ;
    //E-mail個数処理を繰り返す
    while(##i < ##cnt_email){
        //取得したHeaderから、指定した引数のE-mail情報を取得
        $$wk = dllfuncstr("GetEmailList", $$To_inf, ##i);
        //E-mailのみ取得する
        $$wk = dllfuncstr( "SetEmailOnly", $$wk );
        //挿入する文字列を作成
        if($$str == ""){
            $$str = $$wk ;
        }
        else{
            $$str = $$str + ", " + $$wk ;
        }
        ##i = ##i + 1 ;
    }

    //現在のHeaderを削除する。
    ##Header_count = dllfunc("CountCurrentHeader", $$header);
    ##i = 0 ;
    while( ##i < ##Header_count ) {
        ##n = dllfunc( "DeleteHeader2", $$header, ##i );
        ##i = ##i + 1;
    }
    //作成された文字列をHeaderにsetする
    if($$str != ""){
        ##n = dllfunc( "SetHeader", $$header, $$str );
    }
return ;


Add_double:
//処理:第一引数で指定された文字列に対象文字がある場合、ダブルクォーテーショ
ンで括る。
//引数渡し
    //第一引数: 文字列型,チェックを行う文字列
    $$str = $$1;
    if($$str == ""){
        message "サブルーチンAdd_double 第一引数Error\n" + $info ;
        goto LEND ;
    }
    $$Err_char = "<>[]()" ;
    ##loop = strlen($$Err_char) ;

    //ダブルクォーテーションで括られていない場合
    if( (leftstr($$str,1) != "\"") &&
        (rightstr($$str,1) != "\"")){
        ##i = 0 ;
        while(##i < ##loop){
            $$char = midstr($$Err_char,##i,1) ;
            while(strstr($$str,$$char) != -1){
                $$str = "\"" + $$str + "\"" ;
                ##flag = 1 ;
                break;
            }
            if(##flag) break;
            ##i = ##i + 1 ;
        }
    }

return $$str ;

add_to_keisyou:
//処理:第一引数で指定された文字列の名前情報を変更する。
//      作成した情報は第二引数のheaderにsetする。
//引数渡し
    //第一引数: 文字列型,処理を実施する文字列
    $$To_inf = $$1;
    //第ニ引数: 文字列型,処理後の情報をsetするheader
    $$header = $$2;
    //第三引数: 文字列型,登録している敬称すべてを正規表現で指定
    $$reg_keisyou = $$3 ;
    if($$To_inf == ""){
        message "サブルーチンadd_to_keisyou 第一引数Error\n" + $info ;
    }
    if($$header == ""){
        message "サブルーチンadd_to_keisyou 第ニ引数Error\n" + $info ;
    }

    //e-mailの個数を取得
    ##cnt_email = dllfunc("CountEmailList", $$To_inf);
    $$str = "" ;
    ##i = 0 ;
    //E-mail個数処理を繰り返す
    while(##i < ##cnt_email){
        //取得したHeaderから、指定した引数のE-mail情報を取得
        $$wk = dllfuncstr("GetEmailList", $$To_inf, ##i);
        //E-mailのみ取得する
        $$email = dllfuncstr( "SetEmailOnly", $$wk );
        //パラメータで渡された「名前+Email」の形式の文字列から、名前部分のみ
を取り出して返します。
        //名前情報は、Headerの名前を使用する。
        $$name = dllfuncstr( "SetNameOnly", $$wk );

        //名前とEmailが同じときは、名前情報を付けないようにする
        if($$name == $$email) {
            $$name = "" ;
        }
        if($$name != "") {
            //名前があるとき、e-mailに"<" ,">"をつける。
            $$email = "<" + $$email + ">" ;
            //敬称がすでに名前についている場合、付加しない
            //正規表現で示した敬称情報を利用してチェックする。
            if($$reg_keisyou != ""){
                freedll;
                //hmjre.dllの機能を利用
                call HmJre ;
                //第1パラメータ(文字列型):検索したい正規表現文字列を指定しま
す。
                //第2パラメータ(文字列型):検索対象の文字列を指定します。
                //第3パラメータ(数値型):検索を開始する桁位置を指定します。
                //  先頭から検索したい場合は0を指定します。
                //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返します。
                //ヒットしなかった場合は-1を返します。
                //正規表現の解釈その他でエラーが起きた場合は-2を返します。
                ##n = dllfunc( "FindRegular",
                    $$reg_keisyou,
                    $$name, 0 );
                //敬称文字列が一致
                if (##n >= 0) {
                    $$wk = "" ;
                }
                else{
                    $$wk = $list_keisyou[##i] ;
                }
                freedll;
                call HidemaruMail ;
            }
            //通常の文字列一致処理でチェックする。(登録済み敬称が存在する場合)
            else if(rightstr($$name,strlen($list_keisyou[##i])) == $list_kei
syou[##i]){
                $$wk = "" ;
            }
            //登録済み敬称が存在しない場合
            else $$wk = $list_keisyou[##i] ;

            //ダブルクォーテーションで括られているかどうかチェックする。
            if( (leftstr($$name,1) == "\"") &&
                (rightstr($$name,1) == "\"")){
                $$name = "\"" + dllfuncstr("UnDoubleQuote", $$name ) + $$wk
+ "\"" ;
            }
            else {
                $$name = $$name + $$wk ;
            }

            call Add_double $$name ;
            $$name = $$return;
        }
        $$wk = $$name + " " + $$email ;
        //挿入する文字列を作成
        if($$str == ""){
            $$str = $$wk ;
        }
        else{
            $$str = $$str + ", " + $$wk ;
        }
        ##i = ##i + 1 ;
    }

    //現在のHeaderを削除する。
    ##Header_count = dllfunc("CountCurrentHeader", $$header);
    ##i = 0 ;
    while( ##i < ##Header_count ) {
        ##n = dllfunc( "DeleteHeader2", $$header, ##i );
        ##i = ##i + 1;
    }
    //作成された文字列をHeaderにsetする
    if($$str != ""){
        ##n = dllfunc( "SetHeader", $$header, $$str );
    }
return ;

Res_check:
//処理:処理の判定&メッセージ表示
    //引数渡し
    ##num = ##1;    $$mes = $$2 ;
    if(##num != 1){
        message $$mes ;
        goto LEND;
    }
return ;

Str_check:
//処理:文字列の判定&メッセージ表示
    //引数渡し
    $$str = $$1;    $$mes = $$2 ;
    if($$str == ""){
        message $$mes ;
        goto LEND;
    }
return ;

Trim:
//機能: 前後の空白を削除する
    //第一引数: 文字列型,処理対象文字列
    //戻り値:   文字列型,処理後文字列
//引数渡し
    $$str = $$1;
    //空白を削除 trim
    //右の空白を削除
    while(1){
        if(rightstr($$str,1) == " ") $$str = leftstr($$str,strlen($$str) -1);
        else break ;
    }
    //左の空白を削除
    while(1){
        if(leftstr($$str,1) == " ") $$str = rightstr($$str,strlen($$str) -1);
        else break ;
    }
return $$str ;

Trim_L:
//機能: 前の空白を削除する
    //第一引数: 文字列型,処理対象文字列
    //戻り値:   文字列型,処理後文字列
//引数渡し
    $$str = $$1;
    while(1){
        if(leftstr($$str,1) == " ") $$str = rightstr($$str,strlen($$str) -1);
        else break ;
    }

return $$str ;
Trim_R:
//機能: 後の空白を削除する
    //第一引数: 文字列型,処理対象文字列
    //戻り値:   文字列型,処理後文字列
//引数渡し
    $$str = $$1;
    //右の空白を削除
    while(1){
        if(rightstr($$str,1) == " ") $$str = leftstr($$str,strlen($$str) -1);
        else break ;
    }
return $$str ;

HmJre:
    //  HmJre.DLLのロード
    loaddll "HmJre.dll" ;
    if(!result ){
        message "HmJre.dllのロードに失敗しました。";
        goto LEND;
    }
    //HmJre.dllの版数を取得。
    ##ver = (((dllfunc("JreGetVersion") & 0xFF00) / 256) * 100) +
            ((dllfunc("JreGetVersion") & 0xF0) / 16 * 10) +
            (dllfunc("JreGetVersion") & 0xF) ;
    if (##ver < 150) {
        $$mes = "HmJre.DLLの版数が Ver1.50より古いです\n" +
        "現在のHmJre.DLL版数=" +
        leftstr(str(##ver),1) + "." +
        midstr(str(##ver),1,1) + "." +
        midstr(str(##ver),2,1) + "\n" +
        $info ;
        ##ret = 0 ;
    }
    else
        ##ret = 1 ;

return ##ret ;

reg_escape:
//機能: 正規表現の特定文字をエスケープ処理を実施する。
    //第一引数: 文字列型,処理対象文字列
    //第二引数: 数値型,田楽Dllを使用するかしないかを指定する。1=使用する。0=
使用しない。
    //戻り値:   文字列型,処理後文字列
    $$s = $$1 ;
    ##dengaku = ##2 ;
    $$str[##i] = "\\" ; ##i = ##i + 1 ;
    $$str[##i] = "." ; ##i = ##i + 1 ;
    $$str[##i] = "*" ; ##i = ##i + 1 ;
    $$str[##i] = "+" ; ##i = ##i + 1 ;
    $$str[##i] = "?" ; ##i = ##i + 1 ;
    $$str[##i] = "^" ; ##i = ##i + 1 ;
    $$str[##i] = "$" ; ##i = ##i + 1 ;
    $$str[##i] = "[" ; ##i = ##i + 1 ;
    $$str[##i] = "]" ; ##i = ##i + 1 ;
    $$str[##i] = "(" ; ##i = ##i + 1 ;
    $$str[##i] = ")" ; ##i = ##i + 1 ;
    $$str[##i] = "|" ; ##i = ##i + 1 ;
    ##cnt = 0;
    while( ##cnt < ##i ) {
        if(##dengaku == 1){
            //loaddllされている場合、ロードされているDLLのファイル名を返しま
す。
            //田楽dllの機能を利用
            //GSUB
            //使い方:$s = dllfuncstr("GSUB",$s1,$s2,$s3,#n4);
            //説明:文字列中の部分文字列を別の文字列に置換します。
            //引数:
            //  $s1:置換対象文字列
            //  $s2:検索文字列
            //  $s3:置換文字列
            //  #n4:最初から何個の文字列を置換するか
            //  (-1 を指定すると見つかったものを全て置換します)
            //返り値:置換された結果の文字列が返ります。
            $$s = dllfuncstr("GSUB",$$s,$$str[##cnt],"\\" + $$str[##cnt],-1);
        }
        else{
            $$wk = $$s ;
            $$s = "" ;
            while(1){
                ##n = strstr($$wk,$$str[##cnt]);
                if(##n != -1){
                    $$s = $$s + leftstr($$wk,##n) + "\\" + $$str[##cnt] ;
                    $$wk = midstr($$wk,##n+1,strlen($$wk) - ##n -1) ;
                }
                else {
                    $$s = $$s + $$wk ;
                    break ;
                }
            }
        }
        ##cnt = ##cnt + 1;
    }
return $$s ;

Dengaku:
    //  田楽DLLのロード
    if(existfile(hidemarudir+"\\DengakuDLL.dll"))loaddll hidemarudir+"\\Deng
akuDLL.dll";
    else {
        $$mes = "田楽DLLが見つかりませんでした。\n" +
                "田楽DLLを秀丸エディタインストールディレクトリにおいてくださ
い。\n" +
                "  秀丸エディタインストールディレクトリ:\n\t"+hidemarudir +
"\n\n" +
                "田楽DLL ダウンロードURL\n"+
                "  http://www.ceres.dti.ne.jp/~sugiura/hidemaru/macros/dgserver/
\n" +
                $info ;
        message $$mes ;
        goto LEND ;
    }

    if (!result) {
        message "田楽DLL をロードできませんでした。"+$info;
        goto LEND ;
    }
return;

Gsub:
//機能: "\"を第二引数で指定した文字に置換する
    //第一引数: 文字列型,処理対象文字列
    //第ニ引数: 文字列型,置換文字列
    //第三引数: 文字列型,第二引数で指定した文字列を置き換える文字列
    //戻り値:   文字列型,処理後文字列
    $$target = $$1 ;
    $$reg_str = $$2 ;
    $$gsub = $$3 ;

    if($$target == ""){
        message "サブルーチンGsub:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$reg_str == ""){
        message "サブルーチンGsub:第ニ引数エラー。\n" + $info ;
        goto LEND ;
    }

    //loaddllされている場合、ロードされているDLLのファイル名を返します。
    //ロードされていない場合は何もない文字列を返します。
    $$dllfile = loaddllfile ;
    if($$dllfile != "") freedll;

    //hmjre.dllの機能を利用
    call HmJre ;

    //FindRegular(V1.50以降から)
    //特定の文字列から特定の正規表現パターンのマッチングをして、ヒットした場
合は
    //その位置を返します。
    //第1パラメータ(文字列型): 検索したい正規表現文字列を指定します。
    //第2パラメータ(文字列型): 検索対象の文字列を指定します。
    //第3パラメータ(数値型): 検索を開始する桁位置を指定します。
    //先頭から検索したい場合は0を指定します。
    //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返します。
    //ヒットしなかった場合は-1を返します。
    //正規表現の解釈その他でエラーが起きた場合は-2を返します。
    ##n = dllfunc( "FindRegular",
        $$reg_str,
        $$target, 0 );
    //検索文字列が一致
    if (##n > 0) {
        while( ##n > 0 ) {
            $$target =
                leftstr( $$target, ##n ) +
                $$gsub +
                midstr( $$target, ##n +1, strlen($$target) - ##n - 1 ) ;
            ##n = dllfunc( "FindRegular",
                $$reg_str,
                $$target, 0 );
        }
    }
    else if(##n == -2){
        message "正規表現の解釈その他でエラーが発生" ;
    }

    if($$dllfile != ""){
        loaddll $$dllfile ;
        if(!result ){
            message $$dllfile + "\nのロードに失敗しました。" + $info ;
            goto LEND ;
        }
    }

return $$target ;

HmJre:
    //  HmJre.DLLのロード
    loaddll "HmJre.dll" ;
    if(!result ){
        message "HmJre.dllのロードに失敗しました。";
        goto LEND;
    }
    //HmJre.dllの版数を取得。
    ##ver = (((dllfunc("JreGetVersion") & 0xFF00) / 256) * 100) +
            ((dllfunc("JreGetVersion") & 0xF0) / 16 * 10) +
            (dllfunc("JreGetVersion") & 0xF) ;
    if (##ver < 150) {
        $$mes = "HmJre.DLLの版数が Ver1.50より古いです\n" +
        "現在のHmJre.DLL版数=" +
        leftstr(str(##ver),1) + "." +
        midstr(str(##ver),1,1) + "." +
        midstr(str(##ver),2,1) + "\n" +
        $info ;
        ##ret = 0 ;
    }
    else
        ##ret = 1 ;

return ##ret ;

findbooknote:
//機能: アドレス帳から第一引数のアドレス情報の備考情報を取得する。
//      備考〜備考8の取得先は、第二引数の数値情報を利用する。
    //第一引数: 文字列型,処理対象文字列
    //第ニ引数: 数値型,備考取得情報
    //戻り値:   文字列型,処理後文字列
    $$inf = $$1 ;
    ##bikou = ##2 ;

    if($$inf == ""){
        message "サブルーチンfindbooknote:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    if( (##bikou <1) ||
        (8 < ##bikou)){
        message "サブルーチンfindbooknote:第二引数エラー。\n" +
            str(##bikou) + "\n" + $info ;
        goto LEND ;
    }

    if(##bikou == 1){
        //備考の内容を返します。
        $$ret = dllfuncstr( "FindBookNote", $$inf);
    }
    else if(##bikou == 2){
        //備考2の内容を返します。
        $$ret = dllfuncstr( "FindBookNote2", $$inf);
    }
    else if(##bikou == 3){
        //備考3の内容を返します。
        $$ret = dllfuncstr( "FindBookNote3", $$inf);
    }
    else if(##bikou == 4){
        //備考4の内容を返します。
        $$ret = dllfuncstr( "FindBookNote4", $$inf);
    }
    else if(##bikou == 5){
        //備考5の内容を返します。
        $$ret = dllfuncstr( "FindBookNote5", $$inf);
    }
    else if(##bikou == 6){
        //備考6の内容を返します。
        $$ret = dllfuncstr( "FindBookNote6", $$inf);
    }
    else if(##bikou == 7){
        //備考7の内容を返します。
        $$ret = dllfuncstr( "FindBookNote7", $$inf);
    }
    else if(##bikou == 8){
        //備考8の内容を返します。
        $$ret = dllfuncstr( "FindBookNote8", $$inf);
    }
return $$ret ;
//------------HMML_INS_NAME.MAC-------------

[ ]
RE:00247 「宛先名挿入マクロ」に機能追加No.00248
siniti さん 08/06/25 22:34
 
ぷっくんさん

sinitiです。

当方の要望を殆ど対応頂きありがとうございます。
感謝します。

>別名を補助情報で挿入できるような感じで検討してみました。
>アドレス帳の備考8に"enable_group"を指定することで、
>グループ情報を補足情報挿入として利用できますが、
>備考8に"alias:" + 補足情報として挿入したい文字列
>を指定してください。
>グループ名欄が長くなりすぎて見づらいときの略称を"補足情報として挿入したい文
>字列"
>として指定してください。

これ、GooD!ですね。

なお、私の使用法・設定がおかしいのかうまく動作しません。
仕様を確認させてください。

group_mode=0は、"enable_group"でグループ情報を利用するアドレスを指定する設定
と理解しました。

group_mode=1は"disable_group"でグループ情報を利用しないアドレスを指定する設
定と理解しました。

puku.iniで

engroup_mode=7
part_mode=9

を指定しているときに、下記の設定の場合は何が設定されますか?

アドレス帳    備考7の設定内容
Aグループ
 A-1氏      alias:A−1会社
 A-2氏      disable_group
 A-3氏      enable_group
 A-4氏

Bグループ
 B-1氏      alias:B−1会社
 B-2氏      disable_group
 B-3氏      enable_group
 B-4氏

Q1)group_mode=0の場合のA-1氏、A-2氏、A-3氏、A-4氏の宛先名

Q2)group_mode=1の場合のB-1氏、B-2氏、B-3氏、B-4氏の宛先名

[ ]
RE:00248 「宛先名挿入マクロ」に機能追加No.00249
プックン さん 08/06/26 01:27
 
sinitiさん、こんばんは。

下記動作が想定している仕様です。
けどなんかマクロの動きがおかしいですね。

回答1)group_mode=0の場合のA-1氏、A-2氏、A-3氏、A-4氏の宛先名
A-1会社)A-1氏さん
A-2氏さん
Aグループ)A-3氏さん
A-4氏さん
回答2)group_mode=1の場合のB-1氏、B-2氏、B-3氏、B-4氏の宛先名
B-1会社)B-1氏さん
B-2氏さん
Bグループ)B-3氏さん
Bグループ)B-4氏さん

少し修正してみました。下記マクロで試してみてください。

//------------HMML_INS_NAME.MAC-------------
$$ver  = "1.17Beta3";
$$date = "2008/06/26";
$$author = "プックン" ;
$$fname = currentmacrobasename ;
$info = "\n" + $$fname + " Ver " + $$ver+ "\n最終更新日付:"+$$date ;
$info = $info + "\n作者:"+$$author ;

    disabledraw ;   //画面の書き換えを禁止します。

    call HidemaruMail ;

    //ソフト版数チェック
    ##require = 450 ;
    ##ver = dllfunc("TuruKameVersion");
    if ( ##ver < ##require ) {
        message "秀丸メールがVer" +
                leftstr(str(##ver),1) + "." +
                midstr( str(##ver), 1, length(str(##ver))-1 ) +
                "です。Ver" +
                leftstr(str(##require),1) + "." +
                midstr( str(##require), 1, length(str(##require))-1 ) +
                "以降を使用してください。\n" ;
        goto LEND;
    }

    //秀丸メールの本体ウィンドウ中かどうか
    if(dllfunc("IsHidemaruMailMain")){
        message "秀丸メールエディタウィンドウで実行してください。\n" + $info ;
        goto LEND ;
    }

    //新規作成時処理用に情報を取得
    ##MailType = dllfunc("MailType") ;
    //-1:何も無い場合
    //0:新規作成のメール
    //1:返信メール
    //2:転送メール
    //3:受信したメールの場合
    //4:送信済みメールの場合
    //5:未送信フォルダまたは草稿フォルダに保存された未送信メール
    //6:「添付ファイルとして転送」で作成されたメールで、まだ保存されてない段
階の物。
    //-1:何も無い場合
    //0:新規作成のメール
    //1:返信メール
    //2:転送メール
    //3:受信したメールの場合
    //4:送信済みメールの場合
    //5:未送信フォルダまたは草稿フォルダに保存された未送信メール
    //6:「添付ファイルとして転送」で作成されたメールで、まだ保存されてない段
階の物。
    if(##MailType == 3){
        message "マクロの対象外メールです。" + $info ;
        goto LEND ;
    }
    //送信済みメールの場合
    else if(##MailType == 4){
        question "\"送信済みメール\"の編集を許可してもよいですか?\n" + $info ;
        if( result == yes ) {
            //送信済みメールや受信メールをエディタ・ウィンドウで開いている時
に、「編集を許可」します。
            //エディタ・ウィンドウ上で、編集が禁止された状態になっている時に
のみ有効な関数です。
            //編集できる状態かどうかは、秀丸マクロのreadonlyキーワードを使え
ば分かります。
            if(readonly){
                ##n = dllfunc( "EnableEdit" );
                call Res_check ##n , "編集を許可できませんでした\n" + $info ;
            }
        }
        else goto LEND ;
    }

    //検索実行後insertを実行したときに、"選択範囲"の場合に、検索した文字列
    //の上に挿入してしまうのを防ぐため。
    //検索での表示 点滅表示/範囲選択の情報を取得する。
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    #reg_search = searchmode;
    writeregnum "SelectFound",0;    //点滅表示に変更する
    envchanged;
    closereg ;
    $sbuf = searchbuffer ;  //マクロ終了時に、検索条件を復元するため記憶
    #sopt = searchoption ;
    $rbuf = replacebuffer;

    //文字列挿入
    //現在位置に、文字を挿入してカーソル位置を記録しておく。
    //To,Subjectが空白だと、その位置に移動するため、テンプレートで
    //指示した$cの位置を記憶する。
    $$cur_char = "@c@" ;
    ##cur_move = 0 ;
    //カーソル位置を確認する。
    if(y >= 0){     //メール本文の場合に、$$cur_charを挿入する。
        insert $$cur_char ;
        ##cur_move = 1 ;
    }
    else{
    //Headerの場合 and
    //テンプレートでカーソル位置の指定があった場合に、、$$cur_charを挿入する。
        moveto 0,-1 ;
        tab ;
        if((x != 0) || (y != 0)){
            insert $$cur_char ;
            ##cur_move = 1 ;
        }
    }

//初期定義
    //アカウント名を取得
    $$account = dllfuncstr("ExecAtMain", "CurrentAccount") ;
    call Str_check $$account,"アカウントの取得に失敗しました。\n" + $info ;
    //INIファイル
    //定義ファイル(INIファイル)
    $$ini = dllfuncstr("HomeDir") +
            $$account +
            "\\puku.ini" ;
    //セクション
    $$Section = currentmacrobasename ;

    //Alt が押されているとき、CCの敬称付き宛名の先頭文字を省略する。
    if      ( iskeydown(0x12) ) {
        ##cc_char_disable = 1 ;
        writeinistr $$ini, $$Section, "cc_char_disable", "1" ;
    }

    //Shift が押されているとき、cc_modeを一時的に切り替える
    if      ( iskeydown(0x10) ) {##cc_mode_inv = 1 ;}
    //もしくはiniファイルの"cc_mode_inv"情報が"1"のとき
    //cc_modeを一時的に切り替える
    else if (getinistr($$ini,$$Section,"cc_mode_inv")  == "1") {
        ##cc_mode_inv = 1 ;
        writeinistr $$ini, $$Section, "cc_mode_inv", 0 ;
    }

    //to_skip
    //Ctrl が押されているとき、to_skip_modeを一時的に切り替える
    if      ( iskeydown(0x11) ) {##to_skip_mode_inv = 1 ;}
    //もしくはiniファイルの"cc_mode_inv"情報が"1"のとき
    //cc_modeを一時的に切り替える
    else if (getinistr($$ini,$$Section,"to_skip_mode_inv")  == "1") {
        ##to_skip_mode_inv = 1 ;
        writeinistr $$ini, $$Section, "to_skip_mode_inv", 0 ;
    }

    $$wk = getinistr($$ini,$$Section,"Get_info_ini");
    if($$wk == ""){
        //情報がなにもないのでiniファイルのサンプルを作成する。
        writeinistr $$ini, $$Section,  "Get_info_ini", "0" ;
        writeinistr $$ini, $$Section,  "//    Get_info_ini(Default=0) 0:ini
ファイルから敬称list情報を取得しない。1:取得する。", "" ;
        writeinistr $$ini, $$Section,  "//Get_info_ini", "1" ;
        writeinistr $$ini, $$Section,  "//    name(Default=0): 0 = アドレス
帳から名前を取得,1 = ヘッダから名前を取得", "" ;
        writeinistr $$ini, $$Section,  "//name", "0" ;
        writeinistr $$ini, $$Section,  "//    keisyou_modeとは(Default=0)",
"" ;
        writeinistr $$ini, $$Section,  "//    0 = Defaultの敬称をつける", "" ;
        writeinistr $$ini, $$Section,  "//    1 = アドレス帳の備考 を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//    2 = アドレス帳の備考2を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//    3 = アドレス帳の備考3を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//keisyou_mode", "3" ;
        writeinistr $$ini, $$Section,  "//    pos(Default=0): 0 = 先頭に挿入,
1 = 定義文字列の位置に挿入,2=カーソル位置に挿入", "" ;
        writeinistr $$ini, $$Section,  "//pos", "1" ;
        writeinistr $$ini, $$Section,  "//    home_c(Default=@P@): ホームポ
ジション定義キャラクタ", "" ;
        writeinistr $$ini, $$Section,  "//home_c", "@P@" ;
        writeinistr $$ini, $$Section,  "//    keisyou_def(Default=殿):敬称De
fault取得", "" ;
        writeinistr $$ini, $$Section,  "//keisyou_def", "様" ;
        writeinistr $$ini, $$Section,  "//    char_def(Default=なし): 複数の
名前の場合間に挿入するキャラクタ。ins_ret_mode=0のときに設定するとよい。", "" ;
        writeinistr $$ini, $$Section,  "//char_def", "," ;
        writeinistr $$ini, $$Section,  "//ins_ret_mode(Default=1) : 0 = なに
もしない,1= 複数の名前の間に改行を挿入する", "" ;
        writeinistr $$ini, $$Section,  "//ins_ret_mode", "0" ;
        writeinistr $$ini, $$Section,  "//    adr_mode(Default=1):0 = 何もし
ない,1 = To:の情報がないときにアドレス帳を起動する", "" ;
        writeinistr $$ini, $$Section,  "//adr_mode", "0" ;
        writeinistr $$ini, $$Section,  "//    div_name(Default=0):0 = 何もし
ない,1 = 半角空白を名前から探し、その前の部分のみ利用する", "" ;
        writeinistr $$ini, $$Section,  "//div_name", "1" ;
        writeinistr $$ini, $$Section,  "//    cc_mode(Default=0):0 = なにも
しない,1 = CCの情報から名前を取得しメール本文に挿入する", "" ;
        writeinistr $$ini, $$Section,  "//cc_mode", "1" ;
        writeinistr $$ini, $$Section,  "//    cc_char[Default=\"CC)\"]: ccで
取得した名前の前に挿入するキャラクタ", "" ;
        writeinistr $$ini, $$Section,  "//cc_char", "CC)" ;

        writeinistr $$ini, $$Section,  "//    del_to_name[Default=0]: To,Cc
の名前情報を削除するOption。0=To,Cc Headerの名前情報を削除しない。1=削除する。
", "" ;
        writeinistr $$ini, $$Section,  "//del_to_name", "0" ;
        writeinistr $$ini, $$Section,  "//    del_newmail_to_name[Default=
0]: 新規作成時To,Ccの名前情報を削除するOption。0=新規作成時To,Cc Headerの名
前情報を削除しない。1=削除する。", "" ;
        writeinistr $$ini, $$Section,  "//del_newmail_to_name", "0" ;
        writeinistr $$ini, $$Section,  "//    chg_to_name[Default=0]: Header
 Toの名前情報を変更するOption。0=To Headerの名前情報を変更しない。1=名前情報
を変更する。", "" ;
        writeinistr $$ini, $$Section,  "//chg_to_name", "0" ;
        writeinistr $$ini, $$Section,  "//    div_name_header[Default=0]: di
v_name_header=1のとき半角空白以降を削除するOption。0=半角空白以降を削除しな
い。1=半角空白以降を削除する。", "" ;
        writeinistr $$ini, $$Section,  "//div_name_header", "0" ;
        writeinistr $$ini, $$Section,  "//    add_to_keisyou[Default=0]: Hea
der Toの名前情報に敬称を追加するOption。0=Header Toに敬称を追加しない。1=Hea
der Toに敬称を追加する", "" ;
        writeinistr $$ini, $$Section,  "//add_to_keisyou", "0" ;
        writeinistr $$ini, $$Section,  "//    chg_cc_name[Default=0]: Header
 Ccの名前情報を変更するOption。0=To Headerの名前情報を変更しない。1=名前情報
を変更する。", "" ;
        writeinistr $$ini, $$Section,  "//chg_cc_name", "0" ;
        writeinistr $$ini, $$Section,  "//    add_cc_keisyou[Default=0]: Hea
der Ccの名前情報に敬称を追加するOption。0=Header Ccに敬称を追加しない。1=Hea
der Toに敬称を追加する。", "" ;
        writeinistr $$ini, $$Section,  "//add_cc_keisyou", "0" ;
        writeinistr $$ini, $$Section,  "//    to_skip_mode(Default=0):0 = な
にもしない,1 = Toの情報から名前を取得しメール本文に挿入するのを抑制する", "" ;
        writeinistr $$ini, $$Section,  "//to_skip_mode", "0" ;
        writeinistr $$ini, $$Section,  "//    part_modeとは(Default=0)", "" ;
        writeinistr $$ini, $$Section,  "//    0 = 補足情報を挿入しない", "" ;
        writeinistr $$ini, $$Section,  "//    1 = アドレス帳の備考 を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//    2 = アドレス帳の備考2を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//    3 = アドレス帳の備考3を取得し
てつける", "" ;
        writeinistr $$ini, $$Section,  "//keisyou_mode", "3" ;
    }

    //div_name
    //取得した名称に半角空白がある場合、その前の部分のみ取得するoption
    //0 = 何もしない
    //1 = 半角空白を名前から探し、その前の部分のみ利用する
        ##div_name = getininum($$ini,$$Section,"div_name");
        if((##div_name < 0) || (##div_name > 1)){
            ##div_name = 0 ; //default
        }

    //adr_mode
    //0 = 何もしない
    //1 = To:の情報がないときにアドレス帳を起動する
        //アドレス帳起動モードを取得
        $$wk = getinistr($$ini,$$Section,"adr_mode");
        if($$wk == ""){
            $$wk = "1" ;
        }
        ##adr_mode = val($$wk) ;
        //INIファイルから文字列を取りだします。
        if((##adr_mode < 0) || (##adr_mode > 1)){
            ##adr_mode = 1 ;    //default
        }

    //ホームポジション定義キャラクタ
        //ホームポジションキャラクタ:名前情報作成後、
        //カーソルをこの文字の位置に移動
        //ホームポジションキャラクタ取得
        $$home_c = getinistr($$ini,$$Section,"home_c");
        //INIファイルから文字列を取りだします。
        if($$home_c == ""){
            $$home_c = "@P@" ;  //default
        }

    //pos
    //0 = 先頭に挿入
    //1 = 定義文字列の位置に挿入
    //2 = カーソル位置に挿入
        //文字列挿入位置情報を取得
        ##pos = getininum($$ini,$$Section,"pos");
        //INIファイルから文字列を取りだします。
        if((##pos < 0) || (##pos > 2)){
            ##pos = 0 ; //default
        }

    //to_skip_mode
    //0 = なにもしない
    //1 = Toに対して文字列挿入処理をskipする
        //文字列挿入位置情報を取得
        ##to_skip_mode = getininum($$ini,$$Section,"to_skip_mode");
        //INIファイルから文字列を取りだします。
        if((##to_skip_mode < 0) || (##to_skip_mode > 1)){
            ##to_skip_mode = 0 ; //default
        }
        //Shiftを押して実行したときに#to_skip_modeを切り替える
        ##to_skip_mode = (##to_skip_mode + ##to_skip_mode_inv) % 2 ;

    //cc_mode
    //0 = なにもしない
    //1 = CCの情報から名前を取得しメール本文に挿入する
        //文字列挿入位置情報を取得
        ##cc_mode = getininum($$ini,$$Section,"cc_mode");
        //INIファイルから文字列を取りだします。
        if((##cc_mode < 0) || (##cc_mode > 1)){
            ##cc_mode = 0 ; //default
        }
        //Shiftを押して実行したときに#cc_modeを切り替える
        ##cc_mode = (##cc_mode + ##cc_mode_inv) % 2 ;

    //Toの名前情報を削除するflag
        //To,Ccの名前情報を削除するoption取得
        ##del_to_name = getininum($$ini,$$Section,"del_to_name");
        //新規作成時To,Ccの名前情報を削除するoption取得
        ##del_newmail_to_name = getininum($$ini,$$Section,"del_newmail_to_na
me");

    //Toの名前情報をアドレス帳の名前にするflag
    //敬称も付加する。
        ##chg_to_name = getininum($$ini,$$Section,"chg_to_name");
        ##div_name_header = getininum($$ini,$$Section,"div_name_header");
        ##add_to_keisyou = getininum($$ini,$$Section,"add_to_keisyou");

        ##chg_cc_name = getininum($$ini,$$Section,"chg_cc_name");
        ##add_cc_keisyou = getininum($$ini,$$Section,"add_cc_keisyou");

    //挿入文字列を変換する。英数字のみ半角化。
        ##cnv_filter = getininum($$ini,$$Section,"cnv_filter");
        if( (##cnv_filter == 1) &&
            (dllfunc("HidemaruMailVersion") <= 454)){
            message
                "変換用Filter機能は、\n"+
                "秀丸メールVer4.54以前では使用できません。\n" + $info ;
        }

//-------------------main------------------
    //アドレス帳の起動
    if(##adr_mode == 1){
        $$wk = dllfuncstr( "CurrentHeader", "To" );
        if($$wk == ""){
            #n = dllfunc( "AdrBook");
        }
    }

    //アドレス帳から名前取得
    //To_headerから名前取得
    //なければemailアドレス

    //Toの情報を取得する。
        //サブルーチン get_to_list:
        //機能:引数で指定したヘッダ情報を取得する。
        //第一引数: 文字列型,ヘッダー種類(To,Cc,Bccなど)
        //戻り値:   文字列型,引数で指定したヘッダ情報(複数の場合は、
        //"," + 改行が途中に入る
    if(##to_skip_mode == 0){
        call get_to_list "To" ;
        $$To_inf = $$return ;
    }

    //敬称情報の処理
    //敬称list情報をiniファイルから取得するか、否かの設定。
    //get_info_ini
    //0:iniファイルから取得しない。1:取得する。
    ##get_info_ini = getininum($$ini,$$Section,"Get_info_ini");

    $$key = "kei" ;
    //敬称のチェック用
    if(##get_info_ini == 1){
        call Set_default $$ini,$$Section,$$key ;
        call Get_list $$ini ,$$Section, $$key ;
        //戻り値:拡張子定義個数
        ##chk_cnt = ##return ;
    }
    else{
        //敬称の種類を登録
        //登録数
        writeinistr $$ini, $$Section, "Get_info_ini", "0" ;
        ##chk_cnt = 0 ;
        $get_list[##chk_cnt] = "殿" ;       ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "様" ;       ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "御中" ;     ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "さん" ;     ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "ちゃん" ;   ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "君" ;       ##chk_cnt = ##chk_cnt + 1 ;
        $get_list[##chk_cnt] = "くん" ;     ##chk_cnt = ##chk_cnt + 1 ;
    }
    //敬称情報の正規表現文字列を作成。
    $$dllfile = loaddllfile ;
    if($$dllfile != "") freedll;
    if(existfile( hidemarudir + "\\DengakuDLL.dll")){
        ##dengaku_use = 1 ;
        call Dengaku ;
    }
    else{
        ##dengaku_use = 0 ;
    }

    //正規表現の敬称確認文字列作成。
    ##i = 0 ;
    $$reg_keisyou = "(" ;
    while(##i < ##chk_cnt){
        if((##i +1) == ##chk_cnt) $$wk = "" ;
        else $$wk = "|" ;
        call reg_escape $get_list[##i],##dengaku_use ;
        $$s = $$return ;

        $$reg_keisyou = $$reg_keisyou + $$s + $$wk ;
        ##i = ##i + 1;
    }
    $$reg_keisyou = $$reg_keisyou + ")$" ;
    if(##dengaku_use){
        //田楽DLLを開放
        freedll ;
        if($$dllfile != "") loaddll $$dllfile ;
    }
    //敬称のチェックする正規表現のoptionを作成。HmJre.dllを利用。
    freedll;
    call HmJre ;
    //戻り値:1=HmJreを利用してmatch判定ができる場合。0=利用できない場合。
    ##reg_flag = ##return ;
    freedll;
    call HidemaruMail ;
    //利用可能。
    if( ##reg_flag == 1 ) {
        writeinistr $$ini, $$Section, "reg_keisyou", $$reg_keisyou ;
    }
    //利用不可能。
    else{
        $$reg_keisyou = "" ;
        writeinistr $$ini, $$Section, "reg_keisyou", 0 ;
    }

    //Toの処理
    //サブルーチンget_to_listで取得した文字列が存在する場合
    if($$To_inf != ""){
        //グローバル変数$list(配列),
        //グローバル変数$list_keisyou(配列),
        //グローバル変数$list_part(配列)に代入する。
        call Make_name $$ini,$$Section,$$To_inf ;
        ##cnt = ##return ;
    }
    else {
        ##cnt = 0 ;
    }

    if(##cnt != 0){
            //Header To,Ccの名前情報を削除するOption
        if( (##del_to_name == 1) ||
            //新規作成時、To,Ccの名前情報を削除するOption
            ((##MailType == 0 ) && (##del_newmail_to_name == 1))){
            call del_to_name $$To_inf,"To" ;
        }
        else if(##chg_to_name){
            //区切り文字列を取得
            $$divider = getinistr($$ini,$$Section,"divider");
            if($$divider == "") $$divider = " " ;
            //Header Toの名前情報を変更する。
            call chg_to_name $$To_inf,"To",##add_to_keisyou ,##div_name_head
er,$$reg_keisyou,$$divider ;
        }
        else if(##add_to_keisyou){
            //Header Ccの名前情報に敬称を付加する。
            call add_to_keisyou $$To_inf,"To" ,$$reg_keisyou;
        }

        if(##cnt != 0){
            //第四引数: 数値型,ccを実施するモードフラグ=0
            call Make_str $$ini,$$Section,##cnt ,0,##div_name;
            $$to_name = $$return ;
        }
    }

    //Ccの処理
    if( (##cc_mode == 1) ||
        (##del_to_name == 1) ||
        (##del_newmail_to_name == 1) ||
        (##chg_cc_name == 1) ||
        (##add_cc_keisyou == 1) ){
        //Ccの情報を取得する。
            //サブルーチン get_to_list:
            //機能:引数で指定したヘッダ情報を取得する。
            //第一引数: 文字列型,ヘッダー種類(To,Cc,Bccなど)
            //戻り値:   文字列型,引数で指定したヘッダ情報(複数の場合は、
            //"," + 改行が途中に入る
        call get_to_list "Cc" ;
        $$Cc_inf = $$return ;

        //サブルーチンget_to_listで取得した文字列が存在する場合
        if($$Cc_inf != ""){
            call Make_name $$ini,$$Section,$$Cc_inf ;
            ##cnt = ##return ;
        }
        else {
            ##cnt = 0 ;
        }

        if(##cnt != 0){
                //Header To,Ccの名前情報を削除するOption
            if( (##del_to_name == 1) ||
                //新規作成時、To,Ccの名前情報を削除するOption
                ((##MailType == 0 ) && (##del_newmail_to_name == 1))){
                call del_to_name $$Cc_inf,"Cc" ;
            }
            else if(##chg_cc_name){
                //Header Ccの名前情報を変更する。
                call chg_to_name $$Cc_inf,"Cc",##add_cc_keisyou ,##div_name_
header,$$reg_keisyou,$$divider ;
            }
            else if(##add_cc_keisyou){
                //Header Ccの名前情報に敬称を付加する。
                call add_to_keisyou $$Cc_inf,"Cc" ,$$reg_keisyou ;
            }

            if(##cc_mode == 1){
                //第四引数: 数値型,ccを実施するモードフラグ=1
                call Make_str $$ini,$$Section,##cnt ,##cc_mode,##div_name;
                $$cc_name = $$return ;
            }
        }
    }
    if(##cc_char_disable == 1){
        writeinistr $$ini, $$Section, "cc_char_disable", 0 ;
    }
    //INIファイルにデータを書きこむ文です。
    //writeinistr INIファイル名, セクション名, キー名, 文字
    //writeinistr "HIDEMARU.INI", "Option", "RefMark", ">> ";

    //挿入位置に移動
    if(##pos == 0){
        moveto 0,0 ;    //本文の先頭に移動
    }
    else if(##pos == 1){
        moveto 0,-1 ;   //Headerの最終行に移動
        golineend2 ;    //論理行末に移動
        replacedown $$home_c , "" , casesense;
        if(!result){
            //ホームポジションの移動に失敗したとき、本文先頭に移動
            moveto 0,0 ;
        }
    }
    else{   //##pos == 2のとき
        if(##cur_move == 1){
            moveto 0,-1;    //Headerの最終行に移動
            golineend2 ;    //論理行末に移動
            searchdown $$cur_char,casesense ;
            call Res_check result , "cur char not found.\n" + $$cur_char + "
\n" + $info ;
        }
        else{
            if(y < 0){      //Headerの場合、カーソルを本文先頭に移動。
                moveto 0,0 ;
            }
        }
    }

    //To情報の文字列挿入skip無効時 and To情報が存在するとき、文字列挿入を実施。
    if((##to_skip_mode == 0) && ($$to_name != "")){
        ##x = x ;##y = y ;
        insert $$to_name ;
        $$ret = "\n" ;
        if( (##cnv_filter == 1) &&
            (dllfunc("HidemaruMailVersion") > 454)){
            beginsel ;
            moveto ##x,##y ;
            execmacro currentmacrodirectory + "\\HMML_INS_NAME_FILTER.MAC" ;
            moveto selendx,selendy;
            escape ;
        }
    }
    //To情報の文字列情報挿入をskip
    else{
        $$ret = "" ;
    }

    //Cc情報の文字列挿入
    if  ((##cc_mode == 1) &&    //ccモード有効時 and
         ($$cc_name != "")){    //cc_nameに情報があるとき
        ##x = x ;##y = y ;
        insert $$ret + $$cc_name ;
        if( (##cnv_filter == 1) &&
            (dllfunc("HidemaruMailVersion") > 454)){
            beginsel ;
            moveto ##x,##y ;
            execmacro currentmacrodirectory + "\\HMML_INS_NAME_FILTER.MAC" ;
            moveto selendx,selendy;
            escape ;
        }
    }

    //カーソル移動用のキャラクタを挿入済みのときの処理
    //キャラクタを削除する。
    if(##cur_move == 1){
        moveto 0,-1;    //Headerの最終行に移動
        golineend2 ;    //論理行末に移動
        replacedown $$cur_char,"" ,casesense ;
        call Res_check result , "cur char not found.\n" + $$cur_char + "\n"
+ $info ;
    }
    //Subjectと、Toを取得し、空白の場合、その位置に移動する。
    $$To  = dllfuncstr( "CurrentHeader", "To" );
    if($$To == "") {
        moveto 0,-1;    //Headerの最終行に移動
        golineend2 ;    //論理行末に移動
        searchup "^To:",regular ;
        escape ;    //範囲選択を取り消す
        right ;
    }
    else{
        $$Sub = dllfuncstr( "CurrentHeader", "Subject" );
        if($$Sub == "") {
            moveto 0,-1;    //Headerの最終行に移動
            golineend2 ;    //論理行末に移動
            searchup "^Subject:",regular ;
            escape ;    //範囲選択を取り消す
            right ;
        }
    }

LEND:
    //敬称情報の正規表現文字列を削除
    if( existfile( hidemarudir + "\\DengakuDLL.dll") &&
        existfile( hidemarudir + "\\BREGEXP.dll")){
        writeinistr $$ini, $$Section, "reg_keisyou", 0 ;
    }
    setsearch $sbuf, #sopt; //開始時の検索文字,optionに戻す
    setreplace $rbuf ;
    //検索での表示 点滅表示/範囲選択の情報を戻す。
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    writeregnum "SelectFound",#reg_search;
    closereg;
    envchanged;

    enabledraw ;    //画面書き換えを許可します。
    freedll;
    endmacro;

HidemaruMail:   //秀丸メール起動チェック&DLLロード
//機能:TKInfo.dllをロードする
//秀シリーズサポートHPより 抜粋
    // DLL を Load する
    openreg "CURRENTUSER","Software\\Hidemaruo\\TuruKame\\Config";
    ##res = result ;
    closereg ;
    if( !##res ) {
        message "秀丸メールがインストールされてないです (^^;)\n"+$info;
        endmacro;
    }

    loaddll "TKInfo.dll";
    if( !result ) {
        message "DLLロードに失敗\n"+$info;
        endmacro;
    }
return ;

get_to_list:
//機能:引数で指定したヘッダ情報を取得する。
    //第一引数: 文字列型,ヘッダー種類(To,Cc,Bccなど)
    //戻り値:   文字列型,引数で指定したヘッダ情報(複数の場合は、"," + 改行が
途中に入る
    //引数渡し
    $$header = $$1;
    call Str_check $$header,"サブルーチンget_to_list 第一引数(文字列型)がお
かしいです\n" + $info ;

    $$to = "" ;//初期化

    ##Header_count = dllfunc("CountCurrentHeader", $$header);
    while( ##i < ##Header_count ) {
        $$wk = dllfuncstr("CurrentHeader2", $$header, ##i);
        ##wk = dllfunc("CountEmailList", $$wk);
        if(##wk != 0){
            if($$to != ""){
                $$to = $$to + ", \n        " + $$wk ;
            }
            else{
                $$to = $$wk ;
            }
        }
        ##i = ##i + 1;
    }
return $$to ;

Get_list:
//機能:引数で指定したiniファイルから情報を取得し、グローバル変数にsetする。
//引数渡し
    //第一引数: 文字列型,listを取得するiniファイルを指定
    $$ini = $$1;
    //第二引数: 文字列型,listを取得するiniファイルのセクション名を指定
    $$Section = $$2;
    //第三引数: 文字列型,listを取得するiniファイルのkeyを指定
    //keyは、"#" + 数字 + 指定文字列
    //を連結した文字列をgetinistrにて使用
    $$key = $$3;
    //戻り値
    //取得した配列の数
    //および、グローバル変数 $get_listに取得した配列を保存

    if($$ini == ""){
        message "サブルーチンGet_list:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    else if(! existfile( $$ini )) {
        //変数(配列) $listの内容を削除
        ##i = 0 ;
        while( $get_list[##i] != "" ) {
            //変数の値削除
            $get_list[##i] = "" ;
            ##i = ##i + 1;
        }
        return 0 ;
    }
    if($$Section ==""){
        message "サブルーチンGet_list:第二引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$key ==""){
        message "サブルーチンGet_list:第三引数エラー。\n" + $info ;
        goto LEND ;
    }


    //変数(配列) $get_listの内容を削除
    ##i = 0 ;
    while( $get_list[##i] != "" ) {
        //変数の値削除
        $get_list[##i] = "" ;
        ##i = ##i + 1;
    }

    //敬称登録最大数
    ##max_info = val(getinistr($$ini,$$Section,"max_info"));
    if(##max_info == 0){
        ##max_info = 20 ;
    }
    ##menu_su = 0 ;     //初期化
    while( ##menu_su < ##max_info )
    {
        //INIファイルから文字列を取りだします。
        //getinistr( s1, s2, s3 )
        //s1がiniファイル名、s2がセクション名、s3がキー名です。
        $$wk = getinistr( $$ini , $$Section , "#" + str( ##menu_su ) +"_"+ $
$key );
        if( $$wk == "" )
        {
            break;
        }
        $get_list[##menu_su] = $$wk ;
        ##menu_su = ##menu_su + 1;
    }

return ##menu_su ;

Set_default:
//処理:Iniファイルの各種設定情報がなければびデフォルトを設定する
    //第一引数: 文字列型,listを取得するiniファイルを指定
    $$ini = $$1;
    //第二引数: 文字列型,listを取得するiniファイルのセクション名を指定
    $$Section = $$2;
    //第二引数: 文字列型,listを取得するiniファイルのkeyを指定
    //keyは、"#" + 数字 + 指定文字列
    //を連結した文字列をgetinistrにて使用
    $$key = $$3;
    //戻り値
    //なし。

    if($$ini == ""){
        message "サブルーチンSet_default:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$Section ==""){
        message "サブルーチンSet_default:第二引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$key ==""){
        message "サブルーチンSet_default:第三引数エラー。\n" + $info ;
        goto LEND ;
    }

    //テンプレート名情報
    $$wk = getinistr( $$ini , $$Section , "#0_" + $$key );
    //iniファイルから$$Sectionの "#0_" + $keyの情報を取得し、情報が無ければ
    //デフォルト情報を設定する。
    if( $$wk == "" ){
        ##array_cnt = 0;
        $$array[##array_cnt] = "殿" ;       ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "様" ;       ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "御中" ;     ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "ちゃん" ;   ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "君" ;       ##array_cnt = ##array_cnt + 1;
        $$array[##array_cnt] = "くん" ;     ##array_cnt = ##array_cnt + 1;
        ##i = 0 ;
        while( ##i < ##array_cnt ) {
            writeinistr $$ini, $$Section,  "#" + str( ##i ) + "_"+ $$key, $$
array[##i] ;
            //INIファイルにデータを書きこむ文です。
            //writeinistr INIファイル名, セクション名, キー名, 文字
            //writeinistr "HIDEMARU.INI", "Option", "RefMark", ">> ";
            ##i = ##i + 1;
        }
        message currentmacrobasename + "\nマクロ" +
                "敬称list情報を下記場所\n" +
                "  " + $$ini + "\n" +
                "に作成しました。";
    }
return ;

Make_name :
//処理: 第一引数で指定された文字列から名前情報を作成する。
//      作成した情報は
//      グローバル変数$list(配列),
//      グローバル変数$list_keisyou(配列),
//      グローバル変数$list_part(配列)に代入する。
//引数渡し
    //第一引数: 文字列型,listを取得するiniファイルを指定
    $$ini = $$1 ;
    //第二引数: 文字列型,listを取得するiniファイルのセクション名を指定
    $$Section = $$2 ;
    //第三引数: 文字列型,チェックを行うHeader
    $$To_inf = $$3 ;

    if($$ini == ""){
        message "サブルーチンMake_name:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    else if(! existfile( $$ini )) {
        message "サブルーチンMake_name:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$Section ==""){
        message "サブルーチンMake_name:第二引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$To_inf ==""){
        message "サブルーチンMake_name:第三引数エラー。\n" + $info ;
        goto LEND ;
    }

//処理
    //コンマで区切られたメールアドレス文字列の中から、メールアドレスの個数
    //を返します。
    //返り値(数値型)
    //メールアドレスの個数です。
    ##To_count = dllfunc("CountEmailList", $$To_inf);

    //変数初期化
    ##n = ##To_count ;
    while( ##n > 0 ) {
        $list[##n] = "" ;
        $list_keisyou[##n] = "" ;
        $list_part[##n] = "" ;
        ##n = ##n - 1;
    }

    //keisyou_mode
    //0 = Defaultの敬称をつける
    //1 = アドレス帳の備考 を取得してつける
    //2 = アドレス帳の備考2を取得してつける
    //3 = アドレス帳の備考3を取得してつける
    //4 = アドレス帳の備考4を取得してつける
    //5 = アドレス帳の備考5を取得してつける
    //6 = アドレス帳の備考6を取得してつける
    //7 = アドレス帳の備考7を取得してつける
    //8 = アドレス帳の備考8を取得してつける
    //9 = ドメイン別で敬称をつける
    //備考,備考2,備考3,備考4-8から取得できなかった場合、Defaultを定義する。

    //敬称モードを取得
    ##keisyou_mode = getininum($$ini,$$Section,"keisyou_mode");
    //FindBookNote4〜FindBookNote8が対応された秀丸メールの版数を
    //Ver4.65以降 or Ver464Beta8以降と定義する。
    //4.65より前の版数の場合、##keisyou_modeを一時的に修正する。
    //メモ:FindBookNote4〜FindBookNote8は、秀丸メールVer4.64Beta8より対応。

    //部署名モードを取得
    ##part_mode = getininum($$ini,$$Section,"part_mode");

    ##ver = dllfunc("TuruKameVersion");
    if(##ver == 464){
        //HidemaruMail 4.64beta8 (WinNT,500)
        //HidemaruMail 4.63 (WinNT,500)
        //HidemaruMail 4.64beta8  ←XmailerにWindowsのバージョンがない場合
        $$wk = dllfuncstr("XMailer") ;
        call Str_check $$wk , "XMailer情報取得エラー\n" + $info ;
        //版数を取得するため" "の位置を認識
        ##n = strstr($$wk," ");
        //文字列"HidemaruMail "を削除。
        $$wk = midstr($$wk,##n + 1,strlen($$wk) -1) ;

        ##n = strstr($$wk," ");
        //Windowsのバージョンがあるときに、秀丸メールの版数だけ取得する。
        if(##n != -1) {
            $$wk = leftstr($$wk,##n) ;
        }
        //betaの版数があるかどうかチェックする。
        ##n = strstr($$wk,"beta") ;
        if(##n != -1){
            ##beta = val(midstr($$wk,##n + strlen("beta") ,strlen($$wk) - st
rlen("beta"))) ;
            $$wk = leftstr($$wk,##n) ;
        }
        ##ver = val(leftstr($$wk,1) + midstr($$wk,2,2)) ;
    }

    //秀丸メール Ver4.64より前の版数 or
    //Ver4.64 Beta1〜Beta7の版数のとき
    if( (##ver < 464) ||
        ((##ver == 464) &&
         ((##beta > 0) && (##beta < 8)))){
        ##limit_bikou = 3 ;
        ##limit_keisyou = 3 ;
    }
    else{
        //備考=8 + グループ,グループパス
        ##limit_bikou = 8 + 2;
        //domain modeを追加
        ##limit_keisyou = 8 + 1 ;
    }
    //INIファイルから文字列を取りだします。
    if((##part_mode < 0) || (##part_mode > ##limit_bikou)){
        ##part_mode = 0 ; //default
    }
    //INIファイルから文字列を取りだします。
    if((##keisyou_mode < 0) || (##keisyou_mode > ##limit_keisyou)){
        ##keisyou_mode = 0 ; //default
    }
    //9 = ドメイン別で敬称をつける
    if(##keisyou_mode == 9){
        $$account = dllfuncstr("ExecAtMain", "CurrentAccount") ;
        ##n = dllfunc("LoadAccountProp", $$account );
        $$wk = dllfuncstr("GetAccountProp","szEmail");

        ##n = strstr($$wk,"@");
        if(##n == -1){
            message "Email:Domain error.\n" + $$wk + "\n" + $info ;
            goto LEND;
        }
        $$self_domain = midstr( $$wk, ##n +1, strlen($$wk) - ##n - 1 ) ;
        //自分のドメインと異なる場合の敬称
        $$keisyou_otherdomain = getinistr($$ini,$$Section,"keisyou_other");
        //未定義のとき
        if($$keisyou_otherdomain == "") $$keisyou_otherdomain = "様" ;
    }

    //敬称情報が下記定義のとき、敬称を付加しない。
    $$word = getinistr($$ini,$$Section,"not_apply");
    if($$word == "") $$word = "not_apply" ;
    //敬称list情報数を取得
    ##i = 0 ;
    while(1){
        if($get_list[##i] == "") break ;
        ##i = ##i + 1;
    }
    //敬称list情報の数
    ##chk_cnt = ##i ;

    ##i = 0;
    while( ##i < ##To_count ) {
        //GetEmailList
        //コンマで区切られたメールアドレス文字列の中から、
        //パラメータで指定された部分のメールアドレス部分を1つ取り出します。
        //返り値(文字列型)
        //取り出したメールアドレス部分です。ここは、abc <abc@abc> のように、
        //名前 + メールアドレスとなっていることもあります。
        //この部分はコンマで区切られた内容をそのまま返す。
        $$inf = dllfuncstr("GetEmailList", $$To_inf, ##i);

        //mode
        //0 = アドレス帳から名前を取得
        //1 = ヘッダから名前を取得
            //名前の情報を取得するモードを取得
            ##mode = getininum($$ini,$$Section,"name");
            //INIファイルから文字列を取りだします。
            if((##mode < 0) || (##mode > 1)){
                ##mode = 0 ; //default
            }

        if(##mode == 0 ){
            //パラメータで渡された名前+Emailの中からEmail部分を取り出し、
            //そのEmailをアドレス帳から検索し、見つかった場合はその名前
            //を返し、見つからなかった場合はパラメータで渡された文字列中
            //の名前部分を返す。
            //パラメータにはEmailのみでも名前+Emailでもどちらでも受け付
            //けます。
            //アドレス帳に同じEmailが複数登録されている場合は一番先頭に
            //登録されているメンバーのみが対象となります。
            $$name = dllfuncstr( "FindBook2", $$inf);
        }
        else{   //mode == 1
            //SetNameOnly
            //パラメータで渡された「名前+Email」の形式の文字列から、名前部分の
            //みを取り出して返します。
            //返り値(文字列型)
            //取り出された名前部分の文字列です。名前部分が見つからない場合は
            //メールアドレスをそのまま返します。
            $$name  = dllfuncstr( "SetNameOnly", $$inf );

            //SetEmailOnly
            //パラメータで渡された「名前+Email」の形式の文字列から、
            //Email部分のみを取り出して返します。
            $$email = dllfuncstr( "SetEmailOnly", $$inf );

            //内容が同じ場合、名前の取得を失敗している。
            //アドレス帳から名前を取得する処理を実施
            if($$email == $$name){
                $$name = dllfuncstr( "FindBook2", $$inf);
            }
        }
        //パラメータで渡された文字列がもしダブルクォーテーション記号で囲まれ
ていた場合に、そのダブルクォーテーション記号(のセット)を除去します。
        //返り値(文字列型)
        //ダブルクォーテーション記号の除去された文字列を返します。ダブルク
ォーテーション記号で囲まれてなかった場合は元の文字列をそのまま返します。
        $$name = dllfuncstr("UnDoubleQuote", $$name );
        //左端の空白を削除する
        while(1){
            if(leftstr($$name,1) == " ") $$name = midstr($$name,1,strlen($$n
ame) -1);
            else break ;
        }
        //右端の空白を削除する
        while(1){
            if(rightstr($$name,1) == " ") $$name = leftstr($$name,strlen($$n
ame) -1);
            else break ;
        }

        //敬称定義
        //敬称Default取得
        $$keisyou_def = getinistr($$ini,$$Section,"keisyou_def");
        //INIファイルから文字列を取りだします。
        if($$keisyou_def == ""){
            $$keisyou_def = "殿" ;  //default
        }

        $$keisyou = "" ;

        //敬称情報を取得する
        if(##keisyou_mode == 0){
            $$keisyou = $$keisyou_def ;
        }
        else if((1 <= ##keisyou_mode) &&
                (##keisyou_mode <= 8)){
            call findbooknote $$inf,##keisyou_mode ;
            $$keisyou = $$return ;
        }
        //9 = ドメイン別で敬称をつける
        else if(##keisyou_mode == 9){
            $$email = dllfuncstr( "SetEmailOnly", $$inf );
            ##n = strstr($$email,"@");
            if(##n != -1){
                $$domain = midstr( $$email, ##n +1, strlen($$email) - ##n -
1 ) ;
                $$self_domain = "," + $$self_domain + "," ;
                //自分のドメイン情報をiniファイルから取得
                $$wk = getinistr($$ini,$$Section,"selfdomain");
                //空白を削除 trim
                call Trim $$wk ;
                $$wk = $$return ;
                //↑空白を削除 trim終了

                //ドメインチェックを実施
                if($$wk != ""){
                    $$self_domain = $$self_domain + $$wk + "," ;
                }
                ##n = strstr($$self_domain,"," + $$domain + ",");
                //異なるドメインの場合
                if(##n == -1){
                    $$keisyou = $$keisyou_otherdomain ;
                }
                //同じドメインの場合
                else{
                    $$keisyou = $$keisyou_def ;
                }
            }
            else{
                $$keisyou = $$keisyou_def ;
            }
        }
        else{
            $$keisyou = $$keisyou_def ;
        }
        //敬称がない場合Defaultを定義
        if($$keisyou ==""){
            $$keisyou = $$keisyou_def ;
        }

        //区切り文字列を取得
        $$divider = getinistr($$ini,$$Section,"divider");
        if($$divider == "") $$divider = " " ;
        //enable_group,disable_group情報を取得する先を
        //取得する。どの備考から取得するかを得る。
        ##engroup_mode = getininum($$ini,$$Section,"engroup_mode");
        if(##engroup_mode == 0 ){
            ##engroup_mode = 8 ;    //Default
        }
        //group_mode
        ##group_mode = getininum($$ini,$$Section,"group_mode");
        //0:enalbe_group指定があった場合、アドレス帳のグループ名を利用
        //1:disable_group指定が無い場合、アドレス帳のグループ名を利用
       
        //部署名処理
        if(##part_mode == 0){
            $$part = "" ;
        }
        else if((1 <= ##part_mode) &&
                (##part_mode <= 8)){
            call findbooknote $$inf,##part_mode ;
            $$part = $$return ;
        }
        else if(##part_mode == 9){
            $$part = "" ; //初期化
            //FindBook8関数(TkInfo.dll)
            //パラメータで渡された名前+Emailの中からEmail部分を取り出し、
            //そのEmailをアドレス帳から検索し、見つかった場合はその名前+Emai
lを返し、
            //見つからなかった場合はパラメータで渡された名前+Emailを返します。
            //パラメータにはEmailのみでも名前+Emailでもどちらでも受け付けます。
            //アドレス帳に同じEmailが複数登録されている場合は一番先頭に登録
されているメンバーのみが対象となります。
            //備考8の内容を返します。
            call findbooknote $$inf,##engroup_mode ;
            $$wk = $$return ;
            //":"を含む場合、文字列を分割する
            ##n = strstr($$wk,":");
            if(##n != -1){
                $$en = leftstr( $$wk, ##n ) ;
                $$wk = midstr( $$wk, ##n + 1, strlen($$wk) - ##n - 1) ;
            }
            else{
                $$en = $$wk  ;
            }
            //ToLower関数(TkInfo.dll)
            //ToLowerは小文字に変換します。
            $$en = dllfuncstr("ToLower",$$en) ;
            if($$en == "alias"){
                $$part = $$wk ;
            }
            else if(
                ($$en == "enable_group") ||
                ((##group_mode == 1) &&
                 ($$en != "disable_group"))){
                //FindBookGroup関数(TkInfo.dll)
                //アドレス帳に登録されているその人のグループ名の内容を返しま
す。
                //アドレス帳の直下の場合は"アドレス帳"という文字列を返します。
                $$part = dllfuncstr( "FindBookGroup", $$inf);
                //左端が"\"の場合、削除する。
                if(leftstr( $$part, 1 ) == "\\"){
                    $$part = midstr( $$part, 1, strlen($$part) -1 ) ;
                }
                //"\"を$$dividerに置換する
                if($$part != "")
                    call Gsub $$part,"\\\\" , $$divider ;
                $$part = $$return ;
            }
            else $$part = "" ;
        }
        else if(##part_mode == 10){
            call findbooknote $$inf,##engroup_mode ;
            $$wk = $$return ;
            //":"を含む場合、文字列を分割する
            ##n = strstr($$wk,":");
            if(##n != -1){
                $$en = leftstr( $$wk, ##n ) ;
                $$wk = midstr( $$wk, ##n + 1, strlen($$wk) - ##n - 1) ;
            }
            //ToLower関数(TkInfo.dll)
            //ToLowerは小文字に変換します。
            $$en = dllfuncstr("ToLower",$$en) ;
            if($$en == "alias"){
                $$part = $$wk ;
            }
            else if(
                ($$en == "enable_group") ||
                ((##group_mode == 1) &&
                 ($$en != "disable_group"))){
                //FindBookGroupPath関数(TkInfo.dll)
                //アドレス帳に登録されているグループのパス名、つまり、グルー
プの
                //階層全体を返します。各グループ名の前には「\」の記号が付き
ます。
                //先頭のグループ名は、"アドレス帳"か、またはLDAPサーバーの名
前となります。
                //たとえば、"ABC"というグループ配下の"XYZ"というグループであ
る場合、
                //\アドレス帳\ABC\XYZ
                //という文字列を返します。
                $$part = dllfuncstr( "FindBookGroupPath", $$inf);
                //左端が"\"の場合、削除する。
                if(leftstr( $$part, 1 ) == "\\"){
                    $$part = midstr( $$part, 1, strlen($$part) -1 ) ;
                }
                //"\"を$$dividerに置換する
                if($$part != "")
                    call Gsub $$part,"\\\\" , $$divider ;
                $$part = $$return ;
                //先頭ノグループが"アドレス帳"の場合削除する
                if(leftstr($$part,strlen("アドレス帳")) == "アドレス帳"){
                    $$part =
                        midstr($$part,strlen("アドレス帳") + strlen($$divider),
                                strlen($$part) - strlen("アドレス帳") - strl
en($$divider)) ;
                }
            }
            else $$part = "" ;
        }

        //取得敬称情報が$$word="not_apply"でない場合
        if($$keisyou != $$word){
            //敬称のチェックを実施
            ##j = 0 ;
            ##res = 0 ;
            while( ##j < ##chk_cnt ) {
                //登録済み敬称の場合
                if($get_list[##j] == $$keisyou){
                    ##res = 1 ;
                    break ;
                }
                ##j = ##j + 1;
            }
            //$get_listに定義していない敬称の場合、Defaultにする
            if(##res ==0){
                $$keisyou = $$keisyou_def ;
            }
        }

        $list[##i] = $$name ;
        $list_keisyou[##i] = $$keisyou ;
        $list_part[##i] = $$part ;

        ##i = ##i + 1;
    }
return ##To_count ;

Make_str:
//処理:挿入文字列を作成する。グローバル変数$list,$list_keisyou,
//$list_part(共に配列)を使用する。
//引数渡し
    //第一引数: 文字列型,listを取得するiniファイルを指定
    $$ini = $$1;
    //第二引数: 文字列型,listを取得するiniファイルのセクション名を指定
    $$Section = $$2;
    //第三引数: 数値型,処理アドレス個数
    ##cnt = ##3;
    //第四引数: 数値型,ccを実施するモードフラグ
    ##cc_mode = ##4;
    //第五引数: 数値型,取得した名称に半角空白がある場合、その前の部分のみ取
得するoption
    ##div_name = ##5;
    if($$ini == ""){
        message "サブルーチンMake_str:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    else if(! existfile( $$ini )) {
        message "サブルーチンMake_str:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$Section ==""){
        message "サブルーチンMake_str:第二引数エラー。\n" + $info ;
        goto LEND ;
    }
    if(##cnt == 0){
        message "サブルーチンMake_str 第三引数Error\n" + $info ;
    }

    //敬称情報が下記定義のとき、敬称を付加しない。
    $$word = getinistr($$ini,$$Section,"not_apply");
    if($$word == "") $$word = "not_apply" ;


    //複数の名前の場合間に改行を挿入するモード
    //ins_ret_mode
    //0 = なにもしない
    //1= 複数の名前の間に改行を挿入する

    //ins_ret_mode取得
    $$wk = getinistr($$ini,$$Section,"ins_ret_mode");
    //INIファイルから文字列を取りだします。
    if($$wk == ""){
        ##ins_ret_mode = 1 ;    //default
    }
    else ##ins_ret_mode = val($$wk) ;

    if(##ins_ret_mode == 0){
        $$return_char = "" ;
    }
    else{
        $$return_char = "\n" ;
    }

    //to_char
    //toで取得した名前の前に挿入するキャラクタ
    //キャラクタDefault取得
    $$to_char_def = getinistr($$ini,$$Section,"to_char");
    //INIファイルから文字列を取りだします。
    if($$to_char_def == ""){
        $$to_char_def = "" ; //default
    }
    //toで取得した名前の前に挿入するキャラクタを抑制する
    if(getininum($$ini,$$Section,"to_char_enable") != 1){
        $$to_char_def = "" ;
    }

    //cc_char
    //ccで取得した名前の前に挿入するキャラクタ
    //キャラクタDefault取得
    $$cc_char_def = getinistr($$ini,$$Section,"cc_char");
    //INIファイルから文字列を取りだします。
    if($$cc_char_def == ""){
        $$cc_char_def = "CC) " ; //default
    }
    //ccで取得した名前の前に挿入するキャラクタを抑制する
    if(getinistr($$ini,$$Section,"cc_char_disable") == "1"){
        $$cc_char_def = "" ;
    }

    ##i = 0;
    //to,cc のとき、前につける文字を定義する
    //$$return_charが""のときは付加しない
    if($$return_char != ""){
        if(##cc_mode == 1){
            $$char = $$cc_char_def ;
        }
        else{
            $$char = $$to_char_def ;
        }
    }
    else{
        $$char = "" ;
    }

    //複数の敬称付き宛名挿入をする時に1行当たりに挿入する
    //数を指定する。
    ##namecnt_p_line = getininum($$ini,$$Section,"namecnt_p_line") ;
    if(##namecnt_p_line == 0) ##namecnt_p_line = 1 ;

    while( ##i < ##cnt ) {
        //##div_name optionが1のとき、空白より前だけを取得
        $$s = $list[##i] ;
        if(($list[##i] != "") && (##div_name == 1)){
            //$list[##i]に半角空白" " があるか探す
            ##n = strstr($list[##i]," ");
            //str1からstr2を検索し,見つかった場合はその位置を返します。
            //先頭が0です。見つからなかった場合は-1を返します。 返す値は数値
型です。
            if(##n != -1){
                $$s = leftstr( $list[##i], ##n ) ;
            }
        }

        //敬称情報の正規表現文字列を取得
        $$reg_keisyou = getinistr($$ini,$$Section,"reg_keisyou");
        // 敬称情報が$$wordで定義した文字列"not_apply"のとき)
        if($list_keisyou[##i] == $$word){
            $$wk = "" ;
        }
        //正規表現情報を取得した時、
        else if($$reg_keisyou != ""){
            freedll;
            //hmjre.dllの機能を利用
            call HmJre ;
            //名前情報に定義された敬称を含むか含まないかを確認する。
            //第1パラメータ(文字列型):検索したい正規表現文字列を指定します。
            //第2パラメータ(文字列型):検索対象の文字列を指定します。
            //第3パラメータ(数値型):検索を開始する桁位置を指定します。
            //  先頭から検索したい場合は0を指定します。
            //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返します。
            //ヒットしなかった場合は-1を返します。
            //正規表現の解釈その他でエラーが起きた場合は-2を返します。
            ##n = dllfunc( "FindRegular",
                $$reg_keisyou,
                $$s, 0 );
            //敬称文字列が一致。名前情報に登録された敬称が含まれる。
            if (##n >= 0) {
                $$wk = "" ;
            }
            //名前情報に登録された敬称が含まれない。
            else{
                $$wk = $list_keisyou[##i] ;
            }
            freedll;
            call HidemaruMail ;
        }
        //正規表現情報を取得しなかった時 and
        //名前情報の末尾が敬称情報と一致した時
        else if(rightstr($$s,strlen($list_keisyou[##i])) == $list_keisyou[##
i]){
            $$wk = "" ;
        }
        else $$wk = $list_keisyou[##i] ;

        //区切り文字列を取得
        $$divider = getinistr($$ini,$$Section,"divider");
        if($$divider == "") $$divider = " " ;
        //部署名情報の処理
        if($list_part[##i] != ""){
            $$part = $list_part[##i] + $$divider ;
        }
        else{
            $$part = "" ;
        }

        //改行キャラクタ作成処理
        if(##ins_ret_mode == 1){
            if( (##i % ##namecnt_p_line) == 0){
                $$return = $$return_char ;
            }
            else{
                $$return = "" ;
            }
        }
        else{
            $$return = $$return_char ;
        }

        //文字列が存在するとき。
        if($$str != ""){
            $$str = $$str +
                //char_def=複数の名前の場合間に挿入するキャラクタ。
                getinistr($$ini,$$Section,"char_def") +
                //複数の名前の間の改行。
                //ins_ret_mode=0:改行なし
                //ins_ret_mode=1:複数の名前の間に改行を挿入する
                $$return +
                //ccで取得した名前の前に挿入するキャラクタ
                $$char +
                //部署名
                $$part +
                //名前情報
                $$s +
                //敬称
                $$wk ;
        }
        //文字列が無い最初のとき。
        else{
            if(##cc_mode == 1) $$char_1st = $$cc_char_def ;
            else $$char_1st = $$to_char_def ;
            $$str =
                //to,ccで取得した名前の前に挿入するキャラクタ
                $$char_1st +
                //部署名
                $$part +
                //名前情報
                $$s +
                //敬称
                $$wk ;
        }
        ##i = ##i + 1;
    }
return $$str ;

chg_to_name:
//処理:第一引数で指定された文字列の名前情報を変更する。
//      作成した情報は第二引数のheaderにsetする。
//引数渡し
    //第一引数: 文字列型,処理を実施する文字列
    $$To_inf = $$1;
    //第ニ引数: 文字列型,処理後の情報をsetするheader
    $$header = $$2;
    //第三引数: 数値型,headerに敬称を付加するflag
    ##add_to_keisyou = ##3;
    //第四引数: 数値型,Headerの名前の半角空白以降を削除するflag
    ##div_name_header = ##4 ;
    //第五引数: 文字列型,登録している敬称すべてを正規表現で指定
    $$reg_keisyou = $$5 ;
    //第六引数: 文字列型,補足情報の後に挿入する文字列
    $$divider = $$6 ;
    if($$divider == "") $$divider = " " ;

    if($$To_inf == ""){
        message "サブルーチンchg_to_name 第一引数Error\n" + $info ;
    }
    if($$header == ""){
        message "サブルーチンchg_to_name 第ニ引数Error\n" + $info ;
    }

    //区切り文字列を取得
    $$divider = getinistr($$ini,$$Section,"divider");
    if($$divider == "") $$divider = " " ;
    //e-mailの個数を取得
    ##cnt_email = dllfunc("CountEmailList", $$To_inf);
    $$str = "" ;
    ##i = 0 ;
    //E-mail個数処理を繰り返す
    while(##i < ##cnt_email){
        //取得したHeaderから、指定した引数のE-mail情報を取得
        $$wk = dllfuncstr("GetEmailList", $$To_inf, ##i);
        //E-mailのみ取得する
        $$email = dllfuncstr( "SetEmailOnly", $$wk );
        //サブルーチンMake_nameで作成した名前を$$nameに代入
        $$name = $list[##i] ;
        //サブルーチンMake_nameで作成した補足情報を$$partに代入
        if($list_part[##i] != ""){
            $$part = $list_part[##i] + $$divider ;
        }
        else{
            $$part = "" ;
        }

        //名前とEmailが同じときは、名前情報を付けないようにする
        if($$name == $$email) {
            $$name = "" ;
        }
        $$s = $$part + $$name ;
        //名前 or 補足情報があるとき
        if(($$s != "") || ($$part != "")){
            //名前があるとき、e-mailに"<" ,">"をつける。
            $$email = "<" + $$email + ">" ;
            //敬称がすでに名前についている場合、付加しない
            //正規表現で示した敬称情報を利用してチェックする。
            if($$reg_keisyou != ""){
                freedll;
                //hmjre.dllの機能を利用
                call HmJre ;
                //第1パラメータ(文字列型):検索したい正規表現文字列を指定しま
す。
                //第2パラメータ(文字列型):検索対象の文字列を指定します。
                //第3パラメータ(数値型):検索を開始する桁位置を指定します。
                //  先頭から検索したい場合は0を指定します。
                //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返します。
                //ヒットしなかった場合は-1を返します。
                //正規表現の解釈その他でエラーが起きた場合は-2を返します。
                ##n = dllfunc( "FindRegular",
                    $$reg_keisyou,
                    $$s, 0 );
                //敬称文字列が一致
                if (##n >= 0) {
                    $$wk = "" ;
                }
                else{
                    $$wk = $list_keisyou[##i] ;
                }
                freedll;
                call HidemaruMail ;
            }
            //通常の文字列一致処理でチェックする。(登録済み敬称が存在する場合)
            else if(rightstr($$s,strlen($list_keisyou[##i])) == $list_keisyo
u[##i]){
                $$wk = "" ;
            }
            //登録済み敬称が存在しない場合
            else $$wk = $list_keisyou[##i] ;

            //ダブルクォーテーションで括られているかどうかチェックする。
            if( (leftstr($$s,1) == "\"") &&
                (rightstr($$s,1) == "\"")){
                ##double = 1 ;
                $$s = dllfuncstr("UnDoubleQuote", $$s ) ;
            }
            else ##double = 0 ;

            //##div_name_header optionが1のとき、空白より前だけを取得
            if(##div_name_header == 1){
                //$list[##i]に半角空白" " があるか探す
                ##n = strstr($$s," ");
                //空白を含むとき
                if(##n != -1){
                    $$s = leftstr( $$s, ##n ) ;
                }
            }
            if(##add_to_keisyou){
                //敬称がすでに名前についている場合、付加しない
                //正規表現で示した敬称情報を利用してチェックする。
                if($$reg_keisyou != ""){
                    freedll;
                    //hmjre.dllの機能を利用
                    call HmJre ;
                    //第1パラメータ(文字列型):検索したい正規表現文字列を指定
します。
                    //第2パラメータ(文字列型):検索対象の文字列を指定します。
                    //第3パラメータ(数値型):検索を開始する桁位置を指定します。
                    //  先頭から検索したい場合は0を指定します。
                    //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返
します。
                    //ヒットしなかった場合は-1を返します。
                    //正規表現の解釈その他でエラーが起きた場合は-2を返します。
                    ##n = dllfunc( "FindRegular",
                        $$reg_keisyou,
                        $$s, 0 );
                    //敬称文字列が一致
                    if (##n >= 0) {
                        $$wk = "" ;
                    }
                    else{
                        $$wk = $list_keisyou[##i] ;
                    }
                    freedll;
                    call HidemaruMail ;
                }
                //通常の文字列一致処理でチェックする。(登録済み敬称が存在す
る場合)
                else if(rightstr($$s,strlen($list_keisyou[##i])) == $list_ke
isyou[##i]){
                    $$wk = "" ;
                }
                //登録済み敬称が存在しない場合
                else $$wk = $list_keisyou[##i] ;

                //ダブルクォーテーションで括られている場合
                if( ##double == 1){
                    $$s = "\"" + $$s + $$wk + "\"" ;
                }
                else $$s = $$s + $$wk ;
            }

            call Add_double $$s ;
            $$s = $$return;
        }
        $$wk = $$s + " " + $$email ;
        //挿入する文字列を作成
        if($$str == ""){
            $$str = $$wk ;
        }
        else{
            $$str = $$str + ", " + $$wk ;
        }
        ##i = ##i + 1 ;
    }

    //現在のHeaderを削除する。
    ##Header_count = dllfunc("CountCurrentHeader", $$header);
    ##i = 0 ;
    while( ##i < ##Header_count ) {
        ##n = dllfunc( "DeleteHeader2", $$header, ##i );
        ##i = ##i + 1;
    }
    //作成された文字列をHeaderにsetする
    if($$str != ""){
        ##n = dllfunc( "SetHeader", $$header, $$str );
    }
return ;
del_to_name:
//処理:第一引数で指定された文字列に禁止文字がないか確認。あった場合全角に置換。
//引数渡し
    //第一引数: 文字列型,チェックを行う文字列
    $$To_inf = $$1;
    $$header = $$2;
    if($$To_inf == ""){
        message "サブルーチンdel_to_name 第一引数Error\n" + $info ;
    }
    if($$header == ""){
        message "サブルーチンdel_to_name 第ニ引数Error\n" + $info ;
    }

    //e-mailの個数を取得
    ##cnt_email = dllfunc("CountEmailList", $$To_inf);
    $$str = "" ;
    ##i = 0 ;
    //E-mail個数処理を繰り返す
    while(##i < ##cnt_email){
        //取得したHeaderから、指定した引数のE-mail情報を取得
        $$wk = dllfuncstr("GetEmailList", $$To_inf, ##i);
        //E-mailのみ取得する
        $$wk = dllfuncstr( "SetEmailOnly", $$wk );
        //挿入する文字列を作成
        if($$str == ""){
            $$str = $$wk ;
        }
        else{
            $$str = $$str + ", " + $$wk ;
        }
        ##i = ##i + 1 ;
    }

    //現在のHeaderを削除する。
    ##Header_count = dllfunc("CountCurrentHeader", $$header);
    ##i = 0 ;
    while( ##i < ##Header_count ) {
        ##n = dllfunc( "DeleteHeader2", $$header, ##i );
        ##i = ##i + 1;
    }
    //作成された文字列をHeaderにsetする
    if($$str != ""){
        ##n = dllfunc( "SetHeader", $$header, $$str );
    }
return ;


Add_double:
//処理:第一引数で指定された文字列に対象文字がある場合、ダブルクォーテーショ
ンで括る。
//引数渡し
    //第一引数: 文字列型,チェックを行う文字列
    $$str = $$1;
    if($$str == ""){
        message "サブルーチンAdd_double 第一引数Error\n" + $info ;
        goto LEND ;
    }
    $$Err_char = "<>[]()" ;
    ##loop = strlen($$Err_char) ;

    //ダブルクォーテーションで括られていない場合
    if( (leftstr($$str,1) != "\"") &&
        (rightstr($$str,1) != "\"")){
        ##i = 0 ;
        while(##i < ##loop){
            $$char = midstr($$Err_char,##i,1) ;
            while(strstr($$str,$$char) != -1){
                $$str = "\"" + $$str + "\"" ;
                ##flag = 1 ;
                break;
            }
            if(##flag) break;
            ##i = ##i + 1 ;
        }
    }

return $$str ;

add_to_keisyou:
//処理:第一引数で指定された文字列の名前情報を変更する。
//      作成した情報は第二引数のheaderにsetする。
//引数渡し
    //第一引数: 文字列型,処理を実施する文字列
    $$To_inf = $$1;
    //第ニ引数: 文字列型,処理後の情報をsetするheader
    $$header = $$2;
    //第三引数: 文字列型,登録している敬称すべてを正規表現で指定
    $$reg_keisyou = $$3 ;
    if($$To_inf == ""){
        message "サブルーチンadd_to_keisyou 第一引数Error\n" + $info ;
    }
    if($$header == ""){
        message "サブルーチンadd_to_keisyou 第ニ引数Error\n" + $info ;
    }

    //e-mailの個数を取得
    ##cnt_email = dllfunc("CountEmailList", $$To_inf);
    $$str = "" ;
    ##i = 0 ;
    //E-mail個数処理を繰り返す
    while(##i < ##cnt_email){
        //取得したHeaderから、指定した引数のE-mail情報を取得
        $$wk = dllfuncstr("GetEmailList", $$To_inf, ##i);
        //E-mailのみ取得する
        $$email = dllfuncstr( "SetEmailOnly", $$wk );
        //パラメータで渡された「名前+Email」の形式の文字列から、名前部分のみ
を取り出して返します。
        //名前情報は、Headerの名前を使用する。
        $$name = dllfuncstr( "SetNameOnly", $$wk );

        //名前とEmailが同じときは、名前情報を付けないようにする
        if($$name == $$email) {
            $$name = "" ;
        }
        if($$name != "") {
            //名前があるとき、e-mailに"<" ,">"をつける。
            $$email = "<" + $$email + ">" ;
            //敬称がすでに名前についている場合、付加しない
            //正規表現で示した敬称情報を利用してチェックする。
            if($$reg_keisyou != ""){
                freedll;
                //hmjre.dllの機能を利用
                call HmJre ;
                //第1パラメータ(文字列型):検索したい正規表現文字列を指定しま
す。
                //第2パラメータ(文字列型):検索対象の文字列を指定します。
                //第3パラメータ(数値型):検索を開始する桁位置を指定します。
                //  先頭から検索したい場合は0を指定します。
                //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返します。
                //ヒットしなかった場合は-1を返します。
                //正規表現の解釈その他でエラーが起きた場合は-2を返します。
                ##n = dllfunc( "FindRegular",
                    $$reg_keisyou,
                    $$name, 0 );
                //敬称文字列が一致
                if (##n >= 0) {
                    $$wk = "" ;
                }
                else{
                    $$wk = $list_keisyou[##i] ;
                }
                freedll;
                call HidemaruMail ;
            }
            //通常の文字列一致処理でチェックする。(登録済み敬称が存在する場合)
            else if(rightstr($$name,strlen($list_keisyou[##i])) == $list_kei
syou[##i]){
                $$wk = "" ;
            }
            //登録済み敬称が存在しない場合
            else $$wk = $list_keisyou[##i] ;

            //ダブルクォーテーションで括られているかどうかチェックする。
            if( (leftstr($$name,1) == "\"") &&
                (rightstr($$name,1) == "\"")){
                $$name = "\"" + dllfuncstr("UnDoubleQuote", $$name ) + $$wk
+ "\"" ;
            }
            else {
                $$name = $$name + $$wk ;
            }

            call Add_double $$name ;
            $$name = $$return;
        }
        $$wk = $$name + " " + $$email ;
        //挿入する文字列を作成
        if($$str == ""){
            $$str = $$wk ;
        }
        else{
            $$str = $$str + ", " + $$wk ;
        }
        ##i = ##i + 1 ;
    }

    //現在のHeaderを削除する。
    ##Header_count = dllfunc("CountCurrentHeader", $$header);
    ##i = 0 ;
    while( ##i < ##Header_count ) {
        ##n = dllfunc( "DeleteHeader2", $$header, ##i );
        ##i = ##i + 1;
    }
    //作成された文字列をHeaderにsetする
    if($$str != ""){
        ##n = dllfunc( "SetHeader", $$header, $$str );
    }
return ;

Res_check:
//処理:処理の判定&メッセージ表示
    //引数渡し
    ##num = ##1;    $$mes = $$2 ;
    if(##num != 1){
        message $$mes ;
        goto LEND;
    }
return ;

Str_check:
//処理:文字列の判定&メッセージ表示
    //引数渡し
    $$str = $$1;    $$mes = $$2 ;
    if($$str == ""){
        message $$mes ;
        goto LEND;
    }
return ;

Trim:
//機能: 前後の空白を削除する
    //第一引数: 文字列型,処理対象文字列
    //戻り値:   文字列型,処理後文字列
//引数渡し
    $$str = $$1;
    //空白を削除 trim
    //右の空白を削除
    while(1){
        if(rightstr($$str,1) == " ") $$str = leftstr($$str,strlen($$str) -1);
        else break ;
    }
    //左の空白を削除
    while(1){
        if(leftstr($$str,1) == " ") $$str = rightstr($$str,strlen($$str) -1);
        else break ;
    }
return $$str ;

Trim_L:
//機能: 前の空白を削除する
    //第一引数: 文字列型,処理対象文字列
    //戻り値:   文字列型,処理後文字列
//引数渡し
    $$str = $$1;
    while(1){
        if(leftstr($$str,1) == " ") $$str = rightstr($$str,strlen($$str) -1);
        else break ;
    }

return $$str ;
Trim_R:
//機能: 後の空白を削除する
    //第一引数: 文字列型,処理対象文字列
    //戻り値:   文字列型,処理後文字列
//引数渡し
    $$str = $$1;
    //右の空白を削除
    while(1){
        if(rightstr($$str,1) == " ") $$str = leftstr($$str,strlen($$str) -1);
        else break ;
    }
return $$str ;

HmJre:
    //  HmJre.DLLのロード
    loaddll "HmJre.dll" ;
    if(!result ){
        message "HmJre.dllのロードに失敗しました。";
        goto LEND;
    }
    //HmJre.dllの版数を取得。
    ##ver = (((dllfunc("JreGetVersion") & 0xFF00) / 256) * 100) +
            ((dllfunc("JreGetVersion") & 0xF0) / 16 * 10) +
            (dllfunc("JreGetVersion") & 0xF) ;
    if (##ver < 150) {
        $$mes = "HmJre.DLLの版数が Ver1.50より古いです\n" +
        "現在のHmJre.DLL版数=" +
        leftstr(str(##ver),1) + "." +
        midstr(str(##ver),1,1) + "." +
        midstr(str(##ver),2,1) + "\n" +
        $info ;
        ##ret = 0 ;
    }
    else
        ##ret = 1 ;

return ##ret ;

reg_escape:
//機能: 正規表現の特定文字をエスケープ処理を実施する。
    //第一引数: 文字列型,処理対象文字列
    //第二引数: 数値型,田楽Dllを使用するかしないかを指定する。1=使用する。0=
使用しない。
    //戻り値:   文字列型,処理後文字列
    $$s = $$1 ;
    ##dengaku = ##2 ;
    $$str[##i] = "\\" ; ##i = ##i + 1 ;
    $$str[##i] = "." ; ##i = ##i + 1 ;
    $$str[##i] = "*" ; ##i = ##i + 1 ;
    $$str[##i] = "+" ; ##i = ##i + 1 ;
    $$str[##i] = "?" ; ##i = ##i + 1 ;
    $$str[##i] = "^" ; ##i = ##i + 1 ;
    $$str[##i] = "$" ; ##i = ##i + 1 ;
    $$str[##i] = "[" ; ##i = ##i + 1 ;
    $$str[##i] = "]" ; ##i = ##i + 1 ;
    $$str[##i] = "(" ; ##i = ##i + 1 ;
    $$str[##i] = ")" ; ##i = ##i + 1 ;
    $$str[##i] = "|" ; ##i = ##i + 1 ;
    ##cnt = 0;
    while( ##cnt < ##i ) {
        if(##dengaku == 1){
            //loaddllされている場合、ロードされているDLLのファイル名を返しま
す。
            //田楽dllの機能を利用
            //GSUB
            //使い方:$s = dllfuncstr("GSUB",$s1,$s2,$s3,#n4);
            //説明:文字列中の部分文字列を別の文字列に置換します。
            //引数:
            //  $s1:置換対象文字列
            //  $s2:検索文字列
            //  $s3:置換文字列
            //  #n4:最初から何個の文字列を置換するか
            //  (-1 を指定すると見つかったものを全て置換します)
            //返り値:置換された結果の文字列が返ります。
            $$s = dllfuncstr("GSUB",$$s,$$str[##cnt],"\\" + $$str[##cnt],-1);
        }
        else{
            $$wk = $$s ;
            $$s = "" ;
            while(1){
                ##n = strstr($$wk,$$str[##cnt]);
                if(##n != -1){
                    $$s = $$s + leftstr($$wk,##n) + "\\" + $$str[##cnt] ;
                    $$wk = midstr($$wk,##n+1,strlen($$wk) - ##n -1) ;
                }
                else {
                    $$s = $$s + $$wk ;
                    break ;
                }
            }
        }
        ##cnt = ##cnt + 1;
    }
return $$s ;

Dengaku:
    //  田楽DLLのロード
    if(existfile(hidemarudir+"\\DengakuDLL.dll"))loaddll hidemarudir+"\\Deng
akuDLL.dll";
    else {
        $$mes = "田楽DLLが見つかりませんでした。\n" +
                "田楽DLLを秀丸エディタインストールディレクトリにおいてくださ
い。\n" +
                "  秀丸エディタインストールディレクトリ:\n\t"+hidemarudir +
"\n\n" +
                "田楽DLL ダウンロードURL\n"+
                "  http://www.ceres.dti.ne.jp/~sugiura/hidemaru/macros/dgserver/
\n" +
                $info ;
        message $$mes ;
        goto LEND ;
    }

    if (!result) {
        message "田楽DLL をロードできませんでした。"+$info;
        goto LEND ;
    }
return;

Gsub:
//機能: "\"を第二引数で指定した文字に置換する
    //第一引数: 文字列型,処理対象文字列
    //第ニ引数: 文字列型,置換文字列
    //第三引数: 文字列型,第二引数で指定した文字列を置き換える文字列
    //戻り値:   文字列型,処理後文字列
    $$target = $$1 ;
    $$reg_str = $$2 ;
    $$gsub = $$3 ;

    if($$target == ""){
        message "サブルーチンGsub:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    if($$reg_str == ""){
        message "サブルーチンGsub:第ニ引数エラー。\n" + $info ;
        goto LEND ;
    }

    //loaddllされている場合、ロードされているDLLのファイル名を返します。
    //ロードされていない場合は何もない文字列を返します。
    $$dllfile = loaddllfile ;
    if($$dllfile != "") freedll;

    //hmjre.dllの機能を利用
    call HmJre ;

    //FindRegular(V1.50以降から)
    //特定の文字列から特定の正規表現パターンのマッチングをして、ヒットした場
合は
    //その位置を返します。
    //第1パラメータ(文字列型): 検索したい正規表現文字列を指定します。
    //第2パラメータ(文字列型): 検索対象の文字列を指定します。
    //第3パラメータ(数値型): 検索を開始する桁位置を指定します。
    //先頭から検索したい場合は0を指定します。
    //返り値(数値型): ヒットした場合は桁位置(0以上の値)を返します。
    //ヒットしなかった場合は-1を返します。
    //正規表現の解釈その他でエラーが起きた場合は-2を返します。
    ##n = dllfunc( "FindRegular",
        $$reg_str,
        $$target, 0 );
    //検索文字列が一致
    if (##n > 0) {
        while( ##n > 0 ) {
            $$target =
                leftstr( $$target, ##n ) +
                $$gsub +
                midstr( $$target, ##n +1, strlen($$target) - ##n - 1 ) ;
            ##n = dllfunc( "FindRegular",
                $$reg_str,
                $$target, 0 );
        }
    }
    else if(##n == -2){
        message "正規表現の解釈その他でエラーが発生" ;
    }

    if($$dllfile != ""){
        loaddll $$dllfile ;
        if(!result ){
            message $$dllfile + "\nのロードに失敗しました。" + $info ;
            goto LEND ;
        }
    }

return $$target ;

HmJre:
    //  HmJre.DLLのロード
    loaddll "HmJre.dll" ;
    if(!result ){
        message "HmJre.dllのロードに失敗しました。";
        goto LEND;
    }
    //HmJre.dllの版数を取得。
    ##ver = (((dllfunc("JreGetVersion") & 0xFF00) / 256) * 100) +
            ((dllfunc("JreGetVersion") & 0xF0) / 16 * 10) +
            (dllfunc("JreGetVersion") & 0xF) ;
    if (##ver < 150) {
        $$mes = "HmJre.DLLの版数が Ver1.50より古いです\n" +
        "現在のHmJre.DLL版数=" +
        leftstr(str(##ver),1) + "." +
        midstr(str(##ver),1,1) + "." +
        midstr(str(##ver),2,1) + "\n" +
        $info ;
        ##ret = 0 ;
    }
    else
        ##ret = 1 ;

return ##ret ;

findbooknote:
//機能: アドレス帳から第一引数のアドレス情報の備考情報を取得する。
//      備考〜備考8の取得先は、第二引数の数値情報を利用する。
    //第一引数: 文字列型,処理対象文字列
    //第ニ引数: 数値型,備考取得情報
    //戻り値:   文字列型,処理後文字列
    $$inf = $$1 ;
    ##bikou = ##2 ;

    if($$inf == ""){
        message "サブルーチンfindbooknote:第一引数エラー。\n" + $info ;
        goto LEND ;
    }
    if( (##bikou <1) ||
        (8 < ##bikou)){
        message "サブルーチンfindbooknote:第二引数エラー。\n" +
            str(##bikou) + "\n" + $info ;
        goto LEND ;
    }

    if(##bikou == 1){
        //備考の内容を返します。
        $$ret = dllfuncstr( "FindBookNote", $$inf);
    }
    else if(##bikou == 2){
        //備考2の内容を返します。
        $$ret = dllfuncstr( "FindBookNote2", $$inf);
    }
    else if(##bikou == 3){
        //備考3の内容を返します。
        $$ret = dllfuncstr( "FindBookNote3", $$inf);
    }
    else if(##bikou == 4){
        //備考4の内容を返します。
        $$ret = dllfuncstr( "FindBookNote4", $$inf);
    }
    else if(##bikou == 5){
        //備考5の内容を返します。
        $$ret = dllfuncstr( "FindBookNote5", $$inf);
    }
    else if(##bikou == 6){
        //備考6の内容を返します。
        $$ret = dllfuncstr( "FindBookNote6", $$inf);
    }
    else if(##bikou == 7){
        //備考7の内容を返します。
        $$ret = dllfuncstr( "FindBookNote7", $$inf);
    }
    else if(##bikou == 8){
        //備考8の内容を返します。
        $$ret = dllfuncstr( "FindBookNote8", $$inf);
    }
return $$ret ;
//------------HMML_INS_NAME.MAC-------------

[ ]
RE:00249 「宛先名挿入マクロ」に機能追加No.00250
siniti さん 08/06/26 22:28
 
プックンさん

sinitiです。

08/06/26 01:27 ←こんな時間まで当方の要望を対応頂きありがとうございました。

>回答1)group_mode=0の場合のA-1氏、A-2氏、A-3氏、A-4氏の宛先名
>A-1会社)A-1氏さん
>A-2氏さん
>Aグループ)A-3氏さん
>A-4氏さん
>回答2)group_mode=1の場合のB-1氏、B-2氏、B-3氏、B-4氏の宛先名
>B-1会社)B-1氏さん
>B-2氏さん
>Bグループ)B-3氏さん
>Bグループ)B-4氏さん
>
>少し修正してみました。下記マクロで試してみてください。

上記のとおりできることを確認しました。

私としては、group_mode=1を使いたいですね。
ありがとうございました。
これでまた・更に秀丸メールを使うのが楽しくなり、
かつ便利になりました。

最後に、確認ですが、確認して問題がありませんでしたが、
HMML_INS_NAME_REP.MAC も問題ないですよね。


[ ]
RE:00247 「宛先名挿入マクロ」に機能追加No.00253
siniti さん 08/07/03 23:33
 
プックンさん

sinitiです。

宛先名挿入マクロのグループ名挿入機能を便利で使わせて頂いております。
使用していて、気がついた要望があります。
ご検討いただけませんでしょうか?

>アドレス帳で、グループ情報を利用したいアドレスが大半でグループ情報を
>利用したくないアドレスの方がすくない場合、使用しないアドレスに対して
>指定したほうが楽なので、下記設定 + アドレス帳備考8に"disable_group"
>を指定することで、グループ情報を使用しなくなります。
>指定しないアドレスはグループ情報を利用できます。
>    追加設定
>    [hmml_ins_name.mac]
>    group_mode=1

上記の仕様では、基本はグループ情報を使用するが指定のアドレスのみ
グループを使用しない場合には便利です。
 しかし、あるグループ配下のアドレスにはグループ名を使用しない場合には、その
グループ配下の
すべてのアドレスの備考に"disable_group"を指定する必要があります。
 そこで、puku.iniファイルにでもグループ情報を使用しないグループを指定して、
指定されたグループ配下のアドレスは全てグループ名を使用しないようにできません
でしょうか?
→これができるとグループ単位でグループ名を使用する・しないを指定できるため、
アドレス帳に1個1個設定する必要が無いので非常に便利です。

これの使い道としては、以下のような場合を想定しています。
・基本はグループ名を使用する。(group_mode=1)
・しかし、一部のグループ配下のアドレスはグループ名を使用したくない場合にグ
ループ単位で使用する・しないと指定できる。
→グループの単位を組織や会社に関係なく登録しているとグループ名をそのまま使う
とまずいので。

なお、puku.iniでの指定は、disable_group=aaaa,bbbb,cccc のように、複数のグ
ループを指定できるように考慮いただければ幸いです。

ご検討のほどよろしくお願いします。


[ ]