update for HEAD-2003091401
[reactos.git] / lib / gdi32 / misc / stubsa.c
index a325ebd..b7cf085 100644 (file)
 #undef WIN32_LEAN_AND_MEAN
 #include <windows.h>
 #include <ddk/ntddk.h>
+#include <win32k/text.h>
+#include <win32k/metafile.h>
+#include <win32k/dc.h>
+#include <rosrtl/devmode.h>
+#include <rosrtl/logfont.h>
+#include <internal/heap.h>
+
+/*
+ * @implemented
+ */
+int
+STDCALL
+AddFontResourceExA ( LPCSTR lpszFilename, DWORD fl, PVOID pvReserved )
+{
+  NTSTATUS Status;
+  PWSTR FilenameW;
+  int rc = 0;
+
+  Status = HEAP_strdupA2W ( &FilenameW, lpszFilename );
+  if ( !NT_SUCCESS (Status) )
+    SetLastError (RtlNtStatusToDosError(Status));
+  else
+    {
+      rc = AddFontResourceExW ( FilenameW, fl, pvReserved );
+
+      HEAP_free ( &FilenameW );
+    }
+  return rc;
+}
 
+/*
+ * @implemented
+ */
 int
 STDCALL
-AddFontResourceA(
-       LPCSTR          a0
-       )
+AddFontResourceA ( LPCSTR lpszFilename )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+  return AddFontResourceExA ( lpszFilename, 0, 0 );
 }
 
 
+/*
+ * @implemented
+ */
 HMETAFILE
 STDCALL
 CopyMetaFileA(
-       HMETAFILE       a0,
-       LPCSTR          a1
+       HMETAFILE       Src,
+       LPCSTR          lpszFile
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+  NTSTATUS Status;
+  PWSTR lpszFileW;
+  HMETAFILE rc = 0;
+
+  Status = HEAP_strdupA2W ( &lpszFileW, lpszFile );
+  if (!NT_SUCCESS (Status))
+    SetLastError (RtlNtStatusToDosError(Status));
+  else
+  {
+    rc = NtGdiCopyMetaFile ( Src, lpszFileW );
+
+    HEAP_free ( lpszFileW );
+  }
+
+  return rc;
 }
 
+
+/*
+ * @implemented
+ */
 HDC
 STDCALL
 CreateICA(
-       LPCSTR                  a0,
-       LPCSTR                  a1,
-       LPCSTR                  a2,
-       CONST DEVMODEA *        a3
-       )
-{
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-
+       LPCSTR                  lpszDriver,
+       LPCSTR                  lpszDevice,
+       LPCSTR                  lpszOutput,
+       CONST DEVMODEA *        lpdvmInit
+       )
+{
+  NTSTATUS Status;
+  LPWSTR lpszDriverW, lpszDeviceW, lpszOutputW;
+  DEVMODEW dvmInitW;
+  HDC rc = 0;
+
+  Status = HEAP_strdupA2W ( &lpszDriverW, lpszDriver );
+  if (!NT_SUCCESS (Status))
+    SetLastError (RtlNtStatusToDosError(Status));
+  else
+  {
+    Status = HEAP_strdupA2W ( &lpszDeviceW, lpszDevice );
+    if (!NT_SUCCESS (Status))
+      SetLastError (RtlNtStatusToDosError(Status));
+    else
+      {
+       Status = HEAP_strdupA2W ( &lpszOutputW, lpszOutput );
+       if (!NT_SUCCESS (Status))
+         SetLastError (RtlNtStatusToDosError(Status));
+       else
+         {
+           if ( lpdvmInit )
+             RosRtlDevModeA2W ( &dvmInitW, (const LPDEVMODEA)lpdvmInit );
+
+           rc = NtGdiCreateIC ( lpszDriverW,
+                               lpszDeviceW,
+                               lpszOutputW,
+                               lpdvmInit ? &dvmInitW : NULL );
+
+           HEAP_free ( lpszOutputW );
+         }
+       HEAP_free ( lpszDeviceW );
+      }
+    HEAP_free ( lpszDriverW );
+  }
+  return rc;
+}
+
+
+/*
+ * @implemented
+ */
 HDC
 STDCALL
 CreateMetaFileA(
-       LPCSTR          a0
+       LPCSTR          lpszFile
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+  NTSTATUS Status;
+  PWSTR lpszFileW;
+  HDC rc = 0;
+
+  Status = HEAP_strdupA2W ( &lpszFileW, lpszFile );
+  if (!NT_SUCCESS (Status))
+    SetLastError (RtlNtStatusToDosError(Status));
+  else
+    {
+      rc = NtGdiCreateMetaFile ( lpszFileW );
+
+      HEAP_free ( lpszFileW );
+    }
+  return rc;
 }
 
 
+/*
+ * @implemented
+ */
 BOOL
 STDCALL
 CreateScalableFontResourceA(
-       DWORD           a0,
-       LPCSTR          a1,
-       LPCSTR          a2,
-       LPCSTR          a3
-       )
-{
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
-}
-
-
+       DWORD           fdwHidden,
+       LPCSTR          lpszFontRes,
+       LPCSTR          lpszFontFile,
+       LPCSTR          lpszCurrentPath
+       )
+{
+  NTSTATUS Status;
+  LPWSTR lpszFontResW, lpszFontFileW, lpszCurrentPathW;
+  BOOL rc = FALSE;
+
+  Status = HEAP_strdupA2W ( &lpszFontResW, lpszFontRes );
+  if (!NT_SUCCESS (Status))
+    SetLastError (RtlNtStatusToDosError(Status));
+  else
+    {
+      Status = HEAP_strdupA2W ( &lpszFontFileW, lpszFontFile );
+      if (!NT_SUCCESS (Status))
+       SetLastError (RtlNtStatusToDosError(Status));
+      else
+       {
+         Status = HEAP_strdupA2W ( &lpszCurrentPathW, lpszCurrentPath );
+         if (!NT_SUCCESS (Status))
+           SetLastError (RtlNtStatusToDosError(Status));
+         else
+           {
+             rc = NtGdiCreateScalableFontResource ( fdwHidden,
+                                                   lpszFontResW,
+                                                   lpszFontFileW,
+                                                   lpszCurrentPathW );
+
+             HEAP_free ( lpszCurrentPathW );
+           }
+
+         HEAP_free ( lpszFontFileW );
+       }
+
+      HEAP_free ( lpszFontResW );
+    }
+  return rc;
+}
+
+
+/*
+ * @unimplemented
+ */
 int
 STDCALL
 DeviceCapabilitiesExA(
-       LPCSTR          a0,
-       LPCSTR          a1,
-       WORD            a2,
-       LPSTR           a3,
-       CONST DEVMODEA  *a4
+       LPCSTR          pDevice,
+       LPCSTR          pPort,
+       WORD            fwCapability,
+       LPSTR           pOutput,
+       CONST DEVMODEA  *pDevMode
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return 0;
 }
 
 
+/*
+ * @unimplemented
+ */
 int
 STDCALL
-EnumFontFamiliesExA(
-       HDC             a0,
-       LPLOGFONT       a1,
-       FONTENUMEXPROC  a2,
-       LPARAM          a3,
-       DWORD           a4
+EnumFontFamiliesExA (
+       HDC             hdc,
+       LPLOGFONTA      lpLogFont,
+       FONTENUMEXPROCA lpEnumFontFamProc,
+       LPARAM          lParam,
+       DWORD           dwFlags
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return 0;
+#if 0
+  LOGFONTW LogFontW;
+
+  RosRtlLogFontA2W ( &LogFontW, lpLogFont );
+
+  /* no need to convert LogFontW back to lpLogFont b/c it's an [in] parameter only */
+  return NtGdiEnumFontFamiliesEx ( hdc, &LogFontW, lpEnumFontFamProc, lParam, dwFlags );
+#endif
 }
 
 
+/*
+ * @unimplemented
+ */
 int
 STDCALL
 EnumFontFamiliesA(
-       HDC             a0,
-       LPCSTR          a1,
-       FONTENUMPROC    a2,
-       LPARAM          a3
+       HDC             hdc,
+       LPCSTR          lpszFamily,
+       FONTENUMPROCA   lpEnumFontFamProc,
+       LPARAM          lParam
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return 0;
+#if 0
+  NTSTATUS Status;
+  LPWSTR lpszFamilyW;
+  int rc = 0;
+
+  Status = HEAP_strdupA2W ( &lpszFamilyW, lpszFamily );
+  if (!NT_SUCCESS (Status))
+    SetLastError (RtlNtStatusToDosError(Status));
+  else
+    {
+      rc = NtGdiEnumFontFamilies ( hdc, lpszFamilyW, lpEnumFontFamProc, lParam );
+
+      HEAP_free ( lpszFamilyW );
+    }
+
+  return rc;
+#endif
 }
 
 
+/*
+ * @implemented
+ */
 int
 STDCALL
-EnumFontsA(
-       HDC             a0,
-       LPCSTR          a1,
-       ENUMFONTSPROC   a2,
-       LPARAM          a3
-       )
-{
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+EnumFontsA (
+       HDC  hDC,
+       LPCSTR lpFaceName,
+       FONTENUMPROCA  FontFunc,
+       LPARAM  lParam
+       )
+{
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return 0;
+#if 0
+  NTSTATUS Status;
+  LPWSTR lpFaceNameW;
+  int rc = 0;
+
+  Status = HEAP_strdupA2W ( &lpFaceNameW, lpFaceName );
+  if (!NT_SUCCESS (Status))
+    SetLastError (RtlNtStatusToDosError(Status));
+  else
+    {
+      rc = NtGdiEnumFonts ( hDC, lpFaceNameW, FontFunc, lParam );
+
+      HEAP_free ( lpFaceNameW );
+    }
+  return rc;
+#endif
 }
 
 
+/*
+ * @unimplemented
+ */
 BOOL
 STDCALL
-GetCharWidthA(
-       HDC     a0,
-       UINT    a1,
-       UINT    a2,
-       LPINT   a3
+GetCharWidthA (
+       HDC     hdc,
+       UINT    iFirstChar,
+       UINT    iLastChar,
+       LPINT   lpBuffer
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+  /* FIXME what to do with iFirstChar and iLastChar ??? */
+  return NtGdiGetCharWidth ( hdc, iFirstChar, iLastChar, lpBuffer );
 }
 
 
+/*
+ * @unimplemented
+ */
 BOOL
 STDCALL
 GetCharWidth32A(
-       HDC     a0,
-       UINT    a1,
-       UINT    a2,
-       LPINT   a3
+       HDC     hdc,
+       UINT    iFirstChar,
+       UINT    iLastChar,
+       LPINT   lpBuffer
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+  /* FIXME what to do with iFirstChar and iLastChar ??? */
+  return NtGdiGetCharWidth32 ( hdc, iFirstChar, iLastChar, lpBuffer );
 }
 
 
+/*
+ * @unimplemented
+ */
 BOOL
 APIENTRY
 GetCharWidthFloatA(
-       HDC     a0,
-       UINT    a1,
-       UINT    a2,
-       PFLOAT  a3
+       HDC     hdc,
+       UINT    iFirstChar,
+       UINT    iLastChar,
+       PFLOAT  pxBuffer
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+  /* FIXME what to do with iFirstChar and iLastChar ??? */
+  return NtGdiGetCharWidthFloat ( hdc, iFirstChar, iLastChar, pxBuffer );
 }
 
 
+/*
+ * @unimplemented
+ */
 BOOL
 APIENTRY
 GetCharABCWidthsA(
-       HDC     a0,
-       UINT    a1,
-       UINT    a2,
-       LPABC   a3
+       HDC     hdc,
+       UINT    uFirstChar,
+       UINT    uLastChar,
+       LPABC   lpabc
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+  /* FIXME what to do with uFirstChar and uLastChar ??? */
+  return NtGdiGetCharABCWidths ( hdc, uFirstChar, uLastChar, lpabc );
 }
 
 
+/*
+ * @unimplemented
+ */
 BOOL
 APIENTRY
 GetCharABCWidthsFloatA(
-       HDC             a0,
-       UINT            a1,
-       UINT            a2,
-       LPABCFLOAT      a3
+       HDC             hdc,
+       UINT            iFirstChar,
+       UINT            iLastChar,
+       LPABCFLOAT      lpABCF
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+  /* FIXME what to do with iFirstChar and iLastChar ??? */
+  return NtGdiGetCharABCWidthsFloat ( hdc, iFirstChar, iLastChar, lpABCF );
 }
 
 
+/*
+ * @implemented
+ */
 DWORD
 STDCALL
 GetGlyphOutlineA(
-       HDC             a0,
-       UINT            a1,
-       UINT            a2,
-       LPGLYPHMETRICS  a3,
-       DWORD           a4,
-       LPVOID          a5,
-       CONST MAT2      *a6
+       HDC             hdc,
+       UINT            uChar,
+       UINT            uFormat,
+       LPGLYPHMETRICS  lpgm,
+       DWORD           cbBuffer,
+       LPVOID          lpvBuffer,
+       CONST MAT2      *lpmat2
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+  return NtGdiGetGlyphOutline ( hdc, uChar, uFormat, lpgm, cbBuffer, lpvBuffer, (CONST LPMAT2)lpmat2 );
 }
 
 
+/*
+ * @implemented
+ */
 HMETAFILE
 STDCALL
 GetMetaFileA(
-       LPCSTR  a0
+       LPCSTR  lpszMetaFile
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+  NTSTATUS Status;
+  LPWSTR lpszMetaFileW;
+  HMETAFILE rc = 0;
+
+  Status = HEAP_strdupA2W ( &lpszMetaFileW, lpszMetaFile );
+  if (!NT_SUCCESS (Status))
+    SetLastError (RtlNtStatusToDosError(Status));
+  else
+    {
+      rc = NtGdiGetMetaFile ( lpszMetaFileW );
+
+      HEAP_free ( lpszMetaFileW );
+    }
+
+  return rc;
 }
 
 
+/*
+ * @unimplemented
+ */
 UINT
 APIENTRY
 GetOutlineTextMetricsA(
-       HDC                     a0,
-       UINT                    a1,
-       LPOUTLINETEXTMETRICA    a2
+       HDC                     hdc,
+       UINT                    cbData,
+       LPOUTLINETEXTMETRICA    lpOTM
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return 0;
 }
 
 
+/*
+ * @implemented
+ */
 BOOL
 APIENTRY
-GetTextExtentPoint32A(
-       HDC             hDc,
-       LPCSTR          a1,
-       int             a2,
-       LPSIZE          a3
+GetTextExtentExPointA(
+       HDC             hdc,
+       LPCSTR          lpszStr,
+       int             cchString,
+       int             nMaxExtent,
+       LPINT           lpnFit,
+       LPINT           alpDx,
+       LPSIZE          lpSize
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
-}
+  NTSTATUS Status;
+  LPWSTR lpszStrW;
+  BOOL rc = 0;
 
+  Status = HEAP_strdupA2W ( &lpszStrW, lpszStr );
+  if (!NT_SUCCESS (Status))
+    SetLastError (RtlNtStatusToDosError(Status));
+  else
+  {
+    rc = NtGdiGetTextExtentExPoint (
+      hdc, lpszStrW, cchString, nMaxExtent, lpnFit, alpDx, lpSize );
 
-BOOL
-APIENTRY
-GetTextExtentExPointA(
-       HDC             hDc,
-       LPCSTR          a1,
-       int             a2,
-       int             a3,
-       LPINT           a4,
-       LPINT           a5,
-       LPSIZE          a6
-       )
-{
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+    HEAP_free ( lpszStrW );
+  }
+
+  return rc;
 }
 
 
+/*
+ * @unimplemented
+ */
 DWORD
 STDCALL
 GetCharacterPlacementA(
@@ -284,7 +510,7 @@ GetCharacterPlacementA(
        LPCSTR          a1,
        int             a2,
        int             a3,
-       LPGCP_RESULTS   a4,
+       LPGCP_RESULTSA  a4,
        DWORD           a5
        )
 {
@@ -293,84 +519,199 @@ GetCharacterPlacementA(
 }
 
 
+/*
+ * @implemented
+ */
 HDC
 STDCALL
 ResetDCA(
-       HDC             a0,
-       CONST DEVMODEA  *a1
+       HDC             hdc,
+       CONST DEVMODEA  *lpInitData
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+  DEVMODEW InitDataW;
+
+  RosRtlDevModeA2W ( &InitDataW, (CONST LPDEVMODEA)lpInitData );
+
+  return NtGdiResetDC ( hdc, &InitDataW );
 }
 
 
+/*
+ * @implemented
+ */
 BOOL
 STDCALL
 RemoveFontResourceA(
-       LPCSTR  a0
+       LPCSTR  lpFileName
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+  NTSTATUS Status;
+  LPWSTR lpFileNameW;
+  BOOL rc = 0;
+
+  Status = HEAP_strdupA2W ( &lpFileNameW, lpFileName );
+  if (!NT_SUCCESS (Status))
+    SetLastError (RtlNtStatusToDosError(Status));
+  else
+    {
+      rc = NtGdiRemoveFontResource ( lpFileNameW );
+
+      HEAP_free ( lpFileNameW );
+    }
+
+  return rc;
 }
 
 
-HENHMETAFILE 
-STDCALL 
+/*
+ * @implemented
+ */
+HENHMETAFILE
+STDCALL
 CopyEnhMetaFileA(
-       HENHMETAFILE    a0,
-       LPCSTR          a1
+       HENHMETAFILE    hemfSrc,
+       LPCSTR          lpszFile
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+  NTSTATUS Status;
+  LPWSTR lpszFileW;
+  HENHMETAFILE rc = 0;
+
+  Status = HEAP_strdupA2W ( &lpszFileW, lpszFile );
+  if (!NT_SUCCESS (Status))
+    SetLastError (RtlNtStatusToDosError(Status));
+  else
+    {
+      rc = NtGdiCopyEnhMetaFile ( hemfSrc, lpszFileW );
+
+      HEAP_free ( lpszFileW );
+    }
+  return rc;
 }
 
 
-HDC   
-STDCALL 
+/*
+ * @implemented
+ */
+HDC
+STDCALL
 CreateEnhMetaFileA(
-       HDC             a0,
-       LPCSTR          a1,
-       CONST RECT      *a2,
-       LPCSTR          a3
+       HDC             hdc,
+       LPCSTR          lpFileName,
+       CONST RECT      *lpRect,
+       LPCSTR          lpDescription
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+  NTSTATUS Status;
+  LPWSTR lpFileNameW, lpDescriptionW;
+  HDC rc = 0;
+
+  Status = HEAP_strdupA2W ( &lpFileNameW, lpFileName );
+  if (!NT_SUCCESS (Status))
+    SetLastError (RtlNtStatusToDosError(Status));
+  else
+    {
+      Status = HEAP_strdupA2W ( &lpDescriptionW, lpDescription );
+      if (!NT_SUCCESS (Status))
+       SetLastError (RtlNtStatusToDosError(Status));
+      else
+      {
+       rc = NtGdiCreateEnhMetaFile (
+         hdc, lpFileNameW, (CONST LPRECT)lpRect, lpDescriptionW );
+
+       HEAP_free ( lpDescriptionW );
+      }
+      HEAP_free ( lpFileNameW );
+    }
+
+  return rc;
 }
 
 
-HENHMETAFILE  
-STDCALL 
+/*
+ * @implemented
+ */
+HENHMETAFILE
+STDCALL
 GetEnhMetaFileA(
-       LPCSTR  a0
+       LPCSTR  lpszMetaFile
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
+  NTSTATUS Status;
+  LPWSTR lpszMetaFileW;
+  HENHMETAFILE rc = 0;
 
+  Status = HEAP_strdupA2W ( &lpszMetaFileW, lpszMetaFile );
+  if (!NT_SUCCESS (Status))
+    SetLastError (RtlNtStatusToDosError(Status));
+  else
+  {
+    rc = NtGdiGetEnhMetaFile ( lpszMetaFileW );
 
-UINT  
-STDCALL 
-GetEnhMetaFileDescriptionA(
-       HENHMETAFILE    a0,
-       UINT            a1,
-       LPSTR           a2
-       )
-{
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    HEAP_free ( lpszMetaFileW );
+  }
+
+  return rc;
 }
 
 
+/*
+ * @implemented
+ */
+UINT
+STDCALL
+GetEnhMetaFileDescriptionA(
+       HENHMETAFILE    hemf,
+       UINT            cchBuffer,
+       LPSTR           lpszDescription
+       )
+{
+  NTSTATUS Status;
+  LPWSTR lpszDescriptionW;
+  UINT rc;
+
+  if ( lpszDescription && cchBuffer )
+    {
+      lpszDescriptionW = (LPWSTR)HEAP_alloc ( cchBuffer*sizeof(WCHAR) );
+      if ( !lpszDescriptionW )
+       {
+         SetLastError (RtlNtStatusToDosError(STATUS_NO_MEMORY));
+         return 0;
+       }
+    }
+  else
+    lpszDescriptionW = NULL;
+
+  rc = NtGdiGetEnhMetaFileDescription ( hemf, cchBuffer, lpszDescriptionW );
+
+  if ( lpszDescription && cchBuffer )
+    {
+      Status = RtlUnicodeToMultiByteN ( lpszDescription,
+                                       cchBuffer,
+                                       NULL,
+                                       lpszDescriptionW,
+                                       cchBuffer );
+      HEAP_free ( lpszDescriptionW );
+      if ( !NT_SUCCESS(Status) )
+       {
+         SetLastError (RtlNtStatusToDosError(Status));
+         return 0;
+       }
+    }
+
+  return rc;
+}
+
+
+/*
+ * @unimplemented
+ */
 int
 STDCALL
 StartDocA(
        HDC             hdc,
-       CONST DOCINFO   *a1
+       CONST DOCINFOA  *a1
        )
 {
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
@@ -378,6 +719,9 @@ StartDocA(
 }
 
 
+/*
+ * @unimplemented
+ */
 int   
 STDCALL 
 GetObjectA(
@@ -386,16 +730,18 @@ GetObjectA(
        LPVOID          a2
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+       return NtGdiGetObject ( a0, a1, a2 );
 }
 
 
+/*
+ * @unimplemented
+ */
 BOOL  
 STDCALL 
 PolyTextOutA(
        HDC                     hdc, 
-       CONST POLYTEXT          *a1, 
+       CONST POLYTEXTA         *a1, 
        int                     a2
        )
 {
@@ -404,6 +750,9 @@ PolyTextOutA(
 }
 
 
+/*
+ * @unimplemented
+ */
 int
 STDCALL
 GetTextFaceA(
@@ -417,6 +766,9 @@ GetTextFaceA(
 }
 
 
+/*
+ * @unimplemented
+ */
 DWORD
 STDCALL
 GetKerningPairsA(
@@ -430,11 +782,14 @@ GetKerningPairsA(
 }
 
 
+/*
+ * @unimplemented
+ */
 BOOL
 STDCALL
 GetLogColorSpaceA(
        HCOLORSPACE             a0,
-       LPLOGCOLORSPACE a1,
+       LPLOGCOLORSPACEA        a1,
        DWORD                   a2
        )
 {
@@ -443,10 +798,13 @@ GetLogColorSpaceA(
 }
 
 
+/*
+ * @unimplemented
+ */
 HCOLORSPACE
 STDCALL
 CreateColorSpaceA(
-       LPLOGCOLORSPACE a0
+       LPLOGCOLORSPACEA        a0
        )
 {
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
@@ -454,6 +812,9 @@ CreateColorSpaceA(
 }
 
 
+/*
+ * @unimplemented
+ */
 WINBOOL
 STDCALL
 GetICMProfileA(
@@ -467,6 +828,9 @@ GetICMProfileA(
 }
 
 
+/*
+ * @unimplemented
+ */
 BOOL
 STDCALL
 SetICMProfileA(
@@ -479,19 +843,35 @@ SetICMProfileA(
 }
 
 
+/*
+ * @unimplemented
+ */
 int
 STDCALL
 EnumICMProfilesA(
        HDC             a0,
-       ICMENUMPROC     a1,
+       ICMENUMPROCA    a1,
        LPARAM          a2
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+  /*
+   * FIXME - call NtGdiEnumICMProfiles with NULL for lpstrBuffer
+   * to find out how big a buffer we need. Then allocate that buffer
+   * and call NtGdiEnumICMProfiles again to have the buffer filled.
+   *
+   * Finally, step through the buffer ( MULTI-SZ recommended for format ),
+   * and convert each string to ANSI, calling the user's callback function
+   * until we run out of strings or the user returns FALSE
+   */
+
+  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+  return 0;
 }
 
 
+/*
+ * @unimplemented
+ */
 BOOL
 STDCALL
 wglUseFontBitmapsA(
@@ -506,6 +886,9 @@ wglUseFontBitmapsA(
 }
 
 
+/*
+ * @unimplemented
+ */
 BOOL
 STDCALL
 wglUseFontOutlinesA(
@@ -524,6 +907,9 @@ wglUseFontOutlinesA(
 }
 
 
+/*
+ * @unimplemented
+ */
 WINBOOL
 STDCALL
 UpdateICMRegKeyA(