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 (Four Letter Acronym : Vier Buchstaben Acronym) Sprache, bedeutet REstructured eXtended 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 Institut 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. Außerdem 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,

Major Weenie