types.pp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. {
  2. This file is part of the Free Pascal run time library.
  3. Copyright (c) 2002 by Florian Klaempfl,
  4. member of the Free Pascal development team.
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. {$MODE OBJFPC}
  12. unit types;
  13. interface
  14. {$ifdef Win32}
  15. {$define Win32orCE}
  16. {$endif Win32}
  17. {$ifdef Wince}
  18. {$define Win32orCE}
  19. {$endif Wince}
  20. {$ifdef Win32orCE}
  21. uses
  22. Windows;
  23. {$endif Win32orCE}
  24. const
  25. RT_RCDATA = PChar(10);
  26. type
  27. DWORD = LongWord;
  28. PLongint = System.PLongint;
  29. PSmallInt = System.PSmallInt;
  30. PDouble = System.PDouble;
  31. PByte = System.PByte;
  32. TIntegerDynArray = array of Integer;
  33. TCardinalDynArray = array of Cardinal;
  34. TWordDynArray = array of Word;
  35. TSmallIntDynArray = array of SmallInt;
  36. TByteDynArray = array of Byte;
  37. TShortIntDynArray = array of ShortInt;
  38. TInt64DynArray = array of Int64;
  39. TQWordDynArray = array of QWord;
  40. TLongWordDynArray = array of LongWord;
  41. TSingleDynArray = array of Single;
  42. TDoubleDynArray = array of Double;
  43. TBooleanDynArray = array of Boolean;
  44. TStringDynArray = array of AnsiString;
  45. TWideStringDynArray = array of WideString;
  46. {$ifdef Win32orCE}
  47. TPoint = Windows.TPoint;
  48. {$else}
  49. TPoint =
  50. {$ifndef FPC_REQUIRES_PROPER_ALIGNMENT}
  51. packed
  52. {$endif FPC_REQUIRES_PROPER_ALIGNMENT}
  53. record
  54. X : Longint;
  55. Y : Longint;
  56. end;
  57. {$endif}
  58. PPoint = ^TPoint;
  59. tagPOINT = TPoint;
  60. {$ifdef Win32orCE}
  61. TRect = Windows.TRect;
  62. {$else}
  63. TRect =
  64. {$ifndef FPC_REQUIRES_PROPER_ALIGNMENT}
  65. packed
  66. {$endif FPC_REQUIRES_PROPER_ALIGNMENT}
  67. record
  68. case Integer of
  69. 0: (Left,Top,Right,Bottom : Longint);
  70. 1: (TopLeft,BottomRight : TPoint);
  71. end;
  72. {$endif Win32orCE}
  73. PRect = ^TRect;
  74. {$ifdef Win32orCE}
  75. TSize = Windows.TSize;
  76. {$else}
  77. TSize =
  78. {$ifndef FPC_REQUIRES_PROPER_ALIGNMENT}
  79. packed
  80. {$endif FPC_REQUIRES_PROPER_ALIGNMENT}
  81. record
  82. cx : Longint;
  83. cy : Longint;
  84. end;
  85. {$endif Win32orCE}
  86. PSize = ^TSize;
  87. tagSIZE = TSize;
  88. SIZE = TSize;
  89. TSmallPoint =
  90. {$ifndef FPC_REQUIRES_PROPER_ALIGNMENT}
  91. packed
  92. {$endif FPC_REQUIRES_PROPER_ALIGNMENT}
  93. record
  94. x : SmallInt;
  95. y : SmallInt;
  96. end;
  97. PSmallPoint = ^TSmallPoint;
  98. type
  99. TOleChar = WideChar;
  100. POleStr = PWideChar;
  101. PPOleStr = ^POleStr;
  102. {$ifndef win32orCE}
  103. const
  104. STGTY_STORAGE = 1;
  105. STGTY_STREAM = 2;
  106. STGTY_LOCKBYTES = 3;
  107. STGTY_PROPERTY = 4;
  108. STREAM_SEEK_SET = 0;
  109. STREAM_SEEK_CUR = 1;
  110. STREAM_SEEK_END = 2;
  111. LOCK_WRITE = 1;
  112. LOCK_EXCLUSIVE = 2;
  113. LOCK_ONLYONCE = 4;
  114. E_FAIL = HRESULT($80004005);
  115. STG_E_INVALIDFUNCTION = HRESULT($80030001);
  116. STG_E_FILENOTFOUND = HRESULT($80030002);
  117. STG_E_PATHNOTFOUND = HRESULT($80030003);
  118. STG_E_TOOMANYOPENFILES = HRESULT($80030004);
  119. STG_E_ACCESSDENIED = HRESULT($80030005);
  120. STG_E_INVALIDHANDLE = HRESULT($80030006);
  121. STG_E_INSUFFICIENTMEMORY = HRESULT($80030008);
  122. STG_E_INVALIDPOINTER = HRESULT($80030009);
  123. STG_E_NOMOREFILES = HRESULT($80030012);
  124. STG_E_DISKISWRITEPROTECTED = HRESULT($80030013);
  125. STG_E_SEEKERROR = HRESULT($80030019);
  126. STG_E_WRITEFAULT = HRESULT($8003001D);
  127. STG_E_READFAULT = HRESULT($8003001E);
  128. STG_E_SHAREVIOLATION = HRESULT($80030020);
  129. STG_E_LOCKVIOLATION = HRESULT($80030021);
  130. STG_E_FILEALREADYEXISTS = HRESULT($80030050);
  131. STG_E_INVALIDPARAMETER = HRESULT($80030057);
  132. STG_E_MEDIUMFULL = HRESULT($80030070);
  133. STG_E_PROPSETMISMATCHED = HRESULT($800300F0);
  134. STG_E_ABNORMALAPIEXIT = HRESULT($800300FA);
  135. STG_E_INVALIDHEADER = HRESULT($800300FB);
  136. STG_E_INVALIDNAME = HRESULT($800300FC);
  137. STG_E_UNKNOWN = HRESULT($800300FD);
  138. STG_E_UNIMPLEMENTEDFUNCTION = HRESULT($800300FE);
  139. STG_E_INVALIDFLAG = HRESULT($800300FF);
  140. STG_E_INUSE = HRESULT($80030100);
  141. STG_E_NOTCURRENT = HRESULT($80030101);
  142. STG_E_REVERTED = HRESULT($80030102);
  143. STG_E_CANTSAVE = HRESULT($80030103);
  144. STG_E_OLDFORMAT = HRESULT($80030104);
  145. STG_E_OLDDLL = HRESULT($80030105);
  146. STG_E_SHAREREQUIRED = HRESULT($80030106);
  147. STG_E_EXTANTMARSHALLINGS = HRESULT($80030108);
  148. STG_E_DOCFILECORRUPT = HRESULT($80030109);
  149. STG_E_BADBASEADDRESS = HRESULT($80030110);
  150. STG_E_INCOMPLETE = HRESULT($80030201);
  151. STG_E_TERMINATED = HRESULT($80030202);
  152. STG_S_CONVERTED = $00030200;
  153. STG_S_BLOCK = $00030201;
  154. STG_S_RETRYNOW = $00030202;
  155. STG_S_MONITORING = $00030203;
  156. GUID_NULL: TGUID = '{00000000-0000-0000-0000-000000000000}';
  157. type
  158. PCLSID = PGUID;
  159. TCLSID = TGUID;
  160. LARGE_INT = Int64;
  161. Largeint = LARGE_INT;
  162. PDWord = ^DWord;
  163. PDisplay = Pointer;
  164. PEvent = Pointer;
  165. TXrmOptionDescRec = record
  166. end;
  167. XrmOptionDescRec = TXrmOptionDescRec;
  168. PXrmOptionDescRec = ^TXrmOptionDescRec;
  169. Widget = Pointer;
  170. WidgetClass = Pointer;
  171. ArgList = Pointer;
  172. Region = Pointer;
  173. _FILETIME =
  174. {$ifndef FPC_REQUIRES_PROPER_ALIGNMENT}
  175. packed
  176. {$endif FPC_REQUIRES_PROPER_ALIGNMENT}
  177. record
  178. dwLowDateTime : DWORD;
  179. dwHighDateTime : DWORD;
  180. end;
  181. TFileTime = _FILETIME;
  182. FILETIME = _FILETIME;
  183. PFileTime = ^TFileTime;
  184. tagSTATSTG =
  185. {$ifndef FPC_REQUIRES_PROPER_ALIGNMENT}
  186. packed
  187. {$endif FPC_REQUIRES_PROPER_ALIGNMENT}
  188. record
  189. pwcsName : POleStr;
  190. dwType : Longint;
  191. cbSize : Largeint;
  192. mtime : TFileTime;
  193. ctime : TFileTime;
  194. atime : TFileTime;
  195. grfMode : Longint;
  196. grfLocksSupported : Longint;
  197. clsid : TCLSID;
  198. grfStateBits : Longint;
  199. reserved : Longint;
  200. end;
  201. TStatStg = tagSTATSTG;
  202. STATSTG = TStatStg;
  203. PStatStg = ^TStatStg;
  204. IClassFactory = Interface(IUnknown) ['{00000001-0000-0000-C000-000000000046}']
  205. Function CreateInstance(Const unkOuter : IUnknown;Const riid : TGUID;Out vObject) : HResult;StdCall;
  206. Function LockServer(fLock : LongBool) : HResult;StdCall;
  207. End;
  208. ISequentialStream = interface(IUnknown) ['{0c733a30-2a1c-11ce-ade5-00aa0044773d}']
  209. function Read(pv : Pointer;cb : DWord;pcbRead : PDWord) : HRESULT;stdcall;
  210. function Write(pv : Pointer;cb : DWord;pcbWritten : PDWord) : HRESULT;stdcall;
  211. end;
  212. IStream = interface(ISequentialStream) ['{0000000C-0000-0000-C000-000000000046}']
  213. function Seek(dlibMove : LargeInt; dwOrigin : Longint;
  214. out libNewPosition : LargeInt) : HResult;stdcall;
  215. function SetSize(libNewSize : LargeInt) : HRESULT;stdcall;
  216. function CopyTo(stm: IStream;cb : LargeInt;out cbRead : LargeInt;
  217. out cbWritten : LargeInt) : HRESULT;stdcall;
  218. function Commit(grfCommitFlags : Longint) : HRESULT;stdcall;
  219. function Revert : HRESULT;stdcall;
  220. function LockRegion(libOffset : LargeInt;cb : LargeInt;
  221. dwLockType : Longint) : HRESULT;stdcall;
  222. function UnlockRegion(libOffset : LargeInt;cb : LargeInt;
  223. dwLockType : Longint) : HRESULT;stdcall;
  224. Function Stat(out statstg : TStatStg;grfStatFlag : Longint) : HRESULT;stdcall;
  225. function Clone(out stm : IStream) : HRESULT;stdcall;
  226. end;
  227. {$endif win32orCE}
  228. function EqualRect(const r1,r2 : TRect) : Boolean;
  229. function Rect(Left,Top,Right,Bottom : Integer) : TRect;
  230. function Bounds(ALeft,ATop,AWidth,AHeight : Integer) : TRect;
  231. function Point(x,y : Integer) : TPoint;
  232. function PtInRect(const Rect : TRect; const p : TPoint) : Boolean;
  233. function IntersectRect(var Rect : TRect; const R1,R2 : TRect) : Boolean;
  234. function UnionRect(var Rect : TRect; const R1,R2 : TRect) : Boolean;
  235. function IsRectEmpty(const Rect : TRect) : Boolean;
  236. function OffsetRect(var Rect : TRect;DX : Integer;DY : Integer) : Boolean;
  237. function CenterPoint(const Rect: TRect): TPoint;
  238. implementation
  239. function EqualRect(const r1,r2 : TRect) : Boolean;
  240. begin
  241. EqualRect:=(r1.left=r2.left) and (r1.right=r2.right) and (r1.top=r2.top) and (r1.bottom=r2.bottom);
  242. end;
  243. function Rect(Left,Top,Right,Bottom : Integer) : TRect;
  244. begin
  245. Rect.Left:=Left;
  246. Rect.Top:=Top;
  247. Rect.Right:=Right;
  248. Rect.Bottom:=Bottom;
  249. end;
  250. function Bounds(ALeft,ATop,AWidth,AHeight : Integer) : TRect;
  251. begin
  252. Bounds.Left:=ALeft;
  253. Bounds.Top:=ATop;
  254. Bounds.Right:=ALeft+AWidth;
  255. Bounds.Bottom:=ATop+AHeight;
  256. end;
  257. function Point(x,y : Integer) : TPoint;
  258. begin
  259. Point.x:=x;
  260. Point.y:=y;
  261. end;
  262. function PtInRect(const Rect : TRect;const p : TPoint) : Boolean;
  263. begin
  264. PtInRect:=(p.y>=Rect.Top) and
  265. (p.y<Rect.Bottom) and
  266. (p.x>=Rect.Left) and
  267. (p.x<Rect.Right);
  268. end;
  269. function IntersectRect(var Rect : TRect;const R1,R2 : TRect) : Boolean;
  270. begin
  271. Rect:=R1;
  272. with R2 do
  273. begin
  274. if Left>R1.Left then
  275. Rect.Left:=Left;
  276. if Top>R1.Top then
  277. Rect.Top:=Top;
  278. if Right<R1.Right then
  279. Rect.Right:=Right;
  280. if Bottom<R1.Bottom then
  281. Rect.Bottom:=Bottom;
  282. end;
  283. if IsRectEmpty(Rect) then
  284. begin
  285. FillChar(Rect,SizeOf(Rect),0);
  286. IntersectRect:=false;
  287. end
  288. else
  289. IntersectRect:=true;
  290. end;
  291. function UnionRect(var Rect : TRect;const R1,R2 : TRect) : Boolean;
  292. begin
  293. Rect:=R1;
  294. with R2 do
  295. begin
  296. if Left<R1.Left then
  297. Rect.Left:=Left;
  298. if Top<R1.Top then
  299. Rect.Top:=Top;
  300. if Right>R1.Right then
  301. Rect.Right:=Right;
  302. if Bottom>R1.Bottom then
  303. Rect.Bottom:=Bottom;
  304. end;
  305. if IsRectEmpty(Rect) then
  306. begin
  307. FillChar(Rect,SizeOf(Rect),0);
  308. UnionRect:=false;
  309. end
  310. else
  311. UnionRect:=true;
  312. end;
  313. function IsRectEmpty(const Rect : TRect) : Boolean;
  314. begin
  315. IsRectEmpty:=(Rect.Right<=Rect.Left) or (Rect.Bottom<=Rect.Top);
  316. end;
  317. function OffsetRect(var Rect : TRect;DX : Integer;DY : Integer) : Boolean;
  318. begin
  319. if assigned(@Rect) then
  320. begin
  321. with Rect do
  322. begin
  323. inc(Left,dx);
  324. inc(Top,dy);
  325. inc(Right,dx);
  326. inc(Bottom,dy);
  327. end;
  328. OffsetRect:=true;
  329. end
  330. else
  331. OffsetRect:=false;
  332. end;
  333. function CenterPoint(const Rect: TRect): TPoint;
  334. begin
  335. With Rect do
  336. begin
  337. Result.X:=(Left+Right) div 2;
  338. Result.Y:=(Top+Bottom) div 2;
  339. end;
  340. end;
  341. end.