Browse Source

--- Merging r18950 into '.':
U rtl/objpas/dateutil.inc
--- Merging r18996 into '.':
U utils/instantfpc/instantfptools.pas
U utils/instantfpc/instantfpc.pas
--- Merging r19025 into '.':
U packages/paszlib/src/zipper.pp
--- Merging r19031 into '.':
U packages/winunits-base/src/mmsystem.pp
--- Merging r19033 into '.':
G packages/winunits-base/src/mmsystem.pp
--- Merging r19035 into '.':
U rtl/win/wininc/struct.inc
U rtl/win/wininc/redef.inc
--- Merging r19037 into '.':
U packages/opengl/src/gl.pp
--- Merging r19040 into '.':
U rtl/win/sysutils.pp
--- Merging r19042 into '.':
U rtl/objpas/classes/classesh.inc
--- Merging r19043 into '.':
U rtl/objpas/strutils.pp
A tests/test/tstrutils1.pp
A tests/test/tstrutils2.pp

# revisions: 18950,18955,18996,19025,19031,19033,19035,19037,19040,19042,19043
------------------------------------------------------------------------
r18950 | marco | 2011-09-02 21:44:54 +0200 (Fri, 02 Sep 2011) | 2 lines
Changed paths:
M /trunk/rtl/objpas/dateutil.inc

* IsSamemonth analog to IsSameDay. Mantis #19876

------------------------------------------------------------------------
------------------------------------------------------------------------
------------------------------------------------------------------------
r18996 | mattias | 2011-09-06 22:54:30 +0200 (Tue, 06 Sep 2011) | 1 line
Changed paths:
M /trunk/utils/instantfpc/instantfpc.pas
M /trunk/utils/instantfpc/instantfptools.pas

instantfpc: environment option INSTANTFPCOPTIONS
------------------------------------------------------------------------
------------------------------------------------------------------------
r19025 | sekelsenmat | 2011-09-08 14:49:15 +0200 (Thu, 08 Sep 2011) | 1 line
Changed paths:
M /trunk/packages/paszlib/src/zipper.pp

Fixes bug #19986: Patch zipper.pp for create zip file output to TStream support
------------------------------------------------------------------------
------------------------------------------------------------------------
r19031 | marco | 2011-09-08 19:43:09 +0200 (Thu, 08 Sep 2011) | 2 lines
Changed paths:
M /trunk/packages/winunits-base/src/mmsystem.pp

* 64-bit fix for mci_open_params structure. Mantis #20197

------------------------------------------------------------------------
------------------------------------------------------------------------
r19033 | sergei | 2011-09-08 20:32:12 +0200 (Thu, 08 Sep 2011) | 2 lines
Changed paths:
M /trunk/packages/winunits-base/src/mmsystem.pp

* Fixed type of dwCallback member in 44 remaining MCI_xx_PARAMS records ;-)
* MCI_STATUS_PARAMS.dwReturn is pointer-sized, too.
------------------------------------------------------------------------
------------------------------------------------------------------------
r19035 | marco | 2011-09-08 22:42:39 +0200 (Thu, 08 Sep 2011) | 2 lines
Changed paths:
M /trunk/rtl/win/wininc/redef.inc
M /trunk/rtl/win/wininc/struct.inc

* fixes from Mantis #20194, derived from patch and description by G. Fink.

------------------------------------------------------------------------
------------------------------------------------------------------------
r19037 | jonas | 2011-09-09 14:03:09 +0200 (Fri, 09 Sep 2011) | 9 lines
Changed paths:
M /trunk/packages/opengl/src/gl.pp

* replaced some parameter definitions based on their value in the
FreeB-licensed SGI version
* deleted constants that belong in glext.pp (and which are already
defined there)
* replaced "This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon
Graphics, Inc." license header with FreeB license; see
http://bugs.freepascal.org/view.php?id=20200 for details)
-> fixes http://bugs.freepascal.org/view.php?id=20200

------------------------------------------------------------------------
------------------------------------------------------------------------
r19040 | marco | 2011-09-09 22:03:08 +0200 (Fri, 09 Sep 2011) | 2 lines
Changed paths:
M /trunk/rtl/win/sysutils.pp

* typecast that fixes range error, part of mantis #16172

------------------------------------------------------------------------
------------------------------------------------------------------------
r19042 | marco | 2011-09-10 12:00:27 +0200 (Sat, 10 Sep 2011) | 3 lines
Changed paths:
M /trunk/rtl/objpas/classes/classesh.inc

* change resourcestream.handle from thandle to TPFResourceHGlobal, since it is
a pointer, and handle is a 32-bit integer on 64-bit *nix.

------------------------------------------------------------------------
------------------------------------------------------------------------
r19043 | marco | 2011-09-10 17:01:46 +0200 (Sat, 10 Sep 2011) | 3 lines
Changed paths:
M /trunk/rtl/objpas/strutils.pp
A /trunk/tests/test/tstrutils1.pp
A /trunk/tests/test/tstrutils2.pp

* ansi(start/ends)(str/text) MBCS compatible (via widestringmgr), mantis #16153 + tests
Patch by Flavio Etrusco.

------------------------------------------------------------------------

git-svn-id: branches/fixes_2_6@19140 -

marco 14 years ago
parent
commit
55ab2b4171

+ 2 - 0
.gitattributes

@@ -10452,6 +10452,8 @@ tests/test/tstrreal2.pp svneol=native#text/plain
 tests/test/tstrreal3.pp svneol=native#text/plain
 tests/test/tstrreal3.pp svneol=native#text/plain
 tests/test/tstrreal4.pp svneol=native#text/plain
 tests/test/tstrreal4.pp svneol=native#text/plain
 tests/test/tstrreal5.pp svneol=native#text/plain
 tests/test/tstrreal5.pp svneol=native#text/plain
+tests/test/tstrutils1.pp svneol=native#text/plain
+tests/test/tstrutils2.pp svneol=native#text/plain
 tests/test/tsubdecl.pp svneol=native#text/plain
 tests/test/tsubdecl.pp svneol=native#text/plain
 tests/test/tsymlibrary1.pp svneol=native#text/pascal
 tests/test/tsymlibrary1.pp svneol=native#text/pascal
 tests/test/ttpara1.pp svneol=native#text/plain
 tests/test/ttpara1.pp svneol=native#text/plain

+ 35 - 107
packages/opengl/src/gl.pp

@@ -1,45 +1,37 @@
-{
-
-  Adaption of the delphi3d.net OpenGL units to FreePascal
-  Sebastian Guenther ([email protected]) in 2002
-  These units are free to use
-}
-
-(*++ BUILD Version: 0004    // Increment this if a change has global effects
-
-Copyright (c) 1985-96, Microsoft Corporation
-
-Module Name:
-
-    gl.h
-
-Abstract:
-
-    Procedure declarations, constant definitions and macros for the OpenGL
-    component.
-
---*)
-
-{*
-** Copyright 1996 Silicon Graphics, Inc.
-** All Rights Reserved.
-**
-** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
-** the contents of this file may not be disclosed to third parties, copied or
-** duplicated in any form, in whole or in part, without the prior written
-** permission of Silicon Graphics, Inc.
+(*
+** License Applicability. Except to the extent portions of this file are
+** made subject to an alternative license as permitted in the SGI Free
+** Software License B, Version 1.1 (the "License"), the contents of this
+** file are subject only to the provisions of the License. You may not use
+** this file except in compliance with the License. You may obtain a copy
+** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
+** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
+** 
+** http://oss.sgi.com/projects/FreeB
+** 
+** Note that, as provided in the License, the Software is distributed on an
+** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
+** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
+** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
+** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
+** 
+** Original Code. The Original Code is: OpenGL Sample Implementation,
+** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
+** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
+** Copyright in any portions created by third parties is as indicated
+** elsewhere herein. All Rights Reserved.
+** 
+** Additional Notice Provisions: This software was created using the
+** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has
+** not been independently verified as being compliant with the OpenGL(R)
+** version 1.2.1 Specification.
 **
 **
-** RESTRICTED RIGHTS LEGEND:
-** Use, duplication or disclosure by the Government is subject to restrictions
-** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
-** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
-** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
-** rights reserved under the Copyright Laws of the United States.
-*}
+** (this unit actually only contains the 1.1 parts of the specification,
+**  the parts from the subsequence versions are in glext.pp)
+*)
 
 
 {******************************************************************************}
 {******************************************************************************}
 { Converted to Delphi by Tom Nuydens ([email protected])                        }
 { Converted to Delphi by Tom Nuydens ([email protected])                        }
-{ For the latest updates, visit Delphi3D: http://www.delphi3d.net              }
 {******************************************************************************}
 {******************************************************************************}
 
 
 {$MODE Delphi}
 {$MODE Delphi}
@@ -1117,70 +1109,6 @@ const
   GL_T2F_C4F_N3F_V3F                = $2A2C;
   GL_T2F_C4F_N3F_V3F                = $2A2C;
   GL_T4F_C4F_N3F_V4F                = $2A2D;
   GL_T4F_C4F_N3F_V4F                = $2A2D;
 
 
-  // Extensions
-  GL_EXT_vertex_array               = 1;
-  GL_WIN_swap_hint                  = 1;
-  GL_EXT_bgra                       = 1;
-  GL_EXT_paletted_texture           = 1;
-
-  // EXT_vertex_array
-  GL_VERTEX_ARRAY_EXT               = $8074;
-  GL_NORMAL_ARRAY_EXT               = $8075;
-  GL_COLOR_ARRAY_EXT                = $8076;
-  GL_INDEX_ARRAY_EXT                = $8077;
-  GL_TEXTURE_COORD_ARRAY_EXT        = $8078;
-  GL_EDGE_FLAG_ARRAY_EXT            = $8079;
-  GL_VERTEX_ARRAY_SIZE_EXT          = $807A;
-  GL_VERTEX_ARRAY_TYPE_EXT          = $807B;
-  GL_VERTEX_ARRAY_STRIDE_EXT        = $807C;
-  GL_VERTEX_ARRAY_COUNT_EXT         = $807D;
-  GL_NORMAL_ARRAY_TYPE_EXT          = $807E;
-  GL_NORMAL_ARRAY_STRIDE_EXT        = $807F;
-  GL_NORMAL_ARRAY_COUNT_EXT         = $8080;
-  GL_COLOR_ARRAY_SIZE_EXT           = $8081;
-  GL_COLOR_ARRAY_TYPE_EXT           = $8082;
-  GL_COLOR_ARRAY_STRIDE_EXT         = $8083;
-  GL_COLOR_ARRAY_COUNT_EXT          = $8084;
-  GL_INDEX_ARRAY_TYPE_EXT           = $8085;
-  GL_INDEX_ARRAY_STRIDE_EXT         = $8086;
-  GL_INDEX_ARRAY_COUNT_EXT          = $8087;
-  GL_TEXTURE_COORD_ARRAY_SIZE_EXT   = $8088;
-  GL_TEXTURE_COORD_ARRAY_TYPE_EXT   = $8089;
-  GL_TEXTURE_COORD_ARRAY_STRIDE_EXT = $808A;
-  GL_TEXTURE_COORD_ARRAY_COUNT_EXT  = $808B;
-  GL_EDGE_FLAG_ARRAY_STRIDE_EXT     = $808C;
-  GL_EDGE_FLAG_ARRAY_COUNT_EXT      = $808D;
-  GL_VERTEX_ARRAY_POINTER_EXT       = $808E;
-  GL_NORMAL_ARRAY_POINTER_EXT       = $808F;
-  GL_COLOR_ARRAY_POINTER_EXT        = $8090;
-  GL_INDEX_ARRAY_POINTER_EXT        = $8091;
-  GL_TEXTURE_COORD_ARRAY_POINTER_EXT = $8092;
-  GL_EDGE_FLAG_ARRAY_POINTER_EXT    = $8093;
-  GL_DOUBLE_EXT                     = GL_DOUBLE;
-
-  // EXT_bgra
-  GL_BGR_EXT                        = $80E0;
-  GL_BGRA_EXT                       = $80E1;
-
-  // EXT_paletted_texture
-
-  // These must match the GL_COLOR_TABLE_*_SGI enumerants
-  GL_COLOR_TABLE_FORMAT_EXT         = $80D8;
-  GL_COLOR_TABLE_WIDTH_EXT          = $80D9;
-  GL_COLOR_TABLE_RED_SIZE_EXT       = $80DA;
-  GL_COLOR_TABLE_GREEN_SIZE_EXT     = $80DB;
-  GL_COLOR_TABLE_BLUE_SIZE_EXT      = $80DC;
-  GL_COLOR_TABLE_ALPHA_SIZE_EXT     = $80DD;
-  GL_COLOR_TABLE_LUMINANCE_SIZE_EXT = $80DE;
-  GL_COLOR_TABLE_INTENSITY_SIZE_EXT = $80DF;
-
-  GL_COLOR_INDEX1_EXT               = $80E2;
-  GL_COLOR_INDEX2_EXT               = $80E3;
-  GL_COLOR_INDEX4_EXT               = $80E4;
-  GL_COLOR_INDEX8_EXT               = $80E5;
-  GL_COLOR_INDEX12_EXT              = $80E6;
-  GL_COLOR_INDEX16_EXT              = $80E7;
-
   // For compatibility with OpenGL v1.0
   // For compatibility with OpenGL v1.0
   GL_LOGIC_OP                       = GL_INDEX_LOGIC_OP;
   GL_LOGIC_OP                       = GL_INDEX_LOGIC_OP;
   GL_TEXTURE_COMPONENTS             = GL_TEXTURE_INTERNAL_FORMAT;
   GL_TEXTURE_COMPONENTS             = GL_TEXTURE_INTERNAL_FORMAT;
@@ -1386,9 +1314,9 @@ var
   glNormalPointer: procedure(atype: GLenum; stride: GLsizei; const pointer: Pointer); extdecl;
   glNormalPointer: procedure(atype: GLenum; stride: GLsizei; const pointer: Pointer); extdecl;
   glOrtho: procedure(left, right, bottom, top, zNear, zFar: GLdouble); extdecl;
   glOrtho: procedure(left, right, bottom, top, zNear, zFar: GLdouble); extdecl;
   glPassThrough: procedure(token: GLfloat); extdecl;
   glPassThrough: procedure(token: GLfloat); extdecl;
-  glPixelMapfv: procedure(map: GLenum; mapsize: GLsizei; const values: PGLfloat); extdecl;
-  glPixelMapuiv: procedure(map: GLenum; mapsize: GLsizei; const values: PGLuint); extdecl;
-  glPixelMapusv: procedure(map: GLenum; mapsize: GLsizei; const values: PGLushort); extdecl;
+  glPixelMapfv: procedure(map: GLenum; mapsize: GLint; const values: PGLfloat); extdecl;
+  glPixelMapuiv: procedure(map: GLenum; mapsize: GLint; const values: PGLuint); extdecl;
+  glPixelMapusv: procedure(map: GLenum; mapsize: GLint; const values: PGLushort); extdecl;
   glPixelStoref: procedure(pname: GLenum; param: GLfloat); extdecl;
   glPixelStoref: procedure(pname: GLenum; param: GLfloat); extdecl;
   glPixelStorei: procedure(pname: GLenum; param: GLint); extdecl;
   glPixelStorei: procedure(pname: GLenum; param: GLint); extdecl;
   glPixelTransferf: procedure(pname: GLenum; param: GLfloat); extdecl;
   glPixelTransferf: procedure(pname: GLenum; param: GLfloat); extdecl;
@@ -1495,8 +1423,8 @@ var
   glTexGenfv: procedure(coord: GLenum; pname: GLenum; const params: PGLfloat); extdecl;
   glTexGenfv: procedure(coord: GLenum; pname: GLenum; const params: PGLfloat); extdecl;
   glTexGeni: procedure(coord: GLenum; pname: GLenum; param: GLint); extdecl;
   glTexGeni: procedure(coord: GLenum; pname: GLenum; param: GLint); extdecl;
   glTexGeniv: procedure(coord: GLenum; pname: GLenum; const params: PGLint); extdecl;
   glTexGeniv: procedure(coord: GLenum; pname: GLenum; const params: PGLint); extdecl;
-  glTexImage1D: procedure(target: GLenum; level, internalformat: GLint; width: GLsizei; border: GLint; format, atype: GLenum; const pixels: Pointer); extdecl;
-  glTexImage2D: procedure(target: GLenum; level, internalformat: GLint; width, height: GLsizei; border: GLint; format, atype: GLenum; const pixels: Pointer); extdecl;
+  glTexImage1D: procedure(target: GLenum; level: GLInt; internalformat: GLEnum; width: GLsizei; border: GLint; format, atype: GLenum; const pixels: Pointer); extdecl;
+  glTexImage2D: procedure(target: GLenum; level: GLInt; internalformat: GLEnum; width, height: GLsizei; border: GLint; format, atype: GLenum; const pixels: Pointer); extdecl;
   glTexParameterf: procedure(target: GLenum; pname: GLenum; param: GLfloat); extdecl;
   glTexParameterf: procedure(target: GLenum; pname: GLenum; param: GLfloat); extdecl;
   glTexParameterfv: procedure(target: GLenum; pname: GLenum; const params: PGLfloat); extdecl;
   glTexParameterfv: procedure(target: GLenum; pname: GLenum; const params: PGLfloat); extdecl;
   glTexParameteri: procedure(target: GLenum; pname: GLenum; param: GLint); extdecl;
   glTexParameteri: procedure(target: GLenum; pname: GLenum; param: GLint); extdecl;

+ 51 - 49
packages/paszlib/src/zipper.pp

@@ -303,7 +303,7 @@ Type
     FFileName   :  String;         { Name of resulting Zip file                 }
     FFileName   :  String;         { Name of resulting Zip file                 }
     FFiles      : TStrings;
     FFiles      : TStrings;
     FInMemSize  : Integer;
     FInMemSize  : Integer;
-    FOutFile    : TFileStream;
+    FOutStream  : TStream;
     FInFile     : TStream;     { I/O file variables                         }
     FInFile     : TStream;     { I/O file variables                         }
     LocalHdr    : Local_File_Header_Type;
     LocalHdr    : Local_File_Header_Type;
     CentralHdr  : Central_File_Header_Type;
     CentralHdr  : Central_File_Header_Type;
@@ -315,8 +315,6 @@ Type
     function CheckEntries: Integer;
     function CheckEntries: Integer;
     procedure SetEntries(const AValue: TZipFileEntries);
     procedure SetEntries(const AValue: TZipFileEntries);
   Protected
   Protected
-    Procedure OpenOutput;
-    Procedure CloseOutput;
     Procedure CloseInput(Item : TZipFileEntry);
     Procedure CloseInput(Item : TZipFileEntry);
     Procedure StartZipFile(Item : TZipFileEntry);
     Procedure StartZipFile(Item : TZipFileEntry);
     Function  UpdateZipHeader(Item : TZipFileEntry; FZip : TStream; ACRC : LongWord;AMethod : Word) : Boolean;
     Function  UpdateZipHeader(Item : TZipFileEntry; FZip : TStream; ACRC : LongWord;AMethod : Word) : Boolean;
@@ -332,6 +330,8 @@ Type
     Constructor Create;
     Constructor Create;
     Destructor Destroy;override;
     Destructor Destroy;override;
     Procedure ZipAllFiles; virtual;
     Procedure ZipAllFiles; virtual;
+    Procedure SaveToFile(AFileName: string);
+    Procedure SaveToStream(AStream: TStream);
     Procedure ZipFiles(AFileName : String; FileList : TStrings);
     Procedure ZipFiles(AFileName : String; FileList : TStrings);
     Procedure ZipFiles(FileList : TStrings);
     Procedure ZipFiles(FileList : TStrings);
     Procedure ZipFiles(AFileName : String; Entries : TZipFileEntries);
     Procedure ZipFiles(AFileName : String; Entries : TZipFileEntries);
@@ -1202,13 +1202,6 @@ begin
   FEntries.Assign(AValue);
   FEntries.Assign(AValue);
 end;
 end;
 
 
-Procedure TZipper.OpenOutput;
-
-Begin
-  FOutFile:=TFileStream.Create(FFileName,fmCreate);
-End;
-
-
 Function TZipper.OpenInput(Item : TZipFileEntry) : Boolean;
 Function TZipper.OpenInput(Item : TZipFileEntry) : Boolean;
 
 
 Begin
 Begin
@@ -1225,13 +1218,6 @@ Begin
 End;
 End;
 
 
 
 
-Procedure TZipper.CloseOutput;
-
-Begin
-  FreeAndNil(FOutFile);
-end;
-
-
 Procedure TZipper.CloseInput(Item : TZipFileEntry);
 Procedure TZipper.CloseInput(Item : TZipFileEntry);
 
 
 Begin
 Begin
@@ -1280,8 +1266,8 @@ Begin
       Compressed_Size := Uncompressed_Size;  { ...update compressed size   }
       Compressed_Size := Uncompressed_Size;  { ...update compressed size   }
       end;
       end;
     end;
     end;
-  FOutFile.WriteBuffer({$IFDEF ENDIAN_BIG}SwapLFH{$ENDIF}(LocalHdr),SizeOf(LocalHdr));
-  FOutFile.WriteBuffer(ZFileName[1],Length(ZFileName));
+  FOutStream.WriteBuffer({$IFDEF ENDIAN_BIG}SwapLFH{$ENDIF}(LocalHdr),SizeOf(LocalHdr));
+  FOutStream.WriteBuffer(ZFileName[1],Length(ZFileName));
 End;
 End;
 
 
 
 
@@ -1296,17 +1282,17 @@ Var
 
 
 Begin
 Begin
    ACount := 0;
    ACount := 0;
-   CenDirPos := FOutFile.Position;
-   FOutFile.Seek(0,soFrombeginning);             { Rewind output file }
-   HdrPos := FOutFile.Position;
-   FOutFile.ReadBuffer(LocalHdr, SizeOf(LocalHdr));
+   CenDirPos := FOutStream.Position;
+   FOutStream.Seek(0,soFrombeginning);             { Rewind output file }
+   HdrPos := FOutStream.Position;
+   FOutStream.ReadBuffer(LocalHdr, SizeOf(LocalHdr));
 {$IFDEF FPC_BIG_ENDIAN}
 {$IFDEF FPC_BIG_ENDIAN}
    LocalHdr := SwapLFH(LocalHdr);
    LocalHdr := SwapLFH(LocalHdr);
 {$ENDIF}
 {$ENDIF}
    Repeat
    Repeat
      SetLength(ZFileName,LocalHdr.FileName_Length);
      SetLength(ZFileName,LocalHdr.FileName_Length);
-     FOutFile.ReadBuffer(ZFileName[1], LocalHdr.FileName_Length);
-     SavePos := FOutFile.Position;
+     FOutStream.ReadBuffer(ZFileName[1], LocalHdr.FileName_Length);
+     SavePos := FOutStream.Position;
      FillChar(CentralHdr,SizeOf(CentralHdr),0);
      FillChar(CentralHdr,SizeOf(CentralHdr),0);
      With CentralHdr do
      With CentralHdr do
        begin
        begin
@@ -1328,18 +1314,18 @@ Begin
      {$ENDIF}
      {$ENDIF}
        Local_Header_Offset := HdrPos;
        Local_Header_Offset := HdrPos;
        end;
        end;
-     FOutFile.Seek(0,soFromEnd);
-     FOutFile.WriteBuffer({$IFDEF FPC_BIG_ENDIAN}SwapCFH{$ENDIF}(CentralHdr),SizeOf(CentralHdr));
-     FOutFile.WriteBuffer(ZFileName[1],Length(ZFileName));
+     FOutStream.Seek(0,soFromEnd);
+     FOutStream.WriteBuffer({$IFDEF FPC_BIG_ENDIAN}SwapCFH{$ENDIF}(CentralHdr),SizeOf(CentralHdr));
+     FOutStream.WriteBuffer(ZFileName[1],Length(ZFileName));
      Inc(ACount);
      Inc(ACount);
-     FOutFile.Seek(SavePos + LocalHdr.Compressed_Size,soFromBeginning);
-     HdrPos:=FOutFile.Position;
-     FOutFile.ReadBuffer(LocalHdr, SizeOf(LocalHdr));
+     FOutStream.Seek(SavePos + LocalHdr.Compressed_Size,soFromBeginning);
+     HdrPos:=FOutStream.Position;
+     FOutStream.ReadBuffer(LocalHdr, SizeOf(LocalHdr));
 {$IFDEF FPC_BIG_ENDIAN}
 {$IFDEF FPC_BIG_ENDIAN}
      LocalHdr := SwapLFH(LocalHdr);
      LocalHdr := SwapLFH(LocalHdr);
 {$ENDIF}
 {$ENDIF}
    Until LocalHdr.Signature = CENTRAL_FILE_HEADER_SIGNATURE;
    Until LocalHdr.Signature = CENTRAL_FILE_HEADER_SIGNATURE;
-   FOutFile.Seek(0,soFromEnd);
+   FOutStream.Seek(0,soFromEnd);
    FillChar(EndHdr,SizeOf(EndHdr),0);
    FillChar(EndHdr,SizeOf(EndHdr),0);
    With EndHdr do
    With EndHdr do
      begin
      begin
@@ -1348,10 +1334,10 @@ Begin
      Central_Dir_Start_Disk := 0;
      Central_Dir_Start_Disk := 0;
      Entries_This_Disk := ACount;
      Entries_This_Disk := ACount;
      Total_Entries := ACount;
      Total_Entries := ACount;
-     Central_Dir_Size := FOutFile.Size-CenDirPos;
+     Central_Dir_Size := FOutStream.Size-CenDirPos;
      Start_Disk_Offset := CenDirPos;
      Start_Disk_Offset := CenDirPos;
      ZipFile_Comment_Length := 0;
      ZipFile_Comment_Length := 0;
-     FOutFile.WriteBuffer({$IFDEF FPC_BIG_ENDIAN}SwapECD{$ENDIF}(EndHdr), SizeOf(EndHdr));
+     FOutStream.WriteBuffer({$IFDEF FPC_BIG_ENDIAN}SwapECD{$ENDIF}(EndHdr), SizeOf(EndHdr));
      end;
      end;
 end;
 end;
 
 
@@ -1393,12 +1379,12 @@ Begin
         end;
         end;
       If UpdateZipHeader(Item,ZipStream,CRC,ZMethod) then
       If UpdateZipHeader(Item,ZipStream,CRC,ZMethod) then
         // Compressed file smaller than original file.
         // Compressed file smaller than original file.
-        FOutFile.CopyFrom(ZipStream,0)
+        FOutStream.CopyFrom(ZipStream,0)
       else
       else
         begin
         begin
         // Original file smaller than compressed file.
         // Original file smaller than compressed file.
         FInfile.Seek(0,soFromBeginning);
         FInfile.Seek(0,soFromBeginning);
-        FOutFile.CopyFrom(FInFile,0);
+        FOutStream.CopyFrom(FInFile,0);
         end;
         end;
     finally
     finally
       ZipStream.Free;
       ZipStream.Free;
@@ -1410,30 +1396,46 @@ Begin
   end;
   end;
 end;
 end;
 
 
+// Just like SaveToFile, but uses the FileName property
 Procedure TZipper.ZipAllFiles;
 Procedure TZipper.ZipAllFiles;
 
 
+Begin
+  SaveToFile(FileName);
+end;
+
+procedure TZipper.SaveToFile(AFileName: string);
+var
+  lStream: TFileStream;
+begin
+  lStream:=TFileStream.Create(FFileName,fmCreate);
+  try
+    SaveToStream(lStream);
+  finally
+    FreeAndNil(lStream);
+  end;
+end;
+
+procedure TZipper.SaveToStream(AStream: TStream);
 Var
 Var
    I : Integer;
    I : Integer;
    filecnt : integer;
    filecnt : integer;
-Begin
+begin
+  FOutStream := AStream;
+
   If CheckEntries=0 then
   If CheckEntries=0 then
     Exit;
     Exit;
   FZipping:=True;
   FZipping:=True;
   Try
   Try
     GetFileInfo;
     GetFileInfo;
-    OpenOutput;
-    Try
-      filecnt:=0;
-      For I:=0 to FEntries.Count-1 do
-        begin
-        ZipOneFile(FEntries[i]);
-        inc(filecnt);
-        end;
-      if filecnt>0 then
-        BuildZipDirectory;
-    finally
-      CloseOutput;
+
+    filecnt:=0;
+    for I:=0 to FEntries.Count-1 do
+    begin
+      ZipOneFile(FEntries[i]);
+      inc(filecnt);
     end;
     end;
+    if filecnt>0 then
+      BuildZipDirectory;
   finally
   finally
     FZipping:=False;
     FZipping:=False;
     // Remove entries that have been added by CheckEntries from Files.
     // Remove entries that have been added by CheckEntries from Files.

+ 45 - 45
packages/winunits-base/src/mmsystem.pp

@@ -1778,7 +1778,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
   TYIELDPROC = YIELDPROC;
   TYIELDPROC = YIELDPROC;
 
 
  _MCI_GENERIC_PARMS = packed Record
  _MCI_GENERIC_PARMS = packed Record
-                              dwCallback: DWORD;
+                              dwCallback: DWORD_PTR;
 			     End;
 			     End;
  MCI_GENERIC_PARMS   = _MCI_GENERIC_PARMS;
  MCI_GENERIC_PARMS   = _MCI_GENERIC_PARMS;
  PMCI_GENERIC_PARMS  = ^_MCI_GENERIC_PARMS;
  PMCI_GENERIC_PARMS  = ^_MCI_GENERIC_PARMS;
@@ -1786,7 +1786,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_GENERIC_PARMS  = MCI_GENERIC_PARMS;
  TMCI_GENERIC_PARMS  = MCI_GENERIC_PARMS;
 
 
  _MCI_OPEN_PARMSA = packed Record
  _MCI_OPEN_PARMSA = packed Record
-                            dwCallback: DWORD;
+                            dwCallback: DWORD_PTR;
                             wDeviceID: MCIDEVICEID;
                             wDeviceID: MCIDEVICEID;
                             lpstrDeviceType: LPCSTR;
                             lpstrDeviceType: LPCSTR;
                             lpstrElementName: LPCSTR;
                             lpstrElementName: LPCSTR;
@@ -1798,7 +1798,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_OPEN_PARMSA  = MCI_OPEN_PARMSA;
  TMCI_OPEN_PARMSA  = MCI_OPEN_PARMSA;
 
 
  _MCI_OPEN_PARMSW = packed Record
  _MCI_OPEN_PARMSW = packed Record
-                            dwCallback: DWORD;
+                            dwCallback: DWORD_PTR;
                             wDeviceID: MCIDEVICEID;
                             wDeviceID: MCIDEVICEID;
                             lpstrDeviceType: LPCWSTR;
                             lpstrDeviceType: LPCWSTR;
                             lpstrElementName: LPCWSTR;
                             lpstrElementName: LPCWSTR;
@@ -1820,7 +1820,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
   TMCI_OPEN_PARMS = MCI_OPEN_PARMS;
   TMCI_OPEN_PARMS = MCI_OPEN_PARMS;
 
 
  _MCI_PLAY_PARMS = packed Record
  _MCI_PLAY_PARMS = packed Record
-                           dwCallback: DWORD;
+                           dwCallback: DWORD_PTR;
                            dwFrom: DWORD;
                            dwFrom: DWORD;
                            dwTo: DWORD;
                            dwTo: DWORD;
 			 End;
 			 End;
@@ -1830,7 +1830,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_PLAY_PARMS  = _MCI_PLAY_PARMS;
  TMCI_PLAY_PARMS  = _MCI_PLAY_PARMS;
 
 
  _MCI_SEEK_PARMS = packed Record
  _MCI_SEEK_PARMS = packed Record
-                           dwCallback: DWORD;
+                           dwCallback: DWORD_PTR;
                            dwTo: DWORD;
                            dwTo: DWORD;
 			  End;
 			  End;
  MCI_SEEK_PARMS   = _MCI_SEEK_PARMS;
  MCI_SEEK_PARMS   = _MCI_SEEK_PARMS;
@@ -1839,8 +1839,8 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_SEEK_PARMS  = _MCI_SEEK_PARMS;
  TMCI_SEEK_PARMS  = _MCI_SEEK_PARMS;
 
 
  _MCI_STATUS_PARMS = packed Record
  _MCI_STATUS_PARMS = packed Record
-                             dwCallback: DWORD;
-                             dwReturn: DWORD;
+                             dwCallback: DWORD_PTR;
+                             dwReturn: DWORD_PTR;
                              dwItem: DWORD;
                              dwItem: DWORD;
                              dwTrack: DWORD;
                              dwTrack: DWORD;
 			    End;
 			    End;
@@ -1850,7 +1850,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_STATUS_PARMS  = _MCI_STATUS_PARMS;
  TMCI_STATUS_PARMS  = _MCI_STATUS_PARMS;
 
 
  _MCI_INFO_PARMSA = packed Record
  _MCI_INFO_PARMSA = packed Record
-                            dwCallback: DWORD;
+                            dwCallback: DWORD_PTR;
                             lpstrReturn: PChar;
                             lpstrReturn: PChar;
                             dwRetSize: DWORD;
                             dwRetSize: DWORD;
 			  End;
 			  End;
@@ -1859,7 +1859,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_INFO_PARMSA  = _MCI_INFO_PARMSA;
  TMCI_INFO_PARMSA  = _MCI_INFO_PARMSA;
 
 
  _MCI_INFO_PARMSW  = packed Record
  _MCI_INFO_PARMSW  = packed Record
-                            dwCallback: DWORD;
+                            dwCallback: DWORD_PTR;
                             lpstrReturn: LPWSTR;
                             lpstrReturn: LPWSTR;
                             dwRetSize: DWORD;
                             dwRetSize: DWORD;
 			End;
 			End;
@@ -1877,7 +1877,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
   TMCI_INFO_PARMS = MCI_INFO_PARMS;
   TMCI_INFO_PARMS = MCI_INFO_PARMS;
 
 
  _MCI_GETDEVCAPS_PARMS = packed Record
  _MCI_GETDEVCAPS_PARMS = packed Record
-                                 dwCallback: DWORD;
+                                 dwCallback: DWORD_PTR;
                                  dwReturn: DWORD;
                                  dwReturn: DWORD;
                                  dwItem: DWORD;
                                  dwItem: DWORD;
 				End;
 				End;
@@ -1889,7 +1889,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
 
 
 
 
  _MCI_SYSINFO_PARMSA = packed Record
  _MCI_SYSINFO_PARMSA = packed Record
-                               dwCallback: DWORD;
+                               dwCallback: DWORD_PTR;
                                lpstrReturn: PChar;
                                lpstrReturn: PChar;
                                dwRetSize: DWORD;
                                dwRetSize: DWORD;
                                dwNumber: DWORD;
                                dwNumber: DWORD;
@@ -1901,7 +1901,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_SYSINFO_PARMSA  = _MCI_SYSINFO_PARMSA;
  TMCI_SYSINFO_PARMSA  = _MCI_SYSINFO_PARMSA;
 
 
  _MCI_SYSINFO_PARMSW = packed Record
  _MCI_SYSINFO_PARMSW = packed Record
-                               dwCallback: DWORD;
+                               dwCallback: DWORD_PTR;
                                lpstrReturn: LPWSTR;
                                lpstrReturn: LPWSTR;
                                dwRetSize: DWORD;
                                dwRetSize: DWORD;
                                dwNumber: DWORD;
                                dwNumber: DWORD;
@@ -1923,7 +1923,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_SYSINFO_PARMS = MCI_SYSINFO_PARMS;
  TMCI_SYSINFO_PARMS = MCI_SYSINFO_PARMS;
 
 
  _MCI_SET_PARMS = packed Record
  _MCI_SET_PARMS = packed Record
-                          dwCallback: DWORD;
+                          dwCallback: DWORD_PTR;
                           dwTimeFormat: DWORD;
                           dwTimeFormat: DWORD;
                           dwAudio: DWORD;
                           dwAudio: DWORD;
 			 End;
 			 End;
@@ -1933,7 +1933,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_SET_PARMS  = _MCI_SET_PARMS;
  TMCI_SET_PARMS  = _MCI_SET_PARMS;
 
 
  _MCI_BREAK_PARMS = packed Record
  _MCI_BREAK_PARMS = packed Record
-                            dwCallback: DWORD;
+                            dwCallback: DWORD_PTR;
                             nVirtKey: longint;
                             nVirtKey: longint;
                             hwndBreak: HWND;
                             hwndBreak: HWND;
 			  End;
 			  End;
@@ -1943,7 +1943,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_BREAK_PARMS  = _MCI_BREAK_PARMS;
  TMCI_BREAK_PARMS  = _MCI_BREAK_PARMS;
 
 
  _MCI_SAVE_PARMSA = packed Record
  _MCI_SAVE_PARMSA = packed Record
-                            dwCallback: DWORD;
+                            dwCallback: DWORD_PTR;
                             lpfilename: LPCSTR;
                             lpfilename: LPCSTR;
 			   End;
 			   End;
  MCI_SAVE_PARMSA   = _MCI_SAVE_PARMSA;
  MCI_SAVE_PARMSA   = _MCI_SAVE_PARMSA;
@@ -1953,7 +1953,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_SaveParmsA   = TMCI_SAVE_PARMSA;
  TMCI_SaveParmsA   = TMCI_SAVE_PARMSA;
 
 
  _MCI_SAVE_PARMSW = packed Record
  _MCI_SAVE_PARMSW = packed Record
-                            dwCallback: DWORD;
+                            dwCallback: DWORD_PTR;
                             lpfilename: LPCWSTR;
                             lpfilename: LPCWSTR;
 			   End;
 			   End;
  MCI_SAVE_PARMSW   = _MCI_SAVE_PARMSW;
  MCI_SAVE_PARMSW   = _MCI_SAVE_PARMSW;
@@ -1975,7 +1975,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
   TMCI_SaveParms   = TMCI_SAVE_PARMS;
   TMCI_SaveParms   = TMCI_SAVE_PARMS;
 
 
  _MCI_LOAD_PARMSA = packed Record
  _MCI_LOAD_PARMSA = packed Record
-                            dwCallback: DWORD;
+                            dwCallback: DWORD_PTR;
                             lpfilename: LPCSTR;
                             lpfilename: LPCSTR;
 			 End;
 			 End;
  MCI_LOAD_PARMSA   = _MCI_LOAD_PARMSA;
  MCI_LOAD_PARMSA   = _MCI_LOAD_PARMSA;
@@ -1984,7 +1984,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_LOAD_PARMSA  = _MCI_LOAD_PARMSA;
  TMCI_LOAD_PARMSA  = _MCI_LOAD_PARMSA;
 
 
  _MCI_LOAD_PARMSW  = packed Record
  _MCI_LOAD_PARMSW  = packed Record
-                            dwCallback: DWORD;
+                            dwCallback: DWORD_PTR;
                             lpfilename: LPCWSTR;
                             lpfilename: LPCWSTR;
 			   End;
 			   End;
 
 
@@ -2005,7 +2005,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_LOAD_PARMS = MCI_LOAD_PARMS;
  TMCI_LOAD_PARMS = MCI_LOAD_PARMS;
 
 
  _MCI_RECORD_PARMS = packed Record
  _MCI_RECORD_PARMS = packed Record
-                             dwCallback: DWORD;
+                             dwCallback: DWORD_PTR;
                              dwFrom: DWORD;
                              dwFrom: DWORD;
                              dwTo: DWORD;
                              dwTo: DWORD;
 			    End;
 			    End;
@@ -2014,7 +2014,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_RECORD_PARMS  = _MCI_RECORD_PARMS;
  TMCI_RECORD_PARMS  = _MCI_RECORD_PARMS;
 
 
  _MCI_VD_PLAY_PARMS = packed Record
  _MCI_VD_PLAY_PARMS = packed Record
-                              dwCallback: DWORD;
+                              dwCallback: DWORD_PTR;
                               dwFrom: DWORD;
                               dwFrom: DWORD;
                               dwTo: DWORD;
                               dwTo: DWORD;
                               dwSpeed: DWORD;
                               dwSpeed: DWORD;
@@ -2025,7 +2025,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_VD_PLAY_PARMS  = _MCI_VD_PLAY_PARMS;
  TMCI_VD_PLAY_PARMS  = _MCI_VD_PLAY_PARMS;
 
 
  _MCI_VD_STEP_PARMS  = packed Record
  _MCI_VD_STEP_PARMS  = packed Record
-                              dwCallback: DWORD;
+                              dwCallback: DWORD_PTR;
                               dwFrames: DWORD;
                               dwFrames: DWORD;
 			    End;
 			    End;
  MCI_VD_STEP_PARMS     = _MCI_VD_STEP_PARMS;
  MCI_VD_STEP_PARMS     = _MCI_VD_STEP_PARMS;
@@ -2033,7 +2033,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  LPMCI_VD_STEP_PARMS   = ^_MCI_VD_STEP_PARMS;
  LPMCI_VD_STEP_PARMS   = ^_MCI_VD_STEP_PARMS;
 
 
  _MCI_VD_ESCAPE_PARMSA = packed Record
  _MCI_VD_ESCAPE_PARMSA = packed Record
-                                 dwCallback: DWORD;
+                                 dwCallback: DWORD_PTR;
                                  lpstrCommand: LPCSTR;
                                  lpstrCommand: LPCSTR;
 				End;
 				End;
  MCI_VD_ESCAPE_PARMSA   = _MCI_VD_ESCAPE_PARMSA;
  MCI_VD_ESCAPE_PARMSA   = _MCI_VD_ESCAPE_PARMSA;
@@ -2042,7 +2042,7 @@ _MIXERCONTROLDETAILS_BOOLEAN = packed Record
  TMCI_VD_ESCAPE_PARMSA  = _MCI_VD_ESCAPE_PARMSA;
  TMCI_VD_ESCAPE_PARMSA  = _MCI_VD_ESCAPE_PARMSA;
 
 
 _MCI_VD_ESCAPE_PARMSW   = packed Record
 _MCI_VD_ESCAPE_PARMSW   = packed Record
-                                 dwCallback: DWORD;
+                                 dwCallback: DWORD_PTR;
                                  lpstrCommand: LPCWSTR;
                                  lpstrCommand: LPCWSTR;
 				 End;
 				 End;
  MCI_VD_ESCAPE_PARMSW   = _MCI_VD_ESCAPE_PARMSW;
  MCI_VD_ESCAPE_PARMSW   = _MCI_VD_ESCAPE_PARMSW;
@@ -2061,7 +2061,7 @@ _MCI_VD_ESCAPE_PARMSW   = packed Record
  TMCI_VD_ESCAPE_PARMS   = MCI_VD_ESCAPE_PARMS;
  TMCI_VD_ESCAPE_PARMS   = MCI_VD_ESCAPE_PARMS;
 
 
  _MCI_WAVE_OPEN_PARMSA  = packed Record
  _MCI_WAVE_OPEN_PARMSA  = packed Record
-                                 dwCallback: DWORD;
+                                 dwCallback: DWORD_PTR;
                                  wDeviceID: MCIDEVICEID;
                                  wDeviceID: MCIDEVICEID;
                                  lpstrDeviceType: LPCSTR;
                                  lpstrDeviceType: LPCSTR;
                                  lpstrElementName: LPCSTR;
                                  lpstrElementName: LPCSTR;
@@ -2074,7 +2074,7 @@ _MCI_VD_ESCAPE_PARMSW   = packed Record
  TMCI_WAVE_OPEN_PARMSA  = _MCI_WAVE_OPEN_PARMSA;
  TMCI_WAVE_OPEN_PARMSA  = _MCI_WAVE_OPEN_PARMSA;
 
 
  _MCI_WAVE_OPEN_PARMSW  = packed Record
  _MCI_WAVE_OPEN_PARMSW  = packed Record
-                                 dwCallback: DWORD;
+                                 dwCallback: DWORD_PTR;
                                  wDeviceID: MCIDEVICEID;
                                  wDeviceID: MCIDEVICEID;
                                  lpstrDeviceType: LPCWSTR;
                                  lpstrDeviceType: LPCWSTR;
                                  lpstrElementName: LPCWSTR;
                                  lpstrElementName: LPCWSTR;
@@ -2097,7 +2097,7 @@ _MCI_VD_ESCAPE_PARMSW   = packed Record
  TMCI_WAVE_OPEN_PARMS   = MCI_WAVE_OPEN_PARMS;
  TMCI_WAVE_OPEN_PARMS   = MCI_WAVE_OPEN_PARMS;
 
 
  _MCI_WAVE_DELETE_PARMS = packed Record
  _MCI_WAVE_DELETE_PARMS = packed Record
-                                  dwCallback: DWORD;
+                                  dwCallback: DWORD_PTR;
                                   dwFrom: DWORD;
                                   dwFrom: DWORD;
                                   dwTo: DWORD;
                                   dwTo: DWORD;
 				End;
 				End;
@@ -2107,7 +2107,7 @@ _MCI_VD_ESCAPE_PARMSW   = packed Record
  TMCI_WAVE_DELETE_PARMS = _MCI_WAVE_DELETE_PARMS;
  TMCI_WAVE_DELETE_PARMS = _MCI_WAVE_DELETE_PARMS;
 
 
  _MCI_WAVE_SET_PARMS = packed Record
  _MCI_WAVE_SET_PARMS = packed Record
-                               dwCallback: DWORD;
+                               dwCallback: DWORD_PTR;
                                dwTimeFormat: DWORD;
                                dwTimeFormat: DWORD;
                                dwAudio: DWORD;
                                dwAudio: DWORD;
                                wInput: UINT;
                                wInput: UINT;
@@ -2129,7 +2129,7 @@ _MCI_VD_ESCAPE_PARMSW   = packed Record
  TMCI_WAVE_SET_PARMS  = _MCI_WAVE_SET_PARMS;
  TMCI_WAVE_SET_PARMS  = _MCI_WAVE_SET_PARMS;
 
 
  _MCI_SEQ_SET_PARMS  = packed Record
  _MCI_SEQ_SET_PARMS  = packed Record
-                              dwCallback: DWORD;
+                              dwCallback: DWORD_PTR;
                               dwTimeFormat: DWORD;
                               dwTimeFormat: DWORD;
                               dwAudio: DWORD;
                               dwAudio: DWORD;
                               dwTempo: DWORD;
                               dwTempo: DWORD;
@@ -2144,7 +2144,7 @@ _MCI_VD_ESCAPE_PARMSW   = packed Record
  TMCI_SEQ_SET_PARMS  = _MCI_SEQ_SET_PARMS;
  TMCI_SEQ_SET_PARMS  = _MCI_SEQ_SET_PARMS;
 
 
  _MCI_ANIM_OPEN_PARMSA = packed Record
  _MCI_ANIM_OPEN_PARMSA = packed Record
-                                 dwCallback: DWORD;
+                                 dwCallback: DWORD_PTR;
                                  wDeviceID: MCIDEVICEID;
                                  wDeviceID: MCIDEVICEID;
                                  lpstrDeviceType: LPCSTR;
                                  lpstrDeviceType: LPCSTR;
                                  lpstrElementName: LPCSTR;
                                  lpstrElementName: LPCSTR;
@@ -2158,7 +2158,7 @@ _MCI_VD_ESCAPE_PARMSW   = packed Record
  TMCI_ANIM_OPEN_PARMSA  = _MCI_ANIM_OPEN_PARMSA;
  TMCI_ANIM_OPEN_PARMSA  = _MCI_ANIM_OPEN_PARMSA;
 
 
  _MCI_ANIM_OPEN_PARMSW = packed Record
  _MCI_ANIM_OPEN_PARMSW = packed Record
-                                 dwCallback: DWORD;
+                                 dwCallback: DWORD_PTR;
                                  wDeviceID: MCIDEVICEID;
                                  wDeviceID: MCIDEVICEID;
                                  lpstrDeviceType: LPCWSTR;
                                  lpstrDeviceType: LPCWSTR;
                                  lpstrElementName: LPCWSTR;
                                  lpstrElementName: LPCWSTR;
@@ -2181,7 +2181,7 @@ _MCI_VD_ESCAPE_PARMSW   = packed Record
  TMCI_ANIM_OPEN_PARMS = MCI_ANIM_OPEN_PARMS;
  TMCI_ANIM_OPEN_PARMS = MCI_ANIM_OPEN_PARMS;
 
 
  _MCI_ANIM_WINDOW_PARMSW = packed Record
  _MCI_ANIM_WINDOW_PARMSW = packed Record
-                                   dwCallback: DWORD;
+                                   dwCallback: DWORD_PTR;
                                    Wnd: HWND;
                                    Wnd: HWND;
                                    nCmdShow: UINT;
                                    nCmdShow: UINT;
                                    lpstrText: LPCWSTR;
                                    lpstrText: LPCWSTR;
@@ -2192,7 +2192,7 @@ _MCI_VD_ESCAPE_PARMSW   = packed Record
  TMCI_ANIM_WINDOW_PARMSW  = _MCI_ANIM_WINDOW_PARMSW;
  TMCI_ANIM_WINDOW_PARMSW  = _MCI_ANIM_WINDOW_PARMSW;
 
 
  _MCI_ANIM_STEP_PARMS = packed Record
  _MCI_ANIM_STEP_PARMS = packed Record
-                                dwCallback: DWORD;
+                                dwCallback: DWORD_PTR;
                                 dwFrames: DWORD;
                                 dwFrames: DWORD;
 				End;
 				End;
  MCI_ANIM_STEP_PARMS   = _MCI_ANIM_STEP_PARMS;
  MCI_ANIM_STEP_PARMS   = _MCI_ANIM_STEP_PARMS;
@@ -2201,7 +2201,7 @@ _MCI_VD_ESCAPE_PARMSW   = packed Record
  TMCI_ANIM_STEP_PARMS  = _MCI_ANIM_STEP_PARMS;
  TMCI_ANIM_STEP_PARMS  = _MCI_ANIM_STEP_PARMS;
 
 
  _MCI_ANIM_WINDOW_PARMSA = packed Record
  _MCI_ANIM_WINDOW_PARMSA = packed Record
-                                   dwCallback: DWORD;
+                                   dwCallback: DWORD_PTR;
                                    Wnd: HWND;
                                    Wnd: HWND;
                                    nCmdShow: UINT;
                                    nCmdShow: UINT;
                                    lpstrText: LPCSTR;
                                    lpstrText: LPCSTR;
@@ -2211,7 +2211,7 @@ _MCI_VD_ESCAPE_PARMSW   = packed Record
  LPMCI_ANIM_WINDOW_PARMSA = ^_MCI_ANIM_WINDOW_PARMSA;
  LPMCI_ANIM_WINDOW_PARMSA = ^_MCI_ANIM_WINDOW_PARMSA;
  TMCI_ANIM_WINDOW_PARMSA  = _MCI_ANIM_WINDOW_PARMSA;
  TMCI_ANIM_WINDOW_PARMSA  = _MCI_ANIM_WINDOW_PARMSA;
 _MCI_ANIM_PLAY_PARMS = packed Record
 _MCI_ANIM_PLAY_PARMS = packed Record
-                                dwCallback: DWORD;
+                                dwCallback: DWORD_PTR;
                                 dwFrom: DWORD;
                                 dwFrom: DWORD;
                                 dwTo: DWORD;
                                 dwTo: DWORD;
                                 dwSpeed: DWORD;
                                 dwSpeed: DWORD;
@@ -2230,7 +2230,7 @@ _MCI_ANIM_PLAY_PARMS = packed Record
  {$endif}
  {$endif}
   TMCI_ANIM_WINDOW_PARMS  = MCI_Anim_Window_Parms;
   TMCI_ANIM_WINDOW_PARMS  = MCI_Anim_Window_Parms;
  _MCI_ANIM_RECT_PARMS  = packed Record
  _MCI_ANIM_RECT_PARMS  = packed Record
-                                dwCallback: DWORD;
+                                dwCallback: DWORD_PTR;
                                 rc: TRECT;
                                 rc: TRECT;
 			       End;
 			       End;
  MCI_ANIM_RECT_PARMS   = _MCI_ANIM_RECT_PARMS;
  MCI_ANIM_RECT_PARMS   = _MCI_ANIM_RECT_PARMS;
@@ -2239,7 +2239,7 @@ _MCI_ANIM_PLAY_PARMS = packed Record
  TMCI_ANIM_RECT_PARMS  = _MCI_ANIM_RECT_PARMS;
  TMCI_ANIM_RECT_PARMS  = _MCI_ANIM_RECT_PARMS;
 
 
  _MCI_ANIM_UPDATE_PARMS = packed Record
  _MCI_ANIM_UPDATE_PARMS = packed Record
-                                  dwCallback: DWORD;
+                                  dwCallback: DWORD_PTR;
                                   rc: TRECT;
                                   rc: TRECT;
                                   hDC: HDC;
                                   hDC: HDC;
 				End;
 				End;
@@ -2249,7 +2249,7 @@ _MCI_ANIM_PLAY_PARMS = packed Record
  TMCI_ANIM_UPDATE_PARMS  = _MCI_ANIM_UPDATE_PARMS;
  TMCI_ANIM_UPDATE_PARMS  = _MCI_ANIM_UPDATE_PARMS;
 
 
  _MCI_OVLY_OPEN_PARMSA = packed Record
  _MCI_OVLY_OPEN_PARMSA = packed Record
-                                 dwCallback: DWORD;
+                                 dwCallback: DWORD_PTR;
                                  wDeviceID: MCIDEVICEID;
                                  wDeviceID: MCIDEVICEID;
                                  lpstrDeviceType: LPCSTR;
                                  lpstrDeviceType: LPCSTR;
                                  lpstrElementName: LPCSTR;
                                  lpstrElementName: LPCSTR;
@@ -2263,7 +2263,7 @@ _MCI_ANIM_PLAY_PARMS = packed Record
  TMCI_OVLY_OPEN_PARMSA  = _MCI_OVLY_OPEN_PARMSA;
  TMCI_OVLY_OPEN_PARMSA  = _MCI_OVLY_OPEN_PARMSA;
 
 
  _MCI_OVLY_OPEN_PARMSW = packed Record
  _MCI_OVLY_OPEN_PARMSW = packed Record
-                                 dwCallback: DWORD;
+                                 dwCallback: DWORD_PTR;
                                  wDeviceID: MCIDEVICEID;
                                  wDeviceID: MCIDEVICEID;
                                  lpstrDeviceType: LPCWSTR;
                                  lpstrDeviceType: LPCWSTR;
                                  lpstrElementName: LPCWSTR;
                                  lpstrElementName: LPCWSTR;
@@ -2288,7 +2288,7 @@ _MCI_ANIM_PLAY_PARMS = packed Record
  TMCI_OVLY_OPEN_PARMS   = MCI_OVLY_OPEN_PARMS;
  TMCI_OVLY_OPEN_PARMS   = MCI_OVLY_OPEN_PARMS;
 
 
 _MCI_OVLY_WINDOW_PARMSA = packed Record
 _MCI_OVLY_WINDOW_PARMSA = packed Record
-                                   dwCallback: DWORD;
+                                   dwCallback: DWORD_PTR;
                                    hWnd: HWND;
                                    hWnd: HWND;
                                    nCmdShow: UINT;
                                    nCmdShow: UINT;
                                    lpstrText: LPCSTR;
                                    lpstrText: LPCSTR;
@@ -2299,7 +2299,7 @@ _MCI_OVLY_WINDOW_PARMSA = packed Record
  TMCI_OVLY_WINDOW_PARMSA   = _MCI_OVLY_WINDOW_PARMSA;
  TMCI_OVLY_WINDOW_PARMSA   = _MCI_OVLY_WINDOW_PARMSA;
 
 
  _MCI_OVLY_WINDOW_PARMSW = packed Record
  _MCI_OVLY_WINDOW_PARMSW = packed Record
-                                   dwCallback: DWORD;
+                                   dwCallback: DWORD_PTR;
                                    hWnd: HWND;
                                    hWnd: HWND;
                                    nCmdShow: UINT;
                                    nCmdShow: UINT;
                                    lpstrText: LPCWSTR;
                                    lpstrText: LPCWSTR;
@@ -2321,7 +2321,7 @@ _MCI_OVLY_WINDOW_PARMSA = packed Record
  TMCI_OVLY_WINDOW_PARMS   = MCI_OVLY_WINDOW_PARMSW;
  TMCI_OVLY_WINDOW_PARMS   = MCI_OVLY_WINDOW_PARMSW;
 
 
  _MCI_OVLY_RECT_PARMS = packed Record
  _MCI_OVLY_RECT_PARMS = packed Record
-                                dwCallback: DWORD;
+                                dwCallback: DWORD_PTR;
                                 rc: TRECT;
                                 rc: TRECT;
 				End;
 				End;
  MCI_OVLY_RECT_PARMS   = _MCI_OVLY_RECT_PARMS;
  MCI_OVLY_RECT_PARMS   = _MCI_OVLY_RECT_PARMS;
@@ -2330,7 +2330,7 @@ _MCI_OVLY_WINDOW_PARMSA = packed Record
  TMCI_OVLY_RECT_PARMS  = _MCI_OVLY_RECT_PARMS;
  TMCI_OVLY_RECT_PARMS  = _MCI_OVLY_RECT_PARMS;
 
 
  _MCI_OVLY_SAVE_PARMSA = packed Record
  _MCI_OVLY_SAVE_PARMSA = packed Record
-                                 dwCallback: DWORD;
+                                 dwCallback: DWORD_PTR;
                                  lpfilename: LPCSTR;
                                  lpfilename: LPCSTR;
                                  rc: TRECT;
                                  rc: TRECT;
 				End;
 				End;
@@ -2340,7 +2340,7 @@ _MCI_OVLY_WINDOW_PARMSA = packed Record
  TMCI_OVLY_SAVE_PARMSA  = _MCI_OVLY_SAVE_PARMSA;
  TMCI_OVLY_SAVE_PARMSA  = _MCI_OVLY_SAVE_PARMSA;
 
 
  _MCI_OVLY_SAVE_PARMSW = packed Record
  _MCI_OVLY_SAVE_PARMSW = packed Record
-                                 dwCallback: DWORD;
+                                 dwCallback: DWORD_PTR;
                                  lpfilename: LPCWSTR;
                                  lpfilename: LPCWSTR;
                                  rc: TRECT;
                                  rc: TRECT;
 				End;
 				End;
@@ -2361,7 +2361,7 @@ _MCI_OVLY_WINDOW_PARMSA = packed Record
  TMCI_OVLY_SAVE_PARMS = MCI_OVLY_SAVE_PARMS;
  TMCI_OVLY_SAVE_PARMS = MCI_OVLY_SAVE_PARMS;
 
 
  _MCI_OVLY_LOAD_PARMSA = packed Record
  _MCI_OVLY_LOAD_PARMSA = packed Record
-                                 dwCallback: DWORD;
+                                 dwCallback: DWORD_PTR;
                                  lpfilename: LPCSTR;
                                  lpfilename: LPCSTR;
                                  rc: TRECT;
                                  rc: TRECT;
 				End;
 				End;
@@ -2370,7 +2370,7 @@ _MCI_OVLY_WINDOW_PARMSA = packed Record
  LPMCI_OVLY_LOAD_PARMSA = ^_MCI_OVLY_LOAD_PARMSA;
  LPMCI_OVLY_LOAD_PARMSA = ^_MCI_OVLY_LOAD_PARMSA;
  TMCI_OVLY_LOAD_PARMSA  = _MCI_OVLY_LOAD_PARMSA;
  TMCI_OVLY_LOAD_PARMSA  = _MCI_OVLY_LOAD_PARMSA;
  _MCI_OVLY_LOAD_PARMSW = packed Record
  _MCI_OVLY_LOAD_PARMSW = packed Record
-                                 dwCallback: DWORD;
+                                 dwCallback: DWORD_PTR;
                                  lpfilename: LPCWSTR;
                                  lpfilename: LPCWSTR;
                                  rc: TRECT;
                                  rc: TRECT;
 				End;
 				End;

+ 2 - 2
rtl/objpas/classes/classesh.inc

@@ -934,7 +934,7 @@ type
   TResourceStream = class(TCustomMemoryStream)
   TResourceStream = class(TCustomMemoryStream)
   private
   private
     Res: TFPResourceHandle;
     Res: TFPResourceHandle;
-    Handle: THandle;
+    Handle: TFPResourceHGLOBAL;
     procedure Initialize(Instance: THandle; Name, ResType: PWideChar; NameIsID: Boolean);
     procedure Initialize(Instance: THandle; Name, ResType: PWideChar; NameIsID: Boolean);
   public
   public
     constructor Create(Instance: THandle; const ResName: WideString; ResType: PWideChar);
     constructor Create(Instance: THandle; const ResName: WideString; ResType: PWideChar);
@@ -945,7 +945,7 @@ type
   TResourceStream = class(TCustomMemoryStream)
   TResourceStream = class(TCustomMemoryStream)
   private
   private
     Res: TFPResourceHandle;
     Res: TFPResourceHandle;
-    Handle: THandle;
+    Handle: TFPResourceHGLOBAL;
     procedure Initialize(Instance: THandle; Name, ResType: PChar; NameIsID: Boolean);
     procedure Initialize(Instance: THandle; Name, ResType: PChar; NameIsID: Boolean);
   public
   public
     constructor Create(Instance: THandle; const ResName: string; ResType: PChar);
     constructor Create(Instance: THandle; const ResName: string; ResType: PChar);

+ 7 - 0
rtl/objpas/dateutil.inc

@@ -111,6 +111,7 @@ Function Yesterday: TDateTime;
 Function Tomorrow: TDateTime;
 Function Tomorrow: TDateTime;
 Function IsToday(const AValue: TDateTime): Boolean;
 Function IsToday(const AValue: TDateTime): Boolean;
 Function IsSameDay(const AValue, ABasis: TDateTime): Boolean;
 Function IsSameDay(const AValue, ABasis: TDateTime): Boolean;
+function IsSameMonth(const Avalue, ABasis: TDateTime): Boolean;
 Function PreviousDayOfWeek (DayOfWeek : Word) : Word;
 Function PreviousDayOfWeek (DayOfWeek : Word) : Word;
 
 
 { ---------------------------------------------------------------------
 { ---------------------------------------------------------------------
@@ -618,6 +619,12 @@ begin
   Result:=(D>=0) and (D<1);
   Result:=(D>=0) and (D<1);
 end;
 end;
 
 
+function IsSameMonth(const Avalue, ABasis: TDateTime): Boolean;
+begin
+     result:=( YearOf(Avalue) = YearOf(Abasis) );
+     result:=result and ( MonthOf(AValue) = MonthOf(ABasis) );
+end;
+
 const
 const
   DOWMap: array [1..7] of Word = (7, 1, 2, 3, 4, 5, 6);
   DOWMap: array [1..7] of Word = (7, 1, 2, 3, 4, 5, 6);
 
 

+ 28 - 14
rtl/objpas/strutils.pp

@@ -28,10 +28,10 @@ uses
 
 
 Function AnsiResemblesText(const AText, AOther: string): Boolean;
 Function AnsiResemblesText(const AText, AOther: string): Boolean;
 Function AnsiContainsText(const AText, ASubText: string): Boolean;
 Function AnsiContainsText(const AText, ASubText: string): Boolean;
-Function AnsiStartsText(const ASubText, AText: string): Boolean;inline;
-Function AnsiEndsText(const ASubText, AText: string): Boolean;inline;
+Function AnsiStartsText(const ASubText, AText: string): Boolean;
+Function AnsiEndsText(const ASubText, AText: string): Boolean;
 Function AnsiReplaceText(const AText, AFromText, AToText: string): string;inline;
 Function AnsiReplaceText(const AText, AFromText, AToText: string): string;inline;
-Function AnsiMatchText(const AText: string; const AValues: array of string): Boolean;
+Function AnsiMatchText(const AText: string; const AValues: array of string): Boolean;inline;
 Function AnsiIndexText(const AText: string; const AValues: array of string): Integer;
 Function AnsiIndexText(const AText: string; const AValues: array of string): Integer;
 
 
 { ---------------------------------------------------------------------
 { ---------------------------------------------------------------------
@@ -39,10 +39,10 @@ Function AnsiIndexText(const AText: string; const AValues: array of string): Int
   ---------------------------------------------------------------------}
   ---------------------------------------------------------------------}
 
 
 Function AnsiContainsStr(const AText, ASubText: string): Boolean;inline;
 Function AnsiContainsStr(const AText, ASubText: string): Boolean;inline;
-Function AnsiStartsStr(const ASubText, AText: string): Boolean;inline;
-Function AnsiEndsStr(const ASubText, AText: string): Boolean;inline;
+Function AnsiStartsStr(const ASubText, AText: string): Boolean;
+Function AnsiEndsStr(const ASubText, AText: string): Boolean;
 Function AnsiReplaceStr(const AText, AFromText, AToText: string): string;inline;
 Function AnsiReplaceStr(const AText, AFromText, AToText: string): string;inline;
-Function AnsiMatchStr(const AText: string; const AValues: array of string): Boolean;
+Function AnsiMatchStr(const AText: string; const AValues: array of string): Boolean;inline;
 Function AnsiIndexStr(const AText: string; const AValues: array of string): Integer;
 Function AnsiIndexStr(const AText: string; const AValues: array of string): Integer;
 
 
 { ---------------------------------------------------------------------
 { ---------------------------------------------------------------------
@@ -241,15 +241,22 @@ begin
 end;
 end;
 
 
 
 
-Function AnsiStartsText(const ASubText, AText: string): Boolean;inline;
+Function AnsiStartsText(const ASubText, AText: string): Boolean;
 begin
 begin
-  Result:=AnsiCompareText(Copy(AText,1,Length(AsubText)),ASubText)=0;
+  if (Length(AText) >= Length(ASubText)) and (ASubText <> '') then
+    Result := AnsiStrLIComp(PChar(ASubText), PChar(AText), Length(ASubText)) = 0
+  else
+    Result := False;
 end;
 end;
 
 
 
 
-Function AnsiEndsText(const ASubText, AText: string): Boolean;inline;
+Function AnsiEndsText(const ASubText, AText: string): Boolean;
 begin
 begin
- result:=AnsiCompareText(Copy(AText,Length(AText)-Length(ASubText)+1,Length(ASubText)),asubtext)=0;
+  if Length(AText) >= Length(ASubText) then
+    Result := AnsiStrLIComp(PChar(ASubText),
+      PChar(AText) + Length(AText) - Length(ASubText), Length(ASubText)) = 0
+  else
+    Result := False;
 end;
 end;
 
 
 
 
@@ -289,15 +296,22 @@ begin
 end;
 end;
 
 
 
 
-Function AnsiStartsStr(const ASubText, AText: string): Boolean;inline;
+Function AnsiStartsStr(const ASubText, AText: string): Boolean;
 begin
 begin
-  Result := AnsiPos(ASubText,AText)=1;
+  if (Length(AText) >= Length(ASubText)) and (ASubText <> '') then
+    Result := AnsiStrLComp(PChar(ASubText), PChar(AText), Length(ASubText)) = 0
+  else
+    Result := False;
 end;
 end;
 
 
 
 
-Function AnsiEndsStr(const ASubText, AText: string): Boolean;inline;
+Function AnsiEndsStr(const ASubText, AText: string): Boolean;
 begin
 begin
- Result := AnsiCompareStr(Copy(AText,length(AText)-length(ASubText)+1,length(ASubText)),ASubText)=0;
+  if Length(AText) >= Length(ASubText) then
+    Result := AnsiStrLComp(PChar(ASubText),
+      PChar(AText) + Length(AText) - Length(ASubText), Length(ASubText)) = 0
+  else
+    Result := False;
 end;
 end;
 
 
 
 

+ 1 - 1
rtl/win/sysutils.pp

@@ -446,7 +446,7 @@ end;
 
 
 Function FileGetAttr (Const FileName : String) : Longint;
 Function FileGetAttr (Const FileName : String) : Longint;
 begin
 begin
-  Result:=GetFileAttributes(PChar(FileName));
+  Result:=Longint(GetFileAttributes(PChar(FileName)));
 end;
 end;
 
 
 
 

+ 0 - 2
rtl/win/wininc/redef.inc

@@ -69,8 +69,6 @@ type
   end;
   end;
   PMaxLogPalette = ^TMaxLogPalette;
   PMaxLogPalette = ^TMaxLogPalette;
 
 
-  POSVersionInfoA = POSVERSIONINFO;
-
   TBitmapFileHeader = BITMAPFILEHEADER;
   TBitmapFileHeader = BITMAPFILEHEADER;
   PBitmapFileHeader = ^TBitmapFileHeader;
   PBitmapFileHeader = ^TBitmapFileHeader;
 
 

+ 233 - 77
rtl/win/wininc/struct.inc

@@ -339,10 +339,10 @@ Const
      PBITMAPINFO = ^BITMAPINFO;
      PBITMAPINFO = ^BITMAPINFO;
      TBITMAPINFO = BITMAPINFO;
      TBITMAPINFO = BITMAPINFO;
 
 
-     FXPT2DOT30 = longint;
+     FXPT2DOT30   = longint;
      LPFXPT2DOT30 = ^FXPT2DOT30;
      LPFXPT2DOT30 = ^FXPT2DOT30;
-     TPFXPT2DOT30 = FXPT2DOT30;
-     PPFXPT2DOT30 = ^FXPT2DOT30;
+     TFXPT2DOT30  = FXPT2DOT30;
+     PFXPT2DOT30  = LPFXPT2DOT30;
 
 
      CIEXYZ = record
      CIEXYZ = record
           ciexyzX : FXPT2DOT30;
           ciexyzX : FXPT2DOT30;
@@ -397,7 +397,8 @@ Const
        bfReserved2 : Word;
        bfReserved2 : Word;
        bfOffBits : DWord;
        bfOffBits : DWord;
      end;
      end;
-
+     tagBITMAPFILEHEADER = BITMAPFILEHEADER;
+  
      BLOB = record
      BLOB = record
           cbSize : ULONG;
           cbSize : ULONG;
           pBlobData : ^BYTE;
           pBlobData : ^BYTE;
@@ -639,7 +640,7 @@ Const
      LPCHOOSECOLOR = ^TCHOOSECOLOR;
      LPCHOOSECOLOR = ^TCHOOSECOLOR;
      PCHOOSECOLOR = ^TCHOOSECOLOR;
      PCHOOSECOLOR = ^TCHOOSECOLOR;
 
 
-     LOGFONT = record
+     LOGFONTA = record
           lfHeight : LONG;
           lfHeight : LONG;
           lfWidth : LONG;
           lfWidth : LONG;
           lfEscapement : LONG;
           lfEscapement : LONG;
@@ -655,11 +656,10 @@ Const
           lfPitchAndFamily : BYTE;
           lfPitchAndFamily : BYTE;
           lfFaceName : array[0..(LF_FACESIZE)-1] of TCHAR;
           lfFaceName : array[0..(LF_FACESIZE)-1] of TCHAR;
        end;
        end;
-     LPLOGFONT = ^LOGFONT;
-     TLOGFONT = LOGFONT;
-     TLOGFONTA = LOGFONT;
-     PLOGFONT = ^LOGFONT;
-     PLOGFONTA = PLOGFONT;
+     LPLOGFONTA = ^LOGFONTA;
+     _LOGFONTA  = LOGFONTA;
+     TLOGFONTA  = LOGFONTA;
+     PLOGFONTA  = LPLOGFONTA;
 
 
      LOGFONTW = record
      LOGFONTW = record
        lfHeight: LONG;
        lfHeight: LONG;
@@ -679,8 +679,23 @@ Const
      end;
      end;
      LPLOGFONTW = ^LOGFONTW;
      LPLOGFONTW = ^LOGFONTW;
      NPLOGFONTW = ^LOGFONTW;
      NPLOGFONTW = ^LOGFONTW;
-     TLogFontW = LOGFONTW;
-     PLogFontW = ^TLogFontW;
+     _LOGFONTW  = LOGFONTW;
+     TLogFontW  = LOGFONTW;
+     PLogFontW  = ^TLOGFONTW;
+
+   {$IFNDEF UNICODE}
+     LOGFONT    = LOGFONTA;
+     LPLOGFONT  = ^LOGFONTA;
+     _LOGFONT   = LOGFONTA;
+     TLOGFONT   = LOGFONTA;
+     PLOGFONT   = ^LOGFONTA;
+   {$ELSE}
+     LOGFONT    = LOGFONTW;
+     LPLOGFONT  = ^LOGFONTW;
+     _LOGFONT   = LOGFONTW;
+     TLOGFONT   = LOGFONTW;
+     PLOGFONT   = ^LOGFONTW;
+    {$ENDIF}
 
 
      {CHOOSEFONT = record conflicts with ChosseFont function }
      {CHOOSEFONT = record conflicts with ChosseFont function }
      TCHOOSEFONT = record
      TCHOOSEFONT = record
@@ -1572,21 +1587,6 @@ Const
      _CREATE_THREAD_DEBUG_INFO = CREATE_THREAD_DEBUG_INFO;
      _CREATE_THREAD_DEBUG_INFO = CREATE_THREAD_DEBUG_INFO;
      TCREATETHREADDEBUGINFO = CREATE_THREAD_DEBUG_INFO;
      TCREATETHREADDEBUGINFO = CREATE_THREAD_DEBUG_INFO;
      PCREATETHREADDEBUGINFO = ^CREATE_THREAD_DEBUG_INFO;
      PCREATETHREADDEBUGINFO = ^CREATE_THREAD_DEBUG_INFO;
-  (*
-   TODO: sockets
-  typedef struct _SOCKET_ADDRESS {
-    LPSOCKADDR lpSockaddr ;
-    INT iSockaddrLength ;
-  } SOCKET_ADDRESS,  PSOCKET_ADDRESS,  LPSOCKET_ADDRESS;
-   }
-  {
-  typedef struct _CSADDR_INFO {
-    SOCKET_ADDRESS  LocalAddr;
-    SOCKET_ADDRESS  RemoteAddr;
-    INT             iSocketType;
-    INT             iProtocol;
-  } CSADDR_INFO;
-    *)
 
 
      CURRENCYFMT = record
      CURRENCYFMT = record
           NumDigits : UINT;
           NumDigits : UINT;
@@ -2026,7 +2026,7 @@ Const
      TDEVBROADCASTVOLUME = DEV_BROADCAST_VOLUME;
      TDEVBROADCASTVOLUME = DEV_BROADCAST_VOLUME;
      PDEVBROADCASTVOLUME = ^DEV_BROADCAST_VOLUME;
      PDEVBROADCASTVOLUME = ^DEV_BROADCAST_VOLUME;
 
 
-     DEVMODE = record
+     DEVMODEA = record
           dmDeviceName : array[0..(CCHDEVICENAME)-1] of BCHAR;
           dmDeviceName : array[0..(CCHDEVICENAME)-1] of BCHAR;
           dmSpecVersion : WORD;
           dmSpecVersion : WORD;
           dmDriverVersion : WORD;
           dmDriverVersion : WORD;
@@ -2067,16 +2067,15 @@ Const
                );
                );
        end;
        end;
 
 
-     LPDEVMODE = ^DEVMODE;
-     _devicemode = DEVMODE;
-     devicemode = DEVMODE;
-     tdevicemode = DEVMODE;
-     tdevicemodeA = DEVMODE;
-     PDeviceModeA = LPDEVMODE;
-     PDeviceMode = LPDEVMODE;
-     TDEVMODE = DEVMODE;
-     PDEVMODE = LPDEVMODE;
+     LPDEVMODEA = ^DEVMODEA;
+     _DEVMODEA  = DEVMODEA;
+     TDEVMODEA  = DEVMODEA;
+     PDEVMODEA  = LPDEVMODEA;
 
 
+     _devicemodeA = DEVMODEA;
+     devicemodeA  = DEVMODEA;
+     tdevicemodeA = DEVMODEA;
+     PDeviceModeA = LPDEVMODEA;
 
 
      devmodeW   = record
      devmodeW   = record
                      dmDeviceName   : array[0.. CCHDEVICENAME-1] of WCHAR;
                      dmDeviceName   : array[0.. CCHDEVICENAME-1] of WCHAR;
@@ -2116,14 +2115,35 @@ Const
                    end;
                    end;
 
 
      LPDEVMODEW   = ^DEVMODEW;
      LPDEVMODEW   = ^DEVMODEW;
+     _DEVMODEW    = DEVMODEW;
+     TDEVMODEW    = DEVMODEW;
+     PDEVMODEW    = LPDEVMODEW;
+
      _devicemodeW = DEVMODEW;
      _devicemodeW = DEVMODEW;
      devicemodeW  = DEVMODEW;
      devicemodeW  = DEVMODEW;
      TDeviceModeW = DEVMODEW;
      TDeviceModeW = DEVMODEW;
      PDeviceModeW = LPDEVMODEW;
      PDeviceModeW = LPDEVMODEW;
-     TDEVMODEW    = DEVMODEW;
 
 
-     PDEVMODEW    = LPDEVMODEW;
 
 
+    {$IFNDEF UNICODE}
+      DEVMODE      = DEVMODEA;
+      LPDEVMODE    = ^DEVMODEA;
+      _DEVMODE     = DEVMODEA;
+      TDEVMODE     = DEVMODEA;
+      PDEVMODE     = ^DEVMODEA;
+    {$ELSE}
+      DEVMODE      = DEVMODEW;
+      LPDEVMODE    = ^DEVMODEW;
+      _DEVMODE     = DEVMODEW;
+      TDEVMODE     = DEVMODEW;
+      PDEVMODE     = ^DEVMODEW;
+    {$ENDIF}
+  
+    _devicemode  = DEVMODE;
+    DeviceMode   = DEVMODE;
+    TDeviceMode  = DEVMODE;
+    PDeviceMode  = ^DEVMODE;
+  
      DEVNAMES = record
      DEVNAMES = record
           wDriverOffset : WORD;
           wDriverOffset : WORD;
           wDeviceOffset : WORD;
           wDeviceOffset : WORD;
@@ -2685,7 +2705,7 @@ Const
      TPANOSE = PANOSE;
      TPANOSE = PANOSE;
      PPANOSE = ^PANOSE;
      PPANOSE = ^PANOSE;
 
 
-     EXTLOGFONT = record
+     EXTLOGFONTA = record
           elfLogFont : LOGFONT;
           elfLogFont : LOGFONT;
           elfFullName : array[0..(LF_FULLFACESIZE)-1] of BCHAR;
           elfFullName : array[0..(LF_FULLFACESIZE)-1] of BCHAR;
           elfStyle : array[0..(LF_FACESIZE)-1] of BCHAR;
           elfStyle : array[0..(LF_FACESIZE)-1] of BCHAR;
@@ -2697,9 +2717,42 @@ Const
           elfCulture : DWORD;
           elfCulture : DWORD;
           elfPanose : PANOSE;
           elfPanose : PANOSE;
        end;
        end;
-     tagEXTLOGFONT = EXTLOGFONT;
-     TEXTLOGFONT = EXTLOGFONT;
-     PEXTLOGFONT = ^EXTLOGFONT;
+     LPEXTLOGFONTA  = ^EXTLOGFONTA;
+     tagEXTLOGFONTA = EXTLOGFONTA;
+     TEXTLOGFONTA   = EXTLOGFONTA;
+     PEXTLOGFONTA   = LPEXTLOGFONTA;
+
+ 
+     EXTLOGFONTW    = record
+       elfLogFont   :LOGFONTW;
+       elfFullName  :array[0..(LF_FULLFACESIZE) - 1] of WCHAR;
+       elfStyle     :array[0..(LF_FACESIZE) - 1] of WCHAR;
+       elfVersion   :DWORD;
+       elfStyleSize :DWORD;
+       elfMatch     :DWORD;
+       elfReserved  :DWORD;
+       elfVendorId  :array[0..(ELF_VENDOR_SIZE) - 1] of Byte;
+       elfCulture   :DWORD;
+       elfPanose    :PANOSE;
+      end;
+     LPEXTLOGFONTW  = ^EXTLOGFONTW;
+     tagEXTLOGFONTW = EXTLOGFONTW;
+     TEXTLOGFONTW   = EXTLOGFONTW;
+     PEXTLOGFONTW   = ^EXTLOGFONTW;
+  
+    {$IFNDEF UNICODE}
+      EXTLOGFONT     = EXTLOGFONTA;
+      LPEXTLOGFONT   = ^EXTLOGFONTA;
+      tagEXTLOGFONT  = EXTLOGFONTA;
+      TEXTLOGFONT    = EXTLOGFONTA;
+      PEXTLOGFONT    = ^EXTLOGFONTA;
+    {$ELSE}
+      EXTLOGFONT     = EXTLOGFONTW;
+      LPEXTLOGFONT   = ^EXTLOGFONTW;
+      tagEXTLOGFONT  = EXTLOGFONTW;
+      TEXTLOGFONT    = EXTLOGFONTW;
+      PEXTLOGFONT    = ^EXTLOGFONTW;
+    {$ENDIF}
 
 
      EMREXTCREATEFONTINDIRECTW = record
      EMREXTCREATEFONTINDIRECTW = record
           emr : EMR;
           emr : EMR;
@@ -2710,7 +2763,6 @@ Const
      TEMREXTCREATEFONTINDIRECTW = EMREXTCREATEFONTINDIRECTW;
      TEMREXTCREATEFONTINDIRECTW = EMREXTCREATEFONTINDIRECTW;
      PEMREXTCREATEFONTINDIRECTW = ^EMREXTCREATEFONTINDIRECTW;
      PEMREXTCREATEFONTINDIRECTW = ^EMREXTCREATEFONTINDIRECTW;
 
 
-
      EXTLOGPEN = record
      EXTLOGPEN = record
           elpPenStyle : UINT;
           elpPenStyle : UINT;
           elpWidth : UINT;
           elpWidth : UINT;
@@ -4763,7 +4815,7 @@ Const
      TNEWCPLINFO = NEWCPLINFO;
      TNEWCPLINFO = NEWCPLINFO;
      PNEWCPLINFO = ^NEWCPLINFO;
      PNEWCPLINFO = ^NEWCPLINFO;
 
 
-     NEWTEXTMETRIC = record
+     NEWTEXTMETRICA = record
           tmHeight : LONG;
           tmHeight : LONG;
           tmAscent : LONG;
           tmAscent : LONG;
           tmDescent : LONG;
           tmDescent : LONG;
@@ -4789,18 +4841,94 @@ Const
           ntmCellHeight : UINT;
           ntmCellHeight : UINT;
           ntmAvgWidth : UINT;
           ntmAvgWidth : UINT;
        end;
        end;
-     tagNEWTEXTMETRIC = NEWTEXTMETRIC;
-     TNEWTEXTMETRIC = NEWTEXTMETRIC;
-     PNEWTEXTMETRIC = ^NEWTEXTMETRIC;
-
-     NEWTEXTMETRICEX = record
-          ntmentm : NEWTEXTMETRIC;
+     LPNEWTEXTMETRICA  = ^NEWTEXTMETRICA;
+     tagNEWTEXTMETRICA = NEWTEXTMETRICA;
+     _NEWTEXTMETRICA   = NEWTEXTMETRICA;
+     TNEWTEXTMETRICA   = NEWTEXTMETRICA;
+     PNEWTEXTMETRICA   = ^NEWTEXTMETRICA;
+   
+     NEWTEXTMETRICW    = record
+       tmHeight           :LONG;
+       tmAscent           :LONG;
+       tmDescent          :LONG;
+       tmInternalLeading  :LONG;
+       tmExternalLeading  :LONG;
+       tmAveCharWidth     :LONG;
+       tmMaxCharWidth     :LONG;
+       tmWeight           :LONG;
+       tmOverhang         :LONG;
+       tmDigitizedAspectX :LONG;
+       tmDigitizedAspectY :LONG;
+       tmFirstChar        :WCHAR;
+       tmLastChar         :WCHAR;
+       tmDefaultChar      :WCHAR;
+       tmBreakChar        :WCHAR;
+       tmItalic           :Byte;
+       tmUnderlined       :Byte;
+       tmStruckOut        :Byte;
+       tmPitchAndFamily   :Byte;
+       tmCharSet          :Byte;
+       ntmFlags           :DWORD;
+       ntmSizeEM          :UINT;
+       ntmCellHeight      :UINT;
+       ntmAvgWidth        :UINT;
+     end;
+     LPNEWTEXTMETRICW  = ^NEWTEXTMETRICW;
+     tagNEWTEXTMETRICW = NEWTEXTMETRICW;
+     _NEWTEXTMETRICW   = NEWTEXTMETRICW;
+     TNEWTEXTMETRICW   = NEWTEXTMETRICW;
+     PNEWTEXTMETRICW   = ^NEWTEXTMETRICW;
+   
+    {$IFNDEF UNICODE}
+     LPNEWTEXTMETRIC   = ^NEWTEXTMETRICA;
+     _NEWTEXTMETRIC    = NEWTEXTMETRICA;
+     tagNEWTEXTMETRIC  = NEWTEXTMETRICA;
+     TNEWTEXTMETRIC    = NEWTEXTMETRICA;
+     PNEWTEXTMETRIC    = ^NEWTEXTMETRICA;
+     NEWTEXTMETRIC     = NEWTEXTMETRICA;
+    {$ELSE}
+     LPNEWTEXTMETRIC   = ^NEWTEXTMETRICW;
+     _NEWTEXTMETRIC    = NEWTEXTMETRICW;
+     tagNEWTEXTMETRIC  = NEWTEXTMETRICW;
+     TNEWTEXTMETRIC    = NEWTEXTMETRICW;
+     PNEWTEXTMETRIC    = ^NEWTEXTMETRICW;
+     NEWTEXTMETRIC     = NEWTEXTMETRICW;
+    {$ENDIF}
+
+     NEWTEXTMETRICEXA = record
+          ntmentm : NEWTEXTMETRICA;
           ntmeFontSignature : FONTSIGNATURE;
           ntmeFontSignature : FONTSIGNATURE;
        end;
        end;
-     tagNEWTEXTMETRICEX = NEWTEXTMETRICEX;
-     TNEWTEXTMETRICEX = NEWTEXTMETRICEX;
-     PNEWTEXTMETRICEX = ^NEWTEXTMETRICEX;
-
+     LPNEWTEXTMETRICEXA  = ^NEWTEXTMETRICEXA;
+     tagNEWTEXTMETRICEXA = NEWTEXTMETRICEXA;
+     TNEWTEXTMETRICEXA   = NEWTEXTMETRICEXA;
+     PNEWTEXTMETRICEXA   = ^NEWTEXTMETRICEXA;
+   
+     NEWTEXTMETRICEXW    = record
+       ntmentm           :NEWTEXTMETRICW;
+       ntmeFontSignature :FONTSIGNATURE;
+    end;
+     LPNEWTEXTMETRICEXW  = ^NEWTEXTMETRICEXW;
+     tagNEWTEXTMETRICEXW = NEWTEXTMETRICEXW;
+     TNEWTEXTMETRICEXW   = NEWTEXTMETRICEXW;
+     PNEWTEXTMETRICEXW   = ^NEWTEXTMETRICEXW;
+   
+    {$IFNDEF UNICODE}
+     LPNEWTEXTMETRICEX   = ^NEWTEXTMETRICEXA;
+     _NEWTEXTMETRICEX    = NEWTEXTMETRICEXA;
+     tagNEWTEXTMETRICEX  = NEWTEXTMETRICEXA;
+     TNEWTEXTMETRICEX    = NEWTEXTMETRICEXA;
+     PNEWTEXTMETRICEX    = ^NEWTEXTMETRICEXA;
+     NEWTEXTMETRICEX     = NEWTEXTMETRICEXA;
+    {$ELSE}
+     LPNEWTEXTMETRICEX   = ^NEWTEXTMETRICEXW;
+     _NEWTEXTMETRICEX    = NEWTEXTMETRICEXW;
+     tagNEWTEXTMETRICEX  = NEWTEXTMETRICEXW;
+     TNEWTEXTMETRICEX    = NEWTEXTMETRICEXW;
+     PNEWTEXTMETRICEX    = ^NEWTEXTMETRICEXW;
+     NEWTEXTMETRICEX     = NEWTEXTMETRICEXW;
+    {$ENDIF}
+   
      NM_LISTVIEW = record
      NM_LISTVIEW = record
           hdr : NMHDR;
           hdr : NMHDR;
           iItem : longint;
           iItem : longint;
@@ -5025,7 +5153,7 @@ Const
      TOFNOTIFY = OFNOTIFY;
      TOFNOTIFY = OFNOTIFY;
      POFNOTIFY = ^OFNOTIFY;
      POFNOTIFY = ^OFNOTIFY;
 
 
-     OSVERSIONINFO = record
+     OSVERSIONINFOA = record
           dwOSVersionInfoSize : DWORD;
           dwOSVersionInfoSize : DWORD;
           dwMajorVersion : DWORD;
           dwMajorVersion : DWORD;
           dwMinorVersion : DWORD;
           dwMinorVersion : DWORD;
@@ -5033,10 +5161,10 @@ Const
           dwPlatformId : DWORD;
           dwPlatformId : DWORD;
           szCSDVersion : array[0..127] of TCHAR;
           szCSDVersion : array[0..127] of TCHAR;
        end;
        end;
-     LPOSVERSIONINFO = ^OSVERSIONINFO;
-     _OSVERSIONINFO = OSVERSIONINFO;
-     TOSVERSIONINFO = OSVERSIONINFO;
-     POSVERSIONINFO = ^OSVERSIONINFO;
+     LPOSVERSIONINFOA= ^OSVERSIONINFOA;
+     _OSVERSIONINFOA = OSVERSIONINFOA;
+     TOSVERSIONINFOA = OSVERSIONINFOA;
+     POSVERSIONINFOA = LPOSVERSIONINFOA;
 
 
      OSVERSIONINFOW = record
      OSVERSIONINFOW = record
        dwOSVersionInfoSize : DWORD;
        dwOSVersionInfoSize : DWORD;
@@ -5049,13 +5177,26 @@ Const
      LPOSVERSIONINFOW = ^OSVERSIONINFOW;
      LPOSVERSIONINFOW = ^OSVERSIONINFOW;
      _OSVERSIONINFOW = OSVERSIONINFOW;
      _OSVERSIONINFOW = OSVERSIONINFOW;
      TOSVERSIONINFOW = OSVERSIONINFOW;
      TOSVERSIONINFOW = OSVERSIONINFOW;
-     POSVERSIONINFOW = ^OSVERSIONINFOW;
-
+     POSVERSIONINFOW = LPOSVERSIONINFOW;
+
+     {$IFNDEF UNICODE}
+       LPOSVERSIONINFO  = ^OSVERSIONINFOA;
+       _OSVERSIONINFO   = OSVERSIONINFOA;
+       TOSVERSIONINFO   = OSVERSIONINFOA;
+       POSVERSIONINFO   = ^OSVERSIONINFOA;
+       OSVERSIONINFO    = OSVERSIONINFOA;
+     {$ELSE}
+       LPOSVERSIONINFO  = ^OSVERSIONINFOW;
+       _OSVERSIONINFO   = OSVERSIONINFOW;
+       TOSVERSIONINFO   = OSVERSIONINFOW;
+       POSVERSIONINFO   = ^OSVERSIONINFOW;
+       OSVERSIONINFO    = OSVERSIONINFOW;
+     {$ENDIF}
 
 
      {$push}
      {$push}
      {$packrecords 4}
      {$packrecords 4}
 
 
-     TEXTMETRIC = record
+     TEXTMETRICA = record
           tmHeight : LONG;
           tmHeight : LONG;
           tmAscent : LONG;
           tmAscent : LONG;
           tmDescent : LONG;
           tmDescent : LONG;
@@ -5077,15 +5218,11 @@ Const
           tmPitchAndFamily : BYTE;
           tmPitchAndFamily : BYTE;
           tmCharSet : BYTE;
           tmCharSet : BYTE;
        end;
        end;
-     LPTEXTMETRIC = ^TEXTMETRIC;
-     tagTEXTMETRIC = TEXTMETRIC;
-     TTEXTMETRIC = TEXTMETRIC;
-     PTEXTMETRIC = ^TEXTMETRIC;
-     TEXTMETRICA   = TEXTMETRIC;
-     LPTEXTMETRICA = ^TEXTMETRICA;
+     LPTEXTMETRICA  = ^TEXTMETRICA;
      tagTEXTMETRICA = TEXTMETRICA;
      tagTEXTMETRICA = TEXTMETRICA;
-     TTEXTMETRICA = TEXTMETRICA;
-     PTEXTMETRICA = ^TEXTMETRICA;
+     _TEXTMETRICA   = TEXTMETRICA;
+     TTEXTMETRICA   = TEXTMETRICA;
+     PTEXTMETRICA   = LPTEXTMETRICA;
 
 
      TEXTMETRICW = record
      TEXTMETRICW = record
           tmHeight : LONG;
           tmHeight : LONG;
@@ -5111,13 +5248,31 @@ Const
        end;
        end;
      LPTEXTMETRICW = ^TEXTMETRICW;
      LPTEXTMETRICW = ^TEXTMETRICW;
      tagTEXTMETRICW = TEXTMETRICW;
      tagTEXTMETRICW = TEXTMETRICW;
+     _TEXTMETRICW   = TEXTMETRICW;
      TTEXTMETRICW = TEXTMETRICW;
      TTEXTMETRICW = TEXTMETRICW;
      PTEXTMETRICW = ^TEXTMETRICW;
      PTEXTMETRICW = ^TEXTMETRICW;
+
+
+     {$IFNDEF UNICODE}
+       LPTEXTMETRIC       = ^TEXTMETRICA;
+       _TEXTMETRIC        = TEXTMETRICA;
+       tagTEXTMETRIC      = TEXTMETRICA;
+       TTEXTMETRIC        = TEXTMETRICA;
+       PTEXTMETRIC        = ^TEXTMETRICA;
+       TEXTMETRIC         = TEXTMETRICA;
+     {$ELSE}
+       LPTEXTMETRIC       = ^TEXTMETRICW;
+       _TEXTMETRIC        = TEXTMETRICW;
+       tagTEXTMETRIC      = TEXTMETRICW;
+       TTEXTMETRIC        = TEXTMETRICW;
+       PTEXTMETRIC        = ^TEXTMETRICW;
+       TEXTMETRIC         = TEXTMETRICW;
+     {$ENDIF}
      {$PACKRECORDS C}
      {$PACKRECORDS C}
 
 
      OUTLINETEXTMETRICA = record
      OUTLINETEXTMETRICA = record
           otmSize : UINT;
           otmSize : UINT;
-          otmTextMetrics : TEXTMETRIC;
+          otmTextMetrics : TEXTMETRICA;
           otmFiller : BYTE;
           otmFiller : BYTE;
           otmPanoseNumber : PANOSE;
           otmPanoseNumber : PANOSE;
           otmfsSelection : UINT;
           otmfsSelection : UINT;
@@ -5191,21 +5346,22 @@ Const
      LPOUTLINETEXTMETRICW = ^OUTLINETEXTMETRICW;
      LPOUTLINETEXTMETRICW = ^OUTLINETEXTMETRICW;
      _OUTLINETEXTMETRICW = OUTLINETEXTMETRICW;
      _OUTLINETEXTMETRICW = OUTLINETEXTMETRICW;
      TOUTLINETEXTMETRICW = OUTLINETEXTMETRICW;
      TOUTLINETEXTMETRICW = OUTLINETEXTMETRICW;
-     POUTLINETEXTMETRICW = ^OUTLINETEXTMETRICW;
+     POUTLINETEXTMETRICW = LPOUTLINETEXTMETRICW;
 
 
      {$ifdef Unicode}
      {$ifdef Unicode}
-     LPOUTLINETEXTMETRIC = ^OUTLINETEXTMETRICW;
+     LPOUTLINETEXTMETRIC = LPOUTLINETEXTMETRICW;
      _OUTLINETEXTMETRIC  = OUTLINETEXTMETRICW;
      _OUTLINETEXTMETRIC  = OUTLINETEXTMETRICW;
      TOUTLINETEXTMETRIC  = OUTLINETEXTMETRICW;
      TOUTLINETEXTMETRIC  = OUTLINETEXTMETRICW;
-     POUTLINETEXTMETRIC  = ^OUTLINETEXTMETRICW;
+     POUTLINETEXTMETRIC  = LPOUTLINETEXTMETRICW;
      OUTLINETEXTMETRIC   = OUTLINETEXTMETRICW;
      OUTLINETEXTMETRIC   = OUTLINETEXTMETRICW;
      {$else}
      {$else}
-     LPOUTLINETEXTMETRIC = ^OUTLINETEXTMETRICA;
+     LPOUTLINETEXTMETRIC = LPOUTLINETEXTMETRICA;
      _OUTLINETEXTMETRIC  = OUTLINETEXTMETRICA;
      _OUTLINETEXTMETRIC  = OUTLINETEXTMETRICA;
      TOUTLINETEXTMETRIC  = OUTLINETEXTMETRICA;
      TOUTLINETEXTMETRIC  = OUTLINETEXTMETRICA;
-     POUTLINETEXTMETRIC  = ^OUTLINETEXTMETRICA;
+     POUTLINETEXTMETRIC  = LPOUTLINETEXTMETRICA;
      OUTLINETEXTMETRIC   = OUTLINETEXTMETRICA;
      OUTLINETEXTMETRIC   = OUTLINETEXTMETRICA;
      {$endif}
      {$endif}
+
      {$POP}
      {$POP}
      OVERLAPPED = record
      OVERLAPPED = record
           Internal : ULONG_PTR;
           Internal : ULONG_PTR;

+ 62 - 0
tests/test/tstrutils1.pp

@@ -0,0 +1,62 @@
+program tstrutils1;
+
+// tests MBCS compatibility of strutils ansistartsstr and -endsstr.
+
+{$mode objfpc}
+{$h+}
+
+uses
+  {SysUtils, }cwstring,StrUtils;
+
+var
+  ResultCounter: Integer = 0;
+
+function TestValue(const Value: Boolean): Boolean;
+begin
+  Result := Value;
+  if not Value then
+    WriteLn('Failed: ', ResultCounter);
+  Inc(ResultCounter);
+end;
+
+function TestOK: Boolean;
+begin
+  TestOK :=
+    // AnsiStartsStr
+    not AnsiStartsStr('', '')
+    and not AnsiStartsStr('', 'ab')
+    and not AnsiStartsStr('ab', '')
+    and AnsiStartsStr('abc', 'abc')
+    and not AnsiStartsStr('abc', 'def')
+    and AnsiStartsStr('abc', 'abcedfg')
+    and not AnsiStartsStr('abc', 'ab')
+    and AnsiStartsStr('áéíç', 'áéíç')
+    and AnsiStartsStr('áé', 'áéíç')
+    and not AnsiStartsStr('áéíç', 'áé')
+    and not AnsiStartsStr('áéíç', 'áéio')
+    // AnsiEndsStr
+    and AnsiEndsStr('', '')
+    and AnsiEndsStr('', 'ab')
+    and not AnsiEndsStr('ab', '')
+    and AnsiEndsStr('abc', 'abc')
+    and not AnsiEndsStr('abc', 'def')
+    and AnsiEndsStr('dfg', 'abcedfg')
+    and not AnsiEndsStr('dfg', 'df')
+    and AnsiEndsStr('áéíç', 'áéíç')
+    and AnsiEndsStr('áé', 'íçáé')
+    and not AnsiEndsStr('áéíç', 'áé')
+    and not AnsiEndsStr('íçáé', 'ioáé');
+end;
+
+begin
+  if TestOK() then
+  begin
+    WriteLn('Test OK');
+    halt(0);
+  end
+  else
+    begin
+      WriteLn('Test Failure!');
+      halt(1);
+    end;
+end.

+ 63 - 0
tests/test/tstrutils2.pp

@@ -0,0 +1,63 @@
+program tstrutils2;
+
+// tests MBCS compatibility of strutils ansistartstext and -endstext. 
+// (case-insensitive)
+
+{$mode objfpc}
+{$h+}
+
+uses
+  StrUtils,cwstring;
+
+var
+  ResultCounter: Integer = 0;
+
+function TestValue(const Value: Boolean): Boolean;
+begin
+  Result := Value;
+  if not Value then
+    WriteLn('Failed: ', ResultCounter);
+  Inc(ResultCounter);
+end;
+
+function TestOK: Boolean;
+begin
+  TestOK :=
+    // AnsiStartsText
+    not AnsiStartsText('', '')
+    and not AnsiStartsText('', 'ab')
+    and not AnsiStartsText('ab', '')
+    and AnsiStartsText('abc', 'abc')
+    and not AnsiStartsText('abc', 'def')
+    and AnsiStartsText('abc', 'abcedfg')
+    and not AnsiStartsText('abc', 'ab')
+    and AnsiStartsText('áÉíç', 'áéíÇ')
+    and AnsiStartsText('áé', 'áÉíç')
+    and not AnsiStartsText('áÉíç', 'Áé')
+    and not AnsiStartsText('ÁÉíç', 'áéio')
+    // AnsiEndsText
+    and AnsiEndsText('', '')
+    and AnsiEndsText('', 'ab')
+    and not AnsiEndsText('ab', '')
+    and AnsiEndsText('abc', 'abc')
+    and not AnsiEndsText('abc', 'def')
+    and AnsiEndsText('dfg', 'abcedfg')
+    and not AnsiEndsText('dfg', 'df')
+    and AnsiEndsText('áÉíç', 'Áéíç')
+    and AnsiEndsText('áé', 'íçáÉ')
+    and not AnsiEndsText('áÉíç', 'áé')
+    and not AnsiEndsText('íçÁÉ', 'ioÁé');
+end;
+
+begin
+  if TestOK() then
+  begin
+    WriteLn('Test OK');
+    halt(0);
+  end
+  else
+    begin
+      WriteLn('Test Failure!');
+      halt(1);
+    end;
+end.

+ 3 - 1
utils/instantfpc/instantfpc.pas

@@ -25,7 +25,7 @@ uses
   Classes, SysUtils, InstantFPTools;
   Classes, SysUtils, InstantFPTools;
 
 
 const
 const
-  Version = '1.0';
+  Version = '1.1';
 
 
 
 
 Procedure Usage;
 Procedure Usage;
@@ -49,6 +49,8 @@ begin
   writeln('      If compilation was successful the program is executed.');
   writeln('      If compilation was successful the program is executed.');
   writeln('      If the compiler options contains -B the program is always');
   writeln('      If the compiler options contains -B the program is always');
   writeln('      compiled.');
   writeln('      compiled.');
+  writeln('      If the environment option INSTANTFPCOPTIONS is set it is');
+  writeln('      passed to the compiler as first parameters.');
   writeln;
   writeln;
   writeln('instantfpc --get-cache');
   writeln('instantfpc --get-cache');
   writeln('      Prints cache directory to stdout.');
   writeln('      Prints cache directory to stdout.');

+ 1 - 1
utils/instantfpc/instantfptools.pas

@@ -234,7 +234,7 @@ var
   p: String;
   p: String;
   i : integer;
   i : integer;
 begin
 begin
-  Result:='';
+  Result:=GetEnvironmentVariable('INSTANTFPCOPTIONS');
   I:=1;
   I:=1;
   While (I<=ParamCount) and (Copy(ParamStr(i),1,1)='-') do
   While (I<=ParamCount) and (Copy(ParamStr(i),1,1)='-') do
     begin
     begin