Tcl_DString(3) Tcl Library Procedures Tcl_DString(3)
____________________________________________________________________________
NAME
Tcl_DStringInit, Tcl_DStringAppend, Tcl_DStringAppendElement,
Tcl_DStringStartSublist, Tcl_DStringEndSublist, Tcl_DStringLength,
Tcl_DStringValue, Tcl_DStringSetLength, Tcl_DStringTrunc,
Tcl_DStringFree, Tcl_DStringResult, Tcl_DStringGetResult - manipulate
dynamic strings
SYNOPSIS
#include <tcl.h> Tcl_DStringInit(
dsPtr)
char *
Tcl_DStringAppend(
dsPtr, bytes, length)
char *
Tcl_DStringAppendElement(
dsPtr, element)
Tcl_DStringStartSublist(
dsPtr)
Tcl_DStringEndSublist(
dsPtr)
int
Tcl_DStringLength(
dsPtr)
char *
Tcl_DStringValue(
dsPtr)
Tcl_DStringSetLength(
dsPtr, newLength)
Tcl_DStringTrunc(
dsPtr, newLength)
Tcl_DStringFree(
dsPtr)
Tcl_DStringResult(
interp, dsPtr)
Tcl_DStringGetResult(
interp, dsPtr)
ARGUMENTS
Tcl_DString
*dsPtr (in/out) Pointer to structure that is used
to manage a dynamic string.
const char
*bytes (in) Pointer to characters to append
to dynamic string.
const char
*element (in) Pointer to characters to append
as list element to dynamic
string.
int
length (in) Number of bytes from
bytes to add
to dynamic string. If -1, add
all characters up to null
terminating character.
int
newLength (in) New length for dynamic string,
not including null terminating
character.
Tcl_Interp
*interp (in/out) Interpreter whose result is to be
set from or moved to the dynamic
string.
____________________________________________________________________________
DESCRIPTION
Dynamic strings provide a mechanism for building up arbitrarily long
strings by gradually appending information. If the dynamic string is
short then there will be no memory allocation overhead; as the
string gets larger, additional space will be allocated as needed.
Tcl_DStringInit initializes a dynamic string to zero length. The
Tcl_DString structure must have been allocated by the caller. No
assumptions are made about the current state of the structure;
anything already in it is discarded. If the structure has been used
previously,
Tcl_DStringFree should be called first to free up any
memory allocated for the old string.
Tcl_DStringAppend adds new information to a dynamic string,
allocating more memory for the string if needed. If
length is less
than zero then everything in
bytes is appended to the dynamic string;
otherwise
length specifies the number of bytes to append.
Tcl_DStringAppend returns a pointer to the characters of the new
string. The string can also be retrieved from the
string field of
the Tcl_DString structure.
Tcl_DStringAppendElement is similar to
Tcl_DStringAppend except that
it does not take a
length argument (it appends all of
element) and it
converts the string to a proper list element before appending.
Tcl_DStringAppendElement adds a separator space before the new list
element unless the new list element is the first in a list or sub-
list (i.e. either the current string is empty, or it contains the
single character "{", or the last two characters of the current
string are " {").
Tcl_DStringAppendElement returns a pointer to the
characters of the new string.
Tcl_DStringStartSublist and
Tcl_DStringEndSublist can be used to
create nested lists. To append a list element that is itself a
sublist, first call
Tcl_DStringStartSublist, then call
Tcl_DStringAppendElement for each of the elements in the sublist,
then call
Tcl_DStringEndSublist to end the sublist.
Tcl_DStringStartSublist appends a space character if needed, followed
by an open brace;
Tcl_DStringEndSublist appends a close brace.
Lists can be nested to any depth.
Tcl_DStringLength is a macro that returns the current length of a
dynamic string (not including the terminating null character).
Tcl_DStringValue is a macro that returns a pointer to the current
contents of a dynamic string.
Tcl_DStringSetLength changes the length of a dynamic string. If
newLength is less than the string's current length, then the string
is truncated. If
newLength is greater than the string's current
length, then the string will become longer and new space will be
allocated for the string if needed. However,
Tcl_DStringSetLength will not initialize the new space except to provide a terminating
null character; it is up to the caller to fill in the new space.
Tcl_DStringSetLength does not free up the string's storage space even
if the string is truncated to zero length, so
Tcl_DStringFree will
still need to be called.
Tcl_DStringTrunc changes the length of a dynamic string. This
procedure is now deprecated.
Tcl_DStringSetLength should be used
instead.
Tcl_DStringFree should be called when you are finished using the
string. It frees up any memory that was allocated for the string and
reinitializes the string's value to an empty string.
Tcl_DStringResult sets the result of
interp to the value of the
dynamic string given by
dsPtr. It does this by moving a pointer from
dsPtr to the interpreter's result. This saves the cost of allocating
new memory and copying the string.
Tcl_DStringResult also
reinitializes the dynamic string to an empty string.
Tcl_DStringGetResult does the opposite of
Tcl_DStringResult. It sets
the value of
dsPtr to the result of
interp and it clears
interp's
result. If possible it does this by moving a pointer rather than by
copying the string.
KEYWORDS
append, dynamic string, free, result
Tcl 7.4 Tcl_DString(3)