Hello, World! auf Xbase
Da Xbase++ quasi alle Vor- und Nachteile von Clipper "geerbt" hat, greifen auch die normalen Clipper-Funktionen und Befehle.
Voraussetzung ist eine Installation von Xbase++ und die Einbindung der Verzeichnisse in die PATH-Anweisung.
Mittels eines Editors erzeugen wir ein Programm, HeWo.prg:
FUNCTION MAIN ? "Hello, World!" WAIT RETURN(.T.)
Wir sind immer noch in der Befehlseingabe:
dir *.prg /b > project.txt pbuild @project.txt
Die erste Anweisung erzeugt eine Liste mit den Namen der im Verzeichnis vorhandenen .prg-Dateien. Die zweite Anweisung startet den ProjectBuilder von Xbase++ und übergibt diese Liste als Input-Parameter (erkennbar am vorangestellten @). PBuild erzeugt jetzt eine Project.XPJ:
// // Project - Definition - File created by PBUILD Version 1.90.355 // Date: 29.04.2013 Time: 11:59:32 // [PROJECT] COMPILE = xpp COMPILE_FLAGS = /q DEBUG = yes GUI = no LINKER = alink LINK_FLAGS = RC_COMPILE = arc RC_FLAGS = /v PBUILD = @project.txt MAKE = PROJECT.XPJ [PROJECT.XPJ] project.EXE [project.EXE] HeWo.prg
Da wir keine Vorgaben bezüglich des Programmnamens gemacht haben, verwendet PBuild den Namen der Eingabedatei: so wird aus project.txt eben project.exe.
Mit einem Aufruf von PBuild wird diese Datei abgearbeitet:
C:\Entwicklungen\Test\HelloWorld>pbuild Xbase++ (R) ProjectBuilder Version 1.90.355 Copyright (c) Alaska Software 1997-2009. All rights reserved. xpp /q /b /dDEBUG @C:\Users\Georg\AppData\Local\Temp\04295455.tmp Xbase++ (R) Compiler 1.90.355 Apr 9 2009 Copyright (c) Alaska Software. All rights reserved. File HEWO.PRG successfully compiled. alink @C:\Users\Georg\AppData\Local\Temp\04295461.tmp Alaska 32-Bit Linker Version 1.90.355 Copyright (c) Alaska Software 1997-2009. All rights reserved. project.EXE created successfully. Processing time: 0.23 secs.
Jetzt steht einem kleinen Testlauf nichts im Wege:
C:\Entwicklungen\Test\HelloWorld>project Hello, World! Press any key to continue...
Das Programm läuft also innerhalb der Befehlseingabe und nicht als eigenständiges Programmfenster.
Bevor wir jetzt den nächsten Schritt tun, ergänzen wir noch zwei Zeilen:
FUNCTION MAIN ? "Hello, World!" ? MaxRow() ? MaxCol() WAIT RETURN(.T.)
Ein erneutes PBuild, und wir können project.exe wieder starten:
C:\Entwicklungen\Test\HelloWorld>hewo Hello, World! 76 99 Press any key to continue...
Meine Befehlseingabe ist so definiert, dass 77 Zeilen und 100 Spalten sichtbar sind. Wenn ich das Programm nicht durch einen Aufruf aus der Befehlszeile, sondern z.B. aus dem Windows-Explorer startet, gestaltet sich die Sache anders:
Hello, World! 24 79 Press any key to continue...
Da sind die altbekannten 25 Zeilen mit 80 Spalten wieder. Wir stellen also fest, dass die Umgebung, in der das Programm aufgerufen wird, einen Einfluss auf die Darstellung hat.
Wir können auch hier (sei es, über das Kontextmenü, oder durch Einsatz der rechten Maustaste) Bereiche Markieren und Kopieren.
Wir ändern jetzt in der Project.XPJ einen Eintrag, indem wir aus
GUI = no
GUI = yes
machen, und unser Programm mit pbuild /a neu erstellen. Der Schalter /a erzwingt eine Compilierung aller Module. Normalerweise geht pbuild hin und prüft, welche Quellen gegenüber den Objekten geändert wurden und compiliert nur diese neu. Da wir aber nur die Projekt-Definition, aber keine Quelle geändert haben, müssen wir ein erneutes Compilieren erzwingen.
Wenn wir jetzt das Programm aus der Befehlszeile aufrufen, ändert sich das Verhalten: es erscheint ein neues Programmfenster (ähnlich, nicht gleich!) wie mit der vorherigen Version, wenn wir das Programm aus dem Explorer starten.
Wenn wir jetzt versuchen, über das Kontextmenü oder die rechte Maustaste "Markieren" auszuwählen, fallen zwei Dinge auf:
- das Kontextmenü ist kürzer, und Markieren fehlt; - die rechte Maustaste zeigt im Fenster keine Wirkung.
Wir haben es also mit einem Programm zu tun, das aussieht wie ein "altes" Clipper-Programm (auch die Ausgabe über ? funktioniert), das aber scheinbar kein Text-Modus Programm mehr ist, sondern ein "Windows-Programm".
Wir sind unter Windows angekommen, wenn auch noch nicht am Ziel.