packages feed

dx9base-0.1: gen/extract-dx.hs

module Main
where
import Parser
import System.Environment

---------------------------------------------------------------------------
-- Main

main = do
    (path:_) <- getArgs
    e <- mapM (readEnum path) d3d_enums
    i <- mapM (readInterface path) d3d_interfaces
    s <- mapM (readStruct path) d3d_structures
    {- putStrLn $
        concat [
            "#ifndef HASKELL_DEFS\n",
            concatMap c_def_e2 e,
            c_decl s,
            c_decl3 i,
            concatMap c_def_i i,
            "#else\n",
            concatMap h_def_s s,
            concatMap h_def_i i,
            concatMap h_def_e e,
            "#endif\n\n"]
    -}
    writeFile "d3d_c.h" $ concat [
        concatMap c_def_if i
        ]
    writeFile "d3d_h.h" $ concat [
        concatMap h_def_s s,
        concatMap h_def_i i,
        concatMap (h_def_e d3d_enum_types) e
        ]
    return ()
--    where
--        path = "D:\\source\\dxsdk\\feb2006\\Documentation\\DirectX9\\directx9_c"

d3d_enum_types = [
    ("D3DDECLTYPE", "BYTE"),
    ("D3DDECLMETHOD", "BYTE"),
    ("D3DDECLUSAGE", "BYTE")
    ]
    
d3d_enums = [
    "D3DBACKBUFFER_TYPE",
    "D3DBASISTYPE",
    "D3DBLEND",
    "D3DBLENDOP",
    "D3DCMPFUNC",
    "D3DCUBEMAP_FACES",
    "D3DCULL",
    "D3DDEBUGMONITORTOKENS",
    "D3DDECLMETHOD",
    "D3DDECLTYPE",
    "D3DDECLUSAGE",
    "D3DDEGREETYPE",
    "D3DDEVTYPE",
    --"D3DERR",
    "D3DFILLMODE",
    "D3DFOGMODE",
    --"D3DFORMAT",
    "D3DLIGHTTYPE",
    "D3DMATERIALCOLORSOURCE",
    "D3DMULTISAMPLE_TYPE",
    "D3DPATCHEDGESTYLE",
    "D3DPOOL",
    "D3DPRIMITIVETYPE",
    "D3DQUERYTYPE",
    "D3DRENDERSTATETYPE",
    "D3DRESOURCETYPE",
    --"D3DSAMPLER_TEXTURE_TYPE",
    "D3DSAMPLERSTATETYPE",
    "D3DSHADEMODE",
    "D3DSTATEBLOCKTYPE",
    "D3DSTENCILOP",
    "D3DSWAPEFFECT",
    "D3DTEXTUREADDRESS",
    "D3DTEXTUREFILTERTYPE",
    "D3DTEXTUREOP",
    "D3DTEXTURESTAGESTATETYPE",
    "D3DTEXTURETRANSFORMFLAGS",
    "D3DTRANSFORMSTATETYPE",
    "D3DVERTEXBLENDFLAGS",
    --"D3DXFERR",
    "D3DZBUFFERTYPE"
    ]

d3d_interfaces = [
    --"ID3DXFile",
    --"ID3DXFileData",
    --"ID3DXFileEnumObject",
    --"ID3DXFileSaveData",
    --"ID3DXFileSaveObject",
    ("IDirect3D9",              "IUnknown",             id),
    ("IDirect3DDevice9",        "IUnknown",             fix_dev9),
    ("IDirect3DPixelShader9",   "IUnknown",             id),
    ("IDirect3DQuery9",         "IUnknown",             id),
    ("IDirect3DStateBlock9",    "IUnknown",             id),
    ("IDirect3DSwapChain9",     "IUnknown",             id),
    ("IDirect3DVertexDeclaration9", "IUnknown",         id),
    ("IDirect3DVertexShader9",  "IUnknown",             id),

    ("IDirect3DResource9",      "IUnknown",             fix_resource9),
    ("IDirect3DBaseTexture9",   "IDirect3DResource9",   id),
    ("IDirect3DCubeTexture9",   "IDirect3DBaseTexture9", id),
    ("IDirect3DVolumeTexture9", "IDirect3DBaseTexture9", id),
    ("IDirect3DTexture9",       "IDirect3DBaseTexture9", id),
    ("IDirect3DIndexBuffer9",   "IDirect3DResource9",   id),
    ("IDirect3DSurface9",       "IDirect3DResource9",   id),
    ("IDirect3DVertexBuffer9",  "IDirect3DResource9",   id),
    ("IDirect3DVolume9",        "IDirect3DResource9",   id)
    ]

fix_resource9 :: (String, String, [(String,Type,[(String,Type)])]) -> (String, String, [(String,Type,[(String,Type)])])
fix_resource9 (n,b,f) = (n,b,funs f)
    where 
        funs [] = []
        funs (x:xs) = (fun x):(funs xs)
        fun (f,t,p)
            | t==(Base "PreLoad")   = ("PreLoad", Base "void", [])
            | otherwise             = (f,t,p)


fix_dev9 :: (String, String, [(String,Type,[(String,Type)])]) -> (String, String, [(String,Type,[(String,Type)])])
fix_dev9 (n,b,f) = (n,b,funs f)
    where 
        funs [] = []
        funs (x:xs) = (fun x):(funs xs)
        fun (f,t,p)
            | f=="GetIndices"       = 
                ("GetIndices", Base "HRESULT", [("ppIndexData", Pointer $ Pointer $ Base "IDirect3DIndexBuffer9")])
            | otherwise             = (f,t,p)

d3d_structures = [
    "D3DADAPTER_IDENTIFIER9",
    "D3DBOX",
    "D3DCAPS9",
    "D3DCLIPSTATUS9",
    "D3DCOLORVALUE",
    "D3DDEVICE_CREATION_PARAMETERS",
    "D3DDEVINFO_D3D9BANDWIDTHTIMINGS",
    "D3DDEVINFO_D3D9CACHEUTILIZATION",
    "D3DDEVINFO_D3D9INTERFACETIMINGS",
    "D3DDEVINFO_D3D9PIPELINETIMINGS",
    "D3DDEVINFO_D3D9STAGETIMINGS",
    --"D3DDEVINFO_D3DVERTEXSTATS",
    "D3DDEVINFO_ResourceManager",
    "D3DDEVINFO_VCACHE",
    "D3DDISPLAYMODE",
    "D3DGAMMARAMP",
    "D3DINDEXBUFFER_DESC",
    "D3DLIGHT9",
    "D3DLOCKED_BOX",
    "D3DLOCKED_RECT",
    "D3DMATERIAL9",
    --"D3DMATRIX",
    "D3DPRESENT_PARAMETERS",
    "D3DPSHADERCAPS2_0",
    "D3DRANGE",
    "D3DRASTER_STATUS",
    "D3DRECT",
    "D3DRECTPATCH_INFO",
    "D3DRESOURCESTATS",
    "D3DSURFACE_DESC",
    "D3DTRIPATCH_INFO",
    "D3DVECTOR",
    "D3DVERTEXBUFFER_DESC",
    "D3DVERTEXELEMENT9",
    "D3DVIEWPORT9",
    "D3DVOLUME_DESC",
    "D3DVSHADERCAPS2_0",
    --"D3DXF_FILELOADMEMORY",
    "PALETTEENTRY"
    --"XFILECOMPRESSEDANIMATIONSET"
    ]