minizip

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

minizip

Beitrag von ts-soft »

Statische lib + include, die zip- und unzipfunktionen zur Verfügung stellt.

Im Gegesatz zu anderen Libs, enthält die statisch Lib nur ergänzende
Funktionen zur mit pb gelieferten zlib.lib, so das Inkompatibilitäten unwahrscheinlich sind.

Die lib unterstützt x86 und x64 Plattformen, ohne das Anpassungen am Code
notwendig werden.

Code: Alles auswählen

*result = ZIP_PackMemory(*source[, sourceLen[, level]])
	*source = MemoryPointer
	sourceLen = Size of Memory (optional)
	level = compressionslevel (optional)
	
	*result = MemoryPointer to packed memory or 0 if failed
	
result = ZIP_UnpackMemory(*source, *dest)
	result = Size of *dest or 0 if failed
	
void = ZIP_SetPassword([password.s])
	password = password for ZIP or UNZIP

result = ZIP_GetFilesCount(Zip_FileName.s)
	Zip_FileName.s = filename with path
	
	result = count of files/dirs
	
result.s = ZIP_GetFileComment(Zip_FileName.s)
	Zip_FileName.s = filename with path
	
	result is the global comment of the zipfile
	
result.s = ZIP_GetFileInfo(Zip_FileName.s, FileNumber[, *FileInfo.unz_file_info])
	Zip_FileName.s = filename with path
	FileNumber = filenumber in archiv
	*FileInfo = stores all infos in the structure (optional)
	
	result = filename

result = ZIP_GetFileNumber(Zip_FileName.s, FileName.s)
	Zip_FileName.s = filename with path
	FileName = filename with relative path in archiv (not casesensitive)
	
	result = filenumber or 0 if failed

result = ZIP_IsZipArchive(Filename.s)
	FileName.s = filename with path
	
	result = #ZIP_SUPPORT_OK or #ZIP_SUPPORT_NOT_ARCHIVE or #ZIP_SUPPORT_ERROR_IN_ARCHIVE

result = ZIP_IsPasswordRequired(Zip_FileName.s, FileNumber)
	Zip_FileName.s = filename with path
	FileNumber = filenumber in archiv

	result = #True, password encrypted, or #False, not password encrypted
	
result = ZIP_ExtractFile(Zip_FileName.s, FileNumber, Output_Path.s[, CreatePath[, Callback]])
	Zip_FileName.s = filename with path
	FileNumber = filefumber in archiv
	Output_Path.s = path to extract file
	CreatePath = #True or #False (#True creates subdirectories in archiv, optional = #True)
	Callback = adress of callbackprocedure, Prototyped as: ZIP_PackerCallback(progress)*
		*you can return #UNZIP_CANCEL from Callback to cancel
	
	result = #True on success

result = ZIP_ExtractArchiv(Zip_FileName.s, Output_Path.s[, CreatePath[, Callback]])
	Zip_FileName.s = filename with path
	Output_Path.s = path to extract file
	CreatePath = #True or #False (#True creates subdirectories in archiv, optional = #True)
	Callback = adress of callbackprocedure, Prototyped as: ZIP_ArchivCallback(progress, files)*
		*you can return #UNZIP_CANCEL from Callback to cancel
	
	result = count of extracted files

*result = ZIP_CatchFile(Zip_FileName.s, FileNumber[, Callback])
	Zip_FileName.s = filename with path
	FileNumber = filenumber in archiv
	Callback = adress of callbackprocedure, Prototyped as: ZIP_PackerCallback(progress)*
		*you can return #UNZIP_CANCEL from Callback to cancel
		
	*result = memorypointer or 0 if failed

result = ZIP_FileCreate(Zip_FileName.s)
	Zip_FileName.s = filename with path
	creates a empty zipfile
	
	result = ziphandle or 0 if failed

result = ZIP_FileOpen(FileName.s[, Append_Method])
	FileName.s = filename with path (*.*, file must exist!)
	Append_Method = #APPEND_STATUS_CREATEAFTER or #APPEND_STATUS_ADDINZIP (optional)
	You can add zipfiles to your exe (sfx) or another zipfile
	
	result = ziphandle or 0 if failed
	
void = ZIP_FileClose(ZipHandle[, Comment.s])
	ZipHandle = handle comes as result of ZIP_FileCreate() or ZIP_FileOpen()
	Comment = string or textfilename (with path) *.txt! (optional)  
	
	no result
	
result = ZIP_FileAdd(ZipHandle, Filename.s, Archive_Filename.s[, Compression[, Callback]])
	ZipHandle = result from ZIP_FileCreate() or ZIP_FileOpen()
	Filename.s = filename with path to add to archive
	Archive_Filename.s = filename with relative path in archive
	Compression = #Z_NO_COMPRESSION or #Z_BEST_SPEED or #Z_BEST_COMPRESSION or #Z_DEFAULT_COMPRESSION (optional)
	Callback = adress of callbackprocedure, Prototyped as: ZIP_PackerCallback(progress)*
		*you can return #ZIP_CANCEL from Callback to cancel
	
	result = #True on success

result = ZIP_MemAdd(ZipHandle, *source, sourceLen, Archive_Filename.s[, Compression[, Callback]])
	ZipHandle = result from ZIP_FileCreate() or ZIP_FileOpen()
	*source = memorypointer
	sourceLen = memorysize in bytes
	Archive_Filename.s = filename with relative path in archive
	Compression = #Z_NO_COMPRESSION or #Z_BEST_SPEED or #Z_BEST_COMPRESSION or #Z_DEFAULT_COMPRESSION (optional)
	Callback = adress of callbackprocedure, Prototyped as: ZIP_PackerCallback(progress)*
		*you can return #ZIP_CANCEL from Callback to cancel
	
	result = #True on success
Solltet ihr Fehler finden, so meldet diese bitte!
von Zeit zu Zeit wirds auch kleinere Erweiterungen geben, Wünsche dürfen geäußert werden.

Download

Alternativer Downloadlink: http://www.rsbasic.de/backupprogramme/temp/minizip.zip

Gruß
Thomas
Zuletzt geändert von ts-soft am 03.08.2012 22:49, insgesamt 9-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
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Kann man auch ZIP-Dateien die mittels IncludeBinary eingebunden werden entpacken?
Windows 10 Pro, 64-Bit / Outtakes | Derek
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 »

Fluid Byte hat geschrieben:Kann man auch ZIP-Dateien die mittels IncludeBinary eingebunden werden entpacken?
Könnte gehen, probiere es einfach mal ob er die findet und sag Bescheid :wink:

// edit:
geht problemlos :D
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 »

Da zlib keine Umlaute unterstütz, hier eine kleine Hilfsfunktion zur Umwandlung, siehe: http://www.purebasic.fr/german/viewtopi ... 516#156516

Code: Alles auswählen

Procedure AsciiDosUS_To_AsciiWinWestern(StringPointer.i)
  EnableASM
  ; Transforms a string from ASCII DOS Latin US to "Westeuropa" oder "Western") ISO 8859-1
  ! LEA Ebx, [TableConversion]
  MOV Ecx, StringPointer       ;    --> INLINE ASM !
  ! Boucle :
  ! MOV al, byte [Ecx]
  ! TEST al, al
  ! JZ FinChaine
  ! CMP  al, $80
  ! JNA  CarSuivant
  ! ADD  al, -$80
  ! XLATB
  ! MOV  byte[Ecx], al
  ! CarSuivant:
  ! INC Ecx
  ! JMP Boucle
  ! TableConversion:
  ! DB    $80, $FC, $82, $83, $E4, $85, $86, $87, $88, $89, $8A, $8B, $8C, $8D, $C4, $8F
  ! DB    $90, $91, $92, $93, $F6, $95, $96, $97, $98, $D6, $DC, $9B, $9C, $9D, $9E, $9F
  ! DB    $A0, $A1, $A2, $A3, $A4, $A5, $A6, $A7, $A8, $A9, $AA, $AB, $AC, $AD, $AE, $AF
  ! DB    $B0, $B1, $B2, $B3, $B4, $B5, $B6, $B7, $B8, $B9, $BA, $BB, $BC, $BD, $BE, $BF
  ! DB    $C0, $C1, $C2, $C3, $8E, $C5, $C6, $C7, $C8, $C9, $CA, $CB, $CC, $CD, $CE, $CF
  ! DB    $D0, $D1, $D2, $D3, $D4, $D5, $99, $D7, $D8, $D9, $DA, $DB, $9A, $DD, $DE, $E1
  ! DB    $E0, $DF, $E2, $E3, $84, $E5, $E6, $E7, $E8, $E9, $EA, $EB, $EC, $ED, $EE, $EF
  ! DB    $F0, $F1, $F2, $F3, $F4, $F5, $94, $F7, $F8, $F9, $FA, $FB, $81, $FD, $FE, $FF
  ! FinChaine:
  DisableASM
EndProcedure
// edit:
Update, hab das mal testweise eingebaut, hoffe mal das funktioniert auch überall :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
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Muss ich da, wenn ich unicode benutze, irgendwas beachten?
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

ts-soft hat geschrieben:Könnte gehen, probiere es einfach mal ob er die findet und sag Bescheid :wink:

// edit:
geht problemlos :D
Hmm, meinen wir das Gleiche? Ich habe keine Befehle gesehen die das ermöglichen würden. Vielleicht sollte ich nochmal im Detail beschreiben welche Funktionalität ich benötige:

- Ich erstelle ein ZIP-Archiv welches 5 Dateien enthält
- Ich binde das Archiv in meine Anwendung mit IncludeBinary ein
- Ich erstelle eine .EXE die dann das Archiv beinhaltet, keine externen Dateien
- Ich übergebe die Speicheradresse (?label) an eine bestimmte Funktion aus der zlib
- Ich kann eine beliebige Datei per Index oder Pfad angeben die dann mit einer weiteren Funktion aus der zlib in den Speicher extrahiert wird
- das Ganze funktioniert ohne externe Dateien und ohne eine Datei auf Pladde zwischenzuspeichern

An dieser Stelle bitte ich schon mal um Nachsicht falls ich einfach zu blind bin und entsprechende Stelle überlesen hab'. <)
Windows 10 Pro, 64-Bit / Outtakes | Derek
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 »

HeX0R hat geschrieben:Muss ich da, wenn ich unicode benutze, irgendwas beachten?
Die ZLib unterstützt intern kein Unicode, also Pfade und Dateinamen dürfen
nur ASCII-Zeichen enthalten.

@Fluid Byte
Nicht so kompliziert, ohne Label

Code: Alles auswählen

mem = ZIP_CatchFile(ProgramFilename(), FileNumber)
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
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

ts-soft hat geschrieben: @Fluid Byte
Nicht so kompliziert, ohne Label

Code: Alles auswählen

mem = ZIP_CatchFile(ProgramFilename(), FileNumber)
Zu spät! :twisted:

Genau den Tipp hat gnozal heute auch gepostet und nun funktioniert alles perfekt.
Oder soll ich doch deine LIB nehmen. Hmmm ...

ts-soft oder gnozal, ts-soft oder gnozal, ts-soft oder ....

Ist doch eigentlich latte oder gibts da nun eklatante Unterschiede zur seiner PureZIP DLL?
Windows 10 Pro, 64-Bit / Outtakes | Derek
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 »

Fluid Byte hat geschrieben: Ist doch eigentlich latte oder gibts da nun eklatante Unterschiede zur seiner PureZIP DLL?
PureZIP ist schon etwas ausgereifter und enthält mehr Funktionen. Wenn Du
seine DLL nimmst, kann es auch keine Probleme mit PB geben, wegen
png usw. wo PB die ZLib.lib nutzt und er dieselben Funktionen aus seiner
statischen Lib.

Wenn Du aber x64 benötigst oder Dir Sourcen lieber sind, nimm mein :wink:
Beides beruht auf Sourcen von hier: http://www.winimage.com/zLibDll/
Ich, bzw. edel, hat mir eine statische Lib davon erstellt, die nur die minizip
funktionalität enthält, für den Rest wird zlib.lib von PB verwendet, das sollte
Kompatibler sein.

Für erweiterungen kannste Dir die unzip.h und zip.h aus den Sourcen von der
Webpage ansehen.

Ich persönlich brauchte unbedingt eine 64-Bit Version und mag keine Tailbited UserLibs

Die statische Lib meines Paketes läßt sich auch problemlos durch eine der
dortigen, den DLLs beigefügten importlibs, austauschen. Kannst also
meine Sourcen mit den dortigen DLLs nutzen, lediglich aus ImportC
Import machen und die andere lib angeben.

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
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

Ei, Ei, Ei - ich nutze bis jetzt gnozals lib. Ist deine wirklich Mini? Ich brauch eigendlich nur die Ein- und Auspackfunktion. Mal schauen...
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Antworten