'------------------------------------------------------------------------------
'
' DDRAW.INC -- DirectDraw Include for PB/DLL 5.0 Release 1 **ALPHA**
' [ddraw.h]
' Copyright 1999 sublevel6.
' Portions copyright Microsoft.
'
' Release date: Tuesday, June 29, 1999
' Homepage: http://www.force927.com/sublevel6
' E-Mail: [email protected] (to all members)
' [email protected] (to Dinky)
' [email protected] (to rYme)
'------------------------------------------------------------------------------
%PBDDAPI = 1
$IF NOT %DEF(%DIRECTDRAW_VERSION)
%DIRECTDRAW_VERSION = &H0500
$ENDIF
' To reduce the size of the compiled EXE you can disable support
' for some of the DirectDraw Interfaces by defining the following
' constants in your code:
' %PBDD_NODD = 1 ' Disable support for IDirectDraw (why?)
' %PBDD_NODDCLIPPER = 1 ' Disable support for IDirectDrawClipper
' %PBDD_NODDCOLORCONTROL = 1 ' Disable support for IDirectDrawColorControl
' %PBDD_NODDPALETTE = 1 ' Disable support for IDirectDrawPalette
' %PBDD_NODDSURFACE = 1 ' Disable support for IDirectDrawSurface
' GUIDs
GLOBAL CLSID_DirectDraw AS STRING * 16 ' {D7B70EE0-4340-11CF-B063-0020AFC2CD35}
GLOBAL CLSID_DirectDrawClipper AS STRING * 16 ' {593817A0-7DB3-11CF-A2DE-00AA00b93356}
GLOBAL IID_IDirectDraw AS STRING * 16 ' {6C14DB80-A733-11CE-A521-0020AF0BE560}
GLOBAL IID_IDirectDraw2 AS STRING * 16 ' {B3A6F3E0-2B43-11CF-A2DE-00AA00B93356}
GLOBAL IID_IDirectDrawSurface AS STRING * 16 ' {6C14DB81-A733-11CE-A521-0020AF0BE560}
GLOBAL IID_IDirectDrawSurface2 AS STRING * 16 ' {57805885-6eec-11cf-9441-a82303c10e27}
GLOBAL IID_IDirectDrawSurface3 AS STRING * 16 ' {DA044E00-69B2-11D0-A1D5-00AA00B8DFBB}
GLOBAL IID_IDirectDrawPalette AS STRING * 16 ' {6C14DB84-A733-11CE-A521-0020AF0BE560}
GLOBAL IID_IDirectDrawClipper AS STRING * 16 ' {6C14DB85-A733-11CE-A521-0020AF0BE560}
GLOBAL IID_IDirectDrawColorControl AS STRING * 16 ' {4B9F0EE0-0D7E-11D0-9B06-00A0C903A3B8}
%DD_OK = &H0
%DDENUMRET_OK = &H1
%DDENUMRET_CANCEL = &H0
%DDENUM_ATTACHEDSECONDARYDEVICES = &H1
%DDENUM_DETACHEDSECONDARYDEVICES = &H2
%DDENUM_NONDISPLAYDEVICES = &H4
%DDCREATE_HARDWAREONLY = &H1
%DDCREATE_EMULATIONONLY = &H2
%DD_ROP_SPACE = &H8
%DDSD_CAPS = &H1
%DDSD_HEIGHT = &H2
%DDSD_WIDTH = &H4
%DDSD_PITCH = &H8
%DDSD_BACKBUFFERCOUNT = &H20
%DDSD_ZBUFFERBITDEPTH = &H40
%DDSD_ALPHABITDEPTH = &H80
%DDSD_LPSURFACE = &H800
%DDSD_PIXELFORMAT = &H1000
%DDSD_CKDESTOVERLAY = &H2000
%DDSD_CKDESTBLT = &H4000
%DDSD_CKSRCOVERLAY = &H8000
%DDSD_CKSRCBLT = &H10000
%DDSD_MIPMAPCOUNT = &H20000
%DDSD_REFRESHRATE = &H40000
%DDSD_LINEARSIZE = &H80000
%DDSD_ALL = &Hff9ee
%DDCOLOR_BRIGHTNESS = &H1
%DDCOLOR_CONTRAST = &H2
%DDCOLOR_HUE = &H4
%DDCOLOR_SATURATION = &H8
%DDCOLOR_SHARPNESS = &H10
%DDCOLOR_GAMMA = &H20
%DDCOLOR_COLORENABLE = &H40
%DDSCAPS_RESERVED1 = &H1
%DDSCAPS_ALPHA = &H2
%DDSCAPS_BACKBUFFER = &H4
%DDSCAPS_COMPLEX = &H8
%DDSCAPS_FLIP = &H10
%DDSCAPS_FRONTBUFFER = &H20
%DDSCAPS_OFFSCREENPLAIN = &H40
%DDSCAPS_OVERLAY = &H80
%DDSCAPS_PALETTE = &H100
%DDSCAPS_PRIMARYSURFACE = &H200
%DDSCAPS_PRIMARYSURFACELEFT = &H400
%DDSCAPS_SYSTEMMEMORY = &H800
%DDSCAPS_TEXTURE = &H1000
%DDSCAPS_3DDEVICE = &H2000
%DDSCAPS_VIDEOMEMORY = &H4000
%DDSCAPS_VISIBLE = &H8000
%DDSCAPS_WRITEONLY = &H10000
%DDSCAPS_ZBUFFER = &H20000
%DDSCAPS_OWNDC = &H40000
%DDSCAPS_LIVEVIDEO = &H80000
%DDSCAPS_HWCODEC = &H100000
%DDSCAPS_MODEX = &H200000
%DDSCAPS_MIPMAP = &H400000
%DDSCAPS_RESERVED2 = &H800000
%DDSCAPS_ALLOCONLOAD = &H4000000
%DDSCAPS_VIDEOPORT = &H8000000
%DDSCAPS_LOCALVIDMEM = &H10000000
%DDSCAPS_NONLOCALVIDMEM = &H20000000
%DDSCAPS_STANDARDVGAMODE = &H40000000
%DDSCAPS_OPTIMIZED = &H80000000
%DDCAPS_3D = &H1
%DDCAPS_ALIGNBOUNDARYDEST = &H2
%DDCAPS_ALIGNSIZEDEST = &H4
%DDCAPS_ALIGNBOUNDARYSRC = &H8
%DDCAPS_ALIGNSIZESRC = &H10
%DDCAPS_ALIGNSTRIDE = &H20
%DDCAPS_BLT = &H40
%DDCAPS_BLTQUEUE = &H80
%DDCAPS_BLTFOURCC = &H100
%DDCAPS_BLTSTRETCH = &H200
%DDCAPS_GDI = &H400
%DDCAPS_OVERLAY = &H800
%DDCAPS_OVERLAYCANTCLIP = &H1000
%DDCAPS_OVERLAYFOURCC = &H2000
%DDCAPS_OVERLAYSTRETCH = &H4000
%DDCAPS_PALETTE = &H8000
%DDCAPS_PALETTEVSYNC = &H10000
%DDCAPS_READSCANLINE = &H20000
%DDCAPS_STEREOVIEW = &H40000
%DDCAPS_VBI = &H80000
%DDCAPS_ZBLTS = &H100000
%DDCAPS_ZOVERLAYS = &H200000
%DDCAPS_COLORKEY = &H400000
%DDCAPS_ALPHA = &H800000
%DDCAPS_COLORKEYHWASSIST = &H1000000
%DDCAPS_NOHARDWARE = &H2000000
%DDCAPS_BLTCOLORFILL = &H4000000
%DDCAPS_BANKSWITCHED = &H8000000
%DDCAPS_BLTDEPTHFILL = &H10000000
%DDCAPS_CANCLIP = &H20000000
%DDCAPS_CANCLIPSTRETCHED = &H40000000
%DDCAPS_CANBLTSYSMEM = &H80000000
%DDCAPS2_CERTIFIED = &H1
%DDCAPS2_NO2DDURING3DSCENE = &H2
%DDCAPS2_VIDEOPORT = &H4
%DDCAPS2_AUTOFLIPOVERLAY = &H8
%DDCAPS2_CANBOBINTERLEAVED = &H10
%DDCAPS2_CANBOBNONINTERLEAVED = &H20
%DDCAPS2_COLORCONTROLOVERLAY = &H40
%DDCAPS2_COLORCONTROLPRIMARY = &H80
%DDCAPS2_CANDROPZ16BIT = &H100
%DDCAPS2_NONLOCALVIDMEM = &H200
%DDCAPS2_NONLOCALVIDMEMCAPS = &H400
%DDCAPS2_NOPAGELOCKREQUIRED = &H800
%DDCAPS2_WIDESURFACES = &H1000
%DDCAPS2_CANFLIPODDEVEN = &H2000
%DDCAPS2_CANBOBHARDWARE = &H4000
%DDCAPS2_COPYFOURCC = &H8000
%DDFXALPHACAPS_BLTALPHAEDGEBLEND = &H1
%DDFXALPHACAPS_BLTALPHAPIXELS = &H2
%DDFXALPHACAPS_BLTALPHAPIXELSNEG = &H4
%DDFXALPHACAPS_BLTALPHASURFACES = &H8
%DDFXALPHACAPS_BLTALPHASURFACESNEG = &H10
%DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND = &H20
%DDFXALPHACAPS_OVERLAYALPHAPIXELS = &H40
%DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG = &H80
%DDFXALPHACAPS_OVERLAYALPHASURFACES = &H100
%DDFXALPHACAPS_OVERLAYALPHASURFACESNEG = &H00000200
%DDFXCAPS_BLTARITHSTRETCHY = &H20
%DDFXCAPS_BLTARITHSTRETCHYN = &H10
%DDFXCAPS_BLTMIRRORLEFTRIGHT = &H40
%DDFXCAPS_BLTMIRRORUPDOWN = &H80
%DDFXCAPS_BLTROTATION = &H100
%DDFXCAPS_BLTROTATION90 = &H200
%DDFXCAPS_BLTSHRINKX = &H400
%DDFXCAPS_BLTSHRINKXN = &H800
%DDFXCAPS_BLTSHRINKY = &H1000
%DDFXCAPS_BLTSHRINKYN = &H2000
%DDFXCAPS_BLTSTRETCHX = &H4000
%DDFXCAPS_BLTSTRETCHXN = &H8000
%DDFXCAPS_BLTSTRETCHY = &H10000
%DDFXCAPS_BLTSTRETCHYN = &H20000
%DDFXCAPS_OVERLAYARITHSTRETCHY = &H40000
%DDFXCAPS_OVERLAYARITHSTRETCHYN = &H8
%DDFXCAPS_OVERLAYSHRINKX = &H80000
%DDFXCAPS_OVERLAYSHRINKXN = &H100000
%DDFXCAPS_OVERLAYSHRINKY = &H200000
%DDFXCAPS_OVERLAYSHRINKYN = &H400000
%DDFXCAPS_OVERLAYSTRETCHX = &H800000
%DDFXCAPS_OVERLAYSTRETCHXN = &H1000000
%DDFXCAPS_OVERLAYSTRETCHY = &H2000000
%DDFXCAPS_OVERLAYSTRETCHYN = &H4000000
%DDFXCAPS_OVERLAYMIRRORLEFTRIGHT = &H8000000
%DDFXCAPS_OVERLAYMIRRORUPDOWN = &H10000000
%DDSVCAPS_ENIGMA = &H1
%DDSVCAPS_FLICKER = &H2
%DDSVCAPS_REDBLUE = &H4
%DDSVCAPS_SPLIT = &H8
%DDPCAPS_4BIT = &H1
%DDPCAPS_8BITENTRIES = &H2
%DDPCAPS_8BIT = &H4
%DDPCAPS_INITIALIZE = &H8
%DDPCAPS_PRIMARYSURFACE = &H10
%DDPCAPS_PRIMARYSURFACELEFT = &H20
%DDPCAPS_ALLOW256 = &H40
%DDPCAPS_VSYNC = &H80
%DDPCAPS_1BIT = &H100
%DDPCAPS_2BIT = &H200
%DDBD_1 = &H4000
%DDBD_2 = &H2000
%DDBD_4 = &H1000
%DDBD_8 = &H800
%DDBD_16 = &H400
%DDBD_24 = &H200
%DDBD_32 = &H100
%DDCKEY_COLORSPACE = &H1
%DDCKEY_DESTBLT = &H2
%DDCKEY_DESTOVERLAY = &H4
%DDCKEY_SRCBLT = &H8
%DDCKEY_SRCOVERLAY = &H10
%DDCKEYCAPS_DESTBLT = &H1
%DDCKEYCAPS_DESTBLTCLRSPACE = &H2
%DDCKEYCAPS_DESTBLTCLRSPACEYUV = &H4
%DDCKEYCAPS_DESTBLTYUV = &H8
%DDCKEYCAPS_DESTOVERLAY = &H10
%DDCKEYCAPS_DESTOVERLAYCLRSPACE = &H20
%DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV = &H40
%DDCKEYCAPS_DESTOVERLAYONEACTIVE = &H80
%DDCKEYCAPS_DESTOVERLAYYUV = &H100
%DDCKEYCAPS_SRCBLT = &H200
%DDCKEYCAPS_SRCBLTCLRSPACE = &H400
%DDCKEYCAPS_SRCBLTCLRSPACEYUV = &H800
%DDCKEYCAPS_SRCBLTYUV = &H1000
%DDCKEYCAPS_SRCOVERLAY = &H2000
%DDCKEYCAPS_SRCOVERLAYCLRSPACE = &H4000
%DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV = &H8000
%DDCKEYCAPS_SRCOVERLAYONEACTIVE = &H10000
%DDCKEYCAPS_SRCOVERLAYYUV = &H20000
%DDCKEYCAPS_NOCOSTOVERLAY = &H40000
%DDPF_ALPHAPIXELS = &H1
%DDPF_ALPHA = &H2
%DDPF_FOURCC = &H4
%DDPF_PALETTEINDEXED4 = &H8
%DDPF_PALETTEINDEXEDTO8 = &H10
%DDPF_PALETTEINDEXED8 = &H20
%DDPF_RGB = &H40
%DDPF_COMPRESSED = &H80
%DDPF_RGBTOYUV = &H100
%DDPF_YUV = &H200
%DDPF_ZBUFFER = &H400
%DDPF_PALETTEINDEXED1 = &H800
%DDPF_PALETTEINDEXED2 = &H1000
%DDPF_ZPIXELS = &H2000
%DDENUMSURFACES_ALL = &H1
%DDENUMSURFACES_MATCH = &H2
%DDENUMSURFACES_NOMATCH = &H4
%DDENUMSURFACES_CANBECREATED = &H8
%DDENUMSURFACES_DOESEXIST = &H10
%DDSDM_STANDARDVGAMODE = &H1
%DDEDM_REFRESHRATES = &H1
%DDEDM_STANDARDVGAMODES = &H2
%DDSCL_FULLSCREEN = &H1
%DDSCL_ALLOWREBOOT = &H2
%DDSCL_NOWINDOWCHANGES = &H4
%DDSCL_NORMAL = &H8
%DDSCL_EXCLUSIVE = &H10
%DDSCL_ALLOWMODEX = &H40
%DDSCL_SETFOCUSWINDOW = &H80
%DDSCL_SETDEVICEWINDOW = &H100
%DDSCL_CREATEDEVICEWINDOW = &H200
%DDBLT_ALPHADEST = &H1
%DDBLT_ALPHADESTCONSTOVERRIDE = &H2
%DDBLT_ALPHADESTNEG = &H4
%DDBLT_ALPHADESTSURFACEOVERRIDE = &H8
%DDBLT_ALPHAEDGEBLEND = &H10
%DDBLT_ALPHASRC = &H20
%DDBLT_ALPHASRCCONSTOVERRIDE = &H40
%DDBLT_ALPHASRCNEG = &H80
%DDBLT_ALPHASRCSURFACEOVERRIDE = &H100
%DDBLT_ASYNC = &H200
%DDBLT_COLORFILL = &H400
%DDBLT_DDFX = &H800
%DDBLT_DDROPS = &H1000
%DDBLT_KEYDEST = &H2000
%DDBLT_KEYDESTOVERRIDE = &H4000
%DDBLT_KEYSRC = &H8000
%DDBLT_KEYSRCOVERRIDE = &H10000
%DDBLT_ROP = &H20000
%DDBLT_ROTATIONANGLE = &H40000
%DDBLT_ZBUFFER = &H80000
%DDBLT_ZBUFFERDESTCONSTOVERRIDE = &H100000
%DDBLT_ZBUFFERDESTOVERRIDE = &H200000
%DDBLT_ZBUFFERSRCCONSTOVERRIDE = &H400000
%DDBLT_ZBUFFERSRCOVERRIDE = &H800000
%DDBLT_WAIT = &H1000000
%DDBLT_DEPTHFILL = &H2000000
%DDBLTFAST_NOCOLORKEY = &H0
%DDBLTFAST_SRCCOLORKEY = &H1
%DDBLTFAST_DESTCOLORKEY = &H2
%DDBLTFAST_WAIT = &H10
%DDFLIP_WAIT = &H1
%DDFLIP_EVEN = &H2
%DDFLIP_ODD = &H4
%DDOVER_ALPHADEST = &H1
%DDOVER_ALPHADESTCONSTOVERRIDE = &H2
%DDOVER_ALPHADESTNEG = &H4
%DDOVER_ALPHADESTSURFACEOVERRIDE = &H8
%DDOVER_ALPHAEDGEBLEND = &H10
%DDOVER_ALPHASRC = &H20
%DDOVER_ALPHASRCCONSTOVERRIDE = &H40
%DDOVER_ALPHASRCNEG = &H80
%DDOVER_ALPHASRCSURFACEOVERRIDE = &H100
%DDOVER_HIDE = &H200
%DDOVER_KEYDEST = &H400
%DDOVER_KEYDESTOVERRIDE = &H800
%DDOVER_KEYSRC = &H1000
%DDOVER_KEYSRCOVERRIDE = &H2000
%DDOVER_SHOW = &H4000
%DDOVER_ADDDIRTYRECT = &H8000
%DDOVER_REFRESHDIRTYRECTS = &H10000
%DDOVER_REFRESHALL = &H20000
%DDOVER_DDFX = &H80000
%DDOVER_BOB = &H200000
%DDOVER_OVERRIDEBOBWEAVE = &H400000
%DDOVER_INTERLEAVED = &H800000
%DDOVER_BOBHARDWARE = &H1000000
%DDLOCK_SURFACEMEMORYPTR = &H0
%DDLOCK_WAIT = &H1
%DDLOCK_EVENT = &H2
%DDLOCK_READONLY = &H10
%DDLOCK_WRITEONLY = &H20
%DDLOCK_NOSYSLOCK = &H800
%DDBLTFX_ARITHSTRETCHY = &H1
%DDBLTFX_MIRRORLEFTRIGHT = &H2
%DDBLTFX_MIRRORUPDOWN = &H4
%DDBLTFX_NOTEARING = &H8
%DDBLTFX_ROTATE180 = &H10
%DDBLTFX_ROTATE270 = &H20
%DDBLTFX_ROTATE90 = &H40
%DDBLTFX_ZBUFFERRANGE = &H80
%DDBLTFX_ZBUFFERBASEDEST = &H100
%DDOVERFX_ARITHSTRETCHY = &H1
%DDOVERFX_MIRRORLEFTRIGHT = &H2
%DDOVERFX_MIRRORUPDOWN = &H4
%DDWAITVB_BLOCKBEGIN = &H1
%DDWAITVB_BLOCKBEGINEVENT = &H2
%DDWAITVB_BLOCKEND = &H4
%DDGFS_CANFLIP = &H1
%DDGFS_ISFLIPDONE = &H2
%DDGBS_CANBLT = &H1
%DDGBS_ISBLTDONE = &H2
%DDENUMOVERLAYZ_BACKTOFRONT = &H0
%DDENUMOVERLAYZ_FRONTTOBACK = &H1
%DDOVERZ_SENDTOFRONT = &H0
%DDOVERZ_SENDTOBACK = &H1
%DDOVERZ_MOVEFORWARD = &H2
%DDOVERZ_MOVEBACKWARD = &H3
%DDOVERZ_INSERTINFRONTOF = &H4
%DDOVERZ_INSERTINBACKOF = &H5
%DDERR_ALREADYINITIALIZED = &H88760005
%DDERR_CANNOTATTACHSURFACE = &H8876000a
%DDERR_CANNOTDETACHSURFACE = &H88760014
%DDERR_CURRENTLYNOTAVAIL = &H88760028
%DDERR_EXCEPTION = &H88760037
%DDERR_GENERIC = &H80004005
%DDERR_HEIGHTALIGN = &H8876005a
%DDERR_INCOMPATIBLEPRIMARY = &H8876005f
%DDERR_INVALIDCAPS = &H88760064
%DDERR_INVALIDCLIPLIST = &H8876006e
%DDERR_INVALIDMODE = &H88760078
%DDERR_INVALIDOBJECT = &H88760082
%DDERR_INVALIDPARAMS = &H80070057
%DDERR_INVALIDPIXELFORMAT = &H88760091
%DDERR_INVALIDRECT = &H88760096
%DDERR_LOCKEDSURFACES = &H887600a0
%DDERR_NO3D = &H887600aa
%DDERR_NOALPHAHW = &H887600b4
%DDERR_NOCLIPLIST = &H887600cd
%DDERR_NOCOLORCONVHW = &H887600d2
%DDERR_NOCOOPERATIVELEVELSET = &H887600d4
%DDERR_NOCOLORKEY = &H887600d7
%DDERR_NOCOLORKEYHW = &H887600dc
%DDERR_NODIRECTDRAWSUPPORT = &H887600de
%DDERR_NOEXCLUSIVEMODE = &H887600e1
%DDERR_NOFLIPHW = &H887600e6
%DDERR_NOGDI = &H887600f0
%DDERR_NOMIRRORHW = &H887600fa
%DDERR_NOTFOUND = &H887600ff
%DDERR_NOOVERLAYHW = &H88760104
%DDERR_NORASTEROPHW = &H88760118
%DDERR_NOROTATIONHW = &H88760122
%DDERR_NOSTRETCHHW = &H88760136
%DDERR_NOT4BITCOLOR = &H8876013c
%DDERR_NOT4BITCOLORINDEX = &H8876013d
%DDERR_NOT8BITCOLOR = &H88760140
%DDERR_NOTEXTUREHW = &H8876014a
%DDERR_NOVSYNCHW = &H8876014f
%DDERR_NOZBUFFERHW = &H88760154
%DDERR_NOZOVERLAYHW = &H8876015e
%DDERR_OUTOFCAPS = &H88760168
%DDERR_OUTOFMEMORY = &H8007000e
%DDERR_OUTOFVIDEOMEMORY = &H8876017c
%DDERR_OVERLAYCANTCLIP = &H8876017e
%DDERR_OVERLAYCOLORKEYONLYONEACTIVE = &H88760180
%DDERR_PALETTEBUSY = &H88760183
%DDERR_COLORKEYNOTSET = &H88760190
%DDERR_SURFACEALREADYATTACHED = &H8876019a
%DDERR_SURFACEALREADYDEPENDENT = &H887601a4
%DDERR_SURFACEBUSY = &H887601ae
%DDERR_CANTLOCKSURFACE = &H887601b3
%DDERR_SURFACEISOBSCURED = &H887601b8
%DDERR_SURFACELOST = &H887601c2
%DDERR_SURFACENOTATTACHED = &H887601cc
%DDERR_TOOBIGHEIGHT = &H887601d6
%DDERR_TOOBIGSIZE = &H887601e0
%DDERR_TOOBIGWIDTH = &H887601ea
%DDERR_UNSUPPORTED = &H80004001
%DDERR_UNSUPPORTEDFORMAT = &H887601fe
%DDERR_UNSUPPORTEDMASK = &H88760208
%DDERR_VERTICALBLANKINPROGRESS = &H88760219
%DDERR_WASSTILLDRAWING = &H8876021c
%DDERR_XALIGN = &H88760230
%DDERR_INVALIDDIRECTDRAWGUID = &H88760231
%DDERR_DIRECTDRAWALREADYCREATED = &H88760232
%DDERR_NODIRECTDRAWHW = &H88760233
%DDERR_PRIMARYSURFACEALREADYEXISTS = &H88760234
%DDERR_NOEMULATION = &H88760235
%DDERR_REGIONTOOSMALL = &H88760236
%DDERR_CLIPPERISUSINGHWND = &H88760237
%DDERR_NOCLIPPERATTACHED = &H88760238
%DDERR_NOHWND = &H88760239
%DDERR_HWNDSUBCLASSED = &H8876023a
%DDERR_HWNDALREADYSET = &H8876023b
%DDERR_NOPALETTEATTACHED = &H8876023c
%DDERR_NOPALETTEHW = &H8876023d
%DDERR_BLTFASTCANTCLIP = &H8876023e
%DDERR_NOBLTHW = &H8876023f
%DDERR_NODDROPSHW = &H88760240
%DDERR_OVERLAYNOTVISIBLE = &H88760241
%DDERR_NOOVERLAYDEST = &H88760242
%DDERR_INVALIDPOSITION = &H88760243
%DDERR_NOTAOVERLAYSURFACE = &H88760244
%DDERR_EXCLUSIVEMODEALREADYSET = &H88760245
%DDERR_NOTFLIPPABLE = &H88760246
%DDERR_CANTDUPLICATE = &H88760247
%DDERR_NOTLOCKED = &H88760248
%DDERR_CANTCREATEDC = &H88760249
%DDERR_NODC = &H8876024a
%DDERR_WRONGMODE = &H8876024b
%DDERR_IMPLICITLYCREATED = &H8876024c
%DDERR_NOTPALETTIZED = &H8876024d
%DDERR_UNSUPPORTEDMODE = &H8876024e
%DDERR_NOMIPMAPHW = &H8876024f
%DDERR_INVALIDSURFACETYPE = &H88760250
%DDERR_NOOPTIMIZEHW = &H88760258
%DDERR_NOTLOADED = &H88760259
%DDERR_NOFOCUSWINDOW = &H8876025a
%DDERR_DCALREADYCREATED = &H8876026c
%DDERR_NONONLOCALVIDMEM = &H88760276
%DDERR_CANTPAGELOCK = &H88760280
%DDERR_CANTPAGEUNLOCK = &H88760294
%DDERR_NOTPAGELOCKED = &H887602a8
%DDERR_MOREDATA = &H887602b2
%DDERR_VIDEONOTACTIVE = &H887602b7
%DDERR_DEVICEDOESNTOWNSURFACE = &H887602bb
%DDERR_NOTINITIALIZED = &H800401f0
' DDCOLORKEY Structure
TYPE DDCOLORKEY
dwColorSpaceLowValue AS DWORD
dwColorSpaceHighValue AS DWORD
END TYPE
' DDBLTFX Structure
UNION DDBFUnion1
dwZDestConst AS DWORD
lpDDSZBufferDest AS LONG
END UNION
UNION DDBFUnion2
dwZSrcConst AS DWORD
lpDDSZBufferSrc AS LONG
END UNION
UNION DDBFUnion3
dwAlphaDestConst AS DWORD
lpDDSAlphaDest AS LONG
END UNION
UNION DDBFUnion4
dwAlphaSrcConst AS DWORD
lpDDSAlphaSrc AS LONG
END UNION
UNION DDBFUnion5
dwFillColor AS DWORD
dwFillDepth AS DWORD
dwFillPixel AS DWORD
lpDDSPattern AS LONG
END UNION
TYPE DDBLTFX
dwSize AS DWORD
dwDDFX AS DWORD
dwROP AS DWORD
dwDDROP AS DWORD
dwRotationAngle AS DWORD
dwZBufferOpCode AS DWORD
dwZBufferLow AS DWORD
dwZBufferHigh AS DWORD
dwZBufferBaseDest AS DWORD
dwZDestConstBitDepth AS DWORD
Union1 AS DDBFUnion1
dwZSrcConstBitDepth AS DWORD
Union2 AS DDBFUnion2
dwAlphaEdgeBlendBitDepth AS DWORD
dwAlphaEdgeBlend AS DWORD
dwReserved AS DWORD
dwAlphaDestConstBitDepth AS DWORD
Union3 AS DDBFUnion3
dwAlphaSrcConstBitDepth AS DWORD
Union4 AS DDBFUnion4
Union5 AS DDBFUnion5
ddckDestColorkey AS DDCOLORKEY
ddckSrcColorkey AS DDCOLORKEY
END TYPE
' DDCAPS Structure
TYPE DDSCAPS
dwCaps AS DWORD
END TYPE
' DDCAPS_DX3 Structure
'$IF %DIRECTDRAW_VERSION >= &H0500
TYPE DDCAPS_DX3
dwSize AS DWORD
dwCaps AS DWORD
dwCaps2 AS DWORD
dwCKeyCaps AS DWORD
dwFXCaps AS DWORD
dwFXAlphaCaps AS DWORD
dwPalCaps AS DWORD
dwSVCaps AS DWORD
dwAlphaBltConstBitDepths AS DWORD
dwAlphaBltPixelBitDepths AS DWORD
dwAlphaBltSurfaceBitDepths AS DWORD
dwAlphaOverlayConstBitDepths AS DWORD
dwAlphaOverlayPixelBitDepths AS DWORD
dwAlphaOverlaySurfaceBitDepths AS DWORD
dwZBufferBitDepths AS DWORD
dwVidMemTotal AS DWORD
dwVidMemFree AS DWORD
dwMaxVisibleOverlays AS DWORD
dwCurrVisibleOverlays AS DWORD
dwNumFourCCCodes AS DWORD
dwAlignBoundarySrc AS DWORD
dwAlignSizeSrc AS DWORD
dwAlignBoundaryDest AS DWORD
dwAlignSizeDest AS DWORD
dwAlignStrideAlign AS DWORD
dwRops(%DD_ROP_SPACE) AS DWORD
ddsCaps AS DDSCAPS
dwMinOverlayStretch AS DWORD
dwMaxOverlayStretch AS DWORD
dwMinLiveVideoStretch AS DWORD
dwMaxLiveVideoStretch AS DWORD
dwMinHwCodecStretch AS DWORD
dwMaxHwCodecStretch AS DWORD
dwReserved1 AS DWORD
dwReserved2 AS DWORD
dwReserved3 AS DWORD
dwSVBCaps AS DWORD
dwSVBCKeyCaps AS DWORD
dwSVBFXCaps AS DWORD
dwSVBRops(%DD_ROP_SPACE) AS DWORD
dwVSBCaps AS DWORD
dwVSBCKeyCaps AS DWORD
dwVSBFXCaps AS DWORD
dwVSBRops(%DD_ROP_SPACE) AS DWORD
dwSSBCaps AS DWORD
dwSSBCKeyCaps AS DWORD
dwSSBCFXCaps AS DWORD
dwSSBRops(%DD_ROP_SPACE) AS DWORD
dwMaxVideoPorts AS DWORD
dwCurrVideoPorts AS DWORD
dwSVBCaps2 AS DWORD
dwNLVBCaps AS DWORD
dwNLVBCaps2 AS DWORD
dwNLVBCKeyCaps AS DWORD
dwNLVBFXCaps AS DWORD
dwNLVBRops(%DD_ROP_SPACE) AS DWORD
dwReserved4 AS DWORD
dwReserved5 AS DWORD
dwReserved6 AS DWORD
END TYPE
'$ENDIF
' DDCAPS Structure
TYPE DDCAPS
dwSize AS DWORD
dwCaps AS DWORD
dwCaps2 AS DWORD
dwCKeyCaps AS DWORD
dwFXCaps AS DWORD
dwFXAlphaCaps AS DWORD
dwPalCaps AS DWORD
dwSVCaps AS DWORD
dwAlphaBltConstBitDepths AS DWORD
dwAlphaBltPixelBitDepths AS DWORD
dwAlphaBltSurfaceBitDepths AS DWORD
dwAlphaOverlayConstBitDepths AS DWORD
dwAlphaOverlayPixelBitDepths AS DWORD
dwAlphaOverlaySurfaceBitDepths AS DWORD
dwZBufferBitDepths AS DWORD
dwVidMemTotal AS DWORD
dwVidMemFree AS DWORD
dwMaxVisibleOverlays AS DWORD
dwCurrVisibleOverlays AS DWORD
dwNumFourCCCodes AS DWORD
dwAlignBoundarySrc AS DWORD
dwAlignSizeSrc AS DWORD
dwAlignBoundaryDest AS DWORD
dwAlignSizeDest AS DWORD
dwAlignStrideAlign AS DWORD
dwRops(%DD_ROP_SPACE) AS DWORD
ddsCaps AS DDSCAPS
dwMinOverlayStretch AS DWORD
dwMaxOverlayStretch AS DWORD
dwMinLiveVideoStretch AS DWORD
dwMaxLiveVideoStretch AS DWORD
dwMinHwCodecStretch AS DWORD
dwMaxHwCodecStretch AS DWORD
dwReserved1 AS DWORD
dwReserved2 AS DWORD
dwReserved3 AS DWORD
dwSVBCaps AS DWORD
dwSVBCKeyCaps AS DWORD
dwSVBFXCaps AS DWORD
dwSVBRops(%DD_ROP_SPACE) AS DWORD
dwVSBCaps AS DWORD
dwVSBCKeyCaps AS DWORD
dwVSBFXCaps AS DWORD
dwVSBRops(%DD_ROP_SPACE) AS DWORD
dwSSBCaps AS DWORD
dwSSBCKeyCaps AS DWORD
dwSSBCFXCaps AS DWORD
dwSSBRops(%DD_ROP_SPACE) AS DWORD
'$IF %DIRECTDRAW_VERSION >= &H0500
dwMaxVideoPorts AS DWORD
dwCurrVideoPorts AS DWORD
dwSVBCaps2 AS DWORD
dwNLVBCaps AS DWORD
dwNLVBCaps2 AS DWORD
dwNLVBCKeyCaps AS DWORD
dwNLVBFXCaps AS DWORD
dwNLVBRops(%DD_ROP_SPACE) AS DWORD
'$ELSE
dwReserved4 AS DWORD
dwReserved5 AS DWORD
dwReserved6 AS DWORD
'$ENDIF
END TYPE
' DDPIXELFORMAT Structure
UNION DDPFDepth
dwRGBBitCount AS DWORD
dwYUVBitCount AS DWORD
dwZBufferBitDepth AS DWORD
dwAlphaBitDepth AS DWORD
END UNION
UNION DDPFMask1
dwRBitMask AS DWORD
dwYBitMask AS DWORD
END UNION
UNION DDPFMask2
dwGBitMask AS DWORD
dwUBitMask AS DWORD
END UNION
UNION DDPFMask3
dwBBitMask AS DWORD
dwVBitMask AS DWORD
END UNION
UNION DDPFMask4
dwRGBAlphaBitMask AS DWORD
dwYUVAlphaBitMask AS DWORD
dwRGBZBitMask AS DWORD
dwYUVZBitMask AS DWORD
END UNION
TYPE DDPIXELFORMAT
dwSize AS DWORD
dwFlags AS DWORD
dwFourCC AS DWORD
Depth AS DDPFDepth
Mask1 AS DDPFMask1
Mask2 AS DDPFMask2
Mask3 AS DDPFMask3
Mask4 AS DDPFMask4
END TYPE
' DDOVERLAYFX Structure
UNION DDOFUnion1
dwAlphaDestConst AS DWORD
lpDDSAlphaDest AS LONG
END UNION
UNION DDOFUnion2
dwAlphaSrcConst AS DWORD
lpDDSAlphaSrc AS LONG
END UNION
TYPE DDOVERLAYFX
dwSize AS DWORD
dwAlphaEdgeBlendBitDepth AS DWORD
dwAlphaEdgeBlend AS DWORD
dwReserved AS DWORD
dwAlphaDestConstBitDepth AS DWORD
Union1 AS DDOFUnion1
dwAlphaSrcConstBitDepth AS DWORD
Union2 AS DDOFUnion2
dckDestColorkey AS DDCOLORKEY
dckSrcColorkey AS DDCOLORKEY
dwDDFX AS DWORD
dwFlags AS DWORD
END TYPE
' DDBLTBATCH Structure
TYPE DDBLTBATCH
lprDest AS RECT
lpDDSSrc AS LONG
lprSrc AS LONG
dwFlags AS DWORD
lpDDBltFx AS DDBLTFX
END TYPE;
' DDBLTFX Structure
UNION DDBFUnion1
dwZDestConst AS DWORD
lpDDSZBufferDest AS LONG
END UNION
UNION DDBFUnion2
dwZSrcConst AS DWORD
lpDDSZBufferSrc AS LONG
END UNION
UNION DDBFUnion3
dwAlphaSrcConst AS DWORD
lpDDSAlphaSrc AS LONG
END UNION
UNION DDBFUnion4
dwFillColor AS DWORD
dwFillDepth AS DWORD
dwFillPixel AS DWORD
lpDDSPattern AS LONG
END UNION
TYPE DDBLTFX
dwSize AS DWORD
dwDDFX AS DWORD
dwROP AS DWORD
dwDDROP AS DWORD
dwRotationAngle AS DWORD
dwZBufferOpCode AS DWORD
dwZBufferLow AS DWORD
dwZBufferHigh AS DWORD
dwZBufferBaseDest AS DWORD
dwZDestConstBitDepth AS DWORD
Union1 AS DDBFUnion1
dwZSrcConstBitDepth AS DWORD
Union2 AS DDBFUnion2
dwAlphaEdgeBlendBitDepth AS DWORD
dwAlphaEdgeBlend AS DWORD
dwReserved AS DWORD
dwAlphaDestConstBitDepth AS DWORD
dwAlphaDestConst AS DWORD
lpDDSAlphaDest AS LONG
dwAlphaSrcConstBitDepth AS DWORD
Union3 AS DDBFUnion3
Union4 AS DDBFUnion4
ddckDestColorkey AS DDCOLORKEY
ddckSrcColorkey AS DDCOLORKEY
END TYPE
' DDSURFACEDESC Structure
UNION DDSDUnion1
lPitch AS LONG
dwLinearSize AS DWORD
END UNION
UNION DDSDUnion2
dwMipMapCount AS DWORD
dwZBufferBitDepth AS DWORD
dwRefreshRate AS DWORD
END UNION
TYPE DDSURFACEDESC
dwSize AS DWORD
dwFlags AS DWORD
dwHeight AS DWORD
dwWidth AS DWORD
Union1 AS DDSDUnion1
dwBackBufferCount AS DWORD
Union2 AS DDSDUnion2
dwAlphaBitDepth AS DWORD
dwReserved AS DWORD
lpSurface AS LONG
ddckCKDestOverlay AS DDCOLORKEY
ddckCKDestBlt AS DDCOLORKEY
ddckCKSrcOverlay AS DDCOLORKEY
ddckCKSrcBlt AS DDCOLORKEY
ddpfPixelFormat AS DDPIXELFORMAT
ddsCaps AS DDSCAPS
END TYPE
' DDCOLORCONTROL Structure
TYPE DDCOLORCONTROL
dwSize AS DWORD
dwFlags AS DWORD
lBrightness AS LONG
lContrast AS LONG
lHue AS LONG
lSaturation AS LONG
lSharpness AS LONG
lGamma AS LONG
lColorEnable AS LONG
dwReserved1 AS DWORD
END TYPE
' Callback functions
' FUNCTION DDEnumModesCallback(lpDDSurfaceDesc AS DDSURFACEDESC, lpContext AS LONG) AS LONG
' FUNCTION DDEnumModesCallbackEx(lpGUID AS STRING * 16, lpDriverDescription AS ASCIIZ, lpDriverName AS ASCIIZ, BYVAL lpContext AS LONG, BYVAL hm AS LONG) AS LONG
' FUNCTION DDEnumSurfacesCallback(BYVAL lpDDSurface AS LONG, lpDDSurfaceDesc AS DDSURFACEDESC, BYVAL lpContext AS lONG) AS LONG
'DECLARE FUNCTION DDDirectDrawCreate LIB "DDRAW.DLL" ALIAS "DirectDrawCreate" (lpGUID AS STRING * 16, lpDD AS LONG, pUnkOuter AS LONG) AS LONG
DECLARE FUNCTION DDDirectDrawCreate LIB "DDRAW.DLL" ALIAS "DirectDrawCreate" (DWORD, DWORD, DWORD) AS LONG
DECLARE FUNCTION DDDirectDrawCreateClipper LIB "DDRAW.DLL" ALIAS "DirectDrawCreateClipper" (BYVAL dwFlags AS DWORD, lpDDClipper AS LONG, pUnkOuter AS LONG) AS LONG
DECLARE FUNCTION DDDirectDrawEnumerate LIB "DDRAW.DLL" ALIAS "DirectDrawEnumerate" (BYVAL lpCallback AS LONG, BYVAL lpContext AS LONG) AS LONG
DECLARE FUNCTION DDDirectDrawEnumerateEx LIB "DDRAW.DLL" ALIAS "DirectDrawEnumerateEx" (BYVAL lpCallback AS LONG, BYVAL lpContext AS LONG, BYVAL dwFlags AS LONG) AS LONG
' Not sure if these work...
SUB DDInitializeGUIDs()
CLSID_DirectDraw = CHR$(&HE0,&H0E,&HB7,&HD7, &H40,&H43, &HCF,&H11, &HB0,&H63, &H00,&H20,&HAF,&HC2,&HCD,&H35)
CLSID_DirectDrawClipper = CHR$(&HA0,&H17,&H38,&H59, &HB3,&H7D, &HCF,&H11, &HA2,&HDE, &H00,&HAA,&H00,&HB9,&H33,&H56)
IID_IDirectDraw = CHR$(&H80,&HDB,&H14,&H6C, &H33,&HA7, &HCE,&H11, &HA5,&H21, &H00,&H20,&HAF,&H0B,&HE5,&H60)
IID_IDirectDraw2 = CHR$(&HE0,&HF3,&HA6,&HB3, &H43,&H2B, &HCF,&H11, &HA2,&HDE, &H00,&HAA,&H00,&HB9,&H33,&H56)
IID_IDirectDrawSurface = CHR$(&H81,&HDB,&H14,&H6C, &H33,&HA7, &HCE,&H11, &HA5,&H21, &H00,&H20,&HAF,&H0B,&HE5,&H60)
IID_IDirectDrawSurface2 = CHR$(&H85,&H58,&H80,&H57, &HEC,&H6E, &HCF,&H11, &H94,&H41, &HA8,&H23,&H03,&HC1,&H0E,&H27)
IID_IDirectDrawSurface3 = CHR$(&H00,&H4E,&H04,&HDA, &HB2,&H69, &HD0,&H11, &HA1,&HD5, &H00,&HAA,&H00,&HB8,&HDF,&HBB)
IID_IDirectDrawPalette = CHR$(&H84,&HDB,&H14,&H6C, &H33,&HA7, &HCE,&H11, &HA5,&H21, &H00,&H20,&HAF,&H0B,&HE5,&H60)
IID_IDirectDrawClipper = CHR$(&H85,&HDB,&H14,&H6C, &H33,&HA7, &HCE,&H11, &HA5,&H21, &H00,&H20,&HAF,&H0B,&HE5,&H60)
IID_IDirectDrawColorControl = CHR$(&HE0,&H0E,&H9F,&H4B, &H7E,&H0D, &HD0,&H11, &H9B,&H06, &H00,&HA0,&HC9,&H03,&HA3,&HB8)
END SUB
' ===========================================================================================
' IUnknown Methods
' ===========================================================================================
FUNCTION DDIQueryInterface(BYVAL lpIUnknown AS LONG, riid AS STRING * 16, ppvObj AS LONG) AS LONG
! push ppvObj
! lea edx, riid
! push edx
! mov ecx, lpIUnknown
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDIAddRef(BYVAL lpIUnknown AS LONG) AS LONG
! mov ecx, lpIUnknown
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H04]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDIRelease(BYVAL lpIUnknown AS LONG) AS LONG
! mov ecx, lpIUnknown
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H08]
! mov FUNCTION[0], eax
END FUNCTION
' ===========================================================================================
' DirectDraw Methods
' ===========================================================================================
$IF NOT %DEF(%PBDD_NODD)
FUNCTION DDCompact(BYVAL lpDD AS LONG) AS LONG
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H0C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDCreateClipper(BYVAL lpDD AS LONG, BYVAL dwFlags AS DWORD, lpDDClipper AS LONG, pUnkOuter AS LONG) AS LONG
! push pUnkOuter
! push lpDDClipper
! push dwFlags
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H10]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDCreatePalette(BYVAL lpDD AS LONG, lpColorTable AS PALETTEENTRY PTR, lpDDPalette AS LONG, pUnkOuter AS LONG) AS LONG
! push pUnkOuter
! push lpDDPalette
! push lpColorTable
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H14]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDCreateSurface(BYVAL lpDD AS LONG, lpDDSurfaceDesc AS DDSURFACEDESC PTR, lpDDSurface AS LONG) AS LONG
! push lpDDSurface
! push lpDDSurfaceDesc
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H18]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDDuplicateSurface(BYVAL lpDD AS LONG, BYVAL lpDDSurface AS LONG, lpDupDDSurface AS LONG) AS LONG
! push lpDupDDSurface
! push lpDDSurface
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H1C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDEnumDisplayModes(BYVAL lpDD AS LONG, BYVAL dwFlags AS DWORD, lpDDSurfaceDesc AS DDSURFACEDESC PTR, BYVAL lpContext AS LONG, BYVAL lpEnumModesCallback AS LONG) AS LONG
! push lpEnumModesCallback
! push lpContext
! push lpDDSurfaceDesc
! push dwFlags
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H20]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDEnumSurfaces(BYVAL lpDD AS LONG, BYVAL dwFlags AS DWORD, lpDDSurfaceDesc AS DDSURFACEDESC PTR, BYVAL lpContext AS LONG, BYVAL lpEnumModesCallback AS LONG) AS LONG
! push lpEnumModesCallback
! push lpContext
! push lpDDSurfaceDesc
! push dwFlags
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H24]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDFlipToGDISurface(BYVAL lpDD AS LONG) AS LONG
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H28]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDGetCaps(BYVAL lpDD AS LONG, lpDDDriverCaps AS DDCAPS PTR, lpDDHELCaps AS DDCAPS PTR) AS LONG
! push lpDDHELCaps
! push lpDDDriverCaps
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H2C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDGetDisplayMode(BYVAL lpDD AS LONG, lpDDSurfaceDesc AS DDSURFACEDESC PTR) AS LONG
! push lpDDSurfaceDesc
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H30]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDGetFourCCCodes(BYVAL lpDD AS LONG, lpNumCodes AS DWORD, lpCodes AS DWORD) AS LONG
! push lpCodes
! push lpNumCodes
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H34]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDGetGDISurface(BYVAL lpDD AS LONG, lpGDIDDSSurface AS LONG) AS LONG
! push lpGDIDDSSurface
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H38]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDGetMonitorFrequency(BYVAL lpDD AS LONG, lpdwFrequency AS DWORD) AS LONG
! push lpdwFrequency
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H3C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDGetScanLine(BYVAL lpDD AS LONG, lpdwScanLine AS DWORD) AS LONG
! push lpdwScanLine
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H40]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDGetVerticalBlankStatus(BYVAL lpDD AS LONG, lpbIsInVB AS LONG) AS LONG
! push lpbIsInVB
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H44]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDInitialize(BYVAL lpDD AS LONG, lpGUID AS STRING * 16) AS LONG
! lea edx, lpGUID
! push edx
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H48]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDRestoreDisplayMode(BYVAL lpDD AS LONG) AS LONG
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H4C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSetCooperativeLevel(BYVAL lpDD AS LONG, BYVAL hWnd AS LONG, BYVAL dwFlags AS DWORD) AS LONG
! push dwFlags
! push hWnd
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H50]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSetDisplayMode(BYVAL lpDD AS LONG, BYVAL dwWidth AS DWORD, BYVAL dwHeight AS DWORD, BYVAL dwBpp AS DWORD) AS LONG
! push dwBpp
! push dwHeight
! push dwWidth
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H54]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDWaitForVerticalBlank(BYVAL lpDD AS LONG, BYVAL dwFlags AS DWORD, BYVAL hEvent AS LONG) AS LONG
! push hEvent
! push dwFlags
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H58]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDGetAvailableVidMem(BYVAL lpDD AS LONG, lpDDSCaps AS DWORD, lpdwTotal AS DWORD, lpdwFree AS DWORD) AS LONG
! push lpdwFree
! push lpdwTotal
! push lpDDSCaps
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H5C]
! mov FUNCTION[0], eax
END FUNCTION
$ENDIF
' ===========================================================================================
' DirectDraw Palette Methods
' ===========================================================================================
$IF NOT %DEF(%PBDD_NODDPALETTE)
FUNCTION DDPGetCaps(BYVAL lpDDPalette AS LONG, lpdwCaps AS DWORD) AS LONG
! push lpdwCaps
! mov ecx, lpDDPalette
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H0C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDPGetEntries(BYVAL lpDDPalette AS LONG, BYVAL dwFlags AS DWORD, BYVAL dwBase AS DWORD, BYVAL dwNumEntries AS DWORD, lpEntries AS PALETTEENTRY PTR) AS LONG
! push lpEntries
! push dwNumEntries
! push dwBase
! push dwFlags
! mov ecx, lpDDPalette
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H10]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDPInitialize(BYVAL lpDD AS LONG, BYVAL dwFlags AS DWORD, lpDDColorTable AS PALETTEENTRY PTR) AS LONG
! push lpDDColorTable
! push dwFlags
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H14]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDPSetEntries(BYVAL lpDDPalette AS LONG, BYVAL dwFlags AS DWORD, BYVAL dwStartingEntry AS DWORD, BYVAL dwCount AS DWORD, lpEntries AS PALETTEENTRY PTR) AS LONG
! push lpEntries
! push dwCount
! push dwStartingEntry
! push dwFlags
! mov ecx, lpDDPalette
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H18]
! mov FUNCTION[0], eax
END FUNCTION
$ENDIF
' ===========================================================================================
' DirectDraw Clipper Methods
' ===========================================================================================
$IF NOT %DEF(%PBDD_NODDCLIPPER)
FUNCTION DDCGetClipList(BYVAL lpDDClipper AS LONG, lpRect AS RECT PTR, lpClipList AS RGNDATA PTR, lpdwSize AS DWORD) AS LONG
! push lpdwSize
! push lpClipList
! push lpRect
! mov ecx, lpDDClipper
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H0C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDCGetHWnd(BYVAL lpDDClipper AS LONG, lphWnd AS LONG) AS LONG
! push lphWnd
! mov ecx, lpDDClipper
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H10]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDCInitialize(BYVAL lpDD AS LONG, BYVAL dwFlags AS DWORD) AS LONG
! push dwFlags
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H14]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDCIsClipListChanged(BYVAL lpDDClipper AS LONG, lpbChanged AS LONG) AS LONG
! push lpbChanged
! mov ecx, lpDDClipper
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H18]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDCSetClipList(BYVAL lpDDClipper AS LONG, lpClipList AS RGNDATA PTR, BYVAL dwFlags AS DWORD) AS LONG
! push dwFlags
! push lpClipList
! mov ecx, lpDDClipper
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H1C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDCSetHWnd(BYVAL lpDDClipper AS LONG, BYVAL dwFlags AS DWORD, BYVAL hWnd AS LONG) AS LONG
! push hWnd
! push dwFlags
! mov ecx, lpDDClipper
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H20]
! mov FUNCTION[0], eax
END FUNCTION
$ENDIF
' ===========================================================================================
' DirectDraw Surface Methods
' ===========================================================================================
$IF NOT %DEF(%PBDD_NODDSURFACE)
FUNCTION DDSAddAttachedSurface(BYVAL lpDDSurface AS LONG, BYVAL lpDDDestSurface AS LONG) AS LONG
! push lpDDDestSurface
! push lpDDDestSurface
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H0C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSAddOverlayDirtyRect(BYVAL lpDDSurface AS LONG, lpRect AS RECT PTR) AS LONG
! push lpRect
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H10]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSBlt(BYVAL lpDDSurface AS LONG, lpDestRect AS RECT PTR, BYVAL lpDDSrcSurface AS LONG, lpSrcRect AS RECT PTR, BYVAL dwFlags AS DWORD, lpDDBltFx AS DDBLTFX PTR) AS LONG
! push lpDDBltFx
! push dwFlags
! push lpSrcRect
! push lpDDSrcSurface
! push lpDestRect
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H14]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSBltBatch(BYVAL lpDDSurface AS LONG, lpDDBltBatch AS DDBLTBATCH PTR, BYVAL dwCount AS DWORD, BYVAL dwFlags AS DWORD) AS LONG
! push dwFlags
! push dwCount
! push lpDDBltBatch
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H18]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSBltFast(BYVAL lpDDSurface AS LONG, BYVAL dwX AS DWORD, BYVAL dwY AS DWORD, BYVAL lpDDSrcSurface AS LONG, lpSrcRect AS RECT PTR, BYVAL dwTrans AS DWORD) AS LONG
! push dwTrans
! push lpSrcRect
! push lpDDSrcSurface
! push dwY
! push dwX
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H1C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSDeleteAttachedSurface(BYVAL lpDDSurface AS LONG, BYVAL dwFlags AS DWORD, BYVAL lpDDAttachedSurface AS LONG) AS LONG
! push lpDDAttachedSurface
! push dwFlags
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H20]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSEnumAttachedSurfaces(BYVAL lpDDSurface AS LONG, BYVAL lpContext AS LONG, BYVAL lpEnumSurfacesCallback AS LONG) AS LONG
! push lpEnumSurfacesCallback
! push lpContext
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H24]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSEnumOverlayZOrders(BYVAL lpDDSurface AS LONG, BYVAL dwFlags AS DWORD, BYVAL lpContext AS LONG, BYVAL lpfnCallback AS LONG) AS LONG
! push lpfnCallback
! push lpContext
! push dwFlags
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H28]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSFlip(BYVAL lpDDSurface AS LONG, BYVAL lpDDSurfaceTargetOverride AS LONG, BYVAL dwFlags AS DWORD) AS LONG
! push dwFlags
! push lpDDSurfaceTargetOverride
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H2C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSGetAttachedSurface(BYVAL lpDDSurface AS LONG, lpDDSCaps AS DDSCAPS PTR, lpDDAttachedSurface AS LONG) AS LONG
! push lpDDAttachedSurface
! push lpDDSCaps
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H30]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSGetBltStatus(BYVAL lpDDSurface AS LONG, BYVAL dwFlags AS DWORD) AS LONG
! push dwFlags
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H34]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSGetCaps(BYVAL lpDDSurface AS LONG, lpDDSCaps AS DDSCAPS PTR) AS LONG
! push lpDDSCaps
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H38]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSGetClipper(BYVAL lpDDSurface AS LONG, lpDDClipper AS LONG) AS LONG
! push lpDDClipper
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H3C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSGetColorKey(BYVAL lpDDSurface AS LONG, BYVAL dwFlags AS DWORD, lpDDColorKey AS DDCOLORKEY PTR) AS LONG
! push lpDDColorKey
! push dwFlags
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H40]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSGetDC(BYVAL lpDDSurface AS LONG, hDC AS LONG) AS LONG
! push hDC
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H44]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSGetFlipStatus(BYVAL lpDDSurface AS LONG, BYVAL dwFlags AS DWORD) AS LONG
! push dwFlags
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H48]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSGetOverlayPosition(BYVAL lpDDSurface AS LONG, lplX AS LONG, lplY AS LONG) AS LONG
! push lplY
! push lplX
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H4C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSGetPalette(BYVAL lpDDSurface AS LONG, lpDDPalette AS LONG) AS LONG
! push lpDDPalette
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H50]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSGetPixelFormat(BYVAL lpDDSurface AS LONG, lpDDPixelFormat AS DDPIXELFORMAT PTR) AS LONG
! push lpDDPixelFormat
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H54]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSGetSurfaceDesc(BYVAL lpDDSurface AS LONG, lpDDSurfaceDesc AS DDSURFACEDESC PTR) AS LONG
! push lpDDSurfaceDesc
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H58]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSInitialize(BYVAL lpDD AS LONG, lpDDSurfaceDesc AS DDSURFACEDESC PTR) AS LONG
! push lpDDSurfaceDesc
! mov ecx, lpDD
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H5C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSIsLost(BYVAL lpDDSurface AS LONG) AS LONG
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H60]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSLock(BYVAL lpDDSurface AS LONG, lpDestRect AS RECT PTR, lpDDSurfaceDesc AS DDSURFACEDESC PTR, BYVAL dwFlags AS DWORD, BYVAL hEvent AS LONG) AS LONG
! push hEvent
! push dwFlags
! push lpDDSurfaceDesc
! push lpDestRect
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H64]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSReleaseDC(BYVAL lpDDSurface AS LONG, BYVAL hDC AS LONG) AS LONG
! push hDC
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H68]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSRestore(BYVAL lpDDSurface AS LONG) AS LONG
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H6C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSSetClipper(BYVAL lpDDSurface AS LONG, BYVAL lpDDClipper AS LONG) AS LONG
! push lpDDClipper
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H70]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSSetColorKey(BYVAL lpDDSurface AS LONG, BYVAL dwFlags AS DWORD, lpDDColorKey AS DDCOLORKEY PTR) AS LONG
! push lpDDColorKey
! push dwFlags
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H74]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSSetOverlayPosition(BYVAL lpDDSurface AS LONG, BYVAL lX AS LONG, BYVAL lY AS LONG) AS LONG
! push lY
! push lX
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H78]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSSetPalette(BYVAL lpDDSurface AS LONG, BYVAL lpDDPalette AS LONG) AS LONG
! push lpDDPalette
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H7C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSUnlock(BYVAL lpDDSurface AS LONG, BYVAL lpSurfaceData AS LONG) AS LONG
! push lpSurfaceData
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H80]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSUpdateOverlay(BYVAL lpDDSurface AS LONG, lpSrcRect AS RECT PTR, BYVAL lpDDDestSurface AS LONG, lpDestRect AS RECT PTR, BYVAL dwFlags AS DWORD, lpDDOverlayFx AS DDOVERLAYFX PTR) AS LONG
! push lpDDOverlayFx
! push dwFlags
! push lpDestRect
! push lpDDDestSurface
! push lpSrcRect
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H84]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSUpdateOverlayDisplay(BYVAL lpDDSurface AS LONG, BYVAL dwFlags AS DWORD) AS LONG
! push dwFlags
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H88]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSUpdateOverlayZOrder(BYVAL lpDDSurface AS LONG, BYVAL dwFlags AS DWORD, BYVAL lpDDSReference AS LONG) AS LONG
! push lpDDSReference
! push dwFlags
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H8C]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSGetDDInterface(BYVAL lpDDSurface AS LONG, lpDD AS LONG) AS LONG
! push lpDD
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H90]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSPageLock(BYVAL lpDDSurface AS LONG, BYVAL dwFlags AS DWORD) AS LONG
! push dwFlags
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H94]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSPageUnlock(BYVAL lpDDSurface AS LONG, BYVAL dwFlags AS DWORD) AS LONG
! push dwFlags
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H98]
! mov FUNCTION[0], eax
END FUNCTION
FUNCTION DDSSetSurfaceDesc(BYVAL lpDDSurface AS LONG, lpddsd AS DDSURFACEDESC PTR, BYVAL dwFlags AS DWORD) AS LONG
! push dwFlags
! push lpddsd
! mov ecx, lpDDSurface
! push ecx
! mov ecx, dword ptr[ecx]
! call dword ptr[ecx+&H9C]
! mov FUNCTION[0], eax
END FUNCTION
$ENDIF
------------------
X
-
DirectDraw & FPU
'The example demonstrates use DDRAW with FPU
'
'I have not carried out optimization of a code - this is a crude code
'This code has reminded me about old kind DOS
'DisplayMode is 320x200x32 ~ &FFFFFFFF
'
'DDRAW.INC You can take in - http://ryme.future.easyspace.com/
'
'I have made change of a movement ON a vertical.
'You has an opportunity TO make it also ON a horizontal.
' --------------------------- V.Shulakov ---------------------------
#COMPILE EXE
#OPTION VERSION4
#DIM ALL
#INCLUDE "WIN32API.INC"
#INCLUDE "DDRAW.INC"
%NULL_PAINT = &h00000000
%BLUE_PAINT = &h000099ff
%YELL_PAINT = &h00ffff00
DECLARE SUB NEXTFLAG()
GLOBAL ddsd AS DDSURFACEDESC
GLOBAL fk AS SINGLE '
GLOBAL lpDDSPrimary AS LONG
GLOBAL ddscaps AS DDSCAPS
GLOBAL LPDD AS DWORD
GLOBAL DDWIDTH AS LONG
GLOBAL DDHEIGHT AS LONG
'__________________________________ START ___________________________________
'
FUNCTION WINMAIN (BYVAL hInst AS LONG, _
BYVAL hPrevInst AS LONG, _
CmdLine AS ASCIIZ PTR, _
BYVAL CmdShow AS LONG) EXPORT AS LONG
LOCAL Msg AS tagMsg
LOCAL wndclass AS WndClassEx
GLOBAL hWnd AS LONG
LOCAL szClassName AS ASCIIZ * 80
LOCAL szDisplayName AS ASCIIZ * 80
LOCAL TMP AS LONG
GLOBAL GPTR AS LONG
DIM G(1:200,1:90) AS GLOBAL LONG
GPTR = VARPTR(G(1,1))
ddwidth = 320
ddheight = 200
fk = 0.031
szClassName = "DDraw FPU Demo"
szDisplayName = szClassName
wndclass.cbSize = SIZEOF(WndClass)
wndclass.style = %CS_HREDRAW OR %CS_VREDRAW
wndclass.lpfnWndProc = CODEPTR( WndProc )
wndclass.cbClsExtra = 0
wndclass.cbWndExtra = 0
wndclass.hInstance = hinst
wndclass.hIcon = 0
wndclass.hCursor = 0
wndclass.hbrBackground = GetStockObject( %white_BRUSH )
wndclass.lpszMenuName = %NULL
wndclass.lpszClassName = VARPTR( szClassName )
wndclass.hIconSm = 0
RegisterClassEx wndclass
HWND=CreateWindowEx(0,szClassName,_
szDisplayName,_
%WS_POPUP,_
0, 0, ddwidth, ddheight,_
BYVAL %NULL, BYVAL %NULL,_
hInst, BYVAL %NULL)
ShowWindow hWnd, %SW_SHOWNORMAL
SetFocus hWnd
ShowCursor 0
'_________________________________________________________________
'
IF %DD_OK<>DDDirectDrawCreate(BYVAL %NULL,lpDD,BYVAL %NULL) THEN
! JMP FATAL
END IF
IF %DD_OK<>DDSetCooperativeLevel(lpDD, hWnd, _
%DDSCL_EXCLUSIVE OR %DDSCL_FULLSCREEN) THEN
! JMP FATAL
END IF
IF %DD_OK<>DDSetDisplayMode( lpDD, ddwidth, ddheight, 32) THEN
! JMP FATAL
END IF
ddsd.dwSize=SIZEOF(DDSD)
ddsd.dwFlags=%DDSD_CAPS
ddsd.ddsCaps.dwCaps=%DDSCAPS_PRIMARYSURFACE
IF %DD_OK<>DDCreateSurface(lpDD, ddsd, lpDDSPrimary) THEN
! JMP FATAL
END IF
'_________________________________________________________________
'
WHILE -1
IF 0<>PeekMessage(msg, BYVAL %NULL, 0, 0, %PM_REMOVE) THEN
IF msg.message = %WM_QUIT THEN
PostQuitMessage msg.wParam
EXIT LOOP
ELSE
TranslateMessage msg
DispatchMessage msg
END IF
ELSE
IF GetFocus = hWnd THEN
ddsd.dwSize= SIZEOF(DDSD) '(DDSURFACEDESC)
ddsd.dwFlags=%DDSD_PITCH
WHILE -1
TMP=DDSLock(lpDDSPrimary, BYVAL %NULL, ddsd, %DDLOCK_WAIT, BYVAL %NULL)
IF TMP = %DD_OK THEN
EXIT LOOP
ELSEIF TMP = %DDERR_SURFACELOST THEN
DDSRestore lpDDSPrimary
END IF
WEND
DDWaitForVerticalBlank lpDD, %DDWAITVB_BLOCKBEGIN, BYVAL %NULL
STATIC L AS LONG
IF L=0 THEN
! call NEXTframe
! mov L,1
ELSE
! call NEXTFLAG
END IF
DDSUNLOCK lpDDSPrimary, ddsd.lpSurface
ELSE
! mov L,0
END IF
END IF
WEND
FATAL: '*************************************************************
IF lpDD <> %NULL THEN
IF lpDDSPrimary <> %NULL THEN
DDIRelease lpDDSPrimary
lpDDSPrimary = %NULL
END IF
DDIRelease lpDD
lpDD = %NULL
END IF
FUNCTION= msg.wParam
END FUNCTION
'_____________________________________________________________________________________
' Window Proc
'_____________________________________________________________________________________
'
FUNCTION WndProc (BYVAL hWin AS LONG, BYVAL uMsg AS LONG, _
BYVAL wParam AS LONG, BYVAL lParam AS LONG) EXPORT AS LONG
IF uMsg = %WM_KEYDOWN THEN
IF wParam = %VK_ESCAPE THEN
PostQuitMessage 0
FUNCTION=0
EXIT FUNCTION
END IF
ELSEIF uMsg = %WM_DESTROY THEN
PostQuitMessage 0
FUNCTION=0
EXIT FUNCTION
END IF
FUNCTION = DefWindowProc(hWin, uMsg, wParam, lParam)
END FUNCTION
'____________________________________________________________
'
SUB nextFrame
#REGISTER NONE
LOCAL col AS LONG
LOCAL j AS LONG
LOCAL i AS LONG
! PUSHAD
! mov eax,ddsd[36]
! mov esi,eax ; ' htmp=ddsd.lpSurface
! mov col,201
! xor edx,edx
mf0:
! inc edx
! dec col
! mov eax,esi
! mov edi,eax
! xor ecx,ecx
mf1:
! inc ecx
! mov eax,230
! sub eax,col
! mov ebx,edi
! mov [ebx],eax ; ' BLUE
! INC edi
! mov eax,230
! sub eax,col
! mov ebx,edi
! mov [ebx],eax ; ' GREEN
! INC edi
! mov ebx,edi
! xor eax,eax
! mov [ebx],eax ; ' RED
! INC edi
! mov ebx,edi
! xor eax,eax
! mov [ebx],eax ; ' REZiNTEN -----
! INC edi
! cmp ecx,320
! jne mf1 ;--------------------->
! mov eax,ddsd[16]
! add esi,eax ; ' htmp=htmp+ddsd.Union1.lPitch
! cmp edx,200
! jne mf0 ;--------------------->
! mov J,0
mfr2: 'for j
! mov I,0
mfr1: 'for i
! cmp J,11
! jl ML1
! cmp J,80
! jg ML1
! cmp I,11
! jl ML1
! cmp I,190
! jg ML1
! cmp J,46
! jl ML2
! jmp ML3
ML1:
! mov eax,J
! mov ebx,800
! mul ebx
! mov edx,eax
! mov ebx,I
! shl ebx,2
! add edx,ebx
! add edx,GPTR
! mov esi,%NULL_PAINT
! mov [edx],esi
! jmp ML0
ML2:
! mov eax,j
! mov ebx,800
! mul ebx
! mov edx,eax
! mov ebx,I
! shl ebx,2
! add edx,ebx
! add edx,GPTR
! mov esi,%BLUE_PAINT
! mov [edx],esi
! jmp ML0
ML3:
! mov eax,j
! mov ebx,800
! mul ebx
! mov edx,eax
! mov ebx,I
! shl ebx,2
! add edx,ebx
! add edx,GPTR
! mov esi,%YELL_PAINT
! mov [edx],esi
ML0:
! inc I
! cmp I,200
! jl mfr1
! inc J
! cmp J,90
! jl mfr2
! POPAD
END SUB
'_________________________________________________________
'
SUB NEXTFLAG
#REGISTER NONE
LOCAL i AS LONG 'for i~
LOCAL J AS LONG 'for j~
STATIC K AS SINGLE 'FPU tmp
STATIC J1 AS SINGLE 'FPU tmp
STATIC H AS LONG
STATIC H1 AS LONG
LOCAL col AS LONG 'COLOR--
LOCAL ftmp AS LONG 'FPU tmp
LOCAL fi AS LONG 'FPU tmp
! PUSHAD
! mov eax,ddsd[16] ;ddsd.Union1.lPitch
! mov ebx,45
! mul ebx
! add eax,ddsd[36] ;ddsd.lpSurface
! mov esi,eax ;htmp
! mov FI,10
! mov I,0
mfrp1: 'for i 200
! inc I
! fld K
! fadd FK
! fst K
! fcos
! fimul FI
! fist H
! fst J1
! mov ftmp,4
! fimul ftmp
! fist H1
! add H1,40
! fninit
! mov eax,ddsd[16]
! mul H
! mov ebx,eax
! mov eax,I
! shl eax,2
! add eax,240
! add eax,esi
! add eax,ebx
! mov edi,eax
! mov COL,201
! mov J,0
mfrp2: 'for j 90
! inc J
! INC H
! DEC COL
! mov eax,J
! dec eax
! mov ebx,800
! mul ebx
! mov edx,eax
! mov ebx,I
! dec ebx
! shl ebx,2
! add edx,ebx
! add edx,GPTR
! mov eax,[edx]
! cmp eax,0 ;cmp<>0
! jz m_null
! mov al,[edx]
! cmp al,0
! jz mb1
! sub al,H1
mb1:
! mov [edi],al
! mov al,[edx+1]
! cmp al,0
! jz mb2
! sub al,H1
mb2:
! mov [edi+1],al
! mov al,[edx+2]
! cmp al,0
! jz mb3
! sub al,H1
mb3:
! mov [edi+2],al
! mov al,[edx+3]
! cmp al,0
! jz mb4
! sub al,H1
mb4:
! mov [edi+3],al
! jmp m_finish
m_null: 'frame colored fill
! mov al,H
! add al,74
! mov [edi],al ; 'BLUE 155 << 177 >--
! mov [edi+1],al ; 'GREEN
! xor al,al
! mov [edi+2],al ; 'RED
! mov [edi+3],al ; 'INTENS
m_finish:
! mov eax,ddsd[16]
! add edi,eax
! cmp J,90
! jl mfrp2 ;--------------------->
! cmp I,200
! jl mfrp1 ;--------------------->
! POPAD
END SUB
'___________________________________________________________________
'
' end end end end end end end end end end end end end end end end
'___________________________________________________________________
'
------------------
Tags: None
Leave a comment: