WINAPI.ob07 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. (*
  2. BSD 2-Clause License
  3. Copyright (c) 2019-2021, Anton Krotov
  4. All rights reserved.
  5. *)
  6. MODULE WINAPI;
  7. IMPORT SYSTEM, API;
  8. CONST
  9. OFS_MAXPATHNAME* = 128;
  10. KERNEL = "kernel32.dll";
  11. USER = "user32.dll";
  12. MSVCRT = "msvcrt.dll";
  13. TYPE
  14. DLL_ENTRY* = API.DLL_ENTRY;
  15. STRING = ARRAY 260 OF CHAR;
  16. TCoord* = RECORD
  17. X*, Y*: WCHAR
  18. END;
  19. TSmallRect* = RECORD
  20. Left*, Top*, Right*, Bottom*: WCHAR
  21. END;
  22. TConsoleScreenBufferInfo* = RECORD
  23. dwSize*: TCoord;
  24. dwCursorPosition*: TCoord;
  25. wAttributes*: WCHAR;
  26. srWindow*: TSmallRect;
  27. dwMaximumWindowSize*: TCoord
  28. END;
  29. TSystemTime* = RECORD
  30. Year*,
  31. Month*,
  32. DayOfWeek*,
  33. Day*,
  34. Hour*,
  35. Min*,
  36. Sec*,
  37. MSec*: WCHAR
  38. END;
  39. tm* = RECORD
  40. sec*,
  41. min*,
  42. hour*,
  43. mday*,
  44. mon*,
  45. year*,
  46. wday*,
  47. yday*,
  48. isdst*: SYSTEM.CARD32
  49. END;
  50. PSecurityAttributes* = POINTER TO TSecurityAttributes;
  51. TSecurityAttributes* = RECORD
  52. nLength*: SYSTEM.CARD32;
  53. lpSecurityDescriptor*: INTEGER;
  54. bInheritHandle*: SYSTEM.CARD32 (* BOOL *)
  55. END;
  56. TFileTime* = RECORD
  57. dwLowDateTime*,
  58. dwHighDateTime*: SYSTEM.CARD32
  59. END;
  60. TWin32FindData* = RECORD
  61. dwFileAttributes*: SYSTEM.CARD32;
  62. ftCreationTime*: TFileTime;
  63. ftLastAccessTime*: TFileTime;
  64. ftLastWriteTime*: TFileTime;
  65. nFileSizeHigh*: SYSTEM.CARD32;
  66. nFileSizeLow*: SYSTEM.CARD32;
  67. dwReserved0*: SYSTEM.CARD32;
  68. dwReserved1*: SYSTEM.CARD32;
  69. cFileName*: STRING;
  70. cAlternateFileName*: ARRAY 14 OF CHAR;
  71. dwFileType*: SYSTEM.CARD32;
  72. dwCreatorType*: SYSTEM.CARD32;
  73. wFinderFlags*: WCHAR
  74. END;
  75. OFSTRUCT* = RECORD
  76. cBytes*: BYTE;
  77. fFixedDisk*: BYTE;
  78. nErrCode*: WCHAR;
  79. Reserved1*: WCHAR;
  80. Reserved2*: WCHAR;
  81. szPathName*: ARRAY OFS_MAXPATHNAME OF CHAR
  82. END;
  83. POverlapped* = POINTER TO OVERLAPPED;
  84. OVERLAPPED* = RECORD
  85. Internal*: INTEGER;
  86. InternalHigh*: INTEGER;
  87. Offset*: SYSTEM.CARD32;
  88. OffsetHigh*: SYSTEM.CARD32;
  89. hEvent*: INTEGER
  90. END;
  91. PROCEDURE [windows-, KERNEL, ""] SetConsoleCursorPosition* (hConsoleOutput, dwCursorPosition: INTEGER): INTEGER;
  92. PROCEDURE [windows-, KERNEL, ""] GetConsoleScreenBufferInfo* (hConsoleOutput: INTEGER; ConsoleScreenBufferInfo: TConsoleScreenBufferInfo): INTEGER;
  93. PROCEDURE [windows-, KERNEL, ""] FillConsoleOutputCharacterA* (hConsoleOutput, cCaracter, nLength, dwWriteCoord, lpNumberOfCharsWritten: INTEGER): INTEGER;
  94. PROCEDURE [windows-, KERNEL, ""] FillConsoleOutputAttribute* (hConsoleOutput, wAttribute, nLength, dwWriteCoord, lpNumberOfAttrsWritten: INTEGER): INTEGER;
  95. PROCEDURE [windows-, KERNEL, ""] SetConsoleTextAttribute* (hConsoleOutput, wAttributes: INTEGER): INTEGER;
  96. PROCEDURE [windows-, KERNEL, ""] GetStdHandle* (nStdHandle: INTEGER): INTEGER;
  97. PROCEDURE [windows-, KERNEL, ""] CloseHandle* (hObject: INTEGER): INTEGER;
  98. PROCEDURE [windows-, KERNEL, ""] WriteFile* (hFile, Buffer, nNumberOfBytesToRead, lpNumberOfBytesRead: INTEGER; lpOverlapped: POverlapped): INTEGER;
  99. PROCEDURE [windows-, KERNEL, ""] ReadFile* (hFile, Buffer, nNumberOfBytesToRead, lpNumberOfBytesRead: INTEGER; lpOverlapped: POverlapped): INTEGER;
  100. PROCEDURE [windows-, KERNEL, ""] GetCommandLineA* (): INTEGER;
  101. PROCEDURE [windows-, KERNEL, ""] GlobalAlloc* (uFlags, dwBytes: INTEGER): INTEGER;
  102. PROCEDURE [windows-, KERNEL, ""] GlobalFree* (hMem: INTEGER): INTEGER;
  103. PROCEDURE [windows-, KERNEL, ""] ExitProcess* (code: INTEGER);
  104. PROCEDURE [windows-, KERNEL, ""] GetTickCount* (): INTEGER;
  105. PROCEDURE [windows-, KERNEL, ""] Sleep* (dwMilliseconds: INTEGER);
  106. PROCEDURE [windows-, KERNEL, ""] FreeLibrary* (hLibModule: INTEGER): INTEGER;
  107. PROCEDURE [windows-, KERNEL, ""] GetProcAddress* (hModule, name: INTEGER): INTEGER;
  108. PROCEDURE [windows-, KERNEL, ""] LoadLibraryA* (name: INTEGER): INTEGER;
  109. PROCEDURE [windows-, KERNEL, ""] AllocConsole* (): BOOLEAN;
  110. PROCEDURE [windows-, KERNEL, ""] FreeConsole* (): BOOLEAN;
  111. PROCEDURE [windows-, KERNEL, ""] GetLocalTime* (T: TSystemTime);
  112. PROCEDURE [windows-, KERNEL, ""] RemoveDirectoryA* (lpPathName: INTEGER): INTEGER;
  113. PROCEDURE [windows-, KERNEL, ""] GetFileAttributesA* (lpPathName: INTEGER): SET;
  114. PROCEDURE [windows-, KERNEL, ""] CreateDirectoryA* (lpPathName: INTEGER; lpSecurityAttributes: PSecurityAttributes): INTEGER;
  115. PROCEDURE [windows-, KERNEL, ""] FindFirstFileA* (lpFileName: INTEGER; lpFindFileData: TWin32FindData): INTEGER;
  116. PROCEDURE [windows-, KERNEL, ""] DeleteFileA* (lpFileName: INTEGER): INTEGER;
  117. PROCEDURE [windows-, KERNEL, ""] FindClose* (hFindFile: INTEGER): INTEGER;
  118. PROCEDURE [windows-, KERNEL, ""] CreateFileA* (
  119. lpFileName, dwDesiredAccess, dwShareMode: INTEGER;
  120. lpSecurityAttributes: PSecurityAttributes;
  121. dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile: INTEGER): INTEGER;
  122. PROCEDURE [windows-, KERNEL, ""] OpenFile* (lpFileName: INTEGER; lpReOpenBuff: OFSTRUCT; uStyle: INTEGER): INTEGER;
  123. PROCEDURE [windows-, KERNEL, ""] SetFilePointer* (hFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod: INTEGER): INTEGER;
  124. PROCEDURE [windows-, KERNEL, ""] ReadConsoleA* (hConsoleInput, lpBuffer, nNumberOfCharsToRead, lpNumberOfCharsRead, lpReserved: INTEGER): INTEGER;
  125. PROCEDURE [windows-, KERNEL, ""] WriteConsoleW* (hConsoleOutput, lpBuffer, nNumberOfCharsToWrite, lpNumberOfCharsWritten, lpReserved: INTEGER): INTEGER;
  126. PROCEDURE [windows-, KERNEL, ""] WriteConsoleA* (hConsoleOutput, lpBuffer, nNumberOfCharsToWrite, lpNumberOfCharsWritten, lpReserved: INTEGER): INTEGER;
  127. PROCEDURE [windows-, USER, ""] MessageBoxA* (hWnd, lpText, lpCaption, uType: INTEGER): INTEGER;
  128. PROCEDURE [windows-, USER, ""] MessageBoxW* (hWnd, lpText, lpCaption, uType: INTEGER): INTEGER;
  129. PROCEDURE [windows-, USER, ""] CreateWindowExA* (
  130. dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y,
  131. nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam: INTEGER): INTEGER;
  132. PROCEDURE [ccall-, MSVCRT, ""] time* (ptr: INTEGER): INTEGER;
  133. PROCEDURE [ccall-, MSVCRT, ""] mktime* (time: tm): INTEGER;
  134. PROCEDURE SetDllEntry* (process_detach, thread_detach, thread_attach: DLL_ENTRY);
  135. BEGIN
  136. API.SetDll(process_detach, thread_detach, thread_attach)
  137. END SetDllEntry;
  138. END WINAPI.