1Arg: adt 2{ 3 argv: list of string; 4 c: int; 5 opts: string; 6 7 init: fn(argv: list of string): ref Arg; 8 opt: fn(arg: self ref Arg): int; 9 arg: fn(arg: self ref Arg): string; 10}; 11 12Arg.init(argv: list of string): ref Arg 13{ 14 if(argv != nil) 15 argv = tl argv; 16 return ref Arg(argv, 0, nil); 17} 18 19Arg.opt(arg: self ref Arg): int 20{ 21 if(arg.opts != ""){ 22 arg.c = arg.opts[0]; 23 arg.opts = arg.opts[1:]; 24 return arg.c; 25 } 26 if(arg.argv == nil) 27 return arg.c = 0; 28 arg.opts = hd arg.argv; 29 if(len arg.opts < 2 || arg.opts[0] != '-') 30 return arg.c = 0; 31 arg.argv = tl arg.argv; 32 if(arg.opts == "--") 33 return arg.c = 0; 34 arg.c = arg.opts[1]; 35 arg.opts = arg.opts[2:]; 36 return arg.c; 37} 38 39Arg.arg(arg: self ref Arg): string 40{ 41 s := arg.opts; 42 arg.opts = ""; 43 if(s != "") 44 return s; 45 if(arg.argv == nil) 46 return ""; 47 s = hd arg.argv; 48 arg.argv = tl arg.argv; 49 return s; 50} 51