c974006.a

来自「linux下编程用 编译软件」· A 代码 · 共 198 行

A
198
字号
-- C974006.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:--      Check that the sequence of statements of the triggering alternative--      of an asynchronous select statement is executed if the triggering--      statement is a protected entry call, and the entry is accepted--      immediately. Check that the corresponding entry body is executed--      before the sequence of statements of the triggering alternative.--      Check that the abortable part is not executed.---- TEST DESCRIPTION:--      Declare a main procedure containing an asynchronous select with a--      protected entry call as triggering statement. Declare a protected--      procedure which sets the protected entry's barrier true. Force the--      entry call to be accepted immediately by calling this protected--      procedure prior to the asynchronous select. Since the entry call--      is accepted immediately, the abortable part should never start. When--      entry call completes, the sequence of statements of the triggering--      alternative should execute.------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0----!package C974006_0 is  -- Automated teller machine abstraction.   -- Flag for testing purposes:   Entry_Body_Executed : Boolean := False;   type Key_Enum is (None, Cancel, Deposit, Withdraw);   type Card_Number_Type is private;   type Card_PIN_Type    is private;   type ATM_Card_Type    is private;   Transaction_Canceled : exception;   protected type ATM_Keyboard_Protected is      entry Cancel_Pressed;      procedure Read_Key;   private      Last_Key_Pressed : Key_Enum := None;   end ATM_Keyboard_Protected;   procedure Read_Card (Card : in out ATM_Card_Type);   procedure Validate_Card (Card : in ATM_Card_Type);   procedure Perform_Transaction (Card : in ATM_Card_Type);private   type Card_Number_Type is range   1 .. 9999;   type Card_PIN_Type    is range 100 ..  999;   type ATM_Card_Type is record      Number : Card_Number_Type;      PIN    : Card_PIN_Type;   end record;end C974006_0;     --==================================================================--with Report;package body C974006_0 is   protected body ATM_Keyboard_Protected is      entry Cancel_Pressed when (Last_Key_Pressed = Cancel) is      begin         Entry_Body_Executed := True;      end Cancel_Pressed;      procedure Read_Key is      begin         -- Simulate a procedure which processes user keyboard input, and         -- which is called by some interrupt handler.         Last_Key_Pressed := Cancel;      end Read_Key;   end ATM_Keyboard_Protected;   procedure Read_Card (Card : in out ATM_Card_Type) is   begin      Card.Number := 9999;      Card.PIN    := 111;   end Read_Card;   procedure Validate_Card (Card : in ATM_Card_Type) is   begin      Report.Failed ("Abortable part executed");   end Validate_Card;   procedure Perform_Transaction (Card : in ATM_Card_Type) is   begin      Report.Failed ("Triggering alternative sequence of statements " &                      "not fully executed");   end Perform_Transaction;end C974006_0;     --==================================================================--with Report;with C974006_0;  -- Automated teller machine abstraction.use  C974006_0;procedure C974006 is   Card_Data : ATM_Card_Type;begin   Report.Test ("C974006", "ATC: trigger is protected entry call" &                              " and completes first");   Read_Card (Card_Data);   declare      Keyboard : C974006_0.ATM_Keyboard_Protected;   begin      -- Simulate the situation where the user hits cancel before the      -- validation process can start:      Keyboard.Read_Key;                 -- Force Keyboard.Cancel_Pressed to                                         -- be accepted immediately.      --                                    --      -- Asynchronous select is tested here --      --                                    --      select         Keyboard.Cancel_Pressed;        -- Entry call is accepted immediately,                                         -- so abortable part does NOT start.         if not Entry_Body_Executed then -- Executes after entry completes.            Report.Failed ("Triggering alternative sequence of statements " &                           "executed before triggering statement complete");         end if;         raise Transaction_Canceled;     -- Control passes to exception                                         -- handler.      then abort         Validate_Card (Card_Data);      -- Should not be executed.      end select;      Perform_Transaction (Card_Data);   -- Should not be reached.   exception      when Transaction_Canceled =>         null;   end;   Report.Result;end C974006;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?