public DMDConfig DMDConfig(DVersion v) { if (v == DVersion.D1) { return(dmd1); } return(dmd2); }
static string SearchForDmdInstallations(DVersion Version = DVersion.D2) { string dmdRoot = Version == DVersion.D2 ? "dmd2" : "dmd"; string windowsBinPath = Path.Combine(dmdRoot, "windows", "bin"); // Search in %PATH% variable var PATH = Environment.GetEnvironmentVariable("path"); var PATH_Directories = PATH.Split(';'); foreach (var PATH_Dir in PATH_Directories) { if (PATH_Dir.TrimEnd('\\').EndsWith(windowsBinPath) && File.Exists(Path.Combine(PATH_Dir, "dmd.exe"))) { return(PATH_Dir); } } // Search logical drives var usuallyUsedDirectories = new[] { "", "D\\" }; var drives = Directory.GetLogicalDrives(); foreach (var drv in drives) { foreach (var usedDir in usuallyUsedDirectories) { var assumedDmdDir = Path.Combine(drv, usedDir, windowsBinPath); var assumendDmdExe = assumedDmdDir + "\\dmd.exe"; if (File.Exists(assumendDmdExe)) { return(assumedDmdDir); } } } return(null); }
protected override void LoadLanguageSpecificSettings(XmlReader xr) { while (xr.Read()) { switch (xr.LocalName) { case "type": try { OutputType = (OutputTypes)Convert.ToInt32(xr.ReadString()); } catch { } break; case "isrelease": IsRelease = xr.ReadString() == "true"; break; case "dversion": DMDVersion = (DVersion)Convert.ToInt32(xr.ReadString()); break; case "libs": var xr2 = xr.ReadSubtree(); while (xr2.Read()) { if (xr2.LocalName == "lib") { LinkedLibraries.Add(xr2.ReadString()); } } break; default: break; } } CompilerConfiguration.ASTCache.FinishedParsing += finishedCmpCacheAnalysis; }
public void Load(XmlReader x) { if (x.LocalName != "dmd") return; if(x.MoveToAttribute("version")) Version = (DVersion)Convert.ToInt32( x.GetAttribute("version")); x.MoveToElement(); var x2 = x.ReadSubtree(); while (x2.Read()) { switch (x2.LocalName) { case "basedirectory": baseDir = x2.ReadString(); break; case "sourcecompiler": SoureCompiler = x2.ReadString(); break; case "exelinker": ExeLinker = x2.ReadString(); break; case "win32linker": Win32ExeLinker = x2.ReadString(); break; case "dlllinker": DllLinker = x2.ReadString(); break; case "liblinker": LibLinker = x2.ReadString(); break; case "buildarguments": var args = new DBuildArguments(); args.Load(x2); if (args.IsDebug) DebugArgs = args; else ReleaseArgs = args; break; case "parsedDirectories": if (x2.IsEmptyElement) break; var st = x2.ReadSubtree(); if(st!=null) while (st.Read()) { if (st.LocalName == "dir") { var dir = st.ReadString(); if(!string.IsNullOrWhiteSpace(dir)) ASTCache.ParsedDirectories.Add(dir); } } break; case "DefaultLibs": var xr2 = x2.ReadSubtree(); while (xr2.Read()) { if (xr2.LocalName == "lib") { var libF = xr2.ReadString(); if(!DefaultLinkedLibraries.Contains(libF)) DefaultLinkedLibraries.Add(libF); } } break; } } // After having loaded the directory paths, parse them asynchronously ASTCache.BeginParse(); }
public DMDConfig DMDConfig(DVersion v) { if (v == DVersion.D1) return dmd1; return dmd2; }
static string SearchForDmdInstallations(DVersion Version = DVersion.D2) { string dmdRoot = Version == DVersion.D2 ? "dmd2" : "dmd"; string windowsBinPath=Path.Combine(dmdRoot,"windows", "bin"); // Search in %PATH% variable var PATH= Environment.GetEnvironmentVariable("path"); var PATH_Directories = PATH.Split(';'); foreach (var PATH_Dir in PATH_Directories) if (PATH_Dir.TrimEnd('\\').EndsWith(windowsBinPath) && File.Exists(Path.Combine(PATH_Dir, "dmd.exe"))) return PATH_Dir; // Search logical drives var usuallyUsedDirectories = new[] { "", "D\\" }; var drives = Directory.GetLogicalDrives(); foreach (var drv in drives) foreach (var usedDir in usuallyUsedDirectories) { var assumedDmdDir = Path.Combine(drv, usedDir, windowsBinPath ); var assumendDmdExe = assumedDmdDir+ "\\dmd.exe"; if (File.Exists(assumendDmdExe)) return assumedDmdDir; } return null; }
public void Load(XmlReader x) { if (x.LocalName != "dmd") { return; } if (x.MoveToAttribute("version")) { Version = (DVersion)Convert.ToInt32(x.GetAttribute("version")); } x.MoveToElement(); var x2 = x.ReadSubtree(); while (x2.Read()) { switch (x2.LocalName) { case "basedirectory": baseDir = x2.ReadString(); break; case "sourcecompiler": SoureCompiler = x2.ReadString(); break; case "exelinker": ExeLinker = x2.ReadString(); break; case "win32linker": Win32ExeLinker = x2.ReadString(); break; case "dlllinker": DllLinker = x2.ReadString(); break; case "liblinker": LibLinker = x2.ReadString(); break; case "buildarguments": var args = new DBuildArguments(); args.Load(x2); if (args.IsDebug) { DebugArgs = args; } else { ReleaseArgs = args; } break; case "parsedDirectories": if (x2.IsEmptyElement) { break; } var st = x2.ReadSubtree(); if (st != null) { while (st.Read()) { if (st.LocalName == "dir") { var dir = st.ReadString(); if (!string.IsNullOrWhiteSpace(dir)) { ASTCache.ParsedDirectories.Add(dir); } } } } break; case "DefaultLibs": var xr2 = x2.ReadSubtree(); while (xr2.Read()) { if (xr2.LocalName == "lib") { var libF = xr2.ReadString(); if (!DefaultLinkedLibraries.Contains(libF)) { DefaultLinkedLibraries.Add(libF); } } } break; } } // After having loaded the directory paths, parse them asynchronously ASTCache.BeginParse(); }
private async void Window_Loaded(object sender, RoutedEventArgs e) { DispatcherTimer.Tick += dispatcherTimer_Tick; DispatcherTimer.Interval = new TimeSpan(0, 0, 0, 10); DispatcherTimer.Start(); try { new MunicipalArchiveDbConfiguration().Configurate(); } catch (Exception exception) { Utility.MyMessageBox("خطا", "خطا در ارتباط اولیه با پایگاه داده" + "\n" + exception); Process.GetCurrentProcess().Kill(); } //await Task.Run(() => new MunicipalArchiveDbChanges().Configurate()); var licenseData = new List <tblLicense>(); try { licenseData = DLicense.GetData(); } catch (Exception exception) { Utility.MyMessageBox("خطا", "خطا در ارتباط با پایگاه داده" + "\n" + exception); Process.GetCurrentProcess().Kill(); } var serialNumber = await Task.Run(() => SerialNumber.GetHardwareSerial()); var salt = new SaltyPasswordHashing { MaxHashSize = 40, SaltSize = 0 }; string applicense = null; foreach (var variable in licenseData) { if (!await Task.Run(() => salt.VerifyHash(serialNumber, variable.AppLicense))) { applicense = variable.AppLicense; } } if (applicense == null) { var checkTime = await Task.Run(CheckWinTimeUpdate); var checkTrial = await Task.Run(Check3DayTrial); if ((await DVersion.GetData())[0].AppVersion == null) { var dVersion = new DVersion { DAppVersion = "1.0.0" }; await Task.Run(() => dVersion.Edit()); } if (!checkTime || !checkTrial) { if (OkTime && OkShutdownApp) { OkDbChange = true; Application.Current.Shutdown(); } if (OkTime && !OkShutdownApp) { var winLicense = new WinLicense(); OkDbChange = true; winLicense.Show(); Close(); } else { ShowWinLicense = true; } return; } if (OkTime) { var winLogin = new WinLogin(); OkDbChange = true; winLogin.Show(); Close(); } else { OkLogin = true; } } else { if (OkTime) { var winLogin = new WinLogin(); OkDbChange = true; winLogin.Show(); Close(); } else { OkLogin = true; } } }
public async Task <bool> Check3DayTrial() { var filePath = _directoryPath + @"\VeryImportant.dat"; var persianDate = PersianDateTime.Now.ToString(PersianDateTimeFormat.DateTime); var appVersion = (await DVersion.GetData())[0].AppVersion; var existsFilePath = File.Exists(filePath); if ((appVersion == null || !existsFilePath) && (appVersion != null || existsFilePath)) { return(false); } if (appVersion == null) { try { using (var fileStream = new FileStream(filePath, FileMode.OpenOrCreate)) using (var streamWriter = new StreamWriter(fileStream)) { streamWriter.WriteLine(StringCipher.Encrypt(persianDate, "RAYMON33")); streamWriter.WriteLine(StringCipher.Encrypt(persianDate, "RAYMON33")); streamWriter.Close(); } } catch (Exception) { return(false); } } if (File.Exists(filePath)) { var i = 0; var saveDate = new string[2]; foreach (var line in File.ReadLines(filePath)) { try { saveDate[i] = StringCipher.Decrypt(line, "RAYMON33"); i++; } catch (Exception) { return(false); } } var dPersianDate = PersianDateTime.Parse(persianDate.Split(' ')[0], persianDate.Split(' ')[1]); var dSaveDate0 = PersianDateTime.Parse(saveDate[0].Split(' ')[0], saveDate[0].Split(' ')[1]); var dSaveDate1 = PersianDateTime.Parse(saveDate[1].Split(' ')[0], saveDate[1].Split(' ')[1]); if (dPersianDate < dSaveDate1) { Utility.MyMessageBox("خطا", "تاریخ سیستم بروز نمی باشد\nبرای اجرای برنامه لطفا تاریخ سیستم را بروزرسانی کنید"); OkShutdownApp = true; return(false); } try { EditFile(StringCipher.Encrypt(persianDate, "RAYMON33"), filePath, 2); } catch (Exception) { return(false); } if ((dPersianDate - dSaveDate0).Days >= 3) { return(false); } } else { return(false); } return(true); }
public async Task <bool> CheckWinTimeUpdate() { var appVersion = (await DVersion.GetData())[0].AppVersion; var filePath = _directoryPath + @"\IntTi.dat"; var existsIntTi = File.Exists(filePath); if ((appVersion == null || !existsIntTi) && (appVersion != null || existsIntTi)) { return(false); } string internetTime; bool okInternetTime; try { internetTime = new PersianDateTime(GetNistTime()).ToString(PersianDateTimeFormat.DateTime); okInternetTime = true; } catch (Exception) { internetTime = string.Empty; okInternetTime = false; } if (appVersion == null) { if (internetTime == string.Empty) { internetTime = "1398/04/12 00:00:00"; } try { using (var fileStream = new FileStream(filePath, FileMode.OpenOrCreate)) using (var streamWriter = new StreamWriter(fileStream)) { streamWriter.WriteLine(StringCipher.Encrypt(internetTime, "RAYMON33")); streamWriter.Close(); } } catch (Exception) { return(false); } } var intTiData = string.Empty; foreach (var line in File.ReadLines(filePath)) { try { intTiData = StringCipher.Decrypt(line, "RAYMON33"); } catch (Exception) { return(false); } } if (internetTime == string.Empty) { internetTime = intTiData; } else { try { EditFile(StringCipher.Encrypt(internetTime, "RAYMON33"), filePath, 1); } catch (Exception) { return(false); } } var persianDateTime = PersianDateTime.Now.ToString(PersianDateTimeFormat.DateTime); var dPersianDateTime = PersianDateTime.Parse(persianDateTime.Split(' ')[0], persianDateTime.Split(' ')[1]); var dInternetTime = PersianDateTime.Parse(internetTime.Split(' ')[0], internetTime.Split(' ')[1]); if (okInternetTime && appVersion != null) { if (dPersianDateTime <= dInternetTime.AddMinutes(-30)) { var timeSpan = dInternetTime - dPersianDateTime; Utility.MyMessageBox("خطا", $"تاریخ و ساعت سیستم شما\nتقریبا {timeSpan.Days} روز و {timeSpan.Hours} ساعت و {timeSpan.Minutes} دقیقه عقب میباشد\nبرای اجرای برنامه لطفا تاریخ سیستم را بروزرسانی کنید"); OkShutdownApp = true; return(false); } if (dPersianDateTime >= dInternetTime.AddMinutes(30)) { var timeSpan = dPersianDateTime - dInternetTime; Utility.MyMessageBox("خطا", $"تاریخ و ساعت سیستم شما\nتقریبا {timeSpan.Days} روز و {timeSpan.Hours} ساعت و {timeSpan.Minutes} دقیقه جلو میباشد\nبرای اجرای برنامه لطفا تاریخ سیستم را بروزرسانی کنید"); OkShutdownApp = true; return(false); } } else if (dPersianDateTime <= dInternetTime.AddMinutes(-30) && appVersion != null) { Utility.MyMessageBox("خطا", "تاریخ و ساعت سیستم بروز نمی باشد\nبرای اجرا شدن برنامه لطفا تاریخ سیستم را بروزرسانی کنید"); OkShutdownApp = true; return(false); } return(true); }
protected override void LoadLanguageSpecificSettings(XmlReader xr) { while(xr.Read()) switch (xr.LocalName) { case "type": try { OutputType = (OutputTypes)Convert.ToInt32(xr.ReadString()); } catch { } break; case "isrelease": IsRelease = xr.ReadString()=="true"; break; case "dversion": DMDVersion = (DVersion)Convert.ToInt32(xr.ReadString()); break; case "libs": var xr2 = xr.ReadSubtree(); while (xr2.Read()) { if (xr2.LocalName == "lib") LinkedLibraries.Add(xr2.ReadString()); } break; default: break; } CompilerConfiguration.ASTCache.FinishedParsing += finishedCmpCacheAnalysis; }
public override void BuildProject(Project prj) { var dprj = prj as DProject; if (dprj == null) { return; } DMDVersion = dprj.DMDVersion; dprj.LastBuildResult = new BuildResult() { SourceFile = dprj.FileName, TargetFile = dprj.OutputFile }; // Build outputs/target paths string objectDirectory = dprj.BaseDirectory + "\\obj"; Util.CreateDirectoryRecursively(objectDirectory); #region Compile d sources to object files var objs = new List <string>(); bool AllObjectsUnchanged = true; AbstractLanguageBinding lang = null; foreach (var f in dprj.CompilableFiles) { if (ShallStop) { return; } bool _u = false; if (lang == null || !lang.CanHandleFile(f.FileName)) { lang = AbstractLanguageBinding.SearchBinding(f.FileName, out _u); } if (lang == null || _u || !lang.CanBuild || !lang.BuildSupport.CanBuildFile(f.FileName)) { continue; } lang.BuildSupport.BuildModule(f, objectDirectory, prj.BaseDirectory, !dprj.IsRelease, false); if (!f.LastBuildResult.Successful) { return; } if (!f.LastBuildResult.NoBuildNeeded) { AllObjectsUnchanged = false; } // To save command line space, make the targetfile relative to our objectDirectory objs.Add(dprj.ToRelativeFileName(f.LastBuildResult.TargetFile)); } if (objs.Count < 1) { prj.LastBuildResult.Successful = true; prj.LastBuildResult.NoBuildNeeded = true; ErrorLogger.Log("Project " + dprj.Name + " empty", ErrorType.Error, ErrorOrigin.Build); return; } #endregion // If no source has been changed, skip linkage if (AllObjectsUnchanged && File.Exists(dprj.OutputFile)) { dprj.LastBuildResult.NoBuildNeeded = true; dprj.LastBuildResult.Successful = true; return; } // Add default & project specific import libraries objs.AddRange(CurrentDMDConfig.DefaultLinkedLibraries); objs.AddRange(dprj.LinkedLibraries); // Link files to console-based application by default var linkerExe = CurrentDMDConfig.ExeLinker; var args = CurrentDMDConfig.BuildArguments(!dprj.IsRelease); var linkerArgs = args.ExeLinker; switch (dprj.OutputType) { case OutputTypes.CommandWindowLessExecutable: linkerExe = CurrentDMDConfig.Win32ExeLinker; linkerArgs = args.Win32ExeLinker; break; case OutputTypes.DynamicLibary: linkerExe = CurrentDMDConfig.DllLinker; linkerArgs = args.DllLinker; break; case OutputTypes.StaticLibrary: linkerExe = CurrentDMDConfig.LibLinker; linkerArgs = args.LibLinker; break; } if (ShallStop) { return; } dprj.LastBuildResult = LinkFiles(CurrentDMDConfig, linkerExe, linkerArgs, dprj.BaseDirectory, dprj.OutputFile, !dprj.IsRelease, objs.ToArray()); }
public override void BuildProject(Project prj) { var dprj = prj as DProject; if (dprj == null) return; DMDVersion=dprj.DMDVersion; dprj.LastBuildResult = new BuildResult() { SourceFile=dprj.FileName, TargetFile=dprj.OutputFile}; // Build outputs/target paths string objectDirectory = dprj.BaseDirectory+"\\obj"; Util.CreateDirectoryRecursively(objectDirectory); #region Compile d sources to object files var objs = new List<string>(); bool AllObjectsUnchanged = true; AbstractLanguageBinding lang = null; foreach (var f in dprj.CompilableFiles) { if (ShallStop)return; bool _u = false ; if(lang==null || !lang.CanHandleFile(f.FileName)) lang=AbstractLanguageBinding.SearchBinding(f.FileName, out _u); if (lang == null || _u || !lang.CanBuild || !lang.BuildSupport.CanBuildFile(f.FileName)) continue; lang.BuildSupport.BuildModule(f,objectDirectory,prj.BaseDirectory, !dprj.IsRelease,false); if (!f.LastBuildResult.Successful) return; if (!f.LastBuildResult.NoBuildNeeded) AllObjectsUnchanged = false; // To save command line space, make the targetfile relative to our objectDirectory objs.Add(dprj.ToRelativeFileName(f.LastBuildResult.TargetFile)); } if (objs.Count < 1) { prj.LastBuildResult.Successful = true; prj.LastBuildResult.NoBuildNeeded = true; ErrorLogger.Log("Project "+dprj.Name+" empty",ErrorType.Error,ErrorOrigin.Build); return; } #endregion // If no source has been changed, skip linkage if (AllObjectsUnchanged && File.Exists(dprj.OutputFile)) { dprj.LastBuildResult.NoBuildNeeded = true; dprj.LastBuildResult.Successful = true; return; } // Add default & project specific import libraries objs.AddRange(CurrentDMDConfig.DefaultLinkedLibraries); objs.AddRange(dprj.LinkedLibraries); // Link files to console-based application by default var linkerExe = CurrentDMDConfig.ExeLinker; var args=CurrentDMDConfig.BuildArguments(!dprj.IsRelease); var linkerArgs = args.ExeLinker; switch (dprj.OutputType) { case OutputTypes.CommandWindowLessExecutable: linkerExe = CurrentDMDConfig.Win32ExeLinker; linkerArgs = args.Win32ExeLinker; break; case OutputTypes.DynamicLibary: linkerExe = CurrentDMDConfig.DllLinker; linkerArgs = args.DllLinker; break; case OutputTypes.StaticLibrary: linkerExe = CurrentDMDConfig.LibLinker; linkerArgs = args.LibLinker; break; } if (ShallStop) return; dprj.LastBuildResult = LinkFiles(CurrentDMDConfig,linkerExe, linkerArgs, dprj.BaseDirectory, dprj.OutputFile, !dprj.IsRelease, objs.ToArray()); }