/* * field_validation */ static VALUE rbncurs_c_set_field_type(int argc, VALUE* argv, VALUE rb_field) { VALUE rb_fieldtype, arg3, arg4, arg5; FIELD* field = get_field(rb_field); FIELDTYPE* ftype = NULL; rb_scan_args(argc, argv, "13", &rb_fieldtype, &arg3, &arg4, &arg5); ftype = get_fieldtype(rb_fieldtype); if (ftype == TYPE_ALNUM || ftype == TYPE_ALPHA) { if (argc != 2) rb_raise(rb_eArgError, "TYPE_ALNUM and TYPE_ALPHA require one additional argument"); return INT2NUM(set_field_type(field, ftype, NUM2INT(arg3))); } if (ftype == TYPE_ENUM) { if (argc != 4) { rb_raise(rb_eArgError, "TYPE_ENUM requires three additional arguments"); } else { int n = (int) rbncurs_array_length(arg3); /* Will ncurses free this array of strings in free_field()? */ char** list = ALLOC_N(char*, n+1); int i; for (i = 0; i < n; i++) { list[i] = STR2CSTR(rb_ary_entry(arg3, (long)i)); } list[n] = NULL; return INT2NUM(set_field_type(field, ftype, list, RTEST(arg4), RTEST(arg5))); } } else if (ftype == TYPE_INTEGER) {
/* * This sets basic form validation, for example IPv4 Method can be one of * ipv4_method_enum. * @param pos The index of the main_fields in the global variable * @param is_autoconnect Indicate if this is the "AutoConnect" field. * @param obj_str The string of the label surrounding main_fields[pos] * @param key The string of the current field */ static void config_fields_type(int pos, bool is_autoconnect, const char *obj_str, const char *key) { if (is_autoconnect) { set_field_type(main_fields[pos], TYPE_ENUM, true_false_enum, 0, 1); return; } if (strcmp(key, key_serv_ipv6_privacy) == 0) { set_field_type(main_fields[pos], TYPE_ENUM, ipv6_privacy_enum, 0, 1); return; } // Only "Method" attributes below this point. if (strcmp(key, key_serv_ipv4_method) != 0 || obj_str == NULL) return; if (strcmp(obj_str, key_serv_ipv4_config) == 0) { set_field_type(main_fields[pos], TYPE_ENUM, ipv4_method_enum, 0, 1); return; } if (strcmp(obj_str, key_serv_ipv6_config) == 0) { set_field_type(main_fields[pos], TYPE_ENUM, ipv6_method_enum, 0, 1); return; } if (strcmp(obj_str, key_serv_proxy_config) == 0) { set_field_type(main_fields[pos], TYPE_ENUM, proxy_method_enum, 0, 1); return; } }
void InitResizeMOSAIC () { resizeWindow = CreateCenteredBoxedTitledWindow (RESIZE_height, RESIZE_width, "RESIZE"); resizePanel = new_panel (resizeWindow); mvwaddstr (resizeWindow, 1, 1, "New height"); mvwaddstr (resizeWindow, 2, 1, "New width"); /* MAKING OF FORM */ FIELD **fields = (FIELD **) malloc (3 * sizeof (FIELD *)); fields[0] = new_field (1, 3, 0, 0, 0, 0); set_field_back (fields[0], A_BOLD); field_opts_off (fields[0], O_PASSOK); set_field_just (fields[0], JUSTIFY_LEFT); set_field_type (fields[0], TYPE_INTEGER, 0, 1, 999); fields[1] = new_field (1, 3, 1, 0, 0, 0); set_field_back (fields[1], A_BOLD); field_opts_off (fields[1], O_PASSOK); set_field_just (fields[1], JUSTIFY_LEFT); set_field_type (fields[1], TYPE_INTEGER, 0, 1, 999); fields[2] = NULL; // the FORM itself, WINDOW and post it! resize_form = new_form (fields); // subwindow: inside the box WINDOW *subwindow = derwin (resizeWindow, 2, 3, 1, 12); set_form_win (resize_form, subwindow); set_form_sub (resize_form, subwindow); post_form (resize_form); touchwin (resizeWindow); }
int main() { FIELD *f1[2]; FORM *frm1; chtype ch; int error; HOOK fptr=getbuf; initscr(); f1[0]=new_field(24,80,0,0,1,1); assert(f1[0]!=NULL); f1[1]=NULL; frm1=new_form(f1); assert(frm1!=NULL); set_field_fore(f1[0],A_REVERSE); field_opts_off(f1[0],O_STATIC); //set_field_buffer(f1[0],0,"Sajid"); set_field_type(f1[0],TYPE_ALPHA,80); set_field_term(f1[0],fptr); post_form(frm1); wrefresh(stdscr); keypad(stdscr,TRUE); while((ch=getch())!=KEY_F(3)) { switch(ch) { case KEY_LEFT: error=form_driver(frm1,REQ_PREV_CHAR); if(error==E_REQUEST_DENIED) form_driver(frm1,REQ_SCR_BCHAR); break; case KEY_RIGHT: form_driver(frm1,REQ_NEXT_CHAR); break; default: form_driver(frm1,ch); break; } } unpost_form(frm1); free_form(frm1); free_field(f1[0]); getch(); printw(ptr); endwin(); }
void viewNewPlayer(FootBallGame::TeamNumber teamNumber) { const char *itemName; const ITEM *currentItem; const int window_nlines = 10, window_ncols = 90; char *choices[] = { "Add", "Cancel", }; for (;;) { // Create new window. WINDOW *window = newwin(window_nlines, window_ncols, headerWindow_begin_y + headerWindow_nlines + 1, 0); // Set new window options. keypad(window, TRUE); // Create the form fields FIELD *field[6]; for (unsigned i = 0; i < ARRAY_SIZE(field)-1; i++) field[i] = new_field(1, 26, i+2, 23, 0, 0); field[ARRAY_SIZE(field)-1] = NULL; // Set feild options for (unsigned i = 0; i < ARRAY_SIZE(field)-1; i++) { set_field_back(field[i], A_UNDERLINE); field_opts_off(field[i], O_AUTOSKIP); } // Set the field types set_field_type(field[0], TYPE_REGEXP, "^[A-Za-z ]*$"); set_field_type(field[1], TYPE_INTEGER, 0, 1, 999); set_field_type(field[2], TYPE_REGEXP, "^[A-Za-z ]*$"); set_field_type(field[3], TYPE_NUMERIC, 2, 1.00, 1500.00); set_field_type(field[4], TYPE_NUMERIC, 2, 1.00, 300.00); // Create the form FORM *form = new_form(field); set_form_win(form, window); set_form_sub(form, derwin(window, 10, 90, 0, 0)); // Setup the menu items int nChoices = ARRAY_SIZE(choices)+1; ITEM **items = new ITEM* [nChoices]; for (int i = 0; i < nChoices-1; i++) items[i] = new_item(choices[i], NULL); items[nChoices-1] = NULL; // Create the menu MENU *menu = new_menu(items); // Menu options set_menu_format(menu, 1, 2); set_menu_mark(menu, NULL); // Attach the menu to the window set_menu_win(menu, window); set_menu_sub(menu, derwin(window, 1, 20, 8, 17)); // Make window and menu visible; post_form(form); post_menu(menu); mvwprintw(window, 0, 10, "Player Properties: "); mvwprintw(window, 2, 10, "Name: "); mvwprintw(window, 3, 10, "Number: "); mvwprintw(window, 4, 10, "Position: "); mvwprintw(window, 5, 10, "weight (kg): "); mvwprintw(window, 6, 10, "height (cm): "); wrefresh(window); refresh(); // Start user interaction loop. int c; // The restart variable is used to tell the function to rebuild the // menu by starting at the top of the for(;;) loop above. bool restart = false; while (!restart && (c = wgetch(window))) { mvprintw(LINES-1, 0, " "); refresh(); switch(c) { case KEY_DOWN: case 0x09: // Go to next field form_driver(form, REQ_NEXT_FIELD); // GO to the end of the presend buffer // Leaves nicely at the last character form_driver(form, REQ_END_LINE); break; case KEY_UP: // Go to previous field form_driver(form, REQ_PREV_FIELD); form_driver(form, REQ_END_LINE); break; case 0x7F: form_driver(form, REQ_DEL_PREV); break; case KEY_LEFT: menu_driver(menu, REQ_LEFT_ITEM); break; case KEY_RIGHT: menu_driver(menu, REQ_RIGHT_ITEM); break; case 10: // When the user hits enter determine the currently selected // item and do nessary actions. currentItem = current_item(menu); itemName = item_name(currentItem); // Cancel if (strncmp(itemName, choices[1], strlen(choices[1])) == 0) { // Delete allocated data unpost_form(form); unpost_menu(menu); free_form(form); free_menu(menu); for (unsigned i = 0; i < ARRAY_SIZE(field)-1; i++) free_field(field[i]); for (int i = 0; i < nChoices; i++) free_item(items[i]); delete [] items; delwin(window); return; } else if (strncmp(itemName, choices[0], strlen(choices[0])) == 0) { form_driver(form, REQ_VALIDATION); bool invalid = false; for (unsigned i = 0; i < ARRAY_SIZE(field)-1; i++) if (field_status(field[i])==false) invalid = true;; if (invalid == false) { FootBallPlayer *player = new FootBallPlayer; player->setName(field_buffer(field[0], 0)); player->setNumber(atoi(field_buffer(field[1], 0))); player->setPosition(field_buffer(field[2], 0)); player->setWeight(strtof(field_buffer(field[3], 0), NULL)); player->setHeight(strtof(field_buffer(field[4], 0), NULL)); FootBallTeam *team = game.getFootBallTeam(teamNumber); if (team == NULL) { team = new FootBallTeam; game.setFootBallTeam(teamNumber, team); } team->addFootBallPlayer(player); // Delete allocated data unpost_form(form); unpost_menu(menu); free_form(form); free_menu(menu); for (unsigned i = 0; i < ARRAY_SIZE(field)-1; i++) free_field(field[i]); for (int i = 0; i < nChoices; i++) free_item(items[i]); delete [] items; delwin(window); return; } else { mvprintw(LINES-1, 0, "Fill out the form correctly!!"); refresh(); } } break; default: // If this is a normal character, it gets // printed form_driver(form, c); break; } } } }
void viewEditTeamProperties(FootBallGame::TeamNumber teamNumber) { const char *fieldBuffer; const ITEM *currentItem; const char *itemName; ITEM **items; const int window_nlines = 10, window_ncols = 90; char *choices[] = { "Ok", "Cancel", }; for(;;) { // Create new window. WINDOW *window = newwin(window_nlines, window_ncols, headerWindow_begin_y + headerWindow_nlines + 1, 0); // Set new window options. keypad(window, TRUE); // Team the team FootBallTeam *team = game.getFootBallTeam(teamNumber); // Create the form fields FIELD *field[2]; field[0] = new_field(1, 20, 2, 22, 0, 0); field[1] = NULL; // Set feild options set_field_back(field[0], A_UNDERLINE); field_opts_off(field[0], O_AUTOSKIP); set_field_type(field[0], TYPE_REGEXP, "^[A-Za-z ]*$"); if (team) { String teamName = team->getTeamName(); set_field_buffer(field[0], 0, teamName.c_str()); } // Create the form FORM *form = new_form(field); // Attach the form to the window set_form_win(form, window); set_form_sub(form, derwin(window, 4, 90, 0, 0)); // Setup the menu int nChoices = ARRAY_SIZE(choices)+1; items = new ITEM* [nChoices]; for (int i = 0; i < nChoices-1; i++) items[i] = new_item(choices[i], NULL); items[nChoices-1] = NULL; // Create the menu MENU *menu = new_menu(items); // Menu options set_menu_format(menu, 1, 2); set_menu_mark(menu, NULL); // Attach the menu to the window set_menu_win(menu, window); set_menu_sub(menu, derwin(window, 1, 20, 4, 17)); // Make window and menu visible; post_form(form); post_menu(menu); mvwprintw(window, 0, 10, "Team Properties: "); mvwprintw(window, 2, 10, "Team Name: "); wrefresh(window); refresh(); // Start user interaction loop. int c; // The restart variable is used to tell the function to rebuild the // menu by starting at the top of the for(;;) loop above. bool restart = false; while (!restart && (c = wgetch(window))) { switch(c) { case KEY_DOWN: case 0x09: // Go to next field form_driver(form, REQ_NEXT_FIELD); // GO to the end of the presend buffer // Leaves nicely at the last character form_driver(form, REQ_END_LINE); break; case KEY_UP: // Go to previous field form_driver(form, REQ_PREV_FIELD); form_driver(form, REQ_END_LINE); break; case 0x7F: form_driver(form, REQ_DEL_PREV); break; case KEY_LEFT: menu_driver(menu, REQ_LEFT_ITEM); break; case KEY_RIGHT: menu_driver(menu, REQ_RIGHT_ITEM); break; case 10: // Enter // When the user hits enter determine the currently selected // item and do nessary actions. currentItem = current_item(menu); itemName = item_name(currentItem); if (strcmp(itemName, choices[0]) == 0) { form_driver(form, REQ_VALIDATION); fieldBuffer = field_buffer(field[0], 0); if (fieldBuffer != NULL && strcmp(fieldBuffer, "") != 0) { if (team == NULL) { team = new FootBallTeam; game.setFootBallTeam(teamNumber, team); } team->setTeamName(fieldBuffer); } } // Delete allocated data delwin(window); unpost_form(form); free_form(form); unpost_menu(menu); free_menu(menu); for (unsigned i = 0; i < ARRAY_SIZE(field); i++) free_field(field[i]); for (int i = 0; i < nChoices-1; i++) free_item(items[i]); delete[] items; return; default: // If this is a normal character, it gets printed. form_driver(form, c); break; } } } }
static void demo_forms(void) { WINDOW *w; FORM *form; FIELD *f[100]; /* FIXME memset to zero */ int finished = 0, c; unsigned n = 0; int pg; WINDOW *also; #ifdef NCURSES_MOUSE_VERSION mousemask(ALL_MOUSE_EVENTS, (mmask_t *) 0); #endif help_edit_field(); MvAddStr(4, 57, "Forms Entry Test"); show_insert_mode(TRUE); refresh(); /* describe the form */ memset(f, 0, sizeof(f)); for (pg = 0; pg < 4; ++pg) { char label[80]; sprintf(label, "Sample Form Page %d", pg + 1); f[n++] = make_label(0, 15, label); set_new_page(f[n - 1], TRUE); switch (pg) { default: f[n++] = make_label(2, 0, "Last Name"); f[n++] = make_field(3, 0, 1, 18); set_field_type(f[n - 1], TYPE_ALPHA, 1); f[n++] = make_label(2, 20, "First Name"); f[n++] = make_field(3, 20, 1, 12); set_field_type(f[n - 1], TYPE_ALPHA, 1); f[n++] = make_label(2, 34, "Middle Name"); f[n++] = make_field(3, 34, 1, 12); set_field_type(f[n - 1], TYPE_ALPHA, 1); break; case 1: f[n++] = make_label(2, 0, "Last Name"); f[n++] = make_field(3, 0, 1, 18); set_field_type(f[n - 1], TYPE_ALPHA, 1); f[n++] = make_label(2, 20, "First Name"); f[n++] = make_field(3, 20, 1, 12); set_field_type(f[n - 1], TYPE_ALPHA, 1); f[n++] = make_label(2, 34, "MI"); f[n++] = make_field(3, 34, 1, 1); set_field_pad(f[n - 1], '?'); set_field_type(f[n - 1], TYPE_ALPHA, 1); break; case 2: f[n++] = make_label(2, 0, "Host Name"); f[n++] = make_field(3, 0, 1, 18); set_field_type(f[n - 1], TYPE_ALNUM, 1); #ifdef NCURSES_VERSION f[n++] = make_label(2, 20, "IP Address"); f[n++] = make_field(3, 20, 1, 12); set_field_type(f[n - 1], TYPE_IPV4, 1); #endif break; case 3: f[n++] = make_label(2, 0, "Four digits"); f[n++] = make_field(3, 0, 1, 18); set_field_type(f[n - 1], TYPE_INTEGER, 4, 0, 0); f[n++] = make_label(2, 20, "Numeric"); f[n++] = make_field(3, 20, 1, 12); set_field_type(f[n - 1], TYPE_NUMERIC, 3, -10000.0, 100000000.0); break; } f[n++] = make_label(5, 0, "Comments"); f[n++] = make_field(6, 0, 4, 46); set_field_buffer(f[n - 1], 0, "HELLO\nWORLD!"); set_field_buffer(f[n - 1], 1, "Hello\nWorld!"); } f[n] = (FIELD *) 0; if ((form = new_form(f)) != 0) { display_form(form); w = form_win(form); also = newwin(getmaxy(stdscr) - getmaxy(w), COLS, getmaxy(w), 0); show_current_field(also, form); while (!finished) { switch (edit_field(form, &c)) { case E_OK: break; case E_UNKNOWN_COMMAND: finished = my_form_driver(form, c); break; default: beep(); break; } show_current_field(also, form); } erase_form(form); free_form(form); } for (c = 0; f[c] != 0; c++) { void *ptr = field_userptr(f[c]); free(ptr); free_field(f[c]); } noraw(); nl(); #ifdef NCURSES_MOUSE_VERSION mousemask(0, (mmask_t *) 0); #endif }
int uponadd() { FIELD *field[3]; FORM *my_form; WINDOW *my_form_win; int ch, rows, cols; int ext=0; /* Initialize curses */ initscr(); start_color(); cbreak(); noecho(); keypad(stdscr, TRUE); /* Initialize few color pairs */ init_pair(1, COLOR_RED, COLOR_BLACK); /* Initialize the fields */ field[0] = new_field(1, 40, 1, 0, 0, 0); field[1] = new_field(1, 40, 3, 0, 0, 0); field[2] = NULL; /* Set field options */ set_field_back(field[0], A_UNDERLINE); field_opts_off(field[0], O_AUTOSKIP); /* Don't go to next field when this */ /* Field is filled up */ set_field_back(field[1], A_UNDERLINE); field_opts_off(field[1], O_AUTOSKIP); int trash =set_field_type(field[0],TYPE_ALPHA,1); trash=set_field_type(field[1],TYPE_INTEGER,1); /* Create the form and post it */ my_form = new_form(field); /* Calculate the area required for the form */ scale_form(my_form, &rows, &cols); /* Create the window to be associated with the form */ int xx,yy; getmaxyx(stdscr,yy,xx); my_form_win = newwin(rows + 4, cols + 4, (yy/2), (xx/2)-18); keypad(my_form_win, TRUE); /* Set main window and sub window */ set_form_win(my_form, my_form_win); set_form_sub(my_form, derwin(my_form_win,rows,cols,2,2)); /* Print a border around the main window and print a title */ box(my_form_win, 0, 0); print_in_middle(my_form_win, 1, 0, cols + 4, "Add contact", COLOR_PAIR(1)); post_form(my_form); wrefresh(my_form_win); mvprintw(LINES - 2, 0, "Use arrow keys to switch between fields | Press ESC to cancel"); move((y/2)+3,(x/2)-16); refresh(); /* Loop through to get user requests */ while((ch = wgetch(my_form_win)) != 27) { switch(ch) { case KEY_DOWN: /* Go to next field */ form_driver(my_form, REQ_NEXT_FIELD); /* Go to the end of the present buffer */ /* Leaves nicely at the last character */ form_driver(my_form, REQ_END_LINE); break; case KEY_UP: /* Go to previous field */ form_driver(my_form, REQ_PREV_FIELD); form_driver(my_form, REQ_END_LINE); break; case KEY_BACKSPACE: /* Go to previous field */ form_driver(my_form,REQ_DEL_PREV); break; case KEY_DC: form_driver(my_form,REQ_DEL_CHAR); break; case KEY_HOME: form_driver(my_form,REQ_BEG_FIELD); break; case KEY_END: form_driver(my_form,REQ_END_FIELD); break; case KEY_LEFT: form_driver(my_form,REQ_LEFT_CHAR); break; case KEY_RIGHT: form_driver(my_form,REQ_RIGHT_CHAR); break; case 9: form_driver(my_form,REQ_NEXT_FIELD); break; case 10: { char *str=malloc(1000); form_driver(my_form,REQ_BEG_FIELD); sprintf(str, "%s", field_buffer(field[0],0)); size_t len = 0; char *frontp = str - 1; char *endp = NULL; len = strlen(str); endp = str + len; while( isspace(*(++frontp)) ); while( isspace(*(--endp)) && endp != frontp ); if( str + len - 1 != endp ) *(endp + 1) = '\0'; else if( frontp != str && endp == frontp ) *str = '\0'; endp = str; if( frontp != str ) { while( *frontp ) *endp++ = *frontp++; *endp = '\0'; } char *stp=malloc(1000); strcpy(stp,str); //mvprintw(LINES - 3, 0, "%s %d",stp,strlen(stp)); //refresh(); sprintf(str, "%s", field_buffer(field[1],0)); len=0; frontp=str-1; endp=NULL; len = strlen(str); endp = str + len; while( isspace(*(++frontp)) ); while( isspace(*(--endp)) && endp != frontp ); if( str + len - 1 != endp ) *(endp + 1) = '\0'; else if( frontp != str && endp == frontp ) *str = '\0'; endp = str; if( frontp != str ) { while( *frontp ) *endp++ = *frontp++; *endp = '\0'; } if((strlen(stp)>0) && (strlen(str)>0)) { newcontact(stp,str); ext=1; } else if(strlen(str)==0) form_driver(my_form, REQ_NEXT_FIELD); } default: /* If this is a normal character, it gets */ /* Printed */ form_driver(my_form, ch); break; } if(ext==1) break; } /* Un post form and free the memory */ unpost_form(my_form); free_form(my_form); free_field(field[0]); free_field(field[1]); endwin(); return ext; }
void upon(char par[100]) { FIELD *field[2]; FORM *my_form; WINDOW *my_form_win; int ch, rows, cols; int ext=0; /* Initialize curses */ initscr(); start_color(); cbreak(); noecho(); keypad(stdscr, TRUE); /* Initialize few color pairs */ init_pair(1, COLOR_RED, COLOR_BLACK); /* Initialize the fields */ field[0] = new_field(1,40,0,0,0,0); //field[1] = new_field(1, 10, 8, 1, 0, 0); field[1] = NULL; /* Set field options */ set_field_back(field[0], A_UNDERLINE); field_opts_off(field[0], O_AUTOSKIP); /* Don't go to next field when this */ /* Field is filled up */ if(!strcmp("Search by number",par)) set_field_type(field[0],TYPE_INTEGER,1); else set_field_type(field[0],TYPE_ALPHA,1); // set_field_back(field[1], A_UNDERLINE); // field_opts_off(field[1], O_AUTOSKIP); // wmove(WINDOW *win, int y, int x); /* Create the form and post it */ my_form = new_form(field); /* Calculate the area required for the form */ scale_form(my_form, &rows, &cols); /* Create the window to be associated with the form */ my_form_win = newwin(rows + 4, cols + 4, (y/2), (x/2)-18); keypad(my_form_win, TRUE); /* Set main window and sub window */ set_form_win(my_form, my_form_win); // set_form_sub(my_form, derwin(my_form_win, rows, cols,2,2)); set_form_sub(my_form, derwin(my_form_win,rows,cols,2,2)); /* Print a border around the main window and print a title */ box(my_form_win,0,0); print_in_middle(my_form_win, 1, 0, cols + 4,par, COLOR_PAIR(1)); //mvwhline(my_form_win, 2, 1, ACS_HLINE, 43); post_form(my_form); wrefresh(my_form_win); mvprintw(LINES - 2, 0, "Press ESC to close the window"); move((y/2)+2,(x/2)-16); refresh(); /* Loop through to get user requests */ while((ch = wgetch(my_form_win)) != 27) { switch(ch) { case KEY_DOWN: /* Go to next field */ form_driver(my_form, REQ_NEXT_FIELD); /* Go to the end of the present buffer */ /* Leaves nicely at the last character */ form_driver(my_form, REQ_END_LINE); break; case KEY_UP: /* Go to previous field */ form_driver(my_form, REQ_PREV_FIELD); form_driver(my_form, REQ_END_LINE); break; case KEY_BACKSPACE: /* Go to previous field */ form_driver(my_form,REQ_DEL_PREV); break; case KEY_DC: form_driver(my_form,REQ_DEL_CHAR); break; case KEY_HOME: form_driver(my_form,REQ_BEG_FIELD); break; case KEY_END: form_driver(my_form,REQ_END_FIELD); break; case KEY_LEFT: form_driver(my_form,REQ_LEFT_CHAR); break; case KEY_RIGHT: form_driver(my_form,REQ_RIGHT_CHAR); break; case 10: { str=malloc(1000); form_driver(my_form,REQ_BEG_FIELD); sprintf(str, "%s", field_buffer(field[0],0)); size_t len = 0; char *frontp = str - 1; char *endp = NULL; len = strlen(str); endp = str + len; while( isspace(*(++frontp)) ); while( isspace(*(--endp)) && endp != frontp ); if( str + len - 1 != endp ) *(endp + 1) = '\0'; else if( frontp != str && endp == frontp ) *str = '\0'; endp = str; if( frontp != str ) { while( *frontp ) *endp++ = *frontp++; *endp = '\0'; } // mvprintw(LINES - 2, 0, "%s %d",str,strlen(str)); // refresh(); ext=1; if(!strcmp("Search by name",par)) find(str); else if (!strcmp("Search by number",par)) findnumber(str); else if (!strcmp("Enter contact name to remove",par)) del(str); break; } default: /* If this is a normal character, it gets */ /* Printed */ form_driver(my_form, ch); break; } if(ext==1) break; } /* Un post form and free the memory */ unpost_form(my_form); free_form(my_form); free_field(field[0]); free_field(field[1]); // return 0; }
/* setup ballistic coefficient calculation */ void calc_bc(void) { int i; /* use global form handler function */ handler = FORM_HANDLER; /* setup background */ formbg(); /* set changable field attributes */ set_field_fore(NULL, COLOR_PAIR(MENU_PAIR) | A_STANDOUT | A_DIM); set_field_back(NULL, COLOR_PAIR(MENU_PAIR) | A_REVERSE | A_DIM); /* field_opts_off(NULL, O_BLANK); */ /* create float form items */ set_field_type(NULL, TYPE_NUMERIC, FORM_FIELD_WIDTH, 0.0, 5000.0); field_items_ptr[0] = new_field(1,FORM_FIELD_WIDTH,1,1,0,0); /* X0 */ field_items_ptr[1] = new_field(1,FORM_FIELD_WIDTH,2,1,0,0); /* V0 */ field_items_ptr[2] = new_field(1,FORM_FIELD_WIDTH,4,1,0,0); /* X1 */ field_items_ptr[3] = new_field(1,FORM_FIELD_WIDTH,5,1,0,0); /* V1 */ /* create field labels */ set_field_fore(NULL, COLOR_PAIR(BG_PAIR)); set_field_back(NULL, COLOR_PAIR(BG_PAIR)); field_items_ptr[4] = new_field(1,CALC_BC_WIDTH,1,10,0,0); field_items_ptr[5] = new_field(1,CALC_BC_WIDTH,2,10,0,0); field_items_ptr[6] = new_field(1,CALC_BC_WIDTH,4,10,0,0); field_items_ptr[7] = new_field(1,CALC_BC_WIDTH,5,10,0,0); /* done button */ set_field_fore(NULL, COLOR_PAIR(BG_PAIR) | A_REVERSE | A_DIM); set_field_back(NULL, COLOR_PAIR(BG_PAIR) | A_REVERSE | A_DIM); field_items_ptr[8] = new_field(1,8,7,10,0,0); done_field = 8; /* end of items */ field_items_ptr[9] = NULL; /* set input field options */ for(i=0; i<4; i++) field_opts_off(field_items_ptr[i], O_NULLOK); /* put labels into the items */ if(calcparam.units == ENGLISH) { for(i=4; i <= 7; i++) { set_field_buffer(field_items_ptr[i],0,calc_bc_e[i-4]); field_opts_off(field_items_ptr[i], O_ACTIVE | O_EDIT); } } else { for(i=4; i <= 7; i++) { set_field_buffer(field_items_ptr[i],0,calc_bc_m[i-4]); field_opts_off(field_items_ptr[i], O_ACTIVE | O_EDIT); } } set_field_buffer(field_items_ptr[done_field],0,done_str); /* create new form */ form_ptr = new_form(field_items_ptr); /* setup form handler functions */ set_form_init(form_ptr, calc_bc_form_init); set_form_term(form_ptr, calc_bc_form_term); /* set place to return when form is done */ set_form_userptr(form_ptr,show_calc_bc); }
/* setup modify bullet menu */ void modify_parameters(void) { int i; /* set correct handler */ handler = FORM_HANDLER; /* setup background */ formbg(); /* set changable field attributes */ set_field_fore(NULL, COLOR_PAIR(FORM_FIELD_PAIR) | A_NORMAL); set_field_back(NULL, COLOR_PAIR(FORM_FIELD_PAIR) | A_REVERSE); /* create float form items */ set_field_type(NULL, TYPE_NUMERIC, 4, 0.0, 0.0); /* 10 fields, numbered as follows: 0. B.C. 1. bullet weight 2. wind 3. muzzle velocity 4. sight height 5. zero distance 6. elevation angle 7. starting range 8. ending range 9. step size */ for (i=0; i<10; i++) field_items_ptr[i] = new_field(1,8,i+1,1,0,0); /* B.C. */ /* create field labels */ set_field_fore(NULL, COLOR_PAIR(BG_PAIR)); set_field_back(NULL, COLOR_PAIR(BG_PAIR)); for (i=10; i<20; i++) field_items_ptr[i] = new_field(1,PARAMETERS_WIDTH,i-9,10,0,0); /* done button */ set_field_fore(NULL, COLOR_PAIR(BG_PAIR) | A_REVERSE | A_DIM); set_field_back(NULL, COLOR_PAIR(BG_PAIR) | A_REVERSE | A_DIM); field_items_ptr[20] = new_field(1,8,12,10,0,0); done_field = 20; field_items_ptr[21] = NULL; /* set input field options */ for(i=0; i<9; i++) field_opts_off(field_items_ptr[i], O_NULLOK); /* put labels onto the items */ if(calcparam.units == ENGLISH) { for(i=10; i <= 19; i++) { set_field_buffer(field_items_ptr[i],0,calculation_parameters_e[i-10]); field_opts_off(field_items_ptr[i], O_ACTIVE | O_EDIT); } } else { for(i=10; i <= 19; i++) { set_field_buffer(field_items_ptr[i],0,calculation_parameters_m[i-10]); field_opts_off(field_items_ptr[i], O_ACTIVE | O_EDIT); } } /* label done button */ set_field_buffer(field_items_ptr[20],0,done_str); field_opts_off(field_items_ptr[20], O_EDIT); /* create new form */ form_ptr = new_form(field_items_ptr); /* setup form handler functions */ set_form_init(form_ptr, modify_parameters_form_init); set_form_term(form_ptr, modify_parameters_form_term); /* go to main menu when form is done */ set_form_userptr(form_ptr,create_mainmenu); }
/* * Add a field to the form. * Automatically creates a label component. * Include | in your label to designate a field's initial content. */ void DialogForm::addField(const std::string &lbl, int rows, int cols, int x, int y, FieldType type, int *typeParams, int nParams, FIELD** pField) { //Split the label and field contents. int i; std::string contents, label; i = lbl.find_first_of('|'); if (i != std::string::npos) { //Put content after | in field contents = lbl.substr(i + 1); label = lbl.substr(0, i); } else { contents = ""; label = lbl; } //Create the field. if (rows == 1) { //Offset x by label strLen m_pFields[m_curField] = new_field(rows, cols, y + 1, label.size() + x, 0, 0); } else { //Position field under label m_pFields[m_curField] = new_field(rows, cols, y + 2, x, 0, 0); } set_field_buffer(m_pFields[m_curField], 0, contents.data()); //Set up field validation. if (type == FIELDTYPE_ALPHA) { if (typeParams == 0) { set_field_type(m_pFields[m_curField], TYPE_ALPHA, 1); } else if (nParams == 1) { set_field_type(m_pFields[m_curField], TYPE_ALPHA, typeParams[0]); } } else if (type == FIELDTYPE_INT) { if (typeParams == 0) { set_field_type(m_pFields[m_curField], TYPE_INTEGER, 0); } else if (nParams == 1) { set_field_type(m_pFields[m_curField], TYPE_INTEGER, typeParams[0]); } else if (nParams == 3) { set_field_type(m_pFields[m_curField], TYPE_INTEGER, typeParams[0], typeParams[1], typeParams[2]); } } else if (type == FIELDTYPE_FLOAT) { if (typeParams == 0) { set_field_type(m_pFields[m_curField], TYPE_NUMERIC, 0); } else if (nParams == 1) { set_field_type(m_pFields[m_curField], TYPE_NUMERIC, typeParams[0]); } else if (nParams == 3) { // set_field_type(m_pFields[m_curField], TYPE_NUMERIC, typeParams[0], typeParams[1], typeParams[2]); } } set_field_userptr(m_pFields[m_curField], (void*)new FieldType(type)); set_field_back(m_pFields[m_curField], A_UNDERLINE); if (rows == 1) { field_opts_off(m_pFields[m_curField], O_AUTOSKIP); } //Create the label Label* pLabel = new Label(this, label, x + 1, y + 3); add(pLabel); //Return pointer if (pField != 0) { *pField = m_pFields[m_curField]; } m_curField++; }
void getDateTime(char *startdatetime, char *enddatetime){ FIELD *field[5]; FORM *my_form; int ch; int contLoop=1; char *temp = (char*)malloc(50*sizeof(char)); char *month = (char*)malloc(3*sizeof(char)); char *day = (char*)malloc(3*sizeof(char)); char *year = (char*)malloc(5*sizeof(char)); char *hr = (char*)malloc(3*sizeof(char)); char *min = (char*)malloc(3*sizeof(char)); startdatetime = (char *)malloc(13*sizeof(char)); enddatetime = (char *)malloc(13*sizeof(char)); /* Initialize the fields */ field[0] = new_field(1, 2, 6, 5, 0, 0); field[1] = new_field(1, 2, 6, 8, 0, 0); field[2] = new_field(1, 4, 6, 11, 0, 0); field[3] = new_field(1, 2, 6, 26, 0, 0); field[4] = new_field(1, 2, 6, 29, 0, 0); /* Set field options */ set_field_back(field[0], A_UNDERLINE); field_opts_off(field[0], O_NULLOK+O_BLANK); set_field_type(field[0], TYPE_INTEGER,2,1,12); set_field_back(field[1], A_UNDERLINE); field_opts_off(field[1], O_NULLOK+O_BLANK); set_field_type(field[1], TYPE_INTEGER,2,1,31); set_field_back(field[2], A_UNDERLINE); field_opts_off(field[2], O_NULLOK+O_BLANK); set_field_type(field[2], TYPE_INTEGER,4,0,9999); set_field_back(field[3], A_UNDERLINE); field_opts_off(field[3], O_NULLOK+O_BLANK); set_field_type(field[3], TYPE_INTEGER,2,0,23); set_field_back(field[4], A_UNDERLINE); field_opts_off(field[4], O_NULLOK+O_BLANK); set_field_type(field[4], TYPE_INTEGER,2,0,59); /* Create the form and post it */ my_form = new_form(field); post_form(my_form); mvprintw(0,0,"iCal Generator\nWritten by Derek Redfern"); mvprintw(3,1,"Use arrow keys to navigate; press Enter to proceed\n"); mvprintw(5,5,"Start date:"); mvprintw(5,26,"Start time:"); mvprintw(6,7,"/"); mvprintw(6,10,"/"); mvprintw(6,28,":"); refresh(); //getch(); form_driver(my_form, REQ_FIRST_FIELD); get_input(my_form,field); strcpy(month,field_buffer(field[0],0)); strcpy(day,field_buffer(field[1],0)); strcpy(year,field_buffer(field[2],0)); strcpy(hr,field_buffer(field[3],0)); strcpy(min,field_buffer(field[4],0)); strcpy(startdatetime,year); strcat(startdatetime,month); strcat(startdatetime,day); strcat(startdatetime,"T"); strcat(startdatetime,hr); strcat(startdatetime,min); int i; for(i=0;i<5;i++){ set_field_buffer(field[i],0,""); } refresh(); unpost_form(my_form); free_form(my_form); move_field(field[0],9,5); move_field(field[1],9,8); move_field(field[2],9,11); move_field(field[3],9,26); move_field(field[4],9,29); my_form=new_form(field); post_form(my_form); refresh(); mvprintw(0,0,"iCal Generator\nWritten by Derek Redfern"); mvprintw(3,1,"Use arrow keys to navigate; press Enter to proceed\n"); mvprintw(5,5,"Start date:"); mvprintw(5,26,"Start time:"); mvprintw(6,5,"%s/%s/%s",month,day,year); mvprintw(6,26,"%s:%s",hr,min); mvprintw(8,5,"End date:"); mvprintw(8,26,"End time:"); mvprintw(9,7,"/"); mvprintw(9,10,"/"); mvprintw(9,28,":"); form_driver(my_form, REQ_FIRST_FIELD); get_input(my_form,field); strcpy(enddatetime,field_buffer(field[2],0)); strcat(enddatetime,field_buffer(field[0],0)); strcat(enddatetime,field_buffer(field[1],0)); strcat(enddatetime,"T"); strcat(enddatetime,field_buffer(field[3],0)); strcat(enddatetime,field_buffer(field[4],0)); unpost_form(my_form); free_form(my_form); free_field(field[0]); free_field(field[1]); free_field(field[2]); free_field(field[3]); free_field(field[4]); }
int main() { int ch, done; ITEM *cur; /* coreboot data structures */ lib_get_sysinfo(); struct cb_cmos_option_table *opttbl = get_system_option_table(); if (opttbl == NULL) { printf("Could not find coreboot option table\n"); halt(); } /* display initialization */ initscr(); keypad(stdscr, TRUE); cbreak(); noecho(); start_color(); leaveok(stdscr, TRUE); curs_set(1); erase(); box(stdscr, 0, 0); mvaddstr(0, 2, "coreboot configuration utility"); /* prep CMOS layout into libcurses data structures */ /* determine number of options, and maximum option name length */ int numopts=0; int maxlength=0; struct cb_cmos_entries *option = first_cmos_entry(opttbl); while (option) { if ((option->config != 'r') && (strcmp("check_sum", option->name) != 0)) { maxlength = max(maxlength, strlen(option->name)); numopts++; } option = next_cmos_entry(option); } if (numopts == 0) { printf("NO CMOS OPTIONS FOUND. EXITING!!!"); return 1; } FIELD **fields = malloc(sizeof(FIELD*)*(2*numopts+1)); int i; /* walk over options, fetch details */ option = first_cmos_entry(opttbl); for (i=0;i<numopts;i++) { while ((option->config == 'r') || (strcmp("check_sum", option->name) == 0)) { option = next_cmos_entry(option); } fields[2*i] = new_field(1, strlen(option->name), i*2, 1, 0, 0); set_field_buffer(fields[2*i], 0, option->name); field_opts_off(fields[2*i], O_ACTIVE); fields[2*i+1] = new_field(1, 40, i*2, maxlength+2, 0, 0); char *buf = NULL; int fail = get_option_as_string(use_nvram, opttbl, &buf, option->name); switch (option->config) { case 'h': { set_field_type(fields[2*i+1], TYPE_INTEGER, 0, 0, (1<<option->length)-1); field_opts_on(fields[2*i+1], O_BLANK); break; } case 's': { set_max_field(fields[2*i+1], option->length/8); field_opts_off(fields[2*i+1], O_STATIC); break; } case 'e': { int numvals = 0; struct cb_cmos_enums *cmos_enum = first_cmos_enum_of_id(opttbl, option->config_id); /* if invalid data in CMOS, set buf to first enum */ if (fail && cmos_enum) { buf = cmos_enum->text; } while (cmos_enum) { numvals++; cmos_enum = next_cmos_enum_of_id(cmos_enum, option->config_id); } char **values = malloc(sizeof(char*)*numvals + 1); int cnt = 0; cmos_enum = first_cmos_enum_of_id(opttbl, option->config_id); while (cmos_enum) { values[cnt] = cmos_enum->text; cnt++; cmos_enum = next_cmos_enum_of_id(cmos_enum, option->config_id); } values[cnt] = NULL; field_opts_off(fields[2*i+1], O_EDIT); set_field_type(fields[2*i+1], TYPE_ENUM, values, 1, 1); free(values); // copied by set_field_type break; } default: break; } if (buf) set_field_buffer(fields[2*i+1], 0, buf); #if HOSTED // underline is non-trivial on VGA text set_field_back(fields[2*i+1], A_UNDERLINE); #endif field_opts_off(fields[2*i+1], O_BLANK | O_AUTOSKIP | O_NULLOK); option = next_cmos_entry(option); } fields[2*numopts]=NULL; FORM *form = new_form(fields); int numlines = min(numopts*2, 16); WINDOW *w = newwin(numlines+2, 70, 2, 1); WINDOW *inner_w = newpad(numopts*2, 68); box(w, 0, 0); mvwaddstr(w, 0, 2, "Press F1 when done"); set_form_win(form, w); set_form_sub(form, inner_w); post_form(form); done = 0; while(!done) { ch=getch(); if (ch == ERR) continue; switch (ch) { case KEY_DOWN: form_driver(form, REQ_NEXT_FIELD); break; case KEY_UP: form_driver(form, REQ_PREV_FIELD); break; case KEY_LEFT: if (field_type(current_field(form)) == TYPE_ENUM) { form_driver(form, REQ_PREV_CHOICE); } else { form_driver(form, REQ_LEFT_CHAR); } break; case KEY_RIGHT: if (field_type(current_field(form)) == TYPE_ENUM) { form_driver(form, REQ_NEXT_CHOICE); } else { form_driver(form, REQ_RIGHT_CHAR); } break; case KEY_BACKSPACE: case '\b': form_driver(form, REQ_DEL_PREV); break; case KEY_DC: form_driver(form, REQ_DEL_CHAR); break; case KEY_F(1): done=1; break; default: form_driver(form, ch); break; } render_form(form); } for (i = 0; i < numopts; i++) { char *name = field_buffer(fields[2*i], 0); char *value = field_buffer(fields[2*i+1], 0); char *ptr; for (ptr = value + strlen (value) - 1; ptr >= value && *ptr == ' '; ptr--); ptr[1] = '\0'; set_option_from_string(use_nvram, opttbl, value, name); } unpost_form(form); free_form(form); touchwin(stdscr); refresh(); endwin(); /* TODO: reboot */ halt(); }