summaryrefslogtreecommitdiffstats
path: root/tools/gifconv/gif2hdf.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gifconv/gif2hdf.c')
-rw-r--r--tools/gifconv/gif2hdf.c114
1 files changed, 114 insertions, 0 deletions
diff --git a/tools/gifconv/gif2hdf.c b/tools/gifconv/gif2hdf.c
new file mode 100644
index 0000000..0211143
--- /dev/null
+++ b/tools/gifconv/gif2hdf.c
@@ -0,0 +1,114 @@
+/* #include <hdf.h> */
+#include "gif.h"
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+int
+main(argv , argc)
+int argv;
+char *argc[];
+{
+
+ GIFTOMEM GifMemoryStruct;
+ GIFIMAGEDESC gifImageDesc;
+
+ FILE *fpGif;
+
+ /* replacing int32 with long */
+ long i,ImageCount;
+ long filesize;
+
+ BYTE *MemGif;
+ BYTE *StartPos;
+
+ /* VSNAMELENMAX is a carryover from HDF4 and is #defined to 256 in gif.h */
+ char GIFFileName[VSNAMELENMAX];
+ char HDFFileName[VSNAMELENMAX];
+
+ /* Initialize all GifMemoryStruct pointers to null
+ ** to prevent hassles later on
+ */
+ GifMemoryStruct.GifHeader = NULL;
+ GifMemoryStruct.GifImageDesc = NULL;
+ GifMemoryStruct.GifGraphicControlExtension = NULL;
+ GifMemoryStruct.GifPlainTextExtension = NULL;
+ GifMemoryStruct.GifApplicationExtension = NULL;
+ GifMemoryStruct.GifCommentExtension = NULL;
+
+
+ if (argv<3)
+ {
+ printf("\n\nWrong Usage. Use:\ngif2hdf <GIFFILE> <HDFFILE>\n\n");
+ return(-1);
+ }
+
+
+
+ strncpy(GIFFileName , argc[1] , VSNAMELENMAX - 1);
+ strncpy(HDFFileName , argc[2] , VSNAMELENMAX - 1);
+ GIFFileName[VSNAMELENMAX - 1] = '\0';
+ HDFFileName[VSNAMELENMAX - 1] = '\0';
+
+ if (!(fpGif = fopen(GIFFileName,"rb"))) {
+ printf("Unable to open GIF file for reading.\n");
+ printf("Filename (including path) must be less than %d charachters in length\n",VSNAMELENMAX);
+ exit(-1);
+ }
+
+ /* Get the whole file into memory. Mem's much faster than I/O */
+ fseek(fpGif, 0L , 2);
+ filesize = ftell(fpGif);
+ fseek(fpGif, 0L , 0);
+ if (filesize == 0) printf("File Size Zero");
+ if (!(MemGif = StartPos = (BYTE *)malloc(filesize))) {
+ printf("Out of memory");
+ exit (-1);
+ }
+ if (fread(MemGif,filesize,1,fpGif) != 1) {
+ printf("Corrupted Input File");
+ exit(-1);
+ }
+
+ fseek(fpGif,0L,0);
+
+ /*
+ ** Call Gif2Mem and break the whole file into parts.
+ ** Gif2Mem also calls decompresses the images so we don't
+ ** have to worry about that
+ */
+ GifMemoryStruct = Gif2Mem(MemGif);
+ if (ferror(fpGif)) {
+ printf("File Stream Error\n\n");
+ exit(-1);
+ }
+ fclose(fpGif);
+
+ /* Call WriteHDF from here. Go ahead and change WriteHDF to write
+ ** whatever format you want
+ */
+ if (WriteHDF(GifMemoryStruct , argc[2] , argc[1]))
+ printf("HDF Write Error\n\n");
+
+ /* Free all buffers */
+ /* replacing int32 with long */
+ ImageCount = (long)((GifMemoryStruct.GifHeader)->ImageCount);
+
+ for(i = 0 ; i < ImageCount ; i++)
+ {
+ gifImageDesc = *(GifMemoryStruct.GifImageDesc[i]);
+ if (gifImageDesc.Image != NULL)
+ free(gifImageDesc.Image);
+
+ if (GifMemoryStruct.GifGraphicControlExtension[i] != NULL)
+ free(GifMemoryStruct.GifGraphicControlExtension[i]);
+
+ }
+ free(StartPos);
+
+ free (GifMemoryStruct.GifHeader);
+
+ if (GifMemoryStruct.GifApplicationExtension != NULL)
+ free (GifMemoryStruct.GifApplicationExtension);
+
+ return (0);
+}