home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fish 'n' More 2
/
fishmore-publicdomainlibraryvol.ii1991xetec.iso
/
dirs
/
gifmachine_405.lzh
/
GIFMachine
/
Sources
/
extensions.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-11-17
|
2KB
|
95 lines
/* Copyright 1990 by Christopher A. Wichura.
See file GIFMachine.doc for full description of rights.
*/
#include "GIFMachine.h"
struct MinList CommentList;
static UBYTE buf[256];
BOOL DoExtension(BPTR fh)
{
register LONG size;
register LONG cmdcode;
register char *Comment;
register char *OldComment;
register int CommentLength;
register int OldCommentLength;
register struct CommentNode *cn;
if ((cmdcode = FGetC(fh)) == -1) {
PutStr("...I/O error reading extension block function code\n");
return TRUE;
}
switch(cmdcode) {
case GIF_COMMENT_EXT:
PutStr("...Comment extension encountered. Contents will be stored in an ANNO chunk.\n");
if (!(cn = (struct CommentNode *)MyAlloc(sizeof(struct CommentNode)))) {
PutStr("......Out of memory allocating comment block.\n");
return TRUE;
}
Comment = NULL;
CommentLength = 0;
for (;;) {
if ((size = FGetC(fh)) == -1) {
PutStr("......I/O Error reading comment block.\n");
return TRUE;
}
if (size) {
if (FRead(fh, buf, 1, size) != size) {
PutStr("......I/O Error reading comment block.\n");
return TRUE;
}
OldComment = Comment;
OldCommentLength = CommentLength;
CommentLength += size;
if (!(Comment = MyAlloc(CommentLength))) {
PutStr("......Out of memory allocating comment block.\n");
return TRUE;
}
if (OldCommentLength) {
CopyMem(OldComment, Comment, OldCommentLength);
MyFree(OldComment);
}
CopyMem(buf, &Comment[OldCommentLength], size);
} else { /* end of comment so store it */
cn->cn_Comment = Comment;
cn->cn_CommentLength = CommentLength;
AddTail((struct List *)&CommentList, (struct Node *)cn);
return FALSE;
}
}
break;
default:
MyPrintf("...Extension block function code #%ld not know, skipping.\n",
cmdcode);
/* we must skip over any data for the extension block */
for (;;) {
if ((size = FGetC(fh)) == -1) {
PutStr("...I/O Error skipping unknown extension block.\n");
return TRUE;
}
if (size == 0)
return FALSE;
if (FRead(fh, buf, 1, size) != size) {
PutStr("...I/O Error skipping unknown extension block.\n");
return TRUE;
}
}
break;
}
}