%$Header$ % %------------------------------------------------------------------------------------------------------------------ %This file isn't used directly--instead, the Tcl script CP_SCRIPT.TCL inserts it into the the main .TEX volume. %In this process, the and tags on some lines are processed. lines go only to the multi-volume %work, and lines to only to the single-volume work. % %For the multi-volume work, the symbolic patchup is near perfect. But for the single-volume work, the parts %are numbered manually, which is a process open to human error. This preface must be checked when chapters %are moved, added, or deleted. %------------------------------------------------------------------------------------------------------------------ \chapter{Preface} In 1998, I began work on the interrupt latency compatibility problem. As I searched for prior work, I was surprised to discover the paucity of research available on practical embedded software problems. Textbooks were also not very helpful, as I found that almost none of the hard problems that occur in practice were addressed. In 1999, I decided to compose my own book, maintained on the Web, to collect useful research results, solutions to practical problems, unsolved problems, and directions for future research and refinement. \LaTeX{} was chosen as the text-processing tool, as it was recognized immediately that size could become an issue and that the book would have a substantial mathematical content. The freedom from any practical length limitation means that I am free to include as many topics in as much detail as I'd like.\footnote{My readers will be consuming \emph{their} toner cartridges, not mine.} In 2001, this book was moved to \index{SourceForge}\emph{SourceForge}\footnote{\emph{SourceForge} (\texttt{http://www.sourceforge.net}), to whom I am very grateful, is an organization that hosts open-source projects.} and combined with a tool set for microcontroller software work (\emph{The Iju Tool Set}). In 2002, the collective set of materials (the tool set and this book) was renamed \emph{The ESRG Tool Set}\footnote{\emph{ESRG} is an acronym for \emph{E}mbedded \emph{S}ystems \emph{R}esearch \emph{G}roup.}, and placed under a different project at \emph{SourceForge}. \emph{The ESRG Tool Set}, which is fully open-source and available for free from \emph{SourceForge} at the URL \texttt{http://esrg.sourceforge.net}, contains these materials: \begin{itemize} \item A \texttt{.PDF} copy of the most recent released version of this book. \item The packaged \LaTeX{} source code and graphics for the most recent released version of this book. \item The most recent (unreleased) source code for this book (available from the CVS version control archives). \item The most recent released version of \emph{The ESRG Tool Set}, packaged as an installation for Windows 95/98/ME/NT/2000/XP. This installation also contains web pages with helpful URLs, and supplemental materials (such as spreadsheets to demonstrate techniques, other documents and standards maintained as part of this effort, Java applets, etc.). \item The packaged source code for the most recent released version of \emph{The ESRG Tool Set}. \item The most recent (unreleased) source code of \emph{The ESRG Tool Set} (available from the CVS version control arvhives). \item The most recent (unreleased) versions of the non-tool materials maintained with \emph{The ESRG Tool Set}, including spreadsheets to demonstrate techniques, other documents and standards maintained as part of this effort, Java applets, etc. (available from the CVS version control archives). \end{itemize} I have produced this set of works with the following four goals. \marginpar{\textbf{Goals of This Work}} \begin{itemize} \item \textbf{To share results and coordinate work with researchers.} I have found that there is a disconnect between practitioners (those who have exposure to difficult problems) and researchers (those who often have the ability to solve these difficult problems). A large work is required to explain the design challenges present in practical embedded software work, and to place the most difficult unsolved problems in the hands of researchers. \item \textbf{To share results and coordinate work with practitioners.} Many of the problems and solutions presented in this work apply to almost all applications of embedded software, and in many cases are inherent to \emph{all} software. These problems and solutions will be useful to software practitioners. I also expect that practitioners have strong solutions to contribute to this work.\footnote{With less jubilation, I also expect that practitioners have new hard problems to contribute. With any luck, I will obtain more new solutions than new problems.} \item \textbf{To enrich the educational experience for students.} All of the material contained in this set of works is free\footnote{Subject to license restrictions. The license under which this book may be used is included later in this preface. Software tools are licensed under the GPL.} (which, from a student's point of view, is the best price). For example, this book can be used by instructors as free supplemental material for a course. \item \textbf{To guide tool vendors.} The design of tools is very much like the design of software, in that one must have a nearly complete understanding of the requirements in order to produce a useful product. I have often found that tool vendors are unaware of the actual needs of embedded software developers. By clearly enumerating requirements and lessons learned, I strive to give tool vendors the information and insight necessary to better support embedded software developers. \end{itemize} In \marginpar{\textbf{\emph{Small} Defined}} the title of this book, I've indicated that this book is about \index{small microcontroller system}\emph{small} microcontroller work. By \emph{small microcontroller work}, I mean the development and production of small embedded software/hardware systems such as are found in consumer electronics and the automobile industry. Although it is difficult to specify precisely what is and is not a \emph{small} microcontroller system, the systems I have in mind generally meet the following criteria. \begin{itemize} \item They involve a single-chip control solution (the address and data busses of the microcontroller are not extended outside the package). \item They involve ROM and RAM sizes of under 1M.\footnote{But usually much less--256K or less of ROM and 24K or less of RAM would be typical for my definition of \emph{small}.} \item They frequently involve non-preemptive scheduling. In the systems I would classify as \emph{small}, pre-emptive scheduling and/or commercial RTOSs are relatively uncommon. \item They involve a software program that cannot easily be changed (either because the program is lithographically masked into the microcontroller or because special equipment or special access to the microcontroller is required).\footnote{A consequence of the software unchangeability combined with high production volumes is that software mistakes are very, very expensive.} \item They exist in an unstable electrical environment, characterized by supply voltage fluctuations, electrical transients, and spurious resets. \end{itemize} I use the term \index{hard problem}\emph{hard problem} throughout this book. I define a \marginpar{\textbf{\emph{Hard Problem} Defined}} \emph{hard} problem as a problem that meets the following two criteria. \begin{itemize} \item \textbf{The problem is \emph{hard}.} The time to solve the problem is measured in months or years, rather than hours or days; and furthermore, the problem may be beyond the analytical ability of most practicing embedded software engineers. In practice, this means that an embedded software engineer cannot solve the problem in the time available during a product development cycle. \item \textbf{A solution to the problem is necessary for reliable software or for ease of software construction.} Generally, I would wish to exclude from consideration problems which are difficult but which have no practical implications for software reliability or ease of software construction if they are not solved. \end{itemize} Clearly, if an embedded software engineer is to be productive and produce a reliable embedded product, the number of unsolved \emph{hard} problems s/he encounters during a career must be fairly small. However, the reality is that a practicing embedded software engineer encounters unsolved hard problems on a daily basis. In this work I take a special but not exclusive interest in \emph{hard} problems---those that are relevant and necessary but so difficult and time-consuming that a software engineer cannot solve them in the time available during the product development cycle. I also have some interest in paradigms (ways of thinking about software systems and problems), and in best and worst practices (practices that are likely to to avert problems and practices that are nearly suicidal, respectively). It is noteworthy that I do not have much interest in established mathematical results that are available in textbooks my readers probably already own. For example, I have very limited interest in reprinting the mathematical results surrounding sampled control systems, but I might be very interested in results predicting what could and could not happen if such a sampled control system is implemented on a microcontroller using economical but lossy multiplication and integration (to the best of my knowledge, this insight does not exist anywhere). \textbf{Volume \vconzeroroman{}: \vconzerotitle{}} \textbf{Part I: Concepts} \marginpar{\textbf{Book Contents}} contains an introduction to the challenges of small microcontroller work. \begin{itemize} \item \textbf{Chapter\;\ref{cint0}, \cintzerotitle{}} explains the scope of the book and what is meant by \emph{small microcontroller work}. \item \textbf{Chapter\;\ref{chgr0}, \chgrzerotitle{}} provides my personal interpretation of the Holy Grail of embedded real-time software---that is, what is desirable and undesirable and what fundamental goals exist. In this chapter, I deal primarily in paradigms of thought and unattainable goals. \end{itemize} \textbf{Volume \vmfrzeroroman{}: \vmfrzerotitle{}} \textbf{Part II: Mathematical Frameworks} contains key mathematical frameworks and results that are divorced from any specific problem. \begin{itemize} \item \textbf{Chapter\;\ref{cpri0}, \cprizerotitle{}} presents results surrounding properties of integers and prime and composite numbers. \item \textbf{Chapter\;\ref{cfry0}, \cfryzerotitle{}} presents results surrounding the \index{Farey series}Farey series. The Farey series, which is the ordered set of rational numbers with a certain maximum denominator, forms the basis for some techniques of rational approximation. \item \textbf{Chapter\;\ref{ccfr0}, \ccfrzerotitle{}} presents results surrounding \index{continued fractions}continued fractions. The apparatus of continued fractions provides the best algorithm for finding Farey neighbors and hence best rational approximations. \item \textbf{Chapter\;\ref{cbal0}, \cbalzerotitle{}} presents results surrounding Boolean algebra. Traditionally, Boolean algebra and the study of Boolean functions is associated with digital hardware design, but results and algorithms involving the simplification of Boolean functions also have application to the simplification of software control flow constructs. \item \textbf{Chapter\;\ref{cqua0}, \cquazerotitle{}} presents results surrounding the analysis of calculation error introduced by \emph{quantization}, the unavoidable mapping from $\vworkrealset{}$ to $\vworkintset{}$ that must occur as signals from the external world, which are usually continuous in nature, are converted and processed by a microcontroller, which can inherently manipulate only integers. \item \textbf{Chapter\;\ref{cmtn0}, \cmtnzerotitle{}} presents miscellaneous results from number theory which are useful or interesting, but awkward to categorize. \end{itemize} \textbf{Volume \vcswzeroroman{}: \vcswzerotitle{}} \textbf{Part III: Construction Of Embedded Software} details the way embedded systems are (or should be) constructed in practice. \begin{itemize} \item \textbf{Chapter\;\ref{cpco0}, \cpcozerotitle{}} outlines many aspects of the way that embedded software is constructed (or should be constructed) in practice. \item \textbf{Chapter\;\ref{csoc0}, \csoczerotitle{}} treats issues specific to the support of peripherals that are usually located on the same silicon die as the microcontroller, such as hardware watchdogs or EEPROM. \item \textbf{Chapter\;\ref{csoc1}, \csoconetitle{}} treats issues specific to the support of peripherals that are usually separate from the microcontroller, such as transducers and actuators. \item \textbf{Chapter\;\ref{csnc0}, \csnczerotitle{}} discusses the support of communication protocols and networks. \item \textbf{Chapter\;\ref{csfo0}, \csfozerotitle{}} discusses requirements that tend to occur in many different types of embedded software, such as the need to calibrate an embedded product or diagnose it via a communication link. \item \textbf{Chapter\;\ref{crta0}, \crtazerotitle{}} discusses the real-time analysis of embedded software; that is, how embedded software can be analyzed to be sure that it will always meet its real-time constraints. \end{itemize} \textbf{Volume \valgzeroroman{}: \valgzerotitle{}} \textbf{Part IV: Embedded System Algorithms And Techniques} presents algorithms which are used in a target embedded system. \begin{itemize} \item \textbf{Chapter\;\ref{ccil0}, \ccilzerotitle{}} presents classical and simple\footnote{Here \emph{classical} is used in the same sense as Knuth uses it in \cite[p. 265]{bibref:b:knuthclassic2ndedvol2}.} integer algorithms and techniques which are used in embedded systems. Because integer and fixed point algorithms are the dominant paradigm of arithmetic in small microcontroller systems, this chapter is the backbone of most arithmetic in these systems. \item \textbf{Chapter\;\ref{crat0}, \cratzerotitle{}} develops techniques and results surrounding rational approximation; that is, arpproximating a real number $r_I$ by a rational number $h/k$. \item \textbf{Chapter\;\ref{cdta0}, \cdtazerotitle{}} presents algorithms for use in discrete time (such as integration and differentiation), and also more sophisticated integer algorithms. \item \textbf{Chapter\;\ref{cnnu0}, \cnnuzerotitle{}} presents miscellaneous non-numerical algorithms for use in target embedded systems. \end{itemize} \textbf{Volume \vpaczeroroman{}: \vpaczerotitle{}} \textbf{Part V: Practical, Administrative, Incidental, And Miscellaneous Topics} discusses topics that are non-technical, only peripherally related to embedded system software development, or difficult to categorize elsewhere. \begin{itemize} \item \textbf{Chapter\;\ref{cmpd0}, \cmpdzerotitle{}} discusses practical technqiues for the management of materials produced during the product development process. \item \textbf{Chapter\;\ref{cpit0}, \cpitzerotitle{}} provides designs and some analysis of circuits that are useful in microcontroller software development---either in microcontroller products themselves or in test fixtures. \item \textbf{Chapter\;\ref{cbma0}, \cbmazerotitle{}} discusses bad management and unpleasant work situations, provides paradigms and strategies for dealing with unpleasant work situations, and provides guidance in finding employment. \item \textbf{Chapter\;\ref{cpxf0}, \cpxfzerotitle{}} describes software and hardware products which are exceptionally useful in embedded product development. \item \textbf{Chapter\;\ref{corq0}, \corqzerotitle{}} describes open research questions, i.e. problems I am aware of but do not know how to solve. \item \textbf{Chapter\;\ref{cisk0}, \ciskzerotitle{}} contains reverse analyses of embedded product defects, and the lessons to be learned from these defects.\footnote{The word \emph{Insektengericht} (``insect court'', in German) comes from a page in a \emph{Beavis and Butthead} comic book purchsed in the M\"unchen Hauptbahnhoff around 1996. In this comic book, Beavis and Butthead sit in judgement of insects (bugs), always with the verdict \emph{schuldig} (guilty), and always with harsh sentences such as \emph{Tod durch explodieren} (death by explosion). I do much the same thing with embedded software bugs and embedded product defects.} Because it isn't possible in the product development process to address \emph{every} possible source of defect, I feel it is important to have a visceral feel for what is most likely to go wrong; and such intuition can only come from actively collecting product defects. I very much hope that airline pilots study transcripts and reports from airplane crashes, and I encourage embedded software developers to do the same. \end{itemize} \textbf{Volume \vijtzeroroman{}: \vijtzerotitle{}} \textbf{Part VI: ESRG Tool Set Reference Guide} is a reference for the research tool set for microcontroller work (based on Tcl/Tk from Scriptics/Ajuba/Interwoven), which is packaged with this book. \begin{itemize} \item \textbf{Chapter\;\ref{ctin0}, \ctinzerotitle{}} contains an overview of the tool set and its design goals and construction. \item \textbf{Chapter\;\ref{ctcm0}, \ctcmzerotitle{}} provides a reference for the Tcl scripting language, around which the tool set is constructed. \item \textbf{Chapter\;\ref{ctkm0}, \ctkmzerotitle{}} provides a reference for the Tk graphical extensions to Tcl. These graphical extensions, which are built into the tool set, are very useful for providing attractive GUI interfaces. \item \textbf{Chapter\;\ref{cfaq0}, \cfaqzerotitle{}} addresses frequently asked questions and ``gotchas'' in Tcl and Tk. \item \textbf{Chapter\;\ref{cxtn0}, \cxtnzerotitle{}} documents the Tcl extensions which have been added to the script interpreters (\emph{EsrgScripter} and \emph{EsrgConsole}). These extensions form the ``meat'' of \emph{The ESRG Tool Set}, and represent the new ideas or new effort we are trying to convey. These new ideas and new effort are embedded into Tcl interpreters to grant greater flexibility in their application. \item \textbf{Chapter\;\ref{cdcm0}, \cdcmzerotitle{}} documents the DOS command-line utilities packaged with the tool set. In many cases, these utilities perform functions identical or similar to Tcl extensions, but there are advantages to packaging functionality as a DOS command-line utility. \end{itemize} \textbf{Volume \vsmazeroroman{}: \vsmazerotitle{}} \textbf{Part VIII: Solutions To Selected Exercises} contains solutions for selected exercises found throughout the work. Although \marginpar{\textbf{Features For Readers}} I know that all of my readers will be involved in some way with technical things---such as mathematics, computer science, control theory, software quality, or the design and development of embedded products---I realize that my readers will vary in what they are trying to obtain from the work. Some readers will be very research oriented, and may be trying to solve or pose a particular hard problem. Other readers may be looking for a specific practical solution. For the more practical reader, I have tried to be complete--that is, I have tried not to omit information that might be necessary in understanding my work without additional research effort. In addition, a rich set of helpful materials is packaged with \emph{The ESRG Tool Set} installation. For the more research-oriented reader, I have tried to allow the reader to rapidly find books, technical papers, Web sites, technical experts, and researchers. For this reason, books, papers, Web sites, and individuals are all cited and referenced using the same framework in the bibliography. This means the reader is directed not only to technical documents, but also to the authors of the documents. Since \marginpar{\textbf{Version Identification}} this book will be maintained on the Web, the issue arises of how a reader would know one version of this book from another. I have provided two mechanisms for this.\footnote{\TeX{} tradition would demand that I pick a transcendental number and with each successive version reveal another decimal place, but that is too much work for me, given that version control systems will handle the task automatically.} \begin{itemize} \item The title page indicates when the work was compiled from \LaTeX{} source code. Two copies of the work with the same compile date are almost certainly identical. \item The entire work is maintained under a version control system (CVS at \emph{SourceForge}), \index{CVS}\index{SourceForge} and I've included keyword expansions near the end of the \LaTeX{} source files so that version control information is included automatically in the document text (for example, a block of version control information is at the end of each chapter). Sections or chapters with the same version control information are almost certainly identical. \end{itemize} This \marginpar{\textbf{Book License}}\index{license} book is licensed under the \emph{Academic Free License v. 2.0}, reproduced below for convenience.\footnote{Please note that \emph{The ESRG Tool Set} and certain other materials are licensed under the GPL. At this time only this book is licensed under the \emph{Academic Free License}.} \begin{it} This Academic Free License (the ``License'') applies to any original work of authorship (the ``Original Work'') whose owner (the ``Licensor'') has placed the following notice immediately following the copyright notice for the Original Work:\\ \\ Licensed under the Academic Free License version 2.0 \begin{enumerate} \item \textbf{Grant of Copyright License.} Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license to do the following: \begin{enumerate} \item to reproduce the Original Work in copies; \item to prepare derivative works ("Derivative Works") based upon the Original Work; \item to distribute copies of the Original Work and Derivative Works to the public; \item to perform the Original Work publicly; and \item to display the Original Work publicly. \end{enumerate} \item \textbf{Grant of Patent License.} Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, to make, use, sell and offer for sale the Original Work and Derivative Works. \item \textbf{Grant of Source Code License.} The term ``Source Code'' means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor hereby agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work, and by publishing the address of that information repository in a notice immediately following the copyright notice that applies to the Original Work. \item \textbf{Exclusions From License Grant.} Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior written permission of the Licensor. Nothing in this License shall be deemed to grant any rights to trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor except as expressly stated herein. No patent license is granted to make, use, sell or offer to sell embodiments of any patent claims other than the licensed claims defined in Section 2. No right is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this License any Original Work that Licensor otherwise would have a right to license. \item This section intentionally omitted. \item \textbf{Attribution Rights.} You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an ``Attribution Notice.'' You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. \item \textbf{Warranty of Provenance and Disclaimer of Warranty.} Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately proceeding sentence, the Original Work is provided under this License on an ``AS IS'' BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to Original Work is granted hereunder except under this disclaimer. \item \textbf{Limitation of Liability.} Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to any person for any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to liability for death or personal injury resulting from Licensor's negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. \item \textbf{Acceptance and Termination.} If You distribute copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. Nothing else but this License (or another written agreement between Licensor and You) grants You permission to create Derivative Works based upon the Original Work or to exercise any of the rights granted in Section 1 herein, and any attempt to do so except under the terms of this License (or another written agreement between Licensor and You) is expressly prohibited by U.S. copyright law, the equivalent laws of other countries, and by international treaty. Therefore, by exercising any of the rights granted to You in Section 1 herein, You indicate Your acceptance of this License and all of its terms and conditions. \item \textbf{Termination for Patent Action.} This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, for patent infringement (i) against Licensor with respect to a patent applicable to software or (ii) against any entity with respect to a patent applicable to the Original Work (but excluding combinations of the Original Work with other software or hardware). \item \textbf{Jurisdiction, Venue and Governing Law.} Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of the U.S. Copyright Act, 17 U.S.C. 101 et seq., the equivalent laws of other countries, and international treaty. This section shall survive the termination of this License. \item \textbf{Attorneys Fees.} In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. \item \textbf{Miscellaneous.} This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. \item \textbf{Definition of ``You'' in This License.} ``You'' throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, ``You'' includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, ``control'' means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. \item \textbf{Right to Use.} You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. \end{enumerate} \end{it} I \marginpar{\textbf{Intellectual Property}} believe very strongly in the notion of intellectual property. I have endeavored in this book to cite all references and to identify all work and all ideas that are not my own.\footnote{I've actually gone a step further---I've tried to provide enough information to allow a motivated reader to get in touch with the originator of the work or ideas.} I would request the same courtesy in return (but will not enforce this courtesy, except by exposure of parties responsible for the theft of ideas without credit). Plagiarism and theft of intellectual property is a regrettable but common occurrence, and I can reliably predict that some student somewhere in the Webbed world will borrow my ideas or work without citation for a semester project---such events would earn my scorn but be relatively insignificant on my radar screen. However, if any of my work appears without credit in academic journals, I would take the matter less jovially and would very likely report the plagiarism to the journal involved. I \marginpar{\textbf{Contacting the Author}}\index{contacting the author} can be contacted at \texttt{dtashley@aol.com}. I invite readers to contact me about any material in this book, in \emph{The ESRG Tool Set}, or at the web site \texttt{http://esrg.sourceforge.net}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \noindent\begin{figure}[!b] \noindent\rule[-0.25in]{\textwidth}{1pt} \begin{tiny} \begin{verbatim} $HeadURL$ $Revision$ $Date$ $Author$ \end{verbatim} \end{tiny} \noindent\rule[0.25in]{\textwidth}{1pt} \end{figure} % %End of file WORKPRFA.TEX