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

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1989-1993 The Regents of the University of California.
  3. '" Copyright (c) 1994-1996 Sun Microsystems, Inc.
  4. '"
  5. '" See the file "license.terms" for information on usage and redistribution
  6. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  7. '" 
  8. '" RCS: @(#) $Id: Interp.3,v 1.3 2000/04/14 23:01:51 hobbs Exp $
  9. '" 
  10. .so man.macros
  11. .TH Tcl_Interp 3 7.5 Tcl "Tcl Library Procedures"
  12. .BS
  13. .SH NAME
  14. Tcl_Interp - client-visible fields of interpreter structures
  15. .SH SYNOPSIS
  16. .nf
  17. fB#include <tcl.h>fR
  18. .sp
  19. typedef struct {
  20. char *fIresultfR;
  21. Tcl_FreeProc *fIfreeProcfR;
  22. int fIerrorLinefR;
  23. } Tcl_Interp;
  24. typedef void Tcl_FreeProc(char *fIblockPtrfR);
  25. .BE
  26. .SH DESCRIPTION
  27. .PP
  28. The fBTcl_CreateInterpfR procedure returns a pointer to a Tcl_Interp
  29. structure.  This pointer is then passed into other Tcl procedures
  30. to process commands in the interpreter and perform other operations
  31. on the interpreter.  Interpreter structures contain many many fields
  32. that are used by Tcl, but only three that may be accessed by
  33. clients:  fIresultfR, fIfreeProcfR, and fIerrorLinefR.
  34. .PP
  35. The fIresultfR and fIfreeProcfR fields are used to return
  36. results or error messages from commands.
  37. This information is returned by command procedures back to fBTcl_EvalfR,
  38. and by fBTcl_EvalfR back to its callers.
  39. The fIresultfR field points to the string that represents the
  40. result or error message, and the fIfreeProcfR field tells how
  41. to dispose of the storage for the string when it isn't needed anymore.
  42. The easiest way for command procedures to manipulate these
  43. fields is to call procedures like fBTcl_SetResultfR
  44. or fBTcl_AppendResultfR;  they
  45. will hide all the details of managing the fields.
  46. The description below is for those procedures that manipulate the
  47. fields directly.
  48. .PP
  49. Whenever a command procedure returns, it must ensure
  50. that the fIresultfR field of its interpreter points to the string
  51. being returned by the command.
  52. The fIresultfR field must always point to a valid string.
  53. If a command wishes to return no result then fIinterp->resultfR
  54. should point to an empty string.
  55. Normally, results are assumed to be statically allocated,
  56. which means that the contents will not change before the next time
  57. fBTcl_EvalfR is called or some other command procedure is invoked.
  58. .VS
  59. In this case, the fIfreeProcfR field must be zero.
  60. Alternatively, a command procedure may dynamically
  61. allocate its return value (e.g. using fBTcl_AllocfR)
  62. and store a pointer to it in fIinterp->resultfR.
  63. In this case, the command procedure must also set fIinterp->freeProcfR
  64. to the address of a procedure that can free the value, or fBTCL_DYNAMICfR
  65. if the storage was allocated directly by Tcl or by a call to
  66. fBTcl_AllocfR. 
  67. .VE
  68. If fIinterp->freeProcfR is non-zero, then Tcl will call fIfreeProcfR
  69. to free the space pointed to by fIinterp->resultfR before it
  70. invokes the next command.
  71. If a client procedure overwrites fIinterp->resultfR when
  72. fIinterp->freeProcfR is non-zero, then it is responsible for calling
  73. fIfreeProcfR to free the old fIinterp->resultfR (the fBTcl_FreeResultfR
  74. macro should be used for this purpose).
  75. .PP
  76. fIFreeProcfR should have arguments and result that match the
  77. fBTcl_FreeProcfR declaration above:  it receives a single
  78. argument which is a pointer to the result value to free.
  79. .VS
  80. In most applications fBTCL_DYNAMICfR is the only non-zero value ever
  81. used for fIfreeProcfR.
  82. .VE
  83. However, an application may store a different procedure address
  84. in fIfreeProcfR in order to use an alternate memory allocator
  85. or in order to do other cleanup when the result memory is freed.
  86. .PP
  87. As part of processing each command, fBTcl_EvalfR initializes
  88. fIinterp->resultfR
  89. and fIinterp->freeProcfR just before calling the command procedure for
  90. the command.  The fIfreeProcfR field will be initialized to zero,
  91. and fIinterp->resultfR will point to an empty string.  Commands that
  92. do not return any value can simply leave the fields alone.
  93. Furthermore, the empty string pointed to by fIresultfR is actually
  94. part of an array of fBTCL_RESULT_SIZEfR characters (approximately 200).
  95. If a command wishes to return a short string, it can simply copy
  96. it to the area pointed to by fIinterp->resultfR.  Or, it can use
  97. the sprintf procedure to generate a short result string at the location
  98. pointed to by fIinterp->resultfR.
  99. .PP
  100. It is a general convention in Tcl-based applications that the result
  101. of an interpreter is normally in the initialized state described
  102. in the previous paragraph.
  103. Procedures that manipulate an interpreter's result (e.g. by
  104. returning an error) will generally assume that the result
  105. has been initialized when the procedure is called.
  106. If such a procedure is to be called after the result has been
  107. changed, then fBTcl_ResetResultfR should be called first to
  108. reset the result to its initialized state.  The direct use of
  109. fIinterp->resultfR is strongly deprecated (see fBTcl_SetResultfR).
  110. .PP
  111. The fIerrorLinefR
  112. field is valid only after fBTcl_EvalfR returns
  113. a fBTCL_ERRORfR return code.  In this situation the fIerrorLinefR
  114. field identifies the line number of the command being executed when
  115. the error occurred.  The line numbers are relative to the command
  116. being executed:  1 means the first line of the command passed to
  117. fBTcl_EvalfR, 2 means the second line, and so on.
  118. The fIerrorLinefR field is typically used in conjunction with
  119. fBTcl_AddErrorInfofR to report information about where an error
  120. occurred.
  121. fIErrorLinefR should not normally be modified except by fBTcl_EvalfR.
  122. .SH KEYWORDS
  123. free, initialized, interpreter, malloc, result