Sunteți pe pagina 1din 638

Programming in System RPL

Eduardo M Kalinowski Carsten Dominik

Second Edition

Preface to the Second Edition


Back in 1998, when the rst 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 rst edition of this document will nd 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 rst 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

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 rst edition throughly and gave many suggestions for this present edition. Many other people helped during the two editions of the book: Al Arduengo Jean-Yves Avenard Jurjen N.E. Bos Carlos Bourlot Sune Bredahl Jonathan Busby Cyrille de Brbisson Stefan Ehlen Len Fellman Peter Geelhoed Christoph Gieelink Raymond Hellstern Jordi Hidalgo Joe Horn Werner Huysegoms David Kastrup Dan Kirkland Piotr Kowalewski Daniel Lidstrm Andreas Matthias Andreas Mller Denis Martinez Hakim Mazouz Christian Meland John H Meyers Heiko Oberdiek Alberto Zamora Oyace Bernard Parisse Richard Pascal James M Prange Thomas Rast Eric Rechlin Melissa Reid Ricardo Blasco Serrano Gerald Squelart Pierre Tardy Jernej Zajc Adam Zwierko

If we forgot someone, please forgive us, and be sure we are grateful anyway.

iii

Disclaimer
This document is by Eduardo M Kalinowski and Carsten Dominik. It is distributed in the hope it will be useful for those who want to learn System RPL or want a reference about it, but it is provided as is, without warranty of any kind, either expressed or implied. In no event, we shall be liable to you for damages, including any general, special, incidental or consequential damages caused directly or indirectly by the use of the information provided here. We do not assure that any information here is right. Use it at your own risk. This document may be distributed only if in its whole, unmodied form; and if you do not charge anything for it (except nominal copying fees). Otherwise, we will want our share! The latest version of this document and its errata can be found at the homepage http://move.to/hpkb.

iv

Short Contents
Preface to the Second Edition Preface to the First Edition Acknowledgments Disclaimer 1 Introduction i ii iii iv 1

HP49 Objects

7
9 27 36 39 40 56 60 61 63 67 75 80 v

2 Binary Integers (BINTS) 3 Real Numbers 4 Complex Numbers 5 Integers (ZINTS) 6 Characters and Strings 7 Hex Strings 8 Identiers 9 Tagged Objects 10 Arrays 11 Composite Objects 12 Meta Objects 13 Unit Objects

vi 14 Symbolics 15 Graphics Objects (Grobs) 16 Library and Backup Objects

SHORT CONTENTS 85 89 99

II

General System RPL Entries

103
105 111 120 132 147 153 159 165 172 175 180 182

17 Stack Operations 18 Temporary Environments 19 Runstream Control 20 Conditionals 21 Loops 22 Error Handling 23 The Virtual Stack 24 Memory Operations 25 Time and Alarms 26 System Functions 27 Serial Communications 28 The HP49 Filer

III

Input and Output

189
191 202 209 213

29 Checking for Arguments 30 Keyboard Control 31 Using InputLine 32 The Parameterized Outer Loop

SHORT CONTENTS 33 Using the HP49 Browser 34 Using the HP48 Browser 35 Creating Input Forms 36 The Display 37 The Menu 38 Programming the HP49 Editor 39 Plotting

vii 225 235 248 268 284 295 315

IV

The HP49 CAS

319
321 325 327 336 347 359 371 381 386 393 395 400 403 405

40 Introduction to the HP49 CAS 41 Type Checking and Conversion 42 Integers 43 Matrices 44 Expression Manipulation 45 Symbolic Meta Handling 46 Polynomials 47 Root Finding 48 Calculus Operations 49 Summation 50 Modular Operations 51 Sign Tables 52 Errors 53 CAS Conguration

viii 54 CAS Menus 55 Internal Versions of User RPL Commands 56 Miscellaneous

SHORT CONTENTS 409 411 417

Appendices

427
429 447 453 478 480

A Development Tools B Creating Libraries C User RPL Commands D Library 256 and EXTABLE E Error Messages

VI

Index

497
499 557

F Entries sorted by Name G Entries sorted by Address

Contents
Preface to the Second Edition Preface to the First Edition Acknowledgments Disclaimer 1 Introduction 1.1 Your First System RPL Program . . . . . . . . . . . . . . . . . . . . 1.2 About the Entries Listing . . . . . . . . . . . . . . . . . . . . . . . . i ii iii iv 1 3 5

HP49 Objects
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7
9 10 10 21 22 23 25 27 28 28 30 31 31 31 33 35 36 ix

2 Binary Integers (BINTS) 2.1 Reference . . . . . . . . . . . . . 2.1.1 Built-in Binary Integers 2.1.2 Pushing Several BINTs 2.1.3 Conversion . . . . . . . . 2.1.4 Arithmetic Functions . 2.1.5 Tests . . . . . . . . . . .

3 Real Numbers 3.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Built-in Real Numbers . . . . . . . . . . . . 3.1.2 Built-in Extended Real Numbers . . . . . 3.1.3 Stack Manipulation Combined with Reals 3.1.4 Conversion . . . . . . . . . . . . . . . . . . . 3.1.5 Real Functions . . . . . . . . . . . . . . . . 3.1.6 Extended Real Functions . . . . . . . . . . 3.1.7 Tests . . . . . . . . . . . . . . . . . . . . . . 4 Complex Numbers

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

x 4.1 Reference . . . . . . . . . . . . . . . 4.1.1 Builtin Complex Numbers 4.1.2 Conversion . . . . . . . . . . 4.1.3 Functions . . . . . . . . . . 4.1.4 Tests . . . . . . . . . . . . . 5 Integers (ZINTS) 6 Characters and Strings 6.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Built-in Characters . . . . . . . . . . . . . . 6.1.2 Built-in Strings . . . . . . . . . . . . . . . . 6.1.3 Built-in Strings with Stack Manipulation 6.1.4 Conversion . . . . . . . . . . . . . . . . . . . 6.1.5 Management . . . . . . . . . . . . . . . . . 6.1.6 Parsing Strings . . . . . . . . . . . . . . . . 6.1.7 Decompilation . . . . . . . . . . . . . . . . . 6.1.8 String Tests . . . . . . . . . . . . . . . . . . 7 Hex Strings 7.1 Reference . . . . . . . . . . 7.1.1 Conversion . . . . . 7.1.2 General Functions 7.1.3 Tests . . . . . . . . 8 Identiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

CONTENTS . . . . . . . . . . . . . . . . . . . . . . . . . 36 36 37 37 38 39 40 41 41 43 46 46 47 50 51 55 56 56 56 57 58 60 61 61 63 64 64 65 66 67 68 68 71 71

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

9 Tagged Objects 9.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Arrays 10.1 Reference . . . . . . . . . . 10.1.1 General Functions 10.1.2 Conversion . . . . . 10.1.3 Statistics . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

11 Composite Objects 11.1 Reference . . . . . . . . . . . 11.1.1 General Operations 11.1.2 Building . . . . . . . 11.1.3 Exploding . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

CONTENTS 11.1.4 11.1.5 Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Secondaries . . . . . . . . . . . . . . . . . . . . . . . . . . .

xi 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

12 Meta Objects 12.1 Reference . . . . . . . . . . . . . . . . 12.1.1 Stack Functions . . . . . . . . 12.1.2 Combining Functions . . . . 12.1.3 Meta and Object Operations 12.1.4 Other Operations . . . . . . . 13 Unit Objects 13.1 Reference . . . . . . . . . . . . 13.1.1 Creating Units . . . . 13.1.2 General Functions . . 13.1.3 Arithmetic Functions 13.1.4 Tests . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

14 Symbolics 14.1 Reference . . . . . . . . . . . . . . . 14.1.1 General Operations . . . . 14.1.2 Other Functions . . . . . . 14.1.3 Meta Symbolics Functions

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

15 Graphics Objects (Grobs) 15.1 Reference . . . . . . . . . . . . . . . . . . . . 15.1.1 Built-in Grobs . . . . . . . . . . . . . 15.1.2 Dimensions . . . . . . . . . . . . . . 15.1.3 Grob Handling . . . . . . . . . . . . 15.1.4 Greyscale Graphics . . . . . . . . . . 15.1.5 Creating Menu Label Grobs . . . . 15.1.6 Converting Strings to Grobs . . . . 15.1.7 Creating Grobs from Other Objects 16 Library and Backup Objects 16.1 Reference . . . . . . . . . . 16.1.1 Port Operations . . 16.1.2 Rompointers . . . . 16.1.3 Libraries . . . . . . 16.1.4 Backup Objects . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

xii

CONTENTS

II

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 19 Runstream Control 19.1 Some Concepts . . . . . . 19.2 Runstream Commands . 19.3 Some Examples . . . . . . 19.4 Reference . . . . . . . . . 19.4.1 Quoting Objects . 19.4.2 Skipping Objects 111 111 112 113 114 116 116 116 116 120 120 122 124 128 130 131 132 132 133 133 135 135 137 137 140 142 143 144 146

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

20 Conditionals 20.1 Tests . . . . . . . . . . . . . . . . . . . . . . 20.2 If. . . Then. . . Else . . . . . . . . . . . . . . . 20.3 Case . . . . . . . . . . . . . . . . . . . . . . . 20.4 Reference . . . . . . . . . . . . . . . . . . . 20.4.1 Boolean Flags . . . . . . . . . . . . 20.4.2 General Tests . . . . . . . . . . . . 20.4.3 True/False Tests . . . . . . . . . . 20.4.4 Binary Integer Tests . . . . . . . . 20.4.5 Real and Complex Number Tests 20.4.6 Meta Object Tests . . . . . . . . . 20.4.7 General Object Tests . . . . . . . . 20.4.8 Miscellaneous . . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

21 Loops 147 21.1 Indenite Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 21.1.1 How Indenite Loops Work . . . . . . . . . . . . . . . . . . 148

CONTENTS 21.2 Denite Loops . . . . . . . . . . . 21.2.1 How a DO Loop Works . 21.3 Reference . . . . . . . . . . . . . 21.3.1 Indenite Loops . . . . . 21.3.2 Denite Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

xiii 149 150 150 150 151 153 153 154 155 156 156 157

22 Error Handling 22.1 Trapping Errors . . . . . . . . . . 22.1.1 The Protection Word . . . 22.2 Generating Errors . . . . . . . . . 22.3 Reference . . . . . . . . . . . . . . 22.3.1 General Words . . . . . . 22.3.2 Error Generating Words .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

23 The Virtual Stack 159 23.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 24 Memory Operations 24.1 Reference . . . . . . . . . . . . . . . . . . 24.1.1 Recalling, Storing and Purging . 24.1.2 Directories . . . . . . . . . . . . . 24.1.3 The Hidden Directory . . . . . . 24.1.4 Temporary Memory . . . . . . . 165 166 166 168 170 170

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

25 Time and Alarms 172 25.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 25.1.1 Alarms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 26 System Functions 175 26.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 26.1.1 User and System Flags . . . . . . . . . . . . . . . . . . . . 175 26.1.2 General Functions . . . . . . . . . . . . . . . . . . . . . . . 178 27 Serial Communications 180 27.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 28 The HP49 Filer 28.1 Using the Filer . . . . . . . . . . . . 28.1.1 The Filer_Type Argument . 28.1.2 The Filer_Path Argument . 28.1.3 The Filer_List Argument . 182 182 182 182 183

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

xiv 28.1.3.1 28.1.3.2 28.1.3.3 28.1.3.4 28.1.3.5 28.2 Reference . . . Name_Item . . . . . Location_Item . . . Action_Item . . . . . ExtraProgram_Item Key_Shortcut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

CONTENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 183 184 186 187 188

III Input and Output


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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

189
191 191 193 195 196 198 202 202 204 205 205 205 207 207 208

30 Keyboard Control 30.1 Key Locations . . . . . . . . . . 30.2 Waiting for a Key . . . . . . . . 30.3 Reference . . . . . . . . . . . . 30.3.1 Converting Keycodes . 30.3.2 Waiting for Keys . . . 30.3.3 The ATTN Flag . . . . 30.3.4 Bad Keys . . . . . . . . 30.3.5 User Keys . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

31 Using InputLine 209 31.1 Menu Key Assignments . . . . . . . . . . . . . . . . . . . . . . . . . 211 31.2 An Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 31.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 32 The Parameterized Outer Loop 32.1 Parameterized Outer Loop Words . . 32.2 The Display . . . . . . . . . . . . . . . 32.3 Error Handling . . . . . . . . . . . . . 32.4 Hard Key Assignments . . . . . . . . 32.5 Menu Key Assignments . . . . . . . . 32.6 Preventing Suspended Environments 32.7 The Exit Condition . . . . . . . . . . . 213 214 215 215 216 217 217 218

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

CONTENTS

xv

32.8 An Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 32.9 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 33 Using the HP49 Browser 33.1 The Choose Items meta . . . . . . 33.2 The Title String . . . . . . . . . . . 33.3 The Initially Selected Item . . . . 33.4 The Message Handler . . . . . . . 33.5 The Browser and Lams . . . . . . 33.6 Accessing the Selected Item . . . 33.7 Saving and Restoring the Screen 33.8 An Example . . . . . . . . . . . . . 33.9 Reference . . . . . . . . . . . . . . 225 226 226 226 226 228 228 229 230 233 235 235 238 239 239 239 239 240 244 247 248 249 249 251 252 253 253 253 257 257 262 262 262 262 262

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

34 Using the HP48 Browser 34.1 The ::Appl Parameter . . . . . . . . . . . . 34.2 The $Title Parameter . . . . . . . . . . . . 34.3 The ::Converter Parameter . . . . . . . . . 34.4 The {}Items Parameter . . . . . . . . . . . . 34.5 The Init Parameter . . . . . . . . . . . . . . 34.6 Typical Browser Usage . . . . . . . . . . . 34.7 An Example . . . . . . . . . . . . . . . . . . 34.8 Reference . . . . . . . . . . . . . . . . . . . 34.8.1 NULLLAMs Used by the Browser 35 Creating Input Forms 35.1 Label Denitions . . . . . . . . . . . . . 35.2 Field Denitions . . . . . . . . . . . . . 35.3 Label and Field Counts . . . . . . . . . 35.4 Message Handlers . . . . . . . . . . . . 35.5 The Title . . . . . . . . . . . . . . . . . . 35.6 Results Of The Input Form . . . . . . . 35.7 An Example . . . . . . . . . . . . . . . . 35.8 Reference . . . . . . . . . . . . . . . . . 35.8.1 Inputform . . . . . . . . . . . . 35.8.2 Input Form Messages . . . . . 35.8.2.1 IfMsgKeyPress 0 . 35.8.2.2 IfMsgLooseFocus 1 35.8.2.3 IfMsgNewField 2 . 35.8.2.4 IfMsgGetFocus 3 .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

xvi 35.8.2.5 35.8.2.6 35.8.2.7 35.8.2.8 35.8.2.9 35.8.2.10 35.8.2.11 35.8.2.12 35.8.2.13 35.8.2.14 35.8.2.15 35.8.2.16 35.8.2.17 35.8.2.18 35.8.2.19 35.8.2.20 35.8.2.21 35.8.2.22 35.8.2.23 35.8.2.24 IfMsgGetFieldValue 4 . . . . IfMsgSetFieldValue 5 . . . . IfMsgGetFieldGrob 6 . . . . IfMsgSetFirstField 7 . . . . . IfMsgFieldReset 10 . . . . . . IfMsgGetMenu 11 . . . . . . IfMsgGet3KeysMenu 12 . . . IfMsgCancel 13 . . . . . . . . IfMsgCancelKey 14 . . . . . IfMsgOK 15 . . . . . . . . . . IfMsgKeyOK 16 . . . . . . . . IfMsgChoose 17 . . . . . . . . IfMsgType 18 . . . . . . . . . IfMsgCalc 19 . . . . . . . . . IfMsgNewCommandLine 20 IfMsgOldCommandLine 21 . IfMsgCommandLineValid 22 IfMsgDecompEdit 23 . . . . . IfMsgNextChoose 24 . . . . . IfMsgEdit 25 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

CONTENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 263 263 264 264 264 265 265 265 265 266 266 266 266 267 267 267 267 267 267 268 268 269 270 270 271 271 272 272 272 272 273 274 275 277 277 279 279 280

36 The Display 36.1 Display Organization . . . . . . . . . . . 36.2 Preparing the Display . . . . . . . . . . . 36.3 Controlling Display Refresh . . . . . . . 36.4 Clearing the Display . . . . . . . . . . . . 36.5 Displaying Text . . . . . . . . . . . . . . . 36.5.1 System Font . . . . . . . . . . . . 36.5.2 Minifont . . . . . . . . . . . . . . 36.5.3 Displaying Warnings . . . . . . . 36.6 Reference . . . . . . . . . . . . . . . . . . 36.6.1 Display Organization . . . . . . 36.6.2 Preparing the Display . . . . . . 36.6.3 Immediate Refresh . . . . . . . . 36.6.4 Controlling Display Refresh . . 36.6.5 Clearing the Display . . . . . . . 36.6.6 Annunciator and Modes Control 36.6.7 Window Coordinates . . . . . . . 36.6.8 Scrolling the Display . . . . . . . 36.6.9 Displaying Objects . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

CONTENTS

xvii

36.6.10 Displaying Text . . . . . . . . . . . . . . . . . . . . . . . . . 281 36.6.11 Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 37 The Menu 37.1 Menu Format . . . . . . . . . . . . 37.2 Menu Properties . . . . . . . . . . 37.3 Reference . . . . . . . . . . . . . . 37.3.1 Menu Properties . . . . . 37.3.2 Building Menus . . . . . . 37.3.3 Menu Display . . . . . . . 37.3.4 Displaying Menu Labels . 37.3.5 General Entries . . . . . . 284 285 286 288 288 291 292 293 293 295 295 296 299 300 300 301 302 304 306 308 309 310 311

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

38 Programming the HP49 Editor 38.1 Terminology . . . . . . . . . . . . . . . . . . . . . . 38.2 Examples . . . . . . . . . . . . . . . . . . . . . . . 38.3 Executing External Commands in the Editor . . 38.4 Reference . . . . . . . . . . . . . . . . . . . . . . . 38.4.1 Status . . . . . . . . . . . . . . . . . . . . 38.4.2 Inserting Text . . . . . . . . . . . . . . . . 38.4.3 Deleting Text . . . . . . . . . . . . . . . . 38.4.4 Moving the Cursor . . . . . . . . . . . . . 38.4.5 Selection, Cut and Paste, the Clipboard 38.4.6 Search and Replace . . . . . . . . . . . . 38.4.7 Evaluation . . . . . . . . . . . . . . . . . . 38.4.8 Starting the Editor . . . . . . . . . . . . . 38.4.9 Miscellaneous . . . . . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

39 Plotting 315 39.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

IV

The HP49 CAS

319
321 321 322 323

40 Introduction to the HP49 CAS 40.1 Problems with These Chapters . . . . . . . . . . . . . . . . . . . . . 40.2 Symbolic Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40.3 A Few Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41 Type Checking and Conversion 325 41.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

xviii 42 Integers 42.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . 42.1.1 Built-in Integers . . . . . . . . . . . . . . . 42.1.2 Conversion Functions . . . . . . . . . . . . 42.1.3 General Integer Operations . . . . . . . . . 42.1.4 Integer Factorization and Prime Numbers 42.1.5 Gaussian Integers . . . . . . . . . . . . . . 42.1.6 Integer Tests . . . . . . . . . . . . . . . . . 43 Matrices 43.1 Reference . . . . . . . . . . . . . . . . . . . . . . . 43.1.1 Creating and Redimensioning Matrices 43.1.2 Conversion . . . . . . . . . . . . . . . . . . 43.1.3 Tests . . . . . . . . . . . . . . . . . . . . . 43.1.4 Calculations with Matrices . . . . . . . . 43.1.5 Linear Algebra and Gaussian Reduction 43.1.6 Linear System Solver . . . . . . . . . . . 43.1.7 Other Matrix Operations . . . . . . . . . 43.1.8 Eigenvalues, Eigenfunctions, Reduction

CONTENTS 327 327 327 327 329 330 333 334 336 337 337 338 339 339 341 342 342 345 347 347 347 351 353 355 356 357 359 359 359 360 365 367 368 370

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

44 Expression Manipulation 44.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . 44.1.1 Basic Operations and Function Application 44.1.2 Trigonometric and Exponential Operators . 44.1.3 Simplication, Evaluation and Substitution 44.1.4 Collection and Expansion . . . . . . . . . . . 44.1.5 Trigonometric Transformations . . . . . . . 44.1.6 Division, GCD and LCM . . . . . . . . . . . 45 Symbolic Meta Handling 45.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . 45.1.1 Basic Expression Manipulation . . . . . . . 45.1.2 Basic Operations and Function Application 45.1.3 Trigonometric and Exponential Operators . 45.1.4 Innity and Undefs . . . . . . . . . . . . . . 45.1.5 Expansion and Simplication . . . . . . . . 45.1.6 Tests . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

46 Polynomials 371 46.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371

CONTENTS 46.1.1 46.1.2 46.1.3 46.1.4 Computation with Polynomials Factorization . . . . . . . . . . . General Polynomial Operations Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

xix 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 Conguration 405 53.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 54 CAS Menus 409 54.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 55 Internal Versions of User RPL Commands 411 55.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 56 Miscellaneous 417

xx 56.1 Reference . . . . . . . . . . . . . . . . . . 56.1.1 Verbose Mode Display Routines 56.1.2 Evaluation . . . . . . . . . . . . . 56.1.3 Conversion . . . . . . . . . . . . . 56.1.4 Qpi . . . . . . . . . . . . . . . . . 56.1.5 Innity . . . . . . . . . . . . . . . 56.1.6 Built-In Constants . . . . . . . . 56.1.7 List Application . . . . . . . . . . 56.1.8 Irrquads . . . . . . . . . . . . . . 56.1.9 Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

CONTENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 417 417 418 418 419 420 420 421 422

Appendices
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

427
429 430 430 432 435 435 437 437 438 439 439 439 440 441 444 445 447 447 449 449 450 452

A Development Tools A.1 The Entry Points Library . . . . . . . . . . . . . . . A.2 About Key Assignments . . . . . . . . . . . . . . . . A.3 Hacking Tools . . . . . . . . . . . . . . . . . . . . . . A.3.1 Operating Tools for the HP49 . . . . . . . A.4 The Compiler . . . . . . . . . . . . . . . . . . . . . . A.4.1 MASD and the Different Kinds of Entries A.4.2 MASDs Special Features . . . . . . . . . . A.4.2.1 Unnamed Local Variable Binding A.4.2.2 Including Source Files . . . . . . A.5 Disassembly . . . . . . . . . . . . . . . . . . . . . . . A.5.1 Using Nosy . . . . . . . . . . . . . . . . . . A.5.2 Using CQIF? . . . . . . . . . . . . . . . . . A.6 The Editor, and Emacs . . . . . . . . . . . . . . . . . A.7 Debugging . . . . . . . . . . . . . . . . . . . . . . . . A.8 JAZZ for the HP49 . . . . . . . . . . . . . . . . . . . B Creating Libraries B.1 The Special Variables . . . . . . . . . . . . . B.2 The Library Message Handler . . . . . . . . B.2.1 Menu Extensions . . . . . . . . . . . B.2.2 Online Help for Libary Commands B.2.3 The Library Menu Message . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

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

Index

497
499 557

F Entries sorted by Name G Entries sorted by Address

Chapter 1 Introduction
If you know how to create programs in User RPL (if you do not, you should learn it before you continue reading this book), then you only know part of what the HP49G calculator can do. The System RPL programming language gives you power to do many things which you could not even imagine. For example, in System RPL you can handle all object types available. User RPL only gives access to some of them. Or you can do math with 15-digit accuracy, use arrays with non-numeric elements, and much more. System RPL can also be used to do the same things as a User RPL program would do, but much faster. But before we start talking of System RPL, let us go back to User RPL to explain how it really works. We know you are anxious to start with the big thing right now, but the following information is important for a good understanding of System RPL. HP49 programs (both User and System) are not stored internally using the names of the commands. Only the addresses of the objects are stored. Each of these addresses takes only 2.5 bytes (or more, if the address is a rompointer or ashpointer). When a program is run, the only thing that is actually done is a kind of gosub to that address. This way of storing programs serves two purposes. 2.5 bytes is less than the name of most commands, so the program needs less memory. And execution of the program is much faster since during execution, looking up the addresses of names is no longer necessary. Most of the times, the address points to another program with more jumps to other programs with more jumps, and so on. . . The calculator keeps track of holding the address to which jump back, and you can have as many jumps as necessary without worrying about it. When the called program ends, you return to where you were before. Of course, the jumps must end somewhere, either in a program written in machine language or in an object that just puts itself in the stack (numbers, strings, etc). This is quite similar to the concept of calling a function or sub-routine in high-level languages. But if the programs are just addresses, how can they be edited? The an1

1. Introduction

swer is that the calculator has a table of the User commands names and their corresponding addresses. So, when you put a User RPL program in the stack, the HP searches the table to get the name of the commands corresponding to the addresses stored in memory, and then displays the program in a readable form. You can then edit it, and after the edition is done the table is searched again for the addresses of the commands entered, and only these addresses are stored in memory. This is why it takes a long time to edit a long User RPL program, but it is also what makes them fast to run. This all works as long as all the commands have names. Guess what? There are over four thousand commands without names. This is one of the distinctions between User and System RPL. User RPL, the language described in the manual (the language), can only access the named commands. (Actually, it can access the unnamed commands via the commands SYSEVAL, LIBEVAL and FLASHEVAL, as long as you know the address of the command. But this is not efcient (except for an occasional use)). System RPL can access all commands. Because of that, System RPL programs cannot be edited directly. Special tools are needed for that. In Appendix A you will nd information about the available tools for writing System RPL programs. Fortunately, all you need is built-in in the calculator, or is in libraries that can be downloaded to the calculator. Programming in System RPL is more powerful and much faster, because it does no error checking. In System RPL, the programmer must be sure that no error occurs, otherwise a crash might happen. For example, if a command requires two arguments in the stack and they are not there, or if they are not of the type the function requires, a warmstart or even a memory loss could happen. Naturally, there are commands for checking if there are enough arguments, for their types, and for other possible error conditions. The difference is that you probably just need to check if all arguments are present once, when the program starts. You do not need to repeat the check later. In User RPL, every single command has error checking, so tests are done unnecessarily, slowing the program. At this point, you might be wondering, if the commands do not have names, how can you program in System RPL? As said before, all commands have addresses, so you can call the address directly, using a structure like PTR <address>, and whatever is at that address will be executed. But there is an easier way. The commands have names. The names simply are not stored in the HP49 in the same way the the names of User commands are. But the HP de-

1.1. Your First System RPL Program

sign team has given them names, and they are stored in the tools for creating System RPL programs. You write a program using those names, and then the System RPL compiler searches the names in the tables, and converts them to addresses. This is called compiling or assembling. Some tools can also do the opposite: convert the addresses into command names. This is called decompiling or disassembling. Some of the commands are classied as supported: they are guaranteed to stay at the same memory location in all ROM versions of the calculator, i.e., their address are not going to change, so programmers can use them safely. (Note that this does not mean they will be in the same address in different calculators, such as the HP48 and HP49.) But there are also commands that are classied as unsupported. For these, there is not guarantee that they will stay at the same address in different ROM versions. Unsupported commands are not listed in the tables of compilers, so you cannot enter their names and expect to have their address in the resulting program. You have to either call them directly by their address, or name the command yourself. In the entries listings, the names of unsupported entries will be enclosed in single parenthesis, like (CURSOR@@). Note that all unsupported entries listed in this book are, however, stable. It has been indicated by the HP design team that all HP49G addresses in the ranges 025ECh0B3C7h and 25565h40000h will very likely not change, even the unsupported commands in these ranges. Actually, there are three kinds of entries: the description above dealt mainly with normal 2.5-byte addresses, which point directly to some ROM address. Most entries are of this kind. But there are also rompointer and ashpointer entries. Rompointers point to commands inside a library. Their names start with . Flashpointers, which only exist in the HP49, point to sub-routines inside the ash memory. Their names start with . Appendix A will describe what is necessary in order to use each kind of entries with HP49 compiler.

1.1

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 le, you will nd it with the name first.

4
1 :: CK1NOLASTWD CK&DISPATCH1 BINT1 :: %2 %^ %PI %* ; ;

1. Introduction

(check if there is an argument) (check if it is a real number) (if it is) (square the radius) (put PI in the stack) (and multiply)

Before we start analyzing it, it is important to note that System RPL is case-sensitive, so pi is different from PI, which is different from pI. Be careful when typing. Also, as you might have guessed, everything between ( )s is considered a comment. Lines that have a * in the rst column are also comments. The rst line contains the start of secondary (i.e., program) marker, :: (called DOCOL). The end marker is ; (SEMI). Following, there is the command CK1NOLASTWD. This command checks if there is one argument in the stack, and if there is not, generates a Too Few Arguments error. The next command, CK&DISPATCH0, checks the argument type and allows the programmer to do different things for different argument types. Our program only supports one argument type: real numbers (represented here by BINT1, or the number one as a system binary see Chapter 2). If any other argument type is entered, a Bad Argument Type error will be produced. Argument checking is described in detail in Chapter 29. After that, there is the code to execute if the argument is a real number. Note that the code is between :: and ;. This is because only one object is expected after the argument type. Here, this one object is a secondary (subprogram), one kind of composite object: it is only one object, but with other objects inside it. So if we want to evaluate more than one object, they must be included in a secondary. This is similar to enclosing several statments between braces in C or between begin and end in Pascal. The rest of the program is very simple. The number two is put in the stack, and the radius (entered by the user) is raised to that power. Finally , is put in the stack, and the squared radius is multiplied by it. The stack now contains the area. This program is 25 bytes long, as opposed to the 20 of the User RPL program SQ p * ->NUM . However, the User RPL version took 0.0156 seconds to calculate (with radius 1). The System RPL took only 0.0019 seconds. Note that, even if this System RPL program is longer than an equivalent in User RPL, this generally does not happen.

1.2. About the Entries Listing

1.2

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 innite precision integer positive innite precision integer symbolic unit object list array vector matrix polynom, a list of Qs ZINT or P meta object graphical object menu: a program or a list sign table

UserRPL stack diagrams use some additional abbreviations: Abbreviation x, y c, (,) # Meaning real, list, generic UserRPL object complex number hex string (User binary integer)

6 Abbreviation m, n date name prog, prg f, func F Meaning angle (a real number) integer (ZINT or real) date in DD.MMYYYY or MM.DDYYYY format global name program function integral of f

1. Introduction

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 RSB and SBB 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 ve bytes. The word BINT6, as all other commands (except rompointer and ashpointer 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

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 :: 13 (13d or Dh) # D (the same, using preferred method) BINT13 (in this case, this method is shorter) ;

2.1
2.1.1

Reference
Built-in Binary Integers
Name BINT0 BINT1 BINT2 BINT3 BINT4 BINT5 BINT6 BINT7 BINT8 BINT9 BINT10 Description 0d 0h aka: ZERO, any 1d 1h aka: ONE, real, MEMERR 2d 2h aka: TWO, cmp 3d 3h aka: THREE, str 4d 4h aka: FOUR, arry 5d 5h aka: FIVE, list 6d 6h aka: SIX, id, idnt 7d 7h aka: SEVEN, lam 8d 8h aka: EIGHT, seco 9d 9h aka: NINE, symb 10d Ah aka: TEN, sym

Addr. 33107 33111 3311B 33125 3312F 33139 33143 3314D 33157 33161 3316B

2.1. Reference Addr. 33175 3317F 33189 33193 3319D 331A7 331B1 331BB 331C5 331CF 331D9 331E3 331ED 331F7 33201 3320B 33215 3321F 33229 Name BINT11 BINT12 BINT13 BINT14 BINT15 BINT16 BINT17 BINT18 BINT19 BINT20 BINT21 BINT22 BINT23 BINT24 BINT25 BINT26 BINT27 BINT28 BINT29 Description 11d Bh aka: ELEVEN, hxs 12d Ch aka: TWELVE, grob 13d Dh aka: TAGGED, THIRTEEN 14d Eh aka: EXT, FOURTEEN, unitob 15d Fh aka: FIFTEEN, rompointer 16d 10h aka: REALOB, SIXTEEN 17d 11h aka: SEVENTEEN, 2REAL, REALREAL 18d 12h aka: EIGHTEEN 19d 13h aka: NINETEEN 20d 14h aka: TWENTY 21d 15h aka: TWENTYONE 22d 16h aka: TWENTYTWO 23d 17h aka: TWENTYTHREE 24d 18h aka: TWENTYFOUR 25d 19h aka: TWENTYFIVE 26d 1Ah aka: REALSYM, TWENTYSIX 27d 1Bh aka: TWENTYSEVEN 28d 1Ch aka: TWENTYEIGHT 29d 1Dh aka: TWENTYNINE

11

12 Addr. 33233 3323D 33247 33251 3325B 33265 3326F 33279 33283 3328D 33297 332A1 332AB 332B5 332BF 332C9 332D3 332DD 332E7 Name BINT30 BINT31 BINT32 BINT33 BINT34 BINT35 BINT36 BINT37 BINT38 BINT39 BINT40 BINT41 BINT42 BINT43 BINT44 BINT45 BINT46 BINT47 BINT48

2. Binary Integers (BINTS) Description 30d 1Eh aka: REALEXT, THIRTY 31d 1Fh aka: THIRTYONE 32d 20h aka: THIRTYTWO 33d 21h aka: THIRTYTHREE 34d 22h aka: THIRTYFOUR 35d 23h aka: THIRTYFIVE 36d 24h aka: TTHIRTYSIX 37d 25h aka: THIRTYSEVEN 38d 26h aka: THIRTYEIGHT 39d 27h aka: THIRTYNINE 40d 28h aka: FORTY, FOURTY 41d 29h aka: FORTYONE 42d 2Ah aka: FORTYTWO 43d 2Bh aka: FORTYTHREE 44d 2Ch aka: FORTYFOUR 45d 2Dh aka: FORTYFIVE 46d 2Eh aka: FORTYSIX 47d 2Fh aka: FORTYSEVEN 48d 30h aka: FORTYEIGHT

2.1. Reference Addr. 332F1 332FB 33305 3330F 33319 33323 3332D 33337 33341 3334B 33355 3335F 33369 33373 3337D 33387 33391 3339B 333A5 Name BINT49 BINT50 BINT51 BINT52 BINT53 BINT54 BINT55 BINT56 BINT57 BINT58 BINT59 BINT60 BINT61 BINT62 BINT63 BINT64 BINT65 BINT66 BINT67 Description 49d 31h aka: FORTYNINE 50d 32h aka: FIFTY 51d 33h aka: FIFTYONE 52d 34h aka: FIFTYTWO 53d 35h aka: FIFTYTHREE, STRLIST, THREEFIVE 54d 36h aka: FIFTYFOUR 55d 37h aka: FIFTYFIVE 56d 38h aka: FIFTYSIX 57d 39h aka: FIFTYSEVEN 58d 3Ah aka: FIFTYEIGHT 59d 3Bh aka: FIFTYNINE 60d 3Ch aka: SIXTY 61d 3Dh aka: SIXTYONE 62d 3Eh aka: SIXTYTWO 63d 3Fh aka: SIXTYTHREE 64d 40h aka: BINT40h, SIXTYFOUR, YHI 65d 41h aka: ARRYREAL 66d 42h aka: FOURTWO 67d 43h aka: FOURTHREE

13

14 Addr. 333AF 333B9 333C3 333CD 333D7 333E1 333EB 333F5 333FF 33409 33413 3341D 33427 33431 3343B 33445 3344F 33459 33463 3346D 33477 33481 3348B 33495 3349F Name BINT68 BINT69 BINT70 BINT71 BINT72 BINT73 BINT74 BINT75 BINT76 BINT77 BINT78 BINT79 BINT80 BINT81 BINT82 BINT83 BINT84 BINT85 BINT86 BINT87 BINT88 BINT89 BINT90 BINT91 BINT92

2. Binary Integers (BINTS) Description 68d 44h aka: SIXTYEIGHT 69d 45h aka: FOURFIVE 70d 46h aka: SEVENTY 71d 47h 72d 48h 73d 49h 74d 4Ah aka: SEVENTYFOUR 75d 4Bh 76d 4Ch 77d 4Dh 78d 4Eh 79d 4Fh aka: SEVENTYNINE 80d 50h aka: EIGHTY 81d 51h aka: EIGHTYONE, LISTREAL 82d 52h aka: LISTCMP 83d 53h aka: FIVETHREE 84d 54h aka: FIVEFOUR 85d 55h aka: 2LIST 86d 56h aka: FIVESIX 87d 57h aka: LISTLAM 88d 58h 89d 59h 90d 5Ah 91d 5Bh aka: BINT_91d 92d 5Ch

2.1. Reference Addr. 334A9 334B3 334BD 334C7 334D1 334DB 334E5 334EF 334F9 33503 3350D 33517 33521 3352B 33535 3353F 33549 33553 3355D 33567 33571 3357B 33585 3358F 33599 335A3 335AD 335B7 335C1 335CB 335D5 335DF Name BINT93 BINT94 BINT95 BINT96 BINT97 BINT98 BINT99 BINT100 BINT101 BINT102 BINT103 BINT104 BINT105 BINT106 BINT107 BINT108 BINT109 BINT110 BINT111 BINT112 BINT113 BINT114 BINT115 BINT116 BINT117 BINT118 BINT119 BINT120 BINT121 BINT122 BINT123 BINT124 Description 93d 5Dh 94d 5Eh 95d 5Fh 96d 60h aka: BINT_96d 97d 61h aka: IDREAL 98d 62h 99d 63h 100d 64h aka: ONEHUNDRED 101d 65h 102d 66h 103d 67h 104d 68h 105d 69h 106d 6Ah 107d 6Bh 108d 6Ch 109d 6Dh 110d 6Eh 111d 6Fh aka: char 112d 70h 113d 71h 114d 72h 115d 73h aka: BINT_115d 116d 74h aka: BINT_116d 117d 75h 118d 76h 119d 77h 120d 78h 121d 79h 122d 7Ah aka: BINT_122d 123d 7Bh 124d 7Ch

15

16 Addr. 335E9 335F3 335FD 33607 33611 3361B 33625 3362F 33639 33643 3364D 33657 3EAFB 3366B 33675 3367F 39E6B 33689 33693 3369D 336A7 336B1 336BB 3BD4C 336C5 38275 336CF 336D9 3E7DA 336E3 3BD65 336ED 336F7 33701 3370B 33715 Name BINT125 BINT126 BINT127 BINT128 BINT129 BINT130 BINT131 (#8F) SYMBREAL (#92) (#9A) SYMBUNIT (#9F) SYMOB SYMREAL (#A2) (#A4) (#A5) SYMID SYMLAM (#A9) SYMSYM SYMEXT (#AF) (HXSREAL) (#BB) (2HXS) BINTC0h (#C8) 2GROB (#CF) TAGGEDANY EXTREAL EXTSYM 2EXT ROMPANY

2. Binary Integers (BINTS) Description 125d 7Dh 126d 7Eh 127d 7Fh 128d 80h aka: BINT80h 129d 81h 130d 82h aka: BINT130d, BINT_130d, XHI-1 131d 83h aka: BINT_131d, BINT131d, XHI 143d 8Fh 145d 91h 146d 92h 154d 9Ah 158d 9Eh 159d 9Fh 160d A0h 161d A1h 162d A2h 164d A4h 165d A5h 166d A6h 167d A7h 169d A9h 170d AAh 174d AEh 175d AFh 177d B1h 187d BBh 187d BBh 192d C0h 200d C8h 204d CCh 207d CFh 208d D0h 225d E1h 234d EAh 238d EEh 240d F0h

2.1. Reference Addr. 3371F 33729 33733 3373D 33747 33751 3375B 33765 3E17B 3376F 33779 2777E 33783 3378D 33797 337A1 337AB 337B5 337BF 337C9 337D3 337DD 337E7 337F1 337FB 33805 3380F 33819 3A1C2 33823 3B9FA 3C11E 3B928 3382D 33837 3BA2D 3B93D 33841 3C10F Name BINT253 BINT255d REALOBOB #_102 #SyntaxErr (BINT_263d) (#110) 3REAL (#111) (Err#Kill) (Err#NoLstStk) (#12F) (#NoRoomForSt) (#132) (REALSTRSTR) (#134) (#135) (#136) (#137) (#138) (#139) (#13A) (#13B) (#13D) (#13E) INTEGER337 (#200) (Err#NoLstArg) (#304) STRREALREAL (#313) (#410) (#411) (ARRYREALREAL) (#412) (#414) (#415) (#444) (#450) Description 253d FDh 255d FFh 256d 100h 258d 102h 262d 106h 263d 107h 272d 110h 273d 111h 273d 111h 291d 123h 292d 124h 303d 12Fh 305d 131h 306d 132h 307d 133h 308d 134h 309d 135h 310d 136h 311d 137h 312d 138h 313d 139h 314d 13Ah 315d 13Bh 317d 13Dh 318d 13Eh 337d 151h 512d 200h 517d 205h 772d 304h 785d 311h 787d 313h 1040d 410h 1041d 411h 1041d 411h 1042d 412h 1044d 414h 1045d 415h 1092d 444h 1104d 450h

17

18 Addr. 3B952 3384B 33855 3BA18 3B913 3A12D 3385F 33869 3BA09 33873 277F6 27800 2780A 27814 2781E 27828 27832 2783C 27846 2768E 27698 3387D 276AC 276B6 276C0 276CA 276D4 276DE 276E8 27792 2779C 277A6 277B0 277BA 277C4 277CE 277D8 277E2 277EC Name (#451) (ARRYLISTREAL) (#452) (#454) (#455) (#4FF) (#510) (#511) (#515) (#550) (#605) (#606) (#607) (#608) (#609) (#60A) (#60B) (#60C) (#60D) (#60E) (#60F) (IDREALOB) (#611) (#612) (#613) (#614) (#615) (#616) (#617) (#618) (#619) (#61A) (#61B) (#61C) (#61D) (#61E) (#61F) (#620) (#621) Description 1105d 451h 1105d 451h 1106d 452h 1108d 454h 1109d 455h 1279d 4FFh 1296d 510h 1297d 511h 1301d 515h 1360d 550h 1541d 605h 1542d 606h 1543d 607h 1544d 608h 1545d 609h 1546d 60Ah 1547d 60Bh 1548d 60Ch 1549d 60Dh 1550d 60Eh 1551d 60Fh 1552d 610h 1553d 611h 1554d 612h 1555d 613h 1556d 614h 1557d 615h 1558d 616h 1559d 617h 1560d 618h 1561d 619h 1562d 61Ah 1563d 61Bh 1564d 61Ch 1565d 61Dh 1566d 61Eh 1567d 61Fh 1568d 620h 1569d 621h

2. Binary Integers (BINTS)

2.1. Reference Addr. 276F2 276FC 27706 27710 2771A 27724 2772E 27738 27742 27788 33887 33891 3C17A 3C16B 08DF7 27878 3B976 3C83C 3B967 3C81E 3389B 338A5 338AF 338B9 3E7FF 3E759 3E7E9 3E743 2774C 27756 27882 338C3 27760 2776A 27774 338CD 338D7 338E1 338EB Name (#622) (#623) (#624) (#628) (#629) (#62A) (#62B) (#62C) (#62D) (#62E) (IDLISTOB) (#700) (#710) (#750) (#7FF) (#800) (#822) (#82C) (#855) (#85C) (#861) (#862) (#865) (#86E) (#8F1) (#8FD) (#9F1) (#9FD) (#A01) (#A02) Attn# ATTNERR (#A04) (#A05) (#A06) (#A11) (#A12) (#A1A) (#A21) Description 1570d 622h 1571d 623h 1572d 624h 1576d 628h 1577d 629h 1578d 62Ah 1579d 62Bh 1580d 62Ch 1581d 62Dh 1582d 62Eh 1616d 650h 1792d 700h 1808d 710h 1872d 750h 2047d 7FFh 2048d 800h 2082d 822h 2092d 82Ch 2133d 855h 2140d 85Ch 2145d 861h 2146d 862h 2149d 865h 2158d 86Eh 2289d 8F1h 2301d 8FDh 2545d 9F1h 2557d 9FDh 2561d A01h 2562d A02h 2563d A03h 2563d A03h 2564d A04h 2565d A05h 2566d A06h 2577d A11h 2578d A12h 2586d A1Ah 2593d A21h

19

20 Addr. 338F5 338FF 33909 33913 3391D 33927 33931 3393B 33945 3394F 33959 33963 3396D 33977 3C800 3C7E2 3B904 3B8F5 33981 3398B 3C8D0 03FEF 03FF9 03F8B 03FDB 03FA9 03F95 03F9F 20D6F 03FBD 03FE5 03FA9 03FD1 3C8DF 3D50D 3D52B 3D51C 2C4D2 3B7AD Name (#A22) (#A2A) (#A61) (#A62) (#A65) (#A6E) (#AA1) (#AA2) (#AAA) (#C06) (#C07) (#C08) Connecting (#C0B) (#C2C) (#C5C) (#C22) (#C55) #CAlarmErr EXTOBOB (#2111) (#2614) (#2686) TYPEREAL (TYPEEREL) TYPEIDNT (TYPECMP) (TYPELIST) (TYPERRP) (TYPESYMB) (TYPEEXT) (#2E48) (TYPELAM) (#5B11) (#A110) (#A1A0) (#AA10) (#AAA0) (#BBBB) Description 2594d A22h 2602d A2Ah 2657d A61h 2658d A62h 2661d A65h 2670d A6Eh 2721d AA1h 2722d AA2h 2730d AAAh 3078d C06h 3079d C07h 3080d C08h 3082d C0Ah 3083d C0Bh 3116d C2Ch 3164d C5Ch 3106d C22h 3157d C55h 3583d DFFh 3584d E00h 8465d 2111h 9748d 2614h 9862d 2686h 10547d 2933h 10581d 2955h 10568d 2948h 10615d 2977h 10868d 2A74h 10902d 2A96h 10936d 2AB8h 10970d 2ADAh 11848d 2E48h 11885d 2E6Dh 23313d 5B11h 41232d A110h 41376 A1A0h 43536d AA10h 43680d AAA0h 48059d BBBBh

2. Binary Integers (BINTS)

2.1. Reference Addr. 08F1F 38266 03880 091B4 350F5 0803F 08ECE 0657E 33995 03826 39277 038DC 3399F Name (#D6A8) (#FFFF) (#102A8) (#2D541) (#37258) (#414C1) (#536A8) (#61441) #EXITERR (#A8241) (#B437D) (#E13A8) MINUSONE Description 54952d D6A8h 65535d FFFFh 66216d 102A8h 185665d 2D541h 225880d 37258h 267457d 414C1h 341672d 536A8h 398401d 61441h 458752d 70000h 688705d A8241h 738173d B437Dh 922536d E13A8h 1048575d FFFFFh

21

2.1.2
Addr. 37287 37294 37305 36B12 37315 37328 3733A 3734A 3735C 3736E 37380 37394 373A8 3558C 355A5 3596D 36AD6 36AEA 36B26 36AFE

Pushing Several BINTs


Name ZEROZERO #ZERO#ONE #ZERO#SEVEN ONEONE #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 Addr. 35E75 360BB 36568 35EA2 3657C Name ZEROSWAP ZEROOVER ZEROFALSE ONESWAP ONEFALSE Description ( ob #0 ob ) ( ob ob #0 ob ) ( #0 F ) ( ob #1 ob ) ( #1 F )

2. Binary Integers (BINTS)

2.1.3
Addr. 262F1 35D08 35EB6 3F481 262EC 2F244 2F31F 05A03 2F17E

Conversion
Name COERCE COERCEDUP COERCESWAP COERCE2 %ABSCOERCE (COERCE&CKSGN) C%># HXS># 2HXSLIST? Description ( % # ) ( % # # ) ( ob % # ob ) ( % %' # #' ) ( % # ) ( % # flag ) TRUE if real is greater 0, else FALSE. ( C% # #' ) ( hxs # ) ( { hxs hxs' } # #' ) Converts list of two hxs to two bints. Generates "Bad Argument Value" for invalid input. ( chr # ) ( Z # ) Convert Z to bint. Returns FFFFF for overows. Returns 0 for negative numbers. ( z # ) Coerces Z to #, overow error if Z<0 or Z>9999. 10000 is used to insure that the #*6 can be represented in BCD on a 5 nibbles eld. ( z2 z1 #2 #1 ) Converts 2 zints to bints.

05A51 0EF006

CHR># Z2BIN

19D006

Z>#

0F0006

COERCE2Z

2.1. Reference

23

2.1.4
Addr. 03DBC 03DEF 03E2D 355FD 35602 35607 3560C 35611 35616 3561B 35620 3562A 03DE0 2F13D

Arithmetic Functions
Name #+ #1+ #2+ #3+ #4+ #5+ #6+ #7+ #8+ #9+ #10+ #12+ #(CK#-) Description ( # #' #+#' ) ( # #+1 ) ( # #+2 ) ( # #+3 ) ( # #+4 ) ( # #+5 ) ( # #+6 ) ( # #+7 ) ( # #+8 ) ( # #+9 ) ( # #+10 ) ( # #+12 ) ( # #' #-#' ) ( # #' #'' ) If #' is greater than #, returns #0, otherwise returns #-#'. ( # #-1 ) ( # #-2 ) ( # #-3 ) ( # #-4 ) ( # #-5 ) ( # #-6 ) ( # #' #*#' ) ( # #' #*#' ) 0 result FFFFF ( # #*2 ) ( # #*6 ) ( # #*8 ) ( # #*10 ) ( # #' #r #q ) ( # #/2 ) Rounded down. ( # #' #-#'+1 ) aka: #-+1 ( # #' #+#'-1 ) $1-+ is a typo in EXTABLE. aka: #+-1, $1-+

03E0E 03E4E 355DF 355DA 355D5 355D0 03EC2 2632D 03E6F 356B8 3569B 35675 03EF7 03E8E 36815 36851

#1#2#3#4#5#6#* #*OVF #2* #6* #8* #10* #/ #2/ #1#1-+

24 Addr. 35552 357FC 35E39 36093 3581F 35E4D 360A7 35830 35E61 2F222 35841 28071 3601B 281D5 35E89 35912 3571E 35956 3674D 3683D 357BB 3592B 29786 28099 36829 280AD 28989 367ED 36775 367C5 36761 367B1 36801 28001 Name #-#2/ #+DUP #+SWAP #+OVER #-DUP #-SWAP #-OVER #1+DUP #1+SWAP #1+ROT #1-DUP #1-SWAP #1-ROT #1-UNROT #1-1SWAP DUP#1+ DUP#2+ DUP#12DUP#+ DROP#1SWAP#SWAP#1+ ('RSWAP#1+) SWAP#1+SWAP SWAP#1SWAP#1-SWAP (SWAPDROP#1-) SWAPOVER#OVER#+ OVER#ROT#+ ROT#ROT#1+ ROT#1+UNROT

2. Binary Integers (BINTS) Description ( # #' (#-#')/2 ) ( # #' #+#' #+#' ) ( ob # #' #+#' ob ) ( ob # #' ob #+#' ob ) ( # #' #-#' #-#' ) ( ob # #' #-#' ob ) ( ob # #' ob #-#' ob ) ( # #+1 #+1 ) ( ob # #+1 ob ) ( ob ob' # ob' #+1 ob ) ( # #-1 #-1 ) ( ob # #-1 ob ) aka: pull ( ob ob' # ob' #-1 ob ) ( ob ob' # #-1 ob ob' ) ( # 1 #-1 ) Returns the bint ONE and the result. ( # # #+1 ) ( # # #+2 ) ( # # #-1 ) ( # #' # #' #+#' ) aka: DUP3PICK#+ ( # ob #-1 ) ( # #' #'-# ) ( # ob ob #+1 ) aka: SWP1+ ( # nob #+1 ) nob is the next object in the runstream. ( # ob #+1 ob ) ( # ob ob #-1 ) ( # ob #-1 ob ) ( ob # #-1 ) ( # #' #' #-#' ) ( # #' # #'+# ) ( # #' # #'-# ) ( # ob #' ob #'+# ) ( # ob #' ob #'-# ) ( # ob ob' ob ob' #+1 ) ( # ob ob' #+1 ob ob' )

2.1. Reference Addr. 35E07 36789 3679D 35E20 35511 3551D 03EB1 Name ROT#+SWAP 3PICK#+ 4PICK#+ 4PICK#+SWAP #MIN #MAX #AND Description ( # ob #' #'+# aka: ROT+SWAP ( # ob #' # ob ( # ob1 ob2 #' ( # ob1 ob2 #' aka: 4PICK+SWAP ( # #' #'' ) ( # #' #'' ) ( # #' #'' ) Bitwise AND.

25

ob ) #'+# ) # ob1 ob2 #'+# ) # ob1 #'+# ob2 )

2.1.5
Addr. 03D19 03D4E 03CE4 03D83 03CC7 03CA6 3530D 352FE 36711 352F1 352E0 366FD 366BC 36739 358C2 358F8 363CE 35268 358DC 36694 352BD 366A8

Tests
Name #= #<> #< #> #0<> #0= #1<> #1= #2<> #2= #3= #5= #<3 #>1 2DUP#< 2DUP#> ONE_EQ OVER#= 2DUP#= OVER#0= DUP#0= OVER#< Description ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) ( # flag ) aka: ONE#> ( # #' # #' flag ( # #' # #' flag ( # flag ) Uses EQ test. ( # #' # flag ) ( # #' # #' flag ( # #' # #' flag ( # # flag ) ( # #' # flag )

) )

) )

26 Addr. 3531C 36725 3532B 366D0 36676 Name DUP#1= OVER#> DUP#0<> DUP#<7 2#0=OR

2. Binary Integers (BINTS) Description ( # # flag ) ( # #' # flag ) ( # # flag ) ( # # flag ) Returns TRUE if the argument is smaller then #7. ( # # flag ) Returns TRUE if either argument is zero.

Chapter 3 Real Numbers


Real numbers can be created in two ways. The rst is by just entering them, without any prex. 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 scientic notation. The basic operations are the same, except that they are prexed 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
3.1.1

Reference
Built-in Real Numbers
Name %-MAXREAL %-9 %-8 %-7 %-6 %-5 %-4 %-3 %-2 %-1 %-MINREAL %0 %MINREAL %.1 %.5 (%-.5) %1 (%1.8) %2 %e %3 %PI %4 %5 %6 %7 %8 %9 %10 %11 Description -9.99E499 -9 -8 -7 -6 -5 -4 -3 -2 -1 -1E-499 0 1E-499 .1 .5 -.5 1 1.8 2 e 3 4 5 6 7 8 9 10 11

Addr. 2FB0A 2FAB1 2FA9C 2FA87 2FA72 2FA5D 2FA48 2FA33 2FA1E 2FA09 2FB34 2F937 2FB1F 27118 339BE 339D3 2F94C 270EE 2F961 339A9 2F976 2FAC6 2F98B 2F9A0 2F9B5 2F9CA 2F9DF 2F9F4 339E8 2FCE6

3.1. Reference Addr. 2FCFB 2FD10 2FD25 2FD3A 2FD4F 2FD64 2FD79 2FD8E 2FDA3 2FDB8 2FDCD 2FDE2 2FDF7 2FE0C 2FE21 2FE36 2FE4B 2FE60 2FE75 2FE8A 2FE9F 2FEB4 2FEC9 2FEDE 27103 27E5D 339FD 33A12 33A3C 33A27 2FC7D 2FC92 2FCA7 4EA22 2FCBC 2FCD1 4EA37 4EA4C 4EA61 Name %12 %13 %14 %15 %16 %17 %18 %19 %20 %21 %22 %23 %24 %25 %26 %27 (%28) (%29) (%30) (%31) (%32) (%33) (%34) (%35) %80 %100 %180 (%200) (%400) %360 (%1200) (%2400) (%4800) (%TICKSsec) (%9600) (%15360) (%TICKSmin) (%TICKShour) (%TICKSday) Description 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 80 100 180 200 400 360 1200 2400 4800 8192 9600 15360 491520 29491200 707788800

29

30 Addr. 4EA76 2FAF5 2F180 Name (%TICKSweek) %MAXREAL 1REV

3. Real Numbers Description 4954521600 9.99E499 ( 6.28318530718 ) ( 360. ) ( 400. ) Returns the angle of a full circle, corresponding to the current angular mode.

3.1.2
Addr. 2FB49 2FBE5 30DC8 2FBFF 2DA11 2FB63 2DA2B 2FB7D 2FB97 2FADB 30017 2FBB1 2FBCB 27A89 30BEA 2FC19 30CC7 30CEB

Built-in Extended Real Numbers


Name %%0 %%.1 %%.4 %%.5 cfF %%1 cfC %%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 CF conversion. 1 1 For CK conversion. 2 3 /180 4 5 2 7 10 12 60

3.1. Reference

31

3.1.3
Addr. 282CC

Stack Manipulation Combined with Reals


Name (DROP%0) Description ( ob %0 )

3.1.4
Addr. 2FFAC 35ECA 2FF9B 30E47 30E5B 262F6 3F495 36BFA 2EFCA 05D2C 2B3FD

Conversion
Name %>%% %>%%SWAP %%>% 2%>%% 2%%>% UNCOERCE UNCOERCE2 UNCOERCE%% HXS>% C%>% %IP># Z>R Z2%% OBJ2REAL Description ( % %% ) ( ob % %% ob ) ( %% % ) ( % % %% %% ) ( %% %%' % %' ) ( # % ) ( # # % % ) ( # %% ) ( hxs % ) ( C% %re %im ) ( % #IP(ABS(%)) ) Does ABS too. ( Z % ) Converts zint to real. ( Z %% ) Converts integer to long real. ( z/% % ) Transforms ob in real.

0F6006 18A006 197006

3.1.5
Addr. 3035F 25E69 26F36 3036C 26F4A 30346 303A7

Real Functions
Name %+ %+SWAP %1+ %%1%>%%%* Description ( % %' %+%' ) ( ob % %' %+%' ob ) ( % %+1 ) ( % %' %-%' ) ( % %-1 ) ( % %' %%-%%' ) ( % %' %*%' )

32 Addr. 35C18 303E9 3045B 302EB 3030B 302C2 3049A 30489 304F4 304E1 3051A 3052D 30559 30592 3056C 305A5 305DA 3062B 3067C 306AC 306DC 3070C 30799 307C5 307D8 307EB 307FE 30811 3031B 30824 30938 3094B 30971 3095E 305C7 30723 30746 30F14 Name %10* %/ % %ABS %CHS %SGN %1/ %>%%1/ %SQRT %>%%SQRT %EXP %EXPM1 %LN %LNP1 %LOG %ALOG %SIN %COS %TAN %ASIN %ACOS %ATAN %SINH %COSH %TANH %ASINH %ACOSH %ATANH %MANTISSA %EXPONENT %FP %IP %FLOOR %CEIL %MOD %ANGLE %>%%ANGLE RNDXY Description ( % %*10 ) ( % %' %/%' ) ( % %' %%' ) ( % %' ) ( % -% ) ( % -1/0/1 ) ( % 1/% ) ( % 1/%% ) ( % % ) ( % %% ) ( % e% ) ( % e%-1 ) ( % LN% ) ( % LN(%+1) ) ( % LOG% ) ( % 10% ) ( % SIN% ) ( % COS% ) ( % TAN% ) ( % ASIN% ) ( % ACOS% ) ( % ATAN% ) ( % SINH% ) ( % COSH% ) ( % TANH% ) ( % ASINH% ) ( % ACOSH% ) ( % ATANH% ) ( % %mant ) ( % %expn ) ( % %frac ) ( % %int ) ( % %maxint <=% ) ( % %minint >=% ) ( % %' %rem ) ( %x %y %ang ) ( %x %y %%ang ) ( % %places %' )

3. Real Numbers

3.1. Reference Addr. 30F28 3084D 30860 30837 30AAF 3046C Name TRCXY %COMB %PERM %NFACT %FACT %NROOT

33 Description ( % %places %' ) ( % %' COMB(%,%') ) ( % %' PERM(%,%') ) ( % %! ) Calculates factorial of number. ( % gamma(%+1) ) Calculates gamma(x+1). ( % %n %' ) Calculates the %nth root of the real number. Equivalent to user function XROOT. ( % %' %lesser ) ( % %' %greater ) ( % %' %max %min ) ( %random ) Returns next random number. ( %seed ) System level RDZ: seeds the random number generator. ( % ) Stores given number as random number seed. ( % %' %'/% * 100 ) ( % %' %pctotal ) ( % %' %pcchange ) ( %deg %rad ) ( %rad %deg ) ( %r %ang %x %y ) ( %x %y %r %ang ) ( %r %ang %ph %x %y %z )

300F9 300E0 35DBC 309AD 30A2F

%MIN %MAX %MAXorder %RAN %RANDOMIZE

30A66 303B4 303F6 3041B 3000D 30040 30E79 30EA6 30EDD

DORANDOMIZE %OF %T %CH %D>R %R>D %REC>%POL %POL>%REC %SPH>%REC

3.1.6
Addr. 3032E 3033A 30385 3602F 35EDE 36C7C

Extended Real Functions


Name %%+ %%%%* %%*ROT %%*SWAP %%*UNROT Description ( %% %%' ( %% %%' ( %% %%' ( ob ob' %% ( ob %% %%' ( ob ob' %% %%+%%' ) %%-%%' ) %%*%%' ) %%' ob' %%+%%' ob ) %%+%%' ob ) %%' %%+%%' ob ob' )

34 Addr. 303D3 36C22 36BE6 3044A 51D006 30612 30767 302DB 306F3 3073A 30757 306C3 302FB 3047D 30642 30653 307B2 30663 30507 30546 30984 3057F 300C7 30E83 30EB0 305F1 30602 30780 304D5 30693 Name %%/ SWAP%%/ %%/>% %% CK%%SQRT %%SINRAD %%ANGLERAD %%ABS %%ACOSRAD %%ANGLE %%ANGLEDEG %%ASINRAD %%CHS %%1/ %%COS %%COSDEG %%COSH %%COSRAD %%EXP %%LN %%FLOOR %%LNP1 %%MAX %%R>P %%P>R %%SIN %%SINDEG %%SINH %%SQRT %%TANRAD

3. Real Numbers Description ( %% %%' %%/%%' ) ( %% %%' %%'' ) ( %% %%' % ) ( %% %%' %%%%' ) ( %% %%/C%% ) ( %% %%' ) ( %% %%' ) ( %% %%abs ) ( %% %%rad ) ( %%x %%y %%ang ) ( %%x %%y %%deg ) ( %% %%rad ) ( %% -%% ) ( %% 1/%% ) ( %% %%cos ) ( %%deg %%cos ) ( %% %%cosh ) ( %%rad %%cos ) ( %% e%% ) ( %% ln %% ) ( %% %%maxint ) aka: %%INT ( %% %%ln(%%+1) ) ( %% %%' %%max ) ( %%x %%y %%radius %%angle ) ( %%r %%ang %%x %%y ) ( %% %%sin ) ( %%deg %%sin ) ( %% %%sinh ) ( %% %% ) ( %%rad %%tan )

3.1. Reference

35

3.1.7
Addr. 302AC 302B7 3025C 302A1 30275 3028B 30156 36C0E 301BA 30123 30184 301E2 3020A 30296 3026A 30280 30145 301A6 30112 301F6 30173 301CE

Tests
Name %= %<> %< %<= %> %>= %0= DUP%0= %0<> %0< %0> %0>= %%< %%<= %%> %%>= %%0= %%0<> %%0< %%0<= %%0> %%0>= Description ( % %' flag ) ( % %' flag ) ( % %' flag ) ( % %' flag ) ( % %' flag ) ( % %' flag ) ( % flag ) ( % flag ) ( % flag ) Can be used to change a user ag into a system ag. ( % flag ) ( % flag ) ( % flag ) ( %% %%' flag ) ( %% %%' falg ) ( %% %%' flag ) ( %% %%' flag ) ( %% flag ) ( %% flag ) ( %% flag ) ( %% flag ) ( %% flag ) ( %% flag )

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 scientic notation. Below is a list of all the commands related to complex numbers, including mathematical operations.

4.1
4.1.1

Reference
Builtin Complex Numbers
Name C%0 C%1 C%-1 C%%1 Description (0,0) (1,0) (-1,0) (%%1,%%0)

Addr. 27DE4 27E09 27DBF 27E2E

36

4.1. Reference

37

4.1.2

Conversion
Name C%%>C% %>C% SWAP%>C% Re>C% C>Re% C>Im% E%%>C%% %%>C% C%>%% C%>%%SWAP C%%>%% C2C%% ZZ2C%%ext C%>C%% RIXCext IRXCext Description ( C%% C% ) ( %re %im C% ) ( %im %re C% ) ( %re C% ) ( C% %re ) ( C% %im ) ( %%re %%im C%% ) Converts long reals to long complex. ( %%re %%im C% ) ( C% %%re %%im ) ( C% %%im %%re ) ( C%% %%re %%im ) ( C C%% ) Converts Gaussian integer to long complex. ( Zre Zim C%% ) Converts Gaussian integer to long complex. ( C% C%% ) Converts complex to long complex. ( Zre Zim C ) Convert integers to complex. ( Zim Zre C ) Convert integers to complex.

Addr. 261D9 05C27 362F2 261FC 25E9C 25E9B 18C006 261CF 25E82 25E83 05DBC 188006 189006 18B006 15E006 15F006

4.1.3

Functions
Name C%CC C%CR C%RC C%ABS CZABS C%CHS C%1/ C%SQRT C%SGN Description ( C% C%' C%'' ) ( C% % C%' ) ( % C% C%' ) ( C% % ) ( complex real ) Absolute value. ( C% -C% ) ( C% 1/C% ) ( C% C% ) ( C% C%/C%ABS )

Addr. 25E8F 25E90 25E94 25E84 50C006 261ED 25E81 25E98 25E95

38 Addr. 261F2 25E88 25E91 25E92 25E93 25E87 25E96 25E8D 25E99 25E89 25E85 25E8B 25E97 25E8E 25E9A 25E8A 25E86 25E8C 261DE 261E3 515006 517006 Name C%CONJ C%ARG C%EXP C%LN C%LOG C%ALOG C%SIN C%COS C%TAN C%ASIN C%ACOS C%ATAN C%SINH C%COSH C%TANH C%ASINH C%ACOSH C%ATANH C%%CHS C%%CONJ ARG2 QUADRANT

4. Complex Numbers Description ( C% C%' ) ( C% % ) ( C% eC% ) ( C% ln C% ) ( C% log C% ) ( C% 10C% ) ( C% sin C% ) ( C% cos C% ) ( C% tan C% ) ( C% asin C% ) ( C% acos C% ) ( C% atan C% ) ( C% sinh C% ) ( C% cosh C% ) ( C% tanh C% ) ( C% asinh C% ) ( C% acosh C% ) ( C% atanh C% ) ( C%% -C%% ) ( C%% C%%' ) ( im re arg(ob) ) ARG. ( re im ?re>0 ?im>0 newre newim % ) Returns Z0 Z1 Z-2 or Z-1 so that arg of corresponding complex number is Z * /2 + theta where is in the interval [0, /2]. ( C%% C%%' )

51E006

C%%SQRT

4.1.4
Addr. 261E8 261D4

Tests
Name C%0= C%%0= Description ( C% flag ) ( C%% flag )

Chapter 5 Integers (ZINTS)


This is a new object of the HP49. The integers (called ZINTs 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 rst 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 nal 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 specied position (a bint, in level one). The position of the rst 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

41

6.1
6.1.1

Reference
Built-in Characters
Name CHR_00 CHR_Newline CHR_... CHR_Space CHR_DblQuote CHR_# CHR_LeftPar CHR_RightPar CHR_* CHR_+ CHR_, CHR_CHR_. CHR_/ CHR_0 CHR_1 CHR_2 CHR_3 CHR_4 CHR_5 CHR_6 CHR_7 CHR_8 CHR_9 CHR_: CHR_; CHR_< CHR_= CHR_> CHR_A CHR_B Description '\00' (character 0d 00h) The NULL character. '\0a' (character 10d 0Ah) The newline character. '...' (character 31d 1Fh) ' ' (character 32d 20h) The space character. '"' (character 34d 22h) '#' (character 35d 23h) '(' (character 40d 28h) ')' (character 41d 29h) '*' (character 42d 2Ah) '+' (character 43d 2Bh) ',' (character 44d 2Ch) '-' (character 45d 2Dh) '.' (character 46d 2Eh) '/' (character 47d 2Fh) '0' (character 48d 30h) '1' (character 49d 31h) '2' (character 50d 32h) '3' (character 51d 33h) '4' (character 52d 34h) '5' (character 53d 35h) '6' (character 54d 36h) '7' (character 55d 37h) '8' (character 56d 38h) '9' (character 57d 39h) ':' (character 58d 3Ah) ';' (character 59d 3Bh) '<' (character 60d 3Ch) '=' (character 61d 3Dh) '>' (character 62d 3Eh) 'A' (character 65d 41h) 'B' (character 66d 42h)

Addr. 33D2B 33F77 33D32 33F93 33D39 33D40 33F70 33F85 33D47 33D4E 33D55 33D5C 33D63 33D6A 33D71 33D78 33D7F 33D86 33D8D 33D94 33D9B 33DA2 33DA9 33DB0 33DB7 33DBE 33DC5 33DCC 33DD3 33DDA 33DE1

42 Addr. 33DE8 33DEF 33DF6 33DFD 33E04 33E0B 33E12 33E19 33E20 33E27 33E2E 33E35 33E3C 33E43 33E4A 33E51 33E58 33E5F 33E66 33E6D 33E74 33E7B 33E82 33E89 33FA1 33FA8 33F9A 33E90 33E97 33E9E 33EA5 33EAC 33EB3 33EBA 33EC1 33EC8 33ECF 33ED6 33EDD Name CHR_C CHR_D CHR_E CHR_F CHR_G CHR_H CHR_I CHR_J CHR_K CHR_L CHR_M CHR_N CHR_O CHR_P CHR_Q CHR_R CHR_S CHR_T CHR_U CHR_V CHR_W CHR_X CHR_Y CHR_Z CHR_[ CHR_] CHR_UndScore CHR_a CHR_b CHR_c CHR_d CHR_e CHR_f CHR_g CHR_h CHR_i CHR_j CHR_k CHR_l Description 'C' (character 'D' (character 'E' (character 'F' (character 'G' (character 'H' (character 'I' (character 'J' (character 'K' (character 'L' (character 'M' (character 'N' (character 'O' (character 'P' (character 'Q' (character 'R' (character 'S' (character 'T' (character 'U' (character 'V' (character 'W' (character 'X' (character 'Y' (character 'Z' (character '[' (character ']' (character '_' (character 'a' (character 'b' (character 'c' (character 'd' (character 'e' (character 'f' (character 'g' (character 'h' (character 'i' (character 'j' (character 'k' (character 'l' (character

6. Characters and Strings

67d 68d 69d 70d 71d 72d 73d 74d 75d 76d 77d 78d 79d 80d 81d 82d 83d 84d 85d 86d 87d 88d 89d 90d 91d 93d 95d 97d 98d 99d 100d 101d 102d 103d 104d 105d 106d 107d 108d

43h) 44h) 45h) 46h) 47h) 48h) 49h) 4Ah) 4Bh) 4Ch) 4Dh) 4Eh) 4Fh) 50h) 51h) 52h) 53h) 54h) 55h) 56h) 57h) 58h) 59h) 5Ah) 5Bh) 5Dh) 5Fh) 61h) 62h) 63h) 64h) 65h) 66h) 67h) 68h) 69h) 6Ah) 6Bh) 6Ch)

6.1. Reference Addr. 33EE4 33EEB 33EF2 33EF9 33F00 33F07 33F0E 33F15 33F1C 33F23 33F2A 33F31 33F38 33F3F 33FAF 33FB6 33F5B 33F69 33F62 33F46 33F4D 33F54 33F7E 33F8C 33FBD 33FC4 33FCB Name CHR_m CHR_n CHR_o CHR_p CHR_q CHR_r CHR_s CHR_t CHR_u CHR_v CHR_w CHR_x CHR_y CHR_z CHR_{ CHR_} CHR_Angle CHR_Integral CHR_Deriv CHR_-> CHR_<< CHR_>> CHR_Pi CHR_Sigma CHR_<= CHR_>= CHR_<> Description 'm' (character 'n' (character 'o' (character 'p' (character 'q' (character 'r' (character 's' (character 't' (character 'u' (character 'v' (character 'w' (character 'x' (character 'y' (character 'z' (character '{' (character '{' (character ' ' (character ' ' (character ' ' (character '' (character '' (character '' (character ' ' (character '' (character '' (character '' (character '=' (character

43

109d 110d 111d 112d 113d 114d 115d 116d 117d 118d 119d 120d 121d 122d 123d 125d 128d 132d 136d 141d 171d 187d 135d 133d 137d 138d 139d

5Dh) 6Eh) 6Fh) 70h) 71h) 72h) 73h) 74h) 75h) 76h) 77h) 78h) 79h) 7Ah) 7Bh) 7Dh) 80h) 84h) 88h) 8Dh) ABh) BBh) 87h) 85h) 89h) 8Ah) 8Bh)

6.1.2
Addr. 055DF 33B55 33B39

Built-in Strings
Name NULL$ SPACE$ NEWLINE$ Description "" Empty string. " " aka: tok_ "\0a" Newline.

44 Addr. 27195 340A4 340B4 33FF2 33FE2 33FD2 34076 34064 34088 34002 34010 3401E 3402C 3403A 34048 34056 33B91 33B85 33BFD 33B9D 2D848 2D86D 2D8AD 33A77 33AD7 33C09 272D9 33C4D 33C59 33CAD 33CB9 33ABF Name CRLF$ $_RAD $_GRAD $_XYZ $_R<Z $_R<< $_EXIT $_ECHO $_Undefined $_<<>> $_{} $_[] $_'' $_:: $_LRParens $_2DQ tok, tok' toktok. tok_g tok_m tok_s tok{ tok<< tok= tok-> tok0 tok1 tok8 tok9 tokESC

6. Characters and Strings Description "\0d\0a" Carriage return and line feed. "RAD" "GRAD" "XYZ" "R Z" "R<angle>Z" "R " "R<angle><angle>" "EXIT" "ECHO" "Undened" "" "{}" "[]" "''" Two single quotes. "::" "()" """" Two double quotes. "," "'" One single quote. "-" "." "g" "m" "s" "{" "" "=" "" "0" "1" "8" "9" "<ESC>" Escape character.

6.1. Reference Addr. 33AE3 33B79 33A8F 33AA7 33AB3 33BD9 33BF1 33BE5 33C65 33C71 33C7D 33C89 33C95 33CA1 33BA9 33ACB 33AEF 33C2D 33C3F 33C21 33B45 33BB5 33BC1 33AFB 33C15 33B61 33A9B 33B07 33A6B 33A51 33BCD 33A83 33B13 Name tokexponent tokquote toksharp (tok$) (tok&) (tok*) (tok+) (tok/) (tok2) (tok3) (tok4) (tok5) (tok6) (tok7) (tok;) (tok>>) (tokanglesign) (tokCTGROB) (tokCTSTR) (tokDER) ($DER) (toklparen) (tokrparen) (tokSIGMA) (tokSQRT) (tokUNKNOWN) (tokuscore) (tokWHERE) (tok[) (tok]) (tok) (tok}) (14SPACES$) Description "E" """ One double quote. "#" "$" "&" "*" "+" "/" "2" "3" "4" "5" "6" "7" "8" "" " " "GROB" "C$" " " "der" "(" ")" "" " " "UNKNOWN" "_" "|" "[" "]" "" "}" " " String of 14 spaces.

45

46

6. Characters and Strings

6.1.3
Addr. 35D94 04D3E 25EEC

Built-in Strings with Stack Manipulation


Name NULL$SWAP DROPNULL$ NULL$TEMP Description ( ob $ ob ) NULL$, then SWAP. ( ob NULL$ ) DROP then NULL$. ( $ ) Creates null string in temporary memory (NULL$, then TOTEMPOB).

6.1.4
Addr. 25F77 25F72

Conversion
Name #>$ #:>$ Description ( # $ ) Creates string from the bint (decimal). ( # "#: " ) Creates string from the bint and appends a colon and a space. Ex: "1: " ( % $ ) Converts real number into string using current display mode. aka: a%>$, ( id/lam $ ) Converts identier into string. ( % $ ) Creates string of the character with the number specied. ( Z $ ) Converts Z into a string (decimal). ( hxs $ ) Uses current display mode and wordsize. ( hxs $ ) Does hxs>$ and then appends base character.

25F0F

a%>$

05BE9 25EB3

ID>$ DOCHR

0F1006 2EFC1 2EFC0

Z>S hxs>$ HXS>$

6.1. Reference

47

6.1.5
Addr. 05A75

Management
Name #>CHR Description ( # chr ) Returns character with the specied ASCII code. ( chr $* Strings ) Converts a character into a string. ( $ #length ) Returns length in bytes. ( $ $ # ) DUP then LEN$. ( $ ob $ ob #len ) OVER then LEN$. ( $ "$\0a" ) Appends newline character to string. aka: NEWLINE&$ ( $ $' ) Appends carriage return and line feed to string. ( $ chr ) Returns rst character of string as a string, or NULL$ for null string. ( $ $' ) Returns string without rst character, or NULL$ for null string. ( $ $find start# #pos ) Search for $nd in $search, starting at position #start. Returns position of $nd or 0 if not found. Same entry as POSCHR. ( $search chr #start #pos ) Same entry as POS$. ( $ $find #limit #pos ) Searches backwards from #limit to #1. Same entry as POSCHRREV. ( $seach chr #start #pos ) Same entry as POS$REV.

37AA5 05636 357E2 05622 361DA

CHR>$ LEN$ DUPLEN$ OVERLEN$ NEWLINE$&$

2F31A

APNDCRLF

050ED

CAR$

0516C

CDR$

378FA

POS$

378FA 37906

POSCHR POS$REV

37906

POSCHRREV

48 Addr. 25EA0 Name COERCE$22

6. Characters and Strings Description ( $ $' ) If the string is longer than 22 characters, truncates it to 21 characters and appends "...". ( #len $ ) Creates a string with the specied number of spaces. ( id ob $ ) Creates string of the form "id: ob". ( $ $' $'' ) Separates string at the rst newline. $'' is the substring before the rst newline; $' the substring after the rst newline. ( $ #width $' ) Replace SPACE chars with NEWLINE in order to t the text in the given #width. Used by ViewStrObject. Very fast (bang type). ( $ #start #end $' ) Returns substring between specied positions. ( $ #start #end+#1 $' ) Does #1- and then SUB$. ( $ #end $' ) Returns substring from the rst character to the character before the specied position. aka: 1_#1-SUB ( $ #start $' ) Returns substring from the specied start position to the end (inclusive). ( $ #start-#1 $' ) Returns substring from the specied start position to the end (exclusive). ( ob $ # #' $' ob ) SUB$ then SWAP. ( $ # #' ) Returns bint with ASCII code of character at the specied position.

2F16D

Blank$

2EEF0 25EF8

PromptIdUtil SEP$NL

09A003

(WRAP$)

05733 3628E 362A2

SUB$ #1-SUB$ 1_#1-SUB$

362B6

LAST$

362CA

#1+LAST$

35DA8 2A5CA

SUB$SWAP SUB$1#

6.1. Reference Addr. 34C82 Name EXPAND

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.

05193 36FF6 353CD

&$ &$SWAP !append$

3533C 35F6A 35369

!insert$ !append$SWAP !!append$?

353F7 353EB 0525B 052EE 35BD7 35346 2EED3

!!append$ !!insert$ >H$ >T$ APPEND_SPACE SWAP&$ TIMESTR

25E7C

AND$

50 Addr. 25EF0 Name OR$

6. Characters and Strings Description ( $ $' $'' ) Logical OR. Errors if strings are not the same length. ( $ $' $'' ) Logical XOR. Errors if strings are not the same length. ( ) HP49 character browser. This is an interactive application from which characters can be echoed into the command line.

25F0D

XOR$

2F1A7

CHARSEDIT

6.1.6
Addr. 25EB7 2EF62

Parsing Strings
Name DOSTR> palparse Description ( $ ? ) Internal version of STR. ( $ ob T ) ( $ $ #pos $' F ) Tries parsing a string into an object. If successful, returns object and TRUE, otherwise returns position of error, the offending part of the string $', and FALSE. If the string contains several arguments, the resulting object is a secondary containing these objects. ( F <SKIP> ) ( T T <COLA> ) ( T T ) ( F T F T <SEMI> ) ( $1 $1 :: $1 <Ob1> ; ) ( $1 $2 :: $1 <Ob2> <Rest> ; ) ( GNT data $1 $1 :: GNT data GetNextToken ; ) ( GNT data $1 $2 :: $1 <Ob1> <Rest> ; ) ( NULL$ :: ; ) ( $ :: $ <Ob1> <Rest> ; ) ( hxs-mask $ #start hxs-mask $ #next $token )

25E68 25E67 26206 261BB

!*trior !*triand tok8cktrior tok8trior

29E67 25EDB

nultrior GetNextToken

6.1. Reference Addr. 2F33C 2EF6E Name getmatchtok ParseFail

51 Description ( hxs-mask $ #loc $_tok hxs-mask $ #next $match ) ( ob $parsed #pos $' ) Uses DispBadToken to re-edit the parsed string and displays "Syntax Error". ( ob $parsed #pos $' ) Re-edits the parsed string, positions the cursor to the location of the error. Used by ParseFail.

2EF6F

DispBadToken

6.1.7
Addr. 2F191

Decompilation
Name !DcompWidth Description ( # ) Sets the width (in characters) of decompiled strings. This width is used to cut the resulting string (for stack display) or to break it into lines (mostly for editing). Note that most decompilation entries reset this value to the stack or editor width. Use stkdecomp$w and editdecomp$w to make sure the current width is used and not changed. ( # ) Recalls the width of decompiled strings (in characters). ( ) Sets DcompWidth to the standard value for stack display, either 19 or 30 characters, depending on system ag 72 (stack minifont). ( ) Sets DcompWidth to the width for editing, either 21 or 32 characters, depending on system ag 73 (edit minifont). ( ob $ ) Decompiles for stack display using the current DcompWidth to cut the string if it is too long.

2F190

DcompWidth@

26459

setStdWid

2645E

setStdEditWid

25F13

stkdecomp$w

52 Addr. 25E6D Name 1stkdecomp$w

6. Characters and Strings Description ( ob $ ) Calls setStdWid and decompiles for stack display (cutting the string if necessary). ( ob $ ) Same as 1stkdecomp$w. ( ob $ ) Same as Decomp1Line but enforce RPN mode (system ag 95 clear) during execution. ( id $ ) Makes a string from the variable name and its contents (decompiled with Decomp1Line), for display with the review key. ( ob $ ) Sets 32 as DcompWidth and decompiles using stkdecomp$w. ( ob $ ) Same as DecompStd1Line32 but enforce RPN mode (system ag 95 clear) during execution. ( ob $ ) Calls setStdWid and decompiles, cutting if the string becomes too long. ( ob $ ) Same as DecompStd1Line but enforce RPN mode (system ag 95 clear) during execution. ( ob # $ ) Calls setStdWid and decompiles ob (UserRPL components only), breaks the string into lines and returns the rst #+1 lines. Used for multiline display in stack level 1. ( ob # $ ) Same as Decomp#Disp but enforce RPN mode (system ag 95 clear) during execution.

2A842 2A904

Decomp1Line
RPNDecomp1Line

25E6F

>Review$

2A8E4

DecompStd1Line32

2A9C4

RPNDecompStd1Line32

2A8C9

DecompStd1Line

2A9A4

RPNDecompStd1Line

2A893

Decomp#Disp

2A964

RPNDecomp#Disp

6.1. Reference Addr. 2A878 Name Decomp#Line

53 Description ( ob # $ ) Similar to Decomp#Disp, but the returned string is an internal representation of the different lines to be displayed. Used for multiline display in stack level 1. ( ob # $ ) Same as Decomp#Line but enforce RPN mode (system ag 95 clear) during execution. ( ob $ ) Decompiles entire object for editing. It only decompiles the UserRPL components. Some System RPL entries like TakeOver are simply skipped, others are written as "External". Breaks the resulting strings into lines using the current DcompWidth. ( ob $ ) Calls setStdEditWid and the decompiles for editing like editdecomp$w. ( ob $ ) Same as EDITDECOMP$. ( ob $ ) Same as DecompEdit but enforce RPN mode (system ag 95 clear) during execution. ( ob $ ) Calls DecompEdit with a few checks around it. ( ob $ ) Calls setStdWid and decompiles entire object (UserRPL components only). Breaks the string into lines using DcompWidth as width. ( ob $ "ob$" ) Applies DECOMP$ to ob and concatenates with the string. ( $ ob "$ob" ) Applies DECOMP$ to ob and concatenates with the string.

2A944

RPNDecomp#Line

25F11

editdecomp$w

25ECE

EDITDECOMP$

2A85D 2A924

DecompEdit RPNDecompEdit

2AA43

AlgDecomp

25EAA

DECOMP$

39CB3

(ob&$)

39C9F

($&ob)

54 Addr. 25EB1 Name DO>STR

6. Characters and Strings Description ( $ $ ) ( ob $ ) Internal version of STR. ( id/ob $ ) Like DO>STR but without quotes for id. ( ob $ ) Calls setStdEditWid and decompiles the entire object (UserRPL only) into a single line. ( ob $ ) Same as DecompEcho but enforce RPN mode (system ag 95 clear) during execution. ( % #width $ ) Decompiles a real number into a string of the given #width. It will drop less signicant digits or add zeros as needed, but will also exceed #width when necessary. E.g. "1.e-33" cannot be written with less than 7 characters, so even if #width is less, 7 chars will be used. %0 is always decompiled as "0". ( ob $ ) The decompiler used by stkdecomp$w, 1stkdecomp$w, Decomp1Line, DecompStd1Line32. DcompWidth must be set before this is called. ( ob # $ ) The decompiler used by Decomp#Line. DcompWidth must be set before this is called. ( ob $ ) The decompiler used by editdecomp$w, DecompEdit, EDITDECOMP$. DcompWidth must be set before this is called. ( ob $ ) The decompiler used by DecompEcho. DcompWidth must be set before this is called.

1A7006 2A8AE

DO>STRID DecompEcho

2A984

RPNDecompEcho

2F1BF

Decomp%Short

001004

FSTR1

003004

FSTR3

004004

FSTR4

005004

FSTR5

6.1. Reference Addr. 006004 Name FSTR6

55 Description ( ob # $ ) The decompiler used by Decomp#Line. DcompWidth must be set before this is called. ( ob $ ) The decompiler used by DO>STR. DcompWidth must be set before this is called. ( ob $ ) The decompiler used by DecompStd1Line. DcompWidth must be set before this is called. ( ob $ ) The decompiler used by DECOMP$. DcompWidth must be set before this is called. ( romptr $ T ) Decompiles a rompointer for the UserRPL stack. If it is a named rompointer, returns the name. Otherwise returns "XLIB n m".

007004

FSTR7

009004

FSTR9

00D004

FSTR13

35B82

palrompdcmp

6.1.8
Addr. 0556F 36252 2F321

String Tests
Name NULL$? DUPNULL$? CkChr00 Description ( ob flag ) ( ob ob flag ) ( $ $ flag ) Returns FALSE if string contains any null characters.

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
7.1.1

Reference
Conversion
Name #>HXS %># Description ( # hxs ) Length will be ve. ( % # ) Converts real number into hxs. Should be called %>HXS.

Addr. 059CC 2EFCB

56

7.1. Reference

57

7.1.2
Addr. 2EFBE 2EFAA 055D5 0518A 34C82 05616 05815 2EFB9 2EFC8 2EFC9 2EFBA 2EFC6 2EFC7 2EFBC 2EFC4 2EFC5 2EFBD 2EFC2

General Functions
Name WORDSIZE dostws NULLHXS &HXS EXPAND LENHXS SUBHXS bit+ bit%#+ bit#%+ bitbit%#bit#%bit* bit%#* bit#%* bit/ bit%#/ Description ( # ) Returns the current wordsize as a bint. ( # ) Sets the current wordsize. HXS 0 Puts a null hxs in the stack. ( hxs hxs' hxs'' ) Appends hxs'' to hxs'. ( hxs #nibs hxs' ) Appends #nibs zero nibbles to the hxs. ( hxs #nibs ) Returns length in nibbles. ( hxs #m #n hxs' ) Returns sub hxs string. ( hxs hxs' hxs'' ) Adds two hxs. ( % hxs hxs' ) Adds real to hxs, returns hxs. ( hxs % hxs' ) Adds real to hxs, returns hxs. ( hxs hxs' hxs'' ) Subtracts hxs2 from hxs1. ( % hxs hxs' ) Subtracts hxs from real, returns hxs. ( hxs % hxs' ) Subtracts real from hxs, returns hxs. ( hxs hxs' hxs'' ) Multiplies two hxs. ( % hxs hxs' ) Multiplies real by hxs, returns hxs. ( hxs % hxs' ) Multiplies hxs by real, returns hxs. ( hxs hxs' hxs'' ) Divides hxs1 by hxs2. ( % hxs hxs' ) Divides real by hxs, returns hxs.

58 Addr. 2EFC3 2EFAC 2EFAD 2EFAE 2EFAF 2EFB8 Name bit#%/ bitAND bitOR bitXOR bitNOT bitASR

7. Hex Strings Description ( hxs % hxs' ) Divides hxs by real, returns hxs. ( hxs hxs' hxs'' ) Bitwise AND. ( hxs hxs' hxs'' ) Bitwise OR. ( hxs hxs' hxs'' ) Bitwise XOR. ( hxs hxs' ) Bitwise NOT. ( hxs hxs' ) Arithmetic shift one bit to the right. The most significant bit (the sign) does not change. ( hxs hxs' ) Shifts circularly one bit to the left. ( hxs hxs' ) Shifts circularly one byte to the left ( hxs hxs' ) Shifts circularly one bit to the right. ( hxs hxs' ) Shifts circularly one byte to the right. ( hxs hxs' ) Shifts one bit to the left. ( hxs hxs' ) Shifts one byte to the left. ( hxs hxs' ) Shifts one bit to the right. ( hxs hxs' ) Shifts one byte to the right.

2EFB6 2EFB7 2EFB4 2EFB5 2EFB0 2EFB1 2EFB2 2EFB3

bitRL bitRLB bitRR bitRRB bitSL bitSLB bitSR bitSRB

7.1.3
Addr. 2EFCC 2F0EE

Tests
Name HXS==HXS HXS#HXS Description ( hxs hxs' %flag ) == test ( hxs hxs' %flag ) = test

7.1. Reference Addr. 2EFCF 2EFCD 2EFCE 2F0EF Name HXS<HXS HXS>HXS HXS>=HXS HXS<=HXS Description ( hxs hxs' < test ( hxs hxs' > test ( hxs hxs' test ( hxs hxs' test

59

%flag ) %flag ) %flag ) %flag )

Chapter 8 Identiers
Identiers are used to represent the names of objects stored in memory (i.e., variables). To the user, they appear in the stack between single quotes, that is, ''. In System RPL, they are created with ID <name>. When you use this structure, you do not always get the identier in the stack. It is always evaluated. So, if variable anumber contains 123.45 and you put somewhere in your program ID anumber, the identier is evaluated, recalling the contents of the variable. This way, the stack will contain 123.45. To put an id to the stack, use ' ID <name>. As you will see on Chapter 19, the command ' puts the object after it in the stack. This is called quoting. However, ID <name> (without the ') will also put the id in the stack if there is no variable called <name>. This is similar to be behaviour you get when you enter the name of a variable without the quotes in the HP49 command line. You can convert a string to an id using $>ID. The opposite transformation is archived with ID>$. There is also another kind of identiers: the temporary identiers, or lams. These are used when creating local variables, and you will learn about them later in Chapter 18. They are created with LAM <name>, and work pretty much like normal ids. Since ids are closely related to memory access, the functions dealing with its are listed in Chapter 24.

60

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 identier. 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
Name >TAG USER$>TAG %>TAG Description ( ob $tag tagged ) Tags an object. ( ob $tag tagged ) Maximum of 255 characters in string. ( ob % tagged ) Converts real to string using current display mode and tags object. ( ob id/lam tagged ) Tags object with identier or lam. ( ob $tag tagged ) ( ob.. { $.. } tagged... ) Tags one or more objects.

Addr. 05E81 2F266 2F223

05F2E 37B04

ID>TAG TAGOBS

61

62 Addr. 37ABE 37AEB Name STRIPTAGS STRIPTAGSl2

9. Tagged Objects Description ( tagged ob ) Strips all tags from the object. ( tagged ob' ob ob' ) Strips all tags from the object in level two.

Chapter 10 Arrays
There are actually two groups of objects that represent arrays in the HP49G. The rst group (which will be described in this chapter) has existed since the HP48: the normal arrays (to the user they can be only of real or complex numbers), and the linked arrays, which are not accessible to the user. The HP49 introduced a new kind of object to represent arrays: the Symbolic Matrices. Since these are actually a part of the HP49 CAS, they are described in Chapter 43. In User RPL, arrays can be only of real or complex numbers. In System RPL, you can have arrays of anything, even arrays of arrays. Note that an array is not a composite object (see Chapter 11), even if it looks like one. Also, an array can only contain one kind of object. Using MASD, arrays are entered like this:
1 ARRY [[ % 1. % 2. %3. ] [ % 4. % 5. %6. ]]

This is not much different from entering an array in the normal HP49 command line. You can also create an array of (normal, not extended) real or complex numbers by putting them in order in the stack, and entering a list representing the dimensions of the array (real numbers, not bints) in level one. Then run XEQ>ARRY. This function does error checks to ensure there are enough arguments and if they are of the supported types. The function ARSIZE returns the number of elements in an array. You can get the dimensions of the array with DIMLIMITS, which returns a list of bints representing the array dimensions. To get one element of an array, put the element number in level two, the array in level one, and run GETATELN. You will get the element and TRUE if it was found or only FALSE if the element does not exist. More array functions are listed below. There is also another kind of array: the linked arrays. Linked arrays are like normal arrays, except that they have a table with pointers to all the 63

64

10. Arrays

objects in the array. This makes access to array elements faster, because when you need to access one object in the linked array, the only thing necessary is to read the pointer to that object in the table, and go directly there. With normal arrays, a sequential search is necessary. The entries here all deal with the normal arrays (even though some of them also work for CAS Symbolic matrices). For entries specic to Symbolic matrices, see Chapter 43.

10.1
10.1.1
Addr. 0371D

Reference
General Functions
Name GETATELN Description ( # [] ob T ) ( # [] F ) Gets one element from array. ( [[]] #rows #cols T ) ( [] #elem F ) Returns the size of an array. Equivalent to the HP48 command MDIMS. ( [2D] #m #n ) MDIMS followed by DROP. ( [] { # } ) ( [[]] {# #} ) Returns the size of an array, like the User command SIZE, but the lengths are bints and not reals. Equivalent to the HP48 command DIMLIMITS. ( [] # ) Returns max # in an array. ( [] ob [] ob #elts ) Does OVER then ARSIZE. ( [%] # [%] % ) Gets real element. ( [C%] # [C%] C% ) Gets complex element.

16D006

MDIMS

35FD8 16E006

MDIMSDROP DIMLIMITS

35E006 36183 260F8 260F3

ARSIZE OVERARSIZE PULLREALEL PULLCMPEL

10.1. Reference Addr. 26102 Name PUTEL

65 Description ( [%] % # [%]' ) ( [C%] C% # [C%]' ) Puts element at specied position. Converts to "short" before. Warning: no copy to tempob rst. ( [%] % # [%]' ) Puts real element at specied position. Warning: no copy to tempob rst. ( [C%] C% # [C%]' ) Puts complex element at specied position. Warning: no copy to tempob rst. ( M M' ) Matrix transposition. ( V2 V1 ob ) Scalar product of symbolic vectors, no check.

26107

PUTREALEL

260FD

PUTCMPEL

33B006 331006

MATTRAN Yext

10.1.2
Addr. 169006

Conversion
Name
BESTMATRIXTYPE

172006

CKNUMARRY

178006

MATRIX2ARRAY

001007

ListToArry

17F006

XEQ>ARRY

17C006

XEQARRY>

Description ( ob ob ) Converts symbolic matrix with real/cmplex entries to a numeric array. ( ob ob ) Tests if ob is a numeric array. Tries to convert symbolic array to numeric array. ( [] [] ) ( [[]] [[]] ) Tries to convert a symbolic matrix to a numeric one. ( {}/{{}} []/[[]] TRUE ) ( {}/{{}} FALSE ) If possible, converts list of lists to normal array and returns TRUE. Otherwise, returns FALSE. ( ob1...obn {%n} [] ) ( ob11...obmn {%m %n} [[mxn]] ) Builds a matrix a la ARRY. ( [] ob1...obn meta-arry ) Explodes a matrix a la ARRY.

66 Addr. 002007 Name ArryToMatrix Description ( [] M ) Converts array to symbolic array.

10. Arrays

10.1.3
Addr. 2EEDA 2EEDB 2EEDC 2EEDF 2EEDD 2EEDE

Statistics
Name STATCLST STATSADD% STATN STATSMIN STATSMAX STATMEAN Description ( ) Clears DAT. ( % ) Internal +. ( N ) Internal N. ( % ) Internal MIN. ( % ) Internal MAX. ( % ) ( [] ) Internal MEAN. ( % ) ( [] ) Internal SDEV. ( % ) ( [] ) Internal TOT. ( % ) ( [] ) Internal VAR.

2EEE0

STATSTDEV

2EEE1

STATTOT

2EEE2

STATVAR

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, rst 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 objects 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
11.1.1
Addr. 0521F 052FA 052C6 39C8B 05089

Reference
General Operations
Name &COMP >TCOMP >HCOMP (SWAP>HCOMP) CARCOMP Description ( comp comp' comp'' ) Concatenates two composites. ( comp ob comp+ob ) Adds ob to tail (end) of composite. ( comp ob ob+comp ) Adds ob to head (beginning) of composite. ( ob comp ob+comp ) Does SWAP then >HCOMP. ( comp ob_head ) ( comp_null comp_null ) Returns rst object of the composite, or a null composite if the argument is a null composite. ( comp T ob ) ( comp F comp ) If the ag is TRUE, does CARCOMP. ( comp comp-ob_head ) ( comp_null comp_null ) Returns the composite minus its rst object, or a null composite if the argument is a null composite. ( comp ob2 ) Gets the second element of composite. ( comp ob ) Gets the last element of composite. Does DUPLENCOMP then NTHCOMPDROP. ( comp #n ) Returns length of composite (number of objects). ( comp comp #n ) Does DUP then LENCOMP. ( comp flag ) If the composite is empty, returns TRUE. ( comp comp flag ) Does DUP then NULLCOMP?.

361C6

?CARCOMP

05153

CDRCOMP

2825E 2BC006

(2NELCOMPDROP) LASTCOMP

0567B

LENCOMP

3627A 055B7 36266

DUPLENCOMP NULLCOMP? DUPNULLCOMP?

11.1. Reference Addr. 056B6 Name NTHELCOMP

69 Description ( comp #i ob T ) ( comp #i F ) Returns specied element of composite and TRUE, or just FALSE if it could not be found. ( comp #i ob ) Does NTHELCOMP then DROP. ( comp #i ob ob ) Does NTHCOMPDROP then DUP. ( comp ob pred #i ) ( comp ob pred #0 ) (eg: pred = ' %<) Evaluates pred for all elements of composite and ob, and returns index of rst object for which the pred is TRUE. If no one returned TRUE, returns #0. For example, the program below returns #4: :: { %1 %2 %3 %-4 %-5 %6 %7 } %0 ' %< POSCOMP ; ( comp ob #pos ) ( comp ob #0 ) POSCOMP with EQUAL as test. ( ob comp #i ) ( ob comp #0 ) Does SWAP then EQUALPOSCOMP. ( ob {} #i / #0 ) Equivalent to NTHOF, but faster. However, it only works for lists. ( comp # #i ) ( comp # #0 ) POSCOMP with #= as test. ( comp #m #n comp' ) Returns a sub-composite. Makes all index checks rst. ( ob comp T ) ( ob comp ob F ) Returns TRUE if ob is EQUAL to any element of the composite.

35BC3 35D58 376EE

NTHCOMPDROP NTHCOMDDUP POSCOMP

3776B

EQUALPOSCOMP

37784

NTHOF

0FD006

ListPos

37752

#=POSCOMP

05821

SUBCOMP

376B7

matchob?

70 Addr. 371B3 Name Embedded?

11. Composite Objects Description ( ob1 ob2 flag ) Returns TRUE if ob2 is embedded in, or is the same as, ob1. Otherwise returns FALSE. ( comp test ob T ) ( comp test F ) Tests every element for test. The rst one that returns TRUE is put into the stack along with TRUE. If no object returned TRUE, FALSE is put into the stack. For example, the program below returns %-4 and TRUE. :: { %1 %2 %2 %-4 %-5 %6 } ' %0< Find1stTrue ; ( ob test comp nextob T ) ( ob test comp ob F ) Tests every odd element (1,3,...) in the composite. If a test returns TRUE, the object after the tested one is returned, along with TRUE. If no object tests TRUE, FALSE is returned. For example, the program below returns %6 and TRUE. :: %0 ' %< { %1 %2 %3 %-4 %-5 %6 } Lookup ; ( ob test nextob T ) ( ob test ob F ) Return Stack: ( comp ) Lookup with the composite already pushed (with >R) onto the runstream. Called by Lookup. ( ob comp nextob T ) ( ob comp ob F ) Lookup with EQ as test.

37798

Find1stTrue

377C5

Lookup

377DE

Lookup.1

37829

EQLookup

11.1. Reference Addr. 37B54 Name NEXTCOMPOB

71 Description ( comp #ofs comp #ofs' ob T ) ( comp #ofs comp F ) Returns object at specied nibble offset from start. If the object is SEMI (i.e., the end of the composite has been reached) returns FALSE. To get the rst element, use FIVE as offset value (to skip the prolog). ZERO works as well.

11.1.2

Building

There are also shortcut words to build lists and secondaries, with specied number of objects, described in the sections below. Addr. 05459 05445 0546D 05481 293F8 Name {}N ::N SYMBN EXTN P{}N Description ( obn..ob1 #n { obn..ob1 } ) ( ob1..obn #n :: ob1..obn ; ) ( ob1..obn #n symb ) Build a symbolic object. ( ob1..obn #n u ) Builds a unit object. ( ob1..obn #n {} ) Build list with possible garbage collection.

11.1.3
Addr. 054AF 3622A 3623E 35BAF 35C68 2F0EC 3BADA 366E9

Exploding
Name INNERCOMP DUPINCOMP SWAPINCOMP INCOMPDROP INNERDUP ICMPDRPRTDRP (INNERCOMP>%) INNER#1= Description ( comp obn..ob1 #n ) ( comp comp obn..ob1 #n ) ( comp obj obj obn..ob1 #n ) ( comp obn..ob1 ) ( comp obn..ob1 #n #n ) ( comp obn...ob4 ob2 ob1 ) Does INCOMPDROP then ROTDROP. ( comp obn..ob1 %n ) ( comp obn..ob1 flag )

72 Addr. 157006 Name SYMBINCOMP

11. Composite Objects Description ( symb ob1 .. obN #n ) ( ob ob #1 ) ( {} {} #1 ) Explodes symbolic object into meta. Other objects are converted into one-object metas by pushing #1 into the stack. ( ob1 ob2 meta1 meta2 ) Does SYMBINCOMP for 2 objects. ( {} ob1 .. obN #n ) ( ob ob #1 ) Explodes a list into a meta object. Other objects are converted into one-object metas by pushing #1 into the stack.

12A006 158006

2SYMBINCOMP CKINNERCOMP

11.1.4
Addr. 055E9 36ABD 159006

Lists
Name NULL{} DUPNULL{}? DUPCKLEN{} Description ( {} ) Pushes a null list to the stack. ( {} {} flag ) ( {} {} #n ) ( ob ob #1 ) Return length of list, or 1 for non-lists. ( ob { ob } ) ( ob1 ob2 { ob1 ob2 } ) ( ob1 ob2 ob3 { ob1 ob2 ob3 } ) ( ob1..obn #n+1 {} ) ( ob #i {} {}' ) Replaces object at specied position. Assumes valid #i. ( {} ob # {}' ) Insert object into list at given position. The position must be < than length of the list. If the position is zero, >TCOMP is used. ( list list1 list2 ) Extract in list2 all occurrances of the 1st object of list, the remaining objects are stored in list1. list1 = list-list2.

29D18 36202 36216 361EE 2B42A

ONE{}N TWO{}N THREE{}N #1-{}N PUTLIST

2FC006

INSERT{}N

2FB006

NEXTPext

11.1. Reference Addr. 2FD006 15A006 Name COMPRIMext CKCARCOMP

73 Description ( {} {}' ) Suppress multiple occurrances in the list. ( {} ob1 ) ( ob ob ) Returns rst element for lists, or object itself if it is not a list. ( {} ob {}' ) Appends ob to list if not already there. ( {} ob {}' ) Equivalent to apndvarlst, but faster. ( {} ob {}' ) Adds ob at the beginning of the list if not present. If ob is in list, move ob to the beginning of list. ( L pred L' ) Sorts list according to give predicate. Pred is a program that tests two elements and returns FALSE if the rst is to appear earlier than the second. To sort in numerical order, for example, the predicate would be a > test. ( {} ob ) Returns the product of all elements of the list. ( ob ) Is ob a list of equations? Returns T if ob is a list of at least two elements, and the second element is not a list itself.

2EF5A 0FE006 4EB006

apndvarlst AppendList prepvarlist

100006

SortList

28A006 25ED3

PIext EqList?

11.1.5
Addr. 055FD 37073 3705A 37087

Secondaries
Name NULL:: Ob>Seco ?Ob>Seco 2Ob>Seco Description ( :: ; ) Returns null secondary. ( ob :: ob ; ) Does ONE then ::N. ( ob :: ob ; ) If the object is not a secondary, does Ob>Seco. ( ob1 ob2 :: ob1 ob2 ; ) Does TWO then ::N.

74 Addr. 3631A Name ::NEVAL Description ( ob1..obn #n ? Does ::N then EVAL.

11. Composite Objects

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
Addr. 0326E 37032 35FB0

Stack Functions
Name NDROP DROPNDROP #1+NDROP Description ( meta ) Should be called drop. ( meta ob ) Should be called DROPdrop. ( ob meta ) Should be called dropDROP. aka: N+1DROP 75

76 Addr. 28211 391006 Name NDROPFALSE NDROPZERO

12. Meta Objects Description ( meta F ) Should be called dropFALSE. ( obn..ob1 #n #0 ) Replace Meta object with empty Meta object. Should be called dropZERO. ( meta1 meta2 meta2 meta1 ) Should be called swap. ( meta1 meta2 meta3 meta2 meta3 meta1 ) Should be called rot. ( meta1 meta2 meta3 meta3 meta1 meta2 ) Should be called unrot. ( meta1 meta2 meta2 ) Should be called swapdrop. ( meta1 meta2 meta3 meta2 meta3 meta1 meta1 ) Should be called rotdup.

29A5D 29A8F

psh roll2ND

29B12

unroll2ND

3695A 36FA6

SWAPUnNDROP metaROTDUP

12.1.2
Addr. 296A7 2973B 36FBA 36FCE

Combining Functions
Name top& pshtop& ROTUntop& roll2top& Description ( meta1 meta2 meta1&meta2 ) ( meta1 meta2 meta2&meta1 ) ( meta1 meta2 meta3 meta2 meta3&meta1 ) ( meta1 meta2 meta3 meta3 meta1&meta2 ) aka: rolltwotop& ( meta1 meta2 meta3 meta1&meta3 meta2 )

2963E

psh&

12.1. Reference

77

12.1.3
Addr. 3592B 34431 34504 36147 29693 28071 28085 29821 298C0 2F193 29754 406006 29972 36946 2F38E 2F38F

Meta and Object Operations


Name SWAP#1+ DUP#1+PICK get1 OVER#2+UNROL psh1top& pull pullrev psh1& psh1&rev UobROT pullpsh1& addt0meta pshzer SWAPUnDROP xnsgeneral xsngeneral 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.

) ) ) )

12.1.4
Addr. 3760D

Other Operations
Name SubMetaOb Description ( meta #start #end meta' ) Gets a sub-meta. Does range checks.

78 Addr. 37685 Name SubMetaOb1

12. Meta Objects Description ( ob1..obi..obn #n #i #n #i ob1..obi #n #i ) This function can be used to take the rst i objects of a meta, if you follow it with SWAPDROP. Example: :: %1 %2 %3 %4 %5 BINT5 BINT3 BINT5 BINT3 SubMetaOb1 ; results in: %1 %2 %3 #5 #3 ( meta #begin #end meta' ) Extracts submeta from a meta. ( ob1..obn-i..obn #i #n+1 ob1..ob..obn-i #n-i obn-i+1..obn #i ) #n is the count of the objects in meta. Takes the last #i elements of meta and creates a new one. Example: :: %1 %2 %3 %4 %5 BINT2 BINT6 metatail ; Results: %1 %2 %3 #3 %4 %5 #2 ( meta #i meta1 meta2 ) Split a meta in 2 metas at position i. meta1 will contain #i elements meta2 will contain #n-i elements. ( meta2 meta1 meta2 meta1 flag ) Test equality of 2 metas. ( Meta ob Meta ob #pos ) Returns last occurrence of ob in Meta. If a component of meta is a list/symb then search if ob is embedded in this component of meta. ( Meta2 Meta1 ob Meta2 Meta1 ob #pos ) Returns last occurrence of ob in Meta1 or in Meta2. #pos is >0 if in meta2, is <0 if in meta1 (#pos=MINUSONE-#). ( Meta Meta flag ) Tests if Meta is an integer.

33F006 2F356

submeta metatail

385006

metasplit

39F006 3BF006

metaEQUAL? EQUALPOSMETA

3C0006

EQUALPOS2META

198006

METAINT?

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 difcult to include one in the program, it is just laborious. Units start with UNIT and end with ;. Inside, there are commands to dene the unit. The best way to understand how a unit is reprsented is by disassembling it. The unit object 9.8_m/s2 can be created using the code below:
1 :: UNIT % 9.8 "m" "s" %2 um^ um/ umEND ; ;

10

As you can see, creating units is done in a reverse polish way using the words um, um*, um/ and umP. The meaning of the rst three ones is easy to guess. The last is used to create prex operators (kilo, mega, mili, etc.). First enter the prex as a character or string, and then the unit name (all operations take unit names as characters or strings). Run umP and the prexed unit is created. Then call the other functions as needed. To end a unit, use umEND, which joins the number (entered rst) to the unit part. The code above could be made shorter if built-in characters and strings (listed on Chapter 6) were used. Since units are composite objects, you can use, for example, INNERCOMP to explode a unit into a meta object. You can also create a unit from a meta object (see Chapter 12), using EXTN. The program below, for example, adds the unit m/s to the number in the stack: 80

13.1. Reference
1 :: CK1NOLASTWD CKREAL "m" "s" um/ umEND BINT5 EXTN ;

81

Note that the um words, when executed, just put themselves in the stack. Several operations can be done with units. The complete list is given below. The most important are UM+, UM-, UM*, UM/ and UFACT, whose meanings are obvious; UMCONV, which works like user word CONVERT; UMSI, equivalent to UBASE and U>nbr, which returns the numeric part of a unit.

13.1
13.1.1
Addr. 2D74F 2D759 2D763 2D76D 2D777 05481

Reference
Creating Units
Name um* um/ um umP umEND EXTN Description * marker / marker marker Char prex operator Unit end operator ( ob1..obn #n u ) Builds a unit object.

82

13. Unit Objects

13.1.2
Addr. 2F099

General Functions
Name U>NCQ Description ( u n%% cf%% qhxs ) Returns the number, conversion factor to base units and a vector in the form: [ kg m A s K cd mol r sr ? ] where each element represents the exponent of that unit. For example, 1_N U>NCQ would return: %%1 %%1 [ 1 1 0 -2 0 0 0 0 0 0 ] since it is equivalent to 1_kg*m/s2 ( % u u' ) Replaces number part of unit. ( u1 u2 u1' ) Change units of unit1 to units of unit2. ( u u' ) Equivalent to user word UBASE. ( u % u' ) Returns number and normalized part of unit. ( u $ ) Converts unit to string. ( u % ) Returns number part of unit. ( u % u' ) Replaces number part of unit. ??? Used by UMCONV for the conversion of temperature units. ( % ob ob' % ob ) ( % ob u u' ob ) If the level one object is a unit object, replaces the numeric part of it with the number on level 3. If not, just DROP.

2F07A 2F08C 2F090 2F095 2F019 2F07B 2F098 2F09A

UM>U UMCONV UMSI UMU> UNIT>$ U>nbr Unbr>U TempConv

25EE4

KeepUnit

13.1. Reference

83

13.1.3
Addr. 2F081 2F082 2F080 2F083 2F07D 2F07E 2F07F 2F08F 2F08E 2F096 2F08A 2F08B 2F092 2F093 2D949 2D95D 2D971 2D985 2D999 2D9CB 2D9EE 2F08D 2F091 2F094

Arithmetic Functions
Name UM+ UMUM* UM/ UM% UM%CH UM%T UMMIN UMMAX UMXROOT UMABS UMCHS UMSQ UMSQRT UMSIGN UMIP UMFP UMFLOOR UMCEIL UMRND UMTRC UMCOS UMSIN UMTAN Description ( u u' u'' ) ( u u' u'' ) ( u u' u'' ) ( u u' u'' ) ( u %percent u' ) ( u u' % ) ( u u' % ) ( u u' u? ) ( u u' u? ) ( u u' u'' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' ) ( u u' )

13.1.4
Addr. 2F087 2F07C 2F086 2F089 2F085 2F088

Tests
Name UM=? UM#? UM<? UM>? UM<=? UM>=? Description ( u u' %flag ( u u' %flag ( u u' %flag ( u u' %flag ( u u' %flag ( u u' %flag ) ) ) ) ) )

84 Addr. 2F076 Name puretemp?

13. Unit Objects Description ( [] []' [] []' flag ) Checks of the two arrays both denote pure temperature units, i.e. if both arrays are equal to [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]

Chapter 14 Symbolics
Symbolic objects, or algebraic expressions, are another type of composite objects. Their structure is very similar to the units. They are delimited by SYMBOL and ;. Inside, the expression is created in a reverse polish way. V The disassembly of the equation R = should show how to include a I symbolic object in your program, should you need one.

:: SYMBOL ID R ID V ID I x/ x= ; ;

As you have seen, the variables are represented by identiers, and the functions are the user-accessible ones, whose names are preceded by a lowercase x in System RPL. To create a symbolic object from a meta, you use the SYMBN function. Note that when you include a funcion, you will have to quote it, ie, put the command ' before the command to put it in the stack instead of executing it. Quoting objects will be explained in more detail in section 19.2. On the HP49, the new CAS contains most entries dealing with symbolics. These entries are described in the CAS part of the book. mainly in Chapters 44 and 45. However, some entries which were available already on the HP48 have been kept for compatibility reasons. These entries are listed below. 85

86

14. Symbolics

14.1
14.1.1
Addr. 0546D 2BD8C

Reference
General Operations
Name SYMBN (SYMBN:) Description ( ob1..obn #n sym ) ob1..obn #n -> symb Does 'R, SWAP#1+ then SYMBN. Creates a symbolic from the meta in the stack and the next object in the runstream. This object is added to the end of the symbolic. ( ob ob' ) If ob is symbolic, does nothing, otherwise ONE SYMBN. ( ob ob' ob'' ob' ) Does SWAP symcomp SWAP. ( %/C%/Z/id/lam ob' %/C%/Z/id/lam ) ( ob ob' symb ) Drop ob'. Then, if the object in the stack is a real, complex, zint, identier or lam, does nothing. For other objects, calls symcomp to create a one-object symbolics. ( %/C%/Z/id/lam #1 %/C%/Z/id/lam ) ( ob #1 symb ) ( ob # symb ) If # is BINT1, calls DROP?symcomp. If it is any other number, calls SYMBN. ( ob % ) Internal version of NUM. ( sym {} ) Returns a list of the variables of the equation, recursing into programs and functions in the equation. ( ob ob flag ) Returns TRUE if ob is a symbolic nishing by x=.

286E7

symcomp

2F073 28ACE

SWAPcompSWAP (DROP?symcomp)

293A3

(?symcomp)

25EA2 2F110

CRUNCH (FINDVARS)

462006

EQUATION?

14.1. Reference Addr. 463006 Name USERFCN?

87 Description ( ob ob flag ) Returns TRUE if ob is a symbolic nishing by xFCNAPPLY. ( ) Clears numeric results ag (system ag 3) for the next command only. Example: SYMCOLCT = :: uncrunch colct ; ( sym symf ) Used by one argument functions to evaluate a symbolic or numeric routine according to numeric results ag. Usage: :: cknumdsptch1 <sym> <num> ; If numeric mode, CRUNCH is applied to the level one object and COLA is applied to <num>. If symbolic mode, ckseval1: is called. Example: :: cknumdsptch1 MetaRE xRE ; ( sym sym symf ) Used by two argument functions to evaluate function according to current numeric mode. Usage: :: sscknum2 <sym> <num> ; In numeric mode both arguments are CRUNCHed and <num> is COLAd. Else, cksseval2: is called. Example: SYM+ = :: sncknum2 Meta+ x+ ; ( sym % symf ) Usage: :: sncknum2 <sym> <num> ; In symbolic mode uses cksneval2:. Example: SYM+O = :: sncknum2 Meta+Con x+ ; ( % sym symf ) Usage: :: nscknum2 <sym> <num> ; In symbolic mode uses cknseval2:. Example: O+SYM = :: nscknum2 Con+Meta x+ ;

29CB9

uncrunch

2BCA2

cknumdsptch1

2BB21

sscknum2

2BB3A

sncknum2

2BB53

nscknum2

88

14. Symbolics

14.1.2
Addr. 2EF26 2F2A9

Other Functions
Name SYMSHOW XEQSHOWLS Description ( sym id/lam symf ) ( sym {} symf )

14.1.3
Addr. 29986

Meta Symbolics Functions


Name pshzerpsharg 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.

3701E 36FE2 3F1006

pZpargSWAPUn plDRPpZparg DIVMETAOBJ

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 modied. 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 ts.

89

90

15. Graphics Objects (Grobs)

15.1
15.1.1
Addr. 27AA3 27D3F 27D5D 27D7B 2E25C 0860B0 0870B0

Reference
Built-in Grobs
Name (NULLGROB) CROSSGROB MARKGROB (StdLabelGrob) (InvLabelGrob)
grobAlertIcon

grobCheckKey

Description ( grob ) 0x0 Null grob ( grob ) 5x5 Cross cursor ("+") ( grob ) 5x5 Mark symbol ("x") 21x8 normal menu key 21x8 inverse menu key 9x9 Alert grob 21x8 Check Key menu grob A tickmark and "CHK" in a menu grob.

15.1.2
Addr. 26085 25EBB 36C68 2F324 2F320

Dimensions
Name GROBDIM DUPGROBDIM GROBDIMw CKGROBFITS CHECKHEIGHT Description ( grob #height #width ) ( grob grob #height #width ) ( grob #width ) ( g1 g2 #n #m g1 g2' #n #m ) Shrinks g2 if it does not t in g1. ( grob #height ) Forces grob (ABUFF/GBUFF) to be at least 64 rows high.

15.1.3
Addr. 2607B 2EFDB

Grob Handling
Name GROB! (GROB+) Description ( grob1 grob2 #x #y ) Stores grob1 into grob2. Bang type. ( grob1 grob2 grob ) Combines two grobs using bitwise OR. Errors when grobs have different sizes.

15.1. Reference Addr. 2F342 Name GROB+#

91 Description ( flag grob1 grob2 #x #y grob' ) Inserts grob2 into the specied position of grob1, using OR (if ag is TRUE) or XOR (if ag is FALSE). Does all necessary checks rst. ( grob #x1 #y1 #x2 #y2 grob' ) Blanks a rectangular region of the grob. Bang type. ( grob #x1 #y1 #x2 #y2 ) Blanks a rectangular region of the grob. Probably only useful if grob is the text or graphics grob (see section on display-organization). Bang type. ( grob #x1 #y1 #x2 #y2 grob' ) Returns specied portion of grob. ( #x #y grob ) Stores grob in HARDBUFF with upper left corner at (#x,#y). HARDBUFF is expanded if necessary. ( grob ) Stores new graph grob. ( #height #width grob ) Creates a blank grob. ( #w #h ) Creates blank graph grob. Minimum size is 131x64. Smaller grobs will be automatically resized. ( grob grob' ) Inverts grob data bits. Bang type. ( #x #y ) Sets pixel in text grob. ( #x #y ) Clears pixel in text grob. ( #x #y flag ) Is pixel in text grob on? ( #x #y ) Sets pixel in graph grob. ( #x #y ) Clears pixel in graph grob.

26080

GROB!ZERO

368E7

GROB!ZERODRP

2612F 25F0E

SUBGROB XYGROBDISP

25ED8 260B2 2F0DB

GROB>GDISP MAKEGROB MAKEPICT#

2609E 260E4 260DF 260EE 260DA 260D5

INVGROB PIXON PIXOFF PIXON? PIXON3 PIXOFF3

92 Addr. 260E9 280C1 Name PIXON?3 ORDERXY#

15. Graphics Objects (Grobs) Description ( #x #y flag ) Is pixel in graph grob on? ( #x1 #y1 #x2 #y2 #x1' #y1' #x2' #y2' ) Orders the bints to be appropriate for dening a rectangle in a grob. Swaps #x1 and #x2 if #x2<#x1. Swaps #y1 and #y2 if #y2<#y1. ( %x1 %y1 %x2 %y2 %x1' %y1' %x2' %y2' ) ORDERXY# with real numbers. ( #x1 #y1 #x2 #y2 ) Draws a line in text grob. ( #x1 #y1 #x2 #y2 ) Clears a line in text grob. ( #x1 #y1 #x2 #y2 ) Toggles a line in text grob. ( #x1 #y1 #x2 #y2 ) Draws a line in graph grob. ( #x1 #y1 #x2 #y2 ) Draws a line in graph grob. x1<x2 is not required. ( #x1 #y1 #x2 #y2 ) Clears a line in graph grob. ( #x1 #y1 #x2 #y2 ) Toggles a line in graph grob. ( #x1 #y1 #x2 #y2 ) Toggles line in graph grob. x1<x2 is not required. ( #x1 #y1 #x2 #y2 ) Draws rectangle in graph grob. ( grob ) Returns current display. ( grob ) Grob to display. ( grob2 grob1 grob ) Vertical grob addition. grob2 will be above grob1.

280F8

ORDERXY%

2EF9F 2EFA0 2EFA1 2EFA2 2F13F

LINEON LINEOFF TOGLINE LINEON3 DRAWLINE#3

2EFA3 2EFA4 2F382

LINEOFF3 TOGLINE3 TOGGLELINE#3

2F32C 2EF03 2EF04 0BF007

DRAWBOX# DOLCD> DO>LCD GROBADDext

15.1. Reference

93

15.1.4
Addr. 25592

Greyscale Graphics
Name SubRepl Description ( grb1 grb2 #x1 #y1 #x2 #y2 #W #H grb1' ) Replace a part of grb1 with a part of grb2 in REPLACE mode. ( grb1 grb2 #x1 #y1 #x2 #y2 #W #H grb1' ) Replace a part of grb1 with a part of grb2 in OR mode. ( grb1 grb2 #x1 #y1 #x2 #y2 #W #H grb1' ) Replace a part of grb1 with a part of rgb2 in XOR mode. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a white line. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a light grey line. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a dark grey line. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a black line. ( grb #x1 #y1 #x2 #y2 grb' ) XOR a line. ( grb #Cx #Cy #r grb' ) Draw a white circle. ( grb #Cx #Cy #r grb' ) Draw a light grey circle. ( grb #Cx #Cy #r grb' ) Draw a dark grey circle. ( grb #Cx #Cy #r grb' ) Draw a black circle ( grb #Cx #Cy #r grb' ) XOR a circle. ( grb #x1 #y1 #x2 #y2 grb' flag ) Get a part of a grob. ( grb1 grb2 #x #y grb1' ) Copy grb2 into grb1 in REPLACE mode.

25597

SubGor

2559C

SubGxor

25565 2556F 25574 2556A 25579 2F218 2F216 2F217 2F215 2F219 2557E 25583

LineW LineG1 LineG2 LineB LineXor CircleW CircleG1 CircleG2 CircleB CircleXor Sub Repl

94 Addr. 25588 2558D 255A1 255B0 255BA 255C4 255C9 255BF 255CE 255D3 255D3 255D8 255DD 255E2 255E7 255EC 255F1 255F6 255FB Name Gor Gxor Grey? ScrollVGrob PixonW PixonG1 PixonG2 PixonB PixonXor FBoxW FBoxG1 FBoxG2 FBoxB FBoxXor LBoxW LBoxG1 LBoxG2 LBoxB LBoxXor

15. Graphics Objects (Grobs) Description ( grb1 grb2 #x #y grb1' ) Copy grb2 into grb1 in OR mode. ( grb1 grb2 #x #y grb1' ) Copy grb2 into grb1 in XOR mode. ( grob flag ) Is grob a Greyscale Grob? ( grb #W #X #Yd #Ys #h grb' ) Scroll up and down a portion of a graphical object. ( grb #x #y grb' ) Make a pixel white. ( grb #x #y grb' ) Make a pixel light grey. ( grb #x #y grb' ) Make a pixel dark grey. ( grb #x #y grb' ) Make a pixel black. ( grb #x #y grb' ) Apply XOR to a pixel. ( grb #x1 #y1 #x2 #y2 grb' ) Make a white lled rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Make a light grey lled rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Make a dark grey lled rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Make a black lled rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Apply XOR to a lled rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a white rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a light grey rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a dark grey rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Draw a black rectangle. ( grb #x1 #y1 #x2 #y2 grb' ) Apply XOR to a rectangle.

15.1. Reference Addr. 2F21B 2F21A 255B5 Name ToGray Dither Distance Description ( grb grb'/grb ) Convert a B&W grob to Greyscale. ( grb grb'/grb ) Convert a greyscale grob to B&W ( #x #y #SQRT(x2+y2) ) Compute the distance between two points.

95

15.1.5
Addr. 2E166 2E189 2E1EB 2E24D 25E7F

Creating Menu Label Grobs


Name MakeStdLabel MakeBoxLabel MakeDirLabel MakeInvLabel Box/StdLabel 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.

25F01

Std/BoxLabel

25E80

Box/StdLbl:

2E0D5 2E0F3 2E11B 2E107

Grob>Menu Str>Menu Id>Menu Seco>Menu

96 Addr. 25886 Name DoLabel

15. Graphics Objects (Grobs) Description ( #col ob ) If ob is of one of the supported types, displays a menu label. If not, generates a "Bad Argument Type" error.

15.1.6
Addr. 25F7C

Converting Strings to Grobs


Name $>GROB 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 ag 90. ( $ #n flag grob ) Transforms string into grob (using the minifont), then takes all characters starting after column #n. ag 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 specied 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.

25F86

$>GROBCR

25F81

$>grob

25F8B

$>grobCR

05F0B3

($>grobOrGROB)

25F24

RIGHT$3x6

25FEF

CENTER$3x5

15.1. Reference Addr. 2E2AA Name MakeLabel

97 Description ( $ #w #x grob grob' ) Inserts $ into grob using CENTER$3x5 with y=5. ( grob #x #y $ #w grob' ) Like CENTER$3x5, but the left corner of the text is positioned at #x. ( grob #x #y $ #w grob' ) Like LEFT$3x5, but erase background rst. ( grob #x #y $ #w grob' ) Like LEFT$3x5, but if the text does not t, replace the last character by character 31 (dots) to show that the text was truncated. ( grob #x #y $ #w #h grob' ) Like LEFT$3x5, but newlines in the strings are interpreted and start new lines. Note the additional argument #h for the maximum height of the text grob. ( grob #x #y $ #w #h grob' ) Like LEFT$3x5CR, but show truncation with arrows. ( grob #x #y $ #w grob' ) Same as CENTER$3x5, but using system font. ( grob #x #y $ #w grob' ) Like CENTER$5x7, but the left corner of the text is positioned at #x. ( grob #x #y $ #w grob' ) Like LEFT$5x7, but erase background rst. ( grob #x #y $ #w grob' ) Like LEFT$5x7, but if the text has to be truncated, replace the last character with character 31 (arrow). ( grob #x #y $ #w grob' ) Like LEFT$5x7, but interpret newlines. ( grob #x #y $ #w grob' ) Like LEFT$5x7CR, but show truncation with arrows.

25FF9

LEFT$3x5

26071 26008

ERASE&LEFT$3x5

LEFT$3x5Arrow

2601C

LEFT$3x5CR

26012

LEFT$3x5CRArrow

25FF4

CENTER$5x7

25FFE

LEFT$5x7

2606C 26003

ERASE&LEFT$5x7

LEFT$5x7Arrow

26017 2600D

LEFT$5x7CR
LEFT$5x7CRArrow

98

15. Graphics Objects (Grobs)

15.1.7
Addr. 019004 01A004 01F004 01E004 0BE007 0C0007

Creating Grobs from Other Objects


Name EQW3GROB EQW3GROBStk EQW3GROBmini EQW3GROBsys XGROBext 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 veried 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 specied in hexadecimal form. Rompointers are always automatically executed (like identiers), so you have to quote them (see section 19.2) if you want one in the stack.

16.1
16.1.1
Addr. 25EEB

Reference
Port Operations
Name NEXTLIBBAK Description ( #addr backup/library #nextaddr ) Gets next library or backup.

99

100

16. Library and Backup Objects

16.1.2
Addr. 07E50 08CCC 07E99

Rompointers
Name #>ROMPTR ROMPTR># ROMPTR@ Description ( #lib #cmd ROMPTR ) Creates rompointer. ( ROMPTR #lib #cmd ) Splits rompointer. ( ROMPTR ob T ) ( ROMPTR F ) Recalls contents of rompointer. ( ROMPTR ROMPTR ob T ) ( ROMPTR ROMPTR F ) Does DUP then ROMPTR@. ( ob ob' ) If ROM-WORD? and TYPECOL? then RPL@. ( ob ob' ) If TYPEROMP? and content exists INHARDROM? then return contents. ( ob ) Recalls contents of next object in the runstream (which must be a rompointer). ( ob flag ) ( ob ob flag )

35C40

DUPROMPTR@

35A88 35AAB

?>ROMPTR ?ROMPTR>

35BFF

RESOROMP

34FCD 34FC0

ROM-WORD? DUPROM-WORD?

16.1.3
Addr. 07709 076AE 2F2A7 07638

Libraries
Name TOSRRP OFFSRRP XEQSETLIB SETHASH Description ( # ) Attaches library to HOME directory. ( # ) Detaches library from HOME directory. ( % ) Internal ATTACH. ( hxs #libnum ) Buggy?

16.1. Reference

101

16.1.4
Addr. 081D9 0905F

Backup Objects
Name BAKNAME BAK>OB Description ( bak id T ) Returns backup's name ( bak ob ) Gets backup object.

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 RPLs 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 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 -

17.1

Reference

In this section, the numbers 1, 2. . . n are used to represent different objects, not necessarily any kind of number.

105

106 Addr. 03188 35CE0 2D5006 28143 35FF3 3457F 36133 3432C 3611F 35D30 34431 031AC 35D30 36CA4 031D9 03244 357CE 37032 35733 3574D 36007 3606B 03258 341D2 341D7 341DC 341E8 341F4 0326E 35FB0 Name DUP DUPDUP 3DUP NDUPN DUPROT DUPUNROT DUPROLL DUP4UNROLL DUPPICK DUP3PICK DUP#1+PICK 2DUP 2DUPSWAP 2DUP5ROLL NDUP DROP DROPDUP DROPNDROP DROPSWAP DROPSWAPDROP DROPROT DROPOVER 2DROP 3DROP 4DROP 5DROP 6DROP 7DROP NDROP #1+NDROP

17. Stack Operations Description ( ob ob ob ) ( ob ob ob ob ) ( 3 2 1 3 2 1 3 2 1 ) ( ob #n ob..ob #n ) ( ob #0 #0 ) ( 1 2 2 2 1 ) ( 1 2 2 1 2 ) aka: SWAPOVER ( 1..n #n 1 3..n #n 2 ) ( 1 2 3 3 1 2 3 ) ( n..1 #n n..1 #n n-1 ) ( 1 2 1 2 2 1 ) aka: 2DUPSWAP ( n..1 #n n..1 #n n ) ( 1 2 1 2 1 2 ) ( 1 2 1 2 2 1 ) aka: DUP3PICK ( 1 2 3 2 3 2 3 1 ) ( 1..n #n 1..n 1..n ) ( 1 ) ( 1 2 1 1 ) ( 1..n #n ob ) ( 1 2 3 2 1 ) ( 1 2 3 2 ) aka: ROT2DROP, XYZ>Y ( 1 2 3 4 2 3 1 ) ( 1 2 3 1 2 1 ) ( 1 2 ) ( 1 2 3 ) aka: XYZ> ( 1..4 ) aka: XYZW> ( 1..5 ) ( 1..6 ) ( 1..7 ) ( 1..n #n ) ( ob 1..n #n ) aka: N+1DROP

17.1. Reference Addr. 2F0A1 Name RESETDEPTH

107 Description ( ob1..obn obn+1..obx #n ob1..obn ) Drops all but #n levels of the stack. ( 1..n 1..n #n ) ( 1..n #n n..1 #n ) ( 1 2 2 1 ) ( 1 2 2 1 1 ) ( 1 2 2 1 2 1 ) ( 1 2 2 ) aka: XY>Y ( 1 2 2 2 ) ( 1 2 3 3 1 ) aka: UNROTDROP, XYZ>ZX ( 1 2 3 3 2 1 ) aka: UNROTSWAP, XYZ>ZYX ( 1 2 3 4 2 4 3 1 ) aka: XYZW>YWZX ( 1 2 2 1 2 ) aka: DUPUNROT ( 1 2 3 1 3 2 1 ) ( 1 2 3 4 3 4 1 2 ) ( 1 2 3 2 3 1 ) ( 1 2 3 2 3 1 1 ) ( 1 2 3 2 3 1 3 1 ) ( 1 2 3 2 3 ) aka: XYZ>YZ ( 1 2 3 2 ) aka: DROPSWAPDROP, XYZ>Y ( 1 2 3 3 2 ) aka: XYZ>ZY ( 1 2 3 2 1 3 ) aka: XYZ>YXZ ( 1 2 3 3 ) aka: UNROT2DROP, XYZ>Z ( 1 2 3 2 3 1 3 ) ( 1 2 3 4 2 3 4 1 ) aka: FOURROLL, XYZW>YZWX ( 1 2 3 4 2 3 4 ) ( 1 2 3 4 2 3 1 4 )

0314C 28187 03223 3576E 368B5 3421A 35857 35872 341BA 36C90 3457F 36CB8 35018 03295 3579C 35CA4 341A8 3574D 34195 3416E 343BD 35CCC 3423A 3588B 35F06

DEPTH reversym SWAP SWAPDUP SWAP2DUP SWAPDROP SWAPDROPDUP SWAPDROPSWAP SWAPROT SWAP4ROLL SWAPOVER SWAP3PICK 2SWAP ROT ROTDUP ROT2DUP ROTDROP ROT2DROP ROTDROPSWAP ROTSWAP ROTROT2DROP ROTOVER 4ROLL 4ROLLDROP 4ROLLSWAP

108 Addr. 36043 360E3 34257 358A7 34281 342EA 342BB 03325 35FC4 35D80 344F2 34517 2D6006 344DD 344CB 3422B 35D1C 35872 343BD 341BA 360CF 3422B 34331 35D44 343CF 36057 Name 4ROLLROT 4ROLLOVER 5ROLL 5ROLLDROP 6ROLL 7ROLL 8ROLL ROLL ROLLDROP ROLLSWAP #1+ROLL #2+ROLL #3+ROLL #+ROLL #-ROLL UNROT UNROTDUP UNROTDROP UNROT2DROP UNROTSWAP UNROTOVER 3UNROLL 4UNROLL 4UNROLLDUP 4UNROLL3DROP 4UNROLLROT

17. Stack Operations Description ( 1 2 3 4 2 4 1 3 ) aka: FOURROLLROT ( 1 2 3 4 2 3 4 1 4 ) ( 1 2 3 4 5 2 3 4 5 1 ) aka: FIVEROLL ( 1 2 3 4 5 2 3 4 5 ) ( 1..6 2..6 1 ) aka: SIXROLL ( 1..7 2..7 1 ) aka: SEVENROLL ( 1..8 2..8 1 ) aka: EIGHTROLL ( 1..n #n 2..n 1 ) ( 1..n #n 2..n ) ( 1..n #n 2..n-1 1 n ) ( ob 1..n #n 1..n ob ) ( a b 1..n #n b 1..n a ) ( obn+3...obn...ob1 #n obn+2...ob1 obn+3 ) ( 1..n+m #n #m 2..n+m 1 ) ( 1..n-m #n #m 2..n-m 1 ) ( 1 2 3 3 1 2 ) aka: 3UNROLL, XYZ>ZXY ( 1 2 3 3 1 2 1 ) ( 1 2 3 3 1 ) aka: SWAPDROPSWAP, XYZ>ZX ( 1 2 3 3 ) aka: ROTROT2DROP, XYZ>Z ( 1 2 3 3 2 1 ) aka: SWAPROT, XYZ>ZYX ( 1 2 3 3 1 2 1 ) ( 1 2 3 3 1 2 ) aka: UNROT, XYZ>ZXY ( 1 2 3 4 4 1 2 3 ) aka: FOURUNROLL, XYZW>WXYZ ( 1 2 3 4 4 1 2 3 3 ) ( 1 2 3 4 4 ) aka: XYZW>W ( 1 2 3 4 4 3 2 1 )

17.1. Reference Addr. 34357 3438D 35BEB 3615B 28225 3616F 0339E 34552 34564 3453D 3452B 032C2 35CF4 35D6C 35D6C 36CF4 37046 34485 35F1A 360F7 36CCC 2F1C6 3448A 35F2E 36CE0 3610B 3448F 34494 34499 3449E 344A3 344A8 032E2 34436 34451 Name 5UNROLL 6UNROLL 7UNROLL 8UNROLL (9UNROLL) 10UNROLL UNROLL #1+UNROLL #2+UNROLL #+UNROLL #-UNROLL OVER OVERDUP OVERSWAP OVERUNROT OVER5PICK 2OVER 3PICK 3PICKSWAP 3PICKOVER 3PICK3PICK DROP3PICK 4PICK 4PICKSWAP SWAP4PICK 4PICKOVER 5PICK 6PICK 7PICK 8PICK (9PICK) (10PICK) PICK #1+PICK #2+PICK Description ( 1 2 3 4 5 5 1 2 3 4 ) aka: FIVEUNROLL ( 1..6 6 1..5 ) aka: SIXUNROLL ( 1..7 7 1..6 ) ( 1..8 8 1..7 ) ( 1..9 9 1..8 ) ( 1..10 10 1..9 ) ( 1..n #n n 1..n-1 ) ( ob 1..n #n n ob 1..n-1 ) ( a b 1..n #n n a b 1..n-1 ) ( 1..n+m #n #m n+m 1..n+m-1 ) ( 1..n-m #n #m n-m 1..n+m-1 ) ( 1 2 1 2 1 ) ( 1 2 1 2 1 1 ) ( 1 2 1 1 2 ) aka: OVERUNROT ( 1 2 1 1 2 ) aka: OVERSWAP ( 1 2 3 4 1 2 3 4 3 1 ) ( 1 2 3 4 1 2 3 4 1 2 ) ( 1 2 3 1 2 3 1 ) ( 1 2 3 1 2 1 3 ) ( 1 2 3 1 2 3 1 3 ) ( 1 2 3 1 2 3 1 2 ) ( 1 2 3 4 1 2 3 1 ) ( 1 2 3 4 1 2 3 4 1 ) ( 1 2 3 4 1 2 3 1 4 ) ( 1 2 3 4 1 2 4 3 1 ) ( 1 2 3 4 1 2 3 4 1 4 ) ( 1 2 3 4 5 1 2 3 4 5 1 ) ( 1..6 1..6 1 ) ( 1..7 1..7 1 ) ( 1..8 1..8 1 ) ( 1..9 1..9 1 ) ( 1..10 1..10 1 ) ( 1..n #n 1..n 1 ) ( 1..n #n-1 1..n 1 ) ( 1..n #n-2 1..n 1 )

109

110 Addr. 34465 34474 34417 34405 Name #3+PICK #4+PICK #+PICK #-PICK Description ( 1..n #n-3 ( 1..n #n-4 ( 1..n+m #n ( 1..n-m #n

17. Stack Operations

#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 identiers (also called lambda identiers, or lams for short). These are very similar to the global identiers 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 identiers (called lams for short), and run the command BIND. To recall the contents of one of them, just enter its local identier. To store a new value, put that value and the lam in the stack, and run STO. To remove the local variables from memory, use ABND (shortcut for abandon). The code is not checked for matching BIND/ABND, so you may include them in different programs if you wish. But this also means you must be sure to have an ABND for each BIND. Here is a little program that creates two local variables, recalls their contents and assigns new values for them (it is called LAM1):
1 :: %2 %3 { LAM first

111

112
5 LAM sec } BIND LAM first LAM sec DUP LAM first STO %+ LAM sec STO ABND ;

18. Temporary Environments

(first contains 2, and sec 3) (recall contents from first - 2) (recall contents from sec - 3)

10

(store new contents in first) (results 5) (store sum in sec) (delete variables from memory)

15

18.2

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 :: %2 %3 { NULLLAM NULLLAM } BIND 2GETLAM (recalls 2) 1GETLAM (recalls 3) DUP 2PUTLAM %+ 1PUTLAM ABND ;

10

The numbering is done in the same order as the stack levels: 1GETLAM contains what was on level one, 2GETLAM contains what was on level two, etc. There are supported entries to recall and store directly up to the 22nd variable (1GETLAM to 22GETLAM, and their PUTLAM equivalents). To access variables with numbers higher than 23 (which probably will not happen very often), use GETLAM, which takes a bint representing the variable number and returns its

18.3. Nested Temporary Environments

113

contents; and PUTLAM, which takes an object and the variable number, and stores that object in the specied 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 redene an existing variable (but doing this will only make a great mess out of your program). However, when at least one of the temporary environments has unnamed lams, you must pay attention to the numbering. Note that the GETLAM words do not necessarily refer to unnamed local variables: 1GETLAM recalls the most recently bound variable, 2GETLAM the one before that, and so on. (When binding lams, the binding starts at the stack level with the largest number, working towards the one with the smallest number, so that the last bound variable is the one whose contents where in level one.) You may use the GETLAM words also to access named lams. Due to the nature of temporary environments, there appears to be an extra local variable (before all the others) for internal housekeeping purposes. To access the unnamed lams of a previous environment, you must add the number of variables bound in the current environment plus one to the number you would have used before the second binding. The following program (named LAM3) will try to make the above explanation clearer:
1 :: %2 %1 { LAM n2 LAM n1 } BIND 1GETLAM 2GETLAM

10

(Returns 1) (Returns 2)

114
%4 %3 { NULLLAM NULLLAM } BIND 1GETLAM 2GETLAM 4GETLAM 5GETLAM ABND ABND ;

18. Temporary Environments

15

20

(Returns (Returns (Returns (Returns

3) 4) 1) 2)

25

First, this program binds 2 to n2 and 1 n1, but these names are never used. Instead, 1GETLAM is used to acces the most recently bound value, that is, 1, which could also be accessed via LAM n1. Following, 2GETLAM returns the next-to-last value, or 2. Things become more complicated when another environment is bound, this time to unnamed lams. Now 1GETLAM returns 3, which belongs to the new environment, and was the last bound variable. Similarly, 2GETLAM also returns a variable bound in this second batch. If we wanted to access the variable that previously was number one, we need to add the number of variables bound in the new environment (that is, two) plus one (the housekeeping pseudo-variable) to the previous number. So, to get what 1GETLAM would have returned before, we add three to one, obtaining 4GETLAM. And this returns, as expected, 1. Similarly, 5GETLAM returns 2, the same 2GETLAM had returned before the second binding. Naturally, after the rst ABND (corresponding to the binding of values 4 and 3), 1GETLAM and 2GETLAM would again return 1 and 2, respectively. If you have been able to understand the above, you will not have problems to nest temporary environments when necessary.

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 ... { 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 nd things like ... ZEROZEROZERO BINT3 DOBIND ... which is yet another way of binding three null named variables. This works because instead of NULLLAM, any xed address ROM object can be used, as ZERO in this example. The following constructs are the most compact ways to create temporary environments for N null named variables. N 1 2 2 3 4 N Commands to create N null named variables 1LAMBIND ZEROZEROTWO DOBIND FPTR2 2LAMBIND FPTR2 3LAMBIND 4NULLLAM{} BIND NULLLAM #N NDUPN DOBIND

116

18. Temporary Environments

18.5
18.5.1
Addr. 272FE 2B3AB 27155 272F3 27937

Reference
Builtin IDs and LAMs
Name NULLID NULLLAM 'IDX (ID_EQ) (ID_SIGMADAT) Description ( id ) Null (empty) identier ( lam ) Puts NULLLAM in the stack. ( id ) Puts ID X unevaluated on the stack. ID EQ ID DAT

18.5.2
Addr. 05B15 362DE

Conversion
Name $>ID DUP$>ID Description ( $ ID ) ( $ $ ID )

18.5.3
Addr. 074D0 074E4 36518 36513 155006 156006

Temporary Environments Words


Name BIND DOBIND 1LAMBIND DUP1LAMBIND 2LAMBIND 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

117 Description ( obn..ob1 #n ) Binds #n objects to null named lams. 1LAM has the count, 2LAM the rst object. Decompiles to :: ' NULLLAM CACHE ; ( ob ) Binds ob to LAM 'dvar. ( ) Abandons topmost temporary environment. ( obn..ob1 #n lam ) Binds all objects under the same name. 1LAM has the count. ( NULLLAM ob1..obn #n ) Inverse of CACHE. Always does garbage collection. ( ) Caches stack to SAVELAM. ( ) Dumps SAVELAM. ( lam ob T ) ( lam F ) Tries recalling object from lam. If successful, returns object and TRUE, otherwise returns just FALSE. ( ob lam ) Tries storing object in lam. Generates "Undened Local Name" error if lam is not found. ( #n ob ) Gets contents of nth topmost lam. ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob )

36A77 07497 34D00

dvarlsBIND ABND CACHE

34EBE

DUMP

34D58 34FA6 07943

SAVESTACK undo @LAM

07D1B

STOLAM

075A5 34616 34620 3462A 34634 3463E 34648 34652 3465C 34666 34670

GETLAM 1GETLAM 2GETLAM 3GETLAM 4GETLAM 5GETLAM 6GETLAM 7GETLAM 8GETLAM 9GETLAM 10GETLAM

118 Addr. 3467A 34684 3468E 34698 346A2 346AC 346B6 346C0 346CA 346D4 346DE 346E8 346F2 346FC 34706 34710 3471A 075E9 34611 3461B 34625 3462F 34639 34643 3464D 34657 34661 3466B 34675 3467F 34689 34693 3469D 346A7 346B1 346BB 346C5 346CF Name 11GETLAM 12GETLAM 13GETLAM 14GETLAM 15GETLAM 16GETLAM 17GETLAM 18GETLAM 19GETLAM 20GETLAM 21GETLAM 22GETLAM (23GETLAM) (24GETLAM) (25GETLAM) (26GETLAM) (27GETLAM) PUTLAM 1PUTLAM 2PUTLAM 3PUTLAM 4PUTLAM 5PUTLAM 6PUTLAM 7PUTLAM 8PUTLAM 9PUTLAM 10PUTLAM 11PUTLAM 12PUTLAM 13PUTLAM 14PUTLAM 15PUTLAM 16PUTLAM 17PUTLAM 18PUTLAM 19PUTLAM 20PUTLAM

18. Temporary Environments Description ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob #n ) Stores new contents to nth topmost lam. ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob )

18.5. Reference Addr. 346D9 346E3 346ED 346F7 34701 3470B 34715 34797 364FF 35DEE 35F42 2F318 3632E 3483E Name 21PUTLAM 22PUTLAM (23PUTLAM) (24PUTLAM) (25PUTLAM) (26PUTLAM) (27PUTLAM) DUP4PUTLAM 1GETABND 1ABNDSWAP 1GETSWAP 1GETLAMSWP1+ 2GETEVAL GETLAMPAIR

119 Description ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ) ( ob ob ) Does DUP then 4PUTLAM. ( 1lamob ) Does 1GETLAM then ABND. ( ob 1lamob ob ) Does 1GETABND then SWAP. ( ob 1lamob ob ) Does 1GETLAM then SWAP. ( # 1lamob #+1 ) Does 1GETLAM then SWAP#1+. ( ? ) Does 2GETLAM then EVAL. ( #n #n ob lam F ) ( #n #n T ) Gets lam contents and name (10 = 1lam, 20 = 2lam, etc.) ( ) Duplicates topmost tempenv (clears protection word). ( {} ) Puts a list with one NULLLAM in the stack. ( {} ) Puts a list with two times NULLLAM in the stack. ( {} ) Puts a list with three times NULLLAM in the stack. ( {} ) Puts a list with four times NULLLAM in the stack.

347AB

DUPTEMPENV

2B3A6 271F4

1NULLLAM{} (2NULLLAM{})

27208

(3NULLLAM{})

2B3B7

4NULLLAM{}

Chapter 19 Runstream Control


So far, you have only seen commands that do not affect the normal program ow. All the programs presented work sequentially, from the rst 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 ow.

19.1

Some Concepts

As you know from the Introduction, a compiled System RPL program consists of a series of pointers to address in the memory. Basically, a program is executed by jumping to the pointed address, executing whatever is there, returning back to the program, jumping to the next address, and so on. Actually, it is more complicated, because there are also objects such as real numbers, strings and even other programs (secondaries) embedded inside the programs. This requires some magic (actually, just carefully written code) to be properly handled, but it is outside the scope of this document to describe how this is dealt with. Just assume that when an object is found, it is executed. For most objects (such as real numbers or strings), this means putting themselves in the stack, for secondaries this means executing their contents, and for others such as identiers this means trying to recall the contents and executing them, or simply putting themselves in the stack. 120

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 commands address, there is a secondary object, whose contents happen to be :: INNERCOMP DROP ;. The problem is that it is necessary to switch to that (sub-)program, execute all its contents, and then return back to the program in which INCOMPDROP was called. Since it is perfectly possible for a sub-program to have even more sub-programs inside it, it turns out that some kind of stack is necessary. When a secondary (or any other composite) is executed, the address of the object after this composite in the calling program is pushed into this stack. The composite is then executed, by means of the interpreter pointer pointing to each of its objects. When it nishes, an address is popped from the return stack, and execution returns there. This was the address of the next object in the previous program, so execution resumes properly. This stack is called the return stack. The description above is rather incomplete, but it should give you an idea of how things work. There are many details that would make a detailed explanation of System RPL programs too long and complicated, so this detailed explanation will not be given in this book. Another important concept is that of the runstream. It is the sequence of objects that follow the object currently being executed. For example, during the execution of the ' command in this program :: ' DUP :: EVAL ; % 1. ; the runstream contains three objects. The rst is the command DUP. The second is the secondary that contains the EVAL command inside (but not the command EVAL or just the ::), and the third is the real number one. Several words (including ', as you will see below), take their argument from the next object in the runstream, and not from the data stack, as most commands do. So, the argument to ' is the command DUP. You should now have understood why this chapter is called Runstream Control: the commands here affect the runstream, that is, they affect the order in which the objects that form the program will be executed.

122

19. Runstream Control

19.2

Runstream Commands

The commands described here are the basic actions available. In the reference section below you will nd several commands that combine these commands with others. Command ' Stack and Description ( ob ) This is very easy to understand: it pushes the object after it (that is, the rst object in the runstream) in the stack. This pushed object will not be executed; execution resumes in the object after it. As an example, :: %1 %2 ' %+ EVAL ; is equivalent to :: %1 %2 %+ ; This action of pushing the next object in the stack instead of evaluating it is called quoting the next object. ( ob ) This pushes into the data stack the object that is pointed to by the topmost pointer in the return stack, and skips this pushed object. In other words, the rst object in the composite that contains the composite currently being executed is pushed in the data stack, and skipped. If, however, the object that would be pushed is SEMI, then a null composite is pushed instead. As an example, the RESOROMP command is just like ROMPTR@, but its argument comes after it in the runstream (see Chapter 16). Here is how RESOROMP is dened: :: 'R ROMPTR@ DROP ; It just pushes the object after RESOROMP in the stack and calls ROMPTR@. ( ob TRUE ) ( FALSE ) This is similar to 'R, but it will not push a null composite if there was no object to be pushed; instead it returns FALSE. If an object could be pushed, it is pushed along with TRUE.

'R

ticR

19.2. Runstream Commands Command >R

123

R>

R@

IDUP

RDROP

RDUP RSWAP ?SEMI

Stack and Description ( comp ) This pushes a pointer to the body of the composite given as argument in the return stack. That means that when the current secondary ends, execution will not go back to the one that called the current composite. Before that, the composite given as argument will be executed, and only after it nishes will the execution resume at the secondary that called the current one. As an example, the code below returns in the stack the reals 3, 2 and 1, in this order: :: ' :: % 1 ; >R % 3 % 2 ; ( :: ) Pushes in the data stack a secondary whose contents are what is pointed to by the rst pointer in the return stack, which is popped. In other words, it pushes as a secondary the rest of the commands in the secondary that called the current one. This commands will then not be executed after the current secondary nishes. As an example, the code below pushes the reals 3, 2 and 1 in the stack, in this order: :: :: R> EVAL % 1 ; % 3 % 2 ; ( :: ) This is the same as R>, but it does not pop the return stack. The same example of the above command, with R> changed into R@ would return 3, 2, 1, 3 and 2. () Pushes the interpreter pointer into the return stack. This means that after the current secondary nishes, a jump will be made to the object just after the IDUP, thereby executing the rest of the current secondary once more. () Pops the return stack. That is, the remaining objects in the secondary that called the current one will not be executed. () Duplicates the top address in the return stack. () Swaps the top two addresses in the return stack. ( flag ) If the ag is TRUE, skips the rest of the current secondary.

124 Command COLA

19. Runstream Control Stack and Description () This executes only the next object in the runstream, skipping the rest of the current secondary. The program below pushes only 1 in the stack: :: COLA % 1 % 2 % 3 ; See below for some good uses for COLA. () Skips the next object in the runstream. The program above, with COLA replaced by SKIP would push 2 and 3 in the stack. ( flag ) Does SKIP if the ag is true.

SKIP

?SKIP

19.3 Some Examples


Our rst 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 :: CKREAL { LAM x } BIND %1 factiter ABND ;

(First value for factorial)

factiter:
1 :: LAM x %0= ?SEMI (Exits if x=0) LAM x %* (Multiplies by current value) LAM x %1- LAM x STO COLA factiter ;

Note the word COLA before the recursive invocation of factiter. Without it, the program would require many return stack levels, all of which would point to SEMI. With COLA, nothing is pushed in the return stack. factiter is simply called, without storing the address of where the interpreter should

19.3. Some Examples

125

jump back to. This makes the program always use a xed number of return stack levels. However, COLA is not used only in this case. It is a very useful command in other situations. Let us say that in your project you will frequently need to perform a case (see section 20.3) comparing if a real number is equal to 3. It is convenient to write a program to do this (like the built-in word %1=case) instead of repeating %3 %= case all the time. A rst attempt would be this program: :: %3 %= case ; However, this would not work. This is because case takes its arguments from the runstream, that is, the currently executed program, and not from the calling composite. This means the argument for case is ;, which is not what is desired. But there is a solution: use COLA before the case. This will drop the rest of the runstream after the command after it, in a way merging the current command with the composite that called it. So, if we add COLA before case, and embed this new sub-program in another, like this: :: ... :: %3 %= COLA case ; <act_T> <act_F> ... it is as if the code were like this: :: ... %3 %= case <act_T> <act_F> ... which is what we want. Therefore, the correct way to dene our sub-program is with COLA before case. This is a frequent combination, so there is a shortcut command, COLAcase, that is equivalent to COLA followed by case. There are other words like this, see the reference below. The next example (which uses an error-trapping structure that will be described in Chapter 22) is the command from the OT49 library (see section A.3.1), written by Wolfgang Rautenberg. This command is used like this: ... That is, generally as the rst command in a program (which, naturally, can be a System RPL program, not only a User one). It causes the program to be executed with the display off (which makes it slightly faster). All the folows the until the end of the secondary is executed blindly. When is run, it turns off the display, and when the secondary nishes executing, the display is turned back on. But how can this be done, if nothing special needs to be called after the program nishes? The answer is simple: by manipulating the return stack. Here is the disassembly of that command:
1 :: Code R>

126
ERRSET COMPEVAL ERRTRAP :: REVAL ERRJMP ; Code ;

19. Runstream Control

10

The rst code object turns off the display. It is a short and simple piece of machine language, but it is outside the scope of this book to describe it. Then, R> brings the rest of the composite that called into the data stack. It is evaluated by COMPEVAL. The only difculty in the program is that we must turn the display back on even if there was an error in the program. If there was en error, then the object after ERRTRAP is executed. First, 'REVAL brings the rst object after the current composite (this object happens to be the second code object, that turns on the display) into the data stack and executes it. Then, the error is triggered again with ERRJMP. If there was no error, the execution goes directly to the second code object, nishing the program. As an example another way to deal with the return stack, we will study the list processor DoL, also in library OT49. This command expects a list in level two and any object (generally a command or a function) in level one. This object is evaluated for each of the list elements in order, and the results are collected in another list, which is then returned. This program uses some things which we have not studied yet, such as loops and the Virtual Stack. You might want to skip this example now and return to it later. Here is the code, without the argument checking part:
1 :: OVER >R (Push list elements in return stack) ticR (Try to get first element) NOTcaseDROP (If list is empty, drop the object) PushVStack&Clear (Save current stack) BINT0 GetElemBotVStack (Get first list elemement) BEGIN BINT1 GetElemBotVStack xEVAL (Get object and evaluate) RSWAP

10

19.3. Some Examples


ticR WHILE RSWAP REPEAT DEPTH {}N PopVStackAbove 4UNROLL3DROP ; (Get next element from list) (Repeat while there are elements)

127

15

20

(Collect results) (Get saved stack) (Drop arguments & first object)

This program may be somewhat difcult to understand at rst, but it manipulates very cleverly the return stack. It starts by using >R to insert a pointer to the list contents in the return stack. If they were not removed later, then after this program nished, each of the objects in the list would be evaluated. Then, the rst object from the list is retrieved, with ticR. This also advances the pointer in the return stack to point to the second element. If the list was empty, then ticR returns FALSE. In this case, the object to be evaluated is dropped, and the empty list remains as the result of the program. The real fun starts when there is at least one element. The whole stack is saved as a virtual stack level, but the rst element of the list (retrieved with ticR previously) is retrived into the new stack. Then, a loop is started. The loop used is very similar to a User RPL WHILE...REPEAT...END loop. For more details, see Chapter 21. The object is retrieved and evaluated, and then the next element from the list is retrieved with ticR. However, since the word BEGIN pushed something in the return stack (for an explanation, see section 21.1.1), it is necessary to use RSWAP to bring the pointer to the list elements back in the rst return stack level, thus allowing ticR to get one of the elements. If there was an element, RSWAP is executed again to put the return stack back into its original stack, and the loop begins again, executing the object, and so on. When there are no more elements, control goes to after the REPEAT word. All results are collected in a list, and we retrieve the saved stack above the list with the results. Then the program simply drops the original list, the object to be evaluated and the rst object of the list, which were in the stack when it was pushed into the Virtual Stack. As you have seen, this program used the return stack as a storage place; the composite that was pushed there was never executed, because each of its elements were removed until there was nothing more to execute.

128

19. Runstream Control

19.4
Addr. 06E8E 06EEB

Reference
Name NOP 'R Description ( ) Does nothing. ( ob ) Pushes next object in return stack (i.e., the rst object in the composite above this one) to the stack (skipping it). If top return stack is empty (contains SEMI), a null secondary is pushed and the pointer is not advanced. ( ? ) Does 'R then EVAL. ( ob1 ob2 ) Does 'R twice. ( ob T ) ( F ) Pushes next object in return stack to stack and TRUE, of just FALSE if the top return stack body is empty. In this case, it is dropped. ( ob ) Does 'R, then RDROP. ( :: ) Pushes :: to top of return stack (skips prolog, i.e., the composite will be executed automatically). ( :: ) Creates and pops a secondary from top return stack body to stack. ( :: ) Like R>, but the return stack is not popped. ( ) Pushes top body into return stack. ( ob ? ) Evaluates object. ( comp ? ) EVAL just pushes a list back, this one executes it. ( ? ) EVAL rst object in the stream above the previous one.

06F66 36A27 34BEF

'REVAL 'R'R ticR

36A4A 06F9F

'RRDROP >R

0701F

R>

07012 0716B 06F8E 262FB 34BAB

R@ IDUP EVAL COMPEVAL 2@REVAL

19.4. Reference Addr. 34BBB Name 3@REVAL

129 Description ( ? ) EVAL rst object in the stream above the stream above the previous one. ( ) Jumps to next address in stream. Address is a venibble address, not a system binary. Can only be used to jump to the middle of programs, cannot jump to a program prolog. ( flag ) If TRUE, jumps, else skips ve nibbles. ( flag ) If FALSE jumps, else skips ve nibbles. ( ) Duplicates top return stack level. ( ) Pops the return stack. ( ) Pops two return stack levels. ( ) Pops three return stack levels. ( ob ) Does DROP then RDROP. ( ) Does RDROP then COLA. ( ) Swap in the return stack. ( ) Skips rst object in the return stack (i.e., the rst object in the composite above this one). ( ob ) Pushes an object into the return stack, for example for temporary storage. If ob is a list, the list is put as a whole onto the stream, not the individual elements. ( ob ) Gets an object from the return stack. ( ) DROP the rest of the current stream.

34A31

GOTO

34A46 34A59 26111 06FB7 343E1 343F3 36342 3597F 34144 368C9

?GOTO NOT?GOTO RDUP RDROP 2RDROP 3RDROP DROPRDROP RDROPCOLA RSWAP RSKIP

2B8BE

(OBJ>R)

2B8E6 0312B

(R>OBJ) SEMI

130

19. Runstream Control

19.4.1
Addr. 06E97

Quoting Objects
Name ' Description ( nob (nextob) ) Pushes next object in the stream to the stack (skipping it). ( ob ob nob ) Does DUP then '. ( ob nob ) Does DROP then '. ( ob1 ob2 ob2 ob1 nob ) Does SWAP then '. ( ob1 ob2 ob1 ob2 ob1 nob ) Does OVER then '. ( ob id/lam nob ) Does STO then '. ( T nob ) Pushes TRUE and the next object to the stack. ( F nob ) Pushes FALSE and the next object to the stack. ( #1 F nob ) Pushes ONE, FALSE and the next object to the stack. ( # #+1 nob ) Does #1+ then '. ( NOP ) Pushes NOP to the stack. ( ERRJMP ) Pushes ERRJMP to the stack. ( DROPFALSE ) Pushes DROPFALSE to the stack. ( DoBadKey ) Pushes DoBadKey to the stack. ( DoBadKey T ) Pushes DoBadKey and TRUE to the stack. ( ob DoBadKey T ) Makes the user drop dead, then pushes TRUE. ( x* ) Pushes x* (User word *) to the stack.

3696E 36996 36982 369AA 369BE 369D2 369FF 369E6

DUP' DROP' SWAP' OVER' STO' TRUE' FALSE' ONEFALSE'

36A13 36306 3619E 2B90B 25E6A 25E6B 2F32E 36BBE

#1+' 'NOP 'ERRJMP 'DROPFALSE 'DoBadKey 'DoBadKeyT DROPDEADTRUE ('x*)

19.4. Reference Addr. 36BD2 27B43 Name 'xDER 'IDFUNCTION

131 Description ( xDER ) Pushes xDER (User word ) to the stack. ( xFUNCTION ) Pushes xFUNCTION (User word FUNCTION) to the stack. ( xPOLAR ) Pushes xPOLAR (User word POLAR) to the stack. ( xPARAMETRIC ) Pushes xPARAMETRIC (user word PARAMETRIC) to the stack. ( meta ob1...ob4 meta&ob ob1...ob4 ) Takes ob from runstream and appends it to the meta starting in level 5. ( ob flag ) Is ob eq to user command xDER?

27B6B 27B7F

'IDPOLAR 'IDPARAMETER

29ED0

'Rapndit

36AA4

'xDEREQ

19.4.2
Addr. 06FD1 36A63 3635B 3636F 34AD3 35994 0714D 35715 3570C 35703 356D5 363FB

Skipping Objects
Name COLA ONECOLA SWAPCOLA XYZ>ZCOLA COLA_EVAL COLACOLA SKIP skipcola 2skipcola 3skipcola 5skipcola COLASKIP Description Evals next obj and drops rest of this stream. Does ONE, then COLA. Does SWAP, then COLA. Does UNROT2DROP, then COLA. Returns and evals rst obj in previous stream. Drops rest of current stream does COLA in the above one. Skips 1 obj in the runstream. Does SKIP, then COLA. Does 2SKIP, then COLA. Does 3SKIP, then COLA. Skips 5 objects, then does COLA. Drops rest of current stream and skips one obj in above stream.

Chapter 20 Conditionals
In System RPL, conditionals are a bit different from User RPL. The rst difference is that in User RPL, a false is represented by the real number zero; any other value represents a true. In System RPL, a false is represented by the word FALSE, and a true is represented by the word TRUE (amazing!). These words just put themselves in the stack when run. All commands that do a test return one of them. Words like IT or case take one of them as argument. Should you need, you can convert a TRUE or FALSE to a (real) 0 or 1 with COERCEFLAG. There is not a dedicated function to do the opposite transformation, like UNCOERCEFLAG, but %0<> does the job perfectly. There are many commands that put TRUE, FALSE, or some combination of them in the stack. See the list below. The Boolean operators are present, too: NOT, AND, OR and XOR. There are some combinations, see below for a list.

20.1

Tests

The test words are commands which take one or more arguments and return either TRUE or FALSE, after doing some kind of comparison between the arguments. The tests for each kind of object type are listed in the reference section of the chapter of each object type. Tests for object type can be found on Chapter 29. Other kinds of tests are listed in the reference section below. The most important of these tests are EQ and EQUAL. Both take two objects and return a ag. The rst checks if the objects are the same, i.e., occupy the same address in memory. The second checks if the objects are equal in terms of contents. The difference is that :: BINT2 # 2 EQUAL ; returns TRUE, but if EQUAL is replace by EQ, then the program returns FALSE, because one object is the built-in bint 2, found at address #3311B, and the other is a bint whose address cannot be predicted, but certainly is not in the ROM. Another example: if you put a string in level one, and press ENTER, EQ 132

20.3. Case

133

and EQUAL will return TRUE. However, if you enter a string, and then enter again the exact same string, only EQUAL will return TRUE. This happens because the contents of the strings are the same, but they are different objects in memory, occupying each a different address in memory. They just happen to have the same contents. When possible, you should use EQ in your programs since it is faster than EQUAL.

20.2

If. . . Then. . . Else

Most of the time, you will create this kind of conditionals with the IT and ITE commands: Word IT Stack and Action ( flag ) If the ag is TRUE, the next object is executed, otherwise it is skipped. ( flag ) If the ag is TRUE, the next object is executed, and the second is skipped. If it is FALSE, the next object is skipped and the second is executed.

ITE

The following snippet changes a zero into a one, but does nothing to other numbers: ... DUP %0= IT %1+ ... The code below will output Equal if two objects are equal, and Not equal if not: ... EQUAL $ "Equal" $ "Not equal" ... Naturally, when you need to execute several commands, you will need to include them in a secondary.

20.3 Case
The CASE words are a combination of IT, SKIP and COLA (see Chapter 19). The basic word is case, but there are combinations of it with tests and other commands. case takes a ag in level one. If the ag is TRUE, the next object is

134

20. Conditionals

executed, but only it: the rest of the stream is dropped. So, TRUE case is equivalent to COLA. If the ag is FALSE, the next object is skipped and execution continues after it. So, FALSE case is the same as SKIP. The example below shows how to build a familar case structure similar to that found in other languages (even User RPL!). It outputs a string representing the bint in level one.
1 :: DUP #0= case $ "Zero" DUP BINT1 #= case $ "One" DUP BINT2 #= case $ "Two" ... ;

There are many words that combine case with other words. One of them is OVER#=case. It is not difcult to gure out what it does: rst, OVER. Then, #= compares two bints. Finally, the case works as before. Using this word, the code above could be rewritten as:
1 :: BINT0 OVER#=case $ "Zero" BINT1 OVER#=case $ "One" BINT2 OVER#=case $ "Two" ... ;

In the reference section below, you will nd a list of the words that execute a case besides some other action. These words are composed of an initial part, the case itself and a nal part. Some have only the initial or nal part besides the case, some have both. The initial part represents the commands that are executed before the case, and it should be pretty straightforward to understand their action, as an example NOTcase is equivalent to NOT followed by case. For the nal part, things become more complicated, because there are two kinds of nal part. The rst kind has the nal part written in UPPERCASE letters. The commands in the nal kind are executed if the test is true. You only need to provide the action for the FALSE situation. For example, this snippet ... caseDROP <FalseAction> ... is equivalent to ... case DROP <FalseAction> ...

20.4. Reference

135

The second type comprises the words that have the nal part in lowercase letters. In this case, the commands in the nal part are executed along with the object that follows case when the test is true. In other words, this snippet ... casedrop <TrueAction> <FalseAction> ... is equivalent to ... case :: DROP <TrueAction> ; <FalseAction> ... Unfortunately, some entries have been misnamed, and this convention was not adhered. These entries are marked clearly in the descriptions below. Also, the stack diagrams of most of the words below are not true stack diagrams. What is on the left side of the arrow is the contents of the stack before calling the entry, as usual. ob1 and ob2 are different objects. f1 and f2 are different ags; T represents TRUE and F, FALSE. #m and #n represent two binary integers, #m being smaller than #n. #set is the number of a ag, and this ag is set, #clr is the number of a ag, this ag being clear. On the right of the arrow, the objects which will be executed when the stack matches the left side of the arrow are represented. The initial stream has the form: :: <test_word> <ob1> ... <obn> ; In the diagrams, <rest> represents all the objects after the object that appers before <rest>. In this right side of the arrow there are also objects appearing without the angle brackets already. These are objects in the data stack that result after the word is run, and not objects in the runstream.

20.4 Reference
20.4.1
Addr. 2602B

Boolean Flags
Name COERCEFLAG Description ( T %1 ) ( F %0 ) Converts system ag to user ag, drops current stream. ( % flag ) Can be used to change a user ag into a system ag. ( T ) ( T T )

301BA

%0<>

03A81 27E87

TRUE TrueTrue

136 Addr. 36540 03AC0 36554 283E8 27E9B 35280 2D7006 35289 35B32 28211 2812F 374BE 35EF2 2962A Name TrueFalse FALSE FalseTrue FalseFalse failed DROPTRUE 2DROPTRUE DROPFALSE 2DROPFALSE NDROPFALSE SWAPTRUE SWAPDROPTRUE XYZ>ZTRUE RDROPFALSE

20. Conditionals Description ( T F ) aka: TRUEFALSE ( F ) ( F T ) aka: FALSETRUE ( F F ) ( F T ) ( ob T ) ( ob ob' T ) ( ob F ) ( ob1 ob2 F ) ( ob1..obn #n F ) ( ob1 ob2 ob2 ob1 T ) ( ob1 ob2 ob2 T ) ( ob1 ob2 ob3 ob3 T ) ( F ) Puts FALSE in the stack and drops rest of current stream. ( flag flag' ) Returns FALSE if the input is TRUE, and viceversa. ( flag1 flag2 flag ) Returns TRUE if both ags are TRUE. ( flag1 flag2 flag ) Returns TRUE if either ag is TRUE. ( flag1 flag2 flag ) Returns TRUE if ags are different. ( flag1 flag2 flag ) Returns FALSE if either ag is TRUE. ( flag1 flag2 flag ) Returns TRUE if ag1 is TRUE and ag2 is FALSE. ( flag1 ob flag2 ob flag ) Returns TRUE if either ag is TRUE.

03AF2

NOT

03B46 03B75 03ADA 365F9 35C7C

AND OR XOR ORNOT NOTAND

35CB8

ROTAND

20.4. Reference

137

20.4.2
Addr. 03B2E

General Tests
Name EQ Description ( ob1 ob2 flag ) Returns TRUE if both objects are the same, i.e., they occupy the same physical space in memory. Only the addresses of the objects are tested. ( ob1 ob2 ob1 ob2 flag ) Does 2DUP then EQ. ( flag ob1 ob2 flag' ) Does EQ then OR. ( ob3 ob1 ob2 ob3 flag ob3 ) Does EQ then OVER. ( ob flag ) EQ with the next object in the current stream. ( ob ob flag ) Does DUP then EQ:. ( ob1 ob2 flag ) Returns TRUE if the objects are equal (but not necessarily the same), i.e., their prologs and contents are the same. ( ob1 ob2 flag ) Returns TRUE if the objects are different. ( flag ob1 ob2 flag' ) Does EQUAL then OR. ( ob1 ob2 ob1 ob2 flag ) Tests if ob1 contains ob2. If ob1 is a symbolic then ob1 is searched for embedded ob2. If ob1 is a list then ob1 is traversed for a direct match. Otherwise, tests if ob1 and ob2 are equal.

36621 3664E 3607F 3663A 36635 03B97

2DUPEQ EQOR EQOVER EQ: DUPEQ: EQUAL

3660D 36662 0FF006

EQUALNOT EQUALOR Contains?

20.4.3
Addr. 34AA1 34A92

True/False Tests
Name ?SEMI NOT?SEMI Description ( T :: ; ) ( F :: <ob1> <rest> ; ) ( T :: <ob1> <rest> ; ) ( F :: ; )

138 Addr. 3692D 34BD8 35F56 Name ?SEMIDROP NOT?DROP ?SWAP

20. Conditionals Description ( ob T :: ob ; ) ( ob F :: <ob1> <rest> ; ) ( ob T :: ob <ob1> <rest> ; ) ( ob F :: <ob1> <rest> ; ) ( ob1 ob2 T :: ob2 ob1 <ob1> <rest> ; ) ( ob1 ob2 F :: ob1 ob2 <ob1> <rest> ; ) ( ob1 ob2 T :: ob1 ob2 <ob1> <rest> ; ) ( ob1 ob2 F :: ob2 ob1 <ob1> <rest> ; ) ( ob1 ob2 T :: ob1 <ob1> <rest> ; ) ( ob1 ob2 F :: ob2 <ob1> <rest> ; ) ( ob1 ob2 T :: ob2 <ob1> <rest> ; ) ( ob1 ob2 F :: ob1 <ob1> <rest> ; ) ( T ob :: ob <ob1> <rest> ; ) ( F ob :: <ob1> <rest> ; ) ob is actually executed, and not pushed in the stack. ( T ob1 ob2 :: ob1 <ob1> <rest> ; ) ( F ob1 ob2 ob2 <ob1> <rest> ; ) ob1 or ob2 is actually executed, and not pushed in the stack. ( T ob1 ob2 :: ob1 ; ) ( F ob1 ob2 :: ob2 ; ) ob1 or ob2 is actually executed, and not pushed in the stack. Return to composite and ITE there. ( T :: <ob1> <rest> ; ) ( F :: <ob2> <rest> ; ) ( T :: <ob2> <rest> ; ) ( F :: <ob1> <rest> ; ) aka: NOT_IT

35DDA

?SKIPSWAP

35F97

?SWAPDROP

35F7E

NOT?SWAPDROP

070FD

RPIT

070C3

RPITE

34AF4

COLARPITE

34B4F 34A22 0712A

2'RCOLARPITE IT ?SKIP

20.4. Reference Addr. 34B3E 36865 34ABE 36EED 349F9 34A13 36D4E 36E6B 359E3 3495D 3494E 34985 Name ITE COLAITE ITE_DROP ANDITE case NOTcase ANDcase ANDNOTcase ORcase casedrop NOTcasedrop case2drop

139 Description ( T :: <ob1> <ob3> <rest> ; ) ( F :: <ob2> <rest> ; ) ( T :: <ob1> ; ) ( F :: <ob2> ; ) ( ob T :: <ob2> <rest> ; ) ( ob F :: ob <ob1> <rest> ; ) ( f1 f2 :: <ob1> <ob3> <rest> ; ) ( f1 f2 :: <ob2> <rest> ; ) ( T :: <ob1> ; ) ( F :: <ob2> <rest> ; ) ( T :: <ob2> <rest> ; ) ( F :: <ob1> ; ) ( f1 f2 :: <ob1> ; ) ( f1 f2 :: <ob2> <rest> ; ) ( f1 f2 :: <ob1> ; ) ( f1 f2 :: <ob2> <rest> ; ) ( f1 f2 :: <ob1> ; ) ( f1 f2 :: <ob2> <rest> ; ) ( ob T :: <ob1> ; ) ( ob F :: ob <ob2> <rest> ; ) ( ob T :: ob <ob2> <rest> ; ) ( ob F :: <ob1> ; ) ( ob1 ob2 T :: <ob1> ; ) ( ob1 ob2 F :: ob1 ob2 <ob2> <rest> ; ) ( ob1 ob2 T :: ob1 ob2 <ob2> <rest> ; ) ( ob1 ob2 F :: <ob1> ; ) ( ob T :: ; ) ( ob F :: ob <ob1> <rest> ; ) ( ob T :: ob <ob1> <rest> ; ) ( ob F :: ; ) ( ob T T ) ( ob F :: ob <ob1> <rest> ; ) Note: should be caseDRPTRU. ( ob T F ) ( ob F :: ob <ob1> <rest> ; ) Note: should be caseDRPFLS.

34976

NOTcase2drop

349B1 349C6 368FB

caseDROP NOTcaseDROP casedrptru

365B3

casedrpfls

140 Addr. 36B3A Name NOTcsdrpfls

20. Conditionals Description ( ob T :: ob <ob1> <rest> ; ) ( ob F F ) Note: should be NOTcaseDRPFLS. ( ob1 ob2 T :: ; ) ( ob1 ob2 F :: ob1 ob2 <ob1> <rest> ; ) ( ob1 ob2 T :: ob1 ob2 <ob1> <rest> ; ) ( ob1 ob2 F :: ; ) ( ob1 ob2 T F ) ( ob1 ob2 F :: ob1 ob2 <ob1> <rest> ; ) Note: should be case2DRPFLS. ( T T ) ( F :: <ob1> <rest> ; ) ( T :: <ob1> <rest> ; ) ( F T ) ( T F ) ( F :: <ob1> <rest> ; ) ( T :: <ob1> <rest> ; ) ( F F ) ( T :: <ob1> ; ) ( F :: <ob2> <rest> ; ) Drops the rest of current stream and executes case in the stream above. ( T :: <ob2> <rest> ; ) ( F :: <ob1> ; ) Drops the rest of current stream and executes NOTcase in the stream above.

349D6

case2DROP

349EA

NOTcase2DROP

365CC

case2drpfls

3652C 36914 365E5 2B2C5 359AD

caseTRUE NOTcaseTRUE caseFALSE NOTcaseFALSE COLAcase

359C8

COLANOTcase

20.4.4
Addr. 363B5 363E2

Binary Integer Tests


Name #=?SKIP #>?SKIP Description ( #m #n :: ( #m #n :: ( #m #n :: ( #m #n ::

<ob2> <ob1> <ob1> <ob2>

<rest> <rest> <rest> <rest>

; ; ; ;

) ) ) )

20.4. Reference Addr. 35C54 36F29 36F3D 348D2 348E2 34939 Name #=ITE #<ITE #>ITE #=case OVER#=case #=casedrop Description ( #m #n :: <ob1> <ob3> <rest> ; ( #m #n :: <ob2> <rest> ; ) ( #m #n :: <ob1> <ob3> <rest> ; ( #m #n :: <ob2> <rest> ; ) ( #m #n :: <ob2> <rest> ; ) ( #m #n :: <ob1> <ob3> <rest> ; ( #m #n :: <ob1> ; ) ( #m #n :: <ob2> <rest> ; ) ( #m #n :: #m <ob1> ; ) ( #m #n :: #m <ob2> <rest> ; ) ( #m #n :: <ob1> ; ) ( #m #n :: #m <ob2> <rest> ; ) Note: should be OVER#=casedrop. ( #m #n F ) ( #m #n :: #m <ob1> <rest> ; ) Note: should be OVER#=caseDRPFLS. ( #m #n :: <ob2> <rest> ; ) ( #m #n :: <ob1> ; ) ( #m #n :: <ob1> ; ) ( #m #n :: <ob2> <rest> ; ) ( #m #n :: <ob2> <rest> ; ) ( #m #n :: <ob1> ; ) ( #0 :: ; ) ( # :: <ob1> <rest> ; ) ( #0 :: <ob2> <rest> ; ) ( # :: <ob1> <rest> ; ) ( #0 :: <ob1> <ob3> <rest> ; ) ( # :: <ob2> <rest> ) ( #0 :: #0 <ob1> <rest> ; ) ( # :: # <ob2> <rest> ; ) ( #0 :: #0 <ob1> <ob3> <rest> ; ( # :: # <ob2> <rest> ; ) ( #0 :: <ob1> ; ) ( # :: <ob2> <rest> ; ) ( #0 :: #0 <ob1> ; ) ( # :: # <ob2> <rest> ; ) ( #0 :: <ob1> ; ) ( # :: # <ob2> <rest> ; )

141

) )

36590

#=casedrpfls

36D9E 36D76 36DCB 34A7E 36383 36F15 36ED4 36F51 348FC 348F7 3490E

#<>case #<case #>case #0=?SEMI #0=?SKIP #0=ITE DUP#0=IT DUP#0=ITE #0=case DUP#0=case DUP#0=csedrp

142 Addr. 36D21 36D8A 3639C 36DB2 25E72 Name DUP#0=csDROP #1=case #1=?SKIP #>2case ?CaseKeyDef

20. Conditionals Description ( #0 :: ; ) ( # :: # <ob1> <rest> ; ) ( #1 :: <ob1> ; ) ( # :: <ob2> <rest> ; ) ( #1 :: <ob2> <rest> ; ) ( # :: <ob1> <rest> ; ) ( #0/#1/#2 :: <ob2> <rest> ; ) ( # :: <ob1> ; ) ( # #' :: ' ob1 T ; ) ( # #' :: <ob2> <rest> ; ) Compares two bints. If equal, quotes the next object from the runsream and returns it along with TRUE. ( # #' ob T ) ( # #' F ) ( # #' :: <ob2> <rest> ; ) Compares two bints. If equal, tries to resolve the rompointer which must be the next object in the runstream. The ROMPTR@ pushes TRUE when successful, so this entry can be used directly for key handlers.

25E73

?CaseRomptr@

20.4.5
Addr. 2B149 36DDF 2B15D 2B11C

Real and Complex Number Tests


Name %0=case j%0=case C%0=case num0=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> ; )

2B1A3

%1=case

20.4. Reference Addr. 2B1C1 2B176 Name C%1=case num1=case

143 Description ( C%1 :: C%1 <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) ( 1 :: 1 <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) Both a real and a complex one are TRUE conditions for this test. ( %2 :: %2 <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) ( C%2 :: C%2 <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) ( 2 :: 2 <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) Both a real and a complex two are TRUE conditions for this test. ( %-1 :: %-1 <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) ( C%-1 :: C%-1 <ob1> ; ) ( ob ob <ob2> <rest> ; ) ( -1 :: -1 <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) Both a real and a complex -1 are TRUE conditions for this test.

2B20C 2B22A 2B1DF

%2=case C%2=case num2=case

2B289 2B2A7 2B25C

%-1=case C%-1=case num-1=case

20.4.6
Addr. 2AFFB 2AF37 2B01B 2B06A 2B083

Meta Object Tests


Name MEQ1stcase AEQ1stcase MEQopscase AEQopscase 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 Name M-1stcasechs

20. Conditionals Description ( Meta&NEG Meta COLA ) ( Meta Meta SKIP ) ( Meta&(%<0) Meta&ABS(%) COLA ) Meta&NEG Meta COLA ; Meta Meta SKIP Meta&(%<0) Meta&ABS(%) COLA

20.4.7
Addr. 36EBB 36F01

General Object Tests


Name EQIT EQITE 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> ; )

36D3A 34999

jEQcase EQcase

359F7

REQcase

34920

EQcasedrop

35A10

REQcasedrop

36D62 36E7F 36D08

EQUALcase EQUALNOTcase EQUALcasedrp

20.4. Reference Addr. 2AD81 Name EQUALcasedrop Description ( ob1 ob2 :: <ob1> ; ) ( ob1 ob2 :: ob1 <ob2> <rest> ) ( $ $' :: <ob1> ; ) ( $ $' :: $ <ob2> <rest> ; ) Note: should be OVERtok=casedrop. ( seco :: seco <ob2> <rest> ; ( ob :: ob <ob1> ; ) ( id :: id <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) ( id :: id <ob2> <rest> ; ) ( ob :: ob <ob1> ; ) ( id/lam :: id <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) ( % :: <ob1> ; ) ( ob :: <ob2> <rest> ; ) ( % :: % <ob2> <rest> ; ) ( ob :: ob <ob1> ; ) ( [] :: [] <ob1> ; ) ( ob :: ob <ob2> <rest> ; ) ( {} :: {} ob1 ; ) ( ob :: ob <ob2> <rest> ; ) ( {} :: {} <ob2> <rest> ; ) ( ob :: ob <ob1> ; ) ( seco :: seco <ob2> <rest> ; ( ob :: ob <ob1> ; ) ( romp :: romp <ob2> <rest> ; ( ob :: ob <ob1> ; ) ( %/C%/[]/[L] :: <ob1> ; ) ( ob :: ob2 <rest> ; ) If %, C%, [ ] or [L] then COLA, else SKIP.

145

29E99

tok=casedrop

2ADBD 2B0CC 36E93 2B0EF 36DF3 36EA7 36E07 36E43 260C6 260D0 260CB 2ADE0

nonopcase idntcase dIDNTNcase idntlamcase REALcase dREALNcase dARRYcase dLISTcase NOTLISTcase NOTSECOcase NOTROMPcase numb1stcase

) )

146

20. Conditionals

20.4.8
Addr. 36F65 36F79 36C4F

Miscellaneous
Name UserITE SysITE caseDoBadKey Description ( #set :: <ob1> <ob3> <rest> ; ) ( #clr :: <ob2> <rest> ; ) ( #set :: <ob1> <ob3> <rest> ; ) ( #clr :: <ob2> <rest> ; ) ( T :: DoBadKey ; ) ( F :: <ob1> <rest> ; ) aka: caseDEADKEY ( ob T :: DoBadKey ; ) ( ob F :: ob <ob1> <rest> ; ) ( T :: ERRJMP ; ) ( F :: <ob> <rest> ; ) ( T :: SIZEERR ; ) ( F :: <ob> <rest> ; ) ( T :: <ob> <rest> ; ) ( F :: SIZEERR ; ) ( T :: <ob1> <rest> ; ) ( F :: TYPEERR ; ) ( :: <ob1> <rest> ; ) ( :: <rest> ; ) Tests if there is no edit line active. ( :: <ob1> <rest> ; ) ( :: <rest> ; ) Tests if there is an edit line active. ( :: <ob1> ; ) ( :: <ob2> <rest> ) Tests for algebraic mode and does case.

36C36 361B2 36B53 36B67 36BAA 25EEE

caseDrpBadKy caseERRJMP caseSIZEERR NcaseSIZEERR NcaseTYPEERR NoEdit?case

36E57

EditExstCase

2BE36

(ALGcase)

Chapter 21 Loops
As in User RPL, there are two types of loops in System RPL: indenite loops and denite loops. Indenite loops are loops in which you do not know beforehand how many times it will be executed: it will repeat until a specic condition is met. They are created in a very similar manner to User RPL indefinite loops. Denite loops, on the other hand, are executed a number of times specied before its start. They not created exactly like in User RPL, but their use is simple and more powerful. For example, you can change the number of times to run the loop while running it. In the descriptions below, the elements between < > can consist of several objects, unless otherwise noted.

21.1

Indenite Loops

In System RPL, indenite loops can be made in three ways. The rst is the WHILE loop. It is created like this:
1 BEGIN <test clause> WHILE <loop object> REPEAT

This kind of loop executes <test clause>, and if the test is TRUE, <loop object> is executed, and the loop starts again. If the test returned FALSE, then execution resumes past REPEAT. If the rst test returned FALSE, this loop would never be executed. This loop requires <loop object> to be a single object. Most of the times, this will be a composite. The second type of indenite loop is the UNTIL loop. It is created like this: 147

148
1 BEGIN <loop clause> UNTIL

21. Loops

This loop is always executed at least once. The word UNTIL expects a ag. If it is FALSE, the <loop clause> is executed again. If it is TRUE, execution continues past UNTIL. There is also a third type of indenite loop:
1 BEGIN <loop object> AGAIN

This loop has no test. To exit it, an error condition must happen, or the return stack must be directly manipulated. This is useful if the loop code contains several different locations at which decisions about repeating or exiting the loop have to be made.

21.1.1

How Indenite Loops Work

Indenite loops are formed by combinations the words BEGIN, WHILE, REPEAT, UNTIL and AGAIN. These have nothing special, they are commands just like the others, that when combined allow loops to be made. They work by manipulating the runstream and the return stack, so be sure you understand this concepts (see section 19.1 if in doubt). Word BEGIN UNTIL Stack and action () This copies the interpreter pointer into the return stack. ( flag ) If the ag is TRUE, pops the return stack, otherwise sets the interpreter pointer to the topmost address of the return stack, without popping it. ( flag ) If the ag is TRUE, does nothing. Otherwise, pops the return stack and skips the next two objects in the runstream. () Sets the interpreter pointer to the topmost pointer of the return stack, without popping it.

WHILE

REPEAT

21.2. Denite 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 Denite Loops


Denite 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. DOs 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 :: BINT5 BINT1 DO INDEX@ LOOP ;

It could be changed to:

150
1 :: BINT5 ONE_DO INDEX@ LOOP ;

21. Loops

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 rst object after the DO) to the return stack. It also creates a DoLoop environment, storing the initial and stop values. Execution continues normally, running all commands between DO and LOOP. When LOOP is executed, it increments the current value in the most recent DoLoop environment. If it is greater than or equal to the stop value of that environment, the environment is destroyed, and one level is popped out of the return stack. This removes the pointer to the rst object after DO, and execution continues normally after LOOP. If the value is smaller, then the interpreter pointer is set to the top value in the return stack, causing the execution to re-start at the rst object after the DO.

21.3
21.3.1
Addr. 0716B

Reference
Indenite Loops
Name IDUP Description ( ) Pushes interpreter pointer into the return stack. ( ) Pushes interpreter pointer into the return stack.

071A2

BEGIN

21.3. Reference Addr. 071AB Name AGAIN

151 Description ( ) Sets the interpreter pointer to the topmost value in the return stack, without popping it. ( ) Sets the interpreter pointer to the topmost value in the return stack, without popping it. ( flag ) If FALSE then AGAIN, otherwise RDROP. ( flag ) NOT then UNTIL. ( # # ) Actually, should be DUP#0=UNTIL. ( flag ) If TRUE does nothing, otherwise RDROP then 2SKIP. ( flag ) NOT then WHILE. ( # ) Try to guess what it does.

071E5

REPEAT

071C8 3640F 35B96 071EE

UNTIL NOT_UNTIL #0=UNTIL WHILE

36428 36441

NOT_WHILE DUP#0<>WHILE

21.3.2
Addr. 073F7 073C3 364C8 073CE 073DB 364E1 07334 073A5 364AF 36496 34AAD 07221

Denite Loops
Name DO ZERO_DO DUP#0_DO ONE_DO #1+_ONE_DO toLEN_DO LOOP +LOOP DROPLOOP SWAPLOOP SEMILOOP INDEX@ Description ( #stop #start ) ( #stop ) ( #stop #stop ) ( #stop ) ( #stop ) ( {} {} ) From ONE to #elements. ( ) ( # ) Increments index by specied number. ( ob ) ( ob1 ob2 ob2 ob1 ) ( ) ( # ) Recalls topmost loop counter value.

152 Addr. 3645A 3646E 36482 367D9 07270 07249 07295 283FC 07258 072AD 07264 072C2 3709B Name DUPINDEX@ SWAPINDEX@ OVERINDEX@ INDEX@#INDEXSTO ISTOP@ ISTOPSTO ISTOP-INDEX JINDEX@ JINDEXSTO JSTOP@ JSTOPSTO ExitAtLOOP

21. Loops Description ( ob ob # ) ( ob1 ob2 ob2 ob1 # ) ( ob1 ob2 ob1 ob2 ob1 # ) ( # #' ) ( # ) Stores new topmost loop counter value. ( # ) Recalls topmost loop stop value. ( # ) Stores new topmost loop stop value. ( # ) ( # ) Recalls second topmost loop counter value. ( # ) Stores new second topmost loop counter value. ( # ) Recalls second topmost loop stop value. ( # ) Stores new second topmost loop stop value. ( ) Does not exit loop immediately. Just stores zero as the stop value, so all objects until the next LOOP will be evaluated. aka: ZEROISTOPSTO

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 :: ... ERRSET :: <suspect objects> ; ERRTRAP :: <if-error objects> ; ... ;

If <suspect objects> and/or <if-error objects> are only a single object, it is not necessary to include them inside a secondary, naturally. It works like this: if the <suspect objects> generates an error, the execution continues at <if-error objects>. Otherwise, it continues past it. The action of <if-error objects> is completely exible. Normally, it will handle the error and then continue or exit the program. The current error number can be recalled with ERROR@, and then your program can do different actions on different kinds of errors. The error messages and numbers can be found in Appendix E. 153

154

22. Error Handling

22.1.1

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 :: ... 1LAMBIND ... TEN ZERO_DO ERRSET :: ... 1LAMBIND ... FIVE ONE_DO <suspect object is here> LOOP ABND ; ERRTRAP :: <error handling> ; LOOP ... ABND ;

10

15

20

If an error is generated, then the error will be trapped. The inner DO/LOOP and temporary environments will be deleted, thanks to the protection word. When one of these environments is created, its protection word is set to zero. The word ERRSET increments the protection word of the most recent environment of each of the three kinds. This way, these environments now have a non-zero protection word. (The protection word was initialized to zero when the environment was created.) The words ERRTRAP and ERRJMP delete these kinds of environments (from the newest to the oldest) until they nd one (of each type) with a non-zero protection word. These environments were the ones that already existed before

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 rst environments found with a non-zero protection word, so that the process works correctly if there are several levels of nesting.

22.2

Generating Errors

The error handling subsystem is invoked by the word ERRJMP. If an error trap was set, the error handler will be executed. If none was set, then the default one will be run. In most cases, when you generate an error, you will let the default error handler deal with it. This default handler does a beep (if this feature is enabled), and displays a description of the error in a message box. The displayed message depends on two things: the error number, which denes the error message (such as Bad Argument Type or Too Few Arguments) and the last stored command name. This last stored command name is automatically stored by the CK<n> words described in Chapter 29. As mentioned there, if you are writing a program that is not part of a library, no command name should be stored, because otherwise an ugly name will be shown. To dene the error number, use the word ERRORSTO. It expects a bint as argument: the number of the error. The errors are listed in Appendix E. There are some words that automate this process, generating some common errors, such as SETTYPEERROR. These words are listed in the reference section below. There are also shortcut words for generating some CAS error messages. These are described in Chapter 52. Sometimes, however, it is desired to generate an error message that is not in the built-in error list. In order to do that, rst you need to store the desired message by means of the command EXITMSGSTO. Then, store #70000 as the error number. Note that there is a built-in bint, called #EXITERR, which contains that number. Now, just call ERRJMP. The process above can be simplied by using the words DO#EXIT and DO$EXIT. The rst takes a bint as argument, stores that number and calls ERRJMP. The latter is used with strings, it takes a string as argument and does the actions described in the previous chapter. However, both entries also call

156

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
22.3.1
Addr. 26067 04CE6 04D0E 36883 04D33 04ED1 04E07 04E37 25EAE

Reference
General Words
Name ERRBEEP ERROR@ ERRORSTO ERROROUT ERRORCLR ERRJMP GETEXITMSG EXITMSGSTO DO#EXIT Description ( ) Beeps. ( # ) Returns current error number. ( # ) Stores new error number. ( # ) Stores new error number and calls ERRJMP. ( ) Stores zero as new error number. ( ) Invokes error handling sub-system. ( $ ) Gets EXITMSG (user dened error message). ( $ ) Stores $ as EXITMSG. ( # ) Stores new error number, does AtUserStack and then ERRJMP. ( % ) Same as above, but takes real number as argument. ( $ ) Stores string as EXITMSG, #70000 as error number, does AtUserStack and then ERRJMP. ( ) Does ERRORCLR and ERRJMP.

25EB0

DO%EXIT

25EAF

DO$EXIT

04EA4

ABORT

22.3. Reference Addr. 04E5E 04EB8 Name ERRSET ERRTRAP

157 Description ( ) Sets new error trap. ( ) Error trap marker. If no error happens, still removes all temporary environments created since ERRSET. ( # $ ) Fetches message from message table. To get a message from a library, use the formula: libnum*#100+msgnum. aka: JstGETTHEMSG ( # $ ) If #70000 then does GETEXITMSG, else does JstGetTHEMESG. ( # $msg ) ( ob ob ) If the argument is a bint, does JstGETTHEMSG to fetch a message. Other arguments are returned unchanged.

04D87

JstGetTHEMESG

04D64

GETTHEMESG

39332

(?GETMSG)

22.3.2
Addr. 04FB6 05016 04FF2 26134 260C1 26116 262E2

Error Generating Words


Name SETMEMERR SETROMPERR SETPORTNOTAV SYNTAXERR NOHALTERR SETCIRCERR SETSTACKERR Description Error 001h Generates "Insufcient Memory" error. Error 004h Generates "Undened 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 Addr. 262DD 262D8 262E7 2F458 2F37B 3721C Name SETTYPEERR SETSIZEERR SETNONEXTERR SETIVLERR SetIOPARErr Sig?ErrJmp

22. Error Handling Description Error 202h Generates "Bad Argument Type" error. Error 203h Generates "Bad Argument Value" error. Error 204h Generates "Undened Name" error. Error 304h Generates "Undened Result" error. Error C12h Generates "Invalid IOPAR" error. ( # ) Calls ERRJMP if the error number is any of {13E 123 DFF}. ( ) Error handler for applications which use savefmt1 to save the current display format. Calls rstfmt1 and then errors out.

25F10

ederr

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 specically, 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 eld, 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 rst object in TEMPOB. It has a similar structure as a Local Variable stack. It is made with blocks, and is protected exactly like local variables. If you trap an error, the virtual stacks created inside the ERRSET and ERRTRAP will be automatically deleted, exactly as are local variable blocks. (See section 22.1.1 for more information.) For examples of the application of the Virtual Stack, see the DoL list processor in section 19.3 and the HP48 Browser example in section 34.7. Following, there is a list of the commands that deal with the Virtual Stack.

23.1
Addr. 25F1E

Reference
Name PushVStack Description ( obn..ob1 obn..ob1 ) Virtual Stack: ( [obn..ob1] ) Pushes the RPN stack onto the Virtual Stack. The RPN stack is unchanged. ( obn..ob1 ) Virtual Stack: ( [obn..ob1] ) Does PushVStack and then clears the RPN stack. ( obn..ob1 ) Virtual Stack: ( [obn..ob1] ) Pops the topmost virtual stack into the RPN stack. The previous contents of the RPN stack are preserved. (The Meta in the name means that a count is returned, but the DROP removes it afterwards.)

25F1F

PushVStack&Clear

25F1A

PopMetaVStackDROP

23.1. Reference Addr. 25F1B Name PopVStack

161 Description ( obm..ob1 obn'..ob1' ) Virtual Stack: ( [obn'..ob1'] ) Pops the topmost virtual stack into the RPN stack. The previous contents of the RPN stack are lost. ( obn..ob1 ) Virtual Stack: ( [obn..ob1] [obn..ob1] ) Inserts the objects from the topmost virtual stack into the RPN stack. The Virtual Stack is unchanged. (The Meta in the name means that a count is returned, but it is removed by DROP.) ( obm..ob1 obn'..ob1' ) Virtual Stack: ( [obn'..ob1'] [obn'..ob1'] ) Copies the topmost virtual stack into the RPN stack. The Virtual Stack is not changed, but the current RPN stack is lost. ( obn..ob1 #n obn..ob1 #n ) Virtual Stack: ( [obn..ob1] ) Pushes #n objects as a new virtual stack. Any other objects in the RPN stack are not pushed. The RPN stack is unchanged. ( obn..ob1 #n ) Virtual Stack: ( [obn..ob1] ) Does PushMetaVStack then drops the pushed objects. Any other objects present in the RPN stack are neither pushed nor dropped.

25F17

GetMetaVStackDROP

25F18

GetVStack

26265

PushMetaVStack

25F1D

PushMetaVStack&Drop

162 Addr. 25F19 Name PopMetaVStack

23. The Virtual Stack Description ( obn..ob1 #n ) Virtual Stack: ( [obn..ob1] ) Insers the contents of the most recent virtual stack into the RPN stack, followed by the count. The previous contents of the RPN stack are not lost. ( obn..ob1 #n ) Virtual Stack: ( [obn..ob1] [obn..ob1] ) Inserts the objects from the topmost virtual stack into the RPN stack, along with the count. The Virtual Stack is unchanged. ( obn..ob1 obm'..ob1' #m obm'..ob1' #m ) Virtual Stack: ( [obn..ob1] ) Pushes the contents of the RPN stack which do not belong to the meta (ie, are "above" it) into a new virtual stack, removing these elements, but keeping the meta. ( obn..ob1 obm'..ob1' #m obm'..ob1' ) Virtual Stack: ( [obn..ob1] ) Does PushVStack&Keep and then DROP. ( obm'..ob1' obn..ob1 obm'..ob1' ) Virtual Stack: ( [obn..ob1] ) Pops the contents of the topmost virtual stack (like PopMetaVStackDROP would have done) into the RPN stack, but above the current contents of the RPN stack. This undoes PushVStack&Keep (or PushVStack&KeepDROP).

2624C

GetMetaVStack

25F20

PushVStack&Keep

25F21

PushVStack&KeepDROP

25F1C

PopVStackAbove

23.1. Reference Addr. 26215 Name DropVStack

163 Description ( ) Virtual Stack: ( [obn..ob1] ) Drops the topmost virtual stack from the Virtual Stack. ( #i obi ) Virtual Stack: ( [obn..ob1] [obn..ob1] ) Returns the ith object from the topmost virtual stack, counting from the top. "Counting from the top" means that object # 0 is the one at the highest-numbered level (n), # 1 is the one at level n-1, and so on. Note: no checking wheter #i is valid. ( new_ob #i ) Virtual Stack: ( [obn..ob(n-i)..ob1] [obn..new_ob..ob1] ) Replaces the ith object from the topmost virtual stack with new_ob, counting from the top. Note: no checking wheter #i is valid. ( #i obi ) Virtual Stack: ( [obn..ob1] [obn..ob1] ) Returns the ith object from the topmost virtual stack, counting from the bottom. "Counting from the bottom" means that # 0 is the object in the lowest numbered level (generally thought of as 1), # 1 is at level 2, etc. Note: no checking wheter #i is valid. ( new_ob #i ) Virtual Stack: ( [obn..obi..ob1] [obn..new_ob..ob1] ) Replaces the ith object from the topmost virtual stack with new_ob, counting from the bottom. Note: no checking wheter #i is valid.

26229

GetElemTopVStack

2626F

PutElemTopVStack

26224

GetElemBotVStack

2626A

PutElemBotVStack

164 Addr. 26233 Name


GetVStackProtectWord

23. The Virtual Stack Description ( # ) Hacking stuff: Gets the protection word of the last VStack level. ( # ) Hacking stuff: Sets the protection word of the last VStack level.

2622E

SetVStackProtectWord

Chapter 24 Memory Operations


The basic equivalents to the user commands STO and RCL are the words CREATE, STO and @: Word CREATE 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 identier 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 identier. 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.

STO

One problem with STO and @ is that if you give, say, SIN as the argument, the whole body of the function is stored in the variable. For that reason, it is better to use SAFESTO and SAFE@, which work like STO and @, but they automatically convert ROM bodies into XLIB names (SAFESTO) and back again (SAFE@). Note that the SAFE in these and other entries only means that they do 165

166

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 nd in the list below.

24.1
24.1.1
Addr. 0797B

Reference
Recalling, Storing and Purging
Name @ Description ( id/lam ob T ) ( id/lam F ) Basic recalling function. ( id/lam id/lam ob T ) ( id/lam id/lam F ) Does DUP then @. ( id/lam ob T ) ( id/lam F ) For lams does @. For ids does ?ROMPTR> to the ob found. ( id/lam id/lam ob T ) ( id/lam id/lam F ) Does DUP then SAFE@. ( id ob F ) ( id T ) Same as SAFE@, but works only in the current directory. ( ID ob T ) ( ID F ) Switches temporarily to the HOME directory and executes @ there. ( id ob ) Same as SAFE@, but errors if variable is not found. Also works for lams, but you get the wrong error. ( {path id} ob ) Recalls from specied path.

35C2C

DUP@

35A5B

SAFE@

35A56

DUPSAFE@

25EF7

SAFE@_HERE

2F064

Sys@

2F2A3

XEQRCL

2F24E

LISTRCL

24.1. Reference Addr. 07D27 Name STO

167 Description ( ob id/lam ) For ids this assumes ob is not pco. If replacing some object, that object is copied to TEMPOB and pointers are updated. For lams: Errors if lam is unbound. ( ob id/lam ) For ids, does ?>ROMPTR to the object before storing. ( ob ID ) Switches temporarily to the HOME directory and executes STO there. ( ob id/lam ) Same as SAFESTO, but will only store in the current directory and will not overwrite a directory. aka: ?STO_HERE ( ob ID ) ( ob id ) ( ob symb ) Like xSTO, but if the level 1 argument is symbolic, use the rst element of it as the variable to write to. ( id/lam ) Inputs value for a variable and stores it. ( newob oldob newob ) Replaces oldob (in memory) with newob. ( id ) Purges variable. Does no type check rst. ( id ) Like PURGE, but only works in current directory. ( idnt/lam ) Purge idnt/lam if it exist. ( ob id ) Creates a variable in the current directory. Errors if id is or contains current directory. Assumes id is not a pco.

35A29

SAFESTO

2F380

SysSTO

25E79

XEQSTOID

25F0C 3E823

XEQStoKey xSTO>

0BD007 085D3 08C27 25E78

PROMPTSTO1 REPLACE PURGE ?PURGE_HERE

1D3006 08696

SAFEPURGE CREATE

168 Addr. 25EC4 Name DoHere:

24. Memory Operations Description ( ) Next object in the runstream is evaluated for the current directory only. ( ob ) STO to LAM LAMLNAME.

36A8B

'LAMLNAMESTO

24.1.2
Addr. 25EA1

Directories
Name CREATEDIR Description ( id ) Creates an empty directory. Calls ?PURGE_HERE rst to delete the original. ( rrp ob T ) ( rrp F ) Recalls rst object in directory. ( rrp ob T ) ( rrp F ) Recalls rst object in directory (not null named). ( ob ob' T ) ( ob F ) Recalls next object in directory. ( ob ob' T ) ( ob F ) Recalls next object in directory (not null named). ( ob id ) Recalls name of object in current directory. ( id ) Purges a directory. Checks references, etc. rst. ( {id1 id2..} ) Orders the variables in the directory by moving the given variables to the beginning of the directory. ( {id1 id2..} ) Returns list of variables from current directory.

08326

LASTRAM-WORD

25EE7

LastNonNull

08376

PREVRAM-WORD

25EF2

PrevNonNull

082E3 25F14

RAM-WORDNAME XEQPGDIR

2F296

XEQORDER

25EB9

DOVARS

24.1. Reference Addr. 25EB8 Name DOTVARS%

169 Description ( % {} ) Returns a list of variables in the current directory with user type given by the number. Internal TVARS if a single number was given. ( {# #' ...} {} ) Returns a list of variables in the current directory with user type given by any of the numbers in the list. This is the core of the TVARS program. ( {HOME dir1 dir2..} ) Returns current path. ( ) Goes to parent directory. ( rrp ) Recalls current directory. ( rrp ) Sets new current directory. ( rrp flag ) Is rrp HOME? ( ) Sets HOME as current directory. aka: SYSCONTEXT ( ) Binds current and last directories to two nullnamed lams. ( ) First sets HOME as both the current and last directories (in case an error happens). Then, restores the current and last directories from 1LAM and 2LAM.

0BD002

DOTVARS{}

25EF1 2F265 08D5A 08D08 08DD4 08D92

PATHDIR UPDIR CONTEXT@ CONTEXT! SYSRRP? HOMEDIR

3712C

SaveVarRes

37186

RestVarRes

170

24. Memory Operations

24.1.3
Addr. 3714A

The Hidden Directory


Name SetHiddenRes 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 ;

370C3 370AF

WithHidden RclHiddenVar

37104

StoHiddenVar

37118

PuHiddenVar

24.1.4

Temporary Memory

The objects in the stack are in a area called temporary memory. As the name says, it is intended for temporary storage. When you duplicate an object in the stack, you do not actually create a copy of it: the stack contains only pointers to objects, and only this pointer is duplicated. When you modify an object, most commands automatically make a new copy of the object in question and modify the copy. In other words, if you enter a string in the stack, press ENTER and edit the string, you have two different strings now. This only happens because a copy of the string was made before editing it. If the copy was not made, the two strings would have been modied, because they were actually the same object. There are a few commands that do not make a copy of the object before editing it. This means that all copies of the object, in the stack or even stored in memory will be modied at the same time. Sometimes this is desired, sometimes not. These commands are sometimes called bang type. When this kind of command appears in this book this is noted in their description. When you use these commands, you must be careful not to modify too much objects

24.1. Reference

171

simulateneously. . . You can use the commands TOTEMPOB or CKREF to make another copy of the object: with this, it becomes safe to use this bang type commands. Addr. 06657 Name TOTEMPOB Description ( ob ob' ) Copies object to TEMPOB and returns pointer to the new copy. ( ob1 ob2 ob2' ob1 ) Does TOTEMPOB then SWAP. ( ob ob' ) If object is in TEMPOB, is not embedded in a composite and not referenced, does nothing. Else copies it to TEMPOB and returns the copy. ( ob1 ob2 ob2 ob1' ) Does SWAP then CKREF. ( ob ob flag ) If the object is in TEMPOB area, is not embedded in a composite and is not referenced, returns the object and TRUE, otherwise returns the object and FALSE. ( ob ob flag )

35C90 25E9F

TOTEMPSWAP CKREF

3700A 06B4E

SWAPCKREF INTEMNOTREF?

01E0E8

INTEMPOB?

Chapter 25 Time and Alarms


This chapter contains a list of entries related to times, dates and the internal list of alarms.

25.1
Addr. 26120 26125 2F37E 2612A 2F2D4 3005E 30912 30077 3008B 300B3 2EECF

Reference
Name SLOW VERYSLOW SORTASLOW VERYVERYSLOW dowait %>HMS %%H>HMS %HMS> %HMS+ %HMSTOD Description ( ) 15 millisecond delay. ( ) 300 millisecond delay. ( ) 1.2 second delay (4 x VERYSLOW). ( ) 3 second delay. ( %secs ) Waits specied number of seconds. ( % %hms ) Converts from decimal to H.MMSS format. ( %% %%hms ) Same as %>HMS, but for long reals. ( %hms % ) Converts from H.MMSS format to decimal. ( %hms1 %hms2 %hms ) Adds time in hms format. ( %hms1 %hms2 %hms ) Subtracts time in hms format. ( %time ) Returns current time.

172

25.1. Reference Addr. 2F388 2EED0 2EED2 2EED1 2EED7 Name VerifyTOD DATE DATE+DAYS DDAYS CLKTICKS

173 Description ( %time %time ) Checks for validaty of time. Errors if not valid. ( %date ) Returns current date. ( %date %days %date' ) Adds specied number of days to date. ( %date1 %date2 %days ) Returns number of days between two dates. ( hxs ) Returns tick count. aka: SysTime ( %dt %tm "dy dt tm" ) Returns string representation of time, using current format. Example: "WED 06/24/98 10:00:45A" ( %date $ ) Returns string representation of date, using current format. ( %time $ ) Returns string represent the time, using current format. ( %date hxs ) Converts date to ticks. ( hxs %date ) Returns date from hxs of internal alarm list format. ( hxs %time ) Returns time from hxs of internal alarm list format. ( hxs %rpt ) Converts hxs in internal alarm list format to repetition interval.

2EED3

TIMESTR

2F329

Date>d$

2F381

TOD>t$

2F1AB 2F003

Date>hxs13 (Ticks>Date)

2F002

(Ticks>TOD)

2F004

(Ticks>Rpt)

174

25. Time and Alarms

25.1.1

Alarms

The internal alarms list has this format: { { hxs action } { ... } ... } The length of each hxs is 24 nibbles. The least signicant 13 nibbles represent the tick value for the time and date. The next 10 nibbles represent the repeat interval, if any. The most signicant nibble represents the status of the alarm (pending, acknowledged, etc.). Addr. 2F178 2F37F Name ALARMS@ STOALM Description ( {} ) Returns internal alarms list. ( %date %time acti %rep % ) Stores an alarm. %repeat is the number of ticks between every repetition. Since there are 8192 ticks in a second, 60 seconds in a minute, and 60 minutes in an hour, to make an alarm that repeats every hour, %repetition would be 8192*60*60 = 29491200. Returns real number representing the position of the alarm in the list. ( % ) Internal DELALARM. ( %n {} ) Recalls nth alarm. List is in the format of STOALARMLS. ( flag ) Returns TRUE if an alarm is due.

2F0AC 2F314

PURGALARM% RCLALARM%

25FA9

ALARM?

Chapter 26 System Functions


Following, there is a list of functions dealing with the system, such as conguring some aspects of the calculator and turning the calculator off. The functions dealing with user and system ags are also described here.

26.1
26.1.1
Addr. 2614D 26044 26170 26152 26049 26175 2F259 2F25F 2F23E

Reference
User and System Flags
Name SetSysFlag ClrSysFlag TestSysFlag SetUserFlag ClrUserFlag TestUserFlag RCLSYSF (STOSYSF) DOSTOSYSF Description ( # ) Sets the system ag with number #. ( # ) Clears the system ag with number #. ( # flag ) Returns TRUE if system ag is set. ( # ) Set the user ag with number #. ( # ) Clear the user ag with number #. ( # flag ) Returns TRUE if user ag is set. ( hxs ) Recalls system ags from 1 to 64. ( hxs ) Stores system ags from 1 to 64. ( hxs ) Stores system ags from 1 to 64, checking for changes in LASTARG ag.

175

176 Addr. 2F25A 2F260 2F25B 2F261 2F25C 2F262 2F3A9 Name (RCLSYSF2) (STOSYSF2) RCLUSERF (STOUSERF) (RCLUSERF2) (STOUSERF2) (STOALLF)

26. System Functions Description ( hxs ) Recalls system ags from 65 to 128. ( hxs ) Stores system ags from 65 to 128. ( hxs ) Recalls user ags from 1 to 64. ( hxs ) Stores user ags from 1 to 64. ( hxs ) Recalls user ags from 65 to 128. ( hxs ) Stores user ags from 65 to 128. ( hxs_usr hxs_sys ) Stores user and system ags from 1 to 64. First is user ags, second is system ags. ( hxs_sys1 hxs_usr1 hxs_sys2 hxs_usr2 ) Expects 4 hxs and stores them as user and system ags. ( {} ) Stores system and user ags. Expects a list with two or four hxs. The rst two are the system and user ags, respectively, from 1 to 64. The last two, if present, are the system and user ags, respectively, from 65 to 128. ( ) Save system ags in a virtual stack. ( ) Restore system ags from virtual stack, popping that level. Run Stream: ( ob ) Evaluates the next object in the runstream, but saves and restores the system ags around it. Uses DoRunSafe. This is very useful.

2F3AA

(STOALLF2)

3B76C

(DOSTOALLF2)

25F23 25F22

SaveSysFlags
RestoreSysFlags

2ABF0

RunSafeFlags

26.1. Reference Addr. 2AB69 Name RunInApprox

177 Description Run Stream: ( ob ) Eval next object in runstream with system ags 20, 21 clear and 22, 105, 102, 120 set. ( ob hxs1 hxs2 ) Evaluate ob and put the system ags as they were before the evaluation on the stack. Used by RunSafeFlags and RunSafeFlagsNoError. Run Stream: ( ob ) :: 'R DoRunSafe 2DROP ; ( ) Switch stack display format of HEX strings to hexadecimal. ( ) Switch stack display format of HEX strings to decimal. ( ) Switch stack display format of HEX strings to binary. ( ) Switch stack display of HEX strings to octal. ( # ) Returns #10h, #10d, #10b or #10o. In decimal terms, 16 for hexadecimal base, 10 for decimal base, 8 for octal base or 2 for binary base. ( ) Internal version of user word STD. ( # ) Internal version of user word FIX. ( # ) Internal version of user word SCI. ( # ) Internal version of user word ENG. ( ) Saves the current number format, and changes to STD mode.

2AC0E

DoRunSafe

2ABD7

RunSafeFlagsNoError

2EFA5

DOHEX

2EFA8

DODEC

2EFA6

DOBIN

2EFA7 2EFBF

DOOCT BASE

2605D 26053 26058 2604E 261A7

DOSTD DOFIX DOSCI DOENG savefmt1

178 Addr. 261A2 Name rstfmt1

26. System Functions Description ( ) Restores the number format saved by savefmt1. Only one set of ags can be saved, there is no nesting of these entries. ( ) Set angular mode to RAD. ( flag ) Is angular mode RAD? ( ) Set angular mode DEG. ( ) Set angular mode GRAD. ( flag ) Returns TRUE if current radix is ".".

2FFDB 25EF3 2FFBD 2FFEF 25EBA

SETRAD RAD? SETDEG SETGRAD DPRADIX?

26.1.2
Addr. 25EB2 261AC 041A7 041ED

General Functions
Name DOBEEP setbeep TurnOff DEEPSLEEP Description ( %freq %dur ) Beeps. Analog to user function BEEP. ( #ms #Hz ) Also beeps. ( ) Internal OFF. ( flag ) Puts HP into deepsleep mode. Returns TRUE if "Invalid Card Data" message. ( flag ) Returns TRUE if low battery. ( ) Flashes "Invalid Card Data" message. ( ) Displays system warnings. ( ) Forces garbage collection. ( # ) Returns amount of free memory in nibbles. Does not do garbage collection. (The user word does.)

01118 0426A 2EE5D 05F42 05F61

LowBat? ShowInvRomp ?FlashAlert GARBAGE MEM

26.1. Reference Addr. 05902 Name OSIZE

179 Description ( ob # ) Returns object size in nibbles. Forces garbage collection. ( ob #nib hxs ) Returns size in nibbles and checksum as hxs. ( ob hxs %bytes ) Returns checksum and size in bytes. ( id hxs %bytes ) Returns checksum and size in bytes of specied variable. ( ob ob flag ) Is object address < #80000h? ( ob #prolog ob' ) Changes prolog of object, does TOTEMPOB. ( # ) Sets the current language for messages. Internal version of xLANGUAGE. ( # ) Returns the current language for messages. Internal version of the xLANGUAGE command. ( ) Clears the BLINKFLAG, SysNib5. ( ) Makes the cursor Blink if in App-mode or Editline.

05944 2F257 2F267

OCRC OCRC% VARSIZE

394C8 05AB3 25F90

INHARDROM? CHANGETYPE >LANGUAGE

25F95

LANGUAGE>

256BE 25E71

NOBLINK ?BlinkCursor

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
Addr. 2EEBB 2EEBC 2EEBD 2EEBE 2EEC1 2EEC2 2EEC3 2EEC4 2EEC5 2EEC6 2EEC7

Reference
Name SENDLIST GETNAME DOFINISH DOPKT DOBAUD DOPARITY DOTRANSIO DOKERRM DOBUFLEN DOSBRK DOSRECV Description ( {} ) Internal SEND. ( $/id/lam ) Internal KGET. ( ) Internal FINISH. ( $ $' ) Internal PKT. ( % ) Internal BAUD. ( % ) Internal PARITY. ( % ) Internal TRANSIO. ( $ ) Internal KERRM. ( % 0/1 ) Internal BUFLEN. ( ) Internal SBRK. ( % ) Internal SRECV.

180

27.1. Reference Addr. 2EEC9 2EECB 2EECD 2F31A 2716D 2EEBF 2F062 Name CLOSEUART DOCR DODELAY APNDCRLF StdIOPAR GetIOPAR StoIOPAR

181 Description ( ) Internal CLOSEIO. ( ) Internal CR. ( % ) Internal DELAY. ( $ $' ) Appends carriage return and line feed to string. ( {} ) Default IOPAR: { 9600 0 0 0 3 1 }. ( %baud % % % % % ) Recalls IOPAR and explodes it into the stack. ( {} ) STO the list of IO parameters in the HOME directory in the variable IOPAR. ( ) Throws the IOPAR error: "Invalid IOPAR". ( $ $' ) Like KVIS, but insert <cr> in front of each newline for PC's. ( $ $' ) Translate special characters into digraphs for ASCII transfer to a PC. ( $ $' ) Translate digraphs in the string to characters. and remove <cr> from th end of lines. ( $ ) Returns version string.

2F37B 2F34F

SetIOPARErr KVISLF

2F34E

KVIS

2F34D

KINVISLF

2F389

VERSTRING

Chapter 28 The HP49 Filer


The HP49 File Manager (Filer for short) allows the programmer to write various applications that deal with les. Two built-in applications that use the ler are the File Manager and the Font Browser.

28.1

Using the Filer

The general entry to call the ler 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 specied as { DOFONT DORRP DOBAK }. If you want to browse all kinds of objects, then this parameter should be just { ZERO }. Since this is very common, there is an entry that will supply this list as argument to FILER_MANAGERTYPE. It is called FILER_MANAGER. Using this entry, you only specify the other two arguments.

28.1.2

The Filer_Path Argument

This argument species the initial path. It can be: Value { } { FOO.DIR } Meaning start in HOME start in HOME/FOO.DIR 182

28.1. Using the Filer Value :n:{ } :n:{ FOO } Meaning start in port n start in backup FOO in port n.

183

28.1.3

The Filer_List Argument

This argument species the menu keys and hard key assignments. It is a list with one element for each menu key. Each menu key is represented by a list with three to ve arguments. The general structure is like this:
1 { { (Item 1) Name_Item Location_Item Action_Item [ ExtraProgram_Item (if 16 <= Action_Item <= 23) ] [ Key_Shortcut ] } { (Item 2) ... } .. 15 }

10

Each of the elements in the sublists will be described now.

28.1.3.1 Name_Item
This species what will be displayed in the menu. It can be either a string, a grob or a program which when evaluated returns a string or a grob.

28.1.3.2 Location_Item
This allows you to control when the action bound to this menu can be run. This is either a bint or a program that returns a bint when evaluated. There are ve possible values, which are listed in the table below. The Constant column lists the name of a constant (dened in the filer.h le in the includes directory of the examples) that you should use when programming.

184 Value 0 1 2 3 4 Constant fEverywhere fVar fNoLib fNoBackup fHomePort

28. The HP49 Filer Meaning The action can be run anywhere. The action can be run only if the user is browsing the HOME directory or one of its subdirectories. The action cannot be run if the user is browsing a library. The action cannot be run if the user is browsing a backup object in a port. The action can only be run in the root of a port.

28.1.3.3 Action_Item
This will dene what will happen when the user presses the softkey corresponding to that menu or the hardkey assignemnt (see section 28.1.3.5). It is a bint, or a program that returns a bint when evaluated. It is possible to call a built-in function of the Filer, or dene your own. The table below lists the built-in actions available. Again, Constant is the name of a constant dened in filer.h. Value 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 24 25 26 Constant cBip cInfo cHexa cView cArbo cUp cMaxUp cDown cMaxDown cSelect cUpDir cDownDir cPreviousMenu cNextMenu cEVAL cSwapHeader cDetails cEDIT cCOPY Action Beeps. Not implemented in the HP49G. Not implemented in the HP49G. Views the object. Shows the directory tree. Moves the highlight up. Moves the highlight to the rst item. Moves the highlight down. Moves the highlight to the last item. Marks the selected variable. Goes to the parent directory. Visits the highlighted directory. Displays the previous menu page. Displays the next menu page. Evalutes the highlighted variable. Toggles between the two available header lines. Toggles between showing information on the variables or just their names. Edits the selected variable. Copies the selected variable.

28.1. Using the Filer Value 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 Constant cMOVE cRCL cPURGE cRENAME cCRDIR cORDER cSEND cHALT cEDITB cRECV cQUIT cPageUp cPageDown cNewObject cSort

185 Action Moves the selected variable. Recalls the contents of the select variable. Purges the selected variable. Renames the selected variable. Creates a directory. Reorders the variables in the current directory. Sends the select variable using Kermit. Suspends the ler temporarily. Edits the select variable in the most appropriate editor. Receives a variable using Kermit. Exits the ler. Scrolls the contents of the ler one screen up. Scrolls the contents of the ler one screen down. Creates a new variable. Opens a dialog with several options for sorting the variables.

To run a custom program, the Action_Item argument will be in the range 1623. Each of these seven values species what will be in the stack and how your program is going to be called. The table below lists the calling methods: Value 16 17 Description Recalls only the current path. 1: Path Recalls the name and the contents of the currently selected object. 3: Path 2: Object 1: Name Equivalent to the above, but deals with multiple selected objects. 2n + 2: Path . . . 5: 4: 3: 2: 1: Object 2 Name 2 Object 1 Name 1 Number of objects (bint)

18

186 Value 19 20

28. The HP49 Filer Description The program is called once for each object. For each object, puts the same that calling method #17 puts. Recalls only the name of the current object. 2: Path 1: Name Recalls all the selected names. n + 2: Path . . . 3: Name 2 2: Name 1 1: Number of names (bint) Recalls the current object only in a string of addresses. 2: Path 1: String Recalls the selected objects in a string of addresses. 2: Path 1: String

21

22

23

Custom calls 22 and 23 will not be described here, as they are not very useful and somewhat more difcult to use. When the program is called on a library at the root of a port, some special rules apply to the name: For calls 17 and 18, the name will be the title of the library. (Like Emacs 1.09 CD&Pivo.) For call 19, the name will be an L plus the number of the library, for example, L1790. For calls 20 and 21, the name will the library number as a real number.

28.1.3.4 ExtraProgram_Item
When using a custom program, this element holds the program to be called. There are some additional features that can be useful: If you launch the program from VAR, your program will start in the current browsed directory.

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 { "INFO" fEverywhere BINT20 :: SWAPDROP (Remove the path) "Name selected is:" DISPROW1 ID>$ DISPROW2 FALSE ; }

If you want to force the Filer to exit after the program is run, leave TakeOver in the stack. Example: { "QUIT" fEverywhere BINT16 :: DROP ' TakeOver ; } which is equivalent to this, which uses the built-in call: { "QUIT" fEverywhere cQUIT }

28.1.3.5 Key_Shortcut
Use this argument to assing a program to a key. This argument is a bint in the form # axx, where a is 0 or 1, meaning without alpha and with, respectively. xx is the key code plus optionally #40 for the Left Shift or #C0 for the right shift. If you want to assign your program to LeftShift + TOOL, the number will be #049: #09 representing the TOOL key, and #40 for the LeftShift. NOTE: This argument must be the fth of the list. So, if you are using a built-in call you will have to dene the entry as something like this: { "TITLE" fEverywhere cQUIT TakeOver # 12F } This will assing the program to Alpha-ON.

188

28. The HP49 Filer

28.2
Addr. 067004 06D004 06E004

Reference
Name Filer
FILER_MANAGER FILER_MANAGERTYPE

Description ( ) Calls the standard ler. ( {path} {args} ) Customized Filer, browsing all object types. ( {types} {path} {args} ) {args} = { item1 item2 ... } item = {name loc action [prog] [key]} ... } Customized ler for selected types only.

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 rst 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 specic number of arguments, use one of the following commands. They check if there are enough arguments in the stack, and produce a Too Few Arguments error if not. Command CK0, CK0NOLASTWD CK1, CK1NOLASTWD CK2, CK2NOLASTWD CK3, CK3NOLASTWD CK4, CK4NOLASTWD CK5, CK5NOLASTWD When to use No arguments required One argument required Two arguments required Three arguments required Four arguments required Five arguments required

The CK<n> commands save the name of the command in which they are executed, and if an error happens, that name is displayed. (For more details, see Chapter 22.) This means they should only be used in libraries, because if they are not part of a library and there is an error, the error will be shown as something like XLIB 1364 36 Error:. In programs that are not a part of a library, use CK<n>NOLASTWD, which does not save the name of the command. 191

192

29. Checking for Arguments

Besides checking for the specied number of arguments, these words also mark the stack in a way that, if an error happens, the objects that were pushed in the stack by your program can be removed, leaving no junk in the stack. This works by marking the stack above the nth level, where n is the number of required arguments. For example, if your program uses CK2 or CK2NOLASTWD and there are three arguments in the stack, you can image the stack like this: 3: 2: 1: 10. 3. 5.5

This mark is not xed at this level; instead it moves as elements are pushed or popped. Here is the stack after the program pushes the bint 1:

4: 3: 2: 1:

10. 3. 5.5 1h

Now, if an error happens in the program, all objects below the mark are dropped. This removes all objects pushed by the program, and also the program arguments if they are still in the stack. This is the standard HP49G behavior. Besides checking for a number of arguments and providing for error recovery, these words also save the arguments as the last arguments, recoverable via the LASTARG User command, provided this is enabled. If an error occours and it is enabled, then the arguments are automatically restored. For user-acessible programs that take no arguments, you should nevertheless use CK0 (or CK0NOLASTWD if it is not part of a library), to mark all the objects in the stack as of user ownership and mark the stack for error recovery. If your program uses a stack-dened number of arguments (like DROPN), use the words CKN or CKNNOLASTWD. These words rst check for a real number in level one, and then for the specied number of objects in the stack. The stack is marked at level two, but only the real number is saved in LAST ARG. The real is converted to a bint.

29.2. Argument Type

193

29.2

Argument Type

The words CK&DISPATCH1 and CK&DISPATCH0 are used to allow your program to do different actions based on the types of arguments given to it. They are used like this:
1 ... CK&DISPATCH1 #type1 action1 #type2 action2 #type3 action3 ... #type_n action_n ;

The type/action pairs are terminated by a SEMI (;). If after the dispatching you want to do some more actions for all argument types, you will need to enclose the whole CK&DISPATCH1 block in another secondary. This is how CK&DISPATCH0 works: it checks if the stack matches the denitions in #type1. If it does, action1 is executed, after which program execution resumes after SEMI. (Each action must be a single object, so if you want to do more than one action, all of them must be included in a secondary, i.e., between :: and ;.) If the type denition does not match the stack, then #type2 is checked, and so on. If no match was found, a Bad Argument Type error is generated. Even when your program accepts only one combination of arguments, this command is still useful for checking if the arguments are of the given type. The difference between CK&DISPATCH0 and CK&DISPATCH1 is that the latter, after completing the rst pass unsuccessfully, strips all the tags from the arguments, converts zints to reals, and does a second pass. Only after the second pass without a match the Bad Argument Type error is generated. Each type denition is a bint like this: #nnnnn. Each n is an hexadecimal number representing the object in one position of the stack, according to the table below. The rst n represents the object in level ve, the second in level four, and so on. This way, #00201 represents a complex number in level three, any object in level two and a real number in level one; #000A6 represents a hxs in level two and an id in level one. There are also two-digit object type numbers, ending in F. Each time you use one of these, the number of arguments that can be checked is reduced. For example, #13F4F represents a real

194

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 Identier (global) LAM (Temporary identier) Secondary Symbolic Symbolic class Hex string Graphics object (GROB) Tagged object Unit object Rompointer (XLIB name) Bint Directory Extended real Extended complex Linked array Character Code object Library Backup object Library data Access pointer Font object Minifont object External object 4 (unused) ZINT

There are also the words CK<n>&Dispatch, where <n> is a number from one to ve. These words combine CK<n> with CK&DISPATCH1. Because they use CK<n> (and thus save the last command name), they should only be used in library commands.

29.2. Argument Type

195

29.2.1

Examples

By disassembling and studying built-in words, you can learn a lot. Not only about argument checking, but also about many other things. The TYPE command provides an example of dispatching. Here is its disassembly:
1 :: CK1 :: CK&DISPATCH0 real %0 cmp %1 str %2 arry XEQTYPEARRY list %5 id %6 lam %7 seco TYPESEC (returns 8, 18 or 19) symb %9 hxs %10 grob %11 TAGGED %12 unitob %13 rompointer %14 BINT31 %20 (#) BINT47 %15 # 3F %21 (%%) # 4F %22 (C%%) # 5F %23 (LNKARRAY) # 6F %24 (CHR) # 7F %25 (CODE) # 8F %16 # 9F %17 # AF %26 (Library Data) # CF % 30 (Font) # FF % 28 (ZINT) any %27 (External) ; SWAPDROP ;

10

15

20

25

30

In this case, it would have been possible to use CK&DISPATCH1 instead of CK&DISPATCH0, because tagged objects are explicitly listed on the table.

196

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
Addr. 262B0

Reference
Name CK0 Description ( ) Saves current command to LASTCKCMD. Marks stack below level 1 to STACKMARK. ( ob ob ) Saves current command to LASTCKCMD. Veries that there is at least one object in the stack, if not generates a "Too Few Arguments" error. Saves stack mark to STACKMARK. If Last Arg is enabled then saves the argument. ( ob1 ob2 ob1 ob2 ) Like CK1, but checks for at least two arguments. ( ob1...ob3 ob1...ob3 ) Like CK1, but checks for at least three arguments. ( ob1...ob5 ob1...ob5 ) Like CK1, but checks for at least four arguments. ( ob1...ob5 ob1...ob5 ) Like CK1, but checks for at least ve arguments. ( ob1...obn %n ob1..obn #n ) Checks for a real in level one. Then checks for that number of arguments. Finally, converts the real to a bint. ( ) Like CK0, but does not save current command.

262B5

CK1

262BA 262BF

CK2 CK3

262C4 262C9 262CE

CK4 CK5 CKN

26292

CK0NOLASTWD

29.3. Reference Addr. 26297 2629C 262A1 262A6 262AB 25F25 2631E 26328 Name CK1NOLASTWD CK2NOLASTWD CK3NOLASTWD CK4NOLASTWD CK5NOLASTWD CKNNOLASTWD CK&DISPATCH0 CK&DISPATCH1

197 Description ( ob ob ) Like CK1, but does not save current command. ( ob1 ob2 ob1 ob2 ) Like CK2, but does not save current command. ( ob1...ob3 ob1...ob3 ) Like CK3, but does not save current command. ( ob1...ob4 ob1...ob4 ) Like CK4, but does not save current command. ( ob1...ob5 ob1...ob5 ) Like CK5, but does not save current command. ( ob1...obn %n ob1..obn #n ) Like CKN, but does not save current command. ( ) Dispatches on stack argument. ( ) Dispatches on stack arguments, stripping tags and converting reals to ZINTS if necessary. ( ) Equivalent to CK&DISPATCH1. ( ) Combines CK1 with CK&DISPATCH1. ( ) Combines CK2 with CK&DISPATCH1. ( ) Combines CK3 with CK&DISPATCH1. ( ) Combines CK4 with CK&DISPATCH1. ( ) Combines CK5 with CK&DISPATCH1. ( ) Clears command save by last CK<n> command. aka: 0LASTOWDOB!, 0LastRomWrd! ( ) :: CK0NOLASTWD 0LASTOWDOB! ; ( ) :: 0LASTOWDOB! CK1NOLASTWD ;

26323 26300 26305 2630A 2630F 26314 25F9A

CK&DISPATCH2 CK1&Dispatch CK2&Dispatch CK3&Dispatch CK4&Dispatch CK5&Dispatch 0LASTOWDOB!

2EF6C 25E9E

AtUserStack CK1NoBlame

198 Addr. 354CB Name 'RSAVEWORD

29. Checking for Arguments Description ( ) Stores rst object in the composite above the actual to LASTCKCMD. aka: 'RSaveRomWrd ( comp ? ) Evaluates composite without saving as current command. If rst command is CK<n>&Dispatch it is replaced by CK&DISPATCH1. If rst command is CK<n> it is skipped. Any other rst command is also skipped! Run Stream: ( ob ) EvalNoCK with the next object in the runstream as argument. Run Stream: ( ob ) Evaluate the next object in the runstream with RPN mode on (i.e. system ag 95 clear). After the evaluation, the system ag is restored to its old value.

26319

EvalNoCK

25F29

(EvalNoCK:)

2A9E9

RunRPN:

29.3.1
Addr. 36B7B

Type Checking
Name CKREAL Description ( % % ) ( Z % ) Checks for real. If a ZINT, convert to real. Else SETTYPEERR. ( $/#/hxs Z ) CHecks for an integer. Converts strings, bints or hxs's to zints. Errors for other object types. ( ob ob' Z Z' ) Like CK1Z, but for two objects. ( ob ob' ob'' Z Z' Z'' ) Like CK1Z, but for three objects.

184006

CK1Z

185006 186006

CK2Z CK3Z

29.3. Reference Addr. 3D2B4 2EF07 Name CKSYMBTYPE nmetasyms

199 Description ( ) Checks for quoted name (name as symbolic). ( meta meta ) Checks for meta containing %, C%, unit, id, lam or symb. ( ob #prolog ) Returns address of prolog of object. ( ob ob %type ) System version of user word TYPE, but this keeps the object. ( ob flag ) ( ob ob flag ) aka: DTYPEREAL? ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) aka: DTYPECSTR? ( ob ob flag ) aka: DTYPEARRY? ( ob flag ??? ) ( ob flag ) ( ob flag ) ( ob flag ) ( ob ob flag ) aka: DTYPELIST? ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) Tests if ob is ID or lam. ( ob ob flag ) Tests if ob is neither an ID nor a LAM. ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag )

03C64 3BC43

TYPE XEQTYPE

3511D 35118 3512C 35127 3510E 35109 35136 3513B 35292 352AD 35195 35190 3504B 35046 350E1 350DC 194006 2F0D4 35168 35163 350FF 350FA 35186

TYPEREAL? DUPTYPEREAL? TYPECMP? DUPTYPECMP? TYPECSTR? DUPTYPECSTR? DUPTYPEARRY? TYPEARRY? TYPERARRY? TYPECARRY? TYPELIST? DUPTYPELIST? TYPEIDNT? DUPTYPEIDNT? TYPELAM? DUPTYPELAM? TYPEIDNTLAM? (ILnot?) TYPESYMB? DUPTYPESYMB? TYPEHSTR? DUPTYPEHSTR? TYPEGROB?

200 Addr. 35181 351A4 3519F 351B3 351AE 3514A 35145 350F0 350EB 35159 35154 3503C 35037 35177 35172 Name DUPTYPEGROB? TYPETAGGED? DUPTYPETAG? TYPEEXT? DUPTYPEEXT? TYPEROMP? DUPTYPEROMP? TYPEBINT? DUPTYPEBINT? TYPERRP? DUPTYPERRP? TYPECHAR? DUPTYPECHAR? TYPECOL? DUPTYPECOL?

29. Checking for Arguments Description ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) Is ob a unit object? ( ob ob flag ) Is ob a unit object? ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) Is on a secondary? ( ob ob flag ) Is ob a secondary? aka: DTYPECOL? ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) ( ob ob flag ) ( ob flag ) Checks if ob is Gaussian integer. ( ob ob flag ) Checks if ob is Gaussian integer.

350D2 350CD 35087 35082 350C3 350BE 350B4 350AF 350A5 350A0 35096 35091 182006 183006 114007 115007

TYPEAPLET? DUPTYPEAPLET? TYPEFLASHPTR?


DUPTYPEFLASHPTR?

TYPEFONT? DUPTYPEFONT? TYPELNGCMP?


DUPTYPELNGCMP?

TYPELNGREAL?
DUPTYPELNGREAL?

TYPEZINT? DUPTYPEZINT? TYPEZ? DUPTYPEZ?


TYPEGAUSSINT? DTYPEGAUSSINT?

29.3. Reference Addr. 116007 187006 Name


DUPTYPEGAUSSINT?

201 Description ( ob ob flag ) Checks if ob is Gaussian integer. ( ob flag ) Checks if object is integer or Gaussian integer. ( ob ob ) Checks that an object is real/cmplx/unit or idnt/lam/symbolic. ( ob ob flag ) Is object allowed in algebraics? ( ob ob flag ) Tests if object is a symbolic matrix. ( ob ob flag ) Tests if ob is idnt or lam. ( ob ob flag ) Tests if ob is real or complex. ( ob ob flag ) Tests if ob is real, zint or hxs. ( ob flag ) Tests if ob is real, zint or hxs. ( ob ob ) Does "Bad Argument Type" error if ob is not a real, complex or symbolics.

CK1Cext

181006

CKALG

25E77 171006 191006 192006 195006 196006 193006

?OKINALG DTYPFMAT? IDNTLAM? FLOAT? REAL?


TYPEREALZINT?

CKSYMREALCMP

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 rst, 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 modier states, according to the table below:

202

30.1. Key Locations #Plane 1 2 3 Modiers None Left-shift Right-shift #Plane 4 5 6 Modiers Alpha Alpha, left-shift Alpha, right-shift

203

You can convert from one representation to another using: Ck&DecKeyLoc ( %rc.p #KeyCode #Plane ) CodePl>%rc.p ( #KeyCode #Plane %rc.p ) Sometimes, the shift keys are not being treated as modiers for other keys, but as keys in their own right. Then they have the key codes 40h (leftshift), C0h (right-shift), and 80h (alpha). On the HP48, only the six key planes listed above existed. The HP49 introduced ve more planes, the shift-hold keys. These are shifted keypresses, where the shift key is being held down while the key is pressed. In User RPL, these keys are denoted by adding 0.01 to the %rc.p representation. For example, the keycode 11.21 means holding down left-shift while pressing the F1 key. In System RPL, shift-hold keys can be encoded in two ways. The rst form (which we will call encoding A) leaves the keycode #kc unchanged, and uses new planes #8...#C. The second form (encoding B) uses planes in the range #1...#6 and adds the keycode of the shift key to the keycode #kc. The following table lists the different encodings for all possible ways to press the F1 key on the HP49G. Plane 1 2 3 4 5 6 7 8 9 10 11 12 Shift Keys Unshifted Left-shift Right-shift Alpha Alpha, left-shift Alpha, right-shift Unused Left-shift-hold Right-shift-hold Alpha-hold Alpha, left-shift-hold Alpha, right-shift-hold User RPL %rc.pl 11.1 11.2 11.3 11.4 11.5 11.6 11.21 11.31 11.41 11.51 11.61 A #kc 1h 1h 1h 1h 1h 1h 1h 1h 1h 1h 1h #pl 1h 2h 3h 4h 5h 6h 8h 9h Ah Bh Ch #kc 1h 1h 1h 1h 1h 1h 41h C1h 81h 41h C1h B #pl 1h 2h 3h 4h 5h 6h 2h 3h 4h 5h 6h

204

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 nd this program in the keyboard directory in the examples directory.
1

:: WaitForKey (normal WaitForKey) CODE (get extended keycode) GOSBVL =SAVPTR D0= 047DF A=DAT0 A D0=A A=0 A A=DAT0 1 A=A-1 P A=A+A A CD0EX C=C+A A CD0EX D0=D0+ 2 A=DAT0 B GOVLNG =PUSH#ALOOP

10

15

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
30.3.1
Addr. 25EA7

Reference
Converting Keycodes
Name Ck&DecKeyLoc Description ( %rc.p #kc #p ) Converts from user key representation format to system. Does handle shift-hold keys. ( #kc #p %rc.p ) Converts from system key representation format to user. Does handle shift-hold keys. ( # #' ) Converts the keycode offset for shift keys to the keycode of the shift key, i.e. 80h->32d, 40h>37d, C0h->42d ( #kc #pl flag ) Is the key any of the three modiers right-shift, left-shift, or alpha?

25EA9

CodePl>%rc.p

25EDC

H/W>KeyCode

25EEA

ModifierKey?

30.3.2
Addr. 261CA

Waiting for Keys


Name FLUSHKEYS Description ( ) Flushes the key buffer. aka: FLUSH

206 Addr. 04708 Name CHECKKEY

30. Keyboard Control Description ( #kc T ) ( F ) Returns next key in the key buffer (if there is one), but does not pop it. Does handle shift-hold keys. ( #kc T ) ( F ) Pops next key from key buffer (if there is one). Does handle shift-hold keys. ( #kc flag ) Get a single keypress from the keybuffer, waits if necessary. The key is returned along with TRUE. If an exception happens, returns FALSE. The exception is not handled. Does handle shifthold keys. ( #kc T ) ( F F ) ( {Alrmlist} T F ) Get a single keypress from the keybuffer, waits if necessary. The key is returned along with TRUE. If an exception happens (error or alarm), the exceptions is handled and the entry returns FALSE. Does handle shift-hold keys. ( ob ) Wait for a single key and return the object associated with this key. Does handle shift-hold keys. ( ob ) Execute ob as if it had been assigned to a key and the key had been pressed. ( #kc flag ) Returns TRUE if the key is being pressed. ( flag ) Returns TRUE if there is at least a key in the key buffer. ( #kc #flag ) Returns next full key press. Does not handle shift-hold keys.

04714

GETTOUCH

25ED6

GETKEY

25ED7

GETKEY*

25ED9

GetKeyOb

25EC5

DoKeyOb

047C7 25EE3

REPKEY? KEYINBUFFER?

25F0B

WaitForKey

30.3. Reference Addr. 2F268 Name Wait/GetKey

207 Description ( % ? ) Internal WAIT command. Does not handle shifthold keys.

30.3.3
Addr. 25FAE 25E70

The ATTN Flag


Name ATTN? ?ATTNQUIT 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.

25E9D

CK0ATTNABORT

25EED

NoAttn?Semi

05040 05068

ATTNFLG@ ATTNFLGCLR

30.3.4
Addr. 25EBF 25ECD 25E6E

Bad Keys
Name DoBadKey DropBadKey 2DropBadKey Description ( ) Beeps. ( ob ) Beeps. ( ob ob' ) Beeps.

208

30. Keyboard Control

30.3.5

User Keys

If no keys are assigned, the internal key assignments list is an empty list. If there is one or more assignments, the list contains 51 sublists, each one representing one key. Each sublist is either empty, if that key has no assignments; or contains twelve elements: each representing the assignment of one plane. The planes are given in the table in section 30.1. For planes with no assignment, an empty list must be given. The seventh list is always empty. Addr. 25F09 25967 2F3B3 Name UserKeys? GetUserKeys (AsnKey) Description ( flag ) Does BINT62 TestSysFlag. ( {} ) Returns user keys list (internal format). ( ob #kc #p ) Assigns an object to a key, specied in system format. ( flag ) Returns TRUE if the keys not dened do their normal actions. ( ) Keys not dened do their normal actions. ( ) Keys not dened just beep when pressed. ( #kc #pl ob ) Recalls the standard assignment of the key. This is the assignment which is active when USER mode is of. ( #kc #pl ob ) If user mode is on, recalls the user object assigned to a key. If user mode is off, recalls the standard assignment instead. ( % ? ) Keystroke evaluation. If % is negative, the standard key is always evaluated.

25621

(NonUsrKeyOK?)

25617 2561C 25EE5

(SetNUsrKeyOK) (ClrNUsrKeyOK) Key>StdKeyOb

25EE6

Key>U/SKeyOb

255006

KEYEVAL

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 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 specied as bints, naturally. The initial insert/replace mode of the cursor: #0 current mode #1 insert mode #2 replace mode

#Ins/Rep

209

210 Name #Entry

31. Using InputLine Description The initial entry mode: #0 current entry mode plus program entry mode #1 only program entry mode #2 program and algebraic entry modes The initial alpha mode: #0 current mode #1 alpha enabled #2 alpha disabled The initial menu, in the format specied below. Normally, specied as FALSE, which means that the menu should not be changed. The initial menu row number (normally BINT1, to show the rst page). A ag: TRUE CANCEL aborts the input FALSE CANCEL just clears the edit line How to process the edit line: #0 return edit line as a string (unevaluated) #1 return edit line as a string and a parsed object #2 parse and evaluate edit line

#Alphalock

ILMenu

#ILMenu AttnAbort?

#Parse

If AttnAbort? is TRUE and the user presses CANCEL while InputLine is active, the edition is aborted. If it is FALSE, CANCEL just clears the edit line. If it was already empty, then it aborts InputLine, returning FALSE. Depending on the value of #Parse, different values are returned, acording to the table: #Parse #0 #1 #2 Stack $Editline TRUE $Editline obs TRUE ob1 ... obn TRUE FALSE Description Edit line only (unevaluated) Edit line and parsed object(s) Resulting object(s) CANCEL pressed to abort

31.1. Menu Key Assignments

211

31.1

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 ag that they should be run with the command line active.

31.2

An Example

Here is an example of InputLine, which prompts for your name, and if the edition was not aborted, displays it.
1 :: $ "Your name:" NULL$ #ZERO#ONE ONEONE NULL{} ONE FALSE ZERO InputLine NOT?SEMI $ "Your name is " SWAP&$ CLEARLCD DISPROW1 SetDAsTemp ;

(prompt) (initial edit line) (cursor at end, insert mode) (prog mode, alpha enabled) (no menu) (menu row) (CANCEL clears) (returns string) (exit if FALSE) (concatenate string & name) (clear display) (display string on 1st line) (freeze display)

10

15

212

31. Using InputLine

31.3
Addr. 2EF5F

Reference
Name InputLine Description ( args $ T ) ( args $ ob1..obn T ) ( args ob1..obn T ) ( args F ) args = $pr $line #pos #I/R #I/A #alph menu #row attn #parse ( $1 $2 $3 ) This is what the User command INPUT does if level 1 is a string. ( $1 {} $3 ) This is what the User command INPUT does if level 1 is a list.

2F154

(input$)

2F155

(input{})

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 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 ag: if TRUE, then the hard keys not assigned perform their normal actions. Otherwise, they just beep. A ag: if TRUE, then standard key denitions are used for non-application keys instead of default key processing. Either the menu specication, 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 rst page.

AppKeys NonAppKeyOK? DoStdKeys?

AppMenu

#AppMenuPage

213

214 Parameter name SuspendOK?

32. The Parameterized Outer Loop Description A ag: if TRUE, any user command that would create a suspended environment and restart the system outer loop will instead generate an error. This object is evaluated before each display update and key evaluation. If the result is TRUE, the loop is exited. The error-handling object to be evaluated in an error occurs during key evaluation.

ExitCond AppError

After setting up the arguments, call ParOuterLoop. This word does not generate any results itself, but any of the key assignments can return results to the stack or any other form desired.

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 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 specied 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.

POLRestoreUI POLResUI&Err

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 POLRestoreUI ; (handle keypresses)

215

10

(if an error happened, restore) (the saved interface and error) (restore saved user interface)

If you use the words above instead of ParOuterLoop, you must provide the same level of error protection as the code above. One note: the parameterized outer loop creates a temporary environment when it saves its current user interface, and it abandons it when it restores a saved user interface. This means that you cannot use words that operate on the topmost temporary environment, like 1GETLAM within the loop, unless the variable was created after calling POLSaveUI, and it is abandoned before calling POLRestoreUI. For temporary environments created before calling POLSaveUI, named temporary variables should be used.

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 efcient 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 specic 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 species which keys to assign and their actions. If a key is not assigned by the application, and the NonAppKeyOK? parameter is TRUE, the standard key denition is executed if the DoStdKeys? parameter is TRUE, or, if available, the USER key assignment, if it is FALSE. If NonAppKeyOK? is FALSE, a warning beep is produced, and nothing else is done. Most of the time, NonAppKeysOK? should be set to FALSE. The AppKeys parameter is a secondary, which must take as argument the keycode and plane, and return either the desired key denition and TRUE, or FALSE if the application does not handle it. Specically, the stack diagram is as follows: ( #KeyCode #Plane KeyDef TRUE ) ( #KeyCode #Plane FALSE ) The suggested form for the key assignments is:
1 BINT1 #=casedrop :: (process unshifted plane) ; BINT2 #=casedrop :: (process left-shifted plane) ; ... 2DROPFALSE

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 denitions become more legible. ?CaseKeyDef is used in the form: ... #KeyCode #TestKeyCode ?CaseKeyDef <keydef> ... If #TestKeyCode equals #KeyCode, ?CaseKeyDef drops both of them, pushes <KeyDef> and TRUE to the stack, and exits the secondary. Otherwise, it drops only #TestKeyCode, skips <KeyDef> and continues.

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 denition: DUP#<7 casedrpfls This will push FALSE when a key whose code is less than seven (that is, one of the softkeys) is pressed. The FALSE will force the standard assignment to be run, and this assignment runs the action dened by the AppMenu parameter. For that to work, the NonAppKeysOK? parameter must be TRUE, so that the menu keys work normally, that is, doing the actions specied by the AppMenu parameter.

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. The Parameterized Outer Loop

32.7

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 dene, for example, ExitCond as ' LAM exit. When the quit key is pressed, you just have to use TRUE ' LAM exit STO and the loop will be exited. Naturally you must create the lam and initialize it with FALSE before.

32.8

An Example

The following program is an example of an application that uses a parameterized outer loop to create an environment where the user may move a little graphic over the screen. You can use the arrow keys to move, or the menu keys. In both cases, if you press left-shift before, the graphic moves ten steps instead of one. There is code to assure that the graphic does not go off the screen boundaries. Figure 32.1 below displays this program running.

Figure 32.1: The POL example

:: * Defines names for used keys. Makes things easier and * more readable DEFINE kpNoShift BINT1 DEFINE kpLeftShift BINT2 DEFINE kcUpArrow BINT10 DEFINE kcLeftArrow BINT14 DEFINE kcDownArrow BINT15

32.8. An Example
DEFINE kcRightArrow BINT16 DEFINE kcLeftShift BINT37 DEFINE kcOn BINT47 * Requires no arguments CK0NOLASTWD 15 * Prepare display RECLAIMDISP (clear and resize display) ClrDA1IsStat (temporarily disable clock) 20 * Smiling face grob. The below must be in one line only. GROB 7C 310003100008F000060300810C004000104000102000202 4012010004010004010004010004011044021042026032048F0104000 10810C0006030008F000 FIFTYSIX (initial x coordinate for box) EIGHTEEN (initial y coordinate for box) FALSE (initial exit condition) { LAM MrSmile LAM x LAM y LAM exit? } BIND (binds local variables) * The following composite is the display update object. * It clears the screen and draws the smiling face grob. :: CLEARVDISP (clear display) LAM MrSmile (recall smiling face grob) HARDBUFF (recall current display) LAM x LAM y (smile coordinates) GROB! (REPL) DispMenu.1 (display menu) ; * The following composite is the key action handler. :: kpNoShift #=casedrop :: DUP#<7 casedrpfls (enable softkeys) kcUpArrow ?CaseKeyDef :: LAM y DUP BINT1 #<ITE :: DROP ERRBEEP ;

219

10

25

30

35

40

45

50

220
:: #1- LAM y STO ; ; kcDownArrow ?CaseKeyDef :: LAM y DUP BINT36 #>ITE :: DROP ERRBEEP ; :: #1+ LAM y STO ; ; kcLeftArrow ?CaseKeyDef :: LAM x DUP BINT1 #<ITE :: DROP ERRBEEP ; :: #1- LAM x STO ; ; kcRightArrow ?CaseKeyDef :: LAM x DUP BINT111 #>ITE :: DROP ERRBEEP ; :: #1+ LAM x STO ; ; kcOn ?CaseKeyDef :: TRUE LAM exit? STO ; kcLeftShift #=casedrpfls DROP DoBadKeyT

32. The Parameterized Outer Loop

55

60

65

70

75

80

85

90

95

; kpLeftShift #=casedrop :: DUP#<7 casedrpfls (enable softkeys) kcUpArrow ?CaseKeyDef :: LAM y DUP BINT10 #<ITE :: DROPZERO ERRBEEP ; :: BINT10 #- ; LAM y STO ; kcDownArrow ?CaseKeyDef :: LAM y DUP BINT27 #>ITE :: DROP BINT27 ERRBEEP ; #10+ LAM y STO

32.8. An Example
; kcLeftArrow ?CaseKeyDef :: LAM x DUP BINT10 #<ITE :: DROPZERO ERRBEEP ; :: BINT10 #- ; LAM x STO ; kcRightArrow ?CaseKeyDef :: LAM x DUP BINT102 #>ITE :: DROP BINT112 ERRBEEP ; #10+ LAM x STO ; kcLeftShift #=casedrpfls DROP DoBadKeyT ; 2DROP DoBadKeyT 120 ; * Key definitions TrueTrue 125 * Menu specification { { "Up" { :: LAM y DUP BINT1 #<ITE :: DROP ERRBEEP ; :: #1- LAM y STO ; ; :: LAM y DUP BINT10 #<ITE :: DROPZERO ERRBEEP ; :: BINT10 #- ; LAM y STO ; } } { "Down" { :: LAM y DUP

221

100

105

110

115

130

135

140

222

32. The Parameterized Outer Loop


BINT36 #>ITE :: DROP ERRBEEP ; :: #1+ LAM y STO ; ; ::

145

150

LAM y DUP BINT37 #>ITE :: DROP BINT37 ERRBEEP ; #10+ LAM y STO ; } } { "Left" { :: LAM x DUP BINT1 #<ITE :: DROP ERRBEEP ; :: #1- LAM x STO ; ; :: LAM x DUP BINT10 #<ITE :: DROPZERO ERRBEEP ; :: BINT10 #- ; LAM x STO ; } } { "Right" { :: LAM x DUP BINT111 #>ITE :: DROP ERRBEEP ; :: #1+ LAM x STO ; ; :: LAM x DUP BINT102 #>ITE :: DROP BINT112 ERRBEEP ; #10+ LAM x STO ; } } NullMenuKey { "Quit" :: TRUE LAM exit? STO ; }

155

160

165

170

175

180

185

32.9. Reference
} ONEFALSE LAM exit? ERRJMP ParOuterLoop RECLAIMDISP ClrDAsOK ;

223

190

195

(first menu row, no suspended envs) (exit condition) (error handler) (run the par outer loop) (resize and clear display) (redraw display)

32.9
Addr. 2B475

Reference
Name ParOuterLoop Description ( Disp Keys NonAppKeys? DoStdKeys? menu #row suspendOK? ExitCond AppErr ) ( Disp Keys NonAppKeys? DoStdKeys? menu #row suspendOK? ExitCond AppErr ) Saves current UI to LAMSavedUI. <see>ParOuterLoop Sets new UI, same arguments as to ParOuterLoop. ( ) Displays, reads and evaluates keys according to set UI. ( ) Restores saved UI from LAMSavedUI. ( ) Restores saved UI and executes ERRJMP. ( ob ) ( ) ( ob ) ??? ( ob ) ( ob ) ( ob ) ( ob )

2B4AC

POLSaveUI

2B542

POLSetUI

2B628

POLKeyUI

2B6CD 2B6B4 29F25 29F35 29F55 29F75 2A055 2A065 2A145 2A158

POLRestoreUI POLResUI&Err AppDisplay! AppDisplay@ AppKeys! AppKeys0 AppExitCond! AppExitCond@ AppError! AppError@

224 Addr. 25690 25695 2569A 2564D 2565A 2565F 25F04 Name AppMode? SetAppMode ClrAppMode SetNAppKeyOK DoStdKeys? SetDoStdKeys SuspendOK?

32. The Parameterized Outer Loop Description ( flag ) Is currently a POL active? ( ) ( ) ( ) ( flag ) ( ) ( flag ) Does the current user interface allow suspension? ( ob ) :: LAM 'nohalt ; ( ) ( )

27E72 25671 25676

nohalt SetAppSuspOK ClrAppSuspOK

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 ashpointers which can be use to access the browser engine. These ashpointers are not ofcially 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. Using the HP49 Browser

33.1

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 rst 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

227

BINT2

BINT3

BINT4

BINT5

Message name and meaning MsgDispBox This message has to do with the display of the choose box. It is currently not well understood. The stack diagram of the message handler for this message seems to be ( #1 ::prog TRUE ) ( #1 FALSE ) MsgDispTitle This should display the title. If not handled, the title is drawn using the supplied $title argument. ( #2 TRUE ) ( #2 FALSE ) MsgEndInit This message is executed after the initialization of the choose box, but before control is handed over to the POL. ( #3 TRUE ) ( #3 FALSE ) MsgKeyPress This is a key handler, similar to the ones used by a POL. When the user presses a key, the message handler is called with the keycode and plane (see section 30.1), and the message BINT4 on the stack. It should return the key denition (an address or a secondary), TRUE and TRUE again. If the key is not handled, FALSE must be returned. Here is the stack diagram for the message handler regarding this message: ( #kc #pl #4 KeyDef TRUE TRUE ) yes, TRUE twice! ( #kc #pl #4 FALSE ) MsgMenu This must return the menu which is shown to the user during the selection. The return value for this message is evaluated to get the menu. The menu is not automatically updated when you move the selection, but message #6 can be used to enforce an update. If the menu has more than one page, you must handle the NXT and PREV keys in the keyhandler they are not handled by default. ( #5 { menu list } TRUE ) ( #5 ::prog_returning_list TRUE ) ( #5 FALSE )

228 Message BINT6

33. Using the HP49 Browser Message name and meaning MsgEndEndDisp This message is called after the redisplay of the choose box nishes (because you changed the selected item). You can use this to force an update of the menu display by setting 24LAM to FALSE. See the example below. ( #6 TRUE ) ( #6 FALSE )

33.5

The Browser 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 Contents Quit. Set this to TRUE if you want the POL to exit. DispOffset. Index of selected item with respect to DispTop. DispTop. Index of the rst choose item currently visible on the screen. The message handler. The redisplay program. DisplayMenu. Set this to FALSE in order to enforce a redisplay of the menu.

33.6

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 nd out what the current item is. The choose box engine keeps two copies of the choose list on the Virtual Stack, and you can use these to get the current item. On level one of the Virtual Stack, the list is inverted, and the items which have already been shown in the CHOOSE box are converted to strings (sensitive to ag -85). On level three of the Virtual Stack there is a copy of the original list. The index of the current item is available with this code snippet:

33.7. Saving and Restoring the Screen :: 2GETLAM 3GETLAM #+ ; Indexes start at 0. To access the current item use one of these methods: 1. Get the decompiled string. This is very fast and only 8 bytes. :: 2GETLAM 3GETLAM #+ GetElemBotVStack ;

229

2. Get the original item. There is no supported way to get to the third level of the Virtual Stack directly, so you have to dig it out and restore the stack afterwards. Here is a way to do it (35 bytes):
1 :: GetVStackProtectWord PopMetaVStack GetVStackProtectWord PopMetaVStack 2GETLAM 3GETLAM #+ GelElemTopVStack 1LAMBIND PushMetaVStack&Drop SetVStackProtectWord PushMetaVStack&Drop SetVStackProtectWord 1GETABND ;

10

This looks complicated, but it is also quite fast and actually used in the ROM for the Help key of the catalog. 3. If you nd 2 too long, you can keep a copy of your original list, for example in a named LAM mylist. If you did that before calling the browser ashpointer, you get the current item with :: LAM mylist 2GETLAM 3GETLAM #+ #1+ NTHCOMPDROP ;

33.7

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 ashpointers 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 specic storage place, so they cannot be used by stacked choose boxes (a choose box creating another choose box which needs to save its screen for an excursion). In such cases, you need to save and restore copies of HARDBUFF and HARDBUFF2.

33.8

An Example

Below follows an example for the application of the browser engine. This program displays the numbers 1-100 for multiple selection and returns a list of all selected values. Pressing the Squareroot key displays the square root of the current number in a message box. In the menu, pressing F1 adds the decompiled version of the currently selected number (a string!) to the return list. Pressing F2 will show some help text about the choose box. There is another menu button F3 which does not do anything, but which shows if the selected number is even or odd. Since this display changes, we need message six to force a menu update. F5 and F6 are the usual CANCL and OK actions. Figure 33.1 shows this program while running.

Figure 33.1: The 49 browser example


1

:: 101 ONE_DO INDEX@ UNCOERCE LOOP 100 P{}N DUP

(Make list with 1-100)

33.8. An Example
NULL{} { LAM mylist LAM res } BIND INNERCOMP "REALS" 0 :: 4 OVER#=case :: DROP DUP#1= 3PICK 23 #= ANDcase :: 2DROP :: LAM mylist 2GETLAM 3GETLAM #+ #1+ NTHCOMPDROP %SQRT DO>STR FlashWarning ; TrueTrue ; FALSE ; 5 OVER#=case :: DROP :: NoExitAction { { "->{}" :: TakeOver LAM res 2GETLAM 3GETLAM #+ GetElemBotVStack >TCOMP LAM res STO ; } { "?" :: TakeOver FPTR 2 88 DOCLLCD ZEROZERO (Empty list to collect) (Save a copy of the list) (Explode for FPTR 2 72) (Title) (Initial position) (The key handler)

231

10

15

(SQRT key pressed) (DROP the keycodes)

20

25

(Get current value) (Compute SQRT) (Display) (Yes, we handle this key) (Other keys not handled) (Provide a menu)

30

35

(Do not save as LastMenu) ("Add to list" menu key) (Get current list) (Get element as string)

40

45

(Add to list) (STO current list) ("Help" menu entry) (Save current screen) (Clear screen) (Next is the help text)

50

232
"->{} ? SQRT 55 ADD HELP DISP ROOT" $>GROBCR XYGROBDISP WaitForKey 2DROP FPTR 2 89 ; } { :: TakeOver LAM mylist 2GETLAM 3GETLAM #+ #1+ NTHCOMPDROP DUP %2 %/ %FLOOR %2 %* %= ITE "even" "odd" ; NOP } NullMenuKey { "CANCL" FPTR 2 77 } { "OK" FPTR 2 76 } } ; TRUE 85 ; 6 OVER#=case :: DROP FalseFalse 24 PUTLAM ; DROPFALSE ; FPTR 2 72 ITE :: DROP LAM res TRUE ;

33. Using the HP49 Browser

(Display help text) (Wait for any key) (Restore the screen)

60

(Button to show) ("even" or "odd") (The list) (Get current element) (Test if even)

65

70

(Return correct label) (No action when pressed) (4th key is empty) (Default CANCL action) (Default OK action)

75

80

(Yes, we provide a menu) (Enforce menu update)

90

(Other messages) (are not handled) (Run the CHOOSE engine)

95

(DROP current value) (Return list) (Push TRUE)

33.9. Reference
FALSE ABND ; (CANCL: return FALSE) (Free local variables)

233

33.9
Addr. 072002

Reference
Name (Choose3) Description ( meta $title #pos ::handler ob T ) ( meta $title #pos ::handler F ) The main choose engine. ( meta $title #pos ::handler #idx T ) ( meta $title #pos ::handler F ) Same as Choose3, but returns the index of the selected item instead of the item itself. #idx starts at zero. ( meta $title #pos ob T ) ( meta $title #pos F ) Call Choose3Index with empty message handler. This is just :: 'DROPFALSE FPTR2 Choose3Index ; ( meta $title #pos ::handler ob T ) ( meta $title #pos ::handler F ) Save and restore HARDBUFF/2 around a Choose3 call. ( $title {} %sel ob %1 ) ( $title {} %sel %0 ) Equivalent to User RPL CHOOSE command. ( ::handler ) Pushed the default message handler (the one used by the CAT key) on the stack.

074002

(Choose3Index)

070002

(Choose2)

073002

(Choose3Save)

005002

(sysCHOOSE)

075002

(ChooseDefHandler)

234 Addr. 088002 Name (SaveHARDBUFF)

33. Using the HP49 Browser Description ( ) Save HARDBUFF and HARDBUFF2 is a safe place. ( ) Restore HARDBUFF and HARDBUFF2 saved with SaveHARDBUFF. ( ) The OK action executed by Choose3 if OK or ENTER is pressed. ( ) The CANCEL action executed by Choose3 if CANCL or ON is pressed.

089002

(RestoreHARDBUFF)

077002

(Choose3OK)

076002

(Choose3CANCL)

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 ve 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 conguration of several aspects of the browser. It works as other message handlers do: it is called with a bint in the stack, representing the code of the message. If the message is handled, the program should return any data required by the message and TRUE, otherwise it returns FALSE. Which means that DROPFALSE (which can be pushed in the stack with the command 'DROPFALSE) is a valid value for this parameter, meaning that no messages are handled, and that default values should be used at all the times. Here are the descriptions of some of the messages:

235

236 Code (Decimal) 57

34. Using the HP48 Browser Description and Stack Number of lines the browser will display on the screen. The default depends on the current font, and on system ag 90. ( #) Height of browser line. Probably this does not need to be changed. ( # Width of browser line. Leave space for the display of arrows if the number of elements may be grater than the page size. ( #) Should return TRUE if the browser will be full-screen, or FALSE if windowed. The default is windowed. ( flag ) Should return TRUE if check marks are allowed, thus supporting the selection of multiple items, or FALSE if not. The default is not to allow check marks. ( flag ) Returns the number of elements. If your program changes the number of elements during execution, you must handle this message. ( #) Should return the coordinates of the upper left corner of the browser selection box. You probably do not need to change the default value. ( #x #y ) This message should return the initial difference between the marked selection and the top of page. Be sure that the difference is less than the current selection and less than the page size, otherwise the calculator may crash. ( #) This message is called when the background needs to be painted. Its action can be used to draw something else on the background. ()

58

59

60

61

62

63

64

65

34.1. The ::Appl Parameter Code (Decimal) 66

237

67

68

69

70

74 79

80

81

Description and Stack This message is called when the title needs to be painted. Its action should draw the title in HARDBUFF. Most of the times, this is not handled, and the title is drawn from the $Title parameter. () Returns title as a grob. Most of the times, this is not handled, and the title is drawn from the $Title parameter. ( grob ) If message 67 is not dened, this is called to return the title as a grob, but only for full-screen mode. ( grob ) If message 67 is not dened, this is called to return the title as a grob, but only for windowed mode. ( grob ) If the $Title parameter is not a null string, this entry is called to return a title string. This overrides the $Title parameter. ( $) This message should draw all visible lines of the browser. () This message should display one line of the browser. If this is the selected line, this message should draw this line in inverse video or mark that its the selected one in another way. (# ) This message is an alternative to supplying the items as the {}Items parameter. It supplies the number of the item, and this message should returns the item. Any object can be returned; ::Converter will be called to convert this into a string. If you want to have dynamicallychanging items in the browser, this message allows that. But message 82 is probably better in this case. ( # ob ) This message converts one element into a grob. (This overrides the ::Converter parameter.) If should return a grob with dimensions 7NULLLAMx8NULLLAM. If check marks are enabled, you must incorporate the check mark in the grob if the item is checked. ( # grob )

238 Code (Decimal) 82

34. Using the HP48 Browser Description and Stack This message is like message 80, but the object is already returned as a string. ::Converter is not called afterwards. If this message is used, you do not need to write a ::Converter. (# $) Returns a list describing the menu. The format of the list is the same of InputLine and Input Forms, see section 37.1. ( {} ) This message is called when the browser is started, after everything has been set. () This is called when an item is checked or unchecked. The default action handles checking and unchecking of items pretty ne, so you probably do not need to handle this message. (# ) This message is called before the browser exits. () This is called after the ON key is pressed, or the CANCL menu key. If TRUE is returned, the browser exits. If FALSE is returned, the browser continues. ( flag ) This is called after the ENTER key is pressed, or the OK menu key. If TRUE is returned, the browser exits. If FALSE is returned, the browser continues. ( flag )

83

85

86

87 91

96

34.2 The $Title Parameter


This parameter species the title. There are messages that can override this parameter: 66, 67, 68, 69 and 70.

34.3. The ::Converter Parameter

239

34.3

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 18PUTLAM FALSE ROMPTR 0B3 019 ;

(Re-read # of elements) (Re-read width) (#Index) (#NumOfElements)

(Reduce #index if #NumOfElements) (was reduced) (Recalculate offset)

10

34.7

An Example

This example uses the browser to allow the user to enter a list of equations (inspired by the Y= window, but considerably different). Initially, the list is empty. The user then adds equations to the list. Equations can also be edited or deleted. This program handles messages 62 and 82 to return the number of elements and an equation already converted to a string when asked for it. The equations are stored in a named LAM. Some other messages are also handled to congure other aspects of the browser. Figure 34.1 shows this program while running.
1

:: 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 ; } { "Del" :: LAM EQS INNERDUP #0=case DROP (quit if empty) PushVStack&Keep (save stack contents) reversym DROP 18GETLAM ROLL DROP 18GETLAM #1UNROLL DEPTH {}N LAM EQS STO PopMetaVStackDROP (restore stack) ROMPTR B3 3E (re-read # elements) 18GETLAM (change selected element) 12GETLAM (if necessary) #MIN 18PUTLAM FALSE ROMPTR B3 19 ; } { "Edit" :: LAM EQS (get element)

35

40

45

50

55

60

65

70

34.7. An Example 18GETLAM NTHELCOMP NOT?SEMI FPTR2 ^EQW3Edit NOT?SEMI 18GETLAM LAM EQS PUTLIST LAM EQS STO

243

75

(quit if empty) (edit) (quit if not changed)

(replace)

80

; } NullMenuKey { "CANCL" FPTR2 ^DoCKeyCancel } { "OK" FPTR2 ^DoCKeyOK } } TRUE ; DROPFALSE ;

85

90

"Pseudo-Plot" NULL:: NULL{} BINT1


95

(title) (converter) (no items - msgs are used) (initially selected elt) (run browser)

ROMPTR2 ~Choose ABND ;

244

34. Using the HP48 Browser

34.8
Addr. 0000B3

Reference
Name Choose Description ( ::Appl $Title ::Convert {} offset {}' T ) ( ::Appl $Title ::Convert {} offset ob T ) ( ::Appl $Title ::Convert {} offset F ) The return value is a list if checkelds are enabled, otherwise it is just the selected object. Only FALSE is returned when the user presses CANCEL. ( {} ) Menus with "OK". ( {} ) Menus with "CANCL", "OK". ( {} ) Menus with "CHK", "CANCL", "OK". ( $title {items} ob T ) ( $title {items} F ) Simple interface to the HP48 choose engine. On the HP49G, calls RunChooseSimple. ( $title {items} ob T ) ( $title {items} F ) Simple interface to the HP48 choose engine. ( ) Toggle check on current item. ( ) Check all elements. ( ) Uncheck all items. ( ) Simulate Cancel. ( ) Simulate OK.

0050B3 0060B3 0070B3 0630B3

ChooseMenu0 ChooseMenu1 ChooseMenu2 ChooseSimple

004002

RunChooseSimple

09F002 0A0002 0B0002 09E002 09D002

DoCKeyCheck DoCKeyChAll
DoCKeyUnChAll

DoCKeyCancel DoCKeyOK

34.8. Reference Addr. 0B3002 0B2002 0B1002 0150B3 Name LEDispPrompt LEDispList LEDispItem (BBMoveTo)

245 Description ( ) Redraw title. ( ) Redraw browser lines. ( # ) Redraw one line. ( # ) Moves selection to line and updates display. ( flag ) Recalculates offset of selected item in page, and redraws lines if the ag is TRUE. ( ) Sends message 85 to ::Appl, thus running the user-dened start-up procedure. ( ) Re-reads the size of the page (message 57). ( ) Re-reads the height of the browser line (message 58). ( ) Re-reads the coordinates of the browser box (message 63). ( ) Re-reads the width of the browser line (message 59). ( ) Sends message 96 to ::Appl, thus running the OK action. It does not check the value returned and never exits. ( ) Sends message 91 to ::Appl, thus running the CANCEL action. It does not check the value returned and never exits. ( ) Redraws the background. ( #n grob ) Returns nth element as a grob.

0190B3

(BBRecalOff&Disp)

0220B3

(BBRunEntryProc)

0230B3 0240B3

(BBReReadPageSize) (BBReReadHeight)

0250B3

(BBReReadCoords)

0260B3

(BBReReadWidth)

0280B3

(BBRunENTERAction)

0290B3

(BBRunCanclAction)

02F0B3 0370B3

(BBReDrawBackgr) (BBGetNGrob)

246 Addr. 0380B3 03B0B3 Name (BBGetNStr) (BBRereadChkEnbl)

34. Using the HP48 Browser Description ( #n $ ) Returns nth element as a string. ( ) Re-reads whether checkmarks are enabled. (Message 61). ( ) Re-reads whether to use full-screen mode. (Message 60). ( ) Re-reads the menu. (Message 83). ( ) Re-reads the number of elements. (Message 62). ( #n ob ) Returns nth element. ( #n flag ) Returns whether the given element is checked. ( grob ) Returns up arrow as grob ( grob ) Returns down arrow as grob ( grob ) Returns a space as grob. ( ) Go down one page. ( ) Go up one page. ( flag ) Returns TRUE if the browser has no elements. ( # ) Returns height of lines based on the font that will be used. This value is the default height of the browser. Equivalent to FPTR 2 64. ( ) :: LAM 'BR5 ;

03C0B3

(BBRereadFullScr)

03D0B3 03E0B3

(BReReadMenus) (BBReReadNElems)

03F0B3 04B0B3

(BBGetN) (BBIsChecked?)

0520B3 0530B3 0540B3 0590B3 05A0B3 05B0B3

(BBUpArrow) (BBDownArrow) (BBSpace) (BBPgDown) (BBPgUp) (BBEmpty?)

05C0B3

(BBGetDefltHeight)

0190E0

BRRclC1

34.8. Reference

247

34.8.1

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 Description Used by CACHE POL exit condition Initial display status. This is a list in this format: { DA1IsStatFlag DA2bEditFlag DA1BadFlag DA2aBadFlag DA2bBadFlag DA3BadFlag } Menu before browser was run Screen before browser was run Offset in page Height of browser line x coordinate of upper left corner of browser in HARDBUFF y coordinate of upper left corner of browser in HARDBUFF Page size Number of elements Menu Full screen? List of indexes of checked items Check marks enabled? TRUE if is a browser, FALSE if it is a viewer Current selected index {}Items ::Converter $Title ::Appl Type n/a flag {}

4 5 6 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22

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 eds, which are spaces that the user can ll 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 difcult. But there are several advantages: in User RPL, you can only have text els, in System RPL you can have check boxes or choose elds. You can also restrict the valid inputs, and make elds 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 ashpointer. It needs lots of arguments. They are divided in three categories: label denitions, eld denitions, and general information. Each label and eld 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 denitions

Field denitions Number of labels 248

35.2. Field Denitions Parameter #fields MessageHander Title Description Number of elds See section 35.4 below Title to be shown on top of screen

249

35.1

Label Denitions
Each label denition consists of three arguments: Description Text to be displayed X coordinate Y coordinate

Parameter label_text #x_offset #y_offset

label_text is a string, that will be converted to a grob using the minifont. This text will be displayed at the specied coordinates. These are two bints representing the x and y positions of the label in the screen. The top-left corner has coordinates (0, 0), and coordinates increase down- and right-wards. The new input form engine also supports a grob as argument, this grob will be directly displayed at the given coordinates.

35.2

Field Denitions
Each eld denition consists of thirteen arguments: Description See section 35.4 below X coordinate Y coordinate (normally label Y coordinate - 1) Length of eld Height of eld (usually 8) Type of eld, see below for valid values. List of valid object types See below Help string See below See below

Parameter MessageHandler #x_offset #y_offset #Length #Height #FieldType #AllowedTypes Decompile "HelpString" ChooseData ChooseDecompile

250 Parameter ResetValue InitValue Description Reset value Initial value

35. Creating Input Forms

The message handler will be described below. The x and y positions specify where the eld will appear. They work similarly to the x and y positions of label denitions. Then length and height are also two bints, which specify the size of the eld. The eld type is a bint which denes the type of the eld: Decimal value 1 23 12 2 32 Field Type Text eld: user can enter anything. Extended text eld (DoInputForm engine only): The user can enter anything, or select a variable using the ler. Choose eld: user must select from a list of valid values. Combo eld: user can select from a list of values or enter another. Checkbox eld.

The allowed types parameter is used in the text, extended text and combo elds: it is a list of bints, representing the allowed types of objects that can be entered in that eld. You can nd the object types in the table of section 29.2. You have to use the values in the User Type column, as bints. Other elds should specify MINUSONE. You can also specify MINUSONE for text and combo elds, this means that all kinds of objects are accepted. In the extended text eld, the list of types is also used to limit the variables displayed in the ler. Decompile is a bint that species how the entered objects should be displayed in the screen. Its meaning depends on the bits that are set. First, you should start with BINT2 or BINT4: the former tells that numbers will be decompiled using the current mode, the latter species that STD mode should be used. If the eld will not hold numbers, it does not make much difference in which value you choose. After you have specied the basic way to decompile objects, you can also set some ags to congure it further. If you want to use the minifont when displaying the eld valued, add 1 to the value. If you add 8 to the value, then only the rst character of the string will be displayed. If the object the eld holds is a list (or another composite, as a matter of fact), you can add 16 or 32, to get the rst or second object of this composite, respectively, and display

35.3. Label and Field Counts

251

this object according to the rules dened by the other values. This option is sometimes useful when using choose elds, but not for normal text elds. Note: DoInputForm does not support els decompiled with the minifont. You can also specify the Decompile paramater as BINT0. If this is done, no decompilation is done: you can only use strings in the eld, and they will be displayed, without the quotes, in the normal font. The next parameter species the help string that will be shown in the last line of the display when that eld has the focus. Enter anything you want. The ChooseData parameter is only used in list and combo elds. Other types should have MINUSONE as this parameter. This paramer is the list of values that will be presented to the user for selecting. When you use a decompile value that includes the value 16, you can use a list like this: { { "label1" <foo> } { "label2" <bar> } { ... } ... } This way, only the rst objects will be shown, but the entire list will be returned. (Like the INFORM User command does.) When using DoInputForm (but not IfMain, you can also specify a string in the ChooseData parameter of text elds. This means that the text eld will allow the user to browse the variables stored in memory and use the contents of some variable as the value of the eld. Apparently, IfMain ignores the ChooseDecompile parameter. Just specify it with the same value you used for the Decompile parameter. The reset and initial values are the contents of the eld that are shown when the form is initially displayed, and when it is reset. It should be an object of the types allowed for that eld, for list elds it will be one of the elements of ChooseData list. For check elds, use TRUE or FALSE. You can leave text or combo elds empty by specifying MINUSONE as one or both of this parameters.

35.3

Label and Field Counts

These are two bints, representing the number of labels and elds dened. Note that since they are different values, you can have labels which just show some kind of information to the user, or elds without any label denition.

252

35. 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 eld, and one for the input form itself. The messages are passed whenever something interessant happens to a eld or the input form, and during the initialization of the input form. As with other message handlers, the program you provide is called with a message number (a bint) in level one, and sometimes other parameters. If the program handles the message, then it should return whatever is required by the specic (sometimes nothing). If the message is not handled, it should drop the message number and push FALSE in the stack, leaving any other arguments there. So, a message handler that handles no messages is simply DROPFALSE, which, as you know, can be conveniently pushed in the stack with 'DROPFALSE. In the message handling, the entries listed in the reference section below can be used to retrive information from the input form or to modify it. Section 35.8.2 will describe each of the available messages in IfMain. The messages of DoInputForm are different. Here is a template message handler program if only one message is handled:
1 :: IfMsgGetFocus (or any other message) #=case :: * Here is the message handling code TRUE (to tell the system the message was handled) ; FALSE (indicate that other messages were not handled) ;

And this is a template message handler for two or more messages:


1 :: IfMsgOK OVER#=case :: * Code. Do not forget to return TRUE. ; IfMsgType OVER#=case

35.5. The Title


:: * Code for message. ; * And possibly more. DROPFALSE 15 ; (other messages are not handled)

253

10

35.5

The Title

This is a string that will be shown on the top of the display, with the small font. If it is longer than 32 characters (the width of the screen), it will be truncated and . . . will be appended. With IfMain, instead of a string you can provide your own grob to be displayed. It should have the size of 131x7 pixels.

35.6

Results Of The Input Form


The stack output, if the user exited the input form by ENTER is: N+1: N: eld_1 eld_2 ... 2: eld_n 1: TRUE

If CANCEL was used to exit the form, then just FALSE is returned. The value of each eld depends on the types allowed for that eld, and on the way the possible values of list elds are specied. If a eld is empty, xNOVAL is returned.

35.7 An Example
This example imitates the HP49 tranfer dialog, but far from completely. There are many differences, and this example has, naturally, no functionality beyond displaying an Input Form.

254

35. Creating Input Forms

The code denes all the labels and elds, and the input form has a simple message handler that handles two messages: one message to set the eld that will start with the focus, and one to congure the last three softkeys to look like the ones in the Tranfer dialog. (Our keys, however, only beep when pressed. . . ) Figure 35.1 below displays the screen when this program is run.

Figure 35.1: The Input Form example


1 :: * 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

10

15

20

(Message handler) (Position & size) (Field type: choose) (Types, does not apply here) (No decompilation) (Help text) (Possible options) (ChooseDecompile - ignored) (Initial & reset values)

35.7. An Example
DROPFALSE 92 9 36 8 BINT12 MINUSONE BINT0 "Choose type of transfer" { "Kermit" "XModem" } BINT0 "Kermit" DUP DROPFALSE (Message handler) 25 18 103 8 (Position & size) BINT1 (Field type: text field) { BINT5 BINT6 } (Allows ids and lists) BINT2 (Decompile with stack appearance) "Enter names of vars to transfer" (Help text) MINUSONE (ChooseDate - n/a) MINUSONE (ChooseDecompile - ignored) MINUSONE DUP (Initially empty) DROPFALSE 20 27 18 8 BINT12 MINUSONE BINT0 "Choose transfer format" { "Bin" "ASC" } BINT0 "Bin" DUP DROPFALSE 74 27 24 8 BINT12 MINUSONE BINT0 "Choose character translations" { "None" "Newl" "\8D159" "\8D255" } BINT0 "\8D255" DUP DROPFALSE 122 27 7 8 BINT12 MINUSONE BINT0

255

25

30

35

40

45

50

55

60

65

256
"Choose checksum type" { "1" "2" "3" } BINT0 "3" DUP DROPFALSE 20 36 24 8 BINT12 MINUSONE BINT0 "Choose baud rate" { "1200" "2400" "4800" "9600" "15300" } BINT0 "9600" DUP DROPFALSE 74 36 24 8 BINT12 MINUSONE BINT0 "Choose parity" { "None" "Odd" "Even" "Mark" "Spc" } BINT0 "None" DUP DROPFALSE 104 36 ZEROZERO BINT32 MINUSONE DUP "Overwrite existing variables?" MINUSONE DUP TrueTrue

35. Creating Input Forms

70

75

80

85

90

95

100

105

110

9 9 (Number of labels & fields) :: (InputForm message handler) BINT7 OVER#=case :: (Sets initially focused field) DROP TWO TRUE ; BINT12 OVER#=case :: (Configures menu softkeys) DROP { { "RECV" DoBadKey }

35.8. Reference
{ "KGET" DoBadKey } { "SEND" DoBadKey } } TRUE ; DROPFALSE 120 ; "TRANSFER" FPTR2 ^IfMain ; (Title) (Run it)

257

115

35.8 Reference
35.8.1
Addr. 020004

Inputform
Name IfMain Description ( l1..ln f1..fm #n #m msg $ ob1..obn T ) ( l1..ln f1..fm #n #m msg $ F ) l = $ #x #y f = msg #x #y #w #h #type legal dec $hlp ChDat ChDec res init Starts an input form using the new engine. ( l1..ln f1..fm #n #m msg $ ob1..obn T ) ( l1..ln f1..fm #n #m msg $ F ) l = $ #x #y f = msg #x #y #w #h #type legal dec $hlp ChDat ChDec res init Starts an input form using the old engine. ( {} ) Returns the menu for the rst menu row of an InputForm.

2C371

DoInputForm

0050B0

IFMenuRow1

258 Addr. 0060B0 Name IFMenuRow2

35. Creating Input Forms Description ( {} ) Returns the menu for the second menu row of an InputForm. ( # T/F(fld/lbl) T/F(val) ) ( # T/F(fld/blb) #0 T/F(val) ) Toggles the eld or label visible or invisible. Second argument species if # means a eld or a label. Third argument is the value to set. ZERO as third argument means to retrieve the current setting. ( # T/F(fld/lbl) T/F(val) ) ( # T/F(fld/blb) #0 T/F(val) ) Toggles the eld or label selected or not selected (appears in inverse video on the screen). ( # T/F(fld/lbl) grb ) Sets the grob of a eld or a label (modies the data saved in the data string). ( val # ) Sets the value of a eld (full handling, including GROB setting). ( # val ) Gets the value of the Nth eld. ( ) Gets the value of the current eld. ( val ) Sets the value of the current eld. ( # prg ) Retrieves a eld message handler. ( # #type ) Retrieves the eld type. ( # {} ) Retrieves the eld object type list. ( # val ) Retrieves the eld decomp value.

021004

IfSetFieldVisible

022004

IfSetSelected

023004

IfSetGrob

024004

IfSetFieldValue

026004 027004 025004 028004 029004 02A004 02B004

IfGetFieldValue
IfGetCurrentFieldValue

IfSetCurrentFieldValue

IfGetFieldMessageHandler

IfGetFieldType
IfGetFieldObjectsType

IfGetFieldDecompObject

35.8. Reference Addr. 02C004 02D004 Name


IfGetFieldChooseData

259 Description ( # {} ) Retrieves the eld data for choose. ( # val ) Retrieves the eld decomp value in case of choose. ( # val ) Retrieves the eld reset value. ( val # ) Changes the eld reset value. ( # val ) Retrieves the eld internal value. ( ) Displays the datastring on the screen. Takes care of the command line size. ( #n ) Recalls the number of elds from the data string. ( # val ) Checks or uncheck a check eld. ( ob ob flag ) Checks if an object meets the current eld type requirements. ( {} {}' ) ( #FFFFF #0 ) Generates a list of the allowed prologs for a eld. ( ) Resets all elds, set as the current value their reset value. Used to explode the datalist on the stack to work on it. ( # ) Makes a different eld "current". ( val ) ( ) If the current eld is a choose eld, displays the posibilities and let the user choose. A value is returned only if the user does not press CANCEL.

IfGetFieldChooseDecomp

02E004 02F004 030004 031004

IfGetFieldResetValue

IfSetFieldResetValue

IfGetFieldInternalValue

IfDisplayFromData

032004

IfGetNbFields

033004 034004

IfCheckSetValue IfCheckFieldtype

04C004

IfGetPrlgFromTypes

035004

IfReset

036004 037004

IfSetField IfKeyChoose

260 Addr. 038004 Name IfKeyEdit

35. Creating Input Forms Description ( (cmd line) ) Edits the current eld value if possible. You cannot edit a choose and a label choose eld. ( (cmd line) ) ( ) Displays a Choose box with all the possible types for this eld. A command line is opened only if the user replies with OK. ( val ) Puts the value of the eld on the stack and HALT. Allows to the user to compute a new value. ( ) Inverts the current check eld value. ( ) On Key handler. Gives the oportunity to the user to perform his own program. Asks to the IF if we can leave. If Yes, puts a FALSE (quit with ON (if canceled)) and sets the 'Quit LAM to TRUE. ( ) Enter Key management. Gives the oportunity to the user to perform his own program. Asks to the IF if we can leave. If yes, puts the elds values on the stack put a TRUE (if validated) and sets the 'Quit LAM to TRUE. ( $dat #n $/# $dat' ) Sets the help string associated with a eld. This is used by the automatic IF generator program and should not be use in other ways.

039004

IfKeyTypes

03A004

IfKeyCalc

03B004 03C004

IfKeyInvertCheck

IfONKeyPress

03D004

IfEnterKeyPress

03F004

IfSetHelpString

35.8. Reference Addr. 040004 Name IfSetTitle

261 Description ( $dat grb/$/# $dat' ) Alters a DataString modifying the Title part. This is used by automatic IF generator program ans should not be use in other ways. ( ) Initializes the internal depth counter. This has to be used when running a command modifying the stack ( $dat handl {} F ) ( $dat handl {} ob1...obn T ) Internal Inform Box main program. Alters a DataString modifying the Title part. This is used by automatic IF generator program ans should not be used in a different way. ( ob1...obn ) Puts on the stack the external value of each eld. ( # T/F(fld/lbl) #x #y #w #h ) Changes the size and position of an object Note: You can not change the size or the X position of a label or a check eld. ( # T/F(fld/lbl) #x #y #w #h ) Gets the size and position of an object. ( $dat bmsg #n $dat ) Sets the text of a set of labels. ( $dat bmsg #n $dat ) Sets the Help String of all elds. ( $dc $dat ) Uncompresses a compressed data string.

04A004

IfInitDepth

042004

IfMain2

043004

IfPutFieldsOnStack

044004

IfSetFieldPos

045004

IfGetFieldPos

047004 048004 04D004

IfSetAllLabelsMessages

IfSetAllHelpStrings

IsUncompressDataString

262

35. Creating Input Forms

35.8.2

Input Form Messages

The names of the messages are DEFINEs for the numbers. You will nd this DEFINEs in the inputform.h le in the include subdirectory.

35.8.2.1 IfMsgKeyPress 0
This message is sent after each keypress, rst to the active eld, then to the input form. If the eld handles the message, the normal input form key handling is not executed. Input Output (if handled) Output (if not handled) 2: 1: 2: 1: 3: 2: 1: #KeyPlane #KeyCode ::Key_Handler_Program TRUE #KeyPlane #KeyCode FALSE

35.8.2.2

IfMsgLooseFocus 1

This is sent to a eld when it is about to loose the focus. You can do anything here, including taking back the focus. If this is done, then no IfMsgGetFocus message will be sent to this eld. Input Output 1: #Field_That_Will_Get_Focus 2: #Field_That_Will_Get_Focus 1: TRUE or FALSE

35.8.2.3 IfMsgNewField 2
This message is sent to the IF just before a new eld receives the focus. There is no input, and the output can be either TRUE or FALSE.

35.8.2.4 IfMsgGetFocus 3
This message is sent to the eld that has just received the focus. There is no input, and the output can be either TRUE or FALSE.

35.8. Reference

263

35.8.2.5 IfMsgGetFieldValue 4
This message is sent to the current eld. It has as input the internal data of the eld, and this message can be used to return the external value (which is displayed in the screen). Using this and the IfMsgSetFieldValue messages, it is possible, for example, to store only an offset to the current element when you have a list of xed values, instead of the actual element. Input Output (if handled) Output (if not handled) 1: 2: 1: 2: 1: Internal value External value TRUE Internal value FALSE

35.8.2.6

IfMsgSetFieldValue 5

The complimentary message of IfMsgSetFieldValue: it gives as input the external (or user) value, and the internal value should be returned. If you want a message to be called after each change in the value of a eld, this is the one. You can leave the value given as input unchanged, naturally. Input Output (if handled) Output (if not handled) 1: 2: 1: 2: 1: External value Internal value TRUE External value FALSE

35.8.2.7 IfMsgGetFieldGrob 6
This message is sent to the current eld. If you decide to handle it, you will have to set the grob that is displayed in the eld (you can use the IfSetGrob entry for this). If you do so, then the standard code of the Input Form that would do this is not called. Input Output 2: 1: 2: 1: #Field Value #Field TRUE or FALSE

Here is an example of handling this message:

264
1

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 rst eld that will be selected. It makes no difference wheter you return TRUE or FALSE, just change the number if desired. Input Output 1: #Field 2: #Field 1: TRUE or FALSE

35.8.2.9 IfMsgFieldReset 10
This message is sent to a eld that is going to be reset. It is possible to modify the value of the eld, if desired. Input Output 1: Value 2: Value, possibly modied 1: TRUE or FALSE

35.8.2.10 IfMsgGetMenu 11
This message is sent to the input form handler during initialization, and can be used to provide a menu for the input form. The menu is in the format described in section 37.1. Input Output (if handled) 1: 3: 2: 1: 2: 1: Menu Original menu New menu TRUE Original menu FALSE

Output (if not handled)

35.8. Reference

265

35.8.2.11 IfMsgGet3KeysMenu 12
This message can be used to change the last three softkeys of the rst row of the standard input form menu. If handled, it should return a list with three sub-lists, each being a key denition. Input Output (if handled) Output (if not handled) None 2: List 1: TRUE 1: FALSE

35.8.2.12 IfMsgCancel 13
This allows the user to replace the default quit handler. This message is called when the ON key or the CANCL softkey are pressed. If it is handled, then no standard code is run. The user should alter the value of LAM 'Quit to indicate the POL that the input form should be ended. Input Output (if handled) Output (if not handled) None 1: TRUE 1: FALSE

35.8.2.13 IfMsgCancelKey 14
This message is sent to the input form handler when the user requests the input form to end via the CANCEL key. The programmer can prevent the input form to end if there is invalid input, for example. Input Output (if handled) Output (if not handled) None 2: TRUE or FALSE 1: TRUE 1: FALSE

When the message is handled, a TRUE in level two means that the input form should end, FALSE means it should continue.

35.8.2.14 IfMsgOK 15
This is similar to the IfMsgCancel message, but for the OK softkey or ENTER key.

266

35. Creating Input Forms

35.8.2.15 IfMsgKeyOK 16
This message is sent to the input form handler when the user requests the input form to end via the OK key. The programmer can prevent the input form to end if there is invalid input, for example. Input Output (if handled) Output (if not handled) None 2: TRUE or FALSE 1: TRUE 1: FALSE

When the message is handled, a TRUE in level two means that the input form should end, FALSE means it should continue.

35.8.2.16 IfMsgChoose 17
When the user presses the CHOOS softkey in a choose eld, this message is sent, rst to the eld, and then to the input form (if it was not handled by the eld). If it is handled by either, then no standard code is run, and you have to display the choose box yourself. There are no arguments, and you should return TRUE to prevent the standard code to be executed if you desire that, after having displayed your choose box.

35.8.2.17 IfMsgType 18
This message is sent to the input form when the TYPES softkey is pressed. If it is handled, no standard code is executed. There are no arguments, and you should return TRUE to prevent the standard code to be executed if you desire that, after having displayed your choose box.

35.8.2.18 IfMsgCalc 19
This message is sent to the form when the CALC softkey is pressed. If it is handled, no standard code is executed. There are no arguments, and you should return TRUE to prevent the standard code to be executed if you desire that, after having displayed your choose box.

35.8. Reference

267

35.8.2.19 IfMsgNewCommandLine 20
This message is sent to the input form when a new command line is created. The system does not care if the message is handled or not. It is just to give the programmer the opportunity to perform anything he needs. There are no inputs, and the output is just TRUE or FALSE, without any difference.

35.8.2.20 IfMsgOldCommandLine 21
This message is sent to the input form when a command line is cancelled. See message IfMsgNewCommandLine above for more details.

35.8.2.21 IfMsgCommandLineValid 22
This is sent to a eld when the command line is validated. Input Output (if handled) Output (if not handled) None; a command line is present No command line; elements in the stack and TRUE 1: FALSE

35.8.2.22 IfMsgDecompEdit 23
This is sent to a eld when an object needs to be decompiled for editing. Input Output (if handled) Output (if not handled) 1: 2: 1: 1: Object String TRUE FALSE

35.8.2.23 IfMsgNextChoose 24
This message is sent to a choose eld when the +/- key is pressed. If it is handled, then the default action is not run. There are no inputs and no outputs, except for the TRUE/FALSE.

35.8.2.24 IfMsgEdit 25
This is sent to a eld when the EDIT softkey is pressed. The input is the current value of the eld, the output can be nothing, a modied command line, something in the stack, or a modied eld. If this message is handled, then the default code is not run.

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 xed 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 nd DA, which means Display Area. Figure 36.1 shows each of this areas.

Figure 36.1: The Display Areas Display area 2 is actually divided in two areas: 2a and 2b. Normally, only area 2a is visible, and it occupies the whole DA 2.

36.2 Preparing the Display


Two words establish control over the text display: RECLAIMDISP and ClrDA1IsStat. The rst 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 :: ClrDA1IsStat RECLAIMDISP TURNMENUOFF <application> ClrDAsOK -orSetDAsTemp ; (redraw LCD) (freeze the whole display)

36. The Display

(suspend clock) (set, clear and resize text display) (turn off menu if desired)

10

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 Action Freezes display area 1. Freezes display area 2. Freezes display area 3. Freezes display areas 1 and 2. Freezes the whole display. Redraws display area 1. Redraws display area 2. Redraws display area 3. Redraws the whole display.

36.4

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 Action Clears entire HARDBUFF. Clears display area 1. Clears display area 2. Clears display areas 1 and 2. Clears top 16 rows. Clears top 8 rows. Clears rows 8 to 15 (second status line). Clears status and stack area. Clears entire display. ( #start_row #rows ) Clears #rows from HARDBUFF.

271

36.5

Displaying Text

There are two fonts in the HP49: the system font and the minifont. Both can be changed by the user, but it is only possible to access two fonts at each time. The height of the system font (or of its characters, to be precise) can vary, but its characters are always ve pixels wide. The size of the minifont is xed: each character is 3x5 pixels. There are commands to display text in the system font directly, but not for the minifont. In the latter case, it is necessary to convert the text into a grob and display the grob. The list below only describes the most used ones, for a complete list see the reference section below.

36.5.1

System Font

To display text using the system font, use the commands DISPROW1, DISPROW2. . . to DISPROW10, which take a string as argument and display it in the specied line of the display. Note that, depending on the size of selected system font and wheter the menu is displayed, some of these commands may not be used. You can always safely display text on the rst seven lines, even with the largest system font.

272

36. The Display

36.5.2

Minifont

As said above, displaying text with the minifont is more complicated. First, put a string in the stack and run the command $>grob. This will return a grob representing with the string in the minifont. You now need to display this grob on the screen. You can use GROB! or XYGROBDISP for that. For more information on these words and for a general treatment of grobs, turn to Chapter 15. In this same chapter, you will nd some other commands which might be more convenient for displaying text with the minifont.

36.5.3

Displaying Warnings

The word FlashWarning is used to display a warning message. It beeps, and then displays the given string in a message box. The user must press OK in order to continue. Instead of FlashWarning, one can use FlashMsg, which displays the text in the status line, and does not beep. To display a message in the status area, it uses the word DISPSTATUS2, which takes a string with a line break in it, and displays it using the two lines of the status area. After a short pause, the display is returned to the state it was before and the program continues.

36.6
36.6.1
Addr. 26166 2616B 25FA4 26076

Reference
Display Organization
Name TOADISP TOGDISP ABUFF GBUFF Description ( ) Sets the text display as the active. ( ) Sets the graphic display as the active. ( textgrob ) Returns the text grob to the stack. ( graphgrob ) Returns the graphic grob to the stack. The HP49 extable address for ExitAction! is the same, but this must be a bug.

36.6. Reference Addr. 2608F 26094 25EDE 25ED5 Name HARDBUFF HARDBUFF2 HARDHEIGHT GBUFFGROBDIM Description ( dispgrob ) Returns the current grob to the stack. ( menugrob ) Returns the menu grob to the stack. ( #height ) Returns the height of HARDBUFF. ( #height #width ) Returns dimensions of graphic grob.

273

36.6.2
Addr. 25EF4

Preparing the Display


Name RECLAIMDISP 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 ll 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.

2EE7D 2EEFD 2F034

ClrDA1IsStat MENUOFF? TURNMENUOFF

2F031 2EEFC 26247 26283 26099 260A3

TURNMENUON MENUOFF GetHeader SetHeader HEIGHTENGROB KILLGDISP

2EEF9

DOERASE

274

36. The Display

36.6.3
Addr. 2EF67

Immediate Refresh
Name SysDisplay Description ( ) Redisplays all required areas. Does it immediately, without waiting for the current command to nish. ( ) Redisplays the command line now if necessary. ( ) Redisplays the command line now. ( ) Just calls DispCommandLine. ( ) Redisplays the menu now if no key is waiting in the buffer. Even better is this: :: DA3OK?NOTIT ?DispMenu ; ( ) Displays menu now. ( ) :: DispMenu.1 SetDAsValid ; ( ) Redisplays the stack now if necessary. ( ) Redisplays the status area now if necessary. ( ) Displays the status area now. ( ) Displays a horizontal line at y=14, normally the separation between header and stack. ( flag ) Is time display required? Checks system ag 40 and something else. ( ) Redisplays the InputLine prompt, i.e. refreshes the region between the command line and the header during InputLine. Requires a string (the prompt) in 4LAM.

2F19F 2F19E 2EE5A 2DFCC

?DispCommandLine DispCommandLine

DispEditLine ?DispMenu

2DFF4 2DFE0 2C341 2C311 2C305 2C2F9

DispMenu.1 DispMenu ?DispStack ?DispStatus DispStatus DispStsBound

2A7F7

DispTimeReq?

2F300

DispILPrompt

36.6. Reference Addr. 26260 Name nDISPSTACK

275 Description ( $prompt #height #header flag flag ) Used by DispILPrompt.

36.6.4
Addr. 2EE8D 2EE8E 2EE8F 2EE90 2EE6E 2EE6D 2EE62 2EE63 2EE66 2BF3A 2BF53 2BF6C 2BF85 2EE69 2EE8A 2EE6A 2EEA7 2F37A 2EE6B 2EE71 2EE64 2EEA5 2EE67 2EF98 2EE68 2EE91 2EF99

Controlling Display Refresh


Name ClrDA1OK ClrDA2aOK ClrDA2bOK ClrDA2OK ClrDA3OK ClrDAsOK DA1OK? DA3OK? DA2aLess1OK? DA1OK?NOTIT DA2aOK?NOTIT DA2bOK?NOTIT DA3OK?NOTIT 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 Addr. 2EEA0 2EE78 2EE74 2EEB0 2EE79 2EE75 2EEB1 2EE7A 2EEB3 2EEB2 2EE7B 2EEB5 2EEB4 2EE72 2EE73 2EE76 2EE81 2EEB7 2EE93 2EE6F 2EE77 2EE70 2EE94 2EE65 2F379 2EE7C 2EE6C 2EEAC 2EEAE 2EEAF 2EEAB 2EE7F 2EE7E 2EE80 Name SetDA3ValidF SetDA1Bad ClrDA1Bad DA1Bad? SetDA2aBad ClrDA2aBad DA2aBad? SetDA2bBad ClrDA2bBad DA2bBad? SetDA3Bad ClrDA3Bad DA3Bad? SetDA1NoCh SetDA2aNoCh SetDA2bNoCh ClrDA2bNoCh DA2bNoCh? SetDA2NoCh SetDA12NoCh SetDA3NoCh SetDA13NoCh SetDA23NoCh SetDA12a3NCh SetDA123NoCh SetDAsNoCh SetDA2aEcho SetDA1IsStat SetNoRollDA2 ClrNoRollDA2 DA1IsStatus? SetDA2bIsEdL DA2bIsEdL? ClrDA2bIsEdL Description ( ) ( ) ( ) ( flag ) ( ) ( ) ( flag ) ( ) ( ) ( flag ) ( ) ( ) ( flag ) ( ) ( ) ( ) ( ) ( flag ) ( ) ( ) ( ) ( ) ( ) ( ) aka: SetDA12a3NoCh ( ) ( ) ( ) ( ) ( ) ( ) ( flag ) ( ) ( flag ) ( )

36. The Display

36.6. Reference

277

36.6.5
Addr. 25E7E

Clearing the Display


Name BLANKIT Description ( #startrow #rows ) Clears #rows from HARDBUFF, starting #startrow. ( ) Clears HARDBUFF. ( ) Clears top eight rows (rst 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.

at

26021 2EED4 2EED5 2F15E 2EF5E 2F31C 2F31B 2EE5C 261C0 261C5 2EF05

CLEARVDISP Clr8 Clr8-15 Clr16 BlankDA1 BlankDA2a BlankDA2 BlankDA12 CLCD10 CLEARLCD DOCLLCD

36.6.6
Addr. 2613E 2603A 26148

Annunciator and Modes Control


Name SetLeftAnn ClrLeftAnn SetRightAnn Description ( ) Sets left-shift annunciator. ( ) Clears left-shift annunciator. ( ) Sets right-shift annunciator.

278 Addr. 2603F 26139 26035 25EE9 25F08 2649F 26143 2610C 25EBE Name ClrRightAnn SetAlphaAnn ClrAlphaAnn LockAlpha UnLockAlpha (ClrBusyAnn) SetPrgmEntry PrgmEntry? Do1st/2nd+:

36. The Display Description ( ) Clears right-shift annunciator. ( ) Sets alpha annunciator. ( ) Clears alpha annunciator. ( ) Sets alpha mode, annunciators, etc. ( ) Clears alpha mode, annunciators, etc. ( ) Clears the busy annunciator. ( ) Sets program-entry mode. ( flag ) Is program-entry mode set? ( :: <ob1> ; (PRG mode) ) ( :: <ob2> <rest> ; (no PRG mode) ) If in program mode, executes the next object after it. If not in program mode, executes the rest of the stream starting at the second object after it. ( ) Sets algebraic-entry mode. ( ) Clears algebraic-entry mode. ( flag ) Is algebraic-entry mode set? ( flag ) Returns TRUE if immediate-entry mode (program and algebraic-entry modes cleared). ( ) Clears AlgEntry mode if set. ( ) Clears AlgEntry mode if set and sets ProgramEntry mode.

25719 2571E 256EA 25EDF

SetAlgEntry ClrAlgEntry AlgEntry? ImmedEntry?

25E74 25E75

?ClrAlg ?ClrAlgSetPr

36.6. Reference

279

36.6.7
Addr. 2F384 2F36C 2F383 2617F 2EED6 2F352 2F36B 2F385 2F31D 26198

Window Coordinates
Name TOP8 Rows8-15 TOP16 WINDOWCORNER HBUFF_X_Y LEFTCOL RIGHTCOL TOPROW BOTROW WINDOWXY Description ( HBgrob #x1 #y #x1+131 #y1+8 ) Returns coordinates of rst status line. ( HBgrob #x1 #y1+8 #x1+131 #y1+16 ) Returns coordinates of second status line. ( HBgrob #x1 #y1 #x1+131 #y1+16 ) Returns coordinates of status area. ( #x #y ) Gets coordinates of corner of window. ( HBgrob #x #y ) Returns current grob and window coordinates. ( #x ) Gets x-coordinate of left column. ( #x ) Gets x-coordinate of right column. ( #y ) Gets y-coordinate of top row. ( #y ) Gets y-coordinate of bottom row. ( #x #y ) Sets corner coordinates.

36.6.8
Addr. 26193 26184 26189 2618E 2F370

Scrolling the Display


Name WINDOWUP WINDOWDOWN WINDOWLEFT WINDOWRIGHT 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 Addr. 2F36D Name SCROLLDOWN

36. The Display Description ( ) Moves display one pixel down, checks for corresponding key being pressed. ( ) Moves display one pixel left, checks for corresponding key being pressed. ( ) Moves display one pixel right, checks for corresponding key being pressed. ( ) Jumps to top of display. ( ) Jumps to bottom of display. ( ) Jumps to left of display. ( ) Jumps to right of display. ( flag ) Is window at the top? ( flag ) Is window at the bottom? ( flag ) Is window at the left? ( flag ) Is window at the right?

2F36E

SCROLLLEFT

2F36F

SCROLLRIGHT

2F34A 2F347 2F348 2F349 2F38D 2F38A 2F38B 2F38C

JUMPTOP JUMPBOT JUMPLEFT JUMPRIGHT WINDOWTOP? WINDOWBOT? WINDOWLEFT? WINDOWRIGHT?

36.6.9
Addr. 2F21D 2F21E

Displaying Objects
Name ViewObject ViewStrObject Description ( ob ) ( flag $ F ) Flag decides if it should be possible to toggle TEXT/GRAPH. ( flag grob F ) Flag decides if it should be possible to toggle TEXT/GRAPH.

2F21F

ViewGrobObject

36.6. Reference Addr. 25F12 Name sstDISP

281 Description ( ob ) Displays ob in status line. Used for single stepping during debugging. ( grob ) Launches PICT environment. ( #x #y ) Internal PVIEW, displays PICT starting at the given coordinates.

0C1007 2EF61

SCROLLext WINDOW#

36.6.10
Addr. 25EB4 25FB8 25EAB 25FBD 25EAC 25FC2 25FC7 25FCC 261F7 25FD1 25FD6

Displaying Text
Name DODISP DISPROW1 DISPROW1* DISPROW2 DISPROW2* DISPROW3 DISPROW4 DISPROW5 DISPROW6 DISPROW7 DISPROW8 Description ( ob %row ) Displays any object in specied row. ( $ ) aka: DISP@01, BIGDISPROW1 ( $ ) Displays relative to window corner. ( $ ) aka: DISP@09, BIGDISPROW2 ( $ ) Displays relative to window corner. ( $ ) aka: DISP@17, BIGDISPROW3 ( $ ) aka: DISP@25, BIGDISPROW4 ( $ ) ( $ ) ( $ ) ( $ ) May not be possible depending on the size of the font and whether the menu is on or off. ( $ ) May not be possible depending on the size of the font and whether the menu is on or off. ( $ ) May not be possible depending on the size of the font and whether the menu is on or off.

25FDB

DISPROW9

25FE0

DISPROW10

282 Addr. 25FB3 25EBC Name DISPN Disp5x7

36. The Display Description ( $ #row ) aka: BIGDISPN ( $ #start #max ) Displays string on multiple lines, starting at #start and no using more than #max rows. New lines must be manually specied. Segments longer than 22 characters are truncated and appended with "...". ( $ ) Displays message in status area using two lines. ( $ ) DISPSTATUS2 and freeze status area. ( $ ) Displays $ in menu grob using minifont. ( $ ) Displays $ in menu grob using minifont and waits for a key. Then refreshes menu display. ( $ ) Displays $ in the last stack display row, just above the menu. ( $ ) Displays $ in the last stack display row. If menu is turned on it can cover displayed text. ( $ ) Displays message in status area, then restores it to normal. ( $ ) Displays message in a message box and beeps. Waits for OK to be pressed. ( $ flag ) Use the string to aks the user a question with yes/no in a choose box. ( $ ) Displays alert messagebox. ( $ ) Displays message, beeps and freezes status area.

25EAD

DISPSTATUS2

38C00 2EEFF 2F32B

(DISPST2&FREEZE) DispCoord1 DISPCOORD2

25FE5

DISPLASTROW

25FEA

DISPLASTROWBUT1

25ED4

FlashMsg

2EE61

FlashWarning

2F1A5

AskQuestion

02E002 2EE60

DoAlert DoWarning

36.6. Reference Addr. 007002 Name Ck&DoMsgBox

283 Description ( $ #x #y grob menu T ) Displays a message box with a grob in the upper left corner and the specied menu. The meaning of #x and #y is unclear. ( {} ) The messsage box menu, with just the OK key.

0040B1

MsgBoxMenu

36.6.11
Addr. 2621A 2625B 25F15 2620B 26288

Fonts
Name FONT> MINIFONT> >FONT >MINIFONT
StackLineHeight

26242

GetFontStkHeight

Description ( font ) Recalls system font. ( minifont ) Recalls the current minifont. ( font ) Sets system font. ( minifont ) Sets the current minifont. ( # ) Returns height of text grob minus size of header and menu. ( # ) Returns stack font height (used for display stack rows). aka: StackFontHeight

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 specied column: Word Str>Menu Id>Menu Stack and action ( #col $ ) Makes and displays a standard menu label. ( #col id ) Recalls id and displays standard or directory label, depending on the contents. ( #col grob ) Displays a grob as a menu label. ( #col :: ) Evaluates secondary and uses results to create and display appropriate menu label.

Grob>Menu Seco>Menu

The words below convert strings to the four different kinds of grobs available. All of them take a string and return a grob as arguments

284

37.1. Menu Format Word MakeStdLabel MakeBoxLabel MakeDirLabel MakeInvLabel Action Makes a black label (standard). Makes label with a box inside. Makes directory label (bar above). Makes white label (like in Solver).

285

37.1

Menu Format

A menu is either a list { MenuKey1 MenuKey2 ... MenuKeyN } or a program :: <Settings> { MenuKey1 MenuKey2 ... MenuKeyN } ; which returns such a list and optionally changes of the default menu properties installed by InitMenu. Each menu key can be any of the following: NullMenuKey KeyObj { LabelObj KeyProcNS } { LabelObj { KeyProcNS KeyProcLS } } { LabelObj { KeyProcNS KeyProcLS KeyProcRS } } LabelObj is the object to be displayed as the label. If it is a program with TakeOver as the rst command, it is evaluated with the x-position of the label on the stack and must return the argument(s) for the LabelDef progam (normally the x-position of the label and the object to display as a label). If you do not override the LabelDef command (most of the times you will not), then LabelObj can be any object, but genereally it is a string or a 21x8 grob. KeyProc is the action taken upon key press. It will be executed by a special executor which takes appropriate actions depending upon the object type. If KeyProc is a program with TakeOver as the rst command, it will override the normal executor. NS here means this is the action when the menu key is pressed unshifted (think of No-Shift). Similarly, LS and RS means the actions run when the key is pressed left- or right-shifted, respectively.

286

37. The Menu

37.2

Menu Properties

The menu system of the HP49 provides an amazing exibility. Besides the normal actions, a menu has many properties which dene the appearance of labels and the specic actions taken upon keypresses, actions to take when the context changes or a different menu is installed etc. The properties a menu carries are: Word MenuDef MenuKeys MenuRow LabelDef MenuRowAct ExitAction TrackAct ReviewKey MenuKeysNS MenuKeysLS MenuKeysRS BadMenu? Rebuild? Track? Stack and action The current menu. The menu keys in a list. The menu page. The label builder for menu. Action taken when menu row changes or when LastMenu is reinstalled. Action taken when menu changes. Normally this action saves the current menu as LastMenu. Action taken when the context (the current directory) changes. Action taken when REVIEW key (Rightshift DOWN) is pressed. Action taken when menu key is pressed. Action taken when menu key is pressed left-shifted. Action taken when menu key is pressed right-shifted. Must the menu be be redrawn? Has the menu row changed? If context has changed is there a prg to execute?

Examples for the TrackAct property are: SolverMenu has DoSolveMenu as TrackAct, because there might be another EQ variable to use. The Custom menu just restarts itself because the value of the CST variable may have changed. ( CstTrack = :: NoExitAction MenuDef@ InitMenu ; ) Most menu properties can be modied using supported entry points. Here is an example for doing so. The following program sets a modied VAR menu, which allows variables to be protected against being overwritten with a left-shifted menukey.

37.2. Menu Properties


1 :: 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 ;

287

10

15

20

25

This does several things: 1. Gets the normal VAR menu in order to pass it to DoMenuKey. 2. It modies the LabelDef property in a way that the protected variables will have an inverted label in the menu. 3. It modies the MenuKeyLS property in a way that it exits with an error message if the relevant variable is protected. The program in ID prtct is an ID selector which has the stack diagram ( id flag ) and must decide if a given ID should be protected. Here are some possibilities: 1. :: DROPTRUE ; All variables are protected

288 2. :: DROPFALSE ; No variables are protected

37. The Menu

3. :: ID>$ CAR$ CHR_% EQUAL ; Variables with names starting with "%" are protected. 4.
:: ID PROTECTED OVER EQUALPOSCOMP #0<> ; (all variables in the list) (stored in the variable) (PROTECTED are protected)

Note that if the variable prtct does not exist or does not follow the required stack diagram, the calculator may crash. You might want to modify the program to put in better protection against user errors. Also note that this only protects against storing using left-shift and a menukey. It will not protect against using the STO command or the ler, naturally.

37.3
37.3.1
Addr. 04A41

Reference
Menu Properties
Name GETDF Description ( #menukey ob ) Gets the denition of a menu key from THOUCHTAB. #menukey = #1..#6 ( #menukey ob ) Gets the denition of a menu key from THOUCHTAB. #menukey = #1..#6. With #7, get the executor. ( ) Sets the ag that the menu needs to be rebuild. ( #n ) Sets the menu row. #n is not the row, but the index of the rst menu key in that row, i.e. 1,7,13,. . . ( #n ) Recalls the index of the rst menu key in the current menu page. Returns 1 for the rst page, 7 for the second page, 13 for the third and so on.

04A0B

GETPROC

2580E 260B7

SetRebuild MenuRow!

260BC

MenuRow@

37.3. Reference Addr. 260A8 Name LastMenuRow!

289 Description ( #n ) Sets the row of the last menu. #n is not the row, but the index of the rst menu key in that row, i.e. 1,7,13,. . . ( #n ) Recalls the index to the rst menu key in the current row of the last menu. Returns 1 for the rst page, 7 for the second page, 13 for the third and so on. ( menu ) Recalls the current menu denition. menu is a MenuList or a program, or a Rompointer. ( menu ) Sets the denition of the last menu. menu is a MenuList or a program, or a Rompointer. ( menu ) Recalls the denition of the last menu. menu is a MenuList or a program, or a Rompointer. ( ) Stores row and denition of current menu as the last menu. ( % ) ( ob ) Stores ob as the RowAct menu property. ( ) Execute the program which is next in the runstream if the directory changes. Used by the VAR menu to set rst menurow when diretory changes, or by the CST menu to rebuild it.

260AD

LastMenuRow@

25845

MenuDef@

25908

LastMenuDef!

2590D

LastMenuDef@

25EFB

SaveLastMenu

25EDA 25863 25EE2

GetMenu% MenuRowAct! InitTrack:

290 Addr. 25877 Name LabelDef!

37. The Menu Description ( ob ) Store a program which displays a menu label. Prg has the stack diagram ( #col ob ) For example, the LIBS command uses the following program to make all menu label look like directories: :: DUPNULL$? ITE MakeStdLabel MakeDirLabel Grob>Menu ; During execution, INDEX@ will contain the menu key number. ( ob ob ) Set the action for left-shifted menu keys. The program receives the action part of the menu item as an argument, i.e. {ob-NS ob-LS ob-RS}. ( ob ob ) Set the action for right-shifted menu keys. The program receives the action part of the menu item as an argument, i.e. {ob-NS ob-LS ob-RS}. ( og ob ) Set the action for unshifted menu keys. The program receives the action part of the menu item as an argument, i.e. ob-NS or {ob-NS ob-LS ob-RS}. ( ob ) Recall the action for unshifted menu keys. ( ob ) Sets ob as MenuKeysNS, DoBadKey to LS & RS. ( {ob-NS ob-LS ob-RS} ? ) The content of MenuKeyLS for standard menus. ( ob-NS ? ) ( {ob-NS ob-LS ob-RS} ? ) The content of MenuKeyNS for standard menus.

2589F

MenuKeyLS!

258B3

MenuKeyRS!

2588B

MenuKeyNS!

25890 25EFC 25F02 25F03

MenuKeyNS@ SetKeysNS StdMenuKeyLS StdMenuKeyNS

37.3. Reference Addr. 27FED Name NullMenuKey

291 Description ( ) A placeholder for an empty menu key when dening menu lists. ( ob ) Store a program which is called with the review key (RS DOWN). The program has the stack diagram ( ) ( ob ) Store ob as exit action. ( ) Sets NOP as ExitAction. Mostly used to avoid that the menu is saved as the previous menu when a new Menu gets installed.

258C7

ReviewKey!

258EF 25EEF

(ExitAction!) NoExitAction

37.3.2
Addr. 275C6

Building Menus
Name TakeOver Description ( ) Override the default menu key executer. If this is the rst entry in a program, the program can be used in edit mode. When the rst in a program in the label slot of a menu key, the program is evaluated to get the label object (most likely a grob). ( ) :: TakeOver ; ( ob ) Quotes next object, and also provides TakeOver. The disassembly is :: TakeOver 'R ; Normally this is used like this: :: MenuMaker menu InitMenu ; ( menu ) menu is {} or :: settings {} ; Settings override the default settings installed by InitMenu. ( menu ) :: SetDA12NoCh InitMenu ;

275EE 27620

Modifier MenuMaker

25EE0

InitMenu

25EC6

DoMenuKey

292 Addr. 25EE1 25F00 Name InitMenu% StartMenu

37. The Menu Description ( %mnu.pg ) ( %0 ) ( menu #n ) #n is the index of the rst menu key on the page, use 1 for the rst page, 7 for the second etc. StartMenu does ExitAction (Previous menu!), sets the default menu properties and page. Then it evaluates menu, stores result to MenuKeys and executes SetThisRow. ( ) Builds a new TOUCHTAB, SetBadMenu. ( MenuKey1 .. MenuKeyN #n ) Builds new TOUCHTAB from menukeys.

25EFE 25EE8

SetThisRow LoadTouchTbl

37.3.3
Addr. 2EF66

Menu Display
Name SysMenuCheck Description ( ) Checks menu validity. If DA3NoCh? then nothing. If Track? then ?DoTrackAct@. If Rebuild? then SetThisRow. ( ) Redisplay the menu now if no key is waiting in the buffer. Even better is this: :: DA3OK?NOTIT ?DispMenu ; ( ) Displays the menu immediately. ( ) :: DispMenu.1 SetDAsValid ;

2DFCC

?DispMenu

2DFF4 2DFE0

DispMenu.1 DispMenu

37.3. Reference

293

37.3.4
Addr. 2E0D5 2E0F3 2E11B 2E107 25886

Displaying Menu Labels


Name Grob>Menu Str>Menu Id>Menu Seco>Menu DoLabel 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.

2E2AA 08E007

MakeLabel WRITEMENU

37.3.5
Addr. 25EA6 25EFD 2589A 275FD 2F15B 25F2B 3EA01 2C2C0 25EFF

General Entries
Name CheckMenuRow SetSomeRow DoMenuKeyNS MenuKey CLEARMENU CHECKMENU (CST) nCustomMenu SolvMenuInit Description ( # # #' ) ( #n ) with Mod(n,FFFFFh)= 0. ( #n ) ( ) Takes NOB from Runstream. ( ) ( ) ( ob ) Evaluates ID CST. ( ) Installs the CST menu. ( ) Sets MenuKeyNS/LS/RS, ReviewKey and LabelDef properties needed by the Solver menu.

294 Addr. 25EC3 Name DoFirstRow

37. The Menu Description ( ) Sets the rst 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 specic 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
Term EditLine

Terminology
The terms below will appear often in this chapter. Meaning The string which is currently being edited. Also called Buffer and Command line. In the stack diagrams, we will use $buf for it. The position of the cursor in the Editline. Represented by a bint. In stack diagrams, is written as #cpos. The current line in the editor, i.e. the substring after the NEWLINE before the cursor up to the next NEWLINE character. When the text being edited is too long and/or wide, the screen of the HP49G shows only a part of the text: the window. When the cursor is moved, the window must be re-positioned to show the new position. A region in the buffer can be selected when the begin marker and the end marker are active. The selected substring is called $sel in the stack diagrams.

Cursor position Current line

Editor window

Selection

295

296 Term Word-start

38. Programming the HP49 Editor Meaning The beginning of a word, a position in a string where the char before is SPACE or NEWLINE, and the char after is a non-white character. Several commands deal with wordstart positions, called #ws in the stack diagrams below. The HP49G can show text in different fonts and styles. In order to switch between fonts and styles, special markers are inserted into the text to indicates a change in font or style. These 3-character sequences are not visible, but they count in string length and in cursor position. Some Editor commands are aware of these strings and do complicated computations to cut and paste text with attributes. This of course makes these commands slower than they could be. If you do not use fonts and styles, you need not to worry about all this.

Invisible chars

38.2

Examples

For information on the specic entries used in the examples below, consult the Reference section below. 1. Select the current line and copy it onto the clipboard.
1 :: TakeOver CMD_END_LINE RCL_CMD_POS CMD_STO_FIN CMD_DEB_LINE RCL_CMD_POS CMD_STO_DEBUT CMD_COPY ; (goto end of line) (recall position) (store as marker) (beginning of line) (recall position) (store as marker) (copy to clipboard)

10

This can be done shorter by using the builtin command SELECT.LINE command. The following is equivalent to the above.
1 :: TakeOver

38.2. Examples
SELECT.LINE CMD_COPY 5 ;

297

2. Insert a :: ; template on a single line and position the cursor between :: and ;.
1 :: TakeOver ":: ;" CMD_PLUS CMD_BAK CMD_BAK ;

3. Insert a multi-line :: ; template and position the cursor with extra indentation on the second line.
1 :: TakeOver "::\0A\0A;" CMD_PLUS CMD_UP SPACE$ CMD_PLUS ;

(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 ; (newline followed by star) (find that) (if successful) (drop #end) (correct to move over NL) (set new cursor position) (drop the search string)

10

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 nd the word fragment before the cursor. Here is how this can be done:
1 :: RCL_CMD RCL_CMD_POS DUP GET.W<#1+SWAP SUB$ ; (recall EditLine) (current position) (arg needed by GET.W<-) (position of word start) (prepare args for SUB$) (get the substring)

6. Change the indentation of the current line to #N spaces. #N is a bint expected on stack level 1. The command leaves empty lines and lines starting with a * alone.
1 :: Blank$ CMD_DEB_LINE RCL_CMD RCL_CMD_POS #1+ SUB$1 BINT42 OVER#=case :: 2DROP CMD_DOWN ; BINT32 >#?SKIP :: CMD_END_LINE RCL_CMD_POS CMD_DEB_LINE DO>Skip RCL_CMD_POS #<ITE DROPRDROP DoFarBS ; CMD_PLUS CMD_DEB_LINE CMD_DOWN ; (make the indentation str.) (goto beginning of line)

10

(look at first char in line) (ASCII code of *) (line starts with *?) (cleanup, ) ( next line & exit) (line starts with nonwhite ch) (line starts with whitespace:) (remember end of line position) (back to beginning of line) (jump to next word)

15

20

(if already in next line: Exit) (kill whitespc before 1st word) (insert spaces) (back to beginning of line) (next line)

25

38.3. Executing External Commands in the Editor

299

38.3

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 rst entry in the secondary or the command will not execute in the editor. Here is a simple example for an InputLine environment which denes an initial menu with two commands to select the current line and to clear the EditLine. For more information on InputLine, see Chapter 31.
1 :: "Edit this!" "" zero zerozerozero { { "SLINE" :: TakeOver SELECT.LINE ; } { "CLEAR" :: TakeOver DEL_CMD ; } } ONE TRUE ZERO InputLine ;

(prompt) (initial string) (cursor position) (modes)

(program to select line)

10

15

(program to clear EditLine)

20

25

(initial menu line) (abort flag) (parse) (and GO!)

300

38. Programming the HP49 Editor

38.4
38.4.1
Addr. 257A2 2EEED 2F196

Reference
Status
Name EditLExists? NoEditLine? RCL_CMD Description ( flag ) Does an EditLine exist? ( flag ) Does no EditLine exist? ( $ ) Returns a copy of the current command line to the stack. Same as EDITLINE$. ( $ ) Returns a copy of the current command line to the stack. Same as RCL_CMD. ( $ ) Similar to RCL_CMD, but if there is not enough memory to copy the EditLine to the stack, it will move the current EditLine into TEMPOB. Of course, this will delete the current EditLine. ( # ) Recalls the current cursor position. ( # ) Recalls the current cursor position. ( # ) Recalls the current cursor row (line). ( chr ) Returns the character under the cursor. At the end of the le, returns CHR_00. ( flag ) Checks if the cursor is at the end of a line or at the end of the le. Works by checking the current character against newline and CHR_00. ( # ) Column of the left display window edge. ( # ) Cursor column relative to left edge of display window.

2EEEB

EDITLINE$

2F197

RCL_CMD2

2EF87 26585 26594 2F158

RCL_CMD_POS CURSOR@ (CURSOR_PART) (THISCHAR)

2EEEA

CURSOR_END?

264CC 26030

FIRSTC@ CURSOR_OFF

38.4. Reference Addr. 2EF91 Name CAL_CURS_POS

301 Description ( #l #c # ) Computes a position in the current EditLine from line and column number. The result can be used by STO_CURS_POS to move the cursor to that location. If #line is larger than the number of lines in the EditLine, computes the position of the last line. ( #l #c # ) Similar to CAL_CURS_POS, but will ignore invisible characters. The result can be used by STO_CURS_POS_VIS to move the cursor to that location. ( $ ) Recalls a string with current editor settings. Can be used together with STO_CMD_MODE to save and restore the state of the EditLine, when temporarily leaving the editor with HALT or when calling a program which must temporarily change settings. ( $ ) Stores a mode string similar to the one obtained by RCL_CMD_MODE.

2EF90

CAL_CURS_POS_VIS

2F199

RCL_CMD_MODE

2F198

STO_CMD_MODE

38.4.2
Addr. 2EF74

Inserting Text
Name CMD_PLUS Description ( $ ) Inserts string at current cursor position in EditLine. ( $ ) Replaces entire current EditLine with new string. When there is not enough memory to copy the string on stack level 1, moves the string out of TEMPOB. You must be careful that the string is not referenced in any way. The cursor is moved to the end of the new string.

2F194

CMD_PLUS2

302 Addr. 2F195 Name CMD_PLUS3

38. Programming the HP49 Editor Description ( $ ) Same as CMD_PLUS2, but the cursor position is not changed. Useful when restoring a command line context after HALT. ( $ ) Inserts string at current cursor position in EditLine. ( $/chr ) Same as CMD_PLUS. ( $ ) Inserts string at current cursor position in EditLine. ( ) Takes a character or string from the runstream and inserts it. ( ) Takes a character or a string from the runstream, inserts it and moves the cursor back by one character. ( ) Turns insert mode on. In insert mode, new characters do not overwrite old ones. ( ) Toggles the insert/overwrite ag. ( flag ) Returns TRUE if insert mode is active.

2EF97

InsertEcho

2EEE4 2F11C

Echo$Key Echo$NoChr00

25EC1

DoDelim

25EC2

DoDelims

25795

INSERT_MODE

2577F 25790

(TogInsert) INSERT?

38.4.3
Addr. 2EF82

Deleting Text
Name CMD_DEL Description ( ) Deletes next char in Editor. Same as LS+DEL. If you hold down BS while this entry is executed, the HP49G will think you have pressed the key and want to repeat it.

38.4. Reference Addr. 2EF81 Name CMD_DROP

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.

2EF95 2EEE7 2F2F0

DEL_CMD InitEdLine DO<Del

2F2F1

DO>Del

2F2F9

DODEL.L

2F2DD

DoFarBS

2F2DE

DoFarDel

304

38. Programming the HP49 Editor

38.4.4
Addr. 2EF8B

Moving the Cursor


Name STO_CURS_POS Description ( # ) Stores cursor position. Moves cursor to specied 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.

2EF8C

STO_CURS_POS2

2EF8D

STO_CURS_POS3

2EF8E

STO_CURS_POS4

2EF8F

STO_CURS_POS_VIS

2F378

SetCursor

38.4. Reference Addr. 2EF7C 2EF7B Name CMD_NXT CMD_BAK

305 Description ( ) Moves cursor to next char, like Right Arrow. ( ) Moves cursor to the left. Same as as Left Arrow. ( ) Moves cursor to the next line. Same as Down Arrow. ( ) Moves cursor to the previous line, like Up Arrow. ( ) Moves cursor to the beginning of line. Same as RS+LEFT. ( ) Moves cursor to the end of line. Same as RS+RIGHT. ( ) Moves cursor one page down, like LS+DOWN. ( ) Moves cursor one page left, like LS+LEFT. ( ) Moves cursor one page right, like LS+RIGHT. ( ) Moves cursor one page up, like LS+UP. ( ) Skips left to beginning of word. Same as the SKIP button in the editor TOOL menu. ( ) Skips right to the beginning of the next word. Same as the SKIP button in the editor TOOL menu. ( ) Goes to begin of selection (if active) or to beginning of EditLine. Same as BEG button in the editor TOOL menu.

2EF80

CMD_DOWN

2EF7F

CMD_UP

2EF7D

CMD_DEB_LINE

2EF7E

CMD_END_LINE

2EF7A 2EF77 2EF78 2EF79 2F2EE

CMD_PAGED CMD_PAGEL CMD_PAGER CMD_PAGEU DO<Skip

2F2EF

DO>Skip

2F2E4

DO>BEG

306 Addr. 2F2E5 Name DO>END

38. Programming the HP49 Editor Description ( ) Goes to end of selection. Same as the END button in the editor TOOL menu. When there is no selection, does not move. ( ) Brings up the CHOOSE-box with labels in the EditLine. Same as the LABEL button in the editor TOOL/GOTO menu.

2F2E6

GOTOLABEL

38.4.5
Addr. 2EF83

Selection, Cut and Paste, the Clipboard


Name CMD_STO_DEBUT 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.

2EF84

CMD_STO_FIN

2EF85

RCL_CMD_DEB

2EF86

RCL_CMD_FIN

2F2DC

ClearSelection

2EF93

VERIF_SELECTION

2EF8A

CMD_COPY

38.4. Reference Addr. 2EF88 Name CMD_CUT

307 Description ( ) Cuts string. Really is "delete", does not copy to kill buffer. So a "normal" CUT would be :: CMD_COPY CMD_CUT ; ( $ ) Puts the selection as a string on the stack. This command is font/style aware. It is recommended not to use it because it may get the wrong text style if the cursor is not repositioned to the beginning of the selection rst. If you don't use fonts, :: RCL_CMD RCL_CMD_DEB RCL_CMD_FIN SUB$ ; does something similar. ( $ ) Pastes from stack with treatment of fonts and styles. Inserts the string on stack level at the cursor position. It can insert normal text right in the middle of bold test etc. If you don't use styles or different fonts, CMD_PLUS is probably faster. ( ) Selects current line, position cursor at beginning of line. Selection does not include the NEWLINE char at the end of the line. ( ) Selects current line, position cursor at end of line. Selection does not include the NEWLINE char at the end of the line. ( $ ) Stores string to Clipboard. ( $ ) Recalls Clipboard contents to stack. ( ) Clears the Clipboard. ( flag ) Is there anything on the Clipboard?

2F2FA

CMD_COPY.SBR

2EF94

PASTE.EXT

2F2E1

SELECT.LINE

2F2E2

SELECT.LINEEND

2A085 2A095 2A0A5 2A0B5

(Clipboard!) (Clipboard@) (Clipboard0) (Clipboard?)

308

38. Programming the HP49 Editor

38.4.6
Addr. 2F2F3

Search and Replace


Name GET.W-> 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 ag. This function respects the setting of the internal ag 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.

2F2F4

GET.W<-

2F2F2

FindStrInCmd

2F2E8

DOFIND

2F2EA

DONEXT

2F2E9

DOREPL

2F2EB

DOREPLACE

38.4. Reference Addr. 2F2EC Name


DOREPLACE/NEXT

309 Description ( ) Replaces current match and move to next match. Same as the R/N button in the editor TOOL/SEARCH menu. ( ) Replaces all matches in buffer. Same as the ALL button in the editor TOOL/SEARCH menu. ( ) Like REPLACEALL, but does not update the screen. Much faster this way.

2F2ED

REPLACEALL

2F2FC

REPLACEALLNOSCREEN

38.4.7
Addr. 2F2DF

Evaluation
Name EditSelect Description ( ) Edits the current selection. Opens the editor with the selection only. You can then edit the selection. After pressing ENTER the edited text is inserted back into the previous editing environment. ( ) Evaluates the current line and replace it with the result of the evaluation. Similar to EVAL.SELECTION, but without the need to select the line rst. ( ) Evaluates the current selection and replace it with the result of the evaluation. Same as the EXEC button in the editor TOOL menu.

2F2E3

EVAL.LINE

2F2FB

EVAL.SELECTION

310 Addr. 2F2F8 Name EXEC_CMD

38. Programming the HP49 Editor Description ( cmd algflag obsel ) Runs a command on the selection in the Editline. Takes two arguments: the command to run and a ag which says how to compile the selection before the command is applied. If the ag is TRUE, and ALG mode in on, the ALG compiler is used and the DOTAG :: xEVAL prologue of the result is removed. Use this if the result is to be edited by another editor. The selection is left on stack level 1 as an object. ( ob ) Saves current user interface, evaluate ob and restore the user interface. Can be used to run applications from inside another application.

0B954

(RunInNewContext)

38.4.8
Addr. 2EEE9

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 2F1AF Name ViewLevel1 AlgObEdit

311 Description ( ob ob' ) Edits the object in level 1 ( ob ob' ) Used instead of ViewLevel1 if in Algebraic mode. Does not execute STARTED and EXITED. ( ob ob' ) Evaluates the next object in the runstream, which usually in an editing command like ObEdit. When the evaluation returns FALSE, the original object which was saved in a temporary variable is restored to the stack. When the evaluation returns TRUE, the TRUE is removed from the stack. ( ob ob' ) ( ob ob' T ) ( ob F ) Edits object. When the user cancels, only FALSE is returned. Otherwise the changed object along with TRUE is returned. ( symb symb' T ) ( symb F ) Opens the equation editor to edit the expression. If exited by ENTER, returns new expression and TRUE. If exited by CANCEL, returns just FALSE.

2B2F2

(CallEditCmd:)

2EEE5 2F1AE

EditLevel1 ObEdit

011004

EQW3Edit

38.4.9
Addr. 25ED2 2EF73

Miscellaneous
Name EditMenu ?Space/Go> Description ( {} ) Returns the Editor menu. ( ) Inserts a SPACE character unless there is already one before the cursor position. Use this if you want to make sure the next stuff echoed is separated by at least one space from the word preceding it.

312 Addr. 2EF76 Name


AddLeadingSpace

38. Programming the HP49 Editor Description ( $ $' ) Adds a leading space to the string on level1 if it does not start with a space and if the cursor in the editor is after a non-white character. So :: "DUP" AddLeadingSpace AddTrailingSpace CMD_PLUS ; inserts DUP and makes sure it will be surrounded by spaces. ( $ $' ) Adds a trailing space to the string on level1 unless the string already ends with a space. ( #pix ) Returns the number pixel rows occupied by visible part of the EditLine. ( ) Displays the info screen about the Editline. Same as the INFO button in the editor TOOL menu. ( # ) Returns the ID (as a system binary) of the font used for the character under the cursor. ( ) Tells the next CMD_PLUS call not to update the display. For speed, if you want to do more insertion before the user needs to see it. ( ) Redisplays the command line. ( ) Redisplays the command line if necessary.

2EF75

AddTrailingSpace

2EF9A

CommandLineHeight

2F2DB

DOTEXTINFO

2F2F6

GET_CUR_FONT.EXT

2EF96

NO_AFFCMD

2F19E 2F19F

DispCommandLine ?DispCommandLine

38.4. Reference Addr. 2F2F7 Name PUT_STYLE

313 Description ( # ) Changes the style at point. If the selection is active, changes the style of the text in the selection. Otherwise changes the style of text typed subsequently. Takes a BINT from the stack which is the number of the style. In think the ITALI button in the editor TOOL/STYLE menu could be implemented with the following program: :: ERRSET PUT_STYLE ERRTRAP ERRJMP ; PUT_STYLE does not ABND its temporary environment, so you need the ERRTRAP construction to work around this bug. ( # ) Changes the font at point. Works similar to the PUT_STYLE command. ( ) Pops up the CHOOSE box to select a font. Same as the FONT button in the editor TOOL/STYLE menu. ( ) at cursor Views the grob currently edited in the Editline near the cursor. If the EditLine contains GROB 10 10 FFFFFF... move the cursor to the "1" of the rst "10". Then this entry point will display the grob.

2F2F5

PUT_FONTE

2F2E7

SELECT.FONT

2F2E0

ViewEditGrob

314 Addr. 2EF92 Name XLINE_SIZE?

38. Programming the HP49 Editor Description ( ob flag ) Checks if the cursor is outside the current line. In the HP49G editor, you can move the cursor further to the right than the line length, without actually making the line longer. The line gets extended only if you actually insert text or use CMD_DEL to catch to following line to the position. This entry returns TRUE if it is not on or before the newline. Note that it takes an arbitrary object from the stack rst - so put something there before calling it. ( {} ) Returns the DEL menu key. ( {} ) Returns the DEL menu key. ( {} ) Returns the SKIP menu key. ( {} ) Returns the SKIP menu key. ( ) :: InitEdLine InitEdModes ; ( ) :: DEL_CMD ; ( ) ( $ ) Calls CMD_STO if history is on. ( $ ) Adds string to the list of the last 4 commands, accessible with the CMD key.

27F47 27F9A 27EAF 27EFB 2EEE6 2EEE7 2EEE8 2F05E 2F326

<DelKey >DelKey <SkipKey >SkipKey InitEd&Modes InitEdLine InitEdModes SaveLastEdit CMDSTO

Chapter 39 Plotting
The commands in this chapter deal with aspects related to plotting. Entries here deal primarily with the PPAR variable, that contains the parameters used in plotting. This variable is a list with the following parameters: { (xmin , ymin ) (xmax , ymax ) indep res axes type depend} This is the meaning of each of the parameters: Parameter (xmin , ymin ) (xmax , ymax ) indep res axes Description A complex number representing the coordinates of the lower left viewing range. A complex number representing the coordinates of the upper right viewing range. The independent variable. Resolution. A number that represents the interval between the plotted points. A complex number that represents the coordinates of the intersection of the axes. It can also be a list representing this coordinate and many other details, which are not described in this book. The name of the (user) command that species the plot type. Dependent variable. Default value (6.5, 3.1) (6.5, 3.2) X 0 (0 , 0 )

type depend

FUNCTION Y

315

316

39. Plotting

39.1
Addr. 2F162

Reference
Name CHECKPICT Description ( ) Checks size of GBUFF. If it is smaller than 131x64 sets GBUFF back to its default size (131x64). ( xPICT ) Checks for user word xPICT on level 1. Errors (SETTYPEERR) if there is another object. ( xPICT grob ) Does CKPICT, then recalls GBUFF and does TOTEMPOB. ( {} ) Creates the default PPAR variable in the current directory and returns its value. ( {} ) Recalls contents of PPAR in current path to stack. Creates PPAR in current directory if non-existent. Errors "Invalid PPAR" if existing PPAR is invalid. ( # ob ) Extracts the #th item from PPAR. No error checking! ( % ) Recalls XMIN from the PPAR list if existent. If not, the default PPAR is created in the current directory. ( % ) Sets a new value for XMIN. PPAR is created if necessary. ( % ) Recalls XMAX from the PPAR list if existent. If not, the default PPAR is created in the current directory. ( % ) Sets a new value for XMAX. PPAR is created if necessary.

2EF06

CKPICT

2F258

PICTRCL

2F355

MAKEPVARS

2F163

CHECKPVARS

2F33D

GETPARAM

2F0FF

GETXMIN

2F366

PUTXMIN

2F0FE

GETXMAX

2F365

PUTXMAX

39.1. Reference Addr. 2F100 Name GETYMIN

317 Description ( % ) Recalls YMIN from the PPAR list if existent. If not, the default PPAR is created in the current directory. ( % ) Sets a new value for YMIN. PPAR is created if necessary. ( % ) Recalls YMAX from the PPAR list if existent. If not, the default PPAR is created in the current directory. ( % ) Sets a new value for YMAX. PPAR is created if necessary. ( C% C% ) Returns PMIN and PMAX. ( ID ) Internal xINDEP if the arg is an ID. ( {} ) Internal xINDEP if the arg is a list. ( id ) Recalls the independent variable. If a list, extract rst element. :: GETINDEP DUPTYPELIST? ?CARCOMP ; ( id ) ( {} ) Recalls the independent variable eld in PPAR. ( name ) Recalls the plot type using GETPARAM. ( name ) Sets a new plot type. PPAR is created if necessary. ( % ) Recalls the plot resolution using GETPARAM. ( % ) Set new plot resolution. PPAR is created if necessary. ( % %' ) Recalls the plot scale parameters.

2F368

PUTYMIN

2F10E

GETYMAX

2F367

PUTYMAX

2F107 2EEF2 2EEF3 2F0E8

GETPMIN&MAX PUTINDEP PUTINDEPLIST INDEPVAR

2F106

GETINDEP

2EEF5 2EEF6

GETPTYPE PUTPTYPE

2F10D 2EEF4

GETRES PUTRES

2F33E

GETSCALE

318 Addr. 2EEF1 2EEEF 2EF60 Name PUTSCALE AUTOSCALE DOGRAPHIC

39. Plotting Description ( % %' ) Set new plot scale. PPAR is created if necessary. ( ) Internal AUTO. ( ) Sets the scroll mode of PICTURE and is essentially the same as { } PVIEW. ( ob ) Recall the current equation, stored in the 'EQ' variable. ( #n ob T ) ( #n NULL$ F ) Get the #nth equation, if EQ is a list of equations. ( ob ) Recalls the contents of the EQ variable, errors if it does not exist. ( ob ) Stores ob into the variable EQ. ( xPICT ) If object in level one is xPICT, erases the graphic display. Otherwise, errors. ( ) Moves to center of graphics display ( { hxs hxs' } C% ) Converts a list of two hex strings into a complex number. Used for plotting coordinates. Inverse operation is DOC>PX. ( C% { hxs hxs' } ) Converts a complex coordinate point into list of two HXS numbers. Inverse operation is DOPX>C.

25ECF

EQUATION

2F339

GetEqN

25EB5

DORCLE

25EB6 2F297

DOSTOE XEQPURGEPICT

2F105 2EF01

GDISPCENTER DOPX>C

2EF02

DOC>PX

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 innite 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 les1 of ALG48 and ERABLE. The problem with this approach is that in the source, the different entries are not fully ordered according to functionality. Rather, each source le handles a certain area of CAS commands, and many utility routines are included inside the same le. For this reason there are several different locations where for example metaobject handling routines may be found. There are even similar such routines (which seem to do the same thing) in different les. We have made a signicant effort to reorder the entries by functionality, but we realize that we have only partially succeeded. A deeper knowledge of the CAS and its internals is needed to complete this work. A full documentation of the CAS should also contain extensive material about the internal representation of CAS objects, and many examples how to use these commands. Let us hope that Bernard Parisse will one day nd time to fully document the HP49G CAS internals. For the time being we include a slightly edited version of a document he provided to us, which introduces some important aspects of the CAS. The reminder of this part will then just be a reference list of entries.
1

actually, from a condensed version of the routine headers provided to us by Bernard Parisse

321

322

40. Introduction to the HP49 CAS

40.2

Symbolic Objects

The CAS manipulates symbolic scalars and vectors or matrices of these objects. Symbolic scalars have 3 representations, which we show in the following table using 2X as an example expression. user representation a SYMBOL object which is the composite object. For the example expression it looks like this: SYMBOL Z2 ID X x* ; the SYMBOL object exploded onto the stack. For '2*X', these are the 4 objects Z2 ID X x* #4 on stack levels 4 to 1. polynomial coefcients (in the example: { 2 0 }) with respect to the list of variables ({ X }).

meta representation

list representation

Conversion from user to meta representation is done by SYMBINCOMP (a generalized INNERCOMP to handle non symbolic objects like integers). Meta representation is used to handle operations when rational normal form is not relevant. It is more efcient than symbolic representation because you do not have to explode and rebuild the symbolic objects, everything is done on the stack. Stack operations on metas are described in Chapter 12. Unary and binary operators are often the operator name prexed by addt (e.g. addtSIN). An example for a complex routine working on meta objects is CASCOMPEVAL. It does a COMPEVAL-like loop but with metas on the stack instead of symbolics. The list representation is used when the rational normal form is important. This is the case for integration of rational fractions, rational simplications, Laplace transformations, series expansions and similar operations. The rst step for the conversion is to nd the list of variables with respect to which the expression is rational. For example, sin(x) + y cos(x) + y (40.1)

is rational with respect to { sin(x) cos(x) y }. Given a symbolic or a list/array of symbolic objects, the user word LVAR, or the System RPL command LVARext, returns this list of variables. The conversion is then done as a quotient of 2 multivariate polynomials with respect to this list of variables, with this ordering. Gaussian integers are represented as secondaries with two elements:

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 dened as a list of coefcients that are polynomials themselves, constants (integer or Gaussian integer) or irrquads. Rational fractions built over these polynomials are represented as SYMBOL num deno x/ ; where num and deno are polynomials that are prime together (in exact mode). The main conversion routine to the list format is VXXLext. The main back conversion routine is R2SYM. There are several specialized routines to convert a list or meta of symbolic objects, or to convert a symbolic object into meta-representation, or from list format to the meta-representation of a symbolic object. These specialized routines are more efcient but more difcult to use. Rational operators on list objects are implemented (QAdd, QSub, QDiv, QMul, QNeg, RPext), as well as Euclidean divisions with specializations e.g. for integers or Gaussian integers.

40.3

A Few Examples

In the following examples, the comments in each line represent the objects on the stack after the current command. Rational simplication of a symbolic object might be coded as
1 :: FPTR2 ^LVARext FPTR2 ^VXXLext FPTR2 ^R2SYM ; (symb) (symb lvar) (lvar n/d) (symb)

The scalar product of 2 symbolic vectors in list form


1 :: (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
FPTR2 ^QMul FPTR2 ^QAdd LOOP

40. Introduction to the HP49 CAS

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
Addr. 157006

Reference
Name SYMBINCOMP Description ( symb ob1 .. obN #n ) ( ob ob #1 ) ( {} {} #1 ) Explodes symbolic object into meta. Other objects are converted into one-object metas by pushing #1 into the stack. ( ob1 ob2 meta1 meta2 ) Does SYMBINCOMP for 2 objects. ( ob Lvar Q ) Converts object to internal form. The object can be a symbolic, a symbolic vector or a symbolic matrix. If the conversion was not successfull, vxxxlag is cleared. ( lvar ob ob ) Back conversion of a scalar object. ( Meta Meta ) Conversion of all elements of a meta object with respect to the variables in LAM1. ( n/d Z1/Z2 ) Conversion of a fraction which does not depend on any variables.

12A006 4D7006

2SYMBINCOMP VXXLext

400006 4D8006

R2SYM METALISTVXXL

4D9006

VXXLFext

325

326 Addr. 4DA006 Name VXXL1ext

41. Type Checking and Conversion Description ( n Z ) Conversion of an object which does not depend on any variables. ( ob Q ) Conversion of object with respect to Lvar in LAM1. ( Meta Q ) Converts symbolic meta to internal form (LAM1=Lvar). Set nocareag to avoid square root problems. ( Meta Q ) Converts symbolic meta to internal form (LAM1=Lvar). ( ob flag ) Is ob an irrquad? ( ob ob flag ) DUP, then TYPEIRRQ?. ( ob ob ) Checks that ob is a valid internal matrix element. Look for CK[]NCK for user matrix element. ( ob ob ) Errors if list contains secondaries or empty lists. ( ob ob ob ob ) Does CKFPOLYext on two objects. ( ob ob ) Suppresses SYMB if not needed.

4DB006

VXXL0

4DC006

VXXL2NR

4DD006

VXXL2

167006 168006 177006

TYPEIRRQ? DTYPEIRRQ? CKMATRIXELEM

18F006

CKFPOLYext

190006 19E006

CK2FPOLY CLEANIDLAM

Chapter 42 Integers
This chapter lists the functions that deal with Arbitrary Precision Integers, a new number type provided by the HP49 CAS. For a description of that type, see Chapter 5. You will notice that there are no entries for basic arithmetic operations on integers. This is because there are no specic such entries for integers. Instead, use the polynomial entries like QAdd, QMul, etc. listed in Chapter 46.

42.1
42.1.1
Addr. 2E0006 2DF006 392006 3B3006 3B4006

Reference
Built-in Integers
Name DROPZ0 DROPZ1 2DROPZ0 NDROPZ0 NDROPZ1 Description ( ob z0 ) ( ob z1 ) ( 2 1 z0 ) ( obn...ob1 #n z0 ) Replaces meta with Z0. ( obn...ob1 #n z1 ) Replaces meta with Z1.

42.1.2
Addr. 0EE006 0F5006

Conversion Functions
Name #>Z R>Z Description ( # Z ) Converts bint to zint. ( % z ) Converts real to zint. Do not call this entry if the number if not an integer. 327

328 Addr. 18D006 Name R2Zext

42. Integers Description ( % %%/Z ) Converts real to zint, or to long real if the number is not an integer. mode if number is not an integer. ( HXS Z / Error ) Checks if HXS is a proper zint number and trims it. ( $ z ) Converts decimal in a string into a zint. ( $ z T ) ( $ $ F ) If possible, converts string into a zint and returns TRUE. If not, keeps the original string and returns FALSE. ( $/#/hxs Z ) Checks for an integer. Converts strings, bints or hxs's to zints. Errors for other object types. ( ob ob' Z Z' ) Like CK1Z, but for two objects. ( ob ob' ob'' Z Z' Z'' ) Like CK1Z, but for three objects. ( symb zint ) ( symb :: zint zint' ; ) Check that a sym is a zint or Gauss integer, convert it. ( symb symb' zint zint' ) ( symb symb' :: zint1 zint2 ; :: zint3 zint4 ; ) Check that 2 sym are zint or Gauss integer, convert them. ( zint|c symb ) ( zint|c zint|c symb symb ) ( Z Z' ) Converts decimal Z to hex Z. ( Z '$Z' ) Converts Z to string number. The number is embedded in a symbolic to enable using it in algebraics.

0ED006

H>Z

0F2006 0F3006

S>Z S>Z?

184006

CK1Z

185006 186006 202006

CK2Z CK3Z CK&CONVINT

203006

CK&CONV2INT

205006 204006 0F4006 18E006

CONVBACKINT CONVBACK2INT Z>ZH Z2Sext

42.1. Reference

329

42.1.3
Addr. 101006

General Integer Operations


Name ZTrim 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 signicant 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 ag 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.

102006

ZAbs

50B006 0E0006

ZABS ZSQRT

3D0006 0DD006 105006

Mod ZMod ZNMax

106006

ZNMin

10D006 10E006

ZBits ZBit?

2B7006 2B8006

ZGCDext ZGcd

330 Addr. 3D6006 3D9006 07C007 Name IEGCDext INEGCD #FACT

42. Integers Description ( a b d u v ) Bezout for integers. d=au+bv=gcd(a,b). ( a b d u v ) ( # Z ) Calculates the factorial of an integer. Works ne for all numbers #0 - #FFFFF, although at some point you will get an out of memory error. ( z z! ) Factorial for long integers. ( z/% a+bi ) Internal PA2B2.

576006 215006

factzint PA2B2

42.1.4
Addr. 0C9006 0CA006 0CB006

Integer Factorization and Prime Numbers


Name ZFactor NFactor NFactorSpc 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 nd the factors in order of magnitude, thus the results will be sorted after full factorization has been achieved.

0CD006

SFactor

42.1. Reference Addr. 0CE006 Name SPollard

331 Description ( S S1 S2 ) Factors short integer into 2 parts using Pollard Rho algorithm. Trial division and primality tests should be done prior to calling this subroutine, otherwise an eternal loop is risked. The random number generator is modeled after the user level RAND command, although the starting value is different. ( N Lf ) Factors long integer. Brent-Pollard, with the assumption that trial division has been done already. When a small factor is found SFactor is called to get full short factorization. Since the factorization can potentially take a very long time, an execution time test is used to abort factoring very long integers (limit is 60s for each composite). The factors are sorted at exit. ( Za Z1 Z2 Zn #k Z ) Modular * + mod for Brent-Pollard factorization. Output is Z1*Z2+Za mod Zn repeated k times Note that k=0 and k=1 give the same result. Also Z1=Z2 makes no sense for k=0. All arguments are assumed to be positive. Za is assumed to be < 16. In some instances k can be a very high number, thus it might make sense to use Montgomery multiplication. ( Z flag ) Primality test for a positive integer. According to Pinch commercial software packages use only about 5-10 bases by default, maximum around 25. The latest versions usually implement a deterministic. ( Z flag ) Probabilistic primality test for a positive integer.

0CF006

BFactor

0D0006

BrentPow

0D1006

ZPrime?

0D2006

ZIsPrime?

332 Addr. 0D3006 Name SIsPrime?

42. Integers Description ( S flag ) Tests if positive short Z is prime. M-R test fails for integers 3, so we just test them separately at the start. For convenience lets dene 0 and 1 to be primes also. ( S flag ) Test if positive long Z is prime. ( Z #base Z flag ) Performs Miller-Rabin test for long positive integer. Returns TRUE if base witnesses composite. Else returns FALSE. ( Z Z' #n ) Remove factors of 2 from integer. #n is the power of two extracted from the number. The sign is also handled correctly, even though it is never required in ALG48 (absolute Z). ( Z flag ) Trial division primality test for a positive integer. works for Z 3 (return false for Z=2). ( Z Mf Z' ) Trial division of a positive integer. If Z' is one then full factorization was achieved. The long trial division is not too slow, since division by short integer is quite fast. The quotient is also checked so that a nal factor less than 20002 will also be automatically detected. ( Z Z' ) Returns next prime ( Z' > Z ). ( Z Z' ) Returns previous prime ( Z' < Z ).

0D4006 0D5006

BIsPrime? BRabin

0D6006

ZTrialDiv2

0D7006

ZTrialPrime?

0D8006

ZTrialDiv

0C7006 0C8006

Prime+ Prime-

42.1. Reference

333

42.1.5
Addr. 114007 115007 116007 187006

Gaussian Integers
Name
TYPEGAUSSINT? DTYPEGAUSSINT? DUPTYPEGAUSSINT?

CK1Cext

15D006

CXRIext

2B5006 4D5006

CGCDext CSQFFext

4D4006

SECOSQFFext

4D6006

SUMSQRext

518006

CNORMext

Description ( ob flag ) Checks if ob is Gaussian integer. ( ob ob flag ) Checks if ob is Gaussian integer. ( ob ob flag ) Checks if ob is Gaussian integer. ( ob flag ) Checks if object is integer or Gaussian integer. ( C Zre Zim ) Returns real and imaginary part of Gaussian integer. ( C2 C1 C ) GCD for Gauss integers. ( C { factor1 mult1 ... factn multn } ) Factorization of Gauss integers. This is not the complete factorization of C over Gauss integers since the GCD of the real part and imaginary part of c is factored only over R. ( :: x<< a b c x>> { fact1 mult1 ... factn multn } ) Factorization of irrquads and Gauss integers. ( Z Z C ) Returns a Gauss integer C so that |C|2=Z. Z must be 2 or so that Z=1 mod 4. If Z = 1 mod 4, "Z is not 1 mod 4" error. Z should be prime to ensure the existence of a solution. ( C |C|2 ) Square modulus of a Gauss integer.

334

42. Integers

42.1.6
Addr. 265C1 265C6 265BC 265D0 265B7 265CB 0F8006

Integer Tests
Name Z= Z<> Z< Z<= Z> Z>= QIsZero? Description ( Z Z' flag ) ( Z Z' flag ) ( Z Z' flag ) ( Z Z' flag ) ( Z Z' flag ) ( Z Z' flag ) ( Q flag ) Tests if Q is zero. Assumes list contains only lists or hexes!. ( Q Q flag ) Duplicates Q and tests if Q is zero. Assumes list contains only lists or hexes!. ( Z flag ) Tests if Z is Z1. ( Z Z flag ) Duplicates Z, and returns TRUE if Z is 1. ( Z Z flag ) Returns TRUE if Z is 2. ( Z flag ) Tests if Z is negative. ( Z Z flag ) Tests if Z is negative. ( Z Z flag ) Tests if Z is even. ( Z1 Z2 flag ) TRUE if |Z1|<|Z2|. ( z/% z flag ) Tests if Obj is an integer. ( z/% z flag ) Tests if Obj is a positive integer smaller than Zsmall. ( Obj Obj flag ) Tests if Obj is a strictly positive integer. ( Meta Meta flag ) Tests if Meta is an integer.

0F7006

DupQIsZero?

0FA006 0F9006 109006 0FC006 0FB006 10A006 107006 19A006 19B006

ZIsOne? DupZIsOne? DupZIsTwo? ZIsNeg? DupZIsNeg? DupZIsEven? ZNLT? OBJINT? OBJPOSINT?

19C006 198006

CKINT>0 METAINT?

42.1. Reference Addr. 199006 Name METAPOSINT?

335 Description ( Meta Meta flag ) Tests if Meta is a positive integer smaller than Zsmall. ( Z Z flag ) Tests if Z is short ( 64 bits).

0CC006

DupTypeS?

Chapter 43 Matrices
The CAS Symbolic Matrices are a new object on the HP49 used to represent matrices. Unlike the old array object present since the HP48, these matrices can have symbolic expressions inside them. It is also possible to have objects of different types inside the array. This kind of matrix is actually a composite object, and you can use the functions of Chapter 11 on them. 1 2 The following disassembly of the matrix should make it clear 3 4 how to create one using MASD, and why they are actually composites:
1 MATRIX MATRIX ZINT ZINT ; MATRIX ZINT ZINT ; ;

1 2

3 4

10

It should also be noted that most (if not all) the functions described below for dealing with symbolic matrices also work with lists of lists. The reason should be obvious: the structure of these matrices and a list of list is the same, only the prolog address changes. Some entries dealing with the old HP48 arrays, described in Chapter 10.1, also work with symbolic matrices.

336

43.1. Reference

337

43.1
43.1.1
Addr. 371006 372006 373006

Reference
Creating and Redimensioning Matrices
Name MATIDN MATCON MAKEARRY Description ( M/z/% M' ) Creates identity matrix. ( M ob [ob] ) Creates constant matrix from matrix. ( {#el} symb [] ) ( {#rows #cols} symb [[]] ) Creates constant matrix/array from ob type. ( {} M' ) Creates symbolic random matrix from dimensions. ( M M' ) Changes all elements of matrix to elements generated randomly. ( ob {} M ) Creates constant matrix from dimension and ob. ( #n #m prg M ) Fills a matrix of specied size using a program. prg must take two arguments and return one argument. On entry MAKE2DMATRIX provide the indexes as Z integers. ( #n #m prg M ) Creates matrix from size and program (with stack checking). prg must take 2 args and return 1 arg. On entry MAKE2DMATRIX provide the indexes as Z integers. ( #n #m prg meta-M ) Create meta-matrix from size and program (with stack checking). prg must take 2 args and return 1 arg On entry make2dmatrix provide the indexes as Z integers. ( M {} M' ) Changes size of a matrix, removing elements and/or adding zeros, as necessary.

345006

DIMRANM

344006

MATRANM

374006

OBJDIMS2MAT

375006

LCPROG2M

376006

MAKE2DMATRIX

377006

make2dmatrix

341006

MATREDIM

338 Addr. 342006 Name VRRDM

43. Matrices Description ( []/[[]] {} [] ) Vector Right ReDiMension: adds 0 to the right. ( meta #l meta-#l ) Meta Right ReDiMension: adds 0 to the right.

343006

VRRDMmeta

43.1.2
Addr. 16A006

Conversion
Name {}TO[] Description ( {} [] ) Converts from list-of-lists representation to matrix. No checks on the element type. ( {} [] ) ( {{}} [[]] ) ( ob ob ) Converts a symbolic list to a matrix. Does not check that matrix is a valid one. Use DTYPFMAT? to do that. ( [] {} ) Converts from matrix to list-of-lists. ( [] { } ) ( [[]] {{}} ) ( ob ob ) Converts a symbolic matrix to a list. ( [] [] ) ( [[]] [[]] ) Converts array to symbolic array if necessary. ( M1 M2 M1 M2 flag ) If one object is a symbolic array, converts both arrays to symbolic form. Returns TRUE for symbolic matrices and FALSE for numeric. ( M ob M ob flag ) If M is a numeric matrix and ob is not oat, converts matrix to symbolic form. Returns TRUE for symbolic and FALSE for numeric. ( []/[[]] {}/{{}} ) Converts normal array to list of lists; errors for symbolic arrays.

17A006

LIST2MATRIX

16B006 179006

[]TO{} MATRIX2LIST

17E006

ARRAY2MATRIX

175006

SAMEMATRIX

176006

SAMEMATSCTYPE

003007

ArryToList

43.1. Reference Addr. 17D006 Name MATEXPLODE Description ( [[ob1..obn]] ob1..obn [[ob1..obn]] )

339

43.1.3
Addr. 16C006 359006 16F006 170006

Tests
Name DUPNULL[]? NULLVECTOR? CKSAMESIZE DTYPENDO? Description ( ob ob flag ) Tests for a null array. ( V flag ) Returns true if vector is null. ( arry1 arry2 arry1 arry2 flag ) Tests if arry1 and 2 have the same size. ( ob ob flag ) Tests if object is a square symbolic matrix. Convert numeric array to symbolic matrix. ( ob ob flag ) Tests if object is a 2D matrix.

173006

2DMATRIX?

43.1.4
Addr. 320006 321006 322006 323006 324006 325006 326006 327006 328006 329006 32A006

Calculations with Matrices


Name MAT+ MADD MATMSUB VADD VSUB MAT* MMMULT MVMULT SCL*MAT 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 Addr. 32B006 335006 32C006 32D006 32E006 32F006 330006 332006 333006 334006 34E006 336006 337006 338006 339006 33A006 33C006 33D006 346006 347006 348006 349006 Name VPMULT MATSQUARE MAT MATCROSS MATDOT RNDARRY TRCARRY MAT/SCL MAT/ MATCHS MATINV MATCONJ MATRE MATIM MATTRACE MATTRN mattran mattrn MATDET MATRDET MATFNORM MATRNORM

43. Matrices Description ( V ob V' ) Multiplies vector by a scalar. ( M M*M ) ( M z/% M' ) Integral matrix power. ( [] []' []'' ) Vector product. ( V2 V1 ob ) Scalar product with checking. ( M % M ) Rounds array. ( M % M ) Truncates array. ( M ob M/ob ) Divides matrix by scalar. ( V M M-1*V ) "Divides" Vector by matrix. ( M -M ) ( M M-1 ) ( M M' ) ( M re[M] ) ( M im[M] ) ( M trace ) Matrix trace. ( M M' ) Matrix transposition and conjugation. ( M Meta-M' ) Transposes matrix, returns meta-matrix. ( Meta-M Meta-M' ) Transposes meta-matrix. ( M det ) Determinant, expanding all (not row reduction). ( M det ) Determinant using row reduction. ( M ob ) Frobenius norm. ( M ob ) Row norm.

43.1. Reference Addr. 34A006 174006 Name MATCNORM MATRIXDIM

341 Description ( M ob ) Column norm. ( ob # ) Returns symbolic matrix dimensionality of an object.

43.1.5
Addr. 34C006 34B006 34F006

Linear Algebra and Gaussian Reduction


Name MATREF MATRREF MATREFRREF 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.

367006

MATRIXRCI

368006

MATRIXRCIJ

350006 351006 352006

INXREDext METAMATRED METAPIVOT

354006 34D006

PIVOTFLOAT MATRANK

342

43. Matrices

43.1.6
Addr. 080007 0F4007

Linear System Solver


Name LINSOLV
SOLVEMETASYST

0F5007

REDUCEMETASYST

0F6007

REDUCEMETAPSYST

0F7007

SOLVECRAMER

355006 356006 357006

SYSText STOSYSText MAKESYSText

Description ( b a y ) Solves y'=ay+b. ( meta-M d meta-sol T ) ( meta-M F ) Solves linear system in meta representation. Meta-sol has been reduced to the same denominator d. ( meta-M meta->M' ) Reduces linear system in meta representation. ( meta-M meta-M' ) Reduces linear system in meta representation. Does not reduce last column of metamatr. This is useful to solve linear system with parameters in the last column. ( meta-M d meta-sol T ) ( meta-M F ) Solves cramer system. Meta-matr must be fully reduced. Meta-sol is reduced to the same denominator. d ag is FALSE if dimension do not match. ( M linc linc linc' res cas_p ) ( M2 M1 M2 list ) ( M_eq M_inc M_eq M lidnt flag ) Converts linear equations to a matrix and checks that equation are linear with respect to lidnt.

43.1.7
Addr. 35A006

Other Matrix Operations


Name FINDELN Description ( {} A # flag ) Returns index # of element {} in array.

43.1. Reference Addr. 35B006 Name PULLEL[S]

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.

35C006 35D006 17B006 33E006

BANGARRY PUT[] LENMATRIX MATSUB

340006

MATREPL

35F006

MATRIX>DIAG

360006

MATRIXDIAG>

361006 362006

la+ELEMsym INSERTROW[]

363006

insertrow[]

344 Addr. 364006 Name INSERTCOL[]

43. Matrices Description ( M V #i M' ) Inserts vector in symbolic matrix at col #i. Checks for 0 < #i < #n + 1, but does not check for matrix/vector size. ( M3 M2 #i M ) Inserts matrix2 in matrix3 starting from row #i. Checks for 0 < #i < #n+1, but does not check for matrix size. ( M3 M2 #i M ) Inserts matrix2 in matrix3 starting from row #i. Checks for 0 < #i < #n + 1, but does not check for matrix size. ( M #c #c' M ) Exchanges columns c and c' of a symbolic matrix. ( M #r #r' M ) Exchanges lines r and r' of a symbolic matrix. ( M % %' M' ) SWAP two rows in matrix. Internal version of xRSWP. ( M #r M' lr ) Extracts row #r from M. Checks boundaries. ( meta-M #r meta-M lr ) Extracts row #r from meta-matrix. Checks boundaries. ( M #c M cc ) Extracts column #r from matrix. Checks boundaries. ( meta-M #c #c' meta-M ) Exchanges columns c and c' of a meta-matrix. ( meta-M #l #l' meta-M ) Exchanges lines l and l' of a meta-matrix (or vector). ( M ) Stores matrix in 'MATRIX' in current directory.

365006

INSERT[]ROW[]

366006

INSERT[]COL[]

369006

MATRIXCSWAP

36A006 0AC003

MATRIXRSWAP SWAPROWS

36B006 36C006

MATRIX-ROW METAMAT-ROW

36D006

MATRIX-COL

36E006 36F006

METAMATCSWAP METAMATRSWAP

370006

STOMAText

43.1. Reference Addr. 378006 Name ADDMATOBJext

345 Description ( arry ob arry arry ) ( ob arry arry arry ) Used for addition of numeric matrix and symbolic object. ( v op V ) Applies unary op(v[i]) to get V[i]. ( V2 V1 binop V ) Works even if V2 and V1 do not have not the same dimension. ( V r P[r] ) Horner evaluation, where elements of V represent coefcients of a polynomial.

379006 37A006

VUNARYOP VBINARYOP

37B006

PEVAL

43.1.8
Addr. 37C006 37F006

Eigenvalues, Eigenfunctions, Reduction


Name MATEGVL MATEGV 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.

37E006

MADJ

380006

JORDAN

22D006 381006

FLAGJORDAN QXA

224006 382006

FLAGQXA AXQ

346 Addr. 225006 383006 226006 384006 227006 228006 Name FLAGAXQ GAUSS FLAGGAUSS SYLVESTER
FLAGSYLVESTER

43. Matrices Description ( M lidnt symb lidnt ) Internal AXQ. ( symb D P symb' ) Gauss reduction of quadratic form (symbolic). ( symb lidnt symb' ) Internal GAUSS. ( M D P ) Gauss reduction of a quadratic form (matrix). ( M P D ) Internal SYLVESTER. ( [[]] symb ) Internal PCAR.

PCAR

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
44.1.1
Addr. 125006 126006 127006 129006 12B006 12C006

Reference
Basic Operations and Function Application
Name x+ext x-ext x*ext x/ext xext EXPAND Description ( ob2 ob1 ob2+ob1 ) Symbolic addition, tests for innities. ( ob2 ob1 ob2-ob1 ) Symbolic subtraction, tests for innities. ( ob2 ob1 ob2*ob1 ) Symbolic multiplication, tests for innities. ( ob2 ob1 ob2/ob1 ) Symbolic division, tests for innities. ( ob power obpower ) Power. ( x y xy=exp[y*ln[x]] ) Power with simplications. If y is a fraction of integers, use XROOT instead. ( ob -ob ) Symbolic negation. ( ob -ob ) Symbolic negation.

4FB006 4FC006

QNeg RNEGext

347

348 Addr. 4FA006 4FE006 4FD006 500006 4FF006 501006 503006 505006 50D006 50A006 52A006 557006 553006 555006 51B006 51C006 Name SWAPRNEG RREext SWAPRRE RIMext SWAPRIM xREext xIMext RCONJext xABSext RABSext xINVext xSYMINV xSQext xSYMSQ SXSQRext XSQRext

44. Expression Manipulation Description ( ob2 ob1 ob1 -ob2 ) Does SWAP then symbolic negation. ( ob Re(ob) ) Symboloc real part. ( ob2 ob1 ob1 Re(ob2) ) SWAP, then RREext. ( ob Im(ob) ) Symbolic imaginary part. ( ob1 ob2 ob2 Im(ob1) ) SWAP, then RIMext. ( symb symb' ) Complex real part. Expands only + - * / . ( symb symb' ) Complex imaginary part. Expands only + - * / . ( ob Conj(ob) ) Symbolic complex conjugate. ( ob abs(ob) ) Symbolic ABS function. ( ob abs(ob) ) Internal ABS. Internal representation. ( ob 1/ob ) Symbolic inversion. ( symb 1/symb ) Symbolic inversion. ( symb sq(symb) ) Symbolic square. ( symb symb2 ) ( ob sqrt(ob) ) Does not take care of the sign. ( ob sqrt(ob) ) Tries to return a positive square root if nocareag is cleared. ( ob sqrt(ob) ) Symbolic square root, tests for 0 and 1. ( symb sqrt(symb) ) ( ob ln(ob) ) Symbolic LN with special handling for fractions. Does not use the internal representation.

52B006 552006 521006

xvext xSYMSQRT CKLN

44.1. Reference Addr. 522006 525006 Name xLNext EXPANDLN

349 Description ( ob ln(ob) ) Symbolic LN, without fraction handling. ( ob ln(ob) ) Symbolic LN using internal representation. Before switching to internal representation, test for ABS, 0 and 1 and, in real mode, test if ob=exp(x). ( ob ln(ob) ) Internal natural logarithm for a real argument. ( ob ln(ob) ) Internal complex natural logarithm. ( ob ln(ob) ) Internal natural logarithm for complex. ( y d n exp(y*n/d*i* ) ) Symbolic EXP, tests for 0, innity and i*k* /12 where k is an integer. Tests for d=1,2,3,4,6. ( ob cos(ob) ) Symbolic COS, tests for 0 and multiples of /12. Also tests if ob=acos(x) or ob=asin(x). ( ob cos(ob) ) ( ob acos(ob) ) Symbolic ACOS. Tests for 0, innity and tables. ( ob acos(ob) ) ( ob sin(ob) ) Symbolic SIN, tests for 0 and multiplies of /12. Also tests if ob=acos(x) or ob=asin(x). ( ob sin(ob) ) ( ob asin(ob) ) Symbolic ASIN. Tests for 0, innity and tables. ( ob asin(ob) ) ( ob tan(ob) ) Symbolic TAN. Tests for 0 and multiplies of /12. Also tests if ob=atan(x). ( ob tan(ob) ) ( ob atan(ob) ) Symbolic ATAN. Tests for 0, innity and tables. ( ob atan(ob) ) ( ob cosh(ob) ) Symbolic COSH. Tests for 0, innity and acosh(x). ( ob cosh(ob) )

528006 526006 527006 529006

REALLN CMPLXLN LNATANext xEXPext

52C006

xCOSext

536006 533006 53F006 52D006

xSYMCOS xACOSext xSYMACOS xSINext

538006 532006 53D006 52E006

xSYMSIN xASINext xSYMASIN xTANext

53A006 534006 541006 52F006 545006

xSYMTAN xATANext xSYMATAN xCOSHext xSYMCOSH

350 Addr. 54E006 550006 530006 543006 54B006 54D006 531006 547006 548006 54A006 55F006 561006 563006 565006 567006 569006 56B006 56D006 56F006 571006 572006 573006 575006 578006 128006 Name xACOSHext xSYMACOSH xSINHext xSYMSINH xASINHext xSYMASINH xTANHext xSYMTANH xATANHext xSYMATANH xSYMFLOOR xSYMCEIL xSYMIP xSYMFP xSYMXPON xSYMMANT xSYMLNP1 xSYMLOG xSYMALOG xSYMEXPM1 factorial facts xSYMFACT xSYMNOT x=ext

44. Expression Manipulation Description ( symb acosh(symb) ) Symbolic ACOSH. ( symb acosh(symb) ) ( ob sinh(ob) ) Symbolic SINH. Tests for 0, innity and asinh(x). ( ob sinh(ob) ) ( symb symb' ) Symbolic ASINH. ( symb asinh(symb) ) ( ob tanh(ob) ) Symbolic TANH. Tests for 0 and atanh(x). ( ob tanh(ob) ) Symbolic TANH. ( symb symb' ) Symbolic ATANH. ( ob atanh(ob) ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( symb symb! ) Symbolic factorial. ( symb symb! ) Symbolic factorial. ( symb symb! ) ( symb symb' ) ( ob2 ob1 ob2=ob1 )

44.1. Reference

351

44.1.2
Addr. 408006 40B006 40E006 412006 414006 41A006 41B006 41C006 41D006 41E006 41F006 420006 422006 424006 427006 42A006 42C006 42E006

Trigonometric and Exponential Operators


Name COS2TAN/2 SIN2TAN/2 TAN2TAN/2 COS2TAN SIN2TAN LNP12LN LOG2LN ALOG2EXP EXPM2EXP SQRT2LNEXP sqrt2lnexp TAN2EXP ASIN2LN ACOS2LN TAN2SC SIN2TC COS2ext 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(x2-1))+pi/2. ( symb symb' ) x ln(x+sqrt(x2-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 Addr. 431006 434006 437006 43C006 43D006 440006 442006 444006 446006 448006 44A006 44C006 44E006 450006 452006 454006 45A006 Name ATAN2ASIN ASIN2ATAN ASIN2ACOS ACOS2ASIN ATAN2LNext TAN2SC2 TAN2CS2 SIN2EXPext COS2EXPext SINH2EXPext COSH2EXPext TANH2EXPext ASINH2LNext ACOSH2LNext ATANH2LNext XROOT2ext LN2ATAN

44. Expression Manipulation Description ( symb symb' ) x asin(x/sqrt(x2+1)) ( symb symb' ) x atan(x/sqrt(1-x2)) ( symb symb' ) x /2-acos(x) ( symb symb' ) x /2-asin(x) ( symb symb' ) x i/2*ln((i+x)/(i-x)) ( symb symb' ) x (1-cos(2x))/sin(2x) ( symb symb' ) x sin(2x)/(1+cos(2x)) ( symb symb' ) x (e(i*x)-1/e(i*x))/(2i) ( symb symb' ) x (e(i*x)+1/e(i*x))/2 ( symb symb' ) x (ex-1/ex)/2 ( symb symb' ) x (ex+1/ex)/2 ( symb symb' ) x (e2x-1)/(e2x+1) ( symb symb' ) x ln(x+sqrt(x2+1)) ( symb symb' ) x ln(x+sqrt(x2-1)) ( symb symb' ) x ln((1+x)/(1-x))/2 ( symb1 symb2 symb' ) x y exp(ln(y)/x) ( symb symb' ) x ln(x)

44.1. Reference

353

44.1.3
Addr. 45B006

Simplication, Evaluation and Substitution


Name VAR=LIST 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 nd 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 vxxlag 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 )

464006

SYMBEXEC

465006

MEVALext

466006

CASNUMEVAL

467006 468006

CASCOMPEVAL REPLACE2BY1

469006

NR_REPLACE

46B006 46C006 11A007

CASCRUNCH
APPROXCOMPEVAL ALGCASCOMPEVAL

354 Addr. 297006 Name SLVARext

44. Expression Manipulation Description ( Lvar Lvar' ) Simplies all elements of the list that are supposed to be variables. ( symb symb' ) Simplies one object like EVAL. ( symb symb' ) Simplies one object like EXPAND. Object must be a symbolic, a real or a complex number. ( symb symb' ) Simplies one object like EXPAN. Object must be symb/real/cmplx. ( ob ob' ) Simplies variable. ( inf sup fcn var int(inf,sup,fcn,var) ) ( ob1..obn #n ob id[] ) Simplication of user functions. Tests for derivative of user functions. Ob must be an id, a symbolic, a secondary or a romptr. ( V1..Vn #n fcn f[] ) Evaluates a user function with stack checking. ( ob list ob' ) Executes the WHERE operator. ( ob1 ob2 ob1' ob2' ) Simplies two objects in internal representation. Checks that o2 is not a complex or an irrquad because decomposition of the corresponding fraction with larg would generate a "Try to recover Memory". ( o1 o2 gcd o1/gcd o2/gcd ) Divides o1 and o2 by gcd. ( a b g a'' b'' ) Calculates g = gcd(a,b) and a''=a/g and b''=b/g. ( symb symb ) Transcendental simplications. Converts only sqrt and XROOT to EXP/LN. LN are returned as -1/INV[-LN[]] for use by SERIES.

298006 299006

SIMPLIFY SIMP1ext

29A006

SYMEXPAN

29B006 2A0006 2A2006

SIMPVAR SIMPSYMBS SIMPUSERFCN

2A3006 2A4006 2A9006

EVALUSERFCN SIMP| SIMPext

2AD006 2AE006 2B9006

SIMPGCDext SIMP3ext TSIMP2ext

44.1. Reference Addr. 2BA006 Name TSIMPext

355 Description ( symb symb ) Transcendental simplications. Convert transcendental functions to EXP and LN. ( symb symb )

2BB006

TSIMP3ext

44.1.4
Addr. 26E006

Collection and Expansion


Name COLCext 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 coefcient. ( symb symb' ) Collects logarithms.

2FE006

TCOLLECT

2FF006

SIGMAEXPext

300006 301006

LINEXPext SIGMAEXP2ext

303006 316006 31C006 309006 30F006 31B006 31D006

SINEXPA LNEXPA MTRIG2SYMB COSEXPA EXPEXPA LINEXPA LNCOLCext

356 Addr. 31F006 240006 Name TEXPAext EXLR

44. Expression Manipulation Description ( symb symb ) Main transcendental expansion program. ( 'a=b' a b ) ( ob X ob ) Internal equation splitter.

44.1.5
Addr. 407006

Trigonometric Transformations
Name HALFTAN Description ( symb symb' ) Converts trigonometric functions to TAN of the half angle. ( symb symb' ) Convert sin and cos to tan of the same angle. ( symb symb' ) Applies sin2+cos2=1 to simplify trigonometric expressions. If ag -116 is set, tries to keep only sin, else only cos. ( symb symb' ) Converts hyperbolic functions to exp and ln. Converts XROOT and to exp and ln. ( symb symb' ) Converts all transcendental functions to exp and ln. ( symb symb' ) Converts sqrt, and XROOT to EXP/LN. ( symb symb' ) Converts tan to sin/cos. ( symb symb' ) Converts sin to cos*tan. ( symb symb' ) Converts ATAN to ASIN using asin(x)=atan(x/sqrt(1-x2)). ( symb symb' ) Converts ASIN to ATAN using asin(x)=atan(x/sqrt(1-x2)).

411006 416006

TRIGTAN TRIGext

417006

HYP2EXPext

418006

EXPLNext

419006 426006 429006 430006

SERIESEXPLN TAN2SCext SIN2TCext ATAN2Sext

433006

ASIN2Text

44.1. Reference Addr. 436006 Name ASIN2Cext

357 Description ( symb symb' ) Converts ASIN to ACOS using asin(x)=pi/2acos(x). ( symb symb' ) Converts ACOS to ASIN using acos(x)=pi/2asin(x). ( symb symb' ) Converts TAN to SIN/COS of the double angle. If ag -116 is set calls TAN2SC2, else TAN2CS2. ( symb symb' ) If symb contains x, returns -1/inv(-ln(x)), else ln(x). Used by SERIES.

43A006

ACOS2Sext

43F006

TAN2SC2ext

456006

LN2ext

44.1.6
Addr. 3E8006 3EA006 3EC006

Division, GCD and LCM


Name PSEUDODIV BESTDIV2 QUOText 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 ag 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.

3ED006

NEWDIVext

3F3006

QUOTOBJext

3F4006

DIVISIBLE?

3F5006

QDiv?

358 Addr. 3F6006 Name FastDiv?

44. Expression Manipulation Description ( P Q P/Q PmodQ T ) Euclidean division. Assumes P and Q have integer or Gaussian integer coefcient. Returns FALSE in complex mode or if sparse short division fails. ( z1 z2 q r ) Step by step Euclidean division for small integers. ( list ob ) Calculates the LCM of the denominator of the elements of the list. If input is not a list, returns the denominator of the object. ( Meta ob ) Calculates LCM of the denominators of the elements of Meta. ( {} {} ob ) Calculates the GCD of all the elements in the list. The algorithm is far from optimal. ( c 1 A B c* gcd(A,B) ) Euclidean algorithm for polynomial GCD. Used if A or B contains irrquads. c is the GCD of the contents of the original polynomials returned after failure of GCDHEUext. ( ob2 ob1 gcd ) Generic internal GCD. ( LAM2: GCDext ob1, ob2 pgcd ).

3F7006

POTENCEext

2A5006

DENOLCMext

2A6006

METADENOLCM

2B1006

LPGCDext

2B2006

SLOWGCDext

2B3006

QGcd

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
45.1.1
Addr. 157006

Reference
Basic Expression Manipulation
Name SYMBINCOMP Description ( symb ob1 .. obN #n ) ( ob ob #1 ) ( {} {} #1 ) Explodes symbolic object into meta. Other objects are converted into one-object metas by pushing #1 into the stack. ( meta meta&1&+ meta&1&- ) Creates two copies of the meta. To the rst one, adds 1 and +, to the second one, adds 1 and -. ( meta meta 1&meta&/ ) Duplicates the meta, and inverts the expression represented by it. ( Meta 1&Meta ) Prepends the number 1 to the meta. ( Meta Meta&2&/ ) Divides the expression by two. ( Meta Meta&2 ) Appends the number 2 to the meta. ( Meta Meta&/ ) Appends division to meta.

386006

m-1&m+1

387006

meta1/meta

388006 389006 38A006 38B006

1&meta meta/2 addt2 addt/

359

360 Addr. 38C006 459006 38D006 Name meta2* metai* meta1-sq

45. Symbolic Meta Handling Description ( Meta 2&Meta&* ) Multiplies the expression by 2. ( meta meta*i ) Multiplies meta by i. ( Meta 1&Meta&SQ&- ) Changes x into 1-x2, where x is the original expression. ( Meta Meta&SQ&1&+ ) Changes x into x2+1, where x is the original expression. ( Meta Meta&SQ&1&- ) Changes x into x2-1, where x is the original equation. ( Meta Meta&1&- ) Subtracts one from the expression. ( Meat Meta& ) Append power operator to meta object. ( meta2 meta1 meta2*meta1 ) top& addt*. No checks. ( meta2 meta1 meta2/meta1 ) top& addt/. No checks. ( meta meta&i ) Appends i (the Imaginary unit) to expression.

38E006

metasq+1

38F006

metasq-1

390006 398006 39C006 39D006 39E006

meta-1 addt top&addt* top&addt/ addti

45.1.2
Addr. 393006

Basic Operations and Function Application


Name metaadd Description ( Meta1 Meta2 Meta1+Meta2 ) Adds 2 meta objects with trivial simplications. metaadd checks for Meta1/2=Z0 ONE. ( Meta2 Meta1 Meta2+Meta1 ) Adds 2 meta objects with trivial simplications. Checks for innities then call metaadd. ( Meta1 Meta2 Meta1+Meta2 ) Adds 2 meta objects with trivial simplications.

3AB006

MetaAdd

1CE006

ckaddt+

45.1. Reference Addr. 394006 Name metasub

361 Description ( Meta1 Meta2 Meta1+Meta2 ) Subtracts 2 meta objects with trivial simplications. metasub checks for Meta1/2=Z0 ONE. ( Meta2 Meta1 Meta2-Meta1 ) Subtracts 2 meta objects with trivial simplications. Checks for innities then call metasub. ( Meta1 Meta2 Meta1+Meta2 ) Subtracts 2 meta objects with trivial simplications. ( Meta1 Meta2 Meta1*Meta2 ) Multiplies 2 meta objects with trivial simplications. Checks for meta1, meta2= Z0 or Z1, checks for xNEG. ( Meta2 Meta1 Meta2*Meta1 ) Multiplies 2 meta objects with trivial simplications. Checks for innities/0 then call metamult. ( Meta1 Meta2 Meta1*Meta2 ) Multiplies 2 meta objects with trivial simplications. ( Meta2 Meta1 Meta2/Meta1 ) Divides 2 meta objects with trivial simplications. Checks for innities and 0, meta2 =1 or Z-1, checks for xNEG. ( Meta2 Meta1 Meta2/Meta1 ) Divide 2 meta objects with trivial simplications. Checks for innities and 0 then call metadiv. ( o1...on #n ob {o1/ob...on/ob} ) Division of all elements of a meta by ob. Tests if o=1. ( Meta ob Meta&ob& ) Elevates expression to a power. If ob=1, just returns the expression. Tests for present of xNEG in the end of meta for integral powers.

3AD006

MetaSub

1CF006

ckaddt-

395006

metamult

3AF006

MetaMul

1CD006

ckaddt*

396006

metadiv

3B1006

MetaDiv

3F1006

DIVMETAOBJ

397006

meta

362 Addr. 399006 Name metapow

45. Symbolic Meta Handling Description ( Meta2 Meta1 Meta2Meta1 ) Elevates expression to a power (any other expression). If length of Meta1 is ONE, calls meta. ( Meta2 Meta1 Meta2Meta1 ) Power. Checks for innities then calls metapow. ( Meta2 Meta1 Meta2&XROOT&Meta1 ) Root of expression. ( meta meta ) Checks only for meta nishing by xNEG. ( meta meta ) Like metaneg but checks for meta=ob ONE. ( Meta Meta ) Negates meta. Only checks for metas nishing by xNEG. ( meta meta' ) Meta complex real part. Expands only + - * / . ( meta meta' ) Meta complex imaginary part. Expands only + - * / . ( Meta Meta' ) Meta ABS. Does a CRUNCH rst to nd sign. ( Meta Meta' ) Meta ABS. No crunch, sign is only found using exact methods. ( Meta Meta' ) Meta SIGN. ( Meta Meta' ) Meta ARG. ( Meta2 Meta1 Meta' ) Meta XROOT. XROOT(o2,o1) is o1[1/o2], compared to o2o1. ( Meta2 Meta1 Meta' ) Meta MIN. ( Meta2 Meta1 Meta' ) Meta MAX.

3B5006

MetaPow

39B006 3B9006 3BA006 3B7006

metaxroot metaneg metackneg MetaNeg

502006

xSYMRE

504006

xSYMIM

50E006 510006

addtABS addtABSEXACT

511006 513006 12D006

addtSIGN addtARG addtXROOT

12F006 131006

addtMIN addtMAX

45.1. Reference Addr. 133006 135006 137006 139006 13B006 13D006 13F006 141006 143006 145006 147006 149006 14B006 14D006 14F006 151006 153006 506006 523006 Name addt< addt<= addt> addt>= addt== addt!= addt% addt%CH addt%T addtMOD addtTRNC addtRND addtCOMB addtPERM addtOR addtAND addtXOR addtCONJ addtLN Description ( Meta2 Meta1 Meta' ) Meta <. ( Meta2 Meta1 Meta' ) Meta <=. ( Meta2 Meta1 Meta' ) Meta >. ( Meta2 Meta1 Meta' ) Meta >=. ( Meta2 Meta1 Meta' ) Meta ==. ( Meta2 Meta1 Meta' ) Meta !=. ( Meta2 Meta1 Meta' ) Meta %. ( Meta2 Meta1 Meta' ) Meta %CH. Meta2*(1+Meta'/100)=Meta1. ( Meta2 Meta1 Meta' ) Meta %T. ( Meta2 Meta1 Meta' ) Meta MOD. ( Meta2 Meta1 Meta' ) Meta TRNC. ( Meta2 Meta1 Meta' ) Meta RND. ( Meta2 Meta1 Meta' ) Meta COMB. ( Meta2 Meta1 Meta' ) Meta PERM. ( Meta2 Meta1 Meta' ) Meta OR. ( Meta2 Meta1 Meta' ) Meta AND. ( Meta2 Meta1 Meta' ) Meta XOR. ( meta meta' ) Meta complex conjugate. ( Meta Meta' ) Meta LN.

363

364 Addr. 535006 537006 539006 53B006 Name addtCOS addtSIN addtTAN addtSINACOS

45. Symbolic Meta Handling Description ( Meta Meta' ) Meta COS. ( Meta Meta' ) Meta SIN. ( Meta Meta' ) Meta TAN. ( meta meta' ) If meta stands for x, meta' stands for sqrt[1x2]. ( Meta Meta' ) Meta ASIN. ( Meta Meta' ) Meta ACOS. ( Meta Meta' ) Meta ATAN. ( Meta Meta' ) Meta SINH. ( Meta Meta' ) Meta COSH. ( Meta Meta' ) Meta TANH. ( Meta Meta' ) Meta ATANH. ( Meta Meta' ) Meta ASINH. ( Meta Meta' ) Meta ACOSH. ( Meta Meta' ) Meta SQRT. ( Meta Meta' ) Meta SQ. ( Meta Meta' ) Meta INV. ( Meta Meta' ) Meta EXP. Does not apply EXP[..]=1/EXP[..]. ( Meta Meta' ) Meta EXP. Applies EXP[-..]=1/EXP[..].

53C006 53E006 540006 542006 544006 546006 549006 54C006 54F006 551006 554006 556006 558006

addtASIN addtACOS addtATAN addtSINH addtCOSH addtTANH addtATANH addtASINH addtACOSH addtSQRT addtSQ addtINV addtEXP

559006

xSYMEXP

45.1. Reference Addr. 55A006 55C006 55E006 560006 562006 564006 566006 568006 56A006 56C006 56E006 570006 574006 577006 Name addtD->R addtR->D addtFLOOR addtCEIL addtIP addtFP addtXPON addtMANT addtLNP1 addtLOG addtALOG addtEXPM addtFACT addtNOT Description ( Meta Meta' ) Meta DR. ( Meta Meta' ) Meta RD. ( Meta Meta' ) Meta FLOOR. ( Meta Meta' ) Meta CEIL. ( Meta Meta' ) Meta IP. ( Meta Meta' ) Meta FP. ( Meta Meta' ) Meta XPON. ( Meta Meta' ) Meta MANT. ( meta meta ) Meta LNP1. ( meta meta ) Meta LOG. ( meta meta ) Meta ALOG. ( meta meta ) Meta EXPM. ( Meta Meta' ) Meta FACT. ( Meta Meta' ) Meta NOT.

365

45.1.3
Addr. 409006 40A006 40C006

Trigonometric and Exponential Operators


Name cos2tan/2 1-x2/1+x2 sin2tan/2 Description ( meta meta' ) x (1-(tan(x/2))2)/(1+(tan(x/2))2) ( meta meta' ) x (1-x2)/(1+x2) ( meta meta' ) x 2 tan(x/2)/(1+(tan(x/2))2)

366 Addr. 40D006 40F006 410006 413006 415006 421006 423006 425006 428006 42B006 42D006 42F006 432006 435006 438006 439006 43B006 43E006 441006 Name 2x/1+x2 tan2tan/2 addtTAN/2 cos2tan sin2tan tan2exp asin2ln acos2ln sin/cos cos*tan sqrt1-sin2 sqrt1-cos2 atan2asin asin2atan pi/2-acos pi/2-meta pi/2-asin atan2ln 2*1-cos/sin

45. Symbolic Meta Handling Description ( meta meta' ) x 2x/(1+x2) ( meta meta' ) x 2 tan(x/2)/(1-(tan(x/2))2) ( meta meta' ) x tan(x/2) ( meta meta' ) x 1/sqrt(1+(tan(x))2) ( meta meta' ) x tan(x)/sqrt(1+(tan(x))2) ( meta meta' ) x (exp(i2x)-1)/(i*(exp(i2x)+1)) ( meta meta' ) x = i*ln(x+sqrt(x2-1))+ /2. ( meta meta' ) x ln(x+sqrt(x2-1))/i ( meta meta' ) x sin(x)/cos(x) ( meta meta' ) x cos(x)*tan(x) ( meta meta' ) x sqrt(1-(sin(x))2). ( meta meta' ) x sqrt(1-(cos(x))2). ( meta meta' ) x asin(x/sqrt(x2+1)) ( meta meta' ) x atan(x/sqrt(1-x2)) ( meta meta' ) x /2-acos(x) ( meta meta' ) x /2-x ( meta meta' ) x /2-asin(x) ( meta meta' ) x i/2*ln((i+x)/(i-x)) ( meta meta' ) x (1-cos(2x))/sin(2x)

45.1. Reference Addr. 443006 445006 447006 449006 44B006 44D006 44F006 451006 453006 455006 458006 Name 2*sin/1+cos sin2exp cos2exp sinh2exp cosh2exp tanh2exp asinh2ln acosh2ln atanh2ln xroot2expln exp2sincos Description ( meta meta' ) x sin(2x)/(1+cos(2x)) ( meta meta' ) x (e(i*x)-1/e(i*x))/(2i) ( meta meta' ) x (e(i*x)+1/e(i*x))/2 ( meta meta' ) x (ex-1/ex)/2 ( meta meta' ) x (ex+1/ex)/2 ( meta meta' ) x (e2x-1)/(e2x+1) ( meta meta' ) x ln(x+sqrt(x2+1)) ( meta meta' ) x ln(x+sqrt(x2-1)) ( meta meta' ) x ln((1+x)/(1-x))/2 ( meta1 meta2 meta' ) x y exp(ln(y)/x) ( meta meta' ) Returns EXP of EXP[RE]*[COS+i*SIN].

367

meta

as

45.1.4
Addr. 3A1006

Innity and Undefs


Name 1metaundef# 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 innity in meta. Metas of length>2 are considered as nite meta.

3A0006

2metaundef#

3A2006 3A4006

metaundef 1metainf#

368 Addr. 3A3006 Name 2metainf#

45. Symbolic Meta Handling Description ( meta2 meta1 meta2 meta1 # ) Finds position of innity in meta 2 and meta1. Metas of length>2 are considered as nite meta. ( meta # ) Returns innity type: 1 for +innity, 2 for innity or 0 for unsigned. ( meta ) Returns unsigned innty. ( meta ) Returns plus innty. ( ob1..obn meta ) Replaces meta by plus innty. ( meta ) Returns minus innty. ( ob1..obn meta ) Replace meta by minus innty.

3A5006

metainftype

3A6006 3A7006 3A8006 3A9006 3AA006

unsignedinf plusinf NDROPplusinf minusinf


NDROPminusinf

45.1.5
Addr. 3BB006

Expansion and Simplication


Name metasimp Description ( Meta Meta ) Simplies a meta object. Non recursive rational simplication. ( 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).

118007

DISTRIB*

3C2006

DISTRIB/

304006 305006 306006

METASINEXPA SINEXPA+ SINEXPA-

45.1. Reference Addr. 307006 Name SINEXPA*

369 Description ( Meta Meta' ) Expands SIN(x*y). Expands if x or y is an integer. ( Meta2 Meta1 Meta' ) Expands SIN(x*y). Meta1 is assumed to be an integer. ( Meta Meta' ) Expands COS. ( Meta Meta' ) Expands COS(x+y). ( Meta Meta' ) Expands COS(x-y). ( Meta Meta' ) Expands COS(x*y). ( meta2 meta1 Meta' ) Expands COS(x*y). meta1 represents an integer. ( Meta Meta' ) Expands EXP. ( Meta Meta' ) Expands EXP(x+y). ( Meta Meta' ) Expands EXP(x-y). ( Meta Meta' ) Expands EXP(x*y). ( Meta Meta' ) Expands EXP(-x). ( Meta2 meta1 Meta' ) Expands EXP(x*y). meta1 represents an integer. ( Meta Meta' ) Expands LN. ( Meta Meta' ) Expands LN(x*y). ( Meta Meta' ) Expands LN(x/y). ( Meta Meta' ) Expands LN(xy).

308006

SINEXPA*1

30A006 30B006 30C006 30D006 30E006

METACOSEXPA COSEXPA+ COSEXPACOSEXPA* COSEXPA*1

310006 311006 312006 313006 314006 315006

METAEXPEXPA EXPEXPA+ EXPEXPAEXPEXPA* EXPEXPANEG EXPEXPA*1

317006 318006 319006 31A006

METALNEXPA LNEXPA* LNEXPA/ LNEXPA

370 Addr. 31E006 Name METATANEXPA

45. Symbolic Meta Handling Description ( meta tan[meta] ) Expands tan[meta].

45.1.6
Addr. 39A006 3BC006

Tests
Name
metafraction?

metapi?

3BD006

metaCOMPARE

3BE006

STRICTmetaCOMPARE

3C3006

metareal?

Description ( Meta Meta flag ) Tests if meta is a fraction of integers. ( Meta Meta# ) Tests presence of in a meta. # is the last occurence of or 0. ( Meta2 Meta1 Meta2 Meta1 # ) Comparison of 2 meta. # =0 if undef # =1 if > # =2 if < # =3 if = Assumes generic situation, e.g. X2 > 0 in real mode. Look below STRICTmetaCOMPARE for a more careful comparison. ( Meta2 Meta1 Meta2 Meta1 # ) Comparison of 2 meta. # =0 if undef # =1 if > # =2 if < # =3 if = Unlike metaCOMPARE it does not assume generic situation. ( meta meta flag ) Tests if IM[meta]==0.

Chapter 46 Polynomials
The entries in this chapter deal with computation with Polynomials.

46.1
46.1.1
Addr. 118006 119006 117006 115006 116006 114006 111006 112006

Reference
Computation with Polynomials
Name QAdd RADDext SWAPRADD QSub RSUBext SWAPRSUB QMul RMULText Description ( o1 o2+o1 ) Adds two polynomials. ( o2 o1 o2+o1 ) Internal +. This is the same entry as QAdd. ( o2 o1 o1+o2 ) SWAP, then QAdd. ( o2 o1 o2-o1 ) Subtracts two polynomials. ( o2 o1 o2-o1 ) Internal -. This is the same entry as QSub. ( o2 o1 o1-o2 ) SWAP, then QSub. ( Q1 Q2 Q ) Multiplication of polynomials with extensions. ( Q1 Q2 Q ) Multiplication of polynomials with extensions. This is the same entry as QMul. ( Q1 Q2 Q ) SWAP, then QMul. ( o2 o1 o2/o1 ) Internal /.

110006 11C006

SWAPRMULT QDiv

371

372 Addr. 11B006 11A006 0D9006 113006 Name RDIVext SWAPRDIV QMod RASOP

46. Polynomials Description ( o2 o1 o2/o1 ) Internal /. This is the same entry as QDiv. ( o2 o1 o1/o2 ) SWAP, then QDiv. ( Q, Z Q mod Z ) ( n1/d1 n2/d2 d1*d2 n1*d2 n2*d1 ) Used by RADDext and RSUBext for rational input. ( o2 # o2# ) Internal power (not for matrices). ( ob # prg* ob# ) General power with a specied multiplication program. ( o2 o1 o2o1 ) Tries to convert o1 to an integer to call RP#, otherwise xext. ( P Q quo mod T ) ( P Q P Q F ) Euclidean division. Assumes P and Q have integer coefcientes. Returns FALSE if sparse short division fails. ( P, r symb ) Taylor for polynomials. ( Q1/Q2 Q1'/Q2' ) Extracts leading coefcients for the rst variable from a rational polynomial. ( ob2 ob1 quo mod ) Polynomial Euclidean division of 2 objects. Dispatchs to DIV2LISText for list polynomials. ( Z0 l1 l2 div mod ) Euclidean division, l1 and l2 are list polynomials. Test rst if l1=l2, then tries fast division, if it fails switch to SRPL division. ( A B Q R ) Step by step Euclidean division for univar poly. ( P1 P2 sign[P2]*P1 ) Sets sign of P1 according to leading coeff of P2. ( Zn Fraction Fraction modulo Zn )

11F006 120006

RP# MPext

123006

RPext

108006

DISTDIVext

3E5006 15B006

PTAYLext CARCOMPext

3EE006

QDivRem

3EF006

DIV2LISText

3F8006 3F9006 3C4006

PDIV2ext PSetSign ModExpa

46.1. Reference Addr. 3C5006 3C6006 3C7006 3C8006 3C9006 Name ModAdd ModSub ModMul ModDiv ModDiv2

373 Description ( Q1 Q2 Zn Z ) Modular addition. Z = Q1+Q2 (mod Zn). ( Q1 Q2 Zn Z ) Modular subtraction. Z = Q1-Q2 (mod Zn). ( Q1 Q2 Zn Z ) Modular multiplication. Z = Q1*Q2 (mod Zn). ( Z1 Z2 Zn Z ) Modular division. Z = Z1/Z2 (mod Zn). ( Q1 Q2 Zn quo mod mod' ) Modular division. mod' = Q1 mod Q2 mod Zn. If Q1 and Q2 are integers, Q1 mod Q2 mod Zn is always 0. ( Z Zn Z' ) Modular inversion. Z' = INV(Z) (mod Zn). NONINTERR if GCD[Z,Zn] = 1 or if Z = 0 (otherwise the results would be unpredictable). ( Q1 Q2 Zn Q' ) Modular GCD.

3CA006

ModInv

3CB006

ModGcd

46.1.2
Addr. 08E006

Factorization
Name BerlekampP Description ( P #prime P F / P Lf #prime T ) Berlekamp's algorithm for nding modular factors of a univariate polynomial. ( P P F / P Lf #prime T ) Berlekamp's algorithm for nding modular factors of a univariate polynomial with a leading frontend for nding linear factors faster. The input polynomial must be square free, otherwise the polynomial is not fully factored. Due to memory restrictions byte sized coefcients are used and the following restrictions were imposed: prime<128 and degree<256. If the conditions are not met FALSE is returned. BCD: prime97.

08F006

Berlekamp

374 Addr. 0A8006 Name ALG48FCTR?

46. Polynomials Description ( P [ meta cst_coeff TRUE | P FALSE ] ) Factorizes square-free polynomial in Erable format. ( P meta-factor P' ) Extracts all trivial power factors of P. ( P P flag ) Checks that P does not contain any DOCOL (i.e. extensions). ( P PP PC ) Computes primitive polynomial and content of non-const P with respect to X1. The results are trimmed (provided P was). ( P Lfk Z ) Does a complete factorization of P. The result is trimmed. ( P Lfk ) Square-free and trivial factorization, including integer content, of P taken positive. Factors of same power are not necessarily merged or adjacent, but all Fi's are square-free. ( P Lf ) Heuristic factorization of polynomial taken positive. LAM FullFact? must be bound. If LAM FullFact? is TRUE, a full factorization is done. If it is FALSE, only square-free and trivial factorization is done. ( P Lf ) Heuristic factorization of primitive polynomial. LAM FullFact? must be bound. If TRUE, a full factorization is done. When FALSE, only a square-free and trivial factorization are done. ( P Lf ) Heuristic factorization of primitive square-free non constant polynomial. ( P P' # ) Extracts trivial power of poly. P must be a valid poly (if list, begin with a non zero coeff).

0A9006 0AA006

MFactTriv CheckPNoExt

0AB006

PPP

0AC006

PFactor

0AD006

PSqff

0AE006

PHFctr

0AF006

PHFctr1

0B0006

PHFctr0

0D8007

P2P#

46.1. Reference Addr. 0B1006 Name DeCntMulti

375 Description ( R L ) Transforms list with count into simple list. R = { {f1 #k1} ... {fn #kn} } L = { f1 f1 .. fn fn }. ( L S F L' ) Applies program F(Li,S) to every elem of L. ( Z Lf ) Factorization of positive integer as polynomial. Lf = {} if Z is 1 Lf = { {Z1 #k1} ... {Zn #kn} } o/w. ( P Lsqff ) Computes the square-free factorization of primitive P. The result is trimmed (provided P was). ( p z F L ) Lift n-1 z-adic factorization into n factorization. ( C L C P ) Calculates combination product. ( P Lf ) Factorization of a square free primitive univariate polynomial. ( P Lf ) Factorization of a square free primitive univariate polynomial of degree > 2. ( Lfp p Lfp' ) Converts true modular factorization to monic factorization by dividing by the leading coefcient of factor 1. ( Lfp lc p Lfp' ) Converts monic modular factorization to true modular factorization by multiplying factor1 by lcoeff.

0B2006 0B3006

DoLS PNFctr

0B4006

PSQFF

0B5006

LiftZAdic

0B6006 0B7006

LFCProd UFactor

0B8006

UFactor1

0B9006

MonicLf

0BA006

DemonicLf

376 Addr. 0BB006 Name LiftLinear

46. Polynomials Description ( #root1 .. #rootn #n ) Lifts modular roots of a polynomial to nd linear factors of a univariate polynomial. Lflin = list of found true factors Lfplin' = remaining linear factors P' = remaining polynomial Assumes UFactor lambda variables available and uses them for input and output. ( ) Lifts factorization mod p to factorization mod pk where pk exceeds the factor bound for succesful true factor extraction. Assumes UFactor lambda variables. ( P Lf ) Factorization of a degree 2 polynomial. Polynomial is univariate, square free and primitive. ( P Lfp p Tf Tfp ) Combines modular factors to true factors. P is the polynomial to factor, Lfp is the list of modular factors, and p the modulo. The entry returns the a list of found true factors (Tf) and the list of modular factors for each true factor (Tfp) ( lc Lfp p Cb F ) Calculates modular combination. ( #r Cb ) Inits modular combination list to value { 1 0 0 0 .. }. ( Cb Cb' flag ) Gets next possible modular combination. Assumes Cb is valid and is in tempob area. ( Lf Cb Lfrm Lf' Cb' flag ) Removes next possible combination after a successful combination has been found, and remove the used factors from the factor list. ( P P' Lf ) Extracts all trivial power factors of P.

0BC006

LiftGeneral

0BD006

UFactorDeg2

0BE006

CombineFac

0BF006 0C0006

CombProd CombInit

0C1006

CombNext

0C2006

RmCombNext

0C3006

PFactTriv

46.1. Reference Addr. 0C4006 Name VarFactor

377 Description ( P #var P #n ) Calculates what power of the given variable is a factor in P. ( P P Lk flag ) Calculates trivial power factors in P. ag is TRUE if any of the powers is nonzero. ( P Lk P' ) Divides polynomial by its trivial powers. ( P meta-fact cst coeff ) Real mode: full factorization over the integer Complex mode: nd all 1st order factors of P.

0C5006

PFactPowCnt

0C6006 282006

PDivLk FEVIDENText

46.1.3
Addr. 09B006 09C006 09D006 09E006 09F006

General Polynomial Operations


Name ONE{}POLY TWO{}POLY THREE{}POLY TWO::POLY ::POLY 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 xed sizes, as in ONE{}POLY and TWO{}POLY. ( Meta Q ) Builds polynomial. ( P ob P' ) Replaces >TCOMP for polynomial building.

0A0006

{}POLY

0A7006 0A1006

>POLY >TPOLY

378 Addr. 0A2006 0A3006 0A4006 0A5006 Name >HPOLY >TPOLYN >HPOLYN MKPOLY

46. Polynomials Description ( P ob P' ) Replaces >HCOMP for polynomial building. ( P ob1 .. obn #n P' ) Improved >TCOMP for polynomial building. ( P ob1 .. obn #n P' ) Improved >HCOMP for polynomial building. ( #n #k P ) Makes polynomial of nth variable to the power k. ( ob # {{{...{o}...}}} ) Embedds ob in the given number of lists. ( Q Q' ) Removes unnecessary zeros from polynomial. ( ob ob' ) Trims polynomial. ( Q Q' ) Increases variable depth. Constants (Z,Irr,C) are not modied. ( zint P ) Tchebycheff polynomial. If zint>0 then 1st kind, if <0 then second kind. ( P # [] ) Left ReDiMension. Adds 0 to the left of polynomial to get a symbolic vector of lenght #+1. ( {} # {} ) Right ReDiMension: like LRDM but 0 at the right and {}. ( {} degre ) Degree of a list-polynomial. ( P/d r P[X]_div_[X-r]/d r P[r]/d ) Horner scheme. ( P r P[X]_div_[X-r] r P[r] ) Horner scheme. ( P r P[X]_div_[X-r] r P[r] ) Horner scheme for matrices.

2AB006 4F4006 4F5006 0A6006

MAKEPROFOND TRIMext PTrim ONE>POLY

302006

TCHEBext

3DE006

LRDMext

3DF006

RRDMext

3E0006 3E1006

DEGREext FHORNER

3E2006 3E4006

HORNext MHORNext

46.1. Reference Addr. 3E6006 Name LAGRANGEext

379 Description ( M symb ) Lagrange interpolation. Format of the matrix is [ [ x1 .. xn ] [ f(x1) .. f(xn) ] ] Returns a polynomial P such that P(xi)=f(xi) ( P1 P2 P ) Resultant of two polynomials. Depth of P is one less than depth of P1 and P2. ( res g h P1 P2 +/-res g' h' P1' P2' ) Subresultant algorithm innerloop. ( P Q P' ) Resultant of P and Q shifted. gcd[Q(xr),P(x)]!=1 equivalent to r root of P' P' has same depth than P and Q. ( P P' ) Adds one variable just below the main var. works for polynomial, not for fractions. ( P P' ) Changes var Y=X2 in an even polynomial. ( N D N' D' ) Shrinks 2 polynomials using symmetry properties. ( N N' ) Shrinks 1 polynomial using symmetry properties. Degree of N must be even. If it is odd then N should be divided by X+1. ( N D N' D' ) Shrinks 2 polynomials using antisymmetry properties. ( N N' ) Shrinks 1 polynomial using antisymmetry properties. Degree of N must be even. If it is odd then N should be divided by X+1. ( P Z ) Gets the coefcient of P with max norm. ( Qden Qnom symb ) Builds a symbolic from rational polynomial.

10F007

RESULTANT

110007

RESULTANTLP

111007

RESPSHIFTQ

112007

ADDONEVAR

0CF007 0D1007

SHRINKEVEN SHRINK2SYM

0D2007

SHRINKSYM

0D3007

SHRINK2ASYM

0D4007

SHRINKASYM

103006 161006

PNMax SWAPNDXF

380 Addr. 162006 163006 164006 3D7006 3D8006 0EA006 Name NDXFext SWAPFXND FXNDext REGCDext EGCDext PEvalFast?

46. Polynomials Description ( Qnom Qden symb ) Builds a symbolic from rational polynomial. ( symb ob ob Qnom Qden ) Converts symbolic to rational polynomial. ( symb Qnom Qden ) Converts symbolic to rational polynomial. ( a b d u v au+bv=d ) ( a b d u v au+bv=d ) Bezout identity for polynomials. ( Z Pn Z Pn F / Pn[Z] T ) Attempts to evaluate Pn at X1=Z using fast register arithmetic. Fails if any of the following is true: Pn is not sunivariate; Z is polynomial after all; Z size is too big for register; Any overow occurs during Horner evaluation. ( symb1 symb2 symb ) Resultant of two polynomials in symbolic form.

10E007

FLAGRESULTANT

46.1.4
Addr. 10B006 10C006

Tests
Name Univar? SUnivar? Description ( P P flag ) Tests if polynomial is univariate. ( P P flag ) Tests if polynomial is univariate and the coefcients are bounded by register size. ( poly Z ) Tests if a polynomial (internal rep) is even/odd/none. Z=1 if even, -1 if odd, 0 if neither even nor odd. ( P Z ) Tests symmetry of coefcients of polynomial. Z=1 for symmetric, -1 for anti, 0 otherwise. ( P Z ) Tests "antisymmetry" of coef of polynomial. Z=1 for symmetric, -1 for anti, 0 otherwise.

0CC007

POLYPARITY

0D6007

POLYSYM

0D7007

POLYASYM

Chapter 47 Root Finding


In this chapter you will nd entries related to nding roots of equations.

47.1
47.1.1
Addr. 272006

Reference
Root Finding and Numerical Solvers
Name MULMULText Description ( {} % {}' ) Multiplies multiplicities in a factor list by coeff. ( meta % meta' ) Multiplies by % all multiplicities of meta. ( {} {}' ) ( Meta Meta' ) Suppresses multiple occurrances of the same factor by adding corresponding multiplicities. ( f1...fk-1 mk-1 meta-res mk fk # f1...fk-1 mk-1 meta-res ) ( {} %n ob {}' ) Adds ob with multiplicity %n to the list. Checks if ob is in {}. ( ob {divisors} ) Returns list of divisors of ob. ( symb-poly Lvar Q {} ) {} is the list of root/multiplicity of sym with respect to the current variable. ( symb Lvar Q {} ) {} is the list of factors/multiplicity of symb. ( C {} C Lfact ) 381

274006 275006 276006

METAMM2 COMPLISText METACOMPRIM

278006 279006

METACOMP1 ADDLISText

27A006 27B006

DIVISext FACT1ext

27C006 27D006

FACTOext ZFACTO

382 Addr. 27E006 Name SOLVext

47. Root Finding Description ( symb {} ) Numeric solver for univariate polynomials. The list contains the roots without multiplicity. ( ob ob') ) Float rounding for %%, C%% or list of either type. Used by SOLVext to reconstruct factors. ( P #5 meta cst_coeff T ) ( P #5 P #5 F ) ( P # P # F ) Searches if P is a bisquared 4-th order equation. Returns a meta of factors and the multiplying coeff in that case. ( f1 #1 coef meta rest T ) ( P list ) Finds integer roots of a polynomial. ( P meta cst_coeff ) Returns the roots of a polynomial P. Calls the numeric solver. ( P meta cst_coeff ) Returns the roots of a 1st, 2nd order and some other poly. Calls the numeric solver if exact solving fails. ( P {} ) Returns the roots of a 2nd order polynomial. ( P P meta ) Returns the roots of a 2nd order polynomial. P must be of order 1 or 2. ( P P meta ) Returns the roots of a 1st order polynomial. P must be of order 1. ( f r ) Root of a rst order factor. f is one level depth deeper than r. ( P meta-fact cst_coef ) Returns factors of a 2nd order polynomial and the corresponding multiplying coefcient. tests for 1st order polynomial.

27F006

FRND

280006

BICARREE?

281006 113007 283006

REALBICAR IROOTS EVIDENText

284006

EVIDSOLV

285006 286006

DEG2ext METADEG2

287006

METADEG1

288006

DEG1

289006

FDEG2ext

47.1. Reference Addr. 28B006 Name RACTOFACext

383 Description ( r n d ) Converts root to factor. Factor is n/d, one level depth deeper than r. ( f r cst_coef ) Converts a factor to a root, solving 1st order factor. f and cst_coef are one level depth deeper than r. ( ob # {} intob meta ) {} is the list of variables. Meta is made of roots or factors of numerator (N) or denomenator (D) or both (N/D), depending on #. ZERO for roots N/D; ONE for roots N; TWO for roots D with numeric solver call; THREE for roots D without num. solver call; FOUR for factors N/D; FIVE for factors N; SIX for factors D with numeric solver call; SEVEN for factors D without num.solver call. ( ob {} # {} intob meta ) Like RFACText, but the list of variables is given. ( ob meta-fact ) Partial square-free factorization w.r.t. the main variable. Extract trivial factors Etape 3 ob meta-fact. ( %m on add-to-meta-res ) Factorization of a square-free polynomial. ( pn cst_coeff meta cst_coeff ) Non-integer factorization (sqrt extensions and numeric). multiplicty is in LAM 5,. ( cst_coeff p fr1 %m [fr2 %m] # cst_coeff ) Returns roots/factors of 1st and 2nd order polynomials. ( cst1 f1 ... fk #k cst2 fr1 %m ... frn %m #2k cst_coeff ) Returns factors or convert to roots if needed. #k=1,2 or 4, fk are of order 1 or 2.

28C006

FACTORACext

28D006

RFACText

28E006

RFACT2ext

28F006

RFACTSTEP3

290006 291006

RFACTSTEP5 METASOLV

293006

METASOLV2

294006

METASOLV4

384 Addr. 295006 Name ADDMULTIPL

47. Root Finding Description ( meta cst_coeff meta' cst_coeff ) Adds multiplicities to a meta. Multiplicity is in LAM 5. ( { fact mult } flag prg* prg ob ) Rebuilds an object from its list of factors (ag=TRUE) or roots (ag=FALSE) using prg* to multiply and prg to take multiplicity power. ( Lp Lidnt Lsol ) Calculates Groebner basis multivar solution. LAM3 must be bound to Lvar and LAM4 to Lidnt. ( Lp meta-sol ) Calculates Groebner basis multivar solutions. LAM1 must be bound to the number of vars A solution is a list { o1 ... on } where #n=LAM1 ok embedded in k-1 lists is the value of the k-th var ok may be undef. ( Lp G ) Calculate Groebner basis. G = { 1 } if no solutions G = { 0 } if identically true. ( Lp Lg ) Calculate factorized Groebner basis. Lg = { Lg1 Lg2 .. Lgn } Lgi = independent solution (probably) Lg = {} if no solutions Lg = { { 0 } } if identically true. ( Lp fctr? Lg ) Calculate Groebner basis or factorized Groebner basis. Redundant bases are not removed. ( p G q ) Reduces polynomial with respect to given basis.

296006

FACTOOBJext

093006

ALG48MSOLV

094006

GMSOLV

095006

GBASIS

096006

GSOLVE

097006

GFACTOR

099006

REDUCE

47.1. Reference Addr. 09A006 Name FASTREDUCE

385 Description ( r P q T / r P F ) Assembly version of REDUCE for polynomials with short coefcients. Returns FALSE if an overow occurs during the reduction. Assumes r is a genuine polynomial (not constant). Assumes G is not empty. Assumes G does not contain zeros (is trimmed). ( {}/V V' ) Transforms list of root/multiplicites to vector of roots. ( {} {}' ) Finds next line in the Pascal triangle. ( Q P ) Solves P(x+1)-P(x)=Q(x). Internal polynomial function.

37D006

ROOTM2ROOT

0F2007 0F3007

PASCAL_NEXTLINE

DELTAPSOLVE

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
48.1.1
Addr. 46F006

Reference
Limits and Series Expansion
Name SYMTAYLOR Description ( symb id %/z symb ) Taylor series expansion around point 0 (McLaurin's series) with regard to given variable, and of the given order. ( DL-l reste-l truncated_DL ) Series expansion truncation. ( expression X=a|X %|zint ) a lim DL-l rest-l num-l/deno-l equiv-l lvar # Series expansion. #=1 for X=a-h or X=-1/h. ( symb DL-l reste-l num-l/deno-l equiv.-l lim. lvar flag ) lim. = { symf direction } ( symb { DL-l reste-l num-l/deno-l equiv.-l } flag ) ( # lvar equiv-l lvar lim ) ( reste-1-l reste-2-l reste-l ) ( n/d # n/d-l equiv % ) ( {} # {} / {}-equiv-l {}-equiv-l { # # # } )

471006 472006

TRUNCDL LIMSERIES!

477006

LIMIT!

478006 47C006 47F006 480006 481006

LIMSTEP1! LIMLIM! LIMCMPL! LIMEQUFR! LIMEQU!

386

48.1. Reference Addr. 483006 48C006 48E006 490006 49E006 4A1006 4B6006 4BA006 4BD006 4BE006 4BF006 4C0006 4C2006 4C3006 15C006 Name LIM+-! LIMDIVPC! LIMPROFEND! LIM%#! LIM#VARX! HORNEXP! VARCOMP! VARCOMP32! LIMVALOBJ! LIMVAL! EQUIV! LVARXNX2! FindCurVar LIMVAR! RISCH13

387 Description ( DL1...DLn #n op DL flag ) DL = { DL-l reste-l num-l/deno-l equiv-l }. ( #ordre num-l deno-l num-l deno-l ) ( num deno #prof num deno ) ( num-l deno-l {%...%} num-l' deno-l' #prof {%...%} ) ( lvar lvar #varx ) ( lim lvar X-l reste-l lvar DL reste-l ) ( var1 var2 flag ) ( var 0: ) ( ob lvar symb ) ( ob coeff val ) ( {} lequiv equiv ordre ) ( ob ob lvarx lvarnx ) ( symb symb ) Sets a new current var if needed. ( symb symb lvar ) ( {}/{}' {}'' ) Assuming {}' has length 1, divides all elements of {} by this element. Used by RISCHext and by SERIES to have a nicer output of series.

48.1.2
Addr. 3DC006 1A1006

Derivatives
Name PDer DERIVext Description ( {} der ) ( ob id ob' ) ( ob sym ob' ) ( ob V V' ) Calculates the derivative of the object. For a list argument calculates the gradient with respect to the variables in the list. If the variable is a symbolic, the rst variable in it is used. Note that the gradient is a vector quantity, thus the result is returned as a list.

388 Addr. 1A3006 Name DERIVIDNT

48. Calculus Operations Description ( ob id ob' ) Main entry point for derivative with respect to a identier. ( ob ob' ) Main entry point for derivative with respect to the identier stored in LAM1. ( symb symb' ) Derivative of symb with respect to the variable stored in LAM1. ( Meta Meta' ) Derivative of Meta object. ( Meta Meta' ) Meta derivative and negate. ( Meta&+ Meta' ) Meta derivative of addition. ( Meta&- Meta' ) Meta derivative of subtraction. ( Meta&* Meta' ) Meta derivative of multiplication. ( Meta&/ Meta' ) Meta derivative of division. ( Meta& Meta' ) Meta derivative of power. ( Meta Meta' ) Meta derivative of a function. ( symb_id_; sym_fcn_; xDER #3 Meta' ) Meta derivative of a derivative of a function. ( Meta Meta' ) Meta derivative of a dened integral. ( Meta Meta' ) Meta derivative of an undened integral. ( Meta Meta' ) Meta derivative of IFTE. ( Meta Meta' ) Meta derivative of EXP. ( Meta Meta' ) Meta derivative of LN.

1A4006

DERIVIDNT1

1A5006

DERIV

1A6006 1BD006 1A9006 1AA006 1AB006 1AC006 1AD006 1AE006 1AF006

METADERIV METADER&NEG METADER+ METADERMETADER* METADER/ METADER METADERFCN METADERDER

1B0006 1B1006 1B2006 1B4006 1B5006

METADERI4 METADERI3 METADERIFTE METADEREXP METADERLN

48.1. Reference Addr. 1B6006 1B7006 1B8006 1B9006 1BA006 1BB006 1BC006 1BE006 1BF006 1C0006 1C1006 1C2006 1C3006 1C4006 1C5006 1C6006 1C7006 1C8006 1C9006 Name METADERLNP1 METADERLOG METADERALOG METADERABS METADERINV METADERNEG METADERSQRT METADERSQ METADERSIN METADERCOS METADERTAN METADERSINH METADERCOSH METADERTANH METADERASIN METADERACOS METADERATAN METADERASH METADERACH Description ( Meta Meta' ) Meta derivative of LNP1. ( Meta Meta' ) Meta derivative of LOG. ( Meta Meta' ) Meta derivative of ALOG. ( Meta Meta' ) Meta derivative of ABS. ( Meta Meta' ) Meta derivative of INV. ( Meta Meta' ) Meta derivative of NEG. ( Meta Meta' ) Meta derivative of SQRT. ( Meta Meta' ) Meta derivative of SQ. ( Meta Meta' ) Meta derivative of SIN. ( Meta Meta' ) Meta derivative of COS. ( Meta Meta' ) Meta derivative of TAN. ( Meta Meta' ) Meta derivative of SINH. ( Meta Meta' ) Meta derivative of COSH. ( Meta Meta' ) Meta derivative of TANH. ( Meta Meta' ) Meta derivative of ASIN. ( Meta Meta' ) Meta derivative of ACOS. ( Meta Meta' ) Meta derivative of ATAN. ( Meta Meta' ) Meta derivative of ASINH. ( Meta Meta' ) Meta derivative of ACOSH.

389

390 Addr. 1CA006 1B3006 Name METADERATH DERARG

48. Calculus Operations Description ( Meta Meta' ) Meta derivative of ATANH. ( meta-symb arg1 ... argk der1 ... derk #k op ) Finds derivative of arguments. ( Meta1 Meta2 Meta2&Meta1'&* ) Meta derivative utility. ( Meta1 Meta2 Meta2&SQRT&INV&Meta1'&* ) Meta derivative utility.

1CB006 1CC006

pshder* SQRTINVpshd*

48.1.3
Addr. 07F007 2C5006

Integration
Name ODE_INT IBP Description ( symb idnt symb ) Integration with addition of a constant. ( u'*v u u*v -u*v' ) Internal integration by parts. If u is a constant return INTVX(u'*v)+u. If stack 2 is a list it must be of the form { olduv u'*v } then olduv will be added to u*v at stack level 2. This permits multiple IBP in algebraic mode, e.g. IBP(ASIN(X)2,X) IBP(ANS(1),sqrt(1-X2)) IBP(ANS(1),C) the last step with an integral containing a cst C. ( symb inf sup x symb|x=sup symb|x=inf ) Evaluates an antiderivative between 2 bounds Does not check for discontinuities of symb in this interval. ( symb inf sup vx symb inf sup vx ) Warns user for singularity. ( symb x int[$,x, symb, xt] ) Return unevaluated integral.

2D0006

PREVALext

2D1006 2D2006

WARNSING INText

48.1. Reference Addr. 2D3006 Name INT3

391 Description ( f(x) x y F(y) where F'=f ) Undened integration. No limit for underdetermined form. ( {} prim )

3DD006

INTEGRext

48.1.4
Addr. 3D2006

Partial Fractions
Name PARTFRAC Description ( o symb ) Partial fraction expansion of o with respect to the current variable. ( o list symb ) Partial fraction expansion of o. lvar must be bound to LAM2, list is =lvar if o is in external format. list is NULL{} if o is still in internal format.

3D3006

INPARTFRAC

48.1.5
Addr. 07E007

Differential Equations
Name DESOLVE Description ( list symb1 list_sols ) ( symb symb1 list_sols ) Solves ordinary differential equation. For some ode's returned level2 is not symb1. ( 2nd_member char_eq solution ) Linear differential equation with constant coefcients. ( eq. carac sol generale ) ( 2nd membre, eq carac eq. carac, sol part ) ( V M V' ) M is the matrix of the system. V is the vector of the 2nd members. ( type ) Store ode type in variable ODETYPE.

081007

LDECSOLV

082007 083007 084007

LDEGENE LDEPART LDSSOLVext

085007

ODETYPESTO

392 Addr. 086007 Name ODE_SEPAR

48. Calculus Operations Description ( symb symb symb-y symb-x T ) ( symb symb F ) Tries to separate symb as a product of a function of y and a function of x.

48.1.6
Addr. 087007

Laplace Transformation
Name LAPext Description ( symb symb' ) Laplace transform for polynomial*exp/sin/cos. Returns LAP() for unknown transforms. ( symb symb' ) Inverse Laplace transform for rational fractions. Delta functions for the integral part. ( ck rk ck*exp[rk*x] )

088007

ILAPext

08B007

ILAPEXP

Chapter 49 Summation
In this chapter, you will nd the main entries related to summation, and also some sub-routines used by those entries.

49.1
Addr. 0F9007 0FB007

Reference
Name SUM SUMVX Description ( sym idnt sym ) Internal SUM. The variable can be specied. ( sym sym ) Internal SUMVX. Works always with respect to the current variable. ( sym sym ) Discrete rational sum. ( f shift f' ) Taylor shift for rational fractions. ( ob ob flag ) Taylor shift for rational fractions. Returns TRUE if ob is a cst fraction. ( symb symb ) Tests and does hypergeometric summation. ( z/symb symb ) Discrete summation (hypergeometric case). ( meta meta flag ) Tests for meta to be cst with respect to current var. ( f(n,k) n k d C T ) ( f(n,k) n k d F ) Zeilberger algorithm * NOT IMPLEMENTED YET*. 393

0FD007 0FE007 0FF007

RATSUM FTAYL CSTFRACTION?

104007 100007 103007

HYPERGEO NONRATSUM meta_cst?

108007

ZEILBERGER

394 Addr. 109007 10B007 11C007 10D007 0D9007 0DA007 3C1006 Name SYMPSI SYMPSIN %%PSI IBERNOULLI NDEvalN/D PEvalN/D
vgerxssSYMSUM

49. Summation Description ( sym Psi(x) ) Digamma function. ( sym int Psi(x,n) ) Digamma function. ( %%x %% ) Digamma function. ( #/zint Q ) Bernoulli numbers. ( num deno n d num' deno' ) Evals list poly over a list fraction. ( P n d num d # ) Evals list poly over a list fraction. ( Meta2 Meta1 meta ) Symbolic sum with tests for two zints. lam'sumvar bound to 'id/lam' and lam'sumexpr to 'expr'.

Chapter 50 Modular Operations


The entries in this chapter are related to modular arithmetic and other modular operations.

50.1
50.1.1
Addr. 252006 253006 256006 0E1006 0E2006 0E3006 0E4006 0E5006

Reference
Modulo Operations
Name
FLAGFACTORMOD

MFACTORMOD LIFCext PEvalMod QAddMod QSubMod QMulMod 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 coefcients in the remainder can increase very quickly to tens of digits, thus it is important to normalize the coefcients whenever possible.

395

396 Addr. 0E6006 0E7006 Name QInvMod QGcdMod

50. Modular Operations Description ( Q Zn Q' ) Polynomial inversion modulo Zn. ( Q1 Q2 Zn Q' ) Polynomial GCD modulo Zn for univariate polynomials. The result is made monic. ( symb id id symb' ) ( symb id id {} ) Internal SOLVE. ( symb id symb' ) ( symb id {} ) Like ISOL1 if isolag is set. Otherwise returns the list of all found solutions. ( Lpoly Lidnt Lidnt sols ) If no extension in Lpoly, calls ALG48 GSOLVE Otherwise, solves by Bezout "Gaussian" elimination. In the latter case, if system seems underdetermined, Lidnt is truncated. Then the system must be exactly determined and polynomials must be prime together. ( meta of roots list of roots ) Drops tagged roots. ( poly-l {r1...rk} # P[r1...rk] ) Top-level call. Poly-l might be a matrix. ( P { r } P[..r..] ) ( Q { F1 mult1 .. Fn multn } ) ( Q F1 mult1 .. Fn multn #2n ) Full square-free factorization of object. The result is given as a Meta object. ( ob ob %1 #2 ) Square free factorization of unknown (?) object. See MSQFF. ( Z Z1 mult1 .. Zn multn #2n ) Full factorization of an integer.

4C5006 4C6006 4C7006

ISOL1 ISOLALL ISOL2ext

4C8006

BEZOUTMSOLV

4C9006 4CA006 4CB006 4CC006 4CD006

ROOT{}N MHORNER MHORNER1 SQFFext MSQFF

4CE006

%1TWO

4CF006

MZSQFF

50.1. Reference Addr. 4D0006 Name MZSQFF1

397 Description ( Meta curfac %n newfac T Meta curfac %n+1 ) ( Meta curfac %n newfac F Meta' newfac %1 ) Adds integer factor to factor list. If the factor is the same as the last time, only the multiplicity is increased. ( P Meta ) Full square-free factorization of a polynomial with a recursive call on the GCD of all coefcients. ( P-list S1 %1 ..Se-1 %e-1 %e ee Te Re ) Square-free factorization. ( ob {} ) Gets list of all ids present in ob. ( symb symb x lvarnx lvarx ) Finds variable of symb depending on current variable and other variable. Using LVAR is impossible here because of sqrt. ( ob flag ) Returns TRUE if symb is polynomial with respect to current variable. ( symb1 symb2 symb1 symb2 flag ) Returns TRUE if symb1 and symb2 are polynomial with respect to current variable. ( symb symb flag ) Returns TRUE if symb is independent of current variable. ( ob {} ) Recursive search of all variables. ( o #depth o lvar ) ( symb symb lvar ) ( ob ob {} ) List of variables. Square roots are included in the list of rational operators.

4D2006

MLISTSQFF

4D3006

METASQFFext

4DE006 4DF006

LIDNText LVARXNXext

4E0006

ISPOLYNOMIAL?

4E1006

2POLYNOMIAL?

4E2006

VXINDEP?

4E4006 4E5006 4E6006 4E7006

RLVARext LLVARDext VXLVARext LVARext

398 Addr. 4E8006 Name VX>LVARext

50. Modular Operations Description ( ob ob {} ) Like LVARext but the current variable is added using >HCOMP. Square roots are included in the list of rational operators. ( {} {}' ) If VX is in the list then moves it to the beginning of the list. Otherwise does nothing. ( {} {} ) If VX is in the list then moves it at the beginning. Otherwise VX is added to the beginning of the list. ( symb lidnt symb lidnt lvar ) lvar is the list of variables in symb, but elements of lidnt are moved to the beginning of lvar. ( {} ) Returns the list of rational operator with sqrt appended to the list. ( {} ) List of basic "rational" operators without square root. ( {} ) List of basic "rational" operators with square root. ( ob listop lidnt ) ( Meta listop lidnt ) Determines list of variables in ob (or Meta) using the given list of basic "rational" operators. ( ob # ) Returns the max number of embedded lists in ob. ( objet # depth ) ( ob ob ' ) Trims object.

4E9006

VX>

4EA006

VX!

4EC006

LIDNTLVAR

4ED006

LISTOPRAC

4EE006

LISTOPext

4EF006

LISTOPSQRT

4F0006

LVARDext

4F2006

DEPTHext

4F3006 4F6006

DEPTHOBJext TRIMOBJext

50.1. Reference Addr. 4F7006 Name NEWTRIMext

399 Description ( Q Q ) Recursively tests if Q is a list of one constant element. This is much faster than TRIMOBJext and sufcient for the output of programs which are trimmed on the y. ( meta {} ) Equivalent to {}POLY TRIMOBJext. ( ob ob' ) Trims small numbers (less than epsilon). ( v1 v2 flag ) Returns TRUE if v1 is lexicographically after v2. ( Q Z Q' ) ( P P Z T depth ) ( P P ? F #0 ) Step 1 for gcdheu: Returns FALSE if gcdheu can not be applied (e.g. if P contains irrquads). Returns TRUE otherwise, Z is the max of all integers of P or 2*max if there are complex in P. ( A B a b c pr[pgcd] A'/G' B'/G' flag ) Heuristic GCD.

4F8006 4F9006 0E9006

>POLYTRIM ELMGext IsV>V?

0EB006 104006

PZadic LISTMAXext

0EC006

GCDHEUext

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
Addr. 237006

Reference
Name SIGNE Description ( symb sign ) Compute the sign table of the expression with respect to the current variable. Internal version of the UserRPL command SIGNTAB. ( expr sign ) Sign table of a polynomial or rational expression. ( sign ) Returns undened sign table. ( sign ) Returns always positive sign table. 400

0DC007

SIGNE1ext

0DE007 0DF007

SIGNUNDEF SIGNPLUS

51.1. Reference Addr. 0E0007 0E1007 0E2007 0E3007 0E4007 0E5007 0E6007 0E7007 0E8007 0E9007 0EA007 0EB007 0EC007 0ED007 0DB007 Name SIGNMOINS SIGNELN SIGNEEXP SIGNESIN SIGNECOS SIGNETAN SIGNEATAN SIGNESQRT SUBSIGNE SIGNERIGHT SIGNELEFT >SIGNE SIGNE> SIGNMULText POSITIFext

401 Description ( sign ) Returns always negative sign table. ( sign sign ) Returns ln of a sign table. ( sign sign' ) Returns exp of a sign table. ( sign sign' ) Returns sin of a sign table. ( sign sign' ) Returns cos of a sign table. ( sign sign' ) Returns tan of a sign table. ( sign sign' ) Returns atan of a sign table. ( sign sign' ) Returns sqrt of a sign table. ( sign min max sign' ) Truncates a sign table. ( sign ob sign' ) Places ob at the end of a sign table. ( sign ob sign' ) Places ob at the beginning of a sign table. ( sign sign' ) Prepends { -innity ? } to a sign table. ( sign sign' ) Appends { ? +innity } to a sign table. ( sign1 sign2 sign' ) Multiplies two sign tables. ( ob ob flag ) Tries to determine if ob is positive. In internal representation, this depends on increaseag so that x-1 is positive if increaseag is cleared, negative otherwise, because x is assumed to tend to +innity or zero. ( ob ob flag ) Returns sign of an expression. Error if unable to nd sign.

0EE007

ZSIGNECK

402 Addr. 0F0007 Name ZSIGNE

51. Sign Tables Description ( ob zint ) Returns sign of an expression. zint=1 for +, -1 for -, 0 for undef. Expression does not need to be polynomial/rational. ( meta zint ) Returns sign of a meta symbolic. zint=1 for +, -1 for -, 0 for undef. Expression does not need to be polynomial/rational. ( symb inf sup vx symb inf sup vx flag ) Checks for singularities in expr.

0F1007

zsigne

07D007

CHECKSING

Chapter 52 Errors
The CAS error messages all have numbers starting with DE. You can get a full list in Appendix E. Entries ERABLEERROR and GETERABLEMSG add DE00 to the message number, so you only specify the last two digits of the message number. You can naturally use the error commands described in Chapter 22 with the CAS errors, using the full error numbers.

52.1
Addr. 57E006 57D006 090006 091006 092006 57F006 580006

Reference
Name ERABLEERROR GETERABLEMSG ErrInfRes ErrUndefRes ErrBadDim CANTFACTOR TRANSCERROR Description ( # ) Calls CAS Error. ( # $ ) Get string in erable messages table. Error 305h Generates "Innite Result" error. Error 304h Generates "Undened Result" error. Error 501h Generates "Invalid Dimension" error. Error DE1Ch Generates "Unable to nd factor" error. Error DE20h Generates "Not reducible to a rational expression" error. Error DE21h Generates "Non unary operator" error. Error DE26h Generates "CAS internal error" error. 403

581006 582006

NONUNARYERR INTERNALERR

404 Addr. 583006 Name INVALIDOP

52. Errors Description Error DE28h Generates "Operator not implemented (SERIES)" error. Error DE2Ah Generates "No solution found" error. Error DE2Ch Generates "No solution in ring" error. Error DE32h Generates "No name in expression" error. Error DE35h Generates "Integer too large" error. Error DE36h Generates "Unable to nd sign" error. Error DE46h Generates "Negative integer" error. Error DE47h Generates "Parameter is cur. var. dependent" error. Error DE49h Generates "Non polynomial systrem" error. Error DE4Dh Generates "Complex number not allowed" error. Error DE4Eh Generates "Polyn. valuation must be 0" error. Error DE4Fh Generates "Mode switch not allowed here" error. Error DE50h Generates "Non algebraic in expression" error. ( seco action ) ( ob ) Execute object if display ag is set.

584006 585006 586006 587006 0EF007 588006 589006

ISOLERR NONINTERR INTVARERR Z>#ERR SIGNEERROR Z<0ERR VXINDEPERR

58A006 58B006

NONPOLYSYST COMPLEXERR

58C006

VALMUSTBE0

58D006

SWITCHNOTALLOWED

119007

NONALGERR

58E006 58F006

ERR$EVALext Sys1IT

Chapter 53 CAS Conguration


The entries in this chapter provide ways to congure the CAS operations. The congurations that can be done here are the same that can be done by the user via ags or the MODES input form.

53.1
Addr. 08F007 090007 091007 092007

Reference
Name CFGDISPLAY NEWVX NEWMODULO SWITCHON Description ( ) Display current conguration of the CAS. ( ) Input new current variable from the user. ( ) Input new modulo from the user. ( #flag ) Asks the user if a certain mode may be switched on by toggling system ag #ag. Errors if the user does not want to switch. ( #flag ) Asks the user is a certain mode may be switched off by toggling system ag #ag. Error if the user does not want to switch. ( # # $ ) Find the name of a ag. ( ) Internal version of User PUSH command: stores the current ag settings and path in the CASDIR/ENVSTK variable.

093007

SWITCHOFF

094007 1DC007

FLAGNAME (PUSHFLAGS)

405

406 Addr. 1DD007 Name (POPFLAGS)

53. CAS Conguration Description ( ) Internal version of User POP command: pops the last pushed ag settings and path from the CASDIR/ENVSTK variable. ( ) Turns complex mode on. Depending on system ag 120, the user is asked rst. ( ) Turns complex mode off. Depending on system ag 120, the user is asked rst. ( ) Turns exact mode on. Depending on system ag 120, the user is asked rst. ( ) Turns exact mode off. Depending on system ag 120, the user is asked rst. ( ) Set complex mode, refresh conguration display. ( ) Set complex mode. ( flag ) Test complex mode. ( ) Set real mode, refresh conguration display. ( ) Set real mode. ( ) Set exact mode, refresh conguration display. ( ) Set exact mode and gcd mode. ( ) Set numeric mode, refresh conguration display. ( ) Clear exact mode. ( flag ) Test exact mode.

095007

COMPLEXON

096007

COMPLEXOFF

097007

EXACTON

098007

EXACTOFF

099007

COMPLEXMODE

09A007 09B007 09C007 09D007 09E007 09F007 0A0007

SETCOMPLEX COMPLEX? REALMODE CLRCOMPLEX EXACTMODE SETEXACT NUMMODE

0A1007 0A2007

CLREXACT EXACT?

53.1. Reference Addr. 0A3007 0A4007 0A5007 Name STEPBYSTEP NOSTEPBYSTEP VERBOSEMODE

407 Description ( ) Set step by step ag, refresh display. ( ) Clear step by step ag, refresh display. ( ) Set verbose mode, refresh conguration display. ( ) Set silent mode, refresh conguration display. ( ) Set recursive mode, refresh conguration display. ( ) Set nonrecursive mode, refresh conguration display. ( ) Set positive mode, refresh conguration display. ( ) Set positive mode. ( ) Set positive innity mode, refresh conguration display. ( ) Set positive innity mode. ( ) Set full data mode, refresh conguration display. ( ) Set sparse mode, refresh conguration display. ( ) Set rigorous mode, refresh conguration display. ( ) Set sloppy mode, refresh conguration display.

0A6007

SILENTMODE

0A7007

RECURMODE

0A8007

NONRECMODE

0A9007

PLUSAT0

0AA007 0AB007

SETPLUSAT0 PLUSATINFTY

0AC007 0AD007

CLRPLUSAT0 SPARSEDATA

0AE007

FULLDATA

0AF007

RIGORMODE

0B0007

SLOPPYMODE

408 Addr. 0B1007 1D2006 1D4006 1D5006 Name SLOPPY? SAVECASFLAGS


RESTORECASFLAGS

53. CAS Conguration Description ( flag ) Test sloppy mode. ( ) Saves CAS ags and current var. ( ) Restore CAS ags and current var. ( ) Execute next runstream object with ag protection. ( Z ) Fetch MODULO from the home directory. ( sym ) Fetch PERIOD from the home directory. ( id ) Fetch VX from home directory. ( ob ) Store object in VX. ( ob ) Store object in MODULO. ( % ) Fetch EPS from home directory. ( id id id T ) ( id id F ) Test if id is in the REALASSUME list. ( id ) Add idnt to the list of real var. ( ) Reset CAS cong. ( %version ) CAS version number.

CASFLAGEVAL

0C2007 0C3007 0C4007 0C5007 0C6007 0C7007 0C8007

RCLMODULO RCLPERIOD RCLVX STOVX STOMODULO RCLEPS ISIDREAL?

0C9007 0CA007 1D0006

ADDTOREAL RESETCASCFG VERNUMext

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
Addr. 1D1006

Reference
Name MENUXYext Description ( #2 #1 {} ) Make list of Erable commands between the given numbers. ( $6...$1 ) If the CAS quiet ag is not set, displays the six strings as menu keys. Otherwise does nothing. ( prg flag ) Return best CHOOSE command. ( {} ) Offers a selection to the user. If Flag -117 is set, only installs a menu. If not, offer a CHOOSE box. ( {} ) Menu for CAS. ( {} ) Base algebra menu. ( {} ) Complex operations menu. ( {} ) Trigonometric operations menu. ( {} ) Matrix operations menu. 409

08D007

MENUext

0B2007 0B3007

MENUCHOOSE? MENUCHOOSE

0B4007 0B5007 0B6007 0B7007 0B8007

MENUGENE1 MENUBASE1 MENUCMPLX1 MENUTRIG1 MENUMAT1

410 Addr. 0B9007 0BA007 0BB007 0BC007 Name MENUARIT1 MENUSOLVE1 MENUEXPLN1 MENUDIFF1

54. CAS Menus Description ( {} ) Arithmetic operations menu. ( {} ) Solver menu. ( {} ) Exponential and logarithmic operations menu. ( ) Differential calculus menu.

Chapter 55 Internal Versions of User RPL Commands


The entries in this chapter are the closest correspondents to User RPL commands.

55.1
Addr. 218006 1D6006

Reference
Name ISPRIME FLAGEXPAND Description ( z/% %0/%1 ) Internal ISPRIME. ( symb symb' ) Internal xEXPAND. Expands symbolic expression. ( symb symb' ) ( z symb ) Internal xFACTOR. Factors symbolic or number. ( symb {} symb' ) Internal xSUBST for the case that level 1 is an array or a matrix. ( symb symb' symb'' ) Internal xSUBST for the case that level 1 is a symbolic. ( symb id symb' ) Internal xSUBST for the case that level 1 is an id or a lam. ( symb symb' ) Internal xINTVX.

1D8006

FLAGFACTOR

1D9006

FLAGLISTEXEC

1DA006

FLAGSYMBEXEC

1DB006

FLAGIDNTEXEC

1DC006

FLAGINTVX

411

412 Addr. 1DD006 1DE006 1DF006 1E0006 1E1006 1E2006 1E4006 1E5006 1E6006 Name DERVX SOLVEXFLOAT SYMLIMIT
FLAGMATRIXLIMIT

55. Internal Versions of User RPL Commands Description ( symb symb' ) Internal xDERVX. ( % {} ) Internal xSOLVEVX for a oat. ( symb symb' symb'' ) Internal xLIMIT for scalars. ( [] symb []' ) Internal xLIMIT for matrices. ( symb symb' ) Internal xTAYLOR0. ( symb id z {} symb' ) Internal xSERIES. ( symb ) Internal xPLOTADD. ( symb1 symb2 symb3 symb4 ) Internal xIBP. ( symb1 symb2 symb3 symb4 ) Internal xPREVAL. Evaluates symb1 at the points symb2 and symb3 and takes the difference. ( [] id symb' ) Internal xRISCH for matrix arguments. ( symb id symb' ) Internal xRISCH for non-matrix argumetns. ( symb id symb' ) Internal xDERIV. ( symb symb' ) Internal xLAP. ( symb symb' ) Internal xILAP. ( symb symb' symb'' ) Internal xDESOLVE. ( symb1 symb2 symb3 ) Internal xLDEC. ( symb symb' ) Internal xTEXPAND. ( symb symb' ) Internal xLIN.

TAYLOR0 FLAGSERIES PLOTADD FLAGIBP FLAGPREVAL

1E7006 1E8006 1E9006 1EA006 1EB006 1EC006 1ED006 1EF006 1F0006

MATRIXRISCH FLAGRISCH FLAGDERIV FLAGLAP FLAGILAP FLAGDESOLVE FLAGLDSSOLV FLAGTEXPAND FLAGLIN

55.1. Reference Addr. 1F1006 1F2006 1F3006 1F4006 1F5006 1F6006 1F7006 1F8006 1F9006 1FA006 1FB006 1FC006 1FD006 1FE006 1FF006 200006 201006 206006 207006 Name FLAGTSIMP
FLAGLNCOLLECT

413 Description ( symb symb' ) Internal xTSIMP. ( symb symb' ) Internal xLNCOLLECT. ( symb symb' ) Internal xEXPLN. ( symb symb' ) Internal xSINCOS. ( symb symb' ) Internal xTLIN. ( symb symb' ) Internal TCOLLECT. ( symb symb' ) Internal xTRIG. ( symb symb' ) Internal xTRIGCOS. ( symb symb' ) Internal xTRIGSIN. ( symb symb' ) Internal xTRIGTAN. ( symb symb' ) Internal xTAN2SC. ( symb symb' ) Internal xHALFTAN. ( symb symb' ) Internal xTAN2SC2. ( symb symb' ) Internal xATAN2S. ( symb symb' ) Internal xASIN2T. ( symb symb' ) Internal xASIN2C. ( symb symb' ) Internal xACOS2S. ( z1 z2 z3 z4 ) Internal xIDIV2. ( symb1 symb2 symb3 symb4 ) Internal xDIV2.

FLAGEXPLN FLAGSINCOS FLAGTLIN FLAGTCOLLECT FLAGTRIG FLAGTRIGCOS FLAGTRIGSIN FLAGTRIGTAN FLAGTAN2SC FLAGHALFTAN FLAGTAN2SC2 FLAGATAN2S FLAGASIN2T FLAGASIN2C FLAGACOS2S STEPIDIV2 FLAGDIV2

414 Addr. 208006 Name FLAGGCD

55. Internal Versions of User RPL Commands Description ( symb1 symb2 symb3 ) Internal xGCD for the case with two symbolica arguments. ( symb1 symb2 symb3 symb4 symb5 ) Internal xEGCD for polynomials. ( symb1 symb2 symb3 symb4 symb5 ) Internal polynomial xABCUV. ( z1 z2 z3 z4 z5 ) Internal integer xIABCUV. ( {} {} symb ) Internal xLGCD. ( symb1 symb2 symb3 ) Internal xLCM. ( symb1 symb2 symb3 symb4 ) Internal xSIMP2. ( symb symb' ) Internal xPARTFRAC. ( symb symb' ) Internal xPROPFRAC. ( P(X) r P(X+r) ) Internal xPTAYL. ( symb1 symb2 symb3 symb4 symb5 ) Internal xHORNER. ( z z' ) Internal xEULER. ( A1 A2 A3 ) Internal xCHINREM. ( A1 A2 A3 ) Internal xICHINREM. ( symb id {} ) Internal xSOLVE for single equations. ( [] []' {}'' ) Internal xSOLVE for arrays of equations. ( symb id {} ) Internal xZEROS for single equations.

209006

PEGCD

20B006

ABCUV

20C006 20D006 20E006 20F006 210006 211006 212006 213006

IABCUV FLAGLGCD FLAGLCM FLAGSIMP2 FLAGPARTFRAC FLAGPROPFRAC FLAGPTAYL FLAGHORNER

214006 216006 217006 219006 21A006 21B006

EULER FLAGCHINREM ICHINREM SOLVE1EQ SOLVEMANYEQ ZEROS1EQ

55.1. Reference Addr. 21C006 21D006 21E006 21F006 220006 223006 229006 22A006 22B006 22C006 22E006 22F006 230006 231006 232006 233006 234006 235006 236006 Name ZEROSMANYEQ FCOEF FROOTS FACTORS DIVIS rref MADNOCK SYSTEM VANDERMONDE HILBERTNOCK CURL DIVERGENCE LAPLACIAN HESSIAN HERMITE TCHEBNOCK LEGENDRE LAGRANGE FOURIER Description ( [] []' {} ) Internal xZEROS for arrays of equations. ( [] symb ) Internal xFCOEF. ( symb [] ) Internal xFROOTS. ( symb {} ) Internal xFACTORS. ( symb {} ) Internal xDIVIS. ( M A M' ) Internal xrref. ( M symb1 []' []'' symb3 ) Internal xMAD. ( [] []' []'' {} []''' ) Internal xLINSOLVE. ( {} M ) Internal xVANDERMONDE. ( z M ) Internal xHILBERT. ( [exprs] [vars] [] ) Internal xCURL. ( [exprs] [vars] symb ) Internal xDIV. ( [expr] [vars] symb ) Internal xLAPL. ( symb A M A' A'' ) Internal xHESS. ( z symb ) Internal xHERMITE. ( %degree symb ) Internal xTCHEBYCHEFF. ( z symb ) Internal xLEGENDRE. ( A symb ) Internal xLAGRANGE. ( symb z C% ) Internal xFOURIER.

415

416 Addr. 238006 239006 23A006 23B006 23C006 23D006 23E006 23F006 241006 242006 243006 244006 245006 Name TABVAR FLAGDIVPC FLAGTRUNC FLAGSEVAL XNUM REORDER USERLVAR USERLIDNT ADDTMOD MADDTMOD SUBTMOD MSUBTMOD MULTMOD

55. Internal Versions of User RPL Commands Description ( symb symb {{}} grob ) Internal xTABVAR. ( symb1 symb2 z symb3 ) Internal xDIVPC. ( symb1 symb2 symb3 ) Internal xTRUNC. ( symb symb' ) Internal xSEVAL. ( symb symb' ) Internal xXNUM. ( symb id symb' ) Internal xREORDER. ( symb symb [] ) Internal xLVAR. ( symb [] ) Internal xLNAME. ( symb1 symb2 symb3 ) Internal xADDTMOD for scalars. ( M M' M'' ) Internal xADDTMOD for matrices. ( symb1 symb2 symb3 ) Internal xSUBTMOD for scalars. ( M M' M'' ) Internal xSUBTMOD for matrices. ( symb1 symb2 symb3 ) Internal xMULTMOD.

Chapter 56 Miscellaneous
In this chapter are listed the entries that did not t in any of the previous chapters.

56.1
56.1.1
Addr. 579006 57A006 57B006 57C006

Reference
Verbose Mode Display Routines
Name Verbose1 Verbose2 Verbose3 VerboseN Description ( $ ) Display message on line 1 if verbose mode on. ( $ ) Display message on line 2 if verbose mode on. ( $ ) Display message on line 3 if verbose mode on. ( $ # ) Display message on given line if verbose mode on.

56.1.2
Addr. 257006 258006 259006 25A006 25B006 25C006 25D006 25E006

Evaluation
Name EvalNoCKx* EvalNoCKx+ EvalNoCKxEvalNoCKx/ EvalNoCKx EvalNoCKxCHS EvalNoCKxINV EvalNoCKxMOD Description ( ob ob' ( ob ob' ( ob ob' ( ob ob' ( ob ob' ( ob ob' ( ob ob' ( ob ob' 417 ) ) ) ) )

ob'' ob'' ob'' ob'' ob'' ) ) ob''

418 Addr. 25F006 260006 261006 262006 263006 264006 265006 Name
EvalNoCKxPERM EvalNoCKxCOMB

56. Miscellaneous Description ( ob ob' ob'' ) ( ob ob' ob'' ) ( ob ob' ob'' ) ( ob ob' ob'' ) ( ob ob' ob'' ) ( ob ob' ob'' ) ( fnct x {} {}' ) Table of values.

EvalNoCKxOR EvalNoCKxAND EvalNoCKxXOR


EvalNoCKxXROOT

TABVALext

56.1.3
Addr. 266006

Conversion
Name TOLISText Description ( o1..on #n Lvar Q1..Qn ) Convert meta of symbolic objects to internal form. ( Lvar Meta L L' ) Conversion of elements of Meta objec to user format. Meta does not contain the #n number of element. L is the list of depth of the elements of Meta. For example to convert a polynomial, a vector and a matrix: Lvar = { X } Meta = { Z1 Z3 } { Z0 Z1 } { { Z1 { Z1 Z0 } } } L = { #0 #1 #2 } L' = { 'X+2' { 0 1 } { { 1 X } } }.

267006

FROMLISText

56.1.4
Addr. 074007 073007

Qpi
Name QPI QpiZ Description ( ob ob' ) Internal xXQ. ( ob symb ) Calls Qpi% and converts the resulting (real) integers into zints.

56.1. Reference Addr. 075007 076007 Name QpiSym QpiArry

419 Description ( symb symb' ) Internal xXQ for symbolics. ( [] []' ) Internal xXQ for arrays. Converts each element of the array. ( {} {}' ) Internal xXQ for lists. Converts each element of the list. ( %/C% symb ) Internal xXQ for real and complex numbers. ( % symb ) xXQ for reals, but does not convert numbers to zints. ( %' %' %'' ) Tries to nd a square number which is a factor of the argument. The algorithm only tries numbers smaller than 10242-1 and assumes that % is an integer. The returned results are such that %=(%')2*%''. For numbers which do not contain a square factor, %'=1 and %''=%. ( % %' %'' ) Approximates a real number with a fraction. Returns numerator %' and denominator %''. The accuracy of the approximation is determinated by the current display format.

077007

QpiList

078007 079007 07A007

Qpi Qpi% GetRoot

07B007

Approx

56.1.5
Addr. 2E2006 2E3006 2E4006 2E5006 2E6006 2E1006

Innity
Name INFINIext MINUSINFext PLUSINFext ?ext POSINFext TESTINFINI Description ( '' ) ( '-' ) ( '+' ) '?' Pushed the undened symbolic. ( symb symb # ) Returns #1 if the symbolic contains ''. ( ob ob flag ) Test if object contains innity.

420 Addr. 2E7006 Name POSUNDEFext

56. Miscellaneous Description ( symb symb # ) Returns #1 if the symbolic contains the undened symbolic '?'.

56.1.6
Addr. 2EA006 2EB006 2F1006 2E8006 2F2006 2E9006 2F4006 2F3006 2F5006 2F6006 2EC006 2F9006 2FA006 2EE006 2ED006 2EF006 2F0006 2F8006 2F7006

Built-In Constants
Name pi metapi meta-pi pisur2 metapi/2 pisur-2 meta-pi/2 metapi/4 meta-pi/4 pifois2 'xPI base_ln meta_e 'xi metai ipi metaipi metapi*2 deuxipi Description ( ' ' ) ( #1 ) ( xNEG #2 ) ( ' /2' ) ( 2 x/ #3 ) ( '- /2' ) ( 2 x/ xNEG #4 ) ( 4 x/ #3 ) ( 4 x/ xNEG #4 ) ( '2* ' ) ( xPI ) ( 'e' ) ( e #1 ) ( xi ) ( i #1 ) ( 'i* ' ) ( i x* #3 ) ( 2 x* #3 ) ( '2*i* ' )

56.1.7
Addr. 3F0006

List Application
Name DIVOBJext Description ( {o1...on} ob {o1/ob...on/ob} ) Division of all elements of a list by ob. Tests if ob=1. ( {o1...on} ob {o1/ob...on/ob} ) LOPDext calls QUOText for the division, unlike DIVOBJ which calls RDIVext.

3F2006

LOPDext

56.1. Reference Addr. 269006 Name LOP1ext

421 Description ( {} ob binop {}' ) Applies non-recursively << ob binop >> to the elements of the list. ( {} ob binop {}' ) Applies recursively << op binop >> to the elements of the list (not the list elements themselves). ( ob {} {}' ) Multiplies each element of the list by the given object. ( ob {} ob' ) ( ob {} {}' ) The list should be of the form { 'X=1' 'Y=2' ... } in the rst case or { 'X=1' 'X=2' } in the second case. In the rst case, all occurences of X in ob are replace by 1, or Y by 2, etc. In the second case ob is evaluated with X=1, X=2 successively. ( {} objet {}' ) ( {} prog {} ) Executes prog on each element of ob. ( symb prg symb ) ( composite composite ) Applies 1LAM non-recursively to all elements of the list. ( ob ob' ) Applies prg to ob, recursively for lists. prg is fetched from runstream.

26A006

LOPAext

10F006

LOPMext

45F006

LISTEXEC

460006 461006 268006 26B006

LISTEXEC1 SECOEXEC PFEXECext LISTSECOext

26D006

CK1TONOext

56.1.8
Addr. 167006 168006 165006

Irrquads
Name TYPEIRRQ? DTYPEIRRQ? QXNDext Description ( ob flag ) Is ob an irrquad? ( ob ob flag ) DUP, then TYPEIRRQ?. ( irrq a b c ) b=0 and c=1 if stack level 1 is not an irrq.

422 Addr. 166006 2D8006 508006 Name NDXQext


IRRQ#ULTIMATE

56. Miscellaneous Description ( a b c irrq ) ( ob # c ) Finds depth and returns ultimate c of an irrq. ( irrq irrq' ) irrq-conjugate of an irrq. This is not the complex conjugate. ( irrq irrq sign ) Finds the sign of an irrq. Work always if irrq is made of Z. ( Zirr a2-b*c2 ) Irrq-norm of an irrquad. This is not the complex modulus. ( :: x<< a b c x>> { fact1 mult1 ... factn multn } ) Factorization of irrquads and Gauss integers. ( o1 o2 a1 b1 c1 a2 b2 c2 ) Returns irrquad decomposition of o1 and o2. with either c1=c2 or c1 and c2 have no factors in comon. c1<c2, ordering handled by LESSCOMPLEX? is made by type, then by CRC. ( ob {} {}' ) Add the C-part of all irrquads of object to the list.

QCONJext

509006

QABSext

51A006

QNORMext

4D4006

SECOSQFFext

124006

PREPARext

2DA006

LISTIRRQ

56.1.9
Addr. 3E7006 3FB006

Miscellaneous
Name PSEUDOPREP HSECO2RCext Description ( o2 o1 o2*a1.n o1 a1.n ) ( ob ob' ) Conversion of constants from internal to user form. ( seco symb ) Back conversion of complex. polarag should be disabled if not at the top level of rational expressions.

3FC006

SECO2CMPext

56.1. Reference Addr. 3FF006 Name VALOBJext

423 Description ( # {..{Q}..} {var1..varn} {..{ob}..} ) Back conversion of objects embedded at depth # in lists. Simplies var1..varn. ( # {..{Q}..} {var1..varn} {..{ob}..} ) Back conversion of objects embedded at depth # in lists. Does not simplify var1..varn. Conversion is done in asc. power if positivfag is set, which is useful for SERIES and LIMIT commands. ( P # symbpoly ) LAM2 must contain Lvar, # is the depth. ( # Meta_list Meta_symb ) LMA2 must contain Lvar, LAM1 is modied. ( ob ob ) LAM2 must contain Lvar, LAM1 is modied. ( ob Meta_symb ) LAM2 must contain Lvar, LAM1 is modied. ( symb idnt symb' ) Tries to nd idnt such that symb=0. Return a solution as an equality 'idnt=..' in symb'. ( ob ob 1 ) Returns number 1 of the selected type. The symbolic/ROMPTR one looks very strange it is used to avoid innity0/undef0 to return 1. ( ob ob' ) prg is fetched from the stack. Looks for all d1, d2, ... at the beginning of the name of idnt to determine if idnt represents a derivative of a user function. Stops if at a time the stripped idnt is in the current directory. Example 'd2d1Y' returns { #2 } << >> if 'd2d1Y' is not dened and 'd1Y' is dened as << >> or { #2 #1 } 'Y' if d2d1Y d1Y and Y are not dened.

401006

VAL2ext

402006 403006 404006 405006 45C006

INVAL2 METAVAL2 VAL1 VAL1M IDNTEXEC

121006

MP0

26C006

rpnQOBJext

424 Addr. 29D006 Name SIMPIDNT

56. Miscellaneous Description ( idnt ob ) Evaluates idnt (looks recursively for its content if dened). Does not error for circular denition, but displays a warning. ( idnt/lam ob ) Recursive content of an idnt. LAM1 to LAM3 must be bound. ( ob2 ob1 ob1/ob2 ) Simplied fraction (internal). ( ob2 ob1 ob2/ob1 ) Simplied fraction (internal). ( C2 C1 C1 C2_mod_C1 ) ( l1...ln #n-1 l1'...ln' #n-1 ) ( p p/pgcd pgcd ) ob is the gcd of all constant coefcients of P (integer, Gauss integers, irrquads with the implementation of the "gcd" for irrquads). ( ob ob zint ) PPZ with further check to ensure returning a zint. ( a z a mod z ) ( P r P[r] ) ( P r P[r] ) P must be a list polynomial. ( {} {} flag ) Returns TRUE if one element of {} is a symb containing a sqrt. ( symb flag ) ( symb flag ) ( symb ) Stores antiderivative in PRIMIT variable. ( symb symb flag ) ( symb n cn ) Computes n-th Fourier coefcient of a 2 periodic function.

29F006

RCL1IDNT

2A7006 2A8006 2B6006 2BD006 2BE006

SWPSIMPNDXF SIMPNDXFext CMODext SQFF2ext PPZ

117007

PPZZ

2BF006 2C0006 2C1006 2C6006

PZHSTR HORNER1ext PEval SQRT_IN?

2C7006 2C9006 2CA006 2CB006 2D4006

IS_SQRT? IS_XROOT? STOPRIMIT CONTAINS_LN? FOURIERext

56.1. Reference Addr. 2D9006 Name LESSCOMPLEX?

425 Description ( ob1 ob2 ob1 ob2 flag ) Compares objects by type and then by CRC. ag is true if ob1 is less complex than ob2 (ob1>ob2). If ob1 or ob2 is an irrq, nd rst ultimate type of ob1 and ob2. If these ultimate types are equal sort is done by comparing the << depth. ( {} ) Table of special COS values (k*pi/12). ( {} ) Table of special TAN values (k*pi/12). ( symb nonrat_prg rat_prg symb ) Applies linearity. nonrat_prg is applied for a non rational part symb symb. rat_prg is applied for a rational part symb symb. Linearity is applied on symb. ( A B P Q R ) Writes a fraction A/B as E[P]/P*Q/E[R]. Q and positive shifts of R are prime together. ( P Q R P R Y T ) ( P Q R F ) Solves P = Q E[Y] - R Y for Y. ( fr Z ) Tests if a fraction (internal rep) is even/odd/none. Z=1 if even, -1 if odd, 0 if neither even nor odd. ( fraction-l N D % ) Extract trivial power of fraction. ( ob Meta ) Factorization of an extension.

2DD006 2DE006 101007

TABLECOSext TABLETANext LINEARAPPLY

106007

A/B2PQR

107007

GOSPER?

0CB007

FRACPARITY

0D5007 4D1006

FR2ND% MSECOSQFF

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 congure 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 efcient programming (and even for efcient use) it is essencial to make some key assignments. The program also attaches library 257. -62 SF 257 ATTACH 429

430

A. Development Tools

A.1

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 ve user-accessible commands. The rst command, nop, does nothing :-). Probably, there was a command in that position before, but it was removed, and another command that does nothing was put there not to change the other rompointers. The other four commands, fortunately, are sometimes useful :-) (if not directly then through the Emacs library). The GETADR command returns the address of an entry. Just put the name of the entry (a string) in level one and run it. The inverse operation is done by GETNAME: give it an address, and it will return the name of the entry. If you do not know the exact name of an entry, the last two commands will help you. Put a string with the rst few letters of the command in level one, run GETNAMES and, voil, a list with the names of all commands that start with those letters is returned. The last command, GETNEAR, is even more powerful: give it a string, and all commands whose names contain that string (even if in the middle of the command) will be returned.

A.2

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: raut@math.fu-berlin.de). The latest version is 9.2001. This library simplies the assignment, deletion and recalling of keys, but, most importantly, allows a key to behave differently if it is pressed longer than usual or double pressed. You will nd several commands inside this library. The A?D command

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 (briey) and then the key. A longer press will return a list of all the keys assigned. The commands above are just other ways to do what was already possible with the built-in commands. But the real power is in the IfE?P, IfD and IfL commands. The rst serves two functions: it allows a key to have different meanings when in edit mode and when not, or to have different meanings when in program mode and when not. To use it, put the object to be run in edit or program mode in level two, the object to be run in normal mode in level one, and press IfE?P. A short press will create a program that evaluates the object in level two if the calculator is in edit mode, or the object in level one if not. A longer press does the same, but the test is based on whether program entry mode is active or not. The IfD and IfL commands are similar. To use IfD, put in level two the object to be run if the key is pressed twice (like with a computer mouse) double pressed and put in level one the object to be run if the key is pressed once. Run IfD, and you will have a single program that executes one of the objects according to how the key was pressed. Note that assignments produced with IfD will slightly delay execution on a single keypress, since the calculator must wait to see if the double press will happen or not. The command IfL is similar, but it allows different actions based on how long the key is pressed: you have seen this behaviour in the A?D command. The object to be run in a longer press is in level two. All the If commands have an extra feature. Any of the two objects in the stack can be a real number in the form rc.p, where r is the row, c is the column and p is the plane (normal, left-shifted, right-shifted, left-shift-hold, etc.). In the program created with the If commands, these numbers will be replaced by the standard key assignment of the corresponding key. This is really useful for making assignments which do not disturb the normal function of a key but just add functionality in a special mode or keypress technique. If you give a real number that is not a valid keycode, it will be replaced by a command to make a beep. Two other commands can sometimes be useful: TO? inserts the System RPL command TakeOver in the beginning of the program when the key

432

A. Development Tools

is pressed shortly. This is necessary if you want the command to be executed while the command line is active. A longer press inserts UnlockAlpha in the beginning of the program, useful when it is assigned to an alpha-shifted key. Finally, K&SA recalls the keycode and standard assignment for any key. This is used when you want to add new functionality to a key. When this standard assignment is a command in a library (that is, a ROM Pointer, also called a XLIB name), the pointer is recalled to level two, and its contents is put in level one. In the following sections, we will show some examples of key assignments built with KEYMAN commands.

A.3

Hacking Tools

The tools described here make the life of the programmer easier. They give access to some functions which are normally not available for pure User RPL users of the calculator. First, the built-in tools in the HP49G will be described. Later, a third-party library will be described. Before describing the built-in tools found in library 256, we will mention a ag that is very useful to System RPL programmers: ag 85. When this ag is set, the System RPL Stack is active: in the stack the objects are decompiled using the System RPL decompiler before being displayed. That means that, where one would see just External with the normal stack, the name for the entry (or PTR and the address, if no name is found) will be displayed, if you have the extable library (see section A.1) installed. Play with it a bit and you will see how useful it can be. Some objects (most notabily real numbers and integers) keep their usual notation, but in the interactive stack all objects are decompiled. This System RPL Stack is like the one produced by the command SSTK command of the JAZZ library for the HP48 calculators. Probably you will be switching between the two kinds of stack display all the time. It is a good idea to assign a simple program to a key to toggle this display. A possibility is to assign it to Right-shift MODE. This normally is the key that marks the end of selection in edit mode. Since this key is unused when not in edit mode, it is a good example of the use of the KEYMAN library. To create this assignment, rst put the program to be run when in edit mode in level two. This is easy: just use keycode 22.3. Then, write a simple User RPL (or System RPL, if you want) program to toggle ag 85 (this task if left to the reader but read the description of OT49 in section A.3.1 rst). Finally, press IfE?P briey and use TO? on the resulting program (because it must

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 Description To hex: This converts an object into a string of hexadecimal characters. A common tool since the HP48 days to ease transfer of binary objects. From hex: This is the opposite transformation: creates an object from a string of hexadecimal characters. To address: Given an object, this command returns the address of the object, which is always a ve-nibble hxs. Objects whose address is less than # 80000h are in ROM, and objects whose address is greater than that are in RAM. From address: This recalls the object at the specied address. String to hex: Converts a string into its characters hexadecimal representation. For example, since 5A, 59 and 58 are the hexadecimal codes for X, Y and Z respectively, "XYZ" becomes "8595A5". Hex to string: The opposite transformation. Make list: Creates a list from a user meta object or another composite. A user meta object is any number of objects in the stack followed by a count represented as a real number. Be careful, because this command is not sufciently argumentprotected. Make algebraic: Creates an algebraic object from a user meta object or another composite. This may easily result in 'Invalid Expression'. Make program: Creates a program from a user meta object or another composite. From composite: Explodes any composite object into a user meta object.

H A

A SH

HS LST

ALG

PRG COMP

434 Command RAM

A. Development Tools Description To RAM: Dumps any ROM object into RAM. Can extract some commands for disassembly, but see section A.5 for more information. Reverse string: Reverses a string, very fast. Writes data to any address in RAM. Put in level two a hxs with the address, and in level one a string of hex digits to be written at that address. This is a very easy way of destroying any masterpiece you have created on the calculator :-). Extracts raw hex digits from any address. Put the address in level two (an hxs) and the number of nibbles to get (another hxs) in level one. Address peek: Like PEEK, but always gets ve nibbles, returning them as a hxs. Real system binary: Converts reals to bints and viceversa. System binary binary: Converts bints to hxss, and viceversa. Long real real: Converts long reals to reals and vice-versa. String name: Converts strings to identiers (global names) and vice versa. Long complex complex: Converts long complexes to complexes and vice-versa. From ASM: Disassembles Code objects (machine-language) into source code. Create library: A library creator. This is described in Appendix B. Calculates the CRC. The argument is a string of hex digits. Make string: Creates a string with the number of characters given in level one (a real number). Returns a string with the internal Serial Number of the HP49. Provides access to the MASD compiler. See section A.4 for more information. Used in conjunction with ASM. See section A.4 for more information. Disassembles an object. See section A.5 for more information. Creates a rompointer (XLIB name) from the library number (level two) and command number (level one). It also explodes rompointers into its two components.

SREV POKE

PEEK

APEEK RSB SBB LRR SN LCC ASM CRLIB CRC MAKESTR SERIAL ASM ER S2 XLIB

A.4. The Compiler

435

A.3.1

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 DL. The DType command displays the type of the object in level one. If that object is a rompointer (XLIB) or ashpointer, its contents is recalled (unless it is pure machine-language code) and the contents type is displayed, with an asterisk appended. One of the most useful commands is 3tog. It toggles between three representations of composite objects: as a list, as a program and as a usermetaobject. This can be used to manipulate System RPL programs without actually decompiling them. 3tog explodes a program onto the stack, you can use stack commands to rearrange things and then 3tog again to rebuild the program. Another very useful command is Fl. It is a ag toggler. Just give the number of the system or user ag, run it, and the ag is toggled. It will also display in the header what has just been done. The MDA command compiles or decompiles an object (depending wheter the input is a string or another object).

A.4

The Compiler

The compiler included in the HP49G calculator is MASD. It is a newer version of the compiler found in the MetaKernel program for HP48G calculators. If you have already used the MetaKernel, then you can probably skip most of this section. But, even if you have never used MASD, there should be no difculties learning how to use it. There are no big differences between MASD syntax and that of other System RPL compilers such as JAZZ (for the HP48 calculators), the HP Tools or the GNU Tools. MASD is called with the command ASM. It expects a string in level one, and returns the compiled object. If there are errors, the string and a list will be put in the stack. This list is used by the ER command, described shortly. The rst difference to be observed from those that are coming from JAZZ or one of the PC Tools is that MASD, for some unknown reason, needs the

436

A. Development Tools

source to end with a @ character. All source code les must be identied with this token, or MASD will refuse to even look at them. The character must be on a line by itself, at the start of the line, and with no character after it (not even a newline). This way, it is pretty much just cumbersome. (To be useful, it would be the character marking the end of the source, but there should not be all those restrictions on its placement, and text after it should be allowed and ignored.) However, for the Emacs RPLCPL (see section A.6), the @ acquires at least one purpose: it allows the calculator to automatically distinguish between a System RPL source le and a Uer RPL program or command line. The other thing to note concerns the current MASD mode. There are two modes, selected by ag 92: Assembly Language mode (ag 92 cleared) and System RPL mode (ag 92 set). Probably, you will set ag 92 and thus MASD will be by default in System RPL mode. Then, nothing else needs to be changed to compile System RPL programs (just add the @ in the end). It is still possible to compile Assembly Language code in System RPL mode: just surround the code between CODE and ENDCODE. If you are in Assembly Language mode, it is possible to compile System RPL code by inserting these two lines before the source:
1 !NO CODE !RPL

Both are called directives. The !NO CODE directive tells MASD to compile our source as System RPL code, and not as Machine Language code. (Once more, you can insert assembly language code between CODE and ENDCODE.) It is a good idea to always put these two lines at the start of all programs even if you use System RPL mode: this way, the source can be compiled regardless of the ag settings. Here is a simple program source ready for MASD:
1 !NO CODE !RPL :: DUPTYPEZINT? case FPTR2 ^Z>R DUPTYPEREAL? ?SEMI SETTYPEERR ; @

10

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, ashpointer entries, which point to a command in one of the HP49s ash banks, and rompointer entries, which point to a command in a library (built-in or not). For supported normal entries, no special precautions need to be taken. You can just include the name of the command. To call an unsupported entry, you will have to use PTR <address>, where <address> is the address as listed in the tables. For supported ashpointer entries (whose names always start with ), you have to prex the entrys name with FPTR2. So, to call the ashpointer command Z>R, you will have to include this in your program: FPTR2 Z>R An unsupported ashpointer entry is called with FPTR <bank> <cmd>. <bank> are the last three digits of the address as listed in the table (but in practice it can be no bigger than Fh), and <cmd> are the rst three digits. Calling rompointer entries (which have names starting with ) is very similar to calling ashpointers. If it is supported, just prex it with ROMPTR2. For unsupported entries, you have to use this syntax: ROMPTR <lib> <cmd>. <lib> are the last three digits of the address, and <cmd> the rst three.

A.4.2

MASDs 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 rst feature eases the use of unsupported entries. You can dene a name for a unsupported entry, making it behave as if an entry in extable. (This only works for normal entries, not ashpointer or rompointers.) To do that, use the following structure: EQU name address where name is the name of the entry, and address is its address. For example, the line below denes the entry 2NELCOMPDROP, which returns the second element of a composite: EQU 2NELCOMPDROP 2825E With that denition, you can use 2NELCOMPDROP instead of PTR 2825E to access that command. Note that this only works for normal entries. Another way to ease the inclusion of unsupported entries (especially rompointers and ashpointers), but that is useful not only for that, are the DEFINEs. The structure is like this: DEFINE name value where name is a single word, and value is the rest of the line. After that denition, whenever name is found in the source le, it will be replaced by value. So, if you are going to use the browser (see Chapter 33), it might be convenient to dene this: DEFINE Choose3 FTPR 2 72 so that you can simply insert Choose3 when you want to call the browser.

A.4.2.1

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 rst variable name corresponds to 1GETLAM (that is, the object that was in level one), the second to 2GETLAM (the object that was in level two), and so on. This is the opposite of what JAZZ does. It is possible, however, to get the ordering as JAZZ does, by putting the !JAZZ directive in the beginning of the source le.

A.5. Disassembly

439

A.4.2.2

Including Source Files

Using the INCLUDE pseudo-command, you can include other source les in your main program. This is like the #include directive in C programs. It is used like this: INCLUDE variable. The contents of the named variable are read as if they were included in the source le. The included le should also end with an @. One use of this feature is to include a le with denitions of several constants or unsupported addresses.

A.5

Disassembly

As it was briey mentioned in the description of Library 256 (see section A.3), the command S2 is the System RPL disassembler. It will disassemble any object in level one into its source code suitable for reassembly with MASD. Unfortunately, there are still some bugs in MASD, which prevent some disassembled objects to be correctly re-assembled. We all hope that in a newer version this bugs will be corrected. Often, one wants to see how one of the built-in commands in the HPs ROM is built. The JAZZ library for the HP48 calculators made that easy. Unfortunately, it is difcult to do that with only the built-in tools in the HP49G. There are, however, two two libraries for this purpose: Nosy by Jurjen N. E. Boss, and CQIF, by Pierre Tardy. Both allow to extract and disassemble ROM code, and both can be used together with Emacs (see section A.6).

A.5.1

Using Nosy

Nosy, written by Jurjen N. E. Boss (j.bos@interpay-iss.demon.nl) and presently at version 4.0 is a tool to disassemble the HP49Gs ROM. It is very easy to use, and, unlike CQIF?, can be easily used wihout Emacs. It also displays more information that CQIF?, such as the names of ash pointers. Because of this, it is slower than CQIF? To use Nosy, put the entry name, pointer, an address in the stack (some other inputs are also accepted see Nosys documentation) and run the command Nosy. This will open an interactive browser where you can view the disassembled entry and browse the ROM like a hypertext document. Use the arrow keys to scroll. You can quickly view another command inside the disas-

440

A. Development Tools

sembled source by moving the highlight to it and pressing ENTER or F6. This will open another browser just like the rst one. To go back one level, press Backspace, and to exit press ON. There are some other functions you can use in the interactive browser, consult the documentation for details.

A.5.2

Using CQIF?

With the help of the CQIF? (Comment QuIls Font?) library, written by Pierre Tardy (e-mail: tardyp@iname.com), currently at version 1.7.7F, the task of disassembling built-in commands is also simplied. It contains several tools for the HP49G hacker. We will not describe everything from the library here, read its documentation if you want to know what else it can do for you. The most useful command is CQIF?. This command is the basic way to disassemble some part of the HPs ROM. It accepts several kinds of inputs. If you give a string with the name of an entry, that entry is disassembled. You can put an address (a hxs), and run CQIF? to disassemble whatever is at that address. It will also accept the entry pointer itself, rompointers and ashpointers. To ease the disassembly of User RPL commands, you can enter the command inside a list or program (that is, enter { DUP } or DUP to disassemble the User RPL command DUP). CQIF? disassembles step-by-step, so if the command is only a pointer to another command, you need run the CQIF? command several times to get to the real code of the command. Just remove any unnecessary junk from the stack, keeping the last result of CQIF? and run it again. Eventually you will reach the command. Another useful command in the library is DISPATCH. It does a virtual dispatch based on the object types. To use it, put the objects you would use as arguments to some command in the stack. Then, recall that command (probably using CQIF?) to level one. Run DISPATCH. The object that would be run for those argument types (by means of some dispatching command like CKn&Dispatch) is put in level one. The other commands are not so useful to System RPL programs. But it is a nice idea to read the documentation and see what CQIF? can do for you.

A.6. The Editor, and Emacs

441

A.6

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: dominik@astro.uva.nl) and Peter Geelhoed (email: P.F.Geelhoed@student.tnw.tudelft.nl). This library gives the editor some of the features of the famous GNU Emacs editor, such as completion, automatic indentation, incremental search, regular expression search and a macro language. The latest version, at the time of this writing, is 1.10. Again, we will not describe everything in the library see the manual for more information. Probably the single most useful feature of the Emacs library is command completion. It is activated by the RPLCPL command. This is only useful in edit mode, so you will need it assigned to a key, with TakeOver before. If you have the KEYMAN library (see section A.2), just put a program like this in the stack: RPLCPL and run TO?. Then, assign the resulting object to a key. It is a nice idea to assign it to the same key both with and without the alpha-mode on. Of course, you do not need a program. Just the rompointer (got with { RPLCPL } HEAD or some similar trick) is enough, but you must still run TO?.

442

A. Development Tools

To try it, enter the rst few letters of any User RPL command. Press the key to which you assigned RPLCPL. If there was only one command starting with those letters, what you typed will be completed. If there were more than one, a choose box will appear from which you can select the derised command. The command line will be completed. This is something really useful. Provided you have the extable library installed (as you should see section A.1), the completion also works for System RPL command names. If the last character in the string is a @ (as required by MASD), then System RPL completion is automatically used. As an added bonus, if you press the key to which RPLCPL is assigned longer, then the lookup of System RPL commands is done with GETNEAR (see section A.1). You can then enter case, ask for completion, and get all words that have case in the middle not only in the begining. Another command that sometimes is useful is DYNCPL. It should also be assigned to some key, and also does completion. But it looks in the le you are editing for words that start with the typed letters. It is useful for the names of local variables and such. It works in a slightly different way: press the key, and the word will be completed with the rst word. To accept it, press ENTER. To abort, press ON. To search for another match, press the same key that invoked DYNCPL. Any other key will accept the match and execute that key. One more command that is useful to be assigned to a key is RPLED. This command imitates the ED command in the JAZZ library: it decompiles the object in level one, opens an editor for you to edit it, and, upon exit, recompiles the object (if you are lucky, that is. If the object cannot be compiled because of some MASD bug, exit the editor with a longer-pressed ENTER. This will allow you to select not to compile the le). RPLED also displays a menu with useful operations, described below. If you call RPLED when in edit mode, the menu is redisplayed. To get a description of all the commands in the menu, read the documentation that comes with Emacs. Here we will present the most useful ones: CO.. calls RPLCPL. Left-shift CO.. calls DYNCPL. See above for explanations of these commands. With |> you can collect a few keystrokes into a macro and then run this macro over and over. Press left-shift |> to start the macro recorder, then execute the commands which should be part of the macro and exit with ON. Then use |> to run the macro. Holding down the |> key automatically repeats the macro until you release the key. Find starts an incremental search. Press this key, then start typing

A.6. The Editor, and Emacs

443

the string you want to nd. Type as many characters as necessary, then press ENTER to go to that cursor position. To cancel the search and go back to where the search started, press ON. Press the right arrow to nd the next match. When you press Left-shift Find, you start a (non-incremental) regular expression search. Read Emacs manual for more information. Meta starts a special mode in which many useful editing commands are directly accessible with single key presses. The transmit indicatior is on while this mode is active. To exit, press ENTER or ON. Left-shift Meta suspends the editor and goes back to the stack. To return to the editor, press CONT (Left-shift ON). Right-shift Help is the menu of Emacs conguration. A choose box appears with several actions. Selecting Options will show a dialog, which allow you to congure some aspects of Emacs: whether the minifont is used by default, whether the third page of the menu contains some templates for System RPL and Assembly Language development, the library to use by the EDOB command (described below), and some other things. There are also options to edit the emacs variable (which allows one to add macro commands to Emacs. Again, we refer you to Emacs documentation), to edit the diagram variable (used by the SDiag library, but this variable is not discussed in this document), and to make some key assignments. Pressing Left-shift Help toggles between the minifont and the current font. Indnt indents the current line according to context. However, it is better to write the code already indented than to correct it later. . . Still, sometimes (such as when cutting and pasting), this can save some time. When left-shifted, removes * from the beginning of the current line (or all the selected lines), and when pressed right-shifted inserts the * . {}, when pressed in a delimiter, jumps to the matching one. Works with :: and ;, { and } and a few others pairs. ( ) shows the stack diagram for the entry point under the cursor. For this to work, the SDiag library, distributed with Emacs, must the installed. All stack diagrams listed in this book are also available on the calculator through this library, and this can be of great help. EDOB can be used to look into the ROM and into the contents of variables without exiting the editor. If you have ever used JAZZs ED editor, this works similarly to the Right-shift Y key. It disassembles the entry under the cursor, and its source is viewed in another editor. Exit this sub-editor with ON or ENTER to go back to the original editing section. Of course, you can call DOB

444

A. Development Tools

again in the sub-editor. This command requires the CQIF? or Nosy libraries (see section A.5). When Nosy is used, you can press this key longer to run the Nosy browsing environment. (The default is to start a new sub-editor.) You should assign EDOB to a key since you will use it frequently. Because of the similarity with the Nosy and CQIF? commands, is suitable to assign both commands to the same key. When used in edit mode, EDOB is called. When not, Nosy or CQIF? is called. It is very easy to create an assignment like this with KEYMAN (see section A.2). First, put the list { EDOB Nosy } in the stack, and use OBJ or COMP to explode it. Drop the number of objects and run IfE?P. Use TO? to add TakeOver to the object (since it needs to work in edit mode), and assign it to a key. If you have used the HP48 and JAZZ, Rightshift-hold +/- or Right-shift-hold 1/x will remind ED, and will not interfere with the normal operation. You can replace Nosy with CQIF? here if you prefer the latter library. Actually, while the above example is very educational, it is not really necessary. EDOB automatically calls CQIF? or Nosy (depending on Emacs settings) when it is called outside edit mode. The last page of the Emacs menu contains some templates for System RPL and Assembly Language programming. Try them, you will easily discover what they do. If you need help with Emacs menu commands, just press Help. It has help on the commands and on the menu keys. If you select help on the meny keys, it will display a screen describing the two pages of the Emacs menu. Each page is represented by three rows of labels, which mean, from top to bottom, the unshifted action, the left-shifted action and the right-shifted action. Some commands are inverted, these have different actions when pressed longer. There is much more that Emacs can do. Please read the documentation to discover about the rest of the features.

A.7

Debugging

The debugging facilities for System RPL of the HP49G are the same as for User RPL: the built-in debugger (Left-shift CAT, NXT twice and RUN). Unfortunately, it does not work very well with some commands, which will be described later. To start debugging, put the program or the name of the variable in which the program is stored in level one and press DBUG. Then, use the other

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 rst command. To see the next two actions of the program, but not execute them, press NEXT. To stop the program being debugged, press KILL. To make it resume its normal operation, press CONT (Left-shift ON). To insert a breakpoint into your program, insert the command HALT (xHALT for System RPL programmers) in the program at the point you want the program to stop. Then use the commands above to debug the program. The debugger does not work with commands that take arguments from the runstream, such as ' or IT. Do not try stepping over one of these commands, the only thing you will get is a nice crash :-). Currently, the only way to debug these commands is by inserting xHALT after these commands, and using CONT to skip past the next xHALT. For simple to moderately complex programs, the procedures described above will be sufcient to nd and correct bugs. If you run into a more serious problem with a complicated program, a bigger hammer may be needed: SDB in Jazz49.

A.8

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 Lidstrm (e-mail: danli97@ite.mh.se). However, at the time of this writing it is not a full replacement for MASD and the other tools. In particular it has no support for ashpointers and therefore cannot assemble or disassemble programs containing ashpointers. Another drawback is that Jazz needs to be installed in port 0, occupying 70kB (50kB for the light version) of RAM space. It also needs its own table of entry points, 40kb more, but that can fortunately be installed in any port. The area where Jazz49 brings unique functionality to the HP49 is debugging, both of machine language programs (DB) and of System RPL programs

446

A. Development Tools

(SDB). In contrast to the HP49 built-in debugger, SDB can handle runstream commands correctly, so there is no need to insert many xHALT commands into the program. The lack of ashpointer support means that you cannot singlestep the contents of ashpointers. Also the display of current and next commands in the status line is affected by this: when the program is near a ashpointer, Invalid Object will be displayed instead of the current and next commands. To use the debugger, put the program to be debugged or just its name in level 1, and run the SDB command. You will then be presented a menu with your possible actions. SST executes the next step. IN is similar, but it will step inside of sub-routines. Use SNXT to show the next steps to be executed. You can insert breakpoints into programs with the SHALT command (write xSHALT in System RPL programs). Note that SHALT only works if SDB is already running, so you need to start your program with SDB and then press CONT to jump to the break point. Very useful is also the possibility to browse loop and LAM environments with the LOOPS and LAMS commands, respectively. For more information on these and other commands, please refer to the JAZZ documentation. Now you may wonder if you should really sacrice 50kB of RAM for the occasional need to do serious debugging. Here is a solution: keep a BZ compressed version of the JAZZ library (light version) stored in port 2 under the name Jazz. When you need to debug, you can quickly install JAZZ with a small progamm: :2: Jazz RCL 0. STO 992. ATTACH where is the decompressor program in OT49. With a similar program, you remove it from port 0 when you are done.

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 DL 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 congure the created library. The table below lists the variables and their meanings. 447

448 Variable $ROMID

B. Creating Libraries Meaning This species the number of the library. Each library should have a unique number, since there cannot be two libraries with the same number. It should be a real or an integer, in the range 769 to 1791. This is the title of the library. The rst ve characters will be shown in the library menu. You can have a library without a title, but you will not be able to access the library from the library menu. This is a list of variable names. The variables listed here will be made into user-accessible commands in the resulting library. This is a list of variable names. The variables listed here will be converted into hidden commands in the resulting library. This is the library conguration object. This object will be evaluated at each warmstart. Normally, these conguration programs attach the library. This can be done by storing something like :: romid TOSRRP ; here, where romid is the library id. If you want, you can simply store the real number 1. in $CONFIG, and a default conguration object will be produce, which attachs the library at each warmstart. This is a list of strings which will be available in the library for use as (error) messages or general strings. If each message is only used once, it is not really worthwhile to create a message table. But if messages are used in many places, or if you want to make it easy to change messages to a different language, a message table is very useful. The list can contain up to 256 strings. Each message on the calculator is identied by a unique bint #lllmm consisting of a 3-digit library number (like 6FE) and a two-digit message number 01. . . FF. To access a message from a program use #lllmm JstGetTHEMESG. To throw an error using a message number, use #lllmm DO#EXIT. See Chapter 22 for more information. This is the name of a command that allows customization of some menus, addition of help to commands and more. See below for more information on this.

$TITLE

$VISIBLE $HIDDEN $CONFIG

$MESSAGE

$EXTPRG

Note that unlike other library creators, only the variables that are listed in $VISIBLE or $HIDDEN are made into command in the library. Variables that do not appear in either list are not converted. $MESSAGE is optional, you do not have to specify it.

B.2. The Library Message Handler

449

B.2

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 specic message, other arguments on higher stack levels.

B.2.1

Menu Extensions

The majority of messages can be used to extend some built-in menus. Among these are the APPS choose menu, several other choose menus, the SEARCH, GOTO and Tools submenus in the editor menu etc. When the message handler is called to extend a menu, the current menu is on the stack either as a list or as a meta. The program can then modify this menu and return it. So, the stack diagram for menu extensions is one of: ( { key1 ... keyN } #msg modified_list #msg ) ( key1 ... keyN #n #msg modified_meta #msg ) The message number bint stays on the stack, so that the message handler of another library can be called immediately to do its work in the same way. The following menus on the HP49G can be extended using library messages. #msg 0 1 2 3 4 5 6 8 11 12 Menu APPS Main STAT menu Hypothesis submenu in STAT Condence Interval submenu in STAT menu Finance menu Numeric Solver menu Time menu Games (inside APPS) Editor SEARCH menu (when ag -117 is clr) Editor TOOLS menu (when ag -117 is clr) Menu Type list list list list list list list meta list list

450 #msg 13 14 15 16 Menu Editor GOTO (when ag -117 is clr) Editor SEARCH menu (when ag -117 is set) Editor TOOLS menu (when ag -117 is set) Editor GOTO (when ag -117 is set)

B. Creating Libraries 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 :: ZERO OVER#=case :: SWAPINCOMP #1+DUP #>$ ".My Library" !append$ :: % 1234. InitMenu% ; TWO{}N SWAP P{}N SWAP ; EIGHT OVER#=case :: DROP { "PlayMe" ROMPTR 4D2 0 } SWAP#1+ EIGHT ; ; (APPS menu) (save #msg, explode list) (make index for new entry) (add name to index number) (action: set my menu) (label & action -> list) (add new entry) (get the ZERO back) (Games submenu) (drop the message) (new entry for menu) (add to meta) (put msg number back)

10

15

B.2.2

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 :: 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)

10

(save cmd name as string) (index of romptr in lib) (list of help strings)

(last visible rompointer) (extract correct help str) (Add the command name) (display the text)

15

20

Note that ViewStrObject conveniently pushes FALSE on the stack, which is the required return value of message nine. The message handler gets a bit more complicated if help is only provided for a few rompointers. In this case, the handler of message nine must check the rompointer against a list, and message ten must use Lookup or something similar to extract the help text. Instead of simply displaying a string, message ten can also do more complicated things, like launching a whole application to provide help. The library creator in the OT49 library (see section A.3.1) provides a simple way to add help support to a library.

452

B. Creating Libraries

B.2.3

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 :: # 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
Name xABCUV xABS xACK xACKALL xACOS2S xACOSH xACOS xADDTMOD xADDTOREAL xALOG xAMORT xAND xANS xAPPLY xARCHIVE xARC xARG xARIT Description ( pa pb c u v ) ( x x' ) ( ) ( ) ( symb symb' ) ( x x' ) ( x x' ) ( symb1 symb2 symb3 ) ( var ) ( x x' ) ( n princ intr bal ) ( x1 x2 x3 ) ( n ob ) ( {symb1 .. symbn} f f(symb1...symbn) ) ( :port:name ) ( :IO:name ) ( c r 1 2 ) ( {#x #y} #r 1 2 ) ( c ) ( ) 453

Addr. 030314 39A07 390E4 390C9 025314 3A8D8 3A7DC 06E314 0000DE 3AAE5 04B0AB 3CA07 3F033 3D7AC 3EAC7 3C8C6 3A390 085314

454 Addr. 3BEC5 Name xARRY>

C. User RPL Commands Description ( [] x1...xn {n} ) ( [[]] x11...xnm {n m} ) UserRPL: ARRY ( x1..xn n [] ) ( x11...xnm {n m} [[]] ) UserRPL: ARRY ( symb symb' ) ( symb symb' ) ( x x' ) ( x x' ) ( obj key ) ( 'SKEY' ) ( # #' ) ( symb symb' ) ( x x' ) ( x x' ) ( n ) ( ) ( c ) ( {c tick $x $y } ) ( {} [] ) ( [] () ) ( [A] [M] ) ( [nxn] [n] [nxn]' [n] ) ( ) ( ) ( ) aka: xALGB ( n ) ( freq dur ) ( ) ( ) ( min width n [[]] [] ) ( #width #height grob ) ( {#n1 #m1} {#n2 #m2} ) ( c1 c2 ) ( # R ) UserRPL: BR ( nchars 0/1 )

3BE9B

x>ARRY

024314 023314 3A88E 3A756 3EEE7 38DE1 022314 3A94F 3A844 3EB64 3C49F 3C3B2 04A314 049314 04C314 3C9D3 3E196 080314 3EDCC 39765 3E2C1 3B655 3E171 3C70A 3C6E0 38F21 3EE47

xASIN2C xASIN2T xASINH xASIN xASN xASR xATAN2S xATANH xATAN xATTACH xAUTO xAXES xAXL xAXM xAXQ xBAR xBARPLOT xBASE xBAUD xBEEP xBESTFIT xBIN xBINS xBLANK xBOX xB>R xBUFLEN

C.1. Reference Addr. 39480 01E0DE 07E314 0330DE 38B28 3AD1B 3C3DC 3B4E9 03A314 04D0AB 3BC19 3B362 01D0DE 3EDAC 3DD4E 3DD8E 39144 39839 3EC95 3E91A 081314 3B193 3E5A0 0300DE 3E0FD 0380AB 03E0AB 0390AB 03F0AB Name xBYTES xC2P xCASCFG xCASCMD xCASE xCEIL xCENTR xCF xCHINREM xCHOOSE xCHR x%CH xCIRC xCKSM xCLEAR xCLSIGMA xCLKADJ xCLLCD xCLOSEIO xCLUSR xCMPLX xCNRM xCOLCT xCOLLECT xSIGMACOL xCOL xCOLxCOL xCOL+ Description ( obj chksum size ) ( {} ????? ) ( ) ( ? ) ( ) ( x n ) ( (x,y) ) ( x ) ( n ) ( []1 []2 []3 ) ( title {elems} pos ob 1 ) ( title {elems} pos 0 ) ( n $ ) ( x1 x2 x3 ) ( prg {} ????? ) ( n_type ) ( ob1 .. obn ) ( ) UserRPL: CL ( ticks ) ( ) ( ) ( ) UserRPL: CLVAR ( ) ( [] col_norm ) ( symb symb' ) ( symb symb' ) ( x_col y_col ) UserRPL: COL ( [[]] [v1]...[vn] n ) ( [] x1...xn n ) ( [] n []' xn ) ( [[]] n [[]]' [vn] ) ( [v1]...[vn] n [[]] ) ( x1...xn n [] ) ( [[]] [[]]' n [[]]'' ) ( [] x n []' )

455

456 Addr. 3B423 0260AB 3C967 39A6C 0180AB 3BF77 Name xCOMB xCOND xCONIC xCONJ xCONLIB xCON

C. User RPL Commands Description ( n k Cn,k ) Symbolic argument allowed. ( [[n*n]] x ) ( ) ( x x' ) ( ) ( { n } x [] ) ( { n k } x [[]] ) ( [] x []' ) ( name x ) ( ) ( x1_u1 x2_u2 x3_u2 ) ( x_correlation ) ( x x' ) ( x x' ) ( x_covariance ) ( (x,y) {#n #m} ) UserRPL: CPX ( name ) ( ) ( [1] [2] [3] ) ( (x,y) x y ) UserRPL: CR ( [func] [vars] [] ) ( ) ( xe/D yRe xDarcy ) ( date ) ( date ) ( date ndays date' ) ( %1 ) ( prog ) ( name ) ( date1 date2 days ) ( ) ( name x_new ) ( 'name=expr' ) ( 'name(name1...)=expr(name1...) ) ( )

0190AB 3989C 38F41 3DE24 3A6C2 3A5D0 3DE3F 3C58E 393CA 3D128 3B208 3BAF5 057314 0120AB 0610AB 39104 39078 39238 0690AB 0150DD 39218 3B670 3E576 3E85C

xCONST xCONT xCONVERT xCORR xCOSH xCOS xCOV xC>PX xCRDIR xCR xCROSS xC>R xCURL xCYLIN xDARCY xSETDATE xDATE xDATE+ xdB xDBUG xDDAYS xDEC xDECR xDEFINE

3B549

xDEG

C.1. Reference Addr. 391D8 3D1C7 3EF3B Name xDELALARM xDELAY xDELKEYS

457 Description ( n ) ( x_delay ) ( rc.p ) ( 0 ) ( 'S' ) ( name ) ( {name y1 y2} ) ( {y1 y2} ) ( y1 y2 ) ( n ) ( symb var symb' ) ( symb symb' ) ( eq func func' ) ( [[]] x ) ( n ) ( :port:n ) ( symb var symb' ) ( [[]] vec ) ( [] { dims } [[]] ) ( ) ( ) ( obj n_line ) ( ob {#x #y} %size ) Display ob (decompiled if nexessary) at the given display coordinates, using either the system font (%size=2) or the minifont (%size=1). ( [func] [vars] func ) ( symb1 symb2 squot srem ) ( symb1 symb2 squot srem ) ( symb {} ) ( symb1 symb2 sq ) ( symb1 symb2 n symb3 ) ( ) ( n ) ( $ ) ( 0 ) ( {1}...{n} n prog {} ) ( {1}...{n} prog {} (n=1) )

3C51F

xDEPND

3DCA7 00E314 003314 00F314 3B1BA 3EB84 3D202 03A0AB 03B0AB 084314 00E0AB 39725 0160DD

xDEPTH xDERIV xDERVX xDESOLVE xDET xDETACH x xDIAG xDIAG xDIFF xDIFFEQ xDISP xDISPXY

056314 026314 072314 044314 071314 062314 3816B 39527

xDIV xDIV2 xDIV2MOD xDIVIS xDIVMOD xDIVPC xDO xDOERR

05B0AB

xDOLIST

458 Addr. 0540AB 3B1E1 3C484 06B0AB 3C4BA 3DC56 3DCC7 3DC3B 3B06E 3EFEF 3DC05 3F29A 3DCE2 3DBEA 0090DD 0070DD 39B1E 02E314 02C0AB 02D0AB 3805D 38A54 0570AB 3B5DA 088314 3BDE6 00B0DD 3C553 3955B 39591 39576 038314 395AC Name xDOSUBS xDOT xDRAW xDRAW3DMATRIX xDRAX xDROP2 xDROPN xDROP xD>R xDTAG xDUP2 xDUPDUP xDUPN xDUP xEDITB xEDIT xCONSTANTe xEGCD xEGV xEGVL xELSE xENDDO xENDSUB xENG xEPSX0 xEQ> xEQW xERASE xERR0 xERRM xERRN xEULER xEVAL

C. User RPL Commands Description ( {} n prog {}' ) ( {} prog {}' (n=1) ) ( [1] [2] x ) ( ) ( [[]] v_min v_max ) ( ) ( ob1 ob2 ) ( ob1...obn n ) ( ob ) ( x ( /180)x ) UserRPL: DR ( tag:obj obj ) ( 1 2 1 2 1 2 ) ( 1 1 1 ) ( 1...n n 1...n 1...n ) ( ob ob ob ) ( ob ob' ) ( ob ob' ) ( e ) UserRPL: e ( symb1 symb2 symb3 symb4 symb5 ) ( [[]] [[evect]]' [evals] ) ( [[]] [egval] ) ( ) ( 1/0 ) UserRPL: END ( x ) Number of lists in DOSUBS. ( n ) ( symb1 symb2 ) ( 'l=r' l r ) UserRPL: EQ ( symb symb' ) ( ) ( ) ( $msg ) ( $nerr ) ( z1 z2 ) ( ob ? )

C.1. Reference Addr. 06C314 076314 000314 3E5E9 3E25E 017314 3AB6F 3A9B7 0050AB 0620AB 001314 077314 043314 0600AB 3F2DF 3B635 3B529 041314 01A0AB 00C0DD 391AE Name xEXLR xEXPANDMOD xEXPAND xEXPAN xEXPFIT xEXPLN xEXPM xEXP xEYEPT xF0 xFACTOR xFACTORMOD xFACTORS xFANNING xFAST3D xFC?C xFC? xFCOEF xFFT xFILER xFINDALARM Description ( symb symb1 symb2 ) ( symb1 symb2 ) ( symb1 symb2 ) ( [symb1] [symb2] ) ( symb1 symb2 ) ( ) ( symb1 symb2 ) ( x x' ) ( x x' ) ( xx xy xz ) ( y_lambda xT x_power ) ( symb symb1*symb2... ) ( z z1*z2... ) ( symb symb1*symb2... ) ( z {z1 m1...} ) ( symb {symb1 m1...} ) ( x_x/D y_Re x_fanning ) ( ) ( n 0/1 ) ( n 0/1 ) ( [] symb ) ( [] []' ) ( ) ( date n ) ( {date time} n ) ( 0 n ) ( ) ( n ) ( # ? ) ( x n ) ( font ) ( font ) ( font ) ( font ) ( font ) ( start finish ) UserRPL: FOR ( symb z c_z ) ( x x' )

459

3ED76 3B59A 0170AB 3ACD1 00F0DD 00E0DD 00D0DD 0030DD 0020DD 38252 05E314 3AC87

xFINISH xFIX xFLASHEVAL xFLOOR xFONT6 xFONT7 xFONT8 xFONT xFONT xSTARTVAR xFOURIER xFP

460 Addr. 39745 042314 3B615 3B509 3C955 3D56B 06B314 0070DE 04D314 075314 02C314 0550AB 3C22D Name xFREEZE xFROOTS xFS?C xFS? xFUNCTION x| xFXND xGAMMA xGAUSS xGCDMOD xGCD xLIST xGETI

C. User RPL Commands Description ( n ) ( symb [] ) ( n 0/1 ) ( n 0/1 ) ( ) ( symb {var val ...} x' ) ( 'x/y' x y ) ( x x' ) ( symb [vars] [diag] [P] symb' [vars] ) ( x1 x2 x3 ) ( x1 x2 x3 ) ( {} {}' ) ( ob pos ob' pos' elm ) ob = [] or [[]] or {} or name pos = n or {n} or {n m} ( ob n elm ) ob = [] or [[]] or {} or name pos = n or {n} or {n m} ( g_targ {#n #m} grob g_targ' ) ( g_targ (x,y) grob g_targ' ) ( PICT ... ... ) ( ) ( ) UserRPL: PICTURE ( ) ( gr1 gr2 gr3 ) ( ob n_chrsize grob ) UserRPL: GROB ( var n1 n2 symb x ) UserRPL: ( x ) ( [] ) UserRPL: ( x ) ( x1...xn ) UserRPL: + ( symb ) UserRPL: LINE

3C1C7

xGET

3C74A

xGOR

3B57F 3C5AE 00A0AB 07C314 3C8A1 3D503 3DDEE

xGRAD xGRAPH xGRIDMAP xGROBADD x>GROB xSUM xSIGMA-

3DDC4

xSIGMA+

3E156

xSIGMALINE

C.1. Reference Addr. 0590AB 3DE90 3DE5A 3DEC6 3DEAB 3DE75 3C7D8 Name xLIST xSUMX2 xSUMX xSUMXY xSUMY2 xSUMY xGXOR

461 Description ( {} x ) ( xsum ) UserRPL: X2 ( xsum ) UserRPL: X ( xsum ) UserRPL: XY ( xsum ) UserRPL: Y2 ( xsum ) UserRPL: Y ( g_targ {#n #m} g_src g_targ' ) ( g_targ (x,y) g_src g_targ' ) ( PICT ... ... ) ( [M1] [M2] [M3] ) ( symb symb' ) ( ) ( n ) ( n ) ( z symb ) ( symb [vars] [M] [grad] [vars] ) ( ) ( z [M] ) ( ) ( ) ( hms1 hms2 hms3 ) ( hms1 hms2 hms3 ) ( x x' ) UserRPL: HMS ( x x' ) UserRPL: HMS ( ) ( symb1 x symb2 x symb3 ) ( n1 n2 n3 n4 n5 ) ( n x ) ( uv' v uv -u'v ) ( []1 []2 []3 ) ( n1 n2 quot rem )

046314 020314 3880D 0040DD 0050DD 05C314 059314 3B68B 054314 3C9C1 3E1CA 3B14C 3B12C 3B0EC 3B10C 39405 037314 031314 0060DE 00B314 03B314 027314

xHADAMARD xHALFTAN xHALT xHEADER xHEADER xHERMITE xHESS xHEX xHILBERT xHISTOGRAM xHISTPLOT xHMSxHMS+ x>HMS xHMS> xHOME xHORNER xIABCUV xIBERNOULLI xIBP xICHINREM xIDIV2

462 Addr. 3C02E Name xIDN

C. User RPL Commands Description ( n [[]] ) ( [[]] [[]]' ) ( name [[]] ) ( n1 n2 c b a ) ( ) ( ) ( [] []' ) ( 0/1 obj ? ) ( 0/1 objT objF ? ) ( i ) ( symb symb' ) ( (x,y) y ) ( [] []' ) ( name x' ) ( name ) ( {name x1 x2} ) ( {x1 x2} ) ( x1 x2 ) ( '+' ) Innity ( $ {flds} fmt {rst} {init} {} 1 ) ( $ {flds} fmt {rst} {init} 0 ) ( $prompt $ $' ) ( $prompt {specs} $' ) ( x1 x2 symb var symb' ) ( f(var) var x0 F(x0) ) ( f(x) F(x) ) ( x x' ) ( x 1/x ) ( [[]] [[]]' ) ( x n ) ( n1 n2 n3 ) ( n1 n2 n3 ) ( n x ) UserRPL: IR ( symb var symb' ) ( n 1 ) ( n 0 )

02F314 37F48 387AC 01B0AB 396A4 395F3 39B3B 011314 3B87E 3E54C 3C33E

xIEGCD xIF xIFERR xIFFT xIFT xIFTE xi xILAP xIM xINCR xINDEP

08A314 04C0AB

x xINFORM

3EEBD 3D434 3F007 004314 074314 3A32B 3AC3D 029314 02B314 3F0B7 3E648 03C314

xINPUT x xINT xINTVX xINVMOD xINV xIP xIQUOT xIREMAINDER xI>R xISOL xISPRIME?

C.1. Reference Addr. 050314 3EE2C 07B314 39854 06C0AB 06D0AB 3ECE4 Name xJORDAN xKERRM xKEYEVAL xKEY xKEYTIME xKEYTIME xKGET Description ( [nxn] minpol chrpol {} [] ) ( msg ) ( rc.p ? ) ( rc 1 ) ( 0 ) ( ticks ) ( ticks ) ( name ) ( "name" ) ( {names} ) ( {{old new}...} ) ( ) ( ) ( [2xn] pol ) ( n ) ( n ) ( symb [vars] symb' ) ( symb symb' ) ( ob1 .. obn ) UserRPL: LASTARG ( grob ) UserRPL: LCD ( grob ) UserRPL: LCD ( symb1 symb2 symb3 ) ( n1 n2 prog [] ) ( symb1 symb2 symb3 ) ( n pol ) ( {symb...} {} gcd ) ( # ? ) ( {title nlib nport ...} ) ( func point lim ) ( (x1,y1) (x2,y2) ) ( {#n1 #m1} {#n2 #m2} ) ( ) ( symb var 0/1 ) ( [eqs] [vars] [eqs] {pp} sol ) ( symb symb' )

463

394F1 3C5C9 05D314 0000DD 0010DD 058314 010314 397E5 3C881 3C866 02D314 055314 012314 05A314 032314 0160AB 3EB42 005314 3C68C 3E214 0150AB 052314 014314

xKILL xLABEL xLAGRANGE xLANGUAGE xLANGUAGE xLAPL xLAP xLAST x>LCD xLCD> xLCM xLCXM xLDEC xLEGENDRE xLGCD xLIBEVAL xLIBS xLIMIT xLINE xLINFIT xLININ xLINSOLVE xLIN

464 Addr. 3BAC1 3B7D2 06D314 016314 3AB2F 3AA01 3E239 3AA73 0320AB 3DF83 02B0AB 0300AB 06A314 051314 3B02E 066314 3DAD0 Name xLIST> x>LIST xLNAME xLNCOLLECT xLNP1 xLN xLOGFIT xLOG xLQ xLR xLSQ xLU xLVAR xMAD xMANT xMAP xMATCHUP

C. User RPL Commands Description ( {} ob1...obn n ) UserRPL: LIST ( ob1 .. obn n {} ) UserRPL: LIST ( symb [vars] ) ( symb symb' ) ( x x' ) ( x x' ) ( ) ( x x' ) ( [[]] [[L]] [[Q]] [[P]] ) ( Intercept Slope ) ( [B] [[A]] []' ) ( [[B]] [[A]] [[]]' ) ( [[]] [[L]] [[U]] [[P]] ) ( symb symb [vars] ) ( [] det inv coeff cpol ) ( x x' ) ( {} prog {}' ) ( symb {spat srepl} symb' 0/1 ) ( symb {spat srepl scond} symb' 0/1 ) UserRPL: MATCH ( xmax ) ( [x1...xn] ) UserRPL: MAX ( MAXR ) ( x y x' ) ( var ) ( {vars} ) ( "ALL" ) ( xmean ) ( [x1...xn] ) ( x ) ( % ) ( n1 n2 ) ( xmin ) ( [x1...xn] ) UserRPL: MIN

3DEE1

xMAXSIGMA

39AE4 3ADA5 0760AB

xMAXR xMAX xMCALC

3DEFC 3E8C1 3E9D4 07A314 3DF17

xMEAN xMEM xMENU xMENUXY xMINSIGMA

C.1. Reference Addr. 0110DD 0120DD 0730AB 39B01 3AE2B 0740AB 079314 3AFCB 0770AB 04E0AB 0720AB 070314 0750AB Name xMINIFONT xMINIFONT xMINIT xMINR xMIN xMITM xMODSTO xMOD xMROOT xMSGBOX xMSOLVR xMULTMOD xMUSER Description ( font ) ( font ) ( ) ( MINR ) ( x y x' ) ( title {vars} ) ( mod ) ( x y x' ) ( var x ) ( "ALL" ) ( $ ) ( ) ( symb1 symb2 symb3 ) ( var ) ( {vars} ) ( "ALL" ) ( n ) ( xq v x x' ) ( ob n ob .. ob n ) ( x x' ) ( ob ob ) ( ) ( n n' ) ( nrows ) UserRPL: N ( ob1 ob2 ob2 ) ( x x' ) ( ) ( npos ) ( $ n ) ( x x' ) UserRPL: NUM ( n ) ( n ) ( ob1 .. obn ) UserRPL: ( ob ? ) UserRPL: OBJ ( )

465

0060DD 01C0AB 3F2B5 39976 394AA 3831C 03D314 3DE09 3F264 3CB13 3F0FC 0560AB 3BBF9 39785 0060AB 0070AB 3885C 3BE38 3B6A6

xNDISP xNDIST xNDUPN xNEG xNEWOB xNEXT xNEXTPRIME xNSIGMA xNIP xNOT xNOVAL xNSUB xNUM x>NUM xNUMX xNUMY xRPN-> xOBJ> xOCT

466 Addr. 3950C 3EC75 3E8F0 3CA8D 3DC8C 039314 3C98B 3EDEC 0090AB 034314 393EA 04F314 0450AB 00D0AB 01F0AB 3C4F5 3B477 0460AB 3EAA7 3F27F 3DCFD 3C72A 05A0AB 06A0AB 39AC7 3C638 3C60E 3C662 3EE9D 00A314 3C392 3C372 3C979 Name xOFF xOPENIO xORDER xOR xOVER xPA2B2 xPARAMETRIC xPARITY xPARSURFACE xPARTFRAC xPATH xPCAR xPCOEF xPCONTOUR xPCOV xPDIM xPERM xPEVAL xPGDIR xPICK3 xPICK xPICT xLIST xPINIT xPI xPIXOFF xPIXON xPIX? xPKT xPLOTADD xPMAX xPMIN xPOLAR

C. User RPL Commands Description ( ) ( ) ( {names} ) ( x y x' ) ( 1 2 1 2 1 ) ( n n' ) ( ) ( n ) ( ) ( symb symb' ) ( {HOME dir1 .. dirn} ) ( [nxn] pol ) ( [roots] [coefs] ) ( ) ( xpcovariance ) ( (xmin,ymin) (xmax,ymax) ) ( #width #height ) ( n k n' ) ( [coefs] x x' ) ( name ) ( 1 2 3 1 2 3 1 ) ( 1...n n 1..n 1 ) ( PICT ) ( {} x ) ( ) ( ) UserRPL: ( (x,y) ) ( {#n #m} ) ( (x,y) ) ( {#n #m} ) ( (x,y) 1/0 ) ( {#n #m} 1/0 ) ( data type response ) ( f ) ( (x,y) ) ( (x,y) ) ( )

C.1. Reference Addr. 3BB94 073314 3D0D7 3DFDD 3E01D 3DFFD 00C314 03E314 3D1E7 38BBF 08B314 0440AB 035314 3D10D 3D143 Name xPOS xPOWMOD xPR1 xPREDV xPREDX xPREDY xPREVAL xPREVPRIME xPRLCD xPROMPT xPROMPTSTO xPROOT xPROPFRAC xPRST xPRVAR Description ( str substring n/0 ) ( {} ob n/0 ) ( symb exp symb' ) ( ob ob ) ( x y ) ( y x ) ( x y ) ( f x1 x2 symb ) ( f x1 x2 x ) ( n n' ) ( ) ( $ ) ( var ) ( [coefs] [roots] ) ( x symb' ) ( ) ( name ) ( {names} ) ( :port:name ) ( xpsdev ) ( {x1...xn} ) ( symb symb' ) ( symb n symb' ) ( pol x pol' ) ( name ) ( {names} ) ( :port:name ) ( :port:nlib ) ( ob pos obj [] pos' ) ob = [] or [[]] or {} or name pos = n or {n} or {n m} ( ob pos obj ob' ) ob = [] or [[]] or {} or name pos = n or {n} or {n m} ( nport {} mem ) ( (x,y) ) ( {#n #m} ) ( {#m #n} (x,y) ) UserRPL: PXC

467

01D0AB 0040DE 0030DE 036314 3E87C

xPSDEV xPSI xPsi xPTAYL xPURGE

3C139

xPUTI

3C0BF

xPUT

3EA49 3C5E4 3C56E

xPVARS xPVIEW xPX>C

468 Addr. 3DA3E 3DA63 0310AB 3E66F 3D6F6 028314 04B314 3B564 3B3E6 02A0AB 0350AB 3DBCA 38F01 3D393 3B7ED 3918E 3B715 03F0DE Name x->Q x->QPI xQR xQUAD xQUOTE xQUOT xQXA xRAD xRAND xRANK xRANM xPREDIV xR>B xRCEQ xR>C xRCLALARM xRCLF xRCLVX

C. User RPL Commands Description ( x a/b ) UserRPL: Q ( x symb ) UserRPL: Q ( [[]] [[Q]] [[R]] [[P]] ) ( symb var symb' ) ( ob 'ob ) ( p1 p2 p3 ) ( symb [vars] [[]] [vars] ) ( ) ( x ) ( [[]] n ) ( {m n} [[]] ) ( x y x/y ) UserRPL: RATIO ( x # ) UserRPL: RB ( EQ ) ( x y (x,y) ) UserRPL: RC ( n {date time action rep} ) ( {#s1 #u1 #s2 #u2} ) ( name ) Recall the current content of the reserved CAS variable VX. ( [[]] ) UserRPL: RCL ( {ob ... key ...} ) ( x ) ( var x ) ( :port:nlib lib ) ( :port:name ob ) ( :port:{path} ob ) ( n ) ( x (180/ )x ) UserRPL: RD

3DDA9 3EF79 3EA2E 3E6F1

xRCLSIGMA xRCLKEYS xRCLMENU xRCL

3B6FA 3B0AE

xRCWS xR>D

C.1. Reference Addr. 3BEEC Name xRDM Description ( ob size ob' ) ( name size ) ob= [] or [[]] size = {n} or {n m} ( x ) ( name ) ( $name ) ( ) ( ) ( [[]] [[]]' ) ( (x,y) x ) ( [] []' ) ( p1 p2 p3 ) ( name name' ) ( pol var pol' ) ( 1/0 ) ( ob pos new ob' ) ob= [[]] or [] or {} or $ or PICT pos= N or {n m} or (n,m) ( n_int ) ( :port:name ) ( p1 p2 res ) ( {1...n} {n...1}' ) ( x n ) UserRPL: RI ( f var F ) ( {} h {} h dy err ) ( {} tol h {} tol h' ) ( {} xtol xTf {} xtol ) ( {} {xtol step} xTf {} xtol ) ( # #' ) ( # #' ) ( x n x' ) ( [] x ) ( n ... 1 n 1 n...2 ) ( 1...n n 2...n 1 ) ( ) ( prog/s var guess x ) ( prog/s var {guesses} x )

469

3B401 3ED22 0110AB 3ED56 048314 3B819 02A314 0130DD 069314 38105 3B9D2

xRDZ xRECN xRECT xRECV xREF xRE xREMAINDER xRENAME xREORDER xREPEAT xREPL

3C41A 3EAE7 0050DE 05D0AB 3F070 00D314 0220AB 0210AB 0200AB 38E01 38E21 3AEB1 3B16C 3DD33 3DD18 06F0AB 3D3CE

xRES xRESTORE xRESULTANT xREVLIST xR>I xRISCH xRKFERR xRKFSTEP xRKF xRL xRLB xRND xRNRM xROLLD xROLL xROMUPLOAD xROOT

470 Addr. 3DC71 03C0AB 03D0AB Name xROT xROWxROW+

C. User RPL Commands Description ( 1 2 3 2 3 1 ) ( [[]] nrow [[]]' [] ) ( [] n []' elt ) ( [[]] [[]]' n [[]]'' ) ( [[]] [] n [[]]' ) ( [] n n' [] ) ( [[]] [1]...[n] n ) ( [] x1...xn n ) ( [1]...[n] n [] ) ( x1...xn [] ) ( # x' ) ( # x' ) ( [[]] [[]]' ) ( [[]] [pp] [[]]' ) ( [[]] [[]]' ) ( {} xtol h last {} xtol h' cur ) ( {} xtol xTfinal {} xtol ) ( {} h {} h dy err ) ( [B] [[A]] [Z] []' ) ( [[B]] [[A]] [[Z]] [[]]' ) ( []/[[]] i j []/[[]] ) ( ob1 ob2 1/0 ) ( ) ( xf ) UserRPL: SCALEH ( yf ) UserRPL: SCALEW ( xs ys ) ( ) ( [[]] [[Q]] [[T]] ) ( n ) ( ) UserRPL: SCL ( name ) ( ob ) ( xsdev ) ( [x1...xn] )

0360AB 0370AB 38E41 38E61 0340AB 047314 078314 0240AB 0230AB 0250AB 3B22F 0400AB 3C9E5 3EE82 3C444 3C464 3C4D5 3E1EF 0330AB 3B5BA 3E127 3E385 07D314 3DF32

xROW xROW xRR xRRB xRREF xrref xRREFMOD xRRKSTEP xRRK xRSBERR xRSD xRSWP xSAME xSBRK x*H x*W xSCALE xSCATRPLOT xSCHUR xSCI xSCLSIGMA xSCONJ xSCROLL xSDEV

C.1. Reference Addr. 3ECB0 Name xSEND Description ( name ) ( {names} ) ( {{old new}...} ) ( prog var start end incr {} ) ( func var order {} symb' ) ( ) ( symb symb' ) ( n ) ( symb name symb' ) ( symb {names} symb' ) ( x x' ) ( f var F ) ( f(x) F(x) ) ( symb {} ) ( x x' ) ( x y x/gcd y/gcd ) ( symb symb' ) ( symb symb' ) ( x x' ) ( name ) ( x x' ) ( ob n ) ( ob {N m} ) ( # #' ) ( # #' ) ( ) ( name ) ( [] x ) ( symb var {zeros} ) ( ) ( symb {zeros} ) ( {} {}' ) ( ) ( x x' ) ( # #' ) ( [[]] x ) ( # #' ) ( n $ 0/1 ) ( str find repl str' )

471

0530AB 007314 3ED91 064314 3B4C9 3E696 0630AB 0020DE 0010DE 05F314 3A3EE 033314 0220DE 018314 3A678 3E331 3A57C 3BB1F 38E81 38EA1 00C0AB 3E35B 0290AB 03F314 086314 008314 05E0AB 0130AB 3A4EF 38EC1 0280AB 38EE1 3EC55 0100DD

xSEQ xSERIES xSERVER xSEVAL xSF xSHOW xSIDENS xSIGMA xSIGMAVX xSIGNTAB xSIGN xSIMP2 xSIMPLIFY xSINCOS xSINH xSINV xSIN xSIZE xSL xSLB xSLOPEFIELD xSNEG xSNRM xSOLVE xSOLVER xSOLVEVX xSORT xSPHERE xSQ xSR xSRAD xSRB xSRECV xSREPL

472 Addr. 381AB 3B5FA 3851F 3D3AE 3EE62 39164 3B749 3DD6E 0400DE Name xSTART xSTD xSTEP xSTEQ xSTIME xSTOALARM xSTOF xSTOSIGMA xSTOVX

C. User RPL Commands Description ( start finish ) ( ) ( n ) ( symb ) ( ob ) ( x ) ( time n ) ( {date time act rep} n ) ( {#s1 #u1 #s2 #u2} ) ( ob ) UserRPL: STO ( name ) Store object into the reserved CAS variable VX. ( {ob key ...} ) ( {'S' ob key ...} ) ( 'S' ) ( ob name ) ( ob :port:name ) ( lib port ) ( ob 'name(i)' ) ( ob id ) ( ob symb ) Like xSTO, but if the level 1 argument is symbolic, use the rst element of it as the variable to write to. ( ob name ) ( ob name ) ( ob name ) ( ob name ) ( $ ob ) UserRPL: STR ( {} prog x ) ( ob $ ) UserRPL: STR ( n ) ( ob start end ob' ) ob= [[]], $, {}, grob start,end = n, {n m}, (n,m)

3EF07

xSTOKEYS

3E739

xSTO

3E823

xSTO>

3E406 3E46C 3E4D2 3E3AF 3BBD9 0580AB 3BBBE 3B6C1 3B8D7

xSTOxSTO/ xSTO* xSTO+ xSTR> xSTREAM x>STR xSTWS xSUB

C.1. Reference Addr. 002314 06F314 02E0AB 02F0AB 3DC20 04E314 39705 061314 060314 3EFB1 0520AB 01C0DE 021314 01F314 3A70C 3A624 006314 3E6CA 05B314 01A314 0640AB 065314 013314 3C8FA 37F7F 39093 39124 3905D 0650AB 3C6B6 019314 3E97B Name xSUBST xSUBTMOD xSVD xSVL xSWAP xSYLVESTER xSYSEVAL xTABVAL xTABVAR x->TAG xTAIL xTAN2CS2 xTAN2SC2 xTAN2SC xTANH xTAN xTAYLOR0 xTAYLR xTCHEBYCHEFF xTCOLLECT xTDELTA xTEVAL xTEXPAND xTEXT xTHEN xTICKS xSETTIME xTIME xTINC xTLINE xTLIN xTMENU

473 Description ( symb var=s1 symb' ) ( x1 x2 x3 ) ( [[]] [[U]] [[V]] [S] ) ( [[]] [] ) ( ob1 ob2 ob2 ob1 ) ( [[]] [D] [P] ) ( # ? ) ( symb(x) {vals} symb(x) {{vals} {res}} ) ( symb(x) symb(x) {{}{}} grob ) ( ob tag :tag:ob ) UserRPL: TAG ( {} {}' ) ( $ $' ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( x x' ) ( x x' ) ( symb symb' ) ( symb var n symb' ) ( n pol ) ( symb symb' ) ( x y x' ) ( ob ? time ) ( symb symb' ) ( ) ( 0/1 ) ( # ) ( time ) UserRPL: TIME ( time ) ( x y x' ) ( (x1,y1) (x2,y2) ) ( {#n1 #m1} {#n2 #m2} ) ( symb symb' ) ( % [InitMenu%] ) ( Ob [@LIST InitMenu] )

474 Addr. 3DF4D 0270AB 045314 3EE0C 01C314 082314 01D314 01B314 01E314 3C084 3AF3E 063314 3C99D 015314 391F8 39456 0470AB 0480AB 0490AB 04A0AB 3B2DC 3BC39 38FD7 3900B 0140DD 38FB5 3F249 3F22E 38195 39420 3E07D 3E0BD 3E09D 3E0DD Name xTOT xTRACE xTRAN xTRANSIO xTRIGCOS xTRIGO xTRIGSIN xTRIG xTRIGTAN xTRN xTRNC xTRUNC xTRUTH xTSIMP xTSTR xTVARS xTVM xTVMBEG xTVMEND xTVMROOT x%T xTYPE xUBASE xUFACT xUFL1MINIF x>UNIT xUNPICK xUNROT xUNTIL xUPDIR xUTPC xUTPF xUTPN xUTPT

C. User RPL Commands Description ( xsum ) ( {x1...xn} ) ( [[]] x ) ( [[]] [[]]' ) ( name ) ( n ) ( symb symb' ) ( ) ( symb symb' ) ( symb symb' ) ( symb symb' ) ( [[]] [[]]' ) ( name ) ( x n ) ( symb1 symb2 symb3 ) ( ) ( symb symb' ) ( date time $ ) ( ntype {} ) ( {n...} {} ) ( ) ( ) ( ) ( var x ) ( x y 100y/x ) ( ob %type ) ( u u' ) ( u1 u2 u3 ) ( ob n font ) ( x u u' ) UserRPL: UNIT ( obn...ob1 ob n ob...ob2 ) ( 1 2 3 3 1 2 ) ( ) ( ) ( n x x' ) ( n1 n2 x x' ) ( n v x x' ) ( n x x' )

C.1. Reference Addr. 38F81 3C2AC Name xUVAL xV> Description ( u x ) ( []/() x y ) ( []/() x y z ) (in current co-system) UserRPL: V ( x y [] ) ( x y () ) UserRPL: V2 ( x y z [] ) UserRPL: V3 ( {} [[]] ) ( {} ) ( x ) ( [x1...xn] ) ( $ ) ( $ $ ) ( name ) ( name ) ( symb {spat srepl} symb' 0/1 ) ( symb {spat srepl scond} symb' 0/1 ) UserRPL: MATCH ( name n ) ( x x' ) UserRPL: ( sec ) ( 0 rc.p ) ( ) ( ) ( $ $ $ $ ) ( x x' ) UserRPL: ! ( n ) ( name ) ( $ 1 ) ( $ $rest 0 ) ( x x' )

475

3C2D6

x>V2

3C30A 053314 3943B 3DF68 08C314 00F0AB 00A0DD 0080DD 3DB04

x>V3 xVANDERMONDE xVARS xVAR xVER xVERSION xVISITB xVISIT xMATCHDN

3BDB2 3A442 39819 380DB 0080AB 390AE 3ABAF 3E03D 0700AB 3EC35 067314

xVTYPE xSQRT xWAIT xWHILE xWIREFRAME xWSLOG xFACT xXCOL xXGET xXMIT xXNUM

476 Addr. 3CB7A Name xXOR Description ( # #' #'' ) ( $ $' $'' ) ( 1/0 1/0 1/0 ) ( % ) ( symb ) ( name ) ( x x' ) ( name ) ( x1 x2 ) ( y x Y' ) ( ) ( name ) ( x1 x2 ) ( x1 x2 ) ( x y x-y ) ( x y x/y ) ( x y x*y ) ( x y 1 ) ( x y 0 ) UserRPL: ( x y 1 ) ( x y 0 ) UserRPL: = ( x y 1 ) ( x y 0 ) UserRPL: ( x y x+y ) ( x y 1 ) ( x y 0 ) ( x y 1 ) ( x y 0 ) ( x y 1 ) ( x y 0 ) ( x y x=y ) ( x y xy/100 ) ( n ) ( y1 y2 ) ( ) ( y1 y2 )

C. User RPL Commands

3AD65 0710AB 068314 0500AB 3C915 3A278 06E0AB 04F0AB 0000AB 0030AB 39CFC 39F49 39DE8 3CF80

xXPON xXPUT xXQ xXRECV xXRNG xXROOT xXSERV xXSEND xXVOL xXXRNG xx/ x* x<=?

3CD21

x#?

3D01F

x>=?

39B58 3CE42 3CBF6 3CEE1 398B9 3B251 3E05D 3C935 00B0AB 0010AB

x+ x< x== x> x= x% xYCOL xYRNG xYSLICE xYVOL

C.1. Reference Addr. 3A097 0040AB 040314 05F0AB 0020AB Name x xYYRNG xZEROS xZFACTOR xZVOL Description ( y x yx ) ( y1 y2 ) ( symb var {zeros} ) ( xTr yPr xZf ) ( x1 x2 )

477

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 00B100 00C100 00D100 00E100 00F100 010100 011100 012100 Name xH xH xA xA xAH xHA xCD xCD xSH xHS xLST xALG xPRG xCOMP xRAM xSREV xPOKE xPEEK xAPEEK Description ( ob $hex ) ( $hex ob ) ( ob hxs ) ( hxs ob ) ( hxs $hex ) ( $hex hxs ) ( $hex code ) ( code $hex ) ( $ $hex ) ( $hex $ ) ( comp {} ) ( ob1..obn %n {} ) ( comp symb ) ( ob1..obn %n symb ) ( comp :: ) ( ob1..obn %n :: ) ( comp ob1...obn %n ) ( ob ob ) ( $ $' ) ( hxs $hex ) ( hxs1 hxs2 $hex ) ( hxs hxs' ) 478

D.2. The EXTABLE Library Addr. 013100 014100 015100 016100 017100 018100 019100 01A100 01B100 01C100 01D100 01E100 01F100 020100 021100 Name xRSB xSBB xLRR xSN xLCC xASM xBetaTesting xCRLIB xCRC xMAKESTR xSERIAL xASM xER xS2 xXLIB Description ( % # ) ( # % ) ( # hxs ) ( hxs # ) ( %% % ) ( % %% ) ( $ ID ) ( ID $ ) ( %%C %C ) ( %C %%C ) ( Code $ ) ( $ ) ( lib ) ( $ #crc ) ( xlen $ ) ( $ ) ( $ ob ) ( $ {errors} $' ) ( ob $ ) ( xlib xn ROMPTR ) ( ROMPTR xlib xn )

479

D.2

The EXTABLE Library

The EXTABLE library contains the table of entry points and their addresses. It contains some commands which might be useful in programs, also listed below. For a description of these commands, see section A.1. Addr. 001102 002102 003102 Name xGETADR xGETNAME xGETNAMES Description ( $ hxs ) Get the address of an entry name. ( hxs $ ) Get the entry name corresponding to an address. ( $start {} ) Get all entry names which start with the given string. ( $sub {} ) Get all entry names which contain the given string.

004102

xGETNEAR

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 Insufcient Memory Directory Recursion Undened Local Name Undened 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 Cong All Undened 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 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 Cant 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

480

481
#n 119 11A 11B 11C 11D 11E 11F 120 121 122 124 125 126 127 128 129 12A 12B 12C 12D 12E 12F 130 131 132 133 134 135 136 137 138 139 13A 13B 13C 13D 13F 140 141 142 143 144 145 146 147 148 149 Message Function Command System Binary Long Real Long Complex Linked Array Character Code Library Data External LAST STACK Disabled LAST CMD Disabled HALT Not Allowed Array Wrong Argument Count Circular Reference Directory Not Allowed Non-Empty Directory Invalid Denition Missing Library Invalid PPAR Non-Real Result Unable to Isolate No Room to Show Stack Warning: Error: Purge? Out of Memory Stack Last Stack Last Commands Key Assignments Alarms Last Arguments Name Conict Command Line Interrupted Integer Symbolic Matrix Font Aplet Extended Real Extended Complex FlashPtr Extended Ptr MiniFont Extended 1 #n 14A 14B 14C 14D 14E 14F 150 151 152 153 154 155 156 157 158 159 201 202 203 204 205 206 207 208 301 302 303 304 305 501 502 503 504 505 506 601 602 603 604 605 606 607 608 609 60A 60B 60C Message Extended 2 Extended 3 YES NO TRUE FALSE Are you sure? Low Memory ConditionPlease Wait... CATALOG Nonexistent Find Pattern Not Found Nonexistent Replace Pattern Cant Find Selection Y= not available Warning:Changes will not be saved Result not editable in EQW Too Few Arguments Bad Argument Type Bad Argument Value Undened Name LASTARG Disabled IncompleteSubexpression Implicit () off Implicit () on Positive Underow Negative Underow Overow Undened Result Innite Result Invalid Dimension Invalid Array Element Deleting Row Deleting Column Inserting Row Inserting Column Invalid Data Nonexistent DAT Insufcient Data Invalid PAR Invalid Data LN(Neg) Invalid Data LN(0) Invalid EQ Current equation: No current equation. Enter eqn, press NEW Name the equation,press ENTER Select plot type

482
#n 60D 60E 60F 610 611 612 613 614 615 616 617 618 619 61A 61B 61C 61D 61E 61F 620 621 622 623 624 625 626 627 628 629 62A 62B 62C 62D 62E 62F 701 702 703 704 705 706 707 708 709 70A 70B 70C Message Empty catalog undened No stat data to plot Autoscaling Solving for No current data. Enter data point, press + Select a model No alarms pending. Press ALRM to create Next alarm: Past due alarm: Acknowledged Enter alarm, press SET Select repeat interval I/O setup menu Plot type: "" (OFF SCREEN) Invalid PTYPE Name the stat data,press ENTER
Enter value (zoom outif >1), press ENTER

E. Error Messages
#n 70D 70E 70F 710 711 712 713 714 715 716 717 718 719 71A 71B 71C 71D 71E 71F 720 721 722 723 724 725 726 727 728 729 72A 72B 72C 72D 72E 72F 730 731 732 733 734 735 736 737 738 739 73A 73B Message Grads Rectangular Polar Spherical Operating Mode. . . Number Format. . . . . . Angle Measure. . . . . . Coord System. . . . . . . . . FM, Beep Key Click Last Stack Choose calculator operating mode Choose number display format Choose decimal places to display Choose angle measure Choose coordinate system Use comma as fraction mark? Enable standard beep? Enable key click? Save last stk for UNDO and ANS? CALCULATOR MODES Font: Stack: Small Textbook Edit: Small Full Page Indent EQW: Small Small Stack Disp Header: Clock Analog Choose system font Display stack using small font? Use pretty print in the stack? Edit using small font? Edit in full page? Automatically indent new lines? Edit in EQW using small font? Display EQW using small font? Choose header height Display ticking clock? Analog clock?

Copied to stack x axis zoom w/AUTO. x axis zoom. y axis zoom. x and y axis zoom. IR/wire: ASCII/binary: baud: parity: checksum type: translate code: Enter matrix, then NEW No Associated Numeric View Algebraic RPN Standard Std Fixed Fix Scientic Sci Engineering Eng Degrees Radians

483
#n 73C 73D 73E 73F 740 741 742 743 744 745 746 747 748 749 74A 74B 74C 74D 74E 74F 750 751 752 753 754 755 756 757 758 759 75A 75B 75C 75D 75E 75F 760 761 762 763 764 765 766 767 768 769 76A Message DISPLAY MODES Indep var: Modulo: Verbose Step/Step Complex Approx Incr Pow Simp Non-Rational Rigorous Numeric Enter independent variable name Enter modulo value Display calculus information? Perform operations step by step? Allow complex numbers? Perform approx calculations? Increasing polynomial ordering? Simplify non rational expr? Dont simplify |X| to X? Replace constants by values? CAS MODES Goto row: Goto column: Specify a row to go to Specify a column to go to Matrix Writer Bad range value Start: Step: Type: Zoom: Small Font File: Enter starting value Enter increment value Choose table format Enter zoom factor Display table using small font? Enter a lename to save data TABLE SETUP Automatic Build Your Own Function Polar Parametric Diff Eq #n 76B 76C 76D 76E 76F 770 771 772 773 774 775 776 777 778 779 77A 77B 77C 77D 77E 77F 780 781 782 783 784 785 786 787 788 789 78A 78B 78C 78D 78E 78F 790 791 792 793 794 795 796 797 798 799 Message Conic Truth Histogram Bar Scatter Slopeeld Fast3D Wireframe Ps-Contour Y-Slice Gridmap Pr-Surface Deg Rad Grad Type: : EQ: Indep: Connect Simult H-Tick: V-Tick: Pixels Depnd: Save Animation DAT: Col: Cols: F: H-Var: V-Var: Stiff F Y: F T: Choose type of plot Choose angle measure Enter function(s) to plot Enter independent variable name Connect plot points? Plot functions simultaneously? Enter horizontal tick spacing Enter vertical tick spacing Tick spacing units are pixels? Enter dependent variable name Save slices animation? Enter data to plot

484
#n 79A 79B 79C 79D 79E 79F 7A0 7A1 7A2 7A3 7A4 7A5 7A6 7A7 7A8 7A9 7AA 7AB 7AC 7AD 7AE 7AF 7B0 7B1 7B2 7B3 7B4 7B5 7B6 7B7 7B8 7B9 7BA 7BB 7BC 7BD 7BE 7BF 7C0 7C1 7C2 7C3 7C4 7C5 7C6 7C7 7C8 Message Enter col to use for horizontal Enter col to use for vertical Enter horizontal variable Enter vertical variable Use stiff diff eq solver? Enter derivative w.r.t. soln Enter derivative w.r.t. indep PLOT SETUP H-View: V-View: Indep Low: High: Step: Pixels Depnd Low: High: X-Left: X-Right: Y-Near: Y-Far: Step Indep: Depnd: Bar Width: Z-Low: Z-High: XE: YE: ZE: Init: Final: Init-Soln: Tol: XXLeft: XXRight: YYNear: YYFar: Enter minimum horizontal value Enter maximum horizontal value Enter minimum vertical value Enter maximum vertical value Enter minimum indep var value Enter maximum indep var value Enter indep var increment Indep step units are pixels? Enter minimum depend var value Enter maximum depend var value Enter bar width #n 7C9 7CA 7CB 7CC 7CD 7CE 7CF 7D0 7D1 7D2 7D3 7D4 7D5 7D6 7D7 7D8 7D9 7DA 7DB 7DC 7DD 7DE 7DF 7E0 7E1 7E2 7E3 7E4 7E5 7E6 7E7 7E8 7E9 7EA 7EB 7EC 7ED 7EE 801 802 803 804 805 806 807 808 809

E. Error Messages
Message Enter minimum Z view-volume val Enter maximum Z view-volume val Enter X eyepoint coordinate Enter Y eyepoint coordinate Enter Z eyepoint coordinate Enter absolute error tolerance Enter minimum XX range value Enter maximum XX range value Enter minimum YY range value Enter maximum YY range value PLOT WINDOW Default FUNCTION POLAR PARAMETRIC DIFF EQ CONIC TRUTH HISTOGRAM BAR SCATTER SLOPEFIELD FAST3D WIREFRAME PS-CONTOUR Y-SLICE GRIDMAP PR-SURFACE PLOT WINDOW Enter minimum X view-volume val Enter maximum X view-volume val Enter minimum Y view-volume val Enter maximum Y view-volume val Enter indep var sample count Enter depnd var sample count Goto Level: Specify a level to go to HISTORY Must be >= 0 Must be bewteen 0 and 1 0: x : N: : : Null hypothesis population mean Sample mean

485
#n 80A 80B 80C 80D 80E 80F 810 811 812 813 814 815 816 817 818 819 81A 81B 81C 81D 81E 81F 820 821 822 823 824 825 826 827 828 829 82A 82B 82C 82D 82E 82F 830 831 832 833 834 835 836 837 838 Message Sample Size Signicance level Population standard deviation Z-TEST: 1 , KNOWN Alternative Hypothesis x 1: 1: N1: : x 2: 2: N2: Sample mean for population 1 Std deviation for population 1 Sample size for population 1 Signicance level Sample mean for population 2 Std deviation for population 2 Sample size for population 2 Z-TEST: 2 , KNOWN 0: x: N: : Null hyp. population proportion Success count Sample size Signicance level Z-TEST: 1 P X1: N1: : X2: N2: Success count for sample 1 Size of sample 1 Signicance level Success count for sample 2 Size of sample 2 Z-TEST: 2 P x : Sx: 0: : N: Null hypothesis population mean Sample Standard deviation #n 839 83A 83B 83C 83D 83E 83F 840 841 842 843 844 845 846 847 848 849 84A 84B 84C 84D 84E 84F 850 851 852 853 854 855 856 857 858 859 85A 85B 85C 85D 85E 85F 860 861 862 863 864 865 866 867 Message Sample Mean Signicance level Sample size T-TEST: 1 , UNKNOWN x 1: S1: N1: : x 2: S2: N2: Pooled? Sample mean for population 1 Std deviation for sample 1 Sample size for population 1 Signicance level Sample mean for population2 Std deviation for sample 2 Sample size for population 2 "Pooled" if checked T-TEST: 2 , UNKNOWN x : : N: C: Sample mean Population standard deviation Sample size Condence level CONF. INT.: 1 , KNOWN x 1: 1: N1: C: x 2: 2: N2: Sample mean for population 1 Std deviation for sample 1 Size of sample 1 Sample mean for population 2 Std deviation for sample 2 Size of sample 2 Condence level CONF. INT.: 2 , KNOWN x: N:

486
#n 868 869 86A 86B 86C 86D 86E 86F 870 871 872 873 874 875 876 877 878 879 87A 87B 87C 87D 87E 87F 880 881 882 883 884 885 886 887 888 889 88A 88B 88C 88D 88E 88F 890 891 892 893 894 895 896 Message C: Sample success count Sample size Condence level CONF. INT.: 1 P x 1: N1: C: x 2: N2: Sample 1 success count Sample 1 size Sample 2 success count Sample 2 size Condence level CONF. INT.: 2 P x : Sx: N: C: Sample mean Sample standard deviation Sample size Condence level CONF. INT.: 1 , UNKNOWN x 1: S1: N1: C: x 2: S2: N2: Pooled Sample 1 mean Std deviation for sample 1 Sample 1 size Sample 2 mean Std deviation for sample 2 Sample 2 size Condence level Pooled if checked CONF. INT.: 2 , UNKNOWN Search for: Replace by: Case Sensitive Search For: Enter search pattern #n 897 898 899 89A 89B 89C 89D 89E 89F 8A0 8A1 8A2 8A3 8A4 8A5 8A6 8A7 8A8 8A9 8AA 8AB 8AC 8AD 8AE 8AF 8B0 901 902 903 904 905 906 907 908 909 90A 90B 90C 90D A01 A02 A03 A04 A05 A06 A07 A08

E. Error Messages
Message Enter replace pattern Case sensitive search? Enter search pattern FIND REPLACE FIND Goto Line: Specify a line to go to GOTO LINE Goto Position: Specify a position to go to GOTO POSITION H-Factor: V-Factor: Recenter on cursor Enter horizontal zoom factor Enter vertical zoom factor Recenter plot on cursor? ZOOM FACTOR Object: Name: Directory Enter New Object Enter variable name Create a new directory? NEW VARIABLE Select Object [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] [not shown because too long] Inconclusive result Bad Guess(es) Constant? Interrupted Zero Sign Reversal Extremum Left Right

487
#n A09 B01 B02 C01 C02 C03 C04 C05 C06 C07 C08 C09 C0A C0B C0C C0D C0E C0F C10 C11 C12 C13 C14 C15 C16 C17 D01 D02 D03 D04 B901 B902 B903 B904 B905 B906 B907 B908 B909 B90A B90B B90C B90D B90E B90F B910 B911 Message Expr Invalid Unit Inconsistent Units Bad Packet Block Check Timeout Receive Error Receive Buffer Overrun Parity Error Transfer Failed Protocol Error Invalid Server Cmd. Port Closed Connecting Retry # Awaiting Server Cmd. Sending Receiving Object Discarded Packet # Processing Command Invalid IOPAR Invalid PRTPAR Low Battery Empty Stack Row Invalid Name Invalid Date Invalid Time Invalid Repeat Nonexistent Alarm Press [CONT] for menu reset/delete this eld Reset value Delete value Reset all Valid object types: Valid object type: Any object Real number (Complex num) "String" [ Real array ] [(Cmpl array)] { List } Name Program Algebraic #n B912 B913 B914 B915 B916 B917 B918 B919 B91A B91B B91C B91D B91E B91F B920 B921 B922 B923 B924 B925 B926 B927 B928 B929 B92A B92B B92C B92D B92E B92F B930 B931 B932 B933 B934 B935 B936 B937 B938 B939 B93A B93B B93C B93D B93E B93F B940 Message # Binary int _Unit object Invalid object type Invalid object value Calculator Modes Number Format: Angle Measure: Coord System: Beep Clock FM, Choose number display format Enter decimal places to display Choose angle measure Choose coordinate system Enable standard beep? Display ticking clock? Use comma as fraction mark? Standard Std Fixed Fix Scientic Sci Engineering Eng Degrees Deg Radians Rad Grads Grad Rectangular Polar Spherical SYSTEM FLAGS 01 General solutions 02 Constant symb 03 Function symb 14 Payment at end 19 V2 vector 20 Underow 0 21 Overow 9E499 22 Innite error 27 X+Y*i (X,Y) 28 Sequential plot 29 Draw axes too

488
#n B941 B942 B943 B944 B945 B946 B947 B948 B949 B94A B94B B94C B94D B94E B94F B950 B951 B952 B953 B954 B955 B956 B957 B958 B959 B95A B95B B95C B95D B95E B95F B960 B961 B962 B963 B964 B965 B966 B967 B968 B969 B96A B96B B96C B96D B96E B96F Message 31 Connect points 32 Solid cursor 35 ASCII transfer 36 RECV renames 37 Single-space prnt 38 Add linefeeds 39 Show I/O messages 40 Dont show clock 41 12-hour clock 42 mm/dd/yy format 43 Reschedule alarm 44 Delete alarm 51 Fraction mark: . 52 Show many lines 53 No extra parens 54 Tiny element 0 55 Save last args 56 Standard beep on 57 Alarm beep on 58 Show INFO 59 Show variables 60 [][] locks 61 [USR][USR] locks 62 User keys off 63 Custom ENTER off 65 All multiline 66 Stack:x lines str 67 Digital clock 68 No AutoIndent 69 Line edit 70 GROB 1 line str 71 Show addresses 72 Stack:current fnt 73 Edit:current font 74 Right stack disp 75 Key click off 76 Purge conrm 79 Textbook on 80 EQW cur stk font 81 GRB Alg cur font 82 EQW edit cur font 83 Display grobs on 85 Normal stk disp 90 CHOOSE:cur font 91 MTRW:matrix 92 MASD asm mode 94 Result = LASTCMD #n B970 B971 B972 B973 B974 B975 B976 B977 B978 B979 B97A B97B B97C B97D B97E B97F B980 B981 B982 B983 B984 B985 B986 B987 B988 B989 B98A B98B B98C B98D B98E B98F B990 B991 B992 B993 B994 B995 B996 B997 B998 B999 B99A B99B B99C B99D B99E

E. Error Messages
Message 95 RPN mode 97 List:horiz disp 98 Vector:horiz disp 99 CAS:quiet 100 Step by step off 103 Complex off 105 Exact mode on 106 Simp. in series 109 Sym. factorize 110 Normal matrices 111 Simp non rat. 112 i simplied 113 Linear simp on 114 Disp 1+x x+1 115 SQRT simplied 116 Prefer cos() 117 CHOOSE boxes 119 Rigorous on 120 Silent mode off 123 Allow Switch Mode 125 Accur. Sign-Sturm 126 rref w/ last col 128 Cmplx var allowed 01 Principal value 02 Constant num 03 Function num 14 Payment at begin 19 V2 complex 20 Underow error 21 Overow error 22 Innite 9E499 27 X+Y*i X+Y*i 28 Simultaneous plot 29 Dont draw axes 31 Plot points only 32 Inverse cursor 35 Binary transfer 36 RECV overwrites 37 Double-space prnt 38 No linefeeds 39 No I/O messages 40 Show clock 41 24-hour clock 42 dd.mm.yy format 43 Dont reschedule 44 Save alarm 51 Fraction mark: ,

489
#n B99F B9A0 B9A1 B9A2 B9A3 B9A4 B9A5 B9A6 B9A7 B9A8 B9A9 B9AA B9AB B9AC B9AD B9AE B9AF B9B0 B9B1 B9B2 B9B3 B9B4 B9B5 B9B6 B9B7 B9B8 B9B9 B9BA B9BB B9BC B9BD B9BE B9BF B9C0 B9C1 B9C2 B9C3 B9C4 B9C5 B9C6 B9C7 B9C8 B9C9 B9CA B9CB B9CC B9CD Message 52 Show one line 53 Show all parens 54 Use tiny element 55 No last args 56 Standard beep off 57 Alarm beep off 58 Dont show INFO 59 Show names only 60 [] locks Alpha 61 [USR] locks User 62 User keys on 63 Custom ENTER on 65 Level 1 multiline 66 Stk: 1 line str 67 Analog clock 68 AutoIndent 69 Innite line edit 70 GROB x lines str 71 No addresses 72 Stack:mini font 73 Edit:mini font 74 Left stack disp 75 Key click on 76 No purge conrm 79 Textbook off 80 EQW mini stk font 81 GRB Alg mini font 82 EQW edit mini fnt 83 Display grobs off 85 SysRPL stk disp 90 CHOOSE:mini font 91 MTRW:list of list 92 MASD SysRPL mode 94 Result <> LASTCMD 95 Algebraic mode 97 List:vert disp 98 Vector:vert disp 99 CAS:verbose 100 Step by step on 103 Complex on 105 Approx. mode on 106 !Simp. in series 109 Num. factorize 110 Large matrices 111 !Simp non rat. 112 i not simplied 113 Linear simp off #n B9CE B9CF B9D0 B9D1 B9D2 B9D3 B9D4 B9D5 B9D6 B9D7 B9D8 B9D9 B9DA BA01 BA02 BA03 BA04 BA05 BA06 BA07 BA08 BA09 BA0A BA0B BA0C BA0D BA0E BA0F BA10 BA11 BA12 BA13 BA14 BA15 BA16 BA17 BA18 BA19 BA1A BA1B BA1C BA1D BA1E BA1F BA20 BA21 BA22 Message 114 Disp x+1 1+x 115 SQRT !simplied 116 Prefer sin() 117 Soft MENU 119 Rigorous off 120 Silent mode on 123 Forb. Switch Mode 125 FastSign-no Sturm 126 rref w/o last col 128 Vars are reals Object: Obs in Name: 1.Send to HP 49. . . 2.Get from HP 49 3.Print display 4.Print. . . 5.Transfer. . . 6.Start Server Enter names of vars to send Vars in SEND TO HP 49 Port: Dbl-Space Delay: Xlat: Linef Baud: Parity: Len: Choose print port Enter object(s) to print Print extra space between lines? Enter delay between lines Choose character translations Print linefeed between lines? Choose baud rate Choose parity Enter printer line length PRINT Type: OvrW Fmt: Chk: Choose transfer port Choose type of transfer Enter names of vars to transfer

490
#n BA23 BA24 BA25 BA26 BA27 BA28 BA29 BA2A BA2B BA2C BA2D BA2E BA2F BA30 BA31 BA32 BA33 BA34 BA35 BA36 BA37 BA38 BA39 BA3A BA3B BA3C BA3D BA3E BA3F BA40 BA41 BA42 BA43 BB01 BB02 BB03 BB04 BB05 BB06 BB07 BB08 BB09 BB0A BB0B BB0C BB0D BB0E Message Choose transfer format Choose checksum type Overwrite existing variables? TRANSFER Local vars Remote PC les Files in Enter name of dir to change to Choose Remote Directory Infrared IR Wire Kermit XModem Odd Even Mark Space Spc ASCII ASC Binary Bin None Newline (Ch 10) Newl Chr 128-159 159 255 Chr 128-255 One-digit arith Two-digit arith Three-digit CRC 1.Single-var. . . 2.Frequencies. . . 3.Fit data. . . 4.Summary stats. . . SINGLE-VARIABLE STATISTICS DAT: Type: Mean Std Dev Variance Total Maximum Minimum Enter statistical data #n BB0F BB10 BB11 BB12 BB13 BB14 BB15 BB16 BB17 BB18 BB19 BB1A BB1B BB1C BB1D BB1E BB1F BB20 BB21 BB22 BB23 BB24 BB25 BB26 BB27 BB28 BB29 BB2A BB2B BB2C BB2D BB2E BB2F BB30 BB31 BB32 BB33 BB34 BB35 BB36 BB37 BB38 BB39 BB3A BB3B BB3C BB3D

E. Error Messages
Message Enter variable column Choose statistics type Calculate mean? Calculate standard deviation? Calculate variance? Calculate column total? Calculate column maximum? Calculate column minimum? Sample Population FREQUENCIES X-Min: Bin Count: Bin Width: Enter minimum rst bin X value Enter number of bins Enter bin width FIT DATA X-Col: Y-Col: Model: Enter indep column number Enter dependent column number Choose statistical model Correlation Covariance PREDICT VALUES Y: Enter indep value or press PRED Enter dep value or press PRED SUMMARY STATISTICS Calculate: X Y X2 Y2 XY N Calculate sum of X column? Calculate sum of Y column? Calculate sum of squares of X? Calculate sum of squares of Y? Calculate sum of products? Calculate number of data points? Linear Fit Logarithmic Fit Exponential Fit

491
#n BB3E BB3F BB40 BB41 BC01 BC02 BC03 BC04 BC05 BC06 BC07 BC08 BC09 BC0A BC0B BC0C BC0D BC0E BC0F BC10 BC11 BC12 BC13 BC14 BC15 BC16 BC17 BC18 BC19 BC1A BC1B BC1C BC1D BC1E BC1F BC20 BC21 BC22 BC23 BC24 BC25 BC26 BC27 BC28 BC29 BC2A BC2B Message Power Fit Best Fit 5.Hypoth. tests. . . 6.Conf. interval. . . 1.Browse alarms. . . 2.Set alarm. . . 3.Set time, date. . . SET ALARM Message: Time: Date: Repeat: Enter "message" or action Enter hour Enter minute Enter second Choose AM, PM, or 24-hour time Enter month Enter day Enter year Enter alarm repeat multiple Enter alarm repeat unit SET TIME AND DATE Choose date display format Monday Tuesday Wednesday Thursday Friday Saturday Sunday None AM PM 24-hour time 24-hr 1 January 2 February 3 March 4 April 5 May 6 June 7 July 8 August 9 September 10 October 11 November #n BC2C BC2D BC2E BC2F BC30 BC31 BC32 BC33 BC34 BC35 BC36 BC37 BC38 BC39 BC3A BC3B BD01 BD02 BD03 BD04 BD05 BD06 BD07 BD08 BD09 BD0A BD0B BD0C BD0D BD0E BD0F BD10 BD11 BD12 BD13 BD14 BD15 BD16 BD17 BD18 BD19 BD1A BD1B BD1C BD1D BD1E BD1F Message 12 December Week Day Hour Minute Second Weeks Days Hours Minutes Seconds Month/Day/Year M/D/Y Day.Month.Year D.M.Y ALARMS 1.Integrate. . . 2.Differentiate. . . 3.Taylor poly. . . 4.Isolate var. . . 5.Solve quad. . . 6.Manip expr. . . INTEGRATE Expr: Var: Result: Enter expression Enter variable name Enter lower limit Enter upper limit Choose result type Choose disp format for accuracy DIFFERENTIATE Value: Enter variable value Expression TAYLOR POLYNOMIAL Order: Enter Taylor polynomial order ISOLATE A VARIABLE Principal Get principal solution only? SOLVE QUADRATIC MANIPULATE EXPRESSION MATCH EXPRESSION Pattern: Replacement:

492
#n BD20 BD21 BD22 BD23 BD24 BD25 BD26 BD27 BE01 BE02 BE03 BE04 BE05 BE06 BE07 BE08 BE09 BE0A BE0B BE0C BE0D BE0E BE0F BE10 BE11 BE12 BE13 BE14 BE15 BE16 BE17 BE18 BE19 BE1A BE1B BE1C BE1D BE1E BE1F BE20 BE21 BE22 BE23 BE24 BE25 BE26 BE27 Message Subexpr First Cond: Enter pattern to search for Enter replacement object Search subexpressions rst? Enter conditional expression Symbolic Numeric Plot Type: : H-View: Autoscale V-View: Choose type of plot Choose angle measure Enter function(s) to plot Enter minimum horizontal value Enter maximum horizontal value Autoscale vertical plot range? Enter minimum vertical value Enter maximum vertical value Plot (x(t), y(t)) Enter complex-valued func(s) Plot y(t)=f(t,y) Enter function of INDEP and SOLN Enter derivative w.r.t. SOLN Enter derivative w.r.t. INDEP Use Stiff diff eq solver? Dat: Col: Wid: Enter data to plot Arrays in Enter column to plot Enter bar width Cols: Enter col to use for horizontal Enter col to use for vertical Steps: Enter indep var sample count Enter dep var sample count Plot Options Lo: Hi: Axes Simult #n BE28 BE29 BE2A BE2B BE2C BE2D BE2E BE2F BE30 BE31 BE32 BE33 BE34 BE35 BE36 BE37 BE38 BE39 BE3A BE3B BE3C BE3D BE3E BE3F BE40 BE41 BE42 BE43 BE44 BE45 BE46 BE47 BE48 BE49 BE4A BE4B BE4C BE4D BE4E BE4F BE50 BE51 BE52 BE53 BE54 BE55 BE56

E. Error Messages
Message Connect Pixels H-Tick: V-Tick: Enter minimum indep var value Enter maximum indep var value Draw axes before plotting? Connect plot points? Plot functions simultaneously? Enter indep var increment Indep step units are pixels? Enter horizontal tick spacing Enter vertical tick spacing Tick spacing units are pixels? Depnd: Enter dependent var name Enter minimum dep var value Enter maximum dep var value H-Var: V-Var: Enter max indep var increment Choose horizontal variable Choose vertical variable 0 INDEP 1 SOLN SOLN( X-Left: X-Right: Y-Near: Y-Far: Z-Low: Z-High: Enter minimum X view-volume val Enter maximum X view-volume val Enter minimum Y view-volume val Enter maximum Y view-volume val Enter minimum Z view-volume val Enter maximum Z view-volume val XE: YE: ZE: Enter X eyepoint coordinate Enter Y eyepoint coordinate Enter Z eyepoint coordinate Save Animation Save animation data after plot? XX-Left:

493
#n BE57 BE58 BE59 BE5A BE5B BE5C BE5D BE5E BE5F BE60 BE61 BE62 BE63 BE64 BE65 BE66 BE67 BE68 BE69 BE6A BE6B BE6C BE6D BE6E BE6F BE70 BE71 BE72 BE73 BE74 BE75 BE76 BE77 BF01 BF02 BF03 BF04 BF05 BF06 BF07 BF08 BF09 BF0A BF0B BF0C BF0D BF0E Message XX-Rght: YY-Near: YY-Far: Enter minimum XX range value Enter maximum XX range value Enter minimum YY range value Enter maximum YY range value XX and YY Plot Options Zoom Factors H-Factor: V-Factor: Recenter at Crosshairs Enter horizontal zoom factor Enter vertical zoom factor Recenter plot at crosshairs? Reset plot Dt Auto Function Polar Conic Truth Parametric Diff Eq Histogram Bar Scatter Slopeeld Wireframe Ps-Contour Y-Slice Gridmap Pr-Surface 1.Solve equation. . . 2.Solve diff eq. . . 3.Solve poly. . . 4.Solve lin sys. . . 5.Solve nance. . . SOLVE EQUATION Enter value or press SOLVE Eq: Enter function to solve Funcs in Solver Variable Order Variables: Enter order of vars to display SOLVE Y(T)=F(T,Y) #n BF0F BF10 BF11 BF12 BF13 BF14 BF15 BF16 BF17 BF18 BF19 BF1A BF1B BF1C BF1D BF1E BF1F BF20 BF21 BF22 BF23 BF24 BF26 BF27 BF28 BF29 BF2A BF2B BF2C BF2D BF2E BF2F BF30 BF31 BF32 BF33 BF34 BF35 BF36 BF37 BF38 BF39 BF3A BF3B BF3C BF3D BF3E Message f: f y: f t: Indep: Init: Final: Soln: Tol: Step: Stiff Enter function of INDEP and SOLN Enter derivative w.r.t. SOLN Enter derivative w.r.t. INDEP Enter independent var name Enter initial indep var value Enter nal indep var value Enter solution var name Enter initial solution var value Press SOLVE for nal soln value Enter absolute error tolerance Enter initial step size Calculate stiff differential? Tolerance Solution SOLVE ANXN+. . . +A1X+A0 Coefcients [ an . . . a1 a0 ]: Roots: Enter coefcients or press SOLVE Enter roots or press SOLVE Coefcients Roots SOLVE SYSTEM AX=B A: B: X: Enter coefcients matrix A Enter constants or press SOLVE Enter solutions or press SOLVE Constants Solutions N: I%YR: PV: PMT: P/YR: FV: Enter no. of payments or SOLVE

494
#n BF3F BF40 BF41 BF42 BF43 BF44 BF45 BF47 BF48 BF49 BF4A BF4B BF4C BF4D BF4E BF4F BF50 BF51 BF52 BF53 BF54 BF55 BF56 C001 DE01 DE02 DE03 DE04 DE05 DE06 DE07 DE08 DE09 DE0A DE0B DE0C DE0D DE0E DE0F DE10 DE11 DE12 DE13 DE14 DE15 DE16 DE17 Message Enter yearly int rate or SOLVE Enter present value or SOLVE Enter payment amount or SOLVE Enter no. of payments per year Enter future value or SOLVE Choose when payments are made TIME VALUE OF MONEY I%/YR PV PMT FV End Begin Beg AMORTIZE Payments: Principal: Interest: Balance: Enter no. of payments to amort Principal Interest Balance Unable to nd root denominator(s) root(s) last obvious factorizing value test(s) searching TAYLR of at nth is numerator(s) Less than multiplicity list of at factor(s) Eigenvalues Computing for Root mult < Numerical to symbolic Invalid operator Result: #n DE18 DE19 DE1A DE1B DE1C DE1D DE1E DE1F DE20 DE21 DE22 DE23 DE24 DE25 DE26 DE27 DE28 DE29 DE2A DE2B DE2C DE2D DE2E DE2F DE30 DE31 DE32 DE33 DE34 DE35 DE36 DE37 DE38 DE39 DE3A DE3B DE3C DE3D DE3E DE3F DE40 DE41 DE42 DE43 DE44 DE45 DE46

E. Error Messages
Message Pivots Press CONT to go on Test To be implemented Unable to factor Z is not = 1 mod 4 Z is not prime Empty {} of equations Not reducible to a rational expression Non unary operator User function Non isolable operator Not exact system Parameters not allowed CAS internal error Invalid for SERIES Operator not implemented (SERIES) No variable in expr. No solution found Invalid derivation arg No solution in ring Not a linear system Cant derive int. var Diff equation order>2 INT:invalid var change Mode switch cancelled No name in expression Invalid user function Cant nd ODE type Integer too large Unable to nd sign Non-symmetric matrix ATAN insufcent order ASIN at innity undef Unsigned inf error LN[Var] comparison err Undef limit for var Bounded var error Got expr. indep of var Cant state remainder LN of neg argument Insufcient order ABS of non-signed 0 Numeric input Singularity! Continue? Cancelled Negative integer

495
#n DE47 DE48 DE49 DE4A DE4B DE4C DE4D DE4E DE4F DE50 DE51 DE52 DE53 DE54 DE55 DE56 DE57 DE58 DE59 DE5A DE5B DE5C DE5D DE5E DE5F DE60 DE61 DE62 DE63 DE64 DE65 DE66 DE67 DE68 E101 E102 E103 E104 E105 E106 E107 E108 E109 E10A E10B E10C E10D Message Parameter is cur. var. dependent Unsimplied sqrt Non polynomial system Unable to solve ODE Array dimension too large Unable to reduce system Complex number not allowed Polyn. valuation must be 0 Mode switch not allowed here Non algebraic in expression Purge current variable Reduction result Matrix not diagonalizable Int[u*F(u)] with u= Int. by part u*v, u= Square root Rational fraction Linearizing Risch alg. of tower Trig. fraction, u= Unknown operator (DOMAIN) Same points Unsigned inf. Solve? CAS not available Can not store current var Not available on the HP40G Not available on the HP49G SERIES remainder is O(1) at order 3
Delta/Heaviside not available from HOME

Warning, integrating in approx mode Function is constant Can not unbind local vars Replacing strict with large inequality No valid environment stored Avogadros number Boltzmann molar volume universal gas std temperature std pressure Stefan-Boltzmann speed of light permittivity permeability accel of gravity gravitation Plancks

#n E10E E10F E110 E111 E112 E113 E114 E115 E116 E117 E118 E119 E11A E11B E11C E11D E11E E11F E120 E121 E122 E123 E124 E125 E126 E127 E128 E129 E401 E402 E403 E404 E405 E406 E407 E408 E601 E602 E603 E604 E605 E606 E607 E608 E609 E60A E60B

Message Diracs electronic charge electron mass q/me ratio proton mass mp/me ratio ne structure mag ux quantum Faraday Rydberg Bohr radius Bohr magneton nuclear magneton photon wavelength photon frequency Compton wavelen 1 radian 2 radians in trig mode Wiens k/q 0/q q*0 dielectric const SiO2 dielec cons ref intensity CONSTANTS LIBRARY Undened Constant Invalid Mpar Single Equation EQ Invalid for MINIT Too Many Unknowns All Variables Known Illegal During MROOT Solving for Searching No Solution Many or No Solutions I%YR/PYR -100 Invalid N Invalid PYR Invalid #Periods Undened TVM Variable END mode BEGIN mode payments/year Principal

496
#n E60C E60D E701 E702 E703 E704 E705 E706 10001 10002 10003 10004 10005 10006 10101 10102 10103 10104 Message Interest Balance NEAR MINE MINES SCORE: YOU MADE IT!! YOU BLEW UP!! Invalid $ROMID Invalid $TITLE Invalid $MESSAGE Invalid $VISIBLE Invalid $HIDDEN Invalid $EXTPRG Invalid File Too Many Unknown Instruction Invalid Field #n 10105 10106 10107 10108 10109 1010A 1010B 1010C 1010D 1010E 1010F 10110 10111 10112 10113 10114 10115 31401

E. Error Messages
Message Val betw 0-15 expected Val betw 1-16 expected Label Expected Hexa Expected Decimal Expected Cant Find Label already dened { expected } expected ( expected Forbidden Bad Expression Jump too Long Val betw 1-8 expected Insufsant Memory Matrix Error Dene Error No Message here

Part VI Index

Appendix F Entries sorted by Name


The entries in this index have been sorted alphabetically, ignoring case. Leading characters , , and x have no inuence 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 rst 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 xAH 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 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

499

500
Addr. 54C006 540006 549006 560006 14B006 506006 535006 544006 55A006 558006 570006 574006 55E006 564006 39E006 2619D 556006 562006 523006 56A006 56C006 568006 131006 12F006 241006 145006 06E314 577006 14F006 0C9007 0000DE 14D006 55C006 2EF75 149006 511006 537006 53B006 542006 554006 551006 539006 410006 546006 147006 153006 566006 12D006 Name addtASINH addtATAN addtATANH addtCEIL addtCOMB addtCONJ addtCOS addtCOSH addtD->R addtEXP addtEXPM addtFACT addtFLOOR addtFP addti addtics addtINV addtIP addtLN addtLNP1 addtLOG addtMANT addtMAX addtMIN ADDTMOD addtMOD xADDTMOD addtNOT addtOR ADDTOREAL xADDTOREAL addtPERM addtR->D AddTrailingSpace addtRND addtSIGN addtSIN addtSINACOS addtSINH addtSQ addtSQRT addtTAN addtTAN/2 addtTANH addtTRNC addtXOR addtXPON addtXROOT Page 364 364 364 365 363 363 363 364 364 364 365 365 365 365 360 364 365 363 365 365 365 362 362 416 363 453 365 363 408 453 363 365 312 363 362 364 364 364 364 364 364 366 364 363 363 365 362 Addr. 2F179 047CF 047DD 2AF37 2B06A 071AB 31123 25FA9 2F178 25E7A 38093 0A8006 093006 080314 11A007 2BE36 2F2DA 2AA43 256EA 25E7B 2F1AF 00E004 00F004 000FF 2F177 3AAE5 41C006 31066 04B0AB 3CA07 03B46 25E7C 36D4E 36EED 36E6B 3F033 33107 012100 2F31A 2EF5A 29F25 29F35 35BD7 0FE006 2A145 2A158 2A055 2A065

F. Entries sorted by Name


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 Addr. 43E006 43D006 022314 430006 534006 3A94F 453006 452006 548006 3EB64 27882 25FAE 338C3 05040 05068 25E7D 2EF6C 0130DE 3C49F 2EEEF 3C3B2 04A314 049314 382006 04C314 38F21 33661 0905F 081D9 35C006 3C9D3 3E196 080314 2EFBF 2F9006 0110DE 3EDCC 0530B3 05B0B3 05C0B3 03F0B3 0370B3 0380B3 04B0B3 0150B3 0590B3 05A0B3 0190B3 Name atan2ln ATAN2LNext xATAN2S ATAN2Sext xATANext xATANH atanh2ln ATANH2LNext xATANHext xATTACH Attn# ATTN? ATTNERR ATTNFLG@ ATTNFLGCLR ATTNxcp AtUserStack xAUGMENT xAUTO AUTOSCALE xAXES xAXL xAXM AXQ xAXQ xB>R backup BAK>OB BAKNAME BANGARRY xBAR xBARPLOT xBASE BASE base_ln xBASIS xBAUD BBDownArrow BBEmpty? BBGetDefltHeight BBGetN BBGetNGrob BBGetNStr BBIsChecked? BBMoveTo BBPgDown BBPgUp BBRecalOff&Disp

501
Page 366 352 454 356 349 454 367 352 350 454 19 207 19 207 207 197 454 318 454 454 454 345 454 454 101 101 343 454 454 454 177 420 454 246 246 246 246 245 245 246 245 246 246 245

419 353 453 453 453 38 453 338 10 454 18 13 17 338 65 64 454 352 352 366 454 357 366 351 454 356 349 454 367 352 350 282 479 479 454 208 454 454 366 352

502
Addr. 02F0B3 03B0B3 0250B3 03C0B3 0240B3 03E0B3 0230B3 0260B3 0290B3 0280B3 0220B3 0540B3 0520B3 39765 071A2 08F006 08E006 3EA006 3E2C1 169006 019100 4C8006 0CF006 280006 25FB3 25FB8 25FBD 25FC2 25FC7 3B655 074D0 3E171 33107 33111 3316B 334EF 334F9 33503 3350D 33517 33521 3352B 33535 3353F 33549 33175 33553 3355D Name BBReDrawBackgr BBRereadChkEnbl BBReReadCoords BBRereadFullScr BBReReadHeight BBReReadNElems BBReReadPageSize BBReReadWidth BBRunCanclAction BBRunENTERAction BBRunEntryProc BBSpace BBUpArrow xBEEP BEGIN Berlekamp BerlekampP BESTDIV2 xBESTFIT BESTMATRIXTYPE xBetaTesting BEZOUTMSOLV BFactor BICARREE? BIGDISPN BIGDISPROW1 BIGDISPROW2 BIGDISPROW3 BIGDISPROW4 xBIN BIND xBINS BINT0 BINT1 BINT10 BINT100 BINT101 BINT102 BINT103 BINT104 BINT105 BINT106 BINT107 BINT108 BINT109 BINT11 BINT110 BINT111 Page 245 246 245 246 245 246 245 245 245 245 245 246 246 454 150 373 373 357 454 65 479 396 331 382 281 281 281 281 281 454 116 454 10 10 10 15 15 15 15 15 15 15 15 15 15 10 15 15 Addr. 33567 33571 3357B 33585 3358F 33599 335A3 335AD 3317F 335B7 335C1 335CB 335D5 335DF 335E9 335F3 335FD 33607 33611 33189 3361B 3361B 33625 33625 33193 3319D 331A7 331B1 331BB 331C5 3311B 331CF 331D9 331E3 331ED 331F7 33201 3371F 33729 3320B 33215 3321F 33229 33125 33233 3323D 33247 33251

F. Entries sorted by Name


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 Page 12 12 12 12 12 12 10 12 13 12 12 12 12 12 12 12 12 12 10 13 13 13 13 13 13 13 13 13 13 10 13 13 13 13 13 13 13 13 14 14 10 14 14 14 14 14 14 14 Addr. 33409 33413 3341D 33157 33427 33607 33431 3343B 33445 3344F 33459 33463 3346D 33477 33481 33161 3348B 33495 3349F 334A9 334B3 334BD 334C7 334D1 334DB 334E5 33585 3358F 335CB 3361B 33625 33751 33495 334C7 336D9 0D4006 2EFC5 2EFC9 2EFC7 2EFC3 2EFC4 2EFC8 2EFC6 2EFC2 2EFBC 2EFB9 2EFBA 2EFBD Name BINT77 BINT78 BINT79 BINT8 BINT80 BINT80h BINT81 BINT82 BINT83 BINT84 BINT85 BINT86 BINT87 BINT88 BINT89 BINT9 BINT90 BINT91 BINT92 BINT93 BINT94 BINT95 BINT96 BINT97 BINT98 BINT99 BINT_115d BINT_116d BINT_122d BINT_130d BINT_131d BINT_263d BINT_91d BINT_96d BINTC0h BIsPrime? bit#%* bit#%+ bit#%bit#%/ bit%#* bit%#+ bit%#bit%#/ bit* bit+ bitbit/

503
Page 14 14 14 10 14 16 14 14 14 14 14 14 14 14 14 10 14 14 14 14 15 15 15 15 15 15 15 15 15 16 16 17 14 15 16 332 57 57 57 58 57 57 57 57 57 57 57 57

504
Addr. 2EFAC 2EFB8 2EFAF 2EFAD 2EFB6 2EFB7 2EFB4 2EFB5 2EFB0 2EFB1 2EFB2 2EFB3 2EFAE 3C70A 2F16D 2EF5E 2EE5C 2F31B 2F31C 25E7E 2F31D 3C6E0 25E7F 25E80 0D5006 0100E0 0A5003 0A4003 0D0006 03D0B3 0AB003 0A6003 0130E0 070004 0190E0 0180E0 0030E0 0A7003 3EE47 2F31E 39480 261D4 27E2E 05DBC 261D9 261DE 261E3 51E006 Name bitAND bitASR bitNOT bitOR bitRL bitRLB bitRR bitRRB bitSL bitSLB bitSR bitSRB bitXOR xBLANK Blank$ BlankDA1 BlankDA12 BlankDA2 BlankDA2a BLANKIT BOTROW xBOX Box/StdLabel Box/StdLbl: BRabin BRbrowse BRDispItems BRdone BrentPow BReReadMenus BRGetItem BRinverse BRoutput BrowseMem.1 BRRclC1 BRRclCurRow BRStoC1 BRViewItem xBUFLEN BUILDKPACKET xBYTES C%%0= C%%1 C%%>%% C%%>C% C%%CHS C%%CONJ C%%SQRT Page 58 58 58 58 58 58 58 58 58 58 58 58 58 454 48 277 277 277 277 277 279 454 95 95 332 Addr. 27DBF 2B2A7 27DE4 261E8 2B15D 27E09 25E81 2B1C1 2B22A 2F31F 05D2C 25E82 25E83 18B006 25E84 25E85 25E86 25E87 25E88 25E89 25E8A 25E8B 25E8C 25E8F 25E90 261ED 261F2 25E8D 25E8E 25E91 25E92 25E93 25E94 25E95 25E96 25E97 25E98 25E99 25E9A 188006 01E0DE 25E9B 3C58E 3BAF5 25E9C 34D00 2EF72 2EF91

F. Entries sorted by Name


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%CC C%CR C%CHS C%CONJ C%COS C%COSH C%EXP C%LN C%LOG C%RC 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

331 246

246

454 455 38 36 37 37 38 38 38

bitAND CHR_:
Addr. 2EF90 2B2F2 57F006 050ED 05089 15B006 07E314 0330DE 467006 46B006 349F9 38B28 349D6 34985 365CC 36C4F 36C4F 349B1 3495D 36C36 365B3 368FB 361B2 365E5 36B53 3652C 2AA70 1D5006 466006 007100 3EB006 0516C 05153 3AD1B 25FEF 25FF4 3C3DC 3B4E9 2DA2B 2DA11 08F007 2B5006 0BE002 05AB3 3355D 2F1AD 2F1A7 26210 Name CAL_CURS_POS_VIS CallEditCmd: CANTFACTOR CAR$ CARCOMP CARCOMPext xCASCFG xCASCMD CASCOMPEVAL CASCRUNCH case xCASE case2DROP case2drop case2drpfls caseDEADKEY caseDoBadKey caseDROP casedrop caseDrpBadKy casedrpfls casedrptru caseERRJMP caseFALSE caseSIZEERR caseTRUE CASEVAL CASFLAGEVAL CASNUMEVAL xCD CDIV2ext CDR$ CDRCOMP xCEIL CENTER$3x5 CENTER$5x7 xCENTR xCF cfC cfF CFGDISPLAY CGCDext ChangeFocus CHANGETYPE char CharEdit CHARSEDIT CHECK_SCAN_FONT Page 301 311 403 47 68 372 455 455 353 353 139 455 140 139 140 146 146 139 139 146 139 139 146 140 146 140 408 353 478 47 68 455 96 97 455 455 30 30 405 333 179 15 50 Addr. 2F320 04708 25F2B 25EA6 2F162 0AA006 2F163 07D007 03A314 00B0DE 04D0AB 0000B3 070002 072002 076002 074002 077002 073002 2F15A 075002 0050B3 0060B3 0070B3 0630B3 3BC19 05A51 37AA5 33D40 33D47 33D4E 33D55 33D5C 33F46 33D63 33D32 33D6A 33D71 33D2B 33D78 33D7F 33D86 33D8D 33D94 33D9B 33DA2 33DA9 33DB0 33DB7 Name CHECKHEIGHT CHECKKEY CHECKMENU CheckMenuRow CHECKPICT CheckPNoExt CHECKPVARS CHECKSING xCHINREM xCHOLESKY xCHOOSE Choose Choose2 Choose3 Choose3CANCL Choose3Index Choose3OK Choose3Save CHOOSE_INIT ChooseDefHandler ChooseMenu0 ChooseMenu1 ChooseMenu2 ChooseSimple xCHR CHR># CHR>$ CHR_# CHR_* CHR_+ CHR_, CHR_CHR_-> CHR_. CHR_... CHR_/ CHR_0 CHR_00 CHR_1 CHR_2 CHR_3 CHR_4 CHR_5 CHR_6 CHR_7 CHR_8 CHR_9 CHR_:

505
Page 90 205 293 293 316 374 316 402 455 455 244 233 233 234 233 234 233 233 244 244 244 244 455 22 47 41 41 41 41 41 43 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41

506
Addr. 33DBE 33DC5 33F4D 33FBD 33FCB 33DCC 33DD3 33FC4 33F54 33FA1 33FA8 33E90 33DDA 33F5B 33DE1 33E97 33DE8 33E9E 33EA5 33DEF 33D39 33F62 33EAC 33DF6 33EB3 33DFD 33E04 33EBA 33EC1 33E0B 33E12 33EC8 33F69 33E19 33ECF 33ED6 33E20 33EDD 33E27 33F70 33E2E 33EE4 33EEB 33E35 33F77 33E3C 33EF2 33E43 Name CHR_; CHR_< CHR_<< CHR_<= CHR_<> CHR_= CHR_> CHR_>= CHR_>> CHR_[ CHR_] CHR_a CHR_A CHR_Angle CHR_B CHR_b CHR_C CHR_c CHR_d CHR_D CHR_DblQuote CHR_Deriv CHR_e CHR_E CHR_f CHR_F CHR_G CHR_g CHR_h CHR_H CHR_I CHR_i CHR_Integral CHR_J CHR_j CHR_k CHR_K CHR_l CHR_L CHR_LeftPar CHR_M CHR_m CHR_n CHR_N CHR_Newline CHR_O CHR_o CHR_P Page 41 41 43 43 43 41 41 43 43 42 42 42 41 43 41 42 41 42 42 42 41 43 42 42 42 42 42 42 42 42 42 42 43 42 42 42 42 42 42 41 42 43 43 42 41 42 43 42 Addr. 33EF9 33F7E 33E4A 33F00 33F07 33E51 33F85 33F0E 33E58 33F8C 33F93 33F15 33E5F 33E66 33F1C 33F9A 33E6D 33F23 33F2A 33E74 33F31 33E7B 33E82 33F38 33E89 33F3F 33FAF 33FB6 01D0DE 2F215 2F216 2F217 2F218 2F219 2F13D 51D006 203006 202006 25EA7 2631E 26328 26323 007002 25EA8 262B0 25E9D 26292 262B5

F. Entries sorted by Name


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+ ckaddtCKALG CKCARCOMP CkChr00 CkEQUtil CKFPOLYext CKGROBFITS CKINNERCOMP CKINT>0 CKLN CKMATRIXELEM CKN CKNNOLASTWD CKNUMARRY cknumdsptch1 CKPICT CKREAL CKREF CKSAMESIZE CkSecoType xCKSM CKSYMBTYPE CKSYMREALCMP CLCD10 CLEANIDLAM Page 197 201, 333 197 197 421 198, 328 196 197 326 197 198, 328 196 197 197 198, 328 196 197 197 196 197 197 361 360 361 201 73 55 326 90 72 334 348 326 196 197 65 87 316 198 171 339 455 199 201 277 326 Addr. 3DD4E 261C5 2F15B 2F2DC 26021 2A085 2A0A5 2A0B5 2A095 39144 2F153 2EED7 39839 3EC95 2EEC9 2F15E 2EED4 2EED5 2571E 26035 2569A 25676 2649F 09D007 2EE74 2EE7D 2EE8D 2EE75 2EE8E 2EEB3 2EE80 2EE81 2EE8F 2EEA7 2EE90 2EEB5 2EE6E 2EE6D 2EF68 0A1007 319C1 2603A 257BE 2EEAF 2561C 0AC007 2603F 2F325 Name xCLEAR CLEARLCD CLEARMENU ClearSelection CLEARVDISP Clipboard! Clipboard0 Clipboard? Clipboard@ xCLKADJ CLKADJ* CLKTICKS xCLLCD xCLOSEIO CLOSEUART Clr16 Clr8 Clr8-15 ClrAlgEntry ClrAlphaAnn ClrAppMode ClrAppSuspOK ClrBusyAnn CLRCOMPLEX ClrDA1Bad ClrDA1IsStat ClrDA1OK ClrDA2aBad ClrDA2aOK ClrDA2bBad ClrDA2bIsEdL ClrDA2bNoCh ClrDA2bOK ClrDA2bTemp ClrDA2OK ClrDA3Bad ClrDA3OK ClrDAsOK ClrDouseAlm CLREXACT CLRFRC ClrLeftAnn ClrNewEditL ClrNoRollDA2 ClrNUsrKeyOK CLRPLUSAT0 ClrRightAnn ClrServMode

507
Page 455 277 293 306 277 307 307 307 307 455 173 455 455 180 277 277 277 278 278 224 224 278 406 276 273 275 276 275 276 276 276 275 275 275 276 275 275 406 277 276 208 407 277

508
Addr. 26044 26049 3DD8E 3E91A 2EF7B 2EF8A 2F2FA 2EF88 2EF7D 2EF82 2EF80 2EF81 2EF7E 2EF7C 2EF7A 2EF77 2EF78 2EF79 2EF74 2F194 2F195 2EF83 2EF84 2EF7F 3F11C 2F326 2B6006 3311B 081314 526006 518006 3B193 25EA9 262F1 25EA0 2F244 3F481 0F0006 35D08 2602B 35EB6 03F0AB 03E0AB 0390AB 06FD1 34AD3 359AD 35994 Name ClrSysFlag ClrUserFlag xCLSIGMA xCLUSR CMD_BAK CMD_COPY CMD_COPY.SBR CMD_CUT CMD_DEB_LINE CMD_DEL CMD_DOWN CMD_DROP CMD_END_LINE CMD_NXT CMD_PAGED CMD_PAGEL CMD_PAGER CMD_PAGEU CMD_PLUS CMD_PLUS2 CMD_PLUS3 CMD_STO_DEBUT CMD_STO_FIN CMD_UP xCMDAPPLY CMDSTO CMODext cmp xCMPLX CMPLXLN CNORMext xCNRM CodePl>%rc.p COERCE COERCE$22 COERCE&CKSGN COERCE2 COERCE2Z COERCEDUP COERCEFLAG COERCESWAP xCOL+ xCOLxCOL COLA COLA_EVAL COLAcase COLACOLA Page 175 175 455 455 305 306 307 306 305 302 305 302 305 305 305 305 305 305 301 301 302 306 306 305 314 424 10 455 349 333 455 205 22 47 22 22 22 22 135 22 455 455 455 131 131 140 131 Addr. 36865 359C8 34AF4 363FB 2BAB3 270006 271006 26E006 3E5A0 0300DE 3B423 0BE006 0C0006 0C1006 0BF006 2EF9A 00D100 262FB 09B007 58B006 099007 096007 095007 275006 2FD006 3BF77 0260AB 3C967 39A6C 0180AB 3396D 0190AB 39B1E 02A0DE 3989C 0FF006 2CB006 8071B 08D08 08D5A 204006 205006 38F41 2F327 2C393 3DE24 3A5D0 42B006

F. Entries sorted by Name


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+ COSEXPAxCOSext xCOSH cosh2exp COSH2EXPext xCOSHext COSTEST xCOV xCR xCRC xCRDIR CREATE CREATEDIR CRER CRLF$ xCRLIB xCROSS CROSS_HAIRS CROSS_OFF CROSSGROB CROSSMARKON CRUNCH CRUNCHNoBlame CSQFFext CST CSTFRACTION? CtlAlarm! CtlAlarm@ xCURL CURL CURRENTMARK? CurROMBank2 CURSOR+ CURSOR@ CURSOR_END? CURSOR_OFF CURSOR_OFF+ Page 367 352 351 366 351 365 351 355 369 369 369 369 349 456 367 352 349 456 456 479 456 167 168 43 479 456 Addr. 2657B 26594 519006 15D006 0150DE 0120AB 50C006 2C07B 2C086 2C091 2C09C 2C10B 2C268 2C273 2C27E 2C116 2C13A 2C145 2C150 2C2B5 2C15B 2C166 2C171 2C17C 2C187 2C192 2C1B0 2C1CE 2C1D9 2C289 2C1E4 2C21B 2C29F 2C1EF 2C1FA 2C205 2C210 2C226 2C231 2C23C 2C247 2C2AA 2C252 2C25D 2C294 3B06E 2EEB0 2EEAB Name CURSOR_OFF0 CURSOR_PART CXIRext CXRIext xCYCLOTOMIC xCYLIN CZABS D/D* D/D+ D/DD/D/ D/D= D/D D/DX D/DY D/DABS D/DACOS D/DACOSH D/DALOG D/DAPPLY D/DARG D/DASIN D/DASINH D/DATAN D/DATANH D/DCHS D/DCONJ D/DCOS D/DCOSH D/DDER D/DEXP D/DIFTE D/DINTEGRAL D/DINV D/DLN D/DLNP1 D/DLOG D/DSIN D/DSINH D/DSQ D/DSQRT D/DSUM D/DTAN D/DTANH D/DWHERE xD>R DA1Bad? DA1IsStatus?

509
Page 300 333 456 37

90 86 333 293 393

456 415

300 300 300

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 Name DA1OK? DA1OK?NOTIT DA2aBad? DA2aLess1OK? DA2aOK?NOTIT DA2bBad? DA2bIsEdL? DA2bNoCh? DA2bOK?NOTIT DA2bTemp? DA3Bad? DA3OK? DA3OK?NOTIT DaDGNTc xDARCY dARRYcase xDATE DATE xDATE+ DATE+DAYS Date>d$ Date>hxs13 DAY# Day>Date xdB xDBUG DcompWidth@ DDAYS xDDAYS DEB.MATRIX DEB.MATRIXTYPE xDEC DeCntMulti DECODE Decomp#Disp Decomp#Line DECOMP$ Decomp%Short Decomp1Line DecompEcho DecompEdit DecompStd1Line DecompStd1Line32 xDECR xDEDICACE DEEPSLEEP xDEF xDEFINE Page 275 275 276 275 275 276 276 276 275 276 275 275 456 145 456 173 456 173 173 173 Addr. 3B549 288006 285006 0360DE 3E0006 2EF95 391D8 3D1C7 29D6A 3EF3B 0F3007 0BA006 2A5006 3C51F 3DCA7 0314C 4F2006 4F3006 80EDC 3D258 1B3006 00E314 1A5006 1A1006 1A3006 1A4006 2C0ED 2C0A7 1DD006 003314 00F314 07E007 3B1BA 3EB84 2F7006 03B0AB 00C0DE 36E93 084314 00E0AB 16E006 345006 004007 38BAE 39725 25EBC 25FB8 25FBD

F. Entries sorted by Name


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

456 456 51 173 456

390 457 388 387 388 388

456 375 52 52 53 54 52 54 53 52 52 456 178 456

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 Page 281 281 51 312, 274 282 282 274 274 282 282 98 292, 274 292, 274 281 281 281 281 281 281 281 281 281 281 281 281 281 282 274 282 274 274 457 95 372 368 368 95 457 457 372 457 415 Addr. 220006 044314 27A006 3F4006 3F1006 071314 249006 3F0006 062314 48D006 36E43 3816B 073F7 25EAE 25EAF 25EB0 25EBE 2F2F0 2F2EE 2F2E4 2F2F1 2F2E5 2EF04 2F2EF 25EB1 1A7006 02E002 25EBF 2EEC1 25EB2 2EFA6 074E4 2EEC5 2EF02 25EC0 25EB3 09E002 0A0002 09F002 09D002 0B0002 2EF05 2EECB 2EECA 2EFA8 2F2F9 2EECD 25EC1 Name DIVIS xDIVIS DIVISext DIVISIBLE? DIVMETAOBJ xDIVMOD DIVMOD DIVOBJext xDIVPC DIVPC! dLISTcase xDO DO DO#EXIT DO$EXIT DO%EXIT Do1st/2nd+: DO<Del DO<Skip DO>BEG DO>Del DO>END DO>LCD DO>Skip DO>STR DO>STRID DoAlert DoBadKey DOBAUD DOBEEP DOBIN DOBIND DOBUFLEN DOC>PX DoCAlarmKey DOCHR DoCKeyCancel DoCKeyChAll DoCKeyCheck DoCKeyOK DoCKeyUnChAll DOCLLCD DOCR docr DODEC DODEL.L DODELAY DoDelim

511
Page 415 457 381 357 88, 361 457 420 457 145 457 151 156 156 156 278 303 305 305 303 306 92 305 53 54 282 207 180 178 177 116 180 318 46 244 244 244 244 244 277 181 177 303 181 302

512
Addr. 25EC2 25EB4 2604E 2EEF9 39527 2F2DD 2F2DE 2F2E8 2EEBD 25EC3 26053 2EF60 25EC4 2EFA5 2C371 2EEC4 0AF002 0B5002 25EC5 0B4002 25886 2EF03 05B0AB 0B2006 0210DE 25EC6 2589A 026FE 0AE002 0000B1 25EC7 25EC8 2F192 2F142 008007 007007 00B007 2F2EA 25EC9 2EFA7 2F13C 00A007 009007 2EEC0 2EEC2 2EEBE 25ECA 25ECB Name DoDelims DODISP DOENG DOERASE xDOERR DoFarBS DoFarDel DOFIND DOFINISH DoFirstRow DOFIX DOGRAPHIC DoHere: DOHEX DoInputForm DOKERRM DoKeyCancel DoKeyEdit DoKeyOb DoKeyOK DoLabel DOLCD> xDOLIST DoLS xDOMAIN DoMenuKey DoMenuKeyNS DOMINIFONT DoMKeyOK DoMsgBox DoNameKeyLRS DoNameKeyRS DoNewEqw DoNewMatrix DoNewMatrixCplx DoNewMatrixReal
DoNewMatrixRealOrCplx

F. Entries sorted by Name


Page 302 281 177 273 457 303 303 308 180 294 177 318 168 177 257 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

206 293, 95 92 457 375 291 293

DONEXT DoNextRow DOOCT DoOldMatrix DoOldMatrixCplx DoOldMatrixReal DOOPENIO DOPARITY DOPKT DoPlotMenu DoPrevRow

308 177

180 180

DoDelims DUPTYPELAM?
Addr. 35289 364AF 3DCC7 37032 04D3E 3596D 3606B 36342 36007 35733 3574D 2F32F 26062 35280 26215 2E0006 2DF006 3558C 3EFEF 35136 35172 35109 115007 168006 35190 170006 35118 171006 34EBE 3DBEA 03188 3532B 36441 352BD 348F7 36D21 3490E 36ED4 36F51 364C8 35912 34431 35956 3531C 3571E 366D0 362DE 36C0E Name DROPFALSE DROPLOOP xDROPN DROPNDROP DROPNULL$ DROPONE DROPOVER DROPRDROP DROPROT DROPSWAP DROPSWAPDROP DropSysErr$ DropSysObs DROPTRUE DropVStack DROPZ0 DROPZ1 DROPZERO xDTAG DTYPEARRY? DTYPECOL? DTYPECSTR? DTYPEGAUSSINT? DTYPEIRRQ? DTYPELIST? DTYPENDO? DTYPEREAL? DTYPFMAT? DUMP xDUP DUP DUP#0<> DUP#0<>WHILE DUP#0= DUP#0=case DUP#0=csDROP DUP#0=csedrp DUP#0=IT DUP#0=ITE DUP#0_DO DUP#1+ DUP#1+PICK DUP#1DUP#1= DUP#2+ DUP#<7 DUP$>ID DUP%0= Page 136 151 458 75, 106 46 21 106 129 106 106 106, 107 Addr. 3696E 36513 3DC05 35D30 3674D 34797 3432C 35C2C 37258 159006 3F29A 35CE0 36635 25EBB 3622A 3645A 357E2 3627A 3DCE2 36252 16C006 36266 36ABD 36AEA 3611F 0F7006 36133 34FC0 35C40 35FF3 35A56 347AB 36B26 350CD 35136 350EB 35037 35127 35172 35109 351AE 35082 350BE 116007 35181 350FA 35046 350DC

513
Name Page DUP' 130 DUP1LAMBIND 116 xDUP2 458 DUP3PICK 106, 106 DUP3PICK#+ 24 DUP4PUTLAM 119 DUP4UNROLL 106 DUP@ 166 DupAndThen DUPCKLEN{} 72 xDUPDUP 458 DUPDUP 106 DUPEQ: 137 DUPGROBDIM 90 DUPINCOMP 71 DUPINDEX@ 152 DUPLEN$ 47 DUPLENCOMP 68 xDUPN 458 DUPNULL$? 55 DUPNULL[]? 339 DUPNULLCOMP? 68 DUPNULL{}? 72 DUPONE 21 DUPPICK 106 DupQIsZero? 334 DUPROLL 106 DUPROM-WORD? 100 DUPROMPTR@ 100 DUPROT 106 DUPSAFE@ 166 DUPTEMPENV 119 DUPTWO 21 DUPTYPEAPLET? 200 DUPTYPEARRY? 199 DUPTYPEBINT? 200 DUPTYPECHAR? 200 DUPTYPECMP? 199 DUPTYPECOL? 200 DUPTYPECSTR? 199 DUPTYPEEXT? 200 DUPTYPEFLASHPTR? 200 DUPTYPEFONT? 200 DUPTYPEGAUSSINT? 201, 333 DUPTYPEGROB? 199 DUPTYPEHSTR? 199 DUPTYPEIDNT? 199 DUPTYPELAM? 199

136 162 327 327 21 458 199 200 199 200, 333 326, 421 199 339 199 201 117 458 106 26 151 25 141 142 141 141 141 151 24 77, 106 24 26 24 26 116 35

514
Addr. 35190 350AF 350A0 35118 35145 35154 0CC006 35163 3519F 183006 35091 3457F 36AD6 10A006 0FB006 0F9006 109006 36A77 00003 18C006 2C121 2EEE4 2F11C 25ED1 2EEE3 039EF 25F10 0070DD 0090DD 25ECE 25F11 36E57 2F1A9 2F1A8 2EEE5 257A2 806FD 2EEEB 25ED2 2EEEC 2F2DF 2EEE9 02E314 3D8006 3DB006 3DA006 02C0AB 02D0AB Name DUPTYPELIST? DUPTYPELNGCMP? DUPTYPELNGREAL? DUPTYPEREAL? DUPTYPEROMP? DUPTYPERRP? DupTypeS? DUPTYPESYMB? DUPTYPETAG? DUPTYPEZ? DUPTYPEZINT? DUPUNROT DUPZERO DupZIsEven? DupZIsNeg? DupZIsOne? DupZIsTwo? dvarlsBIND DZP E%%>C%% easyabs Echo$Key Echo$NoChr00 Echo2Macros EchoChrKey ECUSER ederr xEDIT xEDITB EDITDECOMP$ editdecomp$w EditExstCase EDITF EditFont EditLevel1 EditLExists? EDITLINE EDITLINE$ EditMenu EDITPARTS EditSelect EditString xEGCD EGCDext EGCDNEWG EGCDSWAP xEGV xEGVL Page 199 200 200 199 200 200 335 199 200 200 200 106, 107 21 334 334 334 334 117 37 302 302 Addr. 33157 331BB 342BB 33427 33431 33175 4F9006 3805D 371B3 2F330 2F331 38A54 0570AB 38A14 3B5DA 088314 03B2E 3663A 3BDE6 34999 34920 2F332 36EBB 36F01 25ED3 37829 3664E 3607F 03B97 36D62 2AD81 36D08 3660D 36E7F 36662 3C0006 3776B 3BF006 25ECF 462006 4BF006 00B0DD 010004 01D004 01C004 01B004 011004 019004

F. Entries sorted by Name


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

158 458 458 53 53 146

311 300 300 311 309 310 458 380

458 458

311 98

DUPTYPELIST? xEXPLN
Addr. 01F004 01A004 01E004 012004 016004 014004 013004 017004 018004 015004 01F100 57E006 3C553 26071 2606C 3376F 33819 33779 58E006 3955B 092006 26067 090006 04ED1 39591 39576 04CE6 04D33 2F1A1 36883 04D0E 04E5E 38ABA 04EB8 091006 214006 038314 06F8E 395AC 2F2E3 2F2FB 38C2C 25ED0 26319 25F29 257006 258006 259006 Name EQW3GROBmini EQW3GROBStk EQW3GROBsys EQW3StartEdit EQW3ViewLeft EQW3ViewLeftX EQW3ViewMargin EQW3ViewRight EQW3ViewRightRPL EQW3ViewRightX xER ERABLEERROR xERASE ERASE&LEFT$3x5 ERASE&LEFT$5x7 Err#Kill Err#NoLstArg Err#NoLstStk ERR$EVALext xERR0 ErrBadDim ERRBEEP ErrInfRes ERRJMP xERRM xERRN ERROR@ ERRORCLR ErrorHandled? ERROROUT ERRORSTO ERRSET xERRTHEN ERRTRAP ErrUndefRes EULER xEULER EVAL xEVAL EVAL.LINE EVAL.SELECTION xEVAL> EVALCRUNCH EvalNoCK EvalNoCK: EvalNoCKx* EvalNoCKx+ EvalNoCKxPage 98 98 98 Addr. 25A006 25B006 262006 25C006 260006 25D006 25E006 261006 25F006 263006 264006 2EF69 2A3006 283006 284006 0A2007 09E007 098007 097007 2F333 2F2F8 258EF 3709B 27C33 04E37 240006 06C314 3A9B7 087314 01A0DE 458006 250006 3E5E9 34C82 000314 12C006 1D7006 525006 076314 30F006 313006 315006 311006 312006 314006 529006 3E25E 017314 Name EvalNoCKx/ EvalNoCKx EvalNoCKxAND EvalNoCKxCHS EvalNoCKxCOMB EvalNoCKxINV EvalNoCKxMOD EvalNoCKxOR EvalNoCKxPERM EvalNoCKxXOR EvalNoCKxXROOT EvalParsed EVALUSERFCN EVIDENText EVIDSOLV EXACT? EXACTMODE EXACTOFF EXACTON EXCHINITPK EXEC_CMD ExitAction! ExitAtLOOP ExitFcn EXITMSGSTO EXLR xEXLR xEXP xEXP&LN xEXP2POW exp2sincos EXPAMOD xEXPAN EXPAND xEXPAND EXPAND EXPANDBOTH EXPANDLN xEXPANDMOD EXPEXPA EXPEXPA* EXPEXPA*1 EXPEXPA+ EXPEXPAEXPEXPANEG xEXPext xEXPFIT xEXPLN

515
Page 417 417 418 417 418 417 417 418 418 418 418 354 382 382 406 406 406 406 309 291 152 156 356 459 459

479 403 458 97 97 17 17 17 404 458 403 156 403 156 458 458 156 156 156 156 157 157 403 414 458 128 458 309 309

367 459 48, 57 459 347 349 459 355 369 369 369 369 369 349 459 459

198 198 417 417 417

516
Addr. 418006 3AB6F 41D006 33193 05481 2F334 3398B 336F7 33701 0050AB 0620AB 3ABAF 27B006 27C006 296006 001314 28C006 572006 077314 21F006 043314 573006 576006 27E9B 03AC0 369FF 283E8 36554 36554 0600AB 3F2DF 3F6006 09A006 255DD 255D3 255D8 255D3 255E2 3B529 3B635 3D81D 2F335 21D006 041314 289006 0180DE 282006 01A0AB Name EXPLNext xEXPM EXPM2EXP EXT EXTN Extobcode EXTOBOB EXTREAL EXTSYM xEYEPT xF0 xFACT FACT1ext FACTOext FACTOOBJext xFACTOR FACTORACext factorial xFACTORMOD FACTORS xFACTORS facts factzint failed FALSE FALSE' FalseFalse FalseTrue FALSETRUE xFANNING xFAST3D FastDiv? FASTREDUCE FBoxB FBoxG1 FBoxG2 FBoxW FBoxXor xFC? xFC?C xFCNAPPLY FcnUtilEnd FCOEF xFCOEF FDEG2ext xFDISTRIB FEVIDENText xFFT Page 356 459 351 11 81, 71 20 16 16 459 459 475 381 381 384 459 383 350 459 415 459 350 330 136 136 130 136 136 136 459 459 357 384 94 94 94 94 94 459 459 Addr. 3E1006 3319D 332FB 3334B 3332D 33323 33355 33305 33341 33337 33319 3330F 067004 00C0DD 06D004 06E004 25F2C 37798 391AE 4C2006 35A006 2F336 2F2F2 2F110 3ED76 264DB 264CC 33139 3344F 34257 33463 33445 34357 3B59A 2F337 105007 201006 200006 1FF006 1FE006 225006 216006 1E9006 1EC006 207006 24D006 239006 251006

F. Entries sorted by Name


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

415 459 382 377 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 Page 411 413 411 395 346 413 413 414 412 411 412 411 345 412 414 412 414 412 411 413 412 405 414 412 414 414 345 380 412 412 416 414 413 Addr. 1FA006 23A006 1F1006 0170AB 25ED4 860CC 2EE61 2DCB5 192006 3ACD1 261CA 261CA 2EEC8 2F113 00F0DD 00E0DD 00D0DD 2621A 0030DD 06F004 3DB62 33297 332E7 332C9 332BF 332F1 332A1 332DD 332D3 332B5 332AB 3312F 333B9 05E314 236006 2D4006 3423A 36043 33193 333A5 3339B 33297 34331 3AC87 0D5007 0CB007 3EB2C 39745 Name FLAGTRIGTAN FLAGTRUNC FLAGTSIMP xFLASHEVAL FlashMsg FlashROMTAB2 FlashWarning FLOAT FLOAT? xFLOOR FLUSH FLUSHKEYS FLUSHRSBUF FNDALARM{} xFONT6 xFONT7 xFONT8 FONT> xFONT FontBrowser xFORMUNIT FORTY FORTYEIGHT FORTYFIVE FORTYFOUR FORTYNINE FORTYONE FORTYSEVEN FORTYSIX FORTYTHREE FORTYTWO FOUR FOURFIVE xFOURIER FOURIER FOURIERext FOURROLL FOURROLLROT FOURTEEN FOURTHREE FOURTWO FOURTY FOURUNROLL xFP FR2ND% FRACPARITY xFREE xFREEZE

517
Page 413 416 413 459 282 282 201 459 205 205

459 459 459 283 459

346 411 413 413 413 412 413 413 413 413

12 12 12 12 12 12 12 12 12 12 10 14 459 415 424 107 108 11 13 13 12 108 459 425 425 460

518
Addr. 27F006 267006 042314 21E006 3B509 3B615 2621F 001004 00A004 00B004 00C004 00D004 002004 003004 004004 005004 006004 007004 008004 009004 0FE007 0AE007 3C955 06B314 164006 0070DE 05F42 383006 04D314 095006 26076 25ED5 02C314 24A006 2B4006 0EC006 075314 2F105 3C1C7 2F2F3 2F2F4 34504 2F2F6 314E4 314CA 001102 0371D 2DDD5 Name FRND FROMLISText xFROOTS FROOTS xFS? xFS?C FSCANFONT FSTR1 FSTR10 FSTR11 FSTR12 FSTR13 FSTR2 FSTR3 FSTR4 FSTR5 FSTR6 FSTR7 FSTR8 FSTR9 FTAYL FULLDATA xFUNCTION xFXND FXNDext xGAMMA GARBAGE GAUSS xGAUSS GBASIS GBUFF GBUFFGROBDIM xGCD GCD1MOD GCDext GCDHEUext xGCDMOD GDISPCENTER xGET GET.W-> GET.W<get1 GET_CUR_FONT.EXT GETAB0 GETAB1 xGETADR GETATELN getBPOFF Page 382 418 460 415 460 460 54 Addr. 31518 2F338 04A41 26224 26229 2F339 57D006 04E07 0BB002 26238 2623D 26242 26247 3C22D 2F106 2EEBF 2F33A 25ED6 25ED7 25ED9 2F33B 075A5 3483E 2EF6D 2F33C 25EDA 2624C 25F17 002102 2EEBC 003102 004102 25EDB 2F33D 2F107 04A0B 2EEF5 2F10D 2F10A 2F108 07A007 2F33E 2F33F 04D64 04714 25967 25F18 26233

F. Entries sorted by Name


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

55 54 54 54 54 55 55 393 407 460 460 380 460 178 346 460 384 272 273 460

283 273 460 317 181 206 206 206 117 119 51 289 162 161 479 180 479 479 50 316 317 288 317 317

399 460 318 460 308 308 77 312

419 317 157 206 208 161 164

479 64

FRND hxs>$
Addr. 2F0FE 2F0FF 2F007 2F109 2F10E 2F100 2F008 2F340 097006 0C80B0 0660AB 094006 3C74A 25588 107007 34A31 2F2E6 3B57F 0090DE 3C5AE 2F341 098006 255A1 00A0AB 38C1B 3317F 2607B 26080 368E7 2EFDB 2F342 25ED8 2E0D5 07C314 0BF007 0860B0 0870B0 26085 36C68 096006 2608A 2558D 3C7D8 25EDC 25EDD 0ED006 001100 005100 Name GETXMAX GETXMIN getxpos GETXPOS GETYMAX GETYMIN getypos GETYPOS GFACTOR gFldVal xgmol GMSOLV xGOR Gor GOSPER? GOTO GOTOLABEL xGRAD xGRAMSCHMIDT xGRAPH GraphicExit GREDUCE Grey? xGRIDMAP xGROB grob GROB! GROB!ZERO GROB!ZERODRP GROB+ GROB+# GROB>GDISP Grob>Menu xGROBADD GROBADDext grobAlertIcon grobCheckKey GROBDIM GROBDIMw GSOLVE GsstFIN Gxor xGXOR H/W>KeyCode H/WKey>KeyOb H>Z xH xHA Page 316 316 Addr. 009100 046314 407006 020314 3880D 2608F 26094 25EDE 2EED6 0050DD 26099 0320DE 232006 05C314 059314 231006 3B68B 054314 22C006 3C9C1 25636 3E1CA 3B12C 3B14C 3B10C 39405 08D92 3E3006 4A8006 4A9006 4A6006 4A2006 037314 2C0006 4A1006 3E2006 4AA006 4A3006 2EEF8 3FB006 33175 2F0EE 2F0EF 2EFCF 2EFCC 05A03 2EFC0 2EFC1 Name xHS xHADAMARD HALFTAN xHALFTAN xHALT HARDBUFF HARDBUFF2 HARDHEIGHT HBUFF_X_Y xHEADER HEIGHTENGROB xHELP HERMITE xHERMITE xHESS HESSIAN xHEX xHILBERT HILBERTNOCK xHISTOGRAM HISTON? xHISTPLOT xHMS+ xHMSxHMS> xHOME HOMEDIR HORN1 HORNASIN! HORNASIN1! HORNATAN! HORNCOS! xHORNER HORNER1ext HORNEXP! HORNext HORNLN! HORNSIN! HSCALE HSECO2RCext hxs HXS#HXS HXS<=HXS HXS<HXS HXS==HXS HXS># HXS>$ hxs>$

519
Page 478 461 356 461 461 273 273 273 279 461 273 415 461 461 415 461 461 415 461 461 461 461 461 461 169

317 317

384

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

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 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

F. Entries sorted by Name


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 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 Name IfEnterKeyPress xIFERR xIFFT

IFEDispField xIFEND

HXS>% ISOLALL
Addr. 08C007 088007 089007 2F0D4 3B87E 0100DE 503006 25EDF 35BAF 3E54C 2F343 3C33E 2F0E8 07221 367D9 07270 3D9006 2E2006 04C0AB 394C8 2EEE6 2EEE7 2EEE8 092DB 2F0E7 25EE0 25EE1 26256 2B709 2F075 25EE2 26251 366E9 054AF 3BADA 35C68 3D3006 3EEBD 2F154 2F344 2F345 2EF5F 2F155 25790 366006 365006 25795 364006 Name ILAPEXPSC ILAPext ILAPRAText ILnot? xIM xIMAGE xIMext ImmedEntry? INCOMPDROP xINCR IncrLAMPKNO xINDEP INDEPVAR INDEX@ INDEX@#INDEXSTO INEGCD INFINIext xINFORM INHARDROM? InitEd&Modes InitEdLine InitEdModes InitEnab InitIOEnv InitMenu InitMenu% INITMKFONT InitPOLVars InitSysUI InitTrack: InitVirtualStack INNER#1= INNERCOMP INNERCOMP>% INNERDUP INPARTFRAC xINPUT input$ InputLAttn InputLEnter InputLine input{} INSERT? INSERT[]COL[] INSERT[]ROW[] INSERT_MODE INSERTCOL[] Page 392 199 462 348 278 71 462 462 317 151 152 152 330 419 462 179 314 303, 314 314 Addr. 2EF97 363006 362006 2FC006 3F007 2D3006 0290DE 33805 3D47E 3DD006 06B4E 01E0E8 516006 582006 2D2006 586006 004314 3A32B 402006 583006 52A006 2609E 2E25C 24B006 074314 350006 00110 2F346 81006 3AC3D 2EF006 029314 0011F 800F5 0011A 02B314 113007 2D8006 160006 15F006 2C7006 2C9006 0C8007 2CC006 3E648 4C5006 4C7006 4C6006 Name InsertEcho insertrow[] INSERTROW[] INSERT{}N xINT INT3 xINTEGER INTEGER337 xINTEGRAL INTEGRext INTEMNOTREF? INTEMPOB? INTERNALARG2 INTERNALERR INText INTVARERR xINTVX xINV INVAL2 INVALIDOP xINVext INVGROB InvLabelGrob INVMOD xINVMOD INXREDext IOC IOCheckReal IOCsave xIP ipi xIQUOT IRAM@ IRAMBUFF IRC xIREMAINDER IROOTS IRRQ#ULTIMATE IRXC2 IRXCext IS_SQRT? IS_XROOT? ISIDREAL? ISNT_IDNT? xISOL ISOL1 ISOL2ext ISOLALL

521
Page 302 343 343 72 462 390 17 391 171 171 403 390 404 462 462 423 403 348 91 90 462 341

291 291

289 71 71 71 71 391 462 212

462 420 462

462 382 422 37 424 424 408 462 396 396 396

212 212 302 344 344 302 344

522
Addr. 584006 00D0DE 4E0006 218006 03C314 283FC 07249 07295 04D004 0E9006 34A22 34B3E 34ABE 36DDF 36D3A 07258 072AD 050314 380006 04D87 04D87 07264 072C2 2F347 2F348 2F349 2F34A 2F34B 2F34C 25EE4 00F0DE 2F0E6 00C10 00C0E 00C0D 3EE2C 39854 25EE5 25EE6 255006 07B314 25EE3 04E004 25949 2593F 2594E 06D0AB 25F2A Name ISOLERR xISOM ISPOLYNOMIAL? ISPRIME xISPRIME? ISTOP-INDEX ISTOP@ ISTOPSTO
IsUncompressDataString

F. Entries sorted by Name


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 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 xLCC xLDEC Page 463 463 273 181 181 181 343 463 290

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?

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

82

463 463 208 208 208 463 206

463

ISOLERR xLINE
Addr. 081007 082007 083007 084007 0B1002 0B2002 0B3002 25FF9 26008 2601C 26012 25FFE 26003 26017 2600D 2F352 234006 05A314 05636 0567B 05616 17B006 2D9006 0B6006 032314 0160AB 3EB42 4DE006 4EC006 256006 2F21C 0BC006 0BB006 0B5006 49E006 490006 48B006 483006 488006 49C006 4A0006 499006 498006 4A7006 49F006 47F006 4B3006 48C006 Name LDECSOLV LDEGENE LDEPART LDSSOLVext LEDispItem LEDispList LEDispPrompt LEFT$3x5 LEFT$3x5Arrow LEFT$3x5CR LEFT$3x5CRArrow LEFT$5x7 LEFT$5x7Arrow LEFT$5x7CR LEFT$5x7CRArrow LEFTCOL LEGENDRE xLEGENDRE LEN$ LENCOMP LENHXS LENMATRIX LESSCOMPLEX? LFCProd xLGCD xLIBEVAL xLIBS LIDNText LIDNTLVAR LIFCext Lift LiftGeneral LiftLinear LiftZAdic LIM#VARX! LIM%#! LIM*! LIM+-! LIM/! LIMABS! LIMALPHA! LIMASIN! LIMATAN! LIMATAS! LIMBETA! LIMCMPL! LIMCOMP! LIMDIVPC! Page 391 391 391 391 245 245 244 97 97 97 97 97 97 97 97 279 415 463 47 68 57 343 424 375 463 463 463 397 398 395 376 376 375 387 387 387 Addr. 4AF006 4B0006 481006 482006 480006 475006 476006 484006 4BC006 496006 49B006 4AD006 4B1006 487006 494006 005314 477006 46D006 474006 473006 47C006 47E006 495006 4B2006 485006 489006 48F006 491006 492006 493006 48E006 486006 4A4006 4A5006 472006 497006 4B5006 48A006 49A006 478006 479006 47A006 47B006 4BE006 4BD006 4C3006 014314 3C68C Name LIMDL! LIMDLINF! LIMEQU! LIMEQU0! LIMEQUFR! LIMERR0! LIMERR1! LIMERR10! LIMERR6! LIMEXP! LIMFLOOR! LIMHORN! LIMINFSIGN! LIMINV! LIMINVLN! xLIMIT LIMIT! LIMIText LIMITNOVX! LIMITX! LIMLIM! LIMLIM1! LIMLN! LIMMAX! LIMNEG! LIMPOW! LIMPROF! LIMPROF0! LIMPROF1! LIMPROF2! LIMPROFEND! LIMRAC! LIMSC0! LIMSC1! LIMSERIES! LIMSINCOS! LIMSORT! LIMSQ! LIMSQRT! LIMSTEP1! LIMSTEP2! LIMSTEP3! LIMSTEP4! LIMVAL! LIMVALOBJ! LIMVAR! xLIN xLINE

523
Page

386 386

463 386

386

387

386

386

386 387

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 Name LINEARAPPLY linearapply LineB LINECHANGE LineG1 LineG2 LINEOFF LINEOFF3 LINEON LINEON3 LineW LineXor LINEXPA LINEXPext xLINFIT xLININ LINSOLV xLINSOLVE list List LIST10-10 LIST1i-1-i LIST2MATRIX xLIST> LISTCMP LISTEXEC LISTEXEC1 LISTIRRQ LISTLAM LISTMAXext LISTOPext LISTOPRAC LISTOPSQRT ListPos LISTRCL LISTREAL LISTSECOext ListToArry LLVARDext xLN LN2ATAN LN2ext xLNAME LNATANext LNCOLCext xLNCOLLECT LNEXPA LNEXPA* Page 425 93 93 93 92 92 92 92 93 93 355 355 463 463 342 463 10 Addr. 319006 31A006 522006 4AB006 3AB2F 41A006 25EE8 25EE9 3AA73 41B006 3E239 377C5 377DE 07334 05149 269006 26A006 3F2006 10F006 01118 2B1006 49D006 0320AB 3DF83 4AE006 3DE006 015100 02B0AB 0300AB 06A314 4F0006 4E7006 4C0006 4E3006 4DF006 386006 2AE32 35AE2 051314 321006 242006 37E006 229006 07F314 377006 376006 373006 2E189

F. Entries sorted by Name


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 xLRR 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

338 463 14 421 421 422 14 399 398 398 398 69 166 14 421 65 397 464 352 357 464 349 355 464 355 369

LINEARAPPLY MenuKey
Addr. 2E1EB 260B2 2E24D 2E2AA 2F0DB 2AB006 2F355 2E166 01C100 357006 3B02E 066314 27D5D 326006 248006 32A006 246006 320006 322006 333006 332006 32C006 2639B 3DB04 376B7 376C1 334006 3DAD0 34A006 372006 336006 32D006 346006 32E006 37F006 37C006 17D006 348006 02F0DE 371006 338006 34E006 083314 34D006 344006 347006 337006 341006 Name MakeDirLabel MAKEGROB MakeInvLabel MakeLabel MAKEPICT# MAKEPROFOND MAKEPVARS MakeStdLabel xMAKESTR MAKESYSText xMANT xMAP MARKGROB MAT* MAT*MATMOD MAT*SCL MAT*SCMOD MAT+ MATMAT/ MAT/SCL MAT MATATLOOP xMATCHDN matchob? matchob?Lp MATCHS xMATCHUP MATCNORM MATCON MATCONJ MATCROSS MATDET MATDOT MATEGV MATEGVL MATEXPLODE MATFNORM xMATHS MATIDN MATIM MATINV xMATR MATRANK MATRANM MATRDET MATRE MATREDIM Page 95 91 95 293, 96 91 378 316 95 479 342 464 464 90 339 339 339 339 340 340 340 475 69 340 464 340 337 340 340 340 340 345 345 339 340 337 340 340 341 337 340 340 337 Addr. 34C006 34F006 340006 36D006 36B006 178006 179006 35F006 369006 360006 174006 367006 368006 1E7006 36A006 349006 34B006 335006 33E006 339006 33C006 33B006 33D006 33A006 3ADA5 39AE4 3DEE1 0760AB 16D006 35FD8 3DEFC 05F61 3E8C1 33111 2EE8B 2EF59 3E9D4 0B9007 0B5007 0B3007 0B2007 0B6007 25845 0BC007 0BB007 08D007 0B4007 275FD Name MATREF MATREFRREF MATREPL MATRIX-COL MATRIX-ROW MATRIX2ARRAY MATRIX2LIST MATRIX>DIAG MATRIXCSWAP MATRIXDIAG> MATRIXDIM MATRIXRCI MATRIXRCIJ MATRIXRISCH MATRIXRSWAP MATRNORM MATRREF MATSQUARE MATSUB MATTRACE mattran MATTRAN mattrn MATTRN xMAX xMAXR xMAXSIGMA xMCALC MDIMS MDIMSDROP xMEAN MEM xMEM MEMERR MENoP&FixDA1 MENP&FixDA12 xMENU MENUARIT1 MENUBASE1 MENUCHOOSE MENUCHOOSE? MENUCMPLX1 MenuDef@ MENUDIFF1 MENUEXPLN1 MENUext MENUGENE1 MenuKey

525
Page 341 341 343 344 344 65 338 343 344 343 341 341 341 412 344 340 341 340 343 340 340 65 340 340 464 464 464 464 64 64 464 178 464 10

464 409 409 409 409 409 289 410 410 409 409 293

526
Addr. 2589F 2588B 25890 258B3 27620 0B8007 2EEFC 2EEFD 260B7 260BC 25863 0BA007 0B7007 07A314 1D1006 2AFFB 2B01B 3EB16 0120E4 390006 2F1006 2F4006 2F5006 389006 38D006 387006 38C006 397006 103007 2FA006 3AB006 393006 3BA006 277006 278006 3BD006 276006 30A006 287006 286006 2A6006 1BD006 1AB006 1A9006 1AA006 1AC006 1AD006 1B9006 Name MenuKeyLS! MenuKeyNS! MenuKeyNS@ MenuKeyRS! MenuMaker MENUMAT1 MENUOFF MENUOFF? MenuRow! MenuRow@ MenuRowAct! MENUSOLVE1 MENUTRIG1 xMENUXY MENUXYext MEQ1stcase MEQopscase xMERGE MESRclEqn meta-1 meta-pi meta-pi/2 meta-pi/4 meta/2 meta1-sq meta1/meta meta2* meta meta_cst? meta_e MetaAdd metaadd metackneg METACOMP0 METACOMP1 metaCOMPARE METACOMPRIM METACOSEXPA METADEG1 METADEG2 METADENOLCM METADER&NEG METADER* METADER+ METADERMETADER/ METADER METADERABS Page 290 290 290 290 291 409 273 273 288 288 289 410 409 464 409 143 143 Addr. 1C9006 1C6006 1B8006 1C8006 1C5006 1C7006 1CA006 1C0006 1C3006 1AF006 1B4006 1AE006 1B1006 1B0006 1B2006 1BA006 1A6006 1B5006 1B6006 1B7006 1BB006 1A8006 1BF006 1C2006 1BE006 1BC006 1C1006 1C4006 396006 3B1006 39F006 310006 39A006 2ED006 459006 3A5006 198006 2F0006 4D8006 317006 36C006 36E006 351006 36F006 274006 3AF006 273006 395006

F. Entries sorted by Name


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

360 420 420 420 359 360 359 359 361 393 420 360 360 362 381 370 381 369 382 382 358 388 388 388 388 388 388 389

MenuKeyLS! MZSQFF1
Addr. 3B9006 3B7006 2EB006 2F8006 2F2006 2F3006 3BC006 352006 199006 3B5006 399006 3C3006 36FA6 3BB006 304006 291006 293006 294006 292006 385006 38E006 38F006 4D3006 394006 3AD006 2F356 31E006 3A2006 403006 39B006 465006 253006 0A9006 4CA006 4CB006 3E4006 2B083 3AE2B 2625B 0120DD 0730AB 39B01 3DF17 3A9006 2E3006 3399F 24C006 0740AB Name metaneg MetaNeg metapi metapi*2 metapi/2 metapi/4 metapi? METAPIVOT METAPOSINT? MetaPow metapow metareal? metaROTDUP metasimp METASINEXPA METASOLV METASOLV2 METASOLV4 METASOLVOUT metasplit metasq+1 metasq-1 METASQFFext metasub MetaSub metatail METATANEXPA metaundef METAVAL2 metaxroot MEVALext MFACTORMOD MFactTriv MHORNER MHORNER1 MHORNext Mid1stcase xMIN MINIFONT> xMINIFONT xMINIT xMINR xMINSIGMA minusinf MINUSINFext MINUSONE MINVMOD xMITM Page 362 362 420 420 420 420 370 341 78, 334 362 361 370 76 368 368 383 383 383 78 360 360 397 360 361 78 369 367 423 362 353 395 374 396 396 378 143 465 283 465 465 465 464 368 419 21 465 Addr. 00E0DE 0A5006 4D2006 327006 3AFCB 3D0006 3C5006 3C8006 3C9006 3C4006 3D1006 3CB006 275EE 25EEA 3CA006 3CC006 3CD006 3C7006 0DB006 079314 3C6006 02C0DE 3CF006 3CE006 0B9006 2C388 121006 122006 120006 2DE26 0770AB 4D1006 04E0AB 0040B1 0200DE 0720AB 4CD006 323006 244006 31C006 272006 245006 070314 0750AB 328006 08309 4CF006 4D0006 Name xMKISOM MKPOLY MLISTSQFF MMMULT xMOD Mod ModAdd ModDiv ModDiv2 ModExpa ModFctr ModGcd Modifier ModifierKey? ModInv ModLGCD ModLOPD ModMul ModPow xMODSTO ModSub xMODULAR MODULOMAText MODULOMODext MonicLf MOVEVAR MP0 MPEXEC MPext mpop1% xMROOT MSECOSQFF xMSGBOX MsgBoxMenu xMSLV xMSOLVR MSQFF MSUB MSUBTMOD MTRIG2SYMB MULMULText MULTMOD xMULTMOD xMUSER MVMULT MYRAMROMPAIR MZSQFF MZSQFF1

527
Page 378 397 339 465 329 372 373 373 372 373 291 205 373

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 Name N+1DROP NcaseSIZEERR NcaseTYPEERR nCOLCTQUOTE nCustomMenu NDEvalN/D nDISPSTACK xNDIST NDROP NDROPFALSE NDROPminusinf NDROPplusinf NDROPZ0 NDROPZ1 NDROPZERO NDUP xNDUPN NDUPN NDXFext NDXQext need'case xNEG xNEGNEG newBASE NEWDIVext NEWINDEP NEWLIMHORN NEWLINE$ NEWLINE$&$ NEWLINE&$ NEWMARK NEWMODULO xNEWOB NEWTRIMext NEWVX xNEXT NEXTCOMPOB NEXTIRQ NEXTLIBBAK NEXTPext nextpos xNEXTPRIME NEXTRRPOB NEXTSTEP nextsym'R NFactor NFactorSpc ngsizecase Page 75, 106 146 146 293 394 275 465 75, 106 75, 136 368 368 327 327 76 106 465 106 379 421 465 Addr. 33161 331C5 3F264 2EF07 0DE0B0 2EF96 25EED 256BE 25EEE 2EEED 38D2F 25EEF 27E72 260C1 257E2 119007 585006 2ADBD 58A006 100007 0A8007 581006 25621 06E8E 0A4007 3CB13 03AF2 34BD8 34A59 34A92 35F7E 0712A 3640F 36428 35C7C 34A13 34976 349EA 3494E 349C6 2B2C5 36914 36B3A 260C6 260CB 260D0 3F0FC 469006

F. Entries sorted by Name


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

357

43 47 47 405 465 399 405 465 70 99 72 465

330 330

N+1DROP OVER#=case
Addr. 2BB53 2F38E 3DE09 0560AB 35D58 35BC3 056B6 37784 055DF 0556F 35D94 25EEC 055FD 055B7 27AA3 055D5 272FE 2B3AB 27FED 359006 055E9 29E67 3BBF9 2B25C 2B11C 2B176 2B1DF 2ADE0 0A0007 2F35B 0060AB 0070AB 2C044 2C039 2C04F 2C05A 2C065 47D006 39CB3 2F35C 37073 2F1AE 197006 3BE38 2B8BE 374006 19A006 19B006 Name nscknum2 xnsgeneral xNSIGMA xNSUB NTHCOMDDUP NTHCOMPDROP NTHELCOMP NTHOF NULL$ NULL$? NULL$SWAP NULL$TEMP NULL:: NULLCOMP? NULLGROB NULLHXS NULLID NULLLAM NullMenuKey NULLVECTOR? NULL{} nultrior xNUM num-1=case num0=case num1=case num2=case numb1stcase NUMMODE NUMSOLVE xNUMX xNUMY nWHEREDER nWHEREIFTE nWHEREINTG nWHERESUM nWHEREWHERE n{}N ob&$ OB>BAKcode Ob>Seco ObEdit OBJ2REAL xOBJ> OBJ>R OBJDIMS2MAT OBJINT? OBJPOSINT? Page 87 77 465 465 69 69 68 69 43 55 46 46 73 68 90 57 116 116 291 339 72 50 465 143 142 143 143 145 406 465 465 Addr. 05944 2F257 3B6A6 07F007 086007 085007 3950C 076AE 3D0BC 33111 36739 0A6006 073CE 363CE 36A63 36B12 3657C 369E6 334EF 36B12 35EA2 29D18 09B006 2F19B 2F2FF 3EC75 2F35D 2F313 2F312 03B75 3CA8D 25EF0 359E3 3E8F0 280C1 280F8 365F9 05902 0020F 3DC8C 032C2 36775 367C5 36694 36147 366A8 35268 348E2 Name OCRC OCRC% xOCT ODE_INT ODE_SEPAR ODETYPESTO xOFF OFFSRRP xOLDPRT ONE ONE#> ONE>POLY ONE_DO ONE_EQ ONECOLA ONEDUP ONEFALSE ONEFALSE' ONEHUNDRED ONEONE ONESWAP ONE{}N ONE{}POLY OngoingText? OpenIO xOPENIO OpenIOPrt OpenUart?Clr OpenUartClr OR xOR OR$ ORcase xORDER ORDERXY# ORDERXY% ORNOT OSIZE OUTCINRTN xOVER OVER OVER#+ OVER#OVER#0= OVER#2+UNROL OVER#< OVER#= OVER#=case

529
Page 179 179 465 390 392 391 465 100 10 25 378 151 25 131 21 22 130 15 21 22 72 377

466

136 466 50 139 466 92 92 136 178 466 109 24 24 25 77 25 25 141

53 73 311 31 465 129 337 334 334

530
Addr. 36725 369AA 36CF4 36183 35CF4 36482 05622 35D6C 35D6C 351FA 01F0DE 0D8007 215006 039314 2EF62 35B46 35B82 3C98B 3EDEC 0CD007 2B475 2EF6A 2EF6B 2EF6E 2EF70 0090AB 3D2006 034314 3D4006 0F2007 2EF94 393EA 25EF1 228006 04F314 0450AB 00D0AB 01F0AB 02E0E7 3DC006 3C4F5 3F8006 0C6006 011100 209006 3B477 37B006 0460AB Name OVER#> OVER' OVER5PICK OVERARSIZE OVERDUP OVERINDEX@ OVERLEN$ OVERSWAP OVERUNROT OverWrF/TLp xP2C P2P# PA2B2 xPA2B2 palparse PALPTRDCMP palrompdcmp xPARAMETRIC xPARITY PARITYTEST ParOuterLoop Parse.1 Parse.2 ParseFail ParseFail2 xPARSURFACE PARTFRAC xPARTFRAC PARTFRACRAT PASCAL_NEXTLINE PASTE.EXT xPATH PATHDIR PCAR xPCAR xPCOEF xPCONTOUR xPCOV PCunpack PDer xPDIM PDIV2ext PDivLk xPEEK PEGCD xPERM PEVAL xPEVAL Page 26 130 109 64 109 152 47 109, 109 109, 109 Addr. 2C1006 0EA006 0E1006 0DA007 0AC006 0C5006 0C3006 268006 3D5006 3EAA7 0AE006 0B0006 0AF006 2EA006 39AC7 30017 438006 43B006 439006 3DCFD 032E2 3F27F 3C72A 2F258 28A006 2F6006 06A0AB 2E9006 2E8006 354006 353006 3C662 3C638 260DF 260D5 3C60E 260E4 260DA 260EE 260E9 255BF 255C4 255C9 255BA 255CE 3EE9D 3FA006 36FE2

F. Entries sorted by Name


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

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

OVER#> xPsi
Addr. 009314 1E4006 00A314 2F35E 2F35F 2F0C5 1E3006 0A9007 0AB007 3A7006 2E4006 3C392 3C372 0140DE 0B3006 103006 010100 3C979 2B682 2B628 2B6CD 2B6B4 2B4AC 2B542 0D7007 02D0DE 0CC007 0D6007 0350DE 1DD007 25F19 25F1A 25F1B 25F1C 3BB94 378FA 37906 378FA 37906 376EE 2E6006 0DB007 2E7006 3F7006 0380DE 01B0DE 073314 11E006 Name xPLOT PLOTADD xPLOTADD PLOTERR PlotOneMore? PLOTPREP PLOTSTK PLUSAT0 PLUSATINFTY plusinf PLUSINFext xPMAX xPMIN xPMINI PNFctr PNMax xPOKE xPOLAR POLErrorTrap POLKeyUI POLRestoreUI POLResUI&Err POLSaveUI POLSetUI POLYASYM xPOLYNOMIAL POLYPARITY POLYSYM xPOP POPFLAGS PopMetaVStack PopMetaVStackDROP PopVStack PopVStackAbove xPOS POS$ POS$REV POSCHR POSCHRREV POSCOMP POSINFext POSITIFext POSUNDEFext POTENCEext xPOTENTIAL xPOWEXPAND xPOWMOD PPow# Page 412 466 Addr. 0AB006 2BE006 117007 3D0D7 3DBCA 3DFDD 3E01D 3DFFD 3ABFD 2F360 124006 4EB006 00C314 2D0006 25EF2 03E314 08376 2610C 0C7006 0C8006 2F0BC 2F361 2F362 3D1E7 028FC 38BBF 2EEF0 08B314 0BD007 0440AB 035314 3D10D 3D0F2 3D143 01D0AB 3F9006 3E8006 3E7006 29A5D 2963E 29821 298C0 29693 1CB006 2973B 29972 29986 0030DE Name PPP PPZ PPZZ xPR1 xPREDIV xPREDV xPREDX xPREDY preFACT PREMARKON PREPARext prepvarlist xPREVAL PREVALext PrevNonNull xPREVPRIME PREVRAM-WORD PrgmEntry? Prime+ PrimePRINT PrintGrob PRINTxNLF xPRLCD PRLG xPROMPT PromptIdUtil xPROMPTSTO PROMPTSTO1 xPROOT xPROPFRAC xPRST xPRSTC xPRVAR xPSDEV PSetSign PSEUDODIV PSEUDOPREP psh psh& psh1& psh1&rev psh1top& pshder* pshtop& pshzer pshzerpsharg xPsi

531
Page 374 424 424 467 468 467 467 467

407 407 368 419 466 466 375 379 478 466 223 223 223 223 223 380 380 380 405 162 160 160 162 467 47 47 47 47 69 419 401 420 358

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

467

532
Addr. 0040DE 0B4006 0AD006 036314 3E5006 2F363 4F5006 2C37D 37118 28071 260F3 35B006 29754 260F8 28085 2F076 2F0AC 08C27 3E87C 0340DE 1DC007 26265 25F1D 25F1E 25F1F 25F20 25F21 3C0BF 35D006 2F2F5 2F2F7 31532 260FD 26102 2626A 2626F 3C139 2EEF2 2EEF3 075E9 2B42A 2EEF6 26107 2EEF4 2EEF1 2F364 2F365 2F366 Name xPSI PSQFF PSqff xPTAYL PTAYLext PtoR PTrim PTYPE>PINFO PuHiddenVar pull PULLCMPEL PULLEL[S] pullpsh1& PULLREALEL pullrev puretemp? PURGALARM% PURGE xPURGE xPUSH PUSHFLAGS PushMetaVStack
PushMetaVStack&Drop

F. Entries sorted by Name


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

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

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 Page 468 345 421 325 328 128 468 468 468 469 129 327 128 348 383 468 178 371 168 468 468 468 372 393 468 468 424 300 300 306 306 301 300 Addr. 3DDA9 2F259 2F25A 2F25B 2F25C 03F0DE 0C4007 505006 00111 3B6FA 11B006 3BEEC 06FB7 3597F 2962A 26111 3B401 3B819 261FC 33111 195006 281006 36DF3 33233 528006 09C007 331A7 33733 25F6D 331B1 33797 3320B 25EF4 3ED22 2F369 0110AB 0A7007 3ED56 099006 0F6007 0F5007 501006 048314 3D7006 02A314 2F36A 0130DD 069004 Name xRCLSIGMA RCLSYSF RCLSYSF2 RCLUSERF RCLUSERF2 xRCLVX RCLVX RCONJext RCS xRCWS RDIVext xRDM RDROP RDROPCOLA RDROPFALSE RDUP xRDZ xRE Re>C% real REAL? REALBICAR REALcase REALEXT REALLN REALMODE REALOB REALOBOB realPAcode REALREAL REALSTRSTR REALSYM RECLAIMDISP xRECN RECORDX&YC% xRECT RECURMODE xRECV REDUCE REDUCEMETAPSYST REDUCEMETASYST xREext xREF REGCDext xREMAINDER REMAP xRENAME RENAME

533
Page 468 175 175 176 176 468 408 348 468 372 468 129 129 136 129 469 469 37 10 201 382 145 12 349 406 11 17 11 17 11 273 469 469 407 469 384 342 342 348 469 380 469 469

468 174 408 468 170 468 468 408 408

534
Addr. 069314 23D006 071E5 38105 25EF5 25EF6 047C7 25583 3B9D2 085D3 468006 2579A 2F2ED 2F2FC 359F7 35A10 3C41A 0CA007 2F0A1 35BFF 111007 3EAE7 1D4006 089002 25F22 37186 10F007 0050DE 110007 28187 258C7 05D0AB 0280DE 46E006 28E006 28D006 28F006 290006 25F24 2F36B 0AF007 500006 00D314 2C3006 15C006 2C4006 2C2006 2CF006 Name xREORDER REORDER REPEAT xREPEAT REPEATER REPEATERCH REPKEY? Repl xREPL REPLACE REPLACE2BY1 REPLACE_MODE REPLACEALL
REPLACEALLNOSCREEN

F. Entries sorted by Name


Page 469 416 151 469 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

206 93 469 167 353 309 309 144 144 469 408 107 100 379 469 408 234 176 169 379 469 379 107 291 469

37 469 469 469 469 469 397 376 371 469 340 32 347 469 469 108 76 76 469 108 108 76 100 16 11 100 100 469 469 367 385 396 469 107 24 25 24 24 24 25 106, 107 107 136

REQcase REQcasedrop xRES RESETCASCFG RESETDEPTH RESOROMP RESPSHIFTQ xRESTORE RESTORECASFLAGS RestoreHARDBUFF RestoreSysFlags RestVarRes RESULTANT xRESULTANT RESULTANTLP reversym ReviewKey! xREVLIST xREWRITE REWRITEIFINF RFACT2ext RFACText RFACTSTEP3 RFACTSTEP5 RIGHT$3x6 RIGHTCOL RIGORMODE RIMext xRISCH risch/ RISCH13 rischABS RISCHext rischlogpart

383 383 383 383 96 279 407 348 469 387

xREORDER ScrollVGrob
Addr. 341A8 34195 3579C 35CCC 343BD 3416E 36FBA 03D0AB 03C0AB 0370AB 2F36C 11F006 123006 070FD 070C3 3F218 0680AB 3885C 2A964 2A944 2A904 2A984 2A924 2A9A4 2A9C4 26C006 3A200 38E41 38E61 3DF006 4FE006 047314 0340AB 223006 078314 254006 0230AB 0240AB 0250AB 3B22F 368C9 261A2 116006 34144 0400AB 3E632 004002 006007 Name ROTDROP ROTDROPSWAP ROTDUP ROTOVER ROTROT2DROP ROTSWAP ROTUntop& xROW+ xROWxROW Rows8-15 RP# RPext RPIT RPITE xRPL> xrpm xRPN-> RPNDecomp#Disp RPNDecomp#Line RPNDecomp1Line RPNDecompEcho RPNDecompEdit RPNDecompStd1Line
RPNDecompStd1Line32

535
Page 107 107 107 107 107, 108 107 76 470 470 470 279 372 372 138 138 Addr. 005007 2AB69 0B954 2A9E9 2ABF0 2ABD7 013100 0F2006 0F3006 008100 35A5B 25EF7 1D3006 35A29 0000F 3C9E5 175006 176006 1D2006 261A7 088002 34D51 2F05E 25EFB 34D58 25F23 3712C 00008 00004 3EE82 014100 247006 3C4D5 2627E 3E1EF 3C9AF 0330AB 3B5BA 329006 3E127 3E385 07D314 2F36D 0C1007 2F36E 2F36F 2F370 255B0 Name RunDoOldMatrix RunInApprox RunInNewContext RunRPN: RunSafeFlags
RunSafeFlagsNoError

Page 176 310 198 176 177 478 328 328 478 166 166 167 167 470 338 338 408 177 234 314 289 117 176 169

rpnQOBJext rpnXROOT xRR xRRB RRDMext RREext xrref xRREF rref xRREFMOD RREFMOD xRRK xRRKSTEP xRSBERR xRSD RSKIP rstfmt1 RSUBext RSWAP xRSWP xRULES RunChooseSimple RunDoNewMatrix

465 52 53 52 54 53 52 52 423 470 470 378 348 470 470 415 470 470 470 470 470 129 178 371 129 470 244

xRSB S>Z S>Z? xSH SAFE@ SAFE@_HERE SAFEPURGE SAFESTO sALLOWINTR xSAME SAMEMATRIX SAMEMATSCTYPE SAVECASFLAGS savefmt1 SaveHARDBUFF SAVELAM SaveLastEdit SaveLastMenu SAVESTACK SaveSysFlags SaveVarRes sBEG sBPOFF xSBRK xSBB SC*MATMOD xSCALE SCANFONT xSCATRPLOT xSCATTER xSCHUR xSCI SCL*MAT xSCLSIGMA xSCONJ xSCROLL SCROLLDOWN SCROLLext SCROLLLEFT SCROLLRIGHT SCROLLUP ScrollVGrob

470 479 470 470 470 470 339 470 470 470 279 281 280 280 279 94

536
Addr. 3DF32 33157 3FE006 3FC006 3FD006 2E107 461006 4D4006 2F2E7 2F2E1 2F2E2 0312B 34AAD 3ECB0 2F371 2F372 2F373 2EEBB 2F374 2F375 2F376 2F377 25EF8 0530AB 01D100 007314 419006 3ED91 07661 25719 26139 25695 25671 25683 261AC 26116 09A007 2F378 2611B 2F379 2EE65 2EE65 2EE6F 2EE71 2EE70 2EE78 2EEAC 2EE72 Name xSDEV seco SECO2CMPCART SECO2CMPext SECO2CMPPOL Seco>Menu SECOEXEC SECOSQFFext SELECT.FONT SELECT.LINE SELECT.LINEEND SEMI SEMILOOP xSEND SENDACK SENDEOT SENDERROR SENDLIST SENDNAK SENDNULLACK SENDPKT SendSetup SEP$NL xSEQ xSERIAL xSERIES SERIESEXPLN xSERVER SET SetAlgEntry SetAlphaAnn SetAppMode SetAppSuspOK SetBadPOLUI setbeep SETCIRCERR SETCOMPLEX SetCursor SETCURSOR SetDA123NoCh SetDA12a3NCh SetDA12a3NoCh SetDA12NoCh SetDA12Temp SetDA13NoCh SetDA1Bad SetDA1IsStat SetDA1NoCh Page 470 10 422 293, 95 421 333, 422 313 307 307 129 151 471 Addr. 2EE69 2EE67 2EE94 2EE79 2EE6C 2EE73 2EE8A 2EF98 2EE7A 2EE7F 2EE76 2EE6A 2EEA5 2EE68 2EE93 2F37A 2EE91 2EE7B 2EE77 2EE6B 2EF99 2EEA0 2EE7C 2EE64 39104 2FFBD 2565F 2EECE 09F007 264D1 2FFEF 07638 26283 3714A 2F37B 2F458 25EFC 2613E 2F37C 04FB6 0764E 2564D 262E7 2EEAE 25617 0AA007 04FF2 26143

F. Entries sorted by Name


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

180

48 471 479 471 356 471 278 278 224 224 178 157 406 304 276 276 276 276 275 276 276 276 276

xSDEV SIN2TCext
Addr. 2FFDB 2580E 26148 2F25D 05016 2F37D 262D8 25EFD 262E2 2645E 26459 2614D 25EFE 39124 262DD 26152 2622E 064314 3314D 342EA 331B1 333C3 333EB 3341D 3B4C9 0CD006 0D80B0 520006 3E696 0426A 0D3007 0D1007 0D4007 0CF007 0D2007 0630AB 3721C 0020DE 3DDC4 3DDEE 3E0FD 301006 2FF006 3E156 0010DE 3A3EE 237006 0DC007 Name SETRAD SetRebuild SetRightAnn SETROMPART SETROMPERR SetServMode SETSIZEERR SetSomeRow SETSTACKERR setStdEditWid setStdWid SetSysFlag SetThisRow xSETTIME SETTYPEERR SetUserFlag
SetVStackProtectWord

537
Page 178 288 277 157 158 293 157 51 51 175 292 473 157 175 164 471 10 108 11 14 14 14 471 330 Addr. 0EC007 0E6007 0E4007 0EF007 0E2007 0DD007 0EA007 0E1007 0E9007 0E3007 0E7007 0E5007 0E0007 0ED007 0DF007 05F314 0DE007 38837 0A6007 4C1006 299006 033314 2AE006 2AF006 2B0006 2A9006 2AA006 2AD006 29D006 0220DE 298006 2AAE0 2A8006 2A0006 2A2006 29B006 2A4006 3A57C 428006 445006 444006 42E006 415006 414006 40C006 40B006 42A006 429006 Name SIGNE> SIGNEATAN SIGNECOS SIGNEERROR SIGNEEXP SIGNEext SIGNELEFT SIGNELN SIGNERIGHT SIGNESIN SIGNESQRT SIGNETAN SIGNMOINS SIGNMULText SIGNPLUS xSIGNTAB SIGNUNDEF xSILENT' SILENTMODE SIMP1! SIMP1ext xSIMP2 SIMP3ext SIMP3LISText SIMP3LSTSLOW SIMPext SIMPEXTOK SIMPGCDext SIMPIDNT xSIMPLIFY SIMPLIFY
SimplifyExpression

Page 401 401 401 404 401 401 401 401 401 401 401 400 401 400 471 400 407 354 471 354

xSEVAL SEVEN SEVENROLL SEVENTEEN SEVENTY SEVENTYFOUR SEVENTYNINE xSF SFactor sFldVal SHALT xSHOW ShowInvRomp SHRINK2ASYM SHRINK2SYM SHRINKASYM SHRINKEVEN SHRINKSYM xSIDENS Sig?ErrJmp xSIGMA xSIGMA+ xSIGMAxSIGMACOL SIGMAEXP2ext SIGMAEXPext xSIGMALINE xSIGMAVX xSIGN SIGNE SIGNE1ext

354 354 423 471 354 424 354 354 354 354 471 366 367 352 351 366 351 365 351 351 356

471 178 379 379 379 379 379 471 158 471 460 460 455 355 355 460 471 471 400 400

SIMPNDXFext SIMPSYMBS SIMPUSERFCN SIMPVAR SIMP| xSIN sin/cos sin2exp SIN2EXPext SIN2ext sin2tan SIN2TAN sin2tan/2 SIN2TAN/2 SIN2TC SIN2TCext

538
Addr. 018314 303006 307006 308006 305006 306006 52D006 3A678 449006 448006 530006 0D0007 3E331 0D3006 1A2006 33143 34281 331A7 3335F 333AF 33387 33369 3337D 33373 3438D 3BB1F 0714D 35715 38E81 38EA1 25EFA 00C0AB 0B1007 0B0007 26120 2B2006 2AC006 297006 2BB3A 3E35B 00002 2F38F 0290AB 03F314 219006 0F7007 21A006 0F4007 Name xSINCOS SINEXPA SINEXPA* SINEXPA*1 SINEXPA+ SINEXPAxSINext xSINH sinh2exp SINH2EXPext xSINHext SINTEST xSINV SIsPrime? siSYMDER SIX SIXROLL SIXTEEN SIXTY SIXTYEIGHT SIXTYFOUR SIXTYONE SIXTYTHREE SIXTYTWO SIXUNROLL xSIZE SKIP skipcola xSL xSLB SLEEPxcp xSLOPEFIELD SLOPPY? SLOPPYMODE SLOW SLOWGCDext SLOWSIMP2L SLVARext sncknum2 xSNEG sNEGATE xsngeneral xSNRM xSOLVE SOLVE1EQ SOLVECRAMER SOLVEMANYEQ SOLVEMETASYST Page 471 355 369 369 368 368 349 471 367 352 350 471 331 10 108 11 13 14 13 13 13 13 109 471 131 131 471 471 471 408 407 172 358 353 87 471 77 471 471 414 342 414 342 Addr. 086314 008314 1DE006 27E006 25EFF 05E0AB 2F37E 100006 33B55 0AD007 0130AB 2C2D6 0CE006 3A4EF 553006 2BD006 4CC006 317EE 3A442 42F006 42D006 41E006 41F006 2C6006 1CC006 38EC1 0280AB 38EE1 3EC55 0100DD 00F100 2BB21 2F390 13E006 140006 142006 144006 3B0006 3AC006 3AE006 3B2006 136006 134006 13C006 13A006 138006 3B6006 152006

F. Entries sorted by Name


Name xSOLVER xSOLVEVX SOLVEXFLOAT SOLVext SolvMenuInit xSORT SORTASLOW SortList SPACE$ SPARSEDATA xSPHERE SPLITWHERE SPollard xSQ xSQext SQFF2ext SQFFext SQRF xSQRT sqrt1-cos2 sqrt1-sin2 SQRT2LNEXP sqrt2lnexp SQRT_IN? SQRTINVpshd* xSR xSRAD xSRB xSRECV xSREPL xSREV sscknum2 xssgeneral xssSYM#? xssSYM% xssSYM%CH xssSYM%T xssSYM* xssSYM+ xssSYMxssSYM/ 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/ Page Addr. 3E823 2F198 2EF8B 2EF8C 2EF8D 2EF8E 2EF8F 2628D 39164 2F3A9 2F3AA 2F37F 2F066 3B749 37104 2F062 3EF07 07D1B 370006 0C6007 2CA006 2F063 0240DE 3DD6E 2F25F 2F260 356006 2F261 2F262 0400DE 0C5007 33125 3BBD9 2E0F3 0580AB 2F1AC 3BE006 37ABE 37AEB 33319 33823 38D94 38D72 00001 222006 221006 0160DE 0170DE Name xSTO> STO_CMD_MODE STO_CURS_POS STO_CURS_POS2 STO_CURS_POS3 STO_CURS_POS4 STO_CURS_POS_VIS STO_ML_DISP_SIZE xSTOALARM STOALLF STOALLF2 STOALM STOAPPLDATA xSTOF StoHiddenVar StoIOPAR xSTOKEYS STOLAM STOMAText STOMODULO STOPRIMIT StoPRTPAR xSTORE xSTOSIGMA STOSYSF STOSYSF2 STOSYSText STOUSERF STOUSERF2 xSTOVX STOVX str xSTR> Str>Menu xSTREAM StrEdit STRICTmetaCOMPARE STRIPTAGS STRIPTAGSl2 STRLIST STRREALREAL xSTRUCT-> xSTRUCT> sTRUNC STUDDIV STUDMULT xSTURM xSTURMAB

539
Page 167, 472 301 304 304 304 304 304 472 176 176 174 472 170 181 472 117 344 408 424

280 283 283 471 292 459 66 66 66 66 66 66 66 66 66 472 95 181 90 290 290 472 407 413 472 472 51 472 167 130 472 472 472 472

472 175 176 342 176 176 472 408 10 472 293, 95 472 370 61 62 13 17

540
Addr. 3B6C1 2557E 3B8D7 05733 2A5CA 35DA8 05821 25597 2612F 2559C 05815 33F006 3760D 37685 261B6 25592 0E8007 002314 243006 06F314 0F9007 3D503 4D6006 0FB007 3DE5A 3DE90 3DEC6 3DE75 3DEAB 10C006 25F04 02E0AB 02F0AB 03223 3DC20 357BB 3592B 28099 36829 280AD 36C22 362F2 35346 36982 368B5 36CB8 36CE0 36C90 Name xSTWS Sub xSUB SUB$ SUB$1# SUB$SWAP SUBCOMP SubGor SUBGROB SubGxor SUBHXS submeta SubMetaOb SubMetaOb1 subpdcdptch SubRepl SUBSIGNE xSUBST SUBTMOD xSUBTMOD SUM xSUM SUMSQRext SUMVX xSUMX xSUMX2 xSUMXY xSUMY xSUMY2 SUnivar? SuspendOK? xSVD xSVL SWAP xSWAP SWAP#SWAP#1+ SWAP#1+SWAP SWAP#1SWAP#1-SWAP SWAP%%/ SWAP%>C% SWAP&$ SWAP' SWAP2DUP SWAP3PICK SWAP4PICK SWAP4ROLL Page 472 93 472 48 48 48 69 93 91 93 57 78 77 77 93 401 472 416 473 393 460 333 393 461 461 461 461 461 380 224 473 473 107 473 24 24, 77 24 24 24 34 37 49 130 107 107 109 107 Addr. 39C8B 3700A 3635B 2F073 3421A 28989 35857 35872 374BE 3576E 163006 3623E 3646E 36496 161006 36AFE 3457F 367ED 117006 11A006 4FF006 110006 4FA006 341BA 0AC003 4FD006 114006 2812F 36946 3695A 58D006 093007 092007 3592B 2A7006 51B006 04E314 384006 3316B 50F006 53F006 550006 56F006 514006 53D006 54D006 541006 54A006

F. Entries sorted by Name


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 Page 10 353 72, 325, 359 71, 86 86 16 16 350 Addr. 33675 2EF26 512006 538006 543006 555006 552006 336B1 53A006 547006 46F006 567006 26134 58F006 2F064 005002 08D92 2EF67 2EE5E 2F1A3 2EE5F 39705 36F79 2EF66 08D66 08DD4 2F380 00A0DE 22A006 80F02 26157 355006 2EED7 016100 2DD006 2DE006 061314 265006 238006 060314 33189 336ED 37B04 0520AB 275C6 3A624 01C0DE 442006 Name SYMREAL SYMSHOW xSYMSIGN xSYMSIN xSYMSINH xSYMSQ xSYMSQRT SYMSYM xSYMTAN xSYMTANH SYMTAYLOR xSYMXPON SYNTAXERR Sys1IT Sys@ sysCHOOSE SYSCONTEXT SysDisplay SysErrorTrap
SysErrorTrapAction SysErrorTrapConfirm

541
Page 16 88 349 350 348 348 16 349 350 386 350 157 404 166 233 169 274

86 349 349

364 354 350 16 350 350 350 16 362 348 350 16 412 350 350 350 350 16 393

394

362

xSYSEVAL SysITE SysMenuCheck SysPtr@ SYSRRP? SysSTO xSYST2MAT SYSTEM SystemFlags SystemLevel? SYSText SysTime xSN TABLECOSext TABLETANext xTABVAL TABVALext TABVAR xTABVAR TAGGED TAGGEDANY TAGOBS xTAIL TakeOver xTAN xTAN2CS2 TAN2CS2

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 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

F. Entries sorted by Name


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 Page 50 50 44 45 44 44 145 45 45 45 45 43 44 44 44 45 45 45 45 44 44 45 45 45 45 45 45 45 45 45 44 45 151 418 76 360 360 279 279 279 100 473 171 171 474 474 403 Addr. 3EE0C 330006 30F28 01B314 01C314 416006 082314 01D314 01E314 411006 4F4006 4F6006 3C084 3AF3E 2F386 03A81 369D2 36540 36540 27E87 063314 471006 3C99D 015314 2B9006 2BB006 2BA006 3125D 391F8 3326F 2F034 2F031 041A7 25F05 39456 0470AB 0480AB 0490AB 04A0AB 3317F 331CF 3321F 33201 331F7 33229 331D9 33215 3320B Name xTRANSIO TRCARRY TRCXY xTRIG xTRIGCOS TRIGext xTRIGO xTRIGSIN xTRIGTAN TRIGTAN TRIMext TRIMOBJext xTRN xTRNC TRPACKETFAIL TRUE TRUE' TRUEFALSE TrueFalse TrueTrue xTRUNC TRUNCDL xTRUTH xTSIMP TSIMP2ext TSIMP3ext TSIMPext TST15 xTSTR TTHIRTYSIX TURNMENUOFF TURNMENUON TurnOff TurnOffKey xTVARS xTVM xTVMBEG xTVMEND xTVMROOT TWELVE TWENTY TWENTYEIGHT TWENTYFIVE TWENTYFOUR TWENTYNINE TWENTYONE TWENTYSEVEN TWENTYSIX

543
Page 474 340 32 474 474 356 474 474 474 356 378 398 474 474 135 130 136 136 135 474 386 474 474 354 355 354 474 12 273 273 178 474 474 474 474 474 11 11 11 11 11 11 11 11 11

544
Addr. 331ED 331E3 3311B 09E006 36202 09C006 3BC39 03C64 350D2 3513B 350F0 352AD 3503C 03F95 3512C 35177 3510E 03FDB 03FE5 351B3 35087 350C3 114007 35186 350FF 03FA9 3504B 194006 167006 03FD1 350E1 03F9F 35195 350B4 350A5 35292 03F8B 3511D 196006 3514A 20D6F 35159 03FBD 35168 351A4 182006 35096 2F07B Name TWENTYTHREE TWENTYTWO TWO TWO::POLY TWO{}N TWO{}POLY xTYPE TYPE TYPEAPLET? TYPEARRY? TYPEBINT? TYPECARRY? TYPECHAR? TYPECMP TYPECMP? TYPECOL? TYPECSTR? TYPEEREL TYPEEXT TYPEEXT? TYPEFLASHPTR? TYPEFONT? TYPEGAUSSINT? TYPEGROB? TYPEHSTR? TYPEIDNT TYPEIDNT? TYPEIDNTLAM? TYPEIRRQ? TYPELAM TYPELAM? TYPELIST TYPELIST? TYPELNGCMP? TYPELNGREAL? TYPERARRY? TYPEREAL TYPEREAL? TYPEREALZINT? TYPEROMP? TYPERRP TYPERRP? TYPESYMB TYPESYMB? TYPETAGGED? TYPEZ? TYPEZINT? U>nbr Page 11 11 10 377 72 377 474 199 200 199 200 199 200 20 199 200 199 20 20 200 200 200 200, 333 199 199 20 199 199 326, 421 20 199 20 199 200 200 199 20 199 201 200 20 200 20 199 200 200 200 82 Addr. 2F099 25F06 2F387 25F07 38FD7 3900B 0B7006 0B8006 0BD006 0140DD 2F07C 2F07D 2F07E 2F07F 2F080 2D74F 2F081 2F082 2D759 2F083 2F085 2F086 2F087 2F088 2F089 2F07A 2D763 2F08A 2D999 2F08B 2F08C 2F08D 2D777 2D985 2D971 2D95D 2F08E 2F08F 2D76D 2D9CB 2F090 2D949 2F091 2F092 2F093 2F094 2D9EE 2F095

F. Entries sorted by Name


Name U>NCQ UART? UARTBUFLEN UARTxcp xUBASE xUFACT UFactor UFactor1 UFactorDeg2 xUFL1MINIF 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 Page 83 Addr. 404006 405006 401006 58C006 3FF006 22B006 053314 3DF68 4C4006 45B006 4B6006 4B4006 4B8006 4B9006 4BA006 4BB006 4B7006 0C4006 358006 3943B 2F267 37A006 08C314 579006 57A006 57B006 0A5007 57C006 2EF93 2F388 1D0006 00F0AB 2F389 26125 2612A 52B006 3C1006 2F2E0 2F21F 2F19A 2F21D 2F21E 0080DD 00A0DD 25F0A 32B006 0390DE 342006 Name VAL1 VAL1M VAL2ext VALMUSTBE0 VALOBJext VANDERMONDE xVANDERMONDE xVAR VAR% VAR=LIST VARCOMP! VARCOMP2! VARCOMP3! VARCOMP31! VARCOMP32! VARCOMP33! VARCOMPLN! VarFactor VARGENext xVARS VARSIZE VBINARYOP xVER Verbose1 Verbose2 Verbose3 VERBOSEMODE VerboseN VERIF_SELECTION VerifyTOD VERNUMext xVERSION VERSTRING VERYSLOW VERYVERYSLOW xvext vgerxssSYMSUM ViewEditGrob ViewGrobObject ViewLevel1 ViewObject ViewStrObject xVISIT xVISITB VLM VPMULT xVPOTENTIAL VRRDM

545
Page 423 423 423 404 423 415 475 475 353 387

82 31 31 31 87 117

82 11 380 278 474 109 76 108, 108 474 107, 108 107, 108 108 108 107, 108 368 474 151 77 169 474 61 86 146 208 416 416 474 474 474 474

387

376 475 179 345 475 417 417 417 407 417 306 172 408 475 181 172 172 348 394 313 280 310 280 280 475 475 339 338

474 475 339

546
Addr. 343006 2EEF7 325006 3BDB2 379006 4EA006 4E9006 4E8006 4E2006 589006 4E6006 4DB006 4DA006 4DD006 4DC006 4D7006 4D9006 39819 2F268 25F0B 2A4FC 2D1006 3D605 380DB 071EE 38A2F 2EF61 2F38A 2617F 26184 26189 2F38B 2618E 2F38C 2F38D 26193 26198 0080AB 370C3 2EFBE 09A003 08E007 390AE 3E03D 180006 17F006 17C006 2F292 Name VRRDMmeta VSCALE VSUB xVTYPE VUNARYOP VX! VX> VX>LVARext VXINDEP? VXINDEPERR VXLVARext VXXL0 VXXL1ext VXXL2 VXXL2NR VXXLext VXXLFext xWAIT Wait/GetKey WaitForKey WaitTbz0 WARNSING xWHERE xWHILE WHILE xWHILEEND WINDOW# WINDOWBOT? WINDOWCORNER WINDOWDOWN WINDOWLEFT WINDOWLEFT? WINDOWRIGHT WINDOWRIGHT? WINDOWTOP? WINDOWUP WINDOWXY xWIREFRAME WithHidden WORDSIZE WRAP$ WRITEMENU xWSLOG xXCOL XEQ>ARRAY1 XEQ>ARRY XEQARRY> XEQIOBACKUP Page 338 339 475 345 398 398 398 397 404 397 326 326 326 326 325 325 475 207 206 390 475 151 281 280 279 279 279 280 279 280 280 279 279 475 170 57 48 293 475 475 65 65 Addr. 2F296 25F14 2F297 2F2A3 2F2A7 2F2A9 25E79 25F0C 3BC43 0700AB 0BE007 33625 3361B 021100 2EF92 3EC35 23C006 067314 03ADA 3CB7A 25F0D 3AD65 0710AB 068314 0500AB 3C915 3A278 454006 2C8006 04F0AB 06E0AB 51C006 0000AB 0030AB 3421A 25F0E 341D2 3574D 3416E 341A8 343BD 3636F 35EF2 35872 3422B 34195 341BA 341D7

F. Entries sorted by Name


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 Page 108 108 107 107 476 65 13 476 476 476 477 31 22 328 334 404 334 334 334 334 22 404 334 31 46 328 329 329 329 329 393 10 151 22 152 22 477 414 415 22 21 21 21 21 381 477 Addr. 0C9006 2B8006 2B7006 51F006 0FC006 0FA006 0D2006 0DD006 107006 105006 106006 255A6 255AB 0D1006 0DC006 0F0007 0F1007 0EE007 0E0006 0D8006 0D6006 0D7006 101006 0020AB 189006 25F9A 25F9A 388006 40A006 31568 34670 344A8 3466B 3616F 3467A 34675 34684 3467F 3468E 34689 34698 34693 33B13 346A2 3469D 346AC 346A7 346B6 Name ZFactor ZGcd ZGCDext ZINTSQRT ZIsNeg? ZIsOne? ZIsPrime? ZMod ZNLT? ZNMax ZNMin ZoomX ZoomY ZPrime? ZQUOText ZSIGNE zsigne ZSIGNECK ZSQRT ZTrialDiv ZTrialDiv2 ZTrialPrime? ZTrim xZVOL ZZ2C%%ext 0LASTOWDOB! 0LastRomWrd! 1&meta 1-x2/1+x2 1/X15 10GETLAM 10PICK 10PUTLAM 10UNROLL 11GETLAM 11PUTLAM 12GETLAM 12PUTLAM 13GETLAM 13PUTLAM 14GETLAM 14PUTLAM 14SPACES$ 15GETLAM 15PUTLAM 16GETLAM 16PUTLAM 17GETLAM

547
Page 330 329 329 334 334 331 329 334 329 329

331 401 402 401 329 332 332 332 329 477 37 197 197 359 365 117 109 118 109 118 118 118 118 118 118 118 118 45 118 118 118 118 118

548
Addr. 346B1 346C0 346BB 346CA 346C5 362A2 362A2 25E6C 35DEE 364FF 34616 2F318 35F42 36518 3A4006 3A1006 2B3A6 34611 2F180 25E6D 36676 30E5B 30E47 34B4F 441006 443006 346D4 346CF 346DE 346D9 346E8 346E3 346F2 346ED 346FC 346F7 34706 34701 34710 3470B 3471A 34715 34BAB 173006 03258 355A5 25E6E 35B32 Name 17PUTLAM 18GETLAM 18PUTLAM 19GETLAM 19PUTLAM 1_#1-SUB 1_#1-SUB$ 1A/LockA 1ABNDSWAP 1GETABND 1GETLAM 1GETLAMSWP1+ 1GETSWAP 1LAMBIND 1metainf# 1metaundef# 1NULLLAM{} 1PUTLAM 1REV 1stkdecomp$w 2#0=OR 2%%>% 2%>%% 2'RCOLARPITE 2*1-cos/sin 2*sin/1+cos 20GETLAM 20PUTLAM 21GETLAM 21PUTLAM 22GETLAM 22PUTLAM 23GETLAM 23PUTLAM 24GETLAM 24PUTLAM 25GETLAM 25PUTLAM 26GETLAM 26PUTLAM 27GETLAM 27PUTLAM 2@REVAL 2DMATRIX? 2DROP 2DROP00 2DropBadKey 2DROPFALSE Page 118 118 118 118 118 48 48 119 119 117 119 119 116 367 367 119 118 30 51 26 31 31 138 366 367 118 118 118 119 118 119 118 119 118 119 118 119 118 119 118 119 128 339 106 21 207 136 Addr. 2D7006 392006 031AC 3674D 358C2 358DC 358F8 36CA4 36621 35D30 3370B 3632E 34620 336E3 336CF 2F17E 155006 33459 3A3006 3A0006 2825E 271F4 37087 37046 4E1006 3461B 343E1 331B1 3570C 35018 12A006 40D006 34BBB 341D2 2D5006 3462A 156006 27208 34485 36789 36CCC 360F7 35F1A 34625 343F3 33765 35703 3422B

F. Entries sorted by Name


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+x2 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 Page 106 117 119 109 25 25 25 109 109 118 107 107 108 108 107 108 108 108 108 106 117 109 118 108 108 131 109 106 117 109 118 108 109 106 117 109 118 108 109 117 109 118 108 109 117 109 118 109 Addr. 35369 353F7 353EB 2F315 2F316 25E67 25E68 353CD 35F6A 2F191 3533C 263D2 25F68 25F63 03EC2 2632D 03DBC 36851 357FC 36093 34417 344DD 35E39 3453D 03DE0 35552 36815 3581F 360A7 34405 344CB 35E4D 3452B 03EF7 03CC7 03CA6 34A7E 36383 348FC 36F15 35B96 03DEF 36A13 073DB 35830 362CA 35FB0 34436 Name !!append$? !!append$ !!insert$ !#1+IF<dim-1 !#1-IF>0 !*triand !*trior !append$ !append$SWAP !DcompWidth !insert$ !MATTRNnc !REDIMTEMP !REDIMUSER #* #*OVF #+ #+-1 #+DUP #+OVER #+PICK #+ROLL #+SWAP #+UNROLL ##-#2/ #-+1 #-DUP #-OVER #-PICK #-ROLL #-SWAP #-UNROLL #/ #0<> #0= #0=?SEMI #0=?SKIP #0=case #0=ITE #0=UNTIL #1+ #1+' #1+_ONE_DO #1+DUP #1+LAST$ #1+NDROP #1+PICK

549
Page 49 49 49

50 50 49 49 51 49

23 23 23 23 24 24 110 108 24 109 23 24 23 24 24 110 108 24 109 23 25 25 141 141 141 141 151 23 130 151 24 48 75, 106 109

550
Addr. 344F2 2F222 35E61 34552 03E0E 36851 36815 35E89 35841 3601B 3628E 28071 281D5 361EE 35675 35620 03880 3375B 3E17B 3562A 2777E 3378D 337A1 337AB 337B5 337BF 337C9 337D3 337DD 337E7 337F1 337FB 3530D 352FE 3639C 36D8A 03E6F 03E2D 34451 34517 34564 03E4E 03E8E 3380F 3C8D0 03FEF 03FF9 36711 Name #1+ROLL #1+ROT #1+SWAP #1+UNROLL #1#1-+ #1#1-1SWAP #1-DUP #1-ROT #1-SUB$ #1-SWAP #1-UNROT #1-{}N #10* #10+ #102A8 #110 #111 #12+ #12F #132 #134 #135 #136 #137 #138 #139 #13A #13B #13D #13E #1<> #1= #1=?SKIP #1=case #2* #2+ #2+PICK #2+ROLL #2+UNROLL #2#2/ #200 #2111 #2614 #2686 #2<> Page 108 24 24 109 23 23 23 24 24 24 48 24, 77 24 72 23 23 21 17 17 23 17 17 17 17 17 17 17 17 17 17 17 17 25 25 142 142 23 23 109 108 109 23 23 17 20 20 20 25 Addr. 352F1 091B4 03FA9 355FD 34465 2D6006 355DF 3A1C2 3B9FA 350F5 352E0 35602 34474 355DA 3C11E 3B928 33837 3BA2D 0803F 3B93D 33841 3C10F 3B952 33855 3BA18 3B913 3A12D 35607 355D5 3385F 33869 3BA09 08ECE 33873 366FD 3C8DF 356B8 3560C 355D0 277F6 27800 2780A 27814 2781E 27828 27832 2783C 27846

F. Entries sorted by Name


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 Page 18 18 18 18 18 18 21 18 18 18 18 18 18 18 18 18 18 18 18 18 18 19 19 19 19 19 19 19 19 19 23 19 19 19 19 23 23 19 19 19 19 19 19 19 19 19 16 19 Addr. 3E759 3561B 33643 3364D 3EAFB 3E7E9 3E743 25F72 03CE4 366BC 03D4E 36D9E 36D76 36F29 03D19 363B5 348D2 34939 36590 35C54 37752 03D83 25F77 36739 36DB2 363E2 36DCB 05A75 059CC 36F3D 07E50 0EE006 3CD21 3373D 2774C 27756 27760 2776A 27774 338CD 3D50D 338D7 338E1 3D52B 3367F 338EB 338F5 338FF Name #8FD #9+ #92 #9A #9F #9F1 #9FD #:>$ #< #<3 #<> #<>case #<case #<ITE #= #=?SKIP #=case #=casedrop #=casedrpfls #=ITE #=POSCOMP #> #>$ #>1 #>2case #>?SKIP #>case #>CHR #>HXS #>ITE #>ROMPTR #>Z x#? #_102 #A01 #A02 #A04 #A05 #A06 #A11 #A110 #A12 #A1A #A1A0 #A2 #A21 #A22 #A2A

551
Page 19 23 16 16 16 19 19 46 25 25 25 141 141 141 25 140 141 141 141 141 69 25 46 25 142 140 141 47 56 141 100 327 476 17 19 19 19 19 19 19 20 19 19 20 16 19 20 20

552
Addr. 39E6B 33689 33909 33913 3391D 33927 03826 336A7 33931 3D51C 3393B 33945 2C4D2 3BD4C 03EB1 39277 38275 3B7AD 3394F 33959 33963 33977 3B904 3C800 3B8F5 3C7E2 3E7DA 33981 3BD65 08F1F 038DC 33995 07C007 38266 3736E 3551D 35511 33783 37315 03DC7 33747 3735C 3734A 37328 3733A 37294 37305 39C9F Name #A4 #A5 #A61 #A62 #A65 #A6E #A8241 #A9 #AA1 #AA10 #AA2 #AAA #AAA0 #AF #AND #B437D #BB #BBBB #C06 #C07 #C08 #C0B #C22 #C2C #C55 #C5C #C8 #CAlarmErr #CF #D6A8 #E13A8 #EXITERR #FACT #FFFF #FIVE#FOUR #MAX #MIN #NoRoomForSt #ONE#27 #PUSHA#SyntaxErr #THREE#FOUR #TWO#FOUR #TWO#ONE #TWO#TWO #ZERO#ONE #ZERO#SEVEN $&ob Page 16 16 20 20 20 20 21 16 20 20 20 20 20 16 25 21 16 20 20 20 20 20 20 20 20 20 16 20 16 20 21 21 330 21 21 25 25 17 21 17 21 21 21 21 21 21 53 Addr. 36851 25F7C 25F81 25F86 25F8B 05F0B3 05B15 3402C 34056 3403A 34002 3401E 34064 34076 340B4 34048 33FD2 33FE2 340A4 34088 33FF2 34010 33B45 3B251 30385 3602F 35EDE 36C7C 3032E 3033A 2FBE5 30DC8 2FBFF 303D3 36BE6 2FB49 30112 301F6 301A6 30145 30173 301CE 2FB63 3047D 2FC19 30CC7 2FB7D 27A89

F. Entries sorted by Name


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 Page 30 30 30 30 30 35 35 35 31 35 37 34 34 34 34 34 34 34 34 34 34 34 34 34 34 172 34 34 34 34 34 30 394 34 34 34 34 34 34 34 31 31 31 31 28 28 143 28 Addr. 2FA33 2FA48 2FA5D 2FA72 2FA87 2FA9C 2FAB1 2FB0A 2FB34 27118 2712D 339BE 303E9 2F937 30123 301BA 30156 2B149 30184 301E2 2F94C 26F36 26F4A 270EE 3049A 339E8 35C18 27E5D 2FCE6 2FCFB 2FC7D 2FD10 2FD25 2FD3A 2FCD1 2FD4F 2FD64 2FD79 339FD 2FD8E 2B1A3 4CE006 2F961 2FDA3 33A12 2FDB8 2FDCD 2FDE2 Name %-3 %-4 %-5 %-6 %-7 %-8 %-9 %-MAXREAL %-MINREAL %.1 %.15 %.5 %/ %0 %0< %0<> %0= %0=case %0> %0>= %1 %1+ %1%1.8 %1/ %10 %10* %100 %11 %12 %1200 %13 %14 %15 %15360 %16 %17 %18 %180 %19 %1=case %1TWO %2 %20 %200 %21 %22 %23

553
Page 28 28 28 28 28 28 28 28 28 28 28 32 28 35 35, 135 35 142 35 35 28 31 31 28 32 28 31 29 28 28 29 29 29 29 29 29 29 29 29 29 142 396 28 29 29 29 29 29

554
Addr. 2FDF7 2FC92 2FE0C 2FE21 2FE36 2FE4B 2FE60 2B20C 2F976 2FE75 2FE8A 2FE9F 2FEB4 2FEC9 2FEDE 33A27 2F98B 33A3C 2FCA7 2F9A0 2F9B5 2F9CA 2F9DF 27103 2F9F4 2FCBC 3025C 302A1 302B7 302AC 30275 2EFCB 2FFAC 30346 30489 30746 304E1 35ECA 3028B 05C27 3005E 2F223 3045B 302EB 262EC 306DC 307FE 305A5 Name %24 %2400 %25 %26 %27 %28 %29 %2=case %3 %30 %31 %32 %33 %34 %35 %360 %4 %400 %4800 %5 %6 %7 %8 %80 %9 %9600 %< %<= %<> %= %> %># %>%% %>%%%>%%1/ %>%%ANGLE %>%%SQRT %>%%SWAP %>= %>C% %>HMS %>TAG % %ABS %ABSCOERCE %ACOS %ACOSH %ALOG Page 29 29 29 29 29 29 29 143 28 29 29 29 29 29 29 29 28 29 29 28 28 28 28 29 28 29 35 35 35 35 35 56 31 31 32 32 32 31 35 37 172 61 32 32 22 32 32 32 Addr. 30723 306AC 307EB 3070C 30811 3095E 3B362 3041B 3030B 3084D 3062B 307C5 3000D 339A9 3051A 3052D 30824 30AAF 30971 30938 3008B 300B3 30077 3094B 2B3FD 30559 30592 3056C 3031B 300E0 35DBC 2FAF5 300F9 2FB1F 305C7 30837 3046C 303B4 30860 2FAC6 30EA6 30040 309AD 30A2F 30E79 302C2 305DA 30799

F. Entries sorted by Name


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 Page 33 32 474 33 32 32 29 29 29 29 30 49 49 68 57 130 130 130 130 130 131 131 131 116 168 130 128 128 131 128 128 197 197 24 130 130 131 420 420 476 347 470 470 476 347 151 Addr. 39CFC 3DA3E 3DA63 3EFB1 126006 39F49 129006 05445 3631A 09F006 3F053 3CE42 389B9 3CF80 27F47 27EAF 38D83 398B9 3CBF6 128006 3CEE1 3D01F 389D4 38999 3BE9B 27F9A 25F15 3C8A1 0525B 052C6 3B0EC 0A2006 0A4006 25F90 37C06 3C881 3B7D2 2620B 39785 0A7006 4F8006 06F9F 25E6F 0EB007 27EFB 3BBBE 052EE 05E81 Name xx->Q x->QPI x->TAG x-ext x/ x/ext ::N ::NEVAL ::POLY x; x< x<< x<=? <DelKey <SkipKey x<STRUCT x= x== x=ext x> x>=? x>> x>>ABND x>ARRY >DelKey >FONT x>GROB >H$ >HCOMP x>HMS >HPOLY >HPOLYN >LANGUAGE >LASTRAM-WORD x>LCD x>LIST >MINIFONT x>NUM >POLY >POLYTRIM >R >Review$ >SIGNE >SkipKey x>STR >T$ >TAG

555
Page 476 468 468 473 347 476 347 71 74 377 476 476 314 314 476 476 350 476 476

454 314 283 460 49 68 461 378 378 179 463 464 283 465 377 399 128 52 401 314 472 49 61

556
Addr. 052FA 0A1006 0A3006 38FB5 3C2D6 3C30A 4F1006 089314 35A88 25F9F 25E70 25E70 25E71 361C6 25E72 25E73 25E74 25E75 2F19F 2DFCC 2C341 2C311 2E5006 2EE5D 39332 34A46 25E76 3705A 25E77 25E78 35AAB 34AA1 3692D 0712A 35DDA 2EF73 25E79 Name >TCOMP >TPOLY >TPOLYN x>UNIT x>V2 x>V3 >VARLIST x? ?>ROMPTR ?ACCPTR> ?ATTN_QUIT ?ATTNQUIT ?BlinkCursor ?CARCOMP ?CaseKeyDef ?CaseRomptr@ ?ClrAlg ?ClrAlgSetPr ?DispCommandLine ?DispMenu ?DispStack ?DispStatus ?ext ?FlashAlert ?GETMSG ?GOTO ?Key>UKeyOb ?Ob>Seco ?OKINALG ?PURGE_HERE ?ROMPTR> ?SEMI ?SEMIDROP ?SKIP ?SKIPSWAP ?Space/Go> ?STO_HERE Page 68 377 378 474 475 475 Addr. 35F56 35F97 293A3 2ACB0 0797B 07943 16B006 002100 00B100 006100 0380AB 03A0AB 0020DD 000100 0040DD 06C0AB 0000DD 00A100 0110DD 0060DD 00C100 00E100 0360AB 020100 3D202 3D434 0550AB 0590AB 08A314 05A0AB 3A097 12B006 05459 0A0006 16A006 3D56B

F. Entries sorted by Name


Name ?SWAP ?SWAPDROP ?symcomp ?TogU/LCase @ @LAM []TO{} xA xALG xCD xCOL xDIAG xFONT xH xHEADER xKEYTIME xLANGUAGE xLST xMINIFONT xNDISP xPRG xRAM xROW xS2 x x xLIST xLIST x xLIST x xext {}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

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

Appendix G Entries sorted by Address


The entries in this index are sorted by address. Six-digit addresses are always sorted after ve-digit addresses. The six-digit addresses for rompointers and ashpointers consist of the pointer number (rst three digits) and the ashbank/library id (last three digits). Sorting of these addresses uses rst the ashbank/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 rst 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 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 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

178

557

558
Addr. 03B46 03B75 03B97 03C64 03CA6 03CC7 03CE4 03D19 03D4E 03D83 03DBC 03DC7 03DE0 03DEF 03E0E 03E2D 03E4E 03E6F 03E8E 03EB1 03EC2 03EF7 03F8B 03F95 03F9F 03FA9 03FA9 03FBD 03FD1 03FDB 03FE5 03FEF 03FF9 041A7 041ED 0426A 04708 04714 047C7 047CF 047DD 04A0B 04A41 04CE6 04D0E 04D33 04D3E 04D64 Name AND OR EQUAL TYPE #0= #0<> #< #= #<> #> #+ #PUSHA##1+ #1#2+ #2#2* #2/ #AND #* #/ TYPEREAL TYPECMP TYPELIST TYPEIDNT #2E48 TYPESYMB TYPELAM TYPEEREL TYPEEXT #2614 #2686 TurnOff DEEPSLEEP ShowInvRomp CHECKKEY GETTOUCH REPKEY? adrDISABLE_K adrKEYBUFFER GETPROC GETDF ERROR@ ERRORSTO ERRORCLR DROPNULL$ GETTHEMESG Page 136 136 137 199 25 25 25 25 25 25 23 23 23 23 23 23 23 23 25 23 23 20 20 20 20 20 20 20 20 20 20 20 178 178 178 205 206 206 Addr. 04D87 04D87 04E07 04E37 04E5E 04E66 04EA4 04EB8 04ED1 04FB6 04FF2 05016 05040 05068 05089 050ED 05149 05153 0516C 0518A 05193 0521F 0525B 052C6 052EE 052FA 05445 05459 0546D 05481 054AF 0556F 055B7 055D5 055DF 055E9 055FD 05616 05622 05636 0567B 056B6 05733 05815 05821 05902 05944 059CC

G. Entries sorted by Address


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

288 288 156 156 156 46 157

03B46 25579
Addr. 05A03 05A51 05A75 05AB3 05B15 05BE9 05C27 05D2C 05DBC 05E81 05F2E 05F42 05F61 0657E 06657 06B4E 06E8E 06E97 06EEB 06F66 06F8E 06F9F 06FB7 06FD1 07012 0701F 070C3 070FD 0712A 0712A 0714D 0716B 071A2 071AB 071C8 071E5 071EE 07221 07249 07258 07264 07270 07295 072AD 072C2 07334 073A5 073C3 Name HXS># CHR># #>CHR CHANGETYPE $>ID ID>$ %>C% C%>% C%%>%% >TAG ID>TAG GARBAGE MEM #61441 TOTEMPOB INTEMNOTREF? NOP ' 'R 'REVAL EVAL >R RDROP COLA R@ R> RPITE RPIT ?SKIP NOT_IT SKIP IDUP BEGIN AGAIN UNTIL REPEAT WHILE INDEX@ ISTOP@ JINDEX@ JSTOP@ INDEXSTO ISTOPSTO JINDEXSTO JSTOPSTO LOOP +LOOP ZERO_DO Page 22 22 47 179 116 46 37 31 37 61 61 178 178 21 171 171 128 130 128 128 128 128 129 131 128 128 138 138 138 138 131 128, 150 150 151 151 151 151 151 152 152 152 152 152 152 152 151 151 151 Addr. 073CE 073DB 073F7 07497 074D0 074E4 075A5 075E9 07638 0764E 07661 076AE 07709 07943 0797B 07D1B 07D27 07E50 07E99 0803F 081D9 082E3 08309 08326 08376 085D3 08696 08C27 08CCC 08D08 08D5A 08D66 08D92 08D92 08DD4 08DF7 08ECE 08F1F 0905F 091B4 092DB 0B954 20D6F 25565 2556A 2556F 25574 25579 Name ONE_DO #1+_ONE_DO DO ABND BIND DOBIND GETLAM PUTLAM SETHASH SETMESG SET OFFSRRP TOSRRP @LAM @ STOLAM STO #>ROMPTR ROMPTR@ #414C1 BAKNAME RAM-WORDNAME MYRAMROMPAIR LASTRAM-WORD PREVRAM-WORD REPLACE CREATE PURGE ROMPTR># CONTEXT! CONTEXT@ SysPtr@ HOMEDIR SYSCONTEXT SYSRRP? #7FF #536A8 #D6A8 BAK>OB #2D541 InitEnab RunInNewContext TYPERRP LineW LineB LineG1 LineG2 LineXor

559
Page 151 151 151 117 116 116 117 118 100

100 100 117 166 117 167 100 100 21 101 168 168 168 167 167 167 100 169 169 169 169 169 19 21 20 101 21 310 20 93 93 93 93 93

560
Addr. 2557E 25583 25588 2558D 25592 25597 2559C 255A1 255A6 255AB 255B0 255B5 255BA 255BF 255C4 255C9 255CE 255D3 255D3 255D8 255DD 255E2 255E7 255EC 255F1 255F6 255FB 25617 2561C 25621 25636 2564D 2565A 2565F 25671 25676 25683 25690 25695 2569A 256A2 256A7 256AC 256BE 256EA 25719 2571E 2577F Name Sub Repl Gor Gxor SubRepl SubGor SubGxor Grey? ZoomX ZoomY ScrollVGrob Distance PixonW PixonB PixonG1 PixonG2 PixonXor FBoxW FBoxG1 FBoxG2 FBoxB FBoxXor LBoxW LBoxG1 LBoxG2 LBoxB LBoxXor SetNUsrKeyOK ClrNUsrKeyOK NonUsrKeyOK? HISTON? SetNAppKeyOK DoStdKeys? SetDoStdKeys SetAppSuspOK ClrAppSuspOK SetBadPOLUI AppMode? SetAppMode ClrAppMode UNDO_ON? UNDO_ON UNDO_OFF NOBLINK AlgEntry? SetAlgEntry ClrAlgEntry TogInsert Page 93 93 93 94 93 93 93 94 Addr. 25790 25795 2579A 257A2 257BE 257E2 2580E 25845 25863 25877 25886 2588B 25890 2589A 2589F 258B3 258C7 258EF 25908 2590D 2593F 25949 2594E 25967 2597B 25980 25E67 25E68 25E69 25E6A 25E6B 25E6C 25E6D 25E6E 25E6F 25E70 25E70 25E71 25E72 25E73 25E74 25E75 25E76 25E77 25E78 25E79 25E79 25E7A

G. Entries sorted by Address


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

94 95 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 208 208 208 224 224 224 224 224 224 224 224

288 289 289 290 293, 95 290 290 293 290 290 291 291 289 289

208

50 50 31 130 130 51 207 52 207 207 179 142 142 278 278 201 167 167 167

179 278 278 278 302

2557E 25EDC
Addr. 25E7B 25E7C 25E7D 25E7E 25E7F 25E80 25E81 25E82 25E83 25E84 25E85 25E86 25E87 25E88 25E89 25E8A 25E8B 25E8C 25E8D 25E8E 25E8F 25E90 25E91 25E92 25E93 25E94 25E95 25E96 25E97 25E98 25E99 25E9A 25E9B 25E9C 25E9D 25E9E 25E9F 25EA0 25EA1 25EA2 25EA3 25EA6 25EA7 25EA8 25EA9 25EAA 25EAB 25EAC Name ALGeq? AND$ ATTNxcp BLANKIT Box/StdLabel Box/StdLbl: C%1/ C%>%% C%>%%SWAP C%ABS C%ACOS C%ACOSH C%ALOG C%ARG C%ASIN C%ASINH C%ATAN C%ATANH C%COS C%COSH C%CC C%CR C%EXP C%LN C%LOG C%RC C%SGN C%SIN C%SINH C%SQRT C%TAN C%TANH C>Im% C>Re% CK0ATTNABORT CK1NoBlame CKREF COERCE$22 CREATEDIR CRUNCH CRUNCHNoBlame CheckMenuRow Ck&DecKeyLoc Ck&Freeze CodePl>%rc.p DECOMP$ DISPROW1* DISPROW2* Page 49 277 95 95 37 37 37 37 38 38 38 38 38 38 38 38 38 38 37 37 38 38 38 37 37 38 38 37 38 38 37 37 207 197 171 47 168 86 293 205 205 53 281 281 Addr. 25EAD 25EAE 25EAF 25EB0 25EB1 25EB2 25EB3 25EB4 25EB5 25EB6 25EB7 25EB8 25EB9 25EBA 25EBB 25EBC 25EBD 25EBE 25EBF 25EC0 25EC1 25EC2 25EC3 25EC4 25EC5 25EC6 25EC7 25EC8 25EC9 25ECA 25ECB 25ECC 25ECD 25ECE 25ECF 25ED0 25ED1 25ED2 25ED3 25ED4 25ED5 25ED6 25ED7 25ED8 25ED9 25EDA 25EDB 25EDC Name DISPSTATUS2 DO#EXIT DO$EXIT DO%EXIT DO>STR DOBEEP DOCHR DODISP DORCLE DOSTOE DOSTR> DOTVARS% DOVARS DPRADIX? DUPGROBDIM Disp5x7 DispVarsUtil Do1st/2nd+: DoBadKey DoCAlarmKey DoDelim DoDelims DoFirstRow DoHere: DoKeyOb DoMenuKey DoNameKeyLRS DoNameKeyRS DoNextRow DoPlotMenu DoPrevRow DoSolvrMenu DropBadKey EDITDECOMP$ EQUATION EVALCRUNCH Echo2Macros EditMenu EqList? FlashMsg GBUFFGROBDIM GETKEY GETKEY* GROB>GDISP GetKeyOb GetMenu% GetNextToken H/W>KeyCode

561
Page 282 156 156 156 53 178 46 281 318 318 50 168 168 178 90 282 278 207 302 302 294 168 206 291

207 53 318

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 Name H/WKey>KeyOb HARDHEIGHT ImmedEntry? InitMenu InitMenu% InitTrack: KEYINBUFFER? KeepUnit Key>StdKeyOb Key>U/SKeyOb LastNonNull LoadTouchTbl LockAlpha ModifierKey? NEXTLIBBAK NULL$TEMP NoAttn?Semi NoEdit?case NoExitAction OR$ PATHDIR PrevNonNull RAD? RECLAIMDISP REPEATER REPEATERCH SAFE@_HERE SEP$NL SLEEPxcp SaveLastMenu SetKeysNS SetSomeRow SetThisRow SolvMenuInit StartMenu Std/BoxLabel StdMenuKeyLS StdMenuKeyNS SuspendOK? TurnOffKey UART? UARTxcp UnLockAlpha UserKeys? VLM WaitForKey XEQStoKey XOR$ Page 273 278 291 291 289 206 82 208 208 168 292 278 205 99 46 207 146 291 50 169 168 178 273 Addr. 25F0E 25F0F 25F0F 25F10 25F11 25F12 25F13 25F14 25F15 25F16 25F17 25F18 25F19 25F1A 25F1B 25F1C 25F1D 25F1E 25F1F 25F20 25F21 25F22 25F23 25F24 25F25 25F29 25F2A 25F2B 25F2C 25F2D 25F63 25F68 25F6D 25F72 25F77 25F7C 25F81 25F86 25F8B 25F90 25F95 25F9A 25F9A 25F9F 25FA4 25FA9 25FAE 25FB3

G. Entries sorted by Address


Name XYGROBDISP a%>$ a%>$, ederr editdecomp$w sstDISP stkdecomp$w XEQPGDIR >FONT DISP_LINE GetMetaVStackDROP GetVStack PopMetaVStack PopMetaVStackDROP PopVStack PopVStackAbove
PushMetaVStack&Drop

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

PushVStack PushVStack&Clear PushVStack&Keep


PushVStack&KeepDROP

166 48 289 290 293 292 293 292 95 290 290 224

278 208 206 167 50

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

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! Page 281 281 281 281 281 281 281 281 281 281 281 281 281 281 281 281 281 281 282 282 96 97 97 97 97 97 97 97 97 97 277 135 300 278 277 277 175 175 177 177 177 177 156 97 97 272 90 Addr. 26080 26085 2608A 2608F 26094 26099 2609E 260A3 260A8 260AD 260B2 260B7 260BC 260C1 260C6 260CB 260D0 260D5 260DA 260DF 260E4 260E9 260EE 260F3 260F8 260FD 26102 26107 2610C 26111 26116 2611B 26120 26125 2612A 2612F 26134 26139 2613E 26143 26148 2614D 26152 26157 26161 26166 2616B 26170 Name GROB!ZERO GROBDIM GsstFIN HARDBUFF HARDBUFF2 HEIGHTENGROB INVGROB KILLGDISP LastMenuRow! LastMenuRow@ MAKEGROB MenuRow! MenuRow@ NOHALTERR NOTLISTcase NOTROMPcase NOTSECOcase PIXOFF3 PIXON3 PIXOFF PIXON PIXON?3 PIXON? PULLCMPEL PULLREALEL PUTCMPEL PUTEL PUTREALEL PrgmEntry? RDUP SETCIRCERR SETCURSOR SLOW VERYSLOW VERYVERYSLOW SUBGROB SYNTAXERR SetAlphaAnn SetLeftAnn SetPrgmEntry SetRightAnn SetSysFlag SetUserFlag SystemLevel? TIMEOUT? TOADISP TOGDISP TestSysFlag

563
Page 91 90 273 273 273 91 273 288 289 91 288 288 157 145 145 145 91 91 91 91 92 91 64 64 65 65 65 278 129 157 172 172 172 91 157 278 277 278 277 175 175

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 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

G. Entries sorted by Address


Page 175 279 279 279 279 279 279 178 177 178 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

50 277 277 205 205 37 38 37 38 38 38 37 37 281 37 50 283 162 283 163 163 164 164

GetFontCmdHeight GetFontHeight GetFontStkHeight StackFontHeight GetHeader GetMetaVStack InitVirtualStack INITMKFONT MINIFONT>

283 283 273 162

51 51 278 300

283

26175 27E9B
Addr. 264DB 2657B 26580 26585 2658A 26594 265B7 265BC 265C1 265C6 265CB 265D0 26F36 26F4A 270EE 27103 27118 2712D 27142 27155 2716D 27195 271F4 27208 272D9 272F3 272FE 275C6 275EE 275FD 27620 2768E 27698 276AC 276B6 276C0 276CA 276D4 276DE 276E8 276F2 276FC 27706 27710 2771A 27724 2772E 27738 Name FIRSTC+ CURSOR_OFF0 CURSOR_OFF+ CURSOR@ CURSOR+ CURSOR_PART Z> Z< Z= Z<> Z>= Z<= %1+ %1%1.8 %80 %.1 %.15 LAMLNAME 'IDX StdIOPAR CRLF$ 2NULLLAM{} 3NULLLAM{} tok-> ID_EQ NULLID TakeOver Modifier MenuKey MenuMaker #60E #60F #611 #612 #613 #614 #615 #616 #617 #622 #623 #624 #628 #629 #62A #62B #62C Page Addr. 27742 2774C 27756 27760 2776A 27774 2777E 27788 27792 2779C 277A6 277B0 277BA 277C4 277CE 277D8 277E2 277EC 277F6 27800 2780A 27814 2781E 27828 27832 2783C 27846 27878 27882 27937 27A3A 27A89 27AA3 27B43 27B6B 27B7F 27C33 27D3F 27D5D 27D7B 27DBF 27DE4 27E09 27E2E 27E5D 27E72 27E87 27E9B Name #62D #A01 #A02 #A04 #A05 #A06 #12F #62E #618 #619 #61A #61B #61C #61D #61E #61F #620 #621 #605 #606 #607 #608 #609 #60A #60B #60C #60D #800 Attn# ID_SIGMADAT StdPRTPAR %%2PI NULLGROB 'IDFUNCTION 'IDPOLAR 'IDPARAMETER ExitFcn CROSSGROB MARKGROB StdLabelGrob C%-1 C%0 C%1 C%%1 %100 nohalt TrueTrue failed

565
Page 19 19 19 19 19 19 17 19 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 19 19 116 30 90 131 131 131 90 90 90 36 36 36 36 29 224 135 136

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

566
Addr. 27EAF 27EFB 27F47 27F9A 27FED 28001 28071 28071 28085 28099 280AD 280C1 280F8 2812F 28143 28187 281D5 28211 28225 2825E 282CC 283E8 283FC 286E7 28989 28ACE 293A3 293F8 2962A 2963E 29693 296A7 2973B 29754 29786 29821 298C0 29972 29986 29A5D 29A8F 29B12 29CB9 29D18 29D6A 29E29 29E67 29E99 Name <SkipKey >SkipKey <DelKey >DelKey NullMenuKey ROT#1+UNROT pull #1-SWAP pullrev SWAP#1+SWAP SWAP#1-SWAP ORDERXY# ORDERXY% SWAPTRUE NDUPN reversym #1-UNROT NDROPFALSE 9UNROLL 2NELCOMPDROP DROP%0 FalseFalse ISTOP-INDEX symcomp SWAPDROP#1DROP?symcomp ?symcomp P{}N RDROPFALSE psh& psh1top& top& pshtop& pullpsh1& 'RSWAP#1+ psh1& psh1&rev pshzer pshzerpsharg psh roll2ND unroll2ND uncrunch ONE{}N delimcase ngsizecase nultrior tok=casedrop Page 314 314 314 314 291 24 24, 77 24, 77 77 24 24 92 92 136 106 107 24 75, 136 109 68 31 136 152 86 24 86 86 71 136 76 77 76 76 77 24 77 77 77 88 76 76 76 87 72 Addr. 29ED0 29EE9 29F25 29F35 29F55 29F75 2A055 2A065 2A085 2A095 2A0A5 2A0B5 2A145 2A158 2A4FC 2A5CA 2A7A7 2A7F7 2A842 2A85D 2A878 2A893 2A8AE 2A8C9 2A8E4 2A904 2A924 2A944 2A964 2A984 2A9A4 2A9C4 2A9E9 2AA43 2AA70 2AAE0 2AB69 2ABD7 2ABF0 2AC0E 2AC72 2ACA9 2ACB0 2AD81 2ADBD 2ADE0 2AE32 2AF37

G. Entries sorted by Address


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

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

RunRPN: AlgDecomp CASEVAL


SimplifyExpression

RunInApprox
RunSafeFlagsNoError

50 145

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 Page 143 143 143 143 145 145 142 142 142 143 142 142 143 143 143 143 143 143 140 311 Addr. 2BF3A 2BF53 2BF6C 2BF85 2C039 2C044 2C04F 2C05A 2C065 2C07B 2C086 2C091 2C09C 2C0A7 2C0ED 2C10B 2C116 2C121 2C13A 2C145 2C150 2C15B 2C166 2C171 2C17C 2C187 2C192 2C1B0 2C1CE 2C1D9 2C1E4 2C1EF 2C1FA 2C205 2C210 2C21B 2C226 2C231 2C23C 2C247 2C252 2C25D 2C268 2C273 2C27E 2C289 2C294 2C29F Name DA1OK?NOTIT DA2aOK?NOTIT DA2bOK?NOTIT DA3OK?NOTIT nWHEREIFTE nWHEREDER nWHEREINTG nWHERESUM nWHEREWHERE D/D* D/D+ D/DD/D/ derquot derprod1 D/D= D/DABS easyabs D/DACOS D/DACOSH D/DALOG D/DARG D/DASIN D/DASINH D/DATAN D/DATANH D/DCHS D/DCONJ D/DCOS D/DCOSH D/DEXP D/DINV D/DLN D/DLNP1 D/DLOG D/DIFTE D/DSIN D/DSINH D/DSQ D/DSQRT D/DTAN D/DTANH D/D D/DX D/DY D/DDER D/DWHERE D/DINTEGRAL

567
Page 275 275 275 275

119 116 119 31 72 223 223 223 223 223 223

129 129 130 87 87 87 87 86 146

568
Addr. 2C2AA 2C2B5 2C2C0 2C2CB 2C2D6 2C2F9 2C305 2C311 2C341 2C371 2C37D 2C388 2C393 2C4D2 2D74F 2D759 2D763 2D76D 2D777 2D848 2D86D 2D8AD 2D949 2D95D 2D971 2D985 2D999 2D9CB 2D9EE 2DA11 2DA2B 2DCB5 2DD27 2DDD5 2DE26 2DEBB 2DFCC 2DFE0 2DFF4 2E0D5 2E0F3 2E107 2E11B 2E166 2E189 2E1EB 2E24D 2E25C Name D/DSUM D/DAPPLY nCustomMenu nCOLCTQUOTE SPLITWHERE DispStsBound DispStatus ?DispStatus ?DispStack DoInputForm PTYPE>PINFO MOVEVAR COPYVAR #AAA0 um* um/ um umP umEND tok_g tok_m tok_s UMSIGN UMIP UMFP UMFLOOR UMCEIL UMRND UMTRC cfF cfC FLOAT Day>Date getBPOFF mpop1% DAY# ?DispMenu DispMenu DispMenu.1 Grob>Menu Str>Menu Seco>Menu Id>Menu MakeStdLabel MakeBoxLabel MakeDirLabel MakeInvLabel InvLabelGrob Page Addr. 2E2AA 2EE5A 2EE5B 2EE5C 2EE5D 2EE5E 2EE5F 2EE60 2EE61 2EE62 2EE63 2EE64 2EE65 2EE65 2EE66 2EE67 2EE68 2EE69 2EE6A 2EE6B 2EE6C 2EE6D 2EE6E 2EE6F 2EE70 2EE71 2EE72 2EE73 2EE74 2EE75 2EE76 2EE77 2EE78 2EE79 2EE7A 2EE7B 2EE7C 2EE7D 2EE7E 2EE7F 2EE80 2EE81 2EE8A 2EE8B 2EE8D 2EE8E 2EE8F 2EE90

G. Entries sorted by Address


Name MakeLabel DispEditLine DispTime? BlankDA12 ?FlashAlert SysErrorTrap
SysErrorTrapConfirm

Page 293, 96 274 277 178

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

DoWarning FlashWarning DA1OK? DA3OK? SetDAsTemp SetDA12a3NoCh SetDA12a3NCh DA2aLess1OK? SetDA1Valid SetDA2bValid SetDA1Temp SetDA2bTemp SetDA3Temp SetDA2aEcho ClrDAsOK ClrDA3OK SetDA12NoCh SetDA13NoCh SetDA12Temp SetDA1NoCh SetDA2aNoCh ClrDA1Bad ClrDA2aBad SetDA2bNoCh SetDA3NoCh SetDA1Bad SetDA2aBad SetDA2bBad SetDA3Bad SetDAsNoCh ClrDA1IsStat DA2bIsEdL? SetDA2bIsEdL ClrDA2bIsEdL ClrDA2bNoCh SetDA2aTemp MENoP&FixDA1 ClrDA1OK ClrDA2aOK ClrDA2bOK ClrDA2OK

282 282 275 275 275 276 276 275 275 275 275 275 275 276 275 275 276 276 275 276 276 276 276 276 276 276 276 276 276 276 273 276 276 276 276 275 275 275 275 275

2C2AA 2EF59
Addr. 2EE91 2EE93 2EE94 2EEA0 2EEA5 2EEA6 2EEA7 2EEAB 2EEAC 2EEAE 2EEAF 2EEB0 2EEB1 2EEB2 2EEB3 2EEB4 2EEB5 2EEB7 2EEBB 2EEBC 2EEBD 2EEBE 2EEBF 2EEC0 2EEC1 2EEC2 2EEC3 2EEC4 2EEC5 2EEC6 2EEC7 2EEC8 2EEC9 2EECA 2EECB 2EECC 2EECD 2EECE 2EECF 2EED0 2EED1 2EED2 2EED3 2EED4 2EED5 2EED6 2EED7 2EED7 Name SetDA2Valid SetDA2NoCh SetDA23NoCh SetDA3ValidF SetDA2bTempF DA2bTemp? ClrDA2bTemp DA1IsStatus? SetDA1IsStat SetNoRollDA2 ClrNoRollDA2 DA1Bad? DA2aBad? DA2bBad? ClrDA2bBad DA3Bad? ClrDA3Bad DA2bNoCh? SENDLIST GETNAME DOFINISH DOPKT GetIOPAR DOOPENIO DOBAUD DOPARITY DOTRANSIO DOKERRM DOBUFLEN DOSBRK DOSRECV FLUSHRSBUF CLOSEUART docr DOCR DOPRLCD DODELAY SetEcma94 TOD DATE DDAYS DATE+DAYS TIMESTR Clr8 Clr8-15 HBUFF_X_Y SysTime CLKTICKS Page 275 276 276 275 275 275 276 276 276 276 276 276 276 276 276 276 276 180 180 180 180 181 180 180 180 180 180 180 180 180 181 181 172 173 173 173 49, 173 277 277 279 173 173 Addr. 2EED9 2EEDA 2EEDB 2EEDC 2EEDD 2EEDE 2EEDF 2EEE0 2EEE1 2EEE2 2EEE3 2EEE4 2EEE5 2EEE6 2EEE7 2EEE8 2EEE9 2EEEA 2EEEB 2EEEC 2EEED 2EEEE 2EEEF 2EEF0 2EEF1 2EEF2 2EEF3 2EEF4 2EEF5 2EEF6 2EEF7 2EEF8 2EEF9 2EEFA 2EEFB 2EEFC 2EEFD 2EEFE 2EEFF 2EF01 2EF02 2EF03 2EF04 2EF05 2EF06 2EF07 2EF26 2EF59 Name SYMBNUMSOLVE STATCLST STATSADD% STATN STATSMAX STATMEAN STATSMIN STATSTDEV STATTOT STATVAR EchoChrKey Echo$Key EditLevel1 InitEd&Modes InitEdLine InitEdModes EditString CURSOR_END? EDITLINE$ EDITPARTS NoEditLine? APPprompt1! AUTOSCALE PromptIdUtil PUTSCALE PUTINDEP PUTINDEPLIST PUTRES GETPTYPE PUTPTYPE VSCALE HSCALE DOERASE CROSS_HAIRS CROSS_OFF MENUOFF MENUOFF? CURRENTMARK? DispCoord1 DOPX>C DOC>PX DOLCD> DO>LCD DOCLLCD CKPICT nmetasyms SYMSHOW MENP&FixDA12

569
Page 66 66 66 66 66 66 66 66 66 302 311 314 303, 314 314 310 300 300 300 318 48 318 317 317 317 317 317

273

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 Name apndvarlst BlankDA1 InputLine DOGRAPHIC WINDOW# palparse SysMenuCheck SysDisplay ClrDouseAlm EvalParsed Parse.1 Parse.2 AtUserStack GetLastEdit ParseFail DispBadToken ParseFail2 DispBadToken2 CacheStack ?Space/Go> CMD_PLUS AddTrailingSpace AddLeadingSpace CMD_PAGEL CMD_PAGER CMD_PAGEU CMD_PAGED CMD_BAK CMD_NXT CMD_DEB_LINE CMD_END_LINE CMD_UP CMD_DOWN CMD_DROP CMD_DEL CMD_STO_DEBUT CMD_STO_FIN RCL_CMD_DEB RCL_CMD_FIN RCL_CMD_POS CMD_CUT CMD_COPY STO_CURS_POS STO_CURS_POS2 STO_CURS_POS3 STO_CURS_POS4 STO_CURS_POS_VIS CAL_CURS_POS_VIS Page 73 277 212 318 281 50 292 274 Addr. 2EF91 2EF92 2EF93 2EF94 2EF95 2EF96 2EF97 2EF98 2EF99 2EF9A 2EF9F 2EFA0 2EFA1 2EFA2 2EFA3 2EFA4 2EFA5 2EFA6 2EFA7 2EFA8 2EFAA 2EFAC 2EFAD 2EFAE 2EFAF 2EFB0 2EFB1 2EFB2 2EFB3 2EFB4 2EFB5 2EFB6 2EFB7 2EFB8 2EFB9 2EFBA 2EFBC 2EFBD 2EFBE 2EFBF 2EFC0 2EFC1 2EFC2 2EFC3 2EFC4 2EFC5 2EFC6 2EFC7

G. Entries sorted by Address


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

197 51 51

311 301 312 312 305 305 305 305 305 305 305 305 305 305 302 302 306 306 306 306 300 306 306 304 304 304 304 304 301

2EF5A 2F162
Addr. 2EFC8 2EFC9 2EFCA 2EFCB 2EFCC 2EFCD 2EFCE 2EFCF 2EFDB 2EFEC 2F002 2F003 2F004 2F007 2F008 2F019 2F031 2F034 2F05E 2F062 2F063 2F064 2F066 2F073 2F075 2F076 2F07A 2F07B 2F07C 2F07D 2F07E 2F07F 2F080 2F081 2F082 2F083 2F085 2F086 2F087 2F088 2F089 2F08A 2F08B 2F08C 2F08D 2F08E 2F08F 2F090 Name bit%#+ bit#%+ HXS>% %># HXS==HXS HXS>HXS HXS>=HXS HXS<HXS GROB+ symbn Ticks>TOD Ticks>Date Ticks>Rpt getxpos getypos UNIT>$ TURNMENUON TURNMENUOFF SaveLastEdit StoIOPAR StoPRTPAR Sys@ STOAPPLDATA SWAPcompSWAP InitSysUI puretemp? UM>U U>nbr UM#? UM% UM%CH UM%T UM* UM+ UMUM/ UM<=? UM<? UM=? UM>=? UM>? UMABS UMCHS UMCONV UMCOS UMMAX UMMIN UMSI Page 57 57 31 56 58 59 59 59 90 173 173 173 Addr. 2F091 2F092 2F093 2F094 2F095 2F096 2F098 2F099 2F09A 2F0A1 2F0AC 2F0BC 2F0C5 2F0D4 2F0D5 2F0DB 2F0E6 2F0E7 2F0E8 2F0EC 2F0EE 2F0EF 2F0FE 2F0FF 2F100 2F105 2F106 2F107 2F108 2F109 2F10A 2F10D 2F10E 2F110 2F113 2F11C 2F13C 2F13D 2F13F 2F142 2F153 2F154 2F155 2F158 2F15A 2F15B 2F15E 2F162 Name UMSIN UMSQ UMSQRT UMTAN UMU> UMXROOT Unbr>U U>NCQ TempConv RESETDEPTH PURGALARM% PRINT PLOTPREP ILnot? NEWINDEP MAKEPICT# KERMOPEN InitIOEnv INDEPVAR ICMPDRPRTDRP HXS#HXS HXS<=HXS GETXMAX GETXMIN GETYMIN GDISPCENTER GETINDEP GETPMIN&MAX GETRHS GETXPOS GetRes GETRES GETYMAX FINDVARS FNDALARM{} Echo$NoChr00 DoOldMatrix CK#DRAWLINE#3 DoNewMatrix CLKADJ* input$ input{} THISCHAR CHOOSE_INIT CLEARMENU Clr16 CHECKPICT

571
Page 83 83 83 83 82 83 82 82 82 107 174

199 91

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

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 Name CHECKPVARS Blank$ AllowPrlcdCl ALARMS@ AdjEdModes APPprompt2 2HXSLIST? 1REV DcompWidth@ !DcompWidth DoNewEqw UobROT CMD_PLUS2 CMD_PLUS3 RCL_CMD RCL_CMD2 STO_CMD_MODE RCL_CMD_MODE ViewLevel1 OngoingText? DispCommandLine ?DispCommandLine ErrorHandled?
SysErrorTrapAction

G. Entries sorted by Address


Page 316 48 174 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

22 30 51 51 77 301 302 300 300 301 301 310 312, 274 312, 274

AskQuestion CHARSEDIT EditFont EDITF Date>hxs13 StrEdit CharEdit ObEdit AlgObEdit Decomp%Short DROP3PICK laMGET0 CircleB CircleG1 CircleG2 CircleW CircleXor Dither ToGray Lift ViewObject ViewStrObject ViewGrobObject #1+ROT

282 50

173

311 311 54 109 93 93 93 93 93 95 95 280 280 280 24

2F163 2F365
Addr. 2F2F0 2F2F1 2F2F2 2F2F3 2F2F4 2F2F5 2F2F6 2F2F7 2F2F8 2F2F9 2F2FA 2F2FB 2F2FC 2F2FF 2F300 2F312 2F313 2F314 2F315 2F316 2F318 2F319 2F31A 2F31B 2F31C 2F31D 2F31E 2F31F 2F320 2F321 2F324 2F325 2F326 2F327 2F328 2F329 2F32A 2F32B 2F32C 2F32D 2F32E 2F32F 2F330 2F331 2F332 2F333 2F334 2F335 Name DO<Del DO>Del FindStrInCmd GET.W-> GET.W<PUT_FONTE GET_CUR_FONT.EXT PUT_STYLE EXEC_CMD DODEL.L CMD_COPY.SBR EVAL.SELECTION
REPLACEALLNOSCREEN

573
Page 303 303 308 308 308 313 312 313 309 303 307 309 309 274 Addr. 2F336 2F337 2F338 2F339 2F33A 2F33B 2F33C 2F33D 2F33E 2F33F 2F340 2F341 2F342 2F343 2F344 2F345 2F346 2F347 2F348 2F349 2F34A 2F34B 2F34C 2F34D 2F34E 2F34F 2F350 2F351 2F352 2F353 2F354 2F355 2F356 2F357 2F358 2F359 2F35A 2F35B 2F35C 2F35D 2F35E 2F35F 2F360 2F361 2F362 2F363 2F364 2F365 Name FindNext FixRRP GetChkPRTPAR GetEqN GetKermPkt# GETKP getmatchtok GETPARAM GETSCALE GETSERIAL GETYPOS GraphicExit GROB+# IncrLAMPKNO InputLAttn InputLEnter IOCheckReal JUMPBOT JUMPLEFT JUMPRIGHT JUMPTOP KDispRow2 KDispStatus2 KINVISLF KVIS KVISLF 'LamKPSto LASTPT? LEFTCOL LINECHANGE List MAKEPVARS metatail newBASE NEWMARK NEXTRRPOB NEXTSTEP NUMSOLVE OB>BAKcode OpenIOPrt PLOTERR PlotOneMore? PREMARKON PrintGrob PRINTxNLF PtoR PUTSERIAL PUTXMAX Page

318

51 316 317

91

OpenIO DispILPrompt OpenUartClr OpenUart?Clr RCLALARM% !#1+IF<dim-1 !#1-IF>0 1GETLAMSWP1+ ACK_INIT APNDCRLF BlankDA2 BlankDA2a BOTROW BUILDKPACKET C%># CHECKHEIGHT CkChr00 CKGROBFITS ClrServMode CMDSTO convertbase CROSSMARKON Date>d$ DECODE DISPCOORD2 DRAWBOX# drax DROPDEADTRUE DropSysErr$ ENCODE ENCODE1PKT EQCURSOR? EXCHINITPK Extobcode FcnUtilEnd

174

119 47, 181 277 277 279 22 90 55 90 314

280 280 280 280

181 181 181

279

316 78

173 282 92 130

316

574
Addr. 2F366 2F367 2F368 2F369 2F36A 2F36B 2F36C 2F36D 2F36E 2F36F 2F370 2F371 2F372 2F373 2F374 2F375 2F376 2F377 2F378 2F379 2F37A 2F37B 2F37C 2F37D 2F37E 2F37F 2F380 2F381 2F382 2F383 2F384 2F385 2F386 2F387 2F388 2F389 2F38A 2F38B 2F38C 2F38D 2F38E 2F38F 2F390 2F3A9 2F3AA 2F3B3 2F458 2F937 Name PUTXMIN PUTYMAX PUTYMIN RECORDX&YC% REMAP RIGHTCOL Rows8-15 SCROLLDOWN SCROLLLEFT SCROLLRIGHT SCROLLUP SENDACK SENDEOT SENDERROR SENDNAK SENDNULLACK SENDPKT SendSetup SetCursor SetDA123NoCh SetDA2OKTemp SetIOPARErr SETLOOPENV SetServMode SORTASLOW STOALM SysSTO TOD>t$ TOGGLELINE#3 TOP16 TOP8 TOPROW TRPACKETFAIL UARTBUFLEN VerifyTOD VERSTRING WINDOWBOT? WINDOWLEFT? WINDOWRIGHT? WINDOWTOP? xnsgeneral xsngeneral xssgeneral STOALLF STOALLF2 AsnKey SETIVLERR %0 Page 316 317 317 Addr. 2F94C 2F961 2F976 2F98B 2F9A0 2F9B5 2F9CA 2F9DF 2F9F4 2FA09 2FA1E 2FA33 2FA48 2FA5D 2FA72 2FA87 2FA9C 2FAB1 2FAC6 2FADB 2FAF5 2FB0A 2FB1F 2FB34 2FB49 2FB63 2FB7D 2FB97 2FBB1 2FBCB 2FBE5 2FBFF 2FC19 2FC7D 2FC92 2FCA7 2FCBC 2FCD1 2FCE6 2FCFB 2FD10 2FD25 2FD3A 2FD4F 2FD64 2FD79 2FD8E 2FDA3

G. Entries sorted by Address


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

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

2F366 30663
Addr. 2FDB8 2FDCD 2FDE2 2FDF7 2FE0C 2FE21 2FE36 2FE4B 2FE60 2FE75 2FE8A 2FE9F 2FEB4 2FEC9 2FEDE 2FF9B 2FFAC 2FFBD 2FFDB 2FFEF 3000D 30017 30040 3005E 30077 3008B 300B3 300C7 300E0 300F9 30112 30123 30145 30156 30173 30184 301A6 301BA 301CE 301E2 301F6 3020A 3025C 3026A 30275 30280 3028B 30296 Name %21 %22 %23 %24 %25 %26 %27 %28 %29 %30 %31 %32 %33 %34 %35 %%>% %>%% SETDEG SETRAD SETGRAD %D>R PI/180 %R>D %>HMS %HMS> %HMS+ %HMS%%MAX %MAX %MIN %%0< %0< %%0= %0= %%0> %0> %%0<> %0<> %%0>= %0>= %%0<= %%< %< %%> %> %%>= %>= %%<= Page 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 31 31 178 178 178 33 30 33 172 172 172 172 34 33 33 35 35 35 35 35 35 35 35, 135 35 35 35 35 35 35 35 35 35 35 Addr. 302A1 302AC 302B7 302C2 302DB 302EB 302FB 3030B 3031B 3032E 3033A 30346 3035F 3036C 30385 303A7 303B4 303D3 303E9 303F6 3041B 3044A 3045B 3046C 3047D 30489 3049A 304D5 304E1 304F4 30507 3051A 3052D 30546 30559 3056C 3057F 30592 305A5 305C7 305DA 305F1 30602 30612 3062B 30642 30653 30663 Name %<= %= %<> %SGN %%ABS %ABS %%CHS %CHS %MANTISSA %%+ %%%>%%%+ %%%* %* %OF %%/ %/ %T %CH %% % %NROOT %%1/ %>%%1/ %1/ %%SQRT %>%%SQRT %SQRT %%EXP %EXP %EXPM1 %%LN %LN %LOG %%LNP1 %LNP1 %ALOG %MOD %SIN %%SIN %%SINDEG %%SINRAD %COS %%COS %%COSDEG %%COSRAD

575
Page 35 35 35 32 34 32 34 32 32 33 33 31 31 31 33 31 33 34 32 33 33 34 32 33 34 32 32 34 32 32 34 32 32 34 32 32 34 32 32 32 32 34 34 34 32 34 34 34

576
Addr. 3067C 30693 306AC 306C3 306DC 306F3 3070C 30723 3073A 30746 30757 30767 30780 30799 307B2 307C5 307D8 307EB 307FE 30811 30824 30837 3084D 30860 30912 30938 3094B 3095E 30971 30984 30984 309AD 30A2F 30A66 30AAF 30BEA 30CC7 30CEB 30DC8 30E47 30E5B 30E79 30E83 30EA6 30EB0 30EDD 30F14 30F28 Name %TAN %%TANRAD %ASIN %%ASINRAD %ACOS %%ACOSRAD %ATAN %ANGLE %%ANGLE %>%%ANGLE %%ANGLEDEG %%ANGLERAD %%SINH %SINH %%COSH %COSH %TANH %ASINH %ACOSH %ATANH %EXPONENT %NFACT %COMB %PERM %%H>HMS %FP %IP %CEIL %FLOOR %%FLOOR %%INT %RAN %RANDOMIZE DORANDOMIZE %FACT %%7 %%12 %%60 %%.4 2%>%% 2%%>% %REC>%POL %%R>P %POL>%REC %%P>R %SPH>%REC RNDXY TRCXY Page 32 34 32 34 32 34 32 32 34 32 34 34 34 32 34 32 32 32 32 32 32 33 33 33 172 32 32 32 32 34 34 33 33 33 33 30 30 30 30 31 31 33 34 33 34 33 32 32 Addr. 31066 31123 31219 3125D 313D3 314CA 314E4 31518 31532 31568 315BB 317EE 31994 319C1 33107 33107 33107 33111 33111 33111 33111 3311B 3311B 3311B 33125 33125 33125 3312F 3312F 3312F 33139 33139 33139 33143 33143 33143 33143 3314D 3314D 3314D 33157 33157 33157 33161 33161 33161 3316B 3316B

G. Entries sorted by Address


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 Page 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 Addr. 33229 33233 33233 33233 3323D 3323D 33247 33247 33251 33251 3325B 3325B 33265 33265 3326F 3326F 33279 33279 33283 33283 3328D 3328D 33297 33297 33297 332A1 332A1 332AB 332AB 332B5 332B5 332BF 332BF 332C9 332C9 332D3 332D3 332DD 332DD 332E7 332E7 332F1 332F1 332FB 332FB 33305 33305 3330F Name BINT29 THIRTY REALEXT BINT30 THIRTYONE BINT31 BINT32 THIRTYTWO THIRTYTHREE BINT33 THIRTYFOUR BINT34 THIRTYFIVE BINT35 TTHIRTYSIX BINT36 THIRTYSEVEN BINT37 THIRTYEIGHT BINT38 BINT39 THIRTYNINE FORTY FOURTY BINT40 BINT41 FORTYONE FORTYTWO BINT42 FORTYTHREE BINT43 BINT44 FORTYFOUR FORTYFIVE BINT45 BINT46 FORTYSIX FORTYSEVEN BINT47 FORTYEIGHT BINT48 FORTYNINE BINT49 FIFTY BINT50 BINT51 FIFTYONE FIFTYTWO

577
Page 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 13 13 13 13 13

578
Addr. 3330F 33319 33319 33319 33319 33323 33323 3332D 3332D 33337 33337 33341 33341 3334B 3334B 33355 33355 3335F 3335F 33369 33369 33373 33373 3337D 3337D 33387 33387 33387 33387 33391 33391 3339B 3339B 333A5 333A5 333AF 333AF 333B9 333B9 333C3 333C3 333CD 333D7 333E1 333EB 333EB 333F5 333FF Name BINT52 STRLIST THREEFIVE FIFTYTHREE BINT53 FIFTYFOUR BINT54 BINT55 FIFTYFIVE BINT56 FIFTYSIX BINT57 FIFTYSEVEN FIFTYEIGHT BINT58 FIFTYNINE BINT59 BINT60 SIXTY BINT61 SIXTYONE BINT62 SIXTYTWO SIXTYTHREE BINT63 YHI SIXTYFOUR BINT64 BINT40h ARRYREAL BINT65 FOURTWO BINT66 BINT67 FOURTHREE BINT68 SIXTYEIGHT FOURFIVE BINT69 BINT70 SEVENTY BINT71 BINT72 BINT73 BINT74 SEVENTYFOUR BINT75 BINT76 Page 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 14 14 14 14 14 14 14 14 14 Addr. 33409 33413 3341D 3341D 33427 33427 33431 33431 33431 3343B 3343B 33445 33445 3344F 3344F 33459 33459 33463 33463 3346D 3346D 33477 33481 3348B 33495 33495 3349F 334A9 334B3 334BD 334C7 334C7 334D1 334D1 334DB 334E5 334EF 334EF 334F9 33503 3350D 33517 33521 3352B 33535 3353F 33549 33553

G. Entries sorted by Address


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 Page 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 Addr. 336CF 336D9 336E3 336ED 336F7 33701 3370B 33715 3371F 33729 33733 3373D 33747 33751 3375B 33765 3376F 33779 33783 3378D 33797 337A1 337AB 337B5 337BF 337C9 337D3 337DD 337E7 337F1 337FB 33805 3380F 33819 33823 3382D 33837 33841 3384B 33855 3385F 33869 33873 3387D 33887 33891 3389B 338A5 Name 2HXS BINTC0h 2GROB TAGGEDANY EXTREAL EXTSYM 2EXT ROMPANY BINT253 BINT255d REALOBOB #_102 #SyntaxErr BINT_263d #110 3REAL Err#Kill Err#NoLstStk #NoRoomForSt #132 REALSTRSTR #134 #135 #136 #137 #138 #139 #13A #13B #13D #13E INTEGER337 #200 Err#NoLstArg STRREALREAL ARRYREALREAL #412 #444 ARRYLISTREAL #452 #510 #511 #550 IDREALOB IDLISTOB #700 #861 #862

579
Page 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 18 18 18 18 18 18 19 19 19 19

580
Addr. 338AF 338B9 338C3 338CD 338D7 338E1 338EB 338F5 338FF 33909 33913 3391D 33927 33931 3393B 33945 3394F 33959 33963 3396D 33977 33981 3398B 33995 3399F 339A9 339BE 339D3 339E8 339FD 33A12 33A27 33A3C 33A51 33A5D 33A6B 33A77 33A83 33A8F 33A9B 33AA7 33AB3 33ABF 33ACB 33AD7 33AE3 33AEF 33AFB Name #865 #86E ATTNERR #A11 #A12 #A1A #A21 #A22 #A2A #A61 #A62 #A65 #A6E #AA1 #AA2 #AAA #C06 #C07 #C08 Connecting #C0B #CAlarmErr EXTOBOB #EXITERR MINUSONE %e %.5 %-.5 %10 %180 %200 %360 %400 tok] lbrac tok[ tok{ tok} toksharp tokuscore tok$ tok& tokESC tok>> tok<< tokexponent tokanglesign tokSIGMA Page 19 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 21 28 28 28 28 29 29 29 29 45 45 44 45 45 45 45 45 44 45 44 44 45 45 Addr. 33B07 33B13 33B39 33B45 33B55 33B55 33B61 33B79 33B85 33B91 33B9D 33BA9 33BB5 33BC1 33BCD 33BD9 33BE5 33BF1 33BFD 33C09 33C15 33C21 33C2D 33C3F 33C4D 33C59 33C65 33C71 33C7D 33C89 33C95 33CA1 33CAD 33CB9 33D2B 33D32 33D39 33D40 33D47 33D4E 33D55 33D5C 33D63 33D6A 33D71 33D78 33D7F 33D86

G. Entries sorted by Address


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 Page 41 41 41 41 41 41 41 41 41 41 41 41 41 41 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 Addr. 33EDD 33EE4 33EEB 33EF2 33EF9 33F00 33F07 33F0E 33F15 33F1C 33F23 33F2A 33F31 33F38 33F3F 33F46 33F4D 33F54 33F5B 33F62 33F69 33F70 33F77 33F7E 33F85 33F8C 33F93 33F9A 33FA1 33FA8 33FAF 33FB6 33FBD 33FC4 33FCB 33FD2 33FE2 33FF2 34002 34010 3401E 3402C 3403A 34048 34056 34064 34076 34088 Name CHR_l CHR_m CHR_n CHR_o CHR_p CHR_q CHR_r CHR_s CHR_t CHR_u CHR_v CHR_w CHR_x CHR_y CHR_z CHR_-> CHR_<< CHR_>> CHR_Angle CHR_Deriv CHR_Integral CHR_LeftPar CHR_Newline CHR_Pi CHR_RightPar CHR_Sigma CHR_Space CHR_UndScore CHR_[ CHR_] CHR_{ CHR_} CHR_<= CHR_>= CHR_<> $_R<< $_R<Z $_XYZ $_<<>> $_{} $_[] $_'' $_:: $_LRParens $_2DQ $_ECHO $_EXIT $_Undefined

581
Page 42 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 41 41 43 41 43 41 42 42 42 43 43 43 43 43 44 44 44 44 44 44 44 44 44 44 44 44 44

582
Addr. 340A4 340B4 34144 3416E 3416E 34195 34195 341A8 341A8 341BA 341BA 341BA 341D2 341D2 341D7 341D7 341DC 341E8 341F4 3421A 3421A 3422B 3422B 3422B 3423A 3423A 3423A 34257 34257 34281 34281 342BB 342BB 342EA 342EA 3432C 34331 34331 34331 34357 34357 3438D 3438D 343BD 343BD 343BD 343CF 343CF Name $_RAD $_GRAD RSWAP XYZ>YXZ ROTSWAP XYZ>ZY ROTDROPSWAP XYZ>YZ ROTDROP UNROTSWAP XYZ>ZYX SWAPROT 3DROP XYZ> XYZW> 4DROP 5DROP 6DROP 7DROP SWAPDROP XY>Y 3UNROLL UNROT XYZ>ZXY XYZW>YZWX FOURROLL 4ROLL 5ROLL FIVEROLL 6ROLL SIXROLL EIGHTROLL 8ROLL SEVENROLL 7ROLL DUP4UNROLL FOURUNROLL 4UNROLL XYZW>WXYZ 5UNROLL FIVEUNROLL SIXUNROLL 6UNROLL XYZ>Z UNROT2DROP ROTROT2DROP 4UNROLL3DROP XYZW>W Page 44 44 129 107 107 107 107 107 107 107, 108 107, 108 107, 108 106 106 106 106 106 106 106 107 107 108, 108 108, 108 108, 108 107 107 107 108 108 108 108 108 108 108 108 106 108 108 108 109 109 109 109 107, 108 107, 108 107, 108 108 108 Addr. 343E1 343F3 34405 34417 34431 34436 34451 34465 34474 34485 3448A 3448F 34494 34499 3449E 344A3 344A8 344CB 344DD 344F2 34504 34517 3452B 3453D 34552 34564 3457F 3457F 34611 34616 3461B 34620 34625 3462A 3462F 34634 34639 3463E 34643 34648 3464D 34652 34657 3465C 34661 34666 3466B 34670

G. Entries sorted by Address


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 Page 118 118 118 118 118 118 118 118 118 118 118 118 118 118 118 118 118 118 118 118 119 118 119 118 119 118 119 118 119 118 119 118 119 118 119 119 119 141 141 141 141 141 144 141 139 139 139 139 Addr. 34999 349B1 349C6 349D6 349EA 349F9 34A13 34A22 34A31 34A46 34A59 34A7E 34A92 34AA1 34AAD 34ABE 34AD3 34AF4 34B3E 34B4F 34BAB 34BBB 34BD8 34BEF 34C82 34D00 34D51 34D58 34EBE 34FA6 34FC0 34FCD 34FE6 35018 35037 3503C 35046 3504B 35082 35087 35091 35096 350A0 350A5 350AF 350B4 350BE 350C3 Name EQcase caseDROP NOTcaseDROP case2DROP NOTcase2DROP case NOTcase IT GOTO ?GOTO NOT?GOTO #0=?SEMI NOT?SEMI ?SEMI SEMILOOP ITE_DROP COLA_EVAL COLARPITE ITE 2'RCOLARPITE 2@REVAL 3@REVAL NOT?DROP ticR EXPAND CACHE SAVELAM SAVESTACK DUMP undo DUPROM-WORD? ROM-WORD? Rom-Word? 2SWAP DUPTYPECHAR? TYPECHAR? DUPTYPEIDNT? TYPEIDNT? DUPTYPEFLASHPTR? TYPEFLASHPTR? DUPTYPEZINT? TYPEZINT? DUPTYPELNGREAL? TYPELNGREAL? DUPTYPELNGCMP? TYPELNGCMP? DUPTYPEFONT? TYPEFONT?

583
Page 144 139 139 140 140 139 139 138 129 129 129 141 137 137 151 139 131 138 139 138 128 128 138 128 48, 57 117 117 117 117 100 100 107 200 200 199 199 200 200 200 200 200 200 200 200 200 200

584
Addr. 350CD 350D2 350DC 350E1 350EB 350F0 350F5 350FA 350FF 35109 35109 3510E 35118 35118 3511D 35127 3512C 35136 35136 3513B 35145 3514A 35154 35159 35163 35168 35172 35172 35177 35181 35186 35190 35190 35195 3519F 351A4 351AE 351B3 351FA 35268 35280 35289 35292 352AD 352BD 352E0 352F1 352FE Name DUPTYPEAPLET? TYPEAPLET? DUPTYPELAM? TYPELAM? DUPTYPEBINT? TYPEBINT? #37258 DUPTYPEHSTR? TYPEHSTR? DTYPECSTR? DUPTYPECSTR? TYPECSTR? DTYPEREAL? DUPTYPEREAL? TYPEREAL? DUPTYPECMP? TYPECMP? DUPTYPEARRY? DTYPEARRY? TYPEARRY? DUPTYPEROMP? TYPEROMP? DUPTYPERRP? TYPERRP? DUPTYPESYMB? TYPESYMB? DTYPECOL? DUPTYPECOL? TYPECOL? DUPTYPEGROB? TYPEGROB? DUPTYPELIST? DTYPELIST? TYPELIST? DUPTYPETAG? TYPETAGGED? DUPTYPEEXT? TYPEEXT? OverWrF/TLp OVER#= DROPTRUE DROPFALSE TYPERARRY? TYPECARRY? DUP#0= #3= #2= #1= Page 200 200 199 199 200 200 21 199 199 199 199 199 199 199 199 199 199 199 199 199 200 200 200 200 199 199 200 200 200 199 199 199 199 199 200 200 200 200 25 136 136 199 199 25 25 25 25 Addr. 3530D 3531C 3532B 3533C 35346 35369 353CD 353EB 353F7 354CB 354CB 35511 3551D 35552 3558C 355A5 355D0 355D5 355DA 355DF 355FD 35602 35607 3560C 35611 35616 3561B 35620 3562A 35675 3569B 356B8 356D5 35703 3570C 35715 3571E 35733 3574D 3574D 3574D 3576E 3579C 357BB 357CE 357E2 357FC 3581F

G. Entries sorted by Address


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 Page 24 24 107 107, 108 107, 108 107, 108 107 108 25 25 25 24 24, 77 24, 77 24 21 129 131 140 140 139 144 144 167 166 166 100 100 136 55 151 71 69 49 109 100 31 166 100 141 71 136 171 107 136 107 Addr. 35CE0 35CF4 35D08 35D1C 35D30 35D30 35D44 35D58 35D6C 35D6C 35D80 35D94 35DA8 35DBC 35DDA 35DEE 35E07 35E07 35E20 35E20 35E39 35E4D 35E61 35E75 35E89 35EA2 35EB6 35ECA 35EDE 35EF2 35F06 35F1A 35F2E 35F42 35F56 35F6A 35F7E 35F97 35FB0 35FB0 35FC4 35FD8 35FF3 36007 3601B 3602F 36043 36043 Name DUPDUP OVERDUP COERCEDUP UNROTDUP 2DUPSWAP DUP3PICK 4UNROLLDUP NTHCOMDDUP OVERSWAP OVERUNROT ROLLSWAP NULL$SWAP SUB$SWAP %MAXorder ?SKIPSWAP 1ABNDSWAP ROT+SWAP ROT#+SWAP 4PICK#+SWAP 4PICK+SWAP #+SWAP #-SWAP #1+SWAP ZEROSWAP #1-1SWAP ONESWAP COERCESWAP %>%%SWAP %%*SWAP XYZ>ZTRUE 4ROLLSWAP 3PICKSWAP 4PICKSWAP 1GETSWAP ?SWAP !append$SWAP NOT?SWAPDROP ?SWAPDROP N+1DROP #1+NDROP ROLLDROP MDIMSDROP DUPROT DROPROT #1-ROT %%*ROT FOURROLLROT 4ROLLROT

585
Page 106 109 22 108 106, 106 106, 106 108 69 109, 109 109, 109 108 46 48 33 138 119 25 25 25 25 24 24 24 22 24 22 22 31 33 136 107 109 109 119 138 49 138 138 75, 106 75, 106 108 64 106 106 24 33 108 108

586
Addr. 36057 3606B 3607F 36093 360A7 360BB 360CF 360E3 360F7 3610B 3611F 36133 36147 3615B 3616F 36183 3619E 361B2 361C6 361DA 361DA 361EE 36202 36216 3622A 3623E 36252 36266 3627A 3628E 362A2 362A2 362B6 362CA 362DE 362F2 36306 3631A 3632E 36342 3635B 3636F 36383 3639C 363B5 363CE 363E2 363FB Name 4UNROLLROT DROPOVER EQOVER #+OVER #-OVER ZEROOVER UNROTOVER 4ROLLOVER 3PICKOVER 4PICKOVER DUPPICK DUPROLL OVER#2+UNROL 8UNROLL 10UNROLL OVERARSIZE 'ERRJMP caseERRJMP ?CARCOMP NEWLINE$&$ NEWLINE&$ #1-{}N TWO{}N THREE{}N DUPINCOMP SWAPINCOMP DUPNULL$? DUPNULLCOMP? DUPLENCOMP #1-SUB$ 1_#1-SUB$ 1_#1-SUB LAST$ #1+LAST$ DUP$>ID SWAP%>C% 'NOP ::NEVAL 2GETEVAL DROPRDROP SWAPCOLA XYZ>ZCOLA #0=?SKIP #1=?SKIP #=?SKIP ONE_EQ #>?SKIP COLASKIP Page 108 106 137 24 24 22 108 108 109 109 106 106 77 109 109 64 130 146 68 47 47 72 72 72 71 71 55 68 68 48 48 48 48 48 116 37 130 74 119 129 131 131 141 142 140 25 140 131 Addr. 3640F 36428 36441 3645A 3646E 36482 36496 364AF 364C8 364E1 364FF 36513 36518 3652C 36540 36540 36554 36554 36568 3657C 36590 365B3 365CC 365E5 365F9 3660D 36621 36635 3663A 3664E 36662 36676 36694 366A8 366BC 366D0 366E9 366FD 36711 36725 36739 36739 3674D 3674D 36761 36775 36789 3679D

G. Entries sorted by Address


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 Page 24 24 152 24 24 23 23 24 24 23 23 23 139 156 107 129 91 139 140 138 77 76 130 130 130 130 130 130 130 130 130 128 128 131 117 168 131 72 21 21 21 21 21 21 139 146 146 198 Addr. 36BAA 36BBE 36BD2 36BE6 36BFA 36C0E 36C22 36C36 36C4F 36C4F 36C68 36C7C 36C90 36C90 36CA4 36CB8 36CCC 36CE0 36CF4 36D08 36D21 36D3A 36D4E 36D62 36D76 36D8A 36D9E 36DB2 36DCB 36DDF 36DF3 36E07 36E43 36E57 36E6B 36E7F 36E93 36EA7 36EBB 36ED4 36EED 36F01 36F15 36F29 36F3D 36F51 36F65 36F79 Name NcaseTYPEERR 'x* 'xDER %%/>% UNCOERCE%% DUP%0= SWAP%%/ caseDrpBadKy caseDEADKEY caseDoBadKey GROBDIMw %%*UNROT XYZW>YWZX SWAP4ROLL 2DUP5ROLL SWAP3PICK 3PICK3PICK SWAP4PICK OVER5PICK EQUALcasedrp DUP#0=csDROP jEQcase ANDcase EQUALcase #<case #1=case #<>case #>2case #>case j%0=case REALcase dARRYcase dLISTcase EditExstCase ANDNOTcase EQUALNOTcase dIDNTNcase dREALNcase EQIT DUP#0=IT ANDITE EQITE #0=ITE #<ITE #>ITE DUP#0=ITE UserITE SysITE

587
Page 146 130 130 34 31 35 34 146 146 146 90 33 107 107 106 107 109 109 109 144 142 144 139 144 141 142 141 142 141 142 145 145 145 146 139 144 145 145 144 141 139 144 141 141 141 141 146 146

588
Addr. 36F8D 36FA6 36FBA 36FCE 36FCE 36FE2 36FF6 3700A 3701E 37032 37046 3705A 37073 37087 3709B 3709B 370AF 370C3 37104 37118 3712C 3714A 37186 371B3 371F9 3721C 37258 37287 37294 37305 37315 37328 3733A 3734A 3735C 3736E 37380 37394 373A8 374BE 3760D 37685 376B7 376C1 376EE 37702 37752 3776B Name top&Cr metaROTDUP ROTUntop& roll2top& rolltwotop& plDRPpZparg &$SWAP SWAPCKREF pZpargSWAPUn DROPNDROP 2OVER ?Ob>Seco Ob>Seco 2Ob>Seco ZEROISTOPSTO ExitAtLOOP RclHiddenVar WithHidden StoHiddenVar PuHiddenVar SaveVarRes SetHiddenRes RestVarRes Embedded? UStackDepth Sig?ErrJmp DupAndThen ZEROZERO #ZERO#ONE #ZERO#SEVEN #ONE#27 #TWO#ONE #TWO#TWO #TWO#FOUR #THREE#FOUR #FIVE#FOUR ZEROZEROZERO ZEROZEROONE ZEROZEROTWO SWAPDROPTRUE SubMetaOb SubMetaOb1 matchob? matchob?Lp POSCOMP nextpos #=POSCOMP EQUALPOSCOMP Page 76 76 76 76 88 49 171 88 75, 106 109 73 73 73 152 152 170 170 170 170 169 170 169 69 158 21 21 21 21 21 21 21 21 21 21 21 21 136 77 77 69 69 69 69 Addr. 37784 37798 377C5 377DE 37829 378FA 378FA 37906 37906 37AA5 37ABE 37AEB 37B04 37B54 37C06 37F48 37F7F 3805D 3807D 38093 380DB 38105 3816B 38195 381AB 38252 38266 38275 3831C 3851F 387AC 3880D 38837 3885C 38999 389B9 389D4 389EF 38A14 38A2F 38A54 38ABA 38B28 38B43 38BAE 38BBF 38C00 38C1B

G. Entries sorted by Address


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? Page Addr. 394F1 3950C 39527 3955B 39576 39591 395AC 395F3 396A4 39705 39725 39745 39765 39785 397E5 39819 39839 39854 3989C 398B9 39976 39A07 39A6C 39AC7 39AE4 39B01 39B1E 39B3B 39B58 39C8B 39C9F 39CB3 39CD5 39CFC 39DE8 39E6B 39F49 3A097 3A12D 3A1C2 3A200 3A278 3A32B 3A390 3A3EE 3A442 3A4EF 3A57C Name xKILL xOFF xDOERR xERR0 xERRN xERRM xEVAL xIFTE xIFT xSYSEVAL xDISP xFREEZE xBEEP x>NUM xLAST xWAIT xCLLCD xKEY xCONT x= xNEG xABS xCONJ xPI xMAXR xMINR xCONSTANTe xi x+ SWAP>HCOMP $&ob ob&$ xNEGNEG xx* #A4 x/ x #4FF #304 rpnXROOT xXROOT xINV xARG xSIGN xSQRT xSQ xSIN

589
Page 463 465 457 458 458 458 458 462 462 473 457 460 454 465 463 475 455 463 456 476 465 453 456 466 464 465 458 462 476 68 53 53 476 476 16 476 477 18 17 476 462 453 471 475 471 471

454 469 469 470 470 471 471 471 471 468 454 456 474 474 474 474 473 456 473 475 453 453 456 473 455 472 468 459 457 474 456 456 21 157 456 466 461 474 475 474 455 465 179

590
Addr. 3A5D0 3A624 3A678 3A6C2 3A70C 3A756 3A7DC 3A844 3A88E 3A8D8 3A94F 3A9B7 3AA01 3AA73 3AAE5 3AB2F 3AB6F 3ABAF 3ABFD 3AC3D 3AC87 3ACD1 3AD1B 3AD65 3ADA5 3AE2B 3AEB1 3AF3E 3AFCB 3B02E 3B06E 3B0AE 3B0EC 3B10C 3B12C 3B14C 3B16C 3B193 3B1BA 3B1E1 3B208 3B22F 3B251 3B2DC 3B362 3B3E6 3B401 3B423 Name xCOS xTAN xSINH xCOSH xTANH xASIN xACOS xATAN xASINH xACOSH xATANH xEXP xLN xLOG xALOG xLNP1 xEXPM xFACT preFACT xIP xFP xFLOOR xCEIL xXPON xMAX xMIN xRND xTRNC xMOD xMANT xD>R xR>D x>HMS xHMS> xHMS+ xHMSxRNRM xCNRM xDET xDOT xCROSS xRSD x% x%T x%CH xRAND xRDZ xCOMB Page 456 473 471 456 473 454 453 454 454 453 454 459 464 464 453 464 459 475 462 459 459 455 476 464 465 469 474 465 464 458 468 461 461 461 461 469 455 457 458 456 470 476 474 455 468 469 456 Addr. 3B477 3B4C9 3B4E9 3B509 3B529 3B549 3B564 3B57F 3B59A 3B5BA 3B5DA 3B5FA 3B615 3B635 3B655 3B670 3B68B 3B6A6 3B6C1 3B6FA 3B715 3B749 3B76C 3B7AD 3B7D2 3B7ED 3B819 3B87E 3B8D7 3B8F5 3B904 3B913 3B928 3B93D 3B952 3B967 3B976 3B9D2 3B9FA 3BA09 3BA18 3BA2D 3BAC1 3BADA 3BAF5 3BB1F 3BB94 3BBBE

G. Entries sorted by Address


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 Page 472 465 455 474 199 16 16 475 458 465 454 454 468 456 462 474 467 17 17 467 19 19 460 460 475 475 475 462 466 466 454 455 469 470 470 458 454 458 470 466 457 458 467 456 460 463 467 466 Addr. 3C638 3C662 3C68C 3C6B6 3C6E0 3C70A 3C72A 3C74A 3C7D8 3C7E2 3C800 3C81E 3C83C 3C866 3C881 3C8A1 3C8C6 3C8D0 3C8DF 3C8FA 3C915 3C935 3C955 3C967 3C979 3C98B 3C99D 3C9AF 3C9C1 3C9D3 3C9E5 3CA07 3CA8D 3CB13 3CB7A 3CBF6 3CD21 3CE42 3CEE1 3CF80 3D01F 3D0BC 3D0D7 3D0F2 3D10D 3D128 3D143 3D1C7 Name xPIXOFF xPIX? xLINE xTLINE xBOX xBLANK xPICT xGOR xGXOR #C5C #C2C #85C #82C xLCD> x>LCD x>GROB xARC #2111 #5B11 xTEXT xXRNG xYRNG xFUNCTION xCONIC xPOLAR xPARAMETRIC xTRUTH xSCATTER xHISTOGRAM xBAR xSAME xAND xOR xNOT xXOR x== x#? x< x> x<=? x>=? xOLDPRT xPR1 xPRSTC xPRST xCR xPRVAR xDELAY

591
Page 466 466 463 473 454 454 466 460 461 20 20 19 19 463 463 460 453 20 20 473 476 476 460 456 466 466 474 461 454 470 453 466 465 475 476 476 476 476 476 476 467 467 456 467 457

592
Addr. 3D1E7 3D202 3D258 3D2B4 3D393 3D3AE 3D3CE 3D434 3D47E 3D503 3D50D 3D51C 3D52B 3D56B 3D605 3D6F6 3D7AC 3D81D 3DA3E 3DA63 3DAD0 3DB04 3DB62 3DBCA 3DBEA 3DC05 3DC20 3DC3B 3DC56 3DC71 3DC8C 3DCA7 3DCC7 3DCE2 3DCFD 3DD18 3DD33 3DD4E 3DD6E 3DD8E 3DDA9 3DDC4 3DDEE 3DE09 3DE24 3DE3F 3DE5A 3DE75 Name xPRLCD x xDER CKSYMBTYPE xRCEQ xSTEQ xROOT x xINTEGRAL xSUM #A110 #AA10 #A1A0 x| xWHERE xQUOTE xAPPLY xFCNAPPLY x->Q x->QPI xMATCHUP xMATCHDN xFORMUNIT xPREDIV xDUP xDUP2 xSWAP xDROP xDROP2 xROT xOVER xDEPTH xDROPN xDUPN xPICK xROLL xROLLD xCLEAR xSTOSIGMA xCLSIGMA xRCLSIGMA xSIGMA+ xSIGMAxNSIGMA xCORR xCOV xSUMX xSUMY Page 467 457 199 468 472 469 462 460 20 20 20 460 468 453 468 468 464 475 468 458 458 473 458 458 469 466 457 458 458 466 469 469 455 472 455 468 460 460 465 456 456 461 461 Addr. 3DE90 3DEAB 3DEC6 3DEE1 3DEFC 3DF17 3DF32 3DF4D 3DF68 3DF83 3DFDD 3DFFD 3E01D 3E03D 3E05D 3E07D 3E09D 3E0BD 3E0DD 3E0FD 3E127 3E156 3E171 3E17B 3E196 3E1CA 3E1EF 3E214 3E239 3E25E 3E283 3E2C1 3E331 3E35B 3E385 3E3AF 3E406 3E46C 3E4D2 3E54C 3E576 3E5A0 3E5E9 3E632 3E648 3E66F 3E696 3E6CA

G. Entries sorted by Address


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 Page 468 472 19 19 16 19 19 167, 472 456 467 464 466 455 473 464 293 468 467 466 453 469 16 Addr. 3EF07 3EF3B 3EF79 3EFB1 3EFEF 3F007 3F033 3F053 3F070 3F0B7 3F0FC 3F11C 3F218 3F22E 3F249 3F264 3F27F 3F29A 3F2B5 3F2DF 3F481 3F495 4EA22 4EA37 4EA4C 4EA61 4EA76 80058 800F5 806FD 8071B 80EDC 80F02 80F5A 81006 860B8 860CC 004002 005002 007002 02E002 070002 072002 073002 074002 075002 076002 077002 Name xSTOKEYS xDELKEYS xRCLKEYS x->TAG xDTAG xINT xANS x; xR>I xI>R xNOVAL xCMDAPPLY xRPL> xUNROT xUNPICK xNIP xPICK3 xDUPDUP xNDUPN xFAST3D COERCE2 UNCOERCE2 %TICKSsec %TICKSmin %TICKShour %TICKSday %TICKSweek NEXTIRQ IRAMBUFF EDITLINE CONTEXT DEPTHSAVE SystemFlags LASTARGCOUNT IOCsave CurROMBank2 FlashROMTAB2 RunChooseSimple sysCHOOSE Ck&DoMsgBox DoAlert Choose2 Choose3 Choose3Save Choose3Index ChooseDefHandler Choose3CANCL Choose3OK

593
Page 472 457 468 473 458 462 453 469 462 465

463 454 457 475 471 466 455 471 463 469 469 459 471 455 454 466 474 463 454 472 470 466 462 454

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 Name SaveHARDBUFF RestoreHARDBUFF DoCKeyOK DoCKeyCancel DoCKeyCheck DoCKeyChAll DoMKeyOK DoKeyCancel DoCKeyUnChAll LEDispItem LEDispList LEDispPrompt DoKeyOK DoKeyEdit GetFieldVals IFEDispField DOTVARS{} ChangeFocus laDELROW laINSROW laGPROW WRAP$ BRdone BRDispItems BRinverse BRViewItem BRGetItem SWAPROWS FSTR1 FSTR2 FSTR3 FSTR4 FSTR5 FSTR6 FSTR7 FSTR8 FSTR9 FSTR10 FSTR11 FSTR12 FSTR13 algparse algunwrap EQW3 EQW3Edit EQW3StartEdit EQW3ViewMargin EQW3ViewLeftX Page 234 234 244 244 244 244 Addr. 015004 016004 017004 018004 019004 01A004 01B004 01C004 01D004 01E004 01F004 020004 021004 022004 023004 024004 025004 026004 027004 028004 029004 02A004 02B004 02C004 02D004 02E004 02F004 030004 031004 032004 033004 034004 035004 036004 037004 038004 039004 03A004 03B004 03C004 03D004 03F004 040004 041004 042004 043004 044004 045004

G. Entries sorted by Address


Name EQW3ViewRightX EQW3ViewLeft EQW3ViewRight EQW3ViewRightRPL EQW3GROB EQW3GROBStk EQW3CursorOn EQW3CursorOff EQW3Code EQW3GROBsys EQW3GROBmini IfMain IfSetFieldVisible IfSetSelected IfSetGrob IfSetFieldValue
IfSetCurrentFieldValue

Page

98 98

244 245 245 244

169

IfGetFieldValue
IfGetCurrentFieldValue IfGetFieldMessageHan..

IfGetFieldType
IfGetFieldObjectsType IfGetFieldDecompObject IfGetFieldChooseData IfGetFieldChooseDecomp IfGetFieldResetValue IfSetFieldResetValue IfGetFieldInternalVa..

48

344 54 54 54 54 54 55 55

55

311

IfDisplayFromData IfGetNbFields IfCheckSetValue IfCheckFieldtype IfReset IfSetField IfKeyChoose IfKeyEdit IfKeyTypes IfKeyCalc IfKeyInvertCheck IfONKeyPress IfEnterKeyPress IfSetHelpString IfSetTitle IfSetTitle2 IfMain2
IfPutFieldsOnStack

98 98 257 258 258 258 258 258 258 258 258 258 258 258 258 259 259 259 259 259 259 259 259 259 259 259 260 260 260 260 260 260 260 260 261 261 261 261

IfSetFieldPos IfGetFieldPos

088002 0DD006
Addr. 046004 047004 048004 049004 04A004 04B004 04C004 04D004 04E004 067004 068004 069004 06D004 06E004 06F004 070004 08E006 08F006 090006 091006 092006 093006 094006 095006 096006 097006 098006 099006 09A006 09B006 09C006 09D006 09E006 09F006 0A0006 0A1006 0A2006 0A3006 0A4006 0A5006 0A6006 0A7006 0A8006 0A9006 0AA006 0AB006 0AC006 0AD006 Name
IfDisplayFromData2 IfSetAllLabelsMessages IfSetAllHelpStrings

595
Page 261 261 261 259 261 188 Addr. 0AE006 0AF006 0B0006 0B1006 0B2006 0B3006 0B4006 0B5006 0B6006 0B7006 0B8006 0B9006 0BA006 0BB006 0BC006 0BD006 0BE006 0BF006 0C0006 0C1006 0C2006 0C3006 0C4006 0C5006 0C6006 0C7006 0C8006 0C9006 0CA006 0CB006 0CC006 0CD006 0CE006 0CF006 0D0006 0D1006 0D2006 0D3006 0D4006 0D5006 0D6006 0D7006 0D8006 0D9006 0DA006 0DB006 0DC006 0DD006 Name PHFctr PHFctr1 PHFctr0 DeCntMulti DoLS PNFctr PSQFF LiftZAdic LFCProd UFactor UFactor1 MonicLf DemonicLf LiftLinear LiftGeneral UFactorDeg2 CombineFac CombProd CombInit CombNext RmCombNext PFactTriv VarFactor PFactPowCnt PDivLk Prime+ PrimeZFactor NFactor NFactorSpc DupTypeS? SFactor SPollard BFactor BrentPow ZPrime? ZIsPrime? SIsPrime? BIsPrime? BRabin ZTrialDiv2 ZTrialPrime? ZTrialDiv QMod QMODSYMext ModPow ZQUOText ZMod Page 374 374 374 375 375 375 375 375 375 375 375 375 375 376 376 376 376 376 376 376 376 376 376 377 377 332 332 330 330 330 335 330 331 331 331 331 331 331 332 332 332 332 332 372

IfCreateTitleGrob IfInitDepth IfTet


IfGetPrlgFromTypes IsUncompressDataString

KeyLookup Filer Arbo RENAME FILER_MANAGER FILER_MANAGERTYPE FontBrowser BrowseMem.1 BerlekampP Berlekamp ErrInfRes ErrUndefRes ErrBadDim ALG48MSOLV GMSOLV GBASIS GSOLVE GFACTOR GREDUCE REDUCE FASTREDUCE ONE{}POLY TWO{}POLY THREE{}POLY TWO::POLY ::POLY {}POLY >TPOLY >HPOLY >TPOLYN >HPOLYN MKPOLY ONE>POLY >POLY ALG48FCTR? MFactTriv CheckPNoExt PPP PFactor PSqff

188 188

373 373 403 403 403 384 384 384 384 384 384 384 377 377 377 377 377 377 377 378 378 378 378 378 377 374 374 374 374 374 374

329

596
Addr. 0DE006 0DF006 0E0006 0E1006 0E2006 0E3006 0E4006 0E5006 0E6006 0E7006 0E8006 0E9006 0EA006 0EB006 0EC006 0ED006 0EE006 0EF006 0F0006 0F1006 0F2006 0F3006 0F4006 0F5006 0F6006 0F7006 0F8006 0F9006 0FA006 0FB006 0FC006 0FD006 0FE006 0FF006 100006 101006 102006 103006 104006 105006 106006 107006 108006 109006 10A006 10B006 10C006 10D006 Name ZDIVext QRoot ZSQRT PEvalMod QAddMod QSubMod QMulMod QDivMod QInvMod QGcdMod QGcdExMod IsV>V? PEvalFast? PZadic GCDHEUext H>Z #>Z Z2BIN COERCE2Z Z>S S>Z S>Z? Z>ZH R>Z Z>R DupQIsZero? QIsZero? DupZIsOne? ZIsOne? DupZIsNeg? ZIsNeg? ListPos AppendList Contains? SortList ZTrim ZAbs PNMax LISTMAXext ZNMax ZNMin ZNLT? DISTDIVext DupZIsTwo? DupZIsEven? Univar? SUnivar? ZBits Page Addr. 10E006 10F006 110006 111006 112006 113006 114006 115006 116006 117006 118006 119006 11A006 11B006 11C006 11D006 11E006 11F006 120006 121006 122006 123006 124006 125006 126006 127006 128006 129006 12A006 12B006 12C006 12D006 12E006 12F006 130006 131006 132006 133006 134006 135006 136006 137006 138006 139006 13A006 13B006 13C006 13D006

G. Entries sorted by Address


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 xext 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

329 395 395 395 395 395 395 396 399 380 399 399 328 327 22 22 46 328 328 328 327 31 334 334 334 334 334 334 69 73 137 73 329 329 379 399 329 329 334 372 334 334 380 380 329

372 372 423 372 422 347 347 347 350 347 72, 325 347 347 362 362 362 363 363 363 363 363 363

0DE006 19D006
Addr. 13E006 13F006 140006 141006 142006 143006 144006 145006 146006 147006 148006 149006 14A006 14B006 14C006 14D006 14E006 14F006 150006 151006 152006 153006 154006 155006 156006 157006 158006 159006 15A006 15B006 15C006 15D006 15E006 15F006 160006 161006 162006 163006 164006 165006 166006 167006 168006 169006 16A006 16B006 16C006 16D006 Name xssSYM#? addt% xssSYM% addt%CH xssSYM%CH addt%T xssSYM%T addtMOD xssSYMMOD addtTRNC xssSYMTRCXY addtRND xssSYMRNDXY addtCOMB xssSYMCOMB addtPERM xssSYMPERM addtOR xssSYMOR addtAND xssSYMAND addtXOR xssSYMXOR 2LAMBIND 3LAMBIND SYMBINCOMP CKINNERCOMP DUPCKLEN{} CKCARCOMP CARCOMPext RISCH13 CXRIext RIXCext IRXCext IRXC2 SWAPNDXF NDXFext SWAPFXND FXNDext QXNDext NDXQext TYPEIRRQ? DTYPEIRRQ? BESTMATRIXTYPE {}TO[] []TO{} DUPNULL[]? MDIMS Page 363 363 363 363 363 363 363 363 363 363 363 116 116 72, 325, 359 72 72 73 372 387 333 37 37 379 379 380 380 421 421 326, 421 326, 421 65 338 338 339 64 Addr. 16E006 16F006 170006 171006 172006 173006 174006 175006 176006 177006 178006 179006 17A006 17B006 17C006 17D006 17E006 17F006 180006 181006 182006 183006 184006 185006 186006 187006 188006 189006 18A006 18B006 18C006 18D006 18E006 18F006 190006 191006 192006 193006 194006 195006 196006 197006 198006 199006 19A006 19B006 19C006 19D006 Name DIMLIMITS CKSAMESIZE DTYPENDO? DTYPFMAT? CKNUMARRY 2DMATRIX? MATRIXDIM SAMEMATRIX SAMEMATSCTYPE CKMATRIXELEM MATRIX2ARRAY MATRIX2LIST LIST2MATRIX LENMATRIX XEQARRY> MATEXPLODE ARRAY2MATRIX XEQ>ARRY XEQ>ARRAY1 CKALG TYPEZ? DUPTYPEZ? CK1Z CK2Z CK3Z CK1Cext C2C%% ZZ2C%%ext Z2%% C%>C%% E%%>C%% R2Zext Z2Sext CKFPOLYext CK2FPOLY IDNTLAM? FLOAT? CKSYMREALCMP TYPEIDNTLAM? REAL? TYPEREALZINT? OBJ2REAL METAINT? METAPOSINT? OBJINT? OBJPOSINT? CKINT>0 Z>#

597
Page 64 339 339 201 65 339 341 338 338 326 65 338 338 343 65 339 338 65 201 200 200 198, 328 198, 328 198, 328 201, 333 37 37 31 37 37 328 328 326 326 201 201 201 199 201 201 31 78, 334 78, 334 334 334 334 22

598
Addr. 19E006 19F006 1A0006 1A1006 1A2006 1A3006 1A4006 1A5006 1A6006 1A7006 1A8006 1A9006 1AA006 1AB006 1AC006 1AD006 1AE006 1AF006 1B0006 1B1006 1B2006 1B3006 1B4006 1B5006 1B6006 1B7006 1B8006 1B9006 1BA006 1BB006 1BC006 1BD006 1BE006 1BF006 1C0006 1C1006 1C2006 1C3006 1C4006 1C5006 1C6006 1C7006 1C8006 1C9006 1CA006 1CB006 1CC006 1CD006 Name CLEANIDLAM ssSYMDER SYMDER DERIVext siSYMDER DERIVIDNT DERIVIDNT1 DERIV METADERIV DO>STRID METADEROP METADER+ METADERMETADER* METADER/ METADER METADERFCN METADERDER METADERI4 METADERI3 METADERIFTE DERARG METADEREXP METADERLN METADERLNP1 METADERLOG METADERALOG METADERABS METADERINV METADERNEG METADERSQRT METADER&NEG METADERSQ METADERSIN METADERCOS METADERTAN METADERSINH METADERCOSH METADERTANH METADERASIN METADERACOS METADERATAN METADERASH METADERACH METADERATH pshder* SQRTINVpshd* ckaddt* Page 326 Addr. 1CE006 1CF006 1D0006 1D1006 1D2006 1D3006 1D4006 1D5006 1D6006 1D7006 1D8006 1D9006 1DA006 1DB006 1DC006 1DD006 1DE006 1DF006 1E0006 1E1006 1E2006 1E3006 1E4006 1E5006 1E6006 1E7006 1E8006 1E9006 1EA006 1EB006 1EC006 1ED006 1EE006 1EF006 1F0006 1F1006 1F2006 1F3006 1F4006 1F5006 1F6006 1F7006 1F8006 1F9006 1FA006 1FB006 1FC006 1FD006

G. Entries sorted by Address


Name ckaddt+ ckaddtVERNUMext 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

387 388 388 388 388 54 388 388 388 388 388 388 388 388 388 388 390 388 388 388 389 389 389 389 389 389 388 389 389 389 389 389 389 389 389 389 389 389 389 390 390 390 361

19E006 25D006
Addr. 1FE006 1FF006 200006 201006 202006 203006 204006 205006 206006 207006 208006 209006 20A006 20B006 20C006 20D006 20E006 20F006 210006 211006 212006 213006 214006 215006 216006 217006 218006 219006 21A006 21B006 21C006 21D006 21E006 21F006 220006 221006 222006 223006 224006 225006 226006 227006 228006 229006 22A006 22B006 22C006 22D006 Name FLAGATAN2S FLAGASIN2T FLAGASIN2C FLAGACOS2S CK&CONVINT CK&CONV2INT CONVBACK2INT CONVBACKINT STEPIDIV2 FLAGDIV2 FLAGGCD PEGCD IEGCD ABCUV IABCUV FLAGLGCD FLAGLCM FLAGSIMP2 FLAGPARTFRAC FLAGPROPFRAC FLAGPTAYL FLAGHORNER EULER PA2B2 FLAGCHINREM ICHINREM ISPRIME SOLVE1EQ SOLVEMANYEQ ZEROS1EQ ZEROSMANYEQ FCOEF FROOTS FACTORS DIVIS STUDMULT STUDDIV rref FLAGQXA FLAGAXQ FLAGGAUSS FLAGSYLVESTER PCAR MADNOCK SYSTEM VANDERMONDE HILBERTNOCK FLAGJORDAN Page 413 413 413 413 328 328 328 328 413 413 413 414 414 414 414 414 414 414 414 414 414 414 330 414 414 411 414 414 414 415 415 415 415 415 Addr. 22E006 22F006 230006 231006 232006 233006 234006 235006 236006 237006 238006 239006 23A006 23B006 23C006 23D006 23E006 23F006 240006 241006 242006 243006 244006 245006 246006 247006 248006 249006 24A006 24B006 24C006 24D006 24E006 24F006 250006 251006 252006 253006 254006 255006 256006 257006 258006 259006 25A006 25B006 25C006 25D006 Name CURL DIVERGENCE LAPLACIAN HESSIAN HERMITE TCHEBNOCK LEGENDRE LAGRANGE FOURIER SIGNE TABVAR FLAGDIVPC FLAGTRUNC FLAGSEVAL XNUM REORDER USERLVAR USERLIDNT EXLR ADDTMOD MADDTMOD SUBTMOD MSUBTMOD MULTMOD MAT*SCMOD SC*MATMOD MAT*MATMOD DIVMOD GCD1MOD INVMOD MINVMOD FLAGDIV2MOD FLAGPOWMOD FLAGMPOWMOD EXPAMOD FLAGEXPAMOD FLAGFACTORMOD MFACTORMOD RREFMOD KEYEVAL LIFCext EvalNoCKx* EvalNoCKx+ EvalNoCKxEvalNoCKx/ EvalNoCKx EvalNoCKxCHS EvalNoCKxINV

599
Page 415 415 415 415 415 415 415 415 415 400 415 416 416 416 416 416 416 416 356 416 416 416 416 416

415 345 346 346 346 346 415 415 415 415 345

395 395 208 395 417 417 417 417 417 417 417

600
Addr. 25E006 25F006 260006 261006 262006 263006 264006 265006 266006 267006 268006 269006 26A006 26B006 26C006 26D006 26E006 26F006 270006 271006 272006 273006 274006 275006 276006 277006 278006 279006 27A006 27B006 27C006 27D006 27E006 27F006 280006 281006 282006 283006 284006 285006 286006 287006 288006 289006 28A006 28B006 28C006 28D006 Name EvalNoCKxMOD EvalNoCKxPERM EvalNoCKxCOMB EvalNoCKxOR EvalNoCKxAND EvalNoCKxXOR EvalNoCKxXROOT TABVALext TOLISText FROMLISText PFEXECext LOP1ext LOPAext LISTSECOext rpnQOBJext CK1TONOext COLCext SYMCOLCT COLC1 COLC2 MULMULText METAMULMULT METAMM2 COMPLISText METACOMPRIM METACOMP0 METACOMP1 ADDLISText DIVISext FACT1ext FACTOext ZFACTO SOLVext FRND BICARREE? REALBICAR FEVIDENText EVIDENText EVIDSOLV DEG2ext METADEG2 METADEG1 DEG1 FDEG2ext PIext RACTOFACext FACTORACext RFACText Page 417 418 418 418 418 418 418 418 418 418 421 421 421 421 423 421 355 Addr. 28E006 28F006 290006 291006 292006 293006 294006 295006 296006 297006 298006 299006 29A006 29B006 29D006 29E006 29F006 2A0006 2A1006 2A2006 2A3006 2A4006 2A5006 2A6006 2A7006 2A8006 2A9006 2AA006 2AB006 2AC006 2AD006 2AE006 2AF006 2B0006 2B1006 2B2006 2B3006 2B4006 2B5006 2B6006 2B7006 2B8006 2B9006 2BA006 2BB006 2BC006 2BD006 2BE006

G. Entries sorted by Address


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

381 381 381 381 381 381 381 381 381 381 382 382 382 382 377 382 382 382 382 382 382 382 73 383 383 383

358 358 358 333 424 329 329 354 354 355 68 424 424

25E006 31E006
Addr. 2BF006 2C0006 2C1006 2C2006 2C3006 2C4006 2C5006 2C6006 2C7006 2C8006 2C9006 2CA006 2CB006 2CC006 2CD006 2CE006 2CF006 2D0006 2D1006 2D2006 2D3006 2D4006 2D5006 2D6006 2D7006 2D8006 2D9006 2DA006 2DB006 2DC006 2DD006 2DE006 2DF006 2E0006 2E1006 2E2006 2E3006 2E4006 2E5006 2E6006 2E7006 2E8006 2E9006 2EA006 2EB006 2EC006 2ED006 2EE006 Name PZHSTR HORNER1ext PEval RISCHext risch/ rischABS IBP SQRT_IN? IS_SQRT? XROOT_IN? IS_XROOT? STOPRIMIT CONTAINS_LN? ISNT_IDNT? RISCHPF RISCHRAT rischlogpart PREVALext WARNSING INText INT3 FOURIERext 3DUP #3+ROLL 2DROPTRUE IRRQ#ULTIMATE LESSCOMPLEX? LISTIRRQ LIST1i-1-i LIST10-10 TABLECOSext TABLETANext DROPZ1 DROPZ0 TESTINFINI INFINIext MINUSINFext PLUSINFext ?ext POSINFext POSUNDEFext pisur2 pisur-2 pi metapi 'xPI metai 'xi Page 424 424 424 Addr. 2EF006 2F0006 2F1006 2F2006 2F3006 2F4006 2F5006 2F6006 2F7006 2F8006 2F9006 2FA006 2FB006 2FC006 2FD006 2FE006 2FF006 300006 301006 302006 303006 304006 305006 306006 307006 308006 309006 30A006 30B006 30C006 30D006 30E006 30F006 310006 311006 312006 313006 314006 315006 316006 317006 318006 319006 31A006 31B006 31C006 31D006 31E006 Name ipi metaipi meta-pi metapi/2 metapi/4 meta-pi/2 meta-pi/4 pifois2 deuxipi metapi*2 base_ln meta_e NEXTPext INSERT{}N COMPRIMext TCOLLECT SIGMAEXPext LINEXPext SIGMAEXP2ext TCHEBext SINEXPA METASINEXPA SINEXPA+ SINEXPASINEXPA* SINEXPA*1 COSEXPA METACOSEXPA COSEXPA+ COSEXPACOSEXPA* COSEXPA*1 EXPEXPA METAEXPEXPA EXPEXPA+ EXPEXPAEXPEXPA* EXPEXPANEG EXPEXPA*1 LNEXPA METALNEXPA LNEXPA* LNEXPA/ LNEXPA LINEXPA MTRIG2SYMB LNCOLCext METATANEXPA

601
Page 420 420 420 420 420 420 420 420 420 420 420 420 72 72 73 355 355 355 355 378 355 368 368 368 369 369 355 369 369 369 369 369 355 369 369 369 369 369 369 355 369 369 369 369 355 355 355 369

390 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

602
Addr. 31F006 320006 321006 322006 323006 324006 325006 326006 327006 328006 329006 32A006 32B006 32C006 32D006 32E006 32F006 330006 331006 332006 333006 334006 335006 336006 337006 338006 339006 33A006 33B006 33C006 33D006 33E006 33F006 340006 341006 342006 343006 344006 345006 346006 347006 348006 349006 34A006 34B006 34C006 34D006 34E006 Name TEXPAext MAT+ MADD MATMSUB VADD VSUB MAT* MMMULT MVMULT SCL*MAT MAT*SCL VPMULT MAT MATCROSS MATDOT RNDARRY TRCARRY Yext MAT/SCL MAT/ MATCHS MATSQUARE MATCONJ MATRE MATIM MATTRACE MATTRN MATTRAN mattran mattrn MATSUB submeta MATREPL MATREDIM VRRDM VRRDMmeta MATRANM DIMRANM MATDET MATRDET MATFNORM MATRNORM MATCNORM MATRREF MATREF MATRANK MATINV Page 356 339 339 339 339 339 339 339 339 339 339 339 339 340 340 340 340 340 65 340 340 340 340 340 340 340 340 340 65 340 340 343 78 343 337 338 338 337 337 340 340 340 340 340 341 341 341 340 Addr. 34F006 350006 351006 352006 353006 354006 355006 356006 357006 358006 359006 35A006 35B006 35C006 35D006 35E006 35F006 360006 361006 362006 363006 364006 365006 366006 367006 368006 369006 36A006 36B006 36C006 36D006 36E006 36F006 370006 371006 372006 373006 374006 375006 376006 377006 378006 379006 37A006 37B006 37C006 37D006 37E006

G. Entries sorted by Address


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 xssSYMPage 345 345 345 345 346 346 78 359 359 359 359 359 359 359 360 360 360 360 76 327 360 360 361 361 361 360 361 370 362 360 360 360 78 367 367 367 368 367 368 368 368 368 368 368 360 361 Addr. 3AF006 3B0006 3B1006 3B2006 3B3006 3B4006 3B5006 3B6006 3B7006 3B8006 3B9006 3BA006 3BB006 3BC006 3BD006 3BE006 3BF006 3C0006 3C1006 3C2006 3C3006 3C4006 3C5006 3C6006 3C7006 3C8006 3C9006 3CA006 3CB006 3CC006 3CD006 3CE006 3CF006 3D0006 3D1006 3D2006 3D3006 3D4006 3D5006 3D6006 3D7006 3D8006 3D9006 3DA006 3DB006 3DC006 3DD006 3DE006 Name MetaMul xssSYM* MetaDiv xssSYM/ NDROPZ0 NDROPZ1 MetaPow xssSYM MetaNeg xSYMCHS metaneg metackneg metasimp metapi? metaCOMPARE STRICTmetaCOMPARE EQUALPOSMETA EQUALPOS2META vgerxssSYMSUM DISTRIB/ metareal? ModExpa ModAdd ModSub ModMul ModDiv ModDiv2 ModInv ModGcd ModLGCD ModLOPD MODULOMODext MODULOMAText Mod ModFctr PARTFRAC INPARTFRAC PARTFRACRAT PFext IEGCDext REGCDext EGCDext INEGCD EGCDSWAP EGCDNEWG PDer INTEGRext LRDMext

603
Page 361 361 327 327 362 362 362 362 368 370 370 370 78 78 394 368 370 372 372 373 373 373 373 373 373

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 Name RRDMext DEGREext FHORNER HORNext HORN1 MHORNext PTAYLext LAGRANGEext PSEUDOPREP PSEUDODIV IDIV2 BESTDIV2 CDIV2ext QUOText NEWDIVext QDivRem DIV2LISText DIVOBJext DIVMETAOBJ LOPDext QUOTOBJext DIVISIBLE? QDiv? FastDiv? POTENCEext PDIV2ext PSetSign PLCZ HSECO2RCext SECO2CMPext SECO2CMPPOL SECO2CMPCART VALOBJext R2SYM VAL2ext INVAL2 METAVAL2 VAL1 VAL1M addt0meta HALFTAN COS2TAN/2 cos2tan/2 1-x2/1+x2 SIN2TAN/2 sin2tan/2 2x/1+x2 TAN2TAN/2 Page 378 378 378 378 378 372 379 422 357 357 357 357 372 372 420 88, 361 420 357 357 357 357 358 372 372 422 422 Addr. 40F006 410006 411006 412006 413006 414006 415006 416006 417006 418006 419006 41A006 41B006 41C006 41D006 41E006 41F006 420006 421006 422006 423006 424006 425006 426006 427006 428006 429006 42A006 42B006 42C006 42D006 42E006 42F006 430006 431006 432006 433006 434006 435006 436006 437006 438006 439006 43A006 43B006 43C006 43D006 43E006

G. Entries sorted by Address


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-sin2 SIN2ext sqrt1-cos2 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

423 325 423 423 423 423 423 77 356 351 365 365 351 365 365 351

3DF006 49F006
Addr. 43F006 440006 441006 442006 443006 444006 445006 446006 447006 448006 449006 44A006 44B006 44C006 44D006 44E006 44F006 450006 451006 452006 453006 454006 455006 456006 458006 459006 45A006 45B006 45C006 45D006 45E006 45F006 460006 461006 462006 463006 464006 465006 466006 467006 468006 469006 46A006 46B006 46C006 46D006 46E006 46F006 Name TAN2SC2ext TAN2SC2 2*1-cos/sin TAN2CS2 2*sin/1+cos SIN2EXPext sin2exp COS2EXPext cos2exp SINH2EXPext sinh2exp COSH2EXPext cosh2exp TANH2EXPext tanh2exp ASINH2LNext asinh2ln ACOSH2LNext acosh2ln ATANH2LNext atanh2ln XROOT2ext xroot2expln LN2ext exp2sincos metai* LN2ATAN VAR=LIST IDNTEXEC SYMISOL SYMQFORM LISTEXEC LISTEXEC1 SECOEXEC EQUATION? USERFCN? SYMBEXEC MEVALext CASNUMEVAL CASCOMPEVAL REPLACE2BY1 NR_REPLACE SYMBWHERE CASCRUNCH APPROXCOMPEVAL LIMIText REWRITEIFINF SYMTAYLOR Page 357 352 366 352 367 352 367 352 367 352 367 352 367 352 367 352 367 352 367 352 367 352 367 357 367 360 352 353 423 Addr. 470006 471006 472006 473006 474006 475006 476006 477006 478006 479006 47A006 47B006 47C006 47D006 47E006 47F006 480006 481006 482006 483006 484006 485006 486006 487006 488006 489006 48A006 48B006 48C006 48D006 48E006 48F006 490006 491006 492006 493006 494006 495006 496006 497006 498006 499006 49A006 49B006 49C006 49D006 49E006 49F006 Name SYMPAPRX TRUNCDL LIMSERIES! LIMITX! LIMITNOVX! LIMERR0! LIMERR1! LIMIT! LIMSTEP1! LIMSTEP2! LIMSTEP3! LIMSTEP4! LIMLIM! n{}N LIMLIM1! LIMCMPL! LIMEQUFR! LIMEQU! LIMEQU0! LIM+-! LIMERR10! LIMNEG! LIMRAC! LIMINV! LIM/! LIMPOW! LIMSQ! LIM*! LIMDIVPC! DIVPC! LIMPROFEND! LIMPROF! LIM%#! LIMPROF0! LIMPROF1! LIMPROF2! LIMINVLN! LIMLN! LIMEXP! LIMSINCOS! LIMATAN! LIMASIN! LIMSQRT! LIMFLOOR! LIMABS! LPROF! LIM#VARX! LIMBETA!

605
Page 386 386

386 386

386

386 386 386 387

387 387 387

421 421 421 86 86 353 353 353 353 353 353 353 353

387

386

606
Addr. 4A0006 4A1006 4A2006 4A3006 4A4006 4A5006 4A6006 4A7006 4A8006 4A9006 4AA006 4AB006 4AC006 4AD006 4AE006 4AF006 4B0006 4B1006 4B2006 4B3006 4B4006 4B5006 4B6006 4B7006 4B8006 4B9006 4BA006 4BB006 4BC006 4BD006 4BE006 4BF006 4C0006 4C1006 4C2006 4C3006 4C4006 4C5006 4C6006 4C7006 4C8006 4C9006 4CA006 4CB006 4CC006 4CD006 4CE006 4CF006 Name LIMALPHA! HORNEXP! HORNCOS! HORNSIN! LIMSC0! LIMSC1! HORNATAN! LIMATAS! HORNASIN! HORNASIN1! HORNLN! LNOBJ! NEWLIMHORN LIMHORN! LRDM! LIMDL! LIMDLINF! LIMINFSIGN! LIMMAX! LIMCOMP! VARCOMP2! LIMSORT! VARCOMP! VARCOMPLN! VARCOMP3! VARCOMP31! VARCOMP32! VARCOMP33! LIMERR6! LIMVALOBJ! LIMVAL! EQUIV! LVARXNX2! SIMP1! FindCurVar LIMVAR! VAR% ISOL1 ISOLALL ISOL2ext BEZOUTMSOLV ROOT{}N MHORNER MHORNER1 SQFFext MSQFF %1TWO MZSQFF Page 387 Addr. 4D0006 4D1006 4D2006 4D3006 4D4006 4D5006 4D6006 4D7006 4D8006 4D9006 4DA006 4DB006 4DC006 4DD006 4DE006 4DF006 4E0006 4E1006 4E2006 4E3006 4E4006 4E5006 4E6006 4E7006 4E8006 4E9006 4EA006 4EB006 4EC006 4ED006 4EE006 4EF006 4F0006 4F1006 4F2006 4F3006 4F4006 4F5006 4F6006 4F7006 4F8006 4F9006 4FA006 4FB006 4FC006 4FD006 4FE006 4FF006

G. Entries sorted by Address


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

387

387

387 387 387 387 387 387 396 396 396 396 396 396 396 396 396 396 396

4A0006 55F006
Addr. 500006 501006 502006 503006 504006 505006 506006 507006 508006 509006 50A006 50B006 50C006 50D006 50E006 50F006 510006 511006 512006 513006 514006 515006 516006 517006 518006 519006 51A006 51B006 51C006 51D006 51E006 51F006 520006 521006 522006 523006 524006 525006 526006 527006 528006 529006 52A006 52B006 52C006 52D006 52E006 52F006 Name RIMext xREext xSYMRE xIMext xSYMIM RCONJext addtCONJ xSYMCONJ QCONJext QABSext RABSext ZABS CZABS xABSext addtABS xSYMABS addtABSEXACT addtSIGN xSYMSIGN addtARG xSYMARG ARG2 INTERNALARG2 QUADRANT CNORMext CXIRext QNORMext SXSQRext XSQRext CK%%SQRT C%%SQRT ZINTSQRT SHALT CKLN xLNext addtLN xSYMLN EXPANDLN CMPLXLN LNATANext REALLN xEXPext xINVext xvext xCOSext xSINext xTANext xCOSHext Page 348 348 362 348 362 348 363 422 422 348 329 37 348 362 362 362 362 38 38 333 422 348 348 34 38 Addr. 530006 531006 532006 533006 534006 535006 536006 537006 538006 539006 53A006 53B006 53C006 53D006 53E006 53F006 540006 541006 542006 543006 544006 545006 546006 547006 548006 549006 54A006 54B006 54C006 54D006 54E006 54F006 550006 551006 552006 553006 554006 555006 556006 557006 558006 559006 55A006 55B006 55C006 55D006 55E006 55F006 Name xSINHext xTANHext xASINext xACOSext xATANext addtCOS xSYMCOS addtSIN xSYMSIN addtTAN xSYMTAN addtSINACOS addtASIN xSYMASIN addtACOS xSYMACOS addtATAN xSYMATAN addtSINH xSYMSINH addtCOSH xSYMCOSH addtTANH xSYMTANH xATANHext addtATANH xSYMATANH xASINHext addtASINH xSYMASINH xACOSHext addtACOSH xSYMACOSH addtSQRT xSYMSQRT xSQext addtSQ xSYMSQ addtINV xSYMINV addtEXP xSYMEXP addtD->R xSYMD>R addtR->D xSYMR>D addtFLOOR xSYMFLOOR

607
Page 350 350 349 349 349 363 349 364 349 364 349 364 364 349 364 349 364 349 364 350 364 349 364 350 350 364 350 350 364 350 349 364 350 364 348 348 364 348 364 348 364 364 364 365 365 350

348 349 363 349 349 349 349 349 348 348 349 349 349 349

608
Addr. 560006 561006 562006 563006 564006 565006 566006 567006 568006 569006 56A006 56B006 56C006 56D006 56E006 56F006 570006 571006 572006 573006 574006 575006 576006 577006 578006 579006 57A006 57B006 57C006 57D006 57E006 57F006 580006 581006 582006 583006 584006 585006 586006 587006 588006 589006 58A006 58B006 58C006 58D006 58E006 58F006 Name addtCEIL xSYMCEIL addtIP xSYMIP addtFP xSYMFP addtXPON xSYMXPON addtMANT xSYMMANT addtLNP1 xSYMLNP1 addtLOG xSYMLOG addtALOG xSYMALOG addtEXPM xSYMEXPM1 factorial facts addtFACT xSYMFACT factzint addtNOT xSYMNOT Verbose1 Verbose2 Verbose3 VerboseN GETERABLEMSG ERABLEERROR CANTFACTOR TRANSCERROR NONUNARYERR INTERNALERR INVALIDOP ISOLERR NONINTERR INTVARERR Z>#ERR Z<0ERR VXINDEPERR NONPOLYSYST COMPLEXERR VALMUSTBE0 SWITCHNOTALLOWED ERR$EVALext Sys1IT Page 365 350 365 350 365 350 365 350 365 350 365 350 365 350 365 350 365 350 350 350 365 350 330 365 350 417 417 417 417 403 403 403 403 403 403 403 404 404 404 404 404 404 404 404 404 404 404 404 Addr. 001007 002007 003007 004007 005007 006007 007007 008007 009007 00A007 00B007 00C007 00D007 073007 074007 075007 076007 077007 078007 079007 07A007 07B007 07C007 07D007 07E007 07F007 080007 081007 082007 083007 084007 085007 086007 087007 088007 089007 08A007 08B007 08C007 08D007 08E007 08F007 090007 091007 092007 093007 094007 095007

G. Entries sorted by Address


Name ListToArry ArryToMatrix ArryToList DIMS RunDoOldMatrix RunDoNewMatrix DoNewMatrixReal DoNewMatrixCplx DoOldMatrixReal DoOldMatrixCplx
DoNewMatrixRealOrCplx

Page 65 65 338

DEB.MATRIX DEB.MATRIXTYPE QpiZ QPI QpiSym QpiArry QpiList Qpi Qpi% GetRoot Approx #FACT CHECKSING DESOLVE ODE_INT LINSOLV LDECSOLV LDEGENE LDEPART LDSSOLVext ODETYPESTO ODE_SEPAR LAPext ILAPext ILAPRAText ILAPDELTA ILAPEXP ILAPEXPSC MENUext WRITEMENU CFGDISPLAY NEWVX NEWMODULO SWITCHON SWITCHOFF FLAGNAME COMPLEXON

418 418 419 419 419 419 419 419 419 330 402 391 390 342 391 391 391 391 391 392 392 392

392 409 293 405 405 405 405 405 405 406

560006 0F5007
Addr. 096007 097007 098007 099007 09A007 09B007 09C007 09D007 09E007 09F007 0A0007 0A1007 0A2007 0A3007 0A4007 0A5007 0A6007 0A7007 0A8007 0A9007 0AA007 0AB007 0AC007 0AD007 0AE007 0AF007 0B0007 0B1007 0B2007 0B3007 0B4007 0B5007 0B6007 0B7007 0B8007 0B9007 0BA007 0BB007 0BC007 0BD007 0BE007 0BF007 0C0007 0C1007 0C2007 0C3007 0C4007 0C5007 Name COMPLEXOFF EXACTON EXACTOFF COMPLEXMODE SETCOMPLEX COMPLEX? REALMODE CLRCOMPLEX EXACTMODE SETEXACT NUMMODE CLREXACT EXACT? STEPBYSTEP NOSTEPBYSTEP VERBOSEMODE SILENTMODE RECURMODE NONRECMODE PLUSAT0 SETPLUSAT0 PLUSATINFTY CLRPLUSAT0 SPARSEDATA FULLDATA RIGORMODE SLOPPYMODE SLOPPY? MENUCHOOSE? MENUCHOOSE MENUGENE1 MENUBASE1 MENUCMPLX1 MENUTRIG1 MENUMAT1 MENUARIT1 MENUSOLVE1 MENUEXPLN1 MENUDIFF1 PROMPTSTO1 XGROBext GROBADDext DISPLAYext SCROLLext RCLMODULO RCLPERIOD RCLVX STOVX Page 406 406 406 406 406 406 406 406 406 406 406 406 406 407 407 407 407 407 407 407 407 407 407 407 407 407 407 408 409 409 409 409 409 409 409 409 410 410 410 167 98 92 98 281 408 408 408 408 Addr. 0C6007 0C7007 0C8007 0C9007 0CA007 0CB007 0CC007 0CD007 0CE007 0CF007 0D0007 0D1007 0D2007 0D3007 0D4007 0D5007 0D6007 0D7007 0D8007 0D9007 0DA007 0DB007 0DC007 0DD007 0DE007 0DF007 0E0007 0E1007 0E2007 0E3007 0E4007 0E5007 0E6007 0E7007 0E8007 0E9007 0EA007 0EB007 0EC007 0ED007 0EE007 0EF007 0F0007 0F1007 0F2007 0F3007 0F4007 0F5007 Name STOMODULO RCLEPS ISIDREAL? ADDTOREAL RESETCASCFG FRACPARITY POLYPARITY PARITYTEST COSTEST SHRINKEVEN SINTEST SHRINK2SYM SHRINKSYM SHRINK2ASYM SHRINKASYM FR2ND% POLYSYM POLYASYM P2P# NDEvalN/D PEvalN/D POSITIFext SIGNE1ext SIGNEext SIGNUNDEF SIGNPLUS SIGNMOINS SIGNELN SIGNEEXP SIGNESIN SIGNECOS SIGNETAN SIGNEATAN SIGNESQRT SUBSIGNE SIGNERIGHT SIGNELEFT >SIGNE SIGNE> SIGNMULText ZSIGNECK SIGNEERROR ZSIGNE zsigne PASCAL_NEXTLINE DELTAPSOLVE SOLVEMETASYST REDUCEMETASYST

609
Page 408 408 408 408 408 425 380

379 379 379 379 379 425 380 380 374 394 394 401 400 400 400 400 401 401 401 401 401 401 401 401 401 401 401 401 401 401 404 401 402 385 385 342 342

610
Addr. 0F6007 0F7007 0F8007 0F9007 0FA007 0FB007 0FC007 0FD007 0FE007 0FF007 100007 101007 102007 103007 104007 105007 106007 107007 108007 109007 10A007 10B007 10C007 10D007 10E007 10F007 110007 111007 112007 113007 114007 115007 116007 117007 118007 119007 11A007 11C007 1DC007 1DD007 0000AB 0010AB 0020AB 0030AB 0040AB 0050AB 0060AB 0070AB Name REDUCEMETAPSYST SOLVECRAMER QUOTExSIGMA SUM FLAGSUM SUMVX FLAGSUMVX RATSUM FTAYL CSTFRACTION? NONRATSUM LINEARAPPLY linearapply meta_cst? HYPERGEO fk+1/fk A/B2PQR GOSPER? ZEILBERGER SYMPSI sympsi SYMPSIN sympsin IBERNOULLI FLAGRESULTANT RESULTANT RESULTANTLP RESPSHIFTQ ADDONEVAR IROOTS TYPEGAUSSINT? DTYPEGAUSSINT? DUPTYPEGAUSSINT? PPZZ DISTRIB* NONALGERR ALGCASCOMPEVAL %%PSI PUSHFLAGS POPFLAGS xXVOL xYVOL xZVOL xXXRNG xYYRNG xEYEPT xNUMX xNUMY Page 342 342 393 393 393 393 393 393 425 393 393 425 425 393 393 394 394 380 379 379 379 379 382 200, 333 200, 333 201, 333 424 368 404 353 394 405 405 476 476 477 476 477 459 465 465 Addr. 0080AB 0090AB 00A0AB 00B0AB 00C0AB 00D0AB 00E0AB 00F0AB 0110AB 0120AB 0130AB 0150AB 0160AB 0170AB 0180AB 0190AB 01A0AB 01B0AB 01C0AB 01D0AB 01F0AB 0200AB 0210AB 0220AB 0230AB 0240AB 0250AB 0260AB 0270AB 0280AB 0290AB 02A0AB 02B0AB 02C0AB 02D0AB 02E0AB 02F0AB 0300AB 0310AB 0320AB 0330AB 0340AB 0350AB 0360AB 0370AB 0380AB 0390AB 03A0AB

G. Entries sorted by Address


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 xROW xROW xCOL xCOL xDIAG 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 xLIST xNSUB xENDSUB xSTREAM xLIST xLIST xDOLIST xREVLIST xSORT xZFACTOR xFANNING xDARCY xF0 xSIDENS xTDELTA xTINC xgmol xlbmol xrpm xdB xPINIT xDRAW3DMATRIX xKEYTIME xKEYTIME xXSERV xROMUPLOAD Page 457 470 470 455 455 470 467 466 466 474 474 474 474 453 462 455 465 476 476 473 471 458 460 465 458 472 461 466 457 469 471 477 459 456 459 471 473 473 Addr. 0700AB 0710AB 0720AB 0730AB 0740AB 0750AB 0760AB 0770AB 0050B0 0060B0 0860B0 0870B0 0C80B0 0D80B0 0DE0B0 0000B1 0040B1 0000B3 0050B3 0060B3 0070B3 0150B3 0190B3 0220B3 0230B3 0240B3 0250B3 0260B3 0280B3 0290B3 02F0B3 0370B3 0380B3 03B0B3 03C0B3 03D0B3 03E0B3 03F0B3 04B0B3 0520B3 0530B3 0540B3 0590B3 05A0B3 05B0B3 05C0B3 05F0B3 0630B3 Name xXGET xXPUT xMSOLVR xMINIT xMITM xMUSER xMCALC xMROOT IFMenuRow1 IFMenuRow2 grobAlertIcon grobCheckKey gFldVal sFldVal nNullBind DoMsgBox MsgBoxMenu Choose ChooseMenu0 ChooseMenu1 ChooseMenu2 BBMoveTo BBRecalOff&Disp BBRunEntryProc BBReReadPageSize BBReReadHeight BBReReadCoords BBReReadWidth BBRunENTERAction BBRunCanclAction BBReDrawBackgr BBGetNGrob BBGetNStr BBRereadChkEnbl BBRereadFullScr BReReadMenus BBReReadNElems BBGetN BBIsChecked? BBUpArrow BBDownArrow BBSpace BBPgDown BBPgUp BBEmpty? BBGetDefltHeight $>grobOrGROB ChooseSimple

611
Page 475 476 465 465 465 465 464 465 257 257 90 90

117 283 244 244 244 244 245 245 245 245 245 245 245 245 245 245 245 245 246 246 246 246 246 246 246 246 246 246 246 246 246 96 244

456 466 458 463 463 476 469

612
Addr. 0000DD 0010DD 0020DD 0030DD 0040DD 0050DD 0060DD 0070DD 0080DD 0090DD 00A0DD 00B0DD 00C0DD 00D0DD 00E0DD 00F0DD 0100DD 0110DD 0120DD 0130DD 0140DD 0150DD 0160DD 0000DE 0010DE 0020DE 0030DE 0040DE 0050DE 0060DE 0070DE 0080DE 0090DE 00A0DE 00B0DE 00C0DE 00D0DE 00E0DE 00F0DE 0100DE 0110DE 0120DE 0130DE 0140DE 0150DE 0160DE 0170DE 0180DE Name xLANGUAGE xLANGUAGE xFONT xFONT xHEADER xHEADER xNDISP xEDIT xVISIT xEDITB xVISITB xEQW xFILER xFONT8 xFONT7 xFONT6 xSREPL xMINIFONT xMINIFONT xRENAME xUFL1MINIF xDBUG xDISPXY xADDTOREAL xSIGMAVX xSIGMA xPsi xPSI xRESULTANT xIBERNOULLI xGAMMA xqr xGRAMSCHMIDT xSYST2MAT xCHOLESKY xDIAGMAP xISOM xMKISOM xKER xIMAGE xBASIS xIBASIS xAUGMENT xPMINI xCYCLOTOMIC xSTURM xSTURMAB xFDISTRIB Page 463 463 459 459 461 461 465 458 475 458 475 458 459 459 459 459 471 464 465 469 474 456 457 453 471 471 467 467 469 461 460 Addr. 0190DE 01A0DE 01B0DE 01C0DE 01D0DE 01E0DE 01F0DE 0200DE 0210DE 0220DE 0230DE 0240DE 0250DE 0260DE 0270DE 0280DE 0290DE 02A0DE 02B0DE 02C0DE 02D0DE 02E0DE 02F0DE 0300DE 0310DE 0320DE 0330DE 0340DE 0350DE 0360DE 0370DE 0380DE 0390DE 03F0DE 0400DE 0030E0 0100E0 0130E0 0180E0 0190E0 0120E4 0110E7 02E0E7 02F0E7 01E0E8 000100 001100 002100

G. Entries sorted by Address


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? xH xH xA 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 xAH xHA xCD xCD xSH xHS xLST xALG xPRG xCOMP xRAM xSREV xPOKE xPEEK xAPEEK xRSB xSBB xLRR xSN xLCC xASM xBetaTesting xCRLIB xCRC xMAKESTR xSERIAL xASM xER xS2 xXLIB xGETADR xGETNAME xGETNAMES xGETNEAR xEXPAND xFACTOR xSUBST xDERVX xINTVX xLIMIT xTAYLOR0 xSERIES xSOLVEVX xPLOT xPLOTADD xIBP xPREVAL Page 478 478 478 478 478 478 478 478 478 478 478 478 478 478 478 478 478 479 479 479 479 479 479 479 479 479 479 479 479 479 479 479 479 479 479 459 459 472 457 462 463 473 471 471 466 461 467 Addr. 00D314 00E314 00F314 010314 011314 012314 013314 014314 015314 016314 017314 018314 019314 01A314 01B314 01C314 01D314 01E314 01F314 020314 021314 022314 023314 024314 025314 026314 027314 028314 029314 02A314 02B314 02C314 02D314 02E314 02F314 030314 031314 032314 033314 034314 035314 036314 037314 038314 039314 03A314 03B314 03C314 Name xRISCH xDERIV xDESOLVE xLAP xILAP xLDEC xTEXPAND xLIN xTSIMP xLNCOLLECT xEXPLN xSINCOS xTLIN xTCOLLECT xTRIG xTRIGCOS xTRIGSIN xTRIGTAN xTAN2SC xHALFTAN xTAN2SC2 xATAN2S xASIN2T xASIN2C xACOS2S xDIV2 xIDIV2 xQUOT xIQUOT xREMAINDER xIREMAINDER xGCD xLCM xEGCD xIEGCD xABCUV xIABCUV xLGCD xSIMP2 xPARTFRAC xPROPFRAC xPTAYL xHORNER xEULER xPA2B2 xCHINREM xICHINREM xISPRIME?

613
Page 469 457 457 463 462 463 473 463 474 464 459 471 473 473 474 474 474 474 473 461 473 454 454 454 453 457 461 468 462 469 462 460 463 458 462 453 461 463 471 466 467 467 461 458 466 455 461 462

614
Addr. 03D314 03E314 03F314 040314 041314 042314 043314 044314 045314 046314 047314 048314 049314 04A314 04B314 04C314 04D314 04E314 04F314 050314 051314 052314 053314 054314 055314 056314 057314 058314 059314 05A314 05B314 05C314 05D314 05E314 05F314 060314 061314 062314 063314 064314 065314 Name xNEXTPRIME xPREVPRIME xSOLVE xZEROS xFCOEF xFROOTS xFACTORS xDIVIS xTRAN xHADAMARD xrref xREF xAXM xAXL xQXA xAXQ xGAUSS xSYLVESTER xPCAR xJORDAN xMAD xLINSOLVE xVANDERMONDE xHILBERT xLCXM xDIV xCURL xLAPL xHESS xLEGENDRE xTCHEBYCHEFF xHERMITE xLAGRANGE xFOURIER xSIGNTAB xTABVAR xTABVAL xDIVPC xTRUNC xSEVAL xTEVAL Page 465 467 471 477 459 460 459 457 474 461 470 469 454 454 468 454 460 473 466 463 464 463 475 461 463 457 456 463 461 463 473 461 463 459 471 473 473 457 474 471 473 Addr. 066314 067314 068314 069314 06A314 06B314 06C314 06D314 06E314 06F314 070314 071314 072314 073314 074314 075314 076314 077314 078314 079314 07A314 07B314 07C314 07D314 07E314 07F314 080314 080314 081314 082314 083314 084314 085314 086314 087314 088314 089314 08A314 08B314 08C314

G. Entries sorted by Address


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

S-ar putea să vă placă și