dx9base-0.1: gen/extract-d3dx.hs
module Main
where
import Parser
import System.Environment
---------------------------------------------------------------------------
-- Main
main = do
(path:_) <- getArgs
e <- mapM (readEnum path) d3dx_enums
i <- mapM (readInterface path) d3dx_interfaces
s <- mapM (readStruct path) d3dx_structures
writeFile "d3dx_c.h" $ concat [
concatMap c_def_if i
]
writeFile "d3dx_h.h" $ concat [
concatMap h_def_s s,
concatMap h_def_i i,
concatMap (h_def_e enum_types) e
]
return ()
enum_types = [
("D3DDECLTYPE", "BYTE"),
("D3DDECLMETHOD", "BYTE"),
("D3DDECLUSAGE", "BYTE")
]
d3dx_enums = [
"D3DXCALLBACK_SEARCH_FLAGS",
"D3DXCLEANTYPE",
"D3DXCOMPRESSION_FLAGS",
"D3DXEFFECTDEFAULTTYPE",
--"D3DXERR",
"D3DXEVENT_TYPE",
"D3DXIMAGE_FILEFORMAT",
"D3DXIMT_FLAGS",
"D3DXINCLUDE_TYPE",
"D3DXMESH",
"D3DXMESHDATATYPE",
"D3DXMESHOPT",
"D3DXMESHSIMP",
"D3DXPARAMETER_CLASS",
"D3DXPARAMETER_TYPE",
"D3DXPATCHMESH",
"D3DXPATCHMESHTYPE",
"D3DXPLAYBACK_TYPE",
"D3DXPRIORITY_TYPE",
"D3DXREGISTER_SET",
"D3DXSHCOMPRESSQUALITYTYPE",
"D3DXSHGPUSIMOPT",
"D3DXTANGENT",
"D3DXTRANSITION_TYPE",
"D3DXWeldEpsilonsFLAGS"
--"MAX_FVF_DECL_SIZE"
]
d3dx_interfaces = [
("ID3DXAllocateHierarchy" ,"IUnknown", id),
("ID3DXAnimationCallbackHandler" ,"IUnknown", id),
("ID3DXAnimationController" ,"IUnknown", id),
("ID3DXAnimationSet" ,"IUnknown", id),
("ID3DXBaseEffect" ,"IUnknown", fix_base_eff),
("ID3DXBaseMesh" ,"IUnknown", id),
("ID3DXBuffer" ,"IUnknown", id),
("ID3DXCompressedAnimationSet" ,"IUnknown", id),
("ID3DXConstantTable" ,"IUnknown", id),
("ID3DXEffect" ,"IUnknown", id),
("ID3DXEffectCompiler" ,"IUnknown", id),
--("ID3DXEffectPool" ,"IUnknown", id),
("ID3DXEffectStateManager" ,"IUnknown", id),
("ID3DXFont" ,"IUnknown", fix_font),
("ID3DXFile", "IUnknown", id),
("ID3DXFileData", "IUnknown", id),
("ID3DXFileEnumObject", "IUnknown", id),
("ID3DXFileSaveData", "IUnknown", id),
("ID3DXFileSaveObject", "IUnknown", fix_file_so),
("ID3DXFragmentLinker" ,"IUnknown", id),
("ID3DXInclude" ,"IUnknown", id),
("ID3DXKeyframedAnimationSet" ,"IUnknown", id),
("ID3DXLine" ,"IUnknown", id),
--("ID3DXLoadUserData" ,"IUnknown", id), --user callbacks, but causes errors
--("ID3DXMATRIXStack" ,"IUnknown", id),
("ID3DXMesh" ,"IUnknown", id),
("ID3DXPatchMesh" ,"IUnknown", id),
("ID3DXPMesh" ,"IUnknown", id),
("ID3DXPRTBuffer" ,"IUnknown", id),
("ID3DXPRTCompBuffer" ,"IUnknown", id),
("ID3DXPRTEngine" ,"IUnknown", id),
("ID3DXRenderToEnvMap" ,"IUnknown", id),
("ID3DXRenderToSurface" ,"IUnknown", id),
-- ("ID3DXSaveUserData" ,"IUnknown", id), -- user callbacks, errors
("ID3DXSkinInfo" ,"IUnknown", id),
("ID3DXSPMesh" ,"IUnknown", id),
("ID3DXSprite" ,"IUnknown", id),
("ID3DXTextureGutterHelper" ,"IUnknown", id),
("ID3DXTextureShader" ,"IUnknown", id)
]
fix_file_so :: (String, String, [(String,Type,[(String,Type)])]) -> (String, String, [(String,Type,[(String,Type)])])
fix_file_so (n,b,f) = (n,b,funs f)
where
funs [] = []
funs (x:xs) = (fun x):(funs xs)
fun (f,t,p)
| f=="GetFile" =
("GetFile", Base "HRESULT", [("ppFile", Pointer $ Pointer $ Base "ID3DXFile")])
| otherwise = (f,t,p)
fix_base_eff :: (String, String, [(String,Type,[(String,Type)])]) -> (String, String, [(String,Type,[(String,Type)])])
fix_base_eff (n,b,f) = (n,b,funs f)
where
funs [] = []
funs (x:xs) = (fun x):(funs xs)
fun (f,t,p)
| f=="GetValue" =
("GetValue", Base "HRESULT", [
("hParam1", Base "D3DXHANDLE"), -- ("hParam2", Base "D3DXHANDLE"),
("pData", Pointer $ Base "void"), ("Bytes", Base "UINT")])
| otherwise = (f,t,p)
fix_font :: (String, String, [(String,Type,[(String,Type)])]) -> (String, String, [(String,Type,[(String,Type)])])
fix_font (n,b,f) = (n,b,funs f)
where
funs [] = []
funs (x:xs) = (fun x):(funs xs)
fun (f,t,p)
| f=="GetDesc" = ("GetDescW",t,p)
| f=="PreloadText" = ("PreloadTextW",t,p)
| otherwise = (f,t,p)
d3dx_structures = [
"D3DXATTRIBUTERANGE",
"D3DXATTRIBUTEWEIGHTS",
"D3DXBONECOMBINATION",
"D3DXCOLOR",
"D3DXCONSTANT_DESC",
"D3DXCONSTANTTABLE_DESC",
"D3DXEFFECTDEFAULT",
"D3DXEFFECTINSTANCE",
"D3DXEFFECT_DESC",
"D3DXFLOAT16",
"D3DXFONT_DESC",
"D3DXFRAGMENT_DESC",
"D3DXFRAME",
"D3DXFUNCTION_DESC",
"D3DXIMAGE_INFO",
"D3DXINTERSECTINFO",
"D3DXKEY_CALLBACK",
"D3DXKEY_QUATERNION",
"D3DXKEY_VECTOR3",
"D3DXMACRO",
"D3DXMATERIAL",
--"D3DXMATRIX",
--"D3DXMATRIXA16",
"D3DXMESHCONTAINER",
-- "D3DXMESHDATA", -- uses union
"D3DXPASS_DESC",
"D3DXPATCHINFO",
"D3DXPLANE",
"D3DXQUATERNION",
"D3DXRTE_DESC",
"D3DXRTS_DESC",
"D3DXSEMANTIC",
"D3DXSHADER_CONSTANTINFO",
"D3DXSHADER_CONSTANTTABLE",
"D3DXSHADER_STRUCTMEMBERINFO",
"D3DXSHADER_TYPEINFO",
"D3DXSHMATERIAL",
"D3DXSHPRTSPLITMESHCLUSTERDATA",
"D3DXSHPRTSPLITMESHVERTDATA",
"D3DXTRACK_DESC",
"D3DXTECHNIQUE_DESC",
"D3DXVECTOR2",
"D3DXVECTOR3",
"D3DXVECTOR4"
--"D3DXWeldEpsilons"
]