Exemple #1
0
 public DMDConfig DMDConfig(DVersion v)
 {
     if (v == DVersion.D1)
     {
         return(dmd1);
     }
     return(dmd2);
 }
Exemple #2
0
        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);
        }
Exemple #3
0
        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;
        }
Exemple #4
0
        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();
        }
Exemple #5
0
 public DMDConfig DMDConfig(DVersion v)
 {
     if (v == DVersion.D1)
         return dmd1;
     return dmd2;
 }
Exemple #6
0
        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;
        }
Exemple #7
0
        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);
        }
Exemple #11
0
        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;
        }
Exemple #12
0
        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());
        }
Exemple #13
0
		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());
		}