📄 smgtest.c
字号:
/* This demo test some of the slsmg features. */#include "config.h"#include <stdio.h>#ifdef HAVE_STDLIB_H# include <stdlib.h>#endif#include <string.h>#include <slang.h>#include "demolib.c"static void menu_loop (void);static int select_menu_item (int i);static void init_colors (void);int main (int argc, char **argv){ if (-1 == demolib_init_terminal (1, 1)) return 1; init_colors (); (void) SLtt_set_mouse_mode (1, 0); if (argc <= 1) menu_loop (); do { argc--; argv++; if (-1 == select_menu_item (atoi (*argv))) menu_loop (); } while (argc > 1); demolib_exit (0); return 1;}static void quit (void){ demolib_exit (0);}static void bce_color_test (void);static void color_test (void);static void color_test1 (void);static void alt_char_test (void);static void esc_seq_test (void);static void ansi_esc_seq_test (void);static void line_test (void);static void mouse_test (void);static void low_level_test (void);static void box_test (void);static void draw_symbols_test (void);static void lr_corner_test (void);static void mono_test (void);typedef struct{ char *name; void (*funct) (void);}Menu_Type;static Menu_Type Root_Menu [] ={ {"Color Test", color_test}, {"Another Color Test", color_test1}, {"BCE Color Test", bce_color_test}, {"Alt charset test", alt_char_test}, {"Drawing Symbols", draw_symbols_test}, {"Key Escape Sequence Report", esc_seq_test},#ifdef IBMPC_SYSTEM {"ANSI Key Escape Sequence Report", ansi_esc_seq_test},#endif {"Line Drawing Test", line_test}, {"Test Mouse", mouse_test}, {"Box Test", box_test}, {"Write to Lower Right Corner Test", lr_corner_test}, {"Test Low Level Functions", low_level_test}, {"Test monochrome functions", mono_test}, {"Quit", quit}, {NULL, NULL}};Menu_Type *Current_Menu = Root_Menu;static void print_menu (void){ int i; int row; Menu_Type *menu; menu = Current_Menu; SLsig_block_signals (); SLsmg_cls (); row = 2; i = 1; while (menu->name != NULL) { SLsmg_gotorc (row, 3); SLsmg_printf ("%2X. %s", i, menu->name); menu++; row++; i++; } row = 0; SLsmg_gotorc (row, 1); SLsmg_write_string ("Choose number:"); SLsmg_refresh (); SLsig_unblock_signals ();}static int select_menu_item (int num){ int i = 1; Menu_Type *m = Current_Menu; while (m->name != NULL) { if (i == num) { (*m->funct) (); return 0; } i++; m++; } return -1;}static void menu_loop (void){ int ch; print_menu (); while (1) { ch = SLkp_getkey (); if ((ch == 'q') || (ch == 'Q')) quit (); if ((ch >= '0') && (ch <= '9')) ch -= '0'; else if ((ch >= 'A') && (ch <= 'Z')) ch = 10 + (ch - 'A'); else ch = 10 + (ch - 'a'); if (-1 == select_menu_item (ch)) { SLtt_beep (); continue; } print_menu (); }}static void write_centered_string (char *s, int row){ unsigned int len; int col; if (s == NULL) return; len = strlen (s); /* Want 2 * col + len == SLtt_Screen_Rows */ if (len >= (unsigned int) SLtt_Screen_Cols) col = 0; else col = (SLtt_Screen_Cols - (int)len) / 2; SLsmg_gotorc (row, col); SLsmg_write_string (s);}static void pre_test (char *title){ SLsig_block_signals (); SLsmg_cls (); write_centered_string (title, 0);}static void post_test (void){ write_centered_string ("Press any key to return.", SLtt_Screen_Rows - 1); SLsmg_refresh (); SLsig_unblock_signals (); (void) SLkp_getkey ();}/* Various tests */#define NUM_COLORS 16static char *Colors [NUM_COLORS] ={ "black/default", "red", "green", "brown", "blue", "magenta", "cyan", "lightgray", "gray", "brightred", "brightgreen", "yellow", "brightblue", "brightmagenta", "brightcyan", "white"};static void init_colors (void){ int i; char *fg, *bg; fg = "black"; for (i = 0; i < NUM_COLORS; i++) { bg = Colors[i]; SLtt_set_color (i + 1, NULL, fg, bg); }}static void box_test (void){ char *msg = "This is a box with changing background"; int r, c, dr, dc; int color; pre_test ("Box Test"); dr = 8; dc = 4 + strlen (msg); r = SLtt_Screen_Rows / 2 - dr/2; c = SLtt_Screen_Cols / 2 - dc/2; SLsmg_set_color (1); SLsmg_set_char_set (1); SLsmg_fill_region (r + 1, c + 1, dr - 2, dc - 2, SLSMG_CKBRD_CHAR); SLsmg_set_char_set (0); SLsmg_set_color (0); SLsmg_gotorc (r + dr/2, c + 2); SLsmg_write_string (msg); SLsmg_draw_box (r, c, dr, dc); SLsmg_refresh (); color = 2; while (0 == SLang_input_pending (10)) { SLsmg_set_color_in_region (color, r, c, dr, dc); SLsmg_refresh (); color++; color = color % NUM_COLORS; } post_test ();}static int check_color_support (void){ if (SLtt_Use_Ansi_Colors) return 0; pre_test ("Your terminal does not provide color support."); post_test (); return -1;}static void bce_color_test (void){ int row; if (-1 == check_color_support ()) return; pre_test ("Background Color Erase Test"); SLtt_set_color (0, NULL, "lightgray", "blue"); row = SLtt_Screen_Rows/2; SLsmg_set_color (0); SLsmg_gotorc (row, 1); SLsmg_write_string ("The screen background should be blue."); row += 2; SLsmg_gotorc (row++, 1); SLsmg_write_string ("****If the screen update is slow, then your terminal"); SLsmg_gotorc (row++, 1); SLsmg_write_string (" does not support background-color-erase."); SLsmg_set_color (0); post_test ();}static void lr_corner_test (void){ pre_test ("Write to Lower Right Corner Test"); SLsmg_gotorc (SLtt_Screen_Rows-1, SLtt_Screen_Cols-1); SLsmg_write_string ("X"); write_centered_string ("An 'X' should be in the lower-right corner.", SLtt_Screen_Rows/2); SLsmg_refresh (); SLsig_unblock_signals (); (void) SLkp_getkey ();}static void color_test (void){ int color; int row; if (-1 == check_color_support ()) return; pre_test ("Color Test"); row = 1; color = 0; while (row < SLtt_Screen_Rows - 1) { color = color % NUM_COLORS; SLsmg_gotorc (row, 0); SLsmg_set_color (0); SLsmg_write_string (Colors[color]); color++; SLsmg_set_color (color); SLsmg_erase_eol (); row++; } SLsmg_set_color (0); post_test ();}static void color_test1 (void){ int color; int r0, r1; int c0, c1; unsigned int dr0, dr1, dc0, dc1; if (-1 == check_color_support ()) return; pre_test ("Another Color Test"); r0 = 1; r1 = SLtt_Screen_Rows / 2; dr0 = r1; dr1 = SLtt_Screen_Rows; c0 = 0; c1 = SLtt_Screen_Cols / 2; dc0 = c1; dc1 = SLtt_Screen_Cols; color = 0; do { SLsmg_gotorc (r1, 0); SLsmg_set_color (color); color++; color = color % NUM_COLORS; SLsmg_write_string (" "); SLsmg_set_color (color); color++; color = color % NUM_COLORS; SLsmg_write_string ("X"); SLsmg_set_color (color); color++; color = color % NUM_COLORS; SLsmg_erase_eol (); SLsmg_refresh (); } while (0 == SLang_input_pending (30)); SLang_flush_input (); color = 0; do {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -