8b818059d5a4dfaea33f173540ac5af15f4d367f
[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 continue;
98 }
99 curpstr = mergeSetting(curpstr, argstr);
100 } else if (argstr.charAt(1) == 't') {
101 if(argstr.length() < 4 && argstr.charAt(2) == ' '){
102 System.out.printf("%s\n", curtstr);
103 return 1;
104 }
105 if(argstr.length() < 6 && argstr.charAt(3) == '?'){
106 System.out.printf( "%s\n", "What kind of the version is the binary target, such as DEBUG, RELEASE" );
107 return 2;
108 }
109 if(argstr.length() < 6 && argstr.charAt(3) == '0'){
110 curtstr = tstr;
111 continue;
112 }
113 curtstr = mergeSetting(curtstr, argstr);
114 } else if (argstr.charAt(1) == 'a') {
115 if(argstr.length() < 4 && argstr.charAt(2) == ' '){
116 System.out.printf("%s\n", curastr);
117 return 1;
118 }
119 if(argstr.length() < 6 && argstr.charAt(3) == '?'){
120 System.out.printf( "%s\n", "What kind of architechure is the binary target, such as IA32, IA64, X64, EBC, or ARM" );
121 return 2;
122 }
123 if(argstr.length() < 6 && argstr.charAt(3) == '0'){
124 curastr = astr;
125 continue;
126 }
127 curastr = mergeSetting(curastr, argstr);
128 } else if (argstr.charAt(1) == 'c') {
129 if(argstr.length() < 4 && argstr.charAt(2) == ' '){
130 System.out.printf("%s\n", curcstr);
131 return 1;
132 }
133 if(argstr.length() < 6 && argstr.charAt(3) == '?'){
134 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/" );
135 return 2;
136 }
137 if(argstr.length() < 6 && argstr.charAt(3) == '0'){
138 curcstr = cstr;
139 continue;
140 }
141 curcstr = mergeSetting(curcstr, argstr);
142 } else if (argstr.charAt(1) == 'n') {
143 if(argstr.length() < 4 && argstr.charAt(2) == ' '){
144 System.out.printf("%s\n", curnstr);
145 return 1;
146 }
147 if(argstr.length() < 6 && argstr.charAt(3) == '?'){
148 System.out.printf( "%s\n", "Specify the TagName, such as GCC, MSFT" );
149 return 2;
150 }
151 if(argstr.length() < 6 && argstr.charAt(3) == '0'){
152 curnstr = nstr;
153 continue;
154 }
155 curnstr = mergeSetting(curnstr, argstr);
156 } else if (argstr.charAt(1) == 'm') {
157 if(argstr.length() < 4 && argstr.charAt(2) == ' '){
158 System.out.printf("%s\n", curmstr);
159 return 1;
160 }
161 if(argstr.length() < 6 && argstr.charAt(3) == '?'){
162 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." );
163 return 2;
164 }
165 mstr += argstr.substring(2);
166 curmstr = mstr;
167 if (argstr.charAt(3) == '0'){
168 mestr += " Disable";
169 } else {
170 mestr += " Enable";
171 }
172 curmestr = mestr;
173 }
174
175 }
176 return 0;
177 }
178
179
180 public static String mergeSetting( String S1, String S2){
181
182 String[] S = S2.split(" ");
183 if(S1 == null){
184 S1 = tstr.concat(S2.substring(2));
185 }else{
186 for(int i = 1; i < S.length; i++){
187 if( S1.contains(S[i]) == false ){
188 S1 = S1.concat(S[i]).concat(" ");
189 }
190 }
191 }
192
193 return S1;
194 }
195
196 public static boolean outputCurSetting(){
197
198 System.out.printf( "%s\n", "The current setting is:" );
199 System.out.printf( "%s\n", curpstr );
200 System.out.printf( "%s\n", curtstr );
201 System.out.printf( "%s\n", curastr );
202 System.out.printf( "%s\n", curcstr );
203 System.out.printf( "%s\n", curnstr );
204 System.out.printf( "%s\n", curmstr );
205 System.out.printf( "%s\n", curmestr );
206
207 return true;
208 }
209
210 public static int length = 0;
211 public static String pstr = new String("ACTIVE_PLATFORM = ");
212 public static String tstr = new String("TARGET = ");
213 public static String astr = new String("TARGET_ARCH = ");
214 public static String cstr = new String("TOOL_CHAIN_CONF = ");
215 public static String nstr = new String("TOOL_CHAIN_TAG = ");
216 public static String mstr = new String("MAX_CONCURRENT_THREAD_NUMBER = ");
217 public static String mestr = new String("MULTIPLE_THREAD = ");
218
219 public static String curpstr = null;
220 public static String curtstr = null;
221 public static String curastr = null;
222 public static String curcstr = null;
223 public static String curnstr = null;
224 public static String curmstr = null;
225 public static String curmestr = null;
226
227 public static int plength = 0;
228 public static int tlength = 0;
229 public static int alength = 0;
230 public static int clength = 0;
231 public static int nlength = 0;
232 public static int mlength = 0;
233 public static int melength = 0;
234
235 }