#include #define STR_MAX 20 #define Y_OFFSET 5 #define X_OFFSET 25 #define TASK(x) printf( RC ); \ printf("item No. %d is selected", x); \ fflush( stdout ); \ sleep(1) #define CLEAR printf( CLS ); printf( MOVE, 1, 1 ) /****************************************************************************/ /* VT100 escape sequence */ /****************************************************************************/ #define CLS "\e[2J" #define MOVE "\e[%d;%dH" #define BOLD "\e[1m" #define RESET "\e[0m" #define SC "\e7" /* store cursor */ #define RC "\e8" /* restore cursor */ #define D_RIGHT "\e[0K" /* delete right side of the cursor */ /****************************************************************************/ /* menu table */ /****************************************************************************/ struct menu{ int y, x; char *item; }; struct menu menu_table[] = { {0, 5, "Main Menu" }, {3, 0, "1 Computer (press 1)" }, {5, 0, "2 Logic (press 2)" }, {7, 0, "3 Others (press 3)" }, {9, 0, "4 Exit (press 4)" }, {11, 5, "key in please : " }, {0, 0, NULL }, }; /****************************************************************************/ /* display menu */ /****************************************************************************/ display_menu( table ) struct menu *table; { int i, n; int select; printf( CLS ); for (; table->item; table++) { printf( MOVE, Y_OFFSET + table->y, X_OFFSET + table->x ); printf( "%s", table->item ); } } /****************************************************************************/ /* keyin */ /****************************************************************************/ int keyin(start, end) int start, end; { char key_in[STR_MAX]; int select; printf( SC ); while(1) { fgets( key_in, STR_MAX, stdin ); if (isdigit( key_in[0] )) { sscanf( key_in, "%d", &select); if (select >= start && select <= end) return select; } printf( RC ); printf( D_RIGHT ); } } /****************************************************************************/ /* main() */ /****************************************************************************/ main() { int item_number; while(1) { display_menu( menu_table ); item_number = keyin( 1, 4 ); switch ( item_number ) { case 1: TASK(1); break; case 2: TASK(2); break; case 3: TASK(3); break; case 4: CLEAR; exit(0); } } }