public static void main(String[] ignore) {
        String opts;
        String[] args;

        pl("--------- Testing short options");
        opts = "ab:c::";
        pl("shortopts = '" + opts + "'");
        args = tokenize("-aabarg1 -b arg2 -carg3 -q -c one two");
        // Results should be
        //    option a(null)
        //    option a(null)
        //    option b(arg1)
        //    option b(arg2)
        //    option c(arg3)
        //    GetOpt: illegal option -- q
        //    option q(null)
        //    option c(null)
        //    'one'
        //    'two'
            
        GetOpt opt = new GetOpt("GetOpt", args, opts);
        int c;
        while ((c = opt.nextOpt()) != -1) {
            pl("option " + (char)(c=='?' ? opt.optopt : c)
                + "(" + opt.optarg + ")");
        }
        pl("non-option args:");
        for (int i=opt.optind; i<args.length; i++) {
            pl("'" + args[i] + "'");
        }


        pl("--------- Testing long options");
        pl("shortopts = '" + opts + "'");
        LongOption[] lopts = new LongOption[] {
            new LongOption("argless", NO_ARG, 'x'),
            new LongOption("hasarg", REQ_ARG, 'y'),
            new LongOption("arg", OPT_ARG, 'z')
        };
        pl("longopts =");
        for (int i=0; i<lopts.length; i++) {
            pl("   " + lopts[i]);
        }
        args = tokenize("--argless --hasarg=arg1 --hasarg arg2 --arg"
            + " --arg=arg3 --a --foobar --argless=bad one two");
        // Results should be
        //    bar' '--argless=bad' 'one' 'two'
        //    option x[argless](null)
        //    option y[hasarg](arg1)
        //    option y[hasarg](arg2)
        //    option z[arg](null)
        //    option z[arg](arg3)
        //    GetOpt: option `a' is ambiguous
        //    option ?[arg](null)
        //    GetOpt: unrecognized option `--foobar'
        //    option ?[arg](null)
        //    GetOpt: option `--argless' doesn't allow an argument
        //    option ?[arg](null)
        //    'one'
        //    'two'
        opt = new GetOpt("GetOpt", args, opts, lopts);
        while ((c = opt.nextOpt()) != -1) {
            pl("option " + (char)c
                + "[" + lopts[opt.longind].name + "]"
                + "(" + opt.optarg + ")");
        }
        pl("non-option args:");
        for (int i=opt.optind; i<args.length; i++) {
            pl("'" + args[i] + "'");
        }
    } // main