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

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * tk.h --
  3.  *
  4.  * Declarations for Tk-related things that are visible
  5.  * outside of the Tk module itself.
  6.  *
  7.  * Copyright (c) 1989-1994 The Regents of the University of California.
  8.  * Copyright (c) 1994 The Australian National University.
  9.  * Copyright (c) 1994-1998 Sun Microsystems, Inc.
  10.  * Copyright (c) 1998-2000 Ajuba Solutions.
  11.  *
  12.  * See the file "license.terms" for information on usage and redistribution
  13.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  14.  *
  15.  * RCS: @(#) $Id: tk.h,v 1.74.2.21 2008/02/06 15:31:40 dgp Exp $
  16.  */
  17. #ifndef _TK
  18. #define _TK
  19. #include <tcl.h>
  20. #if (TCL_MAJOR_VERSION != 8) || (TCL_MINOR_VERSION != 4)
  21. # error Tk 8.4 must be compiled with tcl.h from Tcl 8.4
  22. #endif
  23. /*
  24.  * For C++ compilers, use extern "C"
  25.  */
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29. /*
  30.  * When version numbers change here, you must also go into the following files
  31.  * and update the version numbers:
  32.  *
  33.  * library/tk.tcl (only if Major.minor changes, not patchlevel)
  34.  * unix/configure.in (2 LOC Major, 2 LOC minor, 1 LOC patch)
  35.  * win/configure.in (as above)
  36.  * win/makefile.vc (not patchlevel)
  37.  * README (sections 0 and 1)
  38.  * mac/README (not patchlevel)
  39.  * win/README (not patchlevel)
  40.  * unix/README (not patchlevel)
  41.  * unix/tk.spec (3 LOC Major/Minor, 2 LOC patch)
  42.  * win/tcl.m4 (not patchlevel)
  43.  *
  44.  * You may also need to update some of these files when the numbers change
  45.  * for the version of Tcl that this release of Tk is compiled against.
  46.  */
  47. #define TK_MAJOR_VERSION   8
  48. #define TK_MINOR_VERSION   4
  49. #define TK_RELEASE_LEVEL   TCL_FINAL_RELEASE
  50. #define TK_RELEASE_SERIAL  18
  51. #define TK_VERSION "8.4"
  52. #define TK_PATCH_LEVEL "8.4.18"
  53. /* 
  54.  * A special definition used to allow this header file to be included
  55.  * from windows or mac resource files so that they can obtain version
  56.  * information.  RC_INVOKED is defined by default by the windows RC tool
  57.  * and manually set for macintosh.
  58.  *
  59.  * Resource compilers don't like all the C stuff, like typedefs and
  60.  * procedure declarations, that occur below, so block them out.
  61.  */
  62.     
  63. #ifndef RC_INVOKED
  64.     
  65. #ifndef _XLIB_H
  66. #   if defined (MAC_TCL)
  67. # include <Xlib.h>
  68. # include <X.h>
  69. #   elif defined(MAC_OSX_TK)
  70. # include <X11/Xlib.h>
  71. # include <X11/X.h>
  72. #   else
  73. # include <X11/Xlib.h>
  74. #   endif
  75. #endif
  76. #ifdef __STDC__
  77. #   include <stddef.h>
  78. #endif
  79. #ifdef BUILD_tk
  80. # undef TCL_STORAGE_CLASS
  81. # define TCL_STORAGE_CLASS DLLEXPORT
  82. #endif
  83. /*
  84.  * Decide whether or not to use input methods.
  85.  */
  86. #ifdef XNQueryInputStyle
  87. #define TK_USE_INPUT_METHODS
  88. #endif
  89. /*
  90.  * Dummy types that are used by clients:
  91.  */
  92. typedef struct Tk_BindingTable_ *Tk_BindingTable;
  93. typedef struct Tk_Canvas_ *Tk_Canvas;
  94. typedef struct Tk_Cursor_ *Tk_Cursor;
  95. typedef struct Tk_ErrorHandler_ *Tk_ErrorHandler;
  96. typedef struct Tk_Font_ *Tk_Font;
  97. typedef struct Tk_Image__ *Tk_Image;
  98. typedef struct Tk_ImageMaster_ *Tk_ImageMaster;
  99. typedef struct Tk_OptionTable_ *Tk_OptionTable;
  100. typedef struct Tk_PostscriptInfo_ *Tk_PostscriptInfo;
  101. typedef struct Tk_TextLayout_ *Tk_TextLayout;
  102. typedef struct Tk_Window_ *Tk_Window;
  103. typedef struct Tk_3DBorder_ *Tk_3DBorder;
  104. typedef struct Tk_Style_ *Tk_Style;
  105. typedef struct Tk_StyleEngine_ *Tk_StyleEngine;
  106. typedef struct Tk_StyledElement_ *Tk_StyledElement;
  107. /*
  108.  * Additional types exported to clients.
  109.  */
  110. typedef CONST char *Tk_Uid;
  111. /*
  112.  * The enum below defines the valid types for Tk configuration options
  113.  * as implemented by Tk_InitOptions, Tk_SetOptions, etc.
  114.  */
  115. typedef enum {
  116.     TK_OPTION_BOOLEAN,
  117.     TK_OPTION_INT,
  118.     TK_OPTION_DOUBLE,
  119.     TK_OPTION_STRING,
  120.     TK_OPTION_STRING_TABLE,
  121.     TK_OPTION_COLOR,
  122.     TK_OPTION_FONT,
  123.     TK_OPTION_BITMAP,
  124.     TK_OPTION_BORDER,
  125.     TK_OPTION_RELIEF,
  126.     TK_OPTION_CURSOR,
  127.     TK_OPTION_JUSTIFY,
  128.     TK_OPTION_ANCHOR,
  129.     TK_OPTION_SYNONYM,
  130.     TK_OPTION_PIXELS,
  131.     TK_OPTION_WINDOW,
  132.     TK_OPTION_END,
  133.     TK_OPTION_CUSTOM,
  134.     TK_OPTION_STYLE
  135. } Tk_OptionType;
  136. /*
  137.  * Structures of the following type are used by widgets to specify
  138.  * their configuration options.  Typically each widget has a static
  139.  * array of these structures, where each element of the array describes
  140.  * a single configuration option.  The array is passed to
  141.  * Tk_CreateOptionTable.
  142.  */
  143. typedef struct Tk_OptionSpec {
  144.     Tk_OptionType type; /* Type of option, such as TK_OPTION_COLOR; 
  145.  * see definitions above. Last option in
  146.  * table must have type TK_OPTION_END. */
  147.     char *optionName; /* Name used to specify option in Tcl
  148.  * commands. */
  149.     char *dbName; /* Name for option in option database. */
  150.     char *dbClass; /* Class for option in database. */
  151.     char *defValue; /* Default value for option if not specified
  152.  * in command line, the option database,
  153.  * or the system. */
  154.     int objOffset; /* Where in record to store a Tcl_Obj * that
  155.  * holds the value of this option, specified
  156.  * as an offset in bytes from the start of
  157.  * the record. Use the Tk_Offset macro to
  158.  * generate values for this.  -1 means don't
  159.  * store the Tcl_Obj in the record. */
  160.     int internalOffset; /* Where in record to store the internal
  161.  * representation of the value of this option,
  162.  * such as an int or XColor *.  This field
  163.  * is specified as an offset in bytes
  164.  * from the start of the record. Use the
  165.  * Tk_Offset macro to generate values for it.
  166.  * -1 means don't store the internal
  167.  * representation in the record. */
  168.     int flags; /* Any combination of the values defined
  169.  * below. */
  170.     ClientData clientData; /* An alternate place to put option-specific
  171.       * data. Used for the monochrome default value
  172.  * for colors, etc. */
  173.     int typeMask; /* An arbitrary bit mask defined by the
  174.  * class manager; typically bits correspond
  175.  * to certain kinds of options such as all
  176.  * those that require a redisplay when they
  177.  * change.  Tk_SetOptions returns the bit-wise
  178.  * OR of the typeMasks of all options that
  179.  * were changed. */
  180. } Tk_OptionSpec;
  181. /*
  182.  * Flag values for Tk_OptionSpec structures.  These flags are shared by
  183.  * Tk_ConfigSpec structures, so be sure to coordinate any changes
  184.  * carefully.
  185.  */
  186. #define TK_OPTION_NULL_OK (1 << 0)
  187. #define TK_OPTION_DONT_SET_DEFAULT (1 << 3)
  188. /*
  189.  * The following structure and function types are used by TK_OPTION_CUSTOM
  190.  * options; the structure holds pointers to the functions needed by the Tk
  191.  * option config code to handle a custom option.
  192.  */
  193. typedef int (Tk_CustomOptionSetProc) _ANSI_ARGS_((ClientData clientData,
  194. Tcl_Interp *interp, Tk_Window tkwin, Tcl_Obj **value, char *widgRec,
  195. int offset, char *saveInternalPtr, int flags));
  196. typedef Tcl_Obj *(Tk_CustomOptionGetProc) _ANSI_ARGS_((ClientData clientData,
  197. Tk_Window tkwin, char *widgRec, int offset));
  198. typedef void (Tk_CustomOptionRestoreProc) _ANSI_ARGS_((ClientData clientData,
  199. Tk_Window tkwin, char *internalPtr, char *saveInternalPtr));
  200. typedef void (Tk_CustomOptionFreeProc) _ANSI_ARGS_((ClientData clientData,
  201. Tk_Window tkwin, char *internalPtr));
  202.     
  203. typedef struct Tk_ObjCustomOption {
  204.     char *name; /* Name of the custom option. */
  205.     Tk_CustomOptionSetProc *setProc; /* Function to use to set a record's
  206.  * option value from a Tcl_Obj */
  207.     Tk_CustomOptionGetProc *getProc; /* Function to use to get a Tcl_Obj
  208.  * representation from an internal
  209.  * representation of an option. */
  210.     Tk_CustomOptionRestoreProc *restoreProc; /* Function to use to restore a
  211.  * saved value for the internal
  212.  * representation. */
  213.     Tk_CustomOptionFreeProc *freeProc; /* Function to use to free the internal
  214.  * representation of an option. */
  215.     ClientData clientData; /* Arbitrary one-word value passed to
  216.  * the handling procs. */
  217. } Tk_ObjCustomOption;
  218. /*
  219.  * Macro to use to fill in "offset" fields of the Tk_OptionSpec.
  220.  * struct.  Computes number of bytes from beginning of structure
  221.  * to a given field.
  222.  */
  223. #ifdef offsetof
  224. #define Tk_Offset(type, field) ((int) offsetof(type, field))
  225. #else
  226. #define Tk_Offset(type, field) ((int) ((char *) &((type *) 0)->field))
  227. #endif
  228. /*
  229.  * The following two structures are used for error handling.  When
  230.  * configuration options are being modified, the old values are
  231.  * saved in a Tk_SavedOptions structure.  If an error occurs, then the
  232.  * contents of the structure can be used to restore all of the old
  233.  * values.  The contents of this structure are for the private use
  234.  * Tk.  No-one outside Tk should ever read or write any of the fields
  235.  * of these structures.
  236.  */
  237. typedef struct Tk_SavedOption {
  238.     struct TkOption *optionPtr; /* Points to information that describes
  239.  * the option. */
  240.     Tcl_Obj *valuePtr; /* The old value of the option, in
  241.  * the form of a Tcl object; may be
  242.  * NULL if the value wasn't saved as
  243.  * an object. */
  244.     double internalForm; /* The old value of the option, in
  245.  * some internal representation such
  246.  * as an int or (XColor *).  Valid
  247.  * only if optionPtr->specPtr->objOffset
  248.  * is < 0.  The space must be large
  249.  * enough to accommodate a double, a
  250.  * long, or a pointer; right now it
  251.  * looks like a double is big
  252.  * enough.  Also, using a double
  253.  * guarantees that the field is
  254.  * properly aligned for storing large
  255.  * values. */
  256. } Tk_SavedOption;
  257. #ifdef TCL_MEM_DEBUG
  258. #   define TK_NUM_SAVED_OPTIONS 2
  259. #else
  260. #   define TK_NUM_SAVED_OPTIONS 20
  261. #endif
  262. typedef struct Tk_SavedOptions {
  263.     char *recordPtr; /* The data structure in which to
  264.  * restore configuration options. */
  265.     Tk_Window tkwin; /* Window associated with recordPtr;
  266.  * needed to restore certain options. */
  267.     int numItems; /* The number of valid items in 
  268.  * items field. */
  269.     Tk_SavedOption items[TK_NUM_SAVED_OPTIONS];
  270. /* Items used to hold old values. */
  271.     struct Tk_SavedOptions *nextPtr; /* Points to next structure in list;
  272.  * needed if too many options changed
  273.  * to hold all the old values in a
  274.  * single structure.  NULL means no
  275.  * more structures. */
  276. } Tk_SavedOptions;
  277. /*
  278.  * Structure used to describe application-specific configuration
  279.  * options:  indicates procedures to call to parse an option and
  280.  * to return a text string describing an option. THESE ARE
  281.  * DEPRECATED; PLEASE USE THE NEW STRUCTURES LISTED ABOVE.
  282.  */
  283. /*
  284.  * This is a temporary flag used while tkObjConfig and new widgets
  285.  * are in development.
  286.  */
  287. #ifndef __NO_OLD_CONFIG
  288. typedef int (Tk_OptionParseProc) _ANSI_ARGS_((ClientData clientData,
  289. Tcl_Interp *interp, Tk_Window tkwin, CONST84 char *value, char *widgRec,
  290. int offset));
  291. typedef char *(Tk_OptionPrintProc) _ANSI_ARGS_((ClientData clientData,
  292. Tk_Window tkwin, char *widgRec, int offset,
  293. Tcl_FreeProc **freeProcPtr));
  294. typedef struct Tk_CustomOption {
  295.     Tk_OptionParseProc *parseProc; /* Procedure to call to parse an
  296.  * option and store it in converted
  297.  * form. */
  298.     Tk_OptionPrintProc *printProc; /* Procedure to return a printable
  299.  * string describing an existing
  300.  * option. */
  301.     ClientData clientData; /* Arbitrary one-word value used by
  302.  * option parser:  passed to
  303.  * parseProc and printProc. */
  304. } Tk_CustomOption;
  305. /*
  306.  * Structure used to specify information for Tk_ConfigureWidget.  Each
  307.  * structure gives complete information for one option, including
  308.  * how the option is specified on the command line, where it appears
  309.  * in the option database, etc.
  310.  */
  311. typedef struct Tk_ConfigSpec {
  312.     int type; /* Type of option, such as TK_CONFIG_COLOR;
  313.  * see definitions below.  Last option in
  314.  * table must have type TK_CONFIG_END. */
  315.     char *argvName; /* Switch used to specify option in argv.
  316.  * NULL means this spec is part of a group. */
  317.     Tk_Uid dbName; /* Name for option in option database. */
  318.     Tk_Uid dbClass; /* Class for option in database. */
  319.     Tk_Uid defValue; /* Default value for option if not
  320.  * specified in command line or database. */
  321.     int offset; /* Where in widget record to store value;
  322.  * use Tk_Offset macro to generate values
  323.  * for this. */
  324.     int specFlags; /* Any combination of the values defined
  325.  * below;  other bits are used internally
  326.  * by tkConfig.c. */
  327.     Tk_CustomOption *customPtr; /* If type is TK_CONFIG_CUSTOM then this is
  328.  * a pointer to info about how to parse and
  329.  * print the option.  Otherwise it is
  330.  * irrelevant. */
  331. } Tk_ConfigSpec;
  332. /*
  333.  * Type values for Tk_ConfigSpec structures.  See the user
  334.  * documentation for details.
  335.  */
  336. typedef enum {
  337.     TK_CONFIG_BOOLEAN, TK_CONFIG_INT, TK_CONFIG_DOUBLE, TK_CONFIG_STRING,
  338.     TK_CONFIG_UID, TK_CONFIG_COLOR, TK_CONFIG_FONT, TK_CONFIG_BITMAP,
  339.     TK_CONFIG_BORDER, TK_CONFIG_RELIEF, TK_CONFIG_CURSOR, 
  340.     TK_CONFIG_ACTIVE_CURSOR, TK_CONFIG_JUSTIFY, TK_CONFIG_ANCHOR, 
  341.     TK_CONFIG_SYNONYM, TK_CONFIG_CAP_STYLE, TK_CONFIG_JOIN_STYLE,
  342.     TK_CONFIG_PIXELS, TK_CONFIG_MM, TK_CONFIG_WINDOW, TK_CONFIG_CUSTOM, 
  343.     TK_CONFIG_END
  344. } Tk_ConfigTypes;
  345. /*
  346.  * Possible values for flags argument to Tk_ConfigureWidget:
  347.  */
  348. #define TK_CONFIG_ARGV_ONLY 1
  349. #define TK_CONFIG_OBJS 0x80
  350. /*
  351.  * Possible flag values for Tk_ConfigSpec structures.  Any bits at
  352.  * or above TK_CONFIG_USER_BIT may be used by clients for selecting
  353.  * certain entries.  Before changing any values here, coordinate with
  354.  * tkOldConfig.c (internal-use-only flags are defined there).
  355.  */
  356. #define TK_CONFIG_NULL_OK (1 << 0)
  357. #define TK_CONFIG_COLOR_ONLY (1 << 1)
  358. #define TK_CONFIG_MONO_ONLY (1 << 2)
  359. #define TK_CONFIG_DONT_SET_DEFAULT (1 << 3)
  360. #define TK_CONFIG_OPTION_SPECIFIED      (1 << 4)
  361. #define TK_CONFIG_USER_BIT 0x100
  362. #endif /* __NO_OLD_CONFIG */
  363. /*
  364.  * Structure used to specify how to handle argv options.
  365.  */
  366. typedef struct {
  367.     char *key; /* The key string that flags the option in the
  368.  * argv array. */
  369.     int type; /* Indicates option type;  see below. */
  370.     char *src; /* Value to be used in setting dst;  usage
  371.  * depends on type. */
  372.     char *dst; /* Address of value to be modified;  usage
  373.  * depends on type. */
  374.     char *help; /* Documentation message describing this option. */
  375. } Tk_ArgvInfo;
  376. /*
  377.  * Legal values for the type field of a Tk_ArgvInfo: see the user
  378.  * documentation for details.
  379.  */
  380. #define TK_ARGV_CONSTANT 15
  381. #define TK_ARGV_INT 16
  382. #define TK_ARGV_STRING 17
  383. #define TK_ARGV_UID 18
  384. #define TK_ARGV_REST 19
  385. #define TK_ARGV_FLOAT 20
  386. #define TK_ARGV_FUNC 21
  387. #define TK_ARGV_GENFUNC 22
  388. #define TK_ARGV_HELP 23
  389. #define TK_ARGV_CONST_OPTION 24
  390. #define TK_ARGV_OPTION_VALUE 25
  391. #define TK_ARGV_OPTION_NAME_VALUE 26
  392. #define TK_ARGV_END 27
  393. /*
  394.  * Flag bits for passing to Tk_ParseArgv:
  395.  */
  396. #define TK_ARGV_NO_DEFAULTS 0x1
  397. #define TK_ARGV_NO_LEFTOVERS 0x2
  398. #define TK_ARGV_NO_ABBREV 0x4
  399. #define TK_ARGV_DONT_SKIP_FIRST_ARG 0x8
  400. /*
  401.  * Enumerated type for describing actions to be taken in response
  402.  * to a restrictProc established by Tk_RestrictEvents.
  403.  */
  404. typedef enum {
  405.     TK_DEFER_EVENT, TK_PROCESS_EVENT, TK_DISCARD_EVENT
  406. } Tk_RestrictAction;
  407. /*
  408.  * Priority levels to pass to Tk_AddOption:
  409.  */
  410. #define TK_WIDGET_DEFAULT_PRIO 20
  411. #define TK_STARTUP_FILE_PRIO 40
  412. #define TK_USER_DEFAULT_PRIO 60
  413. #define TK_INTERACTIVE_PRIO 80
  414. #define TK_MAX_PRIO 100
  415. /*
  416.  * Relief values returned by Tk_GetRelief:
  417.  */
  418. #define TK_RELIEF_NULL -1
  419. #define TK_RELIEF_FLAT 0
  420. #define TK_RELIEF_GROOVE 1
  421. #define TK_RELIEF_RAISED 2
  422. #define TK_RELIEF_RIDGE 3
  423. #define TK_RELIEF_SOLID 4
  424. #define TK_RELIEF_SUNKEN 5
  425. /*
  426.  * "Which" argument values for Tk_3DBorderGC:
  427.  */
  428. #define TK_3D_FLAT_GC 1
  429. #define TK_3D_LIGHT_GC 2
  430. #define TK_3D_DARK_GC 3
  431. /*
  432.  * Special EnterNotify/LeaveNotify "mode" for use in events
  433.  * generated by tkShare.c.  Pick a high enough value that it's
  434.  * unlikely to conflict with existing values (like NotifyNormal)
  435.  * or any new values defined in the future.
  436.  */
  437. #define TK_NOTIFY_SHARE 20
  438. /*
  439.  * Enumerated type for describing a point by which to anchor something:
  440.  */
  441. typedef enum {
  442.     TK_ANCHOR_N, TK_ANCHOR_NE, TK_ANCHOR_E, TK_ANCHOR_SE,
  443.     TK_ANCHOR_S, TK_ANCHOR_SW, TK_ANCHOR_W, TK_ANCHOR_NW,
  444.     TK_ANCHOR_CENTER
  445. } Tk_Anchor;
  446. /*
  447.  * Enumerated type for describing a style of justification:
  448.  */
  449. typedef enum {
  450.     TK_JUSTIFY_LEFT, TK_JUSTIFY_RIGHT, TK_JUSTIFY_CENTER
  451. } Tk_Justify;
  452. /*
  453.  * The following structure is used by Tk_GetFontMetrics() to return
  454.  * information about the properties of a Tk_Font.  
  455.  */
  456. typedef struct Tk_FontMetrics {
  457.     int ascent; /* The amount in pixels that the tallest
  458.  * letter sticks up above the baseline, plus
  459.  * any extra blank space added by the designer
  460.  * of the font. */
  461.     int descent; /* The largest amount in pixels that any
  462.  * letter sticks below the baseline, plus any
  463.  * extra blank space added by the designer of
  464.  * the font. */
  465.     int linespace; /* The sum of the ascent and descent.  How
  466.  * far apart two lines of text in the same
  467.  * font should be placed so that none of the
  468.  * characters in one line overlap any of the
  469.  * characters in the other line. */
  470. } Tk_FontMetrics;
  471. /*
  472.  * Flags passed to Tk_MeasureChars:
  473.  */
  474. #define TK_WHOLE_WORDS 1
  475. #define TK_AT_LEAST_ONE 2
  476. #define TK_PARTIAL_OK 4
  477. /*
  478.  * Flags passed to Tk_ComputeTextLayout:
  479.  */
  480. #define TK_IGNORE_TABS 8
  481. #define TK_IGNORE_NEWLINES 16
  482. /*
  483.  * Widget class procedures used to implement platform specific widget
  484.  * behavior.
  485.  */
  486. typedef Window (Tk_ClassCreateProc) _ANSI_ARGS_((Tk_Window tkwin,
  487. Window parent, ClientData instanceData));
  488. typedef void (Tk_ClassWorldChangedProc) _ANSI_ARGS_((ClientData instanceData));
  489. typedef void (Tk_ClassModalProc) _ANSI_ARGS_((Tk_Window tkwin,
  490. XEvent *eventPtr));
  491. typedef struct Tk_ClassProcs {
  492.     unsigned int size;
  493.     Tk_ClassWorldChangedProc *worldChangedProc;
  494. /* Procedure to invoke when the widget needs to
  495.  * respond in some way to a change in the
  496.  * world (font changes, etc.) */
  497.     Tk_ClassCreateProc *createProc;
  498. /* Procedure to invoke when the
  499.  * platform-dependent window needs to be
  500.                                  * created. */
  501.     Tk_ClassModalProc *modalProc;
  502. /* Procedure to invoke after all bindings on a
  503.  * widget have been triggered in order to
  504.  * handle a modal loop. */
  505. } Tk_ClassProcs;
  506. /*
  507.  * Simple accessor for Tk_ClassProcs structure.  Checks that the structure
  508.  * is not NULL, then checks the size field and returns either the requested
  509.  * field, if present, or NULL if the structure is too small to have the field
  510.  * (or NULL if the structure is NULL).
  511.  *
  512.  * A more general version of this function may be useful if other
  513.  * size-versioned structure pop up in the future:
  514.  *
  515.  * #define Tk_GetField(name, who, which) 
  516.  *     (((who) == NULL) ? NULL :
  517.  *     (((who)->size <= Tk_Offset(name, which)) ? NULL :(name)->which))
  518.  */
  519. #define Tk_GetClassProc(procs, which) 
  520.     (((procs) == NULL) ? NULL : 
  521.     (((procs)->size <= Tk_Offset(Tk_ClassProcs, which)) ? NULL:(procs)->which))
  522. /*
  523.  * Each geometry manager (the packer, the placer, etc.) is represented
  524.  * by a structure of the following form, which indicates procedures
  525.  * to invoke in the geometry manager to carry out certain functions.
  526.  */
  527. typedef void (Tk_GeomRequestProc) _ANSI_ARGS_((ClientData clientData,
  528. Tk_Window tkwin));
  529. typedef void (Tk_GeomLostSlaveProc) _ANSI_ARGS_((ClientData clientData,
  530. Tk_Window tkwin));
  531. typedef struct Tk_GeomMgr {
  532.     char *name; /* Name of the geometry manager (command
  533.  * used to invoke it, or name of widget
  534.  * class that allows embedded widgets). */
  535.     Tk_GeomRequestProc *requestProc;
  536. /* Procedure to invoke when a slave's
  537.  * requested geometry changes. */
  538.     Tk_GeomLostSlaveProc *lostSlaveProc;
  539. /* Procedure to invoke when a slave is
  540.  * taken away from one geometry manager
  541.  * by another.  NULL means geometry manager
  542.  * doesn't care when slaves are lost. */
  543. } Tk_GeomMgr;
  544. /*
  545.  * Result values returned by Tk_GetScrollInfo:
  546.  */
  547. #define TK_SCROLL_MOVETO 1
  548. #define TK_SCROLL_PAGES 2
  549. #define TK_SCROLL_UNITS 3
  550. #define TK_SCROLL_ERROR 4
  551. /*
  552.  *---------------------------------------------------------------------------
  553.  *
  554.  * Extensions to the X event set
  555.  *
  556.  *---------------------------------------------------------------------------
  557.  */
  558. #define VirtualEvent     (LASTEvent)
  559. #define ActivateNotify     (LASTEvent + 1)
  560. #define DeactivateNotify    (LASTEvent + 2)
  561. #define MouseWheelEvent     (LASTEvent + 3)
  562. #define TK_LASTEVENT     (LASTEvent + 4)
  563. #define MouseWheelMask     (1L << 28)
  564. #define ActivateMask     (1L << 29)
  565. #define VirtualEventMask    (1L << 30)
  566. #define TK_LASTEVENT     (LASTEvent + 4)
  567. /*
  568.  * A virtual event shares most of its fields with the XKeyEvent and
  569.  * XButtonEvent structures.  99% of the time a virtual event will be
  570.  * an abstraction of a key or button event, so this structure provides
  571.  * the most information to the user.  The only difference is the changing
  572.  * of the detail field for a virtual event so that it holds the name of the
  573.  * virtual event being triggered.
  574.  */
  575. typedef struct {
  576.     int type;
  577.     unsigned long serial;   /* # of last request processed by server */
  578.     Bool send_event;     /* True if this came from a SendEvent request */
  579.     Display *display;     /* Display the event was read from */
  580.     Window event;     /* Window on which event was requested. */
  581.     Window root;     /* root window that the event occured on */
  582.     Window subwindow;     /* child window */
  583.     Time time;     /* milliseconds */
  584.     int x, y;     /* pointer x, y coordinates in event window */
  585.     int x_root, y_root;     /* coordinates relative to root */
  586.     unsigned int state;     /* key or button mask */
  587.     Tk_Uid name;     /* Name of virtual event. */
  588.     Bool same_screen;     /* same screen flag */
  589. } XVirtualEvent;
  590. typedef struct {
  591.     int type;
  592.     unsigned long serial;   /* # of last request processed by server */
  593.     Bool send_event;     /* True if this came from a SendEvent request */
  594.     Display *display;     /* Display the event was read from */
  595.     Window window;     /* Window in which event occurred. */
  596. } XActivateDeactivateEvent;
  597. typedef XActivateDeactivateEvent XActivateEvent;
  598. typedef XActivateDeactivateEvent XDeactivateEvent;
  599. /*
  600.  *--------------------------------------------------------------
  601.  *
  602.  * Macros for querying Tk_Window structures.  See the
  603.  * manual entries for documentation.
  604.  *
  605.  *--------------------------------------------------------------
  606.  */
  607. #define Tk_Display(tkwin) (((Tk_FakeWin *) (tkwin))->display)
  608. #define Tk_ScreenNumber(tkwin) (((Tk_FakeWin *) (tkwin))->screenNum)
  609. #define Tk_Screen(tkwin) (ScreenOfDisplay(Tk_Display(tkwin), 
  610. Tk_ScreenNumber(tkwin)))
  611. #define Tk_Depth(tkwin) (((Tk_FakeWin *) (tkwin))->depth)
  612. #define Tk_Visual(tkwin) (((Tk_FakeWin *) (tkwin))->visual)
  613. #define Tk_WindowId(tkwin) (((Tk_FakeWin *) (tkwin))->window)
  614. #define Tk_PathName(tkwin)  (((Tk_FakeWin *) (tkwin))->pathName)
  615. #define Tk_Name(tkwin) (((Tk_FakeWin *) (tkwin))->nameUid)
  616. #define Tk_Class(tkwin)  (((Tk_FakeWin *) (tkwin))->classUid)
  617. #define Tk_X(tkwin) (((Tk_FakeWin *) (tkwin))->changes.x)
  618. #define Tk_Y(tkwin) (((Tk_FakeWin *) (tkwin))->changes.y)
  619. #define Tk_Width(tkwin) (((Tk_FakeWin *) (tkwin))->changes.width)
  620. #define Tk_Height(tkwin) 
  621.     (((Tk_FakeWin *) (tkwin))->changes.height)
  622. #define Tk_Changes(tkwin) (&((Tk_FakeWin *) (tkwin))->changes)
  623. #define Tk_Attributes(tkwin) (&((Tk_FakeWin *) (tkwin))->atts)
  624. #define Tk_IsEmbedded(tkwin) 
  625.     (((Tk_FakeWin *) (tkwin))->flags & TK_EMBEDDED)
  626. #define Tk_IsContainer(tkwin) 
  627.     (((Tk_FakeWin *) (tkwin))->flags & TK_CONTAINER)
  628. #define Tk_IsMapped(tkwin) 
  629.     (((Tk_FakeWin *) (tkwin))->flags & TK_MAPPED)
  630. #define Tk_IsTopLevel(tkwin) 
  631.     (((Tk_FakeWin *) (tkwin))->flags & TK_TOP_LEVEL)
  632. #define Tk_HasWrapper(tkwin) 
  633.     (((Tk_FakeWin *) (tkwin))->flags & TK_HAS_WRAPPER)
  634. #define Tk_WinManaged(tkwin) 
  635.     (((Tk_FakeWin *) (tkwin))->flags & TK_WIN_MANAGED)
  636. #define Tk_TopWinHierarchy(tkwin) 
  637.     (((Tk_FakeWin *) (tkwin))->flags & TK_TOP_HIERARCHY)
  638. #define Tk_ReqWidth(tkwin) (((Tk_FakeWin *) (tkwin))->reqWidth)
  639. #define Tk_ReqHeight(tkwin) (((Tk_FakeWin *) (tkwin))->reqHeight)
  640. /* Tk_InternalBorderWidth is deprecated */
  641. #define Tk_InternalBorderWidth(tkwin) 
  642.     (((Tk_FakeWin *) (tkwin))->internalBorderLeft)
  643. #define Tk_InternalBorderLeft(tkwin) 
  644.     (((Tk_FakeWin *) (tkwin))->internalBorderLeft)
  645. #define Tk_InternalBorderRight(tkwin) 
  646.     (((Tk_FakeWin *) (tkwin))->internalBorderRight)
  647. #define Tk_InternalBorderTop(tkwin) 
  648.     (((Tk_FakeWin *) (tkwin))->internalBorderTop)
  649. #define Tk_InternalBorderBottom(tkwin) 
  650.     (((Tk_FakeWin *) (tkwin))->internalBorderBottom)
  651. #define Tk_MinReqWidth(tkwin) (((Tk_FakeWin *) (tkwin))->minReqWidth)
  652. #define Tk_MinReqHeight(tkwin) (((Tk_FakeWin *) (tkwin))->minReqHeight)
  653. #define Tk_Parent(tkwin) (((Tk_FakeWin *) (tkwin))->parentPtr)
  654. #define Tk_Colormap(tkwin) (((Tk_FakeWin *) (tkwin))->atts.colormap)
  655. /*
  656.  * The structure below is needed by the macros above so that they can
  657.  * access the fields of a Tk_Window.  The fields not needed by the macros
  658.  * are declared as "dummyX".  The structure has its own type in order to
  659.  * prevent applications from accessing Tk_Window fields except using
  660.  * official macros.  WARNING!! The structure definition must be kept
  661.  * consistent with the TkWindow structure in tkInt.h.  If you change one,
  662.  * then change the other.  See the declaration in tkInt.h for
  663.  * documentation on what the fields are used for internally.
  664.  */
  665. typedef struct Tk_FakeWin {
  666.     Display *display;
  667.     char *dummy1; /* dispPtr */
  668.     int screenNum;
  669.     Visual *visual;
  670.     int depth;
  671.     Window window;
  672.     char *dummy2; /* childList */
  673.     char *dummy3; /* lastChildPtr */
  674.     Tk_Window parentPtr; /* parentPtr */
  675.     char *dummy4; /* nextPtr */
  676.     char *dummy5; /* mainPtr */
  677.     char *pathName;
  678.     Tk_Uid nameUid;
  679.     Tk_Uid classUid;
  680.     XWindowChanges changes;
  681.     unsigned int dummy6; /* dirtyChanges */
  682.     XSetWindowAttributes atts;
  683.     unsigned long dummy7; /* dirtyAtts */
  684.     unsigned int flags;
  685.     char *dummy8; /* handlerList */
  686. #ifdef TK_USE_INPUT_METHODS
  687.     XIC dummy9; /* inputContext */
  688. #endif /* TK_USE_INPUT_METHODS */
  689.     ClientData *dummy10; /* tagPtr */
  690.     int dummy11; /* numTags */
  691.     int dummy12; /* optionLevel */
  692.     char *dummy13; /* selHandlerList */
  693.     char *dummy14; /* geomMgrPtr */
  694.     ClientData dummy15; /* geomData */
  695.     int reqWidth, reqHeight;
  696.     int internalBorderLeft;
  697.     char *dummy16; /* wmInfoPtr */
  698.     char *dummy17; /* classProcPtr */
  699.     ClientData dummy18; /* instanceData */
  700.     char *dummy19; /* privatePtr */
  701.     int internalBorderRight;
  702.     int internalBorderTop;
  703.     int internalBorderBottom;
  704.     int minReqWidth;
  705.     int minReqHeight;
  706. } Tk_FakeWin;
  707. /*
  708.  * Flag values for TkWindow (and Tk_FakeWin) structures are:
  709.  *
  710.  * TK_MAPPED: 1 means window is currently mapped,
  711.  * 0 means unmapped.
  712.  * TK_TOP_LEVEL: 1 means this is a top-level widget.
  713.  * TK_ALREADY_DEAD: 1 means the window is in the process of
  714.  * being destroyed already.
  715.  * TK_NEED_CONFIG_NOTIFY: 1 means that the window has been reconfigured
  716.  * before it was made to exist.  At the time of
  717.  * making it exist a ConfigureNotify event needs
  718.  * to be generated.
  719.  * TK_GRAB_FLAG: Used to manage grabs.  See tkGrab.c for
  720.  * details.
  721.  * TK_CHECKED_IC: 1 means we've already tried to get an input
  722.  * context for this window;  if the ic field
  723.  * is NULL it means that there isn't a context
  724.  * for the field.
  725.  * TK_DONT_DESTROY_WINDOW: 1 means that Tk_DestroyWindow should not
  726.  * invoke XDestroyWindow to destroy this widget's
  727.  * X window.  The flag is set when the window
  728.  * has already been destroyed elsewhere (e.g.
  729.  * by another application) or when it will be
  730.  * destroyed later (e.g. by destroying its
  731.  * parent).
  732.  * TK_WM_COLORMAP_WINDOW: 1 means that this window has at some time
  733.  * appeared in the WM_COLORMAP_WINDOWS property
  734.  * for its toplevel, so we have to remove it
  735.  * from that property if the window is
  736.  * deleted and the toplevel isn't.
  737.  * TK_EMBEDDED: 1 means that this window (which must be a
  738.  * toplevel) is not a free-standing window but
  739.  * rather is embedded in some other application.
  740.  * TK_CONTAINER: 1 means that this window is a container, and
  741.  * that some other application (either in
  742.  * this process or elsewhere) may be
  743.  * embedding itself inside the window.
  744.  * TK_BOTH_HALVES: 1 means that this window is used for
  745.  * application embedding (either as
  746.  * container or embedded application), and
  747.  * both the containing and embedded halves
  748.  * are associated with windows in this
  749.  * particular process.
  750.  * TK_DEFER_MODAL: 1 means that this window has deferred a modal
  751.  * loop until all of the bindings for the current
  752.  * event have been invoked.
  753.  * TK_WRAPPER: 1 means that this window is the extra
  754.  * wrapper window created around a toplevel
  755.  * to hold the menubar under Unix.  See
  756.  * tkUnixWm.c for more information.
  757.  * TK_REPARENTED: 1 means that this window has been reparented
  758.  * so that as far as the window system is
  759.  * concerned it isn't a child of its Tk
  760.  * parent.  Initially this is used only for
  761.  * special Unix menubar windows.
  762.  * TK_ANONYMOUS_WINDOW: 1 means that this window has no name, and is
  763.  * thus not accessible from Tk.
  764.  * TK_HAS_WRAPPER 1 means that this window has a wrapper window
  765.  * TK_WIN_MANAGED 1 means that this window is a child of the
  766.  * root window, and is managed by the window
  767.  * manager.
  768.  * TK_TOP_HIERARCHY 1 means this window is at the top of a
  769.  * physical window hierarchy within this
  770.  * process, i.e. the window's parent
  771.  * either doesn't exist or is not owned by
  772.  * this Tk application.
  773.  * TK_PROP_PROPCHANGE 1 means that PropertyNotify events in
  774.  * this window's children should propagate
  775.  * up to this window.
  776.  */
  777. #define TK_MAPPED 1
  778. #define TK_TOP_LEVEL 2
  779. #define TK_ALREADY_DEAD 4
  780. #define TK_NEED_CONFIG_NOTIFY 8
  781. #define TK_GRAB_FLAG 0x10
  782. #define TK_CHECKED_IC 0x20
  783. #define TK_DONT_DESTROY_WINDOW 0x40
  784. #define TK_WM_COLORMAP_WINDOW 0x80
  785. #define TK_EMBEDDED 0x100
  786. #define TK_CONTAINER 0x200
  787. #define TK_BOTH_HALVES 0x400
  788. #define TK_DEFER_MODAL 0x800
  789. #define TK_WRAPPER 0x1000
  790. #define TK_REPARENTED 0x2000
  791. #define TK_ANONYMOUS_WINDOW 0x4000
  792. #define TK_HAS_WRAPPER 0x8000
  793. #define TK_WIN_MANAGED 0x10000
  794. #define TK_TOP_HIERARCHY 0x20000
  795. #define TK_PROP_PROPCHANGE 0x40000
  796. /*
  797.  *--------------------------------------------------------------
  798.  *
  799.  * Procedure prototypes and structures used for defining new canvas
  800.  * items:
  801.  *
  802.  *--------------------------------------------------------------
  803.  */
  804. typedef enum {
  805.     TK_STATE_NULL = -1, TK_STATE_ACTIVE, TK_STATE_DISABLED,
  806.     TK_STATE_NORMAL, TK_STATE_HIDDEN
  807. } Tk_State;
  808. typedef struct Tk_SmoothMethod {
  809.     char *name;
  810.     int (*coordProc) _ANSI_ARGS_((Tk_Canvas canvas,
  811. double *pointPtr, int numPoints, int numSteps,
  812. XPoint xPoints[], double dblPoints[]));
  813.     void (*postscriptProc) _ANSI_ARGS_((Tcl_Interp *interp,
  814. Tk_Canvas canvas, double *coordPtr,
  815. int numPoints, int numSteps));
  816. } Tk_SmoothMethod;
  817. /*
  818.  * For each item in a canvas widget there exists one record with
  819.  * the following structure.  Each actual item is represented by
  820.  * a record with the following stuff at its beginning, plus additional
  821.  * type-specific stuff after that.
  822.  */
  823. #define TK_TAG_SPACE 3
  824. typedef struct Tk_Item  {
  825.     int id; /* Unique identifier for this item
  826.  * (also serves as first tag for
  827.  * item). */
  828.     struct Tk_Item *nextPtr; /* Next in display list of all
  829.  * items in this canvas.  Later items
  830.  * in list are drawn on top of earlier
  831.  * ones. */
  832.     Tk_Uid staticTagSpace[TK_TAG_SPACE];/* Built-in space for limited # of
  833.  * tags. */
  834.     Tk_Uid *tagPtr; /* Pointer to array of tags.  Usually
  835.  * points to staticTagSpace, but
  836.  * may point to malloc-ed space if
  837.  * there are lots of tags. */
  838.     int tagSpace; /* Total amount of tag space available
  839.  * at tagPtr. */
  840.     int numTags; /* Number of tag slots actually used
  841.  * at *tagPtr. */
  842.     struct Tk_ItemType *typePtr; /* Table of procedures that implement
  843.  * this type of item. */
  844.     int x1, y1, x2, y2; /* Bounding box for item, in integer
  845.  * canvas units. Set by item-specific
  846.  * code and guaranteed to contain every
  847.  * pixel drawn in item.  Item area
  848.  * includes x1 and y1 but not x2
  849.  * and y2. */
  850.     struct Tk_Item *prevPtr; /* Previous in display list of all
  851.  * items in this canvas. Later items
  852.  * in list are drawn just below earlier
  853.  * ones. */
  854.     Tk_State state; /* state of item */
  855.     char *reserved1; /* reserved for future use */
  856.     int redraw_flags; /* some flags used in the canvas */
  857.     /*
  858.      *------------------------------------------------------------------
  859.      * Starting here is additional type-specific stuff;  see the
  860.      * declarations for individual types to see what is part of
  861.      * each type.  The actual space below is determined by the
  862.      * "itemInfoSize" of the type's Tk_ItemType record.
  863.      *------------------------------------------------------------------
  864.      */
  865. } Tk_Item;
  866. /*
  867.  * Flag bits for canvases (redraw_flags):
  868.  *
  869.  * TK_ITEM_STATE_DEPENDANT - 1 means that object needs to be
  870.  * redrawn if the canvas state changes.
  871.  * TK_ITEM_DONT_REDRAW -  1 means that the object redraw is already
  872.  * been prepared, so the general canvas code
  873.  * doesn't need to do that any more.
  874.  */
  875. #define TK_ITEM_STATE_DEPENDANT 1
  876. #define TK_ITEM_DONT_REDRAW 2
  877. /*
  878.  * Records of the following type are used to describe a type of
  879.  * item (e.g.  lines, circles, etc.) that can form part of a
  880.  * canvas widget.
  881.  */
  882. #ifdef USE_OLD_CANVAS
  883. typedef int Tk_ItemCreateProc _ANSI_ARGS_((Tcl_Interp *interp,
  884.     Tk_Canvas canvas, Tk_Item *itemPtr, int argc,
  885.     char **argv));
  886. typedef int Tk_ItemConfigureProc _ANSI_ARGS_((Tcl_Interp *interp,
  887.     Tk_Canvas canvas, Tk_Item *itemPtr, int argc,
  888.     char **argv, int flags));
  889. typedef int Tk_ItemCoordProc _ANSI_ARGS_((Tcl_Interp *interp,
  890.     Tk_Canvas canvas, Tk_Item *itemPtr, int argc,
  891.     char **argv));
  892. #else
  893. typedef int Tk_ItemCreateProc _ANSI_ARGS_((Tcl_Interp *interp,
  894.     Tk_Canvas canvas, Tk_Item *itemPtr, int argc,
  895.     Tcl_Obj *CONST objv[]));
  896. typedef int Tk_ItemConfigureProc _ANSI_ARGS_((Tcl_Interp *interp,
  897.     Tk_Canvas canvas, Tk_Item *itemPtr, int argc,
  898.     Tcl_Obj *CONST objv[], int flags));
  899. typedef int Tk_ItemCoordProc _ANSI_ARGS_((Tcl_Interp *interp,
  900.     Tk_Canvas canvas, Tk_Item *itemPtr, int argc,
  901.     Tcl_Obj *CONST argv[]));
  902. #endif
  903. typedef void Tk_ItemDeleteProc _ANSI_ARGS_((Tk_Canvas canvas,
  904.     Tk_Item *itemPtr, Display *display));
  905. typedef void Tk_ItemDisplayProc _ANSI_ARGS_((Tk_Canvas canvas,
  906.     Tk_Item *itemPtr, Display *display, Drawable dst,
  907.     int x, int y, int width, int height));
  908. typedef double Tk_ItemPointProc _ANSI_ARGS_((Tk_Canvas canvas,
  909.     Tk_Item *itemPtr, double *pointPtr));
  910. typedef int Tk_ItemAreaProc _ANSI_ARGS_((Tk_Canvas canvas,
  911.     Tk_Item *itemPtr, double *rectPtr));
  912. typedef int Tk_ItemPostscriptProc _ANSI_ARGS_((Tcl_Interp *interp,
  913.     Tk_Canvas canvas, Tk_Item *itemPtr, int prepass));
  914. typedef void Tk_ItemScaleProc _ANSI_ARGS_((Tk_Canvas canvas,
  915.     Tk_Item *itemPtr, double originX, double originY,
  916.     double scaleX, double scaleY));
  917. typedef void Tk_ItemTranslateProc _ANSI_ARGS_((Tk_Canvas canvas,
  918.     Tk_Item *itemPtr, double deltaX, double deltaY));
  919. typedef int Tk_ItemIndexProc _ANSI_ARGS_((Tcl_Interp *interp,
  920.     Tk_Canvas canvas, Tk_Item *itemPtr, char *indexString,
  921.     int *indexPtr));
  922. typedef void Tk_ItemCursorProc _ANSI_ARGS_((Tk_Canvas canvas,
  923.     Tk_Item *itemPtr, int index));
  924. typedef int Tk_ItemSelectionProc _ANSI_ARGS_((Tk_Canvas canvas,
  925.     Tk_Item *itemPtr, int offset, char *buffer,
  926.     int maxBytes));
  927. typedef void Tk_ItemInsertProc _ANSI_ARGS_((Tk_Canvas canvas,
  928.     Tk_Item *itemPtr, int beforeThis, char *string));
  929. typedef void Tk_ItemDCharsProc _ANSI_ARGS_((Tk_Canvas canvas,
  930.     Tk_Item *itemPtr, int first, int last));
  931. #ifndef __NO_OLD_CONFIG
  932. typedef struct Tk_ItemType {
  933.     char *name; /* The name of this type of item, such
  934.  * as "line". */
  935.     int itemSize; /* Total amount of space needed for
  936.  * item's record. */
  937.     Tk_ItemCreateProc *createProc; /* Procedure to create a new item of
  938.  * this type. */
  939.     Tk_ConfigSpec *configSpecs; /* Pointer to array of configuration
  940.  * specs for this type.  Used for
  941.  * returning configuration info. */
  942.     Tk_ItemConfigureProc *configProc; /* Procedure to call to change
  943.  * configuration options. */
  944.     Tk_ItemCoordProc *coordProc; /* Procedure to call to get and set
  945.  * the item's coordinates. */
  946.     Tk_ItemDeleteProc *deleteProc; /* Procedure to delete existing item of
  947.  * this type. */
  948.     Tk_ItemDisplayProc *displayProc; /* Procedure to display items of
  949.  * this type. */
  950.     int alwaysRedraw; /* Non-zero means displayProc should
  951.  * be called even when the item has
  952.     * been moved off-screen. */
  953.     Tk_ItemPointProc *pointProc; /* Computes distance from item to
  954.  * a given point. */
  955.     Tk_ItemAreaProc *areaProc; /* Computes whether item is inside,
  956.  * outside, or overlapping an area. */
  957.     Tk_ItemPostscriptProc *postscriptProc;
  958. /* Procedure to write a Postscript
  959.  * description for items of this
  960.  * type. */
  961.     Tk_ItemScaleProc *scaleProc; /* Procedure to rescale items of
  962.  * this type. */
  963.     Tk_ItemTranslateProc *translateProc;/* Procedure to translate items of
  964.  * this type. */
  965.     Tk_ItemIndexProc *indexProc; /* Procedure to determine index of
  966.  * indicated character.  NULL if
  967.  * item doesn't support indexing. */
  968.     Tk_ItemCursorProc *icursorProc; /* Procedure to set insert cursor pos.
  969.  * to just before a given position. */
  970.     Tk_ItemSelectionProc *selectionProc;/* Procedure to return selection (in
  971.  * STRING format) when it is in this
  972.  * item. */
  973.     Tk_ItemInsertProc *insertProc; /* Procedure to insert something into
  974.  * an item. */
  975.     Tk_ItemDCharsProc *dCharsProc; /* Procedure to delete characters
  976.  * from an item. */
  977.     struct Tk_ItemType *nextPtr; /* Used to link types together into
  978.  * a list. */
  979.     char *reserved1; /* Reserved for future extension. */
  980.     int   reserved2; /* Carefully compatible with */
  981.     char *reserved3; /* Jan Nijtmans dash patch */
  982.     char *reserved4;
  983. } Tk_ItemType;
  984. #endif
  985. /*
  986.  * The following structure provides information about the selection and
  987.  * the insertion cursor.  It is needed by only a few items, such as
  988.  * those that display text.  It is shared by the generic canvas code
  989.  * and the item-specific code, but most of the fields should be written
  990.  * only by the canvas generic code.
  991.  */
  992. typedef struct Tk_CanvasTextInfo {
  993.     Tk_3DBorder selBorder; /* Border and background for selected
  994.  * characters.  Read-only to items.*/
  995.     int selBorderWidth; /* Width of border around selection. 
  996.  * Read-only to items. */
  997.     XColor *selFgColorPtr; /* Foreground color for selected text.
  998.  * Read-only to items. */
  999.     Tk_Item *selItemPtr; /* Pointer to selected item.  NULL means
  1000.  * selection isn't in this canvas.
  1001.  * Writable by items. */
  1002.     int selectFirst; /* Character index of first selected
  1003.  * character.  Writable by items. */
  1004.     int selectLast; /* Character index of last selected
  1005.  * character.  Writable by items. */
  1006.     Tk_Item *anchorItemPtr; /* Item corresponding to "selectAnchor":
  1007.  * not necessarily selItemPtr.   Read-only
  1008.  * to items. */
  1009.     int selectAnchor; /* Character index of fixed end of
  1010.  * selection (i.e. "select to" operation will
  1011.  * use this as one end of the selection).
  1012.  * Writable by items. */
  1013.     Tk_3DBorder insertBorder; /* Used to draw vertical bar for insertion
  1014.  * cursor.  Read-only to items. */
  1015.     int insertWidth; /* Total width of insertion cursor.  Read-only
  1016.  * to items. */
  1017.     int insertBorderWidth; /* Width of 3-D border around insert cursor.
  1018.  * Read-only to items. */
  1019.     Tk_Item *focusItemPtr; /* Item that currently has the input focus,
  1020.  * or NULL if no such item.  Read-only to
  1021.  * items.  */
  1022.     int gotFocus; /* Non-zero means that the canvas widget has
  1023.  * the input focus.  Read-only to items.*/
  1024.     int cursorOn; /* Non-zero means that an insertion cursor
  1025.  * should be displayed in focusItemPtr.
  1026.  * Read-only to items.*/
  1027. } Tk_CanvasTextInfo;
  1028. /*
  1029.  * Structures used for Dashing and Outline.
  1030.  */
  1031. typedef struct Tk_Dash {
  1032.     int number;
  1033.     union {
  1034. char *pt;
  1035. char array[sizeof(char *)];
  1036.     } pattern;
  1037. } Tk_Dash;
  1038. typedef struct Tk_TSOffset {
  1039.     int flags; /* flags; see below for possible values */
  1040.     int xoffset; /* x offset */
  1041.     int yoffset; /* y offset */
  1042. } Tk_TSOffset;
  1043. /*
  1044.  * Bit fields in Tk_Offset->flags:
  1045.  */
  1046. #define TK_OFFSET_INDEX 1
  1047. #define TK_OFFSET_RELATIVE 2
  1048. #define TK_OFFSET_LEFT 4
  1049. #define TK_OFFSET_CENTER 8
  1050. #define TK_OFFSET_RIGHT 16
  1051. #define TK_OFFSET_TOP 32
  1052. #define TK_OFFSET_MIDDLE 64
  1053. #define TK_OFFSET_BOTTOM 128
  1054. typedef struct Tk_Outline {
  1055.     GC gc; /* Graphics context. */
  1056.     double width; /* Width of outline. */
  1057.     double activeWidth; /* Width of outline. */
  1058.     double disabledWidth; /* Width of outline. */
  1059.     int offset; /* Dash offset */
  1060.     Tk_Dash dash; /* Dash pattern */
  1061.     Tk_Dash activeDash; /* Dash pattern if state is active*/
  1062.     Tk_Dash disabledDash; /* Dash pattern if state is disabled*/
  1063.     VOID *reserved1; /* reserved for future expansion */
  1064.     VOID *reserved2;
  1065.     VOID *reserved3;
  1066.     Tk_TSOffset tsoffset; /* stipple offset for outline*/
  1067.     XColor *color; /* Outline color. */
  1068.     XColor *activeColor; /* Outline color if state is active. */
  1069.     XColor *disabledColor; /* Outline color if state is disabled. */
  1070.     Pixmap stipple; /* Outline Stipple pattern. */
  1071.     Pixmap activeStipple; /* Outline Stipple pattern if state is active. */
  1072.     Pixmap disabledStipple; /* Outline Stipple pattern if state is disabled. */
  1073. } Tk_Outline;
  1074. /*
  1075.  *--------------------------------------------------------------
  1076.  *
  1077.  * Procedure prototypes and structures used for managing images:
  1078.  *
  1079.  *--------------------------------------------------------------
  1080.  */
  1081. typedef struct Tk_ImageType Tk_ImageType;
  1082. #ifdef USE_OLD_IMAGE
  1083. typedef int (Tk_ImageCreateProc) _ANSI_ARGS_((Tcl_Interp *interp,
  1084. char *name, int argc, char **argv, Tk_ImageType *typePtr,
  1085. Tk_ImageMaster master, ClientData *masterDataPtr));
  1086. #else
  1087. typedef int (Tk_ImageCreateProc) _ANSI_ARGS_((Tcl_Interp *interp,
  1088. char *name, int objc, Tcl_Obj *CONST objv[], Tk_ImageType *typePtr,
  1089. Tk_ImageMaster master, ClientData *masterDataPtr));
  1090. #endif
  1091. typedef ClientData (Tk_ImageGetProc) _ANSI_ARGS_((Tk_Window tkwin,
  1092. ClientData masterData));
  1093. typedef void (Tk_ImageDisplayProc) _ANSI_ARGS_((ClientData instanceData,
  1094. Display *display, Drawable drawable, int imageX, int imageY,
  1095. int width, int height, int drawableX, int drawableY));
  1096. typedef void (Tk_ImageFreeProc) _ANSI_ARGS_((ClientData instanceData,
  1097. Display *display));
  1098. typedef void (Tk_ImageDeleteProc) _ANSI_ARGS_((ClientData masterData));
  1099. typedef void (Tk_ImageChangedProc) _ANSI_ARGS_((ClientData clientData,
  1100. int x, int y, int width, int height, int imageWidth,
  1101. int imageHeight));
  1102. typedef int (Tk_ImagePostscriptProc) _ANSI_ARGS_((ClientData clientData,
  1103. Tcl_Interp *interp, Tk_Window tkwin, Tk_PostscriptInfo psinfo,
  1104. int x, int y, int width, int height, int prepass));
  1105. /*
  1106.  * The following structure represents a particular type of image
  1107.  * (bitmap, xpm image, etc.).  It provides information common to
  1108.  * all images of that type, such as the type name and a collection
  1109.  * of procedures in the image manager that respond to various
  1110.  * events.  Each image manager is represented by one of these
  1111.  * structures.
  1112.  */
  1113. struct Tk_ImageType {
  1114.     char *name; /* Name of image type. */
  1115.     Tk_ImageCreateProc *createProc;
  1116. /* Procedure to call to create a new image
  1117.  * of this type. */
  1118.     Tk_ImageGetProc *getProc; /* Procedure to call the first time
  1119.  * Tk_GetImage is called in a new way
  1120.  * (new visual or screen). */
  1121.     Tk_ImageDisplayProc *displayProc;
  1122. /* Call to draw image, in response to
  1123.  * Tk_RedrawImage calls. */
  1124.     Tk_ImageFreeProc *freeProc; /* Procedure to call whenever Tk_FreeImage
  1125.  * is called to release an instance of an
  1126.  * image. */
  1127.     Tk_ImageDeleteProc *deleteProc;
  1128. /* Procedure to call to delete image.  It
  1129.  * will not be called until after freeProc
  1130.  * has been called for each instance of the
  1131.  * image. */
  1132.     Tk_ImagePostscriptProc *postscriptProc;
  1133. /* Procedure to call to produce postscript
  1134.  * output for the image. */
  1135.     struct Tk_ImageType *nextPtr;
  1136. /* Next in list of all image types currently
  1137.  * known.  Filled in by Tk, not by image
  1138.  * manager. */
  1139.     char *reserved; /* reserved for future expansion */
  1140. };
  1141. /*
  1142.  *--------------------------------------------------------------
  1143.  *
  1144.  * Additional definitions used to manage images of type "photo".
  1145.  *
  1146.  *--------------------------------------------------------------
  1147.  */
  1148. /*
  1149.  * The following type is used to identify a particular photo image
  1150.  * to be manipulated:
  1151.  */
  1152. typedef void *Tk_PhotoHandle;
  1153. /*
  1154.  * The following structure describes a block of pixels in memory:
  1155.  */
  1156. typedef struct Tk_PhotoImageBlock {
  1157.     unsigned char *pixelPtr; /* Pointer to the first pixel. */
  1158.     int width; /* Width of block, in pixels. */
  1159.     int height; /* Height of block, in pixels. */
  1160.     int pitch; /* Address difference between corresponding
  1161.  * pixels in successive lines. */
  1162.     int pixelSize; /* Address difference between successive
  1163.  * pixels in the same line. */
  1164.     int offset[4]; /* Address differences between the red, green,
  1165.  * blue and alpha components of the pixel and
  1166.  * the pixel as a whole. */
  1167. } Tk_PhotoImageBlock;
  1168. /*
  1169.  * The following values control how blocks are combined into photo
  1170.  * images when the alpha component of a pixel is not 255, a.k.a. the
  1171.  * compositing rule.
  1172.  */
  1173. #define TK_PHOTO_COMPOSITE_OVERLAY 0
  1174. #define TK_PHOTO_COMPOSITE_SET 1
  1175. /*
  1176.  * Procedure prototypes and structures used in reading and
  1177.  * writing photo images:
  1178.  */
  1179. typedef struct Tk_PhotoImageFormat Tk_PhotoImageFormat;
  1180. #ifdef USE_OLD_IMAGE
  1181. typedef int (Tk_ImageFileMatchProc) _ANSI_ARGS_((Tcl_Channel chan,
  1182. char *fileName, char *formatString, int *widthPtr, int *heightPtr));
  1183. typedef int (Tk_ImageStringMatchProc) _ANSI_ARGS_((char *string,
  1184. char *formatString, int *widthPtr, int *heightPtr));
  1185. typedef int (Tk_ImageFileReadProc) _ANSI_ARGS_((Tcl_Interp *interp,
  1186. Tcl_Channel chan, char *fileName, char *formatString,
  1187. Tk_PhotoHandle imageHandle, int destX, int destY,
  1188. int width, int height, int srcX, int srcY));
  1189. typedef int (Tk_ImageStringReadProc) _ANSI_ARGS_((Tcl_Interp *interp,
  1190. char *string, char *formatString, Tk_PhotoHandle imageHandle,
  1191. int destX, int destY, int width, int height, int srcX, int srcY));
  1192. typedef int (Tk_ImageFileWriteProc) _ANSI_ARGS_((Tcl_Interp *interp,
  1193. char *fileName, char *formatString, Tk_PhotoImageBlock *blockPtr));
  1194. typedef int (Tk_ImageStringWriteProc) _ANSI_ARGS_((Tcl_Interp *interp,
  1195. Tcl_DString *dataPtr, char *formatString,
  1196. Tk_PhotoImageBlock *blockPtr));
  1197. #else
  1198. typedef int (Tk_ImageFileMatchProc) _ANSI_ARGS_((Tcl_Channel chan,
  1199. CONST char *fileName, Tcl_Obj *format, int *widthPtr,
  1200. int *heightPtr, Tcl_Interp *interp));
  1201. typedef int (Tk_ImageStringMatchProc) _ANSI_ARGS_((Tcl_Obj *dataObj,
  1202. Tcl_Obj *format, int *widthPtr, int *heightPtr,
  1203. Tcl_Interp *interp));
  1204. typedef int (Tk_ImageFileReadProc) _ANSI_ARGS_((Tcl_Interp *interp,
  1205. Tcl_Channel chan, CONST char *fileName, Tcl_Obj *format,
  1206. Tk_PhotoHandle imageHandle, int destX, int destY,
  1207. int width, int height, int srcX, int srcY));
  1208. typedef int (Tk_ImageStringReadProc) _ANSI_ARGS_((Tcl_Interp *interp,
  1209. Tcl_Obj *dataObj, Tcl_Obj *format, Tk_PhotoHandle imageHandle,
  1210. int destX, int destY, int width, int height, int srcX, int srcY));
  1211. typedef int (Tk_ImageFileWriteProc) _ANSI_ARGS_((Tcl_Interp *interp,
  1212. CONST char *fileName, Tcl_Obj *format, Tk_PhotoImageBlock *blockPtr));
  1213. typedef int (Tk_ImageStringWriteProc) _ANSI_ARGS_((Tcl_Interp *interp,
  1214. Tcl_Obj *format, Tk_PhotoImageBlock *blockPtr));
  1215. #endif
  1216. /*
  1217.  * The following structure represents a particular file format for
  1218.  * storing images (e.g., PPM, GIF, JPEG, etc.).  It provides information
  1219.  * to allow image files of that format to be recognized and read into
  1220.  * a photo image.
  1221.  */
  1222. struct Tk_PhotoImageFormat {
  1223.     char *name; /* Name of image file format */
  1224.     Tk_ImageFileMatchProc *fileMatchProc;
  1225. /* Procedure to call to determine whether
  1226.  * an image file matches this format. */
  1227.     Tk_ImageStringMatchProc *stringMatchProc;
  1228. /* Procedure to call to determine whether
  1229.  * the data in a string matches this format. */
  1230.     Tk_ImageFileReadProc *fileReadProc;
  1231. /* Procedure to call to read data from
  1232.  * an image file into a photo image. */
  1233.     Tk_ImageStringReadProc *stringReadProc;
  1234. /* Procedure to call to read data from
  1235.  * a string into a photo image. */
  1236.     Tk_ImageFileWriteProc *fileWriteProc;
  1237. /* Procedure to call to write data from
  1238.  * a photo image to a file. */
  1239.     Tk_ImageStringWriteProc *stringWriteProc;
  1240. /* Procedure to call to obtain a string
  1241.  * representation of the data in a photo
  1242.  * image.*/
  1243.     struct Tk_PhotoImageFormat *nextPtr;
  1244. /* Next in list of all photo image formats
  1245.  * currently known.  Filled in by Tk, not
  1246.  * by image format handler. */
  1247. };
  1248. EXTERN void Tk_CreateOldImageType _ANSI_ARGS_((
  1249. Tk_ImageType *typePtr));
  1250. EXTERN void Tk_CreateOldPhotoImageFormat _ANSI_ARGS_((
  1251. Tk_PhotoImageFormat *formatPtr));
  1252. #if !defined(USE_TK_STUBS) && defined(USE_OLD_IMAGE)
  1253. #define Tk_CreateImageType Tk_CreateOldImageType
  1254. #define Tk_CreatePhotoImageFormat Tk_CreateOldPhotoImageFormat
  1255. #endif
  1256. /*
  1257.  *--------------------------------------------------------------
  1258.  *
  1259.  * Procedure prototypes and structures used for managing styles:
  1260.  *
  1261.  *--------------------------------------------------------------
  1262.  */
  1263. /*
  1264.  * Style support version tag.
  1265.  */
  1266. #define TK_STYLE_VERSION_1      0x1
  1267. #define TK_STYLE_VERSION        TK_STYLE_VERSION_1
  1268. /*
  1269.  * The following structures and prototypes are used as static templates to
  1270.  * declare widget elements.
  1271.  */
  1272. typedef void (Tk_GetElementSizeProc) _ANSI_ARGS_((ClientData clientData,
  1273.         char *recordPtr, CONST Tk_OptionSpec **optionsPtr, Tk_Window tkwin,
  1274.         int width, int height, int inner, int *widthPtr, int *heightPtr));
  1275. typedef void (Tk_GetElementBoxProc) _ANSI_ARGS_((ClientData clientData,
  1276.         char *recordPtr, CONST Tk_OptionSpec **optionsPtr, Tk_Window tkwin,
  1277.         int x, int y, int width, int height, int inner, int *xPtr, int *yPtr,
  1278.         int *widthPtr, int *heightPtr));
  1279. typedef int (Tk_GetElementBorderWidthProc) _ANSI_ARGS_((ClientData clientData,
  1280.         char *recordPtr, CONST Tk_OptionSpec **optionsPtr, Tk_Window tkwin));
  1281. typedef void (Tk_DrawElementProc) _ANSI_ARGS_((ClientData clientData,
  1282.         char *recordPtr, CONST Tk_OptionSpec **optionsPtr, Tk_Window tkwin,
  1283.         Drawable d, int x, int y, int width, int height, int state));
  1284. typedef struct Tk_ElementOptionSpec {
  1285.     char *name;                 /* Name of the required option. */
  1286.     Tk_OptionType type;         /* Accepted option type. TK_OPTION_END means
  1287.                                  * any. */
  1288. } Tk_ElementOptionSpec;
  1289. typedef struct Tk_ElementSpec {
  1290.     int version;                /* Version of the style support. */
  1291.     char *name;                 /* Name of element. */
  1292.     Tk_ElementOptionSpec *options;
  1293.                                 /* List of required options. Last one's name
  1294.                                  * must be NULL. */
  1295.     /*
  1296.      * Hooks
  1297.      */
  1298.     Tk_GetElementSizeProc *getSize;
  1299.                                 /* Compute the external (resp. internal) size of
  1300.                                  * the element from its desired internal (resp.
  1301.                                  * external) size. */
  1302.     Tk_GetElementBoxProc *getBox;
  1303.                                 /* Compute the inscribed or bounding boxes
  1304.                                  * within a given area. */
  1305.     Tk_GetElementBorderWidthProc *getBorderWidth;
  1306.                                 /* Return the element's internal border width.
  1307.                                  * Mostly useful for widgets. */
  1308.     Tk_DrawElementProc *draw;   /* Draw the element in the given bounding box.*/
  1309. } Tk_ElementSpec;
  1310. /*
  1311.  * Element state flags. Can be OR'ed.
  1312.  */
  1313. #define TK_ELEMENT_STATE_ACTIVE         1<<0
  1314. #define TK_ELEMENT_STATE_DISABLED       1<<1
  1315. #define TK_ELEMENT_STATE_FOCUS          1<<2
  1316. #define TK_ELEMENT_STATE_PRESSED        1<<3
  1317. /*
  1318.  *--------------------------------------------------------------
  1319.  *
  1320.  * The definitions below provide backward compatibility for
  1321.  * functions and types related to event handling that used to
  1322.  * be in Tk but have moved to Tcl.
  1323.  *
  1324.  *--------------------------------------------------------------
  1325.  */
  1326. #define TK_READABLE TCL_READABLE
  1327. #define TK_WRITABLE TCL_WRITABLE
  1328. #define TK_EXCEPTION TCL_EXCEPTION
  1329. #define TK_DONT_WAIT TCL_DONT_WAIT
  1330. #define TK_X_EVENTS TCL_WINDOW_EVENTS
  1331. #define TK_WINDOW_EVENTS TCL_WINDOW_EVENTS
  1332. #define TK_FILE_EVENTS TCL_FILE_EVENTS
  1333. #define TK_TIMER_EVENTS TCL_TIMER_EVENTS
  1334. #define TK_IDLE_EVENTS TCL_IDLE_EVENTS
  1335. #define TK_ALL_EVENTS TCL_ALL_EVENTS
  1336. #define Tk_IdleProc Tcl_IdleProc
  1337. #define Tk_FileProc Tcl_FileProc
  1338. #define Tk_TimerProc Tcl_TimerProc
  1339. #define Tk_TimerToken Tcl_TimerToken
  1340. #define Tk_BackgroundError Tcl_BackgroundError
  1341. #define Tk_CancelIdleCall Tcl_CancelIdleCall
  1342. #define Tk_CreateFileHandler Tcl_CreateFileHandler
  1343. #define Tk_CreateTimerHandler Tcl_CreateTimerHandler
  1344. #define Tk_DeleteFileHandler Tcl_DeleteFileHandler
  1345. #define Tk_DeleteTimerHandler Tcl_DeleteTimerHandler
  1346. #define Tk_DoOneEvent Tcl_DoOneEvent
  1347. #define Tk_DoWhenIdle Tcl_DoWhenIdle
  1348. #define Tk_Sleep Tcl_Sleep
  1349. /* Additional stuff that has moved to Tcl: */
  1350. #define Tk_EventuallyFree Tcl_EventuallyFree
  1351. #define Tk_FreeProc Tcl_FreeProc
  1352. #define Tk_Preserve Tcl_Preserve
  1353. #define Tk_Release Tcl_Release
  1354. /* Removed Tk_Main, use macro instead */
  1355. #define Tk_Main(argc, argv, proc) 
  1356.     Tk_MainEx(argc, argv, proc, Tcl_CreateInterp())
  1357. CONST char *Tk_InitStubs _ANSI_ARGS_((Tcl_Interp *interp, char *version, int exact));
  1358. #ifndef USE_TK_STUBS
  1359. #define Tk_InitStubs(interp, version, exact) 
  1360.     Tcl_PkgRequire(interp, "Tk", version, exact)
  1361. #endif
  1362. void Tk_InitImageArgs _ANSI_ARGS_((Tcl_Interp *interp, int argc, char ***argv));
  1363. #if !defined(USE_TK_STUBS) || !defined(USE_OLD_IMAGE)
  1364. #define Tk_InitImageArgs(interp, argc, argv) /**/
  1365. #endif
  1366. /*
  1367.  *--------------------------------------------------------------
  1368.  *
  1369.  * Additional procedure types defined by Tk.
  1370.  *
  1371.  *--------------------------------------------------------------
  1372.  */
  1373. typedef int (Tk_ErrorProc) _ANSI_ARGS_((ClientData clientData,
  1374. XErrorEvent *errEventPtr));
  1375. typedef void (Tk_EventProc) _ANSI_ARGS_((ClientData clientData,
  1376. XEvent *eventPtr));
  1377. typedef int (Tk_GenericProc) _ANSI_ARGS_((ClientData clientData,
  1378. XEvent *eventPtr));
  1379. typedef int (Tk_ClientMessageProc) _ANSI_ARGS_((Tk_Window tkwin,
  1380. XEvent *eventPtr));
  1381. typedef int (Tk_GetSelProc) _ANSI_ARGS_((ClientData clientData,
  1382. Tcl_Interp *interp, char *portion));
  1383. typedef void (Tk_LostSelProc) _ANSI_ARGS_((ClientData clientData));
  1384. typedef Tk_RestrictAction (Tk_RestrictProc) _ANSI_ARGS_((
  1385. ClientData clientData, XEvent *eventPtr));
  1386. typedef int (Tk_SelectionProc) _ANSI_ARGS_((ClientData clientData,
  1387. int offset, char *buffer, int maxBytes));
  1388. /*
  1389.  *--------------------------------------------------------------
  1390.  *
  1391.  * Platform independant exported procedures and variables.
  1392.  *
  1393.  *--------------------------------------------------------------
  1394.  */
  1395. #include "tkDecls.h"
  1396. /*
  1397.  * Allow users to say that they don't want to alter their source to
  1398.  * add the extra argument to Tk_PhotoPutBlock(); DO NOT DEFINE THIS
  1399.  * WHEN BUILDING TK.
  1400.  *
  1401.  * This goes after the inclusion of the stubbed-decls so that the
  1402.  * declarations of what is actually there can be correct.
  1403.  */
  1404. #ifdef USE_COMPOSITELESS_PHOTO_PUT_BLOCK
  1405. #   ifdef Tk_PhotoPutBlock
  1406. # undef Tk_PhotoPutBlock
  1407. #   endif
  1408. #   define Tk_PhotoPutBlock Tk_PhotoPutBlock_NoComposite
  1409. #   ifdef Tk_PhotoPutZoomedBlock
  1410. # undef Tk_PhotoPutZoomedBlock
  1411. #   endif
  1412. #   define Tk_PhotoPutZoomedBlock Tk_PhotoPutZoomedBlock_NoComposite
  1413. #endif /* USE_COMPOSITELESS_PHOTO_PUT_BLOCK */
  1414. /*
  1415.  * Tcl commands exported by Tk:
  1416.  */
  1417. #undef TCL_STORAGE_CLASS
  1418. #define TCL_STORAGE_CLASS DLLIMPORT
  1419. #endif /* RC_INVOKED */
  1420. /*
  1421.  * end block for C++
  1422.  */
  1423.     
  1424. #ifdef __cplusplus
  1425. }
  1426. #endif
  1427.     
  1428. #endif /* _TK */