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

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 2002 Donal K. Fellows
  3. '"
  4. '" See the file "license.terms" for information on usage and redistribution
  5. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  6. '" 
  7. '" CVS: @(#) $Id: TraceCmd.3,v 1.5 2002/07/01 18:24:39 jenglish Exp $
  8. '" 
  9. .so man.macros
  10. .TH Tcl_TraceCommand 3 7.4 Tcl "Tcl Library Procedures"
  11. .BS
  12. .SH NAME
  13. Tcl_CommandTraceInfo, Tcl_TraceCommand, Tcl_UntraceCommand - monitor renames and deletes of a command
  14. .SH SYNOPSIS
  15. .nf
  16. fB#include <tcl.h>fR
  17. .sp
  18. ClientData
  19. fBTcl_CommandTraceInfo(fIinterp, cmdName, flags, proc, prevClientDatafB)fR
  20. .sp
  21. int
  22. fBTcl_TraceCommand(fIinterp, cmdName, flags, proc, clientDatafB)fR
  23. .sp
  24. void
  25. fBTcl_UntraceCommand(fIinterp, cmdName, flags, proc, clientDatafB)fR
  26. .SH ARGUMENTS
  27. .AS Tcl_CommandTraceProc prevClientData
  28. .AP Tcl_Interp *interp in
  29. Interpreter containing the command.
  30. .AP "CONST char" *cmdName in
  31. Name of command.
  32. .AP int flags in
  33. OR-ed collection of the value TCL_TRACE_RENAME and TCL_TRACE_DELETE.
  34. .AP Tcl_CommandTraceProc *proc in
  35. Procedure to call when specified operations occur to fIcmdNamefR.
  36. .AP ClientData clientData in
  37. Arbitrary argument to pass to fIprocfR.
  38. .AP ClientData prevClientData in
  39. If non-NULL, gives last value returned by fBTcl_CommandTraceInfofR,
  40. so this call will return information about next trace.  If NULL, this
  41. call will return information about first trace.
  42. .BE
  43. .SH DESCRIPTION
  44. .PP
  45. fBTcl_TraceCommandfR allows a C procedure to monitor operations
  46. performed on a Tcl command, so that the C procedure is invoked
  47. whenever the command is renamed or deleted.  If the trace is created
  48. successfully then fBTcl_TraceCommandfR returns TCL_OK.  If an error
  49. occurred (e.g. fIcmdNamefR specifies a non-existent command) then
  50. TCL_ERROR is returned and an error message is left in the
  51. interpreter's result.
  52. .PP
  53. The fIflagsfR argument to fBTcl_TraceCommandfR indicates when the
  54. trace procedure is to be invoked.  It consists of an OR-ed combination
  55. of any of the following values:
  56. .TP
  57. fBTCL_TRACE_RENAMEfR
  58. Invoke fIprocfR whenever the command is renamed.
  59. .TP
  60. fBTCL_TRACE_DELETEfR
  61. Invoke fIprocfR when the command is deleted.
  62. .PP
  63. Whenever one of the specified operations occurs to the command,
  64. fIprocfR will be invoked.  It should have arguments and result that
  65. match the type fBTcl_CommandTraceProcfR:
  66. .CS
  67. typedef void Tcl_CommandTraceProc(
  68. ClientData fIclientDatafR,
  69.         Tcl_Interp *fIinterpfR,
  70. CONST char *fIoldNamefR,
  71. CONST char *fInewNamefR,
  72.         int fIflagsfR);
  73. .CE
  74. The fIclientDatafR and fIinterpfR parameters will have the same
  75. values as those passed to fBTcl_TraceCommandfR when the trace was
  76. created.  fIClientDatafR typically points to an application-specific
  77. data structure that describes what to do when fIprocfR is invoked.
  78. fIOldNamefR gives the name of the command being renamed, and
  79. fInewNamefR gives the name that the command is being renamed to (or
  80. an empty string or NULL when the command is being deleted.)
  81. fIFlagsfR is an OR-ed combination of bits potentially providing
  82. several pieces of information.  One of the bits TCL_TRACE_RENAME and
  83. TCL_TRACE_DELETE will be set in fIflagsfR to indicate which
  84. operation is being performed on the command.  The bit
  85. TCL_TRACE_DESTROYED will be set in fIflagsfR if the trace is about
  86. to be destroyed; this information may be useful to fIprocfR so that
  87. it can clean up its own internal data structures (see the section
  88. TCL_TRACE_DESTROYED below for more details).  Lastly, the bit
  89. TCL_INTERP_DESTROYED will be set if the entire interpreter is being
  90. destroyed.  When this bit is set, fIprocfR must be especially
  91. careful in the things it does (see the section TCL_INTERP_DESTROYED
  92. below).
  93. .PP
  94. fBTcl_UntraceCommandfR may be used to remove a trace.  If the
  95. command specified by fIinterpfR, fIcmdNamefR, and fIflagsfR has
  96. a trace set with fIflagsfR, fIprocfR, and fIclientDatafR, then
  97. the corresponding trace is removed.  If no such trace exists, then the
  98. call to fBTcl_UntraceCommandfR has no effect.  The same bits are
  99. valid for fIflagsfR as for calls to fBTcl_TraceCommandfR.
  100. .PP
  101. fBTcl_CommandTraceInfofR may be used to retrieve information about
  102. traces set on a given command.
  103. The return value from fBTcl_CommandTraceInfofR is the fIclientDatafR
  104. associated with a particular trace.
  105. The trace must be on the command specified by the fIinterpfR,
  106. fIcmdNamefR, and fIflagsfR arguments (note that currently the
  107. flags are ignored; fIflagsfR should be set to 0 for future
  108. compatibility) and its trace procedure must the same as the fIprocfR
  109. argument.
  110. If the fIprevClientDatafR argument is NULL then the return
  111. value corresponds to the first (most recently created) matching
  112. trace, or NULL if there are no matching traces.
  113. If the fIprevClientDatafR argument isn't NULL, then it should
  114. be the return value from a previous call to fBTcl_CommandTraceInfofR.
  115. In this case, the new return value will correspond to the next
  116. matching trace after the one whose fIclientDatafR matches
  117. fIprevClientDatafR, or NULL if no trace matches fIprevClientDatafR
  118. or if there are no more matching traces after it.
  119. This mechanism makes it possible to step through all of the
  120. traces for a given command that have the same fIprocfR.
  121. .SH "CALLING COMMANDS DURING TRACES"
  122. .PP
  123. During rename traces, the command being renamed is visible with both
  124. names simultaneously, and the command still exists during delete
  125. traces (if TCL_INTERP_DESTROYED is not set).  However, there is no
  126. mechanism for signaling that an error occurred in a trace procedure,
  127. so great care should be taken that errors do not get silently lost.
  128. .SH "MULTIPLE TRACES"
  129. .PP
  130. It is possible for multiple traces to exist on the same command.
  131. When this happens, all of the trace procedures will be invoked on each
  132. access, in order from most-recently-created to least-recently-created.
  133. Attempts to delete the command during a delete trace will fail
  134. silently, since the command is already scheduled for deletion anyway.
  135. If the command being renamed is renamed by one of its rename traces,
  136. that renaming takes precedence over the one that triggered the trace
  137. and the collection of traces will not be reexecuted; if several traces
  138. rename the command, the last renaming takes precedence.
  139. .SH "TCL_TRACE_DESTROYED FLAG"
  140. .PP
  141. In a delete callback to fIprocfR, the TCL_TRACE_DESTROYED bit
  142. is set in fIflagsfR.
  143. '" Perhaps need some more comments here? - DKF
  144. .SH "TCL_INTERP_DESTROYED"
  145. .PP
  146. When an interpreter is destroyed, unset traces are called for
  147. all of its commands.
  148. The TCL_INTERP_DESTROYED bit will be set in the fIflagsfR
  149. argument passed to the trace procedures.
  150. Trace procedures must be extremely careful in what they do if
  151. the TCL_INTERP_DESTROYED bit is set.
  152. It is not safe for the procedures to invoke any Tcl procedures
  153. on the interpreter, since its state is partially deleted.
  154. All that trace procedures should do under these circumstances is
  155. to clean up and free their own internal data structures.
  156. .SH BUGS
  157. .PP
  158. Tcl doesn't do any error checking to prevent trace procedures
  159. from misusing the interpreter during traces with TCL_INTERP_DESTROYED
  160. set.
  161. .SH KEYWORDS
  162. clientData, trace, command