MODULE UnixArgs; IMPORT Read, Write, Conclusions, Args := UnixArguments; VAR command : ARRAY 256 OF CHAR; flag : CHAR; name: ARRAY 256 OF CHAR; BEGIN Write.Ln; Args.Init(" name -ab"); (* Mit Args.Usage kann der Text der Init Prozedur ausgegeben * werden. Allerdings wird bei Aufruf der Prozedur Usage * das Programm beendet. Wann ist dann der Einsatz von Usage * sinnvoll? Wenn z.B. das Programm nur dann arbeiten soll, * falls Argumente angegeben sind. Sind keine Argumente * vorhanden dann eben Aufruf von Usage: Das Programm terminiert * in diesem Fall sofort, gibt aber vorher noch den Text der Init * Prozedur aus! *) (* Args.Usage; *) IF ~Args.GetArg(name) THEN (* Ist Argument vorhanden? *) Write.Ln; Args.Usage; ELSE Write.Ln; Write.String(name); END; (* In dieser IF Abfrage wird mit GetFlag bereits das erste Flag "weggelesen". Sind Flags vorhanden (ELSE Fall), so muss das Flag quasi wieder hergeholt werden, da ich in meiner While Schleife alle Flags bearbeiten moechte. Diese wiederholen geschieht mit der Prozedur Args.UngetArg! *) IF ~Args.GetFlag(flag) THEN (* Ist ein Flag vorhanden? *) Args.Usage; ELSE Args.UngetArg; END; WHILE Args.GetFlag(flag) DO CASE flag OF | "a", "A": Write.Ln; Write.Char(flag); | "b" : Write.Ln; Write.String("das war ein b"); ELSE Write.Ln; Write.String("ungueltig"); END; END; Write.Ln; Write.Ln; END UnixArgs.