old-c-code/demos/input5.c
kougyokugentou 6953a62612 Demo: input5 from "C from Dummies" (2007)
Something like this exists in the Windows Kernel I guarantee it
2021-10-24 16:16:42 -07:00

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);
}