AskEnv 2.5 23-Mar-93 ========== Wozu dient AskEnv? ------------------ Der einzige Befehl von AmigaDos zur Eingabe von Daten ist der ASK-Befehl. Seit der Veröffentlichung von OS2 ist ARexx ein Bestandteil des Betriebssystems. Dieser Sprache fehlen aber ebenfalls Befehle für die Kommunikation mit dem Benutzer, die über Zeile schreiben und lesen hinausgehen. Kein Wunder, denn die Sprache stammt von IBM-Grossrechnern mit Zeichenterminals. Mit AskEnv werden diese Eingabemöglichkeiten erweitert. AskEnv ermöglicht ARexx-Programmen, Shell-Scripts, Superbase DML-Programmen und allen anderen Sprachen, die ein externes Programm aufrufen und eine Datei einlesen können, einen einfachen Aufruf von System-, File- und frei definierbaren Requestern. AskEnv braucht mindestens OS 2.04. Aufruf: ------- Der Programmstart ist nur aus dem CLI sinnvoll (oder ARexx, Superbase...): AskEnv [EOL/S,F=FREQ/S,DEF/K,SBMODE/S,S=SREQ/K,BODY/K,NEG/K,POS/K,GADFILE/K] AskEnv ist pure, kann also resident geladen werden. Funktionen ========== Es gibt zwei Klassen von Funktionen in Askenv: einfache, bei denen sich der Aufwand für die Eingabe auf die Argumente in der Kommandozeile beschränkt. Komplexe Funktionen hat es nur eine: mit einem Konfigurations- File kann ein frei definierbarer Requester gebastelt werden. einfache Funktionen ------------------- Zeile lesen ----------- AskEnv [>datei] [EOL] Im Shell-Fenster wird eine Zeile von der Tastatur gelesen bis zum Zeilenende, der Text wird in die Standardausgabe geschrieben. Mit EOL kann bei allen einfachen Funktionen ein Zeilenende an den Text gehängt werden. (Mit dieser Funktion fing alles einmal an!) File-Requester -------------- AskEnv [>datei] FREQ Titel [DEF pfad] [DIR] [SBMODE] [EOL] ruft einen File-Requester mit "Titel" in der Titelzeile auf. Mit DEF kann ein Pfad zu einer Datei oder Verzeichnis vorgegeben werden. Mit DIR wird der Requester auf eine Verzeichnisauswahl beschränkt; Dateien werden dann nicht angezeigt. WARNUNG: Wenn der File Requester von SBPro aus gestartet wird, muss die Option SBMODE verwendet werden, sonst hängt der Requester. Dies ist ein Bug in SBPro: es mag es gar nicht, wenn man auf sein Fenster zugreift um den Screen zu bestimmen, auf dem es läuft. System-Requester ---------------- AskEnv SREQ Zeile1 [BODY Zeile2] POS posiKnopf [NEG negaKnopf] Wird der negative Text gewählt, wird ein Fehlercode WARN zurückgegeben. komplexe Requesterfunktionen ---------------------------- Mit "AskEnv gadfile " kann eine Beschreibung eines Requesters gelesen werden, ein unstrukturiertes ASCII-File mit Schlüsselwörtern. Die Elemente können beliebig auf Zeilen verteilt werden. Strings müssen auf einer Zeile liegen und mit " " einrahmt werden, wenn sie Leerzeichen enthalten. Mit ";" werden Kommentare eingeleitet. Schlüsselwörter müssen gross geschrieben werden. IMMEDIATE vs SELECT-Modus ------------------------- Askenv wählt sich einen von 2 Modi, abhängig von den definierten Gadgets. IMMEDIATE Requester verschwindet nach der ersten Berührung; die ID des Gadgets wird in die Variable VAR, die im Header genannt wird, geschrieben. Ist kein Name unter VAR angegeben, wird die Variable "AskEnv_Button" verwendet. Die ID des Buttons ist die Nummer in der Reihenfolge der Definitionen, beginnend mit 1. SELECT bleibt, bis ein END-, CANCEL- oder das Close-Gadget gewählt wird. Dann werden die Zustände aller Gadgets rausgeschrieben. In beiden Fällen bewirkt das Close-Gadget einen WARN-Error und nichts wird geschrieben. Variablenwerte sind also nicht definiert! Meistens bleiben sie auf den vorherigen Werten, die können aber durch andere Programme verändert worden sein! Der Modus wird automatisch ermittelt: Nur Buttons werden als "IMMEDIATE" behandelt. Wenn Nicht-Buttons dazukommen, wird auf "SELECT" geschaltet. Zu den Nicht-Buttons gehören auch Buttons mit File-Requester- oder Programmstart- Funktionen. Elemente mit Read-only werden dabei nicht beachtet. Konfigurations-File ------------------- Das File besteht aus einem Header und beliebig vielen Gadget-Definitionen. Im Header stehen die globalen Eigenschaften: WINDOW : dieses Schlüsselwort muss am Anfang des Files stehen. SIZE x y w h : durch Spaces getrennt; bin nicht verantwortlich für sinnvolle Koordinaten. Als Alternative: CENTER w h : Zentriert den Requester auf dem Bildschirm. NAME name : Fenstername, optional SCREEN screen : screen ist der Name eines Public-Screens, auf dem sich der Requester öffnen soll. Ist kein Public-Screen dieses Namens vorhanden, wird der Default Public Screen (meist die Workbench) verwendet. VAR name : Im Immediate-Modus, dh. wenn nur Buttons vorhanden sind, wird die Nummer des Buttons rausgeschrieben. Im Select-Modus wird ebenfalls die Nummer des gewählten Buttons hier reingeschrieben, dies aber nur, wenn das Schlüsselwort GLOBAL dabei steht! GLOBAL kann auch ohne Variablenname verwendet werden, es darf dann nur nicht vor dem abschliessenden "#" stehen. Wurde kein Name unter VAR angegeben, so wird in die Variable "AskEnv_Button" geschrieben. Achtung: ab Version 2.4 kann mit VAR keine Datei mit allen Variablen mehr erzeugt werden. Das war ein Ueberbleibsel aus frühen Tagen, für das wohl kaum mehr Bedarf besteht. Falls erwünscht, kann ich es ja wieder hinein- nehmen. Nach dem Header folgen die Gadget-Definitionen: Ein Gadget beginnt mit einem Schlüsselwort und endet mit " #" (wie die MountList). Zur Zeit werden folgende Gadget-Typen unterstützt: BUTTON in verschiedenen Funktionen CHECKBOX INTEGER nur zur Vollständigkeit NUMBER readOnly CYCLE STRING MX TEXT readOnly HIBOX hervorstehender Rahmen LOBOX vertiefter Rahmen Ausserdem können ein Button- und ein String-Gadget zu einem File-Requester- Aufruf kombiniert werden und über den Buttontyp Programme aufgerufen werden. Funktionen für alle Gadgets: ---------------------------- POSITION x y w h: obligatorisch für alle. Die minimale Höhe der Gadgets richtet sich nach der Höhe des Screenfonts. LABEL text : Gadgettext, voreingestellt IM Gadget, kann mit... PLACETEXT ort : noch gesetzt werden: ABOVE, BELOW, LEFT, RIGHT END : Dieses Gadgets bricht den Requester ab. Kann bei mehreren Gadgets eines Fensters verwendet werden. CANCEL : Abbruch des Requesters. Nichts wird geschrieben. GLOBAL var LOCAL var : in diese entweder lokale oder globale (ENV:) Variable wird der Wert dieses Gadgets geschrieben. Was genau geschrieben wird, ist vom Typ abhängig. ENTRY : Falls verwendet, MUSS es am Schluss einer Definition stehen. Danach folgen 1 bis n Einträge, abhängig vom Typ. Spezielles zu den Typen: ------------------------ BUTTON ------ Zurückgegeben wird im IMMEDIATE-Modus die Nummer des Buttons in der im Header definierten globalen Variable. Nur Buttons und in Reihenfolge der Definition abzählen!! Im SELECT-Modus wird die Nummer in die Variable "AskEnv_Button" geschrieben, aber nur von Buttons, die das Schlüsselwort GLOBAL zusammen mit einer Dummy- Variablen enthalten. Spezialfunktionen für BUTTONs: FREQ : Als nächstes Gadget muss eine String-Gadget-Definition folgen, in das ein voreingestellter Pfad mit ENTRY geschrieben werden kann. Die Wahl des Buttons aktiviert dann einen File-Requester, dessen Auswahl zurück ins String-Gadget geschrieben wird. DIR : Zusatzoption für Filerequester: der Requester wird auf eine Verzeichnisauswahl beschränkt; Dateien werden dann nicht angezeigt. Kann bei gewissen ASL-Ersatzrequestern versagen (z.B. MFR). SYNCRUN : Die Zeichenfolge, die diesem Schlüsselwort folgt, wird als Programm synchron gestartet. AskEnv schaltet sein Fenster solange ab, bis das externe Programm beendet worden ist. Enthält das Kommando Argumente oder Optionen, die mit Leerzeichen abgetrennt werden, muss der Befehl in Anführungszeichen stehen! Der Returncode des aufgerufenen Programms kann bei synchron gestarteten Programmen weiterverwendet werden: WARN limit : mit einer Zahl limit kann festgelegt werden, bis zu welchen Fehlerlevel ohne eine Benachrichtigung des Benutzers fort- gefahren werden kann. Ist der Returncode grösser als limit, öffnet sich ein Requester mit der Option zum Programm- abbruch. AskEnv gibt darauf einen Returncode von 10 weiter. ASYNCRUN : Wie bei SYNCRUN, nur dass der AskEnv-Requester nach dem Absetzen des Kommandos wieder zur Eingabe bereit ist. Das asynchron gestartete Programm ist nun unabhängig von AskEnv. FILE filedef : Optionales Ausgabefile für das asynchron gestartete Program. Z.B. NIL:, RAM:Test oder ein CON-Fenster. Wird ein externes Programm (synchron oder asynchron) gestartet, werden zuerst die Werte aller Variablen rausgeschrieben. Das aufgestartete Programm kann somit bereits auf Eingabewerte zb. in Filerequester-Gadgets zugreifen. Diese Werte können sofort wieder verwendet werden: SYNCRUN und ASYNCRUN- Kommandos dürfen Variablen enthalten. Die Definition STRING ... LOCAL myDir ... BUTTON ... SYNCRUN "dir $myDir" versucht den Inhalt des Stringgadgets als Verzeichnis zu lesen. CHECKBOX -------- CHECKED : das Häkchen wird beim Start eingeschaltet. Als Funktionswert gibt das Checkbox-Gadget 0 zurück, wenn gewählt, sonst -1. INTEGER ------- Nach ENTRY kann eine Default-Zahl angegeben werden, die beim Aufruf im Integer-Gadget erscheint. Mit "MAXCHARS zahl" kann die maximale Zahl der Zeichen, die aufgenommen werden, verändert werden (default 20). NUMBER ------ Aehnlich INTEGER, aber Read-Only. Es wird nichts geschrieben. Mit NOBOX wird der Rahmen unterdrückt. STRING ------ Aehnlich INTEGER, auch mit der Einstellmöglichkeit MAXCHARS (default 80). TEXT ---- Analog zu INTEGER --> NUMBER CYCLE ----- Alle gewünschten Einträge nach ENTRY auflisten. Rausgeschrieben wird die Nummer des zuletzt selektierten Eintrags, beginnend bei 0. Zur Erinnerung: ENTRY immer an den Schluss einer Gadgetdefinition!!. MX -- Dieser Gadget-Typ wird wie ein oben erwähntes CYCLE-Gadget installiert und ausgewertet. Zusätzlich gibt es noch die Option SPACING n : Zusätzlicher Abstand zwischen den einzelnen Einträgen HIBOX, LOBOX ------------ ACHTUNG: kein Endzeichen #, nur die vier Parameter X, Y, Breite, Höhe: HIBOX 50 20 100 20 Tips und Tricks =============== TEXT-Typen werden normalerweise zentriert zur X-Koordinate ausgegeben. Soll eine Reihe von Texten linksbündig ohne Box angeordnet werden, kann dies mit einer Breitenangabe von 0 und der Option PLACETEXT RIGHT erreicht werden. Abspann ======= Im Vertriebsverzeichnis müssen enthalten sein: LACE (dir) About.req intro.req Offset.req Select.req Strings.req warning.req HIRES (dir) about.req intro.req Offset.req Select.req Strings.req Warning.req AskEnv AskEnv.doc AskEnv.dok Brief.rexx BriefHilfe.req Changes.doc Changes.dok dearc.req DeArc.rexx LiesMich Plotter Plotter.info PrefMan.rexx ReadMe Test noch zu tun: ------------ - AREXX Support Danke allen, die sich mit Tips und Tricks beteiligt haben. Ab V2.4 ist AskEnv mit MungWall und Enforcer gestestet, was keine grosse Hürde ist, da AskEnv mit M2Amiga Modula2 programmiert wurde. AskEnv wurde gestestet unter OS 2.04 und OS 2.1. Dieses Programm ist frei kopierbar. Das Verzeichnis muss vollständig weiter- gegeben werden. Die Aufnahme in PD-Serien ist erlaubt unter der Bedingung, dass eine Diskette für nicht mehr als 5 sFr/DM verkauft wird. Wenn die Diskette, mit der AskEnv erworben wurde, teurer war, bitte ich um einen Hinweis. Soll AskEnv auf Serien, die mit gedruckten Anleitungen vertrieben werden, veröffentlicht werden, darf dies nur nach Absprache mit dem Autor getan werden. Alle Rechte verbleiben beim Programmierer. Bugreports an: ============================================================================ Bengt Giger Schmiedgasse 48 CH-8640 Rapperswil Switzerland 055/27 98 79 Link-CH1 ++41 (0)61 681 63 60 Aminet: B.GIGER%LINK-CH1 44:8010/408.0 Z-Netz: B.GIGER@LINK-CH1 ============================================================================