1{
2    This file is part of the Free Pascal run time library.
3    This unit contains the record definition for the Win32 API
4    Copyright (c) 1999-2000 by Florian KLaempfl,
5    member of the Free Pascal development team.
6
7    See the file COPYING.FPC, included in this distribution,
8    for details about the copyright.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
14 **********************************************************************}
15
16{
17  Structures.h
18
19  Declarations for all the Windows32 API Structures
20
21  Copyright (C) 1996 Free Software Foundation, Inc.
22
23  Author:  Scott Christley <scottc@net-community.com>
24  Date: 1996
25
26  This file is part of the Windows32 API Library.
27
28  This library is free software; you can redistribute it and/or
29  modify it under the terms of the GNU Library General Public
30  License as published by the Free Software Foundation; either
31  version 2 of the License, or (at your option) any later version.
32
33  This library is distributed in the hope that it will be useful,
34  but WITHOUT ANY WARRANTY; without even the implied warranty of
35  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
36  Library General Public License for more details.
37
38  If you are interested in a warranty or support for this source code,
39  contact Scott Christley <scottc@net-community.com> for more information.
40
41  You should have received a copy of the GNU Library General Public
42  License along with this library; see the file COPYING.LIB.
43  If not, write to the Free Software Foundation,
44  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
45
46
47  Changes :
48
49  22/15/2005 update for wince4.2 port, orinaudo@gmail.com
50
51}
52
53{$ifdef read_interface}
54
55  type
56    {$calling default}
57    {$i typshrdh.inc}
58    {$calling cdecl}
59    { WARNING
60      the variable argument list
61      is not implemented for FPC
62      va_list is just a dummy record
63      MvdV: Nevertheless it should be a pointer type, not a record}
64
65     va_list = pchar;
66
67     ABC = record
68          abcA : longint;
69          abcB : UINT;
70          abcC : longint;
71       end;
72     LPABC = ^ABC;
73     _ABC = ABC;
74     TABC = ABC;
75     PABC = ^ABC;
76
77     ABCFLOAT = record
78          abcfA : Single;
79          abcfB : Single;
80          abcfC : Single;
81       end;
82     LPABCFLOAT = ^ABCFLOAT;
83     _ABCFLOAT = ABCFLOAT;
84     TABCFLOAT = ABCFLOAT;
85     PABCFLOAT = ^ABCFLOAT;
86
87     ACCEL = record
88          fVirt : BYTE;
89          key : WORD;
90          cmd : WORD;
91       end;
92     LPACCEL = ^ACCEL;
93     _ACCEL = ACCEL;
94     TACCEL = ACCEL;
95     PACCEL = ^ACCEL;
96
97     //
98     //  The structure of an ACE is a common ace header followed by ace type
99     //  specific data.  Pictorally the structure of the common ace header is
100     //  as follows:
101     //
102     //       3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
103     //       1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
104     //      +---------------+-------+-------+---------------+---------------+
105     //      |            AceSize            |    AceFlags   |     AceType   |
106     //      +---------------+-------+-------+---------------+---------------+
107     //
108     //  AceType denotes the type of the ace, there are some predefined ace
109     //  types
110     //
111     //  AceSize is the size, in bytes, of ace.
112     //
113     //  AceFlags are the Ace flags for audit and inheritance, defined shortly.
114
115     ACE_HEADER = record           //winnt
116          AceType : BYTE;
117          AceFlags : BYTE;
118          AceSize : WORD;
119       end;
120     _ACE_HEADER = ACE_HEADER;
121     TACE_HEADER = ACE_HEADER;
122     PACE_HEADER = ^ACE_HEADER;
123
124     ACCESS_MASK = DWORD;          //winnt
125     PACCESS_MASK = ^ACCESS_MASK;  //+winnt
126
127     REGSAM = ACCESS_MASK;
128
129     ACCESS_ALLOWED_ACE = record
130          Header : ACE_HEADER;
131          Mask : ACCESS_MASK;
132          SidStart : DWORD;
133       end;
134     _ACCESS_ALLOWED_ACE = ACCESS_ALLOWED_ACE;
135     TACCESS_ALLOWED_ACE = ACCESS_ALLOWED_ACE;
136     PACCESS_ALLOWED_ACE = ^ACCESS_ALLOWED_ACE;
137
138     ACCESS_DENIED_ACE = record
139          Header : ACE_HEADER;
140          Mask : ACCESS_MASK;
141          SidStart : DWORD;
142       end;
143     _ACCESS_DENIED_ACE = ACCESS_DENIED_ACE;
144     TACCESS_DENIED_ACE = ACCESS_DENIED_ACE;
145
146     ACCESSTIMEOUT = record
147          cbSize : UINT;
148          dwFlags : DWORD;
149          iTimeOutMSec : DWORD;
150       end;
151     _ACCESSTIMEOUT = ACCESSTIMEOUT;
152     TACCESSTIMEOUT = ACCESSTIMEOUT;
153     PACCESSTIMEOUT = ^ACCESSTIMEOUT;
154
155     PACCESS_TOKEN  = PVOID; //+winnt
156
157     ////////////////////////////////////////////////////////////////////////
158     //                                                                    //
159     //                         ACL  and  ACE                              //
160     //                                                                    //
161     ////////////////////////////////////////////////////////////////////////
162
163     //
164     //  Define an ACL and the ACE format.  The structure of an ACL header
165     //  followed by one or more ACEs.  Pictorally the structure of an ACL header
166     //  is as follows:
167     //
168     //       3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
169     //       1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
170     //      +-------------------------------+---------------+---------------+
171     //      |            AclSize            |      Sbz1     |  AclRevision  |
172     //      +-------------------------------+---------------+---------------+
173     //      |              Sbz2             |           AceCount            |
174     //      +-------------------------------+-------------------------------+
175     //
176     //  The current AclRevision is defined to be ACL_REVISION.
177     //
178     //  AclSize is the size, in bytes, allocated for the ACL.  This includes
179     //  the ACL header, ACES, and remaining free space in the buffer.
180     //
181     //  AceCount is the number of ACES in the ACL.
182     //
183
184     ACL = record           //winnt
185          AclRevision : BYTE;
186          Sbz1 : BYTE;
187          AclSize : WORD;
188          AceCount : WORD;
189          Sbz2 : WORD;
190       end;
191     PACL = ^ACL;
192     _ACL = ACL;
193     TACL = ACL;
194
195     ACL_REVISION_INFORMATION = record
196          AclRevision : DWORD;
197       end;
198     _ACL_REVISION_INFORMATION = ACL_REVISION_INFORMATION;
199     TACLREVISIONINFORMATION = ACL_REVISION_INFORMATION;
200     PACLREVISIONINFORMATION = ^ACL_REVISION_INFORMATION;
201
202     ACL_SIZE_INFORMATION = record
203          AceCount : DWORD;
204          AclBytesInUse : DWORD;
205          AclBytesFree : DWORD;
206       end;
207     _ACL_SIZE_INFORMATION = ACL_SIZE_INFORMATION;
208     TACLSIZEINFORMATION = ACL_SIZE_INFORMATION;
209     PACLSIZEINFORMATION = ^ACL_SIZE_INFORMATION;
210
211     ACTION_HEADER = record
212          transport_id : ULONG;
213          action_code : USHORT;
214          reserved : USHORT;
215       end;
216     _ACTION_HEADER = ACTION_HEADER;
217     TACTIONHEADER = ACTION_HEADER;
218     PACTIONHEADER = ^ACTION_HEADER;
219
220     ADAPTER_STATUS = record
221          adapter_address : array[0..5] of UCHAR;
222          rev_major : UCHAR;
223          reserved0 : UCHAR;
224          adapter_type : UCHAR;
225          rev_minor : UCHAR;
226          duration : WORD;
227          frmr_recv : WORD;
228          frmr_xmit : WORD;
229          iframe_recv_err : WORD;
230          xmit_aborts : WORD;
231          xmit_success : DWORD;
232          recv_success : DWORD;
233          iframe_xmit_err : WORD;
234          recv_buff_unavail : WORD;
235          t1_timeouts : WORD;
236          ti_timeouts : WORD;
237          reserved1 : DWORD;
238          free_ncbs : WORD;
239          max_cfg_ncbs : WORD;
240          max_ncbs : WORD;
241          xmit_buf_unavail : WORD;
242          max_dgram_size : WORD;
243          pending_sess : WORD;
244          max_cfg_sess : WORD;
245          max_sess : WORD;
246          max_sess_pkt_size : WORD;
247          name_count : WORD;
248       end;
249     _ADAPTER_STATUS = ADAPTER_STATUS;
250     TADAPTERSTATUS = ADAPTER_STATUS;
251     PADAPTERSTATUS = ^ADAPTER_STATUS;
252
253     ADDJOB_INFO_1 = record
254          Path : LPTSTR;
255          JobId : DWORD;
256       end;
257     _ADDJOB_INFO_1 = ADDJOB_INFO_1;
258     TADDJOB_INFO_1 = ADDJOB_INFO_1;
259     PADDJOB_INFO_1 = ^ADDJOB_INFO_1;
260
261     ANIMATIONINFO = record
262          cbSize : UINT;
263          iMinAnimate : longint;
264       end;
265     LPANIMATIONINFO = ^ANIMATIONINFO;
266     _ANIMATIONINFO = ANIMATIONINFO;
267     TANIMATIONINFO = ANIMATIONINFO;
268     PANIMATIONINFO = ^ANIMATIONINFO;
269
270     POINT = TPOINT;
271     LPPOINT = PPOINT;
272     tagPOINT = TPOINT;
273
274     RECT = TRect;
275     LPRECT = PRECT;
276     _RECT = RECT;
277     LPRCECT = PRECT;
278
279     RECTL = record
280          left : LONG;
281          top : LONG;
282          right : LONG;
283          bottom : LONG;
284       end;
285     _RECTL = RECTL;
286     TRECTL = RECTL;
287     PRECTL = ^RECTL;
288
289     APPBARDATA = record
290          cbSize : DWORD;
291          hWnd : HWND;
292          uCallbackMessage : UINT;
293          uEdge : UINT;
294          rc : RECT;
295          lParam : LPARAM;
296       end;
297     _AppBarData = APPBARDATA;
298     TAppBarData = APPBARDATA;
299     PAppBarData = ^APPBARDATA;
300
301     BITMAP = record
302          bmType : LONG;
303          bmWidth : LONG;
304          bmHeight : LONG;
305          bmWidthBytes : LONG;
306          bmPlanes : WORD;
307          bmBitsPixel : WORD;
308          bmBits : LPVOID;
309       end;
310     PBITMAP = ^BITMAP;
311     NPBITMAP = ^BITMAP;
312     LPBITMAP = ^BITMAP;
313     tagBITMAP = BITMAP;
314     TBITMAP = BITMAP;
315
316     BITMAPCOREHEADER = record
317          bcSize : DWORD;
318          bcWidth : WORD;
319          bcHeight : WORD;
320          bcPlanes : WORD;
321          bcBitCount : WORD;
322       end;
323     tagBITMAPCOREHEADER = BITMAPCOREHEADER;
324     TBITMAPCOREHEADER = BITMAPCOREHEADER;
325     PBITMAPCOREHEADER = ^BITMAPCOREHEADER;
326
327     RGBTRIPLE = record
328          rgbtBlue : BYTE;
329          rgbtGreen : BYTE;
330          rgbtRed : BYTE;
331       end;
332     tagRGBTRIPLE = RGBTRIPLE;
333     TRGBTRIPLE = RGBTRIPLE;
334     PRGBTRIPLE = ^RGBTRIPLE;
335
336     BITMAPCOREINFO = record
337          bmciHeader : BITMAPCOREHEADER;
338          bmciColors : array[0..0] of RGBTRIPLE;
339       end;
340     PBITMAPCOREINFO = ^BITMAPCOREINFO;
341     LPBITMAPCOREINFO = ^BITMAPCOREINFO;
342     _BITMAPCOREINFO = BITMAPCOREINFO;
343     TBITMAPCOREINFO = BITMAPCOREINFO;
344
345(* error
346  WORD    bfReserved1;
347  WORD    bfReserved2;
348 in declarator_list *)
349
350     BITMAPINFOHEADER = record
351          biSize : DWORD;
352          biWidth : LONG;
353          biHeight : LONG;
354          biPlanes : WORD;
355          biBitCount : WORD;
356          biCompression : DWORD;
357          biSizeImage : DWORD;
358          biXPelsPerMeter : LONG;
359          biYPelsPerMeter : LONG;
360          biClrUsed : DWORD;
361          biClrImportant : DWORD;
362       end;
363     LPBITMAPINFOHEADER = ^BITMAPINFOHEADER;
364     TBITMAPINFOHEADER = BITMAPINFOHEADER;
365     PBITMAPINFOHEADER = ^BITMAPINFOHEADER;
366
367     RGBQUAD = record
368          rgbBlue : BYTE;
369          rgbGreen : BYTE;
370          rgbRed : BYTE;
371          rgbReserved : BYTE;
372       end;
373     tagRGBQUAD = RGBQUAD;
374     TRGBQUAD = RGBQUAD;
375     PRGBQUAD = ^RGBQUAD;
376
377     BITMAPINFO = record
378          bmiHeader : BITMAPINFOHEADER;
379          bmiColors : array[0..0] of RGBQUAD;
380       end;
381     LPBITMAPINFO = ^BITMAPINFO;
382     PBITMAPINFO = ^BITMAPINFO;
383     TBITMAPINFO = BITMAPINFO;
384
385     FXPT2DOT30 = longint;
386     LPFXPT2DOT30 = ^FXPT2DOT30;
387     TPFXPT2DOT30 = FXPT2DOT30;
388     PPFXPT2DOT30 = ^FXPT2DOT30;
389
390     CIEXYZ = record
391          ciexyzX : FXPT2DOT30;
392          ciexyzY : FXPT2DOT30;
393          ciexyzZ : FXPT2DOT30;
394       end;
395     tagCIEXYZ = CIEXYZ;
396     LPCIEXYZ = ^CIEXYZ;
397     TPCIEXYZ = CIEXYZ;
398     PCIEXYZ = ^CIEXYZ;
399
400     CIEXYZTRIPLE = record
401          ciexyzRed : CIEXYZ;
402          ciexyzGreen : CIEXYZ;
403          ciexyzBlue : CIEXYZ;
404       end;
405     tagCIEXYZTRIPLE = CIEXYZTRIPLE;
406     LPCIEXYZTRIPLE = ^CIEXYZTRIPLE;
407     TCIEXYZTRIPLE = CIEXYZTRIPLE;
408     PCIEXYZTRIPLE = ^CIEXYZTRIPLE;
409
410     BITMAPV4HEADER = record
411          bV4Size : DWORD;
412          bV4Width : LONG;
413          bV4Height : LONG;
414          bV4Planes : WORD;
415          bV4BitCount : WORD;
416          bV4V4Compression : DWORD;
417          bV4SizeImage : DWORD;
418          bV4XPelsPerMeter : LONG;
419          bV4YPelsPerMeter : LONG;
420          bV4ClrUsed : DWORD;
421          bV4ClrImportant : DWORD;
422          bV4RedMask : DWORD;
423          bV4GreenMask : DWORD;
424          bV4BlueMask : DWORD;
425          bV4AlphaMask : DWORD;
426          bV4CSType : DWORD;
427          bV4Endpoints : CIEXYZTRIPLE;
428          bV4GammaRed : DWORD;
429          bV4GammaGreen : DWORD;
430          bV4GammaBlue : DWORD;
431       end;
432     LPBITMAPV4HEADER = ^BITMAPV4HEADER;
433     TBITMAPV4HEADER = BITMAPV4HEADER;
434     PBITMAPV4HEADER = ^BITMAPV4HEADER;
435
436     BITMAPFILEHEADER = packed record
437       bfType : Word;
438       bfSize : DWord;
439       bfReserved1 : Word;
440       bfReserved2 : Word;
441       bfOffBits : DWord;
442     end;
443     TBitmapFileHeader = BITMAPFILEHEADER;
444
445     BLOB = record
446          cbSize : ULONG;
447          pBlobData : ^BYTE;
448       end;
449     _BLOB = BLOB;
450     TBLOB = BLOB;
451     PBLOB = ^BLOB;
452
453     SHITEMID = record
454          cb : USHORT;
455          abID : array[0..0] of BYTE;
456       end;
457     LPSHITEMID = ^SHITEMID;
458     LPCSHITEMID = ^SHITEMID;
459     _SHITEMID = SHITEMID;
460     TSHITEMID = SHITEMID;
461     PSHITEMID = ^SHITEMID;
462
463     ITEMIDLIST = record
464          mkid : SHITEMID;
465       end;
466     LPITEMIDLIST = ^ITEMIDLIST;
467     LPCITEMIDLIST = ^ITEMIDLIST;
468     _ITEMIDLIST = ITEMIDLIST;
469     TITEMIDLIST = ITEMIDLIST;
470     PITEMIDLIST = ^ITEMIDLIST;
471
472     FILETIME = record
473          dwLowDateTime : DWORD;
474          dwHighDateTime : DWORD;
475       end;
476     LPFILETIME = ^FILETIME;
477     _FILETIME = FILETIME;
478     TFILETIME = FILETIME;
479     PFILETIME = ^FILETIME;
480
481     _GET_FILEEX_INFO_LEVELS=(GetFileExInfoStandard,GetFileExMaxInfoLevel); //+winbase
482     GET_FILEEX_INFO_LEVELS=_GET_FILEEX_INFO_LEVELS;                        //+winbase
483
484     _FINDEX_INFO_LEVELS = (FindExInfoStandard,FindExInfoMaxInfoLevel); //+winbase
485     FINDEX_INFO_LEVELS = _FINDEX_INFO_LEVELS;                          //+winbase
486
487     _FINDEX_SEARCH_OPS = ( FindExSearchNameMatch, FindExSearchLimitToDirectories,
488                            FindExSearchLimitToDevices, FindExSearchMaxSearchOp);
489     FINDEX_SEARCH_OPS=_FINDEX_SEARCH_OPS;
490
491     BY_HANDLE_FILE_INFORMATION = record
492          dwFileAttributes : DWORD;
493          ftCreationTime : FILETIME;
494          ftLastAccessTime : FILETIME;
495          ftLastWriteTime : FILETIME;
496          dwVolumeSerialNumber : DWORD;
497          nFileSizeHigh : DWORD;
498          nFileSizeLow : DWORD;
499          nNumberOfLinks : DWORD;
500          nFileIndexHigh : DWORD;
501          nFileIndexLow : DWORD;
502       end;
503     LPBY_HANDLE_FILE_INFORMATION = ^BY_HANDLE_FILE_INFORMATION;
504     _BY_HANDLE_FILE_INFORMATION = BY_HANDLE_FILE_INFORMATION;
505     TBYHANDLEFILEINFORMATION = BY_HANDLE_FILE_INFORMATION;
506     PBYHANDLEFILEINFORMATION = ^BY_HANDLE_FILE_INFORMATION;
507
508     FIXED = record
509          fract : WORD;
510          value : integer;
511       end;
512     _FIXED = FIXED;
513     TFIXED = FIXED;
514     PFIXED = ^FIXED;
515
516     POINTFX = record
517          x : FIXED;
518          y : FIXED;
519       end;
520     tagPOINTFX = POINTFX;
521     TPOINTFX = POINTFX;
522     PPOINTFX = ^POINTFX;
523
524     POINTL = record
525          x : LONG;
526          y : LONG;
527       end;
528     _POINTL = POINTL;
529     TPOINTL = POINTL;
530     PPOINTL = ^POINTL;
531
532     POINTS = record
533          x : SHORT;
534          y : SHORT;
535       end;
536     tagPOINTS = POINTS;  //windef
537     TPOINTS = POINTS;
538     PPOINTS = ^POINTS;
539
540     CANDIDATEFORM = record
541          dwIndex : DWORD;
542          dwStyle : DWORD;
543          ptCurrentPos : POINT;
544          rcArea : RECT;
545       end;
546     LPCANDIDATEFORM = ^CANDIDATEFORM;
547     _tagCANDIDATEFORM = CANDIDATEFORM;
548     TCANDIDATEFORM = CANDIDATEFORM;
549     PCANDIDATEFORM = ^CANDIDATEFORM;
550
551     CANDIDATELIST = record
552          dwSize : DWORD;
553          dwStyle : DWORD;
554          dwCount : DWORD;
555          dwSelection : DWORD;
556          dwPageStart : DWORD;
557          dwPageSize : DWORD;
558          dwOffset : array[0..0] of DWORD;
559       end;
560     LPCANDIDATELIST = ^CANDIDATELIST;
561     _tagCANDIDATELIST = CANDIDATELIST;
562     TCANDIDATELIST = CANDIDATELIST;
563     PCANDIDATELIST = ^CANDIDATELIST;
564
565     CREATESTRUCT = record
566          lpCreateParams : LPVOID;
567          hInstance : HINST;
568          hMenu : HMENU;
569          hwndParent : HWND;
570          cy : longint;
571          cx : longint;
572          y : longint;
573          x : longint;
574          style : LONG;
575          lpszName : LPCTSTR;
576          lpszClass : LPCTSTR;
577          dwExStyle : DWORD;
578       end;
579     LPCREATESTRUCT = ^CREATESTRUCT;
580     tagCREATESTRUCT = CREATESTRUCT;
581     TCREATESTRUCT = CREATESTRUCT;
582     PCREATESTRUCT = ^CREATESTRUCT;
583
584     CBT_CREATEWND = record
585          lpcs : LPCREATESTRUCT;
586          hwndInsertAfter : HWND;
587       end;
588     tagCBT_CREATEWND = CBT_CREATEWND;
589     TCBT_CREATEWND = CBT_CREATEWND;
590     PCBT_CREATEWND = ^CBT_CREATEWND;
591
592     CBTACTIVATESTRUCT = record
593          fMouse : WINBOOL;
594          hWndActive : HWND;
595       end;
596     tagCBTACTIVATESTRUCT = CBTACTIVATESTRUCT;
597     TCBTACTIVATESTRUCT = CBTACTIVATESTRUCT;
598     PCBTACTIVATESTRUCT = ^CBTACTIVATESTRUCT;
599
600
601     CHAR_INFO = record
602              case longint of
603                 0 : ( UnicodeChar : WCHAR;
604                       Attributes  : Word);
605                 1 : ( AsciiChar : CHAR );
606              end;
607     _CHAR_INFO = CHAR_INFO;
608     TCHAR_INFO = CHAR_INFO;
609     PCHAR_INFO = ^CHAR_INFO;
610
611     CHARFORMAT = record
612          cbSize : UINT;
613          dwMask : DWORD;
614          dwEffects : DWORD;
615          yHeight : LONG;
616          yOffset : LONG;
617          crTextColor : COLORREF;
618          bCharSet : BYTE;
619          bPitchAndFamily : BYTE;
620          szFaceName : array[0..(LF_FACESIZE)-1] of TCHAR;
621       end;
622     _charformat = CHARFORMAT;
623     Tcharformat = CHARFORMAT;
624     Pcharformat = ^CHARFORMAT;
625
626     CHARRANGE = record
627          cpMin : LONG;
628          cpMax : LONG;
629       end;
630     _charrange = CHARRANGE;
631     Tcharrange = CHARRANGE;
632     Pcharrange = ^CHARRANGE;
633
634     CHARSET = record
635          aflBlock : array[0..2] of DWORD;
636          flLang : DWORD;
637       end;
638     tagCHARSET = CHARSET;
639     TCHARSET = CHARSET;
640     PCHARSET = ^CHARSET;
641
642     FONTSIGNATURE = record
643          fsUsb : array[0..3] of DWORD;
644          fsCsb : array[0..1] of DWORD;
645       end;
646     LPFONTSIGNATURE = ^FONTSIGNATURE;
647     tagFONTSIGNATURE = FONTSIGNATURE;
648     TFONTSIGNATURE = FONTSIGNATURE;
649     PFONTSIGNATURE = ^FONTSIGNATURE;
650
651     FLOAT128 = record        //+winnt
652          LowPart  : int64;
653          HighPart : int64;
654       end;
655     PFLOAT128 = ^FLOAT128;
656
657     CHARSETINFO = record
658          ciCharset : UINT;
659          ciACP : UINT;
660          fs : FONTSIGNATURE;
661       end;
662     LPCHARSETINFO = ^CHARSETINFO;
663     TCHARSETINFO = CHARSETINFO;
664     PCHARSETINFO = ^CHARSETINFO;
665
666     {CHOOSECOLOR = record confilcts with function ChooseColor }
667     TCHOOSECOLOR = record
668          lStructSize : DWORD;
669          hwndOwner : HWND;
670          hInstance : HWND;
671          rgbResult : COLORREF;
672          lpCustColors : ^COLORREF;
673          Flags : DWORD;
674          lCustData : LPARAM;
675          lpfnHook : LPCCHOOKPROC;
676          lpTemplateName : LPCTSTR;
677       end;
678     LPCHOOSECOLOR = ^TCHOOSECOLOR;
679     PCHOOSECOLOR = ^TCHOOSECOLOR;
680
681     LOGFONTA = record
682          lfHeight : LONG;
683          lfWidth : LONG;
684          lfEscapement : LONG;
685          lfOrientation : LONG;
686          lfWeight : LONG;
687          lfItalic : BYTE;
688          lfUnderline : BYTE;
689          lfStrikeOut : BYTE;
690          lfCharSet : BYTE;
691          lfOutPrecision : BYTE;
692          lfClipPrecision : BYTE;
693          lfQuality : BYTE;
694          lfPitchAndFamily : BYTE;
695          lfFaceName : array[0..(LF_FACESIZE)-1] of TCHAR;
696       end;
697     TLOGFONTA = LOGFONTA;
698     tagLOGFONTA = LOGFONTA;
699     NPLOGFONTA = ^LOGFONTA;
700     PLOGFONTA = ^LOGFONTA;
701
702     LOGFONTW = record
703         lfHeight: LONG;
704         lfWidth: LONG;
705         lfEscapement: LONG;
706         lfOrientation: LONG;
707         lfWeight: LONG;
708         lfItalic: BYTE;
709         lfUnderline: BYTE;
710         lfStrikeOut: BYTE;
711         lfCharSet: BYTE;
712         lfOutPrecision: BYTE;
713         lfClipPrecision: BYTE;
714         lfQuality: BYTE;
715         lfPitchAndFamily: BYTE;
716         lfFaceName: array [0..LF_FACESIZE - 1] of WCHAR;
717       end;
718     LPLOGFONTW = ^LOGFONTW;
719     NPLOGFONTW = ^LOGFONTW;
720     tagLOGFONTW = LOGFONTW;
721     TLogFontW = LOGFONTW;
722     PLogFontW = ^TLogFontW;
723
724     TLOGFONT = LOGFONTW;
725     LOGFONT = LOGFONTW;
726     tagLOGFONT = LOGFONTW;
727     LPLOGFONT = ^LOGFONTW;
728     PLOGFONT = ^LOGFONTW;
729     NPLOGFONT = ^LOGFONTW;
730
731     TCHOOSEFONTW = record //+commdlg
732          lStructSize : DWORD;
733          hwndOwner : HWND;
734          hDC : HDC;
735          lpLogFont : LPLOGFONTW;
736          iPointSize : Integer;
737          Flags : DWORD;
738          rgbColors : DWORD;
739          lCustData : LPARAM;
740          lpfnHook : LPCFHOOKPROC;
741          lpTemplateName : LPCWSTR;
742          hInstance : HINST;
743          lpszStyle : LPTSTR;
744          nFontType : WORD;
745          ___MISSING_ALIGNMENT__ : WORD;
746          nSizeMin : Integer;
747          nSizeMax : Integer;
748       end;
749     tagCHOOSEFONTW = TCHOOSEFONTW; //+commdlg
750     LPCHOOSEFONTW = ^TCHOOSEFONTW; //+commdlg
751     PCHOOSEFONTW = ^TCHOOSEFONTW; //+commdlg
752
753     {CHOOSEFONT = record conflicts with ChooseFont function }
754     TCHOOSEFONT = record
755          lStructSize : DWORD;
756          hwndOwner : HWND;
757          hDC : HDC;
758          lpLogFont : LPLOGFONT;
759          iPointSize : WINT;
760          Flags : DWORD;
761          rgbColors : DWORD;
762          lCustData : LPARAM;
763          lpfnHook : LPCFHOOKPROC;
764          lpTemplateName : LPCTSTR;
765          hInstance : HINST;
766          lpszStyle : LPTSTR;
767          nFontType : WORD;
768          ___MISSING_ALIGNMENT__ : WORD;
769          nSizeMin : WINT;
770          nSizeMax : WINT;
771       end;
772     LPCHOOSEFONT = ^TCHOOSEFONT;
773     PCHOOSEFONT = ^TCHOOSEFONT;
774
775     CIDA = record
776          cidl : UINT;
777          aoffset : array[0..0] of UINT;
778       end;
779     LPIDA = ^CIDA;
780     _IDA = CIDA;
781     TIDA = CIDA;
782     PIDA = ^CIDA;
783
784     CLIENTCREATESTRUCT = record
785          hWindowMenu : HANDLE;
786          idFirstChild : UINT;
787       end;
788     LPCLIENTCREATESTRUCT = ^CLIENTCREATESTRUCT;
789     tagCLIENTCREATESTRUCT = CLIENTCREATESTRUCT;
790     TCLIENTCREATESTRUCT = CLIENTCREATESTRUCT;
791     PCLIENTCREATESTRUCT = ^CLIENTCREATESTRUCT;
792
793     CMINVOKECOMMANDINFO = record
794          cbSize : DWORD;
795          fMask : DWORD;
796          hwnd : HWND;
797          lpVerb : LPCSTR;
798          lpParameters : LPCSTR;
799          lpDirectory : LPCSTR;
800          nShow : longint;
801          dwHotKey : DWORD;
802          hIcon : HANDLE;
803       end;
804     LPCMINVOKECOMMANDINFO = ^CMINVOKECOMMANDINFO;
805     _CMInvokeCommandInfo = CMINVOKECOMMANDINFO;
806     TCMInvokeCommandInfo = CMINVOKECOMMANDINFO;
807     PCMInvokeCommandInfo = ^CMINVOKECOMMANDINFO;
808
809     COLORADJUSTMENT = record
810          caSize : WORD;
811          caFlags : WORD;
812          caIlluminantIndex : WORD;
813          caRedGamma : WORD;
814          caGreenGamma : WORD;
815          caBlueGamma : WORD;
816          caReferenceBlack : WORD;
817          caReferenceWhite : WORD;
818          caContrast : SHORT;
819          caBrightness : SHORT;
820          caColorfulness : SHORT;
821          caRedGreenTint : SHORT;
822       end;
823     LPCOLORADJUSTMENT = ^COLORADJUSTMENT;
824     tagCOLORADJUSTMENT = COLORADJUSTMENT;
825     TCOLORADJUSTMENT = COLORADJUSTMENT;
826     PCOLORADJUSTMENT = ^COLORADJUSTMENT;
827
828     COLORMAP = record
829          from : COLORREF;
830          _to : COLORREF;
831       end;
832     LPCOLORMAP = ^COLORMAP;
833     _COLORMAP = COLORMAP;
834     TCOLORMAP = COLORMAP;
835     PCOLORMAP = ^COLORMAP;
836
837{*
838 * Combo Box Structures
839 *}
840     tagCOMBOBOXINFO = record
841       cbSize:DWORD;
842       rcItem:RECT;
843       rcButton:RECT;
844       stateButton:DWORD; // Currently unsupported on CE
845       hwndCombo:HWND;
846       hwndItem:HWND;
847       hwndList:HWND;
848     end;
849     COMBOBOXINFO = tagCOMBOBOXINFO;
850     PCOMBOBOXINFO = ^tagCOMBOBOXINFO;
851     LPCOMBOBOXINFO = ^tagCOMBOBOXINFO;
852
853     DCB = record
854          DCBlength : DWORD;
855          BaudRate : DWORD;
856          flags : DWORD;
857          wReserved : WORD;
858          XonLim : WORD;
859          XoffLim : WORD;
860          ByteSize : BYTE;
861          Parity : BYTE;
862          StopBits : BYTE;
863          XonChar : char;
864          XoffChar : char;
865          ErrorChar : char;
866          EofChar : char;
867          EvtChar : char;
868          wReserved1 : WORD;
869       end;
870     LPDCB = ^DCB;
871     _DCB = DCB;
872     TDCB = DCB;
873     PDCB = ^DCB;
874
875  const
876     bm_DCB_fBinary = $1;
877     bp_DCB_fBinary = 0;
878     bm_DCB_fParity = $2;
879     bp_DCB_fParity = 1;
880     bm_DCB_fOutxCtsFlow = $4;
881     bp_DCB_fOutxCtsFlow = 2;
882     bm_DCB_fOutxDsrFlow = $8;
883     bp_DCB_fOutxDsrFlow = 3;
884     bm_DCB_fDtrControl = $30;
885     bp_DCB_fDtrControl = 4;
886     bm_DCB_fDsrSensitivity = $40;
887     bp_DCB_fDsrSensitivity = 6;
888     bm_DCB_fTXContinueOnXoff = $80;
889     bp_DCB_fTXContinueOnXoff = 7;
890     bm_DCB_fOutX = $100;
891     bp_DCB_fOutX = 8;
892     bm_DCB_fInX = $200;
893     bp_DCB_fInX = 9;
894     bm_DCB_fErrorChar = $400;
895     bp_DCB_fErrorChar = 10;
896     bm_DCB_fNull = $800;
897     bp_DCB_fNull = 11;
898     bm_DCB_fRtsControl = $3000;
899     bp_DCB_fRtsControl = 12;
900     bm_DCB_fAbortOnError = $4000;
901     bp_DCB_fAbortOnError = 14;
902     bm_DCB_fDummy2 = $FFFF8000;
903     bp_DCB_fDummy2 = 15;
904  function fBinary(var a : DCB) : DWORD;
905  procedure set_fBinary(var a : DCB; __fBinary : DWORD);
906  function fParity(var a : DCB) : DWORD;
907  procedure set_fParity(var a : DCB; __fParity : DWORD);
908  function fOutxCtsFlow(var a : DCB) : DWORD;
909  procedure set_fOutxCtsFlow(var a : DCB; __fOutxCtsFlow : DWORD);
910  function fOutxDsrFlow(var a : DCB) : DWORD;
911  procedure set_fOutxDsrFlow(var a : DCB; __fOutxDsrFlow : DWORD);
912  function fDtrControl(var a : DCB) : DWORD;
913  procedure set_fDtrControl(var a : DCB; __fDtrControl : DWORD);
914  function fDsrSensitivity(var a : DCB) : DWORD;
915  procedure set_fDsrSensitivity(var a : DCB; __fDsrSensitivity : DWORD);
916  function fTXContinueOnXoff(var a : DCB) : DWORD;
917  procedure set_fTXContinueOnXoff(var a : DCB; __fTXContinueOnXoff : DWORD);
918  function fOutX(var a : DCB) : DWORD;
919  procedure set_fOutX(var a : DCB; __fOutX : DWORD);
920  function fInX(var a : DCB) : DWORD;
921  procedure set_fInX(var a : DCB; __fInX : DWORD);
922  function fErrorChar(var a : DCB) : DWORD;
923  procedure set_fErrorChar(var a : DCB; __fErrorChar : DWORD);
924  function fNull(var a : DCB) : DWORD;
925  procedure set_fNull(var a : DCB; __fNull : DWORD);
926  function fRtsControl(var a : DCB) : DWORD;
927  procedure set_fRtsControl(var a : DCB; __fRtsControl : DWORD);
928  function fAbortOnError(var a : DCB) : DWORD;
929  procedure set_fAbortOnError(var a : DCB; __fAbortOnError : DWORD);
930  function fDummy2(var a : DCB) : DWORD;
931  procedure set_fDummy2(var a : DCB; __fDummy2 : DWORD);
932
933  type
934
935     tagINITCOMMONCONTROLSEX = record
936          dwSize:DWORD;             // size of this structure
937          dwICC:DWORD;              // flags indicating which classes to be initialized
938        end;
939     TINITCOMMONCONTROLSEX=tagINITCOMMONCONTROLSEX;
940     LPINITCOMMONCONTROLSEX=^tagINITCOMMONCONTROLSEX;
941
942     COMMCONFIG = record
943          dwSize : DWORD;
944          wVersion : WORD;
945          wReserved : WORD;
946          dcb : DCB;
947          dwProviderSubType : DWORD;
948          dwProviderOffset : DWORD;
949          dwProviderSize : DWORD;
950          wcProviderData : array[0..0] of WCHAR;
951       end;
952     LPCOMMCONFIG = ^COMMCONFIG;
953     _COMM_CONFIG = COMMCONFIG;
954     TCOMMCONFIG = COMMCONFIG;
955     PCOMMCONFIG = ^COMMCONFIG;
956
957     COMMPROP = record
958          wPacketLength : WORD;
959          wPacketVersion : WORD;
960          dwServiceMask : DWORD;
961          dwReserved1 : DWORD;
962          dwMaxTxQueue : DWORD;
963          dwMaxRxQueue : DWORD;
964          dwMaxBaud : DWORD;
965          dwProvSubType : DWORD;
966          dwProvCapabilities : DWORD;
967          dwSettableParams : DWORD;
968          dwSettableBaud : DWORD;
969          wSettableData : WORD;
970          wSettableStopParity : WORD;
971          dwCurrentTxQueue : DWORD;
972          dwCurrentRxQueue : DWORD;
973          dwProvSpec1 : DWORD;
974          dwProvSpec2 : DWORD;
975          wcProvChar : array[0..0] of WCHAR;
976       end;
977     LPCOMMPROP = ^COMMPROP;
978     _COMMPROP = COMMPROP;
979     TCOMMPROP = COMMPROP;
980     PCOMMPROP = ^COMMPROP;
981
982     COMMTIMEOUTS = record
983          ReadIntervalTimeout : DWORD;
984          ReadTotalTimeoutMultiplier : DWORD;
985          ReadTotalTimeoutConstant : DWORD;
986          WriteTotalTimeoutMultiplier : DWORD;
987          WriteTotalTimeoutConstant : DWORD;
988       end;
989     LPCOMMTIMEOUTS = ^COMMTIMEOUTS;
990     _COMMTIMEOUTS = COMMTIMEOUTS;
991     TCOMMTIMEOUTS = COMMTIMEOUTS;
992     PCOMMTIMEOUTS = ^COMMTIMEOUTS;
993
994     COMPAREITEMSTRUCT = record
995          CtlType : UINT;
996          CtlID : UINT;
997          hwndItem : HWND;
998          itemID1 : UINT;
999          itemData1 : DWORD;
1000          itemID2 : UINT;
1001          itemData2 : DWORD;
1002       end;
1003     tagCOMPAREITEMSTRUCT = COMPAREITEMSTRUCT;
1004     TCOMPAREITEMSTRUCT = COMPAREITEMSTRUCT;
1005     PCOMPAREITEMSTRUCT = ^COMPAREITEMSTRUCT;
1006
1007     COMPCOLOR = record
1008          crText : COLORREF;
1009          crBackground : COLORREF;
1010          dwEffects : DWORD;
1011       end;
1012     TCOMPCOLOR = COMPCOLOR;
1013     PCOMPCOLOR = ^COMPCOLOR;
1014
1015     COMPOSITIONFORM = record
1016          dwStyle : DWORD;
1017          ptCurrentPos : POINT;
1018          rcArea : RECT;
1019       end;
1020     LPCOMPOSITIONFORM = ^COMPOSITIONFORM;
1021     _tagCOMPOSITIONFORM = COMPOSITIONFORM;
1022     TCOMPOSITIONFORM = COMPOSITIONFORM;
1023     PCOMPOSITIONFORM = ^COMPOSITIONFORM;
1024
1025//     TComStatFlags = set of (fCtsHold, fDsrHold, fRlsdHold , fXoffHold ,
1026//                    fXoffSent , fEof ,  fTxim  , fReserved);
1027
1028     COMSTAT = record
1029          flag0 : DWORD;   // can't use tcomstatflags, set packing issues
1030                           // and conflicts with macro's
1031          cbInQue : DWORD;
1032          cbOutQue : DWORD;
1033       end;
1034     LPCOMSTAT = ^COMSTAT;
1035     _COMSTAT = COMSTAT;
1036     TCOMSTAT = COMSTAT;
1037     PCOMSTAT = ^COMSTAT;
1038  const
1039     bm_COMSTAT_fCtsHold = $1;
1040     bp_COMSTAT_fCtsHold = 0;
1041     bm_COMSTAT_fDsrHold = $2;
1042     bp_COMSTAT_fDsrHold = 1;
1043     bm_COMSTAT_fRlsdHold = $4;
1044     bp_COMSTAT_fRlsdHold = 2;
1045     bm_COMSTAT_fXoffHold = $8;
1046     bp_COMSTAT_fXoffHold = 3;
1047     bm_COMSTAT_fXoffSent = $10;
1048     bp_COMSTAT_fXoffSent = 4;
1049     bm_COMSTAT_fEof = $20;
1050     bp_COMSTAT_fEof = 5;
1051     bm_COMSTAT_fTxim = $40;
1052     bp_COMSTAT_fTxim = 6;
1053     bm_COMSTAT_fReserved = $FFFFFF80;
1054     bp_COMSTAT_fReserved = 7;
1055  function fCtsHold(var a : COMSTAT) : DWORD;  // should be renamed to get_<x>?
1056  procedure set_fCtsHold(var a : COMSTAT; __fCtsHold : DWORD);
1057  function fDsrHold(var a : COMSTAT) : DWORD;
1058  procedure set_fDsrHold(var a : COMSTAT; __fDsrHold : DWORD);
1059  function fRlsdHold(var a : COMSTAT) : DWORD;
1060  procedure set_fRlsdHold(var a : COMSTAT; __fRlsdHold : DWORD);
1061  function fXoffHold(var a : COMSTAT) : DWORD;
1062  procedure set_fXoffHold(var a : COMSTAT; __fXoffHold : DWORD);
1063  function fXoffSent(var a : COMSTAT) : DWORD;
1064  procedure set_fXoffSent(var a : COMSTAT; __fXoffSent : DWORD);
1065  function fEof(var a : COMSTAT) : DWORD;
1066  procedure set_fEof(var a : COMSTAT; __fEof : DWORD);
1067  function fTxim(var a : COMSTAT) : DWORD;
1068  procedure set_fTxim(var a : COMSTAT; __fTxim : DWORD);
1069  function fReserved(var a : COMSTAT) : DWORD;
1070  procedure set_fReserved(var a : COMSTAT; __fReserved : DWORD);
1071
1072  type
1073
1074     CONSOLE_CURSOR_INFO = record
1075          dwSize : DWORD;
1076          bVisible : WINBOOL;
1077       end;
1078     PCONSOLE_CURSOR_INFO = ^CONSOLE_CURSOR_INFO;
1079     _CONSOLE_CURSOR_INFO = CONSOLE_CURSOR_INFO;
1080     TCONSOLECURSORINFO = CONSOLE_CURSOR_INFO;
1081     PCONSOLECURSORINFO = ^CONSOLE_CURSOR_INFO;
1082     TCURSORINFO = CONSOLE_CURSOR_INFO;
1083
1084     COORD = record
1085          X : SHORT;
1086          Y : SHORT;
1087       end;
1088     _COORD = COORD;
1089     TCOORD = COORD;
1090     PCOORD = ^COORD;
1091
1092     SMALL_RECT = record
1093          Left : SHORT;
1094          Top : SHORT;
1095          Right : SHORT;
1096          Bottom : SHORT;
1097       end;
1098     _SMALL_RECT = SMALL_RECT;
1099     TSMALL_RECT = SMALL_RECT;
1100     PSMALL_RECT = ^SMALL_RECT;
1101
1102     CONSOLE_SCREEN_BUFFER_INFO = packed record
1103          dwSize : COORD;
1104          dwCursorPosition : COORD;
1105          wAttributes : WORD;
1106          srWindow : SMALL_RECT;
1107          dwMaximumWindowSize : COORD;
1108       end;
1109     PCONSOLE_SCREEN_BUFFER_INFO = ^CONSOLE_SCREEN_BUFFER_INFO;
1110     _CONSOLE_SCREEN_BUFFER_INFO = CONSOLE_SCREEN_BUFFER_INFO;
1111     TCONSOLESCREENBUFFERINFO = CONSOLE_SCREEN_BUFFER_INFO;
1112     PCONSOLESCREENBUFFERINFO = ^CONSOLE_SCREEN_BUFFER_INFO;
1113
1114{$ifdef i386}                              //+winnt
1115  type
1116     FLOATING_SAVE_AREA = record //~winnt
1117          ControlWord : DWORD;
1118          StatusWord : DWORD;
1119          TagWord : DWORD;
1120          ErrorOffset : DWORD;
1121          ErrorSelector : DWORD;
1122          DataOffset : DWORD;
1123          DataSelector : DWORD;
1124          RegisterArea : array[0..SIZE_OF_80387_REGISTERS-1] of BYTE; //~winnt
1125          Cr0NpxState : DWORD;
1126       end;
1127     _FLOATING_SAVE_AREA = FLOATING_SAVE_AREA; //winnt
1128     TFLOATINGSAVEAREA = FLOATING_SAVE_AREA;   //winnt
1129     PFLOATING_SAVE_AREA = ^FLOATING_SAVE_AREA;  //~winnt
1130
1131//
1132// Context Frame
1133//
1134//  This frame has a several purposes: 1) it is used as an argument to
1135//  NtContinue, 2) is is used to constuct a call frame for APC delivery,
1136//  and 3) it is used in the user level thread creation routines.
1137//
1138//  The layout of the record conforms to a standard call frame.
1139//
1140
1141     CONTEXT = record                       //winnt
1142          ContextFlags : DWORD;
1143          Dr0 : DWORD;
1144          Dr1 : DWORD;
1145          Dr2 : DWORD;
1146          Dr3 : DWORD;
1147          Dr6 : DWORD;
1148          Dr7 : DWORD;
1149          FloatSave : FLOATING_SAVE_AREA;
1150          SegGs : DWORD;
1151          SegFs : DWORD;
1152          SegEs : DWORD;
1153          SegDs : DWORD;
1154          Edi : DWORD;
1155          Esi : DWORD;
1156          Ebx : DWORD;
1157          Edx : DWORD;
1158          Ecx : DWORD;
1159          Eax : DWORD;
1160          Ebp : DWORD;
1161          Eip : DWORD;
1162          SegCs : DWORD;
1163          EFlags : DWORD;
1164          Esp : DWORD;
1165          SegSs : DWORD;
1166       end;
1167
1168     LDT_ENTRY = record  //~winnt, moved into _X86_
1169          LimitLow : WORD;
1170          BaseLow : WORD;
1171          HighWord : record
1172              case longint of
1173                 0 : ( Bytes : record
1174                      BaseMid : BYTE;
1175                      Flags1 : BYTE;
1176                      Flags2 : BYTE;
1177                      BaseHi : BYTE;
1178                   end );
1179                 1 : ( Bits : record
1180                      flag0 : longint;
1181                   end );
1182              end;
1183       end;
1184     LPLDT_ENTRY = ^LDT_ENTRY;
1185     PLDT_ENTRY = ^LDT_ENTRY;
1186     _LDT_ENTRY = LDT_ENTRY;
1187     TLDTENTRY = LDT_ENTRY;
1188     PLDTENTRY = ^LDT_ENTRY;
1189
1190{$endif i386}                              //+winnt
1191
1192{$ifdef _MIPS_}                             //+winnt all block added
1193//
1194// Context Frame
1195//
1196//  N.B. This frame must be exactly a multiple of 16 bytes in length.
1197//
1198//  This frame has a several purposes: 1) it is used as an argument to
1199//  NtContinue, 2) it is used to constuct a call frame for APC delivery,
1200//  3) it is used to construct a call frame for exception dispatching
1201//  in user mode, and 4) it is used in the user level thread creation
1202//  routines.
1203//
1204//  The layout of the record conforms to a standard call frame.
1205//
1206  type
1207    {$ifdef  _MIPS64} //+winnt
1208     FREG_TYPE =  ULONGLONG;
1209     REG_TYPE  =  ULONGLONG;
1210    {$else}
1211     FREG_TYPE =  DWORD;
1212     REG_TYPE  =  ULONG;
1213    {$endif _MIPS64}
1214     CONTEXT = record                       //+winnt
1215          Argument : Array[0..3] of REG_TYPE;
1216          FltF0    : FREG_TYPE;
1217          FltF1    : FREG_TYPE;
1218          FltF2    : FREG_TYPE;
1219          FltF3    : FREG_TYPE;
1220          FltF4    : FREG_TYPE;
1221          FltF5    : FREG_TYPE;
1222          FltF6    : FREG_TYPE;
1223          FltF7    : FREG_TYPE;
1224          FltF8    : FREG_TYPE;
1225          FltF9    : FREG_TYPE;
1226          FltF10   : FREG_TYPE;
1227          FltF11   : FREG_TYPE;
1228          FltF12   : FREG_TYPE;
1229          FltF13   : FREG_TYPE;
1230          FltF14   : FREG_TYPE;
1231          FltF15   : FREG_TYPE;
1232          FltF16   : FREG_TYPE;
1233          FltF17   : FREG_TYPE;
1234          FltF18   : FREG_TYPE;
1235          FltF19   : FREG_TYPE;
1236          FltF20   : FREG_TYPE;
1237          FltF21   : FREG_TYPE;
1238          FltF22   : FREG_TYPE;
1239          FltF23   : FREG_TYPE;
1240          FltF24   : FREG_TYPE;
1241          FltF25   : FREG_TYPE;
1242          FltF26   : FREG_TYPE;
1243          FltF27   : FREG_TYPE;
1244          FltF28   : FREG_TYPE;
1245          FltF29   : FREG_TYPE;
1246          FltF30   : FREG_TYPE;
1247          FltF31   : FREG_TYPE;
1248
1249          IntZero : REG_TYPE;
1250          IntAt   : REG_TYPE;
1251          IntV0   : REG_TYPE;
1252          IntV1   : REG_TYPE;
1253          IntA0   : REG_TYPE;
1254          IntA1   : REG_TYPE;
1255          IntA2   : REG_TYPE;
1256          IntA3   : REG_TYPE;
1257          IntT0   : REG_TYPE;
1258          IntT1   : REG_TYPE;
1259          IntT2   : REG_TYPE;
1260          IntT3   : REG_TYPE;
1261          IntT4   : REG_TYPE;
1262          IntT5   : REG_TYPE;
1263          IntT6   : REG_TYPE;
1264          IntT7   : REG_TYPE;
1265          IntS0   : REG_TYPE;
1266          IntS1   : REG_TYPE;
1267          IntS2   : REG_TYPE;
1268          IntS3   : REG_TYPE;
1269          IntS4   : REG_TYPE;
1270          IntS5   : REG_TYPE;
1271          IntS6   : REG_TYPE;
1272          IntS7   : REG_TYPE;
1273          IntT8   : REG_TYPE;
1274          IntT9   : REG_TYPE;
1275          IntK0   : REG_TYPE;
1276          IntK1   : REG_TYPE;
1277          IntGp   : REG_TYPE;
1278          IntSp   : REG_TYPE;
1279          IntS8   : REG_TYPE;
1280          IntRa   : REG_TYPE;
1281          IntLo   : REG_TYPE;
1282          IntHi   : REG_TYPE;
1283
1284          Fsr     : DWORD;
1285          Fir     : DWORD;
1286          Psr     : DWORD;
1287          ContextFlags : DWORD;
1288          Fill    : Array[0..1] of DWORD;
1289      end;
1290
1291{$endif _MIPS_}                             //+winnt
1292
1293{$ifdef _PPC_}                             //+winnt
1294  { Floating point registers returned when CONTEXT_FLOATING_POINT is set  }
1295  { Integer registers returned when CONTEXT_INTEGER is set.   }
1296  { Condition register  }
1297  { Fixed point exception register  }
1298  { The following are set when CONTEXT_CONTROL is set.   }
1299  { Machine status register  }
1300  { Instruction address register  }
1301  { Link register  }
1302  { Control register  }
1303  { Control which context values are returned  }
1304  { Registers returned if CONTEXT_DEBUG_REGISTERS is set.   }
1305  { Breakpoint Register 1  }
1306  { Breakpoint Register 2  }
1307  { Breakpoint Register 3  }
1308  { Breakpoint Register 4  }
1309  { Breakpoint Register 5  }
1310  { Breakpoint Register 6  }
1311  { Debug Status Register  }
1312  { Debug Control Register  }
1313
1314  type
1315
1316     CONTEXT = record
1317          Fpr0 : double;
1318          Fpr1 : double;
1319          Fpr2 : double;
1320          Fpr3 : double;
1321          Fpr4 : double;
1322          Fpr5 : double;
1323          Fpr6 : double;
1324          Fpr7 : double;
1325          Fpr8 : double;
1326          Fpr9 : double;
1327          Fpr10 : double;
1328          Fpr11 : double;
1329          Fpr12 : double;
1330          Fpr13 : double;
1331          Fpr14 : double;
1332          Fpr15 : double;
1333          Fpr16 : double;
1334          Fpr17 : double;
1335          Fpr18 : double;
1336          Fpr19 : double;
1337          Fpr20 : double;
1338          Fpr21 : double;
1339          Fpr22 : double;
1340          Fpr23 : double;
1341          Fpr24 : double;
1342          Fpr25 : double;
1343          Fpr26 : double;
1344          Fpr27 : double;
1345          Fpr28 : double;
1346          Fpr29 : double;
1347          Fpr30 : double;
1348          Fpr31 : double;
1349          Fpscr : double;
1350          Gpr0 : DWORD;
1351          Gpr1 : DWORD;
1352          Gpr2 : DWORD;
1353          Gpr3 : DWORD;
1354          Gpr4 : DWORD;
1355          Gpr5 : DWORD;
1356          Gpr6 : DWORD;
1357          Gpr7 : DWORD;
1358          Gpr8 : DWORD;
1359          Gpr9 : DWORD;
1360          Gpr10 : DWORD;
1361          Gpr11 : DWORD;
1362          Gpr12 : DWORD;
1363          Gpr13 : DWORD;
1364          Gpr14 : DWORD;
1365          Gpr15 : DWORD;
1366          Gpr16 : DWORD;
1367          Gpr17 : DWORD;
1368          Gpr18 : DWORD;
1369          Gpr19 : DWORD;
1370          Gpr20 : DWORD;
1371          Gpr21 : DWORD;
1372          Gpr22 : DWORD;
1373          Gpr23 : DWORD;
1374          Gpr24 : DWORD;
1375          Gpr25 : DWORD;
1376          Gpr26 : DWORD;
1377          Gpr27 : DWORD;
1378          Gpr28 : DWORD;
1379          Gpr29 : DWORD;
1380          Gpr30 : DWORD;
1381          Gpr31 : DWORD;
1382          Cr : DWORD;
1383          Xer : DWORD;
1384          Msr : DWORD;
1385          Iar : DWORD;
1386          Lr : DWORD;
1387          Ctr : DWORD;
1388          ContextFlags : DWORD;
1389          Fill : array[0..2] of DWORD;
1390          Dr0 : DWORD;
1391          Dr1 : DWORD;
1392          Dr2 : DWORD;
1393          Dr3 : DWORD;
1394          Dr4 : DWORD;
1395          Dr5 : DWORD;
1396          Dr6 : DWORD;
1397          Dr7 : DWORD;
1398       end;
1399     _STACK_FRAME_HEADER = record  // GPR 1 points here
1400          BackChain : DWORD;       // Addr of previous frame
1401          Reserved1 : DWORD;       // Reserved
1402
1403          Parameter0 : DWORD;     // First 8 parameter words are
1404          Parameter1 : DWORD;     //   always present
1405          Parameter2 : DWORD;
1406          Parameter3 : DWORD;
1407          Parameter4 : DWORD;
1408          Parameter5 : DWORD;
1409          Parameter6 : DWORD;
1410          Parameter7 : DWORD;
1411       end;
1412
1413     PSTACK_FRAME_HEADER=^STACK_FRAME_HEADER;
1414 {$endif _PPC_}                    //~winnt
1415
1416 {$ifdef _MPPC_} //+winnt all block
1417  type
1418     CONTEXT = record
1419          Fpr0 : double;
1420          Fpr1 : double;
1421          Fpr2 : double;
1422          Fpr3 : double;
1423          Fpr4 : double;
1424          Fpr5 : double;
1425          Fpr6 : double;
1426          Fpr7 : double;
1427          Fpr8 : double;
1428          Fpr9 : double;
1429          Fpr10 : double;
1430          Fpr11 : double;
1431          Fpr12 : double;
1432          Fpr13 : double;
1433          Fpr14 : double;
1434          Fpr15 : double;
1435          Fpr16 : double;
1436          Fpr17 : double;
1437          Fpr18 : double;
1438          Fpr19 : double;
1439          Fpr20 : double;
1440          Fpr21 : double;
1441          Fpr22 : double;
1442          Fpr23 : double;
1443          Fpr24 : double;
1444          Fpr25 : double;
1445          Fpr26 : double;
1446          Fpr27 : double;
1447          Fpr28 : double;
1448          Fpr29 : double;
1449          Fpr30 : double;
1450          Fpr31 : double;
1451          Fpscr : double;
1452          Gpr0 : DWORD;
1453          Gpr1 : DWORD;
1454          Gpr2 : DWORD;
1455          Gpr3 : DWORD;
1456          Gpr4 : DWORD;
1457          Gpr5 : DWORD;
1458          Gpr6 : DWORD;
1459          Gpr7 : DWORD;
1460          Gpr8 : DWORD;
1461          Gpr9 : DWORD;
1462          Gpr10 : DWORD;
1463          Gpr11 : DWORD;
1464          Gpr12 : DWORD;
1465          Gpr13 : DWORD;
1466          Gpr14 : DWORD;
1467          Gpr15 : DWORD;
1468          Gpr16 : DWORD;
1469          Gpr17 : DWORD;
1470          Gpr18 : DWORD;
1471          Gpr19 : DWORD;
1472          Gpr20 : DWORD;
1473          Gpr21 : DWORD;
1474          Gpr22 : DWORD;
1475          Gpr23 : DWORD;
1476          Gpr24 : DWORD;
1477          Gpr25 : DWORD;
1478          Gpr26 : DWORD;
1479          Gpr27 : DWORD;
1480          Gpr28 : DWORD;
1481          Gpr29 : DWORD;
1482          Gpr30 : DWORD;
1483          Gpr31 : DWORD;
1484          Cr : DWORD;
1485          Xer : DWORD;
1486          Msr : DWORD;
1487          Iar : DWORD;
1488          Lr : DWORD;
1489          Ctr : DWORD;
1490          ContextFlags : DWORD;
1491          Fill : array[0..2] of DWORD;
1492          Dr0 : DWORD;
1493          Dr1 : DWORD;
1494          Dr2 : DWORD;
1495          Dr3 : DWORD;
1496          Dr4 : DWORD;
1497          Dr5 : DWORD;
1498          Dr6 : DWORD;
1499          Dr7 : DWORD;
1500       end;
1501     _STACK_FRAME_HEADER = record  // GPR 1 points here
1502          BackChain  : DWORD;      // Addr of previous frame
1503          GlueSaved1 : DWORD;      // Used by glue code
1504          GlueSaved2 : DWORD;
1505          Reserved1  : DWORD;
1506          Spare1     : DWORD;
1507          Spare2     : DWORD;
1508
1509          Parameter0 : DWORD;     // First 8 parameter words are
1510          Parameter1 : DWORD;     //   always present
1511          Parameter2 : DWORD;
1512          Parameter3 : DWORD;
1513          Parameter4 : DWORD;
1514          Parameter5 : DWORD;
1515          Parameter6 : DWORD;
1516          Parameter7 : DWORD;
1517       end;
1518
1519     PSTACK_FRAME_HEADER=^STACK_FRAME_HEADER;
1520
1521 {$endif _MPPC_} //+winnt
1522
1523 {$ifdef _IA64_} //+winnt all block
1524  type
1525     CONTEXT = record
1526
1527          ContextFlags : DWORD;
1528          Fill1 : array[0..2] of DWORD;
1529          DbI0 : ULONGLONG;              // Instruction debug registers
1530          DbI1 : ULONGLONG;
1531          DbI2 : ULONGLONG;
1532          DbI3 : ULONGLONG;
1533          DbI4 : ULONGLONG;
1534          DbI5 : ULONGLONG;
1535          DbI6 : ULONGLONG;
1536          DbI7 : ULONGLONG;
1537
1538          DbD0 : ULONGLONG;              // Data debug registers
1539          DbD1 : ULONGLONG;
1540          DbD2 : ULONGLONG;
1541          DbD3 : ULONGLONG;
1542          DbD4 : ULONGLONG;
1543          DbD5 : ULONGLONG;
1544          DbD6 : ULONGLONG;
1545          DbD7 : ULONGLONG;
1546
1547          FltS0 : FLOAT128;             // Lower floating point (f2-f5) - saved (preserved)
1548          FltS1 : FLOAT128;
1549          FltS2 : FLOAT128;
1550          FltS3 : FLOAT128;
1551          FltT0 : FLOAT128;             // Lower floating point (f6-f15) - temporary (volatile)
1552          FltT1 : FLOAT128;
1553          FltT2 : FLOAT128;
1554          FltT3 : FLOAT128;
1555          FltT4 : FLOAT128;
1556          FltT5 : FLOAT128;
1557          FltT6 : FLOAT128;
1558          FltT7 : FLOAT128;
1559          FltT8 : FLOAT128;
1560          FltT9 : FLOAT128;
1561          FltS4 : FLOAT128;             // Higher floating point (f16-f31) - saved (preserved)
1562          FltS5 : FLOAT128;
1563          FltS6 : FLOAT128;
1564          FltS7 : FLOAT128;
1565          FltS8 : FLOAT128;
1566          FltS9 : FLOAT128;
1567          FltS10 : FLOAT128;
1568          FltS11 : FLOAT128;
1569          FltS12 : FLOAT128;
1570          FltS13 : FLOAT128;
1571          FltS14 : FLOAT128;
1572          FltS15 : FLOAT128;
1573          FltS16 : FLOAT128;
1574          FltS17 : FLOAT128;
1575          FltS18 : FLOAT128;
1576          FltS19 : FLOAT128;
1577
1578          FltF32 : FLOAT128;           // Higher floating point (f32-f127) - temporary (volatile)
1579          FltF33 : FLOAT128;
1580          FltF34 : FLOAT128;
1581          FltF35 : FLOAT128;
1582          FltF36 : FLOAT128;
1583          FltF37 : FLOAT128;
1584          FltF38 : FLOAT128;
1585          FltF39 : FLOAT128;
1586
1587          FltF40 : FLOAT128;
1588          FltF41 : FLOAT128;
1589          FltF42 : FLOAT128;
1590          FltF43 : FLOAT128;
1591          FltF44 : FLOAT128;
1592          FltF45 : FLOAT128;
1593          FltF46 : FLOAT128;
1594          FltF47 : FLOAT128;
1595          FltF48 : FLOAT128;
1596          FltF49 : FLOAT128;
1597
1598          FltF50 : FLOAT128;
1599          FltF51 : FLOAT128;
1600          FltF52 : FLOAT128;
1601          FltF53 : FLOAT128;
1602          FltF54 : FLOAT128;
1603          FltF55 : FLOAT128;
1604          FltF56 : FLOAT128;
1605          FltF57 : FLOAT128;
1606          FltF58 : FLOAT128;
1607          FltF59 : FLOAT128;
1608
1609          FltF60 : FLOAT128;
1610          FltF61 : FLOAT128;
1611          FltF62 : FLOAT128;
1612          FltF63 : FLOAT128;
1613          FltF64 : FLOAT128;
1614          FltF65 : FLOAT128;
1615          FltF66 : FLOAT128;
1616          FltF67 : FLOAT128;
1617          FltF68 : FLOAT128;
1618          FltF69 : FLOAT128;
1619
1620          FltF70 : FLOAT128;
1621          FltF71 : FLOAT128;
1622          FltF72 : FLOAT128;
1623          FltF73 : FLOAT128;
1624          FltF74 : FLOAT128;
1625          FltF75 : FLOAT128;
1626          FltF76 : FLOAT128;
1627          FltF77 : FLOAT128;
1628          FltF78 : FLOAT128;
1629          FltF79 : FLOAT128;
1630
1631          FltF80 : FLOAT128;
1632          FltF81 : FLOAT128;
1633          FltF82 : FLOAT128;
1634          FltF83 : FLOAT128;
1635          FltF84 : FLOAT128;
1636          FltF85 : FLOAT128;
1637          FltF86 : FLOAT128;
1638          FltF87 : FLOAT128;
1639          FltF88 : FLOAT128;
1640          FltF89 : FLOAT128;
1641
1642          FltF90 : FLOAT128;
1643          FltF91 : FLOAT128;
1644          FltF92 : FLOAT128;
1645          FltF93 : FLOAT128;
1646          FltF94 : FLOAT128;
1647          FltF95 : FLOAT128;
1648          FltF96 : FLOAT128;
1649          FltF97 : FLOAT128;
1650          FltF98 : FLOAT128;
1651          FltF99 : FLOAT128;
1652
1653          FltF100 : FLOAT128;
1654          FltF101 : FLOAT128;
1655          FltF102 : FLOAT128;
1656          FltF103 : FLOAT128;
1657          FltF104 : FLOAT128;
1658          FltF105 : FLOAT128;
1659          FltF106 : FLOAT128;
1660          FltF107 : FLOAT128;
1661          FltF108 : FLOAT128;
1662          FltF109 : FLOAT128;
1663
1664          FltF110 : FLOAT128;
1665          FltF111 : FLOAT128;
1666          FltF112 : FLOAT128;
1667          FltF113 : FLOAT128;
1668          FltF114 : FLOAT128;
1669          FltF115 : FLOAT128;
1670          FltF116 : FLOAT128;
1671          FltF117 : FLOAT128;
1672          FltF118 : FLOAT128;
1673          FltF119 : FLOAT128;
1674
1675          FltF120 : FLOAT128;
1676          FltF121 : FLOAT128;
1677          FltF122 : FLOAT128;
1678          FltF123 : FLOAT128;
1679          FltF124 : FLOAT128;
1680          FltF125 : FLOAT128;
1681          FltF126 : FLOAT128;
1682          FltF127 : FLOAT128;
1683
1684          StFPSR : ULONGLONG;          // FP status
1685          StFSR  : ULONGLONG;          // x86 FP status (a copy of AR28)
1686          StFIR  : ULONGLONG;          // x86 FP status (a copy of AR29)
1687          StFDR  : ULONGLONG;          // x86 FP status (a copy of AR30)
1688
1689          IntGp  : ULONGLONG;          // global pointer (r1) - temporary (volatile)
1690          IntT0  : ULONGLONG;          // integer registers (r2-r3) - temporary (volatile)
1691          IntT1  : ULONGLONG;
1692          IntS0  : ULONGLONG;          // integer registers (r4-r7) - saved (preserved)
1693          IntS1  : ULONGLONG;
1694          IntS2  : ULONGLONG;
1695          IntS3  : ULONGLONG;
1696          IntV0  : ULONGLONG;          // return value (r8) - temporary (volatile)
1697          IntT2  : ULONGLONG;          // integer registers (r9-r11) - temporary (volatile)
1698          IntT3  : ULONGLONG;
1699          IntT4  : ULONGLONG;
1700          IntSP  : ULONGLONG;          // stack pointer (r12) - special
1701          IntTeb : ULONGLONG;          // teb (r13) - special
1702          IntT5  : ULONGLONG;          // integer registers (r14-r31) - temporary (volatile)
1703          IntT6  : ULONGLONG;
1704          IntT7  : ULONGLONG;
1705          IntT8  : ULONGLONG;
1706          IntT9  : ULONGLONG;
1707          IntT10 : ULONGLONG;
1708          IntT11 : ULONGLONG;
1709          IntT12 : ULONGLONG;
1710          IntT13 : ULONGLONG;
1711          IntT14 : ULONGLONG;
1712          IntT15 : ULONGLONG;
1713          IntT16 : ULONGLONG;
1714          IntT17 : ULONGLONG;
1715          IntT18 : ULONGLONG;
1716          IntT19 : ULONGLONG;
1717          IntT20 : ULONGLONG;
1718          IntT21 : ULONGLONG;
1719          IntT22 : ULONGLONG;
1720
1721          IntNats : ULONGLONG;         // Nat bits for general registers
1722                                       // r1-r31 in bit positions 1 to 31.
1723          Preds   : ULONGLONG;         // predicates - saved (preserved)
1724          BrRp    : ULONGLONG;         // return pointer (b0) - saved (preserved)
1725          BrS0    : ULONGLONG;         // branch registers (b1-b5) - saved (preserved)
1726          BrS1    : ULONGLONG;
1727          BrS2    : ULONGLONG;
1728          BrS3    : ULONGLONG;
1729          BrS4    : ULONGLONG;
1730
1731          BrT0    : ULONGLONG;         // branch registers (b6-b7) - temporary (volatile)
1732          BrT1    : ULONGLONG;
1733          // iA32 related Interger registers
1734          SegCSD  : ULONGLONG;         // iA32 CSDescriptor (Ar25)
1735          SegSSD  : ULONGLONG;         // iA32 SSDescriptor (Ar26)
1736
1737          // Other application registers
1738          ApUNAT  : ULONGLONG;         // User Nat collection register - saved (preserved)
1739          ApLC    : ULONGLONG;         // Loop counter register - saved (preserved)
1740          ApEC    : ULONGLONG;         // Epilog counter register - saved (preserved)
1741          ApCCV   : ULONGLONG;         // CMPXCHG value register - temporary (volatile)
1742          ApDCR   : ULONGLONG;         // Default control register (TBD)
1743
1744          // Register stack info
1745          RsPFS   : ULONGLONG;         // Previous function state - saved (preserved)
1746          RsBSP   : ULONGLONG;         // Backing store pointer - saved (preserved)
1747          RsBSPSTORE : ULONGLONG;      // BSP Store - saved (preserved)
1748          RsRSC   : ULONGLONG;         // RSE configuration - temporary (volatile)
1749          RsRNAT  : ULONGLONG;         // RSE Nat collection register - saved (preserved)
1750          // iA32 related control registers
1751          Eflag   : ULONGLONG;         // Eflag  copy of Ar24
1752          Cflag   : ULONGLONG;         // Cr0+Cr4 copy of Ar27
1753
1754          // Trap Status Information
1755          StIPSR  : ULONGLONG;         // Interruption Processor Status
1756          StIIP   : ULONGLONG;         // Interruption IP
1757          StIFS   : ULONGLONG;         // Interruption Function State
1758
1759       end;
1760
1761     FLOATING_SAVE_AREA = record
1762          ControlWord : DWORD;
1763          StatusWord : DWORD;
1764          TagWord : DWORD;
1765          ErrorOffset : DWORD;
1766          ErrorSelector : DWORD;
1767          DataOffset : DWORD;
1768          DataSelector : DWORD;
1769          RegisterArea : array[0..SIZE_OF_80387_REGISTERS-1] of BYTE;
1770          Cr0NpxState : DWORD;
1771       end;
1772     _FLOATING_SAVE_AREA = FLOATING_SAVE_AREA;
1773     TFLOATINGSAVEAREA = FLOATING_SAVE_AREA;
1774     PFLOATING_SAVE_AREA = ^FLOATING_SAVE_AREA;
1775
1776     CONTEXT86 = record
1777          ContextFlags : DWORD;
1778          Dr0 : DWORD;
1779          Dr1 : DWORD;
1780          Dr2 : DWORD;
1781          Dr3 : DWORD;
1782          Dr6 : DWORD;
1783          Dr7 : DWORD;
1784          FloatSave : FLOATING_SAVE_AREA;
1785          SegGs : DWORD;
1786          SegFs : DWORD;
1787          SegEs : DWORD;
1788          SegDs : DWORD;
1789          Edi : DWORD;
1790          Esi : DWORD;
1791          Ebx : DWORD;
1792          Edx : DWORD;
1793          Ecx : DWORD;
1794          Eax : DWORD;
1795          Ebp : DWORD;
1796          Eip : DWORD;
1797          SegCs : DWORD;
1798          EFlags : DWORD;
1799          Esp : DWORD;
1800          SegSs : DWORD;
1801       end;
1802
1803     LDT_ENTRY = record
1804          LimitLow : WORD;
1805          BaseLow : WORD;
1806          HighWord : record
1807              case longint of
1808                 0 : ( Bytes : record
1809                      BaseMid : BYTE;
1810                      Flags1 : BYTE;
1811                      Flags2 : BYTE;
1812                      BaseHi : BYTE;
1813                   end );
1814                 1 : ( Bits : record
1815                      flag0 : longint;
1816                   end );
1817              end;
1818       end;
1819     LPLDT_ENTRY = ^LDT_ENTRY;
1820     PLDT_ENTRY = ^LDT_ENTRY;
1821     _LDT_ENTRY = LDT_ENTRY;
1822     TLDTENTRY = LDT_ENTRY;
1823     PLDTENTRY = ^LDT_ENTRY;
1824
1825     PLABEL_DESCRIPTOR = record
1826          EntryPoint : ULONGLONG;
1827          GlobalPointer : ULONGLONG;
1828       end;
1829     _PLABEL_DESCRIPTOR = PLABEL_DESCRIPTOR;
1830     PPLABEL_DESCRIPTOR = ^PLABEL_DESCRIPTOR;
1831
1832
1833 {$endif _IA64_} //+winnt
1834
1835 {$ifdef SHx} //+winnt all block added
1836     //These are the debug or break registers on the SH3
1837     DEBUG_REGISTERS = RECORD
1838          BarA  : ULONG;
1839          BasrA : UCHAR;
1840          BamrA : UCHAR;
1841          BbrA  : USHORT;
1842          BarB  : ULONG;
1843          BasrB : UCHAR;
1844          BamrB : UCHAR;
1845          BbrB  : USHORT;
1846          BdrB  : ULONG;
1847          BdmrB : ULONG;
1848          Brcr  : USHORT;
1849          Align : USHORT;
1850       end;
1851     _DEBUG_REGISTERS=DEBUG_REZGISTERS;
1852     PDEBUG_REGISTERS=^DEBUG_REZGISTERS;
1853
1854     CONTEXT = record
1855          ContextFlags : ULONG;
1856          PR   : ULONG;
1857          MACH : ULONG;
1858          MACL : ULONG;
1859          GBR  : ULONG;
1860          R0   : ULONG;
1861          R1   : ULONG;
1862          R2   : ULONG;
1863          R3   : ULONG;
1864          R4   : ULONG;
1865          R5   : ULONG;
1866          R6   : ULONG;
1867          R7   : ULONG;
1868          R8   : ULONG;
1869          R9   : ULONG;
1870          R10  : ULONG;
1871          R11  : ULONG;
1872          R12  : ULONG;
1873          R13  : ULONG;
1874          R14  : ULONG;
1875          R15  : ULONG;
1876
1877    // N.B. The registers r15 and ra are defined in the integer section,
1878    //   but are considered part of the control context rather than part of
1879    //   the integer context.
1880    //
1881
1882          Fir  : ULONG;
1883          Psr  : ULONG;
1884
1885          {$ifndef SH3e}
1886          {$ifndef SH4}
1887          OldStuff : Array[0..1] of ULONG;
1888          DebugRegisters : DEBUG_REGISTERS;
1889          DSR  : ULONG;
1890          MOD_ : ULONG; // MOD replaced by MOD_
1891          RS   : ULONG;
1892          RE   : ULONG;
1893          A0   : ULONG;
1894          A1   : ULONG;
1895          M0   : ULONG;
1896          M1   : ULONG;
1897          X0   : ULONG;
1898          X1   : ULONG;
1899          Y0   : ULONG;
1900          Y1   : ULONG;
1901         //  The guard bit registers are 8 bits long, but can only be saved and
1902         //  restored using 16 or 32 bit moves.  Note, the contents of the guard
1903         //  bit register are in the upper 8 bits.
1904          A0G : USHORT;
1905          A1G : USHORT;
1906          {$else}
1907          Fpscr  : ULONG;
1908          Fpul   : ULONG;
1909          FRegs  : Array[0..15] of ULONG;
1910          xFRegs : Array[0..15] of ULONG;
1911          {$endif SH4}
1912          {$else}
1913          Fpscr  : ULONG;
1914          Fpul   : ULONG;
1915          FRegs  : Array[0..15] of ULONG;
1916          {$endif SH3e}
1917       end;
1918
1919 {$endif SHx} //+winnt
1920
1921 {$ifdef CPUARM} //+winnt all block added
1922     CONTEXT = record
1923          ContextFlags : ULONG;
1924          R0  : ULONG;
1925          R1  : ULONG;
1926          R2  : ULONG;
1927          R3  : ULONG;
1928          R4  : ULONG;
1929          R5  : ULONG;
1930          R6  : ULONG;
1931          R7  : ULONG;
1932          R8  : ULONG;
1933          R9  : ULONG;
1934          R10 : ULONG;
1935          R11 : ULONG;
1936          R12 : ULONG;
1937
1938          SP  : ULONG;
1939          Lr  : ULONG;
1940          Pc  : ULONG;
1941          Psr : ULONG;
1942          Fpscr : ULONG;
1943          FpExc : ULONG;
1944          S       : Array [0..NUM_VFP_REGS] of ULONG;
1945          FpExtra : Array [0..NUM_EXTRA_CONTROL_REGS-1] of ULONG;
1946       end;
1947 {$endif CPUARM} //+winnt
1948
1949     LPCONTEXT = ^CONTEXT;
1950     _CONTEXT = CONTEXT;
1951     TCONTEXT = CONTEXT;
1952     PCONTEXT = ^CONTEXT;         //winnt
1953
1954  type
1955
1956     LIST_ENTRY = record          //winnt
1957          Flink : ^_LIST_ENTRY;
1958          Blink : ^_LIST_ENTRY;
1959       end;
1960     _LIST_ENTRY = LIST_ENTRY;
1961     TLISTENTRY = LIST_ENTRY;
1962     PLISTENTRY = ^LIST_ENTRY;
1963
1964     CRITICAL_SECTION_DEBUG = record
1965          _Type : WORD;
1966          CreatorBackTraceIndex : WORD;
1967          CriticalSection : ^_CRITICAL_SECTION;
1968          ProcessLocksList : LIST_ENTRY;
1969          EntryCount : DWORD;
1970          ContentionCount : DWORD;
1971          Depth : DWORD;
1972          OwnerBackTrace : array[0..4] of PVOID;
1973       end;
1974     LPCRITICAL_SECTION_DEBUG = ^CRITICAL_SECTION_DEBUG;
1975     PCRITICAL_SECTION_DEBUG = ^CRITICAL_SECTION_DEBUG;
1976     _CRITICAL_SECTION_DEBUG = CRITICAL_SECTION_DEBUG;
1977     TCRITICALSECTIONDEBUG = CRITICAL_SECTION_DEBUG;
1978     PCRITICALSECTIONDEBUG = ^CRITICAL_SECTION_DEBUG;
1979
1980     CRITICAL_SECTION = TRTLCriticalSection;
1981     _CRITICAL_SECTION = TRTLCriticalSection;
1982     TCRITICAL_SECTION = TRTLCriticalSection;
1983     PCRITICAL_SECTION = PRTLCriticalSection;
1984     LPCRITICAL_SECTION = PRTLCriticalSection;
1985     TCRITICALSECTION = TRTLCriticalSection;
1986     PCRITICALSECTION = PRTLCriticalSection;
1987
1988  { SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;  }
1989
1990     SECURITY_QUALITY_OF_SERVICE = record
1991          Length : DWORD;
1992          ImpersonationLevel : SECURITY_IMPERSONATION_LEVEL;
1993          ContextTrackingMode : WINBOOL;
1994          EffectiveOnly : BOOLEAN;
1995       end;
1996     PSECURITY_QUALITY_OF_SERVICE = ^SECURITY_QUALITY_OF_SERVICE;
1997     _SECURITY_QUALITY_OF_SERVICE = SECURITY_QUALITY_OF_SERVICE;
1998     TSECURITYQUALITYOFSERVICE = SECURITY_QUALITY_OF_SERVICE;
1999     PSECURITYQUALITYOFSERVICE = ^SECURITY_QUALITY_OF_SERVICE;
2000
2001     CONVCONTEXT = record
2002          cb : UINT;
2003          wFlags : UINT;
2004          wCountryID : UINT;
2005          iCodePage : longint;
2006          dwLangID : DWORD;
2007          dwSecurity : DWORD;
2008          qos : SECURITY_QUALITY_OF_SERVICE;
2009       end;
2010     tagCONVCONTEXT = CONVCONTEXT;
2011     TCONVCONTEXT = CONVCONTEXT;
2012     PCONVCONTEXT = ^CONVCONTEXT;
2013
2014     CONVINFO = record
2015          cb : DWORD;
2016          hUser : DWORD;
2017          hConvPartner : HCONV;
2018          hszSvcPartner : HSZ;
2019          hszServiceReq : HSZ;
2020          hszTopic : HSZ;
2021          hszItem : HSZ;
2022          wFmt : UINT;
2023          wType : UINT;
2024          wStatus : UINT;
2025          wConvst : UINT;
2026          wLastError : UINT;
2027          hConvList : HCONVLIST;
2028          ConvCtxt : CONVCONTEXT;
2029          _hwnd : HWND;
2030          hwndPartner : HWND;
2031       end;
2032     tagCONVINFO = CONVINFO;
2033     TCONVINFO = CONVINFO;
2034     PCONVINFO = ^CONVINFO;
2035
2036     COPYDATASTRUCT = record
2037          dwData : DWORD;
2038          cbData : DWORD;
2039          lpData : PVOID;
2040       end;
2041     tagCOPYDATASTRUCT = COPYDATASTRUCT;
2042     TCOPYDATASTRUCT = COPYDATASTRUCT;
2043     PCOPYDATASTRUCT = ^COPYDATASTRUCT;
2044
2045     CPINFO = record
2046          MaxCharSize : UINT;
2047          DefaultChar : array[0..(MAX_DEFAULTCHAR)-1] of BYTE;
2048          LeadByte : array[0..(MAX_LEADBYTES)-1] of BYTE;
2049       end;
2050     LPCPINFO = ^CPINFO;
2051     _cpinfo = CPINFO;
2052     Tcpinfo = CPINFO;
2053     Pcpinfo = ^CPINFO;
2054
2055     CPLINFO = record
2056          idIcon : longint;
2057          idName : longint;
2058          idInfo : longint;
2059          lData : LONG;
2060       end;
2061     tagCPLINFO = CPLINFO;
2062     TCPLINFO = CPLINFO;
2063     PCPLINFO = ^CPLINFO;
2064
2065     CREATE_PROCESS_DEBUG_INFO = record
2066          hFile : HANDLE;
2067          hProcess : HANDLE;
2068          hThread : HANDLE;
2069          lpBaseOfImage : LPVOID;
2070          dwDebugInfoFileOffset : DWORD;
2071          nDebugInfoSize : DWORD;
2072          lpThreadLocalBase : LPVOID;
2073          lpStartAddress : LPTHREAD_START_ROUTINE;
2074          lpImageName : LPVOID;
2075          fUnicode : WORD;
2076       end;
2077     _CREATE_PROCESS_DEBUG_INFO = CREATE_PROCESS_DEBUG_INFO;
2078     TCREATEPROCESSDEBUGINFO = CREATE_PROCESS_DEBUG_INFO;
2079     PCREATEPROCESSDEBUGINFO = ^CREATE_PROCESS_DEBUG_INFO;
2080
2081     CREATE_THREAD_DEBUG_INFO = record
2082          hThread : HANDLE;
2083          lpThreadLocalBase : LPVOID;
2084          lpStartAddress : LPTHREAD_START_ROUTINE;
2085       end;
2086     _CREATE_THREAD_DEBUG_INFO = CREATE_THREAD_DEBUG_INFO;
2087     TCREATETHREADDEBUGINFO = CREATE_THREAD_DEBUG_INFO;
2088     PCREATETHREADDEBUGINFO = ^CREATE_THREAD_DEBUG_INFO;
2089  (*
2090   TODO: sockets
2091  typedef struct _SOCKET_ADDRESS {
2092    LPSOCKADDR lpSockaddr ;
2093    INT iSockaddrLength ;
2094  } SOCKET_ADDRESS,  PSOCKET_ADDRESS,  LPSOCKET_ADDRESS;
2095   }
2096  {
2097  typedef struct _CSADDR_INFO {
2098    SOCKET_ADDRESS  LocalAddr;
2099    SOCKET_ADDRESS  RemoteAddr;
2100    INT             iSocketType;
2101    INT             iProtocol;
2102  } CSADDR_INFO;
2103    *)
2104
2105     CURRENCYFMT = record
2106          NumDigits : UINT;
2107          LeadingZero : UINT;
2108          Grouping : UINT;
2109          lpDecimalSep : LPTSTR;
2110          lpThousandSep : LPTSTR;
2111          NegativeOrder : UINT;
2112          PositiveOrder : UINT;
2113          lpCurrencySymbol : LPTSTR;
2114       end;
2115     _currencyfmt = CURRENCYFMT;
2116     Tcurrencyfmt = CURRENCYFMT;
2117     Pcurrencyfmt = ^CURRENCYFMT;
2118
2119     CURSORSHAPE = record
2120          xHotSpot : longint;
2121          yHotSpot : longint;
2122          cx : longint;
2123          cy : longint;
2124          cbWidth : longint;
2125          Planes : BYTE;
2126          BitsPixel : BYTE;
2127       end;
2128     LPCURSORSHAPE = ^CURSORSHAPE;
2129     tagCURSORSHAPE = CURSORSHAPE;
2130     TCURSORSHAPE = CURSORSHAPE;
2131     PCURSORSHAPE = ^CURSORSHAPE;
2132
2133     CWPRETSTRUCT = record
2134          lResult : LRESULT;
2135          lParam : LPARAM;
2136          wParam : WPARAM;
2137          message : DWORD;
2138          hwnd : HWND;
2139       end;
2140     tagCWPRETSTRUCT = CWPRETSTRUCT;
2141     TCWPRETSTRUCT = CWPRETSTRUCT;
2142     PCWPRETSTRUCT = ^CWPRETSTRUCT;
2143
2144     CWPSTRUCT = record
2145          lParam : LPARAM;
2146          wParam : WPARAM;
2147          message : UINT;
2148          hwnd : HWND;
2149       end;
2150     tagCWPSTRUCT = CWPSTRUCT;
2151     TCWPSTRUCT = CWPSTRUCT;
2152     PCWPSTRUCT = ^CWPSTRUCT;
2153
2154     DATATYPES_INFO_1 = record
2155          pName : LPTSTR;
2156       end;
2157     _DATATYPES_INFO_1 = DATATYPES_INFO_1;
2158     TDATATYPESINFO1 = DATATYPES_INFO_1;
2159     PDATATYPESINFO1 = ^DATATYPES_INFO_1;
2160
2161     DDEACK = record
2162          flag0 : word;
2163       end;
2164     TDDEACK = DDEACK;
2165     PDDEACK = ^DDEACK;
2166  const
2167     bm_DDEACK_bAppReturnCode = $FF;
2168     bp_DDEACK_bAppReturnCode = 0;
2169     bm_DDEACK_reserved = $3F00;
2170     bp_DDEACK_reserved = 8;
2171     bm_DDEACK_fBusy = $4000;
2172     bp_DDEACK_fBusy = 14;
2173     bm_DDEACK_fAck = $8000;
2174     bp_DDEACK_fAck = 15;
2175  function bAppReturnCode(var a : DDEACK) : word;
2176  procedure set_bAppReturnCode(var a : DDEACK; __bAppReturnCode : word);
2177  function reserved(var a : DDEACK) : word;
2178  procedure set_reserved(var a : DDEACK; __reserved : word);
2179  function fBusy(var a : DDEACK) : word;
2180  procedure set_fBusy(var a : DDEACK; __fBusy : word);
2181  function fAck(var a : DDEACK) : word;
2182  procedure set_fAck(var a : DDEACK; __fAck : word);
2183
2184  type
2185
2186     DDEADVISE = record
2187          flag0 : word;
2188          cfFormat : integer;
2189       end;
2190     TDDEADVISE = DDEADVISE;
2191     PDDEADVISE = ^DDEADVISE;
2192  const
2193     bm_DDEADVISE_reserved = $3FFF;
2194     bp_DDEADVISE_reserved = 0;
2195     bm_DDEADVISE_fDeferUpd = $4000;
2196     bp_DDEADVISE_fDeferUpd = 14;
2197     bm_DDEADVISE_fAckReq = $8000;
2198     bp_DDEADVISE_fAckReq = 15;
2199  function reserved(var a : DDEADVISE) : word;
2200  procedure set_reserved(var a : DDEADVISE; __reserved : word);
2201  function fDeferUpd(var a : DDEADVISE) : word;
2202  procedure set_fDeferUpd(var a : DDEADVISE; __fDeferUpd : word);
2203  function fAckReq(var a : DDEADVISE) : word;
2204  procedure set_fAckReq(var a : DDEADVISE; __fAckReq : word);
2205
2206  type
2207
2208     DDEDATA = record
2209          flag0 : word;
2210          cfFormat : integer;
2211          Value : array[0..0] of BYTE;
2212       end;
2213     PDDEDATA = ^DDEDATA;
2214  const
2215     bm_DDEDATA_unused = $FFF;
2216     bp_DDEDATA_unused = 0;
2217     bm_DDEDATA_fResponse = $1000;
2218     bp_DDEDATA_fResponse = 12;
2219     bm_DDEDATA_fRelease = $2000;
2220     bp_DDEDATA_fRelease = 13;
2221     bm_DDEDATA_reserved = $4000;
2222     bp_DDEDATA_reserved = 14;
2223     bm_DDEDATA_fAckReq = $8000;
2224     bp_DDEDATA_fAckReq = 15;
2225  function unused(var a : DDEDATA) : word;
2226  procedure set_unused(var a : DDEDATA; __unused : word);
2227  function fResponse(var a : DDEDATA) : word;
2228  procedure set_fResponse(var a : DDEDATA; __fResponse : word);
2229  function fRelease(var a : DDEDATA) : word;
2230  procedure set_fRelease(var a : DDEDATA; __fRelease : word);
2231  function reserved(var a : DDEDATA) : word;
2232  procedure set_reserved(var a : DDEDATA; __reserved : word);
2233  function fAckReq(var a : DDEDATA) : word;
2234  procedure set_fAckReq(var a : DDEDATA; __fAckReq : word);
2235
2236  type
2237
2238     DDELN = record
2239          flag0 : word;
2240          cfFormat : integer;
2241       end;
2242     TDDELN = DDELN;
2243     PDDELN = ^DDELN;
2244  const
2245     bm_DDELN_unused = $1FFF;
2246     bp_DDELN_unused = 0;
2247     bm_DDELN_fRelease = $2000;
2248     bp_DDELN_fRelease = 13;
2249     bm_DDELN_fDeferUpd = $4000;
2250     bp_DDELN_fDeferUpd = 14;
2251     bm_DDELN_fAckReq = $8000;
2252     bp_DDELN_fAckReq = 15;
2253  function unused(var a : DDELN) : word;
2254  procedure set_unused(var a : DDELN; __unused : word);
2255  function fRelease(var a : DDELN) : word;
2256  procedure set_fRelease(var a : DDELN; __fRelease : word);
2257  function fDeferUpd(var a : DDELN) : word;
2258  procedure set_fDeferUpd(var a : DDELN; __fDeferUpd : word);
2259  function fAckReq(var a : DDELN) : word;
2260  procedure set_fAckReq(var a : DDELN; __fAckReq : word);
2261
2262  type
2263
2264     DDEML_MSG_HOOK_DATA = record
2265          uiLo : UINT;
2266          uiHi : UINT;
2267          cbData : DWORD;
2268          Data : array[0..7] of DWORD;
2269       end;
2270     tagDDEML_MSG_HOOK_DATA = DDEML_MSG_HOOK_DATA;
2271     TDDEMLMSGHOOKDATA = DDEML_MSG_HOOK_DATA;
2272     PDDEMLMSGHOOKDATA = ^DDEML_MSG_HOOK_DATA;
2273
2274     DDEPOKE = record
2275          flag0 : word;
2276          cfFormat : integer;
2277          Value : array[0..0] of BYTE;
2278       end;
2279     TDDEPOKE = DDEPOKE;
2280     PDDEPOKE = ^DDEPOKE;
2281  const
2282     bm_DDEPOKE_unused = $1FFF;
2283     bp_DDEPOKE_unused = 0;
2284     bm_DDEPOKE_fRelease = $2000;
2285     bp_DDEPOKE_fRelease = 13;
2286     bm_DDEPOKE_fReserved = $C000;
2287     bp_DDEPOKE_fReserved = 14;
2288  function unused(var a : DDEPOKE) : word;
2289  procedure set_unused(var a : DDEPOKE; __unused : word);
2290  function fRelease(var a : DDEPOKE) : word;
2291  procedure set_fRelease(var a : DDEPOKE; __fRelease : word);
2292  function fReserved(var a : DDEPOKE) : word;
2293  procedure set_fReserved(var a : DDEPOKE; __fReserved : word);
2294
2295  type
2296
2297     DDEUP = record
2298          flag0 : word;
2299          cfFormat : integer;
2300          rgb : array[0..0] of BYTE;
2301       end;
2302     TDDEUP = DDEUP;
2303     PDDEUP = ^DDEUP;
2304  const
2305     bm_DDEUP_unused = $FFF;
2306     bp_DDEUP_unused = 0;
2307     bm_DDEUP_fAck = $1000;
2308     bp_DDEUP_fAck = 12;
2309     bm_DDEUP_fRelease = $2000;
2310     bp_DDEUP_fRelease = 13;
2311     bm_DDEUP_fReserved = $4000;
2312     bp_DDEUP_fReserved = 14;
2313     bm_DDEUP_fAckReq = $8000;
2314     bp_DDEUP_fAckReq = 15;
2315  function unused(var a : DDEUP) : word;
2316  procedure set_unused(var a : DDEUP; __unused : word);
2317  function fAck(var a : DDEUP) : word;
2318  procedure set_fAck(var a : DDEUP; __fAck : word);
2319  function fRelease(var a : DDEUP) : word;
2320  procedure set_fRelease(var a : DDEUP; __fRelease : word);
2321  function fReserved(var a : DDEUP) : word;
2322  procedure set_fReserved(var a : DDEUP; __fReserved : word);
2323  function fAckReq(var a : DDEUP) : word;
2324  procedure set_fAckReq(var a : DDEUP; __fAckReq : word);
2325
2326  type
2327
2328     // definition of _exception struct - this struct is passed to the matherr
2329     // routine when a floating point exception is detected
2330     _EXCEPTION = record  //+stdlib
2331       type_  : Integer;  //identifier type replaced by Type_ for compilation
2332       Name   : PChar;    // name of function where error occurred
2333       arg1   : double;   // first argument to function
2334       arg2   : double;   // second argument (if any) to function
2335       retval : double;   // value to be returned by function
2336      end;
2337
2338     EXCEPTION_RECORD = record        //winnt
2339          ExceptionCode : DWORD;
2340          ExceptionFlags : DWORD;
2341          ExceptionRecord : ^_EXCEPTION_RECORD;
2342          ExceptionAddress : PVOID;
2343          NumberParameters : DWORD;
2344          ExceptionInformation : array[0..(EXCEPTION_MAXIMUM_PARAMETERS)-1] of Pointer; //~winnt, was DWORD, SDK:ULONG_PTR
2345       end;
2346     PEXCEPTION_RECORD = ^EXCEPTION_RECORD;
2347     _EXCEPTION_RECORD = EXCEPTION_RECORD;
2348     TEXCEPTIONRECORD = EXCEPTION_RECORD;
2349     PEXCEPTIONRECORD = ^EXCEPTION_RECORD;
2350
2351     EXCEPTION_DEBUG_INFO = record
2352          ExceptionRecord : EXCEPTION_RECORD;
2353          dwFirstChance : DWORD;
2354       end;
2355     PEXCEPTION_DEBUG_INFO = ^EXCEPTION_DEBUG_INFO;
2356     _EXCEPTION_DEBUG_INFO = EXCEPTION_DEBUG_INFO;
2357     TEXCEPTIONDEBUGINFO = EXCEPTION_DEBUG_INFO;
2358     PEXCEPTIONDEBUGINFO = ^EXCEPTION_DEBUG_INFO;
2359
2360     EXIT_PROCESS_DEBUG_INFO = record
2361          dwExitCode : DWORD;
2362       end;
2363     _EXIT_PROCESS_DEBUG_INFO = EXIT_PROCESS_DEBUG_INFO;
2364     TEXITPROCESSDEBUGINFO = EXIT_PROCESS_DEBUG_INFO;
2365     PEXITPROCESSDEBUGINFO = ^EXIT_PROCESS_DEBUG_INFO;
2366
2367
2368     EXIT_THREAD_DEBUG_INFO = record
2369          dwExitCode : DWORD;
2370       end;
2371     _EXIT_THREAD_DEBUG_INFO = EXIT_THREAD_DEBUG_INFO;
2372     TEXITTHREADDEBUGINFO = EXIT_THREAD_DEBUG_INFO;
2373     PEXITTHREADDEBUGINFO = ^EXIT_THREAD_DEBUG_INFO;
2374
2375     LOAD_DLL_DEBUG_INFO = record
2376          hFile : HANDLE;
2377          lpBaseOfDll : LPVOID;
2378          dwDebugInfoFileOffset : DWORD;
2379          nDebugInfoSize : DWORD;
2380          lpImageName : LPVOID;
2381          fUnicode : WORD;
2382       end;
2383     _LOAD_DLL_DEBUG_INFO = LOAD_DLL_DEBUG_INFO;
2384     TLOADDLLDEBUGINFO = LOAD_DLL_DEBUG_INFO;
2385     PLOADDLLDEBUGINFO = ^LOAD_DLL_DEBUG_INFO;
2386
2387     UNLOAD_DLL_DEBUG_INFO = record
2388          lpBaseOfDll : LPVOID;
2389       end;
2390     _UNLOAD_DLL_DEBUG_INFO = UNLOAD_DLL_DEBUG_INFO;
2391     TUNLOADDLLDEBUGINFO = UNLOAD_DLL_DEBUG_INFO;
2392     PUNLOADDLLDEBUGINFO = ^UNLOAD_DLL_DEBUG_INFO;
2393
2394     OUTPUT_DEBUG_STRING_INFO = record
2395          lpDebugStringData : LPSTR;
2396          fUnicode : WORD;
2397          nDebugStringLength : WORD;
2398       end;
2399     _OUTPUT_DEBUG_STRING_INFO = OUTPUT_DEBUG_STRING_INFO;
2400     TOUTPUTDEBUGSTRINGINFO = OUTPUT_DEBUG_STRING_INFO;
2401     POUTPUTDEBUGSTRINGINFO = ^OUTPUT_DEBUG_STRING_INFO;
2402
2403     RIP_INFO = record
2404          dwError : DWORD;
2405          dwType : DWORD;
2406       end;
2407     _RIP_INFO = RIP_INFO;
2408     TRIPINFO = RIP_INFO;
2409     PRIPINFO = ^RIP_INFO;
2410
2411     DEBUG_EVENT = record
2412          dwDebugEventCode : DWORD;
2413          dwProcessId : DWORD;
2414          dwThreadId : DWORD;
2415          u : record
2416              case longint of
2417                 0 : ( Exception : EXCEPTION_DEBUG_INFO );
2418                 1 : ( CreateThread : CREATE_THREAD_DEBUG_INFO );
2419                 2 : ( CreateProcessInfo : CREATE_PROCESS_DEBUG_INFO );
2420                 3 : ( ExitThread : EXIT_THREAD_DEBUG_INFO );
2421                 4 : ( ExitProcess : EXIT_PROCESS_DEBUG_INFO );
2422                 5 : ( LoadDll : LOAD_DLL_DEBUG_INFO );
2423                 6 : ( UnloadDll : UNLOAD_DLL_DEBUG_INFO );
2424                 7 : ( DebugString : OUTPUT_DEBUG_STRING_INFO );
2425                 8 : ( RipInfo : RIP_INFO );
2426              end;
2427       end;
2428     LPDEBUG_EVENT = ^DEBUG_EVENT;
2429     _DEBUG_EVENT = DEBUG_EVENT;
2430     TDEBUGEVENT = DEBUG_EVENT;
2431     PDEBUGEVENT = ^DEBUG_EVENT;
2432
2433     DEBUGHOOKINFO = record
2434          idThread : DWORD;
2435          idThreadInstaller : DWORD;
2436          lParam : LPARAM;
2437          wParam : WPARAM;
2438          code : longint;
2439       end;
2440     tagDEBUGHOOKINFO = DEBUGHOOKINFO;
2441     TDEBUGHOOKINFO = DEBUGHOOKINFO;
2442     PDEBUGHOOKINFO = ^DEBUGHOOKINFO;
2443
2444     DELETEITEMSTRUCT = record
2445          CtlType : UINT;
2446          CtlID : UINT;
2447          itemID : UINT;
2448          hwndItem : HWND;
2449          itemData : UINT;
2450       end;
2451     tagDELETEITEMSTRUCT = DELETEITEMSTRUCT;
2452     TDELETEITEMSTRUCT = DELETEITEMSTRUCT;
2453     PDELETEITEMSTRUCT = ^DELETEITEMSTRUCT;
2454
2455     DEV_BROADCAST_HDR = record
2456          dbch_size : ULONG;
2457          dbch_devicetype : ULONG;
2458          dbch_reserved : ULONG;
2459       end;
2460     PDEV_BROADCAST_HDR = ^DEV_BROADCAST_HDR;
2461     _DEV_BROADCAST_HDR = DEV_BROADCAST_HDR;
2462     TDEVBROADCASTHDR = DEV_BROADCAST_HDR;
2463     PDEVBROADCASTHDR = ^DEV_BROADCAST_HDR;
2464
2465     DEV_BROADCAST_OEM = record
2466          dbco_size : ULONG;
2467          dbco_devicetype : ULONG;
2468          dbco_reserved : ULONG;
2469          dbco_identifier : ULONG;
2470          dbco_suppfunc : ULONG;
2471       end;
2472     PDEV_BROADCAST_OEM = ^DEV_BROADCAST_OEM;
2473     _DEV_BROADCAST_OEM = DEV_BROADCAST_OEM;
2474     TDEVBROADCASTOEM = DEV_BROADCAST_OEM;
2475     PDEVBROADCASTOEM = ^DEV_BROADCAST_OEM;
2476
2477     DEV_BROADCAST_PORT = record
2478          dbcp_size : ULONG;
2479          dbcp_devicetype : ULONG;
2480          dbcp_reserved : ULONG;
2481          dbcp_name : array[0..0] of char;
2482       end;
2483     PDEV_BROADCAST_PORT = ^DEV_BROADCAST_PORT;
2484     _DEV_BROADCAST_PORT = DEV_BROADCAST_PORT;
2485     TDEVBROADCASTPORT = DEV_BROADCAST_PORT;
2486     PDEVBROADCASTPORT = ^DEV_BROADCAST_PORT;
2487
2488     _DEV_BROADCAST_USERDEFINED = record
2489          dbud_dbh : _DEV_BROADCAST_HDR;
2490          dbud_szName : array[0..0] of char;
2491          dbud_rgbUserDefined : array[0..0] of BYTE;
2492       end;
2493     TDEVBROADCASTUSERDEFINED = _DEV_BROADCAST_USERDEFINED;
2494     PDEVBROADCASTUSERDEFINED = ^_DEV_BROADCAST_USERDEFINED;
2495
2496     DEV_BROADCAST_VOLUME = record
2497          dbcv_size : ULONG;
2498          dbcv_devicetype : ULONG;
2499          dbcv_reserved : ULONG;
2500          dbcv_unitmask : ULONG;
2501          dbcv_flags : USHORT;
2502       end;
2503     PDEV_BROADCAST_VOLUME = ^DEV_BROADCAST_VOLUME;
2504     _DEV_BROADCAST_VOLUME = DEV_BROADCAST_VOLUME;
2505     TDEVBROADCASTVOLUME = DEV_BROADCAST_VOLUME;
2506     PDEVBROADCASTVOLUME = ^DEV_BROADCAST_VOLUME;
2507
2508     DEVMODEA   = record
2509                     dmDeviceName   : array[0.. CCHDEVICENAME-1] of BCHAR;
2510                     dmSpecVersion  : WORD;
2511                     dmDriverVersion: WORD;
2512                     dmSize        : WORD;
2513                     dmDriverExtra  : WORD;
2514                     dmFields       : DWORD;
2515                     dmOrientation  : short;
2516                     dmPaperSize    : short;
2517                     dmPaperLength  : short;
2518                     dmPaperWidth   : short;
2519                     dmScale       : short;
2520                     dmCopies      : short;
2521                     dmDefaultSource: short;
2522                     dmPrintQuality : short;
2523                     dmColor       : short;
2524                     dmDuplex      : short;
2525                     dmYResolution  : short;
2526                     dmTTOption    : short;
2527                     dmCollate     : short;
2528                     dmFormName     : array [0..CCHFORMNAME-1] of BCHAR;
2529                     dmLogPixels    : WORD;
2530                     dmBitsPerPel   : DWORD;
2531                     dmPelsWidth    : DWORD;
2532                     dmPelsHeight   : DWORD;
2533                     dmDisplayFlags : DWORD;
2534                     dmDisplayFrequency     : DWORD;
2535                     dmICMMethod    : DWORD;
2536                     dmICMIntent    : DWORD;
2537                     dmMediaType    : DWORD;
2538                     dmDitherType   : DWORD;
2539                     dmReserved1    : DWORD;
2540                     dmReserved2    : DWORD;
2541                     dmPanningWidth : DWORD;
2542                     dmPanningHeight: DWORD;
2543                     dmDisplayOrientation : DWORD;
2544                   end;
2545     _DEVICEMODE1=DEVMODEA;
2546     PDEVMODEA=^DEVMODEA;
2547     NPDEVMODEA=^DEVMODEA;
2548     LPDEVMODEA=^DEVMODEA;
2549
2550     DEVMODEW   = record
2551                     dmDeviceName   : array[0.. CCHDEVICENAME-1] of WCHAR;
2552                     dmSpecVersion  : WORD;
2553                     dmDriverVersion: WORD;
2554                     dmSize        : WORD;
2555                     dmDriverExtra  : WORD;
2556                     dmFields       : DWORD;
2557                     dmOrientation  : short;
2558                     dmPaperSize    : short;
2559                     dmPaperLength  : short;
2560                     dmPaperWidth   : short;
2561                     dmScale       : short;
2562                     dmCopies      : short;
2563                     dmDefaultSource: short;
2564                     dmPrintQuality : short;
2565                     dmColor       : short;
2566                     dmDuplex      : short;
2567                     dmYResolution  : short;
2568                     dmTTOption    : short;
2569                     dmCollate     : short;
2570                     dmFormName     : array [0..CCHFORMNAME-1] of wchar;
2571                     dmLogPixels    : WORD;
2572                     dmBitsPerPel   : DWORD;
2573                     dmPelsWidth    : DWORD;
2574                     dmPelsHeight   : DWORD;
2575                     dmDisplayFlags : DWORD;
2576                     dmDisplayFrequency   : DWORD;
2577                     dmDisplayOrientation : DWORD;
2578                   end;
2579
2580     LPDEVMODEW   = ^DEVMODEW;
2581     _devicemodeW = DEVMODEW;
2582     devicemodeW  = DEVMODEW;
2583     TDeviceModeW = DEVMODEW;
2584     PDeviceModeW = LPDEVMODEW;
2585     TDEVMODEW    = DEVMODEW;
2586     PDEVMODEW    = LPDEVMODEW;
2587
2588{$IFDEF UNICODE}
2589     DEVMODE=DEVMODEW;
2590     LPDEVMODE = ^DEVMODEW;
2591     _devicemode = DEVMODEW;
2592     devicemode = DEVMODEW;
2593     tdevicemode = DEVMODEW;
2594     tdevicemodeA = DEVMODEW;
2595     PDeviceModeA = LPDEVMODEW;
2596     PDeviceMode = LPDEVMODEW;
2597     TDEVMODE = DEVMODEW;
2598     PDEVMODE = LPDEVMODEW;
2599{$ELSE UNICODE}
2600     DEVMODE=DEVMODEA;
2601     LPDEVMODE = ^DEVMODEA;
2602     _devicemode = DEVMODEA;
2603     devicemode = DEVMODEA;
2604     tdevicemode = DEVMODEA;
2605     tdevicemodeA = DEVMODEA;
2606     PDeviceModeA = LPDEVMODEA;
2607     PDeviceMode = LPDEVMODEA;
2608     TDEVMODE = DEVMODEA;
2609     PDEVMODE = LPDEVMODEA;
2610{$ENDIF UNICODE}
2611
2612     DEVNAMES = record
2613          wDriverOffset : WORD;
2614          wDeviceOffset : WORD;
2615          wOutputOffset : WORD;
2616          wDefault : WORD;
2617       end;
2618     LPDEVNAMES = ^DEVNAMES;
2619     tagDEVNAMES = DEVNAMES;
2620     TDEVNAMES = DEVNAMES;
2621     PDEVNAMES = ^DEVNAMES;
2622
2623     DIBSECTION = record
2624          dsBm : BITMAP;
2625          dsBmih : BITMAPINFOHEADER;
2626          dsBitfields : array[0..2] of DWORD;
2627          dshSection : HANDLE;
2628          dsOffset : DWORD;
2629       end;
2630     tagDIBSECTION = DIBSECTION;
2631     TDIBSECTION = DIBSECTION;
2632     PDIBSECTION = ^DIBSECTION;
2633
2634     LARGE_INTEGER = record    //winnt
2635        case byte of
2636          0: (LowPart : DWORD;
2637              HighPart : LONG);
2638          1: (QuadPart : LONGLONG);
2639       end;
2640     PLARGE_INTEGER = ^LARGE_INTEGER; //winnt
2641     _LARGE_INTEGER = LARGE_INTEGER;  //winnt
2642
2643     TLargeInteger = Int64;
2644     PLargeInteger = ^TLargeInteger;
2645
2646     ULARGE_INTEGER = record
2647        case byte of
2648          0: (LowPart : DWORD;
2649              HighPart : DWORD);
2650          1: (QuadPart : LONGLONG);
2651       end;
2652     PULARGE_INTEGER = ^ULARGE_INTEGER;
2653     _ULARGE_INTEGER = ULARGE_INTEGER;
2654
2655     TULargeInteger = QWord;
2656     PULargeInteger = ^TULargeInteger;
2657
2658     DISK_GEOMETRY = record
2659          Cylinders : LARGE_INTEGER;
2660          MediaType : MEDIA_TYPE;
2661          TracksPerCylinder : DWORD;
2662          SectorsPerTrack : DWORD;
2663          BytesPerSector : DWORD;
2664       end;
2665     _DISK_GEOMETRY = DISK_GEOMETRY;
2666     TDISKGEOMETRY = DISK_GEOMETRY;
2667     PDISKGEOMETRY = ^DISK_GEOMETRY;
2668
2669     DISK_PERFORMANCE = record
2670          BytesRead : LARGE_INTEGER;
2671          BytesWritten : LARGE_INTEGER;
2672          ReadTime : LARGE_INTEGER;
2673          WriteTime : LARGE_INTEGER;
2674          ReadCount : DWORD;
2675          WriteCount : DWORD;
2676          QueueDepth : DWORD;
2677       end;
2678     _DISK_PERFORMANCE = DISK_PERFORMANCE;
2679     TDISKPERFORMANCE = DISK_PERFORMANCE;
2680     PDISKPERFORMANCE = ^DISK_PERFORMANCE;
2681
2682     DLGITEMTEMPLATE = packed record
2683          style : DWORD;
2684          dwExtendedStyle : DWORD;
2685          x : integer;
2686          y : integer;
2687          cx : integer;
2688          cy : integer;
2689          id : WORD;
2690       end;
2691     LPDLGITEMTEMPLATE = ^DLGITEMTEMPLATE;
2692     TDLGITEMTEMPLATE = DLGITEMTEMPLATE;
2693     PDLGITEMTEMPLATE = ^DLGITEMTEMPLATE;
2694
2695     DLGTEMPLATE = packed record
2696          style : DWORD;
2697          dwExtendedStyle : DWORD;
2698          cdit : WORD;
2699          x : integer;
2700          y : integer;
2701          cx : integer;
2702          cy : integer;
2703       end;
2704     LPDLGTEMPLATE = ^DLGTEMPLATE;
2705     LPCDLGTEMPLATE = ^DLGTEMPLATE;
2706     LPCDLGTEMPLATEW = ^DLGTEMPLATE; //+winuser
2707     TDLGTEMPLATE = DLGTEMPLATE;
2708     PDLGTEMPLATE = ^DLGTEMPLATE;
2709
2710     DOC_INFO_1 = record
2711          pDocName : LPTSTR;
2712          pOutputFile : LPTSTR;
2713          pDatatype : LPTSTR;
2714       end;
2715     _DOC_INFO_1 = DOC_INFO_1;
2716     TDOCINFO1 = DOC_INFO_1;
2717     PDOCINFO1 = ^DOC_INFO_1;
2718
2719     DOC_INFO_2 = record
2720          pDocName : LPTSTR;
2721          pOutputFile : LPTSTR;
2722          pDatatype : LPTSTR;
2723          dwMode : DWORD;
2724          JobId : DWORD;
2725       end;
2726     _DOC_INFO_2 = DOC_INFO_2;
2727     TDOCINFO2 = DOC_INFO_2;
2728     PDOCINFO2 = ^DOC_INFO_2;
2729
2730     DOCINFO = record //+wingdi
2731          cbSize : Integer;
2732          lpszDocName : LPCWSTR;
2733          lpszOutput : LPCWSTR;
2734          lpszDatatype : LPCWSTR;
2735          fwType : DWORD;
2736       end;
2737     TDOCINFO = DOCINFO;
2738     PDOCINFO = ^DOCINFO;
2739     DOCINFOW = DOCINFO;
2740     TDOCINFOW = DOCINFOW;
2741     _DOCINFOW=DOCINFOW; //+wingdi
2742     LPDOCINFOW=^PDOCINFO; //+wingdi
2743     PDOCINFOW=^PDOCINFO; //+wingdi
2744
2745     DRAGLISTINFO = record
2746          uNotification : UINT;
2747          hWnd : HWND;
2748          ptCursor : POINT;
2749       end;
2750     LPDRAGLISTINFO = ^DRAGLISTINFO;
2751     TDRAGLISTINFO = DRAGLISTINFO;
2752     PDRAGLISTINFO = ^DRAGLISTINFO;
2753
2754     DRAWITEMSTRUCT = record
2755          CtlType : UINT;
2756          CtlID : UINT;
2757          itemID : UINT;
2758          itemAction : UINT;
2759          itemState : UINT;
2760          hwndItem : HWND;
2761          hDC : HDC;
2762          rcItem : RECT;
2763          itemData : DWORD;
2764       end;
2765     LPDRAWITEMSTRUCT = ^DRAWITEMSTRUCT;
2766     tagDRAWITEMSTRUCT = DRAWITEMSTRUCT;
2767     TDRAWITEMSTRUCT = DRAWITEMSTRUCT;
2768     PDRAWITEMSTRUCT = ^DRAWITEMSTRUCT;
2769
2770     DRAWTEXTPARAMS = record
2771          cbSize : UINT;
2772          iTabLength : longint;
2773          iLeftMargin : longint;
2774          iRightMargin : longint;
2775          uiLengthDrawn : UINT;
2776       end;
2777     LPDRAWTEXTPARAMS = ^DRAWTEXTPARAMS;
2778     TDRAWTEXTPARAMS = DRAWTEXTPARAMS;
2779     PDRAWTEXTPARAMS = ^DRAWTEXTPARAMS;
2780
2781     PARTITION_INFORMATION = record
2782          PartitionType : BYTE;
2783          BootIndicator : BOOLEAN;
2784          RecognizedPartition : BOOLEAN;
2785          RewritePartition : BOOLEAN;
2786          StartingOffset : LARGE_INTEGER;
2787          PartitionLength : LARGE_INTEGER;
2788          HiddenSectors : LARGE_INTEGER;
2789       end;
2790     _PARTITION_INFORMATION = PARTITION_INFORMATION;
2791     TPARTITIONINFORMATION = PARTITION_INFORMATION;
2792     PPARTITIONINFORMATION = ^PARTITION_INFORMATION;
2793
2794     DRIVE_LAYOUT_INFORMATION = record
2795          PartitionCount : DWORD;
2796          Signature : DWORD;
2797          PartitionEntry : array[0..0] of PARTITION_INFORMATION;
2798       end;
2799     _DRIVE_LAYOUT_INFORMATION = DRIVE_LAYOUT_INFORMATION;
2800     TDRIVELAYOUTINFORMATION = DRIVE_LAYOUT_INFORMATION;
2801     PDRIVELAYOUTINFORMATION = ^DRIVE_LAYOUT_INFORMATION;
2802
2803     DRIVER_INFO_1 = record
2804          pName : LPTSTR;
2805       end;
2806     _DRIVER_INFO_1 = DRIVER_INFO_1;
2807     TDRIVERINFO1 = DRIVER_INFO_1;
2808     PDRIVERINFO1 = ^DRIVER_INFO_1;
2809
2810     DRIVER_INFO_2 = record
2811          cVersion : DWORD;
2812          pName : LPTSTR;
2813          pEnvironment : LPTSTR;
2814          pDriverPath : LPTSTR;
2815          pDataFile : LPTSTR;
2816          pConfigFile : LPTSTR;
2817       end;
2818     _DRIVER_INFO_2 = DRIVER_INFO_2;
2819     TDRIVERINFO2 = DRIVER_INFO_2;
2820     PDRIVERINFO2 = ^DRIVER_INFO_2;
2821
2822     DRIVER_INFO_3 = record
2823          cVersion : DWORD;
2824          pName : LPTSTR;
2825          pEnvironment : LPTSTR;
2826          pDriverPath : LPTSTR;
2827          pDataFile : LPTSTR;
2828          pConfigFile : LPTSTR;
2829          pHelpFile : LPTSTR;
2830          pDependentFiles : LPTSTR;
2831          pMonitorName : LPTSTR;
2832          pDefaultDataType : LPTSTR;
2833       end;
2834     _DRIVER_INFO_3 = DRIVER_INFO_3;
2835     TDRIVERINFO3 = DRIVER_INFO_3;
2836     PDRIVERINFO3 = ^DRIVER_INFO_3;
2837
2838     EDITSTREAM = record
2839          dwCookie : DWORD;
2840          dwError : DWORD;
2841          pfnCallback : EDITSTREAMCALLBACK;
2842       end;
2843     _editstream = EDITSTREAM;
2844     Teditstream = EDITSTREAM;
2845     Peditstream = ^EDITSTREAM;
2846
2847     EMR = record
2848          iType : DWORD;
2849          nSize : DWORD;
2850       end;
2851     tagEMR = EMR;
2852     TEMR = EMR;
2853     PEMR = ^EMR;
2854
2855     EMRANGLEARC = record
2856          emr : EMR;
2857          ptlCenter : POINTL;
2858          nRadius : DWORD;
2859          eStartAngle : Single;
2860          eSweepAngle : Single;
2861       end;
2862     tagEMRANGLEARC = EMRANGLEARC;
2863     TEMRANGLEARC = EMRANGLEARC;
2864     PEMRANGLEARC = ^EMRANGLEARC;
2865
2866     EMRARC = record
2867          emr : EMR;
2868          rclBox : RECTL;
2869          ptlStart : POINTL;
2870          ptlEnd : POINTL;
2871       end;
2872     tagEMRARC = EMRARC;
2873     TEMRARC = EMRARC;
2874     PEMRARC = ^EMRARC;
2875
2876     EMRARCTO = EMRARC;
2877     TEMRARCTO = EMRARC;
2878     PEMRARCTO = ^EMRARC;
2879
2880     EMRCHORD = EMRARC;
2881     TEMRCHORD = EMRARC;
2882     PEMRCHORD = ^EMRARC;
2883
2884     EMRPIE = EMRARC;
2885     TEMRPIE = EMRARC;
2886     PEMRPIE = ^EMRARC;
2887
2888     XFORM = record
2889          eM11 : Single;
2890          eM12 : Single;
2891          eM21 : Single;
2892          eM22 : Single;
2893          eDx : Single;
2894          eDy : Single;
2895       end;
2896     LPXFORM = ^XFORM;
2897     _XFORM = XFORM;
2898     TXFORM = XFORM;
2899     PXFORM = ^XFORM;
2900
2901     EMRBITBLT = record
2902          emr : EMR;
2903          rclBounds : RECTL;
2904          xDest : LONG;
2905          yDest : LONG;
2906          cxDest : LONG;
2907          cyDest : LONG;
2908          dwRop : DWORD;
2909          xSrc : LONG;
2910          ySrc : LONG;
2911          xformSrc : XFORM;
2912          crBkColorSrc : COLORREF;
2913          iUsageSrc : DWORD;
2914          offBmiSrc : DWORD;
2915          offBitsSrc : DWORD;
2916          cbBitsSrc : DWORD;
2917       end;
2918     tagEMRBITBLT = EMRBITBLT;
2919     TEMRBITBLT = EMRBITBLT;
2920     PEMRBITBLT = ^EMRBITBLT;
2921
2922     LOGBRUSH = record
2923          lbStyle : UINT;
2924          lbColor : COLORREF;
2925          lbHatch : LONG;
2926       end;
2927     tagLOGBRUSH = LOGBRUSH;
2928     TLOGBRUSH = LOGBRUSH;
2929     PLOGBRUSH = ^LOGBRUSH;
2930
2931     EMRCREATEBRUSHINDIRECT = record
2932          emr : EMR;
2933          ihBrush : DWORD;
2934          lb : LOGBRUSH;
2935       end;
2936     tagEMRCREATEBRUSHINDIRECT = EMRCREATEBRUSHINDIRECT;
2937     TEMRCREATEBRUSHINDIRECT = EMRCREATEBRUSHINDIRECT;
2938     PEMRCREATEBRUSHINDIRECT = ^EMRCREATEBRUSHINDIRECT;
2939
2940     LCSCSTYPE = LONG;
2941
2942     LCSGAMUTMATCH = LONG;
2943
2944     LOGCOLORSPACE = record
2945          lcsSignature : DWORD;
2946          lcsVersion : DWORD;
2947          lcsSize : DWORD;
2948          lcsCSType : LCSCSTYPE;
2949          lcsIntent : LCSGAMUTMATCH;
2950          lcsEndpoints : CIEXYZTRIPLE;
2951          lcsGammaRed : DWORD;
2952          lcsGammaGreen : DWORD;
2953          lcsGammaBlue : DWORD;
2954          lcsFilename : array[0..(MAX_PATH)-1] of TCHAR;
2955       end;
2956     LPLOGCOLORSPACE = ^LOGCOLORSPACE;
2957     tagLOGCOLORSPACE = LOGCOLORSPACE;
2958     TLOGCOLORSPACE = LOGCOLORSPACE;
2959     TLOGCOLORSPACEA = LOGCOLORSPACE;
2960     PLOGCOLORSPACE = ^LOGCOLORSPACE;
2961
2962     EMRCREATECOLORSPACE = record
2963          emr : EMR;
2964          ihCS : DWORD;
2965          lcs : LOGCOLORSPACE;
2966       end;
2967     tagEMRCREATECOLORSPACE = EMRCREATECOLORSPACE;
2968     TEMRCREATECOLORSPACE = EMRCREATECOLORSPACE;
2969     PEMRCREATECOLORSPACE = ^EMRCREATECOLORSPACE;
2970
2971     EMRCREATEDIBPATTERNBRUSHPT = record
2972          emr : EMR;
2973          ihBrush : DWORD;
2974          iUsage : DWORD;
2975          offBmi : DWORD;
2976          cbBmi : DWORD;
2977          offBits : DWORD;
2978          cbBits : DWORD;
2979       end;
2980     tagEMRCREATEDIBPATTERNBRUSHPT = EMRCREATEDIBPATTERNBRUSHPT;
2981     TEMRCREATEDIBPATTERNBRUSHPT = EMRCREATEDIBPATTERNBRUSHPT;
2982     PEMRCREATEDIBPATTERNBRUSHPT = EMRCREATEDIBPATTERNBRUSHPT;
2983
2984     EMRCREATEMONOBRUSH = record
2985          emr : EMR;
2986          ihBrush : DWORD;
2987          iUsage : DWORD;
2988          offBmi : DWORD;
2989          cbBmi : DWORD;
2990          offBits : DWORD;
2991          cbBits : DWORD;
2992       end;
2993     tagEMRCREATEMONOBRUSH = EMRCREATEMONOBRUSH;
2994     TEMRCREATEMONOBRUSH = EMRCREATEMONOBRUSH;
2995     PEMRCREATEMONOBRUSH = ^EMRCREATEMONOBRUSH;
2996
2997     PALETTEENTRY = record
2998          peRed : BYTE;
2999          peGreen : BYTE;
3000          peBlue : BYTE;
3001          peFlags : BYTE;
3002       end;
3003     LPPALETTEENTRY = ^PALETTEENTRY;
3004     tagPALETTEENTRY = PALETTEENTRY;
3005     TPALETTEENTRY = PALETTEENTRY;
3006     PPALETTEENTRY = ^PALETTEENTRY;
3007
3008     LOGPALETTE = record
3009          palVersion : WORD;
3010          palNumEntries : WORD;
3011          palPalEntry : array[0..0] of PALETTEENTRY;
3012       end;
3013     LPLOGPALETTE = ^LOGPALETTE;
3014     tagLOGPALETTE = LOGPALETTE;
3015     TLOGPALETTE = LOGPALETTE;
3016     PLOGPALETTE = ^LOGPALETTE;
3017
3018     EMRCREATEPALETTE = record
3019          emr : EMR;
3020          ihPal : DWORD;
3021          lgpl : LOGPALETTE;
3022       end;
3023     tagEMRCREATEPALETTE = EMRCREATEPALETTE;
3024     TEMRCREATEPALETTE = EMRCREATEPALETTE;
3025     PEMRCREATEPALETTE = ^EMRCREATEPALETTE;
3026
3027     LOGPEN = record
3028          lopnStyle : UINT;
3029          lopnWidth : POINT;
3030          lopnColor : COLORREF;
3031       end;
3032     tagLOGPEN = LOGPEN;
3033     TLOGPEN = LOGPEN;
3034     PLOGPEN = ^LOGPEN;
3035
3036     EMRCREATEPEN = record
3037          emr : EMR;
3038          ihPen : DWORD;
3039          lopn : LOGPEN;
3040       end;
3041     tagEMRCREATEPEN = EMRCREATEPEN;
3042     TEMRCREATEPEN = EMRCREATEPEN;
3043     PEMRCREATEPEN = ^EMRCREATEPEN;
3044
3045     EMRELLIPSE = record
3046          emr : EMR;
3047          rclBox : RECTL;
3048       end;
3049     tagEMRELLIPSE = EMRELLIPSE;
3050     TEMRELLIPSE = EMRELLIPSE;
3051     PEMRELLIPSE = ^EMRELLIPSE;
3052
3053     EMRRECTANGLE = EMRELLIPSE;
3054     TEMRRECTANGLE = EMRELLIPSE;
3055     PEMRRECTANGLE = ^EMRELLIPSE;
3056
3057     EMREOF = record
3058          emr : EMR;
3059          nPalEntries : DWORD;
3060          offPalEntries : DWORD;
3061          nSizeLast : DWORD;
3062       end;
3063     tagEMREOF = EMREOF;
3064     TEMREOF = EMREOF;
3065     PEMREOF = ^EMREOF;
3066
3067     EMREXCLUDECLIPRECT = record
3068          emr : EMR;
3069          rclClip : RECTL;
3070       end;
3071     tagEMREXCLUDECLIPRECT = EMREXCLUDECLIPRECT;
3072     TEMREXCLUDECLIPRECT = EMREXCLUDECLIPRECT;
3073     PEMREXCLUDECLIPRECT = ^EMREXCLUDECLIPRECT;
3074
3075     EMRINTERSECTCLIPRECT = EMREXCLUDECLIPRECT;
3076     TEMRINTERSECTCLIPRECT = EMREXCLUDECLIPRECT;
3077     PEMRINTERSECTCLIPRECT = ^EMREXCLUDECLIPRECT;
3078
3079     PANOSE = record
3080          bFamilyType : BYTE;
3081          bSerifStyle : BYTE;
3082          bWeight : BYTE;
3083          bProportion : BYTE;
3084          bContrast : BYTE;
3085          bStrokeVariation : BYTE;
3086          bArmStyle : BYTE;
3087          bLetterform : BYTE;
3088          bMidline : BYTE;
3089          bXHeight : BYTE;
3090       end;
3091     tagPANOSE = PANOSE;
3092     TPANOSE = PANOSE;
3093     PPANOSE = ^PANOSE;
3094
3095     EXTLOGFONT = record
3096          elfLogFont : LOGFONT;
3097          elfFullName : array[0..(LF_FULLFACESIZE)-1] of BCHAR;
3098          elfStyle : array[0..(LF_FACESIZE)-1] of BCHAR;
3099          elfVersion : DWORD;
3100          elfStyleSize : DWORD;
3101          elfMatch : DWORD;
3102          elfReserved : DWORD;
3103          elfVendorId : array[0..(ELF_VENDOR_SIZE)-1] of BYTE;
3104          elfCulture : DWORD;
3105          elfPanose : PANOSE;
3106       end;
3107     tagEXTLOGFONT = EXTLOGFONT;
3108     TEXTLOGFONT = EXTLOGFONT;
3109     PEXTLOGFONT = ^EXTLOGFONT;
3110
3111     EMREXTCREATEFONTINDIRECTW = record
3112          emr : EMR;
3113          ihFont : DWORD;
3114          elfw : EXTLOGFONT;
3115       end;
3116     tagEMREXTCREATEFONTINDIRECTW = EMREXTCREATEFONTINDIRECTW;
3117     TEMREXTCREATEFONTINDIRECTW = EMREXTCREATEFONTINDIRECTW;
3118     PEMREXTCREATEFONTINDIRECTW = ^EMREXTCREATEFONTINDIRECTW;
3119
3120
3121     EXTLOGPEN = record
3122          elpPenStyle : UINT;
3123          elpWidth : UINT;
3124          elpBrushStyle : UINT;
3125          elpColor : COLORREF;
3126          elpHatch : LONG;
3127          elpNumEntries : DWORD;
3128          elpStyleEntry : array[0..0] of DWORD;
3129       end;
3130     tagEXTLOGPEN = EXTLOGPEN;
3131     TEXTLOGPEN = EXTLOGPEN;
3132     PEXTLOGPEN = ^EXTLOGPEN;
3133
3134     EMREXTCREATEPEN = record
3135          emr : EMR;
3136          ihPen : DWORD;
3137          offBmi : DWORD;
3138          cbBmi : DWORD;
3139          offBits : DWORD;
3140          cbBits : DWORD;
3141          elp : EXTLOGPEN;
3142       end;
3143     tagEMREXTCREATEPEN = EMREXTCREATEPEN;
3144     TEMREXTCREATEPEN = EMREXTCREATEPEN;
3145     PEMREXTCREATEPEN = ^EMREXTCREATEPEN;
3146
3147     EMREXTFLOODFILL = record
3148          emr : EMR;
3149          ptlStart : POINTL;
3150          crColor : COLORREF;
3151          iMode : DWORD;
3152       end;
3153     tagEMREXTFLOODFILL = EMREXTFLOODFILL;
3154     TEMREXTFLOODFILL = EMREXTFLOODFILL;
3155     PEMREXTFLOODFILL = ^EMREXTFLOODFILL;
3156
3157     EMREXTSELECTCLIPRGN = record
3158          emr : EMR;
3159          cbRgnData : DWORD;
3160          iMode : DWORD;
3161          RgnData : array[0..0] of BYTE;
3162       end;
3163     tagEMREXTSELECTCLIPRGN = EMREXTSELECTCLIPRGN;
3164     TEMREXTSELECTCLIPRGN = EMREXTSELECTCLIPRGN;
3165     PEMREXTSELECTCLIPRGN = ^EMREXTSELECTCLIPRGN;
3166
3167     EMRTEXT = record
3168          ptlReference : POINTL;
3169          nChars : DWORD;
3170          offString : DWORD;
3171          fOptions : DWORD;
3172          rcl : RECTL;
3173          offDx : DWORD;
3174       end;
3175     tagEMRTEXT = EMRTEXT;
3176     TEMRTEXT = EMRTEXT;
3177     PEMRTEXT = ^EMRTEXT;
3178
3179     EMREXTTEXTOUTA = record
3180          emr : EMR;
3181          rclBounds : RECTL;
3182          iGraphicsMode : DWORD;
3183          exScale : Single;
3184          eyScale : Single;
3185          emrtext : EMRTEXT;
3186       end;
3187     tagEMREXTTEXTOUTA = EMREXTTEXTOUTA;
3188     TEMREXTTEXTOUTA = EMREXTTEXTOUTA;
3189     PEMREXTTEXTOUTA = ^EMREXTTEXTOUTA;
3190
3191     EMREXTTEXTOUTW = EMREXTTEXTOUTA;
3192     TEMREXTTEXTOUTW = EMREXTTEXTOUTA;
3193     PEMREXTTEXTOUTW = ^EMREXTTEXTOUTA;
3194
3195     EMRFILLPATH = record
3196          emr : EMR;
3197          rclBounds : RECTL;
3198       end;
3199     tagEMRFILLPATH = EMRFILLPATH;
3200     TEMRFILLPATH = EMRFILLPATH;
3201     PEMRFILLPATH = ^EMRFILLPATH;
3202
3203     EMRSTROKEANDFILLPATH = EMRFILLPATH;
3204     TEMRSTROKEANDFILLPATH = EMRFILLPATH;
3205     PEMRSTROKEANDFILLPATH = ^EMRFILLPATH;
3206
3207     EMRSTROKEPATH = EMRFILLPATH;
3208     TEMRSTROKEPATH = EMRFILLPATH;
3209     PEMRSTROKEPATH = ^EMRFILLPATH;
3210
3211     EMRFILLRGN = record
3212          emr : EMR;
3213          rclBounds : RECTL;
3214          cbRgnData : DWORD;
3215          ihBrush : DWORD;
3216          RgnData : array[0..0] of BYTE;
3217       end;
3218     tagEMRFILLRGN = EMRFILLRGN;
3219     TEMRFILLRGN = EMRFILLRGN;
3220     PEMRFILLRGN = ^EMRFILLRGN;
3221
3222     EMRFORMAT = record
3223          dSignature : DWORD;
3224          nVersion : DWORD;
3225          cbData : DWORD;
3226          offData : DWORD;
3227       end;
3228     tagEMRFORMAT = EMRFORMAT;
3229     TEMRFORMAT = EMRFORMAT;
3230     PEMRFORMAT = ^EMRFORMAT;
3231
3232     SIZE = TSize;
3233     LPSIZE = PSIZE;
3234     tagSIZE = SIZE;
3235
3236     SIZEL = SIZE;        //windef
3237     TSIZEL = SIZE;       //windef
3238     PSIZEL = ^SIZE;
3239     LPSIZEL = ^SIZE;
3240
3241     EMRFRAMERGN = record
3242          emr : EMR;
3243          rclBounds : RECTL;
3244          cbRgnData : DWORD;
3245          ihBrush : DWORD;
3246          szlStroke : SIZEL;
3247          RgnData : array[0..0] of BYTE;
3248       end;
3249     tagEMRFRAMERGN = EMRFRAMERGN;
3250     TEMRFRAMERGN = EMRFRAMERGN;
3251     PEMRFRAMERGN = ^EMRFRAMERGN;
3252
3253     EMRGDICOMMENT = record
3254          emr : EMR;
3255          cbData : DWORD;
3256          Data : array[0..0] of BYTE;
3257       end;
3258     tagEMRGDICOMMENT = EMRGDICOMMENT;
3259     TEMRGDICOMMENT = EMRGDICOMMENT;
3260     PEMRGDICOMMENT = ^EMRGDICOMMENT;
3261
3262     EMRINVERTRGN = record
3263          emr : EMR;
3264          rclBounds : RECTL;
3265          cbRgnData : DWORD;
3266          RgnData : array[0..0] of BYTE;
3267       end;
3268     tagEMRINVERTRGN = EMRINVERTRGN;
3269     TEMRINVERTRGN = EMRINVERTRGN;
3270     PEMRINVERTRGN = ^EMRINVERTRGN;
3271
3272     EMRPAINTRGN = EMRINVERTRGN;
3273     TEMRPAINTRGN = EMRINVERTRGN;
3274     PEMRPAINTRGN = ^EMRINVERTRGN;
3275
3276     EMRLINETO = record
3277          emr : EMR;
3278          ptl : POINTL;
3279       end;
3280     tagEMRLINETO = EMRLINETO;
3281     TEMRLINETO = EMRLINETO;
3282     PEMRLINETO = ^EMRLINETO;
3283
3284     EMRMOVETOEX = EMRLINETO;
3285     TEMRMOVETOEX = EMRLINETO;
3286     PEMRMOVETOEX = ^EMRLINETO;
3287
3288     EMRMASKBLT = record
3289          emr : EMR;
3290          rclBounds : RECTL;
3291          xDest : LONG;
3292          yDest : LONG;
3293          cxDest : LONG;
3294          cyDest : LONG;
3295          dwRop : DWORD;
3296          xSrc : LONG;
3297          ySrc : LONG;
3298          xformSrc : XFORM;
3299          crBkColorSrc : COLORREF;
3300          iUsageSrc : DWORD;
3301          offBmiSrc : DWORD;
3302          cbBmiSrc : DWORD;
3303          offBitsSrc : DWORD;
3304          cbBitsSrc : DWORD;
3305          xMask : LONG;
3306          yMask : LONG;
3307          iUsageMask : DWORD;
3308          offBmiMask : DWORD;
3309          cbBmiMask : DWORD;
3310          offBitsMask : DWORD;
3311          cbBitsMask : DWORD;
3312       end;
3313     tagEMRMASKBLT = EMRMASKBLT;
3314     TEMRMASKBLT = EMRMASKBLT;
3315     PEMRMASKBLT = ^EMRMASKBLT;
3316
3317     EMRMODIFYWORLDTRANSFORM = record
3318          emr : EMR;
3319          xform : XFORM;
3320          iMode : DWORD;
3321       end;
3322     tagEMRMODIFYWORLDTRANSFORM = EMRMODIFYWORLDTRANSFORM;
3323     TEMRMODIFYWORLDTRANSFORM = EMRMODIFYWORLDTRANSFORM;
3324     PEMRMODIFYWORLDTRANSFORM = EMRMODIFYWORLDTRANSFORM;
3325
3326     EMROFFSETCLIPRGN = record
3327          emr : EMR;
3328          ptlOffset : POINTL;
3329       end;
3330     tagEMROFFSETCLIPRGN = EMROFFSETCLIPRGN;
3331     TEMROFFSETCLIPRGN = EMROFFSETCLIPRGN;
3332     PEMROFFSETCLIPRGN = ^EMROFFSETCLIPRGN;
3333
3334     EMRPLGBLT = record
3335          emr : EMR;
3336          rclBounds : RECTL;
3337          aptlDest : array[0..2] of POINTL;
3338          xSrc : LONG;
3339          ySrc : LONG;
3340          cxSrc : LONG;
3341          cySrc : LONG;
3342          xformSrc : XFORM;
3343          crBkColorSrc : COLORREF;
3344          iUsageSrc : DWORD;
3345          offBmiSrc : DWORD;
3346          cbBmiSrc : DWORD;
3347          offBitsSrc : DWORD;
3348          cbBitsSrc : DWORD;
3349          xMask : LONG;
3350          yMask : LONG;
3351          iUsageMask : DWORD;
3352          offBmiMask : DWORD;
3353          cbBmiMask : DWORD;
3354          offBitsMask : DWORD;
3355          cbBitsMask : DWORD;
3356       end;
3357     tagEMRPLGBLT = EMRPLGBLT;
3358     TEMRPLGBLT = EMRPLGBLT;
3359     PEMRPLGBLT = ^EMRPLGBLT;
3360
3361     EMRPOLYDRAW = record
3362          emr : EMR;
3363          rclBounds : RECTL;
3364          cptl : DWORD;
3365          aptl : array[0..0] of POINTL;
3366          abTypes : array[0..0] of BYTE;
3367       end;
3368     tagEMRPOLYDRAW = EMRPOLYDRAW;
3369     TEMRPOLYDRAW = EMRPOLYDRAW;
3370     PEMRPOLYDRAW = ^EMRPOLYDRAW;
3371
3372     EMRPOLYDRAW16 = record
3373          emr : EMR;
3374          rclBounds : RECTL;
3375          cpts : DWORD;
3376          apts : array[0..0] of POINTS;
3377          abTypes : array[0..0] of BYTE;
3378       end;
3379     tagEMRPOLYDRAW16 = EMRPOLYDRAW16;
3380     TEMRPOLYDRAW16 = EMRPOLYDRAW16;
3381     PEMRPOLYDRAW16 = ^EMRPOLYDRAW16;
3382
3383     EMRPOLYLINE = record
3384          emr : EMR;
3385          rclBounds : RECTL;
3386          cptl : DWORD;
3387          aptl : array[0..0] of POINTL;
3388       end;
3389     tagEMRPOLYLINE = EMRPOLYLINE;
3390     TEMRPOLYLINE = EMRPOLYLINE;
3391     PEMRPOLYLINE = ^EMRPOLYLINE;
3392
3393     EMRPOLYBEZIER = EMRPOLYLINE;
3394     TEMRPOLYBEZIER = EMRPOLYLINE;
3395     PEMRPOLYBEZIER = ^EMRPOLYLINE;
3396
3397     EMRPOLYGON = EMRPOLYLINE;
3398     TEMRPOLYGON = EMRPOLYLINE;
3399     PEMRPOLYGON = ^EMRPOLYLINE;
3400
3401     EMRPOLYBEZIERTO = EMRPOLYLINE;
3402     TEMRPOLYBEZIERTO = EMRPOLYLINE;
3403     PEMRPOLYBEZIERTO = ^EMRPOLYLINE;
3404
3405     EMRPOLYLINETO = EMRPOLYLINE;
3406     TEMRPOLYLINETO = EMRPOLYLINE;
3407     PEMRPOLYLINETO = ^EMRPOLYLINE;
3408
3409     EMRPOLYLINE16 = record
3410          emr : EMR;
3411          rclBounds : RECTL;
3412          cpts : DWORD;
3413          apts : array[0..0] of POINTL;
3414       end;
3415     tagEMRPOLYLINE16 = EMRPOLYLINE16;
3416     TEMRPOLYLINE16 = EMRPOLYLINE16;
3417     PEMRPOLYLINE16 = ^EMRPOLYLINE16;
3418
3419     EMRPOLYBEZIER16 = EMRPOLYLINE16;
3420     TEMRPOLYBEZIER16 = EMRPOLYLINE16;
3421     PEMRPOLYBEZIER16 = ^EMRPOLYLINE16;
3422
3423     EMRPOLYGON16 = EMRPOLYLINE16;
3424     TEMRPOLYGON16 = EMRPOLYLINE16;
3425     PEMRPOLYGON16 = ^EMRPOLYLINE16;
3426
3427     EMRPOLYBEZIERTO16 = EMRPOLYLINE16;
3428     TEMRPOLYBEZIERTO16 = EMRPOLYLINE16;
3429     PEMRPOLYBEZIERTO16 = ^EMRPOLYLINE16;
3430
3431     EMRPOLYLINETO16 = EMRPOLYLINE16;
3432     TEMRPOLYLINETO16 = EMRPOLYLINE16;
3433     PEMRPOLYLINETO16 = ^EMRPOLYLINE16;
3434
3435     EMRPOLYPOLYLINE = record
3436          emr : EMR;
3437          rclBounds : RECTL;
3438          nPolys : DWORD;
3439          cptl : DWORD;
3440          aPolyCounts : array[0..0] of DWORD;
3441          aptl : array[0..0] of POINTL;
3442       end;
3443     tagEMRPOLYPOLYLINE = EMRPOLYPOLYLINE;
3444     TEMRPOLYPOLYLINE = EMRPOLYPOLYLINE;
3445     PEMRPOLYPOLYLINE = ^EMRPOLYPOLYLINE;
3446
3447     EMRPOLYPOLYGON = EMRPOLYPOLYLINE;
3448     TEMRPOLYPOLYGON = EMRPOLYPOLYLINE;
3449     PEMRPOLYPOLYGON = ^EMRPOLYPOLYLINE;
3450
3451     EMRPOLYPOLYLINE16 = record
3452          emr : EMR;
3453          rclBounds : RECTL;
3454          nPolys : DWORD;
3455          cpts : DWORD;
3456          aPolyCounts : array[0..0] of DWORD;
3457          apts : array[0..0] of POINTS;
3458       end;
3459     tagEMRPOLYPOLYLINE16 = EMRPOLYPOLYLINE16;
3460     TEMRPOLYPOLYLINE16 = EMRPOLYPOLYLINE16;
3461     PEMRPOLYPOLYLINE16 = ^EMRPOLYPOLYLINE16;
3462
3463     EMRPOLYPOLYGON16 = EMRPOLYPOLYLINE16;
3464     TEMRPOLYPOLYGON16 = EMRPOLYPOLYLINE16;
3465     PEMRPOLYPOLYGON16 = ^EMRPOLYPOLYLINE16;
3466
3467     EMRPOLYTEXTOUTA = record
3468          emr : EMR;
3469          rclBounds : RECTL;
3470          iGraphicsMode : DWORD;
3471          exScale : Single;
3472          eyScale : Single;
3473          cStrings : LONG;
3474          aemrtext : array[0..0] of EMRTEXT;
3475       end;
3476     tagEMRPOLYTEXTOUTA = EMRPOLYTEXTOUTA;
3477     TEMRPOLYTEXTOUTA = EMRPOLYTEXTOUTA;
3478     PEMRPOLYTEXTOUTA = ^EMRPOLYTEXTOUTA;
3479
3480     EMRPOLYTEXTOUTW = EMRPOLYTEXTOUTA;
3481     TEMRPOLYTEXTOUTW = EMRPOLYTEXTOUTA;
3482     PEMRPOLYTEXTOUTW = ^EMRPOLYTEXTOUTA;
3483
3484     EMRRESIZEPALETTE = record
3485          emr : EMR;
3486          ihPal : DWORD;
3487          cEntries : DWORD;
3488       end;
3489     tagEMRRESIZEPALETTE = EMRRESIZEPALETTE;
3490     TEMRRESIZEPALETTE = EMRRESIZEPALETTE;
3491     PEMRRESIZEPALETTE = ^EMRRESIZEPALETTE;
3492
3493     EMRRESTOREDC = record
3494          emr : EMR;
3495          iRelative : LONG;
3496       end;
3497     tagEMRRESTOREDC = EMRRESTOREDC;
3498     TEMRRESTOREDC = EMRRESTOREDC;
3499     PEMRRESTOREDC = ^EMRRESTOREDC;
3500
3501     EMRROUNDRECT = record
3502          emr : EMR;
3503          rclBox : RECTL;
3504          szlCorner : SIZEL;
3505       end;
3506     tagEMRROUNDRECT = EMRROUNDRECT;
3507     TEMRROUNDRECT = EMRROUNDRECT;
3508     PEMRROUNDRECT = ^EMRROUNDRECT;
3509
3510     EMRSCALEVIEWPORTEXTEX = record
3511          emr : EMR;
3512          xNum : LONG;
3513          xDenom : LONG;
3514          yNum : LONG;
3515          yDenom : LONG;
3516       end;
3517     tagEMRSCALEVIEWPORTEXTEX = EMRSCALEVIEWPORTEXTEX;
3518     TEMRSCALEVIEWPORTEXTEX = EMRSCALEVIEWPORTEXTEX;
3519     PEMRSCALEVIEWPORTEXTEX = ^EMRSCALEVIEWPORTEXTEX;
3520
3521     EMRSCALEWINDOWEXTEX = EMRSCALEVIEWPORTEXTEX;
3522     TEMRSCALEWINDOWEXTEX = EMRSCALEVIEWPORTEXTEX;
3523     PEMRSCALEWINDOWEXTEX = ^EMRSCALEVIEWPORTEXTEX;
3524
3525     EMRSELECTCOLORSPACE = record
3526          emr : EMR;
3527          ihCS : DWORD;
3528       end;
3529     tagEMRSELECTCOLORSPACE = EMRSELECTCOLORSPACE;
3530     TEMRSELECTCOLORSPACE = EMRSELECTCOLORSPACE;
3531     PEMRSELECTCOLORSPACE = ^EMRSELECTCOLORSPACE;
3532
3533     EMRDELETECOLORSPACE = EMRSELECTCOLORSPACE;
3534     TEMRDELETECOLORSPACE = EMRSELECTCOLORSPACE;
3535     PEMRDELETECOLORSPACE = ^EMRSELECTCOLORSPACE;
3536
3537     EMRSELECTOBJECT = record
3538          emr : EMR;
3539          ihObject : DWORD;
3540       end;
3541     tagEMRSELECTOBJECT = EMRSELECTOBJECT;
3542     TEMRSELECTOBJECT = EMRSELECTOBJECT;
3543     PEMRSELECTOBJECT = ^EMRSELECTOBJECT;
3544
3545     EMRDELETEOBJECT = EMRSELECTOBJECT;
3546     TEMRDELETEOBJECT = EMRSELECTOBJECT;
3547     PEMRDELETEOBJECT = ^EMRSELECTOBJECT;
3548
3549     EMRSELECTPALETTE = record
3550          emr : EMR;
3551          ihPal : DWORD;
3552       end;
3553     tagEMRSELECTPALETTE = EMRSELECTPALETTE;
3554     TEMRSELECTPALETTE = EMRSELECTPALETTE;
3555     PEMRSELECTPALETTE = ^EMRSELECTPALETTE;
3556
3557     EMRSETARCDIRECTION = record
3558          emr : EMR;
3559          iArcDirection : DWORD;
3560       end;
3561     tagEMRSETARCDIRECTION = EMRSETARCDIRECTION;
3562     TEMRSETARCDIRECTION = EMRSETARCDIRECTION;
3563     PEMRSETARCDIRECTION = ^EMRSETARCDIRECTION;
3564
3565     EMRSETBKCOLOR = record
3566          emr : EMR;
3567          crColor : COLORREF;
3568       end;
3569     tagEMRSETTEXTCOLOR = EMRSETBKCOLOR;
3570     TEMRSETBKCOLOR = EMRSETBKCOLOR;
3571     PEMRSETBKCOLOR = ^EMRSETBKCOLOR;
3572
3573     EMRSETTEXTCOLOR = EMRSETBKCOLOR;
3574     TEMRSETTEXTCOLOR = EMRSETBKCOLOR;
3575     PEMRSETTEXTCOLOR = ^EMRSETBKCOLOR;
3576
3577     EMRSETCOLORADJUSTMENT = record
3578          emr : EMR;
3579          ColorAdjustment : COLORADJUSTMENT;
3580       end;
3581     tagEMRSETCOLORADJUSTMENT = EMRSETCOLORADJUSTMENT;
3582     TEMRSETCOLORADJUSTMENT = EMRSETCOLORADJUSTMENT;
3583     PEMRSETCOLORADJUSTMENT = ^EMRSETCOLORADJUSTMENT;
3584
3585     EMRSETDIBITSTODEVICE = record
3586          emr : EMR;
3587          rclBounds : RECTL;
3588          xDest : LONG;
3589          yDest : LONG;
3590          xSrc : LONG;
3591          ySrc : LONG;
3592          cxSrc : LONG;
3593          cySrc : LONG;
3594          offBmiSrc : DWORD;
3595          cbBmiSrc : DWORD;
3596          offBitsSrc : DWORD;
3597          cbBitsSrc : DWORD;
3598          iUsageSrc : DWORD;
3599          iStartScan : DWORD;
3600          cScans : DWORD;
3601       end;
3602     tagEMRSETDIBITSTODEVICE = EMRSETDIBITSTODEVICE;
3603     TEMRSETDIBITSTODEVICE = EMRSETDIBITSTODEVICE;
3604     PEMRSETDIBITSTODEVICE = ^EMRSETDIBITSTODEVICE;
3605
3606     EMRSETMAPPERFLAGS = record
3607          emr : EMR;
3608          dwFlags : DWORD;
3609       end;
3610     tagEMRSETMAPPERFLAGS = EMRSETMAPPERFLAGS;
3611     TEMRSETMAPPERFLAGS = EMRSETMAPPERFLAGS;
3612     PEMRSETMAPPERFLAGS = ^EMRSETMAPPERFLAGS;
3613
3614     EMRSETMITERLIMIT = record
3615          emr : EMR;
3616          eMiterLimit : Single;
3617       end;
3618     tagEMRSETMITERLIMIT = EMRSETMITERLIMIT;
3619     TEMRSETMITERLIMIT = EMRSETMITERLIMIT;
3620     PEMRSETMITERLIMIT = ^EMRSETMITERLIMIT;
3621
3622     EMRSETPALETTEENTRIES = record
3623          emr : EMR;
3624          ihPal : DWORD;
3625          iStart : DWORD;
3626          cEntries : DWORD;
3627          aPalEntries : array[0..0] of PALETTEENTRY;
3628       end;
3629     tagEMRSETPALETTEENTRIES = EMRSETPALETTEENTRIES;
3630     TEMRSETPALETTEENTRIES = EMRSETPALETTEENTRIES;
3631     PEMRSETPALETTEENTRIES = ^EMRSETPALETTEENTRIES;
3632
3633     EMRSETPIXELV = record
3634          emr : EMR;
3635          ptlPixel : POINTL;
3636          crColor : COLORREF;
3637       end;
3638     tagEMRSETPIXELV = EMRSETPIXELV;
3639     TEMRSETPIXELV = EMRSETPIXELV;
3640     PEMRSETPIXELV = ^EMRSETPIXELV;
3641
3642     EMRSETVIEWPORTEXTEX = record
3643          emr : EMR;
3644          szlExtent : SIZEL;
3645       end;
3646     tagEMRSETVIEWPORTEXTEX = EMRSETVIEWPORTEXTEX;
3647     TEMRSETVIEWPORTEXTEX = EMRSETVIEWPORTEXTEX;
3648     PEMRSETVIEWPORTEXTEX = ^EMRSETVIEWPORTEXTEX;
3649
3650     EMRSETWINDOWEXTEX = EMRSETVIEWPORTEXTEX;
3651     TEMRSETWINDOWEXTEX = EMRSETVIEWPORTEXTEX;
3652     PEMRSETWINDOWEXTEX = ^EMRSETVIEWPORTEXTEX;
3653
3654     EMRSETVIEWPORTORGEX = record
3655          emr : EMR;
3656          ptlOrigin : POINTL;
3657       end;
3658     tagEMRSETVIEWPORTORGEX = EMRSETVIEWPORTORGEX;
3659     TEMRSETVIEWPORTORGEX = EMRSETVIEWPORTORGEX;
3660     PEMRSETVIEWPORTORGEX = ^EMRSETVIEWPORTORGEX;
3661
3662     EMRSETWINDOWORGEX = EMRSETVIEWPORTORGEX;
3663     TEMRSETWINDOWORGEX = EMRSETVIEWPORTORGEX;
3664     PEMRSETWINDOWORGEX = ^EMRSETVIEWPORTORGEX;
3665
3666     EMRSETBRUSHORGEX = EMRSETVIEWPORTORGEX;
3667     TEMRSETBRUSHORGEX = EMRSETVIEWPORTORGEX;
3668     PEMRSETBRUSHORGEX = ^EMRSETVIEWPORTORGEX;
3669
3670     EMRSETWORLDTRANSFORM = record
3671          emr : EMR;
3672          xform : XFORM;
3673       end;
3674     tagEMRSETWORLDTRANSFORM = EMRSETWORLDTRANSFORM;
3675     TEMRSETWORLDTRANSFORM = EMRSETWORLDTRANSFORM;
3676     PEMRSETWORLDTRANSFORM = ^EMRSETWORLDTRANSFORM;
3677
3678     EMRSTRETCHBLT = record
3679          emr : EMR;
3680          rclBounds : RECTL;
3681          xDest : LONG;
3682          yDest : LONG;
3683          cxDest : LONG;
3684          cyDest : LONG;
3685          dwRop : DWORD;
3686          xSrc : LONG;
3687          ySrc : LONG;
3688          xformSrc : XFORM;
3689          crBkColorSrc : COLORREF;
3690          iUsageSrc : DWORD;
3691          offBmiSrc : DWORD;
3692          cbBmiSrc : DWORD;
3693          offBitsSrc : DWORD;
3694          cbBitsSrc : DWORD;
3695          cxSrc : LONG;
3696          cySrc : LONG;
3697       end;
3698     tagEMRSTRETCHBLT = EMRSTRETCHBLT;
3699     TEMRSTRETCHBLT = EMRSTRETCHBLT;
3700     PEMRSTRETCHBLT = ^EMRSTRETCHBLT;
3701
3702     EMRSTRETCHDIBITS = record
3703          emr : EMR;
3704          rclBounds : RECTL;
3705          xDest : LONG;
3706          yDest : LONG;
3707          xSrc : LONG;
3708          ySrc : LONG;
3709          cxSrc : LONG;
3710          cySrc : LONG;
3711          offBmiSrc : DWORD;
3712          cbBmiSrc : DWORD;
3713          offBitsSrc : DWORD;
3714          cbBitsSrc : DWORD;
3715          iUsageSrc : DWORD;
3716          dwRop : DWORD;
3717          cxDest : LONG;
3718          cyDest : LONG;
3719       end;
3720     tagEMRSTRETCHDIBITS = EMRSTRETCHDIBITS;
3721     TEMRSTRETCHDIBITS = EMRSTRETCHDIBITS;
3722     PEMRSTRETCHDIBITS = ^EMRSTRETCHDIBITS;
3723
3724     EMRABORTPATH = record
3725          emr : EMR;
3726       end;
3727     TEMRABORTPATH = EMRABORTPATH;
3728     PEMRABORTPATH = ^EMRABORTPATH;
3729
3730     tagABORTPATH = EMRABORTPATH;
3731     TABORTPATH = EMRABORTPATH;
3732
3733     EMRBEGINPATH = EMRABORTPATH;
3734     TEMRBEGINPATH = EMRABORTPATH;
3735     PEMRBEGINPATH = ^EMRABORTPATH;
3736
3737     EMRENDPATH = EMRABORTPATH;
3738     TEMRENDPATH = EMRABORTPATH;
3739     PEMRENDPATH = ^EMRABORTPATH;
3740
3741     EMRCLOSEFIGURE = EMRABORTPATH;
3742     TEMRCLOSEFIGURE = EMRABORTPATH;
3743     PEMRCLOSEFIGURE = ^EMRABORTPATH;
3744
3745     EMRFLATTENPATH = EMRABORTPATH;
3746     TEMRFLATTENPATH = EMRABORTPATH;
3747     PEMRFLATTENPATH = ^EMRABORTPATH;
3748
3749     EMRWIDENPATH = EMRABORTPATH;
3750     TEMRWIDENPATH = EMRABORTPATH;
3751     PEMRWIDENPATH = ^EMRABORTPATH;
3752
3753     EMRSETMETARGN = EMRABORTPATH;
3754     TEMRSETMETARGN = EMRABORTPATH;
3755     PEMRSETMETARGN = ^EMRABORTPATH;
3756
3757     EMRSAVEDC = EMRABORTPATH;
3758     TEMRSAVEDC = EMRABORTPATH;
3759     PEMRSAVEDC = ^EMRABORTPATH;
3760
3761     EMRREALIZEPALETTE = EMRABORTPATH;
3762     TEMRREALIZEPALETTE = EMRABORTPATH;
3763     PEMRREALIZEPALETTE = ^EMRABORTPATH;
3764
3765     EMRSELECTCLIPPATH = record
3766          emr : EMR;
3767          iMode : DWORD;
3768       end;
3769     tagEMRSELECTCLIPPATH = EMRSELECTCLIPPATH;
3770     TEMRSELECTCLIPPATH = EMRSELECTCLIPPATH;
3771     PEMRSELECTCLIPPATH = ^EMRSELECTCLIPPATH;
3772
3773     EMRSETBKMODE = EMRSELECTCLIPPATH;
3774     TEMRSETBKMODE = EMRSELECTCLIPPATH;
3775     PEMRSETBKMODE = ^EMRSELECTCLIPPATH;
3776
3777     EMRSETMAPMODE = EMRSELECTCLIPPATH;
3778     TEMRSETMAPMODE = EMRSELECTCLIPPATH;
3779     PEMRSETMAPMODE = ^EMRSELECTCLIPPATH;
3780
3781     EMRSETPOLYFILLMODE = EMRSELECTCLIPPATH;
3782     TEMRSETPOLYFILLMODE = EMRSELECTCLIPPATH;
3783     PEMRSETPOLYFILLMODE = ^EMRSELECTCLIPPATH;
3784
3785     EMRSETROP2 = EMRSELECTCLIPPATH;
3786     TEMRSETROP2 = EMRSELECTCLIPPATH;
3787     PEMRSETROP2 = ^EMRSELECTCLIPPATH;
3788
3789     EMRSETSTRETCHBLTMODE = EMRSELECTCLIPPATH;
3790     TEMRSETSTRETCHBLTMODE = EMRSELECTCLIPPATH;
3791     PEMRSETSTRETCHBLTMODE = ^EMRSELECTCLIPPATH;
3792
3793     EMRSETTEXTALIGN = EMRSELECTCLIPPATH;
3794     TEMRSETTEXTALIGN = EMRSELECTCLIPPATH;
3795     PEMRSETTEXTALIGN = ^EMRSELECTCLIPPATH;
3796
3797     EMRENABLEICM = EMRSELECTCLIPPATH;
3798     TEMRENABLEICM = EMRSELECTCLIPPATH;
3799     PEMRENABLEICM = ^EMRSELECTCLIPPATH;
3800
3801     NMHDR = record
3802          hwndFrom : HWND;
3803          idFrom : UINT;
3804          code : UINT;
3805       end;
3806     tagNMHDR = NMHDR;
3807     TNMHDR = NMHDR;
3808     PNMHDR = ^NMHDR;
3809
3810     ENCORRECTTEXT = record
3811          nmhdr : NMHDR;
3812          chrg : CHARRANGE;
3813          seltyp : WORD;
3814       end;
3815     _encorrecttext = ENCORRECTTEXT;
3816     Tencorrecttext = ENCORRECTTEXT;
3817     Pencorrecttext = ^ENCORRECTTEXT;
3818
3819     ENDROPFILES = record
3820          nmhdr : NMHDR;
3821          hDrop : HANDLE;
3822          cp : LONG;
3823          fProtected : WINBOOL;
3824       end;
3825     _endropfiles = ENDROPFILES;
3826     Tendropfiles = ENDROPFILES;
3827     Pendropfiles = ^ENDROPFILES;
3828
3829     ENSAVECLIPBOARD = record
3830          nmhdr : NMHDR;
3831          cObjectCount : LONG;
3832          cch : LONG;
3833       end;
3834     TENSAVECLIPBOARD = ENSAVECLIPBOARD;
3835     PENSAVECLIPBOARD = ^ENSAVECLIPBOARD;
3836
3837     ENOLEOPFAILED = record
3838          nmhdr : NMHDR;
3839          iob : LONG;
3840          lOper : LONG;
3841          hr : HRESULT;
3842       end;
3843     TENOLEOPFAILED = ENOLEOPFAILED;
3844     PENOLEOPFAILED = ^ENOLEOPFAILED;
3845
3846     ENHMETAHEADER = record
3847          iType : DWORD;
3848          nSize : DWORD;
3849          rclBounds : RECTL;
3850          rclFrame : RECTL;
3851          dSignature : DWORD;
3852          nVersion : DWORD;
3853          nBytes : DWORD;
3854          nRecords : DWORD;
3855          nHandles : WORD;
3856          sReserved : WORD;
3857          nDescription : DWORD;
3858          offDescription : DWORD;
3859          nPalEntries : DWORD;
3860          szlDevice : SIZEL;
3861          szlMillimeters : SIZEL;
3862       end;
3863     LPENHMETAHEADER = ^ENHMETAHEADER;
3864     tagENHMETAHEADER = ENHMETAHEADER;
3865     TENHMETAHEADER = ENHMETAHEADER;
3866     PENHMETAHEADER = ^ENHMETAHEADER;
3867
3868     ENHMETARECORD = record
3869          iType : DWORD;
3870          nSize : DWORD;
3871          dParm : array[0..0] of DWORD;
3872       end;
3873     LPENHMETARECORD = ^ENHMETARECORD;
3874     tagENHMETARECORD = ENHMETARECORD;
3875     TENHMETARECORD = ENHMETARECORD;
3876     PENHMETARECORD = ^ENHMETARECORD;
3877
3878     ENPROTECTED = record
3879          nmhdr : NMHDR;
3880          msg : UINT;
3881          wParam : WPARAM;
3882          lParam : LPARAM;
3883          chrg : CHARRANGE;
3884       end;
3885     _enprotected = ENPROTECTED;
3886     Tenprotected = ENPROTECTED;
3887     Penprotected = ^ENPROTECTED;
3888
3889     SERVICE_STATUS = record
3890          dwServiceType : DWORD;
3891          dwCurrentState : DWORD;
3892          dwControlsAccepted : DWORD;
3893          dwWin32ExitCode : DWORD;
3894          dwServiceSpecificExitCode : DWORD;
3895          dwCheckPoint : DWORD;
3896          dwWaitHint : DWORD;
3897       end;
3898     LPSERVICE_STATUS = ^SERVICE_STATUS;
3899     _SERVICE_STATUS = SERVICE_STATUS;
3900     TSERVICESTATUS = SERVICE_STATUS;
3901     PSERVICESTATUS = ^SERVICE_STATUS;
3902
3903     ENUM_SERVICE_STATUS = record
3904          lpServiceName : LPTSTR;
3905          lpDisplayName : LPTSTR;
3906          ServiceStatus : SERVICE_STATUS;
3907       end;
3908     LPENUM_SERVICE_STATUS = ^ENUM_SERVICE_STATUS;
3909     _ENUM_SERVICE_STATUS = ENUM_SERVICE_STATUS;
3910     TENUMSERVICESTATUS = ENUM_SERVICE_STATUS;
3911     PENUMSERVICESTATUS = ^ENUM_SERVICE_STATUS;
3912
3913     ENUMLOGFONT = record
3914          elfLogFont : LOGFONT;
3915          elfFullName : array[0..(LF_FULLFACESIZE)-1] of BCHAR;
3916          elfStyle : array[0..(LF_FACESIZE)-1] of BCHAR;
3917       end;
3918     tagENUMLOGFONT = ENUMLOGFONT;
3919     TENUMLOGFONT = ENUMLOGFONT;
3920     PENUMLOGFONT = ^ENUMLOGFONT;
3921
3922     ENUMLOGFONTEX = record
3923          elfLogFont : LOGFONT;
3924          elfFullName : array[0..(LF_FULLFACESIZE)-1] of BCHAR;
3925          elfStyle : array[0..(LF_FACESIZE)-1] of BCHAR;
3926          elfScript : array[0..(LF_FACESIZE)-1] of BCHAR;
3927       end;
3928     tagENUMLOGFONTEX = ENUMLOGFONTEX;
3929     TENUMLOGFONTEX = ENUMLOGFONTEX;
3930     PENUMLOGFONTEX = ^ENUMLOGFONTEX;
3931  {
3932    Then follow:
3933
3934    TCHAR SourceName[]
3935    TCHAR Computername[]
3936    SID   UserSid
3937    TCHAR Strings[]
3938    BYTE  Data[]
3939    CHAR  Pad[]
3940    DWORD Length;
3941   }
3942
3943     EVENTLOGRECORD = record
3944          Length : DWORD;
3945          Reserved : DWORD;
3946          RecordNumber : DWORD;
3947          TimeGenerated : DWORD;
3948          TimeWritten : DWORD;
3949          EventID : DWORD;
3950          EventType : WORD;
3951          NumStrings : WORD;
3952          EventCategory : WORD;
3953          ReservedFlags : WORD;
3954          ClosingRecordNumber : DWORD;
3955          StringOffset : DWORD;
3956          UserSidLength : DWORD;
3957          UserSidOffset : DWORD;
3958          DataLength : DWORD;
3959          DataOffset : DWORD;
3960       end;
3961     _EVENTLOGRECORD = EVENTLOGRECORD;
3962     TEVENTLOGRECORD = EVENTLOGRECORD;
3963     PEVENTLOGRECORD = ^EVENTLOGRECORD;
3964
3965     EVENTMSG = record
3966          message : UINT;
3967          paramL : UINT;
3968          paramH : UINT;
3969          time : DWORD;
3970          hwnd : HWND;
3971       end;
3972     tagEVENTMSG = EVENTMSG;
3973     TEVENTMSG = EVENTMSG;
3974     PEVENTMSG = ^EVENTMSG;
3975
3976     EXCEPTION_POINTERS = record                //winnt
3977          ExceptionRecord : PEXCEPTION_RECORD;
3978          ContextRecord : PCONTEXT;
3979       end;
3980     LPEXCEPTION_POINTERS = ^EXCEPTION_POINTERS;
3981     PEXCEPTION_POINTERS = ^EXCEPTION_POINTERS;
3982     _EXCEPTION_POINTERS = EXCEPTION_POINTERS;
3983     TEXCEPTIONPOINTERS = EXCEPTION_POINTERS;
3984     PEXCEPTIONPOINTERS = ^EXCEPTION_POINTERS;
3985
3986     EXT_BUTTON = record
3987          idCommand : WORD;
3988          idsHelp : WORD;
3989          fsStyle : WORD;
3990       end;
3991     LPEXT_BUTTON = ^EXT_BUTTON;
3992     _EXT_BUTTON = EXT_BUTTON;
3993     TEXTBUTTON = EXT_BUTTON;
3994     PEXTBUTTON = ^EXT_BUTTON;
3995
3996     FILTERKEYS = record
3997          cbSize : UINT;
3998          dwFlags : DWORD;
3999          iWaitMSec : DWORD;
4000          iDelayMSec : DWORD;
4001          iRepeatMSec : DWORD;
4002          iBounceMSec : DWORD;
4003       end;
4004     tagFILTERKEYS = FILTERKEYS;
4005     TFILTERKEYS = FILTERKEYS;
4006     PFILTERKEYS = ^FILTERKEYS;
4007
4008     FIND_NAME_BUFFER = record
4009          length : UCHAR;
4010          access_control : UCHAR;
4011          frame_control : UCHAR;
4012          destination_addr : array[0..5] of UCHAR;
4013          source_addr : array[0..5] of UCHAR;
4014          routing_info : array[0..17] of UCHAR;
4015       end;
4016     _FIND_NAME_BUFFER = FIND_NAME_BUFFER;
4017     TFINDNAMEBUFFER = FIND_NAME_BUFFER;
4018     PFINDNAMEBUFFER = ^FIND_NAME_BUFFER;
4019
4020     FIND_NAME_HEADER = record
4021          node_count : WORD;
4022          reserved : UCHAR;
4023          unique_group : UCHAR;
4024       end;
4025     _FIND_NAME_HEADER = FIND_NAME_HEADER;
4026     TFINDNAMEHEADER = FIND_NAME_HEADER;
4027     PFINDNAMEHEADER = ^FIND_NAME_HEADER;
4028
4029     FINDREPLACE = record
4030          lStructSize : DWORD;
4031          hwndOwner : HWND;
4032          hInstance : HINST;
4033          Flags : DWORD;
4034          lpstrFindWhat : LPTSTR;
4035          lpstrReplaceWith : LPTSTR;
4036          wFindWhatLen : WORD;
4037          wReplaceWithLen : WORD;
4038          lCustData : LPARAM;
4039          lpfnHook : LPFRHOOKPROC;
4040          lpTemplateName : LPCTSTR;
4041       end;
4042     LPFINDREPLACE = ^FINDREPLACE;
4043     TFINDREPLACE = FINDREPLACE;
4044     PFINDREPLACE = ^FINDREPLACE;
4045
4046     {FINDTEXT = record conflicts with FindText function }
4047     TFINDTEXT = record
4048          chrg : CHARRANGE;
4049          lpstrText : LPSTR;
4050       end;
4051     _findtext = TFINDTEXT;
4052     Pfindtext = ^TFINDTEXT;
4053
4054     FINDTEXTEX = record
4055          chrg : CHARRANGE;
4056          lpstrText : LPSTR;
4057          chrgText : CHARRANGE;
4058       end;
4059     _findtextex = FINDTEXTEX;
4060     Tfindtextex = FINDTEXTEX;
4061     Pfindtextex = ^FINDTEXTEX;
4062
4063     FMS_GETDRIVEINFO = record
4064          dwTotalSpace : DWORD;
4065          dwFreeSpace : DWORD;
4066          szPath : array[0..259] of TCHAR;
4067          szVolume : array[0..13] of TCHAR;
4068          szShare : array[0..127] of TCHAR;
4069       end;
4070     _FMS_GETDRIVEINFO = FMS_GETDRIVEINFO;
4071     TFMSGETDRIVEINFO = FMS_GETDRIVEINFO;
4072     PFMSGETDRIVEINFO = ^FMS_GETDRIVEINFO;
4073
4074     FMS_GETFILESEL = record
4075          ftTime : FILETIME;
4076          dwSize : DWORD;
4077          bAttr : BYTE;
4078          szName : array[0..259] of TCHAR;
4079       end;
4080     _FMS_GETFILESEL = FMS_GETFILESEL;
4081     TFMSGETFILESEL = FMS_GETFILESEL;
4082     PFMSGETFILESEL = ^FMS_GETFILESEL;
4083
4084     FMS_LOAD = record
4085          dwSize : DWORD;
4086          szMenuName : array[0..(MENU_TEXT_LEN)-1] of TCHAR;
4087          hMenu : HMENU;
4088          wMenuDelta : UINT;
4089       end;
4090     _FMS_LOAD = FMS_LOAD;
4091     TFMSLOAD = FMS_LOAD;
4092     PFMSLOAD = ^FMS_LOAD;
4093
4094     FMS_TOOLBARLOAD = record
4095          dwSize : DWORD;
4096          lpButtons : LPEXT_BUTTON;
4097          cButtons : WORD;
4098          cBitmaps : WORD;
4099          idBitmap : WORD;
4100          hBitmap : HBITMAP;
4101       end;
4102     _FMS_TOOLBARLOAD = FMS_TOOLBARLOAD;
4103     TFMSTOOLBARLOAD = FMS_TOOLBARLOAD;
4104     PFMSTOOLBARLOAD = ^FMS_TOOLBARLOAD;
4105
4106     FOCUS_EVENT_RECORD = record
4107          bSetFocus : WINBOOL;
4108       end;
4109     _FOCUS_EVENT_RECORD = FOCUS_EVENT_RECORD;
4110     TFOCUSEVENTRECORD = FOCUS_EVENT_RECORD;
4111     PFOCUSEVENTRECORD = ^FOCUS_EVENT_RECORD;
4112
4113     FORM_INFO_1 = record
4114          Flags : DWORD;
4115          pName : LPTSTR;
4116          Size : SIZEL;
4117          ImageableArea : RECTL;
4118       end;
4119     _FORM_INFO_1 = FORM_INFO_1;
4120     TFORMINFO1 = FORM_INFO_1;
4121     PFORMINFO1 = ^FORM_INFO_1;
4122
4123     FORMAT_PARAMETERS = record
4124          MediaType : MEDIA_TYPE;
4125          StartCylinderNumber : DWORD;
4126          EndCylinderNumber : DWORD;
4127          StartHeadNumber : DWORD;
4128          EndHeadNumber : DWORD;
4129       end;
4130     _FORMAT_PARAMETERS = FORMAT_PARAMETERS;
4131     TFORMATPARAMETERS = FORMAT_PARAMETERS;
4132     PFORMATPARAMETERS = ^FORMAT_PARAMETERS;
4133
4134     FORMATRANGE = record
4135          _hdc : HDC;
4136          hdcTarget : HDC;
4137          rc : RECT;
4138          rcPage : RECT;
4139          chrg : CHARRANGE;
4140       end;
4141     _formatrange = FORMATRANGE;
4142     Tformatrange = FORMATRANGE;
4143     Pformatrange = ^FORMATRANGE;
4144
4145     GCP_RESULTS = record
4146          lStructSize : DWORD;
4147          lpOutString : LPTSTR;
4148          lpOrder : ^UINT;
4149          lpDx : ^WINT;
4150          lpCaretPos : ^WINT;
4151          lpClass : LPTSTR;
4152          lpGlyphs : ^UINT;
4153          nGlyphs : UINT;
4154          nMaxFit : UINT;
4155       end;
4156     LPGCP_RESULTS = ^GCP_RESULTS;
4157     tagGCP_RESULTS = GCP_RESULTS;
4158     TGCPRESULTS = GCP_RESULTS;
4159     PGCPRESULTS = ^GCP_RESULTS;
4160//
4161//  Define the generic mapping array.  This is used to denote the
4162//  mapping of each generic access right to a specific access mask.
4163//
4164     GENERIC_MAPPING = record       //winnt
4165          GenericRead : ACCESS_MASK;
4166          GenericWrite : ACCESS_MASK;
4167          GenericExecute : ACCESS_MASK;
4168          GenericAll : ACCESS_MASK;
4169       end;
4170     PGENERIC_MAPPING = ^GENERIC_MAPPING;
4171     _GENERIC_MAPPING = GENERIC_MAPPING;
4172     TGENERICMAPPING = GENERIC_MAPPING;
4173     PGENERICMAPPING = ^GENERIC_MAPPING;
4174
4175     GLYPHMETRICS = record
4176          gmBlackBoxX : UINT;
4177          gmBlackBoxY : UINT;
4178          gmptGlyphOrigin : POINT;
4179          gmCellIncX : integer;
4180          gmCellIncY : integer;
4181       end;
4182     LPGLYPHMETRICS = ^GLYPHMETRICS;
4183     _GLYPHMETRICS = GLYPHMETRICS;
4184     TGLYPHMETRICS = GLYPHMETRICS;
4185     PGLYPHMETRICS = ^GLYPHMETRICS;
4186
4187     HANDLETABLE = record
4188          objectHandle : array[0..0] of HGDIOBJ;
4189       end;
4190     tagHANDLETABLE = HANDLETABLE;
4191     THANDLETABLE = HANDLETABLE;
4192     LPHANDLETABLE = ^HANDLETABLE;
4193
4194     HD_HITTESTINFO = record
4195          pt : POINT;
4196          flags : UINT;
4197          iItem : longint;
4198       end;
4199     _HD_HITTESTINFO = HD_HITTESTINFO;
4200     THDHITTESTINFO = HD_HITTESTINFO;
4201     PHDHITTESTINFO = ^HD_HITTESTINFO;
4202
4203     HD_ITEM = record
4204          mask : UINT;
4205          cxy : longint;
4206          pszText : LPTSTR;
4207          hbm : HBITMAP;
4208          cchTextMax : longint;
4209          fmt : longint;
4210          lParam : LPARAM;
4211       end;
4212     _HD_ITEM = HD_ITEM;
4213     THDITEM = HD_ITEM;
4214     PHDITEM = ^HD_ITEM;
4215
4216     WINDOWPOS = record
4217          _hwnd : HWND;
4218          hwndInsertAfter : HWND;
4219          x : longint;
4220          y : longint;
4221          cx : longint;
4222          cy : longint;
4223          flags : UINT;
4224       end;
4225     LPWINDOWPOS = ^WINDOWPOS;
4226     _WINDOWPOS = WINDOWPOS;
4227     TWINDOWPOS = WINDOWPOS;
4228     PWINDOWPOS = ^WINDOWPOS;
4229
4230     HD_LAYOUT = record
4231          prc : ^RECT;
4232          pwpos : ^WINDOWPOS;
4233       end;
4234     _HD_LAYOUT = HD_LAYOUT;
4235     THDLAYOUT = HD_LAYOUT;
4236     PHDLAYOUT = ^HD_LAYOUT;
4237
4238     HD_NOTIFY = record
4239          hdr : NMHDR;
4240          iItem : longint;
4241          iButton : longint;
4242          pitem : ^HD_ITEM;
4243       end;
4244     _HD_NOTIFY = HD_NOTIFY;
4245     THDNOTIFY = HD_NOTIFY;
4246     PHDNOTIFY = ^HD_NOTIFY;
4247
4248     HELPINFO = record
4249          cbSize : UINT;
4250          iContextType : longint;
4251          iCtrlId : longint;
4252          hItemHandle : HANDLE;
4253          dwContextId : DWORD;
4254          MousePos : POINT;
4255       end;
4256     LPHELPINFO = ^HELPINFO;
4257     tagHELPINFO = HELPINFO;
4258     THELPINFO = HELPINFO;
4259     PHELPINFO = ^HELPINFO;
4260
4261     HELPWININFO = record
4262          wStructSize : longint;
4263          x : longint;
4264          y : longint;
4265          dx : longint;
4266          dy : longint;
4267          wMax : longint;
4268          rgchMember : array[0..1] of TCHAR;
4269       end;
4270     THELPWININFO = HELPWININFO;
4271     PHELPWININFO = ^HELPWININFO;
4272
4273     HIGHCONTRAST = record
4274          cbSize : UINT;
4275          dwFlags : DWORD;
4276          lpszDefaultScheme : LPTSTR;
4277       end;
4278     LPHIGHCONTRAST = ^HIGHCONTRAST;
4279     tagHIGHCONTRAST = HIGHCONTRAST;
4280     THIGHCONTRAST = HIGHCONTRAST;
4281     PHIGHCONTRAST = ^HIGHCONTRAST;
4282
4283     HSZPAIR = record
4284          hszSvc : HSZ;
4285          hszTopic : HSZ;
4286       end;
4287     tagHSZPAIR = HSZPAIR;
4288     THSZPAIR = HSZPAIR;
4289     PHSZPAIR = ^HSZPAIR;
4290
4291     ICONINFO = record
4292          fIcon : WINBOOL;
4293          xHotspot : DWORD;
4294          yHotspot : DWORD;
4295          hbmMask : HBITMAP;
4296          hbmColor : HBITMAP;
4297       end;
4298     _ICONINFO = ICONINFO;
4299     TICONINFO = ICONINFO;
4300     PICONINFO = ^ICONINFO;
4301
4302     ICONMETRICS = record
4303          cbSize : UINT;
4304          iHorzSpacing : longint;
4305          iVertSpacing : longint;
4306          iTitleWrap : longint;
4307          lfFont : LOGFONT;
4308       end;
4309     LPICONMETRICS = ^ICONMETRICS;
4310     tagICONMETRICS = ICONMETRICS;
4311     TICONMETRICS = ICONMETRICS;
4312     PICONMETRICS = ^ICONMETRICS;
4313
4314     IMAGELISTDRAWPARAMS = record  //+commctrl
4315          cbSize : DWORD;
4316          himl : HIMAGELIST;
4317          i : Integer;
4318          hdcDst : HDC;
4319          x : Integer;
4320          y : Integer;
4321          cx : Integer;
4322          cy : Integer;
4323          xBitmap : Integer;        // x offest from the upperleft of bitmap
4324          yBitmap : Integer;        // y offset from the upperleft of bitmap
4325          rgbBk  : COLORREF;
4326          rgbFg  : COLORREF;
4327          fStyle  : UINT;
4328          dwRop : DWORD;
4329       end;
4330
4331     _IMAGELISTDRAWPARAMS=IMAGELISTDRAWPARAMS;
4332     PIMAGELISTDRAWPARAMS=^IMAGELISTDRAWPARAMS;
4333
4334     IMAGEINFO = record
4335          hbmImage : HBITMAP;
4336          hbmMask : HBITMAP;
4337          Unused1 : longint;
4338          Unused2 : longint;
4339          rcImage : RECT;
4340       end;
4341     _IMAGEINFO = IMAGEINFO;
4342     TIMAGEINFO = IMAGEINFO;
4343     PIMAGEINFO = ^IMAGEINFO;
4344
4345     KEY_EVENT_RECORD = packed record
4346          bKeyDown : WINBOOL;
4347          wRepeatCount : WORD;
4348          wVirtualKeyCode : WORD;
4349          wVirtualScanCode : WORD;
4350          case longint of
4351             0 : ( UnicodeChar : WCHAR;
4352                   dwControlKeyState : DWORD; );
4353             1 : ( AsciiChar : CHAR );
4354       end;
4355     _KEY_EVENT_RECORD = KEY_EVENT_RECORD;
4356     TKEYEVENTRECORD = KEY_EVENT_RECORD;
4357     PKEYEVENTRECORD = ^KEY_EVENT_RECORD;
4358
4359     MOUSE_EVENT_RECORD = record
4360          dwMousePosition : COORD;
4361          dwButtonState : DWORD;
4362          dwControlKeyState : DWORD;
4363          dwEventFlags : DWORD;
4364       end;
4365     _MOUSE_EVENT_RECORD = MOUSE_EVENT_RECORD;
4366     TMOUSEEVENTRECORD = MOUSE_EVENT_RECORD;
4367     PMOUSEEVENTRECORD = ^MOUSE_EVENT_RECORD;
4368
4369     WINDOW_BUFFER_SIZE_RECORD = record
4370          dwSize : COORD;
4371       end;
4372     _WINDOW_BUFFER_SIZE_RECORD = WINDOW_BUFFER_SIZE_RECORD;
4373     TWINDOWBUFFERSIZERECORD = WINDOW_BUFFER_SIZE_RECORD;
4374     PWINDOWBUFFERSIZERECORD = ^WINDOW_BUFFER_SIZE_RECORD;
4375
4376     MENU_EVENT_RECORD = record
4377          dwCommandId : UINT;
4378       end;
4379     PMENU_EVENT_RECORD = ^MENU_EVENT_RECORD;
4380     _MENU_EVENT_RECORD = MENU_EVENT_RECORD;
4381     TMENUEVENTRECORD = MENU_EVENT_RECORD;
4382     PMENUEVENTRECORD = ^MENU_EVENT_RECORD;
4383
4384     INPUT_RECORD = record
4385          EventType: Word;
4386          Reserved: Word;
4387          Event : record case longint of
4388                 0 : ( KeyEvent : KEY_EVENT_RECORD );
4389                 1 : ( MouseEvent : MOUSE_EVENT_RECORD );
4390                 2 : ( WindowBufferSizeEvent : WINDOW_BUFFER_SIZE_RECORD );
4391                 3 : ( MenuEvent : MENU_EVENT_RECORD );
4392                 4 : ( FocusEvent : FOCUS_EVENT_RECORD );
4393       end;
4394      end;
4395     PINPUT_RECORD = ^INPUT_RECORD;
4396     _INPUT_RECORD = INPUT_RECORD;
4397     TINPUTRECORD = INPUT_RECORD;
4398     PINPUTRECORD = ^INPUT_RECORD;
4399
4400     SYSTEMTIME = record
4401          case integer of
4402           1 : (
4403             wYear : WORD;
4404             wMonth : WORD;
4405             wDayOfWeek : WORD;
4406             wDay : WORD;
4407             wHour : WORD;
4408             wMinute : WORD;
4409             wSecond : WORD;
4410             wMilliseconds : WORD;
4411               );
4412           { Compatibility for FPC }
4413           2 : (
4414             Year : WORD;
4415             Month : WORD;
4416             DayOfWeek : WORD;
4417             Day : WORD;
4418             Hour : WORD;
4419             Minute : WORD;
4420             Second : WORD;
4421             Millisecond : WORD;
4422               );
4423       end;
4424     LPSYSTEMTIME = ^SYSTEMTIME;
4425     _SYSTEMTIME = SYSTEMTIME;
4426     TSYSTEMTIME = SYSTEMTIME;
4427     PSYSTEMTIME = ^SYSTEMTIME;
4428
4429     JOB_INFO_1 = record
4430          JobId : DWORD;
4431          pPrinterName : LPTSTR;
4432          pMachineName : LPTSTR;
4433          pUserName : LPTSTR;
4434          pDocument : LPTSTR;
4435          pDatatype : LPTSTR;
4436          pStatus : LPTSTR;
4437          Status : DWORD;
4438          Priority : DWORD;
4439          Position : DWORD;
4440          TotalPages : DWORD;
4441          PagesPrinted : DWORD;
4442          Submitted : SYSTEMTIME;
4443       end;
4444     _JOB_INFO_1 = JOB_INFO_1;
4445     TJOBINFO1 = JOB_INFO_1;
4446     PJOBINFO1 = ^JOB_INFO_1;
4447
4448     SID_AND_ATTRIBUTES = record  //~winnt, moved with SID declarations
4449          Sid : PSID;
4450          Attributes : DWORD;
4451       end;
4452     _SID_AND_ATTRIBUTES = SID_AND_ATTRIBUTES;
4453     TSIDANDATTRIBUTES = SID_AND_ATTRIBUTES;
4454     PSIDANDATTRIBUTES = ^SID_AND_ATTRIBUTES;
4455
4456     SID_AND_ATTRIBUTES_ARRAY = array[0..(ANYSIZE_ARRAY)-1] of SID_AND_ATTRIBUTES; //winnt
4457     PSID_AND_ATTRIBUTES_ARRAY = ^SID_AND_ATTRIBUTES_ARRAY;
4458     TSIDANDATTRIBUTESARRAY = SID_AND_ATTRIBUTES_ARRAY;
4459     PSIDANDATTRIBUTESARRAY = ^SID_AND_ATTRIBUTES_ARRAY;
4460
4461     SECURITY_DESCRIPTOR_CONTROL = WORD;
4462     PSECURITY_DESCRIPTOR_CONTROL = ^SECURITY_DESCRIPTOR_CONTROL;
4463     TSECURITYDESCRIPTORCONTROL = SECURITY_DESCRIPTOR_CONTROL;
4464     PSECURITYDESCRIPTORCONTROL = ^SECURITY_DESCRIPTOR_CONTROL;
4465
4466     SECURITY_DESCRIPTOR = record
4467          Revision : BYTE;
4468          Sbz1 : BYTE;
4469          Control : SECURITY_DESCRIPTOR_CONTROL;
4470          Owner : PSID;
4471          Group : PSID;
4472          Sacl : PACL;
4473          Dacl : PACL;
4474       end;
4475     PSECURITY_DESCRIPTOR = ^SECURITY_DESCRIPTOR;
4476     _SECURITY_DESCRIPTOR = SECURITY_DESCRIPTOR;
4477     TSECURITYDESCRIPTOR = SECURITY_DESCRIPTOR;
4478     PSECURITYDESCRIPTOR = ^SECURITY_DESCRIPTOR;
4479
4480     JOB_INFO_2 = record
4481          JobId : DWORD;
4482          pPrinterName : LPTSTR;
4483          pMachineName : LPTSTR;
4484          pUserName : LPTSTR;
4485          pDocument : LPTSTR;
4486          pNotifyName : LPTSTR;
4487          pDatatype : LPTSTR;
4488          pPrintProcessor : LPTSTR;
4489          pParameters : LPTSTR;
4490          pDriverName : LPTSTR;
4491          pDevMode : LPDEVMODE;
4492          pStatus : LPTSTR;
4493          pSecurityDescriptor : PSECURITY_DESCRIPTOR;
4494          Status : DWORD;
4495          Priority : DWORD;
4496          Position : DWORD;
4497          StartTime : DWORD;
4498          UntilTime : DWORD;
4499          TotalPages : DWORD;
4500          Size : DWORD;
4501          Submitted : SYSTEMTIME;
4502          Time : DWORD;
4503          PagesPrinted : DWORD;
4504       end;
4505     _JOB_INFO_2 = JOB_INFO_2;
4506     TJOBINFO2 = JOB_INFO_2;
4507     PJOBINFO2 = ^JOB_INFO_2;
4508
4509     KERNINGPAIR = record
4510          wFirst : WORD;
4511          wSecond : WORD;
4512          iKernAmount : longint;
4513       end;
4514     LPKERNINGPAIR = ^KERNINGPAIR;
4515     tagKERNINGPAIR = KERNINGPAIR;
4516     TKERNINGPAIR = KERNINGPAIR;
4517     PKERNINGPAIR = ^KERNINGPAIR;
4518
4519     LANA_ENUM = record
4520          length : UCHAR;
4521          lana : array[0..(MAX_LANA)-1] of UCHAR;
4522       end;
4523     _LANA_ENUM = LANA_ENUM;
4524     TLANAENUM = LANA_ENUM;
4525     PLANAENUM = ^LANA_ENUM;
4526  const
4527     bm_LDT_ENTRY_BaseMid = $FF;
4528     bp_LDT_ENTRY_BaseMid = 0;
4529     bm_LDT_ENTRY_Type = $1F00;
4530     bp_LDT_ENTRY_Type = 8;
4531     bm_LDT_ENTRY_Dpl = $6000;
4532     bp_LDT_ENTRY_Dpl = 13;
4533     bm_LDT_ENTRY_Pres = $8000;
4534     bp_LDT_ENTRY_Pres = 15;
4535     bm_LDT_ENTRY_LimitHi = $F0000;
4536     bp_LDT_ENTRY_LimitHi = 16;
4537     bm_LDT_ENTRY_Sys = $100000;
4538     bp_LDT_ENTRY_Sys = 20;
4539     bm_LDT_ENTRY_Reserved_0 = $200000;
4540     bp_LDT_ENTRY_Reserved_0 = 21;
4541     bm_LDT_ENTRY_Default_Big = $400000;
4542     bp_LDT_ENTRY_Default_Big = 22;
4543     bm_LDT_ENTRY_Granularity = $800000;
4544     bp_LDT_ENTRY_Granularity = 23;
4545     bm_LDT_ENTRY_BaseHi = $FF000000;
4546     bp_LDT_ENTRY_BaseHi = 24;
4547
4548  type
4549
4550     LOCALESIGNATURE = record
4551          lsUsb : array[0..3] of DWORD;
4552          lsCsbDefault : array[0..1] of DWORD;
4553          lsCsbSupported : array[0..1] of DWORD;
4554       end;
4555     tagLOCALESIGNATURE = LOCALESIGNATURE;
4556     TLOCALESIGNATURE = LOCALESIGNATURE;
4557     PLOCALESIGNATURE = ^LOCALESIGNATURE;
4558
4559     LOCALGROUP_MEMBERS_INFO_0 = record
4560          lgrmi0_sid : PSID;
4561       end;
4562     _LOCALGROUP_MEMBERS_INFO_0 = LOCALGROUP_MEMBERS_INFO_0;
4563     TLOCALGROUPMEMBERSINFO0 = LOCALGROUP_MEMBERS_INFO_0;
4564     PLOCALGROUPMEMBERSINFO0 = ^LOCALGROUP_MEMBERS_INFO_0;
4565
4566     LOCALGROUP_MEMBERS_INFO_3 = record
4567          lgrmi3_domainandname : LPWSTR;
4568       end;
4569     _LOCALGROUP_MEMBERS_INFO_3 = LOCALGROUP_MEMBERS_INFO_3;
4570     TLOCALGROUPMEMBERSINFO3 = LOCALGROUP_MEMBERS_INFO_3;
4571     PLOCALGROUPMEMBERSINFO3 = ^LOCALGROUP_MEMBERS_INFO_3;
4572
4573     FXPT16DOT16 = longint;
4574     LPFXPT16DOT16 = ^FXPT16DOT16;
4575     TFXPT16DOT16 = FXPT16DOT16;
4576     PFXPT16DOT16 = ^FXPT16DOT16;
4577
4578     LUID_AND_ATTRIBUTES = record  //winnt
4579          Luid : LUID;
4580          Attributes : DWORD;
4581       end;
4582     _LUID_AND_ATTRIBUTES = LUID_AND_ATTRIBUTES;
4583     TLUIDANDATTRIBUTES = LUID_AND_ATTRIBUTES;
4584     PLUIDANDATTRIBUTES = ^LUID_AND_ATTRIBUTES;
4585
4586     LUID_AND_ATTRIBUTES_ARRAY = array[0..(ANYSIZE_ARRAY)-1] of LUID_AND_ATTRIBUTES;
4587     PLUID_AND_ATTRIBUTES_ARRAY = ^LUID_AND_ATTRIBUTES_ARRAY;
4588     TLUIDANDATTRIBUTESARRAY = LUID_AND_ATTRIBUTES_ARRAY;
4589     PLUIDANDATTRIBUTESARRAY = ^LUID_AND_ATTRIBUTES_ARRAY;
4590
4591     LV_COLUMN = record
4592          mask : UINT;
4593          fmt : longint;
4594          cx : longint;
4595{$IFDEF UNICODE}
4596          pszText : LPWSTR;
4597{$ELSE UNICODE}
4598          pszText : LPTSTR;
4599{$ENDIF UNICODE}
4600          cchTextMax : longint;
4601          iSubItem : longint;
4602          iImage : Longint;    //#if (_WIN32_IE >= 0x0300)
4603          iOrder : longint;    //#if (_WIN32_IE >= 0x0300)
4604       end;
4605     _LV_COLUMN = LV_COLUMN;
4606     TLVCOLUMN = LV_COLUMN;
4607     PLVCOLUMN = ^LV_COLUMN;
4608
4609     LV_ITEM = record
4610          mask : UINT;
4611          iItem : longint;
4612          iSubItem : longint;
4613          state : UINT;
4614          stateMask : UINT;
4615{$IFDEF UNICODE}
4616          pszText : LPWSTR;
4617{$ELSE UNICODE}
4618          pszText : LPTSTR;
4619{$ENDIF UNICODE}
4620          cchTextMax : longint;
4621          iImage : longint;
4622          lParam : LPARAM;
4623          iIndent: Longint;    //#if (_WIN32_IE >= 0x0300)
4624       end;
4625     _LV_ITEM = LV_ITEM;
4626     TLVITEM = LV_ITEM;
4627     PLVITEM = ^LV_ITEM;
4628
4629     LV_DISPINFO = record
4630          hdr : NMHDR;
4631          item : LV_ITEM;
4632       end;
4633     tagLV_DISPINFO = LV_DISPINFO;
4634     TLVDISPINFO = LV_DISPINFO;
4635     PLVDISPINFO = ^LV_DISPINFO;
4636
4637     LV_FINDINFO = record
4638          flags : UINT;
4639          psz : LPCTSTR;
4640          lParam : LPARAM;
4641          pt : POINT;
4642          vkDirection : UINT;
4643       end;
4644     _LV_FINDINFO = LV_FINDINFO;
4645     TLVFINDINFO = LV_FINDINFO;
4646     PLVFINDINFO = ^LV_FINDINFO;
4647
4648     LV_HITTESTINFO = record
4649          pt : POINT;
4650          flags : UINT;
4651          iItem : longint;
4652       end;
4653     _LV_HITTESTINFO = LV_HITTESTINFO;
4654     TLVHITTESTINFO = LV_HITTESTINFO;
4655     PLVHITTESTINFO = ^LV_HITTESTINFO;
4656
4657     LV_KEYDOWN = record
4658          hdr : NMHDR;
4659          wVKey : WORD;
4660          flags : UINT;
4661       end;
4662     tagLV_KEYDOWN = LV_KEYDOWN;
4663     TLVKEYDOWN = LV_KEYDOWN;
4664     PLVKEYDOWN = ^LV_KEYDOWN;
4665
4666     MAT2 = record
4667          eM11 : FIXED;
4668          eM12 : FIXED;
4669          eM21 : FIXED;
4670          eM22 : FIXED;
4671       end;
4672     _MAT2 = MAT2;
4673     TMAT2 = MAT2;
4674     PMAT2 = ^MAT2;
4675
4676     MDICREATESTRUCT = record
4677          szClass : LPCTSTR;
4678          szTitle : LPCTSTR;
4679          hOwner : HANDLE;
4680          x : longint;
4681          y : longint;
4682          cx : longint;
4683          cy : longint;
4684          style : DWORD;
4685          lParam : LPARAM;
4686       end;
4687     LPMDICREATESTRUCT = ^MDICREATESTRUCT;
4688     tagMDICREATESTRUCT = MDICREATESTRUCT;
4689     TMDICREATESTRUCT = MDICREATESTRUCT;
4690     PMDICREATESTRUCT = ^MDICREATESTRUCT;
4691
4692     MEASUREITEMSTRUCT = record
4693          CtlType : UINT;
4694          CtlID : UINT;
4695          itemID : UINT;
4696          itemWidth : UINT;
4697          itemHeight : UINT;
4698          itemData : DWORD;
4699       end;
4700     LPMEASUREITEMSTRUCT = ^MEASUREITEMSTRUCT;
4701     tagMEASUREITEMSTRUCT = MEASUREITEMSTRUCT;
4702     TMEASUREITEMSTRUCT = MEASUREITEMSTRUCT;
4703     PMEASUREITEMSTRUCT = ^MEASUREITEMSTRUCT;
4704
4705     MEMORY_BASIC_INFORMATION = record
4706          BaseAddress : PVOID;
4707          AllocationBase : PVOID;
4708          AllocationProtect : DWORD;
4709          RegionSize : DWORD;
4710          State : DWORD;
4711          Protect : DWORD;
4712          _Type : DWORD;
4713       end;
4714     PMEMORY_BASIC_INFORMATION = ^MEMORY_BASIC_INFORMATION;
4715     _MEMORY_BASIC_INFORMATION = MEMORY_BASIC_INFORMATION;
4716     TMEMORYBASICINFORMATION = MEMORY_BASIC_INFORMATION;
4717     PMEMORYBASICINFORMATION = ^MEMORY_BASIC_INFORMATION;
4718
4719     MEMORYSTATUS = record
4720          dwLength : DWORD;
4721          dwMemoryLoad : DWORD;
4722          dwTotalPhys : DWORD;
4723          dwAvailPhys : DWORD;
4724          dwTotalPageFile : DWORD;
4725          dwAvailPageFile : DWORD;
4726          dwTotalVirtual : DWORD;
4727          dwAvailVirtual : DWORD;
4728       end;
4729     LPMEMORYSTATUS = ^MEMORYSTATUS;
4730     _MEMORYSTATUS = MEMORYSTATUS;
4731     TMEMORYSTATUS = MEMORYSTATUS;
4732     PMEMORYSTATUS = ^MEMORYSTATUS;
4733
4734     MENUEX_TEMPLATE_HEADER = record
4735          wVersion : WORD;
4736          wOffset : WORD;
4737          dwHelpId : DWORD;
4738       end;
4739     TMENUXTEMPLATEHEADER = MENUEX_TEMPLATE_HEADER;
4740     PMENUXTEMPLATEHEADER = ^MENUEX_TEMPLATE_HEADER;
4741
4742     MENUEX_TEMPLATE_ITEM = record
4743          dwType : DWORD;
4744          dwState : DWORD;
4745          uId : UINT;
4746          bResInfo : BYTE;
4747          szText : array[0..0] of WCHAR;
4748          dwHelpId : DWORD;
4749       end;
4750     TMENUEXTEMPLATEITEM = MENUEX_TEMPLATE_ITEM;
4751     PMENUEXTEMPLATEITEM = ^MENUEX_TEMPLATE_ITEM;
4752
4753     MENUITEMINFO = record
4754          cbSize : UINT;
4755          fMask : UINT;
4756          fType : UINT;
4757          fState : UINT;
4758          wID : UINT;
4759          hSubMenu : HMENU;
4760          hbmpChecked : HBITMAP;
4761          hbmpUnchecked : HBITMAP;
4762          dwItemData : DWORD;
4763          dwTypeData : LPTSTR;
4764          cch : UINT;
4765       end;
4766     LPMENUITEMINFO = ^MENUITEMINFO;
4767     LPCMENUITEMINFO = ^MENUITEMINFO;
4768     tagMENUITEMINFO = MENUITEMINFO;
4769     TMENUITEMINFO = MENUITEMINFO;
4770     TMENUITEMINFOW = MENUITEMINFO;
4771     PMENUITEMINFO = ^MENUITEMINFO;
4772     PMENUITEMINFOW = ^MENUITEMINFO;
4773
4774     MENUITEMTEMPLATE = record
4775          mtOption : WORD;
4776          mtID : WORD;
4777          mtString : array[0..0] of WCHAR;
4778       end;
4779     TMENUITEMTEMPLATE = MENUITEMTEMPLATE;
4780     PMENUITEMTEMPLATE = ^MENUITEMTEMPLATE;
4781
4782     MENUITEMTEMPLATEHEADER = record
4783          versionNumber : WORD;
4784          offset : WORD;
4785       end;
4786     TMENUITEMTEMPLATEHEADER = MENUITEMTEMPLATEHEADER;
4787     PMENUITEMTEMPLATEHEADER = ^MENUITEMTEMPLATEHEADER;
4788
4789     MENUTEMPLATE = record
4790                    end;
4791     LPMENUTEMPLATE = ^MENUTEMPLATE;
4792     TMENUTEMPLATE = MENUTEMPLATE;
4793     PMENUTEMPLATE = ^MENUTEMPLATE;
4794
4795     METAFILEPICT = record
4796          mm : LONG;
4797          xExt : LONG;
4798          yExt : LONG;
4799          hMF : HMETAFILE;
4800       end;
4801     LPMETAFILEPICT = ^METAFILEPICT;
4802     tagMETAFILEPICT = METAFILEPICT;
4803     TMETAFILEPICT = METAFILEPICT;
4804     PMETAFILEPICT = ^METAFILEPICT;
4805
4806     METAHEADER = packed record
4807          mtType : WORD;
4808          mtHeaderSize : WORD;
4809          mtVersion : WORD;
4810          mtSize : DWORD;
4811          mtNoObjects : WORD;
4812          mtMaxRecord : DWORD;
4813          mtNoParameters : WORD;
4814       end;
4815     tagMETAHEADER = METAHEADER;
4816     TMETAHEADER = METAHEADER;
4817     PMETAHEADER = ^METAHEADER;
4818
4819     METARECORD = record
4820          rdSize : DWORD;
4821          rdFunction : WORD;
4822          rdParm : array[0..0] of WORD;
4823       end;
4824     LPMETARECORD = ^METARECORD;
4825     tagMETARECORD = METARECORD;
4826     TMETARECORD = METARECORD;
4827     PMETARECORD = ^METARECORD;
4828
4829     MINIMIZEDMETRICS = record
4830          cbSize : UINT;
4831          iWidth : longint;
4832          iHorzGap : longint;
4833          iVertGap : longint;
4834          iArrange : longint;
4835       end;
4836     LPMINIMIZEDMETRICS = ^MINIMIZEDMETRICS;
4837     tagMINIMIZEDMETRICS = MINIMIZEDMETRICS;
4838     TMINIMIZEDMETRICS = MINIMIZEDMETRICS;
4839     PMINIMIZEDMETRICS = ^MINIMIZEDMETRICS;
4840
4841     MINMAXINFO = record
4842          ptReserved : POINT;
4843          ptMaxSize : POINT;
4844          ptMaxPosition : POINT;
4845          ptMinTrackSize : POINT;
4846          ptMaxTrackSize : POINT;
4847       end;
4848     tagMINMAXINFO = MINMAXINFO;
4849     TMINMAXINFO = MINMAXINFO;
4850     PMINMAXINFO = ^MINMAXINFO;
4851
4852     MODEMDEVCAPS = record
4853          dwActualSize : DWORD;
4854          dwRequiredSize : DWORD;
4855          dwDevSpecificOffset : DWORD;
4856          dwDevSpecificSize : DWORD;
4857          dwModemProviderVersion : DWORD;
4858          dwModemManufacturerOffset : DWORD;
4859          dwModemManufacturerSize : DWORD;
4860          dwModemModelOffset : DWORD;
4861          dwModemModelSize : DWORD;
4862          dwModemVersionOffset : DWORD;
4863          dwModemVersionSize : DWORD;
4864          dwDialOptions : DWORD;
4865          dwCallSetupFailTimer : DWORD;
4866          dwInactivityTimeout : DWORD;
4867          dwSpeakerVolume : DWORD;
4868          dwSpeakerMode : DWORD;
4869          dwModemOptions : DWORD;
4870          dwMaxDTERate : DWORD;
4871          dwMaxDCERate : DWORD;
4872          abVariablePortion : array[0..0] of BYTE;
4873       end;
4874     LPMODEMDEVCAPS = ^MODEMDEVCAPS;
4875     TMODEMDEVCAPS = MODEMDEVCAPS;
4876     PMODEMDEVCAPS = ^MODEMDEVCAPS;
4877
4878     modemdevcaps_tag = MODEMDEVCAPS;
4879
4880     MODEMSETTINGS = record
4881          dwActualSize : DWORD;
4882          dwRequiredSize : DWORD;
4883          dwDevSpecificOffset : DWORD;
4884          dwDevSpecificSize : DWORD;
4885          dwCallSetupFailTimer : DWORD;
4886          dwInactivityTimeout : DWORD;
4887          dwSpeakerVolume : DWORD;
4888          dwSpeakerMode : DWORD;
4889          dwPreferredModemOptions : DWORD;
4890          dwNegotiatedModemOptions : DWORD;
4891          dwNegotiatedDCERate : DWORD;
4892          abVariablePortion : array[0..0] of BYTE;
4893       end;
4894     LPMODEMSETTINGS = ^MODEMSETTINGS;
4895     TMODEMSETTINGS = MODEMSETTINGS;
4896     PMODEMSETTINGS = ^MODEMSETTINGS;
4897
4898     modemsettings_tag = MODEMSETTINGS;
4899
4900     MONCBSTRUCT = record
4901          cb : UINT;
4902          dwTime : DWORD;
4903          hTask : HANDLE;
4904          dwRet : DWORD;
4905          wType : UINT;
4906          wFmt : UINT;
4907          hConv : HCONV;
4908          hsz1 : HSZ;
4909          hsz2 : HSZ;
4910          hData : HDDEDATA;
4911          dwData1 : DWORD;
4912          dwData2 : DWORD;
4913          cc : CONVCONTEXT;
4914          cbData : DWORD;
4915          Data : array[0..7] of DWORD;
4916       end;
4917     tagMONCBSTRUCT = MONCBSTRUCT;
4918     TMONCBSTRUCT = MONCBSTRUCT;
4919     PMONCBSTRUCT = ^MONCBSTRUCT;
4920
4921     MONCONVSTRUCT = record
4922          cb : UINT;
4923          fConnect : WINBOOL;
4924          dwTime : DWORD;
4925          hTask : HANDLE;
4926          hszSvc : HSZ;
4927          hszTopic : HSZ;
4928          hConvClient : HCONV;
4929          hConvServer : HCONV;
4930       end;
4931     tagMONCONVSTRUCT = MONCONVSTRUCT;
4932     TMONCONVSTRUCT = MONCONVSTRUCT;
4933     PMONCONVSTRUCT = ^MONCONVSTRUCT;
4934
4935     MONERRSTRUCT = record
4936          cb : UINT;
4937          wLastError : UINT;
4938          dwTime : DWORD;
4939          hTask : HANDLE;
4940       end;
4941     tagMONERRSTRUCT = MONERRSTRUCT;
4942     TMONERRSTRUCT = MONERRSTRUCT;
4943     PMONERRSTRUCT = ^MONERRSTRUCT;
4944
4945     MONHSZSTRUCT = record
4946          cb : UINT;
4947          fsAction : WINBOOL;
4948          dwTime : DWORD;
4949          hsz : HSZ;
4950          hTask : HANDLE;
4951          str : array[0..0] of TCHAR;
4952       end;
4953     tagMONHSZSTRUCT = MONHSZSTRUCT;
4954     TMONHSZSTRUCT = MONHSZSTRUCT;
4955     PMONHSZSTRUCT = ^MONHSZSTRUCT;
4956
4957     MONITOR_INFO_1 = record
4958          pName : LPTSTR;
4959       end;
4960     _MONITOR_INFO_1 = MONITOR_INFO_1;
4961     TMONITORINFO1 = MONITOR_INFO_1;
4962     PMONITORINFO1 = ^MONITOR_INFO_1;
4963
4964     MONITOR_INFO_2 = record
4965          pName : LPTSTR;
4966          pEnvironment : LPTSTR;
4967          pDLLName : LPTSTR;
4968       end;
4969     _MONITOR_INFO_2 = MONITOR_INFO_2;
4970     TMONITORINFO2 = MONITOR_INFO_2;
4971     PMONITORINFO2 = ^MONITOR_INFO_2;
4972
4973     MONLINKSTRUCT = record
4974          cb : UINT;
4975          dwTime : DWORD;
4976          hTask : HANDLE;
4977          fEstablished : WINBOOL;
4978          fNoData : WINBOOL;
4979          hszSvc : HSZ;
4980          hszTopic : HSZ;
4981          hszItem : HSZ;
4982          wFmt : UINT;
4983          fServer : WINBOOL;
4984          hConvServer : HCONV;
4985          hConvClient : HCONV;
4986       end;
4987     tagMONLINKSTRUCT = MONLINKSTRUCT;
4988     TMONLINKSTRUCT = MONLINKSTRUCT;
4989     PMONLINKSTRUCT = ^MONLINKSTRUCT;
4990
4991     MONMSGSTRUCT = record
4992          cb : UINT;
4993          hwndTo : HWND;
4994          dwTime : DWORD;
4995          hTask : HANDLE;
4996          wMsg : UINT;
4997          wParam : WPARAM;
4998          lParam : LPARAM;
4999          dmhd : DDEML_MSG_HOOK_DATA;
5000       end;
5001     tagMONMSGSTRUCT = MONMSGSTRUCT;
5002     TMONMSGSTRUCT = MONMSGSTRUCT;
5003     PMONMSGSTRUCT = ^MONMSGSTRUCT;
5004
5005     MOUSEHOOKSTRUCT = record
5006          pt : POINT;
5007          hwnd : HWND;
5008          wHitTestCode : UINT;
5009          dwExtraInfo : DWORD;
5010       end;
5011     LPMOUSEHOOKSTRUCT = ^MOUSEHOOKSTRUCT;
5012     tagMOUSEHOOKSTRUCT = MOUSEHOOKSTRUCT;
5013     TMOUSEHOOKSTRUCT = MOUSEHOOKSTRUCT;
5014     PMOUSEHOOKSTRUCT = ^MOUSEHOOKSTRUCT;
5015
5016     MOUSEKEYS = record
5017          cbSize : DWORD;
5018          dwFlags : DWORD;
5019          iMaxSpeed : DWORD;
5020          iTimeToMaxSpeed : DWORD;
5021          iCtrlSpeed : DWORD;
5022          dwReserved1 : DWORD;
5023          dwReserved2 : DWORD;
5024       end;
5025     TMOUSEKEYS = MOUSEKEYS;
5026     PMOUSEKEYS = ^MOUSEKEYS;
5027
5028     MSGBOXCALLBACK = procedure (lpHelpInfo:LPHELPINFO);
5029     TMSGBOXCALLBACK = MSGBOXCALLBACK;
5030
5031     MSGBOXPARAMS = record
5032          cbSize : UINT;
5033          hwndOwner : HWND;
5034          hInstance : HINST;
5035          lpszText : LPCSTR;
5036          lpszCaption : LPCSTR;
5037          dwStyle : DWORD;
5038          lpszIcon : LPCSTR;
5039          dwContextHelpId : DWORD;
5040          lpfnMsgBoxCallback : MSGBOXCALLBACK;
5041          dwLanguageId : DWORD;
5042       end;
5043     LPMSGBOXPARAMS = ^MSGBOXPARAMS;
5044     TMSGBOXPARAMS = MSGBOXPARAMS;
5045     TMSGBOXPARAMSA = MSGBOXPARAMS;
5046     PMSGBOXPARAMS = ^MSGBOXPARAMS;
5047
5048     MSGFILTER = record
5049          nmhdr : NMHDR;
5050          msg : UINT;
5051          wParam : WPARAM;
5052          lParam : LPARAM;
5053       end;
5054     _msgfilter = MSGFILTER;
5055     Tmsgfilter = MSGFILTER;
5056     Pmsgfilter = ^MSGFILTER;
5057
5058     MULTIKEYHELP = record
5059          mkSize : DWORD;
5060          mkKeylist : TCHAR;
5061          szKeyphrase : array[0..0] of TCHAR;
5062       end;
5063     tagMULTIKEYHELP = MULTIKEYHELP;
5064     TMULTIKEYHELP = MULTIKEYHELP;
5065     PMULTIKEYHELP = ^MULTIKEYHELP;
5066
5067     EXTENDED_NAME_FORMAT=(
5068     // unknown name type
5069     NameUnknown = 0,
5070     // CN=Spencer Katt, OU=Software, OU=Engineering, O=Widget, C=US
5071     NameFullyQualifiedDN = 1,
5072     // Engineering\SpencerK
5073     NameSamCompatible = 2,
5074     // Probably "Spencer Katt" but could be something else.  I.e. The
5075     // display name is not necessarily the defining RDN.
5076     NameDisplay = 3,
5077     // xxx@engineering.widget.com where xxx could be "SpencerK" or
5078     // anything else.  Could be multi-valued to handle migration and aliasing.
5079     NameDomainSimple = 4,
5080     // xxx@widget.com where xxx could be "SpencerK" or anything else.
5081     // Could be multi-valued to handle migration and aliasing.
5082     NameEnterpriseSimple = 5,
5083     // String-ized GUID as returned by IIDFromString().
5084     // eg: {4fa050f0-f561-11cf-bdd9-00aa003a77b6}
5085     NameUniqueId = 6,
5086     // engineering.widget.com/software/spencer katt
5087     NameCanonical = 7,
5088     // local logon name
5089     NameWindowsCeLocal = $80000001);              //+winbase
5090     PEXTENDED_NAME_FORMAT=^EXTENDED_NAME_FORMAT;  //+winbase
5091
5092     NAME_BUFFER = record
5093          name : array[0..(NCBNAMSZ)-1] of UCHAR;
5094          name_num : UCHAR;
5095          name_flags : UCHAR;
5096       end;
5097     _NAME_BUFFER = NAME_BUFFER;
5098     TNAMEBUFFER = NAME_BUFFER;
5099     PNAMEBUFFER = ^NAME_BUFFER;
5100
5101     p_NCB = ^_NCB;
5102     NCB = record
5103          ncb_command : UCHAR;
5104          ncb_retcode : UCHAR;
5105          ncb_lsn : UCHAR;
5106          ncb_num : UCHAR;
5107          ncb_buffer : PUCHAR;
5108          ncb_length : WORD;
5109          ncb_callname : array[0..(NCBNAMSZ)-1] of UCHAR;
5110          ncb_name : array[0..(NCBNAMSZ)-1] of UCHAR;
5111          ncb_rto : UCHAR;
5112          ncb_sto : UCHAR;
5113          ncb_post : procedure (_para1:p_NCB);CDECL;
5114          ncb_lana_num : UCHAR;
5115          ncb_cmd_cplt : UCHAR;
5116          ncb_reserve : array[0..9] of UCHAR;
5117          ncb_event : HANDLE;
5118       end;
5119     _NCB = NCB;
5120     TNCB = NCB;
5121     PNCB = ^NCB;
5122
5123     NCCALCSIZE_PARAMS = record
5124          rgrc : array[0..2] of RECT;
5125          lppos : PWINDOWPOS;
5126       end;
5127     _NCCALCSIZE_PARAMS = NCCALCSIZE_PARAMS;
5128     TNCCALCSIZEPARAMS = NCCALCSIZE_PARAMS;
5129     PNCCALCSIZEPARAMS = ^NCCALCSIZE_PARAMS;
5130
5131     NDDESHAREINFO = record
5132          lRevision : LONG;
5133          lpszShareName : LPTSTR;
5134          lShareType : LONG;
5135          lpszAppTopicList : LPTSTR;
5136          fSharedFlag : LONG;
5137          fService : LONG;
5138          fStartAppFlag : LONG;
5139          nCmdShow : LONG;
5140          qModifyId : array[0..1] of LONG;
5141          cNumItems : LONG;
5142          lpszItemList : LPTSTR;
5143       end;
5144     _NDDESHAREINFO = NDDESHAREINFO;
5145     TNDDESHAREINFO = NDDESHAREINFO;
5146     PNDDESHAREINFO = ^NDDESHAREINFO;
5147
5148     NETRESOURCE = record
5149          dwScope : DWORD;
5150          dwType : DWORD;
5151          dwDisplayType : DWORD;
5152          dwUsage : DWORD;
5153          lpLocalName : LPTSTR;
5154          lpRemoteName : LPTSTR;
5155          lpComment : LPTSTR;
5156          lpProvider : LPTSTR;
5157       end;
5158     LPNETRESOURCE = ^NETRESOURCE;
5159     _NETRESOURCE = NETRESOURCE;
5160     TNETRESOURCE = NETRESOURCE;
5161     TNETRESOURCEA = NETRESOURCE;
5162     PNETRESOURCE = ^NETRESOURCE;
5163     PNETRESOURCEA = ^NETRESOURCE;
5164
5165     NETRESOURCEW = record  //+winnetwk
5166          dwScope : DWORD;
5167          dwType : DWORD;
5168          dwDisplayType : DWORD;
5169          dwUsage : DWORD;
5170          lpLocalName : LPWSTR;
5171          lpRemoteName : LPWSTR;
5172          lpComment : LPWSTR;
5173          lpProvider : LPWSTR;
5174       end;
5175     LPNETRESOURCEW = ^NETRESOURCEW; //+winnetwk
5176     _NETRESOURCEW = NETRESOURCEW;   //+winnetwk
5177
5178     NEWCPLINFO = record
5179          dwSize : DWORD;
5180          dwFlags : DWORD;
5181          dwHelpContext : DWORD;
5182          lData : LONG;
5183          hIcon : HICON;
5184          szName : array[0..31] of TCHAR;
5185          szInfo : array[0..63] of TCHAR;
5186          szHelpFile : array[0..127] of TCHAR;
5187       end;
5188     tagNEWCPLINFO = NEWCPLINFO;
5189     TNEWCPLINFO = NEWCPLINFO;
5190     PNEWCPLINFO = ^NEWCPLINFO;
5191
5192     NEWTEXTMETRIC = record
5193          tmHeight : LONG;
5194          tmAscent : LONG;
5195          tmDescent : LONG;
5196          tmInternalLeading : LONG;
5197          tmExternalLeading : LONG;
5198          tmAveCharWidth : LONG;
5199          tmMaxCharWidth : LONG;
5200          tmWeight : LONG;
5201          tmOverhang : LONG;
5202          tmDigitizedAspectX : LONG;
5203          tmDigitizedAspectY : LONG;
5204          tmFirstChar : BCHAR;
5205          tmLastChar : BCHAR;
5206          tmDefaultChar : BCHAR;
5207          tmBreakChar : BCHAR;
5208          tmItalic : BYTE;
5209          tmUnderlined : BYTE;
5210          tmStruckOut : BYTE;
5211          tmPitchAndFamily : BYTE;
5212          tmCharSet : BYTE;
5213          ntmFlags : DWORD;
5214          ntmSizeEM : UINT;
5215          ntmCellHeight : UINT;
5216          ntmAvgWidth : UINT;
5217       end;
5218     tagNEWTEXTMETRIC = NEWTEXTMETRIC;
5219     TNEWTEXTMETRIC = NEWTEXTMETRIC;
5220     PNEWTEXTMETRIC = ^NEWTEXTMETRIC;
5221
5222     NEWTEXTMETRICEX = record
5223          ntmentm : NEWTEXTMETRIC;
5224          ntmeFontSignature : FONTSIGNATURE;
5225       end;
5226     tagNEWTEXTMETRICEX = NEWTEXTMETRICEX;
5227     TNEWTEXTMETRICEX = NEWTEXTMETRICEX;
5228     PNEWTEXTMETRICEX = ^NEWTEXTMETRICEX;
5229
5230     NM_LISTVIEW = record
5231          hdr : NMHDR;
5232          iItem : longint;
5233          iSubItem : longint;
5234          uNewState : UINT;
5235          uOldState : UINT;
5236          uChanged : UINT;
5237          ptAction : POINT;
5238          lParam : LPARAM;
5239       end;
5240     tagNM_LISTVIEW = NM_LISTVIEW;
5241     TNMLISTVIEW = NM_LISTVIEW;
5242     PNMLISTVIEW = ^NM_LISTVIEW;
5243
5244     TV_ITEM = record
5245          mask : UINT;
5246          hItem : HTREEITEM;
5247          state : UINT;
5248          stateMask : UINT;
5249          pszText : LPTSTR;
5250          cchTextMax : longint;
5251          iImage : longint;
5252          iSelectedImage : longint;
5253          cChildren : longint;
5254          lParam : LPARAM;
5255       end;
5256     LPTV_ITEM = ^TV_ITEM;
5257     _TV_ITEM = TV_ITEM;
5258     TTVITEM = TV_ITEM;
5259     PTVITEM = ^TV_ITEM;
5260
5261     NM_TREEVIEW = record
5262          hdr : NMHDR;
5263          action : UINT;
5264          itemOld : TV_ITEM;
5265          itemNew : TV_ITEM;
5266          ptDrag : POINT;
5267       end;
5268     LPNM_TREEVIEW = ^NM_TREEVIEW;
5269     _NM_TREEVIEW = NM_TREEVIEW;
5270     TNMTREEVIEW = NM_TREEVIEW;
5271     PNMTREEVIEW = ^NM_TREEVIEW;
5272
5273     NM_UPDOWNW = record
5274          hdr : NMHDR;
5275          iPos : longint;
5276          iDelta : longint;
5277       end;
5278     _NM_UPDOWN = NM_UPDOWNW;
5279     TNMUPDOWN = NM_UPDOWNW;
5280     PNMUPDOWN = ^NM_UPDOWNW;
5281
5282     NONCLIENTMETRICS = record
5283          cbSize : UINT;
5284          iBorderWidth : longint;
5285          iScrollWidth : longint;
5286          iScrollHeight : longint;
5287          iCaptionWidth : longint;
5288          iCaptionHeight : longint;
5289          lfCaptionFont : LOGFONT;
5290          iSmCaptionWidth : longint;
5291          iSmCaptionHeight : longint;
5292          lfSmCaptionFont : LOGFONT;
5293          iMenuWidth : longint;
5294          iMenuHeight : longint;
5295          lfMenuFont : LOGFONT;
5296          lfStatusFont : LOGFONT;
5297          lfMessageFont : LOGFONT;
5298       end;
5299     LPNONCLIENTMETRICS = ^NONCLIENTMETRICS;
5300     tagNONCLIENTMETRICS = NONCLIENTMETRICS;
5301     TNONCLIENTMETRICS = NONCLIENTMETRICS;
5302     PNONCLIENTMETRICS = ^NONCLIENTMETRICS;
5303
5304     SERVICE_ADDRESS = record
5305          dwAddressType : DWORD;
5306          dwAddressFlags : DWORD;
5307          dwAddressLength : DWORD;
5308          dwPrincipalLength : DWORD;
5309          lpAddress : ^BYTE;
5310          lpPrincipal : ^BYTE;
5311       end;
5312     _SERVICE_ADDRESS = SERVICE_ADDRESS;
5313     TSERVICEADDRESS = SERVICE_ADDRESS;
5314     PSERVICEADDRESS = ^SERVICE_ADDRESS;
5315
5316     SERVICE_ADDRESSES = record
5317          dwAddressCount : DWORD;
5318          Addresses : array[0..0] of SERVICE_ADDRESS;
5319       end;
5320     LPSERVICE_ADDRESSES = ^SERVICE_ADDRESSES;
5321     _SERVICE_ADDRESSES = SERVICE_ADDRESSES;
5322     TSERVICEADDRESSES = SERVICE_ADDRESSES;
5323     PSERVICEADDRESSES = ^SERVICE_ADDRESSES;
5324
5325     GUID = system.tguid;        //winnt
5326     LPGUID = ^GUID;
5327     _GUID = GUID;
5328     TGUID = GUID;
5329     PGUID = ^GUID;
5330     REFGUID = ^GUID;
5331
5332     CLSID = GUID;
5333     LPCLSID = ^CLSID;
5334     TCLSID = CLSID;
5335     PCLSID = ^CLSID;
5336     REFCLSID = ^CLSID;
5337
5338     FMTID = GUID;
5339     LPFMTID = ^FMTID;
5340     REFFMTID = ^FMTID;
5341
5342
5343     SERVICE_INFO = record
5344          lpServiceType : LPGUID;
5345          lpServiceName : LPTSTR;
5346          lpComment : LPTSTR;
5347          lpLocale : LPTSTR;
5348          dwDisplayHint : DWORD;
5349          dwVersion : DWORD;
5350          dwTime : DWORD;
5351          lpMachineName : LPTSTR;
5352          lpServiceAddress : LPSERVICE_ADDRESSES;
5353          ServiceSpecificInfo : BLOB;
5354       end;
5355     _SERVICE_INFO = SERVICE_INFO;
5356     TSERVICEINFO = SERVICE_INFO;
5357     PSERVICEINFO = ^SERVICE_INFO;
5358
5359     NS_SERVICE_INFO = record
5360          dwNameSpace : DWORD;
5361          ServiceInfo : SERVICE_INFO;
5362       end;
5363     _NS_SERVICE_INFO = NS_SERVICE_INFO;
5364     TNSSERVICEINFO = NS_SERVICE_INFO;
5365     PNSSERVICEINFO = ^NS_SERVICE_INFO;
5366
5367     NUMBERFMT = record
5368          NumDigits : UINT;
5369          LeadingZero : UINT;
5370          Grouping : UINT;
5371          lpDecimalSep : LPTSTR;
5372          lpThousandSep : LPTSTR;
5373          NegativeOrder : UINT;
5374       end;
5375     _numberfmt = NUMBERFMT;
5376     Tnumberfmt = NUMBERFMT;
5377     Pnumberfmt = ^NUMBERFMT;
5378
5379     OFSTRUCT = record
5380          cBytes : BYTE;
5381          fFixedDisk : BYTE;
5382          nErrCode : WORD;
5383          Reserved1 : WORD;
5384          Reserved2 : WORD;
5385          szPathName : array[0..(OFS_MAXPATHNAME)-1] of CHAR;
5386       end;
5387     LPOFSTRUCT = ^OFSTRUCT;
5388     _OFSTRUCT = OFSTRUCT;
5389     TOFSTRUCT = OFSTRUCT;
5390     POFSTRUCT = ^OFSTRUCT;
5391
5392     OPENFILENAMEW = record     //+commdlg
5393          lStructSize : DWORD;
5394          hwndOwner : HWND;
5395          hInstance : HINST;
5396          lpstrFilter : LPCWSTR;
5397          lpstrCustomFilter : LPWSTR;
5398          nMaxCustFilter : DWORD;
5399          nFilterIndex : DWORD;
5400          lpstrFile : LPWSTR;
5401          nMaxFile : DWORD;
5402          lpstrFileTitle : LPWSTR;
5403          nMaxFileTitle : DWORD;
5404          lpstrInitialDir : LPCWSTR;
5405          lpstrTitle : LPCWSTR;
5406          Flags : DWORD;
5407          nFileOffset : WORD;
5408          nFileExtension : WORD;
5409          lpstrDefExt : LPCWSTR;
5410          lCustData : LPARAM;
5411          lpfnHook : LPOFNHOOKPROC;
5412          lpTemplateName : LPCWSTR;
5413       end;
5414     LPOPENFILENAMEW = ^OPENFILENAMEW; //+commdlg
5415     tagOFNW = OPENFILENAMEW; //+commdlg
5416     LPOPENFILENAME = ^OPENFILENAMEW;
5417     TOPENFILENAME = OPENFILENAMEW;
5418     POPENFILENAME = ^OPENFILENAMEW;
5419     TOPENFILENAMEW = OPENFILENAMEW;
5420     POPENFILENAMEW = ^OPENFILENAMEW;
5421
5422     tagOFN = OPENFILENAMEW;
5423     TOFN = OPENFILENAMEW;
5424     POFN = ^OPENFILENAMEW;
5425
5426     OFNOTIFY = record
5427          hdr : NMHDR;
5428          lpOFN : LPOPENFILENAME;
5429          pszFile : LPTSTR;
5430       end;
5431     LPOFNOTIFY = ^OFNOTIFY;
5432     _OFNOTIFY = OFNOTIFY;
5433     TOFNOTIFY = OFNOTIFY;
5434     POFNOTIFY = ^OFNOTIFY;
5435
5436     OSVERSIONINFO = record
5437          dwOSVersionInfoSize : DWORD;
5438          dwMajorVersion : DWORD;
5439          dwMinorVersion : DWORD;
5440          dwBuildNumber : DWORD;
5441          dwPlatformId : DWORD;
5442          szCSDVersion : array[0..127] of TCHAR;
5443       end;
5444     LPOSVERSIONINFO = ^OSVERSIONINFO;
5445     _OSVERSIONINFO = OSVERSIONINFO;
5446     TOSVERSIONINFO = OSVERSIONINFO;
5447     POSVERSIONINFO = ^OSVERSIONINFO;
5448
5449     OSVERSIONINFOW = record
5450       dwOSVersionInfoSize : DWORD;
5451       dwMajorVersion : DWORD;
5452       dwMinorVersion : DWORD;
5453       dwBuildNumber : DWORD;
5454       dwPlatformId : DWORD;
5455       szCSDVersion : array[0..127] of WCHAR;
5456     end;
5457     LPOSVERSIONINFOW = ^OSVERSIONINFOW;
5458     _OSVERSIONINFOW = OSVERSIONINFOW;
5459     TOSVERSIONINFOW = OSVERSIONINFOW;
5460     POSVERSIONINFOW = ^OSVERSIONINFOW;
5461
5462
5463
5464
5465
5466     TEXTMETRIC = record
5467          tmHeight : LONG;
5468          tmAscent : LONG;
5469          tmDescent : LONG;
5470          tmInternalLeading : LONG;
5471          tmExternalLeading : LONG;
5472          tmAveCharWidth : LONG;
5473          tmMaxCharWidth : LONG;
5474          tmWeight : LONG;
5475          tmOverhang : LONG;
5476          tmDigitizedAspectX : LONG;
5477          tmDigitizedAspectY : LONG;
5478          tmFirstChar : BCHAR;
5479          tmLastChar : BCHAR;
5480          tmDefaultChar : BCHAR;
5481          tmBreakChar : BCHAR;
5482          tmItalic : BYTE;
5483          tmUnderlined : BYTE;
5484          tmStruckOut : BYTE;
5485          tmPitchAndFamily : BYTE;
5486          tmCharSet : BYTE;
5487       end;
5488     LPTEXTMETRIC = ^TEXTMETRIC;
5489     tagTEXTMETRIC = TEXTMETRIC;
5490     TTEXTMETRIC = TEXTMETRIC;
5491     PTEXTMETRIC = ^TEXTMETRIC;
5492
5493     TEXTMETRICW = record
5494          tmHeight : LONG;
5495          tmAscent : LONG;
5496          tmDescent : LONG;
5497          tmInternalLeading : LONG;
5498          tmExternalLeading : LONG;
5499          tmAveCharWidth : LONG;
5500          tmMaxCharWidth : LONG;
5501          tmWeight : LONG;
5502          tmOverhang : LONG;
5503          tmDigitizedAspectX : LONG;
5504          tmDigitizedAspectY : LONG;
5505          tmFirstChar : WCHAR;
5506          tmLastChar : WCHAR;
5507          tmDefaultChar : WCHAR;
5508          tmBreakChar : WCHAR;
5509          tmItalic : BYTE;
5510          tmUnderlined : BYTE;
5511          tmStruckOut : BYTE;
5512          tmPitchAndFamily : BYTE;
5513          tmCharSet : BYTE;
5514       end;
5515     LPTEXTMETRICW = ^TEXTMETRICW;
5516     tagTEXTMETRICW = TEXTMETRICW;
5517     TTEXTMETRICW = TEXTMETRICW;
5518     PTEXTMETRICW = ^TEXTMETRICW;
5519
5520
5521     OUTLINETEXTMETRIC = record
5522          otmSize : UINT;
5523          otmTextMetrics : TEXTMETRIC;
5524          otmFiller : BYTE;
5525          otmPanoseNumber : PANOSE;
5526          otmfsSelection : UINT;
5527          otmfsType : UINT;
5528          otmsCharSlopeRise : longint;
5529          otmsCharSlopeRun : longint;
5530          otmItalicAngle : longint;
5531          otmEMSquare : UINT;
5532          otmAscent : longint;
5533          otmDescent : longint;
5534          otmLineGap : UINT;
5535          otmsCapEmHeight : UINT;
5536          otmsXHeight : UINT;
5537          otmrcFontBox : RECT;
5538          otmMacAscent : longint;
5539          otmMacDescent : longint;
5540          otmMacLineGap : UINT;
5541          otmusMinimumPPEM : UINT;
5542          otmptSubscriptSize : POINT;
5543          otmptSubscriptOffset : POINT;
5544          otmptSuperscriptSize : POINT;
5545          otmptSuperscriptOffset : POINT;
5546          otmsStrikeoutSize : UINT;
5547          otmsStrikeoutPosition : longint;
5548          otmsUnderscoreSize : longint;
5549          otmsUnderscorePosition : longint;
5550          otmpFamilyName : PSTR;
5551          otmpFaceName : PSTR;
5552          otmpStyleName : PSTR;
5553          otmpFullName : PSTR;
5554       end;
5555     LPOUTLINETEXTMETRIC = ^OUTLINETEXTMETRIC;
5556     _OUTLINETEXTMETRIC = OUTLINETEXTMETRIC;
5557     TOUTLINETEXTMETRIC = OUTLINETEXTMETRIC;
5558     POUTLINETEXTMETRIC = ^OUTLINETEXTMETRIC;
5559
5560     OVERLAPPED = record
5561          Internal : DWORD;
5562          InternalHigh : DWORD;
5563          Offset : DWORD;
5564          OffsetHigh : DWORD;
5565          hEvent : HANDLE;
5566       end;
5567     LPOVERLAPPED = ^OVERLAPPED;
5568     _OVERLAPPED = OVERLAPPED;
5569     TOVERLAPPED = OVERLAPPED;
5570     POVERLAPPED = ^OVERLAPPED;
5571
5572     {PAGESETUPDLG = record conflicts with function PageSetupDlg }
5573     TPAGESETUPDLG = record
5574          lStructSize : DWORD;
5575          hwndOwner : HWND;
5576          hDevMode : HGLOBAL;
5577          hDevNames : HGLOBAL;
5578          Flags : DWORD;
5579          ptPaperSize : POINT;
5580          rtMinMargin : RECT;
5581          rtMargin : RECT;
5582          hInstance : HINST;
5583          lCustData : LPARAM;
5584          lpfnPageSetupHook : LPPAGESETUPHOOK;
5585          lpfnPagePaintHook : LPPAGEPAINTHOOK;
5586          lpPageSetupTemplateName : LPCTSTR;
5587          hPageSetupTemplate : HGLOBAL;
5588       end;
5589     LPPAGESETUPDLG = ^TPAGESETUPDLG;
5590     PPAGESETUPDLG = ^TPAGESETUPDLG;
5591
5592     tagPSD = TPAGESETUPDLG;
5593     TPSD = TPAGESETUPDLG;
5594     PPSD = ^TPAGESETUPDLG;
5595
5596     TPAGESETUPDLGW = record    //+commdlg
5597          lStructSize : DWORD;
5598          hwndOwner : HWND;
5599          hDevMode : HGLOBAL;
5600          hDevNames : HGLOBAL;
5601          Flags : DWORD;
5602          ptPaperSize : POINT;   // ignored in CE
5603          rtMinMargin : RECT;
5604          rtMargin : RECT;
5605          hInstance : HINST;
5606          lCustData : LPARAM;
5607          lpfnPageSetupHook : LPPAGESETUPHOOK;
5608          lpfnPagePaintHook : LPPAGEPAINTHOOK; // ignored in CE
5609          lpPageSetupTemplateName : LPCWSTR;
5610          hPageSetupTemplate : HGLOBAL;
5611       end;
5612     LPPAGESETUPDLGW = ^TPAGESETUPDLGW; //+commdlg
5613     tagPSDW = TPAGESETUPDLGW;          //+commdlg
5614
5615     PAINTSTRUCT = record
5616          hdc : HDC;
5617          fErase : WINBOOL;
5618          rcPaint : RECT;
5619          fRestore : WINBOOL;
5620          fIncUpdate : WINBOOL;
5621          rgbReserved : array[0..31] of BYTE;
5622       end;
5623     LPPAINTSTRUCT = ^PAINTSTRUCT;
5624     tagPAINTSTRUCT = PAINTSTRUCT;
5625     TPAINTSTRUCT = PAINTSTRUCT;
5626     PPAINTSTRUCT = ^PAINTSTRUCT;
5627
5628     PARAFORMAT = record
5629          cbSize : UINT;
5630          dwMask : DWORD;
5631          wNumbering : WORD;
5632          wReserved : WORD;
5633          dxStartIndent : LONG;
5634          dxRightIndent : LONG;
5635          dxOffset : LONG;
5636          wAlignment : WORD;
5637          cTabCount : SHORT;
5638          rgxTabs : array[0..(MAX_TAB_STOPS)-1] of LONG;
5639       end;
5640     _paraformat = PARAFORMAT;
5641     Tparaformat = PARAFORMAT;
5642     Pparaformat = ^PARAFORMAT;
5643
5644     PERF_COUNTER_BLOCK = record
5645          ByteLength : DWORD;
5646       end;
5647     _PERF_COUNTER_BLOCK = PERF_COUNTER_BLOCK;
5648     TPERFCOUNTERBLOCK = PERF_COUNTER_BLOCK;
5649     PPERFCOUNTERBLOCK = ^PERF_COUNTER_BLOCK;
5650
5651     PERF_COUNTER_DEFINITION = record
5652          ByteLength : DWORD;
5653          CounterNameTitleIndex : DWORD;
5654          CounterNameTitle : LPWSTR;
5655          CounterHelpTitleIndex : DWORD;
5656          CounterHelpTitle : LPWSTR;
5657          DefaultScale : DWORD;
5658          DetailLevel : DWORD;
5659          CounterType : DWORD;
5660          CounterSize : DWORD;
5661          CounterOffset : DWORD;
5662       end;
5663     _PERF_COUNTER_DEFINITION = PERF_COUNTER_DEFINITION;
5664     TPERFCOUNTERDEFINITION = PERF_COUNTER_DEFINITION;
5665     PPERFCOUNTERDEFINITION = ^PERF_COUNTER_DEFINITION;
5666
5667     PERF_DATA_BLOCK = record
5668          Signature : array[0..3] of WCHAR;
5669          LittleEndian : DWORD;
5670          Version : DWORD;
5671          Revision : DWORD;
5672          TotalByteLength : DWORD;
5673          HeaderLength : DWORD;
5674          NumObjectTypes : DWORD;
5675          DefaultObject : DWORD;
5676          SystemTime : SYSTEMTIME;
5677          PerfTime : LARGE_INTEGER;
5678          PerfFreq : LARGE_INTEGER;
5679          PerfTime100nSec : LARGE_INTEGER;
5680          SystemNameLength : DWORD;
5681          SystemNameOffset : DWORD;
5682       end;
5683     _PERF_DATA_BLOCK = PERF_DATA_BLOCK;
5684     TPERFDATABLOCK = PERF_DATA_BLOCK;
5685     PPERFDATABLOCK = ^PERF_DATA_BLOCK;
5686
5687     PERF_INSTANCE_DEFINITION = record
5688          ByteLength : DWORD;
5689          ParentObjectTitleIndex : DWORD;
5690          ParentObjectInstance : DWORD;
5691          UniqueID : DWORD;
5692          NameOffset : DWORD;
5693          NameLength : DWORD;
5694       end;
5695     _PERF_INSTANCE_DEFINITION = PERF_INSTANCE_DEFINITION;
5696     TPERFINSTANCEDEFINITION = PERF_INSTANCE_DEFINITION;
5697     PPERFINSTANCEDEFINITION = PERF_INSTANCE_DEFINITION;
5698
5699     PERF_OBJECT_TYPE = record
5700          TotalByteLength : DWORD;
5701          DefinitionLength : DWORD;
5702          HeaderLength : DWORD;
5703          ObjectNameTitleIndex : DWORD;
5704          ObjectNameTitle : LPWSTR;
5705          ObjectHelpTitleIndex : DWORD;
5706          ObjectHelpTitle : LPWSTR;
5707          DetailLevel : DWORD;
5708          NumCounters : DWORD;
5709          DefaultCounter : DWORD;
5710          NumInstances : DWORD;
5711          CodePage : DWORD;
5712          PerfTime : LARGE_INTEGER;
5713          PerfFreq : LARGE_INTEGER;
5714       end;
5715     _PERF_OBJECT_TYPE = PERF_OBJECT_TYPE;
5716     TPERFOBJECTTYPE = PERF_OBJECT_TYPE;
5717     PPERFOBJECTTYPE = ^PERF_OBJECT_TYPE;
5718
5719     POLYTEXT = record
5720          x : longint;
5721          y : longint;
5722          n : UINT;
5723          lpstr : LPCTSTR;
5724          uiFlags : UINT;
5725          rcl : RECT;
5726          pdx : ^longint;
5727       end;
5728     _POLYTEXT = POLYTEXT;
5729     TPOLYTEXT = POLYTEXT;
5730     PPOLYTEXT = ^POLYTEXT;
5731
5732     PORT_INFO_1 = record
5733          pName : LPTSTR;
5734       end;
5735     _PORT_INFO_1 = PORT_INFO_1;
5736     TPORTINFO1 = PORT_INFO_1;
5737     PPORTINFO1 = ^PORT_INFO_1;
5738
5739     PORT_INFO_2 = record
5740          pPortName : LPSTR;
5741          pMonitorName : LPSTR;
5742          pDescription : LPSTR;
5743          fPortType : DWORD;
5744          Reserved : DWORD;
5745       end;
5746     _PORT_INFO_2 = PORT_INFO_2;
5747     TPORTINFO2 = PORT_INFO_2;
5748     PPORTINFO2 = ^PORT_INFO_2;
5749
5750     PREVENT_MEDIA_REMOVAL = record
5751          PreventMediaRemoval : BOOLEAN;
5752       end;
5753     _PREVENT_MEDIA_REMOVAL = PREVENT_MEDIA_REMOVAL;
5754     TPREVENTMEDIAREMOVAL = PREVENT_MEDIA_REMOVAL;
5755     PPREVENTMEDIAREMOVAL = ^PREVENT_MEDIA_REMOVAL;
5756
5757     {PRINTDLG = record conflicts with PrintDlg function }
5758     TPRINTDLG = packed record
5759          lStructSize : DWORD;
5760          hwndOwner : HWND;
5761          hDevMode : HANDLE;
5762          hDevNames : HANDLE;
5763          hDC : HDC;
5764          Flags : DWORD;
5765          nFromPage : WORD;
5766          nToPage : WORD;
5767          nMinPage : WORD;
5768          nMaxPage : WORD;
5769          nCopies : WORD;
5770          hInstance : HINST;
5771          lCustData : DWORD;
5772          lpfnPrintHook : LPPRINTHOOKPROC;
5773          lpfnSetupHook : LPSETUPHOOKPROC;
5774          lpPrintTemplateName : LPCTSTR;
5775          lpSetupTemplateName : LPCTSTR;
5776          hPrintTemplate : HANDLE;
5777          hSetupTemplate : HANDLE;
5778       end;
5779     LPPRINTDLG = ^TPRINTDLG;
5780     PPRINTDLG = ^TPRINTDLG;
5781
5782     tagPD = TPRINTDLG;
5783     TPD = TPRINTDLG;
5784     PPD = ^TPRINTDLG;
5785
5786     PRINTER_DEFAULTS = record
5787          pDatatype : LPTSTR;
5788          pDevMode : LPDEVMODE;
5789          DesiredAccess : ACCESS_MASK;
5790       end;
5791     _PRINTER_DEFAULTS = PRINTER_DEFAULTS;
5792     TPRINTERDEFAULTS = PRINTER_DEFAULTS;
5793     PPRINTERDEFAULTS = ^PRINTER_DEFAULTS;
5794
5795     PRINTER_INFO_1 = record
5796          Flags : DWORD;
5797          pDescription : LPTSTR;
5798          pName : LPTSTR;
5799          pComment : LPTSTR;
5800       end;
5801     LPPRINTER_INFO_1 = ^PRINTER_INFO_1;
5802     PPRINTER_INFO_1 = ^PRINTER_INFO_1;
5803     _PRINTER_INFO_1 = PRINTER_INFO_1;
5804     TPRINTERINFO1 = PRINTER_INFO_1;
5805     PPRINTERINFO1 = ^PRINTER_INFO_1;
5806
5807     PRINTER_INFO_2 = record
5808          pServerName : LPTSTR;
5809          pPrinterName : LPTSTR;
5810          pShareName : LPTSTR;
5811          pPortName : LPTSTR;
5812          pDriverName : LPTSTR;
5813          pComment : LPTSTR;
5814          pLocation : LPTSTR;
5815          pDevMode : LPDEVMODE;
5816          pSepFile : LPTSTR;
5817          pPrintProcessor : LPTSTR;
5818          pDatatype : LPTSTR;
5819          pParameters : LPTSTR;
5820          pSecurityDescriptor : PSECURITY_DESCRIPTOR;
5821          Attributes : DWORD;
5822          Priority : DWORD;
5823          DefaultPriority : DWORD;
5824          StartTime : DWORD;
5825          UntilTime : DWORD;
5826          Status : DWORD;
5827          cJobs : DWORD;
5828          AveragePPM : DWORD;
5829       end;
5830     _PRINTER_INFO_2 = PRINTER_INFO_2;
5831     TPRINTERINFO2 = PRINTER_INFO_2;
5832     PPRINTERINFO2 = ^PRINTER_INFO_2;
5833
5834     PRINTER_INFO_3 = record
5835          pSecurityDescriptor : PSECURITY_DESCRIPTOR;
5836       end;
5837     _PRINTER_INFO_3 = PRINTER_INFO_3;
5838     TPRINTERINFO3 = PRINTER_INFO_3;
5839     PPRINTERINFO3 = ^PRINTER_INFO_3;
5840
5841     PRINTER_INFO_4 = record
5842          pPrinterName : LPTSTR;
5843          pServerName : LPTSTR;
5844          Attributes : DWORD;
5845       end;
5846     _PRINTER_INFO_4 = PRINTER_INFO_4;
5847     TPRINTERINFO4 = PRINTER_INFO_4;
5848     PPRINTERINFO4 = ^PRINTER_INFO_4;
5849
5850     PRINTER_INFO_5 = record
5851          pPrinterName : LPTSTR;
5852          pPortName : LPTSTR;
5853          Attributes : DWORD;
5854          DeviceNotSelectedTimeout : DWORD;
5855          TransmissionRetryTimeout : DWORD;
5856       end;
5857     _PRINTER_INFO_5 = PRINTER_INFO_5;
5858     TPRINTERINFO5 = PRINTER_INFO_5;
5859     PPRINTERINFO5 = ^PRINTER_INFO_5;
5860
5861     PRINTER_NOTIFY_INFO_DATA = record
5862          _Type : WORD;
5863          Field : WORD;
5864          Reserved : DWORD;
5865          Id : DWORD;
5866          NotifyData : record
5867              case longint of
5868                 0 : ( adwData : array[0..1] of DWORD );
5869                 1 : ( Data : record
5870                      cbBuf : DWORD;
5871                      pBuf : LPVOID;
5872                   end );
5873              end;
5874       end;
5875     _PRINTER_NOTIFY_INFO_DATA = PRINTER_NOTIFY_INFO_DATA;
5876     TPRINTERNOTIFYINFODATA = PRINTER_NOTIFY_INFO_DATA;
5877     PPRINTERNOTIFYINFODATA = ^PRINTER_NOTIFY_INFO_DATA;
5878
5879     PRINTER_NOTIFY_INFO = record
5880          Version : DWORD;
5881          Flags : DWORD;
5882          Count : DWORD;
5883          aData : array[0..0] of PRINTER_NOTIFY_INFO_DATA;
5884       end;
5885     _PRINTER_NOTIFY_INFO = PRINTER_NOTIFY_INFO;
5886     TPRINTERNOTIFYINFO = PRINTER_NOTIFY_INFO;
5887     PPRINTERNOTIFYINFO = ^PRINTER_NOTIFY_INFO;
5888
5889     PRINTER_NOTIFY_OPTIONS_TYPE = record
5890          _Type : WORD;
5891          Reserved0 : WORD;
5892          Reserved1 : DWORD;
5893          Reserved2 : DWORD;
5894          Count : DWORD;
5895          pFields : PWORD;
5896       end;
5897     PPRINTER_NOTIFY_OPTIONS_TYPE = ^PRINTER_NOTIFY_OPTIONS_TYPE;
5898     _PRINTER_NOTIFY_OPTIONS_TYPE = PRINTER_NOTIFY_OPTIONS_TYPE;
5899     TPRINTERNOTIFYOPTIONSTYPE = PRINTER_NOTIFY_OPTIONS_TYPE;
5900     PPRINTERNOTIFYOPTIONSTYPE = ^PRINTER_NOTIFY_OPTIONS_TYPE;
5901
5902     PRINTER_NOTIFY_OPTIONS = record
5903          Version : DWORD;
5904          Flags : DWORD;
5905          Count : DWORD;
5906          pTypes : PPRINTER_NOTIFY_OPTIONS_TYPE;
5907       end;
5908     _PRINTER_NOTIFY_OPTIONS = PRINTER_NOTIFY_OPTIONS;
5909     TPRINTERNOTIFYOPTIONS = PRINTER_NOTIFY_OPTIONS;
5910     PPRINTERNOTIFYOPTIONS = ^PRINTER_NOTIFY_OPTIONS;
5911
5912     PRINTPROCESSOR_INFO_1 = record
5913          pName : LPTSTR;
5914       end;
5915     _PRINTPROCESSOR_INFO_1 = PRINTPROCESSOR_INFO_1;
5916     TPRINTPROCESSORINFO1 = PRINTPROCESSOR_INFO_1;
5917     PPRINTPROCESSORINFO1 = ^PRINTPROCESSOR_INFO_1;
5918
5919     PRIVILEGE_SET = record
5920          PrivilegeCount : DWORD;
5921          Control : DWORD;
5922          Privilege : array[0..(ANYSIZE_ARRAY)-1] of LUID_AND_ATTRIBUTES;
5923       end;
5924     LPPRIVILEGE_SET = ^PRIVILEGE_SET;
5925     PPRIVILEGE_SET = ^PRIVILEGE_SET;
5926     _PRIVILEGE_SET = PRIVILEGE_SET;
5927     TPRIVILEGESET = PRIVILEGE_SET;
5928     PPRIVILEGESET = ^PRIVILEGE_SET;
5929
5930     PROCESS_HEAPENTRY = record
5931          lpData : PVOID;
5932          cbData : DWORD;
5933          cbOverhead : BYTE;
5934          iRegionIndex : BYTE;
5935          wFlags : WORD;
5936          dwCommittedSize : DWORD;
5937          dwUnCommittedSize : DWORD;
5938          lpFirstBlock : LPVOID;
5939          lpLastBlock : LPVOID;
5940          hMem : HANDLE;
5941       end;
5942     LPPROCESS_HEAP_ENTRY = ^PROCESS_HEAPENTRY;
5943     _PROCESS_HEAP_ENTRY = PROCESS_HEAPENTRY;
5944     TPROCESSHEAPENTRY = PROCESS_HEAPENTRY;
5945     PPROCESSHEAPENTRY = ^PROCESS_HEAPENTRY;
5946
5947     PROCESS_INFORMATION = record
5948          hProcess : HANDLE;
5949          hThread : HANDLE;
5950          dwProcessId : DWORD;
5951          dwThreadId : DWORD;
5952       end;
5953     LPPROCESS_INFORMATION = ^PROCESS_INFORMATION;
5954     _PROCESS_INFORMATION = PROCESS_INFORMATION;
5955     TPROCESSINFORMATION = PROCESS_INFORMATION;
5956     PPROCESSINFORMATION = ^PROCESS_INFORMATION;
5957
5958     LPFNPSPCALLBACK = function (_para1:HWND; _para2:UINT; _para3:LPVOID):UINT;
5959     TFNPSPCALLBACK = LPFNPSPCALLBACK;
5960
5961     PROPSHEETPAGEA = record
5962          dwSize : DWORD;
5963          dwFlags : DWORD;
5964          hInstance : HINST;
5965          case longint of
5966            0 : (pszTemplate : LPCTSTR);
5967            1 : (pResource : LPCDLGTEMPLATE;
5968                 case longint of
5969                    0 : (hIcon : HICON);
5970                    1 : (pszIcon : LPCTSTR;
5971                         pszTitle : LPCTSTR;
5972                         pfnDlgProc : DLGPROC;
5973                         lParam : LPARAM;
5974                         pfnCallback : LPFNPSPCALLBACK;
5975                         pcRefParent : ^UINT;
5976                        );
5977                );
5978       end;
5979     LPPROPSHEETPAGEA = ^PROPSHEETPAGEA;
5980     LPCPROPSHEETPAGEA = ^PROPSHEETPAGEA;
5981
5982     PROPSHEETPAGEW = record
5983          dwSize : DWORD;
5984          dwFlags : DWORD;
5985          hInstance : HINST;
5986          case longint of
5987            0 : (pszTemplate : LPCWSTR);
5988            1 : (pResource : LPCDLGTEMPLATE;
5989                 case longint of
5990                    0 : (hIcon : HICON);
5991                    1 : (pszIcon : LPCWSTR;
5992                         pszTitle : LPCWSTR;
5993                         pfnDlgProc : DLGPROC;
5994                         lParam : LPARAM;
5995                         pfnCallback : LPFNPSPCALLBACK;
5996                         pcRefParent : ^UINT;
5997                        );
5998                );
5999       end;
6000     LPPROPSHEETPAGEW = ^PROPSHEETPAGEW;
6001     LPCPROPSHEETPAGEW = ^PROPSHEETPAGEW;
6002
6003{$IFDEF UNICODE}
6004     LPPROPSHEETPAGE = ^PROPSHEETPAGEW;
6005     LPCPROPSHEETPAGE = ^PROPSHEETPAGEW;
6006     _PROPSHEETPAGE = PROPSHEETPAGEW;
6007     PROPSHEETPAGE = PROPSHEETPAGEW;
6008     TPROPSHEETPAGE = PROPSHEETPAGEW;
6009     PPROPSHEETPAGE = ^PROPSHEETPAGEW;
6010{$ELSE UNICODE}
6011     LPPROPSHEETPAGE = ^PROPSHEETPAGEA;
6012     LPCPROPSHEETPAGE = ^PROPSHEETPAGEA;
6013     _PROPSHEETPAGE = PROPSHEETPAGEA;
6014     PROPSHEETPAGE = PROPSHEETPAGEA;
6015     TPROPSHEETPAGE = PROPSHEETPAGEA;
6016     PPROPSHEETPAGE = ^PROPSHEETPAGEA;
6017{$ENDIF UNICODE}
6018
6019     emptyrecord = record
6020       end;
6021     lpemptyrecord = ^emptyrecord;
6022     HPROPSHEETPAGE = ^emptyrecord;
6023
6024     PROPSHEETHEADERA = record //prsht
6025          dwSize : DWORD;
6026          dwFlags : DWORD;
6027          hwndParent : HWND;
6028          hInstance : HINST;
6029          case longint of
6030              0 : (hIcon : HICON);
6031              1 : (pszIcon : LPCTSTR;
6032                   pszCaption : LPCTSTR;
6033                   nPages : UINT;
6034                   case longint of
6035                      0 : (nStartPage : UINT);
6036                      1 : (pStartPage : LPCTSTR;
6037                           case longint of
6038                              0 : (ppsp : LPCPROPSHEETPAGE);
6039                              1 : (phpage : ^HPROPSHEETPAGE;
6040                                   pfnCallback : PFNPROPSHEETCALLBACK;
6041                                   case longint of
6042                                     0 : (hbmWatermark : HBITMAP);
6043                                     1 : (pszbmWatermark : LPCTSTR;
6044                                          hplWatermark : HPALETTE;
6045                                          case longint of
6046                                             0 : (hbmHeader : HBITMAP);
6047                                             1 : (pszbmHeader: PAnsiChar);
6048                                         );
6049                                  );
6050                          );
6051                  );
6052       end;
6053     LPPROPSHEETHEADERA = ^PROPSHEETHEADERA;
6054     LPCPROPSHEETHEADERA = ^PROPSHEETHEADERA;
6055     PPROPSHEETHEADERA = ^PROPSHEETHEADERA;
6056
6057     PROPSHEETHEADERW = record //prsht
6058          dwSize : DWORD;
6059          dwFlags : DWORD;
6060          hwndParent : HWND;
6061          hInstance : HINST;
6062          case longint of
6063              0 : (hIcon : HICON);
6064              1 : (pszIcon : LPCWSTR;
6065                   pszCaption : LPCWSTR;
6066                   nPages : UINT;
6067                   case longint of
6068                      0 : (nStartPage : UINT);
6069                      1 : (pStartPage : LPCWSTR;
6070                           case longint of
6071                              0 : (ppsp : LPCPROPSHEETPAGE);
6072                              1 : (phpage : ^HPROPSHEETPAGE;
6073                                   pfnCallback : PFNPROPSHEETCALLBACK;
6074                                  );
6075                          );
6076                  );
6077       end;
6078
6079     LPPROPSHEETHEADERW = ^PROPSHEETHEADERW;
6080     LPCPROPSHEETHEADERW = ^PROPSHEETHEADERW;
6081     PPROPSHEETHEADERW = ^PROPSHEETHEADERW;
6082
6083{$IFDEF UNICODE}
6084     _PROPSHEETHEADER = PROPSHEETHEADERW;
6085     PROPSHEETHEADER = PROPSHEETHEADERW;
6086     TPROPSHEETHEADER = PROPSHEETHEADERW;
6087     PPROPSHEETHEADER = ^PROPSHEETHEADERW;
6088     LPPROPSHEETHEADER = ^PROPSHEETHEADERW;
6089     LPCPROPSHEETHEADER = ^PROPSHEETHEADERW;
6090{$ELSE UNICODE}
6091     _PROPSHEETHEADER = PROPSHEETHEADERA;
6092     PROPSHEETHEADER = PROPSHEETHEADERA;
6093     TPROPSHEETHEADER = PROPSHEETHEADERA;
6094     PPROPSHEETHEADER = ^PROPSHEETHEADERA;
6095     LPPROPSHEETHEADER = ^PROPSHEETHEADERA;
6096     LPCPROPSHEETHEADER = ^PROPSHEETHEADERA;
6097{$ENDIF UNICODE}
6098
6099
6100     { PropertySheet callbacks  }
6101     LPFNADDPROPSHEETPAGE = function (_para1:HPROPSHEETPAGE; _para2:LPARAM):WINBOOL;
6102     TFNADDPROPSHEETPAGE = LPFNADDPROPSHEETPAGE;
6103
6104     LPFNADDPROPSHEETPAGES = function (_para1:LPVOID; _para2:LPFNADDPROPSHEETPAGE; _para3:LPARAM):WINBOOL;
6105     TFNADDPROPSHEETPAGES = LPFNADDPROPSHEETPAGES;
6106
6107     PROTOCOL_INFO = record
6108          dwServiceFlags : DWORD;
6109          iAddressFamily : WINT;
6110          iMaxSockAddr : WINT;
6111          iMinSockAddr : WINT;
6112          iSocketType : WINT;
6113          iProtocol : WINT;
6114          dwMessageSize : DWORD;
6115          lpProtocol : LPTSTR;
6116       end;
6117     _PROTOCOL_INFO = PROTOCOL_INFO;
6118     TPROTOCOLINFO = PROTOCOL_INFO;
6119     PPROTOCOLINFO = ^PROTOCOL_INFO;
6120
6121     PROVIDOR_INFO_1 = record
6122          pName : LPTSTR;
6123          pEnvironment : LPTSTR;
6124          pDLLName : LPTSTR;
6125       end;
6126     _PROVIDOR_INFO_1 = PROVIDOR_INFO_1;
6127     TPROVIDORINFO1 = PROVIDOR_INFO_1;
6128     PPROVIDORINFO1 = ^PROVIDOR_INFO_1;
6129
6130     PSHNOTIFY = record
6131          hdr : NMHDR;
6132          lParam : LPARAM;
6133       end;
6134     LPPSHNOTIFY = ^PSHNOTIFY;
6135     _PSHNOTIFY = PSHNOTIFY;
6136     TPSHNOTIFY = PSHNOTIFY;
6137     PPSHNOTIFY = ^PSHNOTIFY;
6138
6139     PUNCTUATION = record
6140          iSize : UINT;
6141          szPunctuation : LPSTR;
6142       end;
6143     _punctuation = PUNCTUATION;
6144     Tpunctuation = PUNCTUATION;
6145     Ppunctuation = ^PUNCTUATION;
6146
6147     QUERY_SERVICE_CONFIG = record
6148          dwServiceType : DWORD;
6149          dwStartType : DWORD;
6150          dwErrorControl : DWORD;
6151          lpBinaryPathName : LPTSTR;
6152          lpLoadOrderGroup : LPTSTR;
6153          dwTagId : DWORD;
6154          lpDependencies : LPTSTR;
6155          lpServiceStartName : LPTSTR;
6156          lpDisplayName : LPTSTR;
6157       end;
6158     LPQUERY_SERVICE_CONFIG = ^QUERY_SERVICE_CONFIG;
6159     _QUERY_SERVICE_CONFIG = QUERY_SERVICE_CONFIG;
6160     TQUERYSERVICECONFIG = QUERY_SERVICE_CONFIG;
6161     PQUERYSERVICECONFIG = ^QUERY_SERVICE_CONFIG;
6162
6163     QUERY_SERVICE_LOCK_STATUS = record
6164          fIsLocked : DWORD;
6165          lpLockOwner : LPTSTR;
6166          dwLockDuration : DWORD;
6167       end;
6168     LPQUERY_SERVICE_LOCK_STATUS = ^QUERY_SERVICE_LOCK_STATUS;
6169     _QUERY_SERVICE_LOCK_STATUS = QUERY_SERVICE_LOCK_STATUS;
6170     TQUERYSERVICELOCKSTATUS = QUERY_SERVICE_LOCK_STATUS;
6171     PQUERYSERVICELOCKSTATUS = ^QUERY_SERVICE_LOCK_STATUS;
6172
6173     RASAMB = record
6174          dwSize : DWORD;
6175          dwError : DWORD;
6176          szNetBiosError : array[0..(NETBIOS_NAME_LEN + 1)-1] of TCHAR;
6177          bLana : BYTE;
6178       end;
6179     _RASAMB = RASAMB;
6180     TRASAMB = RASAMB;
6181     PRASAMB = ^RASAMB;
6182
6183     RASCONN = record
6184          dwSize : DWORD;
6185          hrasconn : HRASCONN;
6186          szEntryName : array[0..(RAS_MaxEntryName + 1)-1] of TCHAR;
6187          szDeviceType : array[0..(RAS_MaxDeviceType + 1)-1] of CHAR;
6188          szDeviceName : array[0..(RAS_MaxDeviceName + 1)-1] of CHAR;
6189       end;
6190     _RASCONN = RASCONN;
6191     TRASCONN = RASCONN;
6192     PRASCONN = ^RASCONN;
6193
6194     RASCONNSTATUS = record
6195          dwSize : DWORD;
6196          rasconnstate : RASCONNSTATE;
6197          dwError : DWORD;
6198          szDeviceType : array[0..(RAS_MaxDeviceType + 1)-1] of TCHAR;
6199          szDeviceName : array[0..(RAS_MaxDeviceName + 1)-1] of TCHAR;
6200       end;
6201     _RASCONNSTATUS = RASCONNSTATUS;
6202     TRASCONNSTATUS = RASCONNSTATUS;
6203     PRASCONNSTATUS = ^RASCONNSTATUS;
6204
6205     RASDIALEXTENSIONS = record
6206          dwSize : DWORD;
6207          dwfOptions : DWORD;
6208          hwndParent : HWND;
6209          reserved : DWORD;
6210       end;
6211     _RASDIALEXTENSIONS = RASDIALEXTENSIONS;
6212     TRASDIALEXTENSIONS = RASDIALEXTENSIONS;
6213     PRASDIALEXTENSIONS = ^RASDIALEXTENSIONS;
6214
6215     RASDIALPARAMS = record
6216          dwSize : DWORD;
6217          szEntryName : array[0..(RAS_MaxEntryName + 1)-1] of TCHAR;
6218          szPhoneNumber : array[0..(RAS_MaxPhoneNumber + 1)-1] of TCHAR;
6219          szCallbackNumber : array[0..(RAS_MaxCallbackNumber + 1)-1] of TCHAR;
6220          szUserName : array[0..(UNLEN + 1)-1] of TCHAR;
6221          szPassword : array[0..(PWLEN + 1)-1] of TCHAR;
6222          szDomain : array[0..(DNLEN + 1)-1] of TCHAR;
6223       end;
6224     _RASDIALPARAMS = RASDIALPARAMS;
6225     TRASDIALPARAMS = RASDIALPARAMS;
6226     PRASDIALPARAMS = ^RASDIALPARAMS;
6227
6228     RASENTRYNAME = record
6229          dwSize : DWORD;
6230          szEntryName : array[0..(RAS_MaxEntryName + 1)-1] of TCHAR;
6231       end;
6232     _RASENTRYNAME = RASENTRYNAME;
6233     TRASENTRYNAME = RASENTRYNAME;
6234     PRASENTRYNAME = ^RASENTRYNAME;
6235
6236     RASPPPIP = record
6237          dwSize : DWORD;
6238          dwError : DWORD;
6239          szIpAddress : array[0..(RAS_MaxIpAddress + 1)-1] of TCHAR;
6240       end;
6241     _RASPPPIP = RASPPPIP;
6242     TRASPPPIP = RASPPPIP;
6243     PRASPPPIP = ^RASPPPIP;
6244
6245     RASPPPIPX = record
6246          dwSize : DWORD;
6247          dwError : DWORD;
6248          szIpxAddress : array[0..(RAS_MaxIpxAddress + 1)-1] of TCHAR;
6249       end;
6250     _RASPPPIPX = RASPPPIPX;
6251     TRASPPPIPX = RASPPPIPX;
6252     PRASPPPIPX = ^RASPPPIPX;
6253
6254     RASPPPNBF = record
6255          dwSize : DWORD;
6256          dwError : DWORD;
6257          dwNetBiosError : DWORD;
6258          szNetBiosError : array[0..(NETBIOS_NAME_LEN + 1)-1] of TCHAR;
6259          szWorkstationName : array[0..(NETBIOS_NAME_LEN + 1)-1] of TCHAR;
6260          bLana : BYTE;
6261       end;
6262     _RASPPPNBF = RASPPPNBF;
6263     TRASPPPNBF = RASPPPNBF;
6264     PRASPPPNBF = ^RASPPPNBF;
6265
6266     RASTERIZER_STATUS = record
6267          nSize : integer;
6268          wFlags : integer;
6269          nLanguageID : integer;
6270       end;
6271     LPRASTERIZER_STATUS = ^RASTERIZER_STATUS;
6272     _RASTERIZER_STATUS = RASTERIZER_STATUS;
6273     TRASTERIZERSTATUS = RASTERIZER_STATUS;
6274     PRASTERIZERSTATUS = ^RASTERIZER_STATUS;
6275
6276     REASSIGN_BLOCKS = record
6277          Reserved : WORD;
6278          Count : WORD;
6279          BlockNumber : array[0..0] of DWORD;
6280       end;
6281     _REASSIGN_BLOCKS = REASSIGN_BLOCKS;
6282     TREASSIGNBLOCKS = REASSIGN_BLOCKS;
6283     PREASSIGNBLOCKS = ^REASSIGN_BLOCKS;
6284
6285     REMOTE_NAME_INFO = record
6286          lpUniversalName : LPTSTR;
6287          lpConnectionName : LPTSTR;
6288          lpRemainingPath : LPTSTR;
6289       end;
6290     _REMOTE_NAME_INFO = REMOTE_NAME_INFO;
6291     TREMOTENAMEINFO = REMOTE_NAME_INFO;
6292     PREMOTENAMEINFO = ^REMOTE_NAME_INFO;
6293
6294  (*
6295   TODO: OLE
6296  typedef struct _reobject {
6297    DWORD  cbStruct;
6298    LONG   cp;
6299    CLSID  clsid;
6300    LPOLEOBJECT      poleobj;
6301    LPSTORAGE        pstg;
6302    LPOLECLIENTSITE  polesite;
6303    SIZEL  sizel;
6304    DWORD  dvaspect;
6305    DWORD  dwFlags;
6306    DWORD  dwUser;
6307  } REOBJECT;
6308   *)
6309
6310     REPASTESPECIAL = record
6311          dwAspect : DWORD;
6312          dwParam : DWORD;
6313       end;
6314     _repastespecial = REPASTESPECIAL;
6315     Trepastespecial = REPASTESPECIAL;
6316     Prepastespecial = ^REPASTESPECIAL;
6317
6318     REQRESIZE = record
6319          nmhdr : NMHDR;
6320          rc : RECT;
6321       end;
6322     _reqresize = REQRESIZE;
6323     Treqresize = REQRESIZE;
6324     Preqresize = ^REQRESIZE;
6325
6326     RGNDATAHEADER = record
6327          dwSize : DWORD;
6328          iType : DWORD;
6329          nCount : DWORD;
6330          nRgnSize : DWORD;
6331          rcBound : RECT;
6332       end;
6333     _RGNDATAHEADER = RGNDATAHEADER;
6334     TRGNDATAHEADER = RGNDATAHEADER;
6335     PRGNDATAHEADER = ^RGNDATAHEADER;
6336
6337     RGNDATA = record
6338          rdh : RGNDATAHEADER;
6339          Buffer : array[0..0] of char;
6340       end;
6341     LPRGNDATA = ^RGNDATA;
6342     _RGNDATA = RGNDATA;
6343     TRGNDATA = RGNDATA;
6344     PRGNDATA = ^RGNDATA;
6345
6346     SCROLLINFO = record
6347          cbSize : UINT;
6348          fMask : UINT;
6349          nMin : longint;
6350          nMax : longint;
6351          nPage : UINT;
6352          nPos : longint;
6353          nTrackPos : longint;
6354       end;
6355     LPSCROLLINFO = ^SCROLLINFO;
6356     LPCSCROLLINFO = ^SCROLLINFO;
6357     tagSCROLLINFO = SCROLLINFO;
6358     TSCROLLINFO = SCROLLINFO;
6359     PSCROLLINFO = ^SCROLLINFO;
6360
6361     SECURITY_ATTRIBUTES = record
6362          nLength : DWORD;
6363          lpSecurityDescriptor : LPVOID;
6364          bInheritHandle : WINBOOL;
6365       end;
6366     LPSECURITY_ATTRIBUTES = ^SECURITY_ATTRIBUTES;
6367     _SECURITY_ATTRIBUTES = SECURITY_ATTRIBUTES;
6368     TSECURITYATTRIBUTES = SECURITY_ATTRIBUTES;
6369     PSECURITYATTRIBUTES = ^SECURITY_ATTRIBUTES;
6370
6371     SECURITY_INFORMATION = DWORD;
6372     PSECURITY_INFORMATION = ^SECURITY_INFORMATION;
6373     TSECURITYINFORMATION = SECURITY_INFORMATION;
6374     PSECURITYINFORMATION = ^SECURITY_INFORMATION;
6375
6376     SELCHANGE = record
6377          nmhdr : NMHDR;
6378          chrg : CHARRANGE;
6379          seltyp : WORD;
6380       end;
6381     _selchange = SELCHANGE;
6382     Tselchange = SELCHANGE;
6383     Pselchange = ^SELCHANGE;
6384
6385     SERIALKEYS = record
6386          cbSize : DWORD;
6387          dwFlags : DWORD;
6388          lpszActivePort : LPSTR;
6389          lpszPort : LPSTR;
6390          iBaudRate : DWORD;
6391          iPortState : DWORD;
6392       end;
6393     LPSERIALKEYS = ^SERIALKEYS;
6394     tagSERIALKEYS = SERIALKEYS;
6395     TSERIALKEYS = SERIALKEYS;
6396     PSERIALKEYS = ^SERIALKEYS;
6397
6398     SERVICE_TABLE_ENTRY = record
6399          lpServiceName : LPTSTR;
6400          lpServiceProc : LPSERVICE_MAIN_FUNCTION;
6401       end;
6402     LPSERVICE_TABLE_ENTRY = ^SERVICE_TABLE_ENTRY;
6403     _SERVICE_TABLE_ENTRY = SERVICE_TABLE_ENTRY;
6404     TSERVICETABLEENTRY = SERVICE_TABLE_ENTRY;
6405     PSERVICETABLEENTRY = ^SERVICE_TABLE_ENTRY;
6406
6407     SERVICE_TYPE_VALUE_ABS = record
6408          dwNameSpace : DWORD;
6409          dwValueType : DWORD;
6410          dwValueSize : DWORD;
6411          lpValueName : LPTSTR;
6412          lpValue : PVOID;
6413       end;
6414     _SERVICE_TYPE_VALUE_ABS = SERVICE_TYPE_VALUE_ABS;
6415     TSERVICETYPEVALUEABS = SERVICE_TYPE_VALUE_ABS;
6416     PSERVICETYPEVALUEABS = ^SERVICE_TYPE_VALUE_ABS;
6417
6418     SERVICE_TYPE_INFO_ABS = record
6419          lpTypeName : LPTSTR;
6420          dwValueCount : DWORD;
6421          Values : array[0..0] of SERVICE_TYPE_VALUE_ABS;
6422       end;
6423     _SERVICE_TYPE_INFO_ABS = SERVICE_TYPE_INFO_ABS;
6424     TSERVICETYPEINFOABS = SERVICE_TYPE_INFO_ABS;
6425     PSERVICETYPEINFOABS = ^SERVICE_TYPE_INFO_ABS;
6426
6427     SESSION_BUFFER = record
6428          lsn : UCHAR;
6429          state : UCHAR;
6430          local_name : array[0..(NCBNAMSZ)-1] of UCHAR;
6431          remote_name : array[0..(NCBNAMSZ)-1] of UCHAR;
6432          rcvs_outstanding : UCHAR;
6433          sends_outstanding : UCHAR;
6434       end;
6435     _SESSION_BUFFER = SESSION_BUFFER;
6436     TSESSIONBUFFER = SESSION_BUFFER;
6437     PSESSIONBUFFER = ^SESSION_BUFFER;
6438
6439     SESSION_HEADER = record
6440          sess_name : UCHAR;
6441          num_sess : UCHAR;
6442          rcv_dg_outstanding : UCHAR;
6443          rcv_any_outstanding : UCHAR;
6444       end;
6445     _SESSION_HEADER = SESSION_HEADER;
6446     TSESSIONHEADER = SESSION_HEADER;
6447     PSESSIONHEADER = ^SESSION_HEADER;
6448
6449     SET_PARTITION_INFORMATION = record
6450          PartitionType : BYTE;
6451       end;
6452     _SET_PARTITION_INFORMATION = SET_PARTITION_INFORMATION;
6453     TSETPARTITIONINFORMATION = SET_PARTITION_INFORMATION;
6454     PSETPARTITIONINFORMATION = ^SET_PARTITION_INFORMATION;
6455
6456     SHELLEXECUTEINFO = record //+shellapi
6457          cbSize: DWORD;
6458          fMask: ULONG;
6459          hwnd: HWND;
6460          lpVerb: LPCTSTR;
6461          lpFile: LPCTSTR;
6462          lpParameters: LPCTSTR;
6463          lpDirectory: LPCTSTR;
6464          nShow: Integer ;
6465          hInstApp: HINST;
6466          // Optional fields
6467          lpIDList: LPVOID;
6468          lpClass: LPCTSTR;
6469          hkeyClass: HKEY;
6470          dwHotKey: DWORD;
6471          hIcon: HANDLE;
6472          hProcess :HANDLE;
6473        end;
6474     _SHELLEXECUTEINFO=SHELLEXECUTEINFO;   //+shellapi
6475     LPSHELLEXECUTEINFO=^SHELLEXECUTEINFO; //+shellapi
6476
6477     SHCONTF = (SHCONTF_FOLDERS := 32,SHCONTF_NONFOLDERS := 64,
6478       SHCONTF_INCLUDEHIDDEN := 128);
6479     tagSHCONTF = SHCONTF;
6480     TSHCONTF = SHCONTF;
6481
6482     SHFILEINFO = record
6483          hIcon : HICON;
6484          iIcon : longint;
6485          dwAttributes : DWORD;
6486          szDisplayName : array[0..MAX_PATH-1] of TCHAR;
6487          szTypeName : array[0..79] of TCHAR;
6488       end;
6489     _SHFILEINFO = SHFILEINFO;
6490     TSHFILEINFO = SHFILEINFO;
6491     PSHFILEINFO = ^SHFILEINFO;
6492
6493     FILEOP_FLAGS = WORD;
6494     TFILEOPFLAGS = FILEOP_FLAGS;
6495     PFILEOPFLAGS = ^FILEOP_FLAGS;
6496
6497     SHFILEOPSTRUCTW = record //+shellapi
6498          wnd : HWND;
6499          wFunc : UINT;
6500          pFrom : LPCWSTR;
6501          pTo : LPCWSTR;
6502          fFlags : FILEOP_FLAGS;
6503          fAnyOperationsAborted : WINBOOL;
6504          hNameMappings : LPVOID;
6505          lpszProgressTitle : LPCWSTR;
6506       end;
6507     LPSHFILEOPSTRUCTW = ^SHFILEOPSTRUCTW;
6508     _SHFILEOPSTRUCT = SHFILEOPSTRUCTW;
6509     TSHFILEOPSTRUCT = SHFILEOPSTRUCTW;
6510     PSHFILEOPSTRUCT = ^SHFILEOPSTRUCTW;
6511     TSHFILEOPSTRUCTW = SHFILEOPSTRUCTW;
6512     PSHFILEOPSTRUCTW = ^SHFILEOPSTRUCTW;
6513
6514     SHGNO = (SHGDN_NORMAL := 0,SHGDN_INFOLDER := 1,
6515       SHGDN_FORPARSING := $8000);
6516     tagSHGDN = SHGNO;
6517     TSHGDN = SHGNO;
6518
6519     SHNAMEMAPPING = record
6520          pszOldPath : LPSTR;
6521          pszNewPath : LPSTR;
6522          cchOldPath : longint;
6523          cchNewPath : longint;
6524       end;
6525     LPSHNAMEMAPPING = ^SHNAMEMAPPING;
6526     _SHNAMEMAPPING = SHNAMEMAPPING;
6527     TSHNAMEMAPPING = SHNAMEMAPPING;
6528     PSHNAMEMAPPING = ^SHNAMEMAPPING;
6529
6530     SINGLE_LIST_ENTRY = record
6531          Next : ^_SINGLE_LIST_ENTRY;
6532       end;
6533     _SINGLE_LIST_ENTRY = SINGLE_LIST_ENTRY;
6534     TSINGLELISTENTRY = SINGLE_LIST_ENTRY;
6535     PSINGLELISTENTRY = ^SINGLE_LIST_ENTRY;
6536
6537     SOUNDSENTRY = record
6538          cbSize : UINT;
6539          dwFlags : DWORD;
6540          iFSTextEffect : DWORD;
6541          iFSTextEffectMSec : DWORD;
6542          iFSTextEffectColorBits : DWORD;
6543          iFSGrafEffect : DWORD;
6544          iFSGrafEffectMSec : DWORD;
6545          iFSGrafEffectColor : DWORD;
6546          iWindowsEffect : DWORD;
6547          iWindowsEffectMSec : DWORD;
6548          lpszWindowsEffectDLL : LPTSTR;
6549          iWindowsEffectOrdinal : DWORD;
6550       end;
6551     LPSOUNDSENTRY = ^SOUNDSENTRY;
6552     tagSOUNDSENTRY = SOUNDSENTRY;
6553     TSOUNDSENTRY = SOUNDSENTRY;
6554     PSOUNDSENTRY = ^SOUNDSENTRY;
6555
6556     STARTUPINFO = record
6557          cb : DWORD;
6558          lpReserved : LPTSTR;
6559          lpDesktop : LPTSTR;
6560          lpTitle : LPTSTR;
6561          dwX : DWORD;
6562          dwY : DWORD;
6563          dwXSize : DWORD;
6564          dwYSize : DWORD;
6565          dwXCountChars : DWORD;
6566          dwYCountChars : DWORD;
6567          dwFillAttribute : DWORD;
6568          dwFlags : DWORD;
6569          wShowWindow : WORD;
6570          cbReserved2 : WORD;
6571          lpReserved2 : LPBYTE;
6572          hStdInput : HANDLE;
6573          hStdOutput : HANDLE;
6574          hStdError : HANDLE;
6575       end;
6576     LPSTARTUPINFO = ^STARTUPINFO;
6577     _STARTUPINFO = STARTUPINFO;
6578     TSTARTUPINFO = STARTUPINFO;
6579     PSTARTUPINFO = ^STARTUPINFO;
6580
6581     STICKYKEYS = record
6582          cbSize : DWORD;
6583          dwFlags : DWORD;
6584       end;
6585     LPSTICKYKEYS = ^STICKYKEYS;
6586     tagSTICKYKEYS = STICKYKEYS;
6587     TSTICKYKEYS = STICKYKEYS;
6588     PSTICKYKEYS = ^STICKYKEYS;
6589
6590     STRRET = record
6591          uType : UINT;
6592          DUMMYUNIONNAME : record
6593              case longint of
6594                 0 : ( pOleStr : LPWSTR );
6595                 1 : ( uOffset : UINT );
6596                 2 : ( cStr : array[0..(MAX_PATH)-1] of char );
6597              end;
6598       end;
6599     LPSTRRET = ^STRRET;
6600     _STRRET = STRRET;
6601     TSTRRET = STRRET;
6602     PSTRRET = ^STRRET;
6603
6604     STYLEBUF = record
6605          dwStyle : DWORD;
6606          szDescription : array[0..31] of CHAR;
6607       end;
6608     LPSTYLEBUF = ^STYLEBUF;
6609     _tagSTYLEBUF = STYLEBUF;
6610     TSTYLEBUF = STYLEBUF;
6611     PSTYLEBUF = ^STYLEBUF;
6612
6613     STYLESTRUCT = record
6614          styleOld : DWORD;
6615          styleNew : DWORD;
6616       end;
6617     LPSTYLESTRUCT = ^STYLESTRUCT;
6618     tagSTYLESTRUCT = STYLESTRUCT;
6619     TSTYLESTRUCT = STYLESTRUCT;
6620     PSTYLESTRUCT = ^STYLESTRUCT;
6621
6622     SYSTEM_AUDIT_ACE = record
6623          Header : ACE_HEADER;
6624          Mask : ACCESS_MASK;
6625          SidStart : DWORD;
6626       end;
6627     _SYSTEM_AUDIT_ACE = SYSTEM_AUDIT_ACE;
6628     TSYSTEMAUDITACE = SYSTEM_AUDIT_ACE;
6629     PSYSTEMAUDITACE = ^SYSTEM_AUDIT_ACE;
6630
6631     SYSTEM_INFO = record
6632          u : record
6633              case longint of
6634                 0 : ( dwOemId : DWORD );
6635                 1 : ( s : record
6636                      wProcessorArchitecture : WORD;
6637                      wReserved : WORD;
6638                   end );
6639              end;
6640          dwPageSize : DWORD;
6641          lpMinimumApplicationAddress : LPVOID;
6642          lpMaximumApplicationAddress : LPVOID;
6643          dwActiveProcessorMask : DWORD;
6644          dwNumberOfProcessors : DWORD;
6645          dwProcessorType : DWORD;
6646          dwAllocationGranularity : DWORD;
6647          wProcessorLevel : WORD;
6648          wProcessorRevision : WORD;
6649       end;
6650     LPSYSTEM_INFO = ^SYSTEM_INFO;
6651     _SYSTEM_INFO = SYSTEM_INFO;
6652     TSYSTEMINFO = SYSTEM_INFO;
6653     PSYSTEMINFO = ^SYSTEM_INFO;
6654
6655     SYSTEM_POWER_STATUS = record
6656          ACLineStatus : BYTE;
6657          BatteryFlag : BYTE;
6658          BatteryLifePercent : BYTE;
6659          Reserved1 : BYTE;
6660          BatteryLifeTime : DWORD;
6661          BatteryFullLifeTime : DWORD;
6662       end;
6663     _SYSTEM_POWER_STATUS = SYSTEM_POWER_STATUS;
6664     TSYSTEMPOWERSTATUS = SYSTEM_POWER_STATUS;
6665     PSYSTEMPOWERSTATUS = ^SYSTEM_POWER_STATUS;
6666
6667     LPSYSTEM_POWER_STATUS = ^emptyrecord;
6668
6669     TAPE_ERASE = record
6670          _Type : ULONG;
6671       end;
6672     _TAPE_ERASE = TAPE_ERASE;
6673     TTAPEERASE = TAPE_ERASE;
6674     PTAPEERASE = ^TAPE_ERASE;
6675
6676     TAPE_GET_DRIVE_PARAMETERS = record
6677          ECC : BOOLEAN;
6678          Compression : BOOLEAN;
6679          DataPadding : BOOLEAN;
6680          ReportSetmarks : BOOLEAN;
6681          DefaultBlockSize : ULONG;
6682          MaximumBlockSize : ULONG;
6683          MinimumBlockSize : ULONG;
6684          MaximumPartitionCount : ULONG;
6685          FeaturesLow : ULONG;
6686          FeaturesHigh : ULONG;
6687          EOTWarningZoneSize : ULONG;
6688       end;
6689     _TAPE_GET_DRIVE_PARAMETERS = TAPE_GET_DRIVE_PARAMETERS;
6690     TTAPEGETDRIVEPARAMETERS = TAPE_GET_DRIVE_PARAMETERS;
6691     PTAPEGETDRIVEPARAMETERS = ^TAPE_GET_DRIVE_PARAMETERS;
6692
6693     TAPE_GET_MEDIA_PARAMETERS = record
6694          Capacity : LARGE_INTEGER;
6695          Remaining : LARGE_INTEGER;
6696          BlockSize : DWORD;
6697          PartitionCount : DWORD;
6698          WriteProtected : BOOLEAN;
6699       end;
6700     _TAPE_GET_MEDIA_PARAMETERS = TAPE_GET_MEDIA_PARAMETERS;
6701     TTAPEGETMEDIAPARAMETERS = TAPE_GET_MEDIA_PARAMETERS;
6702     PTAPEGETMEDIAPARAMETERS = ^TAPE_GET_MEDIA_PARAMETERS;
6703
6704     TAPE_GET_POSITION = record
6705          _Type : ULONG;
6706          Partition : ULONG;
6707          OffsetLow : ULONG;
6708          OffsetHigh : ULONG;
6709       end;
6710     _TAPE_GET_POSITION = TAPE_GET_POSITION;
6711     TTAPEGETPOSITION = TAPE_GET_POSITION;
6712     PTAPEGETPOSITION = ^TAPE_GET_POSITION;
6713
6714     TAPE_PREPARE = record
6715          Operation : ULONG;
6716       end;
6717     _TAPE_PREPARE = TAPE_PREPARE;
6718     TTAPEPREPARE = TAPE_PREPARE;
6719     PTAPEPREPARE = ^TAPE_PREPARE;
6720
6721     TAPE_SET_DRIVE_PARAMETERS = record
6722          ECC : BOOLEAN;
6723          Compression : BOOLEAN;
6724          DataPadding : BOOLEAN;
6725          ReportSetmarks : BOOLEAN;
6726          EOTWarningZoneSize : ULONG;
6727       end;
6728     _TAPE_SET_DRIVE_PARAMETERS = TAPE_SET_DRIVE_PARAMETERS;
6729     TTAPESETDRIVEPARAMETERS = TAPE_SET_DRIVE_PARAMETERS;
6730     PTAPESETDRIVEPARAMETERS = ^TAPE_SET_DRIVE_PARAMETERS;
6731
6732     TAPE_SET_MEDIA_PARAMETERS = record
6733          BlockSize : ULONG;
6734       end;
6735     _TAPE_SET_MEDIA_PARAMETERS = TAPE_SET_MEDIA_PARAMETERS;
6736     TTAPESETMEDIAPARAMETERS = TAPE_SET_MEDIA_PARAMETERS;
6737     PTAPESETMEDIAPARAMETERS = ^TAPE_SET_MEDIA_PARAMETERS;
6738
6739     TAPE_SET_POSITION = record
6740          Method : ULONG;
6741          Partition : ULONG;
6742          OffsetLow : ULONG;
6743          OffsetHigh : ULONG;
6744       end;
6745     _TAPE_SET_POSITION = TAPE_SET_POSITION;
6746     TTAPESETPOSITION = TAPE_SET_POSITION;
6747     PTAPESETPOSITION = ^TAPE_SET_POSITION;
6748
6749     TAPE_WRITE_MARKS = record
6750          _Type : ULONG;
6751          Count : ULONG;
6752       end;
6753     _TAPE_WRITE_MARKS = TAPE_WRITE_MARKS;
6754     TTAPEWRITEMARKS = TAPE_WRITE_MARKS;
6755     PTAPEWRITEMARKS = ^TAPE_WRITE_MARKS;
6756
6757     TBADDBITMAP = record
6758          hInst : HINST;
6759          nID : UINT;
6760       end;
6761     LPTBADDBITMAP = ^TBADDBITMAP;
6762     TTBADDBITMAP = TBADDBITMAP;
6763     PTBADDBITMAP = ^TBADDBITMAP;
6764
6765     TBBUTTON = record
6766          iBitmap : longint;
6767          idCommand : longint;
6768          fsState : BYTE;
6769          fsStyle : BYTE;
6770          dwData : DWORD;
6771          iString : longint;
6772       end;
6773     LPTBBUTTON = ^TBBUTTON;
6774     LPCTBBUTTON = ^TBBUTTON;
6775     _TBBUTTON = TBBUTTON;
6776     TTBBUTTON = TBBUTTON;
6777     PTBBUTTON = ^TBBUTTON;
6778
6779     TBNOTIFY = record
6780          hdr : NMHDR;
6781          iItem : longint;
6782          tbButton : TBBUTTON;
6783          cchText : longint;
6784          pszText : LPTSTR;
6785       end;
6786     LPTBNOTIFY = ^TBNOTIFY;
6787     TTBNOTIFY = TBNOTIFY;
6788     PTBNOTIFY = ^TBNOTIFY;
6789
6790     TBSAVEPARAMS = record
6791          hkr : HKEY;
6792          pszSubKey : LPCTSTR;
6793          pszValueName : LPCTSTR;
6794       end;
6795     TTBSAVEPARAMS = TBSAVEPARAMS;
6796     PTBSAVEPARAMS = ^TBSAVEPARAMS;
6797
6798     TC_HITTESTINFO = record
6799          pt : POINT;
6800          flags : UINT;
6801       end;
6802     _TC_HITTESTINFO = TC_HITTESTINFO;
6803     TTCHITTESTINFO = TC_HITTESTINFO;
6804     PTCHITTESTINFO = ^TC_HITTESTINFO;
6805
6806     TC_ITEM = record
6807          mask : UINT;
6808          lpReserved1 : UINT;
6809          lpReserved2 : UINT;
6810          pszText : LPTSTR;
6811          cchTextMax : longint;
6812          iImage : longint;
6813          lParam : LPARAM;
6814       end;
6815     _TC_ITEM = TC_ITEM;
6816     TTCITEM = TC_ITEM;
6817     PTCITEM = ^TC_ITEM;
6818
6819     TC_ITEMHEADER = record
6820          mask : UINT;
6821          lpReserved1 : UINT;
6822          lpReserved2 : UINT;
6823          pszText : LPTSTR;
6824          cchTextMax : longint;
6825          iImage : longint;
6826       end;
6827     _TC_ITEMHEADER = TC_ITEMHEADER;
6828     TTCITEMHEADER = TC_ITEMHEADER;
6829     PTCITEMHEADER = ^TC_ITEMHEADER;
6830
6831     TC_KEYDOWN = record
6832          hdr : NMHDR;
6833          wVKey : WORD;
6834          flags : UINT;
6835       end;
6836     _TC_KEYDOWN = TC_KEYDOWN;
6837     TTCKEYDOWN = TC_KEYDOWN;
6838     PTCKEYDOWN = ^TC_KEYDOWN;
6839
6840     TEXTRANGE = record
6841          chrg : CHARRANGE;
6842          lpstrText : LPSTR;
6843       end;
6844     _textrange = TEXTRANGE;
6845     Ttextrange = TEXTRANGE;
6846     Ptextrange = ^TEXTRANGE;
6847
6848     TIME_ZONE_INFORMATION = record
6849          Bias : LONG;
6850          StandardName : array[0..31] of WCHAR;
6851          StandardDate : SYSTEMTIME;
6852          StandardBias : LONG;
6853          DaylightName : array[0..31] of WCHAR;
6854          DaylightDate : SYSTEMTIME;
6855          DaylightBias : LONG;
6856       end;
6857     LPTIME_ZONE_INFORMATION = ^TIME_ZONE_INFORMATION;
6858     _TIME_ZONE_INFORMATION = TIME_ZONE_INFORMATION;
6859     TTIMEZONEINFORMATION = TIME_ZONE_INFORMATION;
6860     PTIMEZONEINFORMATION = ^TIME_ZONE_INFORMATION;
6861
6862     TOGGLEKEYS = record
6863          cbSize : DWORD;
6864          dwFlags : DWORD;
6865       end;
6866     tagTOGGLEKEYS = TOGGLEKEYS;
6867     TTOGGLEKEYS = TOGGLEKEYS;
6868     PTOGGLEKEYS = ^TOGGLEKEYS;
6869
6870     TOKEN_SOURCE = record
6871          SourceName : array[0..7] of CHAR;
6872          SourceIdentifier : LUID;
6873       end;
6874     _TOKEN_SOURCE = TOKEN_SOURCE;
6875     TTOKENSOURCE = TOKEN_SOURCE;
6876     PTOKENSOURCE = ^TOKEN_SOURCE;
6877
6878     TOKEN_CONTROL = record
6879          TokenId : LUID;
6880          AuthenticationId : LUID;
6881          ModifiedId : LUID;
6882          TokenSource : TOKEN_SOURCE;
6883       end;
6884     _TOKEN_CONTROL = TOKEN_CONTROL;
6885     TTOKENCONTROL = TOKEN_CONTROL;
6886     PTOKENCONTROL = ^TOKEN_CONTROL;
6887
6888     TOKEN_DEFAULT_DACL = record
6889          DefaultDacl : PACL;
6890       end;
6891     _TOKEN_DEFAULT_DACL = TOKEN_DEFAULT_DACL;
6892     TTOKENDEFAULTDACL = TOKEN_DEFAULT_DACL;
6893     PTOKENDEFAULTDACL = ^TOKEN_DEFAULT_DACL;
6894
6895     TOKEN_GROUPS = record
6896          GroupCount : DWORD;
6897          Groups : array[0..(ANYSIZE_ARRAY)-1] of SID_AND_ATTRIBUTES;
6898       end;
6899     PTOKEN_GROUPS = ^TOKEN_GROUPS;
6900     LPTOKEN_GROUPS = ^TOKEN_GROUPS;
6901     _TOKEN_GROUPS = TOKEN_GROUPS;
6902     TTOKENGROUPS = TOKEN_GROUPS;
6903     PTOKENGROUPS = ^TOKEN_GROUPS;
6904
6905     TOKEN_OWNER = record
6906          Owner : PSID;
6907       end;
6908     _TOKEN_OWNER = TOKEN_OWNER;
6909     TTOKENOWNER = TOKEN_OWNER;
6910     PTOKENOWNER = ^TOKEN_OWNER;
6911
6912     TOKEN_PRIMARY_GROUP = record
6913          PrimaryGroup : PSID;
6914       end;
6915     _TOKEN_PRIMARY_GROUP = TOKEN_PRIMARY_GROUP;
6916     TTOKENPRIMARYGROUP = TOKEN_PRIMARY_GROUP;
6917     PTOKENPRIMARYGROUP = ^TOKEN_PRIMARY_GROUP;
6918
6919     TOKEN_PRIVILEGES = packed record
6920          PrivilegeCount : DWORD;
6921          Privileges : array[0..(ANYSIZE_ARRAY)-1] of LUID_AND_ATTRIBUTES;
6922       end;
6923
6924     PTOKEN_PRIVILEGES = ^TOKEN_PRIVILEGES;
6925     LPTOKEN_PRIVILEGES = ^TOKEN_PRIVILEGES;
6926     _TOKEN_PRIVILEGES = TOKEN_PRIVILEGES;
6927     TTOKENPRIVILEGES = TOKEN_PRIVILEGES;
6928     PTOKENPRIVILEGES = ^TOKEN_PRIVILEGES;
6929
6930     TOKEN_STATISTICS = record
6931          TokenId : LUID;
6932          AuthenticationId : LUID;
6933          ExpirationTime : LARGE_INTEGER;
6934          TokenType : TOKEN_TYPE;
6935          ImpersonationLevel : SECURITY_IMPERSONATION_LEVEL;
6936          DynamicCharged : DWORD;
6937          DynamicAvailable : DWORD;
6938          GroupCount : DWORD;
6939          PrivilegeCount : DWORD;
6940          ModifiedId : LUID;
6941       end;
6942     _TOKEN_STATISTICS = TOKEN_STATISTICS;
6943     TTOKENSTATISTICS = TOKEN_STATISTICS;
6944     PTOKENSTATISTICS = ^TOKEN_STATISTICS;
6945
6946     TOKEN_USER = record
6947          User : SID_AND_ATTRIBUTES;
6948       end;
6949     _TOKEN_USER = TOKEN_USER;
6950     TTOKENUSER = TOKEN_USER;
6951     PTOKENUSER = ^TOKEN_USER;
6952
6953     TOOLINFO = record
6954          cbSize : UINT;
6955          uFlags : UINT;
6956          hwnd : HWND;
6957          uId : UINT;
6958          rect : RECT;
6959          hinst : HINST;
6960          lpszText : LPTSTR;
6961       end;
6962     LPTOOLINFO = ^TOOLINFO;
6963     TTOOLINFO = TOOLINFO;
6964     PTOOLINFO = ^TOOLINFO;
6965
6966     TPMPARAMS = record
6967          cbSize : UINT;
6968          rcExclude : RECT;
6969       end;
6970     LPTPMPARAMS = ^TPMPARAMS;
6971     tagTPMPARAMS = TPMPARAMS;
6972     TTPMPARAMS = TPMPARAMS;
6973     PTPMPARAMS = ^TPMPARAMS;
6974
6975     TRANSMIT_FILE_BUFFERS = record
6976          Head : PVOID;
6977          HeadLength : DWORD;
6978          Tail : PVOID;
6979          TailLength : DWORD;
6980       end;
6981     _TRANSMIT_FILE_BUFFERS = TRANSMIT_FILE_BUFFERS;
6982     TTRANSMITFILEBUFFERS = TRANSMIT_FILE_BUFFERS;
6983     PTRANSMITFILEBUFFERS = ^TRANSMIT_FILE_BUFFERS;
6984
6985     TTHITTESTINFO = record
6986          hwnd : HWND;
6987          pt : POINT;
6988          ti : TOOLINFO;
6989       end;
6990     LPHITTESTINFO = ^TTHITTESTINFO;
6991     _TT_HITTESTINFO = TTHITTESTINFO;
6992     TTTHITTESTINFO = TTHITTESTINFO;
6993     PTTHITTESTINFO = ^TTHITTESTINFO;
6994
6995     TTPOLYCURVE = record
6996          wType : WORD;
6997          cpfx : WORD;
6998          apfx : array[0..0] of POINTFX;
6999       end;
7000     LPTTPOLYCURVE = ^TTPOLYCURVE;
7001     tagTTPOLYCURVE = TTPOLYCURVE;
7002     TTTPOLYCURVE = TTPOLYCURVE;
7003     PTTPOLYCURVE = ^TTPOLYCURVE;
7004
7005     TTPOLYGONHEADER = record
7006          cb : DWORD;
7007          dwType : DWORD;
7008          pfxStart : POINTFX;
7009       end;
7010     LPTTPOLYGONHEADER = ^TTPOLYGONHEADER;
7011     _TTPOLYGONHEADER = TTPOLYGONHEADER;
7012     TTTPOLYGONHEADER = TTPOLYGONHEADER;
7013     PTTPOLYGONHEADER = ^TTPOLYGONHEADER;
7014
7015     TV_DISPINFO = record
7016          hdr : NMHDR;
7017          item : TV_ITEM;
7018       end;
7019     _TV_DISPINFO = TV_DISPINFO;
7020     TTVDISPINFO = TV_DISPINFO;
7021     PTVDISPINFO = ^TV_DISPINFO;
7022
7023     TV_HITTESTINFO = record
7024          pt : POINT;
7025          flags : UINT;
7026          hItem : HTREEITEM;
7027       end;
7028     LPTV_HITTESTINFO = ^TV_HITTESTINFO;
7029     _TVHITTESTINFO = TV_HITTESTINFO;
7030     TTVHITTESTINFO = TV_HITTESTINFO;
7031     PTVHITTESTINFO = ^TV_HITTESTINFO;
7032
7033     TV_INSERTSTRUCT = record
7034          hParent : HTREEITEM;
7035          hInsertAfter : HTREEITEM;
7036          item : TV_ITEM;
7037       end;
7038     LPTV_INSERTSTRUCT = ^TV_INSERTSTRUCT;
7039     _TV_INSERTSTRUCT = TV_INSERTSTRUCT;
7040     TTVINSERTSTRUCT = TV_INSERTSTRUCT;
7041     PTVINSERTSTRUCT = ^TV_INSERTSTRUCT;
7042
7043     TV_KEYDOWN = record
7044          hdr : NMHDR;
7045          wVKey : WORD;
7046          flags : UINT;
7047       end;
7048     _TV_KEYDOWN = TV_KEYDOWN;
7049     TTVKEYDOWN = TV_KEYDOWN;
7050     PTVKEYDOWN = ^TV_KEYDOWN;
7051
7052     TV_SORTCB = record
7053          hParent : HTREEITEM;
7054          lpfnCompare : PFNTVCOMPARE;
7055          lParam : LPARAM;
7056       end;
7057     LPTV_SORTCB = ^TV_SORTCB;
7058     _TV_SORTCB = TV_SORTCB;
7059     TTVSORTCB = TV_SORTCB;
7060     PTVSORTCB = ^TV_SORTCB;
7061
7062     UDACCEL = record
7063          nSec : UINT;
7064          nInc : UINT;
7065       end;
7066     TUDACCEL = UDACCEL;
7067     PUDACCEL = ^UDACCEL;
7068
7069
7070     UNIVERSAL_NAME_INFO = record
7071          lpUniversalName : LPTSTR;
7072       end;
7073     _UNIVERSAL_NAME_INFO = UNIVERSAL_NAME_INFO;
7074     TUNIVERSALNAMEINFO = UNIVERSAL_NAME_INFO;
7075     PUNIVERSALNAMEINFO = ^UNIVERSAL_NAME_INFO;
7076
7077     USEROBJECTFLAGS = record
7078          fInherit : WINBOOL;
7079          fReserved : WINBOOL;
7080          dwFlags : DWORD;
7081       end;
7082     tagUSEROBJECTFLAGS = USEROBJECTFLAGS;
7083     TUSEROBJECTFLAGS = USEROBJECTFLAGS;
7084     PUSEROBJECTFLAGS = ^USEROBJECTFLAGS;
7085
7086     VALENT = record
7087          ve_valuename : LPTSTR;
7088          ve_valuelen : DWORD;
7089          ve_valueptr : DWORD;
7090          ve_type : DWORD;
7091       end;
7092     TVALENT = VALENT;
7093     PVALENT = ^VALENT;
7094
7095     value_ent = VALENT;
7096     Tvalue_ent = VALENT;
7097     Pvalue_ent = ^VALENT;
7098
7099     VERIFY_INFORMATION = record
7100          StartingOffset : LARGE_INTEGER;
7101          Length : DWORD;
7102       end;
7103     _VERIFY_INFORMATION = VERIFY_INFORMATION;
7104     TVERIFYINFORMATION = VERIFY_INFORMATION;
7105     PVERIFYINFORMATION = ^VERIFY_INFORMATION;
7106
7107     VS_FIXEDFILEINFO = record
7108          dwSignature : DWORD;
7109          dwStrucVersion : DWORD;
7110          dwFileVersionMS : DWORD;
7111          dwFileVersionLS : DWORD;
7112          dwProductVersionMS : DWORD;
7113          dwProductVersionLS : DWORD;
7114          dwFileFlagsMask : DWORD;
7115          dwFileFlags : DWORD;
7116          dwFileOS : DWORD;
7117          dwFileType : DWORD;
7118          dwFileSubtype : DWORD;
7119          dwFileDateMS : DWORD;
7120          dwFileDateLS : DWORD;
7121       end;
7122     _VS_FIXEDFILEINFO = VS_FIXEDFILEINFO;
7123     TVSFIXEDFILEINFO = VS_FIXEDFILEINFO;
7124     PVSFIXEDFILEINFO = ^VS_FIXEDFILEINFO;
7125
7126
7127// Windows CE File API definitions copied from NT's winbase.h
7128     _WIN32_FIND_DATAA =record
7129       dwFileAttributes:DWORD;
7130       ftCreationTime:FILETIME;
7131       ftLastAccessTime:FILETIME;
7132       ftLastWriteTime:FILETIME;
7133       nFileSizeHigh:DWORD;
7134       nFileSizeLow:DWORD;
7135       dwReserved0:DWORD;
7136       dwReserved1:DWORD;
7137       cFileName:array[0..MAX_PATH-1] of char;
7138       cAlternateFileName:array[0..13] of char;
7139     end;
7140     WIN32_FIND_DATAA = _WIN32_FIND_DATAA;
7141     PWIN32_FIND_DATAA = ^_WIN32_FIND_DATAA;
7142     LPWIN32_FIND_DATAA = ^_WIN32_FIND_DATAA;
7143
7144
7145     WIN32_FIND_DATAW = record
7146          dwFileAttributes : DWORD;
7147          ftCreationTime : FILETIME;
7148          ftLastAccessTime : FILETIME;
7149          ftLastWriteTime : FILETIME;
7150          nFileSizeHigh : DWORD;
7151          nFileSizeLow : DWORD;
7152          dwOID: DWORD;
7153          cFileName : array[0..MAX_PATH-1] of WCHAR;
7154       end;
7155
7156     LPWIN32_FIND_DATAW = ^WIN32_FIND_DATAW;
7157     PWIN32_FIND_DATAW = ^WIN32_FIND_DATAW;
7158     _WIN32_FIND_DATAW = WIN32_FIND_DATAW;
7159     TWIN32FINDDATAW = WIN32_FIND_DATAW;
7160     PWIN32FINDDATAW = ^WIN32_FIND_DATAW;
7161
7162     WIN32_FIND_DATA = WIN32_FIND_DATAW;
7163     LPWIN32_FIND_DATA = ^WIN32_FIND_DATAW;
7164     PWIN32_FIND_DATA = ^WIN32_FIND_DATAW;
7165     _WIN32_FIND_DATA = WIN32_FIND_DATAW;
7166     TWIN32FINDDATA = WIN32_FIND_DATAW;
7167     PWIN32FINDDATA = ^WIN32_FIND_DATAW;
7168
7169     WIN32_STREAM_ID = record
7170          dwStreamId : DWORD;
7171          dwStreamAttributes : DWORD;
7172          Size : LARGE_INTEGER;
7173          dwStreamNameSize : DWORD;
7174          cStreamName : ^WCHAR;
7175       end;
7176     _WIN32_STREAM_ID = WIN32_STREAM_ID;
7177     TWIN32STREAMID = WIN32_STREAM_ID;
7178     PWIN32STREAMID = ^WIN32_STREAM_ID;
7179
7180     WINDOWPLACEMENT = record
7181          length : UINT;
7182          flags : UINT;
7183          showCmd : UINT;
7184          ptMinPosition : POINT;
7185          ptMaxPosition : POINT;
7186          rcNormalPosition : RECT;
7187       end;
7188     _WINDOWPLACEMENT = WINDOWPLACEMENT;
7189     TWINDOWPLACEMENT = WINDOWPLACEMENT;
7190     PWINDOWPLACEMENT = ^WINDOWPLACEMENT;
7191
7192     WNDCLASS = record
7193          style : UINT;
7194          lpfnWndProc : WNDPROC;
7195          cbClsExtra : longint;
7196          cbWndExtra : longint;
7197          hInstance : HANDLE;
7198          hIcon : HICON;
7199          hCursor : HCURSOR;
7200          hbrBackground : HBRUSH;
7201          lpszMenuName : LPCTSTR;
7202          lpszClassName : LPCTSTR;
7203       end;
7204     LPWNDCLASS = ^WNDCLASS;
7205     _WNDCLASS = WNDCLASS;
7206     TWNDCLASSA = WNDCLASS;
7207
7208
7209     WNDCLASSW = record
7210          style : UINT;
7211          lpfnWndProc : WNDPROC;
7212          cbClsExtra : longint;
7213          cbWndExtra : longint;
7214          hInstance : HANDLE;
7215          hIcon : HICON;
7216          hCursor : HCURSOR;
7217          hbrBackground : HBRUSH;
7218          lpszMenuName : LPCWSTR;
7219          lpszClassName : LPCWSTR;
7220       end;
7221     LPWNDCLASSW = ^WNDCLASSW;
7222     _WNDCLASSW  = WNDCLASSW;
7223     TWNDCLASSW  = WNDCLASSW;
7224     PWNDCLASSW  = ^WNDCLASSW;
7225     TWNDCLASS = WNDCLASSW;
7226     PWNDCLASS = ^WNDCLASSW;
7227
7228     WNDCLASSEX = record
7229          cbSize : UINT;
7230          style : UINT;
7231          lpfnWndProc : WNDPROC;
7232          cbClsExtra : longint;
7233          cbWndExtra : longint;
7234          hInstance : HANDLE;
7235          hIcon : HICON;
7236          hCursor : HCURSOR;
7237          hbrBackground : HBRUSH;
7238          lpszMenuName : LPCTSTR;
7239          lpszClassName : LPCTSTR;
7240          hIconSm : HANDLE;
7241       end;
7242     LPWNDCLASSEX = ^WNDCLASSEX;
7243     _WNDCLASSEX = WNDCLASSEX;
7244     TWNDCLASSEX = WNDCLASSEX;
7245     TWNDCLASSEXA = WNDCLASSEX;
7246     PWNDCLASSEX = ^WNDCLASSEX;
7247
7248     WNDCLASSEXW = record
7249          cbSize : UINT;
7250          style : UINT;
7251          lpfnWndProc : WNDPROC;
7252          cbClsExtra : longint;
7253          cbWndExtra : longint;
7254          hInstance : HANDLE;
7255          hIcon : HICON;
7256          hCursor : HCURSOR;
7257          hbrBackground : HBRUSH;
7258          lpszMenuName : LPCWSTR;
7259          lpszClassName : LPCWSTR;
7260          hIconSm : HANDLE;
7261       end;
7262     LPWNDCLASSEXW = ^WNDCLASSEXW;
7263     _WNDCLASSEXW  = WNDCLASSEXW;
7264     TWNDCLASSEXW  = WNDCLASSEXW;
7265     PWNDCLASSEXW  = ^WNDCLASSEXW;
7266
7267     CONNECTDLGSTRUCT = record
7268          cbStructure : DWORD;
7269          hwndOwner : HWND;
7270          lpConnRes : LPNETRESOURCE;
7271          dwFlags : DWORD;
7272          dwDevNum : DWORD;
7273       end;
7274     LPCONNECTDLGSTRUCT = ^CONNECTDLGSTRUCT;
7275     _CONNECTDLGSTRUCT = CONNECTDLGSTRUCT;
7276     TCONNECTDLGSTRUCT = CONNECTDLGSTRUCT;
7277     PCONNECTDLGSTRUCT = ^CONNECTDLGSTRUCT;
7278
7279     CONNECTDLGSTRUCTW = record //+winnetwk
7280          cbStructure : DWORD;
7281          hwndOwner : HWND;
7282          lpConnRes : LPNETRESOURCEW;
7283          dwFlags : DWORD;
7284          dwDevNum : DWORD;
7285       end;
7286     LPCONNECTDLGSTRUCTW = ^CONNECTDLGSTRUCTW; //+winnetwk
7287     _CONNECTDLGSTRUCTW = CONNECTDLGSTRUCTW;  //+winnetwk
7288
7289     DISCDLGSTRUCT = record
7290          cbStructure : DWORD;
7291          hwndOwner : HWND;
7292          lpLocalName : LPTSTR;
7293          lpRemoteName : LPTSTR;
7294          dwFlags : DWORD;
7295       end;
7296     LPDISCDLGSTRUCT = ^DISCDLGSTRUCT;
7297     _DISCDLGSTRUCT = DISCDLGSTRUCT;
7298     TDISCDLGSTRUCT = DISCDLGSTRUCT;
7299     TDISCDLGSTRUCTA = DISCDLGSTRUCT;
7300     PDISCDLGSTRUCT = ^DISCDLGSTRUCT;
7301
7302     DISCDLGSTRUCTW = record  //+winnetwk
7303          cbStructure : DWORD;
7304          hwndOwner : HWND;
7305          lpLocalName : LPWSTR;
7306          lpRemoteName : LPWSTR;
7307          dwFlags : DWORD;
7308       end;
7309     LPDISCDLGSTRUCTW = ^DISCDLGSTRUCTW; //+winnetwk
7310     _DISCDLGSTRUCTW = DISCDLGSTRUCTW;   //+winnetwk
7311
7312     NETINFOSTRUCT = record
7313          cbStructure : DWORD;
7314          dwProviderVersion : DWORD;
7315          dwStatus : DWORD;
7316          dwCharacteristics : DWORD;
7317          dwHandle : DWORD;
7318          wNetType : WORD;
7319          dwPrinters : DWORD;
7320          dwDrives : DWORD;
7321       end;
7322     LPNETINFOSTRUCT = ^NETINFOSTRUCT;
7323     _NETINFOSTRUCT = NETINFOSTRUCT;
7324     TNETINFOSTRUCT = NETINFOSTRUCT;
7325     PNETINFOSTRUCT = ^NETINFOSTRUCT;
7326
7327     NETCONNECTINFOSTRUCT = record
7328          cbStructure : DWORD;
7329          dwFlags : DWORD;
7330          dwSpeed : DWORD;
7331          dwDelay : DWORD;
7332          dwOptDataSize : DWORD;
7333       end;
7334     LPNETCONNECTINFOSTRUCT = ^NETCONNECTINFOSTRUCT;
7335     _NETCONNECTINFOSTRUCT = NETCONNECTINFOSTRUCT;
7336     TNETCONNECTINFOSTRUCT = NETCONNECTINFOSTRUCT;
7337     PNETCONNECTINFOSTRUCT = ^NETCONNECTINFOSTRUCT;
7338
7339     ENUMMETAFILEPROC = function (_para1:HDC; _para2:HANDLETABLE; _para3:METARECORD; _para4:longint; _para5:LPARAM):longint;
7340
7341     ENHMETAFILEPROC = function (_para1:HDC; _para2:HANDLETABLE; _para3:ENHMETARECORD; _para4:longint; _para5:LPARAM):longint;
7342
7343     ENUMFONTSPROC = function (_para1:LPLOGFONT; _para2:LPTEXTMETRIC; _para3:DWORD; _para4:LPARAM):longint;
7344
7345     FONTENUMPROC = function (var _para1:ENUMLOGFONT; var _para2:NEWTEXTMETRIC; _para3:longint; _para4:LPARAM):longint;
7346
7347     FONTENUMEXPROC = function (var _para1:ENUMLOGFONTEX;var _para2:NEWTEXTMETRICEX; _para3:longint; _para4:LPARAM):longint;
7348
7349     LPOVERLAPPED_COMPLETION_ROUTINE = procedure (_para1:DWORD; _para2:DWORD; _para3:LPOVERLAPPED);
7350
7351     { Structures for the extensions to OpenGL }
7352
7353     POINTFLOAT = record
7354          x : Single;
7355          y : Single;
7356       end;
7357     _POINTFLOAT = POINTFLOAT;
7358     TPOINTFLOAT = POINTFLOAT;
7359     PPOINTFLOAT = ^POINTFLOAT;
7360
7361     GLYPHMETRICSFLOAT = record
7362          gmfBlackBoxX : Single;
7363          gmfBlackBoxY : Single;
7364          gmfptGlyphOrigin : POINTFLOAT;
7365          gmfCellIncX : Single;
7366          gmfCellIncY : Single;
7367       end;
7368     LPGLYPHMETRICSFLOAT = ^GLYPHMETRICSFLOAT;
7369     _GLYPHMETRICSFLOAT = GLYPHMETRICSFLOAT;
7370     TGLYPHMETRICSFLOAT = GLYPHMETRICSFLOAT;
7371     PGLYPHMETRICSFLOAT = ^GLYPHMETRICSFLOAT;
7372
7373     LAYERPLANEDESCRIPTOR = record
7374          nSize : WORD;
7375          nVersion : WORD;
7376          dwFlags : DWORD;
7377          iPixelType : BYTE;
7378          cColorBits : BYTE;
7379          cRedBits : BYTE;
7380          cRedShift : BYTE;
7381          cGreenBits : BYTE;
7382          cGreenShift : BYTE;
7383          cBlueBits : BYTE;
7384          cBlueShift : BYTE;
7385          cAlphaBits : BYTE;
7386          cAlphaShift : BYTE;
7387          cAccumBits : BYTE;
7388          cAccumRedBits : BYTE;
7389          cAccumGreenBits : BYTE;
7390          cAccumBlueBits : BYTE;
7391          cAccumAlphaBits : BYTE;
7392          cDepthBits : BYTE;
7393          cStencilBits : BYTE;
7394          cAuxBuffers : BYTE;
7395          iLayerPlane : BYTE;
7396          bReserved : BYTE;
7397          crTransparent : COLORREF;
7398       end;
7399     LPLAYERPLANEDESCRIPTOR = ^LAYERPLANEDESCRIPTOR;
7400     tagLAYERPLANEDESCRIPTOR = LAYERPLANEDESCRIPTOR;
7401     TLAYERPLANEDESCRIPTOR = LAYERPLANEDESCRIPTOR;
7402     PLAYERPLANEDESCRIPTOR = ^LAYERPLANEDESCRIPTOR;
7403
7404     PIXELFORMATDESCRIPTOR = record
7405          nSize : WORD;
7406          nVersion : WORD;
7407          dwFlags : DWORD;
7408          iPixelType : BYTE;
7409          cColorBits : BYTE;
7410          cRedBits : BYTE;
7411          cRedShift : BYTE;
7412          cGreenBits : BYTE;
7413          cGreenShift : BYTE;
7414          cBlueBits : BYTE;
7415          cBlueShift : BYTE;
7416          cAlphaBits : BYTE;
7417          cAlphaShift : BYTE;
7418          cAccumBits : BYTE;
7419          cAccumRedBits : BYTE;
7420          cAccumGreenBits : BYTE;
7421          cAccumBlueBits : BYTE;
7422          cAccumAlphaBits : BYTE;
7423          cDepthBits : BYTE;
7424          cStencilBits : BYTE;
7425          cAuxBuffers : BYTE;
7426          iLayerType : BYTE;
7427          bReserved : BYTE;
7428          dwLayerMask : DWORD;
7429          dwVisibleMask : DWORD;
7430          dwDamageMask : DWORD;
7431       end;
7432     LPPIXELFORMATDESCRIPTOR = ^PIXELFORMATDESCRIPTOR;
7433     tagPIXELFORMATDESCRIPTOR = PIXELFORMATDESCRIPTOR;
7434     TPIXELFORMATDESCRIPTOR = PIXELFORMATDESCRIPTOR;
7435     PPIXELFORMATDESCRIPTOR = ^PIXELFORMATDESCRIPTOR;
7436
7437     USER_INFO_2 = record
7438          usri2_name : LPWSTR;
7439          usri2_password : LPWSTR;
7440          usri2_password_age : DWORD;
7441          usri2_priv : DWORD;
7442          usri2_home_dir : LPWSTR;
7443          usri2_comment : LPWSTR;
7444          usri2_flags : DWORD;
7445          usri2_script_path : LPWSTR;
7446          usri2_auth_flags : DWORD;
7447          usri2_full_name : LPWSTR;
7448          usri2_usr_comment : LPWSTR;
7449          usri2_parms : LPWSTR;
7450          usri2_workstations : LPWSTR;
7451          usri2_last_logon : DWORD;
7452          usri2_last_logoff : DWORD;
7453          usri2_acct_expires : DWORD;
7454          usri2_max_storage : DWORD;
7455          usri2_units_per_week : DWORD;
7456          usri2_logon_hours : PBYTE;
7457          usri2_bad_pw_count : DWORD;
7458          usri2_num_logons : DWORD;
7459          usri2_logon_server : LPWSTR;
7460          usri2_country_code : DWORD;
7461          usri2_code_page : DWORD;
7462       end;
7463     PUSER_INFO_2 = ^USER_INFO_2;
7464     LPUSER_INFO_2 = ^USER_INFO_2;
7465     TUSERINFO2 = USER_INFO_2;
7466     PUSERINFO2 = ^USER_INFO_2;
7467
7468     USER_INFO_0 = record
7469          usri0_name : LPWSTR;
7470       end;
7471     PUSER_INFO_0 = ^USER_INFO_0;
7472     LPUSER_INFO_0 = ^USER_INFO_0;
7473     TUSERINFO0 = USER_INFO_0;
7474     PUSERINFO0 = ^USER_INFO_0;
7475
7476     USER_INFO_3 = record
7477          usri3_name : LPWSTR;
7478          usri3_password : LPWSTR;
7479          usri3_password_age : DWORD;
7480          usri3_priv : DWORD;
7481          usri3_home_dir : LPWSTR;
7482          usri3_comment : LPWSTR;
7483          usri3_flags : DWORD;
7484          usri3_script_path : LPWSTR;
7485          usri3_auth_flags : DWORD;
7486          usri3_full_name : LPWSTR;
7487          usri3_usr_comment : LPWSTR;
7488          usri3_parms : LPWSTR;
7489          usri3_workstations : LPWSTR;
7490          usri3_last_logon : DWORD;
7491          usri3_last_logoff : DWORD;
7492          usri3_acct_expires : DWORD;
7493          usri3_max_storage : DWORD;
7494          usri3_units_per_week : DWORD;
7495          usri3_logon_hours : PBYTE;
7496          usri3_bad_pw_count : DWORD;
7497          usri3_num_logons : DWORD;
7498          usri3_logon_server : LPWSTR;
7499          usri3_country_code : DWORD;
7500          usri3_code_page : DWORD;
7501          usri3_user_id : DWORD;
7502          usri3_primary_group_id : DWORD;
7503          usri3_profile : LPWSTR;
7504          usri3_home_dir_drive : LPWSTR;
7505          usri3_password_expired : DWORD;
7506       end;
7507     PUSER_INFO_3 = ^USER_INFO_3;
7508     LPUSER_INFO_3 = ^USER_INFO_3;
7509     TUSERINFO3 = USER_INFO_3;
7510     PUSERINFO3 = ^USER_INFO_3;
7511
7512     GROUP_INFO_2 = record
7513          grpi2_name : LPWSTR;
7514          grpi2_comment : LPWSTR;
7515          grpi2_group_id : DWORD;
7516          grpi2_attributes : DWORD;
7517       end;
7518     PGROUP_INFO_2 = ^GROUP_INFO_2;
7519     TGROUPINFO2 = GROUP_INFO_2;
7520     PGROUPINFO2 = ^GROUP_INFO_2;
7521
7522     LOCALGROUP_INFO_0 = record
7523          lgrpi0_name : LPWSTR;
7524       end;
7525     PLOCALGROUP_INFO_0 = ^LOCALGROUP_INFO_0;
7526     LPLOCALGROUP_INFO_0 = ^LOCALGROUP_INFO_0;
7527     TLOCALGROUPINFO0 = LOCALGROUP_INFO_0;
7528     PLOCALGROUPINFO0 = ^LOCALGROUP_INFO_0;
7529
7530  { PE executable header.   }
7531  { Magic number, 0x5a4d  }
7532  { Bytes on last page of file, 0x90  }
7533  { Pages in file, 0x3  }
7534  { Relocations, 0x0  }
7535  { Size of header in paragraphs, 0x4  }
7536  { Minimum extra paragraphs needed, 0x0  }
7537  { Maximum extra paragraphs needed, 0xFFFF  }
7538  { Initial (relative) SS value, 0x0  }
7539  { Initial SP value, 0xb8  }
7540  { Checksum, 0x0  }
7541  { Initial IP value, 0x0  }
7542  { Initial (relative) CS value, 0x0  }
7543  { File address of relocation table, 0x40  }
7544  { Overlay number, 0x0  }
7545  { Reserved words, all 0x0  }
7546  { OEM identifier (for e_oeminfo), 0x0  }
7547  { OEM information; e_oemid specific, 0x0  }
7548  { Reserved words, all 0x0  }
7549  { File address of new exe header, 0x80  }
7550  { We leave out the next two fields, since they aren't in the header file }
7551  { DWORD dos_message[16];   text which always follows dos header  }
7552  { DWORD nt_signature;      required NT signature, 0x4550  }
7553
7554     IMAGE_DOS_HEADER = record
7555          e_magic : WORD;
7556          e_cblp : WORD;
7557          e_cp : WORD;
7558          e_crlc : WORD;
7559          e_cparhdr : WORD;
7560          e_minalloc : WORD;
7561          e_maxalloc : WORD;
7562          e_ss : WORD;
7563          e_sp : WORD;
7564          e_csum : WORD;
7565          e_ip : WORD;
7566          e_cs : WORD;
7567          e_lfarlc : WORD;
7568          e_ovno : WORD;
7569          e_res : array[0..3] of WORD;
7570          e_oemid : WORD;
7571          e_oeminfo : WORD;
7572          e_res2 : array[0..9] of WORD;
7573          e_lfanew : LONG;
7574       end;
7575     PIMAGE_DOS_HEADER = ^IMAGE_DOS_HEADER;
7576     TIMAGEDOSHEADER = IMAGE_DOS_HEADER;
7577     PIMAGEDOSHEADER = ^IMAGE_DOS_HEADER;
7578
7579      _NOTIFYICONDATAA = record
7580          cbSize: DWORD;
7581          Wnd: HWND;
7582          uID: UINT;
7583          uFlags: UINT;
7584          uCallbackMessage: UINT;
7585          hIcon: HICON;
7586          szTip: array [0..63] of Char;
7587     end;
7588     _NOTIFYICONDATA = _NOTIFYICONDATAA;
7589
7590     _NOTIFYICONDATAW = record
7591         cbSize: DWORD;
7592         Wnd: HWND;
7593         uID: UINT;
7594         uFlags: UINT;
7595         uCallbackMessage: UINT;
7596         hIcon: HICON;
7597         szTip: array [0..63] of Word;
7598     end;
7599     TNotifyIconDataA = _NOTIFYICONDATAA;
7600     TNotifyIconDataW = _NOTIFYICONDATAW;
7601     TNotifyIconData = TNotifyIconDataA;
7602     NOTIFYICONDATAA = _NOTIFYICONDATAA;
7603     NOTIFYICONDATAW = _NOTIFYICONDATAW;
7604     NOTIFYICONDATA = NOTIFYICONDATAA;
7605     PNotifyIconDataA = ^TNotifyIconDataA;
7606     PNotifyIconDataW = ^TNotifyIconDataW;
7607     PNotifyIconData = PNotifyIconDataA;
7608
7609     TWOHandleArray = array[0..MAXIMUM_WAIT_OBJECTS-1] of HANDLE;
7610     PWOHandleArray = ^TWOHandleArray;
7611
7612 MMRESULT = Longint;
7613
7614type
7615  PWaveFormatEx = ^TWaveFormatEx;
7616  TWaveFormatEx = packed record
7617    wFormatTag: Word;       { format type }
7618    nChannels: Word;        { number of channels (i.e. mono, stereo, etc.) }
7619    nSamplesPerSec: DWORD;  { sample rate }
7620    nAvgBytesPerSec: DWORD; { for buffer estimation }
7621    nBlockAlign: Word;      { block size of data }
7622    wBitsPerSample: Word;   { number of bits per sample of mono data }
7623    cbSize: Word;           { the count in bytes of the size of }
7624  end;
7625
7626  _WIN32_FILE_ATTRIBUTE_DATA = packed record
7627    dwFileAttributes:     DWORD;
7628    ftCreationTime:       FILETIME;
7629    ftLastAccessTime:     FILETIME;
7630    ftLastWriteTime:      FILETIME;
7631    nFileSizeHigh:        DWORD;
7632    nFileSizeLow:         DWORD;
7633    end;
7634  WIN32_FILE_ATTRIBUTE_DATA   = _WIN32_FILE_ATTRIBUTE_DATA ;
7635  LPWIN32_FILE_ATTRIBUTE_DATA = ^_WIN32_FILE_ATTRIBUTE_DATA;
7636  TWIN32FILEATTRIBUTEDATA     = _WIN32_FILE_ATTRIBUTE_DATA ;
7637  PWIN32FILEATTRIBUTEDATA     = ^_WIN32_FILE_ATTRIBUTE_DATA;
7638
7639  // TrackMouseEvent. NT or higher only.
7640  TTrackMouseEvent = Record
7641    cbSize : DWORD;
7642    dwFlags : DWORD;
7643    hwndTrack : HWND;
7644    dwHoverTime : DWORD;
7645  end;
7646  PTrackMouseEvent = ^TTrackMouseEvent;
7647
7648  tagBSTRBLOB = record
7649    cbsize : ULONG;
7650    pdata  : pbyte;
7651  end;
7652  BSTRBLOB=TagBSTRBlob;
7653  TBSTRBLOB=BSTRBLOB;
7654  PBSTRBLOB=^BSTRBLOB;
7655
7656  tagCLIPDATA = record
7657    cbsize : ULONG;
7658    ulClipFmt : long;
7659    pclipdata : pbyte;
7660  end;
7661  CLIPDATA=TagCLIPDATA;
7662  TCLIPDATA=CLIPDATA;
7663  PCLIPDATA=^CLIPDATA;
7664
7665
7666type
7667     tagMOUSEINPUT = record
7668       dx:LONG;
7669       dy:LONG;
7670       mouseData:DWORD;
7671       dwFlags:DWORD;
7672       time:DWORD;
7673       dwExtraInfo:DWORD;
7674     end;
7675     MOUSEINPUT = tagMOUSEINPUT;
7676     PMOUSEINPUT = ^tagMOUSEINPUT;
7677     LPMOUSEINPUT = ^tagMOUSEINPUT;
7678
7679     tagKEYBDINPUT = record
7680       wVk:word;
7681       wScan:word;
7682       dwFlags:DWORD;
7683       time:DWORD;
7684       dwExtraInfo:DWORD;
7685     end;
7686     KEYBDINPUT = tagKEYBDINPUT;
7687     PKEYBDINPUT = ^tagKEYBDINPUT;
7688     LPKEYBDINPUT = ^tagKEYBDINPUT;
7689
7690     tagHARDWAREINPUT = record
7691       uMsg:DWORD;
7692       wParamL:word;
7693       wParamH:word;
7694       dwExtraInfo:DWORD;
7695     end;
7696     HARDWAREINPUT = tagHARDWAREINPUT;
7697     PHARDWAREINPUT = ^tagHARDWAREINPUT;
7698     LPHARDWAREINPUT = ^tagHARDWAREINPUT;
7699
7700     tagINPUT = record
7701       _type:DWORD;
7702       case longint of
7703         0: (mi:MOUSEINPUT);
7704         1: (ki:KEYBDINPUT);
7705         2: (hi:HARDWAREINPUT);
7706     end;
7707    INPUT = tagINPUT;
7708    PINPUT = ^tagINPUT;
7709    LPINPUT = ^tagINPUT;
7710
7711
7712// For EnumDisplayMonitors
7713type
7714     MONITORENUMPROC = function(_hMonitor:HMONITOR; hdcMonitor:HDC; lprcMonitor:LPRECT; dwData:LPARAM):BOOL;
7715
7716// For GetMonitorInfo
7717type
7718     tagMONITORINFO = record
7719       cbSize:DWORD;
7720       rcMonitor:RECT;
7721       rcWork:RECT;
7722       dwFlags:DWORD;
7723     end;
7724     MONITORINFO = tagMONITORINFO;
7725     LPMONITORINFO = ^tagMONITORINFO;
7726
7727     tagMONITORINFOEX = record
7728       cbSize:DWORD;
7729       rcMonitor:RECT;
7730       rcWork:RECT;
7731       dwFlags:DWORD;
7732        szDevice:array[0..CCHDEVICENAME-1] of TCHAR;
7733     end;
7734     MONITORINFOEX = tagMONITORINFOEX;
7735     LPMONITORINFOEX = ^tagMONITORINFOEX;
7736
7737// For EnumDisplayDevices
7738type
7739     _DISPLAY_DEVICE = record
7740       cb:DWORD;
7741       DeviceName:array[0..31] of TCHAR;
7742       DeviceString:array[0..127] of TCHAR;
7743       StateFlags:DWORD;
7744       DeviceID:array[0..127] of TCHAR;
7745       DeviceKey:array[0..127] of TCHAR;
7746     end;
7747     DISPLAY_DEVICE = _DISPLAY_DEVICE;
7748     PDISPLAY_DEVICE = ^_DISPLAY_DEVICE;
7749     LPDISPLAY_DEVICE = ^_DISPLAY_DEVICE;
7750
7751{$endif read_interface}
7752
7753
7754{$ifdef read_implementation}
7755
7756  function fBinary(var a : DCB) : DWORD;
7757    begin
7758       fBinary:=(a.flags and bm_DCB_fBinary) shr bp_DCB_fBinary;
7759    end;
7760
7761  procedure set_fBinary(var a : DCB; __fBinary : DWORD);
7762    begin
7763       a.flags:=a.flags or ((__fBinary shl bp_DCB_fBinary) and bm_DCB_fBinary);
7764    end;
7765
7766  function fParity(var a : DCB) : DWORD;
7767    begin
7768       fParity:=(a.flags and bm_DCB_fParity) shr bp_DCB_fParity;
7769    end;
7770
7771  procedure set_fParity(var a : DCB; __fParity : DWORD);
7772    begin
7773       a.flags:=a.flags or ((__fParity shl bp_DCB_fParity) and bm_DCB_fParity);
7774    end;
7775
7776  function fOutxCtsFlow(var a : DCB) : DWORD;
7777    begin
7778       fOutxCtsFlow:=(a.flags and bm_DCB_fOutxCtsFlow) shr bp_DCB_fOutxCtsFlow;
7779    end;
7780
7781  procedure set_fOutxCtsFlow(var a : DCB; __fOutxCtsFlow : DWORD);
7782    begin
7783       a.flags:=a.flags or ((__fOutxCtsFlow shl bp_DCB_fOutxCtsFlow) and bm_DCB_fOutxCtsFlow);
7784    end;
7785
7786  function fOutxDsrFlow(var a : DCB) : DWORD;
7787    begin
7788       fOutxDsrFlow:=(a.flags and bm_DCB_fOutxDsrFlow) shr bp_DCB_fOutxDsrFlow;
7789    end;
7790
7791  procedure set_fOutxDsrFlow(var a : DCB; __fOutxDsrFlow : DWORD);
7792    begin
7793       a.flags:=a.flags or ((__fOutxDsrFlow shl bp_DCB_fOutxDsrFlow) and bm_DCB_fOutxDsrFlow);
7794    end;
7795
7796  function fDtrControl(var a : DCB) : DWORD;
7797    begin
7798       fDtrControl:=(a.flags and bm_DCB_fDtrControl) shr bp_DCB_fDtrControl;
7799    end;
7800
7801  procedure set_fDtrControl(var a : DCB; __fDtrControl : DWORD);
7802    begin
7803       a.flags:=a.flags or ((__fDtrControl shl bp_DCB_fDtrControl) and bm_DCB_fDtrControl);
7804    end;
7805
7806  function fDsrSensitivity(var a : DCB) : DWORD;
7807    begin
7808       fDsrSensitivity:=(a.flags and bm_DCB_fDsrSensitivity) shr bp_DCB_fDsrSensitivity;
7809    end;
7810
7811  procedure set_fDsrSensitivity(var a : DCB; __fDsrSensitivity : DWORD);
7812    begin
7813       a.flags:=a.flags or ((__fDsrSensitivity shl bp_DCB_fDsrSensitivity) and bm_DCB_fDsrSensitivity);
7814    end;
7815
7816  function fTXContinueOnXoff(var a : DCB) : DWORD;
7817    begin
7818       fTXContinueOnXoff:=(a.flags and bm_DCB_fTXContinueOnXoff) shr bp_DCB_fTXContinueOnXoff;
7819    end;
7820
7821  procedure set_fTXContinueOnXoff(var a : DCB; __fTXContinueOnXoff : DWORD);
7822    begin
7823       a.flags:=a.flags or ((__fTXContinueOnXoff shl bp_DCB_fTXContinueOnXoff) and bm_DCB_fTXContinueOnXoff);
7824    end;
7825
7826  function fOutX(var a : DCB) : DWORD;
7827    begin
7828       fOutX:=(a.flags and bm_DCB_fOutX) shr bp_DCB_fOutX;
7829    end;
7830
7831  procedure set_fOutX(var a : DCB; __fOutX : DWORD);
7832    begin
7833       a.flags:=a.flags or ((__fOutX shl bp_DCB_fOutX) and bm_DCB_fOutX);
7834    end;
7835
7836  function fInX(var a : DCB) : DWORD;
7837    begin
7838       fInX:=(a.flags and bm_DCB_fInX) shr bp_DCB_fInX;
7839    end;
7840
7841  procedure set_fInX(var a : DCB; __fInX : DWORD);
7842    begin
7843       a.flags:=a.flags or ((__fInX shl bp_DCB_fInX) and bm_DCB_fInX);
7844    end;
7845
7846  function fErrorChar(var a : DCB) : DWORD;
7847    begin
7848       fErrorChar:=(a.flags and bm_DCB_fErrorChar) shr bp_DCB_fErrorChar;
7849    end;
7850
7851  procedure set_fErrorChar(var a : DCB; __fErrorChar : DWORD);
7852    begin
7853       a.flags:=a.flags or ((__fErrorChar shl bp_DCB_fErrorChar) and bm_DCB_fErrorChar);
7854    end;
7855
7856  function fNull(var a : DCB) : DWORD;
7857    begin
7858       fNull:=(a.flags and bm_DCB_fNull) shr bp_DCB_fNull;
7859    end;
7860
7861  procedure set_fNull(var a : DCB; __fNull : DWORD);
7862    begin
7863       a.flags:=a.flags or ((__fNull shl bp_DCB_fNull) and bm_DCB_fNull);
7864    end;
7865
7866  function fRtsControl(var a : DCB) : DWORD;
7867    begin
7868       fRtsControl:=(a.flags and bm_DCB_fRtsControl) shr bp_DCB_fRtsControl;
7869    end;
7870
7871  procedure set_fRtsControl(var a : DCB; __fRtsControl : DWORD);
7872    begin
7873       a.flags:=a.flags or ((__fRtsControl shl bp_DCB_fRtsControl) and bm_DCB_fRtsControl);
7874    end;
7875
7876  function fAbortOnError(var a : DCB) : DWORD;
7877    begin
7878       fAbortOnError:=(a.flags and bm_DCB_fAbortOnError) shr bp_DCB_fAbortOnError;
7879    end;
7880
7881  procedure set_fAbortOnError(var a : DCB; __fAbortOnError : DWORD);
7882    begin
7883       a.flags:=a.flags or ((__fAbortOnError shl bp_DCB_fAbortOnError) and bm_DCB_fAbortOnError);
7884    end;
7885
7886  function fDummy2(var a : DCB) : DWORD;
7887    begin
7888       fDummy2:=(a.flags and bm_DCB_fDummy2) shr bp_DCB_fDummy2;
7889    end;
7890
7891  procedure set_fDummy2(var a : DCB; __fDummy2 : DWORD);
7892    begin
7893       a.flags:=a.flags or ((__fDummy2 shl bp_DCB_fDummy2) and bm_DCB_fDummy2);
7894    end;
7895
7896  function fCtsHold(var a : COMSTAT) : DWORD;
7897    begin
7898       fCtsHold:=(a.flag0 and bm_COMSTAT_fCtsHold) shr bp_COMSTAT_fCtsHold;
7899    end;
7900
7901  procedure set_fCtsHold(var a : COMSTAT; __fCtsHold : DWORD);
7902    begin
7903       a.flag0:=a.flag0 or ((__fCtsHold shl bp_COMSTAT_fCtsHold) and bm_COMSTAT_fCtsHold);
7904    end;
7905
7906  function fDsrHold(var a : COMSTAT) : DWORD;
7907    begin
7908       fDsrHold:=(a.flag0 and bm_COMSTAT_fDsrHold) shr bp_COMSTAT_fDsrHold;
7909    end;
7910
7911  procedure set_fDsrHold(var a : COMSTAT; __fDsrHold : DWORD);
7912    begin
7913       a.flag0:=a.flag0 or ((__fDsrHold shl bp_COMSTAT_fDsrHold) and bm_COMSTAT_fDsrHold);
7914    end;
7915
7916  function fRlsdHold(var a : COMSTAT) : DWORD;
7917    begin
7918       fRlsdHold:=(a.flag0 and bm_COMSTAT_fRlsdHold) shr bp_COMSTAT_fRlsdHold;
7919    end;
7920
7921  procedure set_fRlsdHold(var a : COMSTAT; __fRlsdHold : DWORD);
7922    begin
7923       a.flag0:=a.flag0 or ((__fRlsdHold shl bp_COMSTAT_fRlsdHold) and bm_COMSTAT_fRlsdHold);
7924    end;
7925
7926  function fXoffHold(var a : COMSTAT) : DWORD;
7927    begin
7928       fXoffHold:=(a.flag0 and bm_COMSTAT_fXoffHold) shr bp_COMSTAT_fXoffHold;
7929    end;
7930
7931  procedure set_fXoffHold(var a : COMSTAT; __fXoffHold : DWORD);
7932    begin
7933       a.flag0:=a.flag0 or ((__fXoffHold shl bp_COMSTAT_fXoffHold) and bm_COMSTAT_fXoffHold);
7934    end;
7935
7936  function fXoffSent(var a : COMSTAT) : DWORD;
7937    begin
7938       fXoffSent:=(a.flag0 and bm_COMSTAT_fXoffSent) shr bp_COMSTAT_fXoffSent;
7939    end;
7940
7941  procedure set_fXoffSent(var a : COMSTAT; __fXoffSent : DWORD);
7942    begin
7943       a.flag0:=a.flag0 or ((__fXoffSent shl bp_COMSTAT_fXoffSent) and bm_COMSTAT_fXoffSent);
7944    end;
7945
7946  function fEof(var a : COMSTAT) : DWORD;
7947    begin
7948       fEof:=(a.flag0 and bm_COMSTAT_fEof) shr bp_COMSTAT_fEof;
7949    end;
7950
7951  procedure set_fEof(var a : COMSTAT; __fEof : DWORD);
7952    begin
7953       a.flag0:=a.flag0 or ((__fEof shl bp_COMSTAT_fEof) and bm_COMSTAT_fEof);
7954    end;
7955
7956  function fTxim(var a : COMSTAT) : DWORD;
7957    begin
7958       fTxim:=(a.flag0 and bm_COMSTAT_fTxim) shr bp_COMSTAT_fTxim;
7959    end;
7960
7961  procedure set_fTxim(var a : COMSTAT; __fTxim : DWORD);
7962    begin
7963       a.flag0:=a.flag0 or ((__fTxim shl bp_COMSTAT_fTxim) and bm_COMSTAT_fTxim);
7964    end;
7965
7966  function fReserved(var a : COMSTAT) : DWORD;
7967    begin
7968       fReserved:=(a.flag0 and bm_COMSTAT_fReserved) shr bp_COMSTAT_fReserved;
7969    end;
7970
7971  procedure set_fReserved(var a : COMSTAT; __fReserved : DWORD);
7972    begin
7973       a.flag0:=a.flag0 or ((__fReserved shl bp_COMSTAT_fReserved) and bm_COMSTAT_fReserved);
7974    end;
7975
7976  function bAppReturnCode(var a : DDEACK) : word;
7977    begin
7978       bAppReturnCode:=(a.flag0 and bm_DDEACK_bAppReturnCode) shr bp_DDEACK_bAppReturnCode;
7979    end;
7980
7981  procedure set_bAppReturnCode(var a : DDEACK; __bAppReturnCode : word);
7982    begin
7983       a.flag0:=a.flag0 or ((__bAppReturnCode shl bp_DDEACK_bAppReturnCode) and bm_DDEACK_bAppReturnCode);
7984    end;
7985
7986  function reserved(var a : DDEACK) : word;
7987    begin
7988       reserved:=(a.flag0 and bm_DDEACK_reserved) shr bp_DDEACK_reserved;
7989    end;
7990
7991  procedure set_reserved(var a : DDEACK; __reserved : word);
7992    begin
7993       a.flag0:=a.flag0 or ((__reserved shl bp_DDEACK_reserved) and bm_DDEACK_reserved);
7994    end;
7995
7996  function fBusy(var a : DDEACK) : word;
7997    begin
7998       fBusy:=(a.flag0 and bm_DDEACK_fBusy) shr bp_DDEACK_fBusy;
7999    end;
8000
8001  procedure set_fBusy(var a : DDEACK; __fBusy : word);
8002    begin
8003       a.flag0:=a.flag0 or ((__fBusy shl bp_DDEACK_fBusy) and bm_DDEACK_fBusy);
8004    end;
8005
8006  function fAck(var a : DDEACK) : word;
8007    begin
8008       fAck:=(a.flag0 and bm_DDEACK_fAck) shr bp_DDEACK_fAck;
8009    end;
8010
8011  procedure set_fAck(var a : DDEACK; __fAck : word);
8012    begin
8013       a.flag0:=a.flag0 or ((__fAck shl bp_DDEACK_fAck) and bm_DDEACK_fAck);
8014    end;
8015
8016  function reserved(var a : DDEADVISE) : word;
8017    begin
8018       reserved:=(a.flag0 and bm_DDEADVISE_reserved) shr bp_DDEADVISE_reserved;
8019    end;
8020
8021  procedure set_reserved(var a : DDEADVISE; __reserved : word);
8022    begin
8023       a.flag0:=a.flag0 or ((__reserved shl bp_DDEADVISE_reserved) and bm_DDEADVISE_reserved);
8024    end;
8025
8026  function fDeferUpd(var a : DDEADVISE) : word;
8027    begin
8028       fDeferUpd:=(a.flag0 and bm_DDEADVISE_fDeferUpd) shr bp_DDEADVISE_fDeferUpd;
8029    end;
8030
8031  procedure set_fDeferUpd(var a : DDEADVISE; __fDeferUpd : word);
8032    begin
8033       a.flag0:=a.flag0 or ((__fDeferUpd shl bp_DDEADVISE_fDeferUpd) and bm_DDEADVISE_fDeferUpd);
8034    end;
8035
8036  function fAckReq(var a : DDEADVISE) : word;
8037    begin
8038       fAckReq:=(a.flag0 and bm_DDEADVISE_fAckReq) shr bp_DDEADVISE_fAckReq;
8039    end;
8040
8041  procedure set_fAckReq(var a : DDEADVISE; __fAckReq : word);
8042    begin
8043       a.flag0:=a.flag0 or ((__fAckReq shl bp_DDEADVISE_fAckReq) and bm_DDEADVISE_fAckReq);
8044    end;
8045
8046  function unused(var a : DDEDATA) : word;
8047    begin
8048       unused:=(a.flag0 and bm_DDEDATA_unused) shr bp_DDEDATA_unused;
8049    end;
8050
8051  procedure set_unused(var a : DDEDATA; __unused : word);
8052    begin
8053       a.flag0:=a.flag0 or ((__unused shl bp_DDEDATA_unused) and bm_DDEDATA_unused);
8054    end;
8055
8056  function fResponse(var a : DDEDATA) : word;
8057    begin
8058       fResponse:=(a.flag0 and bm_DDEDATA_fResponse) shr bp_DDEDATA_fResponse;
8059    end;
8060
8061  procedure set_fResponse(var a : DDEDATA; __fResponse : word);
8062    begin
8063       a.flag0:=a.flag0 or ((__fResponse shl bp_DDEDATA_fResponse) and bm_DDEDATA_fResponse);
8064    end;
8065
8066  function fRelease(var a : DDEDATA) : word;
8067    begin
8068       fRelease:=(a.flag0 and bm_DDEDATA_fRelease) shr bp_DDEDATA_fRelease;
8069    end;
8070
8071  procedure set_fRelease(var a : DDEDATA; __fRelease : word);
8072    begin
8073       a.flag0:=a.flag0 or ((__fRelease shl bp_DDEDATA_fRelease) and bm_DDEDATA_fRelease);
8074    end;
8075
8076  function reserved(var a : DDEDATA) : word;
8077    begin
8078       reserved:=(a.flag0 and bm_DDEDATA_reserved) shr bp_DDEDATA_reserved;
8079    end;
8080
8081  procedure set_reserved(var a : DDEDATA; __reserved : word);
8082    begin
8083       a.flag0:=a.flag0 or ((__reserved shl bp_DDEDATA_reserved) and bm_DDEDATA_reserved);
8084    end;
8085
8086  function fAckReq(var a : DDEDATA) : word;
8087    begin
8088       fAckReq:=(a.flag0 and bm_DDEDATA_fAckReq) shr bp_DDEDATA_fAckReq;
8089    end;
8090
8091  procedure set_fAckReq(var a : DDEDATA; __fAckReq : word);
8092    begin
8093       a.flag0:=a.flag0 or ((__fAckReq shl bp_DDEDATA_fAckReq) and bm_DDEDATA_fAckReq);
8094    end;
8095
8096  function unused(var a : DDELN) : word;
8097    begin
8098       unused:=(a.flag0 and bm_DDELN_unused) shr bp_DDELN_unused;
8099    end;
8100
8101  procedure set_unused(var a : DDELN; __unused : word);
8102    begin
8103       a.flag0:=a.flag0 or ((__unused shl bp_DDELN_unused) and bm_DDELN_unused);
8104    end;
8105
8106  function fRelease(var a : DDELN) : word;
8107    begin
8108       fRelease:=(a.flag0 and bm_DDELN_fRelease) shr bp_DDELN_fRelease;
8109    end;
8110
8111  procedure set_fRelease(var a : DDELN; __fRelease : word);
8112    begin
8113       a.flag0:=a.flag0 or ((__fRelease shl bp_DDELN_fRelease) and bm_DDELN_fRelease);
8114    end;
8115
8116  function fDeferUpd(var a : DDELN) : word;
8117    begin
8118       fDeferUpd:=(a.flag0 and bm_DDELN_fDeferUpd) shr bp_DDELN_fDeferUpd;
8119    end;
8120
8121  procedure set_fDeferUpd(var a : DDELN; __fDeferUpd : word);
8122    begin
8123       a.flag0:=a.flag0 or ((__fDeferUpd shl bp_DDELN_fDeferUpd) and bm_DDELN_fDeferUpd);
8124    end;
8125
8126  function fAckReq(var a : DDELN) : word;
8127    begin
8128       fAckReq:=(a.flag0 and bm_DDELN_fAckReq) shr bp_DDELN_fAckReq;
8129    end;
8130
8131  procedure set_fAckReq(var a : DDELN; __fAckReq : word);
8132    begin
8133       a.flag0:=a.flag0 or ((__fAckReq shl bp_DDELN_fAckReq) and bm_DDELN_fAckReq);
8134    end;
8135
8136  function unused(var a : DDEPOKE) : word;
8137    begin
8138       unused:=(a.flag0 and bm_DDEPOKE_unused) shr bp_DDEPOKE_unused;
8139    end;
8140
8141  procedure set_unused(var a : DDEPOKE; __unused : word);
8142    begin
8143       a.flag0:=a.flag0 or ((__unused shl bp_DDEPOKE_unused) and bm_DDEPOKE_unused);
8144    end;
8145
8146  function fRelease(var a : DDEPOKE) : word;
8147    begin
8148       fRelease:=(a.flag0 and bm_DDEPOKE_fRelease) shr bp_DDEPOKE_fRelease;
8149    end;
8150
8151  procedure set_fRelease(var a : DDEPOKE; __fRelease : word);
8152    begin
8153       a.flag0:=a.flag0 or ((__fRelease shl bp_DDEPOKE_fRelease) and bm_DDEPOKE_fRelease);
8154    end;
8155
8156  function fReserved(var a : DDEPOKE) : word;
8157    begin
8158       fReserved:=(a.flag0 and bm_DDEPOKE_fReserved) shr bp_DDEPOKE_fReserved;
8159    end;
8160
8161  procedure set_fReserved(var a : DDEPOKE; __fReserved : word);
8162    begin
8163       a.flag0:=a.flag0 or ((__fReserved shl bp_DDEPOKE_fReserved) and bm_DDEPOKE_fReserved);
8164    end;
8165
8166  function unused(var a : DDEUP) : word;
8167    begin
8168       unused:=(a.flag0 and bm_DDEUP_unused) shr bp_DDEUP_unused;
8169    end;
8170
8171  procedure set_unused(var a : DDEUP; __unused : word);
8172    begin
8173       a.flag0:=a.flag0 or ((__unused shl bp_DDEUP_unused) and bm_DDEUP_unused);
8174    end;
8175
8176  function fAck(var a : DDEUP) : word;
8177    begin
8178       fAck:=(a.flag0 and bm_DDEUP_fAck) shr bp_DDEUP_fAck;
8179    end;
8180
8181  procedure set_fAck(var a : DDEUP; __fAck : word);
8182    begin
8183       a.flag0:=a.flag0 or ((__fAck shl bp_DDEUP_fAck) and bm_DDEUP_fAck);
8184    end;
8185
8186  function fRelease(var a : DDEUP) : word;
8187    begin
8188       fRelease:=(a.flag0 and bm_DDEUP_fRelease) shr bp_DDEUP_fRelease;
8189    end;
8190
8191  procedure set_fRelease(var a : DDEUP; __fRelease : word);
8192    begin
8193       a.flag0:=a.flag0 or ((__fRelease shl bp_DDEUP_fRelease) and bm_DDEUP_fRelease);
8194    end;
8195
8196  function fReserved(var a : DDEUP) : word;
8197    begin
8198       fReserved:=(a.flag0 and bm_DDEUP_fReserved) shr bp_DDEUP_fReserved;
8199    end;
8200
8201  procedure set_fReserved(var a : DDEUP; __fReserved : word);
8202    begin
8203       a.flag0:=a.flag0 or ((__fReserved shl bp_DDEUP_fReserved) and bm_DDEUP_fReserved);
8204    end;
8205
8206  function fAckReq(var a : DDEUP) : word;
8207    begin
8208       fAckReq:=(a.flag0 and bm_DDEUP_fAckReq) shr bp_DDEUP_fAckReq;
8209    end;
8210
8211  procedure set_fAckReq(var a : DDEUP; __fAckReq : word);
8212    begin
8213       a.flag0:=a.flag0 or ((__fAckReq shl bp_DDEUP_fAckReq) and bm_DDEUP_fAckReq);
8214    end;
8215
8216 {$calling default}
8217 {$i typshrd.inc}
8218 {$calling cdecl}
8219{$endif read_implementation}
8220
8221