Blame util/giftext.c

Packit Service 384661
/*****************************************************************************
Packit Service 384661
Packit Service 384661
giftext - dump GIF pixels and metadata as text
Packit Service 384661
Packit Service 384661
*****************************************************************************/
Packit Service 384661
Packit Service 384661
#include <stdlib.h>
Packit Service 384661
#include <stdio.h>
Packit Service 384661
#include <ctype.h>
Packit Service 384661
#include <fcntl.h>
Packit Service 384661
#include <stdbool.h>
Packit Service 384661
Packit Service 384661
#ifdef _WIN32
Packit Service 384661
#include <io.h>
Packit Service 384661
#endif /* _WIN32 */
Packit Service 384661
Packit Service 384661
#include "gif_lib.h"
Packit Service 384661
#include "getarg.h"
Packit Service 384661
Packit Service 384661
#define PROGRAM_NAME	"giftext"
Packit Service 384661
Packit Service 384661
#define MAKE_PRINTABLE(c)  (isprint(c) ? (c) : ' ')
Packit Service 384661
Packit Service 384661
static char
Packit Service 384661
    *VersionStr =
Packit Service 384661
	PROGRAM_NAME
Packit Service 384661
	VERSION_COOKIE
Packit Service 384661
	"	Gershon Elber,	"
Packit Service 384661
	__DATE__ ",   " __TIME__ "\n"
Packit Service 384661
	"(C) Copyright 1989 Gershon Elber.\n";
Packit Service 384661
static char
Packit Service 384661
    *CtrlStr =
Packit Service 384661
	PROGRAM_NAME
Packit Service 384661
	" v%- c%- e%- z%- p%- r%- h%- GifFile!*s";
Packit Service 384661
Packit Service 384661
static void PrintCodeBlock(GifFileType *GifFile, GifByteType *CodeBlock, bool Reset);
Packit Service 384661
static void PrintPixelBlock(GifByteType *PixelBlock, int Len, bool Reset);
Packit Service 384661
static void PrintExtBlock(GifByteType *Extension, bool Reset);
Packit Service 384661
static void PrintLZCodes(GifFileType *GifFile);
Packit Service 384661
Packit Service 384661
/******************************************************************************
Packit Service 384661
 Interpret the command line and scan the given GIF file.
Packit Service 384661
******************************************************************************/
Packit Service 384661
int main(int argc, char **argv)
Packit Service 384661
{
Packit Service 384661
    int i, j, ExtCode, ErrorCode, CodeSize, NumFiles, Len, ImageNum = 1;
Packit Service 384661
    bool Error,
Packit Service 384661
	ColorMapFlag = false, EncodedFlag = false, LZCodesFlag = false,
Packit Service 384661
	PixelFlag = false, HelpFlag = false, RawFlag = false; 
Packit Service 384661
    char *GifFileName, **FileName = NULL;
Packit Service 384661
    GifPixelType *Line;
Packit Service 384661
    GifRecordType RecordType;
Packit Service 384661
    GifByteType *CodeBlock, *Extension;
Packit Service 384661
    GifFileType *GifFile;
Packit Service 384661
Packit Service 384661
    if ((Error = GAGetArgs(argc, argv, CtrlStr,
Packit Service 384661
		&GifNoisyPrint, &ColorMapFlag, &EncodedFlag,
Packit Service 384661
		&LZCodesFlag, &PixelFlag, &RawFlag, &HelpFlag,
Packit Service 384661
		&NumFiles, &FileName)) != false ||
Packit Service 384661
	(NumFiles > 1 && !HelpFlag)) {
Packit Service 384661
	if (Error)
Packit Service 384661
	    GAPrintErrMsg(Error);
Packit Service 384661
	else if (NumFiles > 1)
Packit Service 384661
	    GIF_MESSAGE("Error in command line parsing - one GIF file please.");
Packit Service 384661
	GAPrintHowTo(CtrlStr);
Packit Service 384661
	exit(EXIT_FAILURE);
Packit Service 384661
    }
Packit Service 384661
Packit Service 384661
    if (HelpFlag) {
Packit Service 384661
	(void)fprintf(stderr, VersionStr, GIFLIB_MAJOR, GIFLIB_MINOR);
Packit Service 384661
	GAPrintHowTo(CtrlStr);
Packit Service 384661
	exit(EXIT_SUCCESS);
Packit Service 384661
    }
Packit Service 384661
Packit Service 384661
    if (NumFiles == 1) {
Packit Service 384661
	GifFileName = *FileName;
Packit Service 384661
	if ((GifFile = DGifOpenFileName(*FileName, &ErrorCode)) == NULL) {
Packit Service 384661
	    PrintGifError(ErrorCode);
Packit Service 384661
	    exit(EXIT_FAILURE);
Packit Service 384661
	}
Packit Service 384661
    }
Packit Service 384661
    else {
Packit Service 384661
	/* Use stdin instead: */
Packit Service 384661
	GifFileName = "Stdin";
Packit Service 384661
	if ((GifFile = DGifOpenFileHandle(0, &ErrorCode)) == NULL) {
Packit Service 384661
	    PrintGifError(ErrorCode);
Packit Service 384661
	    exit(EXIT_FAILURE);
Packit Service 384661
	}
Packit Service 384661
    }
Packit Service 384661
Packit Service 384661
    /* Because we write binary data - make sure no text will be written. */
Packit Service 384661
    if (RawFlag) {
Packit Service 384661
	ColorMapFlag = EncodedFlag = LZCodesFlag = PixelFlag = false;
Packit Service 384661
#ifdef _WIN32
Packit Service 384661
	_setmode(1, O_BINARY);             /* Make sure it is in binary mode. */
Packit Service 384661
#endif /* _WIN32 */
Packit Service 384661
    }
Packit Service 384661
    else {
Packit Service 384661
	printf("\n%s:\n\n\tScreen Size - Width = %d, Height = %d.\n",
Packit Service 384661
	       GifFileName, GifFile->SWidth, GifFile->SHeight);
Packit Service 384661
	printf("\tColorResolution = %d, BitsPerPixel = %d, BackGround = %d, Aspect = %d.\n",
Packit Service 384661
	       GifFile->SColorResolution,
Packit Service 384661
	       GifFile->SColorMap ? GifFile->SColorMap->BitsPerPixel : 0,
Packit Service 384661
	       GifFile->SBackGroundColor,
Packit Service 384661
	       GifFile->AspectByte);
Packit Service 384661
	if (GifFile->SColorMap)
Packit Service 384661
	    printf("\tHas Global Color Map.\n\n");
Packit Service 384661
	else
Packit Service 384661
	    printf("\tNo Global Color Map.\n\n");
Packit Service 384661
	if (ColorMapFlag && GifFile->SColorMap) {
Packit Service 384661
	    printf("\tGlobal Color Map:\n");
Packit Service 384661
	    Len = GifFile->SColorMap->ColorCount;
Packit Service 384661
	    printf("\tSort Flag: %s\n", 
Packit Service 384661
		   GifFile->SColorMap->SortFlag ? "on":"off");
Packit Service 384661
	    for (i = 0; i < Len; i+=4) {
Packit Service 384661
		for (j = 0; j < 4 && j < Len; j++) {
Packit Service 384661
		    printf("%3d: %02xh %02xh %02xh   ", i + j,
Packit Service 384661
			   GifFile->SColorMap->Colors[i + j].Red,
Packit Service 384661
			   GifFile->SColorMap->Colors[i + j].Green,
Packit Service 384661
			   GifFile->SColorMap->Colors[i + j].Blue);
Packit Service 384661
		}
Packit Service 384661
		printf("\n");
Packit Service 384661
	    }
Packit Service 384661
	}
Packit Service 384661
    }
Packit Service 384661
Packit Service 384661
    do {
Packit Service 384661
	if (DGifGetRecordType(GifFile, &RecordType) == GIF_ERROR) {
Packit Service 384661
	    PrintGifError(GifFile->Error);
Packit Service 384661
	    exit(EXIT_FAILURE);
Packit Service 384661
	}
Packit Service 384661
	switch (RecordType) {
Packit Service 384661
	    case IMAGE_DESC_RECORD_TYPE:
Packit Service 384661
		if (DGifGetImageDesc(GifFile) == GIF_ERROR) {
Packit Service 384661
		    PrintGifError(GifFile->Error);
Packit Service 384661
		    exit(EXIT_FAILURE);
Packit Service 384661
		}
Packit Service 384661
		if (!RawFlag) {
Packit Service 384661
		    printf("\nImage #%d:\n\n\tImage Size - Left = %d, Top = %d, Width = %d, Height = %d.\n",
Packit Service 384661
			   ImageNum++, GifFile->Image.Left, GifFile->Image.Top,
Packit Service 384661
			   GifFile->Image.Width, GifFile->Image.Height);
Packit Service 384661
		    printf("\tImage is %s",
Packit Service 384661
			   GifFile->Image.Interlace ? "Interlaced" :
Packit Service 384661
						    "Non Interlaced");
Packit Service 384661
		    if (GifFile->Image.ColorMap != NULL)
Packit Service 384661
			printf(", BitsPerPixel = %d.\n",
Packit Service 384661
				GifFile->Image.ColorMap->BitsPerPixel);
Packit Service 384661
		    else
Packit Service 384661
			printf(".\n");
Packit Service 384661
		    if (GifFile->Image.ColorMap)
Packit Service 384661
			printf("\tImage Has Color Map.\n");
Packit Service 384661
		    else
Packit Service 384661
			printf("\tNo Image Color Map.\n");
Packit Service 384661
		    if (ColorMapFlag && GifFile->Image.ColorMap) {
Packit Service 384661
			printf("\tSort Flag: %s\n", 
Packit Service 384661
			       GifFile->Image.ColorMap->SortFlag ? "on":"off");
Packit Service 384661
			Len = 1 << GifFile->Image.ColorMap->BitsPerPixel;
Packit Service 384661
			for (i = 0; i < Len; i+=4) {
Packit Service 384661
			    for (j = 0; j < 4 && j < Len; j++) {
Packit Service 384661
				printf("%3d: %02xh %02xh %02xh   ", i + j,
Packit Service 384661
				       GifFile->Image.ColorMap->Colors[i + j].Red,
Packit Service 384661
				       GifFile->Image.ColorMap->Colors[i + j].Green,
Packit Service 384661
				       GifFile->Image.ColorMap->Colors[i + j].Blue);
Packit Service 384661
			    }
Packit Service 384661
			    printf("\n");
Packit Service 384661
			}
Packit Service 384661
		    }
Packit Service 384661
		}
Packit Service 384661
Packit Service 384661
		if (EncodedFlag) {
Packit Service 384661
		    if (DGifGetCode(GifFile, &CodeSize, &CodeBlock) == GIF_ERROR) {
Packit Service 384661
			PrintGifError(GifFile->Error);
Packit Service 384661
			exit(EXIT_FAILURE);
Packit Service 384661
		    }
Packit Service 384661
		    printf("\nImage LZ compressed Codes (Code Size = %d):\n",
Packit Service 384661
			   CodeSize);
Packit Service 384661
		    PrintCodeBlock(GifFile, CodeBlock, true);
Packit Service 384661
		    while (CodeBlock != NULL) {
Packit Service 384661
			if (DGifGetCodeNext(GifFile, &CodeBlock) == GIF_ERROR) {
Packit Service 384661
			    PrintGifError(GifFile->Error);
Packit Service 384661
			    exit(EXIT_FAILURE);
Packit Service 384661
			}
Packit Service 384661
			PrintCodeBlock(GifFile, CodeBlock, false);
Packit Service 384661
		    }
Packit Service 384661
		}
Packit Service 384661
		else if (LZCodesFlag) {
Packit Service 384661
		    PrintLZCodes(GifFile);
Packit Service 384661
		}
Packit Service 384661
		else if (PixelFlag) {
Packit Service 384661
		    Line = (GifPixelType *) malloc(GifFile->Image.Width *
Packit Service 384661
						sizeof(GifPixelType));
Packit Service 384661
		    for (i = 0; i < GifFile->Image.Height; i++) {
Packit Service 384661
			if (DGifGetLine(GifFile, Line, GifFile->Image.Width)
Packit Service 384661
			    == GIF_ERROR) {
Packit Service 384661
			    PrintGifError(GifFile->Error);
Packit Service 384661
			    exit(EXIT_FAILURE);
Packit Service 384661
			}
Packit Service 384661
			PrintPixelBlock(Line, GifFile->Image.Width, i == 0);
Packit Service 384661
		    }
Packit Service 384661
		    PrintPixelBlock(NULL, GifFile->Image.Width, false);
Packit Service 384661
		    free((char *) Line);
Packit Service 384661
		}
Packit Service 384661
		else if (RawFlag) {
Packit Service 384661
		    Line = (GifPixelType *) malloc(GifFile->Image.Width *
Packit Service 384661
						sizeof(GifPixelType));
Packit Service 384661
		    for (i = 0; i < GifFile->Image.Height; i++) {
Packit Service 384661
			if (DGifGetLine(GifFile, Line, GifFile->Image.Width)
Packit Service 384661
			    == GIF_ERROR) {
Packit Service 384661
			    PrintGifError(GifFile->Error);
Packit Service 384661
			    exit(EXIT_FAILURE);
Packit Service 384661
			}
Packit Service 384661
			fwrite(Line, 1, GifFile->Image.Width, stdout);
Packit Service 384661
		    }
Packit Service 384661
		    free((char *) Line);
Packit Service 384661
		}
Packit Service 384661
		else {
Packit Service 384661
		    /* Skip the image: */
Packit Service 384661
		    if (DGifGetCode(GifFile, &CodeSize, &CodeBlock) == GIF_ERROR) {
Packit Service 384661
			PrintGifError(GifFile->Error);
Packit Service 384661
			exit(EXIT_FAILURE);
Packit Service 384661
		    }
Packit Service 384661
		    while (CodeBlock != NULL) {
Packit Service 384661
			if (DGifGetCodeNext(GifFile, &CodeBlock) == GIF_ERROR) {
Packit Service 384661
			    PrintGifError(GifFile->Error);
Packit Service 384661
			    exit(EXIT_FAILURE);
Packit Service 384661
			}
Packit Service 384661
		    }
Packit Service 384661
Packit Service 384661
		}
Packit Service 384661
		break;
Packit Service 384661
	    case EXTENSION_RECORD_TYPE:
Packit Service 384661
		if (DGifGetExtension(GifFile, &ExtCode, &Extension) == GIF_ERROR) {
Packit Service 384661
		    PrintGifError(GifFile->Error);
Packit Service 384661
		    exit(EXIT_FAILURE);
Packit Service 384661
		}
Packit Service 384661
		if (!RawFlag) {
Packit Service 384661
		    putchar('\n');
Packit Service 384661
		    switch (ExtCode)
Packit Service 384661
		    {
Packit Service 384661
		    case COMMENT_EXT_FUNC_CODE:
Packit Service 384661
			printf("GIF89 comment");
Packit Service 384661
			break;
Packit Service 384661
		    case GRAPHICS_EXT_FUNC_CODE:
Packit Service 384661
			printf("GIF89 graphics control");
Packit Service 384661
			break;
Packit Service 384661
		    case PLAINTEXT_EXT_FUNC_CODE:
Packit Service 384661
			printf("GIF89 plaintext");
Packit Service 384661
			break;
Packit Service 384661
		    case APPLICATION_EXT_FUNC_CODE:
Packit Service 384661
			printf("GIF89 application block");
Packit Service 384661
			break;
Packit Service 384661
		    default:
Packit Service 384661
			printf("Extension record of unknown type");
Packit Service 384661
			break;
Packit Service 384661
		    }
Packit Service 384661
		    printf(" (Ext Code = %d [%c]):\n",
Packit Service 384661
			   ExtCode, MAKE_PRINTABLE(ExtCode));
Packit Service 384661
		    PrintExtBlock(Extension, true);
Packit Service 384661
Packit Service 384661
		    if (ExtCode == GRAPHICS_EXT_FUNC_CODE) {
Packit Service 384661
			GraphicsControlBlock gcb;
Packit Service 384661
			if (Extension == NULL) {
Packit Service 384661
			    printf("Invalid extension block\n");
Packit Service 384661
			    GifFile->Error = D_GIF_ERR_IMAGE_DEFECT;
Packit Service 384661
			    PrintGifError(GifFile->Error);
Packit Service 384661
			    exit(EXIT_FAILURE);
Packit Service 384661
			}
Packit Service 384661
			if (DGifExtensionToGCB(Extension[0], Extension+1, &gcb) == GIF_ERROR) {
Packit Service 384661
			    PrintGifError(GifFile->Error);
Packit Service 384661
			    exit(EXIT_FAILURE);
Packit Service 384661
			}
Packit Service 384661
			printf("\tDisposal Mode: %d\n", gcb.DisposalMode);
Packit Service 384661
			printf("\tUser Input Flag: %d\n", gcb.UserInputFlag);
Packit Service 384661
			printf("\tTransparency on: %s\n",
Packit Service 384661
			       gcb.TransparentColor != -1 ? "yes" : "no");
Packit Service 384661
			printf("\tDelayTime: %d\n", gcb.DelayTime);
Packit Service 384661
			printf("\tTransparent Index: %d\n", gcb.TransparentColor);
Packit Service 384661
		    }
Packit Service 384661
		}
Packit Service 384661
		for (;;) {
Packit Service 384661
		    if (DGifGetExtensionNext(GifFile, &Extension) == GIF_ERROR) {
Packit Service 384661
			PrintGifError(GifFile->Error);
Packit Service 384661
			exit(EXIT_FAILURE);
Packit Service 384661
		    }
Packit Service 384661
		    if (Extension == NULL)
Packit Service 384661
			break;
Packit Service 384661
		    PrintExtBlock(Extension, false);
Packit Service 384661
		}
Packit Service 384661
		break;
Packit Service 384661
	    case TERMINATE_RECORD_TYPE:
Packit Service 384661
		break;
Packit Service 384661
	    default:	     /* Should be trapped by DGifGetRecordType */
Packit Service 384661
		break;
Packit Service 384661
	}
Packit Service 384661
    }
Packit Service 384661
    while (RecordType != TERMINATE_RECORD_TYPE);
Packit Service 384661
Packit Service 384661
    if (DGifCloseFile(GifFile, &ErrorCode) == GIF_ERROR) {
Packit Service 384661
	PrintGifError(ErrorCode);
Packit Service 384661
	exit(EXIT_FAILURE);
Packit Service 384661
    }
Packit Service 384661
Packit Service 384661
    if (!RawFlag) printf("\nGIF file terminated normally.\n");
Packit Service 384661
Packit Service 384661
    return 0;
Packit Service 384661
}
Packit Service 384661
Packit Service 384661
/******************************************************************************
Packit Service 384661
 Print the given CodeBlock - a string in pascal notation (size in first
Packit Service 384661
 place). Save local information so printing can be performed continuously,
Packit Service 384661
 or reset to start state if Reset. If CodeBlock is NULL, output is flushed
Packit Service 384661
******************************************************************************/
Packit Service 384661
static void PrintCodeBlock(GifFileType *GifFile, GifByteType *CodeBlock, bool Reset)
Packit Service 384661
{
Packit Service 384661
    static int CrntPlace = 0; 
Packit Service 384661
    static long CodeCount = 0;
Packit Service 384661
    int i, Percent, Len;
Packit Service 384661
    long NumBytes;
Packit Service 384661
Packit Service 384661
    if (Reset || CodeBlock == NULL) {
Packit Service 384661
	if (CodeBlock == NULL) {
Packit Service 384661
	    if (CrntPlace > 0) {
Packit Service 384661
		printf("\n");
Packit Service 384661
		CodeCount += CrntPlace - 16;
Packit Service 384661
	    }
Packit Service 384661
	    if (GifFile->Image.ColorMap)
Packit Service 384661
		NumBytes = ((((long) GifFile->Image.Width) * GifFile->Image.Height)
Packit Service 384661
				* GifFile->Image.ColorMap->BitsPerPixel) / 8;
Packit Service 384661
	    else
Packit Service 384661
		NumBytes = ((((long) GifFile->Image.Width) * GifFile->Image.Height)
Packit Service 384661
				* GifFile->SColorMap->BitsPerPixel) / 8;
Packit Service 384661
	    Percent = 100 * CodeCount / NumBytes;
Packit Service 384661
	    printf("\nCompression ratio: %ld/%ld (%d%%).\n",
Packit Service 384661
			CodeCount, NumBytes, Percent);
Packit Service 384661
	    return;
Packit Service 384661
	}
Packit Service 384661
	CrntPlace = 0;
Packit Service 384661
	CodeCount = 0;
Packit Service 384661
    }
Packit Service 384661
Packit Service 384661
    Len = CodeBlock[0];
Packit Service 384661
    for (i = 1; i <= Len; i++) {
Packit Service 384661
	if (CrntPlace == 0) {
Packit Service 384661
	    printf("\n%05lxh:  ", CodeCount);
Packit Service 384661
	    CodeCount += 16;
Packit Service 384661
	}
Packit Service 384661
	(void)printf(" %02xh", CodeBlock[i]);
Packit Service 384661
	if (++CrntPlace >= 16) CrntPlace = 0;
Packit Service 384661
    }
Packit Service 384661
}
Packit Service 384661
Packit Service 384661
/******************************************************************************
Packit Service 384661
 Print the given Extension - a string in pascal notation (size in first
Packit Service 384661
 place). Save local information so printing can be performed continuously,
Packit Service 384661
 or reset to start state if Reset. If Extension is NULL, output is flushed
Packit Service 384661
******************************************************************************/
Packit Service 384661
static void PrintExtBlock(GifByteType *Extension, bool Reset)
Packit Service 384661
{
Packit Service 384661
    static int CrntPlace = 0;
Packit Service 384661
    static long ExtCount = 0;
Packit Service 384661
    static char HexForm[49], AsciiForm[17];
Packit Service 384661
Packit Service 384661
    if (Reset || Extension == NULL) {
Packit Service 384661
	if (Extension == NULL) {
Packit Service 384661
	    if (CrntPlace > 0) {
Packit Service 384661
		HexForm[CrntPlace * 3] = 0;
Packit Service 384661
		AsciiForm[CrntPlace] = 0;
Packit Service 384661
		printf("\n%05lx: %-49s  %-17s\n", ExtCount, HexForm, AsciiForm);
Packit Service 384661
		return;
Packit Service 384661
	    }
Packit Service 384661
	    else
Packit Service 384661
		printf("\n");
Packit Service 384661
	}
Packit Service 384661
	CrntPlace = 0;
Packit Service 384661
	ExtCount = 0;
Packit Service 384661
    }
Packit Service 384661
Packit Service 384661
    if (Extension != NULL) {
Packit Service 384661
	int i, Len;
Packit Service 384661
	Len = Extension[0];
Packit Service 384661
	for (i = 1; i <= Len; i++) {
Packit Service 384661
	    (void)snprintf(&HexForm[CrntPlace * 3], 3,
Packit Service 384661
			   " %02x", Extension[i]);
Packit Service 384661
	    (void)snprintf(&AsciiForm[CrntPlace], 3,
Packit Service 384661
			   "%c", MAKE_PRINTABLE(Extension[i]));
Packit Service 384661
	    if (++CrntPlace == 16) {
Packit Service 384661
		HexForm[CrntPlace * 3] = 0;
Packit Service 384661
		AsciiForm[CrntPlace] = 0;
Packit Service 384661
		printf("\n%05lx: %-49s  %-17s", ExtCount, HexForm, AsciiForm);
Packit Service 384661
		ExtCount += 16;
Packit Service 384661
		CrntPlace = 0;
Packit Service 384661
	    }
Packit Service 384661
	}
Packit Service 384661
    }
Packit Service 384661
}
Packit Service 384661
Packit Service 384661
/******************************************************************************
Packit Service 384661
 Print the given PixelBlock of length Len.
Packit Service 384661
 Save local information so printing can be performed continuously,
Packit Service 384661
 or reset to start state if Reset. If PixelBlock is NULL, output is flushed
Packit Service 384661
******************************************************************************/
Packit Service 384661
static void PrintPixelBlock(GifByteType *PixelBlock, int Len, bool Reset)
Packit Service 384661
{
Packit Service 384661
    static int CrntPlace = 0; 
Packit Service 384661
    static long ExtCount = 0;
Packit Service 384661
    static char HexForm[49], AsciiForm[17];
Packit Service 384661
    int i;
Packit Service 384661
Packit Service 384661
    if (Reset || PixelBlock == NULL) {
Packit Service 384661
	if (PixelBlock == NULL) {
Packit Service 384661
	    if (CrntPlace > 0) {
Packit Service 384661
		HexForm[CrntPlace * 3] = 0;
Packit Service 384661
		AsciiForm[CrntPlace] = 0;
Packit Service 384661
		printf("\n%05lx: %-49s  %-17s\n", ExtCount, HexForm, AsciiForm);
Packit Service 384661
	    }
Packit Service 384661
	    else
Packit Service 384661
		printf("\n");
Packit Service 384661
	}
Packit Service 384661
	CrntPlace = 0;
Packit Service 384661
	ExtCount = 0;
Packit Service 384661
	if (PixelBlock == NULL) return;
Packit Service 384661
    }
Packit Service 384661
Packit Service 384661
    for (i = 0; i < Len; i++) {
Packit Service 384661
	(void)snprintf(&HexForm[CrntPlace * 3], 3,
Packit Service 384661
		       " %02x", PixelBlock[i]);
Packit Service 384661
	(void)snprintf(&AsciiForm[CrntPlace], 3,
Packit Service 384661
		       "%c", MAKE_PRINTABLE(PixelBlock[i]));
Packit Service 384661
	if (++CrntPlace == 16) {
Packit Service 384661
	    HexForm[CrntPlace * 3] = 0;
Packit Service 384661
	    AsciiForm[CrntPlace] = 0;
Packit Service 384661
	    printf("\n%05lx: %-49s  %-17s", ExtCount, HexForm, AsciiForm);
Packit Service 384661
	    ExtCount += 16;
Packit Service 384661
	    CrntPlace = 0;
Packit Service 384661
	}
Packit Service 384661
    }
Packit Service 384661
}
Packit Service 384661
Packit Service 384661
/******************************************************************************
Packit Service 384661
 Print the image as LZ codes (each 12bits), until EOF marker is reached.
Packit Service 384661
******************************************************************************/
Packit Service 384661
static void PrintLZCodes(GifFileType *GifFile)
Packit Service 384661
{
Packit Service 384661
    int Code, CrntPlace = 0;
Packit Service 384661
    long CodeCount = 0;
Packit Service 384661
Packit Service 384661
    do {
Packit Service 384661
	if (CrntPlace == 0) printf("\n%05lx:", CodeCount);
Packit Service 384661
	if (DGifGetLZCodes(GifFile, &Code) == GIF_ERROR) {
Packit Service 384661
	    PrintGifError(GifFile->Error);
Packit Service 384661
	    exit(EXIT_FAILURE);
Packit Service 384661
	}
Packit Service 384661
	if (Code >= 0)
Packit Service 384661
	    printf(" %03x", Code);	      /* EOF Code is returned as -1. */
Packit Service 384661
	CodeCount++;
Packit Service 384661
	if (++CrntPlace >= 16) CrntPlace = 0;
Packit Service 384661
    }
Packit Service 384661
    while (Code >= 0);
Packit Service 384661
}
Packit Service 384661
Packit Service 384661
/* end */