summaryrefslogtreecommitdiffstats
path: root/giflib-4.1.6/util/gifspnge.c
diff options
context:
space:
mode:
Diffstat (limited to 'giflib-4.1.6/util/gifspnge.c')
-rw-r--r--giflib-4.1.6/util/gifspnge.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/giflib-4.1.6/util/gifspnge.c b/giflib-4.1.6/util/gifspnge.c
new file mode 100644
index 0000000..0d30444
--- /dev/null
+++ b/giflib-4.1.6/util/gifspnge.c
@@ -0,0 +1,91 @@
+/*
+ * Skeleton file for generic GIF `sponge' program --- slurp a GIF into core,
+ * operate on it, spew it out again. Most of the junk above `int main' isn't
+ * needed for the skeleton, but is likely to be for what you'll do with it.
+ *
+ * If you compile this, it will turn into an expensive GIF copying routine;
+ * stdin to stdout with no changes and minimal validation. Well, it's a
+ * decent test of DGifSlurp() and EGifSpew(), anyway.
+ *
+ * Note: due to the vicissitudes of Lempel-Ziv compression, the output of this
+ * copier may not be bitwise identical to its input. This can happen if you
+ * copy an image from a much more (or much *less*) memory-limited system; your
+ * compression may use more (or fewer) bits. The uncompressed rasters should,
+ * however, be identical (you can check this with icon2gif -d).
+ *
+ * Eric S. Raymond
+ * esr@snark.thyrsus.com
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef __MSDOS__
+#include <dos.h>
+#include <alloc.h>
+#include <graphics.h>
+#include <io.h>
+#endif /* __MSDOS__ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif /* HAVE_FCNTL_H */
+#include "getarg.h"
+#include "gif_lib.h"
+
+#define PROGRAM_NAME "gifspnge"
+
+#ifdef __MSDOS__
+extern unsigned int
+ _stklen = 16384; /* Increase default stack size. */
+#endif /* __MSDOS__ */
+
+int main(int argc, char **argv)
+{
+ int i;
+ GifFileType *GifFileIn, *GifFileOut = (GifFileType *)NULL;
+
+ if ((GifFileIn = DGifOpenFileHandle(0)) == NULL
+ || DGifSlurp(GifFileIn) == GIF_ERROR
+ || ((GifFileOut = EGifOpenFileHandle(1)) == (GifFileType *)NULL))
+ {
+ PrintGifError();
+ exit(EXIT_FAILURE);
+ }
+
+ /*
+ * Your operations on in-core structures go here.
+ * This code just copies the header and each image from the incoming file.
+ */
+ GifFileOut->SWidth = GifFileIn->SWidth;
+ GifFileOut->SHeight = GifFileIn->SHeight;
+ GifFileOut->SColorResolution = GifFileIn->SColorResolution;
+ GifFileOut->SBackGroundColor = GifFileIn->SBackGroundColor;
+ GifFileOut->SColorMap = MakeMapObject(
+ GifFileIn->SColorMap->ColorCount,
+ GifFileIn->SColorMap->Colors);
+
+ for (i = 0; i < GifFileIn->ImageCount; i++)
+ (void) MakeSavedImage(GifFileOut, &GifFileIn->SavedImages[i]);
+
+ /*
+ * Note: don't do DGifCloseFile early, as this will
+ * deallocate all the memory containing the GIF data!
+ *
+ * Further note: EGifSpew() doesn't try to validity-check any of this
+ * data; it's *your* responsibility to keep your changes consistent.
+ * Caveat hacker!
+ */
+ if (EGifSpew(GifFileOut) == GIF_ERROR)
+ PrintGifError();
+ else if (DGifCloseFile(GifFileIn) == GIF_ERROR)
+ PrintGifError();
+
+ return 0;
+}
+
+/* gifspnge.c ends here */