源码下载:win32window.rar;---------------------------------------;
;    DDRAW  Demo                  ;
;      本人初学win32汇编不久,对其并不是太熟,当然学习汇编仅是为了学破解,
;学破解原来的目的是想自己做外挂,当然我也正在跨出这一步,只是基础太差,不知
;要到何能马月才有所成。
;  本程序主要是用汇编实现了DirectDraw的窗口化。在写这个程序时在网上查了
;很久似乎并没有用WIN32写的窗口模式的DirectDraw程序,所以只有边学习,边摸索,
;大家都知道很多游戏是全屏的。并没有提供窗口化,为了对游戏进行一些辅助性的修改
;实现窗口化是很有必要的,那么如果有人想用WIN32对游戏进行修改,那么可以共同探讨
;一下,本程序还存在一些不足之处,请指正,不过总体方向没错。
;  下一篇我将用WIN32实现全屏和窗口化之间的切换。请大家鼓力一下小弟。
;    Author :         Jacksheng         ;
;---------------------------------------;

; View with TAB size 8

    TITLE WIN32ASM EXAMPLE
    .486
    .MODEL FLAT, STDCALL
    option casemap :none

;-----------------------------------------------------------;
;                WIN32ASM / DDRAW DEMO                     ;
;-----------------------------------------------------------;

INCLUDE   windows.inc
INCLUDE   gdi32.inc
INCLUDE   kernel32.inc
INCLUDE   user32.inc
INCLUDE   ddraw.inc

INCLUDELIB   gdi32.lib
INCLUDELIB   kernel32.lib
INCLUDELIB   user32.lib
INCLUDELIB   ddraw.lib

ICO_MAIN  equ  1000h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        ;对MESSAGEBOX进行宏定义
FATAL    MACRO  msg
    LOCAL   @@msg
    .DATA
    @@msg  db  msg, 0
    .CODE
    INVOKE  MessageBox, hWinMain, ADDR @@msg, ADDR szDisplayName, MB_OK
    INVOKE  ExitProcess, 0
ENDM
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        ;对色进行宏定义
RGB     macro red,green,blue 
          xor eax,eax 
          mov ah,blue 
          shl eax,8 
          mov ah,green 
          mov al,red 
endm 


; 数据段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                .data?
hInstance       dd       ?
hWinMain        dd       ?
stRt    RECT  <?>
stPoint    POINT  <?>
stPoint2  POINT  <?>
lpDD    LPDIRECTDRAW    ?    ; DDraw object
lpDDSPrimary  LPDIRECTDRAWSURFACE  ?    ; DDraw primary surface
lpDDSStore  LPDIRECTDRAWSURFACE  ?
ddsd    DDSURFACEDESC    <?>    ; DDraw surface descriptor
ddscaps    DDSCAPS      <?>    ; DDraw capabilities 
pcClipper  LPDIRECTDRAWCLIPPER   ?
@hDc    HDC      ?
stFx    DDBLTFX      <?>
                 .const

szCaptionMain   db        'My first Window !',0
szText          db        'Win32 Assembly, Simple and powerful !',0
szClassName  db    "DDRAW Plasma Demo", 0  ; class name
szDisplayName  EQU    <szClassName>    ; window name
szTest    db    "This is a stinky App",0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                 .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; // old DirectDraw Initialization stuff.
;// Set a window mode DirectDraw Display.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        
_Init    proc
    invoke    DirectDrawCreate,NULL,ADDR lpDD,NULL        ;建对象
    .if    eax  !=DD_OK
        FATAL   "Failed to create directdraw object!"      
    .endif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    
    DDINVOKE  SetCooperativeLevel, lpDD, NULL, DDSCL_NORMAL      ;建控制级非独占模式
    .IF     eax   != DD_OK
        FATAL   "Couldn't set DirectDraw cooperative level"
    .ENDIF
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    
    invoke    RtlZeroMemory,addr  ddsd,sizeof  ddsd
    mov    [ddsd.dwSize], sizeof DDSURFACEDESC
    mov    [ddsd.dwFlags], DDSD_CAPS
    mov    [ddsd.ddsCaps.dwCaps], DDSCAPS_PRIMARYSURFACE
    DDINVOKE  CreateSurface, lpDD, ADDR ddsd, ADDR lpDDSPrimary, NULL    ;建主表面
    .IF     eax   != DD_OK
        FATAL   "Couldn't create primary surface"
    .ENDIF
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    
    mov    [ddsd.dwSize], sizeof DDSURFACEDESC
    mov    [ddsd.dwFlags], DDSD_CAPS or DDSD_WIDTH or DDSD_HEIGHT
    mov    [ddsd.ddsCaps.dwCaps], DDSCAPS_OFFSCREENPLAIN OR DDSCAPS_3DDEVICE
    mov    [ddsd.dwWidth],800
    mov    [ddsd.dwHeight],600  
    DDINVOKE  CreateSurface, lpDD, ADDR ddsd, ADDR lpDDSStore, NULL    ;建后台表面
    .IF     eax   != DD_OK
        FATAL   "Couldn't create store surface"
    .ENDIF
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  
    DDINVOKE  CreateClipper, lpDD, 0, ADDR pcClipper, NULL      ;设裁剪器
    .IF     eax   != DD_OK
        FATAL   "Couldn't create Clipper "
    .ENDIF
    DDCINVOKE  SetHWnd,pcClipper, 0, hWinMain
    .IF     eax   != DD_OK
        DDCINVOKE  Release,pcClipper
        FATAL  "Failed to create primary surface"
    .ENDIF
    DDSINVOKE  SetClipper,lpDDSPrimary,pcClipper
    .IF     eax != DD_OK
        DDCINVOKE  Release,pcClipper
        FATAL   "Failed to create SetClipper primary surface"
    .ENDIF
    ret     
_Init    endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; // Load images from offscteen buffer to primary buffer
; // and for display.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    

_DisPlay  proc
    push  0
    pop  stPoint.x
    push  0
    pop  stPoint.y
    invoke  ClientToScreen,hWinMain,addr  stPoint    ;get the client area on the desktop by using this line.
    xor  eax,eax
    mov  eax,stPoint.x
    mov  stRt.left,eax
    add  eax,800
    mov  stRt.right,eax
    mov  eax,stPoint.y
    mov  stRt.top,eax
    add  eax,600
    mov  stRt.bottom,eax
    
    .while  TRUE
      DDSINVOKE  Blt,lpDDSPrimary,addr stRt,  lpDDSStore,NULL,DDBLT_WAIT,NULL
      .if     eax     == DD_OK
        ;ret
          .BREAK 
      .elseif   eax     == DDERR_SURFACELOST
          DDSINVOKE  Restore, lpDDSPrimary
          DDSINVOKE  Restore, lpDDSStore
      .elseif    eax    !=DDERR_WASSTILLDRAWING
          ret      
            ;FATAL "Couldn't lock surface"
      .endif
      
    .endw
    ret
_DisPlay  endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   
; a test:// The conclusion is: Under no circumstance, draw directly to
; primary Surface!// It doesn't work that way.// ...// ...
; This is just a simple test function. It has shit use in this
; project.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    
_TestDraw  proc  pointx,pointy
    ;local  @hDc:HDC                //要设为全局变量才行.
    local  @Point:POINT  
    local  @Rect:RECT

    mov  eax,pointx
    mov  @Point.x,eax
    sub  eax,50
    mov  @Rect.left,eax
    add  eax,100
    mov  @Rect.right,eax
    mov  eax,pointy
    mov  @Point.y,eax
    sub  eax,50
    mov  @Rect.top,eax
    add  eax,100
    mov  @Rect.bottom,eax
    DDSINVOKE  GetDC,lpDDSStore,addr @hDc
    .if  eax!=DD_OK
      ret
    .else
    invoke  ClientToScreen,hWinMain,addr  @Point          ;坐标转换即相对转为绝对因DIRECTXDRAW需要
    RGB  255,255,0
    invoke  SetTextColor,@hDc,eax
    invoke  TextOut,@hDc, 20, 20,addr  szText, sizeof  szText
    invoke  Ellipse,@hDc,@Rect.left,@Rect.top,@Rect.right,@Rect.bottom
    DDSINVOKE  ReleaseDC,lpDDSStore,@hDc
    .endif
    ret
_TestDraw  endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; clear both off csreen buffer and primary buffer.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Clear    proc
    mov  eax,sizeof  stFx
    mov  stFx.dwSize,eax
    mov  stFx.dwFillColor,0
    .while  TRUE
      DDSINVOKE  Blt,lpDDSPrimary,NULL,NULL,NULL,DDBLT_COLORFILL,addr  stFx
      .if     eax     == DD_OK
          .BREAK 
      .elseif   eax     == DDERR_SURFACELOST
          DDSINVOKE  Restore, lpDDSPrimary
      .elseif    eax    !=DDERR_WASSTILLDRAWING
          .BREAK      
      .endif
    .endw
    
    .while  TRUE
      DDSINVOKE  Blt,lpDDSStore,NULL,NULL,NULL,DDBLT_COLORFILL,addr  stFx
      .if     eax     == DD_OK
          .BREAK 
      .elseif   eax     == DDERR_SURFACELOST
          DDSINVOKE  Restore, lpDDSStore
      .elseif    eax    !=DDERR_WASSTILLDRAWING
          .BREAK      
      .endif
    .endw
    ret
_Clear    endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; // make sure all things are terminated and set to NULL
;// when application ends.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Terminate  proc
_Terminate  endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_ProcWinMain     proc      uses ebx edi esi,hWnd,uMsg,wParam,lParam
                 local     @stPs:PAINTSTRUCT
                 local     @stRect:RECT
                     mov       eax,uMsg
                 
;********************************************************************
                 .if      eax==  WM_LBUTTONDOWN
                     mov eax,lParam 
              and eax,0FFFFh 
              mov stPoint2.x,eax 
              mov eax,lParam 
              shr eax,16 
              mov stPoint2.y,eax 

                     ;invoke   GetCursorPos,addr   stPoint2

                            invoke  _Clear
        invoke  _TestDraw,stPoint2.x,stPoint2.y
                            invoke  _DisPlay
                     
;********************************************************************
                 .elseif    eax ==   WM_CLOSE
                     
                     FATAL "Please accept Quit!"
                            invoke  DestroyWindow,hWinMain
                            invoke  PostQuitMessage,NULL
;********************************************************************
                 .else
                            invoke  DefWindowProc,hWnd,uMsg,wParam,lParam
                                ret
                 .endif
;********************************************************************
                 xor        eax,eax
                 ret
_ProcWinMain     endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain         proc
                 local      @stWndClass:WNDCLASSEX
                 local      @stMsg:MSG
                 invoke     GetModuleHandle,NULL
                 mov             hInstance,eax
                 invoke     RtlZeroMemory,addr @stWndClass,sizeof @stWndClass

;********************************************************************
; 注册窗口类
;********************************************************************
    invoke    LoadIcon,NULL,IDI_INFORMATION
    mov    @stWndClass.hIcon,eax
              invoke     LoadCursor,0,IDC_ARROW
                mov        @stWndClass.hCursor,eax
                push       hInstance
                pop        @stWndClass.hInstance
                mov        @stWndClass.cbSize,sizeof WNDCLASSEX
                mov       @stWndClass.style,CS_HREDRAW or CS_VREDRAW
                mov        @stWndClass.lpfnWndProc,offset _ProcWinMain
                INVOKE    GetStockObject, BLACK_BRUSH
    ;mov    [wc.hbrBackground], eax
                mov        @stWndClass.hbrBackground,eax;COLOR_WINDOW + 1
                mov        @stWndClass.lpszClassName,offset szClassName
                invoke     RegisterClassEx,addr @stWndClass
;********************************************************************
; 建立并显示窗口
;********************************************************************
                invoke     CreateWindowEx,WS_EX_CLIENTEDGE,\
                           offset szClassName,offset szCaptionMain,\
                           WS_OVERLAPPEDWINDOW,\
                           100,100,800,600,\
                           NULL,NULL,hInstance,NULL
                mov        hWinMain,eax
                invoke    _Init
                invoke     ShowWindow,hWinMain,SW_SHOWNORMAL
                invoke     UpdateWindow,hWinMain
                  
;********************************************************************
; 消息循环
;********************************************************************
                 .while     TRUE
                            invoke    GetMessage,addr @stMsg,NULL,0,0
                            .break    .if eax  == 0
                            invoke    TranslateMessage,addr @stMsg
                            invoke    DispatchMessage,addr @stMsg
                 .endw
                 ret
                 
_WinMain         endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
                 call       _WinMain
                 invoke     ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                 end        start






DDRAW.INC这个文件主要是参考 Ewald Snel  这位牛人的.并做了些修改.
;---------------------------------------;
;  DDRAW include file          ;
;                    ;
;  Author :  Ewald Snel        ;
;  Copyright (C) 1999, Diamond Crew  ;
;                    ;
;  http://here.is/diamond/        ;
;---------------------------------------;


STDMETHOD  MACRO  name, argl :VARARG
LOCAL @tmp_a
LOCAL @tmp_b

@tmp_a  TYPEDEF PROTO argl
@tmp_b  TYPEDEF PTR @tmp_a
name    @tmp_b    ?
ENDM

DDINVOKE  MACRO  func, this, arglist :VARARG
  mov      eax , [this]
  mov      eax , [eax]

  IFB <arglist>
    INVOKE [IDirectDrawVtbl. func][eax], this
  ELSE
    INVOKE [IDirectDrawVtbl. func][eax], this, arglist
  ENDIF
ENDM

DDSINVOKE  MACRO  func, this, arglist :VARARG
  mov      eax , [this]
  mov      eax , [eax]

  IFB <arglist>
    INVOKE [IDirectDrawSurfaceVtbl. func][eax], this
  ELSE
    INVOKE [IDirectDrawSurfaceVtbl. func][eax], this, arglist
  ENDIF
ENDM

DDCINVOKE  MACRO  func, this, arglist :VARARG
  mov      eax , [this]
  mov      eax , [eax]

  IFB <arglist>
    INVOKE [IDirectDrawClipperVtbl. func][eax], this
  ELSE
    INVOKE [IDirectDrawClipperVtbl. func][eax], this, arglist
  ENDIF
;这一段是本人参考着新加的.为建窗口模式的需要.
ENDM



DirectDrawCreate    PROTO :DWORD, :DWORD, :DWORD
DirectDrawCreateClipper  PROTO :DWORD, :DWORD, :DWORD
DirectDrawEnumerateA  PROTO :DWORD, :DWORD
DirectDrawEnumerate    EQU    <DirectDrawEnumerateA>

EXTERNDEF  C CLSID_DirectDraw:GUID
EXTERNDEF  C CLSID_DirectDrawClipper:GUID
EXTERNDEF  C IID_IDirectDraw:GUID
EXTERNDEF  C IID_IDirectDrawSurface:GUID
EXTERNDEF  C IID_IDirectDrawPalette:GUID
EXTERNDEF  C IID_IDirectDrawClipper:GUID

LPDIRECTDRAW      TYPEDEF    PTR IDirectDraw
LPDIRECTDRAWSURFACE    TYPEDEF    PTR IDirectDrawSurface
LPDIRECTDRAWPALETTE    TYPEDEF    PTR IDirectDrawPalette
LPDIRECTDRAWCLIPPER    TYPEDEF    PTR IDirectDrawClipper
LPDDFXROP        TYPEDEF    PTR DDFXROP
LPDDSURFACEDESC      TYPEDEF    PTR DDSURFACEDESC
LPDDCAPS        TYPEDEF    PTR DDCAPS
LPDDBLTFX        TYPEDEF    PTR DDBLTFX
LPDDSCAPS        TYPEDEF    PTR DDSCAPS
LPDDCOLORKEY      TYPEDEF    PTR DDCOLORKEY
LPDDOVERLAYFX      TYPEDEF    PTR DDOVERLAYFX
LPDDPIXELFORMAT      TYPEDEF    PTR DDPIXELFORMAT
LPDDBLTBATCH      TYPEDEF    PTR DDBLTBATCH

; windows defines
LPRECT          TYPEDEF    PTR RECT
LPPALETTEENTRY      TYPEDEF    PTR PALETTEENTRY
LPRGNDATA        TYPEDEF    PTR RGNDATA


DDCOLORKEY  STRUC
  dwColorSpaceLowValue    DWORD    ?
  dwColorSpaceHighValue    DWORD    ?
DDCOLORKEY  ENDS


DDBLTFX    STRUC
  dwSize            DWORD    ?
  dwDDFX            DWORD    ?
  dwROP            DWORD    ?
  dwDDROP            DWORD    ?
  dwRotationAngle        DWORD    ?
  dwZBufferOpCode        DWORD    ?
  dwZBufferLow        DWORD    ?
  dwZBufferHigh        DWORD    ?
  dwZBufferBaseDest      DWORD    ?
  dwZDestConstBitDepth    DWORD    ?
UNION
  dwZDestConst        DWORD    ?
  lpDDSZBufferDest      LPDIRECTDRAWSURFACE    ?
ENDS
  dwZSrcConstBitDepth      DWORD    ?
UNION
  dwZSrcConst          DWORD    ?
  lpDDSZBufferSrc        LPDIRECTDRAWSURFACE    ?
ENDS
  dwAlphaEdgeBlendBitDepth  DWORD    ?
  dwAlphaEdgeBlend      DWORD    ?
  dwReserved          DWORD    ?
  dwAlphaDestConstBitDepth  DWORD    ?
UNION
  dwAlphaDestConst      DWORD    ?
  lpDDSAlphaDest        LPDIRECTDRAWSURFACE    ?
ENDS
  dwAlphaSrcConstBitDepth    DWORD    ?
UNION
  dwAlphaSrcConst        DWORD    ?
  lpDDSAlphaSrc        LPDIRECTDRAWSURFACE    ?
ENDS
UNION
  dwFillColor          DWORD    ?
  dwFillDepth          DWORD    ?
  lpDDSPattern        LPDIRECTDRAWSURFACE    ?
ENDS
  ddckDestColorkey      DDCOLORKEY    <>
  ddckSrcColorkey        DDCOLORKEY    <>
DDBLTFX    ENDS


DDSCAPS    STRUC
  dwCaps      DWORD    ?
DDSCAPS    ENDS


DDCAPS    STRUC
  dwSize              DWORD    ?
  dwCaps              DWORD    ?
  dwCaps2              DWORD    ?
  dwCKeyCaps            DWORD    ?
  dwFXCaps            DWORD    ?
  dwFXAlphaCaps          DWORD    ?
  dwPalCaps            DWORD    ?
  dwSVCaps            DWORD    ?
  dwAlphaBltConstBitDepths    DWORD    ?
  dwAlphaBltPixelBitDepths    DWORD    ?
  dwAlphaBltSurfaceBitDepths    DWORD    ?
  dwAlphaOverlayConstBitDepths  DWORD    ?
  dwAlphaOverlayPixelBitDepths  DWORD    ?
  dwAlphaOverlaySurfaceBitDepths  DWORD    ?
  dwZBufferBitDepths        DWORD    ?
  dwVidMemTotal          DWORD    ?
  dwVidMemFree          DWORD    ?
  dwMaxVisibleOverlays      DWORD    ?
  dwCurrVisibleOverlays      DWORD    ?
  dwNumFourCCCodes        DWORD    ?
  dwAlignBoundarySrc        DWORD    ?
  dwAlignSizeSrc          DWORD    ?
  dwAlignBoundaryDest        DWORD    ?
  dwAlignSizeDest          DWORD    ?
  dwAlignStrideAlign        DWORD    ?
  dwRops              DWORD    8 DUP (?)
  ddsCaps              DDSCAPS    <>
  dwMinOverlayStretch        DWORD    ?
  dwMaxOverlayStretch        DWORD    ?
  dwMinLiveVideoStretch      DWORD    ?
  dwMaxLiveVideoStretch      DWORD    ?
  dwMinHwCodecStretch        DWORD    ?
  dwMaxHwCodecStretch        DWORD    ?
  dwReserved1            DWORD    ?
  dwReserved2            DWORD    ?
  dwReserved3            DWORD    ?
  dwSVBCaps            DWORD    ?
  dwSVBCKeyCaps          DWORD    ?
  dwSVBFXCaps            DWORD    ?
  dwSVBRops            DWORD    8 DUP (?)
  dwVSBCaps            DWORD    ?
  dwVSBCKeyCaps          DWORD    ?
  dwVSBFXCaps            DWORD    ?
  dwVSBRops            DWORD    8 DUP (?)
  dwSSBCaps            DWORD    ?
  dwSSBCKeyCaps          DWORD    ?
  dwSSBFXCaps            DWORD    ?
  dwSSBRops            DWORD    8 DUP (?)
  dwReserved4            DWORD    ?
  dwReserved5            DWORD    ?
  dwReserved6            DWORD    ?
DDCAPS    ENDS


DDOVERLAYFX    STRUC
  dwSize            DWORD    ?
  dwAlphaEdgeBlendBitDepth  DWORD    ?
  dwAlphaEdgeBlend      DWORD    ?
  dwReserved          DWORD    ?
  dwAlphaDestConstBitDepth  DWORD    ?
UNION
  dwAlphaDestConst      DWORD    ?
  lpDDSAlphaDest        LPDIRECTDRAWSURFACE    ?
ENDS
  dwAlphaSrcConstBitDepth    DWORD    ?
UNION
  dwAlphaSrcConst        DWORD    ?
  lpDDSAlphaSrc        LPDIRECTDRAWSURFACE    ?
ENDS
  dckDestColorkey        DDCOLORKEY    <>
  dckSrcColorkey        DDCOLORKEY    <>
  dwDDFX            DWORD    ?
  dwFlags            DWORD    ?
DDOVERLAYFX    ENDS


DDPIXELFORMAT  STRUC
  dwSize        DWORD    ?
  dwFlags        DWORD    ?
  dwFourCC      DWORD    ?
UNION
  dwRGBBitCount    DWORD    ?
  dwYUVBitCount    DWORD    ?
  dwZBufferBitDepth  DWORD    ?
  dwAlphaBitDepth    DWORD    ?
ENDS
UNION
  dwRBitMask      DWORD    ?
  dwYBitMask      DWORD    ?
ENDS
UNION
  dwGBitMask      DWORD    ?
  dwUBitMask      DWORD    ?
ENDS
UNION
  dwBBitMask      DWORD    ?
  dwVBitMask      DWORD    ?
ENDS
UNION
  dwRGBAlphaBitMask  DWORD    ?
  dwYUVAlphaBitMask  DWORD    ?
ENDS
DDPIXELFORMAT  ENDS


DDSURFACEDESC  STRUC
  dwSize        DWORD    ?
  dwFlags        DWORD    ?
  dwHeight      DWORD    ?
  dwWidth        DWORD    ?
  lPitch        DWORD    ?
  dwBackBufferCount  DWORD    ?
UNION
  dwMipMapCount    DWORD    ?
  dwZBufferBitDepth  DWORD    ?
  dwRefreshRate    DWORD    ?
ENDS
  dwAlphaBitDepth    DWORD    ?
  dwReserved      DWORD    ?
  lpSurface      DWORD    ?
  ddckCKDestOverlay  DDCOLORKEY    <>
  ddckCKDestBlt    DDCOLORKEY    <>
  ddckCKSrcOverlay  DDCOLORKEY    <>
  ddckCKSrcBlt    DDCOLORKEY    <>
  ddpfPixelFormat    DDPIXELFORMAT  <>
  ddsCaps        DDSCAPS      <>
DDSURFACEDESC  ENDS


DDBLTBATCH  STRUC
  lprDest      LPRECT    ?
  lpDDSSrc    LPDIRECTDRAWSURFACE    ?
  lprSrc      LPRECT    ?
  dwFlags      DWORD    ?
  lpDDBltFx    LPDDBLTFX  ?
DDBLTBATCH  ENDS




IDirectDrawVtbl  STRUC
  ; IUnknown methods
  STDMETHOD  QueryInterface, :PTR IDirectDraw, :PTR, :PTR PTR
  STDMETHOD  AddRef, :PTR IDirectDraw
  STDMETHOD  Release, :PTR IDirectDraw
  ; IDirectDraw methods
  STDMETHOD  Compact, :PTR IDirectDraw
  STDMETHOD  CreateClipper, :PTR IDirectDraw, :DWORD, :PTR LPDIRECTDRAWCLIPPER, :PTR IUnknown
  STDMETHOD  CreatePalette, :PTR IDirectDraw, :DWORD, :LPPALETTEENTRY, :PTR LPDIRECTDRAWPALETTE, :PTR IUnknown
  STDMETHOD  CreateSurface, :PTR IDirectDraw, :LPDDSURFACEDESC, :PTR LPDIRECTDRAWSURFACE, :PTR IUnknown
  STDMETHOD  DuplicateSurface, :PTR IDirectDraw, :LPDIRECTDRAWSURFACE, :PTR LPDIRECTDRAWSURFACE
  STDMETHOD  EnumDisplayModes, :PTR IDirectDraw, :DWORD, :LPDDSURFACEDESC, :PTR , :PTR
  STDMETHOD  EnumSurfaces, :PTR IDirectDraw, :DWORD, :LPDDSURFACEDESC, :PTR , :PTR
  STDMETHOD  FlipToGDISurface, :PTR IDirectDraw
  STDMETHOD  GetCaps, :PTR IDirectDraw, :LPDDCAPS, :LPDDCAPS
  STDMETHOD  GetDisplayMode, :PTR IDirectDraw, :LPDDSURFACEDESC
  STDMETHOD  GetFourCCCodes, :PTR IDirectDraw, :PTR DWORD, :PTR DWORD
  STDMETHOD  GetGDISurface, :PTR IDirectDraw, :PTR LPDIRECTDRAWSURFACE
  STDMETHOD  GetMonitorFrequency, :PTR IDirectDraw, :DWORD
  STDMETHOD  GetScanLine, :PTR IDirectDraw, :DWORD
  STDMETHOD  GetVerticalBlankStatus, :PTR IDirectDraw, :PTR SWORD
  STDMETHOD  Initialize, :PTR IDirectDraw, :PTR GUID
  STDMETHOD  RestoreDisplayMode, :PTR IDirectDraw
  STDMETHOD  SetCooperativeLevel, :PTR IDirectDraw, :HWND, :DWORD
  STDMETHOD  SetDisplayMode, :PTR IDirectDraw, :DWORD, :DWORD, :DWORD
  STDMETHOD  WaitForVerticalBlank, :PTR IDirectDraw, :DWORD, :PTR
IDirectDrawVtbl  ENDS


IDirectDrawPaletteVtbl  STRUC
  ; IUnknown methods
  STDMETHOD  QueryInterface, :PTR IDirectDrawPalette, :PTR, :PTR PTR
  STDMETHOD  AddRef, :PTR IDirectDrawPalette
  STDMETHOD  Release, :PTR IDirectDrawPalette
  ; IDirectDrawPalette methods
  STDMETHOD  GetCaps, :PTR IDirectDrawPalette, :PTR DWORD
  STDMETHOD  GetEntries, :PTR IDirectDrawPalette, :DWORD, :DWORD, :DWORD, :LPPALETTEENTRY
  STDMETHOD  Initialize, :PTR IDirectDrawPalette, :LPDIRECTDRAW, :DWORD, :LPPALETTEENTRY
  STDMETHOD  SetEntries, :PTR IDirectDrawPalette, :DWORD, :DWORD, :DWORD, :LPPALETTEENTRY
IDirectDrawPaletteVtbl  ENDS


IDirectDrawClipperVtbl  STRUC
  ; IUnknown methods
  STDMETHOD  QueryInterface, :PTR IDirectDrawClipper, :PTR, :PTR PTR
  STDMETHOD  AddRef, :PTR IDirectDrawClipper
  STDMETHOD  Release, :PTR IDirectDrawClipper
  ; IDirectDrawClipper methods
  STDMETHOD  GetClipList, :PTR IDirectDrawClipper, :LPRECT, :LPRGNDATA, :PTR DWORD
  STDMETHOD  GetHWnd, :PTR IDirectDrawClipper, :PTR HWND
  STDMETHOD  Initialize, :PTR IDirectDrawClipper, :LPDIRECTDRAW, :DWORD
  STDMETHOD  IsClipListChanged, :PTR IDirectDrawClipper, :PTR SWORD
  STDMETHOD  SetClipList, :PTR IDirectDrawClipper, :LPRGNDATA, :DWORD
  STDMETHOD  SetHWnd, :PTR IDirectDrawClipper, :DWORD, :HWND
IDirectDrawClipperVtbl  ENDS


IDirectDrawSurfaceVtbl  STRUC
  ; IUnknown methods
  STDMETHOD  QueryInterface, :PTR IDirectDrawSurface, :PTR, :PTR PTR
  STDMETHOD  AddRef, :PTR IDirectDrawSurface
  STDMETHOD  Release, :PTR IDirectDrawSurface
  ; IDirectDrawSurface methods
  STDMETHOD  AddAttachedSurface, :PTR IDirectDrawSurface, :LPDIRECTDRAWSURFACE
  STDMETHOD  AddOverlayDirtyRect, :PTR IDirectDrawSurface, :LPRECT
  STDMETHOD  Blt, :PTR IDirectDrawSurface, :LPRECT, :LPDIRECTDRAWSURFACE, :LPRECT, :DWORD, :LPDDBLTFX
  STDMETHOD  BltBatch, :PTR IDirectDrawSurface, :LPDDBLTBATCH, :DWORD, :DWORD
  STDMETHOD  BltFast, :PTR IDirectDrawSurface, :DWORD, :DWORD, :LPDIRECTDRAWSURFACE, :LPRECT, :DWORD
  STDMETHOD  DeleteAttachedSurface, :PTR IDirectDrawSurface, :DWORD, :LPDIRECTDRAWSURFACE
  STDMETHOD  EnumAttachedSurfaces, :PTR IDirectDrawSurface, :PTR , :PTR
  STDMETHOD  EnumOverlayZOrders, :PTR IDirectDrawSurface, :DWORD, :PTR , :PTR
  STDMETHOD  Flip, :PTR IDirectDrawSurface, :LPDIRECTDRAWSURFACE, :DWORD
  STDMETHOD  GetAttachedSurface, :PTR IDirectDrawSurface, :LPDDSCAPS, :PTR LPDIRECTDRAWSURFACE
  STDMETHOD  GetBltStatus, :PTR IDirectDrawSurface, :DWORD
  STDMETHOD  GetCaps, :PTR IDirectDrawSurface, :LPDDSCAPS
  STDMETHOD  GetClipper, :PTR IDirectDrawSurface, :PTR LPDIRECTDRAWCLIPPER
  STDMETHOD  GetColorKey, :PTR IDirectDrawSurface, :DWORD, :LPDDCOLORKEY
  STDMETHOD  GetDC, :PTR IDirectDrawSurface, :PTR HDC
  STDMETHOD  GetFlipStatus, :PTR IDirectDrawSurface, :DWORD
  STDMETHOD  GetOverlayPosition, :PTR IDirectDrawSurface, :PTR DWORD, :PTR DWORD
  STDMETHOD  GetPalette, :PTR IDirectDrawSurface, :PTR LPDIRECTDRAWPALETTE
  STDMETHOD  GetPixelFormat, :PTR IDirectDrawSurface, :LPDDPIXELFORMAT
  STDMETHOD  GetSurfaceDesc, :PTR IDirectDrawSurface, :LPDDSURFACEDESC
  STDMETHOD  Initialize, :PTR IDirectDrawSurface, :LPDIRECTDRAW, :LPDDSURFACEDESC
  STDMETHOD  IsLost, :PTR IDirectDrawSurface
  STDMETHOD  mLock, :PTR IDirectDrawSurface, :LPRECT, :LPDDSURFACEDESC, :DWORD, :PTR 
  STDMETHOD  ReleaseDC, :PTR IDirectDrawSurface, :HDC
  STDMETHOD  Restore, :PTR IDirectDrawSurface
  STDMETHOD  SetClipper, :PTR IDirectDrawSurface, :LPDIRECTDRAWCLIPPER
  STDMETHOD  SetColorKey, :PTR IDirectDrawSurface, :DWORD, :LPDDCOLORKEY
  STDMETHOD  SetOverlayPosition, :PTR IDirectDrawSurface, :SDWORD, :SDWORD
  STDMETHOD  SetPalette, :PTR IDirectDrawSurface, :LPDIRECTDRAWPALETTE
  STDMETHOD  Unlock, :PTR IDirectDrawSurface, :PTR 
  STDMETHOD  UpdateOverlay, :PTR IDirectDrawSurface, :LPRECT, :LPDIRECTDRAWSURFACE, :LPRECT, :DWORD, :LPDDOVERLAYFX
  STDMETHOD  UpdateOverlayDisplay, :PTR IDirectDrawSurface, :DWORD
  STDMETHOD  UpdateOverlayZOrder, :PTR IDirectDrawSurface, :DWORD, :LPDIRECTDRAWSURFACE
IDirectDrawSurfaceVtbl  ENDS


IDirectDraw        STRUC
  lpVtbl    DWORD    ?
IDirectDraw        ENDS

IDirectDrawPalette    STRUC
  lpVtbl    DWORD    ?
IDirectDrawPalette    ENDS

IDirectDrawClipper    STRUC
  lpVtbl    DWORD    ?
IDirectDrawClipper    ENDS

IDirectDrawSurface    STRUC
  lpVtbl    DWORD    ?
IDirectDrawSurface    ENDS



; Direct Draw Capability Flags
DDSD_CAPS        EQU    000000001h
DDSD_HEIGHT        EQU    000000002h
DDSD_WIDTH        EQU    000000004h
DDSD_PITCH        EQU    000000008h
DDSD_BACKBUFFERCOUNT  EQU    000000020h
DDSD_ZBUFFERBITDEPTH  EQU    000000040h
DDSD_ALPHABITDEPTH    EQU    000000080h
DDSD_PIXELFORMAT    EQU    000001000h
DDSD_CKDESTOVERLAY    EQU    000002000h
DDSD_CKDESTBLT      EQU    000004000h
DDSD_CKSRCOVERLAY    EQU    000008000h
DDSD_CKSRCBLT      EQU    000010000h
DDSD_MIPMAPCOUNT    EQU    000020000h
DDSD_REFRESHRATE    EQU    000040000h
DDSD_ALL        EQU    00007f9eeh    ; all input field are valid

; DIRECTDRAWSURFACE CAPABILITY FLAGS
DDSCAPS_3D          EQU    000000001h
DDSCAPS_ALPHA        EQU    000000002h
DDSCAPS_BACKBUFFER      EQU    000000004h
DDSCAPS_COMPLEX        EQU    000000008h
DDSCAPS_FLIP        EQU    000000010h
DDSCAPS_FRONTBUFFER      EQU    000000020h
DDSCAPS_OFFSCREENPLAIN    EQU    000000040h
DDSCAPS_OVERLAY        EQU    000000080h
DDSCAPS_PALETTE        EQU    000000100h
DDSCAPS_PRIMARYSURFACE    EQU    000000200h
DDSCAPS_PRIMARYSURFACELEFT  EQU    000000400h
DDSCAPS_SYSTEMMEMORY    EQU    000000800h
DDSCAPS_TEXTURE        EQU    000001000h
DDSCAPS_3DDEVICE      EQU    000002000h
DDSCAPS_VIDEOMEMORY      EQU    000004000h
DDSCAPS_VISIBLE        EQU    000008000h
DDSCAPS_WRITEONLY      EQU    000010000h
DDSCAPS_ZBUFFER        EQU    000020000h
DDSCAPS_OWNDC        EQU    000040000h
DDSCAPS_LIVEVIDEO      EQU    000080000h
DDSCAPS_HWCODEC        EQU    000100000h
DDSCAPS_MODEX        EQU    000200000h
DDSCAPS_MIPMAP        EQU    000400000h
DDSCAPS_ALLOCONLOAD      EQU    004000000h

; DIRECTDRAW DRIVER CAPABILITY FLAGS
DDCAPS_3D          EQU    000000001h
DDCAPS_ALIGNBOUNDARYDEST  EQU    000000002h
DDCAPS_ALIGNSIZEDEST    EQU    000000004h
DDCAPS_ALIGNBOUNDARYSRC    EQU    000000008h
DDCAPS_ALIGNSIZESRC      EQU    000000010h
DDCAPS_ALIGNSTRIDE      EQU    000000020h
DDCAPS_BLT          EQU    000000040h
DDCAPS_BLTQUEUE        EQU    000000080h
DDCAPS_BLTFOURCC      EQU    000000100h
DDCAPS_BLTSTRETCH      EQU    000000200h
DDCAPS_GDI          EQU    000000400h
DDCAPS_OVERLAY        EQU    000000800h
DDCAPS_OVERLAYCANTCLIP    EQU    000001000h
DDCAPS_OVERLAYFOURCC    EQU    000002000h
DDCAPS_OVERLAYSTRETCH    EQU    000004000h
DDCAPS_PALETTE        EQU    000008000h
DDCAPS_PALETTEVSYNC      EQU    000010000h
DDCAPS_READSCANLINE      EQU    000020000h
DDCAPS_STEREOVIEW      EQU    000040000h
DDCAPS_VBI          EQU    000080000h
DDCAPS_ZBLTS        EQU    000100000h
DDCAPS_ZOVERLAYS      EQU    000200000h
DDCAPS_COLORKEY        EQU    000400000h
DDCAPS_ALPHA        EQU    000800000h
DDCAPS_COLORKEYHWASSIST    EQU    001000000h
DDCAPS_NOHARDWARE      EQU    002000000h
DDCAPS_BLTCOLORFILL      EQU    004000000h
DDCAPS_BANKSWITCHED      EQU    008000000h
DDCAPS_BLTDEPTHFILL      EQU    010000000h
DDCAPS_CANCLIP        EQU    020000000h
DDCAPS_CANCLIPSTRETCHED    EQU    040000000h
DDCAPS_CANBLTSYSMEM      EQU    080000000h

; DIRECTDRAW FX ALPHA CAPABILITY FLAGS
DDFXALPHACAPS_BLTALPHAEDGEBLEND      EQU    000000001h
DDFXALPHACAPS_BLTALPHAPIXELS      EQU    000000002h
DDFXALPHACAPS_BLTALPHAPIXELSNEG      EQU    000000004h
DDFXALPHACAPS_BLTALPHASURFACES      EQU    000000008h
DDFXALPHACAPS_BLTALPHASURFACESNEG    EQU    000000010h
DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND    EQU    000000020h
DDFXALPHACAPS_OVERLAYALPHAPIXELS    EQU    000000040h
DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG    EQU    000000080h
DDFXALPHACAPS_OVERLAYALPHASURFACES    EQU    000000100h
DDFXALPHACAPS_OVERLAYALPHASURFACESNEG  EQU    000000200h

; DIRECTDRAW FX CAPABILITY FLAGS
DDFXCAPS_BLTARITHSTRETCHY    EQU    000000020h
DDFXCAPS_BLTARITHSTRETCHYN    EQU    000000010h
DDFXCAPS_BLTMIRRORLEFTRIGHT    EQU    000000040h
DDFXCAPS_BLTMIRRORUPDOWN    EQU    000000080h
DDFXCAPS_BLTROTATION      EQU    000000100h
DDFXCAPS_BLTROTATION90      EQU    000000200h
DDFXCAPS_BLTSHRINKX        EQU    000000400h
DDFXCAPS_BLTSHRINKXN      EQU    000000800h
DDFXCAPS_BLTSHRINKY        EQU    000001000h
DDFXCAPS_BLTSHRINKYN      EQU    000002000h
DDFXCAPS_BLTSTRETCHX      EQU    000004000h
DDFXCAPS_BLTSTRETCHXN      EQU    000008000h
DDFXCAPS_BLTSTRETCHY      EQU    000010000h
DDFXCAPS_BLTSTRETCHYN      EQU    000020000h
DDFXCAPS_OVERLAYARITHSTRETCHY  EQU    000040000h
DDFXCAPS_OVERLAYARITHSTRETCHYN  EQU    000000008h
DDFXCAPS_OVERLAYSHRINKX      EQU    000080000h
DDFXCAPS_OVERLAYSHRINKXN    EQU    000100000h
DDFXCAPS_OVERLAYSHRINKY      EQU    000200000h
DDFXCAPS_OVERLAYSHRINKYN    EQU    000400000h
DDFXCAPS_OVERLAYSTRETCHX    EQU    000800000h
DDFXCAPS_OVERLAYSTRETCHXN    EQU    001000000h
DDFXCAPS_OVERLAYSTRETCHY    EQU    002000000h
DDFXCAPS_OVERLAYSTRETCHYN    EQU    004000000h
DDFXCAPS_OVERLAYMIRRORLEFTRIGHT  EQU    008000000h
DDFXCAPS_OVERLAYMIRRORUPDOWN  EQU    010000000h

; DIRECTDRAW STEREO VIEW CAPABILITIES
DDSVCAPS_ENIGMA    EQU    000000001h
DDSVCAPS_FLICKER  EQU    000000002h
DDSVCAPS_REDBLUE  EQU    000000004h
DDSVCAPS_SPLIT    EQU    000000008h

; DIRECTDRAWPALETTE CAPABILITIES
DDPCAPS_4BIT        EQU    000000001h
DDPCAPS_8BITENTRIES      EQU    000000002h
DDPCAPS_8BIT        EQU    000000004h
DDPCAPS_INITIALIZE      EQU    000000008h
DDPCAPS_PRIMARYSURFACE    EQU    000000010h
DDPCAPS_PRIMARYSURFACELEFT  EQU    000000020h
DDPCAPS_ALLOW256      EQU    000000040h
DDPCAPS_VSYNC        EQU    000000080h
DDPCAPS_1BIT        EQU    000000100h
DDPCAPS_2BIT        EQU    000000200h

; DIRECTDRAW BITDEPTH CONSTANTS
DDBD_1    EQU    000004000h
DDBD_2    EQU    000002000h
DDBD_4    EQU    000001000h
DDBD_8    EQU    000000800h
DDBD_16    EQU    000000400h
DDBD_24    EQU    000000200h
DDBD_32    EQU    000000100h

; DIRECTDRAWSURFACE SET/GET COLOR KEY FLAGS
DDCKEY_COLORSPACE  EQU    000000001h
DDCKEY_DESTBLT    EQU    000000002h
DDCKEY_DESTOVERLAY  EQU    000000004h
DDCKEY_SRCBLT    EQU    000000008h
DDCKEY_SRCOVERLAY  EQU    000000010h

; DIRECTDRAW COLOR KEY CAPABILITY FLAGS
DDCKEYCAPS_DESTBLT          EQU    000000001h
DDCKEYCAPS_DESTBLTCLRSPACE      EQU    000000002h
DDCKEYCAPS_DESTBLTCLRSPACEYUV    EQU    000000004h
DDCKEYCAPS_DESTBLTYUV        EQU    000000008h
DDCKEYCAPS_DESTOVERLAY        EQU    000000010h
DDCKEYCAPS_DESTOVERLAYCLRSPACE    EQU    000000020h
DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV  EQU    000000040h
DDCKEYCAPS_DESTOVERLAYONEACTIVE    EQU    000000080h
DDCKEYCAPS_DESTOVERLAYYUV      EQU    000000100h
DDCKEYCAPS_SRCBLT          EQU    000000200h
DDCKEYCAPS_SRCBLTCLRSPACE      EQU    000000400h
DDCKEYCAPS_SRCBLTCLRSPACEYUV    EQU    000000800h
DDCKEYCAPS_SRCBLTYUV        EQU    000001000h
DDCKEYCAPS_SRCOVERLAY        EQU    000002000h
DDCKEYCAPS_SRCOVERLAYCLRSPACE    EQU    000004000h
DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV  EQU    000008000h
DDCKEYCAPS_SRCOVERLAYONEACTIVE    EQU    000010000h
DDCKEYCAPS_SRCOVERLAYYUV      EQU    000020000h
DDCKEYCAPS_NOCOSTOVERLAY      EQU    000040000h

; DIRECTDRAW PIXELFORMAT FLAGS
DDPF_ALPHAPIXELS    EQU    000000001h
DDPF_ALPHA        EQU    000000002h
DDPF_FOURCC        EQU    000000004h
DDPF_PALETTEINDEXED4  EQU    000000008h
DDPF_PALETTEINDEXEDTO8  EQU    000000010h
DDPF_PALETTEINDEXED8  EQU    000000020h
DDPF_RGB        EQU    000000040h
DDPF_COMPRESSED      EQU    000000080h
DDPF_RGBTOYUV      EQU    000000100h
DDPF_YUV        EQU    000000200h
DDPF_ZBUFFER      EQU    000000400h
DDPF_PALETTEINDEXED1  EQU    000000800h
DDPF_PALETTEINDEXED2  EQU    000001000h

; DIRECTDRAW ENUMSURFACES FLAGS
DDENUMSURFACES_ALL      EQU    000000001h
DDENUMSURFACES_MATCH    EQU    000000002h
DDENUMSURFACES_NOMATCH    EQU    000000004h
DDENUMSURFACES_CANBECREATED  EQU    000000008h
DDENUMSURFACES_DOESEXIST  EQU    000000010h

; DIRECTDRAW ENUMDISPLAYMODES FLAGS
DDEDM_REFRESHRATES    EQU    000000001h

; DIRECTDRAW SETCOOPERATIVELEVEL FLAGS
DDSCL_FULLSCREEN    EQU    000000001h
DDSCL_ALLOWREBOOT    EQU    000000002h
DDSCL_NOWINDOWCHANGES  EQU    000000004h
DDSCL_NORMAL      EQU    000000008h
DDSCL_EXCLUSIVE      EQU    000000010h
DDSCL_ALLOWMODEX    EQU    000000040h

; DIRECTDRAW BLT FLAGS
DDBLT_ALPHADEST          EQU    000000001h
DDBLT_ALPHADESTCONSTOVERRIDE  EQU    000000002h
DDBLT_ALPHADESTNEG        EQU    000000004h
DDBLT_ALPHADESTSURFACEOVERRIDE  EQU    000000008h
DDBLT_ALPHAEDGEBLEND      EQU    000000010h
DDBLT_ALPHASRC          EQU    000000020h
DDBLT_ALPHASRCCONSTOVERRIDE    EQU    000000040h
DDBLT_ALPHASRCNEG        EQU    000000080h
DDBLT_ALPHASRCSURFACEOVERRIDE  EQU    000000100h
DDBLT_ASYNC            EQU    000000200h
DDBLT_COLORFILL          EQU    000000400h
DDBLT_DDFX            EQU    000000800h
DDBLT_DDROPS          EQU    000001000h
DDBLT_KEYDEST          EQU    000002000h
DDBLT_KEYDESTOVERRIDE      EQU    000004000h
DDBLT_KEYSRC          EQU    000008000h
DDBLT_KEYSRCOVERRIDE      EQU    000010000h
DDBLT_ROP            EQU    000020000h
DDBLT_ROTATIONANGLE        EQU    000040000h
DDBLT_ZBUFFER          EQU    000080000h
DDBLT_ZBUFFERDESTCONSTOVERRIDE  EQU    000100000h
DDBLT_ZBUFFERDESTOVERRIDE    EQU    000200000h
DDBLT_ZBUFFERSRCCONSTOVERRIDE  EQU    000400000h
DDBLT_ZBUFFERSRCOVERRIDE    EQU    000800000h
DDBLT_WAIT            EQU    001000000h
DDBLT_DEPTHFILL          EQU    002000000h

; BLTFAST FLAGS
DDBLTFAST_NOCOLORKEY    EQU    000000000h
DDBLTFAST_SRCCOLORKEY    EQU    000000001h
DDBLTFAST_DESTCOLORKEY    EQU    000000002h
DDBLTFAST_WAIT        EQU    000000010h

; FLIP FLAGS
DDFLIP_WAIT    EQU    000000001h

; DIRECTDRAW SURFACE OVERLAY FLAGS
DDOVER_ALPHADEST        EQU    000000001h
DDOVER_ALPHADESTCONSTOVERRIDE  EQU    000000002h
DDOVER_ALPHADESTNEG        EQU    000000004h
DDOVER_ALPHADESTSURFACEOVERRIDE  EQU    000000008h
DDOVER_ALPHAEDGEBLEND      EQU    000000010h
DDOVER_ALPHASRC          EQU    000000020h
DDOVER_ALPHASRCCONSTOVERRIDE  EQU    000000040h
DDOVER_ALPHASRCNEG        EQU    000000080h
DDOVER_ALPHASRCSURFACEOVERRIDE  EQU    000000100h
DDOVER_HIDE            EQU    000000200h
DDOVER_KEYDEST          EQU    000000400h
DDOVER_KEYDESTOVERRIDE      EQU    000000800h
DDOVER_KEYSRC          EQU    000001000h
DDOVER_KEYSRCOVERRIDE      EQU    000002000h
DDOVER_SHOW            EQU    000004000h
DDOVER_ADDDIRTYRECT        EQU    000008000h
DDOVER_REFRESHDIRTYRECTS    EQU    000010000h
DDOVER_REFRESHALL        EQU    000020000h
DDOVER_DDFX            EQU    000080000h

; DIRECTDRAWSURFACE LOCK FLAGS
DDLOCK_SURFACEMEMORYPTR  EQU    000000000h
DDLOCK_WAIT        EQU    000000001h
DDLOCK_EVENT      EQU    000000002h
DDLOCK_READONLY      EQU    000000010h
DDLOCK_WRITEONLY    EQU    000000020h

; DIRECTDRAWSURFACE BLT FX FLAGS
DDBLTFX_ARITHSTRETCHY  EQU    000000001h
DDBLTFX_MIRRORLEFTRIGHT  EQU    000000002h
DDBLTFX_MIRRORUPDOWN  EQU    000000004h
DDBLTFX_NOTEARING    EQU    000000008h
DDBLTFX_ROTATE180    EQU    000000010h
DDBLTFX_ROTATE270    EQU    000000020h
DDBLTFX_ROTATE90    EQU    000000040h
DDBLTFX_ZBUFFERRANGE  EQU    000000080h
DDBLTFX_ZBUFFERBASEDEST  EQU    000000100h

; DIRECTDRAWSURFACE OVERLAY FX FLAGS
DDOVERFX_ARITHSTRETCHY    EQU    000000001h
DDOVERFX_MIRRORLEFTRIGHT  EQU    000000002h
DDOVERFX_MIRRORUPDOWN    EQU    000000004h

; DIRECTDRAW WAITFORVERTICALBLANK FLAGS
DDWAITVB_BLOCKBEGIN      EQU    000000001h
DDWAITVB_BLOCKBEGINEVENT  EQU    000000002h
DDWAITVB_BLOCKEND      EQU    000000004h

; DIRECTDRAW GETFLIPSTATUS FLAGS
DDGFS_CANFLIP    EQU    000000001h
DDGFS_ISFLIPDONE  EQU    000000002h

; DIRECTDRAW GETBLTSTATUS FLAGS
DDGBS_CANBLT    EQU    000000001h
DDGBS_ISBLTDONE    EQU    000000002h

; DIRECTDRAW ENUMOVERLAYZORDER FLAGS
DDENUMOVERLAYZ_BACKTOFRONT  EQU    000000000h
DDENUMOVERLAYZ_FRONTTOBACK  EQU    000000001h

; DIRECTDRAW UPDATEOVERLAYZORDER FLAGS
DDOVERZ_SENDTOFRONT    EQU    000000000h
DDOVERZ_SENDTOBACK    EQU    000000001h
DDOVERZ_MOVEFORWARD    EQU    000000002h
DDOVERZ_MOVEBACKWARD  EQU    000000003h
DDOVERZ_INSERTINFRONTOF  EQU    000000004h
DDOVERZ_INSERTINBACKOF  EQU    000000005h


; DIRECTDRAW RETURN CODES

; Issued by: DirectDraw Commands and all callbacks
DD_OK        EQU    0    ; Status is OK

; DIRECTDRAW ENUMCALLBACK RETURN VALUES
DDENUMRET_CANCEL  EQU    0    ; stop the enumeration
DDENUMRET_OK    EQU    1    ; continue the enumeration

; DIRECTDRAW ERRORS
DDERR_ALREADYINITIALIZED    EQU    088760005h
DDERR_CANNOTATTACHSURFACE    EQU    08876000ah
DDERR_CANNOTDETACHSURFACE    EQU    088760014h
DDERR_CURRENTLYNOTAVAIL      EQU    088760028h
DDERR_EXCEPTION          EQU    088760037h
DDERR_GENERIC          EQU    080004005h
DDERR_HEIGHTALIGN        EQU    08876005ah
DDERR_INCOMPATIBLEPRIMARY    EQU    08876005fh
DDERR_INVALIDCAPS        EQU    088760064h
DDERR_INVALIDCLIPLIST      EQU    08876006eh
DDERR_INVALIDMODE        EQU    088760078h
DDERR_INVALIDOBJECT        EQU    088760082h
DDERR_INVALIDPARAMS        EQU    080070057h
DDERR_INVALIDPIXELFORMAT    EQU    088760091h
DDERR_INVALIDRECT        EQU    088760096h
DDERR_LOCKEDSURFACES      EQU    0887600a0h
DDERR_NO3D            EQU    0887600aah
DDERR_NOALPHAHW          EQU    0887600b4h
DDERR_NOCLIPLIST        EQU    0887600cdh
DDERR_NOCOLORCONVHW        EQU    0887600d2h
DDERR_NOCOOPERATIVELEVELSET    EQU    0887600d4h
DDERR_NOCOLORKEY        EQU    0887600d7h
DDERR_NOCOLORKEYHW        EQU    0887600dch
DDERR_NODIRECTDRAWSUPPORT    EQU    0887600deh
DDERR_NOEXCLUSIVEMODE      EQU    0887600e1h
DDERR_NOFLIPHW          EQU    0887600e6h
DDERR_NOGDI            EQU    0887600f0h
DDERR_NOMIRRORHW        EQU    0887600fah
DDERR_NOTFOUND          EQU    0887600ffh
DDERR_NOOVERLAYHW        EQU    088760104h
DDERR_NORASTEROPHW        EQU    088760118h
DDERR_NOROTATIONHW        EQU    088760122h
DDERR_NOSTRETCHHW        EQU    088760136h
DDERR_NOT4BITCOLOR        EQU    08876013ch
DDERR_NOT4BITCOLORINDEX      EQU    08876013dh
DDERR_NOT8BITCOLOR        EQU    088760140h
DDERR_NOTEXTUREHW        EQU    08876014ah
DDERR_NOVSYNCHW          EQU    08876014fh
DDERR_NOZBUFFERHW        EQU    088760154h
DDERR_NOZOVERLAYHW        EQU    08876015eh
DDERR_OUTOFCAPS          EQU    088760168h
DDERR_OUTOFMEMORY        EQU    08007000eh
DDERR_OUTOFVIDEOMEMORY      EQU    08876017ch
DDERR_OVERLAYCANTCLIP      EQU    08876017eh
DDERR_OVERLAYCOLORKEYONLYONEACTIVE  EQU  088760180h
DDERR_PALETTEBUSY        EQU    088760183h
DDERR_COLORKEYNOTSET      EQU    088760190h
DDERR_SURFACEALREADYATTACHED  EQU    08876019ah
DDERR_SURFACEALREADYDEPENDENT  EQU    0887601a4h
DDERR_SURFACEBUSY        EQU    0887601aeh
DDERR_CANTLOCKSURFACE      EQU    0887601b3h
DDERR_SURFACEISOBSCURED      EQU    0887601b8h
DDERR_SURFACELOST        EQU    0887601c2h
DDERR_SURFACENOTATTACHED    EQU    0887601cch
DDERR_TOOBIGHEIGHT        EQU    0887601d6h
DDERR_TOOBIGSIZE        EQU    0887601e0h
DDERR_TOOBIGWIDTH        EQU    0887601eah
DDERR_UNSUPPORTED        EQU    080004001h
DDERR_UNSUPPORTEDFORMAT      EQU    0887601feh
DDERR_UNSUPPORTEDMASK      EQU    088760208h
DDERR_VERTICALBLANKINPROGRESS  EQU    088760219h
DDERR_WASSTILLDRAWING      EQU    08876021ch
DDERR_XALIGN          EQU    088760230h
DDERR_INVALIDDIRECTDRAWGUID    EQU    088760231h
DDERR_DIRECTDRAWALREADYCREATED  EQU    088760232h
DDERR_NODIRECTDRAWHW      EQU    088760233h
DDERR_PRIMARYSURFACEALREADYEXISTS  EQU  088760234h
DDERR_NOEMULATION        EQU    088760235h
DDERR_REGIONTOOSMALL      EQU    088760236h
DDERR_CLIPPERISUSINGHWND    EQU    088760237h
DDERR_NOCLIPPERATTACHED      EQU    088760238h
DDERR_NOHWND          EQU    088760239h
DDERR_HWNDSUBCLASSED      EQU    08876023ah
DDERR_HWNDALREADYSET      EQU    08876023bh
DDERR_NOPALETTEATTACHED      EQU    08876023ch
DDERR_NOPALETTEHW        EQU    08876023dh
DDERR_BLTFASTCANTCLIP      EQU    08876023eh
DDERR_NOBLTHW          EQU    08876023fh
DDERR_NODDROPSHW        EQU    088760240h
DDERR_OVERLAYNOTVISIBLE      EQU    088760241h
DDERR_NOOVERLAYDEST        EQU    088760242h
DDERR_INVALIDPOSITION      EQU    088760243h
DDERR_NOTAOVERLAYSURFACE    EQU    088760244h
DDERR_EXCLUSIVEMODEALREADYSET  EQU    088760245h
DDERR_NOTFLIPPABLE        EQU    088760246h
DDERR_CANTDUPLICATE        EQU    088760247h
DDERR_NOTLOCKED          EQU    088760248h
DDERR_CANTCREATEDC        EQU    088760249h
DDERR_NODC            EQU    08876024ah
DDERR_WRONGMODE          EQU    08876024bh
DDERR_IMPLICITLYCREATED      EQU    08876024ch
DDERR_NOTPALETTIZED        EQU    08876024dh
DDERR_UNSUPPORTEDMODE      EQU    08876024eh
DDERR_NOMIPMAPHW        EQU    08876024fh
DDERR_INVALIDSURFACETYPE    EQU    088760250h
DDERR_DCALREADYCREATED      EQU    08876026ch
DDERR_CANTPAGELOCK        EQU    088760280h
DDERR_CANTPAGEUNLOCK      EQU    088760294h
DDERR_NOTPAGELOCKED        EQU    0887602a8h
DDERR_NOTINITIALIZED      EQU    0800401f0h