-- F392C00.A
--
--                             Grant of Unlimited Rights
--
--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained 
--     unlimited rights in the software and documentation contained herein.
--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making 
--     this public release, the Government intends to confer upon all 
--     recipients unlimited rights  equal to those held by the Government.  
--     These rights include rights to use, duplicate, release or disclose the 
--     released technical data and computer software in whole or in part, in 
--     any manner and for any purpose whatsoever, and to have or permit others 
--     to do so.
--
--                                    DISCLAIMER
--
--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED 
--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE 
--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
--     PARTICULAR PURPOSE OF SAID MATERIAL.
--*
--
-- FOUNDATION DESCRIPTION:
--      This foundation provides a basis for tagged type and dispatching
--      tests.  Each test describes the utilizations.
--
-- CHANGE HISTORY:
--      06 Dec 94   SAIC    ACVC 2.0
--      24 OCT 95   SAIC    Updated for ACVC 2.0.1
--
--!

package F392C00_1 is  -- Switches

  type Toggle is tagged private;    ---------------------------------- Toggle

  function Create return Toggle;
  procedure Flip   ( It : in out Toggle );
  function On      ( It : Toggle'Class ) return Boolean;
  function Off     ( It : Toggle'Class ) return Boolean;

  type Dimmer is new Toggle with private;    ------------------------- Dimmer

  type Luminance is range 0..100;

  function  Create return Dimmer;
  procedure Flip    ( It : in out Dimmer );
  procedure Brighten( It : in out Dimmer;
                      By : in Luminance := 10 );
  procedure Dim     ( It : in out Dimmer;
                      By : in Luminance := 10 );
  function Intensity( It : Dimmer ) return Luminance;

  type Auto_Dimmer is new Dimmer with private;    --------------- Auto_Dimmer

  function  Create return Auto_Dimmer;
  procedure Flip      ( It: in out Auto_Dimmer );
  procedure Set_Auto  ( It: in out Auto_Dimmer );
  procedure Clear_Auto( It: in out Auto_Dimmer );
  -- procedure Set_Manual( It: in out Auto_Dimmer ) renames Clear_Auto;
  procedure Set_Cutin ( It: in out Auto_Dimmer; Lumens: in Luminance );
  procedure Set_Cutout( It: in out Auto_Dimmer; Lumens: in Luminance );

  function Auto            ( It: Auto_Dimmer ) return Boolean;
  function Cutout_Threshold( It: Auto_Dimmer ) return Luminance;
  function Cutin_Threshold ( It: Auto_Dimmer ) return Luminance;

  function TC_CW_TI( Key : Character ) return Toggle'Class;

  function TC_Non_Disp( It: Toggle ) return Boolean;
  function TC_Non_Disp( It: Dimmer ) return Boolean;
  function TC_Non_Disp( It: Auto_Dimmer ) return Boolean;

private

  type Toggle is tagged record
    On : Boolean := False;
  end record;

  type Dimmer is new Toggle with record
    Intensity : Luminance := 100;
  end record;  

  type Auto_Dimmer is new Dimmer with record
    Cutout_Threshold : Luminance := 60;
    Cutin_Threshold  : Luminance := 40;
    Auto_Engaged     : Boolean := False;
  end record;  

end F392C00_1;

with TCTouch;
package body F392C00_1 is

  function Create return Toggle is
  begin
    TCTouch.Touch( '1' );  ------------------------------------------------ 1
    return Toggle'( On => True );
  end Create;

  function Create return Dimmer is
  begin
    TCTouch.Touch( '2' );  ------------------------------------------------ 2
    return Dimmer'( On => True, Intensity => 75 );
  end Create;

  function Create return Auto_Dimmer is
  begin
    TCTouch.Touch( '3' );  ------------------------------------------------ 3
    return  Auto_Dimmer'( On => True, Intensity => 25,
                          Cutout_Threshold | Cutin_Threshold => 50,
                          Auto_Engaged => True );
  end Create;

  procedure Flip   ( It : in out Toggle ) is
  begin
    TCTouch.Touch( 'A' );  ------------------------------------------------ A
    It.On := not It.On;
  end Flip;

  function On( It : Toggle'Class ) return Boolean is
  begin
    TCTouch.Touch( 'B' );  ------------------------------------------------ B
    return It.On;
  end On;

  function Off( It : Toggle'Class ) return Boolean is
  begin
    TCTouch.Touch( 'C' );  ------------------------------------------------ C
    return not It.On;
  end Off;

  procedure Brighten( It : in out Dimmer;
                      By : in Luminance := 10 ) is
  begin
    TCTouch.Touch( 'D' );  ------------------------------------------------ D
    if (It.Intensity+By) <= Luminance'Last then
      It.Intensity := It.Intensity+By;
    else
      It.Intensity := Luminance'Last;
    end if;
  end Brighten;

  procedure Dim     ( It : in out Dimmer;
                      By : in Luminance := 10 ) is
  begin
    TCTouch.Touch( 'E' );  ------------------------------------------------ E
    if (It.Intensity-By) >= Luminance'First then
      It.Intensity := It.Intensity-By;
    else
      It.Intensity := Luminance'First;
    end if;
  end Dim;

  function Intensity( It : Dimmer ) return Luminance is
  begin
    TCTouch.Touch( 'F' );  ------------------------------------------------ F
    if On(It) then
      return It.Intensity;
    else
      return Luminance'First;
    end if;
  end Intensity;

  procedure Flip    ( It : in out Dimmer ) is
  begin
    TCTouch.Touch( 'G' );  ------------------------------------------------ G
    if On( It ) and (It.Intensity < 50) then
      It.Intensity := Luminance'Last - It.Intensity;
    else
      Flip( Toggle( It ) );
    end if;
  end Flip;

  procedure Set_Auto  ( It: in out Auto_Dimmer ) is
  begin
    TCTouch.Touch( 'H' );  ------------------------------------------------ H
    It.Auto_Engaged := True;
  end Set_Auto;

  procedure Clear_Auto( It: in out Auto_Dimmer ) is
  begin
    TCTouch.Touch( 'I' );  ------------------------------------------------ I
    It.Auto_Engaged := False;
  end Clear_Auto;

  function  Auto           ( It: Auto_Dimmer ) return Boolean is
  begin
    TCTouch.Touch( 'J' );  ------------------------------------------------ J
    return It.Auto_Engaged;
  end Auto;

  procedure Flip     ( It: in out Auto_Dimmer ) is
  begin
    TCTouch.Touch( 'K' );  ------------------------------------------------ K
    if It.Auto_Engaged then
      if Off(It) then
       Flip( Dimmer( It ) );
      else
       It.Auto_Engaged := False;
      end if;
    else
      Flip( Dimmer( It ) );
    end if;
  end Flip;

  procedure Set_Cutin ( It : in out Auto_Dimmer;
                        Lumens : in Luminance) is
  begin
    TCTouch.Touch( 'L' );  ------------------------------------------------ L
    It.Cutin_Threshold := Lumens;
  end Set_Cutin;

  procedure Set_Cutout( It : in out Auto_Dimmer;
                        Lumens : in Luminance) is
  begin
    TCTouch.Touch( 'M' );  ------------------------------------------------ M
    It.Cutout_Threshold := Lumens;
  end Set_Cutout;

  function Cutout_Threshold( It : Auto_Dimmer ) return Luminance is
  begin
    TCTouch.Touch( 'N' );  ------------------------------------------------ N
    return It.Cutout_Threshold;
  end Cutout_Threshold;

  function Cutin_Threshold ( It : Auto_Dimmer ) return Luminance is
  begin
    TCTouch.Touch( 'O' );  ------------------------------------------------ O
    return It.Cutin_Threshold;
  end Cutin_Threshold;

  function TC_CW_TI( Key : Character ) return Toggle'Class is
  begin
    TCTouch.Touch( 'W' );  ------------------------------------------------ W
    case Key is
      when 'T' | 't' => return Toggle'( On => True );
      when 'D' | 'd' => return Dimmer'( On => True, Intensity => 75 );
      when 'A' | 'a' => return Auto_Dimmer'( On => True, Intensity => 25,
                                 Cutout_Threshold | Cutin_Threshold => 50,
                                 Auto_Engaged => True );
      when others => null;
    end case;
  end TC_CW_TI;

  function TC_Non_Disp( It: Toggle ) return Boolean is
  begin
    TCTouch.Touch( 'X' );  ------------------------------------------------ X
    return It.On;
  end TC_Non_Disp;

  function TC_Non_Disp( It: Dimmer ) return Boolean is
  begin
    TCTouch.Touch( 'Y' );  ------------------------------------------------ Y
    return It.On;
  end TC_Non_Disp;

  function TC_Non_Disp( It: Auto_Dimmer ) return Boolean is
  begin
    TCTouch.Touch( 'Z' );  ------------------------------------------------ Z
    return It.On;
  end TC_Non_Disp;

end F392C00_1;
