Documente Academic
Documente Profesional
Documente Cultură
Second Edition
ii
Acknowledgments
This work could not have been accomplished without the help of many people. Firstly, we would like to thank Mika Heiskanen for his entry point list by subject. That document was an important source of information. His JAZZ library with its disassembler and other functions was also an indispensable gateway to the HP48 ROM code. We would also like to thank the ACO team, for developing the HP49, and for providing us with additional information for writing some of the chapters in this book. Our thanks go also to Wolfgang Rautenberg, who reviewed the rst edition throughly and gave many suggestions for this present edition. Many other people helped during the two editions of the book: Al Arduengo Jean-Yves Avenard Jurjen N.E. Bos Carlos Bourlot Sune Bredahl Jonathan Busby Cyrille de Brbisson Stefan Ehlen Len Fellman Peter Geelhoed Christoph Gieelink Raymond Hellstern Jordi Hidalgo Joe Horn Werner Huysegoms David Kastrup Dan Kirkland Piotr Kowalewski Daniel Lidstrm Andreas Matthias Andreas Mller Denis Martinez Hakim Mazouz Christian Meland John H Meyers Heiko Oberdiek Alberto Zamora Oyace Bernard Parisse Richard Pascal James M Prange Thomas Rast Eric Rechlin Melissa Reid Ricardo Blasco Serrano Gerald Squelart Pierre Tardy Jernej Zajc Adam Zwierko
If we forgot someone, please forgive us, and be sure we are grateful anyway.
iii
Disclaimer
This document is by Eduardo M Kalinowski and Carsten Dominik. It is distributed in the hope it will be useful for those who want to learn System RPL or want a reference about it, but it is provided as is, without warranty of any kind, either expressed or implied. In no event, we shall be liable to you for damages, including any general, special, incidental or consequential damages caused directly or indirectly by the use of the information provided here. We do not assure that any information here is right. Use it at your own risk. This document may be distributed only if in its whole, unmodied form; and if you do not charge anything for it (except nominal copying fees). Otherwise, we will want our share! The latest version of this document and its errata can be found at the homepage http://move.to/hpkb.
iv
Short Contents
Preface to the Second Edition Preface to the First Edition Acknowledgments Disclaimer 1 Introduction i ii iii iv 1
HP49 Objects
7
9 27 36 39 40 56 60 61 63 67 75 80 v
2 Binary Integers (BINTS) 3 Real Numbers 4 Complex Numbers 5 Integers (ZINTS) 6 Characters and Strings 7 Hex Strings 8 Identiers 9 Tagged Objects 10 Arrays 11 Composite Objects 12 Meta Objects 13 Unit Objects
SHORT CONTENTS 85 89 99
II
103
105 111 120 132 147 153 159 165 172 175 180 182
17 Stack Operations 18 Temporary Environments 19 Runstream Control 20 Conditionals 21 Loops 22 Error Handling 23 The Virtual Stack 24 Memory Operations 25 Time and Alarms 26 System Functions 27 Serial Communications 28 The HP49 Filer
III
189
191 202 209 213
29 Checking for Arguments 30 Keyboard Control 31 Using InputLine 32 The Parameterized Outer Loop
SHORT CONTENTS 33 Using the HP49 Browser 34 Using the HP48 Browser 35 Creating Input Forms 36 The Display 37 The Menu 38 Programming the HP49 Editor 39 Plotting
IV
319
321 325 327 336 347 359 371 381 386 393 395 400 403 405
40 Introduction to the HP49 CAS 41 Type Checking and Conversion 42 Integers 43 Matrices 44 Expression Manipulation 45 Symbolic Meta Handling 46 Polynomials 47 Root Finding 48 Calculus Operations 49 Summation 50 Modular Operations 51 Sign Tables 52 Errors 53 CAS Conguration
Appendices
427
429 447 453 478 480
A Development Tools B Creating Libraries C User RPL Commands D Library 256 and EXTABLE E Error Messages
VI
Index
497
499 557
Contents
Preface to the Second Edition Preface to the First Edition Acknowledgments Disclaimer 1 Introduction 1.1 Your First System RPL Program . . . . . . . . . . . . . . . . . . . . 1.2 About the Entries Listing . . . . . . . . . . . . . . . . . . . . . . . . i ii iii iv 1 3 5
HP49 Objects
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
9 10 10 21 22 23 25 27 28 28 30 31 31 31 33 35 36 ix
2 Binary Integers (BINTS) 2.1 Reference . . . . . . . . . . . . . 2.1.1 Built-in Binary Integers 2.1.2 Pushing Several BINTs 2.1.3 Conversion . . . . . . . . 2.1.4 Arithmetic Functions . 2.1.5 Tests . . . . . . . . . . .
3 Real Numbers 3.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Built-in Real Numbers . . . . . . . . . . . . 3.1.2 Built-in Extended Real Numbers . . . . . 3.1.3 Stack Manipulation Combined with Reals 3.1.4 Conversion . . . . . . . . . . . . . . . . . . . 3.1.5 Real Functions . . . . . . . . . . . . . . . . 3.1.6 Extended Real Functions . . . . . . . . . . 3.1.7 Tests . . . . . . . . . . . . . . . . . . . . . . 4 Complex Numbers
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
x 4.1 Reference . . . . . . . . . . . . . . . 4.1.1 Builtin Complex Numbers 4.1.2 Conversion . . . . . . . . . . 4.1.3 Functions . . . . . . . . . . 4.1.4 Tests . . . . . . . . . . . . . 5 Integers (ZINTS) 6 Characters and Strings 6.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Built-in Characters . . . . . . . . . . . . . . 6.1.2 Built-in Strings . . . . . . . . . . . . . . . . 6.1.3 Built-in Strings with Stack Manipulation 6.1.4 Conversion . . . . . . . . . . . . . . . . . . . 6.1.5 Management . . . . . . . . . . . . . . . . . 6.1.6 Parsing Strings . . . . . . . . . . . . . . . . 6.1.7 Decompilation . . . . . . . . . . . . . . . . . 6.1.8 String Tests . . . . . . . . . . . . . . . . . . 7 Hex Strings 7.1 Reference . . . . . . . . . . 7.1.1 Conversion . . . . . 7.1.2 General Functions 7.1.3 Tests . . . . . . . . 8 Identiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTENTS . . . . . . . . . . . . . . . . . . . . . . . . . 36 36 37 37 38 39 40 41 41 43 46 46 47 50 51 55 56 56 56 57 58 60 61 61 63 64 64 65 66 67 68 68 71 71
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
9 Tagged Objects 9.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Arrays 10.1 Reference . . . . . . . . . . 10.1.1 General Functions 10.1.2 Conversion . . . . . 10.1.3 Statistics . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
11 Composite Objects 11.1 Reference . . . . . . . . . . . 11.1.1 General Operations 11.1.2 Building . . . . . . . 11.1.3 Exploding . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
12 Meta Objects 12.1 Reference . . . . . . . . . . . . . . . . 12.1.1 Stack Functions . . . . . . . . 12.1.2 Combining Functions . . . . 12.1.3 Meta and Object Operations 12.1.4 Other Operations . . . . . . . 13 Unit Objects 13.1 Reference . . . . . . . . . . . . 13.1.1 Creating Units . . . . 13.1.2 General Functions . . 13.1.3 Arithmetic Functions 13.1.4 Tests . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
14 Symbolics 14.1 Reference . . . . . . . . . . . . . . . 14.1.1 General Operations . . . . 14.1.2 Other Functions . . . . . . 14.1.3 Meta Symbolics Functions
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
15 Graphics Objects (Grobs) 15.1 Reference . . . . . . . . . . . . . . . . . . . . 15.1.1 Built-in Grobs . . . . . . . . . . . . . 15.1.2 Dimensions . . . . . . . . . . . . . . 15.1.3 Grob Handling . . . . . . . . . . . . 15.1.4 Greyscale Graphics . . . . . . . . . . 15.1.5 Creating Menu Label Grobs . . . . 15.1.6 Converting Strings to Grobs . . . . 15.1.7 Creating Grobs from Other Objects 16 Library and Backup Objects 16.1 Reference . . . . . . . . . . 16.1.1 Port Operations . . 16.1.2 Rompointers . . . . 16.1.3 Libraries . . . . . . 16.1.4 Backup Objects . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
xii
CONTENTS
II
103
17 Stack Operations 105 17.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 18 Temporary Environments 18.1 Named Local Variables . . . . . . . . . . . 18.2 Unnamed Local Variables . . . . . . . . . . 18.3 Nested Temporary Environments . . . . . 18.4 Other Ways of Binding . . . . . . . . . . . . 18.5 Reference . . . . . . . . . . . . . . . . . . . 18.5.1 Builtin IDs and LAMs . . . . . . . 18.5.2 Conversion . . . . . . . . . . . . . . 18.5.3 Temporary Environments Words 19 Runstream Control 19.1 Some Concepts . . . . . . 19.2 Runstream Commands . 19.3 Some Examples . . . . . . 19.4 Reference . . . . . . . . . 19.4.1 Quoting Objects . 19.4.2 Skipping Objects 111 111 112 113 114 116 116 116 116 120 120 122 124 128 130 131 132 132 133 133 135 135 137 137 140 142 143 144 146
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
20 Conditionals 20.1 Tests . . . . . . . . . . . . . . . . . . . . . . 20.2 If. . . Then. . . Else . . . . . . . . . . . . . . . 20.3 Case . . . . . . . . . . . . . . . . . . . . . . . 20.4 Reference . . . . . . . . . . . . . . . . . . . 20.4.1 Boolean Flags . . . . . . . . . . . . 20.4.2 General Tests . . . . . . . . . . . . 20.4.3 True/False Tests . . . . . . . . . . 20.4.4 Binary Integer Tests . . . . . . . . 20.4.5 Real and Complex Number Tests 20.4.6 Meta Object Tests . . . . . . . . . 20.4.7 General Object Tests . . . . . . . . 20.4.8 Miscellaneous . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
21 Loops 147 21.1 Indenite Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 21.1.1 How Indenite Loops Work . . . . . . . . . . . . . . . . . . 148
CONTENTS 21.2 Denite Loops . . . . . . . . . . . 21.2.1 How a DO Loop Works . 21.3 Reference . . . . . . . . . . . . . 21.3.1 Indenite Loops . . . . . 21.3.2 Denite Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xiii 149 150 150 150 151 153 153 154 155 156 156 157
22 Error Handling 22.1 Trapping Errors . . . . . . . . . . 22.1.1 The Protection Word . . . 22.2 Generating Errors . . . . . . . . . 22.3 Reference . . . . . . . . . . . . . . 22.3.1 General Words . . . . . . 22.3.2 Error Generating Words .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
23 The Virtual Stack 159 23.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 24 Memory Operations 24.1 Reference . . . . . . . . . . . . . . . . . . 24.1.1 Recalling, Storing and Purging . 24.1.2 Directories . . . . . . . . . . . . . 24.1.3 The Hidden Directory . . . . . . 24.1.4 Temporary Memory . . . . . . . 165 166 166 168 170 170
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
25 Time and Alarms 172 25.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 25.1.1 Alarms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 26 System Functions 175 26.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 26.1.1 User and System Flags . . . . . . . . . . . . . . . . . . . . 175 26.1.2 General Functions . . . . . . . . . . . . . . . . . . . . . . . 178 27 Serial Communications 180 27.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 28 The HP49 Filer 28.1 Using the Filer . . . . . . . . . . . . 28.1.1 The Filer_Type Argument . 28.1.2 The Filer_Path Argument . 28.1.3 The Filer_List Argument . 182 182 182 182 183
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
xiv 28.1.3.1 28.1.3.2 28.1.3.3 28.1.3.4 28.1.3.5 28.2 Reference . . . Name_Item . . . . . Location_Item . . . Action_Item . . . . . ExtraProgram_Item Key_Shortcut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
189
191 191 193 195 196 198 202 202 204 205 205 205 207 207 208
30 Keyboard Control 30.1 Key Locations . . . . . . . . . . 30.2 Waiting for a Key . . . . . . . . 30.3 Reference . . . . . . . . . . . . 30.3.1 Converting Keycodes . 30.3.2 Waiting for Keys . . . 30.3.3 The ATTN Flag . . . . 30.3.4 Bad Keys . . . . . . . . 30.3.5 User Keys . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
31 Using InputLine 209 31.1 Menu Key Assignments . . . . . . . . . . . . . . . . . . . . . . . . . 211 31.2 An Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 31.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 32 The Parameterized Outer Loop 32.1 Parameterized Outer Loop Words . . 32.2 The Display . . . . . . . . . . . . . . . 32.3 Error Handling . . . . . . . . . . . . . 32.4 Hard Key Assignments . . . . . . . . 32.5 Menu Key Assignments . . . . . . . . 32.6 Preventing Suspended Environments 32.7 The Exit Condition . . . . . . . . . . . 213 214 215 215 216 217 217 218
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
CONTENTS
xv
32.8 An Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 32.9 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 33 Using the HP49 Browser 33.1 The Choose Items meta . . . . . . 33.2 The Title String . . . . . . . . . . . 33.3 The Initially Selected Item . . . . 33.4 The Message Handler . . . . . . . 33.5 The Browser and Lams . . . . . . 33.6 Accessing the Selected Item . . . 33.7 Saving and Restoring the Screen 33.8 An Example . . . . . . . . . . . . . 33.9 Reference . . . . . . . . . . . . . . 225 226 226 226 226 228 228 229 230 233 235 235 238 239 239 239 239 240 244 247 248 249 249 251 252 253 253 253 257 257 262 262 262 262 262
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
34 Using the HP48 Browser 34.1 The ::Appl Parameter . . . . . . . . . . . . 34.2 The $Title Parameter . . . . . . . . . . . . 34.3 The ::Converter Parameter . . . . . . . . . 34.4 The {}Items Parameter . . . . . . . . . . . . 34.5 The Init Parameter . . . . . . . . . . . . . . 34.6 Typical Browser Usage . . . . . . . . . . . 34.7 An Example . . . . . . . . . . . . . . . . . . 34.8 Reference . . . . . . . . . . . . . . . . . . . 34.8.1 NULLLAMs Used by the Browser 35 Creating Input Forms 35.1 Label Denitions . . . . . . . . . . . . . 35.2 Field Denitions . . . . . . . . . . . . . 35.3 Label and Field Counts . . . . . . . . . 35.4 Message Handlers . . . . . . . . . . . . 35.5 The Title . . . . . . . . . . . . . . . . . . 35.6 Results Of The Input Form . . . . . . . 35.7 An Example . . . . . . . . . . . . . . . . 35.8 Reference . . . . . . . . . . . . . . . . . 35.8.1 Inputform . . . . . . . . . . . . 35.8.2 Input Form Messages . . . . . 35.8.2.1 IfMsgKeyPress 0 . 35.8.2.2 IfMsgLooseFocus 1 35.8.2.3 IfMsgNewField 2 . 35.8.2.4 IfMsgGetFocus 3 .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
xvi 35.8.2.5 35.8.2.6 35.8.2.7 35.8.2.8 35.8.2.9 35.8.2.10 35.8.2.11 35.8.2.12 35.8.2.13 35.8.2.14 35.8.2.15 35.8.2.16 35.8.2.17 35.8.2.18 35.8.2.19 35.8.2.20 35.8.2.21 35.8.2.22 35.8.2.23 35.8.2.24 IfMsgGetFieldValue 4 . . . . IfMsgSetFieldValue 5 . . . . IfMsgGetFieldGrob 6 . . . . IfMsgSetFirstField 7 . . . . . IfMsgFieldReset 10 . . . . . . IfMsgGetMenu 11 . . . . . . IfMsgGet3KeysMenu 12 . . . IfMsgCancel 13 . . . . . . . . IfMsgCancelKey 14 . . . . . IfMsgOK 15 . . . . . . . . . . IfMsgKeyOK 16 . . . . . . . . IfMsgChoose 17 . . . . . . . . IfMsgType 18 . . . . . . . . . IfMsgCalc 19 . . . . . . . . . IfMsgNewCommandLine 20 IfMsgOldCommandLine 21 . IfMsgCommandLineValid 22 IfMsgDecompEdit 23 . . . . . IfMsgNextChoose 24 . . . . . IfMsgEdit 25 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 263 263 264 264 264 265 265 265 265 266 266 266 266 267 267 267 267 267 267 268 268 269 270 270 271 271 272 272 272 272 273 274 275 277 277 279 279 280
36 The Display 36.1 Display Organization . . . . . . . . . . . 36.2 Preparing the Display . . . . . . . . . . . 36.3 Controlling Display Refresh . . . . . . . 36.4 Clearing the Display . . . . . . . . . . . . 36.5 Displaying Text . . . . . . . . . . . . . . . 36.5.1 System Font . . . . . . . . . . . . 36.5.2 Minifont . . . . . . . . . . . . . . 36.5.3 Displaying Warnings . . . . . . . 36.6 Reference . . . . . . . . . . . . . . . . . . 36.6.1 Display Organization . . . . . . 36.6.2 Preparing the Display . . . . . . 36.6.3 Immediate Refresh . . . . . . . . 36.6.4 Controlling Display Refresh . . 36.6.5 Clearing the Display . . . . . . . 36.6.6 Annunciator and Modes Control 36.6.7 Window Coordinates . . . . . . . 36.6.8 Scrolling the Display . . . . . . . 36.6.9 Displaying Objects . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
CONTENTS
xvii
36.6.10 Displaying Text . . . . . . . . . . . . . . . . . . . . . . . . . 281 36.6.11 Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 37 The Menu 37.1 Menu Format . . . . . . . . . . . . 37.2 Menu Properties . . . . . . . . . . 37.3 Reference . . . . . . . . . . . . . . 37.3.1 Menu Properties . . . . . 37.3.2 Building Menus . . . . . . 37.3.3 Menu Display . . . . . . . 37.3.4 Displaying Menu Labels . 37.3.5 General Entries . . . . . . 284 285 286 288 288 291 292 293 293 295 295 296 299 300 300 301 302 304 306 308 309 310 311
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
38 Programming the HP49 Editor 38.1 Terminology . . . . . . . . . . . . . . . . . . . . . . 38.2 Examples . . . . . . . . . . . . . . . . . . . . . . . 38.3 Executing External Commands in the Editor . . 38.4 Reference . . . . . . . . . . . . . . . . . . . . . . . 38.4.1 Status . . . . . . . . . . . . . . . . . . . . 38.4.2 Inserting Text . . . . . . . . . . . . . . . . 38.4.3 Deleting Text . . . . . . . . . . . . . . . . 38.4.4 Moving the Cursor . . . . . . . . . . . . . 38.4.5 Selection, Cut and Paste, the Clipboard 38.4.6 Search and Replace . . . . . . . . . . . . 38.4.7 Evaluation . . . . . . . . . . . . . . . . . . 38.4.8 Starting the Editor . . . . . . . . . . . . . 38.4.9 Miscellaneous . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
IV
319
321 321 322 323
40 Introduction to the HP49 CAS 40.1 Problems with These Chapters . . . . . . . . . . . . . . . . . . . . . 40.2 Symbolic Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40.3 A Few Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xviii 42 Integers 42.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . 42.1.1 Built-in Integers . . . . . . . . . . . . . . . 42.1.2 Conversion Functions . . . . . . . . . . . . 42.1.3 General Integer Operations . . . . . . . . . 42.1.4 Integer Factorization and Prime Numbers 42.1.5 Gaussian Integers . . . . . . . . . . . . . . 42.1.6 Integer Tests . . . . . . . . . . . . . . . . . 43 Matrices 43.1 Reference . . . . . . . . . . . . . . . . . . . . . . . 43.1.1 Creating and Redimensioning Matrices 43.1.2 Conversion . . . . . . . . . . . . . . . . . . 43.1.3 Tests . . . . . . . . . . . . . . . . . . . . . 43.1.4 Calculations with Matrices . . . . . . . . 43.1.5 Linear Algebra and Gaussian Reduction 43.1.6 Linear System Solver . . . . . . . . . . . 43.1.7 Other Matrix Operations . . . . . . . . . 43.1.8 Eigenvalues, Eigenfunctions, Reduction
CONTENTS 327 327 327 327 329 330 333 334 336 337 337 338 339 339 341 342 342 345 347 347 347 351 353 355 356 357 359 359 359 360 365 367 368 370
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
44 Expression Manipulation 44.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . 44.1.1 Basic Operations and Function Application 44.1.2 Trigonometric and Exponential Operators . 44.1.3 Simplication, Evaluation and Substitution 44.1.4 Collection and Expansion . . . . . . . . . . . 44.1.5 Trigonometric Transformations . . . . . . . 44.1.6 Division, GCD and LCM . . . . . . . . . . . 45 Symbolic Meta Handling 45.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . 45.1.1 Basic Expression Manipulation . . . . . . . 45.1.2 Basic Operations and Function Application 45.1.3 Trigonometric and Exponential Operators . 45.1.4 Innity and Undefs . . . . . . . . . . . . . . 45.1.5 Expansion and Simplication . . . . . . . . 45.1.6 Tests . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
CONTENTS 46.1.1 46.1.2 46.1.3 46.1.4 Computation with Polynomials Factorization . . . . . . . . . . . General Polynomial Operations Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47 Root Finding 381 47.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 47.1.1 Root Finding and Numerical Solvers . . . . . . . . . . . . 381 48 Calculus Operations 48.1 Reference . . . . . . . . . . . . . . . . 48.1.1 Limits and Series Expansion 48.1.2 Derivatives . . . . . . . . . . 48.1.3 Integration . . . . . . . . . . 48.1.4 Partial Fractions . . . . . . . 48.1.5 Differential Equations . . . . 48.1.6 Laplace Transformation . . . 386 386 386 387 390 391 391 392
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
49 Summation 393 49.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 50 Modular Operations 395 50.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 50.1.1 Modulo Operations . . . . . . . . . . . . . . . . . . . . . . . 395 51 Sign Tables 400 51.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 52 Errors 403 52.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 53 CAS Conguration 405 53.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 54 CAS Menus 409 54.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 55 Internal Versions of User RPL Commands 411 55.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 56 Miscellaneous 417
xx 56.1 Reference . . . . . . . . . . . . . . . . . . 56.1.1 Verbose Mode Display Routines 56.1.2 Evaluation . . . . . . . . . . . . . 56.1.3 Conversion . . . . . . . . . . . . . 56.1.4 Qpi . . . . . . . . . . . . . . . . . 56.1.5 Innity . . . . . . . . . . . . . . . 56.1.6 Built-In Constants . . . . . . . . 56.1.7 List Application . . . . . . . . . . 56.1.8 Irrquads . . . . . . . . . . . . . . 56.1.9 Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 417 417 418 418 419 420 420 421 422
Appendices
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
427
429 430 430 432 435 435 437 437 438 439 439 439 440 441 444 445 447 447 449 449 450 452
A Development Tools A.1 The Entry Points Library . . . . . . . . . . . . . . . A.2 About Key Assignments . . . . . . . . . . . . . . . . A.3 Hacking Tools . . . . . . . . . . . . . . . . . . . . . . A.3.1 Operating Tools for the HP49 . . . . . . . A.4 The Compiler . . . . . . . . . . . . . . . . . . . . . . A.4.1 MASD and the Different Kinds of Entries A.4.2 MASDs Special Features . . . . . . . . . . A.4.2.1 Unnamed Local Variable Binding A.4.2.2 Including Source Files . . . . . . A.5 Disassembly . . . . . . . . . . . . . . . . . . . . . . . A.5.1 Using Nosy . . . . . . . . . . . . . . . . . . A.5.2 Using CQIF? . . . . . . . . . . . . . . . . . A.6 The Editor, and Emacs . . . . . . . . . . . . . . . . . A.7 Debugging . . . . . . . . . . . . . . . . . . . . . . . . A.8 JAZZ for the HP49 . . . . . . . . . . . . . . . . . . . B Creating Libraries B.1 The Special Variables . . . . . . . . . . . . . B.2 The Library Message Handler . . . . . . . . B.2.1 Menu Extensions . . . . . . . . . . . B.2.2 Online Help for Libary Commands B.2.3 The Library Menu Message . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
CONTENTS
xxi
D Library 256 and EXTABLE 478 D.1 The Development Library 256 . . . . . . . . . . . . . . . . . . . . . 478 D.2 The EXTABLE Library . . . . . . . . . . . . . . . . . . . . . . . . . 479 E Error Messages 480
VI
Index
497
499 557
Chapter 1 Introduction
If you know how to create programs in User RPL (if you do not, you should learn it before you continue reading this book), then you only know part of what the HP49G calculator can do. The System RPL programming language gives you power to do many things which you could not even imagine. For example, in System RPL you can handle all object types available. User RPL only gives access to some of them. Or you can do math with 15-digit accuracy, use arrays with non-numeric elements, and much more. System RPL can also be used to do the same things as a User RPL program would do, but much faster. But before we start talking of System RPL, let us go back to User RPL to explain how it really works. We know you are anxious to start with the big thing right now, but the following information is important for a good understanding of System RPL. HP49 programs (both User and System) are not stored internally using the names of the commands. Only the addresses of the objects are stored. Each of these addresses takes only 2.5 bytes (or more, if the address is a rompointer or ashpointer). When a program is run, the only thing that is actually done is a kind of gosub to that address. This way of storing programs serves two purposes. 2.5 bytes is less than the name of most commands, so the program needs less memory. And execution of the program is much faster since during execution, looking up the addresses of names is no longer necessary. Most of the times, the address points to another program with more jumps to other programs with more jumps, and so on. . . The calculator keeps track of holding the address to which jump back, and you can have as many jumps as necessary without worrying about it. When the called program ends, you return to where you were before. Of course, the jumps must end somewhere, either in a program written in machine language or in an object that just puts itself in the stack (numbers, strings, etc). This is quite similar to the concept of calling a function or sub-routine in high-level languages. But if the programs are just addresses, how can they be edited? The an1
1. Introduction
swer is that the calculator has a table of the User commands names and their corresponding addresses. So, when you put a User RPL program in the stack, the HP searches the table to get the name of the commands corresponding to the addresses stored in memory, and then displays the program in a readable form. You can then edit it, and after the edition is done the table is searched again for the addresses of the commands entered, and only these addresses are stored in memory. This is why it takes a long time to edit a long User RPL program, but it is also what makes them fast to run. This all works as long as all the commands have names. Guess what? There are over four thousand commands without names. This is one of the distinctions between User and System RPL. User RPL, the language described in the manual (the language), can only access the named commands. (Actually, it can access the unnamed commands via the commands SYSEVAL, LIBEVAL and FLASHEVAL, as long as you know the address of the command. But this is not efcient (except for an occasional use)). System RPL can access all commands. Because of that, System RPL programs cannot be edited directly. Special tools are needed for that. In Appendix A you will nd information about the available tools for writing System RPL programs. Fortunately, all you need is built-in in the calculator, or is in libraries that can be downloaded to the calculator. Programming in System RPL is more powerful and much faster, because it does no error checking. In System RPL, the programmer must be sure that no error occurs, otherwise a crash might happen. For example, if a command requires two arguments in the stack and they are not there, or if they are not of the type the function requires, a warmstart or even a memory loss could happen. Naturally, there are commands for checking if there are enough arguments, for their types, and for other possible error conditions. The difference is that you probably just need to check if all arguments are present once, when the program starts. You do not need to repeat the check later. In User RPL, every single command has error checking, so tests are done unnecessarily, slowing the program. At this point, you might be wondering, if the commands do not have names, how can you program in System RPL? As said before, all commands have addresses, so you can call the address directly, using a structure like PTR <address>, and whatever is at that address will be executed. But there is an easier way. The commands have names. The names simply are not stored in the HP49 in the same way the the names of User commands are. But the HP de-
sign team has given them names, and they are stored in the tools for creating System RPL programs. You write a program using those names, and then the System RPL compiler searches the names in the tables, and converts them to addresses. This is called compiling or assembling. Some tools can also do the opposite: convert the addresses into command names. This is called decompiling or disassembling. Some of the commands are classied as supported: they are guaranteed to stay at the same memory location in all ROM versions of the calculator, i.e., their address are not going to change, so programmers can use them safely. (Note that this does not mean they will be in the same address in different calculators, such as the HP48 and HP49.) But there are also commands that are classied as unsupported. For these, there is not guarantee that they will stay at the same address in different ROM versions. Unsupported commands are not listed in the tables of compilers, so you cannot enter their names and expect to have their address in the resulting program. You have to either call them directly by their address, or name the command yourself. In the entries listings, the names of unsupported entries will be enclosed in single parenthesis, like (CURSOR@@). Note that all unsupported entries listed in this book are, however, stable. It has been indicated by the HP design team that all HP49G addresses in the ranges 025ECh0B3C7h and 25565h40000h will very likely not change, even the unsupported commands in these ranges. Actually, there are three kinds of entries: the description above dealt mainly with normal 2.5-byte addresses, which point directly to some ROM address. Most entries are of this kind. But there are also rompointer and ashpointer entries. Rompointers point to commands inside a library. Their names start with . Flashpointers, which only exist in the HP49, point to sub-routines inside the ash memory. Their names start with . Appendix A will describe what is necessary in order to use each kind of entries with HP49 compiler.
1.1
Let us create a very simple System RPL program, and explain it in detail. The program will calculate the area of a circle, given the radius in the stack. See Appendix A for information on how to compile it. If you downloaded the examples le, you will nd it with the name first.
4
1 :: CK1NOLASTWD CK&DISPATCH1 BINT1 :: %2 %^ %PI %* ; ;
1. Introduction
(check if there is an argument) (check if it is a real number) (if it is) (square the radius) (put PI in the stack) (and multiply)
Before we start analyzing it, it is important to note that System RPL is case-sensitive, so pi is different from PI, which is different from pI. Be careful when typing. Also, as you might have guessed, everything between ( )s is considered a comment. Lines that have a * in the rst column are also comments. The rst line contains the start of secondary (i.e., program) marker, :: (called DOCOL). The end marker is ; (SEMI). Following, there is the command CK1NOLASTWD. This command checks if there is one argument in the stack, and if there is not, generates a Too Few Arguments error. The next command, CK&DISPATCH0, checks the argument type and allows the programmer to do different things for different argument types. Our program only supports one argument type: real numbers (represented here by BINT1, or the number one as a system binary see Chapter 2). If any other argument type is entered, a Bad Argument Type error will be produced. Argument checking is described in detail in Chapter 29. After that, there is the code to execute if the argument is a real number. Note that the code is between :: and ;. This is because only one object is expected after the argument type. Here, this one object is a secondary (subprogram), one kind of composite object: it is only one object, but with other objects inside it. So if we want to evaluate more than one object, they must be included in a secondary. This is similar to enclosing several statments between braces in C or between begin and end in Pascal. The rest of the program is very simple. The number two is put in the stack, and the radius (entered by the user) is raised to that power. Finally , is put in the stack, and the squared radius is multiplied by it. The stack now contains the area. This program is 25 bytes long, as opposed to the 20 of the User RPL program SQ p * ->NUM . However, the User RPL version took 0.0156 seconds to calculate (with radius 1). The System RPL took only 0.0019 seconds. Note that, even if this System RPL program is longer than an equivalent in User RPL, this generally does not happen.
1.2
In the following chapters, the stack diagrams use codes to represent each object type. Here is a list of such codes: Abbreviation ob 1...n # HXS CHR $ T F flag % %% %C %%C z, Z, ZINT N s, symb u, unit {} A, [] V, [] M, [[]] P Q meta, ob1..obn #n grob menu sign Meaning any object n objects binary integer (BINT) hex string (User binary integer) character character string TRUE FALSE TRUE or FALSE real number extended real number complex number extended complex number innite precision integer positive innite precision integer symbolic unit object list array vector matrix polynom, a list of Qs ZINT or P meta object graphical object menu: a program or a list sign table
UserRPL stack diagrams use some additional abbreviations: Abbreviation x, y c, (,) # Meaning real, list, generic UserRPL object complex number hex string (User binary integer)
6 Abbreviation m, n date name prog, prg f, func F Meaning angle (a real number) integer (ZINT or real) date in DD.MMYYYY or MM.DDYYYY format global name program function integral of f
1. Introduction
10
also many others, which are listed below. Here is an example of program that just put three bints in the stack, using the three methods:
1 :: 13 (13d or Dh) # D (the same, using preferred method) BINT13 (in this case, this method is shorter) ;
2.1
2.1.1
Reference
Built-in Binary Integers
Name BINT0 BINT1 BINT2 BINT3 BINT4 BINT5 BINT6 BINT7 BINT8 BINT9 BINT10 Description 0d 0h aka: ZERO, any 1d 1h aka: ONE, real, MEMERR 2d 2h aka: TWO, cmp 3d 3h aka: THREE, str 4d 4h aka: FOUR, arry 5d 5h aka: FIVE, list 6d 6h aka: SIX, id, idnt 7d 7h aka: SEVEN, lam 8d 8h aka: EIGHT, seco 9d 9h aka: NINE, symb 10d Ah aka: TEN, sym
Addr. 33107 33111 3311B 33125 3312F 33139 33143 3314D 33157 33161 3316B
2.1. Reference Addr. 33175 3317F 33189 33193 3319D 331A7 331B1 331BB 331C5 331CF 331D9 331E3 331ED 331F7 33201 3320B 33215 3321F 33229 Name BINT11 BINT12 BINT13 BINT14 BINT15 BINT16 BINT17 BINT18 BINT19 BINT20 BINT21 BINT22 BINT23 BINT24 BINT25 BINT26 BINT27 BINT28 BINT29 Description 11d Bh aka: ELEVEN, hxs 12d Ch aka: TWELVE, grob 13d Dh aka: TAGGED, THIRTEEN 14d Eh aka: EXT, FOURTEEN, unitob 15d Fh aka: FIFTEEN, rompointer 16d 10h aka: REALOB, SIXTEEN 17d 11h aka: SEVENTEEN, 2REAL, REALREAL 18d 12h aka: EIGHTEEN 19d 13h aka: NINETEEN 20d 14h aka: TWENTY 21d 15h aka: TWENTYONE 22d 16h aka: TWENTYTWO 23d 17h aka: TWENTYTHREE 24d 18h aka: TWENTYFOUR 25d 19h aka: TWENTYFIVE 26d 1Ah aka: REALSYM, TWENTYSIX 27d 1Bh aka: TWENTYSEVEN 28d 1Ch aka: TWENTYEIGHT 29d 1Dh aka: TWENTYNINE
11
12 Addr. 33233 3323D 33247 33251 3325B 33265 3326F 33279 33283 3328D 33297 332A1 332AB 332B5 332BF 332C9 332D3 332DD 332E7 Name BINT30 BINT31 BINT32 BINT33 BINT34 BINT35 BINT36 BINT37 BINT38 BINT39 BINT40 BINT41 BINT42 BINT43 BINT44 BINT45 BINT46 BINT47 BINT48
2. Binary Integers (BINTS) Description 30d 1Eh aka: REALEXT, THIRTY 31d 1Fh aka: THIRTYONE 32d 20h aka: THIRTYTWO 33d 21h aka: THIRTYTHREE 34d 22h aka: THIRTYFOUR 35d 23h aka: THIRTYFIVE 36d 24h aka: TTHIRTYSIX 37d 25h aka: THIRTYSEVEN 38d 26h aka: THIRTYEIGHT 39d 27h aka: THIRTYNINE 40d 28h aka: FORTY, FOURTY 41d 29h aka: FORTYONE 42d 2Ah aka: FORTYTWO 43d 2Bh aka: FORTYTHREE 44d 2Ch aka: FORTYFOUR 45d 2Dh aka: FORTYFIVE 46d 2Eh aka: FORTYSIX 47d 2Fh aka: FORTYSEVEN 48d 30h aka: FORTYEIGHT
2.1. Reference Addr. 332F1 332FB 33305 3330F 33319 33323 3332D 33337 33341 3334B 33355 3335F 33369 33373 3337D 33387 33391 3339B 333A5 Name BINT49 BINT50 BINT51 BINT52 BINT53 BINT54 BINT55 BINT56 BINT57 BINT58 BINT59 BINT60 BINT61 BINT62 BINT63 BINT64 BINT65 BINT66 BINT67 Description 49d 31h aka: FORTYNINE 50d 32h aka: FIFTY 51d 33h aka: FIFTYONE 52d 34h aka: FIFTYTWO 53d 35h aka: FIFTYTHREE, STRLIST, THREEFIVE 54d 36h aka: FIFTYFOUR 55d 37h aka: FIFTYFIVE 56d 38h aka: FIFTYSIX 57d 39h aka: FIFTYSEVEN 58d 3Ah aka: FIFTYEIGHT 59d 3Bh aka: FIFTYNINE 60d 3Ch aka: SIXTY 61d 3Dh aka: SIXTYONE 62d 3Eh aka: SIXTYTWO 63d 3Fh aka: SIXTYTHREE 64d 40h aka: BINT40h, SIXTYFOUR, YHI 65d 41h aka: ARRYREAL 66d 42h aka: FOURTWO 67d 43h aka: FOURTHREE
13
14 Addr. 333AF 333B9 333C3 333CD 333D7 333E1 333EB 333F5 333FF 33409 33413 3341D 33427 33431 3343B 33445 3344F 33459 33463 3346D 33477 33481 3348B 33495 3349F Name BINT68 BINT69 BINT70 BINT71 BINT72 BINT73 BINT74 BINT75 BINT76 BINT77 BINT78 BINT79 BINT80 BINT81 BINT82 BINT83 BINT84 BINT85 BINT86 BINT87 BINT88 BINT89 BINT90 BINT91 BINT92
2. Binary Integers (BINTS) Description 68d 44h aka: SIXTYEIGHT 69d 45h aka: FOURFIVE 70d 46h aka: SEVENTY 71d 47h 72d 48h 73d 49h 74d 4Ah aka: SEVENTYFOUR 75d 4Bh 76d 4Ch 77d 4Dh 78d 4Eh 79d 4Fh aka: SEVENTYNINE 80d 50h aka: EIGHTY 81d 51h aka: EIGHTYONE, LISTREAL 82d 52h aka: LISTCMP 83d 53h aka: FIVETHREE 84d 54h aka: FIVEFOUR 85d 55h aka: 2LIST 86d 56h aka: FIVESIX 87d 57h aka: LISTLAM 88d 58h 89d 59h 90d 5Ah 91d 5Bh aka: BINT_91d 92d 5Ch
2.1. Reference Addr. 334A9 334B3 334BD 334C7 334D1 334DB 334E5 334EF 334F9 33503 3350D 33517 33521 3352B 33535 3353F 33549 33553 3355D 33567 33571 3357B 33585 3358F 33599 335A3 335AD 335B7 335C1 335CB 335D5 335DF Name BINT93 BINT94 BINT95 BINT96 BINT97 BINT98 BINT99 BINT100 BINT101 BINT102 BINT103 BINT104 BINT105 BINT106 BINT107 BINT108 BINT109 BINT110 BINT111 BINT112 BINT113 BINT114 BINT115 BINT116 BINT117 BINT118 BINT119 BINT120 BINT121 BINT122 BINT123 BINT124 Description 93d 5Dh 94d 5Eh 95d 5Fh 96d 60h aka: BINT_96d 97d 61h aka: IDREAL 98d 62h 99d 63h 100d 64h aka: ONEHUNDRED 101d 65h 102d 66h 103d 67h 104d 68h 105d 69h 106d 6Ah 107d 6Bh 108d 6Ch 109d 6Dh 110d 6Eh 111d 6Fh aka: char 112d 70h 113d 71h 114d 72h 115d 73h aka: BINT_115d 116d 74h aka: BINT_116d 117d 75h 118d 76h 119d 77h 120d 78h 121d 79h 122d 7Ah aka: BINT_122d 123d 7Bh 124d 7Ch
15
16 Addr. 335E9 335F3 335FD 33607 33611 3361B 33625 3362F 33639 33643 3364D 33657 3EAFB 3366B 33675 3367F 39E6B 33689 33693 3369D 336A7 336B1 336BB 3BD4C 336C5 38275 336CF 336D9 3E7DA 336E3 3BD65 336ED 336F7 33701 3370B 33715 Name BINT125 BINT126 BINT127 BINT128 BINT129 BINT130 BINT131 (#8F) SYMBREAL (#92) (#9A) SYMBUNIT (#9F) SYMOB SYMREAL (#A2) (#A4) (#A5) SYMID SYMLAM (#A9) SYMSYM SYMEXT (#AF) (HXSREAL) (#BB) (2HXS) BINTC0h (#C8) 2GROB (#CF) TAGGEDANY EXTREAL EXTSYM 2EXT ROMPANY
2. Binary Integers (BINTS) Description 125d 7Dh 126d 7Eh 127d 7Fh 128d 80h aka: BINT80h 129d 81h 130d 82h aka: BINT130d, BINT_130d, XHI-1 131d 83h aka: BINT_131d, BINT131d, XHI 143d 8Fh 145d 91h 146d 92h 154d 9Ah 158d 9Eh 159d 9Fh 160d A0h 161d A1h 162d A2h 164d A4h 165d A5h 166d A6h 167d A7h 169d A9h 170d AAh 174d AEh 175d AFh 177d B1h 187d BBh 187d BBh 192d C0h 200d C8h 204d CCh 207d CFh 208d D0h 225d E1h 234d EAh 238d EEh 240d F0h
2.1. Reference Addr. 3371F 33729 33733 3373D 33747 33751 3375B 33765 3E17B 3376F 33779 2777E 33783 3378D 33797 337A1 337AB 337B5 337BF 337C9 337D3 337DD 337E7 337F1 337FB 33805 3380F 33819 3A1C2 33823 3B9FA 3C11E 3B928 3382D 33837 3BA2D 3B93D 33841 3C10F Name BINT253 BINT255d REALOBOB #_102 #SyntaxErr (BINT_263d) (#110) 3REAL (#111) (Err#Kill) (Err#NoLstStk) (#12F) (#NoRoomForSt) (#132) (REALSTRSTR) (#134) (#135) (#136) (#137) (#138) (#139) (#13A) (#13B) (#13D) (#13E) INTEGER337 (#200) (Err#NoLstArg) (#304) STRREALREAL (#313) (#410) (#411) (ARRYREALREAL) (#412) (#414) (#415) (#444) (#450) Description 253d FDh 255d FFh 256d 100h 258d 102h 262d 106h 263d 107h 272d 110h 273d 111h 273d 111h 291d 123h 292d 124h 303d 12Fh 305d 131h 306d 132h 307d 133h 308d 134h 309d 135h 310d 136h 311d 137h 312d 138h 313d 139h 314d 13Ah 315d 13Bh 317d 13Dh 318d 13Eh 337d 151h 512d 200h 517d 205h 772d 304h 785d 311h 787d 313h 1040d 410h 1041d 411h 1041d 411h 1042d 412h 1044d 414h 1045d 415h 1092d 444h 1104d 450h
17
18 Addr. 3B952 3384B 33855 3BA18 3B913 3A12D 3385F 33869 3BA09 33873 277F6 27800 2780A 27814 2781E 27828 27832 2783C 27846 2768E 27698 3387D 276AC 276B6 276C0 276CA 276D4 276DE 276E8 27792 2779C 277A6 277B0 277BA 277C4 277CE 277D8 277E2 277EC Name (#451) (ARRYLISTREAL) (#452) (#454) (#455) (#4FF) (#510) (#511) (#515) (#550) (#605) (#606) (#607) (#608) (#609) (#60A) (#60B) (#60C) (#60D) (#60E) (#60F) (IDREALOB) (#611) (#612) (#613) (#614) (#615) (#616) (#617) (#618) (#619) (#61A) (#61B) (#61C) (#61D) (#61E) (#61F) (#620) (#621) Description 1105d 451h 1105d 451h 1106d 452h 1108d 454h 1109d 455h 1279d 4FFh 1296d 510h 1297d 511h 1301d 515h 1360d 550h 1541d 605h 1542d 606h 1543d 607h 1544d 608h 1545d 609h 1546d 60Ah 1547d 60Bh 1548d 60Ch 1549d 60Dh 1550d 60Eh 1551d 60Fh 1552d 610h 1553d 611h 1554d 612h 1555d 613h 1556d 614h 1557d 615h 1558d 616h 1559d 617h 1560d 618h 1561d 619h 1562d 61Ah 1563d 61Bh 1564d 61Ch 1565d 61Dh 1566d 61Eh 1567d 61Fh 1568d 620h 1569d 621h
2.1. Reference Addr. 276F2 276FC 27706 27710 2771A 27724 2772E 27738 27742 27788 33887 33891 3C17A 3C16B 08DF7 27878 3B976 3C83C 3B967 3C81E 3389B 338A5 338AF 338B9 3E7FF 3E759 3E7E9 3E743 2774C 27756 27882 338C3 27760 2776A 27774 338CD 338D7 338E1 338EB Name (#622) (#623) (#624) (#628) (#629) (#62A) (#62B) (#62C) (#62D) (#62E) (IDLISTOB) (#700) (#710) (#750) (#7FF) (#800) (#822) (#82C) (#855) (#85C) (#861) (#862) (#865) (#86E) (#8F1) (#8FD) (#9F1) (#9FD) (#A01) (#A02) Attn# ATTNERR (#A04) (#A05) (#A06) (#A11) (#A12) (#A1A) (#A21) Description 1570d 622h 1571d 623h 1572d 624h 1576d 628h 1577d 629h 1578d 62Ah 1579d 62Bh 1580d 62Ch 1581d 62Dh 1582d 62Eh 1616d 650h 1792d 700h 1808d 710h 1872d 750h 2047d 7FFh 2048d 800h 2082d 822h 2092d 82Ch 2133d 855h 2140d 85Ch 2145d 861h 2146d 862h 2149d 865h 2158d 86Eh 2289d 8F1h 2301d 8FDh 2545d 9F1h 2557d 9FDh 2561d A01h 2562d A02h 2563d A03h 2563d A03h 2564d A04h 2565d A05h 2566d A06h 2577d A11h 2578d A12h 2586d A1Ah 2593d A21h
19
20 Addr. 338F5 338FF 33909 33913 3391D 33927 33931 3393B 33945 3394F 33959 33963 3396D 33977 3C800 3C7E2 3B904 3B8F5 33981 3398B 3C8D0 03FEF 03FF9 03F8B 03FDB 03FA9 03F95 03F9F 20D6F 03FBD 03FE5 03FA9 03FD1 3C8DF 3D50D 3D52B 3D51C 2C4D2 3B7AD Name (#A22) (#A2A) (#A61) (#A62) (#A65) (#A6E) (#AA1) (#AA2) (#AAA) (#C06) (#C07) (#C08) Connecting (#C0B) (#C2C) (#C5C) (#C22) (#C55) #CAlarmErr EXTOBOB (#2111) (#2614) (#2686) TYPEREAL (TYPEEREL) TYPEIDNT (TYPECMP) (TYPELIST) (TYPERRP) (TYPESYMB) (TYPEEXT) (#2E48) (TYPELAM) (#5B11) (#A110) (#A1A0) (#AA10) (#AAA0) (#BBBB) Description 2594d A22h 2602d A2Ah 2657d A61h 2658d A62h 2661d A65h 2670d A6Eh 2721d AA1h 2722d AA2h 2730d AAAh 3078d C06h 3079d C07h 3080d C08h 3082d C0Ah 3083d C0Bh 3116d C2Ch 3164d C5Ch 3106d C22h 3157d C55h 3583d DFFh 3584d E00h 8465d 2111h 9748d 2614h 9862d 2686h 10547d 2933h 10581d 2955h 10568d 2948h 10615d 2977h 10868d 2A74h 10902d 2A96h 10936d 2AB8h 10970d 2ADAh 11848d 2E48h 11885d 2E6Dh 23313d 5B11h 41232d A110h 41376 A1A0h 43536d AA10h 43680d AAA0h 48059d BBBBh
2.1. Reference Addr. 08F1F 38266 03880 091B4 350F5 0803F 08ECE 0657E 33995 03826 39277 038DC 3399F Name (#D6A8) (#FFFF) (#102A8) (#2D541) (#37258) (#414C1) (#536A8) (#61441) #EXITERR (#A8241) (#B437D) (#E13A8) MINUSONE Description 54952d D6A8h 65535d FFFFh 66216d 102A8h 185665d 2D541h 225880d 37258h 267457d 414C1h 341672d 536A8h 398401d 61441h 458752d 70000h 688705d A8241h 738173d B437Dh 922536d E13A8h 1048575d FFFFFh
21
2.1.2
Addr. 37287 37294 37305 36B12 37315 37328 3733A 3734A 3735C 3736E 37380 37394 373A8 3558C 355A5 3596D 36AD6 36AEA 36B26 36AFE
22 Addr. 35E75 360BB 36568 35EA2 3657C Name ZEROSWAP ZEROOVER ZEROFALSE ONESWAP ONEFALSE Description ( ob #0 ob ) ( ob ob #0 ob ) ( #0 F ) ( ob #1 ob ) ( #1 F )
2.1.3
Addr. 262F1 35D08 35EB6 3F481 262EC 2F244 2F31F 05A03 2F17E
Conversion
Name COERCE COERCEDUP COERCESWAP COERCE2 %ABSCOERCE (COERCE&CKSGN) C%># HXS># 2HXSLIST? Description ( % # ) ( % # # ) ( ob % # ob ) ( % %' # #' ) ( % # ) ( % # flag ) TRUE if real is greater 0, else FALSE. ( C% # #' ) ( hxs # ) ( { hxs hxs' } # #' ) Converts list of two hxs to two bints. Generates "Bad Argument Value" for invalid input. ( chr # ) ( Z # ) Convert Z to bint. Returns FFFFF for overows. Returns 0 for negative numbers. ( z # ) Coerces Z to #, overow error if Z<0 or Z>9999. 10000 is used to insure that the #*6 can be represented in BCD on a 5 nibbles eld. ( z2 z1 #2 #1 ) Converts 2 zints to bints.
05A51 0EF006
CHR># Z2BIN
19D006
Z>#
0F0006
COERCE2Z
2.1. Reference
23
2.1.4
Addr. 03DBC 03DEF 03E2D 355FD 35602 35607 3560C 35611 35616 3561B 35620 3562A 03DE0 2F13D
Arithmetic Functions
Name #+ #1+ #2+ #3+ #4+ #5+ #6+ #7+ #8+ #9+ #10+ #12+ #(CK#-) Description ( # #' #+#' ) ( # #+1 ) ( # #+2 ) ( # #+3 ) ( # #+4 ) ( # #+5 ) ( # #+6 ) ( # #+7 ) ( # #+8 ) ( # #+9 ) ( # #+10 ) ( # #+12 ) ( # #' #-#' ) ( # #' #'' ) If #' is greater than #, returns #0, otherwise returns #-#'. ( # #-1 ) ( # #-2 ) ( # #-3 ) ( # #-4 ) ( # #-5 ) ( # #-6 ) ( # #' #*#' ) ( # #' #*#' ) 0 result FFFFF ( # #*2 ) ( # #*6 ) ( # #*8 ) ( # #*10 ) ( # #' #r #q ) ( # #/2 ) Rounded down. ( # #' #-#'+1 ) aka: #-+1 ( # #' #+#'-1 ) $1-+ is a typo in EXTABLE. aka: #+-1, $1-+
03E0E 03E4E 355DF 355DA 355D5 355D0 03EC2 2632D 03E6F 356B8 3569B 35675 03EF7 03E8E 36815 36851
24 Addr. 35552 357FC 35E39 36093 3581F 35E4D 360A7 35830 35E61 2F222 35841 28071 3601B 281D5 35E89 35912 3571E 35956 3674D 3683D 357BB 3592B 29786 28099 36829 280AD 28989 367ED 36775 367C5 36761 367B1 36801 28001 Name #-#2/ #+DUP #+SWAP #+OVER #-DUP #-SWAP #-OVER #1+DUP #1+SWAP #1+ROT #1-DUP #1-SWAP #1-ROT #1-UNROT #1-1SWAP DUP#1+ DUP#2+ DUP#12DUP#+ DROP#1SWAP#SWAP#1+ ('RSWAP#1+) SWAP#1+SWAP SWAP#1SWAP#1-SWAP (SWAPDROP#1-) SWAPOVER#OVER#+ OVER#ROT#+ ROT#ROT#1+ ROT#1+UNROT
2. Binary Integers (BINTS) Description ( # #' (#-#')/2 ) ( # #' #+#' #+#' ) ( ob # #' #+#' ob ) ( ob # #' ob #+#' ob ) ( # #' #-#' #-#' ) ( ob # #' #-#' ob ) ( ob # #' ob #-#' ob ) ( # #+1 #+1 ) ( ob # #+1 ob ) ( ob ob' # ob' #+1 ob ) ( # #-1 #-1 ) ( ob # #-1 ob ) aka: pull ( ob ob' # ob' #-1 ob ) ( ob ob' # #-1 ob ob' ) ( # 1 #-1 ) Returns the bint ONE and the result. ( # # #+1 ) ( # # #+2 ) ( # # #-1 ) ( # #' # #' #+#' ) aka: DUP3PICK#+ ( # ob #-1 ) ( # #' #'-# ) ( # ob ob #+1 ) aka: SWP1+ ( # nob #+1 ) nob is the next object in the runstream. ( # ob #+1 ob ) ( # ob ob #-1 ) ( # ob #-1 ob ) ( ob # #-1 ) ( # #' #' #-#' ) ( # #' # #'+# ) ( # #' # #'-# ) ( # ob #' ob #'+# ) ( # ob #' ob #'-# ) ( # ob ob' ob ob' #+1 ) ( # ob ob' #+1 ob ob' )
2.1. Reference Addr. 35E07 36789 3679D 35E20 35511 3551D 03EB1 Name ROT#+SWAP 3PICK#+ 4PICK#+ 4PICK#+SWAP #MIN #MAX #AND Description ( # ob #' #'+# aka: ROT+SWAP ( # ob #' # ob ( # ob1 ob2 #' ( # ob1 ob2 #' aka: 4PICK+SWAP ( # #' #'' ) ( # #' #'' ) ( # #' #'' ) Bitwise AND.
25
2.1.5
Addr. 03D19 03D4E 03CE4 03D83 03CC7 03CA6 3530D 352FE 36711 352F1 352E0 366FD 366BC 36739 358C2 358F8 363CE 35268 358DC 36694 352BD 366A8
Tests
Name #= #<> #< #> #0<> #0= #1<> #1= #2<> #2= #3= #5= #<3 #>1 2DUP#< 2DUP#> ONE_EQ OVER#= 2DUP#= OVER#0= DUP#0= OVER#< Description ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) aka: ONE#> ( # #' # #' flag ( # #' # #' flag ( # flag ) Uses EQ test. ( # #' # flag ) ( # #' # #' flag ( # #' # #' flag ( # # flag ) ( # #' # flag )
) )
) )
26 Addr. 3531C 36725 3532B 366D0 36676 Name DUP#1= OVER#> DUP#0<> DUP#<7 2#0=OR
2. Binary Integers (BINTS) Description ( # # flag ) ( # #' # flag ) ( # # flag ) ( # # flag ) Returns TRUE if the argument is smaller then #7. ( # # flag ) Returns TRUE if either argument is zero.
28
3. Real Numbers
COERCE. Below there is a list of more conversion functions, and other functions related to real numbers.
3.1
3.1.1
Reference
Built-in Real Numbers
Name %-MAXREAL %-9 %-8 %-7 %-6 %-5 %-4 %-3 %-2 %-1 %-MINREAL %0 %MINREAL %.1 %.5 (%-.5) %1 (%1.8) %2 %e %3 %PI %4 %5 %6 %7 %8 %9 %10 %11 Description -9.99E499 -9 -8 -7 -6 -5 -4 -3 -2 -1 -1E-499 0 1E-499 .1 .5 -.5 1 1.8 2 e 3 4 5 6 7 8 9 10 11
Addr. 2FB0A 2FAB1 2FA9C 2FA87 2FA72 2FA5D 2FA48 2FA33 2FA1E 2FA09 2FB34 2F937 2FB1F 27118 339BE 339D3 2F94C 270EE 2F961 339A9 2F976 2FAC6 2F98B 2F9A0 2F9B5 2F9CA 2F9DF 2F9F4 339E8 2FCE6
3.1. Reference Addr. 2FCFB 2FD10 2FD25 2FD3A 2FD4F 2FD64 2FD79 2FD8E 2FDA3 2FDB8 2FDCD 2FDE2 2FDF7 2FE0C 2FE21 2FE36 2FE4B 2FE60 2FE75 2FE8A 2FE9F 2FEB4 2FEC9 2FEDE 27103 27E5D 339FD 33A12 33A3C 33A27 2FC7D 2FC92 2FCA7 4EA22 2FCBC 2FCD1 4EA37 4EA4C 4EA61 Name %12 %13 %14 %15 %16 %17 %18 %19 %20 %21 %22 %23 %24 %25 %26 %27 (%28) (%29) (%30) (%31) (%32) (%33) (%34) (%35) %80 %100 %180 (%200) (%400) %360 (%1200) (%2400) (%4800) (%TICKSsec) (%9600) (%15360) (%TICKSmin) (%TICKShour) (%TICKSday) Description 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 80 100 180 200 400 360 1200 2400 4800 8192 9600 15360 491520 29491200 707788800
29
3. Real Numbers Description 4954521600 9.99E499 ( 6.28318530718 ) ( 360. ) ( 400. ) Returns the angle of a full circle, corresponding to the current angular mode.
3.1.2
Addr. 2FB49 2FBE5 30DC8 2FBFF 2DA11 2FB63 2DA2B 2FB7D 2FB97 2FADB 30017 2FBB1 2FBCB 27A89 30BEA 2FC19 30CC7 30CEB
3.1. Reference
31
3.1.3
Addr. 282CC
3.1.4
Addr. 2FFAC 35ECA 2FF9B 30E47 30E5B 262F6 3F495 36BFA 2EFCA 05D2C 2B3FD
Conversion
Name %>%% %>%%SWAP %%>% 2%>%% 2%%>% UNCOERCE UNCOERCE2 UNCOERCE%% HXS>% C%>% %IP># Z>R Z2%% OBJ2REAL Description ( % %% ) ( ob % %% ob ) ( %% % ) ( % % %% %% ) ( %% %%' % %' ) ( # % ) ( # # % % ) ( # %% ) ( hxs % ) ( C% %re %im ) ( % #IP(ABS(%)) ) Does ABS too. ( Z % ) Converts zint to real. ( Z %% ) Converts integer to long real. ( z/% % ) Transforms ob in real.
3.1.5
Addr. 3035F 25E69 26F36 3036C 26F4A 30346 303A7
Real Functions
Name %+ %+SWAP %1+ %%1%>%%%* Description ( % %' %+%' ) ( ob % %' %+%' ob ) ( % %+1 ) ( % %' %-%' ) ( % %-1 ) ( % %' %%-%%' ) ( % %' %*%' )
32 Addr. 35C18 303E9 3045B 302EB 3030B 302C2 3049A 30489 304F4 304E1 3051A 3052D 30559 30592 3056C 305A5 305DA 3062B 3067C 306AC 306DC 3070C 30799 307C5 307D8 307EB 307FE 30811 3031B 30824 30938 3094B 30971 3095E 305C7 30723 30746 30F14 Name %10* %/ % %ABS %CHS %SGN %1/ %>%%1/ %SQRT %>%%SQRT %EXP %EXPM1 %LN %LNP1 %LOG %ALOG %SIN %COS %TAN %ASIN %ACOS %ATAN %SINH %COSH %TANH %ASINH %ACOSH %ATANH %MANTISSA %EXPONENT %FP %IP %FLOOR %CEIL %MOD %ANGLE %>%%ANGLE RNDXY Description ( % %*10 ) ( % %' %/%' ) ( % %' %%' ) ( % %' ) ( % -% ) ( % -1/0/1 ) ( % 1/% ) ( % 1/%% ) ( % % ) ( % %% ) ( % e% ) ( % e%-1 ) ( % LN% ) ( % LN(%+1) ) ( % LOG% ) ( % 10% ) ( % SIN% ) ( % COS% ) ( % TAN% ) ( % ASIN% ) ( % ACOS% ) ( % ATAN% ) ( % SINH% ) ( % COSH% ) ( % TANH% ) ( % ASINH% ) ( % ACOSH% ) ( % ATANH% ) ( % %mant ) ( % %expn ) ( % %frac ) ( % %int ) ( % %maxint <=% ) ( % %minint >=% ) ( % %' %rem ) ( %x %y %ang ) ( %x %y %%ang ) ( % %places %' )
3. Real Numbers
3.1. Reference Addr. 30F28 3084D 30860 30837 30AAF 3046C Name TRCXY %COMB %PERM %NFACT %FACT %NROOT
33 Description ( % %places %' ) ( % %' COMB(%,%') ) ( % %' PERM(%,%') ) ( % %! ) Calculates factorial of number. ( % gamma(%+1) ) Calculates gamma(x+1). ( % %n %' ) Calculates the %nth root of the real number. Equivalent to user function XROOT. ( % %' %lesser ) ( % %' %greater ) ( % %' %max %min ) ( %random ) Returns next random number. ( %seed ) System level RDZ: seeds the random number generator. ( % ) Stores given number as random number seed. ( % %' %'/% * 100 ) ( % %' %pctotal ) ( % %' %pcchange ) ( %deg %rad ) ( %rad %deg ) ( %r %ang %x %y ) ( %x %y %r %ang ) ( %r %ang %ph %x %y %z )
3.1.6
Addr. 3032E 3033A 30385 3602F 35EDE 36C7C
34 Addr. 303D3 36C22 36BE6 3044A 51D006 30612 30767 302DB 306F3 3073A 30757 306C3 302FB 3047D 30642 30653 307B2 30663 30507 30546 30984 3057F 300C7 30E83 30EB0 305F1 30602 30780 304D5 30693 Name %%/ SWAP%%/ %%/>% %% CK%%SQRT %%SINRAD %%ANGLERAD %%ABS %%ACOSRAD %%ANGLE %%ANGLEDEG %%ASINRAD %%CHS %%1/ %%COS %%COSDEG %%COSH %%COSRAD %%EXP %%LN %%FLOOR %%LNP1 %%MAX %%R>P %%P>R %%SIN %%SINDEG %%SINH %%SQRT %%TANRAD
3. Real Numbers Description ( %% %%' %%/%%' ) ( %% %%' %%'' ) ( %% %%' % ) ( %% %%' %%%%' ) ( %% %%/C%% ) ( %% %%' ) ( %% %%' ) ( %% %%abs ) ( %% %%rad ) ( %%x %%y %%ang ) ( %%x %%y %%deg ) ( %% %%rad ) ( %% -%% ) ( %% 1/%% ) ( %% %%cos ) ( %%deg %%cos ) ( %% %%cosh ) ( %%rad %%cos ) ( %% e%% ) ( %% ln %% ) ( %% %%maxint ) aka: %%INT ( %% %%ln(%%+1) ) ( %% %%' %%max ) ( %%x %%y %%radius %%angle ) ( %%r %%ang %%x %%y ) ( %% %%sin ) ( %%deg %%sin ) ( %% %%sinh ) ( %% %% ) ( %%rad %%tan )
3.1. Reference
35
3.1.7
Addr. 302AC 302B7 3025C 302A1 30275 3028B 30156 36C0E 301BA 30123 30184 301E2 3020A 30296 3026A 30280 30145 301A6 30112 301F6 30173 301CE
Tests
Name %= %<> %< %<= %> %>= %0= DUP%0= %0<> %0< %0> %0>= %%< %%<= %%> %%>= %%0= %%0<> %%0< %%0<= %%0> %%0>= Description ( % %' flag ) ( % %' flag ) ( % %' flag ) ( % %' flag ) ( % %' flag ) ( % %' flag ) ( % flag ) ( % flag ) ( % flag ) Can be used to change a user ag into a system ag. ( % flag ) ( % flag ) ( % flag ) ( %% %%' flag ) ( %% %%' falg ) ( %% %%' flag ) ( %% %%' flag ) ( %% flag ) ( %% flag ) ( %% flag ) ( %% flag ) ( %% flag ) ( %% flag )
4.1
4.1.1
Reference
Builtin Complex Numbers
Name C%0 C%1 C%-1 C%%1 Description (0,0) (1,0) (-1,0) (%%1,%%0)
36
4.1. Reference
37
4.1.2
Conversion
Name C%%>C% %>C% SWAP%>C% Re>C% C>Re% C>Im% E%%>C%% %%>C% C%>%% C%>%%SWAP C%%>%% C2C%% ZZ2C%%ext C%>C%% RIXCext IRXCext Description ( C%% C% ) ( %re %im C% ) ( %im %re C% ) ( %re C% ) ( C% %re ) ( C% %im ) ( %%re %%im C%% ) Converts long reals to long complex. ( %%re %%im C% ) ( C% %%re %%im ) ( C% %%im %%re ) ( C%% %%re %%im ) ( C C%% ) Converts Gaussian integer to long complex. ( Zre Zim C%% ) Converts Gaussian integer to long complex. ( C% C%% ) Converts complex to long complex. ( Zre Zim C ) Convert integers to complex. ( Zim Zre C ) Convert integers to complex.
Addr. 261D9 05C27 362F2 261FC 25E9C 25E9B 18C006 261CF 25E82 25E83 05DBC 188006 189006 18B006 15E006 15F006
4.1.3
Functions
Name C%CC C%CR C%RC C%ABS CZABS C%CHS C%1/ C%SQRT C%SGN Description ( C% C%' C%'' ) ( C% % C%' ) ( % C% C%' ) ( C% % ) ( complex real ) Absolute value. ( C% -C% ) ( C% 1/C% ) ( C% C% ) ( C% C%/C%ABS )
Addr. 25E8F 25E90 25E94 25E84 50C006 261ED 25E81 25E98 25E95
38 Addr. 261F2 25E88 25E91 25E92 25E93 25E87 25E96 25E8D 25E99 25E89 25E85 25E8B 25E97 25E8E 25E9A 25E8A 25E86 25E8C 261DE 261E3 515006 517006 Name C%CONJ C%ARG C%EXP C%LN C%LOG C%ALOG C%SIN C%COS C%TAN C%ASIN C%ACOS C%ATAN C%SINH C%COSH C%TANH C%ASINH C%ACOSH C%ATANH C%%CHS C%%CONJ ARG2 QUADRANT
4. Complex Numbers Description ( C% C%' ) ( C% % ) ( C% eC% ) ( C% ln C% ) ( C% log C% ) ( C% 10C% ) ( C% sin C% ) ( C% cos C% ) ( C% tan C% ) ( C% asin C% ) ( C% acos C% ) ( C% atan C% ) ( C% sinh C% ) ( C% cosh C% ) ( C% tanh C% ) ( C% asinh C% ) ( C% acosh C% ) ( C% atanh C% ) ( C%% -C%% ) ( C%% C%%' ) ( im re arg(ob) ) ARG. ( re im ?re>0 ?im>0 newre newim % ) Returns Z0 Z1 Z-2 or Z-1 so that arg of corresponding complex number is Z * /2 + theta where is in the interval [0, /2]. ( C%% C%%' )
51E006
C%%SQRT
4.1.4
Addr. 261E8 261D4
Tests
Name C%0= C%%0= Description ( C% flag ) ( C%% flag )
39
40
6.1. Reference
41
6.1
6.1.1
Reference
Built-in Characters
Name CHR_00 CHR_Newline CHR_... CHR_Space CHR_DblQuote CHR_# CHR_LeftPar CHR_RightPar CHR_* CHR_+ CHR_, CHR_CHR_. CHR_/ CHR_0 CHR_1 CHR_2 CHR_3 CHR_4 CHR_5 CHR_6 CHR_7 CHR_8 CHR_9 CHR_: CHR_; CHR_< CHR_= CHR_> CHR_A CHR_B Description '\00' (character 0d 00h) The NULL character. '\0a' (character 10d 0Ah) The newline character. '...' (character 31d 1Fh) ' ' (character 32d 20h) The space character. '"' (character 34d 22h) '#' (character 35d 23h) '(' (character 40d 28h) ')' (character 41d 29h) '*' (character 42d 2Ah) '+' (character 43d 2Bh) ',' (character 44d 2Ch) '-' (character 45d 2Dh) '.' (character 46d 2Eh) '/' (character 47d 2Fh) '0' (character 48d 30h) '1' (character 49d 31h) '2' (character 50d 32h) '3' (character 51d 33h) '4' (character 52d 34h) '5' (character 53d 35h) '6' (character 54d 36h) '7' (character 55d 37h) '8' (character 56d 38h) '9' (character 57d 39h) ':' (character 58d 3Ah) ';' (character 59d 3Bh) '<' (character 60d 3Ch) '=' (character 61d 3Dh) '>' (character 62d 3Eh) 'A' (character 65d 41h) 'B' (character 66d 42h)
Addr. 33D2B 33F77 33D32 33F93 33D39 33D40 33F70 33F85 33D47 33D4E 33D55 33D5C 33D63 33D6A 33D71 33D78 33D7F 33D86 33D8D 33D94 33D9B 33DA2 33DA9 33DB0 33DB7 33DBE 33DC5 33DCC 33DD3 33DDA 33DE1
42 Addr. 33DE8 33DEF 33DF6 33DFD 33E04 33E0B 33E12 33E19 33E20 33E27 33E2E 33E35 33E3C 33E43 33E4A 33E51 33E58 33E5F 33E66 33E6D 33E74 33E7B 33E82 33E89 33FA1 33FA8 33F9A 33E90 33E97 33E9E 33EA5 33EAC 33EB3 33EBA 33EC1 33EC8 33ECF 33ED6 33EDD Name CHR_C CHR_D CHR_E CHR_F CHR_G CHR_H CHR_I CHR_J CHR_K CHR_L CHR_M CHR_N CHR_O CHR_P CHR_Q CHR_R CHR_S CHR_T CHR_U CHR_V CHR_W CHR_X CHR_Y CHR_Z CHR_[ CHR_] CHR_UndScore CHR_a CHR_b CHR_c CHR_d CHR_e CHR_f CHR_g CHR_h CHR_i CHR_j CHR_k CHR_l Description 'C' (character 'D' (character 'E' (character 'F' (character 'G' (character 'H' (character 'I' (character 'J' (character 'K' (character 'L' (character 'M' (character 'N' (character 'O' (character 'P' (character 'Q' (character 'R' (character 'S' (character 'T' (character 'U' (character 'V' (character 'W' (character 'X' (character 'Y' (character 'Z' (character '[' (character ']' (character '_' (character 'a' (character 'b' (character 'c' (character 'd' (character 'e' (character 'f' (character 'g' (character 'h' (character 'i' (character 'j' (character 'k' (character 'l' (character
67d 68d 69d 70d 71d 72d 73d 74d 75d 76d 77d 78d 79d 80d 81d 82d 83d 84d 85d 86d 87d 88d 89d 90d 91d 93d 95d 97d 98d 99d 100d 101d 102d 103d 104d 105d 106d 107d 108d
43h) 44h) 45h) 46h) 47h) 48h) 49h) 4Ah) 4Bh) 4Ch) 4Dh) 4Eh) 4Fh) 50h) 51h) 52h) 53h) 54h) 55h) 56h) 57h) 58h) 59h) 5Ah) 5Bh) 5Dh) 5Fh) 61h) 62h) 63h) 64h) 65h) 66h) 67h) 68h) 69h) 6Ah) 6Bh) 6Ch)
6.1. Reference Addr. 33EE4 33EEB 33EF2 33EF9 33F00 33F07 33F0E 33F15 33F1C 33F23 33F2A 33F31 33F38 33F3F 33FAF 33FB6 33F5B 33F69 33F62 33F46 33F4D 33F54 33F7E 33F8C 33FBD 33FC4 33FCB Name CHR_m CHR_n CHR_o CHR_p CHR_q CHR_r CHR_s CHR_t CHR_u CHR_v CHR_w CHR_x CHR_y CHR_z CHR_{ CHR_} CHR_Angle CHR_Integral CHR_Deriv CHR_-> CHR_<< CHR_>> CHR_Pi CHR_Sigma CHR_<= CHR_>= CHR_<> Description 'm' (character 'n' (character 'o' (character 'p' (character 'q' (character 'r' (character 's' (character 't' (character 'u' (character 'v' (character 'w' (character 'x' (character 'y' (character 'z' (character '{' (character '{' (character ' ' (character ' ' (character ' ' (character '' (character '' (character '' (character ' ' (character '' (character '' (character '' (character '=' (character
43
109d 110d 111d 112d 113d 114d 115d 116d 117d 118d 119d 120d 121d 122d 123d 125d 128d 132d 136d 141d 171d 187d 135d 133d 137d 138d 139d
5Dh) 6Eh) 6Fh) 70h) 71h) 72h) 73h) 74h) 75h) 76h) 77h) 78h) 79h) 7Ah) 7Bh) 7Dh) 80h) 84h) 88h) 8Dh) ABh) BBh) 87h) 85h) 89h) 8Ah) 8Bh)
6.1.2
Addr. 055DF 33B55 33B39
Built-in Strings
Name NULL$ SPACE$ NEWLINE$ Description "" Empty string. " " aka: tok_ "\0a" Newline.
44 Addr. 27195 340A4 340B4 33FF2 33FE2 33FD2 34076 34064 34088 34002 34010 3401E 3402C 3403A 34048 34056 33B91 33B85 33BFD 33B9D 2D848 2D86D 2D8AD 33A77 33AD7 33C09 272D9 33C4D 33C59 33CAD 33CB9 33ABF Name CRLF$ $_RAD $_GRAD $_XYZ $_R<Z $_R<< $_EXIT $_ECHO $_Undefined $_<<>> $_{} $_[] $_'' $_:: $_LRParens $_2DQ tok, tok' toktok. tok_g tok_m tok_s tok{ tok<< tok= tok-> tok0 tok1 tok8 tok9 tokESC
6. Characters and Strings Description "\0d\0a" Carriage return and line feed. "RAD" "GRAD" "XYZ" "R Z" "R<angle>Z" "R " "R<angle><angle>" "EXIT" "ECHO" "Undened" "" "{}" "[]" "''" Two single quotes. "::" "()" """" Two double quotes. "," "'" One single quote. "-" "." "g" "m" "s" "{" "" "=" "" "0" "1" "8" "9" "<ESC>" Escape character.
6.1. Reference Addr. 33AE3 33B79 33A8F 33AA7 33AB3 33BD9 33BF1 33BE5 33C65 33C71 33C7D 33C89 33C95 33CA1 33BA9 33ACB 33AEF 33C2D 33C3F 33C21 33B45 33BB5 33BC1 33AFB 33C15 33B61 33A9B 33B07 33A6B 33A51 33BCD 33A83 33B13 Name tokexponent tokquote toksharp (tok$) (tok&) (tok*) (tok+) (tok/) (tok2) (tok3) (tok4) (tok5) (tok6) (tok7) (tok;) (tok>>) (tokanglesign) (tokCTGROB) (tokCTSTR) (tokDER) ($DER) (toklparen) (tokrparen) (tokSIGMA) (tokSQRT) (tokUNKNOWN) (tokuscore) (tokWHERE) (tok[) (tok]) (tok) (tok}) (14SPACES$) Description "E" """ One double quote. "#" "$" "&" "*" "+" "/" "2" "3" "4" "5" "6" "7" "8" "" " " "GROB" "C$" " " "der" "(" ")" "" " " "UNKNOWN" "_" "|" "[" "]" "" "}" " " String of 14 spaces.
45
46
6.1.3
Addr. 35D94 04D3E 25EEC
6.1.4
Addr. 25F77 25F72
Conversion
Name #>$ #:>$ Description ( # $ ) Creates string from the bint (decimal). ( # "#: " ) Creates string from the bint and appends a colon and a space. Ex: "1: " ( % $ ) Converts real number into string using current display mode. aka: a%>$, ( id/lam $ ) Converts identier into string. ( % $ ) Creates string of the character with the number specied. ( Z $ ) Converts Z into a string (decimal). ( hxs $ ) Uses current display mode and wordsize. ( hxs $ ) Does hxs>$ and then appends base character.
25F0F
a%>$
05BE9 25EB3
ID>$ DOCHR
6.1. Reference
47
6.1.5
Addr. 05A75
Management
Name #>CHR Description ( # chr ) Returns character with the specied ASCII code. ( chr $* Strings ) Converts a character into a string. ( $ #length ) Returns length in bytes. ( $ $ # ) DUP then LEN$. ( $ ob $ ob #len ) OVER then LEN$. ( $ "$\0a" ) Appends newline character to string. aka: NEWLINE&$ ( $ $' ) Appends carriage return and line feed to string. ( $ chr ) Returns rst character of string as a string, or NULL$ for null string. ( $ $' ) Returns string without rst character, or NULL$ for null string. ( $ $find start# #pos ) Search for $nd in $search, starting at position #start. Returns position of $nd or 0 if not found. Same entry as POSCHR. ( $search chr #start #pos ) Same entry as POS$. ( $ $find #limit #pos ) Searches backwards from #limit to #1. Same entry as POSCHRREV. ( $seach chr #start #pos ) Same entry as POS$REV.
2F31A
APNDCRLF
050ED
CAR$
0516C
CDR$
378FA
POS$
378FA 37906
POSCHR POS$REV
37906
POSCHRREV
6. Characters and Strings Description ( $ $' ) If the string is longer than 22 characters, truncates it to 21 characters and appends "...". ( #len $ ) Creates a string with the specied number of spaces. ( id ob $ ) Creates string of the form "id: ob". ( $ $' $'' ) Separates string at the rst newline. $'' is the substring before the rst newline; $' the substring after the rst newline. ( $ #width $' ) Replace SPACE chars with NEWLINE in order to t the text in the given #width. Used by ViewStrObject. Very fast (bang type). ( $ #start #end $' ) Returns substring between specied positions. ( $ #start #end+#1 $' ) Does #1- and then SUB$. ( $ #end $' ) Returns substring from the rst character to the character before the specied position. aka: 1_#1-SUB ( $ #start $' ) Returns substring from the specied start position to the end (inclusive). ( $ #start-#1 $' ) Returns substring from the specied start position to the end (exclusive). ( ob $ # #' $' ob ) SUB$ then SWAP. ( $ # #' ) Returns bint with ASCII code of character at the specied position.
2F16D
Blank$
2EEF0 25EF8
PromptIdUtil SEP$NL
09A003
(WRAP$)
362B6
LAST$
362CA
#1+LAST$
35DA8 2A5CA
SUB$SWAP SUB$1#
49 Description ( hxs #nibs hxs' ) Appends null characters to the string. Since refers to the number of nibbles, you must use a number twice as large as the number of null characters you want appended. ( $ $' $+$' ) Concatenates two strings. ( ob $ $' $+$' ob ) &$ then SWAP. ( $ $' $+$' ) Tries &$, if not enough memory does !!append$?. ( $ $' $'+$ ) Does SWAP then !append$. ( ob $ $' $+$' ob ) !append$ then SWAP. ( $ $' $+$' ) Attempts append "in place" if target is in tempob. ( $ $' $+$' ) Tries appending "in place". ( $ $' $'+$ ) Tries inserting "in place". ( $ chr $' ) Prepends character to string ( $ chr $' ) Appends character to string. ( $ $' ) Appends space to string. ( $ $' $'+$ ) Concatenates two strings. ( %dt %tm "dy dt tm" ) Returns string representation of time, using current format. Example: "WED 06/24/98 10:00:45A" ( $1 $2 $' ) Logical AND. Errors if strings are not the same length.
25E7C
AND$
6. Characters and Strings Description ( $ $' $'' ) Logical OR. Errors if strings are not the same length. ( $ $' $'' ) Logical XOR. Errors if strings are not the same length. ( ) HP49 character browser. This is an interactive application from which characters can be echoed into the command line.
25F0D
XOR$
2F1A7
CHARSEDIT
6.1.6
Addr. 25EB7 2EF62
Parsing Strings
Name DOSTR> palparse Description ( $ ? ) Internal version of STR. ( $ ob T ) ( $ $ #pos $' F ) Tries parsing a string into an object. If successful, returns object and TRUE, otherwise returns position of error, the offending part of the string $', and FALSE. If the string contains several arguments, the resulting object is a secondary containing these objects. ( F <SKIP> ) ( T T <COLA> ) ( T T ) ( F T F T <SEMI> ) ( $1 $1 :: $1 <Ob1> ; ) ( $1 $2 :: $1 <Ob2> <Rest> ; ) ( GNT data $1 $1 :: GNT data GetNextToken ; ) ( GNT data $1 $2 :: $1 <Ob1> <Rest> ; ) ( NULL$ :: ; ) ( $ :: $ <Ob1> <Rest> ; ) ( hxs-mask $ #start hxs-mask $ #next $token )
29E67 25EDB
nultrior GetNextToken
51 Description ( hxs-mask $ #loc $_tok hxs-mask $ #next $match ) ( ob $parsed #pos $' ) Uses DispBadToken to re-edit the parsed string and displays "Syntax Error". ( ob $parsed #pos $' ) Re-edits the parsed string, positions the cursor to the location of the error. Used by ParseFail.
2EF6F
DispBadToken
6.1.7
Addr. 2F191
Decompilation
Name !DcompWidth Description ( # ) Sets the width (in characters) of decompiled strings. This width is used to cut the resulting string (for stack display) or to break it into lines (mostly for editing). Note that most decompilation entries reset this value to the stack or editor width. Use stkdecomp$w and editdecomp$w to make sure the current width is used and not changed. ( # ) Recalls the width of decompiled strings (in characters). ( ) Sets DcompWidth to the standard value for stack display, either 19 or 30 characters, depending on system ag 72 (stack minifont). ( ) Sets DcompWidth to the width for editing, either 21 or 32 characters, depending on system ag 73 (edit minifont). ( ob $ ) Decompiles for stack display using the current DcompWidth to cut the string if it is too long.
2F190
DcompWidth@
26459
setStdWid
2645E
setStdEditWid
25F13
stkdecomp$w
6. Characters and Strings Description ( ob $ ) Calls setStdWid and decompiles for stack display (cutting the string if necessary). ( ob $ ) Same as 1stkdecomp$w. ( ob $ ) Same as Decomp1Line but enforce RPN mode (system ag 95 clear) during execution. ( id $ ) Makes a string from the variable name and its contents (decompiled with Decomp1Line), for display with the review key. ( ob $ ) Sets 32 as DcompWidth and decompiles using stkdecomp$w. ( ob $ ) Same as DecompStd1Line32 but enforce RPN mode (system ag 95 clear) during execution. ( ob $ ) Calls setStdWid and decompiles, cutting if the string becomes too long. ( ob $ ) Same as DecompStd1Line but enforce RPN mode (system ag 95 clear) during execution. ( ob # $ ) Calls setStdWid and decompiles ob (UserRPL components only), breaks the string into lines and returns the rst #+1 lines. Used for multiline display in stack level 1. ( ob # $ ) Same as Decomp#Disp but enforce RPN mode (system ag 95 clear) during execution.
2A842 2A904
Decomp1Line
RPNDecomp1Line
25E6F
>Review$
2A8E4
DecompStd1Line32
2A9C4
RPNDecompStd1Line32
2A8C9
DecompStd1Line
2A9A4
RPNDecompStd1Line
2A893
Decomp#Disp
2A964
RPNDecomp#Disp
53 Description ( ob # $ ) Similar to Decomp#Disp, but the returned string is an internal representation of the different lines to be displayed. Used for multiline display in stack level 1. ( ob # $ ) Same as Decomp#Line but enforce RPN mode (system ag 95 clear) during execution. ( ob $ ) Decompiles entire object for editing. It only decompiles the UserRPL components. Some System RPL entries like TakeOver are simply skipped, others are written as "External". Breaks the resulting strings into lines using the current DcompWidth. ( ob $ ) Calls setStdEditWid and the decompiles for editing like editdecomp$w. ( ob $ ) Same as EDITDECOMP$. ( ob $ ) Same as DecompEdit but enforce RPN mode (system ag 95 clear) during execution. ( ob $ ) Calls DecompEdit with a few checks around it. ( ob $ ) Calls setStdWid and decompiles entire object (UserRPL components only). Breaks the string into lines using DcompWidth as width. ( ob $ "ob$" ) Applies DECOMP$ to ob and concatenates with the string. ( $ ob "$ob" ) Applies DECOMP$ to ob and concatenates with the string.
2A944
RPNDecomp#Line
25F11
editdecomp$w
25ECE
EDITDECOMP$
2A85D 2A924
DecompEdit RPNDecompEdit
2AA43
AlgDecomp
25EAA
DECOMP$
39CB3
(ob&$)
39C9F
($&ob)
6. Characters and Strings Description ( $ $ ) ( ob $ ) Internal version of STR. ( id/ob $ ) Like DO>STR but without quotes for id. ( ob $ ) Calls setStdEditWid and decompiles the entire object (UserRPL only) into a single line. ( ob $ ) Same as DecompEcho but enforce RPN mode (system ag 95 clear) during execution. ( % #width $ ) Decompiles a real number into a string of the given #width. It will drop less signicant digits or add zeros as needed, but will also exceed #width when necessary. E.g. "1.e-33" cannot be written with less than 7 characters, so even if #width is less, 7 chars will be used. %0 is always decompiled as "0". ( ob $ ) The decompiler used by stkdecomp$w, 1stkdecomp$w, Decomp1Line, DecompStd1Line32. DcompWidth must be set before this is called. ( ob # $ ) The decompiler used by Decomp#Line. DcompWidth must be set before this is called. ( ob $ ) The decompiler used by editdecomp$w, DecompEdit, EDITDECOMP$. DcompWidth must be set before this is called. ( ob $ ) The decompiler used by DecompEcho. DcompWidth must be set before this is called.
1A7006 2A8AE
DO>STRID DecompEcho
2A984
RPNDecompEcho
2F1BF
Decomp%Short
001004
FSTR1
003004
FSTR3
004004
FSTR4
005004
FSTR5
55 Description ( ob # $ ) The decompiler used by Decomp#Line. DcompWidth must be set before this is called. ( ob $ ) The decompiler used by DO>STR. DcompWidth must be set before this is called. ( ob $ ) The decompiler used by DecompStd1Line. DcompWidth must be set before this is called. ( ob $ ) The decompiler used by DECOMP$. DcompWidth must be set before this is called. ( romptr $ T ) Decompiles a rompointer for the UserRPL stack. If it is a named rompointer, returns the name. Otherwise returns "XLIB n m".
007004
FSTR7
009004
FSTR9
00D004
FSTR13
35B82
palrompdcmp
6.1.8
Addr. 0556F 36252 2F321
String Tests
Name NULL$? DUPNULL$? CkChr00 Description ( ob flag ) ( ob ob flag ) ( $ $ flag ) Returns FALSE if string contains any null characters.
7.1
7.1.1
Reference
Conversion
Name #>HXS %># Description ( # hxs ) Length will be ve. ( % # ) Converts real number into hxs. Should be called %>HXS.
56
7.1. Reference
57
7.1.2
Addr. 2EFBE 2EFAA 055D5 0518A 34C82 05616 05815 2EFB9 2EFC8 2EFC9 2EFBA 2EFC6 2EFC7 2EFBC 2EFC4 2EFC5 2EFBD 2EFC2
General Functions
Name WORDSIZE dostws NULLHXS &HXS EXPAND LENHXS SUBHXS bit+ bit%#+ bit#%+ bitbit%#bit#%bit* bit%#* bit#%* bit/ bit%#/ Description ( # ) Returns the current wordsize as a bint. ( # ) Sets the current wordsize. HXS 0 Puts a null hxs in the stack. ( hxs hxs' hxs'' ) Appends hxs'' to hxs'. ( hxs #nibs hxs' ) Appends #nibs zero nibbles to the hxs. ( hxs #nibs ) Returns length in nibbles. ( hxs #m #n hxs' ) Returns sub hxs string. ( hxs hxs' hxs'' ) Adds two hxs. ( % hxs hxs' ) Adds real to hxs, returns hxs. ( hxs % hxs' ) Adds real to hxs, returns hxs. ( hxs hxs' hxs'' ) Subtracts hxs2 from hxs1. ( % hxs hxs' ) Subtracts hxs from real, returns hxs. ( hxs % hxs' ) Subtracts real from hxs, returns hxs. ( hxs hxs' hxs'' ) Multiplies two hxs. ( % hxs hxs' ) Multiplies real by hxs, returns hxs. ( hxs % hxs' ) Multiplies hxs by real, returns hxs. ( hxs hxs' hxs'' ) Divides hxs1 by hxs2. ( % hxs hxs' ) Divides real by hxs, returns hxs.
58 Addr. 2EFC3 2EFAC 2EFAD 2EFAE 2EFAF 2EFB8 Name bit#%/ bitAND bitOR bitXOR bitNOT bitASR
7. Hex Strings Description ( hxs % hxs' ) Divides hxs by real, returns hxs. ( hxs hxs' hxs'' ) Bitwise AND. ( hxs hxs' hxs'' ) Bitwise OR. ( hxs hxs' hxs'' ) Bitwise XOR. ( hxs hxs' ) Bitwise NOT. ( hxs hxs' ) Arithmetic shift one bit to the right. The most significant bit (the sign) does not change. ( hxs hxs' ) Shifts circularly one bit to the left. ( hxs hxs' ) Shifts circularly one byte to the left ( hxs hxs' ) Shifts circularly one bit to the right. ( hxs hxs' ) Shifts circularly one byte to the right. ( hxs hxs' ) Shifts one bit to the left. ( hxs hxs' ) Shifts one byte to the left. ( hxs hxs' ) Shifts one bit to the right. ( hxs hxs' ) Shifts one byte to the right.
7.1.3
Addr. 2EFCC 2F0EE
Tests
Name HXS==HXS HXS#HXS Description ( hxs hxs' %flag ) == test ( hxs hxs' %flag ) = test
7.1. Reference Addr. 2EFCF 2EFCD 2EFCE 2F0EF Name HXS<HXS HXS>HXS HXS>=HXS HXS<=HXS Description ( hxs hxs' < test ( hxs hxs' > test ( hxs hxs' test ( hxs hxs' test
59
Chapter 8 Identiers
Identiers are used to represent the names of objects stored in memory (i.e., variables). To the user, they appear in the stack between single quotes, that is, ''. In System RPL, they are created with ID <name>. When you use this structure, you do not always get the identier in the stack. It is always evaluated. So, if variable anumber contains 123.45 and you put somewhere in your program ID anumber, the identier is evaluated, recalling the contents of the variable. This way, the stack will contain 123.45. To put an id to the stack, use ' ID <name>. As you will see on Chapter 19, the command ' puts the object after it in the stack. This is called quoting. However, ID <name> (without the ') will also put the id in the stack if there is no variable called <name>. This is similar to be behaviour you get when you enter the name of a variable without the quotes in the HP49 command line. You can convert a string to an id using $>ID. The opposite transformation is archived with ID>$. There is also another kind of identiers: the temporary identiers, or lams. These are used when creating local variables, and you will learn about them later in Chapter 18. They are created with LAM <name>, and work pretty much like normal ids. Since ids are closely related to memory access, the functions dealing with its are listed in Chapter 24.
60
9.1
Reference
Name >TAG USER$>TAG %>TAG Description ( ob $tag tagged ) Tags an object. ( ob $tag tagged ) Maximum of 255 characters in string. ( ob % tagged ) Converts real to string using current display mode and tags object. ( ob id/lam tagged ) Tags object with identier or lam. ( ob $tag tagged ) ( ob.. { $.. } tagged... ) Tags one or more objects.
05F2E 37B04
ID>TAG TAGOBS
61
9. Tagged Objects Description ( tagged ob ) Strips all tags from the object. ( tagged ob' ob ob' ) Strips all tags from the object in level two.
Chapter 10 Arrays
There are actually two groups of objects that represent arrays in the HP49G. The rst group (which will be described in this chapter) has existed since the HP48: the normal arrays (to the user they can be only of real or complex numbers), and the linked arrays, which are not accessible to the user. The HP49 introduced a new kind of object to represent arrays: the Symbolic Matrices. Since these are actually a part of the HP49 CAS, they are described in Chapter 43. In User RPL, arrays can be only of real or complex numbers. In System RPL, you can have arrays of anything, even arrays of arrays. Note that an array is not a composite object (see Chapter 11), even if it looks like one. Also, an array can only contain one kind of object. Using MASD, arrays are entered like this:
1 ARRY [[ % 1. % 2. %3. ] [ % 4. % 5. %6. ]]
This is not much different from entering an array in the normal HP49 command line. You can also create an array of (normal, not extended) real or complex numbers by putting them in order in the stack, and entering a list representing the dimensions of the array (real numbers, not bints) in level one. Then run XEQ>ARRY. This function does error checks to ensure there are enough arguments and if they are of the supported types. The function ARSIZE returns the number of elements in an array. You can get the dimensions of the array with DIMLIMITS, which returns a list of bints representing the array dimensions. To get one element of an array, put the element number in level two, the array in level one, and run GETATELN. You will get the element and TRUE if it was found or only FALSE if the element does not exist. More array functions are listed below. There is also another kind of array: the linked arrays. Linked arrays are like normal arrays, except that they have a table with pointers to all the 63
64
10. Arrays
objects in the array. This makes access to array elements faster, because when you need to access one object in the linked array, the only thing necessary is to read the pointer to that object in the table, and go directly there. With normal arrays, a sequential search is necessary. The entries here all deal with the normal arrays (even though some of them also work for CAS Symbolic matrices). For entries specic to Symbolic matrices, see Chapter 43.
10.1
10.1.1
Addr. 0371D
Reference
General Functions
Name GETATELN Description ( # [] ob T ) ( # [] F ) Gets one element from array. ( [[]] #rows #cols T ) ( [] #elem F ) Returns the size of an array. Equivalent to the HP48 command MDIMS. ( [2D] #m #n ) MDIMS followed by DROP. ( [] { # } ) ( [[]] {# #} ) Returns the size of an array, like the User command SIZE, but the lengths are bints and not reals. Equivalent to the HP48 command DIMLIMITS. ( [] # ) Returns max # in an array. ( [] ob [] ob #elts ) Does OVER then ARSIZE. ( [%] # [%] % ) Gets real element. ( [C%] # [C%] C% ) Gets complex element.
16D006
MDIMS
35FD8 16E006
MDIMSDROP DIMLIMITS
65 Description ( [%] % # [%]' ) ( [C%] C% # [C%]' ) Puts element at specied position. Converts to "short" before. Warning: no copy to tempob rst. ( [%] % # [%]' ) Puts real element at specied position. Warning: no copy to tempob rst. ( [C%] C% # [C%]' ) Puts complex element at specied position. Warning: no copy to tempob rst. ( M M' ) Matrix transposition. ( V2 V1 ob ) Scalar product of symbolic vectors, no check.
26107
PUTREALEL
260FD
PUTCMPEL
33B006 331006
MATTRAN Yext
10.1.2
Addr. 169006
Conversion
Name
BESTMATRIXTYPE
172006
CKNUMARRY
178006
MATRIX2ARRAY
001007
ListToArry
17F006
XEQ>ARRY
17C006
XEQARRY>
Description ( ob ob ) Converts symbolic matrix with real/cmplex entries to a numeric array. ( ob ob ) Tests if ob is a numeric array. Tries to convert symbolic array to numeric array. ( [] [] ) ( [[]] [[]] ) Tries to convert a symbolic matrix to a numeric one. ( {}/{{}} []/[[]] TRUE ) ( {}/{{}} FALSE ) If possible, converts list of lists to normal array and returns TRUE. Otherwise, returns FALSE. ( ob1...obn {%n} [] ) ( ob11...obmn {%m %n} [[mxn]] ) Builds a matrix a la ARRY. ( [] ob1...obn meta-arry ) Explodes a matrix a la ARRY.
10. Arrays
10.1.3
Addr. 2EEDA 2EEDB 2EEDC 2EEDF 2EEDD 2EEDE
Statistics
Name STATCLST STATSADD% STATN STATSMIN STATSMAX STATMEAN Description ( ) Clears DAT. ( % ) Internal +. ( N ) Internal N. ( % ) Internal MIN. ( % ) Internal MAX. ( % ) ( [] ) Internal MEAN. ( % ) ( [] ) Internal SDEV. ( % ) ( [] ) Internal TOT. ( % ) ( [] ) Internal VAR.
2EEE0
STATSTDEV
2EEE1
STATTOT
2EEE2
STATVAR
68
11.1
11.1.1
Addr. 0521F 052FA 052C6 39C8B 05089
Reference
General Operations
Name &COMP >TCOMP >HCOMP (SWAP>HCOMP) CARCOMP Description ( comp comp' comp'' ) Concatenates two composites. ( comp ob comp+ob ) Adds ob to tail (end) of composite. ( comp ob ob+comp ) Adds ob to head (beginning) of composite. ( ob comp ob+comp ) Does SWAP then >HCOMP. ( comp ob_head ) ( comp_null comp_null ) Returns rst object of the composite, or a null composite if the argument is a null composite. ( comp T ob ) ( comp F comp ) If the ag is TRUE, does CARCOMP. ( comp comp-ob_head ) ( comp_null comp_null ) Returns the composite minus its rst object, or a null composite if the argument is a null composite. ( comp ob2 ) Gets the second element of composite. ( comp ob ) Gets the last element of composite. Does DUPLENCOMP then NTHCOMPDROP. ( comp #n ) Returns length of composite (number of objects). ( comp comp #n ) Does DUP then LENCOMP. ( comp flag ) If the composite is empty, returns TRUE. ( comp comp flag ) Does DUP then NULLCOMP?.
361C6
?CARCOMP
05153
CDRCOMP
2825E 2BC006
(2NELCOMPDROP) LASTCOMP
0567B
LENCOMP
69 Description ( comp #i ob T ) ( comp #i F ) Returns specied element of composite and TRUE, or just FALSE if it could not be found. ( comp #i ob ) Does NTHELCOMP then DROP. ( comp #i ob ob ) Does NTHCOMPDROP then DUP. ( comp ob pred #i ) ( comp ob pred #0 ) (eg: pred = ' %<) Evaluates pred for all elements of composite and ob, and returns index of rst object for which the pred is TRUE. If no one returned TRUE, returns #0. For example, the program below returns #4: :: { %1 %2 %3 %-4 %-5 %6 %7 } %0 ' %< POSCOMP ; ( comp ob #pos ) ( comp ob #0 ) POSCOMP with EQUAL as test. ( ob comp #i ) ( ob comp #0 ) Does SWAP then EQUALPOSCOMP. ( ob {} #i / #0 ) Equivalent to NTHOF, but faster. However, it only works for lists. ( comp # #i ) ( comp # #0 ) POSCOMP with #= as test. ( comp #m #n comp' ) Returns a sub-composite. Makes all index checks rst. ( ob comp T ) ( ob comp ob F ) Returns TRUE if ob is EQUAL to any element of the composite.
3776B
EQUALPOSCOMP
37784
NTHOF
0FD006
ListPos
37752
#=POSCOMP
05821
SUBCOMP
376B7
matchob?
11. Composite Objects Description ( ob1 ob2 flag ) Returns TRUE if ob2 is embedded in, or is the same as, ob1. Otherwise returns FALSE. ( comp test ob T ) ( comp test F ) Tests every element for test. The rst one that returns TRUE is put into the stack along with TRUE. If no object returned TRUE, FALSE is put into the stack. For example, the program below returns %-4 and TRUE. :: { %1 %2 %2 %-4 %-5 %6 } ' %0< Find1stTrue ; ( ob test comp nextob T ) ( ob test comp ob F ) Tests every odd element (1,3,...) in the composite. If a test returns TRUE, the object after the tested one is returned, along with TRUE. If no object tests TRUE, FALSE is returned. For example, the program below returns %6 and TRUE. :: %0 ' %< { %1 %2 %3 %-4 %-5 %6 } Lookup ; ( ob test nextob T ) ( ob test ob F ) Return Stack: ( comp ) Lookup with the composite already pushed (with >R) onto the runstream. Called by Lookup. ( ob comp nextob T ) ( ob comp ob F ) Lookup with EQ as test.
37798
Find1stTrue
377C5
Lookup
377DE
Lookup.1
37829
EQLookup
71 Description ( comp #ofs comp #ofs' ob T ) ( comp #ofs comp F ) Returns object at specied nibble offset from start. If the object is SEMI (i.e., the end of the composite has been reached) returns FALSE. To get the rst element, use FIVE as offset value (to skip the prolog). ZERO works as well.
11.1.2
Building
There are also shortcut words to build lists and secondaries, with specied number of objects, described in the sections below. Addr. 05459 05445 0546D 05481 293F8 Name {}N ::N SYMBN EXTN P{}N Description ( obn..ob1 #n { obn..ob1 } ) ( ob1..obn #n :: ob1..obn ; ) ( ob1..obn #n symb ) Build a symbolic object. ( ob1..obn #n u ) Builds a unit object. ( ob1..obn #n {} ) Build list with possible garbage collection.
11.1.3
Addr. 054AF 3622A 3623E 35BAF 35C68 2F0EC 3BADA 366E9
Exploding
Name INNERCOMP DUPINCOMP SWAPINCOMP INCOMPDROP INNERDUP ICMPDRPRTDRP (INNERCOMP>%) INNER#1= Description ( comp obn..ob1 #n ) ( comp comp obn..ob1 #n ) ( comp obj obj obn..ob1 #n ) ( comp obn..ob1 ) ( comp obn..ob1 #n #n ) ( comp obn...ob4 ob2 ob1 ) Does INCOMPDROP then ROTDROP. ( comp obn..ob1 %n ) ( comp obn..ob1 flag )
11. Composite Objects Description ( symb ob1 .. obN #n ) ( ob ob #1 ) ( {} {} #1 ) Explodes symbolic object into meta. Other objects are converted into one-object metas by pushing #1 into the stack. ( ob1 ob2 meta1 meta2 ) Does SYMBINCOMP for 2 objects. ( {} ob1 .. obN #n ) ( ob ob #1 ) Explodes a list into a meta object. Other objects are converted into one-object metas by pushing #1 into the stack.
12A006 158006
2SYMBINCOMP CKINNERCOMP
11.1.4
Addr. 055E9 36ABD 159006
Lists
Name NULL{} DUPNULL{}? DUPCKLEN{} Description ( {} ) Pushes a null list to the stack. ( {} {} flag ) ( {} {} #n ) ( ob ob #1 ) Return length of list, or 1 for non-lists. ( ob { ob } ) ( ob1 ob2 { ob1 ob2 } ) ( ob1 ob2 ob3 { ob1 ob2 ob3 } ) ( ob1..obn #n+1 {} ) ( ob #i {} {}' ) Replaces object at specied position. Assumes valid #i. ( {} ob # {}' ) Insert object into list at given position. The position must be < than length of the list. If the position is zero, >TCOMP is used. ( list list1 list2 ) Extract in list2 all occurrances of the 1st object of list, the remaining objects are stored in list1. list1 = list-list2.
2FC006
INSERT{}N
2FB006
NEXTPext
73 Description ( {} {}' ) Suppress multiple occurrances in the list. ( {} ob1 ) ( ob ob ) Returns rst element for lists, or object itself if it is not a list. ( {} ob {}' ) Appends ob to list if not already there. ( {} ob {}' ) Equivalent to apndvarlst, but faster. ( {} ob {}' ) Adds ob at the beginning of the list if not present. If ob is in list, move ob to the beginning of list. ( L pred L' ) Sorts list according to give predicate. Pred is a program that tests two elements and returns FALSE if the rst is to appear earlier than the second. To sort in numerical order, for example, the predicate would be a > test. ( {} ob ) Returns the product of all elements of the list. ( ob ) Is ob a list of equations? Returns T if ob is a list of at least two elements, and the second element is not a list itself.
100006
SortList
28A006 25ED3
PIext EqList?
11.1.5
Addr. 055FD 37073 3705A 37087
Secondaries
Name NULL:: Ob>Seco ?Ob>Seco 2Ob>Seco Description ( :: ; ) Returns null secondary. ( ob :: ob ; ) Does ONE then ::N. ( ob :: ob ; ) If the object is not a secondary, does Ob>Seco. ( ob1 ob2 :: ob1 ob2 ; ) Does TWO then ::N.
74 Addr. 3631A Name ::NEVAL Description ( ob1..obn #n ? Does ::N then EVAL.
12.1 Reference
12.1.1
Addr. 0326E 37032 35FB0
Stack Functions
Name NDROP DROPNDROP #1+NDROP Description ( meta ) Should be called drop. ( meta ob ) Should be called DROPdrop. ( ob meta ) Should be called dropDROP. aka: N+1DROP 75
12. Meta Objects Description ( meta F ) Should be called dropFALSE. ( obn..ob1 #n #0 ) Replace Meta object with empty Meta object. Should be called dropZERO. ( meta1 meta2 meta2 meta1 ) Should be called swap. ( meta1 meta2 meta3 meta2 meta3 meta1 ) Should be called rot. ( meta1 meta2 meta3 meta3 meta1 meta2 ) Should be called unrot. ( meta1 meta2 meta2 ) Should be called swapdrop. ( meta1 meta2 meta3 meta2 meta3 meta1 meta1 ) Should be called rotdup.
29A5D 29A8F
psh roll2ND
29B12
unroll2ND
3695A 36FA6
SWAPUnNDROP metaROTDUP
12.1.2
Addr. 296A7 2973B 36FBA 36FCE
Combining Functions
Name top& pshtop& ROTUntop& roll2top& Description ( meta1 meta2 meta1&meta2 ) ( meta1 meta2 meta2&meta1 ) ( meta1 meta2 meta3 meta2 meta3&meta1 ) ( meta1 meta2 meta3 meta3 meta1&meta2 ) aka: rolltwotop& ( meta1 meta2 meta3 meta1&meta3 meta2 )
2963E
psh&
12.1. Reference
77
12.1.3
Addr. 3592B 34431 34504 36147 29693 28071 28085 29821 298C0 2F193 29754 406006 29972 36946 2F38E 2F38F
) ) ) )
12.1.4
Addr. 3760D
Other Operations
Name SubMetaOb Description ( meta #start #end meta' ) Gets a sub-meta. Does range checks.
12. Meta Objects Description ( ob1..obi..obn #n #i #n #i ob1..obi #n #i ) This function can be used to take the rst i objects of a meta, if you follow it with SWAPDROP. Example: :: %1 %2 %3 %4 %5 BINT5 BINT3 BINT5 BINT3 SubMetaOb1 ; results in: %1 %2 %3 #5 #3 ( meta #begin #end meta' ) Extracts submeta from a meta. ( ob1..obn-i..obn #i #n+1 ob1..ob..obn-i #n-i obn-i+1..obn #i ) #n is the count of the objects in meta. Takes the last #i elements of meta and creates a new one. Example: :: %1 %2 %3 %4 %5 BINT2 BINT6 metatail ; Results: %1 %2 %3 #3 %4 %5 #2 ( meta #i meta1 meta2 ) Split a meta in 2 metas at position i. meta1 will contain #i elements meta2 will contain #n-i elements. ( meta2 meta1 meta2 meta1 flag ) Test equality of 2 metas. ( Meta ob Meta ob #pos ) Returns last occurrence of ob in Meta. If a component of meta is a list/symb then search if ob is embedded in this component of meta. ( Meta2 Meta1 ob Meta2 Meta1 ob #pos ) Returns last occurrence of ob in Meta1 or in Meta2. #pos is >0 if in meta2, is <0 if in meta1 (#pos=MINUSONE-#). ( Meta Meta flag ) Tests if Meta is an integer.
33F006 2F356
submeta metatail
385006
metasplit
39F006 3BF006
metaEQUAL? EQUALPOSMETA
3C0006
EQUALPOS2META
198006
METAINT?
79 Description ( Meta Meta flag ) Tests if Meta is a positive integer smaller than Zsmall.
10
As you can see, creating units is done in a reverse polish way using the words um, um*, um/ and umP. The meaning of the rst three ones is easy to guess. The last is used to create prex operators (kilo, mega, mili, etc.). First enter the prex as a character or string, and then the unit name (all operations take unit names as characters or strings). Run umP and the prexed unit is created. Then call the other functions as needed. To end a unit, use umEND, which joins the number (entered rst) to the unit part. The code above could be made shorter if built-in characters and strings (listed on Chapter 6) were used. Since units are composite objects, you can use, for example, INNERCOMP to explode a unit into a meta object. You can also create a unit from a meta object (see Chapter 12), using EXTN. The program below, for example, adds the unit m/s to the number in the stack: 80
13.1. Reference
1 :: CK1NOLASTWD CKREAL "m" "s" um/ umEND BINT5 EXTN ;
81
Note that the um words, when executed, just put themselves in the stack. Several operations can be done with units. The complete list is given below. The most important are UM+, UM-, UM*, UM/ and UFACT, whose meanings are obvious; UMCONV, which works like user word CONVERT; UMSI, equivalent to UBASE and U>nbr, which returns the numeric part of a unit.
13.1
13.1.1
Addr. 2D74F 2D759 2D763 2D76D 2D777 05481
Reference
Creating Units
Name um* um/ um umP umEND EXTN Description * marker / marker marker Char prex operator Unit end operator ( ob1..obn #n u ) Builds a unit object.
82
13.1.2
Addr. 2F099
General Functions
Name U>NCQ Description ( u n%% cf%% qhxs ) Returns the number, conversion factor to base units and a vector in the form: [ kg m A s K cd mol r sr ? ] where each element represents the exponent of that unit. For example, 1_N U>NCQ would return: %%1 %%1 [ 1 1 0 -2 0 0 0 0 0 0 ] since it is equivalent to 1_kg*m/s2 ( % u u' ) Replaces number part of unit. ( u1 u2 u1' ) Change units of unit1 to units of unit2. ( u u' ) Equivalent to user word UBASE. ( u % u' ) Returns number and normalized part of unit. ( u $ ) Converts unit to string. ( u % ) Returns number part of unit. ( u % u' ) Replaces number part of unit. ??? Used by UMCONV for the conversion of temperature units. ( % ob ob' % ob ) ( % ob u u' ob ) If the level one object is a unit object, replaces the numeric part of it with the number on level 3. If not, just DROP.
25EE4
KeepUnit
13.1. Reference
83
13.1.3
Addr. 2F081 2F082 2F080 2F083 2F07D 2F07E 2F07F 2F08F 2F08E 2F096 2F08A 2F08B 2F092 2F093 2D949 2D95D 2D971 2D985 2D999 2D9CB 2D9EE 2F08D 2F091 2F094
Arithmetic Functions
Name UM+ UMUM* UM/ UM% UM%CH UM%T UMMIN UMMAX UMXROOT UMABS UMCHS UMSQ UMSQRT UMSIGN UMIP UMFP UMFLOOR UMCEIL UMRND UMTRC UMCOS UMSIN UMTAN Description ( u u' u'' ) ( u u' u'' ) ( u u' u'' ) ( u u' u'' ) ( u %percent u' ) ( u u' % ) ( u u' % ) ( u u' u? ) ( u u' u? ) ( u u' u'' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' )
13.1.4
Addr. 2F087 2F07C 2F086 2F089 2F085 2F088
Tests
Name UM=? UM#? UM<? UM>? UM<=? UM>=? Description ( u u' %flag ( u u' %flag ( u u' %flag ( u u' %flag ( u u' %flag ( u u' %flag ) ) ) ) ) )
13. Unit Objects Description ( [] []' [] []' flag ) Checks of the two arrays both denote pure temperature units, i.e. if both arrays are equal to [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
Chapter 14 Symbolics
Symbolic objects, or algebraic expressions, are another type of composite objects. Their structure is very similar to the units. They are delimited by SYMBOL and ;. Inside, the expression is created in a reverse polish way. V The disassembly of the equation R = should show how to include a I symbolic object in your program, should you need one.
:: SYMBOL ID R ID V ID I x/ x= ; ;
As you have seen, the variables are represented by identiers, and the functions are the user-accessible ones, whose names are preceded by a lowercase x in System RPL. To create a symbolic object from a meta, you use the SYMBN function. Note that when you include a funcion, you will have to quote it, ie, put the command ' before the command to put it in the stack instead of executing it. Quoting objects will be explained in more detail in section 19.2. On the HP49, the new CAS contains most entries dealing with symbolics. These entries are described in the CAS part of the book. mainly in Chapters 44 and 45. However, some entries which were available already on the HP48 have been kept for compatibility reasons. These entries are listed below. 85
86
14. Symbolics
14.1
14.1.1
Addr. 0546D 2BD8C
Reference
General Operations
Name SYMBN (SYMBN:) Description ( ob1..obn #n sym ) ob1..obn #n -> symb Does 'R, SWAP#1+ then SYMBN. Creates a symbolic from the meta in the stack and the next object in the runstream. This object is added to the end of the symbolic. ( ob ob' ) If ob is symbolic, does nothing, otherwise ONE SYMBN. ( ob ob' ob'' ob' ) Does SWAP symcomp SWAP. ( %/C%/Z/id/lam ob' %/C%/Z/id/lam ) ( ob ob' symb ) Drop ob'. Then, if the object in the stack is a real, complex, zint, identier or lam, does nothing. For other objects, calls symcomp to create a one-object symbolics. ( %/C%/Z/id/lam #1 %/C%/Z/id/lam ) ( ob #1 symb ) ( ob # symb ) If # is BINT1, calls DROP?symcomp. If it is any other number, calls SYMBN. ( ob % ) Internal version of NUM. ( sym {} ) Returns a list of the variables of the equation, recursing into programs and functions in the equation. ( ob ob flag ) Returns TRUE if ob is a symbolic nishing by x=.
286E7
symcomp
2F073 28ACE
SWAPcompSWAP (DROP?symcomp)
293A3
(?symcomp)
25EA2 2F110
CRUNCH (FINDVARS)
462006
EQUATION?
87 Description ( ob ob flag ) Returns TRUE if ob is a symbolic nishing by xFCNAPPLY. ( ) Clears numeric results ag (system ag 3) for the next command only. Example: SYMCOLCT = :: uncrunch colct ; ( sym symf ) Used by one argument functions to evaluate a symbolic or numeric routine according to numeric results ag. Usage: :: cknumdsptch1 <sym> <num> ; If numeric mode, CRUNCH is applied to the level one object and COLA is applied to <num>. If symbolic mode, ckseval1: is called. Example: :: cknumdsptch1 MetaRE xRE ; ( sym sym symf ) Used by two argument functions to evaluate function according to current numeric mode. Usage: :: sscknum2 <sym> <num> ; In numeric mode both arguments are CRUNCHed and <num> is COLAd. Else, cksseval2: is called. Example: SYM+ = :: sncknum2 Meta+ x+ ; ( sym % symf ) Usage: :: sncknum2 <sym> <num> ; In symbolic mode uses cksneval2:. Example: SYM+O = :: sncknum2 Meta+Con x+ ; ( % sym symf ) Usage: :: nscknum2 <sym> <num> ; In symbolic mode uses cknseval2:. Example: O+SYM = :: nscknum2 Con+Meta x+ ;
29CB9
uncrunch
2BCA2
cknumdsptch1
2BB21
sscknum2
2BB3A
sncknum2
2BB53
nscknum2
88
14. Symbolics
14.1.2
Addr. 2EF26 2F2A9
Other Functions
Name SYMSHOW XEQSHOWLS Description ( sym id/lam symf ) ( sym {} symf )
14.1.3
Addr. 29986
89
90
15.1
15.1.1
Addr. 27AA3 27D3F 27D5D 27D7B 2E25C 0860B0 0870B0
Reference
Built-in Grobs
Name (NULLGROB) CROSSGROB MARKGROB (StdLabelGrob) (InvLabelGrob)
grobAlertIcon
grobCheckKey
Description ( grob ) 0x0 Null grob ( grob ) 5x5 Cross cursor ("+") ( grob ) 5x5 Mark symbol ("x") 21x8 normal menu key 21x8 inverse menu key 9x9 Alert grob 21x8 Check Key menu grob A tickmark and "CHK" in a menu grob.
15.1.2
Addr. 26085 25EBB 36C68 2F324 2F320
Dimensions
Name GROBDIM DUPGROBDIM GROBDIMw CKGROBFITS CHECKHEIGHT Description ( grob #height #width ) ( grob grob #height #width ) ( grob #width ) ( g1 g2 #n #m g1 g2' #n #m ) Shrinks g2 if it does not t in g1. ( grob #height ) Forces grob (ABUFF/GBUFF) to be at least 64 rows high.
15.1.3
Addr. 2607B 2EFDB
Grob Handling
Name GROB! (GROB+) Description ( grob1 grob2 #x #y ) Stores grob1 into grob2. Bang type. ( grob1 grob2 grob ) Combines two grobs using bitwise OR. Errors when grobs have different sizes.
91 Description ( flag grob1 grob2 #x #y grob' ) Inserts grob2 into the specied position of grob1, using OR (if ag is TRUE) or XOR (if ag is FALSE). Does all necessary checks rst. ( grob #x1 #y1 #x2 #y2 grob' ) Blanks a rectangular region of the grob. Bang type. ( grob #x1 #y1 #x2 #y2 ) Blanks a rectangular region of the grob. Probably only useful if grob is the text or graphics grob (see section on display-organization). Bang type. ( grob #x1 #y1 #x2 #y2 grob' ) Returns specied portion of grob. ( #x #y grob ) Stores grob in HARDBUFF with upper left corner at (#x,#y). HARDBUFF is expanded if necessary. ( grob ) Stores new graph grob. ( #height #width grob ) Creates a blank grob. ( #w #h ) Creates blank graph grob. Minimum size is 131x64. Smaller grobs will be automatically resized. ( grob grob' ) Inverts grob data bits. Bang type. ( #x #y ) Sets pixel in text grob. ( #x #y ) Clears pixel in text grob. ( #x #y flag ) Is pixel in text grob on? ( #x #y ) Sets pixel in graph grob. ( #x #y ) Clears pixel in graph grob.
26080
GROB!ZERO
368E7
GROB!ZERODRP
2612F 25F0E
SUBGROB XYGROBDISP
15. Graphics Objects (Grobs) Description ( #x #y flag ) Is pixel in graph grob on? ( #x1 #y1 #x2 #y2 #x1' #y1' #x2' #y2' ) Orders the bints to be appropriate for dening a rectangle in a grob. Swaps #x1 and #x2 if #x2<#x1. Swaps #y1 and #y2 if #y2<#y1. ( %x1 %y1 %x2 %y2 %x1' %y1' %x2' %y2' ) ORDERXY# with real numbers. ( #x1 #y1 #x2 #y2 ) Draws a line in text grob. ( #x1 #y1 #x2 #y2 ) Clears a line in text grob. ( #x1 #y1 #x2 #y2 ) Toggles a line in text grob. ( #x1 #y1 #x2 #y2 ) Draws a line in graph grob. ( #x1 #y1 #x2 #y2 ) Draws a line in graph grob. x1<x2 is not required. ( #x1 #y1 #x2 #y2 ) Clears a line in graph grob. ( #x1 #y1 #x2 #y2 ) Toggles a line in graph grob. ( #x1 #y1 #x2 #y2 ) Toggles line in graph grob. x1<x2 is not required. ( #x1 #y1 #x2 #y2 ) Draws rectangle in graph grob. ( grob ) Returns current display. ( grob ) Grob to display. ( grob2 grob1 grob ) Vertical grob addition. grob2 will be above grob1.
280F8
ORDERXY%
15.1. Reference
93
15.1.4
Addr. 25592
Greyscale Graphics
Name SubRepl Description ( grb1 grb2 #x1 #y1 #x2 #y2 #W #H grb1' ) Replace a part of grb1 with a part of grb2 in REPLACE mode. ( grb1 grb2 #x1 #y1 #x2 #y2 #W #H grb1' ) Replace a part of grb1 with a part of grb2 in OR mode. ( grb1 grb2 #x1 #y1 #x2 #y2 #W #H grb1' ) Replace a part of grb1 with a part of rgb2 in XOR mode. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a white line. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a light grey line. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a dark grey line. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a black line. ( grb #x1 #y1 #x2 #y2 grb' ) XOR a line. ( grb #Cx #Cy #r grb' ) Draw a white circle. ( grb #Cx #Cy #r grb' ) Draw a light grey circle. ( grb #Cx #Cy #r grb' ) Draw a dark grey circle. ( grb #Cx #Cy #r grb' ) Draw a black circle ( grb #Cx #Cy #r grb' ) XOR a circle. ( grb #x1 #y1 #x2 #y2 grb' flag ) Get a part of a grob. ( grb1 grb2 #x #y grb1' ) Copy grb2 into grb1 in REPLACE mode.
25597
SubGor
2559C
SubGxor
25565 2556F 25574 2556A 25579 2F218 2F216 2F217 2F215 2F219 2557E 25583
LineW LineG1 LineG2 LineB LineXor CircleW CircleG1 CircleG2 CircleB CircleXor Sub Repl
94 Addr. 25588 2558D 255A1 255B0 255BA 255C4 255C9 255BF 255CE 255D3 255D3 255D8 255DD 255E2 255E7 255EC 255F1 255F6 255FB Name Gor Gxor Grey? ScrollVGrob PixonW PixonG1 PixonG2 PixonB PixonXor FBoxW FBoxG1 FBoxG2 FBoxB FBoxXor LBoxW LBoxG1 LBoxG2 LBoxB LBoxXor
15. Graphics Objects (Grobs) Description ( grb1 grb2 #x #y grb1' ) Copy grb2 into grb1 in OR mode. ( grb1 grb2 #x #y grb1' ) Copy grb2 into grb1 in XOR mode. ( grob flag ) Is grob a Greyscale Grob? ( grb #W #X #Yd #Ys #h grb' ) Scroll up and down a portion of a graphical object. ( grb #x #y grb' ) Make a pixel white. ( grb #x #y grb' ) Make a pixel light grey. ( grb #x #y grb' ) Make a pixel dark grey. ( grb #x #y grb' ) Make a pixel black. ( grb #x #y grb' ) Apply XOR to a pixel. ( grb #x1 #y1 #x2 #y2 grb' ) Make a white lled rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Make a light grey lled rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Make a dark grey lled rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Make a black lled rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Apply XOR to a lled rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a white rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a light grey rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a dark grey rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a black rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Apply XOR to a rectangle.
15.1. Reference Addr. 2F21B 2F21A 255B5 Name ToGray Dither Distance Description ( grb grb'/grb ) Convert a B&W grob to Greyscale. ( grb grb'/grb ) Convert a greyscale grob to B&W ( #x #y #SQRT(x2+y2) ) Compute the distance between two points.
95
15.1.5
Addr. 2E166 2E189 2E1EB 2E24D 25E7F
25F01
Std/BoxLabel
25E80
Box/StdLbl:
15. Graphics Objects (Grobs) Description ( #col ob ) If ob is of one of the supported types, displays a menu label. If not, generates a "Bad Argument Type" error.
15.1.6
Addr. 25F7C
25F86
$>GROBCR
25F81
$>grob
25F8B
$>grobCR
05F0B3
($>grobOrGROB)
25F24
RIGHT$3x6
25FEF
CENTER$3x5
97 Description ( $ #w #x grob grob' ) Inserts $ into grob using CENTER$3x5 with y=5. ( grob #x #y $ #w grob' ) Like CENTER$3x5, but the left corner of the text is positioned at #x. ( grob #x #y $ #w grob' ) Like LEFT$3x5, but erase background rst. ( grob #x #y $ #w grob' ) Like LEFT$3x5, but if the text does not t, replace the last character by character 31 (dots) to show that the text was truncated. ( grob #x #y $ #w #h grob' ) Like LEFT$3x5, but newlines in the strings are interpreted and start new lines. Note the additional argument #h for the maximum height of the text grob. ( grob #x #y $ #w #h grob' ) Like LEFT$3x5CR, but show truncation with arrows. ( grob #x #y $ #w grob' ) Same as CENTER$3x5, but using system font. ( grob #x #y $ #w grob' ) Like CENTER$5x7, but the left corner of the text is positioned at #x. ( grob #x #y $ #w grob' ) Like LEFT$5x7, but erase background rst. ( grob #x #y $ #w grob' ) Like LEFT$5x7, but if the text has to be truncated, replace the last character with character 31 (arrow). ( grob #x #y $ #w grob' ) Like LEFT$5x7, but interpret newlines. ( grob #x #y $ #w grob' ) Like LEFT$5x7CR, but show truncation with arrows.
25FF9
LEFT$3x5
26071 26008
ERASE&LEFT$3x5
LEFT$3x5Arrow
2601C
LEFT$3x5CR
26012
LEFT$3x5CRArrow
25FF4
CENTER$5x7
25FFE
LEFT$5x7
2606C 26003
ERASE&LEFT$5x7
LEFT$5x7Arrow
26017 2600D
LEFT$5x7CR
LEFT$5x7CRArrow
98
15.1.7
Addr. 019004 01A004 01F004 01E004 0BE007 0C0007
16.1
16.1.1
Addr. 25EEB
Reference
Port Operations
Name NEXTLIBBAK Description ( #addr backup/library #nextaddr ) Gets next library or backup.
99
100
16.1.2
Addr. 07E50 08CCC 07E99
Rompointers
Name #>ROMPTR ROMPTR># ROMPTR@ Description ( #lib #cmd ROMPTR ) Creates rompointer. ( ROMPTR #lib #cmd ) Splits rompointer. ( ROMPTR ob T ) ( ROMPTR F ) Recalls contents of rompointer. ( ROMPTR ROMPTR ob T ) ( ROMPTR ROMPTR F ) Does DUP then ROMPTR@. ( ob ob' ) If ROM-WORD? and TYPECOL? then RPL@. ( ob ob' ) If TYPEROMP? and content exists INHARDROM? then return contents. ( ob ) Recalls contents of next object in the runstream (which must be a rompointer). ( ob flag ) ( ob ob flag )
35C40
DUPROMPTR@
35A88 35AAB
?>ROMPTR ?ROMPTR>
35BFF
RESOROMP
34FCD 34FC0
ROM-WORD? DUPROM-WORD?
16.1.3
Addr. 07709 076AE 2F2A7 07638
Libraries
Name TOSRRP OFFSRRP XEQSETLIB SETHASH Description ( # ) Attaches library to HOME directory. ( # ) Detaches library from HOME directory. ( % ) Internal ATTACH. ( hxs #libnum ) Buggy?
16.1. Reference
101
16.1.4
Addr. 081D9 0905F
Backup Objects
Name BAKNAME BAK>OB Description ( bak id T ) Returns backup's name ( bak ob ) Gets backup object.
17.1
Reference
In this section, the numbers 1, 2. . . n are used to represent different objects, not necessarily any kind of number.
105
106 Addr. 03188 35CE0 2D5006 28143 35FF3 3457F 36133 3432C 3611F 35D30 34431 031AC 35D30 36CA4 031D9 03244 357CE 37032 35733 3574D 36007 3606B 03258 341D2 341D7 341DC 341E8 341F4 0326E 35FB0 Name DUP DUPDUP 3DUP NDUPN DUPROT DUPUNROT DUPROLL DUP4UNROLL DUPPICK DUP3PICK DUP#1+PICK 2DUP 2DUPSWAP 2DUP5ROLL NDUP DROP DROPDUP DROPNDROP DROPSWAP DROPSWAPDROP DROPROT DROPOVER 2DROP 3DROP 4DROP 5DROP 6DROP 7DROP NDROP #1+NDROP
17. Stack Operations Description ( ob ob ob ) ( ob ob ob ob ) ( 3 2 1 3 2 1 3 2 1 ) ( ob #n ob..ob #n ) ( ob #0 #0 ) ( 1 2 2 2 1 ) ( 1 2 2 1 2 ) aka: SWAPOVER ( 1..n #n 1 3..n #n 2 ) ( 1 2 3 3 1 2 3 ) ( n..1 #n n..1 #n n-1 ) ( 1 2 1 2 2 1 ) aka: 2DUPSWAP ( n..1 #n n..1 #n n ) ( 1 2 1 2 1 2 ) ( 1 2 1 2 2 1 ) aka: DUP3PICK ( 1 2 3 2 3 2 3 1 ) ( 1..n #n 1..n 1..n ) ( 1 ) ( 1 2 1 1 ) ( 1..n #n ob ) ( 1 2 3 2 1 ) ( 1 2 3 2 ) aka: ROT2DROP, XYZ>Y ( 1 2 3 4 2 3 1 ) ( 1 2 3 1 2 1 ) ( 1 2 ) ( 1 2 3 ) aka: XYZ> ( 1..4 ) aka: XYZW> ( 1..5 ) ( 1..6 ) ( 1..7 ) ( 1..n #n ) ( ob 1..n #n ) aka: N+1DROP
107 Description ( ob1..obn obn+1..obx #n ob1..obn ) Drops all but #n levels of the stack. ( 1..n 1..n #n ) ( 1..n #n n..1 #n ) ( 1 2 2 1 ) ( 1 2 2 1 1 ) ( 1 2 2 1 2 1 ) ( 1 2 2 ) aka: XY>Y ( 1 2 2 2 ) ( 1 2 3 3 1 ) aka: UNROTDROP, XYZ>ZX ( 1 2 3 3 2 1 ) aka: UNROTSWAP, XYZ>ZYX ( 1 2 3 4 2 4 3 1 ) aka: XYZW>YWZX ( 1 2 2 1 2 ) aka: DUPUNROT ( 1 2 3 1 3 2 1 ) ( 1 2 3 4 3 4 1 2 ) ( 1 2 3 2 3 1 ) ( 1 2 3 2 3 1 1 ) ( 1 2 3 2 3 1 3 1 ) ( 1 2 3 2 3 ) aka: XYZ>YZ ( 1 2 3 2 ) aka: DROPSWAPDROP, XYZ>Y ( 1 2 3 3 2 ) aka: XYZ>ZY ( 1 2 3 2 1 3 ) aka: XYZ>YXZ ( 1 2 3 3 ) aka: UNROT2DROP, XYZ>Z ( 1 2 3 2 3 1 3 ) ( 1 2 3 4 2 3 4 1 ) aka: FOURROLL, XYZW>YZWX ( 1 2 3 4 2 3 4 ) ( 1 2 3 4 2 3 1 4 )
0314C 28187 03223 3576E 368B5 3421A 35857 35872 341BA 36C90 3457F 36CB8 35018 03295 3579C 35CA4 341A8 3574D 34195 3416E 343BD 35CCC 3423A 3588B 35F06
DEPTH reversym SWAP SWAPDUP SWAP2DUP SWAPDROP SWAPDROPDUP SWAPDROPSWAP SWAPROT SWAP4ROLL SWAPOVER SWAP3PICK 2SWAP ROT ROTDUP ROT2DUP ROTDROP ROT2DROP ROTDROPSWAP ROTSWAP ROTROT2DROP ROTOVER 4ROLL 4ROLLDROP 4ROLLSWAP
108 Addr. 36043 360E3 34257 358A7 34281 342EA 342BB 03325 35FC4 35D80 344F2 34517 2D6006 344DD 344CB 3422B 35D1C 35872 343BD 341BA 360CF 3422B 34331 35D44 343CF 36057 Name 4ROLLROT 4ROLLOVER 5ROLL 5ROLLDROP 6ROLL 7ROLL 8ROLL ROLL ROLLDROP ROLLSWAP #1+ROLL #2+ROLL #3+ROLL #+ROLL #-ROLL UNROT UNROTDUP UNROTDROP UNROT2DROP UNROTSWAP UNROTOVER 3UNROLL 4UNROLL 4UNROLLDUP 4UNROLL3DROP 4UNROLLROT
17. Stack Operations Description ( 1 2 3 4 2 4 1 3 ) aka: FOURROLLROT ( 1 2 3 4 2 3 4 1 4 ) ( 1 2 3 4 5 2 3 4 5 1 ) aka: FIVEROLL ( 1 2 3 4 5 2 3 4 5 ) ( 1..6 2..6 1 ) aka: SIXROLL ( 1..7 2..7 1 ) aka: SEVENROLL ( 1..8 2..8 1 ) aka: EIGHTROLL ( 1..n #n 2..n 1 ) ( 1..n #n 2..n ) ( 1..n #n 2..n-1 1 n ) ( ob 1..n #n 1..n ob ) ( a b 1..n #n b 1..n a ) ( obn+3...obn...ob1 #n obn+2...ob1 obn+3 ) ( 1..n+m #n #m 2..n+m 1 ) ( 1..n-m #n #m 2..n-m 1 ) ( 1 2 3 3 1 2 ) aka: 3UNROLL, XYZ>ZXY ( 1 2 3 3 1 2 1 ) ( 1 2 3 3 1 ) aka: SWAPDROPSWAP, XYZ>ZX ( 1 2 3 3 ) aka: ROTROT2DROP, XYZ>Z ( 1 2 3 3 2 1 ) aka: SWAPROT, XYZ>ZYX ( 1 2 3 3 1 2 1 ) ( 1 2 3 3 1 2 ) aka: UNROT, XYZ>ZXY ( 1 2 3 4 4 1 2 3 ) aka: FOURUNROLL, XYZW>WXYZ ( 1 2 3 4 4 1 2 3 3 ) ( 1 2 3 4 4 ) aka: XYZW>W ( 1 2 3 4 4 3 2 1 )
17.1. Reference Addr. 34357 3438D 35BEB 3615B 28225 3616F 0339E 34552 34564 3453D 3452B 032C2 35CF4 35D6C 35D6C 36CF4 37046 34485 35F1A 360F7 36CCC 2F1C6 3448A 35F2E 36CE0 3610B 3448F 34494 34499 3449E 344A3 344A8 032E2 34436 34451 Name 5UNROLL 6UNROLL 7UNROLL 8UNROLL (9UNROLL) 10UNROLL UNROLL #1+UNROLL #2+UNROLL #+UNROLL #-UNROLL OVER OVERDUP OVERSWAP OVERUNROT OVER5PICK 2OVER 3PICK 3PICKSWAP 3PICKOVER 3PICK3PICK DROP3PICK 4PICK 4PICKSWAP SWAP4PICK 4PICKOVER 5PICK 6PICK 7PICK 8PICK (9PICK) (10PICK) PICK #1+PICK #2+PICK Description ( 1 2 3 4 5 5 1 2 3 4 ) aka: FIVEUNROLL ( 1..6 6 1..5 ) aka: SIXUNROLL ( 1..7 7 1..6 ) ( 1..8 8 1..7 ) ( 1..9 9 1..8 ) ( 1..10 10 1..9 ) ( 1..n #n n 1..n-1 ) ( ob 1..n #n n ob 1..n-1 ) ( a b 1..n #n n a b 1..n-1 ) ( 1..n+m #n #m n+m 1..n+m-1 ) ( 1..n-m #n #m n-m 1..n+m-1 ) ( 1 2 1 2 1 ) ( 1 2 1 2 1 1 ) ( 1 2 1 1 2 ) aka: OVERUNROT ( 1 2 1 1 2 ) aka: OVERSWAP ( 1 2 3 4 1 2 3 4 3 1 ) ( 1 2 3 4 1 2 3 4 1 2 ) ( 1 2 3 1 2 3 1 ) ( 1 2 3 1 2 1 3 ) ( 1 2 3 1 2 3 1 3 ) ( 1 2 3 1 2 3 1 2 ) ( 1 2 3 4 1 2 3 1 ) ( 1 2 3 4 1 2 3 4 1 ) ( 1 2 3 4 1 2 3 1 4 ) ( 1 2 3 4 1 2 4 3 1 ) ( 1 2 3 4 1 2 3 4 1 4 ) ( 1 2 3 4 5 1 2 3 4 5 1 ) ( 1..6 1..6 1 ) ( 1..7 1..7 1 ) ( 1..8 1..8 1 ) ( 1..9 1..9 1 ) ( 1..10 1..10 1 ) ( 1..n #n 1..n 1 ) ( 1..n #n-1 1..n 1 ) ( 1..n #n-2 1..n 1 )
109
110 Addr. 34465 34474 34417 34405 Name #3+PICK #4+PICK #+PICK #-PICK Description ( 1..n #n-3 ( 1..n #n-4 ( 1..n+m #n ( 1..n-m #n
#m #m
18.1
Creating named local variables is very similar to creating temporary variables in User RPL. You have to create a list of local identiers (called lams for short), and run the command BIND. To recall the contents of one of them, just enter its local identier. To store a new value, put that value and the lam in the stack, and run STO. To remove the local variables from memory, use ABND (shortcut for abandon). The code is not checked for matching BIND/ABND, so you may include them in different programs if you wish. But this also means you must be sure to have an ABND for each BIND. Here is a little program that creates two local variables, recalls their contents and assigns new values for them (it is called LAM1):
1 :: %2 %3 { LAM first
111
112
5 LAM sec } BIND LAM first LAM sec DUP LAM first STO %+ LAM sec STO ABND ;
(first contains 2, and sec 3) (recall contents from first - 2) (recall contents from sec - 3)
10
(store new contents in first) (results 5) (store sum in sec) (delete variables from memory)
15
18.2
As said above, you can use unnamed local variables. Technically, they have a name: the null, or empty, name; but all unnamed variables have the same name. Since they cannot be identifed by name, positional syntax is necessary. The above program could be rewritten using null named temporary variables this way (now called LAM2):
1 :: %2 %3 { NULLLAM NULLLAM } BIND 2GETLAM (recalls 2) 1GETLAM (recalls 3) DUP 2PUTLAM %+ 1PUTLAM ABND ;
10
The numbering is done in the same order as the stack levels: 1GETLAM contains what was on level one, 2GETLAM contains what was on level two, etc. There are supported entries to recall and store directly up to the 22nd variable (1GETLAM to 22GETLAM, and their PUTLAM equivalents). To access variables with numbers higher than 23 (which probably will not happen very often), use GETLAM, which takes a bint representing the variable number and returns its
113
contents; and PUTLAM, which takes an object and the variable number, and stores that object in the specied variable.
18.3
It is perfectly possible to use two or more temporary environments at the same time. Nothing special needs to be done during the creation: just use another DOBIND or BIND before abandoning the previous one. When an ABND is found, it always refers to the most recent BIND. If you only use named lams, nothing special needs to be done. There will be no confusion with names, unless you redene an existing variable (but doing this will only make a great mess out of your program). However, when at least one of the temporary environments has unnamed lams, you must pay attention to the numbering. Note that the GETLAM words do not necessarily refer to unnamed local variables: 1GETLAM recalls the most recently bound variable, 2GETLAM the one before that, and so on. (When binding lams, the binding starts at the stack level with the largest number, working towards the one with the smallest number, so that the last bound variable is the one whose contents where in level one.) You may use the GETLAM words also to access named lams. Due to the nature of temporary environments, there appears to be an extra local variable (before all the others) for internal housekeeping purposes. To access the unnamed lams of a previous environment, you must add the number of variables bound in the current environment plus one to the number you would have used before the second binding. The following program (named LAM3) will try to make the above explanation clearer:
1 :: %2 %1 { LAM n2 LAM n1 } BIND 1GETLAM 2GETLAM
10
(Returns 1) (Returns 2)
114
%4 %3 { NULLLAM NULLLAM } BIND 1GETLAM 2GETLAM 4GETLAM 5GETLAM ABND ABND ;
15
20
3) 4) 1) 2)
25
First, this program binds 2 to n2 and 1 n1, but these names are never used. Instead, 1GETLAM is used to acces the most recently bound value, that is, 1, which could also be accessed via LAM n1. Following, 2GETLAM returns the next-to-last value, or 2. Things become more complicated when another environment is bound, this time to unnamed lams. Now 1GETLAM returns 3, which belongs to the new environment, and was the last bound variable. Similarly, 2GETLAM also returns a variable bound in this second batch. If we wanted to access the variable that previously was number one, we need to add the number of variables bound in the new environment (that is, two) plus one (the housekeeping pseudo-variable) to the previous number. So, to get what 1GETLAM would have returned before, we add three to one, obtaining 4GETLAM. And this returns, as expected, 1. Similarly, 5GETLAM returns 2, the same 2GETLAM had returned before the second binding. Naturally, after the rst ABND (corresponding to the binding of values 4 and 3), 1GETLAM and 2GETLAM would again return 1 and 2, respectively. If you have been able to understand the above, you will not have problems to nest temporary environments when necessary.
115
When you are binding a great number of local variables, instead of entering the following code (which takes 67.5 bytes)
1 ... { NULLLAM NULLLAM NULLLAM NULLLAM BIND ...
use this, which takes only 12.5 bytes, a savings of 55 bytes: ... NULLLAM TWENTYFOUR NDUPN {}N BIND ... However, why create a composite if it is going to be exploded later? Replace {}N BIND for DOBIND, and save 2.5 more bytes. Or you can also use TWENTYFOUR ' NULLLAM CACHE. However, if you use this, an extra variable is created to hold the count, so you must add one to the variable positions of the previous examples. When decompiling code, you can sometimes nd things like ... ZEROZEROZERO BINT3 DOBIND ... which is yet another way of binding three null named variables. This works because instead of NULLLAM, any xed address ROM object can be used, as ZERO in this example. The following constructs are the most compact ways to create temporary environments for N null named variables. N 1 2 2 3 4 N Commands to create N null named variables 1LAMBIND ZEROZEROTWO DOBIND FPTR2 2LAMBIND FPTR2 3LAMBIND 4NULLLAM{} BIND NULLLAM #N NDUPN DOBIND
116
18.5
18.5.1
Addr. 272FE 2B3AB 27155 272F3 27937
Reference
Builtin IDs and LAMs
Name NULLID NULLLAM 'IDX (ID_EQ) (ID_SIGMADAT) Description ( id ) Null (empty) identier ( lam ) Puts NULLLAM in the stack. ( id ) Puts ID X unevaluated on the stack. ID EQ ID DAT
18.5.2
Addr. 05B15 362DE
Conversion
Name $>ID DUP$>ID Description ( $ ID ) ( $ $ ID )
18.5.3
Addr. 074D0 074E4 36518 36513 155006 156006
117 Description ( obn..ob1 #n ) Binds #n objects to null named lams. 1LAM has the count, 2LAM the rst object. Decompiles to :: ' NULLLAM CACHE ; ( ob ) Binds ob to LAM 'dvar. ( ) Abandons topmost temporary environment. ( obn..ob1 #n lam ) Binds all objects under the same name. 1LAM has the count. ( NULLLAM ob1..obn #n ) Inverse of CACHE. Always does garbage collection. ( ) Caches stack to SAVELAM. ( ) Dumps SAVELAM. ( lam ob T ) ( lam F ) Tries recalling object from lam. If successful, returns object and TRUE, otherwise returns just FALSE. ( ob lam ) Tries storing object in lam. Generates "Undened Local Name" error if lam is not found. ( #n ob ) Gets contents of nth topmost lam. ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob )
34EBE
DUMP
07D1B
STOLAM
075A5 34616 34620 3462A 34634 3463E 34648 34652 3465C 34666 34670
GETLAM 1GETLAM 2GETLAM 3GETLAM 4GETLAM 5GETLAM 6GETLAM 7GETLAM 8GETLAM 9GETLAM 10GETLAM
118 Addr. 3467A 34684 3468E 34698 346A2 346AC 346B6 346C0 346CA 346D4 346DE 346E8 346F2 346FC 34706 34710 3471A 075E9 34611 3461B 34625 3462F 34639 34643 3464D 34657 34661 3466B 34675 3467F 34689 34693 3469D 346A7 346B1 346BB 346C5 346CF Name 11GETLAM 12GETLAM 13GETLAM 14GETLAM 15GETLAM 16GETLAM 17GETLAM 18GETLAM 19GETLAM 20GETLAM 21GETLAM 22GETLAM (23GETLAM) (24GETLAM) (25GETLAM) (26GETLAM) (27GETLAM) PUTLAM 1PUTLAM 2PUTLAM 3PUTLAM 4PUTLAM 5PUTLAM 6PUTLAM 7PUTLAM 8PUTLAM 9PUTLAM 10PUTLAM 11PUTLAM 12PUTLAM 13PUTLAM 14PUTLAM 15PUTLAM 16PUTLAM 17PUTLAM 18PUTLAM 19PUTLAM 20PUTLAM
18. Temporary Environments Description ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob #n ) Stores new contents to nth topmost lam. ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob )
18.5. Reference Addr. 346D9 346E3 346ED 346F7 34701 3470B 34715 34797 364FF 35DEE 35F42 2F318 3632E 3483E Name 21PUTLAM 22PUTLAM (23PUTLAM) (24PUTLAM) (25PUTLAM) (26PUTLAM) (27PUTLAM) DUP4PUTLAM 1GETABND 1ABNDSWAP 1GETSWAP 1GETLAMSWP1+ 2GETEVAL GETLAMPAIR
119 Description ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ob ) Does DUP then 4PUTLAM. ( 1lamob ) Does 1GETLAM then ABND. ( ob 1lamob ob ) Does 1GETABND then SWAP. ( ob 1lamob ob ) Does 1GETLAM then SWAP. ( # 1lamob #+1 ) Does 1GETLAM then SWAP#1+. ( ? ) Does 2GETLAM then EVAL. ( #n #n ob lam F ) ( #n #n T ) Gets lam contents and name (10 = 1lam, 20 = 2lam, etc.) ( ) Duplicates topmost tempenv (clears protection word). ( {} ) Puts a list with one NULLLAM in the stack. ( {} ) Puts a list with two times NULLLAM in the stack. ( {} ) Puts a list with three times NULLLAM in the stack. ( {} ) Puts a list with four times NULLLAM in the stack.
347AB
DUPTEMPENV
2B3A6 271F4
1NULLLAM{} (2NULLLAM{})
27208
(3NULLLAM{})
2B3B7
4NULLLAM{}
19.1
Some Concepts
As you know from the Introduction, a compiled System RPL program consists of a series of pointers to address in the memory. Basically, a program is executed by jumping to the pointed address, executing whatever is there, returning back to the program, jumping to the next address, and so on. Actually, it is more complicated, because there are also objects such as real numbers, strings and even other programs (secondaries) embedded inside the programs. This requires some magic (actually, just carefully written code) to be properly handled, but it is outside the scope of this document to describe how this is dealt with. Just assume that when an object is found, it is executed. For most objects (such as real numbers or strings), this means putting themselves in the stack, for secondaries this means executing their contents, and for others such as identiers this means trying to recall the contents and executing them, or simply putting themselves in the stack. 120
121
Since the objects are executed in order, it becomes necessary to have some kind of variable that will always point to the next object to be executed. This is called the interpreter pointer, and is stored in a CPU register. After each object is executed, this pointer is advanced to point to the next object. When a DUP is found in the program, what happens is as follows: actually, the only thing that is stored is the address #03188h. A jump is made to that address. In that address, there is some piece of machine-language code. This code is executed and in the end the interpreter pointer is advanced, and a jump is made to the next object, whatever it is. Things get slightly more complicated when one wants to execute, for example, INCOMPDROP. At this commands address, there is a secondary object, whose contents happen to be :: INNERCOMP DROP ;. The problem is that it is necessary to switch to that (sub-)program, execute all its contents, and then return back to the program in which INCOMPDROP was called. Since it is perfectly possible for a sub-program to have even more sub-programs inside it, it turns out that some kind of stack is necessary. When a secondary (or any other composite) is executed, the address of the object after this composite in the calling program is pushed into this stack. The composite is then executed, by means of the interpreter pointer pointing to each of its objects. When it nishes, an address is popped from the return stack, and execution returns there. This was the address of the next object in the previous program, so execution resumes properly. This stack is called the return stack. The description above is rather incomplete, but it should give you an idea of how things work. There are many details that would make a detailed explanation of System RPL programs too long and complicated, so this detailed explanation will not be given in this book. Another important concept is that of the runstream. It is the sequence of objects that follow the object currently being executed. For example, during the execution of the ' command in this program :: ' DUP :: EVAL ; % 1. ; the runstream contains three objects. The rst is the command DUP. The second is the secondary that contains the EVAL command inside (but not the command EVAL or just the ::), and the third is the real number one. Several words (including ', as you will see below), take their argument from the next object in the runstream, and not from the data stack, as most commands do. So, the argument to ' is the command DUP. You should now have understood why this chapter is called Runstream Control: the commands here affect the runstream, that is, they affect the order in which the objects that form the program will be executed.
122
19.2
Runstream Commands
The commands described here are the basic actions available. In the reference section below you will nd several commands that combine these commands with others. Command ' Stack and Description ( ob ) This is very easy to understand: it pushes the object after it (that is, the rst object in the runstream) in the stack. This pushed object will not be executed; execution resumes in the object after it. As an example, :: %1 %2 ' %+ EVAL ; is equivalent to :: %1 %2 %+ ; This action of pushing the next object in the stack instead of evaluating it is called quoting the next object. ( ob ) This pushes into the data stack the object that is pointed to by the topmost pointer in the return stack, and skips this pushed object. In other words, the rst object in the composite that contains the composite currently being executed is pushed in the data stack, and skipped. If, however, the object that would be pushed is SEMI, then a null composite is pushed instead. As an example, the RESOROMP command is just like ROMPTR@, but its argument comes after it in the runstream (see Chapter 16). Here is how RESOROMP is dened: :: 'R ROMPTR@ DROP ; It just pushes the object after RESOROMP in the stack and calls ROMPTR@. ( ob TRUE ) ( FALSE ) This is similar to 'R, but it will not push a null composite if there was no object to be pushed; instead it returns FALSE. If an object could be pushed, it is pushed along with TRUE.
'R
ticR
123
R>
R@
IDUP
RDROP
Stack and Description ( comp ) This pushes a pointer to the body of the composite given as argument in the return stack. That means that when the current secondary ends, execution will not go back to the one that called the current composite. Before that, the composite given as argument will be executed, and only after it nishes will the execution resume at the secondary that called the current one. As an example, the code below returns in the stack the reals 3, 2 and 1, in this order: :: ' :: % 1 ; >R % 3 % 2 ; ( :: ) Pushes in the data stack a secondary whose contents are what is pointed to by the rst pointer in the return stack, which is popped. In other words, it pushes as a secondary the rest of the commands in the secondary that called the current one. This commands will then not be executed after the current secondary nishes. As an example, the code below pushes the reals 3, 2 and 1 in the stack, in this order: :: :: R> EVAL % 1 ; % 3 % 2 ; ( :: ) This is the same as R>, but it does not pop the return stack. The same example of the above command, with R> changed into R@ would return 3, 2, 1, 3 and 2. () Pushes the interpreter pointer into the return stack. This means that after the current secondary nishes, a jump will be made to the object just after the IDUP, thereby executing the rest of the current secondary once more. () Pops the return stack. That is, the remaining objects in the secondary that called the current one will not be executed. () Duplicates the top address in the return stack. () Swaps the top two addresses in the return stack. ( flag ) If the ag is TRUE, skips the rest of the current secondary.
19. Runstream Control Stack and Description () This executes only the next object in the runstream, skipping the rest of the current secondary. The program below pushes only 1 in the stack: :: COLA % 1 % 2 % 3 ; See below for some good uses for COLA. () Skips the next object in the runstream. The program above, with COLA replaced by SKIP would push 2 and 3 in the stack. ( flag ) Does SKIP if the ag is true.
SKIP
?SKIP
factiter:
1 :: LAM x %0= ?SEMI (Exits if x=0) LAM x %* (Multiplies by current value) LAM x %1- LAM x STO COLA factiter ;
Note the word COLA before the recursive invocation of factiter. Without it, the program would require many return stack levels, all of which would point to SEMI. With COLA, nothing is pushed in the return stack. factiter is simply called, without storing the address of where the interpreter should
125
jump back to. This makes the program always use a xed number of return stack levels. However, COLA is not used only in this case. It is a very useful command in other situations. Let us say that in your project you will frequently need to perform a case (see section 20.3) comparing if a real number is equal to 3. It is convenient to write a program to do this (like the built-in word %1=case) instead of repeating %3 %= case all the time. A rst attempt would be this program: :: %3 %= case ; However, this would not work. This is because case takes its arguments from the runstream, that is, the currently executed program, and not from the calling composite. This means the argument for case is ;, which is not what is desired. But there is a solution: use COLA before the case. This will drop the rest of the runstream after the command after it, in a way merging the current command with the composite that called it. So, if we add COLA before case, and embed this new sub-program in another, like this: :: ... :: %3 %= COLA case ; <act_T> <act_F> ... it is as if the code were like this: :: ... %3 %= case <act_T> <act_F> ... which is what we want. Therefore, the correct way to dene our sub-program is with COLA before case. This is a frequent combination, so there is a shortcut command, COLAcase, that is equivalent to COLA followed by case. There are other words like this, see the reference below. The next example (which uses an error-trapping structure that will be described in Chapter 22) is the command from the OT49 library (see section A.3.1), written by Wolfgang Rautenberg. This command is used like this: ... That is, generally as the rst command in a program (which, naturally, can be a System RPL program, not only a User one). It causes the program to be executed with the display off (which makes it slightly faster). All the folows the until the end of the secondary is executed blindly. When is run, it turns off the display, and when the secondary nishes executing, the display is turned back on. But how can this be done, if nothing special needs to be called after the program nishes? The answer is simple: by manipulating the return stack. Here is the disassembly of that command:
1 :: Code R>
126
ERRSET COMPEVAL ERRTRAP :: REVAL ERRJMP ; Code ;
10
The rst code object turns off the display. It is a short and simple piece of machine language, but it is outside the scope of this book to describe it. Then, R> brings the rest of the composite that called into the data stack. It is evaluated by COMPEVAL. The only difculty in the program is that we must turn the display back on even if there was an error in the program. If there was en error, then the object after ERRTRAP is executed. First, 'REVAL brings the rst object after the current composite (this object happens to be the second code object, that turns on the display) into the data stack and executes it. Then, the error is triggered again with ERRJMP. If there was no error, the execution goes directly to the second code object, nishing the program. As an example another way to deal with the return stack, we will study the list processor DoL, also in library OT49. This command expects a list in level two and any object (generally a command or a function) in level one. This object is evaluated for each of the list elements in order, and the results are collected in another list, which is then returned. This program uses some things which we have not studied yet, such as loops and the Virtual Stack. You might want to skip this example now and return to it later. Here is the code, without the argument checking part:
1 :: OVER >R (Push list elements in return stack) ticR (Try to get first element) NOTcaseDROP (If list is empty, drop the object) PushVStack&Clear (Save current stack) BINT0 GetElemBotVStack (Get first list elemement) BEGIN BINT1 GetElemBotVStack xEVAL (Get object and evaluate) RSWAP
10
127
15
20
(Collect results) (Get saved stack) (Drop arguments & first object)
This program may be somewhat difcult to understand at rst, but it manipulates very cleverly the return stack. It starts by using >R to insert a pointer to the list contents in the return stack. If they were not removed later, then after this program nished, each of the objects in the list would be evaluated. Then, the rst object from the list is retrieved, with ticR. This also advances the pointer in the return stack to point to the second element. If the list was empty, then ticR returns FALSE. In this case, the object to be evaluated is dropped, and the empty list remains as the result of the program. The real fun starts when there is at least one element. The whole stack is saved as a virtual stack level, but the rst element of the list (retrieved with ticR previously) is retrived into the new stack. Then, a loop is started. The loop used is very similar to a User RPL WHILE...REPEAT...END loop. For more details, see Chapter 21. The object is retrieved and evaluated, and then the next element from the list is retrieved with ticR. However, since the word BEGIN pushed something in the return stack (for an explanation, see section 21.1.1), it is necessary to use RSWAP to bring the pointer to the list elements back in the rst return stack level, thus allowing ticR to get one of the elements. If there was an element, RSWAP is executed again to put the return stack back into its original stack, and the loop begins again, executing the object, and so on. When there are no more elements, control goes to after the REPEAT word. All results are collected in a list, and we retrieve the saved stack above the list with the results. Then the program simply drops the original list, the object to be evaluated and the rst object of the list, which were in the stack when it was pushed into the Virtual Stack. As you have seen, this program used the return stack as a storage place; the composite that was pushed there was never executed, because each of its elements were removed until there was nothing more to execute.
128
19.4
Addr. 06E8E 06EEB
Reference
Name NOP 'R Description ( ) Does nothing. ( ob ) Pushes next object in return stack (i.e., the rst object in the composite above this one) to the stack (skipping it). If top return stack is empty (contains SEMI), a null secondary is pushed and the pointer is not advanced. ( ? ) Does 'R then EVAL. ( ob1 ob2 ) Does 'R twice. ( ob T ) ( F ) Pushes next object in return stack to stack and TRUE, of just FALSE if the top return stack body is empty. In this case, it is dropped. ( ob ) Does 'R, then RDROP. ( :: ) Pushes :: to top of return stack (skips prolog, i.e., the composite will be executed automatically). ( :: ) Creates and pops a secondary from top return stack body to stack. ( :: ) Like R>, but the return stack is not popped. ( ) Pushes top body into return stack. ( ob ? ) Evaluates object. ( comp ? ) EVAL just pushes a list back, this one executes it. ( ? ) EVAL rst object in the stream above the previous one.
36A4A 06F9F
'RRDROP >R
0701F
R>
129 Description ( ? ) EVAL rst object in the stream above the stream above the previous one. ( ) Jumps to next address in stream. Address is a venibble address, not a system binary. Can only be used to jump to the middle of programs, cannot jump to a program prolog. ( flag ) If TRUE, jumps, else skips ve nibbles. ( flag ) If FALSE jumps, else skips ve nibbles. ( ) Duplicates top return stack level. ( ) Pops the return stack. ( ) Pops two return stack levels. ( ) Pops three return stack levels. ( ob ) Does DROP then RDROP. ( ) Does RDROP then COLA. ( ) Swap in the return stack. ( ) Skips rst object in the return stack (i.e., the rst object in the composite above this one). ( ob ) Pushes an object into the return stack, for example for temporary storage. If ob is a list, the list is put as a whole onto the stream, not the individual elements. ( ob ) Gets an object from the return stack. ( ) DROP the rest of the current stream.
34A31
GOTO
34A46 34A59 26111 06FB7 343E1 343F3 36342 3597F 34144 368C9
?GOTO NOT?GOTO RDUP RDROP 2RDROP 3RDROP DROPRDROP RDROPCOLA RSWAP RSKIP
2B8BE
(OBJ>R)
2B8E6 0312B
(R>OBJ) SEMI
130
19.4.1
Addr. 06E97
Quoting Objects
Name ' Description ( nob (nextob) ) Pushes next object in the stream to the stack (skipping it). ( ob ob nob ) Does DUP then '. ( ob nob ) Does DROP then '. ( ob1 ob2 ob2 ob1 nob ) Does SWAP then '. ( ob1 ob2 ob1 ob2 ob1 nob ) Does OVER then '. ( ob id/lam nob ) Does STO then '. ( T nob ) Pushes TRUE and the next object to the stack. ( F nob ) Pushes FALSE and the next object to the stack. ( #1 F nob ) Pushes ONE, FALSE and the next object to the stack. ( # #+1 nob ) Does #1+ then '. ( NOP ) Pushes NOP to the stack. ( ERRJMP ) Pushes ERRJMP to the stack. ( DROPFALSE ) Pushes DROPFALSE to the stack. ( DoBadKey ) Pushes DoBadKey to the stack. ( DoBadKey T ) Pushes DoBadKey and TRUE to the stack. ( ob DoBadKey T ) Makes the user drop dead, then pushes TRUE. ( x* ) Pushes x* (User word *) to the stack.
131 Description ( xDER ) Pushes xDER (User word ) to the stack. ( xFUNCTION ) Pushes xFUNCTION (User word FUNCTION) to the stack. ( xPOLAR ) Pushes xPOLAR (User word POLAR) to the stack. ( xPARAMETRIC ) Pushes xPARAMETRIC (user word PARAMETRIC) to the stack. ( meta ob1...ob4 meta&ob ob1...ob4 ) Takes ob from runstream and appends it to the meta starting in level 5. ( ob flag ) Is ob eq to user command xDER?
27B6B 27B7F
'IDPOLAR 'IDPARAMETER
29ED0
'Rapndit
36AA4
'xDEREQ
19.4.2
Addr. 06FD1 36A63 3635B 3636F 34AD3 35994 0714D 35715 3570C 35703 356D5 363FB
Skipping Objects
Name COLA ONECOLA SWAPCOLA XYZ>ZCOLA COLA_EVAL COLACOLA SKIP skipcola 2skipcola 3skipcola 5skipcola COLASKIP Description Evals next obj and drops rest of this stream. Does ONE, then COLA. Does SWAP, then COLA. Does UNROT2DROP, then COLA. Returns and evals rst obj in previous stream. Drops rest of current stream does COLA in the above one. Skips 1 obj in the runstream. Does SKIP, then COLA. Does 2SKIP, then COLA. Does 3SKIP, then COLA. Skips 5 objects, then does COLA. Drops rest of current stream and skips one obj in above stream.
Chapter 20 Conditionals
In System RPL, conditionals are a bit different from User RPL. The rst difference is that in User RPL, a false is represented by the real number zero; any other value represents a true. In System RPL, a false is represented by the word FALSE, and a true is represented by the word TRUE (amazing!). These words just put themselves in the stack when run. All commands that do a test return one of them. Words like IT or case take one of them as argument. Should you need, you can convert a TRUE or FALSE to a (real) 0 or 1 with COERCEFLAG. There is not a dedicated function to do the opposite transformation, like UNCOERCEFLAG, but %0<> does the job perfectly. There are many commands that put TRUE, FALSE, or some combination of them in the stack. See the list below. The Boolean operators are present, too: NOT, AND, OR and XOR. There are some combinations, see below for a list.
20.1
Tests
The test words are commands which take one or more arguments and return either TRUE or FALSE, after doing some kind of comparison between the arguments. The tests for each kind of object type are listed in the reference section of the chapter of each object type. Tests for object type can be found on Chapter 29. Other kinds of tests are listed in the reference section below. The most important of these tests are EQ and EQUAL. Both take two objects and return a ag. The rst checks if the objects are the same, i.e., occupy the same address in memory. The second checks if the objects are equal in terms of contents. The difference is that :: BINT2 # 2 EQUAL ; returns TRUE, but if EQUAL is replace by EQ, then the program returns FALSE, because one object is the built-in bint 2, found at address #3311B, and the other is a bint whose address cannot be predicted, but certainly is not in the ROM. Another example: if you put a string in level one, and press ENTER, EQ 132
20.3. Case
133
and EQUAL will return TRUE. However, if you enter a string, and then enter again the exact same string, only EQUAL will return TRUE. This happens because the contents of the strings are the same, but they are different objects in memory, occupying each a different address in memory. They just happen to have the same contents. When possible, you should use EQ in your programs since it is faster than EQUAL.
20.2
Most of the time, you will create this kind of conditionals with the IT and ITE commands: Word IT Stack and Action ( flag ) If the ag is TRUE, the next object is executed, otherwise it is skipped. ( flag ) If the ag is TRUE, the next object is executed, and the second is skipped. If it is FALSE, the next object is skipped and the second is executed.
ITE
The following snippet changes a zero into a one, but does nothing to other numbers: ... DUP %0= IT %1+ ... The code below will output Equal if two objects are equal, and Not equal if not: ... EQUAL $ "Equal" $ "Not equal" ... Naturally, when you need to execute several commands, you will need to include them in a secondary.
20.3 Case
The CASE words are a combination of IT, SKIP and COLA (see Chapter 19). The basic word is case, but there are combinations of it with tests and other commands. case takes a ag in level one. If the ag is TRUE, the next object is
134
20. Conditionals
executed, but only it: the rest of the stream is dropped. So, TRUE case is equivalent to COLA. If the ag is FALSE, the next object is skipped and execution continues after it. So, FALSE case is the same as SKIP. The example below shows how to build a familar case structure similar to that found in other languages (even User RPL!). It outputs a string representing the bint in level one.
1 :: DUP #0= case $ "Zero" DUP BINT1 #= case $ "One" DUP BINT2 #= case $ "Two" ... ;
There are many words that combine case with other words. One of them is OVER#=case. It is not difcult to gure out what it does: rst, OVER. Then, #= compares two bints. Finally, the case works as before. Using this word, the code above could be rewritten as:
1 :: BINT0 OVER#=case $ "Zero" BINT1 OVER#=case $ "One" BINT2 OVER#=case $ "Two" ... ;
In the reference section below, you will nd a list of the words that execute a case besides some other action. These words are composed of an initial part, the case itself and a nal part. Some have only the initial or nal part besides the case, some have both. The initial part represents the commands that are executed before the case, and it should be pretty straightforward to understand their action, as an example NOTcase is equivalent to NOT followed by case. For the nal part, things become more complicated, because there are two kinds of nal part. The rst kind has the nal part written in UPPERCASE letters. The commands in the nal kind are executed if the test is true. You only need to provide the action for the FALSE situation. For example, this snippet ... caseDROP <FalseAction> ... is equivalent to ... case DROP <FalseAction> ...
20.4. Reference
135
The second type comprises the words that have the nal part in lowercase letters. In this case, the commands in the nal part are executed along with the object that follows case when the test is true. In other words, this snippet ... casedrop <TrueAction> <FalseAction> ... is equivalent to ... case :: DROP <TrueAction> ; <FalseAction> ... Unfortunately, some entries have been misnamed, and this convention was not adhered. These entries are marked clearly in the descriptions below. Also, the stack diagrams of most of the words below are not true stack diagrams. What is on the left side of the arrow is the contents of the stack before calling the entry, as usual. ob1 and ob2 are different objects. f1 and f2 are different ags; T represents TRUE and F, FALSE. #m and #n represent two binary integers, #m being smaller than #n. #set is the number of a ag, and this ag is set, #clr is the number of a ag, this ag being clear. On the right of the arrow, the objects which will be executed when the stack matches the left side of the arrow are represented. The initial stream has the form: :: <test_word> <ob1> ... <obn> ; In the diagrams, <rest> represents all the objects after the object that appers before <rest>. In this right side of the arrow there are also objects appearing without the angle brackets already. These are objects in the data stack that result after the word is run, and not objects in the runstream.
20.4 Reference
20.4.1
Addr. 2602B
Boolean Flags
Name COERCEFLAG Description ( T %1 ) ( F %0 ) Converts system ag to user ag, drops current stream. ( % flag ) Can be used to change a user ag into a system ag. ( T ) ( T T )
301BA
%0<>
03A81 27E87
TRUE TrueTrue
136 Addr. 36540 03AC0 36554 283E8 27E9B 35280 2D7006 35289 35B32 28211 2812F 374BE 35EF2 2962A Name TrueFalse FALSE FalseTrue FalseFalse failed DROPTRUE 2DROPTRUE DROPFALSE 2DROPFALSE NDROPFALSE SWAPTRUE SWAPDROPTRUE XYZ>ZTRUE RDROPFALSE
20. Conditionals Description ( T F ) aka: TRUEFALSE ( F ) ( F T ) aka: FALSETRUE ( F F ) ( F T ) ( ob T ) ( ob ob' T ) ( ob F ) ( ob1 ob2 F ) ( ob1..obn #n F ) ( ob1 ob2 ob2 ob1 T ) ( ob1 ob2 ob2 T ) ( ob1 ob2 ob3 ob3 T ) ( F ) Puts FALSE in the stack and drops rest of current stream. ( flag flag' ) Returns FALSE if the input is TRUE, and viceversa. ( flag1 flag2 flag ) Returns TRUE if both ags are TRUE. ( flag1 flag2 flag ) Returns TRUE if either ag is TRUE. ( flag1 flag2 flag ) Returns TRUE if ags are different. ( flag1 flag2 flag ) Returns FALSE if either ag is TRUE. ( flag1 flag2 flag ) Returns TRUE if ag1 is TRUE and ag2 is FALSE. ( flag1 ob flag2 ob flag ) Returns TRUE if either ag is TRUE.
03AF2
NOT
35CB8
ROTAND
20.4. Reference
137
20.4.2
Addr. 03B2E
General Tests
Name EQ Description ( ob1 ob2 flag ) Returns TRUE if both objects are the same, i.e., they occupy the same physical space in memory. Only the addresses of the objects are tested. ( ob1 ob2 ob1 ob2 flag ) Does 2DUP then EQ. ( flag ob1 ob2 flag' ) Does EQ then OR. ( ob3 ob1 ob2 ob3 flag ob3 ) Does EQ then OVER. ( ob flag ) EQ with the next object in the current stream. ( ob ob flag ) Does DUP then EQ:. ( ob1 ob2 flag ) Returns TRUE if the objects are equal (but not necessarily the same), i.e., their prologs and contents are the same. ( ob1 ob2 flag ) Returns TRUE if the objects are different. ( flag ob1 ob2 flag' ) Does EQUAL then OR. ( ob1 ob2 ob1 ob2 flag ) Tests if ob1 contains ob2. If ob1 is a symbolic then ob1 is searched for embedded ob2. If ob1 is a list then ob1 is traversed for a direct match. Otherwise, tests if ob1 and ob2 are equal.
20.4.3
Addr. 34AA1 34A92
True/False Tests
Name ?SEMI NOT?SEMI Description ( T :: ; ) ( F :: <ob1> <rest> ; ) ( T :: <ob1> <rest> ; ) ( F :: ; )
20. Conditionals Description ( ob T :: ob ; ) ( ob F :: <ob1> <rest> ; ) ( ob T :: ob <ob1> <rest> ; ) ( ob F :: <ob1> <rest> ; ) ( ob1 ob2 T :: ob2 ob1 <ob1> <rest> ; ) ( ob1 ob2 F :: ob1 ob2 <ob1> <rest> ; ) ( ob1 ob2 T :: ob1 ob2 <ob1> <rest> ; ) ( ob1 ob2 F :: ob2 ob1 <ob1> <rest> ; ) ( ob1 ob2 T :: ob1 <ob1> <rest> ; ) ( ob1 ob2 F :: ob2 <ob1> <rest> ; ) ( ob1 ob2 T :: ob2 <ob1> <rest> ; ) ( ob1 ob2 F :: ob1 <ob1> <rest> ; ) ( T ob :: ob <ob1> <rest> ; ) ( F ob :: <ob1> <rest> ; ) ob is actually executed, and not pushed in the stack. ( T ob1 ob2 :: ob1 <ob1> <rest> ; ) ( F ob1 ob2 ob2 <ob1> <rest> ; ) ob1 or ob2 is actually executed, and not pushed in the stack. ( T ob1 ob2 :: ob1 ; ) ( F ob1 ob2 :: ob2 ; ) ob1 or ob2 is actually executed, and not pushed in the stack. Return to composite and ITE there. ( T :: <ob1> <rest> ; ) ( F :: <ob2> <rest> ; ) ( T :: <ob2> <rest> ; ) ( F :: <ob1> <rest> ; ) aka: NOT_IT
35DDA
?SKIPSWAP
35F97
?SWAPDROP
35F7E
NOT?SWAPDROP
070FD
RPIT
070C3
RPITE
34AF4
COLARPITE
2'RCOLARPITE IT ?SKIP
20.4. Reference Addr. 34B3E 36865 34ABE 36EED 349F9 34A13 36D4E 36E6B 359E3 3495D 3494E 34985 Name ITE COLAITE ITE_DROP ANDITE case NOTcase ANDcase ANDNOTcase ORcase casedrop NOTcasedrop case2drop
139 Description ( T :: <ob1> <ob3> <rest> ; ) ( F :: <ob2> <rest> ; ) ( T :: <ob1> ; ) ( F :: <ob2> ; ) ( ob T :: <ob2> <rest> ; ) ( ob F :: ob <ob1> <rest> ; ) ( f1 f2 :: <ob1> <ob3> <rest> ; ) ( f1 f2 :: <ob2> <rest> ; ) ( T :: <ob1> ; ) ( F :: <ob2> <rest> ; ) ( T :: <ob2> <rest> ; ) ( F :: <ob1> ; ) ( f1 f2 :: <ob1> ; ) ( f1 f2 :: <ob2> <rest> ; ) ( f1 f2 :: <ob1> ; ) ( f1 f2 :: <ob2> <rest> ; ) ( f1 f2 :: <ob1> ; ) ( f1 f2 :: <ob2> <rest> ; ) ( ob T :: <ob1> ; ) ( ob F :: ob <ob2> <rest> ; ) ( ob T :: ob <ob2> <rest> ; ) ( ob F :: <ob1> ; ) ( ob1 ob2 T :: <ob1> ; ) ( ob1 ob2 F :: ob1 ob2 <ob2> <rest> ; ) ( ob1 ob2 T :: ob1 ob2 <ob2> <rest> ; ) ( ob1 ob2 F :: <ob1> ; ) ( ob T :: ; ) ( ob F :: ob <ob1> <rest> ; ) ( ob T :: ob <ob1> <rest> ; ) ( ob F :: ; ) ( ob T T ) ( ob F :: ob <ob1> <rest> ; ) Note: should be caseDRPTRU. ( ob T F ) ( ob F :: ob <ob1> <rest> ; ) Note: should be caseDRPFLS.
34976
NOTcase2drop
365B3
casedrpfls
20. Conditionals Description ( ob T :: ob <ob1> <rest> ; ) ( ob F F ) Note: should be NOTcaseDRPFLS. ( ob1 ob2 T :: ; ) ( ob1 ob2 F :: ob1 ob2 <ob1> <rest> ; ) ( ob1 ob2 T :: ob1 ob2 <ob1> <rest> ; ) ( ob1 ob2 F :: ; ) ( ob1 ob2 T F ) ( ob1 ob2 F :: ob1 ob2 <ob1> <rest> ; ) Note: should be case2DRPFLS. ( T T ) ( F :: <ob1> <rest> ; ) ( T :: <ob1> <rest> ; ) ( F T ) ( T F ) ( F :: <ob1> <rest> ; ) ( T :: <ob1> <rest> ; ) ( F F ) ( T :: <ob1> ; ) ( F :: <ob2> <rest> ; ) Drops the rest of current stream and executes case in the stream above. ( T :: <ob2> <rest> ; ) ( F :: <ob1> ; ) Drops the rest of current stream and executes NOTcase in the stream above.
349D6
case2DROP
349EA
NOTcase2DROP
365CC
case2drpfls
359C8
COLANOTcase
20.4.4
Addr. 363B5 363E2
; ; ; ;
) ) ) )
20.4. Reference Addr. 35C54 36F29 36F3D 348D2 348E2 34939 Name #=ITE #<ITE #>ITE #=case OVER#=case #=casedrop Description ( #m #n :: <ob1> <ob3> <rest> ; ( #m #n :: <ob2> <rest> ; ) ( #m #n :: <ob1> <ob3> <rest> ; ( #m #n :: <ob2> <rest> ; ) ( #m #n :: <ob2> <rest> ; ) ( #m #n :: <ob1> <ob3> <rest> ; ( #m #n :: <ob1> ; ) ( #m #n :: <ob2> <rest> ; ) ( #m #n :: #m <ob1> ; ) ( #m #n :: #m <ob2> <rest> ; ) ( #m #n :: <ob1> ; ) ( #m #n :: #m <ob2> <rest> ; ) Note: should be OVER#=casedrop. ( #m #n F ) ( #m #n :: #m <ob1> <rest> ; ) Note: should be OVER#=caseDRPFLS. ( #m #n :: <ob2> <rest> ; ) ( #m #n :: <ob1> ; ) ( #m #n :: <ob1> ; ) ( #m #n :: <ob2> <rest> ; ) ( #m #n :: <ob2> <rest> ; ) ( #m #n :: <ob1> ; ) ( #0 :: ; ) ( # :: <ob1> <rest> ; ) ( #0 :: <ob2> <rest> ; ) ( # :: <ob1> <rest> ; ) ( #0 :: <ob1> <ob3> <rest> ; ) ( # :: <ob2> <rest> ) ( #0 :: #0 <ob1> <rest> ; ) ( # :: # <ob2> <rest> ; ) ( #0 :: #0 <ob1> <ob3> <rest> ; ( # :: # <ob2> <rest> ; ) ( #0 :: <ob1> ; ) ( # :: <ob2> <rest> ; ) ( #0 :: #0 <ob1> ; ) ( # :: # <ob2> <rest> ; ) ( #0 :: <ob1> ; ) ( # :: # <ob2> <rest> ; )
141
) )
36590
#=casedrpfls
36D9E 36D76 36DCB 34A7E 36383 36F15 36ED4 36F51 348FC 348F7 3490E
#<>case #<case #>case #0=?SEMI #0=?SKIP #0=ITE DUP#0=IT DUP#0=ITE #0=case DUP#0=case DUP#0=csedrp
142 Addr. 36D21 36D8A 3639C 36DB2 25E72 Name DUP#0=csDROP #1=case #1=?SKIP #>2case ?CaseKeyDef
20. Conditionals Description ( #0 :: ; ) ( # :: # <ob1> <rest> ; ) ( #1 :: <ob1> ; ) ( # :: <ob2> <rest> ; ) ( #1 :: <ob2> <rest> ; ) ( # :: <ob1> <rest> ; ) ( #0/#1/#2 :: <ob2> <rest> ; ) ( # :: <ob1> ; ) ( # #' :: ' ob1 T ; ) ( # #' :: <ob2> <rest> ; ) Compares two bints. If equal, quotes the next object from the runsream and returns it along with TRUE. ( # #' ob T ) ( # #' F ) ( # #' :: <ob2> <rest> ; ) Compares two bints. If equal, tries to resolve the rompointer which must be the next object in the runstream. The ROMPTR@ pushes TRUE when successful, so this entry can be used directly for key handlers.
25E73
?CaseRomptr@
20.4.5
Addr. 2B149 36DDF 2B15D 2B11C
2B1A3
%1=case
143 Description ( C%1 :: C%1 <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) ( 1 :: 1 <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) Both a real and a complex one are TRUE conditions for this test. ( %2 :: %2 <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) ( C%2 :: C%2 <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) ( 2 :: 2 <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) Both a real and a complex two are TRUE conditions for this test. ( %-1 :: %-1 <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) ( C%-1 :: C%-1 <ob1> ; ) ( ob ob <ob2> <rest> ; ) ( -1 :: -1 <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) Both a real and a complex -1 are TRUE conditions for this test.
20.4.6
Addr. 2AFFB 2AF37 2B01B 2B06A 2B083
20. Conditionals Description ( Meta&NEG Meta COLA ) ( Meta Meta SKIP ) ( Meta&(%<0) Meta&ABS(%) COLA ) Meta&NEG Meta COLA ; Meta Meta SKIP Meta&(%<0) Meta&ABS(%) COLA
20.4.7
Addr. 36EBB 36F01
36D3A 34999
jEQcase EQcase
359F7
REQcase
34920
EQcasedrop
35A10
REQcasedrop
20.4. Reference Addr. 2AD81 Name EQUALcasedrop Description ( ob1 ob2 :: <ob1> ; ) ( ob1 ob2 :: ob1 <ob2> <rest> ) ( $ $' :: <ob1> ; ) ( $ $' :: $ <ob2> <rest> ; ) Note: should be OVERtok=casedrop. ( seco :: seco <ob2> <rest> ; ( ob :: ob <ob1> ; ) ( id :: id <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) ( id :: id <ob2> <rest> ; ) ( ob :: ob <ob1> ; ) ( id/lam :: id <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) ( % :: <ob1> ; ) ( ob :: <ob2> <rest> ; ) ( % :: % <ob2> <rest> ; ) ( ob :: ob <ob1> ; ) ( [] :: [] <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) ( {} :: {} ob1 ; ) ( ob :: ob <ob2> <rest> ; ) ( {} :: {} <ob2> <rest> ; ) ( ob :: ob <ob1> ; ) ( seco :: seco <ob2> <rest> ; ( ob :: ob <ob1> ; ) ( romp :: romp <ob2> <rest> ; ( ob :: ob <ob1> ; ) ( %/C%/[]/[L] :: <ob1> ; ) ( ob :: ob2 <rest> ; ) If %, C%, [ ] or [L] then COLA, else SKIP.
145
29E99
tok=casedrop
2ADBD 2B0CC 36E93 2B0EF 36DF3 36EA7 36E07 36E43 260C6 260D0 260CB 2ADE0
nonopcase idntcase dIDNTNcase idntlamcase REALcase dREALNcase dARRYcase dLISTcase NOTLISTcase NOTSECOcase NOTROMPcase numb1stcase
) )
146
20. Conditionals
20.4.8
Addr. 36F65 36F79 36C4F
Miscellaneous
Name UserITE SysITE caseDoBadKey Description ( #set :: <ob1> <ob3> <rest> ; ) ( #clr :: <ob2> <rest> ; ) ( #set :: <ob1> <ob3> <rest> ; ) ( #clr :: <ob2> <rest> ; ) ( T :: DoBadKey ; ) ( F :: <ob1> <rest> ; ) aka: caseDEADKEY ( ob T :: DoBadKey ; ) ( ob F :: ob <ob1> <rest> ; ) ( T :: ERRJMP ; ) ( F :: <ob> <rest> ; ) ( T :: SIZEERR ; ) ( F :: <ob> <rest> ; ) ( T :: <ob> <rest> ; ) ( F :: SIZEERR ; ) ( T :: <ob1> <rest> ; ) ( F :: TYPEERR ; ) ( :: <ob1> <rest> ; ) ( :: <rest> ; ) Tests if there is no edit line active. ( :: <ob1> <rest> ; ) ( :: <rest> ; ) Tests if there is an edit line active. ( :: <ob1> ; ) ( :: <ob2> <rest> ) Tests for algebraic mode and does case.
36E57
EditExstCase
2BE36
(ALGcase)
Chapter 21 Loops
As in User RPL, there are two types of loops in System RPL: indenite loops and denite loops. Indenite loops are loops in which you do not know beforehand how many times it will be executed: it will repeat until a specic condition is met. They are created in a very similar manner to User RPL indefinite loops. Denite loops, on the other hand, are executed a number of times specied before its start. They not created exactly like in User RPL, but their use is simple and more powerful. For example, you can change the number of times to run the loop while running it. In the descriptions below, the elements between < > can consist of several objects, unless otherwise noted.
21.1
Indenite Loops
In System RPL, indenite loops can be made in three ways. The rst is the WHILE loop. It is created like this:
1 BEGIN <test clause> WHILE <loop object> REPEAT
This kind of loop executes <test clause>, and if the test is TRUE, <loop object> is executed, and the loop starts again. If the test returned FALSE, then execution resumes past REPEAT. If the rst test returned FALSE, this loop would never be executed. This loop requires <loop object> to be a single object. Most of the times, this will be a composite. The second type of indenite loop is the UNTIL loop. It is created like this: 147
148
1 BEGIN <loop clause> UNTIL
21. Loops
This loop is always executed at least once. The word UNTIL expects a ag. If it is FALSE, the <loop clause> is executed again. If it is TRUE, execution continues past UNTIL. There is also a third type of indenite loop:
1 BEGIN <loop object> AGAIN
This loop has no test. To exit it, an error condition must happen, or the return stack must be directly manipulated. This is useful if the loop code contains several different locations at which decisions about repeating or exiting the loop have to be made.
21.1.1
Indenite loops are formed by combinations the words BEGIN, WHILE, REPEAT, UNTIL and AGAIN. These have nothing special, they are commands just like the others, that when combined allow loops to be made. They work by manipulating the runstream and the return stack, so be sure you understand this concepts (see section 19.1 if in doubt). Word BEGIN UNTIL Stack and action () This copies the interpreter pointer into the return stack. ( flag ) If the ag is TRUE, pops the return stack, otherwise sets the interpreter pointer to the topmost address of the return stack, without popping it. ( flag ) If the ag is TRUE, does nothing. Otherwise, pops the return stack and skips the next two objects in the runstream. () Sets the interpreter pointer to the topmost pointer of the return stack, without popping it.
WHILE
REPEAT
149
Stack and action () Sets the interpreter pointer to the topmost address of the return stack, without popping it.
From the descriptions above, you should have understood how the loops work, and also why the BEGIN...WHILE...REPEAT loops requires a single object between WHILE and REPEAT.
150
1 :: BINT5 ONE_DO INDEX@ LOOP ;
21. Loops
21.2.1
If you have some familiarity with concepts such as the return stack and the runstream (described in section 19.1), this section will explain to you how a DO loop works. When the word DO is executed, it pushes the interpreter pointer (which points to the rst object after the DO) to the return stack. It also creates a DoLoop environment, storing the initial and stop values. Execution continues normally, running all commands between DO and LOOP. When LOOP is executed, it increments the current value in the most recent DoLoop environment. If it is greater than or equal to the stop value of that environment, the environment is destroyed, and one level is popped out of the return stack. This removes the pointer to the rst object after DO, and execution continues normally after LOOP. If the value is smaller, then the interpreter pointer is set to the top value in the return stack, causing the execution to re-start at the rst object after the DO.
21.3
21.3.1
Addr. 0716B
Reference
Indenite Loops
Name IDUP Description ( ) Pushes interpreter pointer into the return stack. ( ) Pushes interpreter pointer into the return stack.
071A2
BEGIN
151 Description ( ) Sets the interpreter pointer to the topmost value in the return stack, without popping it. ( ) Sets the interpreter pointer to the topmost value in the return stack, without popping it. ( flag ) If FALSE then AGAIN, otherwise RDROP. ( flag ) NOT then UNTIL. ( # # ) Actually, should be DUP#0=UNTIL. ( flag ) If TRUE does nothing, otherwise RDROP then 2SKIP. ( flag ) NOT then WHILE. ( # ) Try to guess what it does.
071E5
REPEAT
36428 36441
NOT_WHILE DUP#0<>WHILE
21.3.2
Addr. 073F7 073C3 364C8 073CE 073DB 364E1 07334 073A5 364AF 36496 34AAD 07221
Denite Loops
Name DO ZERO_DO DUP#0_DO ONE_DO #1+_ONE_DO toLEN_DO LOOP +LOOP DROPLOOP SWAPLOOP SEMILOOP INDEX@ Description ( #stop #start ) ( #stop ) ( #stop #stop ) ( #stop ) ( #stop ) ( {} {} ) From ONE to #elements. ( ) ( # ) Increments index by specied number. ( ob ) ( ob1 ob2 ob2 ob1 ) ( ) ( # ) Recalls topmost loop counter value.
152 Addr. 3645A 3646E 36482 367D9 07270 07249 07295 283FC 07258 072AD 07264 072C2 3709B Name DUPINDEX@ SWAPINDEX@ OVERINDEX@ INDEX@#INDEXSTO ISTOP@ ISTOPSTO ISTOP-INDEX JINDEX@ JINDEXSTO JSTOP@ JSTOPSTO ExitAtLOOP
21. Loops Description ( ob ob # ) ( ob1 ob2 ob2 ob1 # ) ( ob1 ob2 ob1 ob2 ob1 # ) ( # #' ) ( # ) Stores new topmost loop counter value. ( # ) Recalls topmost loop stop value. ( # ) Stores new topmost loop stop value. ( # ) ( # ) Recalls second topmost loop counter value. ( # ) Stores new second topmost loop counter value. ( # ) Recalls second topmost loop stop value. ( # ) Stores new second topmost loop stop value. ( ) Does not exit loop immediately. Just stores zero as the stop value, so all objects until the next LOOP will be evaluated. aka: ZEROISTOPSTO
22.1
Trapping Errors
You can intercept the execution of the error handling subsystem, i.e., trap an error generated by your program, using the following structure:
1 :: ... ERRSET :: <suspect objects> ; ERRTRAP :: <if-error objects> ; ... ;
If <suspect objects> and/or <if-error objects> are only a single object, it is not necessary to include them inside a secondary, naturally. It works like this: if the <suspect objects> generates an error, the execution continues at <if-error objects>. Otherwise, it continues past it. The action of <if-error objects> is completely exible. Normally, it will handle the error and then continue or exit the program. The current error number can be recalled with ERROR@, and then your program can do different actions on different kinds of errors. The error messages and numbers can be found in Appendix E. 153
154
22.1.1
Each temporary environment (see Chapter 18), DO/LOOP environment (see Chapter 21) and virtual stack level (see Chapter 23) has a protection word. Its purpose is to allow the error handling subsystem to distinguish which environments were created before the error trap, and which were created after. This way, all environments that were created after the error trap was set will be deleted in case of an error. For example, consider the following code:
1 :: ... 1LAMBIND ... TEN ZERO_DO ERRSET :: ... 1LAMBIND ... FIVE ONE_DO <suspect object is here> LOOP ABND ; ERRTRAP :: <error handling> ; LOOP ... ABND ;
10
15
20
If an error is generated, then the error will be trapped. The inner DO/LOOP and temporary environments will be deleted, thanks to the protection word. When one of these environments is created, its protection word is set to zero. The word ERRSET increments the protection word of the most recent environment of each of the three kinds. This way, these environments now have a non-zero protection word. (The protection word was initialized to zero when the environment was created.) The words ERRTRAP and ERRJMP delete these kinds of environments (from the newest to the oldest) until they nd one (of each type) with a non-zero protection word. These environments were the ones that already existed before
155
the setting of the error trap, because they have had their values increased by ERRSET. This way, all environments created after the setting of the trap (which still have the protection word as zero) are deleted. Another effect of ERRTRAP and ERRJMP is that they decrement the protection word of those rst environments found with a non-zero protection word, so that the process works correctly if there are several levels of nesting.
22.2
Generating Errors
The error handling subsystem is invoked by the word ERRJMP. If an error trap was set, the error handler will be executed. If none was set, then the default one will be run. In most cases, when you generate an error, you will let the default error handler deal with it. This default handler does a beep (if this feature is enabled), and displays a description of the error in a message box. The displayed message depends on two things: the error number, which denes the error message (such as Bad Argument Type or Too Few Arguments) and the last stored command name. This last stored command name is automatically stored by the CK<n> words described in Chapter 29. As mentioned there, if you are writing a program that is not part of a library, no command name should be stored, because otherwise an ugly name will be shown. To dene the error number, use the word ERRORSTO. It expects a bint as argument: the number of the error. The errors are listed in Appendix E. There are some words that automate this process, generating some common errors, such as SETTYPEERROR. These words are listed in the reference section below. There are also shortcut words for generating some CAS error messages. These are described in Chapter 52. Sometimes, however, it is desired to generate an error message that is not in the built-in error list. In order to do that, rst you need to store the desired message by means of the command EXITMSGSTO. Then, store #70000 as the error number. Note that there is a built-in bint, called #EXITERR, which contains that number. Now, just call ERRJMP. The process above can be simplied by using the words DO#EXIT and DO$EXIT. The rst takes a bint as argument, stores that number and calls ERRJMP. The latter is used with strings, it takes a string as argument and does the actions described in the previous chapter. However, both entries also call
156
AtUserStack, which tells the error handling system not to delete any objects in the stack. So, do not use this word if there are objects in the stack (put by your program) that should be deleted. The automatic deletion of non-user objects in the stack when an error occurs will be described in more detail in section 29.1.
22.3
22.3.1
Addr. 26067 04CE6 04D0E 36883 04D33 04ED1 04E07 04E37 25EAE
Reference
General Words
Name ERRBEEP ERROR@ ERRORSTO ERROROUT ERRORCLR ERRJMP GETEXITMSG EXITMSGSTO DO#EXIT Description ( ) Beeps. ( # ) Returns current error number. ( # ) Stores new error number. ( # ) Stores new error number and calls ERRJMP. ( ) Stores zero as new error number. ( ) Invokes error handling sub-system. ( $ ) Gets EXITMSG (user dened error message). ( $ ) Stores $ as EXITMSG. ( # ) Stores new error number, does AtUserStack and then ERRJMP. ( % ) Same as above, but takes real number as argument. ( $ ) Stores string as EXITMSG, #70000 as error number, does AtUserStack and then ERRJMP. ( ) Does ERRORCLR and ERRJMP.
25EB0
DO%EXIT
25EAF
DO$EXIT
04EA4
ABORT
157 Description ( ) Sets new error trap. ( ) Error trap marker. If no error happens, still removes all temporary environments created since ERRSET. ( # $ ) Fetches message from message table. To get a message from a library, use the formula: libnum*#100+msgnum. aka: JstGETTHEMSG ( # $ ) If #70000 then does GETEXITMSG, else does JstGetTHEMESG. ( # $msg ) ( ob ob ) If the argument is a bint, does JstGETTHEMSG to fetch a message. Other arguments are returned unchanged.
04D87
JstGetTHEMESG
04D64
GETTHEMESG
39332
(?GETMSG)
22.3.2
Addr. 04FB6 05016 04FF2 26134 260C1 26116 262E2
158 Addr. 262DD 262D8 262E7 2F458 2F37B 3721C Name SETTYPEERR SETSIZEERR SETNONEXTERR SETIVLERR SetIOPARErr Sig?ErrJmp
22. Error Handling Description Error 202h Generates "Bad Argument Type" error. Error 203h Generates "Bad Argument Value" error. Error 204h Generates "Undened Name" error. Error 304h Generates "Undened Result" error. Error C12h Generates "Invalid IOPAR" error. ( # ) Calls ERRJMP if the error number is any of {13E 123 DFF}. ( ) Error handler for applications which use savefmt1 to save the current display format. Calls rstfmt1 and then errors out.
25F10
ederr
160
command, it saves the stack into the Virtual Stack, then run the command. Once the command has been run, it restores the pushed virtual stack above the new one. The Virtual Stack is located inside a string which is the rst object in TEMPOB. It has a similar structure as a Local Variable stack. It is made with blocks, and is protected exactly like local variables. If you trap an error, the virtual stacks created inside the ERRSET and ERRTRAP will be automatically deleted, exactly as are local variable blocks. (See section 22.1.1 for more information.) For examples of the application of the Virtual Stack, see the DoL list processor in section 19.3 and the HP48 Browser example in section 34.7. Following, there is a list of the commands that deal with the Virtual Stack.
23.1
Addr. 25F1E
Reference
Name PushVStack Description ( obn..ob1 obn..ob1 ) Virtual Stack: ( [obn..ob1] ) Pushes the RPN stack onto the Virtual Stack. The RPN stack is unchanged. ( obn..ob1 ) Virtual Stack: ( [obn..ob1] ) Does PushVStack and then clears the RPN stack. ( obn..ob1 ) Virtual Stack: ( [obn..ob1] ) Pops the topmost virtual stack into the RPN stack. The previous contents of the RPN stack are preserved. (The Meta in the name means that a count is returned, but the DROP removes it afterwards.)
25F1F
PushVStack&Clear
25F1A
PopMetaVStackDROP
161 Description ( obm..ob1 obn'..ob1' ) Virtual Stack: ( [obn'..ob1'] ) Pops the topmost virtual stack into the RPN stack. The previous contents of the RPN stack are lost. ( obn..ob1 ) Virtual Stack: ( [obn..ob1] [obn..ob1] ) Inserts the objects from the topmost virtual stack into the RPN stack. The Virtual Stack is unchanged. (The Meta in the name means that a count is returned, but it is removed by DROP.) ( obm..ob1 obn'..ob1' ) Virtual Stack: ( [obn'..ob1'] [obn'..ob1'] ) Copies the topmost virtual stack into the RPN stack. The Virtual Stack is not changed, but the current RPN stack is lost. ( obn..ob1 #n obn..ob1 #n ) Virtual Stack: ( [obn..ob1] ) Pushes #n objects as a new virtual stack. Any other objects in the RPN stack are not pushed. The RPN stack is unchanged. ( obn..ob1 #n ) Virtual Stack: ( [obn..ob1] ) Does PushMetaVStack then drops the pushed objects. Any other objects present in the RPN stack are neither pushed nor dropped.
25F17
GetMetaVStackDROP
25F18
GetVStack
26265
PushMetaVStack
25F1D
PushMetaVStack&Drop
23. The Virtual Stack Description ( obn..ob1 #n ) Virtual Stack: ( [obn..ob1] ) Insers the contents of the most recent virtual stack into the RPN stack, followed by the count. The previous contents of the RPN stack are not lost. ( obn..ob1 #n ) Virtual Stack: ( [obn..ob1] [obn..ob1] ) Inserts the objects from the topmost virtual stack into the RPN stack, along with the count. The Virtual Stack is unchanged. ( obn..ob1 obm'..ob1' #m obm'..ob1' #m ) Virtual Stack: ( [obn..ob1] ) Pushes the contents of the RPN stack which do not belong to the meta (ie, are "above" it) into a new virtual stack, removing these elements, but keeping the meta. ( obn..ob1 obm'..ob1' #m obm'..ob1' ) Virtual Stack: ( [obn..ob1] ) Does PushVStack&Keep and then DROP. ( obm'..ob1' obn..ob1 obm'..ob1' ) Virtual Stack: ( [obn..ob1] ) Pops the contents of the topmost virtual stack (like PopMetaVStackDROP would have done) into the RPN stack, but above the current contents of the RPN stack. This undoes PushVStack&Keep (or PushVStack&KeepDROP).
2624C
GetMetaVStack
25F20
PushVStack&Keep
25F21
PushVStack&KeepDROP
25F1C
PopVStackAbove
163 Description ( ) Virtual Stack: ( [obn..ob1] ) Drops the topmost virtual stack from the Virtual Stack. ( #i obi ) Virtual Stack: ( [obn..ob1] [obn..ob1] ) Returns the ith object from the topmost virtual stack, counting from the top. "Counting from the top" means that object # 0 is the one at the highest-numbered level (n), # 1 is the one at level n-1, and so on. Note: no checking wheter #i is valid. ( new_ob #i ) Virtual Stack: ( [obn..ob(n-i)..ob1] [obn..new_ob..ob1] ) Replaces the ith object from the topmost virtual stack with new_ob, counting from the top. Note: no checking wheter #i is valid. ( #i obi ) Virtual Stack: ( [obn..ob1] [obn..ob1] ) Returns the ith object from the topmost virtual stack, counting from the bottom. "Counting from the bottom" means that # 0 is the object in the lowest numbered level (generally thought of as 1), # 1 is at level 2, etc. Note: no checking wheter #i is valid. ( new_ob #i ) Virtual Stack: ( [obn..obi..ob1] [obn..new_ob..ob1] ) Replaces the ith object from the topmost virtual stack with new_ob, counting from the bottom. Note: no checking wheter #i is valid.
26229
GetElemTopVStack
2626F
PutElemTopVStack
26224
GetElemBotVStack
2626A
PutElemBotVStack
23. The Virtual Stack Description ( # ) Hacking stuff: Gets the protection word of the last VStack level. ( # ) Hacking stuff: Sets the protection word of the last VStack level.
2622E
SetVStackProtectWord
STO
One problem with STO and @ is that if you give, say, SIN as the argument, the whole body of the function is stored in the variable. For that reason, it is better to use SAFESTO and SAFE@, which work like STO and @, but they automatically convert ROM bodies into XLIB names (SAFESTO) and back again (SAFE@). Note that the SAFE in these and other entries only means that they do 165
166
the conversions described above. With other aspects, there is no safety in these entries. There are many other words related to memory, which you will nd in the list below.
24.1
24.1.1
Addr. 0797B
Reference
Recalling, Storing and Purging
Name @ Description ( id/lam ob T ) ( id/lam F ) Basic recalling function. ( id/lam id/lam ob T ) ( id/lam id/lam F ) Does DUP then @. ( id/lam ob T ) ( id/lam F ) For lams does @. For ids does ?ROMPTR> to the ob found. ( id/lam id/lam ob T ) ( id/lam id/lam F ) Does DUP then SAFE@. ( id ob F ) ( id T ) Same as SAFE@, but works only in the current directory. ( ID ob T ) ( ID F ) Switches temporarily to the HOME directory and executes @ there. ( id ob ) Same as SAFE@, but errors if variable is not found. Also works for lams, but you get the wrong error. ( {path id} ob ) Recalls from specied path.
35C2C
DUP@
35A5B
SAFE@
35A56
DUPSAFE@
25EF7
SAFE@_HERE
2F064
Sys@
2F2A3
XEQRCL
2F24E
LISTRCL
167 Description ( ob id/lam ) For ids this assumes ob is not pco. If replacing some object, that object is copied to TEMPOB and pointers are updated. For lams: Errors if lam is unbound. ( ob id/lam ) For ids, does ?>ROMPTR to the object before storing. ( ob ID ) Switches temporarily to the HOME directory and executes STO there. ( ob id/lam ) Same as SAFESTO, but will only store in the current directory and will not overwrite a directory. aka: ?STO_HERE ( ob ID ) ( ob id ) ( ob symb ) Like xSTO, but if the level 1 argument is symbolic, use the rst element of it as the variable to write to. ( id/lam ) Inputs value for a variable and stores it. ( newob oldob newob ) Replaces oldob (in memory) with newob. ( id ) Purges variable. Does no type check rst. ( id ) Like PURGE, but only works in current directory. ( idnt/lam ) Purge idnt/lam if it exist. ( ob id ) Creates a variable in the current directory. Errors if id is or contains current directory. Assumes id is not a pco.
35A29
SAFESTO
2F380
SysSTO
25E79
XEQSTOID
25F0C 3E823
XEQStoKey xSTO>
1D3006 08696
SAFEPURGE CREATE
24. Memory Operations Description ( ) Next object in the runstream is evaluated for the current directory only. ( ob ) STO to LAM LAMLNAME.
36A8B
'LAMLNAMESTO
24.1.2
Addr. 25EA1
Directories
Name CREATEDIR Description ( id ) Creates an empty directory. Calls ?PURGE_HERE rst to delete the original. ( rrp ob T ) ( rrp F ) Recalls rst object in directory. ( rrp ob T ) ( rrp F ) Recalls rst object in directory (not null named). ( ob ob' T ) ( ob F ) Recalls next object in directory. ( ob ob' T ) ( ob F ) Recalls next object in directory (not null named). ( ob id ) Recalls name of object in current directory. ( id ) Purges a directory. Checks references, etc. rst. ( {id1 id2..} ) Orders the variables in the directory by moving the given variables to the beginning of the directory. ( {id1 id2..} ) Returns list of variables from current directory.
08326
LASTRAM-WORD
25EE7
LastNonNull
08376
PREVRAM-WORD
25EF2
PrevNonNull
082E3 25F14
RAM-WORDNAME XEQPGDIR
2F296
XEQORDER
25EB9
DOVARS
169 Description ( % {} ) Returns a list of variables in the current directory with user type given by the number. Internal TVARS if a single number was given. ( {# #' ...} {} ) Returns a list of variables in the current directory with user type given by any of the numbers in the list. This is the core of the TVARS program. ( {HOME dir1 dir2..} ) Returns current path. ( ) Goes to parent directory. ( rrp ) Recalls current directory. ( rrp ) Sets new current directory. ( rrp flag ) Is rrp HOME? ( ) Sets HOME as current directory. aka: SYSCONTEXT ( ) Binds current and last directories to two nullnamed lams. ( ) First sets HOME as both the current and last directories (in case an error happens). Then, restores the current and last directories from 1LAM and 2LAM.
0BD002
DOTVARS{}
3712C
SaveVarRes
37186
RestVarRes
170
24.1.3
Addr. 3714A
370C3 370AF
WithHidden RclHiddenVar
37104
StoHiddenVar
37118
PuHiddenVar
24.1.4
Temporary Memory
The objects in the stack are in a area called temporary memory. As the name says, it is intended for temporary storage. When you duplicate an object in the stack, you do not actually create a copy of it: the stack contains only pointers to objects, and only this pointer is duplicated. When you modify an object, most commands automatically make a new copy of the object in question and modify the copy. In other words, if you enter a string in the stack, press ENTER and edit the string, you have two different strings now. This only happens because a copy of the string was made before editing it. If the copy was not made, the two strings would have been modied, because they were actually the same object. There are a few commands that do not make a copy of the object before editing it. This means that all copies of the object, in the stack or even stored in memory will be modied at the same time. Sometimes this is desired, sometimes not. These commands are sometimes called bang type. When this kind of command appears in this book this is noted in their description. When you use these commands, you must be careful not to modify too much objects
24.1. Reference
171
simulateneously. . . You can use the commands TOTEMPOB or CKREF to make another copy of the object: with this, it becomes safe to use this bang type commands. Addr. 06657 Name TOTEMPOB Description ( ob ob' ) Copies object to TEMPOB and returns pointer to the new copy. ( ob1 ob2 ob2' ob1 ) Does TOTEMPOB then SWAP. ( ob ob' ) If object is in TEMPOB, is not embedded in a composite and not referenced, does nothing. Else copies it to TEMPOB and returns the copy. ( ob1 ob2 ob2 ob1' ) Does SWAP then CKREF. ( ob ob flag ) If the object is in TEMPOB area, is not embedded in a composite and is not referenced, returns the object and TRUE, otherwise returns the object and FALSE. ( ob ob flag )
35C90 25E9F
TOTEMPSWAP CKREF
3700A 06B4E
SWAPCKREF INTEMNOTREF?
01E0E8
INTEMPOB?
25.1
Addr. 26120 26125 2F37E 2612A 2F2D4 3005E 30912 30077 3008B 300B3 2EECF
Reference
Name SLOW VERYSLOW SORTASLOW VERYVERYSLOW dowait %>HMS %%H>HMS %HMS> %HMS+ %HMSTOD Description ( ) 15 millisecond delay. ( ) 300 millisecond delay. ( ) 1.2 second delay (4 x VERYSLOW). ( ) 3 second delay. ( %secs ) Waits specied number of seconds. ( % %hms ) Converts from decimal to H.MMSS format. ( %% %%hms ) Same as %>HMS, but for long reals. ( %hms % ) Converts from H.MMSS format to decimal. ( %hms1 %hms2 %hms ) Adds time in hms format. ( %hms1 %hms2 %hms ) Subtracts time in hms format. ( %time ) Returns current time.
172
25.1. Reference Addr. 2F388 2EED0 2EED2 2EED1 2EED7 Name VerifyTOD DATE DATE+DAYS DDAYS CLKTICKS
173 Description ( %time %time ) Checks for validaty of time. Errors if not valid. ( %date ) Returns current date. ( %date %days %date' ) Adds specied number of days to date. ( %date1 %date2 %days ) Returns number of days between two dates. ( hxs ) Returns tick count. aka: SysTime ( %dt %tm "dy dt tm" ) Returns string representation of time, using current format. Example: "WED 06/24/98 10:00:45A" ( %date $ ) Returns string representation of date, using current format. ( %time $ ) Returns string represent the time, using current format. ( %date hxs ) Converts date to ticks. ( hxs %date ) Returns date from hxs of internal alarm list format. ( hxs %time ) Returns time from hxs of internal alarm list format. ( hxs %rpt ) Converts hxs in internal alarm list format to repetition interval.
2EED3
TIMESTR
2F329
Date>d$
2F381
TOD>t$
2F1AB 2F003
Date>hxs13 (Ticks>Date)
2F002
(Ticks>TOD)
2F004
(Ticks>Rpt)
174
25.1.1
Alarms
The internal alarms list has this format: { { hxs action } { ... } ... } The length of each hxs is 24 nibbles. The least signicant 13 nibbles represent the tick value for the time and date. The next 10 nibbles represent the repeat interval, if any. The most signicant nibble represents the status of the alarm (pending, acknowledged, etc.). Addr. 2F178 2F37F Name ALARMS@ STOALM Description ( {} ) Returns internal alarms list. ( %date %time acti %rep % ) Stores an alarm. %repeat is the number of ticks between every repetition. Since there are 8192 ticks in a second, 60 seconds in a minute, and 60 minutes in an hour, to make an alarm that repeats every hour, %repetition would be 8192*60*60 = 29491200. Returns real number representing the position of the alarm in the list. ( % ) Internal DELALARM. ( %n {} ) Recalls nth alarm. List is in the format of STOALARMLS. ( flag ) Returns TRUE if an alarm is due.
2F0AC 2F314
PURGALARM% RCLALARM%
25FA9
ALARM?
26.1
26.1.1
Addr. 2614D 26044 26170 26152 26049 26175 2F259 2F25F 2F23E
Reference
User and System Flags
Name SetSysFlag ClrSysFlag TestSysFlag SetUserFlag ClrUserFlag TestUserFlag RCLSYSF (STOSYSF) DOSTOSYSF Description ( # ) Sets the system ag with number #. ( # ) Clears the system ag with number #. ( # flag ) Returns TRUE if system ag is set. ( # ) Set the user ag with number #. ( # ) Clear the user ag with number #. ( # flag ) Returns TRUE if user ag is set. ( hxs ) Recalls system ags from 1 to 64. ( hxs ) Stores system ags from 1 to 64. ( hxs ) Stores system ags from 1 to 64, checking for changes in LASTARG ag.
175
176 Addr. 2F25A 2F260 2F25B 2F261 2F25C 2F262 2F3A9 Name (RCLSYSF2) (STOSYSF2) RCLUSERF (STOUSERF) (RCLUSERF2) (STOUSERF2) (STOALLF)
26. System Functions Description ( hxs ) Recalls system ags from 65 to 128. ( hxs ) Stores system ags from 65 to 128. ( hxs ) Recalls user ags from 1 to 64. ( hxs ) Stores user ags from 1 to 64. ( hxs ) Recalls user ags from 65 to 128. ( hxs ) Stores user ags from 65 to 128. ( hxs_usr hxs_sys ) Stores user and system ags from 1 to 64. First is user ags, second is system ags. ( hxs_sys1 hxs_usr1 hxs_sys2 hxs_usr2 ) Expects 4 hxs and stores them as user and system ags. ( {} ) Stores system and user ags. Expects a list with two or four hxs. The rst two are the system and user ags, respectively, from 1 to 64. The last two, if present, are the system and user ags, respectively, from 65 to 128. ( ) Save system ags in a virtual stack. ( ) Restore system ags from virtual stack, popping that level. Run Stream: ( ob ) Evaluates the next object in the runstream, but saves and restores the system ags around it. Uses DoRunSafe. This is very useful.
2F3AA
(STOALLF2)
3B76C
(DOSTOALLF2)
25F23 25F22
SaveSysFlags
RestoreSysFlags
2ABF0
RunSafeFlags
177 Description Run Stream: ( ob ) Eval next object in runstream with system ags 20, 21 clear and 22, 105, 102, 120 set. ( ob hxs1 hxs2 ) Evaluate ob and put the system ags as they were before the evaluation on the stack. Used by RunSafeFlags and RunSafeFlagsNoError. Run Stream: ( ob ) :: 'R DoRunSafe 2DROP ; ( ) Switch stack display format of HEX strings to hexadecimal. ( ) Switch stack display format of HEX strings to decimal. ( ) Switch stack display format of HEX strings to binary. ( ) Switch stack display of HEX strings to octal. ( # ) Returns #10h, #10d, #10b or #10o. In decimal terms, 16 for hexadecimal base, 10 for decimal base, 8 for octal base or 2 for binary base. ( ) Internal version of user word STD. ( # ) Internal version of user word FIX. ( # ) Internal version of user word SCI. ( # ) Internal version of user word ENG. ( ) Saves the current number format, and changes to STD mode.
2AC0E
DoRunSafe
2ABD7
RunSafeFlagsNoError
2EFA5
DOHEX
2EFA8
DODEC
2EFA6
DOBIN
2EFA7 2EFBF
DOOCT BASE
26. System Functions Description ( ) Restores the number format saved by savefmt1. Only one set of ags can be saved, there is no nesting of these entries. ( ) Set angular mode to RAD. ( flag ) Is angular mode RAD? ( ) Set angular mode DEG. ( ) Set angular mode GRAD. ( flag ) Returns TRUE if current radix is ".".
26.1.2
Addr. 25EB2 261AC 041A7 041ED
General Functions
Name DOBEEP setbeep TurnOff DEEPSLEEP Description ( %freq %dur ) Beeps. Analog to user function BEEP. ( #ms #Hz ) Also beeps. ( ) Internal OFF. ( flag ) Puts HP into deepsleep mode. Returns TRUE if "Invalid Card Data" message. ( flag ) Returns TRUE if low battery. ( ) Flashes "Invalid Card Data" message. ( ) Displays system warnings. ( ) Forces garbage collection. ( # ) Returns amount of free memory in nibbles. Does not do garbage collection. (The user word does.)
179 Description ( ob # ) Returns object size in nibbles. Forces garbage collection. ( ob #nib hxs ) Returns size in nibbles and checksum as hxs. ( ob hxs %bytes ) Returns checksum and size in bytes. ( id hxs %bytes ) Returns checksum and size in bytes of specied variable. ( ob ob flag ) Is object address < #80000h? ( ob #prolog ob' ) Changes prolog of object, does TOTEMPOB. ( # ) Sets the current language for messages. Internal version of xLANGUAGE. ( # ) Returns the current language for messages. Internal version of the xLANGUAGE command. ( ) Clears the BLINKFLAG, SysNib5. ( ) Makes the cursor Blink if in App-mode or Editline.
25F95
LANGUAGE>
256BE 25E71
NOBLINK ?BlinkCursor
27.1
Addr. 2EEBB 2EEBC 2EEBD 2EEBE 2EEC1 2EEC2 2EEC3 2EEC4 2EEC5 2EEC6 2EEC7
Reference
Name SENDLIST GETNAME DOFINISH DOPKT DOBAUD DOPARITY DOTRANSIO DOKERRM DOBUFLEN DOSBRK DOSRECV Description ( {} ) Internal SEND. ( $/id/lam ) Internal KGET. ( ) Internal FINISH. ( $ $' ) Internal PKT. ( % ) Internal BAUD. ( % ) Internal PARITY. ( % ) Internal TRANSIO. ( $ ) Internal KERRM. ( % 0/1 ) Internal BUFLEN. ( ) Internal SBRK. ( % ) Internal SRECV.
180
27.1. Reference Addr. 2EEC9 2EECB 2EECD 2F31A 2716D 2EEBF 2F062 Name CLOSEUART DOCR DODELAY APNDCRLF StdIOPAR GetIOPAR StoIOPAR
181 Description ( ) Internal CLOSEIO. ( ) Internal CR. ( % ) Internal DELAY. ( $ $' ) Appends carriage return and line feed to string. ( {} ) Default IOPAR: { 9600 0 0 0 3 1 }. ( %baud % % % % % ) Recalls IOPAR and explodes it into the stack. ( {} ) STO the list of IO parameters in the HOME directory in the variable IOPAR. ( ) Throws the IOPAR error: "Invalid IOPAR". ( $ $' ) Like KVIS, but insert <cr> in front of each newline for PC's. ( $ $' ) Translate special characters into digraphs for ASCII transfer to a PC. ( $ $' ) Translate digraphs in the string to characters. and remove <cr> from th end of lines. ( $ ) Returns version string.
2F37B 2F34F
SetIOPARErr KVISLF
2F34E
KVIS
2F34D
KINVISLF
2F389
VERSTRING
28.1
The general entry to call the ler is FILER_MANAGERTYPE. It takes three arguments: Filer_Type, Filer_Path and Filer_List.
28.1.1
This argument allows to select the object types that should be displayed. It is a list of the object prologue addresses that will be allowed. As an example, the HP49 Font Browser only displays fonts, directories and backup objects. So, Filer_Type is specied as { DOFONT DORRP DOBAK }. If you want to browse all kinds of objects, then this parameter should be just { ZERO }. Since this is very common, there is an entry that will supply this list as argument to FILER_MANAGERTYPE. It is called FILER_MANAGER. Using this entry, you only specify the other two arguments.
28.1.2
This argument species the initial path. It can be: Value { } { FOO.DIR } Meaning start in HOME start in HOME/FOO.DIR 182
28.1. Using the Filer Value :n:{ } :n:{ FOO } Meaning start in port n start in backup FOO in port n.
183
28.1.3
This argument species the menu keys and hard key assignments. It is a list with one element for each menu key. Each menu key is represented by a list with three to ve arguments. The general structure is like this:
1 { { (Item 1) Name_Item Location_Item Action_Item [ ExtraProgram_Item (if 16 <= Action_Item <= 23) ] [ Key_Shortcut ] } { (Item 2) ... } .. 15 }
10
28.1.3.1 Name_Item
This species what will be displayed in the menu. It can be either a string, a grob or a program which when evaluated returns a string or a grob.
28.1.3.2 Location_Item
This allows you to control when the action bound to this menu can be run. This is either a bint or a program that returns a bint when evaluated. There are ve possible values, which are listed in the table below. The Constant column lists the name of a constant (dened in the filer.h le in the includes directory of the examples) that you should use when programming.
28. The HP49 Filer Meaning The action can be run anywhere. The action can be run only if the user is browsing the HOME directory or one of its subdirectories. The action cannot be run if the user is browsing a library. The action cannot be run if the user is browsing a backup object in a port. The action can only be run in the root of a port.
28.1.3.3 Action_Item
This will dene what will happen when the user presses the softkey corresponding to that menu or the hardkey assignemnt (see section 28.1.3.5). It is a bint, or a program that returns a bint when evaluated. It is possible to call a built-in function of the Filer, or dene your own. The table below lists the built-in actions available. Again, Constant is the name of a constant dened in filer.h. Value 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 24 25 26 Constant cBip cInfo cHexa cView cArbo cUp cMaxUp cDown cMaxDown cSelect cUpDir cDownDir cPreviousMenu cNextMenu cEVAL cSwapHeader cDetails cEDIT cCOPY Action Beeps. Not implemented in the HP49G. Not implemented in the HP49G. Views the object. Shows the directory tree. Moves the highlight up. Moves the highlight to the rst item. Moves the highlight down. Moves the highlight to the last item. Marks the selected variable. Goes to the parent directory. Visits the highlighted directory. Displays the previous menu page. Displays the next menu page. Evalutes the highlighted variable. Toggles between the two available header lines. Toggles between showing information on the variables or just their names. Edits the selected variable. Copies the selected variable.
28.1. Using the Filer Value 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 Constant cMOVE cRCL cPURGE cRENAME cCRDIR cORDER cSEND cHALT cEDITB cRECV cQUIT cPageUp cPageDown cNewObject cSort
185 Action Moves the selected variable. Recalls the contents of the select variable. Purges the selected variable. Renames the selected variable. Creates a directory. Reorders the variables in the current directory. Sends the select variable using Kermit. Suspends the ler temporarily. Edits the select variable in the most appropriate editor. Receives a variable using Kermit. Exits the ler. Scrolls the contents of the ler one screen up. Scrolls the contents of the ler one screen down. Creates a new variable. Opens a dialog with several options for sorting the variables.
To run a custom program, the Action_Item argument will be in the range 1623. Each of these seven values species what will be in the stack and how your program is going to be called. The table below lists the calling methods: Value 16 17 Description Recalls only the current path. 1: Path Recalls the name and the contents of the currently selected object. 3: Path 2: Object 1: Name Equivalent to the above, but deals with multiple selected objects. 2n + 2: Path . . . 5: 4: 3: 2: 1: Object 2 Name 2 Object 1 Name 1 Number of objects (bint)
18
186 Value 19 20
28. The HP49 Filer Description The program is called once for each object. For each object, puts the same that calling method #17 puts. Recalls only the name of the current object. 2: Path 1: Name Recalls all the selected names. n + 2: Path . . . 3: Name 2 2: Name 1 1: Number of names (bint) Recalls the current object only in a string of addresses. 2: Path 1: String Recalls the selected objects in a string of addresses. 2: Path 1: String
21
22
23
Custom calls 22 and 23 will not be described here, as they are not very useful and somewhat more difcult to use. When the program is called on a library at the root of a port, some special rules apply to the name: For calls 17 and 18, the name will be the title of the library. (Like Emacs 1.09 CD&Pivo.) For call 19, the name will be an L plus the number of the library, for example, L1790. For calls 20 and 21, the name will the library number as a real number.
28.1.3.4 ExtraProgram_Item
When using a custom program, this element holds the program to be called. There are some additional features that can be useful: If you launch the program from VAR, your program will start in the current browsed directory.
187
A program can only be called on a selected object, except for call 16 which can be run in an empty directory. By default, once a program has been run, the screen will be refreshed, the working directory will be parsed again and the current selection will be lost. You can prevent that by leaving FALSE in the stack. Example:
1 { "INFO" fEverywhere BINT20 :: SWAPDROP (Remove the path) "Name selected is:" DISPROW1 ID>$ DISPROW2 FALSE ; }
If you want to force the Filer to exit after the program is run, leave TakeOver in the stack. Example: { "QUIT" fEverywhere BINT16 :: DROP ' TakeOver ; } which is equivalent to this, which uses the built-in call: { "QUIT" fEverywhere cQUIT }
28.1.3.5 Key_Shortcut
Use this argument to assing a program to a key. This argument is a bint in the form # axx, where a is 0 or 1, meaning without alpha and with, respectively. xx is the key code plus optionally #40 for the Left Shift or #C0 for the right shift. If you want to assign your program to LeftShift + TOOL, the number will be #049: #09 representing the TOOL key, and #40 for the LeftShift. NOTE: This argument must be the fth of the list. So, if you are using a built-in call you will have to dene the entry as something like this: { "TITLE" fEverywhere cQUIT TakeOver # 12F } This will assing the program to Alpha-ON.
188
28.2
Addr. 067004 06D004 06E004
Reference
Name Filer
FILER_MANAGER FILER_MANAGERTYPE
Description ( ) Calls the standard ler. ( {path} {args} ) Customized Filer, browsing all object types. ( {types} {path} {args} ) {args} = { item1 item2 ... } item = {name loc action [prog] [key]} ... } Customized ler for selected types only.
29.1
Number of Arguments
To check for a specic number of arguments, use one of the following commands. They check if there are enough arguments in the stack, and produce a Too Few Arguments error if not. Command CK0, CK0NOLASTWD CK1, CK1NOLASTWD CK2, CK2NOLASTWD CK3, CK3NOLASTWD CK4, CK4NOLASTWD CK5, CK5NOLASTWD When to use No arguments required One argument required Two arguments required Three arguments required Four arguments required Five arguments required
The CK<n> commands save the name of the command in which they are executed, and if an error happens, that name is displayed. (For more details, see Chapter 22.) This means they should only be used in libraries, because if they are not part of a library and there is an error, the error will be shown as something like XLIB 1364 36 Error:. In programs that are not a part of a library, use CK<n>NOLASTWD, which does not save the name of the command. 191
192
Besides checking for the specied number of arguments, these words also mark the stack in a way that, if an error happens, the objects that were pushed in the stack by your program can be removed, leaving no junk in the stack. This works by marking the stack above the nth level, where n is the number of required arguments. For example, if your program uses CK2 or CK2NOLASTWD and there are three arguments in the stack, you can image the stack like this: 3: 2: 1: 10. 3. 5.5
This mark is not xed at this level; instead it moves as elements are pushed or popped. Here is the stack after the program pushes the bint 1:
4: 3: 2: 1:
10. 3. 5.5 1h
Now, if an error happens in the program, all objects below the mark are dropped. This removes all objects pushed by the program, and also the program arguments if they are still in the stack. This is the standard HP49G behavior. Besides checking for a number of arguments and providing for error recovery, these words also save the arguments as the last arguments, recoverable via the LASTARG User command, provided this is enabled. If an error occours and it is enabled, then the arguments are automatically restored. For user-acessible programs that take no arguments, you should nevertheless use CK0 (or CK0NOLASTWD if it is not part of a library), to mark all the objects in the stack as of user ownership and mark the stack for error recovery. If your program uses a stack-dened number of arguments (like DROPN), use the words CKN or CKNNOLASTWD. These words rst check for a real number in level one, and then for the specied number of objects in the stack. The stack is marked at level two, but only the real number is saved in LAST ARG. The real is converted to a bint.
193
29.2
Argument Type
The words CK&DISPATCH1 and CK&DISPATCH0 are used to allow your program to do different actions based on the types of arguments given to it. They are used like this:
1 ... CK&DISPATCH1 #type1 action1 #type2 action2 #type3 action3 ... #type_n action_n ;
The type/action pairs are terminated by a SEMI (;). If after the dispatching you want to do some more actions for all argument types, you will need to enclose the whole CK&DISPATCH1 block in another secondary. This is how CK&DISPATCH0 works: it checks if the stack matches the denitions in #type1. If it does, action1 is executed, after which program execution resumes after SEMI. (Each action must be a single object, so if you want to do more than one action, all of them must be included in a secondary, i.e., between :: and ;.) If the type denition does not match the stack, then #type2 is checked, and so on. If no match was found, a Bad Argument Type error is generated. Even when your program accepts only one combination of arguments, this command is still useful for checking if the arguments are of the given type. The difference between CK&DISPATCH0 and CK&DISPATCH1 is that the latter, after completing the rst pass unsuccessfully, strips all the tags from the arguments, converts zints to reals, and does a second pass. Only after the second pass without a match the Bad Argument Type error is generated. Each type denition is a bint like this: #nnnnn. Each n is an hexadecimal number representing the object in one position of the stack, according to the table below. The rst n represents the object in level ve, the second in level four, and so on. This way, #00201 represents a complex number in level three, any object in level two and a real number in level one; #000A6 represents a hxs in level two and an id in level one. There are also two-digit object type numbers, ending in F. Each time you use one of these, the number of arguments that can be checked is reduced. For example, #13F4F represents a real
194
number in level three, an extended real in level 2 and an extended complex in level one. Dispatch Code 0 1 2 3 4 5 6 7 8 9 A B C D E 0F 1F 2F 3F 4F 5F 6F 7F 8F 9F AF BF CF DF EF FF User Type n/a 0 1 2 3, 4 or 29 5 6 7 8, 18 or 19 9 n/a 10 11 12 13 14 20 15 21 22 23 24 25 16 17 26 27 30 27 27 28 Object type Any object Real number Complex number String Array or matrix List Identier (global) LAM (Temporary identier) Secondary Symbolic Symbolic class Hex string Graphics object (GROB) Tagged object Unit object Rompointer (XLIB name) Bint Directory Extended real Extended complex Linked array Character Code object Library Backup object Library data Access pointer Font object Minifont object External object 4 (unused) ZINT
There are also the words CK<n>&Dispatch, where <n> is a number from one to ve. These words combine CK<n> with CK&DISPATCH1. Because they use CK<n> (and thus save the last command name), they should only be used in library commands.
195
29.2.1
Examples
By disassembling and studying built-in words, you can learn a lot. Not only about argument checking, but also about many other things. The TYPE command provides an example of dispatching. Here is its disassembly:
1 :: CK1 :: CK&DISPATCH0 real %0 cmp %1 str %2 arry XEQTYPEARRY list %5 id %6 lam %7 seco TYPESEC (returns 8, 18 or 19) symb %9 hxs %10 grob %11 TAGGED %12 unitob %13 rompointer %14 BINT31 %20 (#) BINT47 %15 # 3F %21 (%%) # 4F %22 (C%%) # 5F %23 (LNKARRAY) # 6F %24 (CHR) # 7F %25 (CODE) # 8F %16 # 9F %17 # AF %26 (Library Data) # CF % 30 (Font) # FF % 28 (ZINT) any %27 (External) ; SWAPDROP ;
10
15
20
25
30
In this case, it would have been possible to use CK&DISPATCH1 instead of CK&DISPATCH0, because tagged objects are explicitly listed on the table.
196
Since the last item on the list is any, type 27 is returned for any other object not listed. Since TYPE is part of a library, the command CK1&Dispatch could have been used. The reason it did not is to save ROM space. The inner composite is actually the body of the System RPL command XEQTYPE. This way, System RPL programmers can call a function to return the type of the object, without the overhead of checking if there is an object, and without no need to duplicate the dispatching mechanism. Note the object names. They are aliases for built-in bints. See Chapter 2 for a list of built-in bints.
29.3
Addr. 262B0
Reference
Name CK0 Description ( ) Saves current command to LASTCKCMD. Marks stack below level 1 to STACKMARK. ( ob ob ) Saves current command to LASTCKCMD. Veries that there is at least one object in the stack, if not generates a "Too Few Arguments" error. Saves stack mark to STACKMARK. If Last Arg is enabled then saves the argument. ( ob1 ob2 ob1 ob2 ) Like CK1, but checks for at least two arguments. ( ob1...ob3 ob1...ob3 ) Like CK1, but checks for at least three arguments. ( ob1...ob5 ob1...ob5 ) Like CK1, but checks for at least four arguments. ( ob1...ob5 ob1...ob5 ) Like CK1, but checks for at least ve arguments. ( ob1...obn %n ob1..obn #n ) Checks for a real in level one. Then checks for that number of arguments. Finally, converts the real to a bint. ( ) Like CK0, but does not save current command.
262B5
CK1
262BA 262BF
CK2 CK3
26292
CK0NOLASTWD
29.3. Reference Addr. 26297 2629C 262A1 262A6 262AB 25F25 2631E 26328 Name CK1NOLASTWD CK2NOLASTWD CK3NOLASTWD CK4NOLASTWD CK5NOLASTWD CKNNOLASTWD CK&DISPATCH0 CK&DISPATCH1
197 Description ( ob ob ) Like CK1, but does not save current command. ( ob1 ob2 ob1 ob2 ) Like CK2, but does not save current command. ( ob1...ob3 ob1...ob3 ) Like CK3, but does not save current command. ( ob1...ob4 ob1...ob4 ) Like CK4, but does not save current command. ( ob1...ob5 ob1...ob5 ) Like CK5, but does not save current command. ( ob1...obn %n ob1..obn #n ) Like CKN, but does not save current command. ( ) Dispatches on stack argument. ( ) Dispatches on stack arguments, stripping tags and converting reals to ZINTS if necessary. ( ) Equivalent to CK&DISPATCH1. ( ) Combines CK1 with CK&DISPATCH1. ( ) Combines CK2 with CK&DISPATCH1. ( ) Combines CK3 with CK&DISPATCH1. ( ) Combines CK4 with CK&DISPATCH1. ( ) Combines CK5 with CK&DISPATCH1. ( ) Clears command save by last CK<n> command. aka: 0LASTOWDOB!, 0LastRomWrd! ( ) :: CK0NOLASTWD 0LASTOWDOB! ; ( ) :: 0LASTOWDOB! CK1NOLASTWD ;
2EF6C 25E9E
AtUserStack CK1NoBlame
29. Checking for Arguments Description ( ) Stores rst object in the composite above the actual to LASTCKCMD. aka: 'RSaveRomWrd ( comp ? ) Evaluates composite without saving as current command. If rst command is CK<n>&Dispatch it is replaced by CK&DISPATCH1. If rst command is CK<n> it is skipped. Any other rst command is also skipped! Run Stream: ( ob ) EvalNoCK with the next object in the runstream as argument. Run Stream: ( ob ) Evaluate the next object in the runstream with RPN mode on (i.e. system ag 95 clear). After the evaluation, the system ag is restored to its old value.
26319
EvalNoCK
25F29
(EvalNoCK:)
2A9E9
RunRPN:
29.3.1
Addr. 36B7B
Type Checking
Name CKREAL Description ( % % ) ( Z % ) Checks for real. If a ZINT, convert to real. Else SETTYPEERR. ( $/#/hxs Z ) CHecks for an integer. Converts strings, bints or hxs's to zints. Errors for other object types. ( ob ob' Z Z' ) Like CK1Z, but for two objects. ( ob ob' ob'' Z Z' Z'' ) Like CK1Z, but for three objects.
184006
CK1Z
185006 186006
CK2Z CK3Z
199 Description ( ) Checks for quoted name (name as symbolic). ( meta meta ) Checks for meta containing %, C%, unit, id, lam or symb. ( ob #prolog ) Returns address of prolog of object. ( ob ob %type ) System version of user word TYPE, but this keeps the object. ( ob flag ) ( ob ob flag ) aka: DTYPEREAL? ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) aka: DTYPECSTR? ( ob ob flag ) aka: DTYPEARRY? ( ob flag ??? ) ( ob flag ) ( ob flag ) ( ob flag ) ( ob ob flag ) aka: DTYPELIST? ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) Tests if ob is ID or lam. ( ob ob flag ) Tests if ob is neither an ID nor a LAM. ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag )
03C64 3BC43
TYPE XEQTYPE
3511D 35118 3512C 35127 3510E 35109 35136 3513B 35292 352AD 35195 35190 3504B 35046 350E1 350DC 194006 2F0D4 35168 35163 350FF 350FA 35186
TYPEREAL? DUPTYPEREAL? TYPECMP? DUPTYPECMP? TYPECSTR? DUPTYPECSTR? DUPTYPEARRY? TYPEARRY? TYPERARRY? TYPECARRY? TYPELIST? DUPTYPELIST? TYPEIDNT? DUPTYPEIDNT? TYPELAM? DUPTYPELAM? TYPEIDNTLAM? (ILnot?) TYPESYMB? DUPTYPESYMB? TYPEHSTR? DUPTYPEHSTR? TYPEGROB?
200 Addr. 35181 351A4 3519F 351B3 351AE 3514A 35145 350F0 350EB 35159 35154 3503C 35037 35177 35172 Name DUPTYPEGROB? TYPETAGGED? DUPTYPETAG? TYPEEXT? DUPTYPEEXT? TYPEROMP? DUPTYPEROMP? TYPEBINT? DUPTYPEBINT? TYPERRP? DUPTYPERRP? TYPECHAR? DUPTYPECHAR? TYPECOL? DUPTYPECOL?
29. Checking for Arguments Description ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) Is ob a unit object? ( ob ob flag ) Is ob a unit object? ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) Is on a secondary? ( ob ob flag ) Is ob a secondary? aka: DTYPECOL? ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) Checks if ob is Gaussian integer. ( ob ob flag ) Checks if ob is Gaussian integer.
350D2 350CD 35087 35082 350C3 350BE 350B4 350AF 350A5 350A0 35096 35091 182006 183006 114007 115007
TYPELNGREAL?
DUPTYPELNGREAL?
201 Description ( ob ob flag ) Checks if ob is Gaussian integer. ( ob flag ) Checks if object is integer or Gaussian integer. ( ob ob ) Checks that an object is real/cmplx/unit or idnt/lam/symbolic. ( ob ob flag ) Is object allowed in algebraics? ( ob ob flag ) Tests if object is a symbolic matrix. ( ob ob flag ) Tests if ob is idnt or lam. ( ob ob flag ) Tests if ob is real or complex. ( ob ob flag ) Tests if ob is real, zint or hxs. ( ob flag ) Tests if ob is real, zint or hxs. ( ob ob ) Does "Bad Argument Type" error if ob is not a real, complex or symbolics.
CK1Cext
181006
CKALG
CKSYMREALCMP
202
30.1. Key Locations #Plane 1 2 3 Modiers None Left-shift Right-shift #Plane 4 5 6 Modiers Alpha Alpha, left-shift Alpha, right-shift
203
You can convert from one representation to another using: Ck&DecKeyLoc ( %rc.p #KeyCode #Plane ) CodePl>%rc.p ( #KeyCode #Plane %rc.p ) Sometimes, the shift keys are not being treated as modiers for other keys, but as keys in their own right. Then they have the key codes 40h (leftshift), C0h (right-shift), and 80h (alpha). On the HP48, only the six key planes listed above existed. The HP49 introduced ve more planes, the shift-hold keys. These are shifted keypresses, where the shift key is being held down while the key is pressed. In User RPL, these keys are denoted by adding 0.01 to the %rc.p representation. For example, the keycode 11.21 means holding down left-shift while pressing the F1 key. In System RPL, shift-hold keys can be encoded in two ways. The rst form (which we will call encoding A) leaves the keycode #kc unchanged, and uses new planes #8...#C. The second form (encoding B) uses planes in the range #1...#6 and adds the keycode of the shift key to the keycode #kc. The following table lists the different encodings for all possible ways to press the F1 key on the HP49G. Plane 1 2 3 4 5 6 7 8 9 10 11 12 Shift Keys Unshifted Left-shift Right-shift Alpha Alpha, left-shift Alpha, right-shift Unused Left-shift-hold Right-shift-hold Alpha-hold Alpha, left-shift-hold Alpha, right-shift-hold User RPL %rc.pl 11.1 11.2 11.3 11.4 11.5 11.6 11.21 11.31 11.41 11.51 11.61 A #kc 1h 1h 1h 1h 1h 1h 1h 1h 1h 1h 1h #pl 1h 2h 3h 4h 5h 6h 8h 9h Ah Bh Ch #kc 1h 1h 1h 1h 1h 1h 41h C1h 81h 41h C1h B #pl 1h 2h 3h 4h 5h 6h 2h 3h 4h 5h 6h
204
Most, but not all, System RPL entries dealing with keys can handle shift-hold key presses. The reference section has information about this issue for each relevant entry. The System RPL entries which expect #kc and #pl as arguments (like CodePl>%rc or Key>StdKeyOb) accept both forms of encoding (A and B). Entries which return #kc or #kc and #pl (like Ck&DecKeyLoc and GETTOUCH) all use encoding B. Encoding A seems to be more convenient for dispatching. In order to convert encoding B into encoding A, you can use :: SWAP 64 #/ ROTSWAP #0=?SKIP #6+ ;
:: WaitForKey (normal WaitForKey) CODE (get extended keycode) GOSBVL =SAVPTR D0= 047DF A=DAT0 A D0=A A=0 A A=DAT0 1 A=A-1 P A=A+A A CD0EX C=C+A A CD0EX D0=D0+ 2 A=DAT0 B GOVLNG =PUSH#ALOOP
10
15
205
; If you would like the program to return encoding A instead of encoding B, just replace ROTDROPSWAP with: BINT63 #>case #6+
30.3
30.3.1
Addr. 25EA7
Reference
Converting Keycodes
Name Ck&DecKeyLoc Description ( %rc.p #kc #p ) Converts from user key representation format to system. Does handle shift-hold keys. ( #kc #p %rc.p ) Converts from system key representation format to user. Does handle shift-hold keys. ( # #' ) Converts the keycode offset for shift keys to the keycode of the shift key, i.e. 80h->32d, 40h>37d, C0h->42d ( #kc #pl flag ) Is the key any of the three modiers right-shift, left-shift, or alpha?
25EA9
CodePl>%rc.p
25EDC
H/W>KeyCode
25EEA
ModifierKey?
30.3.2
Addr. 261CA
30. Keyboard Control Description ( #kc T ) ( F ) Returns next key in the key buffer (if there is one), but does not pop it. Does handle shift-hold keys. ( #kc T ) ( F ) Pops next key from key buffer (if there is one). Does handle shift-hold keys. ( #kc flag ) Get a single keypress from the keybuffer, waits if necessary. The key is returned along with TRUE. If an exception happens, returns FALSE. The exception is not handled. Does handle shifthold keys. ( #kc T ) ( F F ) ( {Alrmlist} T F ) Get a single keypress from the keybuffer, waits if necessary. The key is returned along with TRUE. If an exception happens (error or alarm), the exceptions is handled and the entry returns FALSE. Does handle shift-hold keys. ( ob ) Wait for a single key and return the object associated with this key. Does handle shift-hold keys. ( ob ) Execute ob as if it had been assigned to a key and the key had been pressed. ( #kc flag ) Returns TRUE if the key is being pressed. ( flag ) Returns TRUE if there is at least a key in the key buffer. ( #kc #flag ) Returns next full key press. Does not handle shift-hold keys.
04714
GETTOUCH
25ED6
GETKEY
25ED7
GETKEY*
25ED9
GetKeyOb
25EC5
DoKeyOb
047C7 25EE3
REPKEY? KEYINBUFFER?
25F0B
WaitForKey
207 Description ( % ? ) Internal WAIT command. Does not handle shifthold keys.
30.3.3
Addr. 25FAE 25E70
25E9D
CK0ATTNABORT
25EED
NoAttn?Semi
05040 05068
ATTNFLG@ ATTNFLGCLR
30.3.4
Addr. 25EBF 25ECD 25E6E
Bad Keys
Name DoBadKey DropBadKey 2DropBadKey Description ( ) Beeps. ( ob ) Beeps. ( ob ob' ) Beeps.
208
30.3.5
User Keys
If no keys are assigned, the internal key assignments list is an empty list. If there is one or more assignments, the list contains 51 sublists, each one representing one key. Each sublist is either empty, if that key has no assignments; or contains twelve elements: each representing the assignment of one plane. The planes are given in the table in section 30.1. For planes with no assignment, an empty list must be given. The seventh list is always empty. Addr. 25F09 25967 2F3B3 Name UserKeys? GetUserKeys (AsnKey) Description ( flag ) Does BINT62 TestSysFlag. ( {} ) Returns user keys list (internal format). ( ob #kc #p ) Assigns an object to a key, specied in system format. ( flag ) Returns TRUE if the keys not dened do their normal actions. ( ) Keys not dened do their normal actions. ( ) Keys not dened just beep when pressed. ( #kc #pl ob ) Recalls the standard assignment of the key. This is the assignment which is active when USER mode is of. ( #kc #pl ob ) If user mode is on, recalls the user object assigned to a key. If user mode is off, recalls the standard assignment instead. ( % ? ) Keystroke evaluation. If % is negative, the standard key is always evaluated.
25621
(NonUsrKeyOK?)
25EE6
Key>U/SKeyOb
255006
KEYEVAL
#Ins/Rep
209
31. Using InputLine Description The initial entry mode: #0 current entry mode plus program entry mode #1 only program entry mode #2 program and algebraic entry modes The initial alpha mode: #0 current mode #1 alpha enabled #2 alpha disabled The initial menu, in the format specied below. Normally, specied as FALSE, which means that the menu should not be changed. The initial menu row number (normally BINT1, to show the rst page). A ag: TRUE CANCEL aborts the input FALSE CANCEL just clears the edit line How to process the edit line: #0 return edit line as a string (unevaluated) #1 return edit line as a string and a parsed object #2 parse and evaluate edit line
#Alphalock
ILMenu
#ILMenu AttnAbort?
#Parse
If AttnAbort? is TRUE and the user presses CANCEL while InputLine is active, the edition is aborted. If it is FALSE, CANCEL just clears the edit line. If it was already empty, then it aborts InputLine, returning FALSE. Depending on the value of #Parse, different values are returned, acording to the table: #Parse #0 #1 #2 Stack $Editline TRUE $Editline obs TRUE ob1 ... obn TRUE FALSE Description Edit line only (unevaluated) Edit line and parsed object(s) Resulting object(s) CANCEL pressed to abort
211
31.1
Any application can specify an initial menu via the ILMenu parameter. This menu will be displayed when the InputLine starts. All menu keys can have assignments to the unshifted, left-shifted and right-shifted planes. When the loop exits, the previous menu is restored intact. The ILMenu parameter is a list (or, in rare cases, a program returning a list), in the format described in section 37.1. You can also supply just FALSE as this parameter, if you do not want the current menu to be changed. Note that the actions must start with the word TakeOver to ag that they should be run with the command line active.
31.2
An Example
Here is an example of InputLine, which prompts for your name, and if the edition was not aborted, displays it.
1 :: $ "Your name:" NULL$ #ZERO#ONE ONEONE NULL{} ONE FALSE ZERO InputLine NOT?SEMI $ "Your name is " SWAP&$ CLEARLCD DISPROW1 SetDAsTemp ;
(prompt) (initial edit line) (cursor at end, insert mode) (prog mode, alpha enabled) (no menu) (menu row) (CANCEL clears) (returns string) (exit if FALSE) (concatenate string & name) (clear display) (display string on 1st line) (freeze display)
10
15
212
31.3
Addr. 2EF5F
Reference
Name InputLine Description ( args $ T ) ( args $ ob1..obn T ) ( args ob1..obn T ) ( args F ) args = $pr $line #pos #I/R #I/A #alph menu #row attn #parse ( $1 $2 $3 ) This is what the User command INPUT does if level 1 is a string. ( $1 {} $3 ) This is what the User command INPUT does if level 1 is a list.
2F154
(input$)
2F155
(input{})
AppMenu
#AppMenuPage
213
32. The Parameterized Outer Loop Description A ag: if TRUE, any user command that would create a suspended environment and restart the system outer loop will instead generate an error. This object is evaluated before each display update and key evaluation. If the result is TRUE, the loop is exited. The error-handling object to be evaluated in an error occurs during key evaluation.
ExitCond AppError
After setting up the arguments, call ParOuterLoop. This word does not generate any results itself, but any of the key assignments can return results to the stack or any other form desired.
POLRestoreUI POLResUI&Err
215
10
(if an error happened, restore) (the saved interface and error) (restore saved user interface)
If you use the words above instead of ParOuterLoop, you must provide the same level of error protection as the code above. One note: the parameterized outer loop creates a temporary environment when it saves its current user interface, and it abandons it when it restores a saved user interface. This means that you cannot use words that operate on the topmost temporary environment, like 1GETLAM within the loop, unless the variable was created after calling POLSaveUI, and it is abandoned before calling POLRestoreUI. For temporary environments created before calling POLSaveUI, named temporary variables should be used.
216
32.4
In the parameterized outer loop, any key in any of the six basic planes (see section 30.1) can be assigned a new function. The parameter AppKeys species which keys to assign and their actions. If a key is not assigned by the application, and the NonAppKeyOK? parameter is TRUE, the standard key denition is executed if the DoStdKeys? parameter is TRUE, or, if available, the USER key assignment, if it is FALSE. If NonAppKeyOK? is FALSE, a warning beep is produced, and nothing else is done. Most of the time, NonAppKeysOK? should be set to FALSE. The AppKeys parameter is a secondary, which must take as argument the keycode and plane, and return either the desired key denition and TRUE, or FALSE if the application does not handle it. Specically, the stack diagram is as follows: ( #KeyCode #Plane KeyDef TRUE ) ( #KeyCode #Plane FALSE ) The suggested form for the key assignments is:
1 BINT1 #=casedrop :: (process unshifted plane) ; BINT2 #=casedrop :: (process left-shifted plane) ; ... 2DROPFALSE
The word ?CaseKeyDef is very handy in this case, because it is equivalent to #=casedrop :: ' <keydef> TRUE ;. Using this word, the code becomes shorter, and the denitions become more legible. ?CaseKeyDef is used in the form: ... #KeyCode #TestKeyCode ?CaseKeyDef <keydef> ... If #TestKeyCode equals #KeyCode, ?CaseKeyDef drops both of them, pushes <KeyDef> and TRUE to the stack, and exits the secondary. Otherwise, it drops only #TestKeyCode, skips <KeyDef> and continues.
217
If you want to handle shift-hold keys, you can do so. The extended keycode (encoding B, see section 30.1) is provided to the AppKeys program on stack levels 5 and 6 All you need to do is to start AppKeys with the snippet 4DROP 2DUP 2DUP and than dispatch normally.
32.5
You can specify a menu to be displayed when the parameterized outer loop starts. The format of the AppMenu parameter is essentially the same of the ILMenu parameter of InputLine, described in section 37.1. The difference is that TakeOver is not necessary in this case, since the input line is not active. Also, since hard key assignments have priority over menu key assignments, you should put this code in the AppKeys parameter, in each plane denition: DUP#<7 casedrpfls This will push FALSE when a key whose code is less than seven (that is, one of the softkeys) is pressed. The FALSE will force the standard assignment to be run, and this assignment runs the action dened by the AppMenu parameter. For that to work, the NonAppKeysOK? parameter must be TRUE, so that the menu keys work normally, that is, doing the actions specied by the AppMenu parameter.
218
32.7
The parameter ExitCond is an object that is evaluated before each key evaluation. If it evaluates to TRUE, the loop is exited, otherwise it continues. You could dene, for example, ExitCond as ' LAM exit. When the quit key is pressed, you just have to use TRUE ' LAM exit STO and the loop will be exited. Naturally you must create the lam and initialize it with FALSE before.
32.8
An Example
The following program is an example of an application that uses a parameterized outer loop to create an environment where the user may move a little graphic over the screen. You can use the arrow keys to move, or the menu keys. In both cases, if you press left-shift before, the graphic moves ten steps instead of one. There is code to assure that the graphic does not go off the screen boundaries. Figure 32.1 below displays this program running.
:: * Defines names for used keys. Makes things easier and * more readable DEFINE kpNoShift BINT1 DEFINE kpLeftShift BINT2 DEFINE kcUpArrow BINT10 DEFINE kcLeftArrow BINT14 DEFINE kcDownArrow BINT15
32.8. An Example
DEFINE kcRightArrow BINT16 DEFINE kcLeftShift BINT37 DEFINE kcOn BINT47 * Requires no arguments CK0NOLASTWD 15 * Prepare display RECLAIMDISP (clear and resize display) ClrDA1IsStat (temporarily disable clock) 20 * Smiling face grob. The below must be in one line only. GROB 7C 310003100008F000060300810C004000104000102000202 4012010004010004010004010004011044021042026032048F0104000 10810C0006030008F000 FIFTYSIX (initial x coordinate for box) EIGHTEEN (initial y coordinate for box) FALSE (initial exit condition) { LAM MrSmile LAM x LAM y LAM exit? } BIND (binds local variables) * The following composite is the display update object. * It clears the screen and draws the smiling face grob. :: CLEARVDISP (clear display) LAM MrSmile (recall smiling face grob) HARDBUFF (recall current display) LAM x LAM y (smile coordinates) GROB! (REPL) DispMenu.1 (display menu) ; * The following composite is the key action handler. :: kpNoShift #=casedrop :: DUP#<7 casedrpfls (enable softkeys) kcUpArrow ?CaseKeyDef :: LAM y DUP BINT1 #<ITE :: DROP ERRBEEP ;
219
10
25
30
35
40
45
50
220
:: #1- LAM y STO ; ; kcDownArrow ?CaseKeyDef :: LAM y DUP BINT36 #>ITE :: DROP ERRBEEP ; :: #1+ LAM y STO ; ; kcLeftArrow ?CaseKeyDef :: LAM x DUP BINT1 #<ITE :: DROP ERRBEEP ; :: #1- LAM x STO ; ; kcRightArrow ?CaseKeyDef :: LAM x DUP BINT111 #>ITE :: DROP ERRBEEP ; :: #1+ LAM x STO ; ; kcOn ?CaseKeyDef :: TRUE LAM exit? STO ; kcLeftShift #=casedrpfls DROP DoBadKeyT
55
60
65
70
75
80
85
90
95
; kpLeftShift #=casedrop :: DUP#<7 casedrpfls (enable softkeys) kcUpArrow ?CaseKeyDef :: LAM y DUP BINT10 #<ITE :: DROPZERO ERRBEEP ; :: BINT10 #- ; LAM y STO ; kcDownArrow ?CaseKeyDef :: LAM y DUP BINT27 #>ITE :: DROP BINT27 ERRBEEP ; #10+ LAM y STO
32.8. An Example
; kcLeftArrow ?CaseKeyDef :: LAM x DUP BINT10 #<ITE :: DROPZERO ERRBEEP ; :: BINT10 #- ; LAM x STO ; kcRightArrow ?CaseKeyDef :: LAM x DUP BINT102 #>ITE :: DROP BINT112 ERRBEEP ; #10+ LAM x STO ; kcLeftShift #=casedrpfls DROP DoBadKeyT ; 2DROP DoBadKeyT 120 ; * Key definitions TrueTrue 125 * Menu specification { { "Up" { :: LAM y DUP BINT1 #<ITE :: DROP ERRBEEP ; :: #1- LAM y STO ; ; :: LAM y DUP BINT10 #<ITE :: DROPZERO ERRBEEP ; :: BINT10 #- ; LAM y STO ; } } { "Down" { :: LAM y DUP
221
100
105
110
115
130
135
140
222
145
150
LAM y DUP BINT37 #>ITE :: DROP BINT37 ERRBEEP ; #10+ LAM y STO ; } } { "Left" { :: LAM x DUP BINT1 #<ITE :: DROP ERRBEEP ; :: #1- LAM x STO ; ; :: LAM x DUP BINT10 #<ITE :: DROPZERO ERRBEEP ; :: BINT10 #- ; LAM x STO ; } } { "Right" { :: LAM x DUP BINT111 #>ITE :: DROP ERRBEEP ; :: #1+ LAM x STO ; ; :: LAM x DUP BINT102 #>ITE :: DROP BINT112 ERRBEEP ; #10+ LAM x STO ; } } NullMenuKey { "Quit" :: TRUE LAM exit? STO ; }
155
160
165
170
175
180
185
32.9. Reference
} ONEFALSE LAM exit? ERRJMP ParOuterLoop RECLAIMDISP ClrDAsOK ;
223
190
195
(first menu row, no suspended envs) (exit condition) (error handler) (run the par outer loop) (resize and clear display) (redraw display)
32.9
Addr. 2B475
Reference
Name ParOuterLoop Description ( Disp Keys NonAppKeys? DoStdKeys? menu #row suspendOK? ExitCond AppErr ) ( Disp Keys NonAppKeys? DoStdKeys? menu #row suspendOK? ExitCond AppErr ) Saves current UI to LAMSavedUI. <see>ParOuterLoop Sets new UI, same arguments as to ParOuterLoop. ( ) Displays, reads and evaluates keys according to set UI. ( ) Restores saved UI from LAMSavedUI. ( ) Restores saved UI and executes ERRJMP. ( ob ) ( ) ( ob ) ??? ( ob ) ( ob ) ( ob ) ( ob )
2B4AC
POLSaveUI
2B542
POLSetUI
2B628
POLKeyUI
2B6CD 2B6B4 29F25 29F35 29F55 29F75 2A055 2A065 2A145 2A158
POLRestoreUI POLResUI&Err AppDisplay! AppDisplay@ AppKeys! AppKeys0 AppExitCond! AppExitCond@ AppError! AppError@
224 Addr. 25690 25695 2569A 2564D 2565A 2565F 25F04 Name AppMode? SetAppMode ClrAppMode SetNAppKeyOK DoStdKeys? SetDoStdKeys SuspendOK?
32. The Parameterized Outer Loop Description ( flag ) Is currently a POL active? ( ) ( ) ( ) ( flag ) ( ) ( flag ) Does the current user interface allow suspension? ( ob ) :: LAM 'nohalt ; ( ) ( )
225
226
33.1
meta is a meta object (see Chapter 12) that contains the items which should be shown in the selection box. All object types are allowed, and they will be decompiled for display.
33.2
$title is the title. It will be shown in a small box on top of the choose box. No title will be shown if this is the empty string. This can be useful when the the contents of the choose box do not need a further explanation. Omitting the title makes space for an additional item line.
33.3
When the choose engine starts, an item is already highlighted. Usually this is the rst item, but you can select another one with the #initial parameter. The numbering starts with zero, not one.
33.4
::message is a program, the message handler. A message handler is a general way to pass a variable number of optional parameters to an application. The application will call the message handler program with different messages (normally a bint) in stack level 1, and maybe additional arguments in other stack levels. The handler can decide to handle this message. If it does handle it, it should do its work and return TRUE. If it decides to ignore the message, it should just drop the bint and return FALSE. The empty message handler therefore is the command DROPFALSE (which you can conveniently push in the stack with 'DROPFALSE). When you use the user command xCHOOSE, it just supplies DROPFALSE and hands over to the more general engine. The message handler can handle the following messages:
227
BINT2
BINT3
BINT4
BINT5
Message name and meaning MsgDispBox This message has to do with the display of the choose box. It is currently not well understood. The stack diagram of the message handler for this message seems to be ( #1 ::prog TRUE ) ( #1 FALSE ) MsgDispTitle This should display the title. If not handled, the title is drawn using the supplied $title argument. ( #2 TRUE ) ( #2 FALSE ) MsgEndInit This message is executed after the initialization of the choose box, but before control is handed over to the POL. ( #3 TRUE ) ( #3 FALSE ) MsgKeyPress This is a key handler, similar to the ones used by a POL. When the user presses a key, the message handler is called with the keycode and plane (see section 30.1), and the message BINT4 on the stack. It should return the key denition (an address or a secondary), TRUE and TRUE again. If the key is not handled, FALSE must be returned. Here is the stack diagram for the message handler regarding this message: ( #kc #pl #4 KeyDef TRUE TRUE ) yes, TRUE twice! ( #kc #pl #4 FALSE ) MsgMenu This must return the menu which is shown to the user during the selection. The return value for this message is evaluated to get the menu. The menu is not automatically updated when you move the selection, but message #6 can be used to enforce an update. If the menu has more than one page, you must handle the NXT and PREV keys in the keyhandler they are not handled by default. ( #5 { menu list } TRUE ) ( #5 ::prog_returning_list TRUE ) ( #5 FALSE )
33. Using the HP49 Browser Message name and meaning MsgEndEndDisp This message is called after the redisplay of the choose box nishes (because you changed the selected item). You can use this to force an update of the menu display by setting 24LAM to FALSE. See the example below. ( #6 TRUE ) ( #6 FALSE )
33.5
The browser POL uses 24 unnamed local variables, so maybe you should not rely on unnamed locals yourself. Better use named locals for this purpose. A few important unnamed LAMs used by the browser engine are: LAM 1LAM 2LAM 3LAM 17LAM 14LAM 24LAM Contents Quit. Set this to TRUE if you want the POL to exit. DispOffset. Index of selected item with respect to DispTop. DispTop. Index of the rst choose item currently visible on the screen. The message handler. The redisplay program. DisplayMenu. Set this to FALSE in order to enforce a redisplay of the menu.
33.6
To use the browser for more than just selecting an item, you must write programs which will be accessible with the key handler or with the menu. On of the most important tasks in these programs is to nd out what the current item is. The choose box engine keeps two copies of the choose list on the Virtual Stack, and you can use these to get the current item. On level one of the Virtual Stack, the list is inverted, and the items which have already been shown in the CHOOSE box are converted to strings (sensitive to ag -85). On level three of the Virtual Stack there is a copy of the original list. The index of the current item is available with this code snippet:
33.7. Saving and Restoring the Screen :: 2GETLAM 3GETLAM #+ ; Indexes start at 0. To access the current item use one of these methods: 1. Get the decompiled string. This is very fast and only 8 bytes. :: 2GETLAM 3GETLAM #+ GetElemBotVStack ;
229
2. Get the original item. There is no supported way to get to the third level of the Virtual Stack directly, so you have to dig it out and restore the stack afterwards. Here is a way to do it (35 bytes):
1 :: GetVStackProtectWord PopMetaVStack GetVStackProtectWord PopMetaVStack 2GETLAM 3GETLAM #+ GelElemTopVStack 1LAMBIND PushMetaVStack&Drop SetVStackProtectWord PushMetaVStack&Drop SetVStackProtectWord 1GETABND ;
10
This looks complicated, but it is also quite fast and actually used in the ROM for the Help key of the catalog. 3. If you nd 2 too long, you can keep a copy of your original list, for example in a named LAM mylist. If you did that before calling the browser ashpointer, you get the current item with :: LAM mylist 2GETLAM 3GETLAM #+ #1+ NTHCOMPDROP ;
33.7
If you want to use a menu key or another key to do an excursion from the choose box which uses the display, you must save and restore the current screen around it. This is because the browser POL only updates as little as possible on the display, so when you return from your excursion, the display will look bad and not recover. There are two simple ashpointers which can be used to save and restore the display:
230
FPTR 2 88 Save the current isplay FPTR 2 89 Restore the saved display Note that these commands use a specic storage place, so they cannot be used by stacked choose boxes (a choose box creating another choose box which needs to save its screen for an excursion). In such cases, you need to save and restore copies of HARDBUFF and HARDBUFF2.
33.8
An Example
Below follows an example for the application of the browser engine. This program displays the numbers 1-100 for multiple selection and returns a list of all selected values. Pressing the Squareroot key displays the square root of the current number in a message box. In the menu, pressing F1 adds the decompiled version of the currently selected number (a string!) to the return list. Pressing F2 will show some help text about the choose box. There is another menu button F3 which does not do anything, but which shows if the selected number is even or odd. Since this display changes, we need message six to force a menu update. F5 and F6 are the usual CANCL and OK actions. Figure 33.1 shows this program while running.
33.8. An Example
NULL{} { LAM mylist LAM res } BIND INNERCOMP "REALS" 0 :: 4 OVER#=case :: DROP DUP#1= 3PICK 23 #= ANDcase :: 2DROP :: LAM mylist 2GETLAM 3GETLAM #+ #1+ NTHCOMPDROP %SQRT DO>STR FlashWarning ; TrueTrue ; FALSE ; 5 OVER#=case :: DROP :: NoExitAction { { "->{}" :: TakeOver LAM res 2GETLAM 3GETLAM #+ GetElemBotVStack >TCOMP LAM res STO ; } { "?" :: TakeOver FPTR 2 88 DOCLLCD ZEROZERO (Empty list to collect) (Save a copy of the list) (Explode for FPTR 2 72) (Title) (Initial position) (The key handler)
231
10
15
20
25
(Get current value) (Compute SQRT) (Display) (Yes, we handle this key) (Other keys not handled) (Provide a menu)
30
35
(Do not save as LastMenu) ("Add to list" menu key) (Get current list) (Get element as string)
40
45
(Add to list) (STO current list) ("Help" menu entry) (Save current screen) (Clear screen) (Next is the help text)
50
232
"->{} ? SQRT 55 ADD HELP DISP ROOT" $>GROBCR XYGROBDISP WaitForKey 2DROP FPTR 2 89 ; } { :: TakeOver LAM mylist 2GETLAM 3GETLAM #+ #1+ NTHCOMPDROP DUP %2 %/ %FLOOR %2 %* %= ITE "even" "odd" ; NOP } NullMenuKey { "CANCL" FPTR 2 77 } { "OK" FPTR 2 76 } } ; TRUE 85 ; 6 OVER#=case :: DROP FalseFalse 24 PUTLAM ; DROPFALSE ; FPTR 2 72 ITE :: DROP LAM res TRUE ;
(Display help text) (Wait for any key) (Restore the screen)
60
(Button to show) ("even" or "odd") (The list) (Get current element) (Test if even)
65
70
(Return correct label) (No action when pressed) (4th key is empty) (Default CANCL action) (Default OK action)
75
80
90
95
33.9. Reference
FALSE ABND ; (CANCL: return FALSE) (Free local variables)
233
33.9
Addr. 072002
Reference
Name (Choose3) Description ( meta $title #pos ::handler ob T ) ( meta $title #pos ::handler F ) The main choose engine. ( meta $title #pos ::handler #idx T ) ( meta $title #pos ::handler F ) Same as Choose3, but returns the index of the selected item instead of the item itself. #idx starts at zero. ( meta $title #pos ob T ) ( meta $title #pos F ) Call Choose3Index with empty message handler. This is just :: 'DROPFALSE FPTR2 Choose3Index ; ( meta $title #pos ::handler ob T ) ( meta $title #pos ::handler F ) Save and restore HARDBUFF/2 around a Choose3 call. ( $title {} %sel ob %1 ) ( $title {} %sel %0 ) Equivalent to User RPL CHOOSE command. ( ::handler ) Pushed the default message handler (the one used by the CAT key) on the stack.
074002
(Choose3Index)
070002
(Choose2)
073002
(Choose3Save)
005002
(sysCHOOSE)
075002
(ChooseDefHandler)
33. Using the HP49 Browser Description ( ) Save HARDBUFF and HARDBUFF2 is a safe place. ( ) Restore HARDBUFF and HARDBUFF2 saved with SaveHARDBUFF. ( ) The OK action executed by Choose3 if OK or ENTER is pressed. ( ) The CANCEL action executed by Choose3 if CANCL or ON is pressed.
089002
(RestoreHARDBUFF)
077002
(Choose3OK)
076002
(Choose3CANCL)
34.1
This is a program that allows conguration of several aspects of the browser. It works as other message handlers do: it is called with a bint in the stack, representing the code of the message. If the message is handled, the program should return any data required by the message and TRUE, otherwise it returns FALSE. Which means that DROPFALSE (which can be pushed in the stack with the command 'DROPFALSE) is a valid value for this parameter, meaning that no messages are handled, and that default values should be used at all the times. Here are the descriptions of some of the messages:
235
34. Using the HP48 Browser Description and Stack Number of lines the browser will display on the screen. The default depends on the current font, and on system ag 90. ( #) Height of browser line. Probably this does not need to be changed. ( # Width of browser line. Leave space for the display of arrows if the number of elements may be grater than the page size. ( #) Should return TRUE if the browser will be full-screen, or FALSE if windowed. The default is windowed. ( flag ) Should return TRUE if check marks are allowed, thus supporting the selection of multiple items, or FALSE if not. The default is not to allow check marks. ( flag ) Returns the number of elements. If your program changes the number of elements during execution, you must handle this message. ( #) Should return the coordinates of the upper left corner of the browser selection box. You probably do not need to change the default value. ( #x #y ) This message should return the initial difference between the marked selection and the top of page. Be sure that the difference is less than the current selection and less than the page size, otherwise the calculator may crash. ( #) This message is called when the background needs to be painted. Its action can be used to draw something else on the background. ()
58
59
60
61
62
63
64
65
237
67
68
69
70
74 79
80
81
Description and Stack This message is called when the title needs to be painted. Its action should draw the title in HARDBUFF. Most of the times, this is not handled, and the title is drawn from the $Title parameter. () Returns title as a grob. Most of the times, this is not handled, and the title is drawn from the $Title parameter. ( grob ) If message 67 is not dened, this is called to return the title as a grob, but only for full-screen mode. ( grob ) If message 67 is not dened, this is called to return the title as a grob, but only for windowed mode. ( grob ) If the $Title parameter is not a null string, this entry is called to return a title string. This overrides the $Title parameter. ( $) This message should draw all visible lines of the browser. () This message should display one line of the browser. If this is the selected line, this message should draw this line in inverse video or mark that its the selected one in another way. (# ) This message is an alternative to supplying the items as the {}Items parameter. It supplies the number of the item, and this message should returns the item. Any object can be returned; ::Converter will be called to convert this into a string. If you want to have dynamicallychanging items in the browser, this message allows that. But message 82 is probably better in this case. ( # ob ) This message converts one element into a grob. (This overrides the ::Converter parameter.) If should return a grob with dimensions 7NULLLAMx8NULLLAM. If check marks are enabled, you must incorporate the check mark in the grob if the item is checked. ( # grob )
34. Using the HP48 Browser Description and Stack This message is like message 80, but the object is already returned as a string. ::Converter is not called afterwards. If this message is used, you do not need to write a ::Converter. (# $) Returns a list describing the menu. The format of the list is the same of InputLine and Input Forms, see section 37.1. ( {} ) This message is called when the browser is started, after everything has been set. () This is called when an item is checked or unchecked. The default action handles checking and unchecking of items pretty ne, so you probably do not need to handle this message. (# ) This message is called before the browser exits. () This is called after the ON key is pressed, or the CANCL menu key. If TRUE is returned, the browser exits. If FALSE is returned, the browser continues. ( flag ) This is called after the ENTER key is pressed, or the OK menu key. If TRUE is returned, the browser exits. If FALSE is returned, the browser continues. ( flag )
83
85
86
87 91
96
239
34.3
This is a secondary that converts whichever kind of object is used as a list into a string for display. The stack diagram for this secondary is ( ob $ ) If you handle messages 81 or 82, you do not need to write this program to do the conversion. However, the browser allows the user to press Alpha followed by a letter to search for an object that starts with that letter and jump to it. This requires the ::Converter parameter, even if those messages are provided. So you should ensure this parameter someway returns a string. The DO>STR entry can be of great use here.
34.4
You can specify a list of objects here, or you can specify an empty list, and use messages 80, 81 or 82 to provide the elements.
34.5
This can be either a binary integer or a list. If it is the bint 0, the browser works as a viewer, disallowing selections. If it is any other bint, it is the initially selected element. If multiple selections are enabled, you can specify instead a list of bints, representing the initially checked elements.
34.6
By reading the description of the messages and the parameters above, you have probably noted that there are several ways to provide the element that will form the browseable list, and you may have been confused by that. Here, two ways to do that will be listed. You can provide the elements using the {}Items parameter, and provide a ::Converter that will convert one of those elements into a string. You do not need to worry about messages 80, 81 or 82. This method is good if the list of elements will not change while the program is running.
240
You can leave the {}Items list empty, and store the list of elements somewhere else (most likely in a lam). Then, use messages 80, 81 or 82 to return the elements. If you use messages 81 or 82, you will return elements already as a grob or as a string, and ::Converter can be a null secondary. Or you can use 80 to return some object, and then use ::Converter to make a string out of it. This method is good if the elements change while the program is running. If you use this technique, you must also handle message 62. When the number of elements in the browser changes, run this code to adapt the browser to the changes:
1 :: ROMPTR 0B3 03E ROMPTR 0B3 026 18GETLAM 12GETLAM DUP#0=IT DROPONE #MIN 18PUTLAM FALSE ROMPTR 0B3 019 ;
10
34.7
An Example
This example uses the browser to allow the user to enter a list of equations (inspired by the Y= window, but considerably different). Initially, the list is empty. The user then adds equations to the list. Equations can also be edited or deleted. This program handles messages 62 and 82 to return the number of elements and an equation already converted to a string when asked for it. The equations are stored in a named LAM. Some other messages are also handled to congure other aspects of the browser. Figure 34.1 shows this program while running.
1
34.7. An Example
241
10
15
20
25
30
:: 60 #=casedrop TrueTrue 62 #=casedrop :: LAM EQS LENCOMP DUP#0=IT #1+ TRUE ; 82 #=casedrop :: LAM EQS SWAP NTHELCOMP ITE :: setStdWid FPTR2 ^FSTR7 ; "No equations" TRUE ; 83 #=casedrop :: { { "Add" :: PushVStack&Clear DoNewEqw
(convert to string)
(the menu)
(save stack)
242
34. Using the HP48 Browser DEPTH #0<> IT (add eqaution) :: LAM EQS SWAP >TCOMP LAM EQS STO ROMPTR B3 3E (re-read # elements) ; PopMetaVStackDROP ; } { "Del" :: LAM EQS INNERDUP #0=case DROP (quit if empty) PushVStack&Keep (save stack contents) reversym DROP 18GETLAM ROLL DROP 18GETLAM #1UNROLL DEPTH {}N LAM EQS STO PopMetaVStackDROP (restore stack) ROMPTR B3 3E (re-read # elements) 18GETLAM (change selected element) 12GETLAM (if necessary) #MIN 18PUTLAM FALSE ROMPTR B3 19 ; } { "Edit" :: LAM EQS (get element)
35
40
45
50
55
60
65
70
34.7. An Example 18GETLAM NTHELCOMP NOT?SEMI FPTR2 ^EQW3Edit NOT?SEMI 18GETLAM LAM EQS PUTLIST LAM EQS STO
243
75
(replace)
80
85
90
(title) (converter) (no items - msgs are used) (initially selected elt) (run browser)
244
34.8
Addr. 0000B3
Reference
Name Choose Description ( ::Appl $Title ::Convert {} offset {}' T ) ( ::Appl $Title ::Convert {} offset ob T ) ( ::Appl $Title ::Convert {} offset F ) The return value is a list if checkelds are enabled, otherwise it is just the selected object. Only FALSE is returned when the user presses CANCEL. ( {} ) Menus with "OK". ( {} ) Menus with "CANCL", "OK". ( {} ) Menus with "CHK", "CANCL", "OK". ( $title {items} ob T ) ( $title {items} F ) Simple interface to the HP48 choose engine. On the HP49G, calls RunChooseSimple. ( $title {items} ob T ) ( $title {items} F ) Simple interface to the HP48 choose engine. ( ) Toggle check on current item. ( ) Check all elements. ( ) Uncheck all items. ( ) Simulate Cancel. ( ) Simulate OK.
004002
RunChooseSimple
DoCKeyCheck DoCKeyChAll
DoCKeyUnChAll
DoCKeyCancel DoCKeyOK
34.8. Reference Addr. 0B3002 0B2002 0B1002 0150B3 Name LEDispPrompt LEDispList LEDispItem (BBMoveTo)
245 Description ( ) Redraw title. ( ) Redraw browser lines. ( # ) Redraw one line. ( # ) Moves selection to line and updates display. ( flag ) Recalculates offset of selected item in page, and redraws lines if the ag is TRUE. ( ) Sends message 85 to ::Appl, thus running the user-dened start-up procedure. ( ) Re-reads the size of the page (message 57). ( ) Re-reads the height of the browser line (message 58). ( ) Re-reads the coordinates of the browser box (message 63). ( ) Re-reads the width of the browser line (message 59). ( ) Sends message 96 to ::Appl, thus running the OK action. It does not check the value returned and never exits. ( ) Sends message 91 to ::Appl, thus running the CANCEL action. It does not check the value returned and never exits. ( ) Redraws the background. ( #n grob ) Returns nth element as a grob.
0190B3
(BBRecalOff&Disp)
0220B3
(BBRunEntryProc)
0230B3 0240B3
(BBReReadPageSize) (BBReReadHeight)
0250B3
(BBReReadCoords)
0260B3
(BBReReadWidth)
0280B3
(BBRunENTERAction)
0290B3
(BBRunCanclAction)
02F0B3 0370B3
(BBReDrawBackgr) (BBGetNGrob)
34. Using the HP48 Browser Description ( #n $ ) Returns nth element as a string. ( ) Re-reads whether checkmarks are enabled. (Message 61). ( ) Re-reads whether to use full-screen mode. (Message 60). ( ) Re-reads the menu. (Message 83). ( ) Re-reads the number of elements. (Message 62). ( #n ob ) Returns nth element. ( #n flag ) Returns whether the given element is checked. ( grob ) Returns up arrow as grob ( grob ) Returns down arrow as grob ( grob ) Returns a space as grob. ( ) Go down one page. ( ) Go up one page. ( flag ) Returns TRUE if the browser has no elements. ( # ) Returns height of lines based on the font that will be used. This value is the default height of the browser. Equivalent to FPTR 2 64. ( ) :: LAM 'BR5 ;
03C0B3
(BBRereadFullScr)
03D0B3 03E0B3
(BReReadMenus) (BBReReadNElems)
03F0B3 04B0B3
(BBGetN) (BBIsChecked?)
05C0B3
(BBGetDefltHeight)
0190E0
BRRclC1
34.8. Reference
247
34.8.1
The browser uses a great number of unnamed lams to store its information. Here is a description of them: Lam 1 2 3 Description Used by CACHE POL exit condition Initial display status. This is a list in this format: { DA1IsStatFlag DA2bEditFlag DA1BadFlag DA2aBadFlag DA2bBadFlag DA3BadFlag } Menu before browser was run Screen before browser was run Offset in page Height of browser line x coordinate of upper left corner of browser in HARDBUFF y coordinate of upper left corner of browser in HARDBUFF Page size Number of elements Menu Full screen? List of indexes of checked items Check marks enabled? TRUE if is a browser, FALSE if it is a viewer Current selected index {}Items ::Converter $Title ::Appl Type n/a flag {}
4 5 6 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22
35.2. Field Denitions Parameter #fields MessageHander Title Description Number of elds See section 35.4 below Title to be shown on top of screen
249
35.1
Label Denitions
Each label denition consists of three arguments: Description Text to be displayed X coordinate Y coordinate
label_text is a string, that will be converted to a grob using the minifont. This text will be displayed at the specied coordinates. These are two bints representing the x and y positions of the label in the screen. The top-left corner has coordinates (0, 0), and coordinates increase down- and right-wards. The new input form engine also supports a grob as argument, this grob will be directly displayed at the given coordinates.
35.2
Field Denitions
Each eld denition consists of thirteen arguments: Description See section 35.4 below X coordinate Y coordinate (normally label Y coordinate - 1) Length of eld Height of eld (usually 8) Type of eld, see below for valid values. List of valid object types See below Help string See below See below
Parameter MessageHandler #x_offset #y_offset #Length #Height #FieldType #AllowedTypes Decompile "HelpString" ChooseData ChooseDecompile
The message handler will be described below. The x and y positions specify where the eld will appear. They work similarly to the x and y positions of label denitions. Then length and height are also two bints, which specify the size of the eld. The eld type is a bint which denes the type of the eld: Decimal value 1 23 12 2 32 Field Type Text eld: user can enter anything. Extended text eld (DoInputForm engine only): The user can enter anything, or select a variable using the ler. Choose eld: user must select from a list of valid values. Combo eld: user can select from a list of values or enter another. Checkbox eld.
The allowed types parameter is used in the text, extended text and combo elds: it is a list of bints, representing the allowed types of objects that can be entered in that eld. You can nd the object types in the table of section 29.2. You have to use the values in the User Type column, as bints. Other elds should specify MINUSONE. You can also specify MINUSONE for text and combo elds, this means that all kinds of objects are accepted. In the extended text eld, the list of types is also used to limit the variables displayed in the ler. Decompile is a bint that species how the entered objects should be displayed in the screen. Its meaning depends on the bits that are set. First, you should start with BINT2 or BINT4: the former tells that numbers will be decompiled using the current mode, the latter species that STD mode should be used. If the eld will not hold numbers, it does not make much difference in which value you choose. After you have specied the basic way to decompile objects, you can also set some ags to congure it further. If you want to use the minifont when displaying the eld valued, add 1 to the value. If you add 8 to the value, then only the rst character of the string will be displayed. If the object the eld holds is a list (or another composite, as a matter of fact), you can add 16 or 32, to get the rst or second object of this composite, respectively, and display
251
this object according to the rules dened by the other values. This option is sometimes useful when using choose elds, but not for normal text elds. Note: DoInputForm does not support els decompiled with the minifont. You can also specify the Decompile paramater as BINT0. If this is done, no decompilation is done: you can only use strings in the eld, and they will be displayed, without the quotes, in the normal font. The next parameter species the help string that will be shown in the last line of the display when that eld has the focus. Enter anything you want. The ChooseData parameter is only used in list and combo elds. Other types should have MINUSONE as this parameter. This paramer is the list of values that will be presented to the user for selecting. When you use a decompile value that includes the value 16, you can use a list like this: { { "label1" <foo> } { "label2" <bar> } { ... } ... } This way, only the rst objects will be shown, but the entire list will be returned. (Like the INFORM User command does.) When using DoInputForm (but not IfMain, you can also specify a string in the ChooseData parameter of text elds. This means that the text eld will allow the user to browse the variables stored in memory and use the contents of some variable as the value of the eld. Apparently, IfMain ignores the ChooseDecompile parameter. Just specify it with the same value you used for the Decompile parameter. The reset and initial values are the contents of the eld that are shown when the form is initially displayed, and when it is reset. It should be an object of the types allowed for that eld, for list elds it will be one of the elements of ChooseData list. For check elds, use TRUE or FALSE. You can leave text or combo elds empty by specifying MINUSONE as one or both of this parameters.
35.3
These are two bints, representing the number of labels and elds dened. Note that since they are different values, you can have labels which just show some kind of information to the user, or elds without any label denition.
252
35.4
Message Handlers
As with other input/output applications of the HP49, input forms use message handlers to allow the programmer to have more control over the input form. There is one message handler for each eld, and one for the input form itself. The messages are passed whenever something interessant happens to a eld or the input form, and during the initialization of the input form. As with other message handlers, the program you provide is called with a message number (a bint) in level one, and sometimes other parameters. If the program handles the message, then it should return whatever is required by the specic (sometimes nothing). If the message is not handled, it should drop the message number and push FALSE in the stack, leaving any other arguments there. So, a message handler that handles no messages is simply DROPFALSE, which, as you know, can be conveniently pushed in the stack with 'DROPFALSE. In the message handling, the entries listed in the reference section below can be used to retrive information from the input form or to modify it. Section 35.8.2 will describe each of the available messages in IfMain. The messages of DoInputForm are different. Here is a template message handler program if only one message is handled:
1 :: IfMsgGetFocus (or any other message) #=case :: * Here is the message handling code TRUE (to tell the system the message was handled) ; FALSE (indicate that other messages were not handled) ;
253
10
35.5
The Title
This is a string that will be shown on the top of the display, with the small font. If it is longer than 32 characters (the width of the screen), it will be truncated and . . . will be appended. With IfMain, instead of a string you can provide your own grob to be displayed. It should have the size of 131x7 pixels.
35.6
If CANCEL was used to exit the form, then just FALSE is returned. The value of each eld depends on the types allowed for that eld, and on the way the possible values of list elds are specied. If a eld is empty, xNOVAL is returned.
35.7 An Example
This example imitates the HP49 tranfer dialog, but far from completely. There are many differences, and this example has, naturally, no functionality beyond displaying an Input Form.
254
The code denes all the labels and elds, and the input form has a simple message handler that handles two messages: one message to set the eld that will start with the focus, and one to congure the last three softkeys to look like the ones in the Tranfer dialog. (Our keys, however, only beep when pressed. . . ) Figure 35.1 below displays the screen when this program is run.
10
15
20
(Message handler) (Position & size) (Field type: choose) (Types, does not apply here) (No decompilation) (Help text) (Possible options) (ChooseDecompile - ignored) (Initial & reset values)
35.7. An Example
DROPFALSE 92 9 36 8 BINT12 MINUSONE BINT0 "Choose type of transfer" { "Kermit" "XModem" } BINT0 "Kermit" DUP DROPFALSE (Message handler) 25 18 103 8 (Position & size) BINT1 (Field type: text field) { BINT5 BINT6 } (Allows ids and lists) BINT2 (Decompile with stack appearance) "Enter names of vars to transfer" (Help text) MINUSONE (ChooseDate - n/a) MINUSONE (ChooseDecompile - ignored) MINUSONE DUP (Initially empty) DROPFALSE 20 27 18 8 BINT12 MINUSONE BINT0 "Choose transfer format" { "Bin" "ASC" } BINT0 "Bin" DUP DROPFALSE 74 27 24 8 BINT12 MINUSONE BINT0 "Choose character translations" { "None" "Newl" "\8D159" "\8D255" } BINT0 "\8D255" DUP DROPFALSE 122 27 7 8 BINT12 MINUSONE BINT0
255
25
30
35
40
45
50
55
60
65
256
"Choose checksum type" { "1" "2" "3" } BINT0 "3" DUP DROPFALSE 20 36 24 8 BINT12 MINUSONE BINT0 "Choose baud rate" { "1200" "2400" "4800" "9600" "15300" } BINT0 "9600" DUP DROPFALSE 74 36 24 8 BINT12 MINUSONE BINT0 "Choose parity" { "None" "Odd" "Even" "Mark" "Spc" } BINT0 "None" DUP DROPFALSE 104 36 ZEROZERO BINT32 MINUSONE DUP "Overwrite existing variables?" MINUSONE DUP TrueTrue
70
75
80
85
90
95
100
105
110
9 9 (Number of labels & fields) :: (InputForm message handler) BINT7 OVER#=case :: (Sets initially focused field) DROP TWO TRUE ; BINT12 OVER#=case :: (Configures menu softkeys) DROP { { "RECV" DoBadKey }
35.8. Reference
{ "KGET" DoBadKey } { "SEND" DoBadKey } } TRUE ; DROPFALSE 120 ; "TRANSFER" FPTR2 ^IfMain ; (Title) (Run it)
257
115
35.8 Reference
35.8.1
Addr. 020004
Inputform
Name IfMain Description ( l1..ln f1..fm #n #m msg $ ob1..obn T ) ( l1..ln f1..fm #n #m msg $ F ) l = $ #x #y f = msg #x #y #w #h #type legal dec $hlp ChDat ChDec res init Starts an input form using the new engine. ( l1..ln f1..fm #n #m msg $ ob1..obn T ) ( l1..ln f1..fm #n #m msg $ F ) l = $ #x #y f = msg #x #y #w #h #type legal dec $hlp ChDat ChDec res init Starts an input form using the old engine. ( {} ) Returns the menu for the rst menu row of an InputForm.
2C371
DoInputForm
0050B0
IFMenuRow1
35. Creating Input Forms Description ( {} ) Returns the menu for the second menu row of an InputForm. ( # T/F(fld/lbl) T/F(val) ) ( # T/F(fld/blb) #0 T/F(val) ) Toggles the eld or label visible or invisible. Second argument species if # means a eld or a label. Third argument is the value to set. ZERO as third argument means to retrieve the current setting. ( # T/F(fld/lbl) T/F(val) ) ( # T/F(fld/blb) #0 T/F(val) ) Toggles the eld or label selected or not selected (appears in inverse video on the screen). ( # T/F(fld/lbl) grb ) Sets the grob of a eld or a label (modies the data saved in the data string). ( val # ) Sets the value of a eld (full handling, including GROB setting). ( # val ) Gets the value of the Nth eld. ( ) Gets the value of the current eld. ( val ) Sets the value of the current eld. ( # prg ) Retrieves a eld message handler. ( # #type ) Retrieves the eld type. ( # {} ) Retrieves the eld object type list. ( # val ) Retrieves the eld decomp value.
021004
IfSetFieldVisible
022004
IfSetSelected
023004
IfSetGrob
024004
IfSetFieldValue
IfGetFieldValue
IfGetCurrentFieldValue
IfSetCurrentFieldValue
IfGetFieldMessageHandler
IfGetFieldType
IfGetFieldObjectsType
IfGetFieldDecompObject
259 Description ( # {} ) Retrieves the eld data for choose. ( # val ) Retrieves the eld decomp value in case of choose. ( # val ) Retrieves the eld reset value. ( val # ) Changes the eld reset value. ( # val ) Retrieves the eld internal value. ( ) Displays the datastring on the screen. Takes care of the command line size. ( #n ) Recalls the number of elds from the data string. ( # val ) Checks or uncheck a check eld. ( ob ob flag ) Checks if an object meets the current eld type requirements. ( {} {}' ) ( #FFFFF #0 ) Generates a list of the allowed prologs for a eld. ( ) Resets all elds, set as the current value their reset value. Used to explode the datalist on the stack to work on it. ( # ) Makes a different eld "current". ( val ) ( ) If the current eld is a choose eld, displays the posibilities and let the user choose. A value is returned only if the user does not press CANCEL.
IfGetFieldChooseDecomp
IfGetFieldResetValue
IfSetFieldResetValue
IfGetFieldInternalValue
IfDisplayFromData
032004
IfGetNbFields
033004 034004
IfCheckSetValue IfCheckFieldtype
04C004
IfGetPrlgFromTypes
035004
IfReset
036004 037004
IfSetField IfKeyChoose
35. Creating Input Forms Description ( (cmd line) ) Edits the current eld value if possible. You cannot edit a choose and a label choose eld. ( (cmd line) ) ( ) Displays a Choose box with all the possible types for this eld. A command line is opened only if the user replies with OK. ( val ) Puts the value of the eld on the stack and HALT. Allows to the user to compute a new value. ( ) Inverts the current check eld value. ( ) On Key handler. Gives the oportunity to the user to perform his own program. Asks to the IF if we can leave. If Yes, puts a FALSE (quit with ON (if canceled)) and sets the 'Quit LAM to TRUE. ( ) Enter Key management. Gives the oportunity to the user to perform his own program. Asks to the IF if we can leave. If yes, puts the elds values on the stack put a TRUE (if validated) and sets the 'Quit LAM to TRUE. ( $dat #n $/# $dat' ) Sets the help string associated with a eld. This is used by the automatic IF generator program and should not be use in other ways.
039004
IfKeyTypes
03A004
IfKeyCalc
03B004 03C004
IfKeyInvertCheck
IfONKeyPress
03D004
IfEnterKeyPress
03F004
IfSetHelpString
261 Description ( $dat grb/$/# $dat' ) Alters a DataString modifying the Title part. This is used by automatic IF generator program ans should not be use in other ways. ( ) Initializes the internal depth counter. This has to be used when running a command modifying the stack ( $dat handl {} F ) ( $dat handl {} ob1...obn T ) Internal Inform Box main program. Alters a DataString modifying the Title part. This is used by automatic IF generator program ans should not be used in a different way. ( ob1...obn ) Puts on the stack the external value of each eld. ( # T/F(fld/lbl) #x #y #w #h ) Changes the size and position of an object Note: You can not change the size or the X position of a label or a check eld. ( # T/F(fld/lbl) #x #y #w #h ) Gets the size and position of an object. ( $dat bmsg #n $dat ) Sets the text of a set of labels. ( $dat bmsg #n $dat ) Sets the Help String of all elds. ( $dc $dat ) Uncompresses a compressed data string.
04A004
IfInitDepth
042004
IfMain2
043004
IfPutFieldsOnStack
044004
IfSetFieldPos
045004
IfGetFieldPos
IfSetAllLabelsMessages
IfSetAllHelpStrings
IsUncompressDataString
262
35.8.2
The names of the messages are DEFINEs for the numbers. You will nd this DEFINEs in the inputform.h le in the include subdirectory.
35.8.2.1 IfMsgKeyPress 0
This message is sent after each keypress, rst to the active eld, then to the input form. If the eld handles the message, the normal input form key handling is not executed. Input Output (if handled) Output (if not handled) 2: 1: 2: 1: 3: 2: 1: #KeyPlane #KeyCode ::Key_Handler_Program TRUE #KeyPlane #KeyCode FALSE
35.8.2.2
IfMsgLooseFocus 1
This is sent to a eld when it is about to loose the focus. You can do anything here, including taking back the focus. If this is done, then no IfMsgGetFocus message will be sent to this eld. Input Output 1: #Field_That_Will_Get_Focus 2: #Field_That_Will_Get_Focus 1: TRUE or FALSE
35.8.2.3 IfMsgNewField 2
This message is sent to the IF just before a new eld receives the focus. There is no input, and the output can be either TRUE or FALSE.
35.8.2.4 IfMsgGetFocus 3
This message is sent to the eld that has just received the focus. There is no input, and the output can be either TRUE or FALSE.
35.8. Reference
263
35.8.2.5 IfMsgGetFieldValue 4
This message is sent to the current eld. It has as input the internal data of the eld, and this message can be used to return the external value (which is displayed in the screen). Using this and the IfMsgSetFieldValue messages, it is possible, for example, to store only an offset to the current element when you have a list of xed values, instead of the actual element. Input Output (if handled) Output (if not handled) 1: 2: 1: 2: 1: Internal value External value TRUE Internal value FALSE
35.8.2.6
IfMsgSetFieldValue 5
The complimentary message of IfMsgSetFieldValue: it gives as input the external (or user) value, and the internal value should be returned. If you want a message to be called after each change in the value of a eld, this is the one. You can leave the value given as input unchanged, naturally. Input Output (if handled) Output (if not handled) 1: 2: 1: 2: 1: External value Internal value TRUE External value FALSE
35.8.2.7 IfMsgGetFieldGrob 6
This message is sent to the current eld. If you decide to handle it, you will have to set the grob that is displayed in the eld (you can use the IfSetGrob entry for this). If you do so, then the standard code of the Input Form that would do this is not called. Input Output 2: 1: 2: 1: #Field Value #Field TRUE or FALSE
264
1
:: OVER TRUE ROT SWAP (Number, number, TRUE, value) $>grob FPTR2 ^IfSetGrob ;
35.8.2.8 IfMsgSetFirstField 7
This message is sent during initialization to the input form handler, to get the number of the rst eld that will be selected. It makes no difference wheter you return TRUE or FALSE, just change the number if desired. Input Output 1: #Field 2: #Field 1: TRUE or FALSE
35.8.2.9 IfMsgFieldReset 10
This message is sent to a eld that is going to be reset. It is possible to modify the value of the eld, if desired. Input Output 1: Value 2: Value, possibly modied 1: TRUE or FALSE
35.8.2.10 IfMsgGetMenu 11
This message is sent to the input form handler during initialization, and can be used to provide a menu for the input form. The menu is in the format described in section 37.1. Input Output (if handled) 1: 3: 2: 1: 2: 1: Menu Original menu New menu TRUE Original menu FALSE
35.8. Reference
265
35.8.2.11 IfMsgGet3KeysMenu 12
This message can be used to change the last three softkeys of the rst row of the standard input form menu. If handled, it should return a list with three sub-lists, each being a key denition. Input Output (if handled) Output (if not handled) None 2: List 1: TRUE 1: FALSE
35.8.2.12 IfMsgCancel 13
This allows the user to replace the default quit handler. This message is called when the ON key or the CANCL softkey are pressed. If it is handled, then no standard code is run. The user should alter the value of LAM 'Quit to indicate the POL that the input form should be ended. Input Output (if handled) Output (if not handled) None 1: TRUE 1: FALSE
35.8.2.13 IfMsgCancelKey 14
This message is sent to the input form handler when the user requests the input form to end via the CANCEL key. The programmer can prevent the input form to end if there is invalid input, for example. Input Output (if handled) Output (if not handled) None 2: TRUE or FALSE 1: TRUE 1: FALSE
When the message is handled, a TRUE in level two means that the input form should end, FALSE means it should continue.
35.8.2.14 IfMsgOK 15
This is similar to the IfMsgCancel message, but for the OK softkey or ENTER key.
266
35.8.2.15 IfMsgKeyOK 16
This message is sent to the input form handler when the user requests the input form to end via the OK key. The programmer can prevent the input form to end if there is invalid input, for example. Input Output (if handled) Output (if not handled) None 2: TRUE or FALSE 1: TRUE 1: FALSE
When the message is handled, a TRUE in level two means that the input form should end, FALSE means it should continue.
35.8.2.16 IfMsgChoose 17
When the user presses the CHOOS softkey in a choose eld, this message is sent, rst to the eld, and then to the input form (if it was not handled by the eld). If it is handled by either, then no standard code is run, and you have to display the choose box yourself. There are no arguments, and you should return TRUE to prevent the standard code to be executed if you desire that, after having displayed your choose box.
35.8.2.17 IfMsgType 18
This message is sent to the input form when the TYPES softkey is pressed. If it is handled, no standard code is executed. There are no arguments, and you should return TRUE to prevent the standard code to be executed if you desire that, after having displayed your choose box.
35.8.2.18 IfMsgCalc 19
This message is sent to the form when the CALC softkey is pressed. If it is handled, no standard code is executed. There are no arguments, and you should return TRUE to prevent the standard code to be executed if you desire that, after having displayed your choose box.
35.8. Reference
267
35.8.2.19 IfMsgNewCommandLine 20
This message is sent to the input form when a new command line is created. The system does not care if the message is handled or not. It is just to give the programmer the opportunity to perform anything he needs. There are no inputs, and the output is just TRUE or FALSE, without any difference.
35.8.2.20 IfMsgOldCommandLine 21
This message is sent to the input form when a command line is cancelled. See message IfMsgNewCommandLine above for more details.
35.8.2.21 IfMsgCommandLineValid 22
This is sent to a eld when the command line is validated. Input Output (if handled) Output (if not handled) None; a command line is present No command line; elements in the stack and TRUE 1: FALSE
35.8.2.22 IfMsgDecompEdit 23
This is sent to a eld when an object needs to be decompiled for editing. Input Output (if handled) Output (if not handled) 1: 2: 1: 1: Object String TRUE FALSE
35.8.2.23 IfMsgNextChoose 24
This message is sent to a choose eld when the +/- key is pressed. If it is handled, then the default action is not run. There are no inputs and no outputs, except for the TRUE/FALSE.
35.8.2.24 IfMsgEdit 25
This is sent to a eld when the EDIT softkey is pressed. The input is the current value of the eld, the output can be nothing, a modied command line, something in the stack, or a modied eld. If this message is handled, then the default code is not run.
One thing to note is that the words above return just pointer to the grob, so if you alter the grob, the display will also be altered automatically. Most of the times that is the desired behavior, but if you do not want that, call TOTEMPOB after using any of the words above to make a unique copy in temporary memory. See section 24.1.4 for more information on temporary memory and object references. The text and graphic grobs may be enlarged, and may be scrolled. The menu label grob has a xed size of 131x8 pixels. The command TOADISP makes the text grob visible, and the command TOGDISP makes the graphic grob visible. 268
269
The text grob is divided in three regions. The display areas are numbered one, two and three. In many words you will nd DA, which means Display Area. Figure 36.1 shows each of this areas.
Figure 36.1: The Display Areas Display area 2 is actually divided in two areas: 2a and 2b. Normally, only area 2a is visible, and it occupies the whole DA 2.
270
1 :: ClrDA1IsStat RECLAIMDISP TURNMENUOFF <application> ClrDAsOK -orSetDAsTemp ; (redraw LCD) (freeze the whole display)
(suspend clock) (set, clear and resize text display) (turn off menu if desired)
10
36.3
In some programs, it is desired that, after the application ends, the screen is not redrawn, but continues frozen so that the user can see the results, like the User RPL the command FREEZE does. Other times, it is desired that the display is returned back to normal. In System RPL, several words serve those purposes. The most used ones are listed below; the whole list is in the reference section below. Word SetDA1Temp SetDA2OKTemp SetDA3Temp SetDA12Temp SetDAsTemp ClrDA1OK ClrDA2OK ClrDA3OK ClrDAsOK Action Freezes display area 1. Freezes display area 2. Freezes display area 3. Freezes display areas 1 and 2. Freezes the whole display. Redraws display area 1. Redraws display area 2. Redraws display area 3. Redraws the whole display.
36.4
The following words clear HARDBUFF, entirely or in part. Remember that HARDBUFF refers to the currently displayed grob, either the text or the graph display. Except from BLANKIT, no words take or return arguments.
36.5. Displaying Text Word CLEARVDISP BlankDA1 BlankDA2 BlankDA12 Clr16 Clr8 Clr8-15 CLCD10 CLEARLCD BLANKIT Action Clears entire HARDBUFF. Clears display area 1. Clears display area 2. Clears display areas 1 and 2. Clears top 16 rows. Clears top 8 rows. Clears rows 8 to 15 (second status line). Clears status and stack area. Clears entire display. ( #start_row #rows ) Clears #rows from HARDBUFF.
271
36.5
Displaying Text
There are two fonts in the HP49: the system font and the minifont. Both can be changed by the user, but it is only possible to access two fonts at each time. The height of the system font (or of its characters, to be precise) can vary, but its characters are always ve pixels wide. The size of the minifont is xed: each character is 3x5 pixels. There are commands to display text in the system font directly, but not for the minifont. In the latter case, it is necessary to convert the text into a grob and display the grob. The list below only describes the most used ones, for a complete list see the reference section below.
36.5.1
System Font
To display text using the system font, use the commands DISPROW1, DISPROW2. . . to DISPROW10, which take a string as argument and display it in the specied line of the display. Note that, depending on the size of selected system font and wheter the menu is displayed, some of these commands may not be used. You can always safely display text on the rst seven lines, even with the largest system font.
272
36.5.2
Minifont
As said above, displaying text with the minifont is more complicated. First, put a string in the stack and run the command $>grob. This will return a grob representing with the string in the minifont. You now need to display this grob on the screen. You can use GROB! or XYGROBDISP for that. For more information on these words and for a general treatment of grobs, turn to Chapter 15. In this same chapter, you will nd some other commands which might be more convenient for displaying text with the minifont.
36.5.3
Displaying Warnings
The word FlashWarning is used to display a warning message. It beeps, and then displays the given string in a message box. The user must press OK in order to continue. Instead of FlashWarning, one can use FlashMsg, which displays the text in the status line, and does not beep. To display a message in the status area, it uses the word DISPSTATUS2, which takes a string with a line break in it, and displays it using the two lines of the status area. After a short pause, the display is returned to the state it was before and the program continues.
36.6
36.6.1
Addr. 26166 2616B 25FA4 26076
Reference
Display Organization
Name TOADISP TOGDISP ABUFF GBUFF Description ( ) Sets the text display as the active. ( ) Sets the graphic display as the active. ( textgrob ) Returns the text grob to the stack. ( graphgrob ) Returns the graphic grob to the stack. The HP49 extable address for ExitAction! is the same, but this must be a bug.
36.6. Reference Addr. 2608F 26094 25EDE 25ED5 Name HARDBUFF HARDBUFF2 HARDHEIGHT GBUFFGROBDIM Description ( dispgrob ) Returns the current grob to the stack. ( menugrob ) Returns the menu grob to the stack. ( #height ) Returns the height of HARDBUFF. ( #height #width ) Returns dimensions of graphic grob.
273
36.6.2
Addr. 25EF4
2EEF9
DOERASE
274
36.6.3
Addr. 2EF67
Immediate Refresh
Name SysDisplay Description ( ) Redisplays all required areas. Does it immediately, without waiting for the current command to nish. ( ) Redisplays the command line now if necessary. ( ) Redisplays the command line now. ( ) Just calls DispCommandLine. ( ) Redisplays the menu now if no key is waiting in the buffer. Even better is this: :: DA3OK?NOTIT ?DispMenu ; ( ) Displays menu now. ( ) :: DispMenu.1 SetDAsValid ; ( ) Redisplays the stack now if necessary. ( ) Redisplays the status area now if necessary. ( ) Displays the status area now. ( ) Displays a horizontal line at y=14, normally the separation between header and stack. ( flag ) Is time display required? Checks system ag 40 and something else. ( ) Redisplays the InputLine prompt, i.e. refreshes the region between the command line and the header during InputLine. Requires a string (the prompt) in 4LAM.
?DispCommandLine DispCommandLine
DispEditLine ?DispMenu
2A7F7
DispTimeReq?
2F300
DispILPrompt
36.6.4
Addr. 2EE8D 2EE8E 2EE8F 2EE90 2EE6E 2EE6D 2EE62 2EE63 2EE66 2BF3A 2BF53 2BF6C 2BF85 2EE69 2EE8A 2EE6A 2EEA7 2F37A 2EE6B 2EE71 2EE64 2EEA5 2EE67 2EF98 2EE68 2EE91 2EF99
276 Addr. 2EEA0 2EE78 2EE74 2EEB0 2EE79 2EE75 2EEB1 2EE7A 2EEB3 2EEB2 2EE7B 2EEB5 2EEB4 2EE72 2EE73 2EE76 2EE81 2EEB7 2EE93 2EE6F 2EE77 2EE70 2EE94 2EE65 2F379 2EE7C 2EE6C 2EEAC 2EEAE 2EEAF 2EEAB 2EE7F 2EE7E 2EE80 Name SetDA3ValidF SetDA1Bad ClrDA1Bad DA1Bad? SetDA2aBad ClrDA2aBad DA2aBad? SetDA2bBad ClrDA2bBad DA2bBad? SetDA3Bad ClrDA3Bad DA3Bad? SetDA1NoCh SetDA2aNoCh SetDA2bNoCh ClrDA2bNoCh DA2bNoCh? SetDA2NoCh SetDA12NoCh SetDA3NoCh SetDA13NoCh SetDA23NoCh SetDA12a3NCh SetDA123NoCh SetDAsNoCh SetDA2aEcho SetDA1IsStat SetNoRollDA2 ClrNoRollDA2 DA1IsStatus? SetDA2bIsEdL DA2bIsEdL? ClrDA2bIsEdL Description ( ) ( ) ( ) ( flag ) ( ) ( ) ( flag ) ( ) ( ) ( flag ) ( ) ( ) ( flag ) ( ) ( ) ( ) ( ) ( flag ) ( ) ( ) ( ) ( ) ( ) ( ) aka: SetDA12a3NoCh ( ) ( ) ( ) ( ) ( ) ( ) ( flag ) ( ) ( flag ) ( )
36.6. Reference
277
36.6.5
Addr. 25E7E
at
26021 2EED4 2EED5 2F15E 2EF5E 2F31C 2F31B 2EE5C 261C0 261C5 2EF05
CLEARVDISP Clr8 Clr8-15 Clr16 BlankDA1 BlankDA2a BlankDA2 BlankDA12 CLCD10 CLEARLCD DOCLLCD
36.6.6
Addr. 2613E 2603A 26148
278 Addr. 2603F 26139 26035 25EE9 25F08 2649F 26143 2610C 25EBE Name ClrRightAnn SetAlphaAnn ClrAlphaAnn LockAlpha UnLockAlpha (ClrBusyAnn) SetPrgmEntry PrgmEntry? Do1st/2nd+:
36. The Display Description ( ) Clears right-shift annunciator. ( ) Sets alpha annunciator. ( ) Clears alpha annunciator. ( ) Sets alpha mode, annunciators, etc. ( ) Clears alpha mode, annunciators, etc. ( ) Clears the busy annunciator. ( ) Sets program-entry mode. ( flag ) Is program-entry mode set? ( :: <ob1> ; (PRG mode) ) ( :: <ob2> <rest> ; (no PRG mode) ) If in program mode, executes the next object after it. If not in program mode, executes the rest of the stream starting at the second object after it. ( ) Sets algebraic-entry mode. ( ) Clears algebraic-entry mode. ( flag ) Is algebraic-entry mode set? ( flag ) Returns TRUE if immediate-entry mode (program and algebraic-entry modes cleared). ( ) Clears AlgEntry mode if set. ( ) Clears AlgEntry mode if set and sets ProgramEntry mode.
25E74 25E75
?ClrAlg ?ClrAlgSetPr
36.6. Reference
279
36.6.7
Addr. 2F384 2F36C 2F383 2617F 2EED6 2F352 2F36B 2F385 2F31D 26198
Window Coordinates
Name TOP8 Rows8-15 TOP16 WINDOWCORNER HBUFF_X_Y LEFTCOL RIGHTCOL TOPROW BOTROW WINDOWXY Description ( HBgrob #x1 #y #x1+131 #y1+8 ) Returns coordinates of rst status line. ( HBgrob #x1 #y1+8 #x1+131 #y1+16 ) Returns coordinates of second status line. ( HBgrob #x1 #y1 #x1+131 #y1+16 ) Returns coordinates of status area. ( #x #y ) Gets coordinates of corner of window. ( HBgrob #x #y ) Returns current grob and window coordinates. ( #x ) Gets x-coordinate of left column. ( #x ) Gets x-coordinate of right column. ( #y ) Gets y-coordinate of top row. ( #y ) Gets y-coordinate of bottom row. ( #x #y ) Sets corner coordinates.
36.6.8
Addr. 26193 26184 26189 2618E 2F370
36. The Display Description ( ) Moves display one pixel down, checks for corresponding key being pressed. ( ) Moves display one pixel left, checks for corresponding key being pressed. ( ) Moves display one pixel right, checks for corresponding key being pressed. ( ) Jumps to top of display. ( ) Jumps to bottom of display. ( ) Jumps to left of display. ( ) Jumps to right of display. ( flag ) Is window at the top? ( flag ) Is window at the bottom? ( flag ) Is window at the left? ( flag ) Is window at the right?
2F36E
SCROLLLEFT
2F36F
SCROLLRIGHT
36.6.9
Addr. 2F21D 2F21E
Displaying Objects
Name ViewObject ViewStrObject Description ( ob ) ( flag $ F ) Flag decides if it should be possible to toggle TEXT/GRAPH. ( flag grob F ) Flag decides if it should be possible to toggle TEXT/GRAPH.
2F21F
ViewGrobObject
281 Description ( ob ) Displays ob in status line. Used for single stepping during debugging. ( grob ) Launches PICT environment. ( #x #y ) Internal PVIEW, displays PICT starting at the given coordinates.
0C1007 2EF61
SCROLLext WINDOW#
36.6.10
Addr. 25EB4 25FB8 25EAB 25FBD 25EAC 25FC2 25FC7 25FCC 261F7 25FD1 25FD6
Displaying Text
Name DODISP DISPROW1 DISPROW1* DISPROW2 DISPROW2* DISPROW3 DISPROW4 DISPROW5 DISPROW6 DISPROW7 DISPROW8 Description ( ob %row ) Displays any object in specied row. ( $ ) aka: DISP@01, BIGDISPROW1 ( $ ) Displays relative to window corner. ( $ ) aka: DISP@09, BIGDISPROW2 ( $ ) Displays relative to window corner. ( $ ) aka: DISP@17, BIGDISPROW3 ( $ ) aka: DISP@25, BIGDISPROW4 ( $ ) ( $ ) ( $ ) ( $ ) May not be possible depending on the size of the font and whether the menu is on or off. ( $ ) May not be possible depending on the size of the font and whether the menu is on or off. ( $ ) May not be possible depending on the size of the font and whether the menu is on or off.
25FDB
DISPROW9
25FE0
DISPROW10
36. The Display Description ( $ #row ) aka: BIGDISPN ( $ #start #max ) Displays string on multiple lines, starting at #start and no using more than #max rows. New lines must be manually specied. Segments longer than 22 characters are truncated and appended with "...". ( $ ) Displays message in status area using two lines. ( $ ) DISPSTATUS2 and freeze status area. ( $ ) Displays $ in menu grob using minifont. ( $ ) Displays $ in menu grob using minifont and waits for a key. Then refreshes menu display. ( $ ) Displays $ in the last stack display row, just above the menu. ( $ ) Displays $ in the last stack display row. If menu is turned on it can cover displayed text. ( $ ) Displays message in status area, then restores it to normal. ( $ ) Displays message in a message box and beeps. Waits for OK to be pressed. ( $ flag ) Use the string to aks the user a question with yes/no in a choose box. ( $ ) Displays alert messagebox. ( $ ) Displays message, beeps and freezes status area.
25EAD
DISPSTATUS2
25FE5
DISPLASTROW
25FEA
DISPLASTROWBUT1
25ED4
FlashMsg
2EE61
FlashWarning
2F1A5
AskQuestion
02E002 2EE60
DoAlert DoWarning
283 Description ( $ #x #y grob menu T ) Displays a message box with a grob in the upper left corner and the specied menu. The meaning of #x and #y is unclear. ( {} ) The messsage box menu, with just the OK key.
0040B1
MsgBoxMenu
36.6.11
Addr. 2621A 2625B 25F15 2620B 26288
Fonts
Name FONT> MINIFONT> >FONT >MINIFONT
StackLineHeight
26242
GetFontStkHeight
Description ( font ) Recalls system font. ( minifont ) Recalls the current minifont. ( font ) Sets system font. ( minifont ) Sets the current minifont. ( # ) Returns height of text grob minus size of header and menu. ( # ) Returns stack font height (used for display stack rows). aka: StackFontHeight
The command DispMenu.1 redisplays the current menu; and the command DispMenu redisplays the current menu and then calls SetDA3Valid to freeze the menu display area (display area 3). The words below convert several kinds of objects to menu labels and display them at the specied column: Word Str>Menu Id>Menu Stack and action ( #col $ ) Makes and displays a standard menu label. ( #col id ) Recalls id and displays standard or directory label, depending on the contents. ( #col grob ) Displays a grob as a menu label. ( #col :: ) Evaluates secondary and uses results to create and display appropriate menu label.
Grob>Menu Seco>Menu
The words below convert strings to the four different kinds of grobs available. All of them take a string and return a grob as arguments
284
37.1. Menu Format Word MakeStdLabel MakeBoxLabel MakeDirLabel MakeInvLabel Action Makes a black label (standard). Makes label with a box inside. Makes directory label (bar above). Makes white label (like in Solver).
285
37.1
Menu Format
A menu is either a list { MenuKey1 MenuKey2 ... MenuKeyN } or a program :: <Settings> { MenuKey1 MenuKey2 ... MenuKeyN } ; which returns such a list and optionally changes of the default menu properties installed by InitMenu. Each menu key can be any of the following: NullMenuKey KeyObj { LabelObj KeyProcNS } { LabelObj { KeyProcNS KeyProcLS } } { LabelObj { KeyProcNS KeyProcLS KeyProcRS } } LabelObj is the object to be displayed as the label. If it is a program with TakeOver as the rst command, it is evaluated with the x-position of the label on the stack and must return the argument(s) for the LabelDef progam (normally the x-position of the label and the object to display as a label). If you do not override the LabelDef command (most of the times you will not), then LabelObj can be any object, but genereally it is a string or a 21x8 grob. KeyProc is the action taken upon key press. It will be executed by a special executor which takes appropriate actions depending upon the object type. If KeyProc is a program with TakeOver as the rst command, it will override the normal executor. NS here means this is the action when the menu key is pressed unshifted (think of No-Shift). Similarly, LS and RS means the actions run when the key is pressed left- or right-shifted, respectively.
286
37.2
Menu Properties
The menu system of the HP49 provides an amazing exibility. Besides the normal actions, a menu has many properties which dene the appearance of labels and the specic actions taken upon keypresses, actions to take when the context changes or a different menu is installed etc. The properties a menu carries are: Word MenuDef MenuKeys MenuRow LabelDef MenuRowAct ExitAction TrackAct ReviewKey MenuKeysNS MenuKeysLS MenuKeysRS BadMenu? Rebuild? Track? Stack and action The current menu. The menu keys in a list. The menu page. The label builder for menu. Action taken when menu row changes or when LastMenu is reinstalled. Action taken when menu changes. Normally this action saves the current menu as LastMenu. Action taken when the context (the current directory) changes. Action taken when REVIEW key (Rightshift DOWN) is pressed. Action taken when menu key is pressed. Action taken when menu key is pressed left-shifted. Action taken when menu key is pressed right-shifted. Must the menu be be redrawn? Has the menu row changed? If context has changed is there a prg to execute?
Examples for the TrackAct property are: SolverMenu has DoSolveMenu as TrackAct, because there might be another EQ variable to use. The Custom menu just restarts itself because the value of the CST variable may have changed. ( CstTrack = :: NoExitAction MenuDef@ InitMenu ; ) Most menu properties can be modied using supported entry points. Here is an example for doing so. The following program sets a modied VAR menu, which allows variables to be protected against being overwritten with a left-shifted menukey.
287
10
15
20
25
This does several things: 1. Gets the normal VAR menu in order to pass it to DoMenuKey. 2. It modies the LabelDef property in a way that the protected variables will have an inverted label in the menu. 3. It modies the MenuKeyLS property in a way that it exits with an error message if the relevant variable is protected. The program in ID prtct is an ID selector which has the stack diagram ( id flag ) and must decide if a given ID should be protected. Here are some possibilities: 1. :: DROPTRUE ; All variables are protected
3. :: ID>$ CAR$ CHR_% EQUAL ; Variables with names starting with "%" are protected. 4.
:: ID PROTECTED OVER EQUALPOSCOMP #0<> ; (all variables in the list) (stored in the variable) (PROTECTED are protected)
Note that if the variable prtct does not exist or does not follow the required stack diagram, the calculator may crash. You might want to modify the program to put in better protection against user errors. Also note that this only protects against storing using left-shift and a menukey. It will not protect against using the STO command or the ler, naturally.
37.3
37.3.1
Addr. 04A41
Reference
Menu Properties
Name GETDF Description ( #menukey ob ) Gets the denition of a menu key from THOUCHTAB. #menukey = #1..#6 ( #menukey ob ) Gets the denition of a menu key from THOUCHTAB. #menukey = #1..#6. With #7, get the executor. ( ) Sets the ag that the menu needs to be rebuild. ( #n ) Sets the menu row. #n is not the row, but the index of the rst menu key in that row, i.e. 1,7,13,. . . ( #n ) Recalls the index of the rst menu key in the current menu page. Returns 1 for the rst page, 7 for the second page, 13 for the third and so on.
04A0B
GETPROC
2580E 260B7
SetRebuild MenuRow!
260BC
MenuRow@
289 Description ( #n ) Sets the row of the last menu. #n is not the row, but the index of the rst menu key in that row, i.e. 1,7,13,. . . ( #n ) Recalls the index to the rst menu key in the current row of the last menu. Returns 1 for the rst page, 7 for the second page, 13 for the third and so on. ( menu ) Recalls the current menu denition. menu is a MenuList or a program, or a Rompointer. ( menu ) Sets the denition of the last menu. menu is a MenuList or a program, or a Rompointer. ( menu ) Recalls the denition of the last menu. menu is a MenuList or a program, or a Rompointer. ( ) Stores row and denition of current menu as the last menu. ( % ) ( ob ) Stores ob as the RowAct menu property. ( ) Execute the program which is next in the runstream if the directory changes. Used by the VAR menu to set rst menurow when diretory changes, or by the CST menu to rebuild it.
260AD
LastMenuRow@
25845
MenuDef@
25908
LastMenuDef!
2590D
LastMenuDef@
25EFB
SaveLastMenu
37. The Menu Description ( ob ) Store a program which displays a menu label. Prg has the stack diagram ( #col ob ) For example, the LIBS command uses the following program to make all menu label look like directories: :: DUPNULL$? ITE MakeStdLabel MakeDirLabel Grob>Menu ; During execution, INDEX@ will contain the menu key number. ( ob ob ) Set the action for left-shifted menu keys. The program receives the action part of the menu item as an argument, i.e. {ob-NS ob-LS ob-RS}. ( ob ob ) Set the action for right-shifted menu keys. The program receives the action part of the menu item as an argument, i.e. {ob-NS ob-LS ob-RS}. ( og ob ) Set the action for unshifted menu keys. The program receives the action part of the menu item as an argument, i.e. ob-NS or {ob-NS ob-LS ob-RS}. ( ob ) Recall the action for unshifted menu keys. ( ob ) Sets ob as MenuKeysNS, DoBadKey to LS & RS. ( {ob-NS ob-LS ob-RS} ? ) The content of MenuKeyLS for standard menus. ( ob-NS ? ) ( {ob-NS ob-LS ob-RS} ? ) The content of MenuKeyNS for standard menus.
2589F
MenuKeyLS!
258B3
MenuKeyRS!
2588B
MenuKeyNS!
291 Description ( ) A placeholder for an empty menu key when dening menu lists. ( ob ) Store a program which is called with the review key (RS DOWN). The program has the stack diagram ( ) ( ob ) Store ob as exit action. ( ) Sets NOP as ExitAction. Mostly used to avoid that the menu is saved as the previous menu when a new Menu gets installed.
258C7
ReviewKey!
258EF 25EEF
(ExitAction!) NoExitAction
37.3.2
Addr. 275C6
Building Menus
Name TakeOver Description ( ) Override the default menu key executer. If this is the rst entry in a program, the program can be used in edit mode. When the rst in a program in the label slot of a menu key, the program is evaluated to get the label object (most likely a grob). ( ) :: TakeOver ; ( ob ) Quotes next object, and also provides TakeOver. The disassembly is :: TakeOver 'R ; Normally this is used like this: :: MenuMaker menu InitMenu ; ( menu ) menu is {} or :: settings {} ; Settings override the default settings installed by InitMenu. ( menu ) :: SetDA12NoCh InitMenu ;
275EE 27620
Modifier MenuMaker
25EE0
InitMenu
25EC6
DoMenuKey
37. The Menu Description ( %mnu.pg ) ( %0 ) ( menu #n ) #n is the index of the rst menu key on the page, use 1 for the rst page, 7 for the second etc. StartMenu does ExitAction (Previous menu!), sets the default menu properties and page. Then it evaluates menu, stores result to MenuKeys and executes SetThisRow. ( ) Builds a new TOUCHTAB, SetBadMenu. ( MenuKey1 .. MenuKeyN #n ) Builds new TOUCHTAB from menukeys.
25EFE 25EE8
SetThisRow LoadTouchTbl
37.3.3
Addr. 2EF66
Menu Display
Name SysMenuCheck Description ( ) Checks menu validity. If DA3NoCh? then nothing. If Track? then ?DoTrackAct@. If Rebuild? then SetThisRow. ( ) Redisplay the menu now if no key is waiting in the buffer. Even better is this: :: DA3OK?NOTIT ?DispMenu ; ( ) Displays the menu immediately. ( ) :: DispMenu.1 SetDAsValid ;
2DFCC
?DispMenu
2DFF4 2DFE0
DispMenu.1 DispMenu
37.3. Reference
293
37.3.4
Addr. 2E0D5 2E0F3 2E11B 2E107 25886
2E2AA 08E007
MakeLabel WRITEMENU
37.3.5
Addr. 25EA6 25EFD 2589A 275FD 2F15B 25F2B 3EA01 2C2C0 25EFF
General Entries
Name CheckMenuRow SetSomeRow DoMenuKeyNS MenuKey CLEARMENU CHECKMENU (CST) nCustomMenu SolvMenuInit Description ( # # #' ) ( #n ) with Mod(n,FFFFFh)= 0. ( #n ) ( ) Takes NOB from Runstream. ( ) ( ) ( ob ) Evaluates ID CST. ( ) Installs the CST menu. ( ) Sets MenuKeyNS/LS/RS, ReviewKey and LabelDef properties needed by the Solver menu.
37. The Menu Description ( ) Sets the rst row of the current menu.
38.1
Term EditLine
Terminology
The terms below will appear often in this chapter. Meaning The string which is currently being edited. Also called Buffer and Command line. In the stack diagrams, we will use $buf for it. The position of the cursor in the Editline. Represented by a bint. In stack diagrams, is written as #cpos. The current line in the editor, i.e. the substring after the NEWLINE before the cursor up to the next NEWLINE character. When the text being edited is too long and/or wide, the screen of the HP49G shows only a part of the text: the window. When the cursor is moved, the window must be re-positioned to show the new position. A region in the buffer can be selected when the begin marker and the end marker are active. The selected substring is called $sel in the stack diagrams.
Editor window
Selection
295
38. Programming the HP49 Editor Meaning The beginning of a word, a position in a string where the char before is SPACE or NEWLINE, and the char after is a non-white character. Several commands deal with wordstart positions, called #ws in the stack diagrams below. The HP49G can show text in different fonts and styles. In order to switch between fonts and styles, special markers are inserted into the text to indicates a change in font or style. These 3-character sequences are not visible, but they count in string length and in cursor position. Some Editor commands are aware of these strings and do complicated computations to cut and paste text with attributes. This of course makes these commands slower than they could be. If you do not use fonts and styles, you need not to worry about all this.
Invisible chars
38.2
Examples
For information on the specic entries used in the examples below, consult the Reference section below. 1. Select the current line and copy it onto the clipboard.
1 :: TakeOver CMD_END_LINE RCL_CMD_POS CMD_STO_FIN CMD_DEB_LINE RCL_CMD_POS CMD_STO_DEBUT CMD_COPY ; (goto end of line) (recall position) (store as marker) (beginning of line) (recall position) (store as marker) (copy to clipboard)
10
This can be done shorter by using the builtin command SELECT.LINE command. The following is equivalent to the above.
1 :: TakeOver
38.2. Examples
SELECT.LINE CMD_COPY 5 ;
297
2. Insert a :: ; template on a single line and position the cursor between :: and ;.
1 :: TakeOver ":: ;" CMD_PLUS CMD_BAK CMD_BAK ;
3. Insert a multi-line :: ; template and position the cursor with extra indentation on the second line.
1 :: TakeOver "::\0A\0A;" CMD_PLUS CMD_UP SPACE$ CMD_PLUS ;
10
298
5. The RPLCPL command of the Emacs library (see section A.6) does completion of names in the Editor. It needs to nd the word fragment before the cursor. Here is how this can be done:
1 :: RCL_CMD RCL_CMD_POS DUP GET.W<#1+SWAP SUB$ ; (recall EditLine) (current position) (arg needed by GET.W<-) (position of word start) (prepare args for SUB$) (get the substring)
6. Change the indentation of the current line to #N spaces. #N is a bint expected on stack level 1. The command leaves empty lines and lines starting with a * alone.
1 :: Blank$ CMD_DEB_LINE RCL_CMD RCL_CMD_POS #1+ SUB$1 BINT42 OVER#=case :: 2DROP CMD_DOWN ; BINT32 >#?SKIP :: CMD_END_LINE RCL_CMD_POS CMD_DEB_LINE DO>Skip RCL_CMD_POS #<ITE DROPRDROP DoFarBS ; CMD_PLUS CMD_DEB_LINE CMD_DOWN ; (make the indentation str.) (goto beginning of line)
10
(look at first char in line) (ASCII code of *) (line starts with *?) (cleanup, ) ( next line & exit) (line starts with nonwhite ch) (line starts with whitespace:) (remember end of line position) (back to beginning of line) (jump to next word)
15
20
(if already in next line: Exit) (kill whitespc before 1st word) (insert spaces) (back to beginning of line) (next line)
25
299
38.3
In order to use the new commands in the editor, you must bind them to a key or put them into a menu. Note that each command you write needs a TakeOver as the rst entry in the secondary or the command will not execute in the editor. Here is a simple example for an InputLine environment which denes an initial menu with two commands to select the current line and to clear the EditLine. For more information on InputLine, see Chapter 31.
1 :: "Edit this!" "" zero zerozerozero { { "SLINE" :: TakeOver SELECT.LINE ; } { "CLEAR" :: TakeOver DEL_CMD ; } } ONE TRUE ZERO InputLine ;
10
15
20
25
300
38.4
38.4.1
Addr. 257A2 2EEED 2F196
Reference
Status
Name EditLExists? NoEditLine? RCL_CMD Description ( flag ) Does an EditLine exist? ( flag ) Does no EditLine exist? ( $ ) Returns a copy of the current command line to the stack. Same as EDITLINE$. ( $ ) Returns a copy of the current command line to the stack. Same as RCL_CMD. ( $ ) Similar to RCL_CMD, but if there is not enough memory to copy the EditLine to the stack, it will move the current EditLine into TEMPOB. Of course, this will delete the current EditLine. ( # ) Recalls the current cursor position. ( # ) Recalls the current cursor position. ( # ) Recalls the current cursor row (line). ( chr ) Returns the character under the cursor. At the end of the le, returns CHR_00. ( flag ) Checks if the cursor is at the end of a line or at the end of the le. Works by checking the current character against newline and CHR_00. ( # ) Column of the left display window edge. ( # ) Cursor column relative to left edge of display window.
2EEEB
EDITLINE$
2F197
RCL_CMD2
2EEEA
CURSOR_END?
264CC 26030
FIRSTC@ CURSOR_OFF
301 Description ( #l #c # ) Computes a position in the current EditLine from line and column number. The result can be used by STO_CURS_POS to move the cursor to that location. If #line is larger than the number of lines in the EditLine, computes the position of the last line. ( #l #c # ) Similar to CAL_CURS_POS, but will ignore invisible characters. The result can be used by STO_CURS_POS_VIS to move the cursor to that location. ( $ ) Recalls a string with current editor settings. Can be used together with STO_CMD_MODE to save and restore the state of the EditLine, when temporarily leaving the editor with HALT or when calling a program which must temporarily change settings. ( $ ) Stores a mode string similar to the one obtained by RCL_CMD_MODE.
2EF90
CAL_CURS_POS_VIS
2F199
RCL_CMD_MODE
2F198
STO_CMD_MODE
38.4.2
Addr. 2EF74
Inserting Text
Name CMD_PLUS Description ( $ ) Inserts string at current cursor position in EditLine. ( $ ) Replaces entire current EditLine with new string. When there is not enough memory to copy the string on stack level 1, moves the string out of TEMPOB. You must be careful that the string is not referenced in any way. The cursor is moved to the end of the new string.
2F194
CMD_PLUS2
38. Programming the HP49 Editor Description ( $ ) Same as CMD_PLUS2, but the cursor position is not changed. Useful when restoring a command line context after HALT. ( $ ) Inserts string at current cursor position in EditLine. ( $/chr ) Same as CMD_PLUS. ( $ ) Inserts string at current cursor position in EditLine. ( ) Takes a character or string from the runstream and inserts it. ( ) Takes a character or a string from the runstream, inserts it and moves the cursor back by one character. ( ) Turns insert mode on. In insert mode, new characters do not overwrite old ones. ( ) Toggles the insert/overwrite ag. ( flag ) Returns TRUE if insert mode is active.
2EF97
InsertEcho
2EEE4 2F11C
Echo$Key Echo$NoChr00
25EC1
DoDelim
25EC2
DoDelims
25795
INSERT_MODE
2577F 25790
(TogInsert) INSERT?
38.4.3
Addr. 2EF82
Deleting Text
Name CMD_DEL Description ( ) Deletes next char in Editor. Same as LS+DEL. If you hold down BS while this entry is executed, the HP49G will think you have pressed the key and want to repeat it.
303 Description ( ) Backspace in Editor. Deletes char before cursor. Same as BS key. If you hold down BS while this entry is executed, the HP49G will think you have pressed the key and want to repeat it. ( ) Clears the entire EditLine. ( ) :: DEL_CMD ; ( ) Deletes left to beginning of word. Same as the DEL button in the editor TOOL menu. ( ) Deletes right to beginning of next word, Same as the DEL button in the editor TOOL menu. ( ) Deletes all chars in the current line. If the line is already empty, delete the NEWLINE. Same as the DEL.L button in the editor TOOL menu. ( ) Deletes to beginning of line. Same as the RS+DEL in the editor TOOL menu. ( ) Deletes to end of line. Same as RS+Del in the editor TOOL menu.
2F2F1
DO>Del
2F2F9
DODEL.L
2F2DD
DoFarBS
2F2DE
DoFarDel
304
38.4.4
Addr. 2EF8B
2EF8C
STO_CURS_POS2
2EF8D
STO_CURS_POS3
2EF8E
STO_CURS_POS4
2EF8F
STO_CURS_POS_VIS
2F378
SetCursor
305 Description ( ) Moves cursor to next char, like Right Arrow. ( ) Moves cursor to the left. Same as as Left Arrow. ( ) Moves cursor to the next line. Same as Down Arrow. ( ) Moves cursor to the previous line, like Up Arrow. ( ) Moves cursor to the beginning of line. Same as RS+LEFT. ( ) Moves cursor to the end of line. Same as RS+RIGHT. ( ) Moves cursor one page down, like LS+DOWN. ( ) Moves cursor one page left, like LS+LEFT. ( ) Moves cursor one page right, like LS+RIGHT. ( ) Moves cursor one page up, like LS+UP. ( ) Skips left to beginning of word. Same as the SKIP button in the editor TOOL menu. ( ) Skips right to the beginning of the next word. Same as the SKIP button in the editor TOOL menu. ( ) Goes to begin of selection (if active) or to beginning of EditLine. Same as BEG button in the editor TOOL menu.
2EF80
CMD_DOWN
2EF7F
CMD_UP
2EF7D
CMD_DEB_LINE
2EF7E
CMD_END_LINE
2F2EF
DO>Skip
2F2E4
DO>BEG
38. Programming the HP49 Editor Description ( ) Goes to end of selection. Same as the END button in the editor TOOL menu. When there is no selection, does not move. ( ) Brings up the CHOOSE-box with labels in the EditLine. Same as the LABEL button in the editor TOOL/GOTO menu.
2F2E6
GOTOLABEL
38.4.5
Addr. 2EF83
2EF84
CMD_STO_FIN
2EF85
RCL_CMD_DEB
2EF86
RCL_CMD_FIN
2F2DC
ClearSelection
2EF93
VERIF_SELECTION
2EF8A
CMD_COPY
307 Description ( ) Cuts string. Really is "delete", does not copy to kill buffer. So a "normal" CUT would be :: CMD_COPY CMD_CUT ; ( $ ) Puts the selection as a string on the stack. This command is font/style aware. It is recommended not to use it because it may get the wrong text style if the cursor is not repositioned to the beginning of the selection rst. If you don't use fonts, :: RCL_CMD RCL_CMD_DEB RCL_CMD_FIN SUB$ ; does something similar. ( $ ) Pastes from stack with treatment of fonts and styles. Inserts the string on stack level at the cursor position. It can insert normal text right in the middle of bold test etc. If you don't use styles or different fonts, CMD_PLUS is probably faster. ( ) Selects current line, position cursor at beginning of line. Selection does not include the NEWLINE char at the end of the line. ( ) Selects current line, position cursor at end of line. Selection does not include the NEWLINE char at the end of the line. ( $ ) Stores string to Clipboard. ( $ ) Recalls Clipboard contents to stack. ( ) Clears the Clipboard. ( flag ) Is there anything on the Clipboard?
2F2FA
CMD_COPY.SBR
2EF94
PASTE.EXT
2F2E1
SELECT.LINE
2F2E2
SELECT.LINEEND
308
38.4.6
Addr. 2F2F3
2F2F4
GET.W<-
2F2F2
FindStrInCmd
2F2E8
DOFIND
2F2EA
DONEXT
2F2E9
DOREPL
2F2EB
DOREPLACE
309 Description ( ) Replaces current match and move to next match. Same as the R/N button in the editor TOOL/SEARCH menu. ( ) Replaces all matches in buffer. Same as the ALL button in the editor TOOL/SEARCH menu. ( ) Like REPLACEALL, but does not update the screen. Much faster this way.
2F2ED
REPLACEALL
2F2FC
REPLACEALLNOSCREEN
38.4.7
Addr. 2F2DF
Evaluation
Name EditSelect Description ( ) Edits the current selection. Opens the editor with the selection only. You can then edit the selection. After pressing ENTER the edited text is inserted back into the previous editing environment. ( ) Evaluates the current line and replace it with the result of the evaluation. Similar to EVAL.SELECTION, but without the need to select the line rst. ( ) Evaluates the current selection and replace it with the result of the evaluation. Same as the EXEC button in the editor TOOL menu.
2F2E3
EVAL.LINE
2F2FB
EVAL.SELECTION
38. Programming the HP49 Editor Description ( cmd algflag obsel ) Runs a command on the selection in the Editline. Takes two arguments: the command to run and a ag which says how to compile the selection before the command is applied. If the ag is TRUE, and ALG mode in on, the ALG compiler is used and the DOTAG :: xEVAL prologue of the result is removed. Use this if the result is to be edited by another editor. The selection is left on stack level 1 as an object. ( ob ) Saves current user interface, evaluate ob and restore the user interface. Can be used to run applications from inside another application.
0B954
(RunInNewContext)
38.4.8
Addr. 2EEE9
311 Description ( ob ob' ) Edits the object in level 1 ( ob ob' ) Used instead of ViewLevel1 if in Algebraic mode. Does not execute STARTED and EXITED. ( ob ob' ) Evaluates the next object in the runstream, which usually in an editing command like ObEdit. When the evaluation returns FALSE, the original object which was saved in a temporary variable is restored to the stack. When the evaluation returns TRUE, the TRUE is removed from the stack. ( ob ob' ) ( ob ob' T ) ( ob F ) Edits object. When the user cancels, only FALSE is returned. Otherwise the changed object along with TRUE is returned. ( symb symb' T ) ( symb F ) Opens the equation editor to edit the expression. If exited by ENTER, returns new expression and TRUE. If exited by CANCEL, returns just FALSE.
2B2F2
(CallEditCmd:)
2EEE5 2F1AE
EditLevel1 ObEdit
011004
EQW3Edit
38.4.9
Addr. 25ED2 2EF73
Miscellaneous
Name EditMenu ?Space/Go> Description ( {} ) Returns the Editor menu. ( ) Inserts a SPACE character unless there is already one before the cursor position. Use this if you want to make sure the next stuff echoed is separated by at least one space from the word preceding it.
38. Programming the HP49 Editor Description ( $ $' ) Adds a leading space to the string on level1 if it does not start with a space and if the cursor in the editor is after a non-white character. So :: "DUP" AddLeadingSpace AddTrailingSpace CMD_PLUS ; inserts DUP and makes sure it will be surrounded by spaces. ( $ $' ) Adds a trailing space to the string on level1 unless the string already ends with a space. ( #pix ) Returns the number pixel rows occupied by visible part of the EditLine. ( ) Displays the info screen about the Editline. Same as the INFO button in the editor TOOL menu. ( # ) Returns the ID (as a system binary) of the font used for the character under the cursor. ( ) Tells the next CMD_PLUS call not to update the display. For speed, if you want to do more insertion before the user needs to see it. ( ) Redisplays the command line. ( ) Redisplays the command line if necessary.
2EF75
AddTrailingSpace
2EF9A
CommandLineHeight
2F2DB
DOTEXTINFO
2F2F6
GET_CUR_FONT.EXT
2EF96
NO_AFFCMD
2F19E 2F19F
DispCommandLine ?DispCommandLine
313 Description ( # ) Changes the style at point. If the selection is active, changes the style of the text in the selection. Otherwise changes the style of text typed subsequently. Takes a BINT from the stack which is the number of the style. In think the ITALI button in the editor TOOL/STYLE menu could be implemented with the following program: :: ERRSET PUT_STYLE ERRTRAP ERRJMP ; PUT_STYLE does not ABND its temporary environment, so you need the ERRTRAP construction to work around this bug. ( # ) Changes the font at point. Works similar to the PUT_STYLE command. ( ) Pops up the CHOOSE box to select a font. Same as the FONT button in the editor TOOL/STYLE menu. ( ) at cursor Views the grob currently edited in the Editline near the cursor. If the EditLine contains GROB 10 10 FFFFFF... move the cursor to the "1" of the rst "10". Then this entry point will display the grob.
2F2F5
PUT_FONTE
2F2E7
SELECT.FONT
2F2E0
ViewEditGrob
38. Programming the HP49 Editor Description ( ob flag ) Checks if the cursor is outside the current line. In the HP49G editor, you can move the cursor further to the right than the line length, without actually making the line longer. The line gets extended only if you actually insert text or use CMD_DEL to catch to following line to the position. This entry returns TRUE if it is not on or before the newline. Note that it takes an arbitrary object from the stack rst - so put something there before calling it. ( {} ) Returns the DEL menu key. ( {} ) Returns the DEL menu key. ( {} ) Returns the SKIP menu key. ( {} ) Returns the SKIP menu key. ( ) :: InitEdLine InitEdModes ; ( ) :: DEL_CMD ; ( ) ( $ ) Calls CMD_STO if history is on. ( $ ) Adds string to the list of the last 4 commands, accessible with the CMD key.
Chapter 39 Plotting
The commands in this chapter deal with aspects related to plotting. Entries here deal primarily with the PPAR variable, that contains the parameters used in plotting. This variable is a list with the following parameters: { (xmin , ymin ) (xmax , ymax ) indep res axes type depend} This is the meaning of each of the parameters: Parameter (xmin , ymin ) (xmax , ymax ) indep res axes Description A complex number representing the coordinates of the lower left viewing range. A complex number representing the coordinates of the upper right viewing range. The independent variable. Resolution. A number that represents the interval between the plotted points. A complex number that represents the coordinates of the intersection of the axes. It can also be a list representing this coordinate and many other details, which are not described in this book. The name of the (user) command that species the plot type. Dependent variable. Default value (6.5, 3.1) (6.5, 3.2) X 0 (0 , 0 )
type depend
FUNCTION Y
315
316
39. Plotting
39.1
Addr. 2F162
Reference
Name CHECKPICT Description ( ) Checks size of GBUFF. If it is smaller than 131x64 sets GBUFF back to its default size (131x64). ( xPICT ) Checks for user word xPICT on level 1. Errors (SETTYPEERR) if there is another object. ( xPICT grob ) Does CKPICT, then recalls GBUFF and does TOTEMPOB. ( {} ) Creates the default PPAR variable in the current directory and returns its value. ( {} ) Recalls contents of PPAR in current path to stack. Creates PPAR in current directory if non-existent. Errors "Invalid PPAR" if existing PPAR is invalid. ( # ob ) Extracts the #th item from PPAR. No error checking! ( % ) Recalls XMIN from the PPAR list if existent. If not, the default PPAR is created in the current directory. ( % ) Sets a new value for XMIN. PPAR is created if necessary. ( % ) Recalls XMAX from the PPAR list if existent. If not, the default PPAR is created in the current directory. ( % ) Sets a new value for XMAX. PPAR is created if necessary.
2EF06
CKPICT
2F258
PICTRCL
2F355
MAKEPVARS
2F163
CHECKPVARS
2F33D
GETPARAM
2F0FF
GETXMIN
2F366
PUTXMIN
2F0FE
GETXMAX
2F365
PUTXMAX
317 Description ( % ) Recalls YMIN from the PPAR list if existent. If not, the default PPAR is created in the current directory. ( % ) Sets a new value for YMIN. PPAR is created if necessary. ( % ) Recalls YMAX from the PPAR list if existent. If not, the default PPAR is created in the current directory. ( % ) Sets a new value for YMAX. PPAR is created if necessary. ( C% C% ) Returns PMIN and PMAX. ( ID ) Internal xINDEP if the arg is an ID. ( {} ) Internal xINDEP if the arg is a list. ( id ) Recalls the independent variable. If a list, extract rst element. :: GETINDEP DUPTYPELIST? ?CARCOMP ; ( id ) ( {} ) Recalls the independent variable eld in PPAR. ( name ) Recalls the plot type using GETPARAM. ( name ) Sets a new plot type. PPAR is created if necessary. ( % ) Recalls the plot resolution using GETPARAM. ( % ) Set new plot resolution. PPAR is created if necessary. ( % %' ) Recalls the plot scale parameters.
2F368
PUTYMIN
2F10E
GETYMAX
2F367
PUTYMAX
2F106
GETINDEP
2EEF5 2EEF6
GETPTYPE PUTPTYPE
2F10D 2EEF4
GETRES PUTRES
2F33E
GETSCALE
39. Plotting Description ( % %' ) Set new plot scale. PPAR is created if necessary. ( ) Internal AUTO. ( ) Sets the scroll mode of PICTURE and is essentially the same as { } PVIEW. ( ob ) Recall the current equation, stored in the 'EQ' variable. ( #n ob T ) ( #n NULL$ F ) Get the #nth equation, if EQ is a list of equations. ( ob ) Recalls the contents of the EQ variable, errors if it does not exist. ( ob ) Stores ob into the variable EQ. ( xPICT ) If object in level one is xPICT, erases the graphic display. Otherwise, errors. ( ) Moves to center of graphics display ( { hxs hxs' } C% ) Converts a list of two hex strings into a complex number. Used for plotting coordinates. Inverse operation is DOC>PX. ( C% { hxs hxs' } ) Converts a complex coordinate point into list of two HXS numbers. Inverse operation is DOPX>C.
25ECF
EQUATION
2F339
GetEqN
25EB5
DORCLE
25EB6 2F297
DOSTOE XEQPURGEPICT
2F105 2EF01
GDISPCENTER DOPX>C
2EF02
DOC>PX
40.1
The initial version of the reference listing of CAS commands for this book was derived from the source les1 of ALG48 and ERABLE. The problem with this approach is that in the source, the different entries are not fully ordered according to functionality. Rather, each source le handles a certain area of CAS commands, and many utility routines are included inside the same le. For this reason there are several different locations where for example metaobject handling routines may be found. There are even similar such routines (which seem to do the same thing) in different les. We have made a signicant effort to reorder the entries by functionality, but we realize that we have only partially succeeded. A deeper knowledge of the CAS and its internals is needed to complete this work. A full documentation of the CAS should also contain extensive material about the internal representation of CAS objects, and many examples how to use these commands. Let us hope that Bernard Parisse will one day nd time to fully document the HP49G CAS internals. For the time being we include a slightly edited version of a document he provided to us, which introduces some important aspects of the CAS. The reminder of this part will then just be a reference list of entries.
1
actually, from a condensed version of the routine headers provided to us by Bernard Parisse
321
322
40.2
Symbolic Objects
The CAS manipulates symbolic scalars and vectors or matrices of these objects. Symbolic scalars have 3 representations, which we show in the following table using 2X as an example expression. user representation a SYMBOL object which is the composite object. For the example expression it looks like this: SYMBOL Z2 ID X x* ; the SYMBOL object exploded onto the stack. For '2*X', these are the 4 objects Z2 ID X x* #4 on stack levels 4 to 1. polynomial coefcients (in the example: { 2 0 }) with respect to the list of variables ({ X }).
meta representation
list representation
Conversion from user to meta representation is done by SYMBINCOMP (a generalized INNERCOMP to handle non symbolic objects like integers). Meta representation is used to handle operations when rational normal form is not relevant. It is more efcient than symbolic representation because you do not have to explode and rebuild the symbolic objects, everything is done on the stack. Stack operations on metas are described in Chapter 12. Unary and binary operators are often the operator name prexed by addt (e.g. addtSIN). An example for a complex routine working on meta objects is CASCOMPEVAL. It does a COMPEVAL-like loop but with metas on the stack instead of symbolics. The list representation is used when the rational normal form is important. This is the case for integration of rational fractions, rational simplications, Laplace transformations, series expansions and similar operations. The rst step for the conversion is to nd the list of variables with respect to which the expression is rational. For example, sin(x) + y cos(x) + y (40.1)
is rational with respect to { sin(x) cos(x) y }. Given a symbolic or a list/array of symbolic objects, the user word LVAR, or the System RPL command LVARext, returns this list of variables. The conversion is then done as a quotient of 2 multivariate polynomials with respect to this list of variables, with this ordering. Gaussian integers are represented as secondaries with two elements:
323
:: imaginary_part real_part ;. The imaginary and real parts must be integers. Square roots are represented as irrquad: :: x a b c x ; represents a+b*sqrt(c). Polynomials are dened as a list of coefcients that are polynomials themselves, constants (integer or Gaussian integer) or irrquads. Rational fractions built over these polynomials are represented as SYMBOL num deno x/ ; where num and deno are polynomials that are prime together (in exact mode). The main conversion routine to the list format is VXXLext. The main back conversion routine is R2SYM. There are several specialized routines to convert a list or meta of symbolic objects, or to convert a symbolic object into meta-representation, or from list format to the meta-representation of a symbolic object. These specialized routines are more efcient but more difcult to use. Rational operators on list objects are implemented (QAdd, QSub, QDiv, QMul, QNeg, RPext), as well as Euclidean divisions with specializations e.g. for integers or Gaussian integers.
40.3
A Few Examples
In the following examples, the comments in each line represent the objects on the stack after the current command. Rational simplication of a symbolic object might be coded as
1 :: FPTR2 ^LVARext FPTR2 ^VXXLext FPTR2 ^R2SYM ; (symb) (symb lvar) (lvar n/d) (symb)
324
FPTR2 ^QMul FPTR2 ^QAdd LOOP
10
41.1
Addr. 157006
Reference
Name SYMBINCOMP Description ( symb ob1 .. obN #n ) ( ob ob #1 ) ( {} {} #1 ) Explodes symbolic object into meta. Other objects are converted into one-object metas by pushing #1 into the stack. ( ob1 ob2 meta1 meta2 ) Does SYMBINCOMP for 2 objects. ( ob Lvar Q ) Converts object to internal form. The object can be a symbolic, a symbolic vector or a symbolic matrix. If the conversion was not successfull, vxxxlag is cleared. ( lvar ob ob ) Back conversion of a scalar object. ( Meta Meta ) Conversion of all elements of a meta object with respect to the variables in LAM1. ( n/d Z1/Z2 ) Conversion of a fraction which does not depend on any variables.
12A006 4D7006
2SYMBINCOMP VXXLext
400006 4D8006
R2SYM METALISTVXXL
4D9006
VXXLFext
325
41. Type Checking and Conversion Description ( n Z ) Conversion of an object which does not depend on any variables. ( ob Q ) Conversion of object with respect to Lvar in LAM1. ( Meta Q ) Converts symbolic meta to internal form (LAM1=Lvar). Set nocareag to avoid square root problems. ( Meta Q ) Converts symbolic meta to internal form (LAM1=Lvar). ( ob flag ) Is ob an irrquad? ( ob ob flag ) DUP, then TYPEIRRQ?. ( ob ob ) Checks that ob is a valid internal matrix element. Look for CK[]NCK for user matrix element. ( ob ob ) Errors if list contains secondaries or empty lists. ( ob ob ob ob ) Does CKFPOLYext on two objects. ( ob ob ) Suppresses SYMB if not needed.
4DB006
VXXL0
4DC006
VXXL2NR
4DD006
VXXL2
18F006
CKFPOLYext
190006 19E006
CK2FPOLY CLEANIDLAM
Chapter 42 Integers
This chapter lists the functions that deal with Arbitrary Precision Integers, a new number type provided by the HP49 CAS. For a description of that type, see Chapter 5. You will notice that there are no entries for basic arithmetic operations on integers. This is because there are no specic such entries for integers. Instead, use the polynomial entries like QAdd, QMul, etc. listed in Chapter 46.
42.1
42.1.1
Addr. 2E0006 2DF006 392006 3B3006 3B4006
Reference
Built-in Integers
Name DROPZ0 DROPZ1 2DROPZ0 NDROPZ0 NDROPZ1 Description ( ob z0 ) ( ob z1 ) ( 2 1 z0 ) ( obn...ob1 #n z0 ) Replaces meta with Z0. ( obn...ob1 #n z1 ) Replaces meta with Z1.
42.1.2
Addr. 0EE006 0F5006
Conversion Functions
Name #>Z R>Z Description ( # Z ) Converts bint to zint. ( % z ) Converts real to zint. Do not call this entry if the number if not an integer. 327
42. Integers Description ( % %%/Z ) Converts real to zint, or to long real if the number is not an integer. mode if number is not an integer. ( HXS Z / Error ) Checks if HXS is a proper zint number and trims it. ( $ z ) Converts decimal in a string into a zint. ( $ z T ) ( $ $ F ) If possible, converts string into a zint and returns TRUE. If not, keeps the original string and returns FALSE. ( $/#/hxs Z ) Checks for an integer. Converts strings, bints or hxs's to zints. Errors for other object types. ( ob ob' Z Z' ) Like CK1Z, but for two objects. ( ob ob' ob'' Z Z' Z'' ) Like CK1Z, but for three objects. ( symb zint ) ( symb :: zint zint' ; ) Check that a sym is a zint or Gauss integer, convert it. ( symb symb' zint zint' ) ( symb symb' :: zint1 zint2 ; :: zint3 zint4 ; ) Check that 2 sym are zint or Gauss integer, convert them. ( zint|c symb ) ( zint|c zint|c symb symb ) ( Z Z' ) Converts decimal Z to hex Z. ( Z '$Z' ) Converts Z to string number. The number is embedded in a symbolic to enable using it in algebraics.
0ED006
H>Z
0F2006 0F3006
S>Z S>Z?
184006
CK1Z
203006
CK&CONV2INT
42.1. Reference
329
42.1.3
Addr. 101006
102006
ZAbs
50B006 0E0006
ZABS ZSQRT
106006
ZNMin
10D006 10E006
ZBits ZBit?
2B7006 2B8006
ZGCDext ZGcd
42. Integers Description ( a b d u v ) Bezout for integers. d=au+bv=gcd(a,b). ( a b d u v ) ( # Z ) Calculates the factorial of an integer. Works ne for all numbers #0 - #FFFFF, although at some point you will get an out of memory error. ( z z! ) Factorial for long integers. ( z/% a+bi ) Internal PA2B2.
576006 215006
factzint PA2B2
42.1.4
Addr. 0C9006 0CA006 0CB006
0CD006
SFactor
331 Description ( S S1 S2 ) Factors short integer into 2 parts using Pollard Rho algorithm. Trial division and primality tests should be done prior to calling this subroutine, otherwise an eternal loop is risked. The random number generator is modeled after the user level RAND command, although the starting value is different. ( N Lf ) Factors long integer. Brent-Pollard, with the assumption that trial division has been done already. When a small factor is found SFactor is called to get full short factorization. Since the factorization can potentially take a very long time, an execution time test is used to abort factoring very long integers (limit is 60s for each composite). The factors are sorted at exit. ( Za Z1 Z2 Zn #k Z ) Modular * + mod for Brent-Pollard factorization. Output is Z1*Z2+Za mod Zn repeated k times Note that k=0 and k=1 give the same result. Also Z1=Z2 makes no sense for k=0. All arguments are assumed to be positive. Za is assumed to be < 16. In some instances k can be a very high number, thus it might make sense to use Montgomery multiplication. ( Z flag ) Primality test for a positive integer. According to Pinch commercial software packages use only about 5-10 bases by default, maximum around 25. The latest versions usually implement a deterministic. ( Z flag ) Probabilistic primality test for a positive integer.
0CF006
BFactor
0D0006
BrentPow
0D1006
ZPrime?
0D2006
ZIsPrime?
42. Integers Description ( S flag ) Tests if positive short Z is prime. M-R test fails for integers 3, so we just test them separately at the start. For convenience lets dene 0 and 1 to be primes also. ( S flag ) Test if positive long Z is prime. ( Z #base Z flag ) Performs Miller-Rabin test for long positive integer. Returns TRUE if base witnesses composite. Else returns FALSE. ( Z Z' #n ) Remove factors of 2 from integer. #n is the power of two extracted from the number. The sign is also handled correctly, even though it is never required in ALG48 (absolute Z). ( Z flag ) Trial division primality test for a positive integer. works for Z 3 (return false for Z=2). ( Z Mf Z' ) Trial division of a positive integer. If Z' is one then full factorization was achieved. The long trial division is not too slow, since division by short integer is quite fast. The quotient is also checked so that a nal factor less than 20002 will also be automatically detected. ( Z Z' ) Returns next prime ( Z' > Z ). ( Z Z' ) Returns previous prime ( Z' < Z ).
0D4006 0D5006
BIsPrime? BRabin
0D6006
ZTrialDiv2
0D7006
ZTrialPrime?
0D8006
ZTrialDiv
0C7006 0C8006
Prime+ Prime-
42.1. Reference
333
42.1.5
Addr. 114007 115007 116007 187006
Gaussian Integers
Name
TYPEGAUSSINT? DTYPEGAUSSINT? DUPTYPEGAUSSINT?
CK1Cext
15D006
CXRIext
2B5006 4D5006
CGCDext CSQFFext
4D4006
SECOSQFFext
4D6006
SUMSQRext
518006
CNORMext
Description ( ob flag ) Checks if ob is Gaussian integer. ( ob ob flag ) Checks if ob is Gaussian integer. ( ob ob flag ) Checks if ob is Gaussian integer. ( ob flag ) Checks if object is integer or Gaussian integer. ( C Zre Zim ) Returns real and imaginary part of Gaussian integer. ( C2 C1 C ) GCD for Gauss integers. ( C { factor1 mult1 ... factn multn } ) Factorization of Gauss integers. This is not the complete factorization of C over Gauss integers since the GCD of the real part and imaginary part of c is factored only over R. ( :: x<< a b c x>> { fact1 mult1 ... factn multn } ) Factorization of irrquads and Gauss integers. ( Z Z C ) Returns a Gauss integer C so that |C|2=Z. Z must be 2 or so that Z=1 mod 4. If Z = 1 mod 4, "Z is not 1 mod 4" error. Z should be prime to ensure the existence of a solution. ( C |C|2 ) Square modulus of a Gauss integer.
334
42. Integers
42.1.6
Addr. 265C1 265C6 265BC 265D0 265B7 265CB 0F8006
Integer Tests
Name Z= Z<> Z< Z<= Z> Z>= QIsZero? Description ( Z Z' flag ) ( Z Z' flag ) ( Z Z' flag ) ( Z Z' flag ) ( Z Z' flag ) ( Z Z' flag ) ( Q flag ) Tests if Q is zero. Assumes list contains only lists or hexes!. ( Q Q flag ) Duplicates Q and tests if Q is zero. Assumes list contains only lists or hexes!. ( Z flag ) Tests if Z is Z1. ( Z Z flag ) Duplicates Z, and returns TRUE if Z is 1. ( Z Z flag ) Returns TRUE if Z is 2. ( Z flag ) Tests if Z is negative. ( Z Z flag ) Tests if Z is negative. ( Z Z flag ) Tests if Z is even. ( Z1 Z2 flag ) TRUE if |Z1|<|Z2|. ( z/% z flag ) Tests if Obj is an integer. ( z/% z flag ) Tests if Obj is a positive integer smaller than Zsmall. ( Obj Obj flag ) Tests if Obj is a strictly positive integer. ( Meta Meta flag ) Tests if Meta is an integer.
0F7006
DupQIsZero?
19C006 198006
CKINT>0 METAINT?
335 Description ( Meta Meta flag ) Tests if Meta is a positive integer smaller than Zsmall. ( Z Z flag ) Tests if Z is short ( 64 bits).
0CC006
DupTypeS?
Chapter 43 Matrices
The CAS Symbolic Matrices are a new object on the HP49 used to represent matrices. Unlike the old array object present since the HP48, these matrices can have symbolic expressions inside them. It is also possible to have objects of different types inside the array. This kind of matrix is actually a composite object, and you can use the functions of Chapter 11 on them. 1 2 The following disassembly of the matrix should make it clear 3 4 how to create one using MASD, and why they are actually composites:
1 MATRIX MATRIX ZINT ZINT ; MATRIX ZINT ZINT ; ;
1 2
3 4
10
It should also be noted that most (if not all) the functions described below for dealing with symbolic matrices also work with lists of lists. The reason should be obvious: the structure of these matrices and a list of list is the same, only the prolog address changes. Some entries dealing with the old HP48 arrays, described in Chapter 10.1, also work with symbolic matrices.
336
43.1. Reference
337
43.1
43.1.1
Addr. 371006 372006 373006
Reference
Creating and Redimensioning Matrices
Name MATIDN MATCON MAKEARRY Description ( M/z/% M' ) Creates identity matrix. ( M ob [ob] ) Creates constant matrix from matrix. ( {#el} symb [] ) ( {#rows #cols} symb [[]] ) Creates constant matrix/array from ob type. ( {} M' ) Creates symbolic random matrix from dimensions. ( M M' ) Changes all elements of matrix to elements generated randomly. ( ob {} M ) Creates constant matrix from dimension and ob. ( #n #m prg M ) Fills a matrix of specied size using a program. prg must take two arguments and return one argument. On entry MAKE2DMATRIX provide the indexes as Z integers. ( #n #m prg M ) Creates matrix from size and program (with stack checking). prg must take 2 args and return 1 arg. On entry MAKE2DMATRIX provide the indexes as Z integers. ( #n #m prg meta-M ) Create meta-matrix from size and program (with stack checking). prg must take 2 args and return 1 arg On entry make2dmatrix provide the indexes as Z integers. ( M {} M' ) Changes size of a matrix, removing elements and/or adding zeros, as necessary.
345006
DIMRANM
344006
MATRANM
374006
OBJDIMS2MAT
375006
LCPROG2M
376006
MAKE2DMATRIX
377006
make2dmatrix
341006
MATREDIM
43. Matrices Description ( []/[[]] {} [] ) Vector Right ReDiMension: adds 0 to the right. ( meta #l meta-#l ) Meta Right ReDiMension: adds 0 to the right.
343006
VRRDMmeta
43.1.2
Addr. 16A006
Conversion
Name {}TO[] Description ( {} [] ) Converts from list-of-lists representation to matrix. No checks on the element type. ( {} [] ) ( {{}} [[]] ) ( ob ob ) Converts a symbolic list to a matrix. Does not check that matrix is a valid one. Use DTYPFMAT? to do that. ( [] {} ) Converts from matrix to list-of-lists. ( [] { } ) ( [[]] {{}} ) ( ob ob ) Converts a symbolic matrix to a list. ( [] [] ) ( [[]] [[]] ) Converts array to symbolic array if necessary. ( M1 M2 M1 M2 flag ) If one object is a symbolic array, converts both arrays to symbolic form. Returns TRUE for symbolic matrices and FALSE for numeric. ( M ob M ob flag ) If M is a numeric matrix and ob is not oat, converts matrix to symbolic form. Returns TRUE for symbolic and FALSE for numeric. ( []/[[]] {}/{{}} ) Converts normal array to list of lists; errors for symbolic arrays.
17A006
LIST2MATRIX
16B006 179006
[]TO{} MATRIX2LIST
17E006
ARRAY2MATRIX
175006
SAMEMATRIX
176006
SAMEMATSCTYPE
003007
ArryToList
43.1. Reference Addr. 17D006 Name MATEXPLODE Description ( [[ob1..obn]] ob1..obn [[ob1..obn]] )
339
43.1.3
Addr. 16C006 359006 16F006 170006
Tests
Name DUPNULL[]? NULLVECTOR? CKSAMESIZE DTYPENDO? Description ( ob ob flag ) Tests for a null array. ( V flag ) Returns true if vector is null. ( arry1 arry2 arry1 arry2 flag ) Tests if arry1 and 2 have the same size. ( ob ob flag ) Tests if object is a square symbolic matrix. Convert numeric array to symbolic matrix. ( ob ob flag ) Tests if object is a 2D matrix.
173006
2DMATRIX?
43.1.4
Addr. 320006 321006 322006 323006 324006 325006 326006 327006 328006 329006 32A006
340 Addr. 32B006 335006 32C006 32D006 32E006 32F006 330006 332006 333006 334006 34E006 336006 337006 338006 339006 33A006 33C006 33D006 346006 347006 348006 349006 Name VPMULT MATSQUARE MAT MATCROSS MATDOT RNDARRY TRCARRY MAT/SCL MAT/ MATCHS MATINV MATCONJ MATRE MATIM MATTRACE MATTRN mattran mattrn MATDET MATRDET MATFNORM MATRNORM
43. Matrices Description ( V ob V' ) Multiplies vector by a scalar. ( M M*M ) ( M z/% M' ) Integral matrix power. ( [] []' []'' ) Vector product. ( V2 V1 ob ) Scalar product with checking. ( M % M ) Rounds array. ( M % M ) Truncates array. ( M ob M/ob ) Divides matrix by scalar. ( V M M-1*V ) "Divides" Vector by matrix. ( M -M ) ( M M-1 ) ( M M' ) ( M re[M] ) ( M im[M] ) ( M trace ) Matrix trace. ( M M' ) Matrix transposition and conjugation. ( M Meta-M' ) Transposes matrix, returns meta-matrix. ( Meta-M Meta-M' ) Transposes meta-matrix. ( M det ) Determinant, expanding all (not row reduction). ( M det ) Determinant using row reduction. ( M ob ) Frobenius norm. ( M ob ) Row norm.
43.1.5
Addr. 34C006 34B006 34F006
367006
MATRIXRCI
368006
MATRIXRCIJ
354006 34D006
PIVOTFLOAT MATRANK
342
43. Matrices
43.1.6
Addr. 080007 0F4007
0F5007
REDUCEMETASYST
0F6007
REDUCEMETAPSYST
0F7007
SOLVECRAMER
Description ( b a y ) Solves y'=ay+b. ( meta-M d meta-sol T ) ( meta-M F ) Solves linear system in meta representation. Meta-sol has been reduced to the same denominator d. ( meta-M meta->M' ) Reduces linear system in meta representation. ( meta-M meta-M' ) Reduces linear system in meta representation. Does not reduce last column of metamatr. This is useful to solve linear system with parameters in the last column. ( meta-M d meta-sol T ) ( meta-M F ) Solves cramer system. Meta-matr must be fully reduced. Meta-sol is reduced to the same denominator. d ag is FALSE if dimension do not match. ( M linc linc linc' res cas_p ) ( M2 M1 M2 list ) ( M_eq M_inc M_eq M lidnt flag ) Converts linear equations to a matrix and checks that equation are linear with respect to lidnt.
43.1.7
Addr. 35A006
343 Description ( A # A el ) Extracts element of index # from array. Array type test is made in assembly for array speed. ( el # M M' ) Puts el at index # of matrix M. ( el #i V V ) Replaces #i-th vector component by element. ( [] #el ) ( [[]] #row ) ( M rmin nrows cmin ncols { #m #n } M' ) Extracts submatrix from a matrix. ( M1 M2 M2' ) Replaces part of matrix destination (M2) by matrix source (M1). LAM1 to 9 must be bound like in Llib/LIMain.s ( 9:r 8:c 7:dmat? 6:f 5:md 4:nd 3:smat? 2:ms 1:ns ). Copy begins in matrix d at row r and column c. ( A ncols+1 ndiags V ) Extracts diagonal terms. ncols+1 is there because MATRIX>DIAG is called inside la>DIAG. ( ncol+1 diagV dlen dims{} M ) Constructs a matrix from a vector of diagonal terms. ( V ob %i V' ) Inserts element in symbolic vector at row %i. ( V ob #i V ) ( M V #i M' ) Inserts element/vector in symbolic vector/matrix at row #i. Checks for 0 < #i < #n + 1, but does not check for matrix/vector size. ( ob #i meta meta ) Inserts element/vector in meta-object at position #i. Checks for 0 < #i < #n + 1, but does not check for vector size.
340006
MATREPL
35F006
MATRIX>DIAG
360006
MATRIXDIAG>
361006 362006
la+ELEMsym INSERTROW[]
363006
insertrow[]
43. Matrices Description ( M V #i M' ) Inserts vector in symbolic matrix at col #i. Checks for 0 < #i < #n + 1, but does not check for matrix/vector size. ( M3 M2 #i M ) Inserts matrix2 in matrix3 starting from row #i. Checks for 0 < #i < #n+1, but does not check for matrix size. ( M3 M2 #i M ) Inserts matrix2 in matrix3 starting from row #i. Checks for 0 < #i < #n + 1, but does not check for matrix size. ( M #c #c' M ) Exchanges columns c and c' of a symbolic matrix. ( M #r #r' M ) Exchanges lines r and r' of a symbolic matrix. ( M % %' M' ) SWAP two rows in matrix. Internal version of xRSWP. ( M #r M' lr ) Extracts row #r from M. Checks boundaries. ( meta-M #r meta-M lr ) Extracts row #r from meta-matrix. Checks boundaries. ( M #c M cc ) Extracts column #r from matrix. Checks boundaries. ( meta-M #c #c' meta-M ) Exchanges columns c and c' of a meta-matrix. ( meta-M #l #l' meta-M ) Exchanges lines l and l' of a meta-matrix (or vector). ( M ) Stores matrix in 'MATRIX' in current directory.
365006
INSERT[]ROW[]
366006
INSERT[]COL[]
369006
MATRIXCSWAP
36A006 0AC003
MATRIXRSWAP SWAPROWS
36B006 36C006
MATRIX-ROW METAMAT-ROW
36D006
MATRIX-COL
36E006 36F006
METAMATCSWAP METAMATRSWAP
370006
STOMAText
345 Description ( arry ob arry arry ) ( ob arry arry arry ) Used for addition of numeric matrix and symbolic object. ( v op V ) Applies unary op(v[i]) to get V[i]. ( V2 V1 binop V ) Works even if V2 and V1 do not have not the same dimension. ( V r P[r] ) Horner evaluation, where elements of V represent coefcients of a polynomial.
379006 37A006
VUNARYOP VBINARYOP
37B006
PEVAL
43.1.8
Addr. 37C006 37F006
37E006
MADJ
380006
JORDAN
22D006 381006
FLAGJORDAN QXA
224006 382006
FLAGQXA AXQ
346 Addr. 225006 383006 226006 384006 227006 228006 Name FLAGAXQ GAUSS FLAGGAUSS SYLVESTER
FLAGSYLVESTER
43. Matrices Description ( M lidnt symb lidnt ) Internal AXQ. ( symb D P symb' ) Gauss reduction of quadratic form (symbolic). ( symb lidnt symb' ) Internal GAUSS. ( M D P ) Gauss reduction of a quadratic form (matrix). ( M P D ) Internal SYLVESTER. ( [[]] symb ) Internal PCAR.
PCAR
44.1
44.1.1
Addr. 125006 126006 127006 129006 12B006 12C006
Reference
Basic Operations and Function Application
Name x+ext x-ext x*ext x/ext xext EXPAND Description ( ob2 ob1 ob2+ob1 ) Symbolic addition, tests for innities. ( ob2 ob1 ob2-ob1 ) Symbolic subtraction, tests for innities. ( ob2 ob1 ob2*ob1 ) Symbolic multiplication, tests for innities. ( ob2 ob1 ob2/ob1 ) Symbolic division, tests for innities. ( ob power obpower ) Power. ( x y xy=exp[y*ln[x]] ) Power with simplications. If y is a fraction of integers, use XROOT instead. ( ob -ob ) Symbolic negation. ( ob -ob ) Symbolic negation.
4FB006 4FC006
QNeg RNEGext
347
348 Addr. 4FA006 4FE006 4FD006 500006 4FF006 501006 503006 505006 50D006 50A006 52A006 557006 553006 555006 51B006 51C006 Name SWAPRNEG RREext SWAPRRE RIMext SWAPRIM xREext xIMext RCONJext xABSext RABSext xINVext xSYMINV xSQext xSYMSQ SXSQRext XSQRext
44. Expression Manipulation Description ( ob2 ob1 ob1 -ob2 ) Does SWAP then symbolic negation. ( ob Re(ob) ) Symboloc real part. ( ob2 ob1 ob1 Re(ob2) ) SWAP, then RREext. ( ob Im(ob) ) Symbolic imaginary part. ( ob1 ob2 ob2 Im(ob1) ) SWAP, then RIMext. ( symb symb' ) Complex real part. Expands only + - * / . ( symb symb' ) Complex imaginary part. Expands only + - * / . ( ob Conj(ob) ) Symbolic complex conjugate. ( ob abs(ob) ) Symbolic ABS function. ( ob abs(ob) ) Internal ABS. Internal representation. ( ob 1/ob ) Symbolic inversion. ( symb 1/symb ) Symbolic inversion. ( symb sq(symb) ) Symbolic square. ( symb symb2 ) ( ob sqrt(ob) ) Does not take care of the sign. ( ob sqrt(ob) ) Tries to return a positive square root if nocareag is cleared. ( ob sqrt(ob) ) Symbolic square root, tests for 0 and 1. ( symb sqrt(symb) ) ( ob ln(ob) ) Symbolic LN with special handling for fractions. Does not use the internal representation.
349 Description ( ob ln(ob) ) Symbolic LN, without fraction handling. ( ob ln(ob) ) Symbolic LN using internal representation. Before switching to internal representation, test for ABS, 0 and 1 and, in real mode, test if ob=exp(x). ( ob ln(ob) ) Internal natural logarithm for a real argument. ( ob ln(ob) ) Internal complex natural logarithm. ( ob ln(ob) ) Internal natural logarithm for complex. ( y d n exp(y*n/d*i* ) ) Symbolic EXP, tests for 0, innity and i*k* /12 where k is an integer. Tests for d=1,2,3,4,6. ( ob cos(ob) ) Symbolic COS, tests for 0 and multiples of /12. Also tests if ob=acos(x) or ob=asin(x). ( ob cos(ob) ) ( ob acos(ob) ) Symbolic ACOS. Tests for 0, innity and tables. ( ob acos(ob) ) ( ob sin(ob) ) Symbolic SIN, tests for 0 and multiplies of /12. Also tests if ob=acos(x) or ob=asin(x). ( ob sin(ob) ) ( ob asin(ob) ) Symbolic ASIN. Tests for 0, innity and tables. ( ob asin(ob) ) ( ob tan(ob) ) Symbolic TAN. Tests for 0 and multiplies of /12. Also tests if ob=atan(x). ( ob tan(ob) ) ( ob atan(ob) ) Symbolic ATAN. Tests for 0, innity and tables. ( ob atan(ob) ) ( ob cosh(ob) ) Symbolic COSH. Tests for 0, innity and acosh(x). ( ob cosh(ob) )
52C006
xCOSext
350 Addr. 54E006 550006 530006 543006 54B006 54D006 531006 547006 548006 54A006 55F006 561006 563006 565006 567006 569006 56B006 56D006 56F006 571006 572006 573006 575006 578006 128006 Name xACOSHext xSYMACOSH xSINHext xSYMSINH xASINHext xSYMASINH xTANHext xSYMTANH xATANHext xSYMATANH xSYMFLOOR xSYMCEIL xSYMIP xSYMFP xSYMXPON xSYMMANT xSYMLNP1 xSYMLOG xSYMALOG xSYMEXPM1 factorial facts xSYMFACT xSYMNOT x=ext
44. Expression Manipulation Description ( symb acosh(symb) ) Symbolic ACOSH. ( symb acosh(symb) ) ( ob sinh(ob) ) Symbolic SINH. Tests for 0, innity and asinh(x). ( ob sinh(ob) ) ( symb symb' ) Symbolic ASINH. ( symb asinh(symb) ) ( ob tanh(ob) ) Symbolic TANH. Tests for 0 and atanh(x). ( ob tanh(ob) ) Symbolic TANH. ( symb symb' ) Symbolic ATANH. ( ob atanh(ob) ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb! ) Symbolic factorial. ( symb symb! ) Symbolic factorial. ( symb symb! ) ( symb symb' ) ( ob2 ob1 ob2=ob1 )
44.1. Reference
351
44.1.2
Addr. 408006 40B006 40E006 412006 414006 41A006 41B006 41C006 41D006 41E006 41F006 420006 422006 424006 427006 42A006 42C006 42E006
352 Addr. 431006 434006 437006 43C006 43D006 440006 442006 444006 446006 448006 44A006 44C006 44E006 450006 452006 454006 45A006 Name ATAN2ASIN ASIN2ATAN ASIN2ACOS ACOS2ASIN ATAN2LNext TAN2SC2 TAN2CS2 SIN2EXPext COS2EXPext SINH2EXPext COSH2EXPext TANH2EXPext ASINH2LNext ACOSH2LNext ATANH2LNext XROOT2ext LN2ATAN
44. Expression Manipulation Description ( symb symb' ) x asin(x/sqrt(x2+1)) ( symb symb' ) x atan(x/sqrt(1-x2)) ( symb symb' ) x /2-acos(x) ( symb symb' ) x /2-asin(x) ( symb symb' ) x i/2*ln((i+x)/(i-x)) ( symb symb' ) x (1-cos(2x))/sin(2x) ( symb symb' ) x sin(2x)/(1+cos(2x)) ( symb symb' ) x (e(i*x)-1/e(i*x))/(2i) ( symb symb' ) x (e(i*x)+1/e(i*x))/2 ( symb symb' ) x (ex-1/ex)/2 ( symb symb' ) x (ex+1/ex)/2 ( symb symb' ) x (e2x-1)/(e2x+1) ( symb symb' ) x ln(x+sqrt(x2+1)) ( symb symb' ) x ln(x+sqrt(x2-1)) ( symb symb' ) x ln((1+x)/(1-x))/2 ( symb1 symb2 symb' ) x y exp(ln(y)/x) ( symb symb' ) x ln(x)
44.1. Reference
353
44.1.3
Addr. 45B006
464006
SYMBEXEC
465006
MEVALext
466006
CASNUMEVAL
467006 468006
CASCOMPEVAL REPLACE2BY1
469006
NR_REPLACE
CASCRUNCH
APPROXCOMPEVAL ALGCASCOMPEVAL
44. Expression Manipulation Description ( Lvar Lvar' ) Simplies all elements of the list that are supposed to be variables. ( symb symb' ) Simplies one object like EVAL. ( symb symb' ) Simplies one object like EXPAND. Object must be a symbolic, a real or a complex number. ( symb symb' ) Simplies one object like EXPAN. Object must be symb/real/cmplx. ( ob ob' ) Simplies variable. ( inf sup fcn var int(inf,sup,fcn,var) ) ( ob1..obn #n ob id[] ) Simplication of user functions. Tests for derivative of user functions. Ob must be an id, a symbolic, a secondary or a romptr. ( V1..Vn #n fcn f[] ) Evaluates a user function with stack checking. ( ob list ob' ) Executes the WHERE operator. ( ob1 ob2 ob1' ob2' ) Simplies two objects in internal representation. Checks that o2 is not a complex or an irrquad because decomposition of the corresponding fraction with larg would generate a "Try to recover Memory". ( o1 o2 gcd o1/gcd o2/gcd ) Divides o1 and o2 by gcd. ( a b g a'' b'' ) Calculates g = gcd(a,b) and a''=a/g and b''=b/g. ( symb symb ) Transcendental simplications. Converts only sqrt and XROOT to EXP/LN. LN are returned as -1/INV[-LN[]] for use by SERIES.
298006 299006
SIMPLIFY SIMP1ext
29A006
SYMEXPAN
355 Description ( symb symb ) Transcendental simplications. Convert transcendental functions to EXP and LN. ( symb symb )
2BB006
TSIMP3ext
44.1.4
Addr. 26E006
2FE006
TCOLLECT
2FF006
SIGMAEXPext
300006 301006
LINEXPext SIGMAEXP2ext
44. Expression Manipulation Description ( symb symb ) Main transcendental expansion program. ( 'a=b' a b ) ( ob X ob ) Internal equation splitter.
44.1.5
Addr. 407006
Trigonometric Transformations
Name HALFTAN Description ( symb symb' ) Converts trigonometric functions to TAN of the half angle. ( symb symb' ) Convert sin and cos to tan of the same angle. ( symb symb' ) Applies sin2+cos2=1 to simplify trigonometric expressions. If ag -116 is set, tries to keep only sin, else only cos. ( symb symb' ) Converts hyperbolic functions to exp and ln. Converts XROOT and to exp and ln. ( symb symb' ) Converts all transcendental functions to exp and ln. ( symb symb' ) Converts sqrt, and XROOT to EXP/LN. ( symb symb' ) Converts tan to sin/cos. ( symb symb' ) Converts sin to cos*tan. ( symb symb' ) Converts ATAN to ASIN using asin(x)=atan(x/sqrt(1-x2)). ( symb symb' ) Converts ASIN to ATAN using asin(x)=atan(x/sqrt(1-x2)).
411006 416006
TRIGTAN TRIGext
417006
HYP2EXPext
418006
EXPLNext
433006
ASIN2Text
357 Description ( symb symb' ) Converts ASIN to ACOS using asin(x)=pi/2acos(x). ( symb symb' ) Converts ACOS to ASIN using acos(x)=pi/2asin(x). ( symb symb' ) Converts TAN to SIN/COS of the double angle. If ag -116 is set calls TAN2SC2, else TAN2CS2. ( symb symb' ) If symb contains x, returns -1/inv(-ln(x)), else ln(x). Used by SERIES.
43A006
ACOS2Sext
43F006
TAN2SC2ext
456006
LN2ext
44.1.6
Addr. 3E8006 3EA006 3EC006
3ED006
NEWDIVext
3F3006
QUOTOBJext
3F4006
DIVISIBLE?
3F5006
QDiv?
44. Expression Manipulation Description ( P Q P/Q PmodQ T ) Euclidean division. Assumes P and Q have integer or Gaussian integer coefcient. Returns FALSE in complex mode or if sparse short division fails. ( z1 z2 q r ) Step by step Euclidean division for small integers. ( list ob ) Calculates the LCM of the denominator of the elements of the list. If input is not a list, returns the denominator of the object. ( Meta ob ) Calculates LCM of the denominators of the elements of Meta. ( {} {} ob ) Calculates the GCD of all the elements in the list. The algorithm is far from optimal. ( c 1 A B c* gcd(A,B) ) Euclidean algorithm for polynomial GCD. Used if A or B contains irrquads. c is the GCD of the contents of the original polynomials returned after failure of GCDHEUext. ( ob2 ob1 gcd ) Generic internal GCD. ( LAM2: GCDext ob1, ob2 pgcd ).
3F7006
POTENCEext
2A5006
DENOLCMext
2A6006
METADENOLCM
2B1006
LPGCDext
2B2006
SLOWGCDext
2B3006
QGcd
45.1
45.1.1
Addr. 157006
Reference
Basic Expression Manipulation
Name SYMBINCOMP Description ( symb ob1 .. obN #n ) ( ob ob #1 ) ( {} {} #1 ) Explodes symbolic object into meta. Other objects are converted into one-object metas by pushing #1 into the stack. ( meta meta&1&+ meta&1&- ) Creates two copies of the meta. To the rst one, adds 1 and +, to the second one, adds 1 and -. ( meta meta 1&meta&/ ) Duplicates the meta, and inverts the expression represented by it. ( Meta 1&Meta ) Prepends the number 1 to the meta. ( Meta Meta&2&/ ) Divides the expression by two. ( Meta Meta&2 ) Appends the number 2 to the meta. ( Meta Meta&/ ) Appends division to meta.
386006
m-1&m+1
387006
meta1/meta
359
45. Symbolic Meta Handling Description ( Meta 2&Meta&* ) Multiplies the expression by 2. ( meta meta*i ) Multiplies meta by i. ( Meta 1&Meta&SQ&- ) Changes x into 1-x2, where x is the original expression. ( Meta Meta&SQ&1&+ ) Changes x into x2+1, where x is the original expression. ( Meta Meta&SQ&1&- ) Changes x into x2-1, where x is the original equation. ( Meta Meta&1&- ) Subtracts one from the expression. ( Meat Meta& ) Append power operator to meta object. ( meta2 meta1 meta2*meta1 ) top& addt*. No checks. ( meta2 meta1 meta2/meta1 ) top& addt/. No checks. ( meta meta&i ) Appends i (the Imaginary unit) to expression.
38E006
metasq+1
38F006
metasq-1
45.1.2
Addr. 393006
3AB006
MetaAdd
1CE006
ckaddt+
361 Description ( Meta1 Meta2 Meta1+Meta2 ) Subtracts 2 meta objects with trivial simplications. metasub checks for Meta1/2=Z0 ONE. ( Meta2 Meta1 Meta2-Meta1 ) Subtracts 2 meta objects with trivial simplications. Checks for innities then call metasub. ( Meta1 Meta2 Meta1+Meta2 ) Subtracts 2 meta objects with trivial simplications. ( Meta1 Meta2 Meta1*Meta2 ) Multiplies 2 meta objects with trivial simplications. Checks for meta1, meta2= Z0 or Z1, checks for xNEG. ( Meta2 Meta1 Meta2*Meta1 ) Multiplies 2 meta objects with trivial simplications. Checks for innities/0 then call metamult. ( Meta1 Meta2 Meta1*Meta2 ) Multiplies 2 meta objects with trivial simplications. ( Meta2 Meta1 Meta2/Meta1 ) Divides 2 meta objects with trivial simplications. Checks for innities and 0, meta2 =1 or Z-1, checks for xNEG. ( Meta2 Meta1 Meta2/Meta1 ) Divide 2 meta objects with trivial simplications. Checks for innities and 0 then call metadiv. ( o1...on #n ob {o1/ob...on/ob} ) Division of all elements of a meta by ob. Tests if o=1. ( Meta ob Meta&ob& ) Elevates expression to a power. If ob=1, just returns the expression. Tests for present of xNEG in the end of meta for integral powers.
3AD006
MetaSub
1CF006
ckaddt-
395006
metamult
3AF006
MetaMul
1CD006
ckaddt*
396006
metadiv
3B1006
MetaDiv
3F1006
DIVMETAOBJ
397006
meta
45. Symbolic Meta Handling Description ( Meta2 Meta1 Meta2Meta1 ) Elevates expression to a power (any other expression). If length of Meta1 is ONE, calls meta. ( Meta2 Meta1 Meta2Meta1 ) Power. Checks for innities then calls metapow. ( Meta2 Meta1 Meta2&XROOT&Meta1 ) Root of expression. ( meta meta ) Checks only for meta nishing by xNEG. ( meta meta ) Like metaneg but checks for meta=ob ONE. ( Meta Meta ) Negates meta. Only checks for metas nishing by xNEG. ( meta meta' ) Meta complex real part. Expands only + - * / . ( meta meta' ) Meta complex imaginary part. Expands only + - * / . ( Meta Meta' ) Meta ABS. Does a CRUNCH rst to nd sign. ( Meta Meta' ) Meta ABS. No crunch, sign is only found using exact methods. ( Meta Meta' ) Meta SIGN. ( Meta Meta' ) Meta ARG. ( Meta2 Meta1 Meta' ) Meta XROOT. XROOT(o2,o1) is o1[1/o2], compared to o2o1. ( Meta2 Meta1 Meta' ) Meta MIN. ( Meta2 Meta1 Meta' ) Meta MAX.
3B5006
MetaPow
502006
xSYMRE
504006
xSYMIM
50E006 510006
addtABS addtABSEXACT
12F006 131006
addtMIN addtMAX
45.1. Reference Addr. 133006 135006 137006 139006 13B006 13D006 13F006 141006 143006 145006 147006 149006 14B006 14D006 14F006 151006 153006 506006 523006 Name addt< addt<= addt> addt>= addt== addt!= addt% addt%CH addt%T addtMOD addtTRNC addtRND addtCOMB addtPERM addtOR addtAND addtXOR addtCONJ addtLN Description ( Meta2 Meta1 Meta' ) Meta <. ( Meta2 Meta1 Meta' ) Meta <=. ( Meta2 Meta1 Meta' ) Meta >. ( Meta2 Meta1 Meta' ) Meta >=. ( Meta2 Meta1 Meta' ) Meta ==. ( Meta2 Meta1 Meta' ) Meta !=. ( Meta2 Meta1 Meta' ) Meta %. ( Meta2 Meta1 Meta' ) Meta %CH. Meta2*(1+Meta'/100)=Meta1. ( Meta2 Meta1 Meta' ) Meta %T. ( Meta2 Meta1 Meta' ) Meta MOD. ( Meta2 Meta1 Meta' ) Meta TRNC. ( Meta2 Meta1 Meta' ) Meta RND. ( Meta2 Meta1 Meta' ) Meta COMB. ( Meta2 Meta1 Meta' ) Meta PERM. ( Meta2 Meta1 Meta' ) Meta OR. ( Meta2 Meta1 Meta' ) Meta AND. ( Meta2 Meta1 Meta' ) Meta XOR. ( meta meta' ) Meta complex conjugate. ( Meta Meta' ) Meta LN.
363
364 Addr. 535006 537006 539006 53B006 Name addtCOS addtSIN addtTAN addtSINACOS
45. Symbolic Meta Handling Description ( Meta Meta' ) Meta COS. ( Meta Meta' ) Meta SIN. ( Meta Meta' ) Meta TAN. ( meta meta' ) If meta stands for x, meta' stands for sqrt[1x2]. ( Meta Meta' ) Meta ASIN. ( Meta Meta' ) Meta ACOS. ( Meta Meta' ) Meta ATAN. ( Meta Meta' ) Meta SINH. ( Meta Meta' ) Meta COSH. ( Meta Meta' ) Meta TANH. ( Meta Meta' ) Meta ATANH. ( Meta Meta' ) Meta ASINH. ( Meta Meta' ) Meta ACOSH. ( Meta Meta' ) Meta SQRT. ( Meta Meta' ) Meta SQ. ( Meta Meta' ) Meta INV. ( Meta Meta' ) Meta EXP. Does not apply EXP[..]=1/EXP[..]. ( Meta Meta' ) Meta EXP. Applies EXP[-..]=1/EXP[..].
53C006 53E006 540006 542006 544006 546006 549006 54C006 54F006 551006 554006 556006 558006
addtASIN addtACOS addtATAN addtSINH addtCOSH addtTANH addtATANH addtASINH addtACOSH addtSQRT addtSQ addtINV addtEXP
559006
xSYMEXP
45.1. Reference Addr. 55A006 55C006 55E006 560006 562006 564006 566006 568006 56A006 56C006 56E006 570006 574006 577006 Name addtD->R addtR->D addtFLOOR addtCEIL addtIP addtFP addtXPON addtMANT addtLNP1 addtLOG addtALOG addtEXPM addtFACT addtNOT Description ( Meta Meta' ) Meta DR. ( Meta Meta' ) Meta RD. ( Meta Meta' ) Meta FLOOR. ( Meta Meta' ) Meta CEIL. ( Meta Meta' ) Meta IP. ( Meta Meta' ) Meta FP. ( Meta Meta' ) Meta XPON. ( Meta Meta' ) Meta MANT. ( meta meta ) Meta LNP1. ( meta meta ) Meta LOG. ( meta meta ) Meta ALOG. ( meta meta ) Meta EXPM. ( Meta Meta' ) Meta FACT. ( Meta Meta' ) Meta NOT.
365
45.1.3
Addr. 409006 40A006 40C006
366 Addr. 40D006 40F006 410006 413006 415006 421006 423006 425006 428006 42B006 42D006 42F006 432006 435006 438006 439006 43B006 43E006 441006 Name 2x/1+x2 tan2tan/2 addtTAN/2 cos2tan sin2tan tan2exp asin2ln acos2ln sin/cos cos*tan sqrt1-sin2 sqrt1-cos2 atan2asin asin2atan pi/2-acos pi/2-meta pi/2-asin atan2ln 2*1-cos/sin
45. Symbolic Meta Handling Description ( meta meta' ) x 2x/(1+x2) ( meta meta' ) x 2 tan(x/2)/(1-(tan(x/2))2) ( meta meta' ) x tan(x/2) ( meta meta' ) x 1/sqrt(1+(tan(x))2) ( meta meta' ) x tan(x)/sqrt(1+(tan(x))2) ( meta meta' ) x (exp(i2x)-1)/(i*(exp(i2x)+1)) ( meta meta' ) x = i*ln(x+sqrt(x2-1))+ /2. ( meta meta' ) x ln(x+sqrt(x2-1))/i ( meta meta' ) x sin(x)/cos(x) ( meta meta' ) x cos(x)*tan(x) ( meta meta' ) x sqrt(1-(sin(x))2). ( meta meta' ) x sqrt(1-(cos(x))2). ( meta meta' ) x asin(x/sqrt(x2+1)) ( meta meta' ) x atan(x/sqrt(1-x2)) ( meta meta' ) x /2-acos(x) ( meta meta' ) x /2-x ( meta meta' ) x /2-asin(x) ( meta meta' ) x i/2*ln((i+x)/(i-x)) ( meta meta' ) x (1-cos(2x))/sin(2x)
45.1. Reference Addr. 443006 445006 447006 449006 44B006 44D006 44F006 451006 453006 455006 458006 Name 2*sin/1+cos sin2exp cos2exp sinh2exp cosh2exp tanh2exp asinh2ln acosh2ln atanh2ln xroot2expln exp2sincos Description ( meta meta' ) x sin(2x)/(1+cos(2x)) ( meta meta' ) x (e(i*x)-1/e(i*x))/(2i) ( meta meta' ) x (e(i*x)+1/e(i*x))/2 ( meta meta' ) x (ex-1/ex)/2 ( meta meta' ) x (ex+1/ex)/2 ( meta meta' ) x (e2x-1)/(e2x+1) ( meta meta' ) x ln(x+sqrt(x2+1)) ( meta meta' ) x ln(x+sqrt(x2-1)) ( meta meta' ) x ln((1+x)/(1-x))/2 ( meta1 meta2 meta' ) x y exp(ln(y)/x) ( meta meta' ) Returns EXP of EXP[RE]*[COS+i*SIN].
367
meta
as
45.1.4
Addr. 3A1006
3A0006
2metaundef#
3A2006 3A4006
metaundef 1metainf#
45. Symbolic Meta Handling Description ( meta2 meta1 meta2 meta1 # ) Finds position of innity in meta 2 and meta1. Metas of length>2 are considered as nite meta. ( meta # ) Returns innity type: 1 for +innity, 2 for innity or 0 for unsigned. ( meta ) Returns unsigned innty. ( meta ) Returns plus innty. ( ob1..obn meta ) Replaces meta by plus innty. ( meta ) Returns minus innty. ( ob1..obn meta ) Replace meta by minus innty.
3A5006
metainftype
45.1.5
Addr. 3BB006
118007
DISTRIB*
3C2006
DISTRIB/
369 Description ( Meta Meta' ) Expands SIN(x*y). Expands if x or y is an integer. ( Meta2 Meta1 Meta' ) Expands SIN(x*y). Meta1 is assumed to be an integer. ( Meta Meta' ) Expands COS. ( Meta Meta' ) Expands COS(x+y). ( Meta Meta' ) Expands COS(x-y). ( Meta Meta' ) Expands COS(x*y). ( meta2 meta1 Meta' ) Expands COS(x*y). meta1 represents an integer. ( Meta Meta' ) Expands EXP. ( Meta Meta' ) Expands EXP(x+y). ( Meta Meta' ) Expands EXP(x-y). ( Meta Meta' ) Expands EXP(x*y). ( Meta Meta' ) Expands EXP(-x). ( Meta2 meta1 Meta' ) Expands EXP(x*y). meta1 represents an integer. ( Meta Meta' ) Expands LN. ( Meta Meta' ) Expands LN(x*y). ( Meta Meta' ) Expands LN(x/y). ( Meta Meta' ) Expands LN(xy).
308006
SINEXPA*1
45.1.6
Addr. 39A006 3BC006
Tests
Name
metafraction?
metapi?
3BD006
metaCOMPARE
3BE006
STRICTmetaCOMPARE
3C3006
metareal?
Description ( Meta Meta flag ) Tests if meta is a fraction of integers. ( Meta Meta# ) Tests presence of in a meta. # is the last occurence of or 0. ( Meta2 Meta1 Meta2 Meta1 # ) Comparison of 2 meta. # =0 if undef # =1 if > # =2 if < # =3 if = Assumes generic situation, e.g. X2 > 0 in real mode. Look below STRICTmetaCOMPARE for a more careful comparison. ( Meta2 Meta1 Meta2 Meta1 # ) Comparison of 2 meta. # =0 if undef # =1 if > # =2 if < # =3 if = Unlike metaCOMPARE it does not assume generic situation. ( meta meta flag ) Tests if IM[meta]==0.
Chapter 46 Polynomials
The entries in this chapter deal with computation with Polynomials.
46.1
46.1.1
Addr. 118006 119006 117006 115006 116006 114006 111006 112006
Reference
Computation with Polynomials
Name QAdd RADDext SWAPRADD QSub RSUBext SWAPRSUB QMul RMULText Description ( o1 o2+o1 ) Adds two polynomials. ( o2 o1 o2+o1 ) Internal +. This is the same entry as QAdd. ( o2 o1 o1+o2 ) SWAP, then QAdd. ( o2 o1 o2-o1 ) Subtracts two polynomials. ( o2 o1 o2-o1 ) Internal -. This is the same entry as QSub. ( o2 o1 o1-o2 ) SWAP, then QSub. ( Q1 Q2 Q ) Multiplication of polynomials with extensions. ( Q1 Q2 Q ) Multiplication of polynomials with extensions. This is the same entry as QMul. ( Q1 Q2 Q ) SWAP, then QMul. ( o2 o1 o2/o1 ) Internal /.
110006 11C006
SWAPRMULT QDiv
371
372 Addr. 11B006 11A006 0D9006 113006 Name RDIVext SWAPRDIV QMod RASOP
46. Polynomials Description ( o2 o1 o2/o1 ) Internal /. This is the same entry as QDiv. ( o2 o1 o1/o2 ) SWAP, then QDiv. ( Q, Z Q mod Z ) ( n1/d1 n2/d2 d1*d2 n1*d2 n2*d1 ) Used by RADDext and RSUBext for rational input. ( o2 # o2# ) Internal power (not for matrices). ( ob # prg* ob# ) General power with a specied multiplication program. ( o2 o1 o2o1 ) Tries to convert o1 to an integer to call RP#, otherwise xext. ( P Q quo mod T ) ( P Q P Q F ) Euclidean division. Assumes P and Q have integer coefcientes. Returns FALSE if sparse short division fails. ( P, r symb ) Taylor for polynomials. ( Q1/Q2 Q1'/Q2' ) Extracts leading coefcients for the rst variable from a rational polynomial. ( ob2 ob1 quo mod ) Polynomial Euclidean division of 2 objects. Dispatchs to DIV2LISText for list polynomials. ( Z0 l1 l2 div mod ) Euclidean division, l1 and l2 are list polynomials. Test rst if l1=l2, then tries fast division, if it fails switch to SRPL division. ( A B Q R ) Step by step Euclidean division for univar poly. ( P1 P2 sign[P2]*P1 ) Sets sign of P1 according to leading coeff of P2. ( Zn Fraction Fraction modulo Zn )
11F006 120006
RP# MPext
123006
RPext
108006
DISTDIVext
3E5006 15B006
PTAYLext CARCOMPext
3EE006
QDivRem
3EF006
DIV2LISText
46.1. Reference Addr. 3C5006 3C6006 3C7006 3C8006 3C9006 Name ModAdd ModSub ModMul ModDiv ModDiv2
373 Description ( Q1 Q2 Zn Z ) Modular addition. Z = Q1+Q2 (mod Zn). ( Q1 Q2 Zn Z ) Modular subtraction. Z = Q1-Q2 (mod Zn). ( Q1 Q2 Zn Z ) Modular multiplication. Z = Q1*Q2 (mod Zn). ( Z1 Z2 Zn Z ) Modular division. Z = Z1/Z2 (mod Zn). ( Q1 Q2 Zn quo mod mod' ) Modular division. mod' = Q1 mod Q2 mod Zn. If Q1 and Q2 are integers, Q1 mod Q2 mod Zn is always 0. ( Z Zn Z' ) Modular inversion. Z' = INV(Z) (mod Zn). NONINTERR if GCD[Z,Zn] = 1 or if Z = 0 (otherwise the results would be unpredictable). ( Q1 Q2 Zn Q' ) Modular GCD.
3CA006
ModInv
3CB006
ModGcd
46.1.2
Addr. 08E006
Factorization
Name BerlekampP Description ( P #prime P F / P Lf #prime T ) Berlekamp's algorithm for nding modular factors of a univariate polynomial. ( P P F / P Lf #prime T ) Berlekamp's algorithm for nding modular factors of a univariate polynomial with a leading frontend for nding linear factors faster. The input polynomial must be square free, otherwise the polynomial is not fully factored. Due to memory restrictions byte sized coefcients are used and the following restrictions were imposed: prime<128 and degree<256. If the conditions are not met FALSE is returned. BCD: prime97.
08F006
Berlekamp
46. Polynomials Description ( P [ meta cst_coeff TRUE | P FALSE ] ) Factorizes square-free polynomial in Erable format. ( P meta-factor P' ) Extracts all trivial power factors of P. ( P P flag ) Checks that P does not contain any DOCOL (i.e. extensions). ( P PP PC ) Computes primitive polynomial and content of non-const P with respect to X1. The results are trimmed (provided P was). ( P Lfk Z ) Does a complete factorization of P. The result is trimmed. ( P Lfk ) Square-free and trivial factorization, including integer content, of P taken positive. Factors of same power are not necessarily merged or adjacent, but all Fi's are square-free. ( P Lf ) Heuristic factorization of polynomial taken positive. LAM FullFact? must be bound. If LAM FullFact? is TRUE, a full factorization is done. If it is FALSE, only square-free and trivial factorization is done. ( P Lf ) Heuristic factorization of primitive polynomial. LAM FullFact? must be bound. If TRUE, a full factorization is done. When FALSE, only a square-free and trivial factorization are done. ( P Lf ) Heuristic factorization of primitive square-free non constant polynomial. ( P P' # ) Extracts trivial power of poly. P must be a valid poly (if list, begin with a non zero coeff).
0A9006 0AA006
MFactTriv CheckPNoExt
0AB006
PPP
0AC006
PFactor
0AD006
PSqff
0AE006
PHFctr
0AF006
PHFctr1
0B0006
PHFctr0
0D8007
P2P#
375 Description ( R L ) Transforms list with count into simple list. R = { {f1 #k1} ... {fn #kn} } L = { f1 f1 .. fn fn }. ( L S F L' ) Applies program F(Li,S) to every elem of L. ( Z Lf ) Factorization of positive integer as polynomial. Lf = {} if Z is 1 Lf = { {Z1 #k1} ... {Zn #kn} } o/w. ( P Lsqff ) Computes the square-free factorization of primitive P. The result is trimmed (provided P was). ( p z F L ) Lift n-1 z-adic factorization into n factorization. ( C L C P ) Calculates combination product. ( P Lf ) Factorization of a square free primitive univariate polynomial. ( P Lf ) Factorization of a square free primitive univariate polynomial of degree > 2. ( Lfp p Lfp' ) Converts true modular factorization to monic factorization by dividing by the leading coefcient of factor 1. ( Lfp lc p Lfp' ) Converts monic modular factorization to true modular factorization by multiplying factor1 by lcoeff.
0B2006 0B3006
DoLS PNFctr
0B4006
PSQFF
0B5006
LiftZAdic
0B6006 0B7006
LFCProd UFactor
0B8006
UFactor1
0B9006
MonicLf
0BA006
DemonicLf
46. Polynomials Description ( #root1 .. #rootn #n ) Lifts modular roots of a polynomial to nd linear factors of a univariate polynomial. Lflin = list of found true factors Lfplin' = remaining linear factors P' = remaining polynomial Assumes UFactor lambda variables available and uses them for input and output. ( ) Lifts factorization mod p to factorization mod pk where pk exceeds the factor bound for succesful true factor extraction. Assumes UFactor lambda variables. ( P Lf ) Factorization of a degree 2 polynomial. Polynomial is univariate, square free and primitive. ( P Lfp p Tf Tfp ) Combines modular factors to true factors. P is the polynomial to factor, Lfp is the list of modular factors, and p the modulo. The entry returns the a list of found true factors (Tf) and the list of modular factors for each true factor (Tfp) ( lc Lfp p Cb F ) Calculates modular combination. ( #r Cb ) Inits modular combination list to value { 1 0 0 0 .. }. ( Cb Cb' flag ) Gets next possible modular combination. Assumes Cb is valid and is in tempob area. ( Lf Cb Lfrm Lf' Cb' flag ) Removes next possible combination after a successful combination has been found, and remove the used factors from the factor list. ( P P' Lf ) Extracts all trivial power factors of P.
0BC006
LiftGeneral
0BD006
UFactorDeg2
0BE006
CombineFac
0BF006 0C0006
CombProd CombInit
0C1006
CombNext
0C2006
RmCombNext
0C3006
PFactTriv
377 Description ( P #var P #n ) Calculates what power of the given variable is a factor in P. ( P P Lk flag ) Calculates trivial power factors in P. ag is TRUE if any of the powers is nonzero. ( P Lk P' ) Divides polynomial by its trivial powers. ( P meta-fact cst coeff ) Real mode: full factorization over the integer Complex mode: nd all 1st order factors of P.
0C5006
PFactPowCnt
0C6006 282006
PDivLk FEVIDENText
46.1.3
Addr. 09B006 09C006 09D006 09E006 09F006
0A0006
{}POLY
0A7006 0A1006
>POLY >TPOLY
378 Addr. 0A2006 0A3006 0A4006 0A5006 Name >HPOLY >TPOLYN >HPOLYN MKPOLY
46. Polynomials Description ( P ob P' ) Replaces >HCOMP for polynomial building. ( P ob1 .. obn #n P' ) Improved >TCOMP for polynomial building. ( P ob1 .. obn #n P' ) Improved >HCOMP for polynomial building. ( #n #k P ) Makes polynomial of nth variable to the power k. ( ob # {{{...{o}...}}} ) Embedds ob in the given number of lists. ( Q Q' ) Removes unnecessary zeros from polynomial. ( ob ob' ) Trims polynomial. ( Q Q' ) Increases variable depth. Constants (Z,Irr,C) are not modied. ( zint P ) Tchebycheff polynomial. If zint>0 then 1st kind, if <0 then second kind. ( P # [] ) Left ReDiMension. Adds 0 to the left of polynomial to get a symbolic vector of lenght #+1. ( {} # {} ) Right ReDiMension: like LRDM but 0 at the right and {}. ( {} degre ) Degree of a list-polynomial. ( P/d r P[X]_div_[X-r]/d r P[r]/d ) Horner scheme. ( P r P[X]_div_[X-r] r P[r] ) Horner scheme. ( P r P[X]_div_[X-r] r P[r] ) Horner scheme for matrices.
302006
TCHEBext
3DE006
LRDMext
3DF006
RRDMext
3E0006 3E1006
DEGREext FHORNER
3E2006 3E4006
HORNext MHORNext
379 Description ( M symb ) Lagrange interpolation. Format of the matrix is [ [ x1 .. xn ] [ f(x1) .. f(xn) ] ] Returns a polynomial P such that P(xi)=f(xi) ( P1 P2 P ) Resultant of two polynomials. Depth of P is one less than depth of P1 and P2. ( res g h P1 P2 +/-res g' h' P1' P2' ) Subresultant algorithm innerloop. ( P Q P' ) Resultant of P and Q shifted. gcd[Q(xr),P(x)]!=1 equivalent to r root of P' P' has same depth than P and Q. ( P P' ) Adds one variable just below the main var. works for polynomial, not for fractions. ( P P' ) Changes var Y=X2 in an even polynomial. ( N D N' D' ) Shrinks 2 polynomials using symmetry properties. ( N N' ) Shrinks 1 polynomial using symmetry properties. Degree of N must be even. If it is odd then N should be divided by X+1. ( N D N' D' ) Shrinks 2 polynomials using antisymmetry properties. ( N N' ) Shrinks 1 polynomial using antisymmetry properties. Degree of N must be even. If it is odd then N should be divided by X+1. ( P Z ) Gets the coefcient of P with max norm. ( Qden Qnom symb ) Builds a symbolic from rational polynomial.
10F007
RESULTANT
110007
RESULTANTLP
111007
RESPSHIFTQ
112007
ADDONEVAR
0CF007 0D1007
SHRINKEVEN SHRINK2SYM
0D2007
SHRINKSYM
0D3007
SHRINK2ASYM
0D4007
SHRINKASYM
103006 161006
PNMax SWAPNDXF
380 Addr. 162006 163006 164006 3D7006 3D8006 0EA006 Name NDXFext SWAPFXND FXNDext REGCDext EGCDext PEvalFast?
46. Polynomials Description ( Qnom Qden symb ) Builds a symbolic from rational polynomial. ( symb ob ob Qnom Qden ) Converts symbolic to rational polynomial. ( symb Qnom Qden ) Converts symbolic to rational polynomial. ( a b d u v au+bv=d ) ( a b d u v au+bv=d ) Bezout identity for polynomials. ( Z Pn Z Pn F / Pn[Z] T ) Attempts to evaluate Pn at X1=Z using fast register arithmetic. Fails if any of the following is true: Pn is not sunivariate; Z is polynomial after all; Z size is too big for register; Any overow occurs during Horner evaluation. ( symb1 symb2 symb ) Resultant of two polynomials in symbolic form.
10E007
FLAGRESULTANT
46.1.4
Addr. 10B006 10C006
Tests
Name Univar? SUnivar? Description ( P P flag ) Tests if polynomial is univariate. ( P P flag ) Tests if polynomial is univariate and the coefcients are bounded by register size. ( poly Z ) Tests if a polynomial (internal rep) is even/odd/none. Z=1 if even, -1 if odd, 0 if neither even nor odd. ( P Z ) Tests symmetry of coefcients of polynomial. Z=1 for symmetric, -1 for anti, 0 otherwise. ( P Z ) Tests "antisymmetry" of coef of polynomial. Z=1 for symmetric, -1 for anti, 0 otherwise.
0CC007
POLYPARITY
0D6007
POLYSYM
0D7007
POLYASYM
47.1
47.1.1
Addr. 272006
Reference
Root Finding and Numerical Solvers
Name MULMULText Description ( {} % {}' ) Multiplies multiplicities in a factor list by coeff. ( meta % meta' ) Multiplies by % all multiplicities of meta. ( {} {}' ) ( Meta Meta' ) Suppresses multiple occurrances of the same factor by adding corresponding multiplicities. ( f1...fk-1 mk-1 meta-res mk fk # f1...fk-1 mk-1 meta-res ) ( {} %n ob {}' ) Adds ob with multiplicity %n to the list. Checks if ob is in {}. ( ob {divisors} ) Returns list of divisors of ob. ( symb-poly Lvar Q {} ) {} is the list of root/multiplicity of sym with respect to the current variable. ( symb Lvar Q {} ) {} is the list of factors/multiplicity of symb. ( C {} C Lfact ) 381
278006 279006
METACOMP1 ADDLISText
27A006 27B006
DIVISext FACT1ext
27C006 27D006
FACTOext ZFACTO
47. Root Finding Description ( symb {} ) Numeric solver for univariate polynomials. The list contains the roots without multiplicity. ( ob ob') ) Float rounding for %%, C%% or list of either type. Used by SOLVext to reconstruct factors. ( P #5 meta cst_coeff T ) ( P #5 P #5 F ) ( P # P # F ) Searches if P is a bisquared 4-th order equation. Returns a meta of factors and the multiplying coeff in that case. ( f1 #1 coef meta rest T ) ( P list ) Finds integer roots of a polynomial. ( P meta cst_coeff ) Returns the roots of a polynomial P. Calls the numeric solver. ( P meta cst_coeff ) Returns the roots of a 1st, 2nd order and some other poly. Calls the numeric solver if exact solving fails. ( P {} ) Returns the roots of a 2nd order polynomial. ( P P meta ) Returns the roots of a 2nd order polynomial. P must be of order 1 or 2. ( P P meta ) Returns the roots of a 1st order polynomial. P must be of order 1. ( f r ) Root of a rst order factor. f is one level depth deeper than r. ( P meta-fact cst_coef ) Returns factors of a 2nd order polynomial and the corresponding multiplying coefcient. tests for 1st order polynomial.
27F006
FRND
280006
BICARREE?
284006
EVIDSOLV
285006 286006
DEG2ext METADEG2
287006
METADEG1
288006
DEG1
289006
FDEG2ext
383 Description ( r n d ) Converts root to factor. Factor is n/d, one level depth deeper than r. ( f r cst_coef ) Converts a factor to a root, solving 1st order factor. f and cst_coef are one level depth deeper than r. ( ob # {} intob meta ) {} is the list of variables. Meta is made of roots or factors of numerator (N) or denomenator (D) or both (N/D), depending on #. ZERO for roots N/D; ONE for roots N; TWO for roots D with numeric solver call; THREE for roots D without num. solver call; FOUR for factors N/D; FIVE for factors N; SIX for factors D with numeric solver call; SEVEN for factors D without num.solver call. ( ob {} # {} intob meta ) Like RFACText, but the list of variables is given. ( ob meta-fact ) Partial square-free factorization w.r.t. the main variable. Extract trivial factors Etape 3 ob meta-fact. ( %m on add-to-meta-res ) Factorization of a square-free polynomial. ( pn cst_coeff meta cst_coeff ) Non-integer factorization (sqrt extensions and numeric). multiplicty is in LAM 5,. ( cst_coeff p fr1 %m [fr2 %m] # cst_coeff ) Returns roots/factors of 1st and 2nd order polynomials. ( cst1 f1 ... fk #k cst2 fr1 %m ... frn %m #2k cst_coeff ) Returns factors or convert to roots if needed. #k=1,2 or 4, fk are of order 1 or 2.
28C006
FACTORACext
28D006
RFACText
28E006
RFACT2ext
28F006
RFACTSTEP3
290006 291006
RFACTSTEP5 METASOLV
293006
METASOLV2
294006
METASOLV4
47. Root Finding Description ( meta cst_coeff meta' cst_coeff ) Adds multiplicities to a meta. Multiplicity is in LAM 5. ( { fact mult } flag prg* prg ob ) Rebuilds an object from its list of factors (ag=TRUE) or roots (ag=FALSE) using prg* to multiply and prg to take multiplicity power. ( Lp Lidnt Lsol ) Calculates Groebner basis multivar solution. LAM3 must be bound to Lvar and LAM4 to Lidnt. ( Lp meta-sol ) Calculates Groebner basis multivar solutions. LAM1 must be bound to the number of vars A solution is a list { o1 ... on } where #n=LAM1 ok embedded in k-1 lists is the value of the k-th var ok may be undef. ( Lp G ) Calculate Groebner basis. G = { 1 } if no solutions G = { 0 } if identically true. ( Lp Lg ) Calculate factorized Groebner basis. Lg = { Lg1 Lg2 .. Lgn } Lgi = independent solution (probably) Lg = {} if no solutions Lg = { { 0 } } if identically true. ( Lp fctr? Lg ) Calculate Groebner basis or factorized Groebner basis. Redundant bases are not removed. ( p G q ) Reduces polynomial with respect to given basis.
296006
FACTOOBJext
093006
ALG48MSOLV
094006
GMSOLV
095006
GBASIS
096006
GSOLVE
097006
GFACTOR
099006
REDUCE
385 Description ( r P q T / r P F ) Assembly version of REDUCE for polynomials with short coefcients. Returns FALSE if an overow occurs during the reduction. Assumes r is a genuine polynomial (not constant). Assumes G is not empty. Assumes G does not contain zeros (is trimmed). ( {}/V V' ) Transforms list of root/multiplicites to vector of roots. ( {} {}' ) Finds next line in the Pascal triangle. ( Q P ) Solves P(x+1)-P(x)=Q(x). Internal polynomial function.
37D006
ROOTM2ROOT
0F2007 0F3007
PASCAL_NEXTLINE
DELTAPSOLVE
48.1
48.1.1
Addr. 46F006
Reference
Limits and Series Expansion
Name SYMTAYLOR Description ( symb id %/z symb ) Taylor series expansion around point 0 (McLaurin's series) with regard to given variable, and of the given order. ( DL-l reste-l truncated_DL ) Series expansion truncation. ( expression X=a|X %|zint ) a lim DL-l rest-l num-l/deno-l equiv-l lvar # Series expansion. #=1 for X=a-h or X=-1/h. ( symb DL-l reste-l num-l/deno-l equiv.-l lim. lvar flag ) lim. = { symf direction } ( symb { DL-l reste-l num-l/deno-l equiv.-l } flag ) ( # lvar equiv-l lvar lim ) ( reste-1-l reste-2-l reste-l ) ( n/d # n/d-l equiv % ) ( {} # {} / {}-equiv-l {}-equiv-l { # # # } )
471006 472006
TRUNCDL LIMSERIES!
477006
LIMIT!
386
48.1. Reference Addr. 483006 48C006 48E006 490006 49E006 4A1006 4B6006 4BA006 4BD006 4BE006 4BF006 4C0006 4C2006 4C3006 15C006 Name LIM+-! LIMDIVPC! LIMPROFEND! LIM%#! LIM#VARX! HORNEXP! VARCOMP! VARCOMP32! LIMVALOBJ! LIMVAL! EQUIV! LVARXNX2! FindCurVar LIMVAR! RISCH13
387 Description ( DL1...DLn #n op DL flag ) DL = { DL-l reste-l num-l/deno-l equiv-l }. ( #ordre num-l deno-l num-l deno-l ) ( num deno #prof num deno ) ( num-l deno-l {%...%} num-l' deno-l' #prof {%...%} ) ( lvar lvar #varx ) ( lim lvar X-l reste-l lvar DL reste-l ) ( var1 var2 flag ) ( var 0: ) ( ob lvar symb ) ( ob coeff val ) ( {} lequiv equiv ordre ) ( ob ob lvarx lvarnx ) ( symb symb ) Sets a new current var if needed. ( symb symb lvar ) ( {}/{}' {}'' ) Assuming {}' has length 1, divides all elements of {} by this element. Used by RISCHext and by SERIES to have a nicer output of series.
48.1.2
Addr. 3DC006 1A1006
Derivatives
Name PDer DERIVext Description ( {} der ) ( ob id ob' ) ( ob sym ob' ) ( ob V V' ) Calculates the derivative of the object. For a list argument calculates the gradient with respect to the variables in the list. If the variable is a symbolic, the rst variable in it is used. Note that the gradient is a vector quantity, thus the result is returned as a list.
48. Calculus Operations Description ( ob id ob' ) Main entry point for derivative with respect to a identier. ( ob ob' ) Main entry point for derivative with respect to the identier stored in LAM1. ( symb symb' ) Derivative of symb with respect to the variable stored in LAM1. ( Meta Meta' ) Derivative of Meta object. ( Meta Meta' ) Meta derivative and negate. ( Meta&+ Meta' ) Meta derivative of addition. ( Meta&- Meta' ) Meta derivative of subtraction. ( Meta&* Meta' ) Meta derivative of multiplication. ( Meta&/ Meta' ) Meta derivative of division. ( Meta& Meta' ) Meta derivative of power. ( Meta Meta' ) Meta derivative of a function. ( symb_id_; sym_fcn_; xDER #3 Meta' ) Meta derivative of a derivative of a function. ( Meta Meta' ) Meta derivative of a dened integral. ( Meta Meta' ) Meta derivative of an undened integral. ( Meta Meta' ) Meta derivative of IFTE. ( Meta Meta' ) Meta derivative of EXP. ( Meta Meta' ) Meta derivative of LN.
1A4006
DERIVIDNT1
1A5006
DERIV
48.1. Reference Addr. 1B6006 1B7006 1B8006 1B9006 1BA006 1BB006 1BC006 1BE006 1BF006 1C0006 1C1006 1C2006 1C3006 1C4006 1C5006 1C6006 1C7006 1C8006 1C9006 Name METADERLNP1 METADERLOG METADERALOG METADERABS METADERINV METADERNEG METADERSQRT METADERSQ METADERSIN METADERCOS METADERTAN METADERSINH METADERCOSH METADERTANH METADERASIN METADERACOS METADERATAN METADERASH METADERACH Description ( Meta Meta' ) Meta derivative of LNP1. ( Meta Meta' ) Meta derivative of LOG. ( Meta Meta' ) Meta derivative of ALOG. ( Meta Meta' ) Meta derivative of ABS. ( Meta Meta' ) Meta derivative of INV. ( Meta Meta' ) Meta derivative of NEG. ( Meta Meta' ) Meta derivative of SQRT. ( Meta Meta' ) Meta derivative of SQ. ( Meta Meta' ) Meta derivative of SIN. ( Meta Meta' ) Meta derivative of COS. ( Meta Meta' ) Meta derivative of TAN. ( Meta Meta' ) Meta derivative of SINH. ( Meta Meta' ) Meta derivative of COSH. ( Meta Meta' ) Meta derivative of TANH. ( Meta Meta' ) Meta derivative of ASIN. ( Meta Meta' ) Meta derivative of ACOS. ( Meta Meta' ) Meta derivative of ATAN. ( Meta Meta' ) Meta derivative of ASINH. ( Meta Meta' ) Meta derivative of ACOSH.
389
48. Calculus Operations Description ( Meta Meta' ) Meta derivative of ATANH. ( meta-symb arg1 ... argk der1 ... derk #k op ) Finds derivative of arguments. ( Meta1 Meta2 Meta2&Meta1'&* ) Meta derivative utility. ( Meta1 Meta2 Meta2&SQRT&INV&Meta1'&* ) Meta derivative utility.
1CB006 1CC006
pshder* SQRTINVpshd*
48.1.3
Addr. 07F007 2C5006
Integration
Name ODE_INT IBP Description ( symb idnt symb ) Integration with addition of a constant. ( u'*v u u*v -u*v' ) Internal integration by parts. If u is a constant return INTVX(u'*v)+u. If stack 2 is a list it must be of the form { olduv u'*v } then olduv will be added to u*v at stack level 2. This permits multiple IBP in algebraic mode, e.g. IBP(ASIN(X)2,X) IBP(ANS(1),sqrt(1-X2)) IBP(ANS(1),C) the last step with an integral containing a cst C. ( symb inf sup x symb|x=sup symb|x=inf ) Evaluates an antiderivative between 2 bounds Does not check for discontinuities of symb in this interval. ( symb inf sup vx symb inf sup vx ) Warns user for singularity. ( symb x int[$,x, symb, xt] ) Return unevaluated integral.
2D0006
PREVALext
2D1006 2D2006
WARNSING INText
391 Description ( f(x) x y F(y) where F'=f ) Undened integration. No limit for underdetermined form. ( {} prim )
3DD006
INTEGRext
48.1.4
Addr. 3D2006
Partial Fractions
Name PARTFRAC Description ( o symb ) Partial fraction expansion of o with respect to the current variable. ( o list symb ) Partial fraction expansion of o. lvar must be bound to LAM2, list is =lvar if o is in external format. list is NULL{} if o is still in internal format.
3D3006
INPARTFRAC
48.1.5
Addr. 07E007
Differential Equations
Name DESOLVE Description ( list symb1 list_sols ) ( symb symb1 list_sols ) Solves ordinary differential equation. For some ode's returned level2 is not symb1. ( 2nd_member char_eq solution ) Linear differential equation with constant coefcients. ( eq. carac sol generale ) ( 2nd membre, eq carac eq. carac, sol part ) ( V M V' ) M is the matrix of the system. V is the vector of the 2nd members. ( type ) Store ode type in variable ODETYPE.
081007
LDECSOLV
085007
ODETYPESTO
48. Calculus Operations Description ( symb symb symb-y symb-x T ) ( symb symb F ) Tries to separate symb as a product of a function of y and a function of x.
48.1.6
Addr. 087007
Laplace Transformation
Name LAPext Description ( symb symb' ) Laplace transform for polynomial*exp/sin/cos. Returns LAP() for unknown transforms. ( symb symb' ) Inverse Laplace transform for rational fractions. Delta functions for the integral part. ( ck rk ck*exp[rk*x] )
088007
ILAPext
08B007
ILAPEXP
Chapter 49 Summation
In this chapter, you will nd the main entries related to summation, and also some sub-routines used by those entries.
49.1
Addr. 0F9007 0FB007
Reference
Name SUM SUMVX Description ( sym idnt sym ) Internal SUM. The variable can be specied. ( sym sym ) Internal SUMVX. Works always with respect to the current variable. ( sym sym ) Discrete rational sum. ( f shift f' ) Taylor shift for rational fractions. ( ob ob flag ) Taylor shift for rational fractions. Returns TRUE if ob is a cst fraction. ( symb symb ) Tests and does hypergeometric summation. ( z/symb symb ) Discrete summation (hypergeometric case). ( meta meta flag ) Tests for meta to be cst with respect to current var. ( f(n,k) n k d C T ) ( f(n,k) n k d F ) Zeilberger algorithm * NOT IMPLEMENTED YET*. 393
108007
ZEILBERGER
394 Addr. 109007 10B007 11C007 10D007 0D9007 0DA007 3C1006 Name SYMPSI SYMPSIN %%PSI IBERNOULLI NDEvalN/D PEvalN/D
vgerxssSYMSUM
49. Summation Description ( sym Psi(x) ) Digamma function. ( sym int Psi(x,n) ) Digamma function. ( %%x %% ) Digamma function. ( #/zint Q ) Bernoulli numbers. ( num deno n d num' deno' ) Evals list poly over a list fraction. ( P n d num d # ) Evals list poly over a list fraction. ( Meta2 Meta1 meta ) Symbolic sum with tests for two zints. lam'sumvar bound to 'id/lam' and lam'sumexpr to 'expr'.
50.1
50.1.1
Addr. 252006 253006 256006 0E1006 0E2006 0E3006 0E4006 0E5006
Reference
Modulo Operations
Name
FLAGFACTORMOD
Description ( symb symb ) FACTOR modulo. ( M M' ) FACTOR modulo for amtrices. ( {contfrac} fraction ) Converts continued fraction to rational. ( Q Z Zn Q' ) Computes value of polynomial mod Zn. ( Q1 Q2 Zn Q' ) Polynomial addition modulo Zn. ( Q1 Q2 Zn Q' ) Polynomial subtraction modulo Zn. ( Q1 Q2 Zn Q' ) Polynomial multiplication modulo Zn. ( Q1 Q2 Zn Qquo Qrem ) Polynomial division modulo Zn. In regular division the coefcients in the remainder can increase very quickly to tens of digits, thus it is important to normalize the coefcients whenever possible.
395
50. Modular Operations Description ( Q Zn Q' ) Polynomial inversion modulo Zn. ( Q1 Q2 Zn Q' ) Polynomial GCD modulo Zn for univariate polynomials. The result is made monic. ( symb id id symb' ) ( symb id id {} ) Internal SOLVE. ( symb id symb' ) ( symb id {} ) Like ISOL1 if isolag is set. Otherwise returns the list of all found solutions. ( Lpoly Lidnt Lidnt sols ) If no extension in Lpoly, calls ALG48 GSOLVE Otherwise, solves by Bezout "Gaussian" elimination. In the latter case, if system seems underdetermined, Lidnt is truncated. Then the system must be exactly determined and polynomials must be prime together. ( meta of roots list of roots ) Drops tagged roots. ( poly-l {r1...rk} # P[r1...rk] ) Top-level call. Poly-l might be a matrix. ( P { r } P[..r..] ) ( Q { F1 mult1 .. Fn multn } ) ( Q F1 mult1 .. Fn multn #2n ) Full square-free factorization of object. The result is given as a Meta object. ( ob ob %1 #2 ) Square free factorization of unknown (?) object. See MSQFF. ( Z Z1 mult1 .. Zn multn #2n ) Full factorization of an integer.
4C8006
BEZOUTMSOLV
4CE006
%1TWO
4CF006
MZSQFF
397 Description ( Meta curfac %n newfac T Meta curfac %n+1 ) ( Meta curfac %n newfac F Meta' newfac %1 ) Adds integer factor to factor list. If the factor is the same as the last time, only the multiplicity is increased. ( P Meta ) Full square-free factorization of a polynomial with a recursive call on the GCD of all coefcients. ( P-list S1 %1 ..Se-1 %e-1 %e ee Te Re ) Square-free factorization. ( ob {} ) Gets list of all ids present in ob. ( symb symb x lvarnx lvarx ) Finds variable of symb depending on current variable and other variable. Using LVAR is impossible here because of sqrt. ( ob flag ) Returns TRUE if symb is polynomial with respect to current variable. ( symb1 symb2 symb1 symb2 flag ) Returns TRUE if symb1 and symb2 are polynomial with respect to current variable. ( symb symb flag ) Returns TRUE if symb is independent of current variable. ( ob {} ) Recursive search of all variables. ( o #depth o lvar ) ( symb symb lvar ) ( ob ob {} ) List of variables. Square roots are included in the list of rational operators.
4D2006
MLISTSQFF
4D3006
METASQFFext
4DE006 4DF006
LIDNText LVARXNXext
4E0006
ISPOLYNOMIAL?
4E1006
2POLYNOMIAL?
4E2006
VXINDEP?
50. Modular Operations Description ( ob ob {} ) Like LVARext but the current variable is added using >HCOMP. Square roots are included in the list of rational operators. ( {} {}' ) If VX is in the list then moves it to the beginning of the list. Otherwise does nothing. ( {} {} ) If VX is in the list then moves it at the beginning. Otherwise VX is added to the beginning of the list. ( symb lidnt symb lidnt lvar ) lvar is the list of variables in symb, but elements of lidnt are moved to the beginning of lvar. ( {} ) Returns the list of rational operator with sqrt appended to the list. ( {} ) List of basic "rational" operators without square root. ( {} ) List of basic "rational" operators with square root. ( ob listop lidnt ) ( Meta listop lidnt ) Determines list of variables in ob (or Meta) using the given list of basic "rational" operators. ( ob # ) Returns the max number of embedded lists in ob. ( objet # depth ) ( ob ob ' ) Trims object.
4E9006
VX>
4EA006
VX!
4EC006
LIDNTLVAR
4ED006
LISTOPRAC
4EE006
LISTOPext
4EF006
LISTOPSQRT
4F0006
LVARDext
4F2006
DEPTHext
4F3006 4F6006
DEPTHOBJext TRIMOBJext
399 Description ( Q Q ) Recursively tests if Q is a list of one constant element. This is much faster than TRIMOBJext and sufcient for the output of programs which are trimmed on the y. ( meta {} ) Equivalent to {}POLY TRIMOBJext. ( ob ob' ) Trims small numbers (less than epsilon). ( v1 v2 flag ) Returns TRUE if v1 is lexicographically after v2. ( Q Z Q' ) ( P P Z T depth ) ( P P ? F #0 ) Step 1 for gcdheu: Returns FALSE if gcdheu can not be applied (e.g. if P contains irrquads). Returns TRUE otherwise, Z is the max of all integers of P or 2*max if there are complex in P. ( A B a b c pr[pgcd] A'/G' B'/G' flag ) Heuristic GCD.
0EB006 104006
PZadic LISTMAXext
0EC006
GCDHEUext
51.1
Addr. 237006
Reference
Name SIGNE Description ( symb sign ) Compute the sign table of the expression with respect to the current variable. Internal version of the UserRPL command SIGNTAB. ( expr sign ) Sign table of a polynomial or rational expression. ( sign ) Returns undened sign table. ( sign ) Returns always positive sign table. 400
0DC007
SIGNE1ext
0DE007 0DF007
SIGNUNDEF SIGNPLUS
51.1. Reference Addr. 0E0007 0E1007 0E2007 0E3007 0E4007 0E5007 0E6007 0E7007 0E8007 0E9007 0EA007 0EB007 0EC007 0ED007 0DB007 Name SIGNMOINS SIGNELN SIGNEEXP SIGNESIN SIGNECOS SIGNETAN SIGNEATAN SIGNESQRT SUBSIGNE SIGNERIGHT SIGNELEFT >SIGNE SIGNE> SIGNMULText POSITIFext
401 Description ( sign ) Returns always negative sign table. ( sign sign ) Returns ln of a sign table. ( sign sign' ) Returns exp of a sign table. ( sign sign' ) Returns sin of a sign table. ( sign sign' ) Returns cos of a sign table. ( sign sign' ) Returns tan of a sign table. ( sign sign' ) Returns atan of a sign table. ( sign sign' ) Returns sqrt of a sign table. ( sign min max sign' ) Truncates a sign table. ( sign ob sign' ) Places ob at the end of a sign table. ( sign ob sign' ) Places ob at the beginning of a sign table. ( sign sign' ) Prepends { -innity ? } to a sign table. ( sign sign' ) Appends { ? +innity } to a sign table. ( sign1 sign2 sign' ) Multiplies two sign tables. ( ob ob flag ) Tries to determine if ob is positive. In internal representation, this depends on increaseag so that x-1 is positive if increaseag is cleared, negative otherwise, because x is assumed to tend to +innity or zero. ( ob ob flag ) Returns sign of an expression. Error if unable to nd sign.
0EE007
ZSIGNECK
51. Sign Tables Description ( ob zint ) Returns sign of an expression. zint=1 for +, -1 for -, 0 for undef. Expression does not need to be polynomial/rational. ( meta zint ) Returns sign of a meta symbolic. zint=1 for +, -1 for -, 0 for undef. Expression does not need to be polynomial/rational. ( symb inf sup vx symb inf sup vx flag ) Checks for singularities in expr.
0F1007
zsigne
07D007
CHECKSING
Chapter 52 Errors
The CAS error messages all have numbers starting with DE. You can get a full list in Appendix E. Entries ERABLEERROR and GETERABLEMSG add DE00 to the message number, so you only specify the last two digits of the message number. You can naturally use the error commands described in Chapter 22 with the CAS errors, using the full error numbers.
52.1
Addr. 57E006 57D006 090006 091006 092006 57F006 580006
Reference
Name ERABLEERROR GETERABLEMSG ErrInfRes ErrUndefRes ErrBadDim CANTFACTOR TRANSCERROR Description ( # ) Calls CAS Error. ( # $ ) Get string in erable messages table. Error 305h Generates "Innite Result" error. Error 304h Generates "Undened Result" error. Error 501h Generates "Invalid Dimension" error. Error DE1Ch Generates "Unable to nd factor" error. Error DE20h Generates "Not reducible to a rational expression" error. Error DE21h Generates "Non unary operator" error. Error DE26h Generates "CAS internal error" error. 403
581006 582006
NONUNARYERR INTERNALERR
52. Errors Description Error DE28h Generates "Operator not implemented (SERIES)" error. Error DE2Ah Generates "No solution found" error. Error DE2Ch Generates "No solution in ring" error. Error DE32h Generates "No name in expression" error. Error DE35h Generates "Integer too large" error. Error DE36h Generates "Unable to nd sign" error. Error DE46h Generates "Negative integer" error. Error DE47h Generates "Parameter is cur. var. dependent" error. Error DE49h Generates "Non polynomial systrem" error. Error DE4Dh Generates "Complex number not allowed" error. Error DE4Eh Generates "Polyn. valuation must be 0" error. Error DE4Fh Generates "Mode switch not allowed here" error. Error DE50h Generates "Non algebraic in expression" error. ( seco action ) ( ob ) Execute object if display ag is set.
58A006 58B006
NONPOLYSYST COMPLEXERR
58C006
VALMUSTBE0
58D006
SWITCHNOTALLOWED
119007
NONALGERR
58E006 58F006
ERR$EVALext Sys1IT
53.1
Addr. 08F007 090007 091007 092007
Reference
Name CFGDISPLAY NEWVX NEWMODULO SWITCHON Description ( ) Display current conguration of the CAS. ( ) Input new current variable from the user. ( ) Input new modulo from the user. ( #flag ) Asks the user if a certain mode may be switched on by toggling system ag #ag. Errors if the user does not want to switch. ( #flag ) Asks the user is a certain mode may be switched off by toggling system ag #ag. Error if the user does not want to switch. ( # # $ ) Find the name of a ag. ( ) Internal version of User PUSH command: stores the current ag settings and path in the CASDIR/ENVSTK variable.
093007
SWITCHOFF
094007 1DC007
FLAGNAME (PUSHFLAGS)
405
53. CAS Conguration Description ( ) Internal version of User POP command: pops the last pushed ag settings and path from the CASDIR/ENVSTK variable. ( ) Turns complex mode on. Depending on system ag 120, the user is asked rst. ( ) Turns complex mode off. Depending on system ag 120, the user is asked rst. ( ) Turns exact mode on. Depending on system ag 120, the user is asked rst. ( ) Turns exact mode off. Depending on system ag 120, the user is asked rst. ( ) Set complex mode, refresh conguration display. ( ) Set complex mode. ( flag ) Test complex mode. ( ) Set real mode, refresh conguration display. ( ) Set real mode. ( ) Set exact mode, refresh conguration display. ( ) Set exact mode and gcd mode. ( ) Set numeric mode, refresh conguration display. ( ) Clear exact mode. ( flag ) Test exact mode.
095007
COMPLEXON
096007
COMPLEXOFF
097007
EXACTON
098007
EXACTOFF
099007
COMPLEXMODE
0A1007 0A2007
CLREXACT EXACT?
53.1. Reference Addr. 0A3007 0A4007 0A5007 Name STEPBYSTEP NOSTEPBYSTEP VERBOSEMODE
407 Description ( ) Set step by step ag, refresh display. ( ) Clear step by step ag, refresh display. ( ) Set verbose mode, refresh conguration display. ( ) Set silent mode, refresh conguration display. ( ) Set recursive mode, refresh conguration display. ( ) Set nonrecursive mode, refresh conguration display. ( ) Set positive mode, refresh conguration display. ( ) Set positive mode. ( ) Set positive innity mode, refresh conguration display. ( ) Set positive innity mode. ( ) Set full data mode, refresh conguration display. ( ) Set sparse mode, refresh conguration display. ( ) Set rigorous mode, refresh conguration display. ( ) Set sloppy mode, refresh conguration display.
0A6007
SILENTMODE
0A7007
RECURMODE
0A8007
NONRECMODE
0A9007
PLUSAT0
0AA007 0AB007
SETPLUSAT0 PLUSATINFTY
0AC007 0AD007
CLRPLUSAT0 SPARSEDATA
0AE007
FULLDATA
0AF007
RIGORMODE
0B0007
SLOPPYMODE
53. CAS Conguration Description ( flag ) Test sloppy mode. ( ) Saves CAS ags and current var. ( ) Restore CAS ags and current var. ( ) Execute next runstream object with ag protection. ( Z ) Fetch MODULO from the home directory. ( sym ) Fetch PERIOD from the home directory. ( id ) Fetch VX from home directory. ( ob ) Store object in VX. ( ob ) Store object in MODULO. ( % ) Fetch EPS from home directory. ( id id id T ) ( id id F ) Test if id is in the REALASSUME list. ( id ) Add idnt to the list of real var. ( ) Reset CAS cong. ( %version ) CAS version number.
CASFLAGEVAL
54.1
Addr. 1D1006
Reference
Name MENUXYext Description ( #2 #1 {} ) Make list of Erable commands between the given numbers. ( $6...$1 ) If the CAS quiet ag is not set, displays the six strings as menu keys. Otherwise does nothing. ( prg flag ) Return best CHOOSE command. ( {} ) Offers a selection to the user. If Flag -117 is set, only installs a menu. If not, offer a CHOOSE box. ( {} ) Menu for CAS. ( {} ) Base algebra menu. ( {} ) Complex operations menu. ( {} ) Trigonometric operations menu. ( {} ) Matrix operations menu. 409
08D007
MENUext
0B2007 0B3007
MENUCHOOSE? MENUCHOOSE
410 Addr. 0B9007 0BA007 0BB007 0BC007 Name MENUARIT1 MENUSOLVE1 MENUEXPLN1 MENUDIFF1
54. CAS Menus Description ( {} ) Arithmetic operations menu. ( {} ) Solver menu. ( {} ) Exponential and logarithmic operations menu. ( ) Differential calculus menu.
55.1
Addr. 218006 1D6006
Reference
Name ISPRIME FLAGEXPAND Description ( z/% %0/%1 ) Internal ISPRIME. ( symb symb' ) Internal xEXPAND. Expands symbolic expression. ( symb symb' ) ( z symb ) Internal xFACTOR. Factors symbolic or number. ( symb {} symb' ) Internal xSUBST for the case that level 1 is an array or a matrix. ( symb symb' symb'' ) Internal xSUBST for the case that level 1 is a symbolic. ( symb id symb' ) Internal xSUBST for the case that level 1 is an id or a lam. ( symb symb' ) Internal xINTVX.
1D8006
FLAGFACTOR
1D9006
FLAGLISTEXEC
1DA006
FLAGSYMBEXEC
1DB006
FLAGIDNTEXEC
1DC006
FLAGINTVX
411
412 Addr. 1DD006 1DE006 1DF006 1E0006 1E1006 1E2006 1E4006 1E5006 1E6006 Name DERVX SOLVEXFLOAT SYMLIMIT
FLAGMATRIXLIMIT
55. Internal Versions of User RPL Commands Description ( symb symb' ) Internal xDERVX. ( % {} ) Internal xSOLVEVX for a oat. ( symb symb' symb'' ) Internal xLIMIT for scalars. ( [] symb []' ) Internal xLIMIT for matrices. ( symb symb' ) Internal xTAYLOR0. ( symb id z {} symb' ) Internal xSERIES. ( symb ) Internal xPLOTADD. ( symb1 symb2 symb3 symb4 ) Internal xIBP. ( symb1 symb2 symb3 symb4 ) Internal xPREVAL. Evaluates symb1 at the points symb2 and symb3 and takes the difference. ( [] id symb' ) Internal xRISCH for matrix arguments. ( symb id symb' ) Internal xRISCH for non-matrix argumetns. ( symb id symb' ) Internal xDERIV. ( symb symb' ) Internal xLAP. ( symb symb' ) Internal xILAP. ( symb symb' symb'' ) Internal xDESOLVE. ( symb1 symb2 symb3 ) Internal xLDEC. ( symb symb' ) Internal xTEXPAND. ( symb symb' ) Internal xLIN.
55.1. Reference Addr. 1F1006 1F2006 1F3006 1F4006 1F5006 1F6006 1F7006 1F8006 1F9006 1FA006 1FB006 1FC006 1FD006 1FE006 1FF006 200006 201006 206006 207006 Name FLAGTSIMP
FLAGLNCOLLECT
413 Description ( symb symb' ) Internal xTSIMP. ( symb symb' ) Internal xLNCOLLECT. ( symb symb' ) Internal xEXPLN. ( symb symb' ) Internal xSINCOS. ( symb symb' ) Internal xTLIN. ( symb symb' ) Internal TCOLLECT. ( symb symb' ) Internal xTRIG. ( symb symb' ) Internal xTRIGCOS. ( symb symb' ) Internal xTRIGSIN. ( symb symb' ) Internal xTRIGTAN. ( symb symb' ) Internal xTAN2SC. ( symb symb' ) Internal xHALFTAN. ( symb symb' ) Internal xTAN2SC2. ( symb symb' ) Internal xATAN2S. ( symb symb' ) Internal xASIN2T. ( symb symb' ) Internal xASIN2C. ( symb symb' ) Internal xACOS2S. ( z1 z2 z3 z4 ) Internal xIDIV2. ( symb1 symb2 symb3 symb4 ) Internal xDIV2.
FLAGEXPLN FLAGSINCOS FLAGTLIN FLAGTCOLLECT FLAGTRIG FLAGTRIGCOS FLAGTRIGSIN FLAGTRIGTAN FLAGTAN2SC FLAGHALFTAN FLAGTAN2SC2 FLAGATAN2S FLAGASIN2T FLAGASIN2C FLAGACOS2S STEPIDIV2 FLAGDIV2
55. Internal Versions of User RPL Commands Description ( symb1 symb2 symb3 ) Internal xGCD for the case with two symbolica arguments. ( symb1 symb2 symb3 symb4 symb5 ) Internal xEGCD for polynomials. ( symb1 symb2 symb3 symb4 symb5 ) Internal polynomial xABCUV. ( z1 z2 z3 z4 z5 ) Internal integer xIABCUV. ( {} {} symb ) Internal xLGCD. ( symb1 symb2 symb3 ) Internal xLCM. ( symb1 symb2 symb3 symb4 ) Internal xSIMP2. ( symb symb' ) Internal xPARTFRAC. ( symb symb' ) Internal xPROPFRAC. ( P(X) r P(X+r) ) Internal xPTAYL. ( symb1 symb2 symb3 symb4 symb5 ) Internal xHORNER. ( z z' ) Internal xEULER. ( A1 A2 A3 ) Internal xCHINREM. ( A1 A2 A3 ) Internal xICHINREM. ( symb id {} ) Internal xSOLVE for single equations. ( [] []' {}'' ) Internal xSOLVE for arrays of equations. ( symb id {} ) Internal xZEROS for single equations.
209006
PEGCD
20B006
ABCUV
55.1. Reference Addr. 21C006 21D006 21E006 21F006 220006 223006 229006 22A006 22B006 22C006 22E006 22F006 230006 231006 232006 233006 234006 235006 236006 Name ZEROSMANYEQ FCOEF FROOTS FACTORS DIVIS rref MADNOCK SYSTEM VANDERMONDE HILBERTNOCK CURL DIVERGENCE LAPLACIAN HESSIAN HERMITE TCHEBNOCK LEGENDRE LAGRANGE FOURIER Description ( [] []' {} ) Internal xZEROS for arrays of equations. ( [] symb ) Internal xFCOEF. ( symb [] ) Internal xFROOTS. ( symb {} ) Internal xFACTORS. ( symb {} ) Internal xDIVIS. ( M A M' ) Internal xrref. ( M symb1 []' []'' symb3 ) Internal xMAD. ( [] []' []'' {} []''' ) Internal xLINSOLVE. ( {} M ) Internal xVANDERMONDE. ( z M ) Internal xHILBERT. ( [exprs] [vars] [] ) Internal xCURL. ( [exprs] [vars] symb ) Internal xDIV. ( [expr] [vars] symb ) Internal xLAPL. ( symb A M A' A'' ) Internal xHESS. ( z symb ) Internal xHERMITE. ( %degree symb ) Internal xTCHEBYCHEFF. ( z symb ) Internal xLEGENDRE. ( A symb ) Internal xLAGRANGE. ( symb z C% ) Internal xFOURIER.
415
416 Addr. 238006 239006 23A006 23B006 23C006 23D006 23E006 23F006 241006 242006 243006 244006 245006 Name TABVAR FLAGDIVPC FLAGTRUNC FLAGSEVAL XNUM REORDER USERLVAR USERLIDNT ADDTMOD MADDTMOD SUBTMOD MSUBTMOD MULTMOD
55. Internal Versions of User RPL Commands Description ( symb symb {{}} grob ) Internal xTABVAR. ( symb1 symb2 z symb3 ) Internal xDIVPC. ( symb1 symb2 symb3 ) Internal xTRUNC. ( symb symb' ) Internal xSEVAL. ( symb symb' ) Internal xXNUM. ( symb id symb' ) Internal xREORDER. ( symb symb [] ) Internal xLVAR. ( symb [] ) Internal xLNAME. ( symb1 symb2 symb3 ) Internal xADDTMOD for scalars. ( M M' M'' ) Internal xADDTMOD for matrices. ( symb1 symb2 symb3 ) Internal xSUBTMOD for scalars. ( M M' M'' ) Internal xSUBTMOD for matrices. ( symb1 symb2 symb3 ) Internal xMULTMOD.
Chapter 56 Miscellaneous
In this chapter are listed the entries that did not t in any of the previous chapters.
56.1
56.1.1
Addr. 579006 57A006 57B006 57C006
Reference
Verbose Mode Display Routines
Name Verbose1 Verbose2 Verbose3 VerboseN Description ( $ ) Display message on line 1 if verbose mode on. ( $ ) Display message on line 2 if verbose mode on. ( $ ) Display message on line 3 if verbose mode on. ( $ # ) Display message on given line if verbose mode on.
56.1.2
Addr. 257006 258006 259006 25A006 25B006 25C006 25D006 25E006
Evaluation
Name EvalNoCKx* EvalNoCKx+ EvalNoCKxEvalNoCKx/ EvalNoCKx EvalNoCKxCHS EvalNoCKxINV EvalNoCKxMOD Description ( ob ob' ( ob ob' ( ob ob' ( ob ob' ( ob ob' ( ob ob' ( ob ob' ( ob ob' 417 ) ) ) ) )
418 Addr. 25F006 260006 261006 262006 263006 264006 265006 Name
EvalNoCKxPERM EvalNoCKxCOMB
56. Miscellaneous Description ( ob ob' ob'' ) ( ob ob' ob'' ) ( ob ob' ob'' ) ( ob ob' ob'' ) ( ob ob' ob'' ) ( ob ob' ob'' ) ( fnct x {} {}' ) Table of values.
TABVALext
56.1.3
Addr. 266006
Conversion
Name TOLISText Description ( o1..on #n Lvar Q1..Qn ) Convert meta of symbolic objects to internal form. ( Lvar Meta L L' ) Conversion of elements of Meta objec to user format. Meta does not contain the #n number of element. L is the list of depth of the elements of Meta. For example to convert a polynomial, a vector and a matrix: Lvar = { X } Meta = { Z1 Z3 } { Z0 Z1 } { { Z1 { Z1 Z0 } } } L = { #0 #1 #2 } L' = { 'X+2' { 0 1 } { { 1 X } } }.
267006
FROMLISText
56.1.4
Addr. 074007 073007
Qpi
Name QPI QpiZ Description ( ob ob' ) Internal xXQ. ( ob symb ) Calls Qpi% and converts the resulting (real) integers into zints.
419 Description ( symb symb' ) Internal xXQ for symbolics. ( [] []' ) Internal xXQ for arrays. Converts each element of the array. ( {} {}' ) Internal xXQ for lists. Converts each element of the list. ( %/C% symb ) Internal xXQ for real and complex numbers. ( % symb ) xXQ for reals, but does not convert numbers to zints. ( %' %' %'' ) Tries to nd a square number which is a factor of the argument. The algorithm only tries numbers smaller than 10242-1 and assumes that % is an integer. The returned results are such that %=(%')2*%''. For numbers which do not contain a square factor, %'=1 and %''=%. ( % %' %'' ) Approximates a real number with a fraction. Returns numerator %' and denominator %''. The accuracy of the approximation is determinated by the current display format.
077007
QpiList
07B007
Approx
56.1.5
Addr. 2E2006 2E3006 2E4006 2E5006 2E6006 2E1006
Innity
Name INFINIext MINUSINFext PLUSINFext ?ext POSINFext TESTINFINI Description ( '' ) ( '-' ) ( '+' ) '?' Pushed the undened symbolic. ( symb symb # ) Returns #1 if the symbolic contains ''. ( ob ob flag ) Test if object contains innity.
56. Miscellaneous Description ( symb symb # ) Returns #1 if the symbolic contains the undened symbolic '?'.
56.1.6
Addr. 2EA006 2EB006 2F1006 2E8006 2F2006 2E9006 2F4006 2F3006 2F5006 2F6006 2EC006 2F9006 2FA006 2EE006 2ED006 2EF006 2F0006 2F8006 2F7006
Built-In Constants
Name pi metapi meta-pi pisur2 metapi/2 pisur-2 meta-pi/2 metapi/4 meta-pi/4 pifois2 'xPI base_ln meta_e 'xi metai ipi metaipi metapi*2 deuxipi Description ( ' ' ) ( #1 ) ( xNEG #2 ) ( ' /2' ) ( 2 x/ #3 ) ( '- /2' ) ( 2 x/ xNEG #4 ) ( 4 x/ #3 ) ( 4 x/ xNEG #4 ) ( '2* ' ) ( xPI ) ( 'e' ) ( e #1 ) ( xi ) ( i #1 ) ( 'i* ' ) ( i x* #3 ) ( 2 x* #3 ) ( '2*i* ' )
56.1.7
Addr. 3F0006
List Application
Name DIVOBJext Description ( {o1...on} ob {o1/ob...on/ob} ) Division of all elements of a list by ob. Tests if ob=1. ( {o1...on} ob {o1/ob...on/ob} ) LOPDext calls QUOText for the division, unlike DIVOBJ which calls RDIVext.
3F2006
LOPDext
421 Description ( {} ob binop {}' ) Applies non-recursively << ob binop >> to the elements of the list. ( {} ob binop {}' ) Applies recursively << op binop >> to the elements of the list (not the list elements themselves). ( ob {} {}' ) Multiplies each element of the list by the given object. ( ob {} ob' ) ( ob {} {}' ) The list should be of the form { 'X=1' 'Y=2' ... } in the rst case or { 'X=1' 'X=2' } in the second case. In the rst case, all occurences of X in ob are replace by 1, or Y by 2, etc. In the second case ob is evaluated with X=1, X=2 successively. ( {} objet {}' ) ( {} prog {} ) Executes prog on each element of ob. ( symb prg symb ) ( composite composite ) Applies 1LAM non-recursively to all elements of the list. ( ob ob' ) Applies prg to ob, recursively for lists. prg is fetched from runstream.
26A006
LOPAext
10F006
LOPMext
45F006
LISTEXEC
26D006
CK1TONOext
56.1.8
Addr. 167006 168006 165006
Irrquads
Name TYPEIRRQ? DTYPEIRRQ? QXNDext Description ( ob flag ) Is ob an irrquad? ( ob ob flag ) DUP, then TYPEIRRQ?. ( irrq a b c ) b=0 and c=1 if stack level 1 is not an irrq.
56. Miscellaneous Description ( a b c irrq ) ( ob # c ) Finds depth and returns ultimate c of an irrq. ( irrq irrq' ) irrq-conjugate of an irrq. This is not the complex conjugate. ( irrq irrq sign ) Finds the sign of an irrq. Work always if irrq is made of Z. ( Zirr a2-b*c2 ) Irrq-norm of an irrquad. This is not the complex modulus. ( :: x<< a b c x>> { fact1 mult1 ... factn multn } ) Factorization of irrquads and Gauss integers. ( o1 o2 a1 b1 c1 a2 b2 c2 ) Returns irrquad decomposition of o1 and o2. with either c1=c2 or c1 and c2 have no factors in comon. c1<c2, ordering handled by LESSCOMPLEX? is made by type, then by CRC. ( ob {} {}' ) Add the C-part of all irrquads of object to the list.
QCONJext
509006
QABSext
51A006
QNORMext
4D4006
SECOSQFFext
124006
PREPARext
2DA006
LISTIRRQ
56.1.9
Addr. 3E7006 3FB006
Miscellaneous
Name PSEUDOPREP HSECO2RCext Description ( o2 o1 o2*a1.n o1 a1.n ) ( ob ob' ) Conversion of constants from internal to user form. ( seco symb ) Back conversion of complex. polarag should be disabled if not at the top level of rational expressions.
3FC006
SECO2CMPext
423 Description ( # {..{Q}..} {var1..varn} {..{ob}..} ) Back conversion of objects embedded at depth # in lists. Simplies var1..varn. ( # {..{Q}..} {var1..varn} {..{ob}..} ) Back conversion of objects embedded at depth # in lists. Does not simplify var1..varn. Conversion is done in asc. power if positivfag is set, which is useful for SERIES and LIMIT commands. ( P # symbpoly ) LAM2 must contain Lvar, # is the depth. ( # Meta_list Meta_symb ) LMA2 must contain Lvar, LAM1 is modied. ( ob ob ) LAM2 must contain Lvar, LAM1 is modied. ( ob Meta_symb ) LAM2 must contain Lvar, LAM1 is modied. ( symb idnt symb' ) Tries to nd idnt such that symb=0. Return a solution as an equality 'idnt=..' in symb'. ( ob ob 1 ) Returns number 1 of the selected type. The symbolic/ROMPTR one looks very strange it is used to avoid innity0/undef0 to return 1. ( ob ob' ) prg is fetched from the stack. Looks for all d1, d2, ... at the beginning of the name of idnt to determine if idnt represents a derivative of a user function. Stops if at a time the stripped idnt is in the current directory. Example 'd2d1Y' returns { #2 } << >> if 'd2d1Y' is not dened and 'd1Y' is dened as << >> or { #2 #1 } 'Y' if d2d1Y d1Y and Y are not dened.
401006
VAL2ext
121006
MP0
26C006
rpnQOBJext
56. Miscellaneous Description ( idnt ob ) Evaluates idnt (looks recursively for its content if dened). Does not error for circular denition, but displays a warning. ( idnt/lam ob ) Recursive content of an idnt. LAM1 to LAM3 must be bound. ( ob2 ob1 ob1/ob2 ) Simplied fraction (internal). ( ob2 ob1 ob2/ob1 ) Simplied fraction (internal). ( C2 C1 C1 C2_mod_C1 ) ( l1...ln #n-1 l1'...ln' #n-1 ) ( p p/pgcd pgcd ) ob is the gcd of all constant coefcients of P (integer, Gauss integers, irrquads with the implementation of the "gcd" for irrquads). ( ob ob zint ) PPZ with further check to ensure returning a zint. ( a z a mod z ) ( P r P[r] ) ( P r P[r] ) P must be a list polynomial. ( {} {} flag ) Returns TRUE if one element of {} is a symb containing a sqrt. ( symb flag ) ( symb flag ) ( symb ) Stores antiderivative in PRIMIT variable. ( symb symb flag ) ( symb n cn ) Computes n-th Fourier coefcient of a 2 periodic function.
29F006
RCL1IDNT
117007
PPZZ
425 Description ( ob1 ob2 ob1 ob2 flag ) Compares objects by type and then by CRC. ag is true if ob1 is less complex than ob2 (ob1>ob2). If ob1 or ob2 is an irrq, nd rst ultimate type of ob1 and ob2. If these ultimate types are equal sort is done by comparing the << depth. ( {} ) Table of special COS values (k*pi/12). ( {} ) Table of special TAN values (k*pi/12). ( symb nonrat_prg rat_prg symb ) Applies linearity. nonrat_prg is applied for a non rational part symb symb. rat_prg is applied for a rational part symb symb. Linearity is applied on symb. ( A B P Q R ) Writes a fraction A/B as E[P]/P*Q/E[R]. Q and positive shifts of R are prime together. ( P Q R P R Y T ) ( P Q R F ) Solves P = Q E[Y] - R Y for Y. ( fr Z ) Tests if a fraction (internal rep) is even/odd/none. Z=1 if even, -1 if odd, 0 if neither even nor odd. ( fraction-l N D % ) Extract trivial power of fraction. ( ob Meta ) Factorization of an extension.
106007
A/B2PQR
107007
GOSPER?
0CB007
FRACPARITY
0D5007 4D1006
FR2ND% MSECOSQFF
Part V Appendices
430
A. Development Tools
A.1
For System RPL development, the extable library is virtually indispensable. This library contains the tables of supported entry points and addresses. It is with the help of this library that you can write DUP and get the correct address for this command; without it, you would need to enter PTR 3188 every time or write an equate for this command manually. In disassembly (including the System RPL stack (see section A.3)), it allows you to get the name of the commands, instead of only their addresses. Basically, this library is pretty much essential. Transfer extable to your calculator and install it as any other library. That is all you need to do to use command names instead of addresses. Extable appears in the library menu, and it contains ve user-accessible commands. The rst command, nop, does nothing :-). Probably, there was a command in that position before, but it was removed, and another command that does nothing was put there not to change the other rompointers. The other four commands, fortunately, are sometimes useful :-) (if not directly then through the Emacs library). The GETADR command returns the address of an entry. Just put the name of the entry (a string) in level one and run it. The inverse operation is done by GETNAME: give it an address, and it will return the name of the entry. If you do not know the exact name of an entry, the last two commands will help you. Put a string with the rst few letters of the command in level one, run GETNAMES and, voil, a list with the names of all commands that start with those letters is returned. The last command, GETNEAR, is even more powerful: give it a string, and all commands whose names contain that string (even if in the middle of the command) will be returned.
A.2
Even though assigning keys is not directly related to System RPL programming, we will describe here the KEYMAN library, written by Wolfgang Rautenberg (e-mail: raut@math.fu-berlin.de). The latest version is 9.2001. This library simplies the assignment, deletion and recalling of keys, but, most importantly, allows a key to behave differently if it is pressed longer than usual or double pressed. You will nd several commands inside this library. The A?D command
431
is used to assign and delete keys. To assign something to a key, put the object in level one and press A?D shortly. Then, press the key you want to assign to (shifts and shift-holds work, of course). The key is assigned. To delete an assignment, press A?D for a slightly longer time, and then the key from which you want to remove the assignment. The command RclK allows one to recall the assignment of any key. It works like the previous commands: press it (briey) and then the key. A longer press will return a list of all the keys assigned. The commands above are just other ways to do what was already possible with the built-in commands. But the real power is in the IfE?P, IfD and IfL commands. The rst serves two functions: it allows a key to have different meanings when in edit mode and when not, or to have different meanings when in program mode and when not. To use it, put the object to be run in edit or program mode in level two, the object to be run in normal mode in level one, and press IfE?P. A short press will create a program that evaluates the object in level two if the calculator is in edit mode, or the object in level one if not. A longer press does the same, but the test is based on whether program entry mode is active or not. The IfD and IfL commands are similar. To use IfD, put in level two the object to be run if the key is pressed twice (like with a computer mouse) double pressed and put in level one the object to be run if the key is pressed once. Run IfD, and you will have a single program that executes one of the objects according to how the key was pressed. Note that assignments produced with IfD will slightly delay execution on a single keypress, since the calculator must wait to see if the double press will happen or not. The command IfL is similar, but it allows different actions based on how long the key is pressed: you have seen this behaviour in the A?D command. The object to be run in a longer press is in level two. All the If commands have an extra feature. Any of the two objects in the stack can be a real number in the form rc.p, where r is the row, c is the column and p is the plane (normal, left-shifted, right-shifted, left-shift-hold, etc.). In the program created with the If commands, these numbers will be replaced by the standard key assignment of the corresponding key. This is really useful for making assignments which do not disturb the normal function of a key but just add functionality in a special mode or keypress technique. If you give a real number that is not a valid keycode, it will be replaced by a command to make a beep. Two other commands can sometimes be useful: TO? inserts the System RPL command TakeOver in the beginning of the program when the key
432
A. Development Tools
is pressed shortly. This is necessary if you want the command to be executed while the command line is active. A longer press inserts UnlockAlpha in the beginning of the program, useful when it is assigned to an alpha-shifted key. Finally, K&SA recalls the keycode and standard assignment for any key. This is used when you want to add new functionality to a key. When this standard assignment is a command in a library (that is, a ROM Pointer, also called a XLIB name), the pointer is recalled to level two, and its contents is put in level one. In the following sections, we will show some examples of key assignments built with KEYMAN commands.
A.3
Hacking Tools
The tools described here make the life of the programmer easier. They give access to some functions which are normally not available for pure User RPL users of the calculator. First, the built-in tools in the HP49G will be described. Later, a third-party library will be described. Before describing the built-in tools found in library 256, we will mention a ag that is very useful to System RPL programmers: ag 85. When this ag is set, the System RPL Stack is active: in the stack the objects are decompiled using the System RPL decompiler before being displayed. That means that, where one would see just External with the normal stack, the name for the entry (or PTR and the address, if no name is found) will be displayed, if you have the extable library (see section A.1) installed. Play with it a bit and you will see how useful it can be. Some objects (most notabily real numbers and integers) keep their usual notation, but in the interactive stack all objects are decompiled. This System RPL Stack is like the one produced by the command SSTK command of the JAZZ library for the HP48 calculators. Probably you will be switching between the two kinds of stack display all the time. It is a good idea to assign a simple program to a key to toggle this display. A possibility is to assign it to Right-shift MODE. This normally is the key that marks the end of selection in edit mode. Since this key is unused when not in edit mode, it is a good example of the use of the KEYMAN library. To create this assignment, rst put the program to be run when in edit mode in level two. This is easy: just use keycode 22.3. Then, write a simple User RPL (or System RPL, if you want) program to toggle ag 85 (this task if left to the reader but read the description of OT49 in section A.3.1 rst). Finally, press IfE?P briey and use TO? on the resulting program (because it must
433
be able to run while in edit mode), and assign it to the key, with A?D or the ASN command. Library 256 contains some useful tools for the programmer. This library does not show up in the library menu (because it does not have a title), but you can get a menu with its commands by typing 256 MENU. If the library is attached (as it should be), you can type the commands, look up them in the catalog and an option will appear in the Apps menu, which says Development lib, giving access to all the commands in the library. Here is a description of the commands present in the library: Command H Description To hex: This converts an object into a string of hexadecimal characters. A common tool since the HP48 days to ease transfer of binary objects. From hex: This is the opposite transformation: creates an object from a string of hexadecimal characters. To address: Given an object, this command returns the address of the object, which is always a ve-nibble hxs. Objects whose address is less than # 80000h are in ROM, and objects whose address is greater than that are in RAM. From address: This recalls the object at the specied address. String to hex: Converts a string into its characters hexadecimal representation. For example, since 5A, 59 and 58 are the hexadecimal codes for X, Y and Z respectively, "XYZ" becomes "8595A5". Hex to string: The opposite transformation. Make list: Creates a list from a user meta object or another composite. A user meta object is any number of objects in the stack followed by a count represented as a real number. Be careful, because this command is not sufciently argumentprotected. Make algebraic: Creates an algebraic object from a user meta object or another composite. This may easily result in 'Invalid Expression'. Make program: Creates a program from a user meta object or another composite. From composite: Explodes any composite object into a user meta object.
H A
A SH
HS LST
ALG
PRG COMP
A. Development Tools Description To RAM: Dumps any ROM object into RAM. Can extract some commands for disassembly, but see section A.5 for more information. Reverse string: Reverses a string, very fast. Writes data to any address in RAM. Put in level two a hxs with the address, and in level one a string of hex digits to be written at that address. This is a very easy way of destroying any masterpiece you have created on the calculator :-). Extracts raw hex digits from any address. Put the address in level two (an hxs) and the number of nibbles to get (another hxs) in level one. Address peek: Like PEEK, but always gets ve nibbles, returning them as a hxs. Real system binary: Converts reals to bints and viceversa. System binary binary: Converts bints to hxss, and viceversa. Long real real: Converts long reals to reals and vice-versa. String name: Converts strings to identiers (global names) and vice versa. Long complex complex: Converts long complexes to complexes and vice-versa. From ASM: Disassembles Code objects (machine-language) into source code. Create library: A library creator. This is described in Appendix B. Calculates the CRC. The argument is a string of hex digits. Make string: Creates a string with the number of characters given in level one (a real number). Returns a string with the internal Serial Number of the HP49. Provides access to the MASD compiler. See section A.4 for more information. Used in conjunction with ASM. See section A.4 for more information. Disassembles an object. See section A.5 for more information. Creates a rompointer (XLIB name) from the library number (level two) and command number (level one). It also explodes rompointers into its two components.
SREV POKE
PEEK
APEEK RSB SBB LRR SN LCC ASM CRLIB CRC MAKESTR SERIAL ASM ER S2 XLIB
435
A.3.1
Wolfgang Rautenberg is the author of a library called Operating Tools (or OT49 for short) with several commands, some of which are useful to the System RPL programmer. The latest version of this library is 3.2002. OT49 contains a library creator and a library splitter (written by Peter Geelhoed). To split any library, just put its number in the stack and run DL. The DType command displays the type of the object in level one. If that object is a rompointer (XLIB) or ashpointer, its contents is recalled (unless it is pure machine-language code) and the contents type is displayed, with an asterisk appended. One of the most useful commands is 3tog. It toggles between three representations of composite objects: as a list, as a program and as a usermetaobject. This can be used to manipulate System RPL programs without actually decompiling them. 3tog explodes a program onto the stack, you can use stack commands to rearrange things and then 3tog again to rebuild the program. Another very useful command is Fl. It is a ag toggler. Just give the number of the system or user ag, run it, and the ag is toggled. It will also display in the header what has just been done. The MDA command compiles or decompiles an object (depending wheter the input is a string or another object).
A.4
The Compiler
The compiler included in the HP49G calculator is MASD. It is a newer version of the compiler found in the MetaKernel program for HP48G calculators. If you have already used the MetaKernel, then you can probably skip most of this section. But, even if you have never used MASD, there should be no difculties learning how to use it. There are no big differences between MASD syntax and that of other System RPL compilers such as JAZZ (for the HP48 calculators), the HP Tools or the GNU Tools. MASD is called with the command ASM. It expects a string in level one, and returns the compiled object. If there are errors, the string and a list will be put in the stack. This list is used by the ER command, described shortly. The rst difference to be observed from those that are coming from JAZZ or one of the PC Tools is that MASD, for some unknown reason, needs the
436
A. Development Tools
source to end with a @ character. All source code les must be identied with this token, or MASD will refuse to even look at them. The character must be on a line by itself, at the start of the line, and with no character after it (not even a newline). This way, it is pretty much just cumbersome. (To be useful, it would be the character marking the end of the source, but there should not be all those restrictions on its placement, and text after it should be allowed and ignored.) However, for the Emacs RPLCPL (see section A.6), the @ acquires at least one purpose: it allows the calculator to automatically distinguish between a System RPL source le and a Uer RPL program or command line. The other thing to note concerns the current MASD mode. There are two modes, selected by ag 92: Assembly Language mode (ag 92 cleared) and System RPL mode (ag 92 set). Probably, you will set ag 92 and thus MASD will be by default in System RPL mode. Then, nothing else needs to be changed to compile System RPL programs (just add the @ in the end). It is still possible to compile Assembly Language code in System RPL mode: just surround the code between CODE and ENDCODE. If you are in Assembly Language mode, it is possible to compile System RPL code by inserting these two lines before the source:
1 !NO CODE !RPL
Both are called directives. The !NO CODE directive tells MASD to compile our source as System RPL code, and not as Machine Language code. (Once more, you can insert assembly language code between CODE and ENDCODE.) It is a good idea to always put these two lines at the start of all programs even if you use System RPL mode: this way, the source can be compiled regardless of the ag settings. Here is a simple program source ready for MASD:
1 !NO CODE !RPL :: DUPTYPEZINT? case FPTR2 ^Z>R DUPTYPEREAL? ?SEMI SETTYPEERR ; @
10
437
The above is the disassembly of the CKREAL entry. As you can see, it automatically converts integers to real numbers. It is a nice idea to assign the ASM command to a key: you will need it many times. If there was an error during compilation, the original string is put in level two, and a list is put in level one. In this case, run the ER command. It will display a list of errors for you to choose, and will jump directly to that error in the source. Correct the error, press ENTER and the choose another error, until all errors have been corrected. Then, run ASM (and ER, if necessary) again. Better yet, use the ASM2 command from library 257, which calls ASM and then, if there was any error, ER.
A.4.1
A System RPL program can call three different kinds of entries: normal entries, which point to some address in ROM, ashpointer entries, which point to a command in one of the HP49s ash banks, and rompointer entries, which point to a command in a library (built-in or not). For supported normal entries, no special precautions need to be taken. You can just include the name of the command. To call an unsupported entry, you will have to use PTR <address>, where <address> is the address as listed in the tables. For supported ashpointer entries (whose names always start with ), you have to prex the entrys name with FPTR2. So, to call the ashpointer command Z>R, you will have to include this in your program: FPTR2 Z>R An unsupported ashpointer entry is called with FPTR <bank> <cmd>. <bank> are the last three digits of the address as listed in the table (but in practice it can be no bigger than Fh), and <cmd> are the rst three digits. Calling rompointer entries (which have names starting with ) is very similar to calling ashpointers. If it is supported, just prex it with ROMPTR2. For unsupported entries, you have to use this syntax: ROMPTR <lib> <cmd>. <lib> are the last three digits of the address, and <cmd> the rst three.
A.4.2
The MASD compiler supports some special features that are not a part of the System RPL programming language, but that can be useful to the programmer.
438
A. Development Tools
The rst feature eases the use of unsupported entries. You can dene a name for a unsupported entry, making it behave as if an entry in extable. (This only works for normal entries, not ashpointer or rompointers.) To do that, use the following structure: EQU name address where name is the name of the entry, and address is its address. For example, the line below denes the entry 2NELCOMPDROP, which returns the second element of a composite: EQU 2NELCOMPDROP 2825E With that denition, you can use 2NELCOMPDROP instead of PTR 2825E to access that command. Note that this only works for normal entries. Another way to ease the inclusion of unsupported entries (especially rompointers and ashpointers), but that is useful not only for that, are the DEFINEs. The structure is like this: DEFINE name value where name is a single word, and value is the rest of the line. After that denition, whenever name is found in the source le, it will be replaced by value. So, if you are going to use the browser (see Chapter 33), it might be convenient to dene this: DEFINE Choose3 FTPR 2 72 so that you can simply insert Choose3 when you want to call the browser.
A.4.2.1
There is a structure that allows you to refer to local variables with names in the source, but that produces unnamed local variables, thus combining ease of use with speed. The local variables are bound with {{ name1 name2 ... nameN }} After that, entering name1 will become 1GETLAM, name2 will become 2GETLAM. Preceding the name of a variable with = or ! stores something in the variable, that is, =name1 becomes 1PUTLAM, and so on. Pay attention to the way the names are bound: the rst variable name corresponds to 1GETLAM (that is, the object that was in level one), the second to 2GETLAM (the object that was in level two), and so on. This is the opposite of what JAZZ does. It is possible, however, to get the ordering as JAZZ does, by putting the !JAZZ directive in the beginning of the source le.
A.5. Disassembly
439
A.4.2.2
Using the INCLUDE pseudo-command, you can include other source les in your main program. This is like the #include directive in C programs. It is used like this: INCLUDE variable. The contents of the named variable are read as if they were included in the source le. The included le should also end with an @. One use of this feature is to include a le with denitions of several constants or unsupported addresses.
A.5
Disassembly
As it was briey mentioned in the description of Library 256 (see section A.3), the command S2 is the System RPL disassembler. It will disassemble any object in level one into its source code suitable for reassembly with MASD. Unfortunately, there are still some bugs in MASD, which prevent some disassembled objects to be correctly re-assembled. We all hope that in a newer version this bugs will be corrected. Often, one wants to see how one of the built-in commands in the HPs ROM is built. The JAZZ library for the HP48 calculators made that easy. Unfortunately, it is difcult to do that with only the built-in tools in the HP49G. There are, however, two two libraries for this purpose: Nosy by Jurjen N. E. Boss, and CQIF, by Pierre Tardy. Both allow to extract and disassemble ROM code, and both can be used together with Emacs (see section A.6).
A.5.1
Using Nosy
Nosy, written by Jurjen N. E. Boss (j.bos@interpay-iss.demon.nl) and presently at version 4.0 is a tool to disassemble the HP49Gs ROM. It is very easy to use, and, unlike CQIF?, can be easily used wihout Emacs. It also displays more information that CQIF?, such as the names of ash pointers. Because of this, it is slower than CQIF? To use Nosy, put the entry name, pointer, an address in the stack (some other inputs are also accepted see Nosys documentation) and run the command Nosy. This will open an interactive browser where you can view the disassembled entry and browse the ROM like a hypertext document. Use the arrow keys to scroll. You can quickly view another command inside the disas-
440
A. Development Tools
sembled source by moving the highlight to it and pressing ENTER or F6. This will open another browser just like the rst one. To go back one level, press Backspace, and to exit press ON. There are some other functions you can use in the interactive browser, consult the documentation for details.
A.5.2
Using CQIF?
With the help of the CQIF? (Comment QuIls Font?) library, written by Pierre Tardy (e-mail: tardyp@iname.com), currently at version 1.7.7F, the task of disassembling built-in commands is also simplied. It contains several tools for the HP49G hacker. We will not describe everything from the library here, read its documentation if you want to know what else it can do for you. The most useful command is CQIF?. This command is the basic way to disassemble some part of the HPs ROM. It accepts several kinds of inputs. If you give a string with the name of an entry, that entry is disassembled. You can put an address (a hxs), and run CQIF? to disassemble whatever is at that address. It will also accept the entry pointer itself, rompointers and ashpointers. To ease the disassembly of User RPL commands, you can enter the command inside a list or program (that is, enter { DUP } or DUP to disassemble the User RPL command DUP). CQIF? disassembles step-by-step, so if the command is only a pointer to another command, you need run the CQIF? command several times to get to the real code of the command. Just remove any unnecessary junk from the stack, keeping the last result of CQIF? and run it again. Eventually you will reach the command. Another useful command in the library is DISPATCH. It does a virtual dispatch based on the object types. To use it, put the objects you would use as arguments to some command in the stack. Then, recall that command (probably using CQIF?) to level one. Run DISPATCH. The object that would be run for those argument types (by means of some dispatching command like CKn&Dispatch) is put in level one. The other commands are not so useful to System RPL programs. But it is a nice idea to read the documentation and see what CQIF? can do for you.
441
A.6
When you use the HP49G to develop programs, you will spend most of the time writing or changing the source code. This is done in the editor. The HP49G editor is much better than the one in the HP48 calculators. However, it can be made even better. There are two variables that are run before entering and after leaving the editor. We will see what can be done with them. We will also describe a library that enhances the editor with some features useful in particular for programming. Before starting the editor, the variable STARTED is evaluated. You can put a program in this variable to be run before editing any object. And, after leaving the editor, the EXITED variable is run. There are many things these variables can do. A very simple (and very useful) thing is to remove the header during editing, giving a few more lines of text. After the editor is exited, the header is restored to the default setting. It is very simple to do this: STARTED just needs to clear the header: 0 HEADER And EXITED restores the header: 2 HEADER Change 2 to 1 if you normally use only one line of header. Note that Emacs (see below) removes the header automatically. For even better customization of the editor there is the Emacs library, written by one of us (CD, e-mail: dominik@astro.uva.nl) and Peter Geelhoed (email: P.F.Geelhoed@student.tnw.tudelft.nl). This library gives the editor some of the features of the famous GNU Emacs editor, such as completion, automatic indentation, incremental search, regular expression search and a macro language. The latest version, at the time of this writing, is 1.10. Again, we will not describe everything in the library see the manual for more information. Probably the single most useful feature of the Emacs library is command completion. It is activated by the RPLCPL command. This is only useful in edit mode, so you will need it assigned to a key, with TakeOver before. If you have the KEYMAN library (see section A.2), just put a program like this in the stack: RPLCPL and run TO?. Then, assign the resulting object to a key. It is a nice idea to assign it to the same key both with and without the alpha-mode on. Of course, you do not need a program. Just the rompointer (got with { RPLCPL } HEAD or some similar trick) is enough, but you must still run TO?.
442
A. Development Tools
To try it, enter the rst few letters of any User RPL command. Press the key to which you assigned RPLCPL. If there was only one command starting with those letters, what you typed will be completed. If there were more than one, a choose box will appear from which you can select the derised command. The command line will be completed. This is something really useful. Provided you have the extable library installed (as you should see section A.1), the completion also works for System RPL command names. If the last character in the string is a @ (as required by MASD), then System RPL completion is automatically used. As an added bonus, if you press the key to which RPLCPL is assigned longer, then the lookup of System RPL commands is done with GETNEAR (see section A.1). You can then enter case, ask for completion, and get all words that have case in the middle not only in the begining. Another command that sometimes is useful is DYNCPL. It should also be assigned to some key, and also does completion. But it looks in the le you are editing for words that start with the typed letters. It is useful for the names of local variables and such. It works in a slightly different way: press the key, and the word will be completed with the rst word. To accept it, press ENTER. To abort, press ON. To search for another match, press the same key that invoked DYNCPL. Any other key will accept the match and execute that key. One more command that is useful to be assigned to a key is RPLED. This command imitates the ED command in the JAZZ library: it decompiles the object in level one, opens an editor for you to edit it, and, upon exit, recompiles the object (if you are lucky, that is. If the object cannot be compiled because of some MASD bug, exit the editor with a longer-pressed ENTER. This will allow you to select not to compile the le). RPLED also displays a menu with useful operations, described below. If you call RPLED when in edit mode, the menu is redisplayed. To get a description of all the commands in the menu, read the documentation that comes with Emacs. Here we will present the most useful ones: CO.. calls RPLCPL. Left-shift CO.. calls DYNCPL. See above for explanations of these commands. With |> you can collect a few keystrokes into a macro and then run this macro over and over. Press left-shift |> to start the macro recorder, then execute the commands which should be part of the macro and exit with ON. Then use |> to run the macro. Holding down the |> key automatically repeats the macro until you release the key. Find starts an incremental search. Press this key, then start typing
443
the string you want to nd. Type as many characters as necessary, then press ENTER to go to that cursor position. To cancel the search and go back to where the search started, press ON. Press the right arrow to nd the next match. When you press Left-shift Find, you start a (non-incremental) regular expression search. Read Emacs manual for more information. Meta starts a special mode in which many useful editing commands are directly accessible with single key presses. The transmit indicatior is on while this mode is active. To exit, press ENTER or ON. Left-shift Meta suspends the editor and goes back to the stack. To return to the editor, press CONT (Left-shift ON). Right-shift Help is the menu of Emacs conguration. A choose box appears with several actions. Selecting Options will show a dialog, which allow you to congure some aspects of Emacs: whether the minifont is used by default, whether the third page of the menu contains some templates for System RPL and Assembly Language development, the library to use by the EDOB command (described below), and some other things. There are also options to edit the emacs variable (which allows one to add macro commands to Emacs. Again, we refer you to Emacs documentation), to edit the diagram variable (used by the SDiag library, but this variable is not discussed in this document), and to make some key assignments. Pressing Left-shift Help toggles between the minifont and the current font. Indnt indents the current line according to context. However, it is better to write the code already indented than to correct it later. . . Still, sometimes (such as when cutting and pasting), this can save some time. When left-shifted, removes * from the beginning of the current line (or all the selected lines), and when pressed right-shifted inserts the * . {}, when pressed in a delimiter, jumps to the matching one. Works with :: and ;, { and } and a few others pairs. ( ) shows the stack diagram for the entry point under the cursor. For this to work, the SDiag library, distributed with Emacs, must the installed. All stack diagrams listed in this book are also available on the calculator through this library, and this can be of great help. EDOB can be used to look into the ROM and into the contents of variables without exiting the editor. If you have ever used JAZZs ED editor, this works similarly to the Right-shift Y key. It disassembles the entry under the cursor, and its source is viewed in another editor. Exit this sub-editor with ON or ENTER to go back to the original editing section. Of course, you can call DOB
444
A. Development Tools
again in the sub-editor. This command requires the CQIF? or Nosy libraries (see section A.5). When Nosy is used, you can press this key longer to run the Nosy browsing environment. (The default is to start a new sub-editor.) You should assign EDOB to a key since you will use it frequently. Because of the similarity with the Nosy and CQIF? commands, is suitable to assign both commands to the same key. When used in edit mode, EDOB is called. When not, Nosy or CQIF? is called. It is very easy to create an assignment like this with KEYMAN (see section A.2). First, put the list { EDOB Nosy } in the stack, and use OBJ or COMP to explode it. Drop the number of objects and run IfE?P. Use TO? to add TakeOver to the object (since it needs to work in edit mode), and assign it to a key. If you have used the HP48 and JAZZ, Rightshift-hold +/- or Right-shift-hold 1/x will remind ED, and will not interfere with the normal operation. You can replace Nosy with CQIF? here if you prefer the latter library. Actually, while the above example is very educational, it is not really necessary. EDOB automatically calls CQIF? or Nosy (depending on Emacs settings) when it is called outside edit mode. The last page of the Emacs menu contains some templates for System RPL and Assembly Language programming. Try them, you will easily discover what they do. If you need help with Emacs menu commands, just press Help. It has help on the commands and on the menu keys. If you select help on the meny keys, it will display a screen describing the two pages of the Emacs menu. Each page is represented by three rows of labels, which mean, from top to bottom, the unshifted action, the left-shifted action and the right-shifted action. Some commands are inverted, these have different actions when pressed longer. There is much more that Emacs can do. Please read the documentation to discover about the rest of the features.
A.7
Debugging
The debugging facilities for System RPL of the HP49G are the same as for User RPL: the built-in debugger (Left-shift CAT, NXT twice and RUN). Unfortunately, it does not work very well with some commands, which will be described later. To start debugging, put the program or the name of the variable in which the program is stored in level one and press DBUG. Then, use the other
445
commands to examine the program. The SST command executes the next step in the program and displays what has just been executed. You will need the System RPL stack (see section A.3) active for this to be useful. If the command being run is a sub-routine, SST executes this as a single step. SST is similar, but if the command is a sub-routine, it steps into this sub-routine and executes its rst command. To see the next two actions of the program, but not execute them, press NEXT. To stop the program being debugged, press KILL. To make it resume its normal operation, press CONT (Left-shift ON). To insert a breakpoint into your program, insert the command HALT (xHALT for System RPL programmers) in the program at the point you want the program to stop. Then use the commands above to debug the program. The debugger does not work with commands that take arguments from the runstream, such as ' or IT. Do not try stepping over one of these commands, the only thing you will get is a nice crash :-). Currently, the only way to debug these commands is by inserting xHALT after these commands, and using CONT to skip past the next xHALT. For simple to moderately complex programs, the procedures described above will be sufcient to nd and correct bugs. If you run into a more serious problem with a complicated program, a bigger hammer may be needed: SDB in Jazz49.
A.8
The JAZZ library, written originally by Mika Hesikanen and others for the HP48, implemented many of the features so far discussed in this chapter in a single, compact and very consistent library. On the HP48, this was without any doubt the best programming environment. JAZZ has been ported to the HP49 by Daniel Lidstrm (e-mail: danli97@ite.mh.se). However, at the time of this writing it is not a full replacement for MASD and the other tools. In particular it has no support for ashpointers and therefore cannot assemble or disassemble programs containing ashpointers. Another drawback is that Jazz needs to be installed in port 0, occupying 70kB (50kB for the light version) of RAM space. It also needs its own table of entry points, 40kb more, but that can fortunately be installed in any port. The area where Jazz49 brings unique functionality to the HP49 is debugging, both of machine language programs (DB) and of System RPL programs
446
A. Development Tools
(SDB). In contrast to the HP49 built-in debugger, SDB can handle runstream commands correctly, so there is no need to insert many xHALT commands into the program. The lack of ashpointer support means that you cannot singlestep the contents of ashpointers. Also the display of current and next commands in the status line is affected by this: when the program is near a ashpointer, Invalid Object will be displayed instead of the current and next commands. To use the debugger, put the program to be debugged or just its name in level 1, and run the SDB command. You will then be presented a menu with your possible actions. SST executes the next step. IN is similar, but it will step inside of sub-routines. Use SNXT to show the next steps to be executed. You can insert breakpoints into programs with the SHALT command (write xSHALT in System RPL programs). Note that SHALT only works if SDB is already running, so you need to start your program with SDB and then press CONT to jump to the break point. Very useful is also the possibility to browse loop and LAM environments with the LOOPS and LAMS commands, respectively. For more information on these and other commands, please refer to the JAZZ documentation. Now you may wonder if you should really sacrice 50kB of RAM for the occasional need to do serious debugging. Here is a solution: keep a BZ compressed version of the JAZZ library (light version) stored in port 2 under the name Jazz. When you need to debug, you can quickly install JAZZ with a small progamm: :2: Jazz RCL 0. STO 992. ATTACH where is the decompressor program in OT49. With a similar program, you remove it from port 0 when you are done.
B.1
In the directory that will be converted to a library, some variables, all having names starting with $, have special meanings that congure the created library. The table below lists the variables and their meanings. 447
B. Creating Libraries Meaning This species the number of the library. Each library should have a unique number, since there cannot be two libraries with the same number. It should be a real or an integer, in the range 769 to 1791. This is the title of the library. The rst ve characters will be shown in the library menu. You can have a library without a title, but you will not be able to access the library from the library menu. This is a list of variable names. The variables listed here will be made into user-accessible commands in the resulting library. This is a list of variable names. The variables listed here will be converted into hidden commands in the resulting library. This is the library conguration object. This object will be evaluated at each warmstart. Normally, these conguration programs attach the library. This can be done by storing something like :: romid TOSRRP ; here, where romid is the library id. If you want, you can simply store the real number 1. in $CONFIG, and a default conguration object will be produce, which attachs the library at each warmstart. This is a list of strings which will be available in the library for use as (error) messages or general strings. If each message is only used once, it is not really worthwhile to create a message table. But if messages are used in many places, or if you want to make it easy to change messages to a different language, a message table is very useful. The list can contain up to 256 strings. Each message on the calculator is identied by a unique bint #lllmm consisting of a 3-digit library number (like 6FE) and a two-digit message number 01. . . FF. To access a message from a program use #lllmm JstGetTHEMESG. To throw an error using a message number, use #lllmm DO#EXIT. See Chapter 22 for more information. This is the name of a command that allows customization of some menus, addition of help to commands and more. See below for more information on this.
$TITLE
$MESSAGE
$EXTPRG
Note that unlike other library creators, only the variables that are listed in $VISIBLE or $HIDDEN are made into command in the library. Variables that do not appear in either list are not converted. $MESSAGE is optional, you do not have to specify it.
449
B.2
Libraries on the HP49G can contain a message handler. This program is called by the operating system at various occasions, in order to give the library a chance to modify menus, provide online help for its commands and other actions. When creating a library from a directory, the reserved variable $EXTPRG can contain the name of a variable in the directory which will later become a rompointer in the library. This rompointer must be a program which accepts a bint on level one (a code representing one of the messages) and, depending upon the specic message, other arguments on higher stack levels.
B.2.1
Menu Extensions
The majority of messages can be used to extend some built-in menus. Among these are the APPS choose menu, several other choose menus, the SEARCH, GOTO and Tools submenus in the editor menu etc. When the message handler is called to extend a menu, the current menu is on the stack either as a list or as a meta. The program can then modify this menu and return it. So, the stack diagram for menu extensions is one of: ( { key1 ... keyN } #msg modified_list #msg ) ( key1 ... keyN #n #msg modified_meta #msg ) The message number bint stays on the stack, so that the message handler of another library can be called immediately to do its work in the same way. The following menus on the HP49G can be extended using library messages. #msg 0 1 2 3 4 5 6 8 11 12 Menu APPS Main STAT menu Hypothesis submenu in STAT Condence Interval submenu in STAT menu Finance menu Numeric Solver menu Time menu Games (inside APPS) Editor SEARCH menu (when ag -117 is clr) Editor TOOLS menu (when ag -117 is clr) Menu Type list list list list list list list meta list list
450 #msg 13 14 15 16 Menu Editor GOTO (when ag -117 is clr) Editor SEARCH menu (when ag -117 is set) Editor TOOLS menu (when ag -117 is set) Editor GOTO (when ag -117 is set)
As an example, we show a message handler of a library whose ROMID is 1234. This handler will will add the library menu to the APPS menu, and a particular rompointer to the Games menu. When adding to the APPS menu, the example also makes sure that the new item is numbered just like the other items in the APPS menu. This should be done by all libraries.
1 :: ZERO OVER#=case :: SWAPINCOMP #1+DUP #>$ ".My Library" !append$ :: % 1234. InitMenu% ; TWO{}N SWAP P{}N SWAP ; EIGHT OVER#=case :: DROP { "PlayMe" ROMPTR 4D2 0 } SWAP#1+ EIGHT ; ; (APPS menu) (save #msg, explode list) (make index for new entry) (add name to index number) (action: set my menu) (label & action -> list) (add new entry) (get the ZERO back) (Games submenu) (drop the message) (new entry for menu) (add to meta) (put msg number back)
10
15
B.2.2
On the HP49G, all the CAS commands have a short help text which can be displayed from the catalog, or with the SDIAG command in the Emacs library (see section A.6). When the catalog choose box highlights a CAS command, the menu under the choose box has an additional button, the HELP button. Pressing this button shows the corresponding help text. External libraries can provide help for their commands in a similar way, using the message handler and messages number nine and ten. Message nine is a query if the library provides help for a given rompointer. The stack diagram is
451
( romptr FALSE NINE romptr TRUE/FALSE NINE ) where the TRUE/FALSE in stack level two indicates if the library is prepared to provide help for the rompointer in level three. This message is used to determine if the HELP button in the CATalog should be turned on. Message ten is then used to actually display the help when the user presses the HELP button. The stack diagram here is ( romptr TEN FALSE ) Before pushing FALSE, the message handler should display the help text. The following example is a message handler which provides a short help string for every visible command in the library.
1 :: NINE #=casedrop :: DROPTRUE NINE ; TEN #=casedrop :: DUP DECOMP$ NEWLINE&$ SWAP ROMPTR># SWAPDROP { "Help text for romptr 0" "Help text for romptr 1" ... "Help text for romptr N" } SWAP#1+ NTHCOMPDROP &$ FALSE SWAP ViewStrObject ; ;
10
(save cmd name as string) (index of romptr in lib) (list of help strings)
(last visible rompointer) (extract correct help str) (Add the command name) (display the text)
15
20
Note that ViewStrObject conveniently pushes FALSE on the stack, which is the required return value of message nine. The message handler gets a bit more complicated if help is only provided for a few rompointers. In this case, the handler of message nine must check the rompointer against a list, and message ten must use Lookup or something similar to extract the help text. Instead of simply displaying a string, message ten can also do more complicated things, like launching a whole application to provide help. The library creator in the OT49 library (see section A.3.1) provides a simple way to add help support to a library.
452
B. Creating Libraries
B.2.3
If the menu of a library is invoked via the LIBS menu (rightshift 2), the romid of this library is sent to the message handler of the library. The library may use this for easter egg-like stuff (displaying an icon (see for example the Libman library), doing something funny with the menu (e.g. LTool) or playing a melody). It can also change the menu settings, for example to provide functionality for the shifted menu buttons (e.g. ConstTools). The stack diagram for this message is ( #romid #romid ) The following example is the message handler of a library # 60F and it temporarily displays a copyright notice when the library menu is selected.
1 :: # 60F OVER#=case :: ZEROZERO "(c) 2001 Some Author" $>grob XYGROBDISP SetDA1Temp ; ;
C.1
Reference
Name xABCUV xABS xACK xACKALL xACOS2S xACOSH xACOS xADDTMOD xADDTOREAL xALOG xAMORT xAND xANS xAPPLY xARCHIVE xARC xARG xARIT Description ( pa pb c u v ) ( x x' ) ( ) ( ) ( symb symb' ) ( x x' ) ( x x' ) ( symb1 symb2 symb3 ) ( var ) ( x x' ) ( n princ intr bal ) ( x1 x2 x3 ) ( n ob ) ( {symb1 .. symbn} f f(symb1...symbn) ) ( :port:name ) ( :IO:name ) ( c r 1 2 ) ( {#x #y} #r 1 2 ) ( c ) ( ) 453
Addr. 030314 39A07 390E4 390C9 025314 3A8D8 3A7DC 06E314 0000DE 3AAE5 04B0AB 3CA07 3F033 3D7AC 3EAC7 3C8C6 3A390 085314
C. User RPL Commands Description ( [] x1...xn {n} ) ( [[]] x11...xnm {n m} ) UserRPL: ARRY ( x1..xn n [] ) ( x11...xnm {n m} [[]] ) UserRPL: ARRY ( symb symb' ) ( symb symb' ) ( x x' ) ( x x' ) ( obj key ) ( 'SKEY' ) ( # #' ) ( symb symb' ) ( x x' ) ( x x' ) ( n ) ( ) ( c ) ( {c tick $x $y } ) ( {} [] ) ( [] () ) ( [A] [M] ) ( [nxn] [n] [nxn]' [n] ) ( ) ( ) ( ) aka: xALGB ( n ) ( freq dur ) ( ) ( ) ( min width n [[]] [] ) ( #width #height grob ) ( {#n1 #m1} {#n2 #m2} ) ( c1 c2 ) ( # R ) UserRPL: BR ( nchars 0/1 )
3BE9B
x>ARRY
024314 023314 3A88E 3A756 3EEE7 38DE1 022314 3A94F 3A844 3EB64 3C49F 3C3B2 04A314 049314 04C314 3C9D3 3E196 080314 3EDCC 39765 3E2C1 3B655 3E171 3C70A 3C6E0 38F21 3EE47
xASIN2C xASIN2T xASINH xASIN xASN xASR xATAN2S xATANH xATAN xATTACH xAUTO xAXES xAXL xAXM xAXQ xBAR xBARPLOT xBASE xBAUD xBEEP xBESTFIT xBIN xBINS xBLANK xBOX xB>R xBUFLEN
C.1. Reference Addr. 39480 01E0DE 07E314 0330DE 38B28 3AD1B 3C3DC 3B4E9 03A314 04D0AB 3BC19 3B362 01D0DE 3EDAC 3DD4E 3DD8E 39144 39839 3EC95 3E91A 081314 3B193 3E5A0 0300DE 3E0FD 0380AB 03E0AB 0390AB 03F0AB Name xBYTES xC2P xCASCFG xCASCMD xCASE xCEIL xCENTR xCF xCHINREM xCHOOSE xCHR x%CH xCIRC xCKSM xCLEAR xCLSIGMA xCLKADJ xCLLCD xCLOSEIO xCLUSR xCMPLX xCNRM xCOLCT xCOLLECT xSIGMACOL xCOL xCOLxCOL xCOL+ Description ( obj chksum size ) ( {} ????? ) ( ) ( ? ) ( ) ( x n ) ( (x,y) ) ( x ) ( n ) ( []1 []2 []3 ) ( title {elems} pos ob 1 ) ( title {elems} pos 0 ) ( n $ ) ( x1 x2 x3 ) ( prg {} ????? ) ( n_type ) ( ob1 .. obn ) ( ) UserRPL: CL ( ticks ) ( ) ( ) ( ) UserRPL: CLVAR ( ) ( [] col_norm ) ( symb symb' ) ( symb symb' ) ( x_col y_col ) UserRPL: COL ( [[]] [v1]...[vn] n ) ( [] x1...xn n ) ( [] n []' xn ) ( [[]] n [[]]' [vn] ) ( [v1]...[vn] n [[]] ) ( x1...xn n [] ) ( [[]] [[]]' n [[]]'' ) ( [] x n []' )
455
456 Addr. 3B423 0260AB 3C967 39A6C 0180AB 3BF77 Name xCOMB xCOND xCONIC xCONJ xCONLIB xCON
C. User RPL Commands Description ( n k Cn,k ) Symbolic argument allowed. ( [[n*n]] x ) ( ) ( x x' ) ( ) ( { n } x [] ) ( { n k } x [[]] ) ( [] x []' ) ( name x ) ( ) ( x1_u1 x2_u2 x3_u2 ) ( x_correlation ) ( x x' ) ( x x' ) ( x_covariance ) ( (x,y) {#n #m} ) UserRPL: CPX ( name ) ( ) ( [1] [2] [3] ) ( (x,y) x y ) UserRPL: CR ( [func] [vars] [] ) ( ) ( xe/D yRe xDarcy ) ( date ) ( date ) ( date ndays date' ) ( %1 ) ( prog ) ( name ) ( date1 date2 days ) ( ) ( name x_new ) ( 'name=expr' ) ( 'name(name1...)=expr(name1...) ) ( )
0190AB 3989C 38F41 3DE24 3A6C2 3A5D0 3DE3F 3C58E 393CA 3D128 3B208 3BAF5 057314 0120AB 0610AB 39104 39078 39238 0690AB 0150DD 39218 3B670 3E576 3E85C
xCONST xCONT xCONVERT xCORR xCOSH xCOS xCOV xC>PX xCRDIR xCR xCROSS xC>R xCURL xCYLIN xDARCY xSETDATE xDATE xDATE+ xdB xDBUG xDDAYS xDEC xDECR xDEFINE
3B549
xDEG
C.1. Reference Addr. 391D8 3D1C7 3EF3B Name xDELALARM xDELAY xDELKEYS
457 Description ( n ) ( x_delay ) ( rc.p ) ( 0 ) ( 'S' ) ( name ) ( {name y1 y2} ) ( {y1 y2} ) ( y1 y2 ) ( n ) ( symb var symb' ) ( symb symb' ) ( eq func func' ) ( [[]] x ) ( n ) ( :port:n ) ( symb var symb' ) ( [[]] vec ) ( [] { dims } [[]] ) ( ) ( ) ( obj n_line ) ( ob {#x #y} %size ) Display ob (decompiled if nexessary) at the given display coordinates, using either the system font (%size=2) or the minifont (%size=1). ( [func] [vars] func ) ( symb1 symb2 squot srem ) ( symb1 symb2 squot srem ) ( symb {} ) ( symb1 symb2 sq ) ( symb1 symb2 n symb3 ) ( ) ( n ) ( $ ) ( 0 ) ( {1}...{n} n prog {} ) ( {1}...{n} prog {} (n=1) )
3C51F
xDEPND
3DCA7 00E314 003314 00F314 3B1BA 3EB84 3D202 03A0AB 03B0AB 084314 00E0AB 39725 0160DD
xDEPTH xDERIV xDERVX xDESOLVE xDET xDETACH x xDIAG xDIAG xDIFF xDIFFEQ xDISP xDISPXY
05B0AB
xDOLIST
458 Addr. 0540AB 3B1E1 3C484 06B0AB 3C4BA 3DC56 3DCC7 3DC3B 3B06E 3EFEF 3DC05 3F29A 3DCE2 3DBEA 0090DD 0070DD 39B1E 02E314 02C0AB 02D0AB 3805D 38A54 0570AB 3B5DA 088314 3BDE6 00B0DD 3C553 3955B 39591 39576 038314 395AC Name xDOSUBS xDOT xDRAW xDRAW3DMATRIX xDRAX xDROP2 xDROPN xDROP xD>R xDTAG xDUP2 xDUPDUP xDUPN xDUP xEDITB xEDIT xCONSTANTe xEGCD xEGV xEGVL xELSE xENDDO xENDSUB xENG xEPSX0 xEQ> xEQW xERASE xERR0 xERRM xERRN xEULER xEVAL
C. User RPL Commands Description ( {} n prog {}' ) ( {} prog {}' (n=1) ) ( [1] [2] x ) ( ) ( [[]] v_min v_max ) ( ) ( ob1 ob2 ) ( ob1...obn n ) ( ob ) ( x ( /180)x ) UserRPL: DR ( tag:obj obj ) ( 1 2 1 2 1 2 ) ( 1 1 1 ) ( 1...n n 1...n 1...n ) ( ob ob ob ) ( ob ob' ) ( ob ob' ) ( e ) UserRPL: e ( symb1 symb2 symb3 symb4 symb5 ) ( [[]] [[evect]]' [evals] ) ( [[]] [egval] ) ( ) ( 1/0 ) UserRPL: END ( x ) Number of lists in DOSUBS. ( n ) ( symb1 symb2 ) ( 'l=r' l r ) UserRPL: EQ ( symb symb' ) ( ) ( ) ( $msg ) ( $nerr ) ( z1 z2 ) ( ob ? )
C.1. Reference Addr. 06C314 076314 000314 3E5E9 3E25E 017314 3AB6F 3A9B7 0050AB 0620AB 001314 077314 043314 0600AB 3F2DF 3B635 3B529 041314 01A0AB 00C0DD 391AE Name xEXLR xEXPANDMOD xEXPAND xEXPAN xEXPFIT xEXPLN xEXPM xEXP xEYEPT xF0 xFACTOR xFACTORMOD xFACTORS xFANNING xFAST3D xFC?C xFC? xFCOEF xFFT xFILER xFINDALARM Description ( symb symb1 symb2 ) ( symb1 symb2 ) ( symb1 symb2 ) ( [symb1] [symb2] ) ( symb1 symb2 ) ( ) ( symb1 symb2 ) ( x x' ) ( x x' ) ( xx xy xz ) ( y_lambda xT x_power ) ( symb symb1*symb2... ) ( z z1*z2... ) ( symb symb1*symb2... ) ( z {z1 m1...} ) ( symb {symb1 m1...} ) ( x_x/D y_Re x_fanning ) ( ) ( n 0/1 ) ( n 0/1 ) ( [] symb ) ( [] []' ) ( ) ( date n ) ( {date time} n ) ( 0 n ) ( ) ( n ) ( # ? ) ( x n ) ( font ) ( font ) ( font ) ( font ) ( font ) ( start finish ) UserRPL: FOR ( symb z c_z ) ( x x' )
459
3ED76 3B59A 0170AB 3ACD1 00F0DD 00E0DD 00D0DD 0030DD 0020DD 38252 05E314 3AC87
xFINISH xFIX xFLASHEVAL xFLOOR xFONT6 xFONT7 xFONT8 xFONT xFONT xSTARTVAR xFOURIER xFP
460 Addr. 39745 042314 3B615 3B509 3C955 3D56B 06B314 0070DE 04D314 075314 02C314 0550AB 3C22D Name xFREEZE xFROOTS xFS?C xFS? xFUNCTION x| xFXND xGAMMA xGAUSS xGCDMOD xGCD xLIST xGETI
C. User RPL Commands Description ( n ) ( symb [] ) ( n 0/1 ) ( n 0/1 ) ( ) ( symb {var val ...} x' ) ( 'x/y' x y ) ( x x' ) ( symb [vars] [diag] [P] symb' [vars] ) ( x1 x2 x3 ) ( x1 x2 x3 ) ( {} {}' ) ( ob pos ob' pos' elm ) ob = [] or [[]] or {} or name pos = n or {n} or {n m} ( ob n elm ) ob = [] or [[]] or {} or name pos = n or {n} or {n m} ( g_targ {#n #m} grob g_targ' ) ( g_targ (x,y) grob g_targ' ) ( PICT ... ... ) ( ) ( ) UserRPL: PICTURE ( ) ( gr1 gr2 gr3 ) ( ob n_chrsize grob ) UserRPL: GROB ( var n1 n2 symb x ) UserRPL: ( x ) ( [] ) UserRPL: ( x ) ( x1...xn ) UserRPL: + ( symb ) UserRPL: LINE
3C1C7
xGET
3C74A
xGOR
3DDC4
xSIGMA+
3E156
xSIGMALINE
C.1. Reference Addr. 0590AB 3DE90 3DE5A 3DEC6 3DEAB 3DE75 3C7D8 Name xLIST xSUMX2 xSUMX xSUMXY xSUMY2 xSUMY xGXOR
461 Description ( {} x ) ( xsum ) UserRPL: X2 ( xsum ) UserRPL: X ( xsum ) UserRPL: XY ( xsum ) UserRPL: Y2 ( xsum ) UserRPL: Y ( g_targ {#n #m} g_src g_targ' ) ( g_targ (x,y) g_src g_targ' ) ( PICT ... ... ) ( [M1] [M2] [M3] ) ( symb symb' ) ( ) ( n ) ( n ) ( z symb ) ( symb [vars] [M] [grad] [vars] ) ( ) ( z [M] ) ( ) ( ) ( hms1 hms2 hms3 ) ( hms1 hms2 hms3 ) ( x x' ) UserRPL: HMS ( x x' ) UserRPL: HMS ( ) ( symb1 x symb2 x symb3 ) ( n1 n2 n3 n4 n5 ) ( n x ) ( uv' v uv -u'v ) ( []1 []2 []3 ) ( n1 n2 quot rem )
046314 020314 3880D 0040DD 0050DD 05C314 059314 3B68B 054314 3C9C1 3E1CA 3B14C 3B12C 3B0EC 3B10C 39405 037314 031314 0060DE 00B314 03B314 027314
xHADAMARD xHALFTAN xHALT xHEADER xHEADER xHERMITE xHESS xHEX xHILBERT xHISTOGRAM xHISTPLOT xHMSxHMS+ x>HMS xHMS> xHOME xHORNER xIABCUV xIBERNOULLI xIBP xICHINREM xIDIV2
C. User RPL Commands Description ( n [[]] ) ( [[]] [[]]' ) ( name [[]] ) ( n1 n2 c b a ) ( ) ( ) ( [] []' ) ( 0/1 obj ? ) ( 0/1 objT objF ? ) ( i ) ( symb symb' ) ( (x,y) y ) ( [] []' ) ( name x' ) ( name ) ( {name x1 x2} ) ( {x1 x2} ) ( x1 x2 ) ( '+' ) Innity ( $ {flds} fmt {rst} {init} {} 1 ) ( $ {flds} fmt {rst} {init} 0 ) ( $prompt $ $' ) ( $prompt {specs} $' ) ( x1 x2 symb var symb' ) ( f(var) var x0 F(x0) ) ( f(x) F(x) ) ( x x' ) ( x 1/x ) ( [[]] [[]]' ) ( x n ) ( n1 n2 n3 ) ( n1 n2 n3 ) ( n x ) UserRPL: IR ( symb var symb' ) ( n 1 ) ( n 0 )
02F314 37F48 387AC 01B0AB 396A4 395F3 39B3B 011314 3B87E 3E54C 3C33E
xIEGCD xIF xIFERR xIFFT xIFT xIFTE xi xILAP xIM xINCR xINDEP
08A314 04C0AB
x xINFORM
3EEBD 3D434 3F007 004314 074314 3A32B 3AC3D 029314 02B314 3F0B7 3E648 03C314
xINPUT x xINT xINTVX xINVMOD xINV xIP xIQUOT xIREMAINDER xI>R xISOL xISPRIME?
C.1. Reference Addr. 050314 3EE2C 07B314 39854 06C0AB 06D0AB 3ECE4 Name xJORDAN xKERRM xKEYEVAL xKEY xKEYTIME xKEYTIME xKGET Description ( [nxn] minpol chrpol {} [] ) ( msg ) ( rc.p ? ) ( rc 1 ) ( 0 ) ( ticks ) ( ticks ) ( name ) ( "name" ) ( {names} ) ( {{old new}...} ) ( ) ( ) ( [2xn] pol ) ( n ) ( n ) ( symb [vars] symb' ) ( symb symb' ) ( ob1 .. obn ) UserRPL: LASTARG ( grob ) UserRPL: LCD ( grob ) UserRPL: LCD ( symb1 symb2 symb3 ) ( n1 n2 prog [] ) ( symb1 symb2 symb3 ) ( n pol ) ( {symb...} {} gcd ) ( # ? ) ( {title nlib nport ...} ) ( func point lim ) ( (x1,y1) (x2,y2) ) ( {#n1 #m1} {#n2 #m2} ) ( ) ( symb var 0/1 ) ( [eqs] [vars] [eqs] {pp} sol ) ( symb symb' )
463
394F1 3C5C9 05D314 0000DD 0010DD 058314 010314 397E5 3C881 3C866 02D314 055314 012314 05A314 032314 0160AB 3EB42 005314 3C68C 3E214 0150AB 052314 014314
xKILL xLABEL xLAGRANGE xLANGUAGE xLANGUAGE xLAPL xLAP xLAST x>LCD xLCD> xLCM xLCXM xLDEC xLEGENDRE xLGCD xLIBEVAL xLIBS xLIMIT xLINE xLINFIT xLININ xLINSOLVE xLIN
464 Addr. 3BAC1 3B7D2 06D314 016314 3AB2F 3AA01 3E239 3AA73 0320AB 3DF83 02B0AB 0300AB 06A314 051314 3B02E 066314 3DAD0 Name xLIST> x>LIST xLNAME xLNCOLLECT xLNP1 xLN xLOGFIT xLOG xLQ xLR xLSQ xLU xLVAR xMAD xMANT xMAP xMATCHUP
C. User RPL Commands Description ( {} ob1...obn n ) UserRPL: LIST ( ob1 .. obn n {} ) UserRPL: LIST ( symb [vars] ) ( symb symb' ) ( x x' ) ( x x' ) ( ) ( x x' ) ( [[]] [[L]] [[Q]] [[P]] ) ( Intercept Slope ) ( [B] [[A]] []' ) ( [[B]] [[A]] [[]]' ) ( [[]] [[L]] [[U]] [[P]] ) ( symb symb [vars] ) ( [] det inv coeff cpol ) ( x x' ) ( {} prog {}' ) ( symb {spat srepl} symb' 0/1 ) ( symb {spat srepl scond} symb' 0/1 ) UserRPL: MATCH ( xmax ) ( [x1...xn] ) UserRPL: MAX ( MAXR ) ( x y x' ) ( var ) ( {vars} ) ( "ALL" ) ( xmean ) ( [x1...xn] ) ( x ) ( % ) ( n1 n2 ) ( xmin ) ( [x1...xn] ) UserRPL: MIN
3DEE1
xMAXSIGMA
C.1. Reference Addr. 0110DD 0120DD 0730AB 39B01 3AE2B 0740AB 079314 3AFCB 0770AB 04E0AB 0720AB 070314 0750AB Name xMINIFONT xMINIFONT xMINIT xMINR xMIN xMITM xMODSTO xMOD xMROOT xMSGBOX xMSOLVR xMULTMOD xMUSER Description ( font ) ( font ) ( ) ( MINR ) ( x y x' ) ( title {vars} ) ( mod ) ( x y x' ) ( var x ) ( "ALL" ) ( $ ) ( ) ( symb1 symb2 symb3 ) ( var ) ( {vars} ) ( "ALL" ) ( n ) ( xq v x x' ) ( ob n ob .. ob n ) ( x x' ) ( ob ob ) ( ) ( n n' ) ( nrows ) UserRPL: N ( ob1 ob2 ob2 ) ( x x' ) ( ) ( npos ) ( $ n ) ( x x' ) UserRPL: NUM ( n ) ( n ) ( ob1 .. obn ) UserRPL: ( ob ? ) UserRPL: OBJ ( )
465
0060DD 01C0AB 3F2B5 39976 394AA 3831C 03D314 3DE09 3F264 3CB13 3F0FC 0560AB 3BBF9 39785 0060AB 0070AB 3885C 3BE38 3B6A6
xNDISP xNDIST xNDUPN xNEG xNEWOB xNEXT xNEXTPRIME xNSIGMA xNIP xNOT xNOVAL xNSUB xNUM x>NUM xNUMX xNUMY xRPN-> xOBJ> xOCT
466 Addr. 3950C 3EC75 3E8F0 3CA8D 3DC8C 039314 3C98B 3EDEC 0090AB 034314 393EA 04F314 0450AB 00D0AB 01F0AB 3C4F5 3B477 0460AB 3EAA7 3F27F 3DCFD 3C72A 05A0AB 06A0AB 39AC7 3C638 3C60E 3C662 3EE9D 00A314 3C392 3C372 3C979 Name xOFF xOPENIO xORDER xOR xOVER xPA2B2 xPARAMETRIC xPARITY xPARSURFACE xPARTFRAC xPATH xPCAR xPCOEF xPCONTOUR xPCOV xPDIM xPERM xPEVAL xPGDIR xPICK3 xPICK xPICT xLIST xPINIT xPI xPIXOFF xPIXON xPIX? xPKT xPLOTADD xPMAX xPMIN xPOLAR
C. User RPL Commands Description ( ) ( ) ( {names} ) ( x y x' ) ( 1 2 1 2 1 ) ( n n' ) ( ) ( n ) ( ) ( symb symb' ) ( {HOME dir1 .. dirn} ) ( [nxn] pol ) ( [roots] [coefs] ) ( ) ( xpcovariance ) ( (xmin,ymin) (xmax,ymax) ) ( #width #height ) ( n k n' ) ( [coefs] x x' ) ( name ) ( 1 2 3 1 2 3 1 ) ( 1...n n 1..n 1 ) ( PICT ) ( {} x ) ( ) ( ) UserRPL: ( (x,y) ) ( {#n #m} ) ( (x,y) ) ( {#n #m} ) ( (x,y) 1/0 ) ( {#n #m} 1/0 ) ( data type response ) ( f ) ( (x,y) ) ( (x,y) ) ( )
C.1. Reference Addr. 3BB94 073314 3D0D7 3DFDD 3E01D 3DFFD 00C314 03E314 3D1E7 38BBF 08B314 0440AB 035314 3D10D 3D143 Name xPOS xPOWMOD xPR1 xPREDV xPREDX xPREDY xPREVAL xPREVPRIME xPRLCD xPROMPT xPROMPTSTO xPROOT xPROPFRAC xPRST xPRVAR Description ( str substring n/0 ) ( {} ob n/0 ) ( symb exp symb' ) ( ob ob ) ( x y ) ( y x ) ( x y ) ( f x1 x2 symb ) ( f x1 x2 x ) ( n n' ) ( ) ( $ ) ( var ) ( [coefs] [roots] ) ( x symb' ) ( ) ( name ) ( {names} ) ( :port:name ) ( xpsdev ) ( {x1...xn} ) ( symb symb' ) ( symb n symb' ) ( pol x pol' ) ( name ) ( {names} ) ( :port:name ) ( :port:nlib ) ( ob pos obj [] pos' ) ob = [] or [[]] or {} or name pos = n or {n} or {n m} ( ob pos obj ob' ) ob = [] or [[]] or {} or name pos = n or {n} or {n m} ( nport {} mem ) ( (x,y) ) ( {#n #m} ) ( {#m #n} (x,y) ) UserRPL: PXC
467
3C139
xPUTI
3C0BF
xPUT
468 Addr. 3DA3E 3DA63 0310AB 3E66F 3D6F6 028314 04B314 3B564 3B3E6 02A0AB 0350AB 3DBCA 38F01 3D393 3B7ED 3918E 3B715 03F0DE Name x->Q x->QPI xQR xQUAD xQUOTE xQUOT xQXA xRAD xRAND xRANK xRANM xPREDIV xR>B xRCEQ xR>C xRCLALARM xRCLF xRCLVX
C. User RPL Commands Description ( x a/b ) UserRPL: Q ( x symb ) UserRPL: Q ( [[]] [[Q]] [[R]] [[P]] ) ( symb var symb' ) ( ob 'ob ) ( p1 p2 p3 ) ( symb [vars] [[]] [vars] ) ( ) ( x ) ( [[]] n ) ( {m n} [[]] ) ( x y x/y ) UserRPL: RATIO ( x # ) UserRPL: RB ( EQ ) ( x y (x,y) ) UserRPL: RC ( n {date time action rep} ) ( {#s1 #u1 #s2 #u2} ) ( name ) Recall the current content of the reserved CAS variable VX. ( [[]] ) UserRPL: RCL ( {ob ... key ...} ) ( x ) ( var x ) ( :port:nlib lib ) ( :port:name ob ) ( :port:{path} ob ) ( n ) ( x (180/ )x ) UserRPL: RD
3B6FA 3B0AE
xRCWS xR>D
C.1. Reference Addr. 3BEEC Name xRDM Description ( ob size ob' ) ( name size ) ob= [] or [[]] size = {n} or {n m} ( x ) ( name ) ( $name ) ( ) ( ) ( [[]] [[]]' ) ( (x,y) x ) ( [] []' ) ( p1 p2 p3 ) ( name name' ) ( pol var pol' ) ( 1/0 ) ( ob pos new ob' ) ob= [[]] or [] or {} or $ or PICT pos= N or {n m} or (n,m) ( n_int ) ( :port:name ) ( p1 p2 res ) ( {1...n} {n...1}' ) ( x n ) UserRPL: RI ( f var F ) ( {} h {} h dy err ) ( {} tol h {} tol h' ) ( {} xtol xTf {} xtol ) ( {} {xtol step} xTf {} xtol ) ( # #' ) ( # #' ) ( x n x' ) ( [] x ) ( n ... 1 n 1 n...2 ) ( 1...n n 2...n 1 ) ( ) ( prog/s var guess x ) ( prog/s var {guesses} x )
469
3B401 3ED22 0110AB 3ED56 048314 3B819 02A314 0130DD 069314 38105 3B9D2
xRDZ xRECN xRECT xRECV xREF xRE xREMAINDER xRENAME xREORDER xREPEAT xREPL
3C41A 3EAE7 0050DE 05D0AB 3F070 00D314 0220AB 0210AB 0200AB 38E01 38E21 3AEB1 3B16C 3DD33 3DD18 06F0AB 3D3CE
xRES xRESTORE xRESULTANT xREVLIST xR>I xRISCH xRKFERR xRKFSTEP xRKF xRL xRLB xRND xRNRM xROLLD xROLL xROMUPLOAD xROOT
C. User RPL Commands Description ( 1 2 3 2 3 1 ) ( [[]] nrow [[]]' [] ) ( [] n []' elt ) ( [[]] [[]]' n [[]]'' ) ( [[]] [] n [[]]' ) ( [] n n' [] ) ( [[]] [1]...[n] n ) ( [] x1...xn n ) ( [1]...[n] n [] ) ( x1...xn [] ) ( # x' ) ( # x' ) ( [[]] [[]]' ) ( [[]] [pp] [[]]' ) ( [[]] [[]]' ) ( {} xtol h last {} xtol h' cur ) ( {} xtol xTfinal {} xtol ) ( {} h {} h dy err ) ( [B] [[A]] [Z] []' ) ( [[B]] [[A]] [[Z]] [[]]' ) ( []/[[]] i j []/[[]] ) ( ob1 ob2 1/0 ) ( ) ( xf ) UserRPL: SCALEH ( yf ) UserRPL: SCALEW ( xs ys ) ( ) ( [[]] [[Q]] [[T]] ) ( n ) ( ) UserRPL: SCL ( name ) ( ob ) ( xsdev ) ( [x1...xn] )
0360AB 0370AB 38E41 38E61 0340AB 047314 078314 0240AB 0230AB 0250AB 3B22F 0400AB 3C9E5 3EE82 3C444 3C464 3C4D5 3E1EF 0330AB 3B5BA 3E127 3E385 07D314 3DF32
xROW xROW xRR xRRB xRREF xrref xRREFMOD xRRKSTEP xRRK xRSBERR xRSD xRSWP xSAME xSBRK x*H x*W xSCALE xSCATRPLOT xSCHUR xSCI xSCLSIGMA xSCONJ xSCROLL xSDEV
C.1. Reference Addr. 3ECB0 Name xSEND Description ( name ) ( {names} ) ( {{old new}...} ) ( prog var start end incr {} ) ( func var order {} symb' ) ( ) ( symb symb' ) ( n ) ( symb name symb' ) ( symb {names} symb' ) ( x x' ) ( f var F ) ( f(x) F(x) ) ( symb {} ) ( x x' ) ( x y x/gcd y/gcd ) ( symb symb' ) ( symb symb' ) ( x x' ) ( name ) ( x x' ) ( ob n ) ( ob {N m} ) ( # #' ) ( # #' ) ( ) ( name ) ( [] x ) ( symb var {zeros} ) ( ) ( symb {zeros} ) ( {} {}' ) ( ) ( x x' ) ( # #' ) ( [[]] x ) ( # #' ) ( n $ 0/1 ) ( str find repl str' )
471
0530AB 007314 3ED91 064314 3B4C9 3E696 0630AB 0020DE 0010DE 05F314 3A3EE 033314 0220DE 018314 3A678 3E331 3A57C 3BB1F 38E81 38EA1 00C0AB 3E35B 0290AB 03F314 086314 008314 05E0AB 0130AB 3A4EF 38EC1 0280AB 38EE1 3EC55 0100DD
xSEQ xSERIES xSERVER xSEVAL xSF xSHOW xSIDENS xSIGMA xSIGMAVX xSIGNTAB xSIGN xSIMP2 xSIMPLIFY xSINCOS xSINH xSINV xSIN xSIZE xSL xSLB xSLOPEFIELD xSNEG xSNRM xSOLVE xSOLVER xSOLVEVX xSORT xSPHERE xSQ xSR xSRAD xSRB xSRECV xSREPL
472 Addr. 381AB 3B5FA 3851F 3D3AE 3EE62 39164 3B749 3DD6E 0400DE Name xSTART xSTD xSTEP xSTEQ xSTIME xSTOALARM xSTOF xSTOSIGMA xSTOVX
C. User RPL Commands Description ( start finish ) ( ) ( n ) ( symb ) ( ob ) ( x ) ( time n ) ( {date time act rep} n ) ( {#s1 #u1 #s2 #u2} ) ( ob ) UserRPL: STO ( name ) Store object into the reserved CAS variable VX. ( {ob key ...} ) ( {'S' ob key ...} ) ( 'S' ) ( ob name ) ( ob :port:name ) ( lib port ) ( ob 'name(i)' ) ( ob id ) ( ob symb ) Like xSTO, but if the level 1 argument is symbolic, use the rst element of it as the variable to write to. ( ob name ) ( ob name ) ( ob name ) ( ob name ) ( $ ob ) UserRPL: STR ( {} prog x ) ( ob $ ) UserRPL: STR ( n ) ( ob start end ob' ) ob= [[]], $, {}, grob start,end = n, {n m}, (n,m)
3EF07
xSTOKEYS
3E739
xSTO
3E823
xSTO>
C.1. Reference Addr. 002314 06F314 02E0AB 02F0AB 3DC20 04E314 39705 061314 060314 3EFB1 0520AB 01C0DE 021314 01F314 3A70C 3A624 006314 3E6CA 05B314 01A314 0640AB 065314 013314 3C8FA 37F7F 39093 39124 3905D 0650AB 3C6B6 019314 3E97B Name xSUBST xSUBTMOD xSVD xSVL xSWAP xSYLVESTER xSYSEVAL xTABVAL xTABVAR x->TAG xTAIL xTAN2CS2 xTAN2SC2 xTAN2SC xTANH xTAN xTAYLOR0 xTAYLR xTCHEBYCHEFF xTCOLLECT xTDELTA xTEVAL xTEXPAND xTEXT xTHEN xTICKS xSETTIME xTIME xTINC xTLINE xTLIN xTMENU
473 Description ( symb var=s1 symb' ) ( x1 x2 x3 ) ( [[]] [[U]] [[V]] [S] ) ( [[]] [] ) ( ob1 ob2 ob2 ob1 ) ( [[]] [D] [P] ) ( # ? ) ( symb(x) {vals} symb(x) {{vals} {res}} ) ( symb(x) symb(x) {{}{}} grob ) ( ob tag :tag:ob ) UserRPL: TAG ( {} {}' ) ( $ $' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( x x' ) ( x x' ) ( symb symb' ) ( symb var n symb' ) ( n pol ) ( symb symb' ) ( x y x' ) ( ob ? time ) ( symb symb' ) ( ) ( 0/1 ) ( # ) ( time ) UserRPL: TIME ( time ) ( x y x' ) ( (x1,y1) (x2,y2) ) ( {#n1 #m1} {#n2 #m2} ) ( symb symb' ) ( % [InitMenu%] ) ( Ob [@LIST InitMenu] )
474 Addr. 3DF4D 0270AB 045314 3EE0C 01C314 082314 01D314 01B314 01E314 3C084 3AF3E 063314 3C99D 015314 391F8 39456 0470AB 0480AB 0490AB 04A0AB 3B2DC 3BC39 38FD7 3900B 0140DD 38FB5 3F249 3F22E 38195 39420 3E07D 3E0BD 3E09D 3E0DD Name xTOT xTRACE xTRAN xTRANSIO xTRIGCOS xTRIGO xTRIGSIN xTRIG xTRIGTAN xTRN xTRNC xTRUNC xTRUTH xTSIMP xTSTR xTVARS xTVM xTVMBEG xTVMEND xTVMROOT x%T xTYPE xUBASE xUFACT xUFL1MINIF x>UNIT xUNPICK xUNROT xUNTIL xUPDIR xUTPC xUTPF xUTPN xUTPT
C. User RPL Commands Description ( xsum ) ( {x1...xn} ) ( [[]] x ) ( [[]] [[]]' ) ( name ) ( n ) ( symb symb' ) ( ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( [[]] [[]]' ) ( name ) ( x n ) ( symb1 symb2 symb3 ) ( ) ( symb symb' ) ( date time $ ) ( ntype {} ) ( {n...} {} ) ( ) ( ) ( ) ( var x ) ( x y 100y/x ) ( ob %type ) ( u u' ) ( u1 u2 u3 ) ( ob n font ) ( x u u' ) UserRPL: UNIT ( obn...ob1 ob n ob...ob2 ) ( 1 2 3 3 1 2 ) ( ) ( ) ( n x x' ) ( n1 n2 x x' ) ( n v x x' ) ( n x x' )
C.1. Reference Addr. 38F81 3C2AC Name xUVAL xV> Description ( u x ) ( []/() x y ) ( []/() x y z ) (in current co-system) UserRPL: V ( x y [] ) ( x y () ) UserRPL: V2 ( x y z [] ) UserRPL: V3 ( {} [[]] ) ( {} ) ( x ) ( [x1...xn] ) ( $ ) ( $ $ ) ( name ) ( name ) ( symb {spat srepl} symb' 0/1 ) ( symb {spat srepl scond} symb' 0/1 ) UserRPL: MATCH ( name n ) ( x x' ) UserRPL: ( sec ) ( 0 rc.p ) ( ) ( ) ( $ $ $ $ ) ( x x' ) UserRPL: ! ( n ) ( name ) ( $ 1 ) ( $ $rest 0 ) ( x x' )
475
3C2D6
x>V2
3BDB2 3A442 39819 380DB 0080AB 390AE 3ABAF 3E03D 0700AB 3EC35 067314
xVTYPE xSQRT xWAIT xWHILE xWIREFRAME xWSLOG xFACT xXCOL xXGET xXMIT xXNUM
476 Addr. 3CB7A Name xXOR Description ( # #' #'' ) ( $ $' $'' ) ( 1/0 1/0 1/0 ) ( % ) ( symb ) ( name ) ( x x' ) ( name ) ( x1 x2 ) ( y x Y' ) ( ) ( name ) ( x1 x2 ) ( x1 x2 ) ( x y x-y ) ( x y x/y ) ( x y x*y ) ( x y 1 ) ( x y 0 ) UserRPL: ( x y 1 ) ( x y 0 ) UserRPL: = ( x y 1 ) ( x y 0 ) UserRPL: ( x y x+y ) ( x y 1 ) ( x y 0 ) ( x y 1 ) ( x y 0 ) ( x y 1 ) ( x y 0 ) ( x y x=y ) ( x y xy/100 ) ( n ) ( y1 y2 ) ( ) ( y1 y2 )
3AD65 0710AB 068314 0500AB 3C915 3A278 06E0AB 04F0AB 0000AB 0030AB 39CFC 39F49 39DE8 3CF80
xXPON xXPUT xXQ xXRECV xXRNG xXROOT xXSERV xXSEND xXVOL xXXRNG xx/ x* x<=?
3CD21
x#?
3D01F
x>=?
39B58 3CE42 3CBF6 3CEE1 398B9 3B251 3E05D 3C935 00B0AB 0010AB
C.1. Reference Addr. 3A097 0040AB 040314 05F0AB 0020AB Name x xYYRNG xZEROS xZFACTOR xZVOL Description ( y x yx ) ( y1 y2 ) ( symb var {zeros} ) ( xTr yPr xZf ) ( x1 x2 )
477
Library 256 is built-in in the calculator, and contains several commands for the programmers. Some of this commands are described in section A.3. The list belows contains the commands and their rompointer address, should you want to use one of them in your program. Addr. 000100 001100 002100 003100 004100 005100 006100 007100 008100 009100 00A100 00B100 00C100 00D100 00E100 00F100 010100 011100 012100 Name xH xH xA xA xAH xHA xCD xCD xSH xHS xLST xALG xPRG xCOMP xRAM xSREV xPOKE xPEEK xAPEEK Description ( ob $hex ) ( $hex ob ) ( ob hxs ) ( hxs ob ) ( hxs $hex ) ( $hex hxs ) ( $hex code ) ( code $hex ) ( $ $hex ) ( $hex $ ) ( comp {} ) ( ob1..obn %n {} ) ( comp symb ) ( ob1..obn %n symb ) ( comp :: ) ( ob1..obn %n :: ) ( comp ob1...obn %n ) ( ob ob ) ( $ $' ) ( hxs $hex ) ( hxs1 hxs2 $hex ) ( hxs hxs' ) 478
D.2. The EXTABLE Library Addr. 013100 014100 015100 016100 017100 018100 019100 01A100 01B100 01C100 01D100 01E100 01F100 020100 021100 Name xRSB xSBB xLRR xSN xLCC xASM xBetaTesting xCRLIB xCRC xMAKESTR xSERIAL xASM xER xS2 xXLIB Description ( % # ) ( # % ) ( # hxs ) ( hxs # ) ( %% % ) ( % %% ) ( $ ID ) ( ID $ ) ( %%C %C ) ( %C %%C ) ( Code $ ) ( $ ) ( lib ) ( $ #crc ) ( xlen $ ) ( $ ) ( $ ob ) ( $ {errors} $' ) ( ob $ ) ( xlib xn ROMPTR ) ( ROMPTR xlib xn )
479
D.2
The EXTABLE library contains the table of entry points and their addresses. It contains some commands which might be useful in programs, also listed below. For a description of these commands, see section A.1. Addr. 001102 002102 003102 Name xGETADR xGETNAME xGETNAMES Description ( $ hxs ) Get the address of an entry name. ( hxs $ ) Get the entry name corresponding to an address. ( $start {} ) Get all entry names which start with the given string. ( $sub {} ) Get all entry names which contain the given string.
004102
xGETNEAR
480
481
#n 119 11A 11B 11C 11D 11E 11F 120 121 122 124 125 126 127 128 129 12A 12B 12C 12D 12E 12F 130 131 132 133 134 135 136 137 138 139 13A 13B 13C 13D 13F 140 141 142 143 144 145 146 147 148 149 Message Function Command System Binary Long Real Long Complex Linked Array Character Code Library Data External LAST STACK Disabled LAST CMD Disabled HALT Not Allowed Array Wrong Argument Count Circular Reference Directory Not Allowed Non-Empty Directory Invalid Denition Missing Library Invalid PPAR Non-Real Result Unable to Isolate No Room to Show Stack Warning: Error: Purge? Out of Memory Stack Last Stack Last Commands Key Assignments Alarms Last Arguments Name Conict Command Line Interrupted Integer Symbolic Matrix Font Aplet Extended Real Extended Complex FlashPtr Extended Ptr MiniFont Extended 1 #n 14A 14B 14C 14D 14E 14F 150 151 152 153 154 155 156 157 158 159 201 202 203 204 205 206 207 208 301 302 303 304 305 501 502 503 504 505 506 601 602 603 604 605 606 607 608 609 60A 60B 60C Message Extended 2 Extended 3 YES NO TRUE FALSE Are you sure? Low Memory ConditionPlease Wait... CATALOG Nonexistent Find Pattern Not Found Nonexistent Replace Pattern Cant Find Selection Y= not available Warning:Changes will not be saved Result not editable in EQW Too Few Arguments Bad Argument Type Bad Argument Value Undened Name LASTARG Disabled IncompleteSubexpression Implicit () off Implicit () on Positive Underow Negative Underow Overow Undened Result Innite Result Invalid Dimension Invalid Array Element Deleting Row Deleting Column Inserting Row Inserting Column Invalid Data Nonexistent DAT Insufcient Data Invalid PAR Invalid Data LN(Neg) Invalid Data LN(0) Invalid EQ Current equation: No current equation. Enter eqn, press NEW Name the equation,press ENTER Select plot type
482
#n 60D 60E 60F 610 611 612 613 614 615 616 617 618 619 61A 61B 61C 61D 61E 61F 620 621 622 623 624 625 626 627 628 629 62A 62B 62C 62D 62E 62F 701 702 703 704 705 706 707 708 709 70A 70B 70C Message Empty catalog undened No stat data to plot Autoscaling Solving for No current data. Enter data point, press + Select a model No alarms pending. Press ALRM to create Next alarm: Past due alarm: Acknowledged Enter alarm, press SET Select repeat interval I/O setup menu Plot type: "" (OFF SCREEN) Invalid PTYPE Name the stat data,press ENTER
Enter value (zoom outif >1), press ENTER
E. Error Messages
#n 70D 70E 70F 710 711 712 713 714 715 716 717 718 719 71A 71B 71C 71D 71E 71F 720 721 722 723 724 725 726 727 728 729 72A 72B 72C 72D 72E 72F 730 731 732 733 734 735 736 737 738 739 73A 73B Message Grads Rectangular Polar Spherical Operating Mode. . . Number Format. . . . . . Angle Measure. . . . . . Coord System. . . . . . . . . FM, Beep Key Click Last Stack Choose calculator operating mode Choose number display format Choose decimal places to display Choose angle measure Choose coordinate system Use comma as fraction mark? Enable standard beep? Enable key click? Save last stk for UNDO and ANS? CALCULATOR MODES Font: Stack: Small Textbook Edit: Small Full Page Indent EQW: Small Small Stack Disp Header: Clock Analog Choose system font Display stack using small font? Use pretty print in the stack? Edit using small font? Edit in full page? Automatically indent new lines? Edit in EQW using small font? Display EQW using small font? Choose header height Display ticking clock? Analog clock?
Copied to stack x axis zoom w/AUTO. x axis zoom. y axis zoom. x and y axis zoom. IR/wire: ASCII/binary: baud: parity: checksum type: translate code: Enter matrix, then NEW No Associated Numeric View Algebraic RPN Standard Std Fixed Fix Scientic Sci Engineering Eng Degrees Radians
483
#n 73C 73D 73E 73F 740 741 742 743 744 745 746 747 748 749 74A 74B 74C 74D 74E 74F 750 751 752 753 754 755 756 757 758 759 75A 75B 75C 75D 75E 75F 760 761 762 763 764 765 766 767 768 769 76A Message DISPLAY MODES Indep var: Modulo: Verbose Step/Step Complex Approx Incr Pow Simp Non-Rational Rigorous Numeric Enter independent variable name Enter modulo value Display calculus information? Perform operations step by step? Allow complex numbers? Perform approx calculations? Increasing polynomial ordering? Simplify non rational expr? Dont simplify |X| to X? Replace constants by values? CAS MODES Goto row: Goto column: Specify a row to go to Specify a column to go to Matrix Writer Bad range value Start: Step: Type: Zoom: Small Font File: Enter starting value Enter increment value Choose table format Enter zoom factor Display table using small font? Enter a lename to save data TABLE SETUP Automatic Build Your Own Function Polar Parametric Diff Eq #n 76B 76C 76D 76E 76F 770 771 772 773 774 775 776 777 778 779 77A 77B 77C 77D 77E 77F 780 781 782 783 784 785 786 787 788 789 78A 78B 78C 78D 78E 78F 790 791 792 793 794 795 796 797 798 799 Message Conic Truth Histogram Bar Scatter Slopeeld Fast3D Wireframe Ps-Contour Y-Slice Gridmap Pr-Surface Deg Rad Grad Type: : EQ: Indep: Connect Simult H-Tick: V-Tick: Pixels Depnd: Save Animation DAT: Col: Cols: F: H-Var: V-Var: Stiff F Y: F T: Choose type of plot Choose angle measure Enter function(s) to plot Enter independent variable name Connect plot points? Plot functions simultaneously? Enter horizontal tick spacing Enter vertical tick spacing Tick spacing units are pixels? Enter dependent variable name Save slices animation? Enter data to plot
484
#n 79A 79B 79C 79D 79E 79F 7A0 7A1 7A2 7A3 7A4 7A5 7A6 7A7 7A8 7A9 7AA 7AB 7AC 7AD 7AE 7AF 7B0 7B1 7B2 7B3 7B4 7B5 7B6 7B7 7B8 7B9 7BA 7BB 7BC 7BD 7BE 7BF 7C0 7C1 7C2 7C3 7C4 7C5 7C6 7C7 7C8 Message Enter col to use for horizontal Enter col to use for vertical Enter horizontal variable Enter vertical variable Use stiff diff eq solver? Enter derivative w.r.t. soln Enter derivative w.r.t. indep PLOT SETUP H-View: V-View: Indep Low: High: Step: Pixels Depnd Low: High: X-Left: X-Right: Y-Near: Y-Far: Step Indep: Depnd: Bar Width: Z-Low: Z-High: XE: YE: ZE: Init: Final: Init-Soln: Tol: XXLeft: XXRight: YYNear: YYFar: Enter minimum horizontal value Enter maximum horizontal value Enter minimum vertical value Enter maximum vertical value Enter minimum indep var value Enter maximum indep var value Enter indep var increment Indep step units are pixels? Enter minimum depend var value Enter maximum depend var value Enter bar width #n 7C9 7CA 7CB 7CC 7CD 7CE 7CF 7D0 7D1 7D2 7D3 7D4 7D5 7D6 7D7 7D8 7D9 7DA 7DB 7DC 7DD 7DE 7DF 7E0 7E1 7E2 7E3 7E4 7E5 7E6 7E7 7E8 7E9 7EA 7EB 7EC 7ED 7EE 801 802 803 804 805 806 807 808 809
E. Error Messages
Message Enter minimum Z view-volume val Enter maximum Z view-volume val Enter X eyepoint coordinate Enter Y eyepoint coordinate Enter Z eyepoint coordinate Enter absolute error tolerance Enter minimum XX range value Enter maximum XX range value Enter minimum YY range value Enter maximum YY range value PLOT WINDOW Default FUNCTION POLAR PARAMETRIC DIFF EQ CONIC TRUTH HISTOGRAM BAR SCATTER SLOPEFIELD FAST3D WIREFRAME PS-CONTOUR Y-SLICE GRIDMAP PR-SURFACE PLOT WINDOW Enter minimum X view-volume val Enter maximum X view-volume val Enter minimum Y view-volume val Enter maximum Y view-volume val Enter indep var sample count Enter depnd var sample count Goto Level: Specify a level to go to HISTORY Must be >= 0 Must be bewteen 0 and 1 0: x : N: : : Null hypothesis population mean Sample mean
485
#n 80A 80B 80C 80D 80E 80F 810 811 812 813 814 815 816 817 818 819 81A 81B 81C 81D 81E 81F 820 821 822 823 824 825 826 827 828 829 82A 82B 82C 82D 82E 82F 830 831 832 833 834 835 836 837 838 Message Sample Size Signicance level Population standard deviation Z-TEST: 1 , KNOWN Alternative Hypothesis x 1: 1: N1: : x 2: 2: N2: Sample mean for population 1 Std deviation for population 1 Sample size for population 1 Signicance level Sample mean for population 2 Std deviation for population 2 Sample size for population 2 Z-TEST: 2 , KNOWN 0: x: N: : Null hyp. population proportion Success count Sample size Signicance level Z-TEST: 1 P X1: N1: : X2: N2: Success count for sample 1 Size of sample 1 Signicance level Success count for sample 2 Size of sample 2 Z-TEST: 2 P x : Sx: 0: : N: Null hypothesis population mean Sample Standard deviation #n 839 83A 83B 83C 83D 83E 83F 840 841 842 843 844 845 846 847 848 849 84A 84B 84C 84D 84E 84F 850 851 852 853 854 855 856 857 858 859 85A 85B 85C 85D 85E 85F 860 861 862 863 864 865 866 867 Message Sample Mean Signicance level Sample size T-TEST: 1 , UNKNOWN x 1: S1: N1: : x 2: S2: N2: Pooled? Sample mean for population 1 Std deviation for sample 1 Sample size for population 1 Signicance level Sample mean for population2 Std deviation for sample 2 Sample size for population 2 "Pooled" if checked T-TEST: 2 , UNKNOWN x : : N: C: Sample mean Population standard deviation Sample size Condence level CONF. INT.: 1 , KNOWN x 1: 1: N1: C: x 2: 2: N2: Sample mean for population 1 Std deviation for sample 1 Size of sample 1 Sample mean for population 2 Std deviation for sample 2 Size of sample 2 Condence level CONF. INT.: 2 , KNOWN x: N:
486
#n 868 869 86A 86B 86C 86D 86E 86F 870 871 872 873 874 875 876 877 878 879 87A 87B 87C 87D 87E 87F 880 881 882 883 884 885 886 887 888 889 88A 88B 88C 88D 88E 88F 890 891 892 893 894 895 896 Message C: Sample success count Sample size Condence level CONF. INT.: 1 P x 1: N1: C: x 2: N2: Sample 1 success count Sample 1 size Sample 2 success count Sample 2 size Condence level CONF. INT.: 2 P x : Sx: N: C: Sample mean Sample standard deviation Sample size Condence level CONF. INT.: 1 , UNKNOWN x 1: S1: N1: C: x 2: S2: N2: Pooled Sample 1 mean Std deviation for sample 1 Sample 1 size Sample 2 mean Std deviation for sample 2 Sample 2 size Condence level Pooled if checked CONF. INT.: 2 , UNKNOWN Search for: Replace by: Case Sensitive Search For: Enter search pattern #n 897 898 899 89A 89B 89C 89D 89E 89F 8A0 8A1 8A2 8A3 8A4 8A5 8A6 8A7 8A8 8A9 8AA 8AB 8AC 8AD 8AE 8AF 8B0 901 902 903 904 905 906 907 908 909 90A 90B 90C 90D A01 A02 A03 A04 A05 A06 A07 A08
E. Error Messages
Message Enter replace pattern Case sensitive search? Enter search pattern FIND REPLACE FIND Goto Line: Specify a line to go to GOTO LINE Goto Position: Specify a position to go to GOTO POSITION H-Factor: V-Factor: Recenter on cursor Enter horizontal zoom factor Enter vertical zoom factor Recenter plot on cursor? ZOOM FACTOR Object: Name: Directory Enter New Object Enter variable name Create a new directory? NEW VARIABLE Select Object [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] Inconclusive result Bad Guess(es) Constant? Interrupted Zero Sign Reversal Extremum Left Right
487
#n A09 B01 B02 C01 C02 C03 C04 C05 C06 C07 C08 C09 C0A C0B C0C C0D C0E C0F C10 C11 C12 C13 C14 C15 C16 C17 D01 D02 D03 D04 B901 B902 B903 B904 B905 B906 B907 B908 B909 B90A B90B B90C B90D B90E B90F B910 B911 Message Expr Invalid Unit Inconsistent Units Bad Packet Block Check Timeout Receive Error Receive Buffer Overrun Parity Error Transfer Failed Protocol Error Invalid Server Cmd. Port Closed Connecting Retry # Awaiting Server Cmd. Sending Receiving Object Discarded Packet # Processing Command Invalid IOPAR Invalid PRTPAR Low Battery Empty Stack Row Invalid Name Invalid Date Invalid Time Invalid Repeat Nonexistent Alarm Press [CONT] for menu reset/delete this eld Reset value Delete value Reset all Valid object types: Valid object type: Any object Real number (Complex num) "String" [ Real array ] [(Cmpl array)] { List } Name Program Algebraic #n B912 B913 B914 B915 B916 B917 B918 B919 B91A B91B B91C B91D B91E B91F B920 B921 B922 B923 B924 B925 B926 B927 B928 B929 B92A B92B B92C B92D B92E B92F B930 B931 B932 B933 B934 B935 B936 B937 B938 B939 B93A B93B B93C B93D B93E B93F B940 Message # Binary int _Unit object Invalid object type Invalid object value Calculator Modes Number Format: Angle Measure: Coord System: Beep Clock FM, Choose number display format Enter decimal places to display Choose angle measure Choose coordinate system Enable standard beep? Display ticking clock? Use comma as fraction mark? Standard Std Fixed Fix Scientic Sci Engineering Eng Degrees Deg Radians Rad Grads Grad Rectangular Polar Spherical SYSTEM FLAGS 01 General solutions 02 Constant symb 03 Function symb 14 Payment at end 19 V2 vector 20 Underow 0 21 Overow 9E499 22 Innite error 27 X+Y*i (X,Y) 28 Sequential plot 29 Draw axes too
488
#n B941 B942 B943 B944 B945 B946 B947 B948 B949 B94A B94B B94C B94D B94E B94F B950 B951 B952 B953 B954 B955 B956 B957 B958 B959 B95A B95B B95C B95D B95E B95F B960 B961 B962 B963 B964 B965 B966 B967 B968 B969 B96A B96B B96C B96D B96E B96F Message 31 Connect points 32 Solid cursor 35 ASCII transfer 36 RECV renames 37 Single-space prnt 38 Add linefeeds 39 Show I/O messages 40 Dont show clock 41 12-hour clock 42 mm/dd/yy format 43 Reschedule alarm 44 Delete alarm 51 Fraction mark: . 52 Show many lines 53 No extra parens 54 Tiny element 0 55 Save last args 56 Standard beep on 57 Alarm beep on 58 Show INFO 59 Show variables 60 [][] locks 61 [USR][USR] locks 62 User keys off 63 Custom ENTER off 65 All multiline 66 Stack:x lines str 67 Digital clock 68 No AutoIndent 69 Line edit 70 GROB 1 line str 71 Show addresses 72 Stack:current fnt 73 Edit:current font 74 Right stack disp 75 Key click off 76 Purge conrm 79 Textbook on 80 EQW cur stk font 81 GRB Alg cur font 82 EQW edit cur font 83 Display grobs on 85 Normal stk disp 90 CHOOSE:cur font 91 MTRW:matrix 92 MASD asm mode 94 Result = LASTCMD #n B970 B971 B972 B973 B974 B975 B976 B977 B978 B979 B97A B97B B97C B97D B97E B97F B980 B981 B982 B983 B984 B985 B986 B987 B988 B989 B98A B98B B98C B98D B98E B98F B990 B991 B992 B993 B994 B995 B996 B997 B998 B999 B99A B99B B99C B99D B99E
E. Error Messages
Message 95 RPN mode 97 List:horiz disp 98 Vector:horiz disp 99 CAS:quiet 100 Step by step off 103 Complex off 105 Exact mode on 106 Simp. in series 109 Sym. factorize 110 Normal matrices 111 Simp non rat. 112 i simplied 113 Linear simp on 114 Disp 1+x x+1 115 SQRT simplied 116 Prefer cos() 117 CHOOSE boxes 119 Rigorous on 120 Silent mode off 123 Allow Switch Mode 125 Accur. Sign-Sturm 126 rref w/ last col 128 Cmplx var allowed 01 Principal value 02 Constant num 03 Function num 14 Payment at begin 19 V2 complex 20 Underow error 21 Overow error 22 Innite 9E499 27 X+Y*i X+Y*i 28 Simultaneous plot 29 Dont draw axes 31 Plot points only 32 Inverse cursor 35 Binary transfer 36 RECV overwrites 37 Double-space prnt 38 No linefeeds 39 No I/O messages 40 Show clock 41 24-hour clock 42 dd.mm.yy format 43 Dont reschedule 44 Save alarm 51 Fraction mark: ,
489
#n B99F B9A0 B9A1 B9A2 B9A3 B9A4 B9A5 B9A6 B9A7 B9A8 B9A9 B9AA B9AB B9AC B9AD B9AE B9AF B9B0 B9B1 B9B2 B9B3 B9B4 B9B5 B9B6 B9B7 B9B8 B9B9 B9BA B9BB B9BC B9BD B9BE B9BF B9C0 B9C1 B9C2 B9C3 B9C4 B9C5 B9C6 B9C7 B9C8 B9C9 B9CA B9CB B9CC B9CD Message 52 Show one line 53 Show all parens 54 Use tiny element 55 No last args 56 Standard beep off 57 Alarm beep off 58 Dont show INFO 59 Show names only 60 [] locks Alpha 61 [USR] locks User 62 User keys on 63 Custom ENTER on 65 Level 1 multiline 66 Stk: 1 line str 67 Analog clock 68 AutoIndent 69 Innite line edit 70 GROB x lines str 71 No addresses 72 Stack:mini font 73 Edit:mini font 74 Left stack disp 75 Key click on 76 No purge conrm 79 Textbook off 80 EQW mini stk font 81 GRB Alg mini font 82 EQW edit mini fnt 83 Display grobs off 85 SysRPL stk disp 90 CHOOSE:mini font 91 MTRW:list of list 92 MASD SysRPL mode 94 Result <> LASTCMD 95 Algebraic mode 97 List:vert disp 98 Vector:vert disp 99 CAS:verbose 100 Step by step on 103 Complex on 105 Approx. mode on 106 !Simp. in series 109 Num. factorize 110 Large matrices 111 !Simp non rat. 112 i not simplied 113 Linear simp off #n B9CE B9CF B9D0 B9D1 B9D2 B9D3 B9D4 B9D5 B9D6 B9D7 B9D8 B9D9 B9DA BA01 BA02 BA03 BA04 BA05 BA06 BA07 BA08 BA09 BA0A BA0B BA0C BA0D BA0E BA0F BA10 BA11 BA12 BA13 BA14 BA15 BA16 BA17 BA18 BA19 BA1A BA1B BA1C BA1D BA1E BA1F BA20 BA21 BA22 Message 114 Disp x+1 1+x 115 SQRT !simplied 116 Prefer sin() 117 Soft MENU 119 Rigorous off 120 Silent mode on 123 Forb. Switch Mode 125 FastSign-no Sturm 126 rref w/o last col 128 Vars are reals Object: Obs in Name: 1.Send to HP 49. . . 2.Get from HP 49 3.Print display 4.Print. . . 5.Transfer. . . 6.Start Server Enter names of vars to send Vars in SEND TO HP 49 Port: Dbl-Space Delay: Xlat: Linef Baud: Parity: Len: Choose print port Enter object(s) to print Print extra space between lines? Enter delay between lines Choose character translations Print linefeed between lines? Choose baud rate Choose parity Enter printer line length PRINT Type: OvrW Fmt: Chk: Choose transfer port Choose type of transfer Enter names of vars to transfer
490
#n BA23 BA24 BA25 BA26 BA27 BA28 BA29 BA2A BA2B BA2C BA2D BA2E BA2F BA30 BA31 BA32 BA33 BA34 BA35 BA36 BA37 BA38 BA39 BA3A BA3B BA3C BA3D BA3E BA3F BA40 BA41 BA42 BA43 BB01 BB02 BB03 BB04 BB05 BB06 BB07 BB08 BB09 BB0A BB0B BB0C BB0D BB0E Message Choose transfer format Choose checksum type Overwrite existing variables? TRANSFER Local vars Remote PC les Files in Enter name of dir to change to Choose Remote Directory Infrared IR Wire Kermit XModem Odd Even Mark Space Spc ASCII ASC Binary Bin None Newline (Ch 10) Newl Chr 128-159 159 255 Chr 128-255 One-digit arith Two-digit arith Three-digit CRC 1.Single-var. . . 2.Frequencies. . . 3.Fit data. . . 4.Summary stats. . . SINGLE-VARIABLE STATISTICS DAT: Type: Mean Std Dev Variance Total Maximum Minimum Enter statistical data #n BB0F BB10 BB11 BB12 BB13 BB14 BB15 BB16 BB17 BB18 BB19 BB1A BB1B BB1C BB1D BB1E BB1F BB20 BB21 BB22 BB23 BB24 BB25 BB26 BB27 BB28 BB29 BB2A BB2B BB2C BB2D BB2E BB2F BB30 BB31 BB32 BB33 BB34 BB35 BB36 BB37 BB38 BB39 BB3A BB3B BB3C BB3D
E. Error Messages
Message Enter variable column Choose statistics type Calculate mean? Calculate standard deviation? Calculate variance? Calculate column total? Calculate column maximum? Calculate column minimum? Sample Population FREQUENCIES X-Min: Bin Count: Bin Width: Enter minimum rst bin X value Enter number of bins Enter bin width FIT DATA X-Col: Y-Col: Model: Enter indep column number Enter dependent column number Choose statistical model Correlation Covariance PREDICT VALUES Y: Enter indep value or press PRED Enter dep value or press PRED SUMMARY STATISTICS Calculate: X Y X2 Y2 XY N Calculate sum of X column? Calculate sum of Y column? Calculate sum of squares of X? Calculate sum of squares of Y? Calculate sum of products? Calculate number of data points? Linear Fit Logarithmic Fit Exponential Fit
491
#n BB3E BB3F BB40 BB41 BC01 BC02 BC03 BC04 BC05 BC06 BC07 BC08 BC09 BC0A BC0B BC0C BC0D BC0E BC0F BC10 BC11 BC12 BC13 BC14 BC15 BC16 BC17 BC18 BC19 BC1A BC1B BC1C BC1D BC1E BC1F BC20 BC21 BC22 BC23 BC24 BC25 BC26 BC27 BC28 BC29 BC2A BC2B Message Power Fit Best Fit 5.Hypoth. tests. . . 6.Conf. interval. . . 1.Browse alarms. . . 2.Set alarm. . . 3.Set time, date. . . SET ALARM Message: Time: Date: Repeat: Enter "message" or action Enter hour Enter minute Enter second Choose AM, PM, or 24-hour time Enter month Enter day Enter year Enter alarm repeat multiple Enter alarm repeat unit SET TIME AND DATE Choose date display format Monday Tuesday Wednesday Thursday Friday Saturday Sunday None AM PM 24-hour time 24-hr 1 January 2 February 3 March 4 April 5 May 6 June 7 July 8 August 9 September 10 October 11 November #n BC2C BC2D BC2E BC2F BC30 BC31 BC32 BC33 BC34 BC35 BC36 BC37 BC38 BC39 BC3A BC3B BD01 BD02 BD03 BD04 BD05 BD06 BD07 BD08 BD09 BD0A BD0B BD0C BD0D BD0E BD0F BD10 BD11 BD12 BD13 BD14 BD15 BD16 BD17 BD18 BD19 BD1A BD1B BD1C BD1D BD1E BD1F Message 12 December Week Day Hour Minute Second Weeks Days Hours Minutes Seconds Month/Day/Year M/D/Y Day.Month.Year D.M.Y ALARMS 1.Integrate. . . 2.Differentiate. . . 3.Taylor poly. . . 4.Isolate var. . . 5.Solve quad. . . 6.Manip expr. . . INTEGRATE Expr: Var: Result: Enter expression Enter variable name Enter lower limit Enter upper limit Choose result type Choose disp format for accuracy DIFFERENTIATE Value: Enter variable value Expression TAYLOR POLYNOMIAL Order: Enter Taylor polynomial order ISOLATE A VARIABLE Principal Get principal solution only? SOLVE QUADRATIC MANIPULATE EXPRESSION MATCH EXPRESSION Pattern: Replacement:
492
#n BD20 BD21 BD22 BD23 BD24 BD25 BD26 BD27 BE01 BE02 BE03 BE04 BE05 BE06 BE07 BE08 BE09 BE0A BE0B BE0C BE0D BE0E BE0F BE10 BE11 BE12 BE13 BE14 BE15 BE16 BE17 BE18 BE19 BE1A BE1B BE1C BE1D BE1E BE1F BE20 BE21 BE22 BE23 BE24 BE25 BE26 BE27 Message Subexpr First Cond: Enter pattern to search for Enter replacement object Search subexpressions rst? Enter conditional expression Symbolic Numeric Plot Type: : H-View: Autoscale V-View: Choose type of plot Choose angle measure Enter function(s) to plot Enter minimum horizontal value Enter maximum horizontal value Autoscale vertical plot range? Enter minimum vertical value Enter maximum vertical value Plot (x(t), y(t)) Enter complex-valued func(s) Plot y(t)=f(t,y) Enter function of INDEP and SOLN Enter derivative w.r.t. SOLN Enter derivative w.r.t. INDEP Use Stiff diff eq solver? Dat: Col: Wid: Enter data to plot Arrays in Enter column to plot Enter bar width Cols: Enter col to use for horizontal Enter col to use for vertical Steps: Enter indep var sample count Enter dep var sample count Plot Options Lo: Hi: Axes Simult #n BE28 BE29 BE2A BE2B BE2C BE2D BE2E BE2F BE30 BE31 BE32 BE33 BE34 BE35 BE36 BE37 BE38 BE39 BE3A BE3B BE3C BE3D BE3E BE3F BE40 BE41 BE42 BE43 BE44 BE45 BE46 BE47 BE48 BE49 BE4A BE4B BE4C BE4D BE4E BE4F BE50 BE51 BE52 BE53 BE54 BE55 BE56
E. Error Messages
Message Connect Pixels H-Tick: V-Tick: Enter minimum indep var value Enter maximum indep var value Draw axes before plotting? Connect plot points? Plot functions simultaneously? Enter indep var increment Indep step units are pixels? Enter horizontal tick spacing Enter vertical tick spacing Tick spacing units are pixels? Depnd: Enter dependent var name Enter minimum dep var value Enter maximum dep var value H-Var: V-Var: Enter max indep var increment Choose horizontal variable Choose vertical variable 0 INDEP 1 SOLN SOLN( X-Left: X-Right: Y-Near: Y-Far: Z-Low: Z-High: Enter minimum X view-volume val Enter maximum X view-volume val Enter minimum Y view-volume val Enter maximum Y view-volume val Enter minimum Z view-volume val Enter maximum Z view-volume val XE: YE: ZE: Enter X eyepoint coordinate Enter Y eyepoint coordinate Enter Z eyepoint coordinate Save Animation Save animation data after plot? XX-Left:
493
#n BE57 BE58 BE59 BE5A BE5B BE5C BE5D BE5E BE5F BE60 BE61 BE62 BE63 BE64 BE65 BE66 BE67 BE68 BE69 BE6A BE6B BE6C BE6D BE6E BE6F BE70 BE71 BE72 BE73 BE74 BE75 BE76 BE77 BF01 BF02 BF03 BF04 BF05 BF06 BF07 BF08 BF09 BF0A BF0B BF0C BF0D BF0E Message XX-Rght: YY-Near: YY-Far: Enter minimum XX range value Enter maximum XX range value Enter minimum YY range value Enter maximum YY range value XX and YY Plot Options Zoom Factors H-Factor: V-Factor: Recenter at Crosshairs Enter horizontal zoom factor Enter vertical zoom factor Recenter plot at crosshairs? Reset plot Dt Auto Function Polar Conic Truth Parametric Diff Eq Histogram Bar Scatter Slopeeld Wireframe Ps-Contour Y-Slice Gridmap Pr-Surface 1.Solve equation. . . 2.Solve diff eq. . . 3.Solve poly. . . 4.Solve lin sys. . . 5.Solve nance. . . SOLVE EQUATION Enter value or press SOLVE Eq: Enter function to solve Funcs in Solver Variable Order Variables: Enter order of vars to display SOLVE Y(T)=F(T,Y) #n BF0F BF10 BF11 BF12 BF13 BF14 BF15 BF16 BF17 BF18 BF19 BF1A BF1B BF1C BF1D BF1E BF1F BF20 BF21 BF22 BF23 BF24 BF26 BF27 BF28 BF29 BF2A BF2B BF2C BF2D BF2E BF2F BF30 BF31 BF32 BF33 BF34 BF35 BF36 BF37 BF38 BF39 BF3A BF3B BF3C BF3D BF3E Message f: f y: f t: Indep: Init: Final: Soln: Tol: Step: Stiff Enter function of INDEP and SOLN Enter derivative w.r.t. SOLN Enter derivative w.r.t. INDEP Enter independent var name Enter initial indep var value Enter nal indep var value Enter solution var name Enter initial solution var value Press SOLVE for nal soln value Enter absolute error tolerance Enter initial step size Calculate stiff differential? Tolerance Solution SOLVE ANXN+. . . +A1X+A0 Coefcients [ an . . . a1 a0 ]: Roots: Enter coefcients or press SOLVE Enter roots or press SOLVE Coefcients Roots SOLVE SYSTEM AX=B A: B: X: Enter coefcients matrix A Enter constants or press SOLVE Enter solutions or press SOLVE Constants Solutions N: I%YR: PV: PMT: P/YR: FV: Enter no. of payments or SOLVE
494
#n BF3F BF40 BF41 BF42 BF43 BF44 BF45 BF47 BF48 BF49 BF4A BF4B BF4C BF4D BF4E BF4F BF50 BF51 BF52 BF53 BF54 BF55 BF56 C001 DE01 DE02 DE03 DE04 DE05 DE06 DE07 DE08 DE09 DE0A DE0B DE0C DE0D DE0E DE0F DE10 DE11 DE12 DE13 DE14 DE15 DE16 DE17 Message Enter yearly int rate or SOLVE Enter present value or SOLVE Enter payment amount or SOLVE Enter no. of payments per year Enter future value or SOLVE Choose when payments are made TIME VALUE OF MONEY I%/YR PV PMT FV End Begin Beg AMORTIZE Payments: Principal: Interest: Balance: Enter no. of payments to amort Principal Interest Balance Unable to nd root denominator(s) root(s) last obvious factorizing value test(s) searching TAYLR of at nth is numerator(s) Less than multiplicity list of at factor(s) Eigenvalues Computing for Root mult < Numerical to symbolic Invalid operator Result: #n DE18 DE19 DE1A DE1B DE1C DE1D DE1E DE1F DE20 DE21 DE22 DE23 DE24 DE25 DE26 DE27 DE28 DE29 DE2A DE2B DE2C DE2D DE2E DE2F DE30 DE31 DE32 DE33 DE34 DE35 DE36 DE37 DE38 DE39 DE3A DE3B DE3C DE3D DE3E DE3F DE40 DE41 DE42 DE43 DE44 DE45 DE46
E. Error Messages
Message Pivots Press CONT to go on Test To be implemented Unable to factor Z is not = 1 mod 4 Z is not prime Empty {} of equations Not reducible to a rational expression Non unary operator User function Non isolable operator Not exact system Parameters not allowed CAS internal error Invalid for SERIES Operator not implemented (SERIES) No variable in expr. No solution found Invalid derivation arg No solution in ring Not a linear system Cant derive int. var Diff equation order>2 INT:invalid var change Mode switch cancelled No name in expression Invalid user function Cant nd ODE type Integer too large Unable to nd sign Non-symmetric matrix ATAN insufcent order ASIN at innity undef Unsigned inf error LN[Var] comparison err Undef limit for var Bounded var error Got expr. indep of var Cant state remainder LN of neg argument Insufcient order ABS of non-signed 0 Numeric input Singularity! Continue? Cancelled Negative integer
495
#n DE47 DE48 DE49 DE4A DE4B DE4C DE4D DE4E DE4F DE50 DE51 DE52 DE53 DE54 DE55 DE56 DE57 DE58 DE59 DE5A DE5B DE5C DE5D DE5E DE5F DE60 DE61 DE62 DE63 DE64 DE65 DE66 DE67 DE68 E101 E102 E103 E104 E105 E106 E107 E108 E109 E10A E10B E10C E10D Message Parameter is cur. var. dependent Unsimplied sqrt Non polynomial system Unable to solve ODE Array dimension too large Unable to reduce system Complex number not allowed Polyn. valuation must be 0 Mode switch not allowed here Non algebraic in expression Purge current variable Reduction result Matrix not diagonalizable Int[u*F(u)] with u= Int. by part u*v, u= Square root Rational fraction Linearizing Risch alg. of tower Trig. fraction, u= Unknown operator (DOMAIN) Same points Unsigned inf. Solve? CAS not available Can not store current var Not available on the HP40G Not available on the HP49G SERIES remainder is O(1) at order 3
Delta/Heaviside not available from HOME
Warning, integrating in approx mode Function is constant Can not unbind local vars Replacing strict with large inequality No valid environment stored Avogadros number Boltzmann molar volume universal gas std temperature std pressure Stefan-Boltzmann speed of light permittivity permeability accel of gravity gravitation Plancks
#n E10E E10F E110 E111 E112 E113 E114 E115 E116 E117 E118 E119 E11A E11B E11C E11D E11E E11F E120 E121 E122 E123 E124 E125 E126 E127 E128 E129 E401 E402 E403 E404 E405 E406 E407 E408 E601 E602 E603 E604 E605 E606 E607 E608 E609 E60A E60B
Message Diracs electronic charge electron mass q/me ratio proton mass mp/me ratio ne structure mag ux quantum Faraday Rydberg Bohr radius Bohr magneton nuclear magneton photon wavelength photon frequency Compton wavelen 1 radian 2 radians in trig mode Wiens k/q 0/q q*0 dielectric const SiO2 dielec cons ref intensity CONSTANTS LIBRARY Undened Constant Invalid Mpar Single Equation EQ Invalid for MINIT Too Many Unknowns All Variables Known Illegal During MROOT Solving for Searching No Solution Many or No Solutions I%YR/PYR -100 Invalid N Invalid PYR Invalid #Periods Undened TVM Variable END mode BEGIN mode payments/year Principal
496
#n E60C E60D E701 E702 E703 E704 E705 E706 10001 10002 10003 10004 10005 10006 10101 10102 10103 10104 Message Interest Balance NEAR MINE MINES SCORE: YOU MADE IT!! YOU BLEW UP!! Invalid $ROMID Invalid $TITLE Invalid $MESSAGE Invalid $VISIBLE Invalid $HIDDEN Invalid $EXTPRG Invalid File Too Many Unknown Instruction Invalid Field #n 10105 10106 10107 10108 10109 1010A 1010B 1010C 1010D 1010E 1010F 10110 10111 10112 10113 10114 10115 31401
E. Error Messages
Message Val betw 0-15 expected Val betw 1-16 expected Label Expected Hexa Expected Decimal Expected Cant Find Label already dened { expected } expected ( expected Forbidden Bad Expression Jump too Long Val betw 1-8 expected Insufsant Memory Matrix Error Dene Error No Message here
Part VI Index
363 363 363 363 359 77 359 363 363 363 363 363 360 362 362 364 364 365 363 362 364
499
500
Addr. 54C006 540006 549006 560006 14B006 506006 535006 544006 55A006 558006 570006 574006 55E006 564006 39E006 2619D 556006 562006 523006 56A006 56C006 568006 131006 12F006 241006 145006 06E314 577006 14F006 0C9007 0000DE 14D006 55C006 2EF75 149006 511006 537006 53B006 542006 554006 551006 539006 410006 546006 147006 153006 566006 12D006 Name addtASINH addtATAN addtATANH addtCEIL addtCOMB addtCONJ addtCOS addtCOSH addtD->R addtEXP addtEXPM addtFACT addtFLOOR addtFP addti addtics addtINV addtIP addtLN addtLNP1 addtLOG addtMANT addtMAX addtMIN ADDTMOD addtMOD xADDTMOD addtNOT addtOR ADDTOREAL xADDTOREAL addtPERM addtR->D AddTrailingSpace addtRND addtSIGN addtSIN addtSINACOS addtSINH addtSQ addtSQRT addtTAN addtTAN/2 addtTANH addtTRNC addtXOR addtXPON addtXROOT Page 364 364 364 365 363 363 363 364 364 364 365 365 365 365 360 364 365 363 365 365 365 362 362 416 363 453 365 363 408 453 363 365 312 363 362 364 364 364 364 364 364 366 364 363 363 365 362 Addr. 2F179 047CF 047DD 2AF37 2B06A 071AB 31123 25FA9 2F178 25E7A 38093 0A8006 093006 080314 11A007 2BE36 2F2DA 2AA43 256EA 25E7B 2F1AF 00E004 00F004 000FF 2F177 3AAE5 41C006 31066 04B0AB 3CA07 03B46 25E7C 36D4E 36EED 36E6B 3F033 33107 012100 2F31A 2EF5A 29F25 29F35 35BD7 0FE006 2A145 2A158 2A055 2A065
453 351 453 453 136 49 139 139 139 453 10 478 47, 181 73 223 223 49 73 223 223 223 223
addtASINH BBRecalOff&Disp
Addr. 29F55 29F75 3D7AC 25690 2EEEE 2F17A 07B007 46C006 068004 3C8C6 3EAC7 3A390 515006 085314 17E006 3312F 3BEC5 3384B 33391 3382D 003007 002007 35E006 3A756 437006 434006 435006 024314 436006 423006 422006 023314 433006 532006 3A88E 44F006 44E006 54B006 2F1A5 01E100 018100 3EEE7 2F3B3 38DE1 0260DE 3A844 432006 431006 Name AppKeys! AppKeys0 xAPPLY AppMode? APPprompt1! APPprompt2 Approx APPROXCOMPEVAL Arbo xARC xARCHIVE xARG ARG2 xARIT ARRAY2MATRIX arry xARRY> ARRYLISTREAL ARRYREAL ARRYREALREAL ArryToList ArryToMatrix ARSIZE xASIN ASIN2ACOS ASIN2ATAN asin2atan xASIN2C ASIN2Cext asin2ln ASIN2LN xASIN2T ASIN2Text xASINext xASINH asinh2ln ASINH2LNext xASINHext AskQuestion xASM xASM xASN AsnKey xASR xASSUME xATAN atan2asin ATAN2ASIN Page 223 223 453 224 Addr. 43E006 43D006 022314 430006 534006 3A94F 453006 452006 548006 3EB64 27882 25FAE 338C3 05040 05068 25E7D 2EF6C 0130DE 3C49F 2EEEF 3C3B2 04A314 049314 382006 04C314 38F21 33661 0905F 081D9 35C006 3C9D3 3E196 080314 2EFBF 2F9006 0110DE 3EDCC 0530B3 05B0B3 05C0B3 03F0B3 0370B3 0380B3 04B0B3 0150B3 0590B3 05A0B3 0190B3 Name atan2ln ATAN2LNext xATAN2S ATAN2Sext xATANext xATANH atanh2ln ATANH2LNext xATANHext xATTACH Attn# ATTN? ATTNERR ATTNFLG@ ATTNFLGCLR ATTNxcp AtUserStack xAUGMENT xAUTO AUTOSCALE xAXES xAXL xAXM AXQ xAXQ xB>R backup BAK>OB BAKNAME BANGARRY xBAR xBARPLOT xBASE BASE base_ln xBASIS xBAUD BBDownArrow BBEmpty? BBGetDefltHeight BBGetN BBGetNGrob BBGetNStr BBIsChecked? BBMoveTo BBPgDown BBPgUp BBRecalOff&Disp
501
Page 366 352 454 356 349 454 367 352 350 454 19 207 19 207 207 197 454 318 454 454 454 345 454 454 101 101 343 454 454 454 177 420 454 246 246 246 246 245 245 246 245 246 246 245
419 353 453 453 453 38 453 338 10 454 18 13 17 338 65 64 454 352 352 366 454 357 366 351 454 356 349 454 367 352 350 282 479 479 454 208 454 454 366 352
502
Addr. 02F0B3 03B0B3 0250B3 03C0B3 0240B3 03E0B3 0230B3 0260B3 0290B3 0280B3 0220B3 0540B3 0520B3 39765 071A2 08F006 08E006 3EA006 3E2C1 169006 019100 4C8006 0CF006 280006 25FB3 25FB8 25FBD 25FC2 25FC7 3B655 074D0 3E171 33107 33111 3316B 334EF 334F9 33503 3350D 33517 33521 3352B 33535 3353F 33549 33175 33553 3355D Name BBReDrawBackgr BBRereadChkEnbl BBReReadCoords BBRereadFullScr BBReReadHeight BBReReadNElems BBReReadPageSize BBReReadWidth BBRunCanclAction BBRunENTERAction BBRunEntryProc BBSpace BBUpArrow xBEEP BEGIN Berlekamp BerlekampP BESTDIV2 xBESTFIT BESTMATRIXTYPE xBetaTesting BEZOUTMSOLV BFactor BICARREE? BIGDISPN BIGDISPROW1 BIGDISPROW2 BIGDISPROW3 BIGDISPROW4 xBIN BIND xBINS BINT0 BINT1 BINT10 BINT100 BINT101 BINT102 BINT103 BINT104 BINT105 BINT106 BINT107 BINT108 BINT109 BINT11 BINT110 BINT111 Page 245 246 245 246 245 246 245 245 245 245 245 246 246 454 150 373 373 357 454 65 479 396 331 382 281 281 281 281 281 454 116 454 10 10 10 15 15 15 15 15 15 15 15 15 15 10 15 15 Addr. 33567 33571 3357B 33585 3358F 33599 335A3 335AD 3317F 335B7 335C1 335CB 335D5 335DF 335E9 335F3 335FD 33607 33611 33189 3361B 3361B 33625 33625 33193 3319D 331A7 331B1 331BB 331C5 3311B 331CF 331D9 331E3 331ED 331F7 33201 3371F 33729 3320B 33215 3321F 33229 33125 33233 3323D 33247 33251
BBReDrawBackgr bit/
Addr. 3325B 33265 3326F 33279 33283 3328D 3312F 33297 33387 332A1 332AB 332B5 332BF 332C9 332D3 332DD 332E7 332F1 33139 332FB 33305 3330F 33319 33323 3332D 33337 33341 3334B 33355 33143 3335F 33369 33373 3337D 33387 33391 3339B 333A5 333AF 333B9 3314D 333C3 333CD 333D7 333E1 333EB 333F5 333FF Name BINT34 BINT35 BINT36 BINT37 BINT38 BINT39 BINT4 BINT40 BINT40h BINT41 BINT42 BINT43 BINT44 BINT45 BINT46 BINT47 BINT48 BINT49 BINT5 BINT50 BINT51 BINT52 BINT53 BINT54 BINT55 BINT56 BINT57 BINT58 BINT59 BINT6 BINT60 BINT61 BINT62 BINT63 BINT64 BINT65 BINT66 BINT67 BINT68 BINT69 BINT7 BINT70 BINT71 BINT72 BINT73 BINT74 BINT75 BINT76 Page 12 12 12 12 12 12 10 12 13 12 12 12 12 12 12 12 12 12 10 13 13 13 13 13 13 13 13 13 13 10 13 13 13 13 13 13 13 13 14 14 10 14 14 14 14 14 14 14 Addr. 33409 33413 3341D 33157 33427 33607 33431 3343B 33445 3344F 33459 33463 3346D 33477 33481 33161 3348B 33495 3349F 334A9 334B3 334BD 334C7 334D1 334DB 334E5 33585 3358F 335CB 3361B 33625 33751 33495 334C7 336D9 0D4006 2EFC5 2EFC9 2EFC7 2EFC3 2EFC4 2EFC8 2EFC6 2EFC2 2EFBC 2EFB9 2EFBA 2EFBD Name BINT77 BINT78 BINT79 BINT8 BINT80 BINT80h BINT81 BINT82 BINT83 BINT84 BINT85 BINT86 BINT87 BINT88 BINT89 BINT9 BINT90 BINT91 BINT92 BINT93 BINT94 BINT95 BINT96 BINT97 BINT98 BINT99 BINT_115d BINT_116d BINT_122d BINT_130d BINT_131d BINT_263d BINT_91d BINT_96d BINTC0h BIsPrime? bit#%* bit#%+ bit#%bit#%/ bit%#* bit%#+ bit%#bit%#/ bit* bit+ bitbit/
503
Page 14 14 14 10 14 16 14 14 14 14 14 14 14 14 14 10 14 14 14 14 15 15 15 15 15 15 15 15 15 16 16 17 14 15 16 332 57 57 57 58 57 57 57 57 57 57 57 57
504
Addr. 2EFAC 2EFB8 2EFAF 2EFAD 2EFB6 2EFB7 2EFB4 2EFB5 2EFB0 2EFB1 2EFB2 2EFB3 2EFAE 3C70A 2F16D 2EF5E 2EE5C 2F31B 2F31C 25E7E 2F31D 3C6E0 25E7F 25E80 0D5006 0100E0 0A5003 0A4003 0D0006 03D0B3 0AB003 0A6003 0130E0 070004 0190E0 0180E0 0030E0 0A7003 3EE47 2F31E 39480 261D4 27E2E 05DBC 261D9 261DE 261E3 51E006 Name bitAND bitASR bitNOT bitOR bitRL bitRLB bitRR bitRRB bitSL bitSLB bitSR bitSRB bitXOR xBLANK Blank$ BlankDA1 BlankDA12 BlankDA2 BlankDA2a BLANKIT BOTROW xBOX Box/StdLabel Box/StdLbl: BRabin BRbrowse BRDispItems BRdone BrentPow BReReadMenus BRGetItem BRinverse BRoutput BrowseMem.1 BRRclC1 BRRclCurRow BRStoC1 BRViewItem xBUFLEN BUILDKPACKET xBYTES C%%0= C%%1 C%%>%% C%%>C% C%%CHS C%%CONJ C%%SQRT Page 58 58 58 58 58 58 58 58 58 58 58 58 58 454 48 277 277 277 277 277 279 454 95 95 332 Addr. 27DBF 2B2A7 27DE4 261E8 2B15D 27E09 25E81 2B1C1 2B22A 2F31F 05D2C 25E82 25E83 18B006 25E84 25E85 25E86 25E87 25E88 25E89 25E8A 25E8B 25E8C 25E8F 25E90 261ED 261F2 25E8D 25E8E 25E91 25E92 25E93 25E94 25E95 25E96 25E97 25E98 25E99 25E9A 188006 01E0DE 25E9B 3C58E 3BAF5 25E9C 34D00 2EF72 2EF91
331 246
246
454 455 38 36 37 37 38 38 38
bitAND CHR_:
Addr. 2EF90 2B2F2 57F006 050ED 05089 15B006 07E314 0330DE 467006 46B006 349F9 38B28 349D6 34985 365CC 36C4F 36C4F 349B1 3495D 36C36 365B3 368FB 361B2 365E5 36B53 3652C 2AA70 1D5006 466006 007100 3EB006 0516C 05153 3AD1B 25FEF 25FF4 3C3DC 3B4E9 2DA2B 2DA11 08F007 2B5006 0BE002 05AB3 3355D 2F1AD 2F1A7 26210 Name CAL_CURS_POS_VIS CallEditCmd: CANTFACTOR CAR$ CARCOMP CARCOMPext xCASCFG xCASCMD CASCOMPEVAL CASCRUNCH case xCASE case2DROP case2drop case2drpfls caseDEADKEY caseDoBadKey caseDROP casedrop caseDrpBadKy casedrpfls casedrptru caseERRJMP caseFALSE caseSIZEERR caseTRUE CASEVAL CASFLAGEVAL CASNUMEVAL xCD CDIV2ext CDR$ CDRCOMP xCEIL CENTER$3x5 CENTER$5x7 xCENTR xCF cfC cfF CFGDISPLAY CGCDext ChangeFocus CHANGETYPE char CharEdit CHARSEDIT CHECK_SCAN_FONT Page 301 311 403 47 68 372 455 455 353 353 139 455 140 139 140 146 146 139 139 146 139 139 146 140 146 140 408 353 478 47 68 455 96 97 455 455 30 30 405 333 179 15 50 Addr. 2F320 04708 25F2B 25EA6 2F162 0AA006 2F163 07D007 03A314 00B0DE 04D0AB 0000B3 070002 072002 076002 074002 077002 073002 2F15A 075002 0050B3 0060B3 0070B3 0630B3 3BC19 05A51 37AA5 33D40 33D47 33D4E 33D55 33D5C 33F46 33D63 33D32 33D6A 33D71 33D2B 33D78 33D7F 33D86 33D8D 33D94 33D9B 33DA2 33DA9 33DB0 33DB7 Name CHECKHEIGHT CHECKKEY CHECKMENU CheckMenuRow CHECKPICT CheckPNoExt CHECKPVARS CHECKSING xCHINREM xCHOLESKY xCHOOSE Choose Choose2 Choose3 Choose3CANCL Choose3Index Choose3OK Choose3Save CHOOSE_INIT ChooseDefHandler ChooseMenu0 ChooseMenu1 ChooseMenu2 ChooseSimple xCHR CHR># CHR>$ CHR_# CHR_* CHR_+ CHR_, CHR_CHR_-> CHR_. CHR_... CHR_/ CHR_0 CHR_00 CHR_1 CHR_2 CHR_3 CHR_4 CHR_5 CHR_6 CHR_7 CHR_8 CHR_9 CHR_:
505
Page 90 205 293 293 316 374 316 402 455 455 244 233 233 234 233 234 233 233 244 244 244 244 455 22 47 41 41 41 41 41 43 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
506
Addr. 33DBE 33DC5 33F4D 33FBD 33FCB 33DCC 33DD3 33FC4 33F54 33FA1 33FA8 33E90 33DDA 33F5B 33DE1 33E97 33DE8 33E9E 33EA5 33DEF 33D39 33F62 33EAC 33DF6 33EB3 33DFD 33E04 33EBA 33EC1 33E0B 33E12 33EC8 33F69 33E19 33ECF 33ED6 33E20 33EDD 33E27 33F70 33E2E 33EE4 33EEB 33E35 33F77 33E3C 33EF2 33E43 Name CHR_; CHR_< CHR_<< CHR_<= CHR_<> CHR_= CHR_> CHR_>= CHR_>> CHR_[ CHR_] CHR_a CHR_A CHR_Angle CHR_B CHR_b CHR_C CHR_c CHR_d CHR_D CHR_DblQuote CHR_Deriv CHR_e CHR_E CHR_f CHR_F CHR_G CHR_g CHR_h CHR_H CHR_I CHR_i CHR_Integral CHR_J CHR_j CHR_k CHR_K CHR_l CHR_L CHR_LeftPar CHR_M CHR_m CHR_n CHR_N CHR_Newline CHR_O CHR_o CHR_P Page 41 41 43 43 43 41 41 43 43 42 42 42 41 43 41 42 41 42 42 42 41 43 42 42 42 42 42 42 42 42 42 42 43 42 42 42 42 42 42 41 42 43 43 42 41 42 43 42 Addr. 33EF9 33F7E 33E4A 33F00 33F07 33E51 33F85 33F0E 33E58 33F8C 33F93 33F15 33E5F 33E66 33F1C 33F9A 33E6D 33F23 33F2A 33E74 33F31 33E7B 33E82 33F38 33E89 33F3F 33FAF 33FB6 01D0DE 2F215 2F216 2F217 2F218 2F219 2F13D 51D006 203006 202006 25EA7 2631E 26328 26323 007002 25EA8 262B0 25E9D 26292 262B5
CHR_; ClrServMode
Addr. 26300 187006 25E9E 26297 26D006 184006 262BA 26305 190006 2629C 185006 262BF 2630A 262A1 186006 262C4 2630F 262A6 262C9 26314 262AB 1CD006 1CE006 1CF006 181006 15A006 2F321 2BF1C 18F006 2F324 158006 19C006 521006 177006 262CE 25F25 172006 2BCA2 2EF06 36B7B 25E9F 16F006 2A7A7 3EDAC 3D2B4 193006 261C0 19E006 Name CK1&Dispatch CK1Cext CK1NoBlame CK1NOLASTWD CK1TONOext CK1Z CK2 CK2&Dispatch CK2FPOLY CK2NOLASTWD CK2Z CK3 CK3&Dispatch CK3NOLASTWD CK3Z CK4 CK4&Dispatch CK4NOLASTWD CK5 CK5&Dispatch CK5NOLASTWD ckaddt* ckaddt+ ckaddtCKALG CKCARCOMP CkChr00 CkEQUtil CKFPOLYext CKGROBFITS CKINNERCOMP CKINT>0 CKLN CKMATRIXELEM CKN CKNNOLASTWD CKNUMARRY cknumdsptch1 CKPICT CKREAL CKREF CKSAMESIZE CkSecoType xCKSM CKSYMBTYPE CKSYMREALCMP CLCD10 CLEANIDLAM Page 197 201, 333 197 197 421 198, 328 196 197 326 197 198, 328 196 197 197 198, 328 196 197 197 196 197 197 361 360 361 201 73 55 326 90 72 334 348 326 196 197 65 87 316 198 171 339 455 199 201 277 326 Addr. 3DD4E 261C5 2F15B 2F2DC 26021 2A085 2A0A5 2A0B5 2A095 39144 2F153 2EED7 39839 3EC95 2EEC9 2F15E 2EED4 2EED5 2571E 26035 2569A 25676 2649F 09D007 2EE74 2EE7D 2EE8D 2EE75 2EE8E 2EEB3 2EE80 2EE81 2EE8F 2EEA7 2EE90 2EEB5 2EE6E 2EE6D 2EF68 0A1007 319C1 2603A 257BE 2EEAF 2561C 0AC007 2603F 2F325 Name xCLEAR CLEARLCD CLEARMENU ClearSelection CLEARVDISP Clipboard! Clipboard0 Clipboard? Clipboard@ xCLKADJ CLKADJ* CLKTICKS xCLLCD xCLOSEIO CLOSEUART Clr16 Clr8 Clr8-15 ClrAlgEntry ClrAlphaAnn ClrAppMode ClrAppSuspOK ClrBusyAnn CLRCOMPLEX ClrDA1Bad ClrDA1IsStat ClrDA1OK ClrDA2aBad ClrDA2aOK ClrDA2bBad ClrDA2bIsEdL ClrDA2bNoCh ClrDA2bOK ClrDA2bTemp ClrDA2OK ClrDA3Bad ClrDA3OK ClrDAsOK ClrDouseAlm CLREXACT CLRFRC ClrLeftAnn ClrNewEditL ClrNoRollDA2 ClrNUsrKeyOK CLRPLUSAT0 ClrRightAnn ClrServMode
507
Page 455 277 293 306 277 307 307 307 307 455 173 455 455 180 277 277 277 278 278 224 224 278 406 276 273 275 276 275 276 276 276 275 275 275 276 275 275 406 277 276 208 407 277
508
Addr. 26044 26049 3DD8E 3E91A 2EF7B 2EF8A 2F2FA 2EF88 2EF7D 2EF82 2EF80 2EF81 2EF7E 2EF7C 2EF7A 2EF77 2EF78 2EF79 2EF74 2F194 2F195 2EF83 2EF84 2EF7F 3F11C 2F326 2B6006 3311B 081314 526006 518006 3B193 25EA9 262F1 25EA0 2F244 3F481 0F0006 35D08 2602B 35EB6 03F0AB 03E0AB 0390AB 06FD1 34AD3 359AD 35994 Name ClrSysFlag ClrUserFlag xCLSIGMA xCLUSR CMD_BAK CMD_COPY CMD_COPY.SBR CMD_CUT CMD_DEB_LINE CMD_DEL CMD_DOWN CMD_DROP CMD_END_LINE CMD_NXT CMD_PAGED CMD_PAGEL CMD_PAGER CMD_PAGEU CMD_PLUS CMD_PLUS2 CMD_PLUS3 CMD_STO_DEBUT CMD_STO_FIN CMD_UP xCMDAPPLY CMDSTO CMODext cmp xCMPLX CMPLXLN CNORMext xCNRM CodePl>%rc.p COERCE COERCE$22 COERCE&CKSGN COERCE2 COERCE2Z COERCEDUP COERCEFLAG COERCESWAP xCOL+ xCOLxCOL COLA COLA_EVAL COLAcase COLACOLA Page 175 175 455 455 305 306 307 306 305 302 305 302 305 305 305 305 305 305 301 301 302 306 306 305 314 424 10 455 349 333 455 205 22 47 22 22 22 22 135 22 455 455 455 131 131 140 131 Addr. 36865 359C8 34AF4 363FB 2BAB3 270006 271006 26E006 3E5A0 0300DE 3B423 0BE006 0C0006 0C1006 0BF006 2EF9A 00D100 262FB 09B007 58B006 099007 096007 095007 275006 2FD006 3BF77 0260AB 3C967 39A6C 0180AB 3396D 0190AB 39B1E 02A0DE 3989C 0FF006 2CB006 8071B 08D08 08D5A 204006 205006 38F41 2F327 2C393 3DE24 3A5D0 42B006
355 455 455 456 376 376 376 376 312 478 128 406 404 406 406 406 381 73 456 456 456 456 456 20 456 458 456 137 424 169 169 328 328 456
ClrSysFlag DA1IsStatus?
Addr. 447006 446006 42C006 413006 412006 409006 408006 309006 30D006 30E006 30B006 30C006 52C006 3A6C2 44B006 44A006 52F006 0CE007 3DE3F 3D128 01B100 393CA 08696 25EA1 00113 27195 01A100 3B208 2EEFA 2EEFB 27D3F 2F328 25EA2 25EA3 4D5006 3EA01 0FF007 2597B 25980 057314 22E006 2EEFE 860B8 2658A 26585 2EEEA 26030 26580 Name cos2exp COS2EXPext COS2ext cos2tan COS2TAN cos2tan/2 COS2TAN/2 COSEXPA COSEXPA* COSEXPA*1 COSEXPA+ COSEXPAxCOSext xCOSH cosh2exp COSH2EXPext xCOSHext COSTEST xCOV xCR xCRC xCRDIR CREATE CREATEDIR CRER CRLF$ xCRLIB xCROSS CROSS_HAIRS CROSS_OFF CROSSGROB CROSSMARKON CRUNCH CRUNCHNoBlame CSQFFext CST CSTFRACTION? CtlAlarm! CtlAlarm@ xCURL CURL CURRENTMARK? CurROMBank2 CURSOR+ CURSOR@ CURSOR_END? CURSOR_OFF CURSOR_OFF+ Page 367 352 351 366 351 365 351 355 369 369 369 369 349 456 367 352 349 456 456 479 456 167 168 43 479 456 Addr. 2657B 26594 519006 15D006 0150DE 0120AB 50C006 2C07B 2C086 2C091 2C09C 2C10B 2C268 2C273 2C27E 2C116 2C13A 2C145 2C150 2C2B5 2C15B 2C166 2C171 2C17C 2C187 2C192 2C1B0 2C1CE 2C1D9 2C289 2C1E4 2C21B 2C29F 2C1EF 2C1FA 2C205 2C210 2C226 2C231 2C23C 2C247 2C2AA 2C252 2C25D 2C294 3B06E 2EEB0 2EEAB Name CURSOR_OFF0 CURSOR_PART CXIRext CXRIext xCYCLOTOMIC xCYLIN CZABS D/D* D/D+ D/DD/D/ D/D= D/D D/DX D/DY D/DABS D/DACOS D/DACOSH D/DALOG D/DAPPLY D/DARG D/DASIN D/DASINH D/DATAN D/DATANH D/DCHS D/DCONJ D/DCOS D/DCOSH D/DDER D/DEXP D/DIFTE D/DINTEGRAL D/DINV D/DLN D/DLNP1 D/DLOG D/DSIN D/DSINH D/DSQ D/DSQRT D/DSUM D/DTAN D/DTANH D/DWHERE xD>R DA1Bad? DA1IsStatus?
509
Page 300 333 456 37
456 415
510
Addr. 2EE62 2BF3A 2EEB1 2EE66 2BF53 2EEB2 2EE7E 2EEB7 2BF6C 2EEA6 2EEB4 2EE63 2BF85 29EE9 0610AB 36E07 39078 2EED0 39238 2EED2 2F329 2F1AB 2DEBB 2DD27 0690AB 0150DD 2F190 2EED1 39218 00C007 00D007 3B670 0B1006 2F32A 2A893 2A878 25EAA 2F1BF 2A842 2A8AE 2A85D 2A8C9 2A8E4 3E576 0370DE 041ED 0250DE 3E85C Name DA1OK? DA1OK?NOTIT DA2aBad? DA2aLess1OK? DA2aOK?NOTIT DA2bBad? DA2bIsEdL? DA2bNoCh? DA2bOK?NOTIT DA2bTemp? DA3Bad? DA3OK? DA3OK?NOTIT DaDGNTc xDARCY dARRYcase xDATE DATE xDATE+ DATE+DAYS Date>d$ Date>hxs13 DAY# Day>Date xdB xDBUG DcompWidth@ DDAYS xDDAYS DEB.MATRIX DEB.MATRIXTYPE xDEC DeCntMulti DECODE Decomp#Disp Decomp#Line DECOMP$ Decomp%Short Decomp1Line DecompEcho DecompEdit DecompStd1Line DecompStd1Line32 xDECR xDEDICACE DEEPSLEEP xDEF xDEFINE Page 275 275 276 275 275 276 276 276 275 276 275 275 456 145 456 173 456 173 173 173 Addr. 3B549 288006 285006 0360DE 3E0006 2EF95 391D8 3D1C7 29D6A 3EF3B 0F3007 0BA006 2A5006 3C51F 3DCA7 0314C 4F2006 4F3006 80EDC 3D258 1B3006 00E314 1A5006 1A1006 1A3006 1A4006 2C0ED 2C0A7 1DD006 003314 00F314 07E007 3B1BA 3EB84 2F7006 03B0AB 00C0DE 36E93 084314 00E0AB 16E006 345006 004007 38BAE 39725 25EBC 25FB8 25FBD
412 457 457 391 457 457 420 457 145 457 457 64 337
DA1OK? DoDelim
Addr. 25FC2 25FC7 25F16 2EF6F 2EF71 2F19E 2EEFF 2F32B 2EE5A 2F300 25FE5 25FEA 0C0007 2DFE0 2DFF4 25FB3 25FB8 25EAB 25FE0 25FBD 25EAC 25FC2 25FC7 25FCC 261F7 25FD1 25FD6 25FDB 38C00 2C305 25EAD 2C2F9 2EE5B 2A7F7 25EBD 0160DD 255B5 108006 0190DE 118007 3C2006 2F21A 056314 026314 31994 3EF006 072314 22F006 Name DISP@17 DISP@25 DISP_LINE DispBadToken DispBadToken2 DispCommandLine DispCoord1 DISPCOORD2 DispEditLine DispILPrompt DISPLASTROW DISPLASTROWBUT1 DISPLAYext DispMenu DispMenu.1 DISPN DISPROW1 DISPROW1* DISPROW10 DISPROW2 DISPROW2* DISPROW3 DISPROW4 DISPROW5 DISPROW6 DISPROW7 DISPROW8 DISPROW9 DISPST2&FREEZE DispStatus DISPSTATUS2 DispStsBound DispTime? DispTimeReq? DispVarsUtil xDISPXY Distance DISTDIVext xDISTRIB DISTRIB* DISTRIB/ Dither xDIV xDIV2 DIV2 DIV2LISText xDIV2MOD DIVERGENCE Page 281 281 51 312, 274 282 282 274 274 282 282 98 292, 274 292, 274 281 281 281 281 281 281 281 281 281 281 281 281 281 282 274 282 274 274 457 95 372 368 368 95 457 457 372 457 415 Addr. 220006 044314 27A006 3F4006 3F1006 071314 249006 3F0006 062314 48D006 36E43 3816B 073F7 25EAE 25EAF 25EB0 25EBE 2F2F0 2F2EE 2F2E4 2F2F1 2F2E5 2EF04 2F2EF 25EB1 1A7006 02E002 25EBF 2EEC1 25EB2 2EFA6 074E4 2EEC5 2EF02 25EC0 25EB3 09E002 0A0002 09F002 09D002 0B0002 2EF05 2EECB 2EECA 2EFA8 2F2F9 2EECD 25EC1 Name DIVIS xDIVIS DIVISext DIVISIBLE? DIVMETAOBJ xDIVMOD DIVMOD DIVOBJext xDIVPC DIVPC! dLISTcase xDO DO DO#EXIT DO$EXIT DO%EXIT Do1st/2nd+: DO<Del DO<Skip DO>BEG DO>Del DO>END DO>LCD DO>Skip DO>STR DO>STRID DoAlert DoBadKey DOBAUD DOBEEP DOBIN DOBIND DOBUFLEN DOC>PX DoCAlarmKey DOCHR DoCKeyCancel DoCKeyChAll DoCKeyCheck DoCKeyOK DoCKeyUnChAll DOCLLCD DOCR docr DODEC DODEL.L DODELAY DoDelim
511
Page 415 457 381 357 88, 361 457 420 457 145 457 151 156 156 156 278 303 305 305 303 306 92 305 53 54 282 207 180 178 177 116 180 318 46 244 244 244 244 244 277 181 177 303 181 302
512
Addr. 25EC2 25EB4 2604E 2EEF9 39527 2F2DD 2F2DE 2F2E8 2EEBD 25EC3 26053 2EF60 25EC4 2EFA5 2C371 2EEC4 0AF002 0B5002 25EC5 0B4002 25886 2EF03 05B0AB 0B2006 0210DE 25EC6 2589A 026FE 0AE002 0000B1 25EC7 25EC8 2F192 2F142 008007 007007 00B007 2F2EA 25EC9 2EFA7 2F13C 00A007 009007 2EEC0 2EEC2 2EEBE 25ECA 25ECB Name DoDelims DODISP DOENG DOERASE xDOERR DoFarBS DoFarDel DOFIND DOFINISH DoFirstRow DOFIX DOGRAPHIC DoHere: DOHEX DoInputForm DOKERRM DoKeyCancel DoKeyEdit DoKeyOb DoKeyOK DoLabel DOLCD> xDOLIST DoLS xDOMAIN DoMenuKey DoMenuKeyNS DOMINIFONT DoMKeyOK DoMsgBox DoNameKeyLRS DoNameKeyRS DoNewEqw DoNewMatrix DoNewMatrixCplx DoNewMatrixReal
DoNewMatrixRealOrCplx
DONEXT DoNextRow DOOCT DoOldMatrix DoOldMatrixCplx DoOldMatrixReal DOOPENIO DOPARITY DOPKT DoPlotMenu DoPrevRow
308 177
180 180
DoDelims DUPTYPELAM?
Addr. 35289 364AF 3DCC7 37032 04D3E 3596D 3606B 36342 36007 35733 3574D 2F32F 26062 35280 26215 2E0006 2DF006 3558C 3EFEF 35136 35172 35109 115007 168006 35190 170006 35118 171006 34EBE 3DBEA 03188 3532B 36441 352BD 348F7 36D21 3490E 36ED4 36F51 364C8 35912 34431 35956 3531C 3571E 366D0 362DE 36C0E Name DROPFALSE DROPLOOP xDROPN DROPNDROP DROPNULL$ DROPONE DROPOVER DROPRDROP DROPROT DROPSWAP DROPSWAPDROP DropSysErr$ DropSysObs DROPTRUE DropVStack DROPZ0 DROPZ1 DROPZERO xDTAG DTYPEARRY? DTYPECOL? DTYPECSTR? DTYPEGAUSSINT? DTYPEIRRQ? DTYPELIST? DTYPENDO? DTYPEREAL? DTYPFMAT? DUMP xDUP DUP DUP#0<> DUP#0<>WHILE DUP#0= DUP#0=case DUP#0=csDROP DUP#0=csedrp DUP#0=IT DUP#0=ITE DUP#0_DO DUP#1+ DUP#1+PICK DUP#1DUP#1= DUP#2+ DUP#<7 DUP$>ID DUP%0= Page 136 151 458 75, 106 46 21 106 129 106 106 106, 107 Addr. 3696E 36513 3DC05 35D30 3674D 34797 3432C 35C2C 37258 159006 3F29A 35CE0 36635 25EBB 3622A 3645A 357E2 3627A 3DCE2 36252 16C006 36266 36ABD 36AEA 3611F 0F7006 36133 34FC0 35C40 35FF3 35A56 347AB 36B26 350CD 35136 350EB 35037 35127 35172 35109 351AE 35082 350BE 116007 35181 350FA 35046 350DC
513
Name Page DUP' 130 DUP1LAMBIND 116 xDUP2 458 DUP3PICK 106, 106 DUP3PICK#+ 24 DUP4PUTLAM 119 DUP4UNROLL 106 DUP@ 166 DupAndThen DUPCKLEN{} 72 xDUPDUP 458 DUPDUP 106 DUPEQ: 137 DUPGROBDIM 90 DUPINCOMP 71 DUPINDEX@ 152 DUPLEN$ 47 DUPLENCOMP 68 xDUPN 458 DUPNULL$? 55 DUPNULL[]? 339 DUPNULLCOMP? 68 DUPNULL{}? 72 DUPONE 21 DUPPICK 106 DupQIsZero? 334 DUPROLL 106 DUPROM-WORD? 100 DUPROMPTR@ 100 DUPROT 106 DUPSAFE@ 166 DUPTEMPENV 119 DUPTWO 21 DUPTYPEAPLET? 200 DUPTYPEARRY? 199 DUPTYPEBINT? 200 DUPTYPECHAR? 200 DUPTYPECMP? 199 DUPTYPECOL? 200 DUPTYPECSTR? 199 DUPTYPEEXT? 200 DUPTYPEFLASHPTR? 200 DUPTYPEFONT? 200 DUPTYPEGAUSSINT? 201, 333 DUPTYPEGROB? 199 DUPTYPEHSTR? 199 DUPTYPEIDNT? 199 DUPTYPELAM? 199
136 162 327 327 21 458 199 200 199 200, 333 326, 421 199 339 199 201 117 458 106 26 151 25 141 142 141 141 141 151 24 77, 106 24 26 24 26 116 35
514
Addr. 35190 350AF 350A0 35118 35145 35154 0CC006 35163 3519F 183006 35091 3457F 36AD6 10A006 0FB006 0F9006 109006 36A77 00003 18C006 2C121 2EEE4 2F11C 25ED1 2EEE3 039EF 25F10 0070DD 0090DD 25ECE 25F11 36E57 2F1A9 2F1A8 2EEE5 257A2 806FD 2EEEB 25ED2 2EEEC 2F2DF 2EEE9 02E314 3D8006 3DB006 3DA006 02C0AB 02D0AB Name DUPTYPELIST? DUPTYPELNGCMP? DUPTYPELNGREAL? DUPTYPEREAL? DUPTYPEROMP? DUPTYPERRP? DupTypeS? DUPTYPESYMB? DUPTYPETAG? DUPTYPEZ? DUPTYPEZINT? DUPUNROT DUPZERO DupZIsEven? DupZIsNeg? DupZIsOne? DupZIsTwo? dvarlsBIND DZP E%%>C%% easyabs Echo$Key Echo$NoChr00 Echo2Macros EchoChrKey ECUSER ederr xEDIT xEDITB EDITDECOMP$ editdecomp$w EditExstCase EDITF EditFont EditLevel1 EditLExists? EDITLINE EDITLINE$ EditMenu EDITPARTS EditSelect EditString xEGCD EGCDext EGCDNEWG EGCDSWAP xEGV xEGVL Page 199 200 200 199 200 200 335 199 200 200 200 106, 107 21 334 334 334 334 117 37 302 302 Addr. 33157 331BB 342BB 33427 33431 33175 4F9006 3805D 371B3 2F330 2F331 38A54 0570AB 38A14 3B5DA 088314 03B2E 3663A 3BDE6 34999 34920 2F332 36EBB 36F01 25ED3 37829 3664E 3607F 03B97 36D62 2AD81 36D08 3660D 36E7F 36662 3C0006 3776B 3BF006 25ECF 462006 4BF006 00B0DD 010004 01D004 01C004 01B004 011004 019004
458 458 458 458 137 137 458 144 144 144 144 73 70 137 137 137 144 145 144 137 144 137 78 69 78 318 86 387 458
458 458
311 98
DUPTYPELIST? xEXPLN
Addr. 01F004 01A004 01E004 012004 016004 014004 013004 017004 018004 015004 01F100 57E006 3C553 26071 2606C 3376F 33819 33779 58E006 3955B 092006 26067 090006 04ED1 39591 39576 04CE6 04D33 2F1A1 36883 04D0E 04E5E 38ABA 04EB8 091006 214006 038314 06F8E 395AC 2F2E3 2F2FB 38C2C 25ED0 26319 25F29 257006 258006 259006 Name EQW3GROBmini EQW3GROBStk EQW3GROBsys EQW3StartEdit EQW3ViewLeft EQW3ViewLeftX EQW3ViewMargin EQW3ViewRight EQW3ViewRightRPL EQW3ViewRightX xER ERABLEERROR xERASE ERASE&LEFT$3x5 ERASE&LEFT$5x7 Err#Kill Err#NoLstArg Err#NoLstStk ERR$EVALext xERR0 ErrBadDim ERRBEEP ErrInfRes ERRJMP xERRM xERRN ERROR@ ERRORCLR ErrorHandled? ERROROUT ERRORSTO ERRSET xERRTHEN ERRTRAP ErrUndefRes EULER xEULER EVAL xEVAL EVAL.LINE EVAL.SELECTION xEVAL> EVALCRUNCH EvalNoCK EvalNoCK: EvalNoCKx* EvalNoCKx+ EvalNoCKxPage 98 98 98 Addr. 25A006 25B006 262006 25C006 260006 25D006 25E006 261006 25F006 263006 264006 2EF69 2A3006 283006 284006 0A2007 09E007 098007 097007 2F333 2F2F8 258EF 3709B 27C33 04E37 240006 06C314 3A9B7 087314 01A0DE 458006 250006 3E5E9 34C82 000314 12C006 1D7006 525006 076314 30F006 313006 315006 311006 312006 314006 529006 3E25E 017314 Name EvalNoCKx/ EvalNoCKx EvalNoCKxAND EvalNoCKxCHS EvalNoCKxCOMB EvalNoCKxINV EvalNoCKxMOD EvalNoCKxOR EvalNoCKxPERM EvalNoCKxXOR EvalNoCKxXROOT EvalParsed EVALUSERFCN EVIDENText EVIDSOLV EXACT? EXACTMODE EXACTOFF EXACTON EXCHINITPK EXEC_CMD ExitAction! ExitAtLOOP ExitFcn EXITMSGSTO EXLR xEXLR xEXP xEXP&LN xEXP2POW exp2sincos EXPAMOD xEXPAN EXPAND xEXPAND EXPAND EXPANDBOTH EXPANDLN xEXPANDMOD EXPEXPA EXPEXPA* EXPEXPA*1 EXPEXPA+ EXPEXPAEXPEXPANEG xEXPext xEXPFIT xEXPLN
515
Page 417 417 418 417 418 417 417 418 418 418 418 354 382 382 406 406 406 406 309 291 152 156 356 459 459
479 403 458 97 97 17 17 17 404 458 403 156 403 156 458 458 156 156 156 156 157 157 403 414 458 128 458 309 309
367 459 48, 57 459 347 349 459 355 369 369 369 369 369 349 459 459
516
Addr. 418006 3AB6F 41D006 33193 05481 2F334 3398B 336F7 33701 0050AB 0620AB 3ABAF 27B006 27C006 296006 001314 28C006 572006 077314 21F006 043314 573006 576006 27E9B 03AC0 369FF 283E8 36554 36554 0600AB 3F2DF 3F6006 09A006 255DD 255D3 255D8 255D3 255E2 3B529 3B635 3D81D 2F335 21D006 041314 289006 0180DE 282006 01A0AB Name EXPLNext xEXPM EXPM2EXP EXT EXTN Extobcode EXTOBOB EXTREAL EXTSYM xEYEPT xF0 xFACT FACT1ext FACTOext FACTOOBJext xFACTOR FACTORACext factorial xFACTORMOD FACTORS xFACTORS facts factzint failed FALSE FALSE' FalseFalse FalseTrue FALSETRUE xFANNING xFAST3D FastDiv? FASTREDUCE FBoxB FBoxG1 FBoxG2 FBoxW FBoxXor xFC? xFC?C xFCNAPPLY FcnUtilEnd FCOEF xFCOEF FDEG2ext xFDISTRIB FEVIDENText xFFT Page 356 459 351 11 81, 71 20 16 16 459 459 475 381 381 384 459 383 350 459 415 459 350 330 136 136 130 136 136 136 459 459 357 384 94 94 94 94 94 459 459 Addr. 3E1006 3319D 332FB 3334B 3332D 33323 33355 33305 33341 33337 33319 3330F 067004 00C0DD 06D004 06E004 25F2C 37798 391AE 4C2006 35A006 2F336 2F2F2 2F110 3ED76 264DB 264CC 33139 3344F 34257 33463 33445 34357 3B59A 2F337 105007 201006 200006 1FF006 1FE006 225006 216006 1E9006 1EC006 207006 24D006 239006 251006
413 413 413 413 346 414 412 412 413 416
EXPLNext xFREEZE
Addr. 1D6006 1F3006 1D8006 252006 226006 208006 1FC006 213006 1E5006 1DB006 1EB006 1DC006 22D006 1EA006 20E006 1EE006 1ED006 20D006 1F0006 1D9006 1F2006 1E0006 24F006 094007 210006 24E006 1E6006 211006 212006 224006 10E007 1E8006 1E2006 23B006 20F006 1F4006 0FA007 0FC007 227006 1DA006 1FB006 1FD006 1F6006 1EF006 1F5006 1F7006 1F8006 1F9006 Name FLAGEXPAND FLAGEXPLN FLAGFACTOR FLAGFACTORMOD FLAGGAUSS FLAGGCD FLAGHALFTAN FLAGHORNER FLAGIBP FLAGIDNTEXEC FLAGILAP FLAGINTVX FLAGJORDAN FLAGLAP FLAGLCM FLAGLDECSOLV FLAGLDSSOLV FLAGLGCD FLAGLIN FLAGLISTEXEC FLAGLNCOLLECT FLAGMATRIXLIMIT FLAGMPOWMOD FLAGNAME FLAGPARTFRAC FLAGPOWMOD FLAGPREVAL FLAGPROPFRAC FLAGPTAYL FLAGQXA FLAGRESULTANT FLAGRISCH FLAGSERIES FLAGSEVAL FLAGSIMP2 FLAGSINCOS FLAGSUM FLAGSUMVX FLAGSYLVESTER FLAGSYMBEXEC FLAGTAN2SC FLAGTAN2SC2 FLAGTCOLLECT FLAGTEXPAND FLAGTLIN FLAGTRIG FLAGTRIGCOS FLAGTRIGSIN Page 411 413 411 395 346 413 413 414 412 411 412 411 345 412 414 412 414 412 411 413 412 405 414 412 414 414 345 380 412 412 416 414 413 Addr. 1FA006 23A006 1F1006 0170AB 25ED4 860CC 2EE61 2DCB5 192006 3ACD1 261CA 261CA 2EEC8 2F113 00F0DD 00E0DD 00D0DD 2621A 0030DD 06F004 3DB62 33297 332E7 332C9 332BF 332F1 332A1 332DD 332D3 332B5 332AB 3312F 333B9 05E314 236006 2D4006 3423A 36043 33193 333A5 3339B 33297 34331 3AC87 0D5007 0CB007 3EB2C 39745 Name FLAGTRIGTAN FLAGTRUNC FLAGTSIMP xFLASHEVAL FlashMsg FlashROMTAB2 FlashWarning FLOAT FLOAT? xFLOOR FLUSH FLUSHKEYS FLUSHRSBUF FNDALARM{} xFONT6 xFONT7 xFONT8 FONT> xFONT FontBrowser xFORMUNIT FORTY FORTYEIGHT FORTYFIVE FORTYFOUR FORTYNINE FORTYONE FORTYSEVEN FORTYSIX FORTYTHREE FORTYTWO FOUR FOURFIVE xFOURIER FOURIER FOURIERext FOURROLL FOURROLLROT FOURTEEN FOURTHREE FOURTWO FOURTY FOURUNROLL xFP FR2ND% FRACPARITY xFREE xFREEZE
517
Page 413 416 413 459 282 282 201 459 205 205
346 411 413 413 413 412 413 413 413 413
12 12 12 12 12 12 12 12 12 12 10 14 459 415 424 107 108 11 13 13 12 108 459 425 425 460
518
Addr. 27F006 267006 042314 21E006 3B509 3B615 2621F 001004 00A004 00B004 00C004 00D004 002004 003004 004004 005004 006004 007004 008004 009004 0FE007 0AE007 3C955 06B314 164006 0070DE 05F42 383006 04D314 095006 26076 25ED5 02C314 24A006 2B4006 0EC006 075314 2F105 3C1C7 2F2F3 2F2F4 34504 2F2F6 314E4 314CA 001102 0371D 2DDD5 Name FRND FROMLISText xFROOTS FROOTS xFS? xFS?C FSCANFONT FSTR1 FSTR10 FSTR11 FSTR12 FSTR13 FSTR2 FSTR3 FSTR4 FSTR5 FSTR6 FSTR7 FSTR8 FSTR9 FTAYL FULLDATA xFUNCTION xFXND FXNDext xGAMMA GARBAGE GAUSS xGAUSS GBASIS GBUFF GBUFFGROBDIM xGCD GCD1MOD GCDext GCDHEUext xGCDMOD GDISPCENTER xGET GET.W-> GET.W<get1 GET_CUR_FONT.EXT GETAB0 GETAB1 xGETADR GETATELN getBPOFF Page 382 418 460 415 460 460 54 Addr. 31518 2F338 04A41 26224 26229 2F339 57D006 04E07 0BB002 26238 2623D 26242 26247 3C22D 2F106 2EEBF 2F33A 25ED6 25ED7 25ED9 2F33B 075A5 3483E 2EF6D 2F33C 25EDA 2624C 25F17 002102 2EEBC 003102 004102 25EDB 2F33D 2F107 04A0B 2EEF5 2F10D 2F10A 2F108 07A007 2F33E 2F33F 04D64 04714 25967 25F18 26233
Page
55 54 54 54 54 55 55 393 407 460 460 380 460 178 346 460 384 272 273 460
283 273 460 317 181 206 206 206 117 119 51 289 162 161 479 180 479 479 50 316 317 288 317 317
479 64
FRND hxs>$
Addr. 2F0FE 2F0FF 2F007 2F109 2F10E 2F100 2F008 2F340 097006 0C80B0 0660AB 094006 3C74A 25588 107007 34A31 2F2E6 3B57F 0090DE 3C5AE 2F341 098006 255A1 00A0AB 38C1B 3317F 2607B 26080 368E7 2EFDB 2F342 25ED8 2E0D5 07C314 0BF007 0860B0 0870B0 26085 36C68 096006 2608A 2558D 3C7D8 25EDC 25EDD 0ED006 001100 005100 Name GETXMAX GETXMIN getxpos GETXPOS GETYMAX GETYMIN getypos GETYPOS GFACTOR gFldVal xgmol GMSOLV xGOR Gor GOSPER? GOTO GOTOLABEL xGRAD xGRAMSCHMIDT xGRAPH GraphicExit GREDUCE Grey? xGRIDMAP xGROB grob GROB! GROB!ZERO GROB!ZERODRP GROB+ GROB+# GROB>GDISP Grob>Menu xGROBADD GROBADDext grobAlertIcon grobCheckKey GROBDIM GROBDIMw GSOLVE GsstFIN Gxor xGXOR H/W>KeyCode H/WKey>KeyOb H>Z xH xHA Page 316 316 Addr. 009100 046314 407006 020314 3880D 2608F 26094 25EDE 2EED6 0050DD 26099 0320DE 232006 05C314 059314 231006 3B68B 054314 22C006 3C9C1 25636 3E1CA 3B12C 3B14C 3B10C 39405 08D92 3E3006 4A8006 4A9006 4A6006 4A2006 037314 2C0006 4A1006 3E2006 4AA006 4A3006 2EEF8 3FB006 33175 2F0EE 2F0EF 2EFCF 2EFCC 05A03 2EFC0 2EFC1 Name xHS xHADAMARD HALFTAN xHALFTAN xHALT HARDBUFF HARDBUFF2 HARDHEIGHT HBUFF_X_Y xHEADER HEIGHTENGROB xHELP HERMITE xHERMITE xHESS HESSIAN xHEX xHILBERT HILBERTNOCK xHISTOGRAM HISTON? xHISTPLOT xHMS+ xHMSxHMS> xHOME HOMEDIR HORN1 HORNASIN! HORNASIN1! HORNATAN! HORNCOS! xHORNER HORNER1ext HORNEXP! HORNext HORNLN! HORNSIN! HSCALE HSECO2RCext hxs HXS#HXS HXS<=HXS HXS<HXS HXS==HXS HXS># HXS>$ hxs>$
519
Page 478 461 356 461 461 273 273 273 279 461 273 415 461 461 415 461 461 415 461 461 461 461 461 461 169
317 317
384
422 10 58 59 59 58 22 46 46
520
Addr. 2EFCA 2EFCE 2EFCD 336C5 417006 02B0DE 104007 39B3B 3F0B7 20C006 031314 0120DE 10D007 0060DE 00B314 2C5006 03B314 217006 2F0EC 33143 05BE9 2E11B 05F2E 272F3 27937 3E9006 027314 33887 3C02E 33143 2B0CC 45C006 191006 2B0EF 334D1 3387D 0716B 20A006 02F314 3D6006 37F48 034004 033004 049004 031004 046004 0BC002 3807D Name HXS>% HXS>=HXS HXS>HXS HXSREAL HYP2EXPext xHYPERBOLIC HYPERGEO xi xI>R IABCUV xIABCUV xIBASIS IBERNOULLI xIBERNOULLI xIBP IBP xICHINREM ICHINREM ICMPDRPRTDRP id ID>$ Id>Menu ID>TAG ID_EQ ID_SIGMADAT IDIV2 xIDIV2 IDLISTOB xIDN idnt idntcase IDNTEXEC IDNTLAM? idntlamcase IDREAL IDREALOB IDUP IEGCD xIEGCD IEGCDext xIF IfCheckFieldtype IfCheckSetValue IfCreateTitleGrob IfDisplayFromData
IfDisplayFromData2
IFEDispField xIFEND
HXS>% ISOLALL
Addr. 08C007 088007 089007 2F0D4 3B87E 0100DE 503006 25EDF 35BAF 3E54C 2F343 3C33E 2F0E8 07221 367D9 07270 3D9006 2E2006 04C0AB 394C8 2EEE6 2EEE7 2EEE8 092DB 2F0E7 25EE0 25EE1 26256 2B709 2F075 25EE2 26251 366E9 054AF 3BADA 35C68 3D3006 3EEBD 2F154 2F344 2F345 2EF5F 2F155 25790 366006 365006 25795 364006 Name ILAPEXPSC ILAPext ILAPRAText ILnot? xIM xIMAGE xIMext ImmedEntry? INCOMPDROP xINCR IncrLAMPKNO xINDEP INDEPVAR INDEX@ INDEX@#INDEXSTO INEGCD INFINIext xINFORM INHARDROM? InitEd&Modes InitEdLine InitEdModes InitEnab InitIOEnv InitMenu InitMenu% INITMKFONT InitPOLVars InitSysUI InitTrack: InitVirtualStack INNER#1= INNERCOMP INNERCOMP>% INNERDUP INPARTFRAC xINPUT input$ InputLAttn InputLEnter InputLine input{} INSERT? INSERT[]COL[] INSERT[]ROW[] INSERT_MODE INSERTCOL[] Page 392 199 462 348 278 71 462 462 317 151 152 152 330 419 462 179 314 303, 314 314 Addr. 2EF97 363006 362006 2FC006 3F007 2D3006 0290DE 33805 3D47E 3DD006 06B4E 01E0E8 516006 582006 2D2006 586006 004314 3A32B 402006 583006 52A006 2609E 2E25C 24B006 074314 350006 00110 2F346 81006 3AC3D 2EF006 029314 0011F 800F5 0011A 02B314 113007 2D8006 160006 15F006 2C7006 2C9006 0C8007 2CC006 3E648 4C5006 4C7006 4C6006 Name InsertEcho insertrow[] INSERTROW[] INSERT{}N xINT INT3 xINTEGER INTEGER337 xINTEGRAL INTEGRext INTEMNOTREF? INTEMPOB? INTERNALARG2 INTERNALERR INText INTVARERR xINTVX xINV INVAL2 INVALIDOP xINVext INVGROB InvLabelGrob INVMOD xINVMOD INXREDext IOC IOCheckReal IOCsave xIP ipi xIQUOT IRAM@ IRAMBUFF IRC xIREMAINDER IROOTS IRRQ#ULTIMATE IRXC2 IRXCext IS_SQRT? IS_XROOT? ISIDREAL? ISNT_IDNT? xISOL ISOL1 ISOL2ext ISOLALL
521
Page 302 343 343 72 462 390 17 391 171 171 403 390 404 462 462 423 403 348 91 90 462 341
291 291
462 382 422 37 424 424 408 462 396 396 396
522
Addr. 584006 00D0DE 4E0006 218006 03C314 283FC 07249 07295 04D004 0E9006 34A22 34B3E 34ABE 36DDF 36D3A 07258 072AD 050314 380006 04D87 04D87 07264 072C2 2F347 2F348 2F349 2F34A 2F34B 2F34C 25EE4 00F0DE 2F0E6 00C10 00C0E 00C0D 3EE2C 39854 25EE5 25EE6 255006 07B314 25EE3 04E004 25949 2593F 2594E 06D0AB 25F2A Name ISOLERR xISOM ISPOLYNOMIAL? ISPRIME xISPRIME? ISTOP-INDEX ISTOP@ ISTOPSTO
IsUncompressDataString
IsV>V? IT ITE ITE_DROP j%0=case jEQcase JINDEX@ JINDEXSTO xJORDAN JORDAN JstGetTHEMESG JstGETTHEMSG JSTOP@ JSTOPSTO JUMPBOT JUMPLEFT JUMPRIGHT JUMPTOP KDispRow2 KDispStatus2 KeepUnit xKER KERMOPEN kermpktmsg kermrecvmsg kermsendmsg xKERRM xKEY Key>StdKeyOb Key>U/SKeyOb KEYEVAL xKEYEVAL KEYINBUFFER? KeyLookup KeyOb! KeyOb0 KeyOb@ xKEYTIME Keyword?
179 463 463 392 463 415 463 48 68 289 289 288 289 168 168 94 94 94 94 94 463 463 337 463 479 463
82
463
ISOLERR xLINE
Addr. 081007 082007 083007 084007 0B1002 0B2002 0B3002 25FF9 26008 2601C 26012 25FFE 26003 26017 2600D 2F352 234006 05A314 05636 0567B 05616 17B006 2D9006 0B6006 032314 0160AB 3EB42 4DE006 4EC006 256006 2F21C 0BC006 0BB006 0B5006 49E006 490006 48B006 483006 488006 49C006 4A0006 499006 498006 4A7006 49F006 47F006 4B3006 48C006 Name LDECSOLV LDEGENE LDEPART LDSSOLVext LEDispItem LEDispList LEDispPrompt LEFT$3x5 LEFT$3x5Arrow LEFT$3x5CR LEFT$3x5CRArrow LEFT$5x7 LEFT$5x7Arrow LEFT$5x7CR LEFT$5x7CRArrow LEFTCOL LEGENDRE xLEGENDRE LEN$ LENCOMP LENHXS LENMATRIX LESSCOMPLEX? LFCProd xLGCD xLIBEVAL xLIBS LIDNText LIDNTLVAR LIFCext Lift LiftGeneral LiftLinear LiftZAdic LIM#VARX! LIM%#! LIM*! LIM+-! LIM/! LIMABS! LIMALPHA! LIMASIN! LIMATAN! LIMATAS! LIMBETA! LIMCMPL! LIMCOMP! LIMDIVPC! Page 391 391 391 391 245 245 244 97 97 97 97 97 97 97 97 279 415 463 47 68 57 343 424 375 463 463 463 397 398 395 376 376 375 387 387 387 Addr. 4AF006 4B0006 481006 482006 480006 475006 476006 484006 4BC006 496006 49B006 4AD006 4B1006 487006 494006 005314 477006 46D006 474006 473006 47C006 47E006 495006 4B2006 485006 489006 48F006 491006 492006 493006 48E006 486006 4A4006 4A5006 472006 497006 4B5006 48A006 49A006 478006 479006 47A006 47B006 4BE006 4BD006 4C3006 014314 3C68C Name LIMDL! LIMDLINF! LIMEQU! LIMEQU0! LIMEQUFR! LIMERR0! LIMERR1! LIMERR10! LIMERR6! LIMEXP! LIMFLOOR! LIMHORN! LIMINFSIGN! LIMINV! LIMINVLN! xLIMIT LIMIT! LIMIText LIMITNOVX! LIMITX! LIMLIM! LIMLIM1! LIMLN! LIMMAX! LIMNEG! LIMPOW! LIMPROF! LIMPROF0! LIMPROF1! LIMPROF2! LIMPROFEND! LIMRAC! LIMSC0! LIMSC1! LIMSERIES! LIMSINCOS! LIMSORT! LIMSQ! LIMSQRT! LIMSTEP1! LIMSTEP2! LIMSTEP3! LIMSTEP4! LIMVAL! LIMVALOBJ! LIMVAR! xLIN xLINE
523
Page
386 386
463 386
386
387
386
386
386 387
524
Addr. 101007 102007 2556A 2F353 2556F 25574 2EFA0 2EFA3 2EF9F 2EFA2 25565 25579 31B006 300006 3E214 0150AB 080007 052314 33139 2F354 2DC006 2DB006 17A006 3BAC1 3343B 45F006 460006 2DA006 3346D 104006 4EE006 4ED006 4EF006 0FD006 2F24E 33431 26B006 001007 4E5006 3AA01 45A006 456006 06D314 527006 31D006 016314 316006 318006 Name LINEARAPPLY linearapply LineB LINECHANGE LineG1 LineG2 LINEOFF LINEOFF3 LINEON LINEON3 LineW LineXor LINEXPA LINEXPext xLINFIT xLININ LINSOLV xLINSOLVE list List LIST10-10 LIST1i-1-i LIST2MATRIX xLIST> LISTCMP LISTEXEC LISTEXEC1 LISTIRRQ LISTLAM LISTMAXext LISTOPext LISTOPRAC LISTOPSQRT ListPos LISTRCL LISTREAL LISTSECOext ListToArry LLVARDext xLN LN2ATAN LN2ext xLNAME LNATANext LNCOLCext xLNCOLLECT LNEXPA LNEXPA* Page 425 93 93 93 92 92 92 92 93 93 355 355 463 463 342 463 10 Addr. 319006 31A006 522006 4AB006 3AB2F 41A006 25EE8 25EE9 3AA73 41B006 3E239 377C5 377DE 07334 05149 269006 26A006 3F2006 10F006 01118 2B1006 49D006 0320AB 3DF83 4AE006 3DE006 015100 02B0AB 0300AB 06A314 4F0006 4E7006 4C0006 4E3006 4DF006 386006 2AE32 35AE2 051314 321006 242006 37E006 229006 07F314 377006 376006 373006 2E189
338 463 14 421 421 422 14 399 398 398 398 69 166 14 421 65 397 464 352 357 464 349 355 464 355 369
LINEARAPPLY MenuKey
Addr. 2E1EB 260B2 2E24D 2E2AA 2F0DB 2AB006 2F355 2E166 01C100 357006 3B02E 066314 27D5D 326006 248006 32A006 246006 320006 322006 333006 332006 32C006 2639B 3DB04 376B7 376C1 334006 3DAD0 34A006 372006 336006 32D006 346006 32E006 37F006 37C006 17D006 348006 02F0DE 371006 338006 34E006 083314 34D006 344006 347006 337006 341006 Name MakeDirLabel MAKEGROB MakeInvLabel MakeLabel MAKEPICT# MAKEPROFOND MAKEPVARS MakeStdLabel xMAKESTR MAKESYSText xMANT xMAP MARKGROB MAT* MAT*MATMOD MAT*SCL MAT*SCMOD MAT+ MATMAT/ MAT/SCL MAT MATATLOOP xMATCHDN matchob? matchob?Lp MATCHS xMATCHUP MATCNORM MATCON MATCONJ MATCROSS MATDET MATDOT MATEGV MATEGVL MATEXPLODE MATFNORM xMATHS MATIDN MATIM MATINV xMATR MATRANK MATRANM MATRDET MATRE MATREDIM Page 95 91 95 293, 96 91 378 316 95 479 342 464 464 90 339 339 339 339 340 340 340 475 69 340 464 340 337 340 340 340 340 345 345 339 340 337 340 340 341 337 340 340 337 Addr. 34C006 34F006 340006 36D006 36B006 178006 179006 35F006 369006 360006 174006 367006 368006 1E7006 36A006 349006 34B006 335006 33E006 339006 33C006 33B006 33D006 33A006 3ADA5 39AE4 3DEE1 0760AB 16D006 35FD8 3DEFC 05F61 3E8C1 33111 2EE8B 2EF59 3E9D4 0B9007 0B5007 0B3007 0B2007 0B6007 25845 0BC007 0BB007 08D007 0B4007 275FD Name MATREF MATREFRREF MATREPL MATRIX-COL MATRIX-ROW MATRIX2ARRAY MATRIX2LIST MATRIX>DIAG MATRIXCSWAP MATRIXDIAG> MATRIXDIM MATRIXRCI MATRIXRCIJ MATRIXRISCH MATRIXRSWAP MATRNORM MATRREF MATSQUARE MATSUB MATTRACE mattran MATTRAN mattrn MATTRN xMAX xMAXR xMAXSIGMA xMCALC MDIMS MDIMSDROP xMEAN MEM xMEM MEMERR MENoP&FixDA1 MENP&FixDA12 xMENU MENUARIT1 MENUBASE1 MENUCHOOSE MENUCHOOSE? MENUCMPLX1 MenuDef@ MENUDIFF1 MENUEXPLN1 MENUext MENUGENE1 MenuKey
525
Page 341 341 343 344 344 65 338 343 344 343 341 341 341 412 344 340 341 340 343 340 340 65 340 340 464 464 464 464 64 64 464 178 464 10
464 409 409 409 409 409 289 410 410 409 409 293
526
Addr. 2589F 2588B 25890 258B3 27620 0B8007 2EEFC 2EEFD 260B7 260BC 25863 0BA007 0B7007 07A314 1D1006 2AFFB 2B01B 3EB16 0120E4 390006 2F1006 2F4006 2F5006 389006 38D006 387006 38C006 397006 103007 2FA006 3AB006 393006 3BA006 277006 278006 3BD006 276006 30A006 287006 286006 2A6006 1BD006 1AB006 1A9006 1AA006 1AC006 1AD006 1B9006 Name MenuKeyLS! MenuKeyNS! MenuKeyNS@ MenuKeyRS! MenuMaker MENUMAT1 MENUOFF MENUOFF? MenuRow! MenuRow@ MenuRowAct! MENUSOLVE1 MENUTRIG1 xMENUXY MENUXYext MEQ1stcase MEQopscase xMERGE MESRclEqn meta-1 meta-pi meta-pi/2 meta-pi/4 meta/2 meta1-sq meta1/meta meta2* meta meta_cst? meta_e MetaAdd metaadd metackneg METACOMP0 METACOMP1 metaCOMPARE METACOMPRIM METACOSEXPA METADEG1 METADEG2 METADENOLCM METADER&NEG METADER* METADER+ METADERMETADER/ METADER METADERABS Page 290 290 290 290 291 409 273 273 288 288 289 410 409 464 409 143 143 Addr. 1C9006 1C6006 1B8006 1C8006 1C5006 1C7006 1CA006 1C0006 1C3006 1AF006 1B4006 1AE006 1B1006 1B0006 1B2006 1BA006 1A6006 1B5006 1B6006 1B7006 1BB006 1A8006 1BF006 1C2006 1BE006 1BC006 1C1006 1C4006 396006 3B1006 39F006 310006 39A006 2ED006 459006 3A5006 198006 2F0006 4D8006 317006 36C006 36E006 351006 36F006 274006 3AF006 273006 395006
360 420 420 420 359 360 359 359 361 393 420 360 360 362 381 370 381 369 382 382 358 388 388 388 388 388 388 389
MenuKeyLS! MZSQFF1
Addr. 3B9006 3B7006 2EB006 2F8006 2F2006 2F3006 3BC006 352006 199006 3B5006 399006 3C3006 36FA6 3BB006 304006 291006 293006 294006 292006 385006 38E006 38F006 4D3006 394006 3AD006 2F356 31E006 3A2006 403006 39B006 465006 253006 0A9006 4CA006 4CB006 3E4006 2B083 3AE2B 2625B 0120DD 0730AB 39B01 3DF17 3A9006 2E3006 3399F 24C006 0740AB Name metaneg MetaNeg metapi metapi*2 metapi/2 metapi/4 metapi? METAPIVOT METAPOSINT? MetaPow metapow metareal? metaROTDUP metasimp METASINEXPA METASOLV METASOLV2 METASOLV4 METASOLVOUT metasplit metasq+1 metasq-1 METASQFFext metasub MetaSub metatail METATANEXPA metaundef METAVAL2 metaxroot MEVALext MFACTORMOD MFactTriv MHORNER MHORNER1 MHORNext Mid1stcase xMIN MINIFONT> xMINIFONT xMINIT xMINR xMINSIGMA minusinf MINUSINFext MINUSONE MINVMOD xMITM Page 362 362 420 420 420 420 370 341 78, 334 362 361 370 76 368 368 383 383 383 78 360 360 397 360 361 78 369 367 423 362 353 395 374 396 396 378 143 465 283 465 465 465 464 368 419 21 465 Addr. 00E0DE 0A5006 4D2006 327006 3AFCB 3D0006 3C5006 3C8006 3C9006 3C4006 3D1006 3CB006 275EE 25EEA 3CA006 3CC006 3CD006 3C7006 0DB006 079314 3C6006 02C0DE 3CF006 3CE006 0B9006 2C388 121006 122006 120006 2DE26 0770AB 4D1006 04E0AB 0040B1 0200DE 0720AB 4CD006 323006 244006 31C006 272006 245006 070314 0750AB 328006 08309 4CF006 4D0006 Name xMKISOM MKPOLY MLISTSQFF MMMULT xMOD Mod ModAdd ModDiv ModDiv2 ModExpa ModFctr ModGcd Modifier ModifierKey? ModInv ModLGCD ModLOPD ModMul ModPow xMODSTO ModSub xMODULAR MODULOMAText MODULOMODext MonicLf MOVEVAR MP0 MPEXEC MPext mpop1% xMROOT MSECOSQFF xMSGBOX MsgBoxMenu xMSLV xMSOLVR MSQFF MSUB MSUBTMOD MTRIG2SYMB MULMULText MULTMOD xMULTMOD xMUSER MVMULT MYRAMROMPAIR MZSQFF MZSQFF1
527
Page 378 397 339 465 329 372 373 373 372 373 291 205 373
375 423 372 465 425 465 283 465 396 339 416 355 381 416 465 465 339 396 396
528
Addr. 35FB0 36B67 36BAA 2C2CB 2C2C0 0D9007 26260 01C0AB 0326E 28211 3AA006 3A8006 3B3006 3B4006 391006 031D9 3F2B5 28143 162006 166006 2AC72 39976 39CD5 2F357 3ED006 2F0D5 4AC006 33B39 361DA 361DA 2F358 091007 394AA 4F7006 090007 3831C 37B54 80058 25EEB 2FB006 37702 03D314 2F359 2F35A 26201 0CA006 0CB006 29E29 Name N+1DROP NcaseSIZEERR NcaseTYPEERR nCOLCTQUOTE nCustomMenu NDEvalN/D nDISPSTACK xNDIST NDROP NDROPFALSE NDROPminusinf NDROPplusinf NDROPZ0 NDROPZ1 NDROPZERO NDUP xNDUPN NDUPN NDXFext NDXQext need'case xNEG xNEGNEG newBASE NEWDIVext NEWINDEP NEWLIMHORN NEWLINE$ NEWLINE$&$ NEWLINE&$ NEWMARK NEWMODULO xNEWOB NEWTRIMext NEWVX xNEXT NEXTCOMPOB NEXTIRQ NEXTLIBBAK NEXTPext nextpos xNEXTPRIME NEXTRRPOB NEXTSTEP nextsym'R NFactor NFactorSpc ngsizecase Page 75, 106 146 146 293 394 275 465 75, 106 75, 136 368 368 327 327 76 106 465 106 379 421 465 Addr. 33161 331C5 3F264 2EF07 0DE0B0 2EF96 25EED 256BE 25EEE 2EEED 38D2F 25EEF 27E72 260C1 257E2 119007 585006 2ADBD 58A006 100007 0A8007 581006 25621 06E8E 0A4007 3CB13 03AF2 34BD8 34A59 34A92 35F7E 0712A 3640F 36428 35C7C 34A13 34976 349EA 3494E 349C6 2B2C5 36914 36B3A 260C6 260CB 260D0 3F0FC 469006
357
330 330
N+1DROP OVER#=case
Addr. 2BB53 2F38E 3DE09 0560AB 35D58 35BC3 056B6 37784 055DF 0556F 35D94 25EEC 055FD 055B7 27AA3 055D5 272FE 2B3AB 27FED 359006 055E9 29E67 3BBF9 2B25C 2B11C 2B176 2B1DF 2ADE0 0A0007 2F35B 0060AB 0070AB 2C044 2C039 2C04F 2C05A 2C065 47D006 39CB3 2F35C 37073 2F1AE 197006 3BE38 2B8BE 374006 19A006 19B006 Name nscknum2 xnsgeneral xNSIGMA xNSUB NTHCOMDDUP NTHCOMPDROP NTHELCOMP NTHOF NULL$ NULL$? NULL$SWAP NULL$TEMP NULL:: NULLCOMP? NULLGROB NULLHXS NULLID NULLLAM NullMenuKey NULLVECTOR? NULL{} nultrior xNUM num-1=case num0=case num1=case num2=case numb1stcase NUMMODE NUMSOLVE xNUMX xNUMY nWHEREDER nWHEREIFTE nWHEREINTG nWHERESUM nWHEREWHERE n{}N ob&$ OB>BAKcode Ob>Seco ObEdit OBJ2REAL xOBJ> OBJ>R OBJDIMS2MAT OBJINT? OBJPOSINT? Page 87 77 465 465 69 69 68 69 43 55 46 46 73 68 90 57 116 116 291 339 72 50 465 143 142 143 143 145 406 465 465 Addr. 05944 2F257 3B6A6 07F007 086007 085007 3950C 076AE 3D0BC 33111 36739 0A6006 073CE 363CE 36A63 36B12 3657C 369E6 334EF 36B12 35EA2 29D18 09B006 2F19B 2F2FF 3EC75 2F35D 2F313 2F312 03B75 3CA8D 25EF0 359E3 3E8F0 280C1 280F8 365F9 05902 0020F 3DC8C 032C2 36775 367C5 36694 36147 366A8 35268 348E2 Name OCRC OCRC% xOCT ODE_INT ODE_SEPAR ODETYPESTO xOFF OFFSRRP xOLDPRT ONE ONE#> ONE>POLY ONE_DO ONE_EQ ONECOLA ONEDUP ONEFALSE ONEFALSE' ONEHUNDRED ONEONE ONESWAP ONE{}N ONE{}POLY OngoingText? OpenIO xOPENIO OpenIOPrt OpenUart?Clr OpenUartClr OR xOR OR$ ORcase xORDER ORDERXY# ORDERXY% ORNOT OSIZE OUTCINRTN xOVER OVER OVER#+ OVER#OVER#0= OVER#2+UNROL OVER#< OVER#= OVER#=case
529
Page 179 179 465 390 392 391 465 100 10 25 378 151 25 131 21 22 130 15 21 22 72 377
466
530
Addr. 36725 369AA 36CF4 36183 35CF4 36482 05622 35D6C 35D6C 351FA 01F0DE 0D8007 215006 039314 2EF62 35B46 35B82 3C98B 3EDEC 0CD007 2B475 2EF6A 2EF6B 2EF6E 2EF70 0090AB 3D2006 034314 3D4006 0F2007 2EF94 393EA 25EF1 228006 04F314 0450AB 00D0AB 01F0AB 02E0E7 3DC006 3C4F5 3F8006 0C6006 011100 209006 3B477 37B006 0460AB Name OVER#> OVER' OVER5PICK OVERARSIZE OVERDUP OVERINDEX@ OVERLEN$ OVERSWAP OVERUNROT OverWrF/TLp xP2C P2P# PA2B2 xPA2B2 palparse PALPTRDCMP palrompdcmp xPARAMETRIC xPARITY PARITYTEST ParOuterLoop Parse.1 Parse.2 ParseFail ParseFail2 xPARSURFACE PARTFRAC xPARTFRAC PARTFRACRAT PASCAL_NEXTLINE PASTE.EXT xPATH PATHDIR PCAR xPCAR xPCOEF xPCONTOUR xPCOV PCunpack PDer xPDIM PDIV2ext PDivLk xPEEK PEGCD xPERM PEVAL xPEVAL Page 26 130 109 64 109 152 47 109, 109 109, 109 Addr. 2C1006 0EA006 0E1006 0DA007 0AC006 0C5006 0C3006 268006 3D5006 3EAA7 0AE006 0B0006 0AF006 2EA006 39AC7 30017 438006 43B006 439006 3DCFD 032E2 3F27F 3C72A 2F258 28A006 2F6006 06A0AB 2E9006 2E8006 354006 353006 3C662 3C638 260DF 260D5 3C60E 260E4 260DA 260EE 260E9 255BF 255C4 255C9 255BA 255CE 3EE9D 3FA006 36FE2
51 466 391 466 385 307 466 169 346 466 466 466 466 387 466 372 377 478 414 466 345 466
OVER#> xPsi
Addr. 009314 1E4006 00A314 2F35E 2F35F 2F0C5 1E3006 0A9007 0AB007 3A7006 2E4006 3C392 3C372 0140DE 0B3006 103006 010100 3C979 2B682 2B628 2B6CD 2B6B4 2B4AC 2B542 0D7007 02D0DE 0CC007 0D6007 0350DE 1DD007 25F19 25F1A 25F1B 25F1C 3BB94 378FA 37906 378FA 37906 376EE 2E6006 0DB007 2E7006 3F7006 0380DE 01B0DE 073314 11E006 Name xPLOT PLOTADD xPLOTADD PLOTERR PlotOneMore? PLOTPREP PLOTSTK PLUSAT0 PLUSATINFTY plusinf PLUSINFext xPMAX xPMIN xPMINI PNFctr PNMax xPOKE xPOLAR POLErrorTrap POLKeyUI POLRestoreUI POLResUI&Err POLSaveUI POLSetUI POLYASYM xPOLYNOMIAL POLYPARITY POLYSYM xPOP POPFLAGS PopMetaVStack PopMetaVStackDROP PopVStack PopVStackAbove xPOS POS$ POS$REV POSCHR POSCHRREV POSCOMP POSINFext POSITIFext POSUNDEFext POTENCEext xPOTENTIAL xPOWEXPAND xPOWMOD PPow# Page 412 466 Addr. 0AB006 2BE006 117007 3D0D7 3DBCA 3DFDD 3E01D 3DFFD 3ABFD 2F360 124006 4EB006 00C314 2D0006 25EF2 03E314 08376 2610C 0C7006 0C8006 2F0BC 2F361 2F362 3D1E7 028FC 38BBF 2EEF0 08B314 0BD007 0440AB 035314 3D10D 3D0F2 3D143 01D0AB 3F9006 3E8006 3E7006 29A5D 2963E 29821 298C0 29693 1CB006 2973B 29972 29986 0030DE Name PPP PPZ PPZZ xPR1 xPREDIV xPREDV xPREDX xPREDY preFACT PREMARKON PREPARext prepvarlist xPREVAL PREVALext PrevNonNull xPREVPRIME PREVRAM-WORD PrgmEntry? Prime+ PrimePRINT PrintGrob PRINTxNLF xPRLCD PRLG xPROMPT PromptIdUtil xPROMPTSTO PROMPTSTO1 xPROOT xPROPFRAC xPRST xPRSTC xPRVAR xPSDEV PSetSign PSEUDODIV PSEUDOPREP psh psh& psh1& psh1&rev psh1top& pshder* pshtop& pshzer pshzerpsharg xPsi
531
Page 374 424 424 467 468 467 467 467
407 407 368 419 466 466 375 379 478 466 223 223 223 223 223 380 380 380 405 162 160 160 162 467 47 47 47 47 69 419 401 420 358
467 467 48 467 167 467 467 467 467 467 372 357 422 76 76 77 77 77 390 76 77 88 467
467
532
Addr. 0040DE 0B4006 0AD006 036314 3E5006 2F363 4F5006 2C37D 37118 28071 260F3 35B006 29754 260F8 28085 2F076 2F0AC 08C27 3E87C 0340DE 1DC007 26265 25F1D 25F1E 25F1F 25F20 25F21 3C0BF 35D006 2F2F5 2F2F7 31532 260FD 26102 2626A 2626F 3C139 2EEF2 2EEF3 075E9 2B42A 2EEF6 26107 2EEF4 2EEF1 2F364 2F365 2F366 Name xPSI PSQFF PSqff xPTAYL PTAYLext PtoR PTrim PTYPE>PINFO PuHiddenVar pull PULLCMPEL PULLEL[S] pullpsh1& PULLREALEL pullrev puretemp? PURGALARM% PURGE xPURGE xPUSH PUSHFLAGS PushMetaVStack
PushMetaVStack&Drop
xPUT PUT[] PUT_FONTE PUT_STYLE PUTAB0 PUTCMPEL PUTEL PutElemBotVStack PutElemTopVStack xPUTI PUTINDEP PUTINDEPLIST PUTLAM PUTLIST PUTPTYPE PUTREALEL PUTRES PUTSCALE PUTSERIAL PUTXMAX PUTXMIN
xPSI RENAME
Addr. 04B314 381006 165006 11D006 400006 18D006 0701F 38F01 3B7ED 3B0AE 3F070 2B8E6 0F5006 07012 50A006 28B006 3B564 25EF3 119006 082E3 3B3E6 02A0AB 0350AB 113006 0FD007 00114 3D393 3E6F1 2B351 29F006 2F196 2F197 2EF85 2EF86 2F199 2EF87 26274 26279 3918E 2F314 29E006 0C7007 3B715 370AF 3EF79 3EA2E 0C2007 0C3007 Name xQXA QXA QXNDext R15SIMP R2SYM R2Zext R> xR>B xR>C xR>D xR>I R>OBJ R>Z R@ RABSext RACTOFACext xRAD RAD? RADDext RAM-WORDNAME xRAND xRANK xRANM RASOP RATSUM RBR xRCEQ xRCL Rcl&Do: RCL1IDNT RCL_CMD RCL_CMD2 RCL_CMD_DEB RCL_CMD_FIN RCL_CMD_MODE RCL_CMD_POS RCL_NB_AFF_LGN RCL_NB_AFF_LGNSTK xRCLALARM RCLALARM% RCLALLIDNT RCLEPS xRCLF RclHiddenVar xRCLKEYS xRCLMENU RCLMODULO RCLPERIOD Page 468 345 421 325 328 128 468 468 468 469 129 327 128 348 383 468 178 371 168 468 468 468 372 393 468 468 424 300 300 306 306 301 300 Addr. 3DDA9 2F259 2F25A 2F25B 2F25C 03F0DE 0C4007 505006 00111 3B6FA 11B006 3BEEC 06FB7 3597F 2962A 26111 3B401 3B819 261FC 33111 195006 281006 36DF3 33233 528006 09C007 331A7 33733 25F6D 331B1 33797 3320B 25EF4 3ED22 2F369 0110AB 0A7007 3ED56 099006 0F6007 0F5007 501006 048314 3D7006 02A314 2F36A 0130DD 069004 Name xRCLSIGMA RCLSYSF RCLSYSF2 RCLUSERF RCLUSERF2 xRCLVX RCLVX RCONJext RCS xRCWS RDIVext xRDM RDROP RDROPCOLA RDROPFALSE RDUP xRDZ xRE Re>C% real REAL? REALBICAR REALcase REALEXT REALLN REALMODE REALOB REALOBOB realPAcode REALREAL REALSTRSTR REALSYM RECLAIMDISP xRECN RECORDX&YC% xRECT RECURMODE xRECV REDUCE REDUCEMETAPSYST REDUCEMETASYST xREext xREF REGCDext xREMAINDER REMAP xRENAME RENAME
533
Page 468 175 175 176 176 468 408 348 468 372 468 129 129 136 129 469 469 37 10 201 382 145 12 349 406 11 17 11 17 11 273 469 469 407 469 384 342 342 348 469 380 469 469
534
Addr. 069314 23D006 071E5 38105 25EF5 25EF6 047C7 25583 3B9D2 085D3 468006 2579A 2F2ED 2F2FC 359F7 35A10 3C41A 0CA007 2F0A1 35BFF 111007 3EAE7 1D4006 089002 25F22 37186 10F007 0050DE 110007 28187 258C7 05D0AB 0280DE 46E006 28E006 28D006 28F006 290006 25F24 2F36B 0AF007 500006 00D314 2C3006 15C006 2C4006 2C2006 2CF006 Name xREORDER REORDER REPEAT xREPEAT REPEATER REPEATERCH REPKEY? Repl xREPL REPLACE REPLACE2BY1 REPLACE_MODE REPLACEALL
REPLACEALLNOSCREEN
206 93 469 167 353 309 309 144 144 469 408 107 100 379 469 408 234 176 169 379 469 379 107 291 469
37 469 469 469 469 469 397 376 371 469 340 32 347 469 469 108 76 76 469 108 108 76 100 16 11 100 100 469 469 367 385 396 469 107 24 25 24 24 24 25 106, 107 107 136
REQcase REQcasedrop xRES RESETCASCFG RESETDEPTH RESOROMP RESPSHIFTQ xRESTORE RESTORECASFLAGS RestoreHARDBUFF RestoreSysFlags RestVarRes RESULTANT xRESULTANT RESULTANTLP reversym ReviewKey! xREVLIST xREWRITE REWRITEIFINF RFACT2ext RFACText RFACTSTEP3 RFACTSTEP5 RIGHT$3x6 RIGHTCOL RIGORMODE RIMext xRISCH risch/ RISCH13 rischABS RISCHext rischlogpart
xREORDER ScrollVGrob
Addr. 341A8 34195 3579C 35CCC 343BD 3416E 36FBA 03D0AB 03C0AB 0370AB 2F36C 11F006 123006 070FD 070C3 3F218 0680AB 3885C 2A964 2A944 2A904 2A984 2A924 2A9A4 2A9C4 26C006 3A200 38E41 38E61 3DF006 4FE006 047314 0340AB 223006 078314 254006 0230AB 0240AB 0250AB 3B22F 368C9 261A2 116006 34144 0400AB 3E632 004002 006007 Name ROTDROP ROTDROPSWAP ROTDUP ROTOVER ROTROT2DROP ROTSWAP ROTUntop& xROW+ xROWxROW Rows8-15 RP# RPext RPIT RPITE xRPL> xrpm xRPN-> RPNDecomp#Disp RPNDecomp#Line RPNDecomp1Line RPNDecompEcho RPNDecompEdit RPNDecompStd1Line
RPNDecompStd1Line32
535
Page 107 107 107 107 107, 108 107 76 470 470 470 279 372 372 138 138 Addr. 005007 2AB69 0B954 2A9E9 2ABF0 2ABD7 013100 0F2006 0F3006 008100 35A5B 25EF7 1D3006 35A29 0000F 3C9E5 175006 176006 1D2006 261A7 088002 34D51 2F05E 25EFB 34D58 25F23 3712C 00008 00004 3EE82 014100 247006 3C4D5 2627E 3E1EF 3C9AF 0330AB 3B5BA 329006 3E127 3E385 07D314 2F36D 0C1007 2F36E 2F36F 2F370 255B0 Name RunDoOldMatrix RunInApprox RunInNewContext RunRPN: RunSafeFlags
RunSafeFlagsNoError
Page 176 310 198 176 177 478 328 328 478 166 166 167 167 470 338 338 408 177 234 314 289 117 176 169
rpnQOBJext rpnXROOT xRR xRRB RRDMext RREext xrref xRREF rref xRREFMOD RREFMOD xRRK xRRKSTEP xRSBERR xRSD RSKIP rstfmt1 RSUBext RSWAP xRSWP xRULES RunChooseSimple RunDoNewMatrix
465 52 53 52 54 53 52 52 423 470 470 378 348 470 470 415 470 470 470 470 470 129 178 371 129 470 244
xRSB S>Z S>Z? xSH SAFE@ SAFE@_HERE SAFEPURGE SAFESTO sALLOWINTR xSAME SAMEMATRIX SAMEMATSCTYPE SAVECASFLAGS savefmt1 SaveHARDBUFF SAVELAM SaveLastEdit SaveLastMenu SAVESTACK SaveSysFlags SaveVarRes sBEG sBPOFF xSBRK xSBB SC*MATMOD xSCALE SCANFONT xSCATRPLOT xSCATTER xSCHUR xSCI SCL*MAT xSCLSIGMA xSCONJ xSCROLL SCROLLDOWN SCROLLext SCROLLLEFT SCROLLRIGHT SCROLLUP ScrollVGrob
470 479 470 470 470 470 339 470 470 470 279 281 280 280 279 94
536
Addr. 3DF32 33157 3FE006 3FC006 3FD006 2E107 461006 4D4006 2F2E7 2F2E1 2F2E2 0312B 34AAD 3ECB0 2F371 2F372 2F373 2EEBB 2F374 2F375 2F376 2F377 25EF8 0530AB 01D100 007314 419006 3ED91 07661 25719 26139 25695 25671 25683 261AC 26116 09A007 2F378 2611B 2F379 2EE65 2EE65 2EE6F 2EE71 2EE70 2EE78 2EEAC 2EE72 Name xSDEV seco SECO2CMPCART SECO2CMPext SECO2CMPPOL Seco>Menu SECOEXEC SECOSQFFext SELECT.FONT SELECT.LINE SELECT.LINEEND SEMI SEMILOOP xSEND SENDACK SENDEOT SENDERROR SENDLIST SENDNAK SENDNULLACK SENDPKT SendSetup SEP$NL xSEQ xSERIAL xSERIES SERIESEXPLN xSERVER SET SetAlgEntry SetAlphaAnn SetAppMode SetAppSuspOK SetBadPOLUI setbeep SETCIRCERR SETCOMPLEX SetCursor SETCURSOR SetDA123NoCh SetDA12a3NCh SetDA12a3NoCh SetDA12NoCh SetDA12Temp SetDA13NoCh SetDA1Bad SetDA1IsStat SetDA1NoCh Page 470 10 422 293, 95 421 333, 422 313 307 307 129 151 471 Addr. 2EE69 2EE67 2EE94 2EE79 2EE6C 2EE73 2EE8A 2EF98 2EE7A 2EE7F 2EE76 2EE6A 2EEA5 2EE68 2EE93 2F37A 2EE91 2EE7B 2EE77 2EE6B 2EF99 2EEA0 2EE7C 2EE64 39104 2FFBD 2565F 2EECE 09F007 264D1 2FFEF 07638 26283 3714A 2F37B 2F458 25EFC 2613E 2F37C 04FB6 0764E 2564D 262E7 2EEAE 25617 0AA007 04FF2 26143
180
48 471 479 471 356 471 278 278 224 224 178 157 406 304 276 276 276 276 275 276 276 276 276
xSDEV SIN2TCext
Addr. 2FFDB 2580E 26148 2F25D 05016 2F37D 262D8 25EFD 262E2 2645E 26459 2614D 25EFE 39124 262DD 26152 2622E 064314 3314D 342EA 331B1 333C3 333EB 3341D 3B4C9 0CD006 0D80B0 520006 3E696 0426A 0D3007 0D1007 0D4007 0CF007 0D2007 0630AB 3721C 0020DE 3DDC4 3DDEE 3E0FD 301006 2FF006 3E156 0010DE 3A3EE 237006 0DC007 Name SETRAD SetRebuild SetRightAnn SETROMPART SETROMPERR SetServMode SETSIZEERR SetSomeRow SETSTACKERR setStdEditWid setStdWid SetSysFlag SetThisRow xSETTIME SETTYPEERR SetUserFlag
SetVStackProtectWord
537
Page 178 288 277 157 158 293 157 51 51 175 292 473 157 175 164 471 10 108 11 14 14 14 471 330 Addr. 0EC007 0E6007 0E4007 0EF007 0E2007 0DD007 0EA007 0E1007 0E9007 0E3007 0E7007 0E5007 0E0007 0ED007 0DF007 05F314 0DE007 38837 0A6007 4C1006 299006 033314 2AE006 2AF006 2B0006 2A9006 2AA006 2AD006 29D006 0220DE 298006 2AAE0 2A8006 2A0006 2A2006 29B006 2A4006 3A57C 428006 445006 444006 42E006 415006 414006 40C006 40B006 42A006 429006 Name SIGNE> SIGNEATAN SIGNECOS SIGNEERROR SIGNEEXP SIGNEext SIGNELEFT SIGNELN SIGNERIGHT SIGNESIN SIGNESQRT SIGNETAN SIGNMOINS SIGNMULText SIGNPLUS xSIGNTAB SIGNUNDEF xSILENT' SILENTMODE SIMP1! SIMP1ext xSIMP2 SIMP3ext SIMP3LISText SIMP3LSTSLOW SIMPext SIMPEXTOK SIMPGCDext SIMPIDNT xSIMPLIFY SIMPLIFY
SimplifyExpression
Page 401 401 401 404 401 401 401 401 401 401 401 400 401 400 471 400 407 354 471 354
xSEVAL SEVEN SEVENROLL SEVENTEEN SEVENTY SEVENTYFOUR SEVENTYNINE xSF SFactor sFldVal SHALT xSHOW ShowInvRomp SHRINK2ASYM SHRINK2SYM SHRINKASYM SHRINKEVEN SHRINKSYM xSIDENS Sig?ErrJmp xSIGMA xSIGMA+ xSIGMAxSIGMACOL SIGMAEXP2ext SIGMAEXPext xSIGMALINE xSIGMAVX xSIGN SIGNE SIGNE1ext
354 354 423 471 354 424 354 354 354 354 471 366 367 352 351 366 351 365 351 351 356
471 178 379 379 379 379 379 471 158 471 460 460 455 355 355 460 471 471 400 400
SIMPNDXFext SIMPSYMBS SIMPUSERFCN SIMPVAR SIMP| xSIN sin/cos sin2exp SIN2EXPext SIN2ext sin2tan SIN2TAN sin2tan/2 SIN2TAN/2 SIN2TC SIN2TCext
538
Addr. 018314 303006 307006 308006 305006 306006 52D006 3A678 449006 448006 530006 0D0007 3E331 0D3006 1A2006 33143 34281 331A7 3335F 333AF 33387 33369 3337D 33373 3438D 3BB1F 0714D 35715 38E81 38EA1 25EFA 00C0AB 0B1007 0B0007 26120 2B2006 2AC006 297006 2BB3A 3E35B 00002 2F38F 0290AB 03F314 219006 0F7007 21A006 0F4007 Name xSINCOS SINEXPA SINEXPA* SINEXPA*1 SINEXPA+ SINEXPAxSINext xSINH sinh2exp SINH2EXPext xSINHext SINTEST xSINV SIsPrime? siSYMDER SIX SIXROLL SIXTEEN SIXTY SIXTYEIGHT SIXTYFOUR SIXTYONE SIXTYTHREE SIXTYTWO SIXUNROLL xSIZE SKIP skipcola xSL xSLB SLEEPxcp xSLOPEFIELD SLOPPY? SLOPPYMODE SLOW SLOWGCDext SLOWSIMP2L SLVARext sncknum2 xSNEG sNEGATE xsngeneral xSNRM xSOLVE SOLVE1EQ SOLVECRAMER SOLVEMANYEQ SOLVEMETASYST Page 471 355 369 369 368 368 349 471 367 352 350 471 331 10 108 11 13 14 13 13 13 13 109 471 131 131 471 471 471 408 407 172 358 353 87 471 77 471 471 414 342 414 342 Addr. 086314 008314 1DE006 27E006 25EFF 05E0AB 2F37E 100006 33B55 0AD007 0130AB 2C2D6 0CE006 3A4EF 553006 2BD006 4CC006 317EE 3A442 42F006 42D006 41E006 41F006 2C6006 1CC006 38EC1 0280AB 38EE1 3EC55 0100DD 00F100 2BB21 2F390 13E006 140006 142006 144006 3B0006 3AC006 3AE006 3B2006 136006 134006 13C006 13A006 138006 3B6006 152006
xSINCOS xSTURMAB
Addr. 14C006 19F006 132006 130006 146006 150006 14E006 14A006 148006 154006 12E006 25F12 26242 261B1 26288 381AB 25F00 2B74F 38252 2EEDA 2EEDE 2EEDC 2EEDB 2EEDD 2EEDF 2EEE0 2EEE1 2EEE2 3B5FA 25F01 2716D 27D7B 25F02 25F03 27A3A 3851F 0A3007 206006 3D3AE 3EE62 25F13 3E739 07D27 369BE 3E4D2 3E3AF 3E406 3E46C Name xssSYMCOMB ssSYMDER xssSYMMAX xssSYMMIN xssSYMMOD xssSYMOR xssSYMPERM xssSYMRNDXY xssSYMTRCXY xssSYMXOR xssSYMXROOT sstDISP StackFontHeight stackitw StackLineHeight xSTART StartMenu StartupProc xSTARTVAR STATCLST STATMEAN STATN STATSADD% STATSMAX STATSMIN STATSTDEV STATTOT STATVAR xSTD Std/BoxLabel StdIOPAR StdLabelGrob StdMenuKeyLS StdMenuKeyNS StdPRTPAR xSTEP STEPBYSTEP STEPIDIV2 xSTEQ xSTIME stkdecomp$w xSTO STO STO' xSTO* xSTO+ xSTOxSTO/ Page Addr. 3E823 2F198 2EF8B 2EF8C 2EF8D 2EF8E 2EF8F 2628D 39164 2F3A9 2F3AA 2F37F 2F066 3B749 37104 2F062 3EF07 07D1B 370006 0C6007 2CA006 2F063 0240DE 3DD6E 2F25F 2F260 356006 2F261 2F262 0400DE 0C5007 33125 3BBD9 2E0F3 0580AB 2F1AC 3BE006 37ABE 37AEB 33319 33823 38D94 38D72 00001 222006 221006 0160DE 0170DE Name xSTO> STO_CMD_MODE STO_CURS_POS STO_CURS_POS2 STO_CURS_POS3 STO_CURS_POS4 STO_CURS_POS_VIS STO_ML_DISP_SIZE xSTOALARM STOALLF STOALLF2 STOALM STOAPPLDATA xSTOF StoHiddenVar StoIOPAR xSTOKEYS STOLAM STOMAText STOMODULO STOPRIMIT StoPRTPAR xSTORE xSTOSIGMA STOSYSF STOSYSF2 STOSYSText STOUSERF STOUSERF2 xSTOVX STOVX str xSTR> Str>Menu xSTREAM StrEdit STRICTmetaCOMPARE STRIPTAGS STRIPTAGSl2 STRLIST STRREALREAL xSTRUCT-> xSTRUCT> sTRUNC STUDDIV STUDMULT xSTURM xSTURMAB
539
Page 167, 472 301 304 304 304 304 304 472 176 176 174 472 170 181 472 117 344 408 424
280 283 283 471 292 459 66 66 66 66 66 66 66 66 66 472 95 181 90 290 290 472 407 413 472 472 51 472 167 130 472 472 472 472
472 175 176 342 176 176 472 408 10 472 293, 95 472 370 61 62 13 17
540
Addr. 3B6C1 2557E 3B8D7 05733 2A5CA 35DA8 05821 25597 2612F 2559C 05815 33F006 3760D 37685 261B6 25592 0E8007 002314 243006 06F314 0F9007 3D503 4D6006 0FB007 3DE5A 3DE90 3DEC6 3DE75 3DEAB 10C006 25F04 02E0AB 02F0AB 03223 3DC20 357BB 3592B 28099 36829 280AD 36C22 362F2 35346 36982 368B5 36CB8 36CE0 36C90 Name xSTWS Sub xSUB SUB$ SUB$1# SUB$SWAP SUBCOMP SubGor SUBGROB SubGxor SUBHXS submeta SubMetaOb SubMetaOb1 subpdcdptch SubRepl SUBSIGNE xSUBST SUBTMOD xSUBTMOD SUM xSUM SUMSQRext SUMVX xSUMX xSUMX2 xSUMXY xSUMY xSUMY2 SUnivar? SuspendOK? xSVD xSVL SWAP xSWAP SWAP#SWAP#1+ SWAP#1+SWAP SWAP#1SWAP#1-SWAP SWAP%%/ SWAP%>C% SWAP&$ SWAP' SWAP2DUP SWAP3PICK SWAP4PICK SWAP4ROLL Page 472 93 472 48 48 48 69 93 91 93 57 78 77 77 93 401 472 416 473 393 460 333 393 461 461 461 461 461 380 224 473 473 107 473 24 24, 77 24 24 24 34 37 49 130 107 107 109 107 Addr. 39C8B 3700A 3635B 2F073 3421A 28989 35857 35872 374BE 3576E 163006 3623E 3646E 36496 161006 36AFE 3457F 367ED 117006 11A006 4FF006 110006 4FA006 341BA 0AC003 4FD006 114006 2812F 36946 3695A 58D006 093007 092007 3592B 2A7006 51B006 04E314 384006 3316B 50F006 53F006 550006 56F006 514006 53D006 54D006 541006 54A006
xSTWS TAN2CS2
Addr. 33161 464006 157006 0546D 2EFEC 2BD8C 2EED9 33639 33657 46A006 561006 3B8006 26F006 286E7 507006 536006 545006 55B006 1A0006 559006 29A006 571006 336BB 575006 55F006 565006 33693 504006 2A1006 557006 563006 45D006 3369D 1DF006 524006 56B006 56D006 569006 578006 3366B 470006 109007 10A007 10C007 10B007 45E006 55D006 502006 Name symb SYMBEXEC SYMBINCOMP SYMBN symbn SYMBN: SYMBNUMSOLVE SYMBREAL SYMBUNIT SYMBWHERE xSYMCEIL xSYMCHS SYMCOLCT symcomp xSYMCONJ xSYMCOS xSYMCOSH xSYMD>R SYMDER xSYMEXP SYMEXPAN xSYMEXPM1 SYMEXT xSYMFACT xSYMFLOOR xSYMFP SYMID xSYMIM SYMINTEGRAL xSYMINV xSYMIP SYMISOL SYMLAM SYMLIMIT xSYMLN xSYMLNP1 xSYMLOG xSYMMANT xSYMNOT SYMOB SYMPAPRX SYMPSI sympsi sympsin SYMPSIN SYMQFORM xSYMR>D xSYMRE Page 10 353 72, 325, 359 71, 86 86 16 16 350 Addr. 33675 2EF26 512006 538006 543006 555006 552006 336B1 53A006 547006 46F006 567006 26134 58F006 2F064 005002 08D92 2EF67 2EE5E 2F1A3 2EE5F 39705 36F79 2EF66 08D66 08DD4 2F380 00A0DE 22A006 80F02 26157 355006 2EED7 016100 2DD006 2DE006 061314 265006 238006 060314 33189 336ED 37B04 0520AB 275C6 3A624 01C0DE 442006 Name SYMREAL SYMSHOW xSYMSIGN xSYMSIN xSYMSINH xSYMSQ xSYMSQRT SYMSYM xSYMTAN xSYMTANH SYMTAYLOR xSYMXPON SYNTAXERR Sys1IT Sys@ sysCHOOSE SYSCONTEXT SysDisplay SysErrorTrap
SysErrorTrapAction SysErrorTrapConfirm
541
Page 16 88 349 350 348 348 16 349 350 386 350 157 404 166 233 169 274
86 349 349
364 354 350 16 350 350 350 16 362 348 350 16 412 350 350 350 350 16 393
394
362
xSYSEVAL SysITE SysMenuCheck SysPtr@ SYSRRP? SysSTO xSYST2MAT SYSTEM SystemFlags SystemLevel? SYSText SysTime xSN TABLECOSext TABLETANext xTABVAL TABVALext TABVAR xTABVAR TAGGED TAGGEDANY TAGOBS xTAIL TakeOver xTAN xTAN2CS2 TAN2CS2
342 173 479 425 425 473 418 415 473 11 16 61 473 291 473 473 352
542
Addr. 420006 421006 01F314 427006 021314 440006 43F006 426006 40E006 40F006 52E006 3A70C 44D006 44C006 531006 1E1006 006314 3E6CA 00116 302006 233006 05B314 01A314 2FE006 00112 0640AB 2F09A 3316B 2E1006 02E0DE 26170 26175 065314 31F006 013314 3C8FA 37F7F 38B43 33189 33233 33283 33265 3325B 3328D 3323D 33279 33251 33247 Name TAN2EXP tan2exp xTAN2SC TAN2SC xTAN2SC2 TAN2SC2 TAN2SC2ext TAN2SCext TAN2TAN/2 tan2tan/2 xTANext xTANH tanh2exp TANH2EXPext xTANHext TAYLOR0 xTAYLOR0 xTAYLR TBR TCHEBext TCHEBNOCK xTCHEBYCHEFF xTCOLLECT TCOLLECT TCS xTDELTA TempConv TEN TESTINFINI xTESTS TestSysFlag TestUserFlag xTEVAL TEXPAext xTEXPAND xTEXT xTHEN xTHENCASE THIRTEEN THIRTY THIRTYEIGHT THIRTYFIVE THIRTYFOUR THIRTYNINE THIRTYONE THIRTYSEVEN THIRTYTHREE THIRTYTWO Page 351 366 473 351 473 352 357 356 351 366 349 473 367 352 350 412 473 473 378 415 473 473 355 473 82 10 419 175 175 473 356 473 473 473 11 12 12 12 12 12 12 12 12 12 Addr. 2F158 33125 33319 36216 09D006 39093 2F003 2F004 2F002 34BEF 3905D 26161 0012E 0012F 2EED3 0650AB 019314 3C6B6 3E97B 26166 2EECF 2F381 2616B 2F382 2577F 25F2D 2EFA1 2EFA4 2F21B 33AA7 33AB3 33B85 33BD9 33BF1 33B91 33BFD 272D9 33B9D 33BE5 33C4D 33C59 33C65 33C71 33C7D 33C89 33C95 33CA1 33CAD
49, 173 473 473 473 473 272 172 173 272 92 302 92 92 95 45 45 44 45 45 44 44 44 44 45 44 44 45 45 45 45 45 45 44
TAN2EXP TWENTYSIX
Addr. 26206 261BB 33CB9 33BA9 33AD7 33C09 29E99 33ACB 33A6B 33A51 33BCD 33B55 2D848 2D86D 2D8AD 33AEF 33C2D 33C3F 33C21 33ABF 33AE3 33BB5 33B79 33BC1 33A8F 33AFB 33C15 33B61 33A9B 33B07 33A77 33A83 364E1 266006 296A7 39C006 39D006 36F8D 2F383 2F384 2F385 07709 3DF4D 06657 35C90 0270AB 045314 580006 Name tok8cktrior tok8trior tok9 tok; tok<< tok= tok=casedrop tok>> tok[ tok] tok tok_ tok_g tok_m tok_s tokanglesign tokCTGROB tokCTSTR tokDER tokESC tokexponent toklparen tokquote tokrparen toksharp tokSIGMA tokSQRT tokUNKNOWN tokuscore tokWHERE tok{ tok} toLEN_DO TOLISText top& top&addt* top&addt/ top&Cr TOP16 TOP8 TOPROW TOSRRP xTOT TOTEMPOB TOTEMPSWAP xTRACE xTRAN TRANSCERROR Page 50 50 44 45 44 44 145 45 45 45 45 43 44 44 44 45 45 45 45 44 44 45 45 45 45 45 45 45 45 45 44 45 151 418 76 360 360 279 279 279 100 473 171 171 474 474 403 Addr. 3EE0C 330006 30F28 01B314 01C314 416006 082314 01D314 01E314 411006 4F4006 4F6006 3C084 3AF3E 2F386 03A81 369D2 36540 36540 27E87 063314 471006 3C99D 015314 2B9006 2BB006 2BA006 3125D 391F8 3326F 2F034 2F031 041A7 25F05 39456 0470AB 0480AB 0490AB 04A0AB 3317F 331CF 3321F 33201 331F7 33229 331D9 33215 3320B Name xTRANSIO TRCARRY TRCXY xTRIG xTRIGCOS TRIGext xTRIGO xTRIGSIN xTRIGTAN TRIGTAN TRIMext TRIMOBJext xTRN xTRNC TRPACKETFAIL TRUE TRUE' TRUEFALSE TrueFalse TrueTrue xTRUNC TRUNCDL xTRUTH xTSIMP TSIMP2ext TSIMP3ext TSIMPext TST15 xTSTR TTHIRTYSIX TURNMENUOFF TURNMENUON TurnOff TurnOffKey xTVARS xTVM xTVMBEG xTVMEND xTVMROOT TWELVE TWENTY TWENTYEIGHT TWENTYFIVE TWENTYFOUR TWENTYNINE TWENTYONE TWENTYSEVEN TWENTYSIX
543
Page 474 340 32 474 474 356 474 474 474 356 378 398 474 474 135 130 136 136 135 474 386 474 474 354 355 354 474 12 273 273 178 474 474 474 474 474 11 11 11 11 11 11 11 11 11
544
Addr. 331ED 331E3 3311B 09E006 36202 09C006 3BC39 03C64 350D2 3513B 350F0 352AD 3503C 03F95 3512C 35177 3510E 03FDB 03FE5 351B3 35087 350C3 114007 35186 350FF 03FA9 3504B 194006 167006 03FD1 350E1 03F9F 35195 350B4 350A5 35292 03F8B 3511D 196006 3514A 20D6F 35159 03FBD 35168 351A4 182006 35096 2F07B Name TWENTYTHREE TWENTYTWO TWO TWO::POLY TWO{}N TWO{}POLY xTYPE TYPE TYPEAPLET? TYPEARRY? TYPEBINT? TYPECARRY? TYPECHAR? TYPECMP TYPECMP? TYPECOL? TYPECSTR? TYPEEREL TYPEEXT TYPEEXT? TYPEFLASHPTR? TYPEFONT? TYPEGAUSSINT? TYPEGROB? TYPEHSTR? TYPEIDNT TYPEIDNT? TYPEIDNTLAM? TYPEIRRQ? TYPELAM TYPELAM? TYPELIST TYPELIST? TYPELNGCMP? TYPELNGREAL? TYPERARRY? TYPEREAL TYPEREAL? TYPEREALZINT? TYPEROMP? TYPERRP TYPERRP? TYPESYMB TYPESYMB? TYPETAGGED? TYPEZ? TYPEZINT? U>nbr Page 11 11 10 377 72 377 474 199 200 199 200 199 200 20 199 200 199 20 20 200 200 200 200, 333 199 199 20 199 199 326, 421 20 199 20 199 200 200 199 20 199 201 200 20 200 20 199 200 200 200 82 Addr. 2F099 25F06 2F387 25F07 38FD7 3900B 0B7006 0B8006 0BD006 0140DD 2F07C 2F07D 2F07E 2F07F 2F080 2D74F 2F081 2F082 2D759 2F083 2F085 2F086 2F087 2F088 2F089 2F07A 2D763 2F08A 2D999 2F08B 2F08C 2F08D 2D777 2D985 2D971 2D95D 2F08E 2F08F 2D76D 2D9CB 2F090 2D949 2F091 2F092 2F093 2F094 2D9EE 2F095
TWENTYTHREE VRRDM
Addr. 2F096 0310DE 0270DE 2F098 262F6 36BFA 3F495 29CB9 34FA6 256AC 256A7 256A2 2F019 33193 10B006 25F08 3F249 0339E 29B12 3422B 3F22E 343BD 35872 35D1C 360CF 341BA 3A6006 38195 071C8 2F193 2F265 39420 2F266 463006 36F65 25F09 23F006 23E006 371F9 3E07D 3E0BD 3E09D 3E0DD 02F0E7 0110E7 38F81 3C2AC 324006 Name UMXROOT xUNASSIGN xUNASSUME Unbr>U UNCOERCE UNCOERCE%% UNCOERCE2 uncrunch undo UNDO_OFF UNDO_ON UNDO_ON? UNIT>$ unitob Univar? UnLockAlpha xUNPICK UNROLL unroll2ND UNROT xUNROT UNROT2DROP UNROTDROP UNROTDUP UNROTOVER UNROTSWAP unsignedinf xUNTIL UNTIL UobROT UPDIR xUPDIR USER$>TAG USERFCN? UserITE UserKeys? USERLIDNT USERLVAR UStackDepth xUTPC xUTPF xUTPN xUTPT UTTYPEEXT0? UTVUNS1Arg xUVAL xV> VADD Page 83 Addr. 404006 405006 401006 58C006 3FF006 22B006 053314 3DF68 4C4006 45B006 4B6006 4B4006 4B8006 4B9006 4BA006 4BB006 4B7006 0C4006 358006 3943B 2F267 37A006 08C314 579006 57A006 57B006 0A5007 57C006 2EF93 2F388 1D0006 00F0AB 2F389 26125 2612A 52B006 3C1006 2F2E0 2F21F 2F19A 2F21D 2F21E 0080DD 00A0DD 25F0A 32B006 0390DE 342006 Name VAL1 VAL1M VAL2ext VALMUSTBE0 VALOBJext VANDERMONDE xVANDERMONDE xVAR VAR% VAR=LIST VARCOMP! VARCOMP2! VARCOMP3! VARCOMP31! VARCOMP32! VARCOMP33! VARCOMPLN! VarFactor VARGENext xVARS VARSIZE VBINARYOP xVER Verbose1 Verbose2 Verbose3 VERBOSEMODE VerboseN VERIF_SELECTION VerifyTOD VERNUMext xVERSION VERSTRING VERYSLOW VERYVERYSLOW xvext vgerxssSYMSUM ViewEditGrob ViewGrobObject ViewLevel1 ViewObject ViewStrObject xVISIT xVISITB VLM VPMULT xVPOTENTIAL VRRDM
545
Page 423 423 423 404 423 415 475 475 353 387
82 31 31 31 87 117
82 11 380 278 474 109 76 108, 108 474 107, 108 107, 108 108 108 107, 108 368 474 151 77 169 474 61 86 146 208 416 416 474 474 474 474
387
376 475 179 345 475 417 417 417 407 417 306 172 408 475 181 172 172 348 394 313 280 310 280 280 475 475 339 338
546
Addr. 343006 2EEF7 325006 3BDB2 379006 4EA006 4E9006 4E8006 4E2006 589006 4E6006 4DB006 4DA006 4DD006 4DC006 4D7006 4D9006 39819 2F268 25F0B 2A4FC 2D1006 3D605 380DB 071EE 38A2F 2EF61 2F38A 2617F 26184 26189 2F38B 2618E 2F38C 2F38D 26193 26198 0080AB 370C3 2EFBE 09A003 08E007 390AE 3E03D 180006 17F006 17C006 2F292 Name VRRDMmeta VSCALE VSUB xVTYPE VUNARYOP VX! VX> VX>LVARext VXINDEP? VXINDEPERR VXLVARext VXXL0 VXXL1ext VXXL2 VXXL2NR VXXLext VXXLFext xWAIT Wait/GetKey WaitForKey WaitTbz0 WARNSING xWHERE xWHILE WHILE xWHILEEND WINDOW# WINDOWBOT? WINDOWCORNER WINDOWDOWN WINDOWLEFT WINDOWLEFT? WINDOWRIGHT WINDOWRIGHT? WINDOWTOP? WINDOWUP WINDOWXY xWIREFRAME WithHidden WORDSIZE WRAP$ WRITEMENU xWSLOG xXCOL XEQ>ARRAY1 XEQ>ARRY XEQARRY> XEQIOBACKUP Page 338 339 475 345 398 398 398 397 404 397 326 326 326 326 325 325 475 207 206 390 475 151 281 280 279 279 279 280 279 280 280 279 279 475 170 57 48 293 475 475 65 65 Addr. 2F296 25F14 2F297 2F2A3 2F2A7 2F2A9 25E79 25F0C 3BC43 0700AB 0BE007 33625 3361B 021100 2EF92 3EC35 23C006 067314 03ADA 3CB7A 25F0D 3AD65 0710AB 068314 0500AB 3C915 3A278 454006 2C8006 04F0AB 06E0AB 51C006 0000AB 0030AB 3421A 25F0E 341D2 3574D 3416E 341A8 343BD 3636F 35EF2 35872 3422B 34195 341BA 341D7
VRRDMmeta 17GETLAM
Addr. 343CF 34331 36C90 3423A 31219 3E05D 331006 33387 3C935 00B0AB 0010AB 0040AB 18A006 0EF006 18E006 265BC 588006 265D0 265C6 265C1 265B7 19D006 587006 265CB 0F6006 0F1006 0F4006 102006 50B006 10E006 10D006 0DE006 108007 33107 073C3 36568 3709B 360BB 040314 21B006 21C006 35E75 37287 37394 373A8 37380 27D006 05F0AB Name XYZW>W XYZW>WXYZ XYZW>YWZX XYZW>YZWX Y<=X xYCOL Yext YHI xYRNG xYSLICE xYVOL xYYRNG Z2%% Z2BIN Z2Sext Z< Z<0ERR Z<= Z<> Z= Z> Z># Z>#ERR Z>= Z>R Z>S Z>ZH ZAbs ZABS ZBit? ZBits ZDIVext ZEILBERGER ZERO ZERO_DO ZEROFALSE ZEROISTOPSTO ZEROOVER xZEROS ZEROS1EQ ZEROSMANYEQ ZEROSWAP ZEROZERO ZEROZEROONE ZEROZEROTWO ZEROZEROZERO ZFACTO xZFACTOR Page 108 108 107 107 476 65 13 476 476 476 477 31 22 328 334 404 334 334 334 334 22 404 334 31 46 328 329 329 329 329 393 10 151 22 152 22 477 414 415 22 21 21 21 21 381 477 Addr. 0C9006 2B8006 2B7006 51F006 0FC006 0FA006 0D2006 0DD006 107006 105006 106006 255A6 255AB 0D1006 0DC006 0F0007 0F1007 0EE007 0E0006 0D8006 0D6006 0D7006 101006 0020AB 189006 25F9A 25F9A 388006 40A006 31568 34670 344A8 3466B 3616F 3467A 34675 34684 3467F 3468E 34689 34698 34693 33B13 346A2 3469D 346AC 346A7 346B6 Name ZFactor ZGcd ZGCDext ZINTSQRT ZIsNeg? ZIsOne? ZIsPrime? ZMod ZNLT? ZNMax ZNMin ZoomX ZoomY ZPrime? ZQUOText ZSIGNE zsigne ZSIGNECK ZSQRT ZTrialDiv ZTrialDiv2 ZTrialPrime? ZTrim xZVOL ZZ2C%%ext 0LASTOWDOB! 0LastRomWrd! 1&meta 1-x2/1+x2 1/X15 10GETLAM 10PICK 10PUTLAM 10UNROLL 11GETLAM 11PUTLAM 12GETLAM 12PUTLAM 13GETLAM 13PUTLAM 14GETLAM 14PUTLAM 14SPACES$ 15GETLAM 15PUTLAM 16GETLAM 16PUTLAM 17GETLAM
547
Page 330 329 329 334 334 331 329 334 329 329
331 401 402 401 329 332 332 332 329 477 37 197 197 359 365 117 109 118 109 118 118 118 118 118 118 118 118 45 118 118 118 118 118
548
Addr. 346B1 346C0 346BB 346CA 346C5 362A2 362A2 25E6C 35DEE 364FF 34616 2F318 35F42 36518 3A4006 3A1006 2B3A6 34611 2F180 25E6D 36676 30E5B 30E47 34B4F 441006 443006 346D4 346CF 346DE 346D9 346E8 346E3 346F2 346ED 346FC 346F7 34706 34701 34710 3470B 3471A 34715 34BAB 173006 03258 355A5 25E6E 35B32 Name 17PUTLAM 18GETLAM 18PUTLAM 19GETLAM 19PUTLAM 1_#1-SUB 1_#1-SUB$ 1A/LockA 1ABNDSWAP 1GETABND 1GETLAM 1GETLAMSWP1+ 1GETSWAP 1LAMBIND 1metainf# 1metaundef# 1NULLLAM{} 1PUTLAM 1REV 1stkdecomp$w 2#0=OR 2%%>% 2%>%% 2'RCOLARPITE 2*1-cos/sin 2*sin/1+cos 20GETLAM 20PUTLAM 21GETLAM 21PUTLAM 22GETLAM 22PUTLAM 23GETLAM 23PUTLAM 24GETLAM 24PUTLAM 25GETLAM 25PUTLAM 26GETLAM 26PUTLAM 27GETLAM 27PUTLAM 2@REVAL 2DMATRIX? 2DROP 2DROP00 2DropBadKey 2DROPFALSE Page 118 118 118 118 118 48 48 119 119 117 119 119 116 367 367 119 118 30 51 26 31 31 138 366 367 118 118 118 119 118 119 118 119 118 119 118 119 118 119 118 119 128 339 106 21 207 136 Addr. 2D7006 392006 031AC 3674D 358C2 358DC 358F8 36CA4 36621 35D30 3370B 3632E 34620 336E3 336CF 2F17E 155006 33459 3A3006 3A0006 2825E 271F4 37087 37046 4E1006 3461B 343E1 331B1 3570C 35018 12A006 40D006 34BBB 341D2 2D5006 3462A 156006 27208 34485 36789 36CCC 360F7 35F1A 34625 343F3 33765 35703 3422B
17PUTLAM #1+PICK
Addr. 341D7 34634 2B3B7 3448A 3679D 35E20 35E20 3610B 35F2E 3462F 3423A 3588B 360E3 36043 35F06 34331 343CF 35D44 36057 341DC 3463E 3448F 34639 34257 358A7 356D5 34357 341E8 34648 34494 34643 34281 3438D 341F4 34652 34499 3464D 342EA 35BEB 3465C 3449E 34657 342BB 3615B 34666 344A3 34661 28225 Name 4DROP 4GETLAM 4NULLLAM{} 4PICK 4PICK#+ 4PICK#+SWAP 4PICK+SWAP 4PICKOVER 4PICKSWAP 4PUTLAM 4ROLL 4ROLLDROP 4ROLLOVER 4ROLLROT 4ROLLSWAP 4UNROLL 4UNROLL3DROP 4UNROLLDUP 4UNROLLROT 5DROP 5GETLAM 5PICK 5PUTLAM 5ROLL 5ROLLDROP 5skipcola 5UNROLL 6DROP 6GETLAM 6PICK 6PUTLAM 6ROLL 6UNROLL 7DROP 7GETLAM 7PICK 7PUTLAM 7ROLL 7UNROLL 8GETLAM 8PICK 8PUTLAM 8ROLL 8UNROLL 9GETLAM 9PICK 9PUTLAM 9UNROLL Page 106 117 119 109 25 25 25 109 109 118 107 107 108 108 107 108 108 108 108 106 117 109 118 108 108 131 109 106 117 109 118 108 109 106 117 109 118 108 109 117 109 118 108 109 117 109 118 109 Addr. 35369 353F7 353EB 2F315 2F316 25E67 25E68 353CD 35F6A 2F191 3533C 263D2 25F68 25F63 03EC2 2632D 03DBC 36851 357FC 36093 34417 344DD 35E39 3453D 03DE0 35552 36815 3581F 360A7 34405 344CB 35E4D 3452B 03EF7 03CC7 03CA6 34A7E 36383 348FC 36F15 35B96 03DEF 36A13 073DB 35830 362CA 35FB0 34436 Name !!append$? !!append$ !!insert$ !#1+IF<dim-1 !#1-IF>0 !*triand !*trior !append$ !append$SWAP !DcompWidth !insert$ !MATTRNnc !REDIMTEMP !REDIMUSER #* #*OVF #+ #+-1 #+DUP #+OVER #+PICK #+ROLL #+SWAP #+UNROLL ##-#2/ #-+1 #-DUP #-OVER #-PICK #-ROLL #-SWAP #-UNROLL #/ #0<> #0= #0=?SEMI #0=?SKIP #0=case #0=ITE #0=UNTIL #1+ #1+' #1+_ONE_DO #1+DUP #1+LAST$ #1+NDROP #1+PICK
549
Page 49 49 49
50 50 49 49 51 49
23 23 23 23 24 24 110 108 24 109 23 24 23 24 24 110 108 24 109 23 25 25 141 141 141 141 151 23 130 151 24 48 75, 106 109
550
Addr. 344F2 2F222 35E61 34552 03E0E 36851 36815 35E89 35841 3601B 3628E 28071 281D5 361EE 35675 35620 03880 3375B 3E17B 3562A 2777E 3378D 337A1 337AB 337B5 337BF 337C9 337D3 337DD 337E7 337F1 337FB 3530D 352FE 3639C 36D8A 03E6F 03E2D 34451 34517 34564 03E4E 03E8E 3380F 3C8D0 03FEF 03FF9 36711 Name #1+ROLL #1+ROT #1+SWAP #1+UNROLL #1#1-+ #1#1-1SWAP #1-DUP #1-ROT #1-SUB$ #1-SWAP #1-UNROT #1-{}N #10* #10+ #102A8 #110 #111 #12+ #12F #132 #134 #135 #136 #137 #138 #139 #13A #13B #13D #13E #1<> #1= #1=?SKIP #1=case #2* #2+ #2+PICK #2+ROLL #2+UNROLL #2#2/ #200 #2111 #2614 #2686 #2<> Page 108 24 24 109 23 23 23 24 24 24 48 24, 77 24 72 23 23 21 17 17 23 17 17 17 17 17 17 17 17 17 17 17 17 25 25 142 142 23 23 109 108 109 23 23 17 20 20 20 25 Addr. 352F1 091B4 03FA9 355FD 34465 2D6006 355DF 3A1C2 3B9FA 350F5 352E0 35602 34474 355DA 3C11E 3B928 33837 3BA2D 0803F 3B93D 33841 3C10F 3B952 33855 3BA18 3B913 3A12D 35607 355D5 3385F 33869 3BA09 08ECE 33873 366FD 3C8DF 356B8 3560C 355D0 277F6 27800 2780A 27814 2781E 27828 27832 2783C 27846
#1+ROLL #A2A
Addr. 2768E 27698 276AC 276B6 276C0 276CA 0657E 276D4 276DE 276E8 27792 2779C 277A6 277B0 277BA 277C4 277CE 277D8 277E2 277EC 276F2 276FC 27706 27710 2771A 27724 2772E 27738 27742 27788 35611 33891 3C17A 3C16B 08DF7 3569B 35616 27878 3B976 3C83C 3B967 3C81E 3389B 338A5 338AF 338B9 3362F 3E7FF Name #60E #60F #611 #612 #613 #614 #61441 #615 #616 #617 #618 #619 #61A #61B #61C #61D #61E #61F #620 #621 #622 #623 #624 #628 #629 #62A #62B #62C #62D #62E #7+ #700 #710 #750 #7FF #8* #8+ #800 #822 #82C #855 #85C #861 #862 #865 #86E #8F #8F1 Page 18 18 18 18 18 18 21 18 18 18 18 18 18 18 18 18 18 18 18 18 18 19 19 19 19 19 19 19 19 19 23 19 19 19 19 23 23 19 19 19 19 19 19 19 19 19 16 19 Addr. 3E759 3561B 33643 3364D 3EAFB 3E7E9 3E743 25F72 03CE4 366BC 03D4E 36D9E 36D76 36F29 03D19 363B5 348D2 34939 36590 35C54 37752 03D83 25F77 36739 36DB2 363E2 36DCB 05A75 059CC 36F3D 07E50 0EE006 3CD21 3373D 2774C 27756 27760 2776A 27774 338CD 3D50D 338D7 338E1 3D52B 3367F 338EB 338F5 338FF Name #8FD #9+ #92 #9A #9F #9F1 #9FD #:>$ #< #<3 #<> #<>case #<case #<ITE #= #=?SKIP #=case #=casedrop #=casedrpfls #=ITE #=POSCOMP #> #>$ #>1 #>2case #>?SKIP #>case #>CHR #>HXS #>ITE #>ROMPTR #>Z x#? #_102 #A01 #A02 #A04 #A05 #A06 #A11 #A110 #A12 #A1A #A1A0 #A2 #A21 #A22 #A2A
551
Page 19 23 16 16 16 19 19 46 25 25 25 141 141 141 25 140 141 141 141 141 69 25 46 25 142 140 141 47 56 141 100 327 476 17 19 19 19 19 19 19 20 19 19 20 16 19 20 20
552
Addr. 39E6B 33689 33909 33913 3391D 33927 03826 336A7 33931 3D51C 3393B 33945 2C4D2 3BD4C 03EB1 39277 38275 3B7AD 3394F 33959 33963 33977 3B904 3C800 3B8F5 3C7E2 3E7DA 33981 3BD65 08F1F 038DC 33995 07C007 38266 3736E 3551D 35511 33783 37315 03DC7 33747 3735C 3734A 37328 3733A 37294 37305 39C9F Name #A4 #A5 #A61 #A62 #A65 #A6E #A8241 #A9 #AA1 #AA10 #AA2 #AAA #AAA0 #AF #AND #B437D #BB #BBBB #C06 #C07 #C08 #C0B #C22 #C2C #C55 #C5C #C8 #CAlarmErr #CF #D6A8 #E13A8 #EXITERR #FACT #FFFF #FIVE#FOUR #MAX #MIN #NoRoomForSt #ONE#27 #PUSHA#SyntaxErr #THREE#FOUR #TWO#FOUR #TWO#ONE #TWO#TWO #ZERO#ONE #ZERO#SEVEN $&ob Page 16 16 20 20 20 20 21 16 20 20 20 20 20 16 25 21 16 20 20 20 20 20 20 20 20 20 16 20 16 20 21 21 330 21 21 25 25 17 21 17 21 21 21 21 21 21 53 Addr. 36851 25F7C 25F81 25F86 25F8B 05F0B3 05B15 3402C 34056 3403A 34002 3401E 34064 34076 340B4 34048 33FD2 33FE2 340A4 34088 33FF2 34010 33B45 3B251 30385 3602F 35EDE 36C7C 3032E 3033A 2FBE5 30DC8 2FBFF 303D3 36BE6 2FB49 30112 301F6 301A6 30145 30173 301CE 2FB63 3047D 2FC19 30CC7 2FB7D 27A89
#A4 %23
Addr. 2FB97 2FBB1 2FBCB 30CEB 30BEA 3020A 30296 3026A 2FF9B 30280 261CF 3044A 302DB 306F3 3073A 30757 30767 306C3 302FB 30642 30653 307B2 30663 30507 30984 30912 30984 30546 3057F 300C7 30EB0 2FADB 11C007 30E83 305F1 30602 30780 30612 304D5 30693 303A7 3035F 25E69 3036C 339D3 2FA09 2B289 2FA1E Name %%3 %%4 %%5 %%60 %%7 %%< %%<= %%> %%>% %%>= %%>C% %% %%ABS %%ACOSRAD %%ANGLE %%ANGLEDEG %%ANGLERAD %%ASINRAD %%CHS %%COS %%COSDEG %%COSH %%COSRAD %%EXP %%FLOOR %%H>HMS %%INT %%LN %%LNP1 %%MAX %%P>R %%PI %%PSI %%R>P %%SIN %%SINDEG %%SINH %%SINRAD %%SQRT %%TANRAD %* %+ %+SWAP %%-.5 %-1 %-1=case %-2 Page 30 30 30 30 30 35 35 35 31 35 37 34 34 34 34 34 34 34 34 34 34 34 34 34 34 172 34 34 34 34 34 30 394 34 34 34 34 34 34 34 31 31 31 31 28 28 143 28 Addr. 2FA33 2FA48 2FA5D 2FA72 2FA87 2FA9C 2FAB1 2FB0A 2FB34 27118 2712D 339BE 303E9 2F937 30123 301BA 30156 2B149 30184 301E2 2F94C 26F36 26F4A 270EE 3049A 339E8 35C18 27E5D 2FCE6 2FCFB 2FC7D 2FD10 2FD25 2FD3A 2FCD1 2FD4F 2FD64 2FD79 339FD 2FD8E 2B1A3 4CE006 2F961 2FDA3 33A12 2FDB8 2FDCD 2FDE2 Name %-3 %-4 %-5 %-6 %-7 %-8 %-9 %-MAXREAL %-MINREAL %.1 %.15 %.5 %/ %0 %0< %0<> %0= %0=case %0> %0>= %1 %1+ %1%1.8 %1/ %10 %10* %100 %11 %12 %1200 %13 %14 %15 %15360 %16 %17 %18 %180 %19 %1=case %1TWO %2 %20 %200 %21 %22 %23
553
Page 28 28 28 28 28 28 28 28 28 28 28 32 28 35 35, 135 35 142 35 35 28 31 31 28 32 28 31 29 28 28 29 29 29 29 29 29 29 29 29 29 142 396 28 29 29 29 29 29
554
Addr. 2FDF7 2FC92 2FE0C 2FE21 2FE36 2FE4B 2FE60 2B20C 2F976 2FE75 2FE8A 2FE9F 2FEB4 2FEC9 2FEDE 33A27 2F98B 33A3C 2FCA7 2F9A0 2F9B5 2F9CA 2F9DF 27103 2F9F4 2FCBC 3025C 302A1 302B7 302AC 30275 2EFCB 2FFAC 30346 30489 30746 304E1 35ECA 3028B 05C27 3005E 2F223 3045B 302EB 262EC 306DC 307FE 305A5 Name %24 %2400 %25 %26 %27 %28 %29 %2=case %3 %30 %31 %32 %33 %34 %35 %360 %4 %400 %4800 %5 %6 %7 %8 %80 %9 %9600 %< %<= %<> %= %> %># %>%% %>%%%>%%1/ %>%%ANGLE %>%%SQRT %>%%SWAP %>= %>C% %>HMS %>TAG % %ABS %ABSCOERCE %ACOS %ACOSH %ALOG Page 29 29 29 29 29 29 29 143 28 29 29 29 29 29 29 29 28 29 29 28 28 28 28 29 28 29 35 35 35 35 35 56 31 31 32 32 32 31 35 37 172 61 32 32 22 32 32 32 Addr. 30723 306AC 307EB 3070C 30811 3095E 3B362 3041B 3030B 3084D 3062B 307C5 3000D 339A9 3051A 3052D 30824 30AAF 30971 30938 3008B 300B3 30077 3094B 2B3FD 30559 30592 3056C 3031B 300E0 35DBC 2FAF5 300F9 2FB1F 305C7 30837 3046C 303B4 30860 2FAC6 30EA6 30040 309AD 30A2F 30E79 302C2 305DA 30799
%24 >TAG
Addr. 30EDD 304F4 3B2DC 303F6 3067C 307D8 4EA61 4EA4C 4EA37 4EA22 4EA76 05193 36FF6 0521F 0518A 389EF 06E97 25E6A 25E6B 2B90B 3619E 27B43 27B7F 27B6B 27155 2F350 36A8B 36306 06EEB 36A27 29ED0 06F66 36A4A 354CB 354CB 29786 36BBE 36BD2 36AA4 2EE006 2EC006 39DE8 127006 3C444 3C464 39B58 125006 073A5 Name %SPH>%REC %SQRT x%T %T %TAN %TANH %TICKSday %TICKShour %TICKSmin %TICKSsec %TICKSweek &$ &$SWAP &COMP &HXS x' ' 'DoBadKey 'DoBadKeyT 'DROPFALSE 'ERRJMP 'IDFUNCTION 'IDPARAMETER 'IDPOLAR 'IDX 'LamKPSto 'LAMLNAMESTO 'NOP 'R 'R'R 'Rapndit 'REVAL 'RRDROP 'RSaveRomWrd 'RSAVEWORD 'RSWAP#1+ 'x* 'xDER 'xDEREQ 'xi 'xPI x* x*ext x*H x*W x+ x+ext +LOOP Page 33 32 474 33 32 32 29 29 29 29 30 49 49 68 57 130 130 130 130 130 131 131 131 116 168 130 128 128 131 128 128 197 197 24 130 130 131 420 420 476 347 470 470 476 347 151 Addr. 39CFC 3DA3E 3DA63 3EFB1 126006 39F49 129006 05445 3631A 09F006 3F053 3CE42 389B9 3CF80 27F47 27EAF 38D83 398B9 3CBF6 128006 3CEE1 3D01F 389D4 38999 3BE9B 27F9A 25F15 3C8A1 0525B 052C6 3B0EC 0A2006 0A4006 25F90 37C06 3C881 3B7D2 2620B 39785 0A7006 4F8006 06F9F 25E6F 0EB007 27EFB 3BBBE 052EE 05E81 Name xx->Q x->QPI x->TAG x-ext x/ x/ext ::N ::NEVAL ::POLY x; x< x<< x<=? <DelKey <SkipKey x<STRUCT x= x== x=ext x> x>=? x>> x>>ABND x>ARRY >DelKey >FONT x>GROB >H$ >HCOMP x>HMS >HPOLY >HPOLYN >LANGUAGE >LASTRAM-WORD x>LCD x>LIST >MINIFONT x>NUM >POLY >POLYTRIM >R >Review$ >SIGNE >SkipKey x>STR >T$ >TAG
555
Page 476 468 468 473 347 476 347 71 74 377 476 476 314 314 476 476 350 476 476
454 314 283 460 49 68 461 378 378 179 463 464 283 465 377 399 128 52 401 314 472 49 61
556
Addr. 052FA 0A1006 0A3006 38FB5 3C2D6 3C30A 4F1006 089314 35A88 25F9F 25E70 25E70 25E71 361C6 25E72 25E73 25E74 25E75 2F19F 2DFCC 2C341 2C311 2E5006 2EE5D 39332 34A46 25E76 3705A 25E77 25E78 35AAB 34AA1 3692D 0712A 35DDA 2EF73 25E79 Name >TCOMP >TPOLY >TPOLYN x>UNIT x>V2 x>V3 >VARLIST x? ?>ROMPTR ?ACCPTR> ?ATTN_QUIT ?ATTNQUIT ?BlinkCursor ?CARCOMP ?CaseKeyDef ?CaseRomptr@ ?ClrAlg ?ClrAlgSetPr ?DispCommandLine ?DispMenu ?DispStack ?DispStatus ?ext ?FlashAlert ?GETMSG ?GOTO ?Key>UKeyOb ?Ob>Seco ?OKINALG ?PURGE_HERE ?ROMPTR> ?SEMI ?SEMIDROP ?SKIP ?SKIPSWAP ?Space/Go> ?STO_HERE Page 68 377 378 474 475 475 Addr. 35F56 35F97 293A3 2ACB0 0797B 07943 16B006 002100 00B100 006100 0380AB 03A0AB 0020DD 000100 0040DD 06C0AB 0000DD 00A100 0110DD 0060DD 00C100 00E100 0360AB 020100 3D202 3D434 0550AB 0590AB 08A314 05A0AB 3A097 12B006 05459 0A0006 16A006 3D56B
100 207 207 179 68 142 142 278 278 312, 274 292, 274 274 274 419 178 157 129 73 201 167 100 137 138 138 138 311 167
178
557
558
Addr. 03B46 03B75 03B97 03C64 03CA6 03CC7 03CE4 03D19 03D4E 03D83 03DBC 03DC7 03DE0 03DEF 03E0E 03E2D 03E4E 03E6F 03E8E 03EB1 03EC2 03EF7 03F8B 03F95 03F9F 03FA9 03FA9 03FBD 03FD1 03FDB 03FE5 03FEF 03FF9 041A7 041ED 0426A 04708 04714 047C7 047CF 047DD 04A0B 04A41 04CE6 04D0E 04D33 04D3E 04D64 Name AND OR EQUAL TYPE #0= #0<> #< #= #<> #> #+ #PUSHA##1+ #1#2+ #2#2* #2/ #AND #* #/ TYPEREAL TYPECMP TYPELIST TYPEIDNT #2E48 TYPESYMB TYPELAM TYPEEREL TYPEEXT #2614 #2686 TurnOff DEEPSLEEP ShowInvRomp CHECKKEY GETTOUCH REPKEY? adrDISABLE_K adrKEYBUFFER GETPROC GETDF ERROR@ ERRORSTO ERRORCLR DROPNULL$ GETTHEMESG Page 136 136 137 199 25 25 25 25 25 25 23 23 23 23 23 23 23 23 25 23 23 20 20 20 20 20 20 20 20 20 20 20 178 178 178 205 206 206 Addr. 04D87 04D87 04E07 04E37 04E5E 04E66 04EA4 04EB8 04ED1 04FB6 04FF2 05016 05040 05068 05089 050ED 05149 05153 0516C 0518A 05193 0521F 0525B 052C6 052EE 052FA 05445 05459 0546D 05481 054AF 0556F 055B7 055D5 055DF 055E9 055FD 05616 05622 05636 0567B 056B6 05733 05815 05821 05902 05944 059CC
03B46 25579
Addr. 05A03 05A51 05A75 05AB3 05B15 05BE9 05C27 05D2C 05DBC 05E81 05F2E 05F42 05F61 0657E 06657 06B4E 06E8E 06E97 06EEB 06F66 06F8E 06F9F 06FB7 06FD1 07012 0701F 070C3 070FD 0712A 0712A 0714D 0716B 071A2 071AB 071C8 071E5 071EE 07221 07249 07258 07264 07270 07295 072AD 072C2 07334 073A5 073C3 Name HXS># CHR># #>CHR CHANGETYPE $>ID ID>$ %>C% C%>% C%%>%% >TAG ID>TAG GARBAGE MEM #61441 TOTEMPOB INTEMNOTREF? NOP ' 'R 'REVAL EVAL >R RDROP COLA R@ R> RPITE RPIT ?SKIP NOT_IT SKIP IDUP BEGIN AGAIN UNTIL REPEAT WHILE INDEX@ ISTOP@ JINDEX@ JSTOP@ INDEXSTO ISTOPSTO JINDEXSTO JSTOPSTO LOOP +LOOP ZERO_DO Page 22 22 47 179 116 46 37 31 37 61 61 178 178 21 171 171 128 130 128 128 128 128 129 131 128 128 138 138 138 138 131 128, 150 150 151 151 151 151 151 152 152 152 152 152 152 152 151 151 151 Addr. 073CE 073DB 073F7 07497 074D0 074E4 075A5 075E9 07638 0764E 07661 076AE 07709 07943 0797B 07D1B 07D27 07E50 07E99 0803F 081D9 082E3 08309 08326 08376 085D3 08696 08C27 08CCC 08D08 08D5A 08D66 08D92 08D92 08DD4 08DF7 08ECE 08F1F 0905F 091B4 092DB 0B954 20D6F 25565 2556A 2556F 25574 25579 Name ONE_DO #1+_ONE_DO DO ABND BIND DOBIND GETLAM PUTLAM SETHASH SETMESG SET OFFSRRP TOSRRP @LAM @ STOLAM STO #>ROMPTR ROMPTR@ #414C1 BAKNAME RAM-WORDNAME MYRAMROMPAIR LASTRAM-WORD PREVRAM-WORD REPLACE CREATE PURGE ROMPTR># CONTEXT! CONTEXT@ SysPtr@ HOMEDIR SYSCONTEXT SYSRRP? #7FF #536A8 #D6A8 BAK>OB #2D541 InitEnab RunInNewContext TYPERRP LineW LineB LineG1 LineG2 LineXor
559
Page 151 151 151 117 116 116 117 118 100
100 100 117 166 117 167 100 100 21 101 168 168 168 167 167 167 100 169 169 169 169 169 19 21 20 101 21 310 20 93 93 93 93 93
560
Addr. 2557E 25583 25588 2558D 25592 25597 2559C 255A1 255A6 255AB 255B0 255B5 255BA 255BF 255C4 255C9 255CE 255D3 255D3 255D8 255DD 255E2 255E7 255EC 255F1 255F6 255FB 25617 2561C 25621 25636 2564D 2565A 2565F 25671 25676 25683 25690 25695 2569A 256A2 256A7 256AC 256BE 256EA 25719 2571E 2577F Name Sub Repl Gor Gxor SubRepl SubGor SubGxor Grey? ZoomX ZoomY ScrollVGrob Distance PixonW PixonB PixonG1 PixonG2 PixonXor FBoxW FBoxG1 FBoxG2 FBoxB FBoxXor LBoxW LBoxG1 LBoxG2 LBoxB LBoxXor SetNUsrKeyOK ClrNUsrKeyOK NonUsrKeyOK? HISTON? SetNAppKeyOK DoStdKeys? SetDoStdKeys SetAppSuspOK ClrAppSuspOK SetBadPOLUI AppMode? SetAppMode ClrAppMode UNDO_ON? UNDO_ON UNDO_OFF NOBLINK AlgEntry? SetAlgEntry ClrAlgEntry TogInsert Page 93 93 93 94 93 93 93 94 Addr. 25790 25795 2579A 257A2 257BE 257E2 2580E 25845 25863 25877 25886 2588B 25890 2589A 2589F 258B3 258C7 258EF 25908 2590D 2593F 25949 2594E 25967 2597B 25980 25E67 25E68 25E69 25E6A 25E6B 25E6C 25E6D 25E6E 25E6F 25E70 25E70 25E71 25E72 25E73 25E74 25E75 25E76 25E77 25E78 25E79 25E79 25E7A
94 95 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 208 208 208 224 224 224 224 224 224 224 224
288 289 289 290 293, 95 290 290 293 290 290 291 291 289 289
208
50 50 31 130 130 51 207 52 207 207 179 142 142 278 278 201 167 167 167
2557E 25EDC
Addr. 25E7B 25E7C 25E7D 25E7E 25E7F 25E80 25E81 25E82 25E83 25E84 25E85 25E86 25E87 25E88 25E89 25E8A 25E8B 25E8C 25E8D 25E8E 25E8F 25E90 25E91 25E92 25E93 25E94 25E95 25E96 25E97 25E98 25E99 25E9A 25E9B 25E9C 25E9D 25E9E 25E9F 25EA0 25EA1 25EA2 25EA3 25EA6 25EA7 25EA8 25EA9 25EAA 25EAB 25EAC Name ALGeq? AND$ ATTNxcp BLANKIT Box/StdLabel Box/StdLbl: C%1/ C%>%% C%>%%SWAP C%ABS C%ACOS C%ACOSH C%ALOG C%ARG C%ASIN C%ASINH C%ATAN C%ATANH C%COS C%COSH C%CC C%CR C%EXP C%LN C%LOG C%RC C%SGN C%SIN C%SINH C%SQRT C%TAN C%TANH C>Im% C>Re% CK0ATTNABORT CK1NoBlame CKREF COERCE$22 CREATEDIR CRUNCH CRUNCHNoBlame CheckMenuRow Ck&DecKeyLoc Ck&Freeze CodePl>%rc.p DECOMP$ DISPROW1* DISPROW2* Page 49 277 95 95 37 37 37 37 38 38 38 38 38 38 38 38 38 38 37 37 38 38 38 37 37 38 38 37 38 38 37 37 207 197 171 47 168 86 293 205 205 53 281 281 Addr. 25EAD 25EAE 25EAF 25EB0 25EB1 25EB2 25EB3 25EB4 25EB5 25EB6 25EB7 25EB8 25EB9 25EBA 25EBB 25EBC 25EBD 25EBE 25EBF 25EC0 25EC1 25EC2 25EC3 25EC4 25EC5 25EC6 25EC7 25EC8 25EC9 25ECA 25ECB 25ECC 25ECD 25ECE 25ECF 25ED0 25ED1 25ED2 25ED3 25ED4 25ED5 25ED6 25ED7 25ED8 25ED9 25EDA 25EDB 25EDC Name DISPSTATUS2 DO#EXIT DO$EXIT DO%EXIT DO>STR DOBEEP DOCHR DODISP DORCLE DOSTOE DOSTR> DOTVARS% DOVARS DPRADIX? DUPGROBDIM Disp5x7 DispVarsUtil Do1st/2nd+: DoBadKey DoCAlarmKey DoDelim DoDelims DoFirstRow DoHere: DoKeyOb DoMenuKey DoNameKeyLRS DoNameKeyRS DoNextRow DoPlotMenu DoPrevRow DoSolvrMenu DropBadKey EDITDECOMP$ EQUATION EVALCRUNCH Echo2Macros EditMenu EqList? FlashMsg GBUFFGROBDIM GETKEY GETKEY* GROB>GDISP GetKeyOb GetMenu% GetNextToken H/W>KeyCode
561
Page 282 156 156 156 53 178 46 281 318 318 50 168 168 178 90 282 278 207 302 302 294 168 206 291
207 53 318
562
Addr. 25EDD 25EDE 25EDF 25EE0 25EE1 25EE2 25EE3 25EE4 25EE5 25EE6 25EE7 25EE8 25EE9 25EEA 25EEB 25EEC 25EED 25EEE 25EEF 25EF0 25EF1 25EF2 25EF3 25EF4 25EF5 25EF6 25EF7 25EF8 25EFA 25EFB 25EFC 25EFD 25EFE 25EFF 25F00 25F01 25F02 25F03 25F04 25F05 25F06 25F07 25F08 25F09 25F0A 25F0B 25F0C 25F0D Name H/WKey>KeyOb HARDHEIGHT ImmedEntry? InitMenu InitMenu% InitTrack: KEYINBUFFER? KeepUnit Key>StdKeyOb Key>U/SKeyOb LastNonNull LoadTouchTbl LockAlpha ModifierKey? NEXTLIBBAK NULL$TEMP NoAttn?Semi NoEdit?case NoExitAction OR$ PATHDIR PrevNonNull RAD? RECLAIMDISP REPEATER REPEATERCH SAFE@_HERE SEP$NL SLEEPxcp SaveLastMenu SetKeysNS SetSomeRow SetThisRow SolvMenuInit StartMenu Std/BoxLabel StdMenuKeyLS StdMenuKeyNS SuspendOK? TurnOffKey UART? UARTxcp UnLockAlpha UserKeys? VLM WaitForKey XEQStoKey XOR$ Page 273 278 291 291 289 206 82 208 208 168 292 278 205 99 46 207 146 291 50 169 168 178 273 Addr. 25F0E 25F0F 25F0F 25F10 25F11 25F12 25F13 25F14 25F15 25F16 25F17 25F18 25F19 25F1A 25F1B 25F1C 25F1D 25F1E 25F1F 25F20 25F21 25F22 25F23 25F24 25F25 25F29 25F2A 25F2B 25F2C 25F2D 25F63 25F68 25F6D 25F72 25F77 25F7C 25F81 25F86 25F8B 25F90 25F95 25F9A 25F9A 25F9F 25FA4 25FA9 25FAE 25FB3
Page 91 46 46 158 53 280 51 168 283 161 161 162 160 160 162 161 160 160 162 162 176 176 96 197 198 293
166 48 289 290 293 292 293 292 95 290 290 224
RestoreSysFlags SaveSysFlags RIGHT$3x6 CKNNOLASTWD EvalNoCK: Keyword? CHECKMENU Find1stT.1 TogInsertKey !REDIMUSER !REDIMTEMP realPAcode #:>$ #>$ $>GROB $>grob $>GROBCR $>grobCR >LANGUAGE LANGUAGE> 0LastRomWrd! 0LASTOWDOB! ?ACCPTR> ABUFF ALARM? ATTN? DISPN
25EDD 26170
Addr. 25FB3 25FB8 25FB8 25FB8 25FBD 25FBD 25FBD 25FC2 25FC2 25FC2 25FC7 25FC7 25FC7 25FCC 25FD1 25FD6 25FDB 25FE0 25FE5 25FEA 25FEF 25FF4 25FF9 25FFE 26003 26008 2600D 26012 26017 2601C 26021 2602B 26030 26035 2603A 2603F 26044 26049 2604E 26053 26058 2605D 26062 26067 2606C 26071 26076 2607B Name BIGDISPN BIGDISPROW1 DISPROW1 DISP@01 DISPROW2 DISP@09 BIGDISPROW2 DISP@17 BIGDISPROW3 DISPROW3 DISPROW4 BIGDISPROW4 DISP@25 DISPROW5 DISPROW7 DISPROW8 DISPROW9 DISPROW10 DISPLASTROW DISPLASTROWBUT1 CENTER$3x5 CENTER$5x7 LEFT$3x5 LEFT$5x7 LEFT$5x7Arrow LEFT$3x5Arrow LEFT$5x7CRArrow LEFT$3x5CRArrow LEFT$5x7CR LEFT$3x5CR CLEARVDISP COERCEFLAG CURSOR_OFF ClrAlphaAnn ClrLeftAnn ClrRightAnn ClrSysFlag ClrUserFlag DOENG DOFIX DOSCI DOSTD DropSysObs ERRBEEP ERASE&LEFT$5x7 ERASE&LEFT$3x5 GBUFF GROB! Page 281 281 281 281 281 281 281 281 281 281 281 281 281 281 281 281 281 281 282 282 96 97 97 97 97 97 97 97 97 97 277 135 300 278 277 277 175 175 177 177 177 177 156 97 97 272 90 Addr. 26080 26085 2608A 2608F 26094 26099 2609E 260A3 260A8 260AD 260B2 260B7 260BC 260C1 260C6 260CB 260D0 260D5 260DA 260DF 260E4 260E9 260EE 260F3 260F8 260FD 26102 26107 2610C 26111 26116 2611B 26120 26125 2612A 2612F 26134 26139 2613E 26143 26148 2614D 26152 26157 26161 26166 2616B 26170 Name GROB!ZERO GROBDIM GsstFIN HARDBUFF HARDBUFF2 HEIGHTENGROB INVGROB KILLGDISP LastMenuRow! LastMenuRow@ MAKEGROB MenuRow! MenuRow@ NOHALTERR NOTLISTcase NOTROMPcase NOTSECOcase PIXOFF3 PIXON3 PIXOFF PIXON PIXON?3 PIXON? PULLCMPEL PULLREALEL PUTCMPEL PUTEL PUTREALEL PrgmEntry? RDUP SETCIRCERR SETCURSOR SLOW VERYSLOW VERYVERYSLOW SUBGROB SYNTAXERR SetAlphaAnn SetLeftAnn SetPrgmEntry SetRightAnn SetSysFlag SetUserFlag SystemLevel? TIMEOUT? TOADISP TOGDISP TestSysFlag
563
Page 91 90 273 273 273 91 273 288 289 91 288 288 157 145 145 145 91 91 91 91 92 91 64 64 65 65 65 278 129 157 172 172 172 91 157 278 277 278 277 175 175
564
Addr. 26175 2617F 26184 26189 2618E 26193 26198 2619D 261A2 261A7 261AC 261B1 261B6 261BB 261C0 261C5 261CA 261CA 261CF 261D4 261D9 261DE 261E3 261E8 261ED 261F2 261F7 261FC 26201 26206 2620B 26210 26215 2621A 2621F 26224 26229 2622E 26233 26238 2623D 26242 26242 26247 2624C 26251 26256 2625B Name TestUserFlag WINDOWCORNER WINDOWDOWN WINDOWLEFT WINDOWRIGHT WINDOWUP WINDOWXY addtics rstfmt1 savefmt1 setbeep stackitw subpdcdptch tok8trior CLCD10 CLEARLCD FLUSHKEYS FLUSH %%>C% C%%0= C%%>C% C%%CHS C%%CONJ C%0= C%CHS C%CONJ DISPROW6 Re>C% nextsym'R tok8cktrior >MINIFONT CHECK_SCAN_FONT DropVStack FONT> FSCANFONT GetElemBotVStack GetElemTopVStack
SetVStackProtectWord GetVStackProtectWord
273 283 196 197 197 197 197 197 196 196 196 196 196 196 196 158 157 157 158 22 22 31 128 197 197 197 197 197 198 197 197 197 23
50 277 277 205 205 37 38 37 38 38 38 37 37 281 37 50 283 162 283 163 163 164 164
51 51 278 300
283
26175 27E9B
Addr. 264DB 2657B 26580 26585 2658A 26594 265B7 265BC 265C1 265C6 265CB 265D0 26F36 26F4A 270EE 27103 27118 2712D 27142 27155 2716D 27195 271F4 27208 272D9 272F3 272FE 275C6 275EE 275FD 27620 2768E 27698 276AC 276B6 276C0 276CA 276D4 276DE 276E8 276F2 276FC 27706 27710 2771A 27724 2772E 27738 Name FIRSTC+ CURSOR_OFF0 CURSOR_OFF+ CURSOR@ CURSOR+ CURSOR_PART Z> Z< Z= Z<> Z>= Z<= %1+ %1%1.8 %80 %.1 %.15 LAMLNAME 'IDX StdIOPAR CRLF$ 2NULLLAM{} 3NULLLAM{} tok-> ID_EQ NULLID TakeOver Modifier MenuKey MenuMaker #60E #60F #611 #612 #613 #614 #615 #616 #617 #622 #623 #624 #628 #629 #62A #62B #62C Page Addr. 27742 2774C 27756 27760 2776A 27774 2777E 27788 27792 2779C 277A6 277B0 277BA 277C4 277CE 277D8 277E2 277EC 277F6 27800 2780A 27814 2781E 27828 27832 2783C 27846 27878 27882 27937 27A3A 27A89 27AA3 27B43 27B6B 27B7F 27C33 27D3F 27D5D 27D7B 27DBF 27DE4 27E09 27E2E 27E5D 27E72 27E87 27E9B Name #62D #A01 #A02 #A04 #A05 #A06 #12F #62E #618 #619 #61A #61B #61C #61D #61E #61F #620 #621 #605 #606 #607 #608 #609 #60A #60B #60C #60D #800 Attn# ID_SIGMADAT StdPRTPAR %%2PI NULLGROB 'IDFUNCTION 'IDPOLAR 'IDPARAMETER ExitFcn CROSSGROB MARKGROB StdLabelGrob C%-1 C%0 C%1 C%%1 %100 nohalt TrueTrue failed
565
Page 19 19 19 19 19 19 17 19 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 19 19 116 30 90 131 131 131 90 90 90 36 36 36 36 29 224 135 136
116 181 43 119 119 44 116 116 291 291 293 291 18 18 18 18 18 18 18 18 18 18 19 19 19 19 19 19 19
566
Addr. 27EAF 27EFB 27F47 27F9A 27FED 28001 28071 28071 28085 28099 280AD 280C1 280F8 2812F 28143 28187 281D5 28211 28225 2825E 282CC 283E8 283FC 286E7 28989 28ACE 293A3 293F8 2962A 2963E 29693 296A7 2973B 29754 29786 29821 298C0 29972 29986 29A5D 29A8F 29B12 29CB9 29D18 29D6A 29E29 29E67 29E99 Name <SkipKey >SkipKey <DelKey >DelKey NullMenuKey ROT#1+UNROT pull #1-SWAP pullrev SWAP#1+SWAP SWAP#1-SWAP ORDERXY# ORDERXY% SWAPTRUE NDUPN reversym #1-UNROT NDROPFALSE 9UNROLL 2NELCOMPDROP DROP%0 FalseFalse ISTOP-INDEX symcomp SWAPDROP#1DROP?symcomp ?symcomp P{}N RDROPFALSE psh& psh1top& top& pshtop& pullpsh1& 'RSWAP#1+ psh1& psh1&rev pshzer pshzerpsharg psh roll2ND unroll2ND uncrunch ONE{}N delimcase ngsizecase nultrior tok=casedrop Page 314 314 314 314 291 24 24, 77 24, 77 77 24 24 92 92 136 106 107 24 75, 136 109 68 31 136 152 86 24 86 86 71 136 76 77 76 76 77 24 77 77 77 88 76 76 76 87 72 Addr. 29ED0 29EE9 29F25 29F35 29F55 29F75 2A055 2A065 2A085 2A095 2A0A5 2A0B5 2A145 2A158 2A4FC 2A5CA 2A7A7 2A7F7 2A842 2A85D 2A878 2A893 2A8AE 2A8C9 2A8E4 2A904 2A924 2A944 2A964 2A984 2A9A4 2A9C4 2A9E9 2AA43 2AA70 2AAE0 2AB69 2ABD7 2ABF0 2AC0E 2AC72 2ACA9 2ACB0 2AD81 2ADBD 2ADE0 2AE32 2AF37
Page 131 223 223 223 223 223 223 307 307 307 307 223 223 48 274 52 53 52 52 54 52 52 52 53 53 52 54 52 52 198 53
RunInApprox
RunSafeFlagsNoError
50 145
RunSafeFlags DoRunSafe need'case addrTEMPTOP ?TogU/LCase EQUALcasedrop nonopcase numb1stcase M-1stcasechs AEQ1stcase
27EAF 2C29F
Addr. 2AFFB 2B01B 2B06A 2B083 2B0CC 2B0EF 2B11C 2B149 2B15D 2B176 2B1A3 2B1C1 2B1DF 2B20C 2B22A 2B25C 2B289 2B2A7 2B2C5 2B2F2 2B31A 2B351 2B3A6 2B3AB 2B3B7 2B3FD 2B42A 2B475 2B4AC 2B542 2B628 2B682 2B6B4 2B6CD 2B709 2B74F 2B7CC 2B8BE 2B8E6 2B90B 2BAB3 2BB21 2BB3A 2BB53 2BCA2 2BD8C 2BE36 2BF1C Name MEQ1stcase MEQopscase AEQopscase Mid1stcase idntcase idntlamcase num0=case %0=case C%0=case num1=case %1=case C%1=case num2=case %2=case C%2=case num-1=case %-1=case C%-1=case NOTcaseFALSE CallEditCmd: Roll&Do: Rcl&Do: 1NULLLAM{} NULLLAM 4NULLLAM{} %IP># PUTLIST ParOuterLoop POLSaveUI POLSetUI POLKeyUI POLErrorTrap POLResUI&Err POLRestoreUI InitPOLVars StartupProc addrClkOnNib OBJ>R R>OBJ 'DROPFALSE COLAthexFCN sscknum2 sncknum2 nscknum2 cknumdsptch1 SYMBN: ALGcase CkEQUtil Page 143 143 143 143 145 145 142 142 142 143 142 142 143 143 143 143 143 143 140 311 Addr. 2BF3A 2BF53 2BF6C 2BF85 2C039 2C044 2C04F 2C05A 2C065 2C07B 2C086 2C091 2C09C 2C0A7 2C0ED 2C10B 2C116 2C121 2C13A 2C145 2C150 2C15B 2C166 2C171 2C17C 2C187 2C192 2C1B0 2C1CE 2C1D9 2C1E4 2C1EF 2C1FA 2C205 2C210 2C21B 2C226 2C231 2C23C 2C247 2C252 2C25D 2C268 2C273 2C27E 2C289 2C294 2C29F Name DA1OK?NOTIT DA2aOK?NOTIT DA2bOK?NOTIT DA3OK?NOTIT nWHEREIFTE nWHEREDER nWHEREINTG nWHERESUM nWHEREWHERE D/D* D/D+ D/DD/D/ derquot derprod1 D/D= D/DABS easyabs D/DACOS D/DACOSH D/DALOG D/DARG D/DASIN D/DASINH D/DATAN D/DATANH D/DCHS D/DCONJ D/DCOS D/DCOSH D/DEXP D/DINV D/DLN D/DLNP1 D/DLOG D/DIFTE D/DSIN D/DSINH D/DSQ D/DSQRT D/DTAN D/DTANH D/D D/DX D/DY D/DDER D/DWHERE D/DINTEGRAL
567
Page 275 275 275 275
568
Addr. 2C2AA 2C2B5 2C2C0 2C2CB 2C2D6 2C2F9 2C305 2C311 2C341 2C371 2C37D 2C388 2C393 2C4D2 2D74F 2D759 2D763 2D76D 2D777 2D848 2D86D 2D8AD 2D949 2D95D 2D971 2D985 2D999 2D9CB 2D9EE 2DA11 2DA2B 2DCB5 2DD27 2DDD5 2DE26 2DEBB 2DFCC 2DFE0 2DFF4 2E0D5 2E0F3 2E107 2E11B 2E166 2E189 2E1EB 2E24D 2E25C Name D/DSUM D/DAPPLY nCustomMenu nCOLCTQUOTE SPLITWHERE DispStsBound DispStatus ?DispStatus ?DispStack DoInputForm PTYPE>PINFO MOVEVAR COPYVAR #AAA0 um* um/ um umP umEND tok_g tok_m tok_s UMSIGN UMIP UMFP UMFLOOR UMCEIL UMRND UMTRC cfF cfC FLOAT Day>Date getBPOFF mpop1% DAY# ?DispMenu DispMenu DispMenu.1 Grob>Menu Str>Menu Seco>Menu Id>Menu MakeStdLabel MakeBoxLabel MakeDirLabel MakeInvLabel InvLabelGrob Page Addr. 2E2AA 2EE5A 2EE5B 2EE5C 2EE5D 2EE5E 2EE5F 2EE60 2EE61 2EE62 2EE63 2EE64 2EE65 2EE65 2EE66 2EE67 2EE68 2EE69 2EE6A 2EE6B 2EE6C 2EE6D 2EE6E 2EE6F 2EE70 2EE71 2EE72 2EE73 2EE74 2EE75 2EE76 2EE77 2EE78 2EE79 2EE7A 2EE7B 2EE7C 2EE7D 2EE7E 2EE7F 2EE80 2EE81 2EE8A 2EE8B 2EE8D 2EE8E 2EE8F 2EE90
293
20 81 81 81 81 81 44 44 44 83 83 83 83 83 83 83 30 30
292, 274 292, 274 292, 274 293, 95 293, 95 293, 95 293, 95 95 95 95 95 90
DoWarning FlashWarning DA1OK? DA3OK? SetDAsTemp SetDA12a3NoCh SetDA12a3NCh DA2aLess1OK? SetDA1Valid SetDA2bValid SetDA1Temp SetDA2bTemp SetDA3Temp SetDA2aEcho ClrDAsOK ClrDA3OK SetDA12NoCh SetDA13NoCh SetDA12Temp SetDA1NoCh SetDA2aNoCh ClrDA1Bad ClrDA2aBad SetDA2bNoCh SetDA3NoCh SetDA1Bad SetDA2aBad SetDA2bBad SetDA3Bad SetDAsNoCh ClrDA1IsStat DA2bIsEdL? SetDA2bIsEdL ClrDA2bIsEdL ClrDA2bNoCh SetDA2aTemp MENoP&FixDA1 ClrDA1OK ClrDA2aOK ClrDA2bOK ClrDA2OK
282 282 275 275 275 276 276 275 275 275 275 275 275 276 275 275 276 276 275 276 276 276 276 276 276 276 276 276 276 276 273 276 276 276 276 275 275 275 275 275
2C2AA 2EF59
Addr. 2EE91 2EE93 2EE94 2EEA0 2EEA5 2EEA6 2EEA7 2EEAB 2EEAC 2EEAE 2EEAF 2EEB0 2EEB1 2EEB2 2EEB3 2EEB4 2EEB5 2EEB7 2EEBB 2EEBC 2EEBD 2EEBE 2EEBF 2EEC0 2EEC1 2EEC2 2EEC3 2EEC4 2EEC5 2EEC6 2EEC7 2EEC8 2EEC9 2EECA 2EECB 2EECC 2EECD 2EECE 2EECF 2EED0 2EED1 2EED2 2EED3 2EED4 2EED5 2EED6 2EED7 2EED7 Name SetDA2Valid SetDA2NoCh SetDA23NoCh SetDA3ValidF SetDA2bTempF DA2bTemp? ClrDA2bTemp DA1IsStatus? SetDA1IsStat SetNoRollDA2 ClrNoRollDA2 DA1Bad? DA2aBad? DA2bBad? ClrDA2bBad DA3Bad? ClrDA3Bad DA2bNoCh? SENDLIST GETNAME DOFINISH DOPKT GetIOPAR DOOPENIO DOBAUD DOPARITY DOTRANSIO DOKERRM DOBUFLEN DOSBRK DOSRECV FLUSHRSBUF CLOSEUART docr DOCR DOPRLCD DODELAY SetEcma94 TOD DATE DDAYS DATE+DAYS TIMESTR Clr8 Clr8-15 HBUFF_X_Y SysTime CLKTICKS Page 275 276 276 275 275 275 276 276 276 276 276 276 276 276 276 276 276 180 180 180 180 181 180 180 180 180 180 180 180 180 181 181 172 173 173 173 49, 173 277 277 279 173 173 Addr. 2EED9 2EEDA 2EEDB 2EEDC 2EEDD 2EEDE 2EEDF 2EEE0 2EEE1 2EEE2 2EEE3 2EEE4 2EEE5 2EEE6 2EEE7 2EEE8 2EEE9 2EEEA 2EEEB 2EEEC 2EEED 2EEEE 2EEEF 2EEF0 2EEF1 2EEF2 2EEF3 2EEF4 2EEF5 2EEF6 2EEF7 2EEF8 2EEF9 2EEFA 2EEFB 2EEFC 2EEFD 2EEFE 2EEFF 2EF01 2EF02 2EF03 2EF04 2EF05 2EF06 2EF07 2EF26 2EF59 Name SYMBNUMSOLVE STATCLST STATSADD% STATN STATSMAX STATMEAN STATSMIN STATSTDEV STATTOT STATVAR EchoChrKey Echo$Key EditLevel1 InitEd&Modes InitEdLine InitEdModes EditString CURSOR_END? EDITLINE$ EDITPARTS NoEditLine? APPprompt1! AUTOSCALE PromptIdUtil PUTSCALE PUTINDEP PUTINDEPLIST PUTRES GETPTYPE PUTPTYPE VSCALE HSCALE DOERASE CROSS_HAIRS CROSS_OFF MENUOFF MENUOFF? CURRENTMARK? DispCoord1 DOPX>C DOC>PX DOLCD> DO>LCD DOCLLCD CKPICT nmetasyms SYMSHOW MENP&FixDA12
569
Page 66 66 66 66 66 66 66 66 66 302 311 314 303, 314 314 310 300 300 300 318 48 318 317 317 317 317 317
273
570
Addr. 2EF5A 2EF5E 2EF5F 2EF60 2EF61 2EF62 2EF66 2EF67 2EF68 2EF69 2EF6A 2EF6B 2EF6C 2EF6D 2EF6E 2EF6F 2EF70 2EF71 2EF72 2EF73 2EF74 2EF75 2EF76 2EF77 2EF78 2EF79 2EF7A 2EF7B 2EF7C 2EF7D 2EF7E 2EF7F 2EF80 2EF81 2EF82 2EF83 2EF84 2EF85 2EF86 2EF87 2EF88 2EF8A 2EF8B 2EF8C 2EF8D 2EF8E 2EF8F 2EF90 Name apndvarlst BlankDA1 InputLine DOGRAPHIC WINDOW# palparse SysMenuCheck SysDisplay ClrDouseAlm EvalParsed Parse.1 Parse.2 AtUserStack GetLastEdit ParseFail DispBadToken ParseFail2 DispBadToken2 CacheStack ?Space/Go> CMD_PLUS AddTrailingSpace AddLeadingSpace CMD_PAGEL CMD_PAGER CMD_PAGEU CMD_PAGED CMD_BAK CMD_NXT CMD_DEB_LINE CMD_END_LINE CMD_UP CMD_DOWN CMD_DROP CMD_DEL CMD_STO_DEBUT CMD_STO_FIN RCL_CMD_DEB RCL_CMD_FIN RCL_CMD_POS CMD_CUT CMD_COPY STO_CURS_POS STO_CURS_POS2 STO_CURS_POS3 STO_CURS_POS4 STO_CURS_POS_VIS CAL_CURS_POS_VIS Page 73 277 212 318 281 50 292 274 Addr. 2EF91 2EF92 2EF93 2EF94 2EF95 2EF96 2EF97 2EF98 2EF99 2EF9A 2EF9F 2EFA0 2EFA1 2EFA2 2EFA3 2EFA4 2EFA5 2EFA6 2EFA7 2EFA8 2EFAA 2EFAC 2EFAD 2EFAE 2EFAF 2EFB0 2EFB1 2EFB2 2EFB3 2EFB4 2EFB5 2EFB6 2EFB7 2EFB8 2EFB9 2EFBA 2EFBC 2EFBD 2EFBE 2EFBF 2EFC0 2EFC1 2EFC2 2EFC3 2EFC4 2EFC5 2EFC6 2EFC7
197 51 51
311 301 312 312 305 305 305 305 305 305 305 305 305 305 302 302 306 306 306 306 300 306 306 304 304 304 304 304 301
2EF5A 2F162
Addr. 2EFC8 2EFC9 2EFCA 2EFCB 2EFCC 2EFCD 2EFCE 2EFCF 2EFDB 2EFEC 2F002 2F003 2F004 2F007 2F008 2F019 2F031 2F034 2F05E 2F062 2F063 2F064 2F066 2F073 2F075 2F076 2F07A 2F07B 2F07C 2F07D 2F07E 2F07F 2F080 2F081 2F082 2F083 2F085 2F086 2F087 2F088 2F089 2F08A 2F08B 2F08C 2F08D 2F08E 2F08F 2F090 Name bit%#+ bit#%+ HXS>% %># HXS==HXS HXS>HXS HXS>=HXS HXS<HXS GROB+ symbn Ticks>TOD Ticks>Date Ticks>Rpt getxpos getypos UNIT>$ TURNMENUON TURNMENUOFF SaveLastEdit StoIOPAR StoPRTPAR Sys@ STOAPPLDATA SWAPcompSWAP InitSysUI puretemp? UM>U U>nbr UM#? UM% UM%CH UM%T UM* UM+ UMUM/ UM<=? UM<? UM=? UM>=? UM>? UMABS UMCHS UMCONV UMCOS UMMAX UMMIN UMSI Page 57 57 31 56 58 59 59 59 90 173 173 173 Addr. 2F091 2F092 2F093 2F094 2F095 2F096 2F098 2F099 2F09A 2F0A1 2F0AC 2F0BC 2F0C5 2F0D4 2F0D5 2F0DB 2F0E6 2F0E7 2F0E8 2F0EC 2F0EE 2F0EF 2F0FE 2F0FF 2F100 2F105 2F106 2F107 2F108 2F109 2F10A 2F10D 2F10E 2F110 2F113 2F11C 2F13C 2F13D 2F13F 2F142 2F153 2F154 2F155 2F158 2F15A 2F15B 2F15E 2F162 Name UMSIN UMSQ UMSQRT UMTAN UMU> UMXROOT Unbr>U U>NCQ TempConv RESETDEPTH PURGALARM% PRINT PLOTPREP ILnot? NEWINDEP MAKEPICT# KERMOPEN InitIOEnv INDEPVAR ICMPDRPRTDRP HXS#HXS HXS<=HXS GETXMAX GETXMIN GETYMIN GDISPCENTER GETINDEP GETPMIN&MAX GETRHS GETXPOS GetRes GETRES GETYMAX FINDVARS FNDALARM{} Echo$NoChr00 DoOldMatrix CK#DRAWLINE#3 DoNewMatrix CLKADJ* input$ input{} THISCHAR CHOOSE_INIT CLEARMENU Clr16 CHECKPICT
571
Page 83 83 83 83 82 83 82 82 82 107 174
199 91
572
Addr. 2F163 2F16D 2F177 2F178 2F179 2F17A 2F17E 2F180 2F190 2F191 2F192 2F193 2F194 2F195 2F196 2F197 2F198 2F199 2F19A 2F19B 2F19E 2F19F 2F1A1 2F1A3 2F1A5 2F1A7 2F1A8 2F1A9 2F1AB 2F1AC 2F1AD 2F1AE 2F1AF 2F1BF 2F1C6 2F205 2F215 2F216 2F217 2F218 2F219 2F21A 2F21B 2F21C 2F21D 2F21E 2F21F 2F222 Name CHECKPVARS Blank$ AllowPrlcdCl ALARMS@ AdjEdModes APPprompt2 2HXSLIST? 1REV DcompWidth@ !DcompWidth DoNewEqw UobROT CMD_PLUS2 CMD_PLUS3 RCL_CMD RCL_CMD2 STO_CMD_MODE RCL_CMD_MODE ViewLevel1 OngoingText? DispCommandLine ?DispCommandLine ErrorHandled?
SysErrorTrapAction
22 30 51 51 77 301 302 300 300 301 301 310 312, 274 312, 274
AskQuestion CHARSEDIT EditFont EDITF Date>hxs13 StrEdit CharEdit ObEdit AlgObEdit Decomp%Short DROP3PICK laMGET0 CircleB CircleG1 CircleG2 CircleW CircleXor Dither ToGray Lift ViewObject ViewStrObject ViewGrobObject #1+ROT
282 50
173
2F163 2F365
Addr. 2F2F0 2F2F1 2F2F2 2F2F3 2F2F4 2F2F5 2F2F6 2F2F7 2F2F8 2F2F9 2F2FA 2F2FB 2F2FC 2F2FF 2F300 2F312 2F313 2F314 2F315 2F316 2F318 2F319 2F31A 2F31B 2F31C 2F31D 2F31E 2F31F 2F320 2F321 2F324 2F325 2F326 2F327 2F328 2F329 2F32A 2F32B 2F32C 2F32D 2F32E 2F32F 2F330 2F331 2F332 2F333 2F334 2F335 Name DO<Del DO>Del FindStrInCmd GET.W-> GET.W<PUT_FONTE GET_CUR_FONT.EXT PUT_STYLE EXEC_CMD DODEL.L CMD_COPY.SBR EVAL.SELECTION
REPLACEALLNOSCREEN
573
Page 303 303 308 308 308 313 312 313 309 303 307 309 309 274 Addr. 2F336 2F337 2F338 2F339 2F33A 2F33B 2F33C 2F33D 2F33E 2F33F 2F340 2F341 2F342 2F343 2F344 2F345 2F346 2F347 2F348 2F349 2F34A 2F34B 2F34C 2F34D 2F34E 2F34F 2F350 2F351 2F352 2F353 2F354 2F355 2F356 2F357 2F358 2F359 2F35A 2F35B 2F35C 2F35D 2F35E 2F35F 2F360 2F361 2F362 2F363 2F364 2F365 Name FindNext FixRRP GetChkPRTPAR GetEqN GetKermPkt# GETKP getmatchtok GETPARAM GETSCALE GETSERIAL GETYPOS GraphicExit GROB+# IncrLAMPKNO InputLAttn InputLEnter IOCheckReal JUMPBOT JUMPLEFT JUMPRIGHT JUMPTOP KDispRow2 KDispStatus2 KINVISLF KVIS KVISLF 'LamKPSto LASTPT? LEFTCOL LINECHANGE List MAKEPVARS metatail newBASE NEWMARK NEXTRRPOB NEXTSTEP NUMSOLVE OB>BAKcode OpenIOPrt PLOTERR PlotOneMore? PREMARKON PrintGrob PRINTxNLF PtoR PUTSERIAL PUTXMAX Page
318
51 316 317
91
OpenIO DispILPrompt OpenUartClr OpenUart?Clr RCLALARM% !#1+IF<dim-1 !#1-IF>0 1GETLAMSWP1+ ACK_INIT APNDCRLF BlankDA2 BlankDA2a BOTROW BUILDKPACKET C%># CHECKHEIGHT CkChr00 CKGROBFITS ClrServMode CMDSTO convertbase CROSSMARKON Date>d$ DECODE DISPCOORD2 DRAWBOX# drax DROPDEADTRUE DropSysErr$ ENCODE ENCODE1PKT EQCURSOR? EXCHINITPK Extobcode FcnUtilEnd
174
279
316 78
316
574
Addr. 2F366 2F367 2F368 2F369 2F36A 2F36B 2F36C 2F36D 2F36E 2F36F 2F370 2F371 2F372 2F373 2F374 2F375 2F376 2F377 2F378 2F379 2F37A 2F37B 2F37C 2F37D 2F37E 2F37F 2F380 2F381 2F382 2F383 2F384 2F385 2F386 2F387 2F388 2F389 2F38A 2F38B 2F38C 2F38D 2F38E 2F38F 2F390 2F3A9 2F3AA 2F3B3 2F458 2F937 Name PUTXMIN PUTYMAX PUTYMIN RECORDX&YC% REMAP RIGHTCOL Rows8-15 SCROLLDOWN SCROLLLEFT SCROLLRIGHT SCROLLUP SENDACK SENDEOT SENDERROR SENDNAK SENDNULLACK SENDPKT SendSetup SetCursor SetDA123NoCh SetDA2OKTemp SetIOPARErr SETLOOPENV SetServMode SORTASLOW STOALM SysSTO TOD>t$ TOGGLELINE#3 TOP16 TOP8 TOPROW TRPACKETFAIL UARTBUFLEN VerifyTOD VERSTRING WINDOWBOT? WINDOWLEFT? WINDOWRIGHT? WINDOWTOP? xnsgeneral xsngeneral xssgeneral STOALLF STOALLF2 AsnKey SETIVLERR %0 Page 316 317 317 Addr. 2F94C 2F961 2F976 2F98B 2F9A0 2F9B5 2F9CA 2F9DF 2F9F4 2FA09 2FA1E 2FA33 2FA48 2FA5D 2FA72 2FA87 2FA9C 2FAB1 2FAC6 2FADB 2FAF5 2FB0A 2FB1F 2FB34 2FB49 2FB63 2FB7D 2FB97 2FBB1 2FBCB 2FBE5 2FBFF 2FC19 2FC7D 2FC92 2FCA7 2FCBC 2FCD1 2FCE6 2FCFB 2FD10 2FD25 2FD3A 2FD4F 2FD64 2FD79 2FD8E 2FDA3
172 181 280 280 280 280 77 77 176 176 208 158 28
2F366 30663
Addr. 2FDB8 2FDCD 2FDE2 2FDF7 2FE0C 2FE21 2FE36 2FE4B 2FE60 2FE75 2FE8A 2FE9F 2FEB4 2FEC9 2FEDE 2FF9B 2FFAC 2FFBD 2FFDB 2FFEF 3000D 30017 30040 3005E 30077 3008B 300B3 300C7 300E0 300F9 30112 30123 30145 30156 30173 30184 301A6 301BA 301CE 301E2 301F6 3020A 3025C 3026A 30275 30280 3028B 30296 Name %21 %22 %23 %24 %25 %26 %27 %28 %29 %30 %31 %32 %33 %34 %35 %%>% %>%% SETDEG SETRAD SETGRAD %D>R PI/180 %R>D %>HMS %HMS> %HMS+ %HMS%%MAX %MAX %MIN %%0< %0< %%0= %0= %%0> %0> %%0<> %0<> %%0>= %0>= %%0<= %%< %< %%> %> %%>= %>= %%<= Page 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 31 31 178 178 178 33 30 33 172 172 172 172 34 33 33 35 35 35 35 35 35 35 35, 135 35 35 35 35 35 35 35 35 35 35 Addr. 302A1 302AC 302B7 302C2 302DB 302EB 302FB 3030B 3031B 3032E 3033A 30346 3035F 3036C 30385 303A7 303B4 303D3 303E9 303F6 3041B 3044A 3045B 3046C 3047D 30489 3049A 304D5 304E1 304F4 30507 3051A 3052D 30546 30559 3056C 3057F 30592 305A5 305C7 305DA 305F1 30602 30612 3062B 30642 30653 30663 Name %<= %= %<> %SGN %%ABS %ABS %%CHS %CHS %MANTISSA %%+ %%%>%%%+ %%%* %* %OF %%/ %/ %T %CH %% % %NROOT %%1/ %>%%1/ %1/ %%SQRT %>%%SQRT %SQRT %%EXP %EXP %EXPM1 %%LN %LN %LOG %%LNP1 %LNP1 %ALOG %MOD %SIN %%SIN %%SINDEG %%SINRAD %COS %%COS %%COSDEG %%COSRAD
575
Page 35 35 35 32 34 32 34 32 32 33 33 31 31 31 33 31 33 34 32 33 33 34 32 33 34 32 32 34 32 32 34 32 32 34 32 32 34 32 32 32 32 34 34 34 32 34 34 34
576
Addr. 3067C 30693 306AC 306C3 306DC 306F3 3070C 30723 3073A 30746 30757 30767 30780 30799 307B2 307C5 307D8 307EB 307FE 30811 30824 30837 3084D 30860 30912 30938 3094B 3095E 30971 30984 30984 309AD 30A2F 30A66 30AAF 30BEA 30CC7 30CEB 30DC8 30E47 30E5B 30E79 30E83 30EA6 30EB0 30EDD 30F14 30F28 Name %TAN %%TANRAD %ASIN %%ASINRAD %ACOS %%ACOSRAD %ATAN %ANGLE %%ANGLE %>%%ANGLE %%ANGLEDEG %%ANGLERAD %%SINH %SINH %%COSH %COSH %TANH %ASINH %ACOSH %ATANH %EXPONENT %NFACT %COMB %PERM %%H>HMS %FP %IP %CEIL %FLOOR %%FLOOR %%INT %RAN %RANDOMIZE DORANDOMIZE %FACT %%7 %%12 %%60 %%.4 2%>%% 2%%>% %REC>%POL %%R>P %POL>%REC %%P>R %SPH>%REC RNDXY TRCXY Page 32 34 32 34 32 34 32 32 34 32 34 34 34 32 34 32 32 32 32 32 32 33 33 33 172 32 32 32 32 34 34 33 33 33 33 30 30 30 30 31 31 33 34 33 34 33 32 32 Addr. 31066 31123 31219 3125D 313D3 314CA 314E4 31518 31532 31568 315BB 317EE 31994 319C1 33107 33107 33107 33111 33111 33111 33111 3311B 3311B 3311B 33125 33125 33125 3312F 3312F 3312F 33139 33139 33139 33143 33143 33143 33143 3314D 3314D 3314D 33157 33157 33157 33161 33161 33161 3316B 3316B
10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
3067C 3330F
Addr. 3316B 33175 33175 33175 3317F 3317F 3317F 33189 33189 33189 33193 33193 33193 33193 3319D 3319D 3319D 331A7 331A7 331A7 331B1 331B1 331B1 331B1 331BB 331BB 331C5 331C5 331CF 331CF 331D9 331D9 331E3 331E3 331ED 331ED 331F7 331F7 33201 33201 3320B 3320B 3320B 33215 33215 3321F 3321F 33229 Name TEN hxs BINT11 ELEVEN grob TWELVE BINT12 TAGGED BINT13 THIRTEEN FOURTEEN BINT14 EXT unitob FIFTEEN rompointer BINT15 SIXTEEN REALOB BINT16 2REAL REALREAL SEVENTEEN BINT17 BINT18 EIGHTEEN BINT19 NINETEEN BINT20 TWENTY TWENTYONE BINT21 BINT22 TWENTYTWO BINT23 TWENTYTHREE BINT24 TWENTYFOUR BINT25 TWENTYFIVE TWENTYSIX REALSYM BINT26 TWENTYSEVEN BINT27 BINT28 TWENTYEIGHT TWENTYNINE Page 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 Addr. 33229 33233 33233 33233 3323D 3323D 33247 33247 33251 33251 3325B 3325B 33265 33265 3326F 3326F 33279 33279 33283 33283 3328D 3328D 33297 33297 33297 332A1 332A1 332AB 332AB 332B5 332B5 332BF 332BF 332C9 332C9 332D3 332D3 332DD 332DD 332E7 332E7 332F1 332F1 332FB 332FB 33305 33305 3330F Name BINT29 THIRTY REALEXT BINT30 THIRTYONE BINT31 BINT32 THIRTYTWO THIRTYTHREE BINT33 THIRTYFOUR BINT34 THIRTYFIVE BINT35 TTHIRTYSIX BINT36 THIRTYSEVEN BINT37 THIRTYEIGHT BINT38 BINT39 THIRTYNINE FORTY FOURTY BINT40 BINT41 FORTYONE FORTYTWO BINT42 FORTYTHREE BINT43 BINT44 FORTYFOUR FORTYFIVE BINT45 BINT46 FORTYSIX FORTYSEVEN BINT47 FORTYEIGHT BINT48 FORTYNINE BINT49 FIFTY BINT50 BINT51 FIFTYONE FIFTYTWO
577
Page 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 13 13 13 13 13
578
Addr. 3330F 33319 33319 33319 33319 33323 33323 3332D 3332D 33337 33337 33341 33341 3334B 3334B 33355 33355 3335F 3335F 33369 33369 33373 33373 3337D 3337D 33387 33387 33387 33387 33391 33391 3339B 3339B 333A5 333A5 333AF 333AF 333B9 333B9 333C3 333C3 333CD 333D7 333E1 333EB 333EB 333F5 333FF Name BINT52 STRLIST THREEFIVE FIFTYTHREE BINT53 FIFTYFOUR BINT54 BINT55 FIFTYFIVE BINT56 FIFTYSIX BINT57 FIFTYSEVEN FIFTYEIGHT BINT58 FIFTYNINE BINT59 BINT60 SIXTY BINT61 SIXTYONE BINT62 SIXTYTWO SIXTYTHREE BINT63 YHI SIXTYFOUR BINT64 BINT40h ARRYREAL BINT65 FOURTWO BINT66 BINT67 FOURTHREE BINT68 SIXTYEIGHT FOURFIVE BINT69 BINT70 SEVENTY BINT71 BINT72 BINT73 BINT74 SEVENTYFOUR BINT75 BINT76 Page 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 14 14 14 14 14 14 14 14 14 Addr. 33409 33413 3341D 3341D 33427 33427 33431 33431 33431 3343B 3343B 33445 33445 3344F 3344F 33459 33459 33463 33463 3346D 3346D 33477 33481 3348B 33495 33495 3349F 334A9 334B3 334BD 334C7 334C7 334D1 334D1 334DB 334E5 334EF 334EF 334F9 33503 3350D 33517 33521 3352B 33535 3353F 33549 33553
3330F 338A5
Addr. 3355D 3355D 33567 33571 3357B 33585 33585 3358F 3358F 33599 335A3 335AD 335B7 335C1 335CB 335CB 335D5 335DF 335E9 335F3 335FD 33607 33607 33611 3361B 3361B 3361B 3361B 33625 33625 33625 33625 3362F 33639 33643 3364D 33657 33661 3366B 33675 3367F 33689 33693 3369D 336A7 336B1 336BB 336C5 Name char BINT111 BINT112 BINT113 BINT114 BINT115 BINT_115d BINT116 BINT_116d BINT117 BINT118 BINT119 BINT120 BINT121 BINT122 BINT_122d BINT123 BINT124 BINT125 BINT126 BINT127 BINT128 BINT80h BINT129 BINT130 BINT130d BINT_130d XHI-1 XHI BINT_131d BINT131d BINT131 #8F SYMBREAL #92 #9A SYMBUNIT backup SYMOB SYMREAL #A2 #A5 SYMID SYMLAM #A9 SYMSYM SYMEXT HXSREAL Page 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 Addr. 336CF 336D9 336E3 336ED 336F7 33701 3370B 33715 3371F 33729 33733 3373D 33747 33751 3375B 33765 3376F 33779 33783 3378D 33797 337A1 337AB 337B5 337BF 337C9 337D3 337DD 337E7 337F1 337FB 33805 3380F 33819 33823 3382D 33837 33841 3384B 33855 3385F 33869 33873 3387D 33887 33891 3389B 338A5 Name 2HXS BINTC0h 2GROB TAGGEDANY EXTREAL EXTSYM 2EXT ROMPANY BINT253 BINT255d REALOBOB #_102 #SyntaxErr BINT_263d #110 3REAL Err#Kill Err#NoLstStk #NoRoomForSt #132 REALSTRSTR #134 #135 #136 #137 #138 #139 #13A #13B #13D #13E INTEGER337 #200 Err#NoLstArg STRREALREAL ARRYREALREAL #412 #444 ARRYLISTREAL #452 #510 #511 #550 IDREALOB IDLISTOB #700 #861 #862
579
Page 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 18 18 18 18 18 18 19 19 19 19
580
Addr. 338AF 338B9 338C3 338CD 338D7 338E1 338EB 338F5 338FF 33909 33913 3391D 33927 33931 3393B 33945 3394F 33959 33963 3396D 33977 33981 3398B 33995 3399F 339A9 339BE 339D3 339E8 339FD 33A12 33A27 33A3C 33A51 33A5D 33A6B 33A77 33A83 33A8F 33A9B 33AA7 33AB3 33ABF 33ACB 33AD7 33AE3 33AEF 33AFB Name #865 #86E ATTNERR #A11 #A12 #A1A #A21 #A22 #A2A #A61 #A62 #A65 #A6E #AA1 #AA2 #AAA #C06 #C07 #C08 Connecting #C0B #CAlarmErr EXTOBOB #EXITERR MINUSONE %e %.5 %-.5 %10 %180 %200 %360 %400 tok] lbrac tok[ tok{ tok} toksharp tokuscore tok$ tok& tokESC tok>> tok<< tokexponent tokanglesign tokSIGMA Page 19 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 21 28 28 28 28 29 29 29 29 45 45 44 45 45 45 45 45 44 45 44 44 45 45 Addr. 33B07 33B13 33B39 33B45 33B55 33B55 33B61 33B79 33B85 33B91 33B9D 33BA9 33BB5 33BC1 33BCD 33BD9 33BE5 33BF1 33BFD 33C09 33C15 33C21 33C2D 33C3F 33C4D 33C59 33C65 33C71 33C7D 33C89 33C95 33CA1 33CAD 33CB9 33D2B 33D32 33D39 33D40 33D47 33D4E 33D55 33D5C 33D63 33D6A 33D71 33D78 33D7F 33D86
338AF 34088
Addr. 33D8D 33D94 33D9B 33DA2 33DA9 33DB0 33DB7 33DBE 33DC5 33DCC 33DD3 33DDA 33DE1 33DE8 33DEF 33DF6 33DFD 33E04 33E0B 33E12 33E19 33E20 33E27 33E2E 33E35 33E3C 33E43 33E4A 33E51 33E58 33E5F 33E66 33E6D 33E74 33E7B 33E82 33E89 33E90 33E97 33E9E 33EA5 33EAC 33EB3 33EBA 33EC1 33EC8 33ECF 33ED6 Name CHR_4 CHR_5 CHR_6 CHR_7 CHR_8 CHR_9 CHR_: CHR_; CHR_< CHR_= CHR_> CHR_A CHR_B CHR_C CHR_D CHR_E CHR_F CHR_G CHR_H CHR_I CHR_J CHR_K CHR_L CHR_M CHR_N CHR_O CHR_P CHR_Q CHR_R CHR_S CHR_T CHR_U CHR_V CHR_W CHR_X CHR_Y CHR_Z CHR_a CHR_b CHR_c CHR_d CHR_e CHR_f CHR_g CHR_h CHR_i CHR_j CHR_k Page 41 41 41 41 41 41 41 41 41 41 41 41 41 41 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 Addr. 33EDD 33EE4 33EEB 33EF2 33EF9 33F00 33F07 33F0E 33F15 33F1C 33F23 33F2A 33F31 33F38 33F3F 33F46 33F4D 33F54 33F5B 33F62 33F69 33F70 33F77 33F7E 33F85 33F8C 33F93 33F9A 33FA1 33FA8 33FAF 33FB6 33FBD 33FC4 33FCB 33FD2 33FE2 33FF2 34002 34010 3401E 3402C 3403A 34048 34056 34064 34076 34088 Name CHR_l CHR_m CHR_n CHR_o CHR_p CHR_q CHR_r CHR_s CHR_t CHR_u CHR_v CHR_w CHR_x CHR_y CHR_z CHR_-> CHR_<< CHR_>> CHR_Angle CHR_Deriv CHR_Integral CHR_LeftPar CHR_Newline CHR_Pi CHR_RightPar CHR_Sigma CHR_Space CHR_UndScore CHR_[ CHR_] CHR_{ CHR_} CHR_<= CHR_>= CHR_<> $_R<< $_R<Z $_XYZ $_<<>> $_{} $_[] $_'' $_:: $_LRParens $_2DQ $_ECHO $_EXIT $_Undefined
581
Page 42 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 41 41 43 41 43 41 42 42 42 43 43 43 43 43 44 44 44 44 44 44 44 44 44 44 44 44 44
582
Addr. 340A4 340B4 34144 3416E 3416E 34195 34195 341A8 341A8 341BA 341BA 341BA 341D2 341D2 341D7 341D7 341DC 341E8 341F4 3421A 3421A 3422B 3422B 3422B 3423A 3423A 3423A 34257 34257 34281 34281 342BB 342BB 342EA 342EA 3432C 34331 34331 34331 34357 34357 3438D 3438D 343BD 343BD 343BD 343CF 343CF Name $_RAD $_GRAD RSWAP XYZ>YXZ ROTSWAP XYZ>ZY ROTDROPSWAP XYZ>YZ ROTDROP UNROTSWAP XYZ>ZYX SWAPROT 3DROP XYZ> XYZW> 4DROP 5DROP 6DROP 7DROP SWAPDROP XY>Y 3UNROLL UNROT XYZ>ZXY XYZW>YZWX FOURROLL 4ROLL 5ROLL FIVEROLL 6ROLL SIXROLL EIGHTROLL 8ROLL SEVENROLL 7ROLL DUP4UNROLL FOURUNROLL 4UNROLL XYZW>WXYZ 5UNROLL FIVEUNROLL SIXUNROLL 6UNROLL XYZ>Z UNROT2DROP ROTROT2DROP 4UNROLL3DROP XYZW>W Page 44 44 129 107 107 107 107 107 107 107, 108 107, 108 107, 108 106 106 106 106 106 106 106 107 107 108, 108 108, 108 108, 108 107 107 107 108 108 108 108 108 108 108 108 106 108 108 108 109 109 109 109 107, 108 107, 108 107, 108 108 108 Addr. 343E1 343F3 34405 34417 34431 34436 34451 34465 34474 34485 3448A 3448F 34494 34499 3449E 344A3 344A8 344CB 344DD 344F2 34504 34517 3452B 3453D 34552 34564 3457F 3457F 34611 34616 3461B 34620 34625 3462A 3462F 34634 34639 3463E 34643 34648 3464D 34652 34657 3465C 34661 34666 3466B 34670
340A4 350C3
Addr. 34675 3467A 3467F 34684 34689 3468E 34693 34698 3469D 346A2 346A7 346AC 346B1 346B6 346BB 346C0 346C5 346CA 346CF 346D4 346D9 346DE 346E3 346E8 346ED 346F2 346F7 346FC 34701 34706 3470B 34710 34715 3471A 34797 347AB 3483E 348D2 348E2 348F7 348FC 3490E 34920 34939 3494E 3495D 34976 34985 Name 11PUTLAM 11GETLAM 12PUTLAM 12GETLAM 13PUTLAM 13GETLAM 14PUTLAM 14GETLAM 15PUTLAM 15GETLAM 16PUTLAM 16GETLAM 17PUTLAM 17GETLAM 18PUTLAM 18GETLAM 19PUTLAM 19GETLAM 20PUTLAM 20GETLAM 21PUTLAM 21GETLAM 22PUTLAM 22GETLAM 23PUTLAM 23GETLAM 24PUTLAM 24GETLAM 25PUTLAM 25GETLAM 26PUTLAM 26GETLAM 27PUTLAM 27GETLAM DUP4PUTLAM DUPTEMPENV GETLAMPAIR #=case OVER#=case DUP#0=case #0=case DUP#0=csedrp EQcasedrop #=casedrop NOTcasedrop casedrop NOTcase2drop case2drop Page 118 118 118 118 118 118 118 118 118 118 118 118 118 118 118 118 118 118 118 118 119 118 119 118 119 118 119 118 119 118 119 118 119 118 119 119 119 141 141 141 141 141 144 141 139 139 139 139 Addr. 34999 349B1 349C6 349D6 349EA 349F9 34A13 34A22 34A31 34A46 34A59 34A7E 34A92 34AA1 34AAD 34ABE 34AD3 34AF4 34B3E 34B4F 34BAB 34BBB 34BD8 34BEF 34C82 34D00 34D51 34D58 34EBE 34FA6 34FC0 34FCD 34FE6 35018 35037 3503C 35046 3504B 35082 35087 35091 35096 350A0 350A5 350AF 350B4 350BE 350C3 Name EQcase caseDROP NOTcaseDROP case2DROP NOTcase2DROP case NOTcase IT GOTO ?GOTO NOT?GOTO #0=?SEMI NOT?SEMI ?SEMI SEMILOOP ITE_DROP COLA_EVAL COLARPITE ITE 2'RCOLARPITE 2@REVAL 3@REVAL NOT?DROP ticR EXPAND CACHE SAVELAM SAVESTACK DUMP undo DUPROM-WORD? ROM-WORD? Rom-Word? 2SWAP DUPTYPECHAR? TYPECHAR? DUPTYPEIDNT? TYPEIDNT? DUPTYPEFLASHPTR? TYPEFLASHPTR? DUPTYPEZINT? TYPEZINT? DUPTYPELNGREAL? TYPELNGREAL? DUPTYPELNGCMP? TYPELNGCMP? DUPTYPEFONT? TYPEFONT?
583
Page 144 139 139 140 140 139 139 138 129 129 129 141 137 137 151 139 131 138 139 138 128 128 138 128 48, 57 117 117 117 117 100 100 107 200 200 199 199 200 200 200 200 200 200 200 200 200 200
584
Addr. 350CD 350D2 350DC 350E1 350EB 350F0 350F5 350FA 350FF 35109 35109 3510E 35118 35118 3511D 35127 3512C 35136 35136 3513B 35145 3514A 35154 35159 35163 35168 35172 35172 35177 35181 35186 35190 35190 35195 3519F 351A4 351AE 351B3 351FA 35268 35280 35289 35292 352AD 352BD 352E0 352F1 352FE Name DUPTYPEAPLET? TYPEAPLET? DUPTYPELAM? TYPELAM? DUPTYPEBINT? TYPEBINT? #37258 DUPTYPEHSTR? TYPEHSTR? DTYPECSTR? DUPTYPECSTR? TYPECSTR? DTYPEREAL? DUPTYPEREAL? TYPEREAL? DUPTYPECMP? TYPECMP? DUPTYPEARRY? DTYPEARRY? TYPEARRY? DUPTYPEROMP? TYPEROMP? DUPTYPERRP? TYPERRP? DUPTYPESYMB? TYPESYMB? DTYPECOL? DUPTYPECOL? TYPECOL? DUPTYPEGROB? TYPEGROB? DUPTYPELIST? DTYPELIST? TYPELIST? DUPTYPETAG? TYPETAGGED? DUPTYPEEXT? TYPEEXT? OverWrF/TLp OVER#= DROPTRUE DROPFALSE TYPERARRY? TYPECARRY? DUP#0= #3= #2= #1= Page 200 200 199 199 200 200 21 199 199 199 199 199 199 199 199 199 199 199 199 199 200 200 200 200 199 199 200 200 200 199 199 199 199 199 200 200 200 200 25 136 136 199 199 25 25 25 25 Addr. 3530D 3531C 3532B 3533C 35346 35369 353CD 353EB 353F7 354CB 354CB 35511 3551D 35552 3558C 355A5 355D0 355D5 355DA 355DF 355FD 35602 35607 3560C 35611 35616 3561B 35620 3562A 35675 3569B 356B8 356D5 35703 3570C 35715 3571E 35733 3574D 3574D 3574D 3576E 3579C 357BB 357CE 357E2 357FC 3581F
350CD 36043
Addr. 35830 35841 35857 35872 35872 35872 3588B 358A7 358C2 358DC 358F8 35912 3592B 3592B 35956 3596D 3597F 35994 359AD 359C8 359E3 359F7 35A10 35A29 35A56 35A5B 35A88 35AAB 35AE2 35B32 35B46 35B82 35B96 35BAF 35BC3 35BD7 35BEB 35BFF 35C18 35C2C 35C40 35C54 35C68 35C7C 35C90 35CA4 35CB8 35CCC Name #1+DUP #1-DUP SWAPDROPDUP SWAPDROPSWAP XYZ>ZX UNROTDROP 4ROLLDROP 5ROLLDROP 2DUP#< 2DUP#= 2DUP#> DUP#1+ SWAP#1+ SWP1+ DUP#1DROPONE RDROPCOLA COLACOLA COLAcase COLANOTcase ORcase REQcase REQcasedrop SAFESTO DUPSAFE@ SAFE@ ?>ROMPTR ?ROMPTR> MACRODCMP 2DROPFALSE PALPTRDCMP palrompdcmp #0=UNTIL INCOMPDROP NTHCOMPDROP APPEND_SPACE 7UNROLL RESOROMP %10* DUP@ DUPROMPTR@ #=ITE INNERDUP NOTAND TOTEMPSWAP ROT2DUP ROTAND ROTOVER Page 24 24 107 107, 108 107, 108 107, 108 107 108 25 25 25 24 24, 77 24, 77 24 21 129 131 140 140 139 144 144 167 166 166 100 100 136 55 151 71 69 49 109 100 31 166 100 141 71 136 171 107 136 107 Addr. 35CE0 35CF4 35D08 35D1C 35D30 35D30 35D44 35D58 35D6C 35D6C 35D80 35D94 35DA8 35DBC 35DDA 35DEE 35E07 35E07 35E20 35E20 35E39 35E4D 35E61 35E75 35E89 35EA2 35EB6 35ECA 35EDE 35EF2 35F06 35F1A 35F2E 35F42 35F56 35F6A 35F7E 35F97 35FB0 35FB0 35FC4 35FD8 35FF3 36007 3601B 3602F 36043 36043 Name DUPDUP OVERDUP COERCEDUP UNROTDUP 2DUPSWAP DUP3PICK 4UNROLLDUP NTHCOMDDUP OVERSWAP OVERUNROT ROLLSWAP NULL$SWAP SUB$SWAP %MAXorder ?SKIPSWAP 1ABNDSWAP ROT+SWAP ROT#+SWAP 4PICK#+SWAP 4PICK+SWAP #+SWAP #-SWAP #1+SWAP ZEROSWAP #1-1SWAP ONESWAP COERCESWAP %>%%SWAP %%*SWAP XYZ>ZTRUE 4ROLLSWAP 3PICKSWAP 4PICKSWAP 1GETSWAP ?SWAP !append$SWAP NOT?SWAPDROP ?SWAPDROP N+1DROP #1+NDROP ROLLDROP MDIMSDROP DUPROT DROPROT #1-ROT %%*ROT FOURROLLROT 4ROLLROT
585
Page 106 109 22 108 106, 106 106, 106 108 69 109, 109 109, 109 108 46 48 33 138 119 25 25 25 25 24 24 24 22 24 22 22 31 33 136 107 109 109 119 138 49 138 138 75, 106 75, 106 108 64 106 106 24 33 108 108
586
Addr. 36057 3606B 3607F 36093 360A7 360BB 360CF 360E3 360F7 3610B 3611F 36133 36147 3615B 3616F 36183 3619E 361B2 361C6 361DA 361DA 361EE 36202 36216 3622A 3623E 36252 36266 3627A 3628E 362A2 362A2 362B6 362CA 362DE 362F2 36306 3631A 3632E 36342 3635B 3636F 36383 3639C 363B5 363CE 363E2 363FB Name 4UNROLLROT DROPOVER EQOVER #+OVER #-OVER ZEROOVER UNROTOVER 4ROLLOVER 3PICKOVER 4PICKOVER DUPPICK DUPROLL OVER#2+UNROL 8UNROLL 10UNROLL OVERARSIZE 'ERRJMP caseERRJMP ?CARCOMP NEWLINE$&$ NEWLINE&$ #1-{}N TWO{}N THREE{}N DUPINCOMP SWAPINCOMP DUPNULL$? DUPNULLCOMP? DUPLENCOMP #1-SUB$ 1_#1-SUB$ 1_#1-SUB LAST$ #1+LAST$ DUP$>ID SWAP%>C% 'NOP ::NEVAL 2GETEVAL DROPRDROP SWAPCOLA XYZ>ZCOLA #0=?SKIP #1=?SKIP #=?SKIP ONE_EQ #>?SKIP COLASKIP Page 108 106 137 24 24 22 108 108 109 109 106 106 77 109 109 64 130 146 68 47 47 72 72 72 71 71 55 68 68 48 48 48 48 48 116 37 130 74 119 129 131 131 141 142 140 25 140 131 Addr. 3640F 36428 36441 3645A 3646E 36482 36496 364AF 364C8 364E1 364FF 36513 36518 3652C 36540 36540 36554 36554 36568 3657C 36590 365B3 365CC 365E5 365F9 3660D 36621 36635 3663A 3664E 36662 36676 36694 366A8 366BC 366D0 366E9 366FD 36711 36725 36739 36739 3674D 3674D 36761 36775 36789 3679D
36057 36F79
Addr. 367B1 367C5 367D9 367ED 36801 36815 36815 36829 3683D 36851 36851 36851 36865 36883 368B5 368C9 368E7 368FB 36914 3692D 36946 3695A 3696E 36982 36996 369AA 369BE 369D2 369E6 369FF 36A13 36A27 36A4A 36A63 36A77 36A8B 36AA4 36ABD 36AD6 36AEA 36AFE 36B12 36B12 36B26 36B3A 36B53 36B67 36B7B Name ROT#OVER#INDEX@#SWAPOVER#ROT#1+ #-+1 #1SWAP#1DROP#1#1-+ #+-1 $1-+ COLAITE ERROROUT SWAP2DUP RSKIP GROB!ZERODRP casedrptru NOTcaseTRUE ?SEMIDROP SWAPUnDROP SWAPUnNDROP DUP' SWAP' DROP' OVER' STO' TRUE' ONEFALSE' FALSE' #1+' 'R'R 'RRDROP ONECOLA dvarlsBIND 'LAMLNAMESTO 'xDEREQ DUPNULL{}? DUPZERO DUPONE SWAPONE ONEONE ONEDUP DUPTWO NOTcsdrpfls caseSIZEERR NcaseSIZEERR CKREAL Page 24 24 152 24 24 23 23 24 24 23 23 23 139 156 107 129 91 139 140 138 77 76 130 130 130 130 130 130 130 130 130 128 128 131 117 168 131 72 21 21 21 21 21 21 139 146 146 198 Addr. 36BAA 36BBE 36BD2 36BE6 36BFA 36C0E 36C22 36C36 36C4F 36C4F 36C68 36C7C 36C90 36C90 36CA4 36CB8 36CCC 36CE0 36CF4 36D08 36D21 36D3A 36D4E 36D62 36D76 36D8A 36D9E 36DB2 36DCB 36DDF 36DF3 36E07 36E43 36E57 36E6B 36E7F 36E93 36EA7 36EBB 36ED4 36EED 36F01 36F15 36F29 36F3D 36F51 36F65 36F79 Name NcaseTYPEERR 'x* 'xDER %%/>% UNCOERCE%% DUP%0= SWAP%%/ caseDrpBadKy caseDEADKEY caseDoBadKey GROBDIMw %%*UNROT XYZW>YWZX SWAP4ROLL 2DUP5ROLL SWAP3PICK 3PICK3PICK SWAP4PICK OVER5PICK EQUALcasedrp DUP#0=csDROP jEQcase ANDcase EQUALcase #<case #1=case #<>case #>2case #>case j%0=case REALcase dARRYcase dLISTcase EditExstCase ANDNOTcase EQUALNOTcase dIDNTNcase dREALNcase EQIT DUP#0=IT ANDITE EQITE #0=ITE #<ITE #>ITE DUP#0=ITE UserITE SysITE
587
Page 146 130 130 34 31 35 34 146 146 146 90 33 107 107 106 107 109 109 109 144 142 144 139 144 141 142 141 142 141 142 145 145 145 146 139 144 145 145 144 141 139 144 141 141 141 141 146 146
588
Addr. 36F8D 36FA6 36FBA 36FCE 36FCE 36FE2 36FF6 3700A 3701E 37032 37046 3705A 37073 37087 3709B 3709B 370AF 370C3 37104 37118 3712C 3714A 37186 371B3 371F9 3721C 37258 37287 37294 37305 37315 37328 3733A 3734A 3735C 3736E 37380 37394 373A8 374BE 3760D 37685 376B7 376C1 376EE 37702 37752 3776B Name top&Cr metaROTDUP ROTUntop& roll2top& rolltwotop& plDRPpZparg &$SWAP SWAPCKREF pZpargSWAPUn DROPNDROP 2OVER ?Ob>Seco Ob>Seco 2Ob>Seco ZEROISTOPSTO ExitAtLOOP RclHiddenVar WithHidden StoHiddenVar PuHiddenVar SaveVarRes SetHiddenRes RestVarRes Embedded? UStackDepth Sig?ErrJmp DupAndThen ZEROZERO #ZERO#ONE #ZERO#SEVEN #ONE#27 #TWO#ONE #TWO#TWO #TWO#FOUR #THREE#FOUR #FIVE#FOUR ZEROZEROZERO ZEROZEROONE ZEROZEROTWO SWAPDROPTRUE SubMetaOb SubMetaOb1 matchob? matchob?Lp POSCOMP nextpos #=POSCOMP EQUALPOSCOMP Page 76 76 76 76 88 49 171 88 75, 106 109 73 73 73 152 152 170 170 170 170 169 170 169 69 158 21 21 21 21 21 21 21 21 21 21 21 21 136 77 77 69 69 69 69 Addr. 37784 37798 377C5 377DE 37829 378FA 378FA 37906 37906 37AA5 37ABE 37AEB 37B04 37B54 37C06 37F48 37F7F 3805D 3807D 38093 380DB 38105 3816B 38195 381AB 38252 38266 38275 3831C 3851F 387AC 3880D 38837 3885C 38999 389B9 389D4 389EF 38A14 38A2F 38A54 38ABA 38B28 38B43 38BAE 38BBF 38C00 38C1B
475 469 457 474 471 459 21 16 465 472 462 461 465
458 455
467 282
36F8D 3A57C
Addr. 38C2C 38D2F 38D72 38D83 38D94 38DE1 38E01 38E21 38E41 38E61 38E81 38EA1 38EC1 38EE1 38F01 38F21 38F41 38F81 38FB5 38FD7 3900B 3905D 39078 39093 390AE 390C9 390E4 39104 39124 39144 39164 3918E 391AE 391D8 391F8 39218 39238 39277 39332 393CA 393EA 39405 39420 3943B 39456 39480 394AA 394C8 Name xEVAL> xNOEVAL> xSTRUCT> x<STRUCT xSTRUCT-> xASR xRL xRLB xRR xRRB xSL xSLB xSR xSRB xR>B xB>R xCONVERT xUVAL x>UNIT xUBASE xUFACT xTIME xDATE xTICKS xWSLOG xACKALL xACK xSETDATE xSETTIME xCLKADJ xSTOALARM xRCLALARM xFINDALARM xDELALARM xTSTR xDDAYS xDATE+ #B437D ?GETMSG xCRDIR xPATH xHOME xUPDIR xVARS xTVARS xBYTES xNEWOB INHARDROM? Page Addr. 394F1 3950C 39527 3955B 39576 39591 395AC 395F3 396A4 39705 39725 39745 39765 39785 397E5 39819 39839 39854 3989C 398B9 39976 39A07 39A6C 39AC7 39AE4 39B01 39B1E 39B3B 39B58 39C8B 39C9F 39CB3 39CD5 39CFC 39DE8 39E6B 39F49 3A097 3A12D 3A1C2 3A200 3A278 3A32B 3A390 3A3EE 3A442 3A4EF 3A57C Name xKILL xOFF xDOERR xERR0 xERRN xERRM xEVAL xIFTE xIFT xSYSEVAL xDISP xFREEZE xBEEP x>NUM xLAST xWAIT xCLLCD xKEY xCONT x= xNEG xABS xCONJ xPI xMAXR xMINR xCONSTANTe xi x+ SWAP>HCOMP $&ob ob&$ xNEGNEG xx* #A4 x/ x #4FF #304 rpnXROOT xXROOT xINV xARG xSIGN xSQRT xSQ xSIN
589
Page 463 465 457 458 458 458 458 462 462 473 457 460 454 465 463 475 455 463 456 476 465 453 456 466 464 465 458 462 476 68 53 53 476 476 16 476 477 18 17 476 462 453 471 475 471 471
454 469 469 470 470 471 471 471 471 468 454 456 474 474 474 474 473 456 473 475 453 453 456 473 455 472 468 459 457 474 456 456 21 157 456 466 461 474 475 474 455 465 179
590
Addr. 3A5D0 3A624 3A678 3A6C2 3A70C 3A756 3A7DC 3A844 3A88E 3A8D8 3A94F 3A9B7 3AA01 3AA73 3AAE5 3AB2F 3AB6F 3ABAF 3ABFD 3AC3D 3AC87 3ACD1 3AD1B 3AD65 3ADA5 3AE2B 3AEB1 3AF3E 3AFCB 3B02E 3B06E 3B0AE 3B0EC 3B10C 3B12C 3B14C 3B16C 3B193 3B1BA 3B1E1 3B208 3B22F 3B251 3B2DC 3B362 3B3E6 3B401 3B423 Name xCOS xTAN xSINH xCOSH xTANH xASIN xACOS xATAN xASINH xACOSH xATANH xEXP xLN xLOG xALOG xLNP1 xEXPM xFACT preFACT xIP xFP xFLOOR xCEIL xXPON xMAX xMIN xRND xTRNC xMOD xMANT xD>R xR>D x>HMS xHMS> xHMS+ xHMSxRNRM xCNRM xDET xDOT xCROSS xRSD x% x%T x%CH xRAND xRDZ xCOMB Page 456 473 471 456 473 454 453 454 454 453 454 459 464 464 453 464 459 475 462 459 459 455 476 464 465 469 474 465 464 458 468 461 461 461 461 469 455 457 458 456 470 476 474 455 468 469 456 Addr. 3B477 3B4C9 3B4E9 3B509 3B529 3B549 3B564 3B57F 3B59A 3B5BA 3B5DA 3B5FA 3B615 3B635 3B655 3B670 3B68B 3B6A6 3B6C1 3B6FA 3B715 3B749 3B76C 3B7AD 3B7D2 3B7ED 3B819 3B87E 3B8D7 3B8F5 3B904 3B913 3B928 3B93D 3B952 3B967 3B976 3B9D2 3B9FA 3BA09 3BA18 3BA2D 3BAC1 3BADA 3BAF5 3BB1F 3BB94 3BBBE
3A5D0 3D1C7
Addr. 3BBD9 3BBF9 3BC19 3BC39 3BC43 3BD4C 3BD65 3BDB2 3BDE6 3BE38 3BE9B 3BEC5 3BEEC 3BF77 3C02E 3C084 3C0BF 3C10F 3C11E 3C139 3C16B 3C17A 3C1C7 3C22D 3C2AC 3C2D6 3C30A 3C33E 3C372 3C392 3C3B2 3C3DC 3C41A 3C444 3C464 3C484 3C49F 3C4BA 3C4D5 3C4F5 3C51F 3C553 3C56E 3C58E 3C5AE 3C5C9 3C5E4 3C60E Name xSTR> xNUM xCHR xTYPE XEQTYPE #AF #CF xVTYPE xEQ> xOBJ> x>ARRY xARRY> xRDM xCON xIDN xTRN xPUT #450 #410 xPUTI #750 #710 xGET xGETI xV> x>V2 x>V3 xINDEP xPMIN xPMAX xAXES xCENTR xRES x*H x*W xDRAW xAUTO xDRAX xSCALE xPDIM xDEPND xERASE xPX>C xC>PX xGRAPH xLABEL xPVIEW xPIXON Page 472 465 455 474 199 16 16 475 458 465 454 454 468 456 462 474 467 17 17 467 19 19 460 460 475 475 475 462 466 466 454 455 469 470 470 458 454 458 470 466 457 458 467 456 460 463 467 466 Addr. 3C638 3C662 3C68C 3C6B6 3C6E0 3C70A 3C72A 3C74A 3C7D8 3C7E2 3C800 3C81E 3C83C 3C866 3C881 3C8A1 3C8C6 3C8D0 3C8DF 3C8FA 3C915 3C935 3C955 3C967 3C979 3C98B 3C99D 3C9AF 3C9C1 3C9D3 3C9E5 3CA07 3CA8D 3CB13 3CB7A 3CBF6 3CD21 3CE42 3CEE1 3CF80 3D01F 3D0BC 3D0D7 3D0F2 3D10D 3D128 3D143 3D1C7 Name xPIXOFF xPIX? xLINE xTLINE xBOX xBLANK xPICT xGOR xGXOR #C5C #C2C #85C #82C xLCD> x>LCD x>GROB xARC #2111 #5B11 xTEXT xXRNG xYRNG xFUNCTION xCONIC xPOLAR xPARAMETRIC xTRUTH xSCATTER xHISTOGRAM xBAR xSAME xAND xOR xNOT xXOR x== x#? x< x> x<=? x>=? xOLDPRT xPR1 xPRSTC xPRST xCR xPRVAR xDELAY
591
Page 466 466 463 473 454 454 466 460 461 20 20 19 19 463 463 460 453 20 20 473 476 476 460 456 466 466 474 461 454 470 453 466 465 475 476 476 476 476 476 476 467 467 456 467 457
592
Addr. 3D1E7 3D202 3D258 3D2B4 3D393 3D3AE 3D3CE 3D434 3D47E 3D503 3D50D 3D51C 3D52B 3D56B 3D605 3D6F6 3D7AC 3D81D 3DA3E 3DA63 3DAD0 3DB04 3DB62 3DBCA 3DBEA 3DC05 3DC20 3DC3B 3DC56 3DC71 3DC8C 3DCA7 3DCC7 3DCE2 3DCFD 3DD18 3DD33 3DD4E 3DD6E 3DD8E 3DDA9 3DDC4 3DDEE 3DE09 3DE24 3DE3F 3DE5A 3DE75 Name xPRLCD x xDER CKSYMBTYPE xRCEQ xSTEQ xROOT x xINTEGRAL xSUM #A110 #AA10 #A1A0 x| xWHERE xQUOTE xAPPLY xFCNAPPLY x->Q x->QPI xMATCHUP xMATCHDN xFORMUNIT xPREDIV xDUP xDUP2 xSWAP xDROP xDROP2 xROT xOVER xDEPTH xDROPN xDUPN xPICK xROLL xROLLD xCLEAR xSTOSIGMA xCLSIGMA xRCLSIGMA xSIGMA+ xSIGMAxNSIGMA xCORR xCOV xSUMX xSUMY Page 467 457 199 468 472 469 462 460 20 20 20 460 468 453 468 468 464 475 468 458 458 473 458 458 469 466 457 458 458 466 469 469 455 472 455 468 460 460 465 456 456 461 461 Addr. 3DE90 3DEAB 3DEC6 3DEE1 3DEFC 3DF17 3DF32 3DF4D 3DF68 3DF83 3DFDD 3DFFD 3E01D 3E03D 3E05D 3E07D 3E09D 3E0BD 3E0DD 3E0FD 3E127 3E156 3E171 3E17B 3E196 3E1CA 3E1EF 3E214 3E239 3E25E 3E283 3E2C1 3E331 3E35B 3E385 3E3AF 3E406 3E46C 3E4D2 3E54C 3E576 3E5A0 3E5E9 3E632 3E648 3E66F 3E696 3E6CA
3D1E7 077002
Addr. 3E6F1 3E739 3E743 3E759 3E7DA 3E7E9 3E7FF 3E823 3E85C 3E87C 3E8C1 3E8F0 3E91A 3E97B 3E9D4 3EA01 3EA2E 3EA49 3EAA7 3EAC7 3EAE7 3EAFB 3EB16 3EB2C 3EB42 3EB64 3EB84 3EC35 3EC55 3EC75 3EC95 3ECB0 3ECE4 3ED22 3ED56 3ED76 3ED91 3EDAC 3EDCC 3EDEC 3EE0C 3EE2C 3EE47 3EE62 3EE82 3EE9D 3EEBD 3EEE7 Name xRCL xSTO #9FD #8FD #C8 #9F1 #8F1 xSTO> xDEFINE xPURGE xMEM xORDER xCLUSR xTMENU xMENU CST xRCLMENU xPVARS xPGDIR xARCHIVE xRESTORE #9F xMERGE xFREE xLIBS xATTACH xDETACH xXMIT xSRECV xOPENIO xCLOSEIO xSEND xKGET xRECN xRECV xFINISH xSERVER xCKSM xBAUD xPARITY xTRANSIO xKERRM xBUFLEN xSTIME xSBRK xPKT xINPUT xASN Page 468 472 19 19 16 19 19 167, 472 456 467 464 466 455 473 464 293 468 467 466 453 469 16 Addr. 3EF07 3EF3B 3EF79 3EFB1 3EFEF 3F007 3F033 3F053 3F070 3F0B7 3F0FC 3F11C 3F218 3F22E 3F249 3F264 3F27F 3F29A 3F2B5 3F2DF 3F481 3F495 4EA22 4EA37 4EA4C 4EA61 4EA76 80058 800F5 806FD 8071B 80EDC 80F02 80F5A 81006 860B8 860CC 004002 005002 007002 02E002 070002 072002 073002 074002 075002 076002 077002 Name xSTOKEYS xDELKEYS xRCLKEYS x->TAG xDTAG xINT xANS x; xR>I xI>R xNOVAL xCMDAPPLY xRPL> xUNROT xUNPICK xNIP xPICK3 xDUPDUP xNDUPN xFAST3D COERCE2 UNCOERCE2 %TICKSsec %TICKSmin %TICKShour %TICKSday %TICKSweek NEXTIRQ IRAMBUFF EDITLINE CONTEXT DEPTHSAVE SystemFlags LASTARGCOUNT IOCsave CurROMBank2 FlashROMTAB2 RunChooseSimple sysCHOOSE Ck&DoMsgBox DoAlert Choose2 Choose3 Choose3Save Choose3Index ChooseDefHandler Choose3CANCL Choose3OK
593
Page 472 457 468 473 458 462 453 469 462 465
463 454 457 475 471 466 455 471 463 469 469 459 471 455 454 466 474 463 454 472 470 466 462 454
244 233 283 282 233 233 233 233 233 234 234
594
Addr. 088002 089002 09D002 09E002 09F002 0A0002 0AE002 0AF002 0B0002 0B1002 0B2002 0B3002 0B4002 0B5002 0BB002 0BC002 0BD002 0BE002 06C003 06D003 06E003 09A003 0A4003 0A5003 0A6003 0A7003 0AB003 0AC003 001004 002004 003004 004004 005004 006004 007004 008004 009004 00A004 00B004 00C004 00D004 00E004 00F004 010004 011004 012004 013004 014004 Name SaveHARDBUFF RestoreHARDBUFF DoCKeyOK DoCKeyCancel DoCKeyCheck DoCKeyChAll DoMKeyOK DoKeyCancel DoCKeyUnChAll LEDispItem LEDispList LEDispPrompt DoKeyOK DoKeyEdit GetFieldVals IFEDispField DOTVARS{} ChangeFocus laDELROW laINSROW laGPROW WRAP$ BRdone BRDispItems BRinverse BRViewItem BRGetItem SWAPROWS FSTR1 FSTR2 FSTR3 FSTR4 FSTR5 FSTR6 FSTR7 FSTR8 FSTR9 FSTR10 FSTR11 FSTR12 FSTR13 algparse algunwrap EQW3 EQW3Edit EQW3StartEdit EQW3ViewMargin EQW3ViewLeftX Page 234 234 244 244 244 244 Addr. 015004 016004 017004 018004 019004 01A004 01B004 01C004 01D004 01E004 01F004 020004 021004 022004 023004 024004 025004 026004 027004 028004 029004 02A004 02B004 02C004 02D004 02E004 02F004 030004 031004 032004 033004 034004 035004 036004 037004 038004 039004 03A004 03B004 03C004 03D004 03F004 040004 041004 042004 043004 044004 045004
Page
98 98
169
IfGetFieldValue
IfGetCurrentFieldValue IfGetFieldMessageHan..
IfGetFieldType
IfGetFieldObjectsType IfGetFieldDecompObject IfGetFieldChooseData IfGetFieldChooseDecomp IfGetFieldResetValue IfSetFieldResetValue IfGetFieldInternalVa..
48
344 54 54 54 54 54 55 55
55
311
IfDisplayFromData IfGetNbFields IfCheckSetValue IfCheckFieldtype IfReset IfSetField IfKeyChoose IfKeyEdit IfKeyTypes IfKeyCalc IfKeyInvertCheck IfONKeyPress IfEnterKeyPress IfSetHelpString IfSetTitle IfSetTitle2 IfMain2
IfPutFieldsOnStack
98 98 257 258 258 258 258 258 258 258 258 258 258 258 258 259 259 259 259 259 259 259 259 259 259 259 260 260 260 260 260 260 260 260 261 261 261 261
IfSetFieldPos IfGetFieldPos
088002 0DD006
Addr. 046004 047004 048004 049004 04A004 04B004 04C004 04D004 04E004 067004 068004 069004 06D004 06E004 06F004 070004 08E006 08F006 090006 091006 092006 093006 094006 095006 096006 097006 098006 099006 09A006 09B006 09C006 09D006 09E006 09F006 0A0006 0A1006 0A2006 0A3006 0A4006 0A5006 0A6006 0A7006 0A8006 0A9006 0AA006 0AB006 0AC006 0AD006 Name
IfDisplayFromData2 IfSetAllLabelsMessages IfSetAllHelpStrings
595
Page 261 261 261 259 261 188 Addr. 0AE006 0AF006 0B0006 0B1006 0B2006 0B3006 0B4006 0B5006 0B6006 0B7006 0B8006 0B9006 0BA006 0BB006 0BC006 0BD006 0BE006 0BF006 0C0006 0C1006 0C2006 0C3006 0C4006 0C5006 0C6006 0C7006 0C8006 0C9006 0CA006 0CB006 0CC006 0CD006 0CE006 0CF006 0D0006 0D1006 0D2006 0D3006 0D4006 0D5006 0D6006 0D7006 0D8006 0D9006 0DA006 0DB006 0DC006 0DD006 Name PHFctr PHFctr1 PHFctr0 DeCntMulti DoLS PNFctr PSQFF LiftZAdic LFCProd UFactor UFactor1 MonicLf DemonicLf LiftLinear LiftGeneral UFactorDeg2 CombineFac CombProd CombInit CombNext RmCombNext PFactTriv VarFactor PFactPowCnt PDivLk Prime+ PrimeZFactor NFactor NFactorSpc DupTypeS? SFactor SPollard BFactor BrentPow ZPrime? ZIsPrime? SIsPrime? BIsPrime? BRabin ZTrialDiv2 ZTrialPrime? ZTrialDiv QMod QMODSYMext ModPow ZQUOText ZMod Page 374 374 374 375 375 375 375 375 375 375 375 375 375 376 376 376 376 376 376 376 376 376 376 377 377 332 332 330 330 330 335 330 331 331 331 331 331 331 332 332 332 332 332 372
KeyLookup Filer Arbo RENAME FILER_MANAGER FILER_MANAGERTYPE FontBrowser BrowseMem.1 BerlekampP Berlekamp ErrInfRes ErrUndefRes ErrBadDim ALG48MSOLV GMSOLV GBASIS GSOLVE GFACTOR GREDUCE REDUCE FASTREDUCE ONE{}POLY TWO{}POLY THREE{}POLY TWO::POLY ::POLY {}POLY >TPOLY >HPOLY >TPOLYN >HPOLYN MKPOLY ONE>POLY >POLY ALG48FCTR? MFactTriv CheckPNoExt PPP PFactor PSqff
188 188
373 373 403 403 403 384 384 384 384 384 384 384 377 377 377 377 377 377 377 378 378 378 378 378 377 374 374 374 374 374 374
329
596
Addr. 0DE006 0DF006 0E0006 0E1006 0E2006 0E3006 0E4006 0E5006 0E6006 0E7006 0E8006 0E9006 0EA006 0EB006 0EC006 0ED006 0EE006 0EF006 0F0006 0F1006 0F2006 0F3006 0F4006 0F5006 0F6006 0F7006 0F8006 0F9006 0FA006 0FB006 0FC006 0FD006 0FE006 0FF006 100006 101006 102006 103006 104006 105006 106006 107006 108006 109006 10A006 10B006 10C006 10D006 Name ZDIVext QRoot ZSQRT PEvalMod QAddMod QSubMod QMulMod QDivMod QInvMod QGcdMod QGcdExMod IsV>V? PEvalFast? PZadic GCDHEUext H>Z #>Z Z2BIN COERCE2Z Z>S S>Z S>Z? Z>ZH R>Z Z>R DupQIsZero? QIsZero? DupZIsOne? ZIsOne? DupZIsNeg? ZIsNeg? ListPos AppendList Contains? SortList ZTrim ZAbs PNMax LISTMAXext ZNMax ZNMin ZNLT? DISTDIVext DupZIsTwo? DupZIsEven? Univar? SUnivar? ZBits Page Addr. 10E006 10F006 110006 111006 112006 113006 114006 115006 116006 117006 118006 119006 11A006 11B006 11C006 11D006 11E006 11F006 120006 121006 122006 123006 124006 125006 126006 127006 128006 129006 12A006 12B006 12C006 12D006 12E006 12F006 130006 131006 132006 133006 134006 135006 136006 137006 138006 139006 13A006 13B006 13C006 13D006
329 395 395 395 395 395 395 396 399 380 399 399 328 327 22 22 46 328 328 328 327 31 334 334 334 334 334 334 69 73 137 73 329 329 379 399 329 329 334 372 334 334 380 380 329
372 372 423 372 422 347 347 347 350 347 72, 325 347 347 362 362 362 363 363 363 363 363 363
0DE006 19D006
Addr. 13E006 13F006 140006 141006 142006 143006 144006 145006 146006 147006 148006 149006 14A006 14B006 14C006 14D006 14E006 14F006 150006 151006 152006 153006 154006 155006 156006 157006 158006 159006 15A006 15B006 15C006 15D006 15E006 15F006 160006 161006 162006 163006 164006 165006 166006 167006 168006 169006 16A006 16B006 16C006 16D006 Name xssSYM#? addt% xssSYM% addt%CH xssSYM%CH addt%T xssSYM%T addtMOD xssSYMMOD addtTRNC xssSYMTRCXY addtRND xssSYMRNDXY addtCOMB xssSYMCOMB addtPERM xssSYMPERM addtOR xssSYMOR addtAND xssSYMAND addtXOR xssSYMXOR 2LAMBIND 3LAMBIND SYMBINCOMP CKINNERCOMP DUPCKLEN{} CKCARCOMP CARCOMPext RISCH13 CXRIext RIXCext IRXCext IRXC2 SWAPNDXF NDXFext SWAPFXND FXNDext QXNDext NDXQext TYPEIRRQ? DTYPEIRRQ? BESTMATRIXTYPE {}TO[] []TO{} DUPNULL[]? MDIMS Page 363 363 363 363 363 363 363 363 363 363 363 116 116 72, 325, 359 72 72 73 372 387 333 37 37 379 379 380 380 421 421 326, 421 326, 421 65 338 338 339 64 Addr. 16E006 16F006 170006 171006 172006 173006 174006 175006 176006 177006 178006 179006 17A006 17B006 17C006 17D006 17E006 17F006 180006 181006 182006 183006 184006 185006 186006 187006 188006 189006 18A006 18B006 18C006 18D006 18E006 18F006 190006 191006 192006 193006 194006 195006 196006 197006 198006 199006 19A006 19B006 19C006 19D006 Name DIMLIMITS CKSAMESIZE DTYPENDO? DTYPFMAT? CKNUMARRY 2DMATRIX? MATRIXDIM SAMEMATRIX SAMEMATSCTYPE CKMATRIXELEM MATRIX2ARRAY MATRIX2LIST LIST2MATRIX LENMATRIX XEQARRY> MATEXPLODE ARRAY2MATRIX XEQ>ARRY XEQ>ARRAY1 CKALG TYPEZ? DUPTYPEZ? CK1Z CK2Z CK3Z CK1Cext C2C%% ZZ2C%%ext Z2%% C%>C%% E%%>C%% R2Zext Z2Sext CKFPOLYext CK2FPOLY IDNTLAM? FLOAT? CKSYMREALCMP TYPEIDNTLAM? REAL? TYPEREALZINT? OBJ2REAL METAINT? METAPOSINT? OBJINT? OBJPOSINT? CKINT>0 Z>#
597
Page 64 339 339 201 65 339 341 338 338 326 65 338 338 343 65 339 338 65 201 200 200 198, 328 198, 328 198, 328 201, 333 37 37 31 37 37 328 328 326 326 201 201 201 199 201 201 31 78, 334 78, 334 334 334 334 22
598
Addr. 19E006 19F006 1A0006 1A1006 1A2006 1A3006 1A4006 1A5006 1A6006 1A7006 1A8006 1A9006 1AA006 1AB006 1AC006 1AD006 1AE006 1AF006 1B0006 1B1006 1B2006 1B3006 1B4006 1B5006 1B6006 1B7006 1B8006 1B9006 1BA006 1BB006 1BC006 1BD006 1BE006 1BF006 1C0006 1C1006 1C2006 1C3006 1C4006 1C5006 1C6006 1C7006 1C8006 1C9006 1CA006 1CB006 1CC006 1CD006 Name CLEANIDLAM ssSYMDER SYMDER DERIVext siSYMDER DERIVIDNT DERIVIDNT1 DERIV METADERIV DO>STRID METADEROP METADER+ METADERMETADER* METADER/ METADER METADERFCN METADERDER METADERI4 METADERI3 METADERIFTE DERARG METADEREXP METADERLN METADERLNP1 METADERLOG METADERALOG METADERABS METADERINV METADERNEG METADERSQRT METADER&NEG METADERSQ METADERSIN METADERCOS METADERTAN METADERSINH METADERCOSH METADERTANH METADERASIN METADERACOS METADERATAN METADERASH METADERACH METADERATH pshder* SQRTINVpshd* ckaddt* Page 326 Addr. 1CE006 1CF006 1D0006 1D1006 1D2006 1D3006 1D4006 1D5006 1D6006 1D7006 1D8006 1D9006 1DA006 1DB006 1DC006 1DD006 1DE006 1DF006 1E0006 1E1006 1E2006 1E3006 1E4006 1E5006 1E6006 1E7006 1E8006 1E9006 1EA006 1EB006 1EC006 1ED006 1EE006 1EF006 1F0006 1F1006 1F2006 1F3006 1F4006 1F5006 1F6006 1F7006 1F8006 1F9006 1FA006 1FB006 1FC006 1FD006
387 388 388 388 388 54 388 388 388 388 388 388 388 388 388 388 390 388 388 388 389 389 389 389 389 389 388 389 389 389 389 389 389 389 389 389 389 389 389 390 390 390 361
19E006 25D006
Addr. 1FE006 1FF006 200006 201006 202006 203006 204006 205006 206006 207006 208006 209006 20A006 20B006 20C006 20D006 20E006 20F006 210006 211006 212006 213006 214006 215006 216006 217006 218006 219006 21A006 21B006 21C006 21D006 21E006 21F006 220006 221006 222006 223006 224006 225006 226006 227006 228006 229006 22A006 22B006 22C006 22D006 Name FLAGATAN2S FLAGASIN2T FLAGASIN2C FLAGACOS2S CK&CONVINT CK&CONV2INT CONVBACK2INT CONVBACKINT STEPIDIV2 FLAGDIV2 FLAGGCD PEGCD IEGCD ABCUV IABCUV FLAGLGCD FLAGLCM FLAGSIMP2 FLAGPARTFRAC FLAGPROPFRAC FLAGPTAYL FLAGHORNER EULER PA2B2 FLAGCHINREM ICHINREM ISPRIME SOLVE1EQ SOLVEMANYEQ ZEROS1EQ ZEROSMANYEQ FCOEF FROOTS FACTORS DIVIS STUDMULT STUDDIV rref FLAGQXA FLAGAXQ FLAGGAUSS FLAGSYLVESTER PCAR MADNOCK SYSTEM VANDERMONDE HILBERTNOCK FLAGJORDAN Page 413 413 413 413 328 328 328 328 413 413 413 414 414 414 414 414 414 414 414 414 414 414 330 414 414 411 414 414 414 415 415 415 415 415 Addr. 22E006 22F006 230006 231006 232006 233006 234006 235006 236006 237006 238006 239006 23A006 23B006 23C006 23D006 23E006 23F006 240006 241006 242006 243006 244006 245006 246006 247006 248006 249006 24A006 24B006 24C006 24D006 24E006 24F006 250006 251006 252006 253006 254006 255006 256006 257006 258006 259006 25A006 25B006 25C006 25D006 Name CURL DIVERGENCE LAPLACIAN HESSIAN HERMITE TCHEBNOCK LEGENDRE LAGRANGE FOURIER SIGNE TABVAR FLAGDIVPC FLAGTRUNC FLAGSEVAL XNUM REORDER USERLVAR USERLIDNT EXLR ADDTMOD MADDTMOD SUBTMOD MSUBTMOD MULTMOD MAT*SCMOD SC*MATMOD MAT*MATMOD DIVMOD GCD1MOD INVMOD MINVMOD FLAGDIV2MOD FLAGPOWMOD FLAGMPOWMOD EXPAMOD FLAGEXPAMOD FLAGFACTORMOD MFACTORMOD RREFMOD KEYEVAL LIFCext EvalNoCKx* EvalNoCKx+ EvalNoCKxEvalNoCKx/ EvalNoCKx EvalNoCKxCHS EvalNoCKxINV
599
Page 415 415 415 415 415 415 415 415 415 400 415 416 416 416 416 416 416 416 356 416 416 416 416 416
415 345 346 346 346 346 415 415 415 415 345
395 395 208 395 417 417 417 417 417 417 417
600
Addr. 25E006 25F006 260006 261006 262006 263006 264006 265006 266006 267006 268006 269006 26A006 26B006 26C006 26D006 26E006 26F006 270006 271006 272006 273006 274006 275006 276006 277006 278006 279006 27A006 27B006 27C006 27D006 27E006 27F006 280006 281006 282006 283006 284006 285006 286006 287006 288006 289006 28A006 28B006 28C006 28D006 Name EvalNoCKxMOD EvalNoCKxPERM EvalNoCKxCOMB EvalNoCKxOR EvalNoCKxAND EvalNoCKxXOR EvalNoCKxXROOT TABVALext TOLISText FROMLISText PFEXECext LOP1ext LOPAext LISTSECOext rpnQOBJext CK1TONOext COLCext SYMCOLCT COLC1 COLC2 MULMULText METAMULMULT METAMM2 COMPLISText METACOMPRIM METACOMP0 METACOMP1 ADDLISText DIVISext FACT1ext FACTOext ZFACTO SOLVext FRND BICARREE? REALBICAR FEVIDENText EVIDENText EVIDSOLV DEG2ext METADEG2 METADEG1 DEG1 FDEG2ext PIext RACTOFACext FACTORACext RFACText Page 417 418 418 418 418 418 418 418 418 418 421 421 421 421 423 421 355 Addr. 28E006 28F006 290006 291006 292006 293006 294006 295006 296006 297006 298006 299006 29A006 29B006 29D006 29E006 29F006 2A0006 2A1006 2A2006 2A3006 2A4006 2A5006 2A6006 2A7006 2A8006 2A9006 2AA006 2AB006 2AC006 2AD006 2AE006 2AF006 2B0006 2B1006 2B2006 2B3006 2B4006 2B5006 2B6006 2B7006 2B8006 2B9006 2BA006 2BB006 2BC006 2BD006 2BE006
381 381 381 381 381 381 381 381 381 381 382 382 382 382 377 382 382 382 382 382 382 382 73 383 383 383
358 358 358 333 424 329 329 354 354 355 68 424 424
25E006 31E006
Addr. 2BF006 2C0006 2C1006 2C2006 2C3006 2C4006 2C5006 2C6006 2C7006 2C8006 2C9006 2CA006 2CB006 2CC006 2CD006 2CE006 2CF006 2D0006 2D1006 2D2006 2D3006 2D4006 2D5006 2D6006 2D7006 2D8006 2D9006 2DA006 2DB006 2DC006 2DD006 2DE006 2DF006 2E0006 2E1006 2E2006 2E3006 2E4006 2E5006 2E6006 2E7006 2E8006 2E9006 2EA006 2EB006 2EC006 2ED006 2EE006 Name PZHSTR HORNER1ext PEval RISCHext risch/ rischABS IBP SQRT_IN? IS_SQRT? XROOT_IN? IS_XROOT? STOPRIMIT CONTAINS_LN? ISNT_IDNT? RISCHPF RISCHRAT rischlogpart PREVALext WARNSING INText INT3 FOURIERext 3DUP #3+ROLL 2DROPTRUE IRRQ#ULTIMATE LESSCOMPLEX? LISTIRRQ LIST1i-1-i LIST10-10 TABLECOSext TABLETANext DROPZ1 DROPZ0 TESTINFINI INFINIext MINUSINFext PLUSINFext ?ext POSINFext POSUNDEFext pisur2 pisur-2 pi metapi 'xPI metai 'xi Page 424 424 424 Addr. 2EF006 2F0006 2F1006 2F2006 2F3006 2F4006 2F5006 2F6006 2F7006 2F8006 2F9006 2FA006 2FB006 2FC006 2FD006 2FE006 2FF006 300006 301006 302006 303006 304006 305006 306006 307006 308006 309006 30A006 30B006 30C006 30D006 30E006 30F006 310006 311006 312006 313006 314006 315006 316006 317006 318006 319006 31A006 31B006 31C006 31D006 31E006 Name ipi metaipi meta-pi metapi/2 metapi/4 meta-pi/2 meta-pi/4 pifois2 deuxipi metapi*2 base_ln meta_e NEXTPext INSERT{}N COMPRIMext TCOLLECT SIGMAEXPext LINEXPext SIGMAEXP2ext TCHEBext SINEXPA METASINEXPA SINEXPA+ SINEXPASINEXPA* SINEXPA*1 COSEXPA METACOSEXPA COSEXPA+ COSEXPACOSEXPA* COSEXPA*1 EXPEXPA METAEXPEXPA EXPEXPA+ EXPEXPAEXPEXPA* EXPEXPANEG EXPEXPA*1 LNEXPA METALNEXPA LNEXPA* LNEXPA/ LNEXPA LINEXPA MTRIG2SYMB LNCOLCext METATANEXPA
601
Page 420 420 420 420 420 420 420 420 420 420 420 420 72 72 73 355 355 355 355 378 355 368 368 368 369 369 355 369 369 369 369 369 355 369 369 369 369 369 369 355 369 369 369 369 355 355 355 369
390 390 390 390 424 106 108 136 422 424 422
425 425 327 327 419 419 419 419 419 419 420 420 420 420 420 420 420 420
602
Addr. 31F006 320006 321006 322006 323006 324006 325006 326006 327006 328006 329006 32A006 32B006 32C006 32D006 32E006 32F006 330006 331006 332006 333006 334006 335006 336006 337006 338006 339006 33A006 33B006 33C006 33D006 33E006 33F006 340006 341006 342006 343006 344006 345006 346006 347006 348006 349006 34A006 34B006 34C006 34D006 34E006 Name TEXPAext MAT+ MADD MATMSUB VADD VSUB MAT* MMMULT MVMULT SCL*MAT MAT*SCL VPMULT MAT MATCROSS MATDOT RNDARRY TRCARRY Yext MAT/SCL MAT/ MATCHS MATSQUARE MATCONJ MATRE MATIM MATTRACE MATTRN MATTRAN mattran mattrn MATSUB submeta MATREPL MATREDIM VRRDM VRRDMmeta MATRANM DIMRANM MATDET MATRDET MATFNORM MATRNORM MATCNORM MATRREF MATREF MATRANK MATINV Page 356 339 339 339 339 339 339 339 339 339 339 339 339 340 340 340 340 340 65 340 340 340 340 340 340 340 340 340 65 340 340 343 78 343 337 338 338 337 337 340 340 340 340 340 341 341 341 340 Addr. 34F006 350006 351006 352006 353006 354006 355006 356006 357006 358006 359006 35A006 35B006 35C006 35D006 35E006 35F006 360006 361006 362006 363006 364006 365006 366006 367006 368006 369006 36A006 36B006 36C006 36D006 36E006 36F006 370006 371006 372006 373006 374006 375006 376006 377006 378006 379006 37A006 37B006 37C006 37D006 37E006
31F006 3DE006
Addr. 37F006 380006 381006 382006 383006 384006 385006 386006 387006 388006 389006 38A006 38B006 38C006 38D006 38E006 38F006 390006 391006 392006 393006 394006 395006 396006 397006 398006 399006 39A006 39B006 39C006 39D006 39E006 39F006 3A0006 3A1006 3A2006 3A3006 3A4006 3A5006 3A6006 3A7006 3A8006 3A9006 3AA006 3AB006 3AC006 3AD006 3AE006 Name MATEGV JORDAN QXA AXQ GAUSS SYLVESTER metasplit m-1&m+1 meta1/meta 1&meta meta/2 addt2 addt/ meta2* meta1-sq metasq+1 metasq-1 meta-1 NDROPZERO 2DROPZ0 metaadd metasub metamult metadiv meta addt metapow metafraction? metaxroot top&addt* top&addt/ addti metaEQUAL? 2metaundef# 1metaundef# metaundef 2metainf# 1metainf# metainftype unsignedinf plusinf NDROPplusinf minusinf NDROPminusinf MetaAdd xssSYM+ MetaSub xssSYMPage 345 345 345 345 346 346 78 359 359 359 359 359 359 359 360 360 360 360 76 327 360 360 361 361 361 360 361 370 362 360 360 360 78 367 367 367 368 367 368 368 368 368 368 368 360 361 Addr. 3AF006 3B0006 3B1006 3B2006 3B3006 3B4006 3B5006 3B6006 3B7006 3B8006 3B9006 3BA006 3BB006 3BC006 3BD006 3BE006 3BF006 3C0006 3C1006 3C2006 3C3006 3C4006 3C5006 3C6006 3C7006 3C8006 3C9006 3CA006 3CB006 3CC006 3CD006 3CE006 3CF006 3D0006 3D1006 3D2006 3D3006 3D4006 3D5006 3D6006 3D7006 3D8006 3D9006 3DA006 3DB006 3DC006 3DD006 3DE006 Name MetaMul xssSYM* MetaDiv xssSYM/ NDROPZ0 NDROPZ1 MetaPow xssSYM MetaNeg xSYMCHS metaneg metackneg metasimp metapi? metaCOMPARE STRICTmetaCOMPARE EQUALPOSMETA EQUALPOS2META vgerxssSYMSUM DISTRIB/ metareal? ModExpa ModAdd ModSub ModMul ModDiv ModDiv2 ModInv ModGcd ModLGCD ModLOPD MODULOMODext MODULOMAText Mod ModFctr PARTFRAC INPARTFRAC PARTFRACRAT PFext IEGCDext REGCDext EGCDext INEGCD EGCDSWAP EGCDNEWG PDer INTEGRext LRDMext
603
Page 361 361 327 327 362 362 362 362 368 370 370 370 78 78 394 368 370 372 372 373 373 373 373 373 373
604
Addr. 3DF006 3E0006 3E1006 3E2006 3E3006 3E4006 3E5006 3E6006 3E7006 3E8006 3E9006 3EA006 3EB006 3EC006 3ED006 3EE006 3EF006 3F0006 3F1006 3F2006 3F3006 3F4006 3F5006 3F6006 3F7006 3F8006 3F9006 3FA006 3FB006 3FC006 3FD006 3FE006 3FF006 400006 401006 402006 403006 404006 405006 406006 407006 408006 409006 40A006 40B006 40C006 40D006 40E006 Name RRDMext DEGREext FHORNER HORNext HORN1 MHORNext PTAYLext LAGRANGEext PSEUDOPREP PSEUDODIV IDIV2 BESTDIV2 CDIV2ext QUOText NEWDIVext QDivRem DIV2LISText DIVOBJext DIVMETAOBJ LOPDext QUOTOBJext DIVISIBLE? QDiv? FastDiv? POTENCEext PDIV2ext PSetSign PLCZ HSECO2RCext SECO2CMPext SECO2CMPPOL SECO2CMPCART VALOBJext R2SYM VAL2ext INVAL2 METAVAL2 VAL1 VAL1M addt0meta HALFTAN COS2TAN/2 cos2tan/2 1-x2/1+x2 SIN2TAN/2 sin2tan/2 2x/1+x2 TAN2TAN/2 Page 378 378 378 378 378 372 379 422 357 357 357 357 372 372 420 88, 361 420 357 357 357 357 358 372 372 422 422 Addr. 40F006 410006 411006 412006 413006 414006 415006 416006 417006 418006 419006 41A006 41B006 41C006 41D006 41E006 41F006 420006 421006 422006 423006 424006 425006 426006 427006 428006 429006 42A006 42B006 42C006 42D006 42E006 42F006 430006 431006 432006 433006 434006 435006 436006 437006 438006 439006 43A006 43B006 43C006 43D006 43E006
423 325 423 423 423 423 423 77 356 351 365 365 351 365 365 351
3DF006 49F006
Addr. 43F006 440006 441006 442006 443006 444006 445006 446006 447006 448006 449006 44A006 44B006 44C006 44D006 44E006 44F006 450006 451006 452006 453006 454006 455006 456006 458006 459006 45A006 45B006 45C006 45D006 45E006 45F006 460006 461006 462006 463006 464006 465006 466006 467006 468006 469006 46A006 46B006 46C006 46D006 46E006 46F006 Name TAN2SC2ext TAN2SC2 2*1-cos/sin TAN2CS2 2*sin/1+cos SIN2EXPext sin2exp COS2EXPext cos2exp SINH2EXPext sinh2exp COSH2EXPext cosh2exp TANH2EXPext tanh2exp ASINH2LNext asinh2ln ACOSH2LNext acosh2ln ATANH2LNext atanh2ln XROOT2ext xroot2expln LN2ext exp2sincos metai* LN2ATAN VAR=LIST IDNTEXEC SYMISOL SYMQFORM LISTEXEC LISTEXEC1 SECOEXEC EQUATION? USERFCN? SYMBEXEC MEVALext CASNUMEVAL CASCOMPEVAL REPLACE2BY1 NR_REPLACE SYMBWHERE CASCRUNCH APPROXCOMPEVAL LIMIText REWRITEIFINF SYMTAYLOR Page 357 352 366 352 367 352 367 352 367 352 367 352 367 352 367 352 367 352 367 352 367 352 367 357 367 360 352 353 423 Addr. 470006 471006 472006 473006 474006 475006 476006 477006 478006 479006 47A006 47B006 47C006 47D006 47E006 47F006 480006 481006 482006 483006 484006 485006 486006 487006 488006 489006 48A006 48B006 48C006 48D006 48E006 48F006 490006 491006 492006 493006 494006 495006 496006 497006 498006 499006 49A006 49B006 49C006 49D006 49E006 49F006 Name SYMPAPRX TRUNCDL LIMSERIES! LIMITX! LIMITNOVX! LIMERR0! LIMERR1! LIMIT! LIMSTEP1! LIMSTEP2! LIMSTEP3! LIMSTEP4! LIMLIM! n{}N LIMLIM1! LIMCMPL! LIMEQUFR! LIMEQU! LIMEQU0! LIM+-! LIMERR10! LIMNEG! LIMRAC! LIMINV! LIM/! LIMPOW! LIMSQ! LIM*! LIMDIVPC! DIVPC! LIMPROFEND! LIMPROF! LIM%#! LIMPROF0! LIMPROF1! LIMPROF2! LIMINVLN! LIMLN! LIMEXP! LIMSINCOS! LIMATAN! LIMASIN! LIMSQRT! LIMFLOOR! LIMABS! LPROF! LIM#VARX! LIMBETA!
605
Page 386 386
386 386
386
421 421 421 86 86 353 353 353 353 353 353 353 353
387
386
606
Addr. 4A0006 4A1006 4A2006 4A3006 4A4006 4A5006 4A6006 4A7006 4A8006 4A9006 4AA006 4AB006 4AC006 4AD006 4AE006 4AF006 4B0006 4B1006 4B2006 4B3006 4B4006 4B5006 4B6006 4B7006 4B8006 4B9006 4BA006 4BB006 4BC006 4BD006 4BE006 4BF006 4C0006 4C1006 4C2006 4C3006 4C4006 4C5006 4C6006 4C7006 4C8006 4C9006 4CA006 4CB006 4CC006 4CD006 4CE006 4CF006 Name LIMALPHA! HORNEXP! HORNCOS! HORNSIN! LIMSC0! LIMSC1! HORNATAN! LIMATAS! HORNASIN! HORNASIN1! HORNLN! LNOBJ! NEWLIMHORN LIMHORN! LRDM! LIMDL! LIMDLINF! LIMINFSIGN! LIMMAX! LIMCOMP! VARCOMP2! LIMSORT! VARCOMP! VARCOMPLN! VARCOMP3! VARCOMP31! VARCOMP32! VARCOMP33! LIMERR6! LIMVALOBJ! LIMVAL! EQUIV! LVARXNX2! SIMP1! FindCurVar LIMVAR! VAR% ISOL1 ISOLALL ISOL2ext BEZOUTMSOLV ROOT{}N MHORNER MHORNER1 SQFFext MSQFF %1TWO MZSQFF Page 387 Addr. 4D0006 4D1006 4D2006 4D3006 4D4006 4D5006 4D6006 4D7006 4D8006 4D9006 4DA006 4DB006 4DC006 4DD006 4DE006 4DF006 4E0006 4E1006 4E2006 4E3006 4E4006 4E5006 4E6006 4E7006 4E8006 4E9006 4EA006 4EB006 4EC006 4ED006 4EE006 4EF006 4F0006 4F1006 4F2006 4F3006 4F4006 4F5006 4F6006 4F7006 4F8006 4F9006 4FA006 4FB006 4FC006 4FD006 4FE006 4FF006
387
387
387 387 387 387 387 387 396 396 396 396 396 396 396 396 396 396 396
4A0006 55F006
Addr. 500006 501006 502006 503006 504006 505006 506006 507006 508006 509006 50A006 50B006 50C006 50D006 50E006 50F006 510006 511006 512006 513006 514006 515006 516006 517006 518006 519006 51A006 51B006 51C006 51D006 51E006 51F006 520006 521006 522006 523006 524006 525006 526006 527006 528006 529006 52A006 52B006 52C006 52D006 52E006 52F006 Name RIMext xREext xSYMRE xIMext xSYMIM RCONJext addtCONJ xSYMCONJ QCONJext QABSext RABSext ZABS CZABS xABSext addtABS xSYMABS addtABSEXACT addtSIGN xSYMSIGN addtARG xSYMARG ARG2 INTERNALARG2 QUADRANT CNORMext CXIRext QNORMext SXSQRext XSQRext CK%%SQRT C%%SQRT ZINTSQRT SHALT CKLN xLNext addtLN xSYMLN EXPANDLN CMPLXLN LNATANext REALLN xEXPext xINVext xvext xCOSext xSINext xTANext xCOSHext Page 348 348 362 348 362 348 363 422 422 348 329 37 348 362 362 362 362 38 38 333 422 348 348 34 38 Addr. 530006 531006 532006 533006 534006 535006 536006 537006 538006 539006 53A006 53B006 53C006 53D006 53E006 53F006 540006 541006 542006 543006 544006 545006 546006 547006 548006 549006 54A006 54B006 54C006 54D006 54E006 54F006 550006 551006 552006 553006 554006 555006 556006 557006 558006 559006 55A006 55B006 55C006 55D006 55E006 55F006 Name xSINHext xTANHext xASINext xACOSext xATANext addtCOS xSYMCOS addtSIN xSYMSIN addtTAN xSYMTAN addtSINACOS addtASIN xSYMASIN addtACOS xSYMACOS addtATAN xSYMATAN addtSINH xSYMSINH addtCOSH xSYMCOSH addtTANH xSYMTANH xATANHext addtATANH xSYMATANH xASINHext addtASINH xSYMASINH xACOSHext addtACOSH xSYMACOSH addtSQRT xSYMSQRT xSQext addtSQ xSYMSQ addtINV xSYMINV addtEXP xSYMEXP addtD->R xSYMD>R addtR->D xSYMR>D addtFLOOR xSYMFLOOR
607
Page 350 350 349 349 349 363 349 364 349 364 349 364 364 349 364 349 364 349 364 350 364 349 364 350 350 364 350 350 364 350 349 364 350 364 348 348 364 348 364 348 364 364 364 365 365 350
348 349 363 349 349 349 349 349 348 348 349 349 349 349
608
Addr. 560006 561006 562006 563006 564006 565006 566006 567006 568006 569006 56A006 56B006 56C006 56D006 56E006 56F006 570006 571006 572006 573006 574006 575006 576006 577006 578006 579006 57A006 57B006 57C006 57D006 57E006 57F006 580006 581006 582006 583006 584006 585006 586006 587006 588006 589006 58A006 58B006 58C006 58D006 58E006 58F006 Name addtCEIL xSYMCEIL addtIP xSYMIP addtFP xSYMFP addtXPON xSYMXPON addtMANT xSYMMANT addtLNP1 xSYMLNP1 addtLOG xSYMLOG addtALOG xSYMALOG addtEXPM xSYMEXPM1 factorial facts addtFACT xSYMFACT factzint addtNOT xSYMNOT Verbose1 Verbose2 Verbose3 VerboseN GETERABLEMSG ERABLEERROR CANTFACTOR TRANSCERROR NONUNARYERR INTERNALERR INVALIDOP ISOLERR NONINTERR INTVARERR Z>#ERR Z<0ERR VXINDEPERR NONPOLYSYST COMPLEXERR VALMUSTBE0 SWITCHNOTALLOWED ERR$EVALext Sys1IT Page 365 350 365 350 365 350 365 350 365 350 365 350 365 350 365 350 365 350 350 350 365 350 330 365 350 417 417 417 417 403 403 403 403 403 403 403 404 404 404 404 404 404 404 404 404 404 404 404 Addr. 001007 002007 003007 004007 005007 006007 007007 008007 009007 00A007 00B007 00C007 00D007 073007 074007 075007 076007 077007 078007 079007 07A007 07B007 07C007 07D007 07E007 07F007 080007 081007 082007 083007 084007 085007 086007 087007 088007 089007 08A007 08B007 08C007 08D007 08E007 08F007 090007 091007 092007 093007 094007 095007
Page 65 65 338
DEB.MATRIX DEB.MATRIXTYPE QpiZ QPI QpiSym QpiArry QpiList Qpi Qpi% GetRoot Approx #FACT CHECKSING DESOLVE ODE_INT LINSOLV LDECSOLV LDEGENE LDEPART LDSSOLVext ODETYPESTO ODE_SEPAR LAPext ILAPext ILAPRAText ILAPDELTA ILAPEXP ILAPEXPSC MENUext WRITEMENU CFGDISPLAY NEWVX NEWMODULO SWITCHON SWITCHOFF FLAGNAME COMPLEXON
418 418 419 419 419 419 419 419 419 330 402 391 390 342 391 391 391 391 391 392 392 392
392 409 293 405 405 405 405 405 405 406
560006 0F5007
Addr. 096007 097007 098007 099007 09A007 09B007 09C007 09D007 09E007 09F007 0A0007 0A1007 0A2007 0A3007 0A4007 0A5007 0A6007 0A7007 0A8007 0A9007 0AA007 0AB007 0AC007 0AD007 0AE007 0AF007 0B0007 0B1007 0B2007 0B3007 0B4007 0B5007 0B6007 0B7007 0B8007 0B9007 0BA007 0BB007 0BC007 0BD007 0BE007 0BF007 0C0007 0C1007 0C2007 0C3007 0C4007 0C5007 Name COMPLEXOFF EXACTON EXACTOFF COMPLEXMODE SETCOMPLEX COMPLEX? REALMODE CLRCOMPLEX EXACTMODE SETEXACT NUMMODE CLREXACT EXACT? STEPBYSTEP NOSTEPBYSTEP VERBOSEMODE SILENTMODE RECURMODE NONRECMODE PLUSAT0 SETPLUSAT0 PLUSATINFTY CLRPLUSAT0 SPARSEDATA FULLDATA RIGORMODE SLOPPYMODE SLOPPY? MENUCHOOSE? MENUCHOOSE MENUGENE1 MENUBASE1 MENUCMPLX1 MENUTRIG1 MENUMAT1 MENUARIT1 MENUSOLVE1 MENUEXPLN1 MENUDIFF1 PROMPTSTO1 XGROBext GROBADDext DISPLAYext SCROLLext RCLMODULO RCLPERIOD RCLVX STOVX Page 406 406 406 406 406 406 406 406 406 406 406 406 406 407 407 407 407 407 407 407 407 407 407 407 407 407 407 408 409 409 409 409 409 409 409 409 410 410 410 167 98 92 98 281 408 408 408 408 Addr. 0C6007 0C7007 0C8007 0C9007 0CA007 0CB007 0CC007 0CD007 0CE007 0CF007 0D0007 0D1007 0D2007 0D3007 0D4007 0D5007 0D6007 0D7007 0D8007 0D9007 0DA007 0DB007 0DC007 0DD007 0DE007 0DF007 0E0007 0E1007 0E2007 0E3007 0E4007 0E5007 0E6007 0E7007 0E8007 0E9007 0EA007 0EB007 0EC007 0ED007 0EE007 0EF007 0F0007 0F1007 0F2007 0F3007 0F4007 0F5007 Name STOMODULO RCLEPS ISIDREAL? ADDTOREAL RESETCASCFG FRACPARITY POLYPARITY PARITYTEST COSTEST SHRINKEVEN SINTEST SHRINK2SYM SHRINKSYM SHRINK2ASYM SHRINKASYM FR2ND% POLYSYM POLYASYM P2P# NDEvalN/D PEvalN/D POSITIFext SIGNE1ext SIGNEext SIGNUNDEF SIGNPLUS SIGNMOINS SIGNELN SIGNEEXP SIGNESIN SIGNECOS SIGNETAN SIGNEATAN SIGNESQRT SUBSIGNE SIGNERIGHT SIGNELEFT >SIGNE SIGNE> SIGNMULText ZSIGNECK SIGNEERROR ZSIGNE zsigne PASCAL_NEXTLINE DELTAPSOLVE SOLVEMETASYST REDUCEMETASYST
609
Page 408 408 408 408 408 425 380
379 379 379 379 379 425 380 380 374 394 394 401 400 400 400 400 401 401 401 401 401 401 401 401 401 401 401 401 401 401 404 401 402 385 385 342 342
610
Addr. 0F6007 0F7007 0F8007 0F9007 0FA007 0FB007 0FC007 0FD007 0FE007 0FF007 100007 101007 102007 103007 104007 105007 106007 107007 108007 109007 10A007 10B007 10C007 10D007 10E007 10F007 110007 111007 112007 113007 114007 115007 116007 117007 118007 119007 11A007 11C007 1DC007 1DD007 0000AB 0010AB 0020AB 0030AB 0040AB 0050AB 0060AB 0070AB Name REDUCEMETAPSYST SOLVECRAMER QUOTExSIGMA SUM FLAGSUM SUMVX FLAGSUMVX RATSUM FTAYL CSTFRACTION? NONRATSUM LINEARAPPLY linearapply meta_cst? HYPERGEO fk+1/fk A/B2PQR GOSPER? ZEILBERGER SYMPSI sympsi SYMPSIN sympsin IBERNOULLI FLAGRESULTANT RESULTANT RESULTANTLP RESPSHIFTQ ADDONEVAR IROOTS TYPEGAUSSINT? DTYPEGAUSSINT? DUPTYPEGAUSSINT? PPZZ DISTRIB* NONALGERR ALGCASCOMPEVAL %%PSI PUSHFLAGS POPFLAGS xXVOL xYVOL xZVOL xXXRNG xYYRNG xEYEPT xNUMX xNUMY Page 342 342 393 393 393 393 393 393 425 393 393 425 425 393 393 394 394 380 379 379 379 379 382 200, 333 200, 333 201, 333 424 368 404 353 394 405 405 476 476 477 476 477 459 465 465 Addr. 0080AB 0090AB 00A0AB 00B0AB 00C0AB 00D0AB 00E0AB 00F0AB 0110AB 0120AB 0130AB 0150AB 0160AB 0170AB 0180AB 0190AB 01A0AB 01B0AB 01C0AB 01D0AB 01F0AB 0200AB 0210AB 0220AB 0230AB 0240AB 0250AB 0260AB 0270AB 0280AB 0290AB 02A0AB 02B0AB 02C0AB 02D0AB 02E0AB 02F0AB 0300AB 0310AB 0320AB 0330AB 0340AB 0350AB 0360AB 0370AB 0380AB 0390AB 03A0AB
0F6007 0630B3
Addr. 03B0AB 03C0AB 03D0AB 03E0AB 03F0AB 0400AB 0440AB 0450AB 0460AB 0470AB 0480AB 0490AB 04A0AB 04B0AB 04C0AB 04D0AB 04E0AB 04F0AB 0500AB 0520AB 0530AB 0540AB 0550AB 0560AB 0570AB 0580AB 0590AB 05A0AB 05B0AB 05D0AB 05E0AB 05F0AB 0600AB 0610AB 0620AB 0630AB 0640AB 0650AB 0660AB 0670AB 0680AB 0690AB 06A0AB 06B0AB 06C0AB 06D0AB 06E0AB 06F0AB Name xDIAG xROWxROW+ xCOLxCOL+ xRSWP xPROOT xPCOEF xPEVAL xTVM xTVMBEG xTVMEND xTVMROOT xAMORT xINFORM xCHOOSE xMSGBOX xXSEND xXRECV xTAIL xSEQ xDOSUBS xLIST xNSUB xENDSUB xSTREAM xLIST xLIST xDOLIST xREVLIST xSORT xZFACTOR xFANNING xDARCY xF0 xSIDENS xTDELTA xTINC xgmol xlbmol xrpm xdB xPINIT xDRAW3DMATRIX xKEYTIME xKEYTIME xXSERV xROMUPLOAD Page 457 470 470 455 455 470 467 466 466 474 474 474 474 453 462 455 465 476 476 473 471 458 460 465 458 472 461 466 457 469 471 477 459 456 459 471 473 473 Addr. 0700AB 0710AB 0720AB 0730AB 0740AB 0750AB 0760AB 0770AB 0050B0 0060B0 0860B0 0870B0 0C80B0 0D80B0 0DE0B0 0000B1 0040B1 0000B3 0050B3 0060B3 0070B3 0150B3 0190B3 0220B3 0230B3 0240B3 0250B3 0260B3 0280B3 0290B3 02F0B3 0370B3 0380B3 03B0B3 03C0B3 03D0B3 03E0B3 03F0B3 04B0B3 0520B3 0530B3 0540B3 0590B3 05A0B3 05B0B3 05C0B3 05F0B3 0630B3 Name xXGET xXPUT xMSOLVR xMINIT xMITM xMUSER xMCALC xMROOT IFMenuRow1 IFMenuRow2 grobAlertIcon grobCheckKey gFldVal sFldVal nNullBind DoMsgBox MsgBoxMenu Choose ChooseMenu0 ChooseMenu1 ChooseMenu2 BBMoveTo BBRecalOff&Disp BBRunEntryProc BBReReadPageSize BBReReadHeight BBReReadCoords BBReReadWidth BBRunENTERAction BBRunCanclAction BBReDrawBackgr BBGetNGrob BBGetNStr BBRereadChkEnbl BBRereadFullScr BReReadMenus BBReReadNElems BBGetN BBIsChecked? BBUpArrow BBDownArrow BBSpace BBPgDown BBPgUp BBEmpty? BBGetDefltHeight $>grobOrGROB ChooseSimple
611
Page 475 476 465 465 465 465 464 465 257 257 90 90
117 283 244 244 244 244 245 245 245 245 245 245 245 245 245 245 245 245 246 246 246 246 246 246 246 246 246 246 246 246 246 96 244
612
Addr. 0000DD 0010DD 0020DD 0030DD 0040DD 0050DD 0060DD 0070DD 0080DD 0090DD 00A0DD 00B0DD 00C0DD 00D0DD 00E0DD 00F0DD 0100DD 0110DD 0120DD 0130DD 0140DD 0150DD 0160DD 0000DE 0010DE 0020DE 0030DE 0040DE 0050DE 0060DE 0070DE 0080DE 0090DE 00A0DE 00B0DE 00C0DE 00D0DE 00E0DE 00F0DE 0100DE 0110DE 0120DE 0130DE 0140DE 0150DE 0160DE 0170DE 0180DE Name xLANGUAGE xLANGUAGE xFONT xFONT xHEADER xHEADER xNDISP xEDIT xVISIT xEDITB xVISITB xEQW xFILER xFONT8 xFONT7 xFONT6 xSREPL xMINIFONT xMINIFONT xRENAME xUFL1MINIF xDBUG xDISPXY xADDTOREAL xSIGMAVX xSIGMA xPsi xPSI xRESULTANT xIBERNOULLI xGAMMA xqr xGRAMSCHMIDT xSYST2MAT xCHOLESKY xDIAGMAP xISOM xMKISOM xKER xIMAGE xBASIS xIBASIS xAUGMENT xPMINI xCYCLOTOMIC xSTURM xSTURMAB xFDISTRIB Page 463 463 459 459 461 461 465 458 475 458 475 458 459 459 459 459 471 464 465 469 474 456 457 453 471 471 467 467 469 461 460 Addr. 0190DE 01A0DE 01B0DE 01C0DE 01D0DE 01E0DE 01F0DE 0200DE 0210DE 0220DE 0230DE 0240DE 0250DE 0260DE 0270DE 0280DE 0290DE 02A0DE 02B0DE 02C0DE 02D0DE 02E0DE 02F0DE 0300DE 0310DE 0320DE 0330DE 0340DE 0350DE 0360DE 0370DE 0380DE 0390DE 03F0DE 0400DE 0030E0 0100E0 0130E0 0180E0 0190E0 0120E4 0110E7 02E0E7 02F0E7 01E0E8 000100 001100 002100
471
455
455
468 472
246
0000DD 03C314
Addr. 003100 004100 005100 006100 007100 008100 009100 00A100 00B100 00C100 00D100 00E100 00F100 010100 011100 012100 013100 014100 015100 016100 017100 018100 019100 01A100 01B100 01C100 01D100 01E100 01F100 020100 021100 001102 002102 003102 004102 000314 001314 002314 003314 004314 005314 006314 007314 008314 009314 00A314 00B314 00C314 Name xA xAH xHA xCD xCD xSH xHS xLST xALG xPRG xCOMP xRAM xSREV xPOKE xPEEK xAPEEK xRSB xSBB xLRR xSN xLCC xASM xBetaTesting xCRLIB xCRC xMAKESTR xSERIAL xASM xER xS2 xXLIB xGETADR xGETNAME xGETNAMES xGETNEAR xEXPAND xFACTOR xSUBST xDERVX xINTVX xLIMIT xTAYLOR0 xSERIES xSOLVEVX xPLOT xPLOTADD xIBP xPREVAL Page 478 478 478 478 478 478 478 478 478 478 478 478 478 478 478 478 478 479 479 479 479 479 479 479 479 479 479 479 479 479 479 479 479 479 479 459 459 472 457 462 463 473 471 471 466 461 467 Addr. 00D314 00E314 00F314 010314 011314 012314 013314 014314 015314 016314 017314 018314 019314 01A314 01B314 01C314 01D314 01E314 01F314 020314 021314 022314 023314 024314 025314 026314 027314 028314 029314 02A314 02B314 02C314 02D314 02E314 02F314 030314 031314 032314 033314 034314 035314 036314 037314 038314 039314 03A314 03B314 03C314 Name xRISCH xDERIV xDESOLVE xLAP xILAP xLDEC xTEXPAND xLIN xTSIMP xLNCOLLECT xEXPLN xSINCOS xTLIN xTCOLLECT xTRIG xTRIGCOS xTRIGSIN xTRIGTAN xTAN2SC xHALFTAN xTAN2SC2 xATAN2S xASIN2T xASIN2C xACOS2S xDIV2 xIDIV2 xQUOT xIQUOT xREMAINDER xIREMAINDER xGCD xLCM xEGCD xIEGCD xABCUV xIABCUV xLGCD xSIMP2 xPARTFRAC xPROPFRAC xPTAYL xHORNER xEULER xPA2B2 xCHINREM xICHINREM xISPRIME?
613
Page 469 457 457 463 462 463 473 463 474 464 459 471 473 473 474 474 474 474 473 461 473 454 454 454 453 457 461 468 462 469 462 460 463 458 462 453 461 463 471 466 467 467 461 458 466 455 461 462
614
Addr. 03D314 03E314 03F314 040314 041314 042314 043314 044314 045314 046314 047314 048314 049314 04A314 04B314 04C314 04D314 04E314 04F314 050314 051314 052314 053314 054314 055314 056314 057314 058314 059314 05A314 05B314 05C314 05D314 05E314 05F314 060314 061314 062314 063314 064314 065314 Name xNEXTPRIME xPREVPRIME xSOLVE xZEROS xFCOEF xFROOTS xFACTORS xDIVIS xTRAN xHADAMARD xrref xREF xAXM xAXL xQXA xAXQ xGAUSS xSYLVESTER xPCAR xJORDAN xMAD xLINSOLVE xVANDERMONDE xHILBERT xLCXM xDIV xCURL xLAPL xHESS xLEGENDRE xTCHEBYCHEFF xHERMITE xLAGRANGE xFOURIER xSIGNTAB xTABVAR xTABVAL xDIVPC xTRUNC xSEVAL xTEVAL Page 465 467 471 477 459 460 459 457 474 461 470 469 454 454 468 454 460 473 466 463 464 463 475 461 463 457 456 463 461 463 473 461 463 459 471 473 473 457 474 471 473 Addr. 066314 067314 068314 069314 06A314 06B314 06C314 06D314 06E314 06F314 070314 071314 072314 073314 074314 075314 076314 077314 078314 079314 07A314 07B314 07C314 07D314 07E314 07F314 080314 080314 081314 082314 083314 084314 085314 086314 087314 088314 089314 08A314 08B314 08C314