diff options
Diffstat (limited to 'tools/gifconv/gif2hdf.c')
-rw-r--r-- | tools/gifconv/gif2hdf.c | 114 |
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); +} |