Demo: input5 from "C from Dummies" (2007)
Something like this exists in the Windows Kernel I guarantee it
This commit is contained in:
parent
587feda020
commit
6953a62612
99
demos/input5.c
Normal file
99
demos/input5.c
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#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);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user