Access to the Tycoon-2 Software

This document describes the startup with Tycoon-2 at STS.

Your first Tycoon-2 Session

  1. Log in to the sun02:
  2. rlogin sun02
  3. Define the environment of the SUN Workshop professional:
  4. def_SUNWspro
  5. Create your own workspace:
    'tl2' is the name of the new workspace. Alternative to the comand line input you can use the graphical tool: teamware
  6. bringover -p /local/teamware/tycoon2/sts -w /local/teamware/$USER/tl2 hox
    
  7. Set the environment variables for your new environment 'tl2' (not all variables will be set, because your environment is not complete up to now):
  8. def_tycoon2 tl2
    
  9. Get some libraries and binaries of your 'parent'-workspace, which are not under teamware control:
  10. sh bin/bringoverx
  11. Start the interactive Top Level:
    TL2.ts

Following Tycoon-2 Sessions

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 gesetzt werden:

def_tycoon2 tl2

Dieses Skript wechselt auch automatisch in das Teamware-Verzeichnis /local/teamware/$USER/ und wechselt in die Gruppe tycoon-2. Die magische Anrufung lautet dann:

TL2.ts

Beendet wird die Sitzung mit Ctrl-C.

Beispielsitzung

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.


Tycoon-2 Administrator / 13.01.98