package Keyboard is
pragma Pure;
type Modifiers_Type is (ALT, CTRL, SHIFT);
type Modifiers_Array is array (Modifiers_Type) of Boolean;
MODIFIERS_NONE : constant Modifiers_Array := Modifiers_Array'(others=>False);
function "="( l, r : Modifiers_Array ) return Boolean;
function None( mods : Modifiers_Array ) return Boolean;
function Only_Alt( mods : Modifiers_Array ) return Boolean;
function Only_Ctrl( mods : Modifiers_Array ) return Boolean;
function Only_Shift( mods : Modifiers_Array ) return Boolean;
type Trillian is (Yes, No, Either);
function "="( l : Boolean; r : Trillian ) return Boolean;
function "="( l : Trillian; r : Boolean ) return Boolean;
type Modifiers_Pattern is array (Modifiers_Type) of Trillian;
MODIFIERS_ANY : constant Modifiers_Pattern := Modifiers_Pattern'(others=>Either);
function "="( l : Modifiers_Array; r : Modifiers_Pattern ) return Boolean;
function "="( l : Modifiers_Pattern; r : Modifiers_Array ) return Boolean;
end Keyboard;