.TL
\f(HBCLE - PTOC Version 1.02.  Release Notes\fR
.AU "Dieter Konnerth"
.AF "/dev Software M\(u:nchen"
.MT 4

Es wurden folgende Erweiterungen, \(A:nderungen und Fehlerkorrekturen
vorgenommen:

.BL
.LI
Value Parameter

F\(u:r value Parameter vom Typ \fIarray\fR und \fIset\fR wird optional 
statt dem
Parameter dessen Addresse \(u:bergeben 
und erst in der Funktion in eine lokale Hilfvariablen kopiert!
Dadurch f\(a:llt der pointer cast an der Aufrufstelle weg und die damit
verursachten alignment Fehler. (siehe Option -Kd)

.LI
Unsigned Vergleich 

Bei arithmetischen Ausdr\(u:cken mit Konstanten und \fIord\fR Funktionen 
wurden unter ganz bestimmten Umst\(a:nden f\(a:lschlicherweise \fIunsigned\fR
casts eingef\(u:gt die zu falschem Code f\(u:hrten. Der Fehler wurde beseitigt.

.LI
Unterdr\(u:cken nicht ben\(o:tigter Typdeklarationen

Um zu verhindern da\(ss die eingesetzten C Compiler wegen Tabellen\(u:berlauf
abst\(u:rzen, wurden hier einige Optimierungen eingebaut. Es k\(o:nnen 
wahlweise Typdeklarationen, enum-Deklarationen, Konstantendeklarationen und 
Variablendeklarationen unterdr\(u:ckt werden (Siehe Optionen -Ktvb)

.LI
Bereinigung f\(u:r -Xc Option
.LE

Der Konverter erkennt jetzt folgende neue Optionen:

.VL 10 2
.LI -Kd
DelayedParCopy:

F\(u:r value Parameter vom Typ array und set wird nur mehr die
Adresse \(u:bergeben
und erst in der Funktion in einer lokalen Hilfvariablen das
gesamte Feld einkopiert!

.LI -Kt
DeleteUnusedType:

Mit dieser Option werden die nicht ben\(o:tigten Typen unterdr\(u:ckt!
Es gibt noch 2 weitere flags, die bisher mit dieser -Kt Option
eingeschaltet werden:
DeleteUnusedConst und DeleteUnusedEnumElement
Wenn man will, kann man sie leicht (mit neuen eigenen Optionen)
getrennt einschalten!

.LI -Kb
BreakPointerType:

Diese Option ist nur zusammen mit der -Kt Option sinnvoll.
Bei Pointer-Typen wird 'abgebrochen', sofern der Zieltyp nicht
ben\(o:tigt wird. Der Pointer wird dann durch einen integer
Pointer ersetzt. Die Korrektheit ist gew\(a:hrleistet, allerdings
kommt es zu Warnungen aus dem C Compiler im Zusammenhang mit der
include Datei ptoc.h: Der C-Compiler bringt bei jedem Aufruf der 
libpc- Funktion "sql__ut()" eine Warnung.

Wenn diese u.U. massiv auftretenden warnings st\(o:ren, oder wenn
ein C-Compiler dies sogar als Fehler auffa\(sst, dann mu\(ss lediglich
in der ptoc.h -Datei der Typ der sql__ut -Routine ge\(a:ndert werden:
von
        extern t__iorechd *sql__ut()
nach
        extern int *sql__ut()

.LI -Kv
DeleteUnusedVar:

Diese Option unterdr\(u:ckt die Ausgabe von globalen Variablendeklarationen,
falls die entsprechenden Variablen nie verwendet werden. 
Zusammen mit der -Kt Option wird dann unter Umst\(a:nden auch die
Ausgabe weiterer Typdeklarationen gespart.

.LI -Xc
UseSymbolicConst:

Ist diese Option eingeschaltet, werden Konstanten und Aufz\(a:hlungstyen
wenn m\(o:glich symbolisch ausgegeben. Andernfalls werden die entsprechenden
Deklarationen unterdr\(u:ckt und an der Anwendungsstelle die Zahlenwerte 
ausgegeben. Zusammen mit den oben aufgez\(a:hlten Optionen kann jetzt 
der Code lesbarer ausgegeben werden ohne Abst\(u:rze der C Compiler
zu verursachen.

.LE 

Bemerkung zur Implementierung neuer Optionen:

In dem Modul: common/dump_hdg.P wurden 'Flag Funktionen' eingef\(u:hrt,
die die Handhabung der Flagabfragen vereinfachen. Insbesondere bei
\(A:nderungen der Voreinstellung, Bedeutung oder des verwendeten
Kontrollbuchstabens (z.Bsp die Umkehrung der Bedeutung des -Xc Flags)
ist jetzt nur noch an einer Stelle einzugreifen.

Ausschnitt davon:

.nf
.S 8
.ft LP

/* ------ some flag-functions ----------------- */

function BreakPointerType : boolean;
begin
BreakPointerType := control2['b'];
end;

function DelayedParCopy : boolean;
begin
DelayedParCopy := control2['d'];
end;

function DeleteUnusedVar : boolean;
begin
DeleteUnusedVar := control2['v'];
end;

function DeleteUnusedType : boolean;
begin
DeleteUnusedType := control2['t'];
end;

function DeleteUnusedEnumElement : boolean;
begin
DeleteUnusedEnumElement := DeleteUnusedType;   /* vorerst */
end;

function DeleteUnusedConst : boolean;
begin
DeleteUnusedConst := DeleteUnusedType;   /* vorerst */
end;

function UseSymbolicConst : boolean;
begin
UseSymbolicConst := control['c'];
end;

function DontReduceAnything : boolean;
begin
DontReduceAnything := not (DeleteUnusedType or DeleteUnusedVar);
end;

/* ---------------------------------------------------------- */
.ft
.S 10
.fi
