ablib::string Ghostscript::GetGSDir(){ if(m_gsdir != _T(""))return m_gsdir; std::wregex reg; try{ reg.assign(_T("(AFPL|GNU|GPL|ESP) Ghostscript (gs)?([0-9]*\\.[0-9]*)")); }catch(...){ASSERT(false);} std::vector<ablib::string> keys; if(!Registory::EnumKey(HKEY_LOCAL_MACHINE,_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"),keys))return _T(""); for(auto &key : keys){ std::wsmatch reg_results; if(std::regex_match(key,reg_results,reg)){ ablib::string val = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"); val += key; ablib::string str; if(!Registory::ReadSZ(HKEY_LOCAL_MACHINE,val.c_str(),_T("UninstallString"),str))return _T(""); bool dq = false; ablib::string::size_type p = 0; str = ExecToPath(str); if(str != _T("")){ m_gsdir = str; m_gsdir.erase(m_gsdir.rfind(_T("\\"))); m_gsdir += _T("\\"); if(::GetFileAttributes((m_gsdir + _T("bin\\gswin32.exe")).c_str()) == -1){ m_gsdir += _T("gs"); m_gsdir += reg_results[3]; m_gsdir += _T("\\"); } DEBUGSTRING(_T("Install::GetGSDir : GSDir = %s"),m_gsdir.c_str()); return m_gsdir; } } } return m_gsdir; }
void MGEOnProcessStart(HANDLE pipe) { // Set variables dependent on configuration switch (FogMode) { case 2: FogPixelMode = 0; FogVertexMode = 3; RangedFog = 1; break; case 1: FogPixelMode = 0; FogVertexMode = 3; RangedFog = 0; break; default: FogPixelMode = 3; FogVertexMode = 0; RangedFog = 0; break; } if (!(MGEFlags & REFLECTIVE_WATER)) { BitReset(&MGEFlags, REFLECT_NEAR_BIT); BitReset(&MGEFlags, REFLECT_FAR_BIT); } if (!(MGEFlags & REFLECT_NEAR)) { BitReset(&MGEFlags, REFLECT_FAR_BIT); } DL_WaterReflect = (BYTE)BitTst(&MGEFlags, REFLECTIVE_WATER_BIT) + (BYTE)BitTst(&MGEFlags, REFLECT_NEAR_BIT) + (BYTE)BitTst(&MGEFlags, REFLECT_FAR_BIT); Rotation *= PI / 180; ReactionSpeed = 1.0f / ReactionSpeed; DL_DrawDist *= 8192.0f; DL_NearStaticEnd *= 8192.0f; DL_FarStaticEnd *= 8192.0f; DL_VeryFarStaticEnd *= 8192.0f; DL_AboveWaterFogStart *= 8192.0f; DL_AboveWaterFogEnd *= 8192.0f; DL_BelowWaterFogStart *= 8192.0f; DL_BelowWaterFogEnd *= 8192.0f; DL_InteriorFogStart *= 8192.0f; DL_InteriorFogEnd *= 8192.0f; for (int fog = 0; fog <= 9; ++fog) DL_FgOD[fog] /= 100.0f; //zero all the structs //ZeroStruct(Cam3Offset); ZeroStruct(JointInfo); //ZeroStruct(Options); ZeroStruct(fpsString); ZeroStruct(ShaderStruct); ZeroStruct(RcpRes); ZeroStruct(SinVar); ZeroStruct(LinVar); ZeroStruct(EyeVec); ZeroStruct(EyePos); ZeroStruct(SunVec); ZeroStruct(SunCol); ZeroStruct(AmbCol); EyeVec.w=1; //Set some values for some structs fpsRect.bottom=35; fpsRect.right=600; fpsRect.left=5; fpsRect.top=20; StatusRect.bottom=50; StatusRect.right=635; StatusRect.left=5; StatusRect.top=5; fpsColor.a=255; fpsColor.r=255; fpsColor.b=255; fpsColor.g=255; fps=0; //Setup any global variables UsingDistantLand=false; UseDistantStatics=true; UseGrass=true; RealDevice=NULL; BackBuffer=NULL; DepthTexture=NULL; DepthBuffer=NULL; StateBlock=0; Font=NULL; StatusStringTime=0; //Scenecount SceneCount=0; HUDScene=-1; AlphaScene=2; SolarScene=-1; Indoors=false; UpdateScene=false; LastSceneCount=0; PixelShading=false; StencilEnabled=false; AlphaBlendEnabled=false; AlphaTestEnabled=false; SunEnabled=false; LightsSet=false; ShadowsDrawn=0; NumDrawCalls=0; WaterDrawn=false; FogAlreadySet=false; DlDoneHooking=false; //fps variables (Could make an fps structure I suppose) fpsLastTime=0; fpsFrames=0; fpsAdjusting=false; //These are variables used for graphics features which cant be set by MGEgui Zoom=false; //FOV=4.0f; FogRange=1.0f; FogStart=0; FogEnd=0; //Rotation=(PI*Options.Rotation)/2; D3DXMatrixRotationZ(&RotateMatrix,Rotation); //MaxViewRange=STDMAXVIEWDISTANCE; //MinViewRange=STDMINVIEWDISTANCE; //MWSE stuff //Lighting ZeroStruct(LightIDs); ActiveLights=0; //STANDARD stuff ZeroStruct(Objects); UsedMWSEobjects=0; ZeroStruct(HUDbits); UsedHUDbits=0; HUDsprite=NULL; ZeroStruct(LoadedTextures); LastTimer=0; UsedMWSEShaders=0; HookNextTexture=false; NextTexIsWater=false; NextHookIndex=0; ZeroStruct(HookedTextures); HookedShaderActive=0; ActiveHookedShader=0; for(int i=0;i<8;i++) SetHookedTextures[i]=255; //Camera shake CameraShake=false; CameraShakeAmp=0; CameraShakeChange=false; CameraShakeChangeRate=0; D3DXMatrixTranslation(&CameraShakeMatrix,0,0,0); //fps independent stuff FOVZooming=false; FOVZoomRate=0; FogZooming=false; FogZoomRate=0; RotSpinning=false; RotSpinRate=0; //Exterior lighting control SunManual=false; SunManColour=false; SunManDir=false; AmbientManual=false; FogManual=false; ClsManual=false; SkyManual=false; HUDManual=false; ZeroStruct(SunDirection); SunColour=D3DXCOLOR(0,0,0,0); AmbientColour=0; FogColour=0; ClsColour=0; SkyColour=0; HUDColour=0xFFFFFFFF; SunTexture=NULL; //Texture spamming TexRenderTarget=NULL; TexCopyTo=NULL; SufRenderTarget=NULL; SufCopyTo=NULL; ZeroStruct(TexDrawOrigin); ZeroStruct(TexDrawScale); //video stuff LoadedVideoCount=0; DistantLandActive=false; //phal //Now init some stuff //MWSE timer TimerFrequency=0; if(!QueryPerformanceFrequency((LARGE_INTEGER*)&TimerFrequency)) { TimerFrequency=0; DEBUGSTRING("Your computer has no high resolution performance counter available.\n" "Some MGE features or plugins will not function correctly.\n"); } MWSEpipe=pipe; }