Beispiel #1
0
/*
 * 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;
	}
}
Beispiel #3
0
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);
}
Beispiel #4
0
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();
}
Beispiel #5
0
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;
      }
    }
  }
}
Beispiel #6
0
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;
      }
    }
  }
}
Beispiel #7
0
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
}
Beispiel #8
0
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;
}
Beispiel #9
0
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;
}
Beispiel #10
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);

}
Beispiel #12
0
/*
 * 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++;
}
Beispiel #13
0
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]); 
}
Beispiel #14
0
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();
}