1 |
dashley |
140 |
%$Header$ |
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 |
dashley |
279 |
$HeadURL$ |
673 |
|
|
$Revision$ |
674 |
|
|
$Date$ |
675 |
|
|
$Author$ |
676 |
dashley |
140 |
\end{verbatim} |
677 |
|
|
\end{tiny} |
678 |
|
|
\noindent\rule[0.25in]{\textwidth}{1pt} |
679 |
|
|
\end{figure} |
680 |
dashley |
279 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
681 |
dashley |
140 |
% |
682 |
|
|
%End of file C_TIN0.TEX |