コード例 #1
0
        public static async Task WriteCodeFile(this IMatrixProject project, StorageFolder folder, IBuildService buildService)
        {
            // ***
            // *** Get the template from the resource file.
            // ***
            buildService.FireBuildEvent(BuildEventArgs.BuildEventType.Information, "Reading code template.");
            ResourceContext   resourceContext = ResourceContext.GetForViewIndependentUse();
            ResourceMap       resourceMap     = ResourceManager.Current.MainResourceMap.GetSubtree("CodeBuilder/Code");
            ResourceCandidate resourceValue   = resourceMap.GetValue("cpp", resourceContext);
            string            template        = resourceValue.ValueAsString;

            // ***
            // *** Fill in the template parameters.
            // ***
            string contents = String.Format(template, project.Name,
                                            project.ColorMatrix.BackgroundColor.R,
                                            project.ColorMatrix.BackgroundColor.G,
                                            project.ColorMatrix.BackgroundColor.B,
                                            project.AccelerometerScaling,
                                            project.Elasticity,
                                            project.SortParticles.ToString().ToLower());

            // ***
            // *** Write the file.
            // ***
            buildService.FireBuildEvent(BuildEventArgs.BuildEventType.Information, $"Writing C++ code file '{project.CppFileName()}'.");
            StorageFile file = await folder.CreateFileAsync(project.CppFileName(), CreationCollisionOption.ReplaceExisting);

            await FileIO.WriteTextAsync(file, contents, Windows.Storage.Streams.UnicodeEncoding.Utf8);
        }
コード例 #2
0
        public static async Task WriteInstructionsFile(this IMatrixProject project, StorageFolder folder, IBuildService buildService)
        {
            buildService.FireBuildEvent(BuildEventArgs.BuildEventType.Information, "Reading instructions template.");
            ResourceContext   resourceContext = ResourceContext.GetForViewIndependentUse();
            ResourceMap       resourceMap     = ResourceManager.Current.MainResourceMap.GetSubtree("CodeBuilder/Code");
            ResourceCandidate resourceValue   = resourceMap.GetValue("instructions", resourceContext);

            string template = resourceValue.ValueAsString;
            string contents = String.Format(template, project.CppFileName(),
                                            project.HeaderFileName(),
                                            project.MakeFileName(),
                                            project.Name);

            buildService.FireBuildEvent(BuildEventArgs.BuildEventType.Information, $"Writing instructions file '{project.InstructionsFileName()}'.");
            StorageFile file = await folder.CreateFileAsync(project.InstructionsFileName(), CreationCollisionOption.ReplaceExisting);

            await FileIO.WriteTextAsync(file, contents, Windows.Storage.Streams.UnicodeEncoding.Utf8);
        }
コード例 #3
0
        public static async Task WriteHeaderFile(this IMatrixProject project, StorageFolder folder, string headerCode, IBuildService buildService)
        {
            // ***
            // *** Write the header file (.h)
            // ***
            buildService.FireBuildEvent(BuildEventArgs.BuildEventType.Information, $"Writing .h code file '{project.HeaderFileName()}'.");
            StorageFile hFile = await folder.CreateFileAsync(project.HeaderFileName(), CreationCollisionOption.ReplaceExisting);

            await FileIO.WriteTextAsync(hFile, headerCode, Windows.Storage.Streams.UnicodeEncoding.Utf8);
        }
コード例 #4
0
        public static Task <string> CreateHeaderFile(this IMatrixProject project, IBuildService buildService)
        {
            StringBuilder returnValue = new StringBuilder();

            // ***
            // *** Generate the image definition.
            // ***
            buildService.FireBuildEvent(BuildEventArgs.BuildEventType.Information, "Generating image code.");
            string imageCode = project.CreateImageCode();

            // ***
            // *** Generate the mask definition.
            // ***
            buildService.FireBuildEvent(BuildEventArgs.BuildEventType.Information, "Generating mask code.");
            string maskCode = project.CreateMaskCode();

            // ***
            // *** Generate the sand grain definition.
            // ***
            buildService.FireBuildEvent(BuildEventArgs.BuildEventType.Information, "Generating grain code.");

            (bool result, string grainCode) = project.CreateGrainCode();

            if (!result)
            {
                buildService.FireBuildEvent(BuildEventArgs.BuildEventType.Warning, "No sand grains have been defined.");
            }

            buildService.FireBuildEvent(BuildEventArgs.BuildEventType.Information, "Generating header file code.");

            // ***
            // *** Generate the header file (.h)
            // ***
            returnValue.AppendLine(grainCode);
            returnValue.AppendLine();
            returnValue.AppendLine(imageCode);
            returnValue.AppendLine();
            returnValue.AppendLine(maskCode);

            return(Task.FromResult(returnValue.ToString()));
        }
コード例 #5
0
        public static async Task WriteMakeFile(this IMatrixProject project, StorageFolder folder, IBuildService buildService)
        {
            StringBuilder contents = new StringBuilder();

            contents.AppendLine($"{project.Name}: {project.CppFileName()} {project.HeaderFileName()} $(LIBS)");
            contents.AppendLine($"\t$(CXX) $(CXXFLAGS) $< $(LDFLAGS) $(LIBS) -o $@");
            contents.AppendLine($"\tstrip $@");

            buildService.FireBuildEvent(BuildEventArgs.BuildEventType.Information, $"Writing make file '{project.MakeFileName()}'.");
            StorageFile file = await folder.CreateFileAsync(project.MakeFileName(), CreationCollisionOption.ReplaceExisting);

            await FileIO.WriteTextAsync(file, contents.ToString(), Windows.Storage.Streams.UnicodeEncoding.Utf8);
        }