menu_opts_on(MENU * menu, Menu_Options opts) { MENU *cmenu = menu; /* use a copy because set_menu_opts must detect NULL menu itself to adjust its behavior */ T((T_CALLED("menu_opts_on(%p,%d)"), menu, opts)); opts &= ALL_MENU_OPTS; if (opts & ~ALL_MENU_OPTS) RETURN(E_BAD_ARGUMENT); else { Normalize_Menu(cmenu); opts = cmenu->opt | opts; returnCode(set_menu_opts(menu, opts)); } }
int menu_opts_on(MENU *m, OPTIONS opt) { return (set_menu_opts(m, (Mopt(m ? m : Dfl_Menu)) | opt)); }
/* * Menu option get/set functions - menu_opts(3X) man page */ static VALUE rbncurs_c_set_menu_opts(VALUE rb_menu, VALUE opts) { MENU *menu = get_menu(rb_menu); return INT2NUM(set_menu_opts(menu, NUM2INT(opts))); }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
int main(){ main_pid = getpid(); char line[BUF][BUF]; FILE *rlist = NULL; int igt = 0; int total = 0; rlist = fopen("STATIONS.txt", "r"); while( fgets ( line[igt], BUF, rlist )) { /* get rid of ending \n from fgets */ line[igt][strlen(line[igt]) - 1] = '\0'; char *line_f = line[igt]; uris[igt] = strtok(line_f, "@"); choices[igt] = strtok(NULL, "@"); descriptions[igt] = strtok(NULL, "@"); igt++; } /* Initialize curses */ ITEM **my_items; int c; MENU *my_menu; int n_choices, i; ITEM *cur_item; initscr(); /*We dont really need colors for now...*/ /*start_color();*/ cbreak(); noecho(); keypad(stdscr, TRUE); /*wborder(0 , 0,0,0,0,0,0,0,0,);*/ /*init_pair(1, COLOR_RED,COLOR_WHITE);*/ /*init_pair(2, COLOR_GREEN,COLOR_WHITE);*/ /*init_pair(3, COLOR_MAGENTA,COLOR_WHITE);*/ /* Initialize items */ n_choices = ARRAY_SIZE(choices); my_items = (ITEM **)calloc(n_choices + 1, sizeof(ITEM *)); for(i = 0; i < n_choices; ++i) { my_items[i] = new_item(choices[i],descriptions[i]); /* The F*cking user pointer */ set_item_userptr(my_items[i], func); } my_items[n_choices] = (ITEM *)NULL; /* Create menu */ my_menu = new_menu((ITEM **)my_items); set_menu_opts(my_menu,O_SHOWDESC); int y_lines_menu = LINES - y_lines_reserved; set_menu_format(my_menu,y_lines_menu,1); /* Post the menu */ /*Help thingy*/ hacete_una_linea_putin(5); mvprintw(LINES - 4, 0, " Press <ENTER> to play the station,"); mvprintw(LINES - 3, 0, " any <arrow> to move the menu buffer, <Q> to Quit or"); mvprintw(LINES - 2, 0, " <K> to Kill child mplayer process."); hacete_una_linea_putin(1); post_menu(my_menu); refresh(); /*big loop thingy*/ while((c = getch()) != 113){ switch(c){ case KEY_DOWN: menu_driver(my_menu, REQ_DOWN_ITEM); break; case KEY_UP: menu_driver(my_menu, REQ_UP_ITEM); break; case KEY_LEFT: menu_driver(my_menu, REQ_SCR_UPAGE); break; case KEY_RIGHT: menu_driver(my_menu, REQ_SCR_DPAGE); break; case 107: // k kill_child(); break; case 10: { /* Enter == Play some radio! */ ITEM *cur; void (*p)(char *); if (*contador >= 1){ kill_child(); } cur = current_item(my_menu); description_fn = (char *)item_description(cur); p = item_userptr(cur); p((char *)item_name(cur)); pos_menu_cursor(my_menu); play_radio(); cuenta = cuenta + 1; break; } break; } } /*That's all, free memory, kill any pid and exit.*/ unpost_menu(my_menu); for(i = 0; i < n_choices; ++i){ free_item(my_items[i]); } free_menu(my_menu); endwin(); kill_child(); exit(0); }