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