-- LA140101.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.
--*
--
-- OBJECTIVE:
--      See LA140102.AM.
--
-- TEST DESCRIPTION:
--      See LA140102.AM.
--
-- SPECIAL REQUIREMENTS:
--      See LA140102.AM.
--
-- TEST FILES:
--      This test consists of the following files:
--         LA140100.A
--      -> LA140101.A
--         LA140102.AM
--         LA140103.A 
--
-- PASS/FAIL CRITERIA:                
--      See LA140102.AM.
--
-- CHANGE HISTORY:
--     01 MAY 95   ACVC 1.12   LA5008O baseline version
--     29 JUN 95   SAIC        Initial version
--     29 FEB 96   SAIC        First revision after review
--     17 NOV 96   SAIC        Modified prologue to conform to coding
--                             conventions. Changed task to task type.
--
--!

generic
     type scalar is range <>;
package LA14010_1 is
     procedure inc (param : in out scalar);   
end LA14010_1;

with LA14010_0;
use LA14010_0;

package body LA14010_1 is
     procedure inc (param : in out scalar) is
     begin 
          for i in 1..delta_v loop
               param := param + 1;
          end loop;
     end inc;

     task type inc_task is
          entry increment (param : in out scalar);
     end inc_task;

     task body inc_task is separate;
end LA14010_1;


separate (LA14010_1)

task body inc_task is
     static_zero : integer := 0;
begin
     accept increment (param : in out scalar) do
          static_zero := LA14010_0.delta_v + static_zero;
          static_zero := static_zero - LA14010_0.delta_v;
          inc (param);
     end increment;
end inc_task;
