00001 package gov.nasa.arc.ase.jpf;
00002
00003 import gov.nasa.arc.ase.util.*;
00004 import java.util.*;
00005 import java.net.*;
00006
00007 public class JPFOptions extends Options {
00008 public boolean help = false;
00009 public boolean version = false;
00010
00011 public boolean debug = false;
00012 public boolean verbose = false;
00013 public boolean quiet = false;
00014
00015 public Debug debugs = null;
00016
00017 public boolean bandera = false;
00018 public boolean po_reduction = false;
00019 public boolean notify = false;
00020
00021 public boolean verify = true;
00022 public boolean assertions = false;
00023
00024
00025
00026
00027
00028
00029 public boolean real_counterexample = false;
00030 public boolean path_simulation = false;
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 public boolean interactive = false;
00058 public int report_period = 10;
00059
00060 public boolean atomic_lines = true;
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087 public JPFOptions(Class m) {
00088 super(m, "class", false);
00089 addParser("[Ljava.lang.String;", "parseStringArray");
00090 addParser("gov.nasa.arc.ase.util.Debug", "parseDebug");
00091 addPrinter("[Ljava.lang.String;", "printStringArray");
00092 addPrinter("gov.nasa.arc.ase.util.Debug", "printDebug");
00093 }
00094 public String[] parse(String[] args) {
00095 String[] p = super.parse(args);
00096
00097 if(debug)
00098 Debug.setDebugLevel(Debug.DEBUG);
00099 else if(verbose)
00100 Debug.setDebugLevel(Debug.MESSAGE);
00101 else if(quiet)
00102 Debug.setDebugLevel(Debug.ERROR);
00103 else
00104 Debug.setDebugLevel(Debug.WARNING);
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144 return p;
00145 }
00146 public Object parseDebug(String s) {
00147 if(s == null) throw new IllegalArgumentException();
00148
00149 StringTokenizer ps = new StringTokenizer(s, ",");
00150
00151 while(ps.hasMoreTokens()) {
00152 String p = ps.nextToken();
00153
00154 StringTokenizer st = new StringTokenizer(p, "=");
00155 if(st.countTokens() == 1) {
00156 String kind = st.nextToken();
00157 int k;
00158
00159 if((k = Debug.mapKind(kind)) == -1) {
00160 Debug.println(Debug.ERROR, "invalid debug kind -- " + kind);
00161 return null;
00162 }
00163
00164 Debug.setDebugLevel(Debug.DEBUG, k);
00165 } else if(st.countTokens() == 2) {
00166 String kind = st.nextToken();
00167 String level = st.nextToken();
00168 int k, l;
00169
00170 if((k = Debug.mapKind(kind)) == -1) {
00171 Debug.println(Debug.ERROR, "invalid debug kind -- " + kind);
00172 return null;
00173 }
00174 if((l = Debug.mapLevel(level)) == -1) {
00175 Debug.println(Debug.ERROR, "invalid debug level -- " + level);
00176 return null;
00177 }
00178
00179 Debug.setDebugLevel(l, k);
00180 } else {
00181 Debug.println(Debug.ERROR, "invalid syntax -- -debugs " + s);
00182 return null;
00183 }
00184 }
00185
00186 return null;
00187 }
00188 public Object parseStringArray(String s) {
00189 if(s == null) throw new IllegalArgumentException();
00190 StringTokenizer st = new StringTokenizer(s, ",");
00191 int l = st.countTokens();
00192 String[] strs = new String[l];
00193
00194 for(int i = 0; i < l; i++)
00195 strs[i] = st.nextToken();
00196
00197 return strs;
00198 }
00199 public String printDebug(Object o) {
00200 return Debug.status();
00201 }
00202 public String printStringArray(Object o) {
00203 if(o == null) return "null";
00204
00205 String[] s = (String[])o;
00206 StringBuffer sb = new StringBuffer("[");
00207
00208 for(int i = 0; i < s.length; i++) {
00209 if(i != 0) sb.append(",");
00210 sb.append(" ");
00211 sb.append(s[i]);
00212 }
00213 if(s.length != 0) sb.append(" ");
00214 sb.append("]");
00215
00216 return sb.toString();
00217 }
00218 }