Rev 7983 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7983 | Rev 8097 | ||
---|---|---|---|
1 | (* |
1 | (* |
2 | BSD 2-Clause License |
2 | BSD 2-Clause License |
3 | 3 | ||
4 | Copyright (c) 2019-2020, Anton Krotov |
4 | Copyright (c) 2019-2020, Anton Krotov |
5 | All rights reserved. |
5 | All rights reserved. |
6 | *) |
6 | *) |
7 | 7 | ||
8 | MODULE WINAPI; |
8 | MODULE WINAPI; |
9 | 9 | ||
10 | IMPORT SYSTEM, API; |
10 | IMPORT SYSTEM, API; |
11 | 11 | ||
12 | 12 | ||
13 | CONST |
13 | CONST |
14 | 14 | ||
15 | OFS_MAXPATHNAME* = 128; |
15 | OFS_MAXPATHNAME* = 128; |
- | 16 | ||
- | 17 | KERNEL = "kernel32.dll"; |
|
- | 18 | USER = "user32.dll"; |
|
- | 19 | MSVCRT = "msvcrt.dll"; |
|
16 | 20 | ||
17 | 21 | ||
18 | TYPE |
22 | TYPE |
19 | 23 | ||
20 | DLL_ENTRY* = API.DLL_ENTRY; |
24 | DLL_ENTRY* = API.DLL_ENTRY; |
21 | 25 | ||
22 | STRING = ARRAY 260 OF CHAR; |
26 | STRING = ARRAY 260 OF CHAR; |
23 | 27 | ||
24 | TCoord* = RECORD |
28 | TCoord* = RECORD |
25 | 29 | ||
26 | X*, Y*: WCHAR |
30 | X*, Y*: WCHAR |
27 | 31 | ||
28 | END; |
32 | END; |
29 | 33 | ||
30 | TSmallRect* = RECORD |
34 | TSmallRect* = RECORD |
31 | 35 | ||
32 | Left*, Top*, Right*, Bottom*: WCHAR |
36 | Left*, Top*, Right*, Bottom*: WCHAR |
33 | 37 | ||
34 | END; |
38 | END; |
35 | 39 | ||
36 | TConsoleScreenBufferInfo* = RECORD |
40 | TConsoleScreenBufferInfo* = RECORD |
37 | 41 | ||
38 | dwSize*: TCoord; |
42 | dwSize*: TCoord; |
39 | dwCursorPosition*: TCoord; |
43 | dwCursorPosition*: TCoord; |
40 | wAttributes*: WCHAR; |
44 | wAttributes*: WCHAR; |
41 | srWindow*: TSmallRect; |
45 | srWindow*: TSmallRect; |
42 | dwMaximumWindowSize*: TCoord |
46 | dwMaximumWindowSize*: TCoord |
43 | 47 | ||
44 | END; |
48 | END; |
45 | 49 | ||
46 | TSystemTime* = RECORD |
50 | TSystemTime* = RECORD |
47 | 51 | ||
48 | Year*, |
52 | Year*, |
49 | Month*, |
53 | Month*, |
50 | DayOfWeek*, |
54 | DayOfWeek*, |
51 | Day*, |
55 | Day*, |
52 | Hour*, |
56 | Hour*, |
53 | Min*, |
57 | Min*, |
54 | Sec*, |
58 | Sec*, |
55 | MSec*: WCHAR |
59 | MSec*: WCHAR |
56 | 60 | ||
57 | END; |
61 | END; |
- | 62 | ||
- | 63 | tm* = RECORD |
|
- | 64 | ||
- | 65 | sec*, |
|
- | 66 | min*, |
|
- | 67 | hour*, |
|
- | 68 | mday*, |
|
- | 69 | mon*, |
|
- | 70 | year*, |
|
- | 71 | wday*, |
|
- | 72 | yday*, |
|
- | 73 | isdst*: SYSTEM.CARD32 |
|
- | 74 | ||
- | 75 | END; |
|
58 | 76 | ||
59 | PSecurityAttributes* = POINTER TO TSecurityAttributes; |
77 | PSecurityAttributes* = POINTER TO TSecurityAttributes; |
60 | 78 | ||
61 | TSecurityAttributes* = RECORD |
79 | TSecurityAttributes* = RECORD |
62 | 80 | ||
63 | nLength*: INTEGER; |
81 | nLength*: SYSTEM.CARD32; |
64 | lpSecurityDescriptor*: INTEGER; |
82 | lpSecurityDescriptor*: INTEGER; |
65 | bInheritHandle*: INTEGER |
83 | bInheritHandle*: SYSTEM.CARD32 (* BOOL *) |
66 | 84 | ||
67 | END; |
85 | END; |
68 | 86 | ||
69 | TFileTime* = RECORD |
87 | TFileTime* = RECORD |
70 | 88 | ||
71 | dwLowDateTime*, |
89 | dwLowDateTime*, |
72 | dwHighDateTime*: INTEGER |
90 | dwHighDateTime*: SYSTEM.CARD32 |
- | 91 | ||
- | 92 | END; |
|
- | 93 | ||
- | 94 | TWin32FindData* = RECORD |
|
- | 95 | ||
- | 96 | dwFileAttributes*: SYSTEM.CARD32; |
|
- | 97 | ftCreationTime*: TFileTime; |
|
- | 98 | ftLastAccessTime*: TFileTime; |
|
- | 99 | ftLastWriteTime*: TFileTime; |
|
- | 100 | nFileSizeHigh*: SYSTEM.CARD32; |
|
- | 101 | nFileSizeLow*: SYSTEM.CARD32; |
|
- | 102 | dwReserved0*: SYSTEM.CARD32; |
|
- | 103 | dwReserved1*: SYSTEM.CARD32; |
|
- | 104 | cFileName*: STRING; |
|
- | 105 | cAlternateFileName*: ARRAY 14 OF CHAR; |
|
- | 106 | dwFileType*: SYSTEM.CARD32; |
|
- | 107 | dwCreatorType*: SYSTEM.CARD32; |
|
- | 108 | wFinderFlags*: WCHAR |
|
73 | 109 | ||
74 | END; |
110 | END; |
75 | 111 | ||
76 | OFSTRUCT* = RECORD |
112 | OFSTRUCT* = RECORD |
77 | 113 | ||
78 | cBytes*: CHAR; |
114 | cBytes*: BYTE; |
79 | fFixedDisk*: CHAR; |
115 | fFixedDisk*: BYTE; |
80 | nErrCode*: WCHAR; |
116 | nErrCode*: WCHAR; |
81 | Reserved1*: WCHAR; |
117 | Reserved1*: WCHAR; |
82 | Reserved2*: WCHAR; |
118 | Reserved2*: WCHAR; |
83 | szPathName*: ARRAY OFS_MAXPATHNAME OF CHAR |
119 | szPathName*: ARRAY OFS_MAXPATHNAME OF CHAR |
84 | 120 | ||
85 | END; |
121 | END; |
86 | 122 | ||
87 | POverlapped* = POINTER TO OVERLAPPED; |
123 | POverlapped* = POINTER TO OVERLAPPED; |
88 | 124 | ||
89 | OVERLAPPED* = RECORD |
125 | OVERLAPPED* = RECORD |
90 | 126 | ||
91 | Internal*: INTEGER; |
127 | Internal*: INTEGER; |
92 | InternalHigh*: INTEGER; |
128 | InternalHigh*: INTEGER; |
93 | Offset*: INTEGER; |
129 | Offset*: SYSTEM.CARD32; |
94 | OffsetHigh*: INTEGER; |
130 | OffsetHigh*: SYSTEM.CARD32; |
95 | hEvent*: INTEGER |
131 | hEvent*: INTEGER |
96 | 132 | ||
97 | END; |
133 | END; |
98 | 134 | ||
- | 135 | ||
- | 136 | PROCEDURE [windows-, KERNEL, ""] SetConsoleCursorPosition* (hConsoleOutput, dwCursorPosition: INTEGER): INTEGER; |
|
- | 137 | ||
- | 138 | PROCEDURE [windows-, KERNEL, ""] GetConsoleScreenBufferInfo* (hConsoleOutput: INTEGER; ConsoleScreenBufferInfo: TConsoleScreenBufferInfo): INTEGER; |
|
- | 139 | ||
- | 140 | PROCEDURE [windows-, KERNEL, ""] FillConsoleOutputCharacterA* (hConsoleOutput, cCaracter, nLength, dwWriteCoord, lpNumberOfCharsWritten: INTEGER): INTEGER; |
|
- | 141 | ||
- | 142 | PROCEDURE [windows-, KERNEL, ""] FillConsoleOutputAttribute* (hConsoleOutput, wAttribute, nLength, dwWriteCoord, lpNumberOfAttrsWritten: INTEGER): INTEGER; |
|
- | 143 | ||
- | 144 | PROCEDURE [windows-, KERNEL, ""] SetConsoleTextAttribute* (hConsoleOutput, wAttributes: INTEGER): INTEGER; |
|
- | 145 | ||
- | 146 | PROCEDURE [windows-, KERNEL, ""] GetStdHandle* (nStdHandle: INTEGER): INTEGER; |
|
- | 147 | ||
- | 148 | PROCEDURE [windows-, KERNEL, ""] CloseHandle* (hObject: INTEGER): INTEGER; |
|
- | 149 | ||
- | 150 | PROCEDURE [windows-, KERNEL, ""] WriteFile* (hFile, Buffer, nNumberOfBytesToRead, lpNumberOfBytesRead: INTEGER; lpOverlapped: POverlapped): INTEGER; |
|
- | 151 | ||
- | 152 | PROCEDURE [windows-, KERNEL, ""] ReadFile* (hFile, Buffer, nNumberOfBytesToRead, lpNumberOfBytesRead: INTEGER; lpOverlapped: POverlapped): INTEGER; |
|
99 | 153 | ||
- | 154 | PROCEDURE [windows-, KERNEL, ""] GetCommandLineA* (): INTEGER; |
|
100 | PROCEDURE [windows-, "kernel32.dll", "SetConsoleCursorPosition"] |
155 | |
- | 156 | PROCEDURE [windows-, KERNEL, ""] GlobalAlloc* (uFlags, dwBytes: INTEGER): INTEGER; |
|
- | 157 | ||
- | 158 | PROCEDURE [windows-, KERNEL, ""] GlobalFree* (hMem: INTEGER): INTEGER; |
|
- | 159 | ||
- | 160 | PROCEDURE [windows-, KERNEL, ""] ExitProcess* (code: INTEGER); |
|
- | 161 | ||
- | 162 | PROCEDURE [windows-, KERNEL, ""] GetTickCount* (): INTEGER; |
|
- | 163 | ||
- | 164 | PROCEDURE [windows-, KERNEL, ""] Sleep* (dwMilliseconds: INTEGER); |
|
- | 165 | ||
- | 166 | PROCEDURE [windows-, KERNEL, ""] FreeLibrary* (hLibModule: INTEGER): INTEGER; |
|
- | 167 | ||
- | 168 | PROCEDURE [windows-, KERNEL, ""] GetProcAddress* (hModule, name: INTEGER): INTEGER; |
|
- | 169 | ||
101 | SetConsoleCursorPosition* (hConsoleOutput, dwCursorPosition: INTEGER): INTEGER; |
170 | PROCEDURE [windows-, KERNEL, ""] LoadLibraryA* (name: INTEGER): INTEGER; |
102 | - | ||
103 | PROCEDURE [windows-, "kernel32.dll", "GetConsoleScreenBufferInfo"] |
171 | |
104 | GetConsoleScreenBufferInfo* (hConsoleOutput: INTEGER; ConsoleScreenBufferInfo: TConsoleScreenBufferInfo): INTEGER; |
- | |
105 | 172 | PROCEDURE [windows-, KERNEL, ""] AllocConsole* (): BOOLEAN; |
|
106 | PROCEDURE [windows-, "kernel32.dll", "FillConsoleOutputCharacterA"] |
- | |
107 | FillConsoleOutputCharacter* (hConsoleOutput, cCaracter, nLength, dwWriteCoord, lpNumberOfCharsWritten: INTEGER): INTEGER; |
- | |
108 | 173 | ||
109 | PROCEDURE [windows-, "kernel32.dll", "FillConsoleOutputAttribute"] |
174 | PROCEDURE [windows-, KERNEL, ""] FreeConsole* (): BOOLEAN; |
110 | FillConsoleOutputAttribute* (hConsoleOutput, wAttribute, nLength, dwWriteCoord, lpNumberOfAttrsWritten: INTEGER): INTEGER; |
- | |
111 | 175 | ||
112 | PROCEDURE [windows-, "kernel32.dll", "SetConsoleTextAttribute"] |
- | |
113 | SetConsoleTextAttribute* (hConsoleOutput, wAttributes: INTEGER): INTEGER; |
- | |
114 | 176 | PROCEDURE [windows-, KERNEL, ""] GetLocalTime* (T: TSystemTime); |
|
115 | PROCEDURE [windows-, "kernel32.dll", "GetStdHandle"] |
177 | |
116 | GetStdHandle* (nStdHandle: INTEGER): INTEGER; |
- | |
117 | 178 | PROCEDURE [windows-, KERNEL, ""] RemoveDirectoryA* (lpPathName: INTEGER): INTEGER; |
|
118 | PROCEDURE [windows-, "kernel32.dll", "CloseHandle"] |
- | |
119 | CloseHandle* (hObject: INTEGER): INTEGER; |
179 | |
120 | 180 | PROCEDURE [windows-, KERNEL, ""] GetFileAttributesA* (lpPathName: INTEGER): SET; |
|
- | 181 | ||
- | 182 | PROCEDURE [windows-, KERNEL, ""] CreateDirectoryA* (lpPathName: INTEGER; lpSecurityAttributes: PSecurityAttributes): INTEGER; |
|
121 | PROCEDURE [windows-, "kernel32.dll", "WriteFile"] |
183 | |
122 | WriteFile* (hFile, Buffer, nNumberOfBytesToRead, lpNumberOfBytesRead: INTEGER; lpOverlapped: POverlapped): INTEGER; |
- | |
123 | 184 | PROCEDURE [windows-, KERNEL, ""] FindFirstFileA* (lpFileName: INTEGER; lpFindFileData: TWin32FindData): INTEGER; |
|
124 | PROCEDURE [windows-, "kernel32.dll", "ReadFile"] |
- | |
125 | ReadFile* (hFile, Buffer, nNumberOfBytesToRead, lpNumberOfBytesRead: INTEGER; lpOverlapped: POverlapped): INTEGER; |
185 | |
126 | - | ||
127 | PROCEDURE [windows-, "kernel32.dll", "GetCommandLineA"] |
186 | PROCEDURE [windows-, KERNEL, ""] DeleteFileA* (lpFileName: INTEGER): INTEGER; |
128 | GetCommandLine* (): INTEGER; |
- | |
129 | 187 | ||
130 | PROCEDURE [windows-, "kernel32.dll", "GlobalAlloc"] |
- | |
131 | GlobalAlloc* (uFlags, dwBytes: INTEGER): INTEGER; |
- | |
132 | 188 | PROCEDURE [windows-, KERNEL, ""] FindClose* (hFindFile: INTEGER): INTEGER; |
|
133 | PROCEDURE [windows-, "kernel32.dll", "GlobalFree"] |
189 | |
134 | GlobalFree* (hMem: INTEGER): INTEGER; |
- | |
135 | 190 | PROCEDURE [windows-, KERNEL, ""] CreateFileA* ( |
|
136 | PROCEDURE [windows-, "kernel32.dll", "ExitProcess"] |
191 | lpFileName, dwDesiredAccess, dwShareMode: INTEGER; |
- | 192 | lpSecurityAttributes: PSecurityAttributes; |
|
137 | ExitProcess* (code: INTEGER); |
193 | dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile: INTEGER): INTEGER; |
138 | - | ||
139 | PROCEDURE [windows-, "kernel32.dll", "GetTickCount"] |
194 | |
140 | GetTickCount* (): INTEGER; |
- | |
141 | 195 | PROCEDURE [windows-, KERNEL, ""] OpenFile* (lpFileName: INTEGER; lpReOpenBuff: OFSTRUCT; uStyle: INTEGER): INTEGER; |
|
142 | PROCEDURE [windows-, "kernel32.dll", "Sleep"] |
196 | |
143 | Sleep* (dwMilliseconds: INTEGER); |
197 | PROCEDURE [windows-, KERNEL, ""] SetFilePointer* (hFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod: INTEGER): INTEGER; |
144 | 198 | ||
145 | PROCEDURE [windows-, "kernel32.dll", "FreeLibrary"] |
199 | PROCEDURE [windows-, KERNEL, ""] ReadConsoleA* (hConsoleInput, lpBuffer, nNumberOfCharsToRead, lpNumberOfCharsRead, lpReserved: INTEGER): INTEGER; |
146 | FreeLibrary* (hLibModule: INTEGER): INTEGER; |
200 | |
147 | 201 | PROCEDURE [windows-, KERNEL, ""] WriteConsoleW* (hConsoleOutput, lpBuffer, nNumberOfCharsToWrite, lpNumberOfCharsWritten, lpReserved: INTEGER): INTEGER; |
|
148 | PROCEDURE [windows-, "kernel32.dll", "GetProcAddress"] |
202 | |
149 | GetProcAddress* (hModule, name: INTEGER): INTEGER; |
203 | PROCEDURE [windows-, KERNEL, ""] WriteConsoleA* (hConsoleOutput, lpBuffer, nNumberOfCharsToWrite, lpNumberOfCharsWritten, lpReserved: INTEGER): INTEGER; |
150 | 204 | ||
151 | PROCEDURE [windows-, "kernel32.dll", "LoadLibraryA"] |
205 | PROCEDURE [windows-, USER, ""] MessageBoxA* (hWnd, lpText, lpCaption, uType: INTEGER): INTEGER; |
152 | LoadLibraryA* (name: INTEGER): INTEGER; |
206 | |
153 | 207 | PROCEDURE [windows-, USER, ""] MessageBoxW* (hWnd, lpText, lpCaption, uType: INTEGER): INTEGER; |
|
154 | PROCEDURE [windows-, "kernel32.dll", "AllocConsole"] |
208 | |
155 | AllocConsole* (): BOOLEAN; |
209 | PROCEDURE [windows-, USER, ""] CreateWindowExA* ( |
156 | 210 | dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, |
|
157 | PROCEDURE [windows-, "kernel32.dll", "FreeConsole"] |
211 | nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam: INTEGER): INTEGER; |
158 | FreeConsole* (): BOOLEAN; |
212 | |
159 | 213 | PROCEDURE [windows-, MSVCRT, ""] time* (ptr: INTEGER): INTEGER; |
|
160 | PROCEDURE [windows-, "kernel32.dll", "GetLocalTime"] |
214 | |
161 | GetLocalTime* (T: TSystemTime); |
215 | PROCEDURE [windows-, MSVCRT, ""] mktime* (time: tm): INTEGER; |
162 | 216 | ||
163 | 217 | ||
164 | PROCEDURE SetDllEntry* (process_detach, thread_detach, thread_attach: DLL_ENTRY); |
218 | PROCEDURE SetDllEntry* (process_detach, thread_detach, thread_attach: DLL_ENTRY); |
165 | BEGIN |
219 | BEGIN |
166 | API.SetDll(process_detach, thread_detach, thread_attach) |
220 | API.SetDll(process_detach, thread_detach, thread_attach) |
167 | END SetDllEntry; |
221 | END SetDllEntry; |
168 | 222 | ||
169 | 223 | ||
170 | END WINAPI. |
224 | END WINAPI. |