コード例 #1
0
void create_device_name_form(void)
{
	fields[0] = new_field(1, 32, 1, 1, 0, 0);
	if (!fields[0])
		fatal_error("cannot create field");
	field_opts_off(fields[0], O_ACTIVE);
	field_opts_off(fields[0], O_EDIT);
	set_field_fore(fields[0], attr_textbox);
	set_field_back(fields[0], attr_textbox);
	set_field_buffer(fields[0], 0, _("Device name:"));

	fields[1] = new_field(1, 32, 2, 1, 0, 0);
	if (!fields[1])
		fatal_error("cannot create field");
	field_opts_off(fields[1], O_AUTOSKIP);
	field_opts_off(fields[1], O_NULLOK);
	field_opts_off(fields[1], O_STATIC);
	set_field_fore(fields[1], attr_textfield);
	set_field_back(fields[1], attr_textfield);
	set_field_buffer(fields[1], 0, mixer_device_name);

	form = new_form(fields);
	if (!form)
		fatal_error("cannot create form");

	if (!create())
		return;

	post_form(form);
}
コード例 #2
0
ファイル: wdg_input.c プロジェクト: AntonioCollarino/ettercap
/* 
 * add a field to the form 
 */
void wdg_input_add(wdg_t *wo, size_t x, size_t y, const char *caption, char *buf, size_t len, size_t lines)
{
   WDG_WO_EXT(struct wdg_input_handle, ww);
   
   ww->nfields += 2;
   WDG_SAFE_REALLOC(ww->fields, ww->nfields * sizeof(FIELD *));

   /* remember the pointer to the real buffer (to be used in consolidate) */
   WDG_SAFE_REALLOC(ww->buffers, (ww->nfields/2 + 1) * sizeof(char *));
   ww->buffers[ww->nfields/2 - 1] = buf;
   ww->buffers[ww->nfields/2] = NULL;

   /* create the caption */
   ww->fields[ww->nfields - 2] = new_field(1, strlen(caption), y, x, 0, 0);
   set_field_buffer(ww->fields[ww->nfields - 2], 0, caption);
   field_opts_off(ww->fields[ww->nfields - 2], O_ACTIVE);
   set_field_fore(ww->fields[ww->nfields - 2], COLOR_PAIR(wo->focus_color));

   /* and the modifiable field */
   ww->fields[ww->nfields - 1] = new_field(lines, len, y, x + strlen(caption) + 2, 0, 0);
   set_field_back(ww->fields[ww->nfields - 1], A_UNDERLINE);
   field_opts_off(ww->fields[ww->nfields - 1], O_WRAP);
   set_field_buffer(ww->fields[ww->nfields - 1], 0, buf);
   set_field_fore(ww->fields[ww->nfields - 1], COLOR_PAIR(wo->window_color));
   
   /* null terminate the array */
   WDG_SAFE_REALLOC(ww->fields, (ww->nfields + 1) * sizeof(FIELD *));
   ww->fields[ww->nfields] = NULL;

}
コード例 #3
0
ファイル: demo_forms.c プロジェクト: geho/android_ncurses
/*
 * Define each field with an extra one, for reflecting "actual" text.
 */
static FIELD *
make_field(int frow, int fcol, int rows, int cols)
{
    FIELD *f = new_field(rows, cols, frow, fcol, o_value, 1);

    if (f) {
	FieldAttrs *ptr;

	set_field_back(f, A_UNDERLINE);
	/*
	 * If -j and -d options are combined, -j loses.  It is documented in
	 * "Character User Interface Programming", page 12-15 that setting
	 * O_STATIC off makes the form library ignore justification.
	 */
	set_field_just(f, j_value);
	if (d_option) {
	    if (has_colors()) {
		set_field_fore(f, (chtype) COLOR_PAIR(2));
		set_field_back(f, A_UNDERLINE | COLOR_PAIR(3));
	    } else {
		set_field_fore(f, A_BOLD);
	    }
	    /*
	     * The field_opts_off() call dumps core with Solaris curses,
	     * but that is a known bug in Solaris' form library -TD
	     */
	    field_opts_off(f, O_STATIC);
	    set_max_field(f, m_value);
	}

	/*
	 * The userptr is used in edit_field.c's inactive_field().
	 */
	ptr = (FieldAttrs *) field_userptr(f);
	if (ptr == 0) {
	    ptr = typeCalloc(FieldAttrs, 1);
	    ptr->background = field_back(f);
	}
	set_field_userptr(f, (void *) ptr);
	if (t_value)
	    set_field_buffer(f, 0, t_value);
    }
    return (f);
}
コード例 #4
0
ファイル: term.c プロジェクト: lchsk/xstarter
void
init_term_gui(void)
{
    /* Fix ESC key */
    set_escdelay(25);

    initscr();
    start_color();
    cbreak();
    noecho();

    if (can_change_color()) {
        init_color(XS_COLOR_BLUE, 43, 180, 349);
        init_color(XS_COLOR_RED, 886, 27, 124);
        init_pair(XS_COLOR_PAIR_1, COLOR_WHITE, XS_COLOR_RED);
        init_pair(XS_COLOR_PAIR_2, COLOR_WHITE, XS_COLOR_BLUE);
    } else{
        init_pair(XS_COLOR_PAIR_1, COLOR_WHITE, COLOR_RED);
        init_pair(XS_COLOR_PAIR_2, COLOR_WHITE, COLOR_BLUE);
    }

    /* int max_rows; */
    /* int max_cols; */

    /* getmaxyx(stdscr, max_rows, max_cols); */

    show_recent_apps();
    prepare_for_new_results(False);

    mvprintw(0, 0, "$");
    mvwprintw(window, MAX_Y - 2, 0, "Loading paths...");

    refresh();

    field[0] = new_field(
        1, // columns
        20, // width
        0, // pos y
        2, // pos x
        0,
        0
    );

    /* Hide cursor */
    curs_set(0);

    set_field_fore(field[0], COLOR_PAIR(XS_COLOR_PAIR_2));
    field[1] = NULL;

    form = new_form(field);
    post_form(form);

    wrefresh(window);
}
コード例 #5
0
ファイル: viper_forms.c プロジェクト: TragicWarrior/libviper
void viper_form_colorize(FORM *form,chtype field_active,chtype field_normal,
   chtype text_active,chtype text_normal)
{
   FIELD **fields;

   fields=form_fields(form);
   while(*fields!=NULL)
   {
      if(*fields==current_field(form))
      {
         set_field_fore(*fields,text_active);
         set_field_back(*fields,field_active);
      }
      else
      {
         set_field_fore(*fields,text_normal);
         set_field_back(*fields,field_normal);
      }
      
      fields++;
   }

   return;
}
コード例 #6
0
ファイル: form.c プロジェクト: smsajid/scdk
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();
}
コード例 #7
0
ファイル: main.c プロジェクト: alivardar/acikisletme
int kullanici_onayla()
{
	FIELD *field[3];
	FORM  *my_form;
	int ch;

	touchwin(ana_win);
	wrefresh(ana_win);
			
	init_pair(1, COLOR_WHITE, COLOR_BLUE);
	init_pair(2, COLOR_WHITE, COLOR_BLUE);
		
/*calisma yili 4 karakter*/
	field[0] = new_field(1, 10, 18, 42, 0, 0);
/*firma 2 karakter*/
	field[1] = new_field(1, 10, 20, 42, 0, 0);
	field[2] = NULL;

	set_field_fore(field[0], COLOR_PAIR(1));
	set_field_fore(field[1], COLOR_PAIR(1));
/*geri plan rengi olsun*/
	set_field_back(field[0], COLOR_PAIR(2));
	set_field_back(field[1], COLOR_PAIR(2));
/*
	set_field_type(field[0], TYPE_INTEGER);
	set_field_type(field[1], TYPE_INTEGER);
*/
	field_opts_off(field[0], O_AUTOSKIP); 
	field_opts_off(field[1], O_AUTOSKIP); 

/*sifre alani olan ikinci field password biçiminde olmali/
	field_opts_off(field[1], O_PUBLIC);

	/*geri plan rengi olmasin*/
/*	set_field_back(field[0], A_UNDERLINE); 
	set_field_back(field[1], A_UNDERLINE); 
*/
	my_form = new_form(field);
	post_form(my_form);
	refresh();
	
	set_current_field(my_form, field[0]); 

	mvprintw(18, 25, _("User name :") );
	mvprintw(20, 25, _("Password  :"******"This application under GPL license.") );
attroff(A_BLINK);
attroff(A_BOLD);

attron(A_BOLD);
mvprintw(LINES-3, 5, _("F2-> Begin                                               ESC-> Cancel") );
mvprintw(18, 5, _("F5-> Settings") );
attroff(A_BOLD);

mvprintw(7,3, _("                               Acik                          "));
mvprintw(8,3,"  _|              _|                _|                                  ");
mvprintw(9,3,"         _|_|_|   _|     _|_|     _|_|_|_|   _|_|_|  _|_|       _|_|    ");
mvprintw(10,3,"  _|   _|_|       _|   _|_|_|_|     _|       _|    _|    _|   _|_|_|_|  ");
mvprintw(11,3,"  _|       _|_|   _|   _|           _|       _|    _|    _|   _|        ");
mvprintw(12,3,"  _|   _|_|_|     _|     _|_|_|       _|_|   _|    _|    _|     _|_|_|  ");
refresh();
    while((ch = getch()) )
	{	switch(ch)
		{	
		case 8: /*KEY_BACKSPACE hatali kod vermekte 8 dogru olandir konsolda 8 xterm key_backspace*/
    		form_driver(my_form, REQ_PREV_CHAR);
			form_driver(my_form, REQ_DEL_CHAR);
			break;
		case KEY_BACKSPACE: 
    		form_driver(my_form, REQ_PREV_CHAR);
			form_driver(my_form, REQ_DEL_CHAR);
			break;		
		case 9: /*TAB tusuna basýlmasý durumunda sonraki field konumlan*/
			form_driver(my_form, REQ_NEXT_FIELD);
			form_driver(my_form, REQ_END_LINE);
			break;		
		case 10: /*ENTER tuþuna basýlmasý durumunda sonraki feild gececek*/
			form_driver(my_form, REQ_NEXT_FIELD);
			form_driver(my_form, REQ_END_LINE);
			break;		
		case KEY_DC:	/*del tusu*/		
    		form_driver(my_form,REQ_DEL_CHAR);
			break;			
		case KEY_HOME:
			form_driver(my_form,REQ_BEG_LINE);
			break;						
		case KEY_END:
			form_driver(my_form,REQ_END_LINE);
			break;
		case KEY_DOWN:
			form_driver(my_form, REQ_NEXT_FIELD);
			form_driver(my_form, REQ_END_LINE);
			break;
		case KEY_UP:
			form_driver(my_form, REQ_PREV_FIELD);
			form_driver(my_form, REQ_END_LINE);
			break;
		case KEY_LEFT:
    			form_driver(my_form,REQ_LEFT_CHAR);
			break;
		case KEY_RIGHT:
    			form_driver(my_form,REQ_RIGHT_CHAR);
			break;
		case 27: /*esc durumunda*/
				unpost_form(my_form);
				free_form(my_form);
				free_field(field[0]);
				free_field(field[1]); 
				endwin();
				exit(0);	
				break;
		
		case KEY_F(5): 	/*ayarlara gecis*/
				ayarlar();
				
				unpost_form(my_form);
				free_form(my_form);
				free_field(field[0]);
				free_field(field[1]);
				
				endwin();
		
				exit (0);
				break;
				case KEY_F(2): 	/*f2 durumunda*/
				form_driver(my_form, REQ_PREV_FIELD);
				strcpy(query, "select kullanici, sifre, haklar from kullanicilar");
		
				if ( pgsql_sorgula(query) ==1 ) { mesaj(sql_sorgulama_hatasi); return 1;}
	
				for (i=0;i<pgsql_row_miktar;i++)
					{						
					sprintf(kullanici,"%s", pgsql_kayit_field() );
					sprintf(sifre,"%s", pgsql_kayit_field() );
					sprintf(haklar,"%s", pgsql_kayit_field() );

					if ( strcmp(g_strstrip(field_buffer(field[0],0)), kullanici) ==NULL )
						{
						if  ( (sifre_kripto_coz( g_strstrip(field_buffer(field[1],0)) , sifre) == 0) || (strcmp(g_strstrip(field_buffer(field[1],0)), sifre) == NULL ) )
							{
							//kullanýcý root ise haklar full olmalý 
							//databaseden degistirme ihtimali olabilir								
							if ( strstr( kullanici, "root") ) 
							{sprintf(haklar,"%s", "1111111111111111111111111111111111111111111111111111111111111111");}
												
							beep();
						
							unpost_form(my_form);
							free_form(my_form);
							free_field(field[0]);
							free_field(field[1]);
							touchwin(ana_win);
							wrefresh(ana_win);							
															
							return;
								
							}
							else
							{							
							set_field_buffer(field[0],0," ");
							set_field_buffer(field[1],0," ");
							refresh();	
							//beep sesi							
							beep();
							
							}
						}
					}
			
													
				break;
			
			default:
				form_driver(my_form, ch);
				break;

		}
	}

return 0;
/*son*/
}
コード例 #8
0
ファイル: formularios.c プロジェクト: canicue/Seminario
int main(int argc, const char *argv[])
{
	initscr();
	keypad(stdscr,TRUE);
	cbreak();
	colores();
	FIELD *campos[2];
	FIELD *campo=new_field(1,15,4,18,0,0);
	FIELD *campo_dos=new_field(1,10,6,18,0,0);
	
	campos[0]=campo;
	campos[1]=campo_dos;
	campos[2]=NULL;

	set_field_fore(campos[0],COLOR_PAIR(1));
	set_field_back(campos[0],COLOR_PAIR(2));
//	set_field_opts(campos[0],O_ACTIVE);
	set_field_back(campos[0],A_UNDERLINE);
//field_opts_off(campos[0],O_AUTOSKIP);
	set_field_back(campos[1],A_UNDERLINE);
//	field_opts_off(campos[1],O_AUTOSKIP);
	FORM *formulario=new_form(campos);

//	noecho();
	box(stdscr,0,0);
	set_form_win(formulario,stdscr);
	post_form(formulario);
	refresh();
	mvprintw(4, 10, "Value 1:");
mvprintw(6, 10, "Value 1:");
//------

    while((ch = getch()) != KEY_F(1))
    {   switch(ch)
        {   case KEY_DOWN:
                /* Go to next field */
                form_driver(formulario, REQ_NEXT_FIELD);
                /* Go to the end of the present buffer */
                /* Leaves nicely at the last character */
                form_driver(formulario, REQ_END_LINE);
                break;
            case KEY_UP:
                /* Go to previous field */
                form_driver(formulario, REQ_PREV_FIELD);
                form_driver(formulario, REQ_END_LINE);
                break;
            default:
                /* If this is a normal character, it gets */
                /* Printed                */
                form_driver(formulario, ch);
                break;
        }
    }









//------









//respuesta(formulario);
//getch();
endwin();	
	return 0;
}
コード例 #9
0
ファイル: calc_bc.c プロジェクト: topgenorth/saballistics
/* 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);

}
コード例 #10
0
ファイル: ncurses_form2_test.c プロジェクト: MAJ-/nerdulary
int main(void)
{
  int ch, i;

  initscr();
  atexit(quit);
  clear();
  noecho();
  cbreak();
  keypad(stdscr, TRUE);
  start_color();

  init_pair(1, COLOR_YELLOW, COLOR_BLUE);
  init_pair(2, COLOR_BLACK, COLOR_WHITE);

  bkgd(COLOR_PAIR(1));

  fi = (FIELD **)calloc(4, sizeof(FIELD *));
  fi[0] = new_field(1, 10, 2, 3, 0, 0);
  fi[1] = new_field(1, 10, 2, 18, 0, 0);
  fi[2] = new_field(1, 15, 2, 33, 0, 0);
  fi[3] = 0;

  for(i=0; i<3; i++)
  {
    set_field_fore(fi[i], COLOR_PAIR(2));
    set_field_back(fi[i], COLOR_PAIR(2));
  }

  fo = new_form(fi);
  post_form(fo);        

  mvaddstr(2, 15, "+");
  mvaddstr(2, 30, "=");
  mvaddstr(5, 3, "Programm mittels F1-Funktionstaste beenden");

  refresh();
 
  while((ch=getch()) != KEY_F(1))
  {
    switch(ch)
    {
      case KEY_RIGHT:
      { 
        char str[20];
                                                        
        form_driver(fo, REQ_NEXT_FIELD);

        if(field_index(current_field(fo)) == 2)
        {
          snprintf(str, 20, "%s%s", field_buffer(fi[0], 0), field_buffer(fi[1], 0));
          set_field_buffer(fi[2], 0, str);
          refresh();
        }
        break;
      }
      case KEY_LEFT:
        form_driver(fo, REQ_PREV_FIELD);
        break;
      default: /* Feldeingabe */        
        form_driver(fo, ch);
    }
  }   
  return (0);  
}
コード例 #11
0
/* 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);

}
コード例 #12
0
ファイル: eq.c プロジェクト: dsheeler/krad_radio
int eq_run (kr_client_t *client, char *sysname) {

	WINDOW *eq_win,*tmpw;
	PANEL  *eq_mainpan,*eq_subpan,*ctrl_subp;
	FORM *eq_form;
	FIELD **field;
	FIELD **ctrl_field;
	FORM *ctrl_form;


  /* Panels Structs */
  ctrls_show_t *ctrls;
  eq_port_t *eqport;

  db_show_t *db;
  hz_show_t *hz;
  bw_show_t *bw;

  eq_saved_val_t *vals;

	int i;
	int max_co,subx,suby,gap;
	int offs = 0;
	int field_idx;
	int in_ctrl = 0;
  int nbands = KRAD_EQ_MAX_BANDS;
  int showed_bands = 1;
  int idx;
  char num[3];

	int ch;
	int res;
  int bandn;

	clear ();

	char *fieldname[3] = {"Power","Frequency","Bandwidth"}; 
  int nctrls = 3;

	eq_win = newwin (0,0,0,0);

	field = calloc (nbands+1,sizeof (FIELD*));

  ctrl_field = calloc (nctrls+1,sizeof (FIELD*));

	max_co = getmaxx (eq_win);

	gap = floor ((max_co) / nbands);

  vals = NULL;
  bandn = 0;
  ch = 0;


  for (i=0;i<nbands;i++) {

    field[i] = new_field (1,2,1, offs, 0, 0);
    set_field_just (field[i], JUSTIFY_CENTER);
    itoa (i,num,digits (i) + 1 );
    set_field_buffer (field[i], 0, num);
    field_opts_off (field[i], O_AUTOSKIP | O_EDIT); 
    offs += gap;

  }

  field[nbands] = NULL;

  offs = 0;
  gap = floor ((max_co ) / nctrls);

  for (i=0;i<nctrls;i++) {

    ctrl_field[i] = new_field (1,strlen (fieldname[i]),1, offs, 0, 0);
    set_field_just (ctrl_field[i], JUSTIFY_CENTER);
    set_field_buffer (ctrl_field[i], 0, fieldname[i]);
    field_opts_off (ctrl_field[i], O_AUTOSKIP | O_EDIT); 
    offs += gap;

  }


  /* Controls generation */
  ctrls = eq_ctrls_gen (eq_win,showed_bands);

  vals = calloc (1,sizeof (eq_saved_val_t));

  eqport = calloc (1,sizeof (eq_port_t));

  db = ctrls->db;
  hz = ctrls->hz;
  bw = ctrls->bw;

  eqport->name = sysname;
  eqport->vals = vals;
  eqport->ctrls = ctrls;


  /* Eq form init */
  eq_form = new_form (field);

  wattron (eq_win,COLOR_PAIR (2) | A_BOLD);
  mvwprintw (eq_win,getmaxy (eq_win) * 0.05,floor ((max_co/2)-((strlen (sysname)+14)/2)),"Equalizer for %s",sysname); 
  wattroff (eq_win,COLOR_PAIR (2) | A_BOLD);

  set_form_win (eq_form, eq_win);
  scale_form (eq_form, &suby, &subx);
  set_form_sub (eq_form, derwin (eq_win,suby, subx , getmaxy (eq_win) * 0.10 , (max_co - subx) / 2 ));

  eq_mainpan = new_panel (eq_win);
  eq_subpan = new_panel (form_sub (eq_form));

  top_panel (eq_mainpan);
  top_panel (eq_subpan);

  post_form (eq_form);

  keypad (eq_win, TRUE);

  set_current_field (eq_form,field[0]);
  set_field_fore (current_field (eq_form),A_BOLD | COLOR_PAIR (3)); 


  /* Eq ctrls form init */

  ctrl_form = new_form (ctrl_field);

  set_form_win (ctrl_form, eq_win);
  scale_form (ctrl_form, &suby, &subx);
  set_form_sub (ctrl_form, derwin (eq_win,suby, subx , getmaxy (eq_win) * 0.90 , (max_co - subx) / 2 ));

  ctrl_subp = new_panel (form_sub (ctrl_form));

  top_panel (ctrl_subp);

  post_form (ctrl_form);


  field_idx = field_index (current_field (eq_form));


  /* Let's show controls! */
  kr_mixer_portgroups (client);
  show_all_panels (ctrls,showed_bands);


	update_panels ();
	doupdate ();

	while (ch != 'q') { 


    res = krm_poll (client,-1); 

    switch (res) {
      case 0:
        continue;
      case 1:
        ch = getch ();
        break;
      case 2:
        eqport->band = bandn;
        kr_delivery_recv (client);
        eq_delivery_handler (client,eqport);
        continue;
      case -1:
        continue;
    }

    switch (ch) { 

      case KEY_LEFT:

      	if (in_ctrl) {
          set_field_fore (current_field (ctrl_form),A_NORMAL); 
          form_driver (ctrl_form, REQ_PREV_FIELD);
          set_field_fore (current_field (ctrl_form),A_BOLD | COLOR_PAIR (1)); 
          idx = field_index (current_field (ctrl_form));
      	}
      	else {
      		set_field_fore (current_field (eq_form),A_NORMAL); 
      		form_driver (eq_form, REQ_PREV_FIELD);
      		set_field_fore (current_field (eq_form),A_BOLD | COLOR_PAIR (3)); 
          bandn = field_index (current_field (eq_form));
          kr_mixer_portgroups (client); 
      	}
        break;
      case KEY_RIGHT:
      	if (in_ctrl) {
          set_field_fore (current_field (ctrl_form),A_NORMAL); 
          form_driver (ctrl_form, REQ_NEXT_FIELD);
          set_field_fore (current_field (ctrl_form),A_BOLD | COLOR_PAIR (1)); 
          idx = field_index (current_field (ctrl_form));
          
        }
      	else {
          set_field_fore (current_field (eq_form),A_NORMAL); 
          form_driver (eq_form, REQ_NEXT_FIELD);
          set_field_fore (current_field (eq_form),A_BOLD | COLOR_PAIR (3));
          bandn = field_index (current_field (eq_form));
          kr_mixer_portgroups (client); 
      	}
        break;
      case KEY_UP:
        if (in_ctrl) {
          switch (idx) {
            case 0:
              vals->db += 0.50;
              kr_mixer_set_effect_control (client, sysname, 0, bandn, "db", vals->db, 0, 0);
              break;
            case 1:
              vals->hz += 5;
              kr_mixer_set_effect_control (client, sysname, 0, bandn, "hz", vals->hz, 0, 0);
              break;
            case 2:
              vals->bw += 0.10;
              kr_mixer_set_effect_control (client, sysname, 0, bandn, "bw", vals->bw, 0, 0);
              break;
          }

        }
        break;
      case KEY_DOWN:
        if (in_ctrl) {
          switch (idx) {
            case 0:
              vals->db -= 0.5;
              kr_mixer_set_effect_control (client, sysname, 0, bandn, "db", vals->db, 0, 0);
              break;
            case 1:
              vals->hz -= 5;
              kr_mixer_set_effect_control (client, sysname, 0, bandn, "hz", vals->hz, 0, 0);
              break;
            case 2:
              vals->bw -= 0.10;
              kr_mixer_set_effect_control (client, sysname, 0, bandn, "bw", vals->bw, 0, 0);
              break;

          }
   
        }
        break;
      case 'w':
        if (in_ctrl) {
          switch (idx) {
            case 0:
              vals->db += 0.10;
              kr_mixer_set_effect_control (client, sysname, 0, bandn, "db", vals->db, 0, 0);
              break;
            case 1:
              vals->hz += 1;
              kr_mixer_set_effect_control (client, sysname, 0, bandn, "hz", vals->hz, 0, 0);
              break;
            case 2:
              break;

          }

        }
        break;
      case 's':
        if (in_ctrl) {
          switch (idx) {
            case 0:
              vals->db -= 0.10;
              kr_mixer_set_effect_control (client, sysname, 0, bandn, "db", vals->db, 0, 0);
              break;
            case 1:
              vals->hz -= 1;
              kr_mixer_set_effect_control (client, sysname, 0, bandn, "hz", vals->hz, 0, 0);
              break;
            case 2:
              break;

          }
   
        }
        break;
      case 9:
        if (in_ctrl) {
          idx = field_index (current_field (ctrl_form));
          set_field_fore (ctrl_field[idx],A_NORMAL);
          /* ncurses bug I suppose */
          form_driver (ctrl_form, REQ_NEXT_FIELD);
          form_driver (ctrl_form, REQ_PREV_FIELD);
          set_current_field (eq_form,field[field_idx]); 
          in_ctrl = 0;
        }
        else {
          field_idx = field_index (current_field (eq_form));
          set_current_field (ctrl_form,ctrl_field[0]); 
          set_field_fore (ctrl_field[0],A_BOLD | COLOR_PAIR (1));  
          /* ncurses bug I suppose */
          form_driver (ctrl_form, REQ_NEXT_FIELD);
          form_driver (ctrl_form, REQ_PREV_FIELD);
          idx = 0;
          in_ctrl = 1;
        }
        break;
      default:
        break;
    }

    update_panels ();
    doupdate ();
  }
 	

  /* CLEANUP */


  for (i=0;i<showed_bands;i++) {

    tmpw = panel_window (db->slider_p[i]);
    del_panel (db->slider_p[i]);
    delwin (tmpw);

    tmpw = panel_window (db->bar_p[i]);
    del_panel (db->bar_p[i]);
    delwin (tmpw);    

    tmpw = panel_window (hz->cell_p[i]);
    del_panel (hz->cell_p[i]);
    delwin (tmpw);

    tmpw = panel_window (bw->bar_p[i]);
    del_panel (bw->bar_p[i]);
    delwin (tmpw);

    tmpw = panel_window (bw->slider_p[i]);
    del_panel (bw->slider_p[i]);
    delwin (tmpw);

    tmpw = panel_window (bw->cell_p[i]);
    del_panel (bw->cell_p[i]);
    delwin (tmpw);

  }


  free (db->bar_w);
  free (db->slider_w);
  free (hz->cell_w);
  free (bw->bar_w);
  free (bw->slider_w);
  free (bw->cell_w);
  free (db->bar_p);
  free (db->slider_p);
  free (hz->cell_p);
  free (bw->bar_p);
  free (bw->slider_p);
  free (bw->cell_p);

  tmpw = panel_window (db->pan);
  del_panel (db->pan);
  delwin (tmpw);

  tmpw = panel_window (hz->pan);
  del_panel (hz->pan);
  delwin (tmpw);

  tmpw = panel_window (bw->pan);
  del_panel (bw->pan);
  delwin (tmpw);

  free (ctrls);
  free (db);
  free (hz);
  free (bw);
  free (vals);
  free (eqport);


  tmpw = form_sub (ctrl_form);

  unpost_form (ctrl_form);
  free_form (ctrl_form);

  for (i=0;i<nctrls;i++) {
    free_field (ctrl_field[i]);
  }

  free (ctrl_field);

  del_panel (ctrl_subp);
  delwin (tmpw);

  tmpw = form_sub (eq_form);

  unpost_form (eq_form);
  free_form (eq_form);

  
  for (i=0;i<nbands;i++) {
    free_field (field[i]);
  }

  free (field);


  del_panel (eq_subpan);
  del_panel (eq_mainpan);

  delwin (tmpw);
  delwin (eq_win);




	return 0;
}