PBData und UDRes

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

PBData und UDRes

Beitrag von ts-soft »

Dies ist eine PureBasic Library um Resourcen in gepackter (und optional
verschlüsselter) Form in die Exe zu packen. Im Gegensatz zu
IncludeBinary, geschieht dies nach Windows-Art, in speicherschonender
Form

Bei Benutzung der beigefügten Include-Datei wird automatisch ein
CRC-Check gemacht.
Desweiteren wird bei Benutzung eines Keys (Verschlüsselung), dieser
Anhand eines gespeicherten MD5 Fingerprint (der Key selber wird nicht
gespeichert) überprüft

Diese UserLibrary unterstützt zur Zeit weder Unicode, noch Threadsafe,
was aber auch nicht erforderlich ist, da die erstellten Resourcen (*.res)
mithilfe einer Include-Datei in allen Programmen (ASCII, Unicode oder
Threadsafe) genutzt werden können

Die UserLibrary ist nur zur Erstellung der PBDATA-Resourcen, welche
einfach Importiert werden können, erforderlich. Die Nutzung erfolgt
ausschließlich über die Include-Datei, wobei keine UserLibraries erforderlich sind.

Werden mehrere Exen oder DLLs verwendet, so genügt es die Resourcen
in einer davon zu packen, die anderen können diese mitbenutzen!

Dies ist Wohl die erste Userlib, die eine LinkList() als Parameter erwartet (keinen Pointer :wink: )

Beispiel zur Syntax der Erstellung:

Code: Alles auswählen

; Als erstes ein LinkList vom Typ String erstellen
NewList MeineDatas.s()

; Alle benötigten Resourcen hinzufügen
AddElement(MeineDatas())
MeineDatas() = #PB_Compiler_Home + "Examples\Sources\Data\PureBasicLogo.bmp"

AddElement(MeineDatas())
MeineDatas() = #PB_Compiler_Home + "Examples\Sources\Data\PureBasic.bmp"

; und zum Schluß das PBData Resource erstellen
If PBDataCreate("Test", MeineDatas(),"password")
  MessageRequester("PBData", "Test.res erfolgreich erstellt")
EndIf 
Sieht nicht nur einfach aus, es ist es auch.

Beispiel zur Nutzung:

Code: Alles auswählen

XIncludeFile "PBData_Include.pbi"

Import "Test.res" : EndImport

Enumeration 1
  #PBData_PureBasicLogo
  #PBData_PureBasic
EndEnumeration

ImgData = GetPBData(#PBData_PureBasicLogo, "password")

If ImgData > 0
  Image = CatchImage(#PB_Any, ImgData)
  FreeMemory(ImgData)
Else
  Select ImgData
    Case #PBDATA_Error_Unknown
      Debug "Unbekannter Fehler, Resource nicht gefunden oder zu wenig Speicher?"
    Case #PBDATA_Error_Encryption
      Debug "Key-Fehler, überprüfen Sie, ob das richtige Passwort eingegeben wurde!"
    Case #PBDATA_Error_CRC32
      Debug "CRC32-Fehler, korrupte Datei"
  EndSelect
  End
EndIf

If OpenWindow(0,0,0,381,68,"PBData Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    ImageGadget(1,0,0,381,68,ImageID(Image))
  EndIf
  Repeat
  Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf

Debug SavePBData("test.bmp", #PBData_PureBasic, "password")
Sollte interesse bestehen, werde ich noch eine GUI dafür basteln,
andernfalls, mir genügt es auch so :wink:

Download 66 KiBi
Zuletzt geändert von ts-soft am 09.01.2007 22:10, insgesamt 1-mal geändert.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: PBData UserLib

Beitrag von Kiffi »

Ich hatte ja schon die Ehre, eine Vorabversion der Lib testen zu dürfen
und ich muss sagen, dass das ein schönes und nützliches Stückchen Code
ist. :allright:

Wieder mal ein weiteres Qualitätsprodukt aus dem Hause ts-soft :-)

> Sollte interesse bestehen, werde ich noch eine GUI dafür basteln,

na klar besteht Interesse!

> andernfalls, mir genügt es auch so Wink

nix da! An die Tastatur, Sklave! ;-)

Vielen Dank & Grüße ... Kiffi
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: PBData UserLib

Beitrag von ts-soft »

Kiffi hat geschrieben: > Sollte interesse bestehen, werde ich noch eine GUI dafür basteln,

na klar besteht Interesse!
puh
Kiffi hat geschrieben: > andernfalls, mir genügt es auch so Wink

nix da! An die Tastatur, Sklave! ;-)
Okay Chef :mrgreen:

Bevor ich mir zuviel Arbeit mache habe ich mal aus meiner Sicht die Vor- und
Nachteile gegenüber ähnlichen Tools zusammengestellt.
Nachteil:
Es werden keine Dateinamen gespeichert, nur nummerischer Aufruf möglich.
Keine Unterstützung für anderes OS möglich.
Bei Änderung Neuerstellung erforderlich.

Vorteil:
Speicherschonende Integration in die Exe oder DLL durch dazulinken als Resource.
Sehr schmaler Header (long für TotalSize, long für CRC32 und 33 Bytes für Fingerprint).
Schnelles auffinden durch durch FindResource API.
Zur Zeit einziges Pack, welches mit Unicode und ThreadSafe klarkommt (nicht die Lib).
Bevor die GUI erstellt wird, werde ich erstmal eine gewisse Testphase
abwarten, das spart hinterher bestimmt Zeit
:wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Update:

Schnellere RC4-Routine in Lib und Include ( :allright: Friedhelm)

Fehlerbeseitigung:
Hab leider nicht berücksichtigt, das der PureBasic-Packer manche Dateien,
insbesondere jpg und gif, nicht packen kann :oops:

Diese werden jetzt ungepackt hinzugefügt (Verschlüsselung erfolgt aber
korrekt). Angepaßt wurden die Lib und die Include-Datei. Bereits erstellte
Packs sollten weiterhin funktionieren.

Download siehe erster Beitrag

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

PBData_Packer basiert auf der PBData Userlib. Zur Nutzung werden keine
weiteren Dateien, ausser PB4, benötigt

Bedienung ist recht einfach, man braucht nur die zu packenden Dateien
draufdroppen, auch Ordner, sowie mehrere Darteien/Ordner, sind möglich.
Unterordner werden ignoriert. Einzelne Einträge lassn sich per
Kontextmenü wieder entfernen.

Einstellungen treffen, Packrate, Schlüsselkey usw. und dann Pack and Save
drücken. Es wird eine Resourcendatei erstellt (*.res), sowie eine zu dieser
passende Includedatei. Von bereits vorhandenen gleichnamigen Dateien
wird ein Backup erstellt. Desweitern wird eine Packliste erstellt
(*.pbdata_lst) welche man später nur auf den Packer droppen braucht, um
dieselben Dateien in einem neuen Pack zu erfassen.

Im Ordner Examples findet ihr ein bekanntes Spiel, in einer hierfür
angepaßten Version ;)

Einschränkungen: Die einzelnen Dateien dürfen nicht grösser als 10 MB
sein! Der Packer bemerkt dies aber und gibt eine entsprechende Meldung
aus.

Die gepackten Dateien lassen sich sowohl in Dlls und Exen verwenden,
auch welche die Unicode oder Threadsafe kompiliert werden sollen.

Bild
Download des Packers

Feedback erwünscht, und vor allem viel Spaß damit für Kiffi
:wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag von Frogger »

Dein Tool sieht klasse aus und funktioniert ganz gut.
Mal ne Frage:
Die einzelnen Dateien dürfen nicht grösser als 10 MB sein!
Wieso? :?
[PB4.20]
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Frogger hat geschrieben:Dein Tool sieht klasse aus und funktioniert ganz gut.
Mal ne Frage:
Die einzelnen Dateien dürfen nicht grösser als 10 MB sein!
Wieso? :?
Bei bereits komprimierten Dateien, z.B. *.zip, erhalte ich vom PB-Packer ab
ca. 12 MB keine Fehlermeldung :freak: , ansonsten werden die Dateien
nämlich ungepackt, aber verschlüsselt, falls key, hinzugefügt.
Diese unbemerkten Fehler erzeugen fehlerhafte Resourcen, welche dann
auch von Polink bemängelt werden.

Bis ich eine bessere Lösung habe, habe ich diesen Kompromiss gewählt,
erstmal.

Freut mich, wenns ansonsten gut funktioniert
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Packer-Update:
Menupunkt zum deaktivieren des Sizelimits hinzugefügt. Die daraus
resultierenen *.res sollten aber getestet werden, vor allem wenn Dateien
des Typs *.zip, *.jpg, *.png und *.gif verwendet werden. Desweiteren sollte
man bedenken, auch der Windows-Speicher ist endlich. Die Lib selber sollte
bis 2 GB keine Probleme haben :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Komplett neue Version

Compiliert direkt zu *.res ohne Verwendung eines anderen
Resource-Compilers, ohne Verwendung eines Resource-Skripts oder
temporärer Dateien. Gepackt wird jetzt mit BriefLZ, welches in der Lib
integriert ist. Die neue Version heißt jetzt UDRes (Userdefined Resource) und
ist nicht kompatibel zur vorherigen Version, deshalb hier der Extra download:

Download
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Beitrag von H.Brill »

Hallo,
ist ja genial. Hab mal grad die Hilfe dazu gelesen. Da könnte ich
mir ja einen kleinen Resourcen - Mananger bauen, da ja UDRes-Create(),
UDRes_Open() und UDResAddFile() schon dabei sind. Man hat ja
manchmal verschieden Resourcedateien für verschiedene Progs.

Meine Fragen nun :

Kannst du vielleicht (wenn machbar) was einbauen, womit man
Dateien in der Resource auch löschen kann ?
UDRes_DeleteFile(FileID, filename.s oder Nr.)

weiterhin hilfreich wären :
- anzahl.l = UDRes_CountFiles(FileID)
- filename.s = UDRes_GetFileName(FileID, Nr)

Du kannst ja mal schauen, was machbar ist.
Antworten