tkStubImg.c
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:2k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /* 
  2.  * tkStubImg.c --
  3.  *
  4.  * Stub object that will be statically linked into extensions that wish
  5.  * to access Tk.
  6.  *
  7.  * Copyright (c) 1999 Jan Nijtmans.
  8.  * Copyright (c) 1998-1999 by Scriptics Corporation.
  9.  *
  10.  * See the file "license.terms" for information on usage and redistribution
  11.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  12.  *
  13.  * RCS: @(#) $Id: tkStubImg.c,v 1.3 2003/01/09 01:00:36 dgp Exp $
  14.  */
  15. #include "tcl.h"
  16. /*
  17.  *----------------------------------------------------------------------
  18.  *
  19.  * Tk_InitImageArgs --
  20.  *
  21.  * Performs the necessary conversion from Tcl_Obj's to strings
  22.  *      in the createProc for Tcl_CreateImageType. If running under
  23.  *      Tk 8.2 or earlier without the Img-patch, this function has
  24.  *      no effect.
  25.  *
  26.  * Results:
  27.  * argvPtr will point to an argument list which is guaranteed to
  28.  * contain strings, no matter what Tk version is running.
  29.  *
  30.  * Side effects:
  31.  * None
  32.  *
  33.  *----------------------------------------------------------------------
  34.  */
  35. #ifdef Tk_InitImageArgs
  36. #undef Tk_InitImageArgs
  37. #endif
  38. void
  39. Tk_InitImageArgs(interp, argc, argvPtr)
  40.     Tcl_Interp *interp;
  41.     int argc;
  42.     char ***argvPtr;
  43. {
  44.     static int useNewImage = -1;
  45.     static char **argv = NULL;
  46.     if (argv) {
  47. tclStubsPtr->tcl_Free((char *) argv);
  48. argv = NULL;
  49.     }
  50.     if (useNewImage < 0) {
  51. Tcl_CmdInfo cmdInfo;
  52. if (!tclStubsPtr->tcl_GetCommandInfo(interp,"image", &cmdInfo)) {
  53.     tclStubsPtr->tcl_Panic("cannot find the "image" command");
  54. }
  55. if (cmdInfo.isNativeObjectProc == 1) {
  56.     useNewImage = 1; /* Tk uses the new image interface */
  57. } else {
  58.     useNewImage = 0; /* Tk uses old image interface */
  59. }
  60.     }
  61.     if (useNewImage && (argc > 0)) {
  62. int i;
  63. argv = (char **) tclStubsPtr->tcl_Alloc(argc * sizeof(char *));
  64. for (i = 0; i < argc; i++) {
  65.     argv[i] = tclStubsPtr->tcl_GetString((Tcl_Obj *)(*argvPtr)[i]);
  66. }
  67. *argvPtr = (char **) argv;
  68.     }
  69. }