Ataquarium - Environment-Variablen

Staubtrocken geht es diesmal im Ataquarium zu: wir widmen uns den Environment-Variablen.

Aus der Welt der Atari-Open-Source-Programme gibt es neues, denn nach einer etwas längeren Pause sind neue "Waisen" auf TOPP [1] angekommen. Highlight sind dabei wohl die Programme von Hybrid Arts, auch wenn noch einige Klippen umschifft werden müssen. So wird z.B. in Ludwig Inline-Assembler, zum Überprüfen des Kopierschutzes, verwendet. Für die Allgemeinheit wohl weniger interessant sind die beiden Programme "Alert Help" (Erstellen von Alert-Boxen) und "Gleichungsberechnung". Beide Programme liegen als Userwork.lst vor, so das schon faceVALUE benötigt wird, um eine lauffähige GFA-Datei zu erzeugen.

An dieser Stelle weise ich übrigens noch einmal daraufhin, das auf meiner Homepage [2] - ganz unabhängig von TOPP -, die Sourcen einer ganzen Reihe von faceVALUE-Programmen zum Download bereitliegen: Nervbox, Milanopoly, Caveman Translator, Coffee, Dr. Who Quiz, Win98, Lotto und Roman.

Neues gibt es auch von der "NewSDK"-CD [3]: diese liegt mittlerweile in der März-Ausgabe vor und bessert insbesondere bei den Quellcodes nach.

Environments

Die "Umweltvariablen" sind schon eine praktische Sache: immerhin können damit Programmpfade festgehalten werden. Viele Programme bieten z.B. bereits eine Schnittstelle zum Internet-Browser an. Ein Klick öffnet dann eine Web-Seite mit weiteren Informationen. Auf dem Atari haben sich zu diesem Zweck eine Vielzahl von Verfahrensweisen entwickelt, die auch auf anderen Systemen finden lassen.

Zuerst sind einmal die Betriebssystemvoraussetzungen zu klären. Zwar werden Environment-Variablen auch von einem gewöhnlichen SingleTOS unterstützt, jedoch dort nur von beschränkten Nutzen, da die Bedeutung von Accessories schwindet. Natürlich kann eine gerade laufende Anwendung eine weitere als Child-Prozeß starten, muß danach aber seine Fenster wieder restaurieren. Eine Kommunikation zwischen Parent und Child ist zudem nicht möglich.

Aus diesem Grund ist ein Multitasking-Betriebssystem ein "Muß", ob es sich dabei um MiNT oder MagiC handelt, ist dabei egal.

In der magx.inf steht z.B.:

#_ENV BROWSER=D:\adamas\adamas.prg

MiNT verwendet in der mint.cnf hingegen eine andere Schreibweise:

setenv BROWSER D:\adamas\adamas.prg

Zur Abfrage der Environment-Variable existiert schon seit System-Urzeiten die AES-Funktion "shel_envrn()". Auch wenn die hier vorgestellte Routine in GFA-Basic und C geschrieben sind, lassen sich diese sehr einfach in andere Sprachen umsetzen. Um den Wert einer Environment-Variable herauszufinden, wird nach dem erfolgreichen Aufruf von shel_envrn() ein evtl. vorhandenes "="-Zeichen herausgefiltert.

Ein so gefundenes Programm kann dann mit shel_write() nachgestartet werden.

Andere Methoden

Um ein passendes Programm zu finden, gibt es mehrere Möglichkeiten. Sind einem die Programme bekannt, kann erst einmal mit appl_find() geprüft werden, ob sich das Programm bereits im Speicher herumtreibt. Einige Utilities gelten schon als Standard, so das sich kaum noch ein Programm die Mühe macht, irgendwelche Environment-Variablen für OLGA oder BubbleGEM abzufragen. Ist das Programm gefunden, wird mit VA_START oder per GEMScript die Datei übermittelt. Ein Beispiel ist der HomePage Penguin, der in der Version 3.05 drei Browser kennt: CAB, Adamas und WenSuite. Nach allen drei wird gesucht, durch die Angabe eines "Lieblings-Browsers" wird festgelegt, welcher Browser nachgestartet werden soll. Das hier nicht einfach die Environment-Variable "BROWSER" abgefragt wird, liegt in der Natur des Programms: ein Atari-Web-Designer möchte i.d.R. seine Seiten auch auf allen Atari-Browsern testen. Das WenSuite auf Nachrichten externer Programme nicht reagiert, ist allerdings ärgerlich.

Die zweite Möglichkeit ist OLGA. Über die OLGA_START-Nachricht kann mittels einer der drei OLS-Konstanten ein bei OLGA registriertes Programm gestartet werden:

Variablen setzen

Wer in Erwägung zieht, das Environment-Variablen vielleicht doch eine ganz nützliche Sache seien und darüber nachdenkt, das eigene Programm dort zu verewigen, der sollte sich GEMSetup anschauen. Im Gegensatz zu so einigen anderen Kandidaten in GSU komfortabel, läßt die Farben intakt und unterstützt nebenbei das Setzen von Environment-Variablen in der magx.inf und mint.cnf. Natürlich könnte man dies dem Anwender aufbürden, aber erstens würde dies kaum einer richtig machen und zweitens ist dies für den Normal-Anwender unzumutbar.

Wie das gemacht wird, zeigt z.B. die GSU beiliegende setup.xml:

	<FILES type=ENV path="$DEST\SETUP.APP">
<TEXT>Setzt die Env.-Variable GEMSETUP</TEXT>
</FILES>

Davon abgesehen bietet GSU noch eine ganze Reihe von Mechanismen, die sicherstellen, dass das eigene Programm von anderen auch wirklich gefunden werden kann.

/*
* environ.c
*
* Fragt das Environment ab
*
*/
#include <aes.h>
#include <string.h>
#include <stdio.h>
void main()
{
char *env_wert;
char *temp_name;
int i;
shel_envrn(&temp_name,"TEMP");
for (i = 1; i < strlen(temp_name);i++)
{
if((temp_name[i] != 32)&&(temp_name[i] != 61))
break;
}
env_wert = (char *)&temp_name[i];
puts(env_wert); }

Listing 1: Environment-Variablen auslesen mit C

FUNCTION environment$(such$)
a=SHEL_ENVRN(a%,UPPER$(such$))
IF a%>0
a$=CHAR{a%}
IF INSTR(a$,"=")>0
a=INSTR(a$,"=")
env$=RIGHT$(a$,LEN(a$)-a)
ELSE
env$=a$
ENDIF
RETURN env$
ELSE
RETURN ""
ENDIF
ENDFUNC

Listing 2: Environment-Variablen auslesen mit GFA-Basic


Mia Jaap
Aus: ST-Computer 04 / 2002, Seite 24

Links

Copyright-Bestimmungen: siehe Über diese Seite