DBU

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Zur Navigation springen Zur Suche springen

DBU

Um die abweichenden und unterschiedlichen Konzepte von Clipper und Xbase darzustellen, möchte ich hier kurz die Migration von DBU, der Data Base Utility von Nantucket, beschreiben.

Das Programm liegt im Quelltext vor und kann relativ leicht geändert werden. Gleichzeitig ist es aber auch so, dass DBU mehr oder weniger ein Project in Progress war. Auch haben die Programmierer an vielen Stellen die Beschränkungen von Clipper ausgenutzt.

Dazu gehört z.B. dass in Clipper Variablen-Namen auf 10 Stellen beschränkt waren, längere Namen waren "gültig", jedoch wurden immer nur die ersten 10 Stellen verwendet. (Diese Einschränkung haben dann auch die DBF-Dateien "geerbt").


Bereitstellen einer Projekt-Datei

Eigentlich sollte es ein leichtes sein, diese Migration vorzunehmen, da bis auf wenige Ausnahmen umfassende Kompatibilität besteht. Also, die DBU-Quellen in ein Verzeichnis gepackt, dann

dir *.prg /b > dbu.txt
pbuild @dbu.txt
pbuild

ausgeführt.


Erster PBuild-Lauf

Xbase++ (R) ProjectBuilder Version  1.90.355
Copyright (c) Alaska Software 1997-2009. All rights reserved.
xpp /q /b /dDEBUG @C:\Users\n69304\AppData\Local\Temp\06041789.tmp
Xbase++ (R) Compiler 1.90.355 Apr  9 2009
Copyright (c) Alaska Software. All rights reserved.
File DBU.PRG successfully compiled.
DBUCOPY.PRG(593:0): warning XBT0105: Function scope_num does not end with RETURN 
DBUCOPY.PRG(594:0): error XBT0232: LOCAL declaration follows executable statement
DBUCOPY.PRG(701:0): warning XBT0105: Function MAIN does not end with RETURN
DBUCOPY.PRG(704:0): warning XBT0105: Function tog_sdf does not end with RETURN
DBUCOPY.PRG(705:0): error XBT0232: LOCAL declaration follows executable statement
DBUCOPY.PRG(780:0): warning XBT0105: Function MAIN does not end with RETURN
DBUCOPY.PRG(783:0): warning XBT0105: Function tog_delim does not end with RETURN
DBUCOPY.PRG(784:0): error XBT0232: LOCAL declaration follows executable statement
DBUCOPY.PRG(854:0): warning XBT0105: Function MAIN does not end with RETURN
3 error(s) found in file DBUCOPY.PRG!
'xpp /q /b /dDEBUG @C:\Users\ichbins\AppData\Local\Temp\06041789.tmp' returned error   3
Processing time:      0.29 secs.


Fehleranalyse

Das erste (hier aber nicht gelistete) Problem ist, dass der Einstiegspunkt in DBU.prg DBU() heisst, und nicht MAIN(), wie es Xbase++ erwartet.

1. Schritt: Umbenennen von DBU() in MAIN(). 2. Wir finden drei Fehler mit dem Hinweis, dass die LOCAL Deklaration auf eine ausführbare Anweisung folgt. Werfen wir einen Blick in DBUCOPY.PRG:

FUNCTION scope_num
PARAMETERS sysparam
local saveColor
PRIVATE old_scope
help_code = 17

Die Anweisung PARAMETERS definiert Variablen vom Type PRIVATE, die als Parameter an die Funktion scope_num übergeben werden. Per Definition sind die Deklarationen von PRIVATE und PUBLIC Variablen ausführbare Anweisungen und müssen auf die LOCAL (oder STATIC) Deklarationen folgen.

Da die drei anderen Fehler auf die gleiche Ursache zurückgehen, verschieben wir die PARAMETERS Deklaration hinter die folgende LOCAL Deklaration und wagen einen weiteren Compile-Lauf:

Xbase++ (R) ProjectBuilder Version  1.90.355
Copyright (c) Alaska Software 1997-2009. All rights reserved.
xpp /q /b /dDEBUG @C:\Users\n69304\AppData\Local\Temp\06048276.tmp
Xbase++ (R) Compiler 1.90.355 Apr  9 2009
Copyright (c) Alaska Software. All rights reserved.
File DBUCOPY.PRG successfully compiled.
File DBUEDIT.PRG successfully compiled.
File DBUHELP.PRG successfully compiled.
File DBUINDX.PRG successfully compiled.
File DBUNET.PRG successfully compiled.
File DBUSTRU.PRG successfully compiled.
DBUUTIL.PRG(294:0): warning XBT0105: Function multibox does not end with RETURN
DBUUTIL.PRG(295:0): error XBT0232: LOCAL declaration follows executable statement
DBUUTIL.PRG(417:0): warning XBT0105: Function MAIN does not end with RETURN
DBUUTIL.PRG(570:0): warning XBT0105: Function ok_button does not end with RETURN
DBUUTIL.PRG(571:0): error XBT0232: LOCAL declaration follows executable statement
DBUUTIL.PRG(618:0): warning XBT0105: Function MAIN does not end with RETURN
DBUUTIL.PRG(621:0): warning XBT0105: Function can_button does not end with RETURN
DBUUTIL.PRG(622:0): error XBT0232: LOCAL declaration follows executable statement
DBUUTIL.PRG(664:0): warning XBT0105: Function MAIN does not end with RETURN
DBUUTIL.PRG(699:0): warning XBT0105: Function itemlist does not end with RETURN
DBUUTIL.PRG(700:0): error XBT0232: LOCAL declaration follows executable statement
DBUUTIL.PRG(809:0): warning XBT0105: Function MAIN does not end with RETURN
DBUUTIL.PRG(912:0): warning XBT0105: Function getfile does not end with RETURN
DBUUTIL.PRG(913:0): error XBT0232: LOCAL declaration follows executable statement
DBUUTIL.PRG(1006:0): warning XBT0105: Function MAIN does not end with RETURN
DBUUTIL.PRG(1079:0): warning XBT0105: Function get_exp does not end with RETURN
DBUUTIL.PRG(1080:0): error XBT0232: LOCAL declaration follows executable statement
DBUUTIL.PRG(1159:0): warning XBT0105: Function MAIN does not end with RETURN
DBUUTIL.PRG(1254:0): warning XBT0105: Function get_k_trim does not end with RETURN
DBUUTIL.PRG(1255:0): error XBT0232: LOCAL declaration follows executable statement
DBUUTIL.PRG(1346:0): warning XBT0105: Function MAIN does not end with RETURN
DBUUTIL.PRG(2263:0): warning XBT0105: Function enter_rc does not end with RETURN
DBUUTIL.PRG(2264:0): error XBT0232: LOCAL declaration follows executable statement
DBUUTIL.PRG(2311:0): warning XBT0105: Function MAIN does not end with RETURN
8 error(s) found in file DBUUTIL.PRG!
'xpp /q /b /dDEBUG @C:\Users\ichbins\AppData\Local\Temp\06048276.tmp' returned error   8
Processing time:      0.44 secs.

Nach der Bearbeitung von DBUUTIL.prg und dem Verschieben der PARAMETERS Anweisung kommen die gleichen Fehler in DBUVIEW.prg hoch. Nach deren Behebung lässt sich das Programm ohne Fehlermeldung compilieren und linken. Und starten!





Leitfaden von Alaska

Es gibt für die Migration von DBU auch einen Leitfaden von Alaska, der von der Homepage heruntergeladen werden kann.


(Artikel noch in Bearbeitung)