1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
|
/*
* init.c --
*
* Generic photo image type initialization, Tcl/Tk package
*
* Copyright (c) 2002 Andreas Kupries <andreas_kupries@users.sourceforge.net>
*
*/
#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 sImageFormat = {
(char *) "%PHIMGTYPE%", /* name */
ChnMatch, /* fileMatchProc */
ObjMatch, /* stringMatchProc */
ChnRead, /* fileReadProc */
ObjRead, /* stringReadProc */
ChnWrite, /* fileWriteProc */
StringWrite, /* stringWriteProc */
0
};
#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 sImageFormatBeta = {
(char *) "%PHIMGTYPE_BETA%", /* name */
SECOND_CHNMATCH, /* fileMatchProc */
SECOND_OBJMATCH, /* stringMatchProc */
SECOND_CHNREAD, /* fileReadProc */
SECOND_OBJREAD, /* stringReadProc */
SECOND_CHNWRITE, /* fileWriteProc */
SECOND_STRWRITE, /* stringWriteProc */
0
};
#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(&sImageFormat);
#ifdef SECOND_FORMAT
Tk_CreatePhotoImageFormat(&sImageFormatBeta);
#endif /* SECOND_FORMAT */
/*
* At last provide the package ...
*/
if (Tcl_PkgProvide(interp, PACKAGE_TCLNAME, TKIMG_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);
}
|