6953a62612
Something like this exists in the Windows Kernel I guarantee it
100 lines
2.0 KiB
C
100 lines
2.0 KiB
C
#include <stdio.h>
|
|
#include <conio.h>
|
|
|
|
#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);
|
|
}
|
|
|