home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fish 'n' More 2
/
fishmore-publicdomainlibraryvol.ii1991xetec.iso
/
disks
/
disk430.lzh
/
SmartFields
/
Functions
/
console_input.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-01-11
|
3KB
|
93 lines
/***************************************
* CONSOLE INPUT v1.23
* © Copyright 1988 Timm Martin
* All Rights Reserved
****************************************/
#include <exec/io.h>
#include <exec/types.h>
#include <console/console.h>
#include <console/functions.h>
int console_input( header )
struct ConsoleHeader *header;
{
ULONG actual; /* actual number of characters read from console */
UBYTE hold; /* temporary character storage */
int where; /* character in buffer being examined */
actual = con_read( header->ReadReq, header->Buffer );
if (!actual)
return (0); /* no characters read */
else
where = 0; /* start at beginning of buffer */
/* if read printable character */
if ((header->Buffer[where] >= 0x20 && header->Buffer[where] <= 0x7E) ||
(header->Buffer[where] >= 0xA0 && header->Buffer[where] <= 0xFF))
/* if input is masked */
if (header->Mask) {
/* if acceptable input character */
if ((header->Mask->Element[header->Buffer[where]>>5]) &
(MASK_ENABLE << (header->Buffer[where] % 32 )))
return (header->Buffer[where]);
else
return (0);
}
else
return (header->Buffer[where]);
else if (header->Buffer[where] == BACKSPACE_CODE)
return (CON_BACKSPACE);
else if (header->Buffer[where] == RETURN_CODE)
return (CON_RETURN);
else if (header->Buffer[where] == DELETE_CODE)
return (CON_DELETE);
else if (header->Buffer[where] == TAB_CODE)
return (CON_TAB);
else if (header->Buffer[where] == ESCAPE_CODE)
return (CON_ESCAPE);
else if ((hold = header->Buffer[where] | CONTROL_CODE) >= ' ' && hold <= '~')
return (CON_CONTROL + hold); /* return control key */
else if (header->Buffer[where] == CSI) {
if (actual == 1)
return (CON_ALT_ESCAPE);
if (header->Buffer[++where] >= '0' && header->Buffer[where] <= '9') {
if (header->Buffer[where+1] == '~')
/* function keys F1-F10 */
return (CON_F + header->Buffer[where] - '0' + 1);
else if (header->Buffer[where+1] >= '0' &&
header->Buffer[where+1] <= '9' &&
header->Buffer[where+2] == '~')
/* shifted F1-F10 */
return (CON_SHIFT_F + header->Buffer[where+1] - '0' + 1);
} /* if receiving function key input */
else {
switch (header->Buffer[where]) {
case 'A': return (CON_CURSOR_UP); break;
case 'B': return (CON_CURSOR_DOWN); break;
case 'C': return (CON_CURSOR_RIGHT); break;
case 'D': return (CON_CURSOR_LEFT); break;
case ' ': if (header->Buffer[++where] == '@')
return (CON_SHIFT_RIGHT);
else if (header->Buffer[where] == 'A')
return (CON_SHIFT_LEFT);
break;
case 'T': return (CON_SHIFT_UP); break;
case 'S': return (CON_SHIFT_DOWN); break;
case '?': if (header->Buffer[++where] == '~')
return (CON_HELP);
break;
case 'Z': return (CON_SHIFT_TAB); break;
} /* switch */
} /* else not function keys */
} /* else header->Buffer == <CSI> */
return (0); /* unrecognizable character */
}