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

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1989-1993 The Regents of the University of California.
  3. '" Copyright (c) 1994-1997 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: SetResult.3,v 1.7 2002/01/25 20:40:55 dgp Exp $
  9. '" 
  10. .so man.macros
  11. .TH Tcl_SetResult 3 8.0 Tcl "Tcl Library Procedures"
  12. .BS
  13. .SH NAME
  14. Tcl_SetObjResult, Tcl_GetObjResult, Tcl_SetResult, Tcl_GetStringResult, Tcl_AppendResult, Tcl_AppendResultVA, Tcl_AppendElement, Tcl_ResetResult, Tcl_FreeResult - manipulate Tcl result
  15. .SH SYNOPSIS
  16. .nf
  17. fB#include <tcl.h>fR
  18. .sp
  19. fBTcl_SetObjResultfR(fIinterp, objPtrfR)
  20. .sp
  21. Tcl_Obj *
  22. fBTcl_GetObjResultfR(fIinterpfR)
  23. .sp
  24. fBTcl_SetResultfR(fIinterp, string, freeProcfR)
  25. .sp
  26. CONST char *
  27. fBTcl_GetStringResultfR(fIinterpfR)
  28. .sp
  29. fBTcl_AppendResultfR(fIinterp, string, string, ... , fB(char *) NULLfR)
  30. .sp
  31. fBTcl_AppendResultVAfR(fIinterp, argListfR)
  32. .sp
  33. fBTcl_AppendElementfR(fIinterp, stringfR)
  34. .sp
  35. fBTcl_ResetResultfR(fIinterpfR)
  36. .sp
  37. fBTcl_FreeResultfR(fIinterpfR)
  38. .SH ARGUMENTS
  39. .AS Tcl_FreeProc freeProc
  40. .AP Tcl_Interp *interp out
  41. Interpreter whose result is to be modified or read.
  42. .AP Tcl_Obj *objPtr in
  43. Object value to become result for fIinterpfR.
  44. .AP char *string in
  45. String value to become result for fIinterpfR or to be
  46. appended to the existing result.
  47. .AP Tcl_FreeProc *freeProc in
  48. Address of procedure to call to release storage at
  49. fIstringfR, or fBTCL_STATICfR, fBTCL_DYNAMICfR, or
  50. fBTCL_VOLATILEfR.
  51. .AP va_list argList in
  52. An argument list which must have been initialised using
  53. fBTCL_VARARGS_STARTfR, and cleared using fBva_endfR.
  54. .BE
  55. .SH DESCRIPTION
  56. .PP
  57. The procedures described here are utilities for manipulating the
  58. result value in a Tcl interpreter.
  59. The interpreter result may be either a Tcl object or a string.
  60. For example, fBTcl_SetObjResultfR and fBTcl_SetResultfR
  61. set the interpreter result to, respectively, an object and a string.
  62. Similarly, fBTcl_GetObjResultfR and fBTcl_GetStringResultfR
  63. return the interpreter result as an object and as a string.
  64. The procedures always keep the string and object forms
  65. of the interpreter result consistent.
  66. For example, if fBTcl_SetObjResultfR is called to set
  67. the result to an object,
  68. then fBTcl_GetStringResultfR is called,
  69. it will return the object's string value.
  70. .PP
  71. fBTcl_SetObjResultfR
  72. arranges for fIobjPtrfR to be the result for fIinterpfR,
  73. replacing any existing result.
  74. The result is left pointing to the object
  75. referenced by fIobjPtrfR.
  76. fIobjPtrfR's reference count is incremented
  77. since there is now a new reference to it from fIinterpfR.
  78. The reference count for any old result object
  79. is decremented and the old result object is freed if no
  80. references to it remain.
  81. .PP
  82. fBTcl_GetObjResultfR returns the result for fIinterpfR as an object.
  83. The object's reference count is not incremented;
  84. if the caller needs to retain a long-term pointer to the object
  85. they should use fBTcl_IncrRefCountfR to increment its reference count
  86. in order to keep it from being freed too early or accidently changed.
  87. .PP
  88. fBTcl_SetResultfR
  89. arranges for fIstringfR to be the result for the current Tcl
  90. command in fIinterpfR, replacing any existing result.
  91. The fIfreeProcfR argument specifies how to manage the storage
  92. for the fIstringfR argument;
  93. it is discussed in the section
  94. fBTHE TCL_FREEPROC ARGUMENT TO TCL_SETRESULTfR below.
  95. If fIstringfR is fBNULLfR, then fIfreeProcfR is ignored
  96. and fBTcl_SetResultfR
  97. re-initializes fIinterpfR's result to point to an empty string.
  98. .PP
  99. fBTcl_GetStringResultfR returns the result for fIinterpfR as an string.
  100. If the result was set to an object by a fBTcl_SetObjResultfR call,
  101. the object form will be converted to a string and returned.
  102. If the object's string representation contains null bytes,
  103. this conversion will lose information.
  104. For this reason, programmers are encouraged to
  105. write their code to use the new object API procedures
  106. and to call fBTcl_GetObjResultfR instead.
  107. .PP
  108. fBTcl_ResetResultfR clears the result for fIinterpfR
  109. and leaves the result in its normal empty initialized state.
  110. If the result is an object,
  111. its reference count is decremented and the result is left
  112. pointing to an unshared object representing an empty string.
  113. If the result is a dynamically allocated string, its memory is free*d
  114. and the result is left as a empty string.
  115. fBTcl_ResetResultfR also clears the error state managed by
  116. fBTcl_AddErrorInfofR, fBTcl_AddObjErrorInfofR,
  117. and fBTcl_SetErrorCodefR.
  118. .SH "OLD STRING PROCEDURES"
  119. .PP
  120. Use of the following procedures is deprecated
  121. since they manipulate the Tcl result as a string.
  122. Procedures such as fBTcl_SetObjResultfR
  123. that manipulate the result as an object
  124. can be significantly more efficient.
  125. .PP
  126. fBTcl_AppendResultfR makes it easy to build up Tcl results in pieces.
  127. It takes each of its fIstringfR arguments and appends them in order
  128. to the current result associated with fIinterpfR.
  129. If the result is in its initialized empty state (e.g. a command procedure
  130. was just invoked or fBTcl_ResetResultfR was just called),
  131. then fBTcl_AppendResultfR sets the result to the concatenation of
  132. its fIstringfR arguments.
  133. fBTcl_AppendResultfR may be called repeatedly as additional pieces
  134. of the result are produced.
  135. fBTcl_AppendResultfR takes care of all the
  136. storage management issues associated with managing fIinterpfR's
  137. result, such as allocating a larger result area if necessary.
  138. It also converts the current interpreter result from an object
  139. to a string, if necessary, before appending the argument strings.
  140. Any number of fIstringfR arguments may be passed in a single
  141. call; the last argument in the list must be a NULL pointer.
  142. .PP
  143. fBTcl_AppendResultVAfR is the same as fBTcl_AppendResultfR except that
  144. instead of taking a variable number of arguments it takes an argument list.
  145. .PP
  146. fBTcl_AppendElementfR is similar to fBTcl_AppendResultfR in
  147. that it allows results to be built up in pieces.
  148. However, fBTcl_AppendElementfR takes only a single fIstringfR
  149. argument and it appends that argument to the current result
  150. as a proper Tcl list element.
  151. fBTcl_AppendElementfR adds backslashes or braces if necessary
  152. to ensure that fIinterpfR's result can be parsed as a list and that
  153. fIstringfR will be extracted as a single element.
  154. Under normal conditions, fBTcl_AppendElementfR will add a space
  155. character to fIinterpfR's result just before adding the new
  156. list element, so that the list elements in the result are properly
  157. separated.
  158. However if the new list element is the first in a list or sub-list
  159. (i.e. fIinterpfR's current result is empty, or consists of the
  160. single character ``{'', or ends in the characters `` {'') then no
  161. space is added.
  162. .PP
  163. fBTcl_FreeResultfR performs part of the work
  164. of fBTcl_ResetResultfR.
  165. It frees up the memory associated with fIinterpfR's result.
  166. It also sets fIinterp->freeProcfR to zero, but doesn't
  167. change fIinterp->resultfR or clear error state.
  168. fBTcl_FreeResultfR is most commonly used when a procedure
  169. is about to replace one result value with another.
  170. .SH "DIRECT ACCESS TO INTERP->RESULT IS DEPRECATED"
  171. .PP
  172. It used to be legal for programs to
  173. directly read and write fIinterp->resultfR
  174. to manipulate the interpreter result.
  175. Direct access to fIinterp->resultfR is now strongly deprecated
  176. because it can make the result's string and object forms inconsistent.
  177. Programs should always read the result
  178. using the procedures fBTcl_GetObjResultfR or fBTcl_GetStringResultfR,
  179. and write the result using fBTcl_SetObjResultfR or fBTcl_SetResultfR.
  180. .SH "THE TCL_FREEPROC ARGUMENT TO TCL_SETRESULT"
  181. .PP
  182. fBTcl_SetResultfR's fIfreeProcfR argument specifies how 
  183. the Tcl system is to manage the storage for the fIstringfR argument.
  184. If fBTcl_SetResultfR or fBTcl_SetObjResultfR are called
  185. at a time when fIinterpfR holds a string result,
  186. they do whatever is necessary to dispose of the old string result
  187. (see the fBTcl_InterpfR manual entry for details on this).
  188. .PP
  189. If fIfreeProcfR is fBTCL_STATICfR it means that fIstringfR
  190. refers to an area of static storage that is guaranteed not to be
  191. modified until at least the next call to fBTcl_EvalfR.
  192. If fIfreeProcfR
  193. is fBTCL_DYNAMICfR it means that fIstringfR was allocated with a call
  194. to fBTcl_AllocfR and is now the property of the Tcl system.
  195. fBTcl_SetResultfR will arrange for the string's storage to be
  196. released by calling fBTcl_FreefR when it is no longer needed.
  197. If fIfreeProcfR is fBTCL_VOLATILEfR it means that fIstringfR
  198. points to an area of memory that is likely to be overwritten when
  199. fBTcl_SetResultfR returns (e.g. it points to something in a stack frame).
  200. In this case fBTcl_SetResultfR will make a copy of the string in
  201. dynamically allocated storage and arrange for the copy to be the
  202. result for the current Tcl command.
  203. .PP
  204. If fIfreeProcfR isn't one of the values fBTCL_STATICfR,
  205. fBTCL_DYNAMICfR, and fBTCL_VOLATILEfR, then it is the address
  206. of a procedure that Tcl should call to free the string.
  207. This allows applications to use non-standard storage allocators.
  208. When Tcl no longer needs the storage for the string, it will
  209. call fIfreeProcfR. fIFreeProcfR should have arguments and
  210. result that match the type fBTcl_FreeProcfR:
  211. .CS
  212. typedef void Tcl_FreeProc(char *fIblockPtrfR);
  213. .CE
  214. When fIfreeProcfR is called, its fIblockPtrfR will be set to
  215. the value of fIstringfR passed to fBTcl_SetResultfR.
  216. .SH "SEE ALSO"
  217. Tcl_AddErrorInfo, Tcl_CreateObjCommand, Tcl_SetErrorCode, Tcl_Interp
  218. .SH KEYWORDS
  219. append, command, element, list, object, result, return value, interpreter