4 /* This code is aimed at helping those who would like to */
\r
5 /* create menus without using the curses library. */
\r
6 /* It creates a count variable (which could be used to */
\r
7 /* keep track of which item is highlighted). Using the */
\r
8 /* up and down arrow keys increments and decrements the */
\r
9 /* count variable. Finally, when you press Enter, the */
\r
10 /* value of the count variable is printed and the program */
\r
12 /* This code is released to the public domain. */
\r
13 /* "Share and enjoy...." ;) */
\r
16 #include <string.h>
\r
18 #include <termios.h> /* For getch() */
\r
20 /* This implementation of getch() is from here - */
\r
21 /* http://wesley.vidiqatch.org/ */
\r
22 /* Thanks, Wesley! */
\r
23 static struct termios old, new;
\r
25 /* Initialize new terminal i/o settings */
\r
26 void initTermios(int echo) {
\r
27 tcgetattr(0, &old); /* grab old terminal i/o settings */
\r
28 new = old; /* make new settings same as old settings */
\r
29 new.c_lflag &= ~ICANON; /* disable buffered i/o */
\r
30 new.c_lflag &= echo ? ECHO : ~ECHO; /* set echo mode */
\r
31 tcsetattr(0, TCSANOW, &new); /* use these new terminal i/o settings now */
\r
35 /* Restore old terminal i/o settings */
\r
36 void resetTermios(void) {
\r
37 tcsetattr(0, TCSANOW, &old);
\r
41 /* Read 1 character - echo defines echo mode */
\r
42 char getch_(int echo) {
\r
51 /* Read 1 character without echo */
\r
57 /* Read 1 character with echo */
\r
68 printf("Public Domain Menu Program \n");
\r
69 printf("\nUse the up and down arrow keys then press Enter\n");
\r
78 /* Up arrow is 27, 91, 65. ( ESC [ A ) */
\r
79 /* Down arrow is 27, 91, 66. ( ESC [ B ) */
\r
80 /* Right arrow is 27, 91, 67. ( ESC [ C ) */
\r
81 /* Left arrow is 27, 91, 68. ( ESC [ D ) */
\r
87 { puts("You pressed up arrow! \n");
\r
89 printf("Menunum is now %d \n", menunum);
\r
92 { puts("You pressed down arrow! \n");
\r
94 printf("Menunum is now %d \n", menunum);
\r
97 { puts("You pressed right arrow! \n");
\r
100 { puts("You pressed left arrow! \n");
\r
104 /* A few other keys (for testing purposes ) */
\r
105 else if(key == 97)
\r
106 { puts("You pressed the \"a\" key! \n");
\r
108 else if(key == 98)
\r
109 { puts("You pressed the \"b\" key! \n");
\r
111 else if(key == 99)
\r
112 { puts("You pressed the \"c\" key! \n");
\r
114 else if(key == 100)
\r
115 { puts("You pressed the \"d\" key! \n");
\r
119 /* The Enter key exits. Enter is 10 decimal */
\r
120 else if(key == 10)
\r
121 { printf("You pressed ENTER! You chose item %d \n", menunum);
\r