Simple_opts für Trios-Kommandozeilenprogramme
Verfasst: Di 21. Jul 2015, 21:52
Für den Eigenbedarf ist eine Bibliothek zum Parsen der Kommandozeile im Trios entstanden. Ich habe Perls Getopt::Std teilweise nachprogrammiert. Die Bibliothek verwendet reg-ios.paranext.
Die Kommandozeile besteht aus 3 Bereichen:
1. der Programmname - den bekommt paranext nie zu sehen
2. die Optionen
Die Bibliothek simple_opts bietet für den Betrieb 3 Funktionen an:
Weiterhin enthält simple_opts englische Texte zu den Fehlercodes und die Funktion last_errmsg, die den Text (Adresse im Hub-RAM) zum geworfenen Fehler liefert.
get_opts darf man max. 32 verschiedene Optionen übergeben, festgelegt in MAX_OPTS. Wenn im eigenen Programm der Speicher knapp wird, kann man:
Im Trios gelten 2 Einschränkungen:
Grüße vom U-Held
Die Kommandozeile besteht aus 3 Bereichen:
1. der Programmname - den bekommt paranext nie zu sehen
2. die Optionen
- beginnen UNIX-typisch mit "-"
- Reihenfolge ist nicht vorgegeben
- weiteres siehe unten
- Reihenfolge und Bedeutung werden vom Programm vorgegeben
- sollten sparsam verwendet werden, z.B. für "den" Dateinamen, den das Programm immer braucht
- boolesche Optionen: werden angegeben oder weggelassen, liefern 1 bzw. 0
- Zeichenkettenoptionrn: erwarten mit Leerzeichen getrennt eine Zeichenkette, die nicht mit "-" beginnt
Die Bibliothek simple_opts bietet für den Betrieb 3 Funktionen an:
- get_opts(opt_str): parst die Kommandozeile nach Vorgabe des opt_str. Der opt_str enthält alle zulässigen Optionen (je 1 Zeichen). Zeichenkettenoptionen wird ein ":" nachgestellt.
- opt(option): liefert den von Kommandozeile gelesenen Wert der Option. Das ist entweder die Hub-Adresse der Zeichenkette oder bei booleschen Optionen 1 für eine angegebene Option und sonst 0.
- paranext(para_addr): ruft im Prinzip reg-ios.paranext auf, behandelt aber den Sonderfall, dass der nächste Parameter von get_opts schon gelesen wurde.
Weiterhin enthält simple_opts englische Texte zu den Fehlercodes und die Funktion last_errmsg, die den Text (Adresse im Hub-RAM) zum geworfenen Fehler liefert.
get_opts darf man max. 32 verschiedene Optionen übergeben, festgelegt in MAX_OPTS. Wenn im eigenen Programm der Speicher knapp wird, kann man:
- MAX_OPTS auf die Anzahl Optionen reduzieren, die mit get_opts übergeben wird und
- die Fehlertexte und zugehörigen Funktionen auskommentieren.
Im Trios gelten 2 Einschränkungen:
- 1. Eine Kommandozeile darf außer dem Programmnamen selbst noch 63 Zeichen + abschließendes 0-Byte lang sein. Längere Kommandozeilen führen zu Fehlern oder zum Absturz, denn schon reg-ios.paraset begrenzt die Länge nicht.
- 2. Es gibt keine Möglichkeit, Leerzeichen in einem Parameter zu übergeben. So etwas wie ein Escape-Zeichen ("\") oder Anführungszeichen kennt reg-ios.paranext nicht. Dort müsste es aber eingebaut werden.
Grüße vom U-Held