FreeBSD Port: ncurses-5.4

Jianwei Rong jianweirong at yahoo.com
Thu Dec 2 22:22:35 PST 2004


Good afternoon!
 
The program of "menu_attrib.c" could not display
chinese string. The enviroment is "FreeBSD 4.10, cce
0.51, ncurses 5.4".
How to solve this problem?
Thanks.
 
rongjianwei
2004/12/03
********************************
#include <menu.h>
 
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define CTRLD  4
 
char *choices[] = {
                        "Choice 1",
                        "English   2",
                        "Choice 3",
                        "Ñ¡Ôñ   4",
   "Choice 5",
   "Ñ¡Ôñ   6",
   "Choice 7",
                        "Exit",
                  };
 
int main()
{ ITEM **my_items;
 int c;    
 MENU *my_menu;
        int n_choices, i;
 ITEM *cur_item;
 
 /* Initialize curses */ 
 initscr();
 start_color();
        cbreak();
        noecho();
 keypad(stdscr, TRUE);
 init_pair(1, COLOR_RED, COLOR_BLACK);
 init_pair(2, COLOR_GREEN, COLOR_BLACK);
 init_pair(3, COLOR_MAGENTA, COLOR_BLACK);
 
 /* Initialize items */
        n_choices = ARRAY_SIZE(choices);
        my_items = (ITEM **)calloc(n_choices + 1,
sizeof(ITEM *));
        for(i = 0; i < n_choices; ++i)
                my_items[i] = new_item(choices[i],
choices[i]);
 my_items[n_choices] = (ITEM *)NULL;
 item_opts_off(my_items[3], O_SELECTABLE);
 item_opts_off(my_items[6], O_SELECTABLE);
 
 /* Create menu */
 my_menu = new_menu((ITEM **)my_items);
 
 /* Set fore ground and back ground of the menu */
 set_menu_fore(my_menu, COLOR_PAIR(1) | A_REVERSE);
 set_menu_back(my_menu, COLOR_PAIR(2));
 set_menu_grey(my_menu, COLOR_PAIR(3));
 
 /* Post the menu */
 mvprintw(LINES - 3, 0, "Press <ENTER> to see the
option selected");
 mvprintw(LINES - 2, 0, "Up and Down arrow keys to
naviage (F1 to Exit)");
 post_menu(my_menu);
 refresh();
 
 while((c = getch()) != KEY_F(1))
 {       switch(c)
         { case KEY_DOWN:
    menu_driver(my_menu, REQ_DOWN_ITEM);
    break;
   case KEY_UP:
    menu_driver(my_menu, REQ_UP_ITEM);
    break;
   case 10: /* Enter */
    move(20, 0);
    clrtoeol();
    mvprintw(20, 0, "Item selected is : %s", 
      item_name(current_item(my_menu)));
    pos_menu_cursor(my_menu);
    break;
  }
 } 
 unpost_menu(my_menu);
 for(i = 0; i < n_choices; ++i)
  free_item(my_items[i]);
 free_menu(my_menu);
 endwin();
}
 


_________________________________________________________
Do You Yahoo!?
×¢²áÊÀ½çÒ»Á÷Æ·ÖʵÄÑÅ»¢Ãâ·ÑµçÓÊ
http://cn.rd.yahoo.com/mail_cn/tag/1g/*http://cn.mail.yahoo.com/
-------------- next part --------------
#include <menu.h>

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define CTRLD 	4

char *choices[] = {
                        "Choice 1",
                        "English   2",
                        "Choice 3",
                        "Ñ¡Ôñ   4",
			"Choice 5",
			"Ñ¡Ôñ   6",
			"Choice 7",
                        "Exit",
                  };

int main()
{	ITEM **my_items;
	int c;				
	MENU *my_menu;
        int n_choices, i;
	ITEM *cur_item;
	
	/* Initialize curses */	
	initscr();
	start_color();
        cbreak();
        noecho();
	keypad(stdscr, TRUE);
	init_pair(1, COLOR_RED, COLOR_BLACK);
	init_pair(2, COLOR_GREEN, COLOR_BLACK);
	init_pair(3, COLOR_MAGENTA, COLOR_BLACK);

	/* Initialize items */
        n_choices = ARRAY_SIZE(choices);
        my_items = (ITEM **)calloc(n_choices + 1, sizeof(ITEM *));
        for(i = 0; i < n_choices; ++i)
                my_items[i] = new_item(choices[i], choices[i]);
	my_items[n_choices] = (ITEM *)NULL;
	item_opts_off(my_items[3], O_SELECTABLE);
	item_opts_off(my_items[6], O_SELECTABLE);

	/* Create menu */
	my_menu = new_menu((ITEM **)my_items);

	/* Set fore ground and back ground of the menu */
	set_menu_fore(my_menu, COLOR_PAIR(1) | A_REVERSE);
	set_menu_back(my_menu, COLOR_PAIR(2));
	set_menu_grey(my_menu, COLOR_PAIR(3));

	/* Post the menu */
	mvprintw(LINES - 3, 0, "Press <ENTER> to see the option selected");
	mvprintw(LINES - 2, 0, "Up and Down arrow keys to naviage (F1 to Exit)");
	post_menu(my_menu);
	refresh();

	while((c = getch()) != KEY_F(1))
	{       switch(c)
	        {	case KEY_DOWN:
				menu_driver(my_menu, REQ_DOWN_ITEM);
				break;
			case KEY_UP:
				menu_driver(my_menu, REQ_UP_ITEM);
				break;
			case 10: /* Enter */
				move(20, 0);
				clrtoeol();
				mvprintw(20, 0, "Item selected is : %s", 
						item_name(current_item(my_menu)));
				pos_menu_cursor(my_menu);
				break;
		}
	}	
	unpost_menu(my_menu);
	for(i = 0; i < n_choices; ++i)
		free_item(my_items[i]);
	free_menu(my_menu);
	endwin();
}
	


More information about the freebsd-ports mailing list