OSDN Git Service

Please enter the commit message for your changes. Lines starting
[eos/base.git] / util / src / TclTk / blt2.5 / man / vector.mann
diff --git a/util/src/TclTk/blt2.5/man/vector.mann b/util/src/TclTk/blt2.5/man/vector.mann
deleted file mode 100644 (file)
index f5f9b14..0000000
+++ /dev/null
@@ -1,1334 +0,0 @@
-'\"
-'\" Copyright 1991-1997 by Lucent Technologies, Inc.
-'\"
-'\" Permission to use, copy, modify, and distribute this software and its
-'\" documentation for any purpose and without fee is hereby granted, provided
-'\" that the above copyright notice appear in all copies and that both that the
-'\" copyright notice and warranty disclaimer appear in supporting documentation,
-'\" and that the names of Lucent Technologies any of their entities not be used
-'\" in advertising or publicity pertaining to distribution of the software
-'\" without specific, written prior permission.
-'\"
-'\" Lucent Technologies disclaims all warranties with regard to this software,
-'\" including all implied warranties of merchantability and fitness.  In no event
-'\" shall Lucent Technologies be liable for any special, indirect or
-'\" consequential damages or any damages whatsoever resulting from loss of use,
-'\" data or profits, whether in an action of contract, negligence or other
-'\" tortuous action, arising out of or in connection with the use or performance
-'\" of this software.  
-'\"
-'\" Vector command created by George Howlett.
-'\"
-.so man.macros
-.TH vector n BLT_VERSION BLT "BLT Built-In Commands"
-.BS
-'\" Note:  do not modify the .SH NAME line immediately below!
-.SH NAME
-vector \-  Vector data type for Tcl
-.SH SYNOPSIS
-\fBvector configure \fIoption value ...\fR
-.sp
-\fBvector create \fIvecName \fR?\fIvecName\fR...? ?\fIswitches\fR? 
-.sp
-\fBvector destroy \fIvecName \fR?\fIvecName\fR...?
-.sp
-\fBvector expr \fIexpression\fR
-.sp
-\fBvector names \fR?\fIpattern\fR...?
-.sp
-\fBvector op\fR \fIoperation vecName\fR ?\fIarg\fR?...
-.BE
-.SH DESCRIPTION
-The \fBvector\fR command creates a vector of floating point
-values.  The vector's components can be manipulated in three ways:
-through a Tcl array variable, a Tcl command, or the C API.
-.SH INTRODUCTION
-A vector is simply an ordered set of numbers.  The components of a
-vector are real numbers, indexed by counting numbers.
-.PP
-Vectors are common data structures for many applications.  For
-example, a graph may use two vectors to represent the X-Y
-coordinates of the data plotted.  The graph will automatically
-be redrawn when the vectors are updated or changed. By using vectors, 
-you can separate
-data analysis from the graph widget.  This makes it easier, for
-example, to add data transformations, such as splines.  It's possible
-to plot the same data to in multiple graphs, where each graph presents
-a different view or scale of the data.
-.PP
-You could try to use Tcl's associative arrays as vectors.  Tcl arrays
-are easy to use.  You can access individual elements randomly by
-specifying the index, or the set the entire array by providing a list
-of index and value pairs for each element.  The disadvantages of 
-associative arrays as vectors lie in the fact they are implemented as
-hash tables.
-.TP 2
-\(bu 
-There's no implied ordering to the associative arrays.  If you used
-vectors for plotting, you would want to insure the second component
-comes after the first, an so on.  This isn't possible since arrays
-are actually hash tables.  For example, you can't get a range of
-values between two indices.  Nor can you sort an array.
-.TP 2
-\(bu
-Arrays consume lots of memory when the number of elements becomes
-large (tens of thousands).  This is because each element's index and
-value are stored as strings in the hash table.
-.TP 2
-\(bu 
-The C programming interface is unwieldy.  Normally with vectors, you
-would like to view the Tcl array as you do a C array, as an array of
-floats or doubles.  But with hash tables, you must convert both the
-index and value to and from decimal strings, just to access
-an element in the array.  This makes it cumbersome to perform operations on
-the array as a whole.
-.PP
-The \fBvector\fR command tries to overcome these disadvantages while
-still retaining the ease of use of Tcl arrays.  The \fBvector\fR
-command creates both a new Tcl command and associate array which are
-linked to the vector components.  You can randomly access vector
-components though the elements of array.  Not all indices are
-generated for the array, so printing the array (using the \fBparray\fR
-procedure) does not print out all the component values.  You can use
-the Tcl command to access the array as a whole.  You can copy, append,
-or sort vector using its command.  If you need greater performance, or
-customized behavior, you can write your own C code to manage vectors.
-.SH EXAMPLE
-You create vectors using the \fBvector\fR command and its \fBcreate\fR
-operation.
-.CS
-# Create a new vector. 
-vector create y(50)
-.CE
-This creates a new vector named \fBy\fR.  It has fifty components, by
-default, initialized to \fB0.0\fR.  In addition, both a Tcl command
-and array variable, both named \fBy\fR, are created.  You can use
-either the command or variable to query or modify components of the
-vector.
-.CS
-# Set the first value. 
-set y(0) 9.25
-puts "y has [y length] components"
-.CE
-The array \fBy\fR can be used to read or set individual components of
-the vector.  Vector components are indexed from zero.  The array index
-must be a number less than the number of components.  For example,
-it's an error if you try to set the 51st element of \fBy\fR.
-.CS
-# This is an error. The vector only has 50 components.
-set y(50) 0.02
-.CE
-You can also specify a range of indices using a colon (:) to separate
-the first and last indices of the range.
-.CS
-# Set the first six components of y 
-set y(0:5) 25.2
-.CE
-If you don't include an index, then it will default to the first
-and/or last component of the vector.
-.CS
-# Print out all the components of y 
-puts "y = $y(:)"
-.CE
-There are special non-numeric indices.  The index \fBend\fR, specifies
-the last component of the vector.  It's an error to use this index if
-the vector is empty (length is zero).  The index \fB++end\fR can be
-used to extend the vector by one component and initialize it to a specific 
-value.  You can't read from the array using this index, though.
-.CS
-# Extend the vector by one component.
-set y(++end) 0.02
-.CE
-The other special indices are \fBmin\fR and \fBmax\fR.  They return the
-current smallest and largest components of the vector.  
-.CS
-# Print the bounds of the vector
-puts "min=$y(min) max=$y(max)"
-.CE
-To delete components from a vector, simply unset the corresponding
-array element. In the following example, the first component of
-\fBy\fR is deleted.  All the remaining components of \fBy\fR will be
-moved down by one index as the length of the vector is reduced by
-one.
-.CS
-# Delete the first component
-unset y(0)
-puts "new first element is $y(0)"
-.CE
-The vector's Tcl command can also be used to query or set the vector.
-.CS
-# Create and set the components of a new vector
-vector create x
-x set { 0.02 0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.18 0.20 }
-.CE
-Here we've created a vector \fBx\fR without a initial length specification.
-In this case, the length is zero.  The \fBset\fR operation resets the vector,
-extending it and setting values for each new component.  
-.PP
-There are several operations for vectors.  The \fBrange\fR operation
-lists the components of a vector between two indices.
-.CS
-# List the components 
-puts "x = [x range 0 end]"
-.CE
-You can search for a particular value using the \fBsearch\fR
-operation.  It returns a list of indices of the components with the
-same value.  If no component has the same value, it returns \fB""\fR.
-.CS
-# Find the index of the biggest component
-set indices [x search $x(max)]
-.CE
-Other operations copy, append, or sort vectors.  You can append
-vectors or new values onto an existing vector with the \fBappend\fR
-operation.
-.CS
-# Append assorted vectors and values to x
-x append x2 x3 { 2.3 4.5 } x4
-.CE
-The \fBsort\fR operation sorts the vector.  If any additional vectors
-are specified, they are rearranged in the same order as the vector.
-For example, you could use it to sort data points represented by x and
-y vectors.
-.CS
-# Sort the data points
-x sort y
-.CE
-The vector \fBx\fR is sorted while the components of \fBy\fR are 
-rearranged so that the original x,y coordinate pairs are retained.
-.PP
-The \fBexpr\fR operation lets you perform arithmetic on vectors.  
-The result is stored in the vector.
-.CS
-# Add the two vectors and a scalar
-x expr { x + y }
-x expr { x * 2 }
-.CE
-When a vector is modified, resized, or deleted, it may trigger
-call-backs to notify the clients of the vector.  For example, when a
-vector used in the \fBgraph\fR widget is updated, the vector
-automatically notifies the widget that it has changed.  The graph can
-then redrawn itself at the next idle point.  By default, the
-notification occurs when Tk is next idle.  This way you can modify the
-vector many times without incurring the penalty of the graph redrawing
-itself for each change.  You can change this behavior using the
-\fBnotify\fR operation.
-.CS
-# Make vector x notify after every change
-x notify always
-       ...
-# Never notify
-x notify never
-       ...
-# Force notification now
-x notify now
-
-# Set Tcl callback for update of Tktable widget .t.
-x notify callback {.t conf -padx [.t cget -padx]; .t reread}
-
-.CE
-To delete a vector, use the \fBvector delete\fR command.  
-Both the vector and its corresponding Tcl command are destroyed.
-.CS
-# Remove vector x
-vector destroy x
-.CE
-The psuedo vector \fBlast\fR can be used at the end of an
-expression to implement running totals.
-During execution it resolves to the result from the previous
-vector element evaluation.
-.CS
-vector create A(10)
-vector create B(10)
-vector create S(10)
-vector create T(10)
-S expr A+B
-T expr S+last; # Running total
-.CE
-.SH SYNTAX
-Vectors are created using the \fBvector create\fR operation.  
-Th \fBcreate\fR operation can be invoked in one of three forms:
-.TP
-\fBvector create \fIvecName\fR
-This creates a new vector \fIvecName\fR which initially has no components.
-.TP
-\fBvector create \fIvecName\fR(\fIsize\fR)
-This second form creates a new vector which will contain \fIsize\fR
-number of components.  The components will be indexed starting from
-zero (0). The default value for the components is \fB0.0\fR.
-.TP
-\fBvector create \fIvecName\fR(\fIrows,columns\fR)
-This form allows creation of a matrix with the specified columns and
-\fIrows*columns\fR elements.
-See the \fImatrix\fR section for more details.
-.TP
-\fBvector create \fIvecName\fR(\fIfirst\fR:\fIlast\fR)
-The last form creates a new vector of indexed \fIfirst\fR through
-\fIlast\fR.  \fIFirst\fR and \fIlast\fR can be any integer value
-so long as \fIfirst\fR is less than \fIlast\fR.
-.PP
-Vector names must start with a letter and consist of letters, digits,
-or underscores.  
-.CS
-# Error: must start with letter
-vector create 1abc
-.CE
-You can automatically generate vector names using the
-"\fB#auto\fR" vector name.  The \fBcreate\fR operation will generate a 
-unique vector name.
-.CS
-set vec [vector create #auto]
-puts "$vec has [$vec length] components"
-.CE
-.SS VECTOR INDICES
-Vectors are indexed by integers.  You can access the individual vector
-components via its array variable or Tcl command.  The string
-representing the index can be an integer, a numeric expression, a
-range, or a special keyword.
-.PP
-The index must lie within the current range of the vector, otherwise
-an an error message is returned.  Normally the indices of a vector
-are start from 0.  But you can use the \fBoffset\fR operation to
-change a vector's indices on-the-fly.
-.CS
-puts $vecName(0)
-vecName offset -5
-puts $vecName(-5)
-.CE
-When \fImatrix numcols\fR is > 1, 2D indexes are supported using
-ROW,COL form.
-.CS
-vecName matrix numcols 3
-puts vecName(0,2)
-.CE
-You can also use numeric expressions as indices.  The result
-of the expression must be an integer value.  
-.CS
-set n 21
-set vecName($n+3) 50.2
-.CE
-The following special non-numeric indices are available: \fBmin\fR, \fBmax\fR, \fBend\fR, and
-\fB++end\fR.  
-.CS
-puts "min = $vecName($min)"
-set vecName(end) -1.2
-.CE
-The indices \fBmin\fR and \fBmax\fR will return the minimum and maximum
-values of the vector.  Also available are: \fBprod\fR,  \fBsum\fR, 
-and \fBmean\fR.
-The index \fBend\fR returns the value of the 
-last component in the vector.
-he index \fBend,0\fR returns the value of the 
-last row in column 0 of the vector.
-The index \fB++end\fR is used to append
-new value onto the vector.  It automatically extends the vector by
-numcols and sets its value.
-.CS
-# Append an new component to the end
-set vecName(++end) 3.2
-.CE
-A range of indices can be indicated by a colon (:).  
-.CS
-# Set the first six components to 1.0
-set vecName(0:5) 1.0
-.CE
-If no index is supplied the first or last component is assumed.
-.CS
-# Print the values of all the components
-puts $vecName(:)
-.CE
-.SH VECTOR OPERATIONS
-.TP
-\fBvector configure \fI? -flush bool -watchunset bool -oldcreate bool -maxsize int -novariable bool -nocommand bool?\fR
-The \fBconfigure\fR operation sets the default options used
-in creating vectors: these options are global to the interpreter.
-The \fI\-maxsize\fR option, when non-zero, limits creation size.
-The \fI\-oldcreate\fR enable the creation shortcut: \fBvector vec1 vec2 ...\fR.
-See the create command for details on the others.
-By default, these are all disabled or zero.
-.RE
-.TP
-\fBvector create \fIvecName\fR?(\fIsize\fR)?... \fR?\fIswitches\fR? 
-The \fBcreate\fR operation creates a new vector \fIvecName\fR. The
-\fIsize\fR may be an integer, a START:END range or ROW,COL (see matrix).
-This creates both a
-Tcl command and array variable called \fIvecName\fR.  The
-name \fIvecName\fR must be unique, so another Tcl command or array
-variable can not already exist in the current scope.  You may access the
-components of the vector using the  variable.  If you change a value in
-the array, or unset an array element, the vector is updated to reflect
-the changes.  When the variable \fIvecName\fR is unset, the vector and
-its Tcl command are also destroyed.
-.sp
-The vector has optional switches that affect how the vector is created. They
-are as follows:
-.RS
-.TP
-\fB\-variable \fIvarName\fR
-Specifies the name of a Tcl variable to be mapped to the vector. If
-the variable already exists, it is first deleted, then recreated. 
-If \fIvarName\fR is the empty string, then no variable will be mapped.
-You can always map a variable back to the vector using the vector's 
-\fBvariable\fR operation.
-.TP
-\fB\-command \fIcmdName\fR
-Maps a Tcl command to the vector. The vector can be accessed using 
-\fIcmdName\fR and one of the vector instance operations.  
-A Tcl command by that name cannot already exist.
-If \fIcmdName\fR is the empty string, no command mapping
-will be made.
-.TP
-\fB\-watchunset \fIboolean\fR
-Indicates that the vector should automatically delete itself if
-the variable associated with the vector is unset.  By default,
-the vector will not be deleted.  This is different from previous
-releases.  Set \fIboolean\fR to "true" to get the old behavior.
-.TP
-\fB\-flush \fIboolean\fR
-Indicates that the vector should automatically flush the cached
-variable elements which unsets all the elements of the Tcl array
-variable associated with the vector, freeing memory associated 
-with the variable. This includes both the hash table and the hash keys.
-The down side is that this effectively flushes the caching of vector
-elements in the array.  This means that the subsequent reads
-of the array will require a decimal to string conversion.
-By default, flushing is disabled.
-.RE
-.TP
-\fBvector destroy \fIvecName\fR \fR?\fIvecName...\fR?
-Destroy vectors.
-.TP
-\fBvector expr \fIexpression\fR
-.RS
-All binary operators take vectors as operands (remember that numbers
-are treated as one-component vectors).The exact action of binary
-operators depends upon the length of the second operand.  If the
-second operand has only one component, then each element of the first
-vector operand is computed by that value.  For example, the expression
-"x * 2" multiples all elements of the vector x by 2.  If the second
-operand has more than one component, both operands must be the same
-length.  Each pair of corresponding elements are computed.  So "x + y"
-adds the the first components of x and y together, the second, and so on.
-.sp
-The valid operators are listed below, grouped in decreasing order
-of precedence:
-.TP 20
-\fB\-\0\0!\fR
-Unary minus and logical NOT.  The unary minus flips the sign of each
-component in the vector.  The logical not operator returns a vector of
-whose values are 0.0 or 1.0.  For each non-zero component 1.0 is returned,
-0.0 otherwise.
-.TP 20
-\fB^\fR
-Exponentiation.  
-.TP 20
-\fB*\0\0/\0\0%\fR
-Multiply, divide, remainder.  
-.TP 20
-\fB+\0\0\-\fR
-Add and subtract.  
-.TP 20
-\fB<<\0\0>>\fR
-Left and right shift.  Circularly shifts the values of the vector 
-.TP 20
-\fB<\0\0>\0\0<=\0\0>=\fR
-Boolean less, greater, less than or equal, and greater than or equal.
-Each operator returns a vector of ones and zeros.  If the condition is true, 
-1.0 is the component value, 0.0 otherwise.
-.TP 20
-\fB==\0\0!=\fR
-Boolean equal and not equal.
-Each operator returns a vector of ones and zeros.  If the condition is true, 
-1.0 is the component value, 0.0 otherwise.
-.TP 20
-\fB&&\fR
-Logical AND.  Produces a 1 result if both operands are non-zero, 0 otherwise.
-.TP 20
-\fB||\fR
-Logical OR.  Produces a 0 result if both operands are zero, 1 otherwise.
-.TP 20
-\fIx\fB?\fIy\fB:\fIz\fR
-If-then-else, as in C.
-.LP
-.sp
-See the C manual for more details on the results produced by each
-operator.  All of the binary operators group left-to-right within the
-same precedence level.  
-.sp
-Several mathematical functions are supported for vectors.  Each of
-the following functions invokes the math library function of the same name;
-see the manual entries for the library functions for details on what
-they do.  The operation is applied to all elements of the vector
-returning the results.   All functions take a vector operand.
-If no vector operand is used in the call, the current
-vector is assumed. eg.
-.CS
-vector create aVec
-aVec seq 0 100
-aVec expr {2*abs(aVec)-1}
-aVec length 100
-aVec expr {2*row()}
-vector expr {2*row()} ; # ERROR!
-.CE
-.CS
-.ta 3c 6c 9c
-\fBacos\fR     \fBcos\fR       \fBhypot\fR     \fBsinh\fR 
-\fBasin\fR     \fBcosh\fR      \fBlog\fR       \fBsqrt\fR 
-\fBatan\fR     \fBexp\fR       \fBlog10\fR     \fBtan\fR  
-\fBceil\fR     \fBfloor\fR     \fBsin\fR       \fBtanh\fR 
-.CE
-Additional functions are:
-.TP 1i
-\fBabs\fR
-Returns the absolute value of each component.
-.TP 1i
-\fBrandom\fR
-Returns a vector of non-negative values uniformly distributed 
-between [0.0, 1.0) using \fIdrand48\fR.
-The seed comes from the internal clock of the machine or may be 
-set manual with the srandom function.
-.TP 1i
-\fBround\fR
-Rounds each component of the vector.
-.TP 1i
-\fBsrandom\fR
-Initializes the random number generator using \fIsrand48\fR.
-The high order 32-bits are set using the integral portion of the first 
-vector component. All other components are ignored.  The low order 16-bits 
-are set to an arbitrary value.
-.PP
-The following functions return a single value.
-.TP 1i
-\fBadev\fR 
-Returns the average deviation (defined as the sum of the absolute values 
-of the differences between component and the mean, divided by the length
-of the vector).
-.TP 1i
-\fBkurtosis\fR
-Returns the degree of peakedness (fourth moment) of the vector.
-.TP 1i
-\fBlength\fR
-Returns the number of components in the vector.
-.TP 1i
-\fBmax\fR
-Returns the vector's maximum value.
-.TP 1i
-\fBmean\fR
-Returns the mean value of the vector.
-.TP 1i
-\fBmedian\fR
-Returns the median of the vector.
-.TP 1i
-\fBmin\fR
-Returns the vector's minimum value.
-.TP 1i
-\fBq1\fR
-Returns the first quartile of the vector.
-.TP 1i
-\fBq3\fR
-Returns the third quartile of the vector.
-.TP 1i
-\fBprod\fR 
-Returns the product of the components.
-.TP 1i
-\fBsdev\fR 
-Returns the standard deviation (defined as the square root of the variance)
-of the vector.
-.TP 1i
-\fBskew\fR 
-Returns the skewness (or third moment) of the vector.  This characterizes
-the degree of asymmetry of the vector about the mean.
-.TP 1i
-\fBsum\fR 
-Returns the sum of the components.
-.TP 1i
-\fBvar\fR
-Returns the variance of the vector. The sum of the squared differences 
-between each component and the mean is computed.  The variance is 
-the sum divided by the length of the vector minus 1.
-.PP
-This last set of functions returns a vector of the same length as the argument.
-.TP 1i
-\fBinvert\fR
-Returns vector with elements in reversed order.
-.TP 1i
-\fBnorm\fR 
-Scales the values of the vector to lie in the range [0.0..1.0].
-.TP 1i
-\fBrow\fR 
-Psuedo function to get the current row.
-.TP 1i
-\fBsort\fR
-Returns the vector components sorted in ascending order.
-.TP 1i
-\fBshift(nVec,N)\fR
-This is the only function taking a second arg.
-It provides a version of \fInvec\fR shifted by N places.
-When N is a scalar or vector with only one element,
-shift fills vacant area with 0. Otherwise the second element of
-\fInVec\fR is used for the fill value.
-One use for this is providing running totals.
-.RE
-.TP
-\fBvector names \fR?\fIpattern\fR?
-Return names of all defined vectors.
-.RE
-.TP
-\fBvector op\fR \fIoperation vecName\fR ?\fIarg\fR?...
-Invoke instance operation.  Supported operations are defined in the next section.
-Op is the only way to invoke instance operation sub-commands
-when -command is defined as empty in
-a vector.  It also allows writing vector code that is checkable
-by a syntax checkers.  eg.
-.CS
-
-vector create v1
-v1 op append {1 2 3}
-v1 op modify 1 2.1
-
-.CE
-.RE
-.SH INSTANCE OPERATIONS
-You can also use the vector's Tcl command to query or modify it.  The
-general form is
-.DS
-\fIvecName \fIoperation\fR \fR?\fIarg\fR?...
-.DE
-Note this is equivalent to the form:
-.DS
-\fBvector op\fR \fIoperation vecName\fR ?\fIarg\fR?...
-.DE
-Both \fIoperation\fR and its arguments determine the exact behavior of
-the command.  The operations available for vectors are listed below.
-.TP
-\fIvecName \fB+\fR \fIitem\fR
-\fIvecName \fB-\fR \fIitem\fR
-\fIvecName \fB*\fR \fIitem\fR
-\fIvecName \fB/\fR \fIitem\fR
-Perform binary op and return result as a list.
-.TP
-\fIvecName \fBappend\fR \fIitem\fR ?\fIitem\fR?...
-Appends the component values from \fIitem\fR to \fIvecName\fR.
-\fIItem\fR can be either the name of a vector or a list of numeric
-values.
-.TP
-\fIvecName \fBbinread\fR \fIchannel\fR ?\fIlength\fR? ?\fIswitches\fR? 
-Reads binary values from a Tcl channel. Values are either appended
-to the end of the vector or placed at a given index (using the
-\fB\-at\fR option), overwriting existing values.  Data is read until EOF
-is found on the channel or a specified number of values \fIlength\fR 
-are read (note that this is not necessarily the same as the number of 
-bytes). The following switches are supported:
-.RS
-.TP
-\fB\-swap\fR
-Swap bytes and words.  The default endian is the host machine.
-.TP
-\fB\-at \fIindex\fR
-New values will start at vector index \fIindex\fR.  This will
-overwrite any current values.
-.TP
-\fB\-format\fR \fIformat\fR
-Specifies the format of the data.  \fIFormat\fR can be one of the
-following: "i1", "i2", "i4", "i8", "u1, "u2", "u4", "u8", "r4",
-"r8", or "r16".  The number indicates the number of bytes
-required for each value.  The letter indicates the type: "i" for signed,
-"u" for unsigned, "r" or real.  The default format is "r16".
-.RE
-.TP
-\fIvecName \fBbinwrite\fR \fIchannel\fR ?\fIlength\fR? ?\fI\-at index\fR? 
-Like \fBbinread\fR, but writes data.
-.TP
-\fIvecName \fBclear\fR 
-Clears the element indices from the array variable associated with
-\fIvecName\fR.  This doesn't affect the components of the vector.  By
-default, the number of entries in the Tcl array doesn't match the
-number of components in the vector.  This is because its too expensive
-to maintain decimal strings for both the index and value for each
-component.  Instead, the index and value are saved only when you read
-or write an element with a new index.  This command removes the index
-and value strings from the array.  This is useful when the vector is
-large.
-.TP
-\fIvecName \fBdelete\fR \fIindex\fR ?\fIindex\fR?...
-Deletes the \fIindex\fRth component from the vector \fIvecName\fR.
-\fIIndex\fR is the index of the element to be deleted.  This is the
-same as unsetting the array variable element \fIindex\fR.  The vector
-is compacted after all the indices have been deleted.
-.TP
-\fIvecName \fBdup\fR \fIdestName\fR 
-Copies \fIvecName\fR to \fIdestName\fR. \fIDestName\fR is the name of a
-destination vector.  If a vector \fIdestName\fR already exists, it is
-overwritten with the components of \fIvecName\fR.  Otherwise a 
-new vector is created.
-.TP
-\fIvecName \fBexpr\fR \fIexpression\fR
-Computes the expression and resets the values of the vector accordingly.
-Both scalar and vector math operations are allowed.  All values in
-expressions are either real numbers or names of vectors.  All numbers
-are treated as one component vectors.
-.TP
-\fIvecName \fBindex\fR \fIindex\fR ?\fIvalue\fR?...
-Get/set individual vector values.  This provides element
-updating when \fI\-variable\fR is set to empty.
-.TP
-\fIvecName \fBinsert\fR \fIindex\fR \fIitem\fR ?\fIitem\fR?...
-Inserts the component values from \fIitem\fR to \fIvecName\fR at
-\fIindex\fR \fIItem\fR can be either the name of a vector or
-a list of numeric values.
-.TP
-\fIvecName \fBlength\fR ?\fInewSize\fR?
-Queries or resets the number of components in \fIvecName\fR.
-\fINewSize\fR is a number specifying the new size of the vector.  If
-\fInewSize\fR is smaller than the current size of \fIvecName\fR,
-\fIvecName\fR is truncated.  If \fInewSize\fR is greater, the vector
-is extended and the new components are initialized to \fB0.0\fR.  If
-no \fInewSize\fR argument is present, the current length of the vector
-is returned.
-.TP
-\fIvecName \fBmatrix \fI ...\fR
-Matrix provides a 2D array view into 1D data.  It provides indexing operations
-in ROW,COL form making it suitable for use with TkTable.
-Data storage remains unchanged: vectors are still just a single long array.
-For example, here are two ways to create a 3 column by 10 row matrix:
-.CS
-
-vector create aVec(10,3)
-vector create bVec(30)
-bVec matrix numcols 3
-set aVec(0,0) 99
-set bVec(29,2) -99
-aVec append {5 6 7}; # aVec now has 11 rows.
-aVec append 1 2;     # Now aVec has 13 rows!
-
-.CE
-Note that data is appended only in increments of numcols.
-Elements 0-2 make up the first row, 3-5 the second, etc.
-Elements will appear only in increments of the column size.
-.RS
-.TP 0.75i
-\fIvecName \fBmatrix copy \fIdstcolumn\fR \fIsrccolumn\fR \fI?srcVec?\fR  
-Copy a column of element values
-to column \fIdstcolumn\fR from \fIsrccolumn\fR.
-If vector \fIsrcVec\fR is given, and not the same as \fIvecName\fR, the
-columns numbers must be different.
-If the \fIsrcVec\fR column is longer, \fIvecName\fR will be extended.
-If shorter, remaining destination values are not overwritten.
-.TP
-\fIvecName \fBmatrix delete \fIcolumn\fR.
-Delete elements in a column.
-Note that \fBnumcols\fR, which must be greater than 1, will be decremented.
-.TP
-\fIvecName \fBmatrix get \fIcolumn\fR
-Get the element in a column:  this number must be
-less than \fBnumcols\fR.
-Note that \fBnumcols\fR must be non-zero.
-.TP
-\fIvecName \fBmatrix insert \fIcolumn\fR \fI?initvalue?\fR .
-Insert a new column of elements at column (default 0).
-The new column is initialized
-with \fIinitvalue\fR, or \fI0.0\fR if not specified.
-Note that \fBnumcols\fR will be incremented.
-.TP
-\fIvecName \fBmatrix multiply \fIsrcVec\fR ?\fIdstVec\fR? 
-Perform matrix multiplication using \fBsrcVec\fR,
-placing results either in \fBdstVec\fR, or returned as a list.
-The numrows of \fIsrcVec\fR must equal numcols in
-\fIvecName\fR.  One application for multiply is coordinate transformation.
-.TP
-\fIvecName \fBmatrix numcols \fI?size?\fR
-Get or set the number of columns for a vectors data.  Values >1 enable
-array variables to accept 2d matrix indexes.
-For example with a numcols of 10, \fB$vec1(1,2)\fR refers to the
-13th element in the vector. A vectors size is also constrained
-to multiples of numcols, as is it's offset.
-By default, numcols is 1.
-.TP
-\fIvecName \fBmatrix numrows \fI?size?\fR
-Get or set the length of rows in a columns for a vector.
-By default, this is just the \fIvector length/numcols\fR.
-Setting this value simply provides a convenient way to increase or decrease
-the vector size by multiples of \fInumcols\fR.
-.TP
-\fIvecName \fBmatrix set \fIcolumn\fR \fI?valuelist?\fR
-Set value  elements in a column:  this number must be
-less than \fBnumcols\fR.  The \fIvaluelist\fR is a list values.
-If this list is shorter than the column, it's last
-value is used for all remaining columns. The column gets set to
-the values of \fIitem\fR, or \fI0.0\fR by default.
-.TP
-\fIvecName \fBmatrix shift \fIcolumn\fR \fIamount\fR ?\fIstartoffset\fR?
-Shifts the values of a column by integer in\fIamount\fR.  A negative
-value shifts upward.
-The \fIstartoffset\fR indicates where to start shifting from.
-.TP
-\fIvecName \fBmatrix sort \fIcolumn\fR \fI?-reverse?\fR
-Sort the vector by the given column.
-.TP
-\fIvecName \fBmatrix transpose\fR
-Transpose all columns with rows in matrix.
-Note that this is a no-op if \fBnumcols\fR is 1.  Otherwise,
-numcols will change to \fBvectorLength/numcols\fR.
-.RE
-.TP
-\fIvecName \fBmerge\fR \fIsrcName\fR ?\fIsrcName\fR?...
-Merges the named vectors into a single vector.  The resulting 
-vector is formed by merging the components of each source vector 
-one index at a time.
-.TP
-\fIvecName \fBnotify\fR ?\fIkeyword\fR? ?\fIscript\fR?
-Queries or controls how vector clients are notified of changes
-to the vector.  Also allows setting a notifier callback.
-The exact behavior is determined by \fIkeyword\fR.
-.RS
-.TP 0.75i
-\fBalways\fR 
-Indicates that clients are to be notified immediately whenever the
-vector is updated.
-.TP
-\fBnever\fR
-Indicates that no clients are to be notified.
-.TP
-\fBwhenidle\fR
-Indicates that clients are to be notified at the next idle point
-whenever the vector is updated.
-.TP
-\fBnow\fR
-If any client notifications is currently pending, they are notified
-immediately.
-.TP
-\fBcancel\fR
-Cancels pending notifications of clients using the vector.
-.TP
-\fBpending\fR
-Returns \fB1\fR if a client notification is pending, and \fB0\fR otherwise.
-.TP
-\fBcallback\fR ?\fIscript\fR?
-Query or set a Tcl callback script that is evaluated when a vector is updated.
-.RE
-.TP
-\fIvecName \fBpopulate\fR \fIdestName\fR ?\fIdensity\fR?
-Creates a vector \fIdestName\fR which is a superset of \fIvecName\fR.
-\fIDestName\fR will include all the components of \fIvecName\fR, in
-addition the interval between each of the original components will
-contain a \fIdensity\fR number of new components, whose values are
-evenly distributed between the original components values.  This is
-useful for generating abscissas to be interpolated along a spline.
-.TP
-\fIvecName \fBrange\fR \fIfirstIndex\fR ?\fIlastIndex\fR?...
-Returns a list of numeric values representing the vector components
-between two indices. Both \fIfirstIndex\fR and \fIlastIndex\fR are 
-indices representing the range of components to be returned. If 
-\fIlastIndex\fR is less than \fIfirstIndex\fR, the components are
-listed in reverse order.
-.TP
-\fIvecName \fBsearch\fR \fIvalue\fR ?\fIvalue\fR?  
-Searches for a value or range of values among the components of
-\fIvecName\fR.  If one \fIvalue\fR argument is given, a list of
-indices of the components which equal \fIvalue\fR is returned.  If a
-second \fIvalue\fR is also provided, then the indices of all
-components which lie within the range of the two values are returned.
-If no components are found, then \fB""\fR is returned.
-.TP
-\fIvecName \fBset\fR \fIitem\fR
-Resets the components of the vector to \fIitem\fR. \fIItem\fR can
-be either a list of numeric expressions or another vector.
-.TP
-\fIvecName \fBseq\fR \fIstart\fR ?\fIfinish\fR? ?\fIstep\fR?
-Generates a sequence of values starting with the value \fIstart\fR.
-\fIFinish\fR indicates the terminating value of the sequence.  
-The vector is automatically resized to contain just the sequence.
-If three arguments are present, \fIstep\fR designates the interval.  
-.sp
-With only two arguments (no \fIfinish\fR argument), the sequence will
-continue until the vector is filled.  With one argument, the interval 
-defaults to 1.0.
-.TP
-\fIvecName \fBsort\fR ?\fB-reverse\fR? ?\fIargName\fR?...  
-Sorts the vector \fIvecName\fR in increasing order.  If the
-\fB-reverse\fR flag is present, the vector is sorted in decreasing
-order.  If other arguments \fIargName\fR are present, they are the
-names of vectors which will be rearranged in the same manner as
-\fIvecName\fR.  Each vector must be the same length as \fIvecName\fR.
-You could use this to sort the x vector of a graph, while still
-retaining the same x,y coordinate pairs in a y vector.
-.TP
-\fIvecName \fBsplit\fR \fIdstName\fR ?\fIdstName\fR?...
-Split the vector into a multiple vectors.  The resulting 
-N vectors each contain the mod-Nth element from source.
-.TP
-\fIvecName \fBvariable\fR \fIvarName\fR
-Maps a Tcl variable to the vector, creating another means for 
-accessing the vector.  The variable \fIvarName\fR can't already 
-exist. This overrides any current variable mapping the vector
-may have.
-.RE
-.SH C LANGUAGE API
-You can create, modify, and destroy vectors from C code, using 
-library routines.  
-You need to include the header file \fBblt.h\fR. It contains the
-definition of the structure \fBBlt_Vector\fR, which represents the
-vector.  It appears below.
-.CS
-\fRtypedef struct {
-    double *\fIvalueArr\fR; 
-    int \fInumValues\fR;    
-    int \fIarraySize\fR;    
-    double \fImin\fR, \fImax\fR;  
-} \fBBlt_Vector\fR;
-.CE
-The field \fIvalueArr\fR points to memory holding the vector
-components.  The components are stored in a double precision array,
-whose size size is represented by \fIarraySize\fR.  \fINumValues\fR is
-the length of vector.  The size of the array is always equal to or
-larger than the length of the vector.  \fIMin\fR and \fImax\fR are
-minimum and maximum component values.
-.SH LIBRARY ROUTINES
-The following routines are available from C to manage vectors.
-Vectors are identified by the vector name.
-.PP
-\fBBlt_CreateVector\fR 
-.RS .25i
-.TP 1i
-Synopsis:
-.CS 
-int \fBBlt_CreateVector\fR (\fIinterp\fR, \fIvecName\fR, \fIlength\fR, \fIvecPtrPtr\fR)
-.RS 1.25i
-Tcl_Interp *\fIinterp\fR;
-char *\fIvecName\fR;
-int \fIlength\fR;
-Blt_Vector **\fIvecPtrPtr\fR;
-.RE
-.CE
-.TP
-Description:
-Creates a new vector \fIvecName\fR\fR with a length of \fIlength\fR.
-\fBBlt_CreateVector\fR creates both a new Tcl command and array 
-variable \fIvecName\fR.  Neither a command nor variable named 
-\fIvecName\fR can already exist.  A pointer to the vector is 
-placed into \fIvecPtrPtr\fR.
-.TP
-Results:
-Returns \fBTCL_OK\fR if the vector is successfully created.  If
-\fIlength\fR is negative, a Tcl variable or command \fIvecName\fR
-already exists, or memory cannot be allocated for the vector, then
-\fBTCL_ERROR\fR is returned and \fIinterp->result\fR will contain an
-error message.
-.RE
-.sp
-.PP
-\fBBlt_DeleteVectorByName\fR 
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_DeleteVectorByName\fR (\fIinterp\fR, \fIvecName\fR)
-.RS 1.25i
-Tcl_Interp *\fIinterp\fR;
-char *\fIvecName\fR;
-.RE
-.CE
-.TP 1i
-Description:
-Removes the vector \fIvecName\fR.  \fIVecName\fR is the name of a vector
-which must already exist.  Both the Tcl command and array variable
-\fIvecName\fR are destroyed.  All clients of the vector will be notified
-immediately that the vector has been destroyed.
-.TP
-Results:
-Returns \fBTCL_OK\fR if the vector is successfully deleted.  If
-\fIvecName\fR is not the name a vector, then \fBTCL_ERROR\fR is returned
-and \fIinterp->result\fR will contain an error message.
-.RE
-.sp
-.PP
-\fBBlt_DeleteVector\fR 
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_DeleteVector\fR (\fIvecPtr\fR)
-.RS 1.25i
-Blt_Vector *\fIvecPtr\fR;
-.RE
-.CE
-.TP 1i
-Description:
-Removes the vector pointed to by \fIvecPtr\fR.  \fIVecPtr\fR is a
-pointer to a vector, typically set by \fBBlt_GetVector\fR or
-\fBBlt_CreateVector\fR.  Both the Tcl command and array variable of
-the vector are destroyed.  All clients of the vector will be notified
-immediately that the vector has been destroyed.
-.TP
-Results:
-Returns \fBTCL_OK\fR if the vector is successfully deleted.  If
-\fIvecName\fR is not the name a vector, then \fBTCL_ERROR\fR is returned
-and \fIinterp->result\fR will contain an error message.
-.RE
-.sp
-.PP
-\fBBlt_GetVector\fR 
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_GetVector\fR (\fIinterp\fR, \fIvecName\fR, \fIvecPtrPtr\fR)
-.RS 1.25i
-Tcl_Interp *\fIinterp\fR;
-char *\fIvecName\fR;
-Blt_Vector **\fIvecPtrPtr\fR;
-.RE
-.CE
-.TP 1i
-Description:
-Retrieves the vector \fIvecName\fR.  \fIVecName\fR is the name of a
-vector which must already exist.  \fIVecPtrPtr\fR will point be set to
-the address of the vector.
-.TP
-Results:
-Returns \fBTCL_OK\fR if the vector is successfully retrieved.  If
-\fIvecName\fR is not the name of a vector, then \fBTCL_ERROR\fR is
-returned and \fIinterp->result\fR will contain an error message.
-.RE
-.sp
-.PP
-\fBBlt_ResetVector\fR 
-.PP
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_ResetVector\fR (\fIvecPtr\fR, \fIdataArr\fR, 
-       \fInumValues\fR, \fIarraySize\fR, \fIfreeProc\fR)
-.RS 1.25i
-Blt_Vector *\fIvecPtr\fR;
-double *\fIdataArr\fR;
-int *\fInumValues\fR;
-int *\fIarraySize\fR;
-Tcl_FreeProc *\fIfreeProc\fR;
-.RE
-.CE
-.TP
-Description: 
-Resets the components of the vector pointed to by \fIvecPtr\fR.
-Calling \fBBlt_ResetVector\fR will trigger the vector to dispatch
-notifications to its clients. \fIDataArr\fR is the array of doubles
-which represents the vector data. \fINumValues\fR is the number of
-elements in the array. \fIArraySize\fR is the actual size of the array
-(the array may be bigger than the number of values stored in
-it). \fIFreeProc\fP indicates how the storage for the vector component
-array (\fIdataArr\fR) was allocated.  It is used to determine how to
-reallocate memory when the vector is resized or destroyed.  It must be
-\fBTCL_DYNAMIC\fR, \fBTCL_STATIC\fR, \fBTCL_VOLATILE\fR, or a pointer
-to a function to free the memory allocated for the vector array. If
-\fIfreeProc\fR is \fBTCL_VOLATILE\fR, it indicates that \fIdataArr\fR
-must be copied and saved.  If \fIfreeProc\fR is \fBTCL_DYNAMIC\fR, it
-indicates that \fIdataArr\fR was dynamically allocated and that Tcl
-should free \fIdataArr\fR if necessary.  \fBStatic\fR indicates that
-nothing should be done to release storage for \fIdataArr\fR.
-.TP
-Results:
-Returns \fBTCL_OK\fR if the vector is successfully resized.  If
-\fInewSize\fR is negative, a vector \fIvecName\fR does not exist, or
-memory cannot be allocated for the vector, then \fBTCL_ERROR\fR is
-returned and \fIinterp->result\fR will contain an error message.
-.RE
-.sp
-.PP
-\fBBlt_ResizeVector\fR 
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_ResizeVector\fR (\fIvecPtr\fR, \fInewSize\fR)
-.RS 1.25i
-Blt_Vector *\fIvecPtr\fR;
-int \fInewSize\fR;
-.RE
-.CE
-.TP
-Description:
-Resets the length of the vector pointed to by \fIvecPtr\fR to
-\fInewSize\fR.  If \fInewSize\fR is smaller than the current size of
-the vector, it is truncated.  If \fInewSize\fR is greater, the vector
-is extended and the new components are initialized to \fB0.0\fR.
-Calling \fBBlt_ResetVector\fR will trigger the vector to dispatch
-notifications.
-.TP
-Results:
-Returns \fBTCL_OK\fR if the vector is successfully resized.  If
-\fInewSize\fR is negative or memory can not be allocated for the vector, 
-then \fBTCL_ERROR\fR is returned and \fIinterp->result\fR will contain 
-an error message.
-.sp
-.PP
-\fBBlt_VectorExists\fR 
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_VectorExists\fR (\fIinterp\fR, \fIvecName\fR)
-.RS 1.25i
-Tcl_Interp *\fIinterp\fR;
-char *\fIvecName\fR;
-.RE
-.CE
-.TP
-Description:
-Indicates if a vector named \fIvecName\fR exists in \fIinterp\fR.
-.TP
-Results:
-Returns \fB1\fR if a vector \fIvecName\fR exists and \fB0\fR otherwise.
-.RE
-.sp
-.PP
-If your application needs to be notified when a vector changes, it can
-allocate a unique \fIclient identifier\fR for itself.  Using this
-identifier, you can then register a call-back to be made whenever the
-vector is updated or destroyed.  By default, the call-backs are made at
-the next idle point.  This can be changed to occur at the time the
-vector is modified.  An application can allocate more than one
-identifier for any vector.  When the client application is done with
-the vector, it should free the identifier.
-.PP
-The call-back routine must of the following type.
-.CS
-.RS
-.sp
-typedef void (\fBBlt_VectorChangedProc\fR) (Tcl_Interp *\fIinterp\fR, 
-.RS .25i
-ClientData \fIclientData\fR, Blt_VectorNotify \fInotify\fR);
-.RE
-.sp
-.RE
-.CE
-.fi
-\fIClientData\fR is passed to this routine whenever it is called.  You
-can use this to pass information to the call-back.  The \fInotify\fR 
-argument indicates whether the vector has been updated of destroyed. It
-is an enumerated type.
-.CS
-.RS
-.sp
-typedef enum {
-    \fBBLT_VECTOR_NOTIFY_UPDATE\fR=1,
-    \fBBLT_VECTOR_NOTIFY_DESTROY\fR=2
-} \fBBlt_VectorNotify\fR;
-.sp
-.RE
-.CE
-.PP
-\fBBlt_AllocVectorId\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-Blt_VectorId \fBBlt_AllocVectorId\fR (\fIinterp\fR, \fIvecName\fR)
-.RS 1.25i
-Tcl_Interp *\fIinterp\fR;
-char *\fIvecName\fR;
-.RE
-.CE
-.TP
-Description:
-Allocates an client identifier for with the vector \fIvecName\fR.
-This identifier can be used to specify a call-back which is triggered
-when the vector is updated or destroyed.
-.TP
-Results:
-Returns a client identifier if successful.  If \fIvecName\fR is not
-the name of a vector, then \fBNULL\fR is returned and
-\fIinterp->result\fR will contain an error message.
-.RE
-.sp
-.PP
-\fBBlt_GetVectorById\fR 
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-int \fBBlt_GetVector\fR (\fIinterp\fR, \fIclientId\fR, \fIvecPtrPtr\fR)
-.RS 1.25i
-Tcl_Interp *\fIinterp\fR;
-Blt_VectorId \fIclientId\fR;
-Blt_Vector **\fIvecPtrPtr\fR;
-.RE
-.CE
-.TP 1i
-Description:
-Retrieves the vector used by \fIclientId\fR.  \fIClientId\fR is a valid
-vector client identifier allocated by \fBBlt_AllocVectorId\fR.
-\fIVecPtrPtr\fR will point be set to the address of the vector.
-.TP
-Results:
-Returns \fBTCL_OK\fR if the vector is successfully retrieved.  
-.RE
-.sp
-.PP
-\fBBlt_SetVectorChangedProc\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-void \fBBlt_SetVectorChangedProc\fR (\fIclientId\fR, \fIproc\fR, \fIclientData\fR);
-.RS 1.25i
-Blt_VectorId \fIclientId\fR;
-Blt_VectorChangedProc *\fIproc\fR;
-ClientData *\fIclientData\fR;
-.RE
-.CE
-.TP
-Description: 
-Specifies a call-back routine to be called whenever the vector
-associated with \fIclientId\fR is updated or deleted.  \fIProc\fR is a
-pointer to call-back routine and must be of the type
-\fBBlt_VectorChangedProc\fR.  \fIClientData\fR is a one-word value to
-be passed to the routine when it is invoked. If \fIproc\fR is
-\fBNULL\fR, then the client is not notified.
-.TP
-Results:
-The designated call-back procedure will be invoked when the vector is 
-updated or destroyed.
-.RE
-.sp
-.PP
-\fBBlt_FreeVectorId\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-void \fBBlt_FreeVectorId\fR (\fIclientId\fR);
-.RS 1.25i
-Blt_VectorId \fIclientId\fR;
-.RE
-.CE
-.TP
-Description: 
-Frees the client identifier.  Memory allocated for the identifier 
-is released.  The client will no longer be notified when the
-vector is modified.
-.TP
-Results:
-The designated call-back procedure will be no longer be invoked when
-the vector is updated or destroyed.
-.RE
-.sp
-.PP
-\fBBlt_NameOfVectorId\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-char *\fBBlt_NameOfVectorId\fR (\fIclientId\fR);
-.RS 1.25i
-Blt_VectorId \fIclientId\fR;
-.RE
-.CE
-.TP
-Description: 
-Retrieves the name of the vector associated with the client identifier
-\fIclientId\fR.  
-.TP
-Results:
-Returns the name of the vector associated with \fIclientId\fR.  If
-\fIclientId\fR is not an identifier or the vector has been destroyed, 
-\fBNULL\fR is returned.
-.RE
-.sp
-.PP
-\fBBlt_InstallIndexProc\fR
-.RS .25i
-.TP 1i
-Synopsis:
-.CS
-void \fBBlt_InstallIndexProc\fR (\fIindexName\fR, \fIprocPtr\fR)
-.RS 1.25i
-char *\fIindexName\fR;
-Blt_VectorIndexProc *\fIprocPtr\fR;
-.RE
-.CE
-.TP
-Description: 
-Registers a function to be called to retrieved the index \fIindexName\fR
-from the vector's array variable.  
-.sp
-typedef double Blt_VectorIndexProc(Vector *vecPtr);
-.sp
-The function will be passed a pointer to the vector.  The function must
-return a double representing the value at the index.
-.TP
-Results:
-The new index is installed into the vector.
-.RE
-.RE
-.SH C API EXAMPLE
-The following example opens a file of binary data and stores it in an
-array of doubles. The array size is computed from the size of the
-file. If the vector "data" exists, calling \fBBlt_VectorExists\fR,
-\fBBlt_GetVector\fR is called to get the pointer to the vector.
-Otherwise the routine \fBBlt_CreateVector\fR is called to create a new
-vector and returns a pointer to it. Just like the Tcl interface, both
-a new Tcl command and array variable are created when a new vector is
-created. It doesn't make any difference what the initial size of the
-vector is since it will be reset shortly. The vector is updated when
-\fBlt_ResetVector\fR is called.  Blt_ResetVector makes the changes
-visible to the Tcl interface and other vector clients (such as a graph
-widget).
-.sp
-.CS
-#include <tcl.h>
-#include <blt.h>                               
-...
-Blt_Vector *vecPtr;
-double *newArr;
-FILE *f;
-struct stat statBuf;
-int numBytes, numValues;
-
-f = fopen("binary.dat", "r");
-fstat(fileno(f), &statBuf);
-numBytes = (int)statBuf.st_size;
-
-/* Allocate an array big enough to hold all the data */
-newArr = (double *)malloc(numBytes);
-numValues = numBytes / sizeof(double);
-fread((void *)newArr, numValues, sizeof(double), f);
-fclose(f);
-
-if (Blt_VectorExists(interp, "data"))  {
-    if (Blt_GetVector(interp, "data", &vecPtr) != TCL_OK) {
-       return TCL_ERROR;
-    }
-} else {
-   if (Blt_CreateVector(interp, "data", 0, &vecPtr) != TCL_OK) {
-       return TCL_ERROR;
-   }
-}
-/* 
- * Reset the vector. Clients will be notified when Tk is idle. 
- * TCL_DYNAMIC tells the vector to free the memory allocated 
- * if it needs to reallocate or destroy the vector.
- */
-if (Blt_ResetVector(vecPtr, newArr, numValues, numValues, 
-       TCL_DYNAMIC) != TCL_OK) {
-    return TCL_ERROR;
-}
-.CE
-.SH "INCOMPATIBILITIES"
-In previous versions, if the array variable isn't global 
-(i.e. local to a Tcl procedure), the vector is automatically 
-destroyed when the procedure returns.
-.CS
-proc doit {} {
-    # Temporary vector x
-    vector x(10)
-    set x(9) 2.0
-      ...
-}
-.CE
-.PP
-This has changed.  Variables are not automatically destroyed when
-their variable is unset.  You can restore the old behavior by
-setting the "-watchunset" switch.
-.CE
-.SH KEYWORDS
-vector, graph, widget