Line No. | Rev | Author | Line |
---|---|---|---|
1 | 32 | kaklik | /********************************************************************* |
2 | * |
||
3 | * Application Launch Point and CLI for MPFS21 |
||
4 | * |
||
5 | ********************************************************************* |
||
6 | * FileName: Program.cs |
||
7 | * Dependencies: Microsoft .NET Framework 2.0 |
||
8 | * Processor: x86 |
||
9 | * Complier: Microsoft Visual C# 2008 Express Edition |
||
10 | * Company: Microchip Technology, Inc. |
||
11 | * |
||
12 | * Software License Agreement |
||
13 | * |
||
14 | * This software is owned by Microchip Technology Inc. ("Microchip") |
||
15 | * and is supplied to you for use exclusively as described in the |
||
16 | * associated software agreement. This software is protected by |
||
17 | * software and other intellectual property laws. Any use in |
||
18 | * violation of the software license may subject the user to criminal |
||
19 | * sanctions as well as civil liability. Copyright 2008 Microchip |
||
20 | * Technology Inc. All rights reserved. |
||
21 | * |
||
22 | * |
||
23 | * THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT |
||
24 | * WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT |
||
25 | * LIMITATION, ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A |
||
26 | * PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL |
||
27 | * MICROCHIP BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR |
||
28 | * CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF |
||
29 | * PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS |
||
30 | * BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE |
||
31 | * THEREOF), ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER |
||
32 | * SIMILAR COSTS, WHETHER ASSERTED ON THE BASIS OF CONTRACT, TORT |
||
33 | * (INCLUDING NEGLIGENCE), BREACH OF WARRANTY, OR OTHERWISE. |
||
34 | * |
||
35 | * |
||
36 | * Author Date Comment |
||
37 | *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
||
38 | * Elliott Wood 4/17/2008 Original |
||
39 | ********************************************************************/ |
||
40 | using System; |
||
41 | using System.Collections.Generic; |
||
42 | using System.Windows.Forms; |
||
43 | using System.Drawing; |
||
44 | using Microchip; |
||
45 | |||
46 | namespace MPFS21 |
||
47 | { |
||
48 | |||
49 | static class Program |
||
50 | { |
||
51 | |||
52 | /// <summary> |
||
53 | /// The main entry point for the application. |
||
54 | /// </summary> |
||
55 | [STAThread] |
||
56 | static void Main(String[] args) |
||
57 | { |
||
58 | // If no arguments, show the GUI |
||
59 | if (args.Length == 0) |
||
60 | { |
||
61 | Application.EnableVisualStyles(); |
||
62 | Application.SetCompatibleTextRenderingDefault(false); |
||
63 | Application.Run(new MPFS21Form()); |
||
64 | } |
||
65 | // Operate in command line mode |
||
66 | else |
||
67 | { |
||
68 | |||
69 | // Make sure we got at least 3 parameters |
||
70 | if (args.Length < 3) |
||
71 | { |
||
72 | MessageBox.Show( |
||
73 | "Usage: MPFS2 [options] <SourceDir> <ProjectDir> <OutputFile>\n" + |
||
74 | " /BIN\t\t(/b)\t: Output a BIN image (Default)\n" + |
||
75 | " /C18\t\t(/c)\t: Output a C18 image\n" + |
||
76 | " /ASM30\t(/s)\t: Output an ASM30 image\n" + |
||
77 | " /C32\t\t(/x)\t: Output a C32 image\n" + |
||
78 | " /classic\t\t(/1)\t: MPFSClassic format\n" + |
||
79 | " /mpfs2\t\t(/2)\t: MPFS2 format (Default)\n" + |
||
80 | " /reserve #\t(/r #)\t: Reserved space for Classic BINs (Default 64)\n" + |
||
81 | " /html \"...\"\t(/h)\t: Dynamic file types (\"*.htm, *.html, *.xml, *.cgi\")\n" + |
||
82 | " /xgzip \"...\"\t(/z)\t: Non-compressible types (\"snmp.bib, *.inc\")\n\n" + |
||
83 | "SourceDir, ProjectDir, and OutputFile are required and should be enclosed in quotes.\n" + |
||
84 | "OutputFile is placed relative to ProjectDir and *CANNOT* be a full path name.", |
||
85 | "MPFS2 Console Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); |
||
86 | return; |
||
87 | } |
||
88 | |||
89 | // Locate the parameters |
||
90 | String sourceDir = args[args.Length - 3]; |
||
91 | String projectDir = args[args.Length - 2]; |
||
92 | String outputFile = args[args.Length - 1]; |
||
93 | |||
94 | // Set up some defaults |
||
95 | MPFSOutputFormat fmt = MPFSOutputFormat.BIN; |
||
96 | byte version = 2; |
||
97 | int reserveBlock = 64; |
||
98 | String htmlTypes = "*.htm, *.html, *.xml, *.cgi"; |
||
99 | String noGZipTypes = "*.inc, snmp.bib"; |
||
100 | |||
101 | // Process each command line argument |
||
102 | for(int i =0; i < args.Length - 3; i++) |
||
103 | { |
||
104 | String arg = args[i].ToLower(); |
||
105 | |||
106 | // Check for output format parameters |
||
107 | if(arg == "/bin" || arg == "/b") |
||
108 | fmt = MPFSOutputFormat.BIN; |
||
109 | else if(arg == "/c18" || arg == "/c") |
||
110 | fmt = MPFSOutputFormat.C18; |
||
111 | else if(arg == "/asm30" || arg == "/s") |
||
112 | fmt = MPFSOutputFormat.ASM30; |
||
113 | else if(arg == "/c32" || arg == "/x") |
||
114 | fmt = MPFSOutputFormat.C32; |
||
115 | else if(arg == "/classic" || arg == "/1") |
||
116 | version = 1; |
||
117 | else if(arg == "/mpfs2" || arg == "/2") |
||
118 | version = 2; |
||
119 | |||
120 | // Check for string parameters |
||
121 | else if(arg == "/reserve" || arg == "/r") |
||
122 | reserveBlock = Convert.ToInt32(args[++i]); |
||
123 | else if(arg == "/html" || arg == "/h") |
||
124 | htmlTypes = args[++i]; |
||
125 | else if(arg == "/xgzip" || arg == "/z") |
||
126 | noGZipTypes = args[++i]; |
||
127 | |||
128 | else |
||
129 | { |
||
130 | MessageBox.Show("The command-line option \""+arg+"\" was not recognized.", |
||
131 | "MPFS2 Console Error",MessageBoxButtons.OK,MessageBoxIcon.Error); |
||
132 | return; |
||
133 | } |
||
134 | } |
||
135 | |||
136 | // Set up an appropriate builder |
||
137 | MPFSBuilder builder; |
||
138 | // This is a dummy string , will be initialized when MDD is supported from command line |
||
139 | String dummy = "Dummy"; |
||
140 | if (version == 2) |
||
141 | { |
||
142 | builder = new MPFS2Builder(projectDir, outputFile); |
||
143 | ((MPFS2Builder)builder).DynamicTypes = htmlTypes; |
||
144 | ((MPFS2Builder)builder).NonGZipTypes = noGZipTypes; |
||
145 | } |
||
146 | else |
||
147 | { |
||
148 | builder = new MPFSClassicBuilder(projectDir, outputFile); |
||
149 | ((MPFSClassicBuilder)builder).ReserveBlock = (UInt32)reserveBlock; |
||
150 | } |
||
151 | |||
152 | // Add the files to the image and generate the image |
||
153 | builder.AddDirectory(sourceDir, ""); |
||
154 | |||
155 | // Generate the image and trap errors |
||
156 | if (!builder.Generate(fmt)) |
||
157 | { |
||
158 | LogWindow dlg = new LogWindow(); |
||
159 | dlg.Image = SystemIcons.Error; |
||
160 | dlg.Message = "An error was encountered during generation."; |
||
161 | dlg.Log = builder.Log; |
||
162 | dlg.ShowDialog(); |
||
163 | return; |
||
164 | } |
||
165 | } |
||
166 | } |
||
167 | } |
||
168 | } |
Powered by WebSVN v2.8.3