
	AskEnv 2.51                                           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 <file>" 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
============================================================================
