OSDN Git Service

Add NIOS2 support. Code from SourceyG++.
[pf3gnuchains/gcc-fork.git] / gcc / ada / s-win32.ads
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                        GNAT RUN-TIME COMPONENTS                          --
4 --                                                                          --
5 --                         S Y S T E M . W I N 3 2                          --
6 --                                                                          --
7 --                                 S p e c                                  --
8 --                                                                          --
9 --         Copyright (C) 2008-2009, Free Software Foundation, Inc.          --
10 --                                                                          --
11 -- GNAT 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 3,  or (at your option) any later ver- --
14 -- sion.  GNAT 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.                                     --
17 --                                                                          --
18 -- As a special exception under Section 7 of GPL version 3, you are granted --
19 -- additional permissions described in the GCC Runtime Library Exception,   --
20 -- version 3.1, as published by the Free Software Foundation.               --
21 --                                                                          --
22 -- You should have received a copy of the GNU General Public License and    --
23 -- a copy of the GCC Runtime Library Exception along with this program;     --
24 -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
25 -- <http://www.gnu.org/licenses/>.                                          --
26 --                                                                          --
27 -- GNAT was originally developed  by the GNAT team at  New York University. --
28 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
29 --                                                                          --
30 ------------------------------------------------------------------------------
31
32 --  This package plus its child provide the low level interface to the Win32
33 --  API. The core part of the Win32 API (common to RTX and Win32) is in this
34 --  package, and an additional part of the Win32 API which is not supported by
35 --  RTX is in package System.Win33.Ext.
36
37 with Interfaces.C;
38
39 package System.Win32 is
40    pragma Pure;
41
42    -------------------
43    -- General Types --
44    -------------------
45
46    --  The LARGE_INTEGER type is actually a fixed point type
47    --  that only can represent integers. The reason for this is
48    --  easier conversion to Duration or other fixed point types.
49    --  (See Operations.Clock)
50
51    type LARGE_INTEGER is delta 1.0 range -2.0**63 .. 2.0**63 - 1.0;
52
53    subtype PVOID is Address;
54
55    type HANDLE is new Interfaces.C.ptrdiff_t;
56
57    INVALID_HANDLE_VALUE : constant HANDLE := -1;
58    INVALID_FILE_SIZE    : constant := 16#FFFFFFFF#;
59
60    type DWORD  is new Interfaces.C.unsigned_long;
61    type WORD   is new Interfaces.C.unsigned_short;
62    type BYTE   is new Interfaces.C.unsigned_char;
63    type LONG   is new Interfaces.C.long;
64    type CHAR   is new Interfaces.C.char;
65
66    type BOOL   is new Interfaces.C.int;
67    for BOOL'Size use Interfaces.C.int'Size;
68
69    type Bits1  is range 0 .. 2 ** 1 - 1;
70    type Bits2  is range 0 .. 2 ** 2 - 1;
71    type Bits17 is range 0 .. 2 ** 17 - 1;
72    for Bits1'Size  use 1;
73    for Bits2'Size  use 2;
74    for Bits17'Size use 17;
75
76    FALSE : constant := 0;
77    TRUE  : constant := 1;
78
79    function GetLastError return DWORD;
80    pragma Import (Stdcall, GetLastError, "GetLastError");
81
82    -----------
83    -- Files --
84    -----------
85
86    CP_UTF8                            : constant := 65001;
87    CP_ACP                             : constant := 0;
88
89    GENERIC_READ                       : constant := 16#80000000#;
90    GENERIC_WRITE                      : constant := 16#40000000#;
91
92    CREATE_NEW                         : constant := 1;
93    CREATE_ALWAYS                      : constant := 2;
94    OPEN_EXISTING                      : constant := 3;
95    OPEN_ALWAYS                        : constant := 4;
96    TRUNCATE_EXISTING                  : constant := 5;
97
98    FILE_SHARE_DELETE                  : constant := 16#00000004#;
99    FILE_SHARE_READ                    : constant := 16#00000001#;
100    FILE_SHARE_WRITE                   : constant := 16#00000002#;
101
102    FILE_BEGIN                         : constant := 0;
103    FILE_CURRENT                       : constant := 1;
104    FILE_END                           : constant := 2;
105
106    PAGE_NOACCESS                      : constant := 16#0001#;
107    PAGE_READONLY                      : constant := 16#0002#;
108    PAGE_READWRITE                     : constant := 16#0004#;
109    PAGE_WRITECOPY                     : constant := 16#0008#;
110    PAGE_EXECUTE                       : constant := 16#0010#;
111
112    FILE_MAP_ALL_ACCESS                : constant := 16#F001f#;
113    FILE_MAP_READ                      : constant := 4;
114    FILE_MAP_WRITE                     : constant := 2;
115    FILE_MAP_COPY                      : constant := 1;
116
117    FILE_ADD_FILE                      : constant := 16#0002#;
118    FILE_ADD_SUBDIRECTORY              : constant := 16#0004#;
119    FILE_APPEND_DATA                   : constant := 16#0004#;
120    FILE_CREATE_PIPE_INSTANCE          : constant := 16#0004#;
121    FILE_DELETE_CHILD                  : constant := 16#0040#;
122    FILE_EXECUTE                       : constant := 16#0020#;
123    FILE_LIST_DIRECTORY                : constant := 16#0001#;
124    FILE_READ_ATTRIBUTES               : constant := 16#0080#;
125    FILE_READ_DATA                     : constant := 16#0001#;
126    FILE_READ_EA                       : constant := 16#0008#;
127    FILE_TRAVERSE                      : constant := 16#0020#;
128    FILE_WRITE_ATTRIBUTES              : constant := 16#0100#;
129    FILE_WRITE_DATA                    : constant := 16#0002#;
130    FILE_WRITE_EA                      : constant := 16#0010#;
131    STANDARD_RIGHTS_READ               : constant := 16#20000#;
132    STANDARD_RIGHTS_WRITE              : constant := 16#20000#;
133    SYNCHRONIZE                        : constant := 16#100000#;
134
135    FILE_ATTRIBUTE_READONLY            : constant := 16#00000001#;
136    FILE_ATTRIBUTE_HIDDEN              : constant := 16#00000002#;
137    FILE_ATTRIBUTE_SYSTEM              : constant := 16#00000004#;
138    FILE_ATTRIBUTE_DIRECTORY           : constant := 16#00000010#;
139    FILE_ATTRIBUTE_ARCHIVE             : constant := 16#00000020#;
140    FILE_ATTRIBUTE_DEVICE              : constant := 16#00000040#;
141    FILE_ATTRIBUTE_NORMAL              : constant := 16#00000080#;
142    FILE_ATTRIBUTE_TEMPORARY           : constant := 16#00000100#;
143    FILE_ATTRIBUTE_SPARSE_FILE         : constant := 16#00000200#;
144    FILE_ATTRIBUTE_REPARSE_POINT       : constant := 16#00000400#;
145    FILE_ATTRIBUTE_COMPRESSED          : constant := 16#00000800#;
146    FILE_ATTRIBUTE_OFFLINE             : constant := 16#00001000#;
147    FILE_ATTRIBUTE_NOT_CONTENT_INDEXED : constant := 16#00002000#;
148    FILE_ATTRIBUTE_ENCRYPTED           : constant := 16#00004000#;
149    FILE_ATTRIBUTE_VALID_FLAGS         : constant := 16#00007fb7#;
150    FILE_ATTRIBUTE_VALID_SET_FLAGS     : constant := 16#000031a7#;
151
152    type OVERLAPPED is record
153       Internal     : DWORD;
154       InternalHigh : DWORD;
155       Offset       : DWORD;
156       OffsetHigh   : DWORD;
157       hEvent       : HANDLE;
158    end record;
159
160    type SECURITY_ATTRIBUTES is record
161       nLength             : DWORD;
162       pSecurityDescriptor : PVOID;
163       bInheritHandle      : BOOL;
164    end record;
165
166    function CreateFileA
167      (lpFileName            : Address;
168       dwDesiredAccess       : DWORD;
169       dwShareMode           : DWORD;
170       lpSecurityAttributes  : access SECURITY_ATTRIBUTES;
171       dwCreationDisposition : DWORD;
172       dwFlagsAndAttributes  : DWORD;
173       hTemplateFile         : HANDLE) return HANDLE;
174    pragma Import (Stdcall, CreateFileA, "CreateFileA");
175
176    function CreateFile
177      (lpFileName            : Address;
178       dwDesiredAccess       : DWORD;
179       dwShareMode           : DWORD;
180       lpSecurityAttributes  : access SECURITY_ATTRIBUTES;
181       dwCreationDisposition : DWORD;
182       dwFlagsAndAttributes  : DWORD;
183       hTemplateFile         : HANDLE) return HANDLE;
184    pragma Import (Stdcall, CreateFile, "CreateFileW");
185
186    function GetFileSize
187      (hFile          : HANDLE;
188       lpFileSizeHigh : access DWORD) return BOOL;
189    pragma Import (Stdcall, GetFileSize, "GetFileSize");
190
191    function SetFilePointer
192      (hFile                : HANDLE;
193       lDistanceToMove      : LONG;
194       lpDistanceToMoveHigh : access LONG;
195       dwMoveMethod         : DWORD) return DWORD;
196    pragma Import (Stdcall, SetFilePointer, "SetFilePointer");
197
198    function WriteFile
199      (hFile                  : HANDLE;
200       lpBuffer               : Address;
201       nNumberOfBytesToWrite  : DWORD;
202       lpNumberOfBytesWritten : access DWORD;
203       lpOverlapped           : access OVERLAPPED) return BOOL;
204    pragma Import (Stdcall, WriteFile, "WriteFile");
205
206    function ReadFile
207      (hFile                : HANDLE;
208       lpBuffer             : Address;
209       nNumberOfBytesToRead : DWORD;
210       lpNumberOfBytesRead  : access DWORD;
211       lpOverlapped         : access OVERLAPPED) return BOOL;
212    pragma Import (Stdcall, ReadFile, "ReadFile");
213
214    function CloseHandle (hObject : HANDLE) return BOOL;
215    pragma Import (Stdcall, CloseHandle, "CloseHandle");
216
217    function CreateFileMapping
218      (hFile                : HANDLE;
219       lpSecurityAttributes : access SECURITY_ATTRIBUTES;
220       flProtect            : DWORD;
221       dwMaximumSizeHigh    : DWORD;
222       dwMaximumSizeLow     : DWORD;
223       lpName               : Address) return HANDLE;
224    pragma Import (Stdcall, CreateFileMapping, "CreateFileMappingA");
225
226    function MapViewOfFile
227      (hFileMappingObject   : HANDLE;
228       dwDesiredAccess      : DWORD;
229       dwFileOffsetHigh     : DWORD;
230       dwFileOffsetLow      : DWORD;
231       dwNumberOfBytesToMap : DWORD) return System.Address;
232    pragma Import (Stdcall, MapViewOfFile, "MapViewOfFile");
233
234    function UnmapViewOfFile (lpBaseAddress : System.Address) return BOOL;
235    pragma Import (Stdcall, UnmapViewOfFile, "UnmapViewOfFile");
236
237    function MultiByteToWideChar
238      (CodePage       : WORD;
239       dwFlags        : DWORD;
240       lpMultiByteStr : System.Address;
241       cchMultiByte   : WORD;
242       lpWideCharStr  : System.Address;
243       cchWideChar    : WORD) return WORD;
244    pragma Import (Stdcall, MultiByteToWideChar, "MultiByteToWideChar");
245
246    ------------------------
247    -- System Information --
248    ------------------------
249
250    subtype ProcessorId is DWORD;
251
252    type SYSTEM_INFO is record
253       dwOemId                     : DWORD;
254       dwPageSize                  : DWORD;
255       lpMinimumApplicationAddress : PVOID;
256       lpMaximumApplicationAddress : PVOID;
257       dwActiveProcessorMask       : DWORD;
258       dwNumberOfProcessors        : DWORD;
259       dwProcessorType             : DWORD;
260       dwAllocationGranularity     : DWORD;
261       dwReserved                  : DWORD;
262    end record;
263
264    procedure GetSystemInfo (SI : access SYSTEM_INFO);
265    pragma Import (Stdcall, GetSystemInfo, "GetSystemInfo");
266
267    ---------------------
268    -- Time Management --
269    ---------------------
270
271    type SYSTEMTIME is record
272       wYear         : WORD;
273       wMonth        : WORD;
274       wDayOfWeek    : WORD;
275       wDay          : WORD;
276       wHour         : WORD;
277       wMinute       : WORD;
278       wSecond       : WORD;
279       wMilliseconds : WORD;
280    end record;
281
282    procedure GetSystemTime (pSystemTime : access SYSTEMTIME);
283    pragma Import (Stdcall, GetSystemTime, "GetSystemTime");
284
285    procedure GetSystemTimeAsFileTime (lpFileTime : access Long_Long_Integer);
286    pragma Import (Stdcall, GetSystemTimeAsFileTime, "GetSystemTimeAsFileTime");
287
288    function FileTimeToSystemTime
289      (lpFileTime   : access Long_Long_Integer;
290       lpSystemTime : access SYSTEMTIME) return BOOL;
291    pragma Import (Stdcall, FileTimeToSystemTime, "FileTimeToSystemTime");
292
293    function SystemTimeToFileTime
294      (lpSystemTime : access SYSTEMTIME;
295       lpFileTime   : access Long_Long_Integer) return BOOL;
296    pragma Import (Stdcall, SystemTimeToFileTime, "SystemTimeToFileTime");
297
298    function FileTimeToLocalFileTime
299      (lpFileTime      : access Long_Long_Integer;
300       lpLocalFileTime : access Long_Long_Integer) return BOOL;
301    pragma Import (Stdcall, FileTimeToLocalFileTime, "FileTimeToLocalFileTime");
302
303    function LocalFileTimeToFileTime
304      (lpFileTime      : access Long_Long_Integer;
305       lpLocalFileTime : access Long_Long_Integer) return BOOL;
306    pragma Import (Stdcall, LocalFileTimeToFileTime, "LocalFileTimeToFileTime");
307
308    procedure Sleep (dwMilliseconds : DWORD);
309    pragma Import (Stdcall, Sleep, External_Name => "Sleep");
310
311    function QueryPerformanceCounter
312      (lpPerformanceCount : access LARGE_INTEGER) return BOOL;
313    pragma Import
314      (Stdcall, QueryPerformanceCounter, "QueryPerformanceCounter");
315
316 end System.Win32;