summaryrefslogtreecommitdiffstats
path: root/tkimg/init.c
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2017-01-03 21:52:18 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2017-01-03 21:52:18 (GMT)
commit4302a869f0212a3e4878e66a7260b434f6584476 (patch)
treee6976e66edf648406e32b092395121e045301692 /tkimg/init.c
parenta780057cc1b51dd3a557549c3cf2431f09136c0d (diff)
parent60d692811c12788ed4468d5ff680633304e8f641 (diff)
downloadblt-4302a869f0212a3e4878e66a7260b434f6584476.zip
blt-4302a869f0212a3e4878e66a7260b434f6584476.tar.gz
blt-4302a869f0212a3e4878e66a7260b434f6584476.tar.bz2
Merge commit '60d692811c12788ed4468d5ff680633304e8f641' as 'tkimg'
Diffstat (limited to 'tkimg/init.c')
-rwxr-xr-xtkimg/init.c186
1 files changed, 186 insertions, 0 deletions
diff --git a/tkimg/init.c b/tkimg/init.c
new file mode 100755
index 0000000..1b8d77a
--- /dev/null
+++ b/tkimg/init.c
@@ -0,0 +1,186 @@
+/*
+ * init.c --
+ *
+ * Generic photo image type initialization, Tcl/Tk package
+ *
+ * Copyright (c) 2002 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+ *
+ * $Id: init.c 274 2010-06-28 13:23:34Z nijtmans $
+ *
+ */
+
+#include "tkimg.h"
+
+#ifndef MORE_INITIALIZATION
+#define MORE_INITIALIZATION /* Nothing */
+#endif
+
+/*
+ * Functions exported for package management.
+ */
+
+
+extern DLLEXPORT int @CPACKAGE@_Init(Tcl_Interp *interp);
+extern DLLEXPORT int @CPACKAGE@_SafeInit(Tcl_Interp *interp);
+
+/*
+ * Declarations of internal functions.
+ */
+
+static int ChnMatch(Tcl_Channel chan, const char *fileName,
+ Tcl_Obj *format, int *widthPtr, int *heightPtr, Tcl_Interp *interp);
+
+static int ObjMatch(Tcl_Obj *dataObj, Tcl_Obj *format,
+ int *widthPtr, int *heightPtr, Tcl_Interp *interp);
+
+static int ChnRead(Tcl_Interp *interp, Tcl_Channel chan,
+ const char *fileName, Tcl_Obj *format, Tk_PhotoHandle imageHandle,
+ int destX, int destY, int width, int height, int srcX, int srcY);
+
+static int ObjRead(Tcl_Interp *interp, Tcl_Obj *dataObj,
+ Tcl_Obj *format, Tk_PhotoHandle imageHandle,
+ int destX, int destY, int width, int height, int srcX, int srcY);
+
+static int ChnWrite(Tcl_Interp *interp, const char *filename,
+ Tcl_Obj *format, Tk_PhotoImageBlock *blockPtr);
+
+static int StringWrite(Tcl_Interp *interp, Tcl_Obj *format,
+ Tk_PhotoImageBlock *blockPtr);
+
+static Tk_PhotoImageFormat format = {
+ (char *) "%PHIMGTYPE%", /* name */
+ ChnMatch, /* fileMatchProc */
+ ObjMatch, /* stringMatchProc */
+ ChnRead, /* fileReadProc */
+ ObjRead, /* stringReadProc */
+ ChnWrite, /* fileWriteProc */
+ StringWrite /* stringWriteProc */
+};
+
+#ifdef SECOND_FORMAT
+/*
+ * Declare procedures of the second format as needed. The macro we
+ * check for allow us to share code between first and second
+ * format. Current user of this feature: The PS/PDF combo handler
+ */
+
+#ifndef SECOND_CHNMATCH
+#define SECOND_CHNMATCH ChnMatchBeta
+static int ChnMatchBeta(Tcl_Channel chan, const char *fileName,
+ Tcl_Obj *format, int *widthPtr, int *heightPtr, Tcl_Interp *interp);
+#endif
+#ifndef SECOND_OBJMATCH
+#define SECOND_OBJMATCH ObjMatchBeta
+static int ObjMatchBeta(Tcl_Obj *dataObj, Tcl_Obj *format,
+ int *widthPtr, int *heightPtr, Tcl_Interp *interp);
+#endif
+#ifndef SECOND_CHNREAD
+#define SECOND_CHNREAD ChnReadBeta
+static int ChnReadBeta(Tcl_Interp *interp, Tcl_Channel chan,
+ const char *fileName, Tcl_Obj *format, Tk_PhotoHandle imageHandle,
+ int destX, int destY, int width, int height, int srcX, int srcY);
+#endif
+#ifndef SECOND_OBJREAD
+#define SECOND_OBJREAD ChnObjReadBeta
+static int ObjReadBeta(Tcl_Interp *interp, Tcl_Obj *dataObj,
+ Tcl_Obj *format, Tk_PhotoHandle imageHandle,
+ int destX, int destY, int width, int height, int srcX, int srcY);
+#endif
+#ifndef SECOND_CHNWRITE
+#define SECOND_CHNWRITE ChnWriteBeta
+static int ChnWriteBeta(Tcl_Interp *interp, const char *filename,
+ Tcl_Obj *format, Tk_PhotoImageBlock *blockPtr);
+#endif
+#ifndef SECOND_STRWRITE
+#define SECOND_STRWRITE StringWriteBeta
+static int StringWriteBeta(Tcl_Interp *interp, Tcl_Obj *format,
+ Tk_PhotoImageBlock *blockPtr);
+#endif
+
+static Tk_PhotoImageFormat format_beta = {
+ (char *) "%PHIMGTYPE_BETA%", /* name */
+ SECOND_CHNMATCH, /* fileMatchProc */
+ SECOND_OBJMATCH, /* stringMatchProc */
+ SECOND_CHNREAD, /* fileReadProc */
+ SECOND_OBJREAD, /* stringReadProc */
+ SECOND_CHNWRITE, /* fileWriteProc */
+ SECOND_STRWRITE /* stringWriteProc */
+};
+
+#endif /* SECOND_FORMAT */
+
+
+/*
+ *----------------------------------------------------------------------------
+ *
+ * @CPACKAGE@_Init --
+ *
+ * Initialisation routine for loadable module
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Creates commands in the interpreter, loads package.
+ *
+ *----------------------------------------------------------------------------
+ */
+
+int
+@CPACKAGE@_Init(
+ Tcl_Interp *interp /* Interpreter to initialise. */
+) {
+ if (!Tcl_InitStubs(interp, "8.3", 0)) {
+ return TCL_ERROR;
+ }
+ if (!Tk_InitStubs(interp, "8.3", 0)) {
+ return TCL_ERROR;
+ }
+ if (!Tkimg_InitStubs(interp, TKIMG_VERSION, 0)) {
+ return TCL_ERROR;
+ }
+
+ MORE_INITIALIZATION;
+
+ /*
+ * Register the new photo image type.
+ */
+
+ Tk_CreatePhotoImageFormat(&format);
+#ifdef SECOND_FORMAT
+ Tk_CreatePhotoImageFormat(&format_beta);
+#endif /* SECOND_FORMAT */
+
+ /*
+ * At last provide the package ...
+ */
+
+ if (Tcl_PkgProvide(interp, PACKAGE_TCLNAME, PACKAGE_VERSION) != TCL_OK) {
+ return TCL_ERROR;
+ }
+ return TCL_OK;
+}
+
+/*
+ *----------------------------------------------------------------------------
+ *
+ * @CPACKAGE@_SafeInit --
+ *
+ * Initialisation routine for loadable module in a safe interpreter.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Creates commands in the interpreter, loads package.
+ *
+ *----------------------------------------------------------------------------
+ */
+
+int
+@CPACKAGE@_SafeInit(
+ Tcl_Interp *interp /* Interpreter to initialise. */
+) {
+ return @CPACKAGE@_Init(interp);
+}
+