better stub for EnumFonts (fixed license agreement in ClamWin installer)
[reactos.git] / reactos / lib / gdi32 / misc / stubsa.c
index 576969f..067c353 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: stubsa.c,v 1.23 2003/08/07 04:03:22 royce Exp $
+/* $Id$
  *
  * reactos/lib/gdi32/misc/stubs.c
  *
  * remove its stub from this file.
  *
  */
-#ifdef UNICODE
-#undef UNICODE
-#endif
-
-#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 lpszFilename )
-{
-  return AddFontResourceExA ( lpszFilename, 0, 0 );
-}
-
-
-/*
- * @implemented
- */
-HMETAFILE
-STDCALL
-CopyMetaFileA(
-       HMETAFILE       Src,
-       LPCSTR          lpszFile
-       )
-{
-  NTSTATUS Status;
-  PWSTR lpszFileW;
-  HMETAFILE rc = 0;
-
-  Status = HEAP_strdupA2W ( &lpszFileW, lpszFile );
-  if (!NT_SUCCESS (Status))
-    SetLastError (RtlNtStatusToDosError(Status));
-  else
-  {
-    rc = W32kCopyMetaFile ( Src, lpszFileW );
-
-    HEAP_free ( lpszFileW );
-  }
-
-  return rc;
-}
-
-
-/*
- * @implemented
- */
-HDC
-STDCALL
-CreateICA(
-       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 = W32kCreateIC ( lpszDriverW,
-                               lpszDeviceW,
-                               lpszOutputW,
-                               lpdvmInit ? &dvmInitW : NULL );
-
-           HEAP_free ( lpszOutputW );
-         }
-       HEAP_free ( lpszDeviceW );
-      }
-    HEAP_free ( lpszDriverW );
-  }
-  return rc;
-}
-
-
-/*
- * @implemented
- */
-HDC
-STDCALL
-CreateMetaFileA(
-       LPCSTR          lpszFile
-       )
-{
-  NTSTATUS Status;
-  PWSTR lpszFileW;
-  HDC rc = 0;
-
-  Status = HEAP_strdupA2W ( &lpszFileW, lpszFile );
-  if (!NT_SUCCESS (Status))
-    SetLastError (RtlNtStatusToDosError(Status));
-  else
-    {
-      rc = W32kCreateMetaFile ( lpszFileW );
-
-      HEAP_free ( lpszFileW );
-    }
-  return rc;
-}
+#include "precomp.h"
 
-
-/*
- * @implemented
- */
-BOOL
-STDCALL
-CreateScalableFontResourceA(
-       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 = W32kCreateScalableFontResource ( fdwHidden,
-                                                   lpszFontResW,
-                                                   lpszFontFileW,
-                                                   lpszCurrentPathW );
-
-             HEAP_free ( lpszCurrentPathW );
-           }
-
-         HEAP_free ( lpszFontFileW );
-       }
-
-      HEAP_free ( lpszFontResW );
-    }
-  return rc;
-}
+#define UNIMPLEMENTED DbgPrint("GDI32: %s is unimplemented, please try again later.\n", __FUNCTION__);
 
 
 /*
@@ -221,235 +27,11 @@ DeviceCapabilitiesExA(
        CONST DEVMODEA  *pDevMode
        )
 {
+  UNIMPLEMENTED;
   SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
   return 0;
 }
 
-
-/*
- * @unimplemented
- */
-int
-STDCALL
-EnumFontFamiliesExA (
-       HDC             hdc,
-       LPLOGFONTA      lpLogFont,
-       FONTENUMEXPROCA lpEnumFontFamProc,
-       LPARAM          lParam,
-       DWORD           dwFlags
-       )
-{
-  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 W32kEnumFontFamiliesEx ( hdc, &LogFontW, lpEnumFontFamProc, lParam, dwFlags );
-#endif
-}
-
-
-/*
- * @unimplemented
- */
-int
-STDCALL
-EnumFontFamiliesA(
-       HDC             hdc,
-       LPCSTR          lpszFamily,
-       FONTENUMPROCA   lpEnumFontFamProc,
-       LPARAM          lParam
-       )
-{
-  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 = W32kEnumFontFamilies ( hdc, lpszFamilyW, lpEnumFontFamProc, lParam );
-
-      HEAP_free ( lpszFamilyW );
-    }
-
-  return rc;
-#endif
-}
-
-
-/*
- * @implemented
- */
-int
-STDCALL
-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 = W32kEnumFonts ( hDC, lpFaceNameW, FontFunc, lParam );
-
-      HEAP_free ( lpFaceNameW );
-    }
-  return rc;
-#endif
-}
-
-
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-GetCharWidthA (
-       HDC     hdc,
-       UINT    iFirstChar,
-       UINT    iLastChar,
-       LPINT   lpBuffer
-       )
-{
-  /* FIXME what to do with iFirstChar and iLastChar ??? */
-  return W32kGetCharWidth ( hdc, iFirstChar, iLastChar, lpBuffer );
-}
-
-
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-GetCharWidth32A(
-       HDC     hdc,
-       UINT    iFirstChar,
-       UINT    iLastChar,
-       LPINT   lpBuffer
-       )
-{
-  /* FIXME what to do with iFirstChar and iLastChar ??? */
-  return W32kGetCharWidth32 ( hdc, iFirstChar, iLastChar, lpBuffer );
-}
-
-
-/*
- * @unimplemented
- */
-BOOL
-APIENTRY
-GetCharWidthFloatA(
-       HDC     hdc,
-       UINT    iFirstChar,
-       UINT    iLastChar,
-       PFLOAT  pxBuffer
-       )
-{
-  /* FIXME what to do with iFirstChar and iLastChar ??? */
-  return W32kGetCharWidthFloat ( hdc, iFirstChar, iLastChar, pxBuffer );
-}
-
-
-/*
- * @unimplemented
- */
-BOOL
-APIENTRY
-GetCharABCWidthsA(
-       HDC     hdc,
-       UINT    uFirstChar,
-       UINT    uLastChar,
-       LPABC   lpabc
-       )
-{
-  /* FIXME what to do with uFirstChar and uLastChar ??? */
-  return W32kGetCharABCWidths ( hdc, uFirstChar, uLastChar, lpabc );
-}
-
-
-/*
- * @unimplemented
- */
-BOOL
-APIENTRY
-GetCharABCWidthsFloatA(
-       HDC             hdc,
-       UINT            iFirstChar,
-       UINT            iLastChar,
-       LPABCFLOAT      lpABCF
-       )
-{
-  /* FIXME what to do with iFirstChar and iLastChar ??? */
-  return W32kGetCharABCWidthsFloat ( hdc, iFirstChar, iLastChar, lpABCF );
-}
-
-
-/*
- * @implemented
- */
-DWORD
-STDCALL
-GetGlyphOutlineA(
-       HDC             hdc,
-       UINT            uChar,
-       UINT            uFormat,
-       LPGLYPHMETRICS  lpgm,
-       DWORD           cbBuffer,
-       LPVOID          lpvBuffer,
-       CONST MAT2      *lpmat2
-       )
-{
-  return W32kGetGlyphOutline ( hdc, uChar, uFormat, lpgm, cbBuffer, lpvBuffer, (CONST LPMAT2)lpmat2 );
-}
-
-
-/*
- * @implemented
- */
-HMETAFILE
-STDCALL
-GetMetaFileA(
-       LPCSTR  lpszMetaFile
-       )
-{
-  NTSTATUS Status;
-  LPWSTR lpszMetaFileW;
-  HMETAFILE rc = 0;
-
-  Status = HEAP_strdupA2W ( &lpszMetaFileW, lpszMetaFile );
-  if (!NT_SUCCESS (Status))
-    SetLastError (RtlNtStatusToDosError(Status));
-  else
-    {
-      rc = W32kGetMetaFile ( lpszMetaFileW );
-
-      HEAP_free ( lpszMetaFileW );
-    }
-
-  return rc;
-}
-
-
 /*
  * @unimplemented
  */
@@ -461,45 +43,12 @@ GetOutlineTextMetricsA(
        LPOUTLINETEXTMETRICA    lpOTM
        )
 {
+  UNIMPLEMENTED;
   SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
   return 0;
 }
 
 
-/*
- * @implemented
- */
-BOOL
-APIENTRY
-GetTextExtentExPointA(
-       HDC             hdc,
-       LPCSTR          lpszStr,
-       int             cchString,
-       int             nMaxExtent,
-       LPINT           lpnFit,
-       LPINT           alpDx,
-       LPSIZE          lpSize
-       )
-{
-  NTSTATUS Status;
-  LPWSTR lpszStrW;
-  BOOL rc = 0;
-
-  Status = HEAP_strdupA2W ( &lpszStrW, lpszStr );
-  if (!NT_SUCCESS (Status))
-    SetLastError (RtlNtStatusToDosError(Status));
-  else
-  {
-    rc = W32kGetTextExtentExPoint (
-      hdc, lpszStrW, cchString, nMaxExtent, lpnFit, alpDx, lpSize );
-
-    HEAP_free ( lpszStrW );
-  }
-
-  return rc;
-}
-
-
 /*
  * @unimplemented
  */
@@ -514,196 +63,12 @@ GetCharacterPlacementA(
        DWORD           a5
        )
 {
+       UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
        return 0;
 }
 
 
-/*
- * @implemented
- */
-HDC
-STDCALL
-ResetDCA(
-       HDC             hdc,
-       CONST DEVMODEA  *lpInitData
-       )
-{
-  DEVMODEW InitDataW;
-
-  RosRtlDevModeA2W ( &InitDataW, (CONST LPDEVMODEA)lpInitData );
-
-  return W32kResetDC ( hdc, &InitDataW );
-}
-
-
-/*
- * @implemented
- */
-BOOL
-STDCALL
-RemoveFontResourceA(
-       LPCSTR  lpFileName
-       )
-{
-  NTSTATUS Status;
-  LPWSTR lpFileNameW;
-  BOOL rc = 0;
-
-  Status = HEAP_strdupA2W ( &lpFileNameW, lpFileName );
-  if (!NT_SUCCESS (Status))
-    SetLastError (RtlNtStatusToDosError(Status));
-  else
-    {
-      rc = W32kRemoveFontResource ( lpFileNameW );
-
-      HEAP_free ( lpFileNameW );
-    }
-
-  return rc;
-}
-
-
-/*
- * @implemented
- */
-HENHMETAFILE
-STDCALL
-CopyEnhMetaFileA(
-       HENHMETAFILE    hemfSrc,
-       LPCSTR          lpszFile
-       )
-{
-  NTSTATUS Status;
-  LPWSTR lpszFileW;
-  HENHMETAFILE rc = 0;
-
-  Status = HEAP_strdupA2W ( &lpszFileW, lpszFile );
-  if (!NT_SUCCESS (Status))
-    SetLastError (RtlNtStatusToDosError(Status));
-  else
-    {
-      rc = W32kCopyEnhMetaFile ( hemfSrc, lpszFileW );
-
-      HEAP_free ( lpszFileW );
-    }
-  return rc;
-}
-
-
-/*
- * @implemented
- */
-HDC
-STDCALL
-CreateEnhMetaFileA(
-       HDC             hdc,
-       LPCSTR          lpFileName,
-       CONST RECT      *lpRect,
-       LPCSTR          lpDescription
-       )
-{
-  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 = W32kCreateEnhMetaFile (
-         hdc, lpFileNameW, (CONST LPRECT)lpRect, lpDescriptionW );
-
-       HEAP_free ( lpDescriptionW );
-      }
-      HEAP_free ( lpFileNameW );
-    }
-
-  return rc;
-}
-
-
-/*
- * @implemented
- */
-HENHMETAFILE
-STDCALL
-GetEnhMetaFileA(
-       LPCSTR  lpszMetaFile
-       )
-{
-  NTSTATUS Status;
-  LPWSTR lpszMetaFileW;
-  HENHMETAFILE rc = 0;
-
-  Status = HEAP_strdupA2W ( &lpszMetaFileW, lpszMetaFile );
-  if (!NT_SUCCESS (Status))
-    SetLastError (RtlNtStatusToDosError(Status));
-  else
-  {
-    rc = W32kGetEnhMetaFile ( lpszMetaFileW );
-
-    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 = W32kGetEnhMetaFileDescription ( 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
  */
@@ -714,26 +79,12 @@ StartDocA(
        CONST DOCINFOA  *a1
        )
 {
+       UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
        return 0;
 }
 
 
-/*
- * @unimplemented
- */
-int   
-STDCALL 
-GetObjectA(
-       HGDIOBJ         a0, 
-       int             a1, 
-       LPVOID          a2
-       )
-{
-       return W32kGetObject ( a0, a1, a2 );
-}
-
-
 /*
  * @unimplemented
  */
@@ -745,22 +96,7 @@ PolyTextOutA(
        int                     a2
        )
 {
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
-}
-
-
-/*
- * @unimplemented
- */
-int
-STDCALL
-GetTextFaceA(
-       HDC     a0,
-       int     a1,
-       LPSTR   a2
-       )
-{
+       UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
        return FALSE;
 }
@@ -777,6 +113,7 @@ GetKerningPairsA(
        LPKERNINGPAIR   a2
        )
 {
+       UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
        return 0;
 }
@@ -793,6 +130,7 @@ GetLogColorSpaceA(
        DWORD                   a2
        )
 {
+       UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
        return FALSE;
 }
@@ -807,6 +145,7 @@ CreateColorSpaceA(
        LPLOGCOLORSPACEA        a0
        )
 {
+       UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
        return 0;
 }
@@ -815,7 +154,7 @@ CreateColorSpaceA(
 /*
  * @unimplemented
  */
-WINBOOL
+BOOL
 STDCALL
 GetICMProfileA(
        HDC             a0,
@@ -823,6 +162,7 @@ GetICMProfileA(
        LPSTR           a2
        )
 {
+       UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
        return FALSE;
 }
@@ -838,6 +178,7 @@ SetICMProfileA(
        LPSTR   a1
        )
 {
+       UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
        return FALSE;
 }
@@ -855,15 +196,16 @@ EnumICMProfilesA(
        )
 {
   /*
-   * FIXME - call W32kEnumICMProfiles with NULL for lpstrBuffer
+   * FIXME - call NtGdiEnumICMProfiles with NULL for lpstrBuffer
    * to find out how big a buffer we need. Then allocate that buffer
-   * and call W32kEnumICMProfiles again to have the buffer filled.
+   * 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
    */
 
+  UNIMPLEMENTED;
   SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
   return 0;
 }
@@ -881,6 +223,7 @@ wglUseFontBitmapsA(
        DWORD           a3
        )
 {
+       UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
        return FALSE;
 }
@@ -902,6 +245,7 @@ wglUseFontOutlinesA(
        LPGLYPHMETRICSFLOAT     a7
        )
 {
+       UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
        return FALSE;
 }
@@ -910,7 +254,7 @@ wglUseFontOutlinesA(
 /*
  * @unimplemented
  */
-WINBOOL
+BOOL
 STDCALL
 UpdateICMRegKeyA(
        DWORD   a0,
@@ -919,9 +263,70 @@ UpdateICMRegKeyA(
        UINT    a3
        )
 {
+       UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
        return FALSE;
 }
 
 
+/*
+ * @unimplemented
+ */
+BOOL
+STDCALL
+RemoveFontResourceExA(
+       LPCSTR lpFileName,
+       DWORD fl,
+       PVOID pdv
+)
+{
+       UNIMPLEMENTED;
+       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+       return 0;
+}
+
+
+/*
+ * @unimplemented
+ */
+HFONT
+STDCALL
+CreateFontIndirectExA(const ENUMLOGFONTEXDVA *elfexd)
+{
+       UNIMPLEMENTED;
+       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+       return 0;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD
+STDCALL
+GetGlyphIndicesA(
+       HDC hdc,
+       LPCSTR lpstr,
+       int c,
+       LPWORD pgi,
+       DWORD fl
+)
+{
+       UNIMPLEMENTED;
+       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+       return 0;
+}
+
+/*
+ * @unimplemented
+ */
+UINT
+STDCALL
+GetStringBitmapA(HDC hdc,LPSTR psz,BOOL unknown,UINT cj,BYTE *lpSB)
+{
+       UNIMPLEMENTED;
+       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+       return 0;
+}
+
+
 /* EOF */