blob: 8e5b3b68de28e1e8114e4188c1bc12e15b42ade6 [file] [log] [blame] [edit]
/*
* BRLTTY - A background process providing access to the console screen (when in
* text mode) for a blind person using a refreshable braille display.
*
* Copyright (C) 1995-2023 by The BRLTTY Developers.
*
* BRLTTY comes with ABSOLUTELY NO WARRANTY.
*
* This is free software, placed under the terms of the
* GNU Lesser General Public License, as published by the Free Software
* Foundation; either version 2.1 of the License, or (at your option) any
* later version. Please see the file LICENSE-LGPL for details.
*
* Web Page: http://brltty.app/
*
* This software is maintained by Dave Mielke <dave@mielke.cc>.
*/
#ifndef BRLTTY_INCLUDED_KTB_INTERNAL
#define BRLTTY_INCLUDED_KTB_INTERNAL
#include "strfmth.h"
#include "cmd_types.h"
#include "async_handle.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#define MAX_MODIFIERS_PER_COMBINATION 10
typedef struct {
const char *name;
int bit;
} KeyboardFunction;
extern const KeyboardFunction keyboardFunctionTable[];
extern unsigned char keyboardFunctionCount;
typedef enum {
KCF_IMMEDIATE_KEY = 0X01
} KeyCombinationFlag;
typedef struct {
unsigned char flags;
unsigned char anyKeyCount;
unsigned char modifierCount;
unsigned char modifierPositions[MAX_MODIFIERS_PER_COMBINATION];
KeyValue modifierKeys[MAX_MODIFIERS_PER_COMBINATION];
KeyValue immediateKey;
} KeyCombination;
typedef struct {
const CommandEntry *entry;
int value;
} BoundCommand;
typedef enum {
KBF_HIDDEN = 0X01,
KBF_DUPLICATE = 0X80
} KeyBindingFlag;
typedef struct {
BoundCommand primaryCommand;
BoundCommand secondaryCommand;
KeyCombination keyCombination;
unsigned char flags;
} KeyBinding;
typedef enum {
HKF_HIDDEN = 0X01,
HKF_DUPLICATE = 0X80
} HotkeyFlag;
typedef struct {
KeyValue keyValue;
BoundCommand pressCommand;
BoundCommand releaseCommand;
unsigned char flags;
} HotkeyEntry;
typedef enum {
MKF_HIDDEN = 0X01,
MKF_DUPLICATE = 0X80
} MappedKeyFlag;
typedef struct {
KeyValue keyValue;
const KeyboardFunction *keyboardFunction;
unsigned char flags;
} MappedKeyEntry;
typedef struct {
wchar_t *name;
wchar_t *title;
unsigned char isSpecial : 1;
unsigned char isDefined : 1;
unsigned char isReferenced : 1;
unsigned char isIsolated : 1;
struct {
KeyBinding *table;
unsigned int size;
unsigned int count;
} keyBindings;
struct {
HotkeyEntry *table;
unsigned int size;
unsigned int count;
} hotkeys;
struct {
MappedKeyEntry *table;
unsigned int size;
unsigned int count;
int superimpose;
} mappedKeys;
} KeyContext;
typedef struct {
BoundCommand *commands;
unsigned int count;
} CommandMacro;
typedef struct {
char **arguments;
unsigned int count;
} HostCommand;
struct KeyTableStruct {
wchar_t *title;
struct {
wchar_t **table;
unsigned int size;
unsigned int count;
} notes;
struct {
const KeyNameEntry **table;
unsigned int count;
} keyNames;
struct {
KeyContext *table;
unsigned int count;
} keyContexts;
struct {
unsigned char persistent;
unsigned char next;
unsigned char current;
} context;
struct {
KeyValue *table;
unsigned int size;
unsigned int count;
} pressedKeys;
struct {
int command;
} release;
struct {
AsyncHandle alarm;
int command;
unsigned repeat:1;
const char *keyAction;
unsigned char keyContext;
KeyValue keyValue;
} longPress;
struct {
AsyncHandle alarm;
int time;
} autorelease;
struct {
CommandMacro *table;
unsigned int size;
unsigned int count;
} commandMacros;
struct {
HostCommand *table;
unsigned int size;
unsigned int count;
} hostCommands;
struct {
const char *logLabel;
const unsigned char *logKeyEventsFlag;
const unsigned char *keyboardEnabledFlag;
} options;
};
extern void copyKeyValues (KeyValue *target, const KeyValue *source, unsigned int count);
extern int compareKeyValues (const KeyValue *value1, const KeyValue *value2);
extern int findKeyValue (
const KeyValue *values, unsigned int count,
const KeyValue *target, unsigned int *position
);
extern int insertKeyValue (
KeyValue **values, unsigned int *count, unsigned int *size,
const KeyValue *value, unsigned int position
);
extern void removeKeyValue (KeyValue *values, unsigned int *count, unsigned int position);
extern int deleteKeyValue (KeyValue *values, unsigned int *count, const KeyValue *value);
extern int compareKeyBindings (const KeyBinding *binding1, const KeyBinding *binding2);
extern int compareHotkeyEntries (const HotkeyEntry *hotkey1, const HotkeyEntry *hotkey2);
extern int compareMappedKeyEntries (const MappedKeyEntry *map1, const MappedKeyEntry *map2);
extern STR_DECLARE_FORMATTER(formatKeyName, KeyTable *table, const KeyValue *value);
extern STR_DECLARE_FORMATTER(formatKeyCombination, KeyTable *table, const KeyCombination *combination);
extern void resetLongPressData (KeyTable *table);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* BRLTTY_INCLUDED_KTB_INTERNAL */