Spaces:
Running
Running
| /* | |
| * itcl.h -- | |
| * | |
| * This file contains definitions for the C-implemeted part of a Itcl | |
| * this version of [incr Tcl] (Itcl) is a completely new implementation | |
| * based on TclOO extension of Tcl 8.5 | |
| * It tries to provide the same interfaces as the original implementation | |
| * of Michael J. McLennan | |
| * Some small pieces of code are taken from that implementation | |
| * | |
| * Copyright (c) 2007 by Arnulf P. Wiedemann | |
| * | |
| * See the file "license.terms" for information on usage and redistribution of | |
| * this file, and for a DISCLAIMER OF ALL WARRANTIES. | |
| */ | |
| /* | |
| * ------------------------------------------------------------------------ | |
| * PACKAGE: [incr Tcl] | |
| * DESCRIPTION: Object-Oriented Extensions to Tcl | |
| * | |
| * [incr Tcl] provides object-oriented extensions to Tcl, much as | |
| * C++ provides object-oriented extensions to C. It provides a means | |
| * of encapsulating related procedures together with their shared data | |
| * in a local namespace that is hidden from the outside world. It | |
| * promotes code re-use through inheritance. More than anything else, | |
| * it encourages better organization of Tcl applications through the | |
| * object-oriented paradigm, leading to code that is easier to | |
| * understand and maintain. | |
| * | |
| * ADDING [incr Tcl] TO A Tcl-BASED APPLICATION: | |
| * | |
| * To add [incr Tcl] facilities to a Tcl application, modify the | |
| * Tcl_AppInit() routine as follows: | |
| * | |
| * 1) Include this header file near the top of the file containing | |
| * Tcl_AppInit(): | |
| * | |
| * #include "itcl.h" | |
| * | |
| * 2) Within the body of Tcl_AppInit(), add the following lines: | |
| * | |
| * if (Itcl_Init(interp) == TCL_ERROR) { | |
| * return TCL_ERROR; | |
| * } | |
| * | |
| * 3) Link your application with libitcl.a | |
| * | |
| * NOTE: An example file "tclAppInit.c" containing the changes shown | |
| * above is included in this distribution. | |
| * | |
| *--------------------------------------------------------------------- | |
| */ | |
| /* | |
| * For C++ compilers, use extern "C" | |
| */ | |
| extern "C" { | |
| /* | |
| * A special definition used to allow this header file to be included from | |
| * windows resource files so that they can obtain version information. | |
| * RC_INVOKED is defined by default by the windows RC tool. | |
| * | |
| * Resource compilers don't like all the C stuff, like typedefs and function | |
| * declarations, that occur below, so block them out. | |
| */ | |
| ITCL_EXTERN int Itcl_Init(Tcl_Interp *interp); | |
| ITCL_EXTERN int Itcl_SafeInit(Tcl_Interp *interp); | |
| /* | |
| * Protection levels: | |
| * | |
| * ITCL_PUBLIC - accessible from any namespace | |
| * ITCL_PROTECTED - accessible from namespace that imports in "protected" mode | |
| * ITCL_PRIVATE - accessible only within the namespace that contains it | |
| */ | |
| /* | |
| * Generic stack. | |
| */ | |
| typedef struct Itcl_Stack { | |
| ClientData *values; /* values on stack */ | |
| int len; /* number of values on stack */ | |
| int max; /* maximum size of stack */ | |
| ClientData space[5]; /* initial space for stack data */ | |
| } Itcl_Stack; | |
| /* | |
| * Generic linked list. | |
| */ | |
| struct Itcl_List; | |
| typedef struct Itcl_ListElem { | |
| struct Itcl_List* owner; /* list containing this element */ | |
| ClientData value; /* value associated with this element */ | |
| struct Itcl_ListElem *prev; /* previous element in linked list */ | |
| struct Itcl_ListElem *next; /* next element in linked list */ | |
| } Itcl_ListElem; | |
| typedef struct Itcl_List { | |
| int validate; /* validation stamp */ | |
| int num; /* number of elements */ | |
| struct Itcl_ListElem *head; /* previous element in linked list */ | |
| struct Itcl_ListElem *tail; /* next element in linked list */ | |
| } Itcl_List; | |
| /* | |
| * Token representing the state of an interpreter. | |
| */ | |
| typedef struct Itcl_InterpState_ *Itcl_InterpState; | |
| /* | |
| * Include all the public API, generated from itcl.decls. | |
| */ | |
| /* | |
| * end block for C++ | |
| */ | |
| } | |