示例#1
0
static VALUE rbncurs_c_menu_win(VALUE rb_menu)
{
  MENU *menu = get_menu(rb_menu);
  return wrap_window(menu_win(menu));
}
示例#2
0
int
edit_bands (SwitchPos * sp, AppData * a)
{
  MENU *my_menu;
  SwitchBand *sb;
  SwitchPos tmp;
  uint32_t i, maxx;
  int state = 0;
  ITEM **my_items;
  char **mnu_str;
//      WINDOW * menu_win,*menu_sub;
  uint32_t num_strings;
  int lbl_x, idx = 0;
  uint32_t num;
  spDeepCopy (&tmp, sp);
  num = tmp.num_bands;
  sb = tmp.bands;

  message (a,
           "Select and press enter to edit. Use d to delete a frequency band or a to add a new one. Use c to cancel and backspace to exit.\n");

  while (state >= 0)
  {
    num_strings = num;
    state = 0;
    maxx = getmaxx (stdscr);
    if (num)
    {

      debugMsg ("allocating items\n");
      my_items = (ITEM **) utlCalloc (num_strings + 1, sizeof (ITEM *));
      mnu_str = utlCalloc (num_strings, sizeof (char *));
      for (i = 0; i < num_strings; ++i)
      {
        mnu_str[i] = utlCalloc (20, sizeof (char));
        snprintf (mnu_str[i], 20, "%" PRIu32, i);
        my_items[i] = new_item (mnu_str[i], mnu_str[i]);
        if (NULL == my_items[i])
        {
          if (errno == E_BAD_ARGUMENT)
            errMsg ("badarg i=%" PRIu32 "\n", i);
          if (errno == E_SYSTEM_ERROR)
            errMsg ("new_item: syserr i=%" PRIu32 "\n", i);
        }
      }
      my_items[num_strings] = (ITEM *) NULL;
      my_menu = new_menu ((ITEM **) my_items);
      set_menu_opts (my_menu, O_ONEVALUE | O_NONCYCLIC | O_ROWMAJOR);
      appDataMakeMenuWnd (my_menu);
      lbl_x = 3 + (maxx - 6) / 2 - strlen ("Bands") / 2;
      mvwprintw (menu_win (my_menu), 1, lbl_x, "%s", "Bands");
      post_menu (my_menu);
      debugMsg ("starting menu loop\n");
      wrefresh (menu_win (my_menu));
      while (state == 0)
      {
        int c;
        ITEM *selection;
        c = getch ();
        switch (c)
        {
        case 263:              //ESC
        case K_BACK:           //Backspace
          state = -1;
          break;
        case KEY_DOWN:
          menu_driver (my_menu, REQ_DOWN_ITEM);
          break;
        case KEY_UP:
          menu_driver (my_menu, REQ_UP_ITEM);
          break;
        case KEY_RESIZE:
          //windows need to be resized.. ignore
          break;
        case 'd':
          selection = current_item (my_menu);
          idx = item_index (selection);
          state = 1;
          break;
        case 'a':
          state = 2;
          break;
        case 'c':
          state = 3;
          break;
        case 13:               //enter
          selection = current_item (my_menu);
          idx = item_index (selection);
          state = 5;
          break;
        default:
          break;
        }
        wrefresh (menu_win (my_menu));
      }
      unpost_menu (my_menu);
      appDataDestroyMenuWnd (my_menu);
      free_menu (my_menu);
      for (i = 0; i < num_strings; ++i)
      {
        free_item (my_items[i]);
        utlFAN (mnu_str[i]);
      }
      utlFAN (mnu_str);
      utlFAN (my_items);
    }
    else
    {
      WINDOW *wnd;
      wnd = appDataMakeEmptyWnd ();

      wrefresh (wnd);
      while (state == 0)
      {
        int c;
        c = getch ();
        switch (c)
        {
        case KEY_RESIZE:
          wnd = appDataResizeEmpty (wnd);
          break;
        case 263:              //ESC
        case K_BACK:           //Backspace
          state = -1;
          break;
        case 'a':
          state = 2;
          break;
        case 'c':
          state = 3;
          break;
        default:
          break;
        }
        wrefresh (wnd);
      }
      assert (ERR != delwin (wnd));
    }
    if (state > 0)
    {
      switch (state)
      {
      case 1:                  //del
        spBandDel (&sb, &num, idx);
        break;
      case 2:                  //add(at the end)
        spBandAdd (&sb, &num, num);
        break;
      case 3:                  //cancel
        spClear (&tmp);         //clear temporary
        return 1;
      case 5:                  //edit
        edit_band (sb + idx, a);
        break;
      default:
        break;
      }
    }
  }
  spClear (sp);                 //clear original
  *sp = tmp;                    //replace with temporary
  return 0;
}
示例#3
0
int
edit_pos (SwitchPos * sp, AppData * a)
{
  MENU *my_menu;
  uint32_t i, maxx;
  int state = 0;
  ITEM **my_items;
//      WINDOW * menu_win,*menu_sub;
  uint32_t num_strings;
  int lbl_x, idx;

  message (a,
           "Here you can set the initial tuning file or edit the frequency bands.\n");
  while (state >= 0)
  {
    num_strings = 2;
    state = 0;
    debugMsg ("allocating items\n");
    my_items = (ITEM **) utlCalloc (num_strings + 1, sizeof (ITEM *));
    my_items[0] = new_item ("Bands", "Bands");
    my_items[1] = new_item ("ITF", "ITF");
    my_items[num_strings] = (ITEM *) NULL;
    my_menu = new_menu ((ITEM **) my_items);
    set_menu_opts (my_menu, O_ONEVALUE | O_NONCYCLIC | O_ROWMAJOR);
    maxx = getmaxx (stdscr);
    appDataMakeMenuWnd (my_menu);
    post_menu (my_menu);
    lbl_x = 3 + (maxx - 6) / 2 - strlen ("Position") / 2;
    mvwprintw (menu_win (my_menu), 1, lbl_x, "%s", "Position");
    wrefresh (menu_win (my_menu));
    debugMsg ("starting menu loop\n");
    while (state == 0)
    {
      int c;
      ITEM *selection;
      c = getch ();
      switch (c)
      {
      case 263:                //ESC
      case K_BACK:             //Backspace
        state = -1;
        break;
      case KEY_DOWN:
        menu_driver (my_menu, REQ_DOWN_ITEM);
        break;
      case KEY_UP:
        menu_driver (my_menu, REQ_UP_ITEM);
        break;
      case KEY_RESIZE:
        //windows need to be resized.. ignore
        break;
      case 13:                 //enter
        selection = current_item (my_menu);
        idx = item_index (selection);
        state = 5;
        break;
      default:
        break;
      }
      wrefresh (menu_win (my_menu));
    }
    unpost_menu (my_menu);
    appDataDestroyMenuWnd (my_menu);
    free_menu (my_menu);
    for (i = 0; i < num_strings; ++i)
    {
      free_item (my_items[i]);
    }
    utlFAN (my_items);
    if (state == 5)
    {
      switch (idx)
      {
      case 0:
        edit_bands (sp, a);
        break;
      case 1:
        set_itf (sp, a);
        break;
      default:
        break;
      }
    }
  }
  return 0;
}
示例#4
0
int
edit_band (SwitchBand * sb, AppData * a)
{
  uint32_t i, maxx;
  int state = 0;
  uint32_t num_strings;
  int lbl_x, idx = 0;
  MENU *my_menu;
  SwitchBand tmp;
  SwitchPol *spol;
  ITEM **my_items;
  char **mnu_str[2];
//      WINDOW * menu_win,*menu_sub;
  uint32_t num;

  spBandDeepCopy (&tmp, sb);
  num = tmp.num_pol;
  spol = tmp.pol;

  message (a, "Modify Band parameters or edit Band's polarisations.\n");

  while (state >= 0)
  {
    num_strings = num + 3;
    state = 0;
    debugMsg ("allocating items\n");

    my_items = (ITEM **) utlCalloc (num_strings + 1, sizeof (ITEM *));

    mnu_str[0] = utlCalloc (num_strings, sizeof (char *));
    mnu_str[1] = utlCalloc (num_strings, sizeof (char *));

    debugMsg ("allocating items\n");
    mnu_str[0][0] = "lof";
    mnu_str[1][0] = utlCalloc (32, sizeof (char));
    snprintf (mnu_str[1][0], 32, "%u", sb->lof);
    my_items[0] = new_item (mnu_str[0][0], mnu_str[1][0]);

    mnu_str[0][1] = "f_min";
    mnu_str[1][1] = utlCalloc (32, sizeof (char));
    snprintf (mnu_str[1][1], 32, "%u", sb->f_min);
    my_items[1] = new_item (mnu_str[0][1], mnu_str[1][1]);

    mnu_str[0][2] = "f_max";
    mnu_str[1][2] = utlCalloc (32, sizeof (char));
    snprintf (mnu_str[1][2], 32, "%u", sb->f_max);
    my_items[2] = new_item (mnu_str[0][2], mnu_str[1][2]);

    for (i = 3; i < num_strings; ++i)
    {
      mnu_str[0][i] = utlCalloc (32, sizeof (char));
      mnu_str[1][i] = (char *) tpiGetPolStr (sb->pol[i - 3].pol);
      snprintf (mnu_str[0][i], 32, "Pol%" PRIu32, i - 3);
      my_items[i] = new_item (mnu_str[0][i], mnu_str[1][i]);
      if (NULL == my_items[i])
      {
        if (errno == E_BAD_ARGUMENT)
          errMsg ("badarg i=%" PRIu32 "\n", i);
        if (errno == E_SYSTEM_ERROR)
          errMsg ("new_item: syserr i=%" PRIu32 "\n", i);
      }
    }
    my_items[num_strings] = (ITEM *) NULL;
    my_menu = new_menu ((ITEM **) my_items);
    set_menu_opts (my_menu,
                   O_ONEVALUE | O_NONCYCLIC | O_ROWMAJOR | O_SHOWDESC);
    maxx = getmaxx (stdscr);
    appDataMakeMenuWnd (my_menu);
    post_menu (my_menu);
    lbl_x = 3 + (maxx - 6) / 2 - strlen ("Band") / 2;
    mvwprintw (menu_win (my_menu), 1, lbl_x, "%s", "Band");
    wrefresh (menu_win (my_menu));
    debugMsg ("starting menu loop\n");
    while (state == 0)
    {
      int c;
      ITEM *selection;
      c = getch ();
      switch (c)
      {
      case 263:                //ESC
      case K_BACK:             //Backspace
        state = -1;
        break;
      case KEY_DOWN:
        menu_driver (my_menu, REQ_DOWN_ITEM);
        break;
      case KEY_UP:
        menu_driver (my_menu, REQ_UP_ITEM);
        break;
      case KEY_RESIZE:
        //windows need to be resized.. ignore
        break;
      case 'd':
        selection = current_item (my_menu);
        idx = item_index (selection);
        state = 1;
        break;
      case 'a':
        state = 2;
        break;
      case 'c':
        state = 3;
        break;
      case 13:                 //enter
        selection = current_item (my_menu);
        idx = item_index (selection);
        state = 5;
        break;
      default:
        break;
      }
      wrefresh (menu_win (my_menu));
    }
    unpost_menu (my_menu);
    appDataDestroyMenuWnd (my_menu);
    free_menu (my_menu);
    for (i = 0; i < num_strings; ++i)
    {
      free_item (my_items[i]);
    }
    utlFAN (mnu_str[1][0]);
    utlFAN (mnu_str[1][1]);
    utlFAN (mnu_str[1][2]);
    for (i = 3; i < num_strings; ++i)
      utlFAN (mnu_str[0][i]);
    utlFAN (mnu_str[0]);
    utlFAN (mnu_str[1]);
    utlFAN (my_items);
    if (state > 0)
    {
      switch (state)
      {
      case 1:                  //del
        if (idx >= 3)
          spPolDel (&spol, &num, idx - 3);
        break;
      case 2:                  //add(at the end)
        spPolAdd (&spol, &num, num);
        break;
      case 3:                  //cancel
        spBandClear (&tmp);     //clear temporary
        return 1;
      case 5:                  //edit
        if (idx >= 3)
          edit_pol (spol + idx - 3, a);
        else
          switch (idx)
          {
          case 0:
            tmp.lof = get_num (a);      //3,29,a);
            break;
          case 1:
            tmp.f_min = get_num (a);    //4,29,a);
            break;
          case 2:
            tmp.f_max = get_num (a);    //5,29,a);
            break;
          }
        break;
      default:
        break;
      }
    }
  }
  spBandClear (sb);             //clear original
  *sb = tmp;                    //replace with temporary
  return 0;
}
示例#5
0
int
edit_pol (SwitchPol * spol, AppData * a)
{
  uint32_t i, maxx;
  int state = 0;
  uint32_t num_strings;
  int lbl_x, idx = 0;
  MENU *my_menu;
  SwitchPol tmp;
  SwitchCmd *scmd;
  ITEM **my_items;
  char **mnu_str[2];
//      WINDOW * menu_win,*menu_sub;
  uint32_t num;

  spPolDeepCopy (&tmp, spol);
  num = tmp.num_cmds;
  scmd = tmp.cmds;

  message (a,
           "Modify Polarisation parameters or edit Commands.\nPress a to add a command, d to delete, press c to cancel");
  while (state >= 0)
  {
    num_strings = num + 1;
    state = 0;
    debugMsg ("allocating items\n");

    my_items = (ITEM **) utlCalloc (num_strings + 1, sizeof (ITEM *));

    mnu_str[0] = utlCalloc (num_strings, sizeof (char *));
    mnu_str[1] = utlCalloc (num_strings, sizeof (char *));

    debugMsg ("allocating items\n");
    mnu_str[0][0] = "Pol";
    mnu_str[1][0] = (char *) tpiGetPolStr (tmp.pol);
    my_items[0] = new_item (mnu_str[0][0], mnu_str[1][0]);

    for (i = 1; i < num_strings; ++i)
    {
      mnu_str[0][i] = utlCalloc (32, sizeof (char));
      mnu_str[1][i] = (char *) spGetCmdStr (scmd[i - 1].what);
      snprintf (mnu_str[0][i], 32, "Cmd%" PRIu32, i - 1);
      my_items[i] = new_item (mnu_str[0][i], mnu_str[1][i]);
      if (NULL == my_items[i])
      {
        if (errno == E_BAD_ARGUMENT)
          errMsg ("badarg i=%" PRIu32 "\n", i);
        if (errno == E_SYSTEM_ERROR)
          errMsg ("new_item: syserr i=%" PRIu32 "\n", i);
      }
    }
    my_items[num_strings] = (ITEM *) NULL;
    my_menu = new_menu ((ITEM **) my_items);
    set_menu_opts (my_menu,
                   O_ONEVALUE | O_NONCYCLIC | O_ROWMAJOR | O_SHOWDESC);
    maxx = getmaxx (stdscr);
    appDataMakeMenuWnd (my_menu);
    post_menu (my_menu);
    lbl_x = 3 + (maxx - 6) / 2 - strlen ("Pol") / 2;
    mvwprintw (menu_win (my_menu), 1, lbl_x, "%s", "Pol");
    wrefresh (menu_win (my_menu));
    debugMsg ("starting menu loop\n");
    while (state == 0)
    {
      int c;
      ITEM *selection;
      c = getch ();
      switch (c)
      {
      case 263:                //ESC
      case K_BACK:             //Backspace
        state = -1;
        break;
      case KEY_DOWN:
        menu_driver (my_menu, REQ_DOWN_ITEM);
        break;
      case KEY_UP:
        menu_driver (my_menu, REQ_UP_ITEM);
        break;
      case KEY_RESIZE:
        //windows need to be resized.. ignore
        break;
      case 'd':
        selection = current_item (my_menu);
        idx = item_index (selection);
        state = 1;
        break;
      case 'a':
        state = 2;
        break;
      case 'c':
        state = 3;
        break;
      case 13:                 //enter
        selection = current_item (my_menu);
        idx = item_index (selection);
        state = 5;
        break;
      default:
        break;
      }
      wrefresh (menu_win (my_menu));
    }
    unpost_menu (my_menu);
    appDataDestroyMenuWnd (my_menu);
    free_menu (my_menu);
    for (i = 0; i < num_strings; ++i)
    {
      free_item (my_items[i]);
    }
    for (i = 1; i < num_strings; ++i)
      utlFAN (mnu_str[0][i]);
    utlFAN (mnu_str[0]);
    utlFAN (mnu_str[1]);
    utlFAN (my_items);
    if (state > 0)
    {
      switch (state)
      {
      case 1:                  //del
        if (idx >= 1)
          spCmdDel (&scmd, &num, idx - 1);
        break;
      case 2:                  //add(at the end)
        spCmdAdd (&scmd, &num, num);
        break;
      case 3:                  //cancel
        spPolClear (&tmp);      //clear temporary
        return 1;
      case 5:                  //edit
        if (idx >= 1)
          edit_cmd (scmd + idx - 1, a);
        else
        {
          int rv;
          rv = get_pol (a);
          if (rv >= 0)
            tmp.pol = rv;
        }
        break;
      default:
        break;
      }
    }
  }
  spPolClear (spol);            //clear original
  *spol = tmp;                  //replace with temporary
  return 0;
}
示例#6
0
int
get_pol (AppData * a)
{
  uint32_t i, maxx;
  int state = 0;
  uint32_t num_strings;
  int lbl_x, idx = 0;
  MENU *my_menu;
  ITEM *my_items[5];
//      WINDOW * menu_win,*menu_sub;

  message (a, "Select a Polarisation.\n");
  while (state >= 0)
  {
    num_strings = 4;
    state = 0;
    debugMsg ("allocating items\n");
    my_items[0] = new_item ("H", "H");
    my_items[1] = new_item ("V", "V");
    my_items[2] = new_item ("L", "L");
    my_items[3] = new_item ("R", "R");
    my_items[4] = NULL;
    my_menu = new_menu ((ITEM **) my_items);
    set_menu_opts (my_menu, O_ONEVALUE | O_NONCYCLIC | O_ROWMAJOR);
    maxx = getmaxx (stdscr);
    appDataMakeMenuWnd (my_menu);
    post_menu (my_menu);
    lbl_x = 3 + (maxx - 6) / 2 - strlen ("Pol") / 2;
    mvwprintw (menu_win (my_menu), 1, lbl_x, "%s", "Pol");
    wrefresh (menu_win (my_menu));
    debugMsg ("starting menu loop\n");
    while (state == 0)
    {
      int c;
      ITEM *selection;
      c = getch ();
      switch (c)
      {
      case 263:                //ESC
      case K_BACK:             //Backspace
        idx = -1;
        state = -1;
        break;
      case KEY_DOWN:
        menu_driver (my_menu, REQ_DOWN_ITEM);
        break;
      case KEY_UP:
        menu_driver (my_menu, REQ_UP_ITEM);
        break;
      case KEY_RESIZE:
        //windows need to be resized.. ignore
        break;
      case 13:                 //enter
        selection = current_item (my_menu);
        idx = item_index (selection);
        state = -1;
        break;
      default:
        break;
      }
      wrefresh (menu_win (my_menu));
    }
    unpost_menu (my_menu);
    appDataDestroyMenuWnd (my_menu);
    free_menu (my_menu);
    for (i = 0; i < num_strings; ++i)
    {
      free_item (my_items[i]);
    }
  }
  return idx;
}
示例#7
0
int
sel_preset (uint32_t * num_ret, SwitchPos ** sp_ret, AppData * a)
{
  SwitchPos *np;
  uint32_t nn;
  MENU *my_menu;
  SwitchPos *sp = *sp_ret;
  uint32_t i, maxx;
  int state = 0;
  ITEM **my_items;
//      WINDOW * menu_win,*menu_sub;
  uint32_t num_strings;
  int lbl_x, idx = 0;
  uint32_t num = *num_ret;

  message (a,
           "Select a preset using cursor keys and Enter, or cancel using Esc or Backspace.\n");

  while (state >= 0)
  {
    num_strings = SP_NUM_PRESETS;
    state = 0;
    debugMsg ("allocating items\n");
    my_items = (ITEM **) utlCalloc (num_strings + 1, sizeof (ITEM *));
    for (i = 0; i < num_strings; ++i)
    {
      my_items[i] = new_item (spGetPresetStrings (i), spGetPresetStrings (i));
      if (NULL == my_items[i])
      {
        if (errno == E_BAD_ARGUMENT)
          errMsg ("badarg i=%" PRIu32 " \n", i);
        if (errno == E_SYSTEM_ERROR)
          errMsg ("new_item: syserr i=%" PRIu32 "\n", i);
      }
    }
    my_items[num_strings] = (ITEM *) NULL;
    my_menu = new_menu ((ITEM **) my_items);
    set_menu_opts (my_menu, O_ONEVALUE | O_NONCYCLIC | O_ROWMAJOR);
    maxx = getmaxx (stdscr);
    appDataMakeMenuWnd (my_menu);
    post_menu (my_menu);
    lbl_x = 3 + (maxx - 6) / 2 - strlen ("Presets") / 2;
    mvwprintw (menu_win (my_menu), 1, lbl_x, "%s", "Presets");
    wrefresh (menu_win (my_menu));
    debugMsg ("starting menu loop\n");
    while (state == 0)
    {
      int c;
      ITEM *selection;
      c = getch ();
      switch (c)
      {
      case 263:                //ESC
      case K_BACK:             //Backspace
        state = -1;
        break;
      case KEY_DOWN:
        menu_driver (my_menu, REQ_DOWN_ITEM);
        break;
      case KEY_UP:
        menu_driver (my_menu, REQ_UP_ITEM);
        break;
      case KEY_RESIZE:
        //windows need to be resized.. ignore
        break;
      case 13:                 //enter
        selection = current_item (my_menu);
        idx = item_index (selection);
        state = 5;
        break;
      default:
        break;
      }
      wrefresh (menu_win (my_menu));
    }
    unpost_menu (my_menu);
    appDataDestroyMenuWnd (my_menu);
    free_menu (my_menu);
    for (i = 0; i < num_strings; ++i)
    {
      free_item (my_items[i]);
    }
    utlFAN (my_items);
    if (state > 0)
    {
      switch (state)
      {
      case 5:                  //selected
        np = spGetPreset (idx, &nn);
        if (NULL != np)
        {
          for (i = 0; i < num; i++)
          {
            spClear (sp + i);
          }
          *sp_ret = np;
          *num_ret = nn;
          return 0;
        }
        break;
      default:
        break;
      }
    }
  }
  //cancelled
  return 0;
}
示例#8
0
int
edit_cmd (SwitchCmd * scmd, AppData * a)
{
  uint32_t i, maxx;
  int state = 0;
  uint32_t num_strings;
  int lbl_x, idx = 0;
  MENU *my_menu;
  SwitchCmd tmp;
  ITEM *my_items[11];
  char *mnu_str[2][10];
//      WINDOW * menu_win,*menu_sub;

  tmp = *scmd;

  message (a, "Modify Command\n");

  while (state >= 0)
  {
    num_strings = 10;           //what,len,data[8]
    state = 0;
    debugMsg ("allocating items\n");

    mnu_str[0][0] = "Cmd";
    mnu_str[1][0] = (char *) spGetCmdStr (tmp.what);
    my_items[0] = new_item (mnu_str[0][0], mnu_str[1][0]);

    mnu_str[0][1] = "Len";
    mnu_str[1][1] = utlCalloc (32, sizeof (char));
    snprintf (mnu_str[1][1], 32, "%u", tmp.len);
    my_items[1] = new_item (mnu_str[0][1], mnu_str[1][1]);

    for (i = 2; i < num_strings; i++)
    {
      mnu_str[0][i] = utlCalloc (32, sizeof (char));
      snprintf (mnu_str[0][i], 32, "data[%" PRIu32 "]", i - 2);
      mnu_str[1][i] = utlCalloc (32, sizeof (char));
      snprintf (mnu_str[1][i], 32, "%u", tmp.data[i - 2]);
      my_items[i] = new_item (mnu_str[0][i], mnu_str[1][i]);
    }

    my_items[num_strings] = (ITEM *) NULL;
    my_menu = new_menu ((ITEM **) my_items);
    set_menu_opts (my_menu,
                   O_ONEVALUE | O_NONCYCLIC | O_ROWMAJOR | O_SHOWDESC);
    maxx = getmaxx (stdscr);
    appDataMakeMenuWnd (my_menu);
    post_menu (my_menu);
    lbl_x = 3 + (maxx - 6) / 2 - strlen ("Cmd") / 2;
    mvwprintw (menu_win (my_menu), 1, lbl_x, "%s", "Cmd");
    wrefresh (menu_win (my_menu));
    debugMsg ("starting menu loop\n");
    while (state == 0)
    {
      int c;
      ITEM *selection;
      c = getch ();
      switch (c)
      {
      case 263:                //ESC
      case K_BACK:             //Backspace
        state = -1;
        break;
      case KEY_DOWN:
        menu_driver (my_menu, REQ_DOWN_ITEM);
        break;
      case KEY_UP:
        menu_driver (my_menu, REQ_UP_ITEM);
        break;
      case KEY_RESIZE:
        //windows need to be resized.. ignore
        break;
      case 'c':
        state = 3;
        break;
      case 13:                 //enter
        selection = current_item (my_menu);
        idx = item_index (selection);
        state = 5;
        break;
      default:
        break;
      }
      wrefresh (menu_win (my_menu));
    }
    unpost_menu (my_menu);
    appDataDestroyMenuWnd (my_menu);
    free_menu (my_menu);
    for (i = 0; i < num_strings; ++i)
    {
      free_item (my_items[i]);
    }
    utlFAN (mnu_str[1][1]);
    for (i = 2; i < num_strings; ++i)
    {
      utlFAN (mnu_str[0][i]);
      utlFAN (mnu_str[1][i]);
    }
    if (state > 0)
    {
      int rv;
      switch (state)
      {
      case 3:                  //cancel
        return 1;
      case 5:                  //edit
        switch (idx)
        {
        case 0:
          rv = get_cmd_id (a);
          if (rv >= 0)
            tmp.what = rv;
          break;
        case 1:
          tmp.len = get_num (a);        //1,29,a);
          break;
        default:
          tmp.data[idx - 2] = get_num (a);      //idx,29,a);
          break;
        }
        break;
      default:
        break;
      }
    }
  }
  *scmd = tmp;                  //replace with temporary
  return 0;
}