static void Main(String[] args) { // If no arguments, show the GUI if (args.Length == 0) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MPFS21Form()); } // Operate in command line mode else { // Make sure we got at least 3 parameters if (args.Length < 3) { MessageBox.Show( "Usage: MPFS2 [options] <SourceDir> <ProjectDir> <OutputFile>\n" + " /BIN\t\t(/b)\t: Output a BIN image (Default)\n" + " /C18\t\t(/c)\t: Output a C18 image\n" + " /ASM30\t(/s)\t: Output an ASM30 image\n" + " /C32\t\t(/x)\t: Output a C32 image\n" + " /classic\t\t(/1)\t: MPFSClassic format\n" + " /mpfs2\t\t(/2)\t: MPFS2 format (Default)\n" + " /reserve #\t(/r #)\t: Reserved space for Classic BINs (Default 64)\n" + " /html \"...\"\t(/h)\t: Dynamic file types (\"*.htm, *.html, *.xml, *.cgi\")\n" + " /xgzip \"...\"\t(/z)\t: Non-compressible types (\"snmp.bib, *.inc\")\n\n" + "SourceDir, ProjectDir, and OutputFile are required and should be enclosed in quotes.\n" + "OutputFile is placed relative to ProjectDir and *CANNOT* be a full path name.", "MPFS2 Console Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } // Locate the parameters String sourceDir = args[args.Length - 3]; String projectDir = args[args.Length - 2]; String outputFile = args[args.Length - 1]; // Set up some defaults MPFSOutputFormat fmt = MPFSOutputFormat.BIN; byte version = 2; int reserveBlock = 64; String htmlTypes = "*.htm, *.html, *.xml, *.cgi"; String noGZipTypes = "*.inc, snmp.bib"; // Process each command line argument for(int i =0; i < args.Length - 3; i++) { String arg = args[i].ToLower(); // Check for output format parameters if(arg == "/bin" || arg == "/b") fmt = MPFSOutputFormat.BIN; else if(arg == "/c18" || arg == "/c") fmt = MPFSOutputFormat.C18; else if(arg == "/asm30" || arg == "/s") fmt = MPFSOutputFormat.ASM30; else if(arg == "/c32" || arg == "/x") fmt = MPFSOutputFormat.C32; else if(arg == "/classic" || arg == "/1") version = 1; else if(arg == "/mpfs2" || arg == "/2") version = 2; // Check for string parameters else if(arg == "/reserve" || arg == "/r") reserveBlock = Convert.ToInt32(args[++i]); else if(arg == "/html" || arg == "/h") htmlTypes = args[++i]; else if(arg == "/xgzip" || arg == "/z") noGZipTypes = args[++i]; else { MessageBox.Show("The command-line option \""+arg+"\" was not recognized.", "MPFS2 Console Error",MessageBoxButtons.OK,MessageBoxIcon.Error); return; } } // Set up an appropriate builder MPFSBuilder builder; // This is a dummy string , will be initialized when MDD is supported from command line String dummy = "Dummy"; if (version == 2) { builder = new MPFS2Builder(projectDir, outputFile); ((MPFS2Builder)builder).DynamicTypes = htmlTypes; ((MPFS2Builder)builder).NonGZipTypes = noGZipTypes; } else { builder = new MPFSClassicBuilder(projectDir, outputFile); ((MPFSClassicBuilder)builder).ReserveBlock = (UInt32)reserveBlock; } // Add the files to the image and generate the image builder.AddDirectory(sourceDir, ""); // Generate the image and trap errors if (!builder.Generate(fmt)) { LogWindow dlg = new LogWindow(); dlg.Image = SystemIcons.Error; dlg.Message = "An error was encountered during generation."; dlg.Log = builder.Log; dlg.ShowDialog(); return; } } }
/// <summary> /// Handles the generation when clicked. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnGenerate_Click(object sender, EventArgs e) { // Disable the button btnGenerate.Enabled = false; // Build an image if(radStartDir.Checked) { //// Make sure the project directory is correct //if(txtProjectDir.Text.Contains(txtSourceDir.Text)) //{ // generationResult = false; // generateLog = new List<string>(); // generateLog.Add("ERROR: The project directory is located in the source " + // "directory. The generator cannot run if the image is to be placed " + // "in the source directory. Please select the base MPLAB project " + // "directory before continuing."); // generationResult = false; // ShowResultDialog("The image could not be built."); // return; //} // Set up an appropriate builder MPFSBuilder builder; if(Settings.Default.OutputVersion == 2) { builder = new MPFS2Builder(txtProjectDir.Text, txtImageName.Text); ((MPFS2Builder)builder).DynamicTypes = Settings.Default.DynamicFiles; ((MPFS2Builder)builder).NonGZipTypes = Settings.Default.NoCompressFiles; } else { builder = new MPFSClassicBuilder(txtProjectDir.Text, txtImageName.Text); ((MPFSClassicBuilder)builder).ReserveBlock = (UInt32)Settings.Default.ReserveBlockClassic; } // Add the files to the image myStatusMsg.Text = "Adding source files to image..."; builder.AddDirectory(txtSourceDir.Text, ""); // Generate the image myStatusMsg.Text = "Generating output image..."; myProgress.Value = (radOutputBIN.Checked && chkUpload.Checked) ? 20 : 70; if (radOutputBIN.Checked) generationResult = builder.Generate(MPFSOutputFormat.BIN); else if (radOutputC18.Checked) generationResult = builder.Generate(MPFSOutputFormat.C18); else if (radOutputMDD.Checked) generationResult = builder.Generate(MPFSOutputFormat.MDD); else if (radOutputASM30.Checked) generationResult = builder.Generate(MPFSOutputFormat.ASM30); // Indicate full progress for non-uploads myProgress.Value = (radOutputBIN.Checked && chkUpload.Checked) ? 20 : 120; Thread.Sleep(10); // Retrieve the log generateLog = builder.Log; // Perform the upload if needed if (radOutputBIN.Checked && chkUpload.Checked && generationResult) { UploadImage(builder.GeneratedImageFileName); } else { if (generationResult) ShowResultDialog("The MPFS" + ((Settings.Default.OutputVersion == 1) ? "" : "2") + " image was successfully generated."); else ShowResultDialog("Errors were encountered while generating the MPFS image."); } // Show a warning if index has changed if (builder.IndexUpdated) { MessageBox.Show("The dynamic variables in your web pages have changed!\n\n" + "Remember to recompile your MPLAB project before continuing\n" + "to ensure that the project is in sync.", "MPFS2 Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } // This is just an upload else { generationResult = true; generateLog = new List<string>(); UploadImage(txtSourceImage.Text); } }