// Main Function void _main(void) { HANDLE menu_handle = MenuNew (2, 240, 18); MenuAddText (menu_handle, 0, "First", 1, DMF_TOP_SUB); MenuAddText (menu_handle, 1, "Subitem 1.1", 5, DMF_CHILD_SUB); MenuAddText (menu_handle, 5, "Subitem 1.1.1", 8, DMF_CHILD_SUB); MenuAddText (menu_handle, 5, "Subitem 1.1.2", 9, DMF_CHILD); MenuAddText (menu_handle, 8, "Subitem 1.1.1.1", 10, DMF_CHILD); MenuAddText (menu_handle, 1, "Subitem 1.2", 6, DMF_CHILD); MenuAddText (menu_handle, 0, "Second", 2, DMF_TOP_SUB); MenuAddText (menu_handle, 2, "Subitem 2.1", 7, DMF_CHILD); MenuAddText (menu_handle, -1, "Third", 3, DMF_TOP); MenuAddText (menu_handle, -1, "Fourth", 4, DMF_TOP); HANDLE exec_handle = MenuBegin (NULL, 0, 0, MBF_HMENU, menu_handle); short result; do { result = MenuKey (exec_handle, ngetchx ()); } while (result == M_NOTMENUKEY); MenuEnd (exec_handle); MenuUpdate (); push_shortint (result); }
int main(){ WINDOW *my_win, *menu_win, *my_menu_win; ITEM **my_items; MENU *my_menu; list *FileBuffer; int height, width, startx, starty, exit = 0; int highlight = 1; int ch, c, choice = 0, i, j; char str[81]; FileBuffer = (list *)malloc(sizeof(list)); if (FileBuffer == NULL) return; InitialiseBuffer(FileBuffer); initscr(); clear(); noecho(); cbreak(); start_color(); /*Checking whether the terminal supports colors*/ if (has_colors() == FALSE){ endwin(); printf("Your terminal does not support colors\n"); } keypad(stdscr, TRUE); height = 3; width = 10; starty = (LINES - height)/2; startx = (COLS - width) / 2; refresh(); my_win = Create_NewWindow(height, width, starty, startx); mvwhline(my_win, 5, 1, ACS_HLINE, width - 1); init_pair(1, COLOR_RED, COLOR_BLACK); init_pair(2, COLOR_CYAN, COLOR_BLACK); /* Create items */ my_items = (ITEM **)calloc(nchoices, sizeof(ITEM *)); for(i = 0; i < nchoices; ++i) my_items[i] = new_item(menu_options[i], menu_options[i]); /* Create menu */ my_menu = new_menu((ITEM **)my_items); /* Set menu option not to show the description */ menu_opts_off(my_menu, O_SHOWDESC); /* Create the window to be associated with the menu */ my_menu_win = newwin(0, 0, 0, 0); keypad(my_menu_win, TRUE); /* Set main window and sub window */ set_menu_win(my_menu, my_menu_win); set_menu_sub(my_menu, derwin(my_menu_win, 0, 0, 0, 0)); set_menu_format(my_menu, 1, 6); set_menu_mark(my_menu, " * "); /* Post the menu */ post_menu(my_menu); wrefresh(my_menu_win); i = 0; mvwhline(my_menu_win, 1, 0, ACS_HLINE, COLS); mvwprintw(my_menu_win, LINES - 1, 0, "Press F3 to go to the menu, F6 to exit", c); while(1){ choice = ToggleMenu(my_menu_win, my_menu, i); i = choice; switch(choice){ case 0: MenuOpen(FileBuffer, my_menu_win); break; case 1: MenuNew(FileBuffer, my_menu_win, my_menu); break; case 2: MenuSave(FileBuffer, my_menu_win); break; case 3: MenuSaveAs(FileBuffer, my_menu_win); break; case 4: MenuEdit(FileBuffer, my_menu_win); break; case 5: MenuExit(FileBuffer, my_menu_win); exit = 1; break; default: break; } if (exit) break; } /*Assertion: the user wants to exit the program*/ /* Unpost and free all the memory taken up */ unpost_menu(my_menu); free_menu(my_menu); for(j = 0; j < nchoices; ++j) free_item(my_items[j]); clrtoeol(); refresh(); /*Ending curses mode*/ endwin(); return 0; }