Toolmaker Produkt-Dokumentation
Neuerungen rpg2free
Inhaltsübersicht
Version 22.02.02
Fehlerkorrekturen
Typ des "gepackten" Feldes geändert in "zoniertes" Feld.
In einem spaltenbasierten RPGLE wird ein Feld über eine Referenz von einem "Zoned field" in C-Specs definiert:
*LIKE Define ZonedD5 DefZonedD5
In diesem Fall ist das neue Feld standardmäßig gepackt.
Nach der Konvertierung in die freie Syntax wird es in den Deklarationsspezifikationen mit dem Schlüsselwort Like(ZonedD5)
definiert.
In diesem Fall behält es jedoch auch denselben Typ (also "Zoned").
Das ist nicht in Ordnung - das neue Feld muss wie im alten RPGLE "Packed" sein.
Das Problem wurde behoben: In diesem Fall wird nicht das Schlüsselwort "Like(...)
" Schlüsselwort, sondern es definiert das Feld als Packed(...)
.
Verlust von 1 oder 2 Zeichen für Kommentare zu einer Deklarationsangabe.
Wenn die Felddeklarationen von C-Specs nach D-Specs verschoben und in die freie Form konvertiert werden, oder wenn bestehende D-Specs in die freie Form konvertiert werden und in der alten Zeile ein Kommentar vorhanden ist, der von Spalte 81 bis 100 reicht, kann die konvertierte Zeile die letzten 1 oder 2 Zeichen des Kommentars verlieren.
Dieses Problem wurde behoben.
Verbesserungen
MOVEL in ein Array-Element: Ergebnis verbessert
In der zu konvertierenden RPGLE-Quelle können wir auf diese Art von Anweisungen stoßen:
Das Feld ArrX ist als Char(10) mit Dim(nnn) definiert
MOVEL *BLANK ArrX(5)
MOVEL 'AB' ArrX(5)
Vor dieser Version wurde es umgewandelt, wie folgt:
ArrX(5) = *Blank;
%Subst(ArrX(5):1:2) = 'AB';
Es gab bereits ein Optimierungsverfahren für diese Art von Befehlsfolge, das sie durch ein einfaches "eval Ergebnis_Feld = '...'");
ersetzte. Das wurde aber nur für einfache Felder und nicht für Arrays gemacht.
Jetzt wird es auch für Array-Elemente gemacht, wenn das gleiche Array-Element (oder das ganze Array) gelöscht wird (Arr(X) = 'AB';
)
Konvertierung für SCAN/CHECK/CHECKR, wenn das Ergebnis ein Array ist.
Vor dieser Version blieb der Op-Code SCAN/CHECK/CHECKR
in "spaltenweiser" Syntax (keine Konvertierung), wenn er mit einem Array (ohne Index) im Ergebnisfaktor verwendet wurde.
Jetzt werden auch diese Fälle in die freie Syntax konvertiert.
Es wird ein Algorithmus mit einer Schleife verwendet, der die Positionen und speichert sie im Ergebnis-Array, eine nach der anderen.
Version 11.00.07
Fehlerkorrekturen
Fehler im Konvertierungsprozess, wenn sich eine JDE-Datei in der Bibliotheksliste befindet.
Nur für die IBM i - Standalone-Version (Befehl ACVTRPGFRE): Wenn die JDE-Datei F9801 in der Library List gefunden wurde, dann konnte ein Umwandlungsfehler auftreteten.
Dieses Problem wurde behoben
Fehler bei der Umwandlung für MOVE 0
Wenn in einer RPGLE-Quelle für dasselbe Ergebnisfeld ein MOVE- und ein MOVEL-Befehl verwendet wurden, dann war das Ergebnis der Umwanldung nicht korrekt und konnte nicht kompiliert werden.
Zum Beispiel:
MOVE 0 BESTNR
[...]
MOVEL 234 BESTNR
Dieses Problem wurde behoben
Version 10.09.11
Fehlerkorrekturen
Fehler in der konvertierten Quelle, beim Ersetzen durch %ParmNum in einer freien Zeile, die Kommentare vor Spalte 80 enthält.
Wenn die Konvertierung eine Parameternummer durch %ParmNum(param_name) ersetzen muss, kann es zu einem Fehler kommen, wenn die alte Zeile
- bereits in der freien Syntax war
- und einen Kommentar vor Spalte 80 enthält
In solchen Fällen wurde der Kommentar auf die beiden Zeilen aufgeteilt und war nicht korrekt.
Beispiel:
Alte Quelle:
if %parms > 5; // nur wenn gewünscht: Fehlermeldung liefern
Neue Quelle:
if %parms > = %ParmNum(EdsMsg) hlermeldung liefern
; // nur wenn gewünscht: Fe
Dieses Problem wurde behoben: Wenn möglich, verwendet es die vor dem Kommentar verfügbaren Leerzeichen; ansonsten wird der komplette Kommentar in die zweite Zeile verschoben.
ACVTRPGFRE schlägt fehl, wenn ein Programm eine leere Copy-Anweisung enthält.
Wenn in der zu konvertierenden Quelle eine /COPY-Anweisung vorhanden ist und das entsprechende Element der COPY-Klausel leer ist (keine Datensätze), endet die Konvertierung in die freie Syntax mit Fehlermeldungen.
Dieses Problem wurde behoben.
Fehler im Makro RPG_FREE: wenn der Wert 'ACVTRPGFREE' für PARM 300 Zeichen überschreitet (in Verwendung mit ARCAD Skipper)
Wenn das ARCAD-Skipper Makro "RPG_FREE" für eine Konvertierung verwendet wird, dann war die Länge des Parameters für den Befehl ACVTRPGFREE zu kurz (300 Zeichen). Es wurde die Fehlermeldung "Wert 'ACVTRPGFREE' für PARM übersteigt 300 Zeichen" gesendet.
Dieses Problem wurde behoben - die Grenze wurde im Befehl ACALLPGM auf 600 Zeichen geändert.
Version 10.09.03
Verbesserungen
Konvertierte Quellen behalten die Änderungsdaten der Ausgangs-Quelle
Der Parameter SRCDATE (Source line date) hat einen neuen, dritten Wert zur Auswahl bekommen: *KEEP
. Er bewirkt:
- Programmzeilen, die bei der Konvertierung geändert werden behalten ihr Änderungsdatum
- Neu hinzugefügte Zeilen bekommen das aktuelle Datum