⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ncurses.c

📁 ncurses 库 可能有用酒用 没用就算了 我觉得还可以用
💻 C
📖 第 1 页 / 共 5 页
字号:
    do {#if HAVE_SLK_COLOR	if (new_color) {	    init_pair(1, bg, fg);	    slk_color(1);	    new_color = FALSE;	    mvprintw(SLK_WORK, 0, "Colors %d/%d\n", fg, bg);	    refresh();	}#endif	move(0, 0);	switch (c) {	case CTRL('l'):	    erase();	    attron(A_BOLD);	    mvaddstr(0, 20, "Soft Key Exerciser");	    attroff(A_BOLD);	    slk_help();	    /* fall through */	case 'a':	    slk_restore();	    break;	case 'e':	    wclear(stdscr);	    break;	case 's':	    mvprintw(SLK_WORK, 0, "Press Q to stop the scrolling-test: ");	    while ((c = Getchar()) != 'Q' && (c != ERR))		addch((chtype) c);	    break;	case 'd':	    slk_clear();	    break;	case 'l':	    fmt = 0;	    break;	case 'c':	    fmt = 1;	    break;	case 'r':	    fmt = 2;	    break;	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	    (void) mvaddstr(SLK_WORK, 0, "Please enter the label value: ");	    strcpy(buf, "");	    if ((s = slk_label(c - '0')) != 0) {		strncpy(buf, s, 8);	    }	    wGetstring(stdscr, buf, 8);	    slk_set((c - '0'), buf, fmt);	    slk_refresh();	    move(SLK_WORK, 0);	    clrtobot();	    break;	case 'x':	case 'q':	    goto done;#if HAVE_SLK_COLOR	case 'F':	    if (has_colors()) {		fg = (fg + 1) % COLORS;		new_color = TRUE;	    }	    break;	case 'B':	    if (has_colors()) {		bg = (bg + 1) % COLORS;		new_color = TRUE;	    }	    break;#endif	default:	    beep();	}    } while	((c = Getchar()) != EOF);  done:    erase();    endwin();}#if USE_WIDEC_SUPPORT#define SLKLEN 8static voidwide_slk_test(void)/* exercise the soft keys */{    int c, fmt = 1;    wchar_t buf[SLKLEN + 1];    char *s;    short fg = COLOR_BLACK;    short bg = COLOR_WHITE;    bool new_color = FALSE;    c = CTRL('l');    if (has_colors()) {	new_color = TRUE;    }    do {	if (new_color) {	    init_pair(1, bg, fg);	    slk_color(1);	    new_color = FALSE;	    mvprintw(SLK_WORK, 0, "Colors %d/%d\n", fg, bg);	    refresh();	}	move(0, 0);	switch (c) {	case CTRL('l'):	    erase();	    attr_on(WA_BOLD, NULL);	    mvaddstr(0, 20, "Soft Key Exerciser");	    attr_off(WA_BOLD, NULL);	    slk_help();	    /* fall through */	case 'a':	    slk_restore();	    break;	case 'e':	    wclear(stdscr);	    break;	case 's':	    mvprintw(SLK_WORK, 0, "Press Q to stop the scrolling-test: ");	    while ((c = Getchar()) != 'Q' && (c != ERR))		addch((chtype) c);	    break;	case 'd':	    slk_clear();	    break;	case 'l':	    fmt = 0;	    break;	case 'c':	    fmt = 1;	    break;	case 'r':	    fmt = 2;	    break;	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	    (void) mvaddstr(SLK_WORK, 0, "Please enter the label value: ");	    *buf = 0;	    if ((s = slk_label(c - '0')) != 0) {		char *temp = strdup(s);		size_t used = strlen(temp);		size_t want = SLKLEN;		size_t test;		mbstate_t state;		buf[0] = L'\0';		while (want > 0 && used != 0) {		    const char *base = s;		    memset(&state, 0, sizeof(state));		    test = mbsrtowcs(0, &base, 0, &state);		    if (test == (size_t) -1) {			temp[--used] = 0;		    } else if (test > want) {			temp[--used] = 0;		    } else {			memset(&state, 0, sizeof(state));			mbsrtowcs(buf, &base, want, &state);			break;		    }		}		free(temp);	    }	    wGet_wstring(stdscr, buf, SLKLEN);	    slk_wset((c - '0'), buf, fmt);	    slk_refresh();	    move(SLK_WORK, 0);	    clrtobot();	    break;	case 'x':	case 'q':	    goto done;	case 'F':	    if (has_colors()) {		fg = (fg + 1) % COLORS;		new_color = TRUE;	    }	    break;	case 'B':	    if (has_colors()) {		bg = (bg + 1) % COLORS;		new_color = TRUE;	    }	    break;	default:	    beep();	}    } while	((c = Getchar()) != EOF);  done:    erase();    endwin();}#endif/**************************************************************************** * * Alternate character-set stuff * ****************************************************************************//* ISO 6429:  codes 0x80 to 0x9f may be control characters that cause the * terminal to perform functions.  The remaining codes can be graphic. */static voidshow_upper_chars(unsigned first){    bool C1 = (first == 128);    unsigned code;    unsigned last = first + 31;    int reply;    erase();    attron(A_BOLD);    mvprintw(0, 20, "Display of %s Character Codes %d to %d",	     C1 ? "C1" : "GR", first, last);    attroff(A_BOLD);    refresh();    for (code = first; code <= last; code++) {	int row = 4 + ((code - first) % 16);	int col = ((code - first) / 16) * COLS / 2;	char tmp[80];	sprintf(tmp, "%3u (0x%x)", code, code);	mvprintw(row, col, "%*s: ", COLS / 4, tmp);	if (C1)	    nodelay(stdscr, TRUE);	echochar(code);	if (C1) {	    /* (yes, this _is_ crude) */	    while ((reply = Getchar()) != ERR) {		addch(UChar(reply));		napms(10);	    }	    nodelay(stdscr, FALSE);	}    }}static voidshow_box_chars(void){    erase();    attron(A_BOLD);    mvaddstr(0, 20, "Display of the ACS Line-Drawing Set");    attroff(A_BOLD);    refresh();    box(stdscr, 0, 0);    /* *INDENT-OFF* */    mvhline(LINES / 2, 0,        ACS_HLINE, COLS);    mvvline(0,         COLS / 2, ACS_VLINE, LINES);    mvaddch(0,         COLS / 2, ACS_TTEE);    mvaddch(LINES / 2, COLS / 2, ACS_PLUS);    mvaddch(LINES - 1, COLS / 2, ACS_BTEE);    mvaddch(LINES / 2, 0,        ACS_LTEE);    mvaddch(LINES / 2, COLS - 1, ACS_RTEE);    /* *INDENT-ON* */}static intshow_1_acs(int n, const char *name, chtype code){    const int height = 16;    int row = 4 + (n % height);    int col = (n / height) * COLS / 2;    mvprintw(row, col, "%*s : ", COLS / 4, name);    addch(code);    return n + 1;}static voidshow_acs_chars(void)/* display the ACS character set */{    int n;#define BOTH(name) #name, name    erase();    attron(A_BOLD);    mvaddstr(0, 20, "Display of the ACS Character Set");    attroff(A_BOLD);    refresh();    n = show_1_acs(0, BOTH(ACS_ULCORNER));    n = show_1_acs(n, BOTH(ACS_URCORNER));    n = show_1_acs(n, BOTH(ACS_LLCORNER));    n = show_1_acs(n, BOTH(ACS_LRCORNER));    n = show_1_acs(n, BOTH(ACS_LTEE));    n = show_1_acs(n, BOTH(ACS_RTEE));    n = show_1_acs(n, BOTH(ACS_TTEE));    n = show_1_acs(n, BOTH(ACS_BTEE));    n = show_1_acs(n, BOTH(ACS_HLINE));    n = show_1_acs(n, BOTH(ACS_VLINE));    n = show_1_acs(n, BOTH(ACS_LARROW));    n = show_1_acs(n, BOTH(ACS_RARROW));    n = show_1_acs(n, BOTH(ACS_UARROW));    n = show_1_acs(n, BOTH(ACS_DARROW));    n = show_1_acs(n, BOTH(ACS_BLOCK));    n = show_1_acs(n, BOTH(ACS_BOARD));    n = show_1_acs(n, BOTH(ACS_LANTERN));    n = show_1_acs(n, BOTH(ACS_BULLET));    n = show_1_acs(n, BOTH(ACS_CKBOARD));    n = show_1_acs(n, BOTH(ACS_DEGREE));    n = show_1_acs(n, BOTH(ACS_DIAMOND));    n = show_1_acs(n, BOTH(ACS_PLMINUS));    n = show_1_acs(n, BOTH(ACS_PLUS));    n = show_1_acs(n, BOTH(ACS_GEQUAL));    n = show_1_acs(n, BOTH(ACS_NEQUAL));    n = show_1_acs(n, BOTH(ACS_LEQUAL));    n = show_1_acs(n, BOTH(ACS_STERLING));    n = show_1_acs(n, BOTH(ACS_PI));    n = show_1_acs(n, BOTH(ACS_S1));    n = show_1_acs(n, BOTH(ACS_S3));    n = show_1_acs(n, BOTH(ACS_S7));    n = show_1_acs(n, BOTH(ACS_S9));}static voidacs_display(void){    int c = 'a';    do {	switch (c) {	case CTRL('L'):	    Repaint();	    break;	case 'a':	    show_acs_chars();	    break;	case 'b':	    show_box_chars();	    break;	case '0':	case '1':	case '2':	case '3':	    show_upper_chars((unsigned) ((c - '0') * 32 + 128));	    break;	}	mvprintw(LINES - 3, 0,		 "Note: ANSI terminals may not display C1 characters.");	mvprintw(LINES - 2, 0,		 "Select: a=ACS, b=box, 0=C1, 1,2,3=GR characters, q=quit");	refresh();    } while ((c = Getchar()) != 'x' && c != 'q');    Pause();    erase();    endwin();}#if USE_WIDEC_SUPPORTstatic voidshow_upper_widechars(int first, int repeat, int space){    cchar_t temp;    wchar_t code;    int last = first + 31;    erase();    attron(A_BOLD);    mvprintw(0, 20, "Display of Character Codes %d to %d", first, last);    attroff(A_BOLD);    for (code = first; code <= last; code++) {	int row = 4 + ((code - first) % 16);	int col = ((code - first) / 16) * COLS / 2;	wchar_t codes[10];	attr_t attrs = A_NORMAL;	char tmp[80];	int count = repeat;	memset(&codes, 0, sizeof(codes));	codes[0] = code;	sprintf(tmp, "%3ld (0x%lx)", (long) code, (long) code);	mvprintw(row, col, "%*s: ", COLS / 4, tmp);	setcchar(&temp, codes, attrs, 0, 0);	do {	    /*	     * Give non-spacing characters something to combine with.  If we	     * don't, they'll bunch up in a heap on the space after the ":".	     * Mark them with reverse-video to make them simpler to find on	     * the display.	     */	    if (wcwidth(code) == 0)		addch(space | A_REVERSE);	    /*	     * This could use add_wch(), but is done for comparison with the	     * normal 'f' test (and to make a test-case for echo_wchar()).	     * The screen will flicker because the erase() at the top of the	     * function is met by the builtin refresh() in echo_wchar().	     */	    echo_wchar(&temp);	} while (--count > 0);    }}static intshow_1_wacs(int n, const char *name, const cchar_t *code){    const int height = 16;    int row = 4 + (n % height);    int col = (n / height) * COLS / 2;    mvprintw(row, col, "%*s : ", COLS / 4, name);    add_wchnstr(code, 1);    return n + 1;}static voidshow_wacs_chars(void)/* display the wide-ACS character set */{    int n;/*#define BOTH2(name) #name, &(name) */#define BOTH2(name) #name, name    erase();    attron(A_BOLD);    mvaddstr(0, 20, "Display of the Wide-ACS Character Set");    attroff(A_BOLD);    refresh();    n = show_1_wacs(0, BOTH2(WACS_ULCORNER));    n = show_1_wacs(n, BOTH2(WACS_URCORNER));    n = show_1_wacs(n, BOTH2(WACS_LLCORNER));    n = show_1_wacs(n, BOTH2(WACS_LRCORNER));    n = show_1_wacs(n, BOTH2(WACS_LTEE));    n = show_1_wacs(n, BOTH2(WACS_RTEE));    n = show_1_wacs(n, BOTH2(WACS_TTEE));    n = show_1_wacs(n, BOTH2(WACS_BTEE));    n = show_1_wacs(n, BOTH2(WACS_HLINE));    n = show_1_wacs(n, BOTH2(WACS_VLINE));    n = show_1_wacs(n, BOTH2(WACS_LARROW));    n = show_1_wacs(n, BOTH2(WACS_RARROW));    n = show_1_wacs(n, BOTH2(WACS_UARROW));    n = show_1_wacs(n, BOTH2(WACS_DARROW));    n = show_1_wacs(n, BOTH2(WACS_BLOCK));    n = show_1_wacs(n, BOTH2(WACS_BOARD));    n = show_1_wacs(n, BOTH2(WACS_LANTERN));    n = show_1_wacs(n, BOTH2(WACS_BULLET));    n = show_1_wacs(n, BOTH2(WACS_CKBOARD));    n = show_1_wacs(n, BOTH2(WACS_DEGREE));    n = show_1_wacs(n, BOTH2(WACS_DIAMOND));    n = show_1_wacs(n, BOTH2(WACS_PLMINUS));    n = show_1_wacs(n, BOTH2(WACS_PLUS));#ifdef CURSES_WACS_ARRAY    n = show_1_wacs(n, BOTH2(WACS_GEQUAL));    n = show_1_wacs(n, BOTH2(WACS_NEQUAL));    n = show_1_wacs(n, BOTH2(WACS_LEQUAL));    n = show_1_wacs(n, BOTH2(WACS_STERLING));    n = show_1_wacs(n, BOTH2(WACS_PI));    n = show_1_wacs(n, BOTH2(WACS_S1));    n = show_1_wacs(n, BOTH2(WACS_S3));    n = show_1_wacs(n, BOTH2(WACS_S7));    n = show_1_wacs(n, BOTH2(WACS_S9));#endif}static voidshow_wbox_chars(void){    erase();    attron(A_BOLD);    mvaddstr(0, 20, "Display of the Wide-ACS Line-Drawing Set");    attroff(A_BOLD);    refresh();    box_set(stdscr, 0, 0);    /* *INDENT-OFF* */    mvhline_set(LINES / 2, 0,        WACS_HLINE, COLS);    mvvline_set(0,         COLS / 2, WACS_VLINE, LINES);    mvadd_wch(0,           COLS / 2, WACS_TTEE);    mvadd_wch(LINES / 2,   COLS / 2, WACS_PLUS);    mvadd_wch(LINES - 1,   COLS / 2, WACS_BTEE);    mvadd_wch(LINES / 2,   0,        WACS_LTEE);    mvadd_wch(LINES / 2,   COLS - 1, WACS_RTEE);    /* *INDENT-ON* */}static intshow_2_wacs(int n, const char *name, const char *code){    const int height = 16;    int row = 4 + (n % height);    int col = (n / height) * COLS / 2;    char temp[80];    mvprintw(row, col, "%*s : ", COLS / 4, name);    addstr(strcpy(temp, code));    return n + 1;}static voidshow_utf8_chars(void)/* display the wide-ACS character set */{    int n;    erase();    attron(A_BOLD);    mvaddstr(0, 20, "Display of the Wide-ACS Character Set");    attroff(A_BOLD);    refresh();    /* *INDENT-OFF* */    n = show_2_wacs(0, "WACS_ULCORNER",	"\342\224\214");    n = show_2_wacs(n, "WACS_URCORNER",	"\342\224\220");    n = show_2_wacs(n, "WACS_LLCORNER",	"\342\224\224");    n = show_2_wacs(n, "WACS_LRCORNER",	"\342\224\230");    n = show_2_wacs(n, "WACS_LTEE",	"\342\224\234");    n = show_2_wacs(n, "WACS_RTEE",	"\342\224\244");    n = show_2_wacs(n, "WACS_TTEE",	"\342\224\254");    n = show_2_wacs(n, "WACS_BTEE",	"\342\224\264");    n = show_2_wacs(n, "WACS_HLINE",	"\342\224\200");    n = show_2_wacs(n, "WACS_VLINE",	"\342\224\202");    n = show_2_wacs(n, "WACS_LARROW",	"\342\206\220");    n = show_2_wacs(n, "WACS_RARROW",	"\342\206\222");    n = show_2_wacs(n, "WACS_UARROW",	"\342\206\221");    n = show_2_wacs(n, "WACS_DARROW",	"\342\206\223");    n = show_2_wacs(n, "WACS_BLOCK",	"\342\226\256");    n = show_2_wacs(n, "WACS_BOARD",	"\342\226\222");    n = show_2_wacs(n,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -