Wir richten uns ein

E-Books


MS-DOS Kurs


9. Die Programmierung

Um gewisse Rahmenbedingungen für Programme festschreiben zu können, gehört zu jedem Programm ein kleiner Speicherbereich, in dem globale Parameter eingetragen sind. Er wird Programmumgebung (englisch Enviroment) genannt. Auch wenn noch kein Programm gestartet wurde, so ist zumindest der Befehlsinterpreter COMMAND.COM aktiv, und selbstverständlich besitzt auch er eine Programmumgebung. Einen Blick in das Enviroment gestattet der SET-Befehl.
Schreiben Sie einfach
set
und es wird die aktuelle Programmumgebung angezeigt, die etwa so aussehen könnte:
COMSPEC=:C:\COMMAND.COM
PATH=C:\DOS;C:\TOOLS
PROMPT=$p$g

Diese drei Befehle sind auch die einzigen, die ohne den SET-Befehl in die Programmumgebung eingetragen werden. Vielleicht steht auch noch etwas mehr drin, je nachdem, was Sie - wahrscheinlich in der AUTOEXEC.BAT - eingestellt haben. Sind vom Nutzer keine Eintragungen vorgenommen worden, so schreibt DOS zumindest diese beiden Zeilen hinein:
PATH=
COMSPEC=C:\COMMAND.COM

Der Pfad ist also leer und als Befehlsinterpreter wird COMMAND.COM aus dem Hauptverzeichnis des Bootlaufwerks geholt. Es kann durchaus sinnvoll sein, diese Einstellung zu ändern, vor allem, wenn nicht von der Festplatte gebootet wurde. Der Kommandointerpreter COMMAND.COM besteht aus zwei Teilen, einem stets im Speicher verbleibenden (residenten) Teil und einem sogenannten transidenten Teil, der von anderen Programmen überschrieben werden kann, da er während der Abarbeitung anderer Programme benötigt wird. So kann Speicherplatz gespart werden. Nach dem Beenden eines Programms muß DOS stets diesen Teil des Kommandointerpreters nachladen, und zwar vom Startlaufwerk. Wurde von A: gestartet, so ist ein oftmaliger Diskettenwechsel nötig. Mit COMSPEC kann deshalb eingestellt werden, wo nach COMMAND.COM gesucht werden soll. Günstig ist es, die Festplatte oder aber eine RAM-Diskette anzugeben. Die Verwendung einer RAM-Disk bringt außerdem Geschwindigkeitsvorteile und kann deshalb auch empfohlen werden, wenn von der Platte gebootet wurde.
Dazu ist in der AUTOEXEC.BAT der Kommandointerpreter auf die RAM-Disk zu kopieren und COMSPEC einzustellen, z.Bsp.
copy command.com e:
set comspec=e:\command.com

Zusätzlich zu den Systemvariablen kann der Nutzer beliebige eigene Variablen belegen; wiederum mit dem SET-Befehl, beispielsweise
set tag=montag oder
set name=pit oder
set codewort=roger
Der Variablen tag wird die Zeichenfolge montag zugeordnet. Die erfolgreiche Eintragung kann man sich anschließend mit
set
ansehen. Dabei werden Sie sehen, daß DOS die Variablennamen stets in Großbuchstaben umwandelt, für die Belegung aber Groß- und Kleinschreibung unterscheidet, wie bei der Eingabe festgelegt.
Jedes Programm erbt das Enviroment von dem Programm, von dem es gestartet wird, also im allgemeinen von COMMAND.COM. Beim Beenden wird es wieder freigegeben, und das übergeordnete Enviroment wird aktiviert.
Das hat zur Folge, daß alle inzwischen vorgenommenen Eintragungen verloren gehen, eine Tatsache die häufig zu Fehlern führt. Von dieser Regelung sind beispielsweise SET-Befehle in Batch-Dateien betroffen. Da eine BAT-Datei beim Start eine eigene Programmumgebung erhält, werden alle Eintragungen dort vorgenommen. Nach dem Beenden befinden Sie sich wieder in der Programmumgebung des Kommandointerpreters, wo diese Einträge nicht mehr existieren. Positiv gesehen brauchen in Batch-Dateien gesetzte Systemvariablen am Ende also nicht gelöscht werden.
Bestes Beispiel für das Verschwinden von Systemvariablen ist die Arbeit mit dem Norton-Commander. Nutzen Sie den SET-Befehl bei geladenem Norton-Comander, so gelangen die Eintragungen nie in das Enviroment von COMMAND.COM oder in das des Norton-Commanders. Sie existieren nur unmittelbar während der Abarbeitung des SET-Befehls. Das hängt damit zusammen, daß bei jeder Befehlsausführung eine weitere COMMAND.COM-Kopie geladen und mit einem Enviroment versehen wird. Also Vorsicht.
An einem kleinen Beispiel kann man sich das Vererbungskonzept des Enviroments verdeutlichen. Schreiben Sie in eine BAT-Datei
set test=gesetzt
set
Beim Start wird die Variable Test korrekt angezeigt. Wenn Sie aber mit SET noch einmal nachsehen, so ist die Variable nicht mehr vorhanden. Sie existierte nur während der Zeit der Abarbeitung des Programms in seiner Programmumgebung.
Um die Nutzung der so eingetragenen Informationen in einem Programm muß sich der Nutzer selbst kümmern, denn weder das Betriebssystem noch Anwenderprogramme kennen die Variablen TAG, NAME oder CODEWORT. In den meisten Programmiersprachen existieren Konstrukte zum Abfragen von Enviroment-Variablen (GETENV in C, ENVSTR ab Turbo-Pascal 5.0), leider gibt es aber keine legale Möglichkeit, das Enviroment zu verändern. Das hängt damit zusammen, daß durch den Vererbungsmechanismus diese Eintragungen zum Programmende sowieso verlorengehen.
Einfacher als in Programmiersprachen lassen sich Informationen aus der Programmumgebung in Batch-Dateien nutzen. Dort wird der Variablenname einfach in Prozentzeichen eingeschlossen. Der Test auf das gesetzte Codewort kann in einer Batch-Datei so aussehen:
if not %codewort%==roger echo
Unberechtigter Zugriff

Oder die Nutzung des Tages mit
echo Heute ist %tag%
Sollen Variablen stets präsent sein, so können diese SET-Befehle in die AUTOEXEC.BAT eingetragen werden.
Ein entfernen aus dem Enviroment erfolgt durch Belegung mit einer leeren Zeichenkette - zum Löchen des TAG-Eintrages also
set tag=
Den Erfolg kann man sich mit
set
ansehen. Einige Programme kennen auch vordefinierte Variablen, die der Nutzer zur Einstellung von Standards belegen kann. Bei Compilern stehen häufig die Variablen INCLUDE (für den Suchpfad der Bibliotheken) zur Verfügung. Durch Anweisungen wie
set include=c:\compiler\inc
set lib=c:\compiler\bibl
kann dem Compiler mitgeteilt werden, wo er nach den entsprechenden Dateien zu suchen hat, ohne das bei jedem Aufruf angeben zu müssen.
Ein gestartetes Programm erhält ein eigenes Enviroment, und zwar als Kopie vom startenden Programm. Wenn also dBase aufgerufen wird, so erhält es eine Kopie der Programmumgebung von COMMAND.COM. So gehen keine Informationen verloren. Arbeiten mehrere Programme gleichzeitig (Norton-Comander, SideKick etc.), so verwaltet jedes Programm sein eigenes Enviroment. Zu beachten ist dabei, daß seine Größe beschränkt ist. Standardmäßig ist es 160 Byte groß. Probieren Sie doch einmal aus, einige sehr lange Parameter einzutragen:
set x=xxxxxxxxxxxxxxxxxxxxxxxxxxx...
usw.
Beim Ansehen mit SET werden Sie feststellen, daß der Rest abgeschnitten wurde. In neueren Betriebssystemversionen wird gar eine Fehlermeldung ausgegeben, wenn die Programmumgebung voll ist. Da dem Enviroment eine wachsende Bedeutung beigemessen wird, ist ab DOS-Version 3.10 die Größe einstellbar (bis maximal 32 KByte). Das Einstellen kann immer geschehen, wenn COMMAND.COM gelanden wird (wie bereits erwähnt), zum Beispiel
Command /e:512
zur Festlegung von 512 Byte Enviroment. Soll diese Einstellung stets beim Start Bestand haben, so haben Sie
shell=command.com /e:512 \p
in die CONFIG.SYS einzutragen. Ein etwas größeres Enviroment ist bei vielen neueren Programmen nötig; gehen Sie aber auch nicht zu großzügig mit dem Speicherplatz um, es ist zu bedenken, daß jedes nachfolgende gestartete Programm eine ebenso große Kopie erhält.
Mit dem SHELL-Befehl ist es auch möglich, ein anderes Programm als COMMAND.COM zur Kommandooberfläche zu erklären, etwa ein selbstgeschriebenes. Es funktioniert auch, den Norton-Comander dort festzulegen, aber alle Systembefehle (DIR,..) stehen nicht mehr zur Verfügung, weil sie nur vom Norton-Commander an COMMAND.COM weitergegeben werden, und verlassen kann man den Comander auch nicht, weil kein Kommandointerpreter "darunterliegt".

(c) Jürgen Richter