Engine Room - V1N2 (German)
Ein Haufen Leute haben Major Weenie gefragt: "Wenn Warp so toll ist, warum bringt
es dann keine eingebaute Programmiersprache mit ?"
Offensichtlich haben sich diese Leute nicht die Mühe gemacht, den Kern von Warp
zu überprüfen, sonst hätten sie eine der besten Batch-, Skript- und Allround Programmiersprachen
entdeckt, die jemals mit jeder Kopie von Warp durch die große Barriere gekommen
ist: REXX.
REXX, eine IBM FLA (F'our Letter A
cronym : Vier Buchstaben Acronym) Sprache, bedeutet RE
structured e'Xtended eXecutor
(neu aufgebauter, erweiterter Ausführer). REXX wurde im Frühling 1979 von einem
IBMer namens Mike Cowlishaw im U.K. zusammengebaut. Um ganz offen aus dem Vorwort
zu The REXX Handbook (von Gabriel Goldberg und Philip H. Smith III, McGraw-Hill,1992)
zu stehlen: "REXX ist so gut, weil so viel davon offensichtlich ist;" (deswegen
gefällt es Major Weenie auch so gut) "es ist elegant und geradeheraus zu benutzen und
leicht zu lernen." REXX begann sein Leben auf IBMs VM Systemen, fand seinen
Weg zu VMS, dann OS/2 1.x, dann irgendwann auf AIX (IBMs UNIX), dann zum OS/400
Betriebssystem, das man auf AS/400 midrange Systemen finden konnte, und zuletzt
auf dem IBM PC DOS 7. Es wurde auch dem American National Standards Insitut vorgelegt,
um es als Computer Batch Sprachstandard annehmen zu lassen.
Wenn sie sich an einem Punkt entscheiden sollten, sich wirklich tief mit REXX
zu beschäftigen, sollten sie sich mit IBM in Verbindung setzen und eine Kopie
eines ihrer Redbooks beschaffen, genannt OS/2 REXX: From Bark to Byte, das,
mal abgesehen von vielen guten Programmbeispielen, exzellente Tips darüber enthält,
wie man REXX Code so plattformunspezifisch programmiert, wie möglich (in anderen Worten,
wie man ein REXX Programm schreibt, das in allen Plätzen, an denen man REXX finden kann,
mit so wenigen Änderungen, wie möglich läuft).
Es bleibt unausweichlich, daß jemand Major Weenie vor seinem Abgang fragt:
"Ok, wenn REXX so toll ist, was kann man damit anstellen ?". Im Fall von Warp
wäre eher die Frage angebracht, was man damit NICHT anstellen kann.
Nun, zum einen kann man damit wirklich keine Workplace Shell Anwendungen
schreiben, obwohl es eine rudimentäre Popup Dialogbox enthält, die man aus einem
REXX exe aufrufen kann. Am Ende der Kolumne wird Major Weenie ihnen einen netten
Scherz mit dieser Dialogbox anvertrauen, mit dem er vor Jahren die Frischlinge
von der Akademie gefoppt hat.
Selbst ohne ein WPS Interface bleiben unzählige Dinge, die man mit REXX anstellen
kann, aber räumen wir erst mal ein wenig Geschwafel über Programmkonventionen
aus dem Weg. Wie sie in der Online REXX Anleitung feststellen werden, müssen
ALLE REXX Programme mit einem Kommentar anfangen. In einem REXX Programm ist
alles zwischen einem slash asterisk (/*) und einem
asterisk slash (*/) ein Kommentar. Kommentare
können in Kommentare eingebettet (nested) werden. In Warp ist ein REXX Programm
ein einfaches Textfile mit einer .CMD Erweiterung.
An diesem Punkt spritzt sich einer der Schlaffis an den Replikatoren normalerweise
mit Traubensaft voll und will wissen, ob die STARTUP.CMD im Wurzelverzeichnis
ihres Warp Systems auch eine REXX exe ist. Wahrscheinlich nicht, aber es könnte
sein. Sie haben gute Chancen, daß, wenn sie eine STARTUP.CMD haben, das ganze
nur ein einfaches, altes Batch-File ist. Sie können es leicht feststellen,
indem sie es mit einem Editor öffnen und nach dem bezeichnenden Anfangskommentar
suchen.
Wenn sie sich dazu entscheiden, tief in die REXX Programmierung in Warp einzusteigen
(oder sonstwo, wenn man es genau nimmt), kann ein guter Editor einen großen Unterschied
ausmachen. IBM hat die REXX Programmierer nicht vergessen: Schauen sie sich
mal den Enhanced Editor (EPM) im Produktivitätsordner an.
Wenn sie das gerade editierte File als CMD File identifizieren, wird EPM einige
rudimentäre Syntax Komplettierungen für sie ausführen.
Einer der besten Wege, um mit REXX anzufangen, ist die Nutzung des
REXXTRY Kommandos, das in Warp eingebaut wurde, zusammen mit der Online
REXX Information. Geben sie an einer OS/2 Kommandozeile rexxtry ein, so
werden sie folgendes sehen:
REXXTRY.CMD lets you interactively try REXX statements.
Each string is executed when you hit Enter.
Enter 'call tell' for a description of the features.
Go on - try a few... Enter 'exit' to end.
Wenn sie call tell wie vorgegeben eingeben, werden sie folgendes sehen:
/* SAA-portable REXXTRY procedure 11/08/91 version 1.05
Owned by IBM SAA REXX Development, Endicott, New York.
Loosely derived from an ancient formulation of Mike Cowlishaw.
This procedure lets you interactively try REXX statements.
If you run it with no parameter, or with a question mark
as a parameter, it will briefly describe itself.
You may also enter a REXX statement directly on the command line
for immediate execution and exit. Example: rexxtry call show
Enter 'call show' to see user variables provided by REXXTRY.
Enter '=' to repeat your previous statement.
Enter '?' to invoke system-provided online help for REXX.
The subroutine named 'sub' can be CALLed or invoked as 'sub()'.
REXXTRY can be run recursively with CALL.
Except for the signal instructions after a syntax error, this
procedure is an example of structured programming.
The 'clear' routine illustrates system-specific SAA-portable coding.
- /
rc = 0 ......................................... REXXTRY.CMD on OS/2
Kapiert?
Wenn sie lieber von der Workplace Shell aus arbeiten, daran hat IBM auch gedacht.
Es gibt eine GUI REXX Funktionsbibliothek, PMREXX(sie muß die Dialogboxfunktion
benutzen). Wenn sie 'pmrexx rexxtry' in einer Kommandozeile eingeben, können
sie genau dieselben Dinge anstellen, nur in einem GUI Fenster. Ausserdem bekommen
sie so die Möglichkeit, die Ausgaben in ein File abzuspeichern, sollten sie also
an etwas problematischem arbeiten, können sie das PMREXX Interface benutzen, um
das tracing anzuschalten und die Ausgaben so in ein File abzuspeichern, in dem
sie dann die Routine 'glätten' können.
An diesem Punkt könnte Major Weenie in etwas Pipifax-ähnlichen Kram eintauchen,
aber er erwartet von ihnen, daß sie das schon an der Akademie gelernt haben, oder, wenn nicht,
dann durch REXXTRY die Grundzüge herausgefunden haben.
Nun, bevor wir zu dem Scherz kommen, wie wäre es mit etwas nützlichem?
Ein echter Warp Anhänger weiß über die Nutzung der Alt-F1 Tastenkombination beim
Booten Bescheid, um in den Auswahlbildschirm zu kommen. Die meisten Anwender wissen
aber nicht, daß es einen Weg gibt, diesen Bildschirm so anzupassen, daß man
etwas anderes als die vorgespeicherten Backups laden kann. (Schauen sie im
Hauptindex nach config.sys, folgen sie dann den Anweisungen
unter Verwenden von Wiederherstellungsoptionen beim Neustart,
um etwas über die Anpassung des Bildschirms zu lernen.)
Eines der nützlichen Dinge, die ich gelernt habe, ist, daß man OS/2 mit einer
regulären config.sys booten kann, ohne die Workplace Shell zu laden. Das ist
einfach zu schaffen und noch einfacher, wenn man es mit REXX automatisiert.
Um in eine Kommandozeile zu booten, ersetzen sie einfach
PROTSHELL=C:\OS2\CMD.EXE
mit der Zeile
PROTSHELL=C:\OS2\PMSHELL.EXE
in ihrer config.sys. (Bedenken sie, daß sie den Laufwerksbuchstaben anpassen müssen,
wenn sie OS/2 auf einer anderen Partition als C: installiert haben.)
Teil dieses alternativen Boots ist es, dieser alternativen config.sys einen
spezifischen Namen zu geben und sie im \OS2\BOOT Verzeichnis zu plazieren und
gleichzeitig das File ALTF1BOT.SCR zu updaten, damit es auf
diese neue config.sys zeigt. Alle veränderten config.sys Files enden mit einem
einzelnen Buchstaben, der auf den Buchstaben verweist, der als Auswahl im Alt-F1
Bildschirm auftaucht.
Achtung: Löschen sie nie das File namens CONFIG.X im OS2\BOOT Unterverzeichnis!
Das ist das File, das geladen wird, wenn sie zu einer Kommandozeile booten im
Alt-F1 Bildschirm anwählen.
Config.x ist schön und gut als Kommandozeilen Boot Auswahl, aber wenn sie
auf wahrscheinlich gar nichts einen Zugriff haben, ist config.x
das allererste config.sys File auf ihrem System.
In meinem Fall habe ich den Buchstaben P als Kürzel für plain
gewählt, um meine Workplace Shell-lose Konfiguration zu kennzeichnen. Ich, als
Major Weenie, wechsele meine config.sys öfters und da ich zu faul bin, um die
config.p jedesmal von Hand zu ändern, schrieb ich dieses einfache exe, das sie
gerne von mir klauen können.
/* Kreiert eine 'plain' config.sys */ /* <-- das ist der führende Kommentar */
'@c:' /* <-- Betriebssystem Funktionen werden
in einzelne Hochkommas eingeschlossen */
'@cd\os2\boot'
'@if exist config.p del config.p'
dat = 'PROTSHELL=C:\OS2\CMD.EXE' /* einfache Deklarationen */
Prot = 'protshell'
Tablein = 'PROTSHELL'
Tableout = 'protshell'
File = 'C:\CONFIG.SYS'
Out = 'CONFIG.P'
RC = Linein(File,,0) /* <-- öffnet ein File für Einträge; es gibt andere Wege */
RC = Lineout(Out,,1) /* <-- öffnet ein File für Ausgabe; dito */
Do While Lines(File) > 0
RC = Linein(File)
Temp = RC
Test = Left(Temp, 9)
Test = Translate(Test, Tableout, Tablein)
/* übersetzt alle Eingaben in Kleinschrift bevor
sie verglichen werden,um herauszufinden, ob es die PROTSHELL
Zeile ist, nach der ich suche... */
If Test = Prot Then
Do
RC = Lineout(Out, Dat)
Iterate
End /* Do */
RC = Lineout(Out, Temp)
End /* Do */
RC = Lineout(Out)
RC = Stream(File, 'C', 'Close')
Exit 0
Nun, das EXIT Kommando ist nicht unbedingt nötig, weil das Programm sich einfach
so beenden wird. Aber Major Weenie hat einige Standards, auch wenn die ziemlich
niedrig sind. Der Major nennt dieses exe MAKEPLAIN.CMD (er ist ein
HPFS Typ, ihr komischen FAT Typen werdet es also in etwas mit 8 Buchstaben oder
weniger umbenennen müssen).
Was diese Programmschleife macht ist, eine vorhandene config.p zu löschen, jede
Zeile der config.sys einzulesen, die Zeile komplett in Kleinbuchstaben umzuwandeln
(Major Weenie ist kein sehr anspruchsvoller Tipper) und untersucht dann die Zeile, um zu sehen,
ob sie mit den Buchstaben protshell übereinstimmt. Wenn nicht,
dann wird die Zeile einfach wieder zurückgeschrieben. Wenn die Zeile in der
config.sys aber die protshell Zeile ist, wird 'PROTSHELL=C:\OS2\CMD.EXE' für
die existierende protshell Zeile eingesetzt.
Das perfekte Geschenkt für den gelangweilten Hacker. Vielleicht wird Major Weenie
euch nächstes Mal mit etwas weniger esoterischem beglücken. Wenn sie jedoch ein
OS/2 Mailboxsystem laufen lassen sollten, ist das der Weg, es ohne die Workplace
Shell zu benutzen - spart Unkosten und macht das System uninteressant für den
Uneingeweihten.
Nun, hier ist der Scherz, den Major Weenie ihnen versprochen hat.
Erst mal kann das PMREXX Interface nicht direkt in einem REXX exe aufgerufen
werden, was gibt es also für einen besseren Platz, als die STARTUP.CMD, wo ihr
baldiger Ex-Freund es jedesmal sehen wird, wenn er sein System bootet?
Also....fügen sie folgende Zeile in die STARTUP.CMD ein (oder erstellen sie eine
STARTUP.CMD, wenn sie noch keine haben):
@start pmrexx chump.cmd
Benutzen sie dann den Editor, um CHUMP.CMD zu erstellen, das folgendes enthält:
/* ein lustiges exe, vielleicht...*/
call RxFuncAdd 'RxMessageBox', 'RexxUtil', 'RxMessageBox'
if RxMessageBox('Drücken sie Cancel um Löschung der Harddisk abzubrechen.',,
'Fatal System Error Message','cancel','WARNING') = 2 then nop
if RxMessageBox('Harddisk wird gelöscht... ',,
'Erase Offending Disk','cancel','HAND') = 2 then nop
call SysSleep 3
if RxMessageBox('Chump...','Chump Notification','Ok','Exclamation') = 7
then Exit
Zwei Kommas am Ende einer Codezeile sind übrigens Zeichen, die die Zeile weiterführen,
wenn Codezeilen zu lang sind, um sie noch komfortabel zu lesen oder zu editieren.
Sie können sie dann mit einem Komma aufteilen und sie werden als eine Codezeile
behandelt.
Wissen sie, vielleicht sollten sie einen Testlauf von CHUMP.CMD bei sich selbst
durchführen, bevor sie es bei jemand anderem benutzen.
Huch, mein Kommunikator ist angegangen. Der Captain versucht wahrscheinlich, mich dazu zu bringen, zu einem weiteren multikulturellen Treffen zu gehen. Ich würde ja, aber wer versteht schon ihre Tagesordnung? Bis zum nächsten Mal, verbleibe ich,