home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Der Mediaplex Sampler - Die 6 von Plex
/
6_v_plex.zip
/
6_v_plex
/
DISK5
/
WIN_12
/
IDEPIX2.ZIP
/
TIFFACS.ZIP
/
UNPACKBI.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-06-23
|
2KB
|
86 lines
/*-------------------------------------------------------
T I F F A C S : Unterstⁿtzungsroutinen fⁿr TIFF-Dateien
Ursprⁿnglich von Aldus, von mir auf dem
Walnut-Creek - Source-Code-ROM gefunden.
Der ursprⁿngliche Source ist TIFF 4.0 und
auch ansonsten ein ziemlicher Mⁿll.
Diese Version hat Funktionsprototypen und
ein paar Fehler weniger, aber im Grunde ist
sie auch ein ziemlicher Mⁿll.
Im Mircosoft System Journal 4/93 ist eine ganz
brauchbare TIF-Routine dabei, aber eben nicht PD
Bernd Herd
Rudolf Virchow Str. 8
6842 Bⁿrstadt
06206/79222
U N P A C K B I: Dekompression zur PackBits-Kompression
-------------------------------------------------------------*/
#include <windows.h>
#pragma hdrstop
#include <string.h>
#include "tiff.h"
#include "tiffi.h"
/*----------------------------------------------------------------------
UnpackBits : Dekomprimiert einen Puffer in PackBits-Kompression
Parameter : plpSrc : Quell-Zeiger
plpDst : Ziel-Zeiger
dstBytes : Anzahl Bytes im Ziel-Puffer
Rⁿckgabe : FALSE : Fehler
TRUE : OK
----------------------------------------------------------------------*/
BOOL UnpackBits (LONGPTR plpSrc, LONGPTR plpDst, SHORT dstBytes)
{
register LONGPTR lpSrc = plpSrc;
register LONGPTR lpDst = plpDst;
register signed char cc;
register SHORT count;
register SHORT outsofar = 0;
while (outsofar < dstBytes) {
cc = *((signed char FAR *)lpSrc)++;
if (cc != -128)
/* if -127 <= BYTE <= -1, replicate the next byte -n+1 times
*/
if (cc & 0x80) {
count = -((signed int)cc) + 1; /* relies on sign-extension!!! */
outsofar += count;
if (outsofar > dstBytes) return FALSE;
memset (lpDst, (BYTE)*lpSrc, (WORD)count);
lpSrc++;
}
/* else if 0 <= BYTE <= 127, copy the next n+1 bytes literally
*/
else {
count = (SHORT)cc + 1;
outsofar += count;
if (outsofar > dstBytes) return FALSE;
memcpy (lpDst, lpSrc, (WORD)count);
lpSrc += count;
}
lpDst += count;
}
return TRUE;
}