2024-12-01 19:35:24 +00:00
|
|
|
//| Copyright: (C) 2020-2024 Kevin Larke <contact AT larke DOT org>
|
|
|
|
//| License: GNU GPL version 3.0 or above. See the accompanying LICENSE file.
|
2022-06-12 20:50:44 +00:00
|
|
|
#ifndef cwKeyboard_H
|
|
|
|
#define cwKeyboard_H
|
|
|
|
|
|
|
|
|
|
|
|
namespace cw
|
|
|
|
{
|
|
|
|
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
kInvalidKId,
|
|
|
|
kAsciiKId,
|
|
|
|
kLeftArrowKId,
|
|
|
|
kRightArrowKId,
|
|
|
|
kUpArrowKId,
|
|
|
|
kDownArrowKId,
|
|
|
|
kHomeKId,
|
|
|
|
kEndKId,
|
|
|
|
kPgUpKId,
|
|
|
|
kPgDownKId,
|
|
|
|
kInsertKId,
|
|
|
|
kDeleteKId,
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
unsigned code;
|
|
|
|
char ch;
|
|
|
|
bool ctlFl;
|
|
|
|
bool altFl;
|
|
|
|
} cmKbRecd;
|
|
|
|
|
|
|
|
// Set 'p' to NULL if the value of the key is not required.
|
|
|
|
void keyPress( cmKbRecd* p );
|
|
|
|
|
|
|
|
|
|
|
|
// Return non-zero if a key is waiting to be read otherwise return 0.
|
|
|
|
// Use getchar() to pick up the key.
|
|
|
|
//
|
|
|
|
// Example:
|
|
|
|
// while( 1 )
|
|
|
|
// {
|
|
|
|
// if( cmIsKeyWaiting() == 0 )
|
|
|
|
// usleep(20000);
|
|
|
|
// else
|
|
|
|
// {
|
|
|
|
// char c = getchar();
|
|
|
|
// switch(c)
|
|
|
|
// {
|
|
|
|
// ....
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// TODO: Note that this function turns off line-buffering on stdin.
|
|
|
|
// It should be changed to a three function sequence.
|
|
|
|
// bool org_state = cmSetStdinLineBuffering(false);
|
|
|
|
// ....
|
|
|
|
// isKeyWaiting()
|
|
|
|
// ....
|
|
|
|
// setStdinLineBuffering(org_state)
|
|
|
|
int isKeyWaiting();
|
|
|
|
|
|
|
|
void kbTest1();
|
|
|
|
void kbTest2();
|
|
|
|
void kbTest3();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|