fix the bug in revision 1746
[mirror_edk2.git] / Tools / Java / Source / ContextTool / org / tianocore / context / ParseParameter.java
1 /** @file
2 File is ParseParameter class which is used to parse the validity of user's input args
3 and standardize them.
4
5 Copyright (c) 2006, Intel Corporation
6 All rights reserved. This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 **/
14 package org.tianocore.context;
15
16 public class ParseParameter {
17
18
19 /**
20 * check the validity of user's input args
21 * @param args -- user's input
22 * @return true or false
23 **/
24 public static boolean checkParameter(String[] args) {
25
26 if(args.length == 0){
27 TargetFile.readFile();
28 outputCurSetting();
29 return false;
30 } else {
31 if( (args[0].compareToIgnoreCase("-h") == 0) || (args[0].compareToIgnoreCase("/h") == 0) ||
32 (args[0].compareToIgnoreCase("-?") == 0) || (args[0].compareToIgnoreCase("/?") == 0) ||
33 (args[0].compareToIgnoreCase("-help") == 0) || (args[0].compareToIgnoreCase("/help") == 0) ){
34 HelpInfo.outputUsageInfo();
35 return false;
36 }
37 if( args[0].charAt(0) != '-' ){
38 System.out.printf("%s\n", "Error arguments! Please type \"ContextTool -h\" for helpinfo.");
39 return false;
40 }
41 for(int i=0; i<args.length; i++){
42 if( (args[i].startsWith("-") &&
43 ((args[i].compareTo("-a") != 0) && (args[i].compareTo("-c") != 0) &&
44 (args[i].compareTo("-n") != 0) && (args[i].compareTo("-p") != 0) &&
45 (args[i].compareTo("-t") != 0) && (args[i].compareTo("-m") != 0)))){
46 System.out.printf("%s\n", "Error arguments! Please type \"ContextTool -h\" for helpinfo.");
47 return false;
48 }
49 }
50 }
51
52 return true;
53 }
54
55 /**
56 * standardize user's input args
57 * @param args -- user's input
58 * @return no return value
59 **/
60 public static int standardizeParameter(String[] args) {
61
62
63 StringBuffer InputData = new StringBuffer();
64 for (int i = 0; i < args.length; i++) {
65 InputData.append(args[i]);
66 InputData.append(" ");
67 }
68
69 int i = 0;
70 while (i < InputData.length()) {
71 int j = InputData.indexOf("-", i + 1);
72 if (j == -1)
73 j = InputData.length();
74
75 String argstr = InputData.substring(i, j);
76 i = j;
77 if (argstr.charAt(1) == 'p') {
78 //
79 // argstr is "-p ", display current setting
80 //
81 if(argstr.length() < 4 && argstr.charAt(2) == ' '){
82 System.out.printf("%s\n", curpstr);
83 return 1;
84 }
85 //
86 //argstr is "-p ?", display possible setting
87 //
88 if(argstr.length() < 6 && argstr.charAt(3) == '?'){
89 System.out.printf( "%s\n", "assign the platform FPD file's relative path to WORKSPACE" );
90 return 2;
91 }
92 //
93 //argstr is "-p 0", clean current setting
94 //
95 if(argstr.length() < 6 && argstr.charAt(3) == '0'){
96 curpstr = pstr;
97 npflag = true;
98 continue;
99 }
100 if(curpstr == null){
101 curpstr = pstr.concat(argstr.substring(2));
102 }else{
103 curpstr = mergeSetting(curpstr, argstr);
104 }
105 npflag = true;
106 } else if (argstr.charAt(1) == 't') {
107 if(argstr.length() < 4 && argstr.charAt(2) == ' '){
108 System.out.printf("%s\n", curtstr);
109 return 1;
110 }
111 if(argstr.length() < 6 && argstr.charAt(3) == '?'){
112 System.out.printf( "%s\n", "What kind of the version is the binary target, such as DEBUG, RELEASE" );
113 return 2;
114 }
115 if(argstr.length() < 6 && argstr.charAt(3) == '0'){
116 curtstr = tstr;
117 ntflag = true;
118 continue;
119 }
120 if(curtstr == null){
121 curtstr = tstr.concat(argstr.substring(2));
122 }else{
123 curtstr = mergeSetting(curtstr, argstr);
124 }
125 ntflag = true;
126 } else if (argstr.charAt(1) == 'a') {
127 if(argstr.length() < 4 && argstr.charAt(2) == ' '){
128 System.out.printf("%s\n", curastr);
129 return 1;
130 }
131 if(argstr.length() < 6 && argstr.charAt(3) == '?'){
132 System.out.printf( "%s\n", "What kind of architechure is the binary target, such as IA32, IA64, X64, EBC, or ARM" );
133 return 2;
134 }
135 if(argstr.length() < 6 && argstr.charAt(3) == '0'){
136 curastr = astr;
137 naflag = true;
138 continue;
139 }
140 if(curastr == null){
141 curastr = astr.concat(argstr.substring(2));
142 }else{
143 curastr = mergeSetting(curastr, argstr);
144 }
145 naflag = true;
146 } else if (argstr.charAt(1) == 'c') {
147 if(argstr.length() < 4 && argstr.charAt(2) == ' '){
148 System.out.printf("%s\n", curcstr);
149 return 1;
150 }
151 if(argstr.length() < 6 && argstr.charAt(3) == '?'){
152 System.out.printf( "%s\n", "Assign a txt file with the relative path to WORKSPACE, which specify the tools to use for the build and must be located in the path: WORKSPACE/Tools/Conf/" );
153 return 2;
154 }
155 if(argstr.length() < 6 && argstr.charAt(3) == '0'){
156 curcstr = cstr;
157 ncflag = true;
158 continue;
159 }
160 if(curcstr == null){
161 curcstr = pstr.concat(argstr.substring(2));
162 }else{
163 curcstr = mergeSetting(curcstr, argstr);
164 }
165 ncflag = true;
166 } else if (argstr.charAt(1) == 'n') {
167 if(argstr.length() < 4 && argstr.charAt(2) == ' '){
168 System.out.printf("%s\n", curnstr);
169 return 1;
170 }
171 if(argstr.length() < 6 && argstr.charAt(3) == '?'){
172 System.out.printf( "%s\n", "Specify the TagName, such as GCC, MSFT" );
173 return 2;
174 }
175 if(argstr.length() < 6 && argstr.charAt(3) == '0'){
176 curnstr = nstr;
177 nnflag = true;
178 continue;
179 }
180 if(curnstr == null){
181 curnstr = nstr.concat(argstr.substring(2));
182 }else{
183 curnstr = mergeSetting(curnstr, argstr);
184 }
185 nnflag = true;
186 } else if (argstr.charAt(1) == 'm') {
187 if(argstr.length() < 4 && argstr.charAt(2) == ' '){
188 System.out.printf("%s\n", curmstr);
189 return 1;
190 }
191 if(argstr.length() < 6 && argstr.charAt(3) == '?'){
192 System.out.printf( "%s\n", "The number of concurrent threads. Default is 2. Recommend to set this value to one more than the number of your compurter cores or CPUs." );
193 return 2;
194 }
195 mstr += argstr.substring(2);
196 curmstr = mstr;
197 nmflag = true;
198 if (argstr.charAt(3) == '0'){
199 mestr += " Disable";
200 } else {
201 mestr += " Enable";
202 }
203 curmestr = mestr;
204 nmeflag = true;
205 }
206
207 }
208 return 0;
209 }
210
211
212 public static String mergeSetting( String S1, String S2){
213
214 String[] S = S2.split(" ");
215
216 for(int i = 1; i < S.length; i++){
217 if(S1.contains(S[i]) == false){
218 S1 = S1.concat(" ").concat(S[i]);
219 }
220 }
221
222 return S1;
223 }
224
225 public static boolean outputCurSetting(){
226
227 System.out.printf( "%s\n", "The current setting is:" );
228 System.out.printf( "%s\n", curpstr );
229 System.out.printf( "%s\n", curtstr );
230 System.out.printf( "%s\n", curastr );
231 System.out.printf( "%s\n", curcstr );
232 System.out.printf( "%s\n", curnstr );
233 System.out.printf( "%s\n", curmstr );
234 System.out.printf( "%s\n", curmestr );
235
236 return true;
237 }
238
239 public static int length = 0;
240 public static String pstr = new String("ACTIVE_PLATFORM = ");
241 public static String tstr = new String("TARGET = ");
242 public static String astr = new String("TARGET_ARCH = ");
243 public static String cstr = new String("TOOL_CHAIN_CONF = ");
244 public static String nstr = new String("TOOL_CHAIN_TAG = ");
245 public static String mstr = new String("MAX_CONCURRENT_THREAD_NUMBER = ");
246 public static String mestr = new String("MULTIPLE_THREAD = ");
247
248 public static String curpstr = null;
249 public static String curtstr = null;
250 public static String curastr = null;
251 public static String curcstr = null;
252 public static String curnstr = null;
253 public static String curmstr = null;
254 public static String curmestr = null;
255
256 public static int plength = 0;
257 public static int tlength = 0;
258 public static int alength = 0;
259 public static int clength = 0;
260 public static int nlength = 0;
261 public static int mlength = 0;
262 public static int melength = 0;
263
264 public static boolean npflag = false;
265 public static boolean ntflag = false;
266 public static boolean naflag = false;
267 public static boolean ncflag = false;
268 public static boolean nnflag = false;
269 public static boolean nmflag = false;
270 public static boolean nmeflag = false;
271
272 }