This comprehensive guide to programming Clipper Version 5 covers writing and building Clipper applications, with an extensive chapter on accessing functions written in C. The book is packed with practical hints and tips; it is designed specifically for the practitioner. It comes with a complete index and many program examples. An auxiliary diskette containing the source code for the examples is available.
I found the beginning of this book confusing. The author states that he is writing for C programmers as well as programmers experienced with dBASE or Clipper. Although I have never written a dBASE or Clipper program, I am quite familiar with C. Early programs contain many forward references, and implementation details are covered before a clear description of the language. For example, chapter 1 describes how to build complex Clipper programs, which seemed out of place since I did not yet know what a Clipper program was.
Chapter 2, about 20 percent of the book, is the real introduction to the Clipper language. Unfortunately, the chapter wanders from topic to topic, and few reference aids are provided. Language constructs are illustrated via examples, but their syntax is never given. A few lists of operators and their precedence are included, but not all the operators are explained. (I found this particularly frustrating for the operators without obvious arithmetic meaning, such as ** and ^). Examples consistently contain facilities not yet introduced, but the text provides no forward pointers.
To be fair, some of the disarray of chapter 2 results from the Clipper language, which is itself a hodgepodge of ideas from other languages. But a more cohesive presentation and a syntax summary would certainly help the novice. This chapter is neither a good introduction nor a good reference.
The remaining chapters fare better. They cover everything from the user interface to low-level file I/O. Related functions are usually introduced together and amply illustrated via examples. Clipper programming appears fraught with traps that Spence attempts to guide his reader around.
In chapter 6, functions are presented in a manner that should have been used throughout the text. Each function to be discussed is listed in a table along with a one-line description. Given the large number of Clipper functions, a useful addition to the book would be an appendix listing all of the functions along with short descriptions.
On the whole, I would recommend this book to experienced Clipper programmers looking for practical examples and guidance. Spence participated in the development of Clipper and offers considerable practical advice for taming the language (plus an occasional admonition, as when he begins a section on classes with, “You must start considering code and data as a unit”). Programmers new to Clipper would do better to look elsewhere for an introduction to the language.