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&uuml;he gemacht, den Kern von Warp zu &uuml;berpr&uuml;fen, sonst h&auml;tten sie eine der besten Batch-, Skript- und Allround Programmiersprachen entdeckt, die jemals mit jeder Kopie von Warp durch die gro&szlig;e Barriere gekommen ist: REXX. REXX, eine IBM FLA (Four Letter A cronym : Vier Buchstaben Acronym) Sprache, bedeutet RE structured eXtended eXecutor (neu aufgebauter, erweiterter Ausf&uuml;hrer). REXX wurde im Fr&uuml;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&auml;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&auml;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&uuml;ber enth&auml;lt, wie man REXX Code so plattformunspezifisch programmiert, wie m&ouml;glich (in anderen Worten, wie man ein REXX Programm schreibt, das in allen Pl&auml;tzen, an denen man REXX finden kann, mit so wenigen &Auml;nderungen, wie m&ouml;glich l&auml;uft).

Es bleibt unausweichlich, da&szlig; jemand Major Weenie vor seinem Abgang fragt: "Ok, wenn REXX so toll ist, was kann man damit anstellen ?". Im Fall von Warp w&auml;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&auml;re Popup Dialogbox enth&auml;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&auml;hlige Dinge, die man mit REXX anstellen kann, aber r&auml;umen wir erst mal ein wenig Geschwafel &uuml;ber Programmkonventionen aus dem Weg. Wie sie in der Online REXX Anleitung feststellen werden, m&uuml;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&ouml;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&ouml;nnte sein. Sie haben gute Chancen, da&szlig;, wenn sie eine STARTUP.CMD haben, das ganze nur ein einfaches, altes Batch-File ist. Sie k&ouml;nnen es leicht feststellen, indem sie es mit einem Editor &ouml;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&szlig;en Unterschied ausmachen. IBM hat die REXX Programmierer nicht vergessen: Schauen sie sich mal den Enhanced Editor (EPM) im Produktivit&auml;tsordner an. Wenn sie das gerade editierte File als CMD File identifizieren, wird EPM einige rudiment&auml;re Syntax Komplettierungen f&uuml;r sie ausf&uuml;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&szlig; die Dialogboxfunktion benutzen). Wenn sie 'pmrexx rexxtry' in einer Kommandozeile eingeben, k&ouml;nnen sie genau dieselben Dinge anstellen, nur in einem GUI Fenster. Ausserdem bekommen sie so die M&ouml;glichkeit, die Ausgaben in ein File abzuspeichern, sollten sie also an etwas problematischem arbeiten, k&ouml;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&auml;tten' k&ouml;nnen. An diesem Punkt k&ouml;nnte Major Weenie in etwas Pipifax-&auml;hnlichen Kram eintauchen, aber er erwartet von ihnen, da&szlig; sie das schon an der Akademie gelernt haben, oder, wenn nicht, dann durch REXXTRY die Grundz&uuml;ge herausgefunden haben.

Nun, bevor wir zu dem Scherz kommen, wie w&auml;re es mit etwas n&uuml;tzlichem? Ein echter Warp Anh&auml;nger wei&szlig; &uuml;ber die Nutzung der Alt-F1 Tastenkombination beim Booten Bescheid, um in den Auswahlbildschirm zu kommen. Die meisten Anwender wissen aber nicht, da&szlig; es einen Weg gibt, diesen Bildschirm so anzupassen, da&szlig; 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 &uuml;ber die Anpassung des Bildschirms zu lernen.) Eines der n&uuml;tzlichen Dinge, die ich gelernt habe, ist, da&szlig; man OS/2 mit einer regul&auml;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&szlig; sie den Laufwerksbuchstaben anpassen m&uuml;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&auml;nderten config.sys Files enden mit einem einzelnen Buchstaben, der auf den Buchstaben verweist, der als Auswahl im Alt-F1 Bildschirm auftaucht. '''Achtung: L&ouml;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&auml;hlen.''' Config.x ist sch&ouml;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&uuml;rzel f&uuml;r plain gew&auml;hlt, um meine Workplace Shell-lose Konfiguration zu kennzeichnen. Ich, als Major Weenie, wechsele meine config.sys &ouml;fters und da ich zu faul bin, um die '' config.p'' jedesmal von Hand zu &auml;ndern, schrieb ich dieses einfache exe, das sie gerne von mir klauen k&ouml;nnen.

 /* Kreiert eine 'plain' config.sys */       /* <-- das ist der f&uuml;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)   /* <-- &ouml;ffnet ein File f&uuml;r Eintr&auml;ge; es gibt andere Wege */ RC = Lineout(Out,,1)   /* <-- &ouml;ffnet ein File f&uuml;r Ausgabe; dito */ Do While Lines(File) > 0 RC = Linein(File) Temp = RC        Test = Left(Temp, 9) Test = Translate(Test, Tableout, Tablein) /* &uuml;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&ouml;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&uuml;ssen). Was diese Programmschleife macht ist, eine vorhandene config.p zu l&ouml;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 &uuml;bereinstimmt. Wenn nicht, dann wird die Zeile einfach wieder zur&uuml;ckgeschrieben. Wenn die Zeile in der config.sys aber die protshell Zeile ist, wird 'PROTSHELL=C:\OS2\CMD.EXE' f&uuml;r die existierende protshell Zeile eingesetzt. Das perfekte Geschenkt f&uuml;r den gelangweilten Hacker. Vielleicht wird Major Weenie euch n&auml;chstes Mal mit etwas weniger esoterischem begl&uuml;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&uuml;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&uuml;r einen besseren Platz, als die STARTUP.CMD, wo ihr baldiger Ex-Freund es jedesmal sehen wird, wenn er sein System bootet? Also....f&uuml;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&auml;lt:

'''/* ein lustiges exe, vielleicht...*/ call RxFuncAdd 'RxMessageBox', 'RexxUtil', 'RxMessageBox' if RxMessageBox('Dr&uuml;cken sie Cancel um L&ouml;schung der Harddisk abzubrechen.',, 'Fatal System Error Message','cancel','WARNING') = 2 then nop if RxMessageBox('Harddisk wird gel&ouml;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 &uuml;brigens Zeichen, die die Zeile weiterf&uuml;hren, wenn Codezeilen zu lang sind, um sie noch komfortabel zu lesen oder zu editieren. Sie k&ouml;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&uuml;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&uuml;rde ja, aber wer versteht schon ihre Tagesordnung? Bis zum n&auml;chsten Mal, verbleibe ich, Major Weenie