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

通讯编程

开发平台:

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: SplitList.3,v 1.6 2002/01/25 20:40:55 dgp Exp $
  9. '" 
  10. .so man.macros
  11. .TH Tcl_SplitList 3 8.0 Tcl "Tcl Library Procedures"
  12. .BS
  13. .SH NAME
  14. Tcl_SplitList, Tcl_Merge, Tcl_ScanElement, Tcl_ConvertElement, Tcl_ScanCountedElement, Tcl_ConvertCountedElement - manipulate Tcl lists
  15. .SH SYNOPSIS
  16. .nf
  17. fB#include <tcl.h>fR
  18. .sp
  19. int
  20. fBTcl_SplitListfR(fIinterp, list, argcPtr, argvPtrfR)
  21. .sp
  22. char *
  23. fBTcl_MergefR(fIargc, argvfR)
  24. .sp
  25. int
  26. fBTcl_ScanElementfR(fIsrc, flagsPtrfR)
  27. .sp
  28. int
  29. fBTcl_ScanCountedElementfR(fIsrc, length, flagsPtrfR)
  30. .sp
  31. int
  32. fBTcl_ConvertElementfR(fIsrc, dst, flagsfR)
  33. .sp
  34. int
  35. fBTcl_ConvertCountedElementfR(fIsrc, length, dst, flagsfR)
  36. .SH ARGUMENTS
  37. .AS "CONST char * CONST" ***argvPtr
  38. .AP Tcl_Interp *interp out
  39. Interpreter to use for error reporting.  If NULL, then no error message
  40. is left.
  41. .AP char *list in
  42. Pointer to a string with proper list structure.
  43. .AP int *argcPtr out
  44. Filled in with number of elements in fIlistfR.
  45. .AP "CONST char" ***argvPtr out
  46. fI*argvPtrfR will be filled in with the address of an array of
  47. pointers to the strings that are the extracted elements of fIlistfR.
  48. There will be fI*argcPtrfR valid entries in the array, followed by
  49. a NULL entry.
  50. .AP int argc in
  51. Number of elements in fIargvfR.
  52. .AP "CONST char * CONST" *argv in
  53. Array of strings to merge together into a single list.
  54. Each string will become a separate element of the list.
  55. .AP "CONST char" *src in
  56. String that is to become an element of a list.
  57. .AP int *flagsPtr in
  58. Pointer to word to fill in with information about fIsrcfR.
  59. The value of *fIflagsPtrfR must be passed to fBTcl_ConvertElementfR.
  60. .AP int length in
  61. Number of bytes in string fIsrcfR.
  62. .AP char *dst in
  63. Place to copy converted list element.  Must contain enough characters
  64. to hold converted string.
  65. .AP int flags in
  66. Information about fIsrcfR. Must be value returned by previous
  67. call to fBTcl_ScanElementfR, possibly OR-ed
  68. with fBTCL_DONT_USE_BRACESfR.
  69. .BE
  70. .SH DESCRIPTION
  71. .PP
  72. These procedures may be used to disassemble and reassemble Tcl lists.
  73. fBTcl_SplitListfR breaks a list up into its constituent elements,
  74. returning an array of pointers to the elements using
  75. fIargcPtrfR and fIargvPtrfR.
  76. While extracting the arguments, fBTcl_SplitListfR obeys the usual
  77. rules for backslash substitutions and braces.  The area of
  78. memory pointed to by fI*argvPtrfR is dynamically allocated;  in
  79. addition to the array of pointers, it
  80. also holds copies of all the list elements.  It is the caller's
  81. responsibility to free up all of this storage.
  82. For example, suppose that you have called fBTcl_SplitListfR with
  83. the following code:
  84. .CS
  85. int argc, code;
  86. char *string;
  87. char **argv;
  88. &...
  89. code = Tcl_SplitList(interp, string, &argc, &argv);
  90. .CE
  91. Then you should eventually free the storage with a call like the
  92. following:
  93. .CS
  94. Tcl_Free((char *) argv);
  95. .CE
  96. .PP
  97. fBTcl_SplitListfR normally returns fBTCL_OKfR, which means the list was
  98. successfully parsed.
  99. If there was a syntax error in fIlistfR, then fBTCL_ERRORfR is returned
  100. and the interpreter's result will point to an error message describing the
  101. problem (if fIinterpfR was not NULL).
  102. If fBTCL_ERRORfR is returned then no memory is allocated and fI*argvPtrfR
  103. is not modified.
  104. .PP
  105. fBTcl_MergefR is the inverse of fBTcl_SplitListfR:  it
  106. takes a collection of strings given by fIargcfR
  107. and fIargvfR and generates a result string
  108. that has proper list structure.
  109. This means that commands like fBindexfR may be used to
  110. extract the original elements again.
  111. In addition, if the result of fBTcl_MergefR is passed to fBTcl_EvalfR,
  112. it will be parsed into fIargcfR words whose values will
  113. be the same as the fIargvfR strings passed to fBTcl_MergefR.
  114. fBTcl_MergefR will modify the list elements with braces and/or
  115. backslashes in order to produce proper Tcl list structure.
  116. The result string is dynamically allocated
  117. using fBTcl_AllocfR;  the caller must eventually release the space
  118. using fBTcl_FreefR.
  119. .PP
  120. If the result of fBTcl_MergefR is passed to fBTcl_SplitListfR,
  121. the elements returned by fBTcl_SplitListfR will be identical to
  122. those passed into fBTcl_MergefR.
  123. However, the converse is not true:  if fBTcl_SplitListfR
  124. is passed a given string, and the resulting fIargcfR and
  125. fIargvfR are passed to fBTcl_MergefR, the resulting string
  126. may not be the same as the original string passed to fBTcl_SplitListfR.
  127. This is because fBTcl_MergefR may use backslashes and braces
  128. differently than the original string.
  129. .PP
  130. fBTcl_ScanElementfR and fBTcl_ConvertElementfR are the
  131. procedures that do all of the real work of fBTcl_MergefR.
  132. fBTcl_ScanElementfR scans its fIsrcfR argument
  133. and determines how to use backslashes and braces
  134. when converting it to a list element.
  135. It returns an overestimate of the number of characters
  136. required to represent fIsrcfR as a list element, and
  137. it stores information in fI*flagsPtrfR that is needed
  138. by fBTcl_ConvertElementfR.
  139. .PP
  140. fBTcl_ConvertElementfR is a companion procedure to fBTcl_ScanElementfR.
  141. It does the actual work of converting a string to a list element.
  142. Its fIflagsfR argument must be the same as the value returned
  143. by fBTcl_ScanElementfR.
  144. fBTcl_ConvertElementfR writes a proper list element to memory
  145. starting at *fIdstfR and returns a count of the total number
  146. of characters written, which will be no more than the result
  147. returned by fBTcl_ScanElementfR.
  148. fBTcl_ConvertElementfR writes out only the actual list element
  149. without any leading or trailing spaces: it is up to the caller to
  150. include spaces between adjacent list elements.
  151. .PP
  152. fBTcl_ConvertElementfR uses one of two different approaches to
  153. handle the special characters in fIsrcfR.  Wherever possible, it
  154. handles special characters by surrounding the string with braces.
  155. This produces clean-looking output, but can't be used in some situations,
  156. such as when fIsrcfR contains unmatched braces.
  157. In these situations, fBTcl_ConvertElementfR handles special
  158. characters by generating backslash sequences for them.
  159. The caller may insist on the second approach by OR-ing the
  160. flag value returned by fBTcl_ScanElementfR with
  161. fBTCL_DONT_USE_BRACESfR.
  162. Although this will produce an uglier result, it is useful in some
  163. special situations, such as when fBTcl_ConvertElementfR is being
  164. used to generate a portion of an argument for a Tcl command.
  165. In this case, surrounding fIsrcfR with curly braces would cause
  166. the command not to be parsed correctly.
  167. .PP
  168. fBTcl_ScanCountedElementfR and fBTcl_ConvertCountedElementfR are
  169. the same as fBTcl_ScanElementfR and fBTcl_ConvertElementfR, except
  170. the length of string fIsrcfR is specified by the fIlengthfR
  171. argument, and the string may contain embedded nulls.
  172. .SH KEYWORDS
  173. backslash, convert, element, list, merge, split, strings