Esempio n. 1
0
        public static AsmProject DeserializeBwmFile(FileInfo file)
        {
            var header = new ProjectFileHeader();

            var xmlDocument = new XmlDocument();

            xmlDocument.Load(file.FullName);
            string xmlString = xmlDocument.OuterXml;

            using (var read = new StringReader(xmlString))
            {
                var serializer = new XmlSerializer(typeof(ProjectFileHeader));
                using (var reader = new XmlTextReader(read))
                {
                    if (serializer.CanDeserialize(reader))
                    {
                        header = (ProjectFileHeader)serializer.Deserialize(reader);
                    }
                    else
                    {
                        serializer = new XmlSerializer(typeof(LegacyProjectFileHeaderV1));
                        var legacyHeader = (LegacyProjectFileHeaderV1)serializer.Deserialize(reader);
                        legacyHeader.FixCompatibility();
                        header = legacyHeader;
                    }
                }
            }

            var project = new AsmProject {
                Directory = file.Directory, ProjectFile = file
            };

            header.GetProjectModel(project);
            return(project);
        }
Esempio n. 2
0
        public void Save(Func <FileInfo, string> getNewFileName = null)
        {
            if (getNewFileName != null)
            {
                throw new NotImplementedException();
            }
            try
            {
                var fileHeader  = ProjectFileHeader.GetFileHeader(this);
                var xmlDocument = new XmlDocument();
                var serializer  = new XmlSerializer(fileHeader.GetType());
                using (var stream = new MemoryStream())
                {
                    serializer.Serialize(stream, fileHeader);
                    stream.Position = 0;
                    xmlDocument.Load(stream);
                    xmlDocument.Save(ProjectFile.FullName);
                }

                Pristine = true;
            }
            catch (Exception ex)
            {
                throw new Exception("Error when trying to save project file: " + ex.Message, ex);
            }
        }
Esempio n. 3
0
        // EXPORT
        public static ProjectFileHeader GetFileHeader(AsmProject project)
        {
            var header         = new ProjectFileHeader();
            var fileReferences = new Dictionary <AsmProjectFile, int>();

            header.Type             = project.Type;
            header.Name             = project.Name;
            header.ExtraDirectories = project.Directories.Select(d => project.GetRelativePath(d.FullName)).ToArray();

            var filesHeaders = new List <ProjectFileFileHeader>();

            for (var i = 0; i < project.Files.Count; i++)
            {
                var file = project.Files[i];

                var fileHeader = new ProjectFileFileHeader();
                fileHeader.RelativePath = project.GetRelativePath(file.File.FullName);
                fileHeader.Id           = i;
                fileHeader.Mode         = file.Mode;
                if (file.Pipeline != null)
                {
                    var pipelineHeader = new PipelineHeader();
                    if (file.Pipeline is ChrPipeline)
                    {
                        pipelineHeader.Type = "chr";
                    }
                    file.Pipeline.GetSettings(pipelineHeader.Settings);
                    pipelineHeader.LastProcessed = file.Pipeline.LastProcessed;
                    pipelineHeader.Output        = file.Pipeline.OutputFiles.Select(project.GetRelativePath).ToArray();

                    fileHeader.Pipeline = pipelineHeader;
                }

                fileReferences.Add(file, i);
                filesHeaders.Add(fileHeader);
            }

            header.Files = filesHeaders.ToArray();
            var configurations = new List <BuildConfigurationHeader>();

            foreach (var c in project.BuildConfigurations)
            {
                var buildConfigurationHeader = new BuildConfigurationHeader
                {
                    Data = new[]
                    {
                        c.ChrBuildPath, c.PrgBuildPath, c.BuildPath, c.ChrFile,
                        c.DebugFile, c.Filename, c.LinkerConfigFile, c.MapFile, c.PrgFile,
                        c.Name, string.Join(",", c.Symbols), c.CalculateChecksum ? "1" : "0"
                    },
                    ChrBankFileIds = c.ChrBanks.Select(b =>
                                                       b.Sources.Select(f => fileReferences[f]).ToArray()).ToArray()
                };
                if (buildConfigurationHeader.ChrBankFileIds.Length == 0)
                {
                    buildConfigurationHeader.ChrBankFileIds = null;
                }
                configurations.Add(buildConfigurationHeader);
            }
            header.BuildConfigurations = configurations.ToArray();

            return(header);
        }