PPL6-Icon Patrick's Programming Library Version 6.4.21 - Dokumentation
ppl6::PFPFile Klassenreferenz

Klasse zum Lesen und schreiben von PFP-Files Version 3. Mehr ...

Öffentliche Methoden

 PFPFile ()
 Konstruktor der Klasse. Mehr ...
 
virtual ~PFPFile ()
 Destruktor der Klasse. Mehr ...
 
int AddChunk (PFPChunk *chunk)
 Chunk hinzufügen. Mehr ...
 
void Clear ()
 Inhalt der Klasse löschen. Mehr ...
 
int DeleteChunk (PFPChunk *chunk)
 Bestimmten Chunk löschen. Mehr ...
 
int DeleteChunk (const char *chunkname)
 Chunk nach Namen löschen. Mehr ...
 
PFPChunkFindFirstChunk (const char *chunkname)
 Ersten Chunk mit einem bestimmten Namen finden. Mehr ...
 
PFPChunkFindNextChunk (const char *chunkname=NULL)
 Nächsten Chunk mit einem bestimmten Namen finden. Mehr ...
 
const char * GetAuthor ()
 Pointer auf den Author holen. Mehr ...
 
CCompression::Algorithm GetCompression ()
 Kompressionsverfahren auslesen. Mehr ...
 
const char * GetCopyright ()
 Pointer auf den Copyright-String holen. Mehr ...
 
const char * GetDescription ()
 Pointer auf die Description holen. Mehr ...
 
PFPChunkGetFirst ()
 Pointer auf ersten Chunk holen. Mehr ...
 
const char * GetID ()
 ID auslesen. Mehr ...
 
int GetMainVersion ()
 Hauptversion auslesen. Mehr ...
 
const char * GetName ()
 Pointer auf den Namen holen. Mehr ...
 
PFPChunkGetNext ()
 Pointer auf nächsten Chunk holen. Mehr ...
 
int GetSubVersion ()
 Unterversion auslesen. Mehr ...
 
void GetVersion (int *main, int *sub)
 Version auslesen. Mehr ...
 
bool Ident (CFileObject &ff)
 Prüfen, ob es sich um ein PFP-File handelt. Mehr ...
 
bool Ident (const CString &file)
 Prüfen, ob es sich um ein PFP-File handelt. Mehr ...
 
virtual void List ()
 Chunks auf STDOUT auflisten. Mehr ...
 
int Load (CFileObject *ff)
 PFP-File laden. Mehr ...
 
int Load (const char *file)
 PFP-File laden. Mehr ...
 
virtual int LoadRequest (const char *id, int mainversion, int subversion)
 Ladevorgang bestätigen. Mehr ...
 
void Reset ()
 Zeiger zum Durchwandern der Chunks zurücksetzen. Mehr ...
 
int Save (const char *filename)
 PFP-File speichern. Mehr ...
 
int SetAuthor (const char *author)
 Author setzen. Mehr ...
 
int SetCompression (CCompression::Algorithm type)
 Kompression einstellen. Mehr ...
 
int SetCopyright (const char *copy)
 Copyright setzen. Mehr ...
 
int SetDescription (const char *descr)
 Description setzen. Mehr ...
 
int SetId (const char *id)
 ID des PFP-Files setzen. Mehr ...
 
int SetName (const char *name)
 Name. Mehr ...
 
int SetVersion (int main=0, int sub=0)
 Version setzen. Mehr ...
 

Öffentliche Attribute

CMutex Mutex
 

Private Methoden

int SetParam (const char *chunkname, const char *data)
 Interne Funktion zum Speichern von vordefinierten Chunks. Mehr ...
 

Private Attribute

CList Chunks
 Verwaltung aller Chunks in einer Liste. Mehr ...
 
CCompression::Algorithm comp
 Kompressions-Flag. Mehr ...
 
CString findchunk
 Chunkname für FindFirstChunk und FindNextChunk. Mehr ...
 
char id [5]
 enthält die ID des Chunks. Die ID ist immer 4 Byte lang, gefolgt von einem 0-Byte Mehr ...
 
ppluint8 mainversion
 Hier wird die Hauptversion des Files gespeichert. Mehr ...
 
ppluint8 subversion
 Hier wird die Unterversion des Files gespeichert. Mehr ...
 

Ausführliche Beschreibung

Mit dieser Klasse können Dateien mit "PFP-File"-Header der Version 3 gelesen und geschrieben werden. Mit Version 3 wurde ein mehr generisches Format definiert, als in den beiden Vorgängerversionen. Jedes File, ganz gleich welchen Inhalt es hat, hat bis zum Ende den gleichen Aufbau. Wichtigste Neuerung dabei sind die sogenannten Chunks. Ein File kann aus bliebig vielen Chunks bestehen. Diese werden von der Klasse PFPChunk abgeleitet, bekommen einen Namen und einen beliebigen Inhalt. Diese können dann mit PFPFile::Add in das File hinzugefügt werden.

Ein PFP-File in der Version 3 ist in mehrere aufeinanderfolgende Abschnitte aufgeteilt:

  • 24 Byte langer Header
  • optionaler 8-Byte langer Komprimierungsheader
  • Chunks

Alle 4-Byte Größenangaben sind im LittleEndian-Format!

Header

Der Header einer Version 3 Datei sieht so aus:

Byte 0: String "PFP-File" 8 Bytes
Byte 8: PFP-File-Version (3) 1 Byte
Byte 9: Länge des PFP-Header (24) 1 Byte
Byte 10: File-ID, 4 Byte-String 4 Byte
Byte 14: Unterversion 1 Byte
Byte 15: Hauptversion 1 Byte
Byte 16: Komprimierung 1 Byte
0=unkomprimiert
1=Zlib
2=Bzip2
Byte 17: reserviert 3 Byte
Byte 20: Timestamp der Erstellung (UTC) 4 Byte

Im Anschluss an den Header folgen die Nutzdaten. Sofern keine Komprimierung verwendet wurde, geht es sofort mit dem ersten Chunk los. Ist die Datei komprimiert folgt erst der Komprimierungsheader:

Komprimierungsheader
Byte 0: Größe der Nutzdaten unkomprimiert in Byte 4 Byte
Byte 4: Größe der Nutzdaten komprimiert in Byte 4 Byte
Chunks

In einem PFP-File können beliebig viele Chunks vorkommen. Ein Chunk besteht immer aus einem 4-Byte langen Namen, gefolgt von einem 4-Byte Integer, der die Größe des Chunks einschließlich des Headers angibt, gefolgt von den Nutzdaten. Abgesehen von den unten aufgeführten vordefinierten Chunks, können beliebig viele Chunks mit gleichem Namen vorhanden sein.

Ein Chunk muss nicht zwingend Nutzdaten enthalten.

Byte 0: Chunkname, 4 Byte-String in Grossbuchstaben 4 Byte
Byte 4: Größe des Chunks einschließlich 8-Byte Header 4 Byte
Byte 8: Nutzdaten des Chunks
Vordefinierte Chunks

Die nachfolgenden Chunks sind vordefiniert, aber optional

  • Author

    Byte 0: AUTH
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Name des Authors mit schließendem 0-Byte

    Der Name des Authors kann mit der Funktion PFPFile::SetAuthor gesetzt werden.

  • Name

    Byte 0: NAME
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Name der Datei oder Beschreibung des Inhalts mit schließendem 0-Byte

    Der Name des Files kann mit der Funktion PFPFile::SetName gesetzt werden.

  • Description

    Byte 0: DESC
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Nähere Beschreibung mit schließendem 0-Byte

    Die Description kann mit der Funktion PFPFile::SetDescription gesetzt werden.

  • Copyright

    Byte 0: COPY
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Copyright-String mit schließendem 0-Byte

    Der Copyright-String kann mit der Funktion PFPFile::SetCopyright gesetzt werden.

End of File

Dieser Chunk ist immer der letzte in der Datei und kennzeichnet das Ende der Nutzdaten.

Byte 0: ENDF
Byte 4: 0
Nutzung
Um das Lesen und Schreiben solcher Dateien zu vereinfachen, kann die Klasse PFPFile in Kombination mit PFPChunk verwendet werden.
Seit
Version 6.1.0

Beschreibung der Konstruktoren und Destruktoren

ppl6::PFPFile::PFPFile ( )

Hier werden einige interne Variablen initialisert, die ID wird auf "UNKN" gesetzt, Version auf 0 und Kompression abgeschaltet

Seit
Version 6.1.0
ppl6::PFPFile::~PFPFile ( )
virtual

Der Destruktor sorgt dafür, dass sämtlicher von der Klasse allokierter Speicher einschließlich aller geladener Chunks freigegeben wird.

Seit
Version 6.1.0

Dokumentation der Elementfunktionen

int ppl6::PFPFile::AddChunk ( PFPChunk chunk)

Mit dieser Funktion wird ein neuer Chunk in die Klasse hinzugefügt. Der Chunk muss von der Anwendung mit "new" erstellt worden sein, einen Namen haben. Ist dies nicht der Fall, gibt die Funktion eine Fehlermeldung zurück.

Sobald der Chunk mit AddChunk an die PFPFile-Klasse übergeben wurde, wird er von der Klasse verwaltet und gegebenenfalls auch gelöscht. Die Anwendung braucht kein "delete" darauf zu machen.

Parameter
chunkPointer auf den hinzuzufügenden Chunk
Rückgabe
Bei Erfolg gibt die Funktion true (1) zurück, sonst false (0). Ein passender Fehlercode wird gesetzt.
Bemerkungen
Es ist möglich mehrere Chunks mit gleichem Namen hinzuzufügen. Der Chunk wird nur in der Klasse hinzugefügt, nicht aber in die Datei geschrieben. Zum Speichern muss explizit die Funktion PFPFile::Save aufgerufen werden.
Beispiel:
void *ptr=xxxxx; // Pointer auf die Daten
int size=xxxx; // Größe der Daten in Byte
chunk->SetName("DATA");
chunk->SetData(ptr,size);
file.AddChunk(chunk);
Seit
Version 6.1.0
void ppl6::PFPFile::Clear ( )

Mit dieser Funktion werden alle Chunks im Speicher freigegeben und die Klasse auf den Ursprungszustand zurückgesetzt, das heisst sie ist anschließend leer

Seit
Version 6.1.0
int ppl6::PFPFile::DeleteChunk ( PFPChunk chunk)

Mit dieser Funktion wird ein bestimmter Chunk aus der Klasse gelöscht.

Parameter
chunkPointer auf den zu löschenden Chunk
Rückgabe
Die Funktion liefert bei Erfolg true (1) zurück, sonst false. Ein Fehler kann nur auftreten, wenn der Chunk garnicht im PFPFile vorhanden war.
Bemerkungen
Alternativ kann auch einfach ein "delete" auf den Chunk gemacht werden.
Siehe auch
PFPFile::DeleteChunk(const char *name)
Seit
Version 6.1.0
int ppl6::PFPFile::DeleteChunk ( const char *  chunkname)

Mit dieser Funktion werden alle Chunks gelöscht, die den angegebenen Namen haben

Parameter
chunknamePointer auf den Namen des Chunks
Rückgabe
Die Funktion liefert true (1) zurück, wenn mindestens 1 Chunk gelöscht wurde, sonst false (0).
Bemerkungen
Siehe auch
PFPFile::DeleteChunk(PFPChunk *chunk)
Seit
Version 6.1.0
PFPChunk * ppl6::PFPFile::FindFirstChunk ( const char *  chunkname)

Mit dieser und der Funktion PFPFile::FindNextChunk kann man sich durch alle Chunks mit einem bestimmten Namen durchhangeln.

Parameter
chunknamePointer auf den Namen des Chunks
Rückgabe
Bei Erfolg liefert die Funktion einen Pointer auf den ersten gefundenen Chunk zurück. Wurde kein passender Chunk gefunden, wird NULL zurückgegeben und ein entsprechender Fehlercode gesetzt.
Siehe auch
Seit
Version 6.1.0
PFPChunk * ppl6::PFPFile::FindNextChunk ( const char *  chunkname = NULL)

Mit dieser und der Funktion PFPFile::FindFirstChunk kann man sich durch alle Chunks mit einem bestimmten Namen durchhangeln.

Parameter
chunknameOptionaler Pointer auf den Namen des Chunks. Wurde zuvor bereits PFPFile::GetFirstChunk aufgerufen, muss kein Name angegeben werden.
Rückgabe
Bei Erfolg liefert die Funktion einen Pointer auf den nächsten gefundenen Chunk zurück. Wurde kein passender Chunk gefunden, wird NULL zurückgegeben und ein entsprechender Fehlercode gesetzt.
Siehe auch
Seit
Version 6.1.0
const char * ppl6::PFPFile::GetAuthor ( )

Diese Funktion liefert einen Pointer auf den Author zurück

Rückgabe
Pointer auf den Author oder NULL, wenn es keinen "AUTH"-Chunk in der Datei gibt.
Siehe auch
Seit
Version 6.1.0
CCompression::Algorithm ppl6::PFPFile::GetCompression ( )

Mit dieser Funktion wird das eingestellte Kompressionsverfahren ausgelesen.

Rückgabe
ID des Kompressionsverfahrens
Siehe auch
PFPFile::SetCompression
Seit
Version 6.1.0
const char * ppl6::PFPFile::GetCopyright ( )

Diese Funktion liefert einen Pointer auf den Copyright-Text des Files zurück.

Rückgabe
Pointer auf das Copyright oder NULL, wenn es keinen "COPY"-Chunk in der Datei gibt.
Siehe auch
Seit
Version 6.1.0
const char * ppl6::PFPFile::GetDescription ( )

Diese Funktion liefert einen Pointer auf die Beschreibung zurück.

Rückgabe
Pointer auf die Beschreibung oder NULL, wenn es keinen "DESC"-Chunk in der Datei gibt.
Siehe auch
Seit
Version 6.1.0
PFPChunk * ppl6::PFPFile::GetFirst ( )

Diese Funktion liefert einen Pointer auf den ersten Chunk in der Datei zurück.

Rückgabe
Pointer auf den ersten Chunk oder NULL, wenn es keine Chunks gibt.
Siehe auch
Seit
Version 6.1.0
const char * ppl6::PFPFile::GetID ( )

Diese Funktion liefert einen Pointer auf die ID der Datei zurück

Rückgabe
Pointer auf die ID der Datei. Diese ist immer 4 Byte groß und mit einem 0-Byte terminiert
Seit
Version 6.1.0
int ppl6::PFPFile::GetMainVersion ( )

Mit dieser Funktion wird die Hauptversion der Datei ausgelesen.

Rückgabe
Hauptversion als Interger
Seit
Version 6.1.0
const char * ppl6::PFPFile::GetName ( )

Diese Funktion liefert einen Pointer auf den Namen des Files zurück.

Rückgabe
Pointer auf den Namen oder NULL, wenn es keinen "NAME"-Chunk in der Datei gibt.
Siehe auch
Seit
Version 6.1.0
PFPChunk * ppl6::PFPFile::GetNext ( )

Diese Funktion liefert einen Pointer auf den nächsten Chunk in der Datei zurück.

Rückgabe
Pointer auf den nächsten Chunk oder NULL, wenn es keine weiteren Chunks gibt.
Siehe auch
Seit
Version 6.1.0
int ppl6::PFPFile::GetSubVersion ( )

Mit dieser Funktion wird die Unterversion der Datei ausgelesen.

Rückgabe
Unterversion als Interger
Seit
Version 6.1.0
void ppl6::PFPFile::GetVersion ( int *  main,
int *  sub 
)

Mit dieser Funktion wird die Version der Datei in die beiden Parameter kopiert

Parameter
[out]mainPointer auf eine Integer-Variable, in der die Hauptversion geschrieben werden soll
[out]subPointer auf eine Integer-Variable, in der die Unterversion geschrieben werden soll
Seit
Version 6.1.0
bool ppl6::PFPFile::Ident ( CFileObject ff)
Beschreibung:
Diese Funktion prüft, ob es sich bei der geöffneten Datei ff um eine Datei im Format PFP-Files Version 3 PFP-Format Version 3 handelt. Ist dies der Fall, wird deren ID und Version eingelesen.
Parameter
ffReferenz auf eine geöffnete Datei
Rückgabe
Gibt true zurück, wenn es sich um eine Datei im PFP-Format handelt. Deren ID kann anschließend mit PFPFile::GetID ausgelesen werden, Version mit PFPFile::GetVersion bzw. PFPFile::GetMainVersion und PFPFile::GetSubVersion. Handelt es sich nicht um eine Datei im PFP-Format, gibt die Funktion false zurück. Es wird keine Exception geworfen.
bool ppl6::PFPFile::Ident ( const CString file)
Beschreibung:
Diese Funktion prüft, ob es sich bei der Datei mit dem Namen file um eine Datei im Format PFP-Files Version 3 PFP-Format Version 3 handelt. Ist dies der Fall, wird deren ID und Version eingelesen.
Parameter
fileDateiname
Rückgabe
Gibt true zurück, wenn es sich um eine Datei im PFP-Format handelt. Deren ID kann anschließend mit PFPFile::GetID ausgelesen werden, Version mit PFPFile::GetVersion bzw. PFPFile::GetMainVersion und PFPFile::GetSubVersion. Handelt es sich nicht um eine Datei im PFP-Format, gibt die Funktion false zurück. Es wird keine Exception geworfen.
void ppl6::PFPFile::List ( )
virtual

Diese Funktion listet die Namen und Größen aller Chunks auf STDOUT aus.

Seit
Version 6.1.0
int ppl6::PFPFile::Load ( CFileObject ff)

Mit dieser Funktion wird ein PFP-File in die Klasse geladen. Dabei wird zuerst der Header geladen und überprüft, ob es sich um ein gültiges PFP-File handelt. Dann wird die virtuelle Funktion PFPFile::LoadRequest mit ID, Haupt- und Unterversion als Parameter aufgerufen. Liefert diese nicht true (1) zurück, wird der Ladevorgang abgebrochen. Andernfalls wird fortgeführt und geprüft, ob der Datenbereich komprimiert ist und gegebenenfalls dekomprimiert. Erst danach werden die einzelnen Chunks eingelesen. Kommt es dabei zu Fehlern durch ungültige Chunks, werden diese ignoriert und die Funktion gibt den Fehlercode 434 zurück.

Parameter
ffPointer auf eine CFile-Klasse, mit der die einzulesende Datei geöffnet wurde.
Rückgabe
Konnte die Datei fehlerfrei eingelesen werden, gibt die Funktion true (1) zurück, im Fehlerfall false (0). Ein entsprechender Fehlercode wird gesetzt.
Bemerkungen
Vor dem Laden der Datei wird die Funktion PFPFile::Clear aufgerufen, so dass eventuell vorher vorhandene Daten verloren gehen.
Seit
Version 6.1.0
int ppl6::PFPFile::Load ( const char *  file)

Mit dieser Funktion wird ein PFP-File in die Klasse geladen. Dabei wird zuerst der Header geladen und überprüft, ob es sich um ein gültiges PFP-File handelt. Anschließend wird geprüft, ob der Datenbereich komprimiert ist und gegebenenfalls dekomprimiert. Erst danach werden die einzelnen Chunks eingelesen. Kommt es dabei zu Fehlern durch ungültige Chunks, werden diese ignoriert und die Funktion gibt den Fehlercode 434 zurück.

Parameter
filePointer auf den Namen der Datei, die geladen werden soll.
Rückgabe
Konnte die Datei fehlerfrei eingelesen werden, gibt die Funktion true (1) zurück, im Fehlerfall false (0). Ein entsprechender Fehlercode wird gesetzt.
Bemerkungen
Vor dem Laden der Datei wird die Funktion PFPFile::Clear aufgerufen, so dass eventuell vorher vorhandene Daten verloren gehen.
Seit
Version 6.1.0
int ppl6::PFPFile::LoadRequest ( const char *  id,
int  mainversion,
int  subversion 
)
virtual

Diese Funktion wird bei jedem Ladevorgang aufgerufen. Falls die Anwendung eine Klasse definiert hat, die von PFPFile abgeleitet ist, kann sie an dieser Stelle den Ladevorgang abbrechen, wenn die Datei nicht dem unterstützten Format entspricht.

Parameter
idPointer auf die 4-Byte-ID des PFP-Files
mainversionDie Hauptversion der Datei
subversionDie Unterversion der Datei
Rückgabe
Die Funktion muss true (1) zurückliefern, wenn der Ladevorgang fortgesetzt werden darf, oder false (0), wenn er abgebrochen werden soll. Optional kann auch ein Fehlercode gesetzt werden. Wird dies nicht gemacht, setzt die Ladefunktion den Fehlercode 435.
Seit
Version 6.1.0
void ppl6::PFPFile::Reset ( )

Mit dieser Funktion wird der Zeiger, der beim Durchwandern der Chunks mit den Funktionen FindNextChunk und GetNext verwendet wird, wieder auf den Anfang gesetzt.

Siehe auch
Seit
Version 6.1.0
int ppl6::PFPFile::Save ( const char *  filename)

Mit dieser Funktion wird der Inhalt der PFPFile-Klasse in eine Datei geschrieben. Dabei wird der Header und sämtliche Chunks zusammengefasst, gegebenenfalls komprimiert (siehe PFPFile::SetCompression) und im Filesystem gespeichert. Der genaue Aufbau der Datei wird weiter unten beschrieben.

Parameter
filenameDie Funktion bekommt als einzigen Parameter einen Pointer auf den Dateinamen. Es ist zu beachten, dass eine eventuell vorhandene gleichnamige Datei überschrieben wird.
Rückgabe
Konnte die Datei erfolgreich gespeichert werden, gibt die Funktion true (1) zurück, sonst false (0). Ein entsprechender Fehlercode, der Auskunft über die Art des Fehlers gibt, wird gesetzt.
Bemerkungen
Die Funktion stellt sicher, dass die Chunks in einer bestimmten Reihenfolge geschrieben werden. Die vordefinierten Chunks mit Name, Author, Copyright und Beschreibung werden in jedem Fall zuerst gespeichert, dann die restlichen Chunks.
Aufbau der PFP-Datei

Ein PFP-File in der Version 3 ist in mehrere aufeinanderfolgende Abschnitte aufgeteilt:

  • 24 Byte langer Header
  • optionaler 8-Byte langer Komprimierungsheader
  • Chunks

Alle 4-Byte Größenangaben sind im LittleEndian-Format!

Header

Der Header einer Version 3 Datei sieht so aus:

Byte 0: String "PFP-File" 8 Bytes
Byte 8: PFP-File-Version (3) 1 Byte
Byte 9: Länge des PFP-Header (24) 1 Byte
Byte 10: File-ID, 4 Byte-String 4 Byte
Byte 14: Unterversion 1 Byte
Byte 15: Hauptversion 1 Byte
Byte 16: Komprimierung 1 Byte
0=unkomprimiert
1=Zlib
2=Bzip2
Byte 17: reserviert 3 Byte
Byte 20: Timestamp der Erstellung (UTC) 4 Byte

Im Anschluss an den Header folgen die Nutzdaten. Sofern keine Komprimierung verwendet wurde, geht es sofort mit dem ersten Chunk los. Ist die Datei komprimiert folgt erst der Komprimierungsheader:

Komprimierungsheader
Byte 0: Größe der Nutzdaten unkomprimiert in Byte 4 Byte
Byte 4: Größe der Nutzdaten komprimiert in Byte 4 Byte
Chunks

In einem PFP-File können beliebig viele Chunks vorkommen. Ein Chunk besteht immer aus einem 4-Byte langen Namen, gefolgt von einem 4-Byte Integer, der die Größe des Chunks einschließlich des Headers angibt, gefolgt von den Nutzdaten. Abgesehen von den unten aufgeführten vordefinierten Chunks, können beliebig viele Chunks mit gleichem Namen vorhanden sein.

Ein Chunk muss nicht zwingend Nutzdaten enthalten.

Byte 0: Chunkname, 4 Byte-String in Grossbuchstaben 4 Byte
Byte 4: Größe des Chunks einschließlich 8-Byte Header 4 Byte
Byte 8: Nutzdaten des Chunks
Vordefinierte Chunks

Die nachfolgenden Chunks sind vordefiniert, aber optional

  • Author

    Byte 0: AUTH
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Name des Authors mit schließendem 0-Byte

    Der Name des Authors kann mit der Funktion PFPFile::SetAuthor gesetzt werden.

  • Name

    Byte 0: NAME
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Name der Datei oder Beschreibung des Inhalts mit schließendem 0-Byte

    Der Name des Files kann mit der Funktion PFPFile::SetName gesetzt werden.

  • Description

    Byte 0: DESC
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Nähere Beschreibung mit schließendem 0-Byte

    Die Description kann mit der Funktion PFPFile::SetDescription gesetzt werden.

  • Copyright

    Byte 0: COPY
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Copyright-String mit schließendem 0-Byte

    Der Copyright-String kann mit der Funktion PFPFile::SetCopyright gesetzt werden.

End of File

Dieser Chunk ist immer der letzte in der Datei und kennzeichnet das Ende der Nutzdaten.

Byte 0: ENDF
Byte 4: 0
Nutzung
Um das Lesen und Schreiben solcher Dateien zu vereinfachen, kann die Klasse PFPFile in Kombination mit PFPChunk verwendet werden.
Seit
Version 6.1.0
int ppl6::PFPFile::SetAuthor ( const char *  author)

Mit dieser Funktion wird automatisch ein Author-Chunk ("AUTH") angelegt. Dabei ist sichergestellt, dass der Chunk nur ein einziges mal in der Datei vorkommt.

Parameter
authorPointer auf einen Null-terminierten String mit dem Namen des Authors
Rückgabe
Bei Erfolg liefert die Funktion true (1) zurück, sonst false (0). Ein entsprechender Fehlercode wird gesetzt.
Siehe auch
Seit
Version 6.1.0
int ppl6::PFPFile::SetCompression ( CCompression::Algorithm  type)

Mit dieser Funktion wird festgelegt ob und welche Kompression beim Speichern verwendet werden soll.

Parameter
typeEin Wert, der die Art der Kompression angibt. Mögliche Werte sind:
Rückgabe
Die Funktion liefert true(1) zurück, wenn die Komprimierungsmethode erfolgreich gesetzt werden konnt, sonst false (0)
Seit
Version 6.1.0
int ppl6::PFPFile::SetCopyright ( const char *  copy)

Mit dieser Funktion wird automatisch ein Copyright-Chunk ("COPY") angelegt. Dabei ist sichergestellt, dass der Chunk nur ein einziges mal in der Datei vorkommt.

Parameter
copyPointer auf einen Null-terminierten String mit dem Copyright-Text
Rückgabe
Bei Erfolg liefert die Funktion true (1) zurück, sonst false (0). Ein entsprechender Fehlercode wird gesetzt.
Siehe auch
Seit
Version 6.1.0
int ppl6::PFPFile::SetDescription ( const char *  descr)

Mit dieser Funktion wird automatisch ein Description-Chunk ("DESC") angelegt. Dabei ist sichergestellt, dass der Chunk nur ein einziges mal in der Datei vorkommt.

Parameter
descrPointer auf einen Null-terminierten String mit der Beschreibung
Rückgabe
Bei Erfolg liefert die Funktion true (1) zurück, sonst false (0). Ein entsprechender Fehlercode wird gesetzt.
Siehe auch
Seit
Version 6.1.0
int ppl6::PFPFile::SetId ( const char *  id)

Mit dieser Version wird die ID des PFP-Files festgelegt. Eine ID muss zwingend 4 Byte lang sein und darf nur US-ASCII-Zeichen enthalten.

Parameter
idPointer auf einen 4-Byte langen String, der mit 0 terminiert ist.
Rückgabe
Bei Erfolg gibt die Funktion true (1) zurück, sonst false (0).
Seit
Version 6.1.0
int ppl6::PFPFile::SetName ( const char *  name)

Mit dieser Funktion wird automatisch ein Namens-Chunk ("NAME") angelegt. Dabei ist sichergestellt, dass der Chunk nur ein einziges mal in der Datei vorkommt.

Parameter
namePointer auf einen Null-terminierten String mit dem Namen des Files
Rückgabe
Bei Erfolg liefert die Funktion true (1) zurück, sonst false (0). Ein entsprechender Fehlercode wird gesetzt.
Siehe auch
Seit
Version 6.1.0
int ppl6::PFPFile::SetParam ( const char *  chunkname,
const char *  data 
)
private

Diese Funktion wird intern verwendet, um die vordefinierten Text-Chunks zu speichern. Sie stellt sicher, dass jeder Chunk nur einmal vorkommt.

Parameter
chunknamePointer auf den Namen des Chunks.
dataPointer auf den zu setzenden Text-String
Rückgabe
Bei Erfolg gibt die Funktion true (1) zurück, sonst false (0).
Siehe auch
Die Funktion wird intern von folgenden Funktionen aufgerufen:
Seit
Version 6.1.0
int ppl6::PFPFile::SetVersion ( int  main = 0,
int  sub = 0 
)

Mit dieser Funktion wird die Version des PFP-Files gesetzt

Parameter
mainHauptversion
subUnterversion
Rückgabe
Die Funktion liefert 1 zurück, wenn die Version erfolgreich gesetzt werden konnte, oder 0 bei einem Fehler. Ein Fehler kann nur auftreten, wenn eine der Versionskomponenten kleiner 0 oder größer 255 ist.
Bemerkungen
Haupt- und Unterversion werden jeweils in einem einzelnen Byte gespeichert. Daher darf die Version nicht größer als 255 werden.
Seit
Version 6.1.0

Dokumentation der Datenelemente

ppl6::PFPFile::Chunks
private
Seit
Version 6.1.0
ppl6::PFPFile::comp
private

In dieser Variable wird die Art der Komprimierung gespeichert:

  • 0 = keine Komprimierung
  • 1 = Zlib
  • 2 = Bzip2
Seit
Version 6.1.0
ppl6::PFPFile::findchunk
private
Seit
Version 6.1.0
ppl6::PFPFile::id
private
Seit
Version 6.1.0
ppl6::PFPFile::mainversion
private
Seit
Version 6.1.0
CMutex ppl6::PFPFile::Mutex
ppl6::PFPFile::subversion
private
Seit
Version 6.1.0

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: