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> /// Displays the results of a generation / upload routine /// </summary> /// <param name="message"></param> private void ShowResultDialog(String message) { LogWindow dlg = new LogWindow(); if (generationResult) dlg.Image = SystemIcons.Asterisk; else dlg.Image = SystemIcons.Error; dlg.Message = message; dlg.Log = generateLog; // This forces the log window to the top if // the application is behind another. this.Focus(); // Show the log window dlg.ShowDialog(); myProgress.Style = ProgressBarStyle.Blocks; myProgress.Value = 0; myStatusMsg.Text = "[Generator Idle]"; btnGenerate.Enabled = true; }