1. package Keyboard is 
  2.  
  3.     pragma Pure; 
  4.  
  5.     type Modifiers_Type is (ALT, CTRL, SHIFT); 
  6.     type Modifiers_Array is array (Modifiers_Type) of Boolean; 
  7.  
  8.     MODIFIERS_NONE : constant Modifiers_Array := Modifiers_Array'(others=>False); 
  9.  
  10.     function "="( l, r : Modifiers_Array ) return Boolean; 
  11.  
  12.     function None( mods : Modifiers_Array ) return Boolean; 
  13.  
  14.     -- Returns True if only the Alt modifier is set. 
  15.     function Only_Alt( mods : Modifiers_Array ) return Boolean; 
  16.  
  17.     -- Returns True if only the Ctrl modifier is set. 
  18.     function Only_Ctrl( mods : Modifiers_Array ) return Boolean; 
  19.  
  20.     -- Returns True if only the Shift modifier is set. 
  21.     function Only_Shift( mods : Modifiers_Array ) return Boolean; 
  22.  
  23.     ---------------------------------------------------------------------------- 
  24.  
  25.     type Trillian is (Yes, No, Either); 
  26.  
  27.     function "="( l : Boolean; r : Trillian ) return Boolean; 
  28.  
  29.     function "="( l : Trillian; r : Boolean ) return Boolean; 
  30.  
  31.     ---------------------------------------------------------------------------- 
  32.  
  33.     type Modifiers_Pattern is array (Modifiers_Type) of Trillian; 
  34.  
  35.     MODIFIERS_ANY : constant Modifiers_Pattern := Modifiers_Pattern'(others=>Either); 
  36.  
  37.     function "="( l : Modifiers_Array; r : Modifiers_Pattern ) return Boolean; 
  38.  
  39.     function "="( l : Modifiers_Pattern; r : Modifiers_Array ) return Boolean; 
  40.  
  41. end Keyboard;