3 FROM DynamicStrings IMPORT String, InitString, KillString ;
4 FROM StringConvert IMPORT stoc ;
5 FROM StrIO IMPORT WriteString, WriteLn ;
6 FROM StdIO IMPORT Write ;
7 FROM ASCII IMPORT nul ;
8 FROM GetOpt IMPORT GetOpt ;
9 FROM libc IMPORT printf, exit ;
25 programName = "testgetopt" ;
32 PROCEDURE help (code: INTEGER) ;
34 printf ("Usage %s [-a minroomsize] [-b maxroomsize] [-c mincorridorlength] [-d maxcorridorlength] [-e totalcorridorlength] [-h] [-o outputfile] [-s seed] [-x maxx] [-y maxy]\n", programName) ;
35 printf (" -a minroomsize (default is %d)\n", MinRoomLength) ;
36 printf (" -b maxroomsize (default is %d)\n", MaxRoomLength) ;
37 printf (" -c mincorridorsize (default is %d)\n", MinCorridorLength) ;
38 printf (" -d maxcorridorsize (default is %d)\n", MaxCorridorLength) ;
39 printf (" -e totalcorridorlength (default is %d)\n", TotalCorridorLength) ;
40 printf (" -o outputfile (default is stdout)\n") ;
41 printf (" -s seed (default is %d)\n", Seed) ;
42 printf (" -x minx for whole map (default is %d)\n", MaxX) ;
43 printf (" -y maxy for whole map (default is %d)\n", MaxY) ;
52 PROCEDURE HandleOptions ;
61 l := InitString (':a:b:c:d:e:o:s:hx:y:') ;
64 ch := GetOpt (UnixArgs.GetArgC (), UnixArgs.GetArgV (), l,
65 arg, optind, opterr, optopt) ;
69 'a': MinRoomLength := stoc (arg) |
70 'b': MaxRoomLength := stoc (arg) |
71 'c': MinCorridorLength := stoc (arg) |
72 'd': MaxCorridorLength := stoc (arg) |
73 'e': TotalCorridorLength := stoc (arg) |
76 's': Seed := stoc (arg) |
77 'x': MaxX := stoc (arg) |
78 'y': MaxY := stoc (arg) |
79 '?': printf ("illegal option\n") ; help (1)
82 WriteString ("unrecognised option '-") ; Write (ch) ; WriteString ('"') ; WriteLn ;
85 arg := KillString (arg) ;
86 ch := GetOpt (UnixArgs.GetArgC (), UnixArgs.GetArgV (), l,
87 arg, optind, opterr, optopt)
95 MinCorridorLength := 10 ;
96 MaxCorridorLength := 15 ;
97 TotalCorridorLength := 30 ;