Entwickler-Ecke
Algorithmen, Optimierung und Assembler - LZW Dekomprimierung
Mr_Sven - Mo 12.02.07 17:19
Titel: LZW Dekomprimierung
Hi Leute,
habe ein Problem mit dem Dekomprimieren von UnixCompressed Files.
Ich habe die unlzw Funktion von gzip 1.24 von C nach Pascal portiert.
Es funktionier soweit alles, nur das er bei größeren Dateien probleme bekommt.
Vieleicht könnt ihr euch das mal anschauen, ich denke ich habe irgent ein Fehler bei der Portierung gemacht.
ZIP File:
comp.Z - Komptimiertes File
uncomp_tobe - Unkomprimiertes File wie es gZip entpackt
uncomp - Unkomprimiertes File wie es die Unit entpackt
lzwUnit.pas - LZW Unit
lzw.c - gZip LZW Code
lzw.h - gZip LZW Header
unlzw.c - gZip unLZW Code
Delete - Mo 12.02.07 17:28
sag mal, weshalb compilierst dir das C file nicht gleich in delphi? oder bindest das compilat dann anschliessend als Obj file in eine Unit ein?
dann würdest dir doch die ganze arbeit ersparen, von den möglichen fehlerquellen mal abgesehen.
Mr_Sven - Mo 12.02.07 17:31
naja, wenns funktioniert.
haste nen Tut irgentwo?
Gruß Sven
Delete - Mo 12.02.07 17:47
kompilieren kannste es ja mit jeden handelsüblichen C compiler oder eben mit delphi2006 ab SP1, hier kannste das auch einbinden und mischen.
ansonsten gehts einfach per direktive
{$L DeinObjFile.OBJ}
und der deklaration der funktionen als external;
bspw: procedure moveword(var sourc, dest;count: integer); external;
'n C compiler gibts hier:
DOWNLOAD TURBO C oder bei borland/codegear zum kostenlosen download. <HTH>
Mr_Sven - Di 13.02.07 10:39
So, hab den fehler gefunden, (Happy)
nun funktionierts.
Habe das Unit noch mit nen Kommentar versehen, falls jemand mal drüber stolpert, könnt ihr gerne verwenden.
Gruß Sven
Chryzler - Di 13.02.07 16:43
Mr_Sven hat folgendes geschrieben: |
So, hab den fehler gefunden, (Happy)
nun funktionierts.
Habe das Unit noch mit nen Kommentar versehen, falls jemand mal drüber stolpert, könnt ihr gerne verwenden.
Gruß Sven |
Das Teil kann ich sogar sehr gut gebrauchen. Thx!
Chryzler - Di 13.02.07 16:58
Ich mir gerade daraus eine DLL gebastelt, die die zwei Funktionen exportiert. Vielleicht kann es ja jemand gebrauchen. :)
BenBE - Mi 14.02.07 15:30
Dein Goto zu ResetBuf kannst Du auch mit dem Befehl Continue realisieren, der immer auf den nächsten Schleifendurchlauf springt (zusätzlich aber auch die Abbruchbedingung neu prüft).
Ansonsten würde mich auch die Portierung der LZW Compress-Funktionen für ein Projekt interessieren.
BTW: Hatte nicht Windows auch eine LZW.dll???
Chryzler - Mi 14.02.07 15:54
BenBE hat folgendes geschrieben: |
BTW: Hatte nicht Windows auch eine LZW.dll??? |
Ich dachte auch, ich hätte schon mal was von einer LZW.dll gehört. :gruebel: Bei mir ist jedenfalls keine da. :nixweiss:
Mr_Sven - Di 20.02.07 15:57
BenBE hat folgendes geschrieben: |
Dein Goto zu ResetBuf kannst Du auch mit dem Befehl Continue realisieren, der immer auf den nächsten Schleifendurchlauf springt (zusätzlich aber auch die Abbruchbedingung neu prüft).
|
Kann sein, habe dies nicht so genau überprüft.
Ausserdem sind das zwei verschachtelte schleifen und ich weis nicht inwiefern sich die Abbruchbedingung verändert, habe das halt blanco übernommen.
Ich denke die werden sich schon was dabei gedacht haben.
BenBE hat folgendes geschrieben: |
Ansonsten würde mich auch die Portierung der LZW Compress-Funktionen für ein Projekt interessieren.
|
Das habe ich auch überlegt, nur das Problem ist hierbei, dass der Komprimierungsalgorithmus (watn langes Wort) Patentiert ist und man Lizensgebühren zahlen muss.
Siehe:
http://de.wikipedia.org/wiki/Lempel-Ziv-Welch-Algorithmus
Ich wollt mir hier keine Geldstrafe einhandeln.
BenBE - Di 20.02.07 19:37
Mr_Sven hat folgendes geschrieben: |
BenBE hat folgendes geschrieben: | Ansonsten würde mich auch die Portierung der LZW Compress-Funktionen für ein Projekt interessieren.
|
Das habe ich auch überlegt, nur das Problem ist hierbei, dass der Komprimierungsalgorithmus (watn langes Wort) Patentiert ist und man Lizensgebühren zahlen muss. Siehe: http://de.wikipedia.org/wiki/Lempel-Ziv-Welch-Algorithmus
Ich wollt mir hier keine Geldstrafe einhandeln. |
Soweit ich das unter
http://de.wikipedia.org/wiki/Lempel-Ziv-Welch-Algorithmus#Patente sehe, ist das betreffende Patent 2004 ausgelaufen. Für die anderen beiden erwähnten Patente, sieht das genauso aus (wenn man von den 20 Jahren ausgeht). IANAL.
Mr_Sven - Do 22.02.07 12:53
Du könntest recht haben.
Hat vieleicht irgentjemand nen C Programm oder sowas was LZW Komprimieren kann.
Mittlerweite kann ich ja ganz gut C Programme nach Pascal portieren.
Gruß Sven
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!