1 package dolda.jsvc.j2ee;
5 public class PosixArgs {
6 private List<Arg> parsed;
8 public String arg = null;
10 private static class Arg {
14 private Arg(char ch, String arg) {
21 parsed = new ArrayList<Arg>();
24 public static PosixArgs getopt(String[] argv, int start, String desc) {
25 PosixArgs ret = new PosixArgs();
26 List<Character> fl = new ArrayList<Character>(), fla = new ArrayList<Character>();
27 List<String> rest = new ArrayList<String>();
28 for(int i = 0; i < desc.length();) {
29 char ch = desc.charAt(i++);
30 if((i < desc.length()) && (desc.charAt(i) == ':')) {
38 for(int i = start; i < argv.length;) {
39 String arg = argv[i++];
40 if(acc && arg.equals("--")) {
42 } if(acc && (arg.charAt(0) == '-')) {
43 for(int o = 1; o < arg.length();) {
44 char ch = arg.charAt(o++);
46 ret.parsed.add(new Arg(ch, null));
47 } else if(fla.contains(ch)) {
48 if(o < arg.length()) {
49 ret.parsed.add(new Arg(ch, arg.substring(o)));
51 } else if(i < argv.length) {
52 ret.parsed.add(new Arg(ch, argv[i++]));
55 System.err.println("option requires an argument -- '" + ch + "'");
59 System.err.println("invalid option -- '" + ch + "'");
67 ret.rest = rest.toArray(new String[0]);
71 public static PosixArgs getopt(String[] argv, String desc) {
72 return(getopt(argv, 0, desc));
75 public Iterable<Character> parsed() {
76 return(new Iterable<Character>() {
77 public Iterator<Character> iterator() {
78 return(new Iterator<Character>() {
81 public boolean hasNext() {
82 return(i < parsed.size());
85 public Character next() {
86 if(i >= parsed.size())
87 throw(new NoSuchElementException());
88 Arg a = parsed.get(i++);
93 public void remove() {
94 throw(new UnsupportedOperationException());