This document describes the startup with Tycoon-2 at STS.
rlogin sun02
def_SUNWspro
bringover -p /local/teamware/tycoon2/sts -w /local/teamware/$USER/tl2 hox
def_tycoon2 tl2
sh bin/bringoverx
TL2.ts
Einloggen auf der sun02 und eventuell mit openwin 'eigener Rechner' Umgebung setzen:
rlogin sun02 openwin pc14
Das ausführbare Programm benötigt einige Environment-Variablen,
die durch Aufruf des Scripts def_tycoon2
def_tycoon2 tl2
Dieses Skript wechselt auch automatisch in das Teamware-Verzeichnis
/local/teamware/$USER/
TL2.ts
Beendet wird die Sitzung mit Ctrl-C.
Nach dem Start erscheint eine kurze Meldung und eine Eingabeaufforderung, an der Tycoon-2-Ausdrücke ausgewertet werden können.
Tycoon-2 restarted. |> 1+1; 2 |> "hallo".reversed; "ollah"
Neue Klassen definiert man folgendermaßen:
Zunächst erzeugt man die Quelltextdatei, etwa ErsteKlasse.tc mit folgendem Inhalt:
class ErsteKlasse
super Object
metaclass SimpleConcreteClass(ErsteKlasse)
public methods
tuwas :Bool
{ tycoon.stdout.writeln("Ich tu was."),
true
}
;
Dabei ist wichtig, daß Klassenname und Dateiname zueinander passen. Diese Klasse muß nun dem ClassLoader bekannt gemacht werden (Details siehe dort).
|> tycoon.tl.loader.registerFile("ErsteKlasse.tc");
[Building class ErsteKlasse
]
nil
|>
Das System baut zunächst nur einen Platzhalter fü die Klasse. Wir müssen es noch auffordern, nach geänderten Quelltexten zu suchen:
|> tycoon.tl.loader.update; [./ErsteKlasse.tc ] [Checking for unknown class names...] [Building class ErsteKlasse New class object for ErsteKlasse: old metaclass AbstractClass(), new SimpleConcreteClass(ErsteKlasse) ] nil |>
Nun definieren wir eine Pool-Variable und weisen ihr ein Exemplar der Klasse zu.
|> define erstesObjekt :ErsteKlasse; |> erstesObjekt := ErsteKlasse.new; an ErsteKlasse |> erstesObjekt.tuwas; Ich tu was. true |>
Wir ändern nun den Quelltext, um eine etwas sinnvollere Meldung zu bekommen. Der neue Text sieht so aus:
class ErsteKlasse
super Object
metaclass SimpleConcreteClass(ErsteKlasse)
public methods
tuwas :Int
{ tycoon.stdout.writeln("Berechne 1+1"),
1+1
}
;
Nachdem wir die Datei geändert und abgespeichert haben, geben wir dem System bescheid.
|> tycoon.tl.loader.update; ...
Unser existierendes Objekt verwendet sofort die neue Definition.
|> erstesObjekt.tuwas; Berechne 1+1 2 |>
Damit die Klasse beim nächsten Systemstart nicht noch einmal eingelesen werden muß, führen wir ein persistentes commit durch.
|> tycoon.saveSystem; System saved. true |>
Dann beenden wir die Sitzung, entweder durch Control-C oder durch
|> tycoon.ansiC.exit(0);
Wer sich für die Schnittstelle einer Klasse interessiert, kann sich diese durch eine prettyPrint-Nachricht ans Klassenobjekt anschauen, z.B. Tycoon.prettyPrint. Kommentare etc. gibt es allerdings nur in den ursprünglichen Quelltext-Dateien.
Mit DO load "Datei"; ist es auch möglich, mehrere Ausdrücke aus einem Skript einzulesen. Der Dateiname kann absolut oder relativ zur Umgebungsvariable TL2_PATH sein.