The Turbo Pascal Reference by Ed Mitchell A Freeware Book First edition, Nov 1992. (C) Copyright 1992 by Ed Mitchell, author of the Borland Pascal Developer's Guide, Que Corporation, 1992. Introduction Welcome to the electronic edition of the Turbo Pascal Reference. This reference provides approximately 400 single-spaced pages of reference information about the Turbo Pascal IDE, the Turbo Pascal language, all of the System and Graph libraries, plus a comprehensive 150+ page reference to Turbo Vision. This book is intended to be used as a reference - not as a tutorial. If you have no programming experience whatsoever, you should consult a Turbo Pascal programming tutorial first. If you have a minor amount of programming experience, you will find a complete discussion of Turbo Pascal in Chapter 3, "The Turbo Pascal Language". The Turbo Vision Reference section, Chapters 6 through 10, is unique in that it provides many examples and highlights the most commonly used features. If you have programmed in Turbo Vision you already know that you do not need to use all of the methods described for each object type. Unfortunately, it is difficult, using Borland's documentation, to discern those that are needed and those that you can safely ignore. This means that learning Turbo Vision using the Borland documentation is much more difficult than it needs to be. And that is why you will want to use the reference information I've provided in this freeware book. If you have never programmed in Turbo Vision, I recommend that you consult Chapter 11, "Turbo Vision Tutorial", continuing though Chapter 16, of the Borland Pascal Developer's Guide, published by Que Books. This Turbo Pascal Reference, a 400 page book, is available to you, for free. Subject to the copyright and distribution rights described below, you are free to copy this book and give it to others. Why am I giving this book away? When I wrote Borland Pascal Developer's Guide (Que Books, 1992), my publisher asked for a comprehensive book that would cover every feature of Turbo Pascal. Obviously, such a volume would take a lot more than could fit within the approximately 1,000 page limitation of a printed book. Because there is not room in a single volume to hold all of this material, I am giving away the extra 400 pages that it takes to flesh out the entire topic. I want you, my reader, to have access to this text, to help you in your development of Pascal applications. There is a great deal of valuable insight, tutorials and sample code within this text and I very much want these techniques to get into your hands and to be used by you. Please note that while the material presented here complements the Borland Pascal Developer's Guide, this electronic book is not in any way affiliated with the Que Corporation. This electronic book is completely free. However, if you find this information of value to you, I would greatly appreciate your purchase of Borland Pascal Developer's Guide, published by Que Corporation, 1992. (Or, alternately, my Secrets of the Borland C++ Masters (Sams Books, 1992) or Using Microsoft C/C++ (Que, 1992)). This freeware book does not duplicate the material in the Borland Pascal Developer's Guide. The Borland Pascal Developer's Guide and the Turbo Pascal Reference are completely independent of one another - yet strongly complement each other - so it is to your advantage to have access to both. If your book store does not stock Borland Pascal Developer's Guide, you can ask your retailer to order them directly from Que Corporation, or call Que at 317-573-2500 or 1-800-428-5331. Because the material in the Turbo Pascal Reference was originally intended as extra chapters in the Borland Pascal Developer's Guide, you will find cross references to the Developer's Guide. For example, in the reference section on the Turbo Vision TCollection object, I will point you to chapter 14, "Collections" in the Borland Pascal Developer's Guide for additional examples. About the Author I am the author of Borland Pascal Developer's Guide (Que Books, 1992), coauthor of Using Microsoft C/C++ 7.0 (Que Books, 1992), Secrets of the Borland C++ Masters (Sams Books, 1992), and author of, under a pseudonym, Software Construction Set for the IBM PC (Hayden Books, 1984). As a past employee of Software Publishing Corporation, I was the project manager of the best selling PFS First Choice integrated software product, and coauthor of the original PFS Write which was one of the first word processors for the IBM PC (and was also a best seller). Both PFS Write and PFS First Choice were written in Pascal. In the case of First Choice, the source ran to over 125,000 lines of Pascal code. I've been writing Pascal code since my first use of an LSI-II Terak Microcomputer in 1978. How to Contact the Author You can contact me via electronic mail to Compuserve 73317,2513 or via the Internet to 73317.2513@compuserve.com. I promise to read all mail that I receive; realistically I cannot promise to respond to all enquiries. Copyright Notice This text is copyrighted, which means that I retain ownership and control over the right to make copies of this electronic book. However, I give you permission to copy this electronic text and give it away, free, to others, subject to the following rules and restrictions: 1. This electronic book may only be copied in its entirety, unless separate permission is received from the author. 2. Each copy of this material, whether electronic or printed, must not be modified by you. In particular, each copy must include this introduction, my copyright statement and the reference to Borland Pascal Developer's Guide (Que, 1992). 3. You may print out copies of this electronic text for your own use. 4. Teachers and instructors are encouraged to copy, or to print and use this material in their classroom; however, if material is extracted for use in a classroom setting, the extracted material must bear the following notice: From Turbo Pascal Reference, (C) Copyright 1992 by Ed Mitchell, author of Borland Pascal Developer's Guide, Que Corporation, 1992. 5. Bona fide shareware distributors may charge a "nominal" fee for the costs of duplication and distribution. By "nominal", I mean a low fee such as $5.00 per disk. 6. You may not sell copies of the Turbo Pascal Reference in electronic, printed or any other form, for profit or not-for profit. 7. You may not give this material away or distribute this freeware text as a promotion for any other product without the express written permission of Ed Mitchell. 8. Turbo Pascal, Turbo Pascal for Windows, and Borland Pascal are trademarks of Borland International, Inc. Disclaimer: There are No Warranties The material in this electronic book has not been professionally edited. In particular, Turbo Pascal Reference is not produced by nor sanctioned by the Que Corporation. Que Corporation has no affiliation with nor responsibility for the content of Turbo Pascal Reference. Ed Mitchell is solely responsible for the content of Turbo Pascal Reference. This means that the text has NOT been reviewed by one or more copy editors and a technical editor, which is typical of the material that you read in a published book. As such, you may find typographical or grammatical errors. There may also be technical errors of the type that crop up during any big project as large as this one. If you find a problem, please notify me directly, via electronic mail, and I will fix the problem for a subsequent release of this electronic book. The text and sample programs are intended solely for educational purposes. While the programs are believed to reasonably accurate and functional, they have not been subjected to the standards of a professional software quality assurance department. No warranties, expressed or implied, are given. This material is used by you "as is". You may use the sample code in your own applications but you must subject the sample code to the same testing that you would give to your own code. About Borland Pascal Developer's Guide The Borland Pascal Developer's Guide is aimed at the intermediate to advanced Pascal programmer, although it contains an enormous amount of information that will be of value to those who have just learned Turbo Pascal. The Guide covers Turbo Pascal 6.0, Turbo Pascal 7.0, Borland Pascal, including the new protected-mode features, and Turbo Pascal for Windows. The book includes a companion disk containing all of the source code from the book, plus several shareware utilities. A detailed outline of the Borland Pascal Developer's Guide is presented after the Table of Contents for the Turbo Pascal Reference. About the Illustrations and Sample Source Code In some of the chapters you will see reference to "figures", such as "Figure 3.2". Above the Figure caption you will see a notation similar to: ***03tpr02.pcx*** This notation means that the illustration is contained in "pcx" format graphics file named 03TPR02.PCX. You can read and print .pcx files using the Microsoft PaintBrush program that comes with Microsoft Windows. Many other graphics programs can also display and print these .pcx format files. All of the .pcx files are included in this electronic book. The text contains many program listings. Some of these are also provided as separate source code files to make it easy for you to use the sample code in your own programs. Whenever you see a listing in the text that contains "line numbers" on the left hand side, the topmost line of the listing will show the name of the file containing the source code. The sample files are included in this electronic book. The line numbers are for reference only; if you choose to type in any of the sample programs, do not type the line numbers. Turbo Pascal Reference --------------------- Table of Contents --------------------------------------- Total pages in the electronic book: Over 400 single spaced pages. Chapter 1 20 pages. This introduction Copyright information Table of Contents for Turbo Pascal Reference Table of Contents for Borland Pascal Developer's Guide Chapter 2 The Integrated Development Environment 36 pages. Using the Integrated Development Environment When to Use the IDE? Starting Turbo Pascal's IDE Selecting Menu Items Editing, Saving and Compiling a Program Dialog Boxes Using the Editor Navigating in the Editor Selecting Text and Text Block Operations Specific Editing Commands The IDE Help System Copying Text from the Help system The File Menu File Menu/Open File Menu/New File Menu/Save functions File Menu/Change dir File Menu/Print File Menu/Get Info File Menu/DOS Shell File Menu/Exit The Search Menu Search Menu/Find (Ctrl-Q-F) Search Menu/Replace (Ctrl-A) Search Menu/Search Again (Ctrl-L) Search Menu/Go to Line Number Search Menu/Find Procedure Search Menu/Find Error (Alt-F8) The Run Menu Run Menu/Run (Alt-R) Run Menu/Program Reset (Ctrl-F2) Run Menu/Go to Cursor (F4) Run Menu/Trace Into (F7) and Step Over (F8) Run Menu/Parameters The Compile Menu Compile Menu/Compile (Alt-F9) Compile Menu/Make (F9) Compile Menu/Build Compile Menu/Destination Compile Menu/Primary File The Debug Menu and the Built-in Debugger Debug Menu/Evaluate/Modify (Ctrl-F4) Debug Menu/Watches Debug/Watches - Add Watch (Ctrl-F7) Debug Menu/Watches - Delete Watch Debug Menu/Watches - Edit Watch Debug Menu/Watches-Remove all Watches Debug Menu/Toggle Breakpoint (Ctrl-F8) Debug Menu/Breakpoints Edit Breakpoints Button Delete Button View Button Clear All Button The Options Menu Options Menu/Compiler Options Menu/Memory sizes Options Menu/Linker Options Menu/Debugger Options Menu/Directories Options Menu/Environment Options Menu/Environment - Preferences Options Menu/Environment - Editor Options Options Menu/Environment - Mouse Options Menu/Environment - Startup Options Menu/Environment - colors Options Menu/Save options The Window Menu Chapter 3 The Turbo Pascal Language 104 pages. Your First Turbo Pascal Program Pascal Program Structure Pascal Data Types A Note on the Use of Floating Point Values Declaring Identifiers Constants Variables Arrays Multidimensional Arrays Arrays and the packed Keyword Enumerated Types Subrange Types Sets Set Relational Operators Set Logical Operators Records The With Statement Record Types Case-variant records File Types Typed Constants: Pre-initialized variables The Pointer Type Defining and Allocating a Pointer Using a Pointer Disposing of a Dynamic variable Common problems when using pointers The Use of Mark and Release Procedures Cautions concerning the use of Mark and Release The Use of GetMem and FreeMem procedures Pointers and Memory Management Pointer Relational Operators The Address-of operator @ @ and Procedures and Functions @ and Procedure Value parameters @ and Procedure Variable parameters Summary of Pointer Operations Pointers and Complex Data Structures Pointers and the With Statement Turbo Pascal Arithmetic Operations Basic Arithmetic Operators Mixing Data Types in Expressions Implicit Type Conversion Explicit Type Conversion Address-of @ operator Comparision or Relational Operators Logical or Bit Level Operations Boolean Operations Short-Circuit versus Complete Evaluation String Operations Evaluation Hierarchy Pascal Statements Program Comments Assignment Statements: := Conditional Statements: If-then-else and case The if-then and if-then-else statements The case Statement Looping Statements: For, While and Repeat For Loop While Loop Repeat Loop Labels and Goto Procedures and Functions Procedures The Arrays as Parameters Strings as Parameters Records as Parameters Summary of Using Parameter Values and Variables The Procedure Body Forward declared procedures Near and Far procedure call models Interrupt Procedures Assembly language procedures: External, Inline and Asm Functions Calling a function Assigning a value to a function identifier Acceptable Function Return Values Recursive functions The effect of short-circuit evaluation on functions Procedures and Functions as Parameters Conditional Compilation Built-in Conditional Compilation Symbols Compiler Directives Disk File Operations Defining a File Identifier Opening a File Writing and Reading File Data Checking for File-related Errors Text Files Sequential Access Data Files Random Access Data Files Writing Pointer values to disk files BlockRead and BlockWrite: The Use of Untyped Files Specifying Different Block Sizes Maximum buffer size and maximum data to read or write Other File Operations Turbo Pascal Memory Limitations Chapter 4 System Library Reference 89 pages. Chapter 5 Graph Library Reference 54 pages. Chapter 6 The Turbo Vision Reference 34 pages. About the Reference Section Naming Conventions Naming Conventions The Turbo Vision Object Hierarchy The Reference Section Contains reference information on every aspect of Turbo Vision, including object types, global variables, type declarations, constants, plus examples and an overview of commonly used features. Chapter 7, 8, 9 and 10 The Turbo Vision Reference (continued) Chapter 7: 28 pages. Chapter 8: 42 pages. Chapter 9: 40 pages. Chapter 10: 37 pages. Borland Pascal Developer's Guide ------------------------------- Table of Contents --------------------------------------- Chapter 1 Introduction Who Should Use This Book? How To Use This Book About the Sample Programs About The Programming Style Used in This Book The Companion Diskette How to Contact the Author New Features in Borland Pascal and Turbo Pascal 7.0 Which Compiler Should You Use? Using Protected-Mode Compiling for Protected Mode Issues of Programming Style Capitalization of Keywords Indenting Where to Indent? Use Blank Lines Types and Pointers Procedures and Functions Chapter 2 Units Introduction Structure of a Unit Defining the Interface Section Inline Procedures and Functions Using Other Units Within the Interface Section Defining the Implementation Section The Unit Initialization Section Using a Unit in another Program Compiling a Unit Using TPUMOVER to Update TURBO.TPL Multiple .TPL Library Files Project Management: The Build and Make Options Circular References: When Units Use Each Other Sharing Declarations Between Units The Standard Turbo Pascal Units Library Units Available From Other Suppliers A Sample Unit Dynamic Link Libraries Chapter 3 Overlays Introduction General Guidelines Overlay Example Description of Example Program OverDemo Checking OvrResult Combining .OVR and .EXE into a single .EXE file Assembly language and Overlay Calls Overlays and Unit Initialization Code Overlaying Data Tuning the Virtual Array Code Turbo Pascal Overlay Unit Reference Chapter 4 Object-Oriented Programming Introduction What You Need To Learn The Terminology of Object-oriented Programming A First Look at Object Oriented Programming in Turbo Pascal Pointers to Objects and Dynamic Object Allocations Disposing of Object Pointers Destructor Methods The Power of Inheritance Calling the Ancestor's Init Method Object Types, Objects and Inheritance Virtual Methods Objects containing Virtual Methods Must Have a Constructor Static versus Virtual: Which Do You Choose? Object Types and Type Compatability Objects as Procedural Parameters Objects as Typed Constants Polymorphism Object Libraries Designing Object-oriented Programs Object-oriented Programming Reference Defining an object Deriving an object Object Pointers Constructor and Destructor Methods Virtual methods Using the Self variable Range Checking of Virtual Method Calls Glossary of Object Terminology Chapter 5 Turbo Pascal Graphics Introduction to Turbo Pascal Graphics The Graph Unit and Related Files Sample Program Circles Graphic Text Viewports The Current Pointer Selecting Colors Choosing Colors from the Color Palette Selecting Interior Colors for Objects Charting The Pie Chart The Bar Chart The Line Chart Graphics Drivers and Font Files Font Files Linking Device Drivers and Font Files Converting .BGI and .CHR files into .OBJ files Two Approaches to Linking .BGI and .CHR Files Modifying Your Program to Reference the Linked .BGI and .CHR files Chapter 6 Assembly Language Programming and Turbo Assembler Overview of 80x86 CPU Architecture Bit representations Memory Addressing Turbo Pascal Memory Structure 80x86 Processor Instruction Set Direct Memory Address: The Use of Mem, MemW and MemL Direct Port Access: The Use of Port and PortW The Use of Inline Statements Encoding Multiple Bytes The Inline Directive The Built-in asm Assembler Using the Built-in Assembler How Procedures and Functions Are Called Accessing Global Variables The Difference Between Constants and Variables Local Variables in Procedures and Functions Accessing Value Parameters and Variable Parameters Function Return Values Accessing Pointer Variables Accessing Record Structures Statement Labels Jump Instructions Near and Far RET return instructions Data Formats and Definitions Table of Internal Data Representations DB, DD and DW Directives Using DB, DW and DD for Multiple Values and Symbols Assembler Expressions Turbo Assembler Basics Turbo Assembler Statements A Sample Program Assembling and Compiling Turbo Assembler Summary Chapter 7 Debugging Turbo Pascal Program Testing Strategies Catching Software Defects Before They Happen Debugging Strategies Logic errors Unitialized variables Unitialized or Erroneous Pointer Values Changes to Global Variables Failure to Free Up Dynamically Allocated Memory Off by 1 Errors Clobbering Memory and Out of Range Errors Ignoring Pascal Scoping Rules Undefined Functions Check all Return Error Codes Boundary Conditions Debugging Techniques The IDE Debugger Compiling for the IDE Debugger Using the Integrated Debugger Debugger Windows The Watch Window Changing the Value of Variables Using Breakpoints Other Debug/Breakpoints features The Debugger Unit Using Turbo Debugger Compiling for Turbo Debugger Compatability Starting Turbo Debugger The Watch Wndow Inspector Windows Evaluate/Modify Viewing All Variables Controlling Program Execution Breakpoints Setting Breakpoint Options Inserting Executable Expressions Changed Memory Global.. Expression True Global... Viewing Breakpoints Turbo Debugger and Assembling Language Programs Protected Mode Debugging on the 80286 Virtual Debugging on the 80386 Starting the Virtual Debugger Debugging Turbo Vision Applications Debugging Windows Applications Chapter 8 Program Optimization and Turbo Profiler Program Optimization Using the Turbo Profiler Compiling for Turbo Profiler Compatability Selecting Program Areas to Profile Obtaining Accurate Measurements Improving the Program Statistics Provided by Turbo Profiler Turbo Profiler Output Options Active versus Passive Profiling Optimization Tricks Clean Up of Loop Statements Test for the Most Likely Outcomes First Set Compiler Options For Most Efficient Execution Replace Function Calls with Lookup Tables Don't be Afraid of Goto! Use Better Algorithms! Use var Parameters Instead of Value Parameters Consider Assembly Language Use Fixed Point Longints in Place of Reals Increase File I/O Buffers Memory Reduction Use Local and Dynamic Variables Recycle Memory Using Virtual Memory for Data Chapter 9 Special Programming Techniques: 8087 Usage, Interrupts and TSRs Using the 80x87 Math Coprocessor Advantages and Disadvantages Important Considerations when Using the Coprocessor Transcendental Functions and the 80387 Other Data Types Interrupt Handlers and TSRs Compiling TSR Programs Installing an Interrupt Handler Writing the Interrupt Procedure Use of the Procedure's Register Parameters Writing Interrupt Procedures using the Assembler Directive Writing TSRs TSR Dangers TSR Interrupt Trapping TSR Construction The Main Body of the Program InstallTSR and the Message Passing Mechanism Back to InstallTSR The Keyboard Interrupt Handler The INT $28 Interrupt Handler RunPopUp DoPopUpFunction DoUnUnstall The Timer Interrupt Debugging TSRs Chapter 10 Turbo Pascal Standalone Programs BINOBJ GREP MAKE Example Use of MAKE Explicit Rules Command Lines Implicit Rules Conditional Directives Using BUILTINS.MAK Macros MAKE Command Line Options THELP TOUCH TPC and BPC - Standalone Turbo Pascal compilers TEMC The Turbo Editor Macro Compiler TDSTRIP TDUMP Chapter 11 Turbo Vision Tutorial What is Turbo Vision? Learning Turbo Vision About TVSHELL A Simple Turbo Vision Application How does it Run? Creating the Menu Bar NewMenu, NewSubMenu and NewItem NewSubMenu Hot keys Command codes Command Code values Suggested Exercise Using the NewLine function Windows and Views Turbo Vision Windows Adding a simple window TApplication.Init Adding the Window Introduction to Dialog Boxes and the HandleEvent Method Modal versus Non-Modal Dialogs Radiobuttons and Checkboxes Tab Order Introduction to Events and the HandleEvent method How Events Work When do you call an ancestor's HandleEvent method? Keystrokes Retrieving data from a dialog Setting Default Values in Dialogs Getting User Input The Dialog Data Record Putting Data into the Dialog Getting Data Storing Dialog Data Chapter 12 Turbo Vision List Boxes List Boxes and Collections Sidebar: Introduction to Collections Creating a TCollection data object Updating an entry in the collection Deleting a collection entry Advanced TCollection retrieval methods Using Collections in TVSHELL6 Adding items to DirectoryCollection The List Box Viewer Creating a List box Displaying List Box Text with GetText Summary of TCollection and TListViewer Finishing the TVSHELL Example Program Outline numbering and file selecting Scavenge hunts Selecting Files and evKeyDown Events Mouse Events DoSelectFile MoveCursor DoOpenClose Modifying GetText to display Outline numbering Finishing TVSHELL TShell.RenameDialog Implementation TShell.CopyDialog The Set Up Program Dialog The SetScreenMode Method Summary of SetScreenMode Disabling Menu Commands Where to go next Chapter 13 More Turbo Vision Features Ownership versus Relationship Z-Order Views and Event Processing Selected Views Events and Event Processing Order Positional Events Broadcast Events User Defined Events Phased Events TApplication.Idle: Writing Background Tasks Using Color Palettes Application Color Palettes The Default Color Palettes Setting Color Palette Attribute Values Changing the Default Colors Common Problems with Color Mapping Fixing an out of range color problem Detecting Out of Memory Problems in Turbo Vision LowMemory and ValidView ValidView Setting The Safety Pool Size Cache Buffers TView.Valid and TGroup.Valid Adding On-line Help to Turbo Vision Programs Step 1: Writing the on-line help text Step 2: Using TVHC to Compile the Help Text Step 3: Adapting An Application for On-Line Help Chapter 14 Collections Creating a Collection Adding records to a Collection How many records are in the Collection? Retrieving records from the Collection Updating an entry in the collection Deleting a collection entry Disposing the Collection Strings in TCollection Records Iterators ForEach FirstThat and LastThat Writing FindName as Method Other Uses of FirstThat and LastThat Collections and Memory usage TSortedCollection Sort into Descending Order Using PStrings Using TSortedCollection.Search TStringCollection Overriding Compare for TStringCollection TStringCollection and Duplicate Entries Using TStringCollection.Search Polymorphic Collections Chapter 15 Streams Stream Types Using a Stream The TPersonInfo record for Stream I/O The Registration Record The ObjType Field The VMTLink Field Load and Store The Store Method Registering the stream All Turbo Vision Objects are Streamable Reading a Stream Defining the Load method and Registration record The Get Method Random Access Streams GetPos, GetSize and Truncate Streams in EMS Memory: TEmsStream Copying Entire Streams Handling Stream Errors Polymorphic Streams Chapter 16 Resources Creating a Database with Resources Reading data from the Resource file Storing Program Resources Using Program Resources Registering Turbo Vision Components using RegisterXXXX Creating String Resources Using String Resources A String Resource Compiler Utility Adding Resources to an .EXE File Chapter 18 ObjectWindows Basics Chapter written by Namir C. Shammas. Windows Data Types The ObjectWindows Hierarchy TObject TApplication TWindowsObject TDialog TFileDialog TInputDialog TWindow TControl TScrollBar TStatic TEdit TListBox TComboBox TGroupBox TButton TCheckBox TRadioButton TEditWindow TFileWindow Programming Note TMDIWindow TMDIClient TScroller The Windows API Functions Invoking Windows API Functions The Windows Messages Responding to Messages Sending Messages User-defined Messages Summary Chapter 19 ObjectWindows Examples Chapter written by Namir C. Shammas. Resources The Resource Workshop Emulating DOS Screen in Windows The Minimal Windows Application Using Menus User Input and Painting Windows Command Buttons and Text Boxes A Text File Editor Summary