diff --git a/demos/input5.c b/demos/input5.c new file mode 100644 index 0000000..ed8d668 --- /dev/null +++ b/demos/input5.c @@ -0,0 +1,99 @@ +#include +#include + +#define CR 0x0d //carriage return +#define ESC 0x1b //Escape key +#define TAB 0x09 +#define LF 0x0a //line feed +#define BACKSPACE 0x08 +#define NULL 0 //Empty character +#define TRUE 1 +#define FALSE 0 +#define LENGTH 15 //size of the string + +int input(char *string, int length); + +void main() +{ + char string[LENGTH]; + + printf("What is your name?"); + if(!input(string,LENGTH)) + printf("Darn glad to meet you, %s!\n",string); + else + printf("\n*** Canceled"); +} + +int input(char *string, int length) +{ + int done = FALSE; + int cancel = FALSE; + int index = 0; + char ch; + + string[0] = NULL; //init the buffer + + do + { + ch = getch(); + + /* Check to see whether the buffer is full */ + + if (index == length) + { + switch(ch) + { + case ESC: + done = TRUE; + cancel = TRUE; + break; + case CR: + break; + case BACKSPACE: + break; + default: + ch = NULL; + break; + } + } + + /* Process the keyboard input */ + + switch(ch) + { + case ESC: //Escape key + done = TRUE; + cancel = TRUE; + break; + case CR: //Enter key + putchar(ch); + putchar(LF); + string[index] = NULL; + done = TRUE; + break; + case BACKSPACE: + if(index==0) + { + break; + } + else + { + putchar(ch); + putchar(' '); + putchar(ch); + index--; + break; + } + case NULL: + break; + default: //display & store + putchar(ch); + index[string] = ch; + index++; + break; + } + } + while(!done); + return(cancel); +} +