OSDN Git Service

Fix copyright problems reported by Doug Evans.
[pf3gnuchains/gcc-fork.git] / gcc / ada / 5oosinte.adb
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                 GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS              --
4 --                                                                          --
5 --                   S Y S T E M . O S _ I N T E R F A C E                  --
6 --                                                                          --
7 --                                  B o d y                                 --
8 --                                                                          --
9 --            Copyright (C) 1991-2002 Florida State University              --
10 --                                                                          --
11 -- GNARL is free software; you can  redistribute it  and/or modify it under --
12 -- terms of the  GNU General Public License as published  by the Free Soft- --
13 -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
14 -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
17 -- for  more details.  You should have  received  a copy of the GNU General --
18 -- Public License  distributed with GNARL; see file COPYING.  If not, write --
19 -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
20 -- MA 02111-1307, USA.                                                      --
21 --                                                                          --
22 -- As a special exception,  if other files  instantiate  generics from this --
23 -- unit, or you link  this unit with other files  to produce an executable, --
24 -- this  unit  does not  by itself cause  the resulting  executable  to  be --
25 -- covered  by the  GNU  General  Public  License.  This exception does not --
26 -- however invalidate  any other reasons why  the executable file  might be --
27 -- covered by the  GNU Public License.                                      --
28 --                                                                          --
29 -- GNARL was developed by the GNARL team at Florida State University. It is --
30 -- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
31 -- State University (http://www.gnat.com).                                  --
32 --                                                                          --
33 ------------------------------------------------------------------------------
34
35 --  This is the OS/2 version of this package
36
37 pragma Polling (Off);
38 --  Turn off polling, we do not want ATC polling to take place during
39 --  tasking operations. It causes infinite loops and other problems.
40
41 with Interfaces.OS2Lib.Errors;
42 with Interfaces.OS2Lib.Synchronization;
43
44 package body System.OS_Interface is
45
46    use Interfaces;
47    use Interfaces.OS2Lib;
48    use Interfaces.OS2Lib.Synchronization;
49    use Interfaces.OS2Lib.Errors;
50
51    -----------
52    -- Yield --
53    -----------
54
55    --  Give up the remainder of the time-slice and yield the processor
56    --  to other threads of equal priority. Yield will return immediately
57    --  without giving up the current time-slice when the only threads
58    --  that are ready have a lower priority.
59
60    --  ???  Just giving up the current time-slice seems not to be enough
61    --  to get the thread to the end of the ready queue if OS/2 does use
62    --  a queue at all. As a partial work-around, we give up two time-slices.
63
64    --  This is the best we can do now, and at least is sufficient for passing
65    --  the ACVC 2.0.1 Annex D tests.
66
67    procedure Yield is
68    begin
69       Delay_For (0);
70       Delay_For (0);
71    end Yield;
72
73    ---------------
74    -- Delay_For --
75    ---------------
76
77    procedure Delay_For (Period : in Duration_In_Millisec) is
78       Result : APIRET;
79
80    begin
81       pragma Assert (Period >= 0, "GNULLI---Delay_For: negative argument");
82
83       --  ??? DosSleep is not the appropriate function for a delay in real
84       --  time. It only gives up some number of scheduled time-slices.
85       --  Use a timer instead or block for some semaphore with a time-out.
86       Result := DosSleep (ULONG (Period));
87
88       if Result = ERROR_TS_WAKEUP then
89
90          --  Do appropriate processing for interrupted sleep
91          --  Can we raise an exception here?
92
93          null;
94       end if;
95
96       pragma Assert (Result = NO_ERROR, "GNULLI---Error in Delay_For");
97    end Delay_For;
98
99    -----------
100    -- Clock --
101    -----------
102
103    function Clock return Duration is
104
105       --  Implement conversion from tick count to Duration
106       --  using fixed point arithmetic. The frequency of
107       --  the Intel 8254 timer chip is 18.2 * 2**16 Hz.
108
109       Tick_Duration : constant := 1.0 / (18.2 * 2**16);
110       Tick_Count    : aliased QWORD;
111
112    begin
113       --  Read nr of clock ticks since boot time
114
115       Must_Not_Fail (DosTmrQueryTime (Tick_Count'Access));
116
117       return Tick_Count * Tick_Duration;
118    end Clock;
119
120 end System.OS_Interface;