wsh - Walter's rexx shell

ideas, todo

  • string/object vereinheitlichung sanft beginnen, mit neuer Variante(oder arg) von objClass und in o2file usw. ausbreiten
  • classS für string ist verwirrend, s brauchen wir schon für stem, m wäre vielleicht besser, aber müssten es in allen classDefinitionen anpassen (oder dort als Synonym, da classS ja gar nicht vorkommen kann?!
  • pipes mit parent. Push/Pop nur bei Anfang und Ende falls nötig
  • Cat mit denselben Buchstaben und Logik wie pipe!

fixes

  • block ending noSla with $

Begriffe

class. In wsh kann man Klassen definieren, dazu benutzt die Laufzeit Umgebung vordefinierte Klassen und einige Klassen werden dynamisch erstellt (z.B. für SQL Abragen). Die wichtigsten Teile der Klassenhierarchie:
String a rexx String, its contents is its value.
Object a reference to an object, this is of course also a rexx String, but its contents is interpreted as objectAdress for an object with a class, not as contents. If a RexxString is and Object or a String is context dependent, many procedure exist in different versions for Strings and Objects as input or output. In some special cases, we dynamically decide wheter an argument is an Object or a String: if we find a class for the value of the string we assume it's an Object, otherwise a String.
Strings we use 3 different types of String
StrS not an object but a simple rexx string. In the rexx the (pseudo!)class is called m.class_S ⇒ w.
StrW an object, that is a string constant, the current implementation is a prefix by m.class.escW = ']'. In the rexx the class is called m.class.classW ⇒ w.
StrV an object, that points to its string contents. If a is the address of the object, then m.a is the string content. In the rexx the class is called m.class.classV ⇒ v.
ORun an object that contains a method, that executes (interprets) some rexx code in its method oRun
JRW a class supporting Reads and Writes. the basis for all types of files and pipes. The oRun method reads until endOfFile and writes each object read unchanged to stdOut. If the JRW is not opened yet, it is opened for read and closed afterwards.
JBuf buffers input in a stem (memory) - from where it can later be read
File a File accessing the FileSystem, implementation depends on the operating system and environment, in our case it uses TSO.
fileSpec the specification for the title and other attributes of a dataset. You can give simply the title, wherein ~ are expanded to your SysPref. You may append further attributes (in tso alloc syntax). After as : follow instructions how to create the dataset, if it does not exist yet
inlineScript in einem Rexx kann ein Teil des Sources so markiert werden, dass dieser SourceTeil vom RexxProgramm selbst gelesen wird und als wsh Syntax interpretiert wird
m All global variables are in the rexx stem m.. All other variables are local. This is implemented by a declaration procedure expose m. for every rexx routine. If an object has address a and a field f1 the contents of f1 is in m.a.f1. It may also use the value in m.a (but this is not recommended) and m.a is called the value of object a.
null der leere String dient als Null Object
pipe a $| b: stdOut of a is stdIn of b
stdIn standard Input ist ein vordefiniertes InputFile, dass mit im Script oder Rexx umgeleitet werden kann
stdIO the standard interface to every function is stdIn and stdOut.
stdOut standard Output ist ein vordefiniertes OutputFile, dass mit im Script oder Rexx umgeleitet werden kann

old

accessPath ZugriffsWeg auf Felder eines object z.B. in vars gespeichert. Der Zugriff kann über mehrere Stufen erfolgen, entweder auf ein SubFeld oder über die im Subfeld gespeicherte Referenz.
pipe Zusammensetzung von zwei Codestücken, indem stdOut des ersten auf stdIn des zweiten geleitet wird. In wsh macht das der Operator $!.
stdIn standard Input ist ein vordefiniertes InputFile, dass mit im Script oder Rexx umgeleitet werden kann
stdOut standard Output ist ein vordefiniertes OutputFile, dass mit im Script oder Rexx umgeleitet werden kann
vars wsh benutzt eine globale SymbolTable. Diese variablen werden mf $=..=.., envPut usw gesetzt und mit $a, oder ${a}, envGet('a') oder envGetO('a') gelesen werden. Auf die Felder der abgespeicherten Objekte kann mit zusammengesetzten Namen zugegriffen werden, z.B. ${a.f1}.