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