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

📄 smgtest.c

📁 一个C格式的脚本处理函数库源代码,可让你的C程序具有执行C格式的脚本文件
💻 C
📖 第 1 页 / 共 2 页
字号:
/* 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 + -