blob: eec533aa6a500d310b3ab6973e3b1fea49da7695 [file]
MODULE testgetopt ;
FROM DynamicStrings IMPORT String, InitString, KillString ;
FROM StringConvert IMPORT stoc ;
FROM StrIO IMPORT WriteString, WriteLn ;
FROM StdIO IMPORT Write ;
FROM ASCII IMPORT nul ;
FROM GetOpt IMPORT GetOpt ;
FROM libc IMPORT printf, exit ;
IMPORT UnixArgs ;
VAR
MinRoomLength,
MaxRoomLength,
MinCorridorLength,
MaxCorridorLength,
TotalCorridorLength,
Seed,
MaxX,
MaxY : INTEGER ;
CONST
programName = "testgetopt" ;
(*
help -
*)
PROCEDURE help (code: INTEGER) ;
BEGIN
printf ("Usage %s [-a minroomsize] [-b maxroomsize] [-c mincorridorlength] [-d maxcorridorlength] [-e totalcorridorlength] [-h] [-o outputfile] [-s seed] [-x maxx] [-y maxy]\n", programName) ;
printf (" -a minroomsize (default is %d)\n", MinRoomLength) ;
printf (" -b maxroomsize (default is %d)\n", MaxRoomLength) ;
printf (" -c mincorridorsize (default is %d)\n", MinCorridorLength) ;
printf (" -d maxcorridorsize (default is %d)\n", MaxCorridorLength) ;
printf (" -e totalcorridorlength (default is %d)\n", TotalCorridorLength) ;
printf (" -o outputfile (default is stdout)\n") ;
printf (" -s seed (default is %d)\n", Seed) ;
printf (" -x minx for whole map (default is %d)\n", MaxX) ;
printf (" -y maxy for whole map (default is %d)\n", MaxY) ;
exit (code)
END help ;
(*
HandleOptions -
*)
PROCEDURE HandleOptions ;
VAR
optind,
opterr,
optopt: INTEGER ;
arg,
s, l : String ;
ch : CHAR ;
BEGIN
l := InitString (':a:b:c:d:e:o:s:hx:y:') ;
s := NIL ;
arg := NIL ;
ch := GetOpt (UnixArgs.GetArgC (), UnixArgs.GetArgV (), l,
arg, optind, opterr, optopt) ;
WHILE ch # nul DO
CASE ch OF
'a': MinRoomLength := stoc (arg) |
'b': MaxRoomLength := stoc (arg) |
'c': MinCorridorLength := stoc (arg) |
'd': MaxCorridorLength := stoc (arg) |
'e': TotalCorridorLength := stoc (arg) |
'h': help (0) |
'o': |
's': Seed := stoc (arg) |
'x': MaxX := stoc (arg) |
'y': MaxY := stoc (arg) |
'?': printf ("illegal option\n") ; help (1)
ELSE
WriteString ("unrecognised option '-") ; Write (ch) ; WriteString ('"') ; WriteLn ;
exit (1)
END ;
arg := KillString (arg) ;
ch := GetOpt (UnixArgs.GetArgC (), UnixArgs.GetArgV (), l,
arg, optind, opterr, optopt)
END
END HandleOptions ;
BEGIN
MinRoomLength := 5 ;
MaxRoomLength := 10 ;
MinCorridorLength := 10 ;
MaxCorridorLength := 15 ;
TotalCorridorLength := 30 ;
Seed := 1 ;
MaxX := 30 ;
MaxY := 30 ;
HandleOptions
END testgetopt.