Programming in System RPL
Transcription
Programming in System RPL
Programming in System RPL Eduardo M Kalinowski Carsten Dominik Second Edition Preface to the Second Edition Back in 1998, when the first edition of this book was released, it proved to be a good tutorial for new learners of System RPL, and also a good rerefence for more experienced programs. However, there was still room for improvement. And when the HP49G calculator was released, the need for a second edition of this book was even greater, because no document describing all its new features existed. For these reasons, we have put together this new edition. Those who have used the first edition of this document will find many changes and improvements, and also some 400 additional pages :-). The structure of the book has been totally changed, with the tutorial and reference parts merged. All the text has been revised and corrected. Some chapters were completely rewritten in order to make them easier to understand and more useful. There are also new chapters, describing new HP49 features, and also about things that were not described in the first edition. We hope this book is a valuable resource for those that already knew System RPL on the HP48 and wanted more information on the new HP49 features, and for those that want to start learning System RPL in order to discover more of the power of the HP49. April 24, 2002 Eduardo de Mattos Kalinowski Carsten Dominik i Preface to the First Edition The programming features of the HP48 graphical calculator are very powerful. They allow you to do virtually anything. However, the documented programming functions, that are directly accessible to the user (the user language), is not everything the calculator can do. There is another language: the System language. The User language is a subset of the System one, with just some commands and just a fraction of its power. However, the System language is not well documented. The existing documents on that subject are turned to someone who already knows it; they are just listings of the commands with some brief descriptions. Once you already know the language, even the brief descriptions can be left out, and those documents are really a very good source of information. But how does one learn System RPL? The purpose of this book is exactly that: to be a way for someone who has already learned User RPL (if you have not yet, learn it before, then come back to this), and wants to learn the real power of the calculator. July 12, 1998 Eduardo de Mattos Kalinowski 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 first 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 Brébisson Stefan Ehlen Len Fellman Peter Geelhoed Christoph Gießelink Raymond Hellstern Jordi Hidalgo Joe Horn Werner Huysegoms David Kastrup Dan Kirkland Piotr Kowalewski Daniel Lidström Andreas Matthias Andreas Möller 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, unmodified 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 i Preface to the First Edition ii Acknowledgments iii Disclaimer iv 1 Introduction 1 I 7 HP49 Objects 2 Binary Integers (BINTS) 9 3 Real Numbers 27 4 Complex Numbers 36 5 Integers (ZINTS) 39 6 Characters and Strings 40 7 Hex Strings 56 8 Identifiers 60 9 Tagged Objects 61 10 Arrays 63 11 Composite Objects 67 12 Meta Objects 75 13 Unit Objects 80 v vi SHORT CONTENTS 14 Symbolics 85 15 Graphics Objects (Grobs) 89 16 Library and Backup Objects 99 II General System RPL Entries 103 17 Stack Operations 105 18 Temporary Environments 111 19 Runstream Control 120 20 Conditionals 132 21 Loops 147 22 Error Handling 153 23 The Virtual Stack 159 24 Memory Operations 165 25 Time and Alarms 172 26 System Functions 175 27 Serial Communications 180 28 The HP49 Filer 182 III 189 Input and Output 29 Checking for Arguments 191 30 Keyboard Control 202 31 Using InputLine 209 32 The Parameterized Outer Loop 213 SHORT CONTENTS vii 33 Using the HP49 Browser 225 34 Using the HP48 Browser 235 35 Creating Input Forms 248 36 The Display 268 37 The Menu 284 38 Programming the HP49 Editor 295 39 Plotting 315 IV 319 The HP49 CAS 40 Introduction to the HP49 CAS 321 41 Type Checking and Conversion 325 42 Integers 327 43 Matrices 336 44 Expression Manipulation 347 45 Symbolic Meta Handling 359 46 Polynomials 371 47 Root Finding 381 48 Calculus Operations 386 49 Summation 393 50 Modular Operations 395 51 Sign Tables 400 52 Errors 403 53 CAS Configuration 405 viii SHORT CONTENTS 54 CAS Menus 409 55 Internal Versions of User RPL Commands 411 56 Miscellaneous 417 V 427 Appendices A Development Tools 429 B Creating Libraries 447 C User RPL Commands 453 D Library 256 and EXTABLE 478 E Error Messages 480 VI 497 Index F Entries sorted by Name 499 G Entries sorted by Address 557 Contents Preface to the Second Edition i Preface to the First Edition ii Acknowledgments iii Disclaimer iv 1 Introduction 1.1 Your First System RPL Program . . . . . . . . . . . . . . . . . . . . 1.2 About the Entries Listing . . . . . . . . . . . . . . . . . . . . . . . . 1 3 5 I 7 HP49 Objects 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 10 10 21 22 23 25 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 28 28 30 31 31 31 33 35 4 Complex Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 ix x CONTENTS 4.1 Reference . . . . . . . . . . . . . . . 4.1.1 Builtin Complex Numbers 4.1.2 Conversion . . . . . . . . . . 4.1.3 Functions . . . . . . . . . . 4.1.4 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Integers (ZINTS) 39 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 . . . . . . . . 36 36 37 37 38 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 41 41 43 46 46 47 50 51 55 . . . . 56 56 56 57 58 8 Identifiers 60 9 Tagged Objects 9.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 61 10 Arrays 10.1 Reference . . . . . . . . . . 10.1.1 General Functions 10.1.2 Conversion . . . . . 10.1.3 Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 64 64 65 66 11 Composite Objects 11.1 Reference . . . . . . . . . . . 11.1.1 General Operations 11.1.2 Building . . . . . . . 11.1.3 Exploding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 68 68 71 71 CONTENTS 11.1.4 11.1.5 xi Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Secondaries . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 73 . . . . . 75 75 75 76 77 77 . . . . . 80 81 81 82 83 83 . . . . 85 86 86 88 88 . . . . . . . . 89 90 90 90 90 93 95 96 98 . . . . . 99 99 99 100 100 101 xii II CONTENTS General System RPL Entries 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 111 112 113 114 116 116 116 116 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 120 122 124 128 130 131 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 132 133 133 135 135 137 137 140 142 143 144 146 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Loops 147 21.1 Indefinite Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 21.1.1 How Indefinite Loops Work . . . . . . . . . . . . . . . . . . 148 CONTENTS 21.2 Definite Loops . . . . . . . . . . . 21.2.1 How a DO Loop Works . 21.3 Reference . . . . . . . . . . . . . 21.3.1 Indefinite Loops . . . . . 21.3.2 Definite Loops . . . . . . xiii . . . . . 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 150 150 150 151 . . . . . . 153 153 154 155 156 156 157 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 CONTENTS 28.1.3.1 28.1.3.2 28.1.3.3 28.1.3.4 28.1.3.5 28.2 Reference . . . III Name_Item . . . . . Location_Item . . . Action_Item . . . . . ExtraProgram_Item Key_Shortcut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 183 184 186 187 188 Input and Output 189 29 Checking for Arguments 29.1 Number of Arguments . 29.2 Argument Type . . . . . 29.2.1 Examples . . . 29.3 Reference . . . . . . . . 29.3.1 Type Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 191 193 195 196 198 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 202 204 205 205 205 207 207 208 . . . . . . . . . . . . . . . 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 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 235 238 239 239 239 239 240 244 247 35 Creating Input Forms 35.1 Label Definitions . . . . . . . . . . . . . 35.2 Field Definitions . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 249 249 251 252 253 253 253 257 257 262 262 262 262 262 . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi CONTENTS 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 . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 285 286 288 288 291 292 293 293 . . . . . . . . . . . . . 295 295 296 299 300 300 301 302 304 306 308 309 310 311 39 Plotting 315 39.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 IV The HP49 CAS 40 Introduction to the HP49 CAS 40.1 Problems with These Chapters . . . . . . . . . . . . . . . . . . . . . 40.2 Symbolic Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40.3 A Few Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 321 321 322 323 41 Type Checking and Conversion 325 41.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 xviii CONTENTS 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 327 327 327 329 330 333 334 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 337 337 338 339 339 341 342 342 345 . . . . . . . . . 44 Expression Manipulation 44.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . 44.1.1 Basic Operations and Function Application 44.1.2 Trigonometric and Exponential Operators . 44.1.3 Simplification, Evaluation and Substitution 44.1.4 Collection and Expansion . . . . . . . . . . . 44.1.5 Trigonometric Transformations . . . . . . . 44.1.6 Division, GCD and LCM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 347 347 351 353 355 356 357 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 Infinity and Undefs . . . . . . . . . . . . . . 45.1.5 Expansion and Simplification . . . . . . . . 45.1.6 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 359 359 360 365 367 368 370 46 Polynomials 371 46.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 CONTENTS 46.1.1 46.1.2 46.1.3 46.1.4 xix Computation with Polynomials Factorization . . . . . . . . . . . General Polynomial Operations Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 373 377 380 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 Configuration 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 CONTENTS 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 Infinity . . . . . . . . . . . . . . . 56.1.6 Built-In Constants . . . . . . . . 56.1.7 List Application . . . . . . . . . . 56.1.8 Irrquads . . . . . . . . . . . . . . 56.1.9 Miscellaneous . . . . . . . . . . . V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Appendices 417 417 417 418 418 419 420 420 421 422 427 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 MASD’s 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 430 430 432 435 435 437 437 438 439 439 439 440 441 444 445 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 447 449 449 450 452 . . . . . . . . . . . . . . . . . . . . C User RPL Commands 453 C.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 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 497 Index F Entries sorted by Name 499 G Entries sorted by Address 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 flashpointer). 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 2 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 efficient (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 find 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- 1.1. Your First System RPL Program 3 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 classified 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 classified 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 025ECh–0B3C7h and 25565h–40000h 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 flashpointer 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 flash 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 Your First System RPL Program 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 file, you will find it with the name first. 4 1 5 1. Introduction :: CK1NOLASTWD CK&DISPATCH1 BINT1 :: %2 %^ %PI %* ; ; (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 first column are also comments. The first 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. About the Entries Listing 1.2 5 About the Entries Listing 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 infinite precision integer positive infinite 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 1. Introduction Meaning angle (a real number) integer (ZINT or real) date in DD.MMYYYY or MM.DDYYYY format global name program function integral of f Part I HP49 Objects Chapter 2 Binary Integers (BINTS) Binary integers are the objects you will use most often. They are not the user-level binary integers (those that you enter starting with #); these are actually hexadecimal strings, described in Chapter 7. These system-level binary integers (called bints for short) are objects which are not so easily accessible to the user. If you happen to have one in the stack, they show like ¤ 10h. Try this if you are using a HP49: enter the following number in the stack (triple check if it is right): #3316Bh. Now, type SYSEVAL and press ENTER. You should get ¤ 10h in the stack, or perhaps ¤ 16d (or even something else), depending on the number base you are using. Internally, they are always in hexadecimal mode. With the HP49 and library 256 attached (see Appendix A), you can use the commands R˜SB and SB˜B to convert reals and user-level binary numbers into bints, respectively, and vice-versa. Bints are the objects you will use most often because most commands that require a numeric argument need it in the form of a binary integer, as opposed to the real numbers needed by user functions. So, they should be easy to create. And, indeed, they are. You can put one in stack just by entering it on your program (in decimal form). But that is not recommended at all times, because you can also put a real number in stack by just entering it in the same way (we will see later how to differ one from another). So, it is a good idea to use the following structure: # <hex>. This way, you can be sure you will get a binary number, and your code is clearer. Unfortunately (or fortunatelly), you must use hexadecimal representation. In the HP49G ROM, there are many “built-in” binary numbers. You can put one of these in the stack by just calling its address. Since almost all of them are supported, to get #6h in the stack, you just use the word BINT6. The main advantage is that if you enter # 6, it takes five bytes. The word BINT6, as all other commands (except rompointer and flashpointer commands), take only 2.5 bytes. Some words put two or even three bints in the stack, so the savings are even greater. Following, there is a list of built-in bints. The four basic operations with bints are #+, #-, #* and #/. There are 9 10 2. Binary Integers (BINTS) 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 5 :: 13 (13d or Dh) # D (the same, using preferred method) BINT13 (in this case, this method is shorter) ; 2.1 Reference 2.1.1 Built-in Binary Integers Addr. 33107 Name BINT0 33111 BINT1 3311B BINT2 33125 BINT3 3312F BINT4 33139 BINT5 33143 BINT6 3314D BINT7 33157 BINT8 33161 BINT9 3316B 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 2.1. Reference Addr. 33175 Name BINT11 3317F BINT12 33189 BINT13 33193 BINT14 3319D BINT15 331A7 BINT16 331B1 BINT17 331BB BINT18 331C5 BINT19 331CF BINT20 331D9 BINT21 331E3 BINT22 331ED BINT23 331F7 BINT24 33201 BINT25 3320B BINT26 33215 BINT27 3321F BINT28 33229 BINT29 11 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 12 2. Binary Integers (BINTS) Addr. 33233 Name BINT30 3323D BINT31 33247 BINT32 33251 BINT33 3325B BINT34 33265 BINT35 3326F BINT36 33279 BINT37 33283 BINT38 3328D BINT39 33297 BINT40 332A1 BINT41 332AB BINT42 332B5 BINT43 332BF BINT44 332C9 BINT45 332D3 BINT46 332DD BINT47 332E7 BINT48 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 Name BINT49 332FB BINT50 33305 BINT51 3330F BINT52 33319 BINT53 33323 BINT54 3332D BINT55 33337 BINT56 33341 BINT57 3334B BINT58 33355 BINT59 3335F BINT60 33369 BINT61 33373 BINT62 3337D BINT63 33387 BINT64 33391 BINT65 3339B BINT66 333A5 BINT67 13 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 14 2. Binary Integers (BINTS) Addr. 333AF Name BINT68 333B9 BINT69 333C3 BINT70 333CD 333D7 333E1 333EB BINT71 BINT72 BINT73 BINT74 333F5 333FF 33409 33413 3341D BINT75 BINT76 BINT77 BINT78 BINT79 33427 BINT80 33431 BINT81 3343B BINT82 33445 BINT83 3344F BINT84 33459 BINT85 33463 BINT86 3346D BINT87 33477 33481 3348B 33495 BINT88 BINT89 BINT90 BINT91 3349F BINT92 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 Name BINT93 BINT94 BINT95 BINT96 334D1 BINT97 334DB 334E5 334EF BINT98 BINT99 BINT100 334F9 33503 3350D 33517 33521 3352B 33535 3353F 33549 33553 3355D BINT101 BINT102 BINT103 BINT104 BINT105 BINT106 BINT107 BINT108 BINT109 BINT110 BINT111 33567 33571 3357B 33585 BINT112 BINT113 BINT114 BINT115 3358F BINT116 33599 335A3 335AD 335B7 335C1 335CB BINT117 BINT118 BINT119 BINT120 BINT121 BINT122 335D5 335DF BINT123 BINT124 15 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 16 2. Binary Integers (BINTS) Addr. 335E9 335F3 335FD 33607 Name BINT125 BINT126 BINT127 BINT128 33611 3361B BINT129 BINT130 33625 BINT131 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 (#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 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) 17 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 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 2. Binary Integers (BINTS) 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) 19 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 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 2. Binary Integers (BINTS) 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 2.1.2 Name (#D6A8) (#FFFF) (#102A8) (#2D541) (#37258) (#414C1) (#536A8) (#61441) #EXITERR (#A8241) (#B437D) (#E13A8) MINUSONE 21 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 Pushing Several BINTs Addr. 37287 37294 37305 36B12 Name ZEROZERO #ZERO#ONE #ZERO#SEVEN ONEONE 37315 37328 3733A 3734A 3735C 3736E 37380 37394 373A8 3558C 355A5 3596D 36AD6 36AEA 36B26 36AFE #ONE#27 #TWO#ONE #TWO#TWO #TWO#FOUR #THREE#FOUR #FIVE#FOUR ZEROZEROZERO ZEROZEROONE ZEROZEROTWO DROPZERO 2DROP00 DROPONE DUPZERO DUPONE DUPTWO SWAPONE Description ( → #0 #0 ) ( → #0 #1 ) ( → #0 #7 ) ( → #1 #1 ) aka: ONEDUP ( → #1 #27d ) ( → #2 #1 ) ( → #2 #2 ) ( → #2 #4 ) ( → #3 #4 ) ( → #5 #4 ) ( → #0 #0 #0 ) ( → #0 #0 #1 ) ( → #0 #0 #2 ) ( ob → #0 ) ( ob ob → #0 #0 ) ( ob → #1 ) ( ob → ob ob #0 ) ( ob → ob ob #1 ) ( ob → ob ob #2 ) ( ob ob' → ob' ob #1 ) 22 2. Binary Integers (BINTS) Addr. 35E75 360BB 36568 35EA2 3657C 2.1.3 Name ZEROSWAP ZEROOVER ZEROFALSE ONESWAP ONEFALSE Description ( ob → #0 ob ) ( ob → ob #0 ob ) ( → #0 F ) ( ob → #1 ob ) ( → #1 F ) Conversion Addr. 262F1 35D08 35EB6 3F481 262EC 2F244 Name COERCE COERCEDUP COERCESWAP COERCE2 %ABSCOERCE (COERCE&CKSGN) 2F31F 05A03 2F17E C%># HXS># 2HXSLIST? 05A51 0EF006 CHR># ˆZ2BIN 19D006 ˆZ># 0F0006 ˆCOERCE2Z 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 overflows. Returns 0 for negative numbers. ( z → # ) Coerces Z to #, overflow error if Z<0 or Z>9999. 10000 is used to insure that the #*6 can be represented in BCD on a 5 nibbles field. ( z2 z1 → #2 #1 ) Converts 2 zints to bints. 2.1. Reference 2.1.4 23 Arithmetic Functions Addr. 03DBC 03DEF 03E2D 355FD 35602 35607 3560C 35611 35616 3561B 35620 3562A 03DE0 2F13D Name #+ #1+ #2+ #3+ #4+ #5+ #6+ #7+ #8+ #9+ #10+ #12+ #(CK#-) 03E0E 03E4E 355DF 355DA 355D5 355D0 03EC2 2632D #1#2#3#4#5#6#* #*OVF 03E6F 356B8 3569B 35675 03EF7 03E8E #2* #6* #8* #10* #/ #2/ 36815 #1- 36851 #1-+ 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-+ 24 2. Binary Integers (BINTS) Addr. 35552 357FC 35E39 36093 3581F 35E4D 360A7 35830 35E61 2F222 35841 28071 Name #-#2/ #+DUP #+SWAP #+OVER #-DUP #-SWAP #-OVER #1+DUP #1+SWAP #1+ROT #1-DUP #1-SWAP 3601B 281D5 35E89 #1-ROT #1-UNROT #1-1SWAP 35912 3571E 35956 3674D DUP#1+ DUP#2+ DUP#12DUP#+ 3683D 357BB 3592B DROP#1SWAP#SWAP#1+ 29786 ('RSWAP#1+) 28099 36829 280AD 28989 367ED 36775 367C5 36761 367B1 36801 28001 SWAP#1+SWAP SWAP#1SWAP#1-SWAP (SWAPDROP#1-) SWAPOVER#OVER#+ OVER#ROT#+ ROT#ROT#1+ ROT#1+UNROT 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 25 Addr. 35E07 Name ROT#+SWAP 36789 3679D 35E20 3PICK#+ 4PICK#+ 4PICK#+SWAP 35511 3551D 03EB1 #MIN #MAX #AND 2.1.5 Description ( # ob #' → #'+# aka: ROT+SWAP ( # ob #' → # ob ( # ob1 ob2 #' → ( # ob1 ob2 #' → aka: 4PICK+SWAP ( # #' → #'' ) ( # #' → #'' ) ( # #' → #'' ) Bitwise AND. Tests Addr. 03D19 03D4E 03CE4 03D83 03CC7 03CA6 3530D 352FE 36711 352F1 352E0 366FD 366BC 36739 Name #= #<> #< #> #0<> #0= #1<> #1= #2<> #2= #3= #5= #<3 #>1 358C2 358F8 363CE 2DUP#< 2DUP#> ONE_EQ 35268 358DC 36694 352BD 366A8 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 ) ) ) ) ) ob ) #'+# ) # ob1 ob2 #'+# ) # ob1 #'+# ob2 ) 26 2. Binary Integers (BINTS) Addr. 3531C 36725 3532B 366D0 Name DUP#1= OVER#> DUP#0<> DUP#<7 36676 2#0=OR Description ( # → # flag ) ( # #' → # flag ) ( # → # flag ) ( # → # flag ) Returns TRUE if the argument is smaller then #7. ( # # → flag ) Returns TRUE if either argument is zero. Chapter 3 Real Numbers Real numbers can be created in two ways. The first is by just entering them, without any prefix. But this method can also be used to create bints. So how does the compiler know when you want a real number and when you want a bint? If the number includes a radix and/or an exponent, then it is a real number; otherwise it is a bint. Because of the possible confusion, the preferred method is to use the structure % <dec>. This way, you will surely get a real number, and the code becomes more readable. As for bints, there are also many built-in real numbers. They are listed below. The basic operations using real numbers are %+, %-, %*, %/ and %ˆ. But there are many others, which are listed below. There is also another kind of real number, which is not directly accessible to the user and to User RPL programs. They are the Extended (or Long) Real Numbers. They work like normal real numbers, with two differences: they have a 15-digit precision opposed to the 12-digit of the normal real numbers, and their exponents are in the range from -50000 to 50000. Extended real numbers are created using %% <dec>. If you happen to get one in the stack, they display like normal reals, but always in scientific notation. The basic operations are the same, except that they are prefixed with %% instead of %. Let me make thing one clear, if it is not already: in User RPL, + adds any kind of objects, for example real numbers, user binary integers (which are hexadecimal strings, as we will see later), adds elements to lists, etc. In System RPL, the word %+ only works for two real numbers. To add two binary integers, you must use #+. To add extended reals, the word is %%+. If you call a function with the wrong arguments, there is a possibility that your system will crash. To convert from a real number to an extended real number, you can use the command %>%%. The opposite function is %%>%. To convert from a bint to a (normal) real number, the function is UNCOERCE, and the opposite function is 27 28 3. Real Numbers COERCE. Below there is a list of more conversion functions, and other functions related to real numbers. 3.1 Reference 3.1.1 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 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 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) 29 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 30 Addr. 4EA76 2FAF5 2F180 3.1.2 3. Real Numbers Name (%TICKSweek) %MAXREAL 1REV Description 4954521600 9.99E499 ( → 6.28318530718 ) ( → 360. ) ( → 400. ) Returns the angle of a full circle, corresponding to the current angular mode. Built-in Extended Real Numbers Addr. 2FB49 2FBE5 30DC8 2FBFF 2DA11 Name %%0 %%.1 %%.4 %%.5 cfF 2FB63 2DA2B %%1 cfC 2FB7D 2FB97 2FADB 30017 2FBB1 2FBCB 27A89 30BEA 2FC19 30CC7 30CEB %%2 %%3 %%PI PI/180 %%4 %%5 %%2PI %%7 %%10 %%12 %%60 Description 0 0.1 0.4 0.5 0.555... %%5/9 for C↔F conversion. 1 1 For C↔K conversion. 2 3 π π/180 4 5 2π 7 10 12 60 3.1. Reference 3.1.3 Stack Manipulation Combined with Reals Addr. 282CC 3.1.4 31 Name (DROP%0) Description ( ob → %0 ) Conversion Addr. 2FFAC 35ECA 2FF9B 30E47 30E5B 262F6 3F495 36BFA 2EFCA 05D2C 2B3FD Name %>%% %>%%SWAP %%>% 2%>%% 2%%>% UNCOERCE UNCOERCE2 UNCOERCE%% HXS>% C%>% %IP># 0F6006 ˆZ>R 18A006 ˆZ2%% 197006 ˆOBJ2REAL 3.1.5 Addr. 3035F 25E69 26F36 3036C 26F4A 30346 303A7 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. 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 3. Real Numbers 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.1. Reference Addr. 30F28 3084D 30860 30837 Name TRCXY %COMB %PERM %NFACT 30AAF %FACT 3046C %NROOT 300F9 300E0 35DBC 309AD %MIN %MAX %MAXorder %RAN 30A2F %RANDOMIZE 30A66 DORANDOMIZE 303B4 303F6 3041B 3000D 30040 30E79 30EA6 30EDD %OF %T %CH %D>R %R>D %REC>%POL %POL>%REC %SPH>%REC 3.1.6 Addr. 3032E 3033A 30385 3602F 35EDE 36C7C 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 ) Extended Real Functions Name %%+ %%%%* %%*ROT %%*SWAP %%*UNROT Description ( %% %%' → ( %% %%' → ( %% %%' → ( ob ob' %% ( ob %% %%' ( ob ob' %% %%+%%' ) %%-%%' ) %%*%%' ) %%' → ob' %%+%%' ob ) → %%+%%' ob ) %%' → %%+%%' ob ob' ) 34 3. Real Numbers Addr. 303D3 36C22 36BE6 3044A 51D006 30612 30767 302DB 306F3 3073A 30757 306C3 302FB 3047D 30642 30653 307B2 30663 30507 30546 30984 Name %%/ SWAP%%/ %%/>% %%ˆ ˆCK%%SQRT %%SINRAD %%ANGLERAD %%ABS %%ACOSRAD %%ANGLE %%ANGLEDEG %%ASINRAD %%CHS %%1/ %%COS %%COSDEG %%COSH %%COSRAD %%EXP %%LN %%FLOOR 3057F 300C7 30E83 30EB0 305F1 30602 30780 304D5 30693 %%LNP1 %%MAX %%R>P %%P>R %%SIN %%SINDEG %%SINH %%SQRT %%TANRAD 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 3.1.7 35 Tests Addr. 302AC 302B7 3025C 302A1 30275 3028B 30156 36C0E 301BA Name %= %<> %< %<= %> %>= %0= DUP%0= %0<> 30123 30184 301E2 3020A 30296 3026A 30280 30145 301A6 30112 301F6 30173 301CE %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 flag into a system flag. ( % → flag ) ( % → flag ) ( % → flag ) ( %% %%' → flag ) ( %% %%' → falg ) ( %% %%' → flag ) ( %% %%' → flag ) ( %% → flag ) ( %% → flag ) ( %% → flag ) ( %% → flag ) ( %% → flag ) ( %% → flag ) Chapter 4 Complex Numbers Complex numbers can be inserted in your program with the following structure: C% <real> <imag>. The real and imaginary parts are real numbers, in decimal form. If you have the real and imaginary parts in the stack, the command %>C% will create a complex number from them. The command C%>% takes a complex number and returns the real and imaginary parts. There exists also the Extended (also called Long) Complex Numbers, which are not directly accessible to the user. They are complex number whose real and imaginary parts are extended reals. They can be inserted in your program with C%% <real> <imag>, where the real and imaginary parts are extended reals. They show in the stack as a normal complex number, but always in scientific notation. Below is a list of all the commands related to complex numbers, including mathematical operations. 4.1 Reference 4.1.1 Addr. 27DE4 27E09 27DBF 27E2E 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 4.1.2 Conversion Addr. 261D9 05C27 362F2 261FC 25E9C 25E9B 18C006 Name C%%>C% %>C% SWAP%>C% Re>C% C>Re% C>Im% ˆE%%>C%% 261CF 25E82 25E83 05DBC 188006 %%>C% C%>%% C%>%%SWAP C%%>%% ˆC2C%% 189006 ˆZZ2C%%ext 18B006 ˆC%>C%% 15E006 ˆRIXCext 15F006 ˆIRXCext 4.1.3 37 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. Functions Addr. 25E8F 25E90 25E94 25E84 50C006 Name C%CˆC C%CˆR C%RˆC C%ABS ˆCZABS 261ED 25E81 25E98 25E95 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 ) 38 4. Complex Numbers Addr. 261F2 25E88 25E91 25E92 25E93 25E87 25E96 25E8D 25E99 25E89 25E85 25E8B 25E97 25E8E 25E9A 25E8A 25E86 25E8C 261DE 261E3 515006 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 517006 ˆQUADRANT 51E006 ˆC%%SQRT 4.1.4 Addr. 261E8 261D4 Description ( C% → C%' ) ( C% → % ) ( C% → eˆC% ) ( C% → ln C% ) ( C% → log C% ) ( C% → 10ˆC% ) ( 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%%' ) Tests Name C%0= C%%0= Description ( C% → flag ) ( C%% → flag ) Chapter 5 Integers (ZINTS) This is a new object of the HP49. The integers (called ZINT’s for shorts) are a numerical type that can represent arbitrarily large integers. In most cases, you do not really need to worry about integers entered by the user as arguments for a program. The type checking mechanism (described in section 29.2) will in most cases transparently convert zints to real numbers. If you want to work with integers, however, there are several functions dealing with zints. Since this object type is really a part of the HP49 CAS, these functions are not described here. Instead, turn to Chapter 42 for documentation on ZINTs. 39 Chapter 6 Characters and Strings Characters and strings are two data types that hold text. Characters are not directly available to the user. They can only hold one character. You create them with CHR <char> or using one of the many built-in characters (listed below). To convert a character to a bint, use CHR>#. The bint returned is the ASCII code for the character. The opposite function is #>CHR. Strings are inserted in your program with $ "<string>", or simply "<string>". There are some built-in strings, listed below. It is possible to convert a character into a string, with the command CHR>$. Two useful and simple functions which deal with strings are LEN$ and &$. The first returns the length (the number of characters) of a string as a bint, and the second concatenates two strings. To get a substring, i.e., part of a string, use the function SUB$. It expects three arguments: the original string, the starting position (a bint) and the final position (also a bint). Counting starts at one. Everything between the start and end characters (inclusive) will be returned. And another function is POS$, which searches a string (in level three) for a character or string (in level two), starting from a specified position (a bint, in level one). The position of the first occurrence of the search string in the string is returned (as a bint) to level one. If it could not be found, #0 is returned. There are also many other functions, see below for a list. 40 6.1. Reference 6.1 41 Reference 6.1.1 Built-in Characters Addr. 33D2B Name CHR_00 33F77 CHR_Newline 33D32 33F93 CHR_... CHR_Space 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 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) 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 6. Characters and Strings 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 6.1.2 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_<> 43 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 Built-in Strings Addr. 055DF Name NULL$ 33B55 SPACE$ 33B39 NEWLINE$ Description "" Empty string. " " aka: tok_ "\0a" Newline. 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) 44 6. Characters and Strings Addr. 27195 Name CRLF$ 340A4 340B4 33FF2 33FE2 $_RAD $_GRAD $_XYZ $_R<Z 33FD2 $_R<< 34076 34064 34088 34002 34010 3401E 3402C $_EXIT $_ECHO $_Undefined $_<<>> $_{} $_[] $_'' 3403A 34048 34056 $_:: $_LRParens $_2DQ 33B91 33B85 tok, tok' 33BFD 33B9D 2D848 2D86D 2D8AD 33A77 33AD7 33C09 272D9 33C4D 33C59 33CAD 33CB9 33ABF toktok. tok_g tok_m tok_s tok{ tok<< tok= tok-> tok0 tok1 tok8 tok9 tokESC Description "\0d\0a" Carriage return and line feed. "RAD" "GRAD" "XYZ" "RZ" "R<angle>Z" "R" "R<angle><angle>" "EXIT" "ECHO" "Undefined" "«»" "{}" "[]" "''" 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 Name tokexponent tokquote 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 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$) 45 Description "E" """ One double quote. "#" "$" "&" "*" "+" "/" "2" "3" "4" "5" "6" "7" "8" "»" "" "GROB" "C$" "∂" "der" "(" ")" "Σ" √ " " "UNKNOWN" "_" "|" "[" "]" "ˆ" "}" " " String of 14 spaces. 46 6.1.3 6. Characters and Strings Built-in Strings with Stack Manipulation Addr. 35D94 Name NULL$SWAP 04D3E DROPNULL$ 25EEC NULL$TEMP 6.1.4 Description ( ob → $ ob ) NULL$, then SWAP. ( ob → NULL$ ) DROP then NULL$. ( → $ ) Creates null string in temporary memory (NULL$, then TOTEMPOB). Conversion Addr. 25F77 Name #>$ 25F72 #:>$ 25F0F a%>$ 05BE9 ID>$ 25EB3 DOCHR 0F1006 ˆZ>S 2EFC1 hxs>$ 2EFC0 HXS>$ 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 identifier into string. ( % → $ ) Creates string of the character with the number specified. ( Z → $ ) Converts Z into a string (decimal). ( hxs → $ ) Uses current display mode and wordsize. ( hxs → $ ) Does hxs>$ and then appends base character. 6.1. Reference 6.1.5 47 Management Addr. 05A75 Name #>CHR 37AA5 CHR>$ 05636 LEN$ 357E2 DUPLEN$ 05622 OVERLEN$ 361DA NEWLINE$&$ 2F31A APNDCRLF 050ED CAR$ 0516C CDR$ 378FA POS$ 378FA POSCHR 37906 POS$REV 37906 POSCHRREV Description ( # → chr ) Returns character with the specified 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 first character of string as a string, or NULL$ for null string. ( $ → $' ) Returns string without first character, or NULL$ for null string. ( $ $find start# → #pos ) Search for $find in $search, starting at position #start. Returns position of $find 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. 48 6. Characters and Strings Addr. 25EA0 Name COERCE$22 2F16D Blank$ 2EEF0 PromptIdUtil 25EF8 SEP$NL 09A003 (ˆWRAP$) 05733 SUB$ 3628E #1-SUB$ 362A2 1_#1-SUB$ 362B6 LAST$ 362CA #1+LAST$ 35DA8 SUB$SWAP 2A5CA SUB$1# Description ( $ → $' ) If the string is longer than 22 characters, truncates it to 21 characters and appends "...". ( #len → $ ) Creates a string with the specified number of spaces. ( id ob → $ ) Creates string of the form "id: ob". ( $ → $' $'' ) Separates string at the first newline. $'' is the substring before the first newline; $' the substring after the first newline. ( $ #width → $' ) Replace SPACE chars with NEWLINE in order to fit the text in the given #width. Used by ViewStrObject. Very fast (bang type). ( $ #start #end → $' ) Returns substring between specified positions. ( $ #start #end+#1 → $' ) Does #1- and then SUB$. ( $ #end → $' ) Returns substring from the first character to the character before the specified position. aka: 1_#1-SUB ( $ #start → $' ) Returns substring from the specified start position to the end (inclusive). ( $ #start-#1 → $' ) Returns substring from the specified start position to the end (exclusive). ( ob $ # #' → $' ob ) SUB$ then SWAP. ( $ # → #' ) Returns bint with ASCII code of character at the specified position. 6.1. Reference Addr. 34C82 Name EXPAND 05193 &$ 36FF6 &$SWAP 353CD !append$ 3533C !insert$ 35F6A !append$SWAP 35369 !!append$? 353F7 !!append$ 353EB !!insert$ 0525B >H$ 052EE >T$ 35BD7 APPEND_SPACE 35346 SWAP&$ 2EED3 TIMESTR 25E7C AND$ 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. 50 6. Characters and Strings Addr. 25EF0 Name OR$ 25F0D XOR$ 2F1A7 CHARSEDIT 6.1.6 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. Parsing Strings Addr. 25EB7 Name DOSTR> 2EF62 palparse 25E68 !*trior 25E67 !*triand 26206 tok8cktrior 261BB tok8trior 29E67 nultrior 25EDB GetNextToken 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 ) 6.1. Reference Addr. 2F33C Name getmatchtok 2EF6E ParseFail 2EF6F DispBadToken 6.1.7 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. Decompilation Addr. 2F191 Name !DcompWidth 2F190 DcompWidth@ 26459 setStdWid 2645E setStdEditWid 25F13 stkdecomp$w 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 flag 72 (stack minifont). ( → ) Sets DcompWidth to the width for editing, either 21 or 32 characters, depending on system flag 73 (edit minifont). ( ob → $ ) Decompiles for stack display using the current DcompWidth to cut the string if it is too long. 52 6. Characters and Strings Addr. 25E6D Name 1stkdecomp$w 2A842 Decomp1Line 2A904 RPNDecomp1Line 25E6F >Review$ 2A8E4 DecompStd1Line32 2A9C4 RPNDecompStd1Line32 2A8C9 DecompStd1Line 2A9A4 RPNDecompStd1Line 2A893 Decomp#Disp 2A964 RPNDecomp#Disp 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 flag 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 flag 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 flag 95 clear) during execution. ( ob # → $ ) Calls setStdWid and decompiles ob (UserRPL components only), breaks the string into lines and returns the first #+1 lines. Used for multiline display in stack level 1. ( ob # → $ ) Same as Decomp#Disp but enforce RPN mode (system flag 95 clear) during execution. 6.1. Reference Addr. 2A878 Name Decomp#Line 2A944 RPNDecomp#Line 25F11 editdecomp$w 25ECE EDITDECOMP$ 2A85D DecompEdit 2A924 RPNDecompEdit 2AA43 AlgDecomp 25EAA DECOMP$ 39CB3 (ob&$) 39C9F ($&ob) 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 flag 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 flag 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. 54 6. Characters and Strings Addr. 25EB1 Name DO>STR 1A7006 ˆDO>STRID 2A8AE DecompEcho 2A984 RPNDecompEcho 2F1BF Decomp%Short 001004 ˆFSTR1 003004 ˆFSTR3 004004 ˆFSTR4 005004 ˆFSTR5 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 flag 95 clear) during execution. ( % #width → $ ) Decompiles a real number into a string of the given #width. It will drop less significant 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. 6.1. Reference 55 Addr. 006004 Name ˆFSTR6 007004 ˆFSTR7 009004 ˆFSTR9 00D004 ˆFSTR13 35B82 palrompdcmp 6.1.8 Addr. 0556F 36252 2F321 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". String Tests Name NULL$? DUPNULL$? CkChr00 Description ( ob → flag ) ( ob → ob flag ) ( $ → $ flag ) Returns FALSE if string contains any null characters. Chapter 7 Hex Strings Hexadecimal strings are the numbers that are called Binary Integers in the manual, which can be represented in several bases. In System RPL they are called Hexadecimal Strings. They are created using the structure HXS <len> <hexbody>. len is the length of the string (number of nibbles or hexadecimal digits), in hexadecimal form, and hexbody is the actual contents of it. The tricky part about it is that because of the HP internal architecture, you must enter the contents in reverse order. To get, for example, the hex string #12AD7h, you must enter HXS 5 7DA21. To get #12345678h use HXS 8 87654321. In System RPL, hexadecimal strings can be of any length, unlike in User RPL, where they are limited to 16 nibbles or 64 bits. To convert an hex string to and from a bint, use the commands HXS># and #>HXS. To convert an HXS to and from a real number, use #>% (or HXS>%) and %>#. See below for more commands related to hex strings. 7.1 Reference 7.1.1 Conversion Addr. 059CC Name #>HXS 2EFCB %># Description ( # → hxs ) Length will be five. ( % → # ) Converts real number into hxs. Should be called %>HXS. 56 7.1. Reference 7.1.2 57 General Functions Addr. 2EFBE Name WORDSIZE 2EFAA dostws 055D5 NULLHXS 0518A &HXS 34C82 EXPAND 05616 LENHXS 05815 SUBHXS 2EFB9 bit+ 2EFC8 bit%#+ 2EFC9 bit#%+ 2EFBA bit- 2EFC6 bit%#- 2EFC7 bit#%- 2EFBC bit* 2EFC4 bit%#* 2EFC5 bit#%* 2EFBD bit/ 2EFC2 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 7. Hex Strings Addr. 2EFC3 Name bit#%/ 2EFAC bitAND 2EFAD bitOR 2EFAE bitXOR 2EFAF bitNOT 2EFB8 bitASR 2EFB6 bitRL 2EFB7 bitRLB 2EFB4 bitRR 2EFB5 bitRRB 2EFB0 bitSL 2EFB1 bitSLB 2EFB2 bitSR 2EFB3 bitSRB 7.1.3 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. Tests Addr. 2EFCC Name HXS==HXS 2F0EE HXS#HXS Description ( hxs hxs' → %flag ) == test ( hxs hxs' → %flag ) = test 7.1. Reference Addr. 2EFCF Name HXS<HXS 2EFCD HXS>HXS 2EFCE HXS>=HXS 2F0EF HXS<=HXS 59 Description ( hxs hxs' → < test ( hxs hxs' → > test ( hxs hxs' → ≥ test ( hxs hxs' → ≤ test %flag ) %flag ) %flag ) %flag ) Chapter 8 Identifiers Identifiers 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 identifier in the stack. It is always evaluated. So, if variable anumber contains 123.45 and you put somewhere in your program ID anumber, the identifier 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 identifiers: the temporary identifiers, 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 Chapter 9 Tagged Objects In order to insert a tagged object in your program, use the structure TAG <tag> <object>. Tag is a string without quotes, and the object can be anything. To create 0: 1790, for example, you would use TAG 0 % 1790. An object can have multiple tags, but there is not much use for that. The word >TAG creates a tagged object, given the object (in level two) and a string representing the tag (in level one). %>TAG works the same way, but tags an object with a real number. ID>TAG tags an object with an identifier. To remove all tags from an object, call STRIPTAGS. A few more commands related to tagged objects are listed on below. Note that the programmer seldom needs to worry about tagged objects, because the type dispatching mechanism (which is described in section 29.2) can automatically strip tags from the arguments to your program. 9.1 Reference Addr. 05E81 Name >TAG 2F266 USER$>TAG 2F223 %>TAG 05F2E ID>TAG 37B04 TAGOBS 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 identifier or lam. ( ob $tag → tagged ) ( ob.. { $.. } → tagged... ) Tags one or more objects. 61 62 9. Tagged Objects Addr. 37ABE Name STRIPTAGS 37AEB STRIPTAGSl2 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 first 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 specific to Symbolic matrices, see Chapter 43. 10.1 Reference 10.1.1 General Functions Addr. 0371D Name GETATELN 16D006 ˆMDIMS 35FD8 MDIMSDROP 16E006 ˆDIMLIMITS 35E006 ˆARSIZE 36183 OVERARSIZE 260F8 PULLREALEL 260F3 PULLCMPEL 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. 10.1. Reference Addr. 26102 Name PUTEL 26107 PUTREALEL 260FD PUTCMPEL 33B006 ˆMATTRAN 331006 ˆYext 10.1.2 65 Description ( [%] % # → [%]' ) ( [C%] C% # → [C%]' ) Puts element at specified position. Converts to "short" before. Warning: no copy to tempob first. ( [%] % # → [%]' ) Puts real element at specified position. Warning: no copy to tempob first. ( [C%] C% # → [C%]' ) Puts complex element at specified position. Warning: no copy to tempob first. ( M → M' ) Matrix transposition. ( V2 V1 → ob ) Scalar product of symbolic vectors, no check. Conversion Addr. 169006 ˆBESTMATRIXTYPE Name 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. 66 Addr. 002007 10.1.3 10. Arrays Name ˆArryToMatrix Description ( [] → M ) Converts array to symbolic array. Statistics Addr. 2EEDA Name STATCLST 2EEDB STATSADD% 2EEDC STATN 2EEDF STATSMIN 2EEDD STATSMAX 2EEDE STATMEAN 2EEE0 STATSTDEV 2EEE1 STATTOT 2EEE2 STATVAR Description ( → ) Clears ΣDAT. ( % → ) Internal Σ+. ( → N ) Internal NΣ. ( → % ) Internal MINΣ. ( → % ) Internal MAXΣ. ( → % ) ( → [] ) Internal MEAN. ( → % ) ( → [] ) Internal SDEV. ( → % ) ( → [] ) Internal TOT. ( → % ) ( → [] ) Internal VAR. Chapter 11 Composite Objects Composite objects hold other objects inside them. In contrast to arrays, different types of objects can be part of the same composite. We have already encountered composite objects in the Introduction, when we used a secondary to group several commands into a single object. All composites are similar in structure: they start with a word which varies depending on the kind of object, and end with the word SEMI. Besides secondaries, other composite objects are lists, symbolic objects (described in Chapter 14) and unit objects (described in Chapter 13). You can create a list by starting it with {, and ending it with }. Inside, put as many objects as you wish, of any kind. Secondaries are delimited with :: and ;. To concatenate two composites, put them in the stack and use &COMP. To add just one object to the head (beginning) or tail (end) of a composite, first put the composite in the stack, then the object, and call >HCOMP or >TCOMP, respectively. To get the length of the composite (the number of objects, as a bint), just put the composite in level one and use the command LENCOMP. To explode the composite into all its objects and a count (like the User RPL command OBJ→), use INNERCOMP. The only difference is that the number of objects is returned as a bint. To get one object of a composite, put the composite in level two, the object’s position in level one (as a bint, naturally), and run NTHELCOMP. If the number were out of range, you would get a FALSE, otherwise the object and TRUE. NTHCOMPDROP is the above entry, followed by DROP. And to get part of a composite, use the function SUBCOMP. This function takes in level three the composite, in level two the start position (guess what? a bint) and in level one the end position (from now on, unless otherwise noted, all numeric arguments are bints). You will get a composite (of the same type, obviously) with the elements between the start and end positions, inclusive. This function checks if the numbers are not out of range. If they are, a null composite (an empty composite) is returned. The same happens if the end position is greater than the start position. Other commands are listed in the reference section below. 67 68 11. Composite Objects 11.1 Reference 11.1.1 General Operations Addr. 0521F Name &COMP 052FA >TCOMP 052C6 >HCOMP 39C8B (SWAP>HCOMP) 05089 CARCOMP 361C6 ?CARCOMP 05153 CDRCOMP 2825E (2NELCOMPDROP) 2BC006 ˆLASTCOMP 0567B LENCOMP 3627A DUPLENCOMP 055B7 NULLCOMP? 36266 DUPNULLCOMP? 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 first object of the composite, or a null composite if the argument is a null composite. ( comp T → ob ) ( comp F → comp ) If the flag is TRUE, does CARCOMP. ( comp → comp-ob_head ) ( comp_null → comp_null ) Returns the composite minus its first 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?. 11.1. Reference Addr. 056B6 Name NTHELCOMP 35BC3 NTHCOMPDROP 35D58 NTHCOMDDUP 376EE POSCOMP 3776B EQUALPOSCOMP 37784 NTHOF 0FD006 ˆListPos 37752 #=POSCOMP 05821 SUBCOMP 376B7 matchob? 69 Description ( comp #i → ob T ) ( comp #i → F ) Returns specified 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 first 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 first. ( ob comp → T ) ( ob comp → ob F ) Returns TRUE if ob is EQUAL to any element of the composite. 70 11. Composite Objects Addr. 371B3 Name Embedded? 37798 Find1stTrue 377C5 Lookup 377DE Lookup.1 37829 EQLookup 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 first 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. 11.1. Reference Addr. 37B54 11.1.2 71 Name NEXTCOMPOB Description ( comp #ofs → comp #ofs' ob T ) ( comp #ofs → comp F ) Returns object at specified nibble offset from start. If the object is SEMI (i.e., the end of the composite has been reached) returns FALSE. To get the first element, use FIVE as offset value (to skip the prolog). ZERO works as well. Building There are also shortcut words to build lists and secondaries, with specified number of objects, described in the sections below. Addr. 05459 05445 0546D Name {}N ::N SYMBN 05481 EXTN 293F8 P{}N 11.1.3 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. Exploding Addr. 054AF 3622A 3623E 35BAF 35C68 2F0EC Name INNERCOMP DUPINCOMP SWAPINCOMP INCOMPDROP INNERDUP ICMPDRPRTDRP 3BADA 366E9 (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 ) 72 11. Composite Objects Addr. 157006 Name ˆSYMBINCOMP 12A006 ˆ2SYMBINCOMP 158006 ˆCKINNERCOMP 11.1.4 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. Lists Addr. 055E9 Name NULL{} 36ABD 159006 DUPNULL{}? ˆDUPCKLEN{} 29D18 36202 36216 361EE 2B42A ONE{}N TWO{}N THREE{}N #1-{}N PUTLIST 2FC006 ˆINSERT{}N 2FB006 ˆNEXTPext 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 specified 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. 11.1. Reference 73 Addr. 2FD006 Name ˆCOMPRIMext 15A006 ˆCKCARCOMP 2EF5A apndvarlst 0FE006 ˆAppendList 4EB006 ˆprepvarlist 100006 ˆSortList 28A006 ˆPIext 25ED3 EqList? 11.1.5 Description ( {} → {}' ) Suppress multiple occurrances in the list. ( {} → ob1 ) ( ob → ob ) Returns first 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 first 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. Secondaries Addr. 055FD Name NULL:: 37073 Ob>Seco 3705A ?Ob>Seco 37087 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 11. Composite Objects Name ::NEVAL Description ( ob1..obn #n → ? Does ::N then EVAL. ) Chapter 12 Meta Objects A meta object (or just meta for short) is a collection of n objects and their count (as a bint). A meta object can be considered as another representation of a composite object. The word INNERCOMP will explode any composite into a meta object. The opposite transformation is done by several different words, depending on the kind of composite desired. The available words are listed in section 11.1.2. Note that a single zero is an (empty) meta object, the null meta object. It is possible to do several stack operations which treat meta objects as a single object. Generally, the name of these stack operations are in lower case. However, some words have totally misleading names, because their functions are not always used in relation to meta objects, and they were named with their other purpose in mind. There exist also the user meta objects, which are like meta objects, but the count is represented as a real number and not as a bint. These are not very common, though. 12.1 Reference 12.1.1 Stack Functions Addr. 0326E Name NDROP 37032 DROPNDROP 35FB0 #1+NDROP Description ( meta → ) Should be called drop. ( meta ob → ) Should be called DROPdrop. ( ob meta → ) Should be called dropDROP. aka: N+1DROP 75 76 12. Meta Objects Addr. 28211 Name NDROPFALSE 391006 ˆNDROPZERO 29A5D psh 29A8F roll2ND 29B12 unroll2ND 3695A SWAPUnNDROP 36FA6 metaROTDUP 12.1.2 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. Combining Functions Addr. 296A7 2973B 36FBA Name top& pshtop& ROTUntop& 36FCE roll2top& 2963E psh& 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 ) 12.1. Reference 12.1.3 Meta and Object Operations Addr. 3592B Name SWAP#1+ 34431 34504 36147 29693 28071 DUP#1+PICK get1 OVER#2+UNROL psh1top& pull 28085 29821 298C0 2F193 29754 406006 pullrev psh1& psh1&rev UobROT pullpsh1& ˆaddt0meta 29972 36946 2F38E pshzer SWAPUnDROP xnsgeneral 2F38F xsngeneral 12.1.4 Addr. 3760D 77 Description ( # ob → ob #+1 ) aka: SWP1+ ( n..1 #n → n..1 #n n ) ( ob meta → meta ob ) ( meta ob → ob meta ) ( meta ob → ob&meta ) ( meta&ob → meta ob ) aka: #1-SWAP ( ob&meta → meta ob ) ( meta1 meta2 ob → ob&meta1 meta2 ( meta1 meta2 ob → ob&meta1 meta2 ( ob meta1 meta2 → meta1 meta2 ob ( meta1 meta2&ob → ob&meta1 meta2 ( meta1&ob meta2 → meta1 meta2 ) Removes the last object of meta1. ( meta → #0 meta ) ( ob meta → meta ) ( meta → LAM3&meta&LAM1 ) Uses contents of LAM1 and LAM3. ( meta → meta&LAM3&LAM1 ) Uses contents of LAM1 and LAM3. Other Operations Name SubMetaOb Description ( meta #start #end → meta' ) Gets a sub-meta. Does range checks. ) ) ) ) 78 12. Meta Objects Addr. 37685 Name SubMetaOb1 33F006 ˆsubmeta 2F356 metatail 385006 ˆmetasplit 39F006 ˆmetaEQUAL? 3BF006 ˆEQUALPOSMETA 3C0006 ˆEQUALPOS2META 198006 ˆMETAINT? Description ( ob1..obi..obn #n #i #n #i → ob1..obi #n #i ) This function can be used to take the first 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. 12.1. Reference Addr. 199006 Name ˆMETAPOSINT? 79 Description ( Meta → Meta flag ) Tests if Meta is a positive integer smaller than Zsmall. Chapter 13 Unit Objects Units are another kind of composite objects. It is not really difficult to include one in the program, it is just laborious. Units start with UNIT and end with ;. Inside, there are commands to define the unit. The best way to understand how a unit is reprsented is by disassembling it. The unit object 9.8_m/sˆ2 can be created using the code below: 1 5 10 :: UNIT % 9.8 "m" "s" %2 um^ um/ umEND ; ; 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 first three ones is easy to guess. The last is used to create prefix operators (kilo, mega, mili, etc.). First enter the prefix as a character or string, and then the unit name (all operations take unit names as characters or strings). Run umP and the prefixed unit is created. Then call the other functions as needed. To end a unit, use umEND, which joins the number (entered first) 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 5 81 :: CK1NOLASTWD CKREAL "m" "s" um/ umEND BINT5 EXTN ; 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 Reference 13.1.1 Creating Units Addr. 2D74F 2D759 2D763 2D76D 2D777 05481 Name um* um/ umˆ umP umEND EXTN Description * marker / marker ˆ marker Char prefix operator Unit end operator ( ob1..obn #n → u ) Builds a unit object. 82 13.1.2 13. Unit Objects General Functions Addr. 2F099 Name U>NCQ 2F07A UM>U 2F08C UMCONV 2F090 UMSI 2F095 UMU> 2F019 UNIT>$ 2F07B U>nbr 2F098 Unbr>U 2F09A TempConv 25EE4 KeepUnit 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/sˆ2 ( % 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. 13.1. Reference 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 83 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 13.1.4 Tests Addr. 2F087 2F07C 2F086 2F089 2F085 2F088 Name UM=? UM#? UM<? UM>? UM<=? UM>=? 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' ) Description ( u u' → %flag ( u u' → %flag ( u u' → %flag ( u u' → %flag ( u u' → %flag ( u u' → %flag ) ) ) ) ) ) 84 Addr. 2F076 13. Unit Objects Name puretemp? 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. 1 5 :: SYMBOL ID R ID V ID I x/ x= ; ; As you have seen, the variables are represented by identifiers, 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 Reference 14.1.1 General Operations Addr. 0546D 2BD8C Name SYMBN (SYMBN:) 286E7 symcomp 2F073 SWAPcompSWAP 28ACE (DROP?symcomp) 293A3 (?symcomp) 25EA2 CRUNCH 2F110 (FINDVARS) 462006 ˆEQUATION? 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, identifier 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 finishing by x=. 14.1. Reference Addr. 463006 Name ˆUSERFCN? 29CB9 uncrunch 2BCA2 cknumdsptch1 2BB21 sscknum2 2BB3A sncknum2 2BB53 nscknum2 87 Description ( ob → ob flag ) Returns TRUE if ob is a symbolic finishing by xFCNAPPLY. ( → ) Clears numeric results flag (system flag 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 flag. 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+ ; 88 14.1.2 Addr. 2EF26 2F2A9 14.1.3 14. Symbolics Other Functions Name SYMSHOW XEQSHOWLS Description ( sym id/lam → symf ) ( sym {} → symf ) Meta Symbolics Functions Addr. 29986 Name pshzerpsharg 3701E pZpargSWAPUn 36FE2 plDRPpZparg 3F1006 ˆDIVMETAOBJ Description ( meta → M_last M_rest ) Pushes last sub-expression in meta. If meta is a valid expression M_rest will be empty. ( meta → M_rest M_last ) pshzerpsharg then psh. ( meta&ob → M_last M_rest ) Drops ob then calls pshzerpsharg. ( o1...on #n ob → {o1/ob...on/ob} ) Division of all elements of a meta by ob. Tests if o=1. Chapter 15 Graphics Objects (Grobs) Graphics objects, or grobs for short, represent images, drawings, etc. If you want to write programs that draw something in the screen, then you must know how to use grobs, because the screen content is actually a grob, and you will have to draw on that grob, or to insert another grob in it. In the reference section below, there are words for creating, manipulating and displaying graphic objects. When dealing with graphics, keep two things in mind: 1. Several grob operations work directly on the grob without making a copy. So, all pointers to that object in the stack will be modified. You can use the word CKREF to ensure an object is unique. For more information on temporary memory and reference counting, see section 24.1.4. This kind of operation is denominated “bang-type”, and the commands normally have an exclamation point to indicate that, like GROB! or GROB!ZERO. These operations also have no error checking, so improper or out-of-range parameters may corrupt memory. 2. The best command to place a grob in the display grob is XYGROBDISP. This is because this word checks if the grob to be placed in HARDBUFF would exceed its boundaries, and if necessary HARDBUFF is enlarged so that the grob fits. 89 90 15. Graphics Objects (Grobs) 15.1 Reference 15.1.1 Built-in Grobs Addr. 27AA3 Name (NULLGROB) 27D3F CROSSGROB 27D5D MARKGROB 27D7B 2E25C 0860B0 0870B0 (StdLabelGrob) (InvLabelGrob) 15.1.2 ˜grobAlertIcon ˜grobCheckKey Dimensions Addr. 26085 25EBB 36C68 2F324 Name GROBDIM DUPGROBDIM GROBDIMw CKGROBFITS 2F320 CHECKHEIGHT 15.1.3 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. Description ( grob → #height #width ) ( grob → grob #height #width ) ( grob → #width ) ( g1 g2 #n #m → g1 g2' #n #m ) Shrinks g2 if it does not fit in g1. ( grob #height → ) Forces grob (ABUFF/GBUFF) to be at least 64 rows high. Grob Handling Addr. 2607B Name GROB! 2EFDB (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. 15.1. Reference Addr. 2F342 Name GROB+# 26080 GROB!ZERO 368E7 GROB!ZERODRP 2612F SUBGROB 25F0E XYGROBDISP 25ED8 GROB>GDISP 260B2 MAKEGROB 2F0DB MAKEPICT# 2609E INVGROB 260E4 PIXON 260DF PIXOFF 260EE PIXON? 260DA PIXON3 260D5 PIXOFF3 91 Description ( flag grob1 grob2 #x #y → grob' ) Inserts grob2 into the specified position of grob1, using OR (if flag is TRUE) or XOR (if flag is FALSE). Does all necessary checks first. ( 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 specified 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. 92 15. Graphics Objects (Grobs) Addr. 260E9 Name PIXON?3 280C1 ORDERXY# 280F8 ORDERXY% 2EF9F LINEON 2EFA0 LINEOFF 2EFA1 TOGLINE 2EFA2 LINEON3 2F13F DRAWLINE#3 2EFA3 LINEOFF3 2EFA4 TOGLINE3 2F382 TOGGLELINE#3 2F32C DRAWBOX# 2EF03 DOLCD> 2EF04 DO>LCD 0BF007 ˆGROBADDext 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 defining 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. 15.1. Reference 15.1.4 93 Greyscale Graphics Addr. 25592 Name SubRepl 25597 SubGor 2559C SubGxor 25565 LineW 2556F LineG1 25574 LineG2 2556A LineB 25579 LineXor 2F218 CircleW 2F216 CircleG1 2F217 CircleG2 2F215 CircleB 2F219 CircleXor 2557E Sub 25583 Repl 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. 94 15. Graphics Objects (Grobs) Addr. 25588 Name Gor 2558D Gxor 255A1 Grey? 255B0 ScrollVGrob 255BA PixonW 255C4 PixonG1 255C9 PixonG2 255BF PixonB 255CE PixonXor 255D3 FBoxW 255D3 FBoxG1 255D8 FBoxG2 255DD FBoxB 255E2 FBoxXor 255E7 LBoxW 255EC LBoxG1 255F1 LBoxG2 255F6 LBoxB 255FB LBoxXor 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 filled rectangle. ( grb #x1 #y1 #x2 #y2 → grb' ) Make a light grey filled rectangle. ( grb #x1 #y1 #x2 #y2 → grb' ) Make a dark grey filled rectangle. ( grb #x1 #y1 #x2 #y2 → grb' ) Make a black filled rectangle. ( grb #x1 #y1 #x2 #y2 → grb' ) Apply XOR to a filled 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 Name ToGray 2F21A Dither 255B5 Distance 15.1.5 95 Description ( grb → grb'/grb ) Convert a B&W grob to Greyscale. ( grb → grb'/grb ) Convert a greyscale grob to B&W ( #Δx #Δy → #SQRT(Δxˆ2+Δyˆ2) ) Compute the distance between two points. Creating Menu Label Grobs Addr. 2E166 Name MakeStdLabel 2E189 MakeBoxLabel 2E1EB MakeDirLabel 2E24D MakeInvLabel 25E7F Box/StdLabel 25F01 Std/BoxLabel 25E80 Box/StdLbl: 2E0D5 Grob>Menu 2E0F3 Str>Menu 2E11B Id>Menu 2E107 Seco>Menu Description ( $ → grob ) Makes standard menu label. ( $ → grob ) Makes label with a box. ( $ → grob ) Makes directory label. ( $ → grob ) Makes inverse label. ( $ flag → grob ) If TRUE makes box label, otherwise makes standard label. ( $ flag → grob ) If TRUE makes standard label, otherwise makes box label. ( → grob ) Does Box/StdLabel with the next two objects from the stream. Usage: :: Box/StdLbl: $ <test> ; ( #col grob → ) Displays grob as menu label. ( #col $ → ) Displays string as menu label. ( #col id → ) Displays id as menu label. ( #col :: → ) Does EVAL then DoLabel. 96 Addr. 25886 15.1.6 15. Graphics Objects (Grobs) Name DoLabel Description ( #col ob → ) If ob is of one of the supported types, displays a menu label. If not, generates a "Bad Argument Type" error. Converting Strings to Grobs Addr. 25F7C Name $>GROB 25F86 $>GROBCR 25F81 $>grob 25F8B $>grobCR 05F0B3 (˜$>grobOrGROB) 25F24 RIGHT$3x6 25FEF CENTER$3x5 Description ( $ → grob ) Makes grob of the string using the system font. Linefeed does not make new line. ( $ → grob ) Makes grob of the string using the system font. Linefeed does make new line. ( $ → grob ) Makes grob of the string using the minifont. Linefeed does not make new line. ( $ → grob ) Makes grob of the string using the minifont. Linefeed does make new line. ( $ → grob ) Converts string to a grob using either the current font or the minifont, depending on system flag 90. ( $ #n → flag grob ) Transforms string into grob (using the minifont), then takes all characters starting after column #n. flag is FALSE if #n is greater than the width of the grob. In this case, the whole grob is returned. ( grob #x #y $ #w → grob' ) Creates grob from string (using the minifont) and embeds it at specified position (#x, #y). The grob is centered around #x and the to is put at #y. #w represents the maximum width of the grob created. If the text is wider, it is truncated. Bangtype. 15.1. Reference Addr. 2E2AA Name MakeLabel 25FF9 LEFT$3x5 26071 ERASE&LEFT$3x5 26008 LEFT$3x5Arrow 2601C LEFT$3x5CR 26012 LEFT$3x5CRArrow 25FF4 CENTER$5x7 25FFE LEFT$5x7 2606C ERASE&LEFT$5x7 26003 LEFT$5x7Arrow 26017 LEFT$5x7CR 2600D LEFT$5x7CRArrow 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 first. ( grob #x #y $ #w → grob' ) Like LEFT$3x5, but if the text does not fit, 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 first. ( 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. 98 15.1.7 15. Graphics Objects (Grobs) Creating Grobs from Other Objects Addr. 019004 Name ˆEQW3GROB 01A004 ˆEQW3GROBStk 01F004 ˆEQW3GROBmini 01E004 ˆEQW3GROBsys 0BE007 ˆXGROBext 0C0007 ˆDISPLAYext Description ( ob → ext grob #0 ) ( ob → #2 ) ( ob → ext grob #0 ) ( ob → #2 ) ( ob → ext grob #0 ) ( ob → #2 ) ( ob → ext grob #0 ) ( ob → #2 ) ( ob → grob ) Convert object to a grob. ( grob ob → grob' ) Adds ob to grob after converting it to a grob. Chapter 16 Library and Backup Objects Libraries are very complex objects that hold a collection of commands. Some of these commands are named and accessible to the user, but some have no names, and so are “hidden”. Backup objects are used by the HP49 to store the contents of the entire HOME directory and restore it later. The integrity of both objects can be verified because both have a CRC code attached to them. A rompointer (sometimes called XLIB name) is a pointer to a command in a library. The only way to access a unnamed command in a library is through a rompointer. They hold the number (often called id) of the library and the number of the command. To insert a rompointer in your program, use the following structure: ROMPTR <lib> <cmd>, where <lib> is the number of the library, and <cmd> is the number of the command. Both numbers are specified in hexadecimal form. Rompointers are always automatically executed (like identifiers), so you have to quote them (see section 19.2) if you want one in the stack. 16.1 Reference 16.1.1 Port Operations Addr. 25EEB Name NEXTLIBBAK Description ( #addr → backup/library #nextaddr ) Gets next library or backup. 99 100 16.1.2 16. Library and Backup Objects Rompointers Addr. 07E50 Name #>ROMPTR 08CCC ROMPTR># 07E99 ROMPTR@ 35C40 DUPROMPTR@ 35A88 ?>ROMPTR 35AAB ?ROMPTR> 35BFF RESOROMP 34FCD 34FC0 ROM-WORD? DUPROM-WORD? 16.1.3 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 ) Libraries Addr. 07709 Name TOSRRP 076AE OFFSRRP 2F2A7 XEQSETLIB 07638 SETHASH Description ( # → ) Attaches library to HOME directory. ( # → ) Detaches library from HOME directory. ( % → ) Internal ATTACH. ( hxs #libnum → ) Buggy? 16.1. Reference 16.1.4 101 Backup Objects Addr. 081D9 Name BAKNAME 0905F BAK>OB Description ( bak → id T ) Returns backup's name ( bak → ob ) Gets backup object. Part II General System RPL Entries Chapter 17 Stack Operations In System RPL, using the stack is almost the same as in User RPL. The basic operations are the same, except for little changes in the name: DUP, 2DUP (equivalent to User RPL’s DUP2), NDUP (DUPN), DROP, 2DROP (DROP2), NDROP (DROPN), OVER, PICK, SWAP, ROLL, UNROLL (ROLLD), ROT, UNROT and DEPTH. All commands that require or return a numeric argument use bints and not real numbers, unless otherwise noted. There are many commands that do two or even three operations in sequence. They are listed in the reference section. The table below lists some useful combinations in a nice form: DUP DROP SWAP OVER ROT UNROT SWAPDROP DROPDUP DROPSWAP 2DROP 2DUP 3PICK 4PICK 5PICK 4ROLL 4UNROLL ROT2DROP 17.1 DUP DUPDUP DUPDUP DUPROT DUPUNROT DUP3PICK DUP4UNROLL - DROP DROPDUP 2DROP DROPSWAP DROPOVER DROPROT DROPSWAPDROP 3DROP - SWAP SWAPDUP SWAPDROP SWAPOVER SWAPROT ROTSWAP SWAPDROPDUP SWAPDROPSWAP SWAP2DUP SWAP3PICK SWAP4PICK SWAP4ROLL ROTROT2DROP OVER OVERDUP OVERSWAP 2DUP OVERUNROT DROPDUP OVERDUP OVER5PICK SWAPDROP ROT ROTDUP ROTDROP ROTSWAP ROTOVER UNROT DROPSWAP ROTDROPSWAP ROT2DROP ROT2DUP ROTROT2DROP UNROT UNROTDUP UNROTDROP UNROTSWAP UNROTOVER ROT UNROTSWAPDRO SWAPDROP UNROT2DROP - Reference In this section, the numbers 1, 2. . . n are used to represent different objects, not necessarily any kind of number. 105 106 17. Stack Operations Addr. 03188 35CE0 2D5006 28143 Name DUP DUPDUP ˆ3DUP NDUPN 35FF3 3457F DUPROT DUPUNROT 36133 3432C 3611F 35D30 DUPROLL DUP4UNROLL DUPPICK DUP3PICK 34431 031AC 35D30 DUP#1+PICK 2DUP 2DUPSWAP 36CA4 031D9 03244 357CE 37032 35733 3574D 2DUP5ROLL NDUP DROP DROPDUP DROPNDROP DROPSWAP DROPSWAPDROP 36007 3606B 03258 341D2 DROPROT DROPOVER 2DROP 3DROP 341D7 4DROP 341DC 341E8 341F4 0326E 35FB0 5DROP 6DROP 7DROP NDROP #1+NDROP 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 17.1. Reference Addr. 2F0A1 Name RESETDEPTH 0314C 28187 03223 3576E 368B5 3421A DEPTH reversym SWAP SWAPDUP SWAP2DUP SWAPDROP 35857 35872 SWAPDROPDUP SWAPDROPSWAP 341BA SWAPROT 36C90 SWAP4ROLL 3457F SWAPOVER 36CB8 35018 03295 3579C 35CA4 341A8 SWAP3PICK 2SWAP ROT ROTDUP ROT2DUP ROTDROP 3574D ROT2DROP 34195 ROTDROPSWAP 3416E ROTSWAP 343BD ROTROT2DROP 35CCC 3423A ROTOVER 4ROLL 3588B 35F06 4ROLLDROP 4ROLLSWAP 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 ) 108 17. Stack Operations Addr. 36043 Name 4ROLLROT 360E3 34257 4ROLLOVER 5ROLL 358A7 34281 5ROLLDROP 6ROLL 342EA 7ROLL 342BB 8ROLL 03325 35FC4 35D80 344F2 34517 2D6006 ROLL ROLLDROP ROLLSWAP #1+ROLL #2+ROLL ˆ#3+ROLL 344DD 344CB 3422B #+ROLL #-ROLL UNROT 35D1C 35872 UNROTDUP UNROTDROP 343BD UNROT2DROP 341BA UNROTSWAP 360CF 3422B UNROTOVER 3UNROLL 34331 4UNROLL 35D44 343CF 4UNROLLDUP 4UNROLL3DROP 36057 4UNROLLROT 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 Name 5UNROLL 3438D 6UNROLL 35BEB 3615B 28225 3616F 0339E 34552 34564 3453D 3452B 032C2 35CF4 35D6C 7UNROLL 8UNROLL (9UNROLL) 10UNROLL UNROLL #1+UNROLL #2+UNROLL #+UNROLL #-UNROLL OVER OVERDUP OVERSWAP 35D6C OVERUNROT 36CF4 37046 34485 35F1A 360F7 36CCC 2F1C6 3448A 35F2E 36CE0 3610B 3448F 34494 34499 3449E 344A3 344A8 032E2 34436 34451 OVER5PICK 2OVER 3PICK 3PICKSWAP 3PICKOVER 3PICK3PICK DROP3PICK 4PICK 4PICKSWAP SWAP4PICK 4PICKOVER 5PICK 6PICK 7PICK 8PICK (9PICK) (10PICK) PICK #1+PICK #2+PICK 109 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 ) 110 Addr. 34465 34474 34417 34405 17. Stack Operations 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 1..n 1 ) 1..n 1 ) → 1..n+m 1 ) → 1..n-m 1 ) Chapter 18 Temporary Environments System RPL local variables (also known as temporary or lambda variables) work in the same way and have the same uses as in User RPL. You assign values to them, and these values can be recalled or changed while the variables exist. The stored values are referenced by means of local identifiers (also called lambda identifiers, or lams for short). These are very similar to the global identifiers that reference variables stored in memory (see Chapter 8), but the variables exist only temporarily. But there is one difference: in System RPL you can give a null (that is, empty) name to local variables, therefore effectively making them unnamed variables. This saves memory and is much faster. But before learning how to create and use unnamed local variables, let us learn how to use normal, named ones. 18.1 Named Local Variables Creating named local variables is very similar to creating temporary variables in User RPL. You have to create a list of local identifiers (called lams for short), and run the command BIND. To recall the contents of one of them, just enter its local identifier. 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 18. Temporary Environments LAM sec } BIND LAM first LAM sec DUP ’ LAM first STO %+ ’ LAM sec STO ABND 10 15 (first contains 2, and sec 3) (recall contents from first - 2) (recall contents from sec - 3) (store new contents in first) (results 5) (store sum in sec) (delete variables from memory) ; 18.2 Unnamed Local Variables 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 5 10 :: %2 %3 { NULLLAM NULLLAM } BIND 2GETLAM (recalls 2) 1GETLAM (recalls 3) DUP 2PUTLAM %+ 1PUTLAM ABND ; 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 18.3. Nested Temporary Environments 113 contents; and PUTLAM, which takes an object and the variable number, and stores that object in the specified variable. 18.3 Nested Temporary Environments 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 redefine 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 5 10 :: %2 %1 { LAM n2 LAM n1 } BIND 1GETLAM 2GETLAM (Returns 1) (Returns 2) 114 %4 %3 { NULLLAM NULLLAM } BIND 1GETLAM 2GETLAM 4GETLAM 5GETLAM ABND ABND 15 20 25 18. Temporary Environments (Returns (Returns (Returns (Returns 3) 4) 1) 2) ; 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 first 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. 18.4 Other Ways of Binding First, instead of a list of lams, you can always put each lam in the stack, followed by the number of variables to be bound, and run the command DOBIND instead of BIND. As a matter of fact, BIND is just :: INNERCOMP DOBIND ;. 18.4. Other Ways of Binding 115 When you are binding a great number of local variables, instead of entering the following code (which takes 67.5 bytes) 1 5 ... { NULLLAM NULLLAM NULLLAM NULLLAM BIND ... NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM } 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 find things like ... ZEROZEROZERO BINT3 DOBIND ... which is yet another way of binding three null named variables. This works because instead of NULLLAM, any fixed 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. Temporary Environments 18.5 Reference 18.5.1 Builtin IDs and LAMs Addr. 272FE Name NULLID 2B3AB NULLLAM 27155 'IDX 272F3 27937 (ID_EQ) (ID_SIGMADAT) 18.5.2 Conversion Addr. 05B15 362DE 18.5.3 Name $>ID DUP$>ID Description ( → id ) Null (empty) identifier ( → lam ) Puts NULLLAM in the stack. ( → id ) Puts ID X unevaluated on the stack. ID EQ ID ΣDAT Description ( $ → ID ) ( $ → $ ID ) Temporary Environments Words Addr. 074D0 Name BIND 074E4 DOBIND 36518 1LAMBIND 36513 DUP1LAMBIND 155006 ˆ2LAMBIND 156006 ˆ3LAMBIND Description ( obn..ob1 {lamn..lam1} → ) Binds n objects to n differently named lams. ( obn..ob1 lamn..lam1 #n → ) Binds n objects to n differently named lams. ( ob → ) Binds one object to a null named lam. ( ob → ob ) Does DUP then 1LAMBIND. ( ob1 ob2 → ) Binds two objects to null named lams. ( ob1 ob2 ob3 → ) Binds three objects to null named lams. 18.5. Reference Addr. 0DE0B0 Name ˜nNullBind 36A77 dvarlsBIND 07497 ABND 34D00 CACHE 34EBE DUMP 34D58 SAVESTACK 34FA6 undo 07943 @LAM 07D1B STOLAM 075A5 GETLAM 34616 34620 3462A 34634 3463E 34648 34652 3465C 34666 34670 1GETLAM 2GETLAM 3GETLAM 4GETLAM 5GETLAM 6GETLAM 7GETLAM 8GETLAM 9GETLAM 10GETLAM 117 Description ( obn..ob1 #n → ) Binds #n objects to null named lams. 1LAM has the count, 2LAM the first 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 "Undefined 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 ) 118 18. Temporary Environments Addr. 3467A 34684 3468E 34698 346A2 346AC 346B6 346C0 346CA 346D4 346DE 346E8 346F2 346FC 34706 34710 3471A 075E9 Name 11GETLAM 12GETLAM 13GETLAM 14GETLAM 15GETLAM 16GETLAM 17GETLAM 18GETLAM 19GETLAM 20GETLAM 21GETLAM 22GETLAM (23GETLAM) (24GETLAM) (25GETLAM) (26GETLAM) (27GETLAM) PUTLAM 34611 3461B 34625 3462F 34639 34643 3464D 34657 34661 3466B 34675 3467F 34689 34693 3469D 346A7 346B1 346BB 346C5 346CF 1PUTLAM 2PUTLAM 3PUTLAM 4PUTLAM 5PUTLAM 6PUTLAM 7PUTLAM 8PUTLAM 9PUTLAM 10PUTLAM 11PUTLAM 12PUTLAM 13PUTLAM 14PUTLAM 15PUTLAM 16PUTLAM 17PUTLAM 18PUTLAM 19PUTLAM 20PUTLAM 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 Name 21PUTLAM 22PUTLAM (23PUTLAM) (24PUTLAM) (25PUTLAM) (26PUTLAM) (27PUTLAM) DUP4PUTLAM 364FF 1GETABND 35DEE 1ABNDSWAP 35F42 1GETSWAP 2F318 1GETLAMSWP1+ 3632E 2GETEVAL 3483E GETLAMPAIR 347AB DUPTEMPENV 2B3A6 1NULLLAM{} 271F4 (2NULLLAM{}) 27208 (3NULLLAM{}) 2B3B7 4NULLLAM{} 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. Chapter 19 Runstream Control So far, you have only seen commands that do not affect the normal program flow. All the programs presented work sequentially, from the first command to the last, without any kind of change in this order. However, on all but the simplest programs, some kind of disruption in the default order is necessary. Sometimes, you need to have some part of the program repeated several times, or some actions must be executed only under certain conditions. This chapter will describe some low-level entries that affect the normal execution order. The situations described above can be done with higer-level constructs such as loops (see Chapter 21) and conditionals (described in Chapter 20). And you will probaly use those constructs more often than most of the entries below. However, this chapter also describes some concepts that help understanding how a System RPL program, and how to change the normal program flow. 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 identifiers this means trying to recall the contents and executing them, or simply putting themselves in the stack. 120 19.1. Some Concepts 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 command’s 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 finishes, 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 first 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 19. Runstream Control Runstream Commands The commands described here are the basic actions available. In the reference section below you will find several commands that combine these commands with others. Command ' 'R ticR Stack and Description ( → ob ) This is very easy to understand: it pushes the object after it (that is, the first 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 first 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 defined: :: '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. 19.2. Runstream Commands Command >R R> R@ IDUP RDROP RDUP RSWAP ?SEMI 123 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 finishes 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 first 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 finishes. 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 finishes, 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 flag is TRUE, skips the rest of the current secondary. 124 19. Runstream Control Command COLA SKIP ?SKIP 19.3 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 flag is true. Some Examples Our first example will show a useful use of COLA: when recursion is used. Suppose we have the two programs below for calculating the factorial of a number: fact: 1 5 :: CKREAL { LAM x } BIND %1 factiter ABND ; (First value for factorial) factiter: 1 5 :: 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 19.3. Some Examples 125 jump back to. This makes the program always use a fixed 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 first 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 define 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 first 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 finishes executing, the display is turned back on. But how can this be done, if nothing special needs to be called after the program finishes? The answer is simple: by manipulating the return stack. Here is the disassembly of that command: 1 :: Code R> 126 19. Runstream Control ERRSET COMPEVAL ERRTRAP :: ’REVAL ERRJMP ; Code 5 10 ; The first 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 difficulty 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 first 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, finishing 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 5 10 :: 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 19.3. Some Examples ticR WHILE RSWAP REPEAT DEPTH {}N PopVStackAbove 4UNROLL3DROP 15 20 127 (Get next element from list) (Repeat while there are elements) (Collect results) (Get saved stack) (Drop arguments & first object) ; This program may be somewhat difficult to understand at first, 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 finished, each of the objects in the list would be evaluated. Then, the first 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 first 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 first 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 first 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 19. Runstream Control Reference Addr. 06E8E Name NOP 06EEB 'R 06F66 'REVAL 36A27 'R'R 34BEF ticR 36A4A 'RRDROP 06F9F >R 0701F R> 07012 R@ 0716B IDUP 06F8E EVAL 262FB COMPEVAL 34BAB 2@REVAL Description ( → ) Does nothing. ( → ob ) Pushes next object in return stack (i.e., the first 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 first object in the stream above the previous one. 19.4. Reference Addr. 34BBB Name 3@REVAL 34A31 GOTO 34A46 ?GOTO 34A59 NOT?GOTO 26111 RDUP 06FB7 RDROP 343E1 2RDROP 343F3 3RDROP 36342 DROPRDROP 3597F RDROPCOLA 34144 RSWAP 368C9 RSKIP 2B8BE (OBJ>R) 2B8E6 (R>OBJ) 0312B SEMI 129 Description ( → ? ) EVAL first object in the stream above the stream above the previous one. ( → ) Jumps to next address in stream. Address is a fivenibble 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 five nibbles. ( flag → ) If FALSE jumps, else skips five 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 first object in the return stack (i.e., the first 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. 130 19.4.1 19. Runstream Control Quoting Objects Addr. 06E97 Name ' 3696E DUP' 36996 DROP' 36982 SWAP' 369AA OVER' 369BE STO' 369D2 TRUE' 369FF FALSE' 369E6 ONEFALSE' 36A13 #1+' 36306 'NOP 3619E 'ERRJMP 2B90B 'DROPFALSE 25E6A 'DoBadKey 25E6B 'DoBadKeyT 2F32E DROPDEADTRUE 36BBE ('x*) 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. 19.4. Reference 131 Addr. 36BD2 Name 'xDER 27B43 'IDFUNCTION 27B6B 'IDPOLAR 27B7F 'IDPARAMETER 29ED0 'Rapndit 36AA4 'xDEREQ 19.4.2 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? Skipping Objects Addr. 06FD1 Name COLA 36A63 3635B 3636F 34AD3 ONECOLA SWAPCOLA XYZ>ZCOLA COLA_EVAL 35994 COLACOLA 0714D 35715 3570C 35703 356D5 363FB 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 first 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 first 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 flag. The first 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 If. . . Then. . . Else Most of the time, you will create this kind of conditionals with the IT and ITE commands: Word IT ITE Stack and Action ( flag → ) If the flag is TRUE, the next object is executed, otherwise it is skipped. ( flag → ) If the flag 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. 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 flag in level one. If the flag 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 flag 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" ... ; 5 There are many words that combine case with other words. One of them is OVER#=case. It is not difficult to figure out what it does: first, OVER. Then, #= compares two bints. Finally, the case works as before. Using this word, the code above could be rewritten as: 1 5 :: BINT0 OVER#=case $ "Zero" BINT1 OVER#=case $ "One" BINT2 OVER#=case $ "Two" ... ; In the reference section below, you will find 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 final part. Some have only the initial or final 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 final part, things become more complicated, because there are two kinds of final part. The first kind has the final part written in UPPERCASE letters. The commands in the final 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 final part in lowercase letters. In this case, the commands in the final 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 flags; T represents TRUE and F, FALSE. #m and #n represent two binary integers, #m being smaller than #n. #set is the number of a flag, and this flag is set, #clr is the number of a flag, this flag 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 Boolean Flags Addr. 2602B Name COERCEFLAG 301BA %0<> 03A81 27E87 TRUE TrueTrue Description ( T → %1 ) ( F → %0 ) Converts system flag to user flag, drops current stream. ( % → flag ) Can be used to change a user flag into a system flag. ( → T ) ( → T T ) 136 20. Conditionals Addr. 36540 Name TrueFalse 03AC0 36554 FALSE FalseTrue 283E8 27E9B 35280 2D7006 35289 35B32 28211 2812F 374BE 35EF2 2962A FalseFalse failed DROPTRUE ˆ2DROPTRUE DROPFALSE 2DROPFALSE NDROPFALSE SWAPTRUE SWAPDROPTRUE XYZ>ZTRUE RDROPFALSE 03AF2 NOT 03B46 AND 03B75 OR 03ADA XOR 365F9 ORNOT 35C7C NOTAND 35CB8 ROTAND 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 flags are TRUE. ( flag1 flag2 → flag ) Returns TRUE if either flag is TRUE. ( flag1 flag2 → flag ) Returns TRUE if flags are different. ( flag1 flag2 → flag ) Returns FALSE if either flag is TRUE. ( flag1 flag2 → flag ) Returns TRUE if flag1 is TRUE and flag2 is FALSE. ( flag1 ob flag2 → ob flag ) Returns TRUE if either flag is TRUE. 20.4. Reference 20.4.2 General Tests Addr. 03B2E Name EQ 36621 2DUPEQ 3664E EQOR 3607F EQOVER 3663A EQ: 36635 DUPEQ: 03B97 EQUAL 3660D EQUALNOT 36662 EQUALOR 0FF006 ˆContains? 20.4.3 137 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. True/False Tests Addr. 34AA1 Name ?SEMI 34A92 NOT?SEMI Description ( T → :: ; ) ( F → :: <ob1> <rest> ; ) ( T → :: <ob1> <rest> ; ) ( F → :: ; ) 138 20. Conditionals Addr. 3692D Name ?SEMIDROP 34BD8 NOT?DROP 35F56 ?SWAP 35DDA ?SKIPSWAP 35F97 ?SWAPDROP 35F7E NOT?SWAPDROP 070FD RPIT 070C3 RPITE 34AF4 COLARPITE 34B4F 34A22 2'RCOLARPITE IT 0712A ?SKIP 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 20.4. Reference Addr. 34B3E Name ITE 36865 COLAITE 34ABE ITE_DROP 36EED ANDITE 349F9 case 34A13 NOTcase 36D4E ANDcase 36E6B ANDNOTcase 359E3 ORcase 3495D casedrop 3494E NOTcasedrop 34985 case2drop 34976 NOTcase2drop 349B1 caseDROP 349C6 NOTcaseDROP 368FB casedrptru 365B3 casedrpfls 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. 140 20. Conditionals Addr. 36B3A Name NOTcsdrpfls 349D6 case2DROP 349EA NOTcase2DROP 365CC case2drpfls 3652C caseTRUE 36914 NOTcaseTRUE 365E5 caseFALSE 2B2C5 NOTcaseFALSE 359AD COLAcase 359C8 COLANOTcase 20.4.4 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. Binary Integer Tests Addr. 363B5 Name #=?SKIP 363E2 #>?SKIP Description ( #m #n → :: ( #m #n → :: ( #m #n → :: ( #m #n → :: <ob2> <ob1> <ob1> <ob2> <rest> <rest> <rest> <rest> ; ; ; ; ) ) ) ) 20.4. Reference Addr. 35C54 Name #=ITE 36F29 #<ITE 36F3D #>ITE 348D2 #=case 348E2 OVER#=case 34939 #=casedrop 36590 #=casedrpfls 36D9E #<>case 36D76 #<case 36DCB #>case 34A7E #0=?SEMI 36383 #0=?SKIP 36F15 #0=ITE 36ED4 DUP#0=IT 36F51 DUP#0=ITE 348FC #0=case 348F7 DUP#0=case 3490E DUP#0=csedrp 141 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> ; ) ) ) ) ) 142 20. Conditionals Addr. 36D21 Name DUP#0=csDROP 36D8A #1=case 3639C #1=?SKIP 36DB2 #>2case 25E72 ?CaseKeyDef 25E73 ?CaseRomptr@ 20.4.5 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. Real and Complex Number Tests Addr. 2B149 Name %0=case 36DDF j%0=case 2B15D C%0=case 2B11C num0=case 2B1A3 %1=case Description ( %0 → :: %0 <ob1> ; ) ( ob → :: ob <ob2> <rest> ; ) ( %0 → :: <ob1> ; ) ( ob → :: <ob2> <rest> ; ) ( C%0 → :: C%0 <ob1> ; ) ( ob → :: ob <ob2> <rest> ; ) ( 0 → :: 0 <ob1> ; ) ( ob → :: ob <ob2> <rest> ; ) Both a real and a complex zero are TRUE conditions for this test. ( %1 → :: %1 <ob1> ; ) ( ob → :: ob <ob2> <rest> ; ) 20.4. Reference Addr. 2B1C1 Name C%1=case 2B176 num1=case 2B20C %2=case 2B22A C%2=case 2B1DF num2=case 2B289 %-1=case 2B2A7 C%-1=case 2B25C num-1=case 20.4.6 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. Meta Object Tests Addr. 2AFFB Name MEQ1stcase 2AF37 AEQ1stcase 2B01B MEQopscase 2B06A AEQopscase 2B083 Mid1stcase Description ( meta&ob1 ob2 → ob1=ob2 ? case ) Meta&ob1 ob2 ob1=ob2 ? case ( meta&ob → ob=nob ? case ) Meta&ob ob=nob ? case ( meta1&ob1 meta2&ob2 ob3 → ) Meta1&ob1 Meta2&ob2 ob3 meta1&ob1 meta2&ob2 Meta1&ob1 Meta2&ob2 ( meta&ob → ob is id ) lam ? case Meta&ob ob is id or lam ? case 144 Addr. 2AE32 20.4.7 20. Conditionals Name M-1stcasechs 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 General Object Tests Addr. 36EBB Name EQIT 36F01 EQITE 36D3A jEQcase 34999 EQcase 359F7 REQcase 34920 EQcasedrop 35A10 REQcasedrop 36D62 EQUALcase 36E7F EQUALNOTcase 36D08 EQUALcasedrp Description ( ob1 ob1 → :: <ob1> <rest> ; ) ( ob1 ob2 → :: <ob2> <rest> ; ) ( ob1 ob1 → :: <ob1> <ob3> <rest> ; ) ( ob1 ob2 → :: <ob2> <rest> ; ) ( ob1 ob1 → :: <ob1> ; ) ( ob1 ob2 → :: <ob2> <rest> ; ) ( ob1 ob1 → :: ob1 <ob1> ; ) ( ob1 ob2 → :: ob1 <ob2> <rest> ; ) Note: Should be called OVEREQcase. ( ob → :: ob <ob2> ; ) ( ob → :: ob <ob3> <rest> ; ) EQcase with the next object in the runstream. ( ob1 ob1 → :: <ob1> ; ) ( ob1 ob2 → :: ob1 <ob2> <rest> ; ) Note: should be OVEREQcasedrop. ( ob → <ob2> ; ) ( ob → <ob3> <rest> ; ) EQcasedrop with the next object in the runstream. ( ob1 ob1 → :: <ob1> ; ) ( ob1 ob2 → :: <ob2> <rest> ; ) ( ob1 ob1 → :: <ob2> <rest> ; ) ( ob1 ob2 → :: <ob1> ; ) ( ob ob1 ob2 → :: <ob1> ; ) ( ob ob1 ob2 → :: ob <ob2> <rest> ; ) 20.4. Reference Addr. 2AD81 Name EQUALcasedrop 29E99 tok=casedrop 2ADBD nonopcase 2B0CC idntcase 36E93 dIDNTNcase 2B0EF idntlamcase 36DF3 REALcase 36EA7 dREALNcase 36E07 dARRYcase 36E43 dLISTcase 260C6 NOTLISTcase 260D0 NOTSECOcase 260CB NOTROMPcase 2ADE0 numb1stcase 145 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. ; ) ) ) 146 20.4.8 20. Conditionals Miscellaneous Addr. 36F65 Name UserITE 36F79 SysITE 36C4F caseDoBadKey 36C36 caseDrpBadKy 361B2 caseERRJMP 36B53 caseSIZEERR 36B67 NcaseSIZEERR 36BAA NcaseTYPEERR 25EEE NoEdit?case 36E57 EditExstCase 2BE36 (ALGcase) 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. Chapter 21 Loops As in User RPL, there are two types of loops in System RPL: indefinite loops and definite loops. Indefinite loops are loops in which you do not know beforehand how many times it will be executed: it will repeat until a specific condition is met. They are created in a very similar manner to User RPL indefinite loops. Definite loops, on the other hand, are executed a number of times specified 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 Indefinite Loops In System RPL, indefinite loops can be made in three ways. The first is the WHILE loop. It is created like this: 1 5 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 first 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 indefinite loop is the UNTIL loop. It is created like this: 147 148 1 21. Loops BEGIN <loop clause> UNTIL This loop is always executed at least once. The word UNTIL expects a flag. 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 indefinite 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 How Indefinite Loops Work Indefinite 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 WHILE REPEAT Stack and action (→) This copies the interpreter pointer into the return stack. ( flag → ) If the flag 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 flag 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. 21.2. Definite Loops Word AGAIN 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. 21.2 Definite Loops Definite loops are created with DO and LOOP (or other equivalent words). DO takes two bints from the stack, representing the stop and start values. The start value is stored as the current index, which can be recalled with INDEX@. The stop value can be recalled with ISTOP@. You can store a new value to one of them with INDEXSTO and ISTOPSTO, respectively. DO’s counterparts are LOOP and +LOOP. The former increments the index value by one, and checks if the new value is greater than or equal to the stop value, exiting the loop if it is. If not, the loop is executed again. +LOOP works similarly, incrementing the index by the bint in level one. The standard form of a DO loop is stop start DO <loop clause> LOOP which executes <loop clause> for each index value from start to stop-1. Note that the stop value is greater than what it would be in User RPL, so pay attention. Also, the “stop” value comes before the “start” value. There are several words provided to be used with DO loops, like ONE_DO. They are listed below. Here is an example of a simple loop which outputs the bints #1h, #2h, #3h and #4h to the stack: 1 5 :: BINT5 BINT1 DO INDEX@ LOOP ; It could be changed to: 150 1 5 21. Loops :: BINT5 ONE_DO INDEX@ LOOP ; 21.2.1 How a DO Loop Works 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 first 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 first 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 first object after the DO. 21.3 Reference 21.3.1 Indefinite Loops Addr. 0716B Name IDUP 071A2 BEGIN Description ( → ) Pushes interpreter pointer into the return stack. ( → ) Pushes interpreter pointer into the return stack. 21.3. Reference Addr. 071AB Name AGAIN 071E5 REPEAT 071C8 UNTIL 3640F NOT_UNTIL 35B96 #0=UNTIL 071EE WHILE 36428 NOT_WHILE 36441 DUP#0<>WHILE 21.3.2 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. Definite Loops Addr. 073F7 073C3 364C8 073CE 073DB 364E1 Name DO ZERO_DO DUP#0_DO ONE_DO #1+_ONE_DO toLEN_DO 07334 073A5 LOOP +LOOP 364AF 36496 34AAD 07221 DROPLOOP SWAPLOOP SEMILOOP INDEX@ Description ( #stop #start → ) ( #stop → ) ( #stop → #stop ) ( #stop → ) ( #stop → ) ( {} → {} ) From ONE to #elements. ( → ) ( # → ) Increments index by specified number. ( ob → ) ( ob1 ob2 → ob2 ob1 ) ( → ) ( → # ) Recalls topmost loop counter value. 152 21. Loops Addr. 3645A 3646E 36482 367D9 07270 Name DUPINDEX@ SWAPINDEX@ OVERINDEX@ INDEX@#INDEXSTO 07249 ISTOP@ 07295 ISTOPSTO 283FC 07258 ISTOP-INDEX JINDEX@ 072AD JINDEXSTO 07264 JSTOP@ 072C2 JSTOPSTO 3709B ExitAtLOOP 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 Chapter 22 Error Handling When an error occurs in a System RPL program, normally the program is aborted and a message box is popped with the error message. However, sometimes it is desired for the program to trap the error and if possible continue execution, or perhaps show that an error happened in a different way. Other times, the programs need to generate an error. For example, if the user gave invalid input for the program, it should abort with a “Invalid Argument Type” error, instead of risking crashing the machine. 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 5 :: ... 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 flexible. 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 22. Error Handling The Protection Word 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 5 10 15 20 :: ... 1LAMBIND ... TEN ZERO_DO ERRSET :: ... 1LAMBIND ... FIVE ONE_DO <suspect object is here> LOOP ABND ; ERRTRAP :: <error handling> ; LOOP ... ABND ; 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 find one (of each type) with a non-zero protection word. These environments were the ones that already existed before 22.2. Generating Errors 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 first 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 defines 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 define 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, first 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 simplified by using the words DO#EXIT and DO$EXIT. The first 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 22. Error Handling 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 Reference 22.3.1 General Words Addr. 26067 Name ERRBEEP 04CE6 ERROR@ 04D0E ERRORSTO 36883 ERROROUT 04D33 ERRORCLR 04ED1 ERRJMP 04E07 GETEXITMSG 04E37 EXITMSGSTO 25EAE DO#EXIT 25EB0 DO%EXIT 25EAF DO$EXIT 04EA4 ABORT 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 defined 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. 22.3. Reference Addr. 04E5E Name ERRSET 04EB8 ERRTRAP 04D87 JstGetTHEMESG 04D64 GETTHEMESG 39332 (?GETMSG) 22.3.2 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. Error Generating Words Addr. 04FB6 Name SETMEMERR 05016 SETROMPERR 04FF2 SETPORTNOTAV 26134 SYNTAXERR 260C1 NOHALTERR 26116 SETCIRCERR 262E2 SETSTACKERR Description Error 001h Generates "Insufficient Memory" error. Error 004h Generates "Undefined XLIB Name" error. Error 00Ah Generates "Port Not Available" error. Error 106h Generates "Invalid Syntax" error. Error 126h Generates "HALT Not Allowed" error. Error 129h Generates "Circular Reference" error. Error 201h Generates "Too Few Arguments" error. 158 22. Error Handling Addr. 262DD Name SETTYPEERR 262D8 SETSIZEERR 262E7 SETNONEXTERR 2F458 SETIVLERR 2F37B SetIOPARErr 3721C Sig?ErrJmp 25F10 ederr Description Error 202h Generates "Bad Argument Type" error. Error 203h Generates "Bad Argument Value" error. Error 204h Generates "Undefined Name" error. Error 304h Generates "Undefined 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. Chapter 23 The Virtual Stack The HP49 has a “Virtual Stack” feature. It is a set of commands that can manipulate an RPN Stack: basically, you can save the stack and then restore it. There exists, in fact, a stack of stacks (a metastack?). The topmost (and in normal conditions, the only) one is the normal RPN stack, in which the user enter objects, and from which commands take and return arguments. This stack will be referred as RPN stack. The set (or, more specifically, the stack) of stacks will be referred as “Virtual Stack”, with uppercase initials. You can push the RPN stack (or part of it), making these pushed objects a level of the “Virtual Stack”. A level of the Virtual Stack will be called “virtual stack”, with lowercase initials. After pushing the RPN stack, you can manipulate it in any way, and you can at any time restore the contents previously pushed. Or you can push another stack, thus having two stored virtual stacks, in addition to a “new” RPN stack which can be used independently. Each of these pushed virtual stacks holds a number of objects, and the count of objects. The number of objects is determined when the virtual stack is pushed, and it is not possible to add more objects later. The words that return the virtual stack as a meta return this count, the others do not. When pushing, the words that push the stack as a meta allow you to push only part of the stack; the others push everything in the RPN stack. But you can pop as a meta a stack that was not pushed as one, or push a stack as a meta and pop is not being a meta. The only difference is that the count of elements may or may not be returned. The Virtual Stack is used in nearly every HP49 application. It is extremely useful (and really fast) when you want to save immediately a complete stack, without using much memory. It is the Virtual Stack that allows you to enter a full command line in an Input Form and get the results of that command line in the field, for example. Suppose in an InputForm you type DROP. You will get an error, “Too Few Arguments” even if the stack was not empty. Before the HP49 runs the 159 160 23. The Virtual Stack 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 first 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 Reference Addr. 25F1E Name PushVStack 25F1F PushVStack&Clear 25F1A PopMetaVStackDROP 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.) 23.1. Reference Addr. 25F1B Name PopVStack 25F17 GetMetaVStackDROP 25F18 GetVStack 26265 PushMetaVStack 25F1D PushMetaVStack&Drop 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. 162 23. The Virtual Stack Addr. 25F19 Name PopMetaVStack 2624C GetMetaVStack 25F20 PushVStack&Keep 25F21 PushVStack&KeepDROP 25F1C PopVStackAbove 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). 23.1. Reference Addr. 26215 Name DropVStack 26229 GetElemTopVStack 2626F PutElemTopVStack 26224 GetElemBotVStack 2626A PutElemBotVStack 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. 164 23. The Virtual Stack Addr. 26233 Name GetVStackProtectWord 2622E SetVStackProtectWord Description ( → # ) Hacking stuff: Gets the protection word of the last VStack level. ( # → ) Hacking stuff: Sets the protection word of the last VStack level. Chapter 24 Memory Operations The basic equivalents to the user commands STO and RCL are the words CREATE, STO and @: Word CREATE STO @ Stack and Action ( ob id → ) Creates a variable with the name id and contents ob. An error occours if ob is or contains the current directory (“Directory Recursion”). This word does not check if there is already a variable with name id: even if there is, another one is created. ( ob id → ) ( ob lam → ) In the lam case, the temporary identifier is rebound to ob. An error occurs if the lam is unbound. In the id case, STO attempts to replace the contents of the variable named id with ob. If a variable with that name was not found, a new variable is created. ( id → ob TRUE ) ( id → FALSE ) ( lam → ob TRUE ) ( lam → FALSE ) Attempts to return the contents stored in the variable or temporary identifier. Returns the stored object and TRUE if successful, or just FALSE if no variable or lam was found with that name. In the case of variables, searching starts in the current directory and works upwards through parent directories if necessary. 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 24. Memory Operations 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 find in the list below. 24.1 Reference 24.1.1 Recalling, Storing and Purging Addr. 0797B Name @ 35C2C DUP@ 35A5B SAFE@ 35A56 DUPSAFE@ 25EF7 SAFE@_HERE 2F064 Sys@ 2F2A3 XEQRCL 2F24E LISTRCL 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 specified path. 24.1. Reference Addr. 07D27 Name STO 35A29 SAFESTO 2F380 SysSTO 25E79 XEQSTOID 25F0C 3E823 XEQStoKey xSTO> 0BD007 ˆPROMPTSTO1 085D3 REPLACE 08C27 PURGE 25E78 ?PURGE_HERE 1D3006 ˆSAFEPURGE 08696 CREATE 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 first 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 first. ( 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. 168 24. Memory Operations Addr. 25EC4 Name DoHere: 36A8B 'LAMLNAMESTO 24.1.2 Description ( → ) Next object in the runstream is evaluated for the current directory only. ( ob → ) STO to LAM LAMLNAME. Directories Addr. 25EA1 Name CREATEDIR 08326 LASTRAM-WORD 25EE7 LastNonNull 08376 PREVRAM-WORD 25EF2 PrevNonNull 082E3 RAM-WORDNAME 25F14 XEQPGDIR 2F296 XEQORDER 25EB9 DOVARS Description ( id → ) Creates an empty directory. Calls ?PURGE_HERE first to delete the original. ( rrp → ob T ) ( rrp → F ) Recalls first object in directory. ( rrp → ob T ) ( rrp → F ) Recalls first 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. first. ( {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. 24.1. Reference Addr. 25EB8 Name DOTVARS% 0BD002 ˆDOTVARS{} 25EF1 PATHDIR 2F265 UPDIR 08D5A CONTEXT@ 08D08 CONTEXT! 08DD4 SYSRRP? 08D92 HOMEDIR 3712C SaveVarRes 37186 RestVarRes 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. 170 24.1.3 24. Memory Operations The Hidden Directory Addr. 3714A Name SetHiddenRes 370C3 WithHidden 370AF RclHiddenVar 37104 StoHiddenVar 37118 PuHiddenVar 24.1.4 Description ( → ) Sets the hidden directory as the current and last directories. ( → ? ) Executes next command in hidden directory. ( id → ob T ) ( id → F ) Recalls variable in hidden directory. Same as :: WithHidden @ ; ( ob id → ) Stores variable in hidden directory. Same as :: WithHidden STO ; ( id → ) Purges variable in hidden directory. Same as :: WithHidden PURGE ; 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 modified, 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 modified 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 35C90 TOTEMPSWAP 25E9F CKREF 3700A SWAPCKREF 06B4E INTEMNOTREF? 01E0E8 ˜INTEMPOB? 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 ) Chapter 25 Time and Alarms This chapter contains a list of entries related to times, dates and the internal list of alarms. 25.1 Reference Addr. 26120 Name SLOW 26125 VERYSLOW 2F37E SORTASLOW 2612A VERYVERYSLOW 2F2D4 dowait 3005E %>HMS 30912 %%H>HMS 30077 %HMS> 3008B %HMS+ 300B3 %HMS- 2EECF TOD Description ( → ) 15 millisecond delay. ( → ) 300 millisecond delay. ( → ) 1.2 second delay (4 x VERYSLOW). ( → ) 3 second delay. ( %secs → ) Waits specified 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 Name VerifyTOD 2EED0 DATE 2EED2 DATE+DAYS 2EED1 DDAYS 2EED7 CLKTICKS 2EED3 TIMESTR 2F329 Date>d$ 2F381 TOD>t$ 2F1AB Date>hxs13 2F003 (Ticks>Date) 2F002 (Ticks>TOD) 2F004 (Ticks>Rpt) 173 Description ( %time → %time ) Checks for validaty of time. Errors if not valid. ( → %date ) Returns current date. ( %date %days → %date' ) Adds specified 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. 174 25.1.1 25. Time and Alarms Alarms The internal alarms list has this format: { { hxs action } { ... } ... } The length of each hxs is 24 nibbles. The least significant 13 nibbles represent the tick value for the time and date. The next 10 nibbles represent the repeat interval, if any. The most significant nibble represents the status of the alarm (pending, acknowledged, etc.). Addr. 2F178 Name ALARMS@ 2F37F STOALM 2F0AC PURGALARM% 2F314 RCLALARM% 25FA9 ALARM? 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. Chapter 26 System Functions Following, there is a list of functions dealing with the system, such as configuring some aspects of the calculator and turning the calculator off. The functions dealing with user and system flags are also described here. 26.1 Reference 26.1.1 User and System Flags Addr. 2614D Name SetSysFlag 26044 ClrSysFlag 26170 TestSysFlag 26152 SetUserFlag 26049 ClrUserFlag 26175 TestUserFlag 2F259 RCLSYSF 2F25F (STOSYSF) 2F23E DOSTOSYSF Description ( # → ) Sets the system flag with number #. ( # → ) Clears the system flag with number #. ( # → flag ) Returns TRUE if system flag is set. ( # → ) Set the user flag with number #. ( # → ) Clear the user flag with number #. ( # → flag ) Returns TRUE if user flag is set. ( → hxs ) Recalls system flags from 1 to 64. ( hxs → ) Stores system flags from 1 to 64. ( hxs → ) Stores system flags from 1 to 64, checking for changes in LASTARG flag. 175 176 26. System Functions Addr. 2F25A Name (RCLSYSF2) 2F260 (STOSYSF2) 2F25B RCLUSERF 2F261 (STOUSERF) 2F25C (RCLUSERF2) 2F262 (STOUSERF2) 2F3A9 (STOALLF) 2F3AA (STOALLF2) 3B76C (DOSTOALLF2) 25F23 SaveSysFlags 25F22 RestoreSysFlags 2ABF0 RunSafeFlags Description ( → hxs ) Recalls system flags from 65 to 128. ( hxs → ) Stores system flags from 65 to 128. ( → hxs ) Recalls user flags from 1 to 64. ( hxs → ) Stores user flags from 1 to 64. ( → hxs ) Recalls user flags from 65 to 128. ( hxs → ) Stores user flags from 65 to 128. ( hxs_usr hxs_sys → ) Stores user and system flags from 1 to 64. First is user flags, second is system flags. ( hxs_sys1 hxs_usr1 hxs_sys2 hxs_usr2 → ) Expects 4 hxs and stores them as user and system flags. ( {} → ) Stores system and user flags. Expects a list with two or four hxs. The first two are the system and user flags, respectively, from 1 to 64. The last two, if present, are the system and user flags, respectively, from 65 to 128. ( → ) Save system flags in a virtual stack. ( → ) Restore system flags from virtual stack, popping that level. Run Stream: ( ob → ) Evaluates the next object in the runstream, but saves and restores the system flags around it. Uses DoRunSafe. This is very useful. 26.1. Reference Addr. 2AB69 Name RunInApprox 2AC0E DoRunSafe 2ABD7 RunSafeFlagsNoError 2EFA5 DOHEX 2EFA8 DODEC 2EFA6 DOBIN 2EFA7 DOOCT 2EFBF BASE 2605D DOSTD 26053 DOFIX 26058 DOSCI 2604E DOENG 261A7 savefmt1 177 Description Run Stream: ( ob → ) Eval next object in runstream with system flags 20, 21 clear and 22, 105, 102, 120 set. ( ob → hxs1 hxs2 ) Evaluate ob and put the system flags 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. 178 26. System Functions Addr. 261A2 Name rstfmt1 2FFDB SETRAD 25EF3 RAD? 2FFBD SETDEG 2FFEF SETGRAD 25EBA DPRADIX? 26.1.2 Description ( → ) Restores the number format saved by savefmt1. Only one set of flags 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 ".". General Functions Addr. 25EB2 Name DOBEEP 261AC setbeep 041A7 TurnOff 041ED DEEPSLEEP 01118 LowBat? 0426A ShowInvRomp 2EE5D ?FlashAlert 05F42 GARBAGE 05F61 MEM 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.) 26.1. Reference Addr. 05902 Name OSIZE 05944 OCRC 2F257 OCRC% 2F267 VARSIZE 394C8 INHARDROM? 05AB3 CHANGETYPE 25F90 >LANGUAGE 25F95 LANGUAGE> 256BE NOBLINK 25E71 ?BlinkCursor 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 specified 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 x→LANGUAGE. ( → # ) 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. Chapter 27 Serial Communications The entries listed here allow the programmer to write programs that communicate with other machines via the HP49G serial interface. 27.1 Reference Addr. 2EEBB Name SENDLIST 2EEBC GETNAME 2EEBD DOFINISH 2EEBE DOPKT 2EEC1 DOBAUD 2EEC2 DOPARITY 2EEC3 DOTRANSIO 2EEC4 DOKERRM 2EEC5 DOBUFLEN 2EEC6 DOSBRK 2EEC7 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 Name CLOSEUART 2EECB DOCR 2EECD DODELAY 2F31A APNDCRLF 2716D StdIOPAR 2EEBF GetIOPAR 2F062 StoIOPAR 2F37B SetIOPARErr 2F34F KVISLF 2F34E KVIS 2F34D KINVISLF 2F389 VERSTRING 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. Chapter 28 The HP49 Filer The HP49 File Manager (Filer for short) allows the programmer to write various applications that deal with files. Two built-in applications that use the filer are the File Manager and the Font Browser. 28.1 Using the Filer The general entry to call the filer is ˆFILER_MANAGERTYPE. It takes three arguments: Filer_Type, Filer_Path and Filer_List. 28.1.1 The Filer_Type Argument 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 specified 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 The Filer_Path Argument This argument specifies 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 } 28.1.3 183 Meaning start in port n start in backup FOO in port n. The Filer_List Argument This argument specifies 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 five 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 ] 5 } { 10 (Item 2) ... } .. 15 } Each of the elements in the sublists will be described now. 28.1.3.1 Name_Item This specifies 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 five possible values, which are listed in the table below. The “Constant” column lists the name of a constant (defined in the filer.h file in the includes directory of the examples) that you should use when programming. 184 28. The HP49 Filer Value 0 1 Constant fEverywhere fVar 2 fNoLib 3 fNoBackup 4 fHomePort 28.1.3.3 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. Action_Item This will define 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 define your own. The table below lists the built-in actions available. Again, “Constant” is the name of a constant defined in filer.h. Value 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 24 Constant cBip cInfo cHexa cView cArbo cUp cMaxUp cDown cMaxDown cSelect cUpDir cDownDir cPreviousMenu cNextMenu cEVAL cSwapHeader cDetails 25 26 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 first 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 Constant cMOVE cRCL cPURGE cRENAME cCRDIR cORDER cSEND cHALT cEDITB 36 37 38 39 40 41 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 filer temporarily. Edits the select variable in the most appropriate editor. Receives a variable using Kermit. Exits the filer. Scrolls the contents of the filer one screen up. Scrolls the contents of the filer 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 16–23. Each of these seven values specifies 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 18 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) 186 28. The HP49 Filer Value 19 20 21 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 22 23 Custom calls 22 and 23 will not be described here, as they are not very useful and somewhat more difficult 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. 28.1. Using the Filer 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 5 { "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 fifth of the list. So, if you are using a built-in call you will have to define the entry as something like this: { "TITLE" fEverywhere cQUIT TakeOver # 12F } This will assing the program to Alpha-ON. 188 28.2 28. The HP49 Filer Reference Addr. 067004 Name ˆFiler 06D004 ˆFILER_MANAGER 06E004 ˆFILER_MANAGERTYPE Description ( → ) Calls the standard filer. ( {path} {args} → ) Customized Filer, browsing all object types. ( {types} {path} {args} → ) {args} = { item1 item2 ... } item = {name loc action [prog] [key]} ... } Customized filer for selected types only. Part III Input and Output Chapter 29 Checking for Arguments In System RPL, it is very important to check if all arguments required by a program are present in the stack, and if they are of a valid type, when that program is directly accessible to the user. In User RPL, you do not have to worry about this: it is done automatically. In System RPL, very few commands do that, so this task is left for the programmer. This may seen at first a disadvantage, but it is in fact an advantage: you just need to check the arguments once, in the beginning of the program. This generates a fast code, differently from User RPL where the arguments are checked in every command. 29.1 Number of Arguments To check for a specific 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 29. Checking for Arguments Besides checking for the specified 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 fixed 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-defined number of arguments (like DROPN), use the words CKN or CKNNOLASTWD. These words first check for a real number in level one, and then for the specified 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. 29.2. Argument Type 29.2 193 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 5 ... 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 definitions 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 definition 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 first 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 definition 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 first n represents the object in level five, 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 29. Checking for Arguments 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 Identifier (global) LAM (Temporary identifier) 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 five. 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. 29.2. Argument Type 29.2.1 195 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 5 10 15 20 25 30 :: 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 ; 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 29. Checking for Arguments 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 Reference Addr. 262B0 Name CK0 262B5 CK1 262BA CK2 262BF CK3 262C4 CK4 262C9 CK5 262CE CKN 26292 CK0NOLASTWD Description ( → ) Saves current command to LASTCKCMD. Marks stack below level 1 to STACKMARK. ( ob → ob ) Saves current command to LASTCKCMD. Verifies 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 five 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. 29.3. Reference Addr. 26297 Name CK1NOLASTWD 2629C CK2NOLASTWD 262A1 CK3NOLASTWD 262A6 CK4NOLASTWD 262AB CK5NOLASTWD 25F25 CKNNOLASTWD 2631E CK&DISPATCH0 26328 CK&DISPATCH1 26323 CK&DISPATCH2 26300 CK1&Dispatch 26305 CK2&Dispatch 2630A CK3&Dispatch 2630F CK4&Dispatch 26314 CK5&Dispatch 25F9A 0LASTOWDOB! 2EF6C AtUserStack 25E9E CK1NoBlame 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 ; 198 29. Checking for Arguments Addr. 354CB Name 'RSAVEWORD 26319 EvalNoCK 25F29 (EvalNoCK:) 2A9E9 RunRPN: 29.3.1 Description ( → ) Stores first object in the composite above the actual to LASTCKCMD. aka: 'RSaveRomWrd ( comp → ? ) Evaluates composite without saving as current command. If first command is CK<n>&Dispatch it is replaced by CK&DISPATCH1. If first command is CK<n> it is skipped. Any other first 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 flag 95 clear). After the evaluation, the system flag is restored to its old value. Type Checking Addr. 36B7B Name CKREAL 184006 ˆCK1Z 185006 ˆCK2Z 186006 ˆCK3Z 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. 29.3. Reference Addr. 3D2B4 Name CKSYMBTYPE 2EF07 nmetasyms 03C64 TYPE 3BC43 XEQTYPE 3511D 35118 TYPEREAL? DUPTYPEREAL? 3512C 35127 3510E 35109 TYPECMP? DUPTYPECMP? TYPECSTR? DUPTYPECSTR? 35136 DUPTYPEARRY? 3513B 35292 352AD 35195 35190 TYPEARRY? TYPERARRY? TYPECARRY? TYPELIST? DUPTYPELIST? 3504B 35046 350E1 350DC 194006 TYPEIDNT? DUPTYPEIDNT? TYPELAM? DUPTYPELAM? ˆTYPEIDNTLAM? 2F0D4 (ILnot?) 35168 35163 350FF 350FA 35186 TYPESYMB? DUPTYPESYMB? TYPEHSTR? DUPTYPEHSTR? TYPEGROB? 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 ) 200 29. Checking for Arguments Addr. 35181 351A4 3519F 351B3 Name DUPTYPEGROB? TYPETAGGED? DUPTYPETAG? TYPEEXT? 351AE DUPTYPEEXT? 3514A 35145 350F0 350EB 35159 35154 3503C 35037 35177 TYPEROMP? DUPTYPEROMP? TYPEBINT? DUPTYPEBINT? TYPERRP? DUPTYPERRP? TYPECHAR? DUPTYPECHAR? TYPECOL? 35172 DUPTYPECOL? 350D2 350CD 35087 35082 350C3 350BE 350B4 350AF 350A5 350A0 35096 35091 182006 183006 114007 TYPEAPLET? DUPTYPEAPLET? TYPEFLASHPTR? ˆTYPEGAUSSINT? 115007 ˆDTYPEGAUSSINT? DUPTYPEFLASHPTR? TYPEFONT? DUPTYPEFONT? TYPELNGCMP? DUPTYPELNGCMP? TYPELNGREAL? DUPTYPELNGREAL? TYPEZINT? DUPTYPEZINT? ˆTYPEZ? ˆDUPTYPEZ? 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. 29.3. Reference Addr. 116007 Name ˆDUPTYPEGAUSSINT? 187006 ˆCK1Cext 181006 ˆCKALG 25E77 ?OKINALG 171006 ˆDTYPFMAT? 191006 ˆIDNTLAM? 192006 ˆFLOAT? 195006 ˆREAL? 196006 ˆTYPEREALZINT? 193006 ˆCKSYMREALCMP 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. Chapter 30 Keyboard Control There are several ways a System RPL program can get input from the user: • From the stack; • Waiting keystrokes from the keyboard; • Using the internal INPUT; • Using the internal INFORM; • Setting up a Parameterized Outer Loop; • And other methods. You have already seen how to get input directly from the stack. Using InputLine, ParOuterLoop and input forms will be seen on the following chapters. In this chapter, you will learn how to read keystrokes from the keyboard. 30.1 Key Locations In User RPL, key representations have the form %rc.p. In System RPL, they are represented by two binary integers. The first, often called, #KeyCode, goes from one (F1 key) to 51 (ENTER key), and represents each key, in order, from left to right and top to bottom. The up arrow is code 10, being considered the fourth key of the second row. The left, down and right arrows have codes 14, 15, 16, respectively, being considered as part of the third row. The second number, #Plane, represents the modifier states, according to the table below: 202 30.1. Key Locations #Plane 1 2 3 Modifiers None Left-shift Right-shift 203 #Plane 4 5 6 Modifiers Alpha Alpha, left-shift Alpha, right-shift 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 modifiers 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 five 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 first 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 B #kc 1h 1h 1h 1h 1h 1h #pl 1h 2h 3h 4h 5h 6h #kc 1h 1h 1h 1h 1h 1h #pl 1h 2h 3h 4h 5h 6h 1h 1h 1h 1h 1h 8h 9h Ah Bh Ch 41h C1h 81h 41h C1h 2h 3h 4h 5h 6h 204 30. Keyboard Control 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+ ; 30.2 Waiting for a Key A convenient entry used to wait for a key is WaitForKey. This command puts the HP49 in a low-power state and waits until a key is pressed. It then returns the key code to level two and the plane to level one. There are other words, listed below, which are used in other circunstances. Unfortunately, WaitForKey does not deal with the shift-hold keys. We therefore list below a short program which behaves just like WaitForKey but returns the extended keycode (encoding B). The program contains a code object accessing the key buffer, which we list without explanation. You will find this program in the keyboard directory in the examples directory. 1 5 10 15 :: 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 30.3. Reference ENDCODE ROTDROPSWAP 20 205 (replace keycode with extended value) ; If you would like the program to return encoding A instead of encoding B, just replace ROTDROPSWAP with: BINT63 #>case #6+ 30.3 Reference 30.3.1 Converting Keycodes Addr. 25EA7 Name Ck&DecKeyLoc 25EA9 CodePl>%rc.p 25EDC H/W>KeyCode 25EEA ModifierKey? 30.3.2 Addr. 261CA 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 modifiers right-shift, left-shift, or alpha? Waiting for Keys Name FLUSHKEYS Description ( → ) Flushes the key buffer. aka: FLUSH 206 30. Keyboard Control Addr. 04708 Name CHECKKEY 04714 GETTOUCH 25ED6 GETKEY 25ED7 GETKEY* 25ED9 GetKeyOb 25EC5 DoKeyOb 047C7 REPKEY? 25EE3 KEYINBUFFER? 25F0B WaitForKey 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. 30.3. Reference Addr. 2F268 30.3.3 Name Wait/GetKey 207 Description ( % → ? ) Internal WAIT command. Does not handle shifthold keys. The ATTN Flag Addr. 25FAE Name ATTN? 25E70 ?ATTNQUIT 25E9D CK0ATTNABORT 25EED NoAttn?Semi 05040 ATTNFLG@ 05068 ATTNFLGCLR 30.3.4 Bad Keys Addr. 25EBF Name DoBadKey 25ECD DropBadKey 25E6E 2DropBadKey Description ( → flag ) Returns TRUE if CANCEL has been pressed. ( → ) If CANCEL has been pressed, ABORTs program. aka: ?ATTN_QUIT ( → ) Executed by the UserRPL program delimiters x<< and x>> and by xUNTIL. Mainly just ?ATTNQUIT. ( → ) If CANCEL has been not pressed, drops the rest of the stream. ( → # ) Recalls CANCEL key counter. ( → ) Clears CANCEL key counter. Does not affect the key buffer. Description ( → ) Beeps. ( ob → ) Beeps. ( ob ob' → ) Beeps. 208 30.3.5 30. Keyboard Control 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 Name UserKeys? 25967 GetUserKeys 2F3B3 (AsnKey) 25621 (NonUsrKeyOK?) 25617 (SetNUsrKeyOK) 2561C (ClrNUsrKeyOK) 25EE5 Key>StdKeyOb 25EE6 Key>U/SKeyOb 255006 ˆKEYEVAL Description ( → flag ) Does BINT62 TestSysFlag. ( → {} ) Returns user keys list (internal format). ( ob #kc #p → ) Assigns an object to a key, specified in system format. ( → flag ) Returns TRUE if the keys not defined do their normal actions. ( → ) Keys not defined do their normal actions. ( → ) Keys not defined 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. Chapter 31 Using InputLine The command InputLine is the system equivalent to the user command INPUT. Its use is similar, and does a similar thing: • Displays a prompt in the top of the screen; • Starts the keyboard entry modes; • Initializes the edit line; • Accepts input until ENTER is pressed; • Parses, evaluates, or just returns the user input; • Returns TRUE if the environment was exited by ENTER or FALSE if it was aborted by ON/CANCEL. The stack must contain the following parameters: Name $Prompt $EditLine CursorPos #Ins/Rep Description The prompt to be displayed during input. The initial edit line. The initial cursor position. You can either specify the character position, in absolute terms, or as a two-element list with the row and column. In both cases, a #0 represents the end of edit line, row or column. All numbers should be specified as bints, naturally. The initial insert/replace mode of the cursor: • #0 current mode • #1 insert mode • #2 replace mode 209 210 31. Using InputLine Name #Entry Description The initial entry mode: • #0 current entry mode plus program entry mode • #1 only program entry mode • #2 program and algebraic entry modes #Alphalock The initial alpha mode: • #0 current mode • #1 alpha enabled • #2 alpha disabled ILMenu The initial menu, in the format specified below. Normally, specified as FALSE, which means that the menu should not be changed. The initial menu row number (normally BINT1, to show the first page). A flag: • TRUE CANCEL aborts the input • FALSE CANCEL just clears the edit line #ILMenu AttnAbort? #Parse 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 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 31.1. Menu Key Assignments 31.1 211 Menu Key Assignments 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 flag 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 5 10 15 :: $ "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) 212 31.3 31. Using InputLine Reference Addr. 2EF5F Name InputLine 2F154 (input$) 2F155 (input{}) 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. Chapter 32 The Parameterized Outer Loop The Parameterized Outer Loop is a System RPL structure that allows you to create a complete application, which receives keystrokes and does different actions based on the key that was pressed. This is repeated as many times as necessary, until an exit condition happens. Most of the time, there is a key that stops the loop, like CANCEL or DROP. Generally, it is used with programs that work with the display. Complex uses of the POL include input forms (Chapter 35) and the browser (Chapters 33 and 34). Note that POLs are a very general construct and for that reason they require elaborate arguments. Simple applications can sometimes be implemented more easily and compactly with a loop around WaitForKey (section 30.2) and direct display handling. To set up a parameterized outer loop, nine parameters are necessary: Parameter name AppDisplay AppKeys NonAppKeyOK? DoStdKeys? AppMenu #AppMenuPage Description This object is evaluated before each key evaluation. It should handle display updating not handled by the keys themselves, and should also perform special handling of errors. The hard key assignments, in the format described below. A flag: if TRUE, then the hard keys not assigned perform their normal actions. Otherwise, they just beep. A flag: if TRUE, then standard key definitions are used for non-application keys instead of default key processing. Either the menu specification, in the format described in section 37.1, or FALSE to leave the current menu unchanged. The initial menu page. Normally BINT1 to show the first page. 213 214 32. The Parameterized Outer Loop Parameter name SuspendOK? ExitCond AppError Description A flag: 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. 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. 32.1 Parameterized Outer Loop Words The parameterized outer loop is formed by calls (with proper error handling) to the following words. None of them return anything, and the only one that takes arguments is POLSetUI: the same nine required by ParOuterLoop. Word POLSaveUI POLSetUI POLKeyUI POLRestoreUI POLResUI&Err Action Saves the current user interface in a temporary environment. Sets the current user interface, according to the parameters given. Displays, reads and evaluates keys. Handles errors, and exits according to the user interface specified by POLSetUI. Restores the user interface saved by POLSaveUI and abandons the temporary environment. Restores the user interface and errors. This is used when there is an error not handled within the parameterized outer loop. The word ParOuterLoop decompiles to: 1 :: POLSaveUI ERRSET :: POLSetUI (save current user interface) (start error trap) (set new user interface) 32.2. The Display 5 POLKeyUI ; ERRTRAP POLResUI&Err 10 POLRestoreUI 215 (handle keypresses) (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. 32.2 The Display In the parameterized outer loop, the user is responsible for setting up the display and updating it; there is no default display. The display can be updated in two ways: with the parameter “AppDisplay” or with key assignments. For example, when the user presses a key to move the cursor, the key assignment can either pass information to “AppDisplay” (often implicitly), so that it handles the screen updating, or the key assignment object can handle the display itself. Which method is more efficient depends on the situation. In our example below, AppKeys just sets the position of the grob in lams, and AppDisplay draws the grob. 32.3 Error Handling If an error occurs during the key processing, AppError is executed. This object is responsible for processing any errors generated while the parameterized outer loop is running. AppError should determine the specific error and act accordingly. Or you can just specify ERRJMP as AppError, which means your application does not handle any errors. 216 32. The Parameterized Outer Loop 32.4 Hard Key Assignments 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 specifies 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 definition 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 definition and TRUE, or FALSE if the application does not handle it. Specifically, 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 And each plane handler normally has the form 1 BINT7 ?CaseKeyDef :: TakeOver <process APPS key> ; BINT9 ?CaseKeyDef :: TakeOver <process TOOL key> ; ... DROPFALSE 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 definitions 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. 32.5. Menu Key Assignments 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 Menu Key Assignments 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 definition: 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 defined 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 specified by the AppMenu parameter. 32.6 Preventing Suspended Environments Your application may require the evaluation of arbitrary commands and user arguments, but it might not want the current environment to be suspended by HALT or PROMPT commands. The parameter SuspendOK?, when FALSE, will cancel these and any other commands that would suspend the environment and generate a “HALT Not Allowed” error, which AppError can handle. If the parameter is TRUE, the application must be prepared to handle the consequences. “The dangers here are many and severe”, as it is written in RPLMAN.DOC. Almost all applications should set FALSE as the SuspendOK? parameter. 218 32.7 32. The Parameterized Outer Loop The Exit Condition 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 define, 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. Figure 32.1: The POL example 1 5 :: * 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 10 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 25 30 35 40 45 50 * 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 220 55 60 65 70 75 80 85 90 95 32. The Parameterized Outer Loop :: #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 ; 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 100 105 110 115 ; 2DROP ’DoBadKeyT 120 ; * Key definitions TrueTrue 125 130 135 140 * 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 222 32. The Parameterized Outer Loop BINT36 #>ITE :: DROP ERRBEEP ; :: #1+ ’ LAM y STO ; 145 ; :: LAM y DUP BINT37 #>ITE :: DROP BINT37 ERRBEEP ; #10+ ’ LAM y STO 150 ; 155 160 165 170 175 180 185 } } { "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 ; } 32.9. Reference } ONEFALSE ’ LAM exit? ’ERRJMP ParOuterLoop RECLAIMDISP ClrDAsOK 190 195 223 (first menu row, no suspended envs) (exit condition) (error handler) (run the par outer loop) (resize and clear display) (redraw display) ; 32.9 Reference Addr. 2B475 Name ParOuterLoop 2B4AC POLSaveUI 2B542 POLSetUI 2B628 POLKeyUI 2B6CD POLRestoreUI 2B6B4 POLResUI&Err 29F25 29F35 29F55 29F75 2A055 2A065 2A145 2A158 AppDisplay! AppDisplay@ AppKeys! AppKeys0 AppExitCond! AppExitCond@ AppError! AppError@ 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 ) 224 32. The Parameterized Outer Loop Addr. 25690 Name AppMode? 25695 2569A 2564D 2565A 2565F 25F04 SetAppMode ClrAppMode SetNAppKeyOK DoStdKeys? SetDoStdKeys SuspendOK? 27E72 nohalt 25671 25676 SetAppSuspOK ClrAppSuspOK Description ( → flag ) Is currently a POL active? ( → ) ( → ) ( → ) ( → flag ) ( → ) ( → flag ) Does the current user interface allow suspension? ( → ob ) :: LAM 'nohalt ; ( → ) ( → ) Chapter 33 Using the HP49 Browser The browser is the engine behind the selection boxes created by the User RPL command CHOOSE. However, it can do much more than what that command does. There are two browser engines in the HP49G calculator: the old one, which was present since the HP48G series, and a new one, only present in the HP49G model. This chapter will describe the new engine, which is easier to use. It has some features the old one does not have, but the old one also has some important features that this one does not, such as full screen mode and selecting multiple items. The next chapter will describe the old engine. There are several flashpointers which can be use to access the browser engine. These flashpointers are not officially supported, but are very likely stable. The main difference to User RPL CHOOSE command is that you can specify a message handler, which can be used to provide a custom the menu, to handle key presses and some other things. The main entry is FPTR 2 72 (ˆChoose3). It has the following stack diagram: ( meta $title #initial ::message → ob TRUE ) or ( meta $title #initial ::message → FALSE ) depending on whether the user selects something or cancels. As an alternative, you can replalce FPTR 2 72 with FPTR 2 74. The differences are that the entry does not save a copy of the original meta on the virtual stack and that instead of the selected object, the index is returned. The indices start at zero, not one. 225 226 33.1 33. Using the HP49 Browser The Choose Items meta 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 The Title String $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 The Initially Selected Item When the choose engine starts, an item is already highlighted. Usually this is the first item, but you can select another one with the #initial parameter. The numbering starts with zero, not one. 33.4 The Message Handler ::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: 33.4. The Message Handler Message BINT1 BINT2 BINT3 BINT4 BINT5 227 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 definition (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 ) 228 33. Using the HP49 Browser Message BINT6 33.5 Message name and meaning MsgEndEndDisp This message is called after the redisplay of the choose box finishes (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 ) The Browser and Lams 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 33.6 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 first 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. Accessing the Selected Item 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 find 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 flag -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 229 :: 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 ; 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 5 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 find 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 flashpointer, you get the current item with :: LAM mylist 2GETLAM 3GETLAM #+ #1+ NTHCOMPDROP ; 33.7 Saving and Restoring the Screen 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 flashpointers which can be used to save and restore the display: 230 33. Using the HP49 Browser FPTR 2 88 Save the current isplay FPTR 2 89 Restore the saved display Note that these commands use a specific 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. Figure 33.1: The ’49 browser example 1 5 :: 101 ONE_DO INDEX@ UNCOERCE LOOP 100 P{}N DUP (Make list with 1-100) 33.8. An Example 10 15 20 25 30 35 40 45 50 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 231 (Empty list to collect) (Save a copy of the list) (Explode for FPTR 2 72) (Title) (Initial position) (The key handler) (SQRT key pressed) (DROP the keycodes) (Get current value) (Compute SQRT) (Display) (Yes, we handle this key) (Other keys not handled) (Provide a menu) (Do not save as LastMenu) ("Add to list" menu key) (Get current list) (Get element as string) (Add to list) (STO current list) ("Help" menu entry) (Save current screen) (Clear screen) (Next is the help text) 232 33. Using the HP49 Browser "->{} ? SQRT 55 60 65 70 75 80 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 90 95 ; 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) (Button to show) ("even" or "odd") (The list) (Get current element) (Test if even) (Return correct label) (No action when pressed) (4th key is empty) (Default CANCL action) (Default OK action) (Yes, we provide a menu) (Enforce menu update) (Other messages) (are not handled) (Run the CHOOSE engine) (DROP current value) (Return list) (Push TRUE) 33.9. Reference FALSE ABND 233 (CANCL: return FALSE) (Free local variables) ; 33.9 Reference Addr. 072002 Name (ˆChoose3) 074002 (ˆChoose3Index) 070002 (ˆChoose2) 073002 (ˆChoose3Save) 005002 (ˆsysCHOOSE) 075002 (ˆChooseDefHandler) 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. 234 33. Using the HP49 Browser Addr. 088002 Name (ˆSaveHARDBUFF) 089002 (ˆRestoreHARDBUFF) 077002 (ˆChoose3OK) 076002 (ˆChoose3CANCL) 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. Chapter 34 Using the HP48 Browser The HP48 browser (which is still present in the HP49) allows you to do many things. Basically, it displays a list of entries, from which you can select one or many (unlike the new HP49 browser, which only allows one item to be selected), and you can act on those entries by means of menu keys or hard key assignments. This “old” engine has a few features that the HP49 one does not have, such as a full-screen mode. It is, however, more complicated to use. Just like the Input Form engine (see Chapter 35), it has thousands of features, and generally there are several ways to accomplish the same thing. The browser is called by the entry ˜Choose. It expects five parameters in the stack. It will the return the results and TRUE, or just FALSE, depending on the way it was exited (more on that later). Here are the stack diagrams: ( ::Appl $Title ::Converter {}Items Init → result TRUE ) or ( ::Appl $Title ::Converter {}Items Init → FALSE ) Here, result is either a list or a single object, depending on whether check marks and multiple selections are enabled. 34.1 The ::Appl Parameter This is a program that allows configuration 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 236 Code (Decimal) 57 58 59 60 61 62 63 64 65 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 flag 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. (→) 34.1. The ::Appl Parameter Code (Decimal) 66 67 68 69 70 74 79 80 81 237 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 defined, this is called to return the title as a grob, but only for full-screen mode. ( → grob ) If message 67 is not defined, 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 it’s 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 ) 238 34. Using the HP48 Browser Code (Decimal) 82 83 85 86 87 91 96 34.2 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 fine, 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 ) The $Title Parameter This parameter specifies the title. There are messages that can override this parameter: 66, 67, 68, 69 and 70. 34.3. The ::Converter Parameter 34.3 239 The ::Converter Parameter 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 The {}Items Parameter 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 The Init Parameter 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 Typical Browser Usage 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 34. Using the HP48 Browser • 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 5 10 18PUTLAM FALSE ROMPTR 0B3 019 (Re-read # of elements) (Re-read width) (#Index) (#NumOfElements) (Reduce #index if #NumOfElements) (was reduced) (Recalculate offset) ; 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 configure other aspects of the browser. Figure 34.1 shows this program while running. 1 :: NULL{} ’ LAM EQS (start with empty list) 34.7. An Example 241 Figure 34.1: The ’48 browser example 1 DOBIND 5 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 (the ::Appl parameter) (use full screen) (number of elements) (return nth element as str) (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 35 40 ; 45 50 55 60 65 70 } { "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) 34.7. An Example 243 18GETLAM NTHELCOMP NOT?SEMI FPTR2 ^EQW3Edit NOT?SEMI 18GETLAM LAM EQS PUTLIST ’ LAM EQS STO 75 80 (quit if empty) (edit) (quit if not changed) (replace) ; } NullMenuKey { "CANCL" FPTR2 ^DoCKeyCancel } { "OK" FPTR2 ^DoCKeyOK } 85 } TRUE ; DROPFALSE ; 90 "Pseudo-Plot" ’ NULL:: NULL{} BINT1 (title) (converter) (no items - msgs are used) (initially selected elt) ROMPTR2 ~Choose (run browser) 95 ABND ; 244 34.8 34. Using the HP48 Browser Reference Addr. 0000B3 Name ˜Choose 0050B3 ˜ChooseMenu0 0060B3 ˜ChooseMenu1 0070B3 ˜ChooseMenu2 0630B3 ˜ChooseSimple 004002 ˆRunChooseSimple 09F002 ˆDoCKeyCheck 0A0002 ˆDoCKeyChAll 0B0002 ˆDoCKeyUnChAll 09E002 ˆDoCKeyCancel 09D002 ˆDoCKeyOK Description ( ::Appl $Title ::Convert {} offset → {}' T ) ( ::Appl $Title ::Convert {} offset → ob T ) ( ::Appl $Title ::Convert {} offset → F ) The return value is a list if checkfields 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. 34.8. Reference Addr. 0B3002 Name ˆLEDispPrompt 0B2002 ˆLEDispList 0B1002 ˆLEDispItem 0150B3 (˜BBMoveTo) 0190B3 (˜BBRecalOff&Disp) 0220B3 (˜BBRunEntryProc) 0230B3 (˜BBReReadPageSize) 0240B3 (˜BBReReadHeight) 0250B3 (˜BBReReadCoords) 0260B3 (˜BBReReadWidth) 0280B3 (˜BBRunENTERAction) 0290B3 (˜BBRunCanclAction) 02F0B3 (˜BBReDrawBackgr) 0370B3 (˜BBGetNGrob) 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 flag is TRUE. ( → ) Sends message 85 to ::Appl, thus running the user-defined 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. 246 34. Using the HP48 Browser Addr. 0380B3 Name (˜BBGetNStr) 03B0B3 (˜BBRereadChkEnbl) 03C0B3 (˜BBRereadFullScr) 03D0B3 (˜BReReadMenus) 03E0B3 (˜BBReReadNElems) 03F0B3 (˜BBGetN) 04B0B3 (˜BBIsChecked?) 0520B3 (˜BBUpArrow) 0530B3 (˜BBDownArrow) 0540B3 (˜BBSpace) 0590B3 (˜BBPgDown) 05A0B3 (˜BBPgUp) 05B0B3 (˜BBEmpty?) 05C0B3 (˜BBGetDefltHeight) 0190E0 ˜BRRclC1 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 ; 34.8. Reference 34.8.1 247 NULLLAMs Used by the Browser The browser uses a great number of unnamed lams to store its information. Here is a description of them: Lam 1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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 {} grob 131x8 grob 131x56 # # # # # # {} flag flag flag flag # {} :: $ :: Chapter 35 Creating Input Forms Input forms provide a graphical interface for entering data required by a program. Data is entered by means of several fieds, which are “spaces” that the user can fill with the apropriate data. Input forms are used in many places in the HP49. You can see one by pressing the MODE key. It is possible to create input forms in User RPL, with the INFORM command, but this is not one of the easiest tasks. In System RPL, it is even more difficult. But there are several advantages: in User RPL, you can only have text fiels, in System RPL you can have check boxes or choose fields. You can also restrict the valid inputs, and make fields appear or disappear during the execution. Finally, in System RPL the input forms are considerably faster. Input forms are created with the ˆIfMain command, which is a flashpointer. It needs lots of arguments. They are divided in three categories: label definitions, field definitions, and general information. Each label and field definition is composed of several arguments. The ˆIfMain command referes to the new input form engine present in the HP49. The old HP48 engine is still present (and has had some speed improvements); the old DoInputForm command is still present and the forms created based on that command will still work. The arguments are the same for both entries, but the message handling (see section 35.4 below) has changed. There are a few incompatibilities between both engines. The table below shows the general argument structure for the ˆIfMain command: Parameter label_1 ... label_n field_1 ... field_n #labels Description Label definitions Field definitions Number of labels 248 35.2. Field Definitions Parameter #fields MessageHander Title 35.1 249 Description Number of fields See section 35.4 below Title to be shown on top of screen Label Definitions Each label definition consists of three arguments: Parameter label_text #x_offset #y_offset 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 specified 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 Definitions Each field definition consists of thirteen arguments: Parameter MessageHandler #x_offset #y_offset #Length #Height #FieldType #AllowedTypes Decompile "HelpString" ChooseData ChooseDecompile Description See section 35.4 below X coordinate Y coordinate (normally label Y coordinate - 1) Length of field Height of field (usually 8) Type of field, see below for valid values. List of valid object types See below Help string See below See below 250 Parameter ResetValue InitValue 35. Creating Input Forms Description Reset value Initial value The message handler will be described below. The x and y positions specify where the field will appear. They work similarly to the x and y positions of label definitions. Then length and height are also two bints, which specify the size of the field. The field type is a bint which defines the type of the field: Decimal value 1 23 12 2 32 Field Type Text field: user can enter anything. Extended text field (DoInputForm engine only): The user can enter anything, or select a variable using the filer. Choose field: user must select from a list of valid values. Combo field: user can select from a list of values or enter another. Checkbox field. The allowed types parameter is used in the text, extended text and combo fields: it is a list of bints, representing the allowed types of objects that can be entered in that field. You can find the object types in the table of section 29.2. You have to use the values in the “User Type” column, as bints. Other fields should specify MINUSONE. You can also specify MINUSONE for text and combo fields, this means that all kinds of objects are accepted. In the extended text field, the list of types is also used to limit the variables displayed in the filer. Decompile is a bint that specifies 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 specifies that STD mode should be used. If the field will not hold numbers, it does not make much difference in which value you choose. After you have specified the basic way to decompile objects, you can also set some flags to configure it further. If you want to use the minifont when displaying the field valued, add 1 to the value. If you add 8 to the value, then only the first character of the string will be displayed. If the object the field holds is a list (or another composite, as a matter of fact), you can add 16 or 32, to get the first or second object of this composite, respectively, and display 35.3. Label and Field Counts 251 this object according to the rules defined by the other values. This option is sometimes useful when using choose fields, but not for normal text fields. Note: DoInputForm does not support fiels 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 field, and they will be displayed, without the quotes, in the normal font. The next parameter specifies the help string that will be shown in the last line of the display when that field has the focus. Enter anything you want. The ChooseData parameter is only used in list and combo fields. 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 first 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 fields. This means that the text field will allow the user to browse the variables stored in memory and use the contents of some variable as the value of the field. 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 field 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 field, for list fields it will be one of the elements of ChooseData list. For check fields, use TRUE or FALSE. You can leave text or combo fields empty by specifying MINUSONE as one or both of this parameters. 35.3 Label and Field Counts These are two bints, representing the number of labels and fields defined. Note that since they are different values, you can have labels which just show some kind of information to the user, or fields without any label definition. 252 35. Creating Input Forms 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 field, and one for the input form itself. The messages are passed whenever something “interessant” happens to a field 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 specific (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 5 ’ :: 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) ; And this is a template message handler for two or more messages: 1 5 ’ :: IfMsgOK OVER#=case :: * Code. Do not forget to return TRUE. ; IfMsgType OVER#=case 35.5. The Title 10 253 :: * Code for message. ; * And possibly more. DROPFALSE 15 (other messages are not handled) ; 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 Results Of The Input Form The stack output, if the user exited the input form by ENTER is: N+1: N: field_1 field_2 ... 2: field_n 1: TRUE If CANCEL was used to exit the form, then just FALSE is returned. The value of each field depends on the types allowed for that field, and on the way the possible values of list fields are specified. If a field 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 35. Creating Input Forms The code defines all the labels and fields, and the input form has a simple message handler that handles two messages: one message to set the field that will start with the focus, and one to configure 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. Figure 35.1: The Input Form example 1 5 10 15 20 :: * Label definitons "Port:" 1 10 "Type:" 70 10 "Name:" 1 19 "Fmt:" 1 28 "Xlat:" 49 28 "Chk:" 104 28 "Baud:" 1 37 "Parity:" 49 37 "OvrW" 111 37 * Field definitions ’DROPFALSE 26 9 24 8 BINT12 MINUSONE BINT0 "Choose transfer port" { "Wire" } BINT0 "Wire" DUP (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 25 30 35 40 45 50 55 60 65 ’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 256 70 75 80 85 90 95 100 105 110 35. Creating Input Forms "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 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 257 { "KGET" DoBadKey } { "SEND" DoBadKey } 115 } TRUE ; DROPFALSE 120 ; "TRANSFER" (Title) FPTR2 ^IfMain (Run it) ; 35.8 Reference 35.8.1 Inputform Addr. 020004 Name ˆIfMain 2C371 DoInputForm 0050B0 ˜IFMenuRow1 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 first menu row of an InputForm. 258 35. Creating Input Forms Addr. 0060B0 Name ˜IFMenuRow2 021004 ˆIfSetFieldVisible 022004 ˆIfSetSelected 023004 ˆIfSetGrob 024004 ˆIfSetFieldValue 026004 ˆIfGetFieldValue 027004 ˆIfGetCurrentFieldValue 025004 ˆIfSetCurrentFieldValue 028004 ˆIfGetFieldMessageHandler 029004 ˆIfGetFieldType 02A004 ˆIfGetFieldObjectsType 02B004 ˆIfGetFieldDecompObject 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 field or label visible or invisible. Second argument specifies if # means a field 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 field or label selected or not selected (appears in inverse video on the screen). ( # T/F(fld/lbl) grb → ) Sets the grob of a field or a label (modifies the data saved in the data string). ( val # → ) Sets the value of a field (full handling, including GROB setting). ( # → val ) Gets the value of the Nth field. ( → ) Gets the value of the current field. ( val → ) Sets the value of the current field. ( # → prg ) Retrieves a field message handler. ( # → #type ) Retrieves the field type. ( # → {} ) Retrieves the field object type list. ( # → val ) Retrieves the field decomp value. 35.8. Reference Addr. 02C004 Name ˆIfGetFieldChooseData 02D004 ˆIfGetFieldChooseDecomp 02E004 ˆIfGetFieldResetValue 02F004 ˆIfSetFieldResetValue 030004 ˆIfGetFieldInternalValue 031004 ˆIfDisplayFromData 032004 ˆIfGetNbFields 033004 ˆIfCheckSetValue 034004 ˆIfCheckFieldtype 04C004 ˆIfGetPrlgFromTypes 035004 ˆIfReset 036004 ˆIfSetField 037004 ˆIfKeyChoose 259 Description ( # → {} ) Retrieves the field data for choose. ( # → val ) Retrieves the field decomp value in case of choose. ( # → val ) Retrieves the field reset value. ( val # → ) Changes the field reset value. ( # → val ) Retrieves the field internal value. ( → ) Displays the datastring on the screen. Takes care of the command line size. ( → #n ) Recalls the number of fields from the data string. ( # val → ) Checks or uncheck a check field. ( ob → ob flag ) Checks if an object meets the current field type requirements. ( {} → {}' ) ( #FFFFF → #0 ) Generates a list of the allowed prologs for a field. ( → ) Resets all fields, set as the current value their reset value. Used to explode the datalist on the stack to work on it. ( # → ) Makes a different field "current". ( → val ) ( → ) If the current field is a choose field, displays the posibilities and let the user choose. A value is returned only if the user does not press CANCEL. 260 35. Creating Input Forms Addr. 038004 Name ˆIfKeyEdit 039004 ˆIfKeyTypes 03A004 ˆIfKeyCalc 03B004 ˆIfKeyInvertCheck 03C004 ˆIfONKeyPress 03D004 ˆIfEnterKeyPress 03F004 ˆIfSetHelpString Description ( → (cmd line) ) Edits the current field value if possible. You cannot edit a choose and a label choose field. ( → (cmd line) ) ( → ) Displays a Choose box with all the possible types for this field. A command line is opened only if the user replies with OK. ( → val ) Puts the value of the field on the stack and HALT. Allows to the user to compute a new value. ( → ) Inverts the current check field 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 fields 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 field. This is used by the automatic IF generator program and should not be use in other ways. 35.8. Reference Addr. 040004 Name ˆIfSetTitle 04A004 ˆIfInitDepth 042004 ˆIfMain2 043004 ˆIfPutFieldsOnStack 044004 ˆIfSetFieldPos 045004 ˆIfGetFieldPos 047004 ˆIfSetAllLabelsMessages 048004 ˆIfSetAllHelpStrings 04D004 ˆIsUncompressDataString 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 field. ( # 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 field. ( # 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 fields. ( $dc → $dat ) Uncompresses a compressed data string. 262 35.8.2 35. Creating Input Forms Input Form Messages The names of the messages are DEFINEs for the numbers. You will find this DEFINEs in the inputform.h file in the include subdirectory. 35.8.2.1 IfMsgKeyPress — 0 This message is sent after each keypress, first to the active field, then to the input form. If the field handles the message, the normal input form key handling is not executed. Input Output (if handled) Output (if not handled) 35.8.2.2 2: 1: 2: 1: 3: 2: 1: #KeyPlane #KeyCode ::Key_Handler_Program TRUE #KeyPlane #KeyCode FALSE IfMsgLooseFocus — 1 This is sent to a field 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 field. Input Output 35.8.2.3 1: #Field_That_Will_Get_Focus 2: #Field_That_Will_Get_Focus 1: TRUE or FALSE IfMsgNewField — 2 This message is sent to the IF just before a new field 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 field that has just received the focus. There is no input, and the output can be either TRUE or FALSE. 35.8. Reference 35.8.2.5 263 IfMsgGetFieldValue — 4 This message is sent to the current field. It has as input the internal data of the field, 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 fixed values, instead of the actual element. Input Output (if handled) Output (if not handled) 35.8.2.6 1: 2: 1: 2: 1: Internal value External value TRUE Internal value FALSE 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 field, this is the one. You can leave the value given as input unchanged, naturally. Input Output (if handled) Output (if not handled) 35.8.2.7 1: 2: 1: 2: 1: External value Internal value TRUE External value FALSE IfMsgGetFieldGrob — 6 This message is sent to the current field. If you decide to handle it, you will have to set the grob that is displayed in the field (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 Here is an example of handling this message: 264 1 5 35. Creating Input Forms :: 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 first field that will be selected. It makes no difference wheter you return TRUE or FALSE, just change the number if desired. Input Output 35.8.2.9 1: #Field 2: #Field 1: TRUE or FALSE IfMsgFieldReset — 10 This message is sent to a field that is going to be reset. It is possible to modify the value of the field, if desired. Input Output 35.8.2.10 1: Value 2: Value, possibly modified 1: TRUE or FALSE 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) Output (if not handled) 1: 3: 2: 1: 2: 1: Menu Original menu New menu TRUE Original menu FALSE 35.8. Reference 35.8.2.11 265 IfMsgGet3KeysMenu — 12 This message can be used to change the last three softkeys of the first row of the standard input form menu. If handled, it should return a list with three sub-lists, each being a key definition. Input Output (if handled) Output (if not handled) 35.8.2.12 None 2: List 1: TRUE 1: FALSE 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) 35.8.2.13 None 1: TRUE 1: FALSE 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 35. Creating Input Forms 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 field, this message is sent, first to the field, and then to the input form (if it was not handled by the field). 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 35.8.2.19 267 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 field when the command line is validated. Input Output (if handled) Output (if not handled) 35.8.2.22 None; a command line is present No command line; elements in the stack and TRUE 1: FALSE IfMsgDecompEdit — 23 This is sent to a field when an object needs to be decompiled for editing. Input Output (if handled) Output (if not handled) 35.8.2.23 1: 2: 1: 1: Object String TRUE FALSE IfMsgNextChoose — 24 This message is sent to a choose field 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 field when the EDIT softkey is pressed. The input is the current value of the field, the output can be nothing, a modified command line, something in the stack, or a modified field. If this message is handled, then the default code is not run. Chapter 36 The Display There are two screens available to the programmer while programming in System RPL: the graphics screen, which is visible, for example, in the Plot application (and referred as PICT in User RPL), and the text screen, which is the graphic visible in the standard stack environment. Whenever possible, the latter should be used, leaving the graphics screen untouched, because that is supposedly a user resource, which should not be changed by programs. 36.1 Display Organization The HP49 system RAM contains three dedicated graphic objects (subsequently called grobs) used for display purposes. The commands below return each of this grobs: Command ABUFF GBUFF HARDBUFF HARDBUFF2 Grob Text grob (stack) Graphics grob (PICT) Either the text or gaphics grob, whichever is active. Menu labels 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 fixed size of 131x8 pixels. The command TOADISP makes the text grob visible, and the command TOGDISP makes the graphic grob visible. 268 36.2. Preparing the Display 269 The text grob is divided in three regions. The display areas are numbered one, two and three. In many words you will find “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. 36.2 Preparing the Display Two words establish control over the text display: RECLAIMDISP and ClrDA1IsStat. The first does the following: • Assures the current display is the text one; • Clears the text display; • If necessary, resizes the text display to the default size of 131x56 pixels. This word works very similarly to the user word CLLCD, the difference is that CLLCD never resizes the text display. The word ClrDA1IsStat is optional, but most of the time it should be used. It suspends the ticking clock display temporarily. Most graphical programs would not want to have that clock displayed. When the menu is not necessary, use the word TURNMENUOFF to hide the menu and enlarge the text grob to 131x64 pixels. It is turned on again with TURNMENUON. For more details on the menu, see Chapter 37. The suggested template for an application that uses the text display is: 270 1 36. The Display :: ClrDA1IsStat RECLAIMDISP TURNMENUOFF (suspend clock) (set, clear and resize text display) (turn off menu if desired) 5 <application> ClrDAsOK -orSetDAsTemp 10 (redraw LCD) (freeze the whole display) ; 36.3 Controlling Display Refresh 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 36.4 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. Clearing the Display 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 36.5 271 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. 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 five pixels wide. The size of the minifont is fixed: 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 specified 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 first seven lines, even with the largest system font. 272 36.5.2 36. The Display 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 find 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 Reference 36.6.1 Display Organization Addr. 26166 Name TOADISP 2616B TOGDISP 25FA4 ABUFF 26076 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 Name HARDBUFF 26094 HARDBUFF2 25EDE HARDHEIGHT 25ED5 GBUFFGROBDIM 36.6.2 273 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. Preparing the Display Addr. 25EF4 Name RECLAIMDISP 2EE7D ClrDA1IsStat 2EEFD MENUOFF? 2F034 TURNMENUOFF 2F031 TURNMENUON 2EEFC 26247 MENUOFF GetHeader 26283 SetHeader 26099 HEIGHTENGROB 260A3 KILLGDISP 2EEF9 DOERASE Description ( → ) Activates the text grob, clears it and sets the default size. ( → ) Suspends clock display. ( → flag ) Returns TRUE if the menu grob is off. ( → ) Turns off menu display, enlarges ABUFF to fill screen. ( → ) Turns menu grob on. ( → ) ( → # ) Gets header size in lines (0-2). ( # → ) Sets header size in lines (0-2). ( grob #rows → ) Heightens graph or text grob. ( → ) Clears graph display by setting it to NULLGROB. See DOERASE. ( → ) Erases the graphics display grob without changing its size. 274 36.6.3 36. The Display Immediate Refresh Addr. 2EF67 Name SysDisplay 2F19F ?DispCommandLine 2F19E DispCommandLine 2EE5A DispEditLine 2DFCC ?DispMenu 2DFF4 DispMenu.1 2DFE0 DispMenu 2C341 ?DispStack 2C311 ?DispStatus 2C305 DispStatus 2C2F9 DispStsBound 2A7F7 DispTimeReq? 2F300 DispILPrompt Description ( → ) Redisplays all required areas. Does it immediately, without waiting for the current command to finish. ( → ) 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 flag 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. 36.6. Reference Addr. 26260 36.6.4 Name nDISPSTACK 275 Description ( $prompt #height #header flag flag → ) Used by DispILPrompt. Controlling Display Refresh Addr. 2EE8D 2EE8E 2EE8F 2EE90 2EE6E 2EE6D 2EE62 2EE63 2EE66 2BF3A Name ClrDA1OK ClrDA2aOK ClrDA2bOK ClrDA2OK ClrDA3OK ClrDAsOK DA1OK? DA3OK? DA2aLess1OK? DA1OK?NOTIT 2BF53 DA2aOK?NOTIT 2BF6C DA2bOK?NOTIT 2BF85 DA3OK?NOTIT 2EE69 2EE8A 2EE6A 2EEA7 2F37A 2EE6B 2EE71 2EE64 2EEA5 2EE67 2EF98 2EE68 2EE91 2EF99 SetDA1Temp SetDA2aTemp SetDA2bTemp ClrDA2bTemp SetDA2OKTemp SetDA3Temp SetDA12Temp SetDAsTemp SetDA2bTempF SetDA1Valid SetDA2aValid SetDA2bValid SetDA2Valid SetDA3Valid Description ( → ) ( → ) ( → ) ( → ) ( → ) ( → ) ( → flag ) ( → flag ) ( → flag ) ( → ) Does DA1OK?, NOT then IT. ( → ) DA2aOK?, NOT then IT. ( → ) DA2bOK?, NOT then IT. ( → ) Does DA3OK?, NOT then IT. ( → ) ( → ) ( → ) ( → ) ( → ) ( → ) ( → ) ( → ) ( → ) ( → ) ( → ) ( → ) ( → ) ( → ) 276 36. The Display 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 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 2F379 2EE7C 2EE6C 2EEAC 2EEAE 2EEAF 2EEAB 2EE7F 2EE7E 2EE80 SetDA123NoCh SetDAsNoCh SetDA2aEcho SetDA1IsStat SetNoRollDA2 ClrNoRollDA2 DA1IsStatus? SetDA2bIsEdL DA2bIsEdL? ClrDA2bIsEdL Description ( → ) ( → ) ( → ) ( → flag ) ( → ) ( → ) ( → flag ) ( → ) ( → ) ( → flag ) ( → ) ( → ) ( → flag ) ( → ) ( → ) ( → ) ( → ) ( → flag ) ( → ) ( → ) ( → ) ( → ) ( → ) ( → ) aka: SetDA12a3NoCh ( → ) ( → ) ( → ) ( → ) ( → ) ( → ) ( → flag ) ( → ) ( → flag ) ( → ) 36.6. Reference 36.6.5 Addr. 25E7E Clearing the Display Name BLANKIT 26021 CLEARVDISP 2EED4 Clr8 2EED5 Clr8-15 2F15E Clr16 2EF5E BlankDA1 2F31C BlankDA2a 2F31B BlankDA2 2EE5C BlankDA12 261C0 CLCD10 261C5 CLEARLCD 2EF05 DOCLLCD 36.6.6 277 Description ( #startrow #rows → ) Clears #rows from HARDBUFF, starting #startrow. ( → ) Clears HARDBUFF. ( → ) Clears top eight rows (first status line). ( → ) Clears 2nd status line. ( → ) Clears top 16 rows. ( → ) Clears status area from HARDBUFF. ( → ) Clears display area DA2a. ( → ) Clears display areas DA2a and DA2b. ( → ) Clears display areas DA1 and DA2 ( → ) Clears status and stack areas. ( → ) Clears whole display. ( → ) Like user word CLLCD. Annunciator and Modes Control Addr. 2613E Name SetLeftAnn 2603A ClrLeftAnn 26148 SetRightAnn Description ( → ) Sets left-shift annunciator. ( → ) Clears left-shift annunciator. ( → ) Sets right-shift annunciator. at 278 36. The Display Addr. 2603F Name ClrRightAnn 26139 SetAlphaAnn 26035 ClrAlphaAnn 25EE9 LockAlpha 25F08 UnLockAlpha 2649F (ClrBusyAnn) 26143 SetPrgmEntry 2610C PrgmEntry? 25EBE Do1st/2nd+: 25719 SetAlgEntry 2571E ClrAlgEntry 256EA AlgEntry? 25EDF ImmedEntry? 25E74 ?ClrAlg 25E75 ?ClrAlgSetPr 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. 36.6. Reference 36.6.7 Window Coordinates Addr. 2F384 Name TOP8 2F36C Rows8-15 2F383 TOP16 2617F WINDOWCORNER 2EED6 HBUFF_X_Y 2F352 LEFTCOL 2F36B RIGHTCOL 2F385 TOPROW 2F31D BOTROW 26198 WINDOWXY 36.6.8 279 Description ( → HBgrob #x1 #y #x1+131 #y1+8 ) Returns coordinates of first 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. Scrolling the Display Addr. 26193 Name WINDOWUP 26184 WINDOWDOWN 26189 WINDOWLEFT 2618E WINDOWRIGHT 2F370 SCROLLUP Description ( → ) Moves display one pixel up. ( → ) Moves display one pixel down. ( → ) Moves display one pixel left. ( → ) Moves display one pixel right. ( → ) Moves display one pixel up, checks for corresponding key being pressed. 280 36. The Display Addr. 2F36D Name SCROLLDOWN 2F36E SCROLLLEFT 2F36F SCROLLRIGHT 2F34A JUMPTOP 2F347 JUMPBOT 2F348 JUMPLEFT 2F349 JUMPRIGHT 2F38D WINDOWTOP? 2F38A WINDOWBOT? 2F38B WINDOWLEFT? 2F38C WINDOWRIGHT? 36.6.9 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? Displaying Objects Addr. 2F21D 2F21E Name ViewObject ViewStrObject 2F21F ViewGrobObject 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. 36.6. Reference Addr. 25F12 Name sstDISP 0C1007 ˆSCROLLext 2EF61 WINDOW# 36.6.10 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. Displaying Text Addr. 25EB4 Name DODISP 25FB8 DISPROW1 25EAB DISPROW1* 25FBD DISPROW2 25EAC DISPROW2* 25FC2 DISPROW3 25FC7 DISPROW4 25FCC 261F7 25FD1 25FD6 DISPROW5 DISPROW6 DISPROW7 DISPROW8 25FDB DISPROW9 25FE0 DISPROW10 Description ( ob %row → ) Displays any object in specified 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. 282 36. The Display Addr. 25FB3 Name DISPN 25EBC Disp5x7 25EAD DISPSTATUS2 38C00 (DISPST2&FREEZE) 2EEFF DispCoord1 2F32B DISPCOORD2 25FE5 DISPLASTROW 25FEA DISPLASTROWBUT1 25ED4 FlashMsg 2EE61 FlashWarning 2F1A5 AskQuestion 02E002 ˆDoAlert 2EE60 DoWarning 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 specified. 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. 36.6. Reference Addr. 007002 Name ˆCk&DoMsgBox 0040B1 ˜MsgBoxMenu 36.6.11 283 Description ( $ #x #y grob menu → T ) Displays a message box with a grob in the upper left corner and the specified menu. The meaning of #x and #y is unclear. ( → {} ) The messsage box menu, with just the OK key. Fonts Addr. 2621A Name FONT> 2625B MINIFONT> 25F15 >FONT 2620B >MINIFONT 26288 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 Chapter 37 The Menu The menu line is divided in six parts, one for each key, each eight pixels high and 21 pixels wide. The starting columns for each menu key label in HARBDUFF2 are: Hex 0 16 2C Dec 0 22 44 Softkey First softkey (F1) Second softkey (F2) Third softkey (F3) Hex 42 58 6E Dec 66 88 110 Softkey Fourth softkey (F4) Fifth softkey (F5) Sixth softkey (F6) 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 specified column: Word Str>Menu Id>Menu Grob>Menu Seco>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. 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 37.1 285 Action Makes a black label (standard). Makes label with a box inside. Makes directory label (bar above). Makes white label (like in Solver). 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 first 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 first 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 37. The Menu Menu Properties The menu system of the HP49 provides an amazing flexibility. Besides the normal actions, a menu has many properties which define the appearance of labels and the specific 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 modified using supported entry points. Here is an example for doing so. The following program sets a modified VAR menu, which allows variables to be protected against being overwritten with a left-shifted menukey. 37.2. Menu Properties 1 5 10 15 20 25 287 :: MenuMaker :: ROMPTR A9 2 (the builtin VAR menu) ’ :: DUP DUPTYPECSTR? NOT_IT DECOMP$ (make a string) SWAP ID prtct ITE (select label type) MakeInvLabel MakeStdLabel Grob>Menu (display label) ; LabelDef! ’ :: ID prtct NOTcase xSTO DECOMP$ "\0A is protected" &$ FlashWarning ; MenuKeyLS! ; DoMenuKey ; This does several things: 1. Gets the normal VAR menu in order to pass it to DoMenuKey. 2. It modifies the LabelDef property in a way that the protected variables will have an inverted label in the menu. 3. It modifies 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 288 37. The Menu 2. :: DROPFALSE ; — No 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 filer, naturally. 37.3 Reference 37.3.1 Menu Properties Addr. 04A41 Name GETDF 04A0B GETPROC 2580E SetRebuild 260B7 MenuRow! 260BC MenuRow@ Description ( #menukey → ob ) Gets the definition of a menu key from THOUCHTAB. #menukey = #1..#6 ( #menukey → ob ) Gets the definition of a menu key from THOUCHTAB. #menukey = #1..#6. With #7, get the executor. ( → ) Sets the flag that the menu needs to be rebuild. ( #n → ) Sets the menu row. #n is not the row, but the index of the first menu key in that row, i.e. 1,7,13,. . . ( → #n ) Recalls the index of the first menu key in the current menu page. Returns 1 for the first page, 7 for the second page, 13 for the third and so on. 37.3. Reference Addr. 260A8 Name LastMenuRow! 260AD LastMenuRow@ 25845 MenuDef@ 25908 LastMenuDef! 2590D LastMenuDef@ 25EFB SaveLastMenu 25EDA 25863 GetMenu% MenuRowAct! 25EE2 InitTrack: 289 Description ( #n → ) Sets the row of the last menu. #n is not the row, but the index of the first menu key in that row, i.e. 1,7,13,. . . ( → #n ) Recalls the index to the first menu key in the current row of the last menu. Returns 1 for the first page, 7 for the second page, 13 for the third and so on. ( → menu ) Recalls the current menu definition. menu is a MenuList or a program, or a Rompointer. ( menu → ) Sets the definition of the last menu. menu is a MenuList or a program, or a Rompointer. ( → menu ) Recalls the definition of the last menu. menu is a MenuList or a program, or a Rompointer. ( → ) Stores row and definition 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 first menurow when diretory changes, or by the CST menu to rebuild it. 290 37. The Menu Addr. 25877 Name LabelDef! 2589F MenuKeyLS! 258B3 MenuKeyRS! 2588B MenuKeyNS! 25890 MenuKeyNS@ 25EFC SetKeysNS 25F02 StdMenuKeyLS 25F03 StdMenuKeyNS 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. 37.3. Reference Addr. 27FED Name NullMenuKey 258C7 ReviewKey! 258EF (ExitAction!) 25EEF NoExitAction 37.3.2 291 Description ( → ) A placeholder for an empty menu key when defining 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. Building Menus Addr. 275C6 Name TakeOver 275EE Modifier 27620 MenuMaker 25EE0 InitMenu 25EC6 DoMenuKey Description ( → ) Override the default menu key executer. If this is the first entry in a program, the program can be used in edit mode. When the first 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 ; 292 37. The Menu Addr. 25EE1 Name InitMenu% 25F00 StartMenu 25EFE SetThisRow 25EE8 LoadTouchTbl 37.3.3 Description ( %mnu.pg → ) ( %0 → ) ( menu #n → ) #n is the index of the first menu key on the page, use 1 for the first 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. Menu Display Addr. 2EF66 Name SysMenuCheck 2DFCC ?DispMenu 2DFF4 DispMenu.1 2DFE0 DispMenu 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 ; 37.3. Reference 37.3.4 Displaying Menu Labels Addr. 2E0D5 Name Grob>Menu 2E0F3 Str>Menu 2E11B Id>Menu 2E107 Seco>Menu 25886 DoLabel 2E2AA MakeLabel 08E007 ˆWRITEMENU 37.3.5 293 Description ( #col grob → ) Displays grob as menu label. ( #col $ → ) Displays string as menu label. ( #col id → ) Displays id as menu label. ( #col :: → ) Does EVAL then DoLabel. ( #col ob → ) If ob is of one of the supported types, displays a menu label. If not, generates a "Bad Argument Type" error. ( $ #w #x grob → grob' ) Inserts $ into grob using CENTER$3x5 with y=5. ( $6...$1 → ) Displays the six strings as menu keys. General Entries Addr. 25EA6 25EFD Name CheckMenuRow SetSomeRow 2589A 275FD DoMenuKeyNS MenuKey 2F15B 25F2B 3EA01 CLEARMENU CHECKMENU (CST) 2C2C0 nCustomMenu 25EFF 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. 294 Addr. 25EC3 37. The Menu Name DoFirstRow Description ( → ) Sets the first row of the current menu. Chapter 38 Programming the HP49 Editor The HP49G has a builtin editor which is much faster and nicer than the editor on the HP48. However, it is a general-purpose editor, and it would be useful for specific applications to add some features without having to write a whole new editor. The HP49G ROM contains a number of supported entry points which can be used to manipulate the editor from programs. These can be used to write editor extensions. 38.1 Terminology The terms below will appear often in this chapter. Term EditLine Cursor position Current line Editor window Selection 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. 295 296 38. Programming the HP49 Editor Term Word-start Invisible chars 38.2 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. Examples For information on the specific 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 5 10 (goto end of line) (recall position) (store as marker) (beginning of line) (recall position) (store as marker) (copy to clipboard) ; 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 297 SELECT.LINE CMD_COPY 5 ; 2. Insert a “:: ;” template on a single line and position the cursor between “::” and “;”. 1 :: TakeOver ":: ;" CMD_PLUS CMD_BAK CMD_BAK 5 ; 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 5 (fix indentation to 2 extra spaces) ; 4. Go to next label. Labels are lines starting with “*”. 1 :: TakeOver "\0A*" FindStrInCmd IT :: DROP #1+ STO_CURS_POS ; DROP 5 10 ; (newline followed by star) (find that) (if successful) (drop #end) (correct to move over NL) (set new cursor position) (drop the search string) 298 38. Programming the HP49 Editor 5. The RPLCPL command of the Emacs library (see section A.6) does completion of names in the Editor. It needs to find 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$ 5 (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 5 10 15 20 25 ; (make the indentation str.) (goto beginning of line) (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) (if already in next line: Exit) (kill whitespc before 1st word) (insert spaces) (back to beginning of line) (next line) 38.3. Executing External Commands in the Editor 38.3 299 Executing External Commands in the Editor 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 first entry in the secondary or the command will not execute in the editor. Here is a simple example for an InputLine environment which defines 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 5 10 15 20 25 :: "Edit this!" "" zero zerozerozero { { "SLINE" :: TakeOver SELECT.LINE ; } { "CLEAR" :: TakeOver DEL_CMD ; } } ONE TRUE ZERO InputLine ; (prompt) (initial string) (cursor position) (modes) (program to select line) (program to clear EditLine) (initial menu line) (abort flag) (parse) (and GO!) 300 38. Programming the HP49 Editor 38.4 Reference 38.4.1 Status Addr. 257A2 Name EditLExists? 2EEED NoEditLine? 2F196 RCL_CMD 2EEEB EDITLINE$ 2F197 RCL_CMD2 2EF87 RCL_CMD_POS 26585 CURSOR@ 26594 (CURSOR_PART) 2F158 (THISCHAR) 2EEEA CURSOR_END? 264CC FIRSTC@ 26030 CURSOR_OFF 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 file, returns CHR_00. ( → flag ) Checks if the cursor is at the end of a line or at the end of the file. 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. 38.4. Reference Addr. 2EF91 Name CAL_CURS_POS 2EF90 CAL_CURS_POS_VIS 2F199 RCL_CMD_MODE 2F198 STO_CMD_MODE 38.4.2 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. Inserting Text Addr. 2EF74 Name CMD_PLUS 2F194 CMD_PLUS2 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. 302 38. Programming the HP49 Editor Addr. 2F195 Name CMD_PLUS3 2EF97 InsertEcho 2EEE4 Echo$Key 2F11C Echo$NoChr00 25EC1 DoDelim 25EC2 DoDelims 25795 INSERT_MODE 2577F (TogInsert) 25790 INSERT? 38.4.3 Addr. 2EF82 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 flag. ( → flag ) Returns TRUE if insert mode is active. 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. 38.4. Reference Addr. 2EF81 Name CMD_DROP 2EF95 DEL_CMD 2EEE7 InitEdLine 2F2F0 DO<Del 2F2F1 DO>Del 2F2F9 DODEL.L 2F2DD DoFarBS 2F2DE DoFarDel 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. 304 38.4.4 38. Programming the HP49 Editor Moving the Cursor Addr. 2EF8B Name STO_CURS_POS 2EF8C STO_CURS_POS2 2EF8D STO_CURS_POS3 2EF8E STO_CURS_POS4 2EF8F STO_CURS_POS_VIS 2F378 SetCursor Description ( # → ) Stores cursor position. Moves cursor to specified position and if necessary repositions the editor window to make sure the cursor position is visible. If it is necessary to scroll the window horizontally, this command sets the left edge of the window to the cursor column and shows as much text as possible to the right of the cursor. However, if the cursor is also visible when the window edge is moved to column zero, this position takes precedence. ( # → ) Same as STO_CURS_POS, but moves the right edge of the editor window to the cursor column. ( # → ) Same as STO_CURS_POS, but without checking for style/font switch sequences. So while STO_CURS_POS always makes sure the cursor ends up right before a visible character, this command allows you to position it within the invisible escape sequences. ( # → ) Behaves with respect to editor window positioning like STO_CURS_POS2, but with respect to invisible chars like STO_CURS_POS3. ( # → ) Like STO_CURS_POS, but ignores the invisible characters. So if you look at your string and say, I want to go to what I see as the 5th character, use this entry. ( # → ) ( {# #'} → ) Sets the cursor to the given position. For the list argument, the numbers are row and column. 38.4. Reference Addr. 2EF7C Name CMD_NXT 2EF7B CMD_BAK 2EF80 CMD_DOWN 2EF7F CMD_UP 2EF7D CMD_DEB_LINE 2EF7E CMD_END_LINE 2EF7A CMD_PAGED 2EF77 CMD_PAGEL 2EF78 CMD_PAGER 2EF79 CMD_PAGEU 2F2EE DO<Skip 2F2EF DO>Skip 2F2E4 DO>BEG 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. 306 38. Programming the HP49 Editor Addr. 2F2E5 Name DO>END 2F2E6 GOTOLABEL 38.4.5 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. Selection, Cut and Paste, the Clipboard Addr. 2EF83 Name CMD_STO_DEBUT 2EF84 CMD_STO_FIN 2EF85 RCL_CMD_DEB 2EF86 RCL_CMD_FIN 2F2DC ClearSelection 2EF93 VERIF_SELECTION 2EF8A CMD_COPY Description ( # → ) Sets begin marker, like RS+BEGIN, but takes position from stack. ( # → ) Sets end marker, like RS+END, but takes position from stack. ( → # ) ( → #0 ) Recalls the position of the BEGIN marker. If the selection has been cleared, returns ZERO. ( → # ) ( → #0 ) Recalls the position of the END marker. If the selection has been cleared, returns ZERO. ( → ) Unselects the selected text without changing the contents of the editor. Sets both begin and end marker to ZERO. ( → flag ) Returns TRUE when the END marker is not ZERO, indicating that the selection is active. Use this command as a check before doing anything with the selection. ( → ) Copies selected string, like RS+COPY. 38.4. Reference Addr. 2EF88 Name CMD_CUT 2F2FA CMD_COPY.SBR 2EF94 PASTE.EXT 2F2E1 SELECT.LINE 2F2E2 SELECT.LINEEND 2A085 (Clipboard!) 2A095 (Clipboard@) 2A0A5 (Clipboard0) 2A0B5 (Clipboard?) 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 first. 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? 308 38.4.6 38. Programming the HP49 Editor Search and Replace Addr. 2F2F3 Name GET.W-> 2F2F4 GET.W<- 2F2F2 FindStrInCmd 2F2E8 DOFIND 2F2EA DONEXT 2F2E9 DOREPL 2F2EB DOREPLACE Description ( → # ) Returns the position of the next word-start to the right of the current cursor position. Note the asymmetry of this command and GET.W<-. ( # → #' ) Takes a position from the stack and return the position if the nearest word-start to the left of that position. Note the asymmetry of this command and GET.W->. ( $find → $find $start $end T ) ( $find → $find F ) Finds a string in the EditLine, starting from the current cursor position. The search string remains on the stack, presumably in order to do repeated searches. Returns the start and end positions of the match and a flag. This function respects the setting of the internal flag for case-sensitive search. ( → ) Same as the FIND menu button in the editor TOOL/SEARCH menu. Pops up the FIND input form. ( → ) Finds next. Same as the NEXT button in the editor TOOL/SEARCH menu. ( → ) Same as the REP button in the editor TOOL/SEARCH menu. Pops up the REPLACE input form. ( → ) Replaces current match. Same as the R button in the editor TOOL/SEARCH menu. 38.4. Reference Addr. 2F2EC DOREPLACE/NEXT 2F2ED REPLACEALL 2F2FC REPLACEALLNOSCREEN 38.4.7 Name 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. Evaluation Addr. 2F2DF Name EditSelect 2F2E3 EVAL.LINE 2F2FB EVAL.SELECTION 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 first. ( → ) Evaluates the current selection and replace it with the result of the evaluation. Same as the EXEC button in the editor TOOL menu. 310 38. Programming the HP49 Editor Addr. 2F2F8 Name EXEC_CMD 0B954 (RunInNewContext) 38.4.8 Addr. 2EEE9 Description ( cmd algflag → obsel ) Runs a command on the selection in the Editline. Takes two arguments: the command to run and a flag which says how to compile the selection before the command is applied. If the flag 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. Starting the Editor Name EditString Description ( $ → ) Starts editing the string when the current program exits. This is the entry to use if a program should exit with the editor activated. Use InitEdLine before this entry to clear the editline (if desired) - if not, the string is inserted into the current editline. All code after this entry will be executed before control is handed to the editor application. For example: :: "SOME STRING" DUPLEN$ SWAP (get length) InitEdLine (clear the editline) EditString (string to editline) STO_CURS_POS2 (cursor at end) "Starting editor..." FlashMsg (display before edit) ; 38.4. Reference Addr. 2F19A Name ViewLevel1 2F1AF AlgObEdit 2B2F2 (CallEditCmd:) 2EEE5 2F1AE EditLevel1 ObEdit 011004 ˆEQW3Edit 38.4.9 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. Miscellaneous Addr. 25ED2 Name EditMenu 2EF73 ?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. 312 38. Programming the HP49 Editor Addr. 2EF76 Name AddLeadingSpace 2EF75 AddTrailingSpace 2EF9A CommandLineHeight 2F2DB DOTEXTINFO 2F2F6 GET_CUR_FONT.EXT 2EF96 NO_AFFCMD 2F19E DispCommandLine 2F19F ?DispCommandLine 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. 38.4. Reference Addr. 2F2F7 Name PUT_STYLE 2F2F5 PUT_FONTE 2F2E7 SELECT.FONT 2F2E0 ViewEditGrob 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 first "10". Then this entry point will display the grob. 314 38. Programming the HP49 Editor Addr. 2EF92 Name XLINE_SIZE? 27F47 <DelKey 27F9A >DelKey 27EAF <SkipKey 27EFB >SkipKey 2EEE6 InitEd&Modes 2EEE7 InitEdLine 2EEE8 2F05E InitEdModes SaveLastEdit 2F326 CMDSTO 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 first - 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 type depend 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 specifies the plot type. Dependent variable. 315 Default value (−6.5, −3.1) (6.5, 3.2) X 0 (0, 0) FUNCTION Y 316 39.1 39. Plotting Reference Addr. 2F162 Name CHECKPICT 2EF06 CKPICT 2F258 PICTRCL 2F355 MAKEPVARS 2F163 CHECKPVARS 2F33D GETPARAM 2F0FF GETXMIN 2F366 PUTXMIN 2F0FE GETXMAX 2F365 PUTXMAX 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. 39.1. Reference Addr. 2F100 Name GETYMIN 2F368 PUTYMIN 2F10E GETYMAX 2F367 PUTYMAX 2F107 GETPMIN&MAX 2EEF2 PUTINDEP 2EEF3 PUTINDEPLIST 2F0E8 INDEPVAR 2F106 GETINDEP 2EEF5 GETPTYPE 2EEF6 PUTPTYPE 2F10D GETRES 2EEF4 PUTRES 2F33E GETSCALE 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 first element. :: GETINDEP DUPTYPELIST? ?CARCOMP ; ( → id ) ( → {} ) Recalls the independent variable field 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. 318 39. Plotting Addr. 2EEF1 Name PUTSCALE 2EEEF AUTOSCALE 2EF60 DOGRAPHIC 25ECF EQUATION 2F339 GetEqN 25EB5 DORCLE 25EB6 DOSTOE 2F297 XEQPURGEPICT 2F105 GDISPCENTER 2EF01 DOPX>C 2EF02 DOC>PX 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. Part IV The HP49 CAS Chapter 40 Introduction to the HP49 CAS One of the major innovations in the HP49G is the powerful built-in Computer Algebra System (CAS). The HP49G CAS is derived mainly from the ALG48 and ERABLE libraries, originally written for the HP48 calculators. But on the HP49G, the CAS is fully integrated into the operating system, so that User RPL operators transparently access the CAS if the arguments require it. A huge number of supported entry points give access to the internal commands of the CAS, enabling users to write their own programs and commands dealing with symbolic objects, matrices and infinite precision integers. 40.1 Problems with These Chapters The initial version of the reference listing of CAS commands for this book was derived from the source files1 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 file handles a certain area of CAS commands, and many utility routines are included inside the same file. 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 files. We have made a significant 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 find 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 40. Introduction to the HP49 CAS 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 meta representation list 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 coefficients (in the example: { 2 0 }) with respect to the list of variables ({ X }). 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 efficient 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 prefixed 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 simplifications, Laplace transformations, series expansions and similar operations. The first step for the conversion is to find 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: 40.3. A Few Examples 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 defined as a list of coefficients 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 efficient but more difficult 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 simplification of a symbolic object might be coded as 1 5 :: FPTR2 ^LVARext FPTR2 ^VXXLext FPTR2 ^R2SYM ; (symb) (symb lvar) (lvar n/d) (symb) The scalar product of 2 symbolic vectors in “list form” 1 5 :: (x y) INNERCOMP #1+ROLL INNERCOMP DUP#1= casedrop FPTR2 ^QMul get1 (y1,...,yn-1,x1,...,xn,#n,yn) ROTSWAP PTR2 ^QMul (y1,...,yn-1,x1,...,xn-1,#n,xn*yn) OVER ONE_DO ROT 3PICK #2+PICK 324 40. Introduction to the HP49 CAS FPTR2 ^QMul FPTR2 ^QAdd LOOP 10 (y1, ..., yn-1, #n, X.Y) OVER #1+UNROLL #1- NDROP ; Chapter 41 Type Checking and Conversion The entries in this chapter are used to check for the special CAS objects described in Chapter 40, and to convert between this different kinds of objects. 41.1 Reference Addr. 157006 Name ˆSYMBINCOMP 12A006 ˆ2SYMBINCOMP 4D7006 ˆVXXLext 400006 ˆR2SYM 4D8006 ˆMETALISTVXXL 4D9006 ˆVXXLFext 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, vxxxlflag 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. 325 326 41. Type Checking and Conversion Addr. 4DA006 Name ˆVXXL1ext 4DB006 ˆVXXL0 4DC006 ˆVXXL2NR 4DD006 ˆVXXL2 167006 ˆTYPEIRRQ? 168006 ˆDTYPEIRRQ? 177006 ˆCKMATRIXELEM 18F006 ˆCKFPOLYext 190006 ˆCK2FPOLY 19E006 ˆCLEANIDLAM 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 nocareflag 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. 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 specific such entries for integers. Instead, use the polynomial entries like ˆQAdd, ˆQMul, etc. listed in Chapter 46. 42.1 Reference 42.1.1 Built-in Integers Addr. 2E0006 2DF006 392006 3B3006 Name ˆDROPZ0 ˆDROPZ1 ˆ2DROPZ0 ˆNDROPZ0 3B4006 ˆNDROPZ1 42.1.2 Description ( ob → z0 ) ( ob → z1 ) ( 2 1 → z0 ) ( obn...ob1 #n → z0 ) Replaces meta with Z0. ( obn...ob1 #n → z1 ) Replaces meta with Z1. Conversion Functions Addr. 0EE006 Name ˆ#>Z 0F5006 ˆ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 328 42. Integers Addr. 18D006 Name ˆR2Zext 0ED006 ˆH>Z 0F2006 ˆS>Z 0F3006 ˆS>Z? 184006 ˆCK1Z 185006 ˆCK2Z 186006 ˆCK3Z 202006 ˆCK&CONVINT 203006 ˆCK&CONV2INT 205006 204006 0F4006 ˆCONVBACKINT ˆCONVBACK2INT ˆZ>ZH 18E006 ˆZ2Sext 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. 42.1. Reference 42.1.3 329 General Integer Operations Addr. 101006 Name ˆZTrim 102006 ˆZAbs 50B006 ˆZABS 0E0006 ˆZSQRT 3D0006 ˆMod 0DD006 105006 ˆZMod ˆZNMax 106006 ˆZNMin 10D006 ˆZBits 10E006 ˆZBit? 2B7006 ˆZGCDext 2B8006 ˆZGcd Description ( Z → Z' ) Strips Z from unnecessary leading nibbles. Counts nibbles required for representation. If that equals used nibbles then quick exit. Else allocates new object, copies significant mantissa nibbles and apends original sign. ( Z → |Z| ) Takes the absolute value of Z. If Z is already positive then does nothing. Else duplicate object and change sign. ( Z → Z' ) Absolute value. ( Z → Z' flag ) Calculates integer part of square root. If the number was a square, then flag is TRUE to indicate that the returned result is exact. ( Z Zn → Z' ) Make Z modulo N. ( Z1 Z2 → Z' ) ( Z1 Z2 → NormMax[Z1,Z2] ) Returns the integer with the greatest absolute value. (Returns Z1 if |Z1|≥|Z2|; returns Z2 if |Z1|<|Z2|). ( Z1 Z2 → NormMin[Z1,Z2] ) Returns the integer with the smallest absolute value. (Returns Z1 if |Z1|≤|Z2|; returns Z2 if |Z1|>|Z2|). ( Z → Z #bits ) Calculates number of bits used in Z. ( Z #bit → Z flag ) Tests if a bit in Z is set. Count starts from zero, as opposed to ZBits. ( Z2 Z1 → Z ) Integer GCD. ( Z2 Z1 → Z ) This is the same entry as ZGCDext. 330 42. Integers Addr. 3D6006 Name ˆIEGCDext 3D9006 07C007 ˆINEGCD ˆ#FACT 576006 ˆfactzint 215006 ˆPA2B2 42.1.4 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 fine 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. Integer Factorization and Prime Numbers Addr. 0C9006 Name ˆZFactor 0CA006 ˆNFactor 0CB006 ˆNFactorSpc 0CD006 ˆSFactor Description ( Zs → Lf ) Factors signed long integer. ( z → {} ) Factors positive long integer. ( z → {} ) Semi-factors positive long integer. This is regular factorization with an extra 'hopeless?' test. ( S → Lf ) Factors short integer. Pollard Rho, with the assumption that trial division has been done already. Thus any factor less than 4012009 is known to be a prime, for greater factors a primality test is used before calling the actual Pollard Rho. Pollard Rho does not find the factors in order of magnitude, thus the results will be sorted after full factorization has been achieved. 42.1. Reference Addr. 0CE006 Name ˆSPollard 0CF006 ˆBFactor 0D0006 ˆBrentPow 0D1006 ˆZPrime? 0D2006 ˆZIsPrime? 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. 332 42. Integers Addr. 0D3006 Name ˆSIsPrime? 0D4006 ˆBIsPrime? 0D5006 ˆBRabin 0D6006 ˆZTrialDiv2 0D7006 ˆZTrialPrime? 0D8006 ˆZTrialDiv 0C7006 ˆPrime+ 0C8006 ˆPrime- 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 define 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 final factor less than 2000ˆ2 will also be automatically detected. ( Z → Z' ) Returns next prime ( Z' > Z ). ( Z → Z' ) Returns previous prime ( Z' < Z ). 42.1. Reference 42.1.5 333 Gaussian Integers Addr. 114007 Name ˆTYPEGAUSSINT? 115007 ˆDTYPEGAUSSINT? 116007 ˆDUPTYPEGAUSSINT? 187006 ˆCK1Cext 15D006 ˆCXRIext 2B5006 ˆCGCDext 4D5006 ˆ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.1.6 42. Integers Integer Tests Addr. 265C1 265C6 265BC 265D0 265B7 265CB 0F8006 Name Z= Z<> Z< Z<= Z> Z>= ˆQIsZero? 0F7006 ˆDupQIsZero? 0FA006 ˆZIsOne? 0F9006 ˆDupZIsOne? 109006 ˆDupZIsTwo? 0FC006 ˆZIsNeg? 0FB006 ˆDupZIsNeg? 10A006 ˆDupZIsEven? 107006 ˆZNLT? 19A006 ˆOBJINT? 19B006 ˆOBJPOSINT? 19C006 ˆCKINT>0 198006 ˆMETAINT? 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. 42.1. Reference Addr. 199006 Name ˆMETAPOSINT? 0CC006 ˆDupTypeS? 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). 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 5 10 MATRIX MATRIX ZINT ZINT ; MATRIX ZINT ZINT ; ; 1 2 3 4 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 Reference 43.1.1 Creating and Redimensioning Matrices Addr. 371006 Name ˆMATIDN 372006 ˆMATCON 373006 ˆMAKEARRY 345006 ˆDIMRANM 344006 ˆMATRANM 374006 ˆOBJDIMS2MAT 375006 ˆLCPROG2M 376006 ˆMAKE2DMATRIX 377006 ˆmake2dmatrix 341006 ˆMATREDIM 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 specified 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. 338 43. Matrices Addr. 342006 Name ˆVRRDM 343006 ˆVRRDMmeta 43.1.2 Description ( []/[[]] {} → [] ) Vector Right ReDiMension: adds 0 to the right. ( meta #l → meta-#l ) Meta Right ReDiMension: adds 0 to the right. Conversion Addr. 16A006 Name ˆ{}TO[] 17A006 ˆLIST2MATRIX 16B006 ˆ[]TO{} 179006 ˆMATRIX2LIST 17E006 ˆARRAY2MATRIX 175006 ˆSAMEMATRIX 176006 ˆSAMEMATSCTYPE 003007 ˆArryToList 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 float, converts matrix to symbolic form. Returns TRUE for symbolic and FALSE for numeric. ( []/[[]] → {}/{{}} ) Converts normal array to list of lists; errors for symbolic arrays. 43.1. Reference Addr. 17D006 43.1.3 339 Name ˆMATEXPLODE Description ( [[ob1..obn]] → ob1..obn [[ob1..obn]] ) Tests Addr. 16C006 Name ˆDUPNULL[]? 359006 ˆNULLVECTOR? 16F006 ˆCKSAMESIZE 170006 ˆDTYPENDO? 173006 ˆ2DMATRIX? 43.1.4 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. Calculations with Matrices Addr. 320006 321006 322006 323006 324006 325006 326006 Name ˆMAT+ ˆMADD ˆMATˆMSUB ˆVADD ˆVSUB ˆMAT* 327006 328006 ˆMMMULT ˆMVMULT 329006 ˆSCL*MAT 32A006 ˆMAT*SCL Description ( M2 M1 → M2+M1 ) ( M2 M1 → M2+M1 ) ( M2 M1 → M2-M1 ) ( M2 M1 → M2-M1 ) ( V2 V1 → V2+V1 ) ( V2 V1 → V2-V1 ) ( M2 M1 → M2*M1 ) Matrix product with size and type checking. ( M2 M1 → M2*M1 ) ( M V → V' ) Product of matrix by vector. ( ob M → M*ob ) Scalar times matrix. ( M ob → M*ob ) Matrix times scalar. 340 43. Matrices Addr. 32B006 Name ˆVPMULT 335006 32C006 ˆMATSQUARE ˆMATˆ 32D006 ˆMATCROSS 32E006 ˆMATDOT 32F006 ˆRNDARRY 330006 ˆTRCARRY 332006 ˆMAT/SCL 333006 ˆMAT/ 334006 34E006 336006 337006 338006 339006 ˆMATCHS ˆMATINV ˆMATCONJ ˆMATRE ˆMATIM ˆMATTRACE 33A006 ˆMATTRN 33C006 ˆmattran 33D006 ˆmattrn 346006 ˆMATDET 347006 ˆMATRDET 348006 ˆMATFNORM 349006 ˆMATRNORM 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. Reference Addr. 34A006 Name ˆMATCNORM 174006 ˆMATRIXDIM 43.1.5 341 Description ( M → ob ) Column norm. ( ob → # ) Returns symbolic matrix dimensionality of an object. Linear Algebra and Gaussian Reduction Addr. 34C006 Name ˆMATREF 34B006 ˆMATRREF 34F006 ˆMATREFRREF 367006 ˆMATRIXRCI 368006 ˆMATRIXRCIJ 350006 351006 ˆINXREDext ˆMETAMATRED 352006 ˆMETAPIVOT 354006 34D006 ˆPIVOTFLOAT ˆMATRANK Description ( M → M' ) Returns matrix in Row-Echelon form. ( M → M' ) Returns matrix in Reduced Row-Echelon form. ( M #full_ref → M list M' ) If #full_ref is 1, returns Reduced Row-Echelon form, otherwise returns just Row-Echolong form. ( ncol i M const → M' ) Multiplies row #i of symbolic matrix M by constant. ncol is not used, it's here because of the stack state at call-time from inside laRCI. ( ncol #i #j M const → M' ) Does Lj <- c*Li+Lj. ncol is not used, it's here because of the stack state at call-time from inside laRCI. ( Lvar #full_ref M → Lvar pivot M ) ( Meta-M Lvar #full_red → meta-M Lvar pivot ) ( meta-M #l #c → meta-M #l #l' #c' flag ) Searchs a pivot in column #c starting from row #l. Flag is FALSE if pivot is not found. If pivot is found #l' is the row, #c is updated to #c'. ( float → float_modulus ) ( M → Z/% ) Rank of a matrix. 342 43.1.6 43. Matrices Linear System Solver Addr. 080007 Name ˆLINSOLV 0F4007 ˆSOLVEMETASYST 0F5007 ˆREDUCEMETASYST 0F6007 ˆREDUCEMETAPSYST 0F7007 ˆSOLVECRAMER 355006 356006 357006 ˆSYSText ˆSTOSYSText ˆMAKESYSText 43.1.7 Addr. 35A006 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 flag 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. Other Matrix Operations Name ˆFINDELN Description ( {} A → # flag ) Returns index # of element {} in array. 43.1. Reference Addr. 35B006 Name ˆPULLEL[S] 35C006 ˆBANGARRY 35D006 ˆPUT[] 17B006 ˆLENMATRIX 33E006 ˆMATSUB 340006 ˆMATREPL 35F006 ˆMATRIX>DIAG 360006 ˆMATRIXDIAG> 361006 ˆla+ELEMsym 362006 ˆINSERTROW[] 363006 ˆinsertrow[] 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. 344 43. Matrices Addr. 364006 Name ˆINSERTCOL[] 365006 ˆINSERT[]ROW[] 366006 ˆINSERT[]COL[] 369006 ˆMATRIXCSWAP 36A006 ˆMATRIXRSWAP 0AC003 ˆSWAPROWS 36B006 ˆMATRIX-ROW 36C006 ˆMETAMAT-ROW 36D006 ˆMATRIX-COL 36E006 ˆMETAMATCSWAP 36F006 ˆMETAMATRSWAP 370006 ˆSTOMAText 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. 43.1. Reference Addr. 378006 Name ˆADDMATOBJext 379006 ˆVUNARYOP 37A006 ˆVBINARYOP 37B006 ˆPEVAL 43.1.8 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 coefficients of a polynomial. Eigenvalues, Eigenfunctions, Reduction Addr. 37C006 Name ˆMATEGVL 37F006 ˆMATEGV 37E006 ˆMADJ 380006 ˆJORDAN 22D006 ˆFLAGJORDAN 381006 ˆQXA 224006 ˆFLAGQXA 382006 ˆAXQ Description ( M → V ) Computes eigenvalues of a matrix like EGVL. ( M → V ) Computes eigenvalues/eigenvectors of a matrix like EGV. ( M → Mˆ-1 P[M] P[lambda] ) Computes inverse, matrix polynomial and characteristic polynomial. ( M → pmin pcar {evect} {eval} ) ( pmadj pcar → pmin pcar {evect} {eval} ) Eigenvalue/eigenfunctions computation. ( M → ) Internal JORDAN. ( symb lidnt → M lidnt ) Converts symbolic quad form to matrix quad form. ( symb lidnt → M lidnt ) Internal QXA. ( M lidnt → symb lidnt ) Converts matrix quad form to qymbolic quad form. 346 43. Matrices Addr. 225006 Name ˆFLAGAXQ 383006 ˆGAUSS 226006 ˆFLAGGAUSS 384006 ˆSYLVESTER 227006 ˆFLAGSYLVESTER 228006 ˆPCAR 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. Chapter 44 Expression Manipulation The entries in this chapter are used for manipulation of expressions, when they are represented in their symbolic objects form. (See Chapter 45 for entries that deal with symbolics in Metaobject form). There are entries related to collection and expasion, trigonometric and exponential transformations and substitution of values in expressions. 44.1 Reference 44.1.1 Basic Operations and Function Application Addr. 125006 Name ˆx+ext 126006 ˆx-ext 127006 ˆx*ext 129006 ˆx/ext 12B006 ˆxˆext 12C006 ˆEXPANDˆ 4FB006 ˆQNeg 4FC006 ˆRNEGext Description ( ob2 ob1 → ob2+ob1 ) Symbolic addition, tests for infinities. ( ob2 ob1 → ob2-ob1 ) Symbolic subtraction, tests for infinities. ( ob2 ob1 → ob2*ob1 ) Symbolic multiplication, tests for infinities. ( ob2 ob1 → ob2/ob1 ) Symbolic division, tests for infinities. ( ob power → obˆpower ) Power. ( x y → xˆy=exp[y*ln[x]] ) Power with simplifications. If y is a fraction of integers, use XROOTˆ instead. ( ob → -ob ) Symbolic negation. ( ob → -ob ) Symbolic negation. 347 348 44. Expression Manipulation Addr. 4FA006 Name ˆSWAPRNEG 4FE006 ˆRREext 4FD006 ˆSWAPRRE 500006 ˆRIMext 4FF006 ˆSWAPRIM 501006 ˆxREext 503006 ˆxIMext 505006 ˆRCONJext 50D006 ˆxABSext 50A006 ˆRABSext 52A006 ˆxINVext 557006 ˆxSYMINV 553006 ˆxSQext 555006 51B006 ˆxSYMSQ ˆSXSQRext 51C006 ˆXSQRext 52B006 ˆxvext 552006 521006 ˆxSYMSQRT ˆCKLN 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 → symbˆ2 ) ( ob → sqrt(ob) ) Does not take care of the sign. ( ob → sqrt(ob) ) Tries to return a positive square root if nocareflag 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. 44.1. Reference Addr. 522006 Name ˆxLNext 525006 ˆEXPANDLN 528006 ˆREALLN 526006 ˆCMPLXLN 527006 ˆLNATANext 529006 ˆxEXPext 52C006 ˆxCOSext 536006 533006 ˆxSYMCOS ˆxACOSext 53F006 52D006 ˆxSYMACOS ˆxSINext 538006 532006 ˆxSYMSIN ˆxASINext 53D006 52E006 ˆxSYMASIN ˆxTANext 53A006 534006 ˆxSYMTAN ˆxATANext 541006 52F006 ˆxSYMATAN ˆxCOSHext 545006 ˆxSYMCOSH 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, infinity 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, infinity 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, infinity 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, infinity and tables. ( ob → atan(ob) ) ( ob → cosh(ob) ) Symbolic COSH. Tests for 0, infinity and acosh(x). ( ob → cosh(ob) ) 350 44. Expression Manipulation Addr. 54E006 Name ˆxACOSHext 550006 530006 ˆxSYMACOSH ˆxSINHext 543006 54B006 ˆxSYMSINH ˆxASINHext 54D006 531006 ˆxSYMASINH ˆxTANHext 547006 ˆxSYMTANH 548006 ˆxATANHext 54A006 55F006 561006 563006 565006 567006 569006 56B006 56D006 56F006 571006 572006 ˆxSYMATANH ˆxSYMFLOOR ˆxSYMCEIL ˆxSYMIP ˆxSYMFP ˆxSYMXPON ˆxSYMMANT ˆxSYMLNP1 ˆxSYMLOG ˆxSYMALOG ˆxSYMEXPM1 ˆfactorial 573006 ˆfacts 575006 578006 128006 ˆxSYMFACT ˆxSYMNOT ˆx=ext Description ( symb → acosh(symb) ) Symbolic ACOSH. ( symb → acosh(symb) ) ( ob → sinh(ob) ) Symbolic SINH. Tests for 0, infinity 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 44.1.2 351 Trigonometric and Exponential Operators Addr. 408006 Name ˆCOS2TAN/2 40B006 ˆSIN2TAN/2 40E006 ˆTAN2TAN/2 412006 ˆCOS2TAN 414006 ˆSIN2TAN 41A006 ˆLNP12LN 41B006 ˆLOG2LN 41C006 ˆALOG2EXP 41D006 ˆEXPM2EXP 41E006 ˆSQRT2LNEXP 41F006 ˆsqrt2lnexp 420006 ˆTAN2EXP 422006 ˆASIN2LN 424006 ˆACOS2LN 427006 ˆTAN2SC 42A006 ˆSIN2TC 42C006 ˆCOS2ext 42E006 ˆSIN2ext Description ( symb → symb' ) x → (1-(tan(x/2))ˆ2)/(1+(tan(x/2))ˆ2) ( symb → symb' ) x → 2 tan(x/2)/(1+(tan(x/2))ˆ2) ( symb → symb' ) x → 2 tan(x/2)/(1-(tan(x/2))ˆ2) ( symb → symb2 ) x → 1/sqrt(1+(tan(x))ˆ2) ( symb → symb' ) x → tan(x)/sqrt(1+(tan(x))ˆ2) ( symb → symb' ) x → ln(x+1) ( symb → symb' ) x → log(x) ( symb → symb' ) x → alog(x) ( symb → symb' ) x → exp(x)-1 ( symb → symb' ) x → exp(ln(x)/2) ( meta → meta' ) x → exp(ln(x)/2) ( symb → symb' ) x → (exp(i2x)-1)/(i*(exp(i2x)+1)) ( symb → symb' ) x → = i*ln(x+sqrt(xˆ2-1))+pi/2. ( symb → symb' ) x → ln(x+sqrt(xˆ2-1))/i ( symb → symb' ) x → sin(x)/cos(x) ( symb → symb' ) x → cos(x)*tan(x) ( symb → symb' ) x → sqrt(1-(sin(x))ˆ2). ( symb → symb' ) x → sqrt(1-(cos(x))ˆ2). 352 44. Expression Manipulation Addr. 431006 Name ˆATAN2ASIN 434006 ˆASIN2ATAN 437006 ˆASIN2ACOS 43C006 ˆACOS2ASIN 43D006 ˆATAN2LNext 440006 ˆTAN2SC2 442006 ˆTAN2CS2 444006 ˆSIN2EXPext 446006 ˆCOS2EXPext 448006 ˆSINH2EXPext 44A006 ˆCOSH2EXPext 44C006 ˆTANH2EXPext 44E006 ˆASINH2LNext 450006 ˆACOSH2LNext 452006 ˆATANH2LNext 454006 ˆXROOT2ext 45A006 ˆLN2ATAN Description ( symb → symb' ) x → asin(x/sqrt(xˆ2+1)) ( symb → symb' ) x → atan(x/sqrt(1-xˆ2)) ( 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 → (eˆx-1/eˆx)/2 ( symb → symb' ) x → (eˆx+1/eˆx)/2 ( symb → symb' ) x → (eˆ2x-1)/(eˆ2x+1) ( symb → symb' ) x → ln(x+sqrt(xˆ2+1)) ( symb → symb' ) x → ln(x+sqrt(xˆ2-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 44.1.3 353 Simplification, Evaluation and Substitution Addr. 45B006 Name ˆVAR=LIST 464006 ˆSYMBEXEC 465006 ˆMEVALext 466006 ˆCASNUMEVAL 467006 ˆCASCOMPEVAL 468006 ˆREPLACE2BY1 469006 ˆNR_REPLACE 46B006 ˆCASCRUNCH 46C006 ˆAPPROXCOMPEVAL 11A007 ˆALGCASCOMPEVAL Description ( idnt {} → {}' ) Replaces all elements of the initial list by idnt=element. ( ob symb → ob' ) If symb is an equation, executes the corresponding change of variables in ob, otherwise tries to find symb so that ob is zero. Note that change of variable works for change of user functions. ( ob {} {}' → ob' ) Replaces all occurrances of an element of list2 by the corresponding element of list1 in ob. Looks in ob from outer to inner expressions. list2 and list1 may contain secondaries. If vxxlflag is set SIGN var are leaved unchanged. ( symb list1 list2 → symb' ) Evaluation of a symbolic. The lists' formats are list1={idnt/lam1... idnt_n/lam_n} list2={value1...value_n}. The idnt's/lam's in list1 are not evaluated before replacing value1...value_n. ( symb → symb' ) Evaluation of a symbolic. ( symb idnt a → symb' ) Evaluation of a symbolic replacing an idnt by a value; for example evaluation of F(X) for X=1/2) ( symb idnt a → symb' ) Like REPLACE2BY1 but prevents evaluation of INT. ( ob → % ) Like CRUNCH but in approximate mode. ( symb → symb' ) Like CASCOMPEVAL but in approximate mode. ( expr → expr ) 354 44. Expression Manipulation Addr. 297006 Name ˆSLVARext 298006 ˆSIMPLIFY 299006 ˆSIMP1ext 29A006 ˆSYMEXPAN 29B006 ˆSIMPVAR 2A0006 ˆSIMPSYMBS 2A2006 ˆSIMPUSERFCN 2A3006 ˆEVALUSERFCN 2A4006 ˆSIMP| 2A9006 ˆSIMPext 2AD006 ˆSIMPGCDext 2AE006 ˆSIMP3ext 2B9006 ˆTSIMP2ext Description ( Lvar → Lvar' ) Simplifies all elements of the list that are supposed to be variables. ( symb → symb' ) Simplifies one object like EVAL. ( symb → symb' ) Simplifies one object like EXPAND. Object must be a symbolic, a real or a complex number. ( symb → symb' ) Simplifies one object like EXPAN. Object must be symb/real/cmplx. ( ob → ob' ) Simplifies variable. ( inf sup fcn var → int(inf,sup,fcn,var) ) ( ob1..obn #n ob → id[] ) Simplification 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' ) Simplifies 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 simplifications. Converts only sqrt ˆ and XROOT to EXP/LN. LN are returned as -1/INV[-LN[]] for use by SERIES. 44.1. Reference Addr. 2BA006 Name ˆTSIMPext 2BB006 ˆTSIMP3ext 44.1.4 355 Description ( symb → symb ) Transcendental simplifications. Convert transcendental functions to EXP and LN. ( symb → symb ) Collection and Expansion Addr. 26E006 Name ˆCOLCext 2FE006 ˆTCOLLECT 2FF006 ˆSIGMAEXPext 300006 ˆLINEXPext 301006 ˆSIGMAEXP2ext 303006 ˆSINEXPA 316006 ˆLNEXPA 31C006 ˆMTRIG2SYMB 309006 ˆCOSEXPA 30F006 ˆEXPEXPA 31B006 ˆLINEXPA 31D006 ˆLNCOLCext Description ( symb → symb' ) Factorization with respect to the current variable of symb and factorization of the integer content of symb. ( symb → symb' ) Performs trigonometric linearization and then collects sines and cosines of the same angle. ( symb → symb' ) Conversion to exp and ln with exponential linearization. ( symb → Meta ) Meta = arg_exp1 coef1 ... arg_expn coefn #2n. ( Meta → symb ) Back conversion from arg_exp/coef_meta to symbolic. ( symb → symb' ) Expands SIN. ( symb → symb' ) Expands LN. ( Meta → symb ) Back conversion of trig-meta to symbolic. ( symb → symb' ) Expands COS. ( symb → symb' ) Expands EXP. ( symb → Meta ) Alternates trig operator and coefficient. ( symb → symb' ) Collects logarithms. 356 44. Expression Manipulation Addr. 31F006 Name ˆTEXPAext 240006 ˆEXLR 44.1.5 Description ( symb → symb ) Main transcendental expansion program. ( 'a=b' → a b ) ( ob → X ob ) Internal equation splitter. Trigonometric Transformations Addr. 407006 Name ˆHALFTAN 411006 ˆTRIGTAN 416006 ˆTRIGext 417006 ˆHYP2EXPext 418006 ˆEXPLNext 419006 ˆSERIESEXPLN 426006 ˆTAN2SCext 429006 ˆSIN2TCext 430006 ˆATAN2Sext 433006 ˆASIN2Text 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 sinˆ2+cosˆ2=1 to simplify trigonometric expressions. If flag -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-xˆ2)). ( symb → symb' ) Converts ASIN to ATAN using asin(x)=atan(x/sqrt(1-xˆ2)). 44.1. Reference Addr. 436006 Name ˆASIN2Cext 43A006 ˆACOS2Sext 43F006 ˆTAN2SC2ext 456006 ˆLN2ext 44.1.6 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 flag -116 is set calls TAN2SC2, else TAN2CS2. ( symb → symb' ) If symb contains x, returns -1/inv(-ln(x)), else ln(x). Used by SERIES. Division, GCD and LCM Addr. 3E8006 3EA006 3EC006 Name ˆPSEUDODIV ˆBESTDIV2 ˆQUOText 3ED006 ˆNEWDIVext 3F3006 ˆQUOTOBJext 3F4006 ˆDIVISIBLE? 3F5006 ˆQDiv? Description ( Q2 Q1 → a Q2*a/Q1 Q2*a/Q1 ) ( o2 o1 → quo mod ) ( o2 o1 → o2 div o1 ) Euclidean quotient of 2 objets (works even if o2 mod o1=0). ( ob2 ob1 → quo mod ) Euclidean division, ob2 and ob1 may be fractions of returns a fraction of Q. ( a_a-1...a0 bb_1...b0 #b #a flag → r q ) SRPL Euclidean division: step 2 computes the remainder r only if flag is TRUE. ( a b → a/b T ) ( a b → ob F ) Returns TRUE and quotient if b divides a, otherwise returns FALSE. ( a b → a/b T ) ( a b → F ) Returns TRUE and quotient if b divides a, otherwise returns FALSE. 358 44. Expression Manipulation Addr. 3F6006 Name ˆFastDiv? 3F7006 ˆPOTENCEext 2A5006 ˆDENOLCMext 2A6006 ˆMETADENOLCM 2B1006 ˆLPGCDext 2B2006 ˆSLOWGCDext 2B3006 ˆQGcd Description ( P Q → P/Q PmodQ T ) Euclidean division. Assumes P and Q have integer or Gaussian integer coefficient. 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 ). Chapter 45 Symbolic Meta Handling This chapter contains words that modify metas which are exploded symbolic objects. They are used to modify the expression or to operate on them. 45.1 Reference 45.1.1 Basic Expression Manipulation Addr. 157006 Name ˆSYMBINCOMP 386006 ˆm-1&m+1 387006 ˆmeta1/meta 388006 ˆ1&meta 389006 ˆmeta/2 38A006 ˆaddt2 38B006 ˆaddt/ 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 first 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. 359 360 45. Symbolic Meta Handling Addr. 38C006 Name ˆmeta2* 459006 ˆmetai* 38D006 ˆmeta1-sq 38E006 ˆmetasq+1 38F006 ˆmetasq-1 390006 ˆmeta-1 398006 ˆaddtˆ 39C006 ˆtop&addt* 39D006 ˆtop&addt/ 39E006 ˆaddti 45.1.2 Description ( Meta → 2&Meta&* ) Multiplies the expression by 2. ( meta → meta*i ) Multiplies meta by i. ( Meta → 1&Meta&SQ&- ) Changes x into 1-xˆ2, where x is the original expression. ( Meta → Meta&SQ&1&+ ) Changes x into xˆ2+1, where x is the original expression. ( Meta → Meta&SQ&1&- ) Changes x into xˆ2-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. Basic Operations and Function Application Addr. 393006 Name ˆmetaadd 3AB006 ˆMetaAdd 1CE006 ˆckaddt+ Description ( Meta1 Meta2 → Meta1+Meta2 ) Adds 2 meta objects with trivial simplifications. metaadd checks for Meta1/2=Z0 ONE. ( Meta2 Meta1 → Meta2+Meta1 ) Adds 2 meta objects with trivial simplifications. Checks for infinities then call metaadd. ( Meta1 Meta2 → Meta1+Meta2 ) Adds 2 meta objects with trivial simplifications. 45.1. Reference Addr. 394006 Name ˆmetasub 3AD006 ˆMetaSub 1CF006 ˆckaddt- 395006 ˆmetamult 3AF006 ˆMetaMul 1CD006 ˆckaddt* 396006 ˆmetadiv 3B1006 ˆMetaDiv 3F1006 ˆDIVMETAOBJ 397006 ˆmetaˆ 361 Description ( Meta1 Meta2 → Meta1+Meta2 ) Subtracts 2 meta objects with trivial simplifications. metasub checks for Meta1/2=Z0 ONE. ( Meta2 Meta1 → Meta2-Meta1 ) Subtracts 2 meta objects with trivial simplifications. Checks for infinities then call metasub. ( Meta1 Meta2 → Meta1+Meta2 ) Subtracts 2 meta objects with trivial simplifications. ( Meta1 Meta2 → Meta1*Meta2 ) Multiplies 2 meta objects with trivial simplifications. Checks for meta1, meta2= Z0 or Z1, checks for xNEG. ( Meta2 Meta1 → Meta2*Meta1 ) Multiplies 2 meta objects with trivial simplifications. Checks for infinities/0 then call metamult. ( Meta1 Meta2 → Meta1*Meta2 ) Multiplies 2 meta objects with trivial simplifications. ( Meta2 Meta1 → Meta2/Meta1 ) Divides 2 meta objects with trivial simplifications. Checks for infinities and 0, meta2 =1 or Z-1, checks for xNEG. ( Meta2 Meta1 → Meta2/Meta1 ) Divide 2 meta objects with trivial simplifications. Checks for infinities 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. 362 45. Symbolic Meta Handling Addr. 399006 Name ˆmetapow 3B5006 ˆMetaPow 39B006 ˆmetaxroot 3B9006 ˆmetaneg 3BA006 ˆmetackneg 3B7006 ˆMetaNeg 502006 ˆxSYMRE 504006 ˆxSYMIM 50E006 ˆaddtABS 510006 ˆaddtABSEXACT 511006 ˆaddtSIGN 513006 ˆaddtARG 12D006 ˆaddtXROOT 12F006 ˆaddtMIN 131006 ˆaddtMAX Description ( Meta2 Meta1 → Meta2ˆMeta1 ) Elevates expression to a power (any other expression). If length of Meta1 is ONE, calls metaˆ. ( Meta2 Meta1 → Meta2ˆMeta1 ) Power. Checks for infinities then calls metapow. ( Meta2 Meta1 → Meta2&XROOT&Meta1 ) Root of expression. ( meta → meta ) Checks only for meta finishing by xNEG. ( meta → meta ) Like metaneg but checks for meta=ob ONE. ( Meta → Meta ) Negates meta. Only checks for metas finishing 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 first to find 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 o2ˆo1. ( Meta2 Meta1 → Meta' ) Meta MIN. ( Meta2 Meta1 → Meta' ) Meta MAX. 45.1. Reference Addr. 133006 Name ˆaddt< 135006 ˆaddt<= 137006 ˆaddt> 139006 ˆaddt>= 13B006 ˆaddt== 13D006 ˆaddt!= 13F006 ˆaddt% 141006 ˆaddt%CH 143006 ˆaddt%T 145006 ˆaddtMOD 147006 ˆaddtTRNC 149006 ˆaddtRND 14B006 ˆaddtCOMB 14D006 ˆaddtPERM 14F006 ˆaddtOR 151006 ˆaddtAND 153006 ˆaddtXOR 506006 ˆaddtCONJ 523006 ˆaddtLN 363 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. 364 45. Symbolic Meta Handling Addr. 535006 Name ˆaddtCOS 537006 ˆaddtSIN 539006 ˆaddtTAN 53B006 ˆaddtSINACOS 53C006 ˆaddtASIN 53E006 ˆaddtACOS 540006 ˆaddtATAN 542006 ˆaddtSINH 544006 ˆaddtCOSH 546006 ˆaddtTANH 549006 ˆaddtATANH 54C006 ˆaddtASINH 54F006 ˆaddtACOSH 551006 ˆaddtSQRT 554006 ˆaddtSQ 556006 ˆaddtINV 558006 ˆaddtEXP 559006 ˆxSYMEXP Description ( Meta → Meta' ) Meta COS. ( Meta → Meta' ) Meta SIN. ( Meta → Meta' ) Meta TAN. ( meta → meta' ) If meta stands for x, meta' stands for sqrt[1xˆ2]. ( 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[..]. 45.1. Reference Addr. 55A006 Name ˆaddtD->R 55C006 ˆaddtR->D 55E006 ˆaddtFLOOR 560006 ˆaddtCEIL 562006 ˆaddtIP 564006 ˆaddtFP 566006 ˆaddtXPON 568006 ˆaddtMANT 56A006 ˆaddtLNP1 56C006 ˆaddtLOG 56E006 ˆaddtALOG 570006 ˆaddtEXPM 574006 ˆaddtFACT 577006 ˆaddtNOT 45.1.3 365 Description ( Meta → Meta' ) Meta D→R. ( Meta → Meta' ) Meta R→D. ( 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. Trigonometric and Exponential Operators Addr. 409006 Name ˆcos2tan/2 40A006 ˆ1-xˆ2/1+xˆ2 40C006 ˆsin2tan/2 Description ( meta → meta' ) x → (1-(tan(x/2))ˆ2)/(1+(tan(x/2))ˆ2) ( meta → meta' ) x → (1-xˆ2)/(1+xˆ2) ( meta → meta' ) x → 2 tan(x/2)/(1+(tan(x/2))ˆ2) 366 45. Symbolic Meta Handling Addr. 40D006 Name ˆ2x/1+xˆ2 40F006 ˆtan2tan/2 410006 ˆaddtTAN/2 413006 ˆcos2tan 415006 ˆsin2tan 421006 ˆtan2exp 423006 ˆasin2ln 425006 ˆacos2ln 428006 ˆsin/cos 42B006 ˆcos*tan 42D006 ˆsqrt1-sinˆ2 42F006 ˆsqrt1-cosˆ2 432006 ˆatan2asin 435006 ˆasin2atan 438006 ˆpi/2-acos 439006 ˆpi/2-meta 43B006 ˆpi/2-asin 43E006 ˆatan2ln 441006 ˆ2*1-cos/sin Description ( meta → meta' ) x → 2x/(1+xˆ2) ( 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(xˆ2-1))+π/2. ( meta → meta' ) x → ln(x+sqrt(xˆ2-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(xˆ2+1)) ( meta → meta' ) x → atan(x/sqrt(1-xˆ2)) ( 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 Name ˆ2*sin/1+cos 445006 ˆsin2exp 447006 ˆcos2exp 449006 ˆsinh2exp 44B006 ˆcosh2exp 44D006 ˆtanh2exp 44F006 ˆasinh2ln 451006 ˆacosh2ln 453006 ˆatanh2ln 455006 ˆxroot2expln 458006 ˆexp2sincos 45.1.4 367 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 → (eˆx-1/eˆx)/2 ( meta → meta' ) x → (eˆx+1/eˆx)/2 ( meta → meta' ) x → (eˆ2x-1)/(eˆ2x+1) ( meta → meta' ) x → ln(x+sqrt(xˆ2+1)) ( meta → meta' ) x → ln(x+sqrt(xˆ2-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]. meta as Infinity and Undefs Addr. 3A1006 Name ˆ1metaundef# 3A0006 ˆ2metaundef# 3A2006 ˆmetaundef 3A4006 ˆ1metainf# Description ( meta → meta # ) Tests presence of undef in meta. # is the position of undef. ( meta2 meta1 → meta2 meta1 # ) Tests presence of undef in meta2 and meta1. # is the position of undef. ( → meta ) Returns undef meta. ( meta → meta # ) Finds position of infinity in meta. Metas of length>2 are considered as finite meta. 368 45. Symbolic Meta Handling Addr. 3A3006 Name ˆ2metainf# 3A5006 ˆmetainftype 3A6006 ˆunsignedinf 3A7006 ˆplusinf 3A8006 ˆNDROPplusinf 3A9006 ˆminusinf 3AA006 ˆNDROPminusinf 45.1.5 Description ( meta2 meta1 → meta2 meta1 # ) Finds position of infinity in meta 2 and meta1. Metas of length>2 are considered as finite meta. ( meta → # ) Returns infinity type: 1 for +infinity, 2 for infinity or 0 for unsigned. ( → meta ) Returns unsigned infinty. ( → meta ) Returns plus infinty. ( ob1..obn → meta ) Replaces meta by plus infinty. ( → meta ) Returns minus infinty. ( ob1..obn → meta ) Replace meta by minus infinty. Expansion and Simplification Addr. 3BB006 Name ˆmetasimp 118007 ˆDISTRIB* 3C2006 ˆDISTRIB/ 304006 ˆMETASINEXPA 305006 ˆSINEXPA+ 306006 ˆSINEXPA- Description ( Meta → Meta ) Simplifies a meta object. Non recursive rational simplification. ( meta → meta' T ) ( meta → meta F ) Distribute *. Returns FALSE if no distribution done. ( meta → meta' T ) ( meta → meta F ) Distribute /. Returns FALSE if no distribution done. ( Meta → Meta' ) Expands SIN. ( Meta → Meta' ) Expands SIN(x+y). ( Meta → Meta' ) Expands SIN(x-y). 45.1. Reference Addr. 307006 Name ˆSINEXPA* 308006 ˆSINEXPA*1 30A006 ˆMETACOSEXPA 30B006 ˆCOSEXPA+ 30C006 ˆCOSEXPA- 30D006 ˆCOSEXPA* 30E006 ˆCOSEXPA*1 310006 ˆMETAEXPEXPA 311006 ˆEXPEXPA+ 312006 ˆEXPEXPA- 313006 ˆEXPEXPA* 314006 ˆEXPEXPANEG 315006 ˆEXPEXPA*1 317006 ˆMETALNEXPA 318006 ˆLNEXPA* 319006 ˆLNEXPA/ 31A006 ˆLNEXPAˆ 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(xˆy). 370 Addr. 31E006 45.1.6 45. Symbolic Meta Handling Name ˆMETATANEXPA Description ( meta → tan[meta] ) Expands tan[meta]. Tests Addr. 39A006 ˆmetafraction? Name 3BC006 ˆ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. Xˆ2 > 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 Reference 46.1.1 Computation with Polynomials Addr. 118006 Name ˆQAdd 119006 ˆRADDext 117006 ˆSWAPRADD 115006 ˆQSub 116006 ˆRSUBext 114006 ˆSWAPRSUB 111006 ˆQMul 112006 ˆRMULText 110006 ˆSWAPRMULT 11C006 ˆQDiv 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 /. 371 372 46. Polynomials Addr. 11B006 Name ˆRDIVext 11A006 ˆSWAPRDIV 0D9006 113006 ˆQMod ˆRASOP 11F006 ˆRP# 120006 ˆMPext 123006 ˆRPext 108006 ˆDISTDIVext 3E5006 ˆPTAYLext 15B006 ˆCARCOMPext 3EE006 ˆQDivRem 3EF006 ˆDIV2LISText 3F8006 ˆPDIV2ext 3F9006 ˆPSetSign 3C4006 ˆModExpa 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 specified multiplication program. ( o2 o1 → o2ˆo1 ) Tries to convert o1 to an integer to call RP#, otherwise xˆext. ( P Q → quo mod T ) ( P Q → P Q F ) Euclidean division. Assumes P and Q have integer coefficientes. Returns FALSE if sparse short division fails. ( P, r → symb ) Taylor for polynomials. ( Q1/Q2 → Q1'/Q2' ) Extracts leading coefficients for the first 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 first 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 ) 46.1. Reference Addr. 3C5006 Name ˆModAdd 3C6006 ˆModSub 3C7006 ˆModMul 3C8006 ˆModDiv 3C9006 ˆModDiv2 3CA006 ˆModInv 3CB006 ˆModGcd 46.1.2 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. Factorization Addr. 08E006 Name ˆBerlekampP 08F006 ˆBerlekamp Description ( P #prime → P F / P Lf #prime T ) Berlekamp's algorithm for finding modular factors of a univariate polynomial. ( P → P F / P Lf #prime T ) Berlekamp's algorithm for finding modular factors of a univariate polynomial with a leading frontend for finding linear factors faster. The input polynomial must be square free, otherwise the polynomial is not fully factored. Due to memory restrictions byte sized coefficients are used and the following restrictions were imposed: prime<128 and degree<256. If the conditions are not met FALSE is returned. BCD: prime≤97. 374 46. Polynomials Addr. 0A8006 Name ˆALG48FCTR? 0A9006 ˆMFactTriv 0AA006 ˆCheckPNoExt 0AB006 ˆPPP 0AC006 ˆPFactor 0AD006 ˆPSqff 0AE006 ˆPHFctr 0AF006 ˆPHFctr1 0B0006 ˆPHFctr0 0D8007 ˆP2P# 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). 46.1. Reference Addr. 0B1006 Name ˆDeCntMulti 0B2006 ˆDoLS 0B3006 ˆPNFctr 0B4006 ˆPSQFF 0B5006 ˆLiftZAdic 0B6006 ˆLFCProd 0B7006 ˆUFactor 0B8006 ˆUFactor1 0B9006 ˆMonicLf 0BA006 ˆDemonicLf 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 coefficient of factor 1. ( Lfp lc p → Lfp' ) Converts monic modular factorization to true modular factorization by multiplying factor1 by lcoeff. 376 46. Polynomials Addr. 0BB006 Name ˆLiftLinear 0BC006 ˆLiftGeneral 0BD006 ˆUFactorDeg2 0BE006 ˆCombineFac 0BF006 ˆCombProd 0C0006 ˆCombInit 0C1006 ˆCombNext 0C2006 ˆRmCombNext 0C3006 ˆPFactTriv Description ( #root1 .. #rootn #n → ) Lifts modular roots of a polynomial to find 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 pˆk where pˆk 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. 46.1. Reference Addr. 0C4006 Name ˆVarFactor 0C5006 ˆPFactPowCnt 0C6006 ˆPDivLk 282006 ˆFEVIDENText 46.1.3 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. flag 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: find all 1st order factors of P. General Polynomial Operations Addr. 09B006 Name ˆONE{}POLY 09C006 ˆTWO{}POLY 09D006 ˆTHREE{}POLY 09E006 ˆTWO::POLY 09F006 ˆ::POLY 0A0006 ˆ{}POLY 0A7006 ˆ>POLY 0A1006 ˆ>TPOLY Description ( ob → {ob} ob1 → Q ) Replaces ONE{}N for polynomial building. ( ob1 ob2 → Q ) Replaces TWO{}N for polynomial building. ( ob1 ob2 ob3 → Q ) Replaces THREE{}N for polynomial building. ( ob1 ob2 → :: ) Replaces 2Ob>Seco for polynomial building. ( Meta → :: ) Replaces ::N for polynomial building. As opposed to the regular ::N code, we do pop the binary number. This is enforced by the entry to the common polyxml code. ( Meta → Q ) Replaces {}N for polynomial building. As opposed to the regular {}N code, we do pop the binary number. This allows us to enter the code here with fixed sizes, as in ONE{}POLY and TWO{}POLY. ( Meta → Q ) Builds polynomial. ( P ob → P' ) Replaces >TCOMP for polynomial building. 378 46. Polynomials Addr. 0A2006 Name ˆ>HPOLY 0A3006 ˆ>TPOLYN 0A4006 ˆ>HPOLYN 0A5006 ˆMKPOLY 2AB006 ˆMAKEPROFOND 4F4006 ˆTRIMext 4F5006 ˆPTrim 0A6006 ˆONE>POLY 302006 ˆTCHEBext 3DE006 ˆLRDMext 3DF006 ˆRRDMext 3E0006 ˆDEGREext 3E1006 ˆFHORNER 3E2006 ˆHORNext 3E4006 ˆMHORNext 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 modified. ( 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. 46.1. Reference Addr. 3E6006 Name ˆLAGRANGEext 10F007 ˆRESULTANT 110007 ˆRESULTANTLP 111007 ˆRESPSHIFTQ 112007 ˆADDONEVAR 0CF007 ˆSHRINKEVEN 0D1007 ˆSHRINK2SYM 0D2007 ˆSHRINKSYM 0D3007 ˆSHRINK2ASYM 0D4007 ˆSHRINKASYM 103006 ˆPNMax 161006 ˆSWAPNDXF 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=Xˆ2 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 coefficient of P with max norm. ( Qden Qnom → symb ) Builds a symbolic from rational polynomial. 380 46. Polynomials Addr. 162006 Name ˆNDXFext 163006 ˆSWAPFXND 164006 ˆFXNDext 3D7006 3D8006 ˆREGCDext ˆEGCDext 0EA006 ˆPEvalFast? 10E007 ˆFLAGRESULTANT 46.1.4 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 overflow occurs during Horner evaluation. ( symb1 symb2 → symb ) Resultant of two polynomials in symbolic form. Tests Addr. 10B006 Name ˆUnivar? 10C006 ˆSUnivar? 0CC007 ˆPOLYPARITY 0D6007 ˆPOLYSYM 0D7007 ˆPOLYASYM Description ( P → P flag ) Tests if polynomial is univariate. ( P → P flag ) Tests if polynomial is univariate and the coefficients 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 coefficients 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. Chapter 47 Root Finding In this chapter you will find entries related to finding roots of equations. 47.1 Reference 47.1.1 Root Finding and Numerical Solvers Addr. 272006 Name ˆMULMULText 274006 ˆMETAMM2 275006 276006 ˆCOMPLISText ˆMETACOMPRIM 278006 ˆMETACOMP1 279006 ˆADDLISText 27A006 ˆDIVISext 27B006 ˆFACT1ext 27C006 ˆFACTOext 27D006 ˆZFACTO 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 382 47. Root Finding Addr. 27E006 Name ˆSOLVext 27F006 ˆFRND 280006 ˆBICARREE? 281006 113007 ˆREALBICAR ˆIROOTS 283006 ˆEVIDENText 284006 ˆEVIDSOLV 285006 ˆDEG2ext 286006 ˆMETADEG2 287006 ˆMETADEG1 288006 ˆDEG1 289006 ˆFDEG2ext 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 first 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 coefficient. tests for 1st order polynomial. 47.1. Reference Addr. 28B006 Name ˆRACTOFACext 28C006 ˆFACTORACext 28D006 ˆRFACText 28E006 ˆRFACT2ext 28F006 ˆRFACTSTEP3 290006 ˆRFACTSTEP5 291006 ˆMETASOLV 293006 ˆMETASOLV2 294006 ˆMETASOLV4 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. 384 47. Root Finding Addr. 295006 Name ˆADDMULTIPL 296006 ˆFACTOOBJext 093006 ˆALG48MSOLV 094006 ˆGMSOLV 095006 ˆGBASIS 096006 ˆGSOLVE 097006 ˆGFACTOR 099006 ˆREDUCE 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 (flag=TRUE) or roots (flag=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. 47.1. Reference Addr. 09A006 Name ˆFASTREDUCE 37D006 ˆROOTM2ROOT 0F2007 ˆPASCAL_NEXTLINE 0F3007 ˆDELTAPSOLVE 385 Description ( r P → q T / r P F ) Assembly version of REDUCE for polynomials with short coefficients. Returns FALSE if an overflow 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. Chapter 48 Calculus Operations The entries in this chapter are related to several aspects of Calculus, such as limits, derivates, partial fraction expansions and Laplace transformations. 48.1 Reference 48.1.1 Limits and Series Expansion Addr. 46F006 Name ˆSYMTAYLOR 471006 ˆTRUNCDL 472006 ˆLIMSERIES! 477006 ˆLIMIT! 478006 ˆLIMSTEP1! 47C006 47F006 480006 481006 ˆLIMLIM! ˆLIMCMPL! ˆLIMEQUFR! ˆLIMEQU! 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 { # # # } ) 386 48.1. Reference Addr. 483006 Name ˆLIM+-! 48C006 ˆLIMDIVPC! 48E006 490006 ˆLIMPROFEND! ˆLIM%#! 49E006 4A1006 ˆLIM#VARX! ˆHORNEXP! 4B6006 4BA006 4BD006 4BE006 4BF006 4C0006 4C2006 ˆVARCOMP! ˆVARCOMP32! ˆLIMVALOBJ! ˆLIMVAL! ˆEQUIV! ˆLVARXNX2! ˆFindCurVar 4C3006 15C006 ˆLIMVAR! ˆRISCH13 48.1.2 Addr. 3DC006 1A1006 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. 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 first variable in it is used. Note that the gradient is a vector quantity, thus the result is returned as a list. 388 48. Calculus Operations Addr. 1A3006 Name ˆDERIVIDNT 1A4006 ˆDERIVIDNT1 1A5006 ˆDERIV 1A6006 ˆMETADERIV 1BD006 ˆMETADER&NEG 1A9006 ˆMETADER+ 1AA006 ˆMETADER- 1AB006 ˆMETADER* 1AC006 ˆMETADER/ 1AD006 ˆMETADERˆ 1AE006 ˆMETADERFCN 1AF006 ˆMETADERDER 1B0006 ˆMETADERI4 1B1006 ˆMETADERI3 1B2006 ˆMETADERIFTE 1B4006 ˆMETADEREXP 1B5006 ˆMETADERLN Description ( ob id → ob' ) Main entry point for derivative with respect to a identifier. ( ob → ob' ) Main entry point for derivative with respect to the identifier 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 defined integral. ( Meta → Meta' ) Meta derivative of an undefined integral. ( Meta → Meta' ) Meta derivative of IFTE. ( Meta → Meta' ) Meta derivative of EXP. ( Meta → Meta' ) Meta derivative of LN. 48.1. Reference Addr. 1B6006 Name ˆMETADERLNP1 1B7006 ˆMETADERLOG 1B8006 ˆMETADERALOG 1B9006 ˆMETADERABS 1BA006 ˆMETADERINV 1BB006 ˆMETADERNEG 1BC006 ˆMETADERSQRT 1BE006 ˆMETADERSQ 1BF006 ˆMETADERSIN 1C0006 ˆMETADERCOS 1C1006 ˆMETADERTAN 1C2006 ˆMETADERSINH 1C3006 ˆMETADERCOSH 1C4006 ˆMETADERTANH 1C5006 ˆMETADERASIN 1C6006 ˆMETADERACOS 1C7006 ˆMETADERATAN 1C8006 ˆMETADERASH 1C9006 ˆMETADERACH 389 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. 390 48. Calculus Operations Addr. 1CA006 Name ˆMETADERATH 1B3006 ˆDERARG 1CB006 ˆpshder* 1CC006 ˆSQRTINVpshd* 48.1.3 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. Integration Addr. 07F007 Name ˆODE_INT 2C5006 ˆIBP 2D0006 ˆPREVALext 2D1006 ˆWARNSING 2D2006 ˆINText 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-Xˆ2)) 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. 48.1. Reference Addr. 2D3006 Name ˆINT3 3DD006 ˆINTEGRext 48.1.4 Description ( f(x) x y → F(y) where F'=f ) Undefined integration. No limit for underdetermined form. ( {} → prim ) Partial Fractions Addr. 3D2006 Name ˆPARTFRAC 3D3006 ˆINPARTFRAC 48.1.5 391 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. Differential Equations Addr. 07E007 Name ˆDESOLVE 081007 ˆLDECSOLV 082007 083007 ˆLDEGENE ˆLDEPART 084007 ˆLDSSOLVext 085007 ˆODETYPESTO 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 coefficients. ( 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. 392 Addr. 086007 48.1.6 48. Calculus Operations Name ˆODE_SEPAR 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. Laplace Transformation Addr. 087007 Name ˆLAPext 088007 ˆILAPext 08B007 ˆILAPEXP 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] ) Chapter 49 Summation In this chapter, you will find the main entries related to summation, and also some sub-routines used by those entries. 49.1 Reference Addr. 0F9007 Name ˆSUM 0FB007 ˆSUMVX 0FD007 ˆRATSUM 0FE007 ˆFTAYL 0FF007 ˆCSTFRACTION? 104007 ˆHYPERGEO 100007 ˆNONRATSUM 103007 ˆmeta_cst? 108007 ˆZEILBERGER Description ( sym idnt → sym ) Internal SUM. The variable can be specified. ( 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 394 49. Summation Addr. 109007 Name ˆSYMPSI 10B007 ˆSYMPSIN 11C007 ˆ%%PSI 10D007 ˆIBERNOULLI 0D9007 ˆNDEvalN/D 0DA007 ˆPEvalN/D 3C1006 ˆvgerxssSYMSUM 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'. Chapter 50 Modular Operations The entries in this chapter are related to modular arithmetic and other modular operations. 50.1 Reference 50.1.1 Modulo Operations Addr. 252006 ˆFLAGFACTORMOD Name 253006 ˆMFACTORMOD 256006 ˆLIFCext 0E1006 ˆPEvalMod 0E2006 ˆQAddMod 0E3006 ˆQSubMod 0E4006 ˆQMulMod 0E5006 ˆQDivMod 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 coefficients in the remainder can increase very quickly to tens of digits, thus it is important to normalize the coefficients whenever possible. 395 396 50. Modular Operations Addr. 0E6006 Name ˆQInvMod 0E7006 ˆQGcdMod 4C5006 4C6006 ˆISOL1 ˆISOLALL 4C7006 ˆISOL2ext 4C8006 ˆBEZOUTMSOLV 4C9006 ˆROOT{}N 4CA006 ˆMHORNER 4CB006 4CC006 4CD006 ˆMHORNER1 ˆSQFFext ˆMSQFF 4CE006 ˆ%1TWO 4CF006 ˆMZSQFF 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 isolflag 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. 50.1. Reference Addr. 4D0006 Name ˆMZSQFF1 4D2006 ˆMLISTSQFF 4D3006 ˆMETASQFFext 4DE006 ˆLIDNText 4DF006 ˆLVARXNXext 4E0006 ˆISPOLYNOMIAL? 4E1006 ˆ2POLYNOMIAL? 4E2006 ˆVXINDEP? 4E4006 ˆRLVARext 4E5006 4E6006 4E7006 ˆLLVARDext ˆVXLVARext ˆLVARext 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 coefficients. ( 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. 398 50. Modular Operations Addr. 4E8006 Name ˆVX>LVARext 4E9006 ˆVX> 4EA006 ˆVX! 4EC006 ˆLIDNTLVAR 4ED006 ˆLISTOPRAC 4EE006 ˆLISTOPext 4EF006 ˆLISTOPSQRT 4F0006 ˆLVARDext 4F2006 ˆDEPTHext 4F3006 4F6006 ˆDEPTHOBJext ˆTRIMOBJext 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. 50.1. Reference Addr. 4F7006 Name ˆNEWTRIMext 4F8006 ˆ>POLYTRIM 4F9006 ˆELMGext 0E9006 ˆIsV>V? 0EB006 104006 ˆPZadic ˆLISTMAXext 0EC006 ˆGCDHEUext 399 Description ( Q → Q ) Recursively tests if Q is a list of one constant element. This is much faster than TRIMOBJext and sufficient for the output of programs which are trimmed on the fly. ( 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. Chapter 51 Sign Tables A sign table is a list which describes thes sign of a expression in different intervals of a parameter. The list has an odd number of elements and looks like this: { value1 sign1.2 value2 sign2.3 ...signN-1.N valueN } The values are key values of the parameter, usually −∞, +∞, and the locations of singularities or zeros in the expression. The values must be ordered and can be numbers or symbolic expressions. The signs show the sign of the expression in the interval between the adjacent values. Signs are ’-’, ’+’, and ’?’ (if the sign is unknown). To compute the sign table of an expression with respect to the current variable, use the entry SIGNE1ext. For example, the sign table of the expression ‘X 2 − 1’ is { −∞ ’+’ -1 ’-’ 1 ’+’ +∞ } Below is a list of the entries related to sign tables. 51.1 Reference Addr. 237006 Name ˆSIGNE 0DC007 ˆSIGNE1ext 0DE007 ˆSIGNUNDEF 0DF007 ˆSIGNPLUS 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 undefined sign table. ( → sign ) Returns always positive sign table. 400 51.1. Reference Addr. 0E0007 Name ˆSIGNMOINS 0E1007 ˆSIGNELN 0E2007 ˆSIGNEEXP 0E3007 ˆSIGNESIN 0E4007 ˆSIGNECOS 0E5007 ˆSIGNETAN 0E6007 ˆSIGNEATAN 0E7007 ˆSIGNESQRT 0E8007 ˆSUBSIGNE 0E9007 ˆSIGNERIGHT 0EA007 ˆSIGNELEFT 0EB007 ˆ>SIGNE 0EC007 ˆSIGNE> 0ED007 ˆSIGNMULText 0DB007 ˆPOSITIFext 0EE007 ˆZSIGNECK 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 { -infinity ? } to a sign table. ( sign → sign' ) Appends { ? +infinity } 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 increaseflag so that x-1 is positive if increaseflag is cleared, negative otherwise, because x is assumed to tend to +infinity or zero. ( ob → ob flag ) Returns sign of an expression. Error if unable to find sign. 402 51. Sign Tables Addr. 0F0007 Name ˆZSIGNE 0F1007 ˆzsigne 07D007 ˆCHECKSING 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. 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 Reference Addr. 57E006 Name ˆERABLEERROR 57D006 ˆGETERABLEMSG 090006 ˆErrInfRes 091006 ˆErrUndefRes 092006 ˆErrBadDim 57F006 ˆCANTFACTOR 580006 ˆTRANSCERROR 581006 ˆNONUNARYERR 582006 ˆINTERNALERR Description ( # → ) Calls CAS Error. ( # → $ ) Get string in erable messages table. Error 305h Generates "Infinite Result" error. Error 304h Generates "Undefined Result" error. Error 501h Generates "Invalid Dimension" error. Error DE1Ch Generates "Unable to find 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 404 52. Errors Addr. 583006 Name ˆINVALIDOP 584006 ˆISOLERR 585006 ˆNONINTERR 586006 ˆINTVARERR 587006 ˆZ>#ERR 0EF007 ˆSIGNEERROR 588006 ˆZ<0ERR 589006 ˆVXINDEPERR 58A006 ˆNONPOLYSYST 58B006 ˆCOMPLEXERR 58C006 ˆVALMUSTBE0 58D006 ˆSWITCHNOTALLOWED 119007 ˆNONALGERR 58E006 58F006 ˆERR$EVALext ˆSys1IT 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 find 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 flag is set. Chapter 53 CAS Configuration The entries in this chapter provide ways to configure the CAS operations. The configurations that can be done here are the same that can be done by the user via flags or the MODES input form. 53.1 Reference Addr. 08F007 Name ˆCFGDISPLAY 090007 ˆNEWVX 091007 ˆNEWMODULO 092007 ˆSWITCHON 093007 ˆSWITCHOFF 094007 ˆFLAGNAME 1DC007 (ˆPUSHFLAGS) Description ( → ) Display current configuration 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 flag #flag. Errors if the user does not want to switch. ( #flag → ) Asks the user is a certain mode may be switched off by toggling system flag #flag. Error if the user does not want to switch. ( # → # $ ) Find the name of a flag. ( → ) Internal version of User PUSH command: stores the current flag settings and path in the CASDIR/ENVSTK variable. 405 406 53. CAS Configuration Addr. 1DD007 Name (ˆPOPFLAGS) 095007 ˆCOMPLEXON 096007 ˆCOMPLEXOFF 097007 ˆEXACTON 098007 ˆEXACTOFF 099007 ˆCOMPLEXMODE 09A007 ˆSETCOMPLEX 09B007 ˆCOMPLEX? 09C007 ˆREALMODE 09D007 ˆCLRCOMPLEX 09E007 ˆEXACTMODE 09F007 ˆSETEXACT 0A0007 ˆNUMMODE 0A1007 ˆCLREXACT 0A2007 ˆEXACT? Description ( → ) Internal version of User POP command: pops the last pushed flag settings and path from the CASDIR/ENVSTK variable. ( → ) Turns complex mode on. Depending on system flag 120, the user is asked first. ( → ) Turns complex mode off. Depending on system flag 120, the user is asked first. ( → ) Turns exact mode on. Depending on system flag 120, the user is asked first. ( → ) Turns exact mode off. Depending on system flag 120, the user is asked first. ( → ) Set complex mode, refresh configuration display. ( → ) Set complex mode. ( → flag ) Test complex mode. ( → ) Set real mode, refresh configuration display. ( → ) Set real mode. ( → ) Set exact mode, refresh configuration display. ( → ) Set exact mode and gcd mode. ( → ) Set numeric mode, refresh configuration display. ( → ) Clear exact mode. ( → flag ) Test exact mode. 53.1. Reference Addr. 0A3007 Name ˆSTEPBYSTEP 0A4007 ˆNOSTEPBYSTEP 0A5007 ˆVERBOSEMODE 0A6007 ˆSILENTMODE 0A7007 ˆRECURMODE 0A8007 ˆNONRECMODE 0A9007 ˆPLUSAT0 0AA007 ˆSETPLUSAT0 0AB007 ˆPLUSATINFTY 0AC007 ˆCLRPLUSAT0 0AD007 ˆSPARSEDATA 0AE007 ˆFULLDATA 0AF007 ˆRIGORMODE 0B0007 ˆSLOPPYMODE 407 Description ( → ) Set step by step flag, refresh display. ( → ) Clear step by step flag, refresh display. ( → ) Set verbose mode, refresh configuration display. ( → ) Set silent mode, refresh configuration display. ( → ) Set recursive mode, refresh configuration display. ( → ) Set nonrecursive mode, refresh configuration display. ( → ) Set positive mode, refresh configuration display. ( → ) Set positive mode. ( → ) Set positive infinity mode, refresh configuration display. ( → ) Set positive infinity mode. ( → ) Set full data mode, refresh configuration display. ( → ) Set sparse mode, refresh configuration display. ( → ) Set rigorous mode, refresh configuration display. ( → ) Set sloppy mode, refresh configuration display. 408 53. CAS Configuration Addr. 0B1007 Name ˆSLOPPY? 1D2006 ˆSAVECASFLAGS 1D4006 ˆRESTORECASFLAGS 1D5006 ˆCASFLAGEVAL 0C2007 ˆRCLMODULO 0C3007 ˆRCLPERIOD 0C4007 ˆRCLVX 0C5007 ˆSTOVX 0C6007 ˆSTOMODULO 0C7007 ˆRCLEPS 0C8007 ˆISIDREAL? 0C9007 ˆADDTOREAL 0CA007 ˆRESETCASCFG 1D0006 ˆVERNUMext Description ( → flag ) Test sloppy mode. ( → ) Saves CAS flags and current var. ( → ) Restore CAS flags and current var. ( → ) Execute next runstream object with flag 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 config. ( → %version ) CAS version number. Chapter 54 CAS Menus The entries in this chapter return the built-in menus of CAS commands, or do some other actions related to menus. For general information on menus, turn to Chapter 37. 54.1 Reference Addr. 1D1006 Name ˆMENUXYext 08D007 ˆMENUext 0B2007 ˆMENUCHOOSE? 0B3007 ˆMENUCHOOSE 0B4007 ˆMENUGENE1 0B5007 ˆMENUBASE1 0B6007 ˆMENUCMPLX1 0B7007 ˆMENUTRIG1 0B8007 ˆMENUMAT1 Description ( #2 #1 → {} ) Make list of Erable commands between the given numbers. ( $6...$1 → ) If the CAS quiet flag 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 410 54. CAS Menus Addr. 0B9007 Name ˆMENUARIT1 0BA007 ˆMENUSOLVE1 0BB007 ˆMENUEXPLN1 0BC007 ˆMENUDIFF1 Description ( → {} ) Arithmetic operations menu. ( → {} ) Solver menu. ( → {} ) Exponential and logarithmic operations menu. ( → ) Differential calculus menu. Chapter 55 Internal Versions of User RPL Commands The entries in this chapter are the closest correspondents to User RPL commands. 55.1 Reference Addr. 218006 Name ˆISPRIME 1D6006 ˆFLAGEXPAND 1D8006 ˆFLAGFACTOR 1D9006 ˆFLAGLISTEXEC 1DA006 ˆFLAGSYMBEXEC 1DB006 ˆFLAGIDNTEXEC 1DC006 ˆFLAGINTVX 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. 411 412 55. Internal Versions of User RPL Commands Addr. 1DD006 Name ˆDERVX 1DE006 ˆSOLVEXFLOAT 1DF006 ˆSYMLIMIT 1E0006 ˆFLAGMATRIXLIMIT 1E1006 ˆTAYLOR0 1E2006 ˆFLAGSERIES 1E4006 ˆPLOTADD 1E5006 ˆFLAGIBP 1E6006 ˆFLAGPREVAL 1E7006 ˆMATRIXRISCH 1E8006 ˆFLAGRISCH 1E9006 ˆFLAGDERIV 1EA006 ˆFLAGLAP 1EB006 ˆFLAGILAP 1EC006 ˆFLAGDESOLVE 1ED006 ˆFLAGLDSSOLV 1EF006 ˆFLAGTEXPAND 1F0006 ˆFLAGLIN Description ( symb → symb' ) Internal xDERVX. ( % → {} ) Internal xSOLVEVX for a float. ( 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 Name ˆFLAGTSIMP 1F2006 ˆFLAGLNCOLLECT 1F3006 ˆFLAGEXPLN 1F4006 ˆFLAGSINCOS 1F5006 ˆFLAGTLIN 1F6006 ˆFLAGTCOLLECT 1F7006 ˆFLAGTRIG 1F8006 ˆFLAGTRIGCOS 1F9006 ˆFLAGTRIGSIN 1FA006 ˆFLAGTRIGTAN 1FB006 ˆFLAGTAN2SC 1FC006 ˆFLAGHALFTAN 1FD006 ˆFLAGTAN2SC2 1FE006 ˆFLAGATAN2S 1FF006 ˆFLAGASIN2T 200006 ˆFLAGASIN2C 201006 ˆFLAGACOS2S 206006 ˆSTEPIDIV2 207006 ˆFLAGDIV2 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. 414 55. Internal Versions of User RPL Commands Addr. 208006 Name ˆFLAGGCD 209006 ˆPEGCD 20B006 ˆABCUV 20C006 ˆIABCUV 20D006 ˆFLAGLGCD 20E006 ˆFLAGLCM 20F006 ˆFLAGSIMP2 210006 ˆFLAGPARTFRAC 211006 ˆFLAGPROPFRAC 212006 ˆFLAGPTAYL 213006 ˆFLAGHORNER 214006 ˆEULER 216006 ˆFLAGCHINREM 217006 ˆICHINREM 219006 ˆSOLVE1EQ 21A006 ˆSOLVEMANYEQ 21B006 ˆZEROS1EQ 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. 55.1. Reference Addr. 21C006 Name ˆZEROSMANYEQ 21D006 ˆFCOEF 21E006 ˆFROOTS 21F006 ˆFACTORS 220006 ˆDIVIS 223006 ˆrref 229006 ˆMADNOCK 22A006 ˆSYSTEM 22B006 ˆVANDERMONDE 22C006 ˆHILBERTNOCK 22E006 ˆCURL 22F006 ˆDIVERGENCE 230006 ˆLAPLACIAN 231006 ˆHESSIAN 232006 ˆHERMITE 233006 ˆTCHEBNOCK 234006 ˆLEGENDRE 235006 ˆLAGRANGE 236006 ˆFOURIER 415 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. 416 55. Internal Versions of User RPL Commands Addr. 238006 Name ˆTABVAR 239006 ˆFLAGDIVPC 23A006 ˆFLAGTRUNC 23B006 ˆFLAGSEVAL 23C006 ˆXNUM 23D006 ˆREORDER 23E006 ˆUSERLVAR 23F006 ˆUSERLIDNT 241006 ˆADDTMOD 242006 ˆMADDTMOD 243006 ˆSUBTMOD 244006 ˆMSUBTMOD 245006 ˆMULTMOD 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 fit in any of the previous chapters. 56.1 Reference 56.1.1 Verbose Mode Display Routines Addr. 579006 Name ˆVerbose1 57A006 ˆVerbose2 57B006 ˆVerbose3 57C006 ˆVerboseN 56.1.2 Addr. 257006 258006 259006 25A006 25B006 25C006 25D006 25E006 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. Evaluation Name ˆEvalNoCKx* ˆEvalNoCKx+ ˆEvalNoCKxˆEvalNoCKx/ ˆEvalNoCKxˆ ˆEvalNoCKxCHS ˆEvalNoCKxINV ˆEvalNoCKxMOD Description ( ob ob' → ( ob ob' → ( ob ob' → ( ob ob' → ( ob ob' → ( ob → ob' ( ob → ob' ( ob ob' → 417 ob'' ob'' ob'' ob'' ob'' ) ) ob'' ) ) ) ) ) ) 418 Addr. 25F006 260006 261006 262006 263006 264006 265006 56.1.3 56. Miscellaneous Name ˆEvalNoCKxPERM ˆEvalNoCKxCOMB ˆEvalNoCKxOR ˆEvalNoCKxAND ˆEvalNoCKxXOR ˆEvalNoCKxXROOT ˆTABVALext Conversion Addr. 266006 Name ˆTOLISText 267006 ˆFROMLISText 56.1.4 Description ( ob ob' → ob'' ) ( ob ob' → ob'' ) ( ob ob' → ob'' ) ( ob ob' → ob'' ) ( ob ob' → ob'' ) ( ob ob' → ob'' ) ( fnct x {} → {}' ) Table of values. 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 } } }. Qpi Addr. 074007 Name ˆQPI 073007 ˆQpiZ Description ( ob → ob' ) Internal xXQ. ( ob → symb ) Calls ˆQpi% and converts the resulting (real) integers into zints. 56.1. Reference Addr. 075007 Name ˆQpiSym 076007 ˆQpiArry 077007 ˆQpiList 078007 ˆQpi 079007 ˆQpi% 07A007 ˆGetRoot 07B007 ˆApprox 56.1.5 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 find a square number which is a factor of the argument. The algorithm only tries numbers smaller than 1024ˆ2-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. Infinity Addr. 2E2006 2E3006 2E4006 2E5006 Name ˆINFINIext ˆMINUSINFext ˆPLUSINFext ˆ?ext 2E6006 ˆPOSINFext 2E1006 ˆTESTINFINI Description ( → '∞' ) ( → '-∞' ) ( → '+∞' ) '?' Pushed the undefined symbolic. ( symb → symb # ) Returns #1 if the symbolic contains '∞'. ( ob → ob flag ) Test if object contains infinity. 420 Addr. 2E7006 56.1.6 Addr. 2EA006 2EB006 2F1006 2E8006 2F2006 2E9006 2F4006 2F3006 2F5006 2F6006 2EC006 2F9006 2FA006 2EE006 2ED006 2EF006 2F0006 2F8006 2F7006 56.1.7 56. Miscellaneous Name ˆPOSUNDEFext Description ( symb → symb # ) Returns #1 if the symbolic contains the undefined symbolic '?'. 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*π' ) List Application Addr. 3F0006 Name ˆDIVOBJext 3F2006 ˆLOPDext 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. 56.1. Reference Addr. 269006 Name ˆLOP1ext 26A006 ˆLOPAext 10F006 ˆLOPMext 45F006 ˆLISTEXEC 460006 461006 ˆLISTEXEC1 ˆSECOEXEC 268006 26B006 ˆPFEXECext ˆLISTSECOext 26D006 ˆCK1TONOext 56.1.8 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 first case or { 'X=1' 'X=2' } in the second case. In the first 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. Irrquads Addr. 167006 Name ˆTYPEIRRQ? 168006 ˆDTYPEIRRQ? 165006 ˆ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. 422 56. Miscellaneous Addr. 166006 2D8006 ˆIRRQ#ULTIMATE 508006 ˆQCONJext 509006 ˆQABSext 51A006 ˆQNORMext 4D4006 ˆSECOSQFFext 124006 ˆPREPARext 2DA006 ˆLISTIRRQ 56.1.9 Name ˆNDXQext 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 → aˆ2-b*cˆ2 ) 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. Miscellaneous Addr. 3E7006 3FB006 Name ˆPSEUDOPREP ˆHSECO2RCext 3FC006 ˆSECO2CMPext 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. polarflag should be disabled if not at the top level of rational expressions. 56.1. Reference Addr. 3FF006 Name ˆVALOBJext 401006 ˆVAL2ext 402006 ˆINVAL2 403006 ˆMETAVAL2 404006 ˆVAL1 405006 ˆVAL1M 45C006 ˆIDNTEXEC 121006 ˆMP0 26C006 ˆrpnQOBJext 423 Description ( # {..{Q}..} {var1..varn} → {..{ob}..} ) Back conversion of objects embedded at depth # in lists. Simplifies 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 positivfflag 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 modified. ( ob → ob ) LAM2 must contain Lvar, LAM1 is modified. ( ob → Meta_symb ) LAM2 must contain Lvar, LAM1 is modified. ( symb idnt → symb' ) Tries to find 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 infinityˆ0/undefˆ0 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 defined and 'd1Y' is defined as << >> or { #2 #1 } 'Y' if d2d1Y d1Y and Y are not defined. 424 56. Miscellaneous Addr. 29D006 Name ˆSIMPIDNT 29F006 ˆRCL1IDNT 2A7006 ˆSWPSIMPNDXF 2A8006 ˆSIMPNDXFext 2B6006 2BD006 2BE006 ˆCMODext ˆSQFF2ext ˆPPZ 117007 ˆPPZZ 2BF006 2C0006 2C1006 ˆPZHSTR ˆHORNER1ext ˆPEval 2C6006 ˆSQRT_IN? 2C7006 2C9006 2CA006 ˆIS_SQRT? ˆIS_XROOT? ˆSTOPRIMIT 2CB006 2D4006 ˆCONTAINS_LN? ˆFOURIERext Description ( idnt → ob ) Evaluates idnt (looks recursively for its content if defined). Does not error for circular definition, but displays a warning. ( idnt/lam → ob ) Recursive content of an idnt. LAM1 to LAM3 must be bound. ( ob2 ob1 → ob1/ob2 ) Simplified fraction (internal). ( ob2 ob1 → ob2/ob1 ) Simplified 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 coefficients 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 coefficient of a 2 π periodic function. 56.1. Reference Addr. 2D9006 Name ˆLESSCOMPLEX? 2DD006 ˆTABLECOSext 2DE006 ˆTABLETANext 101007 ˆLINEARAPPLY 106007 ˆA/B2PQR 107007 ˆGOSPER? 0CB007 ˆFRACPARITY 0D5007 ˆFR2ND% 4D1006 ˆMSECOSQFF 425 Description ( ob1 ob2 → ob1 ob2 flag ) Compares objects by type and then by CRC. flag is true if ob1 is less complex than ob2 (ob1>ob2). If ob1 or ob2 is an irrq, find first 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. Part V Appendices Appendix A Development Tools You have basically two choices for developing software for the HP49G. The programs can either be written and tested on a PC, using special tools and an emulator, or you can write software directly on the HP49G. This chapter will describe tools for the HP49G calculator that make it a suitable programming environment for System RPL development. The HP49G calculator includes a built-in compiler, disassembler and some sort of debugger (which, to say the truth, could be improved), plus some other little tools that can be of use to the System RPL programmer. However, for big programming tasks this is not enough: some other tools are necessary to make programming easier. Because of this, some third-party tools will also be described. With a good knowledge of the built-in and third-party tools, the HP49G can be used as a complete and compact programming environment. All the programs described here can be freely downloaded from The HP Software Archive, http://www.hpcalc.org. The built-in programming tools you will need are, by default, not accesible to the user. They are in two libraries, which are not attached by default. Library 256 contains several useful commands for “hacking” with the calculator, and also the disassembler. Library 257 contains MASD, the compiler. You should have these libraries always attached. If you have extable installed (and you should — see section A.1), then library 256 will be automatically attached. Library 257 (MASD) does not really need to be attached, because it is possible to call MASD from library 256. Nevertheless, it is still good to have it attached. The STARTUP variable is useful to configure the calculator. This variable (which must be in the HOME directory) contains an object to be executed after each warmstart. It can be used to set all parameters lost by a warmstart that you want to keep, or to do anything else you want. The following program will set user mode (which is lost in a warmstart); for efficient programming (and even for efficient use) it is essencial to make some key assignments. The program also attaches library 257. « -62 SF 257 ATTACH » 429 430 A.1 A. Development Tools The Entry Points Library 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 five user-accessible commands. The first 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 first 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 About Key Assignments 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: [email protected]). The latest version is 9.2001. This library simplifies 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 find several commands inside this library. The A?D command A.2. About Key Assignments 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 (briefly) 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 first 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 flag that is very useful to System RPL programmers: flag –85. When this flag 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, first 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 flag –85 (this task if left to the reader — but read the description of OT49 in section A.3.1 first). Finally, press IfE?P briefly and use →TO? on the resulting program (because it must A.3. Hacking Tools 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 H→ →A A→ S→H H→S →LST →ALG →PRG COMP→ 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 five-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 specified 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 sufficiently 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. 434 Command →RAM SREV POKE PEEK APEEK R˜SB SB˜B LR˜R S˜N LC˜C ASM→ CRLIB CRC MAKESTR SERIAL ASM ER →S2 XLIB˜ 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 five nibbles, returning them as a hxs. “Real ↔ system binary”: Converts reals to bints and viceversa. “System binary ↔ binary”: Converts bints to hxs’s, and viceversa. “Long real ↔ real”: Converts long reals to reals and vice-versa. “String ↔ name”: Converts strings to identifiers (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. A.4. The Compiler A.3.1 435 Operating Tools for the HP49 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 D↔L. The DType command displays the type of the object in level one. If that object is a rompointer (XLIB) or flashpointer, 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 flag toggler. Just give the number of the system or user flag, run it, and the flag 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 difficulties 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 first 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 files must be identified 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 file and a Uer RPL program or command line. The other thing to note concerns the current MASD mode. There are two modes, selected by flag –92: Assembly Language mode (flag –92 cleared) and System RPL mode (flag –92 set). Probably, you will set flag –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 flag settings. Here is a simple program source ready for MASD: 1 5 10 !NO CODE !RPL :: DUPTYPEZINT? case FPTR2 ^Z>R DUPTYPEREAL? ?SEMI SETTYPEERR ; @ A.4. The Compiler 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 MASD and the Different Kinds of Entries A System RPL program can call three different kinds of entries: normal entries, which point to some address in ROM, flashpointer entries, which point to a command in one of the HP49’s flash 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 flashpointer entries (whose names always start with ˆ), you have to prefix the entry’s name with FPTR2. So, to call the flashpointer command ˆZ>R, you will have to include this in your program: FPTR2 ˆZ>R An unsupported flashpointer 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 first three digits. Calling rompointer entries (which have names starting with ˜) is very similar to calling flashpointers. If it is supported, just prefix 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 first three. A.4.2 MASD’s Special Features 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 first feature eases the use of unsupported entries. You can define a name for a unsupported entry, making it behave as if an entry in extable. (This only works for normal entries, not flashpointer 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 defines the entry 2NELCOMPDROP, which returns the second element of a composite: EQU 2NELCOMPDROP 2825E With that definition, 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 flashpointers), 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 definition, whenever name is found in the source file, it will be replaced by value. So, if you are going to use the browser (see Chapter 33), it might be convenient to define this: DEFINE ˆChoose3 FTPR 2 72 so that you can simply insert ˆChoose3 when you want to call the browser. A.4.2.1 Unnamed Local Variable Binding 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 first 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 file. A.5. Disassembly A.4.2.2 439 Including Source Files Using the INCLUDE pseudo-command, you can include other source files 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 file. The included file should also end with an “@”. One use of this feature is to include a file with definitions of several constants or unsupported addresses. A.5 Disassembly As it was briefly 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 HP’s ROM is built. The JAZZ library for the HP48 calculators made that easy. Unfortunately, it is difficult 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 ([email protected]) and presently at version 4.0 is a tool to disassemble the HP49G’s 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 flash 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 Nosy’s 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 first 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 Qu’Ils Font?) library, written by Pierre Tardy (e-mail: [email protected]), currently at version 1.7.7F, the task of disassembling built-in commands is also simplified. 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 HP’s 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 flashpointers. 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. A.6. The Editor, and Emacs A.6 441 The Editor, and Emacs 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: [email protected]) and Peter Geelhoed (email: [email protected]). 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 first 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 file 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 first 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 file). 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 A.6. The Editor, and Emacs 443 the string you want to find. 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 find 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 configuration. A choose box appears with several actions. Selecting Options will show a dialog, which allow you to configure 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 JAZZ’s 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 A.8. JAZZ for the HP49 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 first 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 sufficient to find 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 JAZZ for the HP49 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 Lidström (e-mail: [email protected]). 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 flashpointers and therefore cannot assemble or disassemble programs containing flashpointers. 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 flashpointer support means that you cannot singlestep the contents of flashpointers. Also the display of current and next commands in the status line is affected by this: when the program is near a flashpointer, “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 sacrifice 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. Appendix B Creating Libraries Libraries are collections of commands that the user can access as if they were built-in in the system. If you have written a complex program with several sub-routines, it is much more convenient to distribute it as a library instead of as a directory. As a library, the user will not need to navigate through the variables to access your program; he can just type the command name from anywhere. Library commands appear in the catalog, and they can have on-line help. There is a menu showing all installed libraries, and a library can add itself or selected commands to some of the menus, such as the APPS menu. Moreover, you can make only some of the commands in the library accessible to the user. This way, you can prevent the user from running commands that they should not, and you only need to provide error-checking for the useraccessible commands. That should have been enough to convince you to distribute your programs as libraries. But you might be wondering, “But how do I create a library?” Easy: the CRLIB command in library 256 (see section A.3) will do that for you. You just need to create a few special variables in a directory, which specify some aspects of the library, and then run that command. You will then get a library from the contents of the directory, which can be distributed. Instead of CRLIB, you can use the D↔L command from the OT49 library (see section A.3.1). This command eases the entry of some of the variables below, and provides an easy way to add help to library commands. However, it does not add anything really new to the library creation process. B.1 The Special Variables In the directory that will be converted to a library, some variables, all having names starting with $, have special meanings that configure the created library. The table below lists the variables and their meanings. 447 448 Variable $ROMID $TITLE $VISIBLE $HIDDEN $CONFIG $MESSAGE $EXTPRG B. Creating Libraries Meaning This specifies 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 first five 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 configuration object. This object will be evaluated at each warmstart. Normally, these configuration 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 configuration 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 identified 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. 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. B.2. The Library Message Handler B.2 449 The Library Message Handler 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 specific 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 Confidence Interval submenu in STAT menu Finance menu Numeric Solver menu Time menu Games (inside APPS) Editor SEARCH menu (when flag -117 is clr) Editor TOOLS menu (when flag -117 is clr) Menu Type list list list list list list list meta list list 450 #msg 13 14 15 16 B. Creating Libraries Menu Editor GOTO (when flag -117 is clr) Editor SEARCH menu (when flag -117 is set) Editor TOOLS menu (when flag -117 is set) Editor GOTO (when flag -117 is set) Menu Type list meta meta meta 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 5 10 15 :: 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 ; ; B.2.2 (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) Online Help for Libary Commands 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 B.2. The Library Message Handler 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 5 10 15 20 :: 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 ; ; (all cmds have help) (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) 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.2.3 B. Creating Libraries The Library Menu Message 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 5 :: # 60F OVER#=case :: ZEROZERO "(c) 2001 Some Author" $>grob XYGROBDISP SetDA1Temp ; ; Appendix C User RPL Commands The listing here is of all the user-accessible commands and functions, with their addresses. In most cases, the User RPL name of a command is equal to the System RPL name with leading ˜ and x stripped. The few exceptions are marked in the table. C.1 Reference Addr. 030314 39A07 390E4 390C9 025314 3A8D8 3A7DC 06E314 0000DE 3AAE5 04B0AB 3CA07 3F033 3D7AC Name ˜xABCUV xABS xACK xACKALL ˜xACOS2S xACOSH xACOS ˜xADDTMOD xADDTOREAL xALOG xAMORT xAND xANS xAPPLY 3EAC7 xARCHIVE 3C8C6 xARC 3A390 085314 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 454 C. User RPL Commands Addr. 3BEC5 Name xARRY> 3BE9B x>ARRY 024314 023314 3A88E 3A756 3EEE7 ˜xASIN2C ˜xASIN2T xASINH xASIN xASN 38DE1 022314 3A94F 3A844 3EB64 3C49F 3C3B2 xASR ˜xATAN2S xATANH xATAN xATTACH xAUTO xAXES 04A314 ˜xAXL 049314 04C314 3C9D3 3E196 080314 ˜xAXM ˜xAXQ xBAR xBARPLOT ˜xBASE 3EDCC 39765 3E2C1 3B655 3E171 3C70A 3C6E0 xBAUD xBEEP xBESTFIT xBIN xBINS xBLANK xBOX 38F21 xB>R 3EE47 xBUFLEN 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: B→R ( → nchars 0/1 ) C.1. Reference Addr. 39480 01E0DE 07E314 0330DE 38B28 3AD1B 3C3DC Name xBYTES xC2P ˜xCASCFG xCASCMD xCASE xCEIL xCENTR 3B4E9 03A314 04D0AB xCF ˜xCHINREM xCHOOSE 3BC19 3B362 01D0DE 3EDAC 3DD4E 3DD8E xCHR x%CH xCIRC xCKSM xCLEAR xCLSIGMA 39144 39839 3EC95 3E91A xCLKADJ xCLLCD xCLOSEIO xCLUSR 081314 3B193 3E5A0 0300DE 3E0FD ˜xCMPLX xCNRM xCOLCT xCOLLECT xSIGMACOL 0380AB x→COL 03E0AB xCOL- 0390AB xCOL→ 03F0AB xCOL+ 455 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 → []' ) 456 C. User RPL Commands Addr. 3B423 Name xCOMB 0260AB 3C967 39A6C 0180AB 3BF77 xCOND xCONIC xCONJ xCONLIB xCON 0190AB 3989C 38F41 3DE24 3A6C2 3A5D0 3DE3F 3C58E xCONST xCONT xCONVERT xCORR xCOSH xCOS xCOV xC>PX 393CA 3D128 3B208 3BAF5 xCRDIR xCR xCROSS xC>R 057314 0120AB 0610AB 39104 39078 39238 0690AB 0150DD ˜xCURL xCYLIN xDARCY xSETDATE xDATE xDATE+ xdB xDBUG 39218 3B670 3E576 3E85C xDDAYS xDEC xDECR xDEFINE 3B549 xDEG 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: C→PX ( name → ) ( → ) ( [1] [2] → [3] ) ( (x,y) → x y ) UserRPL: C→R ( [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...) → ) ( → ) C.1. Reference Addr. 391D8 3D1C7 3EF3B Name xDELALARM xDELAY xDELKEYS 3C51F xDEPND 3DCA7 00E314 003314 00F314 3B1BA 3EB84 xDEPTH ˜xDERIV ˜xDERVX ˜xDESOLVE xDET xDETACH 3D202 03A0AB 03B0AB 084314 00E0AB 39725 0160DD x∂ x→DIAG xDIAG→ ˜xDIFF xDIFFEQ xDISP xDISPXY 056314 026314 072314 044314 071314 062314 3816B 39527 ˜xDIV ˜xDIV2 ˜xDIV2MOD ˜xDIVIS ˜xDIVMOD ˜xDIVPC xDO xDOERR 05B0AB xDOLIST 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) ) 458 C. User RPL Commands Addr. 0540AB Name xDOSUBS 3B1E1 3C484 06B0AB 3C4BA 3DC56 3DCC7 3DC3B 3B06E xDOT xDRAW xDRAW3DMATRIX xDRAX xDROP2 xDROPN xDROP xD>R 3EFEF 3DC05 3F29A 3DCE2 3DBEA 0090DD 0070DD 39B1E xDTAG xDUP2 xDUPDUP xDUPN xDUP xEDITB xEDIT xCONSTANTe 02E314 02C0AB 02D0AB 3805D 38A54 ˜xEGCD xEGV xEGVL xELSE xENDDO 0570AB xENDSUB 3B5DA 088314 3BDE6 xENG ˜xEPSX0 xEQ> 00B0DD 3C553 3955B 39591 39576 038314 395AC xEQW xERASE xERR0 xERRM xERRN ˜xEULER xEVAL Description ( {} n prog → {}' ) ( {} prog → {}' (n=1) ) ( [1] [2] → x ) ( → ) ( [[]] v_min v_max → ) ( → ) ( ob1 ob2 → ) ( ob1...obn n → ) ( ob → ) ( x → (π/180)x ) UserRPL: D→R ( 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 Name ˜xEXLR ˜xEXPANDMOD ˜xEXPAND 3E5E9 3E25E 017314 3AB6F 3A9B7 0050AB 0620AB 001314 xEXPAN xEXPFIT ˜xEXPLN xEXPM xEXP xEYEPT xF0λ ˜xFACTOR 077314 043314 ˜xFACTORMOD ˜xFACTORS 0600AB 3F2DF 3B635 3B529 041314 01A0AB 00C0DD 391AE xFANNING xFAST3D xFC?C xFC? ˜xFCOEF xFFT xFILER xFINDALARM 3ED76 3B59A 0170AB 3ACD1 00F0DD 00E0DD 00D0DD 0030DD 0020DD 38252 xFINISH xFIX xFLASHEVAL xFLOOR xFONT6 xFONT7 xFONT8 xFONT→ x→FONT xSTARTVAR 05E314 3AC87 ˜xFOURIER xFP 459 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' ) 460 C. User RPL Commands Addr. 39745 042314 3B615 3B509 3C955 3D56B 06B314 0070DE 04D314 Name xFREEZE ˜xFROOTS xFS?C xFS? xFUNCTION x| ˜xFXND xGAMMA ˜xGAUSS 075314 02C314 0550AB 3C22D ˜xGCDMOD ˜xGCD xΔLIST xGETI 3C1C7 xGET 3C74A xGOR 3B57F 3C5AE xGRAD xGRAPH 00A0AB 07C314 3C8A1 xGRIDMAP ˜xGROBADD x>GROB 3D503 xSUM 3DDEE xSIGMA- 3DDC4 xSIGMA+ 3E156 xSIGMALINE 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 C.1. Reference Addr. 0590AB 3DE90 Name xΣLIST xSUMX2 3DE5A xSUMX 3DEC6 xSUMXY 3DEAB xSUMY2 3DE75 xSUMY 3C7D8 xGXOR 046314 020314 3880D 0040DD 0050DD 05C314 059314 3B68B 054314 3C9C1 3E1CA 3B14C 3B12C 3B0EC ˜xHADAMARD ˜xHALFTAN xHALT x→HEADER xHEADER→ ˜xHERMITE ˜xHESS xHEX ˜xHILBERT xHISTOGRAM xHISTPLOT xHMSxHMS+ x>HMS 3B10C xHMS> 39405 037314 031314 0060DE 00B314 03B314 027314 xHOME ˜xHORNER ˜xIABCUV xIBERNOULLI ˜xIBP ˜xICHINREM ˜xIDIV2 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 ) 462 C. User RPL Commands Addr. 3C02E Name xIDN 02F314 37F48 387AC 01B0AB 396A4 395F3 39B3B 011314 3B87E ˜xIEGCD xIF xIFERR xIFFT xIFT xIFTE xi ˜xILAP xIM 3E54C 3C33E xINCR xINDEP 08A314 ˜x∞ 04C0AB xINFORM 3EEBD xINPUT 3D434 3F007 004314 074314 3A32B x xINT ˜xINTVX ˜xINVMOD xINV 3AC3D 029314 02B314 3F0B7 xIP ˜xIQUOT ˜xIREMAINDER xI>R 3E648 03C314 xISOL ˜xISPRIME? 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 → ) ( → '+∞' ) Infinity ( $ {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: I→R ( symb var → symb' ) ( n → 1 ) ( n → 0 ) C.1. Reference Addr. 050314 3EE2C 07B314 39854 Name ˜xJORDAN xKERRM ˜xKEYEVAL xKEY 06C0AB 06D0AB 3ECE4 x→KEYTIME xKEYTIME→ xKGET 394F1 3C5C9 05D314 0000DD 0010DD 058314 010314 397E5 xKILL xLABEL ˜xLAGRANGE x→LANGUAGE xLANGUAGE→ ˜xLAPL ˜xLAP xLAST 3C881 x>LCD 3C866 xLCD> 02D314 055314 012314 05A314 032314 0160AB 3EB42 005314 3C68C ˜xLCM ˜xLCXM ˜xLDEC ˜xLEGENDRE ˜xLGCD xLIBEVAL xLIBS ˜xLIMIT xLINE 3E214 0150AB 052314 014314 xLINFIT xLININ ˜xLINSOLVE ˜xLIN 463 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' ) 464 C. User RPL Commands Addr. 3BAC1 Name xLIST> 3B7D2 x>LIST 06D314 016314 3AB2F 3AA01 3E239 3AA73 0320AB 3DF83 02B0AB ˜xLNAME ˜xLNCOLLECT xLNP1 xLN xLOGFIT xLOG xLQ xLR xLSQ 0300AB 06A314 051314 3B02E 066314 3DAD0 xLU ˜xLVAR ˜xMAD xMANT ˜xMAP xMATCHUP 3DEE1 xMAXSIGMA 39AE4 3ADA5 0760AB xMAXR xMAX xMCALC 3DEFC xMEAN 3E8C1 3E9D4 07A314 3DF17 xMEM xMENU ˜xMENUXY xMINSIGMA 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Σ C.1. Reference Addr. 0110DD 0120DD 0730AB 39B01 3AE2B 0740AB 079314 3AFCB 0770AB Name x→MINIFONT xMINIFONT→ xMINIT xMINR xMIN xMITM ˜xMODSTO xMOD xMROOT 04E0AB 0720AB 070314 0750AB xMSGBOX xMSOLVR ˜xMULTMOD xMUSER 0060DD 01C0AB 3F2B5 39976 394AA 3831C 03D314 3DE09 x→NDISP xNDIST xNDUPN xNEG xNEWOB xNEXT ˜xNEXTPRIME xNSIGMA 3F264 3CB13 3F0FC 0560AB 3BBF9 39785 xNIP xNOT xNOVAL xNSUB xNUM x>NUM 0060AB 0070AB 3885C xNUMX xNUMY xRPN-> 3BE38 xOBJ> 3B6A6 xOCT 465 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→ ( → ) 466 C. User RPL Commands Addr. 3950C 3EC75 3E8F0 3CA8D 3DC8C 039314 3C98B 3EDEC 0090AB 034314 393EA 04F314 0450AB 00D0AB 01F0AB 3C4F5 Name xOFF xOPENIO xORDER xOR xOVER ˜xPA2B2 xPARAMETRIC xPARITY xPARSURFACE ˜xPARTFRAC xPATH ˜xPCAR xPCOEF xPCONTOUR xPCOV xPDIM 3B477 0460AB 3EAA7 3F27F 3DCFD 3C72A 05A0AB 06A0AB 39AC7 xPERM xPEVAL xPGDIR xPICK3 xPICK xPICT xΠLIST xPINIT xPI 3C638 xPIXOFF 3C60E xPIXON 3C662 xPIX? 3EE9D 00A314 3C392 3C372 3C979 xPKT ˜xPLOTADD xPMAX xPMIN xPOLAR 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 Name xPOS 073314 3D0D7 3DFDD 3E01D 3DFFD 00C314 ˜xPOWMOD xPR1 xPREDV xPREDX xPREDY ˜xPREVAL 03E314 3D1E7 38BBF 08B314 0440AB 035314 3D10D 3D143 ˜xPREVPRIME xPRLCD xPROMPT ˜xPROMPTSTO xPROOT ˜xPROPFRAC xPRST xPRVAR 01D0AB xPSDEV 0040DE 0030DE 036314 3E87C xPSI xPsi ˜xPTAYL xPURGE 3C139 xPUTI 3C0BF xPUT 3EA49 3C5E4 xPVARS xPVIEW 3C56E xPX>C 467 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: PX→C 468 C. User RPL Commands Addr. 3DA3E Name x->Q 3DA63 x->QPI 0310AB 3E66F 3D6F6 028314 04B314 3B564 3B3E6 02A0AB 0350AB 3DBCA xQR xQUAD xQUOTE ˜xQUOT ˜xQXA xRAD xRAND xRANK xRANM xPREDIV 38F01 xR>B 3D393 3B7ED xRCEQ xR>C 3918E 3B715 03F0DE xRCLALARM xRCLF xRCLVX 3DDA9 xRCLSIGMA 3EF79 3EA2E 3E6F1 xRCLKEYS xRCLMENU xRCL 3B6FA 3B0AE xRCWS xR>D 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: R→B ( → EQ ) ( x y → (x,y) ) UserRPL: R→C ( 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: R→D C.1. Reference Addr. 3BEEC Name xRDM 3B401 3ED22 xRDZ xRECN 0110AB 3ED56 048314 3B819 xRECT xRECV ˜xREF xRE 02A314 0130DD 069314 38105 3B9D2 ˜xREMAINDER xRENAME ˜xREORDER xREPEAT xREPL 3C41A 3EAE7 0050DE 05D0AB 3F070 xRES xRESTORE xRESULTANT xREVLIST xR>I 00D314 0220AB 0210AB 0200AB ˜xRISCH xRKFERR xRKFSTEP xRKF 38E01 38E21 3AEB1 3B16C 3DD33 3DD18 06F0AB 3D3CE xRL xRLB xRND xRNRM xROLLD xROLL xROMUPLOAD xROOT 469 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: R→I ( 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 ) 470 C. User RPL Commands Addr. 3DC71 03C0AB Name xROT xROW- 03D0AB xROW+ 0360AB x→ROW 0370AB xROW→ 38E41 38E61 0340AB 047314 078314 0240AB 0230AB 0250AB 3B22F xRR xRRB xRREF ˜xrref ˜xRREFMOD xRRKSTEP xRRK xRSBERR xRSD 0400AB 3C9E5 3EE82 3C444 xRSWP xSAME xSBRK x*H 3C464 x*W 3C4D5 3E1EF 0330AB 3B5BA 3E127 xSCALE xSCATRPLOT xSCHUR xSCI xSCLSIGMA 3E385 07D314 3DF32 xSCONJ ˜xSCROLL xSDEV 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] ) C.1. Reference Addr. 3ECB0 Name xSEND 0530AB 007314 3ED91 064314 3B4C9 3E696 xSEQ ˜xSERIES xSERVER ˜xSEVAL xSF xSHOW 0630AB 0020DE 0010DE 05F314 3A3EE 033314 0220DE 018314 3A678 3E331 3A57C 3BB1F xSIDENS xSIGMA xSIGMAVX ˜xSIGNTAB xSIGN ˜xSIMP2 xSIMPLIFY ˜xSINCOS xSINH xSINV xSIN xSIZE 38E81 38EA1 00C0AB 3E35B 0290AB 03F314 086314 008314 05E0AB 0130AB 3A4EF 38EC1 0280AB 38EE1 3EC55 0100DD xSL xSLB xSLOPEFIELD xSNEG xSNRM ˜xSOLVE ˜xSOLVER ˜xSOLVEVX xSORT xSPHERE xSQ xSR xSRAD xSRB xSRECV xSREPL 471 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' ) 472 C. User RPL Commands Addr. 381AB 3B5FA 3851F Name xSTART xSTD xSTEP 3D3AE 3EE62 39164 xSTEQ xSTIME xSTOALARM 3B749 3DD6E xSTOF xSTOSIGMA 0400DE xSTOVX 3EF07 xSTOKEYS 3E739 xSTO 3E823 xSTO> 3E406 3E46C 3E4D2 3E3AF 3BBD9 xSTOxSTO/ xSTO* xSTO+ xSTR> 0580AB 3BBBE xSTREAM x>STR 3B6C1 3B8D7 xSTWS xSUB 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 first 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) C.1. Reference Addr. 002314 06F314 02E0AB 02F0AB 3DC20 04E314 39705 061314 Name ˜xSUBST ˜xSUBTMOD xSVD xSVL xSWAP ˜xSYLVESTER xSYSEVAL ˜xTABVAL 060314 3EFB1 ˜xTABVAR x->TAG 0520AB xTAIL 01C0DE 021314 01F314 3A70C 3A624 006314 3E6CA 05B314 01A314 0640AB 065314 013314 3C8FA 37F7F 39093 39124 xTAN2CS2 ˜xTAN2SC2 ˜xTAN2SC xTANH xTAN ˜xTAYLOR0 xTAYLR ˜xTCHEBYCHEFF ˜xTCOLLECT xTDELTA ˜xTEVAL ˜xTEXPAND xTEXT xTHEN xTICKS xSETTIME 3905D 0650AB 3C6B6 xTIME xTINC xTLINE 019314 3E97B ˜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 C. User RPL Commands Addr. 3DF4D Name xTOT 0270AB 045314 xTRACE ˜xTRAN 3EE0C 01C314 082314 01D314 01B314 01E314 3C084 xTRANSIO ˜xTRIGCOS ˜xTRIGO ˜xTRIGSIN ˜xTRIG ˜xTRIGTAN xTRN 3AF3E 063314 3C99D 015314 391F8 39456 xTRNC ˜xTRUNC xTRUTH ˜xTSIMP xTSTR xTVARS 0470AB 0480AB 0490AB 04A0AB 3B2DC 3BC39 38FD7 3900B 0140DD 38FB5 xTVM xTVMBEG xTVMEND xTVMROOT x%T xTYPE xUBASE xUFACT xUFL1→MINIF x>UNIT 3F249 3F22E 38195 39420 3E07D 3E0BD 3E09D 3E0DD xUNPICK xUNROT xUNTIL xUPDIR xUTPC xUTPF xUTPN xUTPT 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> 3C2D6 x>V2 3C30A x>V3 053314 3943B 3DF68 ˜xVANDERMONDE xVARS xVAR 08C314 00F0AB 00A0DD 0080DD 3DB04 ˜xVER xVERSION xVISITB xVISIT xMATCHDN 3BDB2 3A442 xVTYPE xSQRT 39819 xWAIT 380DB 0080AB 390AE 3ABAF xWHILE xWIREFRAME xWSLOG xFACT 3E03D 0700AB 3EC35 xXCOL xXGET xXMIT 067314 ˜xXNUM 475 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' ) 476 C. User RPL Commands Addr. 3CB7A Name xXOR 3AD65 xXPON 0710AB 068314 0500AB 3C915 3A278 06E0AB 04F0AB 0000AB 0030AB 39CFC 39F49 39DE8 3CF80 xXPUT ˜xXQ xXRECV xXRNG xXROOT xXSERV xXSEND xXVOL xXXRNG xx/ x* x<=? 3CD21 x#? 3D01F x>=? 39B58 3CE42 x+ x< 3CBF6 x== 3CEE1 x> 398B9 3B251 3E05D 3C935 00B0AB 0010AB x= x% xYCOL xYRNG xYSLICE xYVOL 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 → ) C.1. Reference Addr. 3A097 0040AB 040314 05F0AB 0020AB Name xˆ xYYRNG ˜xZEROS xZFACTOR xZVOL 477 Description ( y x → yˆx ) ( y1 y2 → ) ( symb var → {zeros} ) ( xTr yPr → xZf ) ( x1 x2 → ) Appendix D Library 256 and EXTABLE D.1 The Development Library 256 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 Name x→H xH→ x→A xA→ xA→H xH→A x→CD xCD→ xS→H xH→S x→LST 00B100 x→ALG 00C100 x→PRG 00D100 00E100 00F100 010100 011100 012100 xCOMP→ x→RAM 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 Name xR˜SB 014100 xSB˜B 015100 xLR˜R 016100 xS˜N 017100 xLC˜C 018100 019100 01A100 01B100 01C100 01D100 01E100 01F100 020100 021100 xASM→ xBetaTesting xCRLIB xCRC xMAKESTR xSERIAL xASM xER x→S2 xXLIB˜ D.2 479 Description ( % → # ) ( # → % ) ( # → hxs ) ( hxs → # ) ( %% → % ) ( % → %% ) ( $ → ID ) ( ID → $ ) ( %%C → %C ) ( %C → %%C ) ( Code → $ ) ( → $ ) ( → lib ) ( $ → #crc ) ( xlen → $ ) ( → $ ) ( $ → ob ) ( $ {errors} → $' ) ( ob → $ ) ( xlib xn → ROMPTR ) ( ROMPTR → xlib xn ) The EXTABLE Library 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 Name xGETADR 002102 xGETNAME 003102 xGETNAMES 004102 xGETNEAR 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. Appendix E Error Messages This appendix lists all “error” messages in the HP49G, even if most have nothing to do with errors. It is possible to generate an error with the following messages directly, with words such as ERRORSTO or ERROROUT, or recall them to the stack with JstGetTHEMESG. See Chapter 22. All numbers listed are in hexadecimal format. The symbol ➥ represents a line break. #n 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C Message Insufficient Memory Directory Recursion Undefined Local Name Undefined XLIB Name Memory Clear Power Lost Warning: Invalid Card Data Object In Use Port Not Available No Room in Port Object Not in Port Recovering Memory Try To Recover Memory? Replace RAM, Press ON No Mem To Config All Undefined FPTR Name Invalid Bank Data Full Check Bad Crc Cmprs: not a user bank No or 2 system bank Invalid bank Invalid bank number Inexisting pack Pack twice Ins. Mem. Erase Fail, Rom faulty Erase Fail, Low bats #n 1D 1E 1F 20 21 101 102 103 104 106 107 108 109 10A 10B 10C 10D 10E 10F 110 111 112 113 114 115 116 117 118 480 Message Erase Fail, Locked Block Write Adr outside ROM Write Fail, Rom Faulty Write Fail, Low bats Write Fail, Locked Block No Room to Save Stack Can’t Edit Null Char. Invalid User Function No Current Equation Invalid Syntax Real Number Complex Number String Real Array Complex Array List Global Name Local Name Program Algebraic Binary Integer Graphic Tagged Unit XLIB Name Directory Library Backup 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 Definition 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 Conflict 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 Condition➥Please Wait... CATALOG Nonexistent Find Pattern Not Found Nonexistent Replace Pattern Can’t 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 Undefined Name LASTARG Disabled Incomplete➥Subexpression Implicit () off Implicit () on Positive Underflow Negative Underflow Overflow Undefined Result Infinite Result Invalid Dimension Invalid Array Element Deleting Row Deleting Column Inserting Row Inserting Column Invalid Σ Data Nonexistent ΣDAT Insufficient Σ 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 E. Error Messages Message Empty catalog undefined 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 out➥if >1), press ENTER 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 Scientific Sci Engineering Eng Degrees Radians #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? 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? Don’t 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 filename 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 Slopefield 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 E. Error Messages 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 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 Significance 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 Significance 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 Significance level Z-TEST: 1 P X1: N1: α: X2: N2: Success count for sample 1 Size of sample 1 Significance 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 Significance 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 Significance 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 Confidence 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 Confidence 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 E. Error Messages Message C: Sample success count Sample size Confidence 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 Confidence level CONF. INT.: 2 P x̄: Sx: N: C: Sample mean Sample standard deviation Sample size Confidence 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 Confidence 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 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 field 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 Scientific 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 Underflow → 0 21 Overflow → ±9E499 22 Infinite → 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 E. Error Messages 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 Don’t 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 confirm 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 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 simplified 113 Linear simp on 114 Disp 1+x → x+1 115 SQRT simplified 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 Underflow → error 21 Overflow → error 22 Infinite → ±9E499 27 ’X+Y*i’ → ’X+Y*i’ 28 Simultaneous plot 29 Don’t 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 Don’t 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 Don’t 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 Infinite 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 confirm 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 simplified 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 !simplified 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 E. Error Messages Message Choose transfer format Choose checksum type Overwrite existing variables? TRANSFER Local vars Remote PC files 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 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 first 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 E. Error Messages Message Subexpr First Cond: Enter pattern to search for Enter replacement object Search subexpressions first? 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 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 Dflt Auto Function Polar Conic Truth Parametric Diff Eq Histogram Bar Scatter Slopefield Wireframe Ps-Contour Y-Slice Gridmap Pr-Surface 1.Solve equation. . . 2.Solve diff eq. . . 3.Solve poly. . . 4.Solve lin sys. . . 5.Solve finance. . . 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 final indep var value Enter solution var name Enter initial solution var value Press SOLVE for final soln value Enter absolute error tolerance Enter initial step size Calculate stiff differential? Tolerance Solution SOLVE AN·XˆN+. . . +A1·X+A0 Coefficients [ an . . . a1 a0 ]: Roots: Enter coefficients or press SOLVE Enter roots or press SOLVE Coefficients Roots SOLVE SYSTEM A·X=B A: B: X: Enter coefficients 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 E. Error Messages 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 find 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 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 Can’t derive int. var Diff equation order>2 INT:invalid var change Mode switch cancelled No name in expression Invalid user function Can’t find ODE type Integer too large Unable to find sign Non-symmetric matrix ATAN insufficent order ASIN at infinity undef Unsigned inf error LN[Var] comparison err Undef limit for var Bounded var error Got expr. indep of var Can’t state remainder LN of neg argument Insufficient 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 Unsimplified 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 Avogadro’s number Boltzmann molar volume universal gas std temperature std pressure Stefan-Boltzmann speed of light permittivity permeability accel of gravity gravitation Planck’s #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 Dirac’s electronic charge electron mass q/me ratio proton mass mp/me ratio fine structure mag flux quantum Faraday Rydberg Bohr radius Bohr magneton nuclear magneton photon wavelength photon frequency Compton wavelen 1 radian 2π radians in trig mode Wien’s k/q ε0/q q*ε0 dielectric const SiO2 dielec cons ref intensity CONSTANTS LIBRARY Undefined 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 Undefined 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 E. Error Messages 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 Message Val betw 0-15 expected Val betw 1-16 expected Label Expected Hexa Expected Decimal Expected Can’t Find Label already defined { expected } expected ( expected Forbidden Bad Expression Jump too Long Val betw 1-8 expected Insuffisant Memory Matrix Error Define Error No Message here Part VI Index Appendix F Entries sorted by Name The entries in this index have been sorted alphabetically, ignoring case. Leading characters ˆ, ˜, and x have no influence on the position of an entry. Entries starting with a digit or a symbol are at the end of the index. Note that for technical reasons, the page number given may be off by one for a few percent of the entries. If the page reference is 167, the entry may actually be the first entry on page 168. Addr. 25F0F 25F0F 106007 003100 004100 20B006 030314 07497 04EA4 39A07 50D006 25FA4 390E4 2F319 390C9 3A7DC 43C006 425006 424006 025314 43A006 533006 3A8D8 451006 450006 54E006 315BB 2EF76 279006 Name a%>$ a%>$, ˆA/B2PQR xA→ xA→H ˆABCUV ˜xABCUV ABND ABORT xABS ˆxABSext ABUFF xACK ACK_INIT xACKALL xACOS ˆACOS2ASIN ˆacos2ln ˆACOS2LN ˜xACOS2S ˆACOS2Sext ˆxACOSext xACOSH ˆacosh2ln ˆACOSH2LNext ˆxACOSHext ADDF AddLeadingSpace ˆADDLISText Page 46 46 425 478 478 414 453 117 156 453 348 272 453 453 453 352 366 351 453 357 349 453 367 352 349 312 381 Addr. 378006 295006 112007 2B7CC 00A0E 01661 04E66 2ACA9 13D006 13F006 141006 143006 38B006 406006 38A006 133006 135006 13B006 137006 139006 398006 50E006 510006 53E006 54F006 56E006 151006 513006 53C006 499 Name ˆADDMATOBJext ˆADDMULTIPL ˆADDONEVAR addrClkOnNib addrKEYSTATE addrORghost addrTEMPENV addrTEMPTOP ˆaddt!= ˆaddt% ˆaddt%CH ˆaddt%T ˆaddt/ ˆaddt0meta ˆaddt2 ˆaddt< ˆaddt<= ˆaddt== ˆaddt> ˆaddt>= ˆaddtˆ ˆaddtABS ˆaddtABSEXACT ˆaddtACOS ˆaddtACOSH ˆaddtALOG ˆaddtAND ˆaddtARG ˆaddtASIN Page 345 384 379 363 363 363 363 359 77 359 363 363 363 363 363 360 362 362 364 364 365 363 362 364 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 F. Entries sorted by Name 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 Name AdjEdModes adrDISABLE_K adrKEYBUFFER AEQ1stcase AEQopscase AGAIN aH>HMS ALARM? ALARMS@ ALARMxcp xALG-> ˆALG48FCTR? ˆALG48MSOLV xALGB ˆALGCASCOMPEVAL ALGcase AlgCharEdit AlgDecomp AlgEntry? ALGeq? AlgObEdit ˆalgparse ˆalgunwrap allkeys AllowPrlcdCl xALOG ˆALOG2EXP aMODF xAMORT xAND AND AND$ ANDcase ANDITE ANDNOTcase xANS any xAPEEK APNDCRLF apndvarlst AppDisplay! AppDisplay@ APPEND_SPACE ˆAppendList AppError! AppError@ AppExitCond! AppExitCond@ Page 143 143 151 174 174 374 384 454 353 146 53 278 311 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 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 501 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 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 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 F. Entries sorted by Name 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 Name BINT112 BINT113 BINT114 BINT115 BINT116 BINT117 BINT118 BINT119 BINT12 BINT120 BINT121 BINT122 BINT123 BINT124 BINT125 BINT126 BINT127 BINT128 BINT129 BINT13 BINT130 BINT130d BINT131 BINT131d BINT14 BINT15 BINT16 BINT17 BINT18 BINT19 BINT2 BINT20 BINT21 BINT22 BINT23 BINT24 BINT25 BINT253 BINT255d BINT26 BINT27 BINT28 BINT29 BINT3 BINT30 BINT31 BINT32 BINT33 Page 15 15 15 15 15 15 15 15 11 15 15 15 15 15 15 16 16 16 16 11 16 16 16 16 11 11 11 11 11 11 10 11 11 11 11 11 11 16 17 11 11 11 11 10 12 12 12 12 ˜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 503 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/ 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 F. Entries sorted by Name 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 331 246 246 454 455 38 36 37 37 38 38 38 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 Name C%-1 C%-1=case C%0 C%0= C%0=case C%1 C%1/ C%1=case C%2=case C%># C%>% C%>%% C%>%%SWAP ˆC%>C%% C%ABS C%ACOS C%ACOSH C%ALOG C%ARG C%ASIN C%ASINH C%ATAN C%ATANH C%CˆC C%CˆR C%CHS C%CONJ C%COS C%COSH C%EXP C%LN C%LOG C%RˆC C%SGN C%SIN C%SINH C%SQRT C%TAN C%TANH ˆC2C%% xC2P C>Im% xC>PX xC>R C>Re% CACHE CacheStack CAL_CURS_POS Page 36 143 36 38 142 36 37 142 143 22 31 37 37 37 37 38 38 38 38 38 38 38 38 37 37 37 37 38 38 38 38 38 37 37 38 38 37 38 38 37 455 37 456 456 37 117 301 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 505 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_: 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 F. Entries sorted by Name 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 Name CHR_p CHR_Pi CHR_Q CHR_q CHR_r CHR_R CHR_RightPar CHR_s CHR_S CHR_Sigma CHR_Space CHR_t CHR_T CHR_U CHR_u CHR_UndScore CHR_V CHR_v CHR_w CHR_W CHR_x CHR_X CHR_Y CHR_y CHR_Z CHR_z CHR_{ CHR_} xCIRC CircleB CircleG1 CircleG2 CircleW CircleXor CK#ˆCK%%SQRT ˆCK&CONV2INT ˆCK&CONVINT Ck&DecKeyLoc CK&DISPATCH0 CK&DISPATCH1 CK&DISPATCH2 ˆCk&DoMsgBox Ck&Freeze CK0 CK0ATTNABORT CK0NOLASTWD CK1 Page 43 43 42 43 43 42 41 43 42 43 41 43 42 42 43 42 42 43 43 42 43 42 42 43 42 43 43 43 455 93 93 93 93 93 23 34 328 328 205 197 197 197 283 196 207 196 196 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+ ˆckaddtˆCKALG ˆCKCARCOMP CkChr00 CkEQUtil ˆCKFPOLYext CKGROBFITS ˆCKINNERCOMP ˆCKINT>0 ˆCKLN ˆCKMATRIXELEM CKN CKNNOLASTWD ˆCKNUMARRY cknumdsptch1 CKPICT CKREAL CKREF ˆCKSAMESIZE CkSecoType xCKSM CKSYMBTYPE ˆCKSYMREALCMP CLCD10 ˆCLEANIDLAM 507 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 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 F. Entries sorted by Name 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 Name COLAITE COLANOTcase COLARPITE COLASKIP COLAthexFCN ˆCOLC1 ˆCOLC2 ˆCOLCext xCOLCT xCOLLECT xCOMB ˆCombineFac ˆCombInit ˆCombNext ˆCombProd CommandLineHeight xCOMP→ COMPEVAL ˆCOMPLEX? ˆCOMPLEXERR ˆCOMPLEXMODE ˆCOMPLEXOFF ˆCOMPLEXON ˆCOMPLISText ˆCOMPRIMext xCON xCOND xCONIC xCONJ xCONLIB Connecting xCONST xCONSTANTe xCONSTANTS xCONT ˆContains? ˆCONTAINS_LN? CONTEXT CONTEXT! CONTEXT@ ˆCONVBACK2INT ˆCONVBACKINT xCONVERT convertbase COPYVAR xCORR xCOS ˆcos*tan Page 139 140 138 131 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 456 456 366 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+ ˆCOSEXPAˆxCOSext 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+ 509 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 90 86 333 293 393 456 415 300 300 300 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/DˆX D/DˆY 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? Page 300 333 456 37 458 276 276 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 F. Entries sorted by Name 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 456 456 51 173 456 456 375 52 52 53 54 52 54 53 52 52 456 178 456 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 Name xDEG ˆDEG1 ˆDEG2ext xDEGREE ˆDEGREext DEL_CMD xDELALARM xDELAY delimcase xDELKEYS ˆDELTAPSOLVE ˆDemonicLf ˆDENOLCMext xDEPND xDEPTH DEPTH ˆDEPTHext ˆDEPTHOBJext DEPTHSAVE xDER ˆDERARG ˜xDERIV ˆDERIV ˆDERIVext ˆDERIVIDNT ˆDERIVIDNT1 derprod1 derquot ˆDERVX ˜xDERVX ˜xDESOLVE ˆDESOLVE xDET xDETACH ˆdeuxipi xDIAG→ xDIAGMAP dIDNTNcase ˜xDIFF xDIFFEQ ˆDIMLIMITS ˆDIMRANM ˆDIMS xDIR xDISP Disp5x7 DISP@01 DISP@09 Page 456 382 382 378 303 457 457 457 385 375 358 457 457 107 398 398 390 457 388 387 388 388 412 457 457 391 457 457 420 457 145 457 457 64 337 457 282 281 281 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 511 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 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 F. Entries sorted by Name 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 Page 302 281 177 273 457 303 303 308 180 294 177 318 168 177 257 180 206 293, 95 92 457 375 291 293 ˆDoNewMatrixRealOrCplx DONEXT DoNextRow DOOCT DoOldMatrix ˆDoOldMatrixCplx ˆDoOldMatrixReal DOOPENIO DOPARITY DOPKT DoPlotMenu DoPrevRow 308 177 180 180 Addr. 2EECC 2EF01 30A66 25EB5 2F2E9 2F2EB 2F2EC 2AC0E 2EEC6 26058 25ECC 2EEC7 2605D 2565A 3B76C 25EB6 2F23E 25EB7 2EFAA 0540AB 3B1E1 2F2DB 2EEC3 25EB8 0BD002 25EB9 2F2D4 2EE60 25EBA 3C484 06B0AB 2F32C 2F13F 2F32D 3C4BA 36EA7 0230DE 3DC3B 03244 3683D 282CC 36996 3DC56 2F1C6 28ACE 25ECD 2F32E 357CE Name DOPRLCD DOPX>C DORANDOMIZE DORCLE DOREPL DOREPLACE DOREPLACE/NEXT DoRunSafe DOSBRK DOSCI DoSolvrMenu DOSRECV DOSTD DoStdKeys? DOSTOALLF2 DOSTOE DOSTOSYSF DOSTR> dostws xDOSUBS xDOT DOTEXTINFO DOTRANSIO DOTVARS% ˆDOTVARS{} DOVARS dowait DoWarning DPRADIX? xDRAW xDRAW3DMATRIX DRAWBOX# DRAWLINE#3 drax xDRAX dREALNcase xDROITE xDROP DROP DROP#1DROP%0 DROP' xDROP2 DROP3PICK DROP?symcomp DropBadKey DROPDEADTRUE DROPDUP Page 318 33 318 308 308 308 177 180 177 180 177 224 176 318 175 50 57 458 458 312 180 168 169 168 172 282 178 458 458 92 92 458 145 458 106 24 31 130 458 109 86 207 130 106 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= 513 Page 136 151 458 75, 106 46 21 106 129 106 106 106, 107 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 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 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 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 F. Entries sorted by Name 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 158 458 458 53 53 146 311 300 300 311 309 310 458 380 458 458 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 Name EIGHT EIGHTEEN EIGHTROLL EIGHTY EIGHTYONE ELEVEN ˆELMGext xELSE Embedded? ENCODE ENCODE1PKT xENDDO xENDSUB xENDTIC xENG ˜xEPSX0 EQ EQ: xEQ> EQcase EQcasedrop EQCURSOR? EQIT EQITE EqList? EQLookup EQOR EQOVER EQUAL EQUALcase EQUALcasedrop EQUALcasedrp EQUALNOT EQUALNOTcase EQUALOR ˆEQUALPOS2META EQUALPOSCOMP ˆEQUALPOSMETA EQUATION ˆEQUATION? ˆEQUIV! xEQW ˆEQW3 ˆEQW3Code ˆEQW3CursorOff ˆEQW3CursorOn ˆEQW3Edit ˆEQW3GROB Page 10 11 108 14 14 10 399 458 69 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 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+ ˆEvalNoCKx- 515 Page 98 98 98 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 198 198 417 417 417 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+ ˆEXPEXPAˆEXPEXPANEG ˆxEXPext xEXPFIT ˜xEXPLN 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 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 F. Entries sorted by Name 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 415 459 382 377 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 Name ˆFHORNER FIFTEEN FIFTY FIFTYEIGHT FIFTYFIVE FIFTYFOUR FIFTYNINE FIFTYONE FIFTYSEVEN FIFTYSIX FIFTYTHREE FIFTYTWO ˆFiler xFILER ˆFILER_MANAGER ˆFILER_MANAGERTYPE Find1stT.1 Find1stTrue xFINDALARM ˆFindCurVar ˆFINDELN FindNext FindStrInCmd FINDVARS xFINISH FIRSTC+ FIRSTC@ FIVE FIVEFOUR FIVEROLL FIVESIX FIVETHREE FIVEUNROLL xFIX FixRRP ˆfk+1/fk ˆFLAGACOS2S ˆFLAGASIN2C ˆFLAGASIN2T ˆFLAGATAN2S ˆFLAGAXQ ˆFLAGCHINREM ˆFLAGDERIV ˆFLAGDESOLVE ˆFLAGDIV2 ˆFLAGDIV2MOD ˆFLAGDIVPC ˆFLAGEXPAMOD Page 378 11 13 13 13 13 13 13 13 13 13 13 188 459 188 188 70 459 387 342 308 86 459 300 10 14 108 14 14 109 459 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 517 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 346 411 413 413 413 412 413 413 413 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 Page 413 416 413 459 282 282 201 459 205 205 459 459 459 283 459 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 F. Entries sorted by Name 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 55 54 54 54 54 55 55 393 407 460 460 380 460 178 346 460 384 272 273 460 399 460 318 460 308 308 77 312 479 64 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 Name GETCD0 GetChkPRTPAR GETDF GetElemBotVStack GetElemTopVStack GetEqN ˆGETERABLEMSG GETEXITMSG ˆGetFieldVals GetFontCmdHeight GetFontHeight GetFontStkHeight GetHeader xGETI GETINDEP GetIOPAR GetKermPkt# GETKEY GETKEY* GetKeyOb GETKP GETLAM GETLAMPAIR GetLastEdit getmatchtok GetMenu% GetMetaVStack GetMetaVStackDROP xGETNAME GETNAME xGETNAMES xGETNEAR GetNextToken GETPARAM GETPMIN&MAX GETPROC GETPTYPE GETRES GetRes GETRHS ˆGetRoot GETSCALE GETSERIAL GETTHEMESG GETTOUCH GetUserKeys GetVStack GetVStackProtectWord Page 288 163 163 318 403 156 283 273 460 317 181 206 206 206 117 119 51 289 162 161 479 180 479 479 50 316 317 288 317 317 419 317 157 206 208 161 164 ˆ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→ xH→A 519 Page 316 316 317 317 384 384 460 93 425 129 306 460 460 94 460 11 90 91 91 90 91 91 293, 95 460 92 90 90 90 90 384 94 461 205 328 478 478 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 xH→S ˜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>$ 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 461 424 387 378 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 F. Entries sorted by Name 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 Page 31 59 59 16 356 393 462 462 414 461 394 461 461 390 461 414 71 10 46 293, 95 61 116 116 461 19 462 10 145 423 201 145 15 18 128, 150 462 330 462 259 259 259 Addr. 03D004 387AC 01B0AB 027004 02C004 02D004 02B004 030004 028004 02A004 045004 02E004 029004 026004 032004 04C004 04A004 03A004 037004 038004 03B004 039004 020004 042004 0050B0 0060B0 03C004 043004 035004 048004 047004 025004 036004 044004 02F004 024004 021004 023004 03F004 022004 040004 041004 396A4 395F3 04B004 011314 08A007 08B007 Name ˆIfEnterKeyPress xIFERR xIFFT Page 260 462 462 ˆIfGetCurrentFieldValue 258 ˆIfGetFieldChooseData 258 ˆIfGetFieldChooseDecomp 259 ˆIfGetFieldDecompObject 258 ˆIfGetFieldInternalVa.. 259 ˆIfGetFieldMessageHan.. 258 ˆIfGetFieldObjectsType 258 ˆIfGetFieldPos 261 ˆIfGetFieldResetValue 259 ˆIfGetFieldType 258 ˆIfGetFieldValue 258 ˆIfGetNbFields 259 ˆIfGetPrlgFromTypes 259 ˆIfInitDepth 261 ˆIfKeyCalc 260 ˆIfKeyChoose 259 ˆIfKeyEdit 260 ˆIfKeyInvertCheck 260 ˆIfKeyTypes 260 ˆIfMain 257 ˆIfMain2 261 ˜IFMenuRow1 257 ˜IFMenuRow2 257 ˆIfONKeyPress 260 ˆIfPutFieldsOnStack 261 ˆIfReset 259 ˆIfSetAllHelpStrings 261 ˆIfSetAllLabelsMessages 261 ˆIfSetCurrentFieldValue 258 ˆIfSetField 259 ˆIfSetFieldPos 261 ˆIfSetFieldResetValue 259 ˆIfSetFieldValue 258 ˆIfSetFieldVisible 258 ˆIfSetGrob 258 ˆIfSetHelpString 260 ˆIfSetSelected 258 ˆIfSetTitle 260 ˆIfSetTitle2 xIFT 462 xIFTE 462 ˆIfTet ˜xILAP 462 ˆILAPDELTA ˆILAPEXP 392 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[] 521 Page 392 199 462 348 278 71 462 462 317 151 152 152 330 419 462 179 314 303, 314 314 291 291 289 71 71 71 71 391 462 212 212 212 302 344 344 302 344 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 Page 302 343 343 72 462 390 17 391 171 171 403 390 404 462 462 423 403 348 91 90 462 341 462 420 462 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 F. Entries sorted by Name 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? Page 404 397 411 462 152 152 152 261 399 138 139 139 142 144 152 152 463 345 157 157 152 152 280 280 280 280 82 463 463 208 208 208 463 206 463 Addr. 3ECE4 394F1 260A3 2F34D 2F34E 2F34F 361006 3C5C9 25877 06C003 06E003 05D314 235006 3E6006 06D003 3314D 2F205 27142 25F95 0010DD 010314 087007 058314 230006 397E5 362B6 80F5A 2BC006 25908 2590D 260A8 260AD 25EE7 2F351 08326 0670AB 255F6 255EC 255F1 255E7 255FB 33A5D 3C866 02D314 375006 055314 017100 012314 Name xKGET xKILL KILLGDISP KINVISLF KVIS KVISLF ˆla+ELEMsym xLABEL LabelDef! ˆlaDELROW ˆlaGPROW ˜xLAGRANGE ˆLAGRANGE ˆLAGRANGEext ˆlaINSROW lam laMGET0 LAMLNAME LANGUAGE> xLANGUAGE→ ˜xLAP ˆLAPext ˜xLAPL ˆLAPLACIAN xLAST LAST$ LASTARGCOUNT ˆLASTCOMP LastMenuDef! LastMenuDef@ LastMenuRow! LastMenuRow@ LastNonNull LASTPT? LASTRAM-WORD xlbmol LBoxB LBoxG1 LBoxG2 LBoxW LBoxXor lbrac xLCD> ˜xLCM ˆLCPROG2M ˜xLCXM xLC˜C ˜xLDEC Page 463 463 273 181 181 181 343 463 290 463 415 379 10 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 ˆ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! 523 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 386 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 Page 386 386 463 386 386 387 386 386 387 387 387 463 463 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 F. Entries sorted by Name 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 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 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 Name ˆLNEXPA/ ˆLNEXPAˆ ˆxLNext ˆLNOBJ! xLNP1 ˆLNP12LN LoadTouchTbl LockAlpha xLOG ˆLOG2LN xLOGFIT Lookup Lookup.1 LOOP Loop ˆLOP1ext ˆLOPAext ˆLOPDext ˆLOPMext LowBat? ˆLPGCDext ˆLPROF! xLQ xLR ˆLRDM! ˆLRDMext xLR˜R xLSQ xLU ˜xLVAR ˆLVARDext ˆLVARext ˆLVARXNX2! ˆLVARXNX2ext ˆLVARXNXext ˆm-1&m+1 M-1stcasechs MACRODCMP ˜xMAD ˆMADD ˆMADDTMOD ˆMADJ ˆMADNOCK ˜xMAIN ˆmake2dmatrix ˆMAKE2DMATRIX ˆMAKEARRY MakeBoxLabel Page 369 369 349 464 351 292 278 464 351 464 70 70 151 421 421 420 421 178 358 464 464 378 479 464 464 464 398 397 387 397 359 143 464 339 416 345 415 337 337 337 95 ˆ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+ ˆMATˆMAT/ ˆ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 525 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 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 F. Entries sorted by Name 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+ ˆMETADERˆMETADER/ ˆMETADERˆ ˆMETADERABS Page 290 290 290 290 291 409 273 273 288 288 289 410 409 464 409 143 143 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 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 Name ˆMETADERACH ˆMETADERACOS ˆMETADERALOG ˆMETADERASH ˆMETADERASIN ˆMETADERATAN ˆMETADERATH ˆMETADERCOS ˆMETADERCOSH ˆMETADERDER ˆMETADEREXP ˆMETADERFCN ˆMETADERI3 ˆMETADERI4 ˆMETADERIFTE ˆMETADERINV ˆMETADERIV ˆMETADERLN ˆMETADERLNP1 ˆMETADERLOG ˆMETADERNEG ˆMETADEROP ˆMETADERSIN ˆMETADERSINH ˆMETADERSQ ˆMETADERSQRT ˆMETADERTAN ˆMETADERTANH ˆmetadiv ˆMetaDiv ˆmetaEQUAL? ˆMETAEXPEXPA ˆmetafraction? ˆmetai ˆmetai* ˆmetainftype ˆMETAINT? ˆmetaipi ˆMETALISTVXXL ˆMETALNEXPA ˆMETAMAT-ROW ˆMETAMATCSWAP ˆMETAMATRED ˆMETAMATRSWAP ˆMETAMM2 ˆMetaMul ˆMETAMULMULT ˆmetamult Page 389 389 389 389 389 389 390 389 389 388 388 388 388 388 388 389 388 388 388 389 389 389 389 389 389 389 389 361 361 78 369 370 420 360 368 78, 334 420 325 369 344 344 341 344 381 361 361 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 527 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 Page 378 397 339 465 329 372 373 373 372 373 291 205 373 373 465 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 F. Entries sorted by Name 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 357 43 47 47 405 465 399 405 465 70 99 72 465 330 330 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 Name NINE NINETEEN xNIP nmetasyms ˜nNullBind NO_AFFCMD NoAttn?Semi NOBLINK NoEdit?case NoEditLine? xNOEVAL> NoExitAction nohalt NOHALTERR NoIgnoreAlm ˆNONALGERR ˆNONINTERR nonopcase ˆNONPOLYSYST ˆNONRATSUM ˆNONRECMODE ˆNONUNARYERR NonUsrKeyOK? NOP ˆNOSTEPBYSTEP xNOT NOT NOT?DROP NOT?GOTO NOT?SEMI NOT?SWAPDROP NOT_IT NOT_UNTIL NOT_WHILE NOTAND NOTcase NOTcase2drop NOTcase2DROP NOTcasedrop NOTcaseDROP NOTcaseFALSE NOTcaseTRUE NOTcsdrpfls NOTLISTcase NOTROMPcase NOTSECOcase xNOVAL ˆNR_REPLACE Page 10 11 465 199 117 312 207 179 146 300 291 224 157 404 404 145 404 393 407 403 208 128 407 465 136 138 129 137 138 138 151 151 136 139 139 140 139 139 140 140 139 145 145 145 465 353 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? 529 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 53 73 311 31 465 129 337 334 334 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 Page 179 179 465 390 392 391 465 100 10 25 378 151 25 131 21 22 130 15 21 22 72 377 466 136 466 50 139 466 92 92 136 178 466 109 24 24 25 77 25 25 141 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 F. Entries sorted by Name 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 374 330 466 50 55 466 466 223 51 466 391 466 385 307 466 169 346 466 466 466 466 387 466 372 377 478 414 466 345 466 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 Name ˆPEval ˆPEvalFast? ˆPEvalMod ˆPEvalN/D ˆPFactor ˆPFactPowCnt ˆPFactTriv ˆPFEXECext ˆPFext xPGDIR ˆPHFctr ˆPHFctr0 ˆPHFctr1 ˆpi xPI PI/180 ˆpi/2-acos ˆpi/2-asin ˆpi/2-meta xPICK PICK xPICK3 xPICT PICTRCL ˆPIext ˆpifois2 xPINIT ˆpisur-2 ˆpisur2 ˆPIVOTFLOAT ˆPIVOTNORM xPIX? xPIXOFF PIXOFF PIXOFF3 xPIXON PIXON PIXON3 PIXON? PIXON?3 PixonB PixonG1 PixonG2 PixonW PixonXor xPKT ˆPLCZ plDRPpZparg Page 424 380 395 394 374 377 376 421 466 374 374 374 420 466 30 366 366 366 466 109 466 466 316 73 420 466 420 420 341 466 466 91 91 466 91 91 91 92 94 94 94 94 94 466 88 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# 531 Page 412 466 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 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 Page 374 424 424 467 468 467 467 467 422 73 467 390 168 467 168 278 332 332 467 467 48 467 167 467 467 467 467 467 372 357 422 76 76 77 77 77 390 76 77 88 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 F. Entries sorted by Name 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 PushVStack PushVStack&Clear PushVStack&Keep PushVStack&KeepDROP xPUT ˆPUT[] PUT_FONTE PUT_STYLE PUTAB0 PUTCMPEL PUTEL PutElemBotVStack PutElemTopVStack xPUTI PUTINDEP PUTINDEPLIST PUTLAM PUTLIST PUTPTYPE PUTREALEL PUTRES PUTSCALE PUTSERIAL PUTXMAX PUTXMIN Page 467 375 374 467 372 378 170 24, 77 64 342 77 64 77 84 174 167 467 405 161 161 160 160 162 162 467 343 313 313 65 65 163 163 467 317 317 118 72 317 65 317 318 316 316 Addr. 2F367 2F368 3EA49 3C5E4 3E283 3C56E 0EB006 2BF006 3701E 293F8 509006 118006 0E2006 508006 11C006 3F5006 0E5006 3EE006 2B3006 0E8006 0E7006 0E6006 0F8006 0D9006 0DA006 111006 0E4006 4FB006 51A006 074007 078007 079007 076007 077007 075007 073007 0310AB 0080DE 0DF006 115006 0E3006 3E66F 517006 028314 3D6F6 0F8007 3EC006 3F3006 Name PUTYMAX PUTYMIN xPVARS xPVIEW xPWRFIT xPX>C ˆPZadic ˆPZHSTR pZpargSWAPUn P{}N ˆQABSext ˆQAdd ˆQAddMod ˆQCONJext ˆQDiv ˆQDiv? ˆQDivMod ˆQDivRem ˆQGcd ˆQGcdExMod ˆQGcdMod ˆQInvMod ˆQIsZero? ˆQMod ˆQMODSYMext ˆQMul ˆQMulMod ˆQNeg ˆQNORMext ˆQPI ˆQpi ˆQpi% ˆQpiArry ˆQpiList ˆQpiSym ˆQpiZ xQR xqr ˆQRoot ˆQSub ˆQSubMod xQUAD ˆQUADRANT ˜xQUOT xQUOTE ˆQUOTExSIGMA ˆQUOText ˆQUOTOBJext Page 317 317 467 467 467 399 424 88 71 422 371 395 422 371 357 395 372 358 396 395 334 372 371 395 347 422 418 419 419 419 419 419 418 468 371 395 468 38 468 468 357 357 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 533 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 468 174 408 468 170 468 468 408 408 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 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 F. Entries sorted by Name Name ˜xREORDER ˆREORDER REPEAT xREPEAT REPEATER REPEATERCH REPKEY? Repl xREPL REPLACE ˆREPLACE2BY1 REPLACE_MODE REPLACEALL REPLACEALLNOSCREEN 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 Page 469 416 151 469 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 383 383 383 383 96 279 407 348 469 387 Addr. 2CD006 2CE006 15E006 0200AB 0220AB 0210AB 38E01 38E21 4E4006 0C2006 112006 3AEB1 32F006 313D3 30F14 4FC006 3B16C 3DD18 03325 2B31A 29A8F 36FCE 3DD33 35FC4 35D80 36FCE 34FE6 34FCD 33715 3319D 08CCC 07E99 06F0AB 3D3CE 455006 37D006 4C9006 3DC71 03295 36761 35E07 367B1 36801 28001 35E07 3574D 35CA4 35CB8 Name ˆRISCHPF ˆRISCHRAT ˆRIXCext xRKF xRKFERR xRKFSTEP xRL xRLB ˆRLVARext ˆRmCombNext ˆRMULText xRND ˆRNDARRY RNDC[B] RNDXY ˆRNEGext xRNRM xROLL ROLL Roll&Do: roll2ND roll2top& xROLLD ROLLDROP ROLLSWAP rolltwotop& Rom-Word? ROM-WORD? ROMPANY rompointer ROMPTR># ROMPTR@ xROMUPLOAD xROOT ˆxroot2expln ˆROOTM2ROOT ˆROOT{}N xROT ROT ROT#+ ROT#+SWAP ROT#ROT#1+ ROT#1+UNROT ROT+SWAP ROT2DROP ROT2DUP ROTAND Page 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 ˜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 ˆrpnQOBJext rpnXROOT xRR xRRB ˆRRDMext ˆRREext ˜xrref xRREF ˆrref ˜xRREFMOD ˆRREFMOD xRRK xRRKSTEP xRSBERR xRSD RSKIP rstfmt1 ˆRSUBext RSWAP xRSWP xRULES ˆRunChooseSimple ˆRunDoNewMatrix 535 Page 107 107 107 107 107, 108 107 76 470 470 470 279 372 372 138 138 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 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 xR˜SB ˆS>Z ˆS>Z? xS→H SAFE@ SAFE@_HERE ˆSAFEPURGE SAFESTO sALLOWINTR xSAME ˆSAMEMATRIX ˆSAMEMATSCTYPE ˆSAVECASFLAGS savefmt1 ˆSaveHARDBUFF SAVELAM SaveLastEdit SaveLastMenu SAVESTACK SaveSysFlags SaveVarRes sBEG sBPOFF xSBRK xSB˜B ˆSC*MATMOD xSCALE SCANFONT xSCATRPLOT xSCATTER xSCHUR xSCI ˆSCL*MAT xSCLSIGMA xSCONJ ˜xSCROLL SCROLLDOWN ˆSCROLLext SCROLLLEFT SCROLLRIGHT SCROLLUP ScrollVGrob 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 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 F. Entries sorted by Name 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 180 48 471 479 471 356 471 278 278 224 224 178 157 406 304 276 276 276 276 275 276 276 276 276 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 Name SetDA1Temp SetDA1Valid SetDA23NoCh SetDA2aBad SetDA2aEcho SetDA2aNoCh SetDA2aTemp SetDA2aValid SetDA2bBad SetDA2bIsEdL SetDA2bNoCh SetDA2bTemp SetDA2bTempF SetDA2bValid SetDA2NoCh SetDA2OKTemp SetDA2Valid SetDA3Bad SetDA3NoCh SetDA3Temp SetDA3Valid SetDA3ValidF SetDAsNoCh SetDAsTemp xSETDATE SETDEG SetDoStdKeys SetEcma94 ˆSETEXACT SETFIRSTC_0 SETGRAD SETHASH SetHeader SetHiddenRes SetIOPARErr SETIVLERR SetKeysNS SetLeftAnn SETLOOPENV SETMEMERR SETMESG SetNAppKeyOK SETNONEXTERR SetNoRollDA2 SetNUsrKeyOK ˆSETPLUSAT0 SETPORTNOTAV SetPrgmEntry Page 275 275 276 276 276 276 275 275 276 276 276 275 275 275 276 275 275 276 276 275 275 275 276 275 456 178 224 406 178 100 273 170 158, 181 158 290 277 157 224 158 276 208 407 157 278 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 ˜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 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 471 178 379 379 379 379 379 471 158 471 460 460 455 355 355 460 471 471 400 400 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 Page 401 401 401 404 401 401 401 401 401 401 401 400 401 400 471 400 407 354 471 354 354 354 423 471 354 SimplifyExpression ˆSIMPNDXFext ˆSIMPSYMBS ˆSIMPUSERFCN ˆSIMPVAR ˆSIMP| xSIN ˆsin/cos ˆsin2exp ˆSIN2EXPext ˆSIN2ext ˆsin2tan ˆSIN2TAN ˆsin2tan/2 ˆSIN2TAN/2 ˆSIN2TC ˆSIN2TCext 424 354 354 354 354 471 366 367 352 351 366 351 365 351 351 356 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 F. Entries sorted by Name Name ˜xSINCOS ˆSINEXPA ˆSINEXPA* ˆSINEXPA*1 ˆSINEXPA+ ˆSINEXPAˆxSINext 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 Name ˜xSOLVER ˜xSOLVEVX ˆSOLVEXFLOAT ˆSOLVext SolvMenuInit xSORT SORTASLOW ˆSortList SPACE$ ˆSPARSEDATA xSPHERE SPLITWHERE ˆSPollard xSQ ˆxSQext ˆSQFF2ext ˆSQFFext SQRF xSQRT ˆsqrt1-cosˆ2 ˆsqrt1-sinˆ2 ˆSQRT2LNEXP ˆsqrt2lnexp ˆSQRT_IN? ˆSQRTINVpshd* xSR xSRAD xSRB xSRECV xSREPL xSREV sscknum2 xssgeneral ˆxssSYM#? ˆxssSYM% ˆxssSYM%CH ˆxssSYM%T ˆxssSYM* ˆxssSYM+ ˆxssSYMˆxssSYM/ ˆxssSYM<=? ˆxssSYM<? ˆxssSYM=? ˆxssSYM>=? ˆxssSYM>? ˆxssSYMˆ ˆxssSYMAND Page 471 471 412 382 293 471 172 73 43 407 471 331 471 348 424 396 475 366 366 351 351 424 390 471 471 471 471 471 478 87 ˜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/ 539 Page 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 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 Page 167, 472 301 304 304 304 304 304 472 176 176 174 472 170 181 472 117 344 408 424 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 F. Entries sorted by Name 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 Name SWAP>HCOMP SWAPCKREF SWAPCOLA SWAPcompSWAP SWAPDROP SWAPDROP#1SWAPDROPDUP SWAPDROPSWAP SWAPDROPTRUE SWAPDUP ˆSWAPFXND SWAPINCOMP SWAPINDEX@ SWAPLOOP ˆSWAPNDXF SWAPONE SWAPOVER SWAPOVER#ˆSWAPRADD ˆSWAPRDIV ˆSWAPRIM ˆSWAPRMULT ˆSWAPRNEG SWAPROT ˆSWAPROWS ˆSWAPRRE ˆSWAPRSUB SWAPTRUE SWAPUnDROP SWAPUnNDROP ˆSWITCHNOTALLOWED ˆSWITCHOFF ˆSWITCHON SWP1+ ˆSWPSIMPNDXF ˆSXSQRext ˜xSYLVESTER ˆSYLVESTER sym ˆxSYMABS ˆxSYMACOS ˆxSYMACOSH ˆxSYMALOG ˆxSYMARG ˆxSYMASIN ˆxSYMASINH ˆxSYMATAN ˆxSYMATANH Page 68 171 131 86 107 24 107 107, 108 136 107 380 71 152 151 379 21 106, 107 24 371 372 348 371 348 107, 108 344 348 371 136 77 76 404 405 405 24, 77 424 348 473 346 10 349 350 350 349 350 349 350 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 541 Page 10 353 72, 325, 359 71, 86 86 16 16 350 86 349 349 364 354 350 16 350 350 350 16 362 348 350 16 412 350 350 350 350 16 393 394 362 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 Page 16 88 349 350 348 348 16 349 350 386 350 157 404 166 233 169 274 SysErrorTrapAction SysErrorTrapConfirm xSYSEVAL SysITE SysMenuCheck SysPtr@ SYSRRP? SysSTO xSYST2MAT ˆSYSTEM SystemFlags SystemLevel? ˆSYSText SysTime xS˜N ˆTABLECOSext ˆTABLETANext ˜xTABVAL ˆTABVALext ˆTABVAR ˜xTABVAR TAGGED TAGGEDANY TAGOBS xTAIL TakeOver xTAN xTAN2CS2 ˆTAN2CS2 473 146 292 169 167 415 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 F. Entries sorted by Name 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 Name THISCHAR THREE THREEFIVE THREE{}N ˆTHREE{}POLY xTICKS Ticks>Date Ticks>Rpt Ticks>TOD ticR xTIME TIMEOUT? TIMERCTRL.1 TIMERCTRL.2 TIMESTR xTINC ˜xTLIN xTLINE xTMENU TOADISP TOD TOD>t$ TOGDISP TOGGLELINE#3 TogInsert TogInsertKey TOGLINE TOGLINE3 ToGray tok$ tok& tok' tok* tok+ tok, toktok-> tok. tok/ tok0 tok1 tok2 tok3 tok4 tok5 tok6 tok7 tok8 Page 300 10 13 72 377 473 173 173 173 128 473 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 543 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 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 F. Entries sorted by Name 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 Name U>NCQ UART? UARTBUFLEN UARTxcp xUBASE xUFACT ˆUFactor ˆUFactor1 ˆUFactorDeg2 xUFL1→MINIF UM#? UM% UM%CH UM%T UM* um* UM+ UMum/ UM/ UM<=? UM<? UM=? UM>=? UM>? UM>U umˆ UMABS UMCEIL UMCHS UMCONV UMCOS umEND UMFLOOR UMFP UMIP UMMAX UMMIN umP UMRND UMSI UMSIGN UMSIN UMSQ UMSQRT UMTAN UMTRC UMU> Page 82 474 474 375 375 376 474 83 83 83 83 83 81 83 83 81 83 83 83 83 83 83 82 81 83 83 83 82 83 81 83 83 83 83 83 81 83 82 83 83 83 83 83 83 82 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 545 Page 83 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 474 475 339 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 Page 423 423 423 404 423 415 475 475 353 387 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 F. Entries sorted by Name 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 Name XEQORDER XEQPGDIR XEQPURGEPICT XEQRCL XEQSETLIB XEQSHOWLS XEQSTOID XEQStoKey XEQTYPE xXGET ˆXGROBext XHI XHI-1 xXLIB˜ XLINE_SIZE? xXMIT ˆXNUM ˜xXNUM XOR xXOR XOR$ xXPON xXPUT ˜xXQ xXRECV xXRNG xXROOT ˆXROOT2ext ˆXROOT_IN? xXSEND xXSERV ˆXSQRext xXVOL xXXRNG XY>Y XYGROBDISP XYZ> XYZ>Y XYZ>YXZ XYZ>YZ XYZ>Z XYZ>ZCOLA XYZ>ZTRUE XYZ>ZX XYZ>ZXY XYZ>ZY XYZ>ZYX XYZW> Page 168 168 318 166 100 88 167 167 199 475 98 16 16 479 314 475 416 475 136 475 50 476 476 476 476 476 476 352 476 476 348 476 476 107 91 106 106, 107 107 107 107, 108 131 136 107, 108 108, 108 107 107, 108 106 ˆ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 547 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-xˆ2/1+xˆ2 1/X15 10GETLAM 10PICK 10PUTLAM 10UNROLL 11GETLAM 11PUTLAM 12GETLAM 12PUTLAM 13GETLAM 13PUTLAM 14GETLAM 14PUTLAM 14SPACES$ 15GETLAM 15PUTLAM 16GETLAM 16PUTLAM 17GETLAM 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 F. Entries sorted by Name 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 Name ˆ2DROPTRUE ˆ2DROPZ0 2DUP 2DUP#+ 2DUP#< 2DUP#= 2DUP#> 2DUP5ROLL 2DUPEQ 2DUPSWAP 2EXT 2GETEVAL 2GETLAM 2GROB 2HXS 2HXSLIST? ˆ2LAMBIND 2LIST ˆ2metainf# ˆ2metaundef# 2NELCOMPDROP 2NULLLAM{} 2Ob>Seco 2OVER ˆ2POLYNOMIAL? 2PUTLAM 2RDROP 2REAL 2skipcola 2SWAP ˆ2SYMBINCOMP ˆ2x/1+xˆ2 3@REVAL 3DROP ˆ3DUP 3GETLAM ˆ3LAMBIND 3NULLLAM{} 3PICK 3PICK#+ 3PICK3PICK 3PICKOVER 3PICKSWAP 3PUTLAM 3RDROP 3REAL 3skipcola 3UNROLL Page 136 327 106 24 25 25 25 106 137 106, 106 16 119 117 16 16 22 116 14 368 367 68 119 73 109 397 118 129 11 131 107 72, 325 365 128 106 106 117 116 119 109 25 109 109 109 118 129 17 131 108, 108 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 549 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 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 F. Entries sorted by Name 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 Name #2= #2D541 #2E48 #3+ #3+PICK ˆ#3+ROLL #3#304 #313 #37258 #3= #4+ #4+PICK #4#410 #411 #412 #414 #414C1 #415 #444 #450 #451 #452 #454 #455 #4FF #5+ #5#510 #511 #515 #536A8 #550 #5= #5B11 #6* #6+ #6#605 #606 #607 #608 #609 #60A #60B #60C #60D Page 25 21 20 23 109 108 23 17 17 21 25 23 110 23 17 17 17 17 21 17 17 17 18 18 18 18 18 23 23 18 18 18 21 18 25 20 23 23 23 18 18 18 18 18 18 18 18 18 #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 551 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 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 F. Entries sorted by Name 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 Name $1-+ $>GROB $>grob $>GROBCR $>grobCR ˜$>grobOrGROB $>ID $_'' $_2DQ $_:: $_<<>> $_[] $_ECHO $_EXIT $_GRAD $_LRParens $_R<< $_R<Z $_RAD $_Undefined $_XYZ $_{} $DER x% %%* %%*ROT %%*SWAP %%*UNROT %%+ %%%%.1 %%.4 %%.5 %%/ %%/>% %%0 %%0< %%0<= %%0<> %%0= %%0> %%0>= %%1 %%1/ %%10 %%12 %%2 %%2PI Page 23 96 96 96 96 96 116 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 45 476 33 33 33 33 33 33 30 30 30 34 34 30 35 35 35 35 35 35 30 34 30 30 30 30 #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 553 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 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 F. Entries sorted by Name 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 Name %ANGLE %ASIN %ASINH %ATAN %ATANH %CEIL x%CH %CH %CHS %COMB %COS %COSH %D>R %e %EXP %EXPM1 %EXPONENT %FACT %FLOOR %FP %HMS+ %HMS%HMS> %IP %IP># %LN %LNP1 %LOG %MANTISSA %MAX %MAXorder %MAXREAL %MIN %MINREAL %MOD %NFACT %NROOT %OF %PERM %PI %POL>%REC %R>D %RAN %RANDOMIZE %REC>%POL %SGN %SIN %SINH Page 32 32 32 32 32 32 455 33 32 33 32 32 33 28 32 32 32 33 32 32 172 172 172 32 31 32 32 32 32 33 33 30 33 28 32 33 33 33 33 28 33 33 33 33 33 32 32 32 %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 555 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 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 F. Entries sorted by Name 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 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 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 Name ?SWAP ?SWAPDROP ?symcomp ?TogU/LCase @ @LAM ˆ[]TO{} x→A x→ALG x→CD x→COL x→DIAG x→FONT x→H x→HEADER x→KEYTIME x→LANGUAGE x→LST x→MINIFONT x→NDISP x→PRG x→RAM x→ROW x→S2 x∂ x xΔLIST xΣLIST ˜x∞ xΠLIST xˆ ˆxˆext {}N ˆ{}POLY ˆ{}TO[] x| Page 138 138 86 166 117 338 478 478 478 455 457 459 478 461 463 463 478 464 465 478 478 470 479 457 462 460 461 462 466 477 347 71 377 338 460 Appendix G Entries sorted by Address The entries in this index are sorted by address. Six-digit addresses are always sorted after five-digit addresses. The six-digit addresses for rompointers and flashpointers consist of the pointer number (first three digits) and the flashbank/library id (last three digits). Sorting of these addresses uses first the flashbank/library id and then the pointer number, so 000123 will be sorted after FFF122. Note that for technical reasons, the page number given may be off by one for a few percent of the entries. If the page reference is 167, the entry may actually be the first entry on page 168. Addr. 00001 00002 00003 00004 00008 0000F 000FF 00110 00111 00112 00113 00114 00116 0011A 0011F 0012E 0012F 0020F 00A0E 00C0D 00C0E 00C10 01118 01661 026FE Name sTRUNC sNEGATE DZP sBPOFF sBEG sALLOWINTR allkeys IOC RCS TCS CRER RBR TBR IRC IRAM@ TIMERCTRL.1 TIMERCTRL.2 OUTCINRTN addrKEYSTATE kermsendmsg kermrecvmsg kermpktmsg LowBat? addrORghost DOMINIFONT Page 178 Addr. 028FC 0312B 0314C 03188 031AC 031D9 03223 03244 03258 0326E 03295 032C2 032E2 03325 0339E 0371D 03826 03880 038DC 039EF 03A81 03AC0 03ADA 03AF2 03B2E 557 Name PRLG SEMI DEPTH DUP 2DUP NDUP SWAP DROP 2DROP NDROP ROT OVER PICK ROLL UNROLL GETATELN #A8241 #102A8 #E13A8 ECUSER TRUE FALSE XOR NOT EQ Page 129 107 106 106 106 107 106 106 75, 106 107 109 109 108 109 64 21 21 21 135 136 136 136 137 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 G. Entries sorted by Address 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 288 288 156 156 156 46 157 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 Name JstGetTHEMESG JstGETTHEMSG GETEXITMSG EXITMSGSTO ERRSET addrTEMPENV ABORT ERRTRAP ERRJMP SETMEMERR SETPORTNOTAV SETROMPERR ATTNFLG@ ATTNFLGCLR CARCOMP CAR$ Loop CDRCOMP CDR$ &HXS &$ &COMP >H$ >HCOMP >T$ >TCOMP ::N {}N SYMBN EXTN INNERCOMP NULL$? NULLCOMP? NULLHXS NULL$ NULL{} NULL:: LENHXS OVERLEN$ LEN$ LENCOMP NTHELCOMP SUB$ SUBHXS SUBCOMP OSIZE OCRC #>HXS Page 157 157 156 156 157 156 157 156 157 157 157 207 207 68 47 68 47 57 49 68 49 68 49 68 71 71 71, 86 81, 71 71 55 68 57 43 72 73 57 47 47 68 68 48 57 69 178 179 56 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 559 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 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 G. Entries sorted by Address 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 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 179 278 278 278 302 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 Name INSERT? INSERT_MODE REPLACE_MODE EditLExists? ClrNewEditL NoIgnoreAlm SetRebuild MenuDef@ MenuRowAct! LabelDef! DoLabel MenuKeyNS! MenuKeyNS@ DoMenuKeyNS MenuKeyLS! MenuKeyRS! ReviewKey! ExitAction! LastMenuDef! LastMenuDef@ KeyOb0 KeyOb! KeyOb@ GetUserKeys CtlAlarm! CtlAlarm@ !*triand !*trior %+SWAP 'DoBadKey 'DoBadKeyT 1A/LockA 1stkdecomp$w 2DropBadKey >Review$ ?ATTNQUIT ?ATTN_QUIT ?BlinkCursor ?CaseKeyDef ?CaseRomptr@ ?ClrAlg ?ClrAlgSetPr ?Key>UKeyOb ?OKINALG ?PURGE_HERE XEQSTOID ?STO_HERE ALARMxcp Page 302 302 300 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%CˆC C%CˆR C%EXP C%LN C%LOG C%RˆC 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* 561 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 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 311 73 282 273 206 206 91 206 289 50 205 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 G. Entries sorted by Address 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 166 48 289 290 293 292 293 292 95 290 290 224 278 208 206 167 50 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 Name XYGROBDISP a%>$ a%>$, ederr editdecomp$w sstDISP stkdecomp$w XEQPGDIR >FONT DISP_LINE GetMetaVStackDROP GetVStack PopMetaVStack PopMetaVStackDROP PopVStack PopVStackAbove PushMetaVStack&Drop PushVStack PushVStack&Clear PushVStack&Keep PushVStack&KeepDROP 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 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 46 46 96 96 96 96 179 179 197 197 272 174 207 281 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! 563 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 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 272 272 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 G. Entries sorted by Address 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 GetFontCmdHeight GetFontHeight GetFontStkHeight StackFontHeight GetHeader GetMetaVStack InitVirtualStack INITMKFONT MINIFONT> Page 175 279 279 279 279 279 279 178 177 178 50 277 277 205 205 37 38 37 38 38 38 37 37 281 37 50 283 162 283 163 163 164 164 283 283 273 162 283 Addr. 26260 26265 2626A 2626F 26274 26279 2627E 26283 26288 2628D 26292 26297 2629C 262A1 262A6 262AB 262B0 262B5 262BA 262BF 262C4 262C9 262CE 262D8 262DD 262E2 262E7 262EC 262F1 262F6 262FB 26300 26305 2630A 2630F 26314 26319 2631E 26323 26328 2632D 2639B 263D2 26459 2645E 2649F 264CC 264D1 Name nDISPSTACK PushMetaVStack PutElemBotVStack PutElemTopVStack RCL_NB_AFF_LGN RCL_NB_AFF_LGNSTK SCANFONT SetHeader StackLineHeight STO_ML_DISP_SIZE CK0NOLASTWD CK1NOLASTWD CK2NOLASTWD CK3NOLASTWD CK4NOLASTWD CK5NOLASTWD CK0 CK1 CK2 CK3 CK4 CK5 CKN SETSIZEERR SETTYPEERR SETSTACKERR SETNONEXTERR %ABSCOERCE COERCE UNCOERCE COMPEVAL CK1&Dispatch CK2&Dispatch CK3&Dispatch CK4&Dispatch CK5&Dispatch EvalNoCK CK&DISPATCH0 CK&DISPATCH2 CK&DISPATCH1 #*OVF MATATLOOP !MATTRNnc setStdWid setStdEditWid ClrBusyAnn FIRSTC@ SETFIRSTC_0 Page 275 161 163 163 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 51 51 278 300 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 565 Page 300 300 334 334 334 334 334 334 31 31 28 29 28 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 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 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 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 G. Entries sorted by Address 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 50 145 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 Name 'Rapndit DaDGNTc AppDisplay! AppDisplay@ AppKeys! AppKeys0 AppExitCond! AppExitCond@ Clipboard! Clipboard@ Clipboard0 Clipboard? AppError! AppError@ WaitTbz0 SUB$1# CkSecoType DispTimeReq? Decomp1Line DecompEdit Decomp#Line Decomp#Disp DecompEcho DecompStd1Line DecompStd1Line32 RPNDecomp1Line RPNDecompEdit RPNDecomp#Line RPNDecomp#Disp RPNDecompEcho RPNDecompStd1Line RPNDecompStd1Line32 RunRPN: AlgDecomp CASEVAL 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 SimplifyExpression RunInApprox RunSafeFlagsNoError RunSafeFlags DoRunSafe need'case addrTEMPTOP ?TogU/LCase EQUALcasedrop nonopcase numb1stcase M-1stcasechs AEQ1stcase 176 177 176 177 145 145 145 143 143 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 567 Page 143 143 143 143 145 145 142 142 142 143 142 142 143 143 143 143 143 143 140 311 119 116 119 31 72 223 223 223 223 223 223 129 129 130 87 87 87 87 86 146 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/DˆX D/DˆY D/DDER D/DWHERE D/DINTEGRAL 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 G. Entries sorted by Address 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 293 274 274 274 274 257 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 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 Name MakeLabel DispEditLine DispTime? BlankDA12 ?FlashAlert SysErrorTrap Page 293, 96 274 277 178 SysErrorTrapConfirm 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 569 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 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 273 273 282 318 318 92 92 277 316 199 88 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 G. Entries sorted by Address 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 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 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 Name CAL_CURS_POS XLINE_SIZE? VERIF_SELECTION PASTE.EXT DEL_CMD NO_AFFCMD InsertEcho SetDA2aValid SetDA3Valid CommandLineHeight LINEON LINEOFF TOGLINE LINEON3 LINEOFF3 TOGLINE3 DOHEX DOBIN DOOCT DODEC dostws bitAND bitOR bitXOR bitNOT bitSL bitSLB bitSR bitSRB bitRR bitRRB bitRL bitRLB bitASR bit+ bitbit* bit/ WORDSIZE BASE HXS>$ hxs>$ bit%#/ bit#%/ bit%#* bit#%* bit%#bit#%- Page 301 314 306 307 303 312 302 275 275 312 92 92 92 92 92 92 177 177 177 177 57 58 58 58 58 58 58 58 58 58 58 58 58 58 57 57 57 57 57 177 46 46 57 58 57 57 57 57 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 571 Page 57 57 31 56 58 59 59 59 90 173 173 173 82 273 273 314 181 166 86 84 82 82 83 83 83 83 83 83 83 83 83 83 83 83 83 83 83 82 83 83 83 82 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 Page 83 83 83 83 82 83 82 82 82 107 174 199 91 317 71 58 59 316 316 317 318 317 317 317 317 86 302 23 92 212 212 300 293 277 316 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 G. Entries sorted by Address 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? Page 316 48 174 22 30 51 51 77 301 302 300 300 301 301 310 312, 274 312, 274 SysErrorTrapAction 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 311 311 54 109 93 93 93 93 93 95 95 280 280 280 24 Addr. 2F223 2F23E 2F244 2F24E 2F257 2F258 2F259 2F25A 2F25B 2F25C 2F25D 2F25F 2F260 2F261 2F262 2F265 2F266 2F267 2F268 2F292 2F296 2F297 2F2A3 2F2A7 2F2A9 2F2D4 2F2DA 2F2DB 2F2DC 2F2DD 2F2DE 2F2DF 2F2E0 2F2E1 2F2E2 2F2E3 2F2E4 2F2E5 2F2E6 2F2E7 2F2E8 2F2E9 2F2EA 2F2EB 2F2EC 2F2ED 2F2EE 2F2EF Name %>TAG DOSTOSYSF COERCE&CKSGN LISTRCL OCRC% PICTRCL RCLSYSF RCLSYSF2 RCLUSERF RCLUSERF2 SETROMPART STOSYSF STOSYSF2 STOUSERF STOUSERF2 UPDIR USER$>TAG VARSIZE Wait/GetKey XEQIOBACKUP XEQORDER XEQPURGEPICT XEQRCL XEQSETLIB XEQSHOWLS dowait AlgCharEdit DOTEXTINFO ClearSelection DoFarBS DoFarDel EditSelect ViewEditGrob SELECT.LINE SELECT.LINEEND EVAL.LINE DO>BEG DO>END GOTOLABEL SELECT.FONT DOFIND DOREPL DONEXT DOREPLACE DOREPLACE/NEXT REPLACEALL DO<Skip DO>Skip Page 61 175 22 166 179 316 175 175 176 176 175 176 176 176 169 61 179 207 168 318 166 100 88 172 312 306 303 303 309 313 307 307 309 305 306 306 313 308 308 308 308 308 309 305 305 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 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 573 Page 303 303 308 308 308 313 312 313 309 303 307 309 309 274 174 119 47, 181 277 277 279 22 90 55 90 314 173 282 92 130 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 280 280 280 280 181 181 181 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 G. Entries sorted by Address 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 279 279 279 280 280 279 304 276 275 158, 181 172 174 167 173 92 279 279 279 172 181 280 280 280 280 77 77 176 176 208 158 28 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 Name %1 %2 %3 %4 %5 %6 %7 %8 %9 %-1 %-2 %-3 %-4 %-5 %-6 %-7 %-8 %-9 %PI %%PI %MAXREAL %-MAXREAL %MINREAL %-MINREAL %%0 %%1 %%2 %%3 %%4 %%5 %%.1 %%.5 %%10 %1200 %2400 %4800 %9600 %15360 %11 %12 %13 %14 %15 %16 %17 %18 %19 %20 Page 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 30 30 28 28 28 30 30 30 30 30 30 30 30 30 29 29 29 29 29 28 28 29 29 29 29 29 29 29 29 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<= %%< %< %%> %> %%>= %>= %%<= 575 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 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 G. Entries sorted by Address 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 Name aMODF aH>HMS Y<=X TST15 RNDC[B] GETAB1 GETAB0 GETCD0 PUTAB0 1/X15 ADDF SQRF DIV2 CLRFRC any ZERO BINT0 real MEMERR ONE BINT1 cmp TWO BINT2 THREE str BINT3 BINT4 FOUR arry FIVE list BINT5 id SIX idnt BINT6 SEVEN BINT7 lam seco BINT8 EIGHT NINE symb BINT9 BINT10 sym Page 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 577 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 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 G. Entries sorted by Address 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 Name BINT77 BINT78 BINT79 SEVENTYNINE EIGHTY BINT80 LISTREAL EIGHTYONE BINT81 BINT82 LISTCMP BINT83 FIVETHREE BINT84 FIVEFOUR BINT85 2LIST FIVESIX BINT86 LISTLAM BINT87 BINT88 BINT89 BINT90 BINT91 BINT_91d BINT92 BINT93 BINT94 BINT95 BINT_96d BINT96 BINT97 IDREAL BINT98 BINT99 BINT100 ONEHUNDRED BINT101 BINT102 BINT103 BINT104 BINT105 BINT106 BINT107 BINT108 BINT109 BINT110 Page 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 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 579 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 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 G. Entries sorted by Address 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 Name tokWHERE 14SPACES$ NEWLINE$ $DER tok_ SPACE$ tokUNKNOWN tokquote tok' tok, tok. tok; toklparen tokrparen tokˆ tok* tok/ tok+ toktok= tokSQRT tokDER tokCTGROB tokCTSTR tok0 tok1 tok2 tok3 tok4 tok5 tok6 tok7 tok8 tok9 CHR_00 CHR_... CHR_DblQuote CHR_# CHR_* CHR_+ CHR_, CHR_CHR_. CHR_/ CHR_0 CHR_1 CHR_2 CHR_3 Page 45 45 43 45 43 43 45 45 44 44 44 45 45 45 45 45 45 45 44 44 45 45 45 45 44 44 45 45 45 45 45 45 44 44 41 41 41 41 41 41 41 41 41 41 41 41 41 41 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 581 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 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 G. Entries sorted by Address 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 Name 2RDROP 3RDROP #-PICK #+PICK DUP#1+PICK #1+PICK #2+PICK #3+PICK #4+PICK 3PICK 4PICK 5PICK 6PICK 7PICK 8PICK 9PICK 10PICK #-ROLL #+ROLL #1+ROLL get1 #2+ROLL #-UNROLL #+UNROLL #1+UNROLL #2+UNROLL DUPUNROT SWAPOVER 1PUTLAM 1GETLAM 2PUTLAM 2GETLAM 3PUTLAM 3GETLAM 4PUTLAM 4GETLAM 5PUTLAM 5GETLAM 6PUTLAM 6GETLAM 7PUTLAM 7GETLAM 8PUTLAM 8GETLAM 9PUTLAM 9GETLAM 10PUTLAM 10GETLAM Page 129 129 110 110 77, 106 109 109 109 110 109 109 109 109 109 109 109 109 108 108 108 77 108 109 109 109 109 106, 107 106, 107 118 117 118 117 118 117 118 117 118 117 118 117 118 117 118 117 118 117 118 117 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 583 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? 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 G. Entries sorted by Address 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 Name #1<> DUP#1= DUP#0<> !insert$ SWAP&$ !!append$? !append$ !!insert$ !!append$ 'RSaveRomWrd 'RSAVEWORD #MIN #MAX #-#2/ DROPZERO 2DROP00 #6#5#4#3#3+ #4+ #5+ #6+ #7+ #8+ #9+ #10+ #12+ #10* #8* #6* 5skipcola 3skipcola 2skipcola skipcola DUP#2+ DROPSWAP XYZ>Y ROT2DROP DROPSWAPDROP SWAPDUP ROTDUP SWAP#DROPDUP DUPLEN$ #+DUP #-DUP Page 25 26 26 49 49 49 49 49 49 197 197 25 25 24 21 21 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 131 131 131 131 24 106 106, 107 106, 107 106, 107 107 107 24 106 47 24 24 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 585 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 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 G. Entries sorted by Address 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 Name NOT_UNTIL NOT_WHILE DUP#0<>WHILE DUPINDEX@ SWAPINDEX@ OVERINDEX@ SWAPLOOP DROPLOOP DUP#0_DO toLEN_DO 1GETABND DUP1LAMBIND 1LAMBIND caseTRUE TrueFalse TRUEFALSE FalseTrue FALSETRUE ZEROFALSE ONEFALSE #=casedrpfls casedrpfls case2drpfls caseFALSE ORNOT EQUALNOT 2DUPEQ DUPEQ: EQ: EQOR EQUALOR 2#0=OR OVER#0= OVER#< #<3 DUP#<7 INNER#1= #5= #2<> OVER#> ONE#> #>1 DUP3PICK#+ 2DUP#+ ROT#+ OVER#+ 3PICK#+ 4PICK#+ Page 151 151 151 152 152 152 151 151 151 151 119 116 116 140 136 136 136 136 22 22 141 139 140 140 136 137 137 137 137 137 137 26 25 25 25 26 71 25 25 26 25 25 24 24 24 24 25 25 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 587 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 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 G. Entries sorted by Address 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 Name NTHOF Find1stTrue Lookup Lookup.1 EQLookup POS$ POSCHR POSCHRREV POS$REV CHR>$ STRIPTAGS STRIPTAGSl2 TAGOBS NEXTCOMPOB >LASTRAM-WORD xIF xTHEN xELSE xIFEND xALG-> xWHILE xREPEAT xDO xUNTIL xSTART xSTARTVAR #FFFF #BB xNEXT xSTEP xIFERR xHALT xSILENT' xRPN-> x>>ABND x<< x>> x' xENDTIC xWHILEEND xENDDO xERRTHEN xCASE xTHENCASE xDIR xPROMPT DISPST2&FREEZE xGROB Page 69 70 70 70 70 47 47 47 47 47 61 62 61 70 462 473 458 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? 589 Page 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 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 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 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 G. Entries sorted by Address 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 Name xPERM xSF xCF xFS? xFC? xDEG xRAD xGRAD xFIX xSCI xENG xSTD xFS?C xFC?C xBIN xDEC xHEX xOCT xSTWS xRCWS xRCLF xSTOF DOSTOALLF2 #BBBB x>LIST xR>C xRE xIM xSUB #C55 #C22 #455 #411 #415 #451 #855 #822 xREPL #313 #515 #454 #414 xLIST> INNERCOMP>% xC>R xSIZE xPOS x>STR Page 466 471 455 460 459 456 468 460 459 470 458 472 460 459 454 456 461 465 472 468 468 472 176 20 464 468 469 462 472 20 20 18 17 17 18 19 19 469 17 18 18 17 463 71 456 471 467 472 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 591 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 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 G. Entries sorted by Address 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 Name xSUMX2 xSUMY2 xSUMXY xMAXSIGMA xMEAN xMINSIGMA xSDEV xTOT xVAR xLR xPREDV xPREDY xPREDX xXCOL xYCOL xUTPC xUTPN xUTPF xUTPT xSIGMACOL xSCLSIGMA xSIGMALINE xBINS #111 xBARPLOT xHISTPLOT xSCATRPLOT xLINFIT xLOGFIT xEXPFIT xPWRFIT xBESTFIT xSINV xSNEG xSCONJ xSTO+ xSTOxSTO/ xSTO* xINCR xDECR xCOLCT xEXPAN xRULES xISOL xQUAD xSHOW xTAYLR Page 461 461 461 464 464 464 470 473 475 464 467 467 467 475 476 474 474 474 474 455 470 460 454 17 454 461 470 463 464 459 454 471 471 470 472 472 472 472 462 456 455 459 462 468 471 473 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 593 Page 468 472 19 19 16 19 19 167, 472 456 467 464 466 455 473 464 293 468 467 466 453 469 16 463 454 457 475 471 466 455 471 463 469 469 459 471 455 454 466 474 463 454 472 470 466 462 454 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 Page 472 457 468 473 458 462 453 469 462 465 474 474 465 466 458 465 459 22 31 29 29 29 29 30 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 G. Entries sorted by Address 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 244 245 245 244 169 48 344 54 54 54 54 54 55 55 55 311 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 Name ˆEQW3ViewRightX ˆEQW3ViewLeft ˆEQW3ViewRight ˆEQW3ViewRightRPL ˆEQW3GROB ˆEQW3GROBStk ˆEQW3CursorOn ˆEQW3CursorOff ˆEQW3Code ˆEQW3GROBsys ˆEQW3GROBmini ˆIfMain ˆIfSetFieldVisible ˆIfSetSelected ˆIfSetGrob ˆIfSetFieldValue ˆIfSetCurrentFieldValue ˆIfGetFieldValue ˆIfGetCurrentFieldValue ˆIfGetFieldMessageHan.. ˆIfGetFieldType ˆIfGetFieldObjectsType ˆIfGetFieldDecompObject ˆIfGetFieldChooseData ˆIfGetFieldChooseDecomp ˆIfGetFieldResetValue ˆIfSetFieldResetValue ˆIfGetFieldInternalVa.. ˆIfDisplayFromData ˆIfGetNbFields ˆIfCheckSetValue ˆIfCheckFieldtype ˆIfReset ˆIfSetField ˆIfKeyChoose ˆIfKeyEdit ˆIfKeyTypes ˆIfKeyCalc ˆIfKeyInvertCheck ˆIfONKeyPress ˆIfEnterKeyPress ˆIfSetHelpString ˆIfSetTitle ˆIfSetTitle2 ˆIfMain2 ˆIfPutFieldsOnStack ˆIfSetFieldPos ˆIfGetFieldPos Page 98 98 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 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 ˆIfCreateTitleGrob ˆIfInitDepth ˆIfTet 261 ˆIfGetPrlgFromTypes ˆIsUncompressDataString 259 261 ˆ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 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 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+ ˆPrimeˆZFactor ˆ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 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 G. Entries sorted by Address 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 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 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 Name ˆZBit? ˆLOPMext ˆSWAPRMULT ˆQMul ˆRMULText ˆRASOP ˆSWAPRSUB ˆQSub ˆRSUBext ˆSWAPRADD ˆQAdd ˆRADDext ˆSWAPRDIV ˆRDIVext ˆQDiv ˆR15SIMP ˆPPow# ˆRP# ˆMPext ˆMP0 ˆMPEXEC ˆRPext ˆPREPARext ˆx+ext ˆx-ext ˆx*ext ˆx=ext ˆx/ext ˆ2SYMBINCOMP ˆxˆext ˆEXPANDˆ ˆaddtXROOT ˆxssSYMXROOT ˆaddtMIN ˆxssSYMMIN ˆaddtMAX ˆxssSYMMAX ˆaddt< ˆxssSYM<? ˆaddt<= ˆxssSYM<=? ˆaddt> ˆxssSYM>? ˆaddt>= ˆxssSYM>=? ˆaddt== ˆxssSYM=? ˆaddt!= Page 329 421 371 371 371 372 371 371 371 371 371 371 372 372 371 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 597 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># 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 G. Entries sorted by Address Name ˆCLEANIDLAM ˆssSYMDER ˆSYMDER ˆDERIVext ˆsiSYMDER ˆDERIVIDNT ˆDERIVIDNT1 ˆDERIV ˆMETADERIV ˆDO>STRID ˆMETADEROP ˆMETADER+ ˆMETADERˆMETADER* ˆ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 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 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 Name ˆckaddt+ ˆckaddtˆVERNUMext ˆMENUXYext ˆSAVECASFLAGS ˆSAFEPURGE ˆRESTORECASFLAGS ˆCASFLAGEVAL ˆFLAGEXPAND ˆEXPANDBOTH ˆFLAGFACTOR ˆFLAGLISTEXEC ˆFLAGSYMBEXEC ˆFLAGIDNTEXEC ˆFLAGINTVX ˆDERVX ˆSOLVEXFLOAT ˆSYMLIMIT ˆFLAGMATRIXLIMIT ˆTAYLOR0 ˆFLAGSERIES ˆPLOTSTK ˆPLOTADD ˆFLAGIBP ˆFLAGPREVAL ˆMATRIXRISCH ˆFLAGRISCH ˆFLAGDERIV ˆFLAGLAP ˆFLAGILAP ˆFLAGDESOLVE ˆFLAGLDSSOLV ˆFLAGLDECSOLV ˆFLAGTEXPAND ˆFLAGLIN ˆFLAGTSIMP ˆFLAGLNCOLLECT ˆFLAGEXPLN ˆFLAGSINCOS ˆFLAGTLIN ˆFLAGTCOLLECT ˆFLAGTRIG ˆFLAGTRIGCOS ˆFLAGTRIGSIN ˆFLAGTRIGTAN ˆFLAGTAN2SC ˆFLAGHALFTAN ˆFLAGTAN2SC2 Page 360 361 408 409 408 167 408 408 411 411 411 411 411 411 412 412 412 412 412 412 412 412 412 412 412 412 412 412 412 412 412 412 413 413 413 413 413 413 413 413 413 413 413 413 413 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 599 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 415 345 346 346 346 346 415 415 415 415 345 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+ ˆEvalNoCKxˆEvalNoCKx/ ˆEvalNoCKxˆ ˆEvalNoCKxCHS ˆEvalNoCKxINV 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 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 G. Entries sorted by Address 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 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 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 Name ˆRFACT2ext ˆRFACTSTEP3 ˆRFACTSTEP5 ˆMETASOLV ˆMETASOLVOUT ˆMETASOLV2 ˆMETASOLV4 ˆADDMULTIPL ˆFACTOOBJext ˆSLVARext ˆSIMPLIFY ˆSIMP1ext ˆSYMEXPAN ˆSIMPVAR ˆSIMPIDNT ˆRCLALLIDNT ˆRCL1IDNT ˆSIMPSYMBS ˆSYMINTEGRAL ˆSIMPUSERFCN ˆEVALUSERFCN ˆSIMP| ˆDENOLCMext ˆMETADENOLCM ˆSWPSIMPNDXF ˆSIMPNDXFext ˆSIMPext ˆSIMPEXTOK ˆMAKEPROFOND ˆSLOWSIMP2L ˆSIMPGCDext ˆSIMP3ext ˆSIMP3LISText ˆSIMP3LSTSLOW ˆLPGCDext ˆSLOWGCDext ˆQGcd ˆGCDext ˆCGCDext ˆCMODext ˆZGCDext ˆZGcd ˆTSIMP2ext ˆTSIMPext ˆTSIMP3ext ˆLASTCOMP ˆSQFF2ext ˆPPZ Page 383 383 383 383 383 383 384 384 353 354 354 354 354 423 424 354 354 354 354 358 358 424 424 354 378 354 354 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 601 Page 424 424 424 390 424 424 424 424 424 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 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+ ˆSINEXPAˆSINEXPA* ˆSINEXPA*1 ˆCOSEXPA ˆMETACOSEXPA ˆCOSEXPA+ ˆCOSEXPAˆCOSEXPA* ˆCOSEXPA*1 ˆEXPEXPA ˆMETAEXPEXPA ˆEXPEXPA+ ˆEXPEXPAˆEXPEXPA* ˆEXPEXPANEG ˆEXPEXPA*1 ˆLNEXPA ˆMETALNEXPA ˆLNEXPA* ˆLNEXPA/ ˆLNEXPAˆ ˆLINEXPA ˆMTRIG2SYMB ˆLNCOLCext ˆMETATANEXPA 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 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 G. Entries sorted by Address Name ˆTEXPAext ˆMAT+ ˆMADD ˆMATˆMSUB ˆ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 Name ˆMATREFRREF ˆINXREDext ˆMETAMATRED ˆMETAPIVOT ˆPIVOTNORM ˆPIVOTFLOAT ˆSYSText ˆSTOSYSText ˆMAKESYSText ˆVARGENext ˆNULLVECTOR? ˆFINDELN ˆPULLEL[S] ˆBANGARRY ˆPUT[] ˆARSIZE ˆMATRIX>DIAG ˆMATRIXDIAG> ˆla+ELEMsym ˆINSERTROW[] ˆinsertrow[] ˆINSERTCOL[] ˆINSERT[]ROW[] ˆINSERT[]COL[] ˆMATRIXRCI ˆMATRIXRCIJ ˆMATRIXCSWAP ˆMATRIXRSWAP ˆMATRIX-ROW ˆMETAMAT-ROW ˆMATRIX-COL ˆMETAMATCSWAP ˆMETAMATRSWAP ˆSTOMAText ˆMATIDN ˆMATCON ˆMAKEARRY ˆOBJDIMS2MAT ˆLCPROG2M ˆMAKE2DMATRIX ˆmake2dmatrix ˆADDMATOBJext ˆVUNARYOP ˆVBINARYOP ˆPEVAL ˆMATEGVL ˆROOTM2ROOT ˆMADJ Page 341 341 341 341 341 342 342 342 339 342 342 343 343 64 343 343 343 343 343 344 344 344 341 341 344 344 344 344 344 344 344 344 337 337 337 337 337 337 337 345 345 345 345 345 385 345 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 ˆxssSYM- 603 Page 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 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 329 391 391 330 380 380 330 387 391 378 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 G. Entries sorted by Address 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-xˆ2/1+xˆ2 ˆSIN2TAN/2 ˆsin2tan/2 ˆ2x/1+xˆ2 ˆ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 423 325 423 423 423 423 423 77 356 351 365 365 351 365 365 351 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 Name ˆtan2tan/2 ˆaddtTAN/2 ˆTRIGTAN ˆCOS2TAN ˆcos2tan ˆSIN2TAN ˆsin2tan ˆTRIGext ˆHYP2EXPext ˆEXPLNext ˆSERIESEXPLN ˆLNP12LN ˆLOG2LN ˆALOG2EXP ˆEXPM2EXP ˆSQRT2LNEXP ˆsqrt2lnexp ˆTAN2EXP ˆtan2exp ˆASIN2LN ˆasin2ln ˆACOS2LN ˆacos2ln ˆTAN2SCext ˆTAN2SC ˆsin/cos ˆSIN2TCext ˆSIN2TC ˆcos*tan ˆCOS2ext ˆsqrt1-sinˆ2 ˆSIN2ext ˆsqrt1-cosˆ2 ˆATAN2Sext ˆATAN2ASIN ˆatan2asin ˆASIN2Text ˆASIN2ATAN ˆasin2atan ˆASIN2Cext ˆASIN2ACOS ˆpi/2-acos ˆpi/2-meta ˆACOS2Sext ˆpi/2-asin ˆACOS2ASIN ˆATAN2LNext ˆatan2ln Page 366 366 356 351 366 351 366 356 356 356 356 351 351 351 351 351 351 351 366 351 366 351 366 356 351 366 356 351 366 351 366 351 366 356 352 366 356 352 366 357 352 366 366 357 366 352 352 366 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 605 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 421 421 421 86 86 353 353 353 353 353 353 353 353 386 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! Page 386 386 386 386 386 386 386 386 387 387 387 387 387 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 G. Entries sorted by Address 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 387 387 387 387 387 387 387 387 396 396 396 396 396 396 396 396 396 396 396 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 Name ˆMZSQFF1 ˆMSECOSQFF ˆMLISTSQFF ˆMETASQFFext ˆSECOSQFFext ˆCSQFFext ˆSUMSQRext ˆVXXLext ˆMETALISTVXXL ˆVXXLFext ˆVXXL1ext ˆVXXL0 ˆVXXL2NR ˆVXXL2 ˆLIDNText ˆLVARXNXext ˆISPOLYNOMIAL? ˆ2POLYNOMIAL? ˆVXINDEP? ˆLVARXNX2ext ˆRLVARext ˆLLVARDext ˆVXLVARext ˆLVARext ˆVX>LVARext ˆVX> ˆVX! ˆprepvarlist ˆLIDNTLVAR ˆLISTOPRAC ˆLISTOPext ˆLISTOPSQRT ˆLVARDext ˆ>VARLIST ˆDEPTHext ˆDEPTHOBJext ˆTRIMext ˆPTrim ˆTRIMOBJext ˆNEWTRIMext ˆ>POLYTRIM ˆELMGext ˆSWAPRNEG ˆQNeg ˆRNEGext ˆSWAPRRE ˆRREext ˆSWAPRIM Page 396 425 397 397 333, 422 333 333 325 325 325 326 326 326 326 397 397 397 397 397 397 397 397 397 398 398 398 73 398 398 398 398 398 398 398 378 378 398 399 399 399 348 347 347 348 348 348 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 607 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 348 349 363 349 349 349 349 349 348 348 349 349 349 349 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 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 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 G. Entries sorted by Address 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 Name ˆListToArry ˆArryToMatrix ˆArryToList ˆDIMS ˆRunDoOldMatrix ˆRunDoNewMatrix ˆDoNewMatrixReal ˆDoNewMatrixCplx ˆDoOldMatrixReal ˆDoOldMatrixCplx Page 65 65 338 ˆDoNewMatrixRealOrCplx ˆ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 609 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 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 G. Entries sorted by Address 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 Name xWIREFRAME xPARSURFACE xGRIDMAP xYSLICE xSLOPEFIELD xPCONTOUR xDIFFEQ xVERSION xRECT xCYLIN xSPHERE xLININ xLIBEVAL xFLASHEVAL xCONLIB xCONST xFFT xIFFT xNDIST xPSDEV xPCOV xRKF xRKFSTEP xRKFERR xRRK xRRKSTEP xRSBERR xCOND xTRACE xSRAD xSNRM xRANK xLSQ xEGV xEGVL xSVD xSVL xLU xQR xLQ xSCHUR xRREF xRANM x→ROW xROW→ x→COL xCOL→ x→DIAG Page 475 466 460 476 471 466 457 475 469 456 471 463 463 459 456 456 459 462 465 467 466 469 469 469 470 470 470 456 474 471 471 468 464 458 458 473 473 464 468 464 470 470 468 470 470 455 455 457 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 xΔLIST xNSUB xENDSUB xSTREAM xΣLIST xΠLIST xDOLIST xREVLIST xSORT xZFACTOR xFANNING xDARCY xF0λ xSIDENS xTDELTA xTINC xgmol xlbmol xrpm xdB xPINIT xDRAW3DMATRIX x→KEYTIME xKEYTIME→ xXSERV xROMUPLOAD 611 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 456 466 458 463 463 476 469 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 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 G. Entries sorted by Address Name x→LANGUAGE xLANGUAGE→ x→FONT xFONT→ x→HEADER xHEADER→ x→NDISP xEDIT xVISIT xEDITB xVISITB xEQW xFILER xFONT8 xFONT7 xFONT6 xSREPL x→MINIFONT xMINIFONT→ xRENAME xUFL1→MINIF 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 Name xDISTRIB xEXP2POW xPOWEXPAND xTAN2CS2 xCIRC xC2P xP2C xMSLV xDOMAIN xSIMPLIFY xDROITE xSTORE xDEF xASSUME xUNASSUME xREWRITE xINTEGER xCONSTANTS xHYPERBOLIC xMODULAR xPOLYNOMIAL xTESTS xMATHS xCOLLECT xUNASSIGN xHELP xCASCMD xPUSH xPOP xDEGREE xDEDICACE xPOTENTIAL xVPOTENTIAL xRCLVX xSTOVX ˜BRStoC1 ˜BRbrowse ˜BRoutput ˜BRRclCurRow ˜BRRclC1 ˜MESRclEqn ˜UTVUNS1Arg ˜PCunpack ˜UTTYPEEXT0? ˜INTEMPOB? x→H xH→ x→A Page 473 455 455 471 455 455 468 472 246 171 478 478 478 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→ xA→H xH→A x→CD xCD→ xS→H xH→S x→LST x→ALG x→PRG xCOMP→ x→RAM xSREV xPOKE xPEEK xAPEEK xR˜SB xSB˜B xLR˜R xS˜N xLC˜C xASM→ xBetaTesting xCRLIB xCRC xMAKESTR xSERIAL xASM xER x→S2 xXLIB˜ xGETADR xGETNAME xGETNAMES xGETNEAR ˜xEXPAND ˜xFACTOR ˜xSUBST ˜xDERVX ˜xINTVX ˜xLIMIT ˜xTAYLOR0 ˜xSERIES ˜xSOLVEVX ˜xPLOT ˜xPLOTADD ˜xIBP ˜xPREVAL 613 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? 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 G. Entries sorted by Address 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 Name ˜xMAP ˜xXNUM ˜xXQ ˜xREORDER ˜xLVAR ˜xFXND ˜xEXLR ˜xLNAME ˜xADDTMOD ˜xSUBTMOD ˜xMULTMOD ˜xDIVMOD ˜xDIV2MOD ˜xPOWMOD ˜xINVMOD ˜xGCDMOD ˜xEXPANDMOD ˜xFACTORMOD ˜xRREFMOD ˜xMODSTO ˜xMENUXY ˜xKEYEVAL ˜xGROBADD ˜xSCROLL ˜xCASCFG ˜xMAIN ˜xBASE xALGB ˜xCMPLX ˜xTRIGO ˜xMATR ˜xDIFF ˜xARIT ˜xSOLVER ˜xEXP&LN ˜xEPSX0 ˜x? ˜x∞ ˜xPROMPTSTO ˜xVER Page 464 475 476 469 464 460 459 464 453 473 465 457 457 467 462 460 459 459 470 465 464 463 460 470 455 454 454 455 474 457 453 471 458 462 467 475