summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 5b0f466)
raw | patch | inline | side by side (parent: 5b0f466)
author | oetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa> | |
Tue, 5 Sep 2006 18:19:02 +0000 (18:19 +0000) | ||
committer | oetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa> | |
Tue, 5 Sep 2006 18:19:02 +0000 (18:19 +0000) |
program/src/gifsize.c | [deleted file] | patch | blob | history |
diff --git a/program/src/gifsize.c b/program/src/gifsize.c
--- a/program/src/gifsize.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/****************************************************************************
- * RRDtool 1.2.15 Copyright by Tobi Oetiker, 1997-2006
- ****************************************************************************
- * gifsize.c provides the function gifsize which determines the size of a gif
- ****************************************************************************/
-
-/* This is built from code originally created by: */
-
-/* +-------------------------------------------------------------------+ */
-/* | Copyright 1990, 1991, 1993, David Koblas. (koblas@netcom.com) | */
-/* | Permission to use, copy, modify, and distribute this software | */
-/* | and its documentation for any purpose and without fee is hereby | */
-/* | granted, provided that the above copyright notice appear in all | */
-/* | copies and that both that copyright notice and this permission | */
-/* | notice appear in supporting documentation. This software is | */
-/* | provided "as is" without express or implied warranty. | */
-/* +-------------------------------------------------------------------+ */
-
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-
-
-#define MAXCOLORMAPSIZE 256
-
-#define TRUE 1
-#define FALSE 0
-
-#define CM_RED 0
-#define CM_GREEN 1
-#define CM_BLUE 2
-
-
-#define LOCALCOLORMAP 0x80
-#define BitSet(byte, bit) (((byte) & (bit)) == (bit))
-
-#define ReadOK(file,buffer,len) (fread(buffer, len, 1, file) != 0)
-
-#define LM_to_uint(a,b) (((b)<<8)|(a))
-
-
-static struct {
- int transparent;
- int delayTime;
- int inputFlag;
- int disposal;
-} Gif89 = { -1, -1, -1, 0 };
-
-static int ReadColorMap (FILE *fd, int number, unsigned char (*buffer)[256]);
-static int DoExtension (FILE *fd, int label, int *Transparent);
-static int GetDataBlock (FILE *fd, unsigned char *buf);
-
-int ZeroDataBlock;
-
-int
-GifSize(FILE *fd, long *width, long *height)
-{
- int imageNumber;
- int BitPixel;
- int ColorResolution;
- int Background;
- int AspectRatio;
- int Transparent = (-1);
- unsigned char buf[16];
- unsigned char c;
- unsigned char ColorMap[3][MAXCOLORMAPSIZE];
- int imageCount = 0;
- char version[4];
- ZeroDataBlock = FALSE;
-
- imageNumber = 1;
- if (! ReadOK(fd,buf,6)) {
- return 0;
- }
- if (strncmp((char *)buf,"GIF",3) != 0) {
- return 0;
- }
- strncpy(version, (char *)buf + 3, 3);
- version[3] = '\0';
-
- if ((strcmp(version, "87a") != 0) && (strcmp(version, "89a") != 0)) {
- return 0;
- }
- if (! ReadOK(fd,buf,7)) {
- return 0;
- }
- BitPixel = 2<<(buf[4]&0x07);
- ColorResolution = (int) (((buf[4]&0x70)>>3)+1);
- Background = buf[5];
- AspectRatio = buf[6];
-
- if (BitSet(buf[4], LOCALCOLORMAP)) { /* Global Colormap */
- if (ReadColorMap(fd, BitPixel, ColorMap)) {
- return 0;
- }
- }
- for (;;) {
- if (! ReadOK(fd,&c,1)) {
- return 0;
- }
- if (c == ';') { /* GIF terminator */
- if (imageCount < imageNumber) {
- return 0;
- }
- }
-
- if (c == '!') { /* Extension */
- if (! ReadOK(fd,&c,1)) {
- return 0;
- }
- DoExtension(fd, c, &Transparent);
- continue;
- }
-
- if (c != ',') { /* Not a valid start character */
- continue;
- }
-
- ++imageCount;
-
- if (! ReadOK(fd,buf,9)) {
- return 0;
- }
-
- (*width) = LM_to_uint(buf[4],buf[5]);
- (*height) = LM_to_uint(buf[6],buf[7]);
- return 1;
- }
-}
-
-static int
-ReadColorMap(FILE *fd, int number, unsigned char (*buffer)[256])
-{
- int i;
- unsigned char rgb[3];
-
-
- for (i = 0; i < number; ++i) {
- if (! ReadOK(fd, rgb, sizeof(rgb))) {
- return TRUE;
- }
- buffer[CM_RED][i] = rgb[0] ;
- buffer[CM_GREEN][i] = rgb[1] ;
- buffer[CM_BLUE][i] = rgb[2] ;
- }
-
-
- return FALSE;
-}
-
-static int
-DoExtension(FILE *fd, int label, int *Transparent)
-{
- static unsigned char buf[256];
-
- switch (label) {
- case 0xf9: /* Graphic Control Extension */
- (void) GetDataBlock(fd, (unsigned char*) buf);
- Gif89.disposal = (buf[0] >> 2) & 0x7;
- Gif89.inputFlag = (buf[0] >> 1) & 0x1;
- Gif89.delayTime = LM_to_uint(buf[1],buf[2]);
- if ((buf[0] & 0x1) != 0)
- *Transparent = buf[3];
-
- while (GetDataBlock(fd, (unsigned char*) buf) != 0)
- ;
- return FALSE;
- default:
- break;
- }
- while (GetDataBlock(fd, (unsigned char*) buf) != 0)
- ;
-
- return FALSE;
-}
-
-static int
-GetDataBlock(FILE *fd, unsigned char *buf)
-{
- unsigned char count;
-
- if (! ReadOK(fd,&count,1)) {
- return -1;
- }
-
- ZeroDataBlock = count == 0;
-
- if ((count != 0) && (! ReadOK(fd, buf, count))) {
- return -1;
- }
-
- return count;
-}
-