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"
]