1 |
dashley |
5 |
%$Header: /home/dashley/cvsrep/e3ft_gpl01/e3ft_gpl01/dtaipubs/esrgubka/c_tin0/c_tin0.tex,v 1.6 2003/11/03 02:14:24 dtashley Exp $
|
2 |
|
|
|
3 |
|
|
\chapter[\ctinzeroshorttitle{}]{\ctinzerolongtitle{}}
|
4 |
|
|
|
5 |
|
|
\label{ctin0}
|
6 |
|
|
|
7 |
|
|
\index{Hobbs, Jeffrey}
|
8 |
|
|
\beginchapterquote{``I may seem more arrogant, but I think that's just because
|
9 |
|
|
you didn't realize how arrogant I was before.''}
|
10 |
|
|
{Jeffrey Hobbs \cite{bibref:i:jeffreyhobbs}, Tcl Ambassador, Ajuba Solutions}
|
11 |
|
|
|
12 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
13 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
14 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
15 |
|
|
|
16 |
|
|
%Section Tag: INT
|
17 |
|
|
\section{Overview Of The Iju Tool Set}
|
18 |
|
|
\index{IjuTools}\index{Iju!tool set}
|
19 |
|
|
The \emph{Iju}\footnote{The name \emph{Iju} is an acronym for
|
20 |
|
|
``\emph{I}t's \emph{J}ust \emph{U}s'', and has its origins in
|
21 |
|
|
a dilbertesque conversation between disgruntled engineers
|
22 |
|
|
in a large company years ago where it
|
23 |
|
|
was stated that we felt \emph{it's just us} who understood
|
24 |
|
|
the nature of certain product problems.} tool set (or \emph{IjuTools} for short)
|
25 |
|
|
is a collection of utilities and research tools which are
|
26 |
|
|
useful for small microcontroller work. At this time, the current version of
|
27 |
|
|
IjuTools is v1.05.
|
28 |
|
|
|
29 |
|
|
As of v1.05, IjuTools consists of [only] the following components.
|
30 |
|
|
|
31 |
|
|
\begin{itemize}
|
32 |
|
|
\item \emph{IjuScripter}, a statically linked\footnote{By \emph{statically linked}
|
33 |
|
|
I mean that a monolithic executable which is complete and requires no
|
34 |
|
|
DLLs is provided.} version of Tclsh, with extensions.
|
35 |
|
|
|
36 |
|
|
\item \emph{IjuConsole}, a statically linked version of Wish, with extensions.
|
37 |
|
|
|
38 |
|
|
\item A set of DOS command-line utilities. In many cases, these utilities
|
39 |
|
|
perform functions similar to the Tcl/Tk extensions incorporated into
|
40 |
|
|
IjuScripter/IjuConsole.
|
41 |
|
|
\item Supplemental example scripts, technical papers, books, and URLs.\footnote{As
|
42 |
|
|
of v1.03, just a few, but I hope the list will grow.}
|
43 |
|
|
\end{itemize}
|
44 |
|
|
|
45 |
|
|
IjuTools is built around Tcl/Tk 8.3.1.\index{Tcl}\index{Tk}
|
46 |
|
|
Tcl is a scripting language from
|
47 |
|
|
Scriptics\index{Scriptics} (now Interwoven).\index{Interwoven}
|
48 |
|
|
At the present time,
|
49 |
|
|
all components of the tool set are implemented
|
50 |
|
|
as Tcl extensions, so that they can be executed interactively or as part of
|
51 |
|
|
a script. The scripted nature of the tool set gives users the ability to
|
52 |
|
|
use the tool set components together in arbitrary ways.
|
53 |
|
|
|
54 |
|
|
Although IjuTools is slanted towards microcontroller software development,
|
55 |
|
|
it is a good general automation solution (in the same sense that
|
56 |
|
|
Tcl and Tk are), and it can be used for other endeavors. (In fact,
|
57 |
|
|
the generation of this book is automated using IjuConsole.)
|
58 |
|
|
|
59 |
|
|
At the present time, \emph{The Iju Tool Set} (including this
|
60 |
|
|
book) is maintained
|
61 |
|
|
at the site \texttt{http://ijutools.sourceforge.net} as an
|
62 |
|
|
open-source product. All source code may be freely downloaded.
|
63 |
|
|
In the future, in order to recoup some of the cost of producing
|
64 |
|
|
the tool set, some of the convenient distributions (packaged installations,
|
65 |
|
|
printed materials, and media) may be sold
|
66 |
|
|
for a small fee. However, all of the source code will remain
|
67 |
|
|
public and free.
|
68 |
|
|
|
69 |
|
|
|
70 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
71 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
72 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
73 |
|
|
%Design Goals Of IjuTools
|
74 |
|
|
%Section tag: DGI
|
75 |
|
|
\section{IjuTools Design Goals}
|
76 |
|
|
The design goals of IjuTools are enumerated below.
|
77 |
|
|
Each goal is discussed in more detail later.
|
78 |
|
|
|
79 |
|
|
\begin{itemize}
|
80 |
|
|
|
81 |
|
|
\item \textbf{Stability, Repeatability, And Lack Of Intermittent Behavior:}
|
82 |
|
|
because the tool set will be used to produce ROM images, it must be very reliable.
|
83 |
|
|
|
84 |
|
|
\item \textbf{Extensibility:}
|
85 |
|
|
it must be straightforward to extend the capabilities of the tool set.
|
86 |
|
|
|
87 |
|
|
\item \textbf{Cross-Platform Capability:}
|
88 |
|
|
the tool set should have a migration path to platforms other than Microsoft
|
89 |
|
|
Windows.
|
90 |
|
|
|
91 |
|
|
\item \textbf{Utility:}
|
92 |
|
|
the tool set should be genuinely useful.
|
93 |
|
|
|
94 |
|
|
\end{itemize}
|
95 |
|
|
|
96 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
97 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
98 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
99 |
|
|
\subsection{Stability, Repeatability, And Lack Of Intermittent Behavior}
|
100 |
|
|
|
101 |
|
|
\emph{Microsoft Windows}\index{Windows}\index{Microsoft Windows}\index{Microsoft!Windows}
|
102 |
|
|
is surely the most despised computing
|
103 |
|
|
platform in the world. The complaints include
|
104 |
|
|
lack of stability, incomplete uninstallation of
|
105 |
|
|
applications, and unintended interactions between
|
106 |
|
|
applications. Web servers,\index{web server}\index{HTTP server}
|
107 |
|
|
file servers,\index{file server} and mail\index{mail server}
|
108 |
|
|
servers are often hosted under Unix\index{Unix} or Linux\index{Linux}
|
109 |
|
|
rather than a Microsoft product because
|
110 |
|
|
the MTBF for Windows is typically hundreds of hours, whereas the the MTBF
|
111 |
|
|
for Unix or Linux is typically hundreds of days. However, most microcontroller
|
112 |
|
|
software development is done on Windows platforms.
|
113 |
|
|
|
114 |
|
|
Defects in Windows are unlikely to result
|
115 |
|
|
in the corruption of a ROM image or in incorrect data (human error is
|
116 |
|
|
a more likely cause). However, to minimize the possibility of human error and
|
117 |
|
|
unforeseen interactions between applications, IjuTools possesses the following design
|
118 |
|
|
characteristics.
|
119 |
|
|
|
120 |
|
|
\begin{itemize}
|
121 |
|
|
|
122 |
|
|
\item \textbf{DLLs and the Windows registry are not used.}
|
123 |
|
|
Each component of \emph{The Iju Tool Set} is a monolithic
|
124 |
|
|
executable image (an .EXE file). This makes it impossible
|
125 |
|
|
to mismatch an application
|
126 |
|
|
with the DLLs it requires. Additionally, the Windows registry,
|
127 |
|
|
which may cause differences in behavior from machine to machine,
|
128 |
|
|
is not used. Although the IjuTools installation installs executable
|
129 |
|
|
files in specific directories, any of these executable files may be copied
|
130 |
|
|
or moved to other locations or to other machines (without an installation process),
|
131 |
|
|
because the executable files are standalone and have no DLL or registry
|
132 |
|
|
dependencies.
|
133 |
|
|
|
134 |
|
|
\item \textbf{Executable files are internally versioned.}
|
135 |
|
|
IjuTools version numbers are never re-used, and each executable component
|
136 |
|
|
of the tool set ``knows'' its version number. IjuScripter and IjuConsole
|
137 |
|
|
contain embedded commands to allow a script to determine the version number of
|
138 |
|
|
the executable. Thus, it is possible to author scripts that will only run
|
139 |
|
|
with a specific version of IjuScripter or IjuConsole.
|
140 |
|
|
|
141 |
|
|
\end{itemize}
|
142 |
|
|
|
143 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
144 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
145 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
146 |
|
|
\subsection{Extensibility}
|
147 |
|
|
|
148 |
|
|
The two core components of IjuTools (IjuScripter and IjuConsole) are extensible in the
|
149 |
|
|
sense that additional commands can be added to the language understood by the tools.
|
150 |
|
|
Because of the way in which Tcl treats strings (they can be of arbitrary length), the output
|
151 |
|
|
of a built-in command can be easily retained in RAM (for further processing by other
|
152 |
|
|
commands) or placed in a file (as output).
|
153 |
|
|
Thus, if parsing or file transformation is involved, it is easy to make the claim that
|
154 |
|
|
IjuTools is ``arbitrarily extensible'' because commands can be added arbitrarily to IjuScripter
|
155 |
|
|
and IjuConsole..
|
156 |
|
|
|
157 |
|
|
For microcontroller work, this type of extensibility is probably adequate.
|
158 |
|
|
|
159 |
|
|
However, no framework has yet been developed to encompass the integration of
|
160 |
|
|
GUI applications or additional executables into IjuTools. I welcome suggestions
|
161 |
|
|
in this area.
|
162 |
|
|
|
163 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
164 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
165 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
166 |
|
|
\subsection{Cross-Platform Capability}
|
167 |
|
|
|
168 |
|
|
Windows is presently the dominant platform for microcontroller software
|
169 |
|
|
development. However, it is easy to envision scenarios in which Linux or Unix become
|
170 |
|
|
popular platforms for certain types of development.
|
171 |
|
|
|
172 |
|
|
Tcl/Tk inherently runs on Windows, Linux, Unix, and Solaris platforms.
|
173 |
|
|
(I'm sure that designing one set of source code that fits all of these
|
174 |
|
|
platforms has caused Scriptics substantial technical anguish, but they
|
175 |
|
|
were successful in this.) To ensure that IjuScripter and IjuConsole are
|
176 |
|
|
portable to these other platforms if necessary, the following steps
|
177 |
|
|
are planned.
|
178 |
|
|
|
179 |
|
|
\begin{itemize}
|
180 |
|
|
|
181 |
|
|
\item All changes to the Tcl/Tk 8.3.1 core (the changes will be bug fixes
|
182 |
|
|
only) will be logged so that they can be
|
183 |
|
|
reproduced if IjuTools is ported to another platform using
|
184 |
|
|
the original Scriptics 8.3.1 code as the starting
|
185 |
|
|
point.\footnote{As the Tcl 8.3.1 core is maintained,
|
186 |
|
|
to clean up the Windows source code and enhance clarity, it is natural
|
187 |
|
|
to eliminate blocks of code that are preprocessed out and do not
|
188 |
|
|
enter the compile stream for a Windows build. This type of maintenance
|
189 |
|
|
will make it impossible to compile the code for any other platform,
|
190 |
|
|
and hence the original Scriptics code would be necessary as a starting
|
191 |
|
|
point.}
|
192 |
|
|
|
193 |
|
|
\item Extensions will follow coding standards to minimize platform dependencies
|
194 |
|
|
and enhance portability
|
195 |
|
|
(sizes of ordinal data sizes, use of floating-point arithmetic, etc.).
|
196 |
|
|
|
197 |
|
|
\item Extensions will not make use of the Win32 API or standard library
|
198 |
|
|
calls---instead, they will interact only with the Tcl/Tk core.
|
199 |
|
|
|
200 |
|
|
\end{itemize}
|
201 |
|
|
|
202 |
|
|
|
203 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
204 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
205 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
206 |
|
|
\subsection{Utility}
|
207 |
|
|
|
208 |
|
|
In the assembly of IjuTools and supporting materials, I hope and believe
|
209 |
|
|
I've met the goal of providing something genuinely useful for microcontroller
|
210 |
|
|
software developers. I've listed below the characteristics of the tool set
|
211 |
|
|
which I feel most enhance its usefulness.
|
212 |
|
|
|
213 |
|
|
\begin{itemize}
|
214 |
|
|
\item \textbf{The tools can be used interactively as well as from a script.}
|
215 |
|
|
Because Tcl commands can be used
|
216 |
|
|
both interactively and from
|
217 |
|
|
a script, IjuScripter and IjuConsole are useful for interactive
|
218 |
|
|
tasks (file conversions, impromptu calculations). For example,
|
219 |
|
|
with no calculator handy, \texttt{expr sqrt(5)} can be used
|
220 |
|
|
interactively in IjuScripter or IjuConsole to obtain $\sqrt{5}$.
|
221 |
|
|
\item \textbf{The tools are suitable for orchestrating microcontroller
|
222 |
|
|
software builds.} Microcontroller software builds tend to be
|
223 |
|
|
awkward, complex, and to involve many steps---utilities such as
|
224 |
|
|
\texttt{MAKE} fall short in their ability to support
|
225 |
|
|
such builds. The Tcl scripting language
|
226 |
|
|
is rich enough to allow the automation of these kinds of software builds.
|
227 |
|
|
\item \textbf{The tools can be used as a general automation utility.}
|
228 |
|
|
The static executables provided can be used
|
229 |
|
|
to automate common office tasks; such as
|
230 |
|
|
removing all files last modified prior to a certain date,
|
231 |
|
|
or searching your boss' computer for information
|
232 |
|
|
about your colleagues' salaries while your boss is away at lunch.
|
233 |
|
|
\item \textbf{The full source code for the tools is available.} The full
|
234 |
|
|
source code for the tools is available at
|
235 |
|
|
\texttt{http://ijutools.sourceforge.net}.
|
236 |
|
|
The source code can be useful in several ways.
|
237 |
|
|
\begin{itemize}
|
238 |
|
|
\item The source code contains all project files for the GUI version
|
239 |
|
|
of Microsoft Visual C++. It can be used as a quick way to get
|
240 |
|
|
a Tcl/Tk GUI build for Windows up and going.\footnote{Two notes on this
|
241 |
|
|
\ldots{} First, the base source code is available from Scriptics
|
242 |
|
|
for free, but as of this writing, Scriptics does not support
|
243 |
|
|
a GUI build (instead, they provide a MAKE file). The port to
|
244 |
|
|
the GUI interface is not wholly straightforward and requires
|
245 |
|
|
some effort. Second,
|
246 |
|
|
Tcl/Tk version 8.3.1 is old and getting older (but the new
|
247 |
|
|
features added in subsequent versions don't make them any more
|
248 |
|
|
useful for microcontroller work).}
|
249 |
|
|
\item The source code can be used as the basis for another product.
|
250 |
|
|
\item The source code for Tcl extensions can be harvested for other
|
251 |
|
|
purposes. For example, functions to calculate the CRC32
|
252 |
|
|
are included to support the
|
253 |
|
|
Tcl/Tk extensions. This code could be harvested for other
|
254 |
|
|
uses.
|
255 |
|
|
\end{itemize}
|
256 |
|
|
\item \textbf{The IjuTools distribution contains useful materials not available
|
257 |
|
|
anywhere else.} The technical papers and supplemental materials included
|
258 |
|
|
are genuinely useful for microcontroller software work.
|
259 |
|
|
\end{itemize}
|
260 |
|
|
|
261 |
|
|
Overall, I hope I've met the aim of assembling and distributing something which is
|
262 |
|
|
genuinely \emph{useful}.
|
263 |
|
|
|
264 |
|
|
|
265 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
266 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
267 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
268 |
|
|
%Section Tag: EPL
|
269 |
|
|
\section{IjuTools Expansion And Development Plans}
|
270 |
|
|
|
271 |
|
|
Future development of the Iju tool set will focus [only] in the following directions.
|
272 |
|
|
|
273 |
|
|
\begin{itemize}
|
274 |
|
|
\item \textbf{Removal of any existing Tcl/Tk 8.3.1 bugs.} This is the very
|
275 |
|
|
highest priority, as any such bugs threaten the usability or
|
276 |
|
|
logical integrity of the tool.
|
277 |
|
|
\item \textbf{Development and co-development of new extensions useful in
|
278 |
|
|
microcontroller work.} Any suggestions that I receive for
|
279 |
|
|
extensions will be placed on my Web page, and I will attack them as
|
280 |
|
|
time and expertise permit. I also welcome co-development opportunities,
|
281 |
|
|
where other parties develop the extensions and I act in a review and
|
282 |
|
|
integration capacity.
|
283 |
|
|
\item \textbf{Acquisition of additional software useful in microcontroller work.}
|
284 |
|
|
I welcome contributions in this area, as well.
|
285 |
|
|
\item \textbf{Acquisition of additional books, technical papers, books, web links, and
|
286 |
|
|
other materials.} I welcome contributions in all of these areas. (Please keep in
|
287 |
|
|
mind that in order for me to distribute any contributed material with the Iju
|
288 |
|
|
tool set, I must have a letter of permission from the copyright holder.)
|
289 |
|
|
\end{itemize}
|
290 |
|
|
|
291 |
|
|
One direction that it won't be possible to go with the Iju tool set is enhancement of
|
292 |
|
|
the Tcl/Tk 8.3.1 core. The Tcl/Tk core is its own complexity, and I'd like to confine
|
293 |
|
|
any efforts there to correction of existing defects and neatening of the set
|
294 |
|
|
of source files.
|
295 |
|
|
|
296 |
|
|
|
297 |
|
|
|
298 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
299 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
300 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
301 |
|
|
\section{Common Parameter Formats}
|
302 |
|
|
%Section tag: CCL0
|
303 |
|
|
\label{ctin0:sccl0}
|
304 |
|
|
|
305 |
|
|
\emph{The Iju Tool Set} consists of the following components:
|
306 |
|
|
|
307 |
|
|
\begin{itemize}
|
308 |
|
|
\item The core of \emph{Tclsh} and \emph{Wish} (the \emph{Tcl}
|
309 |
|
|
language with \emph{Tk} graphic extensions).
|
310 |
|
|
|
311 |
|
|
\item Extensions to the language, added for utility in microcontroller
|
312 |
|
|
work or for research purposes.
|
313 |
|
|
|
314 |
|
|
\item A set of DOS command-line utilities.
|
315 |
|
|
\end{itemize}
|
316 |
|
|
|
317 |
|
|
Each of these components makes heavy use of strings. Since Tcl/Tk is
|
318 |
|
|
string-based (really, this is the \emph{only} Tcl data type), it is natural
|
319 |
|
|
to think of each Tcl/Tk command as accepting string arguments. Many of the
|
320 |
|
|
DOS command-line utilities accept arguments on the command-line which are
|
321 |
|
|
in exactly the same form as required by a Tcl/Tk extension, and hence
|
322 |
|
|
it is also useful to think of the DOS command-line utilities as
|
323 |
|
|
accepting string arguments. For this reason, all string parameter types
|
324 |
|
|
are documented together in this section.
|
325 |
|
|
|
326 |
|
|
When using Tcl/Tk extensions, the author of the Tcl/Tk script
|
327 |
|
|
has complete control over how strings are passed to the extension.
|
328 |
|
|
However, when using the DOS command-line utilities,
|
329 |
|
|
the DOS/Windows command-line
|
330 |
|
|
interpreter breaks the command-line into parameters based on the
|
331 |
|
|
occurence of whitespace (spaces and tabs) on the command line. These
|
332 |
|
|
parameters are passed to the utility itself as an array of strings.
|
333 |
|
|
It is possible to cause the command-line interpreter to pass parameters
|
334 |
|
|
containing whitespace by quoting the parameter. All of the IjuTools
|
335 |
|
|
command-line utilites will work correctly with whitespace embedded in
|
336 |
|
|
parameters if it is appropriate for the context (for example, whitespace
|
337 |
|
|
may be appropriate in a path name but not appropriate within an integer).
|
338 |
|
|
|
339 |
|
|
In this section, each different type of parameter is given a symbolic
|
340 |
|
|
tag (\texttt{urn}, for example). This symbolic tag is used in the description
|
341 |
|
|
of Tcl extensions and DOS utilities to denote parameters. In some cases,
|
342 |
|
|
additional descriptive information is concatenated to the symbolic
|
343 |
|
|
tag (\texttt{divisor\_urn} or \texttt{urn\_divisor}, for example) to
|
344 |
|
|
indicate the role the parameter fills.
|
345 |
|
|
|
346 |
|
|
|
347 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
348 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
349 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
350 |
|
|
\subsection{\texttt{winfname} Parameter Format}
|
351 |
|
|
%Section Tag: WNF0
|
352 |
|
|
\label{ctin0:sccl0:swnf0}
|
353 |
|
|
|
354 |
|
|
\index{winfname@\texttt{winfname}}
|
355 |
|
|
\texttt{winfname} is used to indicate a file whose name is used only through
|
356 |
|
|
the Windows operating system (i.e. to open a file, read from a file, etc.). File
|
357 |
|
|
names are ultimately arbitrated by the underlying operating system, which
|
358 |
|
|
in the case of any of \emph{The Iju Tool Set} components will always be a variant
|
359 |
|
|
of Microsoft Windows.
|
360 |
|
|
A parameter of type \texttt{winfname} may be any file name which Windows
|
361 |
|
|
will accept.
|
362 |
|
|
|
363 |
|
|
Note in parameters of type \texttt{winfname} that backslashes (`$\backslash$')
|
364 |
|
|
must normally be used in paths rather than forward slashes
|
365 |
|
|
(`/').\footnote{Note that this is different than the path conventions in Tcl
|
366 |
|
|
scripts. The reason for this is that Tcl seeks to be operating system
|
367 |
|
|
independent, so that the path separator is standardized to be the
|
368 |
|
|
forward slash.}
|
369 |
|
|
|
370 |
|
|
|
371 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
372 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
373 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
374 |
|
|
\subsection{\texttt{tclfname} Parameter Format}
|
375 |
|
|
%Section Tag: TCF0
|
376 |
|
|
\label{ctin0:sccl0:stcf0}
|
377 |
|
|
|
378 |
|
|
\index{tclfname@\texttt{tclfname}}
|
379 |
|
|
\texttt{tclfname} is used to indicate a file name as specified within a Tcl
|
380 |
|
|
script. This is normally the same as a Windows file name, except that
|
381 |
|
|
the forward slash rather than the backslash is used as the path separator.
|
382 |
|
|
|
383 |
|
|
|
384 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
385 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
386 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
387 |
|
|
\subsection{\texttt{winfpath} Parameter Format}
|
388 |
|
|
%Section Tag: WFP0
|
389 |
|
|
\label{ctin0:sccl0:swfp0}
|
390 |
|
|
|
391 |
|
|
\index{winfpath@\texttt{winfpath}}
|
392 |
|
|
\texttt{winfpath} is used to indicate a directory path in a format
|
393 |
|
|
acceptable to Microsoft Windows. This means that the path
|
394 |
|
|
separator is the backslash rather than the forward slash. In nearly all
|
395 |
|
|
cases the the path name may be specified with or without a trailing backslash.
|
396 |
|
|
|
397 |
|
|
|
398 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
399 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
400 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
401 |
|
|
\subsection{\texttt{tclfpath} Parameter Format}
|
402 |
|
|
%Section Tag: TCF1
|
403 |
|
|
\label{ctin0:sccl0:stcf1}
|
404 |
|
|
|
405 |
|
|
\index{tclfpath@\texttt{tclfpath}}
|
406 |
|
|
\texttt{tclfpath} is used to indicate a directory path in a format
|
407 |
|
|
acceptable inside a Tcl script. This means that the path
|
408 |
|
|
separator is the forward slash rather than the backslash.
|
409 |
|
|
In nearly all cases the path name may be specified with or without
|
410 |
|
|
a trailing forward slash.
|
411 |
|
|
|
412 |
|
|
|
413 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
414 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
415 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
416 |
|
|
\subsection{\texttt{uint} Parameter Format}
|
417 |
|
|
%Section Tag: UIN0
|
418 |
|
|
\label{ctin0:sccl0:suin0}
|
419 |
|
|
|
420 |
|
|
\index{uint@\texttt{uint}}
|
421 |
|
|
\texttt{uint} is used to indicate an arbitrarily large unsigned integer
|
422 |
|
|
(\emph{unsigned} means non-negative). The following formats are accepted:
|
423 |
|
|
|
424 |
|
|
\begin{itemize}
|
425 |
|
|
\item \emph{A string of digits.} Examples: ``0'', ``342'', ``4912947'', etc.
|
426 |
|
|
Note in this format that the only acceptable representation of
|
427 |
|
|
zero is ``0'' (``00'' will not be accepted).
|
428 |
|
|
\item \emph{A string of digits with commas.} Examples: ``0'',
|
429 |
|
|
``342'', ``4,921''. Note that if \emph{any} commas occur
|
430 |
|
|
in the string of digits, \emph{every} comma must be
|
431 |
|
|
properly placed. For example, ``49,241,34'' will not be accepted
|
432 |
|
|
as an integer. In this format, the only acceptable representation
|
433 |
|
|
of zero is ``0''.
|
434 |
|
|
\item \emph{An integer expressed as a number in scientific notation.}
|
435 |
|
|
``3.14e2'' will be accepted as the integer ``314''. Numbers in
|
436 |
|
|
scientific notation that do not evaluate to integers, such
|
437 |
|
|
as ``3.12e1'', will not be accepted.
|
438 |
|
|
\end{itemize}
|
439 |
|
|
|
440 |
|
|
|
441 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
442 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
443 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
444 |
|
|
\subsection{\texttt{sint} Parameter Format}
|
445 |
|
|
%Section Tag: SIN0
|
446 |
|
|
\label{ctin0:sccl0:ssin0}
|
447 |
|
|
|
448 |
|
|
\index{sint@\texttt{sint}}
|
449 |
|
|
\texttt{sint} is used to indicate a signed integer
|
450 |
|
|
of arbitrary magnitude. (By \emph{signed} we mean
|
451 |
|
|
that the integer may be negative, zero, or positive.)
|
452 |
|
|
|
453 |
|
|
Any format described for the \emph{uint} parameter format
|
454 |
|
|
in Section \ref{ctin0:sccl0:suin0} (immediately above)
|
455 |
|
|
will be accepted, with the relaxation that a minus sign
|
456 |
|
|
(`-') may be included in front of the integer. As described
|
457 |
|
|
above, the integer zero may have only one `0' digit.
|
458 |
|
|
Additionally, the parsing strategies have been relaxed to
|
459 |
|
|
allow zero to be negated, i.e. ``-0'' is allowed (but
|
460 |
|
|
``-00'' is not). \footnote{This parsing relaxation was made to allow for the
|
461 |
|
|
possibility that some software may output negative numbers
|
462 |
|
|
close to zero in forms such as ``-0.000e+000''. The
|
463 |
|
|
permissiveness in the parsing was deliberate.}
|
464 |
|
|
|
465 |
|
|
|
466 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
467 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
468 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
469 |
|
|
\subsection{The \texttt{uint8}, \texttt{uint16},
|
470 |
|
|
\texttt{uint24},
|
471 |
|
|
\texttt{uint32}, \texttt{uint64}, And
|
472 |
|
|
\texttt{uint128} Parameter Formats}
|
473 |
|
|
%Section Tag: UIG0
|
474 |
|
|
\label{ctin0:sccl0:suig0}
|
475 |
|
|
|
476 |
|
|
\index{uint8@\texttt{uint8}}
|
477 |
|
|
\index{uint16@\texttt{uint16}}
|
478 |
|
|
\index{uint24@\texttt{uint24}}
|
479 |
|
|
\index{uint32@\texttt{uint32}}
|
480 |
|
|
\index{uint64@\texttt{uint64}}
|
481 |
|
|
\index{uint128@\texttt{uint128}}
|
482 |
|
|
The \texttt{uint8}, \texttt{uint16},
|
483 |
|
|
\texttt{uint32}, \texttt{uint64}, and
|
484 |
|
|
\texttt{uint128} are unsigned integers with the
|
485 |
|
|
number of bits implied by the name. Such integers
|
486 |
|
|
may assume values from 0 through $2^{N} - 1$,
|
487 |
|
|
where $N$ is the number of bits.
|
488 |
|
|
|
489 |
|
|
For example, a \texttt{uint8} may assume values from
|
490 |
|
|
0 through 255.
|
491 |
|
|
|
492 |
|
|
|
493 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
494 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
495 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
496 |
|
|
\subsection{The \texttt{sint8}, \texttt{sint16},
|
497 |
|
|
\texttt{sint24},
|
498 |
|
|
\texttt{sint32}, \texttt{sint64}, And
|
499 |
|
|
\texttt{sint128} Parameter Formats}
|
500 |
|
|
%Section Tag: SIG0
|
501 |
|
|
\label{ctin0:sccl0:ssig0}
|
502 |
|
|
|
503 |
|
|
\index{sint8@\texttt{sint8}}
|
504 |
|
|
\index{sint16@\texttt{sint16}}
|
505 |
|
|
\index{sint24@\texttt{sint24}}
|
506 |
|
|
\index{sint32@\texttt{sint32}}
|
507 |
|
|
\index{sint64@\texttt{sint64}}
|
508 |
|
|
\index{sint128@\texttt{sint128}}
|
509 |
|
|
The \texttt{sint8}, \texttt{sint16},
|
510 |
|
|
\texttt{sint32}, \texttt{sint64}, and
|
511 |
|
|
\texttt{sint128} are signed integers with the
|
512 |
|
|
number of bits implied by the name. Such integers
|
513 |
|
|
may assume values from $-2^{N-1}$ through $2^{N-1} - 1$,
|
514 |
|
|
where $N$ is the number of bits.
|
515 |
|
|
|
516 |
|
|
For example, a \texttt{sint8} may assume values from
|
517 |
|
|
-128 through 127.
|
518 |
|
|
|
519 |
|
|
|
520 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
521 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
522 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
523 |
|
|
\subsection{The \texttt{rint8}, \texttt{rint16}, \texttt{rint24},
|
524 |
|
|
\texttt{rint32}, \texttt{rint64}, And
|
525 |
|
|
\texttt{rint128} Parameter Formats}
|
526 |
|
|
%Section Tag: RIG0
|
527 |
|
|
\label{ctin0:sccl0:srig0}
|
528 |
|
|
|
529 |
|
|
\index{rint8@\texttt{rint8}}
|
530 |
|
|
\index{rint16@\texttt{rint16}}
|
531 |
|
|
\index{rint24@\texttt{rint24}}
|
532 |
|
|
\index{rint32@\texttt{rint32}}
|
533 |
|
|
\index{rint64@\texttt{rint64}}
|
534 |
|
|
\index{rint128@\texttt{rint128}}
|
535 |
|
|
The \texttt{rint8}, \texttt{rint16},
|
536 |
|
|
\texttt{rint32}, \texttt{rint64}, and
|
537 |
|
|
\texttt{rint128} are unsigned (i.e. non-negative)
|
538 |
|
|
integers which do not exceed the maximum positive
|
539 |
|
|
value that a signed integer of the same size could
|
540 |
|
|
attain. Such integers may assume values from 0
|
541 |
|
|
through $2^{N-1} - 1$,
|
542 |
|
|
where $N$ is the number of bits.
|
543 |
|
|
|
544 |
|
|
For example, a \texttt{rint8} may assume values from
|
545 |
|
|
0 through 127.
|
546 |
|
|
|
547 |
|
|
|
548 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
549 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
550 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
551 |
|
|
\subsection{The \texttt{urn} Parameter Formats}
|
552 |
|
|
%Section Tag: URN0
|
553 |
|
|
\label{ctin0:sccl0:surn0}
|
554 |
|
|
|
555 |
|
|
\index{urn@\texttt{urn}}
|
556 |
|
|
The \texttt{urn} parameter type is a non-negative rational number with
|
557 |
|
|
non-negative integer components of arbitrary magnitude.
|
558 |
|
|
There are two ways to specify such a rational
|
559 |
|
|
number.
|
560 |
|
|
|
561 |
|
|
\begin{enumerate}
|
562 |
|
|
\item \emph{Integer components, separated by a forward slash.}
|
563 |
|
|
``1/3'', ``0/49'', and ``36/1e31'' are acceptable. A denominator
|
564 |
|
|
of zero is not allowed.
|
565 |
|
|
\item \emph{A number in scientific notation.} The general accepted
|
566 |
|
|
form is
|
567 |
|
|
|
568 |
|
|
\texttt{[digs|digs.|.digs|digs.digs][e|E[[+|-]digs]]},
|
569 |
|
|
|
570 |
|
|
where \texttt{digs} represents a series of digits and the
|
571 |
|
|
vertical bar (`\texttt{|}') separates a string of parameters,
|
572 |
|
|
only one of which is allowed to appear. Numbers of this
|
573 |
|
|
type are always rational and will be converted to a rational
|
574 |
|
|
number for calculation. A unary `+' before the mantissa is allowed.
|
575 |
|
|
\end{enumerate}
|
576 |
|
|
|
577 |
|
|
|
578 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
579 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
580 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
581 |
|
|
\subsection{The \texttt{srn} Parameter Formats}
|
582 |
|
|
%Section Tag: SRN0
|
583 |
|
|
\label{ctin0:sccl0:ssrn0}
|
584 |
|
|
|
585 |
|
|
\index{srn@\texttt{srn}}
|
586 |
|
|
The \texttt{srn} parameter type is a signed arbitrary rational number
|
587 |
|
|
(by \emph{signed} we mean that it may be negative, zero, or positive).
|
588 |
|
|
This format is identical to the format
|
589 |
|
|
described in Section \ref{ctin0:sccl0:surn0}, immediately above,
|
590 |
|
|
with the relaxation that a unary `-' is allowed to indicate a
|
591 |
|
|
negative number.
|
592 |
|
|
|
593 |
|
|
|
594 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
595 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
596 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
597 |
|
|
\section{A High-Speed Tour Of Tcl And Tk}
|
598 |
|
|
|
599 |
|
|
\subsection{Invoking Tclsh, Wish, IjuScripter, And IjuConsole}
|
600 |
|
|
|
601 |
|
|
\subsection{General Features Of Tcl}
|
602 |
|
|
|
603 |
|
|
\subsection{Statements}
|
604 |
|
|
|
605 |
|
|
\subsection{Procedures}
|
606 |
|
|
|
607 |
|
|
\subsection{The \emph{expr} Command}
|
608 |
|
|
|
609 |
|
|
\subsection{Conditional Control Constructs}
|
610 |
|
|
|
611 |
|
|
\subsection{Looping Constructs}
|
612 |
|
|
|
613 |
|
|
\subsection{File And Console I/O}
|
614 |
|
|
|
615 |
|
|
\subsection{Obtaining Command-Line Arguments}
|
616 |
|
|
|
617 |
|
|
\subsection{A Sample Program}
|
618 |
|
|
|
619 |
|
|
|
620 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
621 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
622 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
623 |
|
|
\section{Additional Resources For Learning Tcl And Tk}
|
624 |
|
|
|
625 |
|
|
This chapter has provided a brief tutorial of Tcl and Tk---enough
|
626 |
|
|
information to begin writing basic scripts which use the microcontroller
|
627 |
|
|
extensions in IjuTools. However, to use Tcl and Tk in a competent
|
628 |
|
|
fashion, additional materials and additional study are required.
|
629 |
|
|
|
630 |
|
|
|
631 |
|
|
|
632 |
|
|
|
633 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
634 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
635 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
636 |
|
|
\section{Acknowledgements}
|
637 |
|
|
|
638 |
|
|
What I've called \emph{The Iju Tool Set} would not have been possible in
|
639 |
|
|
its present form without the outstanding technical work by the engineers
|
640 |
|
|
at Scriptics, Ajuba Solutions, and Interwoven; plus contributors and
|
641 |
|
|
newsgroup posters from all over the world. I had discussed with colleagues
|
642 |
|
|
the possibility of an interpreted language to integrate tools, but I never
|
643 |
|
|
could have done such a masterful job as Scriptics has done; and I was fortunate
|
644 |
|
|
to discover Tcl/Tk.
|
645 |
|
|
|
646 |
|
|
For proposing Tcl and Tk as a solution to my particular integration
|
647 |
|
|
problem, I'm grateful to Les Hatton \cite{bibref:i:leshatton}.
|
648 |
|
|
|
649 |
|
|
For generous
|
650 |
|
|
technical support from Scriptics/Ajuba/Interwoven, I'm grateful to
|
651 |
|
|
Jeff Hobbs \cite{bibref:i:jeffreyhobbs}, Dan Kuchler \cite{bibref:i:dankuchler},
|
652 |
|
|
and John Ousterhout \cite{bibref:i:johnousterhout}.
|
653 |
|
|
I'm also grateful to all of the newsgroup posters who
|
654 |
|
|
answered questions and offered suggestions, including
|
655 |
|
|
but not limited to Jan Nijtmans and Dave Graveaux.
|
656 |
|
|
|
657 |
|
|
For providing a solution (the \emph{mktclapp} program) which allows
|
658 |
|
|
the construction of a standalone Wish executable without the
|
659 |
|
|
requirement for external library script files, I'm grateful to
|
660 |
|
|
D. Richard Hipp \cite{bibref:i:drichardhipp}.
|
661 |
|
|
|
662 |
|
|
For testing installation packages and executables for the
|
663 |
|
|
Win32 platform and offering
|
664 |
|
|
prompt and detailed feedback about problems, I'm grateful to
|
665 |
|
|
Mirza Kolokovic \cite{bibref:i:mirzakolakovic}.
|
666 |
|
|
|
667 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
668 |
|
|
\noindent\begin{figure}[!b]
|
669 |
|
|
\noindent\rule[-0.25in]{\textwidth}{1pt}
|
670 |
|
|
\begin{tiny}
|
671 |
|
|
\begin{verbatim}
|
672 |
|
|
$RCSfile: c_tin0.tex,v $
|
673 |
|
|
$Source: /home/dashley/cvsrep/e3ft_gpl01/e3ft_gpl01/dtaipubs/esrgubka/c_tin0/c_tin0.tex,v $
|
674 |
|
|
$Revision: 1.6 $
|
675 |
|
|
$Author: dtashley $
|
676 |
|
|
$Date: 2003/11/03 02:14:24 $
|
677 |
|
|
\end{verbatim}
|
678 |
|
|
\end{tiny}
|
679 |
|
|
\noindent\rule[0.25in]{\textwidth}{1pt}
|
680 |
|
|
\end{figure}
|
681 |
|
|
|
682 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
683 |
|
|
% $Log: c_tin0.tex,v $
|
684 |
|
|
% Revision 1.6 2003/11/03 02:14:24 dtashley
|
685 |
|
|
% All duplicate labels as flagged by LaTeX removed. Additional files added
|
686 |
|
|
% to Microsoft Visual Studio edit context.
|
687 |
|
|
%
|
688 |
|
|
% Revision 1.5 2001/08/18 18:37:56 dtashley
|
689 |
|
|
% Preparation for v1.05 release.
|
690 |
|
|
%
|
691 |
|
|
% Revision 1.4 2001/08/16 19:53:27 dtashley
|
692 |
|
|
% Beginning to prepare for v1.05 release.
|
693 |
|
|
%
|
694 |
|
|
% Revision 1.3 2001/07/30 02:54:17 dtashley
|
695 |
|
|
% INTFAC extension and command-line utility finished.
|
696 |
|
|
%
|
697 |
|
|
% Revision 1.2 2001/07/01 20:42:51 dtashley
|
698 |
|
|
% Move out of binary mode for use with CVS.
|
699 |
|
|
%
|
700 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
701 |
|
|
% $History: c_tin0.tex $
|
702 |
|
|
%
|
703 |
|
|
% ***************** Version 4 *****************
|
704 |
|
|
% User: Dashley1 Date: 1/01/01 Time: 8:13p
|
705 |
|
|
% Updated in $/uC Software Multi-Volume Book (A)/Chapter, TIN0, Tool Introduction
|
706 |
|
|
% Edits.
|
707 |
|
|
%
|
708 |
|
|
% ***************** Version 3 *****************
|
709 |
|
|
% User: Dashley1 Date: 12/31/00 Time: 7:42p
|
710 |
|
|
% Updated in $/uC Software Multi-Volume Book (A)/Chapter, TIN0, Tool Introduction
|
711 |
|
|
%
|
712 |
|
|
% ***************** Version 2 *****************
|
713 |
|
|
% User: Dashley1 Date: 12/22/00 Time: 12:56a
|
714 |
|
|
% Updated in $/uC Software Multi-Volume Book (A)/Chapter, TIN0, Tool Introduction
|
715 |
|
|
% Tcl automated method of build refined.
|
716 |
|
|
%
|
717 |
|
|
% ***************** Version 1 *****************
|
718 |
|
|
% User: David Ashley Date: 11/29/00 Time: 5:45p
|
719 |
|
|
% Created in $/uC Software Multi-Volume Book (A)/Chapter, TIN0, Tool Introduction
|
720 |
|
|
% Initial check-in.
|
721 |
|
|
%
|
722 |
|
|
%End of file C_TIN0.TEX
|