+++ /dev/null
-\r
-\r
-/* pdmenu.c */ \r
-/* This code is aimed at helping those who would like to */ \r
-/* create menus without using the curses library. */ \r
-/* It creates a count variable (which could be used to */ \r
-/* keep track of which item is highlighted). Using the */ \r
-/* up and down arrow keys increments and decrements the */ \r
-/* count variable. Finally, when you press Enter, the */ \r
-/* value of the count variable is printed and the program */ \r
-/* exits. */ \r
-/* This code is released to the public domain. */ \r
-/* "Share and enjoy...." ;) */ \r
-\r
-\r
-#include <string.h> \r
-#include <stdio.h> \r
-#include <termios.h> /* For getch() */ \r
-\r
-/* This implementation of getch() is from here - */ \r
-/* http://wesley.vidiqatch.org/ */ \r
-/* Thanks, Wesley! */ \r
-static struct termios old, new;\r
-\r
-/* Initialize new terminal i/o settings */\r
-void initTermios(int echo) {\r
- tcgetattr(0, &old); /* grab old terminal i/o settings */\r
- new = old; /* make new settings same as old settings */\r
- new.c_lflag &= ~ICANON; /* disable buffered i/o */\r
- new.c_lflag &= echo ? ECHO : ~ECHO; /* set echo mode */\r
- tcsetattr(0, TCSANOW, &new); /* use these new terminal i/o settings now */\r
-}\r
-\r
-\r
-/* Restore old terminal i/o settings */\r
-void resetTermios(void) {\r
- tcsetattr(0, TCSANOW, &old);\r
-}\r
-\r
-\r
-/* Read 1 character - echo defines echo mode */\r
-char getch_(int echo) {\r
- char ch;\r
- initTermios(echo);\r
- ch = getchar();\r
- resetTermios();\r
- return ch;\r
-}\r
-\r
-\r
-/* Read 1 character without echo */\r
-char getch(void) {\r
- return getch_(0);\r
-}\r
-\r
-\r
-/* Read 1 character with echo */\r
-char getche(void) {\r
- return getch_(1);\r
-} \r
-\r
-\r
-\r
-\r
-int main(void)\r
-{\r
- \r
- printf("Public Domain Menu Program \n"); \r
- printf("\nUse the up and down arrow keys then press Enter\n"); \r
- \r
- int menunum = 0; \r
- \r
- while(1) \r
- { \r
- \r
- int key = getch(); \r
- \r
- /* Up arrow is 27, 91, 65. ( ESC [ A ) */ \r
- /* Down arrow is 27, 91, 66. ( ESC [ B ) */ \r
- /* Right arrow is 27, 91, 67. ( ESC [ C ) */ \r
- /* Left arrow is 27, 91, 68. ( ESC [ D ) */ \r
- if(key == 27) \r
- { key = getch(); \r
- if(key == 91) \r
- key = getch(); \r
- if(key == 65) \r
- { puts("You pressed up arrow! \n"); \r
- menunum-=1; \r
- printf("Menunum is now %d \n", menunum); \r
- } \r
- else if(key == 66) \r
- { puts("You pressed down arrow! \n"); \r
- menunum+=1; \r
- printf("Menunum is now %d \n", menunum); \r
- } \r
- else if(key == 67) \r
- { puts("You pressed right arrow! \n"); \r
- } \r
- else if(key == 68) \r
- { puts("You pressed left arrow! \n"); \r
- } \r
- }\r
- \r
- /* A few other keys (for testing purposes ) */ \r
- else if(key == 97) \r
- { puts("You pressed the \"a\" key! \n"); \r
- } \r
- else if(key == 98) \r
- { puts("You pressed the \"b\" key! \n"); \r
- } \r
- else if(key == 99) \r
- { puts("You pressed the \"c\" key! \n"); \r
- }\r
- else if(key == 100) \r
- { puts("You pressed the \"d\" key! \n"); \r
- } \r
- \r
- \r
- /* The Enter key exits. Enter is 10 decimal */ \r
- else if(key == 10) \r
- { printf("You pressed ENTER! You chose item %d \n", menunum); \r
- break; } \r
- } \r
- \r
- return 0;\r
-} \r
-\r
-\r
-\r
-\r