MODULE UnixArgs; IMPORT Read, Write, Conclusions, Args := UnixArguments; VAR command : ARRAY 256 OF CHAR; flags : CHAR; BEGIN (* * Ein Programmaufruf beginnt mit dem Kommandonamen gefolgt von Argumenten. * Argumente mit Praefix lassen sich in Flags und Optionen unterteilen. Ein * Flag kann mit einem Schalter verglichen werden, der an oder aus ist. Eine * Option kann mit einem Schalter, der mehrere Stufen besitzt, verglichen * werden. Flags und Optionen bezeichnen wir im folgenden als UNIXARGUMENTE! * (Bemerkung: Ein Unixargument kann selbst wieder eigene Argumente besitzen)! * * Ein Flag beginnt mit dem Praefix -, eine Option hat als Praefix - oder +. * Flags und Optionen mit demselben Praefix koennen zu einem Unixargument * zusammengefasst werden. * * BEISPIEL: Das sort Kommando von Unix (sortiert eine Datei zeilenweise) * * Der Befehl zeigt uns an, wie das sort Kommando funktioniert: * * SORT [OPTION]... [FILE]... * ... * +POS1 [-POS2] ... * -b ... * -c ... * -o File ... * ... * * Hierbei sind [OPTION] und [FILE] Platzhalter fuer Argumente des sort * Kommandos. [OPTION] ist ein Platzhalter fuer die Unixargumente +POS1, * -b, -c, -o usw., wobei +POS1 eine Option, -b z.B. ein Flag ist! * -o File ist ebenfalls eine Option, da hier eine beliebige Datei * angegeben werden kann, in welche die Ausgabe umgeleitet wird. * * Beispiele: * (UnixArgs.om wird zeilenweise sortiert ausgegeben). * (Ausgabe wird in die Datei Erg.txt umgeleitet). * * ACHTUNG: Bei Eingabe der Befehle auf der Kommandozeile die Klammern < > weglassen! *) Write.Ln; Args.Init("-..."); (* 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; *) Write.Ln; Args.GetCommandName(command); Write.String(command); Write.Ln; WHILE Args.GetFlag(flags) DO Write.Ln; Write.Char(flags); END; Write.Ln; Write.Ln; END UnixArgs.