diff --git a/Raytrace.app/Contents/Info.plist b/Raytrace.app/Contents/Info.plist
new file mode 100644
index 0000000000..776fd81472
--- /dev/null
+++ b/Raytrace.app/Contents/Info.plist
@@ -0,0 +1,18 @@
+
+
+
+
+ CFBundleExecutable
+ gpu.demos.raytrace
+ CFBundleIconFile
+ Icon.icns
+ CFBundleIdentifier
+ org.factor.gpu.demos.raytrace
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ Raytrace.app
+ CFBundlePackageType
+ APPL
+
+
diff --git a/basis/alien/enums/enums-tests.factor b/basis/alien/enums/enums-tests.factor
index f0c665830d..a1813d632e 100644
--- a/basis/alien/enums/enums-tests.factor
+++ b/basis/alien/enums/enums-tests.factor
@@ -33,3 +33,19 @@ ENUM: instrument_t < ushort trombone trumpet ;
{ V{ { red 0 } { green 3 } { blue 4 } } }
[ color_t "c-type" word-prop members>> ] unit-test
+
+ENUM: colores { rojo red } { verde green } { azul blue } { colorado rojo } ;
+
+[ { 0 3 4 0 } ] [ { rojo verde azul colorado } [ enum>number ] map ] unit-test
+
+SYMBOLS: couleurs rouge vert bleu jaune azure ;
+
+<< couleurs int {
+ { rouge red }
+ { vert green }
+ { bleu blue }
+ { jaune 14 }
+ { azure bleu }
+} define-enum >>
+
+[ { 0 3 4 14 4 } ] [ { rouge vert bleu jaune azure } [ enum>number ] map ] unit-test
diff --git a/basis/alien/enums/enums.factor b/basis/alien/enums/enums.factor
index 18000105e7..c568c2af4c 100644
--- a/basis/alien/enums/enums.factor
+++ b/basis/alien/enums/enums.factor
@@ -12,7 +12,7 @@ PRIVATE>
GENERIC: enum>number ( enum -- number ) foldable
M: integer enum>number ;
-M: symbol enum>number "enum-value" word-prop ;
+M: word enum>number "enum-value" word-prop ;
number ] ;
M: enum-c-type c-type-setter
[ enum>number ] swap base-type>> c-type-setter '[ _ 2dip @ ] ;
+: define-enum-value ( class value -- )
+ enum>number "enum-value" set-word-prop ;
+
> "<" ">" surround create-in ] keep
@@ -46,10 +43,14 @@ M: enum-c-type c-type-setter
PRIVATE>
-: define-enum ( word base-type members -- )
+: (define-enum) ( word base-type members -- )
[ dup define-enum-constructor ] 2dip
dup define-enum-members
swap typedef ;
+
+: define-enum ( word base-type members -- )
+ [ (define-enum) ]
+ [ [ first2 define-enum-value ] each ] bi ;
PREDICATE: enum-c-type-word < c-type-word
"c-type" word-prop enum-c-type? ;
diff --git a/basis/alien/parser/parser.factor b/basis/alien/parser/parser.factor
index 7d72442819..68d476ff29 100755
--- a/basis/alien/parser/parser.factor
+++ b/basis/alien/parser/parser.factor
@@ -4,7 +4,7 @@ USING: accessors alien alien.c-types alien.libraries arrays
assocs classes combinators combinators.short-circuit
compiler.units effects grouping kernel parser sequences
splitting words fry locals lexer namespaces summary math
-vocabs.parser words.constant ;
+vocabs.parser words.constant alien.enums ;
IN: alien.parser
SYMBOL: current-library
@@ -75,8 +75,12 @@ M: pointer return-type-name to>> return-type-name CHAR: * suffix ;
"*" ?head
[ [ ] dip parse-pointers ] when ;
+: define-enum-value ( class value -- )
+ enum>number "enum-value" set-word-prop ;
+
: next-enum-member ( members name value -- members value' )
- [ 2array suffix! ] [ 1 + ] bi ;
+ [ define-enum-value ]
+ [ [ 2array suffix! ] [ enum>number 1 + ] bi ] 2bi ;
: parse-enum-name ( -- name )
scan (CREATE-C-TYPE) dup save-location ;
diff --git a/basis/alien/syntax/syntax.factor b/basis/alien/syntax/syntax.factor
index 6c2dc5ca85..22ad3bd174 100755
--- a/basis/alien/syntax/syntax.factor
+++ b/basis/alien/syntax/syntax.factor
@@ -29,7 +29,7 @@ SYNTAX: TYPEDEF:
scan-c-type CREATE-C-TYPE dup save-location typedef ;
SYNTAX: ENUM:
- parse-enum define-enum ;
+ parse-enum (define-enum) ;
SYNTAX: C-TYPE:
void CREATE-C-TYPE typedef ;
diff --git a/basis/cocoa/cocoa.factor b/basis/cocoa/cocoa.factor
index fb21843c0f..53f22addcb 100644
--- a/basis/cocoa/cocoa.factor
+++ b/basis/cocoa/cocoa.factor
@@ -43,7 +43,9 @@ SYNTAX: IMPORT: scan [ ] import-objc-class ;
"NSApplication"
"NSArray"
"NSAutoreleasePool"
+ "NSBitmapImageRep"
"NSBundle"
+ "NSColorSpace"
"NSData"
"NSDictionary"
"NSError"
diff --git a/basis/cocoa/messages/messages.factor b/basis/cocoa/messages/messages.factor
index 4d786aaf72..b607682e76 100644
--- a/basis/cocoa/messages/messages.factor
+++ b/basis/cocoa/messages/messages.factor
@@ -109,7 +109,7 @@ H{
{ "d" c:double }
{ "B" c:bool }
{ "v" c:void }
- { "*" c:c-string }
+ { "*" c:void* }
{ "?" unknown_type }
{ "@" id }
{ "#" Class }
diff --git a/basis/images/cocoa/authors.txt b/basis/images/cocoa/authors.txt
new file mode 100644
index 0000000000..f13c9c1e77
--- /dev/null
+++ b/basis/images/cocoa/authors.txt
@@ -0,0 +1 @@
+Joe Groff
diff --git a/basis/images/cocoa/cocoa.factor b/basis/images/cocoa/cocoa.factor
new file mode 100644
index 0000000000..115315aa18
--- /dev/null
+++ b/basis/images/cocoa/cocoa.factor
@@ -0,0 +1,66 @@
+! (c)2010 Joe Groff bsd license
+USING: accessors alien.data cocoa cocoa.classes cocoa.messages
+combinators core-foundation.data core-graphics.types fry images
+images.loader io kernel literals math sequences ;
+IN: images.cocoa
+
+SINGLETON: ns-image
+"png" ns-image register-image-class
+"tif" ns-image register-image-class
+"tiff" ns-image register-image-class
+"gif" ns-image register-image-class
+"jpg" ns-image register-image-class
+"jpeg" ns-image register-image-class
+"bmp" ns-image register-image-class
+"ico" ns-image register-image-class
+
+CONSTANT: NSImageRepLoadStatusUnknownType -1
+CONSTANT: NSImageRepLoadStatusReadingHeader -2
+CONSTANT: NSImageRepLoadStatusWillNeedAllData -3
+CONSTANT: NSImageRepLoadStatusInvalidData -4
+CONSTANT: NSImageRepLoadStatusUnexpectedEOF -5
+CONSTANT: NSImageRepLoadStatusCompleted -6
+
+CONSTANT: NSColorRenderingIntentDefault 0
+CONSTANT: NSColorRenderingIntentAbsoluteColorimetric 1
+CONSTANT: NSColorRenderingIntentRelativeColorimetric 2
+CONSTANT: NSColorRenderingIntentPerceptual 3
+CONSTANT: NSColorRenderingIntentSaturation 4
+
+ERROR: ns-image-unknown-type ;
+ERROR: ns-image-invalid-data ;
+ERROR: ns-image-unexpected-eof ;
+ERROR: ns-image-planar-images-not-supported ;
+
+
+
+: load-image-rep ( -- image-rep )
+ NSBitmapImageRep contents -> autorelease -> imageRepWithData:
+ NSColorSpace -> genericRGBColorSpace
+ NSColorRenderingIntentDefault
+ -> bitmapImageRepByConvertingToColorSpace:renderingIntent: ;
+
+: image-rep>image ( image-rep -- image )
+ image new swap {
+ [ -> size CGSize>dim [ >integer ] map >>dim ]
+ [ -> bitmapData ]
+ [ -> bytesPerPlane memory>byte-array >>bitmap ]
+ } cleave
+ RGBA >>component-order
+ ubyte-components >>component-type
+ t >>premultiplied-alpha?
+ f >>upside-down? ;
+
+M: ns-image stream>image
+ drop
+ [ load-image-rep ] with-input-stream image-rep>image ;
diff --git a/basis/images/cocoa/platforms.txt b/basis/images/cocoa/platforms.txt
new file mode 100644
index 0000000000..6e806f449e
--- /dev/null
+++ b/basis/images/cocoa/platforms.txt
@@ -0,0 +1 @@
+macosx
diff --git a/basis/images/cocoa/summary.txt b/basis/images/cocoa/summary.txt
new file mode 100644
index 0000000000..628cce90e9
--- /dev/null
+++ b/basis/images/cocoa/summary.txt
@@ -0,0 +1 @@
+Image loading using MacOS X's native Cocoa APIs
diff --git a/basis/images/gdiplus/gdiplus.factor b/basis/images/gdiplus/gdiplus.factor
new file mode 100644
index 0000000000..97bc52375f
--- /dev/null
+++ b/basis/images/gdiplus/gdiplus.factor
@@ -0,0 +1,63 @@
+! (c)2010 Joe Groff bsd license
+USING: accessors alien.c-types alien.data alien.enums
+classes.struct destructors images images.loader
+io.streams.limited kernel locals math windows.com
+windows.gdiplus windows.streams windows.types typed
+byte-arrays grouping sequences ;
+IN: images.gdiplus
+
+SINGLETON: gdi+-image
+"png" gdi+-image register-image-class
+"tif" gdi+-image register-image-class
+"tiff" gdi+-image register-image-class
+"gif" gdi+-image register-image-class
+"jpg" gdi+-image register-image-class
+"jpeg" gdi+-image register-image-class
+"bmp" gdi+-image register-image-class
+"ico" gdi+-image register-image-class
+
+ ( x y w h -- rect )
+ GpRect ; inline
+
+: stream>gdi+-bitmap ( stream -- bitmap )
+ stream>IStream &com-release
+ { void* } [ GdipCreateBitmapFromStream check-gdi+-status ]
+ [ ] with-out-parameters &GdipFree ;
+
+: gdi+-bitmap-width ( bitmap -- w )
+ { UINT } [ GdipGetImageWidth check-gdi+-status ]
+ [ ] with-out-parameters ;
+: gdi+-bitmap-height ( bitmap -- w )
+ { UINT } [ GdipGetImageHeight check-gdi+-status ]
+ [ ] with-out-parameters ;
+: gdi+-lock-bitmap ( bitmap rect mode format -- data )
+ { BitmapData } [ GdipBitmapLockBits check-gdi+-status ]
+ [ clone ] with-out-parameters ;
+
+:: gdi+-bitmap>data ( bitmap -- w h pixels )
+ bitmap [ gdi+-bitmap-width ] [ gdi+-bitmap-height ] bi :> ( w h )
+ bitmap 0 0 w h ImageLockModeRead enum>number
+ PixelFormat32bppARGB gdi+-lock-bitmap :> bitmap-data
+ bitmap-data [ Scan0>> ] [ Stride>> ] [ Height>> * ] tri
+ memory>byte-array :> pixels
+ bitmap bitmap-data GdipBitmapUnlockBits check-gdi+-status
+ w h pixels ;
+
+:: data>image ( w h pixels -- image )
+ image new
+ { w h } >>dim
+ pixels >>bitmap
+ BGRA >>component-order
+ ubyte-components >>component-type
+ f >>upside-down? ;
+
+PRIVATE>
+
+M: gdi+-image stream>image
+ drop [
+ start-gdi+ &stop-gdi+ drop
+ stream>gdi+-bitmap
+ gdi+-bitmap>data
+ data>image
+ ] with-destructors ;
diff --git a/basis/images/images.factor b/basis/images/images.factor
index 6cbcdb9508..db731d2045 100644
--- a/basis/images/images.factor
+++ b/basis/images/images.factor
@@ -62,7 +62,10 @@ UNION: alpha-channel BGRA RGBA ABGR ARGB LA A INTENSITY ;
UNION: alpha-channel-precedes-colors ABGR ARGB XBGR XRGB ;
-TUPLE: image dim component-order component-type upside-down? bitmap ;
+TUPLE: image
+ dim component-order component-type
+ upside-down? premultiplied-alpha?
+ bitmap ;
: ( -- image ) image new ; inline
diff --git a/basis/opengl/textures/textures.factor b/basis/opengl/textures/textures.factor
index f33ea9e47d..0aaa9dcf9b 100644
--- a/basis/opengl/textures/textures.factor
+++ b/basis/opengl/textures/textures.factor
@@ -312,12 +312,21 @@ TUPLE: single-texture < disposable image dim loc texture-coords texture display-
[ init-texture texture-coords>> gl-texture-coord-pointer ] tri
swap gl-fill-rect ;
+: set-blend-mode ( texture -- )
+ image>> dup has-alpha?
+ [ premultiplied-alpha?>> [ GL_ONE GL_ONE_MINUS_SRC_ALPHA glBlendFunc ] when ]
+ [ drop GL_BLEND glDisable ] if ;
+
+: reset-blend-mode ( texture -- )
+ image>> dup has-alpha?
+ [ premultiplied-alpha?>> [ GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA glBlendFunc ] when ]
+ [ drop GL_BLEND glEnable ] if ;
+
: draw-textured-rect ( dim texture -- )
[
- [ image>> has-alpha? [ GL_BLEND glDisable ] unless ]
+ [ set-blend-mode ]
[ (draw-textured-rect) GL_TEXTURE_2D 0 glBindTexture ]
- [ image>> has-alpha? [ GL_BLEND glEnable ] unless ]
- tri
+ [ reset-blend-mode ] tri
] with-texturing ;
: texture-coords ( texture -- coords )
diff --git a/basis/ui/images/images.factor b/basis/ui/images/images.factor
index b97a5c14fe..7084f1aac1 100644
--- a/basis/ui/images/images.factor
+++ b/basis/ui/images/images.factor
@@ -1,8 +1,8 @@
! Copyright (C) 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
-USING: namespaces cache images images.loader accessors assocs
-kernel opengl opengl.gl opengl.textures ui.gadgets.worlds
-memoize images.png images.tiff ;
+USING: accessors assocs cache combinators images images.loader
+kernel memoize namespaces opengl opengl.gl opengl.textures system
+ui.gadgets.worlds vocabs.loader ;
IN: ui.images
TUPLE: image-name path ;
@@ -30,3 +30,14 @@ PRIVATE>
: image-dim ( image-name -- dim )
cached-image dim>> ;
+
+<<
+{
+ { [ os macosx? ] [ "images.cocoa" require ] }
+ { [ os winnt? ] [ "images.gdiplus" require ] }
+ [
+ "images.png" require
+ "images.tiff" require
+ ]
+} cond
+>>
diff --git a/basis/windows/com/com.factor b/basis/windows/com/com.factor
index 094859009d..46ae1ae154 100644
--- a/basis/windows/com/com.factor
+++ b/basis/windows/com/com.factor
@@ -1,6 +1,6 @@
USING: alien alien.c-types alien.destructors windows.com.syntax
windows.ole32 windows.types continuations kernel alien.syntax
-libc destructors accessors alien.data ;
+libc destructors accessors alien.data classes.struct windows.kernel32 ;
IN: windows.com
LIBRARY: ole32
@@ -31,6 +31,55 @@ COM-INTERFACE: IDropTarget IUnknown {00000122-0000-0000-C000-000000000046}
HRESULT DragLeave ( )
HRESULT Drop ( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) ;
+COM-INTERFACE: ISequentialStream IUnknown {0C733A30-2A1C-11CE-ADE5-00AA0044773D}
+ HRESULT Read ( void* pv, ULONG cb, ULONG* pcbRead )
+ HRESULT Write ( void* pv, ULONG cb, ULONG* pcbWritten ) ;
+
+STRUCT: STATSTG
+ { pwcsName LPOLESTR }
+ { type DWORD }
+ { cbSize ULARGE_INTEGER }
+ { mtime FILETIME }
+ { ctime FILETIME }
+ { atime FILETIME }
+ { grfMode DWORD }
+ { grfLocksSupported DWORD }
+ { clsid CLSID }
+ { grfStateBits DWORD }
+ { reserved DWORD } ;
+
+CONSTANT: STGM_READ 0
+CONSTANT: STGM_WRITE 1
+CONSTANT: STGM_READWRITE 2
+
+CONSTANT: STG_E_INVALIDFUNCTION HEX: 80030001
+
+CONSTANT: STGTY_STORAGE 1
+CONSTANT: STGTY_STREAM 2
+CONSTANT: STGTY_LOCKBYTES 3
+CONSTANT: STGTY_PROPERTY 4
+
+CONSTANT: STREAM_SEEK_SET 0
+CONSTANT: STREAM_SEEK_CUR 1
+CONSTANT: STREAM_SEEK_END 2
+
+CONSTANT: LOCK_WRITE 1
+CONSTANT: LOCK_EXCLUSIVE 2
+CONSTANT: LOCK_ONLYONCE 4
+
+CONSTANT: GUID_NULL GUID: {00000000-0000-0000-0000-000000000000}
+
+COM-INTERFACE: IStream ISequentialStream {0000000C-0000-0000-C000-000000000046}
+ HRESULT Seek ( LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition )
+ HRESULT SetSize ( ULARGE_INTEGER* libNewSize )
+ HRESULT CopyTo ( IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten )
+ HRESULT Commit ( DWORD grfCommitFlags )
+ HRESULT Revert ( )
+ HRESULT LockRegion ( ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType )
+ HRESULT UnlockRegion ( ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType )
+ HRESULT Stat ( STATSTG* pstatstg, DWORD grfStatFlag )
+ HRESULT Clone ( IStream** ppstm ) ;
+
FUNCTION: HRESULT RegisterDragDrop ( HWND hWnd, IDropTarget* pDropTarget ) ;
FUNCTION: HRESULT RevokeDragDrop ( HWND hWnd ) ;
FUNCTION: void ReleaseStgMedium ( LPSTGMEDIUM pmedium ) ;
@@ -51,3 +100,5 @@ FUNCTION: void ReleaseStgMedium ( LPSTGMEDIUM pmedium ) ;
over [ com-release ] curry [ ] cleanup ; inline
DESTRUCTOR: com-release
+
+
diff --git a/basis/windows/gdiplus/gdiplus.factor b/basis/windows/gdiplus/gdiplus.factor
new file mode 100644
index 0000000000..66300f9a90
--- /dev/null
+++ b/basis/windows/gdiplus/gdiplus.factor
@@ -0,0 +1,1649 @@
+! (c)2010 Joe Groff bsd license
+USING: alien.c-types alien.data alien.destructors alien.syntax
+classes.struct kernel math windows.com windows.com.syntax
+windows.kernel32 windows.ole32 windows.types ;
+FROM: alien.c-types => float ;
+IN: windows.gdiplus
+
+LIBRARY: gdiplus
+
+FUNCTION: void* GdipAlloc ( SIZE_T size ) ;
+FUNCTION: void GdipFree ( void* mem ) ;
+
+DESTRUCTOR: GdipFree
+
+TYPEDEF: float REAL
+
+ENUM: GpStatus
+ { Ok 0 }
+ { GenericError 1 }
+ { InvalidParameter 2 }
+ { OutOfMemory 3 }
+ { ObjectBusy 4 }
+ { InsufficientBuffer 5 }
+ { NotImplemented 6 }
+ { Win32Error 7 }
+ { WrongState 8 }
+ { Aborted 9 }
+ { FileNotFound 10 }
+ { ValueOverflow 11 }
+ { AccessDenied 12 }
+ { UnknownImageFormat 13 }
+ { FontFamilyNotFound 14 }
+ { FontStyleNotFound 15 }
+ { NotTrueTypeFont 16 }
+ { UnsupportedGdiplusVersion 17 }
+ { GdiplusNotInitialized 18 }
+ { PropertyNotFound 19 }
+ { PropertyNotSupported 20 }
+ { ProfileNotFound 21 } ;
+
+CALLBACK: BOOL ImageAbort ( void* data ) ;
+TYPEDEF: ImageAbort DrawImageAbort
+TYPEDEF: ImageAbort GetThumbnailImageAbort
+
+STRUCT: GpPoint
+ { X INT }
+ { Y INT } ;
+
+STRUCT: GpPointF
+ { X REAL }
+ { Y REAL } ;
+
+STRUCT: GpPathData
+ { Count INT }
+ { Points GpPointF* }
+ { Types BYTE* } ;
+
+STRUCT: GpRectF
+ { X REAL }
+ { Y REAL }
+ { Width REAL }
+ { Height REAL } ;
+
+STRUCT: GpRect
+ { X INT }
+ { Y INT }
+ { Width INT }
+ { Height INT } ;
+
+STRUCT: CharacterRange
+ { First INT }
+ { Length INT } ;
+
+TYPEDEF: UINT GraphicsState
+TYPEDEF: UINT GraphicsContainer
+
+ENUM: GpUnit
+ { UnitWorld 0 }
+ { UnitDisplay 1 }
+ { UnitPixel 2 }
+ { UnitPoint 3 }
+ { UnitInch 4 }
+ { UnitDocument 5 }
+ { UnitMillimeter 6 } ;
+
+ENUM: GpBrushType
+ { BrushTypeSolidColor 0 }
+ { BrushTypeHatchFill 1 }
+ { BrushTypeTextureFill 2 }
+ { BrushTypePathGradient 3 }
+ { BrushTypeLinearGradient 4 } ;
+
+ENUM: GpFillMode
+ { FillModeAlternate 0 }
+ { FillModeWinding 1 } ;
+
+ENUM: GpLineCap
+ { LineCapFlat HEX: 00 }
+ { LineCapSquare HEX: 01 }
+ { LineCapRound HEX: 02 }
+ { LineCapTriangle HEX: 03 }
+
+ { LineCapNoAnchor HEX: 10 }
+ { LineCapSquareAnchor HEX: 11 }
+ { LineCapRoundAnchor HEX: 12 }
+ { LineCapDiamondAnchor HEX: 13 }
+ { LineCapArrowAnchor HEX: 14 }
+
+ { LineCapCustom HEX: ff }
+ { LineCapAnchorMask HEX: f0 } ;
+
+ENUM: PathPointType
+ { PathPointTypeStart 0 }
+ { PathPointTypeLine 1 }
+ { PathPointTypeBezier 3 }
+ { PathPointTypePathTypeMask 7 }
+ { PathPointTypePathDashMode 16 }
+ { PathPointTypePathMarker 32 }
+ { PathPointTypeCloseSubpath 128 }
+ { PathPointTypeBezier3 3 } ;
+
+ENUM: GpPenType
+ { PenTypeSolidColor BrushTypeSolidColor }
+ { PenTypeHatchFill BrushTypeHatchFill }
+ { PenTypeTextureFill BrushTypeTextureFill }
+ { PenTypePathGradient BrushTypePathGradient }
+ { PenTypeLinearGradient BrushTypeLinearGradient }
+ { PenTypeUnknown -1 } ;
+
+ENUM: GpLineJoin
+ { LineJoinMiter 0 }
+ { LineJoinBevel 1 }
+ { LineJoinRound 2 }
+ { LineJoinMiterClipped 3 } ;
+
+ENUM: QualityMode
+ { QualityModeInvalid -1 }
+ { QualityModeDefault 0 }
+ { QualityModeLow 1 }
+ { QualityModeHigh 2 } ;
+
+ENUM: SmoothingMode
+ { SmoothingModeInvalid QualityModeInvalid }
+ { SmoothingModeDefault QualityModeDefault }
+ { SmoothingModeHighSpeed QualityModeLow }
+ { SmoothingModeHighQuality QualityModeHigh }
+ SmoothingModeNone
+ SmoothingModeAntiAlias ;
+
+ENUM: CompositingQuality
+ { CompositingQualityInvalid QualityModeInvalid }
+ { CompositingQualityDefault QualityModeDefault }
+ { CompositingQualityHighSpeed QualityModeLow }
+ { CompositingQualityHighQuality QualityModeHigh }
+ CompositingQualityGammaCorrected
+ CompositingQualityAssumeLinear ;
+
+ENUM: InterpolationMode
+ { InterpolationModeInvalid QualityModeInvalid }
+ { InterpolationModeDefault QualityModeDefault }
+ { InterpolationModeLowQuality QualityModeLow }
+ { InterpolationModeHighQuality QualityModeHigh }
+ InterpolationModeBilinear
+ InterpolationModeBicubic
+ InterpolationModeNearestNeighbor
+ InterpolationModeHighQualityBilinear
+ InterpolationModeHighQualityBicubic ;
+
+ENUM: GpPenAlignment
+ { PenAlignmentCenter 0 }
+ { PenAlignmentInset 1 } ;
+
+ENUM: PixelOffsetMode
+ { PixelOffsetModeInvalid QualityModeInvalid }
+ { PixelOffsetModeDefault QualityModeDefault }
+ { PixelOffsetModeHighSpeed QualityModeLow }
+ { PixelOffsetModeHighQuality QualityModeHigh }
+ PixelOffsetModeNone
+ PixelOffsetModeHalf ;
+
+ENUM: GpDashCap
+ { DashCapFlat 0 }
+ { DashCapRound 2 }
+ { DashCapTriangle 3 } ;
+
+ENUM: GpDashStyle
+ DashStyleSolid
+ DashStyleDash
+ DashStyleDot
+ DashStyleDashDot
+ DashStyleDashDotDot
+ DashStyleCustom ;
+
+ENUM: GpMatrixOrder
+ { MatrixOrderPrepend 0 }
+ { MatrixOrderAppend 1 } ;
+
+ENUM: ImageType
+ ImageTypeUnknown
+ ImageTypeBitmap
+ ImageTypeMetafile ;
+
+ENUM: WarpMode
+ WarpModePerspective
+ WarpModeBilinear ;
+
+ENUM: GpWrapMode
+ WrapModeTile
+ WrapModeTileFlipX
+ WrapModeTileFlipY
+ WrapModeTileFlipXY
+ WrapModeClamp ;
+
+ENUM: MetafileType
+ MetafileTypeInvalid
+ MetafileTypeWmf
+ MetafileTypeWmfPlaceable
+ MetafileTypeEmf
+ MetafileTypeEmfPlusOnly
+ MetafileTypeEmfPlusDual ;
+
+ENUM: LinearGradientMode
+ LinearGradientModeHorizontal
+ LinearGradientModeVertical
+ LinearGradientModeForwardDiagonal
+ LinearGradientModeBackwardDiagonal ;
+
+ENUM: EmfType
+ { EmfTypeEmfOnly MetafileTypeEmf }
+ { EmfTypeEmfPlusOnly MetafileTypeEmfPlusOnly }
+ { EmfTypeEmfPlusDual MetafileTypeEmfPlusDual } ;
+
+ENUM: CompositingMode
+ CompositingModeSourceOver
+ CompositingModeSourceCopy ;
+
+ENUM: TextRenderingHint
+ { TextRenderingHintSystemDefault 0 }
+ TextRenderingHintSingleBitPerPixelGridFit
+ TextRenderingHintSingleBitPerPixel
+ TextRenderingHintAntiAliasGridFit
+ TextRenderingHintAntiAlias
+ TextRenderingHintClearTypeGridFit ;
+
+ENUM: StringAlignment
+ { StringAlignmentNear 0 }
+ { StringAlignmentCenter 1 }
+ { StringAlignmentFar 2 } ;
+
+ENUM: StringDigitSubstitute
+ { StringDigitSubstituteUser 0 }
+ { StringDigitSubstituteNone 1 }
+ { StringDigitSubstituteNational 2 }
+ { StringDigitSubstituteTraditional 3 } ;
+
+ENUM: StringFormatFlags
+ { StringFormatFlagsDirectionRightToLeft HEX: 00000001 }
+ { StringFormatFlagsDirectionVertical HEX: 00000002 }
+ { StringFormatFlagsNoFitBlackBox HEX: 00000004 }
+ { StringFormatFlagsDisplayFormatControl HEX: 00000020 }
+ { StringFormatFlagsNoFontFallback HEX: 00000400 }
+ { StringFormatFlagsMeasureTrailingSpaces HEX: 00000800 }
+ { StringFormatFlagsNoWrap HEX: 00001000 }
+ { StringFormatFlagsLineLimit HEX: 00002000 }
+ { StringFormatFlagsNoClip HEX: 00004000 } ;
+
+ENUM: StringTrimming
+ { StringTrimmingNone 0 }
+ { StringTrimmingCharacter 1 }
+ { StringTrimmingWord 2 }
+ { StringTrimmingEllipsisCharacter 3 }
+ { StringTrimmingEllipsisWord 4 }
+ { StringTrimmingEllipsisPath 5 } ;
+
+ENUM: FontStyle
+ { FontStyleRegular 0 }
+ { FontStyleBold 1 }
+ { FontStyleItalic 2 }
+ { FontStyleBoldItalic 3 }
+ { FontStyleUnderline 4 }
+ { FontStyleStrikeout 8 } ;
+
+ENUM: HotkeyPrefix
+ { HotkeyPrefixNone 0 }
+ { HotkeyPrefixShow 1 }
+ { HotkeyPrefixHide 2 } ;
+
+ENUM: PaletteFlags
+ { PaletteFlagsHasAlpha 1 }
+ { PaletteFlagsGrayScale 2 }
+ { PaletteFlagsHalftone 4 } ;
+
+ENUM: ImageCodecFlags
+ { ImageCodecFlagsEncoder 1 }
+ { ImageCodecFlagsDecoder 2 }
+ { ImageCodecFlagsSupportBitmap 4 }
+ { ImageCodecFlagsSupportVector 8 }
+ { ImageCodecFlagsSeekableEncode 16 }
+ { ImageCodecFlagsBlockingDecode 32 }
+ { ImageCodecFlagsBuiltin 65536 }
+ { ImageCodecFlagsSystem 131072 }
+ { ImageCodecFlagsUser 262144 } ;
+
+ENUM: ImageFlags
+ { ImageFlagsNone 0 }
+ { ImageFlagsScalable HEX: 0001 }
+ { ImageFlagsHasAlpha HEX: 0002 }
+ { ImageFlagsHasTranslucent HEX: 0004 }
+ { ImageFlagsPartiallyScalable HEX: 0008 }
+ { ImageFlagsColorSpaceRGB HEX: 0010 }
+ { ImageFlagsColorSpaceCMYK HEX: 0020 }
+ { ImageFlagsColorSpaceGRAY HEX: 0040 }
+ { ImageFlagsColorSpaceYCBCR HEX: 0080 }
+ { ImageFlagsColorSpaceYCCK HEX: 0100 }
+ { ImageFlagsHasRealDPI HEX: 1000 }
+ { ImageFlagsHasRealPixelSize HEX: 2000 }
+ { ImageFlagsReadOnly HEX: 00010000 }
+ { ImageFlagsCaching HEX: 00020000 } ;
+
+ENUM: CombineMode
+ CombineModeReplace
+ CombineModeIntersect
+ CombineModeUnion
+ CombineModeXor
+ CombineModeExclude
+ CombineModeComplement ;
+
+ENUM: GpFlushIntention
+ { FlushIntentionFlush 0 }
+ { FlushIntentionSync 1 } ;
+
+ENUM: GpCoordinateSpace
+ CoordinateSpaceWorld
+ CoordinateSpacePage
+ CoordinateSpaceDevice ;
+
+ENUM: GpTestControlEnum
+ { TestControlForceBilinear 0 }
+ { TestControlNoICM 1 }
+ { TestControlGetBuildNumber 2 } ;
+
+ENUM: MetafileFrameUnit
+ { MetafileFrameUnitPixel UnitPixel }
+ { MetafileFrameUnitPoint UnitPoint }
+ { MetafileFrameUnitInch UnitInch }
+ { MetafileFrameUnitDocument UnitDocument }
+ { MetafileFrameUnitMillimeter UnitMillimeter }
+ MetafileFrameUnitGdi ;
+
+ENUM: HatchStyle
+ { HatchStyleHorizontal 0 }
+ { HatchStyleVertical 1 }
+ { HatchStyleForwardDiagonal 2 }
+ { HatchStyleBackwardDiagonal 3 }
+ { HatchStyleCross 4 }
+ { HatchStyleDiagonalCross 5 }
+ { HatchStyle05Percent 6 }
+ { HatchStyle10Percent 7 }
+ { HatchStyle20Percent 8 }
+ { HatchStyle25Percent 9 }
+ { HatchStyle30Percent 10 }
+ { HatchStyle40Percent 11 }
+ { HatchStyle50Percent 12 }
+ { HatchStyle60Percent 13 }
+ { HatchStyle70Percent 14 }
+ { HatchStyle75Percent 15 }
+ { HatchStyle80Percent 16 }
+ { HatchStyle90Percent 17 }
+ { HatchStyleLightDownwardDiagonal 18 }
+ { HatchStyleLightUpwardDiagonal 19 }
+ { HatchStyleDarkDownwardDiagonal 20 }
+ { HatchStyleDarkUpwardDiagonal 21 }
+ { HatchStyleWideDownwardDiagonal 22 }
+ { HatchStyleWideUpwardDiagonal 23 }
+ { HatchStyleLightVertical 24 }
+ { HatchStyleLightHorizontal 25 }
+ { HatchStyleNarrowVertical 26 }
+ { HatchStyleNarrowHorizontal 27 }
+ { HatchStyleDarkVertical 28 }
+ { HatchStyleDarkHorizontal 29 }
+ { HatchStyleDashedDownwardDiagonal 30 }
+ { HatchStyleDashedUpwardDiagonal 31 }
+ { HatchStyleDashedHorizontal 32 }
+ { HatchStyleDashedVertical 33 }
+ { HatchStyleSmallConfetti 34 }
+ { HatchStyleLargeConfetti 35 }
+ { HatchStyleZigZag 36 }
+ { HatchStyleWave 37 }
+ { HatchStyleDiagonalBrick 38 }
+ { HatchStyleHorizontalBrick 39 }
+ { HatchStyleWeave 40 }
+ { HatchStylePlaid 41 }
+ { HatchStyleDivot 42 }
+ { HatchStyleDottedGrid 43 }
+ { HatchStyleDottedDiamond 44 }
+ { HatchStyleShingle 45 }
+ { HatchStyleTrellis 46 }
+ { HatchStyleSphere 47 }
+ { HatchStyleSmallGrid 48 }
+ { HatchStyleSmallCheckerBoard 49 }
+ { HatchStyleLargeCheckerBoard 50 }
+ { HatchStyleOutlinedDiamond 51 }
+ { HatchStyleSolidDiamond 52 }
+ { HatchStyleTotal 53 }
+ { HatchStyleLargeGrid 4 }
+ { HatchStyleMin 0 }
+ { HatchStyleMax 52 } ;
+
+ENUM: DebugEventLevel
+ DebugEventLevelFatal
+ DebugEventLevelWarning ;
+
+CALLBACK: void DebugEventProc ( DebugEventLevel level, c-string msg ) ;
+CALLBACK: GpStatus NotificationHookProc ( ULONG_PTR* x ) ;
+CALLBACK: void NotificationUnhookProc ( ULONG_PTR x ) ;
+
+STRUCT: GdiplusStartupInput
+ { GdiplusVersion UINT32 }
+ { DebugEventCallback DebugEventProc }
+ { SuppressBackgroundThread BOOL }
+ { SuppressExternalCodecs BOOL } ;
+
+STRUCT: GdiplusStartupOutput
+ { NotificationHook NotificationHookProc }
+ { NotificationUnhook NotificationUnhookProc } ;
+
+FUNCTION: GpStatus GdiplusStartup ( ULONG_PTR* x, GdiplusStartupInput* in, GdiplusStartupOutput* out ) ;
+FUNCTION: void GdiplusShutdown ( ULONG_PTR x ) ;
+
+TYPEDEF: DWORD ARGB
+TYPEDEF: INT PixelFormat
+
+
+
+CONSTANT: PixelFormatIndexed HEX: 00010000
+CONSTANT: PixelFormatGDI HEX: 00020000
+CONSTANT: PixelFormatAlpha HEX: 00040000
+CONSTANT: PixelFormatPAlpha HEX: 00080000
+CONSTANT: PixelFormatExtended HEX: 00100000
+CONSTANT: PixelFormatCanonical HEX: 00200000
+
+CONSTANT: PixelFormatUndefined 0
+CONSTANT: PixelFormatDontCare 0
+CONSTANT: PixelFormatMax 15
+
+: PixelFormat1bppIndexed ( -- x )
+ 1 1 PixelFormatIndexed PixelFormatGDI bitor pixel-format-constant ; inline
+: PixelFormat4bppIndexed ( -- x )
+ 2 4 PixelFormatIndexed PixelFormatGDI bitor pixel-format-constant ; inline
+: PixelFormat8bppIndexed ( -- x )
+ 3 8 PixelFormatIndexed PixelFormatGDI bitor pixel-format-constant ; inline
+: PixelFormat16bppGrayScale ( -- x )
+ 4 16 PixelFormatExtended pixel-format-constant ; inline
+: PixelFormat16bppRGB555 ( -- x )
+ 5 16 PixelFormatGDI pixel-format-constant ; inline
+: PixelFormat16bppRGB565 ( -- x )
+ 6 16 PixelFormatGDI pixel-format-constant ; inline
+: PixelFormat16bppARGB1555 ( -- x )
+ 7 16 PixelFormatAlpha PixelFormatGDI bitor pixel-format-constant ; inline
+: PixelFormat24bppRGB ( -- x )
+ 8 24 PixelFormatGDI pixel-format-constant ; inline
+: PixelFormat32bppRGB ( -- x )
+ 9 32 PixelFormatGDI pixel-format-constant ; inline
+: PixelFormat32bppARGB ( -- x )
+ 10 32 PixelFormatAlpha PixelFormatGDI PixelFormatCanonical bitor bitor pixel-format-constant ; inline
+: PixelFormat32bppPARGB ( -- x )
+ 11 32 PixelFormatAlpha PixelFormatPAlpha PixelFormatGDI bitor bitor pixel-format-constant ; inline
+: PixelFormat48bppRGB ( -- x )
+ 12 48 PixelFormatExtended pixel-format-constant ; inline
+: PixelFormat64bppARGB ( -- x )
+ 13 64 PixelFormatAlpha PixelFormatCanonical PixelFormatExtended bitor bitor pixel-format-constant ; inline
+: PixelFormat64bppPARGB ( -- x )
+ 14 64 PixelFormatAlpha PixelFormatPAlpha PixelFormatExtended bitor bitor pixel-format-constant ; inline
+
+STRUCT: ColorPalette
+ { Flags UINT }
+ { Count UINT }
+ { Entries ARGB[1] } ;
+
+! XXX RECTL and SIZEL should go with other metafile definitions if we add them
+STRUCT: RECTL
+ { left LONG }
+ { top LONG }
+ { right LONG }
+ { bottom LONG } ;
+
+STRUCT: SIZEL
+ { width LONG }
+ { height LONG } ;
+
+STRUCT: ENHMETAHEADER3
+ { iType DWORD }
+ { nSize DWORD }
+ { rclBounds RECTL }
+ { rclFrame RECTL }
+ { dSignature DWORD }
+ { nVersion DWORD }
+ { nBytes DWORD }
+ { nRecords DWORD }
+ { nHandles WORD }
+ { sReserved WORD }
+ { nDescription DWORD }
+ { offDescription DWORD }
+ { nPalEntries DWORD }
+ { szlDevice SIZEL }
+ { szlMillimeters SIZEL } ;
+
+STRUCT: PWMFRect16
+ { Left INT16 }
+ { Top INT16 }
+ { Right INT16 }
+ { Bottom INT16 } ;
+
+STRUCT: WmfPlaceableFileHeader
+ { Key UINT32 }
+ { Hmf INT16 }
+ { BoundingBox PWMFRect16 }
+ { Inch INT16 }
+ { Reserved INT16[2] }
+ { Checksum INT16 } ;
+
+CONSTANT: GDIP_EMFPLUSFLAGS_DISPLAY 1
+
+! XXX we don't have a METAHEADER struct defined
+! UNION-STRUCT: MetafileHeader-union
+! { WmfHeader METAHEADER }
+! { EmfHeader ENHMETAHEADER3 } ;
+
+UNION-STRUCT: MetafileHeader-union
+ { EmfHeader ENHMETAHEADER3 } ;
+
+STRUCT: MetafileHeader
+ { Type MetafileType }
+ { Size UINT }
+ { Version UINT }
+ { EmfPlusFlags UINT }
+ { DpiX REAL }
+ { DpiY REAL }
+ { X INT }
+ { Y INT }
+ { Width INT }
+ { Height INT }
+ { Header-union MetafileHeader-union }
+ { EmfPlusHeaderSize INT }
+ { LogicalDpiX INT }
+ { LogicalDpiY INT } ;
+
+CONSTANT: ImageFormatUndefined GUID: {b96b3ca9-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatMemoryBMP GUID: {b96b3caa-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatBMP GUID: {b96b3cab-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatEMF GUID: {b96b3cac-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatWMF GUID: {b96b3cad-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatJPEG GUID: {b96b3cae-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatPNG GUID: {b96b3caf-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatGIF GUID: {b96b3cb0-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatTIFF GUID: {b96b3cb1-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatEXIF GUID: {b96b3cb2-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatIcon GUID: {b96b3cb5-0728-11d3-9d7b-0000f81ef32e}
+
+CONSTANT: FrameDimensionTime GUID: {6aedbd6d-3fb5-418a-83a6-7f45229dc872}
+CONSTANT: FrameDimensionPage GUID: {7462dc86-6180-4c7e-8e3f-ee7333a7a483}
+CONSTANT: FrameDimensionResolution GUID: {84236f7b-3bd3-428f-8dab-4ea1439ca315}
+
+ENUM: ImageLockMode
+ { ImageLockModeRead 1 }
+ { ImageLockModeWrite 2 }
+ { ImageLockModeUserInputBuf 4 } ;
+
+ENUM: RotateFlipType
+ { RotateNoneFlipNone 0 }
+ { Rotate180FlipXY RotateNoneFlipNone }
+
+ { Rotate90FlipNone 1 }
+ { Rotate270FlipXY Rotate90FlipNone }
+
+ { Rotate180FlipNone 2 }
+ { RotateNoneFlipXY Rotate180FlipNone }
+
+ { Rotate270FlipNone 3 }
+ { Rotate90FlipXY Rotate270FlipNone }
+
+ { RotateNoneFlipX 4 }
+ { Rotate180FlipY RotateNoneFlipX }
+
+ { Rotate90FlipX 5 }
+ { Rotate270FlipY Rotate90FlipX }
+
+ { Rotate180FlipX 6 }
+ { RotateNoneFlipY Rotate180FlipX }
+
+ { Rotate270FlipX 7 }
+ { Rotate90FlipY Rotate270FlipX } ;
+
+STRUCT: EncoderParameter
+ { Guid GUID }
+ { NumberOfValues ULONG }
+ { Type ULONG }
+ { Value void* } ;
+
+STRUCT: EncoderParameters
+ { Count UINT }
+ { Parameter EncoderParameter[1] } ;
+
+STRUCT: ImageCodecInfo
+ { Clsid CLSID }
+ { FormatID GUID }
+ { CodecName WCHAR* }
+ { DllName WCHAR* }
+ { FormatDescription WCHAR* }
+ { FilenameExtension WCHAR* }
+ { MimeType WCHAR* }
+ { Flags DWORD }
+ { Version DWORD }
+ { SigCount DWORD }
+ { SigSize DWORD }
+ { SigPattern BYTE* }
+ { SigMask BYTE* } ;
+
+STRUCT: BitmapData
+ { Width UINT }
+ { Height UINT }
+ { Stride INT }
+ { PixelFormat PixelFormat }
+ { Scan0 void* }
+ { Reserved UINT_PTR } ;
+
+STRUCT: ImageItemData
+ { Size UINT }
+ { Position UINT }
+ { Desc void* }
+ { DescSize UINT }
+ { Data void* }
+ { DataSize UINT }
+ { Cookie UINT } ;
+
+STRUCT: PropertyItem
+ { id PROPID }
+ { length ULONG }
+ { type WORD }
+ { value void* } ;
+
+CONSTANT: PropertyTagTypeByte 1
+CONSTANT: PropertyTagTypeASCII 2
+CONSTANT: PropertyTagTypeShort 3
+CONSTANT: PropertyTagTypeLong 4
+CONSTANT: PropertyTagTypeRational 5
+CONSTANT: PropertyTagTypeUndefined 7
+CONSTANT: PropertyTagTypeSLONG 9
+CONSTANT: PropertyTagTypeSRational 10
+
+CONSTANT: PropertyTagExifIFD HEX: 8769
+CONSTANT: PropertyTagGpsIFD HEX: 8825
+
+CONSTANT: PropertyTagNewSubfileType HEX: 00FE
+CONSTANT: PropertyTagSubfileType HEX: 00FF
+CONSTANT: PropertyTagImageWidth HEX: 0100
+CONSTANT: PropertyTagImageHeight HEX: 0101
+CONSTANT: PropertyTagBitsPerSample HEX: 0102
+CONSTANT: PropertyTagCompression HEX: 0103
+CONSTANT: PropertyTagPhotometricInterp HEX: 0106
+CONSTANT: PropertyTagThreshHolding HEX: 0107
+CONSTANT: PropertyTagCellWidth HEX: 0108
+CONSTANT: PropertyTagCellHeight HEX: 0109
+CONSTANT: PropertyTagFillOrder HEX: 010A
+CONSTANT: PropertyTagDocumentName HEX: 010D
+CONSTANT: PropertyTagImageDescription HEX: 010E
+CONSTANT: PropertyTagEquipMake HEX: 010F
+CONSTANT: PropertyTagEquipModel HEX: 0110
+CONSTANT: PropertyTagStripOffsets HEX: 0111
+CONSTANT: PropertyTagOrientation HEX: 0112
+CONSTANT: PropertyTagSamplesPerPixel HEX: 0115
+CONSTANT: PropertyTagRowsPerStrip HEX: 0116
+CONSTANT: PropertyTagStripBytesCount HEX: 0117
+CONSTANT: PropertyTagMinSampleValue HEX: 0118
+CONSTANT: PropertyTagMaxSampleValue HEX: 0119
+CONSTANT: PropertyTagXResolution HEX: 011A
+CONSTANT: PropertyTagYResolution HEX: 011B
+CONSTANT: PropertyTagPlanarConfig HEX: 011C
+CONSTANT: PropertyTagPageName HEX: 011D
+CONSTANT: PropertyTagXPosition HEX: 011E
+CONSTANT: PropertyTagYPosition HEX: 011F
+CONSTANT: PropertyTagFreeOffset HEX: 0120
+CONSTANT: PropertyTagFreeByteCounts HEX: 0121
+CONSTANT: PropertyTagGrayResponseUnit HEX: 0122
+CONSTANT: PropertyTagGrayResponseCurve HEX: 0123
+CONSTANT: PropertyTagT4Option HEX: 0124
+CONSTANT: PropertyTagT6Option HEX: 0125
+CONSTANT: PropertyTagResolutionUnit HEX: 0128
+CONSTANT: PropertyTagPageNumber HEX: 0129
+CONSTANT: PropertyTagTransferFuncition HEX: 012D
+CONSTANT: PropertyTagSoftwareUsed HEX: 0131
+CONSTANT: PropertyTagDateTime HEX: 0132
+CONSTANT: PropertyTagArtist HEX: 013B
+CONSTANT: PropertyTagHostComputer HEX: 013C
+CONSTANT: PropertyTagPredictor HEX: 013D
+CONSTANT: PropertyTagWhitePoint HEX: 013E
+CONSTANT: PropertyTagPrimaryChromaticities HEX: 013F
+CONSTANT: PropertyTagColorMap HEX: 0140
+CONSTANT: PropertyTagHalftoneHints HEX: 0141
+CONSTANT: PropertyTagTileWidth HEX: 0142
+CONSTANT: PropertyTagTileLength HEX: 0143
+CONSTANT: PropertyTagTileOffset HEX: 0144
+CONSTANT: PropertyTagTileByteCounts HEX: 0145
+CONSTANT: PropertyTagInkSet HEX: 014C
+CONSTANT: PropertyTagInkNames HEX: 014D
+CONSTANT: PropertyTagNumberOfInks HEX: 014E
+CONSTANT: PropertyTagDotRange HEX: 0150
+CONSTANT: PropertyTagTargetPrinter HEX: 0151
+CONSTANT: PropertyTagExtraSamples HEX: 0152
+CONSTANT: PropertyTagSampleFormat HEX: 0153
+CONSTANT: PropertyTagSMinSampleValue HEX: 0154
+CONSTANT: PropertyTagSMaxSampleValue HEX: 0155
+CONSTANT: PropertyTagTransferRange HEX: 0156
+
+CONSTANT: PropertyTagJPEGProc HEX: 0200
+CONSTANT: PropertyTagJPEGInterFormat HEX: 0201
+CONSTANT: PropertyTagJPEGInterLength HEX: 0202
+CONSTANT: PropertyTagJPEGRestartInterval HEX: 0203
+CONSTANT: PropertyTagJPEGLosslessPredictors HEX: 0205
+CONSTANT: PropertyTagJPEGPointTransforms HEX: 0206
+CONSTANT: PropertyTagJPEGQTables HEX: 0207
+CONSTANT: PropertyTagJPEGDCTables HEX: 0208
+CONSTANT: PropertyTagJPEGACTables HEX: 0209
+
+CONSTANT: PropertyTagYCbCrCoefficients HEX: 0211
+CONSTANT: PropertyTagYCbCrSubsampling HEX: 0212
+CONSTANT: PropertyTagYCbCrPositioning HEX: 0213
+CONSTANT: PropertyTagREFBlackWhite HEX: 0214
+
+CONSTANT: PropertyTagICCProfile HEX: 8773
+
+CONSTANT: PropertyTagGamma HEX: 0301
+CONSTANT: PropertyTagICCProfileDescriptor HEX: 0302
+CONSTANT: PropertyTagSRGBRenderingIntent HEX: 0303
+
+CONSTANT: PropertyTagImageTitle HEX: 0320
+CONSTANT: PropertyTagCopyright HEX: 8298
+
+CONSTANT: PropertyTagResolutionXUnit HEX: 5001
+CONSTANT: PropertyTagResolutionYUnit HEX: 5002
+CONSTANT: PropertyTagResolutionXLengthUnit HEX: 5003
+CONSTANT: PropertyTagResolutionYLengthUnit HEX: 5004
+CONSTANT: PropertyTagPrintFlags HEX: 5005
+CONSTANT: PropertyTagPrintFlagsVersion HEX: 5006
+CONSTANT: PropertyTagPrintFlagsCrop HEX: 5007
+CONSTANT: PropertyTagPrintFlagsBleedWidth HEX: 5008
+CONSTANT: PropertyTagPrintFlagsBleedWidthScale HEX: 5009
+CONSTANT: PropertyTagHalftoneLPI HEX: 500A
+CONSTANT: PropertyTagHalftoneLPIUnit HEX: 500B
+CONSTANT: PropertyTagHalftoneDegree HEX: 500C
+CONSTANT: PropertyTagHalftoneShape HEX: 500D
+CONSTANT: PropertyTagHalftoneMisc HEX: 500E
+CONSTANT: PropertyTagHalftoneScreen HEX: 500F
+CONSTANT: PropertyTagJPEGQuality HEX: 5010
+CONSTANT: PropertyTagGridSize HEX: 5011
+CONSTANT: PropertyTagThumbnailFormat HEX: 5012
+CONSTANT: PropertyTagThumbnailWidth HEX: 5013
+CONSTANT: PropertyTagThumbnailHeight HEX: 5014
+CONSTANT: PropertyTagThumbnailColorDepth HEX: 5015
+CONSTANT: PropertyTagThumbnailPlanes HEX: 5016
+CONSTANT: PropertyTagThumbnailRawBytes HEX: 5017
+CONSTANT: PropertyTagThumbnailSize HEX: 5018
+CONSTANT: PropertyTagThumbnailCompressedSize HEX: 5019
+CONSTANT: PropertyTagColorTransferFunction HEX: 501A
+CONSTANT: PropertyTagThumbnailData HEX: 501B
+
+CONSTANT: PropertyTagThumbnailImageWidth HEX: 5020
+CONSTANT: PropertyTagThumbnailImageHeight HEX: 5021
+CONSTANT: PropertyTagThumbnailBitsPerSample HEX: 5022
+CONSTANT: PropertyTagThumbnailCompression HEX: 5023
+CONSTANT: PropertyTagThumbnailPhotometricInterp HEX: 5024
+CONSTANT: PropertyTagThumbnailImageDescription HEX: 5025
+CONSTANT: PropertyTagThumbnailEquipMake HEX: 5026
+CONSTANT: PropertyTagThumbnailEquipModel HEX: 5027
+CONSTANT: PropertyTagThumbnailStripOffsets HEX: 5028
+CONSTANT: PropertyTagThumbnailOrientation HEX: 5029
+CONSTANT: PropertyTagThumbnailSamplesPerPixel HEX: 502A
+CONSTANT: PropertyTagThumbnailRowsPerStrip HEX: 502B
+CONSTANT: PropertyTagThumbnailStripBytesCount HEX: 502C
+CONSTANT: PropertyTagThumbnailResolutionX HEX: 502D
+CONSTANT: PropertyTagThumbnailResolutionY HEX: 502E
+CONSTANT: PropertyTagThumbnailPlanarConfig HEX: 502F
+CONSTANT: PropertyTagThumbnailResolutionUnit HEX: 5030
+CONSTANT: PropertyTagThumbnailTransferFunction HEX: 5031
+CONSTANT: PropertyTagThumbnailSoftwareUsed HEX: 5032
+CONSTANT: PropertyTagThumbnailDateTime HEX: 5033
+CONSTANT: PropertyTagThumbnailArtist HEX: 5034
+CONSTANT: PropertyTagThumbnailWhitePoint HEX: 5035
+CONSTANT: PropertyTagThumbnailPrimaryChromaticities HEX: 5036
+CONSTANT: PropertyTagThumbnailYCbCrCoefficients HEX: 5037
+CONSTANT: PropertyTagThumbnailYCbCrSubsampling HEX: 5038
+CONSTANT: PropertyTagThumbnailYCbCrPositioning HEX: 5039
+CONSTANT: PropertyTagThumbnailRefBlackWhite HEX: 503A
+CONSTANT: PropertyTagThumbnailCopyRight HEX: 503B
+
+CONSTANT: PropertyTagLuminanceTable HEX: 5090
+CONSTANT: PropertyTagChrominanceTable HEX: 5091
+
+CONSTANT: PropertyTagFrameDelay HEX: 5100
+CONSTANT: PropertyTagLoopCount HEX: 5101
+
+CONSTANT: PropertyTagPixelUnit HEX: 5110
+CONSTANT: PropertyTagPixelPerUnitX HEX: 5111
+CONSTANT: PropertyTagPixelPerUnitY HEX: 5112
+CONSTANT: PropertyTagPaletteHistogram HEX: 5113
+
+CONSTANT: PropertyTagExifExposureTime HEX: 829A
+CONSTANT: PropertyTagExifFNumber HEX: 829D
+
+CONSTANT: PropertyTagExifExposureProg HEX: 8822
+CONSTANT: PropertyTagExifSpectralSense HEX: 8824
+CONSTANT: PropertyTagExifISOSpeed HEX: 8827
+CONSTANT: PropertyTagExifOECF HEX: 8828
+
+CONSTANT: PropertyTagExifVer HEX: 9000
+CONSTANT: PropertyTagExifDTOrig HEX: 9003
+CONSTANT: PropertyTagExifDTDigitized HEX: 9004
+
+CONSTANT: PropertyTagExifCompConfig HEX: 9101
+CONSTANT: PropertyTagExifCompBPP HEX: 9102
+
+CONSTANT: PropertyTagExifShutterSpeed HEX: 9201
+CONSTANT: PropertyTagExifAperture HEX: 9202
+CONSTANT: PropertyTagExifBrightness HEX: 9203
+CONSTANT: PropertyTagExifExposureBias HEX: 9204
+CONSTANT: PropertyTagExifMaxAperture HEX: 9205
+CONSTANT: PropertyTagExifSubjectDist HEX: 9206
+CONSTANT: PropertyTagExifMeteringMode HEX: 9207
+CONSTANT: PropertyTagExifLightSource HEX: 9208
+CONSTANT: PropertyTagExifFlash HEX: 9209
+CONSTANT: PropertyTagExifFocalLength HEX: 920A
+CONSTANT: PropertyTagExifMakerNote HEX: 927C
+CONSTANT: PropertyTagExifUserComment HEX: 9286
+CONSTANT: PropertyTagExifDTSubsec HEX: 9290
+CONSTANT: PropertyTagExifDTOrigSS HEX: 9291
+CONSTANT: PropertyTagExifDTDigSS HEX: 9292
+
+CONSTANT: PropertyTagExifFPXVer HEX: A000
+CONSTANT: PropertyTagExifColorSpace HEX: A001
+CONSTANT: PropertyTagExifPixXDim HEX: A002
+CONSTANT: PropertyTagExifPixYDim HEX: A003
+CONSTANT: PropertyTagExifRelatedWav HEX: A004
+CONSTANT: PropertyTagExifInterop HEX: A005
+CONSTANT: PropertyTagExifFlashEnergy HEX: A20B
+CONSTANT: PropertyTagExifSpatialFR HEX: A20C
+CONSTANT: PropertyTagExifFocalXRes HEX: A20E
+CONSTANT: PropertyTagExifFocalYRes HEX: A20F
+CONSTANT: PropertyTagExifFocalResUnit HEX: A210
+CONSTANT: PropertyTagExifSubjectLoc HEX: A214
+CONSTANT: PropertyTagExifExposureIndex HEX: A215
+CONSTANT: PropertyTagExifSensingMethod HEX: A217
+CONSTANT: PropertyTagExifFileSource HEX: A300
+CONSTANT: PropertyTagExifSceneType HEX: A301
+CONSTANT: PropertyTagExifCfaPattern HEX: A302
+
+CONSTANT: PropertyTagGpsVer HEX: 0000
+CONSTANT: PropertyTagGpsLatitudeRef HEX: 0001
+CONSTANT: PropertyTagGpsLatitude HEX: 0002
+CONSTANT: PropertyTagGpsLongitudeRef HEX: 0003
+CONSTANT: PropertyTagGpsLongitude HEX: 0004
+CONSTANT: PropertyTagGpsAltitudeRef HEX: 0005
+CONSTANT: PropertyTagGpsAltitude HEX: 0006
+CONSTANT: PropertyTagGpsGpsTime HEX: 0007
+CONSTANT: PropertyTagGpsGpsSatellites HEX: 0008
+CONSTANT: PropertyTagGpsGpsStatus HEX: 0009
+CONSTANT: PropertyTagGpsGpsMeasureMode HEX: 000A
+CONSTANT: PropertyTagGpsGpsDop HEX: 000B
+CONSTANT: PropertyTagGpsSpeedRef HEX: 000C
+CONSTANT: PropertyTagGpsSpeed HEX: 000D
+CONSTANT: PropertyTagGpsTrackRef HEX: 000E
+CONSTANT: PropertyTagGpsTrack HEX: 000F
+CONSTANT: PropertyTagGpsImgDirRef HEX: 0010
+CONSTANT: PropertyTagGpsImgDir HEX: 0011
+CONSTANT: PropertyTagGpsMapDatum HEX: 0012
+CONSTANT: PropertyTagGpsDestLatRef HEX: 0013
+CONSTANT: PropertyTagGpsDestLat HEX: 0014
+CONSTANT: PropertyTagGpsDestLongRef HEX: 0015
+CONSTANT: PropertyTagGpsDestLong HEX: 0016
+CONSTANT: PropertyTagGpsDestBearRef HEX: 0017
+CONSTANT: PropertyTagGpsDestBear HEX: 0018
+CONSTANT: PropertyTagGpsDestDistRef HEX: 0019
+CONSTANT: PropertyTagGpsDestDist HEX: 001A
+
+ENUM: ColorChannelFlags
+ ColorChannelFlagsC
+ ColorChannelFlagsM
+ ColorChannelFlagsY
+ ColorChannelFlagsK
+ ColorChannelFlagsLast ;
+
+STRUCT: GpColor
+ { Argb ARGB } ;
+
+STRUCT: ColorMatrix
+ { m REAL[5][5] } ;
+
+ENUM: ColorMatrixFlags
+ { ColorMatrixFlagsDefault 0 }
+ { ColorMatrixFlagsSkipGrays 1 }
+ { ColorMatrixFlagsAltGray 2 } ;
+
+ENUM: ColorAdjustType
+ ColorAdjustTypeDefault
+ ColorAdjustTypeBitmap
+ ColorAdjustTypeBrush
+ ColorAdjustTypePen
+ ColorAdjustTypeText
+ ColorAdjustTypeCount
+ ColorAdjustTypeAny ;
+
+STRUCT: ColorMap
+ { oldColor GpColor }
+ { newColor GpColor } ;
+
+C-TYPE: GpGraphics
+C-TYPE: GpPen
+C-TYPE: GpBrush
+C-TYPE: GpHatch
+C-TYPE: GpSolidFill
+C-TYPE: GpPath
+C-TYPE: GpMatrix
+C-TYPE: GpPathIterator
+C-TYPE: GpCustomLineCap
+C-TYPE: GpAdjustableArrowCap
+C-TYPE: GpImage
+C-TYPE: GpMetafile
+C-TYPE: GpImageAttributes
+C-TYPE: GpCachedBitmap
+C-TYPE: GpBitmap
+C-TYPE: GpPathGradient
+C-TYPE: GpLineGradient
+C-TYPE: GpTexture
+C-TYPE: GpFont
+C-TYPE: GpFontCollection
+C-TYPE: GpFontFamily
+C-TYPE: GpStringFormat
+C-TYPE: GpRegion
+C-TYPE: CGpEffect
+
+! dummy out other windows types we don't care to define yet
+C-TYPE: LOGFONTA
+C-TYPE: LOGFONTW
+
+FUNCTION: GpStatus GdipCreateAdjustableArrowCap ( REAL x, REAL x, BOOL x, GpAdjustableArrowCap** x ) ;
+FUNCTION: GpStatus GdipGetAdjustableArrowCapFillState ( GpAdjustableArrowCap* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipGetAdjustableArrowCapHeight ( GpAdjustableArrowCap* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetAdjustableArrowCapMiddleInset ( GpAdjustableArrowCap* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetAdjustableArrowCapWidth ( GpAdjustableArrowCap* x, REAL* x ) ;
+FUNCTION: GpStatus GdipSetAdjustableArrowCapFillState ( GpAdjustableArrowCap* x, BOOL x ) ;
+FUNCTION: GpStatus GdipSetAdjustableArrowCapHeight ( GpAdjustableArrowCap* x, REAL x ) ;
+FUNCTION: GpStatus GdipSetAdjustableArrowCapMiddleInset ( GpAdjustableArrowCap* x, REAL x ) ;
+FUNCTION: GpStatus GdipSetAdjustableArrowCapWidth ( GpAdjustableArrowCap* x, REAL x ) ;
+
+FUNCTION: GpStatus GdipBitmapApplyEffect ( GpBitmap* x, CGpEffect* x, RECT* x, BOOL x, VOID** x, INT* x ) ;
+FUNCTION: GpStatus GdipBitmapCreateApplyEffect ( GpBitmap** x, INT x, CGpEffect* x, RECT* x, RECT* x, GpBitmap** x, BOOL x, VOID** x, INT* x ) ;
+FUNCTION: GpStatus GdipBitmapGetPixel ( GpBitmap* x, INT x, INT x, ARGB* x ) ;
+FUNCTION: GpStatus GdipBitmapLockBits ( GpBitmap* x, GpRect* x, UINT x,
+ PixelFormat x, BitmapData* x ) ;
+FUNCTION: GpStatus GdipBitmapSetPixel ( GpBitmap* x, INT x, INT x, ARGB x ) ;
+FUNCTION: GpStatus GdipBitmapSetResolution ( GpBitmap* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipBitmapUnlockBits ( GpBitmap* x, BitmapData* x ) ;
+FUNCTION: GpStatus GdipCloneBitmapArea ( REAL x, REAL x, REAL x, REAL x, PixelFormat x, GpBitmap* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCloneBitmapAreaI ( INT x, INT x, INT x, INT x, PixelFormat x, GpBitmap* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromFile ( WCHAR* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromFileICM ( WCHAR* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromGdiDib ( BITMAPINFO* x, VOID* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromGraphics ( INT x, INT x, GpGraphics* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromHBITMAP ( HBITMAP x, HPALETTE x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromHICON ( HICON x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromResource ( HINSTANCE x, WCHAR* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromScan0 ( INT x, INT x, INT x, PixelFormat x, BYTE* x,
+ GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromStream ( IStream* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromStreamICM ( IStream* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateHBITMAPFromBitmap ( GpBitmap* x, HBITMAP* x, ARGB x ) ;
+FUNCTION: GpStatus GdipCreateHICONFromBitmap ( GpBitmap* x, HICON* x ) ;
+FUNCTION: GpStatus GdipDeleteEffect ( CGpEffect* x ) ;
+FUNCTION: GpStatus GdipSetEffectParameters ( CGpEffect* x, VOID* x, UINT x ) ;
+
+
+FUNCTION: GpStatus GdipCloneBrush ( GpBrush* x, GpBrush** x ) ;
+FUNCTION: GpStatus GdipDeleteBrush ( GpBrush* x ) ;
+FUNCTION: GpStatus GdipGetBrushType ( GpBrush* x, GpBrushType* x ) ;
+
+
+FUNCTION: GpStatus GdipCreateCachedBitmap ( GpBitmap* x, GpGraphics* x,
+ GpCachedBitmap** x ) ;
+FUNCTION: GpStatus GdipDeleteCachedBitmap ( GpCachedBitmap* x ) ;
+FUNCTION: GpStatus GdipDrawCachedBitmap ( GpGraphics* x, GpCachedBitmap* x, INT x, INT x ) ;
+
+
+FUNCTION: GpStatus GdipCloneCustomLineCap ( GpCustomLineCap* x, GpCustomLineCap** x ) ;
+FUNCTION: GpStatus GdipCreateCustomLineCap ( GpPath* x, GpPath* x, GpLineCap x, REAL x,
+ GpCustomLineCap** x ) ;
+FUNCTION: GpStatus GdipDeleteCustomLineCap ( GpCustomLineCap* x ) ;
+FUNCTION: GpStatus GdipGetCustomLineCapBaseCap ( GpCustomLineCap* x, GpLineCap* x ) ;
+FUNCTION: GpStatus GdipSetCustomLineCapBaseCap ( GpCustomLineCap* x, GpLineCap x ) ;
+FUNCTION: GpStatus GdipGetCustomLineCapBaseInset ( GpCustomLineCap* x, REAL* x ) ;
+FUNCTION: GpStatus GdipSetCustomLineCapBaseInset ( GpCustomLineCap* x, REAL x ) ;
+FUNCTION: GpStatus GdipSetCustomLineCapStrokeCaps ( GpCustomLineCap* x, GpLineCap x,
+ GpLineCap x ) ;
+FUNCTION: GpStatus GdipGetCustomLineCapStrokeJoin ( GpCustomLineCap* x, GpLineJoin* x ) ;
+FUNCTION: GpStatus GdipSetCustomLineCapStrokeJoin ( GpCustomLineCap* x, GpLineJoin x ) ;
+FUNCTION: GpStatus GdipGetCustomLineCapWidthScale ( GpCustomLineCap* x, REAL* x ) ;
+FUNCTION: GpStatus GdipSetCustomLineCapWidthScale ( GpCustomLineCap* x, REAL x ) ;
+
+FUNCTION: GpStatus GdipCloneFont ( GpFont* x, GpFont** x ) ;
+FUNCTION: GpStatus GdipCreateFont ( GpFontFamily* x, REAL x, INT x, GpUnit x,
+ GpFont** x ) ;
+FUNCTION: GpStatus GdipCreateFontFromDC ( HDC x, GpFont** x ) ;
+FUNCTION: GpStatus GdipCreateFontFromLogfontA ( HDC x, LOGFONTA* x, GpFont** x ) ;
+FUNCTION: GpStatus GdipCreateFontFromLogfontW ( HDC x, LOGFONTW* x, GpFont** x ) ;
+FUNCTION: GpStatus GdipDeleteFont ( GpFont* x ) ;
+FUNCTION: GpStatus GdipGetLogFontA ( GpFont* x, GpGraphics* x, LOGFONTA* x ) ;
+FUNCTION: GpStatus GdipGetLogFontW ( GpFont* x, GpGraphics* x, LOGFONTW* x ) ;
+FUNCTION: GpStatus GdipGetFamily ( GpFont* x, GpFontFamily** x ) ;
+FUNCTION: GpStatus GdipGetFontUnit ( GpFont* x, GpUnit* x ) ;
+FUNCTION: GpStatus GdipGetFontSize ( GpFont* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetFontStyle ( GpFont* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetFontHeight ( GpFont* x, GpGraphics* x,
+ REAL* x ) ;
+FUNCTION: GpStatus GdipGetFontHeightGivenDPI ( GpFont* x, REAL x, REAL* x ) ;
+
+
+FUNCTION: GpStatus GdipNewInstalledFontCollection ( GpFontCollection** x ) ;
+FUNCTION: GpStatus GdipNewPrivateFontCollection ( GpFontCollection** x ) ;
+FUNCTION: GpStatus GdipDeletePrivateFontCollection ( GpFontCollection** x ) ;
+FUNCTION: GpStatus GdipPrivateAddFontFile ( GpFontCollection* x, WCHAR* x ) ;
+FUNCTION: GpStatus GdipPrivateAddMemoryFont ( GpFontCollection* x,
+ void* x, INT x ) ;
+FUNCTION: GpStatus GdipGetFontCollectionFamilyCount ( GpFontCollection* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetFontCollectionFamilyList ( GpFontCollection* x, INT x,
+ GpFontFamily** x, INT* x ) ;
+
+
+FUNCTION: GpStatus GdipCloneFontFamily ( GpFontFamily* x, GpFontFamily** x ) ;
+FUNCTION: GpStatus GdipCreateFontFamilyFromName ( WCHAR* x,
+ GpFontCollection* x, GpFontFamily** x ) ;
+FUNCTION: GpStatus GdipDeleteFontFamily ( GpFontFamily* x ) ;
+FUNCTION: GpStatus GdipGetFamilyName ( GpFontFamily* x, WCHAR* x, LANGID x ) ;
+FUNCTION: GpStatus GdipGetCellAscent ( GpFontFamily* x, INT x, UINT16* x ) ;
+FUNCTION: GpStatus GdipGetCellDescent ( GpFontFamily* x, INT x, UINT16* x ) ;
+FUNCTION: GpStatus GdipGetEmHeight ( GpFontFamily* x, INT x, UINT16* x ) ;
+FUNCTION: GpStatus GdipGetGenericFontFamilySansSerif ( GpFontFamily** x ) ;
+FUNCTION: GpStatus GdipGetGenericFontFamilySerif ( GpFontFamily** x ) ;
+FUNCTION: GpStatus GdipGetGenericFontFamilyMonospace ( GpFontFamily** x ) ;
+FUNCTION: GpStatus GdipGetLineSpacing ( GpFontFamily* x, INT x, UINT16* x ) ;
+FUNCTION: GpStatus GdipIsStyleAvailable ( GpFontFamily* x, INT x, BOOL* x ) ;
+
+
+FUNCTION: GpStatus GdipFlush ( GpGraphics* x, GpFlushIntention x ) ;
+FUNCTION: GpStatus GdipBeginContainer ( GpGraphics* x, GpRectF* x, GpRectF* x, GpUnit x, GraphicsContainer* x ) ;
+FUNCTION: GpStatus GdipBeginContainer2 ( GpGraphics* x, GraphicsContainer* x ) ;
+FUNCTION: GpStatus GdipBeginContainerI ( GpGraphics* x, GpRect* x, GpRect* x, GpUnit x, GraphicsContainer* x ) ;
+FUNCTION: GpStatus GdipEndContainer ( GpGraphics* x, GraphicsContainer x ) ;
+FUNCTION: GpStatus GdipComment ( GpGraphics* x, UINT x, BYTE* x ) ;
+FUNCTION: GpStatus GdipCreateFromHDC ( HDC x, GpGraphics** x ) ;
+FUNCTION: GpStatus GdipCreateFromHDC2 ( HDC x, HANDLE x, GpGraphics** x ) ;
+FUNCTION: GpStatus GdipCreateFromHWND ( HWND x, GpGraphics** x ) ;
+FUNCTION: GpStatus GdipCreateFromHWNDICM ( HWND x, GpGraphics** x ) ;
+FUNCTION: HPALETTE GdipCreateHalftonePalette ( ) ;
+FUNCTION: GpStatus GdipDeleteGraphics ( GpGraphics* x ) ;
+FUNCTION: GpStatus GdipDrawArc ( GpGraphics* x, GpPen* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawArcI ( GpGraphics* x, GpPen* x, INT x, INT x, INT x, INT x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawBezier ( GpGraphics* x, GpPen* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawBezierI ( GpGraphics* x, GpPen* x, INT x, INT x, INT x, INT x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipDrawBeziers ( GpGraphics* x, GpPen* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawBeziersI ( GpGraphics* x, GpPen* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawClosedCurve ( GpGraphics* x, GpPen* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawClosedCurveI ( GpGraphics* x, GpPen* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawClosedCurve2 ( GpGraphics* x, GpPen* x, GpPointF* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawClosedCurve2I ( GpGraphics* x, GpPen* x, GpPoint* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawCurve ( GpGraphics* x, GpPen* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawCurveI ( GpGraphics* x, GpPen* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawCurve2 ( GpGraphics* x, GpPen* x, GpPointF* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawCurve2I ( GpGraphics* x, GpPen* x, GpPoint* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawCurve3 ( GpGraphics* x, GpPen* x, GpPointF* x, INT x, INT x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawCurve3I ( GpGraphics* x, GpPen* x, GpPoint* x, INT x, INT x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawDriverString ( GpGraphics* x, UINT16* x, INT x,
+ GpFont* x, GpBrush* x, GpPointF* x, INT x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipDrawEllipse ( GpGraphics* x, GpPen* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawEllipseI ( GpGraphics* x, GpPen* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipDrawImage ( GpGraphics* x, GpImage* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawImageI ( GpGraphics* x, GpImage* x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipDrawImagePointRect ( GpGraphics* x, GpImage* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x, GpUnit x ) ;
+FUNCTION: GpStatus GdipDrawImagePointRectI ( GpGraphics* x, GpImage* x, INT x, INT x, INT x, INT x, INT x, INT x, GpUnit x ) ;
+FUNCTION: GpStatus GdipDrawImagePoints ( GpGraphics* x, GpImage* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawImagePointsI ( GpGraphics* x, GpImage* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawImagePointsRect ( GpGraphics* x, GpImage* x,
+ GpPointF* x, INT x, REAL x, REAL x, REAL x, REAL x, GpUnit x,
+ GpImageAttributes* x, DrawImageAbort x, VOID* x ) ;
+FUNCTION: GpStatus GdipDrawImagePointsRectI ( GpGraphics* x, GpImage* x,
+ GpPoint* x, INT x, INT x, INT x, INT x, INT x, GpUnit x,
+ GpImageAttributes* x, DrawImageAbort x, VOID* x ) ;
+FUNCTION: GpStatus GdipDrawImageRect ( GpGraphics* x, GpImage* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawImageRectI ( GpGraphics* x, GpImage* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipDrawImageRectRect ( GpGraphics* x, GpImage* x, REAL x, REAL x, REAL x,
+ REAL x, REAL x, REAL x, REAL x, REAL x, GpUnit x, GpImageAttributes* x, DrawImageAbort x,
+ VOID* x ) ;
+FUNCTION: GpStatus GdipDrawImageRectRectI ( GpGraphics* x, GpImage* x, INT x, INT x, INT x,
+ INT x, INT x, INT x, INT x, INT x, GpUnit x, GpImageAttributes* x, DrawImageAbort x,
+ VOID* x ) ;
+FUNCTION: GpStatus GdipDrawLine ( GpGraphics* x, GpPen* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawLineI ( GpGraphics* x, GpPen* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipDrawLines ( GpGraphics* x, GpPen* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawLinesI ( GpGraphics* x, GpPen* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawPath ( GpGraphics* x, GpPen* x, GpPath* x ) ;
+FUNCTION: GpStatus GdipDrawPie ( GpGraphics* x, GpPen* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawPieI ( GpGraphics* x, GpPen* x, INT x, INT x, INT x, INT x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawPolygon ( GpGraphics* x, GpPen* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawPolygonI ( GpGraphics* x, GpPen* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawRectangle ( GpGraphics* x, GpPen* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawRectangleI ( GpGraphics* x, GpPen* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipDrawRectangles ( GpGraphics* x, GpPen* x, GpRectF* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawRectanglesI ( GpGraphics* x, GpPen* x, GpRect* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawString ( GpGraphics* x, WCHAR* x, INT x,
+ GpFont* x, GpRectF* x, GpStringFormat* x,
+ GpBrush* x ) ;
+FUNCTION: GpStatus GdipFillClosedCurve2 ( GpGraphics* x, GpBrush* x, GpPointF* x, INT x,
+ REAL x, GpFillMode x ) ;
+FUNCTION: GpStatus GdipFillClosedCurve2I ( GpGraphics* x, GpBrush* x, GpPoint* x, INT x,
+ REAL x, GpFillMode x ) ;
+FUNCTION: GpStatus GdipFillEllipse ( GpGraphics* x, GpBrush* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipFillEllipseI ( GpGraphics* x, GpBrush* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipFillPath ( GpGraphics* x, GpBrush* x, GpPath* x ) ;
+FUNCTION: GpStatus GdipFillPie ( GpGraphics* x, GpBrush* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipFillPieI ( GpGraphics* x, GpBrush* x, INT x, INT x, INT x, INT x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipFillPolygon ( GpGraphics* x, GpBrush* x, GpPointF* x,
+ INT x, GpFillMode x ) ;
+FUNCTION: GpStatus GdipFillPolygonI ( GpGraphics* x, GpBrush* x, GpPoint* x,
+ INT x, GpFillMode x ) ;
+FUNCTION: GpStatus GdipFillPolygon2 ( GpGraphics* x, GpBrush* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipFillPolygon2I ( GpGraphics* x, GpBrush* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipFillRectangle ( GpGraphics* x, GpBrush* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipFillRectangleI ( GpGraphics* x, GpBrush* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipFillRectangles ( GpGraphics* x, GpBrush* x, GpRectF* x, INT x ) ;
+FUNCTION: GpStatus GdipFillRectanglesI ( GpGraphics* x, GpBrush* x, GpRect* x, INT x ) ;
+FUNCTION: GpStatus GdipFillRegion ( GpGraphics* x, GpBrush* x, GpRegion* x ) ;
+FUNCTION: GpStatus GdipGetClip ( GpGraphics* x, GpRegion* x ) ;
+FUNCTION: GpStatus GdipGetClipBounds ( GpGraphics* x, GpRectF* x ) ;
+FUNCTION: GpStatus GdipGetClipBoundsI ( GpGraphics* x, GpRect* x ) ;
+FUNCTION: GpStatus GdipGetCompositingMode ( GpGraphics* x, CompositingMode* x ) ;
+FUNCTION: GpStatus GdipGetCompositingQuality ( GpGraphics* x, CompositingQuality* x ) ;
+FUNCTION: GpStatus GdipGetDC ( GpGraphics* x, HDC* x ) ;
+FUNCTION: GpStatus GdipGetDpiX ( GpGraphics* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetDpiY ( GpGraphics* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetImageDecoders ( UINT x, UINT x, ImageCodecInfo* x ) ;
+FUNCTION: GpStatus GdipGetImageDecodersSize ( UINT* x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetImageGraphicsContext ( GpImage* x, GpGraphics** x ) ;
+FUNCTION: GpStatus GdipGetInterpolationMode ( GpGraphics* x, InterpolationMode* x ) ;
+FUNCTION: GpStatus GdipGetNearestColor ( GpGraphics* x, ARGB* x ) ;
+FUNCTION: GpStatus GdipGetPageScale ( GpGraphics* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetPageUnit ( GpGraphics* x, GpUnit* x ) ;
+FUNCTION: GpStatus GdipGetPixelOffsetMode ( GpGraphics* x, PixelOffsetMode* x ) ;
+FUNCTION: GpStatus GdipGetSmoothingMode ( GpGraphics* x, SmoothingMode* x ) ;
+FUNCTION: GpStatus GdipGetTextContrast ( GpGraphics* x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetTextRenderingHint ( GpGraphics* x, TextRenderingHint* x ) ;
+FUNCTION: GpStatus GdipGetWorldTransform ( GpGraphics* x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipGraphicsClear ( GpGraphics* x, ARGB x ) ;
+FUNCTION: GpStatus GdipGetVisibleClipBounds ( GpGraphics* x, GpRectF* x ) ;
+FUNCTION: GpStatus GdipGetVisibleClipBoundsI ( GpGraphics* x, GpRect* x ) ;
+FUNCTION: GpStatus GdipIsClipEmpty ( GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisiblePoint ( GpGraphics* x, REAL x, REAL x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisiblePointI ( GpGraphics* x, INT x, INT x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisibleRect ( GpGraphics* x, REAL x, REAL x, REAL x, REAL x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisibleRectI ( GpGraphics* x, INT x, INT x, INT x, INT x, BOOL* x ) ;
+FUNCTION: GpStatus GdipMeasureCharacterRanges ( GpGraphics* x, WCHAR* x,
+ INT x, GpFont* x, GpRectF* x, GpStringFormat* x, INT x,
+ GpRegion** x ) ;
+FUNCTION: GpStatus GdipMeasureDriverString ( GpGraphics* x, UINT16* x, INT x,
+ GpFont* x, GpPointF* x, INT x, GpMatrix* x, GpRectF* x ) ;
+FUNCTION: GpStatus GdipMeasureString ( GpGraphics* x, WCHAR* x, INT x,
+ GpFont* x, GpRectF* x, GpStringFormat* x, GpRectF* x, INT* x, INT* x ) ;
+FUNCTION: GpStatus GdipMultiplyWorldTransform ( GpGraphics* x, GpMatrix* x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipRecordMetafileFileName ( WCHAR* x, HDC x, EmfType x,
+ GpRectF* x, MetafileFrameUnit x, WCHAR* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipRecordMetafileFileNameI ( WCHAR* x, HDC x, EmfType x,
+ GpRect* x, MetafileFrameUnit x, WCHAR* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipRecordMetafileI ( HDC x, EmfType x, GpRect* x,
+ MetafileFrameUnit x, WCHAR* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipReleaseDC ( GpGraphics* x, HDC x ) ;
+FUNCTION: GpStatus GdipResetClip ( GpGraphics* x ) ;
+FUNCTION: GpStatus GdipResetWorldTransform ( GpGraphics* x ) ;
+FUNCTION: GpStatus GdipRestoreGraphics ( GpGraphics* x, GraphicsState x ) ;
+FUNCTION: GpStatus GdipRotateWorldTransform ( GpGraphics* x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipSaveGraphics ( GpGraphics* x, GraphicsState* x ) ;
+FUNCTION: GpStatus GdipScaleWorldTransform ( GpGraphics* x, REAL x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipSetClipHrgn ( GpGraphics* x, HRGN x, CombineMode x ) ;
+FUNCTION: GpStatus GdipSetClipGraphics ( GpGraphics* x, GpGraphics* x, CombineMode x ) ;
+FUNCTION: GpStatus GdipSetClipPath ( GpGraphics* x, GpPath* x, CombineMode x ) ;
+FUNCTION: GpStatus GdipSetClipRect ( GpGraphics* x, REAL x, REAL x, REAL x, REAL x, CombineMode x ) ;
+FUNCTION: GpStatus GdipSetClipRectI ( GpGraphics* x, INT x, INT x, INT x, INT x, CombineMode x ) ;
+FUNCTION: GpStatus GdipSetClipRegion ( GpGraphics* x, GpRegion* x, CombineMode x ) ;
+FUNCTION: GpStatus GdipSetCompositingMode ( GpGraphics* x, CompositingMode x ) ;
+FUNCTION: GpStatus GdipSetCompositingQuality ( GpGraphics* x, CompositingQuality x ) ;
+FUNCTION: GpStatus GdipSetInterpolationMode ( GpGraphics* x, InterpolationMode x ) ;
+FUNCTION: GpStatus GdipSetPageScale ( GpGraphics* x, REAL x ) ;
+FUNCTION: GpStatus GdipSetPageUnit ( GpGraphics* x, GpUnit x ) ;
+FUNCTION: GpStatus GdipSetPixelOffsetMode ( GpGraphics* x, PixelOffsetMode x ) ;
+FUNCTION: GpStatus GdipSetRenderingOrigin ( GpGraphics* x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipSetSmoothingMode ( GpGraphics* x, SmoothingMode x ) ;
+FUNCTION: GpStatus GdipSetTextContrast ( GpGraphics* x, UINT x ) ;
+FUNCTION: GpStatus GdipSetTextRenderingHint ( GpGraphics* x, TextRenderingHint x ) ;
+FUNCTION: GpStatus GdipSetWorldTransform ( GpGraphics* x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipTransformPoints ( GpGraphics* x, GpCoordinateSpace x, GpCoordinateSpace x,
+ GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipTransformPointsI ( GpGraphics* x, GpCoordinateSpace x, GpCoordinateSpace x,
+ GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipTranslateClip ( GpGraphics* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipTranslateClipI ( GpGraphics* x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipTranslateWorldTransform ( GpGraphics* x, REAL x, REAL x, GpMatrixOrder x ) ;
+
+
+FUNCTION: GpStatus GdipAddPathArc ( GpPath* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathArcI ( GpPath* x, INT x, INT x, INT x, INT x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathBezier ( GpPath* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathBezierI ( GpPath* x, INT x, INT x, INT x, INT x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathBeziers ( GpPath* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathBeziersI ( GpPath* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathClosedCurve ( GpPath* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathClosedCurveI ( GpPath* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathClosedCurve2 ( GpPath* x, GpPointF* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathClosedCurve2I ( GpPath* x, GpPoint* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathCurve ( GpPath* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathCurveI ( GpPath* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathCurve2 ( GpPath* x, GpPointF* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathCurve2I ( GpPath* x, GpPoint* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathCurve3 ( GpPath* x, GpPointF* x, INT x, INT x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathCurve3I ( GpPath* x, GpPoint* x, INT x, INT x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathEllipse ( GpPath* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathEllipseI ( GpPath* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathLine ( GpPath* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathLineI ( GpPath* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathLine2 ( GpPath* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathLine2I ( GpPath* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathPath ( GpPath* x, GpPath* x, BOOL x ) ;
+FUNCTION: GpStatus GdipAddPathPie ( GpPath* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathPieI ( GpPath* x, INT x, INT x, INT x, INT x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathPolygon ( GpPath* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathPolygonI ( GpPath* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathRectangle ( GpPath* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathRectangleI ( GpPath* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathRectangles ( GpPath* x, GpRectF* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathRectanglesI ( GpPath* x, GpRect* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathString ( GpPath* x, WCHAR* x, INT x, GpFontFamily* x, INT x, REAL x, GpRectF* x, GpStringFormat* x ) ;
+FUNCTION: GpStatus GdipAddPathStringI ( GpPath* x, WCHAR* x, INT x, GpFontFamily* x, INT x, REAL x, GpRect* x, GpStringFormat* x ) ;
+FUNCTION: GpStatus GdipClearPathMarkers ( GpPath* x ) ;
+FUNCTION: GpStatus GdipClonePath ( GpPath* x, GpPath** x ) ;
+FUNCTION: GpStatus GdipClosePathFigure ( GpPath* x ) ;
+FUNCTION: GpStatus GdipClosePathFigures ( GpPath* x ) ;
+FUNCTION: GpStatus GdipCreatePath ( GpFillMode x, GpPath** x ) ;
+FUNCTION: GpStatus GdipCreatePath2 ( GpPointF* x, BYTE* x, INT x,
+ GpFillMode x, GpPath** x ) ;
+FUNCTION: GpStatus GdipCreatePath2I ( GpPoint* x, BYTE* x, INT x, GpFillMode x, GpPath** x ) ;
+FUNCTION: GpStatus GdipDeletePath ( GpPath* x ) ;
+FUNCTION: GpStatus GdipFlattenPath ( GpPath* x, GpMatrix* x, REAL x ) ;
+FUNCTION: GpStatus GdipIsOutlineVisiblePathPoint ( GpPath* x, REAL x, REAL x, GpPen* x,
+ GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsOutlineVisiblePathPointI ( GpPath* x, INT x, INT x, GpPen* x,
+ GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisiblePathPoint ( GpPath* x, REAL x, REAL x, GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisiblePathPointI ( GpPath* x, INT x, INT x, GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipGetPathData ( GpPath* x, GpPathData* x ) ;
+FUNCTION: GpStatus GdipGetPathFillMode ( GpPath* x, GpFillMode* x ) ;
+FUNCTION: GpStatus GdipGetPathLastPoint ( GpPath* x, GpPointF* x ) ;
+FUNCTION: GpStatus GdipGetPathPoints ( GpPath* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipGetPathPointsI ( GpPath* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipGetPathTypes ( GpPath* x, BYTE* x, INT x ) ;
+FUNCTION: GpStatus GdipGetPathWorldBounds ( GpPath* x, GpRectF* x, GpMatrix* x, GpPen* x ) ;
+FUNCTION: GpStatus GdipGetPathWorldBoundsI ( GpPath* x, GpRect* x, GpMatrix* x, GpPen* x ) ;
+FUNCTION: GpStatus GdipGetPointCount ( GpPath* x, INT* x ) ;
+FUNCTION: GpStatus GdipResetPath ( GpPath* x ) ;
+FUNCTION: GpStatus GdipReversePath ( GpPath* x ) ;
+FUNCTION: GpStatus GdipSetPathFillMode ( GpPath* x, GpFillMode x ) ;
+FUNCTION: GpStatus GdipSetPathMarker ( GpPath* x ) ;
+FUNCTION: GpStatus GdipStartPathFigure ( GpPath* x ) ;
+FUNCTION: GpStatus GdipTransformPath ( GpPath* x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipWarpPath ( GpPath* x, GpMatrix* x, GpPointF* x, INT x, REAL x,
+ REAL x, REAL x, REAL x, WarpMode x, REAL x ) ;
+FUNCTION: GpStatus GdipWidenPath ( GpPath* x, GpPen* x, GpMatrix* x, REAL x ) ;
+
+
+FUNCTION: GpStatus GdipCreateHatchBrush ( HatchStyle x, ARGB x, ARGB x, GpHatch** x ) ;
+FUNCTION: GpStatus GdipGetHatchBackgroundColor ( GpHatch* x, ARGB* x ) ;
+FUNCTION: GpStatus GdipGetHatchForegroundColor ( GpHatch* x, ARGB* x ) ;
+FUNCTION: GpStatus GdipGetHatchStyle ( GpHatch* x, HatchStyle* x ) ;
+
+
+FUNCTION: GpStatus GdipCloneImage ( GpImage* x, GpImage** x ) ;
+FUNCTION: GpStatus GdipCloneImageAttributes ( GpImageAttributes* x, GpImageAttributes** x ) ;
+FUNCTION: GpStatus GdipDisposeImage ( GpImage* x ) ;
+FUNCTION: GpStatus GdipEmfToWmfBits ( HENHMETAFILE x, UINT x, LPBYTE x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipFindFirstImageItem ( GpImage* x, ImageItemData* x ) ;
+FUNCTION: GpStatus GdipFindNextImageItem ( GpImage* x, ImageItemData* x ) ;
+FUNCTION: GpStatus GdipGetAllPropertyItems ( GpImage* x, UINT x, UINT x, PropertyItem* x ) ;
+FUNCTION: GpStatus GdipGetImageBounds ( GpImage* x, GpRectF* x, GpUnit* x ) ;
+FUNCTION: GpStatus GdipGetImageDimension ( GpImage* x, REAL* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetImageFlags ( GpImage* x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetImageHeight ( GpImage* x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetImageHorizontalResolution ( GpImage* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetImageItemData ( GpImage* x, ImageItemData* x ) ;
+FUNCTION: GpStatus GdipGetImagePalette ( GpImage* x, ColorPalette* x, INT x ) ;
+FUNCTION: GpStatus GdipGetImagePaletteSize ( GpImage* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetImagePixelFormat ( GpImage* x, PixelFormat* x ) ;
+FUNCTION: GpStatus GdipGetImageRawFormat ( GpImage* x, GUID* x ) ;
+FUNCTION: GpStatus GdipGetImageThumbnail ( GpImage* x, UINT x, UINT x, GpImage** x, GetThumbnailImageAbort x, VOID* x ) ;
+FUNCTION: GpStatus GdipGetImageType ( GpImage* x, ImageType* x ) ;
+FUNCTION: GpStatus GdipGetImageVerticalResolution ( GpImage* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetImageWidth ( GpImage* x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetPropertyCount ( GpImage* x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetPropertyIdList ( GpImage* x, UINT x, PROPID* x ) ;
+FUNCTION: GpStatus GdipGetPropertyItem ( GpImage* x, PROPID x, UINT x, PropertyItem* x ) ;
+FUNCTION: GpStatus GdipGetPropertyItemSize ( GpImage* x, PROPID x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetPropertySize ( GpImage* x, UINT* x, UINT* x ) ;
+FUNCTION: GpStatus GdipImageForceValidation ( GpImage* x ) ;
+FUNCTION: GpStatus GdipImageGetFrameCount ( GpImage* x, GUID* x, UINT* x ) ;
+FUNCTION: GpStatus GdipImageGetFrameDimensionsCount ( GpImage* x, UINT* x ) ;
+FUNCTION: GpStatus GdipImageGetFrameDimensionsList ( GpImage* x, GUID* x, UINT x ) ;
+FUNCTION: GpStatus GdipImageRotateFlip ( GpImage* x, RotateFlipType x ) ;
+FUNCTION: GpStatus GdipImageSelectActiveFrame ( GpImage* x, GUID* x, UINT x ) ;
+FUNCTION: GpStatus GdipLoadImageFromFile ( WCHAR* x, GpImage** x ) ;
+FUNCTION: GpStatus GdipLoadImageFromFileICM ( WCHAR* x, GpImage** x ) ;
+FUNCTION: GpStatus GdipLoadImageFromStream ( IStream* x, GpImage** x ) ;
+FUNCTION: GpStatus GdipLoadImageFromStreamICM ( IStream* x, GpImage** x ) ;
+FUNCTION: GpStatus GdipRemovePropertyItem ( GpImage* x, PROPID x ) ;
+FUNCTION: GpStatus GdipSaveImageToFile ( GpImage* x, WCHAR* x, CLSID* x, EncoderParameters* x ) ;
+FUNCTION: GpStatus GdipSaveImageToStream ( GpImage* x, IStream* x,
+ CLSID* x, EncoderParameters* x ) ;
+FUNCTION: GpStatus GdipSetImagePalette ( GpImage* x, ColorPalette* x ) ;
+FUNCTION: GpStatus GdipSetPropertyItem ( GpImage* x, PropertyItem* x ) ;
+
+
+FUNCTION: GpStatus GdipCreateImageAttributes ( GpImageAttributes** x ) ;
+FUNCTION: GpStatus GdipDisposeImageAttributes ( GpImageAttributes* x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesCachedBackground ( GpImageAttributes* x,
+ BOOL x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesColorKeys ( GpImageAttributes* x,
+ ColorAdjustType x, BOOL x, ARGB x, ARGB x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesColorMatrix ( GpImageAttributes* x,
+ ColorAdjustType x, BOOL x, ColorMatrix* x, ColorMatrix* x,
+ ColorMatrixFlags x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesGamma ( GpImageAttributes* x,
+ ColorAdjustType x, BOOL x, REAL x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesNoOp ( GpImageAttributes* x,
+ ColorAdjustType x, BOOL x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesOutputChannel ( GpImageAttributes* x,
+ ColorAdjustType x, BOOL x, ColorChannelFlags x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesOutputChannelColorProfile (
+ GpImageAttributes* x, ColorAdjustType x, BOOL x, WCHAR* x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesRemapTable ( GpImageAttributes* x,
+ ColorAdjustType x, BOOL x, UINT x, ColorMap* x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesThreshold ( GpImageAttributes* x,
+ ColorAdjustType x, BOOL x, REAL x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesToIdentity ( GpImageAttributes* x,
+ ColorAdjustType x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesWrapMode ( GpImageAttributes* x, GpWrapMode x,
+ ARGB x, BOOL x ) ;
+
+
+FUNCTION: GpStatus GdipCreateLineBrush ( GpPointF* x, GpPointF* x,
+ ARGB x, ARGB x, GpWrapMode x, GpLineGradient** x ) ;
+FUNCTION: GpStatus GdipCreateLineBrushI ( GpPoint* x, GpPoint* x,
+ ARGB x, ARGB x, GpWrapMode x, GpLineGradient** x ) ;
+FUNCTION: GpStatus GdipCreateLineBrushFromRect ( GpRectF* x, ARGB x, ARGB x,
+ LinearGradientMode x, GpWrapMode x, GpLineGradient** x ) ;
+FUNCTION: GpStatus GdipCreateLineBrushFromRectI ( GpRect* x, ARGB x, ARGB x,
+ LinearGradientMode x, GpWrapMode x, GpLineGradient** x ) ;
+FUNCTION: GpStatus GdipCreateLineBrushFromRectWithAngle ( GpRectF* x,
+ ARGB x, ARGB x, REAL x, BOOL x, GpWrapMode x, GpLineGradient** x ) ;
+FUNCTION: GpStatus GdipCreateLineBrushFromRectWithAngleI ( GpRect* x,
+ ARGB x, ARGB x, REAL x, BOOL x, GpWrapMode x, GpLineGradient** x ) ;
+FUNCTION: GpStatus GdipGetLineColors ( GpLineGradient* x, ARGB* x ) ;
+FUNCTION: GpStatus GdipGetLineGammaCorrection ( GpLineGradient* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipGetLineRect ( GpLineGradient* x, GpRectF* x ) ;
+FUNCTION: GpStatus GdipGetLineRectI ( GpLineGradient* x, GpRect* x ) ;
+FUNCTION: GpStatus GdipGetLineWrapMode ( GpLineGradient* x, GpWrapMode* x ) ;
+FUNCTION: GpStatus GdipSetLineBlend ( GpLineGradient* x, REAL* x,
+ REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipGetLineBlend ( GpLineGradient* x, REAL* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipGetLineBlendCount ( GpLineGradient* x, INT* x ) ;
+FUNCTION: GpStatus GdipSetLinePresetBlend ( GpLineGradient* x, ARGB* x,
+ REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipGetLinePresetBlend ( GpLineGradient* x, ARGB* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipGetLinePresetBlendCount ( GpLineGradient* x, INT* x ) ;
+FUNCTION: GpStatus GdipResetLineTransform ( GpLineGradient* x ) ;
+FUNCTION: GpStatus GdipRotateLineTransform ( GpLineGradient* x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipScaleLineTransform ( GpLineGradient* x, REAL x, REAL x,
+ GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipSetLineColors ( GpLineGradient* x, ARGB x, ARGB x ) ;
+FUNCTION: GpStatus GdipSetLineGammaCorrection ( GpLineGradient* x, BOOL x ) ;
+FUNCTION: GpStatus GdipSetLineSigmaBlend ( GpLineGradient* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipSetLineTransform ( GpLineGradient* x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipSetLineLinearBlend ( GpLineGradient* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipSetLineWrapMode ( GpLineGradient* x, GpWrapMode x ) ;
+FUNCTION: GpStatus GdipTranslateLineTransform ( GpLineGradient* x, REAL x, REAL x,
+ GpMatrixOrder x ) ;
+
+
+FUNCTION: GpStatus GdipCloneMatrix ( GpMatrix* x, GpMatrix** x ) ;
+FUNCTION: GpStatus GdipCreateMatrix ( GpMatrix** x ) ;
+FUNCTION: GpStatus GdipCreateMatrix2 ( REAL x, REAL x, REAL x, REAL x, REAL x, REAL x, GpMatrix** x ) ;
+FUNCTION: GpStatus GdipCreateMatrix3 ( GpRectF* x, GpPointF* x, GpMatrix** x ) ;
+FUNCTION: GpStatus GdipCreateMatrix3I ( GpRect* x, GpPoint* x, GpMatrix** x ) ;
+FUNCTION: GpStatus GdipDeleteMatrix ( GpMatrix* x ) ;
+FUNCTION: GpStatus GdipGetMatrixElements ( GpMatrix* x, REAL* x ) ;
+FUNCTION: GpStatus GdipInvertMatrix ( GpMatrix* x ) ;
+FUNCTION: GpStatus GdipIsMatrixEqual ( GpMatrix* x, GpMatrix* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsMatrixIdentity ( GpMatrix* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsMatrixInvertible ( GpMatrix* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipMultiplyMatrix ( GpMatrix* x, GpMatrix* x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipRotateMatrix ( GpMatrix* x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipShearMatrix ( GpMatrix* x, REAL x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipScaleMatrix ( GpMatrix* x, REAL x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipSetMatrixElements ( GpMatrix* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipTransformMatrixPoints ( GpMatrix* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipTransformMatrixPointsI ( GpMatrix* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipTranslateMatrix ( GpMatrix* x, REAL x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipVectorTransformMatrixPoints ( GpMatrix* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipVectorTransformMatrixPointsI ( GpMatrix* x, GpPoint* x, INT x ) ;
+
+
+FUNCTION: GpStatus GdipConvertToEmfPlus ( GpGraphics* x, GpMetafile* x, INT* x,
+ EmfType x, WCHAR* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipConvertToEmfPlusToFile ( GpGraphics* x, GpMetafile* x, INT* x, WCHAR* x, EmfType x, WCHAR* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipConvertToEmfPlusToStream ( GpGraphics* x, GpMetafile* x, INT* x, IStream* x, EmfType x, WCHAR* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipCreateMetafileFromEmf ( HENHMETAFILE x, BOOL x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipCreateMetafileFromWmf ( HMETAFILE x, BOOL x,
+ WmfPlaceableFileHeader* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipCreateMetafileFromWmfFile ( WCHAR* x, WmfPlaceableFileHeader* x,
+ GpMetafile** x ) ;
+FUNCTION: GpStatus GdipCreateMetafileFromFile ( WCHAR* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipCreateMetafileFromStream ( IStream* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipSetMetafileDownLevelRasterizationLimit ( GpMetafile* x, UINT x ) ;
+
+
+FUNCTION: GpStatus GdipGetMetafileHeaderFromEmf ( HENHMETAFILE x, MetafileHeader* x ) ;
+FUNCTION: GpStatus GdipGetMetafileHeaderFromFile ( WCHAR* x, MetafileHeader* x ) ;
+FUNCTION: GpStatus GdipGetMetafileHeaderFromMetafile ( GpMetafile* x, MetafileHeader* x ) ;
+FUNCTION: GpStatus GdipGetMetafileHeaderFromStream ( IStream* x, MetafileHeader* x ) ;
+FUNCTION: GpStatus GdipGetMetafileHeaderFromWmf ( HMETAFILE x, WmfPlaceableFileHeader* x, MetafileHeader* x ) ;
+
+
+FUNCTION: GpStatus GdiplusNotificationHook ( ULONG_PTR* x ) ;
+FUNCTION: void GdiplusNotificationUnhook ( ULONG_PTR x ) ;
+
+
+FUNCTION: GpStatus GdipCreatePathGradient ( GpPointF* x, INT x, GpWrapMode x, GpPathGradient** x ) ;
+FUNCTION: GpStatus GdipCreatePathGradientI ( GpPoint* x, INT x, GpWrapMode x, GpPathGradient** x ) ;
+FUNCTION: GpStatus GdipCreatePathGradientFromPath ( GpPath* x,
+ GpPathGradient** x ) ;
+FUNCTION: GpStatus GdipGetPathGradientBlend ( GpPathGradient* x, REAL* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipGetPathGradientBlendCount ( GpPathGradient* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientCenterColor ( GpPathGradient* x, ARGB* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientCenterPoint ( GpPathGradient* x, GpPointF* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientCenterPointI ( GpPathGradient* x, GpPoint* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientFocusScales ( GpPathGradient* x, REAL* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientGammaCorrection ( GpPathGradient* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientPointCount ( GpPathGradient* x, INT* x ) ;
+FUNCTION: GpStatus GdipSetPathGradientPresetBlend ( GpPathGradient* x,
+ ARGB* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipGetPathGradientRect ( GpPathGradient* x, GpRectF* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientRectI ( GpPathGradient* x, GpRect* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientSurroundColorsWithCount ( GpPathGradient* x,
+ ARGB* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientWrapMode ( GpPathGradient* x, GpWrapMode* x ) ;
+FUNCTION: GpStatus GdipSetPathGradientBlend ( GpPathGradient* x, REAL* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipSetPathGradientCenterColor ( GpPathGradient* x, ARGB x ) ;
+FUNCTION: GpStatus GdipSetPathGradientCenterPoint ( GpPathGradient* x, GpPointF* x ) ;
+FUNCTION: GpStatus GdipSetPathGradientCenterPointI ( GpPathGradient* x, GpPoint* x ) ;
+FUNCTION: GpStatus GdipSetPathGradientFocusScales ( GpPathGradient* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipSetPathGradientGammaCorrection ( GpPathGradient* x, BOOL x ) ;
+FUNCTION: GpStatus GdipSetPathGradientSigmaBlend ( GpPathGradient* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipSetPathGradientSurroundColorsWithCount ( GpPathGradient* x,
+ ARGB* x, INT* x ) ;
+FUNCTION: GpStatus GdipSetPathGradientWrapMode ( GpPathGradient* x, GpWrapMode x ) ;
+FUNCTION: GpStatus GdipGetPathGradientSurroundColorCount ( GpPathGradient* x, INT* x ) ;
+
+
+FUNCTION: GpStatus GdipCreatePathIter ( GpPathIterator** x, GpPath* x ) ;
+FUNCTION: GpStatus GdipDeletePathIter ( GpPathIterator* x ) ;
+FUNCTION: GpStatus GdipPathIterCopyData ( GpPathIterator* x, INT* x, GpPointF* x, BYTE* x,
+ INT x, INT x ) ;
+FUNCTION: GpStatus GdipPathIterGetCount ( GpPathIterator* x, INT* x ) ;
+FUNCTION: GpStatus GdipPathIterGetSubpathCount ( GpPathIterator* x, INT* x ) ;
+FUNCTION: GpStatus GdipPathIterEnumerate ( GpPathIterator* x, INT* x, GpPointF* x, BYTE* x, INT x ) ;
+FUNCTION: GpStatus GdipPathIterHasCurve ( GpPathIterator* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipPathIterIsValid ( GpPathIterator* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipPathIterNextMarker ( GpPathIterator* x, INT* x, INT* x, INT* x ) ;
+FUNCTION: GpStatus GdipPathIterNextMarkerPath ( GpPathIterator* x, INT* x, GpPath* x ) ;
+FUNCTION: GpStatus GdipPathIterNextPathType ( GpPathIterator* x, INT* x, BYTE* x, INT* x, INT* x ) ;
+FUNCTION: GpStatus GdipPathIterNextSubpath ( GpPathIterator* x, INT* x, INT* x, INT* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipPathIterNextSubpathPath ( GpPathIterator* x, INT* x, GpPath* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipPathIterRewind ( GpPathIterator* x ) ;
+
+
+FUNCTION: GpStatus GdipClonePen ( GpPen* x, GpPen** x ) ;
+FUNCTION: GpStatus GdipCreatePen1 ( ARGB x, REAL x, GpUnit x, GpPen** x ) ;
+FUNCTION: GpStatus GdipCreatePen2 ( GpBrush* x, REAL x, GpUnit x, GpPen** x ) ;
+FUNCTION: GpStatus GdipDeletePen ( GpPen* x ) ;
+FUNCTION: GpStatus GdipGetPenBrushFill ( GpPen* x, GpBrush** x ) ;
+FUNCTION: GpStatus GdipGetPenColor ( GpPen* x, ARGB* x ) ;
+FUNCTION: GpStatus GdipGetPenCustomStartCap ( GpPen* x, GpCustomLineCap** x ) ;
+FUNCTION: GpStatus GdipGetPenCustomEndCap ( GpPen* x, GpCustomLineCap** x ) ;
+FUNCTION: GpStatus GdipGetPenDashArray ( GpPen* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipGetPenDashCount ( GpPen* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetPenDashOffset ( GpPen* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetPenDashStyle ( GpPen* x, GpDashStyle* x ) ;
+FUNCTION: GpStatus GdipGetPenMode ( GpPen* x, GpPenAlignment* x ) ;
+FUNCTION: GpStatus GdipResetPenTransform ( GpPen* x ) ;
+FUNCTION: GpStatus GdipScalePenTransform ( GpPen* x, REAL x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipSetPenBrushFill ( GpPen* x, GpBrush* x ) ;
+FUNCTION: GpStatus GdipSetPenColor ( GpPen* x, ARGB x ) ;
+FUNCTION: GpStatus GdipSetPenCompoundArray ( GpPen* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipSetPenCustomEndCap ( GpPen* x, GpCustomLineCap* x ) ;
+FUNCTION: GpStatus GdipSetPenCustomStartCap ( GpPen* x, GpCustomLineCap* x ) ;
+FUNCTION: GpStatus GdipSetPenDashArray ( GpPen* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipSetPenDashCap197819 ( GpPen* x, GpDashCap x ) ;
+FUNCTION: GpStatus GdipSetPenDashOffset ( GpPen* x, REAL x ) ;
+FUNCTION: GpStatus GdipSetPenDashStyle ( GpPen* x, GpDashStyle x ) ;
+FUNCTION: GpStatus GdipSetPenEndCap ( GpPen* x, GpLineCap x ) ;
+FUNCTION: GpStatus GdipGetPenFillType ( GpPen* x, GpPenType* x ) ;
+FUNCTION: GpStatus GdipSetPenLineCap197819 ( GpPen* x, GpLineCap x, GpLineCap x, GpDashCap x ) ;
+FUNCTION: GpStatus GdipSetPenLineJoin ( GpPen* x, GpLineJoin x ) ;
+FUNCTION: GpStatus GdipSetPenMode ( GpPen* x, GpPenAlignment x ) ;
+FUNCTION: GpStatus GdipSetPenMiterLimit ( GpPen* x, REAL x ) ;
+FUNCTION: GpStatus GdipSetPenStartCap ( GpPen* x, GpLineCap x ) ;
+FUNCTION: GpStatus GdipSetPenWidth ( GpPen* x, REAL x ) ;
+FUNCTION: GpStatus GdipGetPenDashCap197819 ( GpPen* x, GpDashCap* x ) ;
+FUNCTION: GpStatus GdipGetPenEndCap ( GpPen* x, GpLineCap* x ) ;
+FUNCTION: GpStatus GdipGetPenLineJoin ( GpPen* x, GpLineJoin* x ) ;
+FUNCTION: GpStatus GdipGetPenMiterLimit ( GpPen* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetPenStartCap ( GpPen* x, GpLineCap* x ) ;
+FUNCTION: GpStatus GdipGetPenUnit ( GpPen* x, GpUnit* x ) ;
+FUNCTION: GpStatus GdipGetPenWidth ( GpPen* x, REAL* x ) ;
+
+
+FUNCTION: GpStatus GdipCloneRegion ( GpRegion* x, GpRegion** x ) ;
+FUNCTION: GpStatus GdipCombineRegionPath ( GpRegion* x, GpPath* x, CombineMode x ) ;
+FUNCTION: GpStatus GdipCombineRegionRect ( GpRegion* x, GpRectF* x, CombineMode x ) ;
+FUNCTION: GpStatus GdipCombineRegionRectI ( GpRegion* x, GpRect* x, CombineMode x ) ;
+FUNCTION: GpStatus GdipCombineRegionRegion ( GpRegion* x, GpRegion* x, CombineMode x ) ;
+FUNCTION: GpStatus GdipCreateRegion ( GpRegion** x ) ;
+FUNCTION: GpStatus GdipCreateRegionPath ( GpPath* x, GpRegion** x ) ;
+FUNCTION: GpStatus GdipCreateRegionRect ( GpRectF* x, GpRegion** x ) ;
+FUNCTION: GpStatus GdipCreateRegionRectI ( GpRect* x, GpRegion** x ) ;
+FUNCTION: GpStatus GdipCreateRegionRgnData ( BYTE* x, INT x, GpRegion** x ) ;
+FUNCTION: GpStatus GdipCreateRegionHrgn ( HRGN x, GpRegion** x ) ;
+FUNCTION: GpStatus GdipDeleteRegion ( GpRegion* x ) ;
+FUNCTION: GpStatus GdipGetRegionBounds ( GpRegion* x, GpGraphics* x, GpRectF* x ) ;
+FUNCTION: GpStatus GdipGetRegionBoundsI ( GpRegion* x, GpGraphics* x, GpRect* x ) ;
+FUNCTION: GpStatus GdipGetRegionData ( GpRegion* x, BYTE* x, UINT x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetRegionDataSize ( GpRegion* x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetRegionHRgn ( GpRegion* x, GpGraphics* x, HRGN* x ) ;
+FUNCTION: GpStatus GdipIsEmptyRegion ( GpRegion* x, GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsEqualRegion ( GpRegion* x, GpRegion* x, GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsInfiniteRegion ( GpRegion* x, GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisibleRegionPoint ( GpRegion* x, REAL x, REAL x, GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisibleRegionPointI ( GpRegion* x, INT x, INT x, GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisibleRegionRect ( GpRegion* x, REAL x, REAL x, REAL x, REAL x, GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisibleRegionRectI ( GpRegion* x, INT x, INT x, INT x, INT x, GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipSetEmpty ( GpRegion* x ) ;
+FUNCTION: GpStatus GdipSetInfinite ( GpRegion* x ) ;
+FUNCTION: GpStatus GdipTransformRegion ( GpRegion* x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipTranslateRegion ( GpRegion* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipTranslateRegionI ( GpRegion* x, INT x, INT x ) ;
+
+
+FUNCTION: GpStatus GdipCreateSolidFill ( ARGB x, GpSolidFill** x ) ;
+FUNCTION: GpStatus GdipGetSolidFillColor ( GpSolidFill* x, ARGB* x ) ;
+FUNCTION: GpStatus GdipSetSolidFillColor ( GpSolidFill* x, ARGB x ) ;
+
+
+FUNCTION: GpStatus GdipCloneStringFormat ( GpStringFormat* x, GpStringFormat** x ) ;
+FUNCTION: GpStatus GdipCreateStringFormat ( INT x, LANGID x, GpStringFormat** x ) ;
+FUNCTION: GpStatus GdipDeleteStringFormat ( GpStringFormat* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatAlign ( GpStringFormat* x, StringAlignment* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatDigitSubstitution ( GpStringFormat* x, LANGID* x,
+ StringDigitSubstitute* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatFlags ( GpStringFormat* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatHotkeyPrefix ( GpStringFormat* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatLineAlign ( GpStringFormat* x, StringAlignment* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatMeasurableCharacterRangeCount (
+ GpStringFormat* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatTabStopCount ( GpStringFormat* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatTabStops ( GpStringFormat* x, INT x, REAL* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatTrimming ( GpStringFormat* x, StringTrimming* x ) ;
+FUNCTION: GpStatus GdipSetStringFormatAlign ( GpStringFormat* x, StringAlignment x ) ;
+FUNCTION: GpStatus GdipSetStringFormatDigitSubstitution ( GpStringFormat* x, LANGID x, StringDigitSubstitute x ) ;
+FUNCTION: GpStatus GdipSetStringFormatHotkeyPrefix ( GpStringFormat* x, INT x ) ;
+FUNCTION: GpStatus GdipSetStringFormatLineAlign ( GpStringFormat* x, StringAlignment x ) ;
+FUNCTION: GpStatus GdipSetStringFormatMeasurableCharacterRanges (
+ GpStringFormat* x, INT x, CharacterRange* x ) ;
+FUNCTION: GpStatus GdipSetStringFormatTabStops ( GpStringFormat* x, REAL x, INT x, REAL* x ) ;
+FUNCTION: GpStatus GdipSetStringFormatTrimming ( GpStringFormat* x, StringTrimming x ) ;
+FUNCTION: GpStatus GdipSetStringFormatFlags ( GpStringFormat* x, INT x ) ;
+FUNCTION: GpStatus GdipStringFormatGetGenericDefault ( GpStringFormat** x ) ;
+FUNCTION: GpStatus GdipStringFormatGetGenericTypographic ( GpStringFormat** x ) ;
+
+
+FUNCTION: GpStatus GdipCreateTexture ( GpImage* x, GpWrapMode x, GpTexture** x ) ;
+FUNCTION: GpStatus GdipCreateTexture2 ( GpImage* x, GpWrapMode x, REAL x, REAL x, REAL x, REAL x, GpTexture** x ) ;
+FUNCTION: GpStatus GdipCreateTexture2I ( GpImage* x, GpWrapMode x, INT x, INT x, INT x, INT x, GpTexture** x ) ;
+FUNCTION: GpStatus GdipCreateTextureIA ( GpImage* x, GpImageAttributes* x,
+ REAL x, REAL x, REAL x, REAL x, GpTexture** x ) ;
+FUNCTION: GpStatus GdipCreateTextureIAI ( GpImage* x, GpImageAttributes* x,
+ INT x, INT x, INT x, INT x, GpTexture** x ) ;
+FUNCTION: GpStatus GdipGetTextureTransform ( GpTexture* x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipGetTextureWrapMode ( GpTexture* x, GpWrapMode* x ) ;
+FUNCTION: GpStatus GdipMultiplyTextureTransform ( GpTexture* x,
+ GpMatrix* x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipResetTextureTransform ( GpTexture* x ) ;
+FUNCTION: GpStatus GdipRotateTextureTransform ( GpTexture* x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipScaleTextureTransform ( GpTexture* x, REAL x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipSetTextureTransform ( GpTexture* x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipSetTextureWrapMode ( GpTexture* x, GpWrapMode x ) ;
+FUNCTION: GpStatus GdipTranslateTextureTransform ( GpTexture* x, REAL x, REAL x,
+ GpMatrixOrder x ) ;
+
+
+FUNCTION: GpStatus GdipCreateStreamOnFile ( WCHAR* x, UINT x, IStream** x ) ;
+FUNCTION: GpStatus GdipGetImageEncodersSize ( UINT* numEncoders, UINT* size ) ;
+FUNCTION: GpStatus GdipGetImageEncoders ( UINT numEncoders, UINT size, ImageCodecInfo* encoders ) ;
+FUNCTION: GpStatus GdipTestControl ( GpTestControlEnum x, void* x ) ;
+
+ERROR: gdi+-error status ;
+
+: check-gdi+-status ( GpStatus -- )
+ dup Ok = [ drop ] [ gdi+-error ] if ;
+
+CONSTANT: standard-gdi+-startup-input
+ S{ GdiplusStartupInput
+ { GdiplusVersion 1 }
+ { DebugEventCallback f }
+ { SuppressBackgroundThread 0 }
+ { SuppressExternalCodecs 0 }
+ }
+
+: (start-gdi+) ( startup-input -- token startup-output )
+ { ULONG_PTR GdiplusStartupOutput }
+ [ swapd GdiplusStartup check-gdi+-status ] [ ] with-out-parameters ;
+: start-gdi+ ( -- token )
+ standard-gdi+-startup-input (start-gdi+) drop ; inline
+: stop-gdi+ ( token -- )
+ GdiplusShutdown ;
+
+DESTRUCTOR: stop-gdi+
diff --git a/basis/windows/gdiplus/platforms.txt b/basis/windows/gdiplus/platforms.txt
new file mode 100644
index 0000000000..8e1a55995e
--- /dev/null
+++ b/basis/windows/gdiplus/platforms.txt
@@ -0,0 +1 @@
+windows
diff --git a/basis/windows/nt/nt.factor b/basis/windows/nt/nt.factor
index 4b119ba5fa..7a875b295b 100644
--- a/basis/windows/nt/nt.factor
+++ b/basis/windows/nt/nt.factor
@@ -12,6 +12,7 @@ USING: alien sequences alien.libraries ;
{ "libm" "msvcrt.dll" cdecl }
{ "gl" "opengl32.dll" stdcall }
{ "glu" "glu32.dll" stdcall }
+ { "gdiplus" "gdiplus.dll" stdcall }
{ "ole32" "ole32.dll" stdcall }
{ "usp10" "usp10.dll" stdcall }
{ "psapi" "psapi.dll" stdcall }
diff --git a/basis/windows/ole32/ole32.factor b/basis/windows/ole32/ole32.factor
index 538a142878..8b0a2406c7 100644
--- a/basis/windows/ole32/ole32.factor
+++ b/basis/windows/ole32/ole32.factor
@@ -13,6 +13,9 @@ TYPEDEF: void* LPUNKNOWN
TYPEDEF: LPWSTR LPOLESTR
TYPEDEF: LPWSTR LPCOLESTR
+TYPEDEF: GUID IID
+TYPEDEF: GUID CLSID
+
TYPEDEF: REFGUID LPGUID
TYPEDEF: REFGUID REFIID
TYPEDEF: REFGUID REFCLSID
diff --git a/basis/windows/streams/platforms.txt b/basis/windows/streams/platforms.txt
new file mode 100644
index 0000000000..3646795db5
--- /dev/null
+++ b/basis/windows/streams/platforms.txt
@@ -0,0 +1 @@
+windows
diff --git a/basis/windows/streams/streams.factor b/basis/windows/streams/streams.factor
new file mode 100644
index 0000000000..33c519e500
--- /dev/null
+++ b/basis/windows/streams/streams.factor
@@ -0,0 +1,123 @@
+USING: accessors alien.c-types classes.struct combinators
+continuations io kernel libc literals locals sequences
+specialized-arrays windows.com memoize
+windows.com.wrapper windows.kernel32 windows.ole32
+windows.types ;
+IN: windows.streams
+
+SPECIALIZED-ARRAY: uchar
+
+ buf
+ buf length :> bytes
+ pv buf bytes memcpy
+ out-read [ bytes out-read 0 ULONG set-alien-value ] when
+
+ cb bytes = [ S_OK ] [ S_FALSE ] if
+ ] with-hresult ; inline
+
+:: IStream-write ( stream pv cb out-written -- hresult )
+ [
+ pv cb stream stream-write
+ out-written [ cb out-written 0 ULONG set-alien-value ] when
+ S_OK
+ ] with-hresult ; inline
+
+: origin>seek-type ( origin -- seek-type )
+ {
+ { $ STREAM_SEEK_SET [ seek-absolute ] }
+ { $ STREAM_SEEK_CUR [ seek-relative ] }
+ { $ STREAM_SEEK_END [ seek-end ] }
+ } case ;
+
+:: IStream-seek ( stream move origin new-position -- hresult )
+ [
+ move origin origin>seek-type stream stream-seek
+ new-position [
+ stream stream-tell new-position 0 ULARGE_INTEGER set-alien-value
+ ] when
+ S_OK
+ ] with-hresult ; inline
+
+:: IStream-set-size ( stream new-size -- hresult )
+ STG_E_INVALIDFUNCTION ;
+
+:: IStream-copy-to ( stream other-stream cb out-read out-written -- hresult )
+ [
+ cb stream stream-read :> buf
+ buf length :> bytes
+ out-read [ bytes out-read 0 ULONG set-alien-value ] when
+
+ other-stream buf bytes out-written IStream::Write
+ ] with-hresult ; inline
+
+:: IStream-commit ( stream flags -- hresult )
+ stream stream-flush S_OK ;
+
+:: IStream-revert ( stream -- hresult )
+ STG_E_INVALIDFUNCTION ;
+
+:: IStream-lock-region ( stream offset cb lock-type -- hresult )
+ STG_E_INVALIDFUNCTION ;
+
+:: IStream-unlock-region ( stream offset cb lock-type -- hresult )
+ STG_E_INVALIDFUNCTION ;
+
+:: stream-size ( stream -- size )
+ stream stream-tell :> old-pos
+ 0 seek-end stream stream-seek
+ stream stream-tell :> size
+ old-pos seek-absolute stream stream-seek
+ size ;
+
+:: IStream-stat ( stream out-stat stat-flag -- hresult )
+ [
+ out-stat
+ f >>pwcsName
+ STGTY_STREAM >>type
+ stream stream-size >>cbSize
+ FILETIME >>mtime
+ FILETIME >>ctime
+ FILETIME >>atime
+ STGM_READWRITE >>grfMode
+ 0 >>grfLocksSupported
+ GUID_NULL >>clsid
+ 0 >>grfStateBits
+ 0 >>reserved
+ drop
+ S_OK
+ ] with-hresult ;
+
+:: IStream-clone ( out-clone-stream -- hresult )
+ f out-clone-stream 0 void* set-alien-value
+ STG_E_INVALIDFUNCTION ;
+
+CONSTANT: stream-wrapper
+ $[
+ {
+ { IStream {
+ [ IStream-read ]
+ [ IStream-write ]
+ [ IStream-seek ]
+ [ IStream-set-size ]
+ [ IStream-copy-to ]
+ [ IStream-commit ]
+ [ IStream-revert ]
+ [ IStream-lock-region ]
+ [ IStream-unlock-region ]
+ [ IStream-stat ]
+ [ IStream-clone ]
+ } }
+ }
+ ]
+
+PRIVATE>
+
+: stream>IStream ( stream -- IStream )
+ stream-wrapper com-wrap ;
diff --git a/basis/windows/streams/summary.txt b/basis/windows/streams/summary.txt
new file mode 100644
index 0000000000..3578124ca3
--- /dev/null
+++ b/basis/windows/streams/summary.txt
@@ -0,0 +1 @@
+IStream interface wrapper for Factor stream objects
diff --git a/basis/windows/types/types.factor b/basis/windows/types/types.factor
index e2e4b113a4..3490e8083d 100644
--- a/basis/windows/types/types.factor
+++ b/basis/windows/types/types.factor
@@ -16,6 +16,8 @@ TYPEDEF: wchar_t WCHAR
TYPEDEF: short SHORT
TYPEDEF: ushort USHORT
+TYPEDEF: short INT16
+TYPEDEF: ushort UINT16
TYPEDEF: ushort WORD
TYPEDEF: ulong DWORD
@@ -94,7 +96,7 @@ TYPEDEF: HANDLE HDDEDATA
TYPEDEF: HANDLE HDESK
TYPEDEF: HANDLE HDROP
TYPEDEF: HANDLE HDWP
-TYPEDEF: HANDLE HENMETAFILE
+TYPEDEF: HANDLE HENHMETAFILE
TYPEDEF: HANDLE HFONT
TYPEDEF: HANDLE HGDIOBJ
TYPEDEF: HANDLE HGLOBAL
@@ -398,3 +400,5 @@ STRUCT: TEXTMETRICW
{ tmCharSet BYTE } ;
TYPEDEF: TEXTMETRICW* LPTEXTMETRIC
+
+TYPEDEF: ULONG PROPID
diff --git a/extra/gpu/textures/textures.factor b/extra/gpu/textures/textures.factor
index a240aae945..55e6f7c0f4 100644
--- a/extra/gpu/textures/textures.factor
+++ b/extra/gpu/textures/textures.factor
@@ -309,7 +309,7 @@ TYPED: read-compressed-texture ( tdt: texture-data-target level: integer -- byte
: read-texture-image ( tdt level -- image )
[ texture-dim ]
- [ drop texture-object [ component-order>> ] [ component-type>> ] bi f ]
+ [ drop texture-object [ component-order>> ] [ component-type>> ] bi f f ]
[ read-texture ] 2tri
image boa ; inline