FUNKTION:
int GetOpt(string *cmdline, string opts, string cmd)
IMPLEMENTIERT:
/std/shells/filesys/filesys.c
ARGUMENTE:
cmdline: Rueckgabewert von glob(L)
opts: Info ueber die erwarteten Schalter
cmd: Name des Kommandos (oder Null)
BESCHREIBUNG:
Mit dieser Funktion kann man die bei einem Kommando angegebenen
Schalter sehr leicht bestimmen. Nachdem glob() die Vorarbeit
geleistet hat, liefert GetOpt() einen Integerwert zurueck, bei
dem jedes Bit einem moeglichen Schalter entspricht. Wurde er
angegeben (auch mehrfach), so ist dessen Bit gesetzt.
Welche Schalter angegeben werden duerfen bzw welches Bit fuer
sie zustaendig sein soll, ist mit 'opts' spezifiziert. Dies ist
einfach ein String aus den erlaubten Schalterbuchstaben in
der Art "lacp". Hier sind die Schalter -l -a -c -p (und deren
Kombinationen, zB "-la" "-l -a") erlaubt. Dabei ist 'l' in
Bit 0, 'a' in Bit 1, 'c' in Bit 2 und 'p' in Bit 3 des
Rueckgabewertes.
Wenn 'cmd' angegeben ist und in der 'cmdline' ein Schalter
benutzt wurde, der nicht in 'opts' auftaucht, so wird
eine Fehlermeldung an TP ausgegeben in der Art:
cmd: illegal flag 'x'
Mit Doppelminus beginnende Schalter (typischerweise werden diese
fuer Langnamen-Schalter verwendet, also --help) werden hier
ignoriert.
Die 'cmdline' kann auch als Referenz uebergeben werden. In diesem
Fall werden aus dem Array alle als Schalter erkannten Textstuecke
entfernt. Da man deren Information nun als Integerflags hat
ist dies auch das, was man wohl meistens haben moechte.
Siehe hierzu das 2. Beispiel und references(LPC).
RÜCKGABEWERT:
Ein Integer, bei dem diejenigen Bits gesetzt sind, die zu den
in dem Kommando spezifizierten Schalter gehoeren. Wenn ein
unbekannter Schalter angegeben wurde, wird -1 zurueckgegeben.
BEISPIEL:
string* cmdline;
int flags;
cmdline = glob("-ds \"help \\\"blah*\"", 1);
flags = GetOpt(cmdline, "adgfs", 0);
flags ist nun 18, da Bit 1 (Wertigkeit 2) fuer das 'd' und
Bit 8 (Wertigkeit 16) fuer das 's' gesetzt wurden.
Hier nochmal dasselbe, allerdings ist in dem Array cmdline
jedes Element entfernt, welches Flags enthaelt, also in
diesem Fall das "-ds".
cmdline = glob("-ds \"help \\\"blah*\"", 1);
flags = GetOpt(&cmdline, "adgfs", 0);
SIEHE AUCH:
glob(L), references(LPC)
|