- •Contents
- •List of Figures
- •List of Tables
- •Welcome!
- •About the Forth Programming Language
- •About This Book
- •How to Use This Book
- •Reference Materials
- •How to Proceed
- •1. Introduction
- •1.1.1 Definitions of Terms
- •1.1.2 Dictionary
- •1.1.3 Data Stack
- •1.1.4 Return Stack
- •1.1.5 Text Interpreter
- •1.1.6 Numeric Input
- •1.1.7 Two-stack Virtual Machine
- •1.2 Forth Operating System Features
- •1.3 The Forth Assembler
- •1.3.1 Notational Differences
- •1.3.1.1 Instruction Mnemonics
- •1.3.1.2 Addressing Modes
- •1.3.1.3 Instruction Format
- •1.3.1.4 Labels, Branches, and Structures
- •1.3.2 Procedural Differences
- •1.3.2.1 Resident Assembler
- •1.3.2.2 Immediately Executable Code
- •1.3.2.3 Relationship to Other Routines
- •1.3.2.4 Register Usage
- •1.4 Documentation and Programmer Aids
- •1.4.1 Comments
- •1.4.2 Locating Command Source
- •1.4.3 Cross-references
- •1.4.4 Decompiler and Disassembler
- •1.5 Interactive Programming—An Example
- •2. Forth Fundamentals
- •2.1 Stack Operations
- •2.1.1 Stack Notation
- •2.1.2 Data Stack Manipulation Operations
- •2.1.3 Memory Stack Operations
- •2.1.4 Return Stack Manipulation Operations
- •2.1.5 Programmer Conveniences
- •2.2 Arithmetic and Logical Operations
- •2.2.1 Arithmetic and Shift Operators
- •Single-Precision Operations
- •Double-precision Operations
- •Mixed-precision Operations
- •2.2.2 Logical and Relational Operations
- •Single-Precision Logical Operations
- •Double-Precision Logical Operations
- •2.2.3 Comparison and Testing Operations
- •2.3 Character and String Operations
- •2.3.1 The PAD—Scratch Storage for Strings
- •2.3.2 Single-Character Reference Words
- •2.3.3 String Management Operations
- •2.3.4 Comparing Character Strings
- •2.4 Numeric Output Words
- •2.4.1 Standard Numeric Output Words
- •2.4.2 Pictured Number Conversion
- •2.4.2.1 Using Pictured Numeric Output Words
- •2.4.2.2 Using Pictured Fill Characters
- •2.4.2.3 Processing Special Characters
- •2.5 Program Structures
- •2.5.1 Indefinite Loops
- •2.5.2 Counting (Finite) Loops
- •2.5.3 Conditionals
- •2.5.4 CASE Statement
- •2.5.5 Un-nesting Definitions
- •2.5.6 Vectored Execution
- •2.6 Exception Handling
- •3. System Functions
- •3.1 Vectored Routines
- •3.2 System Environment
- •3.3 Serial I/O
- •3.3.1 Terminal Input
- •3.3.2 Terminal Output
- •3.3.3 Support of Special Terminal Features
- •3.4 Block-Based Disk Access
- •3.4.1 Overview
- •3.4.2 Block-Management Fundamentals
- •3.4.3 Loading Forth Source Blocks
- •3.4.3.1 The LOAD Operation
- •3.4.3.2 Named Program Blocks
- •3.4.3.3 Block-based Programmer Aids and Utilities
- •3.5 File-Based Disk Access
- •3.5.1 Overview
- •3.5.2 Global File Operations
- •3.5.3 File Reading and Writing
- •3.5.4 File Support Words
- •3.6 Time and Timing Functions
- •3.7 Dynamic Memory Management
- •3.8 Floating Point
- •3.8.1 Floating-Point System Guidelines
- •3.8.2 Input Number Conversion
- •3.8.3 Output Formats
- •3.8.4 Floating-Point Constants, Variables, and Literals
- •3.8.5 Memory Access
- •3.8.6 Floating-Point Stack Operators
- •3.8.7 Floating-Point Arithmetic
- •3.8.8 Floating-Point Conditionals
- •3.8.9 Logarithmic and Trigonometric Functions
- •3.8.10 Address Management
- •3.8.11 Custom I/O
- •4. The Forth Interpreter and Compiler
- •4.1 The Text Interpreter
- •4.1.1 Input Sources
- •4.1.2 Source Selection and Parsing
- •4.1.3 Dictionary Searches
- •4.1.4 Input Number Conversion
- •4.1.5 Character String Processing
- •4.1.5.1 Scanning Characters to a Delimiter
- •4.1.5.2 Compiling and Interpreting Strings
- •4.1.6 Text Interpreter Directives
- •4.2 Defining Words
- •4.2.1 Creating a Dictionary Entry
- •4.2.2 Variables
- •4.2.3 CONSTANTs and VALUEs
- •4.2.4 Colon Definitions
- •4.2.5 Code Definitions
- •4.2.6 Custom Defining Words
- •4.2.6.1 Basic Principles of Defining Words
- •4.2.6.2 High-level Defining Words
- •4.3 Compiling Words and Literals
- •4.3.1 ALLOTing Space in the Dictionary
- •4.3.2 Use of , and C, to Compile Values
- •4.3.3 The Forth Compiler
- •4.3.4 Use of Literals and Constants in : Definitions
- •4.3.5 Explicit Literals
- •4.3.6 Use of ['] to Compile Literal Addresses
- •4.3.7 Compiling Strings
- •4.4 Compiler Directives
- •4.4.1 Making Compiler Directives
- •4.5 Overlays
- •4.6 Word Lists
- •4.6.1 Basic Principles
- •4.6.2 Managing Word Lists
- •4.6.3 Sealed Word Lists
- •5. The Assembler
- •5.1 Code Definitions
- •5.2 Code Endings
- •5.3 Assembler Instructions
- •5.4 Notational Conventions
- •5.5 Use of the Stack in Code
- •5.6 Addressing Modes
- •5.7 Macros
- •5.8 Program Structures
- •5.9 Literals
- •5.10 Device Handlers
- •5.11 Interrupts
- •5.12 Example
- •6.1 Guidelines for BLOCK-based source
- •6.1.1 Stack Effects
- •6.1.2 General Comments
- •6.1.3 Spacing Within Source
- •6.2.1 Typographic Conventions
- •6.2.2 Use of Spaces
- •6.2.3 Conditional Structures
- •6.2.4 do…loop Structures
- •6.2.5 begin…while…repeat Structures
- •6.2.6 begin…until…again Structures
- •6.2.7 Block Comments
- •6.2.8 Stack Comments
- •6.2.9 Return Stack Comments
- •6.2.10 Numbers
- •6.3 Wong’s Rules for Readable Forth
- •6.3.1 Example: Magic Numbers
- •6.3.2 Example: Factoring
- •6.3.3 Example: Simplicity
- •6.3.4 Example: Testing Assumptions
- •6.3.5 Example: IF Avoidance
- •6.3.6 Example: Stack Music
- •6.3.7 Summary
- •6.4 Naming Conventions
- •Appendix A: Bibliography
- •Appendix B: Glossary & Notation
- •B.1 Abbreviations
- •B.2 Glossary
- •B.3 Data Types in Stack Notation
- •B.4 Flags and IOR Codes
- •B.5 Forth Glossary Notation
- •Appendix C: Index to Forth Words
- •General Index
GENERAL INDEX
See also Appendix C: Index to Forth Words.
Aalignment 148–149, 204 ANS Forth xi, xii, 31, 206 array 133
ASCII character values 57 assembler
action of 171 addressing modes 174 code endings 171 interrupt handlers 180 macros 176 mnemonics 19, 172
notational conventions 172 stack use in 174
structured programming in 20, 177 assemblers in Forth 19
Bbackground task 18 big-endian 204
BLOCK 87 blocks 17, 86
buffers 86 editors 95 load 93
mapped to OS files 87 named 94 programmer aids 95
shadow block documentation 95 used for data 89
used for program source 92
BUFFER 87
CCATCH and THROW 74 cell 3, 204
alignment 148–149, 204 pair 204
character pointer 121 character string 47 code space 205 comments 23 "common usage" xii
compilation state 138, 150 compilation word list 166 compile 205
literal values 148 compiler
directive 60, 150, 158 error recovery 24
compile-time behavior 142
CONTEXT 166 control-flow stack 161–163 co-resident systems 17 counted strings 47, 205 cross-compilation 205
DDASM 26 data field 205
data space 205
pointer alignment 132
data stack (See stack, return stack) date and time functions 102 debug tools
cross-reference 24
disassembler/decompiler 25
LOCATE 24
General Index 227
Forth Programmer’s Handbook
definition 2
delimiter character 127 development system 205, 206 dictionary entry 138
constructed by CODE 169 typical 6
dictionary pointer 133 and PAD 48
disassembler/decompiler 25 disk
blocks 86 files 96
double precision
vs. floating point 105–106
E exception frame 205 handling 74 stack 205
execution token 70, 123, 140 execution variable 71 execution vectors 77
Ffileid 97 files
file access method (fam) 97 I/O result (ior) 97 operations on 97
used for program source 99 flags, true and false 45 floating point
punctuation 105
II/O result (ior) 97 IN 121
input buffer 119
input message buffer 82 input stream 119 interpretation state 150 interrupts 18, 171, 180 ISO/IEC Forth xi, xii, 31, 206
L literal 154
compile a value 148 load block 93
LOCATE 24
MMARKER 163
MS 102 multitasking 18
Nname space 206 nested conditionals 66
NEXT 171
number conversion 150 input 13 punctuation
in floating point 105
Ooverlays 163
Pprecedence bit 150, 159 programmer aids 22
block based 95 comments 23 cross-references 24
disassembler/decompiler 25
LOCATE 24 shadow blocks 95
punctuation
in floating point 105
QQUIT 82
Rreturn stack 31, 36, 69 restrictions 36
run-time behavior 142
Ssearch order 38, 166 serial I/O 81
stack 31–37, 206 comments 23 notation 210
228 General Index
"Standard Forth," defined xi
Ttable 148
terminal input buffer 127 terminal task 18 terminals
cursor control 85 drivers 81
input 81 output 84
text interpreter 82, 127 directives 102, 131 number conversion 13
THROW 205 transition word 143
Forth Programmer’s Handbook
U |
user variables |
|
terminal characteristics in 85 |
Vvectored execution 77
WWH 25 WHERE 25 word 207 word lists 165
(See also search order) commands 167 compilation 166
General Index 229