addmenu 対話的にボタン/メニューを定義

## 呼び出し手順

    addmenu(button [,submenus] [,action])
                addmenu(gwin,button [,submenus] [,action])

## 引数

button

  文字列. ボタン名. キーボードショートカットで使用される名前の文字を前に &を置くことができます; この文字はGUIで下線が引かれます. MacOSXでは,同じ名前のサブメニューが自動的に追加されます (メニューバーにボタンは追加されません).

submenus

  文字列のベクトル. sub_menus項目名

action

  ２つの要素を有するリスト action=list(flag,proc_name)

  flag

    整数 (デフォルト値は 0)

  flag==0

    処理はscilab命令により定義される

  flag==1

    処理はCまたはFortran処理により定義される

  flag==2

    処理はscilab関数により定義される

  proc_name

    命令またはコールするプロシージャ名を有する scilab変数名を指定する文字列.

gwin

  整数. ボタンをインストールするグラフィックウインドウの 番号

## 説明

この関数によりメインウインドウまたは グラフィックウインドウコマンドパネルに ボタンまたはメニューをユーザーが追加できます.

  `action`引数が指定されない場合, ボタンに関連する処理を 文字列に指定したscilab命令により定義する必要があります. この文字列の名前は,

  + `button` (メインウインドウコマンドの場合)

  + `button_gwin` (グラフィックウインドウコマンドの場合)

  `action` 引数に 0を指定した場合, `proc_name` には,Scilab文字列ベクトル の名前を指定します. k番目のsub_menuに関連する処理は, この文字列変数のk番目の要素に保存したscilab命令で定義します.

  `action`引数に1を指定した場合, `proc_name` はCまたはFortranプロシージャ を指します. このプロシージャはFortranサブルーチン(default/fbutn.f) によりインターフェイスが作成されるか, または`link`関数によりscilabに 動的にリンクされます. Cの呼び出し手順は以下のようになります: `(char* button_name, int* gwin,int *k)`

  `action`引数に2を指定した場合, `proc_name` はScilab関数を指します. この関数の呼び出し手順は以下のようになります:

  + `proc_name(k)` (メインウインドウコマンドの場合)

  + `proc_name(k,gwin)` (グラフィックウインドウまたは メインウインドウコマンドの場合)

## 例

    if (getscilabmode() == "STD") then
        addmenu('foo');
        foo = 'disp(''hello'')';
        addmenu('Hello',['Franck';'Peter'])
        Hello = ['disp(''hello Franck'')';'disp(''hello Peter'')'];
        addmenu('Bye',list(0,'French_Bye'));
        French_Bye = 'disp(''Au revoir'')';
        else
        mprintf('This example requires to use scilab with GUI mode.\n');
        end
        addmenu(0,'Hello',['Franck';'Peter']);
        Hello_0 = ['disp(''hello Franck'')';'disp(''hello Peter'')'];
        //Cで定義したコールバック
        // コールバックコードを作成
        code=[ '#include ""machine.h""'
        '#include ""sciprint.h""'
        'void foo(char *name, int *win, int *entry)'
        '{'
        '  if (*win==-1) '
        '    sciprint(""menu %s(%i) in Scilab window selected.\n"", name, *entry+1);'
        '  else'
        '    sciprint(""menu %s(%i) in window %i selected.\n"", name, *entry+1, *win);'
        '}'];
        // foo.cファイルを作成
        current_dir = pwd();
        chdir(TMPDIR);
        mputl(code, TMPDIR+'/foo.c');
        // Makefileを作成
        ilib_for_link('foo','foo.c',[],'c');
        exec('loader.sce');
        chdir(current_dir);
        // メニューを追加
        addmenu(0,'foo',['a','b','c'],list(1,'foo'));
    end

## 参照

- setmenu
- unsetmenu
- delmenu