Programming in System RPL

Transcription

Programming in System RPL
Programming in
System RPL
Eduardo M Kalinowski
Carsten Dominik
Second Edition
Preface to the Second Edition
Back in 1998, when the first edition of this book was released, it proved
to be a good tutorial for new learners of System RPL, and also a good rerefence
for more experienced programs.
However, there was still room for improvement. And when the HP49G
calculator was released, the need for a second edition of this book was even
greater, because no document describing all its new features existed.
For these reasons, we have put together this new edition. Those who
have used the first edition of this document will find many changes and improvements, and also some 400 additional pages :-). The structure of the book
has been totally changed, with the tutorial and reference parts merged. All the
text has been revised and corrected. Some chapters were completely rewritten
in order to make them easier to understand and more useful. There are also
new chapters, describing new HP49 features, and also about things that were
not described in the first edition.
We hope this book is a valuable resource for those that already knew
System RPL on the HP48 and wanted more information on the new HP49 features, and for those that want to start learning System RPL in order to discover
more of the power of the HP49.
April 24, 2002
Eduardo de Mattos Kalinowski
Carsten Dominik
i
Preface to the First Edition
The programming features of the HP48 graphical calculator are very
powerful. They allow you to do virtually anything. However, the documented
programming functions, that are directly accessible to the user (the user language), is not everything the calculator can do.
There is another language: the System language. The User language
is a subset of the System one, with just some commands and just a fraction of
its power. However, the System language is not well documented. The existing
documents on that subject are turned to someone who already knows it; they
are just listings of the commands with some brief descriptions. Once you already know the language, even the brief descriptions can be left out, and those
documents are really a very good source of information. But how does one learn
System RPL?
The purpose of this book is exactly that: to be a way for someone who
has already learned User RPL (if you have not yet, learn it before, then come
back to this), and wants to learn the real power of the calculator.
July 12, 1998
Eduardo de Mattos Kalinowski
ii
Acknowledgments
This work could not have been accomplished without the help of many
people. Firstly, we would like to thank Mika Heiskanen for his entry point list
by subject. That document was an important source of information. His JAZZ
library with its disassembler and other functions was also an indispensable
gateway to the HP48 ROM code.
We would also like to thank the ACO team, for developing the HP49,
and for providing us with additional information for writing some of the chapters in this book.
Our thanks go also to Wolfgang Rautenberg, who reviewed the first edition throughly and gave many suggestions for this present edition.
Many other people helped during the two editions of the book:
Al Arduengo
Jean-Yves Avenard
Jurjen N.E. Bos
Carlos Bourlot
Sune Bredahl
Jonathan Busby
Cyrille de Brébisson
Stefan Ehlen
Len Fellman
Peter Geelhoed
Christoph Gießelink
Raymond Hellstern
Jordi Hidalgo
Joe Horn
Werner Huysegoms
David Kastrup
Dan Kirkland
Piotr Kowalewski
Daniel Lidström
Andreas Matthias
Andreas Möller
Denis Martinez
Hakim Mazouz
Christian Meland
John H Meyers
Heiko Oberdiek
Alberto Zamora Oyace
Bernard Parisse
Richard Pascal
James M Prange
Thomas Rast
Eric Rechlin
Melissa Reid
Ricardo Blasco Serrano
Gerald Squelart
Pierre Tardy
Jernej Zajc
Adam Zwierko
If we forgot someone, please forgive us, and be sure we are grateful
anyway.
iii
Disclaimer
This document is © by Eduardo M Kalinowski and Carsten Dominik.
It is distributed in the hope it will be useful for those who want to learn
System RPL or want a reference about it, but it is provided “as is”, without warranty of any kind, either expressed or implied. In no event, we shall be liable
to you for damages, including any general, special, incidental or consequential
damages caused directly or indirectly by the use of the information provided
here. We do not assure that any information here is right. Use it at your own
risk.
This document may be distributed only if in its whole, unmodified form;
and if you do not charge anything for it (except nominal copying fees). Otherwise, we will want our share!
The latest version of this document and its errata can be found at the
homepage http://move.to/hpkb.
iv
Short Contents
Preface to the Second Edition
i
Preface to the First Edition
ii
Acknowledgments
iii
Disclaimer
iv
1 Introduction
1
I
7
HP49 Objects
2 Binary Integers (BINTS)
9
3 Real Numbers
27
4 Complex Numbers
36
5 Integers (ZINTS)
39
6 Characters and Strings
40
7 Hex Strings
56
8 Identifiers
60
9 Tagged Objects
61
10 Arrays
63
11 Composite Objects
67
12 Meta Objects
75
13 Unit Objects
80
v
vi
SHORT CONTENTS
14 Symbolics
85
15 Graphics Objects (Grobs)
89
16 Library and Backup Objects
99
II
General System RPL Entries
103
17 Stack Operations
105
18 Temporary Environments
111
19 Runstream Control
120
20 Conditionals
132
21 Loops
147
22 Error Handling
153
23 The Virtual Stack
159
24 Memory Operations
165
25 Time and Alarms
172
26 System Functions
175
27 Serial Communications
180
28 The HP49 Filer
182
III
189
Input and Output
29 Checking for Arguments
191
30 Keyboard Control
202
31 Using InputLine
209
32 The Parameterized Outer Loop
213
SHORT CONTENTS
vii
33 Using the HP49 Browser
225
34 Using the HP48 Browser
235
35 Creating Input Forms
248
36 The Display
268
37 The Menu
284
38 Programming the HP49 Editor
295
39 Plotting
315
IV
319
The HP49 CAS
40 Introduction to the HP49 CAS
321
41 Type Checking and Conversion
325
42 Integers
327
43 Matrices
336
44 Expression Manipulation
347
45 Symbolic Meta Handling
359
46 Polynomials
371
47 Root Finding
381
48 Calculus Operations
386
49 Summation
393
50 Modular Operations
395
51 Sign Tables
400
52 Errors
403
53 CAS Configuration
405
viii
SHORT CONTENTS
54 CAS Menus
409
55 Internal Versions of User RPL Commands
411
56 Miscellaneous
417
V
427
Appendices
A Development Tools
429
B Creating Libraries
447
C User RPL Commands
453
D Library 256 and EXTABLE
478
E Error Messages
480
VI
497
Index
F Entries sorted by Name
499
G Entries sorted by Address
557
Contents
Preface to the Second Edition
i
Preface to the First Edition
ii
Acknowledgments
iii
Disclaimer
iv
1 Introduction
1.1 Your First System RPL Program . . . . . . . . . . . . . . . . . . . .
1.2 About the Entries Listing . . . . . . . . . . . . . . . . . . . . . . . .
1
3
5
I
7
HP49 Objects
2 Binary Integers (BINTS)
2.1 Reference . . . . . . . . . . . . .
2.1.1
Built-in Binary Integers
2.1.2
Pushing Several BINTs
2.1.3
Conversion . . . . . . . .
2.1.4
Arithmetic Functions .
2.1.5
Tests . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
10
10
21
22
23
25
3 Real Numbers
3.1 Reference . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1
Built-in Real Numbers . . . . . . . . . . . .
3.1.2
Built-in Extended Real Numbers . . . . .
3.1.3
Stack Manipulation Combined with Reals
3.1.4
Conversion . . . . . . . . . . . . . . . . . . .
3.1.5
Real Functions . . . . . . . . . . . . . . . .
3.1.6
Extended Real Functions . . . . . . . . . .
3.1.7
Tests . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
27
28
28
30
31
31
31
33
35
4 Complex Numbers
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
36
ix
x
CONTENTS
4.1 Reference . . . . . . . . . . . . . . .
4.1.1
Builtin Complex Numbers
4.1.2
Conversion . . . . . . . . . .
4.1.3
Functions . . . . . . . . . .
4.1.4
Tests . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5 Integers (ZINTS)
39
6 Characters and Strings
6.1 Reference . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1
Built-in Characters . . . . . . . . . . . . . .
6.1.2
Built-in Strings . . . . . . . . . . . . . . . .
6.1.3
Built-in Strings with Stack Manipulation
6.1.4
Conversion . . . . . . . . . . . . . . . . . . .
6.1.5
Management . . . . . . . . . . . . . . . . .
6.1.6
Parsing Strings . . . . . . . . . . . . . . . .
6.1.7
Decompilation . . . . . . . . . . . . . . . . .
6.1.8
String Tests . . . . . . . . . . . . . . . . . .
7 Hex Strings
7.1 Reference . . . . . . . . . .
7.1.1
Conversion . . . . .
7.1.2
General Functions
7.1.3
Tests . . . . . . . .
36
36
37
37
38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
40
41
41
43
46
46
47
50
51
55
.
.
.
.
56
56
56
57
58
8 Identifiers
60
9 Tagged Objects
9.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
61
10 Arrays
10.1 Reference . . . . . . . . . .
10.1.1 General Functions
10.1.2 Conversion . . . . .
10.1.3 Statistics . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
63
64
64
65
66
11 Composite Objects
11.1 Reference . . . . . . . . . . .
11.1.1 General Operations
11.1.2 Building . . . . . . .
11.1.3 Exploding . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
67
68
68
71
71
CONTENTS
11.1.4
11.1.5
xi
Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Secondaries . . . . . . . . . . . . . . . . . . . . . . . . . . .
12 Meta Objects
12.1 Reference . . . . . . . . . . . . . . . .
12.1.1 Stack Functions . . . . . . . .
12.1.2 Combining Functions . . . .
12.1.3 Meta and Object Operations
12.1.4 Other Operations . . . . . . .
13 Unit Objects
13.1 Reference . . . . . . . . . . . .
13.1.1 Creating Units . . . .
13.1.2 General Functions . .
13.1.3 Arithmetic Functions
13.1.4 Tests . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
14 Symbolics
14.1 Reference . . . . . . . . . . . . . . .
14.1.1 General Operations . . . .
14.1.2 Other Functions . . . . . .
14.1.3 Meta Symbolics Functions
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15 Graphics Objects (Grobs)
15.1 Reference . . . . . . . . . . . . . . . . . . . .
15.1.1 Built-in Grobs . . . . . . . . . . . . .
15.1.2 Dimensions . . . . . . . . . . . . . .
15.1.3 Grob Handling . . . . . . . . . . . .
15.1.4 Greyscale Graphics . . . . . . . . . .
15.1.5 Creating Menu Label Grobs . . . .
15.1.6 Converting Strings to Grobs . . . .
15.1.7 Creating Grobs from Other Objects
16 Library and Backup Objects
16.1 Reference . . . . . . . . . .
16.1.1 Port Operations . .
16.1.2 Rompointers . . . .
16.1.3 Libraries . . . . . .
16.1.4 Backup Objects . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
72
73
.
.
.
.
.
75
75
75
76
77
77
.
.
.
.
.
80
81
81
82
83
83
.
.
.
.
85
86
86
88
88
.
.
.
.
.
.
.
.
89
90
90
90
90
93
95
96
98
.
.
.
.
.
99
99
99
100
100
101
xii
II
CONTENTS
General System RPL Entries
103
17 Stack Operations
105
17.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
18 Temporary Environments
18.1 Named Local Variables . . . . . . . . . . .
18.2 Unnamed Local Variables . . . . . . . . . .
18.3 Nested Temporary Environments . . . . .
18.4 Other Ways of Binding . . . . . . . . . . . .
18.5 Reference . . . . . . . . . . . . . . . . . . .
18.5.1 Builtin IDs and LAMs . . . . . . .
18.5.2 Conversion . . . . . . . . . . . . . .
18.5.3 Temporary Environments Words
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
111
111
112
113
114
116
116
116
116
19 Runstream Control
19.1 Some Concepts . . . . . .
19.2 Runstream Commands .
19.3 Some Examples . . . . . .
19.4 Reference . . . . . . . . .
19.4.1 Quoting Objects .
19.4.2 Skipping Objects
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
120
120
122
124
128
130
131
20 Conditionals
20.1 Tests . . . . . . . . . . . . . . . . . . . . . .
20.2 If. . . Then. . . Else . . . . . . . . . . . . . . .
20.3 Case . . . . . . . . . . . . . . . . . . . . . . .
20.4 Reference . . . . . . . . . . . . . . . . . . .
20.4.1 Boolean Flags . . . . . . . . . . . .
20.4.2 General Tests . . . . . . . . . . . .
20.4.3 True/False Tests . . . . . . . . . .
20.4.4 Binary Integer Tests . . . . . . . .
20.4.5 Real and Complex Number Tests
20.4.6 Meta Object Tests . . . . . . . . .
20.4.7 General Object Tests . . . . . . . .
20.4.8 Miscellaneous . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
132
132
133
133
135
135
137
137
140
142
143
144
146
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
21 Loops
147
21.1 Indefinite Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
21.1.1 How Indefinite Loops Work . . . . . . . . . . . . . . . . . . 148
CONTENTS
21.2 Definite Loops . . . . . . . . . . .
21.2.1 How a DO Loop Works .
21.3 Reference . . . . . . . . . . . . .
21.3.1 Indefinite Loops . . . . .
21.3.2 Definite Loops . . . . . .
xiii
.
.
.
.
.
22 Error Handling
22.1 Trapping Errors . . . . . . . . . .
22.1.1 The Protection Word . . .
22.2 Generating Errors . . . . . . . . .
22.3 Reference . . . . . . . . . . . . . .
22.3.1 General Words . . . . . .
22.3.2 Error Generating Words .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
149
150
150
150
151
.
.
.
.
.
.
153
153
154
155
156
156
157
23 The Virtual Stack
159
23.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
24 Memory Operations
24.1 Reference . . . . . . . . . . . . . . . . . .
24.1.1 Recalling, Storing and Purging .
24.1.2 Directories . . . . . . . . . . . . .
24.1.3 The Hidden Directory . . . . . .
24.1.4 Temporary Memory . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
165
166
166
168
170
170
25 Time and Alarms
172
25.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
25.1.1 Alarms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
26 System Functions
175
26.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
26.1.1 User and System Flags . . . . . . . . . . . . . . . . . . . . 175
26.1.2 General Functions . . . . . . . . . . . . . . . . . . . . . . . 178
27 Serial Communications
180
27.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
28 The HP49 Filer
28.1 Using the Filer . . . . . . . . . . . .
28.1.1 The Filer_Type Argument .
28.1.2 The Filer_Path Argument .
28.1.3 The Filer_List Argument .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
182
182
182
182
183
xiv
CONTENTS
28.1.3.1
28.1.3.2
28.1.3.3
28.1.3.4
28.1.3.5
28.2 Reference . . .
III
Name_Item . . . . .
Location_Item . . .
Action_Item . . . . .
ExtraProgram_Item
Key_Shortcut . . . .
. . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
183
183
184
186
187
188
Input and Output
189
29 Checking for Arguments
29.1 Number of Arguments .
29.2 Argument Type . . . . .
29.2.1 Examples . . .
29.3 Reference . . . . . . . .
29.3.1 Type Checking
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
191
191
193
195
196
198
30 Keyboard Control
30.1 Key Locations . . . . . . . . . .
30.2 Waiting for a Key . . . . . . . .
30.3 Reference . . . . . . . . . . . .
30.3.1 Converting Keycodes .
30.3.2 Waiting for Keys . . .
30.3.3 The ATTN Flag . . . .
30.3.4 Bad Keys . . . . . . . .
30.3.5 User Keys . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
202
202
204
205
205
205
207
207
208
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
31 Using InputLine
209
31.1 Menu Key Assignments . . . . . . . . . . . . . . . . . . . . . . . . . 211
31.2 An Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
31.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
32 The Parameterized Outer Loop
32.1 Parameterized Outer Loop Words . .
32.2 The Display . . . . . . . . . . . . . . .
32.3 Error Handling . . . . . . . . . . . . .
32.4 Hard Key Assignments . . . . . . . .
32.5 Menu Key Assignments . . . . . . . .
32.6 Preventing Suspended Environments
32.7 The Exit Condition . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
213
214
215
215
216
217
217
218
CONTENTS
xv
32.8 An Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
32.9 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
33 Using the HP49 Browser
33.1 The Choose Items meta . . . . . .
33.2 The Title String . . . . . . . . . . .
33.3 The Initially Selected Item . . . .
33.4 The Message Handler . . . . . . .
33.5 The Browser and Lams . . . . . .
33.6 Accessing the Selected Item . . .
33.7 Saving and Restoring the Screen
33.8 An Example . . . . . . . . . . . . .
33.9 Reference . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
225
226
226
226
226
228
228
229
230
233
34 Using the HP48 Browser
34.1 The ::Appl Parameter . . . . . . . . . . . .
34.2 The $Title Parameter . . . . . . . . . . . .
34.3 The ::Converter Parameter . . . . . . . . .
34.4 The {}Items Parameter . . . . . . . . . . . .
34.5 The Init Parameter . . . . . . . . . . . . . .
34.6 Typical Browser Usage . . . . . . . . . . .
34.7 An Example . . . . . . . . . . . . . . . . . .
34.8 Reference . . . . . . . . . . . . . . . . . . .
34.8.1 NULLLAMs Used by the Browser
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
235
235
238
239
239
239
239
240
244
247
35 Creating Input Forms
35.1 Label Definitions . . . . . . . . . . . . .
35.2 Field Definitions . . . . . . . . . . . . .
35.3 Label and Field Counts . . . . . . . . .
35.4 Message Handlers . . . . . . . . . . . .
35.5 The Title . . . . . . . . . . . . . . . . . .
35.6 Results Of The Input Form . . . . . . .
35.7 An Example . . . . . . . . . . . . . . . .
35.8 Reference . . . . . . . . . . . . . . . . .
35.8.1 Inputform . . . . . . . . . . . .
35.8.2 Input Form Messages . . . . .
35.8.2.1 IfMsgKeyPress — 0 .
35.8.2.2 IfMsgLooseFocus — 1
35.8.2.3 IfMsgNewField — 2 .
35.8.2.4 IfMsgGetFocus — 3 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
248
249
249
251
252
253
253
253
257
257
262
262
262
262
262
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
xvi
CONTENTS
35.8.2.5
35.8.2.6
35.8.2.7
35.8.2.8
35.8.2.9
35.8.2.10
35.8.2.11
35.8.2.12
35.8.2.13
35.8.2.14
35.8.2.15
35.8.2.16
35.8.2.17
35.8.2.18
35.8.2.19
35.8.2.20
35.8.2.21
35.8.2.22
35.8.2.23
35.8.2.24
IfMsgGetFieldValue — 4 . . . .
IfMsgSetFieldValue — 5 . . . .
IfMsgGetFieldGrob — 6 . . . .
IfMsgSetFirstField — 7 . . . . .
IfMsgFieldReset — 10 . . . . . .
IfMsgGetMenu — 11 . . . . . .
IfMsgGet3KeysMenu — 12 . . .
IfMsgCancel — 13 . . . . . . . .
IfMsgCancelKey — 14 . . . . .
IfMsgOK — 15 . . . . . . . . . .
IfMsgKeyOK — 16 . . . . . . . .
IfMsgChoose — 17 . . . . . . . .
IfMsgType — 18 . . . . . . . . .
IfMsgCalc — 19 . . . . . . . . .
IfMsgNewCommandLine — 20
IfMsgOldCommandLine — 21 .
IfMsgCommandLineValid — 22
IfMsgDecompEdit — 23 . . . . .
IfMsgNextChoose — 24 . . . . .
IfMsgEdit — 25 . . . . . . . . .
36 The Display
36.1 Display Organization . . . . . . . . . . .
36.2 Preparing the Display . . . . . . . . . . .
36.3 Controlling Display Refresh . . . . . . .
36.4 Clearing the Display . . . . . . . . . . . .
36.5 Displaying Text . . . . . . . . . . . . . . .
36.5.1 System Font . . . . . . . . . . . .
36.5.2 Minifont . . . . . . . . . . . . . .
36.5.3 Displaying Warnings . . . . . . .
36.6 Reference . . . . . . . . . . . . . . . . . .
36.6.1 Display Organization . . . . . .
36.6.2 Preparing the Display . . . . . .
36.6.3 Immediate Refresh . . . . . . . .
36.6.4 Controlling Display Refresh . .
36.6.5 Clearing the Display . . . . . . .
36.6.6 Annunciator and Modes Control
36.6.7 Window Coordinates . . . . . . .
36.6.8 Scrolling the Display . . . . . . .
36.6.9 Displaying Objects . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
263
263
263
264
264
264
265
265
265
265
266
266
266
266
267
267
267
267
267
267
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
268
268
269
270
270
271
271
272
272
272
272
273
274
275
277
277
279
279
280
CONTENTS
xvii
36.6.10 Displaying Text . . . . . . . . . . . . . . . . . . . . . . . . . 281
36.6.11 Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
37 The Menu
37.1 Menu Format . . . . . . . . . . . .
37.2 Menu Properties . . . . . . . . . .
37.3 Reference . . . . . . . . . . . . . .
37.3.1 Menu Properties . . . . .
37.3.2 Building Menus . . . . . .
37.3.3 Menu Display . . . . . . .
37.3.4 Displaying Menu Labels .
37.3.5 General Entries . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
38 Programming the HP49 Editor
38.1 Terminology . . . . . . . . . . . . . . . . . . . . . .
38.2 Examples . . . . . . . . . . . . . . . . . . . . . . .
38.3 Executing External Commands in the Editor . .
38.4 Reference . . . . . . . . . . . . . . . . . . . . . . .
38.4.1 Status . . . . . . . . . . . . . . . . . . . .
38.4.2 Inserting Text . . . . . . . . . . . . . . . .
38.4.3 Deleting Text . . . . . . . . . . . . . . . .
38.4.4 Moving the Cursor . . . . . . . . . . . . .
38.4.5 Selection, Cut and Paste, the Clipboard
38.4.6 Search and Replace . . . . . . . . . . . .
38.4.7 Evaluation . . . . . . . . . . . . . . . . . .
38.4.8 Starting the Editor . . . . . . . . . . . . .
38.4.9 Miscellaneous . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
284
285
286
288
288
291
292
293
293
.
.
.
.
.
.
.
.
.
.
.
.
.
295
295
296
299
300
300
301
302
304
306
308
309
310
311
39 Plotting
315
39.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
IV
The HP49 CAS
40 Introduction to the HP49 CAS
40.1 Problems with These Chapters . . . . . . . . . . . . . . . . . . . . .
40.2 Symbolic Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40.3 A Few Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
319
321
321
322
323
41 Type Checking and Conversion
325
41.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
xviii
CONTENTS
42 Integers
42.1 Reference . . . . . . . . . . . . . . . . . . . . . . . .
42.1.1 Built-in Integers . . . . . . . . . . . . . . .
42.1.2 Conversion Functions . . . . . . . . . . . .
42.1.3 General Integer Operations . . . . . . . . .
42.1.4 Integer Factorization and Prime Numbers
42.1.5 Gaussian Integers . . . . . . . . . . . . . .
42.1.6 Integer Tests . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
327
327
327
327
329
330
333
334
43 Matrices
43.1 Reference . . . . . . . . . . . . . . . . . . . . . . .
43.1.1 Creating and Redimensioning Matrices
43.1.2 Conversion . . . . . . . . . . . . . . . . . .
43.1.3 Tests . . . . . . . . . . . . . . . . . . . . .
43.1.4 Calculations with Matrices . . . . . . . .
43.1.5 Linear Algebra and Gaussian Reduction
43.1.6 Linear System Solver . . . . . . . . . . .
43.1.7 Other Matrix Operations . . . . . . . . .
43.1.8 Eigenvalues, Eigenfunctions, Reduction
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
336
337
337
338
339
339
341
342
342
345
.
.
.
.
.
.
.
.
.
44 Expression Manipulation
44.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . .
44.1.1 Basic Operations and Function Application
44.1.2 Trigonometric and Exponential Operators .
44.1.3 Simplification, Evaluation and Substitution
44.1.4 Collection and Expansion . . . . . . . . . . .
44.1.5 Trigonometric Transformations . . . . . . .
44.1.6 Division, GCD and LCM . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
347
347
347
351
353
355
356
357
45 Symbolic Meta Handling
45.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . .
45.1.1 Basic Expression Manipulation . . . . . . .
45.1.2 Basic Operations and Function Application
45.1.3 Trigonometric and Exponential Operators .
45.1.4 Infinity and Undefs . . . . . . . . . . . . . .
45.1.5 Expansion and Simplification . . . . . . . .
45.1.6 Tests . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
359
359
359
360
365
367
368
370
46 Polynomials
371
46.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
CONTENTS
46.1.1
46.1.2
46.1.3
46.1.4
xix
Computation with Polynomials
Factorization . . . . . . . . . . .
General Polynomial Operations
Tests . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
371
373
377
380
47 Root Finding
381
47.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
47.1.1 Root Finding and Numerical Solvers . . . . . . . . . . . . 381
48 Calculus Operations
48.1 Reference . . . . . . . . . . . . . . . .
48.1.1 Limits and Series Expansion
48.1.2 Derivatives . . . . . . . . . .
48.1.3 Integration . . . . . . . . . .
48.1.4 Partial Fractions . . . . . . .
48.1.5 Differential Equations . . . .
48.1.6 Laplace Transformation . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
386
386
386
387
390
391
391
392
49 Summation
393
49.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
50 Modular Operations
395
50.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
50.1.1 Modulo Operations . . . . . . . . . . . . . . . . . . . . . . . 395
51 Sign Tables
400
51.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
52 Errors
403
52.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
53 CAS Configuration
405
53.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
54 CAS Menus
409
54.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
55 Internal Versions of User RPL Commands
411
55.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
56 Miscellaneous
417
xx
CONTENTS
56.1 Reference . . . . . . . . . . . . . . . . . .
56.1.1 Verbose Mode Display Routines
56.1.2 Evaluation . . . . . . . . . . . . .
56.1.3 Conversion . . . . . . . . . . . . .
56.1.4 Qpi . . . . . . . . . . . . . . . . .
56.1.5 Infinity . . . . . . . . . . . . . . .
56.1.6 Built-In Constants . . . . . . . .
56.1.7 List Application . . . . . . . . . .
56.1.8 Irrquads . . . . . . . . . . . . . .
56.1.9 Miscellaneous . . . . . . . . . . .
V
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Appendices
417
417
417
418
418
419
420
420
421
422
427
A Development Tools
A.1 The Entry Points Library . . . . . . . . . . . . . . .
A.2 About Key Assignments . . . . . . . . . . . . . . . .
A.3 Hacking Tools . . . . . . . . . . . . . . . . . . . . . .
A.3.1 Operating Tools for the HP49 . . . . . . .
A.4 The Compiler . . . . . . . . . . . . . . . . . . . . . .
A.4.1 MASD and the Different Kinds of Entries
A.4.2 MASD’s Special Features . . . . . . . . . .
A.4.2.1 Unnamed Local Variable Binding
A.4.2.2 Including Source Files . . . . . .
A.5 Disassembly . . . . . . . . . . . . . . . . . . . . . . .
A.5.1 Using Nosy . . . . . . . . . . . . . . . . . .
A.5.2 Using CQIF? . . . . . . . . . . . . . . . . .
A.6 The Editor, and Emacs . . . . . . . . . . . . . . . . .
A.7 Debugging . . . . . . . . . . . . . . . . . . . . . . . .
A.8 JAZZ for the HP49 . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
429
430
430
432
435
435
437
437
438
439
439
439
440
441
444
445
B Creating Libraries
B.1 The Special Variables . . . . . . . . . . . . .
B.2 The Library Message Handler . . . . . . . .
B.2.1 Menu Extensions . . . . . . . . . . .
B.2.2 Online Help for Libary Commands
B.2.3 The Library Menu Message . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
447
447
449
449
450
452
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
C User RPL Commands
453
C.1 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
CONTENTS
xxi
D Library 256 and EXTABLE
478
D.1 The Development Library 256 . . . . . . . . . . . . . . . . . . . . . 478
D.2 The EXTABLE Library . . . . . . . . . . . . . . . . . . . . . . . . . 479
E Error Messages
480
VI
497
Index
F Entries sorted by Name
499
G Entries sorted by Address
557
Chapter 1
Introduction
If you know how to create programs in User RPL (if you do not, you
should learn it before you continue reading this book), then you only know part
of what the HP49G calculator can do. The System RPL programming language
gives you power to do many things which you could not even imagine. For
example, in System RPL you can handle all object types available. User RPL
only gives access to some of them. Or you can do math with 15-digit accuracy,
use arrays with non-numeric elements, and much more. System RPL can also
be used to do the same things as a User RPL program would do, but much
faster.
But before we start talking of System RPL, let us go back to User RPL
to explain how it really works. We know you are anxious to start with the big
thing right now, but the following information is important for a good understanding of System RPL.
HP49 programs (both User and System) are not stored internally using
the names of the commands. Only the addresses of the objects are stored. Each
of these addresses takes only 2.5 bytes (or more, if the address is a rompointer
or flashpointer). When a program is run, the only thing that is actually done
is a kind of “gosub” to that address. This way of storing programs serves two
purposes. 2.5 bytes is less than the name of most commands, so the program
needs less memory. And execution of the program is much faster since during
execution, looking up the addresses of names is no longer necessary.
Most of the times, the address points to another program with more
jumps to other programs with more jumps, and so on. . . The calculator keeps
track of holding the address to which jump back, and you can have as many
jumps as necessary without worrying about it. When the called program ends,
you return to where you were before. Of course, the jumps must end somewhere, either in a program written in machine language or in an object that
just puts itself in the stack (numbers, strings, etc). This is quite similar to the
concept of calling a function or sub-routine in high-level languages.
But if the programs are just addresses, how can they be edited? The an1
2
1. Introduction
swer is that the calculator has a table of the User commands’ names and their
corresponding addresses. So, when you put a User RPL program in the stack,
the HP searches the table to get the name of the commands corresponding to
the addresses stored in memory, and then displays the program in a readable
form. You can then edit it, and after the edition is done the table is searched
again for the addresses of the commands entered, and only these addresses are
stored in memory. This is why it takes a long time to edit a long User RPL
program, but it is also what makes them fast to run.
This all works as long as all the commands have names. Guess what?
There are over four thousand commands without names. This is one of the distinctions between User and System RPL. User RPL, the language described in
the manual (the « » language), can only access the named commands. (Actually,
it can access the unnamed commands via the commands SYSEVAL, LIBEVAL
and FLASHEVAL, as long as you know the address of the command. But this
is not efficient (except for an occasional use)). System RPL can access all commands.
Because of that, System RPL programs cannot be edited directly. Special tools are needed for that. In Appendix A you will find information about
the available tools for writing System RPL programs. Fortunately, all you need
is built-in in the calculator, or is in libraries that can be downloaded to the
calculator.
Programming in System RPL is more powerful and much faster, because it does no error checking. In System RPL, the programmer must be sure
that no error occurs, otherwise a crash might happen. For example, if a command requires two arguments in the stack and they are not there, or if they
are not of the type the function requires, a warmstart or even a memory loss
could happen. Naturally, there are commands for checking if there are enough
arguments, for their types, and for other possible error conditions. The difference is that you probably just need to check if all arguments are present once,
when the program starts. You do not need to repeat the check later. In User
RPL, every single command has error checking, so tests are done unnecessarily,
slowing the program.
At this point, you might be wondering, “if the commands do not have
names, how can you program in System RPL?” As said before, all commands
have addresses, so you can call the address directly, using a structure like
PTR <address>, and whatever is at that address will be executed. But there
is an easier way.
The commands have names. The names simply are not stored in the
HP49 in the same way the the names of User commands are. But the HP de-
1.1. Your First System RPL Program
3
sign team has given them names, and they are stored in the tools for creating
System RPL programs. You write a program using those names, and then the
System RPL compiler searches the names in the tables, and converts them to
addresses. This is called compiling or assembling. Some tools can also do the
opposite: convert the addresses into command names. This is called decompiling or disassembling.
Some of the commands are classified as “supported”: they are guaranteed to stay at the same memory location in all ROM versions of the calculator,
i.e., their address are not going to change, so programmers can use them safely.
(Note that this does not mean they will be in the same address in different calculators, such as the HP48 and HP49.) But there are also commands that are
classified as “unsupported”. For these, there is not guarantee that they will
stay at the same address in different ROM versions.
Unsupported commands are not listed in the tables of compilers, so you
cannot enter their names and expect to have their address in the resulting
program. You have to either call them directly by their address, or name the
command yourself. In the entries listings, the names of unsupported entries
will be enclosed in single parenthesis, like (CURSOR@@).
Note that all unsupported entries listed in this book are, however, stable. It has been indicated by the HP design team that all HP49G addresses in
the ranges 025ECh–0B3C7h and 25565h–40000h will very likely not change,
even the unsupported commands in these ranges.
Actually, there are three kinds of entries: the description above dealt
mainly with normal 2.5-byte addresses, which point directly to some ROM address. Most entries are of this kind. But there are also rompointer and flashpointer entries. Rompointers point to commands inside a library. Their names
start with ˜. Flashpointers, which only exist in the HP49, point to sub-routines
inside the flash memory. Their names start with ˆ. Appendix A will describe
what is necessary in order to use each kind of entries with HP49 compiler.
1.1
Your First System RPL Program
Let us create a very simple System RPL program, and explain it in
detail. The program will calculate the area of a circle, given the radius in the
stack. See Appendix A for information on how to compile it. If you downloaded
the examples file, you will find it with the name first.
4
1
5
1. Introduction
::
CK1NOLASTWD
CK&DISPATCH1
BINT1 ::
%2 %^
%PI
%*
;
;
(check if there is an argument)
(check if it is a real number)
(if it is)
(square the radius)
(put PI in the stack)
(and multiply)
Before we start analyzing it, it is important to note that System RPL
is case-sensitive, so pi is different from PI, which is different from pI. Be
careful when typing. Also, as you might have guessed, everything between
( )’s is considered a comment. Lines that have a * in the first column are also
comments.
The first line contains the start of secondary (i.e., program) marker, ::
(called DOCOL). The end marker is ; (SEMI).
Following, there is the command CK1NOLASTWD. This command checks
if there is one argument in the stack, and if there is not, generates a “Too Few
Arguments” error. The next command, CK&DISPATCH0, checks the argument
type and allows the programmer to do different things for different argument
types. Our program only supports one argument type: real numbers (represented here by BINT1, or the number one as a system binary — see Chapter 2).
If any other argument type is entered, a “Bad Argument Type” error will be
produced. Argument checking is described in detail in Chapter 29.
After that, there is the code to execute if the argument is a real number.
Note that the code is between :: and ;. This is because only one object is
expected after the argument type. Here, this one object is a secondary (subprogram), one kind of composite object: it is only one object, but with other objects
inside it. So if we want to evaluate more than one object, they must be included
in a secondary. This is similar to enclosing several statments between braces
in C or between begin and end in Pascal.
The rest of the program is very simple. The number two is put in the
stack, and the radius (entered by the user) is raised to that power.
Finally , π is put in the stack, and the squared radius is multiplied by
it. The stack now contains the area.
This program is 25 bytes long, as opposed to the 20 of the User RPL
program « SQ p * ->NUM ». However, the User RPL version took 0.0156
seconds to calculate (with radius 1). The System RPL took only 0.0019 seconds.
Note that, even if this System RPL program is longer than an equivalent in
User RPL, this generally does not happen.
1.2. About the Entries Listing
1.2
5
About the Entries Listing
In the following chapters, the stack diagrams use codes to represent
each object type. Here is a list of such codes:
Abbreviation
ob
1...n
#
HXS
CHR
$
T
F
flag
%
%%
%C
%%C
z, Z, ZINT
N
s, symb
u, unit
{}
A, []
V, []
M, [[]]
P
Q
meta, ob1..obn #n
grob
menu
sign
Meaning
any object
n objects
binary integer (BINT)
hex string (User binary integer)
character
character string
TRUE
FALSE
TRUE or FALSE
real number
extended real number
complex number
extended complex number
infinite precision integer
positive infinite precision integer
symbolic
unit object
list
array
vector
matrix
polynom, a list of Qs
ZINT or P
meta object
graphical object
menu: a program or a list
sign table
UserRPL stack diagrams use some additional abbreviations:
Abbreviation
x, y
c, (,)
#
Meaning
real, list, generic UserRPL object
complex number
hex string (User binary integer)
6
Abbreviation
θ
m, n
date
name
prog, prg
f, func
F
1. Introduction
Meaning
angle (a real number)
integer (ZINT or real)
date in DD.MMYYYY or MM.DDYYYY format
global name
program
function
integral of f
Part I
HP49
Objects
Chapter 2
Binary Integers (BINTS)
Binary integers are the objects you will use most often. They are not the
user-level binary integers (those that you enter starting with #); these are actually hexadecimal strings, described in Chapter 7. These system-level binary
integers (called bints for short) are objects which are not so easily accessible to
the user. If you happen to have one in the stack, they show like ¤ 10h. Try this
if you are using a HP49: enter the following number in the stack (triple check
if it is right): #3316Bh. Now, type SYSEVAL and press ENTER. You should get
¤ 10h in the stack, or perhaps ¤ 16d (or even something else), depending on
the number base you are using. Internally, they are always in hexadecimal
mode. With the HP49 and library 256 attached (see Appendix A), you can use
the commands R˜SB and SB˜B to convert reals and user-level binary numbers
into bints, respectively, and vice-versa.
Bints are the objects you will use most often because most commands
that require a numeric argument need it in the form of a binary integer, as
opposed to the real numbers needed by user functions. So, they should be easy
to create. And, indeed, they are. You can put one in stack just by entering it
on your program (in decimal form). But that is not recommended at all times,
because you can also put a real number in stack by just entering it in the same
way (we will see later how to differ one from another). So, it is a good idea to
use the following structure: # <hex>. This way, you can be sure you will get
a binary number, and your code is clearer. Unfortunately (or fortunatelly), you
must use hexadecimal representation.
In the HP49G ROM, there are many “built-in” binary numbers. You can
put one of these in the stack by just calling its address. Since almost all of
them are supported, to get #6h in the stack, you just use the word BINT6. The
main advantage is that if you enter # 6, it takes five bytes. The word BINT6,
as all other commands (except rompointer and flashpointer commands), take
only 2.5 bytes. Some words put two or even three bints in the stack, so the
savings are even greater. Following, there is a list of built-in bints.
The four basic operations with bints are #+, #-, #* and #/. There are
9
10
2. Binary Integers (BINTS)
also many others, which are listed below.
Here is an example of program that just put three bints in the stack,
using the three methods:
1
5
::
13
(13d or Dh)
# D
(the same, using preferred method)
BINT13 (in this case, this method is shorter)
;
2.1
Reference
2.1.1
Built-in Binary Integers
Addr.
33107
Name
BINT0
33111
BINT1
3311B
BINT2
33125
BINT3
3312F
BINT4
33139
BINT5
33143
BINT6
3314D
BINT7
33157
BINT8
33161
BINT9
3316B
BINT10
Description
0d 0h
aka: ZERO, any
1d 1h
aka: ONE, real, MEMERR
2d 2h
aka: TWO, cmp
3d 3h
aka: THREE, str
4d 4h
aka: FOUR, arry
5d 5h
aka: FIVE, list
6d 6h
aka: SIX, id, idnt
7d 7h
aka: SEVEN, lam
8d 8h
aka: EIGHT, seco
9d 9h
aka: NINE, symb
10d Ah
aka: TEN, sym
2.1. Reference
Addr.
33175
Name
BINT11
3317F
BINT12
33189
BINT13
33193
BINT14
3319D
BINT15
331A7
BINT16
331B1
BINT17
331BB
BINT18
331C5
BINT19
331CF
BINT20
331D9
BINT21
331E3
BINT22
331ED
BINT23
331F7
BINT24
33201
BINT25
3320B
BINT26
33215
BINT27
3321F
BINT28
33229
BINT29
11
Description
11d Bh
aka: ELEVEN, hxs
12d Ch
aka: TWELVE, grob
13d Dh
aka: TAGGED, THIRTEEN
14d Eh
aka: EXT, FOURTEEN, unitob
15d Fh
aka: FIFTEEN, rompointer
16d 10h
aka: REALOB, SIXTEEN
17d 11h
aka: SEVENTEEN, 2REAL, REALREAL
18d 12h
aka: EIGHTEEN
19d 13h
aka: NINETEEN
20d 14h
aka: TWENTY
21d 15h
aka: TWENTYONE
22d 16h
aka: TWENTYTWO
23d 17h
aka: TWENTYTHREE
24d 18h
aka: TWENTYFOUR
25d 19h
aka: TWENTYFIVE
26d 1Ah
aka: REALSYM, TWENTYSIX
27d 1Bh
aka: TWENTYSEVEN
28d 1Ch
aka: TWENTYEIGHT
29d 1Dh
aka: TWENTYNINE
12
2. Binary Integers (BINTS)
Addr.
33233
Name
BINT30
3323D
BINT31
33247
BINT32
33251
BINT33
3325B
BINT34
33265
BINT35
3326F
BINT36
33279
BINT37
33283
BINT38
3328D
BINT39
33297
BINT40
332A1
BINT41
332AB
BINT42
332B5
BINT43
332BF
BINT44
332C9
BINT45
332D3
BINT46
332DD
BINT47
332E7
BINT48
Description
30d 1Eh
aka: REALEXT, THIRTY
31d 1Fh
aka: THIRTYONE
32d 20h
aka: THIRTYTWO
33d 21h
aka: THIRTYTHREE
34d 22h
aka: THIRTYFOUR
35d 23h
aka: THIRTYFIVE
36d 24h
aka: TTHIRTYSIX
37d 25h
aka: THIRTYSEVEN
38d 26h
aka: THIRTYEIGHT
39d 27h
aka: THIRTYNINE
40d 28h
aka: FORTY, FOURTY
41d 29h
aka: FORTYONE
42d 2Ah
aka: FORTYTWO
43d 2Bh
aka: FORTYTHREE
44d 2Ch
aka: FORTYFOUR
45d 2Dh
aka: FORTYFIVE
46d 2Eh
aka: FORTYSIX
47d 2Fh
aka: FORTYSEVEN
48d 30h
aka: FORTYEIGHT
2.1. Reference
Addr.
332F1
Name
BINT49
332FB
BINT50
33305
BINT51
3330F
BINT52
33319
BINT53
33323
BINT54
3332D
BINT55
33337
BINT56
33341
BINT57
3334B
BINT58
33355
BINT59
3335F
BINT60
33369
BINT61
33373
BINT62
3337D
BINT63
33387
BINT64
33391
BINT65
3339B
BINT66
333A5
BINT67
13
Description
49d 31h
aka: FORTYNINE
50d 32h
aka: FIFTY
51d 33h
aka: FIFTYONE
52d 34h
aka: FIFTYTWO
53d 35h
aka: FIFTYTHREE, STRLIST, THREEFIVE
54d 36h
aka: FIFTYFOUR
55d 37h
aka: FIFTYFIVE
56d 38h
aka: FIFTYSIX
57d 39h
aka: FIFTYSEVEN
58d 3Ah
aka: FIFTYEIGHT
59d 3Bh
aka: FIFTYNINE
60d 3Ch
aka: SIXTY
61d 3Dh
aka: SIXTYONE
62d 3Eh
aka: SIXTYTWO
63d 3Fh
aka: SIXTYTHREE
64d 40h
aka: BINT40h, SIXTYFOUR, YHI
65d 41h
aka: ARRYREAL
66d 42h
aka: FOURTWO
67d 43h
aka: FOURTHREE
14
2. Binary Integers (BINTS)
Addr.
333AF
Name
BINT68
333B9
BINT69
333C3
BINT70
333CD
333D7
333E1
333EB
BINT71
BINT72
BINT73
BINT74
333F5
333FF
33409
33413
3341D
BINT75
BINT76
BINT77
BINT78
BINT79
33427
BINT80
33431
BINT81
3343B
BINT82
33445
BINT83
3344F
BINT84
33459
BINT85
33463
BINT86
3346D
BINT87
33477
33481
3348B
33495
BINT88
BINT89
BINT90
BINT91
3349F
BINT92
Description
68d 44h
aka: SIXTYEIGHT
69d 45h
aka: FOURFIVE
70d 46h
aka: SEVENTY
71d 47h
72d 48h
73d 49h
74d 4Ah
aka: SEVENTYFOUR
75d 4Bh
76d 4Ch
77d 4Dh
78d 4Eh
79d 4Fh
aka: SEVENTYNINE
80d 50h
aka: EIGHTY
81d 51h
aka: EIGHTYONE, LISTREAL
82d 52h
aka: LISTCMP
83d 53h
aka: FIVETHREE
84d 54h
aka: FIVEFOUR
85d 55h
aka: 2LIST
86d 56h
aka: FIVESIX
87d 57h
aka: LISTLAM
88d 58h
89d 59h
90d 5Ah
91d 5Bh
aka: BINT_91d
92d 5Ch
2.1. Reference
Addr.
334A9
334B3
334BD
334C7
Name
BINT93
BINT94
BINT95
BINT96
334D1
BINT97
334DB
334E5
334EF
BINT98
BINT99
BINT100
334F9
33503
3350D
33517
33521
3352B
33535
3353F
33549
33553
3355D
BINT101
BINT102
BINT103
BINT104
BINT105
BINT106
BINT107
BINT108
BINT109
BINT110
BINT111
33567
33571
3357B
33585
BINT112
BINT113
BINT114
BINT115
3358F
BINT116
33599
335A3
335AD
335B7
335C1
335CB
BINT117
BINT118
BINT119
BINT120
BINT121
BINT122
335D5
335DF
BINT123
BINT124
15
Description
93d 5Dh
94d 5Eh
95d 5Fh
96d 60h
aka: BINT_96d
97d 61h
aka: IDREAL
98d 62h
99d 63h
100d 64h
aka: ONEHUNDRED
101d 65h
102d 66h
103d 67h
104d 68h
105d 69h
106d 6Ah
107d 6Bh
108d 6Ch
109d 6Dh
110d 6Eh
111d 6Fh
aka: char
112d 70h
113d 71h
114d 72h
115d 73h
aka: BINT_115d
116d 74h
aka: BINT_116d
117d 75h
118d 76h
119d 77h
120d 78h
121d 79h
122d 7Ah
aka: BINT_122d
123d 7Bh
124d 7Ch
16
2. Binary Integers (BINTS)
Addr.
335E9
335F3
335FD
33607
Name
BINT125
BINT126
BINT127
BINT128
33611
3361B
BINT129
BINT130
33625
BINT131
3362F
33639
33643
3364D
33657
3EAFB
3366B
33675
3367F
39E6B
33689
33693
3369D
336A7
336B1
336BB
3BD4C
336C5
38275
336CF
336D9
3E7DA
336E3
3BD65
336ED
336F7
33701
3370B
33715
(#8F)
SYMBREAL
(#92)
(#9A)
SYMBUNIT
(#9F)
SYMOB
SYMREAL
(#A2)
(#A4)
(#A5)
SYMID
SYMLAM
(#A9)
SYMSYM
SYMEXT
(#AF)
(HXSREAL)
(#BB)
(2HXS)
BINTC0h
(#C8)
2GROB
(#CF)
TAGGEDANY
EXTREAL
EXTSYM
2EXT
ROMPANY
Description
125d 7Dh
126d 7Eh
127d 7Fh
128d 80h
aka: BINT80h
129d 81h
130d 82h
aka: BINT130d, BINT_130d, XHI-1
131d 83h
aka: BINT_131d, BINT131d, XHI
143d 8Fh
145d 91h
146d 92h
154d 9Ah
158d 9Eh
159d 9Fh
160d A0h
161d A1h
162d A2h
164d A4h
165d A5h
166d A6h
167d A7h
169d A9h
170d AAh
174d AEh
175d AFh
177d B1h
187d BBh
187d BBh
192d C0h
200d C8h
204d CCh
207d CFh
208d D0h
225d E1h
234d EAh
238d EEh
240d F0h
2.1. Reference
Addr.
3371F
33729
33733
3373D
33747
33751
3375B
33765
3E17B
3376F
33779
2777E
33783
3378D
33797
337A1
337AB
337B5
337BF
337C9
337D3
337DD
337E7
337F1
337FB
33805
3380F
33819
3A1C2
33823
3B9FA
3C11E
3B928
3382D
33837
3BA2D
3B93D
33841
3C10F
Name
BINT253
BINT255d
REALOBOB
#_102
#SyntaxErr
(BINT_263d)
(#110)
3REAL
(#111)
(Err#Kill)
(Err#NoLstStk)
(#12F)
(#NoRoomForSt)
(#132)
(REALSTRSTR)
(#134)
(#135)
(#136)
(#137)
(#138)
(#139)
(#13A)
(#13B)
(#13D)
(#13E)
INTEGER337
(#200)
(Err#NoLstArg)
(#304)
STRREALREAL
(#313)
(#410)
(#411)
(ARRYREALREAL)
(#412)
(#414)
(#415)
(#444)
(#450)
17
Description
253d FDh
255d FFh
256d 100h
258d 102h
262d 106h
263d 107h
272d 110h
273d 111h
273d 111h
291d 123h
292d 124h
303d 12Fh
305d 131h
306d 132h
307d 133h
308d 134h
309d 135h
310d 136h
311d 137h
312d 138h
313d 139h
314d 13Ah
315d 13Bh
317d 13Dh
318d 13Eh
337d 151h
512d 200h
517d 205h
772d 304h
785d 311h
787d 313h
1040d 410h
1041d 411h
1041d 411h
1042d 412h
1044d 414h
1045d 415h
1092d 444h
1104d 450h
18
Addr.
3B952
3384B
33855
3BA18
3B913
3A12D
3385F
33869
3BA09
33873
277F6
27800
2780A
27814
2781E
27828
27832
2783C
27846
2768E
27698
3387D
276AC
276B6
276C0
276CA
276D4
276DE
276E8
27792
2779C
277A6
277B0
277BA
277C4
277CE
277D8
277E2
277EC
2. Binary Integers (BINTS)
Name
(#451)
(ARRYLISTREAL)
(#452)
(#454)
(#455)
(#4FF)
(#510)
(#511)
(#515)
(#550)
(#605)
(#606)
(#607)
(#608)
(#609)
(#60A)
(#60B)
(#60C)
(#60D)
(#60E)
(#60F)
(IDREALOB)
(#611)
(#612)
(#613)
(#614)
(#615)
(#616)
(#617)
(#618)
(#619)
(#61A)
(#61B)
(#61C)
(#61D)
(#61E)
(#61F)
(#620)
(#621)
Description
1105d 451h
1105d 451h
1106d 452h
1108d 454h
1109d 455h
1279d 4FFh
1296d 510h
1297d 511h
1301d 515h
1360d 550h
1541d 605h
1542d 606h
1543d 607h
1544d 608h
1545d 609h
1546d 60Ah
1547d 60Bh
1548d 60Ch
1549d 60Dh
1550d 60Eh
1551d 60Fh
1552d 610h
1553d 611h
1554d 612h
1555d 613h
1556d 614h
1557d 615h
1558d 616h
1559d 617h
1560d 618h
1561d 619h
1562d 61Ah
1563d 61Bh
1564d 61Ch
1565d 61Dh
1566d 61Eh
1567d 61Fh
1568d 620h
1569d 621h
2.1. Reference
Addr.
276F2
276FC
27706
27710
2771A
27724
2772E
27738
27742
27788
33887
33891
3C17A
3C16B
08DF7
27878
3B976
3C83C
3B967
3C81E
3389B
338A5
338AF
338B9
3E7FF
3E759
3E7E9
3E743
2774C
27756
27882
338C3
27760
2776A
27774
338CD
338D7
338E1
338EB
Name
(#622)
(#623)
(#624)
(#628)
(#629)
(#62A)
(#62B)
(#62C)
(#62D)
(#62E)
(IDLISTOB)
(#700)
(#710)
(#750)
(#7FF)
(#800)
(#822)
(#82C)
(#855)
(#85C)
(#861)
(#862)
(#865)
(#86E)
(#8F1)
(#8FD)
(#9F1)
(#9FD)
(#A01)
(#A02)
Attn#
ATTNERR
(#A04)
(#A05)
(#A06)
(#A11)
(#A12)
(#A1A)
(#A21)
19
Description
1570d 622h
1571d 623h
1572d 624h
1576d 628h
1577d 629h
1578d 62Ah
1579d 62Bh
1580d 62Ch
1581d 62Dh
1582d 62Eh
1616d 650h
1792d 700h
1808d 710h
1872d 750h
2047d 7FFh
2048d 800h
2082d 822h
2092d 82Ch
2133d 855h
2140d 85Ch
2145d 861h
2146d 862h
2149d 865h
2158d 86Eh
2289d 8F1h
2301d 8FDh
2545d 9F1h
2557d 9FDh
2561d A01h
2562d A02h
2563d A03h
2563d A03h
2564d A04h
2565d A05h
2566d A06h
2577d A11h
2578d A12h
2586d A1Ah
2593d A21h
20
Addr.
338F5
338FF
33909
33913
3391D
33927
33931
3393B
33945
3394F
33959
33963
3396D
33977
3C800
3C7E2
3B904
3B8F5
33981
3398B
3C8D0
03FEF
03FF9
03F8B
03FDB
03FA9
03F95
03F9F
20D6F
03FBD
03FE5
03FA9
03FD1
3C8DF
3D50D
3D52B
3D51C
2C4D2
3B7AD
2. Binary Integers (BINTS)
Name
(#A22)
(#A2A)
(#A61)
(#A62)
(#A65)
(#A6E)
(#AA1)
(#AA2)
(#AAA)
(#C06)
(#C07)
(#C08)
Connecting
(#C0B)
(#C2C)
(#C5C)
(#C22)
(#C55)
#CAlarmErr
EXTOBOB
(#2111)
(#2614)
(#2686)
TYPEREAL
(TYPEEREL)
TYPEIDNT
(TYPECMP)
(TYPELIST)
(TYPERRP)
(TYPESYMB)
(TYPEEXT)
(#2E48)
(TYPELAM)
(#5B11)
(#A110)
(#A1A0)
(#AA10)
(#AAA0)
(#BBBB)
Description
2594d A22h
2602d A2Ah
2657d A61h
2658d A62h
2661d A65h
2670d A6Eh
2721d AA1h
2722d AA2h
2730d AAAh
3078d C06h
3079d C07h
3080d C08h
3082d C0Ah
3083d C0Bh
3116d C2Ch
3164d C5Ch
3106d C22h
3157d C55h
3583d DFFh
3584d E00h
8465d 2111h
9748d 2614h
9862d 2686h
10547d 2933h
10581d 2955h
10568d 2948h
10615d 2977h
10868d 2A74h
10902d 2A96h
10936d 2AB8h
10970d 2ADAh
11848d 2E48h
11885d 2E6Dh
23313d 5B11h
41232d A110h
41376 A1A0h
43536d AA10h
43680d AAA0h
48059d BBBBh
2.1. Reference
Addr.
08F1F
38266
03880
091B4
350F5
0803F
08ECE
0657E
33995
03826
39277
038DC
3399F
2.1.2
Name
(#D6A8)
(#FFFF)
(#102A8)
(#2D541)
(#37258)
(#414C1)
(#536A8)
(#61441)
#EXITERR
(#A8241)
(#B437D)
(#E13A8)
MINUSONE
21
Description
54952d D6A8h
65535d FFFFh
66216d 102A8h
185665d 2D541h
225880d 37258h
267457d 414C1h
341672d 536A8h
398401d 61441h
458752d 70000h
688705d A8241h
738173d B437Dh
922536d E13A8h
1048575d FFFFFh
Pushing Several BINTs
Addr.
37287
37294
37305
36B12
Name
ZEROZERO
#ZERO#ONE
#ZERO#SEVEN
ONEONE
37315
37328
3733A
3734A
3735C
3736E
37380
37394
373A8
3558C
355A5
3596D
36AD6
36AEA
36B26
36AFE
#ONE#27
#TWO#ONE
#TWO#TWO
#TWO#FOUR
#THREE#FOUR
#FIVE#FOUR
ZEROZEROZERO
ZEROZEROONE
ZEROZEROTWO
DROPZERO
2DROP00
DROPONE
DUPZERO
DUPONE
DUPTWO
SWAPONE
Description
( → #0 #0 )
( → #0 #1 )
( → #0 #7 )
( → #1 #1 )
aka: ONEDUP
( → #1 #27d )
( → #2 #1 )
( → #2 #2 )
( → #2 #4 )
( → #3 #4 )
( → #5 #4 )
( → #0 #0 #0 )
( → #0 #0 #1 )
( → #0 #0 #2 )
( ob → #0 )
( ob ob → #0 #0 )
( ob → #1 )
( ob → ob ob #0 )
( ob → ob ob #1 )
( ob → ob ob #2 )
( ob ob' → ob' ob #1 )
22
2. Binary Integers (BINTS)
Addr.
35E75
360BB
36568
35EA2
3657C
2.1.3
Name
ZEROSWAP
ZEROOVER
ZEROFALSE
ONESWAP
ONEFALSE
Description
( ob → #0 ob )
( ob → ob #0 ob )
( → #0 F )
( ob → #1 ob )
( → #1 F )
Conversion
Addr.
262F1
35D08
35EB6
3F481
262EC
2F244
Name
COERCE
COERCEDUP
COERCESWAP
COERCE2
%ABSCOERCE
(COERCE&CKSGN)
2F31F
05A03
2F17E
C%>#
HXS>#
2HXSLIST?
05A51
0EF006
CHR>#
ˆZ2BIN
19D006
ˆZ>#
0F0006
ˆCOERCE2Z
Description
( % → # )
( % → # # )
( ob % → # ob )
( % %' → # #' )
( % → # )
( % → # flag )
TRUE if real is greater 0, else FALSE.
( C% → # #' )
( hxs → # )
( { hxs hxs' } → # #' )
Converts list of two hxs to two bints. Generates "Bad Argument Value" for invalid input.
( chr → # )
( Z → # )
Convert Z to bint. Returns FFFFF for overflows. Returns 0 for negative numbers.
( z → # )
Coerces Z to #, overflow error if Z<0 or
Z>9999. 10000 is used to insure that the
#*6 can be represented in BCD on a 5 nibbles
field.
( z2 z1 → #2 #1 )
Converts 2 zints to bints.
2.1. Reference
2.1.4
23
Arithmetic Functions
Addr.
03DBC
03DEF
03E2D
355FD
35602
35607
3560C
35611
35616
3561B
35620
3562A
03DE0
2F13D
Name
#+
#1+
#2+
#3+
#4+
#5+
#6+
#7+
#8+
#9+
#10+
#12+
#(CK#-)
03E0E
03E4E
355DF
355DA
355D5
355D0
03EC2
2632D
#1#2#3#4#5#6#*
#*OVF
03E6F
356B8
3569B
35675
03EF7
03E8E
#2*
#6*
#8*
#10*
#/
#2/
36815
#1-
36851
#1-+
Description
( # #' → #+#' )
( # → #+1 )
( # → #+2 )
( # → #+3 )
( # → #+4 )
( # → #+5 )
( # → #+6 )
( # → #+7 )
( # → #+8 )
( # → #+9 )
( # → #+10 )
( # → #+12 )
( # #' → #-#' )
( # #' → #'' )
If #' is greater than #, returns #0, otherwise returns #-#'.
( # → #-1 )
( # → #-2 )
( # → #-3 )
( # → #-4 )
( # → #-5 )
( # → #-6 )
( # #' → #*#' )
( # #' → #*#' )
0 ≤ result ≤ FFFFF
( # → #*2 )
( # → #*6 )
( # → #*8 )
( # → #*10 )
( # #' → #r #q )
( # → #/2 )
Rounded down.
( # #' → #-#'+1 )
aka: #-+1
( # #' → #+#'-1 )
$1-+ is a typo in EXTABLE.
aka: #+-1, $1-+
24
2. Binary Integers (BINTS)
Addr.
35552
357FC
35E39
36093
3581F
35E4D
360A7
35830
35E61
2F222
35841
28071
Name
#-#2/
#+DUP
#+SWAP
#+OVER
#-DUP
#-SWAP
#-OVER
#1+DUP
#1+SWAP
#1+ROT
#1-DUP
#1-SWAP
3601B
281D5
35E89
#1-ROT
#1-UNROT
#1-1SWAP
35912
3571E
35956
3674D
DUP#1+
DUP#2+
DUP#12DUP#+
3683D
357BB
3592B
DROP#1SWAP#SWAP#1+
29786
('RSWAP#1+)
28099
36829
280AD
28989
367ED
36775
367C5
36761
367B1
36801
28001
SWAP#1+SWAP
SWAP#1SWAP#1-SWAP
(SWAPDROP#1-)
SWAPOVER#OVER#+
OVER#ROT#+
ROT#ROT#1+
ROT#1+UNROT
Description
( # #' → (#-#')/2 )
( # #' → #+#' #+#' )
( ob # #' → #+#' ob )
( ob # #' → ob #+#' ob )
( # #' → #-#' #-#' )
( ob # #' → #-#' ob )
( ob # #' → ob #-#' ob )
( # → #+1 #+1 )
( ob # → #+1 ob )
( ob ob' # → ob' #+1 ob )
( # → #-1 #-1 )
( ob # → #-1 ob )
aka: pull
( ob ob' # → ob' #-1 ob )
( ob ob' # → #-1 ob ob' )
( # → 1 #-1 )
Returns the bint ONE and the result.
( # → # #+1 )
( # → # #+2 )
( # → # #-1 )
( # #' → # #' #+#' )
aka: DUP3PICK#+
( # ob → #-1 )
( # #' → #'-# )
( # ob → ob #+1 )
aka: SWP1+
( # → nob #+1 )
nob is the next object in the runstream.
( # ob → #+1 ob )
( # ob → ob #-1 )
( # ob → #-1 ob )
( ob # → #-1 )
( # #' → #' #-#' )
( # #' → # #'+# )
( # #' → # #'-# )
( # ob #' → ob #'+# )
( # ob #' → ob #'-# )
( # ob ob' → ob ob' #+1 )
( # ob ob' → #+1 ob ob' )
2.1. Reference
25
Addr.
35E07
Name
ROT#+SWAP
36789
3679D
35E20
3PICK#+
4PICK#+
4PICK#+SWAP
35511
3551D
03EB1
#MIN
#MAX
#AND
2.1.5
Description
( # ob #' → #'+#
aka: ROT+SWAP
( # ob #' → # ob
( # ob1 ob2 #' →
( # ob1 ob2 #' →
aka: 4PICK+SWAP
( # #' → #'' )
( # #' → #'' )
( # #' → #'' )
Bitwise AND.
Tests
Addr.
03D19
03D4E
03CE4
03D83
03CC7
03CA6
3530D
352FE
36711
352F1
352E0
366FD
366BC
36739
Name
#=
#<>
#<
#>
#0<>
#0=
#1<>
#1=
#2<>
#2=
#3=
#5=
#<3
#>1
358C2
358F8
363CE
2DUP#<
2DUP#>
ONE_EQ
35268
358DC
36694
352BD
366A8
OVER#=
2DUP#=
OVER#0=
DUP#0=
OVER#<
Description
( # → flag )
( # → flag )
( # → flag )
( # → flag )
( # → flag )
( # → flag )
( # → flag )
( # → flag )
( # → flag )
( # → flag )
( # → flag )
( # → flag )
( # → flag )
( # → flag )
aka: ONE#>
( # #' → # #' flag
( # #' → # #' flag
( # → flag )
Uses EQ test.
( # #' → # flag )
( # #' → # #' flag
( # #' → # #' flag
( # → # flag )
( # #' → # flag )
)
)
)
)
ob )
#'+# )
# ob1 ob2 #'+# )
# ob1 #'+# ob2 )
26
2. Binary Integers (BINTS)
Addr.
3531C
36725
3532B
366D0
Name
DUP#1=
OVER#>
DUP#0<>
DUP#<7
36676
2#0=OR
Description
( # → # flag )
( # #' → # flag )
( # → # flag )
( # → # flag )
Returns TRUE if the argument is smaller then #7.
( # # → flag )
Returns TRUE if either argument is zero.
Chapter 3
Real Numbers
Real numbers can be created in two ways. The first is by just entering
them, without any prefix. But this method can also be used to create bints. So
how does the compiler know when you want a real number and when you want
a bint? If the number includes a radix and/or an exponent, then it is a real
number; otherwise it is a bint.
Because of the possible confusion, the preferred method is to use the
structure % <dec>. This way, you will surely get a real number, and the code
becomes more readable.
As for bints, there are also many built-in real numbers. They are listed
below.
The basic operations using real numbers are %+, %-, %*, %/ and %ˆ. But
there are many others, which are listed below.
There is also another kind of real number, which is not directly accessible to the user and to User RPL programs. They are the Extended (or Long)
Real Numbers. They work like normal real numbers, with two differences: they
have a 15-digit precision opposed to the 12-digit of the normal real numbers,
and their exponents are in the range from -50000 to 50000.
Extended real numbers are created using %% <dec>. If you happen to
get one in the stack, they display like normal reals, but always in scientific
notation. The basic operations are the same, except that they are prefixed with
%% instead of %. Let me make thing one clear, if it is not already: in User RPL,
+ adds any kind of objects, for example real numbers, user binary integers
(which are hexadecimal strings, as we will see later), adds elements to lists,
etc. In System RPL, the word %+ only works for two real numbers. To add two
binary integers, you must use #+. To add extended reals, the word is %%+. If
you call a function with the wrong arguments, there is a possibility that your
system will crash.
To convert from a real number to an extended real number, you can use
the command %>%%. The opposite function is %%>%. To convert from a bint to
a (normal) real number, the function is UNCOERCE, and the opposite function is
27
28
3. Real Numbers
COERCE. Below there is a list of more conversion functions, and other functions
related to real numbers.
3.1
Reference
3.1.1
Addr.
2FB0A
2FAB1
2FA9C
2FA87
2FA72
2FA5D
2FA48
2FA33
2FA1E
2FA09
2FB34
2F937
2FB1F
27118
339BE
339D3
2F94C
270EE
2F961
339A9
2F976
2FAC6
2F98B
2F9A0
2F9B5
2F9CA
2F9DF
2F9F4
339E8
2FCE6
Built-in Real Numbers
Name
%-MAXREAL
%-9
%-8
%-7
%-6
%-5
%-4
%-3
%-2
%-1
%-MINREAL
%0
%MINREAL
%.1
%.5
(%-.5)
%1
(%1.8)
%2
%e
%3
%PI
%4
%5
%6
%7
%8
%9
%10
%11
Description
-9.99E499
-9
-8
-7
-6
-5
-4
-3
-2
-1
-1E-499
0
1E-499
.1
.5
-.5
1
1.8
2
e
3
π
4
5
6
7
8
9
10
11
3.1. Reference
Addr.
2FCFB
2FD10
2FD25
2FD3A
2FD4F
2FD64
2FD79
2FD8E
2FDA3
2FDB8
2FDCD
2FDE2
2FDF7
2FE0C
2FE21
2FE36
2FE4B
2FE60
2FE75
2FE8A
2FE9F
2FEB4
2FEC9
2FEDE
27103
27E5D
339FD
33A12
33A3C
33A27
2FC7D
2FC92
2FCA7
4EA22
2FCBC
2FCD1
4EA37
4EA4C
4EA61
Name
%12
%13
%14
%15
%16
%17
%18
%19
%20
%21
%22
%23
%24
%25
%26
%27
(%28)
(%29)
(%30)
(%31)
(%32)
(%33)
(%34)
(%35)
%80
%100
%180
(%200)
(%400)
%360
(%1200)
(%2400)
(%4800)
(%TICKSsec)
(%9600)
(%15360)
(%TICKSmin)
(%TICKShour)
(%TICKSday)
29
Description
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
80
100
180
200
400
360
1200
2400
4800
8192
9600
15360
491520
29491200
707788800
30
Addr.
4EA76
2FAF5
2F180
3.1.2
3. Real Numbers
Name
(%TICKSweek)
%MAXREAL
1REV
Description
4954521600
9.99E499
( → 6.28318530718 )
( → 360. )
( → 400. )
Returns the angle of a full circle, corresponding
to the current angular mode.
Built-in Extended Real Numbers
Addr.
2FB49
2FBE5
30DC8
2FBFF
2DA11
Name
%%0
%%.1
%%.4
%%.5
cfF
2FB63
2DA2B
%%1
cfC
2FB7D
2FB97
2FADB
30017
2FBB1
2FBCB
27A89
30BEA
2FC19
30CC7
30CEB
%%2
%%3
%%PI
PI/180
%%4
%%5
%%2PI
%%7
%%10
%%12
%%60
Description
0
0.1
0.4
0.5
0.555...
%%5/9 for C↔F conversion.
1
1
For C↔K conversion.
2
3
π
π/180
4
5
2π
7
10
12
60
3.1. Reference
3.1.3
Stack Manipulation Combined with Reals
Addr.
282CC
3.1.4
31
Name
(DROP%0)
Description
( ob → %0 )
Conversion
Addr.
2FFAC
35ECA
2FF9B
30E47
30E5B
262F6
3F495
36BFA
2EFCA
05D2C
2B3FD
Name
%>%%
%>%%SWAP
%%>%
2%>%%
2%%>%
UNCOERCE
UNCOERCE2
UNCOERCE%%
HXS>%
C%>%
%IP>#
0F6006
ˆZ>R
18A006
ˆZ2%%
197006
ˆOBJ2REAL
3.1.5
Addr.
3035F
25E69
26F36
3036C
26F4A
30346
303A7
Description
( % → %% )
( ob % → %% ob )
( %% → % )
( % % → %% %% )
( %% %%' → % %' )
( # → % )
( # # → % % )
( # → %% )
( hxs → % )
( C% → %re %im )
( % → #IP(ABS(%)) )
Does ABS too.
( Z → % )
Converts zint to real.
( Z → %% )
Converts integer to long real.
( z/% → % )
Transforms ob in real.
Real Functions
Name
%+
%+SWAP
%1+
%%1%>%%%*
Description
( % %' → %+%' )
( ob % %' → %+%' ob )
( % → %+1 )
( % %' → %-%' )
( % → %-1 )
( % %' → %%-%%' )
( % %' → %*%' )
32
Addr.
35C18
303E9
3045B
302EB
3030B
302C2
3049A
30489
304F4
304E1
3051A
3052D
30559
30592
3056C
305A5
305DA
3062B
3067C
306AC
306DC
3070C
30799
307C5
307D8
307EB
307FE
30811
3031B
30824
30938
3094B
30971
3095E
305C7
30723
30746
30F14
3. Real Numbers
Name
%10*
%/
%ˆ
%ABS
%CHS
%SGN
%1/
%>%%1/
%SQRT
%>%%SQRT
%EXP
%EXPM1
%LN
%LNP1
%LOG
%ALOG
%SIN
%COS
%TAN
%ASIN
%ACOS
%ATAN
%SINH
%COSH
%TANH
%ASINH
%ACOSH
%ATANH
%MANTISSA
%EXPONENT
%FP
%IP
%FLOOR
%CEIL
%MOD
%ANGLE
%>%%ANGLE
RNDXY
Description
( % → %*10 )
( % %' → %/%' )
( % %' → %ˆ%' )
( % → %' )
( % → -% )
( % → -1/0/1 )
( % → 1/% )
( % → 1/%% )
√
( % → % )
√
( % → %% )
( % → eˆ% )
( % → eˆ%-1 )
( % → LN% )
( % → LN(%+1) )
( % → LOG% )
( % → 10ˆ% )
( % → SIN% )
( % → COS% )
( % → TAN% )
( % → ASIN% )
( % → ACOS% )
( % → ATAN% )
( % → SINH% )
( % → COSH% )
( % → TANH% )
( % → ASINH% )
( % → ACOSH% )
( % → ATANH% )
( % → %mant )
( % → %expn )
( % → %frac )
( % → %int )
( % → %maxint <=% )
( % → %minint >=% )
( % %' → %rem )
( %x %y → %ang )
( %x %y → %%ang )
( % %places → %' )
3.1. Reference
Addr.
30F28
3084D
30860
30837
Name
TRCXY
%COMB
%PERM
%NFACT
30AAF
%FACT
3046C
%NROOT
300F9
300E0
35DBC
309AD
%MIN
%MAX
%MAXorder
%RAN
30A2F
%RANDOMIZE
30A66
DORANDOMIZE
303B4
303F6
3041B
3000D
30040
30E79
30EA6
30EDD
%OF
%T
%CH
%D>R
%R>D
%REC>%POL
%POL>%REC
%SPH>%REC
3.1.6
Addr.
3032E
3033A
30385
3602F
35EDE
36C7C
33
Description
( % %places → %' )
( % %' → COMB(%,%') )
( % %' → PERM(%,%') )
( % → %! )
Calculates factorial of number.
( % → gamma(%+1) )
Calculates gamma(x+1).
( % %n → %' )
Calculates the %nth root of the real number.
Equivalent to user function XROOT.
( % %' → %lesser )
( % %' → %greater )
( % %' → %max %min )
( → %random )
Returns next random number.
( %seed → )
System level RDZ: seeds the random number generator.
( % → )
Stores given number as random number seed.
( % %' → %'/% * 100 )
( % %' → %pctotal )
( % %' → %pcchange )
( %deg → %rad )
( %rad → %deg )
( %r %ang → %x %y )
( %x %y → %r %ang )
( %r %ang %ph → %x %y %z )
Extended Real Functions
Name
%%+
%%%%*
%%*ROT
%%*SWAP
%%*UNROT
Description
( %% %%' →
( %% %%' →
( %% %%' →
( ob ob' %%
( ob %% %%'
( ob ob' %%
%%+%%' )
%%-%%' )
%%*%%' )
%%' → ob' %%+%%' ob )
→ %%+%%' ob )
%%' → %%+%%' ob ob' )
34
3. Real Numbers
Addr.
303D3
36C22
36BE6
3044A
51D006
30612
30767
302DB
306F3
3073A
30757
306C3
302FB
3047D
30642
30653
307B2
30663
30507
30546
30984
Name
%%/
SWAP%%/
%%/>%
%%ˆ
ˆCK%%SQRT
%%SINRAD
%%ANGLERAD
%%ABS
%%ACOSRAD
%%ANGLE
%%ANGLEDEG
%%ASINRAD
%%CHS
%%1/
%%COS
%%COSDEG
%%COSH
%%COSRAD
%%EXP
%%LN
%%FLOOR
3057F
300C7
30E83
30EB0
305F1
30602
30780
304D5
30693
%%LNP1
%%MAX
%%R>P
%%P>R
%%SIN
%%SINDEG
%%SINH
%%SQRT
%%TANRAD
Description
( %% %%' → %%/%%' )
( %% %%' → %%'' )
( %% %%' → % )
( %% %%' → %%ˆ%%' )
( %% → %%/C%% )
( %% → %%' )
( %% → %%' )
( %% → %%abs )
( %% → %%rad )
( %%x %%y → %%ang )
( %%x %%y → %%deg )
( %% → %%rad )
( %% → -%% )
( %% → 1/%% )
( %% → %%cos )
( %%deg → %%cos )
( %% → %%cosh )
( %%rad → %%cos )
( %% → eˆ%% )
( %% → ln %% )
( %% → %%maxint )
aka: %%INT
( %% → %%ln(%%+1) )
( %% %%' → %%max )
( %%x %%y → %%radius %%angle )
( %%r %%ang → %%x %%y )
( %% → %%sin )
( %%deg → %%sin )
( %% → %%sinh )
√
( %% → %% )
( %%rad → %%tan )
3.1. Reference
3.1.7
35
Tests
Addr.
302AC
302B7
3025C
302A1
30275
3028B
30156
36C0E
301BA
Name
%=
%<>
%<
%<=
%>
%>=
%0=
DUP%0=
%0<>
30123
30184
301E2
3020A
30296
3026A
30280
30145
301A6
30112
301F6
30173
301CE
%0<
%0>
%0>=
%%<
%%<=
%%>
%%>=
%%0=
%%0<>
%%0<
%%0<=
%%0>
%%0>=
Description
( % %' → flag )
( % %' → flag )
( % %' → flag )
( % %' → flag )
( % %' → flag )
( % %' → flag )
( % → flag )
( % → flag )
( % → flag )
Can be used to change a user flag into a system flag.
( % → flag )
( % → flag )
( % → flag )
( %% %%' → flag )
( %% %%' → falg )
( %% %%' → flag )
( %% %%' → flag )
( %% → flag )
( %% → flag )
( %% → flag )
( %% → flag )
( %% → flag )
( %% → flag )
Chapter 4
Complex Numbers
Complex numbers can be inserted in your program with the following
structure: C% <real> <imag>. The real and imaginary parts are real numbers, in decimal form. If you have the real and imaginary parts in the stack,
the command %>C% will create a complex number from them. The command
C%>% takes a complex number and returns the real and imaginary parts.
There exists also the Extended (also called Long) Complex Numbers,
which are not directly accessible to the user. They are complex number whose
real and imaginary parts are extended reals. They can be inserted in your
program with C%% <real> <imag>, where the real and imaginary parts are
extended reals. They show in the stack as a normal complex number, but always in scientific notation.
Below is a list of all the commands related to complex numbers, including mathematical operations.
4.1
Reference
4.1.1
Addr.
27DE4
27E09
27DBF
27E2E
Builtin Complex Numbers
Name
C%0
C%1
C%-1
C%%1
Description
(0,0)
(1,0)
(-1,0)
(%%1,%%0)
36
4.1. Reference
4.1.2
Conversion
Addr.
261D9
05C27
362F2
261FC
25E9C
25E9B
18C006
Name
C%%>C%
%>C%
SWAP%>C%
Re>C%
C>Re%
C>Im%
ˆE%%>C%%
261CF
25E82
25E83
05DBC
188006
%%>C%
C%>%%
C%>%%SWAP
C%%>%%
ˆC2C%%
189006
ˆZZ2C%%ext
18B006
ˆC%>C%%
15E006
ˆRIXCext
15F006
ˆIRXCext
4.1.3
37
Description
( C%% → C% )
( %re %im → C% )
( %im %re → C% )
( %re → C% )
( C% → %re )
( C% → %im )
( %%re %%im → C%% )
Converts long reals to long complex.
( %%re %%im → C% )
( C% → %%re %%im )
( C% → %%im %%re )
( C%% → %%re %%im )
( C → C%% )
Converts Gaussian integer to long complex.
( Zre Zim → C%% )
Converts Gaussian integer to long complex.
( C% → C%% )
Converts complex to long complex.
( Zre Zim → C )
Convert integers to complex.
( Zim Zre → C )
Convert integers to complex.
Functions
Addr.
25E8F
25E90
25E94
25E84
50C006
Name
C%CˆC
C%CˆR
C%RˆC
C%ABS
ˆCZABS
261ED
25E81
25E98
25E95
C%CHS
C%1/
C%SQRT
C%SGN
Description
( C% C%' → C%'' )
( C% % → C%' )
( % C% → C%' )
( C% → % )
( complex → real )
Absolute value.
( C% → -C% )
( C% → 1/C% )
√
( C% → C% )
( C% → C%/C%ABS )
38
4. Complex Numbers
Addr.
261F2
25E88
25E91
25E92
25E93
25E87
25E96
25E8D
25E99
25E89
25E85
25E8B
25E97
25E8E
25E9A
25E8A
25E86
25E8C
261DE
261E3
515006
Name
C%CONJ
C%ARG
C%EXP
C%LN
C%LOG
C%ALOG
C%SIN
C%COS
C%TAN
C%ASIN
C%ACOS
C%ATAN
C%SINH
C%COSH
C%TANH
C%ASINH
C%ACOSH
C%ATANH
C%%CHS
C%%CONJ
ˆARG2
517006
ˆQUADRANT
51E006
ˆC%%SQRT
4.1.4
Addr.
261E8
261D4
Description
( C% → C%' )
( C% → % )
( C% → eˆC% )
( C% → ln C% )
( C% → log C% )
( C% → 10ˆC% )
( C% → sin C% )
( C% → cos C% )
( C% → tan C% )
( C% → asin C% )
( C% → acos C% )
( C% → atan C% )
( C% → sinh C% )
( C% → cosh C% )
( C% → tanh C% )
( C% → asinh C% )
( C% → acosh C% )
( C% → atanh C% )
( C%% → -C%% )
( C%% → C%%' )
( im re → arg(ob) )
ARG.
( re im ?re>0 ?im>0 → newre newim % )
Returns Z0 Z1 Z-2 or Z-1 so that arg of corresponding complex number is Z * π/2 + theta where θ is in
the interval [0,π/2].
( C%% → C%%' )
Tests
Name
C%0=
C%%0=
Description
( C% → flag )
( C%% → flag )
Chapter 5
Integers (ZINTS)
This is a new object of the HP49. The integers (called ZINT’s for shorts)
are a numerical type that can represent arbitrarily large integers.
In most cases, you do not really need to worry about integers entered by
the user as arguments for a program. The type checking mechanism (described
in section 29.2) will in most cases transparently convert zints to real numbers.
If you want to work with integers, however, there are several functions
dealing with zints. Since this object type is really a part of the HP49 CAS,
these functions are not described here. Instead, turn to Chapter 42 for documentation on ZINTs.
39
Chapter 6
Characters and Strings
Characters and strings are two data types that hold text.
Characters are not directly available to the user. They can only hold one
character. You create them with CHR <char> or using one of the many built-in
characters (listed below). To convert a character to a bint, use CHR>#. The bint
returned is the ASCII code for the character. The opposite function is #>CHR.
Strings are inserted in your program with $ "<string>", or simply
"<string>". There are some built-in strings, listed below. It is possible to
convert a character into a string, with the command CHR>$.
Two useful and simple functions which deal with strings are LEN$ and
&$. The first returns the length (the number of characters) of a string as a
bint, and the second concatenates two strings. To get a substring, i.e., part of a
string, use the function SUB$. It expects three arguments: the original string,
the starting position (a bint) and the final position (also a bint). Counting
starts at one. Everything between the start and end characters (inclusive) will
be returned. And another function is POS$, which searches a string (in level
three) for a character or string (in level two), starting from a specified position
(a bint, in level one). The position of the first occurrence of the search string
in the string is returned (as a bint) to level one. If it could not be found, #0 is
returned. There are also many other functions, see below for a list.
40
6.1. Reference
6.1
41
Reference
6.1.1
Built-in Characters
Addr.
33D2B
Name
CHR_00
33F77
CHR_Newline
33D32
33F93
CHR_...
CHR_Space
33D39
33D40
33F70
33F85
33D47
33D4E
33D55
33D5C
33D63
33D6A
33D71
33D78
33D7F
33D86
33D8D
33D94
33D9B
33DA2
33DA9
33DB0
33DB7
33DBE
33DC5
33DCC
33DD3
33DDA
33DE1
CHR_DblQuote
CHR_#
CHR_LeftPar
CHR_RightPar
CHR_*
CHR_+
CHR_,
CHR_CHR_.
CHR_/
CHR_0
CHR_1
CHR_2
CHR_3
CHR_4
CHR_5
CHR_6
CHR_7
CHR_8
CHR_9
CHR_:
CHR_;
CHR_<
CHR_=
CHR_>
CHR_A
CHR_B
Description
'\00' (character
0d 00h)
The NULL character.
'\0a' (character 10d 0Ah)
The newline character.
'...'
(character 31d 1Fh)
' '
(character 32d 20h)
The space character.
'"'
(character 34d 22h)
'#'
(character 35d 23h)
'('
(character 40d 28h)
')'
(character 41d 29h)
'*'
(character 42d 2Ah)
'+'
(character 43d 2Bh)
','
(character 44d 2Ch)
'-'
(character 45d 2Dh)
'.'
(character 46d 2Eh)
'/'
(character 47d 2Fh)
'0'
(character 48d 30h)
'1'
(character 49d 31h)
'2'
(character 50d 32h)
'3'
(character 51d 33h)
'4'
(character 52d 34h)
'5'
(character 53d 35h)
'6'
(character 54d 36h)
'7'
(character 55d 37h)
'8'
(character 56d 38h)
'9'
(character 57d 39h)
':'
(character 58d 3Ah)
';'
(character 59d 3Bh)
'<'
(character 60d 3Ch)
'='
(character 61d 3Dh)
'>'
(character 62d 3Eh)
'A'
(character 65d 41h)
'B'
(character 66d 42h)
42
Addr.
33DE8
33DEF
33DF6
33DFD
33E04
33E0B
33E12
33E19
33E20
33E27
33E2E
33E35
33E3C
33E43
33E4A
33E51
33E58
33E5F
33E66
33E6D
33E74
33E7B
33E82
33E89
33FA1
33FA8
33F9A
33E90
33E97
33E9E
33EA5
33EAC
33EB3
33EBA
33EC1
33EC8
33ECF
33ED6
33EDD
6. Characters and Strings
Name
CHR_C
CHR_D
CHR_E
CHR_F
CHR_G
CHR_H
CHR_I
CHR_J
CHR_K
CHR_L
CHR_M
CHR_N
CHR_O
CHR_P
CHR_Q
CHR_R
CHR_S
CHR_T
CHR_U
CHR_V
CHR_W
CHR_X
CHR_Y
CHR_Z
CHR_[
CHR_]
CHR_UndScore
CHR_a
CHR_b
CHR_c
CHR_d
CHR_e
CHR_f
CHR_g
CHR_h
CHR_i
CHR_j
CHR_k
CHR_l
Description
'C'
(character
'D'
(character
'E'
(character
'F'
(character
'G'
(character
'H'
(character
'I'
(character
'J'
(character
'K'
(character
'L'
(character
'M'
(character
'N'
(character
'O'
(character
'P'
(character
'Q'
(character
'R'
(character
'S'
(character
'T'
(character
'U'
(character
'V'
(character
'W' (character
'X'
(character
'Y'
(character
'Z'
(character
'['
(character
']'
(character
'_'
(character
'a'
(character
'b'
(character
'c'
(character
'd'
(character
'e'
(character
'f'
(character
'g'
(character
'h'
(character
'i'
(character
'j'
(character
'k'
(character
'l'
(character
67d
68d
69d
70d
71d
72d
73d
74d
75d
76d
77d
78d
79d
80d
81d
82d
83d
84d
85d
86d
87d
88d
89d
90d
91d
93d
95d
97d
98d
99d
100d
101d
102d
103d
104d
105d
106d
107d
108d
43h)
44h)
45h)
46h)
47h)
48h)
49h)
4Ah)
4Bh)
4Ch)
4Dh)
4Eh)
4Fh)
50h)
51h)
52h)
53h)
54h)
55h)
56h)
57h)
58h)
59h)
5Ah)
5Bh)
5Dh)
5Fh)
61h)
62h)
63h)
64h)
65h)
66h)
67h)
68h)
69h)
6Ah)
6Bh)
6Ch)
6.1. Reference
Addr.
33EE4
33EEB
33EF2
33EF9
33F00
33F07
33F0E
33F15
33F1C
33F23
33F2A
33F31
33F38
33F3F
33FAF
33FB6
33F5B
33F69
33F62
33F46
33F4D
33F54
33F7E
33F8C
33FBD
33FC4
33FCB
6.1.2
Name
CHR_m
CHR_n
CHR_o
CHR_p
CHR_q
CHR_r
CHR_s
CHR_t
CHR_u
CHR_v
CHR_w
CHR_x
CHR_y
CHR_z
CHR_{
CHR_}
CHR_Angle
CHR_Integral
CHR_Deriv
CHR_->
CHR_<<
CHR_>>
CHR_Pi
CHR_Sigma
CHR_<=
CHR_>=
CHR_<>
43
Description
'm'
(character
'n'
(character
'o'
(character
'p'
(character
'q'
(character
'r'
(character
's'
(character
't'
(character
'u'
(character
'v'
(character
'w'
(character
'x'
(character
'y'
(character
'z'
(character
'{'
(character
'{'
(character
''
(character
' '
(character
'∂'
(character
'→' (character
'«'
(character
'»'
(character
'π'
(character
'Σ'
(character
'≤'
(character
'≥'
(character
'='
(character
Built-in Strings
Addr.
055DF
Name
NULL$
33B55
SPACE$
33B39
NEWLINE$
Description
""
Empty string.
" "
aka: tok_
"\0a"
Newline.
109d
110d
111d
112d
113d
114d
115d
116d
117d
118d
119d
120d
121d
122d
123d
125d
128d
132d
136d
141d
171d
187d
135d
133d
137d
138d
139d
5Dh)
6Eh)
6Fh)
70h)
71h)
72h)
73h)
74h)
75h)
76h)
77h)
78h)
79h)
7Ah)
7Bh)
7Dh)
80h)
84h)
88h)
8Dh)
ABh)
BBh)
87h)
85h)
89h)
8Ah)
8Bh)
44
6. Characters and Strings
Addr.
27195
Name
CRLF$
340A4
340B4
33FF2
33FE2
$_RAD
$_GRAD
$_XYZ
$_R<Z
33FD2
$_R<<
34076
34064
34088
34002
34010
3401E
3402C
$_EXIT
$_ECHO
$_Undefined
$_<<>>
$_{}
$_[]
$_''
3403A
34048
34056
$_::
$_LRParens
$_2DQ
33B91
33B85
tok,
tok'
33BFD
33B9D
2D848
2D86D
2D8AD
33A77
33AD7
33C09
272D9
33C4D
33C59
33CAD
33CB9
33ABF
toktok.
tok_g
tok_m
tok_s
tok{
tok<<
tok=
tok->
tok0
tok1
tok8
tok9
tokESC
Description
"\0d\0a"
Carriage return and line feed.
"RAD"
"GRAD"
"XYZ"
"RZ"
"R<angle>Z"
"R"
"R<angle><angle>"
"EXIT"
"ECHO"
"Undefined"
"«»"
"{}"
"[]"
"''"
Two single quotes.
"::"
"()"
""""
Two double quotes.
","
"'"
One single quote.
"-"
"."
"g"
"m"
"s"
"{"
"«"
"="
"→"
"0"
"1"
"8"
"9"
"<ESC>"
Escape character.
6.1. Reference
Addr.
33AE3
33B79
Name
tokexponent
tokquote
33A8F
33AA7
33AB3
33BD9
33BF1
33BE5
33C65
33C71
33C7D
33C89
33C95
33CA1
33BA9
33ACB
33AEF
33C2D
33C3F
33C21
33B45
33BB5
33BC1
33AFB
33C15
33B61
33A9B
33B07
33A6B
33A51
33BCD
33A83
33B13
toksharp
(tok$)
(tok&)
(tok*)
(tok+)
(tok/)
(tok2)
(tok3)
(tok4)
(tok5)
(tok6)
(tok7)
(tok;)
(tok>>)
(tokanglesign)
(tokCTGROB)
(tokCTSTR)
(tokDER)
($DER)
(toklparen)
(tokrparen)
(tokSIGMA)
(tokSQRT)
(tokUNKNOWN)
(tokuscore)
(tokWHERE)
(tok[)
(tok])
(tokˆ)
(tok})
(14SPACES$)
45
Description
"E"
"""
One double quote.
"#"
"$"
"&"
"*"
"+"
"/"
"2"
"3"
"4"
"5"
"6"
"7"
"8"
"»"
""
"GROB"
"C$"
"∂"
"der"
"("
")"
"Σ"
√
" "
"UNKNOWN"
"_"
"|"
"["
"]"
"ˆ"
"}"
"
"
String of 14 spaces.
46
6.1.3
6. Characters and Strings
Built-in Strings with Stack Manipulation
Addr.
35D94
Name
NULL$SWAP
04D3E
DROPNULL$
25EEC
NULL$TEMP
6.1.4
Description
( ob → $ ob )
NULL$, then SWAP.
( ob → NULL$ )
DROP then NULL$.
( → $ )
Creates null string in temporary memory (NULL$,
then TOTEMPOB).
Conversion
Addr.
25F77
Name
#>$
25F72
#:>$
25F0F
a%>$
05BE9
ID>$
25EB3
DOCHR
0F1006
ˆZ>S
2EFC1
hxs>$
2EFC0
HXS>$
Description
( # → $ )
Creates string from the bint (decimal).
( # → "#: " )
Creates string from the bint and appends a colon and a
space. Ex: "1: "
( % → $ )
Converts real number into string using current display
mode.
aka: a%>$,
( id/lam → $ )
Converts identifier into string.
( % → $ )
Creates string of the character with the number specified.
( Z → $ )
Converts Z into a string (decimal).
( hxs → $ )
Uses current display mode and wordsize.
( hxs → $ )
Does hxs>$ and then appends base character.
6.1. Reference
6.1.5
47
Management
Addr.
05A75
Name
#>CHR
37AA5
CHR>$
05636
LEN$
357E2
DUPLEN$
05622
OVERLEN$
361DA
NEWLINE$&$
2F31A
APNDCRLF
050ED
CAR$
0516C
CDR$
378FA
POS$
378FA
POSCHR
37906
POS$REV
37906
POSCHRREV
Description
( # → chr )
Returns character with the specified ASCII
code.
( chr → $* Strings )
Converts a character into a string.
( $ → #length )
Returns length in bytes.
( $ → $ # )
DUP then LEN$.
( $ ob → $ ob #len )
OVER then LEN$.
( $ → "$\0a" )
Appends newline character to string.
aka: NEWLINE&$
( $ → $' )
Appends carriage return and line feed to
string.
( $ → chr )
Returns first character of string as a string, or
NULL$ for null string.
( $ → $' )
Returns string without first character, or
NULL$ for null string.
( $ $find start# → #pos )
Search for $find in $search, starting at position #start. Returns position of $find or 0 if not
found. Same entry as POSCHR.
( $search chr #start → #pos )
Same entry as POS$.
( $ $find #limit → #pos )
Searches backwards from #limit to #1. Same
entry as POSCHRREV.
( $seach chr #start → #pos )
Same entry as POS$REV.
48
6. Characters and Strings
Addr.
25EA0
Name
COERCE$22
2F16D
Blank$
2EEF0
PromptIdUtil
25EF8
SEP$NL
09A003
(ˆWRAP$)
05733
SUB$
3628E
#1-SUB$
362A2
1_#1-SUB$
362B6
LAST$
362CA
#1+LAST$
35DA8
SUB$SWAP
2A5CA
SUB$1#
Description
( $ → $' )
If the string is longer than 22 characters, truncates it to 21 characters and appends "...".
( #len → $ )
Creates a string with the specified number of
spaces.
( id ob → $ )
Creates string of the form "id: ob".
( $ → $' $'' )
Separates string at the first newline. $'' is the
substring before the first newline; $' the substring after the first newline.
( $ #width → $' )
Replace SPACE chars with NEWLINE in order to fit the text in the given #width. Used by
ViewStrObject. Very fast (bang type).
( $ #start #end → $' )
Returns substring between specified positions.
( $ #start #end+#1 → $' )
Does #1- and then SUB$.
( $ #end → $' )
Returns substring from the first character to
the character before the specified position.
aka: 1_#1-SUB
( $ #start → $' )
Returns substring from the specified start position to the end (inclusive).
( $ #start-#1 → $' )
Returns substring from the specified start position to the end (exclusive).
( ob $ # #' → $' ob )
SUB$ then SWAP.
( $ # → #' )
Returns bint with ASCII code of character at
the specified position.
6.1. Reference
Addr.
34C82
Name
EXPAND
05193
&$
36FF6
&$SWAP
353CD
!append$
3533C
!insert$
35F6A
!append$SWAP
35369
!!append$?
353F7
!!append$
353EB
!!insert$
0525B
>H$
052EE
>T$
35BD7
APPEND_SPACE
35346
SWAP&$
2EED3
TIMESTR
25E7C
AND$
49
Description
( hxs #nibs → hxs' )
Appends null characters to the string. Since
refers to the number of nibbles, you must use
a number twice as large as the number of null
characters you want appended.
( $ $' → $+$' )
Concatenates two strings.
( ob $ $' → $+$' ob )
&$ then SWAP.
( $ $' → $+$' )
Tries &$, if not enough memory does !!append$?.
( $ $' → $'+$ )
Does SWAP then !append$.
( ob $ $' → $+$' ob )
!append$ then SWAP.
( $ $' → $+$' )
Attempts append "in place" if target is in tempob.
( $ $' → $+$' )
Tries appending "in place".
( $ $' → $'+$ )
Tries inserting "in place".
( $ chr → $' )
Prepends character to string
( $ chr → $' )
Appends character to string.
( $ → $' )
Appends space to string.
( $ $' → $'+$ )
Concatenates two strings.
( %dt %tm → "dy dt tm" )
Returns string representation of time, using
current format. Example:
"WED 06/24/98 10:00:45A"
( $1 $2 → $' )
Logical AND. Errors if strings are not the same
length.
50
6. Characters and Strings
Addr.
25EF0
Name
OR$
25F0D
XOR$
2F1A7
CHARSEDIT
6.1.6
Description
( $ $' → $'' )
Logical OR. Errors if strings are not the same
length.
( $ $' → $'' )
Logical XOR. Errors if strings are not the same
length.
( → )
HP49 character browser. This is an interactive application from which characters can be
echoed into the command line.
Parsing Strings
Addr.
25EB7
Name
DOSTR>
2EF62
palparse
25E68
!*trior
25E67
!*triand
26206
tok8cktrior
261BB
tok8trior
29E67
nultrior
25EDB
GetNextToken
Description
( $ → ? )
Internal version of STR→.
( $ → ob T )
( $ → $ #pos $' F )
Tries parsing a string into an object. If successful, returns object and TRUE, otherwise returns
position of error, the offending part of the string
$', and FALSE. If the string contains several arguments, the resulting object is a secondary containing these objects.
( F → <SKIP> )
( T T → <COLA> )
( T T → )
( F T → F T <SEMI> )
( $1 $1 → :: $1 <Ob1> ; )
( $1 $2 → :: $1 <Ob2> <Rest> ; )
( GNT data $1 $1 → :: GNT data GetNextToken ; )
( GNT data $1 $2 → :: $1 <Ob1>
<Rest> ; )
( NULL$ → :: ; )
( $ → :: $ <Ob1> <Rest> ; )
( hxs-mask $ #start → hxs-mask $
#next $token )
6.1. Reference
Addr.
2F33C
Name
getmatchtok
2EF6E
ParseFail
2EF6F
DispBadToken
6.1.7
51
Description
( hxs-mask $ #loc $_tok → hxs-mask $
#next $match )
( ob $parsed #pos $' → )
Uses DispBadToken to re-edit the parsed string
and displays "Syntax Error".
( ob $parsed #pos $' → )
Re-edits the parsed string, positions the cursor
to the location of the error. Used by ParseFail.
Decompilation
Addr.
2F191
Name
!DcompWidth
2F190
DcompWidth@
26459
setStdWid
2645E
setStdEditWid
25F13
stkdecomp$w
Description
( # → )
Sets the width (in characters) of decompiled
strings. This width is used to cut the resulting string (for stack display) or to break
it into lines (mostly for editing). Note that
most decompilation entries reset this value
to the stack or editor width. Use stkdecomp$w and editdecomp$w to make sure
the current width is used and not changed.
( → # )
Recalls the width of decompiled strings (in
characters).
( → )
Sets DcompWidth to the standard value for
stack display, either 19 or 30 characters, depending on system flag 72 (stack minifont).
( → )
Sets DcompWidth to the width for editing,
either 21 or 32 characters, depending on system flag 73 (edit minifont).
( ob → $ )
Decompiles for stack display using the current DcompWidth to cut the string if it is too
long.
52
6. Characters and Strings
Addr.
25E6D
Name
1stkdecomp$w
2A842
Decomp1Line
2A904
RPNDecomp1Line
25E6F
>Review$
2A8E4
DecompStd1Line32
2A9C4
RPNDecompStd1Line32
2A8C9
DecompStd1Line
2A9A4
RPNDecompStd1Line
2A893
Decomp#Disp
2A964
RPNDecomp#Disp
Description
( ob → $ )
Calls setStdWid and decompiles for stack
display (cutting the string if necessary).
( ob → $ )
Same as 1stkdecomp$w.
( ob → $ )
Same as Decomp1Line but enforce RPN
mode (system flag 95 clear) during execution.
( id → $ )
Makes a string from the variable name
and its contents (decompiled with Decomp1Line), for display with the review
key.
( ob → $ )
Sets 32 as DcompWidth and decompiles using stkdecomp$w.
( ob → $ )
Same as DecompStd1Line32 but enforce
RPN mode (system flag 95 clear) during execution.
( ob → $ )
Calls setStdWid and decompiles, cutting if
the string becomes too long.
( ob → $ )
Same as DecompStd1Line but enforce RPN
mode (system flag 95 clear) during execution.
( ob # → $ )
Calls setStdWid and decompiles ob (UserRPL components only), breaks the string
into lines and returns the first #+1 lines.
Used for multiline display in stack level 1.
( ob # → $ )
Same as Decomp#Disp but enforce RPN
mode (system flag 95 clear) during execution.
6.1. Reference
Addr.
2A878
Name
Decomp#Line
2A944
RPNDecomp#Line
25F11
editdecomp$w
25ECE
EDITDECOMP$
2A85D
DecompEdit
2A924
RPNDecompEdit
2AA43
AlgDecomp
25EAA
DECOMP$
39CB3
(ob&$)
39C9F
($&ob)
53
Description
( ob # → $ )
Similar to Decomp#Disp, but the returned
string is an internal representation of the
different lines to be displayed. Used for multiline display in stack level 1.
( ob # → $ )
Same as Decomp#Line but enforce RPN
mode (system flag 95 clear) during execution.
( ob → $ )
Decompiles entire object for editing. It only
decompiles the UserRPL components. Some
System RPL entries like TakeOver are simply skipped, others are written as "External". Breaks the resulting strings into lines
using the current DcompWidth.
( ob → $ )
Calls setStdEditWid and the decompiles
for editing like editdecomp$w.
( ob → $ )
Same as EDITDECOMP$.
( ob → $ )
Same as DecompEdit but enforce RPN
mode (system flag 95 clear) during execution.
( ob → $ )
Calls DecompEdit with a few checks around
it.
( ob → $ )
Calls setStdWid and decompiles entire object (UserRPL components only). Breaks
the string into lines using DcompWidth as
width.
( ob $ → "ob$" )
Applies DECOMP$ to ob and concatenates
with the string.
( $ ob → "$ob" )
Applies DECOMP$ to ob and concatenates
with the string.
54
6. Characters and Strings
Addr.
25EB1
Name
DO>STR
1A7006
ˆDO>STRID
2A8AE
DecompEcho
2A984
RPNDecompEcho
2F1BF
Decomp%Short
001004
ˆFSTR1
003004
ˆFSTR3
004004
ˆFSTR4
005004
ˆFSTR5
Description
( $ → $ )
( ob → $ )
Internal version of →STR.
( id/ob → $ )
Like DO>STR but without quotes for id.
( ob → $ )
Calls setStdEditWid and decompiles the
entire object (UserRPL only) into a single
line.
( ob → $ )
Same as DecompEcho but enforce RPN
mode (system flag 95 clear) during execution.
( % #width → $ )
Decompiles a real number into a string of
the given #width. It will drop less significant digits or add zeros as needed, but will
also exceed #width when necessary. E.g. "1.e-33" cannot be written with less than 7
characters, so even if #width is less, 7 chars
will be used. %0 is always decompiled as "0".
( ob → $ )
The decompiler used by stkdecomp$w,
1stkdecomp$w, Decomp1Line, DecompStd1Line32. DcompWidth must be set before this is called.
( ob # → $ )
The decompiler used by Decomp#Line.
DcompWidth must be set before this is
called.
( ob → $ )
The decompiler used by editdecomp$w,
DecompEdit, EDITDECOMP$. DcompWidth
must be set before this is called.
( ob → $ )
The decompiler used by DecompEcho.
DcompWidth must be set before this is
called.
6.1. Reference
55
Addr.
006004
Name
ˆFSTR6
007004
ˆFSTR7
009004
ˆFSTR9
00D004
ˆFSTR13
35B82
palrompdcmp
6.1.8
Addr.
0556F
36252
2F321
Description
( ob # → $ )
The decompiler used by Decomp#Line.
DcompWidth must be set before this is
called.
( ob → $ )
The decompiler used by DO>STR. DcompWidth must be set before this is called.
( ob → $ )
The decompiler used by DecompStd1Line.
DcompWidth must be set before this is
called.
( ob → $ )
The decompiler used by DECOMP$. DcompWidth must be set before this is called.
( romptr → $ T )
Decompiles a rompointer for the UserRPL
stack. If it is a named rompointer, returns
the name. Otherwise returns "XLIB n m".
String Tests
Name
NULL$?
DUPNULL$?
CkChr00
Description
( ob → flag )
( ob → ob flag )
( $ → $ flag )
Returns FALSE if string contains any null characters.
Chapter 7
Hex Strings
Hexadecimal strings are the numbers that are called Binary Integers
in the manual, which can be represented in several bases. In System RPL
they are called Hexadecimal Strings. They are created using the structure
HXS <len> <hexbody>. len is the length of the string (number of nibbles or
hexadecimal digits), in hexadecimal form, and hexbody is the actual contents
of it. The tricky part about it is that because of the HP internal architecture, you must enter the contents in reverse order. To get, for example, the
hex string #12AD7h, you must enter HXS 5 7DA21. To get #12345678h use
HXS 8 87654321. In System RPL, hexadecimal strings can be of any length,
unlike in User RPL, where they are limited to 16 nibbles or 64 bits.
To convert an hex string to and from a bint, use the commands HXS>#
and #>HXS. To convert an HXS to and from a real number, use #>% (or HXS>%)
and %>#.
See below for more commands related to hex strings.
7.1
Reference
7.1.1
Conversion
Addr.
059CC
Name
#>HXS
2EFCB
%>#
Description
( # → hxs )
Length will be five.
( % → # )
Converts real number into hxs. Should be called %>HXS.
56
7.1. Reference
7.1.2
57
General Functions
Addr.
2EFBE
Name
WORDSIZE
2EFAA
dostws
055D5
NULLHXS
0518A
&HXS
34C82
EXPAND
05616
LENHXS
05815
SUBHXS
2EFB9
bit+
2EFC8
bit%#+
2EFC9
bit#%+
2EFBA
bit-
2EFC6
bit%#-
2EFC7
bit#%-
2EFBC
bit*
2EFC4
bit%#*
2EFC5
bit#%*
2EFBD
bit/
2EFC2
bit%#/
Description
( → # )
Returns the current wordsize as a bint.
( # → )
Sets the current wordsize.
HXS 0
Puts a null hxs in the stack.
( hxs hxs' → hxs'' )
Appends hxs'' to hxs'.
( hxs #nibs → hxs' )
Appends #nibs zero nibbles to the hxs.
( hxs → #nibs )
Returns length in nibbles.
( hxs #m #n → hxs' )
Returns sub hxs string.
( hxs hxs' → hxs'' )
Adds two hxs.
( % hxs → hxs' )
Adds real to hxs, returns hxs.
( hxs % → hxs' )
Adds real to hxs, returns hxs.
( hxs hxs' → hxs'' )
Subtracts hxs2 from hxs1.
( % hxs → hxs' )
Subtracts hxs from real, returns hxs.
( hxs % → hxs' )
Subtracts real from hxs, returns hxs.
( hxs hxs' → hxs'' )
Multiplies two hxs.
( % hxs → hxs' )
Multiplies real by hxs, returns hxs.
( hxs % → hxs' )
Multiplies hxs by real, returns hxs.
( hxs hxs' → hxs'' )
Divides hxs1 by hxs2.
( % hxs → hxs' )
Divides real by hxs, returns hxs.
58
7. Hex Strings
Addr.
2EFC3
Name
bit#%/
2EFAC
bitAND
2EFAD
bitOR
2EFAE
bitXOR
2EFAF
bitNOT
2EFB8
bitASR
2EFB6
bitRL
2EFB7
bitRLB
2EFB4
bitRR
2EFB5
bitRRB
2EFB0
bitSL
2EFB1
bitSLB
2EFB2
bitSR
2EFB3
bitSRB
7.1.3
Description
( hxs % → hxs' )
Divides hxs by real, returns hxs.
( hxs hxs' → hxs'' )
Bitwise AND.
( hxs hxs' → hxs'' )
Bitwise OR.
( hxs hxs' → hxs'' )
Bitwise XOR.
( hxs → hxs' )
Bitwise NOT.
( hxs → hxs' )
Arithmetic shift one bit to the right. The most significant bit (the sign) does not change.
( hxs → hxs' )
Shifts circularly one bit to the left.
( hxs → hxs' )
Shifts circularly one byte to the left
( hxs → hxs' )
Shifts circularly one bit to the right.
( hxs → hxs' )
Shifts circularly one byte to the right.
( hxs → hxs' )
Shifts one bit to the left.
( hxs → hxs' )
Shifts one byte to the left.
( hxs → hxs' )
Shifts one bit to the right.
( hxs → hxs' )
Shifts one byte to the right.
Tests
Addr.
2EFCC
Name
HXS==HXS
2F0EE
HXS#HXS
Description
( hxs hxs' → %flag )
== test
( hxs hxs' → %flag )
= test
7.1. Reference
Addr.
2EFCF
Name
HXS<HXS
2EFCD
HXS>HXS
2EFCE
HXS>=HXS
2F0EF
HXS<=HXS
59
Description
( hxs hxs' →
< test
( hxs hxs' →
> test
( hxs hxs' →
≥ test
( hxs hxs' →
≤ test
%flag )
%flag )
%flag )
%flag )
Chapter 8
Identifiers
Identifiers are used to represent the names of objects stored in memory
(i.e., variables). To the user, they appear in the stack between single quotes,
that is, ''. In System RPL, they are created with ID <name>. When you use
this structure, you do not always get the identifier in the stack. It is always
evaluated. So, if variable anumber contains 123.45 and you put somewhere in
your program ID anumber, the identifier is evaluated, recalling the contents
of the variable. This way, the stack will contain 123.45. To put an id to the
stack, use ' ID <name>. As you will see on Chapter 19, the command ' puts
the object after it in the stack. This is called quoting. However, ID <name>
(without the ') will also put the id in the stack if there is no variable called
<name>. This is similar to be behaviour you get when you enter the name of a
variable without the quotes in the HP49 command line.
You can convert a string to an id using $>ID. The opposite transformation is archived with ID>$.
There is also another kind of identifiers: the temporary identifiers, or
lams. These are used when creating local variables, and you will learn about
them later in Chapter 18. They are created with LAM <name>, and work pretty
much like normal ids.
Since ids are closely related to memory access, the functions dealing
with its are listed in Chapter 24.
60
Chapter 9
Tagged Objects
In order to insert a tagged object in your program, use the structure
TAG <tag> <object>. Tag is a string without quotes, and the object can be
anything. To create 0: 1790, for example, you would use TAG 0 % 1790. An
object can have multiple tags, but there is not much use for that.
The word >TAG creates a tagged object, given the object (in level two)
and a string representing the tag (in level one). %>TAG works the same way,
but tags an object with a real number. ID>TAG tags an object with an identifier.
To remove all tags from an object, call STRIPTAGS.
A few more commands related to tagged objects are listed on below.
Note that the programmer seldom needs to worry about tagged objects,
because the type dispatching mechanism (which is described in section 29.2)
can automatically strip tags from the arguments to your program.
9.1
Reference
Addr.
05E81
Name
>TAG
2F266
USER$>TAG
2F223
%>TAG
05F2E
ID>TAG
37B04
TAGOBS
Description
( ob $tag → tagged )
Tags an object.
( ob $tag → tagged )
Maximum of 255 characters in string.
( ob % → tagged )
Converts real to string using current display
mode and tags object.
( ob id/lam → tagged )
Tags object with identifier or lam.
( ob $tag → tagged )
( ob.. { $.. } → tagged... )
Tags one or more objects.
61
62
9. Tagged Objects
Addr.
37ABE
Name
STRIPTAGS
37AEB
STRIPTAGSl2
Description
( tagged → ob )
Strips all tags from the object.
( tagged ob' → ob ob' )
Strips all tags from the object in level two.
Chapter 10
Arrays
There are actually two groups of objects that represent arrays in the
HP49G. The first group (which will be described in this chapter) has existed
since the HP48: the normal arrays (to the user they can be only of real or
complex numbers), and the linked arrays, which are not accessible to the user.
The HP49 introduced a new kind of object to represent arrays: the Symbolic
Matrices. Since these are actually a part of the HP49 CAS, they are described
in Chapter 43.
In User RPL, arrays can be only of real or complex numbers. In System
RPL, you can have arrays of anything, even arrays of arrays. Note that an
array is not a composite object (see Chapter 11), even if it looks like one. Also,
an array can only contain one kind of object.
Using MASD, arrays are entered like this:
1
ARRY [[ % 1. % 2. %3. ]
[ % 4. % 5. %6. ]]
This is not much different from entering an array in the normal HP49
command line.
You can also create an array of (normal, not extended) real or complex
numbers by putting them in order in the stack, and entering a list representing the dimensions of the array (real numbers, not bints) in level one. Then
run ˆXEQ>ARRY. This function does error checks to ensure there are enough
arguments and if they are of the supported types.
The function ˆARSIZE returns the number of elements in an array. You
can get the dimensions of the array with ˆDIMLIMITS, which returns a list of
bints representing the array dimensions. To get one element of an array, put
the element number in level two, the array in level one, and run GETATELN.
You will get the element and TRUE if it was found or only FALSE if the element
does not exist. More array functions are listed below.
There is also another kind of array: the linked arrays. Linked arrays
are like normal arrays, except that they have a table with pointers to all the
63
64
10. Arrays
objects in the array. This makes access to array elements faster, because when
you need to access one object in the linked array, the only thing necessary is to
read the pointer to that object in the table, and go directly there. With normal
arrays, a sequential search is necessary.
The entries here all deal with the normal arrays (even though some of
them also work for CAS’ Symbolic matrices). For entries specific to Symbolic
matrices, see Chapter 43.
10.1
Reference
10.1.1
General Functions
Addr.
0371D
Name
GETATELN
16D006
ˆMDIMS
35FD8
MDIMSDROP
16E006
ˆDIMLIMITS
35E006
ˆARSIZE
36183
OVERARSIZE
260F8
PULLREALEL
260F3
PULLCMPEL
Description
( # [] → ob T )
( # [] → F )
Gets one element from array.
( [[]] → #rows #cols T )
( [] → #elem F )
Returns the size of an array. Equivalent to the
HP48 command MDIMS.
( [2D] → #m #n )
MDIMS followed by DROP.
( [] → { # } )
( [[]] → {# #} )
Returns the size of an array, like the User command SIZE, but the lengths are bints and not reals. Equivalent to the HP48 command DIMLIMITS.
( [] → # )
Returns max # in an array.
( [] ob → [] ob #elts )
Does OVER then ARSIZE.
( [%] # → [%] % )
Gets real element.
( [C%] # → [C%] C% )
Gets complex element.
10.1. Reference
Addr.
26102
Name
PUTEL
26107
PUTREALEL
260FD
PUTCMPEL
33B006
ˆMATTRAN
331006
ˆYext
10.1.2
65
Description
( [%] % # → [%]' )
( [C%] C% # → [C%]' )
Puts element at specified position. Converts to
"short" before. Warning: no copy to tempob first.
( [%] % # → [%]' )
Puts real element at specified position. Warning:
no copy to tempob first.
( [C%] C% # → [C%]' )
Puts complex element at specified position.
Warning: no copy to tempob first.
( M → M' )
Matrix transposition.
( V2 V1 → ob )
Scalar product of symbolic vectors, no check.
Conversion
Addr.
169006
ˆBESTMATRIXTYPE
Name
172006
ˆCKNUMARRY
178006
ˆMATRIX2ARRAY
001007
ˆListToArry
17F006
ˆXEQ>ARRY
17C006
ˆXEQARRY>
Description
( ob → ob )
Converts symbolic matrix with real/cmplex
entries to a numeric array.
( ob → ob )
Tests if ob is a numeric array. Tries to convert
symbolic array to numeric array.
( [] → [] )
( [[]] → [[]] )
Tries to convert a symbolic matrix to a numeric one.
( {}/{{}} → []/[[]] TRUE )
( {}/{{}} → FALSE )
If possible, converts list of lists to normal
array and returns TRUE. Otherwise, returns
FALSE.
( ob1...obn {%n} → [] )
( ob11...obmn {%m %n} → [[mxn]] )
Builds a matrix a la →ARRY.
( [] → ob1...obn meta-arry )
Explodes a matrix a la →ARRY.
66
Addr.
002007
10.1.3
10. Arrays
Name
ˆArryToMatrix
Description
( [] → M )
Converts array to symbolic array.
Statistics
Addr.
2EEDA
Name
STATCLST
2EEDB
STATSADD%
2EEDC
STATN
2EEDF
STATSMIN
2EEDD
STATSMAX
2EEDE
STATMEAN
2EEE0
STATSTDEV
2EEE1
STATTOT
2EEE2
STATVAR
Description
( → )
Clears ΣDAT.
( % → )
Internal Σ+.
( → N )
Internal NΣ.
( → % )
Internal MINΣ.
( → % )
Internal MAXΣ.
( → % )
( → [] )
Internal MEAN.
( → % )
( → [] )
Internal SDEV.
( → % )
( → [] )
Internal TOT.
( → % )
( → [] )
Internal VAR.
Chapter 11
Composite Objects
Composite objects hold other objects inside them. In contrast to arrays,
different types of objects can be part of the same composite. We have already
encountered composite objects in the Introduction, when we used a secondary
to group several commands into a single object.
All composites are similar in structure: they start with a word which
varies depending on the kind of object, and end with the word SEMI.
Besides secondaries, other composite objects are lists, symbolic objects
(described in Chapter 14) and unit objects (described in Chapter 13).
You can create a list by starting it with {, and ending it with }. Inside,
put as many objects as you wish, of any kind. Secondaries are delimited with
:: and ;.
To concatenate two composites, put them in the stack and use &COMP. To
add just one object to the head (beginning) or tail (end) of a composite, first put
the composite in the stack, then the object, and call >HCOMP or >TCOMP, respectively. To get the length of the composite (the number of objects, as a bint), just
put the composite in level one and use the command LENCOMP. To explode the
composite into all its objects and a count (like the User RPL command OBJ→),
use INNERCOMP. The only difference is that the number of objects is returned
as a bint. To get one object of a composite, put the composite in level two, the
object’s position in level one (as a bint, naturally), and run NTHELCOMP. If the
number were out of range, you would get a FALSE, otherwise the object and
TRUE. NTHCOMPDROP is the above entry, followed by DROP. And to get part of
a composite, use the function SUBCOMP. This function takes in level three the
composite, in level two the start position (guess what? a bint) and in level one
the end position (from now on, unless otherwise noted, all numeric arguments
are bints). You will get a composite (of the same type, obviously) with the elements between the start and end positions, inclusive. This function checks
if the numbers are not out of range. If they are, a null composite (an empty
composite) is returned. The same happens if the end position is greater than
the start position.
Other commands are listed in the reference section below.
67
68
11. Composite Objects
11.1
Reference
11.1.1
General Operations
Addr.
0521F
Name
&COMP
052FA
>TCOMP
052C6
>HCOMP
39C8B
(SWAP>HCOMP)
05089
CARCOMP
361C6
?CARCOMP
05153
CDRCOMP
2825E
(2NELCOMPDROP)
2BC006
ˆLASTCOMP
0567B
LENCOMP
3627A
DUPLENCOMP
055B7
NULLCOMP?
36266
DUPNULLCOMP?
Description
( comp comp' → comp'' )
Concatenates two composites.
( comp ob → comp+ob )
Adds ob to tail (end) of composite.
( comp ob → ob+comp )
Adds ob to head (beginning) of composite.
( ob comp → ob+comp )
Does SWAP then >HCOMP.
( comp → ob_head )
( comp_null → comp_null )
Returns first object of the composite, or a null
composite if the argument is a null composite.
( comp T → ob )
( comp F → comp )
If the flag is TRUE, does CARCOMP.
( comp → comp-ob_head )
( comp_null → comp_null )
Returns the composite minus its first object,
or a null composite if the argument is a null
composite.
( comp → ob2 )
Gets the second element of composite.
( comp → ob )
Gets the last element of composite. Does DUPLENCOMP then NTHCOMPDROP.
( comp → #n )
Returns length of composite (number of objects).
( comp → comp #n )
Does DUP then LENCOMP.
( comp → flag )
If the composite is empty, returns TRUE.
( comp → comp flag )
Does DUP then NULLCOMP?.
11.1. Reference
Addr.
056B6
Name
NTHELCOMP
35BC3
NTHCOMPDROP
35D58
NTHCOMDDUP
376EE
POSCOMP
3776B
EQUALPOSCOMP
37784
NTHOF
0FD006
ˆListPos
37752
#=POSCOMP
05821
SUBCOMP
376B7
matchob?
69
Description
( comp #i → ob T )
( comp #i → F )
Returns specified element of composite and
TRUE, or just FALSE if it could not be found.
( comp #i → ob )
Does NTHELCOMP then DROP.
( comp #i → ob ob )
Does NTHCOMPDROP then DUP.
( comp ob pred → #i )
( comp ob pred → #0 )
(eg: pred = ' %<)
Evaluates pred for all elements of composite
and ob, and returns index of first object for
which the pred is TRUE. If no one returned
TRUE, returns #0. For example, the program
below returns #4:
:: { %1 %2 %3 %-4 %-5 %6 %7 } %0
' %< POSCOMP ;
( comp ob → #pos )
( comp ob → #0 )
POSCOMP with EQUAL as test.
( ob comp → #i )
( ob comp → #0 )
Does SWAP then EQUALPOSCOMP.
( ob {} → #i / #0 )
Equivalent to NTHOF, but faster. However, it
only works for lists.
( comp # → #i )
( comp # → #0 )
POSCOMP with #= as test.
( comp #m #n → comp' )
Returns a sub-composite. Makes all index
checks first.
( ob comp → T )
( ob comp → ob F )
Returns TRUE if ob is EQUAL to any element
of the composite.
70
11. Composite Objects
Addr.
371B3
Name
Embedded?
37798
Find1stTrue
377C5
Lookup
377DE
Lookup.1
37829
EQLookup
Description
( ob1 ob2 → flag )
Returns TRUE if ob2 is embedded in, or is the
same as, ob1. Otherwise returns FALSE.
( comp test → ob T )
( comp test → F )
Tests every element for test. The first one
that returns TRUE is put into the stack along
with TRUE. If no object returned TRUE, FALSE
is put into the stack. For example, the program below returns %-4 and TRUE.
:: { %1 %2 %2 %-4 %-5 %6 } ' %0<
Find1stTrue ;
( ob test comp → nextob T )
( ob test comp → ob F )
Tests every odd element (1,3,...) in the composite. If a test returns TRUE, the object after
the tested one is returned, along with TRUE. If
no object tests TRUE, FALSE is returned. For
example, the program below returns %6 and
TRUE.
:: %0 ' %<
{ %1 %2 %3 %-4 %-5 %6 }
Lookup ;
( ob test → nextob T )
( ob test → ob F )
Return Stack:
( comp → )
Lookup with the composite already pushed
(with >R) onto the runstream. Called by
Lookup.
( ob comp → nextob T )
( ob comp → ob F )
Lookup with EQ as test.
11.1. Reference
Addr.
37B54
11.1.2
71
Name
NEXTCOMPOB
Description
( comp #ofs → comp #ofs' ob T )
( comp #ofs → comp F )
Returns object at specified nibble offset from
start. If the object is SEMI (i.e., the end of the
composite has been reached) returns FALSE.
To get the first element, use FIVE as offset
value (to skip the prolog). ZERO works as
well.
Building
There are also shortcut words to build lists and secondaries, with specified number of objects, described in the sections below.
Addr.
05459
05445
0546D
Name
{}N
::N
SYMBN
05481
EXTN
293F8
P{}N
11.1.3
Description
( obn..ob1 #n → { obn..ob1 } )
( ob1..obn #n → :: ob1..obn ; )
( ob1..obn #n → symb )
Build a symbolic object.
( ob1..obn #n → u )
Builds a unit object.
( ob1..obn #n → {} )
Build list with possible garbage collection.
Exploding
Addr.
054AF
3622A
3623E
35BAF
35C68
2F0EC
Name
INNERCOMP
DUPINCOMP
SWAPINCOMP
INCOMPDROP
INNERDUP
ICMPDRPRTDRP
3BADA
366E9
(INNERCOMP>%)
INNER#1=
Description
( comp → obn..ob1 #n )
( comp → comp obn..ob1 #n )
( comp obj → obj obn..ob1 #n )
( comp → obn..ob1 )
( comp → obn..ob1 #n #n )
( comp → obn...ob4 ob2 ob1 )
Does INCOMPDROP then ROTDROP.
( comp → obn..ob1 %n )
( comp → obn..ob1 flag )
72
11. Composite Objects
Addr.
157006
Name
ˆSYMBINCOMP
12A006
ˆ2SYMBINCOMP
158006
ˆCKINNERCOMP
11.1.4
Description
( symb → ob1 .. obN #n )
( ob → ob #1 )
( {} → {} #1 )
Explodes symbolic object into meta. Other objects are converted into one-object metas by
pushing #1 into the stack.
( ob1 ob2 → meta1 meta2 )
Does ˆSYMBINCOMP for 2 objects.
( {} → ob1 .. obN #n )
( ob → ob #1 )
Explodes a list into a meta object. Other objects are converted into one-object metas by
pushing #1 into the stack.
Lists
Addr.
055E9
Name
NULL{}
36ABD
159006
DUPNULL{}?
ˆDUPCKLEN{}
29D18
36202
36216
361EE
2B42A
ONE{}N
TWO{}N
THREE{}N
#1-{}N
PUTLIST
2FC006
ˆINSERT{}N
2FB006
ˆNEXTPext
Description
( → {} )
Pushes a null list to the stack.
( {} → {} flag )
( {} → {} #n )
( ob → ob #1 )
Return length of list, or 1 for non-lists.
( ob → { ob } )
( ob1 ob2 → { ob1 ob2 } )
( ob1 ob2 ob3 → { ob1 ob2 ob3 } )
( ob1..obn #n+1 → {} )
( ob #i {} → {}' )
Replaces object at specified position. Assumes
valid #i.
( {} ob # → {}' )
Insert object into list at given position. The position must be < than length of the list. If the
position is zero, >TCOMP is used.
( list → list1 list2 )
Extract in list2 all occurrances of the 1st object
of list, the remaining objects are stored in list1.
list1 = list-list2.
11.1. Reference
73
Addr.
2FD006
Name
ˆCOMPRIMext
15A006
ˆCKCARCOMP
2EF5A
apndvarlst
0FE006
ˆAppendList
4EB006
ˆprepvarlist
100006
ˆSortList
28A006
ˆPIext
25ED3
EqList?
11.1.5
Description
( {} → {}' )
Suppress multiple occurrances in the list.
( {} → ob1 )
( ob → ob )
Returns first element for lists, or object itself if
it is not a list.
( {} ob → {}' )
Appends ob to list if not already there.
( {} ob → {}' )
Equivalent to apndvarlst, but faster.
( {} ob → {}' )
Adds ob at the beginning of the list if not
present. If ob is in list, move ob to the beginning of list.
( L pred → L' )
Sorts list according to give predicate. Pred is
a program that tests two elements and returns
FALSE if the first is to appear earlier than the
second. To sort in numerical order, for example, the predicate would be a > test.
( {} → ob )
Returns the product of all elements of the list.
( ob → )
Is ob a list of equations? Returns T if ob is a
list of at least two elements, and the second
element is not a list itself.
Secondaries
Addr.
055FD
Name
NULL::
37073
Ob>Seco
3705A
?Ob>Seco
37087
2Ob>Seco
Description
( → :: ; )
Returns null secondary.
( ob → :: ob ; )
Does ONE then ::N.
( ob → :: ob ; )
If the object is not a secondary, does Ob>Seco.
( ob1 ob2 → :: ob1 ob2 ; )
Does TWO then ::N.
74
Addr.
3631A
11. Composite Objects
Name
::NEVAL
Description
( ob1..obn #n → ?
Does ::N then EVAL.
)
Chapter 12
Meta Objects
A meta object (or just meta for short) is a collection of n objects and their
count (as a bint). A meta object can be considered as another representation
of a composite object. The word INNERCOMP will explode any composite into a
meta object. The opposite transformation is done by several different words,
depending on the kind of composite desired. The available words are listed in
section 11.1.2.
Note that a single zero is an (empty) meta object, the null meta object.
It is possible to do several stack operations which treat meta objects as
a single object. Generally, the name of these stack operations are in lower case.
However, some words have totally misleading names, because their functions
are not always used in relation to meta objects, and they were named with
their other purpose in mind.
There exist also the user meta objects, which are like meta objects, but
the count is represented as a real number and not as a bint. These are not very
common, though.
12.1
Reference
12.1.1
Stack Functions
Addr.
0326E
Name
NDROP
37032
DROPNDROP
35FB0
#1+NDROP
Description
( meta → )
Should be called drop.
( meta ob → )
Should be called DROPdrop.
( ob meta → )
Should be called dropDROP.
aka: N+1DROP
75
76
12. Meta Objects
Addr.
28211
Name
NDROPFALSE
391006
ˆNDROPZERO
29A5D
psh
29A8F
roll2ND
29B12
unroll2ND
3695A
SWAPUnNDROP
36FA6
metaROTDUP
12.1.2
Description
( meta → F )
Should be called dropFALSE.
( obn..ob1 #n → #0 )
Replace Meta object with empty Meta object.
Should be called dropZERO.
( meta1 meta2 → meta2 meta1 )
Should be called swap.
( meta1 meta2 meta3 → meta2 meta3
meta1 )
Should be called rot.
( meta1 meta2 meta3 → meta3 meta1
meta2 )
Should be called unrot.
( meta1 meta2 → meta2 )
Should be called swapdrop.
( meta1 meta2 meta3 → meta2 meta3
meta1 meta1 )
Should be called rotdup.
Combining Functions
Addr.
296A7
2973B
36FBA
Name
top&
pshtop&
ROTUntop&
36FCE
roll2top&
2963E
psh&
Description
( meta1 meta2 → meta1&meta2 )
( meta1 meta2 → meta2&meta1 )
( meta1 meta2 meta3 → meta2 meta3&meta1
)
( meta1 meta2 meta3 → meta3 meta1&meta2
)
aka: rolltwotop&
( meta1 meta2 meta3 → meta1&meta3 meta2
)
12.1. Reference
12.1.3
Meta and Object Operations
Addr.
3592B
Name
SWAP#1+
34431
34504
36147
29693
28071
DUP#1+PICK
get1
OVER#2+UNROL
psh1top&
pull
28085
29821
298C0
2F193
29754
406006
pullrev
psh1&
psh1&rev
UobROT
pullpsh1&
ˆaddt0meta
29972
36946
2F38E
pshzer
SWAPUnDROP
xnsgeneral
2F38F
xsngeneral
12.1.4
Addr.
3760D
77
Description
( # ob → ob #+1 )
aka: SWP1+
( n..1 #n → n..1 #n n )
( ob meta → meta ob )
( meta ob → ob meta )
( meta ob → ob&meta )
( meta&ob → meta ob )
aka: #1-SWAP
( ob&meta → meta ob )
( meta1 meta2 ob → ob&meta1 meta2
( meta1 meta2 ob → ob&meta1 meta2
( ob meta1 meta2 → meta1 meta2 ob
( meta1 meta2&ob → ob&meta1 meta2
( meta1&ob meta2 → meta1 meta2 )
Removes the last object of meta1.
( meta → #0 meta )
( ob meta → meta )
( meta → LAM3&meta&LAM1 )
Uses contents of LAM1 and LAM3.
( meta → meta&LAM3&LAM1 )
Uses contents of LAM1 and LAM3.
Other Operations
Name
SubMetaOb
Description
( meta #start #end → meta' )
Gets a sub-meta. Does range checks.
)
)
)
)
78
12. Meta Objects
Addr.
37685
Name
SubMetaOb1
33F006
ˆsubmeta
2F356
metatail
385006
ˆmetasplit
39F006
ˆmetaEQUAL?
3BF006
ˆEQUALPOSMETA
3C0006
ˆEQUALPOS2META
198006
ˆMETAINT?
Description
( ob1..obi..obn #n #i #n #i →
ob1..obi #n #i )
This function can be used to take the first
i objects of a meta, if you follow it with
SWAPDROP. Example:
:: %1 %2 %3 %4 %5 BINT5
BINT3 BINT5 BINT3
SubMetaOb1 ;
results in:
%1 %2 %3 #5 #3
( meta #begin #end → meta' )
Extracts submeta from a meta.
( ob1..obn-i..obn #i #n+1 →
ob1..ob..obn-i #n-i obn-i+1..obn
#i )
#n is the count of the objects in meta. Takes
the last #i elements of meta and creates a
new one. Example:
:: %1 %2 %3 %4 %5
BINT2 BINT6 metatail ;
Results:
%1 %2 %3 #3 %4 %5 #2
( meta #i → meta1 meta2 )
Split a meta in 2 metas at position i. meta1
will contain #i elements meta2 will contain
#n-i elements.
( meta2 meta1 → meta2 meta1 flag )
Test equality of 2 metas.
( Meta ob → Meta ob #pos )
Returns last occurrence of ob in Meta. If a
component of meta is a list/symb then search
if ob is embedded in this component of meta.
( Meta2 Meta1 ob → Meta2 Meta1 ob
#pos )
Returns last occurrence of ob in Meta1 or in
Meta2. #pos is >0 if in meta2, is <0 if in
meta1 (#pos=MINUSONE-#).
( Meta → Meta flag )
Tests if Meta is an integer.
12.1. Reference
Addr.
199006
Name
ˆMETAPOSINT?
79
Description
( Meta → Meta flag )
Tests if Meta is a positive integer smaller
than Zsmall.
Chapter 13
Unit Objects
Units are another kind of composite objects. It is not really difficult to
include one in the program, it is just laborious.
Units start with UNIT and end with ;. Inside, there are commands to
define the unit. The best way to understand how a unit is reprsented is by
disassembling it. The unit object 9.8_m/sˆ2 can be created using the code
below:
1
5
10
::
UNIT
% 9.8
"m"
"s"
%2
um^
um/
umEND
;
;
As you can see, creating units is done in a reverse polish way using the
words umˆ, um*, um/ and umP. The meaning of the first three ones is easy to
guess. The last is used to create prefix operators (kilo, mega, mili, etc.). First
enter the prefix as a character or string, and then the unit name (all operations
take unit names as characters or strings). Run umP and the prefixed unit is
created. Then call the other functions as needed. To end a unit, use umEND,
which joins the number (entered first) to the unit part. The code above could
be made shorter if built-in characters and strings (listed on Chapter 6) were
used.
Since units are composite objects, you can use, for example, INNERCOMP
to explode a unit into a meta object. You can also create a unit from a meta
object (see Chapter 12), using EXTN. The program below, for example, adds the
unit m/s to the number in the stack:
80
13.1. Reference
1
5
81
::
CK1NOLASTWD
CKREAL
"m"
"s"
um/
umEND
BINT5 EXTN
;
Note that the um words, when executed, just put themselves in the
stack.
Several operations can be done with units. The complete list is given
below. The most important are UM+, UM-, UM*, UM/ and UFACT, whose meanings
are obvious; UMCONV, which works like user word CONVERT; UMSI, equivalent
to UBASE and U>nbr, which returns the numeric part of a unit.
13.1
Reference
13.1.1
Creating Units
Addr.
2D74F
2D759
2D763
2D76D
2D777
05481
Name
um*
um/
umˆ
umP
umEND
EXTN
Description
* marker
/ marker
ˆ marker
Char prefix operator
Unit end operator
( ob1..obn #n → u )
Builds a unit object.
82
13.1.2
13. Unit Objects
General Functions
Addr.
2F099
Name
U>NCQ
2F07A
UM>U
2F08C
UMCONV
2F090
UMSI
2F095
UMU>
2F019
UNIT>$
2F07B
U>nbr
2F098
Unbr>U
2F09A
TempConv
25EE4
KeepUnit
Description
( u → n%% cf%% qhxs )
Returns the number, conversion factor to base units
and a vector in the form:
[ kg m A s K cd mol r sr ? ]
where each element represents the exponent of that
unit. For example, 1_N U>NCQ would return:
%%1 %%1 [ 1 1 0 -2 0 0 0 0 0 0 ]
since it is equivalent to 1_kg*m/sˆ2
( % u → u' )
Replaces number part of unit.
( u1 u2 → u1' )
Change units of unit1 to units of unit2.
( u → u' )
Equivalent to user word UBASE.
( u → % u' )
Returns number and normalized part of unit.
( u → $ )
Converts unit to string.
( u → % )
Returns number part of unit.
( u % → u' )
Replaces number part of unit.
???
Used by UMCONV for the conversion of temperature
units.
( % ob ob' → % ob )
( % ob u → u' ob )
If the level one object is a unit object, replaces the
numeric part of it with the number on level 3. If not,
just DROP.
13.1. Reference
13.1.3
Addr.
2F081
2F082
2F080
2F083
2F07D
2F07E
2F07F
2F08F
2F08E
2F096
2F08A
2F08B
2F092
2F093
2D949
2D95D
2D971
2D985
2D999
2D9CB
2D9EE
2F08D
2F091
2F094
83
Arithmetic Functions
Name
UM+
UMUM*
UM/
UM%
UM%CH
UM%T
UMMIN
UMMAX
UMXROOT
UMABS
UMCHS
UMSQ
UMSQRT
UMSIGN
UMIP
UMFP
UMFLOOR
UMCEIL
UMRND
UMTRC
UMCOS
UMSIN
UMTAN
13.1.4
Tests
Addr.
2F087
2F07C
2F086
2F089
2F085
2F088
Name
UM=?
UM#?
UM<?
UM>?
UM<=?
UM>=?
Description
( u u' → u'' )
( u u' → u'' )
( u u' → u'' )
( u u' → u'' )
( u %percent → u' )
( u u' → % )
( u u' → % )
( u u' → u? )
( u u' → u? )
( u u' → u'' )
( u → u' )
( u → u' )
( u → u' )
( u → u' )
( u → u' )
( u → u' )
( u → u' )
( u → u' )
( u → u' )
( u → u' )
( u → u' )
( u → u' )
( u → u' )
( u → u' )
Description
( u u' → %flag
( u u' → %flag
( u u' → %flag
( u u' → %flag
( u u' → %flag
( u u' → %flag
)
)
)
)
)
)
84
Addr.
2F076
13. Unit Objects
Name
puretemp?
Description
( [] []' → [] []' flag )
Checks of the two arrays both denote pure temperature units, i.e. if both arrays are equal to
[0. 0. 0. 0. 1. 0. 0. 0. 0.
0.]
Chapter 14
Symbolics
Symbolic objects, or algebraic expressions, are another type of composite
objects. Their structure is very similar to the units’. They are delimited by
SYMBOL and ;. Inside, the expression is created in a reverse polish way.
V
The disassembly of the equation R =
should show how to include a
I
symbolic object in your program, should you need one.
1
5
::
SYMBOL
ID R
ID V
ID I
x/
x=
;
;
As you have seen, the variables are represented by identifiers, and the
functions are the user-accessible ones, whose names are preceded by a lowercase x in System RPL.
To create a symbolic object from a meta, you use the SYMBN function.
Note that when you include a funcion, you will have to quote it, ie, put the
command ' before the command to put it in the stack instead of executing it.
Quoting objects will be explained in more detail in section 19.2.
On the HP49, the new CAS contains most entries dealing with symbolics. These entries are described in the CAS part of the book. mainly in
Chapters 44 and 45. However, some entries which were available already on
the HP48 have been kept for compatibility reasons. These entries are listed
below.
85
86
14. Symbolics
14.1
Reference
14.1.1
General Operations
Addr.
0546D
2BD8C
Name
SYMBN
(SYMBN:)
286E7
symcomp
2F073
SWAPcompSWAP
28ACE
(DROP?symcomp)
293A3
(?symcomp)
25EA2
CRUNCH
2F110
(FINDVARS)
462006
ˆEQUATION?
Description
( ob1..obn #n → sym )
ob1..obn #n -> symb
Does 'R, SWAP#1+ then SYMBN. Creates a
symbolic from the meta in the stack and the
next object in the runstream. This object is
added to the end of the symbolic.
( ob → ob' )
If ob is symbolic, does nothing, otherwise ONE
SYMBN.
( ob ob' → ob'' ob' )
Does SWAP symcomp SWAP.
( %/C%/Z/id/lam ob' →
%/C%/Z/id/lam )
( ob ob' → symb )
Drop ob'. Then, if the object in the stack is
a real, complex, zint, identifier or lam, does
nothing. For other objects, calls symcomp to
create a one-object symbolics.
( %/C%/Z/id/lam #1 → %/C%/Z/id/lam
)
( ob #1 → symb )
( ob # → symb )
If # is BINT1, calls DROP?symcomp. If it is
any other number, calls SYMBN.
( ob → % )
Internal version of →NUM.
( sym → {} )
Returns a list of the variables of the equation,
recursing into programs and functions in the
equation.
( ob → ob flag )
Returns TRUE if ob is a symbolic finishing by
x=.
14.1. Reference
Addr.
463006
Name
ˆUSERFCN?
29CB9
uncrunch
2BCA2
cknumdsptch1
2BB21
sscknum2
2BB3A
sncknum2
2BB53
nscknum2
87
Description
( ob → ob flag )
Returns TRUE if ob is a symbolic finishing by
xFCNAPPLY.
( → )
Clears numeric results flag (system flag 3) for
the next command only. Example:
SYMCOLCT = :: uncrunch colct ;
( sym → symf )
Used by one argument functions to evaluate a
symbolic or numeric routine according to numeric results flag. Usage:
:: cknumdsptch1 <sym> <num> ;
If numeric mode, CRUNCH is applied to the
level one object and COLA is applied to
<num>. If symbolic mode, ckseval1: is
called. Example:
:: cknumdsptch1 MetaRE xRE ;
( sym sym → symf )
Used by two argument functions to evaluate
function according to current numeric mode.
Usage: :: sscknum2 <sym> <num> ;
In numeric mode both arguments are
CRUNCHed and <num> is COLAd. Else,
cksseval2: is called. Example:
SYM+ = :: sncknum2 Meta+ x+ ;
( sym % → symf )
Usage: :: sncknum2 <sym> <num> ;
In symbolic mode uses cksneval2:. Example:
SYM+O = :: sncknum2 Meta+Con x+ ;
( % sym → symf )
Usage: :: nscknum2 <sym> <num> ;
In symbolic mode uses cknseval2:. Example:
O+SYM = :: nscknum2 Con+Meta x+ ;
88
14.1.2
Addr.
2EF26
2F2A9
14.1.3
14. Symbolics
Other Functions
Name
SYMSHOW
XEQSHOWLS
Description
( sym id/lam → symf )
( sym {} → symf )
Meta Symbolics Functions
Addr.
29986
Name
pshzerpsharg
3701E
pZpargSWAPUn
36FE2
plDRPpZparg
3F1006
ˆDIVMETAOBJ
Description
( meta → M_last M_rest )
Pushes last sub-expression in meta. If meta is
a valid expression M_rest will be empty.
( meta → M_rest M_last )
pshzerpsharg then psh.
( meta&ob → M_last M_rest )
Drops ob then calls pshzerpsharg.
( o1...on #n ob → {o1/ob...on/ob} )
Division of all elements of a meta by ob. Tests
if o=1.
Chapter 15
Graphics Objects (Grobs)
Graphics objects, or grobs for short, represent images, drawings, etc. If
you want to write programs that draw something in the screen, then you must
know how to use grobs, because the screen content is actually a grob, and you
will have to draw on that grob, or to insert another grob in it.
In the reference section below, there are words for creating, manipulating and displaying graphic objects.
When dealing with graphics, keep two things in mind:
1. Several grob operations work directly on the grob without making a copy.
So, all pointers to that object in the stack will be modified. You can use the
word CKREF to ensure an object is unique. For more information on temporary memory and reference counting, see section 24.1.4. This kind of
operation is denominated “bang-type”, and the commands normally have
an exclamation point to indicate that, like GROB! or GROB!ZERO. These
operations also have no error checking, so improper or out-of-range parameters may corrupt memory.
2. The best command to place a grob in the display grob is XYGROBDISP.
This is because this word checks if the grob to be placed in HARDBUFF
would exceed its boundaries, and if necessary HARDBUFF is enlarged so
that the grob fits.
89
90
15. Graphics Objects (Grobs)
15.1
Reference
15.1.1
Built-in Grobs
Addr.
27AA3
Name
(NULLGROB)
27D3F
CROSSGROB
27D5D
MARKGROB
27D7B
2E25C
0860B0
0870B0
(StdLabelGrob)
(InvLabelGrob)
15.1.2
˜grobAlertIcon
˜grobCheckKey
Dimensions
Addr.
26085
25EBB
36C68
2F324
Name
GROBDIM
DUPGROBDIM
GROBDIMw
CKGROBFITS
2F320
CHECKHEIGHT
15.1.3
Description
( → grob )
0x0 Null grob
( → grob )
5x5 Cross cursor ("+")
( → grob )
5x5 Mark symbol ("x")
21x8 normal menu key
21x8 inverse menu key
9x9 Alert grob
21x8 Check Key menu grob
A tickmark and "CHK" in a menu grob.
Description
( grob → #height #width )
( grob → grob #height #width )
( grob → #width )
( g1 g2 #n #m → g1 g2' #n #m )
Shrinks g2 if it does not fit in g1.
( grob #height → )
Forces grob (ABUFF/GBUFF) to be at least 64
rows high.
Grob Handling
Addr.
2607B
Name
GROB!
2EFDB
(GROB+)
Description
( grob1 grob2 #x #y → )
Stores grob1 into grob2. Bang type.
( grob1 grob2 → grob )
Combines two grobs using bitwise OR. Errors
when grobs have different sizes.
15.1. Reference
Addr.
2F342
Name
GROB+#
26080
GROB!ZERO
368E7
GROB!ZERODRP
2612F
SUBGROB
25F0E
XYGROBDISP
25ED8
GROB>GDISP
260B2
MAKEGROB
2F0DB
MAKEPICT#
2609E
INVGROB
260E4
PIXON
260DF
PIXOFF
260EE
PIXON?
260DA
PIXON3
260D5
PIXOFF3
91
Description
( flag grob1 grob2 #x #y → grob' )
Inserts grob2 into the specified position of
grob1, using OR (if flag is TRUE) or XOR (if flag
is FALSE). Does all necessary checks first.
( grob #x1 #y1 #x2 #y2 → grob' )
Blanks a rectangular region of the grob. Bang
type.
( grob #x1 #y1 #x2 #y2 → )
Blanks a rectangular region of the grob. Probably only useful if grob is the text or graphics grob (see section on display-organization).
Bang type.
( grob #x1 #y1 #x2 #y2 → grob' )
Returns specified portion of grob.
( #x #y grob → )
Stores grob in HARDBUFF with upper left corner at (#x,#y). HARDBUFF is expanded if necessary.
( grob → )
Stores new graph grob.
( #height #width → grob )
Creates a blank grob.
( #w #h → )
Creates blank graph grob. Minimum size is
131x64. Smaller grobs will be automatically
resized.
( grob → grob' )
Inverts grob data bits. Bang type.
( #x #y → )
Sets pixel in text grob.
( #x #y → )
Clears pixel in text grob.
( #x #y → flag )
Is pixel in text grob on?
( #x #y → )
Sets pixel in graph grob.
( #x #y → )
Clears pixel in graph grob.
92
15. Graphics Objects (Grobs)
Addr.
260E9
Name
PIXON?3
280C1
ORDERXY#
280F8
ORDERXY%
2EF9F
LINEON
2EFA0
LINEOFF
2EFA1
TOGLINE
2EFA2
LINEON3
2F13F
DRAWLINE#3
2EFA3
LINEOFF3
2EFA4
TOGLINE3
2F382
TOGGLELINE#3
2F32C
DRAWBOX#
2EF03
DOLCD>
2EF04
DO>LCD
0BF007
ˆGROBADDext
Description
( #x #y → flag )
Is pixel in graph grob on?
( #x1 #y1 #x2 #y2 → #x1' #y1' #x2'
#y2' )
Orders the bints to be appropriate for defining
a rectangle in a grob. Swaps #x1 and #x2 if
#x2<#x1. Swaps #y1 and #y2 if #y2<#y1.
( %x1 %y1 %x2 %y2 → %x1' %y1' %x2'
%y2' )
ORDERXY# with real numbers.
( #x1 #y1 #x2 #y2 → )
Draws a line in text grob.
( #x1 #y1 #x2 #y2 → )
Clears a line in text grob.
( #x1 #y1 #x2 #y2 → )
Toggles a line in text grob.
( #x1 #y1 #x2 #y2 → )
Draws a line in graph grob.
( #x1 #y1 #x2 #y2 → )
Draws a line in graph grob. x1<x2 is not required.
( #x1 #y1 #x2 #y2 → )
Clears a line in graph grob.
( #x1 #y1 #x2 #y2 → )
Toggles a line in graph grob.
( #x1 #y1 #x2 #y2 → )
Toggles line in graph grob. x1<x2 is not required.
( #x1 #y1 #x2 #y2 → )
Draws rectangle in graph grob.
( → grob )
Returns current display.
( grob → )
Grob to display.
( grob2 grob1 → grob )
Vertical grob addition. grob2 will be above
grob1.
15.1. Reference
15.1.4
93
Greyscale Graphics
Addr.
25592
Name
SubRepl
25597
SubGor
2559C
SubGxor
25565
LineW
2556F
LineG1
25574
LineG2
2556A
LineB
25579
LineXor
2F218
CircleW
2F216
CircleG1
2F217
CircleG2
2F215
CircleB
2F219
CircleXor
2557E
Sub
25583
Repl
Description
( grb1 grb2 #x1 #y1 #x2 #y2 #W #H →
grb1' )
Replace a part of grb1 with a part of grb2 in
REPLACE mode.
( grb1 grb2 #x1 #y1 #x2 #y2 #W #H →
grb1' )
Replace a part of grb1 with a part of grb2 in OR
mode.
( grb1 grb2 #x1 #y1 #x2 #y2 #W #H →
grb1' )
Replace a part of grb1 with a part of rgb2 in XOR
mode.
( grb #x1 #y1 #x2 #y2 → grb' )
Draw a white line.
( grb #x1 #y1 #x2 #y2 → grb' )
Draw a light grey line.
( grb #x1 #y1 #x2 #y2 → grb' )
Draw a dark grey line.
( grb #x1 #y1 #x2 #y2 → grb' )
Draw a black line.
( grb #x1 #y1 #x2 #y2 → grb' )
XOR a line.
( grb #Cx #Cy #r → grb' )
Draw a white circle.
( grb #Cx #Cy #r → grb' )
Draw a light grey circle.
( grb #Cx #Cy #r → grb' )
Draw a dark grey circle.
( grb #Cx #Cy #r → grb' )
Draw a black circle
( grb #Cx #Cy #r → grb' )
XOR a circle.
( grb #x1 #y1 #x2 #y2 → grb' flag )
Get a part of a grob.
( grb1 grb2 #x #y → grb1' )
Copy grb2 into grb1 in REPLACE mode.
94
15. Graphics Objects (Grobs)
Addr.
25588
Name
Gor
2558D
Gxor
255A1
Grey?
255B0
ScrollVGrob
255BA
PixonW
255C4
PixonG1
255C9
PixonG2
255BF
PixonB
255CE
PixonXor
255D3
FBoxW
255D3
FBoxG1
255D8
FBoxG2
255DD
FBoxB
255E2
FBoxXor
255E7
LBoxW
255EC
LBoxG1
255F1
LBoxG2
255F6
LBoxB
255FB
LBoxXor
Description
( grb1 grb2 #x #y → grb1' )
Copy grb2 into grb1 in OR mode.
( grb1 grb2 #x #y → grb1' )
Copy grb2 into grb1 in XOR mode.
( grob → flag )
Is grob a Greyscale Grob?
( grb #W #X #Yd #Ys #h → grb' )
Scroll up and down a portion of a graphical object.
( grb #x #y → grb' )
Make a pixel white.
( grb #x #y → grb' )
Make a pixel light grey.
( grb #x #y → grb' )
Make a pixel dark grey.
( grb #x #y → grb' )
Make a pixel black.
( grb #x #y → grb' )
Apply XOR to a pixel.
( grb #x1 #y1 #x2 #y2 → grb' )
Make a white filled rectangle.
( grb #x1 #y1 #x2 #y2 → grb' )
Make a light grey filled rectangle.
( grb #x1 #y1 #x2 #y2 → grb' )
Make a dark grey filled rectangle.
( grb #x1 #y1 #x2 #y2 → grb' )
Make a black filled rectangle.
( grb #x1 #y1 #x2 #y2 → grb' )
Apply XOR to a filled rectangle.
( grb #x1 #y1 #x2 #y2 → grb' )
Draw a white rectangle.
( grb #x1 #y1 #x2 #y2 → grb' )
Draw a light grey rectangle.
( grb #x1 #y1 #x2 #y2 → grb' )
Draw a dark grey rectangle.
( grb #x1 #y1 #x2 #y2 → grb' )
Draw a black rectangle.
( grb #x1 #y1 #x2 #y2 → grb' )
Apply XOR to a rectangle.
15.1. Reference
Addr.
2F21B
Name
ToGray
2F21A
Dither
255B5
Distance
15.1.5
95
Description
( grb → grb'/grb )
Convert a B&W grob to Greyscale.
( grb → grb'/grb )
Convert a greyscale grob to B&W
( #Δx #Δy → #SQRT(Δxˆ2+Δyˆ2) )
Compute the distance between two points.
Creating Menu Label Grobs
Addr.
2E166
Name
MakeStdLabel
2E189
MakeBoxLabel
2E1EB
MakeDirLabel
2E24D
MakeInvLabel
25E7F
Box/StdLabel
25F01
Std/BoxLabel
25E80
Box/StdLbl:
2E0D5
Grob>Menu
2E0F3
Str>Menu
2E11B
Id>Menu
2E107
Seco>Menu
Description
( $ → grob )
Makes standard menu label.
( $ → grob )
Makes label with a box.
( $ → grob )
Makes directory label.
( $ → grob )
Makes inverse label.
( $ flag → grob )
If TRUE makes box label, otherwise makes standard label.
( $ flag → grob )
If TRUE makes standard label, otherwise makes
box label.
( → grob )
Does Box/StdLabel with the next two objects
from the stream.
Usage: :: Box/StdLbl: $ <test> ;
( #col grob → )
Displays grob as menu label.
( #col $ → )
Displays string as menu label.
( #col id → )
Displays id as menu label.
( #col :: → )
Does EVAL then DoLabel.
96
Addr.
25886
15.1.6
15. Graphics Objects (Grobs)
Name
DoLabel
Description
( #col ob → )
If ob is of one of the supported types, displays a
menu label. If not, generates a "Bad Argument
Type" error.
Converting Strings to Grobs
Addr.
25F7C
Name
$>GROB
25F86
$>GROBCR
25F81
$>grob
25F8B
$>grobCR
05F0B3
(˜$>grobOrGROB)
25F24
RIGHT$3x6
25FEF
CENTER$3x5
Description
( $ → grob )
Makes grob of the string using the system
font. Linefeed does not make new line.
( $ → grob )
Makes grob of the string using the system
font. Linefeed does make new line.
( $ → grob )
Makes grob of the string using the minifont.
Linefeed does not make new line.
( $ → grob )
Makes grob of the string using the minifont.
Linefeed does make new line.
( $ → grob )
Converts string to a grob using either the
current font or the minifont, depending on
system flag 90.
( $ #n → flag grob )
Transforms string into grob (using the
minifont), then takes all characters starting after column #n. flag is FALSE if #n is
greater than the width of the grob. In this
case, the whole grob is returned.
( grob #x #y $ #w → grob' )
Creates grob from string (using the minifont) and embeds it at specified position (#x,
#y). The grob is centered around #x and
the to is put at #y. #w represents the maximum width of the grob created. If the text
is wider, it is truncated. Bangtype.
15.1. Reference
Addr.
2E2AA
Name
MakeLabel
25FF9
LEFT$3x5
26071
ERASE&LEFT$3x5
26008
LEFT$3x5Arrow
2601C
LEFT$3x5CR
26012
LEFT$3x5CRArrow
25FF4
CENTER$5x7
25FFE
LEFT$5x7
2606C
ERASE&LEFT$5x7
26003
LEFT$5x7Arrow
26017
LEFT$5x7CR
2600D
LEFT$5x7CRArrow
97
Description
( $ #w #x grob → grob' )
Inserts $ into grob using CENTER$3x5 with
y=5.
( grob #x #y $ #w → grob' )
Like CENTER$3x5, but the left corner of the
text is positioned at #x.
( grob #x #y $ #w → grob' )
Like LEFT$3x5, but erase background first.
( grob #x #y $ #w → grob' )
Like LEFT$3x5, but if the text does not fit,
replace the last character by character 31
(dots) to show that the text was truncated.
( grob #x #y $ #w #h → grob' )
Like LEFT$3x5, but newlines in the strings
are interpreted and start new lines. Note
the additional argument #h for the maximum height of the text grob.
( grob #x #y $ #w #h → grob' )
Like LEFT$3x5CR, but show truncation
with arrows.
( grob #x #y $ #w → grob' )
Same as CENTER$3x5, but using system
font.
( grob #x #y $ #w → grob' )
Like CENTER$5x7, but the left corner of the
text is positioned at #x.
( grob #x #y $ #w → grob' )
Like LEFT$5x7, but erase background first.
( grob #x #y $ #w → grob' )
Like LEFT$5x7, but if the text has to be
truncated, replace the last character with
character 31 (arrow).
( grob #x #y $ #w → grob' )
Like LEFT$5x7, but interpret newlines.
( grob #x #y $ #w → grob' )
Like LEFT$5x7CR, but show truncation
with arrows.
98
15.1.7
15. Graphics Objects (Grobs)
Creating Grobs from Other Objects
Addr.
019004
Name
ˆEQW3GROB
01A004
ˆEQW3GROBStk
01F004
ˆEQW3GROBmini
01E004
ˆEQW3GROBsys
0BE007
ˆXGROBext
0C0007
ˆDISPLAYext
Description
( ob → ext grob #0 )
( ob → #2 )
( ob → ext grob #0 )
( ob → #2 )
( ob → ext grob #0 )
( ob → #2 )
( ob → ext grob #0 )
( ob → #2 )
( ob → grob )
Convert object to a grob.
( grob ob → grob' )
Adds ob to grob after converting it to a grob.
Chapter 16
Library and Backup Objects
Libraries are very complex objects that hold a collection of commands.
Some of these commands are named and accessible to the user, but some have
no names, and so are “hidden”. Backup objects are used by the HP49 to store
the contents of the entire HOME directory and restore it later. The integrity of
both objects can be verified because both have a CRC code attached to them.
A rompointer (sometimes called XLIB name) is a pointer to a command
in a library. The only way to access a unnamed command in a library is through
a rompointer. They hold the number (often called id) of the library and the
number of the command.
To insert a rompointer in your program, use the following structure:
ROMPTR <lib> <cmd>, where <lib> is the number of the library, and <cmd>
is the number of the command. Both numbers are specified in hexadecimal
form. Rompointers are always automatically executed (like identifiers), so you
have to quote them (see section 19.2) if you want one in the stack.
16.1
Reference
16.1.1
Port Operations
Addr.
25EEB
Name
NEXTLIBBAK
Description
( #addr → backup/library #nextaddr )
Gets next library or backup.
99
100
16.1.2
16. Library and Backup Objects
Rompointers
Addr.
07E50
Name
#>ROMPTR
08CCC
ROMPTR>#
07E99
ROMPTR@
35C40
DUPROMPTR@
35A88
?>ROMPTR
35AAB
?ROMPTR>
35BFF
RESOROMP
34FCD
34FC0
ROM-WORD?
DUPROM-WORD?
16.1.3
Description
( #lib #cmd → ROMPTR )
Creates rompointer.
( ROMPTR → #lib #cmd )
Splits rompointer.
( ROMPTR → ob T )
( ROMPTR → F )
Recalls contents of rompointer.
( ROMPTR → ROMPTR ob T )
( ROMPTR → ROMPTR F )
Does DUP then ROMPTR@.
( ob → ob' )
If ROM-WORD? and TYPECOL? then RPL@.
( ob → ob' )
If TYPEROMP? and content exists INHARDROM?
then return contents.
( → ob )
Recalls contents of next object in the runstream
(which must be a rompointer).
( ob → flag )
( ob → ob flag )
Libraries
Addr.
07709
Name
TOSRRP
076AE
OFFSRRP
2F2A7
XEQSETLIB
07638
SETHASH
Description
( # → )
Attaches library to HOME directory.
( # → )
Detaches library from HOME directory.
( % → )
Internal ATTACH.
( hxs #libnum → )
Buggy?
16.1. Reference
16.1.4
101
Backup Objects
Addr.
081D9
Name
BAKNAME
0905F
BAK>OB
Description
( bak → id T )
Returns backup's name
( bak → ob )
Gets backup object.
Part II
General
System
RPL
Entries
Chapter 17
Stack Operations
In System RPL, using the stack is almost the same as in User RPL. The
basic operations are the same, except for little changes in the name: DUP, 2DUP
(equivalent to User RPL’s DUP2), NDUP (DUPN), DROP, 2DROP (DROP2), NDROP
(DROPN), OVER, PICK, SWAP, ROLL, UNROLL (ROLLD), ROT, UNROT and DEPTH.
All commands that require or return a numeric argument use bints and
not real numbers, unless otherwise noted.
There are many commands that do two or even three operations in sequence. They are listed in the reference section. The table below lists some
useful combinations in a nice form:
DUP
DROP
SWAP
OVER
ROT
UNROT
SWAPDROP
DROPDUP
DROPSWAP
2DROP
2DUP
3PICK
4PICK
5PICK
4ROLL
4UNROLL
ROT2DROP
17.1
DUP
DUPDUP
DUPDUP
DUPROT
DUPUNROT
DUP3PICK
DUP4UNROLL
-
DROP
DROPDUP
2DROP
DROPSWAP
DROPOVER
DROPROT
DROPSWAPDROP
3DROP
-
SWAP
SWAPDUP
SWAPDROP
SWAPOVER
SWAPROT
ROTSWAP
SWAPDROPDUP
SWAPDROPSWAP
SWAP2DUP
SWAP3PICK
SWAP4PICK
SWAP4ROLL
ROTROT2DROP
OVER
OVERDUP
OVERSWAP
2DUP
OVERUNROT
DROPDUP
OVERDUP
OVER5PICK
SWAPDROP
ROT
ROTDUP
ROTDROP
ROTSWAP
ROTOVER
UNROT
DROPSWAP
ROTDROPSWAP
ROT2DROP
ROT2DUP
ROTROT2DROP
UNROT
UNROTDUP
UNROTDROP
UNROTSWAP
UNROTOVER
ROT
UNROTSWAPDRO
SWAPDROP
UNROT2DROP
-
Reference
In this section, the numbers 1, 2. . . n are used to represent different
objects, not necessarily any kind of number.
105
106
17. Stack Operations
Addr.
03188
35CE0
2D5006
28143
Name
DUP
DUPDUP
ˆ3DUP
NDUPN
35FF3
3457F
DUPROT
DUPUNROT
36133
3432C
3611F
35D30
DUPROLL
DUP4UNROLL
DUPPICK
DUP3PICK
34431
031AC
35D30
DUP#1+PICK
2DUP
2DUPSWAP
36CA4
031D9
03244
357CE
37032
35733
3574D
2DUP5ROLL
NDUP
DROP
DROPDUP
DROPNDROP
DROPSWAP
DROPSWAPDROP
36007
3606B
03258
341D2
DROPROT
DROPOVER
2DROP
3DROP
341D7
4DROP
341DC
341E8
341F4
0326E
35FB0
5DROP
6DROP
7DROP
NDROP
#1+NDROP
Description
( ob → ob ob )
( ob → ob ob ob )
( 3 2 1 → 3 2 1 3 2 1 )
( ob #n → ob..ob #n )
( ob #0 → #0 )
( 1 2 → 2 2 1 )
( 1 2 → 2 1 2 )
aka: SWAPOVER
( 1..n #n → 1 3..n #n 2 )
( 1 2 3 → 3 1 2 3 )
( n..1 #n → n..1 #n n-1 )
( 1 2 → 1 2 2 1 )
aka: 2DUPSWAP
( n..1 #n → n..1 #n n )
( 1 2 → 1 2 1 2 )
( 1 2 → 1 2 2 1 )
aka: DUP3PICK
( 1 2 3 → 2 3 2 3 1 )
( 1..n #n → 1..n 1..n )
( 1 → )
( 1 2 → 1 1 )
( 1..n #n ob → )
( 1 2 3 → 2 1 )
( 1 2 3 → 2 )
aka: ROT2DROP, XYZ>Y
( 1 2 3 4 → 2 3 1 )
( 1 2 3 → 1 2 1 )
( 1 2 → )
( 1 2 3 → )
aka: XYZ>
( 1..4 → )
aka: XYZW>
( 1..5 → )
( 1..6 → )
( 1..7 → )
( 1..n #n → )
( ob 1..n #n → )
aka: N+1DROP
17.1. Reference
Addr.
2F0A1
Name
RESETDEPTH
0314C
28187
03223
3576E
368B5
3421A
DEPTH
reversym
SWAP
SWAPDUP
SWAP2DUP
SWAPDROP
35857
35872
SWAPDROPDUP
SWAPDROPSWAP
341BA
SWAPROT
36C90
SWAP4ROLL
3457F
SWAPOVER
36CB8
35018
03295
3579C
35CA4
341A8
SWAP3PICK
2SWAP
ROT
ROTDUP
ROT2DUP
ROTDROP
3574D
ROT2DROP
34195
ROTDROPSWAP
3416E
ROTSWAP
343BD
ROTROT2DROP
35CCC
3423A
ROTOVER
4ROLL
3588B
35F06
4ROLLDROP
4ROLLSWAP
107
Description
( ob1..obn obn+1..obx #n → ob1..obn
)
Drops all but #n levels of the stack.
( 1..n → 1..n #n )
( 1..n #n → n..1 #n )
( 1 2 → 2 1 )
( 1 2 → 2 1 1 )
( 1 2 → 2 1 2 1 )
( 1 2 → 2 )
aka: XY>Y
( 1 2 → 2 2 )
( 1 2 3 → 3 1 )
aka: UNROTDROP, XYZ>ZX
( 1 2 3 → 3 2 1 )
aka: UNROTSWAP, XYZ>ZYX
( 1 2 3 4 → 2 4 3 1 )
aka: XYZW>YWZX
( 1 2 → 2 1 2 )
aka: DUPUNROT
( 1 2 3 → 1 3 2 1 )
( 1 2 3 4 → 3 4 1 2 )
( 1 2 3 → 2 3 1 )
( 1 2 3 → 2 3 1 1 )
( 1 2 3 → 2 3 1 3 1 )
( 1 2 3 → 2 3 )
aka: XYZ>YZ
( 1 2 3 → 2 )
aka: DROPSWAPDROP, XYZ>Y
( 1 2 3 → 3 2 )
aka: XYZ>ZY
( 1 2 3 → 2 1 3 )
aka: XYZ>YXZ
( 1 2 3 → 3 )
aka: UNROT2DROP, XYZ>Z
( 1 2 3 → 2 3 1 3 )
( 1 2 3 4 → 2 3 4 1 )
aka: FOURROLL, XYZW>YZWX
( 1 2 3 4 → 2 3 4 )
( 1 2 3 4 → 2 3 1 4 )
108
17. Stack Operations
Addr.
36043
Name
4ROLLROT
360E3
34257
4ROLLOVER
5ROLL
358A7
34281
5ROLLDROP
6ROLL
342EA
7ROLL
342BB
8ROLL
03325
35FC4
35D80
344F2
34517
2D6006
ROLL
ROLLDROP
ROLLSWAP
#1+ROLL
#2+ROLL
ˆ#3+ROLL
344DD
344CB
3422B
#+ROLL
#-ROLL
UNROT
35D1C
35872
UNROTDUP
UNROTDROP
343BD
UNROT2DROP
341BA
UNROTSWAP
360CF
3422B
UNROTOVER
3UNROLL
34331
4UNROLL
35D44
343CF
4UNROLLDUP
4UNROLL3DROP
36057
4UNROLLROT
Description
( 1 2 3 4 → 2 4 1 3 )
aka: FOURROLLROT
( 1 2 3 4 → 2 3 4 1 4 )
( 1 2 3 4 5 → 2 3 4 5 1 )
aka: FIVEROLL
( 1 2 3 4 5 → 2 3 4 5 )
( 1..6 → 2..6 1 )
aka: SIXROLL
( 1..7 → 2..7 1 )
aka: SEVENROLL
( 1..8 → 2..8 1 )
aka: EIGHTROLL
( 1..n #n → 2..n 1 )
( 1..n #n → 2..n )
( 1..n #n → 2..n-1 1 n )
( ob 1..n #n → 1..n ob )
( a b 1..n #n → b 1..n a )
( obn+3...obn...ob1 #n →
obn+2...ob1 obn+3 )
( 1..n+m #n #m → 2..n+m 1 )
( 1..n-m #n #m → 2..n-m 1 )
( 1 2 3 → 3 1 2 )
aka: 3UNROLL, XYZ>ZXY
( 1 2 3 → 3 1 2 1 )
( 1 2 3 → 3 1 )
aka: SWAPDROPSWAP, XYZ>ZX
( 1 2 3 → 3 )
aka: ROTROT2DROP, XYZ>Z
( 1 2 3 → 3 2 1 )
aka: SWAPROT, XYZ>ZYX
( 1 2 3 → 3 1 2 1 )
( 1 2 3 → 3 1 2 )
aka: UNROT, XYZ>ZXY
( 1 2 3 4 → 4 1 2 3 )
aka: FOURUNROLL, XYZW>WXYZ
( 1 2 3 4 → 4 1 2 3 3 )
( 1 2 3 4 → 4 )
aka: XYZW>W
( 1 2 3 4 → 4 3 2 1 )
17.1. Reference
Addr.
34357
Name
5UNROLL
3438D
6UNROLL
35BEB
3615B
28225
3616F
0339E
34552
34564
3453D
3452B
032C2
35CF4
35D6C
7UNROLL
8UNROLL
(9UNROLL)
10UNROLL
UNROLL
#1+UNROLL
#2+UNROLL
#+UNROLL
#-UNROLL
OVER
OVERDUP
OVERSWAP
35D6C
OVERUNROT
36CF4
37046
34485
35F1A
360F7
36CCC
2F1C6
3448A
35F2E
36CE0
3610B
3448F
34494
34499
3449E
344A3
344A8
032E2
34436
34451
OVER5PICK
2OVER
3PICK
3PICKSWAP
3PICKOVER
3PICK3PICK
DROP3PICK
4PICK
4PICKSWAP
SWAP4PICK
4PICKOVER
5PICK
6PICK
7PICK
8PICK
(9PICK)
(10PICK)
PICK
#1+PICK
#2+PICK
109
Description
( 1 2 3 4 5 → 5 1 2 3 4 )
aka: FIVEUNROLL
( 1..6 → 6 1..5 )
aka: SIXUNROLL
( 1..7 → 7 1..6 )
( 1..8 → 8 1..7 )
( 1..9 → 9 1..8 )
( 1..10 → 10 1..9 )
( 1..n #n → n 1..n-1 )
( ob 1..n #n → n ob 1..n-1 )
( a b 1..n #n → n a b 1..n-1 )
( 1..n+m #n #m → n+m 1..n+m-1 )
( 1..n-m #n #m → n-m 1..n+m-1 )
( 1 2 → 1 2 1 )
( 1 2 → 1 2 1 1 )
( 1 2 → 1 1 2 )
aka: OVERUNROT
( 1 2 → 1 1 2 )
aka: OVERSWAP
( 1 2 3 4 → 1 2 3 4 3 1 )
( 1 2 3 4 → 1 2 3 4 1 2 )
( 1 2 3 → 1 2 3 1 )
( 1 2 3 → 1 2 1 3 )
( 1 2 3 → 1 2 3 1 3 )
( 1 2 3 → 1 2 3 1 2 )
( 1 2 3 4 → 1 2 3 1 )
( 1 2 3 4 → 1 2 3 4 1 )
( 1 2 3 4 → 1 2 3 1 4 )
( 1 2 3 4 → 1 2 4 3 1 )
( 1 2 3 4 → 1 2 3 4 1 4 )
( 1 2 3 4 5 → 1 2 3 4 5 1 )
( 1..6 → 1..6 1 )
( 1..7 → 1..7 1 )
( 1..8 → 1..8 1 )
( 1..9 → 1..9 1 )
( 1..10 → 1..10 1 )
( 1..n #n → 1..n 1 )
( 1..n #n-1 → 1..n 1 )
( 1..n #n-2 → 1..n 1 )
110
Addr.
34465
34474
34417
34405
17. Stack Operations
Name
#3+PICK
#4+PICK
#+PICK
#-PICK
Description
( 1..n #n-3
( 1..n #n-4
( 1..n+m #n
( 1..n-m #n
→
→
#m
#m
1..n 1 )
1..n 1 )
→ 1..n+m 1 )
→ 1..n-m 1 )
Chapter 18
Temporary Environments
System RPL local variables (also known as temporary or lambda variables) work in the same way and have the same uses as in User RPL. You
assign values to them, and these values can be recalled or changed while the
variables exist. The stored values are referenced by means of local identifiers
(also called lambda identifiers, or lams for short). These are very similar to the
global identifiers that reference variables stored in memory (see Chapter 8),
but the variables exist only temporarily.
But there is one difference: in System RPL you can give a null (that
is, empty) name to local variables, therefore effectively making them unnamed
variables. This saves memory and is much faster. But before learning how to
create and use unnamed local variables, let us learn how to use normal, named
ones.
18.1
Named Local Variables
Creating named local variables is very similar to creating temporary
variables in User RPL. You have to create a list of local identifiers (called lams
for short), and run the command BIND. To recall the contents of one of them,
just enter its local identifier. To store a new value, put that value and the lam
in the stack, and run STO. To remove the local variables from memory, use ABND
(shortcut for “abandon”). The code is not checked for matching BIND/ABND, so
you may include them in different programs if you wish. But this also means
you must be sure to have an ABND for each BIND.
Here is a little program that creates two local variables, recalls their
contents and assigns new values for them (it is called LAM1):
1
::
%2 %3
{
LAM first
111
112
5
18. Temporary Environments
LAM sec
}
BIND
LAM first
LAM sec
DUP
’ LAM first
STO
%+
’ LAM sec
STO
ABND
10
15
(first contains 2, and sec 3)
(recall contents from first - 2)
(recall contents from sec - 3)
(store new contents in first)
(results 5)
(store sum in sec)
(delete variables from memory)
;
18.2
Unnamed Local Variables
As said above, you can use unnamed local variables. Technically, they
have a name: the null, or empty, name; but all “unnamed” variables have the
same name. Since they cannot be identifed by name, positional syntax is necessary. The above program could be rewritten using null named temporary
variables this way (now called LAM2):
1
5
10
::
%2 %3
{ NULLLAM NULLLAM }
BIND
2GETLAM
(recalls 2)
1GETLAM
(recalls 3)
DUP
2PUTLAM
%+
1PUTLAM
ABND
;
The numbering is done in the same order as the stack levels: 1GETLAM
contains what was on level one, 2GETLAM contains what was on level two, etc.
There are supported entries to recall and store directly up to the 22nd variable
(1GETLAM to 22GETLAM, and their PUTLAM equivalents). To access variables
with numbers higher than 23 (which probably will not happen very often), use
GETLAM, which takes a bint representing the variable number and returns its
18.3. Nested Temporary Environments
113
contents; and PUTLAM, which takes an object and the variable number, and
stores that object in the specified variable.
18.3
Nested Temporary Environments
It is perfectly possible to use two or more temporary environments at
the same time. Nothing special needs to be done during the creation: just use
another DOBIND or BIND before abandoning the previous one. When an ABND
is found, it always refers to the most recent BIND.
If you only use named lams, nothing special needs to be done. There
will be no confusion with names, unless you redefine an existing variable (but
doing this will only make a great mess out of your program). However, when
at least one of the temporary environments has unnamed lams, you must pay
attention to the numbering.
Note that the GETLAM words do not necessarily refer to unnamed local
variables: 1GETLAM recalls the most recently bound variable, 2GETLAM the one
before that, and so on. (When binding lams, the binding starts at the stack level
with the largest number, working towards the one with the smallest number,
so that the last bound variable is the one whose contents where in level one.)
You may use the GETLAM words also to access named lams.
Due to the nature of temporary environments, there appears to be an
extra local variable (before all the others) for internal housekeeping purposes.
To access the unnamed lams of a previous environment, you must add the
number of variables bound in the current environment plus one to the number
you would have used before the second binding.
The following program (named LAM3) will try to make the above explanation clearer:
1
5
10
::
%2
%1
{
LAM n2
LAM n1
}
BIND
1GETLAM
2GETLAM
(Returns 1)
(Returns 2)
114
%4
%3
{
NULLLAM
NULLLAM
}
BIND
1GETLAM
2GETLAM
4GETLAM
5GETLAM
ABND
ABND
15
20
25
18. Temporary Environments
(Returns
(Returns
(Returns
(Returns
3)
4)
1)
2)
;
First, this program binds 2 to n2 and 1 n1, but these names are never
used. Instead, 1GETLAM is used to acces the most recently bound value, that is,
1, which could also be accessed via LAM n1. Following, 2GETLAM returns the
next-to-last value, or 2.
Things become more complicated when another environment is bound,
this time to unnamed lams. Now 1GETLAM returns 3, which belongs to the
new environment, and was the last bound variable. Similarly, 2GETLAM also
returns a variable bound in this second batch.
If we wanted to access the variable that previously was number one, we
need to add the number of variables bound in the new environment (that is,
two) plus one (the housekeeping pseudo-variable) to the previous number. So,
to get what 1GETLAM would have returned before, we add three to one, obtaining 4GETLAM. And this returns, as expected, 1. Similarly, 5GETLAM returns 2,
the same 2GETLAM had returned before the second binding.
Naturally, after the first ABND (corresponding to the binding of values 4
and 3), 1GETLAM and 2GETLAM would again return 1 and 2, respectively.
If you have been able to understand the above, you will not have problems to nest temporary environments when necessary.
18.4
Other Ways of Binding
First, instead of a list of lams, you can always put each lam in the stack,
followed by the number of variables to be bound, and run the command DOBIND
instead of BIND. As a matter of fact, BIND is just :: INNERCOMP DOBIND ;.
18.4. Other Ways of Binding
115
When you are binding a great number of local variables, instead of entering the following code (which takes 67.5 bytes)
1
5
...
{ NULLLAM
NULLLAM
NULLLAM
NULLLAM
BIND
...
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM
NULLLAM }
use this, which takes only 12.5 bytes, a savings of 55 bytes:
... NULLLAM TWENTYFOUR NDUPN {}N BIND ...
However, why create a composite if it is going to be exploded later? Replace {}N BIND for DOBIND, and save 2.5 more bytes.
Or you can also use TWENTYFOUR ' NULLLAM CACHE. However, if you
use this, an extra variable is created to hold the count, so you must add one to
the variable positions of the previous examples.
When decompiling code, you can sometimes find things like
... ZEROZEROZERO BINT3 DOBIND ...
which is yet another way of binding three null named variables. This works
because instead of NULLLAM, any fixed address ROM object can be used, as
ZERO in this example.
The following constructs are the most compact ways to create temporary
environments for N null named variables.
N
1
2
2
3
4
N
Commands to create N null named variables
1LAMBIND
ZEROZEROTWO DOBIND
FPTR2 ˆ2LAMBIND
FPTR2 ˆ3LAMBIND
4NULLLAM{} BIND
NULLLAM #N NDUPN DOBIND
116
18. Temporary Environments
18.5
Reference
18.5.1
Builtin IDs and LAMs
Addr.
272FE
Name
NULLID
2B3AB
NULLLAM
27155
'IDX
272F3
27937
(ID_EQ)
(ID_SIGMADAT)
18.5.2
Conversion
Addr.
05B15
362DE
18.5.3
Name
$>ID
DUP$>ID
Description
( → id )
Null (empty) identifier
( → lam )
Puts NULLLAM in the stack.
( → id )
Puts ID X unevaluated on the stack.
ID EQ
ID ΣDAT
Description
( $ → ID )
( $ → $ ID )
Temporary Environments Words
Addr.
074D0
Name
BIND
074E4
DOBIND
36518
1LAMBIND
36513
DUP1LAMBIND
155006
ˆ2LAMBIND
156006
ˆ3LAMBIND
Description
( obn..ob1 {lamn..lam1} → )
Binds n objects to n differently named lams.
( obn..ob1 lamn..lam1 #n → )
Binds n objects to n differently named lams.
( ob → )
Binds one object to a null named lam.
( ob → ob )
Does DUP then 1LAMBIND.
( ob1 ob2 → )
Binds two objects to null named lams.
( ob1 ob2 ob3 → )
Binds three objects to null named lams.
18.5. Reference
Addr.
0DE0B0
Name
˜nNullBind
36A77
dvarlsBIND
07497
ABND
34D00
CACHE
34EBE
DUMP
34D58
SAVESTACK
34FA6
undo
07943
@LAM
07D1B
STOLAM
075A5
GETLAM
34616
34620
3462A
34634
3463E
34648
34652
3465C
34666
34670
1GETLAM
2GETLAM
3GETLAM
4GETLAM
5GETLAM
6GETLAM
7GETLAM
8GETLAM
9GETLAM
10GETLAM
117
Description
( obn..ob1 #n → )
Binds #n objects to null named lams. 1LAM
has the count, 2LAM the first object. Decompiles to
:: ' NULLLAM CACHE ;
( ob → )
Binds ob to LAM 'dvar.
( → )
Abandons topmost temporary environment.
( obn..ob1 #n lam → )
Binds all objects under the same name. 1LAM
has the count.
( NULLLAM → ob1..obn #n )
Inverse of CACHE. Always does garbage collection.
( → )
Caches stack to SAVELAM.
( → )
Dumps SAVELAM.
( lam → ob T )
( lam → F )
Tries recalling object from lam. If successful, returns object and TRUE, otherwise returns
just FALSE.
( ob lam → )
Tries storing object in lam. Generates "Undefined Local Name" error if lam is not found.
( #n → ob )
Gets contents of nth topmost lam.
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
118
18. Temporary Environments
Addr.
3467A
34684
3468E
34698
346A2
346AC
346B6
346C0
346CA
346D4
346DE
346E8
346F2
346FC
34706
34710
3471A
075E9
Name
11GETLAM
12GETLAM
13GETLAM
14GETLAM
15GETLAM
16GETLAM
17GETLAM
18GETLAM
19GETLAM
20GETLAM
21GETLAM
22GETLAM
(23GETLAM)
(24GETLAM)
(25GETLAM)
(26GETLAM)
(27GETLAM)
PUTLAM
34611
3461B
34625
3462F
34639
34643
3464D
34657
34661
3466B
34675
3467F
34689
34693
3469D
346A7
346B1
346BB
346C5
346CF
1PUTLAM
2PUTLAM
3PUTLAM
4PUTLAM
5PUTLAM
6PUTLAM
7PUTLAM
8PUTLAM
9PUTLAM
10PUTLAM
11PUTLAM
12PUTLAM
13PUTLAM
14PUTLAM
15PUTLAM
16PUTLAM
17PUTLAM
18PUTLAM
19PUTLAM
20PUTLAM
Description
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( → ob )
( ob #n → )
Stores new contents to nth topmost lam.
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
18.5. Reference
Addr.
346D9
346E3
346ED
346F7
34701
3470B
34715
34797
Name
21PUTLAM
22PUTLAM
(23PUTLAM)
(24PUTLAM)
(25PUTLAM)
(26PUTLAM)
(27PUTLAM)
DUP4PUTLAM
364FF
1GETABND
35DEE
1ABNDSWAP
35F42
1GETSWAP
2F318
1GETLAMSWP1+
3632E
2GETEVAL
3483E
GETLAMPAIR
347AB
DUPTEMPENV
2B3A6
1NULLLAM{}
271F4
(2NULLLAM{})
27208
(3NULLLAM{})
2B3B7
4NULLLAM{}
119
Description
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → )
( ob → ob )
Does DUP then 4PUTLAM.
( → 1lamob )
Does 1GETLAM then ABND.
( ob → 1lamob ob )
Does 1GETABND then SWAP.
( ob → 1lamob ob )
Does 1GETLAM then SWAP.
( # → 1lamob #+1 )
Does 1GETLAM then SWAP#1+.
( → ? )
Does 2GETLAM then EVAL.
( #n → #n ob lam F )
( #n → #n T )
Gets lam contents and name (10 = 1lam, 20 =
2lam, etc.)
( → )
Duplicates topmost tempenv (clears protection
word).
( → {} )
Puts a list with one NULLLAM in the stack.
( → {} )
Puts a list with two times NULLLAM in the
stack.
( → {} )
Puts a list with three times NULLLAM in the
stack.
( → {} )
Puts a list with four times NULLLAM in the
stack.
Chapter 19
Runstream Control
So far, you have only seen commands that do not affect the normal program flow. All the programs presented work sequentially, from the first command to the last, without any kind of change in this order. However, on all but
the simplest programs, some kind of disruption in the default order is necessary. Sometimes, you need to have some part of the program repeated several
times, or some actions must be executed only under certain conditions.
This chapter will describe some low-level entries that affect the normal
execution order. The situations described above can be done with higer-level
constructs such as loops (see Chapter 21) and conditionals (described in Chapter 20). And you will probaly use those constructs more often than most of the
entries below. However, this chapter also describes some concepts that help
understanding how a System RPL program, and how to change the normal
program flow.
19.1
Some Concepts
As you know from the Introduction, a compiled System RPL program
consists of a series of pointers to address in the memory. Basically, a program
is executed by jumping to the pointed address, executing whatever is there,
returning back to the program, jumping to the next address, and so on.
Actually, it is more complicated, because there are also objects such as
real numbers, strings and even other programs (secondaries) embedded inside
the programs. This requires some “magic” (actually, just carefully written code)
to be properly handled, but it is outside the scope of this document to describe
how this is dealt with. Just assume that when an object is found, it is “executed”. For most objects (such as real numbers or strings), this means putting
themselves in the stack, for secondaries this means executing their contents,
and for others such as identifiers this means trying to recall the contents and
executing them, or simply putting themselves in the stack.
120
19.1. Some Concepts
121
Since the objects are executed in order, it becomes necessary to have
some kind of variable that will always point to the next object to be executed.
This is called the interpreter pointer, and is stored in a CPU register. After
each object is executed, this pointer is advanced to point to the next object.
When a DUP is found in the program, what happens is as follows: actually, the only thing that is stored is the address #03188h. A jump is made to
that address. In that address, there is some piece of machine-language code.
This code is executed and in the end the interpreter pointer is advanced, and a
jump is made to the next object, whatever it is.
Things get slightly more complicated when one wants to execute, for
example, INCOMPDROP. At this command’s address, there is a secondary object,
whose contents happen to be :: INNERCOMP DROP ;. The problem is that
it is necessary to switch to that (sub-)program, execute all its contents, and
then return back to the program in which INCOMPDROP was called. Since it is
perfectly possible for a sub-program to have even more sub-programs inside it,
it turns out that some kind of stack is necessary. When a secondary (or any
other composite) is executed, the address of the object after this composite in
the calling program is pushed into this stack. The composite is then executed,
by means of the interpreter pointer pointing to each of its objects. When it
finishes, an address is popped from the return stack, and execution returns
there. This was the address of the next object in the previous program, so
execution resumes properly. This stack is called the return stack.
The description above is rather incomplete, but it should give you an
idea of how things work. There are many details that would make a detailed
explanation of System RPL programs too long and complicated, so this detailed
explanation will not be given in this book.
Another important concept is that of the runstream. It is the sequence
of objects that follow the object currently being executed. For example, during
the execution of the ' command in this program
:: ' DUP :: EVAL ; % 1. ;
the runstream contains three objects. The first is the command DUP. The second is the secondary that contains the EVAL command inside (but not the command EVAL or just the ::), and the third is the real number one. Several words
(including ', as you will see below), take their argument from the next object
in the runstream, and not from the data stack, as most commands do. So, the
“argument” to ' is the command DUP.
You should now have understood why this chapter is called “Runstream
Control”: the commands here affect the runstream, that is, they affect the order
in which the objects that form the program will be executed.
122
19.2
19. Runstream Control
Runstream Commands
The commands described here are the basic actions available. In the
reference section below you will find several commands that combine these
commands with others.
Command
'
'R
ticR
Stack and Description
( → ob )
This is very easy to understand: it pushes the object after it
(that is, the first object in the runstream) in the stack. This
pushed object will not be executed; execution resumes in the
object after it. As an example,
:: %1 %2 ' %+ EVAL ;
is equivalent to
:: %1 %2 %+ ;
This action of pushing the next object in the stack instead of
evaluating it is called quoting the next object.
( → ob )
This pushes into the data stack the object that is pointed to by
the topmost pointer in the return stack, and skips this pushed
object. In other words, the first object in the composite that
contains the composite currently being executed is pushed in
the data stack, and skipped. If, however, the object that would
be pushed is SEMI, then a null composite is pushed instead. As
an example, the RESOROMP command is just like ROMPTR@, but
its argument comes after it in the runstream (see Chapter 16).
Here is how RESOROMP is defined:
:: 'R ROMPTR@ DROP ;
It just pushes the object after RESOROMP in the stack and calls
ROMPTR@.
( → ob TRUE )
( → FALSE )
This is similar to 'R, but it will not push a null composite if
there was no object to be pushed; instead it returns FALSE. If
an object could be pushed, it is pushed along with TRUE.
19.2. Runstream Commands
Command
>R
R>
R@
IDUP
RDROP
RDUP
RSWAP
?SEMI
123
Stack and Description
( comp → )
This pushes a pointer to the body of the composite given as
argument in the return stack. That means that when the current secondary ends, execution will not go back to the one that
called the current composite. Before that, the composite given
as argument will be executed, and only after it finishes will the
execution resume at the secondary that called the current one.
As an example, the code below returns in the stack the reals 3,
2 and 1, in this order:
:: ' :: % 1 ; >R % 3 % 2 ;
( → :: )
Pushes in the data stack a secondary whose contents are what
is pointed to by the first pointer in the return stack, which
is popped. In other words, it pushes as a secondary the rest
of the commands in the secondary that called the current one.
This commands will then not be executed after the current secondary finishes. As an example, the code below pushes the reals 3, 2 and 1 in the stack, in this order:
:: :: R> EVAL % 1 ; % 3 % 2 ;
( → :: )
This is the same as R>, but it does not pop the return stack.
The same example of the above command, with R> changed
into R@ would return 3, 2, 1, 3 and 2.
(→)
Pushes the interpreter pointer into the return stack. This
means that after the current secondary finishes, a jump will
be made to the object just after the IDUP, thereby executing
the rest of the current secondary once more.
(→)
Pops the return stack. That is, the remaining objects in the
secondary that called the current one will not be executed.
(→)
Duplicates the top address in the return stack.
(→)
Swaps the top two addresses in the return stack.
( flag → )
If the flag is TRUE, skips the rest of the current secondary.
124
19. Runstream Control
Command
COLA
SKIP
?SKIP
19.3
Stack and Description
(→)
This executes only the next object in the runstream, skipping
the rest of the current secondary. The program below pushes
only 1 in the stack:
:: COLA % 1 % 2 % 3 ;
See below for some good uses for COLA.
(→)
Skips the next object in the runstream. The program above,
with COLA replaced by SKIP would push 2 and 3 in the stack.
( flag → )
Does SKIP if the flag is true.
Some Examples
Our first example will show a useful use of COLA: when recursion is
used. Suppose we have the two programs below for calculating the factorial of
a number:
fact:
1
5
::
CKREAL
{ LAM x } BIND
%1
factiter
ABND
;
(First value for factorial)
factiter:
1
5
::
LAM x %0= ?SEMI (Exits if x=0)
LAM x %*
(Multiplies by current value)
LAM x %1- ’ LAM x STO
COLA factiter
;
Note the word COLA before the recursive invocation of factiter. Without it, the program would require many return stack levels, all of which would
point to SEMI. With COLA, nothing is pushed in the return stack. factiter
is simply called, without storing the address of where the interpreter should
19.3. Some Examples
125
jump back to. This makes the program always use a fixed number of return
stack levels.
However, COLA is not used only in this case. It is a very useful command
in other situations. Let us say that in your project you will frequently need to
perform a case (see section 20.3) comparing if a real number is equal to 3. It
is convenient to write a program to do this (like the built-in word %1=case)
instead of repeating “%3 %= case” all the time.
A first attempt would be this program:
:: %3 %= case ;
However, this would not work. This is because case takes its arguments from the runstream, that is, the currently executed program, and not
from the calling composite. This means the argument for case is ;, which is
not what is desired. But there is a solution: use COLA before the case. This
will drop the rest of the runstream after the command after it, in a way merging the current command with the composite that called it. So, if we add COLA
before case, and embed this new sub-program in another, like this:
:: ... :: %3 %= COLA case ; <act_T> <act_F> ...
it is as if the code were like this:
:: ... %3 %= case <act_T> <act_F> ...
which is what we want. Therefore, the correct way to define our sub-program
is with COLA before case. This is a frequent combination, so there is a shortcut
command, COLAcase, that is equivalent to COLA followed by case. There are
other words like this, see the reference below.
The next example (which uses an error-trapping structure that will be
described in Chapter 22) is the command Ð from the OT49 library (see section A.3.1), written by Wolfgang Rautenberg. This command is used like this:
« Ð ... »
That is, generally as the first command in a program (which, naturally,
can be a System RPL program, not only a User one). It causes the program to
be executed with the display off (which makes it slightly faster). All the folows
the Ð until the end of the secondary is executed “blindly”. When Ð is run, it
turns off the display, and when the secondary finishes executing, the display is
turned back on. But how can this be done, if nothing special needs to be called
after the program finishes? The answer is simple: by manipulating the return
stack. Here is the disassembly of that command:
1
::
Code
R>
126
19. Runstream Control
ERRSET
COMPEVAL
ERRTRAP
::
’REVAL
ERRJMP
;
Code
5
10
;
The first code object turns off the display. It is a short and simple piece
of machine language, but it is outside the scope of this book to describe it.
Then, R> brings the rest of the composite that called Ð into the data stack. It
is evaluated by COMPEVAL. The only difficulty in the program is that we must
turn the display back on even if there was an error in the program. If there
was en error, then the object after ERRTRAP is executed. First, 'REVAL brings
the first object after the current composite (this object happens to be the second
code object, that turns on the display) into the data stack and executes it. Then,
the error is triggered again with ERRJMP. If there was no error, the execution
goes directly to the second code object, finishing the program.
As an example another way to deal with the return stack, we will study
the list processor DoL, also in library OT49. This command expects a list in
level two and any object (generally a command or a function) in level one. This
object is evaluated for each of the list elements in order, and the results are collected in another list, which is then returned. This program uses some things
which we have not studied yet, such as loops and the Virtual Stack. You might
want to skip this example now and return to it later. Here is the code, without
the argument checking part:
1
5
10
::
OVER
>R
(Push list elements in return stack)
ticR
(Try to get first element)
NOTcaseDROP
(If list is empty, drop the object)
PushVStack&Clear (Save current stack)
BINT0
GetElemBotVStack (Get first list elemement)
BEGIN
BINT1
GetElemBotVStack
xEVAL
(Get object and evaluate)
RSWAP
19.3. Some Examples
ticR
WHILE
RSWAP
REPEAT
DEPTH
{}N
PopVStackAbove
4UNROLL3DROP
15
20
127
(Get next element from list)
(Repeat while there are elements)
(Collect results)
(Get saved stack)
(Drop arguments & first object)
;
This program may be somewhat difficult to understand at first, but it
manipulates very cleverly the return stack.
It starts by using >R to insert a pointer to the list contents in the return
stack. If they were not removed later, then after this program finished, each of
the objects in the list would be evaluated.
Then, the first object from the list is retrieved, with ticR. This also
advances the pointer in the return stack to point to the second element. If
the list was empty, then ticR returns FALSE. In this case, the object to be
evaluated is dropped, and the empty list remains as the result of the program.
The real fun starts when there is at least one element. The whole stack
is saved as a virtual stack level, but the first element of the list (retrieved with
ticR previously) is retrived into the “new” stack.
Then, a loop is started. The loop used is very similar to a User RPL
WHILE...REPEAT...END loop. For more details, see Chapter 21. The object is
retrieved and evaluated, and then the next element from the list is retrieved
with ticR. However, since the word BEGIN pushed something in the return
stack (for an explanation, see section 21.1.1), it is necessary to use RSWAP to
bring the pointer to the list elements back in the first return stack level, thus
allowing ticR to get one of the elements. If there was an element, RSWAP is
executed again to put the return stack back into its original stack, and the
loop begins again, executing the object, and so on. When there are no more
elements, control goes to after the REPEAT word. All results are collected in a
list, and we retrieve the saved stack above the list with the results. Then the
program simply drops the original list, the object to be evaluated and the first
object of the list, which were in the stack when it was pushed into the Virtual
Stack.
As you have seen, this program used the return stack as a storage place;
the composite that was pushed there was never executed, because each of its
elements were removed until there was nothing more to execute.
128
19.4
19. Runstream Control
Reference
Addr.
06E8E
Name
NOP
06EEB
'R
06F66
'REVAL
36A27
'R'R
34BEF
ticR
36A4A
'RRDROP
06F9F
>R
0701F
R>
07012
R@
0716B
IDUP
06F8E
EVAL
262FB
COMPEVAL
34BAB
2@REVAL
Description
( → )
Does nothing.
( → ob )
Pushes next object in return stack (i.e., the first object in the composite above this one) to the stack
(skipping it). If top return stack is empty (contains
SEMI), a null secondary is pushed and the pointer is
not advanced.
( → ? )
Does 'R then EVAL.
( → ob1 ob2 )
Does 'R twice.
( → ob T )
( → F )
Pushes next object in return stack to stack and
TRUE, of just FALSE if the top return stack body is
empty. In this case, it is dropped.
( → ob )
Does 'R, then RDROP.
( :: → )
Pushes :: to top of return stack (skips prolog, i.e.,
the composite will be executed automatically).
( → :: )
Creates and pops a secondary from top return stack
body to stack.
( → :: )
Like R>, but the return stack is not popped.
( → )
Pushes top body into return stack.
( ob → ? )
Evaluates object.
( comp → ? )
EVAL just pushes a list back, this one executes it.
( → ? )
EVAL first object in the stream above the previous
one.
19.4. Reference
Addr.
34BBB
Name
3@REVAL
34A31
GOTO
34A46
?GOTO
34A59
NOT?GOTO
26111
RDUP
06FB7
RDROP
343E1
2RDROP
343F3
3RDROP
36342
DROPRDROP
3597F
RDROPCOLA
34144
RSWAP
368C9
RSKIP
2B8BE
(OBJ>R)
2B8E6
(R>OBJ)
0312B
SEMI
129
Description
( → ? )
EVAL first object in the stream above the stream
above the previous one.
( → )
Jumps to next address in stream. Address is a fivenibble address, not a system binary. Can only be
used to jump to the middle of programs, cannot jump
to a program prolog.
( flag → )
If TRUE, jumps, else skips five nibbles.
( flag → )
If FALSE jumps, else skips five nibbles.
( → )
Duplicates top return stack level.
( → )
Pops the return stack.
( → )
Pops two return stack levels.
( → )
Pops three return stack levels.
( ob → )
Does DROP then RDROP.
( → )
Does RDROP then COLA.
( → )
Swap in the return stack.
( → )
Skips first object in the return stack (i.e., the first
object in the composite above this one).
( ob → )
Pushes an object into the return stack, for example
for temporary storage. If ob is a list, the list is put
as a whole onto the stream, not the individual elements.
( → ob )
Gets an object from the return stack.
( → )
DROP the rest of the current stream.
130
19.4.1
19. Runstream Control
Quoting Objects
Addr.
06E97
Name
'
3696E
DUP'
36996
DROP'
36982
SWAP'
369AA
OVER'
369BE
STO'
369D2
TRUE'
369FF
FALSE'
369E6
ONEFALSE'
36A13
#1+'
36306
'NOP
3619E
'ERRJMP
2B90B
'DROPFALSE
25E6A
'DoBadKey
25E6B
'DoBadKeyT
2F32E
DROPDEADTRUE
36BBE
('x*)
Description
( → nob (nextob) )
Pushes next object in the stream to the stack
(skipping it).
( ob → ob nob )
Does DUP then '.
( ob → nob )
Does DROP then '.
( ob1 ob2 → ob2 ob1 nob )
Does SWAP then '.
( ob1 ob2 → ob1 ob2 ob1 nob )
Does OVER then '.
( ob id/lam → nob )
Does STO then '.
( → T nob )
Pushes TRUE and the next object to the stack.
( → F nob )
Pushes FALSE and the next object to the stack.
( → #1 F nob )
Pushes ONE, FALSE and the next object to the
stack.
( # → #+1 nob )
Does #1+ then '.
( → NOP )
Pushes NOP to the stack.
( → ERRJMP )
Pushes ERRJMP to the stack.
( → DROPFALSE )
Pushes DROPFALSE to the stack.
( → DoBadKey )
Pushes DoBadKey to the stack.
( → DoBadKey T )
Pushes DoBadKey and TRUE to the stack.
( ob → DoBadKey T )
Makes the user drop dead, then pushes TRUE.
( → x* )
Pushes x* (User word *) to the stack.
19.4. Reference
131
Addr.
36BD2
Name
'xDER
27B43
'IDFUNCTION
27B6B
'IDPOLAR
27B7F
'IDPARAMETER
29ED0
'Rapndit
36AA4
'xDEREQ
19.4.2
Description
( → xDER )
Pushes xDER (User word ∂) to the stack.
( → xFUNCTION )
Pushes xFUNCTION (User word FUNCTION) to
the stack.
( → xPOLAR )
Pushes xPOLAR (User word POLAR) to the stack.
( → xPARAMETRIC )
Pushes xPARAMETRIC (user word PARAMETRIC)
to the stack.
( meta ob1...ob4 → meta&ob ob1...ob4
)
Takes ob from runstream and appends it to the
meta starting in level 5.
( ob → flag )
Is ob eq to user command xDER?
Skipping Objects
Addr.
06FD1
Name
COLA
36A63
3635B
3636F
34AD3
ONECOLA
SWAPCOLA
XYZ>ZCOLA
COLA_EVAL
35994
COLACOLA
0714D
35715
3570C
35703
356D5
363FB
SKIP
skipcola
2skipcola
3skipcola
5skipcola
COLASKIP
Description
Evals next obj and
drops rest of this stream.
Does ONE, then COLA.
Does SWAP, then COLA.
Does UNROT2DROP, then COLA.
Returns and evals first obj
in previous stream.
Drops rest of current stream
does COLA in the above one.
Skips 1 obj in the runstream.
Does SKIP, then COLA.
Does 2SKIP, then COLA.
Does 3SKIP, then COLA.
Skips 5 objects, then does COLA.
Drops rest of current stream
and skips one obj in above stream.
Chapter 20
Conditionals
In System RPL, conditionals are a bit different from User RPL. The first
difference is that in User RPL, a “false” is represented by the real number zero;
any other value represents a “true”. In System RPL, a “false” is represented
by the word FALSE, and a “true” is represented by the word TRUE (amazing!).
These words just put themselves in the stack when run. All commands that do
a test return one of them. Words like IT or case take one of them as argument.
Should you need, you can convert a TRUE or FALSE to a (real) 0 or 1 with
COERCEFLAG. There is not a dedicated function to do the opposite transformation, like UNCOERCEFLAG, but %0<> does the job perfectly.
There are many commands that put TRUE, FALSE, or some combination
of them in the stack. See the list below.
The Boolean operators are present, too: NOT, AND, OR and XOR. There
are some combinations, see below for a list.
20.1
Tests
The test words are commands which take one or more arguments and
return either TRUE or FALSE, after doing some kind of comparison between the
arguments. The tests for each kind of object type are listed in the reference
section of the chapter of each object type. Tests for object type can be found on
Chapter 29. Other kinds of tests are listed in the reference section below.
The most important of these tests are EQ and EQUAL. Both take two
objects and return a flag. The first checks if the objects are the same, i.e.,
occupy the same address in memory. The second checks if the objects are equal
in terms of contents. The difference is that :: BINT2 # 2 EQUAL ; returns
TRUE, but if EQUAL is replace by EQ, then the program returns FALSE, because
one object is the built-in bint 2, found at address #3311B, and the other is a
bint whose address cannot be predicted, but certainly is not in the ROM.
Another example: if you put a string in level one, and press ENTER, EQ
132
20.3. Case
133
and EQUAL will return TRUE. However, if you enter a string, and then enter
again the exact same string, only EQUAL will return TRUE. This happens because the contents of the strings are the same, but they are different objects in
memory, occupying each a different address in memory. They just happen to
have the same contents. When possible, you should use EQ in your programs
since it is faster than EQUAL.
20.2
If. . . Then. . . Else
Most of the time, you will create this kind of conditionals with the IT
and ITE commands:
Word
IT
ITE
Stack and Action
( flag → )
If the flag is TRUE, the next object is executed, otherwise it is
skipped.
( flag → )
If the flag is TRUE, the next object is executed, and the second is
skipped. If it is FALSE, the next object is skipped and the second is
executed.
The following snippet changes a zero into a one, but does nothing to
other numbers:
... DUP %0= IT %1+ ...
The code below will output “Equal” if two objects are equal, and “Not
equal” if not:
... EQUAL $ "Equal" $ "Not equal" ...
Naturally, when you need to execute several commands, you will need
to include them in a secondary.
20.3
Case
The CASE words are a combination of IT, SKIP and COLA (see Chapter 19). The basic word is case, but there are combinations of it with tests and
other commands.
case takes a flag in level one. If the flag is TRUE, the next object is
134
20. Conditionals
executed, but only it: the rest of the stream is dropped. So, TRUE case is
equivalent to COLA. If the flag is FALSE, the next object is skipped and execution continues after it. So, FALSE case is the same as SKIP.
The example below shows how to build a familar case structure similar
to that found in other languages (even User RPL!). It outputs a string representing the bint in level one.
1
::
DUP #0=
case $ "Zero"
DUP BINT1 #= case $ "One"
DUP BINT2 #= case $ "Two"
...
;
5
There are many words that combine case with other words. One of
them is OVER#=case. It is not difficult to figure out what it does: first, OVER.
Then, #= compares two bints. Finally, the case works as before. Using this
word, the code above could be rewritten as:
1
5
::
BINT0 OVER#=case $ "Zero"
BINT1 OVER#=case $ "One"
BINT2 OVER#=case $ "Two"
...
;
In the reference section below, you will find a list of the words that execute a case besides some other action. These words are composed of an initial
part, the case itself and a final part. Some have only the initial or final part
besides the case, some have both. The initial part represents the commands
that are executed before the case, and it should be pretty straightforward to
understand their action, as an example NOTcase is equivalent to NOT followed
by case. For the final part, things become more complicated, because there
are two kinds of final part. The first kind has the final part written in UPPERCASE letters. The commands in the final kind are executed if the test is true.
You only need to provide the action for the FALSE situation. For example, this
snippet
... caseDROP <FalseAction> ...
is equivalent to
... case DROP <FalseAction> ...
20.4. Reference
135
The second type comprises the words that have the final part in lowercase letters. In this case, the commands in the final part are executed along
with the object that follows case when the test is true. In other words, this
snippet
... casedrop <TrueAction> <FalseAction> ...
is equivalent to
... case :: DROP <TrueAction> ; <FalseAction> ...
Unfortunately, some entries have been misnamed, and this convention
was not adhered. These entries are marked clearly in the descriptions below.
Also, the “stack diagrams” of most of the words below are not true stack
diagrams. What is on the left side of the arrow is the contents of the stack
before calling the entry, as usual. ob1 and ob2 are different objects. f1 and
f2 are different flags; T represents TRUE and F, FALSE. #m and #n represent
two binary integers, #m being smaller than #n. #set is the number of a flag,
and this flag is set, #clr is the number of a flag, this flag being clear. On the
right of the arrow, the objects which will be executed when the stack matches
the left side of the arrow are represented. The initial stream has the form:
:: <test_word> <ob1> ... <obn> ; In the diagrams, <rest> represents
all the objects after the object that appers before <rest>. In this right side of
the arrow there are also objects appearing without the angle brackets already.
These are objects in the data stack that result after the word is run, and not
objects in the runstream.
20.4
Reference
20.4.1
Boolean Flags
Addr.
2602B
Name
COERCEFLAG
301BA
%0<>
03A81
27E87
TRUE
TrueTrue
Description
( T → %1 )
( F → %0 )
Converts system flag to user flag, drops current
stream.
( % → flag )
Can be used to change a user flag into a system
flag.
( → T )
( → T T )
136
20. Conditionals
Addr.
36540
Name
TrueFalse
03AC0
36554
FALSE
FalseTrue
283E8
27E9B
35280
2D7006
35289
35B32
28211
2812F
374BE
35EF2
2962A
FalseFalse
failed
DROPTRUE
ˆ2DROPTRUE
DROPFALSE
2DROPFALSE
NDROPFALSE
SWAPTRUE
SWAPDROPTRUE
XYZ>ZTRUE
RDROPFALSE
03AF2
NOT
03B46
AND
03B75
OR
03ADA
XOR
365F9
ORNOT
35C7C
NOTAND
35CB8
ROTAND
Description
( → T F )
aka: TRUEFALSE
( → F )
( → F T )
aka: FALSETRUE
( → F F )
( → F T )
( ob → T )
( ob ob' → T )
( ob → F )
( ob1 ob2 → F )
( ob1..obn #n → F )
( ob1 ob2 → ob2 ob1 T )
( ob1 ob2 → ob2 T )
( ob1 ob2 ob3 → ob3 T )
( → F )
Puts FALSE in the stack and drops rest of current stream.
( flag → flag' )
Returns FALSE if the input is TRUE, and viceversa.
( flag1 flag2 → flag )
Returns TRUE if both flags are TRUE.
( flag1 flag2 → flag )
Returns TRUE if either flag is TRUE.
( flag1 flag2 → flag )
Returns TRUE if flags are different.
( flag1 flag2 → flag )
Returns FALSE if either flag is TRUE.
( flag1 flag2 → flag )
Returns TRUE if flag1 is TRUE and flag2 is
FALSE.
( flag1 ob flag2 → ob flag )
Returns TRUE if either flag is TRUE.
20.4. Reference
20.4.2
General Tests
Addr.
03B2E
Name
EQ
36621
2DUPEQ
3664E
EQOR
3607F
EQOVER
3663A
EQ:
36635
DUPEQ:
03B97
EQUAL
3660D
EQUALNOT
36662
EQUALOR
0FF006
ˆContains?
20.4.3
137
Description
( ob1 ob2 → flag )
Returns TRUE if both objects are the same, i.e.,
they occupy the same physical space in memory.
Only the addresses of the objects are tested.
( ob1 ob2 → ob1 ob2 flag )
Does 2DUP then EQ.
( flag ob1 ob2 → flag' )
Does EQ then OR.
( ob3 ob1 ob2 → ob3 flag ob3 )
Does EQ then OVER.
( ob → flag )
EQ with the next object in the current stream.
( ob → ob flag )
Does DUP then EQ:.
( ob1 ob2 → flag )
Returns TRUE if the objects are equal (but not necessarily the same), i.e., their prologs and contents
are the same.
( ob1 ob2 → flag )
Returns TRUE if the objects are different.
( flag ob1 ob2 → flag' )
Does EQUAL then OR.
( ob1 ob2 → ob1 ob2 flag )
Tests if ob1 contains ob2. If ob1 is a symbolic then
ob1 is searched for embedded ob2. If ob1 is a list
then ob1 is traversed for a direct match. Otherwise, tests if ob1 and ob2 are equal.
True/False Tests
Addr.
34AA1
Name
?SEMI
34A92
NOT?SEMI
Description
( T → :: ; )
( F → :: <ob1> <rest> ; )
( T → :: <ob1> <rest> ; )
( F → :: ; )
138
20. Conditionals
Addr.
3692D
Name
?SEMIDROP
34BD8
NOT?DROP
35F56
?SWAP
35DDA
?SKIPSWAP
35F97
?SWAPDROP
35F7E
NOT?SWAPDROP
070FD
RPIT
070C3
RPITE
34AF4
COLARPITE
34B4F
34A22
2'RCOLARPITE
IT
0712A
?SKIP
Description
( ob T → :: ob ; )
( ob F → :: <ob1> <rest> ; )
( ob T → :: ob <ob1> <rest> ; )
( ob F → :: <ob1> <rest> ; )
( ob1 ob2 T → :: ob2 ob1 <ob1>
<rest> ; )
( ob1 ob2 F → :: ob1 ob2 <ob1>
<rest> ; )
( ob1 ob2 T → :: ob1 ob2 <ob1>
<rest> ; )
( ob1 ob2 F → :: ob2 ob1 <ob1>
<rest> ; )
( ob1 ob2 T → :: ob1 <ob1> <rest> ;
)
( ob1 ob2 F → :: ob2 <ob1> <rest> ;
)
( ob1 ob2 T → :: ob2 <ob1> <rest> ;
)
( ob1 ob2 F → :: ob1 <ob1> <rest> ;
)
( T ob → :: ob <ob1> <rest> ; )
( F ob → :: <ob1> <rest> ; )
ob is actually executed, and not pushed in the
stack.
( T ob1 ob2 → :: ob1 <ob1> <rest> ;
)
( F ob1 ob2 → ob2 <ob1> <rest> ; )
ob1 or ob2 is actually executed, and not pushed
in the stack.
( T ob1 ob2 → :: ob1 ; )
( F ob1 ob2 → :: ob2 ; )
ob1 or ob2 is actually executed, and not pushed
in the stack.
Return to composite and ITE there.
( T → :: <ob1> <rest> ; )
( F → :: <ob2> <rest> ; )
( T → :: <ob2> <rest> ; )
( F → :: <ob1> <rest> ; )
aka: NOT_IT
20.4. Reference
Addr.
34B3E
Name
ITE
36865
COLAITE
34ABE
ITE_DROP
36EED
ANDITE
349F9
case
34A13
NOTcase
36D4E
ANDcase
36E6B
ANDNOTcase
359E3
ORcase
3495D
casedrop
3494E
NOTcasedrop
34985
case2drop
34976
NOTcase2drop
349B1
caseDROP
349C6
NOTcaseDROP
368FB
casedrptru
365B3
casedrpfls
139
Description
( T → :: <ob1> <ob3> <rest> ; )
( F → :: <ob2> <rest> ; )
( T → :: <ob1> ; )
( F → :: <ob2> ; )
( ob T → :: <ob2> <rest> ; )
( ob F → :: ob <ob1> <rest> ; )
( f1 f2 → :: <ob1> <ob3> <rest> ; )
( f1 f2 → :: <ob2> <rest> ; )
( T → :: <ob1> ; )
( F → :: <ob2> <rest> ; )
( T → :: <ob2> <rest> ; )
( F → :: <ob1> ; )
( f1 f2 → :: <ob1> ; )
( f1 f2 → :: <ob2> <rest> ; )
( f1 f2 → :: <ob1> ; )
( f1 f2 → :: <ob2> <rest> ; )
( f1 f2 → :: <ob1> ; )
( f1 f2 → :: <ob2> <rest> ; )
( ob T → :: <ob1> ; )
( ob F → :: ob <ob2> <rest> ; )
( ob T → :: ob <ob2> <rest> ; )
( ob F → :: <ob1> ; )
( ob1 ob2 T → :: <ob1> ; )
( ob1 ob2 F → :: ob1 ob2 <ob2>
<rest> ; )
( ob1 ob2 T → :: ob1 ob2 <ob2>
<rest> ; )
( ob1 ob2 F → :: <ob1> ; )
( ob T → :: ; )
( ob F → :: ob <ob1> <rest> ; )
( ob T → :: ob <ob1> <rest> ; )
( ob F → :: ; )
( ob T → T )
( ob F → :: ob <ob1> <rest> ; )
Note: should be caseDRPTRU.
( ob T → F )
( ob F → :: ob <ob1> <rest> ; )
Note: should be caseDRPFLS.
140
20. Conditionals
Addr.
36B3A
Name
NOTcsdrpfls
349D6
case2DROP
349EA
NOTcase2DROP
365CC
case2drpfls
3652C
caseTRUE
36914
NOTcaseTRUE
365E5
caseFALSE
2B2C5
NOTcaseFALSE
359AD
COLAcase
359C8
COLANOTcase
20.4.4
Description
( ob T → :: ob <ob1> <rest> ; )
( ob F → F )
Note: should be NOTcaseDRPFLS.
( ob1 ob2 T → :: ; )
( ob1 ob2 F → :: ob1 ob2 <ob1>
<rest> ; )
( ob1 ob2 T → :: ob1 ob2 <ob1>
<rest> ; )
( ob1 ob2 F → :: ; )
( ob1 ob2 T → F )
( ob1 ob2 F → :: ob1 ob2 <ob1>
<rest> ; )
Note: should be case2DRPFLS.
( T → T )
( F → :: <ob1> <rest> ; )
( T → :: <ob1> <rest> ; )
( F → T )
( T → F )
( F → :: <ob1> <rest> ; )
( T → :: <ob1> <rest> ; )
( F → F )
( T → :: <ob1> ; )
( F → :: <ob2> <rest> ; )
Drops the rest of current stream and executes
case in the stream above.
( T → :: <ob2> <rest> ; )
( F → :: <ob1> ; )
Drops the rest of current stream and executes
NOTcase in the stream above.
Binary Integer Tests
Addr.
363B5
Name
#=?SKIP
363E2
#>?SKIP
Description
( #m #n → ::
( #m #n → ::
( #m #n → ::
( #m #n → ::
<ob2>
<ob1>
<ob1>
<ob2>
<rest>
<rest>
<rest>
<rest>
;
;
;
;
)
)
)
)
20.4. Reference
Addr.
35C54
Name
#=ITE
36F29
#<ITE
36F3D
#>ITE
348D2
#=case
348E2
OVER#=case
34939
#=casedrop
36590
#=casedrpfls
36D9E
#<>case
36D76
#<case
36DCB
#>case
34A7E
#0=?SEMI
36383
#0=?SKIP
36F15
#0=ITE
36ED4
DUP#0=IT
36F51
DUP#0=ITE
348FC
#0=case
348F7
DUP#0=case
3490E
DUP#0=csedrp
141
Description
( #m #n → :: <ob1> <ob3> <rest> ;
( #m #n → :: <ob2> <rest> ; )
( #m #n → :: <ob1> <ob3> <rest> ;
( #m #n → :: <ob2> <rest> ; )
( #m #n → :: <ob2> <rest> ; )
( #m #n → :: <ob1> <ob3> <rest> ;
( #m #n → :: <ob1> ; )
( #m #n → :: <ob2> <rest> ; )
( #m #n → :: #m <ob1> ; )
( #m #n → :: #m <ob2> <rest> ; )
( #m #n → :: <ob1> ; )
( #m #n → :: #m <ob2> <rest> ; )
Note: should be OVER#=casedrop.
( #m #n → F )
( #m #n → :: #m <ob1> <rest> ; )
Note: should be OVER#=caseDRPFLS.
( #m #n → :: <ob2> <rest> ; )
( #m #n → :: <ob1> ; )
( #m #n → :: <ob1> ; )
( #m #n → :: <ob2> <rest> ; )
( #m #n → :: <ob2> <rest> ; )
( #m #n → :: <ob1> ; )
( #0 → :: ; )
( # → :: <ob1> <rest> ; )
( #0 → :: <ob2> <rest> ; )
( # → :: <ob1> <rest> ; )
( #0 → :: <ob1> <ob3> <rest> ; )
( # → :: <ob2> <rest> )
( #0 → :: #0 <ob1> <rest> ; )
( # → :: # <ob2> <rest> ; )
( #0 → :: #0 <ob1> <ob3> <rest> ;
( # → :: # <ob2> <rest> ; )
( #0 → :: <ob1> ; )
( # → :: <ob2> <rest> ; )
( #0 → :: #0 <ob1> ; )
( # → :: # <ob2> <rest> ; )
( #0 → :: <ob1> ; )
( # → :: # <ob2> <rest> ; )
)
)
)
)
142
20. Conditionals
Addr.
36D21
Name
DUP#0=csDROP
36D8A
#1=case
3639C
#1=?SKIP
36DB2
#>2case
25E72
?CaseKeyDef
25E73
?CaseRomptr@
20.4.5
Description
( #0 → :: ; )
( # → :: # <ob1> <rest> ; )
( #1 → :: <ob1> ; )
( # → :: <ob2> <rest> ; )
( #1 → :: <ob2> <rest> ; )
( # → :: <ob1> <rest> ; )
( #0/#1/#2 → :: <ob2> <rest> ; )
( # → :: <ob1> ; )
( # #' → :: ' ob1 T ; )
( # #' → :: <ob2> <rest> ; )
Compares two bints. If equal, quotes the next
object from the runsream and returns it along
with TRUE.
( # #' → ob T )
( # #' → F )
( # #' → :: <ob2> <rest> ; )
Compares two bints. If equal, tries to resolve
the rompointer which must be the next object
in the runstream. The ROMPTR@ pushes TRUE
when successful, so this entry can be used directly for key handlers.
Real and Complex Number Tests
Addr.
2B149
Name
%0=case
36DDF
j%0=case
2B15D
C%0=case
2B11C
num0=case
2B1A3
%1=case
Description
( %0 → :: %0 <ob1> ; )
( ob → :: ob <ob2> <rest> ; )
( %0 → :: <ob1> ; )
( ob → :: <ob2> <rest> ; )
( C%0 → :: C%0 <ob1> ; )
( ob → :: ob <ob2> <rest> ; )
( 0 → :: 0 <ob1> ; )
( ob → :: ob <ob2> <rest> ; )
Both a real and a complex zero are TRUE conditions
for this test.
( %1 → :: %1 <ob1> ; )
( ob → :: ob <ob2> <rest> ; )
20.4. Reference
Addr.
2B1C1
Name
C%1=case
2B176
num1=case
2B20C
%2=case
2B22A
C%2=case
2B1DF
num2=case
2B289
%-1=case
2B2A7
C%-1=case
2B25C
num-1=case
20.4.6
143
Description
( C%1 → :: C%1 <ob1> ; )
( ob → :: ob <ob2> <rest> ; )
( 1 → :: 1 <ob1> ; )
( ob → :: ob <ob2> <rest> ; )
Both a real and a complex one are TRUE conditions
for this test.
( %2 → :: %2 <ob1> ; )
( ob → :: ob <ob2> <rest> ; )
( C%2 → :: C%2 <ob1> ; )
( ob → :: ob <ob2> <rest> ; )
( 2 → :: 2 <ob1> ; )
( ob → :: ob <ob2> <rest> ; )
Both a real and a complex two are TRUE conditions
for this test.
( %-1 → :: %-1 <ob1> ; )
( ob → :: ob <ob2> <rest> ; )
( C%-1 → :: C%-1 <ob1> ; )
( ob → ob <ob2> <rest> ; )
( -1 → :: -1 <ob1> ; )
( ob → :: ob <ob2> <rest> ; )
Both a real and a complex -1 are TRUE conditions
for this test.
Meta Object Tests
Addr.
2AFFB
Name
MEQ1stcase
2AF37
AEQ1stcase
2B01B
MEQopscase
2B06A
AEQopscase
2B083
Mid1stcase
Description
( meta&ob1 ob2 → ob1=ob2 ? case )
Meta&ob1 ob2 ob1=ob2 ? case
( meta&ob → ob=nob ? case )
Meta&ob ob=nob ? case
( meta1&ob1 meta2&ob2 ob3 → )
Meta1&ob1 Meta2&ob2 ob3
meta1&ob1 meta2&ob2
Meta1&ob1 Meta2&ob2
( meta&ob → ob is id )
lam ? case
Meta&ob ob is id or lam ? case
144
Addr.
2AE32
20.4.7
20. Conditionals
Name
M-1stcasechs
Description
( Meta&NEG → Meta COLA )
( Meta → Meta SKIP )
( Meta&(%<0) → Meta&ABS(%) COLA )
Meta&NEG Meta COLA ; Meta Meta SKIP
Meta&(%<0) Meta&ABS(%) COLA
General Object Tests
Addr.
36EBB
Name
EQIT
36F01
EQITE
36D3A
jEQcase
34999
EQcase
359F7
REQcase
34920
EQcasedrop
35A10
REQcasedrop
36D62
EQUALcase
36E7F
EQUALNOTcase
36D08
EQUALcasedrp
Description
( ob1 ob1 → :: <ob1> <rest> ; )
( ob1 ob2 → :: <ob2> <rest> ; )
( ob1 ob1 → :: <ob1> <ob3> <rest>
; )
( ob1 ob2 → :: <ob2> <rest> ; )
( ob1 ob1 → :: <ob1> ; )
( ob1 ob2 → :: <ob2> <rest> ; )
( ob1 ob1 → :: ob1 <ob1> ; )
( ob1 ob2 → :: ob1 <ob2> <rest> ;
)
Note: Should be called OVEREQcase.
( ob → :: ob <ob2> ; )
( ob → :: ob <ob3> <rest> ; )
EQcase with the next object in the runstream.
( ob1 ob1 → :: <ob1> ; )
( ob1 ob2 → :: ob1 <ob2> <rest> ;
)
Note: should be OVEREQcasedrop.
( ob → <ob2> ; )
( ob → <ob3> <rest> ; )
EQcasedrop with the next object in the runstream.
( ob1 ob1 → :: <ob1> ; )
( ob1 ob2 → :: <ob2> <rest> ; )
( ob1 ob1 → :: <ob2> <rest> ; )
( ob1 ob2 → :: <ob1> ; )
( ob ob1 ob2 → :: <ob1> ; )
( ob ob1 ob2 → :: ob <ob2> <rest>
; )
20.4. Reference
Addr.
2AD81
Name
EQUALcasedrop
29E99
tok=casedrop
2ADBD
nonopcase
2B0CC
idntcase
36E93
dIDNTNcase
2B0EF
idntlamcase
36DF3
REALcase
36EA7
dREALNcase
36E07
dARRYcase
36E43
dLISTcase
260C6
NOTLISTcase
260D0
NOTSECOcase
260CB
NOTROMPcase
2ADE0
numb1stcase
145
Description
( ob1 ob2 → :: <ob1> ; )
( ob1 ob2 → :: ob1 <ob2> <rest>
)
( $ $' → :: <ob1> ; )
( $ $' → :: $ <ob2> <rest> ; )
Note: should be OVERtok=casedrop.
( seco → :: seco <ob2> <rest> ;
( ob → :: ob <ob1> ; )
( id → :: id <ob1> ; )
( ob → :: ob <ob2> <rest> ; )
( id → :: id <ob2> <rest> ; )
( ob → :: ob <ob1> ; )
( id/lam → :: id <ob1> ; )
( ob → :: ob <ob2> <rest> ; )
( % → :: <ob1> ; )
( ob → :: <ob2> <rest> ; )
( % → :: % <ob2> <rest> ; )
( ob → :: ob <ob1> ; )
( [] → :: [] <ob1> ; )
( ob → :: ob <ob2> <rest> ; )
( {} → :: {} ob1 ; )
( ob → :: ob <ob2> <rest> ; )
( {} → :: {} <ob2> <rest> ; )
( ob → :: ob <ob1> ; )
( seco → :: seco <ob2> <rest> ;
( ob → :: ob <ob1> ; )
( romp → :: romp <ob2> <rest> ;
( ob → :: ob <ob1> ; )
( %/C%/[]/[L] → :: <ob1> ; )
( ob → :: ob2 <rest> ; )
If %, C%, [ ] or [L] then COLA, else SKIP.
;
)
)
)
146
20.4.8
20. Conditionals
Miscellaneous
Addr.
36F65
Name
UserITE
36F79
SysITE
36C4F
caseDoBadKey
36C36
caseDrpBadKy
361B2
caseERRJMP
36B53
caseSIZEERR
36B67
NcaseSIZEERR
36BAA
NcaseTYPEERR
25EEE
NoEdit?case
36E57
EditExstCase
2BE36
(ALGcase)
Description
( #set → :: <ob1> <ob3> <rest> ; )
( #clr → :: <ob2> <rest> ; )
( #set → :: <ob1> <ob3> <rest> ; )
( #clr → :: <ob2> <rest> ; )
( T → :: DoBadKey ; )
( F → :: <ob1> <rest> ; )
aka: caseDEADKEY
( ob T → :: DoBadKey ; )
( ob F → :: ob <ob1> <rest> ; )
( T → :: ERRJMP ; )
( F → :: <ob> <rest> ; )
( T → :: SIZEERR ; )
( F → :: <ob> <rest> ; )
( T → :: <ob> <rest> ; )
( F → :: SIZEERR ; )
( T → :: <ob1> <rest> ; )
( F → :: TYPEERR ; )
( → :: <ob1> <rest> ; )
( → :: <rest> ; )
Tests if there is no edit line active.
( → :: <ob1> <rest> ; )
( → :: <rest> ; )
Tests if there is an edit line active.
( → :: <ob1> ; )
( → :: <ob2> <rest> )
Tests for algebraic mode and does case.
Chapter 21
Loops
As in User RPL, there are two types of loops in System RPL: indefinite
loops and definite loops. Indefinite loops are loops in which you do not know
beforehand how many times it will be executed: it will repeat until a specific
condition is met. They are created in a very similar manner to User RPL indefinite loops. Definite loops, on the other hand, are executed a number of times
specified before its start. They not created exactly like in User RPL, but their
use is simple and more powerful. For example, you can change the number of
times to run the loop while running it.
In the descriptions below, the elements between < > can consist of several objects, unless otherwise noted.
21.1
Indefinite Loops
In System RPL, indefinite loops can be made in three ways. The first is
the WHILE loop. It is created like this:
1
5
BEGIN
<test clause>
WHILE
<loop object>
REPEAT
This kind of loop executes <test clause>, and if the test is TRUE,
<loop object> is executed, and the loop starts again. If the test returned
FALSE, then execution resumes past REPEAT. If the first test returned FALSE,
this loop would never be executed.
This loop requires <loop object> to be a single object. Most of the
times, this will be a composite.
The second type of indefinite loop is the UNTIL loop. It is created like
this:
147
148
1
21. Loops
BEGIN
<loop clause>
UNTIL
This loop is always executed at least once. The word UNTIL expects
a flag. If it is FALSE, the <loop clause> is executed again. If it is TRUE,
execution continues past UNTIL.
There is also a third type of indefinite loop:
1
BEGIN
<loop object>
AGAIN
This loop has no test. To exit it, an error condition must happen, or the
return stack must be directly manipulated. This is useful if the loop code contains several different locations at which decisions about repeating or exiting
the loop have to be made.
21.1.1
How Indefinite Loops Work
Indefinite loops are formed by combinations the words BEGIN, WHILE,
REPEAT, UNTIL and AGAIN. These have nothing special, they are commands
just like the others, that when combined allow loops to be made. They work by
manipulating the runstream and the return stack, so be sure you understand
this concepts (see section 19.1 if in doubt).
Word
BEGIN
UNTIL
WHILE
REPEAT
Stack and action
(→)
This copies the interpreter pointer into the return stack.
( flag → )
If the flag is TRUE, pops the return stack, otherwise sets the interpreter pointer to the topmost address of the return stack, without
popping it.
( flag → )
If the flag is TRUE, does nothing. Otherwise, pops the return stack
and skips the next two objects in the runstream.
(→)
Sets the interpreter pointer to the topmost pointer of the return
stack, without popping it.
21.2. Definite Loops
Word
AGAIN
149
Stack and action
(→)
Sets the interpreter pointer to the topmost address of the return
stack, without popping it.
From the descriptions above, you should have understood how the loops
work, and also why the BEGIN...WHILE...REPEAT loops requires a single
object between WHILE and REPEAT.
21.2
Definite Loops
Definite loops are created with DO and LOOP (or other equivalent words).
DO takes two bints from the stack, representing the stop and start values. The
start value is stored as the current index, which can be recalled with INDEX@.
The stop value can be recalled with ISTOP@. You can store a new value to one
of them with INDEXSTO and ISTOPSTO, respectively.
DO’s counterparts are LOOP and +LOOP. The former increments the index value by one, and checks if the new value is greater than or equal to the
stop value, exiting the loop if it is. If not, the loop is executed again. +LOOP
works similarly, incrementing the index by the bint in level one.
The standard form of a DO loop is
stop start DO <loop clause> LOOP
which executes <loop clause> for each index value from start to stop-1.
Note that the stop value is greater than what it would be in User RPL, so pay
attention. Also, the “stop” value comes before the “start” value.
There are several words provided to be used with DO loops, like ONE_DO.
They are listed below.
Here is an example of a simple loop which outputs the bints #1h, #2h,
#3h and #4h to the stack:
1
5
::
BINT5 BINT1
DO
INDEX@
LOOP
;
It could be changed to:
150
1
5
21. Loops
::
BINT5 ONE_DO
INDEX@
LOOP
;
21.2.1
How a DO Loop Works
If you have some familiarity with concepts such as the return stack and
the runstream (described in section 19.1), this section will explain to you how
a DO loop works.
When the word DO is executed, it pushes the interpreter pointer (which
points to the first object after the DO) to the return stack. It also creates a
DoLoop environment, storing the initial and stop values.
Execution continues normally, running all commands between DO and
LOOP.
When LOOP is executed, it increments the current value in the most recent DoLoop environment. If it is greater than or equal to the stop value of
that environment, the environment is destroyed, and one level is popped out
of the return stack. This removes the pointer to the first object after DO, and
execution continues normally after LOOP. If the value is smaller, then the interpreter pointer is set to the top value in the return stack, causing the execution
to re-start at the first object after the DO.
21.3
Reference
21.3.1
Indefinite Loops
Addr.
0716B
Name
IDUP
071A2
BEGIN
Description
( → )
Pushes interpreter pointer into the return
stack.
( → )
Pushes interpreter pointer into the return
stack.
21.3. Reference
Addr.
071AB
Name
AGAIN
071E5
REPEAT
071C8
UNTIL
3640F
NOT_UNTIL
35B96
#0=UNTIL
071EE
WHILE
36428
NOT_WHILE
36441
DUP#0<>WHILE
21.3.2
151
Description
( → )
Sets the interpreter pointer to the topmost
value in the return stack, without popping it.
( → )
Sets the interpreter pointer to the topmost
value in the return stack, without popping it.
( flag → )
If FALSE then AGAIN, otherwise RDROP.
( flag → )
NOT then UNTIL.
( # → # )
Actually, should be DUP#0=UNTIL.
( flag → )
If TRUE does nothing, otherwise RDROP then
2SKIP.
( flag → )
NOT then WHILE.
( # → )
Try to guess what it does.
Definite Loops
Addr.
073F7
073C3
364C8
073CE
073DB
364E1
Name
DO
ZERO_DO
DUP#0_DO
ONE_DO
#1+_ONE_DO
toLEN_DO
07334
073A5
LOOP
+LOOP
364AF
36496
34AAD
07221
DROPLOOP
SWAPLOOP
SEMILOOP
INDEX@
Description
( #stop #start → )
( #stop → )
( #stop → #stop )
( #stop → )
( #stop → )
( {} → {} )
From ONE to #elements.
( → )
( # → )
Increments index by specified number.
( ob → )
( ob1 ob2 → ob2 ob1 )
( → )
( → # )
Recalls topmost loop counter value.
152
21. Loops
Addr.
3645A
3646E
36482
367D9
07270
Name
DUPINDEX@
SWAPINDEX@
OVERINDEX@
INDEX@#INDEXSTO
07249
ISTOP@
07295
ISTOPSTO
283FC
07258
ISTOP-INDEX
JINDEX@
072AD
JINDEXSTO
07264
JSTOP@
072C2
JSTOPSTO
3709B
ExitAtLOOP
Description
( ob → ob # )
( ob1 ob2 → ob2 ob1 # )
( ob1 ob2 → ob1 ob2 ob1 # )
( # → #' )
( # → )
Stores new topmost loop counter value.
( → # )
Recalls topmost loop stop value.
( # → )
Stores new topmost loop stop value.
( → # )
( → # )
Recalls second topmost loop counter value.
( # → )
Stores new second topmost loop counter value.
( → # )
Recalls second topmost loop stop value.
( # → )
Stores new second topmost loop stop value.
( → )
Does not exit loop immediately. Just stores zero
as the stop value, so all objects until the next
LOOP will be evaluated.
aka: ZEROISTOPSTO
Chapter 22
Error Handling
When an error occurs in a System RPL program, normally the program
is aborted and a message box is popped with the error message. However,
sometimes it is desired for the program to trap the error and if possible continue execution, or perhaps show that an error happened in a different way.
Other times, the programs need to generate an error. For example, if
the user gave invalid input for the program, it should abort with a “Invalid
Argument Type” error, instead of risking crashing the machine.
22.1
Trapping Errors
You can intercept the execution of the error handling subsystem, i.e.,
trap an error generated by your program, using the following structure:
1
5
::
...
ERRSET
:: <suspect objects> ;
ERRTRAP
:: <if-error objects> ;
...
;
If <suspect objects> and/or <if-error objects> are only a single object, it is not necessary to include them inside a secondary, naturally.
It works like this: if the <suspect objects> generates an error, the
execution continues at <if-error objects>. Otherwise, it continues past it.
The action of <if-error objects> is completely flexible. Normally, it
will handle the error and then continue or exit the program. The current error
number can be recalled with ERROR@, and then your program can do different
actions on different kinds of errors. The error messages and numbers can be
found in Appendix E.
153
154
22.1.1
22. Error Handling
The Protection Word
Each temporary environment (see Chapter 18), DO/LOOP environment
(see Chapter 21) and virtual stack level (see Chapter 23) has a protection word.
Its purpose is to allow the error handling subsystem to distinguish which environments were created before the error trap, and which were created after.
This way, all environments that were created after the error trap was set will
be deleted in case of an error. For example, consider the following code:
1
5
10
15
20
::
...
1LAMBIND
...
TEN ZERO_DO
ERRSET ::
...
1LAMBIND
...
FIVE ONE_DO
<suspect object is here>
LOOP
ABND
;
ERRTRAP ::
<error handling>
;
LOOP
...
ABND
;
If an error is generated, then the error will be trapped. The inner
DO/LOOP and temporary environments will be deleted, thanks to the protection
word.
When one of these environments is created, its protection word is set
to zero. The word ERRSET increments the protection word of the most recent
environment of each of the three kinds. This way, these environments now
have a non-zero protection word. (The protection word was initialized to zero
when the environment was created.)
The words ERRTRAP and ERRJMP delete these kinds of environments
(from the newest to the oldest) until they find one (of each type) with a non-zero
protection word. These environments were the ones that already existed before
22.2. Generating Errors
155
the setting of the error trap, because they have had their values increased
by ERRSET. This way, all environments created after the setting of the trap
(which still have the protection word as zero) are deleted. Another effect of
ERRTRAP and ERRJMP is that they decrement the protection word of those first
environments found with a non-zero protection word, so that the process works
correctly if there are several levels of nesting.
22.2
Generating Errors
The error handling subsystem is invoked by the word ERRJMP. If an
error trap was set, the error handler will be executed. If none was set, then the
default one will be run.
In most cases, when you generate an error, you will let the default error handler deal with it. This default handler does a beep (if this feature is
enabled), and displays a description of the error in a message box.
The displayed message depends on two things: the error number, which
defines the error message (such as “Bad Argument Type” or “Too Few Arguments”) and the last stored command name.
This last stored command name is automatically stored by the CK<n>
words described in Chapter 29. As mentioned there, if you are writing a program that is not part of a library, no command name should be stored, because
otherwise an ugly name will be shown.
To define the error number, use the word ERRORSTO. It expects a bint as
argument: the number of the error. The errors are listed in Appendix E.
There are some words that automate this process, generating some common errors, such as SETTYPEERROR. These words are listed in the reference
section below. There are also shortcut words for generating some CAS error
messages. These are described in Chapter 52.
Sometimes, however, it is desired to generate an error message that is
not in the built-in error list. In order to do that, first you need to store the
desired message by means of the command EXITMSGSTO. Then, store #70000
as the error number. Note that there is a built-in bint, called #EXITERR, which
contains that number. Now, just call ERRJMP.
The process above can be simplified by using the words DO#EXIT and
DO$EXIT. The first takes a bint as argument, stores that number and calls
ERRJMP. The latter is used with strings, it takes a string as argument and does
the actions described in the previous chapter. However, both entries also call
156
22. Error Handling
AtUserStack, which tells the error handling system not to delete any objects
in the stack. So, do not use this word if there are objects in the stack (put
by your program) that should be deleted. The automatic deletion of non-user
objects in the stack when an error occurs will be described in more detail in
section 29.1.
22.3
Reference
22.3.1
General Words
Addr.
26067
Name
ERRBEEP
04CE6
ERROR@
04D0E
ERRORSTO
36883
ERROROUT
04D33
ERRORCLR
04ED1
ERRJMP
04E07
GETEXITMSG
04E37
EXITMSGSTO
25EAE
DO#EXIT
25EB0
DO%EXIT
25EAF
DO$EXIT
04EA4
ABORT
Description
( → )
Beeps.
( → # )
Returns current error number.
( # → )
Stores new error number.
( # → )
Stores new error number and calls ERRJMP.
( → )
Stores zero as new error number.
( → )
Invokes error handling sub-system.
( → $ )
Gets EXITMSG (user defined error message).
( $ → )
Stores $ as EXITMSG.
( # → )
Stores new error number, does AtUserStack
and then ERRJMP.
( % → )
Same as above, but takes real number as argument.
( $ → )
Stores string as EXITMSG, #70000 as error
number, does AtUserStack and then ERRJMP.
( → )
Does ERRORCLR and ERRJMP.
22.3. Reference
Addr.
04E5E
Name
ERRSET
04EB8
ERRTRAP
04D87
JstGetTHEMESG
04D64
GETTHEMESG
39332
(?GETMSG)
22.3.2
157
Description
( → )
Sets new error trap.
( → )
Error trap marker. If no error happens, still
removes all temporary environments created
since ERRSET.
( # → $ )
Fetches message from message table. To get a
message from a library, use the formula:
libnum*#100+msgnum.
aka: JstGETTHEMSG
( # → $ )
If #70000 then does GETEXITMSG, else does
JstGetTHEMESG.
( # → $msg )
( ob → ob )
If the argument is a bint, does JstGETTHEMSG
to fetch a message. Other arguments are returned unchanged.
Error Generating Words
Addr.
04FB6
Name
SETMEMERR
05016
SETROMPERR
04FF2
SETPORTNOTAV
26134
SYNTAXERR
260C1
NOHALTERR
26116
SETCIRCERR
262E2
SETSTACKERR
Description
Error 001h
Generates "Insufficient Memory" error.
Error 004h
Generates "Undefined XLIB Name" error.
Error 00Ah
Generates "Port Not Available" error.
Error 106h
Generates "Invalid Syntax" error.
Error 126h
Generates "HALT Not Allowed" error.
Error 129h
Generates "Circular Reference" error.
Error 201h
Generates "Too Few Arguments" error.
158
22. Error Handling
Addr.
262DD
Name
SETTYPEERR
262D8
SETSIZEERR
262E7
SETNONEXTERR
2F458
SETIVLERR
2F37B
SetIOPARErr
3721C
Sig?ErrJmp
25F10
ederr
Description
Error 202h
Generates "Bad Argument Type" error.
Error 203h
Generates "Bad Argument Value" error.
Error 204h
Generates "Undefined Name" error.
Error 304h
Generates "Undefined Result" error.
Error C12h
Generates "Invalid IOPAR" error.
( # → )
Calls ERRJMP if the error number is any of {13E
123 DFF}.
( → )
Error handler for applications which use
savefmt1 to save the current display format.
Calls rstfmt1 and then errors out.
Chapter 23
The Virtual Stack
The HP49 has a “Virtual Stack” feature. It is a set of commands that can
manipulate an RPN Stack: basically, you can save the stack and then restore
it.
There exists, in fact, a stack of stacks (a metastack?). The topmost (and
in normal conditions, the only) one is the normal RPN stack, in which the user
enter objects, and from which commands take and return arguments. This
stack will be referred as RPN stack. The set (or, more specifically, the stack) of
stacks will be referred as “Virtual Stack”, with uppercase initials.
You can push the RPN stack (or part of it), making these pushed objects
a level of the “Virtual Stack”. A level of the Virtual Stack will be called “virtual
stack”, with lowercase initials. After pushing the RPN stack, you can manipulate it in any way, and you can at any time restore the contents previously
pushed. Or you can push another stack, thus having two stored virtual stacks,
in addition to a “new” RPN stack which can be used independently.
Each of these pushed virtual stacks holds a number of objects, and the
count of objects. The number of objects is determined when the virtual stack is
pushed, and it is not possible to add more objects later. The words that return
the virtual stack as a meta return this count, the others do not. When pushing,
the words that push the stack as a meta allow you to push only part of the
stack; the others push everything in the RPN stack. But you can pop as a meta
a stack that was not pushed as one, or push a stack as a meta and pop is not
being a meta. The only difference is that the count of elements may or may not
be returned.
The Virtual Stack is used in nearly every HP49 application. It is extremely useful (and really fast) when you want to save immediately a complete
stack, without using much memory.
It is the Virtual Stack that allows you to enter a full command line
in an Input Form and get the results of that command line in the field, for
example. Suppose in an InputForm you type DROP. You will get an error, “Too
Few Arguments” even if the stack was not empty. Before the HP49 runs the
159
160
23. The Virtual Stack
command, it saves the stack into the Virtual Stack, then run the command.
Once the command has been run, it restores the pushed virtual stack above
the new one.
The Virtual Stack is located inside a string which is the first object in
TEMPOB. It has a similar structure as a Local Variable stack. It is made with
blocks, and is protected exactly like local variables. If you trap an error, the
virtual stacks created inside the ERRSET and ERRTRAP will be automatically
deleted, exactly as are local variable blocks. (See section 22.1.1 for more information.)
For examples of the application of the Virtual Stack, see the DoL list
processor in section 19.3 and the HP48 Browser example in section 34.7. Following, there is a list of the commands that deal with the Virtual Stack.
23.1
Reference
Addr.
25F1E
Name
PushVStack
25F1F
PushVStack&Clear
25F1A
PopMetaVStackDROP
Description
( obn..ob1 → obn..ob1 )
Virtual Stack:
( → [obn..ob1] )
Pushes the RPN stack onto the Virtual
Stack. The RPN stack is unchanged.
( obn..ob1 → )
Virtual Stack:
( → [obn..ob1] )
Does PushVStack and then clears the RPN
stack.
( → obn..ob1 )
Virtual Stack:
( [obn..ob1] → )
Pops the topmost virtual stack into the RPN
stack. The previous contents of the RPN
stack are preserved. (The Meta in the name
means that a count is returned, but the DROP
removes it afterwards.)
23.1. Reference
Addr.
25F1B
Name
PopVStack
25F17
GetMetaVStackDROP
25F18
GetVStack
26265
PushMetaVStack
25F1D
PushMetaVStack&Drop
161
Description
( obm..ob1 → obn'..ob1' )
Virtual Stack:
( [obn'..ob1'] → )
Pops the topmost virtual stack into the RPN
stack. The previous contents of the RPN
stack are lost.
( → obn..ob1 )
Virtual Stack:
( [obn..ob1] → [obn..ob1] )
Inserts the objects from the topmost virtual
stack into the RPN stack. The Virtual Stack
is unchanged. (The Meta in the name means
that a count is returned, but it is removed by
DROP.)
( obm..ob1 → obn'..ob1' )
Virtual Stack:
( [obn'..ob1'] → [obn'..ob1'] )
Copies the topmost virtual stack into the
RPN stack.
The Virtual Stack is not
changed, but the current RPN stack is lost.
( obn..ob1 #n → obn..ob1 #n )
Virtual Stack:
( → [obn..ob1] )
Pushes #n objects as a new virtual stack.
Any other objects in the RPN stack are not
pushed. The RPN stack is unchanged.
( obn..ob1 #n → )
Virtual Stack:
( → [obn..ob1] )
Does PushMetaVStack then drops the
pushed objects. Any other objects present
in the RPN stack are neither pushed nor
dropped.
162
23. The Virtual Stack
Addr.
25F19
Name
PopMetaVStack
2624C
GetMetaVStack
25F20
PushVStack&Keep
25F21
PushVStack&KeepDROP
25F1C
PopVStackAbove
Description
( → obn..ob1 #n )
Virtual Stack:
( [obn..ob1] → )
Insers the contents of the most recent virtual stack into the RPN stack, followed by
the count. The previous contents of the RPN
stack are not lost.
( → obn..ob1 #n )
Virtual Stack:
( [obn..ob1] → [obn..ob1] )
Inserts the objects from the topmost virtual
stack into the RPN stack, along with the
count. The Virtual Stack is unchanged.
( obn..ob1 obm'..ob1' #m →
obm'..ob1' #m )
Virtual Stack:
( → [obn..ob1] )
Pushes the contents of the RPN stack which
do not belong to the meta (ie, are "above"
it) into a new virtual stack, removing these
elements, but keeping the meta.
( obn..ob1 obm'..ob1' #m →
obm'..ob1' )
Virtual Stack:
( → [obn..ob1] )
Does PushVStack&Keep and then DROP.
( obm'..ob1' → obn..ob1
obm'..ob1' )
Virtual Stack:
( [obn..ob1] → )
Pops the contents of the topmost virtual
stack (like PopMetaVStackDROP would
have done) into the RPN stack, but above
the current contents of the RPN stack. This
undoes PushVStack&Keep (or PushVStack&KeepDROP).
23.1. Reference
Addr.
26215
Name
DropVStack
26229
GetElemTopVStack
2626F
PutElemTopVStack
26224
GetElemBotVStack
2626A
PutElemBotVStack
163
Description
( → )
Virtual Stack:
( [obn..ob1] → )
Drops the topmost virtual stack from the Virtual Stack.
( #i → obi )
Virtual Stack:
( [obn..ob1] → [obn..ob1] )
Returns the ith object from the topmost virtual stack, counting from the top. "Counting
from the top" means that object # 0 is the one
at the highest-numbered level (n), # 1 is the
one at level n-1, and so on. Note: no checking
wheter #i is valid.
( new_ob #i → )
Virtual Stack:
( [obn..ob(n-i)..ob1] →
[obn..new_ob..ob1] )
Replaces the ith object from the topmost
virtual stack with new_ob, counting from
the top. Note: no checking wheter #i is valid.
( #i → obi )
Virtual Stack:
( [obn..ob1] → [obn..ob1] )
Returns the ith object from the topmost
virtual stack, counting from the bottom.
"Counting from the bottom" means that # 0 is
the object in the lowest numbered level (generally thought of as 1), # 1 is at level 2, etc.
Note: no checking wheter #i is valid.
( new_ob #i → )
Virtual Stack:
( [obn..obi..ob1] →
[obn..new_ob..ob1] )
Replaces the ith object from the topmost
virtual stack with new_ob, counting from
the bottom. Note: no checking wheter #i is
valid.
164
23. The Virtual Stack
Addr.
26233
Name
GetVStackProtectWord
2622E
SetVStackProtectWord
Description
( → # )
Hacking stuff: Gets the protection word of
the last VStack level.
( # → )
Hacking stuff: Sets the protection word of
the last VStack level.
Chapter 24
Memory Operations
The basic equivalents to the user commands STO and RCL are the words
CREATE, STO and @:
Word
CREATE
STO
@
Stack and Action
( ob id → )
Creates a variable with the name id and contents ob. An error
occours if ob is or contains the current directory (“Directory Recursion”). This word does not check if there is already a variable
with name id: even if there is, another one is created.
( ob id → )
( ob lam → )
In the lam case, the temporary identifier is rebound to ob. An
error occurs if the lam is unbound. In the id case, STO attempts to
replace the contents of the variable named id with ob. If a variable
with that name was not found, a new variable is created.
( id → ob TRUE )
( id → FALSE )
( lam → ob TRUE )
( lam → FALSE )
Attempts to return the contents stored in the variable or temporary identifier. Returns the stored object and TRUE if successful,
or just FALSE if no variable or lam was found with that name. In
the case of variables, searching starts in the current directory and
works upwards through parent directories if necessary.
One problem with STO and @ is that if you give, say, SIN as the argument, the whole body of the function is stored in the variable. For that reason,
it is better to use SAFESTO and SAFE@, which work like STO and @, but they
automatically convert ROM bodies into XLIB names (SAFESTO) and back again
(SAFE@).
Note that the SAFE in these and other entries only means that they do
165
166
24. Memory Operations
the conversions described above. With other aspects, there is no safety in these
entries.
There are many other words related to memory, which you will find in
the list below.
24.1
Reference
24.1.1
Recalling, Storing and Purging
Addr.
0797B
Name
@
35C2C
DUP@
35A5B
SAFE@
35A56
DUPSAFE@
25EF7
SAFE@_HERE
2F064
Sys@
2F2A3
XEQRCL
2F24E
LISTRCL
Description
( id/lam → ob T )
( id/lam → F )
Basic recalling function.
( id/lam → id/lam ob T )
( id/lam → id/lam F )
Does DUP then @.
( id/lam → ob T )
( id/lam → F )
For lams does @. For ids does ?ROMPTR> to the
ob found.
( id/lam → id/lam ob T )
( id/lam → id/lam F )
Does DUP then SAFE@.
( id → ob F )
( id → T )
Same as SAFE@, but works only in the current
directory.
( ID → ob T )
( ID → F )
Switches temporarily to the HOME directory
and executes @ there.
( id → ob )
Same as SAFE@, but errors if variable is not
found. Also works for lams, but you get the
wrong error.
( {path id} → ob )
Recalls from specified path.
24.1. Reference
Addr.
07D27
Name
STO
35A29
SAFESTO
2F380
SysSTO
25E79
XEQSTOID
25F0C
3E823
XEQStoKey
xSTO>
0BD007
ˆPROMPTSTO1
085D3
REPLACE
08C27
PURGE
25E78
?PURGE_HERE
1D3006
ˆSAFEPURGE
08696
CREATE
167
Description
( ob id/lam → )
For ids this assumes ob is not pco. If replacing
some object, that object is copied to TEMPOB
and pointers are updated. For lams: Errors if
lam is unbound.
( ob id/lam → )
For ids, does ?>ROMPTR to the object before
storing.
( ob ID → )
Switches temporarily to the HOME directory
and executes STO there.
( ob id/lam → )
Same as SAFESTO, but will only store in the
current directory and will not overwrite a directory.
aka: ?STO_HERE
( ob ID → )
( ob id → )
( ob symb → )
Like xSTO, but if the level 1 argument is symbolic, use the first element of it as the variable
to write to.
( id/lam → )
Inputs value for a variable and stores it.
( newob oldob → newob )
Replaces oldob (in memory) with newob.
( id → )
Purges variable. Does no type check first.
( id → )
Like PURGE, but only works in current directory.
( idnt/lam → )
Purge idnt/lam if it exist.
( ob id → )
Creates a variable in the current directory. Errors if id is or contains current directory. Assumes id is not a pco.
168
24. Memory Operations
Addr.
25EC4
Name
DoHere:
36A8B
'LAMLNAMESTO
24.1.2
Description
( → )
Next object in the runstream is evaluated for
the current directory only.
( ob → )
STO to LAM LAMLNAME.
Directories
Addr.
25EA1
Name
CREATEDIR
08326
LASTRAM-WORD
25EE7
LastNonNull
08376
PREVRAM-WORD
25EF2
PrevNonNull
082E3
RAM-WORDNAME
25F14
XEQPGDIR
2F296
XEQORDER
25EB9
DOVARS
Description
( id → )
Creates an empty directory.
Calls
?PURGE_HERE first to delete the original.
( rrp → ob T )
( rrp → F )
Recalls first object in directory.
( rrp → ob T )
( rrp → F )
Recalls first object in directory (not null
named).
( ob → ob' T )
( ob → F )
Recalls next object in directory.
( ob → ob' T )
( ob → F )
Recalls next object in directory (not null
named).
( ob → id )
Recalls name of object in current directory.
( id → )
Purges a directory. Checks references, etc.
first.
( {id1 id2..} → )
Orders the variables in the directory by moving the given variables to the beginning of the
directory.
( → {id1 id2..} )
Returns list of variables from current directory.
24.1. Reference
Addr.
25EB8
Name
DOTVARS%
0BD002
ˆDOTVARS{}
25EF1
PATHDIR
2F265
UPDIR
08D5A
CONTEXT@
08D08
CONTEXT!
08DD4
SYSRRP?
08D92
HOMEDIR
3712C
SaveVarRes
37186
RestVarRes
169
Description
( % → {} )
Returns a list of variables in the current directory with user type given by the number. Internal TVARS if a single number was given.
( {# #' ...} → {} )
Returns a list of variables in the current directory with user type given by any of the numbers in the list. This is the core of the TVARS
program.
( → {HOME dir1 dir2..} )
Returns current path.
( → )
Goes to parent directory.
( → rrp )
Recalls current directory.
( rrp → )
Sets new current directory.
( rrp → flag )
Is rrp HOME?
( → )
Sets HOME as current directory.
aka: SYSCONTEXT
( → )
Binds current and last directories to two nullnamed lams.
( → )
First sets HOME as both the current and last
directories (in case an error happens). Then,
restores the current and last directories from
1LAM and 2LAM.
170
24.1.3
24. Memory Operations
The Hidden Directory
Addr.
3714A
Name
SetHiddenRes
370C3
WithHidden
370AF
RclHiddenVar
37104
StoHiddenVar
37118
PuHiddenVar
24.1.4
Description
( → )
Sets the hidden directory as the current and last
directories.
( → ? )
Executes next command in hidden directory.
( id → ob T )
( id → F )
Recalls variable in hidden directory. Same as
:: WithHidden @ ;
( ob id → )
Stores variable in hidden directory. Same as
:: WithHidden STO ;
( id → )
Purges variable in hidden directory. Same as
:: WithHidden PURGE ;
Temporary Memory
The objects in the stack are in a area called “temporary memory”. As
the name says, it is intended for temporary storage.
When you duplicate an object in the stack, you do not actually create a
copy of it: the stack contains only pointers to objects, and only this pointer is
duplicated.
When you modify an object, most commands automatically make a new
copy of the object in question and modify the copy. In other words, if you enter
a string in the stack, press ENTER and edit the string, you have two different
strings now. This only happens because a copy of the string was made before
editing it. If the copy was not made, the two strings would have been modified,
because they were actually the same object.
There are a few commands that do not make a copy of the object before editing it. This means that all copies of the object, in the stack or even
stored in memory will be modified at the same time. Sometimes this is desired,
sometimes not. These commands are sometimes called “bang type”. When this
kind of command appears in this book this is noted in their description. When
you use these commands, you must be careful not to modify too much objects
24.1. Reference
171
simulateneously. . . You can use the commands TOTEMPOB or CKREF to make
another copy of the object: with this, it becomes safe to use this “bang type”
commands.
Addr.
06657
Name
TOTEMPOB
35C90
TOTEMPSWAP
25E9F
CKREF
3700A
SWAPCKREF
06B4E
INTEMNOTREF?
01E0E8
˜INTEMPOB?
Description
( ob → ob' )
Copies object to TEMPOB and returns pointer
to the new copy.
( ob1 ob2 → ob2' ob1 )
Does TOTEMPOB then SWAP.
( ob → ob' )
If object is in TEMPOB, is not embedded in
a composite and not referenced, does nothing.
Else copies it to TEMPOB and returns the
copy.
( ob1 ob2 → ob2 ob1' )
Does SWAP then CKREF.
( ob → ob flag )
If the object is in TEMPOB area, is not embedded in a composite and is not referenced, returns the object and TRUE, otherwise returns
the object and FALSE.
( ob → ob flag )
Chapter 25
Time and Alarms
This chapter contains a list of entries related to times, dates and the
internal list of alarms.
25.1
Reference
Addr.
26120
Name
SLOW
26125
VERYSLOW
2F37E
SORTASLOW
2612A
VERYVERYSLOW
2F2D4
dowait
3005E
%>HMS
30912
%%H>HMS
30077
%HMS>
3008B
%HMS+
300B3
%HMS-
2EECF
TOD
Description
( → )
15 millisecond delay.
( → )
300 millisecond delay.
( → )
1.2 second delay (4 x VERYSLOW).
( → )
3 second delay.
( %secs → )
Waits specified number of seconds.
( % → %hms )
Converts from decimal to H.MMSS format.
( %% → %%hms )
Same as %>HMS, but for long reals.
( %hms → % )
Converts from H.MMSS format to decimal.
( %hms1 %hms2 → %hms )
Adds time in hms format.
( %hms1 %hms2 → %hms )
Subtracts time in hms format.
( → %time )
Returns current time.
172
25.1. Reference
Addr.
2F388
Name
VerifyTOD
2EED0
DATE
2EED2
DATE+DAYS
2EED1
DDAYS
2EED7
CLKTICKS
2EED3
TIMESTR
2F329
Date>d$
2F381
TOD>t$
2F1AB
Date>hxs13
2F003
(Ticks>Date)
2F002
(Ticks>TOD)
2F004
(Ticks>Rpt)
173
Description
( %time → %time )
Checks for validaty of time. Errors if not valid.
( → %date )
Returns current date.
( %date %days → %date' )
Adds specified number of days to date.
( %date1 %date2 → %days )
Returns number of days between two dates.
( → hxs )
Returns tick count.
aka: SysTime
( %dt %tm → "dy dt tm" )
Returns string representation of time, using
current format. Example:
"WED 06/24/98 10:00:45A"
( %date → $ )
Returns string representation of date, using current format.
( %time → $ )
Returns string represent the time, using current
format.
( %date → hxs )
Converts date to ticks.
( hxs → %date )
Returns date from hxs of internal alarm list format.
( hxs → %time )
Returns time from hxs of internal alarm list format.
( hxs → %rpt )
Converts hxs in internal alarm list format to
repetition interval.
174
25.1.1
25. Time and Alarms
Alarms
The internal alarms list has this format:
{ { hxs action } { ... } ... }
The length of each hxs is 24 nibbles. The least significant 13 nibbles
represent the tick value for the time and date. The next 10 nibbles represent
the repeat interval, if any. The most significant nibble represents the status of
the alarm (pending, acknowledged, etc.).
Addr.
2F178
Name
ALARMS@
2F37F
STOALM
2F0AC
PURGALARM%
2F314
RCLALARM%
25FA9
ALARM?
Description
( → {} )
Returns internal alarms list.
( %date %time acti %rep → % )
Stores an alarm. %repeat is the number of ticks
between every repetition. Since there are 8192
ticks in a second, 60 seconds in a minute, and 60
minutes in an hour, to make an alarm that repeats every hour, %repetition would be 8192*60*60
= 29491200. Returns real number representing the
position of the alarm in the list.
( % → )
Internal DELALARM.
( %n → {} )
Recalls nth alarm.
List is in the format of
STOALARMLS.
( → flag )
Returns TRUE if an alarm is due.
Chapter 26
System Functions
Following, there is a list of functions dealing with the system, such as
configuring some aspects of the calculator and turning the calculator off. The
functions dealing with user and system flags are also described here.
26.1
Reference
26.1.1
User and System Flags
Addr.
2614D
Name
SetSysFlag
26044
ClrSysFlag
26170
TestSysFlag
26152
SetUserFlag
26049
ClrUserFlag
26175
TestUserFlag
2F259
RCLSYSF
2F25F
(STOSYSF)
2F23E
DOSTOSYSF
Description
( # → )
Sets the system flag with number #.
( # → )
Clears the system flag with number #.
( # → flag )
Returns TRUE if system flag is set.
( # → )
Set the user flag with number #.
( # → )
Clear the user flag with number #.
( # → flag )
Returns TRUE if user flag is set.
( → hxs )
Recalls system flags from 1 to 64.
( hxs → )
Stores system flags from 1 to 64.
( hxs → )
Stores system flags from 1 to 64, checking for
changes in LASTARG flag.
175
176
26. System Functions
Addr.
2F25A
Name
(RCLSYSF2)
2F260
(STOSYSF2)
2F25B
RCLUSERF
2F261
(STOUSERF)
2F25C
(RCLUSERF2)
2F262
(STOUSERF2)
2F3A9
(STOALLF)
2F3AA
(STOALLF2)
3B76C
(DOSTOALLF2)
25F23
SaveSysFlags
25F22
RestoreSysFlags
2ABF0
RunSafeFlags
Description
( → hxs )
Recalls system flags from 65 to 128.
( hxs → )
Stores system flags from 65 to 128.
( → hxs )
Recalls user flags from 1 to 64.
( hxs → )
Stores user flags from 1 to 64.
( → hxs )
Recalls user flags from 65 to 128.
( hxs → )
Stores user flags from 65 to 128.
( hxs_usr hxs_sys → )
Stores user and system flags from 1 to 64.
First is user flags, second is system flags.
( hxs_sys1 hxs_usr1 hxs_sys2
hxs_usr2 → )
Expects 4 hxs and stores them as user and
system flags.
( {} → )
Stores system and user flags. Expects a list
with two or four hxs. The first two are the
system and user flags, respectively, from 1 to
64. The last two, if present, are the system
and user flags, respectively, from 65 to 128.
( → )
Save system flags in a virtual stack.
( → )
Restore system flags from virtual stack, popping that level.
Run Stream:
( ob → )
Evaluates the next object in the runstream,
but saves and restores the system flags
around it. Uses DoRunSafe. This is very useful.
26.1. Reference
Addr.
2AB69
Name
RunInApprox
2AC0E
DoRunSafe
2ABD7
RunSafeFlagsNoError
2EFA5
DOHEX
2EFA8
DODEC
2EFA6
DOBIN
2EFA7
DOOCT
2EFBF
BASE
2605D
DOSTD
26053
DOFIX
26058
DOSCI
2604E
DOENG
261A7
savefmt1
177
Description
Run Stream:
( ob → )
Eval next object in runstream with system
flags 20, 21 clear and 22, 105, 102, 120 set.
( ob → hxs1 hxs2 )
Evaluate ob and put the system flags as they
were before the evaluation on the stack. Used
by RunSafeFlags and RunSafeFlagsNoError.
Run Stream:
( ob → )
:: 'R DoRunSafe 2DROP ;
( → )
Switch stack display format of HEX strings to
hexadecimal.
( → )
Switch stack display format of HEX strings to
decimal.
( → )
Switch stack display format of HEX strings to
binary.
( → )
Switch stack display of HEX strings to octal.
( → # )
Returns #10h, #10d, #10b or #10o. In decimal
terms, 16 for hexadecimal base, 10 for decimal
base, 8 for octal base or 2 for binary base.
( → )
Internal version of user word STD.
( # → )
Internal version of user word FIX.
( # → )
Internal version of user word SCI.
( # → )
Internal version of user word ENG.
( → )
Saves the current number format, and
changes to STD mode.
178
26. System Functions
Addr.
261A2
Name
rstfmt1
2FFDB
SETRAD
25EF3
RAD?
2FFBD
SETDEG
2FFEF
SETGRAD
25EBA
DPRADIX?
26.1.2
Description
( → )
Restores the number format saved by
savefmt1. Only one set of flags can be saved,
there is no nesting of these entries.
( → )
Set angular mode to RAD.
( → flag )
Is angular mode RAD?
( → )
Set angular mode DEG.
( → )
Set angular mode GRAD.
( → flag )
Returns TRUE if current radix is ".".
General Functions
Addr.
25EB2
Name
DOBEEP
261AC
setbeep
041A7
TurnOff
041ED
DEEPSLEEP
01118
LowBat?
0426A
ShowInvRomp
2EE5D
?FlashAlert
05F42
GARBAGE
05F61
MEM
Description
( %freq %dur → )
Beeps. Analog to user function BEEP.
( #ms #Hz → )
Also beeps.
( → )
Internal OFF.
( → flag )
Puts HP into deepsleep mode. Returns TRUE if
"Invalid Card Data" message.
( → flag )
Returns TRUE if low battery.
( → )
Flashes "Invalid Card Data" message.
( → )
Displays system warnings.
( → )
Forces garbage collection.
( → # )
Returns amount of free memory in nibbles. Does
not do garbage collection. (The user word does.)
26.1. Reference
Addr.
05902
Name
OSIZE
05944
OCRC
2F257
OCRC%
2F267
VARSIZE
394C8
INHARDROM?
05AB3
CHANGETYPE
25F90
>LANGUAGE
25F95
LANGUAGE>
256BE
NOBLINK
25E71
?BlinkCursor
179
Description
( ob → # )
Returns object size in nibbles. Forces garbage
collection.
( ob → #nib hxs )
Returns size in nibbles and checksum as hxs.
( ob → hxs %bytes )
Returns checksum and size in bytes.
( id → hxs %bytes )
Returns checksum and size in bytes of specified
variable.
( ob → ob flag )
Is object address < #80000h?
( ob #prolog → ob' )
Changes prolog of object, does TOTEMPOB.
( # → )
Sets the current language for messages. Internal version of x→LANGUAGE.
( → # )
Returns the current language for messages. Internal version of the xLANGUAGE→ command.
( → )
Clears the BLINKFLAG, SysNib5.
( → )
Makes the cursor Blink if in App-mode or Editline.
Chapter 27
Serial Communications
The entries listed here allow the programmer to write programs that
communicate with other machines via the HP49G serial interface.
27.1
Reference
Addr.
2EEBB
Name
SENDLIST
2EEBC
GETNAME
2EEBD
DOFINISH
2EEBE
DOPKT
2EEC1
DOBAUD
2EEC2
DOPARITY
2EEC3
DOTRANSIO
2EEC4
DOKERRM
2EEC5
DOBUFLEN
2EEC6
DOSBRK
2EEC7
DOSRECV
Description
( {} → )
Internal SEND.
( $/id/lam → )
Internal KGET.
( → )
Internal FINISH.
( $ $' → )
Internal PKT.
( % → )
Internal BAUD.
( % → )
Internal PARITY.
( % → )
Internal TRANSIO.
( → $ )
Internal KERRM.
( → % 0/1 )
Internal BUFLEN.
( → )
Internal SBRK.
( % → )
Internal SRECV.
180
27.1. Reference
Addr.
2EEC9
Name
CLOSEUART
2EECB
DOCR
2EECD
DODELAY
2F31A
APNDCRLF
2716D
StdIOPAR
2EEBF
GetIOPAR
2F062
StoIOPAR
2F37B
SetIOPARErr
2F34F
KVISLF
2F34E
KVIS
2F34D
KINVISLF
2F389
VERSTRING
181
Description
( → )
Internal CLOSEIO.
( → )
Internal CR.
( % → )
Internal DELAY.
( $ → $' )
Appends carriage return and line feed to string.
( → {} )
Default IOPAR: { 9600 0 0 0 3 1 }.
( → %baud % % % % % )
Recalls IOPAR and explodes it into the stack.
( {} → )
STO the list of IO parameters in the HOME directory in the variable IOPAR.
( → )
Throws the IOPAR error: "Invalid IOPAR".
( $ → $' )
Like KVIS, but insert <cr> in front of each newline for PC's.
( $ → $' )
Translate special characters into digraphs for
ASCII transfer to a PC.
( $ → $' )
Translate digraphs in the string to characters.
and remove <cr> from th end of lines.
( → $ )
Returns version string.
Chapter 28
The HP49 Filer
The HP49 File Manager (Filer for short) allows the programmer to write
various applications that deal with files.
Two built-in applications that use the filer are the File Manager and the
Font Browser.
28.1
Using the Filer
The general entry to call the filer is ˆFILER_MANAGERTYPE. It takes
three arguments: Filer_Type, Filer_Path and Filer_List.
28.1.1
The Filer_Type Argument
This argument allows to select the object types that should be displayed.
It is a list of the object prologue addresses that will be allowed.
As an example, the HP49 Font Browser only displays fonts, directories and backup objects. So, Filer_Type is specified as { DOFONT DORRP
DOBAK }.
If you want to browse all kinds of objects, then this parameter should be
just { ZERO }. Since this is very common, there is an entry that will supply
this list as argument to ˆFILER_MANAGERTYPE. It is called ˆFILER_MANAGER.
Using this entry, you only specify the other two arguments.
28.1.2
The Filer_Path Argument
This argument specifies the initial path. It can be:
Value
{ }
{ FOO.DIR }
Meaning
start in HOME
start in HOME/FOO.DIR
182
28.1. Using the Filer
Value
:n:{ }
:n:{ FOO }
28.1.3
183
Meaning
start in port n
start in backup FOO in port n.
The Filer_List Argument
This argument specifies the menu keys and hard key assignments. It is
a list with one element for each menu key. Each menu key is represented by a
list with three to five arguments.
The general structure is like this:
1
{
{
(Item 1)
Name_Item
Location_Item
Action_Item
[ ExtraProgram_Item (if 16 <= Action_Item <= 23) ]
[ Key_Shortcut ]
5
}
{
10
(Item 2)
...
}
..
15
}
Each of the elements in the sublists will be described now.
28.1.3.1
Name_Item
This specifies what will be displayed in the menu. It can be either a
string, a grob or a program which when evaluated returns a string or a grob.
28.1.3.2
Location_Item
This allows you to control when the action bound to this menu can be
run. This is either a bint or a program that returns a bint when evaluated.
There are five possible values, which are listed in the table below. The
“Constant” column lists the name of a constant (defined in the filer.h file in
the includes directory of the examples) that you should use when programming.
184
28. The HP49 Filer
Value
0
1
Constant
fEverywhere
fVar
2
fNoLib
3
fNoBackup
4
fHomePort
28.1.3.3
Meaning
The action can be run anywhere.
The action can be run only if the user is browsing
the HOME directory or one of its subdirectories.
The action cannot be run if the user is browsing a
library.
The action cannot be run if the user is browsing a
backup object in a port.
The action can only be run in the root of a port.
Action_Item
This will define what will happen when the user presses the softkey
corresponding to that menu or the hardkey assignemnt (see section 28.1.3.5).
It is a bint, or a program that returns a bint when evaluated.
It is possible to call a built-in function of the Filer, or define your own.
The table below lists the built-in actions available. Again, “Constant” is the
name of a constant defined in filer.h.
Value
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
24
Constant
cBip
cInfo
cHexa
cView
cArbo
cUp
cMaxUp
cDown
cMaxDown
cSelect
cUpDir
cDownDir
cPreviousMenu
cNextMenu
cEVAL
cSwapHeader
cDetails
25
26
cEDIT
cCOPY
Action
Beeps.
Not implemented in the HP49G.
Not implemented in the HP49G.
Views the object.
Shows the directory tree.
Moves the highlight up.
Moves the highlight to the first item.
Moves the highlight down.
Moves the highlight to the last item.
Marks the selected variable.
Goes to the parent directory.
Visits the highlighted directory.
Displays the previous menu page.
Displays the next menu page.
Evalutes the highlighted variable.
Toggles between the two available header lines.
Toggles between showing information on the
variables or just their names.
Edits the selected variable.
Copies the selected variable.
28.1. Using the Filer
Value
27
28
29
30
31
32
33
34
35
Constant
cMOVE
cRCL
cPURGE
cRENAME
cCRDIR
cORDER
cSEND
cHALT
cEDITB
36
37
38
39
40
41
cRECV
cQUIT
cPageUp
cPageDown
cNewObject
cSort
185
Action
Moves the selected variable.
Recalls the contents of the select variable.
Purges the selected variable.
Renames the selected variable.
Creates a directory.
Reorders the variables in the current directory.
Sends the select variable using Kermit.
Suspends the filer temporarily.
Edits the select variable in the most appropriate
editor.
Receives a variable using Kermit.
Exits the filer.
Scrolls the contents of the filer one screen up.
Scrolls the contents of the filer one screen down.
Creates a new variable.
Opens a dialog with several options for sorting
the variables.
To run a custom program, the Action_Item argument will be in the
range 16–23. Each of these seven values specifies what will be in the stack and
how your program is going to be called.
The table below lists the calling methods:
Value
16
17
18
Description
Recalls only the current path.
1: Path
Recalls the name and the contents of the currently selected object.
3: Path
2: Object
1: Name
Equivalent to the above, but deals with multiple selected objects.
2n + 2: Path
..
.
5:
4:
3:
2:
1:
Object 2
Name 2
Object 1
Name 1
Number of objects (bint)
186
28. The HP49 Filer
Value
19
20
21
Description
The program is called once for each object. For each object, puts the
same that calling method #17 puts.
Recalls only the name of the current object.
2: Path
1: Name
Recalls all the selected names.
n + 2: Path
..
.
3: Name 2
2: Name 1
1: Number of names (bint)
Recalls the current object only in a string of addresses.
2: Path
1: String
Recalls the selected objects in a string of addresses.
2: Path
1: String
22
23
Custom calls 22 and 23 will not be described here, as they are not very
useful and somewhat more difficult to use.
When the program is called on a library at the root of a port, some
special rules apply to the name:
• For calls 17 and 18, the name will be the title of the library. (Like “Emacs
1.09 CD&Pivo”.)
• For call 19, the name will be an “L” plus the number of the library, for
example, “L1790”.
• For calls 20 and 21, the name will the library number as a real number.
28.1.3.4
ExtraProgram_Item
When using a custom program, this element holds the program to be
called.
There are some additional features that can be useful:
• If you launch the program from VAR, your program will start in the current browsed directory.
28.1. Using the Filer
187
• A program can only be called on a selected object, except for call 16 which
can be run in an empty directory.
• By default, once a program has been run, the screen will be refreshed, the
working directory will be parsed again and the current selection will be
lost. You can prevent that by leaving FALSE in the stack. Example:
1
5
{ "INFO"
fEverywhere
BINT20
:: SWAPDROP (Remove the path)
"Name selected is:" DISPROW1
ID>$ DISPROW2
FALSE
;
}
• If you want to force the Filer to exit after the program is run, leave
“TakeOver” in the stack. Example:
{ "QUIT" fEverywhere BINT16 :: DROP ' TakeOver ; }
which is equivalent to this, which uses the built-in call:
{ "QUIT" fEverywhere cQUIT }
28.1.3.5
Key_Shortcut
Use this argument to assing a program to a key. This argument is a
bint in the form # axx, where a is 0 or 1, meaning without alpha and with,
respectively. xx is the key code plus optionally #40 for the Left Shift or #C0 for
the right shift.
If you want to assign your program to LeftShift + TOOL, the number
will be #049: #09 representing the TOOL key, and #40 for the LeftShift.
NOTE: This argument must be the fifth of the list. So, if you are using
a built-in call you will have to define the entry as something like this:
{ "TITLE" fEverywhere cQUIT TakeOver # 12F }
This will assing the program to Alpha-ON.
188
28.2
28. The HP49 Filer
Reference
Addr.
067004
Name
ˆFiler
06D004
ˆFILER_MANAGER
06E004
ˆFILER_MANAGERTYPE
Description
( → )
Calls the standard filer.
( {path} {args} → )
Customized Filer, browsing all object types.
( {types} {path} {args} → )
{args} = { item1 item2 ... }
item = {name loc action [prog] [key]} ... }
Customized filer for selected types only.
Part III
Input and
Output
Chapter 29
Checking for Arguments
In System RPL, it is very important to check if all arguments required
by a program are present in the stack, and if they are of a valid type, when
that program is directly accessible to the user. In User RPL, you do not have to
worry about this: it is done automatically. In System RPL, very few commands
do that, so this task is left for the programmer. This may seen at first a disadvantage, but it is in fact an advantage: you just need to check the arguments
once, in the beginning of the program. This generates a fast code, differently
from User RPL where the arguments are checked in every command.
29.1
Number of Arguments
To check for a specific number of arguments, use one of the following
commands. They check if there are enough arguments in the stack, and produce a “Too Few Arguments” error if not.
Command
CK0, CK0NOLASTWD
CK1, CK1NOLASTWD
CK2, CK2NOLASTWD
CK3, CK3NOLASTWD
CK4, CK4NOLASTWD
CK5, CK5NOLASTWD
When to use
No arguments required
One argument required
Two arguments required
Three arguments required
Four arguments required
Five arguments required
The CK<n> commands save the name of the command in which they are
executed, and if an error happens, that name is displayed. (For more details,
see Chapter 22.) This means they should only be used in libraries, because if
they are not part of a library and there is an error, the error will be shown as
something like “XLIB 1364 36 Error:”. In programs that are not a part of a
library, use CK<n>NOLASTWD, which does not save the name of the command.
191
192
29. Checking for Arguments
Besides checking for the specified number of arguments, these words
also “mark” the stack in a way that, if an error happens, the objects that
were pushed in the stack by your program can be removed, leaving no junk
in the stack. This works by “marking” the stack above the nth level, where n is
the number of required arguments. For example, if your program uses CK2 or
CK2NOLASTWD and there are three arguments in the stack, you can image the
stack like this:
3:
2:
1:
10.
3.
5.5
This mark is not fixed at this level; instead it moves as elements are
pushed or popped. Here is the stack after the program pushes the bint 1:
4:
3:
2:
1:
10.
3.
5.5
¤ 1h
Now, if an error happens in the program, all objects “below” the mark
are dropped. This removes all objects pushed by the program, and also the
program arguments if they are still in the stack. This is the standard HP49G
behavior.
Besides checking for a number of arguments and providing for error recovery, these words also save the arguments as the last arguments, recoverable
via the LASTARG User command, provided this is enabled. If an error occours
and it is enabled, then the arguments are automatically restored.
For user-acessible programs that take no arguments, you should nevertheless use CK0 (or CK0NOLASTWD if it is not part of a library), to mark all the
objects in the stack as of user ownership and mark the stack for error recovery.
If your program uses a stack-defined number of arguments (like DROPN),
use the words CKN or CKNNOLASTWD. These words first check for a real number
in level one, and then for the specified number of objects in the stack. The stack
is marked at level two, but only the real number is saved in LAST ARG. The
real is converted to a bint.
29.2. Argument Type
29.2
193
Argument Type
The words CK&DISPATCH1 and CK&DISPATCH0 are used to allow your
program to do different actions based on the types of arguments given to it.
They are used like this:
1
5
...
CK&DISPATCH1
#type1 action1
#type2 action2
#type3 action3
...
#type_n action_n
;
The type/action pairs are terminated by a SEMI (;). If after the dispatching you want to do some more actions for all argument types, you will
need to enclose the whole CK&DISPATCH1 block in another secondary.
This is how CK&DISPATCH0 works: it checks if the stack matches the
definitions in #type1. If it does, action1 is executed, after which program
execution resumes after SEMI. (Each action must be a single object, so if you
want to do more than one action, all of them must be included in a secondary,
i.e., between :: and ;.) If the type definition does not match the stack, then
#type2 is checked, and so on. If no match was found, a “Bad Argument Type”
error is generated.
Even when your program accepts only one combination of arguments,
this command is still useful for checking if the arguments are of the given
type.
The difference between CK&DISPATCH0 and CK&DISPATCH1 is that the
latter, after completing the first pass unsuccessfully, strips all the tags from
the arguments, converts zints to reals, and does a second pass. Only after the
second pass without a match the “Bad Argument Type” error is generated.
Each type definition is a bint like this: #nnnnn. Each n is an hexadecimal number representing the object in one position of the stack, according to
the table below. The first n represents the object in level five, the second in
level four, and so on. This way, #00201 represents a complex number in level
three, any object in level two and a real number in level one; #000A6 represents a hxs in level two and an id in level one. There are also two-digit object
type numbers, ending in F. Each time you use one of these, the number of arguments that can be checked is reduced. For example, #13F4F represents a real
194
29. Checking for Arguments
number in level three, an extended real in level 2 and an extended complex in
level one.
Dispatch Code
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
0F
1F
2F
3F
4F
5F
6F
7F
8F
9F
AF
BF
CF
DF
EF
FF
User Type
n/a
0
1
2
3, 4 or 29
5
6
7
8, 18 or 19
9
n/a
10
11
12
13
14
20
15
21
22
23
24
25
16
17
26
27
30
27
27
28
Object type
Any object
Real number
Complex number
String
Array or matrix
List
Identifier (global)
LAM (Temporary identifier)
Secondary
Symbolic
Symbolic class
Hex string
Graphics object (GROB)
Tagged object
Unit object
Rompointer (XLIB name)
Bint
Directory
Extended real
Extended complex
Linked array
Character
Code object
Library
Backup object
Library data
Access pointer
Font object
Minifont object
External object 4 (unused)
ZINT
There are also the words CK<n>&Dispatch, where <n> is a number
from one to five. These words combine CK<n> with CK&DISPATCH1. Because
they use CK<n> (and thus save the last command name), they should only be
used in library commands.
29.2. Argument Type
29.2.1
195
Examples
By disassembling and studying built-in words, you can learn a lot. Not
only about argument checking, but also about many other things.
The TYPE command provides an example of dispatching. Here is its
disassembly:
1
5
10
15
20
25
30
::
CK1
::
CK&DISPATCH0
real
%0
cmp
%1
str
%2
arry
XEQTYPEARRY
list
%5
id
%6
lam
%7
seco
TYPESEC (returns 8, 18 or 19)
symb
%9
hxs
%10
grob
%11
TAGGED
%12
unitob
%13
rompointer %14
BINT31
%20 (#)
BINT47
%15
# 3F
%21 (%%)
# 4F
%22 (C%%)
# 5F
%23 (LNKARRAY)
# 6F
%24 (CHR)
# 7F
%25 (CODE)
# 8F
%16
# 9F
%17
# AF
%26 (Library Data)
# CF
% 30 (Font)
# FF
% 28 (ZINT)
any
%27 (External)
;
SWAPDROP
;
In this case, it would have been possible to use CK&DISPATCH1 instead
of CK&DISPATCH0, because tagged objects are explicitly listed on the table.
196
29. Checking for Arguments
Since the last item on the list is any, type 27 is returned for any other object
not listed.
Since TYPE is part of a library, the command CK1&Dispatch could have
been used. The reason it did not is to save ROM space. The inner composite
is actually the body of the System RPL command XEQTYPE. This way, System
RPL programmers can call a function to return the type of the object, without
the overhead of checking if there is an object, and without no need to duplicate
the dispatching mechanism.
Note the object names. They are aliases for built-in bints. See Chapter 2
for a list of built-in bints.
29.3
Reference
Addr.
262B0
Name
CK0
262B5
CK1
262BA
CK2
262BF
CK3
262C4
CK4
262C9
CK5
262CE
CKN
26292
CK0NOLASTWD
Description
( → )
Saves current command to LASTCKCMD.
Marks stack below level 1 to STACKMARK.
( ob → ob )
Saves current command to LASTCKCMD. Verifies that there is at least one object in the stack,
if not generates a "Too Few Arguments" error.
Saves stack mark to STACKMARK. If Last Arg
is enabled then saves the argument.
( ob1 ob2 → ob1 ob2 )
Like CK1, but checks for at least two arguments.
( ob1...ob3 → ob1...ob3 )
Like CK1, but checks for at least three arguments.
( ob1...ob5 → ob1...ob5 )
Like CK1, but checks for at least four arguments.
( ob1...ob5 → ob1...ob5 )
Like CK1, but checks for at least five arguments.
( ob1...obn %n → ob1..obn #n )
Checks for a real in level one. Then checks for
that number of arguments. Finally, converts the
real to a bint.
( → )
Like CK0, but does not save current command.
29.3. Reference
Addr.
26297
Name
CK1NOLASTWD
2629C
CK2NOLASTWD
262A1
CK3NOLASTWD
262A6
CK4NOLASTWD
262AB
CK5NOLASTWD
25F25
CKNNOLASTWD
2631E
CK&DISPATCH0
26328
CK&DISPATCH1
26323
CK&DISPATCH2
26300
CK1&Dispatch
26305
CK2&Dispatch
2630A
CK3&Dispatch
2630F
CK4&Dispatch
26314
CK5&Dispatch
25F9A
0LASTOWDOB!
2EF6C
AtUserStack
25E9E
CK1NoBlame
197
Description
( ob → ob )
Like CK1, but does not save current command.
( ob1 ob2 → ob1 ob2 )
Like CK2, but does not save current command.
( ob1...ob3 → ob1...ob3 )
Like CK3, but does not save current command.
( ob1...ob4 → ob1...ob4 )
Like CK4, but does not save current command.
( ob1...ob5 → ob1...ob5 )
Like CK5, but does not save current command.
( ob1...obn %n → ob1..obn #n )
Like CKN, but does not save current command.
( → )
Dispatches on stack argument.
( → )
Dispatches on stack arguments, stripping tags
and converting reals to ZINTS if necessary.
( → )
Equivalent to CK&DISPATCH1.
( → )
Combines CK1 with CK&DISPATCH1.
( → )
Combines CK2 with CK&DISPATCH1.
( → )
Combines CK3 with CK&DISPATCH1.
( → )
Combines CK4 with CK&DISPATCH1.
( → )
Combines CK5 with CK&DISPATCH1.
( → )
Clears command save by last CK<n> command.
aka: 0LASTOWDOB!, 0LastRomWrd!
( → )
:: CK0NOLASTWD 0LASTOWDOB! ;
( → )
:: 0LASTOWDOB! CK1NOLASTWD ;
198
29. Checking for Arguments
Addr.
354CB
Name
'RSAVEWORD
26319
EvalNoCK
25F29
(EvalNoCK:)
2A9E9
RunRPN:
29.3.1
Description
( → )
Stores first object in the composite above the actual to LASTCKCMD.
aka: 'RSaveRomWrd
( comp → ? )
Evaluates composite without saving as
current command.
If first command
is CK<n>&Dispatch it is replaced by
CK&DISPATCH1. If first command is CK<n>
it is skipped. Any other first command is also
skipped!
Run Stream:
( ob → )
EvalNoCK with the next object in the runstream
as argument.
Run Stream:
( ob → )
Evaluate the next object in the runstream with
RPN mode on (i.e. system flag 95 clear). After
the evaluation, the system flag is restored to its
old value.
Type Checking
Addr.
36B7B
Name
CKREAL
184006
ˆCK1Z
185006
ˆCK2Z
186006
ˆCK3Z
Description
( % → % )
( Z → % )
Checks for real. If a ZINT, convert to real.
Else SETTYPEERR.
( $/#/hxs → Z )
CHecks for an integer. Converts strings,
bints or hxs's to zints. Errors for other object types.
( ob ob' → Z Z' )
Like ˆCK1Z, but for two objects.
( ob ob' ob'' → Z Z' Z'' )
Like ˆCK1Z, but for three objects.
29.3. Reference
Addr.
3D2B4
Name
CKSYMBTYPE
2EF07
nmetasyms
03C64
TYPE
3BC43
XEQTYPE
3511D
35118
TYPEREAL?
DUPTYPEREAL?
3512C
35127
3510E
35109
TYPECMP?
DUPTYPECMP?
TYPECSTR?
DUPTYPECSTR?
35136
DUPTYPEARRY?
3513B
35292
352AD
35195
35190
TYPEARRY?
TYPERARRY?
TYPECARRY?
TYPELIST?
DUPTYPELIST?
3504B
35046
350E1
350DC
194006
TYPEIDNT?
DUPTYPEIDNT?
TYPELAM?
DUPTYPELAM?
ˆTYPEIDNTLAM?
2F0D4
(ILnot?)
35168
35163
350FF
350FA
35186
TYPESYMB?
DUPTYPESYMB?
TYPEHSTR?
DUPTYPEHSTR?
TYPEGROB?
199
Description
( → )
Checks for quoted name (name as symbolic).
( meta → meta )
Checks for meta containing %, C%, unit, id,
lam or symb.
( ob → #prolog )
Returns address of prolog of object.
( ob → ob %type )
System version of user word TYPE, but this
keeps the object.
( ob → flag )
( ob → ob flag )
aka: DTYPEREAL?
( ob → flag )
( ob → ob flag )
( ob → flag )
( ob → ob flag )
aka: DTYPECSTR?
( ob → ob flag )
aka: DTYPEARRY?
( ob → flag ??? )
( ob → flag )
( ob → flag )
( ob → flag )
( ob → ob flag )
aka: DTYPELIST?
( ob → flag )
( ob → ob flag )
( ob → flag )
( ob → ob flag )
( ob → flag )
Tests if ob is ID or lam.
( ob → ob flag )
Tests if ob is neither an ID nor a LAM.
( ob → flag )
( ob → ob flag )
( ob → flag )
( ob → ob flag )
( ob → flag )
200
29. Checking for Arguments
Addr.
35181
351A4
3519F
351B3
Name
DUPTYPEGROB?
TYPETAGGED?
DUPTYPETAG?
TYPEEXT?
351AE
DUPTYPEEXT?
3514A
35145
350F0
350EB
35159
35154
3503C
35037
35177
TYPEROMP?
DUPTYPEROMP?
TYPEBINT?
DUPTYPEBINT?
TYPERRP?
DUPTYPERRP?
TYPECHAR?
DUPTYPECHAR?
TYPECOL?
35172
DUPTYPECOL?
350D2
350CD
35087
35082
350C3
350BE
350B4
350AF
350A5
350A0
35096
35091
182006
183006
114007
TYPEAPLET?
DUPTYPEAPLET?
TYPEFLASHPTR?
ˆTYPEGAUSSINT?
115007
ˆDTYPEGAUSSINT?
DUPTYPEFLASHPTR?
TYPEFONT?
DUPTYPEFONT?
TYPELNGCMP?
DUPTYPELNGCMP?
TYPELNGREAL?
DUPTYPELNGREAL?
TYPEZINT?
DUPTYPEZINT?
ˆTYPEZ?
ˆDUPTYPEZ?
Description
( ob → ob flag )
( ob → flag )
( ob → ob flag )
( ob → flag )
Is ob a unit object?
( ob → ob flag )
Is ob a unit object?
( ob → flag )
( ob → ob flag )
( ob → flag )
( ob → ob flag )
( ob → flag )
( ob → ob flag )
( ob → flag )
( ob → ob flag )
( ob → flag )
Is on a secondary?
( ob → ob flag )
Is ob a secondary?
aka: DTYPECOL?
( ob → flag )
( ob → ob flag )
( ob → flag )
( ob → ob flag )
( ob → flag )
( ob → ob flag )
( ob → flag )
( ob → ob flag )
( ob → flag )
( ob → ob flag )
( ob → flag )
( ob → ob flag )
( ob → flag )
( ob → ob flag )
( ob → flag )
Checks if ob is Gaussian integer.
( ob → ob flag )
Checks if ob is Gaussian integer.
29.3. Reference
Addr.
116007
Name
ˆDUPTYPEGAUSSINT?
187006
ˆCK1Cext
181006
ˆCKALG
25E77
?OKINALG
171006
ˆDTYPFMAT?
191006
ˆIDNTLAM?
192006
ˆFLOAT?
195006
ˆREAL?
196006
ˆTYPEREALZINT?
193006
ˆCKSYMREALCMP
201
Description
( ob → ob flag )
Checks if ob is Gaussian integer.
( ob → flag )
Checks if object is integer or Gaussian integer.
( ob → ob )
Checks that an object is real/cmplx/unit or
idnt/lam/symbolic.
( ob → ob flag )
Is object allowed in algebraics?
( ob → ob flag )
Tests if object is a symbolic matrix.
( ob → ob flag )
Tests if ob is idnt or lam.
( ob → ob flag )
Tests if ob is real or complex.
( ob → ob flag )
Tests if ob is real, zint or hxs.
( ob → flag )
Tests if ob is real, zint or hxs.
( ob → ob )
Does "Bad Argument Type" error if ob is not
a real, complex or symbolics.
Chapter 30
Keyboard Control
There are several ways a System RPL program can get input from the
user:
• From the stack;
• Waiting keystrokes from the keyboard;
• Using the internal INPUT;
• Using the internal INFORM;
• Setting up a Parameterized Outer Loop;
• And other methods.
You have already seen how to get input directly from the stack. Using InputLine, ParOuterLoop and input forms will be seen on the following
chapters. In this chapter, you will learn how to read keystrokes from the keyboard.
30.1
Key Locations
In User RPL, key representations have the form %rc.p. In System RPL,
they are represented by two binary integers. The first, often called, #KeyCode,
goes from one (F1 key) to 51 (ENTER key), and represents each key, in order,
from left to right and top to bottom. The up arrow is code 10, being considered
the fourth key of the second row. The left, down and right arrows have codes
14, 15, 16, respectively, being considered as part of the third row.
The second number, #Plane, represents the modifier states, according
to the table below:
202
30.1. Key Locations
#Plane
1
2
3
Modifiers
None
Left-shift
Right-shift
203
#Plane
4
5
6
Modifiers
Alpha
Alpha, left-shift
Alpha, right-shift
You can convert from one representation to another using:
Ck&DecKeyLoc
( %rc.p → #KeyCode #Plane )
CodePl>%rc.p
( #KeyCode #Plane → %rc.p )
Sometimes, the shift keys are not being treated as modifiers for other
keys, but as keys in their own right. Then they have the key codes 40h (leftshift), C0h (right-shift), and 80h (alpha).
On the HP48, only the six key planes listed above existed. The HP49
introduced five more planes, the shift-hold keys. These are shifted keypresses,
where the shift key is being held down while the key is pressed. In User RPL,
these keys are denoted by adding 0.01 to the %rc.p representation. For example, the keycode 11.21 means holding down left-shift while pressing the F1
key.
In System RPL, shift-hold keys can be encoded in two ways. The first
form (which we will call encoding A) leaves the keycode #kc unchanged, and
uses new planes #8...#C. The second form (encoding B) uses planes in the
range #1...#6 and adds the keycode of the shift key to the keycode #kc.
The following table lists the different encodings for all possible ways to
press the F1 key on the HP49G.
Plane
1
2
3
4
5
6
7
8
9
10
11
12
Shift Keys
Unshifted
Left-shift
Right-shift
Alpha
Alpha, left-shift
Alpha, right-shift
Unused
Left-shift-hold
Right-shift-hold
Alpha-hold
Alpha, left-shift-hold
Alpha, right-shift-hold
User RPL
%rc.pl
11.1
11.2
11.3
11.4
11.5
11.6
11.21
11.31
11.41
11.51
11.61
A
B
#kc
1h
1h
1h
1h
1h
1h
#pl
1h
2h
3h
4h
5h
6h
#kc
1h
1h
1h
1h
1h
1h
#pl
1h
2h
3h
4h
5h
6h
1h
1h
1h
1h
1h
8h
9h
Ah
Bh
Ch
41h
C1h
81h
41h
C1h
2h
3h
4h
5h
6h
204
30. Keyboard Control
Most, but not all, System RPL entries dealing with keys can handle
shift-hold key presses. The reference section has information about this issue
for each relevant entry. The System RPL entries which expect #kc and #pl as
arguments (like CodePl>%rc or Key>StdKeyOb) accept both forms of encoding
(A and B). Entries which return #kc or #kc and #pl (like Ck&DecKeyLoc and
GETTOUCH) all use encoding B. Encoding A seems to be more convenient for
dispatching. In order to convert encoding B into encoding A, you can use
:: SWAP 64 #/ ROTSWAP #0=?SKIP #6+ ;
30.2
Waiting for a Key
A convenient entry used to wait for a key is WaitForKey. This command puts the HP49 in a low-power state and waits until a key is pressed. It
then returns the key code to level two and the plane to level one. There are
other words, listed below, which are used in other circunstances.
Unfortunately, WaitForKey does not deal with the shift-hold keys. We
therefore list below a short program which behaves just like WaitForKey but
returns the extended keycode (encoding B). The program contains a code object
accessing the key buffer, which we list without explanation. You will find this
program in the keyboard directory in the examples directory.
1
5
10
15
::
WaitForKey
(normal WaitForKey)
CODE
(get extended keycode)
GOSBVL =SAVPTR
D0=
047DF
A=DAT0 A
D0=A
A=0
A
A=DAT0 1
A=A-1 P
A=A+A A
CD0EX
C=C+A A
CD0EX
D0=D0+ 2
A=DAT0 B
GOVLNG =PUSH#ALOOP
30.3. Reference
ENDCODE
ROTDROPSWAP
20
205
(replace keycode with extended value)
;
If you would like the program to return encoding A instead of encoding
B, just replace ROTDROPSWAP with:
BINT63 #>case #6+
30.3
Reference
30.3.1
Converting Keycodes
Addr.
25EA7
Name
Ck&DecKeyLoc
25EA9
CodePl>%rc.p
25EDC
H/W>KeyCode
25EEA
ModifierKey?
30.3.2
Addr.
261CA
Description
( %rc.p → #kc #p )
Converts from user key representation format
to system. Does handle shift-hold keys.
( #kc #p → %rc.p )
Converts from system key representation format to user. Does handle shift-hold keys.
( # → #' )
Converts the keycode offset for shift keys to the
keycode of the shift key, i.e. 80h->32d, 40h>37d, C0h->42d
( #kc #pl → flag )
Is the key any of the three modifiers right-shift,
left-shift, or alpha?
Waiting for Keys
Name
FLUSHKEYS
Description
( → )
Flushes the key buffer.
aka: FLUSH
206
30. Keyboard Control
Addr.
04708
Name
CHECKKEY
04714
GETTOUCH
25ED6
GETKEY
25ED7
GETKEY*
25ED9
GetKeyOb
25EC5
DoKeyOb
047C7
REPKEY?
25EE3
KEYINBUFFER?
25F0B
WaitForKey
Description
( → #kc T )
( → F )
Returns next key in the key buffer (if there is
one), but does not pop it. Does handle shift-hold
keys.
( → #kc T )
( → F )
Pops next key from key buffer (if there is one).
Does handle shift-hold keys.
( → #kc flag )
Get a single keypress from the keybuffer, waits
if necessary. The key is returned along with
TRUE. If an exception happens, returns FALSE.
The exception is not handled. Does handle shifthold keys.
( → #kc T )
( → F F )
( → {Alrmlist} T F )
Get a single keypress from the keybuffer, waits
if necessary. The key is returned along with
TRUE. If an exception happens (error or alarm),
the exceptions is handled and the entry returns
FALSE. Does handle shift-hold keys.
( → ob )
Wait for a single key and return the object associated with this key. Does handle shift-hold
keys.
( ob → )
Execute ob as if it had been assigned to a key
and the key had been pressed.
( #kc → flag )
Returns TRUE if the key is being pressed.
( → flag )
Returns TRUE if there is at least a key in the key
buffer.
( → #kc #flag )
Returns next full key press. Does not handle
shift-hold keys.
30.3. Reference
Addr.
2F268
30.3.3
Name
Wait/GetKey
207
Description
( % → ? )
Internal WAIT command. Does not handle shifthold keys.
The ATTN Flag
Addr.
25FAE
Name
ATTN?
25E70
?ATTNQUIT
25E9D
CK0ATTNABORT
25EED
NoAttn?Semi
05040
ATTNFLG@
05068
ATTNFLGCLR
30.3.4
Bad Keys
Addr.
25EBF
Name
DoBadKey
25ECD
DropBadKey
25E6E
2DropBadKey
Description
( → flag )
Returns TRUE if CANCEL has been pressed.
( → )
If CANCEL has been pressed, ABORTs program.
aka: ?ATTN_QUIT
( → )
Executed by the UserRPL program delimiters
x<< and x>> and by xUNTIL. Mainly just
?ATTNQUIT.
( → )
If CANCEL has been not pressed, drops the rest
of the stream.
( → # )
Recalls CANCEL key counter.
( → )
Clears CANCEL key counter. Does not affect the
key buffer.
Description
( → )
Beeps.
( ob → )
Beeps.
( ob ob' → )
Beeps.
208
30.3.5
30. Keyboard Control
User Keys
If no keys are assigned, the internal key assignments list is an empty
list. If there is one or more assignments, the list contains 51 sublists, each one
representing one key. Each sublist is either empty, if that key has no assignments; or contains twelve elements: each representing the assignment of one
plane. The planes are given in the table in section 30.1. For planes with no
assignment, an empty list must be given. The seventh list is always empty.
Addr.
25F09
Name
UserKeys?
25967
GetUserKeys
2F3B3
(AsnKey)
25621
(NonUsrKeyOK?)
25617
(SetNUsrKeyOK)
2561C
(ClrNUsrKeyOK)
25EE5
Key>StdKeyOb
25EE6
Key>U/SKeyOb
255006
ˆKEYEVAL
Description
( → flag )
Does BINT62 TestSysFlag.
( → {} )
Returns user keys list (internal format).
( ob #kc #p → )
Assigns an object to a key, specified in system
format.
( → flag )
Returns TRUE if the keys not defined do their
normal actions.
( → )
Keys not defined do their normal actions.
( → )
Keys not defined just beep when pressed.
( #kc #pl → ob )
Recalls the standard assignment of the key.
This is the assignment which is active when
USER mode is of.
( #kc #pl → ob )
If user mode is on, recalls the user object assigned to a key. If user mode is off, recalls the
standard assignment instead.
( % → ? )
Keystroke evaluation. If % is negative, the
standard key is always evaluated.
Chapter 31
Using InputLine
The command InputLine is the system equivalent to the user command INPUT. Its use is similar, and does a similar thing:
• Displays a prompt in the top of the screen;
• Starts the keyboard entry modes;
• Initializes the edit line;
• Accepts input until ENTER is pressed;
• Parses, evaluates, or just returns the user input;
• Returns TRUE if the environment was exited by ENTER or FALSE if it was
aborted by ON/CANCEL.
The stack must contain the following parameters:
Name
$Prompt
$EditLine
CursorPos
#Ins/Rep
Description
The prompt to be displayed during input.
The initial edit line.
The initial cursor position. You can either specify the character
position, in absolute terms, or as a two-element list with the
row and column. In both cases, a #0 represents the end of edit
line, row or column. All numbers should be specified as bints,
naturally.
The initial insert/replace mode of the cursor:
• #0 current mode
• #1 insert mode
• #2 replace mode
209
210
31. Using InputLine
Name
#Entry
Description
The initial entry mode:
• #0 current entry mode plus program entry mode
• #1 only program entry mode
• #2 program and algebraic entry modes
#Alphalock
The initial alpha mode:
• #0 current mode
• #1 alpha enabled
• #2 alpha disabled
ILMenu
The initial menu, in the format specified below. Normally,
specified as FALSE, which means that the menu should not be
changed.
The initial menu row number (normally BINT1, to show the
first page).
A flag:
• TRUE CANCEL aborts the input
• FALSE CANCEL just clears the edit line
#ILMenu
AttnAbort?
#Parse
How to process the edit line:
• #0 return edit line as a string (unevaluated)
• #1 return edit line as a string and a parsed object
• #2 parse and evaluate edit line
If AttnAbort? is TRUE and the user presses CANCEL while InputLine
is active, the edition is aborted. If it is FALSE, CANCEL just clears the edit line.
If it was already empty, then it aborts InputLine, returning FALSE.
Depending on the value of #Parse, different values are returned, acording to the table:
#Parse
#0
#1
#2
Stack
$Editline TRUE
$Editline obs TRUE
ob1 ... obn TRUE
FALSE
Description
Edit line only (unevaluated)
Edit line and parsed object(s)
Resulting object(s)
CANCEL pressed to abort
31.1. Menu Key Assignments
31.1
211
Menu Key Assignments
Any application can specify an initial menu via the ILMenu parameter.
This menu will be displayed when the InputLine starts. All menu keys can
have assignments to the unshifted, left-shifted and right-shifted planes. When
the loop exits, the previous menu is restored intact.
The ILMenu parameter is a list (or, in rare cases, a program returning
a list), in the format described in section 37.1. You can also supply just FALSE
as this parameter, if you do not want the current menu to be changed.
Note that the actions must start with the word TakeOver to flag that
they should be run with the command line active.
31.2
An Example
Here is an example of InputLine, which prompts for your name, and if
the edition was not aborted, displays it.
1
5
10
15
::
$ "Your name:"
NULL$
#ZERO#ONE
ONEONE
NULL{}
ONE
FALSE
ZERO
InputLine
NOT?SEMI
$ "Your name is "
SWAP&$
CLEARLCD
DISPROW1
SetDAsTemp
;
(prompt)
(initial edit line)
(cursor at end, insert mode)
(prog mode, alpha enabled)
(no menu)
(menu row)
(CANCEL clears)
(returns string)
(exit if FALSE)
(concatenate string & name)
(clear display)
(display string on 1st line)
(freeze display)
212
31.3
31. Using InputLine
Reference
Addr.
2EF5F
Name
InputLine
2F154
(input$)
2F155
(input{})
Description
( args → $ T )
( args → $ ob1..obn T )
( args → ob1..obn T )
( args → F )
args = $pr $line #pos
#I/R #I/A #alph
menu #row attn #parse
( $1 $2 → $3 )
This is what the User command INPUT does if level
1 is a string.
( $1 {} → $3 )
This is what the User command INPUT does if level
1 is a list.
Chapter 32
The Parameterized Outer Loop
The Parameterized Outer Loop is a System RPL structure that allows
you to create a complete application, which receives keystrokes and does different actions based on the key that was pressed. This is repeated as many
times as necessary, until an exit condition happens. Most of the time, there
is a key that stops the loop, like CANCEL or DROP. Generally, it is used with
programs that work with the display. Complex uses of the POL include input
forms (Chapter 35) and the browser (Chapters 33 and 34). Note that POLs are
a very general construct and for that reason they require elaborate arguments.
Simple applications can sometimes be implemented more easily and compactly
with a loop around WaitForKey (section 30.2) and direct display handling.
To set up a parameterized outer loop, nine parameters are necessary:
Parameter name
AppDisplay
AppKeys
NonAppKeyOK?
DoStdKeys?
AppMenu
#AppMenuPage
Description
This object is evaluated before each key evaluation.
It should handle display updating not handled by the
keys themselves, and should also perform special handling of errors.
The hard key assignments, in the format described below.
A flag: if TRUE, then the hard keys not assigned perform their normal actions. Otherwise, they just beep.
A flag: if TRUE, then standard key definitions are used
for non-application keys instead of default key processing.
Either the menu specification, in the format described
in section 37.1, or FALSE to leave the current menu unchanged.
The initial menu page. Normally BINT1 to show the
first page.
213
214
32. The Parameterized Outer Loop
Parameter name
SuspendOK?
ExitCond
AppError
Description
A flag: if TRUE, any user command that would create
a suspended environment and restart the system outer
loop will instead generate an error.
This object is evaluated before each display update and
key evaluation. If the result is TRUE, the loop is exited.
The error-handling object to be evaluated in an error
occurs during key evaluation.
After setting up the arguments, call ParOuterLoop. This word does not
generate any results itself, but any of the key assignments can return results
to the stack or any other form desired.
32.1
Parameterized Outer Loop Words
The parameterized outer loop is formed by calls (with proper error handling) to the following words. None of them return anything, and the only one
that takes arguments is POLSetUI: the same nine required by ParOuterLoop.
Word
POLSaveUI
POLSetUI
POLKeyUI
POLRestoreUI
POLResUI&Err
Action
Saves the current user interface in a temporary environment.
Sets the current user interface, according to the parameters given.
Displays, reads and evaluates keys. Handles errors,
and exits according to the user interface specified by
POLSetUI.
Restores the user interface saved by POLSaveUI and
abandons the temporary environment.
Restores the user interface and errors. This is used when
there is an error not handled within the parameterized
outer loop.
The word ParOuterLoop decompiles to:
1
::
POLSaveUI
ERRSET ::
POLSetUI
(save current user interface)
(start error trap)
(set new user interface)
32.2. The Display
5
POLKeyUI
;
ERRTRAP
POLResUI&Err
10
POLRestoreUI
215
(handle keypresses)
(if an error happened, restore)
(the saved interface and error)
(restore saved user interface)
;
If you use the words above instead of ParOuterLoop, you must provide
the same level of error protection as the code above.
One note: the parameterized outer loop creates a temporary environment when it saves its current user interface, and it abandons it when it restores a saved user interface. This means that you cannot use words that operate on the topmost temporary environment, like 1GETLAM within the loop,
unless the variable was created after calling POLSaveUI, and it is abandoned
before calling POLRestoreUI. For temporary environments created before calling POLSaveUI, named temporary variables should be used.
32.2
The Display
In the parameterized outer loop, the user is responsible for setting up
the display and updating it; there is no default display.
The display can be updated in two ways: with the parameter “AppDisplay” or with key assignments. For example, when the user presses a key to
move the cursor, the key assignment can either pass information to “AppDisplay” (often implicitly), so that it handles the screen updating, or the key assignment object can handle the display itself. Which method is more efficient
depends on the situation. In our example below, AppKeys just sets the position
of the grob in lams, and AppDisplay draws the grob.
32.3
Error Handling
If an error occurs during the key processing, AppError is executed. This
object is responsible for processing any errors generated while the parameterized outer loop is running. AppError should determine the specific error and
act accordingly. Or you can just specify ERRJMP as AppError, which means your
application does not handle any errors.
216
32. The Parameterized Outer Loop
32.4
Hard Key Assignments
In the parameterized outer loop, any key in any of the six basic planes
(see section 30.1) can be assigned a new function. The parameter AppKeys
specifies which keys to assign and their actions.
If a key is not assigned by the application, and the NonAppKeyOK?
parameter is TRUE, the standard key definition is executed if the DoStdKeys?
parameter is TRUE, or, if available, the USER key assignment, if it is FALSE.
If NonAppKeyOK? is FALSE, a warning beep is produced, and nothing else is
done.
Most of the time, NonAppKeysOK? should be set to FALSE.
The AppKeys parameter is a secondary, which must take as argument
the keycode and plane, and return either the desired key definition and TRUE,
or FALSE if the application does not handle it. Specifically, the stack diagram
is as follows:
( #KeyCode #Plane → KeyDef TRUE )
( #KeyCode #Plane → FALSE )
The suggested form for the key assignments is:
1
BINT1 #=casedrop :: (process unshifted plane) ;
BINT2 #=casedrop :: (process left-shifted plane) ;
...
2DROPFALSE
And each plane handler normally has the form
1
BINT7 ?CaseKeyDef :: TakeOver <process APPS key> ;
BINT9 ?CaseKeyDef :: TakeOver <process TOOL key> ;
...
DROPFALSE
The word ?CaseKeyDef is very handy in this case, because it is equivalent to #=casedrop :: ' <keydef> TRUE ;. Using this word, the code
becomes shorter, and the definitions become more legible. ?CaseKeyDef is
used in the form:
... #KeyCode #TestKeyCode ?CaseKeyDef <keydef> ...
If #TestKeyCode equals #KeyCode, ?CaseKeyDef drops both of them,
pushes <KeyDef> and TRUE to the stack, and exits the secondary. Otherwise,
it drops only #TestKeyCode, skips <KeyDef> and continues.
32.5. Menu Key Assignments
217
If you want to handle shift-hold keys, you can do so. The extended keycode (encoding B, see section 30.1) is provided to the AppKeys program on stack
levels 5 and 6 All you need to do is to start AppKeys with the snippet
4DROP 2DUP 2DUP
and than dispatch normally.
32.5
Menu Key Assignments
You can specify a menu to be displayed when the parameterized outer
loop starts. The format of the AppMenu parameter is essentially the same of
the ILMenu parameter of InputLine, described in section 37.1.
The difference is that TakeOver is not necessary in this case, since the
input line is not active.
Also, since hard key assignments have priority over menu key assignments, you should put this code in the AppKeys parameter, in each plane definition:
DUP#<7 casedrpfls
This will push FALSE when a key whose code is less than seven (that
is, one of the softkeys) is pressed. The FALSE will force the standard assignment to be run, and this assignment runs the action defined by the AppMenu
parameter.
For that to work, the NonAppKeysOK? parameter must be TRUE, so
that the menu keys work normally, that is, doing the actions specified by the
AppMenu parameter.
32.6
Preventing Suspended Environments
Your application may require the evaluation of arbitrary commands and
user arguments, but it might not want the current environment to be suspended by HALT or PROMPT commands. The parameter SuspendOK?, when
FALSE, will cancel these and any other commands that would suspend the environment and generate a “HALT Not Allowed” error, which AppError can handle. If the parameter is TRUE, the application must be prepared to handle the
consequences. “The dangers here are many and severe”, as it is written in
RPLMAN.DOC.
Almost all applications should set FALSE as the SuspendOK? parameter.
218
32.7
32. The Parameterized Outer Loop
The Exit Condition
The parameter ExitCond is an object that is evaluated before each key
evaluation. If it evaluates to TRUE, the loop is exited, otherwise it continues.
You could define, for example, ExitCond as ' LAM exit. When the “quit” key
is pressed, you just have to use TRUE ' LAM exit STO and the loop will be
exited. Naturally you must create the lam and initialize it with FALSE before.
32.8
An Example
The following program is an example of an application that uses a parameterized outer loop to create an environment where the user may move a
little graphic over the screen. You can use the arrow keys to move, or the menu
keys. In both cases, if you press left-shift before, the graphic moves ten steps
instead of one. There is code to assure that the graphic does not go off the
screen boundaries.
Figure 32.1 below displays this program running.
Figure 32.1: The POL example
1
5
::
* Defines names for used keys. Makes things easier and
* more readable
DEFINE kpNoShift
BINT1
DEFINE kpLeftShift BINT2
DEFINE kcUpArrow
BINT10
DEFINE kcLeftArrow BINT14
DEFINE kcDownArrow BINT15
32.8. An Example
10
DEFINE kcRightArrow BINT16
DEFINE kcLeftShift BINT37
DEFINE kcOn
BINT47
* Requires no arguments
CK0NOLASTWD
15
* Prepare display
RECLAIMDISP
(clear and resize display)
ClrDA1IsStat
(temporarily disable clock)
20
25
30
35
40
45
50
* Smiling face grob. The below must be in one line only.
GROB 7C 310003100008F000060300810C004000104000102000202
4012010004010004010004010004011044021042026032048F0104000
10810C0006030008F000
FIFTYSIX
(initial x coordinate for box)
EIGHTEEN
(initial y coordinate for box)
FALSE
(initial exit condition)
{
LAM MrSmile
LAM x
LAM y
LAM exit?
} BIND
(binds local variables)
* The following composite is the display update object.
* It clears the screen and draws the smiling face grob.
’ ::
CLEARVDISP
(clear display)
LAM MrSmile
(recall smiling face grob)
HARDBUFF
(recall current display)
LAM x LAM y
(smile coordinates)
GROB!
(REPL)
DispMenu.1
(display menu)
;
* The following composite is the key action handler.
’ ::
kpNoShift #=casedrop ::
DUP#<7 casedrpfls (enable softkeys)
kcUpArrow ?CaseKeyDef
::
LAM y DUP
BINT1 #<ITE
:: DROP ERRBEEP ;
219
220
55
60
65
70
75
80
85
90
95
32. The Parameterized Outer Loop
:: #1- ’ LAM y STO ;
;
kcDownArrow ?CaseKeyDef
::
LAM y DUP
BINT36 #>ITE
:: DROP ERRBEEP ;
:: #1+ ’ LAM y STO ;
;
kcLeftArrow ?CaseKeyDef
::
LAM x DUP
BINT1 #<ITE
:: DROP ERRBEEP ;
:: #1- ’ LAM x STO ;
;
kcRightArrow ?CaseKeyDef
::
LAM x DUP
BINT111 #>ITE
:: DROP ERRBEEP ;
:: #1+ ’ LAM x STO ;
;
kcOn ?CaseKeyDef
:: TRUE ’ LAM exit? STO ;
kcLeftShift #=casedrpfls
DROP ’DoBadKeyT
;
kpLeftShift #=casedrop ::
DUP#<7 casedrpfls (enable softkeys)
kcUpArrow ?CaseKeyDef
::
LAM y DUP
BINT10 #<ITE
:: DROPZERO ERRBEEP ;
:: BINT10 #- ;
’ LAM y STO
;
kcDownArrow ?CaseKeyDef
::
LAM y DUP
BINT27 #>ITE
:: DROP BINT27 ERRBEEP ;
#10+
’ LAM y STO
32.8. An Example
;
kcLeftArrow ?CaseKeyDef
::
LAM x DUP
BINT10 #<ITE
:: DROPZERO ERRBEEP ;
:: BINT10 #- ;
’ LAM x STO
;
kcRightArrow ?CaseKeyDef
::
LAM x DUP
BINT102 #>ITE
:: DROP BINT112 ERRBEEP ;
#10+
’ LAM x STO
;
kcLeftShift #=casedrpfls
DROP ’DoBadKeyT
100
105
110
115
;
2DROP ’DoBadKeyT
120
;
* Key definitions
TrueTrue
125
130
135
140
* Menu specification
{ { "Up" {
::
LAM y DUP
BINT1 #<ITE
:: DROP ERRBEEP ;
:: #1- ’ LAM y STO ;
;
::
LAM y DUP
BINT10 #<ITE
:: DROPZERO ERRBEEP ;
:: BINT10 #- ;
’ LAM y STO
;
}
}
{ "Down" { ::
LAM y DUP
221
222
32. The Parameterized Outer Loop
BINT36 #>ITE
:: DROP ERRBEEP ;
:: #1+ ’ LAM y STO ;
145
;
::
LAM y DUP
BINT37 #>ITE
:: DROP BINT37 ERRBEEP ;
#10+
’ LAM y STO
150
;
155
160
165
170
175
180
185
}
}
{ "Left" { ::
LAM x DUP
BINT1 #<ITE
:: DROP ERRBEEP ;
:: #1- ’ LAM x STO ;
;
::
LAM x DUP
BINT10 #<ITE
:: DROPZERO ERRBEEP ;
:: BINT10 #- ;
’ LAM x STO
;
}
}
{ "Right" { ::
LAM x DUP
BINT111 #>ITE
:: DROP ERRBEEP ;
:: #1+ ’ LAM x STO ;
;
::
LAM x DUP
BINT102 #>ITE
:: DROP BINT112 ERRBEEP ;
#10+
’ LAM x STO
;
}
}
NullMenuKey
{ "Quit" :: TRUE ’ LAM exit? STO ; }
32.9. Reference
}
ONEFALSE
’ LAM exit?
’ERRJMP
ParOuterLoop
RECLAIMDISP
ClrDAsOK
190
195
223
(first menu row, no suspended envs)
(exit condition)
(error handler)
(run the par outer loop)
(resize and clear display)
(redraw display)
;
32.9
Reference
Addr.
2B475
Name
ParOuterLoop
2B4AC
POLSaveUI
2B542
POLSetUI
2B628
POLKeyUI
2B6CD
POLRestoreUI
2B6B4
POLResUI&Err
29F25
29F35
29F55
29F75
2A055
2A065
2A145
2A158
AppDisplay!
AppDisplay@
AppKeys!
AppKeys0
AppExitCond!
AppExitCond@
AppError!
AppError@
Description
( Disp Keys NonAppKeys? DoStdKeys?
menu #row suspendOK? ExitCond AppErr
→ )
( Disp Keys NonAppKeys? DoStdKeys?
menu #row suspendOK? ExitCond AppErr
→ )
Saves current UI to LAMSavedUI.
<see>ParOuterLoop
Sets new UI, same arguments as to
ParOuterLoop.
( → )
Displays, reads and evaluates keys according to
set UI.
( → )
Restores saved UI from LAMSavedUI.
( → )
Restores saved UI and executes ERRJMP.
( ob → )
( → )
( ob → )
???
( ob → )
( → ob )
( ob → )
( → ob )
224
32. The Parameterized Outer Loop
Addr.
25690
Name
AppMode?
25695
2569A
2564D
2565A
2565F
25F04
SetAppMode
ClrAppMode
SetNAppKeyOK
DoStdKeys?
SetDoStdKeys
SuspendOK?
27E72
nohalt
25671
25676
SetAppSuspOK
ClrAppSuspOK
Description
( → flag )
Is currently a POL active?
( → )
( → )
( → )
( → flag )
( → )
( → flag )
Does the current user interface allow suspension?
( → ob )
:: LAM 'nohalt ;
( → )
( → )
Chapter 33
Using the HP49 Browser
The browser is the engine behind the selection boxes created by the
User RPL command CHOOSE. However, it can do much more than what that
command does.
There are two browser engines in the HP49G calculator: the old one,
which was present since the HP48G series, and a new one, only present in the
HP49G model. This chapter will describe the new engine, which is easier to
use. It has some features the old one does not have, but the old one also has
some important features that this one does not, such as full screen mode and
selecting multiple items. The next chapter will describe the old engine.
There are several flashpointers which can be use to access the browser
engine. These flashpointers are not officially supported, but are very likely
stable.
The main difference to User RPL CHOOSE command is that you can specify a message handler, which can be used to provide a custom the menu, to
handle key presses and some other things.
The main entry is FPTR 2 72 (ˆChoose3). It has the following stack
diagram:
( meta $title #initial ::message → ob TRUE ) or
( meta $title #initial ::message → FALSE )
depending on whether the user selects something or cancels.
As an alternative, you can replalce FPTR 2 72 with FPTR 2 74. The
differences are that the entry does not save a copy of the original meta on the
virtual stack and that instead of the selected object, the index is returned. The
indices start at zero, not one.
225
226
33.1
33. Using the HP49 Browser
The Choose Items meta
meta is a meta object (see Chapter 12) that contains the items which
should be shown in the selection box. All object types are allowed, and they
will be decompiled for display.
33.2
The Title String
$title is the title. It will be shown in a small box on top of the choose
box. No title will be shown if this is the empty string. This can be useful when
the the contents of the choose box do not need a further explanation. Omitting
the title makes space for an additional item line.
33.3
The Initially Selected Item
When the choose engine starts, an item is already highlighted. Usually this is the first item, but you can select another one with the #initial
parameter. The numbering starts with zero, not one.
33.4
The Message Handler
::message is a program, the message handler. A message handler is
a general way to pass a variable number of optional parameters to an application. The application will call the message handler program with different
“messages” (normally a bint) in stack level 1, and maybe additional arguments
in other stack levels. The handler can decide to handle this message. If it does
handle it, it should do its work and return TRUE. If it decides to ignore the message, it should just drop the bint and return FALSE. The empty message handler therefore is the command DROPFALSE (which you can conveniently push
in the stack with 'DROPFALSE). When you use the user command xCHOOSE, it
just supplies DROPFALSE and hands over to the more general engine.
The message handler can handle the following messages:
33.4. The Message Handler
Message
BINT1
BINT2
BINT3
BINT4
BINT5
227
Message name and meaning
MsgDispBox
This message has to do with the display of the choose box. It is
currently not well understood. The stack diagram of the message
handler for this message seems to be
( #1 → ::prog TRUE )
( #1 → FALSE )
MsgDispTitle
This should display the title. If not handled, the title is drawn
using the supplied $title argument.
( #2 → TRUE )
( #2 → FALSE )
MsgEndInit
This message is executed after the initialization of the choose
box, but before control is handed over to the POL.
( #3 → TRUE )
( #3 → FALSE )
MsgKeyPress
This is a key handler, similar to the ones used by a POL. When
the user presses a key, the message handler is called with the
keycode and plane (see section 30.1), and the message BINT4 on
the stack. It should return the key definition (an address or a
secondary), TRUE and TRUE again.
If the key is not handled, FALSE must be returned. Here is the
stack diagram for the message handler regarding this message:
( #kc #pl #4 → KeyDef TRUE TRUE )
— yes, TRUE twice!
( #kc #pl #4 → FALSE )
MsgMenu
This must return the menu which is shown to the user during
the selection. The return value for this message is evaluated to
get the menu. The menu is not automatically updated when you
move the selection, but message #6 can be used to enforce an update. If the menu has more than one page, you must handle the
NXT and PREV keys in the keyhandler — they are not handled
by default.
( #5 → { menu list } TRUE )
( #5 → ::prog_returning_list TRUE )
( #5 → FALSE )
228
33. Using the HP49 Browser
Message
BINT6
33.5
Message name and meaning
MsgEndEndDisp
This message is called after the redisplay of the choose box finishes (because you changed the selected item). You can use this
to force an update of the menu display by setting 24LAM to
FALSE. See the example below.
( #6 → TRUE )
( #6 → FALSE )
The Browser and Lams
The browser POL uses 24 unnamed local variables, so maybe you should
not rely on unnamed locals yourself. Better use named locals for this purpose.
A few important unnamed LAMs used by the browser engine are:
LAM
1LAM
2LAM
3LAM
17LAM
14LAM
24LAM
33.6
Contents
Quit. Set this to TRUE if you want the POL to exit.
DispOffset. Index of selected item with respect to DispTop.
DispTop. Index of the first choose item currently visible on the
screen.
The message handler.
The redisplay program.
DisplayMenu. Set this to FALSE in order to enforce a redisplay of
the menu.
Accessing the Selected Item
To use the browser for more than just selecting an item, you must write
programs which will be accessible with the key handler or with the menu. On
of the most important tasks in these programs is to find out what the current
item is. The choose box engine keeps two copies of the choose list on the Virtual
Stack, and you can use these to get the current item. On level one of the Virtual
Stack, the list is inverted, and the items which have already been shown in the
CHOOSE box are converted to strings (sensitive to flag -85). On level three of
the Virtual Stack there is a copy of the original list. The index of the current
item is available with this code snippet:
33.7. Saving and Restoring the Screen
229
:: 2GETLAM 3GETLAM #+ ;
Indexes start at 0.
To access the current item use one of these methods:
1. Get the decompiled string. This is very fast and only 8 bytes.
:: 2GETLAM 3GETLAM #+ GetElemBotVStack ;
2. Get the original item. There is no supported way to get to the third level
of the Virtual Stack directly, so you have to dig it out and restore the stack
afterwards. Here is a way to do it (35 bytes):
1
::
GetVStackProtectWord PopMetaVStack
GetVStackProtectWord PopMetaVStack
2GETLAM 3GETLAM #+
GelElemTopVStack
1LAMBIND
PushMetaVStack&Drop SetVStackProtectWord
PushMetaVStack&Drop SetVStackProtectWord
1GETABND
5
10
;
This looks complicated, but it is also quite fast and actually used in the
ROM for the Help key of the catalog.
3. If you find 2 too long, you can keep a copy of your original list, for example
in a named LAM “mylist”. If you did that before calling the browser
flashpointer, you get the current item with
:: LAM mylist 2GETLAM 3GETLAM #+ #1+ NTHCOMPDROP ;
33.7
Saving and Restoring the Screen
If you want to use a menu key or another key to do an excursion from
the choose box which uses the display, you must save and restore the current
screen around it. This is because the browser POL only updates as little as
possible on the display, so when you return from your excursion, the display
will look bad and not recover. There are two simple flashpointers which can be
used to save and restore the display:
230
33. Using the HP49 Browser
FPTR 2 88 Save the current isplay
FPTR 2 89 Restore the saved display
Note that these commands use a specific storage place, so they cannot be
used by stacked choose boxes (a choose box creating another choose box which
needs to save its screen for an excursion). In such cases, you need to save and
restore copies of HARDBUFF and HARDBUFF2.
33.8
An Example
Below follows an example for the application of the browser engine. This
program displays the numbers 1-100 for multiple selection and returns a list
of all selected values. Pressing the Squareroot key displays the square root
of the current number in a message box. In the menu, pressing F1 adds the
decompiled version of the currently selected number (a string!) to the return
list. Pressing F2 will show some help text about the choose box. There is
another menu button F3 which does not do anything, but which shows if the
selected number is even or odd. Since this display changes, we need message
six to force a menu update. F5 and F6 are the usual CANCL and OK actions.
Figure 33.1 shows this program while running.
Figure 33.1: The ’49 browser example
1
5
::
101 ONE_DO
INDEX@ UNCOERCE
LOOP
100 P{}N
DUP
(Make list with 1-100)
33.8. An Example
10
15
20
25
30
35
40
45
50
NULL{}
{ LAM mylist LAM res } BIND
INNERCOMP
"REALS"
0
’
::
4 OVER#=case
::
DROP DUP#1= 3PICK 23 #=
ANDcase
::
2DROP
’
::
LAM mylist
2GETLAM 3GETLAM
#+ #1+
NTHCOMPDROP
%SQRT DO>STR
FlashWarning
;
TrueTrue
;
FALSE
;
5 OVER#=case
::
DROP
’ ::
NoExitAction
{ { "->{}"
:: TakeOver
LAM res
2GETLAM
3GETLAM #+
GetElemBotVStack
>TCOMP
’ LAM res STO
; }
{ "?"
:: TakeOver
FPTR 2 88
DOCLLCD
ZEROZERO
231
(Empty list to collect)
(Save a copy of the list)
(Explode for FPTR 2 72)
(Title)
(Initial position)
(The key handler)
(SQRT key pressed)
(DROP the keycodes)
(Get current value)
(Compute SQRT)
(Display)
(Yes, we handle this key)
(Other keys not handled)
(Provide a menu)
(Do not save as LastMenu)
("Add to list" menu key)
(Get current list)
(Get element as string)
(Add to list)
(STO current list)
("Help" menu entry)
(Save current screen)
(Clear screen)
(Next is the help text)
232
33. Using the HP49 Browser
"->{}
?
SQRT
55
60
65
70
75
80
ADD
HELP
DISP ROOT"
$>GROBCR
XYGROBDISP
WaitForKey
2DROP
FPTR 2 89
;
}
{ ::
TakeOver
LAM mylist
2GETLAM
3GETLAM #+ #1+
NTHCOMPDROP
DUP
%2 %/
%FLOOR
%2 %* %= ITE
"even" "odd"
;
NOP
}
NullMenuKey
{ "CANCL"
FPTR 2 77 }
{ "OK"
FPTR 2 76 }
}
;
TRUE
85
90
95
;
6 OVER#=case
:: DROP FalseFalse
24 PUTLAM ;
DROPFALSE
;
FPTR 2 72
ITE
::
DROP
LAM res
TRUE
;
(Display help text)
(Wait for any key)
(Restore the screen)
(Button to show)
("even" or "odd")
(The list)
(Get current element)
(Test if even)
(Return correct label)
(No action when pressed)
(4th key is empty)
(Default CANCL action)
(Default OK action)
(Yes, we provide a menu)
(Enforce menu update)
(Other messages)
(are not handled)
(Run the CHOOSE engine)
(DROP current value)
(Return list)
(Push TRUE)
33.9. Reference
FALSE
ABND
233
(CANCL: return FALSE)
(Free local variables)
;
33.9
Reference
Addr.
072002
Name
(ˆChoose3)
074002
(ˆChoose3Index)
070002
(ˆChoose2)
073002
(ˆChoose3Save)
005002
(ˆsysCHOOSE)
075002
(ˆChooseDefHandler)
Description
( meta $title #pos ::handler →
ob T )
( meta $title #pos ::handler → F
)
The main choose engine.
( meta $title #pos ::handler →
#idx T )
( meta $title #pos ::handler → F
)
Same as ˆChoose3, but returns the index
of the selected item instead of the item
itself. #idx starts at zero.
( meta $title #pos → ob T )
( meta $title #pos → F )
Call Choose3Index with empty message
handler. This is just
:: 'DROPFALSE FPTR2
ˆChoose3Index ;
( meta $title #pos ::handler →
ob T )
( meta $title #pos ::handler → F
)
Save and restore HARDBUFF/2 around a
Choose3 call.
( $title {} %sel → ob %1 )
( $title {} %sel → %0 )
Equivalent to User RPL CHOOSE command.
( → ::handler )
Pushed the default message handler (the
one used by the CAT key) on the stack.
234
33. Using the HP49 Browser
Addr.
088002
Name
(ˆSaveHARDBUFF)
089002
(ˆRestoreHARDBUFF)
077002
(ˆChoose3OK)
076002
(ˆChoose3CANCL)
Description
( → )
Save HARDBUFF and HARDBUFF2 is a safe
place.
( → )
Restore HARDBUFF and HARDBUFF2 saved
with SaveHARDBUFF.
( → )
The OK action executed by Choose3 if OK
or ENTER is pressed.
( → )
The CANCEL action executed by Choose3
if CANCL or ON is pressed.
Chapter 34
Using the HP48 Browser
The HP48 browser (which is still present in the HP49) allows you to do
many things. Basically, it displays a list of entries, from which you can select
one or many (unlike the new HP49 browser, which only allows one item to be
selected), and you can act on those entries by means of menu keys or hard key
assignments.
This “old” engine has a few features that the HP49 one does not have,
such as a full-screen mode. It is, however, more complicated to use. Just like
the Input Form engine (see Chapter 35), it has thousands of features, and generally there are several ways to accomplish the same thing.
The browser is called by the entry ˜Choose. It expects five parameters
in the stack. It will the return the results and TRUE, or just FALSE, depending
on the way it was exited (more on that later). Here are the stack diagrams:
( ::Appl $Title ::Converter {}Items Init → result TRUE ) or
( ::Appl $Title ::Converter {}Items Init → FALSE )
Here, result is either a list or a single object, depending on whether
check marks and multiple selections are enabled.
34.1
The ::Appl Parameter
This is a program that allows configuration of several aspects of the
browser. It works as other message handlers do: it is called with a bint in
the stack, representing the code of the message. If the message is handled,
the program should return any data required by the message and TRUE, otherwise it returns FALSE. Which means that DROPFALSE (which can be pushed in
the stack with the command 'DROPFALSE) is a valid value for this parameter,
meaning that no messages are handled, and that default values should be used
at all the times.
Here are the descriptions of some of the messages:
235
236
Code (Decimal)
57
58
59
60
61
62
63
64
65
34. Using the HP48 Browser
Description and Stack
Number of lines the browser will display on the screen.
The default depends on the current font, and on system
flag 90.
(→ #)
Height of browser line. Probably this does not need to be
changed.
(→ #
Width of browser line. Leave space for the display of
arrows if the number of elements may be grater than the
page size.
(→ #)
Should return TRUE if the browser will be full-screen, or
FALSE if windowed. The default is windowed.
( → flag )
Should return TRUE if check marks are allowed, thus
supporting the selection of multiple items, or FALSE if
not. The default is not to allow check marks.
( → flag )
Returns the number of elements. If your program
changes the number of elements during execution, you
must handle this message.
(→ #)
Should return the coordinates of the upper left corner of
the browser selection box. You probably do not need to
change the default value.
( → #x #y )
This message should return the initial difference between the marked selection and the top of page. Be
sure that the difference is less than the current selection and less than the page size, otherwise the calculator
may crash.
(→ #)
This message is called when the background needs to be
painted. Its action can be used to draw something else
on the background.
(→)
34.1. The ::Appl Parameter
Code (Decimal)
66
67
68
69
70
74
79
80
81
237
Description and Stack
This message is called when the title needs to be painted.
Its action should draw the title in HARDBUFF. Most of the
times, this is not handled, and the title is drawn from the
$Title parameter.
(→)
Returns title as a grob. Most of the times, this is not handled, and the title is drawn from the $Title parameter.
( → grob )
If message 67 is not defined, this is called to return the
title as a grob, but only for full-screen mode.
( → grob )
If message 67 is not defined, this is called to return the
title as a grob, but only for windowed mode.
( → grob )
If the $Title parameter is not a null string, this entry is
called to return a title string. This overrides the $Title
parameter.
(→ $)
This message should draw all visible lines of the browser.
(→)
This message should display one line of the browser. If
this is the selected line, this message should draw this
line in inverse video or mark that it’s the selected one in
another way.
(# →)
This message is an alternative to supplying the items as
the {}Items parameter. It supplies the number of the
item, and this message should returns the item. Any object can be returned; ::Converter will be called to convert this into a string. If you want to have dynamicallychanging items in the browser, this message allows that.
But message 82 is probably better in this case.
( # → ob )
This message converts one element into a grob. (This
overrides the ::Converter parameter.) If should return a grob with dimensions 7NULLLAMx8NULLLAM.
If check marks are enabled, you must incorporate the
check mark in the grob if the item is checked.
( # → grob )
238
34. Using the HP48 Browser
Code (Decimal)
82
83
85
86
87
91
96
34.2
Description and Stack
This message is like message 80, but the object is already
returned as a string. ::Converter is not called afterwards. If this message is used, you do not need to write
a ::Converter.
(# → $)
Returns a list describing the menu. The format of the
list is the same of InputLine and Input Forms, see section 37.1.
( → {} )
This message is called when the browser is started, after
everything has been set.
(→)
This is called when an item is checked or unchecked. The
default action handles checking and unchecking of items
pretty fine, so you probably do not need to handle this
message.
(# →)
This message is called before the browser exits.
(→)
This is called after the ON key is pressed, or the CANCL
menu key. If TRUE is returned, the browser exits. If
FALSE is returned, the browser continues.
( → flag )
This is called after the ENTER key is pressed, or the OK
menu key. If TRUE is returned, the browser exits. If
FALSE is returned, the browser continues.
( → flag )
The $Title Parameter
This parameter specifies the title. There are messages that can override
this parameter: 66, 67, 68, 69 and 70.
34.3. The ::Converter Parameter
34.3
239
The ::Converter Parameter
This is a secondary that converts whichever kind of object is used as a
list into a string for display. The stack diagram for this secondary is
( ob → $ )
If you handle messages 81 or 82, you do not need to write this program
to do the conversion. However, the browser allows the user to press Alpha
followed by a letter to search for an object that starts with that letter and jump
to it. This requires the ::Converter parameter, even if those messages are
provided. So you should ensure this parameter someway returns a string. The
DO>STR entry can be of great use here.
34.4
The {}Items Parameter
You can specify a list of objects here, or you can specify an empty list,
and use messages 80, 81 or 82 to provide the elements.
34.5
The Init Parameter
This can be either a binary integer or a list. If it is the bint 0, the
browser works as a viewer, disallowing selections. If it is any other bint, it is
the initially selected element.
If multiple selections are enabled, you can specify instead a list of bints,
representing the initially checked elements.
34.6
Typical Browser Usage
By reading the description of the messages and the parameters above,
you have probably noted that there are several ways to provide the element
that will form the browseable list, and you may have been confused by that.
Here, two ways to do that will be listed.
• You can provide the elements using the {}Items parameter, and provide
a ::Converter that will convert one of those elements into a string. You
do not need to worry about messages 80, 81 or 82. This method is good if
the list of elements will not change while the program is running.
240
34. Using the HP48 Browser
• You can leave the {}Items list empty, and store the list of elements somewhere else (most likely in a lam). Then, use messages 80, 81 or 82 to
return the elements. If you use messages 81 or 82, you will return elements already as a grob or as a string, and ::Converter can be a
null secondary. Or you can use 80 to return some object, and then use
::Converter to make a string out of it. This method is good if the elements change while the program is running. If you use this technique,
you must also handle message 62.
When the number of elements in the browser changes, run this code to
adapt the browser to the changes:
1
::
ROMPTR 0B3 03E
ROMPTR 0B3 026
18GETLAM
12GETLAM
DUP#0=IT
DROPONE
#MIN
5
10
18PUTLAM
FALSE ROMPTR 0B3 019
(Re-read # of elements)
(Re-read width)
(#Index)
(#NumOfElements)
(Reduce #index if #NumOfElements)
(was reduced)
(Recalculate offset)
;
34.7
An Example
This example uses the browser to allow the user to enter a list of equations (inspired by the Y= window, but considerably different). Initially, the list
is empty. The user then adds equations to the list. Equations can also be edited
or deleted.
This program handles messages 62 and 82 to return the number of elements and an equation already converted to a string when asked for it. The
equations are stored in a named LAM. Some other messages are also handled
to configure other aspects of the browser.
Figure 34.1 shows this program while running.
1
::
NULL{}
’ LAM EQS
(start with empty list)
34.7. An Example
241
Figure 34.1: The ’48 browser example
1 DOBIND
5
10
15
20
25
30
’ ::
60 #=casedrop TrueTrue
62 #=casedrop ::
LAM EQS LENCOMP
DUP#0=IT
#1+
TRUE
;
82 #=casedrop ::
LAM EQS SWAP
NTHELCOMP
ITE
::
setStdWid
FPTR2 ^FSTR7
;
"No equations"
TRUE
;
83 #=casedrop ::
{
{ "Add"
::
PushVStack&Clear
DoNewEqw
(the ::Appl parameter)
(use full screen)
(number of elements)
(return nth element as str)
(convert to string)
(the menu)
(save stack)
242
34. Using the HP48 Browser
DEPTH
#0<> IT
(add eqaution)
::
LAM EQS SWAP
>TCOMP
’ LAM EQS
STO
ROMPTR B3 3E (re-read # elements)
;
PopMetaVStackDROP
35
40
;
45
50
55
60
65
70
}
{ "Del"
::
LAM EQS
INNERDUP
#0=case DROP
(quit if empty)
PushVStack&Keep
(save stack contents)
reversym
DROP
18GETLAM
ROLL
DROP
18GETLAM #1UNROLL
DEPTH
{}N
’ LAM EQS STO
PopMetaVStackDROP (restore stack)
ROMPTR B3 3E
(re-read # elements)
18GETLAM
(change selected element)
12GETLAM
(if necessary)
#MIN
18PUTLAM
FALSE ROMPTR B3 19
;
}
{ "Edit"
::
LAM EQS
(get element)
34.7. An Example
243
18GETLAM
NTHELCOMP
NOT?SEMI
FPTR2 ^EQW3Edit
NOT?SEMI
18GETLAM
LAM EQS
PUTLIST
’ LAM EQS STO
75
80
(quit if empty)
(edit)
(quit if not changed)
(replace)
;
}
NullMenuKey
{ "CANCL" FPTR2 ^DoCKeyCancel }
{ "OK" FPTR2 ^DoCKeyOK }
85
}
TRUE
;
DROPFALSE
;
90
"Pseudo-Plot"
’ NULL::
NULL{}
BINT1
(title)
(converter)
(no items - msgs are used)
(initially selected elt)
ROMPTR2 ~Choose
(run browser)
95
ABND
;
244
34.8
34. Using the HP48 Browser
Reference
Addr.
0000B3
Name
˜Choose
0050B3
˜ChooseMenu0
0060B3
˜ChooseMenu1
0070B3
˜ChooseMenu2
0630B3
˜ChooseSimple
004002
ˆRunChooseSimple
09F002
ˆDoCKeyCheck
0A0002
ˆDoCKeyChAll
0B0002
ˆDoCKeyUnChAll
09E002
ˆDoCKeyCancel
09D002
ˆDoCKeyOK
Description
( ::Appl $Title ::Convert {}
offset → {}' T )
( ::Appl $Title ::Convert {}
offset → ob T )
( ::Appl $Title ::Convert {}
offset → F )
The return value is a list if checkfields are
enabled, otherwise it is just the selected
object. Only FALSE is returned when the
user presses CANCEL.
( → {} )
Menus with "OK".
( → {} )
Menus with "CANCL", "OK".
( → {} )
Menus with "CHK", "CANCL", "OK".
( $title {items} → ob T )
( $title {items} → F )
Simple interface to the HP48 choose
engine.
On the HP49G, calls
ˆRunChooseSimple.
( $title {items} → ob T )
( $title {items} → F )
Simple interface to the HP48 choose engine.
( → )
Toggle check on current item.
( → )
Check all elements.
( → )
Uncheck all items.
( → )
Simulate Cancel.
( → )
Simulate OK.
34.8. Reference
Addr.
0B3002
Name
ˆLEDispPrompt
0B2002
ˆLEDispList
0B1002
ˆLEDispItem
0150B3
(˜BBMoveTo)
0190B3
(˜BBRecalOff&Disp)
0220B3
(˜BBRunEntryProc)
0230B3
(˜BBReReadPageSize)
0240B3
(˜BBReReadHeight)
0250B3
(˜BBReReadCoords)
0260B3
(˜BBReReadWidth)
0280B3
(˜BBRunENTERAction)
0290B3
(˜BBRunCanclAction)
02F0B3
(˜BBReDrawBackgr)
0370B3
(˜BBGetNGrob)
245
Description
( → )
Redraw title.
( → )
Redraw browser lines.
( # → )
Redraw one line.
( # → )
Moves selection to line and updates display.
( flag → )
Recalculates offset of selected item in page,
and redraws lines if the flag is TRUE.
( → )
Sends message 85 to ::Appl, thus running
the user-defined start-up procedure.
( → )
Re-reads the size of the page (message 57).
( → )
Re-reads the height of the browser line
(message 58).
( → )
Re-reads the coordinates of the browser
box (message 63).
( → )
Re-reads the width of the browser line
(message 59).
( → )
Sends message 96 to ::Appl, thus running
the OK action. It does not check the value
returned and never exits.
( → )
Sends message 91 to ::Appl, thus running
the CANCEL action. It does not check the
value returned and never exits.
( → )
Redraws the background.
( #n → grob )
Returns nth element as a grob.
246
34. Using the HP48 Browser
Addr.
0380B3
Name
(˜BBGetNStr)
03B0B3
(˜BBRereadChkEnbl)
03C0B3
(˜BBRereadFullScr)
03D0B3
(˜BReReadMenus)
03E0B3
(˜BBReReadNElems)
03F0B3
(˜BBGetN)
04B0B3
(˜BBIsChecked?)
0520B3
(˜BBUpArrow)
0530B3
(˜BBDownArrow)
0540B3
(˜BBSpace)
0590B3
(˜BBPgDown)
05A0B3
(˜BBPgUp)
05B0B3
(˜BBEmpty?)
05C0B3
(˜BBGetDefltHeight)
0190E0
˜BRRclC1
Description
( #n → $ )
Returns nth element as a string.
( → )
Re-reads whether checkmarks are enabled. (Message 61).
( → )
Re-reads whether to use full-screen mode.
(Message 60).
( → )
Re-reads the menu. (Message 83).
( → )
Re-reads the number of elements. (Message 62).
( #n → ob )
Returns nth element.
( #n → flag )
Returns whether the given element is
checked.
( → grob )
Returns up arrow as grob
( → grob )
Returns down arrow as grob
( → grob )
Returns a space as grob.
( → )
Go down one page.
( → )
Go up one page.
( → flag )
Returns TRUE if the browser has no elements.
( → # )
Returns height of lines based on the font
that will be used. This value is the default
height of the browser. Equivalent to FPTR
2 64.
( → )
:: LAM 'BR5 ;
34.8. Reference
34.8.1
247
NULLLAMs Used by the Browser
The browser uses a great number of unnamed lams to store its information. Here is a description of them:
Lam
1
2
3
4
5
6
7
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Description
Used by CACHE
POL exit condition
Initial display status. This is a list in this format:
{ DA1IsStatFlag DA2bEditFlag DA1BadFlag
DA2aBadFlag DA2bBadFlag DA3BadFlag }
Menu before browser was run
Screen before browser was run
Offset in page
Height of browser line
x coordinate of upper left corner of browser in
HARDBUFF
y coordinate of upper left corner of browser in
HARDBUFF
Page size
Number of elements
Menu
Full screen?
List of indexes of checked items
Check marks enabled?
TRUE if is a browser, FALSE if it is a viewer
Current selected index
{}Items
::Converter
$Title
::Appl
Type
n/a
flag
{}
grob 131x8
grob 131x56
#
#
#
#
#
#
{}
flag
flag
flag
flag
#
{}
::
$
::
Chapter 35
Creating Input Forms
Input forms provide a graphical interface for entering data required by
a program. Data is entered by means of several fieds, which are “spaces” that
the user can fill with the apropriate data. Input forms are used in many places
in the HP49. You can see one by pressing the MODE key.
It is possible to create input forms in User RPL, with the INFORM command, but this is not one of the easiest tasks. In System RPL, it is even more
difficult. But there are several advantages: in User RPL, you can only have
text fiels, in System RPL you can have check boxes or choose fields. You can
also restrict the valid inputs, and make fields appear or disappear during the
execution. Finally, in System RPL the input forms are considerably faster.
Input forms are created with the ˆIfMain command, which is a flashpointer. It needs lots of arguments. They are divided in three categories: label
definitions, field definitions, and general information. Each label and field definition is composed of several arguments.
The ˆIfMain command referes to the new input form engine present
in the HP49. The old HP48 engine is still present (and has had some speed
improvements); the old DoInputForm command is still present and the forms
created based on that command will still work. The arguments are the same for
both entries, but the message handling (see section 35.4 below) has changed.
There are a few incompatibilities between both engines.
The table below shows the general argument structure for the ˆIfMain
command:
Parameter
label_1
...
label_n
field_1
...
field_n
#labels
Description
Label definitions
Field definitions
Number of labels
248
35.2. Field Definitions
Parameter
#fields
MessageHander
Title
35.1
249
Description
Number of fields
See section 35.4 below
Title to be shown on top of screen
Label Definitions
Each label definition consists of three arguments:
Parameter
label_text
#x_offset
#y_offset
Description
Text to be displayed
X coordinate
Y coordinate
label_text is a string, that will be converted to a grob using the minifont. This text will be displayed at the specified coordinates. These are two
bints representing the x and y positions of the label in the screen. The top-left
corner has coordinates (0, 0), and coordinates increase down- and right-wards.
The new input form engine also supports a grob as argument, this grob
will be directly displayed at the given coordinates.
35.2
Field Definitions
Each field definition consists of thirteen arguments:
Parameter
MessageHandler
#x_offset
#y_offset
#Length
#Height
#FieldType
#AllowedTypes
Decompile
"HelpString"
ChooseData
ChooseDecompile
Description
See section 35.4 below
X coordinate
Y coordinate (normally label Y coordinate - 1)
Length of field
Height of field (usually 8)
Type of field, see below for valid values.
List of valid object types
See below
Help string
See below
See below
250
Parameter
ResetValue
InitValue
35. Creating Input Forms
Description
Reset value
Initial value
The message handler will be described below.
The x and y positions specify where the field will appear. They work
similarly to the x and y positions of label definitions. Then length and height
are also two bints, which specify the size of the field.
The field type is a bint which defines the type of the field:
Decimal value
1
23
12
2
32
Field Type
Text field: user can enter anything.
Extended text field (DoInputForm engine only): The user
can enter anything, or select a variable using the filer.
Choose field: user must select from a list of valid values.
Combo field: user can select from a list of values or enter
another.
Checkbox field.
The allowed types parameter is used in the text, extended text and
combo fields: it is a list of bints, representing the allowed types of objects that
can be entered in that field. You can find the object types in the table of section 29.2. You have to use the values in the “User Type” column, as bints.
Other fields should specify MINUSONE. You can also specify MINUSONE for text
and combo fields, this means that all kinds of objects are accepted. In the extended text field, the list of types is also used to limit the variables displayed
in the filer.
Decompile is a bint that specifies how the entered objects should be
displayed in the screen. Its meaning depends on the bits that are set. First,
you should start with BINT2 or BINT4: the former tells that numbers will be
decompiled using the current mode, the latter specifies that STD mode should
be used. If the field will not hold numbers, it does not make much difference in
which value you choose.
After you have specified the basic way to decompile objects, you can also
set some flags to configure it further. If you want to use the minifont when
displaying the field valued, add 1 to the value. If you add 8 to the value, then
only the first character of the string will be displayed. If the object the field
holds is a list (or another composite, as a matter of fact), you can add 16 or
32, to get the first or second object of this composite, respectively, and display
35.3. Label and Field Counts
251
this object according to the rules defined by the other values. This option is
sometimes useful when using choose fields, but not for normal text fields.
Note: DoInputForm does not support fiels decompiled with the minifont.
You can also specify the Decompile paramater as BINT0. If this is done,
no decompilation is done: you can only use strings in the field, and they will be
displayed, without the quotes, in the normal font.
The next parameter specifies the help string that will be shown in the
last line of the display when that field has the focus. Enter anything you want.
The ChooseData parameter is only used in list and combo fields. Other
types should have MINUSONE as this parameter. This paramer is the list of values that will be presented to the user for selecting. When you use a decompile
value that includes the value 16, you can use a list like this:
{ { "label1" <foo> } { "label2" <bar> } { ... } ... }
This way, only the first objects will be shown, but the entire list will be
returned. (Like the INFORM User command does.)
When using DoInputForm (but not ˆIfMain, you can also specify a
string in the ChooseData parameter of text fields. This means that the text
field will allow the user to browse the variables stored in memory and use the
contents of some variable as the value of the field.
Apparently, ˆIfMain ignores the ChooseDecompile parameter. Just
specify it with the same value you used for the Decompile parameter.
The reset and initial values are the contents of the field that are shown
when the form is initially displayed, and when it is reset. It should be an object
of the types allowed for that field, for list fields it will be one of the elements
of ChooseData list. For check fields, use TRUE or FALSE. You can leave text or
combo fields empty by specifying MINUSONE as one or both of this parameters.
35.3
Label and Field Counts
These are two bints, representing the number of labels and fields defined. Note that since they are different values, you can have labels which just
show some kind of information to the user, or fields without any label definition.
252
35. Creating Input Forms
35.4
Message Handlers
As with other input/output applications of the HP49, input forms use
message handlers to allow the programmer to have more control over the input
form. There is one message handler for each field, and one for the input form
itself. The messages are passed whenever something “interessant” happens to
a field or the input form, and during the initialization of the input form.
As with other message handlers, the program you provide is called with
a message number (a bint) in level one, and sometimes other parameters. If
the program handles the message, then it should return whatever is required
by the specific (sometimes nothing). If the message is not handled, it should
drop the message number and push FALSE in the stack, leaving any other
arguments there. So, a message handler that handles no messages is simply
DROPFALSE, which, as you know, can be conveniently pushed in the stack with
'DROPFALSE.
In the message handling, the entries listed in the reference section below can be used to retrive information from the input form or to modify it.
Section 35.8.2 will describe each of the available messages in ˆIfMain.
The messages of DoInputForm are different.
Here is a template message handler program if only one message is
handled:
1
5
’ ::
IfMsgGetFocus
(or any other message)
#=case
::
* Here is the message handling code
TRUE (to tell the system the message was handled)
;
FALSE (indicate that other messages were not handled)
;
And this is a template message handler for two or more messages:
1
5
’ ::
IfMsgOK OVER#=case
::
* Code. Do not forget to return TRUE.
;
IfMsgType OVER#=case
35.5. The Title
10
253
::
* Code for message.
;
* And possibly more.
DROPFALSE
15
(other messages are not handled)
;
35.5
The Title
This is a string that will be shown on the top of the display, with the
small font. If it is longer than 32 characters (the width of the screen), it will be
truncated and “. . . ” will be appended.
With ˆIfMain, instead of a string you can provide your own grob to be
displayed. It should have the size of 131x7 pixels.
35.6
Results Of The Input Form
The stack output, if the user exited the input form by ENTER is:
N+1:
N:
field_1
field_2
...
2: field_n
1: TRUE
If CANCEL was used to exit the form, then just FALSE is returned.
The value of each field depends on the types allowed for that field, and
on the way the possible values of list fields are specified. If a field is empty,
xNOVAL is returned.
35.7
An Example
This example imitates the HP49 tranfer dialog, but far from completely.
There are many differences, and this example has, naturally, no functionality
beyond displaying an Input Form.
254
35. Creating Input Forms
The code defines all the labels and fields, and the input form has a simple message handler that handles two messages: one message to set the field
that will start with the focus, and one to configure the last three softkeys to
look like the ones in the Tranfer dialog. (Our keys, however, only beep when
pressed. . . )
Figure 35.1 below displays the screen when this program is run.
Figure 35.1: The Input Form example
1
5
10
15
20
::
* Label definitons
"Port:"
1
10
"Type:"
70 10
"Name:"
1
19
"Fmt:"
1
28
"Xlat:"
49 28
"Chk:"
104 28
"Baud:"
1
37
"Parity:" 49 37
"OvrW"
111 37
* Field definitions
’DROPFALSE
26 9 24 8
BINT12
MINUSONE
BINT0
"Choose transfer port"
{ "Wire" }
BINT0
"Wire" DUP
(Message handler)
(Position & size)
(Field type: choose)
(Types, does not apply here)
(No decompilation)
(Help text)
(Possible options)
(ChooseDecompile - ignored)
(Initial & reset values)
35.7. An Example
25
30
35
40
45
50
55
60
65
’DROPFALSE
92 9 36 8
BINT12
MINUSONE
BINT0
"Choose type of transfer"
{ "Kermit" "XModem" }
BINT0
"Kermit" DUP
’DROPFALSE
(Message handler)
25 18 103 8
(Position & size)
BINT1
(Field type: text field)
{ BINT5 BINT6 }
(Allows ids and lists)
BINT2
(Decompile with stack appearance)
"Enter names of vars to transfer"
(Help text)
MINUSONE
(ChooseDate - n/a)
MINUSONE
(ChooseDecompile - ignored)
MINUSONE DUP
(Initially empty)
’DROPFALSE
20 27 18 8
BINT12
MINUSONE
BINT0
"Choose transfer format"
{ "Bin" "ASC" }
BINT0
"Bin" DUP
’DROPFALSE
74 27 24 8
BINT12
MINUSONE
BINT0
"Choose character translations"
{ "None" "Newl" "\8D159" "\8D255" }
BINT0
"\8D255" DUP
’DROPFALSE
122 27 7 8
BINT12
MINUSONE
BINT0
255
256
70
75
80
85
90
95
100
105
110
35. Creating Input Forms
"Choose checksum type"
{ "1" "2" "3" }
BINT0
"3" DUP
’DROPFALSE
20 36 24 8
BINT12
MINUSONE
BINT0
"Choose baud rate"
{ "1200" "2400" "4800" "9600" "15300" }
BINT0
"9600" DUP
’DROPFALSE
74 36 24 8
BINT12
MINUSONE
BINT0
"Choose parity"
{ "None" "Odd" "Even" "Mark" "Spc" }
BINT0
"None" DUP
’DROPFALSE
104 36 ZEROZERO
BINT32
MINUSONE
DUP
"Overwrite existing variables?"
MINUSONE
DUP
TrueTrue
9 9
(Number of labels & fields)
’ ::
(InputForm message handler)
BINT7 OVER#=case ::
(Sets initially focused field)
DROP
TWO
TRUE
;
BINT12 OVER#=case ::
(Configures menu softkeys)
DROP
{ { "RECV" DoBadKey }
35.8. Reference
257
{ "KGET" DoBadKey }
{ "SEND" DoBadKey }
115
}
TRUE
;
DROPFALSE
120
;
"TRANSFER"
(Title)
FPTR2 ^IfMain
(Run it)
;
35.8
Reference
35.8.1
Inputform
Addr.
020004
Name
ˆIfMain
2C371
DoInputForm
0050B0
˜IFMenuRow1
Description
( l1..ln f1..fm #n #m msg $ →
ob1..obn T )
( l1..ln f1..fm #n #m msg $ →
F )
l = $ #x #y
f = msg #x #y #w #h #type legal
dec $hlp ChDat ChDec res init
Starts an input form using the new
engine.
( l1..ln f1..fm #n #m msg $ →
ob1..obn T )
( l1..ln f1..fm #n #m msg $ →
F )
l = $ #x #y
f = msg #x #y #w #h #type legal
dec $hlp ChDat ChDec res init
Starts an input form using the old
engine.
( → {} )
Returns the menu for the first menu
row of an InputForm.
258
35. Creating Input Forms
Addr.
0060B0
Name
˜IFMenuRow2
021004
ˆIfSetFieldVisible
022004
ˆIfSetSelected
023004
ˆIfSetGrob
024004
ˆIfSetFieldValue
026004
ˆIfGetFieldValue
027004
ˆIfGetCurrentFieldValue
025004
ˆIfSetCurrentFieldValue
028004
ˆIfGetFieldMessageHandler
029004
ˆIfGetFieldType
02A004
ˆIfGetFieldObjectsType
02B004
ˆIfGetFieldDecompObject
Description
( → {} )
Returns the menu for the second menu
row of an InputForm.
( # T/F(fld/lbl) T/F(val) → )
( # T/F(fld/blb) #0 →
T/F(val) )
Toggles the field or label visible or
invisible. Second argument specifies
if # means a field or a label. Third
argument is the value to set. ZERO as
third argument means to retrieve the
current setting.
( # T/F(fld/lbl) T/F(val) → )
( # T/F(fld/blb) #0 →
T/F(val) )
Toggles the field or label selected or
not selected (appears in inverse video
on the screen).
( # T/F(fld/lbl) grb → )
Sets the grob of a field or a label (modifies the data saved in the data string).
( val # → )
Sets the value of a field (full handling,
including GROB setting).
( # → val )
Gets the value of the Nth field.
( → )
Gets the value of the current field.
( val → )
Sets the value of the current field.
( # → prg )
Retrieves a field message handler.
( # → #type )
Retrieves the field type.
( # → {} )
Retrieves the field object type list.
( # → val )
Retrieves the field decomp value.
35.8. Reference
Addr.
02C004
Name
ˆIfGetFieldChooseData
02D004
ˆIfGetFieldChooseDecomp
02E004
ˆIfGetFieldResetValue
02F004
ˆIfSetFieldResetValue
030004
ˆIfGetFieldInternalValue
031004
ˆIfDisplayFromData
032004
ˆIfGetNbFields
033004
ˆIfCheckSetValue
034004
ˆIfCheckFieldtype
04C004
ˆIfGetPrlgFromTypes
035004
ˆIfReset
036004
ˆIfSetField
037004
ˆIfKeyChoose
259
Description
( # → {} )
Retrieves the field data for choose.
( # → val )
Retrieves the field decomp value in
case of choose.
( # → val )
Retrieves the field reset value.
( val # → )
Changes the field reset value.
( # → val )
Retrieves the field internal value.
( → )
Displays the datastring on the screen.
Takes care of the command line size.
( → #n )
Recalls the number of fields from the
data string.
( # val → )
Checks or uncheck a check field.
( ob → ob flag )
Checks if an object meets the current
field type requirements.
( {} → {}' )
( #FFFFF → #0 )
Generates a list of the allowed prologs
for a field.
( → )
Resets all fields, set as the current
value their reset value. Used to explode the datalist on the stack to work
on it.
( # → )
Makes a different field "current".
( → val )
( → )
If the current field is a choose field, displays the posibilities and let the user
choose. A value is returned only if the
user does not press CANCEL.
260
35. Creating Input Forms
Addr.
038004
Name
ˆIfKeyEdit
039004
ˆIfKeyTypes
03A004
ˆIfKeyCalc
03B004
ˆIfKeyInvertCheck
03C004
ˆIfONKeyPress
03D004
ˆIfEnterKeyPress
03F004
ˆIfSetHelpString
Description
( → (cmd line) )
Edits the current field value if possible. You cannot edit a choose and a label choose field.
( → (cmd line) )
( → )
Displays a Choose box with all the possible types for this field. A command
line is opened only if the user replies
with OK.
( → val )
Puts the value of the field on the stack
and HALT. Allows to the user to compute a new value.
( → )
Inverts the current check field value.
( → )
On Key handler. Gives the oportunity
to the user to perform his own program. Asks to the IF if we can leave.
If Yes, puts a FALSE (quit with ON (if
canceled)) and sets the 'Quit LAM to
TRUE.
( → )
Enter Key management. Gives the
oportunity to the user to perform his
own program. Asks to the IF if we can
leave. If yes, puts the fields values on
the stack put a TRUE (if validated) and
sets the 'Quit LAM to TRUE.
( $dat #n $/# → $dat' )
Sets the help string associated with a
field. This is used by the automatic IF
generator program and should not be
use in other ways.
35.8. Reference
Addr.
040004
Name
ˆIfSetTitle
04A004
ˆIfInitDepth
042004
ˆIfMain2
043004
ˆIfPutFieldsOnStack
044004
ˆIfSetFieldPos
045004
ˆIfGetFieldPos
047004
ˆIfSetAllLabelsMessages
048004
ˆIfSetAllHelpStrings
04D004
ˆIsUncompressDataString
261
Description
( $dat grb/$/# → $dat' )
Alters a DataString modifying the Title part. This is used by automatic IF
generator program ans should not be
use in other ways.
( → )
Initializes the internal depth counter.
This has to be used when running a
command modifying the stack
( $dat handl {} → F )
( $dat handl {} → ob1...obn T
)
Internal Inform Box main program.
Alters a DataString modifying the
Title part. This is used by automatic
IF generator program ans should not
be used in a different way.
( → ob1...obn )
Puts on the stack the external value of
each field.
( # T/F(fld/lbl) #x #y #w #h
→ )
Changes the size and position of an
object Note: You can not change the
size or the X position of a label or a
check field.
( # T/F(fld/lbl) → #x #y #w
#h )
Gets the size and position of an object.
( $dat bmsg #n → $dat )
Sets the text of a set of labels.
( $dat bmsg #n → $dat )
Sets the Help String of all fields.
( $dc → $dat )
Uncompresses a compressed data
string.
262
35.8.2
35. Creating Input Forms
Input Form Messages
The names of the messages are DEFINEs for the numbers. You will find
this DEFINEs in the inputform.h file in the include subdirectory.
35.8.2.1
IfMsgKeyPress — 0
This message is sent after each keypress, first to the active field, then
to the input form. If the field handles the message, the normal input form key
handling is not executed.
Input
Output (if handled)
Output (if not handled)
35.8.2.2
2:
1:
2:
1:
3:
2:
1:
#KeyPlane
#KeyCode
::Key_Handler_Program
TRUE
#KeyPlane
#KeyCode
FALSE
IfMsgLooseFocus — 1
This is sent to a field when it is about to loose the focus. You can do anything here, including taking back the focus. If this is done, then no IfMsgGetFocus message will be sent to this field.
Input
Output
35.8.2.3
1: #Field_That_Will_Get_Focus
2: #Field_That_Will_Get_Focus
1: TRUE or FALSE
IfMsgNewField — 2
This message is sent to the IF just before a new field receives the focus.
There is no input, and the output can be either TRUE or FALSE.
35.8.2.4
IfMsgGetFocus — 3
This message is sent to the field that has just received the focus. There
is no input, and the output can be either TRUE or FALSE.
35.8. Reference
35.8.2.5
263
IfMsgGetFieldValue — 4
This message is sent to the current field. It has as input the internal
data of the field, and this message can be used to return the external value
(which is displayed in the screen). Using this and the IfMsgSetFieldValue messages, it is possible, for example, to store only an offset to the current element
when you have a list of fixed values, instead of the actual element.
Input
Output (if handled)
Output (if not handled)
35.8.2.6
1:
2:
1:
2:
1:
Internal value
External value
TRUE
Internal value
FALSE
IfMsgSetFieldValue — 5
The complimentary message of IfMsgSetFieldValue: it gives as input
the “external” (or user) value, and the internal value should be returned. If
you want a message to be called after each change in the value of a field, this
is the one. You can leave the value given as input unchanged, naturally.
Input
Output (if handled)
Output (if not handled)
35.8.2.7
1:
2:
1:
2:
1:
External value
Internal value
TRUE
External value
FALSE
IfMsgGetFieldGrob — 6
This message is sent to the current field. If you decide to handle it,
you will have to set the grob that is displayed in the field (you can use the
ˆIfSetGrob entry for this). If you do so, then the standard code of the Input
Form that would do this is not called.
Input
Output
2:
1:
2:
1:
#Field
Value
#Field
TRUE or FALSE
Here is an example of handling this message:
264
1
5
35. Creating Input Forms
::
OVER TRUE ROT SWAP (Number, number, TRUE, value)
$>grob
FPTR2 ^IfSetGrob
;
35.8.2.8
IfMsgSetFirstField — 7
This message is sent during initialization to the input form handler, to
get the number of the first field that will be selected. It makes no difference
wheter you return TRUE or FALSE, just change the number if desired.
Input
Output
35.8.2.9
1: #Field
2: #Field
1: TRUE or FALSE
IfMsgFieldReset — 10
This message is sent to a field that is going to be reset. It is possible to
modify the value of the field, if desired.
Input
Output
35.8.2.10
1: Value
2: Value, possibly modified
1: TRUE or FALSE
IfMsgGetMenu — 11
This message is sent to the input form handler during initialization,
and can be used to provide a menu for the input form. The menu is in the
format described in section 37.1.
Input
Output (if handled)
Output (if not handled)
1:
3:
2:
1:
2:
1:
Menu
Original menu
New menu
TRUE
Original menu
FALSE
35.8. Reference
35.8.2.11
265
IfMsgGet3KeysMenu — 12
This message can be used to change the last three softkeys of the first
row of the standard input form menu. If handled, it should return a list with
three sub-lists, each being a key definition.
Input
Output (if handled)
Output (if not handled)
35.8.2.12
None
2: List
1: TRUE
1: FALSE
IfMsgCancel — 13
This allows the user to replace the default quit handler. This message
is called when the ON key or the CANCL softkey are pressed. If it is handled,
then no standard code is run. The user should alter the value of LAM 'Quit
to indicate the POL that the input form should be ended.
Input
Output (if handled)
Output (if not handled)
35.8.2.13
None
1: TRUE
1: FALSE
IfMsgCancelKey — 14
This message is sent to the input form handler when the user requests
the input form to end via the CANCEL key. The programmer can prevent the
input form to end if there is invalid input, for example.
Input
Output (if handled)
Output (if not handled)
None
2: TRUE or FALSE
1: TRUE
1: FALSE
When the message is handled, a TRUE in level two means that the input
form should end, FALSE means it should continue.
35.8.2.14
IfMsgOK — 15
This is similar to the IfMsgCancel message, but for the OK softkey or
ENTER key.
266
35.8.2.15
35. Creating Input Forms
IfMsgKeyOK — 16
This message is sent to the input form handler when the user requests
the input form to end via the OK key. The programmer can prevent the input
form to end if there is invalid input, for example.
Input
Output (if handled)
Output (if not handled)
None
2: TRUE or FALSE
1: TRUE
1: FALSE
When the message is handled, a TRUE in level two means that the input
form should end, FALSE means it should continue.
35.8.2.16
IfMsgChoose — 17
When the user presses the CHOOS softkey in a choose field, this message is sent, first to the field, and then to the input form (if it was not handled
by the field). If it is handled by either, then no standard code is run, and you
have to display the choose box yourself.
There are no arguments, and you should return TRUE to prevent the
standard code to be executed if you desire that, after having displayed your
choose box.
35.8.2.17
IfMsgType — 18
This message is sent to the input form when the TYPES softkey is
pressed. If it is handled, no standard code is executed.
There are no arguments, and you should return TRUE to prevent the
standard code to be executed if you desire that, after having displayed your
choose box.
35.8.2.18
IfMsgCalc — 19
This message is sent to the form when the CALC softkey is pressed. If
it is handled, no standard code is executed.
There are no arguments, and you should return TRUE to prevent the
standard code to be executed if you desire that, after having displayed your
choose box.
35.8. Reference
35.8.2.19
267
IfMsgNewCommandLine — 20
This message is sent to the input form when a new command line is
created. The system does not care if the message is handled or not. It is just to
give the programmer the opportunity to perform anything he needs. There are
no inputs, and the output is just TRUE or FALSE, without any difference.
35.8.2.20
IfMsgOldCommandLine — 21
This message is sent to the input form when a command line is cancelled. See message IfMsgNewCommandLine above for more details.
35.8.2.21
IfMsgCommandLineValid — 22
This is sent to a field when the command line is validated.
Input
Output (if handled)
Output (if not handled)
35.8.2.22
None; a command line is present
No command line; elements in the stack and
TRUE
1: FALSE
IfMsgDecompEdit — 23
This is sent to a field when an object needs to be decompiled for editing.
Input
Output (if handled)
Output (if not handled)
35.8.2.23
1:
2:
1:
1:
Object
String
TRUE
FALSE
IfMsgNextChoose — 24
This message is sent to a choose field when the +/- key is pressed. If
it is handled, then the default action is not run. There are no inputs and no
outputs, except for the TRUE/FALSE.
35.8.2.24
IfMsgEdit — 25
This is sent to a field when the EDIT softkey is pressed. The input is
the current value of the field, the output can be nothing, a modified command
line, something in the stack, or a modified field. If this message is handled,
then the default code is not run.
Chapter 36
The Display
There are two screens available to the programmer while programming
in System RPL: the graphics screen, which is visible, for example, in the Plot
application (and referred as PICT in User RPL), and the text screen, which is
the graphic visible in the standard stack environment. Whenever possible, the
latter should be used, leaving the graphics screen untouched, because that is
supposedly a user resource, which should not be changed by programs.
36.1
Display Organization
The HP49 system RAM contains three dedicated graphic objects (subsequently called grobs) used for display purposes. The commands below return
each of this grobs:
Command
ABUFF
GBUFF
HARDBUFF
HARDBUFF2
Grob
Text grob (stack)
Graphics grob (PICT)
Either the text or gaphics grob, whichever is active.
Menu labels
One thing to note is that the words above return just pointer to the
grob, so if you alter the grob, the display will also be altered automatically.
Most of the times that is the desired behavior, but if you do not want that, call
TOTEMPOB after using any of the words above to make a unique copy in temporary memory. See section 24.1.4 for more information on temporary memory
and object references.
The text and graphic grobs may be enlarged, and may be scrolled. The
menu label grob has a fixed size of 131x8 pixels.
The command TOADISP makes the text grob visible, and the command
TOGDISP makes the graphic grob visible.
268
36.2. Preparing the Display
269
The text grob is divided in three regions. The display areas are numbered one, two and three. In many words you will find “DA”, which means
“Display Area”. Figure 36.1 shows each of this areas.
Figure 36.1: The Display Areas
Display area 2 is actually divided in two areas: 2a and 2b. Normally,
only area 2a is visible, and it occupies the whole DA 2.
36.2
Preparing the Display
Two words establish control over the text display: RECLAIMDISP and
ClrDA1IsStat. The first does the following:
• Assures the current display is the text one;
• Clears the text display;
• If necessary, resizes the text display to the default size of 131x56 pixels.
This word works very similarly to the user word CLLCD, the difference
is that CLLCD never resizes the text display.
The word ClrDA1IsStat is optional, but most of the time it should
be used. It suspends the ticking clock display temporarily. Most graphical
programs would not want to have that clock displayed.
When the menu is not necessary, use the word TURNMENUOFF to hide
the menu and enlarge the text grob to 131x64 pixels. It is turned on again with
TURNMENUON. For more details on the menu, see Chapter 37.
The suggested template for an application that uses the text display is:
270
1
36. The Display
::
ClrDA1IsStat
RECLAIMDISP
TURNMENUOFF
(suspend clock)
(set, clear and resize text display)
(turn off menu if desired)
5
<application>
ClrDAsOK
-orSetDAsTemp
10
(redraw LCD)
(freeze the whole display)
;
36.3
Controlling Display Refresh
In some programs, it is desired that, after the application ends, the
screen is not redrawn, but continues frozen so that the user can see the results,
like the User RPL the command FREEZE does. Other times, it is desired that
the display is returned back to normal. In System RPL, several words serve
those purposes. The most used ones are listed below; the whole list is in the
reference section below.
Word
SetDA1Temp
SetDA2OKTemp
SetDA3Temp
SetDA12Temp
SetDAsTemp
ClrDA1OK
ClrDA2OK
ClrDA3OK
ClrDAsOK
36.4
Action
Freezes display area 1.
Freezes display area 2.
Freezes display area 3.
Freezes display areas 1 and 2.
Freezes the whole display.
Redraws display area 1.
Redraws display area 2.
Redraws display area 3.
Redraws the whole display.
Clearing the Display
The following words clear HARDBUFF, entirely or in part. Remember
that HARDBUFF refers to the currently displayed grob, either the text or the
graph display. Except from BLANKIT, no words take or return arguments.
36.5. Displaying Text
Word
CLEARVDISP
BlankDA1
BlankDA2
BlankDA12
Clr16
Clr8
Clr8-15
CLCD10
CLEARLCD
BLANKIT
36.5
271
Action
Clears entire HARDBUFF.
Clears display area 1.
Clears display area 2.
Clears display areas 1 and 2.
Clears top 16 rows.
Clears top 8 rows.
Clears rows 8 to 15 (second status line).
Clears status and stack area.
Clears entire display.
( #start_row #rows → )
Clears #rows from HARDBUFF.
Displaying Text
There are two fonts in the HP49: the “system font” and the “minifont”.
Both can be changed by the user, but it is only possible to access two fonts at
each time. The height of the system font (or of its characters, to be precise) can
vary, but its characters are always five pixels wide. The size of the minifont is
fixed: each character is 3x5 pixels.
There are commands to display text in the system font directly, but not
for the minifont. In the latter case, it is necessary to convert the text into a
grob and display the grob. The list below only describes the most used ones, for
a complete list see the reference section below.
36.5.1
System Font
To display text using the system font, use the commands DISPROW1,
DISPROW2. . . to DISPROW10, which take a string as argument and display it
in the specified line of the display. Note that, depending on the size of selected
system font and wheter the menu is displayed, some of these commands may
not be used. You can always safely display text on the first seven lines, even
with the largest system font.
272
36.5.2
36. The Display
Minifont
As said above, displaying text with the minifont is more complicated.
First, put a string in the stack and run the command $>grob. This will return
a grob representing with the string in the minifont. You now need to display
this grob on the screen. You can use GROB! or XYGROBDISP for that. For
more information on these words and for a general treatment of grobs, turn to
Chapter 15. In this same chapter, you will find some other commands which
might be more convenient for displaying text with the minifont.
36.5.3
Displaying Warnings
The word FlashWarning is used to display a warning message. It
beeps, and then displays the given string in a message box. The user must
press OK in order to continue.
Instead of FlashWarning, one can use FlashMsg, which displays the
text in the status line, and does not beep. To display a message in the status
area, it uses the word DISPSTATUS2, which takes a string with a line break in
it, and displays it using the two lines of the status area. After a short pause,
the display is returned to the state it was before and the program continues.
36.6
Reference
36.6.1
Display Organization
Addr.
26166
Name
TOADISP
2616B
TOGDISP
25FA4
ABUFF
26076
GBUFF
Description
( → )
Sets the text display as the active.
( → )
Sets the graphic display as the active.
( → textgrob )
Returns the text grob to the stack.
( → graphgrob )
Returns the graphic grob to the stack. The HP49
extable address for ExitAction! is the same,
but this must be a bug.
36.6. Reference
Addr.
2608F
Name
HARDBUFF
26094
HARDBUFF2
25EDE
HARDHEIGHT
25ED5
GBUFFGROBDIM
36.6.2
273
Description
( → dispgrob )
Returns the current grob to the stack.
( → menugrob )
Returns the menu grob to the stack.
( → #height )
Returns the height of HARDBUFF.
( → #height #width )
Returns dimensions of graphic grob.
Preparing the Display
Addr.
25EF4
Name
RECLAIMDISP
2EE7D
ClrDA1IsStat
2EEFD
MENUOFF?
2F034
TURNMENUOFF
2F031
TURNMENUON
2EEFC
26247
MENUOFF
GetHeader
26283
SetHeader
26099
HEIGHTENGROB
260A3
KILLGDISP
2EEF9
DOERASE
Description
( → )
Activates the text grob, clears it and sets the default size.
( → )
Suspends clock display.
( → flag )
Returns TRUE if the menu grob is off.
( → )
Turns off menu display, enlarges ABUFF to fill
screen.
( → )
Turns menu grob on.
( → )
( → # )
Gets header size in lines (0-2).
( # → )
Sets header size in lines (0-2).
( grob #rows → )
Heightens graph or text grob.
( → )
Clears graph display by setting it to NULLGROB.
See DOERASE.
( → )
Erases the graphics display grob without changing its size.
274
36.6.3
36. The Display
Immediate Refresh
Addr.
2EF67
Name
SysDisplay
2F19F
?DispCommandLine
2F19E
DispCommandLine
2EE5A
DispEditLine
2DFCC
?DispMenu
2DFF4
DispMenu.1
2DFE0
DispMenu
2C341
?DispStack
2C311
?DispStatus
2C305
DispStatus
2C2F9
DispStsBound
2A7F7
DispTimeReq?
2F300
DispILPrompt
Description
( → )
Redisplays all required areas. Does it immediately, without waiting for the current command to finish.
( → )
Redisplays the command line now if necessary.
( → )
Redisplays the command line now.
( → )
Just calls DispCommandLine.
( → )
Redisplays the menu now if no key is waiting
in the buffer. Even better is this:
:: DA3OK?NOTIT ?DispMenu ;
( → )
Displays menu now.
( → )
:: DispMenu.1 SetDAsValid ;
( → )
Redisplays the stack now if necessary.
( → )
Redisplays the status area now if necessary.
( → )
Displays the status area now.
( → )
Displays a horizontal line at y=14, normally
the separation between header and stack.
( → flag )
Is time display required? Checks system flag
40 and something else.
( → )
Redisplays the InputLine prompt, i.e. refreshes the region between the command line
and the header during InputLine. Requires
a string (the prompt) in 4LAM.
36.6. Reference
Addr.
26260
36.6.4
Name
nDISPSTACK
275
Description
( $prompt #height #header flag flag
→ )
Used by DispILPrompt.
Controlling Display Refresh
Addr.
2EE8D
2EE8E
2EE8F
2EE90
2EE6E
2EE6D
2EE62
2EE63
2EE66
2BF3A
Name
ClrDA1OK
ClrDA2aOK
ClrDA2bOK
ClrDA2OK
ClrDA3OK
ClrDAsOK
DA1OK?
DA3OK?
DA2aLess1OK?
DA1OK?NOTIT
2BF53
DA2aOK?NOTIT
2BF6C
DA2bOK?NOTIT
2BF85
DA3OK?NOTIT
2EE69
2EE8A
2EE6A
2EEA7
2F37A
2EE6B
2EE71
2EE64
2EEA5
2EE67
2EF98
2EE68
2EE91
2EF99
SetDA1Temp
SetDA2aTemp
SetDA2bTemp
ClrDA2bTemp
SetDA2OKTemp
SetDA3Temp
SetDA12Temp
SetDAsTemp
SetDA2bTempF
SetDA1Valid
SetDA2aValid
SetDA2bValid
SetDA2Valid
SetDA3Valid
Description
( → )
( → )
( → )
( → )
( → )
( → )
( → flag )
( → flag )
( → flag )
( → )
Does DA1OK?, NOT then IT.
( → )
DA2aOK?, NOT then IT.
( → )
DA2bOK?, NOT then IT.
( → )
Does DA3OK?, NOT then IT.
( → )
( → )
( → )
( → )
( → )
( → )
( → )
( → )
( → )
( → )
( → )
( → )
( → )
( → )
276
36. The Display
Addr.
2EEA0
2EE78
2EE74
2EEB0
2EE79
2EE75
2EEB1
2EE7A
2EEB3
2EEB2
2EE7B
2EEB5
2EEB4
2EE72
2EE73
2EE76
2EE81
2EEB7
2EE93
2EE6F
2EE77
2EE70
2EE94
2EE65
Name
SetDA3ValidF
SetDA1Bad
ClrDA1Bad
DA1Bad?
SetDA2aBad
ClrDA2aBad
DA2aBad?
SetDA2bBad
ClrDA2bBad
DA2bBad?
SetDA3Bad
ClrDA3Bad
DA3Bad?
SetDA1NoCh
SetDA2aNoCh
SetDA2bNoCh
ClrDA2bNoCh
DA2bNoCh?
SetDA2NoCh
SetDA12NoCh
SetDA3NoCh
SetDA13NoCh
SetDA23NoCh
SetDA12a3NCh
2F379
2EE7C
2EE6C
2EEAC
2EEAE
2EEAF
2EEAB
2EE7F
2EE7E
2EE80
SetDA123NoCh
SetDAsNoCh
SetDA2aEcho
SetDA1IsStat
SetNoRollDA2
ClrNoRollDA2
DA1IsStatus?
SetDA2bIsEdL
DA2bIsEdL?
ClrDA2bIsEdL
Description
( → )
( → )
( → )
( → flag )
( → )
( → )
( → flag )
( → )
( → )
( → flag )
( → )
( → )
( → flag )
( → )
( → )
( → )
( → )
( → flag )
( → )
( → )
( → )
( → )
( → )
( → )
aka: SetDA12a3NoCh
( → )
( → )
( → )
( → )
( → )
( → )
( → flag )
( → )
( → flag )
( → )
36.6. Reference
36.6.5
Addr.
25E7E
Clearing the Display
Name
BLANKIT
26021
CLEARVDISP
2EED4
Clr8
2EED5
Clr8-15
2F15E
Clr16
2EF5E
BlankDA1
2F31C
BlankDA2a
2F31B
BlankDA2
2EE5C
BlankDA12
261C0
CLCD10
261C5
CLEARLCD
2EF05
DOCLLCD
36.6.6
277
Description
( #startrow #rows → )
Clears #rows from HARDBUFF, starting
#startrow.
( → )
Clears HARDBUFF.
( → )
Clears top eight rows (first status line).
( → )
Clears 2nd status line.
( → )
Clears top 16 rows.
( → )
Clears status area from HARDBUFF.
( → )
Clears display area DA2a.
( → )
Clears display areas DA2a and DA2b.
( → )
Clears display areas DA1 and DA2
( → )
Clears status and stack areas.
( → )
Clears whole display.
( → )
Like user word CLLCD.
Annunciator and Modes Control
Addr.
2613E
Name
SetLeftAnn
2603A
ClrLeftAnn
26148
SetRightAnn
Description
( → )
Sets left-shift annunciator.
( → )
Clears left-shift annunciator.
( → )
Sets right-shift annunciator.
at
278
36. The Display
Addr.
2603F
Name
ClrRightAnn
26139
SetAlphaAnn
26035
ClrAlphaAnn
25EE9
LockAlpha
25F08
UnLockAlpha
2649F
(ClrBusyAnn)
26143
SetPrgmEntry
2610C
PrgmEntry?
25EBE
Do1st/2nd+:
25719
SetAlgEntry
2571E
ClrAlgEntry
256EA
AlgEntry?
25EDF
ImmedEntry?
25E74
?ClrAlg
25E75
?ClrAlgSetPr
Description
( → )
Clears right-shift annunciator.
( → )
Sets alpha annunciator.
( → )
Clears alpha annunciator.
( → )
Sets alpha mode, annunciators, etc.
( → )
Clears alpha mode, annunciators, etc.
( → )
Clears the busy annunciator.
( → )
Sets program-entry mode.
( → flag )
Is program-entry mode set?
( → :: <ob1> ; (PRG mode) )
( → :: <ob2> <rest> ; (no PRG mode)
)
If in program mode, executes the next object
after it. If not in program mode, executes the
rest of the stream starting at the second object
after it.
( → )
Sets algebraic-entry mode.
( → )
Clears algebraic-entry mode.
( → flag )
Is algebraic-entry mode set?
( → flag )
Returns TRUE if immediate-entry mode (program and algebraic-entry modes cleared).
( → )
Clears AlgEntry mode if set.
( → )
Clears AlgEntry mode if set and sets ProgramEntry mode.
36.6. Reference
36.6.7
Window Coordinates
Addr.
2F384
Name
TOP8
2F36C
Rows8-15
2F383
TOP16
2617F
WINDOWCORNER
2EED6
HBUFF_X_Y
2F352
LEFTCOL
2F36B
RIGHTCOL
2F385
TOPROW
2F31D
BOTROW
26198
WINDOWXY
36.6.8
279
Description
( → HBgrob #x1 #y #x1+131 #y1+8 )
Returns coordinates of first status line.
( → HBgrob #x1 #y1+8 #x1+131 #y1+16 )
Returns coordinates of second status line.
( → HBgrob #x1 #y1 #x1+131 #y1+16 )
Returns coordinates of status area.
( → #x #y )
Gets coordinates of corner of window.
( → HBgrob #x #y )
Returns current grob and window coordinates.
( → #x )
Gets x-coordinate of left column.
( → #x )
Gets x-coordinate of right column.
( → #y )
Gets y-coordinate of top row.
( → #y )
Gets y-coordinate of bottom row.
( #x #y → )
Sets corner coordinates.
Scrolling the Display
Addr.
26193
Name
WINDOWUP
26184
WINDOWDOWN
26189
WINDOWLEFT
2618E
WINDOWRIGHT
2F370
SCROLLUP
Description
( → )
Moves display one pixel up.
( → )
Moves display one pixel down.
( → )
Moves display one pixel left.
( → )
Moves display one pixel right.
( → )
Moves display one pixel up, checks for corresponding key being pressed.
280
36. The Display
Addr.
2F36D
Name
SCROLLDOWN
2F36E
SCROLLLEFT
2F36F
SCROLLRIGHT
2F34A
JUMPTOP
2F347
JUMPBOT
2F348
JUMPLEFT
2F349
JUMPRIGHT
2F38D
WINDOWTOP?
2F38A
WINDOWBOT?
2F38B
WINDOWLEFT?
2F38C
WINDOWRIGHT?
36.6.9
Description
( → )
Moves display one pixel down, checks for corresponding key being pressed.
( → )
Moves display one pixel left, checks for corresponding key being pressed.
( → )
Moves display one pixel right, checks for corresponding key being pressed.
( → )
Jumps to top of display.
( → )
Jumps to bottom of display.
( → )
Jumps to left of display.
( → )
Jumps to right of display.
( → flag )
Is window at the top?
( → flag )
Is window at the bottom?
( → flag )
Is window at the left?
( → flag )
Is window at the right?
Displaying Objects
Addr.
2F21D
2F21E
Name
ViewObject
ViewStrObject
2F21F
ViewGrobObject
Description
( ob → )
( flag $ → F )
Flag decides if it should be possible to toggle
TEXT/GRAPH.
( flag grob → F )
Flag decides if it should be possible to toggle
TEXT/GRAPH.
36.6. Reference
Addr.
25F12
Name
sstDISP
0C1007
ˆSCROLLext
2EF61
WINDOW#
36.6.10
281
Description
( ob → )
Displays ob in status line. Used for single
stepping during debugging.
( grob → )
Launches PICT environment.
( #x #y → )
Internal PVIEW, displays PICT starting at the
given coordinates.
Displaying Text
Addr.
25EB4
Name
DODISP
25FB8
DISPROW1
25EAB
DISPROW1*
25FBD
DISPROW2
25EAC
DISPROW2*
25FC2
DISPROW3
25FC7
DISPROW4
25FCC
261F7
25FD1
25FD6
DISPROW5
DISPROW6
DISPROW7
DISPROW8
25FDB
DISPROW9
25FE0
DISPROW10
Description
( ob %row → )
Displays any object in specified row.
( $ → )
aka: DISP@01, BIGDISPROW1
( $ → )
Displays relative to window corner.
( $ → )
aka: DISP@09, BIGDISPROW2
( $ → )
Displays relative to window corner.
( $ → )
aka: DISP@17, BIGDISPROW3
( $ → )
aka: DISP@25, BIGDISPROW4
( $ → )
( $ → )
( $ → )
( $ → )
May not be possible depending on the size of
the font and whether the menu is on or off.
( $ → )
May not be possible depending on the size of
the font and whether the menu is on or off.
( $ → )
May not be possible depending on the size of
the font and whether the menu is on or off.
282
36. The Display
Addr.
25FB3
Name
DISPN
25EBC
Disp5x7
25EAD
DISPSTATUS2
38C00
(DISPST2&FREEZE)
2EEFF
DispCoord1
2F32B
DISPCOORD2
25FE5
DISPLASTROW
25FEA
DISPLASTROWBUT1
25ED4
FlashMsg
2EE61
FlashWarning
2F1A5
AskQuestion
02E002
ˆDoAlert
2EE60
DoWarning
Description
( $ #row → )
aka: BIGDISPN
( $ #start #max → )
Displays string on multiple lines, starting at
#start and no using more than #max rows.
New lines must be manually specified. Segments longer than 22 characters are truncated and appended with "...".
( $ → )
Displays message in status area using two
lines.
( $ → )
DISPSTATUS2 and freeze status area.
( $ → )
Displays $ in menu grob using minifont.
( $ → )
Displays $ in menu grob using minifont and
waits for a key. Then refreshes menu display.
( $ → )
Displays $ in the last stack display row, just
above the menu.
( $ → )
Displays $ in the last stack display row. If
menu is turned on it can cover displayed text.
( $ → )
Displays message in status area, then restores it to normal.
( $ → )
Displays message in a message box and beeps.
Waits for OK to be pressed.
( $ → flag )
Use the string to aks the user a question with
yes/no in a choose box.
( $ → )
Displays alert messagebox.
( $ → )
Displays message, beeps and freezes status
area.
36.6. Reference
Addr.
007002
Name
ˆCk&DoMsgBox
0040B1
˜MsgBoxMenu
36.6.11
283
Description
( $ #x #y grob menu → T )
Displays a message box with a grob in the upper left corner and the specified menu. The
meaning of #x and #y is unclear.
( → {} )
The messsage box menu, with just the OK key.
Fonts
Addr.
2621A
Name
FONT>
2625B
MINIFONT>
25F15
>FONT
2620B
>MINIFONT
26288
StackLineHeight
26242
GetFontStkHeight
Description
( → font )
Recalls system font.
( → minifont )
Recalls the current minifont.
( font → )
Sets system font.
( minifont → )
Sets the current minifont.
( → # )
Returns height of text grob minus size of
header and menu.
( → # )
Returns stack font height (used for display
stack rows).
aka: StackFontHeight
Chapter 37
The Menu
The menu line is divided in six parts, one for each key, each eight pixels
high and 21 pixels wide. The starting columns for each menu key label in
HARBDUFF2 are:
Hex
0
16
2C
Dec
0
22
44
Softkey
First softkey (F1)
Second softkey (F2)
Third softkey (F3)
Hex
42
58
6E
Dec
66
88
110
Softkey
Fourth softkey (F4)
Fifth softkey (F5)
Sixth softkey (F6)
The command DispMenu.1 redisplays the current menu; and the command DispMenu redisplays the current menu and then calls SetDA3Valid to
freeze the menu display area (display area 3).
The words below convert several kinds of objects to menu labels and
display them at the specified column:
Word
Str>Menu
Id>Menu
Grob>Menu
Seco>Menu
Stack and action
( #col $ → )
Makes and displays a standard menu label.
( #col id → )
Recalls id and displays standard or directory label, depending
on the contents.
( #col grob → )
Displays a grob as a menu label.
( #col :: → )
Evaluates secondary and uses results to create and display
appropriate menu label.
The words below convert strings to the four different kinds of grobs
available. All of them take a string and return a grob as arguments
284
37.1. Menu Format
Word
MakeStdLabel
MakeBoxLabel
MakeDirLabel
MakeInvLabel
37.1
285
Action
Makes a black label (standard).
Makes label with a box inside.
Makes directory label (bar above).
Makes white label (like in Solver).
Menu Format
A menu is either a list
{ MenuKey1 MenuKey2 ... MenuKeyN }
or a program
:: <Settings> { MenuKey1 MenuKey2 ... MenuKeyN } ;
which returns such a list and optionally changes of the default menu properties
installed by InitMenu.
Each menu key can be any of the following:
• NullMenuKey
• KeyObj
• { LabelObj KeyProcNS }
• { LabelObj { KeyProcNS KeyProcLS } }
• { LabelObj { KeyProcNS KeyProcLS KeyProcRS } }
LabelObj is the object to be displayed as the label. If it is a program
with TakeOver as the first command, it is evaluated with the x-position of the
label on the stack and must return the argument(s) for the LabelDef progam
(normally the x-position of the label and the object to display as a label).
If you do not override the LabelDef command (most of the times you
will not), then LabelObj can be any object, but genereally it is a string or a
21x8 grob.
KeyProc is the action taken upon key press. It will be executed by a
special executor which takes appropriate actions depending upon the object
type. If KeyProc is a program with TakeOver as the first command, it will
override the normal executor. NS here means this is the action when the menu
key is pressed unshifted (think of No-Shift). Similarly, LS and RS means the
actions run when the key is pressed left- or right-shifted, respectively.
286
37.2
37. The Menu
Menu Properties
The menu system of the HP49 provides an amazing flexibility. Besides
the normal actions, a menu has many properties which define the appearance
of labels and the specific actions taken upon keypresses, actions to take when
the context changes or a different menu is installed etc.
The properties a menu carries are:
Word
MenuDef
MenuKeys
MenuRow
LabelDef
MenuRowAct
ExitAction
TrackAct
ReviewKey
MenuKeysNS
MenuKeysLS
MenuKeysRS
BadMenu?
Rebuild?
Track?
Stack and action
The current menu.
The menu keys in a list.
The menu page.
The label builder for menu.
Action taken when menu row changes or when LastMenu is
reinstalled.
Action taken when menu changes. Normally this action
saves the current menu as LastMenu.
Action taken when the context (the current directory)
changes.
Action taken when REVIEW key (Rightshift DOWN) is
pressed.
Action taken when menu key is pressed.
Action taken when menu key is pressed left-shifted.
Action taken when menu key is pressed right-shifted.
Must the menu be be redrawn?
Has the menu row changed?
If context has changed is there a prg to execute?
Examples for the TrackAct property are:
• SolverMenu has DoSolveMenu as TrackAct, because there might be another EQ variable to use.
• The Custom menu just restarts itself because the value of the CST variable may have changed. ( CstTrack = :: NoExitAction MenuDef@
InitMenu ; )
Most menu properties can be modified using supported entry points.
Here is an example for doing so. The following program sets a modified VAR
menu, which allows variables to be protected against being overwritten with a
left-shifted menukey.
37.2. Menu Properties
1
5
10
15
20
25
287
::
MenuMaker
::
ROMPTR A9 2
(the builtin VAR menu)
’
::
DUP
DUPTYPECSTR? NOT_IT DECOMP$ (make a string)
SWAP
ID prtct
ITE
(select label type)
MakeInvLabel
MakeStdLabel
Grob>Menu
(display label)
;
LabelDef!
’
::
ID prtct
NOTcase xSTO
DECOMP$ "\0A is protected" &$
FlashWarning
;
MenuKeyLS!
;
DoMenuKey
;
This does several things:
1. Gets the normal VAR menu in order to pass it to DoMenuKey.
2. It modifies the LabelDef property in a way that the protected variables
will have an inverted label in the menu.
3. It modifies the MenuKeyLS property in a way that it exits with an error
message if the relevant variable is protected.
The program in ID prtct is an ID selector which has the stack diagram
( id → flag ) and must decide if a given ID should be protected. Here are
some possibilities:
1. :: DROPTRUE ; — All variables are protected
288
37. The Menu
2. :: DROPFALSE ; — No variables are protected
3. :: ID>$ CAR$ CHR_% EQUAL ; — Variables with names starting with
"%" are protected.
4.
::
ID PROTECTED
OVER EQUALPOSCOMP
#0<>
(all variables in the list)
(stored in the variable)
(’PROTECTED’ are protected)
;
Note that if the variable prtct does not exist or does not follow the
required stack diagram, the calculator may crash. You might want to modify
the program to put in better protection against user errors. Also note that this
only protects against storing using left-shift and a menukey. It will not protect
against using the STO command or the filer, naturally.
37.3
Reference
37.3.1
Menu Properties
Addr.
04A41
Name
GETDF
04A0B
GETPROC
2580E
SetRebuild
260B7
MenuRow!
260BC
MenuRow@
Description
( #menukey → ob )
Gets the definition of a menu key from
THOUCHTAB. #menukey = #1..#6
( #menukey → ob )
Gets the definition of a menu key from
THOUCHTAB. #menukey = #1..#6. With #7, get
the executor.
( → )
Sets the flag that the menu needs to be rebuild.
( #n → )
Sets the menu row. #n is not the row, but the
index of the first menu key in that row, i.e.
1,7,13,. . .
( → #n )
Recalls the index of the first menu key in the
current menu page. Returns 1 for the first page,
7 for the second page, 13 for the third and so on.
37.3. Reference
Addr.
260A8
Name
LastMenuRow!
260AD
LastMenuRow@
25845
MenuDef@
25908
LastMenuDef!
2590D
LastMenuDef@
25EFB
SaveLastMenu
25EDA
25863
GetMenu%
MenuRowAct!
25EE2
InitTrack:
289
Description
( #n → )
Sets the row of the last menu. #n is not the row,
but the index of the first menu key in that row,
i.e. 1,7,13,. . .
( → #n )
Recalls the index to the first menu key in the
current row of the last menu. Returns 1 for the
first page, 7 for the second page, 13 for the third
and so on.
( → menu )
Recalls the current menu definition. menu is a
MenuList or a program, or a Rompointer.
( menu → )
Sets the definition of the last menu. menu is a
MenuList or a program, or a Rompointer.
( → menu )
Recalls the definition of the last menu. menu is
a MenuList or a program, or a Rompointer.
( → )
Stores row and definition of current menu as the
last menu.
( → % )
( ob → )
Stores ob as the RowAct menu property.
( → )
Execute the program which is next in the runstream if the directory changes. Used by the
VAR menu to set first menurow when diretory
changes, or by the CST menu to rebuild it.
290
37. The Menu
Addr.
25877
Name
LabelDef!
2589F
MenuKeyLS!
258B3
MenuKeyRS!
2588B
MenuKeyNS!
25890
MenuKeyNS@
25EFC
SetKeysNS
25F02
StdMenuKeyLS
25F03
StdMenuKeyNS
Description
( ob → )
Store a program which displays a menu label.
Prg has the stack diagram
( #col ob → )
For example, the LIBS command uses the following program to make all menu label look like
directories:
:: DUPNULL$? ITE
MakeStdLabel MakeDirLabel
Grob>Menu ;
During execution, INDEX@ will contain the
menu key number.
( ob → ob )
Set the action for left-shifted menu keys. The
program receives the action part of the menu
item as an argument, i.e.
{ob-NS ob-LS ob-RS}.
( ob → ob )
Set the action for right-shifted menu keys. The
program receives the action part of the menu
item as an argument, i.e.
{ob-NS ob-LS ob-RS}.
( og → ob )
Set the action for unshifted menu keys. The program receives the action part of the menu item
as an argument, i.e. ob-NS or
{ob-NS ob-LS ob-RS}.
( → ob )
Recall the action for unshifted menu keys.
( ob → )
Sets ob as MenuKeysNS, DoBadKey to LS & RS.
( {ob-NS ob-LS ob-RS} → ? )
The content of MenuKeyLS for standard menus.
( ob-NS → ? )
( {ob-NS ob-LS ob-RS} → ? )
The content of MenuKeyNS for standard
menus.
37.3. Reference
Addr.
27FED
Name
NullMenuKey
258C7
ReviewKey!
258EF
(ExitAction!)
25EEF
NoExitAction
37.3.2
291
Description
( → )
A placeholder for an empty menu key when
defining menu lists.
( ob → )
Store a program which is called with the review
key (RS DOWN). The program has the stack diagram
( → )
( ob → )
Store ob as exit action.
( → )
Sets NOP as ExitAction. Mostly used to avoid
that the menu is saved as the previous menu
when a new Menu gets installed.
Building Menus
Addr.
275C6
Name
TakeOver
275EE
Modifier
27620
MenuMaker
25EE0
InitMenu
25EC6
DoMenuKey
Description
( → )
Override the default menu key executer. If this
is the first entry in a program, the program can
be used in edit mode. When the first in a program in the label slot of a menu key, the program is evaluated to get the label object (most
likely a grob).
( → )
:: TakeOver ;
( → ob )
Quotes next object, and also provides
TakeOver. The disassembly is
:: TakeOver 'R ;
Normally this is used like this:
:: MenuMaker menu InitMenu ;
( menu → )
menu is {} or :: settings {} ; Settings override
the default settings installed by InitMenu.
( menu → )
:: SetDA12NoCh InitMenu ;
292
37. The Menu
Addr.
25EE1
Name
InitMenu%
25F00
StartMenu
25EFE
SetThisRow
25EE8
LoadTouchTbl
37.3.3
Description
( %mnu.pg → )
( %0 → )
( menu #n → )
#n is the index of the first menu key on the page,
use 1 for the first page, 7 for the second etc.
StartMenu does ExitAction (Previous menu!),
sets the default menu properties and page. Then
it evaluates menu, stores result to MenuKeys
and executes SetThisRow.
( → )
Builds a new TOUCHTAB, SetBadMenu.
( MenuKey1 .. MenuKeyN #n → )
Builds new TOUCHTAB from menukeys.
Menu Display
Addr.
2EF66
Name
SysMenuCheck
2DFCC
?DispMenu
2DFF4
DispMenu.1
2DFE0
DispMenu
Description
( → )
Checks menu validity. If DA3NoCh? then nothing. If Track? then ?DoTrackAct@. If Rebuild?
then SetThisRow.
( → )
Redisplay the menu now if no key is waiting in
the buffer. Even better is this:
:: DA3OK?NOTIT ?DispMenu ;
( → )
Displays the menu immediately.
( → )
:: DispMenu.1 SetDAsValid ;
37.3. Reference
37.3.4
Displaying Menu Labels
Addr.
2E0D5
Name
Grob>Menu
2E0F3
Str>Menu
2E11B
Id>Menu
2E107
Seco>Menu
25886
DoLabel
2E2AA
MakeLabel
08E007
ˆWRITEMENU
37.3.5
293
Description
( #col grob → )
Displays grob as menu label.
( #col $ → )
Displays string as menu label.
( #col id → )
Displays id as menu label.
( #col :: → )
Does EVAL then DoLabel.
( #col ob → )
If ob is of one of the supported types, displays a
menu label. If not, generates a "Bad Argument
Type" error.
( $ #w #x grob → grob' )
Inserts $ into grob using CENTER$3x5 with y=5.
( $6...$1 → )
Displays the six strings as menu keys.
General Entries
Addr.
25EA6
25EFD
Name
CheckMenuRow
SetSomeRow
2589A
275FD
DoMenuKeyNS
MenuKey
2F15B
25F2B
3EA01
CLEARMENU
CHECKMENU
(CST)
2C2C0
nCustomMenu
25EFF
SolvMenuInit
Description
( # → # #' )
( #n → )
with Mod(n,FFFFFh)= 0.
( #n → )
( → )
Takes NOB from Runstream.
( → )
( → )
( → ob )
Evaluates ID CST.
( → )
Installs the CST menu.
( → )
Sets MenuKeyNS/LS/RS, ReviewKey and LabelDef properties needed by the Solver menu.
294
Addr.
25EC3
37. The Menu
Name
DoFirstRow
Description
( → )
Sets the first row of the current menu.
Chapter 38
Programming the HP49 Editor
The HP49G has a builtin editor which is much faster and nicer than
the editor on the HP48. However, it is a general-purpose editor, and it would
be useful for specific applications to add some features without having to write
a whole new editor. The HP49G ROM contains a number of supported entry
points which can be used to manipulate the editor from programs. These can
be used to write editor extensions.
38.1
Terminology
The terms below will appear often in this chapter.
Term
EditLine
Cursor position
Current line
Editor window
Selection
Meaning
The string which is currently being edited. Also called
“Buffer” and “Command line”. In the stack diagrams, we
will use $buf for it.
The position of the cursor in the Editline. Represented by
a bint. In stack diagrams, is written as #cpos.
The current line in the editor, i.e. the substring after the
NEWLINE before the cursor up to the next NEWLINE
character.
When the text being edited is too long and/or wide, the
screen of the HP49G shows only a part of the text: the
window. When the cursor is moved, the window must be
re-positioned to show the new position.
A region in the buffer can be selected when the begin
marker and the end marker are active. The selected substring is called $sel in the stack diagrams.
295
296
38. Programming the HP49 Editor
Term
Word-start
Invisible chars
38.2
Meaning
The beginning of a word, a position in a string where the
char before is SPACE or NEWLINE, and the char after is
a non-white character. Several commands deal with wordstart positions, called #ws in the stack diagrams below.
The HP49G can show text in different fonts and styles. In
order to switch between fonts and styles, special markers
are inserted into the text to indicates a change in font or
style. These 3-character sequences are not visible, but they
count in string length and in cursor position. Some Editor
commands are aware of these strings and do complicated
computations to cut and paste text with attributes. This of
course makes these commands slower than they could be.
If you do not use fonts and styles, you need not to worry
about all this.
Examples
For information on the specific entries used in the examples below, consult the Reference section below.
1. Select the current line and copy it onto the clipboard.
1
::
TakeOver
CMD_END_LINE
RCL_CMD_POS
CMD_STO_FIN
CMD_DEB_LINE
RCL_CMD_POS
CMD_STO_DEBUT
CMD_COPY
5
10
(goto end of line)
(recall position)
(store as marker)
(beginning of line)
(recall position)
(store as marker)
(copy to clipboard)
;
This can be done shorter by using the builtin command SELECT.LINE
command. The following is equivalent to the above.
1
::
TakeOver
38.2. Examples
297
SELECT.LINE
CMD_COPY
5
;
2. Insert a “:: ;” template on a single line and position the cursor between
“::” and “;”.
1
::
TakeOver
":: ;"
CMD_PLUS
CMD_BAK
CMD_BAK
5
;
3. Insert a multi-line “:: ;” template and position the cursor with extra indentation on the second line.
1
::
TakeOver
"::\0A\0A;"
CMD_PLUS
CMD_UP
SPACE$
CMD_PLUS
5
(fix indentation to 2 extra spaces)
;
4. Go to next label. Labels are lines starting with “*”.
1
::
TakeOver
"\0A*"
FindStrInCmd
IT
::
DROP
#1+
STO_CURS_POS
;
DROP
5
10
;
(newline followed by star)
(find that)
(if successful)
(drop #end)
(correct to move over NL)
(set new cursor position)
(drop the search string)
298
38. Programming the HP49 Editor
5. The RPLCPL command of the Emacs library (see section A.6) does completion of names in the Editor. It needs to find the word fragment before the
cursor. Here is how this can be done:
1
::
RCL_CMD
RCL_CMD_POS
DUP
GET.W<#1+SWAP
SUB$
5
(recall EditLine)
(current position)
(arg needed by GET.W<-)
(position of word start)
(prepare args for SUB$)
(get the substring)
;
6. Change the indentation of the current line to #N spaces. #N is a bint
expected on stack level 1. The command leaves empty lines and lines
starting with a “*” alone.
1
::
Blank$
CMD_DEB_LINE
RCL_CMD
RCL_CMD_POS
#1+ SUB$1
BINT42
OVER#=case
:: 2DROP
CMD_DOWN
;
BINT32 >#?SKIP
::
CMD_END_LINE
RCL_CMD_POS
CMD_DEB_LINE
DO>Skip
RCL_CMD_POS
#<ITE
DROPRDROP
DoFarBS
;
CMD_PLUS
CMD_DEB_LINE
CMD_DOWN
5
10
15
20
25
;
(make the indentation str.)
(goto beginning of line)
(look at first char in line)
(ASCII code of ’*’)
(line starts with ’*’?)
(cleanup,
)
( next line & exit)
(line starts with nonwhite ch)
(line starts with whitespace:)
(remember end of line position)
(back to beginning of line)
(jump to next word)
(if already in next line: Exit)
(kill whitespc before 1st word)
(insert spaces)
(back to beginning of line)
(next line)
38.3. Executing External Commands in the Editor
38.3
299
Executing External Commands in the Editor
In order to use the new commands in the editor, you must bind them to
a key or put them into a menu. Note that each command you write needs a
TakeOver as the first entry in the secondary or the command will not execute
in the editor.
Here is a simple example for an InputLine environment which defines
an initial menu with two commands to select the current line and to clear the
EditLine. For more information on InputLine, see Chapter 31.
1
5
10
15
20
25
::
"Edit this!"
""
zero
zerozerozero
{
{
"SLINE"
::
TakeOver
SELECT.LINE
;
}
{
"CLEAR"
::
TakeOver
DEL_CMD
;
}
}
ONE
TRUE
ZERO
InputLine
;
(prompt)
(initial string)
(cursor position)
(modes)
(program to select line)
(program to clear EditLine)
(initial menu line)
(abort flag)
(parse)
(and GO!)
300
38. Programming the HP49 Editor
38.4
Reference
38.4.1
Status
Addr.
257A2
Name
EditLExists?
2EEED
NoEditLine?
2F196
RCL_CMD
2EEEB
EDITLINE$
2F197
RCL_CMD2
2EF87
RCL_CMD_POS
26585
CURSOR@
26594
(CURSOR_PART)
2F158
(THISCHAR)
2EEEA
CURSOR_END?
264CC
FIRSTC@
26030
CURSOR_OFF
Description
( → flag )
Does an EditLine exist?
( → flag )
Does no EditLine exist?
( → $ )
Returns a copy of the current command line to
the stack. Same as EDITLINE$.
( → $ )
Returns a copy of the current command line to
the stack. Same as RCL_CMD.
( → $ )
Similar to RCL_CMD, but if there is not enough
memory to copy the EditLine to the stack, it
will move the current EditLine into TEMPOB.
Of course, this will delete the current EditLine.
( → # )
Recalls the current cursor position.
( → # )
Recalls the current cursor position.
( → # )
Recalls the current cursor row (line).
( → chr )
Returns the character under the cursor. At the
end of the file, returns CHR_00.
( → flag )
Checks if the cursor is at the end of a line or at
the end of the file. Works by checking the current character against newline and CHR_00.
( → # )
Column of the left display window edge.
( → # )
Cursor column relative to left edge of display
window.
38.4. Reference
Addr.
2EF91
Name
CAL_CURS_POS
2EF90
CAL_CURS_POS_VIS
2F199
RCL_CMD_MODE
2F198
STO_CMD_MODE
38.4.2
301
Description
( #l #c → # )
Computes a position in the current EditLine
from line and column number. The result can
be used by STO_CURS_POS to move the cursor to that location. If #line is larger than the
number of lines in the EditLine, computes the
position of the last line.
( #l #c → # )
Similar to CAL_CURS_POS, but will ignore invisible characters. The result can be used
by STO_CURS_POS_VIS to move the cursor to
that location.
( → $ )
Recalls a string with current editor settings.
Can be used together with STO_CMD_MODE to
save and restore the state of the EditLine,
when temporarily leaving the editor with HALT
or when calling a program which must temporarily change settings.
( $ → )
Stores a mode string similar to the one obtained by RCL_CMD_MODE.
Inserting Text
Addr.
2EF74
Name
CMD_PLUS
2F194
CMD_PLUS2
Description
( $ → )
Inserts string at current cursor position in EditLine.
( $ → )
Replaces entire current EditLine with new
string. When there is not enough memory to
copy the string on stack level 1, moves the string
out of TEMPOB. You must be careful that the
string is not referenced in any way. The cursor
is moved to the end of the new string.
302
38. Programming the HP49 Editor
Addr.
2F195
Name
CMD_PLUS3
2EF97
InsertEcho
2EEE4
Echo$Key
2F11C
Echo$NoChr00
25EC1
DoDelim
25EC2
DoDelims
25795
INSERT_MODE
2577F
(TogInsert)
25790
INSERT?
38.4.3
Addr.
2EF82
Description
( $ → )
Same as CMD_PLUS2, but the cursor position is
not changed. Useful when restoring a command
line context after HALT.
( $ → )
Inserts string at current cursor position in EditLine.
( $/chr → )
Same as CMD_PLUS.
( $ → )
Inserts string at current cursor position in EditLine.
( → )
Takes a character or string from the runstream
and inserts it.
( → )
Takes a character or a string from the runstream, inserts it and moves the cursor back by
one character.
( → )
Turns insert mode on. In insert mode, new characters do not overwrite old ones.
( → )
Toggles the insert/overwrite flag.
( → flag )
Returns TRUE if insert mode is active.
Deleting Text
Name
CMD_DEL
Description
( → )
Deletes next char in Editor. Same as LS+DEL. If
you hold down BS while this entry is executed, the
HP49G will think you have pressed the key and
want to repeat it.
38.4. Reference
Addr.
2EF81
Name
CMD_DROP
2EF95
DEL_CMD
2EEE7
InitEdLine
2F2F0
DO<Del
2F2F1
DO>Del
2F2F9
DODEL.L
2F2DD
DoFarBS
2F2DE
DoFarDel
303
Description
( → )
Backspace in Editor. Deletes char before cursor.
Same as BS key. If you hold down BS while this
entry is executed, the HP49G will think you have
pressed the key and want to repeat it.
( → )
Clears the entire EditLine.
( → )
:: DEL_CMD ;
( → )
Deletes left to beginning of word. Same as the
←DEL button in the editor TOOL menu.
( → )
Deletes right to beginning of next word, Same as
the DEL→ button in the editor TOOL menu.
( → )
Deletes all chars in the current line. If the line is
already empty, delete the NEWLINE. Same as the
DEL.L button in the editor TOOL menu.
( → )
Deletes to beginning of line.
Same as the
RS+←DEL in the editor TOOL menu.
( → )
Deletes to end of line. Same as RS+Del→ in the
editor TOOL menu.
304
38.4.4
38. Programming the HP49 Editor
Moving the Cursor
Addr.
2EF8B
Name
STO_CURS_POS
2EF8C
STO_CURS_POS2
2EF8D
STO_CURS_POS3
2EF8E
STO_CURS_POS4
2EF8F
STO_CURS_POS_VIS
2F378
SetCursor
Description
( # → )
Stores cursor position. Moves cursor to specified position and if necessary repositions the
editor window to make sure the cursor position
is visible. If it is necessary to scroll the window
horizontally, this command sets the left edge of
the window to the cursor column and shows as
much text as possible to the right of the cursor. However, if the cursor is also visible when
the window edge is moved to column zero, this
position takes precedence.
( # → )
Same as STO_CURS_POS, but moves the right
edge of the editor window to the cursor column.
( # → )
Same as STO_CURS_POS, but without checking for style/font switch sequences. So while
STO_CURS_POS always makes sure the cursor
ends up right before a visible character, this
command allows you to position it within the
invisible escape sequences.
( # → )
Behaves with respect to editor window positioning like STO_CURS_POS2, but with respect
to invisible chars like STO_CURS_POS3.
( # → )
Like STO_CURS_POS, but ignores the invisible
characters. So if you look at your string and
say, I want to go to what I see as the 5th character, use this entry.
( # → )
( {# #'} → )
Sets the cursor to the given position. For the
list argument, the numbers are row and column.
38.4. Reference
Addr.
2EF7C
Name
CMD_NXT
2EF7B
CMD_BAK
2EF80
CMD_DOWN
2EF7F
CMD_UP
2EF7D
CMD_DEB_LINE
2EF7E
CMD_END_LINE
2EF7A
CMD_PAGED
2EF77
CMD_PAGEL
2EF78
CMD_PAGER
2EF79
CMD_PAGEU
2F2EE
DO<Skip
2F2EF
DO>Skip
2F2E4
DO>BEG
305
Description
( → )
Moves cursor to next char, like Right Arrow.
( → )
Moves cursor to the left. Same as as Left Arrow.
( → )
Moves cursor to the next line. Same as Down
Arrow.
( → )
Moves cursor to the previous line, like Up Arrow.
( → )
Moves cursor to the beginning of line. Same as
RS+LEFT.
( → )
Moves cursor to the end of line. Same as
RS+RIGHT.
( → )
Moves cursor one page down, like LS+DOWN.
( → )
Moves cursor one page left, like LS+LEFT.
( → )
Moves cursor one page right, like LS+RIGHT.
( → )
Moves cursor one page up, like LS+UP.
( → )
Skips left to beginning of word. Same as the
←SKIP button in the editor TOOL menu.
( → )
Skips right to the beginning of the next word.
Same as the SKIP→ button in the editor TOOL
menu.
( → )
Goes to begin of selection (if active) or to beginning of EditLine. Same as →BEG button in
the editor TOOL menu.
306
38. Programming the HP49 Editor
Addr.
2F2E5
Name
DO>END
2F2E6
GOTOLABEL
38.4.5
Description
( → )
Goes to end of selection. Same as the →END
button in the editor TOOL menu. When there
is no selection, does not move.
( → )
Brings up the CHOOSE-box with labels in the
EditLine. Same as the LABEL button in the
editor TOOL/GOTO menu.
Selection, Cut and Paste, the Clipboard
Addr.
2EF83
Name
CMD_STO_DEBUT
2EF84
CMD_STO_FIN
2EF85
RCL_CMD_DEB
2EF86
RCL_CMD_FIN
2F2DC
ClearSelection
2EF93
VERIF_SELECTION
2EF8A
CMD_COPY
Description
( # → )
Sets begin marker, like RS+BEGIN, but takes
position from stack.
( # → )
Sets end marker, like RS+END, but takes position from stack.
( → # )
( → #0 )
Recalls the position of the BEGIN marker. If
the selection has been cleared, returns ZERO.
( → # )
( → #0 )
Recalls the position of the END marker. If the
selection has been cleared, returns ZERO.
( → )
Unselects the selected text without changing
the contents of the editor. Sets both begin and
end marker to ZERO.
( → flag )
Returns TRUE when the END marker is not
ZERO, indicating that the selection is active.
Use this command as a check before doing anything with the selection.
( → )
Copies selected string, like RS+COPY.
38.4. Reference
Addr.
2EF88
Name
CMD_CUT
2F2FA
CMD_COPY.SBR
2EF94
PASTE.EXT
2F2E1
SELECT.LINE
2F2E2
SELECT.LINEEND
2A085
(Clipboard!)
2A095
(Clipboard@)
2A0A5
(Clipboard0)
2A0B5
(Clipboard?)
307
Description
( → )
Cuts string. Really is "delete", does not copy to
kill buffer. So a "normal" CUT would be
:: CMD_COPY CMD_CUT ;
( → $ )
Puts the selection as a string on the stack.
This command is font/style aware. It is recommended not to use it because it may get
the wrong text style if the cursor is not repositioned to the beginning of the selection
first. If you don't use fonts,
:: RCL_CMD
RCL_CMD_DEB RCL_CMD_FIN
SUB$ ;
does something similar.
( $ → )
Pastes from stack with treatment of fonts and
styles. Inserts the string on stack level at the
cursor position. It can insert normal text right
in the middle of bold test etc. If you don't use
styles or different fonts, CMD_PLUS is probably
faster.
( → )
Selects current line, position cursor at beginning of line. Selection does not include the
NEWLINE char at the end of the line.
( → )
Selects current line, position cursor at end of
line. Selection does not include the NEWLINE
char at the end of the line.
( $ → )
Stores string to Clipboard.
( → $ )
Recalls Clipboard contents to stack.
( → )
Clears the Clipboard.
( → flag )
Is there anything on the Clipboard?
308
38.4.6
38. Programming the HP49 Editor
Search and Replace
Addr.
2F2F3
Name
GET.W->
2F2F4
GET.W<-
2F2F2
FindStrInCmd
2F2E8
DOFIND
2F2EA
DONEXT
2F2E9
DOREPL
2F2EB
DOREPLACE
Description
( → # )
Returns the position of the next word-start
to the right of the current cursor position.
Note the asymmetry of this command and
GET.W<-.
( # → #' )
Takes a position from the stack and return
the position if the nearest word-start to the
left of that position. Note the asymmetry of
this command and GET.W->.
( $find → $find $start $end T )
( $find → $find F )
Finds a string in the EditLine, starting from
the current cursor position. The search
string remains on the stack, presumably in
order to do repeated searches. Returns the
start and end positions of the match and a
flag. This function respects the setting of the
internal flag for case-sensitive search.
( → )
Same as the FIND menu button in the editor
TOOL/SEARCH menu. Pops up the FIND
input form.
( → )
Finds next. Same as the NEXT button in the
editor TOOL/SEARCH menu.
( → )
Same as the REP button in the editor
TOOL/SEARCH menu. Pops up the REPLACE input form.
( → )
Replaces current match. Same as the R button in the editor TOOL/SEARCH menu.
38.4. Reference
Addr.
2F2EC
DOREPLACE/NEXT
2F2ED
REPLACEALL
2F2FC
REPLACEALLNOSCREEN
38.4.7
Name
309
Description
( → )
Replaces current match and move to next
match. Same as the R/N button in the editor TOOL/SEARCH menu.
( → )
Replaces all matches in buffer. Same as the
ALL button in the editor TOOL/SEARCH
menu.
( → )
Like REPLACEALL, but does not update the
screen. Much faster this way.
Evaluation
Addr.
2F2DF
Name
EditSelect
2F2E3
EVAL.LINE
2F2FB
EVAL.SELECTION
Description
( → )
Edits the current selection. Opens the editor
with the selection only. You can then edit the
selection. After pressing ENTER the edited
text is inserted back into the previous editing
environment.
( → )
Evaluates the current line and replace it
with the result of the evaluation. Similar to
EVAL.SELECTION, but without the need to select the line first.
( → )
Evaluates the current selection and replace it
with the result of the evaluation. Same as the
EXEC button in the editor TOOL menu.
310
38. Programming the HP49 Editor
Addr.
2F2F8
Name
EXEC_CMD
0B954
(RunInNewContext)
38.4.8
Addr.
2EEE9
Description
( cmd algflag → obsel )
Runs a command on the selection in the Editline. Takes two arguments: the command to
run and a flag which says how to compile the
selection before the command is applied. If the
flag is TRUE, and ALG mode in on, the ALG
compiler is used and the DOTAG :: xEVAL
prologue of the result is removed. Use this if
the result is to be edited by another editor. The
selection is left on stack level 1 as an object.
( ob → )
Saves current user interface, evaluate ob and
restore the user interface. Can be used to run
applications from inside another application.
Starting the Editor
Name
EditString
Description
( $ → )
Starts editing the string when the current
program exits. This is the entry to use if
a program should exit with the editor activated. Use InitEdLine before this entry
to clear the editline (if desired) - if not, the
string is inserted into the current editline.
All code after this entry will be executed before control is handed to the editor application. For example:
::
"SOME STRING"
DUPLEN$ SWAP (get length)
InitEdLine (clear the editline)
EditString (string to editline)
STO_CURS_POS2 (cursor at end)
"Starting editor..."
FlashMsg (display before edit)
;
38.4. Reference
Addr.
2F19A
Name
ViewLevel1
2F1AF
AlgObEdit
2B2F2
(CallEditCmd:)
2EEE5
2F1AE
EditLevel1
ObEdit
011004
ˆEQW3Edit
38.4.9
311
Description
( ob → ob' )
Edits the object in level 1
( ob → ob' )
Used instead of ViewLevel1 if in Algebraic
mode. Does not execute STARTED and EXITED.
( ob → ob' )
Evaluates the next object in the runstream,
which usually in an editing command like
ObEdit.
When the evaluation returns
FALSE, the original object which was saved in
a temporary variable is restored to the stack.
When the evaluation returns TRUE, the TRUE
is removed from the stack.
( ob → ob' )
( ob → ob' T )
( ob → F )
Edits object. When the user cancels, only
FALSE is returned. Otherwise the changed
object along with TRUE is returned.
( symb → symb' T )
( symb → F )
Opens the equation editor to edit the expression. If exited by ENTER, returns new expression and TRUE. If exited by CANCEL, returns just FALSE.
Miscellaneous
Addr.
25ED2
Name
EditMenu
2EF73
?Space/Go>
Description
( → {} )
Returns the Editor menu.
( → )
Inserts a SPACE character unless there is already one before the cursor position. Use this
if you want to make sure the next stuff echoed
is separated by at least one space from the
word preceding it.
312
38. Programming the HP49 Editor
Addr.
2EF76
Name
AddLeadingSpace
2EF75
AddTrailingSpace
2EF9A
CommandLineHeight
2F2DB
DOTEXTINFO
2F2F6
GET_CUR_FONT.EXT
2EF96
NO_AFFCMD
2F19E
DispCommandLine
2F19F
?DispCommandLine
Description
( $ → $' )
Adds a leading space to the string on level1 if
it does not start with a space and if the cursor
in the editor is after a non-white character. So
:: "DUP" AddLeadingSpace
AddTrailingSpace CMD_PLUS ;
inserts DUP and makes sure it will be surrounded by spaces.
( $ → $' )
Adds a trailing space to the string on level1
unless the string already ends with a space.
( → #pix )
Returns the number pixel rows occupied by
visible part of the EditLine.
( → )
Displays the info screen about the Editline.
Same as the INFO button in the editor TOOL
menu.
( → # )
Returns the ID (as a system binary) of the
font used for the character under the cursor.
( → )
Tells the next CMD_PLUS call not to update
the display. For speed, if you want to do more
insertion before the user needs to see it.
( → )
Redisplays the command line.
( → )
Redisplays the command line if necessary.
38.4. Reference
Addr.
2F2F7
Name
PUT_STYLE
2F2F5
PUT_FONTE
2F2E7
SELECT.FONT
2F2E0
ViewEditGrob
313
Description
( # → )
Changes the style at point. If the selection
is active, changes the style of the text in
the selection. Otherwise changes the style
of text typed subsequently. Takes a BINT
from the stack which is the number of the
style. In think the ITALI button in the editor
TOOL/STYLE menu could be implemented
with the following program:
:: ERRSET PUT_STYLE
ERRTRAP ERRJMP ;
PUT_STYLE does not ABND its temporary environment, so you need the ERRTRAP construction to work around this bug.
( # → )
Changes the font at point. Works similar to
the PUT_STYLE command.
( → )
Pops up the CHOOSE box to select a font.
Same as the FONT button in the editor
TOOL/STYLE menu.
( → )
at cursor
Views the grob currently edited in the Editline near the cursor. If the EditLine contains
GROB 10 10 FFFFFF...
move the cursor to the "1" of the first "10".
Then this entry point will display the grob.
314
38. Programming the HP49 Editor
Addr.
2EF92
Name
XLINE_SIZE?
27F47
<DelKey
27F9A
>DelKey
27EAF
<SkipKey
27EFB
>SkipKey
2EEE6
InitEd&Modes
2EEE7
InitEdLine
2EEE8
2F05E
InitEdModes
SaveLastEdit
2F326
CMDSTO
Description
( ob → flag )
Checks if the cursor is outside the current
line. In the HP49G editor, you can move
the cursor further to the right than the
line length, without actually making the line
longer. The line gets extended only if you actually insert text or use CMD_DEL to catch to
following line to the position. This entry returns TRUE if it is not on or before the newline. Note that it takes an arbitrary object
from the stack first - so put something there
before calling it.
( → {} )
Returns the ←DEL menu key.
( → {} )
Returns the DEL→ menu key.
( → {} )
Returns the ←SKIP menu key.
( → {} )
Returns the SKIP→ menu key.
( → )
:: InitEdLine InitEdModes ;
( → )
:: DEL_CMD ;
( → )
( $ → )
Calls CMD_STO if history is on.
( $ → )
Adds string to the list of the last 4 commands,
accessible with the CMD key.
Chapter 39
Plotting
The commands in this chapter deal with aspects related to plotting. Entries here deal primarily with the PPAR variable, that contains the parameters
used in plotting. This variable is a list with the following parameters:
{ (xmin , ymin ) (xmax , ymax ) indep res axes type depend}
This is the meaning of each of the parameters:
Parameter
(xmin , ymin )
(xmax , ymax )
indep
res
axes
type
depend
Description
A complex number representing the coordinates of the lower left viewing range.
A complex number representing the coordinates of the upper right viewing range.
The independent variable.
Resolution. A number that represents the
interval between the plotted points.
A complex number that represents the coordinates of the intersection of the axes. It
can also be a list representing this coordinate and many other details, which are not
described in this book.
The name of the (user) command that specifies the plot type.
Dependent variable.
315
Default value
(−6.5, −3.1)
(6.5, 3.2)
X
0
(0, 0)
FUNCTION
Y
316
39.1
39. Plotting
Reference
Addr.
2F162
Name
CHECKPICT
2EF06
CKPICT
2F258
PICTRCL
2F355
MAKEPVARS
2F163
CHECKPVARS
2F33D
GETPARAM
2F0FF
GETXMIN
2F366
PUTXMIN
2F0FE
GETXMAX
2F365
PUTXMAX
Description
( → )
Checks size of GBUFF. If it is smaller than
131x64 sets GBUFF back to its default size
(131x64).
( xPICT → )
Checks for user word xPICT on level 1. Errors
(SETTYPEERR) if there is another object.
( xPICT → grob )
Does CKPICT, then recalls GBUFF and does
TOTEMPOB.
( → {} )
Creates the default PPAR variable in the current directory and returns its value.
( → {} )
Recalls contents of PPAR in current path to
stack. Creates PPAR in current directory if
non-existent. Errors "Invalid PPAR" if existing
PPAR is invalid.
( # → ob )
Extracts the #th item from PPAR. No error
checking!
( → % )
Recalls XMIN from the PPAR list if existent. If
not, the default PPAR is created in the current
directory.
( % → )
Sets a new value for XMIN. PPAR is created if
necessary.
( → % )
Recalls XMAX from the PPAR list if existent. If
not, the default PPAR is created in the current
directory.
( % → )
Sets a new value for XMAX. PPAR is created if
necessary.
39.1. Reference
Addr.
2F100
Name
GETYMIN
2F368
PUTYMIN
2F10E
GETYMAX
2F367
PUTYMAX
2F107
GETPMIN&MAX
2EEF2
PUTINDEP
2EEF3
PUTINDEPLIST
2F0E8
INDEPVAR
2F106
GETINDEP
2EEF5
GETPTYPE
2EEF6
PUTPTYPE
2F10D
GETRES
2EEF4
PUTRES
2F33E
GETSCALE
317
Description
( → % )
Recalls YMIN from the PPAR list if existent. If
not, the default PPAR is created in the current
directory.
( % → )
Sets a new value for YMIN. PPAR is created if
necessary.
( → % )
Recalls YMAX from the PPAR list if existent. If
not, the default PPAR is created in the current
directory.
( % → )
Sets a new value for YMAX. PPAR is created if
necessary.
( → C% C% )
Returns PMIN and PMAX.
( ID → )
Internal xINDEP if the arg is an ID.
( {} → )
Internal xINDEP if the arg is a list.
( → id )
Recalls the independent variable. If a list, extract first element.
:: GETINDEP DUPTYPELIST? ?CARCOMP ;
( → id )
( → {} )
Recalls the independent variable field in PPAR.
( → name )
Recalls the plot type using GETPARAM.
( name → )
Sets a new plot type. PPAR is created if necessary.
( → % )
Recalls the plot resolution using GETPARAM.
( % → )
Set new plot resolution. PPAR is created if necessary.
( → % %' )
Recalls the plot scale parameters.
318
39. Plotting
Addr.
2EEF1
Name
PUTSCALE
2EEEF
AUTOSCALE
2EF60
DOGRAPHIC
25ECF
EQUATION
2F339
GetEqN
25EB5
DORCLE
25EB6
DOSTOE
2F297
XEQPURGEPICT
2F105
GDISPCENTER
2EF01
DOPX>C
2EF02
DOC>PX
Description
( % %' → )
Set new plot scale. PPAR is created if necessary.
( → )
Internal AUTO.
( → )
Sets the scroll mode of PICTURE and is essentially the same as { } PVIEW.
( → ob )
Recall the current equation, stored in the 'EQ'
variable.
( #n → ob T )
( #n → NULL$ F )
Get the #nth equation, if EQ is a list of equations.
( → ob )
Recalls the contents of the EQ variable, errors if
it does not exist.
( ob → )
Stores ob into the variable EQ.
( xPICT → )
If object in level one is xPICT, erases the graphic
display. Otherwise, errors.
( → )
Moves to center of graphics display
( { hxs hxs' } → C% )
Converts a list of two hex strings into a complex
number. Used for plotting coordinates. Inverse
operation is DOC>PX.
( C% → { hxs hxs' } )
Converts a complex coordinate point into list
of two HXS numbers. Inverse operation is
DOPX>C.
Part IV
The HP49
CAS
Chapter 40
Introduction to the HP49 CAS
One of the major innovations in the HP49G is the powerful built-in
Computer Algebra System (CAS). The HP49G CAS is derived mainly from the
ALG48 and ERABLE libraries, originally written for the HP48 calculators. But
on the HP49G, the CAS is fully integrated into the operating system, so that
User RPL operators transparently access the CAS if the arguments require it.
A huge number of supported entry points give access to the internal commands
of the CAS, enabling users to write their own programs and commands dealing
with symbolic objects, matrices and infinite precision integers.
40.1
Problems with These Chapters
The initial version of the reference listing of CAS commands for this
book was derived from the source files1 of ALG48 and ERABLE. The problem
with this approach is that in the source, the different entries are not fully ordered according to functionality. Rather, each source file handles a certain area
of CAS commands, and many utility routines are included inside the same file.
For this reason there are several different locations where for example metaobject handling routines may be found. There are even similar such routines
(which seem to do the same thing) in different files. We have made a significant
effort to reorder the entries by functionality, but we realize that we have only
partially succeeded. A deeper knowledge of the CAS and its internals is needed
to complete this work.
A full documentation of the CAS should also contain extensive material
about the internal representation of CAS objects, and many examples how to
use these commands. Let us hope that Bernard Parisse will one day find time
to fully document the HP49G CAS internals. For the time being we include a
slightly edited version of a document he provided to us, which introduces some
important aspects of the CAS. The reminder of this part will then just be a
reference list of entries.
1
actually, from a condensed version of the routine headers provided to us by Bernard Parisse
321
322
40.2
40. Introduction to the HP49 CAS
Symbolic Objects
The CAS manipulates symbolic scalars and vectors or matrices of these
objects. Symbolic scalars have 3 representations, which we show in the following table using ‘2X’ as an example expression.
user representation
meta representation
list representation
a SYMBOL object which is the composite object. For
the example expression it looks like this:
SYMBOL Z2 ID X x* ;
the SYMBOL object exploded onto the stack. For
'2*X', these are the 4 objects Z2 ID X x* #4 on stack
levels 4 to 1.
polynomial coefficients (in the example: { 2 0 })
with respect to the list of variables ({ X }).
Conversion from user to meta representation is done by SYMBINCOMP (a
generalized INNERCOMP to handle non symbolic objects like integers).
Meta representation is used to handle operations when rational normal form is not relevant. It is more efficient than symbolic representation
because you do not have to explode and rebuild the symbolic objects, everything is done on the stack. Stack operations on metas are described in Chapter 12. Unary and binary operators are often the operator name prefixed by
addt (e.g. addtSIN). An example for a complex routine working on meta objects is CASCOMPEVAL. It does a COMPEVAL-like loop but with metas on the
stack instead of symbolics.
The list representation is used when the rational normal form is important. This is the case for integration of rational fractions, rational simplifications, Laplace transformations, series expansions and similar operations. The
first step for the conversion is to find the list of variables with respect to which
the expression is rational. For example,
sin(x) + y
cos(x) + y
(40.1)
is rational with respect to { sin(x) cos(x) y }. Given a symbolic or a
list/array of symbolic objects, the user word LVAR, or the System RPL command LVARext, returns this list of variables. The conversion is then done as
a quotient of 2 multivariate polynomials with respect to this list of variables,
with this ordering.
Gaussian integers are represented as secondaries with two elements:
40.3. A Few Examples
323
:: imaginary_part real_part ;. The imaginary and real parts must be
integers.
Square roots are represented as irrquad: :: x« a b c x» ; represents a+b*sqrt(c).
Polynomials are defined as a list of coefficients that are polynomials
themselves, constants (integer or Gaussian integer) or irrquads. Rational fractions built over these polynomials are represented as SYMBOL num deno x/
; where num and deno are polynomials that are prime together (in exact mode).
The main conversion routine to the list format is VXXLext. The main
back conversion routine is R2SYM. There are several specialized routines to
convert a list or meta of symbolic objects, or to convert a symbolic object into
meta-representation, or from list format to the meta-representation of a symbolic object. These specialized routines are more efficient but more difficult to
use.
Rational operators on list objects are implemented (QAdd, QSub, QDiv,
QMul, QNeg, RPext), as well as Euclidean divisions with specializations e.g. for
integers or Gaussian integers.
40.3
A Few Examples
In the following examples, the comments in each line represent the objects on the stack after the current command.
Rational simplification of a symbolic object might be coded as
1
5
::
FPTR2 ^LVARext
FPTR2 ^VXXLext
FPTR2 ^R2SYM
;
(symb)
(symb lvar)
(lvar n/d)
(symb)
The scalar product of 2 symbolic vectors in “list form”
1
5
::
(x y)
INNERCOMP #1+ROLL INNERCOMP
DUP#1= casedrop FPTR2 ^QMul
get1
(y1,...,yn-1,x1,...,xn,#n,yn)
ROTSWAP PTR2 ^QMul
(y1,...,yn-1,x1,...,xn-1,#n,xn*yn)
OVER ONE_DO
ROT 3PICK #2+PICK
324
40. Introduction to the HP49 CAS
FPTR2 ^QMul
FPTR2 ^QAdd
LOOP
10
(y1, ..., yn-1, #n, X.Y)
OVER #1+UNROLL #1- NDROP
;
Chapter 41
Type Checking and Conversion
The entries in this chapter are used to check for the special CAS objects
described in Chapter 40, and to convert between this different kinds of objects.
41.1
Reference
Addr.
157006
Name
ˆSYMBINCOMP
12A006
ˆ2SYMBINCOMP
4D7006
ˆVXXLext
400006
ˆR2SYM
4D8006
ˆMETALISTVXXL
4D9006
ˆVXXLFext
Description
( symb → ob1 .. obN #n )
( ob → ob #1 )
( {} → {} #1 )
Explodes symbolic object into meta. Other objects are converted into one-object metas by
pushing #1 into the stack.
( ob1 ob2 → meta1 meta2 )
Does ˆSYMBINCOMP for 2 objects.
( ob Lvar → Q )
Converts object to internal form. The object
can be a symbolic, a symbolic vector or a symbolic matrix. If the conversion was not successfull, vxxxlflag is cleared.
( lvar ob → ob )
Back conversion of a scalar object.
( Meta → Meta )
Conversion of all elements of a meta object
with respect to the variables in LAM1.
( n/d → Z1/Z2 )
Conversion of a fraction which does not depend on any variables.
325
326
41. Type Checking and Conversion
Addr.
4DA006
Name
ˆVXXL1ext
4DB006
ˆVXXL0
4DC006
ˆVXXL2NR
4DD006
ˆVXXL2
167006
ˆTYPEIRRQ?
168006
ˆDTYPEIRRQ?
177006
ˆCKMATRIXELEM
18F006
ˆCKFPOLYext
190006
ˆCK2FPOLY
19E006
ˆCLEANIDLAM
Description
( n → Z )
Conversion of an object which does not depend on any variables.
( ob → Q )
Conversion of object with respect to Lvar in
LAM1.
( Meta → Q )
Converts symbolic meta to internal form
(LAM1=Lvar). Set nocareflag to avoid square
root problems.
( Meta → Q )
Converts symbolic meta to internal form
(LAM1=Lvar).
( ob → flag )
Is ob an irrquad?
( ob → ob flag )
DUP, then ˆTYPEIRRQ?.
( ob → ob )
Checks that ob is a valid internal matrix element. Look for CK[]NCK for user matrix element.
( ob → ob )
Errors if list contains secondaries or empty
lists.
( ob ob → ob ob )
Does CKFPOLYext on two objects.
( ob → ob )
Suppresses SYMB if not needed.
Chapter 42
Integers
This chapter lists the functions that deal with Arbitrary Precision Integers, a new number type provided by the HP49 CAS. For a description of that
type, see Chapter 5.
You will notice that there are no entries for basic arithmetic operations
on integers. This is because there are no specific such entries for integers. Instead, use the polynomial entries like ˆQAdd, ˆQMul, etc. listed in Chapter 46.
42.1
Reference
42.1.1
Built-in Integers
Addr.
2E0006
2DF006
392006
3B3006
Name
ˆDROPZ0
ˆDROPZ1
ˆ2DROPZ0
ˆNDROPZ0
3B4006
ˆNDROPZ1
42.1.2
Description
( ob → z0 )
( ob → z1 )
( 2 1 → z0 )
( obn...ob1 #n → z0 )
Replaces meta with Z0.
( obn...ob1 #n → z1 )
Replaces meta with Z1.
Conversion Functions
Addr.
0EE006
Name
ˆ#>Z
0F5006
ˆR>Z
Description
( # → Z )
Converts bint to zint.
( % → z )
Converts real to zint. Do not call this entry if
the number if not an integer.
327
328
42. Integers
Addr.
18D006
Name
ˆR2Zext
0ED006
ˆH>Z
0F2006
ˆS>Z
0F3006
ˆS>Z?
184006
ˆCK1Z
185006
ˆCK2Z
186006
ˆCK3Z
202006
ˆCK&CONVINT
203006
ˆCK&CONV2INT
205006
204006
0F4006
ˆCONVBACKINT
ˆCONVBACK2INT
ˆZ>ZH
18E006
ˆZ2Sext
Description
( % → %%/Z )
Converts real to zint, or to long real if the
number is not an integer. mode if number is
not an integer.
( HXS → Z / Error )
Checks if HXS is a proper zint number and
trims it.
( $ → z )
Converts decimal in a string into a zint.
( $ → z T )
( $ → $ F )
If possible, converts string into a zint and returns TRUE. If not, keeps the original string
and returns FALSE.
( $/#/hxs → Z )
Checks for an integer. Converts strings, bints
or hxs's to zints. Errors for other object types.
( ob ob' → Z Z' )
Like ˆCK1Z, but for two objects.
( ob ob' ob'' → Z Z' Z'' )
Like ˆCK1Z, but for three objects.
( symb → zint )
( symb → :: zint zint' ; )
Check that a sym is a zint or Gauss integer,
convert it.
( symb symb' → zint zint' )
( symb symb' → :: zint1 zint2 ; ::
zint3 zint4 ; )
Check that 2 sym are zint or Gauss integer,
convert them.
( zint|c → symb )
( zint|c zint|c → symb symb )
( Z → Z' )
Converts decimal Z to hex Z.
( Z → '$Z' )
Converts Z to string number. The number is
embedded in a symbolic to enable using it in
algebraics.
42.1. Reference
42.1.3
329
General Integer Operations
Addr.
101006
Name
ˆZTrim
102006
ˆZAbs
50B006
ˆZABS
0E0006
ˆZSQRT
3D0006
ˆMod
0DD006
105006
ˆZMod
ˆZNMax
106006
ˆZNMin
10D006
ˆZBits
10E006
ˆZBit?
2B7006
ˆZGCDext
2B8006
ˆZGcd
Description
( Z → Z' )
Strips Z from unnecessary leading nibbles. Counts
nibbles required for representation. If that equals
used nibbles then quick exit. Else allocates new
object, copies significant mantissa nibbles and
apends original sign.
( Z → |Z| )
Takes the absolute value of Z. If Z is already positive then does nothing. Else duplicate object and
change sign.
( Z → Z' )
Absolute value.
( Z → Z' flag )
Calculates integer part of square root. If the number was a square, then flag is TRUE to indicate that
the returned result is exact.
( Z Zn → Z' )
Make Z modulo N.
( Z1 Z2 → Z' )
( Z1 Z2 → NormMax[Z1,Z2] )
Returns the integer with the greatest absolute
value. (Returns Z1 if |Z1|≥|Z2|; returns Z2 if
|Z1|<|Z2|).
( Z1 Z2 → NormMin[Z1,Z2] )
Returns the integer with the smallest absolute
value. (Returns Z1 if |Z1|≤|Z2|; returns Z2 if
|Z1|>|Z2|).
( Z → Z #bits )
Calculates number of bits used in Z.
( Z #bit → Z flag )
Tests if a bit in Z is set. Count starts from zero, as
opposed to ZBits.
( Z2 Z1 → Z )
Integer GCD.
( Z2 Z1 → Z )
This is the same entry as ZGCDext.
330
42. Integers
Addr.
3D6006
Name
ˆIEGCDext
3D9006
07C007
ˆINEGCD
ˆ#FACT
576006
ˆfactzint
215006
ˆPA2B2
42.1.4
Description
( a b → d u v )
Bezout for integers. d=au+bv=gcd(a,b).
( a b → d u v )
( # → Z )
Calculates the factorial of an integer. Works fine
for all numbers #0 - #FFFFF, although at some
point you will get an out of memory error.
( z → z! )
Factorial for long integers.
( z/% → a+bi )
Internal PA2B2.
Integer Factorization and Prime Numbers
Addr.
0C9006
Name
ˆZFactor
0CA006
ˆNFactor
0CB006
ˆNFactorSpc
0CD006
ˆSFactor
Description
( Zs → Lf )
Factors signed long integer.
( z → {} )
Factors positive long integer.
( z → {} )
Semi-factors positive long integer. This is
regular factorization with an extra 'hopeless?'
test.
( S → Lf )
Factors short integer. Pollard Rho, with the
assumption that trial division has been done
already. Thus any factor less than 4012009
is known to be a prime, for greater factors a
primality test is used before calling the actual
Pollard Rho. Pollard Rho does not find the
factors in order of magnitude, thus the results
will be sorted after full factorization has been
achieved.
42.1. Reference
Addr.
0CE006
Name
ˆSPollard
0CF006
ˆBFactor
0D0006
ˆBrentPow
0D1006
ˆZPrime?
0D2006
ˆZIsPrime?
331
Description
( S → S1 S2 )
Factors short integer into 2 parts using Pollard Rho algorithm. Trial division and primality tests should be done prior to calling
this subroutine, otherwise an eternal loop is
risked. The random number generator is
modeled after the user level RAND command,
although the starting value is different.
( N → Lf )
Factors long integer. Brent-Pollard, with
the assumption that trial division has been
done already. When a small factor is found
SFactor is called to get full short factorization. Since the factorization can potentially
take a very long time, an execution time test
is used to abort factoring very long integers
(limit is 60s for each composite). The factors
are sorted at exit.
( Za Z1 Z2 Zn #k → Z )
Modular * + ˆ mod for Brent-Pollard factorization. Output is Z1*Z2+Za mod Zn repeated k
times Note that k=0 and k=1 give the same
result. Also Z1=Z2 makes no sense for k=0.
All arguments are assumed to be positive. Za
is assumed to be < 16. In some instances
k can be a very high number, thus it might
make sense to use Montgomery multiplication.
( Z → flag )
Primality test for a positive integer. According to Pinch commercial software packages
use only about 5-10 bases by default, maximum around 25. The latest versions usually
implement a deterministic.
( Z → flag )
Probabilistic primality test for a positive integer.
332
42. Integers
Addr.
0D3006
Name
ˆSIsPrime?
0D4006
ˆBIsPrime?
0D5006
ˆBRabin
0D6006
ˆZTrialDiv2
0D7006
ˆZTrialPrime?
0D8006
ˆZTrialDiv
0C7006
ˆPrime+
0C8006
ˆPrime-
Description
( S → flag )
Tests if positive short Z is prime. M-R test
fails for integers ≤ 3, so we just test them
separately at the start. For convenience lets
define 0 and 1 to be primes also.
( S → flag )
Test if positive long Z is prime.
( Z #base → Z flag )
Performs Miller-Rabin test for long positive
integer. Returns TRUE if base witnesses composite. Else returns FALSE.
( Z → Z' #n )
Remove factors of 2 from integer. #n is the
power of two extracted from the number. The
sign is also handled correctly, even though it
is never required in ALG48 (absolute Z).
( Z → flag )
Trial division primality test for a positive integer. works for Z ≥ 3 (return false for Z=2).
( Z → Mf Z' )
Trial division of a positive integer. If Z' is one
then full factorization was achieved. The long
trial division is not too slow, since division by
short integer is quite fast. The quotient is
also checked so that a final factor less than
2000ˆ2 will also be automatically detected.
( Z → Z' )
Returns next prime ( Z' > Z ).
( Z → Z' )
Returns previous prime ( Z' < Z ).
42.1. Reference
42.1.5
333
Gaussian Integers
Addr.
114007
Name
ˆTYPEGAUSSINT?
115007
ˆDTYPEGAUSSINT?
116007
ˆDUPTYPEGAUSSINT?
187006
ˆCK1Cext
15D006
ˆCXRIext
2B5006
ˆCGCDext
4D5006
ˆCSQFFext
4D4006
ˆSECOSQFFext
4D6006
ˆSUMSQRext
518006
ˆCNORMext
Description
( ob → flag )
Checks if ob is Gaussian integer.
( ob → ob flag )
Checks if ob is Gaussian integer.
( ob → ob flag )
Checks if ob is Gaussian integer.
( ob → flag )
Checks if object is integer or Gaussian integer.
( C → Zre Zim )
Returns real and imaginary part of Gaussian integer.
( C2 C1 → C )
GCD for Gauss integers.
( C → { factor1 mult1 ... factn
multn } )
Factorization of Gauss integers. This is not
the complete factorization of C over Gauss
integers since the GCD of the real part and
imaginary part of c is factored only over R.
( :: x<< a b c x>> → { fact1
mult1 ... factn multn } )
Factorization of irrquads and Gauss integers.
( Z → Z C )
Returns a Gauss integer C so that |C|ˆ2=Z.
Z must be 2 or so that Z=1 mod 4. If Z = 1
mod 4, "Z is not 1 mod 4" error. Z should be
prime to ensure the existence of a solution.
( C → |C|ˆ2 )
Square modulus of a Gauss integer.
334
42.1.6
42. Integers
Integer Tests
Addr.
265C1
265C6
265BC
265D0
265B7
265CB
0F8006
Name
Z=
Z<>
Z<
Z<=
Z>
Z>=
ˆQIsZero?
0F7006
ˆDupQIsZero?
0FA006
ˆZIsOne?
0F9006
ˆDupZIsOne?
109006
ˆDupZIsTwo?
0FC006
ˆZIsNeg?
0FB006
ˆDupZIsNeg?
10A006
ˆDupZIsEven?
107006
ˆZNLT?
19A006
ˆOBJINT?
19B006
ˆOBJPOSINT?
19C006
ˆCKINT>0
198006
ˆMETAINT?
Description
( Z Z' → flag )
( Z Z' → flag )
( Z Z' → flag )
( Z Z' → flag )
( Z Z' → flag )
( Z Z' → flag )
( Q → flag )
Tests if Q is zero. Assumes list contains only
lists or hexes!.
( Q → Q flag )
Duplicates Q and tests if Q is zero. Assumes
list contains only lists or hexes!.
( Z → flag )
Tests if Z is Z1.
( Z → Z flag )
Duplicates Z, and returns TRUE if Z is 1.
( Z → Z flag )
Returns TRUE if Z is 2.
( Z → flag )
Tests if Z is negative.
( Z → Z flag )
Tests if Z is negative.
( Z → Z flag )
Tests if Z is even.
( Z1 Z2 → flag )
TRUE if |Z1|<|Z2|.
( z/% → z flag )
Tests if Obj is an integer.
( z/% → z flag )
Tests if Obj is a positive integer smaller than
Zsmall.
( Obj → Obj flag )
Tests if Obj is a strictly positive integer.
( Meta → Meta flag )
Tests if Meta is an integer.
42.1. Reference
Addr.
199006
Name
ˆMETAPOSINT?
0CC006
ˆDupTypeS?
335
Description
( Meta → Meta flag )
Tests if Meta is a positive integer smaller than
Zsmall.
( Z → Z flag )
Tests if Z is short (≤ 64 bits).
Chapter 43
Matrices
The CAS’ Symbolic Matrices are a new object on the HP49 used to represent matrices. Unlike the old array object present since the HP48, these
matrices can have symbolic expressions inside them. It is also possible to have
objects of different types inside the array.
This kind of matrix is actually a composite object, and you can use the
functions of Chapter 11 on them.
1 2
The following disassembly of the matrix
should make it clear
3 4
how to create one using MASD, and why they are actually composites:
1
5
10
MATRIX
MATRIX
ZINT
ZINT
;
MATRIX
ZINT
ZINT
;
;
1
2
3
4
It should also be noted that most (if not all) the functions described
below for dealing with symbolic matrices also work with lists of lists. The
reason should be obvious: the structure of these matrices and a list of list is
the same, only the prolog address changes.
Some entries dealing with the old HP48 arrays, described in Chapter 10.1, also work with symbolic matrices.
336
43.1. Reference
337
43.1
Reference
43.1.1
Creating and Redimensioning Matrices
Addr.
371006
Name
ˆMATIDN
372006
ˆMATCON
373006
ˆMAKEARRY
345006
ˆDIMRANM
344006
ˆMATRANM
374006
ˆOBJDIMS2MAT
375006
ˆLCPROG2M
376006
ˆMAKE2DMATRIX
377006
ˆmake2dmatrix
341006
ˆMATREDIM
Description
( M/z/% → M' )
Creates identity matrix.
( M ob → [ob] )
Creates constant matrix from matrix.
( {#el} symb → [] )
( {#rows #cols} symb → [[]] )
Creates constant matrix/array from ob type.
( {} → M' )
Creates symbolic random matrix from dimensions.
( M → M' )
Changes all elements of matrix to elements
generated randomly.
( ob {} → M )
Creates constant matrix from dimension and
ob.
( #n #m prg → M )
Fills a matrix of specified size using a program. prg must take two arguments and return one argument. On entry MAKE2DMATRIX
provide the indexes as Z integers.
( #n #m prg → M )
Creates matrix from size and program (with
stack checking). prg must take 2 args and return 1 arg. On entry MAKE2DMATRIX provide
the indexes as Z integers.
( #n #m prg → meta-M )
Create meta-matrix from size and program
(with stack checking). prg must take 2 args
and return 1 arg On entry make2dmatrix
provide the indexes as Z integers.
( M {} → M' )
Changes size of a matrix, removing elements
and/or adding zeros, as necessary.
338
43. Matrices
Addr.
342006
Name
ˆVRRDM
343006
ˆVRRDMmeta
43.1.2
Description
( []/[[]] {} → [] )
Vector Right ReDiMension: adds 0 to the
right.
( meta #l → meta-#l )
Meta Right ReDiMension: adds 0 to the right.
Conversion
Addr.
16A006
Name
ˆ{}TO[]
17A006
ˆLIST2MATRIX
16B006
ˆ[]TO{}
179006
ˆMATRIX2LIST
17E006
ˆARRAY2MATRIX
175006
ˆSAMEMATRIX
176006
ˆSAMEMATSCTYPE
003007
ˆArryToList
Description
( {} → [] )
Converts from list-of-lists representation to
matrix. No checks on the element type.
( {} → [] )
( {{}} → [[]] )
( ob → ob )
Converts a symbolic list to a matrix. Does
not check that matrix is a valid one. Use
DTYPFMAT? to do that.
( [] → {} )
Converts from matrix to list-of-lists.
( [] → { } )
( [[]] → {{}} )
( ob → ob )
Converts a symbolic matrix to a list.
( [] → [] )
( [[]] → [[]] )
Converts array to symbolic array if necessary.
( M1 M2 → M1 M2 flag )
If one object is a symbolic array, converts both
arrays to symbolic form. Returns TRUE for
symbolic matrices and FALSE for numeric.
( M ob → M ob flag )
If M is a numeric matrix and ob is not float,
converts matrix to symbolic form. Returns
TRUE for symbolic and FALSE for numeric.
( []/[[]] → {}/{{}} )
Converts normal array to list of lists; errors
for symbolic arrays.
43.1. Reference
Addr.
17D006
43.1.3
339
Name
ˆMATEXPLODE
Description
( [[ob1..obn]] → ob1..obn
[[ob1..obn]] )
Tests
Addr.
16C006
Name
ˆDUPNULL[]?
359006
ˆNULLVECTOR?
16F006
ˆCKSAMESIZE
170006
ˆDTYPENDO?
173006
ˆ2DMATRIX?
43.1.4
Description
( ob → ob flag )
Tests for a null array.
( V → flag )
Returns true if vector is null.
( arry1 arry2 → arry1 arry2 flag )
Tests if arry1 and 2 have the same size.
( ob → ob flag )
Tests if object is a square symbolic matrix.
Convert numeric array to symbolic matrix.
( ob → ob flag )
Tests if object is a 2D matrix.
Calculations with Matrices
Addr.
320006
321006
322006
323006
324006
325006
326006
Name
ˆMAT+
ˆMADD
ˆMATˆMSUB
ˆVADD
ˆVSUB
ˆMAT*
327006
328006
ˆMMMULT
ˆMVMULT
329006
ˆSCL*MAT
32A006
ˆMAT*SCL
Description
( M2 M1 → M2+M1 )
( M2 M1 → M2+M1 )
( M2 M1 → M2-M1 )
( M2 M1 → M2-M1 )
( V2 V1 → V2+V1 )
( V2 V1 → V2-V1 )
( M2 M1 → M2*M1 )
Matrix product with size and type checking.
( M2 M1 → M2*M1 )
( M V → V' )
Product of matrix by vector.
( ob M → M*ob )
Scalar times matrix.
( M ob → M*ob )
Matrix times scalar.
340
43. Matrices
Addr.
32B006
Name
ˆVPMULT
335006
32C006
ˆMATSQUARE
ˆMATˆ
32D006
ˆMATCROSS
32E006
ˆMATDOT
32F006
ˆRNDARRY
330006
ˆTRCARRY
332006
ˆMAT/SCL
333006
ˆMAT/
334006
34E006
336006
337006
338006
339006
ˆMATCHS
ˆMATINV
ˆMATCONJ
ˆMATRE
ˆMATIM
ˆMATTRACE
33A006
ˆMATTRN
33C006
ˆmattran
33D006
ˆmattrn
346006
ˆMATDET
347006
ˆMATRDET
348006
ˆMATFNORM
349006
ˆMATRNORM
Description
( V ob → V' )
Multiplies vector by a scalar.
( M → M*M )
( M z/% → M' )
Integral matrix power.
( [] []' → []'' )
Vector product.
( V2 V1 → ob )
Scalar product with checking.
( M % → M )
Rounds array.
( M % → M )
Truncates array.
( M ob → M/ob )
Divides matrix by scalar.
( V M → Mˆ-1*V )
"Divides" Vector by matrix.
( M → -M )
( M → Mˆ-1 )
( M → M' )
( M → re[M] )
( M → im[M] )
( M → trace )
Matrix trace.
( M → M' )
Matrix transposition and conjugation.
( M → Meta-M' )
Transposes matrix, returns meta-matrix.
( Meta-M → Meta-M' )
Transposes meta-matrix.
( M → det )
Determinant, expanding all (not row reduction).
( M → det )
Determinant using row reduction.
( M → ob )
Frobenius norm.
( M → ob )
Row norm.
43.1. Reference
Addr.
34A006
Name
ˆMATCNORM
174006
ˆMATRIXDIM
43.1.5
341
Description
( M → ob )
Column norm.
( ob → # )
Returns symbolic matrix dimensionality of an object.
Linear Algebra and Gaussian Reduction
Addr.
34C006
Name
ˆMATREF
34B006
ˆMATRREF
34F006
ˆMATREFRREF
367006
ˆMATRIXRCI
368006
ˆMATRIXRCIJ
350006
351006
ˆINXREDext
ˆMETAMATRED
352006
ˆMETAPIVOT
354006
34D006
ˆPIVOTFLOAT
ˆMATRANK
Description
( M → M' )
Returns matrix in Row-Echelon form.
( M → M' )
Returns matrix in Reduced Row-Echelon form.
( M #full_ref → M list M' )
If #full_ref is 1, returns Reduced Row-Echelon
form, otherwise returns just Row-Echolong
form.
( ncol i M const → M' )
Multiplies row #i of symbolic matrix M by constant. ncol is not used, it's here because of the
stack state at call-time from inside laRCI.
( ncol #i #j M const → M' )
Does Lj <- c*Li+Lj. ncol is not used, it's here because of the stack state at call-time from inside
laRCI.
( Lvar #full_ref M → Lvar pivot M )
( Meta-M Lvar #full_red → meta-M
Lvar pivot )
( meta-M #l #c → meta-M #l #l' #c'
flag )
Searchs a pivot in column #c starting from row
#l. Flag is FALSE if pivot is not found. If pivot is
found #l' is the row, #c is updated to #c'.
( float → float_modulus )
( M → Z/% )
Rank of a matrix.
342
43.1.6
43. Matrices
Linear System Solver
Addr.
080007
Name
ˆLINSOLV
0F4007
ˆSOLVEMETASYST
0F5007
ˆREDUCEMETASYST
0F6007
ˆREDUCEMETAPSYST
0F7007
ˆSOLVECRAMER
355006
356006
357006
ˆSYSText
ˆSTOSYSText
ˆMAKESYSText
43.1.7
Addr.
35A006
Description
( b a → y )
Solves y'=ay+b.
( meta-M → d meta-sol T )
( meta-M → F )
Solves linear system in meta representation.
Meta-sol has been reduced to the same denominator d.
( meta-M → meta->M' )
Reduces linear system in meta representation.
( meta-M → meta-M' )
Reduces linear system in meta representation. Does not reduce last column of metamatr. This is useful to solve linear system
with parameters in the last column.
( meta-M → d meta-sol T )
( meta-M → F )
Solves cramer system. Meta-matr must be
fully reduced. Meta-sol is reduced to the
same denominator. d flag is FALSE if dimension do not match.
( M linc → linc linc' res cas_p )
( M2 M1 → M2 list )
( M_eq M_inc → M_eq M lidnt flag )
Converts linear equations to a matrix and
checks that equation are linear with respect
to lidnt.
Other Matrix Operations
Name
ˆFINDELN
Description
( {} A → # flag )
Returns index # of element {} in array.
43.1. Reference
Addr.
35B006
Name
ˆPULLEL[S]
35C006
ˆBANGARRY
35D006
ˆPUT[]
17B006
ˆLENMATRIX
33E006
ˆMATSUB
340006
ˆMATREPL
35F006
ˆMATRIX>DIAG
360006
ˆMATRIXDIAG>
361006
ˆla+ELEMsym
362006
ˆINSERTROW[]
363006
ˆinsertrow[]
343
Description
( A # → A el )
Extracts element of index # from array. Array
type test is made in assembly for array speed.
( el # M → M' )
Puts el at index # of matrix M.
( el #i V → V )
Replaces #i-th vector component by element.
( [] → #el )
( [[]] → #row )
( M rmin nrows cmin ncols { #m #n }
→ M' )
Extracts submatrix from a matrix.
( M1 M2 → M2' )
Replaces part of matrix destination (M2) by
matrix source (M1). LAM1 to 9 must be
bound like in Llib/LIMain.s ( 9:r 8:c 7:dmat?
6:f 5:md 4:nd 3:smat? 2:ms 1:ns ). Copy begins in matrix d at row r and column c.
( A ncols+1 ndiags → V )
Extracts diagonal terms. ncols+1 is there
because MATRIX>DIAG is called inside
la>DIAG.
( ncol+1 diagV dlen dims{} → M )
Constructs a matrix from a vector of diagonal
terms.
( V ob %i → V' )
Inserts element in symbolic vector at row %i.
( V ob #i → V )
( M V #i → M' )
Inserts element/vector in symbolic vector/matrix at row #i. Checks for 0 < #i < #n
+ 1, but does not check for matrix/vector size.
( ob #i meta → meta )
Inserts element/vector in meta-object at position #i. Checks for 0 < #i < #n + 1, but does
not check for vector size.
344
43. Matrices
Addr.
364006
Name
ˆINSERTCOL[]
365006
ˆINSERT[]ROW[]
366006
ˆINSERT[]COL[]
369006
ˆMATRIXCSWAP
36A006
ˆMATRIXRSWAP
0AC003
ˆSWAPROWS
36B006
ˆMATRIX-ROW
36C006
ˆMETAMAT-ROW
36D006
ˆMATRIX-COL
36E006
ˆMETAMATCSWAP
36F006
ˆMETAMATRSWAP
370006
ˆSTOMAText
Description
( M V #i → M' )
Inserts vector in symbolic matrix at col #i.
Checks for 0 < #i < #n + 1, but does not check
for matrix/vector size.
( M3 M2 #i → M )
Inserts matrix2 in matrix3 starting from row
#i. Checks for 0 < #i < #n+1, but does not
check for matrix size.
( M3 M2 #i → M )
Inserts matrix2 in matrix3 starting from row
#i. Checks for 0 < #i < #n + 1, but does not
check for matrix size.
( M #c #c' → M )
Exchanges columns c and c' of a symbolic matrix.
( M #r #r' → M )
Exchanges lines r and r' of a symbolic matrix.
( M % %' → M' )
SWAP two rows in matrix. Internal version of
xRSWP.
( M #r → M' lr )
Extracts row #r from M. Checks boundaries.
( meta-M #r → meta-M lr )
Extracts row #r from meta-matrix. Checks
boundaries.
( M #c → M cc )
Extracts column #r from matrix. Checks
boundaries.
( meta-M #c #c' → meta-M )
Exchanges columns c and c' of a meta-matrix.
( meta-M #l #l' → meta-M )
Exchanges lines l and l' of a meta-matrix (or
vector).
( M → )
Stores matrix in 'MATRIX' in current directory.
43.1. Reference
Addr.
378006
Name
ˆADDMATOBJext
379006
ˆVUNARYOP
37A006
ˆVBINARYOP
37B006
ˆPEVAL
43.1.8
345
Description
( arry ob → arry arry )
( ob arry → arry arry )
Used for addition of numeric matrix and symbolic object.
( v op → V )
Applies unary op(v[i]) to get V[i].
( V2 V1 binop → V )
Works even if V2 and V1 do not have not the
same dimension.
( V r → P[r] )
Horner evaluation, where elements of V represent coefficients of a polynomial.
Eigenvalues, Eigenfunctions, Reduction
Addr.
37C006
Name
ˆMATEGVL
37F006
ˆMATEGV
37E006
ˆMADJ
380006
ˆJORDAN
22D006
ˆFLAGJORDAN
381006
ˆQXA
224006
ˆFLAGQXA
382006
ˆAXQ
Description
( M → V )
Computes eigenvalues of a matrix like EGVL.
( M → V )
Computes eigenvalues/eigenvectors of a matrix
like EGV.
( M → Mˆ-1 P[M] P[lambda] )
Computes inverse, matrix polynomial and characteristic polynomial.
( M → pmin pcar {evect} {eval} )
( pmadj pcar → pmin pcar {evect}
{eval} )
Eigenvalue/eigenfunctions computation.
( M → )
Internal JORDAN.
( symb lidnt → M lidnt )
Converts symbolic quad form to matrix quad
form.
( symb lidnt → M lidnt )
Internal QXA.
( M lidnt → symb lidnt )
Converts matrix quad form to qymbolic quad
form.
346
43. Matrices
Addr.
225006
Name
ˆFLAGAXQ
383006
ˆGAUSS
226006
ˆFLAGGAUSS
384006
ˆSYLVESTER
227006
ˆFLAGSYLVESTER
228006
ˆPCAR
Description
( M lidnt → symb lidnt )
Internal AXQ.
( symb → D P symb' )
Gauss reduction of quadratic form (symbolic).
( symb lidnt → symb' )
Internal GAUSS.
( M → D P )
Gauss reduction of a quadratic form (matrix).
( M → P D )
Internal SYLVESTER.
( [[]] → symb )
Internal PCAR.
Chapter 44
Expression Manipulation
The entries in this chapter are used for manipulation of expressions,
when they are represented in their symbolic objects form. (See Chapter 45 for
entries that deal with symbolics in Metaobject form). There are entries related
to collection and expasion, trigonometric and exponential transformations and
substitution of values in expressions.
44.1
Reference
44.1.1
Basic Operations and Function Application
Addr.
125006
Name
ˆx+ext
126006
ˆx-ext
127006
ˆx*ext
129006
ˆx/ext
12B006
ˆxˆext
12C006
ˆEXPANDˆ
4FB006
ˆQNeg
4FC006
ˆRNEGext
Description
( ob2 ob1 → ob2+ob1 )
Symbolic addition, tests for infinities.
( ob2 ob1 → ob2-ob1 )
Symbolic subtraction, tests for infinities.
( ob2 ob1 → ob2*ob1 )
Symbolic multiplication, tests for infinities.
( ob2 ob1 → ob2/ob1 )
Symbolic division, tests for infinities.
( ob power → obˆpower )
Power.
( x y → xˆy=exp[y*ln[x]] )
Power with simplifications. If y is a fraction of
integers, use XROOTˆ instead.
( ob → -ob )
Symbolic negation.
( ob → -ob )
Symbolic negation.
347
348
44. Expression Manipulation
Addr.
4FA006
Name
ˆSWAPRNEG
4FE006
ˆRREext
4FD006
ˆSWAPRRE
500006
ˆRIMext
4FF006
ˆSWAPRIM
501006
ˆxREext
503006
ˆxIMext
505006
ˆRCONJext
50D006
ˆxABSext
50A006
ˆRABSext
52A006
ˆxINVext
557006
ˆxSYMINV
553006
ˆxSQext
555006
51B006
ˆxSYMSQ
ˆSXSQRext
51C006
ˆXSQRext
52B006
ˆxvext
552006
521006
ˆxSYMSQRT
ˆCKLN
Description
( ob2 ob1 → ob1 -ob2 )
Does SWAP then symbolic negation.
( ob → Re(ob) )
Symboloc real part.
( ob2 ob1 → ob1 Re(ob2) )
SWAP, then RREext.
( ob → Im(ob) )
Symbolic imaginary part.
( ob1 ob2 → ob2 Im(ob1) )
SWAP, then RIMext.
( symb → symb' )
Complex real part. Expands only + - * / ˆ.
( symb → symb' )
Complex imaginary part. Expands only + - * / ˆ.
( ob → Conj(ob) )
Symbolic complex conjugate.
( ob → abs(ob) )
Symbolic ABS function.
( ob → abs(ob) )
Internal ABS. Internal representation.
( ob → 1/ob )
Symbolic inversion.
( symb → 1/symb )
Symbolic inversion.
( symb → sq(symb) )
Symbolic square.
( symb → symbˆ2 )
( ob → sqrt(ob) )
Does not take care of the sign.
( ob → sqrt(ob) )
Tries to return a positive square root if nocareflag
is cleared.
( ob → sqrt(ob) )
Symbolic square root, tests for 0 and 1.
( symb → sqrt(symb) )
( ob → ln(ob) )
Symbolic LN with special handling for fractions.
Does not use the internal representation.
44.1. Reference
Addr.
522006
Name
ˆxLNext
525006
ˆEXPANDLN
528006
ˆREALLN
526006
ˆCMPLXLN
527006
ˆLNATANext
529006
ˆxEXPext
52C006
ˆxCOSext
536006
533006
ˆxSYMCOS
ˆxACOSext
53F006
52D006
ˆxSYMACOS
ˆxSINext
538006
532006
ˆxSYMSIN
ˆxASINext
53D006
52E006
ˆxSYMASIN
ˆxTANext
53A006
534006
ˆxSYMTAN
ˆxATANext
541006
52F006
ˆxSYMATAN
ˆxCOSHext
545006
ˆxSYMCOSH
349
Description
( ob → ln(ob) )
Symbolic LN, without fraction handling.
( ob → ln(ob) )
Symbolic LN using internal representation. Before switching to internal representation, test for
ABS, 0 and 1 and, in real mode, test if ob=exp(x).
( ob → ln(ob) )
Internal natural logarithm for a real argument.
( ob → ln(ob) )
Internal complex natural logarithm.
( ob → ln(ob) )
Internal natural logarithm for complex.
( y d n → exp(y*n/d*i*π) )
Symbolic EXP, tests for 0, infinity and i*k*π/12
where k is an integer. Tests for d=1,2,3,4,6.
( ob → cos(ob) )
Symbolic COS, tests for 0 and multiples of π/12.
Also tests if ob=acos(x) or ob=asin(x).
( ob → cos(ob) )
( ob → acos(ob) )
Symbolic ACOS. Tests for 0, infinity and tables.
( ob → acos(ob) )
( ob → sin(ob) )
Symbolic SIN, tests for 0 and multiplies of π/12.
Also tests if ob=acos(x) or ob=asin(x).
( ob → sin(ob) )
( ob → asin(ob) )
Symbolic ASIN. Tests for 0, infinity and tables.
( ob → asin(ob) )
( ob → tan(ob) )
Symbolic TAN. Tests for 0 and multiplies of π/12.
Also tests if ob=atan(x).
( ob → tan(ob) )
( ob → atan(ob) )
Symbolic ATAN. Tests for 0, infinity and tables.
( ob → atan(ob) )
( ob → cosh(ob) )
Symbolic COSH. Tests for 0, infinity and acosh(x).
( ob → cosh(ob) )
350
44. Expression Manipulation
Addr.
54E006
Name
ˆxACOSHext
550006
530006
ˆxSYMACOSH
ˆxSINHext
543006
54B006
ˆxSYMSINH
ˆxASINHext
54D006
531006
ˆxSYMASINH
ˆxTANHext
547006
ˆxSYMTANH
548006
ˆxATANHext
54A006
55F006
561006
563006
565006
567006
569006
56B006
56D006
56F006
571006
572006
ˆxSYMATANH
ˆxSYMFLOOR
ˆxSYMCEIL
ˆxSYMIP
ˆxSYMFP
ˆxSYMXPON
ˆxSYMMANT
ˆxSYMLNP1
ˆxSYMLOG
ˆxSYMALOG
ˆxSYMEXPM1
ˆfactorial
573006
ˆfacts
575006
578006
128006
ˆxSYMFACT
ˆxSYMNOT
ˆx=ext
Description
( symb → acosh(symb) )
Symbolic ACOSH.
( symb → acosh(symb) )
( ob → sinh(ob) )
Symbolic SINH. Tests for 0, infinity and asinh(x).
( ob → sinh(ob) )
( symb → symb' )
Symbolic ASINH.
( symb → asinh(symb) )
( ob → tanh(ob) )
Symbolic TANH. Tests for 0 and atanh(x).
( ob → tanh(ob) )
Symbolic TANH.
( symb → symb' )
Symbolic ATANH.
( ob → atanh(ob) )
( symb → symb' )
( symb → symb' )
( symb → symb' )
( symb → symb' )
( symb → symb' )
( symb → symb' )
( symb → symb' )
( symb → symb' )
( symb → symb' )
( symb → symb' )
( symb → symb! )
Symbolic factorial.
( symb → symb! )
Symbolic factorial.
( symb → symb! )
( symb → symb' )
( ob2 ob1 → ob2=ob1 )
44.1. Reference
44.1.2
351
Trigonometric and Exponential Operators
Addr.
408006
Name
ˆCOS2TAN/2
40B006
ˆSIN2TAN/2
40E006
ˆTAN2TAN/2
412006
ˆCOS2TAN
414006
ˆSIN2TAN
41A006
ˆLNP12LN
41B006
ˆLOG2LN
41C006
ˆALOG2EXP
41D006
ˆEXPM2EXP
41E006
ˆSQRT2LNEXP
41F006
ˆsqrt2lnexp
420006
ˆTAN2EXP
422006
ˆASIN2LN
424006
ˆACOS2LN
427006
ˆTAN2SC
42A006
ˆSIN2TC
42C006
ˆCOS2ext
42E006
ˆSIN2ext
Description
( symb → symb' )
x → (1-(tan(x/2))ˆ2)/(1+(tan(x/2))ˆ2)
( symb → symb' )
x → 2 tan(x/2)/(1+(tan(x/2))ˆ2)
( symb → symb' )
x → 2 tan(x/2)/(1-(tan(x/2))ˆ2)
( symb → symb2 )
x → 1/sqrt(1+(tan(x))ˆ2)
( symb → symb' )
x → tan(x)/sqrt(1+(tan(x))ˆ2)
( symb → symb' )
x → ln(x+1)
( symb → symb' )
x → log(x)
( symb → symb' )
x → alog(x)
( symb → symb' )
x → exp(x)-1
( symb → symb' )
x → exp(ln(x)/2)
( meta → meta' )
x → exp(ln(x)/2)
( symb → symb' )
x → (exp(i2x)-1)/(i*(exp(i2x)+1))
( symb → symb' )
x → = i*ln(x+sqrt(xˆ2-1))+pi/2.
( symb → symb' )
x → ln(x+sqrt(xˆ2-1))/i
( symb → symb' )
x → sin(x)/cos(x)
( symb → symb' )
x → cos(x)*tan(x)
( symb → symb' )
x → sqrt(1-(sin(x))ˆ2).
( symb → symb' )
x → sqrt(1-(cos(x))ˆ2).
352
44. Expression Manipulation
Addr.
431006
Name
ˆATAN2ASIN
434006
ˆASIN2ATAN
437006
ˆASIN2ACOS
43C006
ˆACOS2ASIN
43D006
ˆATAN2LNext
440006
ˆTAN2SC2
442006
ˆTAN2CS2
444006
ˆSIN2EXPext
446006
ˆCOS2EXPext
448006
ˆSINH2EXPext
44A006
ˆCOSH2EXPext
44C006
ˆTANH2EXPext
44E006
ˆASINH2LNext
450006
ˆACOSH2LNext
452006
ˆATANH2LNext
454006
ˆXROOT2ext
45A006
ˆLN2ATAN
Description
( symb → symb' )
x → asin(x/sqrt(xˆ2+1))
( symb → symb' )
x → atan(x/sqrt(1-xˆ2))
( symb → symb' )
x → π/2-acos(x)
( symb → symb' )
x → π/2-asin(x)
( symb → symb' )
x → i/2*ln((i+x)/(i-x))
( symb → symb' )
x → (1-cos(2x))/sin(2x)
( symb → symb' )
x → sin(2x)/(1+cos(2x))
( symb → symb' )
x → (eˆ(i*x)-1/eˆ(i*x))/(2i)
( symb → symb' )
x → (eˆ(i*x)+1/eˆ(i*x))/2
( symb → symb' )
x → (eˆx-1/eˆx)/2
( symb → symb' )
x → (eˆx+1/eˆx)/2
( symb → symb' )
x → (eˆ2x-1)/(eˆ2x+1)
( symb → symb' )
x → ln(x+sqrt(xˆ2+1))
( symb → symb' )
x → ln(x+sqrt(xˆ2-1))
( symb → symb' )
x → ln((1+x)/(1-x))/2
( symb1 symb2 → symb' )
x y → exp(ln(y)/x)
( symb → symb' )
x → ln(x)
44.1. Reference
44.1.3
353
Simplification, Evaluation and Substitution
Addr.
45B006
Name
ˆVAR=LIST
464006
ˆSYMBEXEC
465006
ˆMEVALext
466006
ˆCASNUMEVAL
467006
ˆCASCOMPEVAL
468006
ˆREPLACE2BY1
469006
ˆNR_REPLACE
46B006
ˆCASCRUNCH
46C006
ˆAPPROXCOMPEVAL
11A007
ˆALGCASCOMPEVAL
Description
( idnt {} → {}' )
Replaces all elements of the initial list by
idnt=element.
( ob symb → ob' )
If symb is an equation, executes the corresponding change of variables in ob, otherwise
tries to find symb so that ob is zero. Note that
change of variable works for change of user
functions.
( ob {} {}' → ob' )
Replaces all occurrances of an element of list2
by the corresponding element of list1 in ob.
Looks in ob from outer to inner expressions.
list2 and list1 may contain secondaries. If
vxxlflag is set SIGN var are leaved unchanged.
( symb list1 list2 → symb' )
Evaluation of a symbolic.
The lists' formats are list1={idnt/lam1... idnt_n/lam_n}
list2={value1...value_n}.
The idnt's/lam's
in list1 are not evaluated before replacing
value1...value_n.
( symb → symb' )
Evaluation of a symbolic.
( symb idnt a → symb' )
Evaluation of a symbolic replacing an idnt
by a value; for example evaluation of F(X) for
X=1/2)
( symb idnt a → symb' )
Like REPLACE2BY1 but prevents evaluation of
INT.
( ob → % )
Like CRUNCH but in approximate mode.
( symb → symb' )
Like CASCOMPEVAL but in approximate mode.
( expr → expr )
354
44. Expression Manipulation
Addr.
297006
Name
ˆSLVARext
298006
ˆSIMPLIFY
299006
ˆSIMP1ext
29A006
ˆSYMEXPAN
29B006
ˆSIMPVAR
2A0006
ˆSIMPSYMBS
2A2006
ˆSIMPUSERFCN
2A3006
ˆEVALUSERFCN
2A4006
ˆSIMP|
2A9006
ˆSIMPext
2AD006
ˆSIMPGCDext
2AE006
ˆSIMP3ext
2B9006
ˆTSIMP2ext
Description
( Lvar → Lvar' )
Simplifies all elements of the list that are supposed to be variables.
( symb → symb' )
Simplifies one object like EVAL.
( symb → symb' )
Simplifies one object like EXPAND. Object must
be a symbolic, a real or a complex number.
( symb → symb' )
Simplifies one object like EXPAN. Object must
be symb/real/cmplx.
( ob → ob' )
Simplifies variable.
( inf sup fcn var →
int(inf,sup,fcn,var) )
( ob1..obn #n ob → id[] )
Simplification of user functions. Tests for
derivative of user functions. Ob must be an
id, a symbolic, a secondary or a romptr.
( V1..Vn #n fcn → f[] )
Evaluates a user function with stack checking.
( ob list → ob' )
Executes the WHERE operator.
( ob1 ob2 → ob1' ob2' )
Simplifies two objects in internal representation. Checks that o2 is not a complex or an
irrquad because decomposition of the corresponding fraction with larg would generate a
"Try to recover Memory".
( o1 o2 gcd → o1/gcd o2/gcd )
Divides o1 and o2 by gcd.
( a b → g a'' b'' )
Calculates g = gcd(a,b) and a''=a/g and b''=b/g.
( symb → symb )
Transcendental simplifications. Converts only
sqrt ˆ and XROOT to EXP/LN. LN are returned
as -1/INV[-LN[]] for use by SERIES.
44.1. Reference
Addr.
2BA006
Name
ˆTSIMPext
2BB006
ˆTSIMP3ext
44.1.4
355
Description
( symb → symb )
Transcendental simplifications. Convert transcendental functions to EXP and LN.
( symb → symb )
Collection and Expansion
Addr.
26E006
Name
ˆCOLCext
2FE006
ˆTCOLLECT
2FF006
ˆSIGMAEXPext
300006
ˆLINEXPext
301006
ˆSIGMAEXP2ext
303006
ˆSINEXPA
316006
ˆLNEXPA
31C006
ˆMTRIG2SYMB
309006
ˆCOSEXPA
30F006
ˆEXPEXPA
31B006
ˆLINEXPA
31D006
ˆLNCOLCext
Description
( symb → symb' )
Factorization with respect to the current variable of symb and factorization of the integer
content of symb.
( symb → symb' )
Performs trigonometric linearization and
then collects sines and cosines of the same angle.
( symb → symb' )
Conversion to exp and ln with exponential
linearization.
( symb → Meta )
Meta = arg_exp1 coef1 ... arg_expn coefn #2n.
( Meta → symb )
Back conversion from arg_exp/coef_meta to
symbolic.
( symb → symb' )
Expands SIN.
( symb → symb' )
Expands LN.
( Meta → symb )
Back conversion of trig-meta to symbolic.
( symb → symb' )
Expands COS.
( symb → symb' )
Expands EXP.
( symb → Meta )
Alternates trig operator and coefficient.
( symb → symb' )
Collects logarithms.
356
44. Expression Manipulation
Addr.
31F006
Name
ˆTEXPAext
240006
ˆEXLR
44.1.5
Description
( symb → symb )
Main transcendental expansion program.
( 'a=b' → a b )
( ob → X ob )
Internal equation splitter.
Trigonometric Transformations
Addr.
407006
Name
ˆHALFTAN
411006
ˆTRIGTAN
416006
ˆTRIGext
417006
ˆHYP2EXPext
418006
ˆEXPLNext
419006
ˆSERIESEXPLN
426006
ˆTAN2SCext
429006
ˆSIN2TCext
430006
ˆATAN2Sext
433006
ˆASIN2Text
Description
( symb → symb' )
Converts trigonometric functions to TAN of the
half angle.
( symb → symb' )
Convert sin and cos to tan of the same angle.
( symb → symb' )
Applies sinˆ2+cosˆ2=1 to simplify trigonometric expressions. If flag -116 is set, tries to keep
only sin, else only cos.
( symb → symb' )
Converts hyperbolic functions to exp and ln.
Converts XROOT and ˆ to exp and ln.
( symb → symb' )
Converts all transcendental functions to exp
and ln.
( symb → symb' )
Converts sqrt, ˆ and XROOT to EXP/LN.
( symb → symb' )
Converts tan to sin/cos.
( symb → symb' )
Converts sin to cos*tan.
( symb → symb' )
Converts
ATAN
to
ASIN
using
asin(x)=atan(x/sqrt(1-xˆ2)).
( symb → symb' )
Converts
ASIN
to
ATAN
using
asin(x)=atan(x/sqrt(1-xˆ2)).
44.1. Reference
Addr.
436006
Name
ˆASIN2Cext
43A006
ˆACOS2Sext
43F006
ˆTAN2SC2ext
456006
ˆLN2ext
44.1.6
357
Description
( symb → symb' )
Converts ASIN to ACOS using asin(x)=pi/2acos(x).
( symb → symb' )
Converts ACOS to ASIN using acos(x)=pi/2asin(x).
( symb → symb' )
Converts TAN to SIN/COS of the double angle.
If flag -116 is set calls TAN2SC2, else TAN2CS2.
( symb → symb' )
If symb contains x, returns -1/inv(-ln(x)), else
ln(x). Used by SERIES.
Division, GCD and LCM
Addr.
3E8006
3EA006
3EC006
Name
ˆPSEUDODIV
ˆBESTDIV2
ˆQUOText
3ED006
ˆNEWDIVext
3F3006
ˆQUOTOBJext
3F4006
ˆDIVISIBLE?
3F5006
ˆQDiv?
Description
( Q2 Q1 → a Q2*a/Q1 Q2*a/Q1 )
( o2 o1 → quo mod )
( o2 o1 → o2 div o1 )
Euclidean quotient of 2 objets (works even if o2
mod o1=0).
( ob2 ob1 → quo mod )
Euclidean division, ob2 and ob1 may be fractions of returns a fraction of Q.
( a_a-1...a0 bb_1...b0 #b #a flag →
r q )
SRPL Euclidean division: step 2 computes the
remainder r only if flag is TRUE.
( a b → a/b T )
( a b → ob F )
Returns TRUE and quotient if b divides a, otherwise returns FALSE.
( a b → a/b T )
( a b → F )
Returns TRUE and quotient if b divides a, otherwise returns FALSE.
358
44. Expression Manipulation
Addr.
3F6006
Name
ˆFastDiv?
3F7006
ˆPOTENCEext
2A5006
ˆDENOLCMext
2A6006
ˆMETADENOLCM
2B1006
ˆLPGCDext
2B2006
ˆSLOWGCDext
2B3006
ˆQGcd
Description
( P Q → P/Q PmodQ T )
Euclidean division. Assumes P and Q have integer or Gaussian integer coefficient. Returns
FALSE in complex mode or if sparse short division fails.
( z1 z2 → q r )
Step by step Euclidean division for small integers.
( list → ob )
Calculates the LCM of the denominator of the
elements of the list. If input is not a list, returns the denominator of the object.
( Meta → ob )
Calculates LCM of the denominators of the elements of Meta.
( {} → {} ob )
Calculates the GCD of all the elements in the
list. The algorithm is far from optimal.
( c 1 A B → c* gcd(A,B) )
Euclidean algorithm for polynomial GCD.
Used if A or B contains irrquads. c is the GCD
of the contents of the original polynomials returned after failure of GCDHEUext.
( ob2 ob1 → gcd )
Generic internal GCD.
( LAM2: GCDext ob1, ob2 → pgcd ).
Chapter 45
Symbolic Meta Handling
This chapter contains words that modify metas which are exploded symbolic objects. They are used to modify the expression or to operate on them.
45.1
Reference
45.1.1
Basic Expression Manipulation
Addr.
157006
Name
ˆSYMBINCOMP
386006
ˆm-1&m+1
387006
ˆmeta1/meta
388006
ˆ1&meta
389006
ˆmeta/2
38A006
ˆaddt2
38B006
ˆaddt/
Description
( symb → ob1 .. obN #n )
( ob → ob #1 )
( {} → {} #1 )
Explodes symbolic object into meta. Other objects are converted into one-object metas by
pushing #1 into the stack.
( meta → meta&1&+ meta&1&- )
Creates two copies of the meta. To the first one,
adds 1 and +, to the second one, adds 1 and -.
( meta → meta 1&meta&/ )
Duplicates the meta, and inverts the expression
represented by it.
( Meta → 1&Meta )
Prepends the number 1 to the meta.
( Meta → Meta&2&/ )
Divides the expression by two.
( Meta → Meta&2 )
Appends the number 2 to the meta.
( Meta → Meta&/ )
Appends division to meta.
359
360
45. Symbolic Meta Handling
Addr.
38C006
Name
ˆmeta2*
459006
ˆmetai*
38D006
ˆmeta1-sq
38E006
ˆmetasq+1
38F006
ˆmetasq-1
390006
ˆmeta-1
398006
ˆaddtˆ
39C006
ˆtop&addt*
39D006
ˆtop&addt/
39E006
ˆaddti
45.1.2
Description
( Meta → 2&Meta&* )
Multiplies the expression by 2.
( meta → meta*i )
Multiplies meta by i.
( Meta → 1&Meta&SQ&- )
Changes x into 1-xˆ2, where x is the original expression.
( Meta → Meta&SQ&1&+ )
Changes x into xˆ2+1, where x is the original expression.
( Meta → Meta&SQ&1&- )
Changes x into xˆ2-1, where x is the original
equation.
( Meta → Meta&1&- )
Subtracts one from the expression.
( Meat → Meta&ˆ )
Append power operator to meta object.
( meta2 meta1 → meta2*meta1 )
top& addt*. No checks.
( meta2 meta1 → meta2/meta1 )
top& addt/. No checks.
( meta → meta&i )
Appends i (the Imaginary unit) to expression.
Basic Operations and Function Application
Addr.
393006
Name
ˆmetaadd
3AB006
ˆMetaAdd
1CE006
ˆckaddt+
Description
( Meta1 Meta2 → Meta1+Meta2 )
Adds 2 meta objects with trivial simplifications. metaadd checks for Meta1/2=Z0 ONE.
( Meta2 Meta1 → Meta2+Meta1 )
Adds 2 meta objects with trivial simplifications. Checks for infinities then call metaadd.
( Meta1 Meta2 → Meta1+Meta2 )
Adds 2 meta objects with trivial simplifications.
45.1. Reference
Addr.
394006
Name
ˆmetasub
3AD006
ˆMetaSub
1CF006
ˆckaddt-
395006
ˆmetamult
3AF006
ˆMetaMul
1CD006
ˆckaddt*
396006
ˆmetadiv
3B1006
ˆMetaDiv
3F1006
ˆDIVMETAOBJ
397006
ˆmetaˆ
361
Description
( Meta1 Meta2 → Meta1+Meta2 )
Subtracts 2 meta objects with trivial simplifications. metasub checks for Meta1/2=Z0 ONE.
( Meta2 Meta1 → Meta2-Meta1 )
Subtracts 2 meta objects with trivial simplifications. Checks for infinities then call
metasub.
( Meta1 Meta2 → Meta1+Meta2 )
Subtracts 2 meta objects with trivial simplifications.
( Meta1 Meta2 → Meta1*Meta2 )
Multiplies 2 meta objects with trivial simplifications. Checks for meta1, meta2= Z0 or Z1,
checks for xNEG.
( Meta2 Meta1 → Meta2*Meta1 )
Multiplies 2 meta objects with trivial simplifications. Checks for infinities/0 then call
metamult.
( Meta1 Meta2 → Meta1*Meta2 )
Multiplies 2 meta objects with trivial simplifications.
( Meta2 Meta1 → Meta2/Meta1 )
Divides 2 meta objects with trivial simplifications. Checks for infinities and 0, meta2 =1 or
Z-1, checks for xNEG.
( Meta2 Meta1 → Meta2/Meta1 )
Divide 2 meta objects with trivial simplifications. Checks for infinities and 0 then call
metadiv.
( o1...on #n ob → {o1/ob...on/ob} )
Division of all elements of a meta by ob. Tests
if o=1.
( Meta ob → Meta&ob&ˆ )
Elevates expression to a power. If ob=1, just
returns the expression. Tests for present of
xNEG in the end of meta for integral powers.
362
45. Symbolic Meta Handling
Addr.
399006
Name
ˆmetapow
3B5006
ˆMetaPow
39B006
ˆmetaxroot
3B9006
ˆmetaneg
3BA006
ˆmetackneg
3B7006
ˆMetaNeg
502006
ˆxSYMRE
504006
ˆxSYMIM
50E006
ˆaddtABS
510006
ˆaddtABSEXACT
511006
ˆaddtSIGN
513006
ˆaddtARG
12D006
ˆaddtXROOT
12F006
ˆaddtMIN
131006
ˆaddtMAX
Description
( Meta2 Meta1 → Meta2ˆMeta1 )
Elevates expression to a power (any other expression). If length of Meta1 is ONE, calls
metaˆ.
( Meta2 Meta1 → Meta2ˆMeta1 )
Power.
Checks for infinities then calls
metapow.
( Meta2 Meta1 → Meta2&XROOT&Meta1 )
Root of expression.
( meta → meta )
Checks only for meta finishing by xNEG.
( meta → meta )
Like metaneg but checks for meta=ob ONE.
( Meta → Meta )
Negates meta. Only checks for metas finishing by xNEG.
( meta → meta' )
Meta complex real part. Expands only + - * /
ˆ.
( meta → meta' )
Meta complex imaginary part. Expands only
+ - * / ˆ.
( Meta → Meta' )
Meta ABS. Does a CRUNCH first to find sign.
( Meta → Meta' )
Meta ABS. No crunch, sign is only found using exact methods.
( Meta → Meta' )
Meta SIGN.
( Meta → Meta' )
Meta ARG.
( Meta2 Meta1 → Meta' )
Meta XROOT. XROOT(o2,o1) is o1ˆ[1/o2],
compared to o2ˆo1.
( Meta2 Meta1 → Meta' )
Meta MIN.
( Meta2 Meta1 → Meta' )
Meta MAX.
45.1. Reference
Addr.
133006
Name
ˆaddt<
135006
ˆaddt<=
137006
ˆaddt>
139006
ˆaddt>=
13B006
ˆaddt==
13D006
ˆaddt!=
13F006
ˆaddt%
141006
ˆaddt%CH
143006
ˆaddt%T
145006
ˆaddtMOD
147006
ˆaddtTRNC
149006
ˆaddtRND
14B006
ˆaddtCOMB
14D006
ˆaddtPERM
14F006
ˆaddtOR
151006
ˆaddtAND
153006
ˆaddtXOR
506006
ˆaddtCONJ
523006
ˆaddtLN
363
Description
( Meta2 Meta1 → Meta' )
Meta <.
( Meta2 Meta1 → Meta' )
Meta <=.
( Meta2 Meta1 → Meta' )
Meta >.
( Meta2 Meta1 → Meta' )
Meta >=.
( Meta2 Meta1 → Meta' )
Meta ==.
( Meta2 Meta1 → Meta' )
Meta !=.
( Meta2 Meta1 → Meta' )
Meta %.
( Meta2 Meta1 → Meta' )
Meta %CH. Meta2*(1+Meta'/100)=Meta1.
( Meta2 Meta1 → Meta' )
Meta %T.
( Meta2 Meta1 → Meta' )
Meta MOD.
( Meta2 Meta1 → Meta' )
Meta TRNC.
( Meta2 Meta1 → Meta' )
Meta RND.
( Meta2 Meta1 → Meta' )
Meta COMB.
( Meta2 Meta1 → Meta' )
Meta PERM.
( Meta2 Meta1 → Meta' )
Meta OR.
( Meta2 Meta1 → Meta' )
Meta AND.
( Meta2 Meta1 → Meta' )
Meta XOR.
( meta → meta' )
Meta complex conjugate.
( Meta → Meta' )
Meta LN.
364
45. Symbolic Meta Handling
Addr.
535006
Name
ˆaddtCOS
537006
ˆaddtSIN
539006
ˆaddtTAN
53B006
ˆaddtSINACOS
53C006
ˆaddtASIN
53E006
ˆaddtACOS
540006
ˆaddtATAN
542006
ˆaddtSINH
544006
ˆaddtCOSH
546006
ˆaddtTANH
549006
ˆaddtATANH
54C006
ˆaddtASINH
54F006
ˆaddtACOSH
551006
ˆaddtSQRT
554006
ˆaddtSQ
556006
ˆaddtINV
558006
ˆaddtEXP
559006
ˆxSYMEXP
Description
( Meta → Meta' )
Meta COS.
( Meta → Meta' )
Meta SIN.
( Meta → Meta' )
Meta TAN.
( meta → meta' )
If meta stands for x, meta' stands for sqrt[1xˆ2].
( Meta → Meta' )
Meta ASIN.
( Meta → Meta' )
Meta ACOS.
( Meta → Meta' )
Meta ATAN.
( Meta → Meta' )
Meta SINH.
( Meta → Meta' )
Meta COSH.
( Meta → Meta' )
Meta TANH.
( Meta → Meta' )
Meta ATANH.
( Meta → Meta' )
Meta ASINH.
( Meta → Meta' )
Meta ACOSH.
( Meta → Meta' )
Meta SQRT.
( Meta → Meta' )
Meta SQ.
( Meta → Meta' )
Meta INV.
( Meta → Meta' )
Meta EXP. Does not apply EXP[..]=1/EXP[..].
( Meta → Meta' )
Meta EXP. Applies EXP[-..]=1/EXP[..].
45.1. Reference
Addr.
55A006
Name
ˆaddtD->R
55C006
ˆaddtR->D
55E006
ˆaddtFLOOR
560006
ˆaddtCEIL
562006
ˆaddtIP
564006
ˆaddtFP
566006
ˆaddtXPON
568006
ˆaddtMANT
56A006
ˆaddtLNP1
56C006
ˆaddtLOG
56E006
ˆaddtALOG
570006
ˆaddtEXPM
574006
ˆaddtFACT
577006
ˆaddtNOT
45.1.3
365
Description
( Meta → Meta' )
Meta D→R.
( Meta → Meta' )
Meta R→D.
( Meta → Meta' )
Meta FLOOR.
( Meta → Meta' )
Meta CEIL.
( Meta → Meta' )
Meta IP.
( Meta → Meta' )
Meta FP.
( Meta → Meta' )
Meta XPON.
( Meta → Meta' )
Meta MANT.
( meta → meta )
Meta LNP1.
( meta → meta )
Meta LOG.
( meta → meta )
Meta ALOG.
( meta → meta )
Meta EXPM.
( Meta → Meta' )
Meta FACT.
( Meta → Meta' )
Meta NOT.
Trigonometric and Exponential Operators
Addr.
409006
Name
ˆcos2tan/2
40A006
ˆ1-xˆ2/1+xˆ2
40C006
ˆsin2tan/2
Description
( meta → meta' )
x → (1-(tan(x/2))ˆ2)/(1+(tan(x/2))ˆ2)
( meta → meta' )
x → (1-xˆ2)/(1+xˆ2)
( meta → meta' )
x → 2 tan(x/2)/(1+(tan(x/2))ˆ2)
366
45. Symbolic Meta Handling
Addr.
40D006
Name
ˆ2x/1+xˆ2
40F006
ˆtan2tan/2
410006
ˆaddtTAN/2
413006
ˆcos2tan
415006
ˆsin2tan
421006
ˆtan2exp
423006
ˆasin2ln
425006
ˆacos2ln
428006
ˆsin/cos
42B006
ˆcos*tan
42D006
ˆsqrt1-sinˆ2
42F006
ˆsqrt1-cosˆ2
432006
ˆatan2asin
435006
ˆasin2atan
438006
ˆpi/2-acos
439006
ˆpi/2-meta
43B006
ˆpi/2-asin
43E006
ˆatan2ln
441006
ˆ2*1-cos/sin
Description
( meta → meta' )
x → 2x/(1+xˆ2)
( meta → meta' )
x → 2 tan(x/2)/(1-(tan(x/2))ˆ2)
( meta → meta' )
x → tan(x/2)
( meta → meta' )
x → 1/sqrt(1+(tan(x))ˆ2)
( meta → meta' )
x → tan(x)/sqrt(1+(tan(x))ˆ2)
( meta → meta' )
x → (exp(i2x)-1)/(i*(exp(i2x)+1))
( meta → meta' )
x → = i*ln(x+sqrt(xˆ2-1))+π/2.
( meta → meta' )
x → ln(x+sqrt(xˆ2-1))/i
( meta → meta' )
x → sin(x)/cos(x)
( meta → meta' )
x → cos(x)*tan(x)
( meta → meta' )
x → sqrt(1-(sin(x))ˆ2).
( meta → meta' )
x → sqrt(1-(cos(x))ˆ2).
( meta → meta' )
x → asin(x/sqrt(xˆ2+1))
( meta → meta' )
x → atan(x/sqrt(1-xˆ2))
( meta → meta' )
x → π/2-acos(x)
( meta → meta' )
x → π/2-x
( meta → meta' )
x → π/2-asin(x)
( meta → meta' )
x → i/2*ln((i+x)/(i-x))
( meta → meta' )
x → (1-cos(2x))/sin(2x)
45.1. Reference
Addr.
443006
Name
ˆ2*sin/1+cos
445006
ˆsin2exp
447006
ˆcos2exp
449006
ˆsinh2exp
44B006
ˆcosh2exp
44D006
ˆtanh2exp
44F006
ˆasinh2ln
451006
ˆacosh2ln
453006
ˆatanh2ln
455006
ˆxroot2expln
458006
ˆexp2sincos
45.1.4
367
Description
( meta → meta' )
x → sin(2x)/(1+cos(2x))
( meta → meta' )
x → (eˆ(i*x)-1/eˆ(i*x))/(2i)
( meta → meta' )
x → (eˆ(i*x)+1/eˆ(i*x))/2
( meta → meta' )
x → (eˆx-1/eˆx)/2
( meta → meta' )
x → (eˆx+1/eˆx)/2
( meta → meta' )
x → (eˆ2x-1)/(eˆ2x+1)
( meta → meta' )
x → ln(x+sqrt(xˆ2+1))
( meta → meta' )
x → ln(x+sqrt(xˆ2-1))
( meta → meta' )
x → ln((1+x)/(1-x))/2
( meta1 meta2 → meta' )
x y → exp(ln(y)/x)
( meta → meta' )
Returns
EXP
of
EXP[RE]*[COS+i*SIN].
meta
as
Infinity and Undefs
Addr.
3A1006
Name
ˆ1metaundef#
3A0006
ˆ2metaundef#
3A2006
ˆmetaundef
3A4006
ˆ1metainf#
Description
( meta → meta # )
Tests presence of undef in meta. # is the position of undef.
( meta2 meta1 → meta2 meta1 # )
Tests presence of undef in meta2 and meta1.
# is the position of undef.
( → meta )
Returns undef meta.
( meta → meta # )
Finds position of infinity in meta. Metas of
length>2 are considered as finite meta.
368
45. Symbolic Meta Handling
Addr.
3A3006
Name
ˆ2metainf#
3A5006
ˆmetainftype
3A6006
ˆunsignedinf
3A7006
ˆplusinf
3A8006
ˆNDROPplusinf
3A9006
ˆminusinf
3AA006
ˆNDROPminusinf
45.1.5
Description
( meta2 meta1 → meta2 meta1 # )
Finds position of infinity in meta 2 and
meta1. Metas of length>2 are considered as
finite meta.
( meta → # )
Returns infinity type: 1 for +infinity, 2 for infinity or 0 for unsigned.
( → meta )
Returns unsigned infinty.
( → meta )
Returns plus infinty.
( ob1..obn → meta )
Replaces meta by plus infinty.
( → meta )
Returns minus infinty.
( ob1..obn → meta )
Replace meta by minus infinty.
Expansion and Simplification
Addr.
3BB006
Name
ˆmetasimp
118007
ˆDISTRIB*
3C2006
ˆDISTRIB/
304006
ˆMETASINEXPA
305006
ˆSINEXPA+
306006
ˆSINEXPA-
Description
( Meta → Meta )
Simplifies a meta object. Non recursive rational simplification.
( meta → meta' T )
( meta → meta F )
Distribute *. Returns FALSE if no distribution
done.
( meta → meta' T )
( meta → meta F )
Distribute /. Returns FALSE if no distribution
done.
( Meta → Meta' )
Expands SIN.
( Meta → Meta' )
Expands SIN(x+y).
( Meta → Meta' )
Expands SIN(x-y).
45.1. Reference
Addr.
307006
Name
ˆSINEXPA*
308006
ˆSINEXPA*1
30A006
ˆMETACOSEXPA
30B006
ˆCOSEXPA+
30C006
ˆCOSEXPA-
30D006
ˆCOSEXPA*
30E006
ˆCOSEXPA*1
310006
ˆMETAEXPEXPA
311006
ˆEXPEXPA+
312006
ˆEXPEXPA-
313006
ˆEXPEXPA*
314006
ˆEXPEXPANEG
315006
ˆEXPEXPA*1
317006
ˆMETALNEXPA
318006
ˆLNEXPA*
319006
ˆLNEXPA/
31A006
ˆLNEXPAˆ
369
Description
( Meta → Meta' )
Expands SIN(x*y). Expands if x or y is an integer.
( Meta2 Meta1 → Meta' )
Expands SIN(x*y). Meta1 is assumed to be an
integer.
( Meta → Meta' )
Expands COS.
( Meta → Meta' )
Expands COS(x+y).
( Meta → Meta' )
Expands COS(x-y).
( Meta → Meta' )
Expands COS(x*y).
( meta2 meta1 → Meta' )
Expands COS(x*y). meta1 represents an integer.
( Meta → Meta' )
Expands EXP.
( Meta → Meta' )
Expands EXP(x+y).
( Meta → Meta' )
Expands EXP(x-y).
( Meta → Meta' )
Expands EXP(x*y).
( Meta → Meta' )
Expands EXP(-x).
( Meta2 meta1 → Meta' )
Expands EXP(x*y). meta1 represents an integer.
( Meta → Meta' )
Expands LN.
( Meta → Meta' )
Expands LN(x*y).
( Meta → Meta' )
Expands LN(x/y).
( Meta → Meta' )
Expands LN(xˆy).
370
Addr.
31E006
45.1.6
45. Symbolic Meta Handling
Name
ˆMETATANEXPA
Description
( meta → tan[meta] )
Expands tan[meta].
Tests
Addr.
39A006
ˆmetafraction?
Name
3BC006
ˆmetapi?
3BD006
ˆmetaCOMPARE
3BE006
ˆSTRICTmetaCOMPARE
3C3006
ˆmetareal?
Description
( Meta → Meta flag )
Tests if meta is a fraction of integers.
( Meta → Meta# )
Tests presence of π in a meta. # is the last
occurence of π or 0.
( Meta2 Meta1 → Meta2 Meta1 # )
Comparison of 2 meta.
# =0 if undef
# =1 if >
# =2 if <
# =3 if =
Assumes generic situation, e.g.
Xˆ2
> 0 in real mode.
Look below
STRICTmetaCOMPARE for a more careful comparison.
( Meta2 Meta1 → Meta2 Meta1 # )
Comparison of 2 meta.
# =0 if undef
# =1 if >
# =2 if <
# =3 if =
Unlike metaCOMPARE it does not assume
generic situation.
( meta → meta flag )
Tests if IM[meta]==0.
Chapter 46
Polynomials
The entries in this chapter deal with computation with Polynomials.
46.1
Reference
46.1.1
Computation with Polynomials
Addr.
118006
Name
ˆQAdd
119006
ˆRADDext
117006
ˆSWAPRADD
115006
ˆQSub
116006
ˆRSUBext
114006
ˆSWAPRSUB
111006
ˆQMul
112006
ˆRMULText
110006
ˆSWAPRMULT
11C006
ˆQDiv
Description
( o1 → o2+o1 )
Adds two polynomials.
( o2 o1 → o2+o1 )
Internal +. This is the same entry as ˆQAdd.
( o2 o1 → o1+o2 )
SWAP, then QAdd.
( o2 o1 → o2-o1 )
Subtracts two polynomials.
( o2 o1 → o2-o1 )
Internal -. This is the same entry as ˆQSub.
( o2 o1 → o1-o2 )
SWAP, then QSub.
( Q1 Q2 → Q )
Multiplication of polynomials with extensions.
( Q1 Q2 → Q )
Multiplication of polynomials with extensions.
This is the same entry as ˆQMul.
( Q1 Q2 → Q )
SWAP, then ˆQMul.
( o2 o1 → o2/o1 )
Internal /.
371
372
46. Polynomials
Addr.
11B006
Name
ˆRDIVext
11A006
ˆSWAPRDIV
0D9006
113006
ˆQMod
ˆRASOP
11F006
ˆRP#
120006
ˆMPext
123006
ˆRPext
108006
ˆDISTDIVext
3E5006
ˆPTAYLext
15B006
ˆCARCOMPext
3EE006
ˆQDivRem
3EF006
ˆDIV2LISText
3F8006
ˆPDIV2ext
3F9006
ˆPSetSign
3C4006
ˆModExpa
Description
( o2 o1 → o2/o1 )
Internal /. This is the same entry as ˆQDiv.
( o2 o1 → o1/o2 )
SWAP, then QDiv.
( Q, Z → Q mod Z )
( n1/d1 n2/d2 → d1*d2 n1*d2 n2*d1 )
Used by RADDext and RSUBext for rational input.
( o2 # → o2ˆ# )
Internal power (not for matrices).
( ob # prg* → obˆ# )
General power with a specified multiplication
program.
( o2 o1 → o2ˆo1 )
Tries to convert o1 to an integer to call RP#,
otherwise xˆext.
( P Q → quo mod T )
( P Q → P Q F )
Euclidean division. Assumes P and Q have integer coefficientes. Returns FALSE if sparse
short division fails.
( P, r → symb )
Taylor for polynomials.
( Q1/Q2 → Q1'/Q2' )
Extracts leading coefficients for the first variable from a rational polynomial.
( ob2 ob1 → quo mod )
Polynomial Euclidean division of 2 objects.
Dispatchs to DIV2LISText for list polynomials.
( Z0 l1 l2 → div mod )
Euclidean division, l1 and l2 are list polynomials. Test first if l1=l2, then tries fast division,
if it fails switch to SRPL division.
( A B → Q R )
Step by step Euclidean division for univar poly.
( P1 P2 → sign[P2]*P1 )
Sets sign of P1 according to leading coeff of P2.
( Zn Fraction → Fraction modulo Zn )
46.1. Reference
Addr.
3C5006
Name
ˆModAdd
3C6006
ˆModSub
3C7006
ˆModMul
3C8006
ˆModDiv
3C9006
ˆModDiv2
3CA006
ˆModInv
3CB006
ˆModGcd
46.1.2
373
Description
( Q1 Q2 Zn → Z )
Modular addition. Z = Q1+Q2 (mod Zn).
( Q1 Q2 Zn → Z )
Modular subtraction. Z = Q1-Q2 (mod Zn).
( Q1 Q2 Zn → Z )
Modular multiplication. Z = Q1*Q2 (mod Zn).
( Z1 Z2 Zn → Z )
Modular division. Z = Z1/Z2 (mod Zn).
( Q1 Q2 Zn → quo mod mod' )
Modular division. mod' = Q1 mod Q2 mod Zn.
If Q1 and Q2 are integers, Q1 mod Q2 mod Zn
is always 0.
( Z Zn → Z' )
Modular inversion. Z' = INV(Z) (mod Zn).
NONINTERR if GCD[Z,Zn] = 1 or if Z = 0 (otherwise the results would be unpredictable).
( Q1 Q2 Zn → Q' )
Modular GCD.
Factorization
Addr.
08E006
Name
ˆBerlekampP
08F006
ˆBerlekamp
Description
( P #prime → P F / P Lf #prime T )
Berlekamp's algorithm for finding modular factors of a univariate polynomial.
( P → P F / P Lf #prime T )
Berlekamp's algorithm for finding modular factors of a univariate polynomial with a leading frontend for finding linear factors faster.
The input polynomial must be square free, otherwise the polynomial is not fully factored.
Due to memory restrictions byte sized coefficients are used and the following restrictions
were imposed: prime<128 and degree<256. If
the conditions are not met FALSE is returned.
BCD: prime≤97.
374
46. Polynomials
Addr.
0A8006
Name
ˆALG48FCTR?
0A9006
ˆMFactTriv
0AA006
ˆCheckPNoExt
0AB006
ˆPPP
0AC006
ˆPFactor
0AD006
ˆPSqff
0AE006
ˆPHFctr
0AF006
ˆPHFctr1
0B0006
ˆPHFctr0
0D8007
ˆP2P#
Description
( P → [ meta cst_coeff TRUE | P
FALSE ] )
Factorizes square-free polynomial in Erable
format.
( P → meta-factor P' )
Extracts all trivial power factors of P.
( P → P flag )
Checks that P does not contain any DOCOL
(i.e. extensions).
( P → PP PC )
Computes primitive polynomial and content of
non-const P with respect to X1. The results are
trimmed (provided P was).
( P → Lfk Z )
Does a complete factorization of P. The result
is trimmed.
( P → Lfk )
Square-free and trivial factorization, including
integer content, of P taken positive. Factors
of same power are not necessarily merged or
adjacent, but all Fi's are square-free.
( P → Lf )
Heuristic factorization of polynomial taken
positive. LAM FullFact? must be bound. If
LAM FullFact? is TRUE, a full factorization is
done. If it is FALSE, only square-free and trivial factorization is done.
( P → Lf )
Heuristic factorization of primitive polynomial. LAM FullFact? must be bound. If TRUE,
a full factorization is done. When FALSE, only
a square-free and trivial factorization are done.
( P → Lf )
Heuristic factorization of primitive square-free
non constant polynomial.
( P → P' # )
Extracts trivial power of poly. P must be a valid
poly (if list, begin with a non zero coeff).
46.1. Reference
Addr.
0B1006
Name
ˆDeCntMulti
0B2006
ˆDoLS
0B3006
ˆPNFctr
0B4006
ˆPSQFF
0B5006
ˆLiftZAdic
0B6006
ˆLFCProd
0B7006
ˆUFactor
0B8006
ˆUFactor1
0B9006
ˆMonicLf
0BA006
ˆDemonicLf
375
Description
( R → L )
Transforms list with count into simple list.
R = { {f1 #k1} ... {fn #kn} }
L = { f1 f1 .. fn fn }.
( L S F → L' )
Applies program F(Li,S) to every elem of L.
( Z → Lf )
Factorization of positive integer as polynomial.
Lf = {} if Z is 1
Lf = { {Z1 #k1} ... {Zn #kn} }
o/w.
( P → Lsqff )
Computes the square-free factorization of
primitive P. The result is trimmed (provided P
was).
( p z F → L )
Lift n-1 z-adic factorization into n factorization.
( C L → C P )
Calculates combination product.
( P → Lf )
Factorization of a square free primitive univariate polynomial.
( P → Lf )
Factorization of a square free primitive univariate polynomial of degree > 2.
( Lfp p → Lfp' )
Converts true modular factorization to monic
factorization by dividing by the leading coefficient of factor 1.
( Lfp lc p → Lfp' )
Converts monic modular factorization to true
modular factorization by multiplying factor1
by lcoeff.
376
46. Polynomials
Addr.
0BB006
Name
ˆLiftLinear
0BC006
ˆLiftGeneral
0BD006
ˆUFactorDeg2
0BE006
ˆCombineFac
0BF006
ˆCombProd
0C0006
ˆCombInit
0C1006
ˆCombNext
0C2006
ˆRmCombNext
0C3006
ˆPFactTriv
Description
( #root1 .. #rootn #n → )
Lifts modular roots of a polynomial to find linear factors of a univariate polynomial.
Lflin = list of found true factors
Lfplin' = remaining linear factors
P' = remaining polynomial
Assumes UFactor lambda variables available
and uses them for input and output.
( → )
Lifts factorization mod p to factorization mod
pˆk where pˆk exceeds the factor bound for
succesful true factor extraction.
Assumes
UFactor lambda variables.
( P → Lf )
Factorization of a degree 2 polynomial. Polynomial is univariate, square free and primitive.
( P Lfp p → Tf Tfp )
Combines modular factors to true factors. P is
the polynomial to factor, Lfp is the list of modular factors, and p the modulo. The entry returns the a list of found true factors (Tf) and
the list of modular factors for each true factor
(Tfp)
( lc Lfp p Cb → F )
Calculates modular combination.
( #r → Cb )
Inits modular combination list to value
{ 1 0 0 0 .. }.
( Cb → Cb' flag )
Gets next possible modular combination. Assumes Cb is valid and is in tempob area.
( Lf Cb → Lfrm Lf' Cb' flag )
Removes next possible combination after a successful combination has been found, and remove the used factors from the factor list.
( P → P' Lf )
Extracts all trivial power factors of P.
46.1. Reference
Addr.
0C4006
Name
ˆVarFactor
0C5006
ˆPFactPowCnt
0C6006
ˆPDivLk
282006
ˆFEVIDENText
46.1.3
377
Description
( P #var → P #n )
Calculates what power of the given variable is
a factor in P.
( P → P Lk flag )
Calculates trivial power factors in P. flag is
TRUE if any of the powers is nonzero.
( P Lk → P' )
Divides polynomial by its trivial powers.
( P → meta-fact cst coeff )
Real mode: full factorization over the integer
Complex mode: find all 1st order factors of P.
General Polynomial Operations
Addr.
09B006
Name
ˆONE{}POLY
09C006
ˆTWO{}POLY
09D006
ˆTHREE{}POLY
09E006
ˆTWO::POLY
09F006
ˆ::POLY
0A0006
ˆ{}POLY
0A7006
ˆ>POLY
0A1006
ˆ>TPOLY
Description
( ob → {ob} ob1 → Q )
Replaces ONE{}N for polynomial building.
( ob1 ob2 → Q )
Replaces TWO{}N for polynomial building.
( ob1 ob2 ob3 → Q )
Replaces THREE{}N for polynomial building.
( ob1 ob2 → :: )
Replaces 2Ob>Seco for polynomial building.
( Meta → :: )
Replaces ::N for polynomial building. As opposed to the regular ::N code, we do pop the
binary number. This is enforced by the entry
to the common polyxml code.
( Meta → Q )
Replaces {}N for polynomial building. As opposed to the regular {}N code, we do pop the
binary number. This allows us to enter the
code here with fixed sizes, as in ONE{}POLY
and TWO{}POLY.
( Meta → Q )
Builds polynomial.
( P ob → P' )
Replaces >TCOMP for polynomial building.
378
46. Polynomials
Addr.
0A2006
Name
ˆ>HPOLY
0A3006
ˆ>TPOLYN
0A4006
ˆ>HPOLYN
0A5006
ˆMKPOLY
2AB006
ˆMAKEPROFOND
4F4006
ˆTRIMext
4F5006
ˆPTrim
0A6006
ˆONE>POLY
302006
ˆTCHEBext
3DE006
ˆLRDMext
3DF006
ˆRRDMext
3E0006
ˆDEGREext
3E1006
ˆFHORNER
3E2006
ˆHORNext
3E4006
ˆMHORNext
Description
( P ob → P' )
Replaces >HCOMP for polynomial building.
( P ob1 .. obn #n → P' )
Improved >TCOMP for polynomial building.
( P ob1 .. obn #n → P' )
Improved >HCOMP for polynomial building.
( #n #k → P )
Makes polynomial of nth variable to the power
k.
( ob # → {{{...{o}...}}} )
Embedds ob in the given number of lists.
( Q → Q' )
Removes unnecessary zeros from polynomial.
( ob → ob' )
Trims polynomial.
( Q → Q' )
Increases variable depth. Constants (Z,Irr,C)
are not modified.
( zint → P )
Tchebycheff polynomial. If zint>0 then 1st
kind, if <0 then second kind.
( P # → [] )
Left ReDiMension. Adds 0 to the left of polynomial to get a symbolic vector of lenght #+1.
( {} # → {} )
Right ReDiMension: like LRDM but 0 at the
right and {}.
( {} → degre )
Degree of a list-polynomial.
( P/d r → P[X]_div_[X-r]/d r P[r]/d
)
Horner scheme.
( P r → P[X]_div_[X-r] r P[r] )
Horner scheme.
( P r → P[X]_div_[X-r] r P[r] )
Horner scheme for matrices.
46.1. Reference
Addr.
3E6006
Name
ˆLAGRANGEext
10F007
ˆRESULTANT
110007
ˆRESULTANTLP
111007
ˆRESPSHIFTQ
112007
ˆADDONEVAR
0CF007
ˆSHRINKEVEN
0D1007
ˆSHRINK2SYM
0D2007
ˆSHRINKSYM
0D3007
ˆSHRINK2ASYM
0D4007
ˆSHRINKASYM
103006
ˆPNMax
161006
ˆSWAPNDXF
379
Description
( M → symb )
Lagrange interpolation. Format of the matrix
is
[ [ x1 .. xn ] [ f(x1) .. f(xn) ]
]
Returns a polynomial P such that P(xi)=f(xi)
( P1 P2 → P )
Resultant of two polynomials. Depth of P is one
less than depth of P1 and P2.
( res g h P1 P2 → +/-res g' h' P1'
P2' )
Subresultant algorithm innerloop.
( P Q → P' )
Resultant of P and Q shifted.
gcd[Q(xr),P(x)]!=1 equivalent to r root of P' P' has same
depth than P and Q.
( P → P' )
Adds one variable just below the main var.
works for polynomial, not for fractions.
( P → P' )
Changes var Y=Xˆ2 in an even polynomial.
( N D → N' D' )
Shrinks 2 polynomials using symmetry properties.
( N → N' )
Shrinks 1 polynomial using symmetry properties. Degree of N must be even. If it is odd then
N should be divided by X+1.
( N D → N' D' )
Shrinks 2 polynomials using antisymmetry
properties.
( N → N' )
Shrinks 1 polynomial using antisymmetry
properties. Degree of N must be even. If it is
odd then N should be divided by X+1.
( P → Z )
Gets the coefficient of P with max norm.
( Qden Qnom → symb )
Builds a symbolic from rational polynomial.
380
46. Polynomials
Addr.
162006
Name
ˆNDXFext
163006
ˆSWAPFXND
164006
ˆFXNDext
3D7006
3D8006
ˆREGCDext
ˆEGCDext
0EA006
ˆPEvalFast?
10E007
ˆFLAGRESULTANT
46.1.4
Description
( Qnom Qden → symb )
Builds a symbolic from rational polynomial.
( symb ob → ob Qnom Qden )
Converts symbolic to rational polynomial.
( symb → Qnom Qden )
Converts symbolic to rational polynomial.
( a b → d u v au+bv=d )
( a b → d u v au+bv=d )
Bezout identity for polynomials.
( Z Pn → Z Pn F / Pn[Z] T )
Attempts to evaluate Pn at X1=Z using fast
register arithmetic. Fails if any of the following is true: Pn is not sunivariate; Z is polynomial after all; Z size is too big for register; Any
overflow occurs during Horner evaluation.
( symb1 symb2 → symb )
Resultant of two polynomials in symbolic form.
Tests
Addr.
10B006
Name
ˆUnivar?
10C006
ˆSUnivar?
0CC007
ˆPOLYPARITY
0D6007
ˆPOLYSYM
0D7007
ˆPOLYASYM
Description
( P → P flag )
Tests if polynomial is univariate.
( P → P flag )
Tests if polynomial is univariate and the coefficients are bounded by register size.
( poly → Z )
Tests if a polynomial (internal rep) is
even/odd/none. Z=1 if even, -1 if odd, 0 if
neither even nor odd.
( P → Z )
Tests symmetry of coefficients of polynomial.
Z=1 for symmetric, -1 for anti, 0 otherwise.
( P → Z )
Tests "antisymmetry" of coef of polynomial. Z=1
for symmetric, -1 for anti, 0 otherwise.
Chapter 47
Root Finding
In this chapter you will find entries related to finding roots of equations.
47.1
Reference
47.1.1
Root Finding and Numerical Solvers
Addr.
272006
Name
ˆMULMULText
274006
ˆMETAMM2
275006
276006
ˆCOMPLISText
ˆMETACOMPRIM
278006
ˆMETACOMP1
279006
ˆADDLISText
27A006
ˆDIVISext
27B006
ˆFACT1ext
27C006
ˆFACTOext
27D006
ˆZFACTO
Description
( {} % → {}' )
Multiplies multiplicities in a factor list by coeff.
( meta % → meta' )
Multiplies by % all multiplicities of meta.
( {} → {}' )
( Meta → Meta' )
Suppresses multiple occurrances of the same
factor by adding corresponding multiplicities.
( f1...fk-1 mk-1 meta-res mk fk #
→ f1...fk-1 mk-1 meta-res )
( {} %n ob → {}' )
Adds ob with multiplicity %n to the list.
Checks if ob is in {}.
( ob → {divisors} )
Returns list of divisors of ob.
( symb-poly → Lvar Q {} )
{} is the list of root/multiplicity of sym with
respect to the current variable.
( symb → Lvar Q {} )
{} is the list of factors/multiplicity of symb.
( C → {} C Lfact )
381
382
47. Root Finding
Addr.
27E006
Name
ˆSOLVext
27F006
ˆFRND
280006
ˆBICARREE?
281006
113007
ˆREALBICAR
ˆIROOTS
283006
ˆEVIDENText
284006
ˆEVIDSOLV
285006
ˆDEG2ext
286006
ˆMETADEG2
287006
ˆMETADEG1
288006
ˆDEG1
289006
ˆFDEG2ext
Description
( symb → {} )
Numeric solver for univariate polynomials.
The list contains the roots without multiplicity.
( ob → ob') )
Float rounding for %%, C%% or list of either
type. Used by SOLVext to reconstruct factors.
( P #5 → meta cst_coeff T )
( P #5 → P #5 F )
( P # → P # F )
Searches if P is a bisquared 4-th order equation. Returns a meta of factors and the multiplying coeff in that case.
( f1 #1 coef → meta rest T )
( P → list )
Finds integer roots of a polynomial.
( P → meta cst_coeff )
Returns the roots of a polynomial P. Calls the
numeric solver.
( P → meta cst_coeff )
Returns the roots of a 1st, 2nd order and
some other poly. Calls the numeric solver if
exact solving fails.
( P → {} )
Returns the roots of a 2nd order polynomial.
( P → P meta )
Returns the roots of a 2nd order polynomial.
P must be of order 1 or 2.
( P → P meta )
Returns the roots of a 1st order polynomial.
P must be of order 1.
( f → r )
Root of a first order factor. f is one level depth
deeper than r.
( P → meta-fact cst_coef )
Returns factors of a 2nd order polynomial
and the corresponding multiplying coefficient. tests for 1st order polynomial.
47.1. Reference
Addr.
28B006
Name
ˆRACTOFACext
28C006
ˆFACTORACext
28D006
ˆRFACText
28E006
ˆRFACT2ext
28F006
ˆRFACTSTEP3
290006
ˆRFACTSTEP5
291006
ˆMETASOLV
293006
ˆMETASOLV2
294006
ˆMETASOLV4
383
Description
( r → n d )
Converts root to factor. Factor is n/d, one level
depth deeper than r.
( f → r cst_coef )
Converts a factor to a root, solving 1st order factor. f and cst_coef are one level depth
deeper than r.
( ob # → {} intob meta )
{} is the list of variables. Meta is made of
roots or factors of numerator (N) or denomenator (D) or both (N/D), depending on #. ZERO
for roots N/D; ONE for roots N; TWO for roots
D with numeric solver call; THREE for roots
D without num. solver call; FOUR for factors
N/D; FIVE for factors N; SIX for factors D
with numeric solver call; SEVEN for factors D
without num.solver call.
( ob {} # → {} intob meta )
Like RFACText, but the list of variables is
given.
( ob → meta-fact )
Partial square-free factorization w.r.t. the
main variable. Extract trivial factors Etape
3 ob → meta-fact.
( %m on → add-to-meta-res )
Factorization of a square-free polynomial.
( pn cst_coeff → meta cst_coeff )
Non-integer factorization (sqrt extensions
and numeric). multiplicty is in LAM 5,.
( cst_coeff p → fr1 %m [fr2 %m] #
cst_coeff )
Returns roots/factors of 1st and 2nd order
polynomials.
( cst1 f1 ... fk #k cst2 → fr1 %m
... frn %m #2k cst_coeff )
Returns factors or convert to roots if needed.
#k=1,2 or 4, fk are of order 1 or 2.
384
47. Root Finding
Addr.
295006
Name
ˆADDMULTIPL
296006
ˆFACTOOBJext
093006
ˆALG48MSOLV
094006
ˆGMSOLV
095006
ˆGBASIS
096006
ˆGSOLVE
097006
ˆGFACTOR
099006
ˆREDUCE
Description
( meta cst_coeff → meta' cst_coeff
)
Adds multiplicities to a meta. Multiplicity is
in LAM 5.
( { fact mult } flag prg* prgˆ →
ob )
Rebuilds an object from its list of factors
(flag=TRUE) or roots (flag=FALSE) using
prg* to multiply and prgˆ to take multiplicity
power.
( Lp → Lidnt Lsol )
Calculates Groebner basis multivar solution.
LAM3 must be bound to Lvar and LAM4 to
Lidnt.
( Lp → meta-sol )
Calculates Groebner basis multivar solutions. LAM1 must be bound to the number of vars A solution is a list { o1 ... on }
where #n=LAM1 ok embedded in k-1 lists is
the value of the k-th var ok may be undef.
( Lp → G )
Calculate Groebner basis.
G = { 1 } if no solutions
G = { 0 } if identically true.
( Lp → Lg )
Calculate factorized Groebner basis.
Lg = { Lg1 Lg2 .. Lgn }
Lgi = independent solution
(probably)
Lg = {} if no solutions
Lg = { { 0 } } if identically
true.
( Lp fctr? → Lg )
Calculate Groebner basis or factorized Groebner basis. Redundant bases are not removed.
( p G → q )
Reduces polynomial with respect to given basis.
47.1. Reference
Addr.
09A006
Name
ˆFASTREDUCE
37D006
ˆROOTM2ROOT
0F2007
ˆPASCAL_NEXTLINE
0F3007
ˆDELTAPSOLVE
385
Description
( r P → q T / r P F )
Assembly version of REDUCE for polynomials
with short coefficients. Returns FALSE if an
overflow occurs during the reduction. Assumes r is a genuine polynomial (not constant). Assumes G is not empty. Assumes G
does not contain zeros (is trimmed).
( {}/V → V' )
Transforms list of root/multiplicites to vector
of roots.
( {} → {}' )
Finds next line in the Pascal triangle.
( Q → P )
Solves P(x+1)-P(x)=Q(x). Internal polynomial
function.
Chapter 48
Calculus Operations
The entries in this chapter are related to several aspects of Calculus,
such as limits, derivates, partial fraction expansions and Laplace transformations.
48.1
Reference
48.1.1
Limits and Series Expansion
Addr.
46F006
Name
ˆSYMTAYLOR
471006
ˆTRUNCDL
472006
ˆLIMSERIES!
477006
ˆLIMIT!
478006
ˆLIMSTEP1!
47C006
47F006
480006
481006
ˆLIMLIM!
ˆLIMCMPL!
ˆLIMEQUFR!
ˆLIMEQU!
Description
( symb id %/z → symb )
Taylor series expansion around point 0
(McLaurin's series) with regard to given variable, and of the given order.
( DL-l reste-l → truncated_DL )
Series expansion truncation.
( expression X=a|X %|zint → )
a lim DL-l rest-l num-l/deno-l equiv-l lvar #
Series expansion. #=1 for X=a-h or X=-1/h.
( symb → DL-l reste-l num-l/deno-l
equiv.-l lim. lvar flag )
lim. = { symf direction }
( symb → { DL-l reste-l
num-l/deno-l equiv.-l } flag )
( # lvar equiv-l → lvar lim )
( reste-1-l reste-2-l → reste-l )
( n/d # → n/d-l equiv % )
( {} # → {} / {}-equiv-l {}-equiv-l
{ # # # } )
386
48.1. Reference
Addr.
483006
Name
ˆLIM+-!
48C006
ˆLIMDIVPC!
48E006
490006
ˆLIMPROFEND!
ˆLIM%#!
49E006
4A1006
ˆLIM#VARX!
ˆHORNEXP!
4B6006
4BA006
4BD006
4BE006
4BF006
4C0006
4C2006
ˆVARCOMP!
ˆVARCOMP32!
ˆLIMVALOBJ!
ˆLIMVAL!
ˆEQUIV!
ˆLVARXNX2!
ˆFindCurVar
4C3006
15C006
ˆLIMVAR!
ˆRISCH13
48.1.2
Addr.
3DC006
1A1006
387
Description
( DL1...DLn #n op → DL flag )
DL = { DL-l reste-l num-l/deno-l equiv-l }.
( #ordre num-l deno-l → num-l
deno-l )
( num deno #prof → num deno )
( num-l deno-l {%...%} → num-l'
deno-l' #prof {%...%} )
( lvar lvar → #varx )
( lim lvar X-l reste-l → lvar DL
reste-l )
( var1 var2 → flag )
( var → 0: )
( ob lvar → symb )
( ob → coeff val )
( {} lequiv → equiv ordre )
( ob → ob lvarx lvarnx )
( symb → symb )
Sets a new current var if needed.
( symb → symb lvar )
( {}/{}' → {}'' )
Assuming {}' has length 1, divides all elements
of {} by this element. Used by RISCHext and
by SERIES to have a nicer output of series.
Derivatives
Name
ˆPDer
ˆDERIVext
Description
( {} → der )
( ob id → ob' )
( ob sym → ob' )
( ob V → V' )
Calculates the derivative of the object. For
a list argument calculates the gradient with
respect to the variables in the list. If the variable is a symbolic, the first variable in it is
used. Note that the gradient is a vector quantity, thus the result is returned as a list.
388
48. Calculus Operations
Addr.
1A3006
Name
ˆDERIVIDNT
1A4006
ˆDERIVIDNT1
1A5006
ˆDERIV
1A6006
ˆMETADERIV
1BD006
ˆMETADER&NEG
1A9006
ˆMETADER+
1AA006
ˆMETADER-
1AB006
ˆMETADER*
1AC006
ˆMETADER/
1AD006
ˆMETADERˆ
1AE006
ˆMETADERFCN
1AF006
ˆMETADERDER
1B0006
ˆMETADERI4
1B1006
ˆMETADERI3
1B2006
ˆMETADERIFTE
1B4006
ˆMETADEREXP
1B5006
ˆMETADERLN
Description
( ob id → ob' )
Main entry point for derivative with respect
to a identifier.
( ob → ob' )
Main entry point for derivative with respect
to the identifier stored in LAM1.
( symb → symb' )
Derivative of symb with respect to the variable stored in LAM1.
( Meta → Meta' )
Derivative of Meta object.
( Meta → Meta' )
Meta derivative and negate.
( Meta&+ → Meta' )
Meta derivative of addition.
( Meta&- → Meta' )
Meta derivative of subtraction.
( Meta&* → Meta' )
Meta derivative of multiplication.
( Meta&/ → Meta' )
Meta derivative of division.
( Meta&ˆ → Meta' )
Meta derivative of power.
( Meta → Meta' )
Meta derivative of a function.
( symb_id_; sym_fcn_; xDER #3 →
Meta' )
Meta derivative of a derivative of a function.
( Meta → Meta' )
Meta derivative of a defined integral.
( Meta → Meta' )
Meta derivative of an undefined integral.
( Meta → Meta' )
Meta derivative of IFTE.
( Meta → Meta' )
Meta derivative of EXP.
( Meta → Meta' )
Meta derivative of LN.
48.1. Reference
Addr.
1B6006
Name
ˆMETADERLNP1
1B7006
ˆMETADERLOG
1B8006
ˆMETADERALOG
1B9006
ˆMETADERABS
1BA006
ˆMETADERINV
1BB006
ˆMETADERNEG
1BC006
ˆMETADERSQRT
1BE006
ˆMETADERSQ
1BF006
ˆMETADERSIN
1C0006
ˆMETADERCOS
1C1006
ˆMETADERTAN
1C2006
ˆMETADERSINH
1C3006
ˆMETADERCOSH
1C4006
ˆMETADERTANH
1C5006
ˆMETADERASIN
1C6006
ˆMETADERACOS
1C7006
ˆMETADERATAN
1C8006
ˆMETADERASH
1C9006
ˆMETADERACH
389
Description
( Meta → Meta' )
Meta derivative of LNP1.
( Meta → Meta' )
Meta derivative of LOG.
( Meta → Meta' )
Meta derivative of ALOG.
( Meta → Meta' )
Meta derivative of ABS.
( Meta → Meta' )
Meta derivative of INV.
( Meta → Meta' )
Meta derivative of NEG.
( Meta → Meta' )
Meta derivative of SQRT.
( Meta → Meta' )
Meta derivative of SQ.
( Meta → Meta' )
Meta derivative of SIN.
( Meta → Meta' )
Meta derivative of COS.
( Meta → Meta' )
Meta derivative of TAN.
( Meta → Meta' )
Meta derivative of SINH.
( Meta → Meta' )
Meta derivative of COSH.
( Meta → Meta' )
Meta derivative of TANH.
( Meta → Meta' )
Meta derivative of ASIN.
( Meta → Meta' )
Meta derivative of ACOS.
( Meta → Meta' )
Meta derivative of ATAN.
( Meta → Meta' )
Meta derivative of ASINH.
( Meta → Meta' )
Meta derivative of ACOSH.
390
48. Calculus Operations
Addr.
1CA006
Name
ˆMETADERATH
1B3006
ˆDERARG
1CB006
ˆpshder*
1CC006
ˆSQRTINVpshd*
48.1.3
Description
( Meta → Meta' )
Meta derivative of ATANH.
( meta-symb → arg1 ... argk der1
... derk #k op )
Finds derivative of arguments.
( Meta1 Meta2 → Meta2&Meta1'&* )
Meta derivative utility.
( Meta1 Meta2 →
Meta2&SQRT&INV&Meta1'&* )
Meta derivative utility.
Integration
Addr.
07F007
Name
ˆODE_INT
2C5006
ˆIBP
2D0006
ˆPREVALext
2D1006
ˆWARNSING
2D2006
ˆINText
Description
( symb idnt → symb )
Integration with addition of a constant.
( u'*v u → u*v -u*v' )
Internal integration by parts. If u is a constant
return INTVX(u'*v)+u. If stack 2 is a list it must
be of the form { olduv u'*v } then olduv will
be added to u*v at stack level 2. This permits
multiple IBP in algebraic mode, e.g.
IBP(ASIN(X)ˆ2,X)
IBP(ANS(1),sqrt(1-Xˆ2))
IBP(ANS(1),C) the last step with an
integral
containing a cst C.
( symb inf sup x → symb|x=sup symb|x=inf )
Evaluates an antiderivative between 2 bounds
Does not check for discontinuities of symb in this
interval.
( symb inf sup vx → symb inf sup vx )
Warns user for singularity.
( symb x → int[$,x, symb, xt] )
Return unevaluated integral.
48.1. Reference
Addr.
2D3006
Name
ˆINT3
3DD006
ˆINTEGRext
48.1.4
Description
( f(x) x y → F(y) where F'=f )
Undefined integration. No limit for underdetermined form.
( {} → prim )
Partial Fractions
Addr.
3D2006
Name
ˆPARTFRAC
3D3006
ˆINPARTFRAC
48.1.5
391
Description
( o → symb )
Partial fraction expansion of o with respect to
the current variable.
( o list → symb )
Partial fraction expansion of o. lvar must be
bound to LAM2, list is =lvar if o is in external
format. list is NULL{} if o is still in internal format.
Differential Equations
Addr.
07E007
Name
ˆDESOLVE
081007
ˆLDECSOLV
082007
083007
ˆLDEGENE
ˆLDEPART
084007
ˆLDSSOLVext
085007
ˆODETYPESTO
Description
( list symb1 → list_sols )
( symb symb1 → list_sols )
Solves ordinary differential equation. For some
ode's returned level2 is not symb1.
( 2nd_member char_eq → solution )
Linear differential equation with constant coefficients.
( eq. carac → sol generale )
( 2nd membre, eq carac → eq. carac,
sol part )
( V M → V' )
M is the matrix of the system. V is the vector of
the 2nd members.
( type → )
Store ode type in variable ODETYPE.
392
Addr.
086007
48.1.6
48. Calculus Operations
Name
ˆODE_SEPAR
Description
( symb → symb symb-y symb-x T )
( symb → symb F )
Tries to separate symb as a product of a function
of y and a function of x.
Laplace Transformation
Addr.
087007
Name
ˆLAPext
088007
ˆILAPext
08B007
ˆILAPEXP
Description
( symb → symb' )
Laplace transform for polynomial*exp/sin/cos. Returns LAP() for unknown transforms.
( symb → symb' )
Inverse Laplace transform for rational fractions.
Delta functions for the integral part.
( ck rk → ck*exp[rk*x] )
Chapter 49
Summation
In this chapter, you will find the main entries related to summation,
and also some sub-routines used by those entries.
49.1
Reference
Addr.
0F9007
Name
ˆSUM
0FB007
ˆSUMVX
0FD007
ˆRATSUM
0FE007
ˆFTAYL
0FF007
ˆCSTFRACTION?
104007
ˆHYPERGEO
100007
ˆNONRATSUM
103007
ˆmeta_cst?
108007
ˆZEILBERGER
Description
( sym idnt → sym )
Internal SUM. The variable can be specified.
( sym → sym )
Internal SUMVX. Works always with respect to
the current variable.
( sym → sym )
Discrete rational sum.
( f shift → f' )
Taylor shift for rational fractions.
( ob → ob flag )
Taylor shift for rational fractions. Returns
TRUE if ob is a cst fraction.
( symb → symb )
Tests and does hypergeometric summation.
( z/symb → symb )
Discrete summation (hypergeometric case).
( meta → meta flag )
Tests for meta to be cst with respect to current var.
( f(n,k) n k d → C T )
( f(n,k) n k d → F )
Zeilberger algorithm * NOT IMPLEMENTED YET*.
393
394
49. Summation
Addr.
109007
Name
ˆSYMPSI
10B007
ˆSYMPSIN
11C007
ˆ%%PSI
10D007
ˆIBERNOULLI
0D9007
ˆNDEvalN/D
0DA007
ˆPEvalN/D
3C1006
ˆvgerxssSYMSUM
Description
( sym → Psi(x) )
Digamma function.
( sym int → Psi(x,n) )
Digamma function.
( %%x → %% )
Digamma function.
( #/zint → Q )
Bernoulli numbers.
( num deno n d → num' deno' )
Evals list poly over a list fraction.
( P n d → num d # )
Evals list poly over a list fraction.
( Meta2 Meta1 → meta )
Symbolic sum with tests for two zints.
lam'sumvar
bound
to
'id/lam'
and
lam'sumexpr to 'expr'.
Chapter 50
Modular Operations
The entries in this chapter are related to modular arithmetic and other
modular operations.
50.1
Reference
50.1.1
Modulo Operations
Addr.
252006
ˆFLAGFACTORMOD
Name
253006
ˆMFACTORMOD
256006
ˆLIFCext
0E1006
ˆPEvalMod
0E2006
ˆQAddMod
0E3006
ˆQSubMod
0E4006
ˆQMulMod
0E5006
ˆQDivMod
Description
( symb → symb )
FACTOR modulo.
( M → M' )
FACTOR modulo for amtrices.
( {contfrac} → fraction )
Converts continued fraction to rational.
( Q Z Zn → Q' )
Computes value of polynomial mod Zn.
( Q1 Q2 Zn → Q' )
Polynomial addition modulo Zn.
( Q1 Q2 Zn → Q' )
Polynomial subtraction modulo Zn.
( Q1 Q2 Zn → Q' )
Polynomial multiplication modulo Zn.
( Q1 Q2 Zn → Qquo Qrem )
Polynomial division modulo Zn. In regular division the coefficients in the remainder can
increase very quickly to tens of digits, thus
it is important to normalize the coefficients
whenever possible.
395
396
50. Modular Operations
Addr.
0E6006
Name
ˆQInvMod
0E7006
ˆQGcdMod
4C5006
4C6006
ˆISOL1
ˆISOLALL
4C7006
ˆISOL2ext
4C8006
ˆBEZOUTMSOLV
4C9006
ˆROOT{}N
4CA006
ˆMHORNER
4CB006
4CC006
4CD006
ˆMHORNER1
ˆSQFFext
ˆMSQFF
4CE006
ˆ%1TWO
4CF006
ˆMZSQFF
Description
( Q Zn → Q' )
Polynomial inversion modulo Zn.
( Q1 Q2 Zn → Q' )
Polynomial GCD modulo Zn for univariate
polynomials. The result is made monic.
( symb id → id symb' )
( symb id → id {} )
Internal SOLVE.
( symb id → symb' )
( symb id → {} )
Like ISOL1 if isolflag is set. Otherwise returns the list of all found solutions.
( Lpoly Lidnt → Lidnt sols )
If no extension in Lpoly, calls ALG48 GSOLVE
Otherwise, solves by Bezout "Gaussian" elimination. In the latter case, if system seems
underdetermined, Lidnt is truncated. Then
the system must be exactly determined and
polynomials must be prime together.
( meta of roots → list of roots )
Drops tagged roots.
( poly-l {r1...rk} # → P[r1...rk] )
Top-level call. Poly-l might be a matrix.
( P { r } → P[..r..] )
( Q → { F1 mult1 .. Fn multn } )
( Q → F1 mult1 .. Fn multn #2n )
Full square-free factorization of object. The
result is given as a Meta object.
( ob → ob %1 #2 )
Square free factorization of unknown (?) object. See MSQFF.
( Z → Z1 mult1 .. Zn multn #2n )
Full factorization of an integer.
50.1. Reference
Addr.
4D0006
Name
ˆMZSQFF1
4D2006
ˆMLISTSQFF
4D3006
ˆMETASQFFext
4DE006
ˆLIDNText
4DF006
ˆLVARXNXext
4E0006
ˆISPOLYNOMIAL?
4E1006
ˆ2POLYNOMIAL?
4E2006
ˆVXINDEP?
4E4006
ˆRLVARext
4E5006
4E6006
4E7006
ˆLLVARDext
ˆVXLVARext
ˆLVARext
397
Description
( Meta curfac %n newfac T → Meta
curfac %n+1 )
( Meta curfac %n newfac F → Meta'
newfac %1 )
Adds integer factor to factor list. If the
factor is the same as the last time, only the
multiplicity is increased.
( P → Meta )
Full square-free factorization of a polynomial
with a recursive call on the GCD of all coefficients.
( P-list → S1 %1 ..Se-1 %e-1 %e ee
Te Re )
Square-free factorization.
( ob → {} )
Gets list of all ids present in ob.
( symb → symb x lvarnx lvarx )
Finds variable of symb depending on current
variable and other variable. Using LVAR is
impossible here because of sqrt.
( ob → flag )
Returns TRUE if symb is polynomial with respect to current variable.
( symb1 symb2 → symb1 symb2 flag )
Returns TRUE if symb1 and symb2 are polynomial with respect to current variable.
( symb → symb flag )
Returns TRUE if symb is independent of current variable.
( ob → {} )
Recursive search of all variables.
( o → #depth o lvar )
( symb → symb lvar )
( ob → ob {} )
List of variables. Square roots are included in
the list of rational operators.
398
50. Modular Operations
Addr.
4E8006
Name
ˆVX>LVARext
4E9006
ˆVX>
4EA006
ˆVX!
4EC006
ˆLIDNTLVAR
4ED006
ˆLISTOPRAC
4EE006
ˆLISTOPext
4EF006
ˆLISTOPSQRT
4F0006
ˆLVARDext
4F2006
ˆDEPTHext
4F3006
4F6006
ˆDEPTHOBJext
ˆTRIMOBJext
Description
( ob → ob {} )
Like LVARext but the current variable is
added using >HCOMP. Square roots are included in the list of rational operators.
( {} → {}' )
If VX is in the list then moves it to the beginning of the list. Otherwise does nothing.
( {} → {} )
If VX is in the list then moves it at the beginning. Otherwise VX is added to the beginning
of the list.
( symb lidnt → symb lidnt lvar )
lvar is the list of variables in symb, but elements of lidnt are moved to the beginning of
lvar.
( → {} )
Returns the list of rational operator with sqrt
appended to the list.
( → {} )
List of basic "rational" operators without
square root.
( → {} )
List of basic "rational" operators with square
root.
( ob listop → lidnt )
( Meta listop → lidnt )
Determines list of variables in ob (or Meta)
using the given list of basic "rational" operators.
( ob → # )
Returns the max number of embedded lists in
ob.
( objet # → depth )
( ob → ob ' )
Trims object.
50.1. Reference
Addr.
4F7006
Name
ˆNEWTRIMext
4F8006
ˆ>POLYTRIM
4F9006
ˆELMGext
0E9006
ˆIsV>V?
0EB006
104006
ˆPZadic
ˆLISTMAXext
0EC006
ˆGCDHEUext
399
Description
( Q → Q )
Recursively tests if Q is a list of one constant element. This is much faster than
TRIMOBJext and sufficient for the output of
programs which are trimmed on the fly.
( meta → {} )
Equivalent to {}POLY TRIMOBJext.
( ob → ob' )
Trims small numbers (less than epsilon).
( v1 v2 → flag )
Returns TRUE if v1 is lexicographically after
v2.
( Q Z → Q' )
( P → P Z T depth )
( P → P ? F #0 )
Step 1 for gcdheu: Returns FALSE if gcdheu can not be applied (e.g. if P contains
irrquads). Returns TRUE otherwise, Z is the
max of all integers of P or 2*max if there are
complex in P.
( A B → a b c pr[pgcd] A'/G' B'/G'
flag )
Heuristic GCD.
Chapter 51
Sign Tables
A sign table is a list which describes thes sign of a expression in different
intervals of a parameter. The list has an odd number of elements and looks like
this:
{ value1 sign1.2 value2 sign2.3 ...signN-1.N valueN }
The values are key values of the parameter, usually −∞, +∞, and the
locations of singularities or zeros in the expression. The values must be ordered
and can be numbers or symbolic expressions. The signs show the sign of the
expression in the interval between the adjacent values. Signs are ’-’, ’+’,
and ’?’ (if the sign is unknown). To compute the sign table of an expression
with respect to the current variable, use the entry SIGNE1ext. For example,
the sign table of the expression ‘X 2 − 1’ is
{ −∞ ’+’ -1 ’-’ 1 ’+’ +∞ }
Below is a list of the entries related to sign tables.
51.1
Reference
Addr.
237006
Name
ˆSIGNE
0DC007
ˆSIGNE1ext
0DE007
ˆSIGNUNDEF
0DF007
ˆSIGNPLUS
Description
( symb → sign )
Compute the sign table of the expression with
respect to the current variable. Internal version of the UserRPL command SIGNTAB.
( expr → sign )
Sign table of a polynomial or rational expression.
( → sign )
Returns undefined sign table.
( → sign )
Returns always positive sign table.
400
51.1. Reference
Addr.
0E0007
Name
ˆSIGNMOINS
0E1007
ˆSIGNELN
0E2007
ˆSIGNEEXP
0E3007
ˆSIGNESIN
0E4007
ˆSIGNECOS
0E5007
ˆSIGNETAN
0E6007
ˆSIGNEATAN
0E7007
ˆSIGNESQRT
0E8007
ˆSUBSIGNE
0E9007
ˆSIGNERIGHT
0EA007
ˆSIGNELEFT
0EB007
ˆ>SIGNE
0EC007
ˆSIGNE>
0ED007
ˆSIGNMULText
0DB007
ˆPOSITIFext
0EE007
ˆZSIGNECK
401
Description
( → sign )
Returns always negative sign table.
( sign → sign )
Returns ln of a sign table.
( sign → sign' )
Returns exp of a sign table.
( sign → sign' )
Returns sin of a sign table.
( sign → sign' )
Returns cos of a sign table.
( sign → sign' )
Returns tan of a sign table.
( sign → sign' )
Returns atan of a sign table.
( sign → sign' )
Returns sqrt of a sign table.
( sign min max → sign' )
Truncates a sign table.
( sign ob → sign' )
Places ob at the end of a sign table.
( sign ob → sign' )
Places ob at the beginning of a sign table.
( sign → sign' )
Prepends { -infinity ? } to a sign table.
( sign → sign' )
Appends { ? +infinity } to a sign table.
( sign1 sign2 → sign' )
Multiplies two sign tables.
( ob → ob flag )
Tries to determine if ob is positive. In internal
representation, this depends on increaseflag so
that x-1 is positive if increaseflag is cleared,
negative otherwise, because x is assumed to
tend to +infinity or zero.
( ob → ob flag )
Returns sign of an expression. Error if unable
to find sign.
402
51. Sign Tables
Addr.
0F0007
Name
ˆZSIGNE
0F1007
ˆzsigne
07D007
ˆCHECKSING
Description
( ob → zint )
Returns sign of an expression. zint=1 for +, -1
for -, 0 for undef. Expression does not need to
be polynomial/rational.
( meta → zint )
Returns sign of a meta symbolic. zint=1 for +,
-1 for -, 0 for undef. Expression does not need
to be polynomial/rational.
( symb inf sup vx → symb inf sup vx
flag )
Checks for singularities in expr.
Chapter 52
Errors
The CAS error messages all have numbers starting with DE. You can
get a full list in Appendix E.
Entries ˆERABLEERROR and ˆGETERABLEMSG add DE00 to the message
number, so you only specify the last two digits of the message number. You
can naturally use the error commands described in Chapter 22 with the CAS
errors, using the full error numbers.
52.1
Reference
Addr.
57E006
Name
ˆERABLEERROR
57D006
ˆGETERABLEMSG
090006
ˆErrInfRes
091006
ˆErrUndefRes
092006
ˆErrBadDim
57F006
ˆCANTFACTOR
580006
ˆTRANSCERROR
581006
ˆNONUNARYERR
582006
ˆINTERNALERR
Description
( # → )
Calls CAS Error.
( # → $ )
Get string in erable messages table.
Error 305h
Generates "Infinite Result" error.
Error 304h
Generates "Undefined Result" error.
Error 501h
Generates "Invalid Dimension" error.
Error DE1Ch
Generates "Unable to find factor" error.
Error DE20h
Generates "Not reducible to a rational expression" error.
Error DE21h
Generates "Non unary operator" error.
Error DE26h
Generates "CAS internal error" error.
403
404
52. Errors
Addr.
583006
Name
ˆINVALIDOP
584006
ˆISOLERR
585006
ˆNONINTERR
586006
ˆINTVARERR
587006
ˆZ>#ERR
0EF007
ˆSIGNEERROR
588006
ˆZ<0ERR
589006
ˆVXINDEPERR
58A006
ˆNONPOLYSYST
58B006
ˆCOMPLEXERR
58C006
ˆVALMUSTBE0
58D006
ˆSWITCHNOTALLOWED
119007
ˆNONALGERR
58E006
58F006
ˆERR$EVALext
ˆSys1IT
Description
Error DE28h
Generates "Operator not implemented (SERIES)" error.
Error DE2Ah
Generates "No solution found" error.
Error DE2Ch
Generates "No solution in ring" error.
Error DE32h
Generates "No name in expression" error.
Error DE35h
Generates "Integer too large" error.
Error DE36h
Generates "Unable to find sign" error.
Error DE46h
Generates "Negative integer" error.
Error DE47h
Generates "Parameter is cur. var. dependent" error.
Error DE49h
Generates "Non polynomial systrem" error.
Error DE4Dh
Generates "Complex number not allowed"
error.
Error DE4Eh
Generates "Polyn. valuation must be 0" error.
Error DE4Fh
Generates "Mode switch not allowed here"
error.
Error DE50h
Generates "Non algebraic in expression" error.
( seco → action )
( ob → )
Execute object if display flag is set.
Chapter 53
CAS Configuration
The entries in this chapter provide ways to configure the CAS operations. The configurations that can be done here are the same that can be done
by the user via flags or the MODES input form.
53.1
Reference
Addr.
08F007
Name
ˆCFGDISPLAY
090007
ˆNEWVX
091007
ˆNEWMODULO
092007
ˆSWITCHON
093007
ˆSWITCHOFF
094007
ˆFLAGNAME
1DC007
(ˆPUSHFLAGS)
Description
( → )
Display current configuration of the CAS.
( → )
Input new current variable from the user.
( → )
Input new modulo from the user.
( #flag → )
Asks the user if a certain mode may be
switched on by toggling system flag #flag. Errors if the user does not want to switch.
( #flag → )
Asks the user is a certain mode may be
switched off by toggling system flag #flag. Error if the user does not want to switch.
( # → # $ )
Find the name of a flag.
( → )
Internal version of User PUSH command:
stores the current flag settings and path in
the CASDIR/ENVSTK variable.
405
406
53. CAS Configuration
Addr.
1DD007
Name
(ˆPOPFLAGS)
095007
ˆCOMPLEXON
096007
ˆCOMPLEXOFF
097007
ˆEXACTON
098007
ˆEXACTOFF
099007
ˆCOMPLEXMODE
09A007
ˆSETCOMPLEX
09B007
ˆCOMPLEX?
09C007
ˆREALMODE
09D007
ˆCLRCOMPLEX
09E007
ˆEXACTMODE
09F007
ˆSETEXACT
0A0007
ˆNUMMODE
0A1007
ˆCLREXACT
0A2007
ˆEXACT?
Description
( → )
Internal version of User POP command: pops
the last pushed flag settings and path from
the CASDIR/ENVSTK variable.
( → )
Turns complex mode on. Depending on system flag 120, the user is asked first.
( → )
Turns complex mode off. Depending on system flag 120, the user is asked first.
( → )
Turns exact mode on. Depending on system
flag 120, the user is asked first.
( → )
Turns exact mode off. Depending on system
flag 120, the user is asked first.
( → )
Set complex mode, refresh configuration display.
( → )
Set complex mode.
( → flag )
Test complex mode.
( → )
Set real mode, refresh configuration display.
( → )
Set real mode.
( → )
Set exact mode, refresh configuration display.
( → )
Set exact mode and gcd mode.
( → )
Set numeric mode, refresh configuration display.
( → )
Clear exact mode.
( → flag )
Test exact mode.
53.1. Reference
Addr.
0A3007
Name
ˆSTEPBYSTEP
0A4007
ˆNOSTEPBYSTEP
0A5007
ˆVERBOSEMODE
0A6007
ˆSILENTMODE
0A7007
ˆRECURMODE
0A8007
ˆNONRECMODE
0A9007
ˆPLUSAT0
0AA007
ˆSETPLUSAT0
0AB007
ˆPLUSATINFTY
0AC007
ˆCLRPLUSAT0
0AD007
ˆSPARSEDATA
0AE007
ˆFULLDATA
0AF007
ˆRIGORMODE
0B0007
ˆSLOPPYMODE
407
Description
( → )
Set step by step flag, refresh display.
( → )
Clear step by step flag, refresh display.
( → )
Set verbose mode, refresh configuration display.
( → )
Set silent mode, refresh configuration display.
( → )
Set recursive mode, refresh configuration display.
( → )
Set nonrecursive mode, refresh configuration
display.
( → )
Set positive mode, refresh configuration display.
( → )
Set positive mode.
( → )
Set positive infinity mode, refresh configuration display.
( → )
Set positive infinity mode.
( → )
Set full data mode, refresh configuration display.
( → )
Set sparse mode, refresh configuration display.
( → )
Set rigorous mode, refresh configuration display.
( → )
Set sloppy mode, refresh configuration display.
408
53. CAS Configuration
Addr.
0B1007
Name
ˆSLOPPY?
1D2006
ˆSAVECASFLAGS
1D4006
ˆRESTORECASFLAGS
1D5006
ˆCASFLAGEVAL
0C2007
ˆRCLMODULO
0C3007
ˆRCLPERIOD
0C4007
ˆRCLVX
0C5007
ˆSTOVX
0C6007
ˆSTOMODULO
0C7007
ˆRCLEPS
0C8007
ˆISIDREAL?
0C9007
ˆADDTOREAL
0CA007
ˆRESETCASCFG
1D0006
ˆVERNUMext
Description
( → flag )
Test sloppy mode.
( → )
Saves CAS flags and current var.
( → )
Restore CAS flags and current var.
( → )
Execute next runstream object with flag protection.
( → Z )
Fetch MODULO from the home directory.
( → sym )
Fetch PERIOD from the home directory.
( → id )
Fetch VX from home directory.
( ob → )
Store object in VX.
( ob → )
Store object in MODULO.
( → % )
Fetch EPS from home directory.
( id → id id T )
( id → id F )
Test if id is in the REALASSUME list.
( id → )
Add idnt to the list of real var.
( → )
Reset CAS config.
( → %version )
CAS version number.
Chapter 54
CAS Menus
The entries in this chapter return the built-in menus of CAS commands,
or do some other actions related to menus. For general information on menus,
turn to Chapter 37.
54.1
Reference
Addr.
1D1006
Name
ˆMENUXYext
08D007
ˆMENUext
0B2007
ˆMENUCHOOSE?
0B3007
ˆMENUCHOOSE
0B4007
ˆMENUGENE1
0B5007
ˆMENUBASE1
0B6007
ˆMENUCMPLX1
0B7007
ˆMENUTRIG1
0B8007
ˆMENUMAT1
Description
( #2 #1 → {} )
Make list of Erable commands between the
given numbers.
( $6...$1 → )
If the CAS quiet flag is not set, displays the six
strings as menu keys. Otherwise does nothing.
( → prg flag )
Return best CHOOSE command.
( {} → )
Offers a selection to the user. If Flag -117
is set, only installs a menu. If not, offer a
CHOOSE box.
( → {} )
Menu for CAS.
( → {} )
Base algebra menu.
( → {} )
Complex operations menu.
( → {} )
Trigonometric operations menu.
( → {} )
Matrix operations menu.
409
410
54. CAS Menus
Addr.
0B9007
Name
ˆMENUARIT1
0BA007
ˆMENUSOLVE1
0BB007
ˆMENUEXPLN1
0BC007
ˆMENUDIFF1
Description
( → {} )
Arithmetic operations menu.
( → {} )
Solver menu.
( → {} )
Exponential and logarithmic operations menu.
( → )
Differential calculus menu.
Chapter 55
Internal Versions of User RPL
Commands
The entries in this chapter are the closest correspondents to User RPL
commands.
55.1
Reference
Addr.
218006
Name
ˆISPRIME
1D6006
ˆFLAGEXPAND
1D8006
ˆFLAGFACTOR
1D9006
ˆFLAGLISTEXEC
1DA006
ˆFLAGSYMBEXEC
1DB006
ˆFLAGIDNTEXEC
1DC006
ˆFLAGINTVX
Description
( z/% → %0/%1 )
Internal ISPRIME.
( symb → symb' )
Internal xEXPAND. Expands symbolic expression.
( symb → symb' )
( z → symb )
Internal xFACTOR. Factors symbolic or number.
( symb {} → symb' )
Internal xSUBST for the case that level 1 is
an array or a matrix.
( symb symb' → symb'' )
Internal xSUBST for the case that level 1 is a
symbolic.
( symb id → symb' )
Internal xSUBST for the case that level 1 is
an id or a lam.
( symb → symb' )
Internal xINTVX.
411
412
55. Internal Versions of User RPL Commands
Addr.
1DD006
Name
ˆDERVX
1DE006
ˆSOLVEXFLOAT
1DF006
ˆSYMLIMIT
1E0006
ˆFLAGMATRIXLIMIT
1E1006
ˆTAYLOR0
1E2006
ˆFLAGSERIES
1E4006
ˆPLOTADD
1E5006
ˆFLAGIBP
1E6006
ˆFLAGPREVAL
1E7006
ˆMATRIXRISCH
1E8006
ˆFLAGRISCH
1E9006
ˆFLAGDERIV
1EA006
ˆFLAGLAP
1EB006
ˆFLAGILAP
1EC006
ˆFLAGDESOLVE
1ED006
ˆFLAGLDSSOLV
1EF006
ˆFLAGTEXPAND
1F0006
ˆFLAGLIN
Description
( symb → symb' )
Internal xDERVX.
( % → {} )
Internal xSOLVEVX for a float.
( symb symb' → symb'' )
Internal xLIMIT for scalars.
( [] symb → []' )
Internal xLIMIT for matrices.
( symb → symb' )
Internal xTAYLOR0.
( symb id z → {} symb' )
Internal xSERIES.
( symb → )
Internal xPLOTADD.
( symb1 symb2 → symb3 symb4 )
Internal xIBP.
( symb1 symb2 symb3 → symb4 )
Internal xPREVAL. Evaluates symb1 at the
points symb2 and symb3 and takes the difference.
( [] id → symb' )
Internal xRISCH for matrix arguments.
( symb id → symb' )
Internal xRISCH for non-matrix argumetns.
( symb id → symb' )
Internal xDERIV.
( symb → symb' )
Internal xLAP.
( symb → symb' )
Internal xILAP.
( symb symb' → symb'' )
Internal xDESOLVE.
( symb1 symb2 → symb3 )
Internal xLDEC.
( symb → symb' )
Internal xTEXPAND.
( symb → symb' )
Internal xLIN.
55.1. Reference
Addr.
1F1006
Name
ˆFLAGTSIMP
1F2006
ˆFLAGLNCOLLECT
1F3006
ˆFLAGEXPLN
1F4006
ˆFLAGSINCOS
1F5006
ˆFLAGTLIN
1F6006
ˆFLAGTCOLLECT
1F7006
ˆFLAGTRIG
1F8006
ˆFLAGTRIGCOS
1F9006
ˆFLAGTRIGSIN
1FA006
ˆFLAGTRIGTAN
1FB006
ˆFLAGTAN2SC
1FC006
ˆFLAGHALFTAN
1FD006
ˆFLAGTAN2SC2
1FE006
ˆFLAGATAN2S
1FF006
ˆFLAGASIN2T
200006
ˆFLAGASIN2C
201006
ˆFLAGACOS2S
206006
ˆSTEPIDIV2
207006
ˆFLAGDIV2
413
Description
( symb → symb' )
Internal xTSIMP.
( symb → symb' )
Internal xLNCOLLECT.
( symb → symb' )
Internal xEXPLN.
( symb → symb' )
Internal xSINCOS.
( symb → symb' )
Internal xTLIN.
( symb → symb' )
Internal TCOLLECT.
( symb → symb' )
Internal xTRIG.
( symb → symb' )
Internal xTRIGCOS.
( symb → symb' )
Internal xTRIGSIN.
( symb → symb' )
Internal xTRIGTAN.
( symb → symb' )
Internal xTAN2SC.
( symb → symb' )
Internal xHALFTAN.
( symb → symb' )
Internal xTAN2SC2.
( symb → symb' )
Internal xATAN2S.
( symb → symb' )
Internal xASIN2T.
( symb → symb' )
Internal xASIN2C.
( symb → symb' )
Internal xACOS2S.
( z1 z2 → z3 z4 )
Internal xIDIV2.
( symb1 symb2 → symb3 symb4 )
Internal xDIV2.
414
55. Internal Versions of User RPL Commands
Addr.
208006
Name
ˆFLAGGCD
209006
ˆPEGCD
20B006
ˆABCUV
20C006
ˆIABCUV
20D006
ˆFLAGLGCD
20E006
ˆFLAGLCM
20F006
ˆFLAGSIMP2
210006
ˆFLAGPARTFRAC
211006
ˆFLAGPROPFRAC
212006
ˆFLAGPTAYL
213006
ˆFLAGHORNER
214006
ˆEULER
216006
ˆFLAGCHINREM
217006
ˆICHINREM
219006
ˆSOLVE1EQ
21A006
ˆSOLVEMANYEQ
21B006
ˆZEROS1EQ
Description
( symb1 symb2 → symb3 )
Internal xGCD for the case with two symbolica arguments.
( symb1 symb2 → symb3 symb4 symb5
)
Internal xEGCD for polynomials.
( symb1 symb2 symb3 → symb4 symb5
)
Internal polynomial xABCUV.
( z1 z2 z3 → z4 z5 )
Internal integer xIABCUV.
( {} → {} symb )
Internal xLGCD.
( symb1 symb2 → symb3 )
Internal xLCM.
( symb1 symb2 → symb3 symb4 )
Internal xSIMP2.
( symb → symb' )
Internal xPARTFRAC.
( symb → symb' )
Internal xPROPFRAC.
( P(X) r → P(X+r) )
Internal xPTAYL.
( symb1 symb2 → symb3 symb4 symb5
)
Internal xHORNER.
( z → z' )
Internal xEULER.
( A1 A2 → A3 )
Internal xCHINREM.
( A1 A2 → A3 )
Internal xICHINREM.
( symb id → {} )
Internal xSOLVE for single equations.
( [] []' → {}'' )
Internal xSOLVE for arrays of equations.
( symb id → {} )
Internal xZEROS for single equations.
55.1. Reference
Addr.
21C006
Name
ˆZEROSMANYEQ
21D006
ˆFCOEF
21E006
ˆFROOTS
21F006
ˆFACTORS
220006
ˆDIVIS
223006
ˆrref
229006
ˆMADNOCK
22A006
ˆSYSTEM
22B006
ˆVANDERMONDE
22C006
ˆHILBERTNOCK
22E006
ˆCURL
22F006
ˆDIVERGENCE
230006
ˆLAPLACIAN
231006
ˆHESSIAN
232006
ˆHERMITE
233006
ˆTCHEBNOCK
234006
ˆLEGENDRE
235006
ˆLAGRANGE
236006
ˆFOURIER
415
Description
( [] []' → {} )
Internal xZEROS for arrays of equations.
( [] → symb )
Internal xFCOEF.
( symb → [] )
Internal xFROOTS.
( symb → {} )
Internal xFACTORS.
( symb → {} )
Internal xDIVIS.
( M → A M' )
Internal xrref.
( M → symb1 []' []'' symb3 )
Internal xMAD.
( [] []' → []'' {} []''' )
Internal xLINSOLVE.
( {} → M )
Internal xVANDERMONDE.
( z → M )
Internal xHILBERT.
( [exprs] [vars] → [] )
Internal xCURL.
( [exprs] [vars] → symb )
Internal xDIV.
( [expr] [vars] → symb )
Internal xLAPL.
( symb A → M A' A'' )
Internal xHESS.
( z → symb )
Internal xHERMITE.
( %degree → symb )
Internal xTCHEBYCHEFF.
( z → symb )
Internal xLEGENDRE.
( A → symb )
Internal xLAGRANGE.
( symb z → C% )
Internal xFOURIER.
416
55. Internal Versions of User RPL Commands
Addr.
238006
Name
ˆTABVAR
239006
ˆFLAGDIVPC
23A006
ˆFLAGTRUNC
23B006
ˆFLAGSEVAL
23C006
ˆXNUM
23D006
ˆREORDER
23E006
ˆUSERLVAR
23F006
ˆUSERLIDNT
241006
ˆADDTMOD
242006
ˆMADDTMOD
243006
ˆSUBTMOD
244006
ˆMSUBTMOD
245006
ˆMULTMOD
Description
( symb → symb {{}} grob )
Internal xTABVAR.
( symb1 symb2 z → symb3 )
Internal xDIVPC.
( symb1 symb2 → symb3 )
Internal xTRUNC.
( symb → symb' )
Internal xSEVAL.
( symb → symb' )
Internal xXNUM.
( symb id → symb' )
Internal xREORDER.
( symb → symb [] )
Internal xLVAR.
( symb → [] )
Internal xLNAME.
( symb1 symb2 → symb3 )
Internal xADDTMOD for scalars.
( M M' → M'' )
Internal xADDTMOD for matrices.
( symb1 symb2 → symb3 )
Internal xSUBTMOD for scalars.
( M M' → M'' )
Internal xSUBTMOD for matrices.
( symb1 symb2 → symb3 )
Internal xMULTMOD.
Chapter 56
Miscellaneous
In this chapter are listed the entries that did not fit in any of the previous chapters.
56.1
Reference
56.1.1
Verbose Mode Display Routines
Addr.
579006
Name
ˆVerbose1
57A006
ˆVerbose2
57B006
ˆVerbose3
57C006
ˆVerboseN
56.1.2
Addr.
257006
258006
259006
25A006
25B006
25C006
25D006
25E006
Description
( $ → )
Display message on line 1 if verbose mode on.
( $ → )
Display message on line 2 if verbose mode on.
( $ → )
Display message on line 3 if verbose mode on.
( $ # → )
Display message on given line if verbose mode on.
Evaluation
Name
ˆEvalNoCKx*
ˆEvalNoCKx+
ˆEvalNoCKxˆEvalNoCKx/
ˆEvalNoCKxˆ
ˆEvalNoCKxCHS
ˆEvalNoCKxINV
ˆEvalNoCKxMOD
Description
( ob ob' →
( ob ob' →
( ob ob' →
( ob ob' →
( ob ob' →
( ob → ob'
( ob → ob'
( ob ob' →
417
ob''
ob''
ob''
ob''
ob''
)
)
ob''
)
)
)
)
)
)
418
Addr.
25F006
260006
261006
262006
263006
264006
265006
56.1.3
56. Miscellaneous
Name
ˆEvalNoCKxPERM
ˆEvalNoCKxCOMB
ˆEvalNoCKxOR
ˆEvalNoCKxAND
ˆEvalNoCKxXOR
ˆEvalNoCKxXROOT
ˆTABVALext
Conversion
Addr.
266006
Name
ˆTOLISText
267006
ˆFROMLISText
56.1.4
Description
( ob ob' → ob'' )
( ob ob' → ob'' )
( ob ob' → ob'' )
( ob ob' → ob'' )
( ob ob' → ob'' )
( ob ob' → ob'' )
( fnct x {} → {}' )
Table of values.
Description
( o1..on #n → Lvar Q1..Qn )
Convert meta of symbolic objects to internal
form.
( Lvar Meta L → L' )
Conversion of elements of Meta objec to user
format. Meta does not contain the #n number
of element. L is the list of depth of the elements
of Meta. For example to convert a polynomial,
a vector and a matrix:
Lvar = { X }
Meta = { Z1 Z3 }
{ Z0 Z1 }
{ { Z1 { Z1 Z0 } } }
L = { #0 #1 #2 }
L' = { 'X+2' { 0 1 } { { 1 X } } }.
Qpi
Addr.
074007
Name
ˆQPI
073007
ˆQpiZ
Description
( ob → ob' )
Internal xXQ.
( ob → symb )
Calls ˆQpi% and converts the resulting (real) integers into zints.
56.1. Reference
Addr.
075007
Name
ˆQpiSym
076007
ˆQpiArry
077007
ˆQpiList
078007
ˆQpi
079007
ˆQpi%
07A007
ˆGetRoot
07B007
ˆApprox
56.1.5
419
Description
( symb → symb' )
Internal xXQ for symbolics.
( [] → []' )
Internal xXQ for arrays. Converts each element of
the array.
( {} → {}' )
Internal xXQ for lists. Converts each element of the
list.
( %/C% → symb )
Internal xXQ for real and complex numbers.
( % → symb )
xXQ for reals, but does not convert numbers to zints.
( %' → %' %'' )
Tries to find a square number which is a factor
of the argument. The algorithm only tries numbers smaller than 1024ˆ2-1 and assumes that %
is an integer. The returned results are such that
%=(%')ˆ2*%''. For numbers which do not contain a
square factor, %'=1 and %''=%.
( % → %' %'' )
Approximates a real number with a fraction. Returns numerator %' and denominator %''. The accuracy of the approximation is determinated by the
current display format.
Infinity
Addr.
2E2006
2E3006
2E4006
2E5006
Name
ˆINFINIext
ˆMINUSINFext
ˆPLUSINFext
ˆ?ext
2E6006
ˆPOSINFext
2E1006
ˆTESTINFINI
Description
( → '∞' )
( → '-∞' )
( → '+∞' )
'?'
Pushed the undefined symbolic.
( symb → symb # )
Returns #1 if the symbolic contains '∞'.
( ob → ob flag )
Test if object contains infinity.
420
Addr.
2E7006
56.1.6
Addr.
2EA006
2EB006
2F1006
2E8006
2F2006
2E9006
2F4006
2F3006
2F5006
2F6006
2EC006
2F9006
2FA006
2EE006
2ED006
2EF006
2F0006
2F8006
2F7006
56.1.7
56. Miscellaneous
Name
ˆPOSUNDEFext
Description
( symb → symb # )
Returns #1 if the symbolic contains the undefined symbolic '?'.
Built-In Constants
Name
ˆpi
ˆmetapi
ˆmeta-pi
ˆpisur2
ˆmetapi/2
ˆpisur-2
ˆmeta-pi/2
ˆmetapi/4
ˆmeta-pi/4
ˆpifois2
ˆ'xPI
ˆbase_ln
ˆmeta_e
ˆ'xi
ˆmetai
ˆipi
ˆmetaipi
ˆmetapi*2
ˆdeuxipi
Description
( → 'π' )
( → π #1 )
( → π xNEG #2 )
( → 'π/2' )
( → π 2 x/ #3 )
( → '-π/2' )
( → π 2 x/ xNEG #4 )
( → π 4 x/ #3 )
( → π 4 x/ xNEG #4 )
( → '2*π' )
( → xPI )
( → 'e' )
( → e #1 )
( → xi )
( → i #1 )
( → 'i*π' )
( → i π x* #3 )
( → π 2 x* #3 )
( → '2*i*π' )
List Application
Addr.
3F0006
Name
ˆDIVOBJext
3F2006
ˆLOPDext
Description
( {o1...on} ob → {o1/ob...on/ob} )
Division of all elements of a list by ob. Tests if
ob=1.
( {o1...on} ob → {o1/ob...on/ob} )
LOPDext calls QUOText for the division, unlike
DIVOBJ which calls RDIVext.
56.1. Reference
Addr.
269006
Name
ˆLOP1ext
26A006
ˆLOPAext
10F006
ˆLOPMext
45F006
ˆLISTEXEC
460006
461006
ˆLISTEXEC1
ˆSECOEXEC
268006
26B006
ˆPFEXECext
ˆLISTSECOext
26D006
ˆCK1TONOext
56.1.8
421
Description
( {} ob binop → {}' )
Applies non-recursively << ob binop >> to the
elements of the list.
( {} ob binop → {}' )
Applies recursively << op binop >> to the elements of the list (not the list elements themselves).
( ob {} → {}' )
Multiplies each element of the list by the given
object.
( ob {} → ob' )
( ob {} → {}' )
The list should be of the form { 'X=1' 'Y=2' ...
} in the first case or { 'X=1' 'X=2' } in the second case. In the first case, all occurences of X
in ob are replace by 1, or Y by 2, etc. In the
second case ob is evaluated with X=1, X=2 successively.
( {} objet → {}' )
( {} prog → {} )
Executes prog on each element of ob.
( symb prg → symb )
( composite → composite )
Applies 1LAM non-recursively to all elements
of the list.
( ob → ob' )
Applies prg to ob, recursively for lists. prg is
fetched from runstream.
Irrquads
Addr.
167006
Name
ˆTYPEIRRQ?
168006
ˆDTYPEIRRQ?
165006
ˆQXNDext
Description
( ob → flag )
Is ob an irrquad?
( ob → ob flag )
DUP, then ˆTYPEIRRQ?.
( irrq → a b c )
b=0 and c=1 if stack level 1 is not an irrq.
422
56. Miscellaneous
Addr.
166006
2D8006
ˆIRRQ#ULTIMATE
508006
ˆQCONJext
509006
ˆQABSext
51A006
ˆQNORMext
4D4006
ˆSECOSQFFext
124006
ˆPREPARext
2DA006
ˆLISTIRRQ
56.1.9
Name
ˆNDXQext
Description
( a b c → irrq )
( ob → # c )
Finds « depth and returns ultimate c of an irrq.
( irrq → irrq' )
irrq-conjugate of an irrq. This is not the complex conjugate.
( irrq → irrq sign )
Finds the sign of an irrq. Work always if irrq is
made of Z.
( Zirr → aˆ2-b*cˆ2 )
Irrq-norm of an irrquad. This is not the complex modulus.
( :: x<< a b c x>> → { fact1 mult1
... factn multn } )
Factorization of irrquads and Gauss integers.
( o1 o2 → a1 b1 c1 a2 b2 c2 )
Returns irrquad decomposition of o1 and o2.
with either c1=c2 or c1 and c2 have no factors in comon. c1<c2, ordering handled by
LESSCOMPLEX? is made by type, then by CRC.
( ob {} → {}' )
Add the C-part of all irrquads of object to the
list.
Miscellaneous
Addr.
3E7006
3FB006
Name
ˆPSEUDOPREP
ˆHSECO2RCext
3FC006
ˆSECO2CMPext
Description
( o2 o1 → o2*a1.nˆ o1 a1.nˆ )
( ob → ob' )
Conversion of constants from internal to user
form.
( seco → symb )
Back conversion of complex. polarflag should
be disabled if not at the top level of rational
expressions.
56.1. Reference
Addr.
3FF006
Name
ˆVALOBJext
401006
ˆVAL2ext
402006
ˆINVAL2
403006
ˆMETAVAL2
404006
ˆVAL1
405006
ˆVAL1M
45C006
ˆIDNTEXEC
121006
ˆMP0
26C006
ˆrpnQOBJext
423
Description
( # {..{Q}..} {var1..varn} →
{..{ob}..} )
Back conversion of objects embedded at depth
# in lists. Simplifies var1..varn.
( # {..{Q}..} {var1..varn} →
{..{ob}..} )
Back conversion of objects embedded at depth
# in lists. Does not simplify var1..varn. Conversion is done in asc. power if positivfflag is
set, which is useful for SERIES and LIMIT
commands.
( P # → symbpoly )
LAM2 must contain Lvar, # is the depth.
( # Meta_list → Meta_symb )
LMA2 must contain Lvar, LAM1 is modified.
( ob → ob )
LAM2 must contain Lvar, LAM1 is modified.
( ob → Meta_symb )
LAM2 must contain Lvar, LAM1 is modified.
( symb idnt → symb' )
Tries to find idnt such that symb=0. Return
a solution as an equality 'idnt=..' in symb'.
( ob → ob 1 )
Returns number 1 of the selected type. The
symbolic/ROMPTR one looks very strange it
is used to avoid infinityˆ0/undefˆ0 to return 1.
( ob → ob' )
prg is fetched from the stack. Looks for all d1,
d2, ... at the beginning of the name of idnt to
determine if idnt represents a derivative of a
user function. Stops if at a time the stripped
idnt is in the current directory. Example
'd2d1Y' returns { #2 } << >>
if 'd2d1Y' is not defined and 'd1Y' is defined
as << >> or
{ #2 #1 } 'Y'
if d2d1Y d1Y and Y are not defined.
424
56. Miscellaneous
Addr.
29D006
Name
ˆSIMPIDNT
29F006
ˆRCL1IDNT
2A7006
ˆSWPSIMPNDXF
2A8006
ˆSIMPNDXFext
2B6006
2BD006
2BE006
ˆCMODext
ˆSQFF2ext
ˆPPZ
117007
ˆPPZZ
2BF006
2C0006
2C1006
ˆPZHSTR
ˆHORNER1ext
ˆPEval
2C6006
ˆSQRT_IN?
2C7006
2C9006
2CA006
ˆIS_SQRT?
ˆIS_XROOT?
ˆSTOPRIMIT
2CB006
2D4006
ˆCONTAINS_LN?
ˆFOURIERext
Description
( idnt → ob )
Evaluates idnt (looks recursively for its content if defined). Does not error for circular
definition, but displays a warning.
( idnt/lam → ob )
Recursive content of an idnt. LAM1 to
LAM3 must be bound.
( ob2 ob1 → ob1/ob2 )
Simplified fraction (internal).
( ob2 ob1 → ob2/ob1 )
Simplified fraction (internal).
( C2 C1 → C1 C2_mod_C1 )
( l1...ln #n-1 → l1'...ln' #n-1 )
( p → p/pgcd pgcd )
ob is the gcd of all constant coefficients of P
(integer, Gauss integers, irrquads with the
implementation of the "gcd" for irrquads).
( ob → ob zint )
PPZ with further check to ensure returning a
zint.
( a z → a mod z )
( P r → P[r] )
( P r → P[r] )
P must be a list polynomial.
( {} → {} flag )
Returns TRUE if one element of {} is a symb
containing a sqrt.
( symb → flag )
( symb → flag )
( symb → )
Stores antiderivative in PRIMIT variable.
( symb → symb flag )
( symb n → cn )
Computes n-th Fourier coefficient of a 2 π periodic function.
56.1. Reference
Addr.
2D9006
Name
ˆLESSCOMPLEX?
2DD006
ˆTABLECOSext
2DE006
ˆTABLETANext
101007
ˆLINEARAPPLY
106007
ˆA/B2PQR
107007
ˆGOSPER?
0CB007
ˆFRACPARITY
0D5007
ˆFR2ND%
4D1006
ˆMSECOSQFF
425
Description
( ob1 ob2 → ob1 ob2 flag )
Compares objects by type and then by CRC.
flag is true if ob1 is less complex than ob2
(ob1>ob2). If ob1 or ob2 is an irrq, find first
ultimate type of ob1 and ob2. If these ultimate types are equal sort is done by comparing the << depth.
( → {} )
Table of special COS values (k*pi/12).
( → {} )
Table of special TAN values (k*pi/12).
( symb nonrat_prg rat_prg → symb )
Applies linearity. nonrat_prg is applied for a
non rational part symb → symb. rat_prg is
applied for a rational part symb → symb. Linearity is applied on symb.
( A B → P Q R )
Writes a fraction A/B as E[P]/P*Q/E[R]. Q
and positive shifts of R are prime together.
( P Q R → P R Y T )
( P Q R → F )
Solves P = Q E[Y] - R Y for Y.
( fr → Z )
Tests if a fraction (internal rep) is
even/odd/none. Z=1 if even, -1 if odd, 0
if neither even nor odd.
( fraction-l → N D % )
Extract trivial power of fraction.
( ob → Meta )
Factorization of an extension.
Part V
Appendices
Appendix A
Development Tools
You have basically two choices for developing software for the HP49G.
The programs can either be written and tested on a PC, using special tools and
an emulator, or you can write software directly on the HP49G.
This chapter will describe tools for the HP49G calculator that make it a
suitable programming environment for System RPL development. The HP49G
calculator includes a built-in compiler, disassembler and some sort of debugger
(which, to say the truth, could be improved), plus some other little tools that
can be of use to the System RPL programmer. However, for big programming
tasks this is not enough: some other tools are necessary to make programming easier. Because of this, some third-party tools will also be described.
With a good knowledge of the built-in and third-party tools, the HP49G can
be used as a complete and compact programming environment. All the programs described here can be freely downloaded from The HP Software Archive,
http://www.hpcalc.org.
The built-in programming tools you will need are, by default, not accesible to the user. They are in two libraries, which are not attached by default.
Library 256 contains several useful commands for “hacking” with the calculator, and also the disassembler. Library 257 contains MASD, the compiler. You
should have these libraries always attached. If you have extable installed (and
you should — see section A.1), then library 256 will be automatically attached.
Library 257 (MASD) does not really need to be attached, because it is possible
to call MASD from library 256. Nevertheless, it is still good to have it attached.
The STARTUP variable is useful to configure the calculator. This variable
(which must be in the HOME directory) contains an object to be executed after
each warmstart. It can be used to set all parameters lost by a warmstart that
you want to keep, or to do anything else you want. The following program
will set user mode (which is lost in a warmstart); for efficient programming
(and even for efficient use) it is essencial to make some key assignments. The
program also attaches library 257.
« -62 SF 257 ATTACH »
429
430
A.1
A. Development Tools
The Entry Points Library
For System RPL development, the extable library is virtually indispensable. This library contains the tables of supported entry points and addresses.
It is with the help of this library that you can write DUP and get the correct address for this command; without it, you would need to enter PTR 3188 every
time or write an equate for this command manually. In disassembly (including the System RPL stack (see section A.3)), it allows you to get the name of
the commands, instead of only their addresses. Basically, this library is pretty
much essential.
Transfer extable to your calculator and install it as any other library.
That is all you need to do to use command names instead of addresses. Extable
appears in the library menu, and it contains five user-accessible commands.
The first command, nop, does nothing :-). Probably, there was a command in that position before, but it was removed, and another command that
does nothing was put there not to change the other rompointers.
The other four commands, fortunately, are sometimes useful :-) (if not
directly then through the Emacs library). The GETADR command returns the
address of an entry. Just put the name of the entry (a string) in level one and
run it. The inverse operation is done by GETNAME: give it an address, and it
will return the name of the entry.
If you do not know the exact name of an entry, the last two commands
will help you. Put a string with the first few letters of the command in level one,
run GETNAMES and, voilà, a list with the names of all commands that start with
those letters is returned. The last command, GETNEAR, is even more powerful:
give it a string, and all commands whose names contain that string (even if in
the middle of the command) will be returned.
A.2
About Key Assignments
Even though assigning keys is not directly related to System RPL programming, we will describe here the KEYMAN library, written by Wolfgang
Rautenberg (e-mail: [email protected]). The latest version is 9.2001.
This library simplifies the assignment, deletion and recalling of keys, but, most
importantly, allows a key to behave differently if it is pressed longer than usual
or double pressed.
You will find several commands inside this library. The A?D command
A.2. About Key Assignments
431
is used to assign and delete keys. To assign something to a key, put the object
in level one and press A?D shortly. Then, press the key you want to assign
to (shifts and shift-holds work, of course). The key is assigned. To delete an
assignment, press A?D for a slightly longer time, and then the key from which
you want to remove the assignment. The command RclK allows one to recall
the assignment of any key. It works like the previous commands: press it
(briefly) and then the key. A longer press will return a list of all the keys
assigned.
The commands above are just other ways to do what was already possible with the built-in commands. But the real power is in the IfE?P, IfD and
IfL commands. The first serves two functions: it allows a key to have different meanings when in edit mode and when not, or to have different meanings
when in program mode and when not. To use it, put the object to be run in edit
or program mode in level two, the object to be run in normal mode in level one,
and press IfE?P. A short press will create a program that evaluates the object
in level two if the calculator is in edit mode, or the object in level one if not.
A longer press does the same, but the test is based on whether program entry
mode is active or not.
The IfD and IfL commands are similar. To use IfD, put in level two
the object to be run if the key is pressed twice (like with a computer mouse) —
double pressed — and put in level one the object to be run if the key is pressed
once. Run IfD, and you will have a single program that executes one of the
objects according to how the key was pressed. Note that assignments produced
with IfD will slightly delay execution on a single keypress, since the calculator
must wait to see if the double press will happen or not. The command IfL is
similar, but it allows different actions based on how long the key is pressed:
you have seen this behaviour in the A?D command. The object to be run in a
longer press is in level two.
All the If commands have an extra feature. Any of the two objects in
the stack can be a real number in the form rc.p, where r is the row, c is the
column and p is the plane (normal, left-shifted, right-shifted, left-shift-hold,
etc.). In the program created with the If commands, these numbers will be
replaced by the standard key assignment of the corresponding key. This is
really useful for making assignments which do not disturb the normal function
of a key but just add functionality in a special mode or keypress technique.
If you give a real number that is not a valid keycode, it will be replaced by a
command to make a beep.
Two other commands can sometimes be useful: →TO? inserts the System RPL command TakeOver in the beginning of the program when the key
432
A. Development Tools
is pressed shortly. This is necessary if you want the command to be executed
while the command line is active. A longer press inserts UnlockAlpha in the
beginning of the program, useful when it is assigned to an alpha-shifted key.
Finally, K&SA recalls the keycode and standard assignment for any key. This
is used when you want to add new functionality to a key. When this standard
assignment is a command in a library (that is, a ROM Pointer, also called a
XLIB name), the pointer is recalled to level two, and its contents is put in level
one.
In the following sections, we will show some examples of key assignments built with KEYMAN commands.
A.3
Hacking Tools
The tools described here make the life of the programmer easier. They
give access to some functions which are normally not available for pure User
RPL users of the calculator. First, the built-in tools in the HP49G will be described. Later, a third-party library will be described.
Before describing the built-in tools found in library 256, we will mention
a flag that is very useful to System RPL programmers: flag –85. When this flag
is set, the “System RPL Stack” is active: in the stack the objects are decompiled
using the System RPL decompiler before being displayed. That means that,
where one would see just External with the normal stack, the name for the
entry (or PTR and the address, if no name is found) will be displayed, if you
have the extable library (see section A.1) installed. Play with it a bit and you
will see how useful it can be. Some objects (most notabily real numbers and
integers) keep their usual notation, but in the interactive stack all objects are
decompiled. This “System RPL Stack” is like the one produced by the command
SSTK command of the JAZZ library for the HP48 calculators.
Probably you will be switching between the two kinds of stack display
all the time. It is a good idea to assign a simple program to a key to toggle
this display. A possibility is to assign it to Right-shift MODE. This normally is
the key that marks the end of selection in edit mode. Since this key is unused
when not in edit mode, it is a good example of the use of the KEYMAN library.
To create this assignment, first put the program to be run when in edit mode
in level two. This is easy: just use keycode 22.3. Then, write a simple User
RPL (or System RPL, if you want) program to toggle flag –85 (this task if left
to the reader — but read the description of OT49 in section A.3.1 first). Finally,
press IfE?P briefly and use →TO? on the resulting program (because it must
A.3. Hacking Tools
433
be able to run while in edit mode), and assign it to the key, with A?D or the ASN
command.
Library 256 contains some useful tools for the programmer. This library
does not show up in the library menu (because it does not have a title), but
you can get a menu with its commands by typing 256 MENU. If the library is
attached (as it should be), you can type the commands, look up them in the
catalog and an option will appear in the Apps menu, which says “Development
lib”, giving access to all the commands in the library.
Here is a description of the commands present in the library:
Command
→H
H→
→A
A→
S→H
H→S
→LST
→ALG
→PRG
COMP→
Description
“To hex”: This converts an object into a string of hexadecimal
characters. A common tool since the HP48 days to ease transfer of binary objects.
“From hex”: This is the opposite transformation: creates an
object from a string of hexadecimal characters.
“To address”: Given an object, this command returns the address of the object, which is always a five-nibble hxs. Objects
whose address is less than # 80000h are in ROM, and objects
whose address is greater than that are in RAM.
“From address”: This recalls the object at the specified address.
“String to hex”: Converts a string into its characters’ hexadecimal representation. For example, since 5A, 59 and 58 are the
hexadecimal codes for X, Y and Z respectively, "XYZ" becomes
"8595A5".
“Hex to string”: The opposite transformation.
“Make list”: Creates a list from a user meta object or another
composite. A user meta object is any number of objects in the
stack followed by a count represented as a real number. Be
careful, because this command is not sufficiently argumentprotected.
“Make algebraic”: Creates an algebraic object from a user
meta object or another composite. This may easily result in
'Invalid Expression'.
“Make program”: Creates a program from a user meta object
or another composite.
“From composite”: Explodes any composite object into a user
meta object.
434
Command
→RAM
SREV
POKE
PEEK
APEEK
R˜SB
SB˜B
LR˜R
S˜N
LC˜C
ASM→
CRLIB
CRC
MAKESTR
SERIAL
ASM
ER
→S2
XLIB˜
A. Development Tools
Description
“To RAM”: Dumps any ROM object into RAM. Can extract
some commands for disassembly, but see section A.5 for more
information.
“Reverse string”: Reverses a string, very fast.
Writes data to any address in RAM. Put in level two a hxs
with the address, and in level one a string of hex digits to be
written at that address. This is a very easy way of destroying
any “masterpiece” you have created on the calculator :-).
Extracts raw hex digits from any address. Put the address in
level two (an hxs) and the number of nibbles to get (another
hxs) in level one.
“Address peek”: Like PEEK, but always gets five nibbles, returning them as a hxs.
“Real ↔ system binary”: Converts reals to bints and viceversa.
“System binary ↔ binary”: Converts bints to hxs’s, and viceversa.
“Long real ↔ real”: Converts long reals to reals and vice-versa.
“String ↔ name”: Converts strings to identifiers (global
names) and vice versa.
“Long complex ↔ complex”: Converts long complexes to complexes and vice-versa.
“From ASM”: Disassembles Code objects (machine-language)
into source code.
“Create library”: A library creator. This is described in Appendix B.
Calculates the CRC. The argument is a string of hex digits.
“Make string”: Creates a string with the number of characters
given in level one (a real number).
Returns a string with the internal Serial Number of the HP49.
Provides access to the MASD compiler. See section A.4 for
more information.
Used in conjunction with ASM. See section A.4 for more information.
Disassembles an object. See section A.5 for more information.
Creates a rompointer (XLIB name) from the library number
(level two) and command number (level one). It also explodes
rompointers into its two components.
A.4. The Compiler
A.3.1
435
Operating Tools for the HP49
Wolfgang Rautenberg is the author of a library called Operating Tools
(or OT49 for short) with several commands, some of which are useful to the
System RPL programmer. The latest version of this library is 3.2002.
OT49 contains a library creator and a library splitter (written by Peter
Geelhoed). To split any library, just put its number in the stack and run D↔L.
The DType command displays the type of the object in level one. If that
object is a rompointer (XLIB) or flashpointer, its contents is recalled (unless
it is pure machine-language code) and the contents’ type is displayed, with an
asterisk appended.
One of the most useful commands is 3tog. It toggles between three
representations of composite objects: as a list, as a program and as a usermetaobject. This can be used to manipulate System RPL programs without
actually decompiling them. 3tog explodes a program onto the stack, you can
use stack commands to rearrange things and then 3tog again to rebuild the
program.
Another very useful command is Fl˜. It is a flag toggler. Just give the
number of the system or user flag, run it, and the flag is toggled. It will also
display in the header what has just been done.
The MDA˜ command compiles or decompiles an object (depending wheter
the input is a string or another object).
A.4
The Compiler
The compiler included in the HP49G calculator is MASD. It is a newer
version of the compiler found in the MetaKernel program for HP48G calculators. If you have already used the MetaKernel, then you can probably skip
most of this section. But, even if you have never used MASD, there should
be no difficulties learning how to use it. There are no big differences between
MASD syntax and that of other System RPL compilers such as JAZZ (for the
HP48 calculators), the HP Tools or the GNU Tools.
MASD is called with the command ASM. It expects a string in level one,
and returns the compiled object. If there are errors, the string and a list will
be put in the stack. This list is used by the ER command, described shortly.
The first difference to be observed from those that are coming from JAZZ
or one of the PC Tools is that MASD, for some unknown reason, needs the
436
A. Development Tools
source to end with a “@” character. All source code files must be identified with
this token, or MASD will refuse to even look at them. The character must be on
a line by itself, at the start of the line, and with no character after it (not even a
newline). This way, it is pretty much just cumbersome. (To be useful, it would
be the character marking the end of the source, but there should not be all
those restrictions on its placement, and text after it should be allowed — and
ignored.) However, for the Emacs RPLCPL (see section A.6), the @ acquires at
least one purpose: it allows the calculator to automatically distinguish between
a System RPL source file and a Uer RPL program or command line.
The other thing to note concerns the current MASD mode. There are
two modes, selected by flag –92: Assembly Language mode (flag –92 cleared)
and System RPL mode (flag –92 set). Probably, you will set flag –92 and thus
MASD will be by default in System RPL mode. Then, nothing else needs to
be changed to compile System RPL programs (just add the @ in the end). It is
still possible to compile Assembly Language code in System RPL mode: just
surround the code between CODE and ENDCODE.
If you are in Assembly Language mode, it is possible to compile System
RPL code by inserting these two lines before the source:
1
!NO CODE
!RPL
Both are called directives. The !NO CODE directive tells MASD to compile our source as System RPL code, and not as Machine Language code. (Once
more, you can insert assembly language code between CODE and ENDCODE.) It
is a good idea to always put these two lines at the start of all programs even if
you use System RPL mode: this way, the source can be compiled regardless of
the flag settings.
Here is a simple program source ready for MASD:
1
5
10
!NO CODE
!RPL
::
DUPTYPEZINT?
case
FPTR2 ^Z>R
DUPTYPEREAL? ?SEMI
SETTYPEERR
;
@
A.4. The Compiler
437
The above is the disassembly of the CKREAL entry. As you can see, it
automatically converts integers to real numbers.
It is a nice idea to assign the ASM command to a key: you will need it
many times.
If there was an error during compilation, the original string is put in
level two, and a list is put in level one. In this case, run the ER command.
It will display a list of errors for you to choose, and will jump directly to that
error in the source. Correct the error, press ENTER and the choose another
error, until all errors have been corrected. Then, run ASM (and ER, if necessary)
again. Better yet, use the ASM2 command from library 257, which calls ASM
and then, if there was any error, ER.
A.4.1
MASD and the Different Kinds of Entries
A System RPL program can call three different kinds of entries: normal
entries, which point to some address in ROM, flashpointer entries, which point
to a command in one of the HP49’s flash banks, and rompointer entries, which
point to a command in a library (built-in or not).
For supported “normal” entries, no special precautions need to be taken.
You can just include the name of the command. To call an unsupported entry,
you will have to use PTR <address>, where <address> is the address as
listed in the tables.
For supported flashpointer entries (whose names always start with ˆ),
you have to prefix the entry’s name with FPTR2. So, to call the flashpointer
command ˆZ>R, you will have to include this in your program:
FPTR2 ˆZ>R
An unsupported flashpointer entry is called with FPTR <bank> <cmd>.
<bank> are the last three digits of the address as listed in the table (but in
practice it can be no bigger than Fh), and <cmd> are the first three digits.
Calling rompointer entries (which have names starting with ˜) is very
similar to calling flashpointers. If it is supported, just prefix it with ROMPTR2.
For unsupported entries, you have to use this syntax: ROMPTR <lib> <cmd>.
<lib> are the last three digits of the address, and <cmd> the first three.
A.4.2
MASD’s Special Features
The MASD compiler supports some special features that are not a part
of the System RPL programming language, but that can be useful to the programmer.
438
A. Development Tools
The first feature eases the use of unsupported entries. You can define a
name for a unsupported entry, making it behave as if an entry in extable. (This
only works for normal entries, not flashpointer or rompointers.) To do that, use
the following structure:
EQU name address
where name is the name of the entry, and address is its address. For example, the line below defines the entry 2NELCOMPDROP, which returns the second
element of a composite:
EQU 2NELCOMPDROP 2825E
With that definition, you can use 2NELCOMPDROP instead of PTR 2825E
to access that command. Note that this only works for normal entries.
Another way to ease the inclusion of unsupported entries (especially
rompointers and flashpointers), but that is useful not only for that, are the
DEFINEs. The structure is like this:
DEFINE name value
where name is a single word, and value is the rest of the line.
After that definition, whenever name is found in the source file, it will
be replaced by value. So, if you are going to use the browser (see Chapter 33),
it might be convenient to define this:
DEFINE ˆChoose3 FTPR 2 72
so that you can simply insert ˆChoose3 when you want to call the browser.
A.4.2.1
Unnamed Local Variable Binding
There is a structure that allows you to refer to local variables with
names in the source, but that produces unnamed local variables, thus combining ease of use with speed.
The local variables are bound with
{{ name1 name2 ... nameN }}
After that, entering name1 will become 1GETLAM, name2 will become
2GETLAM. Preceding the name of a variable with = or ! stores something in the
variable, that is, =name1 becomes 1PUTLAM, and so on.
Pay attention to the way the names are bound: the first variable name
corresponds to 1GETLAM (that is, the object that was in level one), the second
to 2GETLAM (the object that was in level two), and so on. This is the opposite of
what JAZZ does. It is possible, however, to get the ordering as JAZZ does, by
putting the !JAZZ directive in the beginning of the source file.
A.5. Disassembly
A.4.2.2
439
Including Source Files
Using the INCLUDE pseudo-command, you can include other source files
in your main program. This is like the #include directive in C programs.
It is used like this: INCLUDE variable. The contents of the named
variable are read as if they were included in the source file. The included file
should also end with an “@”.
One use of this feature is to include a file with definitions of several
constants or unsupported addresses.
A.5
Disassembly
As it was briefly mentioned in the description of Library 256 (see section A.3), the command →S2 is the System RPL disassembler. It will disassemble any object in level one into its source code suitable for reassembly with
MASD. Unfortunately, there are still some bugs in MASD, which prevent some
disassembled objects to be correctly re-assembled. We all hope that in a newer
version this bugs will be corrected.
Often, one wants to see how one of the built-in commands in the HP’s
ROM is built. The JAZZ library for the HP48 calculators made that easy. Unfortunately, it is difficult to do that with only the built-in tools in the HP49G.
There are, however, two two libraries for this purpose: Nosy by Jurjen N. E.
Boss, and CQIF, by Pierre Tardy. Both allow to extract and disassemble ROM
code, and both can be used together with Emacs (see section A.6).
A.5.1
Using Nosy
Nosy, written by Jurjen N. E. Boss ([email protected]) and
presently at version 4.0 is a tool to disassemble the HP49G’s ROM. It is very
easy to use, and, unlike CQIF?, can be easily used wihout Emacs. It also displays more information that CQIF?, such as the names of flash pointers. Because of this, it is slower than CQIF?
To use Nosy, put the entry name, pointer, an address in the stack (some
other inputs are also accepted — see Nosy’s documentation) and run the command Nosy. This will open an interactive browser where you can view the
disassembled entry and browse the ROM like a hypertext document. Use the
arrow keys to scroll. You can quickly view another command inside the disas-
440
A. Development Tools
sembled source by moving the highlight to it and pressing ENTER or F6. This
will open another browser just like the first one. To go back one level, press
Backspace, and to exit press ON.
There are some other functions you can use in the interactive browser,
consult the documentation for details.
A.5.2
Using CQIF?
With the help of the CQIF? (Comment Qu’Ils Font?) library, written by
Pierre Tardy (e-mail: [email protected]), currently at version 1.7.7F, the task
of disassembling built-in commands is also simplified. It contains several tools
for the HP49G hacker. We will not describe everything from the library here,
read its documentation if you want to know what else it can do for you.
The most useful command is CQIF?. This command is the basic way
to disassemble some part of the HP’s ROM. It accepts several kinds of inputs.
If you give a string with the name of an entry, that entry is disassembled.
You can put an address (a hxs), and run CQIF? to disassemble whatever is
at that address. It will also accept the entry pointer itself, rompointers and
flashpointers. To ease the disassembly of User RPL commands, you can enter
the command inside a list or program (that is, enter { DUP } or « DUP » to
disassemble the User RPL command DUP).
CQIF? disassembles step-by-step, so if the command is only a pointer
to another command, you need run the CQIF? command several times to get
to the real code of the command. Just remove any unnecessary junk from the
stack, keeping the last result of CQIF? and run it again. Eventually you will
reach the command.
Another useful command in the library is DISPATCH. It does a virtual
dispatch based on the object types. To use it, put the objects you would use
as arguments to some command in the stack. Then, recall that command
(probably using CQIF?) to level one. Run DISPATCH. The object that would
be run for those argument types (by means of some dispatching command like
CKn&Dispatch) is put in level one.
The other commands are not so useful to System RPL programs. But it
is a nice idea to read the documentation and see what CQIF? can do for you.
A.6. The Editor, and Emacs
A.6
441
The Editor, and Emacs
When you use the HP49G to develop programs, you will spend most of
the time writing or changing the source code. This is done in the editor.
The HP49G editor is much better than the one in the HP48 calculators.
However, it can be made even better. There are two variables that are run
before entering and after leaving the editor. We will see what can be done
with them. We will also describe a library that enhances the editor with some
features useful in particular for programming.
Before starting the editor, the variable STARTED is evaluated. You can
put a program in this variable to be run before editing any object. And, after
leaving the editor, the EXITED variable is run. There are many things these
variables can do. A very simple (and very useful) thing is to remove the header
during editing, giving a few more lines of text. After the editor is exited, the
header is restored to the default setting. It is very simple to do this: STARTED
just needs to clear the header:
« 0 →HEADER »
And EXITED restores the header:
« 2 →HEADER »
Change 2 to 1 if you normally use only one line of header. Note that
Emacs (see below) removes the header automatically.
For even better customization of the editor there is the Emacs library,
written by one of us (CD, e-mail: [email protected]) and Peter Geelhoed (email: [email protected]). This library gives the editor some
of the features of the famous GNU Emacs editor, such as completion, automatic indentation, incremental search, regular expression search and a macro
language. The latest version, at the time of this writing, is 1.10. Again, we will
not describe everything in the library — see the manual for more information.
Probably the single most useful feature of the Emacs library is command completion. It is activated by the RPLCPL command. This is only useful
in edit mode, so you will need it assigned to a key, with TakeOver before. If
you have the KEYMAN library (see section A.2), just put a program like this
in the stack:
« RPLCPL »
and run →TO?. Then, assign the resulting object to a key. It is a nice idea to
assign it to the same key both with and without the alpha-mode on. Of course,
you do not need a program. Just the rompointer (got with { RPLCPL } HEAD
or some similar trick) is enough, but you must still run →TO?.
442
A. Development Tools
To try it, enter the first few letters of any User RPL command. Press
the key to which you assigned RPLCPL. If there was only one command starting
with those letters, what you typed will be completed. If there were more than
one, a choose box will appear from which you can select the derised command.
The command line will be completed. This is something really useful.
Provided you have the extable library installed (as you should — see
section A.1), the completion also works for System RPL command names. If
the last character in the string is a @ (as required by MASD), then System
RPL completion is automatically used. As an added bonus, if you press the
key to which RPLCPL is assigned longer, then the lookup of System RPL commands is done with GETNEAR (see section A.1). You can then enter case, ask
for completion, and get all words that have case in the middle — not only in
the begining.
Another command that sometimes is useful is DYNCPL. It should also be
assigned to some key, and also does completion. But it looks in the file you are
editing for words that start with the typed letters. It is useful for the names of
local variables and such. It works in a slightly different way: press the key, and
the word will be completed with the first word. To accept it, press ENTER. To
abort, press ON. To search for another match, press the same key that invoked
DYNCPL. Any other key will accept the match and execute that key.
One more command that is useful to be assigned to a key is RPLED. This
command imitates the ED command in the JAZZ library: it decompiles the
object in level one, opens an editor for you to edit it, and, upon exit, recompiles
the object (if you are lucky, that is. If the object cannot be compiled because of
some MASD bug, exit the editor with a longer-pressed ENTER. This will allow
you to select not to compile the file).
RPLED also displays a menu with useful operations, described below. If
you call RPLED when in edit mode, the menu is redisplayed.
To get a description of all the commands in the menu, read the documentation that comes with Emacs. Here we will present the most useful ones:
CO.. calls RPLCPL. Left-shift CO.. calls DYNCPL. See above for explanations of these commands.
With |> you can collect a few keystrokes into a macro and then run
this macro over and over. Press left-shift |> to start the macro recorder, then
execute the commands which should be part of the macro and exit with ON.
Then use |> to run the macro. Holding down the |> key automatically repeats
the macro until you release the key.
Find starts an incremental search. Press this key, then start typing
A.6. The Editor, and Emacs
443
the string you want to find. Type as many characters as necessary, then press
ENTER to go to that cursor position. To cancel the search and go back to where
the search started, press ON. Press the right arrow to find the next match.
When you press Left-shift Find, you start a (non-incremental) regular
expression search. Read Emacs’ manual for more information.
Meta starts a special mode in which many useful editing commands are
directly accessible with single key presses. The transmit indicatior is on while
this mode is active. To exit, press ENTER or ON.
Left-shift Meta suspends the editor and goes back to the stack. To return to the editor, press CONT (Left-shift ON).
Right-shift Help is the menu of Emacs configuration. A choose box appears with several actions. Selecting Options will show a dialog, which allow you to configure some aspects of Emacs: whether the minifont is used by
default, whether the third page of the menu contains some templates for System RPL and Assembly Language development, the library to use by the EDOB
command (described below), and some other things. There are also options to
edit the emacs variable (which allows one to add macro commands to Emacs.
Again, we refer you to Emacs’ documentation), to edit the diagram variable
(used by the SDiag library, but this variable is not discussed in this document),
and to make some key assignments.
Pressing Left-shift Help toggles between the minifont and the current
font.
Indnt indents the current line according to context. However, it is better to write the code already indented than to correct it later. . . Still, sometimes
(such as when cutting and pasting), this can save some time. When left-shifted,
removes * from the beginning of the current line (or all the selected lines), and
when pressed right-shifted inserts the * .
{↔}, when pressed in a delimiter, jumps to the matching one. Works
with :: and ;, { and } and a few others pairs.
( → ) shows the stack diagram for the entry point under the cursor. For this to work, the SDiag library, distributed with Emacs, must the
installed. All stack diagrams listed in this book are also available on the calculator through this library, and this can be of great help.
EDOB can be used to look into the ROM and into the contents of variables
without exiting the editor. If you have ever used JAZZ’s ED editor, this works
similarly to the Right-shift Y key. It disassembles the entry under the cursor,
and its source is viewed in another editor. Exit this sub-editor with ON or
ENTER to go back to the original editing section. Of course, you can call DOB
444
A. Development Tools
again in the sub-editor. This command requires the CQIF? or Nosy libraries
(see section A.5). When Nosy is used, you can press this key longer to run the
Nosy browsing environment. (The default is to start a new sub-editor.)
You should assign EDOB to a key since you will use it frequently. Because
of the similarity with the Nosy and CQIF? commands, is suitable to assign both
commands to the same key. When used in edit mode, EDOB is called. When not,
Nosy or CQIF? is called. It is very easy to create an assignment like this with
KEYMAN (see section A.2). First, put the list { EDOB Nosy } in the stack,
and use OBJ→ or COMP→ to explode it. Drop the number of objects and run
IfE?P. Use →TO? to add TakeOver to the object (since it needs to work in edit
mode), and assign it to a key. If you have used the HP48 and JAZZ, Rightshift-hold +/- or Right-shift-hold 1/x will remind ED, and will not interfere with
the normal operation. You can replace Nosy with CQIF? here if you prefer the
latter library.
Actually, while the above example is very educational, it is not really
necessary. EDOB automatically calls CQIF? or Nosy (depending on Emacs’ settings) when it is called outside edit mode.
The last page of the Emacs menu contains some templates for System
RPL and Assembly Language programming. Try them, you will easily discover
what they do.
If you need help with Emacs menu commands, just press Help. It has
help on the commands and on the menu keys. If you select help on the meny
keys, it will display a screen describing the two pages of the Emacs menu. Each
page is represented by three rows of labels, which mean, from top to bottom,
the unshifted action, the left-shifted action and the right-shifted action. Some
commands are inverted, these have different actions when pressed longer.
There is much more that Emacs can do. Please read the documentation
to discover about the rest of the features.
A.7
Debugging
The debugging facilities for System RPL of the HP49G are the same
as for User RPL: the built-in debugger (Left-shift CAT, NXT twice and RUN).
Unfortunately, it does not work very well with some commands, which will be
described later.
To start debugging, put the program or the name of the variable in
which the program is stored in level one and press DBUG. Then, use the other
A.8. JAZZ for the HP49
445
commands to examine the program. The SST command executes the next step
in the program and displays what has just been executed. You will need the
System RPL stack (see section A.3) active for this to be useful. If the command
being run is a sub-routine, SST executes this as a single step. SST↓ is similar,
but if the command is a sub-routine, it steps into this sub-routine and executes
its first command.
To see the next two actions of the program, but not execute them, press
NEXT. To stop the program being debugged, press KILL. To make it resume its
normal operation, press CONT (Left-shift ON).
To insert a breakpoint into your program, insert the command HALT
(xHALT for System RPL programmers) in the program at the point you want
the program to stop. Then use the commands above to debug the program.
The debugger does not work with commands that take arguments from
the runstream, such as ' or IT. Do not try stepping over one of these commands, the only thing you will get is a nice crash :-). Currently, the only way to
debug these commands is by inserting xHALT after these commands, and using
CONT to skip past the next xHALT.
For simple to moderately complex programs, the procedures described
above will be sufficient to find and correct bugs. If you run into a more serious
problem with a complicated program, a bigger hammer may be needed: SDB in
Jazz49.
A.8
JAZZ for the HP49
The JAZZ library, written originally by Mika Hesikanen and others for
the HP48, implemented many of the features so far discussed in this chapter in
a single, compact and very consistent library. On the HP48, this was without
any doubt the best programming environment. JAZZ has been ported to the
HP49 by Daniel Lidström (e-mail: [email protected]). However, at the time
of this writing it is not a full replacement for MASD and the other tools. In
particular it has no support for flashpointers and therefore cannot assemble
or disassemble programs containing flashpointers. Another drawback is that
Jazz needs to be installed in port 0, occupying 70kB (50kB for the light version)
of RAM space. It also needs its own table of entry points, 40kb more, but that
can fortunately be installed in any port.
The area where Jazz49 brings unique functionality to the HP49 is debugging, both of machine language programs (DB) and of System RPL programs
446
A. Development Tools
(SDB). In contrast to the HP49 built-in debugger, SDB can handle runstream
commands correctly, so there is no need to insert many xHALT commands into
the program. The lack of flashpointer support means that you cannot singlestep the contents of flashpointers. Also the display of current and next commands in the status line is affected by this: when the program is near a flashpointer, “Invalid Object” will be displayed instead of the current and next commands.
To use the debugger, put the program to be debugged or just its name
in level 1, and run the SDB command. You will then be presented a menu
with your possible actions. →SST executes the next step. →IN is similar, but
it will step inside of sub-routines. Use SNXT to show the next steps to be executed. You can insert breakpoints into programs with the SHALT command
(write xSHALT in System RPL programs). Note that SHALT only works if SDB
is already running, so you need to start your program with SDB and then press
CONT to jump to the break point.
Very useful is also the possibility to browse loop and LAM environments
with the LOOPS and LAMS commands, respectively. For more information on
these and other commands, please refer to the JAZZ documentation.
Now you may wonder if you should really sacrifice 50kB of RAM for
the occasional need to do serious debugging. Here is a solution: keep a BZ
compressed version of the JAZZ library (light version) stored in port 2 under
the name “Jazz”. When you need to debug, you can quickly install JAZZ with a
small progamm:
« :2: Jazz RCL ˜ 0. STO 992. ATTACH »
where ˜ is the decompressor program in OT49. With a similar program, you
remove it from port 0 when you are done.
Appendix B
Creating Libraries
Libraries are collections of commands that the user can access as if they
were built-in in the system. If you have written a complex program with several sub-routines, it is much more convenient to distribute it as a library instead of as a directory. As a library, the user will not need to navigate through
the variables to access your program; he can just type the command name from
anywhere. Library commands appear in the catalog, and they can have on-line
help. There is a menu showing all installed libraries, and a library can add
itself or selected commands to some of the menus, such as the APPS menu.
Moreover, you can make only some of the commands in the library accessible to the user. This way, you can prevent the user from running commands
that they should not, and you only need to provide error-checking for the useraccessible commands.
That should have been enough to convince you to distribute your programs as libraries. But you might be wondering, “But how do I create a library?”
Easy: the CRLIB command in library 256 (see section A.3) will do that
for you. You just need to create a few special variables in a directory, which
specify some aspects of the library, and then run that command. You will then
get a library from the contents of the directory, which can be distributed.
Instead of CRLIB, you can use the D↔L command from the OT49 library
(see section A.3.1). This command eases the entry of some of the variables
below, and provides an easy way to add help to library commands. However, it
does not add anything really new to the library creation process.
B.1
The Special Variables
In the directory that will be converted to a library, some variables, all
having names starting with $, have special meanings that configure the created library. The table below lists the variables and their meanings.
447
448
Variable
$ROMID
$TITLE
$VISIBLE
$HIDDEN
$CONFIG
$MESSAGE
$EXTPRG
B. Creating Libraries
Meaning
This specifies the number of the library. Each library should
have a unique number, since there cannot be two libraries with
the same number. It should be a real or an integer, in the range
769 to 1791.
This is the title of the library. The first five characters will be
shown in the library menu. You can have a library without a title, but you will not be able to access the library from the library
menu.
This is a list of variable names. The variables listed here will
be made into user-accessible commands in the resulting library.
This is a list of variable names. The variables listed here will
be converted into hidden commands in the resulting library.
This is the library configuration object. This object will be evaluated at each warmstart. Normally, these configuration programs attach the library. This can be done by storing something like “:: romid TOSRRP ;” here, where romid is the library id. If you want, you can simply store the real number 1.
in $CONFIG, and a default configuration object will be produce,
which attachs the library at each warmstart.
This is a list of strings which will be available in the library for
use as (error) messages or general strings. If each message is
only used once, it is not really worthwhile to create a message
table. But if messages are used in many places, or if you want to
make it easy to change messages to a different language, a message table is very useful. The list can contain up to 256 strings.
Each message on the calculator is identified by a unique bint
#lllmm consisting of a 3-digit library number (like 6FE) and a
two-digit message number 01. . . FF. To access a message from a
program use “#lllmm JstGetTHEMESG”. To throw an error using a message number, use “#lllmm DO#EXIT”. See Chapter 22
for more information.
This is the name of a command that allows customization of
some menus, addition of help to commands and more. See below
for more information on this.
Note that unlike other library creators, only the variables that are listed
in $VISIBLE or $HIDDEN are made into command in the library. Variables that
do not appear in either list are not converted. $MESSAGE is optional, you do not
have to specify it.
B.2. The Library Message Handler
B.2
449
The Library Message Handler
Libraries on the HP49G can contain a message handler. This program
is called by the operating system at various occasions, in order to give the
library a chance to modify menus, provide online help for its commands and
other actions.
When creating a library from a directory, the reserved variable $EXTPRG
can contain the name of a variable in the directory which will later become a
rompointer in the library. This rompointer must be a program which accepts
a bint on level one (a code representing one of the messages) and, depending
upon the specific message, other arguments on higher stack levels.
B.2.1
Menu Extensions
The majority of messages can be used to extend some built-in menus.
Among these are the APPS choose menu, several other choose menus, the
SEARCH, GOTO and Tools submenus in the editor menu etc. When the message handler is called to extend a menu, the current menu is on the stack either
as a list or as a meta. The program can then modify this menu and return it.
So, the stack diagram for menu extensions is one of:
( { key1 ... keyN } #msg → modified_list #msg )
( key1 ... keyN #n #msg → modified_meta #msg )
The message number bint stays on the stack, so that the message handler of another library can be called immediately to do its work in the same
way.
The following menus on the HP49G can be extended using library messages.
#msg
0
1
2
3
4
5
6
8
11
12
Menu
APPS
Main STAT menu
Hypothesis submenu in STAT
Confidence Interval submenu in STAT menu
Finance menu
Numeric Solver menu
Time menu
Games (inside APPS)
Editor SEARCH menu (when flag -117 is clr)
Editor TOOLS menu (when flag -117 is clr)
Menu Type
list
list
list
list
list
list
list
meta
list
list
450
#msg
13
14
15
16
B. Creating Libraries
Menu
Editor GOTO (when flag -117 is clr)
Editor SEARCH menu (when flag -117 is set)
Editor TOOLS menu (when flag -117 is set)
Editor GOTO (when flag -117 is set)
Menu Type
list
meta
meta
meta
As an example, we show a message handler of a library whose ROMID
is 1234. This handler will will add the library menu to the APPS menu, and
a particular rompointer to the Games menu. When adding to the APPS menu,
the example also makes sure that the new item is numbered just like the other
items in the APPS menu. This should be done by all libraries.
1
5
10
15
::
ZERO OVER#=case
::
SWAPINCOMP
#1+DUP #>$
".My Library" !append$
’ :: % 1234. InitMenu% ;
TWO{}N
SWAP P{}N
SWAP
;
EIGHT OVER#=case
::
DROP
{ "PlayMe" ROMPTR 4D2 0 }
SWAP#1+
EIGHT
;
;
B.2.2
(APPS menu)
(save #msg, explode list)
(make index for new entry)
(add name to index number)
(action: set my menu)
(label & action -> list)
(add new entry)
(get the ZERO back)
(Games submenu)
(drop the message)
(new entry for menu)
(add to meta)
(put msg number back)
Online Help for Libary Commands
On the HP49G, all the CAS commands have a short help text which can
be displayed from the catalog, or with the SDIAG command in the Emacs library
(see section A.6). When the catalog choose box highlights a CAS command,
the menu under the choose box has an additional button, the HELP button.
Pressing this button shows the corresponding help text. External libraries can
provide help for their commands in a similar way, using the message handler
and messages number nine and ten. Message nine is a query if the library
provides help for a given rompointer. The stack diagram is
B.2. The Library Message Handler
451
( romptr FALSE NINE → romptr TRUE/FALSE NINE )
where the TRUE/FALSE in stack level two indicates if the library is prepared to
provide help for the rompointer in level three. This message is used to determine if the HELP button in the CATalog should be turned on.
Message ten is then used to actually display the help when the user
presses the HELP button. The stack diagram here is
( romptr TEN → FALSE )
Before pushing FALSE, the message handler should display the help
text.
The following example is a message handler which provides a short help
string for every visible command in the library.
1
5
10
15
20
::
NINE #=casedrop
::
DROPTRUE NINE
;
TEN #=casedrop
::
DUP DECOMP$ NEWLINE&$ SWAP
ROMPTR># SWAPDROP
{
"Help text for romptr 0"
"Help text for romptr 1"
...
"Help text for romptr N"
}
SWAP#1+ NTHCOMPDROP
&$
FALSE SWAP ViewStrObject
;
;
(all cmds have help)
(save cmd name as string)
(index of romptr in lib)
(list of help strings)
(last visible rompointer)
(extract correct help str)
(Add the command name)
(display the text)
Note that ViewStrObject conveniently pushes FALSE on the stack,
which is the required return value of message nine. The message handler gets
a bit more complicated if help is only provided for a few rompointers. In this
case, the handler of message nine must check the rompointer against a list, and
message ten must use Lookup or something similar to extract the help text.
Instead of simply displaying a string, message ten can also do more complicated
things, like launching a whole application to provide help.
The library creator in the OT49 library (see section A.3.1) provides a
simple way to add help support to a library.
452
B.2.3
B. Creating Libraries
The Library Menu Message
If the menu of a library is invoked via the LIBS menu (rightshift 2), the
romid of this library is sent to the message handler of the library. The library
may use this for easter egg-like stuff (displaying an icon (see for example the
Libman library), doing something funny with the menu (e.g. LTool) or playing a melody). It can also change the menu settings, for example to provide
functionality for the shifted menu buttons (e.g. ConstTools).
The stack diagram for this message is
( #romid → #romid )
The following example is the message handler of a library # 60F and it
temporarily displays a copyright notice when the library menu is selected.
1
5
::
# 60F OVER#=case
::
ZEROZERO
"(c) 2001 Some Author"
$>grob XYGROBDISP
SetDA1Temp
;
;
Appendix C
User RPL Commands
The listing here is of all the user-accessible commands and functions,
with their addresses. In most cases, the User RPL name of a command is equal
to the System RPL name with leading ˜ and x stripped. The few exceptions
are marked in the table.
C.1
Reference
Addr.
030314
39A07
390E4
390C9
025314
3A8D8
3A7DC
06E314
0000DE
3AAE5
04B0AB
3CA07
3F033
3D7AC
Name
˜xABCUV
xABS
xACK
xACKALL
˜xACOS2S
xACOSH
xACOS
˜xADDTMOD
xADDTOREAL
xALOG
xAMORT
xAND
xANS
xAPPLY
3EAC7
xARCHIVE
3C8C6
xARC
3A390
085314
xARG
˜xARIT
Description
( pa pb c → u v )
( x → x' )
( → )
( → )
( symb → symb' )
( x → x' )
( x → x' )
( symb1 symb2 → symb3 )
( var → )
( x → x' )
( n → princ intr bal )
( x1 x2 → x3 )
( n → ob )
( {symb1 .. symbn} f →
f(symb1...symbn) )
( :port:name → )
( :IO:name → )
( c r θ1 θ2 → )
( {#x #y} #r θ1 θ2 → )
( c → θ )
( → )
453
454
C. User RPL Commands
Addr.
3BEC5
Name
xARRY>
3BE9B
x>ARRY
024314
023314
3A88E
3A756
3EEE7
˜xASIN2C
˜xASIN2T
xASINH
xASIN
xASN
38DE1
022314
3A94F
3A844
3EB64
3C49F
3C3B2
xASR
˜xATAN2S
xATANH
xATAN
xATTACH
xAUTO
xAXES
04A314
˜xAXL
049314
04C314
3C9D3
3E196
080314
˜xAXM
˜xAXQ
xBAR
xBARPLOT
˜xBASE
3EDCC
39765
3E2C1
3B655
3E171
3C70A
3C6E0
xBAUD
xBEEP
xBESTFIT
xBIN
xBINS
xBLANK
xBOX
38F21
xB>R
3EE47
xBUFLEN
Description
( [] → x1...xn {n} )
( [[]] → x11...xnm {n m} )
UserRPL: ARRY→
( x1..xn n → [] )
( x11...xnm {n m} → [[]] )
UserRPL: →ARRY
( symb → symb' )
( symb → symb' )
( x → x' )
( x → x' )
( obj key → )
( 'SKEY' → )
( # → #' )
( symb → symb' )
( x → x' )
( x → x' )
( n → )
( → )
( c → )
( {c tick $x $y } → )
( {} → [] )
( [] → () )
( [A] → [M] )
( [nxn] [n] → [nxn]' [n] )
( → )
( → )
( → )
aka: xALGB
( n → )
( freq dur → )
( → )
( → )
( min width n → [[]] [] )
( #width #height → grob )
( {#n1 #m1} {#n2 #m2} → )
( c1 c2 → )
( # → R )
UserRPL: B→R
( → nchars 0/1 )
C.1. Reference
Addr.
39480
01E0DE
07E314
0330DE
38B28
3AD1B
3C3DC
Name
xBYTES
xC2P
˜xCASCFG
xCASCMD
xCASE
xCEIL
xCENTR
3B4E9
03A314
04D0AB
xCF
˜xCHINREM
xCHOOSE
3BC19
3B362
01D0DE
3EDAC
3DD4E
3DD8E
xCHR
x%CH
xCIRC
xCKSM
xCLEAR
xCLSIGMA
39144
39839
3EC95
3E91A
xCLKADJ
xCLLCD
xCLOSEIO
xCLUSR
081314
3B193
3E5A0
0300DE
3E0FD
˜xCMPLX
xCNRM
xCOLCT
xCOLLECT
xSIGMACOL
0380AB
x→COL
03E0AB
xCOL-
0390AB
xCOL→
03F0AB
xCOL+
455
Description
( obj → chksum size )
( {} → ????? )
( → )
( → ? )
( → )
( x → n )
( (x,y) → )
( x → )
( n → )
( []1 []2 → []3 )
( title {elems} pos → ob 1 )
( title {elems} pos → 0 )
( n → $ )
( x1 x2 → x3 )
( prg {} → ????? )
( n_type → )
( ob1 .. obn → )
( → )
UserRPL: CLΣ
( ticks → )
( → )
( → )
( → )
UserRPL: CLVAR
( → )
( [] → col_norm )
( symb → symb' )
( symb → symb' )
( x_col y_col → )
UserRPL: COLΣ
( [[]] → [v1]...[vn] n )
( [] → x1...xn n )
( [] n → []' xn )
( [[]] n → [[]]' [vn] )
( [v1]...[vn] n → [[]] )
( x1...xn n → [] )
( [[]] [[]]' n → [[]]'' )
( [] x n → []' )
456
C. User RPL Commands
Addr.
3B423
Name
xCOMB
0260AB
3C967
39A6C
0180AB
3BF77
xCOND
xCONIC
xCONJ
xCONLIB
xCON
0190AB
3989C
38F41
3DE24
3A6C2
3A5D0
3DE3F
3C58E
xCONST
xCONT
xCONVERT
xCORR
xCOSH
xCOS
xCOV
xC>PX
393CA
3D128
3B208
3BAF5
xCRDIR
xCR
xCROSS
xC>R
057314
0120AB
0610AB
39104
39078
39238
0690AB
0150DD
˜xCURL
xCYLIN
xDARCY
xSETDATE
xDATE
xDATE+
xdB
xDBUG
39218
3B670
3E576
3E85C
xDDAYS
xDEC
xDECR
xDEFINE
3B549
xDEG
Description
( n k → Cn,k )
Symbolic argument allowed.
( [[n*n]] → x )
( → )
( x → x' )
( → )
( { n } x → [] )
( { n k } x → [[]] )
( [] x → []' )
( name → x )
( → )
( x1_u1 x2_u2 → x3_u2 )
( → x_correlation )
( x → x' )
( x → x' )
( → x_covariance )
( (x,y) → {#n #m} )
UserRPL: C→PX
( name → )
( → )
( [1] [2] → [3] )
( (x,y) → x y )
UserRPL: C→R
( [func] [vars] → [] )
( → )
( xe/D yRe → xDarcy )
( date → )
( → date )
( date ndays → date' )
( → %1 )
( prog → )
( name → )
( date1 date2 → days )
( → )
( name → x_new )
( 'name=expr' → )
( 'name(name1...)=expr(name1...)
→ )
( → )
C.1. Reference
Addr.
391D8
3D1C7
3EF3B
Name
xDELALARM
xDELAY
xDELKEYS
3C51F
xDEPND
3DCA7
00E314
003314
00F314
3B1BA
3EB84
xDEPTH
˜xDERIV
˜xDERVX
˜xDESOLVE
xDET
xDETACH
3D202
03A0AB
03B0AB
084314
00E0AB
39725
0160DD
x∂
x→DIAG
xDIAG→
˜xDIFF
xDIFFEQ
xDISP
xDISPXY
056314
026314
072314
044314
071314
062314
3816B
39527
˜xDIV
˜xDIV2
˜xDIV2MOD
˜xDIVIS
˜xDIVMOD
˜xDIVPC
xDO
xDOERR
05B0AB
xDOLIST
457
Description
( n → )
( x_delay → )
( rc.p → )
( 0 → )
( 'S' → )
( name → )
( {name y1 y2} → )
( {y1 y2} → )
( y1 y2 → )
( → n )
( symb var → symb' )
( symb → symb' )
( eq func → func' )
( [[]] → x )
( n → )
( :port:n → )
( symb var → symb' )
( [[]] → vec )
( [] { dims } → [[]] )
( → )
( → )
( obj n_line → )
( ob {#x #y} %size → )
Display ob (decompiled if nexessary) at
the given display coordinates, using either
the system font (%size=2) or the minifont
(%size=1).
( [func] [vars] → func )
( symb1 symb2 → squot srem )
( symb1 symb2 → squot srem )
( symb → {} )
( symb1 symb2 → sq )
( symb1 symb2 n → symb3 )
( → )
( n → )
( $ → )
( 0 → )
( {1}...{n} n prog → {} )
( {1}...{n} prog → {} (n=1) )
458
C. User RPL Commands
Addr.
0540AB
Name
xDOSUBS
3B1E1
3C484
06B0AB
3C4BA
3DC56
3DCC7
3DC3B
3B06E
xDOT
xDRAW
xDRAW3DMATRIX
xDRAX
xDROP2
xDROPN
xDROP
xD>R
3EFEF
3DC05
3F29A
3DCE2
3DBEA
0090DD
0070DD
39B1E
xDTAG
xDUP2
xDUPDUP
xDUPN
xDUP
xEDITB
xEDIT
xCONSTANTe
02E314
02C0AB
02D0AB
3805D
38A54
˜xEGCD
xEGV
xEGVL
xELSE
xENDDO
0570AB
xENDSUB
3B5DA
088314
3BDE6
xENG
˜xEPSX0
xEQ>
00B0DD
3C553
3955B
39591
39576
038314
395AC
xEQW
xERASE
xERR0
xERRM
xERRN
˜xEULER
xEVAL
Description
( {} n prog → {}' )
( {} prog → {}' (n=1) )
( [1] [2] → x )
( → )
( [[]] v_min v_max → )
( → )
( ob1 ob2 → )
( ob1...obn n → )
( ob → )
( x → (π/180)x )
UserRPL: D→R
( tag:obj → obj )
( 1 2 → 1 2 1 2 )
( 1 → 1 1 )
( 1...n n → 1...n 1...n )
( ob → ob ob )
( ob → ob' )
( ob → ob' )
( → e )
UserRPL: e
( symb1 symb2 → symb3 symb4 symb5 )
( [[]] → [[evect]]' [evals] )
( [[]] → [egval] )
( → )
( 1/0 → )
UserRPL: END
( → x )
Number of lists in DOSUBS.
( n → )
( symb1 → symb2 )
( 'l=r' → l r )
UserRPL: EQ→
( symb → symb' )
( → )
( → )
( → $msg )
( → $nerr )
( z1 → z2 )
( ob → ? )
C.1. Reference
Addr.
06C314
076314
000314
Name
˜xEXLR
˜xEXPANDMOD
˜xEXPAND
3E5E9
3E25E
017314
3AB6F
3A9B7
0050AB
0620AB
001314
xEXPAN
xEXPFIT
˜xEXPLN
xEXPM
xEXP
xEYEPT
xF0λ
˜xFACTOR
077314
043314
˜xFACTORMOD
˜xFACTORS
0600AB
3F2DF
3B635
3B529
041314
01A0AB
00C0DD
391AE
xFANNING
xFAST3D
xFC?C
xFC?
˜xFCOEF
xFFT
xFILER
xFINDALARM
3ED76
3B59A
0170AB
3ACD1
00F0DD
00E0DD
00D0DD
0030DD
0020DD
38252
xFINISH
xFIX
xFLASHEVAL
xFLOOR
xFONT6
xFONT7
xFONT8
xFONT→
x→FONT
xSTARTVAR
05E314
3AC87
˜xFOURIER
xFP
459
Description
( symb → symb1 symb2 )
( symb1 → symb2 )
( symb1 → symb2 )
( [symb1] → [symb2] )
( symb1 → symb2 )
( → )
( symb1 → symb2 )
( x → x' )
( x → x' )
( xx xy xz → )
( y_lambda xT → x_power )
( symb → symb1*symb2... )
( z → z1*z2... )
( symb → symb1*symb2... )
( z → {z1 m1...} )
( symb → {symb1 m1...} )
( x_x/D y_Re → x_fanning )
( → )
( n → 0/1 )
( n → 0/1 )
( [] → symb )
( [] → []' )
( → )
( date → n )
( {date time} → n )
( 0 → n )
( → )
( n → )
( # → ? )
( x → n )
( → font )
( → font )
( → font )
( → font )
( font → )
( start finish → )
UserRPL: FOR
( symb z → c_z )
( x → x' )
460
C. User RPL Commands
Addr.
39745
042314
3B615
3B509
3C955
3D56B
06B314
0070DE
04D314
Name
xFREEZE
˜xFROOTS
xFS?C
xFS?
xFUNCTION
x|
˜xFXND
xGAMMA
˜xGAUSS
075314
02C314
0550AB
3C22D
˜xGCDMOD
˜xGCD
xΔLIST
xGETI
3C1C7
xGET
3C74A
xGOR
3B57F
3C5AE
xGRAD
xGRAPH
00A0AB
07C314
3C8A1
xGRIDMAP
˜xGROBADD
x>GROB
3D503
xSUM
3DDEE
xSIGMA-
3DDC4
xSIGMA+
3E156
xSIGMALINE
Description
( n → )
( symb → [] )
( n → 0/1 )
( n → 0/1 )
( → )
( symb {var val ...} → x' )
( 'x/y' → x y )
( x → x' )
( symb [vars] → [diag] [P] symb'
[vars] )
( x1 x2 → x3 )
( x1 x2 → x3 )
( {} → {}' )
( ob pos → ob' pos' elm )
ob = [] or [[]] or {} or name
pos = n or {n} or {n m}
( ob n → elm )
ob = [] or [[]] or {} or name
pos = n or {n} or {n m}
( g_targ {#n #m} grob → g_targ' )
( g_targ (x,y) grob → g_targ' )
( PICT ... ... → )
( → )
( → )
UserRPL: PICTURE
( → )
( gr1 gr2 → gr3 )
( ob n_chrsize → grob )
UserRPL: →GROB
( var n1 n2 symb → x )
UserRPL: Σ
( → x )
( → [] )
UserRPL: Σ( x → )
( x1...xn → )
UserRPL: Σ+
( → symb )
UserRPL: ΣLINE
C.1. Reference
Addr.
0590AB
3DE90
Name
xΣLIST
xSUMX2
3DE5A
xSUMX
3DEC6
xSUMXY
3DEAB
xSUMY2
3DE75
xSUMY
3C7D8
xGXOR
046314
020314
3880D
0040DD
0050DD
05C314
059314
3B68B
054314
3C9C1
3E1CA
3B14C
3B12C
3B0EC
˜xHADAMARD
˜xHALFTAN
xHALT
x→HEADER
xHEADER→
˜xHERMITE
˜xHESS
xHEX
˜xHILBERT
xHISTOGRAM
xHISTPLOT
xHMSxHMS+
x>HMS
3B10C
xHMS>
39405
037314
031314
0060DE
00B314
03B314
027314
xHOME
˜xHORNER
˜xIABCUV
xIBERNOULLI
˜xIBP
˜xICHINREM
˜xIDIV2
461
Description
( {} → x )
( → xsum )
UserRPL: ΣX2
( → xsum )
UserRPL: ΣX
( → xsum )
UserRPL: ΣXY
( → xsum )
UserRPL: ΣY2
( → xsum )
UserRPL: ΣY
( g_targ {#n #m} g_src → g_targ' )
( g_targ (x,y) g_src → g_targ' )
( PICT ... ... → )
( [M1] [M2] → [M3] )
( symb → symb' )
( → )
( n → )
( → n )
( z → symb )
( symb [vars] → [M] [grad] [vars] )
( → )
( z → [M] )
( → )
( → )
( hms1 hms2 → hms3 )
( hms1 hms2 → hms3 )
( x → x' )
UserRPL: →HMS
( x → x' )
UserRPL: HMS→
( → )
( symb1 x → symb2 x symb3 )
( n1 n2 n3 → n4 n5 )
( n → x )
( uv' v → uv -u'v )
( []1 []2 → []3 )
( n1 n2 → quot rem )
462
C. User RPL Commands
Addr.
3C02E
Name
xIDN
02F314
37F48
387AC
01B0AB
396A4
395F3
39B3B
011314
3B87E
˜xIEGCD
xIF
xIFERR
xIFFT
xIFT
xIFTE
xi
˜xILAP
xIM
3E54C
3C33E
xINCR
xINDEP
08A314
˜x∞
04C0AB
xINFORM
3EEBD
xINPUT
3D434
3F007
004314
074314
3A32B
x
xINT
˜xINTVX
˜xINVMOD
xINV
3AC3D
029314
02B314
3F0B7
xIP
˜xIQUOT
˜xIREMAINDER
xI>R
3E648
03C314
xISOL
˜xISPRIME?
Description
( n → [[]] )
( [[]] → [[]]' )
( name → [[]] )
( n1 n2 → c b a )
( → )
( → )
( [] → []' )
( 0/1 obj → ? )
( 0/1 objT objF → ? )
( → i )
( symb → symb' )
( (x,y) → y )
( [] → []' )
( name → x' )
( name → )
( {name x1 x2} → )
( {x1 x2} → )
( x1 x2 → )
( → '+∞' )
Infinity
( $ {flds} fmt {rst} {init} → {} 1
)
( $ {flds} fmt {rst} {init} → 0 )
( $prompt $ → $' )
( $prompt {specs} → $' )
( x1 x2 symb var → symb' )
( f(var) var x0 → F(x0) )
( f(x) → F(x) )
( x → x' )
( x → 1/x )
( [[]] → [[]]' )
( x → n )
( n1 n2 → n3 )
( n1 n2 → n3 )
( n → x )
UserRPL: I→R
( symb var → symb' )
( n → 1 )
( n → 0 )
C.1. Reference
Addr.
050314
3EE2C
07B314
39854
Name
˜xJORDAN
xKERRM
˜xKEYEVAL
xKEY
06C0AB
06D0AB
3ECE4
x→KEYTIME
xKEYTIME→
xKGET
394F1
3C5C9
05D314
0000DD
0010DD
058314
010314
397E5
xKILL
xLABEL
˜xLAGRANGE
x→LANGUAGE
xLANGUAGE→
˜xLAPL
˜xLAP
xLAST
3C881
x>LCD
3C866
xLCD>
02D314
055314
012314
05A314
032314
0160AB
3EB42
005314
3C68C
˜xLCM
˜xLCXM
˜xLDEC
˜xLEGENDRE
˜xLGCD
xLIBEVAL
xLIBS
˜xLIMIT
xLINE
3E214
0150AB
052314
014314
xLINFIT
xLININ
˜xLINSOLVE
˜xLIN
463
Description
( [nxn] → minpol chrpol {} [] )
( → msg )
( rc.p → ? )
( → rc 1 )
( → 0 )
( ticks → )
( → ticks )
( name → )
( "name" → )
( {names} → )
( {{old new}...} → )
( → )
( → )
( [2xn] → pol )
( n → )
( → n )
( symb [vars] → symb' )
( symb → symb' )
( → ob1 .. obn )
UserRPL: LASTARG
( grob → )
UserRPL: →LCD
( → grob )
UserRPL: LCD→
( symb1 symb2 → symb3 )
( n1 n2 prog → [] )
( symb1 symb2 → symb3 )
( n → pol )
( {symb...} → {} gcd )
( # → ? )
( → {title nlib nport ...} )
( func point → lim )
( (x1,y1) (x2,y2) → )
( {#n1 #m1} {#n2 #m2} → )
( → )
( symb var → 0/1 )
( [eqs] [vars] → [eqs] {pp} sol )
( symb → symb' )
464
C. User RPL Commands
Addr.
3BAC1
Name
xLIST>
3B7D2
x>LIST
06D314
016314
3AB2F
3AA01
3E239
3AA73
0320AB
3DF83
02B0AB
˜xLNAME
˜xLNCOLLECT
xLNP1
xLN
xLOGFIT
xLOG
xLQ
xLR
xLSQ
0300AB
06A314
051314
3B02E
066314
3DAD0
xLU
˜xLVAR
˜xMAD
xMANT
˜xMAP
xMATCHUP
3DEE1
xMAXSIGMA
39AE4
3ADA5
0760AB
xMAXR
xMAX
xMCALC
3DEFC
xMEAN
3E8C1
3E9D4
07A314
3DF17
xMEM
xMENU
˜xMENUXY
xMINSIGMA
Description
( {} → ob1...obn n )
UserRPL: LIST→
( ob1 .. obn n → {} )
UserRPL: →LIST
( symb → [vars] )
( symb → symb' )
( x → x' )
( x → x' )
( → )
( x → x' )
( [[]] → [[L]] [[Q]] [[P]] )
( → Intercept Slope )
( [B] [[A]] → []' )
( [[B]] [[A]] → [[]]' )
( [[]] → [[L]] [[U]] [[P]] )
( symb → symb [vars] )
( [] → det inv coeff cpol )
( x → x' )
( {} prog → {}' )
( symb {spat srepl} → symb' 0/1 )
( symb {spat srepl scond} → symb'
0/1 )
UserRPL: ↑MATCH
( → xmax )
( → [x1...xn] )
UserRPL: MAXΣ
( → MAXR )
( x y → x' )
( var → )
( {vars} → )
( "ALL" → )
( → xmean )
( → [x1...xn] )
( → x )
( % → )
( n1 n2 → )
( → xmin )
( → [x1...xn] )
UserRPL: MINΣ
C.1. Reference
Addr.
0110DD
0120DD
0730AB
39B01
3AE2B
0740AB
079314
3AFCB
0770AB
Name
x→MINIFONT
xMINIFONT→
xMINIT
xMINR
xMIN
xMITM
˜xMODSTO
xMOD
xMROOT
04E0AB
0720AB
070314
0750AB
xMSGBOX
xMSOLVR
˜xMULTMOD
xMUSER
0060DD
01C0AB
3F2B5
39976
394AA
3831C
03D314
3DE09
x→NDISP
xNDIST
xNDUPN
xNEG
xNEWOB
xNEXT
˜xNEXTPRIME
xNSIGMA
3F264
3CB13
3F0FC
0560AB
3BBF9
39785
xNIP
xNOT
xNOVAL
xNSUB
xNUM
x>NUM
0060AB
0070AB
3885C
xNUMX
xNUMY
xRPN->
3BE38
xOBJ>
3B6A6
xOCT
465
Description
( font → )
( → font )
( → )
( → MINR )
( x y → x' )
( title {vars} → )
( mod → )
( x y → x' )
( var → x )
( "ALL" → )
( $ → )
( → )
( symb1 symb2 → symb3 )
( var → )
( {vars} → )
( "ALL" → )
( n → )
( xq v x → x' )
( ob n → ob .. ob n )
( x → x' )
( ob → ob )
( → )
( n → n' )
( → nrows )
UserRPL: NΣ
( ob1 ob2 → ob2 )
( x → x' )
( → )
( → npos )
( $ → n )
( x → x' )
UserRPL: →NUM
( n → )
( n → )
( ob1 .. obn → )
UserRPL: →
( ob → ? )
UserRPL: OBJ→
( → )
466
C. User RPL Commands
Addr.
3950C
3EC75
3E8F0
3CA8D
3DC8C
039314
3C98B
3EDEC
0090AB
034314
393EA
04F314
0450AB
00D0AB
01F0AB
3C4F5
Name
xOFF
xOPENIO
xORDER
xOR
xOVER
˜xPA2B2
xPARAMETRIC
xPARITY
xPARSURFACE
˜xPARTFRAC
xPATH
˜xPCAR
xPCOEF
xPCONTOUR
xPCOV
xPDIM
3B477
0460AB
3EAA7
3F27F
3DCFD
3C72A
05A0AB
06A0AB
39AC7
xPERM
xPEVAL
xPGDIR
xPICK3
xPICK
xPICT
xΠLIST
xPINIT
xPI
3C638
xPIXOFF
3C60E
xPIXON
3C662
xPIX?
3EE9D
00A314
3C392
3C372
3C979
xPKT
˜xPLOTADD
xPMAX
xPMIN
xPOLAR
Description
( → )
( → )
( {names} → )
( x y → x' )
( 1 2 → 1 2 1 )
( n → n' )
( → )
( n → )
( → )
( symb → symb' )
( → {HOME dir1 .. dirn} )
( [nxn] → pol )
( [roots] → [coefs] )
( → )
( → xpcovariance )
( (xmin,ymin) (xmax,ymax) → )
( #width #height → )
( n k → n' )
( [coefs] x → x' )
( name → )
( 1 2 3 → 1 2 3 1 )
( 1...n n → 1..n 1 )
( → PICT )
( {} → x )
( → )
( → π )
UserRPL: π
( (x,y) → )
( {#n #m} → )
( (x,y) → )
( {#n #m} → )
( (x,y) → 1/0 )
( {#n #m} → 1/0 )
( data type → response )
( f → )
( (x,y) → )
( (x,y) → )
( → )
C.1. Reference
Addr.
3BB94
Name
xPOS
073314
3D0D7
3DFDD
3E01D
3DFFD
00C314
˜xPOWMOD
xPR1
xPREDV
xPREDX
xPREDY
˜xPREVAL
03E314
3D1E7
38BBF
08B314
0440AB
035314
3D10D
3D143
˜xPREVPRIME
xPRLCD
xPROMPT
˜xPROMPTSTO
xPROOT
˜xPROPFRAC
xPRST
xPRVAR
01D0AB
xPSDEV
0040DE
0030DE
036314
3E87C
xPSI
xPsi
˜xPTAYL
xPURGE
3C139
xPUTI
3C0BF
xPUT
3EA49
3C5E4
xPVARS
xPVIEW
3C56E
xPX>C
467
Description
( str substring → n/0 )
( {} ob → n/0 )
( symb exp → symb' )
( ob → ob )
( x → y )
( y → x )
( x → y )
( f x1 x2 → symb )
( f x1 x2 → x )
( n → n' )
( → )
( $ → )
( var → )
( [coefs] → [roots] )
( x → symb' )
( → )
( name → )
( {names} → )
( :port:name → )
( → xpsdev )
( → {x1...xn} )
( symb → symb' )
( symb n → symb' )
( pol x → pol' )
( name → )
( {names} → )
( :port:name → )
( :port:nlib → )
( ob pos obj → [] pos' )
ob = [] or [[]] or {} or name
pos = n or {n} or {n m}
( ob pos obj → ob' )
ob = [] or [[]] or {} or name
pos = n or {n} or {n m}
( nport → {} mem )
( (x,y) → )
( {#n #m} → )
( {#m #n} → (x,y) )
UserRPL: PX→C
468
C. User RPL Commands
Addr.
3DA3E
Name
x->Q
3DA63
x->QPI
0310AB
3E66F
3D6F6
028314
04B314
3B564
3B3E6
02A0AB
0350AB
3DBCA
xQR
xQUAD
xQUOTE
˜xQUOT
˜xQXA
xRAD
xRAND
xRANK
xRANM
xPREDIV
38F01
xR>B
3D393
3B7ED
xRCEQ
xR>C
3918E
3B715
03F0DE
xRCLALARM
xRCLF
xRCLVX
3DDA9
xRCLSIGMA
3EF79
3EA2E
3E6F1
xRCLKEYS
xRCLMENU
xRCL
3B6FA
3B0AE
xRCWS
xR>D
Description
( x → a/b )
UserRPL: →Q
( x → symb )
UserRPL: →Qπ
( [[]] → [[Q]] [[R]] [[P]] )
( symb var → symb' )
( ob → 'ob )
( p1 p2 → p3 )
( symb [vars] → [[]] [vars] )
( → )
( → x )
( [[]] → n )
( {m n} → [[]] )
( x y → x/y )
UserRPL: RATIO
( x → # )
UserRPL: R→B
( → EQ )
( x y → (x,y) )
UserRPL: R→C
( n → {date time action rep} )
( → {#s1 #u1 #s2 #u2} )
( → name )
Recall the current content of the reserved
CAS variable VX.
( → [[]] )
UserRPL: RCLΣ
( → {ob ... key ...} )
( → x )
( var → x )
( :port:nlib → lib )
( :port:name → ob )
( :port:{path} → ob )
( → n )
( x → (180/π)x )
UserRPL: R→D
C.1. Reference
Addr.
3BEEC
Name
xRDM
3B401
3ED22
xRDZ
xRECN
0110AB
3ED56
048314
3B819
xRECT
xRECV
˜xREF
xRE
02A314
0130DD
069314
38105
3B9D2
˜xREMAINDER
xRENAME
˜xREORDER
xREPEAT
xREPL
3C41A
3EAE7
0050DE
05D0AB
3F070
xRES
xRESTORE
xRESULTANT
xREVLIST
xR>I
00D314
0220AB
0210AB
0200AB
˜xRISCH
xRKFERR
xRKFSTEP
xRKF
38E01
38E21
3AEB1
3B16C
3DD33
3DD18
06F0AB
3D3CE
xRL
xRLB
xRND
xRNRM
xROLLD
xROLL
xROMUPLOAD
xROOT
469
Description
( ob size → ob' )
( name size → )
ob= [] or [[]]
size = {n} or {n m}
( x → )
( name → )
( $name → )
( → )
( → )
( [[]] → [[]]' )
( (x,y) → x )
( [] → []' )
( p1 p2 → p3 )
( name name' → )
( pol var → pol' )
( 1/0 → )
( ob pos new → ob' )
ob= [[]] or [] or {} or $ or PICT
pos= N or {n m} or (n,m)
( n_int → )
( :port:name → )
( p1 p2 → res )
( {1...n} → {n...1}' )
( x → n )
UserRPL: R→I
( f var → F )
( {} h → {} h dy err )
( {} tol h → {} tol h' )
( {} xtol xTf → {} xtol )
( {} {xtol step} xTf → {} xtol )
( # → #' )
( # → #' )
( x n → x' )
( [] → x )
( n ... 1 n → 1 n...2 )
( 1...n n → 2...n 1 )
( → )
( prog/s var guess → x )
( prog/s var {guesses} → x )
470
C. User RPL Commands
Addr.
3DC71
03C0AB
Name
xROT
xROW-
03D0AB
xROW+
0360AB
x→ROW
0370AB
xROW→
38E41
38E61
0340AB
047314
078314
0240AB
0230AB
0250AB
3B22F
xRR
xRRB
xRREF
˜xrref
˜xRREFMOD
xRRKSTEP
xRRK
xRSBERR
xRSD
0400AB
3C9E5
3EE82
3C444
xRSWP
xSAME
xSBRK
x*H
3C464
x*W
3C4D5
3E1EF
0330AB
3B5BA
3E127
xSCALE
xSCATRPLOT
xSCHUR
xSCI
xSCLSIGMA
3E385
07D314
3DF32
xSCONJ
˜xSCROLL
xSDEV
Description
( 1 2 3 → 2 3 1 )
( [[]] nrow → [[]]' [] )
( [] n → []' elt )
( [[]] [[]]' n → [[]]'' )
( [[]] [] n → [[]]' )
( [] n n' → [] )
( [[]] → [1]...[n] n )
( [] → x1...xn n )
( [1]...[n] n → [] )
( x1...xn → [] )
( # → x' )
( # → x' )
( [[]] → [[]]' )
( [[]] → [pp] [[]]' )
( [[]] → [[]]' )
( {} xtol h last → {} xtol h' cur )
( {} xtol xTfinal → {} xtol )
( {} h → {} h dy err )
( [B] [[A]] [Z] → []' )
( [[B]] [[A]] [[Z]] → [[]]' )
( []/[[]] i j → []/[[]] )
( ob1 ob2 → 1/0 )
( → )
( xf → )
UserRPL: SCALEH
( yf → )
UserRPL: SCALEW
( xs ys → )
( → )
( [[]] → [[Q]] [[T]] )
( n → )
( → )
UserRPL: SCLΣ
( name → )
( ob → )
( → xsdev )
( → [x1...xn] )
C.1. Reference
Addr.
3ECB0
Name
xSEND
0530AB
007314
3ED91
064314
3B4C9
3E696
xSEQ
˜xSERIES
xSERVER
˜xSEVAL
xSF
xSHOW
0630AB
0020DE
0010DE
05F314
3A3EE
033314
0220DE
018314
3A678
3E331
3A57C
3BB1F
xSIDENS
xSIGMA
xSIGMAVX
˜xSIGNTAB
xSIGN
˜xSIMP2
xSIMPLIFY
˜xSINCOS
xSINH
xSINV
xSIN
xSIZE
38E81
38EA1
00C0AB
3E35B
0290AB
03F314
086314
008314
05E0AB
0130AB
3A4EF
38EC1
0280AB
38EE1
3EC55
0100DD
xSL
xSLB
xSLOPEFIELD
xSNEG
xSNRM
˜xSOLVE
˜xSOLVER
˜xSOLVEVX
xSORT
xSPHERE
xSQ
xSR
xSRAD
xSRB
xSRECV
xSREPL
471
Description
( name → )
( {names} → )
( {{old new}...} → )
( prog var start end incr → {} )
( func var order → {} symb' )
( → )
( symb → symb' )
( n → )
( symb name → symb' )
( symb {names} → symb' )
( x → x' )
( f var → F )
( f(x) → F(x) )
( symb → {} )
( x → x' )
( x y → x/gcd y/gcd )
( symb → symb' )
( symb → symb' )
( x → x' )
( name → )
( x → x' )
( ob → n )
( ob → {N m} )
( # → #' )
( # → #' )
( → )
( name → )
( [] → x )
( symb var → {zeros} )
( → )
( symb → {zeros} )
( {} → {}' )
( → )
( x → x' )
( # → #' )
( [[]] → x )
( # → #' )
( n → $ 0/1 )
( str find repl → str' )
472
C. User RPL Commands
Addr.
381AB
3B5FA
3851F
Name
xSTART
xSTD
xSTEP
3D3AE
3EE62
39164
xSTEQ
xSTIME
xSTOALARM
3B749
3DD6E
xSTOF
xSTOSIGMA
0400DE
xSTOVX
3EF07
xSTOKEYS
3E739
xSTO
3E823
xSTO>
3E406
3E46C
3E4D2
3E3AF
3BBD9
xSTOxSTO/
xSTO*
xSTO+
xSTR>
0580AB
3BBBE
xSTREAM
x>STR
3B6C1
3B8D7
xSTWS
xSUB
Description
( start finish → )
( → )
( n → )
( symb → )
( ob → )
( x → )
( time → n )
( {date time act rep} → n )
( {#s1 #u1 #s2 #u2} → )
( ob → )
UserRPL: STOΣ
( name → )
Store object into the reserved CAS variable
VX.
( {ob key ...} → )
( {'S' ob key ...} → )
( 'S' → )
( ob name → )
( ob :port:name → )
( lib port → )
( ob 'name(i)' → )
( ob id → )
( ob symb → )
Like xSTO, but if the level 1 argument is symbolic, use the first element of it as the variable
to write to.
( ob name → )
( ob name → )
( ob name → )
( ob name → )
( $ → ob )
UserRPL: STR→
( {} prog → x )
( ob → $ )
UserRPL: →STR
( n → )
( ob start end → ob' )
ob= [[]], $, {}, grob
start,end = n, {n m}, (n,m)
C.1. Reference
Addr.
002314
06F314
02E0AB
02F0AB
3DC20
04E314
39705
061314
Name
˜xSUBST
˜xSUBTMOD
xSVD
xSVL
xSWAP
˜xSYLVESTER
xSYSEVAL
˜xTABVAL
060314
3EFB1
˜xTABVAR
x->TAG
0520AB
xTAIL
01C0DE
021314
01F314
3A70C
3A624
006314
3E6CA
05B314
01A314
0640AB
065314
013314
3C8FA
37F7F
39093
39124
xTAN2CS2
˜xTAN2SC2
˜xTAN2SC
xTANH
xTAN
˜xTAYLOR0
xTAYLR
˜xTCHEBYCHEFF
˜xTCOLLECT
xTDELTA
˜xTEVAL
˜xTEXPAND
xTEXT
xTHEN
xTICKS
xSETTIME
3905D
0650AB
3C6B6
xTIME
xTINC
xTLINE
019314
3E97B
˜xTLIN
xTMENU
473
Description
( symb var=s1 → symb' )
( x1 x2 → x3 )
( [[]] → [[U]] [[V]] [S] )
( [[]] → [] )
( ob1 ob2 → ob2 ob1 )
( [[]] → [D] [P] )
( # → ? )
( symb(x) {vals} → symb(x) {{vals}
{res}} )
( symb(x) → symb(x) {{}{}} grob )
( ob tag → :tag:ob )
UserRPL: →TAG
( {} → {}' )
( $ → $' )
( symb → symb' )
( symb → symb' )
( symb → symb' )
( x → x' )
( x → x' )
( symb → symb' )
( symb var n → symb' )
( n → pol )
( symb → symb' )
( x y → x' )
( ob → ? time )
( symb → symb' )
( → )
( 0/1 → )
( → # )
( time → )
UserRPL: →TIME
( → time )
( x y → x' )
( (x1,y1) (x2,y2) → )
( {#n1 #m1} {#n2 #m2} → )
( symb → symb' )
( % → [InitMenu%] )
( Ob → [@LIST InitMenu] )
474
C. User RPL Commands
Addr.
3DF4D
Name
xTOT
0270AB
045314
xTRACE
˜xTRAN
3EE0C
01C314
082314
01D314
01B314
01E314
3C084
xTRANSIO
˜xTRIGCOS
˜xTRIGO
˜xTRIGSIN
˜xTRIG
˜xTRIGTAN
xTRN
3AF3E
063314
3C99D
015314
391F8
39456
xTRNC
˜xTRUNC
xTRUTH
˜xTSIMP
xTSTR
xTVARS
0470AB
0480AB
0490AB
04A0AB
3B2DC
3BC39
38FD7
3900B
0140DD
38FB5
xTVM
xTVMBEG
xTVMEND
xTVMROOT
x%T
xTYPE
xUBASE
xUFACT
xUFL1→MINIF
x>UNIT
3F249
3F22E
38195
39420
3E07D
3E0BD
3E09D
3E0DD
xUNPICK
xUNROT
xUNTIL
xUPDIR
xUTPC
xUTPF
xUTPN
xUTPT
Description
( → xsum )
( → {x1...xn} )
( [[]] → x )
( [[]] → [[]]' )
( name → )
( n → )
( symb → symb' )
( → )
( symb → symb' )
( symb → symb' )
( symb → symb' )
( [[]] → [[]]' )
( name → )
( x n → )
( symb1 symb2 → symb3 )
( → )
( symb → symb' )
( date time → $ )
( ntype → {} )
( {n...} → {} )
( → )
( → )
( → )
( var → x )
( x y → 100y/x )
( ob → %type )
( u → u' )
( u1 u2 → u3 )
( ob n → font )
( x u → u' )
UserRPL: →UNIT
( obn...ob1 ob n → ob...ob2 )
( 1 2 3 → 3 1 2 )
( → )
( → )
( n x → x' )
( n1 n2 x → x' )
( n v x → x' )
( n x → x' )
C.1. Reference
Addr.
38F81
3C2AC
Name
xUVAL
xV>
3C2D6
x>V2
3C30A
x>V3
053314
3943B
3DF68
˜xVANDERMONDE
xVARS
xVAR
08C314
00F0AB
00A0DD
0080DD
3DB04
˜xVER
xVERSION
xVISITB
xVISIT
xMATCHDN
3BDB2
3A442
xVTYPE
xSQRT
39819
xWAIT
380DB
0080AB
390AE
3ABAF
xWHILE
xWIREFRAME
xWSLOG
xFACT
3E03D
0700AB
3EC35
xXCOL
xXGET
xXMIT
067314
˜xXNUM
475
Description
( u → x )
( []/() → x y )
( []/() → x y z )
(in current co-system)
UserRPL: V→
( x y → [] )
( x y → () )
UserRPL: →V2
( x y z → [] )
UserRPL: →V3
( {} → [[]] )
( → {} )
( → x )
( → [x1...xn] )
( → $ )
( → $ $ )
( name → )
( name → )
( symb {spat srepl} → symb' 0/1 )
( symb {spat srepl scond} → symb'
0/1 )
UserRPL: ↓MATCH
( name → n )
( x → x' )
√
UserRPL:
( sec → )
( 0 → rc.p )
( → )
( → )
( → $ $ $ $ )
( x → x' )
UserRPL: !
( n → )
( name → )
( $ → 1 )
( $ → $rest 0 )
( x → x' )
476
C. User RPL Commands
Addr.
3CB7A
Name
xXOR
3AD65
xXPON
0710AB
068314
0500AB
3C915
3A278
06E0AB
04F0AB
0000AB
0030AB
39CFC
39F49
39DE8
3CF80
xXPUT
˜xXQ
xXRECV
xXRNG
xXROOT
xXSERV
xXSEND
xXVOL
xXXRNG
xx/
x*
x<=?
3CD21
x#?
3D01F
x>=?
39B58
3CE42
x+
x<
3CBF6
x==
3CEE1
x>
398B9
3B251
3E05D
3C935
00B0AB
0010AB
x=
x%
xYCOL
xYRNG
xYSLICE
xYVOL
Description
( # #' → #'' )
( $ $' → $'' )
( 1/0 1/0 → 1/0 )
( % → )
( symb → )
( name → )
( x → x' )
( name → )
( x1 x2 → )
( y x → Y' )
( → )
( name → )
( x1 x2 → )
( x1 x2 → )
( x y → x-y )
( x y → x/y )
( x y → x*y )
( x y → 1 )
( x y → 0 )
UserRPL: ≤
( x y → 1 )
( x y → 0 )
UserRPL: =
( x y → 1 )
( x y → 0 )
UserRPL: ≥
( x y → x+y )
( x y → 1 )
( x y → 0 )
( x y → 1 )
( x y → 0 )
( x y → 1 )
( x y → 0 )
( x y → x=y )
( x y → xy/100 )
( n → )
( y1 y2 → )
( → )
( y1 y2 → )
C.1. Reference
Addr.
3A097
0040AB
040314
05F0AB
0020AB
Name
xˆ
xYYRNG
˜xZEROS
xZFACTOR
xZVOL
477
Description
( y x → yˆx )
( y1 y2 → )
( symb var → {zeros} )
( xTr yPr → xZf )
( x1 x2 → )
Appendix D
Library 256 and EXTABLE
D.1
The Development Library 256
Library 256 is built-in in the calculator, and contains several commands
for the programmers. Some of this commands are described in section A.3. The
list belows contains the commands and their rompointer address, should you
want to use one of them in your program.
Addr.
000100
001100
002100
003100
004100
005100
006100
007100
008100
009100
00A100
Name
x→H
xH→
x→A
xA→
xA→H
xH→A
x→CD
xCD→
xS→H
xH→S
x→LST
00B100
x→ALG
00C100
x→PRG
00D100
00E100
00F100
010100
011100
012100
xCOMP→
x→RAM
xSREV
xPOKE
xPEEK
xAPEEK
Description
( ob → $hex )
( $hex → ob )
( ob → hxs )
( hxs → ob )
( hxs → $hex )
( $hex → hxs )
( $hex → code )
( code → $hex )
( $ → $hex )
( $hex → $ )
( comp → {} )
( ob1..obn %n → {} )
( comp → symb )
( ob1..obn %n → symb )
( comp → :: )
( ob1..obn %n → :: )
( comp → ob1...obn %n )
( ob → ob )
( $ → $' )
( hxs $hex → )
( hxs1 hxs2 → $hex )
( hxs → hxs' )
478
D.2. The EXTABLE Library
Addr.
013100
Name
xR˜SB
014100
xSB˜B
015100
xLR˜R
016100
xS˜N
017100
xLC˜C
018100
019100
01A100
01B100
01C100
01D100
01E100
01F100
020100
021100
xASM→
xBetaTesting
xCRLIB
xCRC
xMAKESTR
xSERIAL
xASM
xER
x→S2
xXLIB˜
D.2
479
Description
( % → # )
( # → % )
( # → hxs )
( hxs → # )
( %% → % )
( % → %% )
( $ → ID )
( ID → $ )
( %%C → %C )
( %C → %%C )
( Code → $ )
( → $ )
( → lib )
( $ → #crc )
( xlen → $ )
( → $ )
( $ → ob )
( $ {errors} → $' )
( ob → $ )
( xlib xn → ROMPTR )
( ROMPTR → xlib xn )
The EXTABLE Library
The EXTABLE library contains the table of entry points and their addresses. It contains some commands which might be useful in programs, also
listed below. For a description of these commands, see section A.1.
Addr.
001102
Name
xGETADR
002102
xGETNAME
003102
xGETNAMES
004102
xGETNEAR
Description
( $ → hxs )
Get the address of an entry name.
( hxs → $ )
Get the entry name corresponding to an address.
( $start → {} )
Get all entry names which start with the given
string.
( $sub → {} )
Get all entry names which contain the given string.
Appendix E
Error Messages
This appendix lists all “error” messages in the HP49G, even if most have
nothing to do with errors. It is possible to generate an error with the following
messages directly, with words such as ERRORSTO or ERROROUT, or recall them
to the stack with JstGetTHEMESG. See Chapter 22.
All numbers listed are in hexadecimal format.
The symbol ➥ represents a line break.
#n
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
Message
Insufficient Memory
Directory Recursion
Undefined Local Name
Undefined XLIB Name
Memory Clear
Power Lost
Warning:
Invalid Card Data
Object In Use
Port Not Available
No Room in Port
Object Not in Port
Recovering Memory
Try To Recover Memory?
Replace RAM, Press ON
No Mem To Config All
Undefined FPTR Name
Invalid Bank Data
Full Check Bad Crc
Cmprs: not a user bank
No or 2 system bank
Invalid bank
Invalid bank number
Inexisting pack
Pack twice
Ins. Mem.
Erase Fail, Rom faulty
Erase Fail, Low bats
#n
1D
1E
1F
20
21
101
102
103
104
106
107
108
109
10A
10B
10C
10D
10E
10F
110
111
112
113
114
115
116
117
118
480
Message
Erase Fail, Locked Block
Write Adr outside ROM
Write Fail, Rom Faulty
Write Fail, Low bats
Write Fail, Locked Block
No Room to Save Stack
Can’t Edit Null Char.
Invalid User Function
No Current Equation
Invalid Syntax
Real Number
Complex Number
String
Real Array
Complex Array
List
Global Name
Local Name
Program
Algebraic
Binary Integer
Graphic
Tagged
Unit
XLIB Name
Directory
Library
Backup
481
#n
119
11A
11B
11C
11D
11E
11F
120
121
122
124
125
126
127
128
129
12A
12B
12C
12D
12E
12F
130
131
132
133
134
135
136
137
138
139
13A
13B
13C
13D
13F
140
141
142
143
144
145
146
147
148
149
Message
Function
Command
System Binary
Long Real
Long Complex
Linked Array
Character
Code
Library Data
External
LAST STACK Disabled
LAST CMD Disabled
HALT Not Allowed
Array
Wrong Argument Count
Circular Reference
Directory Not Allowed
Non-Empty Directory
Invalid Definition
Missing Library
Invalid PPAR
Non-Real Result
Unable to Isolate
No Room to Show Stack
Warning:➥
Error:
Purge?
Out of Memory
Stack
Last Stack
Last Commands
Key Assignments
Alarms
Last Arguments
Name Conflict
Command Line
Interrupted
Integer
Symbolic Matrix
Font
Aplet
Extended Real
Extended Complex
FlashPtr
Extended Ptr
MiniFont
Extended 1
#n
14A
14B
14C
14D
14E
14F
150
151
152
153
154
155
156
157
158
159
201
202
203
204
205
206
207
208
301
302
303
304
305
501
502
503
504
505
506
601
602
603
604
605
606
607
608
609
60A
60B
60C
Message
Extended 2
Extended 3
YES
NO
TRUE
FALSE
Are you sure?
Low Memory Condition➥Please Wait...
CATALOG
Nonexistent Find Pattern
Not Found
Nonexistent Replace Pattern
Can’t Find Selection
Y= not available
Warning:➥Changes will not be saved
Result not editable in EQW
Too Few Arguments
Bad Argument Type
Bad Argument Value
Undefined Name
LASTARG Disabled
Incomplete➥Subexpression
Implicit () off
Implicit () on
Positive Underflow
Negative Underflow
Overflow
Undefined Result
Infinite Result
Invalid Dimension
Invalid Array Element
Deleting Row
Deleting Column
Inserting Row
Inserting Column
Invalid Σ Data
Nonexistent ΣDAT
Insufficient Σ Data
Invalid ΣPAR
Invalid Σ Data LN(Neg)
Invalid Σ Data LN(0)
Invalid EQ
Current equation:
No current equation.
Enter eqn, press NEW
Name the equation,➥press ENTER
Select plot type
482
#n
60D
60E
60F
610
611
612
613
614
615
616
617
618
619
61A
61B
61C
61D
61E
61F
620
621
622
623
624
625
626
627
628
629
62A
62B
62C
62D
62E
62F
701
702
703
704
705
706
707
708
709
70A
70B
70C
E. Error Messages
Message
Empty catalog
undefined
No stat data to plot
Autoscaling
Solving for
No current data. Enter
data point, press Σ+
Select a model
No alarms pending.
Press ALRM to create
Next alarm:
Past due alarm:
Acknowledged
Enter alarm, press SET
Select repeat interval
I/O setup menu
Plot type:
""
(OFF SCREEN)
Invalid PTYPE
Name the stat data,➥press ENTER
Enter value (zoom out➥if >1), press ENTER
Copied to stack
x axis zoom w/AUTO.➥
x axis zoom.➥
y axis zoom.➥
x and y axis zoom.➥
IR/wire:
ASCII/binary:
baud:
parity:
checksum type:
translate code:
Enter matrix, then NEW
No Associated Numeric View
Algebraic
RPN
Standard
Std
Fixed
Fix
Scientific
Sci
Engineering
Eng
Degrees
Radians
#n
70D
70E
70F
710
711
712
713
714
715
716
717
718
719
71A
71B
71C
71D
71E
71F
720
721
722
723
724
725
726
727
728
729
72A
72B
72C
72D
72E
72F
730
731
732
733
734
735
736
737
738
739
73A
73B
Message
Grads
Rectangular
Polar
Spherical
Operating Mode. . .
Number Format. . . . . .
Angle Measure. . . . . .
Coord System. . . . . . . . .
FM,
Beep
Key Click
Last Stack
Choose calculator operating mode
Choose number display format
Choose decimal places to display
Choose angle measure
Choose coordinate system
Use comma as fraction mark?
Enable standard beep?
Enable key click?
Save last stk for UNDO and ANS?
CALCULATOR MODES
Font:
Stack:
Small
Textbook
Edit:
Small
Full Page
Indent
EQW:
Small
Small Stack Disp
Header:
Clock
Analog
Choose system font
Display stack using small font?
Use pretty print in the stack?
Edit using small font?
Edit in full page?
Automatically indent new lines?
Edit in EQW using small font?
Display EQW using small font?
Choose header height
Display ticking clock?
Analog clock?
483
#n
73C
73D
73E
73F
740
741
742
743
744
745
746
747
748
749
74A
74B
74C
74D
74E
74F
750
751
752
753
754
755
756
757
758
759
75A
75B
75C
75D
75E
75F
760
761
762
763
764
765
766
767
768
769
76A
Message
DISPLAY MODES
Indep var:
Modulo:
Verbose
Step/Step
Complex
Approx
Incr Pow
Simp Non-Rational
Rigorous
Numeric
Enter independent variable name
Enter modulo value
Display calculus information?
Perform operations step by step?
Allow complex numbers?
Perform approx calculations?
Increasing polynomial ordering?
Simplify non rational expr?
Don’t simplify |X| to X?
Replace constants by values?
CAS MODES
Goto row:
Goto column:
Specify a row to go to
Specify a column to go to
Matrix Writer
Bad range value
Start:
Step:
Type:
Zoom:
Small Font
File:
Enter starting value
Enter increment value
Choose table format
Enter zoom factor
Display table using small font?
Enter a filename to save data
TABLE SETUP
Automatic
Build Your Own
Function
Polar
Parametric
Diff Eq
#n
76B
76C
76D
76E
76F
770
771
772
773
774
775
776
777
778
779
77A
77B
77C
77D
77E
77F
780
781
782
783
784
785
786
787
788
789
78A
78B
78C
78D
78E
78F
790
791
792
793
794
795
796
797
798
799
Message
Conic
Truth
Histogram
Bar
Scatter
Slopefield
Fast3D
Wireframe
Ps-Contour
Y-Slice
Gridmap
Pr-Surface
Deg
Rad
Grad
Type:
:
EQ:
Indep:
Connect
Simult
H-Tick:
V-Tick:
Pixels
Depnd:
Save Animation
ΣDAT:
Col:
Cols:
F:
H-Var:
V-Var:
Stiff
∂F∂Y:
∂F∂T:
Choose type of plot
Choose angle measure
Enter function(s) to plot
Enter independent variable name
Connect plot points?
Plot functions simultaneously?
Enter horizontal tick spacing
Enter vertical tick spacing
Tick spacing units are pixels?
Enter dependent variable name
Save slices animation?
Enter data to plot
484
#n
79A
79B
79C
79D
79E
79F
7A0
7A1
7A2
7A3
7A4
7A5
7A6
7A7
7A8
7A9
7AA
7AB
7AC
7AD
7AE
7AF
7B0
7B1
7B2
7B3
7B4
7B5
7B6
7B7
7B8
7B9
7BA
7BB
7BC
7BD
7BE
7BF
7C0
7C1
7C2
7C3
7C4
7C5
7C6
7C7
7C8
E. Error Messages
Message
Enter col to use for horizontal
Enter col to use for vertical
Enter horizontal variable
Enter vertical variable
Use stiff diff eq solver?
Enter derivative w.r.t. soln
Enter derivative w.r.t. indep
PLOT SETUP
H-View:
V-View:
Indep Low:
High:
Step:
Pixels
Depnd Low:
High:
X-Left:
X-Right:
Y-Near:
Y-Far:
Step Indep:
Depnd:
Bar Width:
Z-Low:
Z-High:
XE:
YE:
ZE:
Init:
Final:
Init-Soln:
Tol:
XXLeft:
XXRight:
YYNear:
YYFar:
Enter minimum horizontal value
Enter maximum horizontal value
Enter minimum vertical value
Enter maximum vertical value
Enter minimum indep var value
Enter maximum indep var value
Enter indep var increment
Indep step units are pixels?
Enter minimum depend var value
Enter maximum depend var value
Enter bar width
#n
7C9
7CA
7CB
7CC
7CD
7CE
7CF
7D0
7D1
7D2
7D3
7D4
7D5
7D6
7D7
7D8
7D9
7DA
7DB
7DC
7DD
7DE
7DF
7E0
7E1
7E2
7E3
7E4
7E5
7E6
7E7
7E8
7E9
7EA
7EB
7EC
7ED
7EE
801
802
803
804
805
806
807
808
809
Message
Enter minimum Z view-volume val
Enter maximum Z view-volume val
Enter X eyepoint coordinate
Enter Y eyepoint coordinate
Enter Z eyepoint coordinate
Enter absolute error tolerance
Enter minimum XX range value
Enter maximum XX range value
Enter minimum YY range value
Enter maximum YY range value
PLOT WINDOW
Default
FUNCTION
POLAR
PARAMETRIC
DIFF EQ
CONIC
TRUTH
HISTOGRAM
BAR
SCATTER
SLOPEFIELD
FAST3D
WIREFRAME
PS-CONTOUR
Y-SLICE
GRIDMAP
PR-SURFACE
PLOT WINDOW Enter minimum X view-volume val
Enter maximum X view-volume val
Enter minimum Y view-volume val
Enter maximum Y view-volume val
Enter indep var sample count
Enter depnd var sample count
Goto Level:
Specify a level to go to
HISTORY
Must be >= 0
Must be bewteen 0 and 1
μ0:
x̄:
N:
α:
σ:
Null hypothesis population mean
Sample mean
485
#n
80A
80B
80C
80D
80E
80F
810
811
812
813
814
815
816
817
818
819
81A
81B
81C
81D
81E
81F
820
821
822
823
824
825
826
827
828
829
82A
82B
82C
82D
82E
82F
830
831
832
833
834
835
836
837
838
Message
Sample Size
Significance level
Population standard deviation
Z-TEST: 1 μ, KNOWN σ
Alternative Hypothesis
x̄1:
σ1:
N1:
α:
x̄2:
σ2:
N2:
Sample mean for population 1
Std deviation for population 1
Sample size for population 1
Significance level
Sample mean for population 2
Std deviation for population 2
Sample size for population 2
Z-TEST: 2 μ, KNOWN σ
π0:
x:
N:
α:
Null hyp. population proportion
Success count
Sample size
Significance level
Z-TEST: 1 P
X1:
N1:
α:
X2:
N2:
Success count for sample 1
Size of sample 1
Significance level
Success count for sample 2
Size of sample 2
Z-TEST: 2 P
x̄:
Sx:
μ0:
α:
N:
Null hypothesis population mean
Sample Standard deviation
#n
839
83A
83B
83C
83D
83E
83F
840
841
842
843
844
845
846
847
848
849
84A
84B
84C
84D
84E
84F
850
851
852
853
854
855
856
857
858
859
85A
85B
85C
85D
85E
85F
860
861
862
863
864
865
866
867
Message
Sample Mean
Significance level
Sample size
T-TEST: 1 μ, UNKNOWN σ
x̄1:
S1:
N1:
α:
x̄2:
S2:
N2:
Pooled?
Sample mean for population 1
Std deviation for sample 1
Sample size for population 1
Significance level
Sample mean for population2
Std deviation for sample 2
Sample size for population 2
"Pooled" if checked
T-TEST: 2 μ, UNKNOWN σ
x̄:
σ:
N:
C:
Sample mean
Population standard deviation
Sample size
Confidence level
CONF. INT.: 1 μ, KNOWN σ
x̄1:
σ1:
N1:
C:
x̄2:
σ2:
N2:
Sample mean for population 1
Std deviation for sample 1
Size of sample 1
Sample mean for population 2
Std deviation for sample 2
Size of sample 2
Confidence level
CONF. INT.: 2 μ, KNOWN σ
x:
N:
486
#n
868
869
86A
86B
86C
86D
86E
86F
870
871
872
873
874
875
876
877
878
879
87A
87B
87C
87D
87E
87F
880
881
882
883
884
885
886
887
888
889
88A
88B
88C
88D
88E
88F
890
891
892
893
894
895
896
E. Error Messages
Message
C:
Sample success count
Sample size
Confidence level
CONF. INT.: 1 P
x̄1:
N1:
C:
x̄2:
N2:
Sample 1 success count
Sample 1 size
Sample 2 success count
Sample 2 size
Confidence level
CONF. INT.: 2 P
x̄:
Sx:
N:
C:
Sample mean
Sample standard deviation
Sample size
Confidence level
CONF. INT.: 1 μ, UNKNOWN σ
x̄1:
S1:
N1:
C:
x̄2:
S2:
N2:
Pooled
Sample 1 mean
Std deviation for sample 1
Sample 1 size
Sample 2 mean
Std deviation for sample 2
Sample 2 size
Confidence level
Pooled if checked
CONF. INT.: 2 μ, UNKNOWN σ
Search for:
Replace by:
Case Sensitive
Search For:
Enter search pattern
#n
897
898
899
89A
89B
89C
89D
89E
89F
8A0
8A1
8A2
8A3
8A4
8A5
8A6
8A7
8A8
8A9
8AA
8AB
8AC
8AD
8AE
8AF
8B0
901
902
903
904
905
906
907
908
909
90A
90B
90C
90D
A01
A02
A03
A04
A05
A06
A07
A08
Message
Enter replace pattern
Case sensitive search?
Enter search pattern
FIND REPLACE
FIND
Goto Line:
Specify a line to go to
GOTO LINE
Goto Position:
Specify a position to go to
GOTO POSITION
H-Factor:
V-Factor:
Recenter on cursor
Enter horizontal zoom factor
Enter vertical zoom factor
Recenter plot on cursor?
ZOOM FACTOR
Object:
Name:
Directory
Enter New Object
Enter variable name
Create a new directory?
NEW VARIABLE
Select Object
[not shown because too long]
[not shown because too long]
[not shown because too long]
[not shown because too long]
[not shown because too long]
[not shown because too long]
[not shown because too long]
[not shown because too long]
[not shown because too long]
[not shown because too long]
[not shown because too long]
[not shown because too long]
Inconclusive result
Bad Guess(es)
Constant?
Interrupted
Zero
Sign Reversal
Extremum
Left
Right
487
#n
A09
B01
B02
C01
C02
C03
C04
C05
C06
C07
C08
C09
C0A
C0B
C0C
C0D
C0E
C0F
C10
C11
C12
C13
C14
C15
C16
C17
D01
D02
D03
D04
B901
B902
B903
B904
B905
B906
B907
B908
B909
B90A
B90B
B90C
B90D
B90E
B90F
B910
B911
Message
Expr
Invalid Unit
Inconsistent Units
Bad Packet Block Check
Timeout
Receive Error
Receive Buffer Overrun
Parity Error
Transfer Failed
Protocol Error
Invalid Server Cmd.
Port Closed
Connecting
Retry #
Awaiting Server Cmd.
Sending
Receiving
Object Discarded
Packet #
Processing Command
Invalid IOPAR
Invalid PRTPAR
Low Battery
Empty Stack
Row
Invalid Name
Invalid Date
Invalid Time
Invalid Repeat
Nonexistent Alarm
Press [CONT] for menu
reset/delete this field
Reset value
Delete value
Reset all
Valid object types:
Valid object type:
Any object
Real number
(Complex num)
"String"
[ Real array ]
[(Cmpl array)]
{ List }
Name
« Program »
’Algebraic’
#n
B912
B913
B914
B915
B916
B917
B918
B919
B91A
B91B
B91C
B91D
B91E
B91F
B920
B921
B922
B923
B924
B925
B926
B927
B928
B929
B92A
B92B
B92C
B92D
B92E
B92F
B930
B931
B932
B933
B934
B935
B936
B937
B938
B939
B93A
B93B
B93C
B93D
B93E
B93F
B940
Message
# Binary int
_Unit object
Invalid object type
Invalid object value
Calculator Modes
Number Format:
Angle Measure:
Coord System:
Beep
Clock
FM,
Choose number display format
Enter decimal places to display
Choose angle measure
Choose coordinate system
Enable standard beep?
Display ticking clock?
Use comma as fraction mark?
Standard
Std
Fixed
Fix
Scientific
Sci
Engineering
Eng
Degrees
Deg
Radians
Rad
Grads
Grad
Rectangular
Polar
Spherical
SYSTEM FLAGS
01 General solutions
02 Constant → symb
03 Function → symb
14 Payment at end
19 →V2 → vector
20 Underflow → 0
21 Overflow → ±9E499
22 Infinite → error
27 ’X+Y*i’ → ’(X,Y)’
28 Sequential plot
29 Draw axes too
488
#n
B941
B942
B943
B944
B945
B946
B947
B948
B949
B94A
B94B
B94C
B94D
B94E
B94F
B950
B951
B952
B953
B954
B955
B956
B957
B958
B959
B95A
B95B
B95C
B95D
B95E
B95F
B960
B961
B962
B963
B964
B965
B966
B967
B968
B969
B96A
B96B
B96C
B96D
B96E
B96F
E. Error Messages
Message
31 Connect points
32 Solid cursor
35 ASCII transfer
36 RECV renames
37 Single-space prnt
38 Add linefeeds
39 Show I/O messages
40 Don’t show clock
41 12-hour clock
42 mm/dd/yy format
43 Reschedule alarm
44 Delete alarm
51 Fraction mark: .
52 Show many lines
53 No extra parens
54 Tiny element → 0
55 Save last args
56 Standard beep on
57 Alarm beep on
58 Show INFO
59 Show variables
60 [α][α] locks
61 [USR][USR] locks
62 User keys off
63 Custom ENTER off
65 All multiline
66 Stack:x lines str
67 Digital clock
68 No AutoIndent
69 Line edit
70 →GROB 1 line str
71 Show addresses
72 Stack:current fnt
73 Edit:current font
74 Right stack disp
75 Key click off
76 Purge confirm
79 Textbook on
80 EQW cur stk font
81 GRB Alg cur font
82 EQW edit cur font
83 Display grobs on
85 Normal stk disp
90 CHOOSE:cur font
91 MTRW:matrix
92 MASD asm mode
94 Result = LASTCMD
#n
B970
B971
B972
B973
B974
B975
B976
B977
B978
B979
B97A
B97B
B97C
B97D
B97E
B97F
B980
B981
B982
B983
B984
B985
B986
B987
B988
B989
B98A
B98B
B98C
B98D
B98E
B98F
B990
B991
B992
B993
B994
B995
B996
B997
B998
B999
B99A
B99B
B99C
B99D
B99E
Message
95 RPN mode
97 List:horiz disp
98 Vector:horiz disp
99 CAS:quiet
100 Step by step off
103 Complex off
105 Exact mode on
106 Simp. in series
109 Sym. factorize
110 Normal matrices
111 Simp non rat.
112 i simplified
113 Linear simp on
114 Disp 1+x → x+1
115 SQRT simplified
116 Prefer cos()
117 CHOOSE boxes
119 Rigorous on
120 Silent mode off
123 Allow Switch Mode
125 Accur. Sign-Sturm
126 rref w/ last col
128 Cmplx var allowed
01 Principal value
02 Constant → num
03 Function → num
14 Payment at begin
19 →V2 → complex
20 Underflow → error
21 Overflow → error
22 Infinite → ±9E499
27 ’X+Y*i’ → ’X+Y*i’
28 Simultaneous plot
29 Don’t draw axes
31 Plot points only
32 Inverse cursor
35 Binary transfer
36 RECV overwrites
37 Double-space prnt
38 No linefeeds
39 No I/O messages
40 Show clock
41 24-hour clock
42 dd.mm.yy format
43 Don’t reschedule
44 Save alarm
51 Fraction mark: ,
489
#n
B99F
B9A0
B9A1
B9A2
B9A3
B9A4
B9A5
B9A6
B9A7
B9A8
B9A9
B9AA
B9AB
B9AC
B9AD
B9AE
B9AF
B9B0
B9B1
B9B2
B9B3
B9B4
B9B5
B9B6
B9B7
B9B8
B9B9
B9BA
B9BB
B9BC
B9BD
B9BE
B9BF
B9C0
B9C1
B9C2
B9C3
B9C4
B9C5
B9C6
B9C7
B9C8
B9C9
B9CA
B9CB
B9CC
B9CD
Message
52 Show one line
53 Show all parens
54 Use tiny element
55 No last args
56 Standard beep off
57 Alarm beep off
58 Don’t show INFO
59 Show names only
60 [α] locks Alpha
61 [USR] locks User
62 User keys on
63 Custom ENTER on
65 Level 1 multiline
66 Stk: 1 line str
67 Analog clock
68 AutoIndent
69 Infinite line edit
70 →GROB x lines str
71 No addresses
72 Stack:mini font
73 Edit:mini font
74 Left stack disp
75 Key click on
76 No purge confirm
79 Textbook off
80 EQW mini stk font
81 GRB Alg mini font
82 EQW edit mini fnt
83 Display grobs off
85 SysRPL stk disp
90 CHOOSE:mini font
91 MTRW:list of list
92 MASD SysRPL mode
94 Result <> LASTCMD
95 Algebraic mode
97 List:vert disp
98 Vector:vert disp
99 CAS:verbose
100 Step by step on
103 Complex on
105 Approx. mode on
106 !Simp. in series
109 Num. factorize
110 Large matrices
111 !Simp non rat.
112 i not simplified
113 Linear simp off
#n
B9CE
B9CF
B9D0
B9D1
B9D2
B9D3
B9D4
B9D5
B9D6
B9D7
B9D8
B9D9
B9DA
BA01
BA02
BA03
BA04
BA05
BA06
BA07
BA08
BA09
BA0A
BA0B
BA0C
BA0D
BA0E
BA0F
BA10
BA11
BA12
BA13
BA14
BA15
BA16
BA17
BA18
BA19
BA1A
BA1B
BA1C
BA1D
BA1E
BA1F
BA20
BA21
BA22
Message
114 Disp x+1 → 1+x
115 SQRT !simplified
116 Prefer sin()
117 Soft MENU
119 Rigorous off
120 Silent mode on
123 Forb. Switch Mode
125 FastSign-no Sturm
126 rref w/o last col
128 Vars are reals
Object:
Obs in
Name:
1.Send to HP 49. . .
2.Get from HP 49
3.Print display
4.Print. . .
5.Transfer. . .
6.Start Server
Enter names of vars to send
Vars in
SEND TO HP 49
Port:
Dbl-Space
Delay:
Xlat:
Linef
Baud:
Parity:
Len:
Choose print port
Enter object(s) to print
Print extra space between lines?
Enter delay between lines
Choose character translations
Print linefeed between lines?
Choose baud rate
Choose parity
Enter printer line length
PRINT
Type:
OvrW
Fmt:
Chk:
Choose transfer port
Choose type of transfer
Enter names of vars to transfer
490
#n
BA23
BA24
BA25
BA26
BA27
BA28
BA29
BA2A
BA2B
BA2C
BA2D
BA2E
BA2F
BA30
BA31
BA32
BA33
BA34
BA35
BA36
BA37
BA38
BA39
BA3A
BA3B
BA3C
BA3D
BA3E
BA3F
BA40
BA41
BA42
BA43
BB01
BB02
BB03
BB04
BB05
BB06
BB07
BB08
BB09
BB0A
BB0B
BB0C
BB0D
BB0E
E. Error Messages
Message
Choose transfer format
Choose checksum type
Overwrite existing variables?
TRANSFER
Local vars
Remote PC files
Files in
Enter name of dir to change to
Choose Remote Directory
Infrared
IR
Wire
Kermit
XModem
Odd
Even
Mark
Space
Spc
ASCII
ASC
Binary
Bin
None
Newline (Ch 10)
Newl
Chr 128-159
→159
→255
Chr 128-255
One-digit arith
Two-digit arith
Three-digit CRC
1.Single-var. . .
2.Frequencies. . .
3.Fit data. . .
4.Summary stats. . .
SINGLE-VARIABLE STATISTICS
ΣDAT:
Type:
Mean
Std Dev
Variance
Total
Maximum
Minimum
Enter statistical data
#n
BB0F
BB10
BB11
BB12
BB13
BB14
BB15
BB16
BB17
BB18
BB19
BB1A
BB1B
BB1C
BB1D
BB1E
BB1F
BB20
BB21
BB22
BB23
BB24
BB25
BB26
BB27
BB28
BB29
BB2A
BB2B
BB2C
BB2D
BB2E
BB2F
BB30
BB31
BB32
BB33
BB34
BB35
BB36
BB37
BB38
BB39
BB3A
BB3B
BB3C
BB3D
Message
Enter variable column
Choose statistics type
Calculate mean?
Calculate standard deviation?
Calculate variance?
Calculate column total?
Calculate column maximum?
Calculate column minimum?
Sample
Population
FREQUENCIES
X-Min:
Bin Count:
Bin Width:
Enter minimum first bin X value
Enter number of bins
Enter bin width
FIT DATA
X-Col:
Y-Col:
Model:
Enter indep column number
Enter dependent column number
Choose statistical model
Correlation
Covariance
PREDICT VALUES
Y:
Enter indep value or press PRED
Enter dep value or press PRED
SUMMARY STATISTICS
Calculate:
ΣX
ΣY
ΣX2
ΣY2
ΣXY
NΣ
Calculate sum of X column?
Calculate sum of Y column?
Calculate sum of squares of X?
Calculate sum of squares of Y?
Calculate sum of products?
Calculate number of data points?
Linear Fit
Logarithmic Fit
Exponential Fit
491
#n
BB3E
BB3F
BB40
BB41
BC01
BC02
BC03
BC04
BC05
BC06
BC07
BC08
BC09
BC0A
BC0B
BC0C
BC0D
BC0E
BC0F
BC10
BC11
BC12
BC13
BC14
BC15
BC16
BC17
BC18
BC19
BC1A
BC1B
BC1C
BC1D
BC1E
BC1F
BC20
BC21
BC22
BC23
BC24
BC25
BC26
BC27
BC28
BC29
BC2A
BC2B
Message
Power Fit
Best Fit
5.Hypoth. tests. . .
6.Conf. interval. . .
1.Browse alarms. . .
2.Set alarm. . .
3.Set time, date. . .
SET ALARM
Message:
Time:
Date:
Repeat:
Enter "message" or « action »
Enter hour
Enter minute
Enter second
Choose AM, PM, or 24-hour time
Enter month
Enter day
Enter year
Enter alarm repeat multiple
Enter alarm repeat unit
SET TIME AND DATE
Choose date display format
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
None
AM
PM
24-hour time
24-hr
1 January
2 February
3 March
4 April
5 May
6 June
7 July
8 August
9 September
10 October
11 November
#n
BC2C
BC2D
BC2E
BC2F
BC30
BC31
BC32
BC33
BC34
BC35
BC36
BC37
BC38
BC39
BC3A
BC3B
BD01
BD02
BD03
BD04
BD05
BD06
BD07
BD08
BD09
BD0A
BD0B
BD0C
BD0D
BD0E
BD0F
BD10
BD11
BD12
BD13
BD14
BD15
BD16
BD17
BD18
BD19
BD1A
BD1B
BD1C
BD1D
BD1E
BD1F
Message
12 December
Week
Day
Hour
Minute
Second
Weeks
Days
Hours
Minutes
Seconds
Month/Day/Year
M/D/Y
Day.Month.Year
D.M.Y
ALARMS
1.Integrate. . .
2.Differentiate. . .
3.Taylor poly. . .
4.Isolate var. . .
5.Solve quad. . .
6.Manip expr. . .
INTEGRATE
Expr:
Var:
Result:
Enter expression
Enter variable name
Enter lower limit
Enter upper limit
Choose result type
Choose disp format for accuracy
DIFFERENTIATE
Value:
Enter variable value
Expression
TAYLOR POLYNOMIAL
Order:
Enter Taylor polynomial order
ISOLATE A VARIABLE
Principal
Get principal solution only?
SOLVE QUADRATIC
MANIPULATE EXPRESSION
MATCH EXPRESSION
Pattern:
Replacement:
492
#n
BD20
BD21
BD22
BD23
BD24
BD25
BD26
BD27
BE01
BE02
BE03
BE04
BE05
BE06
BE07
BE08
BE09
BE0A
BE0B
BE0C
BE0D
BE0E
BE0F
BE10
BE11
BE12
BE13
BE14
BE15
BE16
BE17
BE18
BE19
BE1A
BE1B
BE1C
BE1D
BE1E
BE1F
BE20
BE21
BE22
BE23
BE24
BE25
BE26
BE27
E. Error Messages
Message
Subexpr First
Cond:
Enter pattern to search for
Enter replacement object
Search subexpressions first?
Enter conditional expression
Symbolic
Numeric
Plot
Type:
:
H-View:
Autoscale
V-View:
Choose type of plot
Choose angle measure
Enter function(s) to plot
Enter minimum horizontal value
Enter maximum horizontal value
Autoscale vertical plot range?
Enter minimum vertical value
Enter maximum vertical value
Plot (x(t), y(t))
Enter complex-valued func(s)
Plot y’(t)=f(t,y)
Enter function of INDEP and SOLN
Enter derivative w.r.t. SOLN
Enter derivative w.r.t. INDEP
Use Stiff diff eq solver?
ΣDat:
Col:
Wid:
Enter data to plot
Arrays in
Enter column to plot
Enter bar width
Cols:
Enter col to use for horizontal
Enter col to use for vertical
Steps:
Enter indep var sample count
Enter dep var sample count
Plot Options
Lo:
Hi:
Axes
Simult
#n
BE28
BE29
BE2A
BE2B
BE2C
BE2D
BE2E
BE2F
BE30
BE31
BE32
BE33
BE34
BE35
BE36
BE37
BE38
BE39
BE3A
BE3B
BE3C
BE3D
BE3E
BE3F
BE40
BE41
BE42
BE43
BE44
BE45
BE46
BE47
BE48
BE49
BE4A
BE4B
BE4C
BE4D
BE4E
BE4F
BE50
BE51
BE52
BE53
BE54
BE55
BE56
Message
Connect
Pixels
H-Tick:
V-Tick:
Enter minimum indep var value
Enter maximum indep var value
Draw axes before plotting?
Connect plot points?
Plot functions simultaneously?
Enter indep var increment
Indep step units are pixels?
Enter horizontal tick spacing
Enter vertical tick spacing
Tick spacing units are pixels?
Depnd:
Enter dependent var name
Enter minimum dep var value
Enter maximum dep var value
H-Var:
V-Var:
Enter max indep var increment
Choose horizontal variable
Choose vertical variable
0 INDEP
1 SOLN
SOLN(
X-Left:
X-Right:
Y-Near:
Y-Far:
Z-Low:
Z-High:
Enter minimum X view-volume val
Enter maximum X view-volume val
Enter minimum Y view-volume val
Enter maximum Y view-volume val
Enter minimum Z view-volume val
Enter maximum Z view-volume val
XE:
YE:
ZE:
Enter X eyepoint coordinate
Enter Y eyepoint coordinate
Enter Z eyepoint coordinate
Save Animation
Save animation data after plot?
XX-Left:
493
#n
BE57
BE58
BE59
BE5A
BE5B
BE5C
BE5D
BE5E
BE5F
BE60
BE61
BE62
BE63
BE64
BE65
BE66
BE67
BE68
BE69
BE6A
BE6B
BE6C
BE6D
BE6E
BE6F
BE70
BE71
BE72
BE73
BE74
BE75
BE76
BE77
BF01
BF02
BF03
BF04
BF05
BF06
BF07
BF08
BF09
BF0A
BF0B
BF0C
BF0D
BF0E
Message
XX-Rght:
YY-Near:
YY-Far:
Enter minimum XX range value
Enter maximum XX range value
Enter minimum YY range value
Enter maximum YY range value
XX and YY Plot Options
Zoom Factors
H-Factor:
V-Factor:
Recenter at Crosshairs
Enter horizontal zoom factor
Enter vertical zoom factor
Recenter plot at crosshairs?
Reset plot
Dflt
Auto
Function
Polar
Conic
Truth
Parametric
Diff Eq
Histogram
Bar
Scatter
Slopefield
Wireframe
Ps-Contour
Y-Slice
Gridmap
Pr-Surface
1.Solve equation. . .
2.Solve diff eq. . .
3.Solve poly. . .
4.Solve lin sys. . .
5.Solve finance. . .
SOLVE EQUATION
Enter value or press SOLVE
Eq:
Enter function to solve
Funcs in
Solver Variable Order
Variables:
Enter order of vars to display
SOLVE Y’(T)=F(T,Y)
#n
BF0F
BF10
BF11
BF12
BF13
BF14
BF15
BF16
BF17
BF18
BF19
BF1A
BF1B
BF1C
BF1D
BF1E
BF1F
BF20
BF21
BF22
BF23
BF24
BF26
BF27
BF28
BF29
BF2A
BF2B
BF2C
BF2D
BF2E
BF2F
BF30
BF31
BF32
BF33
BF34
BF35
BF36
BF37
BF38
BF39
BF3A
BF3B
BF3C
BF3D
BF3E
Message
f:
∂f∂y:
∂f∂t:
Indep:
Init:
Final:
Soln:
Tol:
Step:
Stiff
Enter function of INDEP and SOLN
Enter derivative w.r.t. SOLN
Enter derivative w.r.t. INDEP
Enter independent var name
Enter initial indep var value
Enter final indep var value
Enter solution var name
Enter initial solution var value
Press SOLVE for final soln value
Enter absolute error tolerance
Enter initial step size
Calculate stiff differential?
Tolerance
Solution
SOLVE AN·XˆN+. . . +A1·X+A0
Coefficients [ an . . . a1 a0 ]:
Roots:
Enter coefficients or press SOLVE
Enter roots or press SOLVE
Coefficients
Roots
SOLVE SYSTEM A·X=B
A:
B:
X:
Enter coefficients matrix A
Enter constants or press SOLVE
Enter solutions or press SOLVE
Constants
Solutions
N:
I%YR:
PV:
PMT:
P/YR:
FV:
Enter no. of payments or SOLVE
494
#n
BF3F
BF40
BF41
BF42
BF43
BF44
BF45
BF47
BF48
BF49
BF4A
BF4B
BF4C
BF4D
BF4E
BF4F
BF50
BF51
BF52
BF53
BF54
BF55
BF56
C001
DE01
DE02
DE03
DE04
DE05
DE06
DE07
DE08
DE09
DE0A
DE0B
DE0C
DE0D
DE0E
DE0F
DE10
DE11
DE12
DE13
DE14
DE15
DE16
DE17
E. Error Messages
Message
Enter yearly int rate or SOLVE
Enter present value or SOLVE
Enter payment amount or SOLVE
Enter no. of payments per year
Enter future value or SOLVE
Choose when payments are made
TIME VALUE OF MONEY
I%/YR
PV
PMT
FV
End
Begin
Beg
AMORTIZE
Payments:
Principal:
Interest:
Balance:
Enter no. of payments to amort
Principal
Interest
Balance
Unable to find root
denominator(s)
root(s)
last
obvious
factorizing
value
test(s)
searching
TAYLR of ↓ at
nth
is
numerator(s)
Less than
multiplicity
list of
at
factor(s)
Eigenvalues
Computing for
Root mult <
Numerical to symbolic
Invalid operator
Result:
#n
DE18
DE19
DE1A
DE1B
DE1C
DE1D
DE1E
DE1F
DE20
DE21
DE22
DE23
DE24
DE25
DE26
DE27
DE28
DE29
DE2A
DE2B
DE2C
DE2D
DE2E
DE2F
DE30
DE31
DE32
DE33
DE34
DE35
DE36
DE37
DE38
DE39
DE3A
DE3B
DE3C
DE3D
DE3E
DE3F
DE40
DE41
DE42
DE43
DE44
DE45
DE46
Message
Pivots
Press CONT to go on
Test
To be implemented
Unable to factor
Z is not = 1 mod 4
Z is not prime
Empty {} of equations
Not reducible to a rational expression
Non unary operator
User function
Non isolable operator
Not exact system
Parameters not allowed
CAS internal error
Invalid ˆ for SERIES
Operator not implemented (SERIES)
No variable in expr.
No solution found
Invalid derivation arg
No solution in ring
Not a linear system
Can’t derive int. var
Diff equation order>2
INT:invalid var change
Mode switch cancelled
No name in expression
Invalid user function
Can’t find ODE type
Integer too large
Unable to find sign
Non-symmetric matrix
ATAN insufficent order
ASIN at infinity undef
Unsigned inf error
LN[Var] comparison err
Undef limit for var
Bounded var error
Got expr. indep of var
Can’t state remainder
LN of neg argument
Insufficient order
ABS of non-signed 0
Numeric input
Singularity! Continue?
Cancelled
Negative integer
495
#n
DE47
DE48
DE49
DE4A
DE4B
DE4C
DE4D
DE4E
DE4F
DE50
DE51
DE52
DE53
DE54
DE55
DE56
DE57
DE58
DE59
DE5A
DE5B
DE5C
DE5D
DE5E
DE5F
DE60
DE61
DE62
DE63
DE64
DE65
DE66
DE67
DE68
E101
E102
E103
E104
E105
E106
E107
E108
E109
E10A
E10B
E10C
E10D
Message
Parameter is cur. var. dependent
Unsimplified sqrt
Non polynomial system
Unable to solve ODE
Array dimension too large
Unable to reduce system
Complex number not allowed
Polyn. valuation must be 0
Mode switch not allowed here
Non algebraic in expression
Purge current variable
Reduction result
Matrix not diagonalizable
Int[u’*F(u)] with u=
Int. by part u’*v, u=
Square root
Rational fraction
Linearizing
Risch alg. of tower
Trig. fraction, u=
Unknown operator (DOMAIN)
Same points
Unsigned inf. Solve?
CAS not available
Can not store current var
Not available on the HP40G
Not available on the HP49G
SERIES remainder is O(1) at order 3
Delta/Heaviside not available from HOME
Warning, integrating in approx mode
Function is constant
Can not unbind local vars
Replacing strict with large inequality
No valid environment stored
Avogadro’s number
Boltzmann
molar volume
universal gas
std temperature
std pressure
Stefan-Boltzmann
speed of light
permittivity
permeability
accel of gravity
gravitation
Planck’s
#n
E10E
E10F
E110
E111
E112
E113
E114
E115
E116
E117
E118
E119
E11A
E11B
E11C
E11D
E11E
E11F
E120
E121
E122
E123
E124
E125
E126
E127
E128
E129
E401
E402
E403
E404
E405
E406
E407
E408
E601
E602
E603
E604
E605
E606
E607
E608
E609
E60A
E60B
Message
Dirac’s
electronic charge
electron mass
q/me ratio
proton mass
mp/me ratio
fine structure
mag flux quantum
Faraday
Rydberg
Bohr radius
Bohr magneton
nuclear magneton
photon wavelength
photon frequency
Compton wavelen
1 radian
2π radians
in trig mode
Wien’s
k/q
ε0/q
q*ε0
dielectric const
SiO2 dielec cons
ref intensity
CONSTANTS LIBRARY
Undefined Constant
Invalid Mpar
Single Equation
EQ Invalid for MINIT
Too Many Unknowns
All Variables Known
Illegal During MROOT
Solving for
Searching
No Solution
Many or No Solutions
I%YR/PYR ≤ -100
Invalid N
Invalid PYR
Invalid #Periods
Undefined TVM Variable
END mode
BEGIN mode
payments/year
Principal
496
#n
E60C
E60D
E701
E702
E703
E704
E705
E706
10001
10002
10003
10004
10005
10006
10101
10102
10103
10104
E. Error Messages
Message
Interest
Balance
NEAR
MINE
MINES
SCORE:
YOU MADE IT!!
YOU BLEW UP!!
Invalid $ROMID
Invalid $TITLE
Invalid $MESSAGE
Invalid $VISIBLE
Invalid $HIDDEN
Invalid $EXTPRG
Invalid File
Too Many
Unknown Instruction
Invalid Field
#n
10105
10106
10107
10108
10109
1010A
1010B
1010C
1010D
1010E
1010F
10110
10111
10112
10113
10114
10115
31401
Message
Val betw 0-15 expected
Val betw 1-16 expected
Label Expected
Hexa Expected
Decimal Expected
Can’t Find
Label already defined
{ expected
} expected
( expected
Forbidden
Bad Expression
Jump too Long
Val betw 1-8 expected
Insuffisant Memory
Matrix Error
Define Error
No Message here
Part VI
Index
Appendix F
Entries sorted by Name
The entries in this index have been sorted alphabetically, ignoring case.
Leading characters ˆ, ˜, and x have no influence on the position of an entry.
Entries starting with a digit or a symbol are at the end of the index. Note
that for technical reasons, the page number given may be off by one for a few
percent of the entries. If the page reference is 167, the entry may actually be
the first entry on page 168.
Addr.
25F0F
25F0F
106007
003100
004100
20B006
030314
07497
04EA4
39A07
50D006
25FA4
390E4
2F319
390C9
3A7DC
43C006
425006
424006
025314
43A006
533006
3A8D8
451006
450006
54E006
315BB
2EF76
279006
Name
a%>$
a%>$,
ˆA/B2PQR
xA→
xA→H
ˆABCUV
˜xABCUV
ABND
ABORT
xABS
ˆxABSext
ABUFF
xACK
ACK_INIT
xACKALL
xACOS
ˆACOS2ASIN
ˆacos2ln
ˆACOS2LN
˜xACOS2S
ˆACOS2Sext
ˆxACOSext
xACOSH
ˆacosh2ln
ˆACOSH2LNext
ˆxACOSHext
ADDF
AddLeadingSpace
ˆADDLISText
Page
46
46
425
478
478
414
453
117
156
453
348
272
453
453
453
352
366
351
453
357
349
453
367
352
349
312
381
Addr.
378006
295006
112007
2B7CC
00A0E
01661
04E66
2ACA9
13D006
13F006
141006
143006
38B006
406006
38A006
133006
135006
13B006
137006
139006
398006
50E006
510006
53E006
54F006
56E006
151006
513006
53C006
499
Name
ˆADDMATOBJext
ˆADDMULTIPL
ˆADDONEVAR
addrClkOnNib
addrKEYSTATE
addrORghost
addrTEMPENV
addrTEMPTOP
ˆaddt!=
ˆaddt%
ˆaddt%CH
ˆaddt%T
ˆaddt/
ˆaddt0meta
ˆaddt2
ˆaddt<
ˆaddt<=
ˆaddt==
ˆaddt>
ˆaddt>=
ˆaddtˆ
ˆaddtABS
ˆaddtABSEXACT
ˆaddtACOS
ˆaddtACOSH
ˆaddtALOG
ˆaddtAND
ˆaddtARG
ˆaddtASIN
Page
345
384
379
363
363
363
363
359
77
359
363
363
363
363
363
360
362
362
364
364
365
363
362
364
500
Addr.
54C006
540006
549006
560006
14B006
506006
535006
544006
55A006
558006
570006
574006
55E006
564006
39E006
2619D
556006
562006
523006
56A006
56C006
568006
131006
12F006
241006
145006
06E314
577006
14F006
0C9007
0000DE
14D006
55C006
2EF75
149006
511006
537006
53B006
542006
554006
551006
539006
410006
546006
147006
153006
566006
12D006
F. Entries sorted by Name
Name
ˆaddtASINH
ˆaddtATAN
ˆaddtATANH
ˆaddtCEIL
ˆaddtCOMB
ˆaddtCONJ
ˆaddtCOS
ˆaddtCOSH
ˆaddtD->R
ˆaddtEXP
ˆaddtEXPM
ˆaddtFACT
ˆaddtFLOOR
ˆaddtFP
ˆaddti
addtics
ˆaddtINV
ˆaddtIP
ˆaddtLN
ˆaddtLNP1
ˆaddtLOG
ˆaddtMANT
ˆaddtMAX
ˆaddtMIN
ˆADDTMOD
ˆaddtMOD
˜xADDTMOD
ˆaddtNOT
ˆaddtOR
ˆADDTOREAL
xADDTOREAL
ˆaddtPERM
ˆaddtR->D
AddTrailingSpace
ˆaddtRND
ˆaddtSIGN
ˆaddtSIN
ˆaddtSINACOS
ˆaddtSINH
ˆaddtSQ
ˆaddtSQRT
ˆaddtTAN
ˆaddtTAN/2
ˆaddtTANH
ˆaddtTRNC
ˆaddtXOR
ˆaddtXPON
ˆaddtXROOT
Page
364
364
364
365
363
363
363
364
364
364
365
365
365
365
360
364
365
363
365
365
365
362
362
416
363
453
365
363
408
453
363
365
312
363
362
364
364
364
364
364
364
366
364
363
363
365
362
Addr.
2F179
047CF
047DD
2AF37
2B06A
071AB
31123
25FA9
2F178
25E7A
38093
0A8006
093006
080314
11A007
2BE36
2F2DA
2AA43
256EA
25E7B
2F1AF
00E004
00F004
000FF
2F177
3AAE5
41C006
31066
04B0AB
3CA07
03B46
25E7C
36D4E
36EED
36E6B
3F033
33107
012100
2F31A
2EF5A
29F25
29F35
35BD7
0FE006
2A145
2A158
2A055
2A065
Name
AdjEdModes
adrDISABLE_K
adrKEYBUFFER
AEQ1stcase
AEQopscase
AGAIN
aH>HMS
ALARM?
ALARMS@
ALARMxcp
xALG->
ˆALG48FCTR?
ˆALG48MSOLV
xALGB
ˆALGCASCOMPEVAL
ALGcase
AlgCharEdit
AlgDecomp
AlgEntry?
ALGeq?
AlgObEdit
ˆalgparse
ˆalgunwrap
allkeys
AllowPrlcdCl
xALOG
ˆALOG2EXP
aMODF
xAMORT
xAND
AND
AND$
ANDcase
ANDITE
ANDNOTcase
xANS
any
xAPEEK
APNDCRLF
apndvarlst
AppDisplay!
AppDisplay@
APPEND_SPACE
ˆAppendList
AppError!
AppError@
AppExitCond!
AppExitCond@
Page
143
143
151
174
174
374
384
454
353
146
53
278
311
453
351
453
453
136
49
139
139
139
453
10
478
47, 181
73
223
223
49
73
223
223
223
223
ˆaddtASINH – ˜BBRecalOff&Disp
Addr.
29F55
29F75
3D7AC
25690
2EEEE
2F17A
07B007
46C006
068004
3C8C6
3EAC7
3A390
515006
085314
17E006
3312F
3BEC5
3384B
33391
3382D
003007
002007
35E006
3A756
437006
434006
435006
024314
436006
423006
422006
023314
433006
532006
3A88E
44F006
44E006
54B006
2F1A5
01E100
018100
3EEE7
2F3B3
38DE1
0260DE
3A844
432006
431006
Name
AppKeys!
AppKeys0
xAPPLY
AppMode?
APPprompt1!
APPprompt2
ˆApprox
ˆAPPROXCOMPEVAL
ˆArbo
xARC
xARCHIVE
xARG
ˆARG2
˜xARIT
ˆARRAY2MATRIX
arry
xARRY>
ARRYLISTREAL
ARRYREAL
ARRYREALREAL
ˆArryToList
ˆArryToMatrix
ˆARSIZE
xASIN
ˆASIN2ACOS
ˆASIN2ATAN
ˆasin2atan
˜xASIN2C
ˆASIN2Cext
ˆasin2ln
ˆASIN2LN
˜xASIN2T
ˆASIN2Text
ˆxASINext
xASINH
ˆasinh2ln
ˆASINH2LNext
ˆxASINHext
AskQuestion
xASM
xASM→
xASN
AsnKey
xASR
xASSUME
xATAN
ˆatan2asin
ˆATAN2ASIN
Page
223
223
453
224
419
353
453
453
453
38
453
338
10
454
18
13
17
338
65
64
454
352
352
366
454
357
366
351
454
356
349
454
367
352
350
282
479
479
454
208
454
454
366
352
501
Addr.
43E006
43D006
022314
430006
534006
3A94F
453006
452006
548006
3EB64
27882
25FAE
338C3
05040
05068
25E7D
2EF6C
0130DE
3C49F
2EEEF
3C3B2
04A314
049314
382006
04C314
38F21
33661
0905F
081D9
35C006
3C9D3
3E196
080314
2EFBF
2F9006
0110DE
3EDCC
0530B3
05B0B3
05C0B3
03F0B3
0370B3
0380B3
04B0B3
0150B3
0590B3
05A0B3
0190B3
Name
ˆatan2ln
ˆATAN2LNext
˜xATAN2S
ˆATAN2Sext
ˆxATANext
xATANH
ˆatanh2ln
ˆATANH2LNext
ˆxATANHext
xATTACH
Attn#
ATTN?
ATTNERR
ATTNFLG@
ATTNFLGCLR
ATTNxcp
AtUserStack
xAUGMENT
xAUTO
AUTOSCALE
xAXES
˜xAXL
˜xAXM
ˆAXQ
˜xAXQ
xB>R
backup
BAK>OB
BAKNAME
ˆBANGARRY
xBAR
xBARPLOT
˜xBASE
BASE
ˆbase_ln
xBASIS
xBAUD
˜BBDownArrow
˜BBEmpty?
˜BBGetDefltHeight
˜BBGetN
˜BBGetNGrob
˜BBGetNStr
˜BBIsChecked?
˜BBMoveTo
˜BBPgDown
˜BBPgUp
˜BBRecalOff&Disp
Page
366
352
454
356
349
454
367
352
350
454
19
207
19
207
207
197
454
318
454
454
454
345
454
454
101
101
343
454
454
454
177
420
454
246
246
246
246
245
245
246
245
246
246
245
502
Addr.
02F0B3
03B0B3
0250B3
03C0B3
0240B3
03E0B3
0230B3
0260B3
0290B3
0280B3
0220B3
0540B3
0520B3
39765
071A2
08F006
08E006
3EA006
3E2C1
169006
019100
4C8006
0CF006
280006
25FB3
25FB8
25FBD
25FC2
25FC7
3B655
074D0
3E171
33107
33111
3316B
334EF
334F9
33503
3350D
33517
33521
3352B
33535
3353F
33549
33175
33553
3355D
F. Entries sorted by Name
Name
˜BBReDrawBackgr
˜BBRereadChkEnbl
˜BBReReadCoords
˜BBRereadFullScr
˜BBReReadHeight
˜BBReReadNElems
˜BBReReadPageSize
˜BBReReadWidth
˜BBRunCanclAction
˜BBRunENTERAction
˜BBRunEntryProc
˜BBSpace
˜BBUpArrow
xBEEP
BEGIN
ˆBerlekamp
ˆBerlekampP
ˆBESTDIV2
xBESTFIT
ˆBESTMATRIXTYPE
xBetaTesting
ˆBEZOUTMSOLV
ˆBFactor
ˆBICARREE?
BIGDISPN
BIGDISPROW1
BIGDISPROW2
BIGDISPROW3
BIGDISPROW4
xBIN
BIND
xBINS
BINT0
BINT1
BINT10
BINT100
BINT101
BINT102
BINT103
BINT104
BINT105
BINT106
BINT107
BINT108
BINT109
BINT11
BINT110
BINT111
Page
245
246
245
246
245
246
245
245
245
245
245
246
246
454
150
373
373
357
454
65
479
396
331
382
281
281
281
281
281
454
116
454
10
10
10
15
15
15
15
15
15
15
15
15
15
10
15
15
Addr.
33567
33571
3357B
33585
3358F
33599
335A3
335AD
3317F
335B7
335C1
335CB
335D5
335DF
335E9
335F3
335FD
33607
33611
33189
3361B
3361B
33625
33625
33193
3319D
331A7
331B1
331BB
331C5
3311B
331CF
331D9
331E3
331ED
331F7
33201
3371F
33729
3320B
33215
3321F
33229
33125
33233
3323D
33247
33251
Name
BINT112
BINT113
BINT114
BINT115
BINT116
BINT117
BINT118
BINT119
BINT12
BINT120
BINT121
BINT122
BINT123
BINT124
BINT125
BINT126
BINT127
BINT128
BINT129
BINT13
BINT130
BINT130d
BINT131
BINT131d
BINT14
BINT15
BINT16
BINT17
BINT18
BINT19
BINT2
BINT20
BINT21
BINT22
BINT23
BINT24
BINT25
BINT253
BINT255d
BINT26
BINT27
BINT28
BINT29
BINT3
BINT30
BINT31
BINT32
BINT33
Page
15
15
15
15
15
15
15
15
11
15
15
15
15
15
15
16
16
16
16
11
16
16
16
16
11
11
11
11
11
11
10
11
11
11
11
11
11
16
17
11
11
11
11
10
12
12
12
12
˜BBReDrawBackgr – bit/
Addr.
3325B
33265
3326F
33279
33283
3328D
3312F
33297
33387
332A1
332AB
332B5
332BF
332C9
332D3
332DD
332E7
332F1
33139
332FB
33305
3330F
33319
33323
3332D
33337
33341
3334B
33355
33143
3335F
33369
33373
3337D
33387
33391
3339B
333A5
333AF
333B9
3314D
333C3
333CD
333D7
333E1
333EB
333F5
333FF
Name
BINT34
BINT35
BINT36
BINT37
BINT38
BINT39
BINT4
BINT40
BINT40h
BINT41
BINT42
BINT43
BINT44
BINT45
BINT46
BINT47
BINT48
BINT49
BINT5
BINT50
BINT51
BINT52
BINT53
BINT54
BINT55
BINT56
BINT57
BINT58
BINT59
BINT6
BINT60
BINT61
BINT62
BINT63
BINT64
BINT65
BINT66
BINT67
BINT68
BINT69
BINT7
BINT70
BINT71
BINT72
BINT73
BINT74
BINT75
BINT76
503
Page
12
12
12
12
12
12
10
12
13
12
12
12
12
12
12
12
12
12
10
13
13
13
13
13
13
13
13
13
13
10
13
13
13
13
13
13
13
13
14
14
10
14
14
14
14
14
14
14
Addr.
33409
33413
3341D
33157
33427
33607
33431
3343B
33445
3344F
33459
33463
3346D
33477
33481
33161
3348B
33495
3349F
334A9
334B3
334BD
334C7
334D1
334DB
334E5
33585
3358F
335CB
3361B
33625
33751
33495
334C7
336D9
0D4006
2EFC5
2EFC9
2EFC7
2EFC3
2EFC4
2EFC8
2EFC6
2EFC2
2EFBC
2EFB9
2EFBA
2EFBD
Name
BINT77
BINT78
BINT79
BINT8
BINT80
BINT80h
BINT81
BINT82
BINT83
BINT84
BINT85
BINT86
BINT87
BINT88
BINT89
BINT9
BINT90
BINT91
BINT92
BINT93
BINT94
BINT95
BINT96
BINT97
BINT98
BINT99
BINT_115d
BINT_116d
BINT_122d
BINT_130d
BINT_131d
BINT_263d
BINT_91d
BINT_96d
BINTC0h
ˆBIsPrime?
bit#%*
bit#%+
bit#%bit#%/
bit%#*
bit%#+
bit%#bit%#/
bit*
bit+
bitbit/
Page
14
14
14
10
14
16
14
14
14
14
14
14
14
14
14
10
14
14
14
14
15
15
15
15
15
15
15
15
15
16
16
17
14
15
16
332
57
57
57
58
57
57
57
57
57
57
57
57
504
Addr.
2EFAC
2EFB8
2EFAF
2EFAD
2EFB6
2EFB7
2EFB4
2EFB5
2EFB0
2EFB1
2EFB2
2EFB3
2EFAE
3C70A
2F16D
2EF5E
2EE5C
2F31B
2F31C
25E7E
2F31D
3C6E0
25E7F
25E80
0D5006
0100E0
0A5003
0A4003
0D0006
03D0B3
0AB003
0A6003
0130E0
070004
0190E0
0180E0
0030E0
0A7003
3EE47
2F31E
39480
261D4
27E2E
05DBC
261D9
261DE
261E3
51E006
F. Entries sorted by Name
Name
bitAND
bitASR
bitNOT
bitOR
bitRL
bitRLB
bitRR
bitRRB
bitSL
bitSLB
bitSR
bitSRB
bitXOR
xBLANK
Blank$
BlankDA1
BlankDA12
BlankDA2
BlankDA2a
BLANKIT
BOTROW
xBOX
Box/StdLabel
Box/StdLbl:
ˆBRabin
˜BRbrowse
ˆBRDispItems
ˆBRdone
ˆBrentPow
˜BReReadMenus
ˆBRGetItem
ˆBRinverse
˜BRoutput
ˆBrowseMem.1
˜BRRclC1
˜BRRclCurRow
˜BRStoC1
ˆBRViewItem
xBUFLEN
BUILDKPACKET
xBYTES
C%%0=
C%%1
C%%>%%
C%%>C%
C%%CHS
C%%CONJ
ˆC%%SQRT
Page
58
58
58
58
58
58
58
58
58
58
58
58
58
454
48
277
277
277
277
277
279
454
95
95
332
331
246
246
454
455
38
36
37
37
38
38
38
Addr.
27DBF
2B2A7
27DE4
261E8
2B15D
27E09
25E81
2B1C1
2B22A
2F31F
05D2C
25E82
25E83
18B006
25E84
25E85
25E86
25E87
25E88
25E89
25E8A
25E8B
25E8C
25E8F
25E90
261ED
261F2
25E8D
25E8E
25E91
25E92
25E93
25E94
25E95
25E96
25E97
25E98
25E99
25E9A
188006
01E0DE
25E9B
3C58E
3BAF5
25E9C
34D00
2EF72
2EF91
Name
C%-1
C%-1=case
C%0
C%0=
C%0=case
C%1
C%1/
C%1=case
C%2=case
C%>#
C%>%
C%>%%
C%>%%SWAP
ˆC%>C%%
C%ABS
C%ACOS
C%ACOSH
C%ALOG
C%ARG
C%ASIN
C%ASINH
C%ATAN
C%ATANH
C%CˆC
C%CˆR
C%CHS
C%CONJ
C%COS
C%COSH
C%EXP
C%LN
C%LOG
C%RˆC
C%SGN
C%SIN
C%SINH
C%SQRT
C%TAN
C%TANH
ˆC2C%%
xC2P
C>Im%
xC>PX
xC>R
C>Re%
CACHE
CacheStack
CAL_CURS_POS
Page
36
143
36
38
142
36
37
142
143
22
31
37
37
37
37
38
38
38
38
38
38
38
38
37
37
37
37
38
38
38
38
38
37
37
38
38
37
38
38
37
455
37
456
456
37
117
301
bitAND – CHR_:
Addr.
2EF90
2B2F2
57F006
050ED
05089
15B006
07E314
0330DE
467006
46B006
349F9
38B28
349D6
34985
365CC
36C4F
36C4F
349B1
3495D
36C36
365B3
368FB
361B2
365E5
36B53
3652C
2AA70
1D5006
466006
007100
3EB006
0516C
05153
3AD1B
25FEF
25FF4
3C3DC
3B4E9
2DA2B
2DA11
08F007
2B5006
0BE002
05AB3
3355D
2F1AD
2F1A7
26210
Name
CAL_CURS_POS_VIS
CallEditCmd:
ˆCANTFACTOR
CAR$
CARCOMP
ˆCARCOMPext
˜xCASCFG
xCASCMD
ˆCASCOMPEVAL
ˆCASCRUNCH
case
xCASE
case2DROP
case2drop
case2drpfls
caseDEADKEY
caseDoBadKey
caseDROP
casedrop
caseDrpBadKy
casedrpfls
casedrptru
caseERRJMP
caseFALSE
caseSIZEERR
caseTRUE
CASEVAL
ˆCASFLAGEVAL
ˆCASNUMEVAL
xCD→
ˆCDIV2ext
CDR$
CDRCOMP
xCEIL
CENTER$3x5
CENTER$5x7
xCENTR
xCF
cfC
cfF
ˆCFGDISPLAY
ˆCGCDext
ˆChangeFocus
CHANGETYPE
char
CharEdit
CHARSEDIT
CHECK_SCAN_FONT
505
Page
301
311
403
47
68
372
455
455
353
353
139
455
140
139
140
146
146
139
139
146
139
139
146
140
146
140
408
353
478
47
68
455
96
97
455
455
30
30
405
333
179
15
50
Addr.
2F320
04708
25F2B
25EA6
2F162
0AA006
2F163
07D007
03A314
00B0DE
04D0AB
0000B3
070002
072002
076002
074002
077002
073002
2F15A
075002
0050B3
0060B3
0070B3
0630B3
3BC19
05A51
37AA5
33D40
33D47
33D4E
33D55
33D5C
33F46
33D63
33D32
33D6A
33D71
33D2B
33D78
33D7F
33D86
33D8D
33D94
33D9B
33DA2
33DA9
33DB0
33DB7
Name
CHECKHEIGHT
CHECKKEY
CHECKMENU
CheckMenuRow
CHECKPICT
ˆCheckPNoExt
CHECKPVARS
ˆCHECKSING
˜xCHINREM
xCHOLESKY
xCHOOSE
˜Choose
ˆChoose2
ˆChoose3
ˆChoose3CANCL
ˆChoose3Index
ˆChoose3OK
ˆChoose3Save
CHOOSE_INIT
ˆChooseDefHandler
˜ChooseMenu0
˜ChooseMenu1
˜ChooseMenu2
˜ChooseSimple
xCHR
CHR>#
CHR>$
CHR_#
CHR_*
CHR_+
CHR_,
CHR_CHR_->
CHR_.
CHR_...
CHR_/
CHR_0
CHR_00
CHR_1
CHR_2
CHR_3
CHR_4
CHR_5
CHR_6
CHR_7
CHR_8
CHR_9
CHR_:
Page
90
205
293
293
316
374
316
402
455
455
244
233
233
234
233
234
233
233
244
244
244
244
455
22
47
41
41
41
41
41
43
41
41
41
41
41
41
41
41
41
41
41
41
41
41
41
506
Addr.
33DBE
33DC5
33F4D
33FBD
33FCB
33DCC
33DD3
33FC4
33F54
33FA1
33FA8
33E90
33DDA
33F5B
33DE1
33E97
33DE8
33E9E
33EA5
33DEF
33D39
33F62
33EAC
33DF6
33EB3
33DFD
33E04
33EBA
33EC1
33E0B
33E12
33EC8
33F69
33E19
33ECF
33ED6
33E20
33EDD
33E27
33F70
33E2E
33EE4
33EEB
33E35
33F77
33E3C
33EF2
33E43
F. Entries sorted by Name
Name
CHR_;
CHR_<
CHR_<<
CHR_<=
CHR_<>
CHR_=
CHR_>
CHR_>=
CHR_>>
CHR_[
CHR_]
CHR_a
CHR_A
CHR_Angle
CHR_B
CHR_b
CHR_C
CHR_c
CHR_d
CHR_D
CHR_DblQuote
CHR_Deriv
CHR_e
CHR_E
CHR_f
CHR_F
CHR_G
CHR_g
CHR_h
CHR_H
CHR_I
CHR_i
CHR_Integral
CHR_J
CHR_j
CHR_k
CHR_K
CHR_l
CHR_L
CHR_LeftPar
CHR_M
CHR_m
CHR_n
CHR_N
CHR_Newline
CHR_O
CHR_o
CHR_P
Page
41
41
43
43
43
41
41
43
43
42
42
42
41
43
41
42
41
42
42
42
41
43
42
42
42
42
42
42
42
42
42
42
43
42
42
42
42
42
42
41
42
43
43
42
41
42
43
42
Addr.
33EF9
33F7E
33E4A
33F00
33F07
33E51
33F85
33F0E
33E58
33F8C
33F93
33F15
33E5F
33E66
33F1C
33F9A
33E6D
33F23
33F2A
33E74
33F31
33E7B
33E82
33F38
33E89
33F3F
33FAF
33FB6
01D0DE
2F215
2F216
2F217
2F218
2F219
2F13D
51D006
203006
202006
25EA7
2631E
26328
26323
007002
25EA8
262B0
25E9D
26292
262B5
Name
CHR_p
CHR_Pi
CHR_Q
CHR_q
CHR_r
CHR_R
CHR_RightPar
CHR_s
CHR_S
CHR_Sigma
CHR_Space
CHR_t
CHR_T
CHR_U
CHR_u
CHR_UndScore
CHR_V
CHR_v
CHR_w
CHR_W
CHR_x
CHR_X
CHR_Y
CHR_y
CHR_Z
CHR_z
CHR_{
CHR_}
xCIRC
CircleB
CircleG1
CircleG2
CircleW
CircleXor
CK#ˆCK%%SQRT
ˆCK&CONV2INT
ˆCK&CONVINT
Ck&DecKeyLoc
CK&DISPATCH0
CK&DISPATCH1
CK&DISPATCH2
ˆCk&DoMsgBox
Ck&Freeze
CK0
CK0ATTNABORT
CK0NOLASTWD
CK1
Page
43
43
42
43
43
42
41
43
42
43
41
43
42
42
43
42
42
43
43
42
43
42
42
43
42
43
43
43
455
93
93
93
93
93
23
34
328
328
205
197
197
197
283
196
207
196
196
CHR_; – ClrServMode
Addr.
26300
187006
25E9E
26297
26D006
184006
262BA
26305
190006
2629C
185006
262BF
2630A
262A1
186006
262C4
2630F
262A6
262C9
26314
262AB
1CD006
1CE006
1CF006
181006
15A006
2F321
2BF1C
18F006
2F324
158006
19C006
521006
177006
262CE
25F25
172006
2BCA2
2EF06
36B7B
25E9F
16F006
2A7A7
3EDAC
3D2B4
193006
261C0
19E006
Name
CK1&Dispatch
ˆCK1Cext
CK1NoBlame
CK1NOLASTWD
ˆCK1TONOext
ˆCK1Z
CK2
CK2&Dispatch
ˆCK2FPOLY
CK2NOLASTWD
ˆCK2Z
CK3
CK3&Dispatch
CK3NOLASTWD
ˆCK3Z
CK4
CK4&Dispatch
CK4NOLASTWD
CK5
CK5&Dispatch
CK5NOLASTWD
ˆckaddt*
ˆckaddt+
ˆckaddtˆCKALG
ˆCKCARCOMP
CkChr00
CkEQUtil
ˆCKFPOLYext
CKGROBFITS
ˆCKINNERCOMP
ˆCKINT>0
ˆCKLN
ˆCKMATRIXELEM
CKN
CKNNOLASTWD
ˆCKNUMARRY
cknumdsptch1
CKPICT
CKREAL
CKREF
ˆCKSAMESIZE
CkSecoType
xCKSM
CKSYMBTYPE
ˆCKSYMREALCMP
CLCD10
ˆCLEANIDLAM
507
Page
197
201, 333
197
197
421
198, 328
196
197
326
197
198, 328
196
197
197
198, 328
196
197
197
196
197
197
361
360
361
201
73
55
326
90
72
334
348
326
196
197
65
87
316
198
171
339
455
199
201
277
326
Addr.
3DD4E
261C5
2F15B
2F2DC
26021
2A085
2A0A5
2A0B5
2A095
39144
2F153
2EED7
39839
3EC95
2EEC9
2F15E
2EED4
2EED5
2571E
26035
2569A
25676
2649F
09D007
2EE74
2EE7D
2EE8D
2EE75
2EE8E
2EEB3
2EE80
2EE81
2EE8F
2EEA7
2EE90
2EEB5
2EE6E
2EE6D
2EF68
0A1007
319C1
2603A
257BE
2EEAF
2561C
0AC007
2603F
2F325
Name
xCLEAR
CLEARLCD
CLEARMENU
ClearSelection
CLEARVDISP
Clipboard!
Clipboard0
Clipboard?
Clipboard@
xCLKADJ
CLKADJ*
CLKTICKS
xCLLCD
xCLOSEIO
CLOSEUART
Clr16
Clr8
Clr8-15
ClrAlgEntry
ClrAlphaAnn
ClrAppMode
ClrAppSuspOK
ClrBusyAnn
ˆCLRCOMPLEX
ClrDA1Bad
ClrDA1IsStat
ClrDA1OK
ClrDA2aBad
ClrDA2aOK
ClrDA2bBad
ClrDA2bIsEdL
ClrDA2bNoCh
ClrDA2bOK
ClrDA2bTemp
ClrDA2OK
ClrDA3Bad
ClrDA3OK
ClrDAsOK
ClrDouseAlm
ˆCLREXACT
CLRFRC
ClrLeftAnn
ClrNewEditL
ClrNoRollDA2
ClrNUsrKeyOK
ˆCLRPLUSAT0
ClrRightAnn
ClrServMode
Page
455
277
293
306
277
307
307
307
307
455
173
455
455
180
277
277
277
278
278
224
224
278
406
276
273
275
276
275
276
276
276
275
275
275
276
275
275
406
277
276
208
407
277
508
Addr.
26044
26049
3DD8E
3E91A
2EF7B
2EF8A
2F2FA
2EF88
2EF7D
2EF82
2EF80
2EF81
2EF7E
2EF7C
2EF7A
2EF77
2EF78
2EF79
2EF74
2F194
2F195
2EF83
2EF84
2EF7F
3F11C
2F326
2B6006
3311B
081314
526006
518006
3B193
25EA9
262F1
25EA0
2F244
3F481
0F0006
35D08
2602B
35EB6
03F0AB
03E0AB
0390AB
06FD1
34AD3
359AD
35994
F. Entries sorted by Name
Name
ClrSysFlag
ClrUserFlag
xCLSIGMA
xCLUSR
CMD_BAK
CMD_COPY
CMD_COPY.SBR
CMD_CUT
CMD_DEB_LINE
CMD_DEL
CMD_DOWN
CMD_DROP
CMD_END_LINE
CMD_NXT
CMD_PAGED
CMD_PAGEL
CMD_PAGER
CMD_PAGEU
CMD_PLUS
CMD_PLUS2
CMD_PLUS3
CMD_STO_DEBUT
CMD_STO_FIN
CMD_UP
xCMDAPPLY
CMDSTO
ˆCMODext
cmp
˜xCMPLX
ˆCMPLXLN
ˆCNORMext
xCNRM
CodePl>%rc.p
COERCE
COERCE$22
COERCE&CKSGN
COERCE2
ˆCOERCE2Z
COERCEDUP
COERCEFLAG
COERCESWAP
xCOL+
xCOLxCOL→
COLA
COLA_EVAL
COLAcase
COLACOLA
Page
175
175
455
455
305
306
307
306
305
302
305
302
305
305
305
305
305
305
301
301
302
306
306
305
314
424
10
455
349
333
455
205
22
47
22
22
22
22
135
22
455
455
455
131
131
140
131
Addr.
36865
359C8
34AF4
363FB
2BAB3
270006
271006
26E006
3E5A0
0300DE
3B423
0BE006
0C0006
0C1006
0BF006
2EF9A
00D100
262FB
09B007
58B006
099007
096007
095007
275006
2FD006
3BF77
0260AB
3C967
39A6C
0180AB
3396D
0190AB
39B1E
02A0DE
3989C
0FF006
2CB006
8071B
08D08
08D5A
204006
205006
38F41
2F327
2C393
3DE24
3A5D0
42B006
Name
COLAITE
COLANOTcase
COLARPITE
COLASKIP
COLAthexFCN
ˆCOLC1
ˆCOLC2
ˆCOLCext
xCOLCT
xCOLLECT
xCOMB
ˆCombineFac
ˆCombInit
ˆCombNext
ˆCombProd
CommandLineHeight
xCOMP→
COMPEVAL
ˆCOMPLEX?
ˆCOMPLEXERR
ˆCOMPLEXMODE
ˆCOMPLEXOFF
ˆCOMPLEXON
ˆCOMPLISText
ˆCOMPRIMext
xCON
xCOND
xCONIC
xCONJ
xCONLIB
Connecting
xCONST
xCONSTANTe
xCONSTANTS
xCONT
ˆContains?
ˆCONTAINS_LN?
CONTEXT
CONTEXT!
CONTEXT@
ˆCONVBACK2INT
ˆCONVBACKINT
xCONVERT
convertbase
COPYVAR
xCORR
xCOS
ˆcos*tan
Page
139
140
138
131
355
455
455
456
376
376
376
376
312
478
128
406
404
406
406
406
381
73
456
456
456
456
456
20
456
458
456
137
424
169
169
328
328
456
456
456
366
ClrSysFlag – DA1IsStatus?
Addr.
447006
446006
42C006
413006
412006
409006
408006
309006
30D006
30E006
30B006
30C006
52C006
3A6C2
44B006
44A006
52F006
0CE007
3DE3F
3D128
01B100
393CA
08696
25EA1
00113
27195
01A100
3B208
2EEFA
2EEFB
27D3F
2F328
25EA2
25EA3
4D5006
3EA01
0FF007
2597B
25980
057314
22E006
2EEFE
860B8
2658A
26585
2EEEA
26030
26580
Name
ˆcos2exp
ˆCOS2EXPext
ˆCOS2ext
ˆcos2tan
ˆCOS2TAN
ˆcos2tan/2
ˆCOS2TAN/2
ˆCOSEXPA
ˆCOSEXPA*
ˆCOSEXPA*1
ˆCOSEXPA+
ˆCOSEXPAˆxCOSext
xCOSH
ˆcosh2exp
ˆCOSH2EXPext
ˆxCOSHext
ˆCOSTEST
xCOV
xCR
xCRC
xCRDIR
CREATE
CREATEDIR
CRER
CRLF$
xCRLIB
xCROSS
CROSS_HAIRS
CROSS_OFF
CROSSGROB
CROSSMARKON
CRUNCH
CRUNCHNoBlame
ˆCSQFFext
CST
ˆCSTFRACTION?
CtlAlarm!
CtlAlarm@
˜xCURL
ˆCURL
CURRENTMARK?
CurROMBank2
CURSOR+
CURSOR@
CURSOR_END?
CURSOR_OFF
CURSOR_OFF+
509
Page
367
352
351
366
351
365
351
355
369
369
369
369
349
456
367
352
349
456
456
479
456
167
168
43
479
456
90
86
333
293
393
456
415
300
300
300
Addr.
2657B
26594
519006
15D006
0150DE
0120AB
50C006
2C07B
2C086
2C091
2C09C
2C10B
2C268
2C273
2C27E
2C116
2C13A
2C145
2C150
2C2B5
2C15B
2C166
2C171
2C17C
2C187
2C192
2C1B0
2C1CE
2C1D9
2C289
2C1E4
2C21B
2C29F
2C1EF
2C1FA
2C205
2C210
2C226
2C231
2C23C
2C247
2C2AA
2C252
2C25D
2C294
3B06E
2EEB0
2EEAB
Name
CURSOR_OFF0
CURSOR_PART
ˆCXIRext
ˆCXRIext
xCYCLOTOMIC
xCYLIN
ˆCZABS
D/D*
D/D+
D/DD/D/
D/D=
D/Dˆ
D/DˆX
D/DˆY
D/DABS
D/DACOS
D/DACOSH
D/DALOG
D/DAPPLY
D/DARG
D/DASIN
D/DASINH
D/DATAN
D/DATANH
D/DCHS
D/DCONJ
D/DCOS
D/DCOSH
D/DDER
D/DEXP
D/DIFTE
D/DINTEGRAL
D/DINV
D/DLN
D/DLNP1
D/DLOG
D/DSIN
D/DSINH
D/DSQ
D/DSQRT
D/DSUM
D/DTAN
D/DTANH
D/DWHERE
xD>R
DA1Bad?
DA1IsStatus?
Page
300
333
456
37
458
276
276
510
Addr.
2EE62
2BF3A
2EEB1
2EE66
2BF53
2EEB2
2EE7E
2EEB7
2BF6C
2EEA6
2EEB4
2EE63
2BF85
29EE9
0610AB
36E07
39078
2EED0
39238
2EED2
2F329
2F1AB
2DEBB
2DD27
0690AB
0150DD
2F190
2EED1
39218
00C007
00D007
3B670
0B1006
2F32A
2A893
2A878
25EAA
2F1BF
2A842
2A8AE
2A85D
2A8C9
2A8E4
3E576
0370DE
041ED
0250DE
3E85C
F. Entries sorted by Name
Name
DA1OK?
DA1OK?NOTIT
DA2aBad?
DA2aLess1OK?
DA2aOK?NOTIT
DA2bBad?
DA2bIsEdL?
DA2bNoCh?
DA2bOK?NOTIT
DA2bTemp?
DA3Bad?
DA3OK?
DA3OK?NOTIT
DaDGNTc
xDARCY
dARRYcase
xDATE
DATE
xDATE+
DATE+DAYS
Date>d$
Date>hxs13
DAY#
Day>Date
xdB
xDBUG
DcompWidth@
DDAYS
xDDAYS
ˆDEB.MATRIX
ˆDEB.MATRIXTYPE
xDEC
ˆDeCntMulti
DECODE
Decomp#Disp
Decomp#Line
DECOMP$
Decomp%Short
Decomp1Line
DecompEcho
DecompEdit
DecompStd1Line
DecompStd1Line32
xDECR
xDEDICACE
DEEPSLEEP
xDEF
xDEFINE
Page
275
275
276
275
275
276
276
276
275
276
275
275
456
145
456
173
456
173
173
173
456
456
51
173
456
456
375
52
52
53
54
52
54
53
52
52
456
178
456
Addr.
3B549
288006
285006
0360DE
3E0006
2EF95
391D8
3D1C7
29D6A
3EF3B
0F3007
0BA006
2A5006
3C51F
3DCA7
0314C
4F2006
4F3006
80EDC
3D258
1B3006
00E314
1A5006
1A1006
1A3006
1A4006
2C0ED
2C0A7
1DD006
003314
00F314
07E007
3B1BA
3EB84
2F7006
03B0AB
00C0DE
36E93
084314
00E0AB
16E006
345006
004007
38BAE
39725
25EBC
25FB8
25FBD
Name
xDEG
ˆDEG1
ˆDEG2ext
xDEGREE
ˆDEGREext
DEL_CMD
xDELALARM
xDELAY
delimcase
xDELKEYS
ˆDELTAPSOLVE
ˆDemonicLf
ˆDENOLCMext
xDEPND
xDEPTH
DEPTH
ˆDEPTHext
ˆDEPTHOBJext
DEPTHSAVE
xDER
ˆDERARG
˜xDERIV
ˆDERIV
ˆDERIVext
ˆDERIVIDNT
ˆDERIVIDNT1
derprod1
derquot
ˆDERVX
˜xDERVX
˜xDESOLVE
ˆDESOLVE
xDET
xDETACH
ˆdeuxipi
xDIAG→
xDIAGMAP
dIDNTNcase
˜xDIFF
xDIFFEQ
ˆDIMLIMITS
ˆDIMRANM
ˆDIMS
xDIR
xDISP
Disp5x7
DISP@01
DISP@09
Page
456
382
382
378
303
457
457
457
385
375
358
457
457
107
398
398
390
457
388
387
388
388
412
457
457
391
457
457
420
457
145
457
457
64
337
457
282
281
281
DA1OK? – DoDelim
Addr.
25FC2
25FC7
25F16
2EF6F
2EF71
2F19E
2EEFF
2F32B
2EE5A
2F300
25FE5
25FEA
0C0007
2DFE0
2DFF4
25FB3
25FB8
25EAB
25FE0
25FBD
25EAC
25FC2
25FC7
25FCC
261F7
25FD1
25FD6
25FDB
38C00
2C305
25EAD
2C2F9
2EE5B
2A7F7
25EBD
0160DD
255B5
108006
0190DE
118007
3C2006
2F21A
056314
026314
31994
3EF006
072314
22F006
Name
DISP@17
DISP@25
DISP_LINE
DispBadToken
DispBadToken2
DispCommandLine
DispCoord1
DISPCOORD2
DispEditLine
DispILPrompt
DISPLASTROW
DISPLASTROWBUT1
ˆDISPLAYext
DispMenu
DispMenu.1
DISPN
DISPROW1
DISPROW1*
DISPROW10
DISPROW2
DISPROW2*
DISPROW3
DISPROW4
DISPROW5
DISPROW6
DISPROW7
DISPROW8
DISPROW9
DISPST2&FREEZE
DispStatus
DISPSTATUS2
DispStsBound
DispTime?
DispTimeReq?
DispVarsUtil
xDISPXY
Distance
ˆDISTDIVext
xDISTRIB
ˆDISTRIB*
ˆDISTRIB/
Dither
˜xDIV
˜xDIV2
DIV2
ˆDIV2LISText
˜xDIV2MOD
ˆDIVERGENCE
511
Page
281
281
51
312, 274
282
282
274
274
282
282
98
292, 274
292, 274
281
281
281
281
281
281
281
281
281
281
281
281
281
282
274
282
274
274
457
95
372
368
368
95
457
457
372
457
415
Addr.
220006
044314
27A006
3F4006
3F1006
071314
249006
3F0006
062314
48D006
36E43
3816B
073F7
25EAE
25EAF
25EB0
25EBE
2F2F0
2F2EE
2F2E4
2F2F1
2F2E5
2EF04
2F2EF
25EB1
1A7006
02E002
25EBF
2EEC1
25EB2
2EFA6
074E4
2EEC5
2EF02
25EC0
25EB3
09E002
0A0002
09F002
09D002
0B0002
2EF05
2EECB
2EECA
2EFA8
2F2F9
2EECD
25EC1
Name
ˆDIVIS
˜xDIVIS
ˆDIVISext
ˆDIVISIBLE?
ˆDIVMETAOBJ
˜xDIVMOD
ˆDIVMOD
ˆDIVOBJext
˜xDIVPC
ˆDIVPC!
dLISTcase
xDO
DO
DO#EXIT
DO$EXIT
DO%EXIT
Do1st/2nd+:
DO<Del
DO<Skip
DO>BEG
DO>Del
DO>END
DO>LCD
DO>Skip
DO>STR
ˆDO>STRID
ˆDoAlert
DoBadKey
DOBAUD
DOBEEP
DOBIN
DOBIND
DOBUFLEN
DOC>PX
DoCAlarmKey
DOCHR
ˆDoCKeyCancel
ˆDoCKeyChAll
ˆDoCKeyCheck
ˆDoCKeyOK
ˆDoCKeyUnChAll
DOCLLCD
DOCR
docr
DODEC
DODEL.L
DODELAY
DoDelim
Page
415
457
381
357
88, 361
457
420
457
145
457
151
156
156
156
278
303
305
305
303
306
92
305
53
54
282
207
180
178
177
116
180
318
46
244
244
244
244
244
277
181
177
303
181
302
512
Addr.
25EC2
25EB4
2604E
2EEF9
39527
2F2DD
2F2DE
2F2E8
2EEBD
25EC3
26053
2EF60
25EC4
2EFA5
2C371
2EEC4
0AF002
0B5002
25EC5
0B4002
25886
2EF03
05B0AB
0B2006
0210DE
25EC6
2589A
026FE
0AE002
0000B1
25EC7
25EC8
2F192
2F142
008007
007007
00B007
2F2EA
25EC9
2EFA7
2F13C
00A007
009007
2EEC0
2EEC2
2EEBE
25ECA
25ECB
F. Entries sorted by Name
Name
DoDelims
DODISP
DOENG
DOERASE
xDOERR
DoFarBS
DoFarDel
DOFIND
DOFINISH
DoFirstRow
DOFIX
DOGRAPHIC
DoHere:
DOHEX
DoInputForm
DOKERRM
ˆDoKeyCancel
ˆDoKeyEdit
DoKeyOb
ˆDoKeyOK
DoLabel
DOLCD>
xDOLIST
ˆDoLS
xDOMAIN
DoMenuKey
DoMenuKeyNS
DOMINIFONT
ˆDoMKeyOK
˜DoMsgBox
DoNameKeyLRS
DoNameKeyRS
DoNewEqw
DoNewMatrix
ˆDoNewMatrixCplx
ˆDoNewMatrixReal
Page
302
281
177
273
457
303
303
308
180
294
177
318
168
177
257
180
206
293, 95
92
457
375
291
293
ˆDoNewMatrixRealOrCplx
DONEXT
DoNextRow
DOOCT
DoOldMatrix
ˆDoOldMatrixCplx
ˆDoOldMatrixReal
DOOPENIO
DOPARITY
DOPKT
DoPlotMenu
DoPrevRow
308
177
180
180
Addr.
2EECC
2EF01
30A66
25EB5
2F2E9
2F2EB
2F2EC
2AC0E
2EEC6
26058
25ECC
2EEC7
2605D
2565A
3B76C
25EB6
2F23E
25EB7
2EFAA
0540AB
3B1E1
2F2DB
2EEC3
25EB8
0BD002
25EB9
2F2D4
2EE60
25EBA
3C484
06B0AB
2F32C
2F13F
2F32D
3C4BA
36EA7
0230DE
3DC3B
03244
3683D
282CC
36996
3DC56
2F1C6
28ACE
25ECD
2F32E
357CE
Name
DOPRLCD
DOPX>C
DORANDOMIZE
DORCLE
DOREPL
DOREPLACE
DOREPLACE/NEXT
DoRunSafe
DOSBRK
DOSCI
DoSolvrMenu
DOSRECV
DOSTD
DoStdKeys?
DOSTOALLF2
DOSTOE
DOSTOSYSF
DOSTR>
dostws
xDOSUBS
xDOT
DOTEXTINFO
DOTRANSIO
DOTVARS%
ˆDOTVARS{}
DOVARS
dowait
DoWarning
DPRADIX?
xDRAW
xDRAW3DMATRIX
DRAWBOX#
DRAWLINE#3
drax
xDRAX
dREALNcase
xDROITE
xDROP
DROP
DROP#1DROP%0
DROP'
xDROP2
DROP3PICK
DROP?symcomp
DropBadKey
DROPDEADTRUE
DROPDUP
Page
318
33
318
308
308
308
177
180
177
180
177
224
176
318
175
50
57
458
458
312
180
168
169
168
172
282
178
458
458
92
92
458
145
458
106
24
31
130
458
109
86
207
130
106
DoDelims – DUPTYPELAM?
Addr.
35289
364AF
3DCC7
37032
04D3E
3596D
3606B
36342
36007
35733
3574D
2F32F
26062
35280
26215
2E0006
2DF006
3558C
3EFEF
35136
35172
35109
115007
168006
35190
170006
35118
171006
34EBE
3DBEA
03188
3532B
36441
352BD
348F7
36D21
3490E
36ED4
36F51
364C8
35912
34431
35956
3531C
3571E
366D0
362DE
36C0E
Name
DROPFALSE
DROPLOOP
xDROPN
DROPNDROP
DROPNULL$
DROPONE
DROPOVER
DROPRDROP
DROPROT
DROPSWAP
DROPSWAPDROP
DropSysErr$
DropSysObs
DROPTRUE
DropVStack
ˆDROPZ0
ˆDROPZ1
DROPZERO
xDTAG
DTYPEARRY?
DTYPECOL?
DTYPECSTR?
ˆDTYPEGAUSSINT?
ˆDTYPEIRRQ?
DTYPELIST?
ˆDTYPENDO?
DTYPEREAL?
ˆDTYPFMAT?
DUMP
xDUP
DUP
DUP#0<>
DUP#0<>WHILE
DUP#0=
DUP#0=case
DUP#0=csDROP
DUP#0=csedrp
DUP#0=IT
DUP#0=ITE
DUP#0_DO
DUP#1+
DUP#1+PICK
DUP#1DUP#1=
DUP#2+
DUP#<7
DUP$>ID
DUP%0=
513
Page
136
151
458
75, 106
46
21
106
129
106
106
106, 107
136
162
327
327
21
458
199
200
199
200, 333
326, 421
199
339
199
201
117
458
106
26
151
25
141
142
141
141
141
151
24
77, 106
24
26
24
26
116
35
Addr.
3696E
36513
3DC05
35D30
3674D
34797
3432C
35C2C
37258
159006
3F29A
35CE0
36635
25EBB
3622A
3645A
357E2
3627A
3DCE2
36252
16C006
36266
36ABD
36AEA
3611F
0F7006
36133
34FC0
35C40
35FF3
35A56
347AB
36B26
350CD
35136
350EB
35037
35127
35172
35109
351AE
35082
350BE
116007
35181
350FA
35046
350DC
Name
Page
DUP'
130
DUP1LAMBIND
116
xDUP2
458
DUP3PICK
106, 106
DUP3PICK#+
24
DUP4PUTLAM
119
DUP4UNROLL
106
DUP@
166
DupAndThen
ˆDUPCKLEN{}
72
xDUPDUP
458
DUPDUP
106
DUPEQ:
137
DUPGROBDIM
90
DUPINCOMP
71
DUPINDEX@
152
DUPLEN$
47
DUPLENCOMP
68
xDUPN
458
DUPNULL$?
55
ˆDUPNULL[]?
339
DUPNULLCOMP?
68
DUPNULL{}?
72
DUPONE
21
DUPPICK
106
ˆDupQIsZero?
334
DUPROLL
106
DUPROM-WORD?
100
DUPROMPTR@
100
DUPROT
106
DUPSAFE@
166
DUPTEMPENV
119
DUPTWO
21
DUPTYPEAPLET?
200
DUPTYPEARRY?
199
DUPTYPEBINT?
200
DUPTYPECHAR?
200
DUPTYPECMP?
199
DUPTYPECOL?
200
DUPTYPECSTR?
199
DUPTYPEEXT?
200
DUPTYPEFLASHPTR?
200
DUPTYPEFONT?
200
ˆDUPTYPEGAUSSINT? 201, 333
DUPTYPEGROB?
199
DUPTYPEHSTR?
199
DUPTYPEIDNT?
199
DUPTYPELAM?
199
514
Addr.
35190
350AF
350A0
35118
35145
35154
0CC006
35163
3519F
183006
35091
3457F
36AD6
10A006
0FB006
0F9006
109006
36A77
00003
18C006
2C121
2EEE4
2F11C
25ED1
2EEE3
039EF
25F10
0070DD
0090DD
25ECE
25F11
36E57
2F1A9
2F1A8
2EEE5
257A2
806FD
2EEEB
25ED2
2EEEC
2F2DF
2EEE9
02E314
3D8006
3DB006
3DA006
02C0AB
02D0AB
F. Entries sorted by Name
Name
DUPTYPELIST?
DUPTYPELNGCMP?
DUPTYPELNGREAL?
DUPTYPEREAL?
DUPTYPEROMP?
DUPTYPERRP?
ˆDupTypeS?
DUPTYPESYMB?
DUPTYPETAG?
ˆDUPTYPEZ?
DUPTYPEZINT?
DUPUNROT
DUPZERO
ˆDupZIsEven?
ˆDupZIsNeg?
ˆDupZIsOne?
ˆDupZIsTwo?
dvarlsBIND
DZP
ˆE%%>C%%
easyabs
Echo$Key
Echo$NoChr00
Echo2Macros
EchoChrKey
ECUSER
ederr
xEDIT
xEDITB
EDITDECOMP$
editdecomp$w
EditExstCase
EDITF
EditFont
EditLevel1
EditLExists?
EDITLINE
EDITLINE$
EditMenu
EDITPARTS
EditSelect
EditString
˜xEGCD
ˆEGCDext
ˆEGCDNEWG
ˆEGCDSWAP
xEGV
xEGVL
Page
199
200
200
199
200
200
335
199
200
200
200
106, 107
21
334
334
334
334
117
37
302
302
158
458
458
53
53
146
311
300
300
311
309
310
458
380
458
458
Addr.
33157
331BB
342BB
33427
33431
33175
4F9006
3805D
371B3
2F330
2F331
38A54
0570AB
38A14
3B5DA
088314
03B2E
3663A
3BDE6
34999
34920
2F332
36EBB
36F01
25ED3
37829
3664E
3607F
03B97
36D62
2AD81
36D08
3660D
36E7F
36662
3C0006
3776B
3BF006
25ECF
462006
4BF006
00B0DD
010004
01D004
01C004
01B004
011004
019004
Name
EIGHT
EIGHTEEN
EIGHTROLL
EIGHTY
EIGHTYONE
ELEVEN
ˆELMGext
xELSE
Embedded?
ENCODE
ENCODE1PKT
xENDDO
xENDSUB
xENDTIC
xENG
˜xEPSX0
EQ
EQ:
xEQ>
EQcase
EQcasedrop
EQCURSOR?
EQIT
EQITE
EqList?
EQLookup
EQOR
EQOVER
EQUAL
EQUALcase
EQUALcasedrop
EQUALcasedrp
EQUALNOT
EQUALNOTcase
EQUALOR
ˆEQUALPOS2META
EQUALPOSCOMP
ˆEQUALPOSMETA
EQUATION
ˆEQUATION?
ˆEQUIV!
xEQW
ˆEQW3
ˆEQW3Code
ˆEQW3CursorOff
ˆEQW3CursorOn
ˆEQW3Edit
ˆEQW3GROB
Page
10
11
108
14
14
10
399
458
69
458
458
458
458
137
137
458
144
144
144
144
73
70
137
137
137
144
145
144
137
144
137
78
69
78
318
86
387
458
311
98
DUPTYPELIST? – ˜xEXPLN
Addr.
01F004
01A004
01E004
012004
016004
014004
013004
017004
018004
015004
01F100
57E006
3C553
26071
2606C
3376F
33819
33779
58E006
3955B
092006
26067
090006
04ED1
39591
39576
04CE6
04D33
2F1A1
36883
04D0E
04E5E
38ABA
04EB8
091006
214006
038314
06F8E
395AC
2F2E3
2F2FB
38C2C
25ED0
26319
25F29
257006
258006
259006
Name
ˆEQW3GROBmini
ˆEQW3GROBStk
ˆEQW3GROBsys
ˆEQW3StartEdit
ˆEQW3ViewLeft
ˆEQW3ViewLeftX
ˆEQW3ViewMargin
ˆEQW3ViewRight
ˆEQW3ViewRightRPL
ˆEQW3ViewRightX
xER
ˆERABLEERROR
xERASE
ERASE&LEFT$3x5
ERASE&LEFT$5x7
Err#Kill
Err#NoLstArg
Err#NoLstStk
ˆERR$EVALext
xERR0
ˆErrBadDim
ERRBEEP
ˆErrInfRes
ERRJMP
xERRM
xERRN
ERROR@
ERRORCLR
ErrorHandled?
ERROROUT
ERRORSTO
ERRSET
xERRTHEN
ERRTRAP
ˆErrUndefRes
ˆEULER
˜xEULER
EVAL
xEVAL
EVAL.LINE
EVAL.SELECTION
xEVAL>
EVALCRUNCH
EvalNoCK
EvalNoCK:
ˆEvalNoCKx*
ˆEvalNoCKx+
ˆEvalNoCKx-
515
Page
98
98
98
479
403
458
97
97
17
17
17
404
458
403
156
403
156
458
458
156
156
156
156
157
157
403
414
458
128
458
309
309
198
198
417
417
417
Addr.
25A006
25B006
262006
25C006
260006
25D006
25E006
261006
25F006
263006
264006
2EF69
2A3006
283006
284006
0A2007
09E007
098007
097007
2F333
2F2F8
258EF
3709B
27C33
04E37
240006
06C314
3A9B7
087314
01A0DE
458006
250006
3E5E9
34C82
000314
12C006
1D7006
525006
076314
30F006
313006
315006
311006
312006
314006
529006
3E25E
017314
Name
ˆEvalNoCKx/
ˆEvalNoCKxˆ
ˆEvalNoCKxAND
ˆEvalNoCKxCHS
ˆEvalNoCKxCOMB
ˆEvalNoCKxINV
ˆEvalNoCKxMOD
ˆEvalNoCKxOR
ˆEvalNoCKxPERM
ˆEvalNoCKxXOR
ˆEvalNoCKxXROOT
EvalParsed
ˆEVALUSERFCN
ˆEVIDENText
ˆEVIDSOLV
ˆEXACT?
ˆEXACTMODE
ˆEXACTOFF
ˆEXACTON
EXCHINITPK
EXEC_CMD
ExitAction!
ExitAtLOOP
ExitFcn
EXITMSGSTO
ˆEXLR
˜xEXLR
xEXP
˜xEXP&LN
xEXP2POW
ˆexp2sincos
ˆEXPAMOD
xEXPAN
EXPAND
˜xEXPAND
ˆEXPANDˆ
ˆEXPANDBOTH
ˆEXPANDLN
˜xEXPANDMOD
ˆEXPEXPA
ˆEXPEXPA*
ˆEXPEXPA*1
ˆEXPEXPA+
ˆEXPEXPAˆEXPEXPANEG
ˆxEXPext
xEXPFIT
˜xEXPLN
Page
417
417
418
417
418
417
417
418
418
418
418
354
382
382
406
406
406
406
309
291
152
156
356
459
459
367
459
48, 57
459
347
349
459
355
369
369
369
369
369
349
459
459
516
Addr.
418006
3AB6F
41D006
33193
05481
2F334
3398B
336F7
33701
0050AB
0620AB
3ABAF
27B006
27C006
296006
001314
28C006
572006
077314
21F006
043314
573006
576006
27E9B
03AC0
369FF
283E8
36554
36554
0600AB
3F2DF
3F6006
09A006
255DD
255D3
255D8
255D3
255E2
3B529
3B635
3D81D
2F335
21D006
041314
289006
0180DE
282006
01A0AB
F. Entries sorted by Name
Name
ˆEXPLNext
xEXPM
ˆEXPM2EXP
EXT
EXTN
Extobcode
EXTOBOB
EXTREAL
EXTSYM
xEYEPT
xF0λ
xFACT
ˆFACT1ext
ˆFACTOext
ˆFACTOOBJext
˜xFACTOR
ˆFACTORACext
ˆfactorial
˜xFACTORMOD
ˆFACTORS
˜xFACTORS
ˆfacts
ˆfactzint
failed
FALSE
FALSE'
FalseFalse
FalseTrue
FALSETRUE
xFANNING
xFAST3D
ˆFastDiv?
ˆFASTREDUCE
FBoxB
FBoxG1
FBoxG2
FBoxW
FBoxXor
xFC?
xFC?C
xFCNAPPLY
FcnUtilEnd
ˆFCOEF
˜xFCOEF
ˆFDEG2ext
xFDISTRIB
ˆFEVIDENText
xFFT
Page
356
459
351
11
81, 71
20
16
16
459
459
475
381
381
384
459
383
350
459
415
459
350
330
136
136
130
136
136
136
459
459
357
384
94
94
94
94
94
459
459
415
459
382
377
459
Addr.
3E1006
3319D
332FB
3334B
3332D
33323
33355
33305
33341
33337
33319
3330F
067004
00C0DD
06D004
06E004
25F2C
37798
391AE
4C2006
35A006
2F336
2F2F2
2F110
3ED76
264DB
264CC
33139
3344F
34257
33463
33445
34357
3B59A
2F337
105007
201006
200006
1FF006
1FE006
225006
216006
1E9006
1EC006
207006
24D006
239006
251006
Name
ˆFHORNER
FIFTEEN
FIFTY
FIFTYEIGHT
FIFTYFIVE
FIFTYFOUR
FIFTYNINE
FIFTYONE
FIFTYSEVEN
FIFTYSIX
FIFTYTHREE
FIFTYTWO
ˆFiler
xFILER
ˆFILER_MANAGER
ˆFILER_MANAGERTYPE
Find1stT.1
Find1stTrue
xFINDALARM
ˆFindCurVar
ˆFINDELN
FindNext
FindStrInCmd
FINDVARS
xFINISH
FIRSTC+
FIRSTC@
FIVE
FIVEFOUR
FIVEROLL
FIVESIX
FIVETHREE
FIVEUNROLL
xFIX
FixRRP
ˆfk+1/fk
ˆFLAGACOS2S
ˆFLAGASIN2C
ˆFLAGASIN2T
ˆFLAGATAN2S
ˆFLAGAXQ
ˆFLAGCHINREM
ˆFLAGDERIV
ˆFLAGDESOLVE
ˆFLAGDIV2
ˆFLAGDIV2MOD
ˆFLAGDIVPC
ˆFLAGEXPAMOD
Page
378
11
13
13
13
13
13
13
13
13
13
13
188
459
188
188
70
459
387
342
308
86
459
300
10
14
108
14
14
109
459
413
413
413
413
346
414
412
412
413
416
ˆEXPLNext – xFREEZE
Addr.
1D6006
1F3006
1D8006
252006
226006
208006
1FC006
213006
1E5006
1DB006
1EB006
1DC006
22D006
1EA006
20E006
1EE006
1ED006
20D006
1F0006
1D9006
1F2006
1E0006
24F006
094007
210006
24E006
1E6006
211006
212006
224006
10E007
1E8006
1E2006
23B006
20F006
1F4006
0FA007
0FC007
227006
1DA006
1FB006
1FD006
1F6006
1EF006
1F5006
1F7006
1F8006
1F9006
Name
ˆFLAGEXPAND
ˆFLAGEXPLN
ˆFLAGFACTOR
ˆFLAGFACTORMOD
ˆFLAGGAUSS
ˆFLAGGCD
ˆFLAGHALFTAN
ˆFLAGHORNER
ˆFLAGIBP
ˆFLAGIDNTEXEC
ˆFLAGILAP
ˆFLAGINTVX
ˆFLAGJORDAN
ˆFLAGLAP
ˆFLAGLCM
ˆFLAGLDECSOLV
ˆFLAGLDSSOLV
ˆFLAGLGCD
ˆFLAGLIN
ˆFLAGLISTEXEC
ˆFLAGLNCOLLECT
ˆFLAGMATRIXLIMIT
ˆFLAGMPOWMOD
ˆFLAGNAME
ˆFLAGPARTFRAC
ˆFLAGPOWMOD
ˆFLAGPREVAL
ˆFLAGPROPFRAC
ˆFLAGPTAYL
ˆFLAGQXA
ˆFLAGRESULTANT
ˆFLAGRISCH
ˆFLAGSERIES
ˆFLAGSEVAL
ˆFLAGSIMP2
ˆFLAGSINCOS
ˆFLAGSUM
ˆFLAGSUMVX
ˆFLAGSYLVESTER
ˆFLAGSYMBEXEC
ˆFLAGTAN2SC
ˆFLAGTAN2SC2
ˆFLAGTCOLLECT
ˆFLAGTEXPAND
ˆFLAGTLIN
ˆFLAGTRIG
ˆFLAGTRIGCOS
ˆFLAGTRIGSIN
517
Page
411
413
411
395
346
413
413
414
412
411
412
411
345
412
414
412
414
412
411
413
412
405
414
412
414
414
345
380
412
412
416
414
413
346
411
413
413
413
412
413
413
413
413
Addr.
1FA006
23A006
1F1006
0170AB
25ED4
860CC
2EE61
2DCB5
192006
3ACD1
261CA
261CA
2EEC8
2F113
00F0DD
00E0DD
00D0DD
2621A
0030DD
06F004
3DB62
33297
332E7
332C9
332BF
332F1
332A1
332DD
332D3
332B5
332AB
3312F
333B9
05E314
236006
2D4006
3423A
36043
33193
333A5
3339B
33297
34331
3AC87
0D5007
0CB007
3EB2C
39745
Name
ˆFLAGTRIGTAN
ˆFLAGTRUNC
ˆFLAGTSIMP
xFLASHEVAL
FlashMsg
FlashROMTAB2
FlashWarning
FLOAT
ˆFLOAT?
xFLOOR
FLUSH
FLUSHKEYS
FLUSHRSBUF
FNDALARM{}
xFONT6
xFONT7
xFONT8
FONT>
xFONT→
ˆFontBrowser
xFORMUNIT
FORTY
FORTYEIGHT
FORTYFIVE
FORTYFOUR
FORTYNINE
FORTYONE
FORTYSEVEN
FORTYSIX
FORTYTHREE
FORTYTWO
FOUR
FOURFIVE
˜xFOURIER
ˆFOURIER
ˆFOURIERext
FOURROLL
FOURROLLROT
FOURTEEN
FOURTHREE
FOURTWO
FOURTY
FOURUNROLL
xFP
ˆFR2ND%
ˆFRACPARITY
xFREE
xFREEZE
Page
413
416
413
459
282
282
201
459
205
205
459
459
459
283
459
12
12
12
12
12
12
12
12
12
12
10
14
459
415
424
107
108
11
13
13
12
108
459
425
425
460
518
Addr.
27F006
267006
042314
21E006
3B509
3B615
2621F
001004
00A004
00B004
00C004
00D004
002004
003004
004004
005004
006004
007004
008004
009004
0FE007
0AE007
3C955
06B314
164006
0070DE
05F42
383006
04D314
095006
26076
25ED5
02C314
24A006
2B4006
0EC006
075314
2F105
3C1C7
2F2F3
2F2F4
34504
2F2F6
314E4
314CA
001102
0371D
2DDD5
F. Entries sorted by Name
Name
ˆFRND
ˆFROMLISText
˜xFROOTS
ˆFROOTS
xFS?
xFS?C
FSCANFONT
ˆFSTR1
ˆFSTR10
ˆFSTR11
ˆFSTR12
ˆFSTR13
ˆFSTR2
ˆFSTR3
ˆFSTR4
ˆFSTR5
ˆFSTR6
ˆFSTR7
ˆFSTR8
ˆFSTR9
ˆFTAYL
ˆFULLDATA
xFUNCTION
˜xFXND
ˆFXNDext
xGAMMA
GARBAGE
ˆGAUSS
˜xGAUSS
ˆGBASIS
GBUFF
GBUFFGROBDIM
˜xGCD
ˆGCD1MOD
ˆGCDext
ˆGCDHEUext
˜xGCDMOD
GDISPCENTER
xGET
GET.W->
GET.W<get1
GET_CUR_FONT.EXT
GETAB0
GETAB1
xGETADR
GETATELN
getBPOFF
Page
382
418
460
415
460
460
54
55
54
54
54
54
55
55
393
407
460
460
380
460
178
346
460
384
272
273
460
399
460
318
460
308
308
77
312
479
64
Addr.
31518
2F338
04A41
26224
26229
2F339
57D006
04E07
0BB002
26238
2623D
26242
26247
3C22D
2F106
2EEBF
2F33A
25ED6
25ED7
25ED9
2F33B
075A5
3483E
2EF6D
2F33C
25EDA
2624C
25F17
002102
2EEBC
003102
004102
25EDB
2F33D
2F107
04A0B
2EEF5
2F10D
2F10A
2F108
07A007
2F33E
2F33F
04D64
04714
25967
25F18
26233
Name
GETCD0
GetChkPRTPAR
GETDF
GetElemBotVStack
GetElemTopVStack
GetEqN
ˆGETERABLEMSG
GETEXITMSG
ˆGetFieldVals
GetFontCmdHeight
GetFontHeight
GetFontStkHeight
GetHeader
xGETI
GETINDEP
GetIOPAR
GetKermPkt#
GETKEY
GETKEY*
GetKeyOb
GETKP
GETLAM
GETLAMPAIR
GetLastEdit
getmatchtok
GetMenu%
GetMetaVStack
GetMetaVStackDROP
xGETNAME
GETNAME
xGETNAMES
xGETNEAR
GetNextToken
GETPARAM
GETPMIN&MAX
GETPROC
GETPTYPE
GETRES
GetRes
GETRHS
ˆGetRoot
GETSCALE
GETSERIAL
GETTHEMESG
GETTOUCH
GetUserKeys
GetVStack
GetVStackProtectWord
Page
288
163
163
318
403
156
283
273
460
317
181
206
206
206
117
119
51
289
162
161
479
180
479
479
50
316
317
288
317
317
419
317
157
206
208
161
164
ˆFRND – hxs>$
Addr.
2F0FE
2F0FF
2F007
2F109
2F10E
2F100
2F008
2F340
097006
0C80B0
0660AB
094006
3C74A
25588
107007
34A31
2F2E6
3B57F
0090DE
3C5AE
2F341
098006
255A1
00A0AB
38C1B
3317F
2607B
26080
368E7
2EFDB
2F342
25ED8
2E0D5
07C314
0BF007
0860B0
0870B0
26085
36C68
096006
2608A
2558D
3C7D8
25EDC
25EDD
0ED006
001100
005100
Name
GETXMAX
GETXMIN
getxpos
GETXPOS
GETYMAX
GETYMIN
getypos
GETYPOS
ˆGFACTOR
˜gFldVal
xgmol
ˆGMSOLV
xGOR
Gor
ˆGOSPER?
GOTO
GOTOLABEL
xGRAD
xGRAMSCHMIDT
xGRAPH
GraphicExit
ˆGREDUCE
Grey?
xGRIDMAP
xGROB
grob
GROB!
GROB!ZERO
GROB!ZERODRP
GROB+
GROB+#
GROB>GDISP
Grob>Menu
˜xGROBADD
ˆGROBADDext
˜grobAlertIcon
˜grobCheckKey
GROBDIM
GROBDIMw
ˆGSOLVE
GsstFIN
Gxor
xGXOR
H/W>KeyCode
H/WKey>KeyOb
ˆH>Z
xH→
xH→A
519
Page
316
316
317
317
384
384
460
93
425
129
306
460
460
94
460
11
90
91
91
90
91
91
293, 95
460
92
90
90
90
90
384
94
461
205
328
478
478
Addr.
009100
046314
407006
020314
3880D
2608F
26094
25EDE
2EED6
0050DD
26099
0320DE
232006
05C314
059314
231006
3B68B
054314
22C006
3C9C1
25636
3E1CA
3B12C
3B14C
3B10C
39405
08D92
3E3006
4A8006
4A9006
4A6006
4A2006
037314
2C0006
4A1006
3E2006
4AA006
4A3006
2EEF8
3FB006
33175
2F0EE
2F0EF
2EFCF
2EFCC
05A03
2EFC0
2EFC1
Name
xH→S
˜xHADAMARD
ˆHALFTAN
˜xHALFTAN
xHALT
HARDBUFF
HARDBUFF2
HARDHEIGHT
HBUFF_X_Y
xHEADER→
HEIGHTENGROB
xHELP
ˆHERMITE
˜xHERMITE
˜xHESS
ˆHESSIAN
xHEX
˜xHILBERT
ˆHILBERTNOCK
xHISTOGRAM
HISTON?
xHISTPLOT
xHMS+
xHMSxHMS>
xHOME
HOMEDIR
ˆHORN1
ˆHORNASIN!
ˆHORNASIN1!
ˆHORNATAN!
ˆHORNCOS!
˜xHORNER
ˆHORNER1ext
ˆHORNEXP!
ˆHORNext
ˆHORNLN!
ˆHORNSIN!
HSCALE
ˆHSECO2RCext
hxs
HXS#HXS
HXS<=HXS
HXS<HXS
HXS==HXS
HXS>#
HXS>$
hxs>$
Page
478
461
356
461
461
273
273
273
279
461
273
415
461
461
415
461
461
415
461
461
461
461
461
461
169
461
424
387
378
422
10
58
59
59
58
22
46
46
520
Addr.
2EFCA
2EFCE
2EFCD
336C5
417006
02B0DE
104007
39B3B
3F0B7
20C006
031314
0120DE
10D007
0060DE
00B314
2C5006
03B314
217006
2F0EC
33143
05BE9
2E11B
05F2E
272F3
27937
3E9006
027314
33887
3C02E
33143
2B0CC
45C006
191006
2B0EF
334D1
3387D
0716B
20A006
02F314
3D6006
37F48
034004
033004
049004
031004
046004
0BC002
3807D
F. Entries sorted by Name
Name
HXS>%
HXS>=HXS
HXS>HXS
HXSREAL
ˆHYP2EXPext
xHYPERBOLIC
ˆHYPERGEO
xi
xI>R
ˆIABCUV
˜xIABCUV
xIBASIS
ˆIBERNOULLI
xIBERNOULLI
˜xIBP
ˆIBP
˜xICHINREM
ˆICHINREM
ICMPDRPRTDRP
id
ID>$
Id>Menu
ID>TAG
ID_EQ
ID_SIGMADAT
ˆIDIV2
˜xIDIV2
IDLISTOB
xIDN
idnt
idntcase
ˆIDNTEXEC
ˆIDNTLAM?
idntlamcase
IDREAL
IDREALOB
IDUP
ˆIEGCD
˜xIEGCD
ˆIEGCDext
xIF
ˆIfCheckFieldtype
ˆIfCheckSetValue
ˆIfCreateTitleGrob
ˆIfDisplayFromData
ˆIfDisplayFromData2
ˆIFEDispField
xIFEND
Page
31
59
59
16
356
393
462
462
414
461
394
461
461
390
461
414
71
10
46
293, 95
61
116
116
461
19
462
10
145
423
201
145
15
18
128, 150
462
330
462
259
259
259
Addr.
03D004
387AC
01B0AB
027004
02C004
02D004
02B004
030004
028004
02A004
045004
02E004
029004
026004
032004
04C004
04A004
03A004
037004
038004
03B004
039004
020004
042004
0050B0
0060B0
03C004
043004
035004
048004
047004
025004
036004
044004
02F004
024004
021004
023004
03F004
022004
040004
041004
396A4
395F3
04B004
011314
08A007
08B007
Name
ˆIfEnterKeyPress
xIFERR
xIFFT
Page
260
462
462
ˆIfGetCurrentFieldValue 258
ˆIfGetFieldChooseData
258
ˆIfGetFieldChooseDecomp 259
ˆIfGetFieldDecompObject 258
ˆIfGetFieldInternalVa.. 259
ˆIfGetFieldMessageHan.. 258
ˆIfGetFieldObjectsType 258
ˆIfGetFieldPos
261
ˆIfGetFieldResetValue
259
ˆIfGetFieldType
258
ˆIfGetFieldValue
258
ˆIfGetNbFields
259
ˆIfGetPrlgFromTypes
259
ˆIfInitDepth
261
ˆIfKeyCalc
260
ˆIfKeyChoose
259
ˆIfKeyEdit
260
ˆIfKeyInvertCheck
260
ˆIfKeyTypes
260
ˆIfMain
257
ˆIfMain2
261
˜IFMenuRow1
257
˜IFMenuRow2
257
ˆIfONKeyPress
260
ˆIfPutFieldsOnStack
261
ˆIfReset
259
ˆIfSetAllHelpStrings
261
ˆIfSetAllLabelsMessages 261
ˆIfSetCurrentFieldValue 258
ˆIfSetField
259
ˆIfSetFieldPos
261
ˆIfSetFieldResetValue
259
ˆIfSetFieldValue
258
ˆIfSetFieldVisible
258
ˆIfSetGrob
258
ˆIfSetHelpString
260
ˆIfSetSelected
258
ˆIfSetTitle
260
ˆIfSetTitle2
xIFT
462
xIFTE
462
ˆIfTet
˜xILAP
462
ˆILAPDELTA
ˆILAPEXP
392
HXS>% – ˆISOLALL
Addr.
08C007
088007
089007
2F0D4
3B87E
0100DE
503006
25EDF
35BAF
3E54C
2F343
3C33E
2F0E8
07221
367D9
07270
3D9006
2E2006
04C0AB
394C8
2EEE6
2EEE7
2EEE8
092DB
2F0E7
25EE0
25EE1
26256
2B709
2F075
25EE2
26251
366E9
054AF
3BADA
35C68
3D3006
3EEBD
2F154
2F344
2F345
2EF5F
2F155
25790
366006
365006
25795
364006
Name
ˆILAPEXPSC
ˆILAPext
ˆILAPRAText
ILnot?
xIM
xIMAGE
ˆxIMext
ImmedEntry?
INCOMPDROP
xINCR
IncrLAMPKNO
xINDEP
INDEPVAR
INDEX@
INDEX@#INDEXSTO
ˆINEGCD
ˆINFINIext
xINFORM
INHARDROM?
InitEd&Modes
InitEdLine
InitEdModes
InitEnab
InitIOEnv
InitMenu
InitMenu%
INITMKFONT
InitPOLVars
InitSysUI
InitTrack:
InitVirtualStack
INNER#1=
INNERCOMP
INNERCOMP>%
INNERDUP
ˆINPARTFRAC
xINPUT
input$
InputLAttn
InputLEnter
InputLine
input{}
INSERT?
ˆINSERT[]COL[]
ˆINSERT[]ROW[]
INSERT_MODE
ˆINSERTCOL[]
521
Page
392
199
462
348
278
71
462
462
317
151
152
152
330
419
462
179
314
303, 314
314
291
291
289
71
71
71
71
391
462
212
212
212
302
344
344
302
344
Addr.
2EF97
363006
362006
2FC006
3F007
2D3006
0290DE
33805
3D47E
3DD006
06B4E
01E0E8
516006
582006
2D2006
586006
004314
3A32B
402006
583006
52A006
2609E
2E25C
24B006
074314
350006
00110
2F346
81006
3AC3D
2EF006
029314
0011F
800F5
0011A
02B314
113007
2D8006
160006
15F006
2C7006
2C9006
0C8007
2CC006
3E648
4C5006
4C7006
4C6006
Name
InsertEcho
ˆinsertrow[]
ˆINSERTROW[]
ˆINSERT{}N
xINT
ˆINT3
xINTEGER
INTEGER337
xINTEGRAL
ˆINTEGRext
INTEMNOTREF?
˜INTEMPOB?
ˆINTERNALARG2
ˆINTERNALERR
ˆINText
ˆINTVARERR
˜xINTVX
xINV
ˆINVAL2
ˆINVALIDOP
ˆxINVext
INVGROB
InvLabelGrob
ˆINVMOD
˜xINVMOD
ˆINXREDext
IOC
IOCheckReal
IOCsave
xIP
ˆipi
˜xIQUOT
IRAM@
IRAMBUFF
IRC
˜xIREMAINDER
ˆIROOTS
ˆIRRQ#ULTIMATE
ˆIRXC2
ˆIRXCext
ˆIS_SQRT?
ˆIS_XROOT?
ˆISIDREAL?
ˆISNT_IDNT?
xISOL
ˆISOL1
ˆISOL2ext
ˆISOLALL
Page
302
343
343
72
462
390
17
391
171
171
403
390
404
462
462
423
403
348
91
90
462
341
462
420
462
462
382
422
37
424
424
408
462
396
396
396
522
Addr.
584006
00D0DE
4E0006
218006
03C314
283FC
07249
07295
04D004
0E9006
34A22
34B3E
34ABE
36DDF
36D3A
07258
072AD
050314
380006
04D87
04D87
07264
072C2
2F347
2F348
2F349
2F34A
2F34B
2F34C
25EE4
00F0DE
2F0E6
00C10
00C0E
00C0D
3EE2C
39854
25EE5
25EE6
255006
07B314
25EE3
04E004
25949
2593F
2594E
06D0AB
25F2A
F. Entries sorted by Name
Name
ˆISOLERR
xISOM
ˆISPOLYNOMIAL?
ˆISPRIME
˜xISPRIME?
ISTOP-INDEX
ISTOP@
ISTOPSTO
ˆIsUncompressDataString
ˆIsV>V?
IT
ITE
ITE_DROP
j%0=case
jEQcase
JINDEX@
JINDEXSTO
˜xJORDAN
ˆJORDAN
JstGetTHEMESG
JstGETTHEMSG
JSTOP@
JSTOPSTO
JUMPBOT
JUMPLEFT
JUMPRIGHT
JUMPTOP
KDispRow2
KDispStatus2
KeepUnit
xKER
KERMOPEN
kermpktmsg
kermrecvmsg
kermsendmsg
xKERRM
xKEY
Key>StdKeyOb
Key>U/SKeyOb
ˆKEYEVAL
˜xKEYEVAL
KEYINBUFFER?
ˆKeyLookup
KeyOb!
KeyOb0
KeyOb@
xKEYTIME→
Keyword?
Page
404
397
411
462
152
152
152
261
399
138
139
139
142
144
152
152
463
345
157
157
152
152
280
280
280
280
82
463
463
208
208
208
463
206
463
Addr.
3ECE4
394F1
260A3
2F34D
2F34E
2F34F
361006
3C5C9
25877
06C003
06E003
05D314
235006
3E6006
06D003
3314D
2F205
27142
25F95
0010DD
010314
087007
058314
230006
397E5
362B6
80F5A
2BC006
25908
2590D
260A8
260AD
25EE7
2F351
08326
0670AB
255F6
255EC
255F1
255E7
255FB
33A5D
3C866
02D314
375006
055314
017100
012314
Name
xKGET
xKILL
KILLGDISP
KINVISLF
KVIS
KVISLF
ˆla+ELEMsym
xLABEL
LabelDef!
ˆlaDELROW
ˆlaGPROW
˜xLAGRANGE
ˆLAGRANGE
ˆLAGRANGEext
ˆlaINSROW
lam
laMGET0
LAMLNAME
LANGUAGE>
xLANGUAGE→
˜xLAP
ˆLAPext
˜xLAPL
ˆLAPLACIAN
xLAST
LAST$
LASTARGCOUNT
ˆLASTCOMP
LastMenuDef!
LastMenuDef@
LastMenuRow!
LastMenuRow@
LastNonNull
LASTPT?
LASTRAM-WORD
xlbmol
LBoxB
LBoxG1
LBoxG2
LBoxW
LBoxXor
lbrac
xLCD>
˜xLCM
ˆLCPROG2M
˜xLCXM
xLC˜C
˜xLDEC
Page
463
463
273
181
181
181
343
463
290
463
415
379
10
179
463
463
392
463
415
463
48
68
289
289
288
289
168
168
94
94
94
94
94
463
463
337
463
479
463
ˆISOLERR – xLINE
Addr.
081007
082007
083007
084007
0B1002
0B2002
0B3002
25FF9
26008
2601C
26012
25FFE
26003
26017
2600D
2F352
234006
05A314
05636
0567B
05616
17B006
2D9006
0B6006
032314
0160AB
3EB42
4DE006
4EC006
256006
2F21C
0BC006
0BB006
0B5006
49E006
490006
48B006
483006
488006
49C006
4A0006
499006
498006
4A7006
49F006
47F006
4B3006
48C006
Name
ˆLDECSOLV
ˆLDEGENE
ˆLDEPART
ˆLDSSOLVext
ˆLEDispItem
ˆLEDispList
ˆLEDispPrompt
LEFT$3x5
LEFT$3x5Arrow
LEFT$3x5CR
LEFT$3x5CRArrow
LEFT$5x7
LEFT$5x7Arrow
LEFT$5x7CR
LEFT$5x7CRArrow
LEFTCOL
ˆLEGENDRE
˜xLEGENDRE
LEN$
LENCOMP
LENHXS
ˆLENMATRIX
ˆLESSCOMPLEX?
ˆLFCProd
˜xLGCD
xLIBEVAL
xLIBS
ˆLIDNText
ˆLIDNTLVAR
ˆLIFCext
Lift
ˆLiftGeneral
ˆLiftLinear
ˆLiftZAdic
ˆLIM#VARX!
ˆLIM%#!
ˆLIM*!
ˆLIM+-!
ˆLIM/!
ˆLIMABS!
ˆLIMALPHA!
ˆLIMASIN!
ˆLIMATAN!
ˆLIMATAS!
ˆLIMBETA!
ˆLIMCMPL!
ˆLIMCOMP!
ˆLIMDIVPC!
523
Page
391
391
391
391
245
245
244
97
97
97
97
97
97
97
97
279
415
463
47
68
57
343
424
375
463
463
463
397
398
395
376
376
375
387
387
387
386
387
Addr.
4AF006
4B0006
481006
482006
480006
475006
476006
484006
4BC006
496006
49B006
4AD006
4B1006
487006
494006
005314
477006
46D006
474006
473006
47C006
47E006
495006
4B2006
485006
489006
48F006
491006
492006
493006
48E006
486006
4A4006
4A5006
472006
497006
4B5006
48A006
49A006
478006
479006
47A006
47B006
4BE006
4BD006
4C3006
014314
3C68C
Name
ˆLIMDL!
ˆLIMDLINF!
ˆLIMEQU!
ˆLIMEQU0!
ˆLIMEQUFR!
ˆLIMERR0!
ˆLIMERR1!
ˆLIMERR10!
ˆLIMERR6!
ˆLIMEXP!
ˆLIMFLOOR!
ˆLIMHORN!
ˆLIMINFSIGN!
ˆLIMINV!
ˆLIMINVLN!
˜xLIMIT
ˆLIMIT!
ˆLIMIText
ˆLIMITNOVX!
ˆLIMITX!
ˆLIMLIM!
ˆLIMLIM1!
ˆLIMLN!
ˆLIMMAX!
ˆLIMNEG!
ˆLIMPOW!
ˆLIMPROF!
ˆLIMPROF0!
ˆLIMPROF1!
ˆLIMPROF2!
ˆLIMPROFEND!
ˆLIMRAC!
ˆLIMSC0!
ˆLIMSC1!
ˆLIMSERIES!
ˆLIMSINCOS!
ˆLIMSORT!
ˆLIMSQ!
ˆLIMSQRT!
ˆLIMSTEP1!
ˆLIMSTEP2!
ˆLIMSTEP3!
ˆLIMSTEP4!
ˆLIMVAL!
ˆLIMVALOBJ!
ˆLIMVAR!
˜xLIN
xLINE
Page
386
386
463
386
386
387
386
386
387
387
387
463
463
524
Addr.
101007
102007
2556A
2F353
2556F
25574
2EFA0
2EFA3
2EF9F
2EFA2
25565
25579
31B006
300006
3E214
0150AB
080007
052314
33139
2F354
2DC006
2DB006
17A006
3BAC1
3343B
45F006
460006
2DA006
3346D
104006
4EE006
4ED006
4EF006
0FD006
2F24E
33431
26B006
001007
4E5006
3AA01
45A006
456006
06D314
527006
31D006
016314
316006
318006
F. Entries sorted by Name
Name
ˆLINEARAPPLY
ˆlinearapply
LineB
LINECHANGE
LineG1
LineG2
LINEOFF
LINEOFF3
LINEON
LINEON3
LineW
LineXor
ˆLINEXPA
ˆLINEXPext
xLINFIT
xLININ
ˆLINSOLV
˜xLINSOLVE
list
List
ˆLIST10-10
ˆLIST1i-1-i
ˆLIST2MATRIX
xLIST>
LISTCMP
ˆLISTEXEC
ˆLISTEXEC1
ˆLISTIRRQ
LISTLAM
ˆLISTMAXext
ˆLISTOPext
ˆLISTOPRAC
ˆLISTOPSQRT
ˆListPos
LISTRCL
LISTREAL
ˆLISTSECOext
ˆListToArry
ˆLLVARDext
xLN
ˆLN2ATAN
ˆLN2ext
˜xLNAME
ˆLNATANext
ˆLNCOLCext
˜xLNCOLLECT
ˆLNEXPA
ˆLNEXPA*
Page
425
93
93
93
92
92
92
92
93
93
355
355
463
463
342
463
10
338
463
14
421
421
422
14
399
398
398
398
69
166
14
421
65
397
464
352
357
464
349
355
464
355
369
Addr.
319006
31A006
522006
4AB006
3AB2F
41A006
25EE8
25EE9
3AA73
41B006
3E239
377C5
377DE
07334
05149
269006
26A006
3F2006
10F006
01118
2B1006
49D006
0320AB
3DF83
4AE006
3DE006
015100
02B0AB
0300AB
06A314
4F0006
4E7006
4C0006
4E3006
4DF006
386006
2AE32
35AE2
051314
321006
242006
37E006
229006
07F314
377006
376006
373006
2E189
Name
ˆLNEXPA/
ˆLNEXPAˆ
ˆxLNext
ˆLNOBJ!
xLNP1
ˆLNP12LN
LoadTouchTbl
LockAlpha
xLOG
ˆLOG2LN
xLOGFIT
Lookup
Lookup.1
LOOP
Loop
ˆLOP1ext
ˆLOPAext
ˆLOPDext
ˆLOPMext
LowBat?
ˆLPGCDext
ˆLPROF!
xLQ
xLR
ˆLRDM!
ˆLRDMext
xLR˜R
xLSQ
xLU
˜xLVAR
ˆLVARDext
ˆLVARext
ˆLVARXNX2!
ˆLVARXNX2ext
ˆLVARXNXext
ˆm-1&m+1
M-1stcasechs
MACRODCMP
˜xMAD
ˆMADD
ˆMADDTMOD
ˆMADJ
ˆMADNOCK
˜xMAIN
ˆmake2dmatrix
ˆMAKE2DMATRIX
ˆMAKEARRY
MakeBoxLabel
Page
369
369
349
464
351
292
278
464
351
464
70
70
151
421
421
420
421
178
358
464
464
378
479
464
464
464
398
397
387
397
359
143
464
339
416
345
415
337
337
337
95
ˆLINEARAPPLY – MenuKey
Addr.
2E1EB
260B2
2E24D
2E2AA
2F0DB
2AB006
2F355
2E166
01C100
357006
3B02E
066314
27D5D
326006
248006
32A006
246006
320006
322006
333006
332006
32C006
2639B
3DB04
376B7
376C1
334006
3DAD0
34A006
372006
336006
32D006
346006
32E006
37F006
37C006
17D006
348006
02F0DE
371006
338006
34E006
083314
34D006
344006
347006
337006
341006
Name
MakeDirLabel
MAKEGROB
MakeInvLabel
MakeLabel
MAKEPICT#
ˆMAKEPROFOND
MAKEPVARS
MakeStdLabel
xMAKESTR
ˆMAKESYSText
xMANT
˜xMAP
MARKGROB
ˆMAT*
ˆMAT*MATMOD
ˆMAT*SCL
ˆMAT*SCMOD
ˆMAT+
ˆMATˆMAT/
ˆMAT/SCL
ˆMATˆ
MATATLOOP
xMATCHDN
matchob?
matchob?Lp
ˆMATCHS
xMATCHUP
ˆMATCNORM
ˆMATCON
ˆMATCONJ
ˆMATCROSS
ˆMATDET
ˆMATDOT
ˆMATEGV
ˆMATEGVL
ˆMATEXPLODE
ˆMATFNORM
xMATHS
ˆMATIDN
ˆMATIM
ˆMATINV
˜xMATR
ˆMATRANK
ˆMATRANM
ˆMATRDET
ˆMATRE
ˆMATREDIM
525
Page
95
91
95
293, 96
91
378
316
95
479
342
464
464
90
339
339
339
339
340
340
340
475
69
340
464
340
337
340
340
340
340
345
345
339
340
337
340
340
341
337
340
340
337
Addr.
34C006
34F006
340006
36D006
36B006
178006
179006
35F006
369006
360006
174006
367006
368006
1E7006
36A006
349006
34B006
335006
33E006
339006
33C006
33B006
33D006
33A006
3ADA5
39AE4
3DEE1
0760AB
16D006
35FD8
3DEFC
05F61
3E8C1
33111
2EE8B
2EF59
3E9D4
0B9007
0B5007
0B3007
0B2007
0B6007
25845
0BC007
0BB007
08D007
0B4007
275FD
Name
ˆMATREF
ˆMATREFRREF
ˆMATREPL
ˆMATRIX-COL
ˆMATRIX-ROW
ˆMATRIX2ARRAY
ˆMATRIX2LIST
ˆMATRIX>DIAG
ˆMATRIXCSWAP
ˆMATRIXDIAG>
ˆMATRIXDIM
ˆMATRIXRCI
ˆMATRIXRCIJ
ˆMATRIXRISCH
ˆMATRIXRSWAP
ˆMATRNORM
ˆMATRREF
ˆMATSQUARE
ˆMATSUB
ˆMATTRACE
ˆmattran
ˆMATTRAN
ˆmattrn
ˆMATTRN
xMAX
xMAXR
xMAXSIGMA
xMCALC
ˆMDIMS
MDIMSDROP
xMEAN
MEM
xMEM
MEMERR
MENoP&FixDA1
MENP&FixDA12
xMENU
ˆMENUARIT1
ˆMENUBASE1
ˆMENUCHOOSE
ˆMENUCHOOSE?
ˆMENUCMPLX1
MenuDef@
ˆMENUDIFF1
ˆMENUEXPLN1
ˆMENUext
ˆMENUGENE1
MenuKey
Page
341
341
343
344
344
65
338
343
344
343
341
341
341
412
344
340
341
340
343
340
340
65
340
340
464
464
464
464
64
64
464
178
464
10
464
409
409
409
409
409
289
410
410
409
409
293
526
Addr.
2589F
2588B
25890
258B3
27620
0B8007
2EEFC
2EEFD
260B7
260BC
25863
0BA007
0B7007
07A314
1D1006
2AFFB
2B01B
3EB16
0120E4
390006
2F1006
2F4006
2F5006
389006
38D006
387006
38C006
397006
103007
2FA006
3AB006
393006
3BA006
277006
278006
3BD006
276006
30A006
287006
286006
2A6006
1BD006
1AB006
1A9006
1AA006
1AC006
1AD006
1B9006
F. Entries sorted by Name
Name
MenuKeyLS!
MenuKeyNS!
MenuKeyNS@
MenuKeyRS!
MenuMaker
ˆMENUMAT1
MENUOFF
MENUOFF?
MenuRow!
MenuRow@
MenuRowAct!
ˆMENUSOLVE1
ˆMENUTRIG1
˜xMENUXY
ˆMENUXYext
MEQ1stcase
MEQopscase
xMERGE
˜MESRclEqn
ˆmeta-1
ˆmeta-pi
ˆmeta-pi/2
ˆmeta-pi/4
ˆmeta/2
ˆmeta1-sq
ˆmeta1/meta
ˆmeta2*
ˆmetaˆ
ˆmeta_cst?
ˆmeta_e
ˆMetaAdd
ˆmetaadd
ˆmetackneg
ˆMETACOMP0
ˆMETACOMP1
ˆmetaCOMPARE
ˆMETACOMPRIM
ˆMETACOSEXPA
ˆMETADEG1
ˆMETADEG2
ˆMETADENOLCM
ˆMETADER&NEG
ˆMETADER*
ˆMETADER+
ˆMETADERˆMETADER/
ˆMETADERˆ
ˆMETADERABS
Page
290
290
290
290
291
409
273
273
288
288
289
410
409
464
409
143
143
360
420
420
420
359
360
359
359
361
393
420
360
360
362
381
370
381
369
382
382
358
388
388
388
388
388
388
389
Addr.
1C9006
1C6006
1B8006
1C8006
1C5006
1C7006
1CA006
1C0006
1C3006
1AF006
1B4006
1AE006
1B1006
1B0006
1B2006
1BA006
1A6006
1B5006
1B6006
1B7006
1BB006
1A8006
1BF006
1C2006
1BE006
1BC006
1C1006
1C4006
396006
3B1006
39F006
310006
39A006
2ED006
459006
3A5006
198006
2F0006
4D8006
317006
36C006
36E006
351006
36F006
274006
3AF006
273006
395006
Name
ˆMETADERACH
ˆMETADERACOS
ˆMETADERALOG
ˆMETADERASH
ˆMETADERASIN
ˆMETADERATAN
ˆMETADERATH
ˆMETADERCOS
ˆMETADERCOSH
ˆMETADERDER
ˆMETADEREXP
ˆMETADERFCN
ˆMETADERI3
ˆMETADERI4
ˆMETADERIFTE
ˆMETADERINV
ˆMETADERIV
ˆMETADERLN
ˆMETADERLNP1
ˆMETADERLOG
ˆMETADERNEG
ˆMETADEROP
ˆMETADERSIN
ˆMETADERSINH
ˆMETADERSQ
ˆMETADERSQRT
ˆMETADERTAN
ˆMETADERTANH
ˆmetadiv
ˆMetaDiv
ˆmetaEQUAL?
ˆMETAEXPEXPA
ˆmetafraction?
ˆmetai
ˆmetai*
ˆmetainftype
ˆMETAINT?
ˆmetaipi
ˆMETALISTVXXL
ˆMETALNEXPA
ˆMETAMAT-ROW
ˆMETAMATCSWAP
ˆMETAMATRED
ˆMETAMATRSWAP
ˆMETAMM2
ˆMetaMul
ˆMETAMULMULT
ˆmetamult
Page
389
389
389
389
389
389
390
389
389
388
388
388
388
388
388
389
388
388
388
389
389
389
389
389
389
389
389
361
361
78
369
370
420
360
368
78, 334
420
325
369
344
344
341
344
381
361
361
MenuKeyLS! – ˆMZSQFF1
Addr.
3B9006
3B7006
2EB006
2F8006
2F2006
2F3006
3BC006
352006
199006
3B5006
399006
3C3006
36FA6
3BB006
304006
291006
293006
294006
292006
385006
38E006
38F006
4D3006
394006
3AD006
2F356
31E006
3A2006
403006
39B006
465006
253006
0A9006
4CA006
4CB006
3E4006
2B083
3AE2B
2625B
0120DD
0730AB
39B01
3DF17
3A9006
2E3006
3399F
24C006
0740AB
Name
ˆmetaneg
ˆMetaNeg
ˆmetapi
ˆmetapi*2
ˆmetapi/2
ˆmetapi/4
ˆmetapi?
ˆMETAPIVOT
ˆMETAPOSINT?
ˆMetaPow
ˆmetapow
ˆmetareal?
metaROTDUP
ˆmetasimp
ˆMETASINEXPA
ˆMETASOLV
ˆMETASOLV2
ˆMETASOLV4
ˆMETASOLVOUT
ˆmetasplit
ˆmetasq+1
ˆmetasq-1
ˆMETASQFFext
ˆmetasub
ˆMetaSub
metatail
ˆMETATANEXPA
ˆmetaundef
ˆMETAVAL2
ˆmetaxroot
ˆMEVALext
ˆMFACTORMOD
ˆMFactTriv
ˆMHORNER
ˆMHORNER1
ˆMHORNext
Mid1stcase
xMIN
MINIFONT>
xMINIFONT→
xMINIT
xMINR
xMINSIGMA
ˆminusinf
ˆMINUSINFext
MINUSONE
ˆMINVMOD
xMITM
527
Page
362
362
420
420
420
420
370
341
78, 334
362
361
370
76
368
368
383
383
383
78
360
360
397
360
361
78
369
367
423
362
353
395
374
396
396
378
143
465
283
465
465
465
464
368
419
21
465
Addr.
00E0DE
0A5006
4D2006
327006
3AFCB
3D0006
3C5006
3C8006
3C9006
3C4006
3D1006
3CB006
275EE
25EEA
3CA006
3CC006
3CD006
3C7006
0DB006
079314
3C6006
02C0DE
3CF006
3CE006
0B9006
2C388
121006
122006
120006
2DE26
0770AB
4D1006
04E0AB
0040B1
0200DE
0720AB
4CD006
323006
244006
31C006
272006
245006
070314
0750AB
328006
08309
4CF006
4D0006
Name
xMKISOM
ˆMKPOLY
ˆMLISTSQFF
ˆMMMULT
xMOD
ˆMod
ˆModAdd
ˆModDiv
ˆModDiv2
ˆModExpa
ˆModFctr
ˆModGcd
Modifier
ModifierKey?
ˆModInv
ˆModLGCD
ˆModLOPD
ˆModMul
ˆModPow
˜xMODSTO
ˆModSub
xMODULAR
ˆMODULOMAText
ˆMODULOMODext
ˆMonicLf
MOVEVAR
ˆMP0
ˆMPEXEC
ˆMPext
mpop1%
xMROOT
ˆMSECOSQFF
xMSGBOX
˜MsgBoxMenu
xMSLV
xMSOLVR
ˆMSQFF
ˆMSUB
ˆMSUBTMOD
ˆMTRIG2SYMB
ˆMULMULText
ˆMULTMOD
˜xMULTMOD
xMUSER
ˆMVMULT
MYRAMROMPAIR
ˆMZSQFF
ˆMZSQFF1
Page
378
397
339
465
329
372
373
373
372
373
291
205
373
373
465
373
375
423
372
465
425
465
283
465
396
339
416
355
381
416
465
465
339
396
396
528
Addr.
35FB0
36B67
36BAA
2C2CB
2C2C0
0D9007
26260
01C0AB
0326E
28211
3AA006
3A8006
3B3006
3B4006
391006
031D9
3F2B5
28143
162006
166006
2AC72
39976
39CD5
2F357
3ED006
2F0D5
4AC006
33B39
361DA
361DA
2F358
091007
394AA
4F7006
090007
3831C
37B54
80058
25EEB
2FB006
37702
03D314
2F359
2F35A
26201
0CA006
0CB006
29E29
F. Entries sorted by Name
Name
N+1DROP
NcaseSIZEERR
NcaseTYPEERR
nCOLCTQUOTE
nCustomMenu
ˆNDEvalN/D
nDISPSTACK
xNDIST
NDROP
NDROPFALSE
ˆNDROPminusinf
ˆNDROPplusinf
ˆNDROPZ0
ˆNDROPZ1
ˆNDROPZERO
NDUP
xNDUPN
NDUPN
ˆNDXFext
ˆNDXQext
need'case
xNEG
xNEGNEG
newBASE
ˆNEWDIVext
NEWINDEP
ˆNEWLIMHORN
NEWLINE$
NEWLINE$&$
NEWLINE&$
NEWMARK
ˆNEWMODULO
xNEWOB
ˆNEWTRIMext
ˆNEWVX
xNEXT
NEXTCOMPOB
NEXTIRQ
NEXTLIBBAK
ˆNEXTPext
nextpos
˜xNEXTPRIME
NEXTRRPOB
NEXTSTEP
nextsym'R
ˆNFactor
ˆNFactorSpc
ngsizecase
Page
75, 106
146
146
293
394
275
465
75, 106
75, 136
368
368
327
327
76
106
465
106
379
421
465
357
43
47
47
405
465
399
405
465
70
99
72
465
330
330
Addr.
33161
331C5
3F264
2EF07
0DE0B0
2EF96
25EED
256BE
25EEE
2EEED
38D2F
25EEF
27E72
260C1
257E2
119007
585006
2ADBD
58A006
100007
0A8007
581006
25621
06E8E
0A4007
3CB13
03AF2
34BD8
34A59
34A92
35F7E
0712A
3640F
36428
35C7C
34A13
34976
349EA
3494E
349C6
2B2C5
36914
36B3A
260C6
260CB
260D0
3F0FC
469006
Name
NINE
NINETEEN
xNIP
nmetasyms
˜nNullBind
NO_AFFCMD
NoAttn?Semi
NOBLINK
NoEdit?case
NoEditLine?
xNOEVAL>
NoExitAction
nohalt
NOHALTERR
NoIgnoreAlm
ˆNONALGERR
ˆNONINTERR
nonopcase
ˆNONPOLYSYST
ˆNONRATSUM
ˆNONRECMODE
ˆNONUNARYERR
NonUsrKeyOK?
NOP
ˆNOSTEPBYSTEP
xNOT
NOT
NOT?DROP
NOT?GOTO
NOT?SEMI
NOT?SWAPDROP
NOT_IT
NOT_UNTIL
NOT_WHILE
NOTAND
NOTcase
NOTcase2drop
NOTcase2DROP
NOTcasedrop
NOTcaseDROP
NOTcaseFALSE
NOTcaseTRUE
NOTcsdrpfls
NOTLISTcase
NOTROMPcase
NOTSECOcase
xNOVAL
ˆNR_REPLACE
Page
10
11
465
199
117
312
207
179
146
300
291
224
157
404
404
145
404
393
407
403
208
128
407
465
136
138
129
137
138
138
151
151
136
139
139
140
139
139
140
140
139
145
145
145
465
353
N+1DROP – OVER#=case
Addr.
2BB53
2F38E
3DE09
0560AB
35D58
35BC3
056B6
37784
055DF
0556F
35D94
25EEC
055FD
055B7
27AA3
055D5
272FE
2B3AB
27FED
359006
055E9
29E67
3BBF9
2B25C
2B11C
2B176
2B1DF
2ADE0
0A0007
2F35B
0060AB
0070AB
2C044
2C039
2C04F
2C05A
2C065
47D006
39CB3
2F35C
37073
2F1AE
197006
3BE38
2B8BE
374006
19A006
19B006
Name
nscknum2
xnsgeneral
xNSIGMA
xNSUB
NTHCOMDDUP
NTHCOMPDROP
NTHELCOMP
NTHOF
NULL$
NULL$?
NULL$SWAP
NULL$TEMP
NULL::
NULLCOMP?
NULLGROB
NULLHXS
NULLID
NULLLAM
NullMenuKey
ˆNULLVECTOR?
NULL{}
nultrior
xNUM
num-1=case
num0=case
num1=case
num2=case
numb1stcase
ˆNUMMODE
NUMSOLVE
xNUMX
xNUMY
nWHEREDER
nWHEREIFTE
nWHEREINTG
nWHERESUM
nWHEREWHERE
ˆn{}N
ob&$
OB>BAKcode
Ob>Seco
ObEdit
ˆOBJ2REAL
xOBJ>
OBJ>R
ˆOBJDIMS2MAT
ˆOBJINT?
ˆOBJPOSINT?
529
Page
87
77
465
465
69
69
68
69
43
55
46
46
73
68
90
57
116
116
291
339
72
50
465
143
142
143
143
145
406
465
465
53
73
311
31
465
129
337
334
334
Addr.
05944
2F257
3B6A6
07F007
086007
085007
3950C
076AE
3D0BC
33111
36739
0A6006
073CE
363CE
36A63
36B12
3657C
369E6
334EF
36B12
35EA2
29D18
09B006
2F19B
2F2FF
3EC75
2F35D
2F313
2F312
03B75
3CA8D
25EF0
359E3
3E8F0
280C1
280F8
365F9
05902
0020F
3DC8C
032C2
36775
367C5
36694
36147
366A8
35268
348E2
Name
OCRC
OCRC%
xOCT
ˆODE_INT
ˆODE_SEPAR
ˆODETYPESTO
xOFF
OFFSRRP
xOLDPRT
ONE
ONE#>
ˆONE>POLY
ONE_DO
ONE_EQ
ONECOLA
ONEDUP
ONEFALSE
ONEFALSE'
ONEHUNDRED
ONEONE
ONESWAP
ONE{}N
ˆONE{}POLY
OngoingText?
OpenIO
xOPENIO
OpenIOPrt
OpenUart?Clr
OpenUartClr
OR
xOR
OR$
ORcase
xORDER
ORDERXY#
ORDERXY%
ORNOT
OSIZE
OUTCINRTN
xOVER
OVER
OVER#+
OVER#OVER#0=
OVER#2+UNROL
OVER#<
OVER#=
OVER#=case
Page
179
179
465
390
392
391
465
100
10
25
378
151
25
131
21
22
130
15
21
22
72
377
466
136
466
50
139
466
92
92
136
178
466
109
24
24
25
77
25
25
141
530
Addr.
36725
369AA
36CF4
36183
35CF4
36482
05622
35D6C
35D6C
351FA
01F0DE
0D8007
215006
039314
2EF62
35B46
35B82
3C98B
3EDEC
0CD007
2B475
2EF6A
2EF6B
2EF6E
2EF70
0090AB
3D2006
034314
3D4006
0F2007
2EF94
393EA
25EF1
228006
04F314
0450AB
00D0AB
01F0AB
02E0E7
3DC006
3C4F5
3F8006
0C6006
011100
209006
3B477
37B006
0460AB
F. Entries sorted by Name
Name
OVER#>
OVER'
OVER5PICK
OVERARSIZE
OVERDUP
OVERINDEX@
OVERLEN$
OVERSWAP
OVERUNROT
OverWrF/TLp
xP2C
ˆP2P#
ˆPA2B2
˜xPA2B2
palparse
PALPTRDCMP
palrompdcmp
xPARAMETRIC
xPARITY
ˆPARITYTEST
ParOuterLoop
Parse.1
Parse.2
ParseFail
ParseFail2
xPARSURFACE
ˆPARTFRAC
˜xPARTFRAC
ˆPARTFRACRAT
ˆPASCAL_NEXTLINE
PASTE.EXT
xPATH
PATHDIR
ˆPCAR
˜xPCAR
xPCOEF
xPCONTOUR
xPCOV
˜PCunpack
ˆPDer
xPDIM
ˆPDIV2ext
ˆPDivLk
xPEEK
ˆPEGCD
xPERM
ˆPEVAL
xPEVAL
Page
26
130
109
64
109
152
47
109, 109
109, 109
374
330
466
50
55
466
466
223
51
466
391
466
385
307
466
169
346
466
466
466
466
387
466
372
377
478
414
466
345
466
Addr.
2C1006
0EA006
0E1006
0DA007
0AC006
0C5006
0C3006
268006
3D5006
3EAA7
0AE006
0B0006
0AF006
2EA006
39AC7
30017
438006
43B006
439006
3DCFD
032E2
3F27F
3C72A
2F258
28A006
2F6006
06A0AB
2E9006
2E8006
354006
353006
3C662
3C638
260DF
260D5
3C60E
260E4
260DA
260EE
260E9
255BF
255C4
255C9
255BA
255CE
3EE9D
3FA006
36FE2
Name
ˆPEval
ˆPEvalFast?
ˆPEvalMod
ˆPEvalN/D
ˆPFactor
ˆPFactPowCnt
ˆPFactTriv
ˆPFEXECext
ˆPFext
xPGDIR
ˆPHFctr
ˆPHFctr0
ˆPHFctr1
ˆpi
xPI
PI/180
ˆpi/2-acos
ˆpi/2-asin
ˆpi/2-meta
xPICK
PICK
xPICK3
xPICT
PICTRCL
ˆPIext
ˆpifois2
xPINIT
ˆpisur-2
ˆpisur2
ˆPIVOTFLOAT
ˆPIVOTNORM
xPIX?
xPIXOFF
PIXOFF
PIXOFF3
xPIXON
PIXON
PIXON3
PIXON?
PIXON?3
PixonB
PixonG1
PixonG2
PixonW
PixonXor
xPKT
ˆPLCZ
plDRPpZparg
Page
424
380
395
394
374
377
376
421
466
374
374
374
420
466
30
366
366
366
466
109
466
466
316
73
420
466
420
420
341
466
466
91
91
466
91
91
91
92
94
94
94
94
94
466
88
OVER#> – xPsi
Addr.
009314
1E4006
00A314
2F35E
2F35F
2F0C5
1E3006
0A9007
0AB007
3A7006
2E4006
3C392
3C372
0140DE
0B3006
103006
010100
3C979
2B682
2B628
2B6CD
2B6B4
2B4AC
2B542
0D7007
02D0DE
0CC007
0D6007
0350DE
1DD007
25F19
25F1A
25F1B
25F1C
3BB94
378FA
37906
378FA
37906
376EE
2E6006
0DB007
2E7006
3F7006
0380DE
01B0DE
073314
11E006
Name
˜xPLOT
ˆPLOTADD
˜xPLOTADD
PLOTERR
PlotOneMore?
PLOTPREP
ˆPLOTSTK
ˆPLUSAT0
ˆPLUSATINFTY
ˆplusinf
ˆPLUSINFext
xPMAX
xPMIN
xPMINI
ˆPNFctr
ˆPNMax
xPOKE
xPOLAR
POLErrorTrap
POLKeyUI
POLRestoreUI
POLResUI&Err
POLSaveUI
POLSetUI
ˆPOLYASYM
xPOLYNOMIAL
ˆPOLYPARITY
ˆPOLYSYM
xPOP
ˆPOPFLAGS
PopMetaVStack
PopMetaVStackDROP
PopVStack
PopVStackAbove
xPOS
POS$
POS$REV
POSCHR
POSCHRREV
POSCOMP
ˆPOSINFext
ˆPOSITIFext
ˆPOSUNDEFext
ˆPOTENCEext
xPOTENTIAL
xPOWEXPAND
˜xPOWMOD
ˆPPow#
531
Page
412
466
407
407
368
419
466
466
375
379
478
466
223
223
223
223
223
380
380
380
405
162
160
160
162
467
47
47
47
47
69
419
401
420
358
467
Addr.
0AB006
2BE006
117007
3D0D7
3DBCA
3DFDD
3E01D
3DFFD
3ABFD
2F360
124006
4EB006
00C314
2D0006
25EF2
03E314
08376
2610C
0C7006
0C8006
2F0BC
2F361
2F362
3D1E7
028FC
38BBF
2EEF0
08B314
0BD007
0440AB
035314
3D10D
3D0F2
3D143
01D0AB
3F9006
3E8006
3E7006
29A5D
2963E
29821
298C0
29693
1CB006
2973B
29972
29986
0030DE
Name
ˆPPP
ˆPPZ
ˆPPZZ
xPR1
xPREDIV
xPREDV
xPREDX
xPREDY
preFACT
PREMARKON
ˆPREPARext
ˆprepvarlist
˜xPREVAL
ˆPREVALext
PrevNonNull
˜xPREVPRIME
PREVRAM-WORD
PrgmEntry?
ˆPrime+
ˆPrimePRINT
PrintGrob
PRINTxNLF
xPRLCD
PRLG
xPROMPT
PromptIdUtil
˜xPROMPTSTO
ˆPROMPTSTO1
xPROOT
˜xPROPFRAC
xPRST
xPRSTC
xPRVAR
xPSDEV
ˆPSetSign
ˆPSEUDODIV
ˆPSEUDOPREP
psh
psh&
psh1&
psh1&rev
psh1top&
ˆpshder*
pshtop&
pshzer
pshzerpsharg
xPsi
Page
374
424
424
467
468
467
467
467
422
73
467
390
168
467
168
278
332
332
467
467
48
467
167
467
467
467
467
467
372
357
422
76
76
77
77
77
390
76
77
88
467
532
Addr.
0040DE
0B4006
0AD006
036314
3E5006
2F363
4F5006
2C37D
37118
28071
260F3
35B006
29754
260F8
28085
2F076
2F0AC
08C27
3E87C
0340DE
1DC007
26265
25F1D
25F1E
25F1F
25F20
25F21
3C0BF
35D006
2F2F5
2F2F7
31532
260FD
26102
2626A
2626F
3C139
2EEF2
2EEF3
075E9
2B42A
2EEF6
26107
2EEF4
2EEF1
2F364
2F365
2F366
F. Entries sorted by Name
Name
xPSI
ˆPSQFF
ˆPSqff
˜xPTAYL
ˆPTAYLext
PtoR
ˆPTrim
PTYPE>PINFO
PuHiddenVar
pull
PULLCMPEL
ˆPULLEL[S]
pullpsh1&
PULLREALEL
pullrev
puretemp?
PURGALARM%
PURGE
xPURGE
xPUSH
ˆPUSHFLAGS
PushMetaVStack
PushMetaVStack&Drop
PushVStack
PushVStack&Clear
PushVStack&Keep
PushVStack&KeepDROP
xPUT
ˆPUT[]
PUT_FONTE
PUT_STYLE
PUTAB0
PUTCMPEL
PUTEL
PutElemBotVStack
PutElemTopVStack
xPUTI
PUTINDEP
PUTINDEPLIST
PUTLAM
PUTLIST
PUTPTYPE
PUTREALEL
PUTRES
PUTSCALE
PUTSERIAL
PUTXMAX
PUTXMIN
Page
467
375
374
467
372
378
170
24, 77
64
342
77
64
77
84
174
167
467
405
161
161
160
160
162
162
467
343
313
313
65
65
163
163
467
317
317
118
72
317
65
317
318
316
316
Addr.
2F367
2F368
3EA49
3C5E4
3E283
3C56E
0EB006
2BF006
3701E
293F8
509006
118006
0E2006
508006
11C006
3F5006
0E5006
3EE006
2B3006
0E8006
0E7006
0E6006
0F8006
0D9006
0DA006
111006
0E4006
4FB006
51A006
074007
078007
079007
076007
077007
075007
073007
0310AB
0080DE
0DF006
115006
0E3006
3E66F
517006
028314
3D6F6
0F8007
3EC006
3F3006
Name
PUTYMAX
PUTYMIN
xPVARS
xPVIEW
xPWRFIT
xPX>C
ˆPZadic
ˆPZHSTR
pZpargSWAPUn
P{}N
ˆQABSext
ˆQAdd
ˆQAddMod
ˆQCONJext
ˆQDiv
ˆQDiv?
ˆQDivMod
ˆQDivRem
ˆQGcd
ˆQGcdExMod
ˆQGcdMod
ˆQInvMod
ˆQIsZero?
ˆQMod
ˆQMODSYMext
ˆQMul
ˆQMulMod
ˆQNeg
ˆQNORMext
ˆQPI
ˆQpi
ˆQpi%
ˆQpiArry
ˆQpiList
ˆQpiSym
ˆQpiZ
xQR
xqr
ˆQRoot
ˆQSub
ˆQSubMod
xQUAD
ˆQUADRANT
˜xQUOT
xQUOTE
ˆQUOTExSIGMA
ˆQUOText
ˆQUOTOBJext
Page
317
317
467
467
467
399
424
88
71
422
371
395
422
371
357
395
372
358
396
395
334
372
371
395
347
422
418
419
419
419
419
419
418
468
371
395
468
38
468
468
357
357
xPSI – ˆRENAME
Addr.
04B314
381006
165006
11D006
400006
18D006
0701F
38F01
3B7ED
3B0AE
3F070
2B8E6
0F5006
07012
50A006
28B006
3B564
25EF3
119006
082E3
3B3E6
02A0AB
0350AB
113006
0FD007
00114
3D393
3E6F1
2B351
29F006
2F196
2F197
2EF85
2EF86
2F199
2EF87
26274
26279
3918E
2F314
29E006
0C7007
3B715
370AF
3EF79
3EA2E
0C2007
0C3007
Name
˜xQXA
ˆQXA
ˆQXNDext
ˆR15SIMP
ˆR2SYM
ˆR2Zext
R>
xR>B
xR>C
xR>D
xR>I
R>OBJ
ˆR>Z
R@
ˆRABSext
ˆRACTOFACext
xRAD
RAD?
ˆRADDext
RAM-WORDNAME
xRAND
xRANK
xRANM
ˆRASOP
ˆRATSUM
RBR
xRCEQ
xRCL
Rcl&Do:
ˆRCL1IDNT
RCL_CMD
RCL_CMD2
RCL_CMD_DEB
RCL_CMD_FIN
RCL_CMD_MODE
RCL_CMD_POS
RCL_NB_AFF_LGN
RCL_NB_AFF_LGNSTK
xRCLALARM
RCLALARM%
ˆRCLALLIDNT
ˆRCLEPS
xRCLF
RclHiddenVar
xRCLKEYS
xRCLMENU
ˆRCLMODULO
ˆRCLPERIOD
533
Page
468
345
421
325
328
128
468
468
468
469
129
327
128
348
383
468
178
371
168
468
468
468
372
393
468
468
424
300
300
306
306
301
300
468
174
408
468
170
468
468
408
408
Addr.
3DDA9
2F259
2F25A
2F25B
2F25C
03F0DE
0C4007
505006
00111
3B6FA
11B006
3BEEC
06FB7
3597F
2962A
26111
3B401
3B819
261FC
33111
195006
281006
36DF3
33233
528006
09C007
331A7
33733
25F6D
331B1
33797
3320B
25EF4
3ED22
2F369
0110AB
0A7007
3ED56
099006
0F6007
0F5007
501006
048314
3D7006
02A314
2F36A
0130DD
069004
Name
xRCLSIGMA
RCLSYSF
RCLSYSF2
RCLUSERF
RCLUSERF2
xRCLVX
ˆRCLVX
ˆRCONJext
RCS
xRCWS
ˆRDIVext
xRDM
RDROP
RDROPCOLA
RDROPFALSE
RDUP
xRDZ
xRE
Re>C%
real
ˆREAL?
ˆREALBICAR
REALcase
REALEXT
ˆREALLN
ˆREALMODE
REALOB
REALOBOB
realPAcode
REALREAL
REALSTRSTR
REALSYM
RECLAIMDISP
xRECN
RECORDX&YC%
xRECT
ˆRECURMODE
xRECV
ˆREDUCE
ˆREDUCEMETAPSYST
ˆREDUCEMETASYST
ˆxREext
˜xREF
ˆREGCDext
˜xREMAINDER
REMAP
xRENAME
ˆRENAME
Page
468
175
175
176
176
468
408
348
468
372
468
129
129
136
129
469
469
37
10
201
382
145
12
349
406
11
17
11
17
11
273
469
469
407
469
384
342
342
348
469
380
469
469
534
Addr.
069314
23D006
071E5
38105
25EF5
25EF6
047C7
25583
3B9D2
085D3
468006
2579A
2F2ED
2F2FC
359F7
35A10
3C41A
0CA007
2F0A1
35BFF
111007
3EAE7
1D4006
089002
25F22
37186
10F007
0050DE
110007
28187
258C7
05D0AB
0280DE
46E006
28E006
28D006
28F006
290006
25F24
2F36B
0AF007
500006
00D314
2C3006
15C006
2C4006
2C2006
2CF006
F. Entries sorted by Name
Name
˜xREORDER
ˆREORDER
REPEAT
xREPEAT
REPEATER
REPEATERCH
REPKEY?
Repl
xREPL
REPLACE
ˆREPLACE2BY1
REPLACE_MODE
REPLACEALL
REPLACEALLNOSCREEN
REQcase
REQcasedrop
xRES
ˆRESETCASCFG
RESETDEPTH
RESOROMP
ˆRESPSHIFTQ
xRESTORE
ˆRESTORECASFLAGS
ˆRestoreHARDBUFF
RestoreSysFlags
RestVarRes
ˆRESULTANT
xRESULTANT
ˆRESULTANTLP
reversym
ReviewKey!
xREVLIST
xREWRITE
ˆREWRITEIFINF
ˆRFACT2ext
ˆRFACText
ˆRFACTSTEP3
ˆRFACTSTEP5
RIGHT$3x6
RIGHTCOL
ˆRIGORMODE
ˆRIMext
˜xRISCH
ˆrisch/
ˆRISCH13
ˆrischABS
ˆRISCHext
ˆrischlogpart
Page
469
416
151
469
206
93
469
167
353
309
309
144
144
469
408
107
100
379
469
408
234
176
169
379
469
379
107
291
469
383
383
383
383
96
279
407
348
469
387
Addr.
2CD006
2CE006
15E006
0200AB
0220AB
0210AB
38E01
38E21
4E4006
0C2006
112006
3AEB1
32F006
313D3
30F14
4FC006
3B16C
3DD18
03325
2B31A
29A8F
36FCE
3DD33
35FC4
35D80
36FCE
34FE6
34FCD
33715
3319D
08CCC
07E99
06F0AB
3D3CE
455006
37D006
4C9006
3DC71
03295
36761
35E07
367B1
36801
28001
35E07
3574D
35CA4
35CB8
Name
ˆRISCHPF
ˆRISCHRAT
ˆRIXCext
xRKF
xRKFERR
xRKFSTEP
xRL
xRLB
ˆRLVARext
ˆRmCombNext
ˆRMULText
xRND
ˆRNDARRY
RNDC[B]
RNDXY
ˆRNEGext
xRNRM
xROLL
ROLL
Roll&Do:
roll2ND
roll2top&
xROLLD
ROLLDROP
ROLLSWAP
rolltwotop&
Rom-Word?
ROM-WORD?
ROMPANY
rompointer
ROMPTR>#
ROMPTR@
xROMUPLOAD
xROOT
ˆxroot2expln
ˆROOTM2ROOT
ˆROOT{}N
xROT
ROT
ROT#+
ROT#+SWAP
ROT#ROT#1+
ROT#1+UNROT
ROT+SWAP
ROT2DROP
ROT2DUP
ROTAND
Page
37
469
469
469
469
469
397
376
371
469
340
32
347
469
469
108
76
76
469
108
108
76
100
16
11
100
100
469
469
367
385
396
469
107
24
25
24
24
24
25
106, 107
107
136
˜xREORDER – ScrollVGrob
Addr.
341A8
34195
3579C
35CCC
343BD
3416E
36FBA
03D0AB
03C0AB
0370AB
2F36C
11F006
123006
070FD
070C3
3F218
0680AB
3885C
2A964
2A944
2A904
2A984
2A924
2A9A4
2A9C4
26C006
3A200
38E41
38E61
3DF006
4FE006
047314
0340AB
223006
078314
254006
0230AB
0240AB
0250AB
3B22F
368C9
261A2
116006
34144
0400AB
3E632
004002
006007
Name
ROTDROP
ROTDROPSWAP
ROTDUP
ROTOVER
ROTROT2DROP
ROTSWAP
ROTUntop&
xROW+
xROWxROW→
Rows8-15
ˆRP#
ˆRPext
RPIT
RPITE
xRPL>
xrpm
xRPN->
RPNDecomp#Disp
RPNDecomp#Line
RPNDecomp1Line
RPNDecompEcho
RPNDecompEdit
RPNDecompStd1Line
RPNDecompStd1Line32
ˆrpnQOBJext
rpnXROOT
xRR
xRRB
ˆRRDMext
ˆRREext
˜xrref
xRREF
ˆrref
˜xRREFMOD
ˆRREFMOD
xRRK
xRRKSTEP
xRSBERR
xRSD
RSKIP
rstfmt1
ˆRSUBext
RSWAP
xRSWP
xRULES
ˆRunChooseSimple
ˆRunDoNewMatrix
535
Page
107
107
107
107
107, 108
107
76
470
470
470
279
372
372
138
138
465
52
53
52
54
53
52
52
423
470
470
378
348
470
470
415
470
470
470
470
470
129
178
371
129
470
244
Addr.
005007
2AB69
0B954
2A9E9
2ABF0
2ABD7
013100
0F2006
0F3006
008100
35A5B
25EF7
1D3006
35A29
0000F
3C9E5
175006
176006
1D2006
261A7
088002
34D51
2F05E
25EFB
34D58
25F23
3712C
00008
00004
3EE82
014100
247006
3C4D5
2627E
3E1EF
3C9AF
0330AB
3B5BA
329006
3E127
3E385
07D314
2F36D
0C1007
2F36E
2F36F
2F370
255B0
Name
ˆRunDoOldMatrix
RunInApprox
RunInNewContext
RunRPN:
RunSafeFlags
RunSafeFlagsNoError
xR˜SB
ˆS>Z
ˆS>Z?
xS→H
SAFE@
SAFE@_HERE
ˆSAFEPURGE
SAFESTO
sALLOWINTR
xSAME
ˆSAMEMATRIX
ˆSAMEMATSCTYPE
ˆSAVECASFLAGS
savefmt1
ˆSaveHARDBUFF
SAVELAM
SaveLastEdit
SaveLastMenu
SAVESTACK
SaveSysFlags
SaveVarRes
sBEG
sBPOFF
xSBRK
xSB˜B
ˆSC*MATMOD
xSCALE
SCANFONT
xSCATRPLOT
xSCATTER
xSCHUR
xSCI
ˆSCL*MAT
xSCLSIGMA
xSCONJ
˜xSCROLL
SCROLLDOWN
ˆSCROLLext
SCROLLLEFT
SCROLLRIGHT
SCROLLUP
ScrollVGrob
Page
176
310
198
176
177
478
328
328
478
166
166
167
167
470
338
338
408
177
234
314
289
117
176
169
470
479
470
470
470
470
339
470
470
470
279
281
280
280
279
94
536
Addr.
3DF32
33157
3FE006
3FC006
3FD006
2E107
461006
4D4006
2F2E7
2F2E1
2F2E2
0312B
34AAD
3ECB0
2F371
2F372
2F373
2EEBB
2F374
2F375
2F376
2F377
25EF8
0530AB
01D100
007314
419006
3ED91
07661
25719
26139
25695
25671
25683
261AC
26116
09A007
2F378
2611B
2F379
2EE65
2EE65
2EE6F
2EE71
2EE70
2EE78
2EEAC
2EE72
F. Entries sorted by Name
Name
xSDEV
seco
ˆSECO2CMPCART
ˆSECO2CMPext
ˆSECO2CMPPOL
Seco>Menu
ˆSECOEXEC
ˆSECOSQFFext
SELECT.FONT
SELECT.LINE
SELECT.LINEEND
SEMI
SEMILOOP
xSEND
SENDACK
SENDEOT
SENDERROR
SENDLIST
SENDNAK
SENDNULLACK
SENDPKT
SendSetup
SEP$NL
xSEQ
xSERIAL
˜xSERIES
ˆSERIESEXPLN
xSERVER
SET
SetAlgEntry
SetAlphaAnn
SetAppMode
SetAppSuspOK
SetBadPOLUI
setbeep
SETCIRCERR
ˆSETCOMPLEX
SetCursor
SETCURSOR
SetDA123NoCh
SetDA12a3NCh
SetDA12a3NoCh
SetDA12NoCh
SetDA12Temp
SetDA13NoCh
SetDA1Bad
SetDA1IsStat
SetDA1NoCh
Page
470
10
422
293, 95
421
333, 422
313
307
307
129
151
471
180
48
471
479
471
356
471
278
278
224
224
178
157
406
304
276
276
276
276
275
276
276
276
276
Addr.
2EE69
2EE67
2EE94
2EE79
2EE6C
2EE73
2EE8A
2EF98
2EE7A
2EE7F
2EE76
2EE6A
2EEA5
2EE68
2EE93
2F37A
2EE91
2EE7B
2EE77
2EE6B
2EF99
2EEA0
2EE7C
2EE64
39104
2FFBD
2565F
2EECE
09F007
264D1
2FFEF
07638
26283
3714A
2F37B
2F458
25EFC
2613E
2F37C
04FB6
0764E
2564D
262E7
2EEAE
25617
0AA007
04FF2
26143
Name
SetDA1Temp
SetDA1Valid
SetDA23NoCh
SetDA2aBad
SetDA2aEcho
SetDA2aNoCh
SetDA2aTemp
SetDA2aValid
SetDA2bBad
SetDA2bIsEdL
SetDA2bNoCh
SetDA2bTemp
SetDA2bTempF
SetDA2bValid
SetDA2NoCh
SetDA2OKTemp
SetDA2Valid
SetDA3Bad
SetDA3NoCh
SetDA3Temp
SetDA3Valid
SetDA3ValidF
SetDAsNoCh
SetDAsTemp
xSETDATE
SETDEG
SetDoStdKeys
SetEcma94
ˆSETEXACT
SETFIRSTC_0
SETGRAD
SETHASH
SetHeader
SetHiddenRes
SetIOPARErr
SETIVLERR
SetKeysNS
SetLeftAnn
SETLOOPENV
SETMEMERR
SETMESG
SetNAppKeyOK
SETNONEXTERR
SetNoRollDA2
SetNUsrKeyOK
ˆSETPLUSAT0
SETPORTNOTAV
SetPrgmEntry
Page
275
275
276
276
276
276
275
275
276
276
276
275
275
275
276
275
275
276
276
275
275
275
276
275
456
178
224
406
178
100
273
170
158, 181
158
290
277
157
224
158
276
208
407
157
278
xSDEV – ˆSIN2TCext
Addr.
2FFDB
2580E
26148
2F25D
05016
2F37D
262D8
25EFD
262E2
2645E
26459
2614D
25EFE
39124
262DD
26152
2622E
064314
3314D
342EA
331B1
333C3
333EB
3341D
3B4C9
0CD006
0D80B0
520006
3E696
0426A
0D3007
0D1007
0D4007
0CF007
0D2007
0630AB
3721C
0020DE
3DDC4
3DDEE
3E0FD
301006
2FF006
3E156
0010DE
3A3EE
237006
0DC007
Name
SETRAD
SetRebuild
SetRightAnn
SETROMPART
SETROMPERR
SetServMode
SETSIZEERR
SetSomeRow
SETSTACKERR
setStdEditWid
setStdWid
SetSysFlag
SetThisRow
xSETTIME
SETTYPEERR
SetUserFlag
SetVStackProtectWord
˜xSEVAL
SEVEN
SEVENROLL
SEVENTEEN
SEVENTY
SEVENTYFOUR
SEVENTYNINE
xSF
ˆSFactor
˜sFldVal
ˆSHALT
xSHOW
ShowInvRomp
ˆSHRINK2ASYM
ˆSHRINK2SYM
ˆSHRINKASYM
ˆSHRINKEVEN
ˆSHRINKSYM
xSIDENS
Sig?ErrJmp
xSIGMA
xSIGMA+
xSIGMAxSIGMACOL
ˆSIGMAEXP2ext
ˆSIGMAEXPext
xSIGMALINE
xSIGMAVX
xSIGN
ˆSIGNE
ˆSIGNE1ext
537
Page
178
288
277
157
158
293
157
51
51
175
292
473
157
175
164
471
10
108
11
14
14
14
471
330
471
178
379
379
379
379
379
471
158
471
460
460
455
355
355
460
471
471
400
400
Addr.
0EC007
0E6007
0E4007
0EF007
0E2007
0DD007
0EA007
0E1007
0E9007
0E3007
0E7007
0E5007
0E0007
0ED007
0DF007
05F314
0DE007
38837
0A6007
4C1006
299006
033314
2AE006
2AF006
2B0006
2A9006
2AA006
2AD006
29D006
0220DE
298006
2AAE0
2A8006
2A0006
2A2006
29B006
2A4006
3A57C
428006
445006
444006
42E006
415006
414006
40C006
40B006
42A006
429006
Name
ˆSIGNE>
ˆSIGNEATAN
ˆSIGNECOS
ˆSIGNEERROR
ˆSIGNEEXP
ˆSIGNEext
ˆSIGNELEFT
ˆSIGNELN
ˆSIGNERIGHT
ˆSIGNESIN
ˆSIGNESQRT
ˆSIGNETAN
ˆSIGNMOINS
ˆSIGNMULText
ˆSIGNPLUS
˜xSIGNTAB
ˆSIGNUNDEF
xSILENT'
ˆSILENTMODE
ˆSIMP1!
ˆSIMP1ext
˜xSIMP2
ˆSIMP3ext
ˆSIMP3LISText
ˆSIMP3LSTSLOW
ˆSIMPext
ˆSIMPEXTOK
ˆSIMPGCDext
ˆSIMPIDNT
xSIMPLIFY
ˆSIMPLIFY
Page
401
401
401
404
401
401
401
401
401
401
401
400
401
400
471
400
407
354
471
354
354
354
423
471
354
SimplifyExpression
ˆSIMPNDXFext
ˆSIMPSYMBS
ˆSIMPUSERFCN
ˆSIMPVAR
ˆSIMP|
xSIN
ˆsin/cos
ˆsin2exp
ˆSIN2EXPext
ˆSIN2ext
ˆsin2tan
ˆSIN2TAN
ˆsin2tan/2
ˆSIN2TAN/2
ˆSIN2TC
ˆSIN2TCext
424
354
354
354
354
471
366
367
352
351
366
351
365
351
351
356
538
Addr.
018314
303006
307006
308006
305006
306006
52D006
3A678
449006
448006
530006
0D0007
3E331
0D3006
1A2006
33143
34281
331A7
3335F
333AF
33387
33369
3337D
33373
3438D
3BB1F
0714D
35715
38E81
38EA1
25EFA
00C0AB
0B1007
0B0007
26120
2B2006
2AC006
297006
2BB3A
3E35B
00002
2F38F
0290AB
03F314
219006
0F7007
21A006
0F4007
F. Entries sorted by Name
Name
˜xSINCOS
ˆSINEXPA
ˆSINEXPA*
ˆSINEXPA*1
ˆSINEXPA+
ˆSINEXPAˆxSINext
xSINH
ˆsinh2exp
ˆSINH2EXPext
ˆxSINHext
ˆSINTEST
xSINV
ˆSIsPrime?
ˆsiSYMDER
SIX
SIXROLL
SIXTEEN
SIXTY
SIXTYEIGHT
SIXTYFOUR
SIXTYONE
SIXTYTHREE
SIXTYTWO
SIXUNROLL
xSIZE
SKIP
skipcola
xSL
xSLB
SLEEPxcp
xSLOPEFIELD
ˆSLOPPY?
ˆSLOPPYMODE
SLOW
ˆSLOWGCDext
ˆSLOWSIMP2L
ˆSLVARext
sncknum2
xSNEG
sNEGATE
xsngeneral
xSNRM
˜xSOLVE
ˆSOLVE1EQ
ˆSOLVECRAMER
ˆSOLVEMANYEQ
ˆSOLVEMETASYST
Page
471
355
369
369
368
368
349
471
367
352
350
471
331
10
108
11
13
14
13
13
13
13
109
471
131
131
471
471
471
408
407
172
358
353
87
471
77
471
471
414
342
414
342
Addr.
086314
008314
1DE006
27E006
25EFF
05E0AB
2F37E
100006
33B55
0AD007
0130AB
2C2D6
0CE006
3A4EF
553006
2BD006
4CC006
317EE
3A442
42F006
42D006
41E006
41F006
2C6006
1CC006
38EC1
0280AB
38EE1
3EC55
0100DD
00F100
2BB21
2F390
13E006
140006
142006
144006
3B0006
3AC006
3AE006
3B2006
136006
134006
13C006
13A006
138006
3B6006
152006
Name
˜xSOLVER
˜xSOLVEVX
ˆSOLVEXFLOAT
ˆSOLVext
SolvMenuInit
xSORT
SORTASLOW
ˆSortList
SPACE$
ˆSPARSEDATA
xSPHERE
SPLITWHERE
ˆSPollard
xSQ
ˆxSQext
ˆSQFF2ext
ˆSQFFext
SQRF
xSQRT
ˆsqrt1-cosˆ2
ˆsqrt1-sinˆ2
ˆSQRT2LNEXP
ˆsqrt2lnexp
ˆSQRT_IN?
ˆSQRTINVpshd*
xSR
xSRAD
xSRB
xSRECV
xSREPL
xSREV
sscknum2
xssgeneral
ˆxssSYM#?
ˆxssSYM%
ˆxssSYM%CH
ˆxssSYM%T
ˆxssSYM*
ˆxssSYM+
ˆxssSYMˆxssSYM/
ˆxssSYM<=?
ˆxssSYM<?
ˆxssSYM=?
ˆxssSYM>=?
ˆxssSYM>?
ˆxssSYMˆ
ˆxssSYMAND
Page
471
471
412
382
293
471
172
73
43
407
471
331
471
348
424
396
475
366
366
351
351
424
390
471
471
471
471
471
478
87
˜xSINCOS – xSTURMAB
Addr.
14C006
19F006
132006
130006
146006
150006
14E006
14A006
148006
154006
12E006
25F12
26242
261B1
26288
381AB
25F00
2B74F
38252
2EEDA
2EEDE
2EEDC
2EEDB
2EEDD
2EEDF
2EEE0
2EEE1
2EEE2
3B5FA
25F01
2716D
27D7B
25F02
25F03
27A3A
3851F
0A3007
206006
3D3AE
3EE62
25F13
3E739
07D27
369BE
3E4D2
3E3AF
3E406
3E46C
Name
ˆxssSYMCOMB
ˆssSYMDER
ˆxssSYMMAX
ˆxssSYMMIN
ˆxssSYMMOD
ˆxssSYMOR
ˆxssSYMPERM
ˆxssSYMRNDXY
ˆxssSYMTRCXY
ˆxssSYMXOR
ˆxssSYMXROOT
sstDISP
StackFontHeight
stackitw
StackLineHeight
xSTART
StartMenu
StartupProc
xSTARTVAR
STATCLST
STATMEAN
STATN
STATSADD%
STATSMAX
STATSMIN
STATSTDEV
STATTOT
STATVAR
xSTD
Std/BoxLabel
StdIOPAR
StdLabelGrob
StdMenuKeyLS
StdMenuKeyNS
StdPRTPAR
xSTEP
ˆSTEPBYSTEP
ˆSTEPIDIV2
xSTEQ
xSTIME
stkdecomp$w
xSTO
STO
STO'
xSTO*
xSTO+
xSTOxSTO/
539
Page
280
283
283
471
292
459
66
66
66
66
66
66
66
66
66
472
95
181
90
290
290
472
407
413
472
472
51
472
167
130
472
472
472
472
Addr.
3E823
2F198
2EF8B
2EF8C
2EF8D
2EF8E
2EF8F
2628D
39164
2F3A9
2F3AA
2F37F
2F066
3B749
37104
2F062
3EF07
07D1B
370006
0C6007
2CA006
2F063
0240DE
3DD6E
2F25F
2F260
356006
2F261
2F262
0400DE
0C5007
33125
3BBD9
2E0F3
0580AB
2F1AC
3BE006
37ABE
37AEB
33319
33823
38D94
38D72
00001
222006
221006
0160DE
0170DE
Name
xSTO>
STO_CMD_MODE
STO_CURS_POS
STO_CURS_POS2
STO_CURS_POS3
STO_CURS_POS4
STO_CURS_POS_VIS
STO_ML_DISP_SIZE
xSTOALARM
STOALLF
STOALLF2
STOALM
STOAPPLDATA
xSTOF
StoHiddenVar
StoIOPAR
xSTOKEYS
STOLAM
ˆSTOMAText
ˆSTOMODULO
ˆSTOPRIMIT
StoPRTPAR
xSTORE
xSTOSIGMA
STOSYSF
STOSYSF2
ˆSTOSYSText
STOUSERF
STOUSERF2
xSTOVX
ˆSTOVX
str
xSTR>
Str>Menu
xSTREAM
StrEdit
ˆSTRICTmetaCOMPARE
STRIPTAGS
STRIPTAGSl2
STRLIST
STRREALREAL
xSTRUCT->
xSTRUCT>
sTRUNC
ˆSTUDDIV
ˆSTUDMULT
xSTURM
xSTURMAB
Page
167, 472
301
304
304
304
304
304
472
176
176
174
472
170
181
472
117
344
408
424
472
175
176
342
176
176
472
408
10
472
293, 95
472
370
61
62
13
17
540
Addr.
3B6C1
2557E
3B8D7
05733
2A5CA
35DA8
05821
25597
2612F
2559C
05815
33F006
3760D
37685
261B6
25592
0E8007
002314
243006
06F314
0F9007
3D503
4D6006
0FB007
3DE5A
3DE90
3DEC6
3DE75
3DEAB
10C006
25F04
02E0AB
02F0AB
03223
3DC20
357BB
3592B
28099
36829
280AD
36C22
362F2
35346
36982
368B5
36CB8
36CE0
36C90
F. Entries sorted by Name
Name
xSTWS
Sub
xSUB
SUB$
SUB$1#
SUB$SWAP
SUBCOMP
SubGor
SUBGROB
SubGxor
SUBHXS
ˆsubmeta
SubMetaOb
SubMetaOb1
subpdcdptch
SubRepl
ˆSUBSIGNE
˜xSUBST
ˆSUBTMOD
˜xSUBTMOD
ˆSUM
xSUM
ˆSUMSQRext
ˆSUMVX
xSUMX
xSUMX2
xSUMXY
xSUMY
xSUMY2
ˆSUnivar?
SuspendOK?
xSVD
xSVL
SWAP
xSWAP
SWAP#SWAP#1+
SWAP#1+SWAP
SWAP#1SWAP#1-SWAP
SWAP%%/
SWAP%>C%
SWAP&$
SWAP'
SWAP2DUP
SWAP3PICK
SWAP4PICK
SWAP4ROLL
Page
472
93
472
48
48
48
69
93
91
93
57
78
77
77
93
401
472
416
473
393
460
333
393
461
461
461
461
461
380
224
473
473
107
473
24
24, 77
24
24
24
34
37
49
130
107
107
109
107
Addr.
39C8B
3700A
3635B
2F073
3421A
28989
35857
35872
374BE
3576E
163006
3623E
3646E
36496
161006
36AFE
3457F
367ED
117006
11A006
4FF006
110006
4FA006
341BA
0AC003
4FD006
114006
2812F
36946
3695A
58D006
093007
092007
3592B
2A7006
51B006
04E314
384006
3316B
50F006
53F006
550006
56F006
514006
53D006
54D006
541006
54A006
Name
SWAP>HCOMP
SWAPCKREF
SWAPCOLA
SWAPcompSWAP
SWAPDROP
SWAPDROP#1SWAPDROPDUP
SWAPDROPSWAP
SWAPDROPTRUE
SWAPDUP
ˆSWAPFXND
SWAPINCOMP
SWAPINDEX@
SWAPLOOP
ˆSWAPNDXF
SWAPONE
SWAPOVER
SWAPOVER#ˆSWAPRADD
ˆSWAPRDIV
ˆSWAPRIM
ˆSWAPRMULT
ˆSWAPRNEG
SWAPROT
ˆSWAPROWS
ˆSWAPRRE
ˆSWAPRSUB
SWAPTRUE
SWAPUnDROP
SWAPUnNDROP
ˆSWITCHNOTALLOWED
ˆSWITCHOFF
ˆSWITCHON
SWP1+
ˆSWPSIMPNDXF
ˆSXSQRext
˜xSYLVESTER
ˆSYLVESTER
sym
ˆxSYMABS
ˆxSYMACOS
ˆxSYMACOSH
ˆxSYMALOG
ˆxSYMARG
ˆxSYMASIN
ˆxSYMASINH
ˆxSYMATAN
ˆxSYMATANH
Page
68
171
131
86
107
24
107
107, 108
136
107
380
71
152
151
379
21
106, 107
24
371
372
348
371
348
107, 108
344
348
371
136
77
76
404
405
405
24, 77
424
348
473
346
10
349
350
350
349
350
349
350
xSTWS – ˆTAN2CS2
Addr.
33161
464006
157006
0546D
2EFEC
2BD8C
2EED9
33639
33657
46A006
561006
3B8006
26F006
286E7
507006
536006
545006
55B006
1A0006
559006
29A006
571006
336BB
575006
55F006
565006
33693
504006
2A1006
557006
563006
45D006
3369D
1DF006
524006
56B006
56D006
569006
578006
3366B
470006
109007
10A007
10C007
10B007
45E006
55D006
502006
Name
symb
ˆSYMBEXEC
ˆSYMBINCOMP
SYMBN
symbn
SYMBN:
SYMBNUMSOLVE
SYMBREAL
SYMBUNIT
ˆSYMBWHERE
ˆxSYMCEIL
ˆxSYMCHS
ˆSYMCOLCT
symcomp
ˆxSYMCONJ
ˆxSYMCOS
ˆxSYMCOSH
ˆxSYMD>R
ˆSYMDER
ˆxSYMEXP
ˆSYMEXPAN
ˆxSYMEXPM1
SYMEXT
ˆxSYMFACT
ˆxSYMFLOOR
ˆxSYMFP
SYMID
ˆxSYMIM
ˆSYMINTEGRAL
ˆxSYMINV
ˆxSYMIP
ˆSYMISOL
SYMLAM
ˆSYMLIMIT
ˆxSYMLN
ˆxSYMLNP1
ˆxSYMLOG
ˆxSYMMANT
ˆxSYMNOT
SYMOB
ˆSYMPAPRX
ˆSYMPSI
ˆsympsi
ˆsympsin
ˆSYMPSIN
ˆSYMQFORM
ˆxSYMR>D
ˆxSYMRE
541
Page
10
353
72, 325, 359
71, 86
86
16
16
350
86
349
349
364
354
350
16
350
350
350
16
362
348
350
16
412
350
350
350
350
16
393
394
362
Addr.
33675
2EF26
512006
538006
543006
555006
552006
336B1
53A006
547006
46F006
567006
26134
58F006
2F064
005002
08D92
2EF67
2EE5E
2F1A3
2EE5F
39705
36F79
2EF66
08D66
08DD4
2F380
00A0DE
22A006
80F02
26157
355006
2EED7
016100
2DD006
2DE006
061314
265006
238006
060314
33189
336ED
37B04
0520AB
275C6
3A624
01C0DE
442006
Name
SYMREAL
SYMSHOW
ˆxSYMSIGN
ˆxSYMSIN
ˆxSYMSINH
ˆxSYMSQ
ˆxSYMSQRT
SYMSYM
ˆxSYMTAN
ˆxSYMTANH
ˆSYMTAYLOR
ˆxSYMXPON
SYNTAXERR
ˆSys1IT
Sys@
ˆsysCHOOSE
SYSCONTEXT
SysDisplay
SysErrorTrap
Page
16
88
349
350
348
348
16
349
350
386
350
157
404
166
233
169
274
SysErrorTrapAction
SysErrorTrapConfirm
xSYSEVAL
SysITE
SysMenuCheck
SysPtr@
SYSRRP?
SysSTO
xSYST2MAT
ˆSYSTEM
SystemFlags
SystemLevel?
ˆSYSText
SysTime
xS˜N
ˆTABLECOSext
ˆTABLETANext
˜xTABVAL
ˆTABVALext
ˆTABVAR
˜xTABVAR
TAGGED
TAGGEDANY
TAGOBS
xTAIL
TakeOver
xTAN
xTAN2CS2
ˆTAN2CS2
473
146
292
169
167
415
342
173
479
425
425
473
418
415
473
11
16
61
473
291
473
473
352
542
Addr.
420006
421006
01F314
427006
021314
440006
43F006
426006
40E006
40F006
52E006
3A70C
44D006
44C006
531006
1E1006
006314
3E6CA
00116
302006
233006
05B314
01A314
2FE006
00112
0640AB
2F09A
3316B
2E1006
02E0DE
26170
26175
065314
31F006
013314
3C8FA
37F7F
38B43
33189
33233
33283
33265
3325B
3328D
3323D
33279
33251
33247
F. Entries sorted by Name
Name
ˆTAN2EXP
ˆtan2exp
˜xTAN2SC
ˆTAN2SC
˜xTAN2SC2
ˆTAN2SC2
ˆTAN2SC2ext
ˆTAN2SCext
ˆTAN2TAN/2
ˆtan2tan/2
ˆxTANext
xTANH
ˆtanh2exp
ˆTANH2EXPext
ˆxTANHext
ˆTAYLOR0
˜xTAYLOR0
xTAYLR
TBR
ˆTCHEBext
ˆTCHEBNOCK
˜xTCHEBYCHEFF
˜xTCOLLECT
ˆTCOLLECT
TCS
xTDELTA
TempConv
TEN
ˆTESTINFINI
xTESTS
TestSysFlag
TestUserFlag
˜xTEVAL
ˆTEXPAext
˜xTEXPAND
xTEXT
xTHEN
xTHENCASE
THIRTEEN
THIRTY
THIRTYEIGHT
THIRTYFIVE
THIRTYFOUR
THIRTYNINE
THIRTYONE
THIRTYSEVEN
THIRTYTHREE
THIRTYTWO
Page
351
366
473
351
473
352
357
356
351
366
349
473
367
352
350
412
473
473
378
415
473
473
355
473
82
10
419
175
175
473
356
473
473
473
11
12
12
12
12
12
12
12
12
12
Addr.
2F158
33125
33319
36216
09D006
39093
2F003
2F004
2F002
34BEF
3905D
26161
0012E
0012F
2EED3
0650AB
019314
3C6B6
3E97B
26166
2EECF
2F381
2616B
2F382
2577F
25F2D
2EFA1
2EFA4
2F21B
33AA7
33AB3
33B85
33BD9
33BF1
33B91
33BFD
272D9
33B9D
33BE5
33C4D
33C59
33C65
33C71
33C7D
33C89
33C95
33CA1
33CAD
Name
THISCHAR
THREE
THREEFIVE
THREE{}N
ˆTHREE{}POLY
xTICKS
Ticks>Date
Ticks>Rpt
Ticks>TOD
ticR
xTIME
TIMEOUT?
TIMERCTRL.1
TIMERCTRL.2
TIMESTR
xTINC
˜xTLIN
xTLINE
xTMENU
TOADISP
TOD
TOD>t$
TOGDISP
TOGGLELINE#3
TogInsert
TogInsertKey
TOGLINE
TOGLINE3
ToGray
tok$
tok&
tok'
tok*
tok+
tok,
toktok->
tok.
tok/
tok0
tok1
tok2
tok3
tok4
tok5
tok6
tok7
tok8
Page
300
10
13
72
377
473
173
173
173
128
473
49, 173
473
473
473
473
272
172
173
272
92
302
92
92
95
45
45
44
45
45
44
44
44
44
45
44
44
45
45
45
45
45
45
44
ˆTAN2EXP – TWENTYSIX
Addr.
26206
261BB
33CB9
33BA9
33AD7
33C09
29E99
33ACB
33A6B
33A51
33BCD
33B55
2D848
2D86D
2D8AD
33AEF
33C2D
33C3F
33C21
33ABF
33AE3
33BB5
33B79
33BC1
33A8F
33AFB
33C15
33B61
33A9B
33B07
33A77
33A83
364E1
266006
296A7
39C006
39D006
36F8D
2F383
2F384
2F385
07709
3DF4D
06657
35C90
0270AB
045314
580006
Name
tok8cktrior
tok8trior
tok9
tok;
tok<<
tok=
tok=casedrop
tok>>
tok[
tok]
tokˆ
tok_
tok_g
tok_m
tok_s
tokanglesign
tokCTGROB
tokCTSTR
tokDER
tokESC
tokexponent
toklparen
tokquote
tokrparen
toksharp
tokSIGMA
tokSQRT
tokUNKNOWN
tokuscore
tokWHERE
tok{
tok}
toLEN_DO
ˆTOLISText
top&
ˆtop&addt*
ˆtop&addt/
top&Cr
TOP16
TOP8
TOPROW
TOSRRP
xTOT
TOTEMPOB
TOTEMPSWAP
xTRACE
˜xTRAN
ˆTRANSCERROR
543
Page
50
50
44
45
44
44
145
45
45
45
45
43
44
44
44
45
45
45
45
44
44
45
45
45
45
45
45
45
45
45
44
45
151
418
76
360
360
279
279
279
100
473
171
171
474
474
403
Addr.
3EE0C
330006
30F28
01B314
01C314
416006
082314
01D314
01E314
411006
4F4006
4F6006
3C084
3AF3E
2F386
03A81
369D2
36540
36540
27E87
063314
471006
3C99D
015314
2B9006
2BB006
2BA006
3125D
391F8
3326F
2F034
2F031
041A7
25F05
39456
0470AB
0480AB
0490AB
04A0AB
3317F
331CF
3321F
33201
331F7
33229
331D9
33215
3320B
Name
xTRANSIO
ˆTRCARRY
TRCXY
˜xTRIG
˜xTRIGCOS
ˆTRIGext
˜xTRIGO
˜xTRIGSIN
˜xTRIGTAN
ˆTRIGTAN
ˆTRIMext
ˆTRIMOBJext
xTRN
xTRNC
TRPACKETFAIL
TRUE
TRUE'
TRUEFALSE
TrueFalse
TrueTrue
˜xTRUNC
ˆTRUNCDL
xTRUTH
˜xTSIMP
ˆTSIMP2ext
ˆTSIMP3ext
ˆTSIMPext
TST15
xTSTR
TTHIRTYSIX
TURNMENUOFF
TURNMENUON
TurnOff
TurnOffKey
xTVARS
xTVM
xTVMBEG
xTVMEND
xTVMROOT
TWELVE
TWENTY
TWENTYEIGHT
TWENTYFIVE
TWENTYFOUR
TWENTYNINE
TWENTYONE
TWENTYSEVEN
TWENTYSIX
Page
474
340
32
474
474
356
474
474
474
356
378
398
474
474
135
130
136
136
135
474
386
474
474
354
355
354
474
12
273
273
178
474
474
474
474
474
11
11
11
11
11
11
11
11
11
544
Addr.
331ED
331E3
3311B
09E006
36202
09C006
3BC39
03C64
350D2
3513B
350F0
352AD
3503C
03F95
3512C
35177
3510E
03FDB
03FE5
351B3
35087
350C3
114007
35186
350FF
03FA9
3504B
194006
167006
03FD1
350E1
03F9F
35195
350B4
350A5
35292
03F8B
3511D
196006
3514A
20D6F
35159
03FBD
35168
351A4
182006
35096
2F07B
F. Entries sorted by Name
Name
TWENTYTHREE
TWENTYTWO
TWO
ˆTWO::POLY
TWO{}N
ˆTWO{}POLY
xTYPE
TYPE
TYPEAPLET?
TYPEARRY?
TYPEBINT?
TYPECARRY?
TYPECHAR?
TYPECMP
TYPECMP?
TYPECOL?
TYPECSTR?
TYPEEREL
TYPEEXT
TYPEEXT?
TYPEFLASHPTR?
TYPEFONT?
ˆTYPEGAUSSINT?
TYPEGROB?
TYPEHSTR?
TYPEIDNT
TYPEIDNT?
ˆTYPEIDNTLAM?
ˆTYPEIRRQ?
TYPELAM
TYPELAM?
TYPELIST
TYPELIST?
TYPELNGCMP?
TYPELNGREAL?
TYPERARRY?
TYPEREAL
TYPEREAL?
ˆTYPEREALZINT?
TYPEROMP?
TYPERRP
TYPERRP?
TYPESYMB
TYPESYMB?
TYPETAGGED?
ˆTYPEZ?
TYPEZINT?
U>nbr
Page
11
11
10
377
72
377
474
199
200
199
200
199
200
20
199
200
199
20
20
200
200
200
200, 333
199
199
20
199
199
326, 421
20
199
20
199
200
200
199
20
199
201
200
20
200
20
199
200
200
200
82
Addr.
2F099
25F06
2F387
25F07
38FD7
3900B
0B7006
0B8006
0BD006
0140DD
2F07C
2F07D
2F07E
2F07F
2F080
2D74F
2F081
2F082
2D759
2F083
2F085
2F086
2F087
2F088
2F089
2F07A
2D763
2F08A
2D999
2F08B
2F08C
2F08D
2D777
2D985
2D971
2D95D
2F08E
2F08F
2D76D
2D9CB
2F090
2D949
2F091
2F092
2F093
2F094
2D9EE
2F095
Name
U>NCQ
UART?
UARTBUFLEN
UARTxcp
xUBASE
xUFACT
ˆUFactor
ˆUFactor1
ˆUFactorDeg2
xUFL1→MINIF
UM#?
UM%
UM%CH
UM%T
UM*
um*
UM+
UMum/
UM/
UM<=?
UM<?
UM=?
UM>=?
UM>?
UM>U
umˆ
UMABS
UMCEIL
UMCHS
UMCONV
UMCOS
umEND
UMFLOOR
UMFP
UMIP
UMMAX
UMMIN
umP
UMRND
UMSI
UMSIGN
UMSIN
UMSQ
UMSQRT
UMTAN
UMTRC
UMU>
Page
82
474
474
375
375
376
474
83
83
83
83
83
81
83
83
81
83
83
83
83
83
83
82
81
83
83
83
82
83
81
83
83
83
83
83
81
83
82
83
83
83
83
83
83
82
TWENTYTHREE – ˆVRRDM
Addr.
2F096
0310DE
0270DE
2F098
262F6
36BFA
3F495
29CB9
34FA6
256AC
256A7
256A2
2F019
33193
10B006
25F08
3F249
0339E
29B12
3422B
3F22E
343BD
35872
35D1C
360CF
341BA
3A6006
38195
071C8
2F193
2F265
39420
2F266
463006
36F65
25F09
23F006
23E006
371F9
3E07D
3E0BD
3E09D
3E0DD
02F0E7
0110E7
38F81
3C2AC
324006
Name
UMXROOT
xUNASSIGN
xUNASSUME
Unbr>U
UNCOERCE
UNCOERCE%%
UNCOERCE2
uncrunch
undo
UNDO_OFF
UNDO_ON
UNDO_ON?
UNIT>$
unitob
ˆUnivar?
UnLockAlpha
xUNPICK
UNROLL
unroll2ND
UNROT
xUNROT
UNROT2DROP
UNROTDROP
UNROTDUP
UNROTOVER
UNROTSWAP
ˆunsignedinf
xUNTIL
UNTIL
UobROT
UPDIR
xUPDIR
USER$>TAG
ˆUSERFCN?
UserITE
UserKeys?
ˆUSERLIDNT
ˆUSERLVAR
UStackDepth
xUTPC
xUTPF
xUTPN
xUTPT
˜UTTYPEEXT0?
˜UTVUNS1Arg
xUVAL
xV>
ˆVADD
545
Page
83
82
31
31
31
87
117
82
11
380
278
474
109
76
108, 108
474
107, 108
107, 108
108
108
107, 108
368
474
151
77
169
474
61
86
146
208
416
416
474
474
474
474
474
475
339
Addr.
404006
405006
401006
58C006
3FF006
22B006
053314
3DF68
4C4006
45B006
4B6006
4B4006
4B8006
4B9006
4BA006
4BB006
4B7006
0C4006
358006
3943B
2F267
37A006
08C314
579006
57A006
57B006
0A5007
57C006
2EF93
2F388
1D0006
00F0AB
2F389
26125
2612A
52B006
3C1006
2F2E0
2F21F
2F19A
2F21D
2F21E
0080DD
00A0DD
25F0A
32B006
0390DE
342006
Name
ˆVAL1
ˆVAL1M
ˆVAL2ext
ˆVALMUSTBE0
ˆVALOBJext
ˆVANDERMONDE
˜xVANDERMONDE
xVAR
ˆVAR%
ˆVAR=LIST
ˆVARCOMP!
ˆVARCOMP2!
ˆVARCOMP3!
ˆVARCOMP31!
ˆVARCOMP32!
ˆVARCOMP33!
ˆVARCOMPLN!
ˆVarFactor
ˆVARGENext
xVARS
VARSIZE
ˆVBINARYOP
˜xVER
ˆVerbose1
ˆVerbose2
ˆVerbose3
ˆVERBOSEMODE
ˆVerboseN
VERIF_SELECTION
VerifyTOD
ˆVERNUMext
xVERSION
VERSTRING
VERYSLOW
VERYVERYSLOW
ˆxvext
ˆvgerxssSYMSUM
ViewEditGrob
ViewGrobObject
ViewLevel1
ViewObject
ViewStrObject
xVISIT
xVISITB
VLM
ˆVPMULT
xVPOTENTIAL
ˆVRRDM
Page
423
423
423
404
423
415
475
475
353
387
387
376
475
179
345
475
417
417
417
407
417
306
172
408
475
181
172
172
348
394
313
280
310
280
280
475
475
339
338
546
Addr.
343006
2EEF7
325006
3BDB2
379006
4EA006
4E9006
4E8006
4E2006
589006
4E6006
4DB006
4DA006
4DD006
4DC006
4D7006
4D9006
39819
2F268
25F0B
2A4FC
2D1006
3D605
380DB
071EE
38A2F
2EF61
2F38A
2617F
26184
26189
2F38B
2618E
2F38C
2F38D
26193
26198
0080AB
370C3
2EFBE
09A003
08E007
390AE
3E03D
180006
17F006
17C006
2F292
F. Entries sorted by Name
Name
ˆVRRDMmeta
VSCALE
ˆVSUB
xVTYPE
ˆVUNARYOP
ˆVX!
ˆVX>
ˆVX>LVARext
ˆVXINDEP?
ˆVXINDEPERR
ˆVXLVARext
ˆVXXL0
ˆVXXL1ext
ˆVXXL2
ˆVXXL2NR
ˆVXXLext
ˆVXXLFext
xWAIT
Wait/GetKey
WaitForKey
WaitTbz0
ˆWARNSING
xWHERE
xWHILE
WHILE
xWHILEEND
WINDOW#
WINDOWBOT?
WINDOWCORNER
WINDOWDOWN
WINDOWLEFT
WINDOWLEFT?
WINDOWRIGHT
WINDOWRIGHT?
WINDOWTOP?
WINDOWUP
WINDOWXY
xWIREFRAME
WithHidden
WORDSIZE
ˆWRAP$
ˆWRITEMENU
xWSLOG
xXCOL
ˆXEQ>ARRAY1
ˆXEQ>ARRY
ˆXEQARRY>
XEQIOBACKUP
Page
338
339
475
345
398
398
398
397
404
397
326
326
326
326
325
325
475
207
206
390
475
151
281
280
279
279
279
280
279
280
280
279
279
475
170
57
48
293
475
475
65
65
Addr.
2F296
25F14
2F297
2F2A3
2F2A7
2F2A9
25E79
25F0C
3BC43
0700AB
0BE007
33625
3361B
021100
2EF92
3EC35
23C006
067314
03ADA
3CB7A
25F0D
3AD65
0710AB
068314
0500AB
3C915
3A278
454006
2C8006
04F0AB
06E0AB
51C006
0000AB
0030AB
3421A
25F0E
341D2
3574D
3416E
341A8
343BD
3636F
35EF2
35872
3422B
34195
341BA
341D7
Name
XEQORDER
XEQPGDIR
XEQPURGEPICT
XEQRCL
XEQSETLIB
XEQSHOWLS
XEQSTOID
XEQStoKey
XEQTYPE
xXGET
ˆXGROBext
XHI
XHI-1
xXLIB˜
XLINE_SIZE?
xXMIT
ˆXNUM
˜xXNUM
XOR
xXOR
XOR$
xXPON
xXPUT
˜xXQ
xXRECV
xXRNG
xXROOT
ˆXROOT2ext
ˆXROOT_IN?
xXSEND
xXSERV
ˆXSQRext
xXVOL
xXXRNG
XY>Y
XYGROBDISP
XYZ>
XYZ>Y
XYZ>YXZ
XYZ>YZ
XYZ>Z
XYZ>ZCOLA
XYZ>ZTRUE
XYZ>ZX
XYZ>ZXY
XYZ>ZY
XYZ>ZYX
XYZW>
Page
168
168
318
166
100
88
167
167
199
475
98
16
16
479
314
475
416
475
136
475
50
476
476
476
476
476
476
352
476
476
348
476
476
107
91
106
106, 107
107
107
107, 108
131
136
107, 108
108, 108
107
107, 108
106
ˆVRRDMmeta – 17GETLAM
Addr.
343CF
34331
36C90
3423A
31219
3E05D
331006
33387
3C935
00B0AB
0010AB
0040AB
18A006
0EF006
18E006
265BC
588006
265D0
265C6
265C1
265B7
19D006
587006
265CB
0F6006
0F1006
0F4006
102006
50B006
10E006
10D006
0DE006
108007
33107
073C3
36568
3709B
360BB
040314
21B006
21C006
35E75
37287
37394
373A8
37380
27D006
05F0AB
Name
XYZW>W
XYZW>WXYZ
XYZW>YWZX
XYZW>YZWX
Y<=X
xYCOL
ˆYext
YHI
xYRNG
xYSLICE
xYVOL
xYYRNG
ˆZ2%%
ˆZ2BIN
ˆZ2Sext
Z<
ˆZ<0ERR
Z<=
Z<>
Z=
Z>
ˆZ>#
ˆZ>#ERR
Z>=
ˆZ>R
ˆZ>S
ˆZ>ZH
ˆZAbs
ˆZABS
ˆZBit?
ˆZBits
ˆZDIVext
ˆZEILBERGER
ZERO
ZERO_DO
ZEROFALSE
ZEROISTOPSTO
ZEROOVER
˜xZEROS
ˆZEROS1EQ
ˆZEROSMANYEQ
ZEROSWAP
ZEROZERO
ZEROZEROONE
ZEROZEROTWO
ZEROZEROZERO
ˆZFACTO
xZFACTOR
547
Page
108
108
107
107
476
65
13
476
476
476
477
31
22
328
334
404
334
334
334
334
22
404
334
31
46
328
329
329
329
329
393
10
151
22
152
22
477
414
415
22
21
21
21
21
381
477
Addr.
0C9006
2B8006
2B7006
51F006
0FC006
0FA006
0D2006
0DD006
107006
105006
106006
255A6
255AB
0D1006
0DC006
0F0007
0F1007
0EE007
0E0006
0D8006
0D6006
0D7006
101006
0020AB
189006
25F9A
25F9A
388006
40A006
31568
34670
344A8
3466B
3616F
3467A
34675
34684
3467F
3468E
34689
34698
34693
33B13
346A2
3469D
346AC
346A7
346B6
Name
ˆZFactor
ˆZGcd
ˆZGCDext
ˆZINTSQRT
ˆZIsNeg?
ˆZIsOne?
ˆZIsPrime?
ˆZMod
ˆZNLT?
ˆZNMax
ˆZNMin
ZoomX
ZoomY
ˆZPrime?
ˆZQUOText
ˆZSIGNE
ˆzsigne
ˆZSIGNECK
ˆZSQRT
ˆZTrialDiv
ˆZTrialDiv2
ˆZTrialPrime?
ˆZTrim
xZVOL
ˆZZ2C%%ext
0LASTOWDOB!
0LastRomWrd!
ˆ1&meta
ˆ1-xˆ2/1+xˆ2
1/X15
10GETLAM
10PICK
10PUTLAM
10UNROLL
11GETLAM
11PUTLAM
12GETLAM
12PUTLAM
13GETLAM
13PUTLAM
14GETLAM
14PUTLAM
14SPACES$
15GETLAM
15PUTLAM
16GETLAM
16PUTLAM
17GETLAM
Page
330
329
329
334
334
331
329
334
329
329
331
401
402
401
329
332
332
332
329
477
37
197
197
359
365
117
109
118
109
118
118
118
118
118
118
118
118
45
118
118
118
118
118
548
Addr.
346B1
346C0
346BB
346CA
346C5
362A2
362A2
25E6C
35DEE
364FF
34616
2F318
35F42
36518
3A4006
3A1006
2B3A6
34611
2F180
25E6D
36676
30E5B
30E47
34B4F
441006
443006
346D4
346CF
346DE
346D9
346E8
346E3
346F2
346ED
346FC
346F7
34706
34701
34710
3470B
3471A
34715
34BAB
173006
03258
355A5
25E6E
35B32
F. Entries sorted by Name
Name
17PUTLAM
18GETLAM
18PUTLAM
19GETLAM
19PUTLAM
1_#1-SUB
1_#1-SUB$
1A/LockA
1ABNDSWAP
1GETABND
1GETLAM
1GETLAMSWP1+
1GETSWAP
1LAMBIND
ˆ1metainf#
ˆ1metaundef#
1NULLLAM{}
1PUTLAM
1REV
1stkdecomp$w
2#0=OR
2%%>%
2%>%%
2'RCOLARPITE
ˆ2*1-cos/sin
ˆ2*sin/1+cos
20GETLAM
20PUTLAM
21GETLAM
21PUTLAM
22GETLAM
22PUTLAM
23GETLAM
23PUTLAM
24GETLAM
24PUTLAM
25GETLAM
25PUTLAM
26GETLAM
26PUTLAM
27GETLAM
27PUTLAM
2@REVAL
ˆ2DMATRIX?
2DROP
2DROP00
2DropBadKey
2DROPFALSE
Page
118
118
118
118
118
48
48
119
119
117
119
119
116
367
367
119
118
30
51
26
31
31
138
366
367
118
118
118
119
118
119
118
119
118
119
118
119
118
119
118
119
128
339
106
21
207
136
Addr.
2D7006
392006
031AC
3674D
358C2
358DC
358F8
36CA4
36621
35D30
3370B
3632E
34620
336E3
336CF
2F17E
155006
33459
3A3006
3A0006
2825E
271F4
37087
37046
4E1006
3461B
343E1
331B1
3570C
35018
12A006
40D006
34BBB
341D2
2D5006
3462A
156006
27208
34485
36789
36CCC
360F7
35F1A
34625
343F3
33765
35703
3422B
Name
ˆ2DROPTRUE
ˆ2DROPZ0
2DUP
2DUP#+
2DUP#<
2DUP#=
2DUP#>
2DUP5ROLL
2DUPEQ
2DUPSWAP
2EXT
2GETEVAL
2GETLAM
2GROB
2HXS
2HXSLIST?
ˆ2LAMBIND
2LIST
ˆ2metainf#
ˆ2metaundef#
2NELCOMPDROP
2NULLLAM{}
2Ob>Seco
2OVER
ˆ2POLYNOMIAL?
2PUTLAM
2RDROP
2REAL
2skipcola
2SWAP
ˆ2SYMBINCOMP
ˆ2x/1+xˆ2
3@REVAL
3DROP
ˆ3DUP
3GETLAM
ˆ3LAMBIND
3NULLLAM{}
3PICK
3PICK#+
3PICK3PICK
3PICKOVER
3PICKSWAP
3PUTLAM
3RDROP
3REAL
3skipcola
3UNROLL
Page
136
327
106
24
25
25
25
106
137
106, 106
16
119
117
16
16
22
116
14
368
367
68
119
73
109
397
118
129
11
131
107
72, 325
365
128
106
106
117
116
119
109
25
109
109
109
118
129
17
131
108, 108
17PUTLAM – #1+PICK
Addr.
341D7
34634
2B3B7
3448A
3679D
35E20
35E20
3610B
35F2E
3462F
3423A
3588B
360E3
36043
35F06
34331
343CF
35D44
36057
341DC
3463E
3448F
34639
34257
358A7
356D5
34357
341E8
34648
34494
34643
34281
3438D
341F4
34652
34499
3464D
342EA
35BEB
3465C
3449E
34657
342BB
3615B
34666
344A3
34661
28225
Name
4DROP
4GETLAM
4NULLLAM{}
4PICK
4PICK#+
4PICK#+SWAP
4PICK+SWAP
4PICKOVER
4PICKSWAP
4PUTLAM
4ROLL
4ROLLDROP
4ROLLOVER
4ROLLROT
4ROLLSWAP
4UNROLL
4UNROLL3DROP
4UNROLLDUP
4UNROLLROT
5DROP
5GETLAM
5PICK
5PUTLAM
5ROLL
5ROLLDROP
5skipcola
5UNROLL
6DROP
6GETLAM
6PICK
6PUTLAM
6ROLL
6UNROLL
7DROP
7GETLAM
7PICK
7PUTLAM
7ROLL
7UNROLL
8GETLAM
8PICK
8PUTLAM
8ROLL
8UNROLL
9GETLAM
9PICK
9PUTLAM
9UNROLL
549
Page
106
117
119
109
25
25
25
109
109
118
107
107
108
108
107
108
108
108
108
106
117
109
118
108
108
131
109
106
117
109
118
108
109
106
117
109
118
108
109
117
109
118
108
109
117
109
118
109
Addr.
35369
353F7
353EB
2F315
2F316
25E67
25E68
353CD
35F6A
2F191
3533C
263D2
25F68
25F63
03EC2
2632D
03DBC
36851
357FC
36093
34417
344DD
35E39
3453D
03DE0
35552
36815
3581F
360A7
34405
344CB
35E4D
3452B
03EF7
03CC7
03CA6
34A7E
36383
348FC
36F15
35B96
03DEF
36A13
073DB
35830
362CA
35FB0
34436
Name
!!append$?
!!append$
!!insert$
!#1+IF<dim-1
!#1-IF>0
!*triand
!*trior
!append$
!append$SWAP
!DcompWidth
!insert$
!MATTRNnc
!REDIMTEMP
!REDIMUSER
#*
#*OVF
#+
#+-1
#+DUP
#+OVER
#+PICK
#+ROLL
#+SWAP
#+UNROLL
##-#2/
#-+1
#-DUP
#-OVER
#-PICK
#-ROLL
#-SWAP
#-UNROLL
#/
#0<>
#0=
#0=?SEMI
#0=?SKIP
#0=case
#0=ITE
#0=UNTIL
#1+
#1+'
#1+_ONE_DO
#1+DUP
#1+LAST$
#1+NDROP
#1+PICK
Page
49
49
49
50
50
49
49
51
49
23
23
23
23
24
24
110
108
24
109
23
24
23
24
24
110
108
24
109
23
25
25
141
141
141
141
151
23
130
151
24
48
75, 106
109
550
Addr.
344F2
2F222
35E61
34552
03E0E
36851
36815
35E89
35841
3601B
3628E
28071
281D5
361EE
35675
35620
03880
3375B
3E17B
3562A
2777E
3378D
337A1
337AB
337B5
337BF
337C9
337D3
337DD
337E7
337F1
337FB
3530D
352FE
3639C
36D8A
03E6F
03E2D
34451
34517
34564
03E4E
03E8E
3380F
3C8D0
03FEF
03FF9
36711
F. Entries sorted by Name
Name
#1+ROLL
#1+ROT
#1+SWAP
#1+UNROLL
#1#1-+
#1#1-1SWAP
#1-DUP
#1-ROT
#1-SUB$
#1-SWAP
#1-UNROT
#1-{}N
#10*
#10+
#102A8
#110
#111
#12+
#12F
#132
#134
#135
#136
#137
#138
#139
#13A
#13B
#13D
#13E
#1<>
#1=
#1=?SKIP
#1=case
#2*
#2+
#2+PICK
#2+ROLL
#2+UNROLL
#2#2/
#200
#2111
#2614
#2686
#2<>
Page
108
24
24
109
23
23
23
24
24
24
48
24, 77
24
72
23
23
21
17
17
23
17
17
17
17
17
17
17
17
17
17
17
17
25
25
142
142
23
23
109
108
109
23
23
17
20
20
20
25
Addr.
352F1
091B4
03FA9
355FD
34465
2D6006
355DF
3A1C2
3B9FA
350F5
352E0
35602
34474
355DA
3C11E
3B928
33837
3BA2D
0803F
3B93D
33841
3C10F
3B952
33855
3BA18
3B913
3A12D
35607
355D5
3385F
33869
3BA09
08ECE
33873
366FD
3C8DF
356B8
3560C
355D0
277F6
27800
2780A
27814
2781E
27828
27832
2783C
27846
Name
#2=
#2D541
#2E48
#3+
#3+PICK
ˆ#3+ROLL
#3#304
#313
#37258
#3=
#4+
#4+PICK
#4#410
#411
#412
#414
#414C1
#415
#444
#450
#451
#452
#454
#455
#4FF
#5+
#5#510
#511
#515
#536A8
#550
#5=
#5B11
#6*
#6+
#6#605
#606
#607
#608
#609
#60A
#60B
#60C
#60D
Page
25
21
20
23
109
108
23
17
17
21
25
23
110
23
17
17
17
17
21
17
17
17
18
18
18
18
18
23
23
18
18
18
21
18
25
20
23
23
23
18
18
18
18
18
18
18
18
18
#1+ROLL – #A2A
Addr.
2768E
27698
276AC
276B6
276C0
276CA
0657E
276D4
276DE
276E8
27792
2779C
277A6
277B0
277BA
277C4
277CE
277D8
277E2
277EC
276F2
276FC
27706
27710
2771A
27724
2772E
27738
27742
27788
35611
33891
3C17A
3C16B
08DF7
3569B
35616
27878
3B976
3C83C
3B967
3C81E
3389B
338A5
338AF
338B9
3362F
3E7FF
Name
#60E
#60F
#611
#612
#613
#614
#61441
#615
#616
#617
#618
#619
#61A
#61B
#61C
#61D
#61E
#61F
#620
#621
#622
#623
#624
#628
#629
#62A
#62B
#62C
#62D
#62E
#7+
#700
#710
#750
#7FF
#8*
#8+
#800
#822
#82C
#855
#85C
#861
#862
#865
#86E
#8F
#8F1
551
Page
18
18
18
18
18
18
21
18
18
18
18
18
18
18
18
18
18
18
18
18
18
19
19
19
19
19
19
19
19
19
23
19
19
19
19
23
23
19
19
19
19
19
19
19
19
19
16
19
Addr.
3E759
3561B
33643
3364D
3EAFB
3E7E9
3E743
25F72
03CE4
366BC
03D4E
36D9E
36D76
36F29
03D19
363B5
348D2
34939
36590
35C54
37752
03D83
25F77
36739
36DB2
363E2
36DCB
05A75
059CC
36F3D
07E50
0EE006
3CD21
3373D
2774C
27756
27760
2776A
27774
338CD
3D50D
338D7
338E1
3D52B
3367F
338EB
338F5
338FF
Name
#8FD
#9+
#92
#9A
#9F
#9F1
#9FD
#:>$
#<
#<3
#<>
#<>case
#<case
#<ITE
#=
#=?SKIP
#=case
#=casedrop
#=casedrpfls
#=ITE
#=POSCOMP
#>
#>$
#>1
#>2case
#>?SKIP
#>case
#>CHR
#>HXS
#>ITE
#>ROMPTR
ˆ#>Z
x#?
#_102
#A01
#A02
#A04
#A05
#A06
#A11
#A110
#A12
#A1A
#A1A0
#A2
#A21
#A22
#A2A
Page
19
23
16
16
16
19
19
46
25
25
25
141
141
141
25
140
141
141
141
141
69
25
46
25
142
140
141
47
56
141
100
327
476
17
19
19
19
19
19
19
20
19
19
20
16
19
20
20
552
Addr.
39E6B
33689
33909
33913
3391D
33927
03826
336A7
33931
3D51C
3393B
33945
2C4D2
3BD4C
03EB1
39277
38275
3B7AD
3394F
33959
33963
33977
3B904
3C800
3B8F5
3C7E2
3E7DA
33981
3BD65
08F1F
038DC
33995
07C007
38266
3736E
3551D
35511
33783
37315
03DC7
33747
3735C
3734A
37328
3733A
37294
37305
39C9F
F. Entries sorted by Name
Name
#A4
#A5
#A61
#A62
#A65
#A6E
#A8241
#A9
#AA1
#AA10
#AA2
#AAA
#AAA0
#AF
#AND
#B437D
#BB
#BBBB
#C06
#C07
#C08
#C0B
#C22
#C2C
#C55
#C5C
#C8
#CAlarmErr
#CF
#D6A8
#E13A8
#EXITERR
ˆ#FACT
#FFFF
#FIVE#FOUR
#MAX
#MIN
#NoRoomForSt
#ONE#27
#PUSHA#SyntaxErr
#THREE#FOUR
#TWO#FOUR
#TWO#ONE
#TWO#TWO
#ZERO#ONE
#ZERO#SEVEN
$&ob
Page
16
16
20
20
20
20
21
16
20
20
20
20
20
16
25
21
16
20
20
20
20
20
20
20
20
20
16
20
16
20
21
21
330
21
21
25
25
17
21
17
21
21
21
21
21
21
53
Addr.
36851
25F7C
25F81
25F86
25F8B
05F0B3
05B15
3402C
34056
3403A
34002
3401E
34064
34076
340B4
34048
33FD2
33FE2
340A4
34088
33FF2
34010
33B45
3B251
30385
3602F
35EDE
36C7C
3032E
3033A
2FBE5
30DC8
2FBFF
303D3
36BE6
2FB49
30112
301F6
301A6
30145
30173
301CE
2FB63
3047D
2FC19
30CC7
2FB7D
27A89
Name
$1-+
$>GROB
$>grob
$>GROBCR
$>grobCR
˜$>grobOrGROB
$>ID
$_''
$_2DQ
$_::
$_<<>>
$_[]
$_ECHO
$_EXIT
$_GRAD
$_LRParens
$_R<<
$_R<Z
$_RAD
$_Undefined
$_XYZ
$_{}
$DER
x%
%%*
%%*ROT
%%*SWAP
%%*UNROT
%%+
%%%%.1
%%.4
%%.5
%%/
%%/>%
%%0
%%0<
%%0<=
%%0<>
%%0=
%%0>
%%0>=
%%1
%%1/
%%10
%%12
%%2
%%2PI
Page
23
96
96
96
96
96
116
44
44
44
44
44
44
44
44
44
44
44
44
44
44
44
45
476
33
33
33
33
33
33
30
30
30
34
34
30
35
35
35
35
35
35
30
34
30
30
30
30
#A4 – %23
Addr.
2FB97
2FBB1
2FBCB
30CEB
30BEA
3020A
30296
3026A
2FF9B
30280
261CF
3044A
302DB
306F3
3073A
30757
30767
306C3
302FB
30642
30653
307B2
30663
30507
30984
30912
30984
30546
3057F
300C7
30EB0
2FADB
11C007
30E83
305F1
30602
30780
30612
304D5
30693
303A7
3035F
25E69
3036C
339D3
2FA09
2B289
2FA1E
Name
%%3
%%4
%%5
%%60
%%7
%%<
%%<=
%%>
%%>%
%%>=
%%>C%
%%ˆ
%%ABS
%%ACOSRAD
%%ANGLE
%%ANGLEDEG
%%ANGLERAD
%%ASINRAD
%%CHS
%%COS
%%COSDEG
%%COSH
%%COSRAD
%%EXP
%%FLOOR
%%H>HMS
%%INT
%%LN
%%LNP1
%%MAX
%%P>R
%%PI
ˆ%%PSI
%%R>P
%%SIN
%%SINDEG
%%SINH
%%SINRAD
%%SQRT
%%TANRAD
%*
%+
%+SWAP
%%-.5
%-1
%-1=case
%-2
553
Page
30
30
30
30
30
35
35
35
31
35
37
34
34
34
34
34
34
34
34
34
34
34
34
34
34
172
34
34
34
34
34
30
394
34
34
34
34
34
34
34
31
31
31
31
28
28
143
28
Addr.
2FA33
2FA48
2FA5D
2FA72
2FA87
2FA9C
2FAB1
2FB0A
2FB34
27118
2712D
339BE
303E9
2F937
30123
301BA
30156
2B149
30184
301E2
2F94C
26F36
26F4A
270EE
3049A
339E8
35C18
27E5D
2FCE6
2FCFB
2FC7D
2FD10
2FD25
2FD3A
2FCD1
2FD4F
2FD64
2FD79
339FD
2FD8E
2B1A3
4CE006
2F961
2FDA3
33A12
2FDB8
2FDCD
2FDE2
Name
%-3
%-4
%-5
%-6
%-7
%-8
%-9
%-MAXREAL
%-MINREAL
%.1
%.15
%.5
%/
%0
%0<
%0<>
%0=
%0=case
%0>
%0>=
%1
%1+
%1%1.8
%1/
%10
%10*
%100
%11
%12
%1200
%13
%14
%15
%15360
%16
%17
%18
%180
%19
%1=case
ˆ%1TWO
%2
%20
%200
%21
%22
%23
Page
28
28
28
28
28
28
28
28
28
28
28
32
28
35
35, 135
35
142
35
35
28
31
31
28
32
28
31
29
28
28
29
29
29
29
29
29
29
29
29
29
142
396
28
29
29
29
29
29
554
Addr.
2FDF7
2FC92
2FE0C
2FE21
2FE36
2FE4B
2FE60
2B20C
2F976
2FE75
2FE8A
2FE9F
2FEB4
2FEC9
2FEDE
33A27
2F98B
33A3C
2FCA7
2F9A0
2F9B5
2F9CA
2F9DF
27103
2F9F4
2FCBC
3025C
302A1
302B7
302AC
30275
2EFCB
2FFAC
30346
30489
30746
304E1
35ECA
3028B
05C27
3005E
2F223
3045B
302EB
262EC
306DC
307FE
305A5
F. Entries sorted by Name
Name
%24
%2400
%25
%26
%27
%28
%29
%2=case
%3
%30
%31
%32
%33
%34
%35
%360
%4
%400
%4800
%5
%6
%7
%8
%80
%9
%9600
%<
%<=
%<>
%=
%>
%>#
%>%%
%>%%%>%%1/
%>%%ANGLE
%>%%SQRT
%>%%SWAP
%>=
%>C%
%>HMS
%>TAG
%ˆ
%ABS
%ABSCOERCE
%ACOS
%ACOSH
%ALOG
Page
29
29
29
29
29
29
29
143
28
29
29
29
29
29
29
29
28
29
29
28
28
28
28
29
28
29
35
35
35
35
35
56
31
31
32
32
32
31
35
37
172
61
32
32
22
32
32
32
Addr.
30723
306AC
307EB
3070C
30811
3095E
3B362
3041B
3030B
3084D
3062B
307C5
3000D
339A9
3051A
3052D
30824
30AAF
30971
30938
3008B
300B3
30077
3094B
2B3FD
30559
30592
3056C
3031B
300E0
35DBC
2FAF5
300F9
2FB1F
305C7
30837
3046C
303B4
30860
2FAC6
30EA6
30040
309AD
30A2F
30E79
302C2
305DA
30799
Name
%ANGLE
%ASIN
%ASINH
%ATAN
%ATANH
%CEIL
x%CH
%CH
%CHS
%COMB
%COS
%COSH
%D>R
%e
%EXP
%EXPM1
%EXPONENT
%FACT
%FLOOR
%FP
%HMS+
%HMS%HMS>
%IP
%IP>#
%LN
%LNP1
%LOG
%MANTISSA
%MAX
%MAXorder
%MAXREAL
%MIN
%MINREAL
%MOD
%NFACT
%NROOT
%OF
%PERM
%PI
%POL>%REC
%R>D
%RAN
%RANDOMIZE
%REC>%POL
%SGN
%SIN
%SINH
Page
32
32
32
32
32
32
455
33
32
33
32
32
33
28
32
32
32
33
32
32
172
172
172
32
31
32
32
32
32
33
33
30
33
28
32
33
33
33
33
28
33
33
33
33
33
32
32
32
%24 – >TAG
Addr.
30EDD
304F4
3B2DC
303F6
3067C
307D8
4EA61
4EA4C
4EA37
4EA22
4EA76
05193
36FF6
0521F
0518A
389EF
06E97
25E6A
25E6B
2B90B
3619E
27B43
27B7F
27B6B
27155
2F350
36A8B
36306
06EEB
36A27
29ED0
06F66
36A4A
354CB
354CB
29786
36BBE
36BD2
36AA4
2EE006
2EC006
39DE8
127006
3C444
3C464
39B58
125006
073A5
Name
%SPH>%REC
%SQRT
x%T
%T
%TAN
%TANH
%TICKSday
%TICKShour
%TICKSmin
%TICKSsec
%TICKSweek
&$
&$SWAP
&COMP
&HXS
x'
'
'DoBadKey
'DoBadKeyT
'DROPFALSE
'ERRJMP
'IDFUNCTION
'IDPARAMETER
'IDPOLAR
'IDX
'LamKPSto
'LAMLNAMESTO
'NOP
'R
'R'R
'Rapndit
'REVAL
'RRDROP
'RSaveRomWrd
'RSAVEWORD
'RSWAP#1+
'x*
'xDER
'xDEREQ
ˆ'xi
ˆ'xPI
x*
ˆx*ext
x*H
x*W
x+
ˆx+ext
+LOOP
555
Page
33
32
474
33
32
32
29
29
29
29
30
49
49
68
57
130
130
130
130
130
131
131
131
116
168
130
128
128
131
128
128
197
197
24
130
130
131
420
420
476
347
470
470
476
347
151
Addr.
39CFC
3DA3E
3DA63
3EFB1
126006
39F49
129006
05445
3631A
09F006
3F053
3CE42
389B9
3CF80
27F47
27EAF
38D83
398B9
3CBF6
128006
3CEE1
3D01F
389D4
38999
3BE9B
27F9A
25F15
3C8A1
0525B
052C6
3B0EC
0A2006
0A4006
25F90
37C06
3C881
3B7D2
2620B
39785
0A7006
4F8006
06F9F
25E6F
0EB007
27EFB
3BBBE
052EE
05E81
Name
xx->Q
x->QPI
x->TAG
ˆx-ext
x/
ˆx/ext
::N
::NEVAL
ˆ::POLY
x;
x<
x<<
x<=?
<DelKey
<SkipKey
x<STRUCT
x=
x==
ˆx=ext
x>
x>=?
x>>
x>>ABND
x>ARRY
>DelKey
>FONT
x>GROB
>H$
>HCOMP
x>HMS
ˆ>HPOLY
ˆ>HPOLYN
>LANGUAGE
>LASTRAM-WORD
x>LCD
x>LIST
>MINIFONT
x>NUM
ˆ>POLY
ˆ>POLYTRIM
>R
>Review$
ˆ>SIGNE
>SkipKey
x>STR
>T$
>TAG
Page
476
468
468
473
347
476
347
71
74
377
476
476
314
314
476
476
350
476
476
454
314
283
460
49
68
461
378
378
179
463
464
283
465
377
399
128
52
401
314
472
49
61
556
Addr.
052FA
0A1006
0A3006
38FB5
3C2D6
3C30A
4F1006
089314
35A88
25F9F
25E70
25E70
25E71
361C6
25E72
25E73
25E74
25E75
2F19F
2DFCC
2C341
2C311
2E5006
2EE5D
39332
34A46
25E76
3705A
25E77
25E78
35AAB
34AA1
3692D
0712A
35DDA
2EF73
25E79
F. Entries sorted by Name
Name
>TCOMP
ˆ>TPOLY
ˆ>TPOLYN
x>UNIT
x>V2
x>V3
ˆ>VARLIST
˜x?
?>ROMPTR
?ACCPTR>
?ATTN_QUIT
?ATTNQUIT
?BlinkCursor
?CARCOMP
?CaseKeyDef
?CaseRomptr@
?ClrAlg
?ClrAlgSetPr
?DispCommandLine
?DispMenu
?DispStack
?DispStatus
ˆ?ext
?FlashAlert
?GETMSG
?GOTO
?Key>UKeyOb
?Ob>Seco
?OKINALG
?PURGE_HERE
?ROMPTR>
?SEMI
?SEMIDROP
?SKIP
?SKIPSWAP
?Space/Go>
?STO_HERE
Page
68
377
378
474
475
475
100
207
207
179
68
142
142
278
278
312, 274
292, 274
274
274
419
178
157
129
73
201
167
100
137
138
138
138
311
167
Addr.
35F56
35F97
293A3
2ACB0
0797B
07943
16B006
002100
00B100
006100
0380AB
03A0AB
0020DD
000100
0040DD
06C0AB
0000DD
00A100
0110DD
0060DD
00C100
00E100
0360AB
020100
3D202
3D434
0550AB
0590AB
08A314
05A0AB
3A097
12B006
05459
0A0006
16A006
3D56B
Name
?SWAP
?SWAPDROP
?symcomp
?TogU/LCase
@
@LAM
ˆ[]TO{}
x→A
x→ALG
x→CD
x→COL
x→DIAG
x→FONT
x→H
x→HEADER
x→KEYTIME
x→LANGUAGE
x→LST
x→MINIFONT
x→NDISP
x→PRG
x→RAM
x→ROW
x→S2
x∂
x
xΔLIST
xΣLIST
˜x∞
xΠLIST
xˆ
ˆxˆext
{}N
ˆ{}POLY
ˆ{}TO[]
x|
Page
138
138
86
166
117
338
478
478
478
455
457
459
478
461
463
463
478
464
465
478
478
470
479
457
462
460
461
462
466
477
347
71
377
338
460
Appendix G
Entries sorted by Address
The entries in this index are sorted by address. Six-digit addresses are
always sorted after five-digit addresses. The six-digit addresses for rompointers and flashpointers consist of the pointer number (first three digits) and the
flashbank/library id (last three digits). Sorting of these addresses uses first the
flashbank/library id and then the pointer number, so 000123 will be sorted after FFF122. Note that for technical reasons, the page number given may be off
by one for a few percent of the entries. If the page reference is 167, the entry
may actually be the first entry on page 168.
Addr.
00001
00002
00003
00004
00008
0000F
000FF
00110
00111
00112
00113
00114
00116
0011A
0011F
0012E
0012F
0020F
00A0E
00C0D
00C0E
00C10
01118
01661
026FE
Name
sTRUNC
sNEGATE
DZP
sBPOFF
sBEG
sALLOWINTR
allkeys
IOC
RCS
TCS
CRER
RBR
TBR
IRC
IRAM@
TIMERCTRL.1
TIMERCTRL.2
OUTCINRTN
addrKEYSTATE
kermsendmsg
kermrecvmsg
kermpktmsg
LowBat?
addrORghost
DOMINIFONT
Page
178
Addr.
028FC
0312B
0314C
03188
031AC
031D9
03223
03244
03258
0326E
03295
032C2
032E2
03325
0339E
0371D
03826
03880
038DC
039EF
03A81
03AC0
03ADA
03AF2
03B2E
557
Name
PRLG
SEMI
DEPTH
DUP
2DUP
NDUP
SWAP
DROP
2DROP
NDROP
ROT
OVER
PICK
ROLL
UNROLL
GETATELN
#A8241
#102A8
#E13A8
ECUSER
TRUE
FALSE
XOR
NOT
EQ
Page
129
107
106
106
106
107
106
106
75, 106
107
109
109
108
109
64
21
21
21
135
136
136
136
137
558
Addr.
03B46
03B75
03B97
03C64
03CA6
03CC7
03CE4
03D19
03D4E
03D83
03DBC
03DC7
03DE0
03DEF
03E0E
03E2D
03E4E
03E6F
03E8E
03EB1
03EC2
03EF7
03F8B
03F95
03F9F
03FA9
03FA9
03FBD
03FD1
03FDB
03FE5
03FEF
03FF9
041A7
041ED
0426A
04708
04714
047C7
047CF
047DD
04A0B
04A41
04CE6
04D0E
04D33
04D3E
04D64
G. Entries sorted by Address
Name
AND
OR
EQUAL
TYPE
#0=
#0<>
#<
#=
#<>
#>
#+
#PUSHA##1+
#1#2+
#2#2*
#2/
#AND
#*
#/
TYPEREAL
TYPECMP
TYPELIST
TYPEIDNT
#2E48
TYPESYMB
TYPELAM
TYPEEREL
TYPEEXT
#2614
#2686
TurnOff
DEEPSLEEP
ShowInvRomp
CHECKKEY
GETTOUCH
REPKEY?
adrDISABLE_K
adrKEYBUFFER
GETPROC
GETDF
ERROR@
ERRORSTO
ERRORCLR
DROPNULL$
GETTHEMESG
Page
136
136
137
199
25
25
25
25
25
25
23
23
23
23
23
23
23
23
25
23
23
20
20
20
20
20
20
20
20
20
20
20
178
178
178
205
206
206
288
288
156
156
156
46
157
Addr.
04D87
04D87
04E07
04E37
04E5E
04E66
04EA4
04EB8
04ED1
04FB6
04FF2
05016
05040
05068
05089
050ED
05149
05153
0516C
0518A
05193
0521F
0525B
052C6
052EE
052FA
05445
05459
0546D
05481
054AF
0556F
055B7
055D5
055DF
055E9
055FD
05616
05622
05636
0567B
056B6
05733
05815
05821
05902
05944
059CC
Name
JstGetTHEMESG
JstGETTHEMSG
GETEXITMSG
EXITMSGSTO
ERRSET
addrTEMPENV
ABORT
ERRTRAP
ERRJMP
SETMEMERR
SETPORTNOTAV
SETROMPERR
ATTNFLG@
ATTNFLGCLR
CARCOMP
CAR$
Loop
CDRCOMP
CDR$
&HXS
&$
&COMP
>H$
>HCOMP
>T$
>TCOMP
::N
{}N
SYMBN
EXTN
INNERCOMP
NULL$?
NULLCOMP?
NULLHXS
NULL$
NULL{}
NULL::
LENHXS
OVERLEN$
LEN$
LENCOMP
NTHELCOMP
SUB$
SUBHXS
SUBCOMP
OSIZE
OCRC
#>HXS
Page
157
157
156
156
157
156
157
156
157
157
157
207
207
68
47
68
47
57
49
68
49
68
49
68
71
71
71, 86
81, 71
71
55
68
57
43
72
73
57
47
47
68
68
48
57
69
178
179
56
03B46 – 25579
Addr.
05A03
05A51
05A75
05AB3
05B15
05BE9
05C27
05D2C
05DBC
05E81
05F2E
05F42
05F61
0657E
06657
06B4E
06E8E
06E97
06EEB
06F66
06F8E
06F9F
06FB7
06FD1
07012
0701F
070C3
070FD
0712A
0712A
0714D
0716B
071A2
071AB
071C8
071E5
071EE
07221
07249
07258
07264
07270
07295
072AD
072C2
07334
073A5
073C3
Name
HXS>#
CHR>#
#>CHR
CHANGETYPE
$>ID
ID>$
%>C%
C%>%
C%%>%%
>TAG
ID>TAG
GARBAGE
MEM
#61441
TOTEMPOB
INTEMNOTREF?
NOP
'
'R
'REVAL
EVAL
>R
RDROP
COLA
R@
R>
RPITE
RPIT
?SKIP
NOT_IT
SKIP
IDUP
BEGIN
AGAIN
UNTIL
REPEAT
WHILE
INDEX@
ISTOP@
JINDEX@
JSTOP@
INDEXSTO
ISTOPSTO
JINDEXSTO
JSTOPSTO
LOOP
+LOOP
ZERO_DO
559
Page
22
22
47
179
116
46
37
31
37
61
61
178
178
21
171
171
128
130
128
128
128
128
129
131
128
128
138
138
138
138
131
128, 150
150
151
151
151
151
151
152
152
152
152
152
152
152
151
151
151
Addr.
073CE
073DB
073F7
07497
074D0
074E4
075A5
075E9
07638
0764E
07661
076AE
07709
07943
0797B
07D1B
07D27
07E50
07E99
0803F
081D9
082E3
08309
08326
08376
085D3
08696
08C27
08CCC
08D08
08D5A
08D66
08D92
08D92
08DD4
08DF7
08ECE
08F1F
0905F
091B4
092DB
0B954
20D6F
25565
2556A
2556F
25574
25579
Name
ONE_DO
#1+_ONE_DO
DO
ABND
BIND
DOBIND
GETLAM
PUTLAM
SETHASH
SETMESG
SET
OFFSRRP
TOSRRP
@LAM
@
STOLAM
STO
#>ROMPTR
ROMPTR@
#414C1
BAKNAME
RAM-WORDNAME
MYRAMROMPAIR
LASTRAM-WORD
PREVRAM-WORD
REPLACE
CREATE
PURGE
ROMPTR>#
CONTEXT!
CONTEXT@
SysPtr@
HOMEDIR
SYSCONTEXT
SYSRRP?
#7FF
#536A8
#D6A8
BAK>OB
#2D541
InitEnab
RunInNewContext
TYPERRP
LineW
LineB
LineG1
LineG2
LineXor
Page
151
151
151
117
116
116
117
118
100
100
100
117
166
117
167
100
100
21
101
168
168
168
167
167
167
100
169
169
169
169
169
19
21
20
101
21
310
20
93
93
93
93
93
560
Addr.
2557E
25583
25588
2558D
25592
25597
2559C
255A1
255A6
255AB
255B0
255B5
255BA
255BF
255C4
255C9
255CE
255D3
255D3
255D8
255DD
255E2
255E7
255EC
255F1
255F6
255FB
25617
2561C
25621
25636
2564D
2565A
2565F
25671
25676
25683
25690
25695
2569A
256A2
256A7
256AC
256BE
256EA
25719
2571E
2577F
G. Entries sorted by Address
Name
Sub
Repl
Gor
Gxor
SubRepl
SubGor
SubGxor
Grey?
ZoomX
ZoomY
ScrollVGrob
Distance
PixonW
PixonB
PixonG1
PixonG2
PixonXor
FBoxW
FBoxG1
FBoxG2
FBoxB
FBoxXor
LBoxW
LBoxG1
LBoxG2
LBoxB
LBoxXor
SetNUsrKeyOK
ClrNUsrKeyOK
NonUsrKeyOK?
HISTON?
SetNAppKeyOK
DoStdKeys?
SetDoStdKeys
SetAppSuspOK
ClrAppSuspOK
SetBadPOLUI
AppMode?
SetAppMode
ClrAppMode
UNDO_ON?
UNDO_ON
UNDO_OFF
NOBLINK
AlgEntry?
SetAlgEntry
ClrAlgEntry
TogInsert
Page
93
93
93
94
93
93
93
94
94
95
94
94
94
94
94
94
94
94
94
94
94
94
94
94
94
208
208
208
224
224
224
224
224
224
224
224
179
278
278
278
302
Addr.
25790
25795
2579A
257A2
257BE
257E2
2580E
25845
25863
25877
25886
2588B
25890
2589A
2589F
258B3
258C7
258EF
25908
2590D
2593F
25949
2594E
25967
2597B
25980
25E67
25E68
25E69
25E6A
25E6B
25E6C
25E6D
25E6E
25E6F
25E70
25E70
25E71
25E72
25E73
25E74
25E75
25E76
25E77
25E78
25E79
25E79
25E7A
Name
INSERT?
INSERT_MODE
REPLACE_MODE
EditLExists?
ClrNewEditL
NoIgnoreAlm
SetRebuild
MenuDef@
MenuRowAct!
LabelDef!
DoLabel
MenuKeyNS!
MenuKeyNS@
DoMenuKeyNS
MenuKeyLS!
MenuKeyRS!
ReviewKey!
ExitAction!
LastMenuDef!
LastMenuDef@
KeyOb0
KeyOb!
KeyOb@
GetUserKeys
CtlAlarm!
CtlAlarm@
!*triand
!*trior
%+SWAP
'DoBadKey
'DoBadKeyT
1A/LockA
1stkdecomp$w
2DropBadKey
>Review$
?ATTNQUIT
?ATTN_QUIT
?BlinkCursor
?CaseKeyDef
?CaseRomptr@
?ClrAlg
?ClrAlgSetPr
?Key>UKeyOb
?OKINALG
?PURGE_HERE
XEQSTOID
?STO_HERE
ALARMxcp
Page
302
302
300
288
289
289
290
293, 95
290
290
293
290
290
291
291
289
289
208
50
50
31
130
130
51
207
52
207
207
179
142
142
278
278
201
167
167
167
2557E – 25EDC
Addr.
25E7B
25E7C
25E7D
25E7E
25E7F
25E80
25E81
25E82
25E83
25E84
25E85
25E86
25E87
25E88
25E89
25E8A
25E8B
25E8C
25E8D
25E8E
25E8F
25E90
25E91
25E92
25E93
25E94
25E95
25E96
25E97
25E98
25E99
25E9A
25E9B
25E9C
25E9D
25E9E
25E9F
25EA0
25EA1
25EA2
25EA3
25EA6
25EA7
25EA8
25EA9
25EAA
25EAB
25EAC
Name
ALGeq?
AND$
ATTNxcp
BLANKIT
Box/StdLabel
Box/StdLbl:
C%1/
C%>%%
C%>%%SWAP
C%ABS
C%ACOS
C%ACOSH
C%ALOG
C%ARG
C%ASIN
C%ASINH
C%ATAN
C%ATANH
C%COS
C%COSH
C%CˆC
C%CˆR
C%EXP
C%LN
C%LOG
C%RˆC
C%SGN
C%SIN
C%SINH
C%SQRT
C%TAN
C%TANH
C>Im%
C>Re%
CK0ATTNABORT
CK1NoBlame
CKREF
COERCE$22
CREATEDIR
CRUNCH
CRUNCHNoBlame
CheckMenuRow
Ck&DecKeyLoc
Ck&Freeze
CodePl>%rc.p
DECOMP$
DISPROW1*
DISPROW2*
561
Page
49
277
95
95
37
37
37
37
38
38
38
38
38
38
38
38
38
38
37
37
38
38
38
37
37
38
38
37
38
38
37
37
207
197
171
47
168
86
293
205
205
53
281
281
Addr.
25EAD
25EAE
25EAF
25EB0
25EB1
25EB2
25EB3
25EB4
25EB5
25EB6
25EB7
25EB8
25EB9
25EBA
25EBB
25EBC
25EBD
25EBE
25EBF
25EC0
25EC1
25EC2
25EC3
25EC4
25EC5
25EC6
25EC7
25EC8
25EC9
25ECA
25ECB
25ECC
25ECD
25ECE
25ECF
25ED0
25ED1
25ED2
25ED3
25ED4
25ED5
25ED6
25ED7
25ED8
25ED9
25EDA
25EDB
25EDC
Name
DISPSTATUS2
DO#EXIT
DO$EXIT
DO%EXIT
DO>STR
DOBEEP
DOCHR
DODISP
DORCLE
DOSTOE
DOSTR>
DOTVARS%
DOVARS
DPRADIX?
DUPGROBDIM
Disp5x7
DispVarsUtil
Do1st/2nd+:
DoBadKey
DoCAlarmKey
DoDelim
DoDelims
DoFirstRow
DoHere:
DoKeyOb
DoMenuKey
DoNameKeyLRS
DoNameKeyRS
DoNextRow
DoPlotMenu
DoPrevRow
DoSolvrMenu
DropBadKey
EDITDECOMP$
EQUATION
EVALCRUNCH
Echo2Macros
EditMenu
EqList?
FlashMsg
GBUFFGROBDIM
GETKEY
GETKEY*
GROB>GDISP
GetKeyOb
GetMenu%
GetNextToken
H/W>KeyCode
Page
282
156
156
156
53
178
46
281
318
318
50
168
168
178
90
282
278
207
302
302
294
168
206
291
207
53
318
311
73
282
273
206
206
91
206
289
50
205
562
Addr.
25EDD
25EDE
25EDF
25EE0
25EE1
25EE2
25EE3
25EE4
25EE5
25EE6
25EE7
25EE8
25EE9
25EEA
25EEB
25EEC
25EED
25EEE
25EEF
25EF0
25EF1
25EF2
25EF3
25EF4
25EF5
25EF6
25EF7
25EF8
25EFA
25EFB
25EFC
25EFD
25EFE
25EFF
25F00
25F01
25F02
25F03
25F04
25F05
25F06
25F07
25F08
25F09
25F0A
25F0B
25F0C
25F0D
G. Entries sorted by Address
Name
H/WKey>KeyOb
HARDHEIGHT
ImmedEntry?
InitMenu
InitMenu%
InitTrack:
KEYINBUFFER?
KeepUnit
Key>StdKeyOb
Key>U/SKeyOb
LastNonNull
LoadTouchTbl
LockAlpha
ModifierKey?
NEXTLIBBAK
NULL$TEMP
NoAttn?Semi
NoEdit?case
NoExitAction
OR$
PATHDIR
PrevNonNull
RAD?
RECLAIMDISP
REPEATER
REPEATERCH
SAFE@_HERE
SEP$NL
SLEEPxcp
SaveLastMenu
SetKeysNS
SetSomeRow
SetThisRow
SolvMenuInit
StartMenu
Std/BoxLabel
StdMenuKeyLS
StdMenuKeyNS
SuspendOK?
TurnOffKey
UART?
UARTxcp
UnLockAlpha
UserKeys?
VLM
WaitForKey
XEQStoKey
XOR$
Page
273
278
291
291
289
206
82
208
208
168
292
278
205
99
46
207
146
291
50
169
168
178
273
166
48
289
290
293
292
293
292
95
290
290
224
278
208
206
167
50
Addr.
25F0E
25F0F
25F0F
25F10
25F11
25F12
25F13
25F14
25F15
25F16
25F17
25F18
25F19
25F1A
25F1B
25F1C
25F1D
25F1E
25F1F
25F20
25F21
25F22
25F23
25F24
25F25
25F29
25F2A
25F2B
25F2C
25F2D
25F63
25F68
25F6D
25F72
25F77
25F7C
25F81
25F86
25F8B
25F90
25F95
25F9A
25F9A
25F9F
25FA4
25FA9
25FAE
25FB3
Name
XYGROBDISP
a%>$
a%>$,
ederr
editdecomp$w
sstDISP
stkdecomp$w
XEQPGDIR
>FONT
DISP_LINE
GetMetaVStackDROP
GetVStack
PopMetaVStack
PopMetaVStackDROP
PopVStack
PopVStackAbove
PushMetaVStack&Drop
PushVStack
PushVStack&Clear
PushVStack&Keep
PushVStack&KeepDROP
RestoreSysFlags
SaveSysFlags
RIGHT$3x6
CKNNOLASTWD
EvalNoCK:
Keyword?
CHECKMENU
Find1stT.1
TogInsertKey
!REDIMUSER
!REDIMTEMP
realPAcode
#:>$
#>$
$>GROB
$>grob
$>GROBCR
$>grobCR
>LANGUAGE
LANGUAGE>
0LastRomWrd!
0LASTOWDOB!
?ACCPTR>
ABUFF
ALARM?
ATTN?
DISPN
Page
91
46
46
158
53
280
51
168
283
161
161
162
160
160
162
161
160
160
162
162
176
176
96
197
198
293
46
46
96
96
96
96
179
179
197
197
272
174
207
281
25EDD – 26170
Addr.
25FB3
25FB8
25FB8
25FB8
25FBD
25FBD
25FBD
25FC2
25FC2
25FC2
25FC7
25FC7
25FC7
25FCC
25FD1
25FD6
25FDB
25FE0
25FE5
25FEA
25FEF
25FF4
25FF9
25FFE
26003
26008
2600D
26012
26017
2601C
26021
2602B
26030
26035
2603A
2603F
26044
26049
2604E
26053
26058
2605D
26062
26067
2606C
26071
26076
2607B
Name
BIGDISPN
BIGDISPROW1
DISPROW1
DISP@01
DISPROW2
DISP@09
BIGDISPROW2
DISP@17
BIGDISPROW3
DISPROW3
DISPROW4
BIGDISPROW4
DISP@25
DISPROW5
DISPROW7
DISPROW8
DISPROW9
DISPROW10
DISPLASTROW
DISPLASTROWBUT1
CENTER$3x5
CENTER$5x7
LEFT$3x5
LEFT$5x7
LEFT$5x7Arrow
LEFT$3x5Arrow
LEFT$5x7CRArrow
LEFT$3x5CRArrow
LEFT$5x7CR
LEFT$3x5CR
CLEARVDISP
COERCEFLAG
CURSOR_OFF
ClrAlphaAnn
ClrLeftAnn
ClrRightAnn
ClrSysFlag
ClrUserFlag
DOENG
DOFIX
DOSCI
DOSTD
DropSysObs
ERRBEEP
ERASE&LEFT$5x7
ERASE&LEFT$3x5
GBUFF
GROB!
563
Page
281
281
281
281
281
281
281
281
281
281
281
281
281
281
281
281
281
281
282
282
96
97
97
97
97
97
97
97
97
97
277
135
300
278
277
277
175
175
177
177
177
177
156
97
97
272
90
Addr.
26080
26085
2608A
2608F
26094
26099
2609E
260A3
260A8
260AD
260B2
260B7
260BC
260C1
260C6
260CB
260D0
260D5
260DA
260DF
260E4
260E9
260EE
260F3
260F8
260FD
26102
26107
2610C
26111
26116
2611B
26120
26125
2612A
2612F
26134
26139
2613E
26143
26148
2614D
26152
26157
26161
26166
2616B
26170
Name
GROB!ZERO
GROBDIM
GsstFIN
HARDBUFF
HARDBUFF2
HEIGHTENGROB
INVGROB
KILLGDISP
LastMenuRow!
LastMenuRow@
MAKEGROB
MenuRow!
MenuRow@
NOHALTERR
NOTLISTcase
NOTROMPcase
NOTSECOcase
PIXOFF3
PIXON3
PIXOFF
PIXON
PIXON?3
PIXON?
PULLCMPEL
PULLREALEL
PUTCMPEL
PUTEL
PUTREALEL
PrgmEntry?
RDUP
SETCIRCERR
SETCURSOR
SLOW
VERYSLOW
VERYVERYSLOW
SUBGROB
SYNTAXERR
SetAlphaAnn
SetLeftAnn
SetPrgmEntry
SetRightAnn
SetSysFlag
SetUserFlag
SystemLevel?
TIMEOUT?
TOADISP
TOGDISP
TestSysFlag
Page
91
90
273
273
273
91
273
288
289
91
288
288
157
145
145
145
91
91
91
91
92
91
64
64
65
65
65
278
129
157
172
172
172
91
157
278
277
278
277
175
175
272
272
175
564
Addr.
26175
2617F
26184
26189
2618E
26193
26198
2619D
261A2
261A7
261AC
261B1
261B6
261BB
261C0
261C5
261CA
261CA
261CF
261D4
261D9
261DE
261E3
261E8
261ED
261F2
261F7
261FC
26201
26206
2620B
26210
26215
2621A
2621F
26224
26229
2622E
26233
26238
2623D
26242
26242
26247
2624C
26251
26256
2625B
G. Entries sorted by Address
Name
TestUserFlag
WINDOWCORNER
WINDOWDOWN
WINDOWLEFT
WINDOWRIGHT
WINDOWUP
WINDOWXY
addtics
rstfmt1
savefmt1
setbeep
stackitw
subpdcdptch
tok8trior
CLCD10
CLEARLCD
FLUSHKEYS
FLUSH
%%>C%
C%%0=
C%%>C%
C%%CHS
C%%CONJ
C%0=
C%CHS
C%CONJ
DISPROW6
Re>C%
nextsym'R
tok8cktrior
>MINIFONT
CHECK_SCAN_FONT
DropVStack
FONT>
FSCANFONT
GetElemBotVStack
GetElemTopVStack
SetVStackProtectWord
GetVStackProtectWord
GetFontCmdHeight
GetFontHeight
GetFontStkHeight
StackFontHeight
GetHeader
GetMetaVStack
InitVirtualStack
INITMKFONT
MINIFONT>
Page
175
279
279
279
279
279
279
178
177
178
50
277
277
205
205
37
38
37
38
38
38
37
37
281
37
50
283
162
283
163
163
164
164
283
283
273
162
283
Addr.
26260
26265
2626A
2626F
26274
26279
2627E
26283
26288
2628D
26292
26297
2629C
262A1
262A6
262AB
262B0
262B5
262BA
262BF
262C4
262C9
262CE
262D8
262DD
262E2
262E7
262EC
262F1
262F6
262FB
26300
26305
2630A
2630F
26314
26319
2631E
26323
26328
2632D
2639B
263D2
26459
2645E
2649F
264CC
264D1
Name
nDISPSTACK
PushMetaVStack
PutElemBotVStack
PutElemTopVStack
RCL_NB_AFF_LGN
RCL_NB_AFF_LGNSTK
SCANFONT
SetHeader
StackLineHeight
STO_ML_DISP_SIZE
CK0NOLASTWD
CK1NOLASTWD
CK2NOLASTWD
CK3NOLASTWD
CK4NOLASTWD
CK5NOLASTWD
CK0
CK1
CK2
CK3
CK4
CK5
CKN
SETSIZEERR
SETTYPEERR
SETSTACKERR
SETNONEXTERR
%ABSCOERCE
COERCE
UNCOERCE
COMPEVAL
CK1&Dispatch
CK2&Dispatch
CK3&Dispatch
CK4&Dispatch
CK5&Dispatch
EvalNoCK
CK&DISPATCH0
CK&DISPATCH2
CK&DISPATCH1
#*OVF
MATATLOOP
!MATTRNnc
setStdWid
setStdEditWid
ClrBusyAnn
FIRSTC@
SETFIRSTC_0
Page
275
161
163
163
273
283
196
197
197
197
197
197
196
196
196
196
196
196
196
158
157
157
158
22
22
31
128
197
197
197
197
197
198
197
197
197
23
51
51
278
300
26175 – 27E9B
Addr.
264DB
2657B
26580
26585
2658A
26594
265B7
265BC
265C1
265C6
265CB
265D0
26F36
26F4A
270EE
27103
27118
2712D
27142
27155
2716D
27195
271F4
27208
272D9
272F3
272FE
275C6
275EE
275FD
27620
2768E
27698
276AC
276B6
276C0
276CA
276D4
276DE
276E8
276F2
276FC
27706
27710
2771A
27724
2772E
27738
Name
FIRSTC+
CURSOR_OFF0
CURSOR_OFF+
CURSOR@
CURSOR+
CURSOR_PART
Z>
Z<
Z=
Z<>
Z>=
Z<=
%1+
%1%1.8
%80
%.1
%.15
LAMLNAME
'IDX
StdIOPAR
CRLF$
2NULLLAM{}
3NULLLAM{}
tok->
ID_EQ
NULLID
TakeOver
Modifier
MenuKey
MenuMaker
#60E
#60F
#611
#612
#613
#614
#615
#616
#617
#622
#623
#624
#628
#629
#62A
#62B
#62C
565
Page
300
300
334
334
334
334
334
334
31
31
28
29
28
116
181
43
119
119
44
116
116
291
291
293
291
18
18
18
18
18
18
18
18
18
18
19
19
19
19
19
19
19
Addr.
27742
2774C
27756
27760
2776A
27774
2777E
27788
27792
2779C
277A6
277B0
277BA
277C4
277CE
277D8
277E2
277EC
277F6
27800
2780A
27814
2781E
27828
27832
2783C
27846
27878
27882
27937
27A3A
27A89
27AA3
27B43
27B6B
27B7F
27C33
27D3F
27D5D
27D7B
27DBF
27DE4
27E09
27E2E
27E5D
27E72
27E87
27E9B
Name
#62D
#A01
#A02
#A04
#A05
#A06
#12F
#62E
#618
#619
#61A
#61B
#61C
#61D
#61E
#61F
#620
#621
#605
#606
#607
#608
#609
#60A
#60B
#60C
#60D
#800
Attn#
ID_SIGMADAT
StdPRTPAR
%%2PI
NULLGROB
'IDFUNCTION
'IDPOLAR
'IDPARAMETER
ExitFcn
CROSSGROB
MARKGROB
StdLabelGrob
C%-1
C%0
C%1
C%%1
%100
nohalt
TrueTrue
failed
Page
19
19
19
19
19
19
17
19
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
19
19
116
30
90
131
131
131
90
90
90
36
36
36
36
29
224
135
136
566
Addr.
27EAF
27EFB
27F47
27F9A
27FED
28001
28071
28071
28085
28099
280AD
280C1
280F8
2812F
28143
28187
281D5
28211
28225
2825E
282CC
283E8
283FC
286E7
28989
28ACE
293A3
293F8
2962A
2963E
29693
296A7
2973B
29754
29786
29821
298C0
29972
29986
29A5D
29A8F
29B12
29CB9
29D18
29D6A
29E29
29E67
29E99
G. Entries sorted by Address
Name
<SkipKey
>SkipKey
<DelKey
>DelKey
NullMenuKey
ROT#1+UNROT
pull
#1-SWAP
pullrev
SWAP#1+SWAP
SWAP#1-SWAP
ORDERXY#
ORDERXY%
SWAPTRUE
NDUPN
reversym
#1-UNROT
NDROPFALSE
9UNROLL
2NELCOMPDROP
DROP%0
FalseFalse
ISTOP-INDEX
symcomp
SWAPDROP#1DROP?symcomp
?symcomp
P{}N
RDROPFALSE
psh&
psh1top&
top&
pshtop&
pullpsh1&
'RSWAP#1+
psh1&
psh1&rev
pshzer
pshzerpsharg
psh
roll2ND
unroll2ND
uncrunch
ONE{}N
delimcase
ngsizecase
nultrior
tok=casedrop
Page
314
314
314
314
291
24
24, 77
24, 77
77
24
24
92
92
136
106
107
24
75, 136
109
68
31
136
152
86
24
86
86
71
136
76
77
76
76
77
24
77
77
77
88
76
76
76
87
72
50
145
Addr.
29ED0
29EE9
29F25
29F35
29F55
29F75
2A055
2A065
2A085
2A095
2A0A5
2A0B5
2A145
2A158
2A4FC
2A5CA
2A7A7
2A7F7
2A842
2A85D
2A878
2A893
2A8AE
2A8C9
2A8E4
2A904
2A924
2A944
2A964
2A984
2A9A4
2A9C4
2A9E9
2AA43
2AA70
2AAE0
2AB69
2ABD7
2ABF0
2AC0E
2AC72
2ACA9
2ACB0
2AD81
2ADBD
2ADE0
2AE32
2AF37
Name
'Rapndit
DaDGNTc
AppDisplay!
AppDisplay@
AppKeys!
AppKeys0
AppExitCond!
AppExitCond@
Clipboard!
Clipboard@
Clipboard0
Clipboard?
AppError!
AppError@
WaitTbz0
SUB$1#
CkSecoType
DispTimeReq?
Decomp1Line
DecompEdit
Decomp#Line
Decomp#Disp
DecompEcho
DecompStd1Line
DecompStd1Line32
RPNDecomp1Line
RPNDecompEdit
RPNDecomp#Line
RPNDecomp#Disp
RPNDecompEcho
RPNDecompStd1Line
RPNDecompStd1Line32
RunRPN:
AlgDecomp
CASEVAL
Page
131
223
223
223
223
223
223
307
307
307
307
223
223
48
274
52
53
52
52
54
52
52
52
53
53
52
54
52
52
198
53
SimplifyExpression
RunInApprox
RunSafeFlagsNoError
RunSafeFlags
DoRunSafe
need'case
addrTEMPTOP
?TogU/LCase
EQUALcasedrop
nonopcase
numb1stcase
M-1stcasechs
AEQ1stcase
176
177
176
177
145
145
145
143
143
27EAF – 2C29F
Addr.
2AFFB
2B01B
2B06A
2B083
2B0CC
2B0EF
2B11C
2B149
2B15D
2B176
2B1A3
2B1C1
2B1DF
2B20C
2B22A
2B25C
2B289
2B2A7
2B2C5
2B2F2
2B31A
2B351
2B3A6
2B3AB
2B3B7
2B3FD
2B42A
2B475
2B4AC
2B542
2B628
2B682
2B6B4
2B6CD
2B709
2B74F
2B7CC
2B8BE
2B8E6
2B90B
2BAB3
2BB21
2BB3A
2BB53
2BCA2
2BD8C
2BE36
2BF1C
Name
MEQ1stcase
MEQopscase
AEQopscase
Mid1stcase
idntcase
idntlamcase
num0=case
%0=case
C%0=case
num1=case
%1=case
C%1=case
num2=case
%2=case
C%2=case
num-1=case
%-1=case
C%-1=case
NOTcaseFALSE
CallEditCmd:
Roll&Do:
Rcl&Do:
1NULLLAM{}
NULLLAM
4NULLLAM{}
%IP>#
PUTLIST
ParOuterLoop
POLSaveUI
POLSetUI
POLKeyUI
POLErrorTrap
POLResUI&Err
POLRestoreUI
InitPOLVars
StartupProc
addrClkOnNib
OBJ>R
R>OBJ
'DROPFALSE
COLAthexFCN
sscknum2
sncknum2
nscknum2
cknumdsptch1
SYMBN:
ALGcase
CkEQUtil
567
Page
143
143
143
143
145
145
142
142
142
143
142
142
143
143
143
143
143
143
140
311
119
116
119
31
72
223
223
223
223
223
223
129
129
130
87
87
87
87
86
146
Addr.
2BF3A
2BF53
2BF6C
2BF85
2C039
2C044
2C04F
2C05A
2C065
2C07B
2C086
2C091
2C09C
2C0A7
2C0ED
2C10B
2C116
2C121
2C13A
2C145
2C150
2C15B
2C166
2C171
2C17C
2C187
2C192
2C1B0
2C1CE
2C1D9
2C1E4
2C1EF
2C1FA
2C205
2C210
2C21B
2C226
2C231
2C23C
2C247
2C252
2C25D
2C268
2C273
2C27E
2C289
2C294
2C29F
Name
DA1OK?NOTIT
DA2aOK?NOTIT
DA2bOK?NOTIT
DA3OK?NOTIT
nWHEREIFTE
nWHEREDER
nWHEREINTG
nWHERESUM
nWHEREWHERE
D/D*
D/D+
D/DD/D/
derquot
derprod1
D/D=
D/DABS
easyabs
D/DACOS
D/DACOSH
D/DALOG
D/DARG
D/DASIN
D/DASINH
D/DATAN
D/DATANH
D/DCHS
D/DCONJ
D/DCOS
D/DCOSH
D/DEXP
D/DINV
D/DLN
D/DLNP1
D/DLOG
D/DIFTE
D/DSIN
D/DSINH
D/DSQ
D/DSQRT
D/DTAN
D/DTANH
D/Dˆ
D/DˆX
D/DˆY
D/DDER
D/DWHERE
D/DINTEGRAL
Page
275
275
275
275
568
Addr.
2C2AA
2C2B5
2C2C0
2C2CB
2C2D6
2C2F9
2C305
2C311
2C341
2C371
2C37D
2C388
2C393
2C4D2
2D74F
2D759
2D763
2D76D
2D777
2D848
2D86D
2D8AD
2D949
2D95D
2D971
2D985
2D999
2D9CB
2D9EE
2DA11
2DA2B
2DCB5
2DD27
2DDD5
2DE26
2DEBB
2DFCC
2DFE0
2DFF4
2E0D5
2E0F3
2E107
2E11B
2E166
2E189
2E1EB
2E24D
2E25C
G. Entries sorted by Address
Name
D/DSUM
D/DAPPLY
nCustomMenu
nCOLCTQUOTE
SPLITWHERE
DispStsBound
DispStatus
?DispStatus
?DispStack
DoInputForm
PTYPE>PINFO
MOVEVAR
COPYVAR
#AAA0
um*
um/
umˆ
umP
umEND
tok_g
tok_m
tok_s
UMSIGN
UMIP
UMFP
UMFLOOR
UMCEIL
UMRND
UMTRC
cfF
cfC
FLOAT
Day>Date
getBPOFF
mpop1%
DAY#
?DispMenu
DispMenu
DispMenu.1
Grob>Menu
Str>Menu
Seco>Menu
Id>Menu
MakeStdLabel
MakeBoxLabel
MakeDirLabel
MakeInvLabel
InvLabelGrob
Page
293
274
274
274
274
257
20
81
81
81
81
81
44
44
44
83
83
83
83
83
83
83
30
30
292, 274
292, 274
292, 274
293, 95
293, 95
293, 95
293, 95
95
95
95
95
90
Addr.
2E2AA
2EE5A
2EE5B
2EE5C
2EE5D
2EE5E
2EE5F
2EE60
2EE61
2EE62
2EE63
2EE64
2EE65
2EE65
2EE66
2EE67
2EE68
2EE69
2EE6A
2EE6B
2EE6C
2EE6D
2EE6E
2EE6F
2EE70
2EE71
2EE72
2EE73
2EE74
2EE75
2EE76
2EE77
2EE78
2EE79
2EE7A
2EE7B
2EE7C
2EE7D
2EE7E
2EE7F
2EE80
2EE81
2EE8A
2EE8B
2EE8D
2EE8E
2EE8F
2EE90
Name
MakeLabel
DispEditLine
DispTime?
BlankDA12
?FlashAlert
SysErrorTrap
Page
293, 96
274
277
178
SysErrorTrapConfirm
DoWarning
FlashWarning
DA1OK?
DA3OK?
SetDAsTemp
SetDA12a3NoCh
SetDA12a3NCh
DA2aLess1OK?
SetDA1Valid
SetDA2bValid
SetDA1Temp
SetDA2bTemp
SetDA3Temp
SetDA2aEcho
ClrDAsOK
ClrDA3OK
SetDA12NoCh
SetDA13NoCh
SetDA12Temp
SetDA1NoCh
SetDA2aNoCh
ClrDA1Bad
ClrDA2aBad
SetDA2bNoCh
SetDA3NoCh
SetDA1Bad
SetDA2aBad
SetDA2bBad
SetDA3Bad
SetDAsNoCh
ClrDA1IsStat
DA2bIsEdL?
SetDA2bIsEdL
ClrDA2bIsEdL
ClrDA2bNoCh
SetDA2aTemp
MENoP&FixDA1
ClrDA1OK
ClrDA2aOK
ClrDA2bOK
ClrDA2OK
282
282
275
275
275
276
276
275
275
275
275
275
275
276
275
275
276
276
275
276
276
276
276
276
276
276
276
276
276
276
273
276
276
276
276
275
275
275
275
275
2C2AA – 2EF59
Addr.
2EE91
2EE93
2EE94
2EEA0
2EEA5
2EEA6
2EEA7
2EEAB
2EEAC
2EEAE
2EEAF
2EEB0
2EEB1
2EEB2
2EEB3
2EEB4
2EEB5
2EEB7
2EEBB
2EEBC
2EEBD
2EEBE
2EEBF
2EEC0
2EEC1
2EEC2
2EEC3
2EEC4
2EEC5
2EEC6
2EEC7
2EEC8
2EEC9
2EECA
2EECB
2EECC
2EECD
2EECE
2EECF
2EED0
2EED1
2EED2
2EED3
2EED4
2EED5
2EED6
2EED7
2EED7
Name
SetDA2Valid
SetDA2NoCh
SetDA23NoCh
SetDA3ValidF
SetDA2bTempF
DA2bTemp?
ClrDA2bTemp
DA1IsStatus?
SetDA1IsStat
SetNoRollDA2
ClrNoRollDA2
DA1Bad?
DA2aBad?
DA2bBad?
ClrDA2bBad
DA3Bad?
ClrDA3Bad
DA2bNoCh?
SENDLIST
GETNAME
DOFINISH
DOPKT
GetIOPAR
DOOPENIO
DOBAUD
DOPARITY
DOTRANSIO
DOKERRM
DOBUFLEN
DOSBRK
DOSRECV
FLUSHRSBUF
CLOSEUART
docr
DOCR
DOPRLCD
DODELAY
SetEcma94
TOD
DATE
DDAYS
DATE+DAYS
TIMESTR
Clr8
Clr8-15
HBUFF_X_Y
SysTime
CLKTICKS
569
Page
275
276
276
275
275
275
276
276
276
276
276
276
276
276
276
276
276
180
180
180
180
181
180
180
180
180
180
180
180
180
181
181
172
173
173
173
49, 173
277
277
279
173
173
Addr.
2EED9
2EEDA
2EEDB
2EEDC
2EEDD
2EEDE
2EEDF
2EEE0
2EEE1
2EEE2
2EEE3
2EEE4
2EEE5
2EEE6
2EEE7
2EEE8
2EEE9
2EEEA
2EEEB
2EEEC
2EEED
2EEEE
2EEEF
2EEF0
2EEF1
2EEF2
2EEF3
2EEF4
2EEF5
2EEF6
2EEF7
2EEF8
2EEF9
2EEFA
2EEFB
2EEFC
2EEFD
2EEFE
2EEFF
2EF01
2EF02
2EF03
2EF04
2EF05
2EF06
2EF07
2EF26
2EF59
Name
SYMBNUMSOLVE
STATCLST
STATSADD%
STATN
STATSMAX
STATMEAN
STATSMIN
STATSTDEV
STATTOT
STATVAR
EchoChrKey
Echo$Key
EditLevel1
InitEd&Modes
InitEdLine
InitEdModes
EditString
CURSOR_END?
EDITLINE$
EDITPARTS
NoEditLine?
APPprompt1!
AUTOSCALE
PromptIdUtil
PUTSCALE
PUTINDEP
PUTINDEPLIST
PUTRES
GETPTYPE
PUTPTYPE
VSCALE
HSCALE
DOERASE
CROSS_HAIRS
CROSS_OFF
MENUOFF
MENUOFF?
CURRENTMARK?
DispCoord1
DOPX>C
DOC>PX
DOLCD>
DO>LCD
DOCLLCD
CKPICT
nmetasyms
SYMSHOW
MENP&FixDA12
Page
66
66
66
66
66
66
66
66
66
302
311
314
303, 314
314
310
300
300
300
318
48
318
317
317
317
317
317
273
273
273
282
318
318
92
92
277
316
199
88
570
Addr.
2EF5A
2EF5E
2EF5F
2EF60
2EF61
2EF62
2EF66
2EF67
2EF68
2EF69
2EF6A
2EF6B
2EF6C
2EF6D
2EF6E
2EF6F
2EF70
2EF71
2EF72
2EF73
2EF74
2EF75
2EF76
2EF77
2EF78
2EF79
2EF7A
2EF7B
2EF7C
2EF7D
2EF7E
2EF7F
2EF80
2EF81
2EF82
2EF83
2EF84
2EF85
2EF86
2EF87
2EF88
2EF8A
2EF8B
2EF8C
2EF8D
2EF8E
2EF8F
2EF90
G. Entries sorted by Address
Name
apndvarlst
BlankDA1
InputLine
DOGRAPHIC
WINDOW#
palparse
SysMenuCheck
SysDisplay
ClrDouseAlm
EvalParsed
Parse.1
Parse.2
AtUserStack
GetLastEdit
ParseFail
DispBadToken
ParseFail2
DispBadToken2
CacheStack
?Space/Go>
CMD_PLUS
AddTrailingSpace
AddLeadingSpace
CMD_PAGEL
CMD_PAGER
CMD_PAGEU
CMD_PAGED
CMD_BAK
CMD_NXT
CMD_DEB_LINE
CMD_END_LINE
CMD_UP
CMD_DOWN
CMD_DROP
CMD_DEL
CMD_STO_DEBUT
CMD_STO_FIN
RCL_CMD_DEB
RCL_CMD_FIN
RCL_CMD_POS
CMD_CUT
CMD_COPY
STO_CURS_POS
STO_CURS_POS2
STO_CURS_POS3
STO_CURS_POS4
STO_CURS_POS_VIS
CAL_CURS_POS_VIS
Page
73
277
212
318
281
50
292
274
197
51
51
311
301
312
312
305
305
305
305
305
305
305
305
305
305
302
302
306
306
306
306
300
306
306
304
304
304
304
304
301
Addr.
2EF91
2EF92
2EF93
2EF94
2EF95
2EF96
2EF97
2EF98
2EF99
2EF9A
2EF9F
2EFA0
2EFA1
2EFA2
2EFA3
2EFA4
2EFA5
2EFA6
2EFA7
2EFA8
2EFAA
2EFAC
2EFAD
2EFAE
2EFAF
2EFB0
2EFB1
2EFB2
2EFB3
2EFB4
2EFB5
2EFB6
2EFB7
2EFB8
2EFB9
2EFBA
2EFBC
2EFBD
2EFBE
2EFBF
2EFC0
2EFC1
2EFC2
2EFC3
2EFC4
2EFC5
2EFC6
2EFC7
Name
CAL_CURS_POS
XLINE_SIZE?
VERIF_SELECTION
PASTE.EXT
DEL_CMD
NO_AFFCMD
InsertEcho
SetDA2aValid
SetDA3Valid
CommandLineHeight
LINEON
LINEOFF
TOGLINE
LINEON3
LINEOFF3
TOGLINE3
DOHEX
DOBIN
DOOCT
DODEC
dostws
bitAND
bitOR
bitXOR
bitNOT
bitSL
bitSLB
bitSR
bitSRB
bitRR
bitRRB
bitRL
bitRLB
bitASR
bit+
bitbit*
bit/
WORDSIZE
BASE
HXS>$
hxs>$
bit%#/
bit#%/
bit%#*
bit#%*
bit%#bit#%-
Page
301
314
306
307
303
312
302
275
275
312
92
92
92
92
92
92
177
177
177
177
57
58
58
58
58
58
58
58
58
58
58
58
58
58
57
57
57
57
57
177
46
46
57
58
57
57
57
57
2EF5A – 2F162
Addr.
2EFC8
2EFC9
2EFCA
2EFCB
2EFCC
2EFCD
2EFCE
2EFCF
2EFDB
2EFEC
2F002
2F003
2F004
2F007
2F008
2F019
2F031
2F034
2F05E
2F062
2F063
2F064
2F066
2F073
2F075
2F076
2F07A
2F07B
2F07C
2F07D
2F07E
2F07F
2F080
2F081
2F082
2F083
2F085
2F086
2F087
2F088
2F089
2F08A
2F08B
2F08C
2F08D
2F08E
2F08F
2F090
Name
bit%#+
bit#%+
HXS>%
%>#
HXS==HXS
HXS>HXS
HXS>=HXS
HXS<HXS
GROB+
symbn
Ticks>TOD
Ticks>Date
Ticks>Rpt
getxpos
getypos
UNIT>$
TURNMENUON
TURNMENUOFF
SaveLastEdit
StoIOPAR
StoPRTPAR
Sys@
STOAPPLDATA
SWAPcompSWAP
InitSysUI
puretemp?
UM>U
U>nbr
UM#?
UM%
UM%CH
UM%T
UM*
UM+
UMUM/
UM<=?
UM<?
UM=?
UM>=?
UM>?
UMABS
UMCHS
UMCONV
UMCOS
UMMAX
UMMIN
UMSI
571
Page
57
57
31
56
58
59
59
59
90
173
173
173
82
273
273
314
181
166
86
84
82
82
83
83
83
83
83
83
83
83
83
83
83
83
83
83
83
82
83
83
83
82
Addr.
2F091
2F092
2F093
2F094
2F095
2F096
2F098
2F099
2F09A
2F0A1
2F0AC
2F0BC
2F0C5
2F0D4
2F0D5
2F0DB
2F0E6
2F0E7
2F0E8
2F0EC
2F0EE
2F0EF
2F0FE
2F0FF
2F100
2F105
2F106
2F107
2F108
2F109
2F10A
2F10D
2F10E
2F110
2F113
2F11C
2F13C
2F13D
2F13F
2F142
2F153
2F154
2F155
2F158
2F15A
2F15B
2F15E
2F162
Name
UMSIN
UMSQ
UMSQRT
UMTAN
UMU>
UMXROOT
Unbr>U
U>NCQ
TempConv
RESETDEPTH
PURGALARM%
PRINT
PLOTPREP
ILnot?
NEWINDEP
MAKEPICT#
KERMOPEN
InitIOEnv
INDEPVAR
ICMPDRPRTDRP
HXS#HXS
HXS<=HXS
GETXMAX
GETXMIN
GETYMIN
GDISPCENTER
GETINDEP
GETPMIN&MAX
GETRHS
GETXPOS
GetRes
GETRES
GETYMAX
FINDVARS
FNDALARM{}
Echo$NoChr00
DoOldMatrix
CK#DRAWLINE#3
DoNewMatrix
CLKADJ*
input$
input{}
THISCHAR
CHOOSE_INIT
CLEARMENU
Clr16
CHECKPICT
Page
83
83
83
83
82
83
82
82
82
107
174
199
91
317
71
58
59
316
316
317
318
317
317
317
317
86
302
23
92
212
212
300
293
277
316
572
Addr.
2F163
2F16D
2F177
2F178
2F179
2F17A
2F17E
2F180
2F190
2F191
2F192
2F193
2F194
2F195
2F196
2F197
2F198
2F199
2F19A
2F19B
2F19E
2F19F
2F1A1
2F1A3
2F1A5
2F1A7
2F1A8
2F1A9
2F1AB
2F1AC
2F1AD
2F1AE
2F1AF
2F1BF
2F1C6
2F205
2F215
2F216
2F217
2F218
2F219
2F21A
2F21B
2F21C
2F21D
2F21E
2F21F
2F222
G. Entries sorted by Address
Name
CHECKPVARS
Blank$
AllowPrlcdCl
ALARMS@
AdjEdModes
APPprompt2
2HXSLIST?
1REV
DcompWidth@
!DcompWidth
DoNewEqw
UobROT
CMD_PLUS2
CMD_PLUS3
RCL_CMD
RCL_CMD2
STO_CMD_MODE
RCL_CMD_MODE
ViewLevel1
OngoingText?
DispCommandLine
?DispCommandLine
ErrorHandled?
Page
316
48
174
22
30
51
51
77
301
302
300
300
301
301
310
312, 274
312, 274
SysErrorTrapAction
AskQuestion
CHARSEDIT
EditFont
EDITF
Date>hxs13
StrEdit
CharEdit
ObEdit
AlgObEdit
Decomp%Short
DROP3PICK
laMGET0
CircleB
CircleG1
CircleG2
CircleW
CircleXor
Dither
ToGray
Lift
ViewObject
ViewStrObject
ViewGrobObject
#1+ROT
282
50
173
311
311
54
109
93
93
93
93
93
95
95
280
280
280
24
Addr.
2F223
2F23E
2F244
2F24E
2F257
2F258
2F259
2F25A
2F25B
2F25C
2F25D
2F25F
2F260
2F261
2F262
2F265
2F266
2F267
2F268
2F292
2F296
2F297
2F2A3
2F2A7
2F2A9
2F2D4
2F2DA
2F2DB
2F2DC
2F2DD
2F2DE
2F2DF
2F2E0
2F2E1
2F2E2
2F2E3
2F2E4
2F2E5
2F2E6
2F2E7
2F2E8
2F2E9
2F2EA
2F2EB
2F2EC
2F2ED
2F2EE
2F2EF
Name
%>TAG
DOSTOSYSF
COERCE&CKSGN
LISTRCL
OCRC%
PICTRCL
RCLSYSF
RCLSYSF2
RCLUSERF
RCLUSERF2
SETROMPART
STOSYSF
STOSYSF2
STOUSERF
STOUSERF2
UPDIR
USER$>TAG
VARSIZE
Wait/GetKey
XEQIOBACKUP
XEQORDER
XEQPURGEPICT
XEQRCL
XEQSETLIB
XEQSHOWLS
dowait
AlgCharEdit
DOTEXTINFO
ClearSelection
DoFarBS
DoFarDel
EditSelect
ViewEditGrob
SELECT.LINE
SELECT.LINEEND
EVAL.LINE
DO>BEG
DO>END
GOTOLABEL
SELECT.FONT
DOFIND
DOREPL
DONEXT
DOREPLACE
DOREPLACE/NEXT
REPLACEALL
DO<Skip
DO>Skip
Page
61
175
22
166
179
316
175
175
176
176
175
176
176
176
169
61
179
207
168
318
166
100
88
172
312
306
303
303
309
313
307
307
309
305
306
306
313
308
308
308
308
308
309
305
305
2F163 – 2F365
Addr.
2F2F0
2F2F1
2F2F2
2F2F3
2F2F4
2F2F5
2F2F6
2F2F7
2F2F8
2F2F9
2F2FA
2F2FB
2F2FC
2F2FF
2F300
2F312
2F313
2F314
2F315
2F316
2F318
2F319
2F31A
2F31B
2F31C
2F31D
2F31E
2F31F
2F320
2F321
2F324
2F325
2F326
2F327
2F328
2F329
2F32A
2F32B
2F32C
2F32D
2F32E
2F32F
2F330
2F331
2F332
2F333
2F334
2F335
Name
DO<Del
DO>Del
FindStrInCmd
GET.W->
GET.W<PUT_FONTE
GET_CUR_FONT.EXT
PUT_STYLE
EXEC_CMD
DODEL.L
CMD_COPY.SBR
EVAL.SELECTION
REPLACEALLNOSCREEN
OpenIO
DispILPrompt
OpenUartClr
OpenUart?Clr
RCLALARM%
!#1+IF<dim-1
!#1-IF>0
1GETLAMSWP1+
ACK_INIT
APNDCRLF
BlankDA2
BlankDA2a
BOTROW
BUILDKPACKET
C%>#
CHECKHEIGHT
CkChr00
CKGROBFITS
ClrServMode
CMDSTO
convertbase
CROSSMARKON
Date>d$
DECODE
DISPCOORD2
DRAWBOX#
drax
DROPDEADTRUE
DropSysErr$
ENCODE
ENCODE1PKT
EQCURSOR?
EXCHINITPK
Extobcode
FcnUtilEnd
573
Page
303
303
308
308
308
313
312
313
309
303
307
309
309
274
174
119
47, 181
277
277
279
22
90
55
90
314
173
282
92
130
Addr.
2F336
2F337
2F338
2F339
2F33A
2F33B
2F33C
2F33D
2F33E
2F33F
2F340
2F341
2F342
2F343
2F344
2F345
2F346
2F347
2F348
2F349
2F34A
2F34B
2F34C
2F34D
2F34E
2F34F
2F350
2F351
2F352
2F353
2F354
2F355
2F356
2F357
2F358
2F359
2F35A
2F35B
2F35C
2F35D
2F35E
2F35F
2F360
2F361
2F362
2F363
2F364
2F365
Name
FindNext
FixRRP
GetChkPRTPAR
GetEqN
GetKermPkt#
GETKP
getmatchtok
GETPARAM
GETSCALE
GETSERIAL
GETYPOS
GraphicExit
GROB+#
IncrLAMPKNO
InputLAttn
InputLEnter
IOCheckReal
JUMPBOT
JUMPLEFT
JUMPRIGHT
JUMPTOP
KDispRow2
KDispStatus2
KINVISLF
KVIS
KVISLF
'LamKPSto
LASTPT?
LEFTCOL
LINECHANGE
List
MAKEPVARS
metatail
newBASE
NEWMARK
NEXTRRPOB
NEXTSTEP
NUMSOLVE
OB>BAKcode
OpenIOPrt
PLOTERR
PlotOneMore?
PREMARKON
PrintGrob
PRINTxNLF
PtoR
PUTSERIAL
PUTXMAX
Page
318
51
316
317
91
280
280
280
280
181
181
181
279
316
78
316
574
Addr.
2F366
2F367
2F368
2F369
2F36A
2F36B
2F36C
2F36D
2F36E
2F36F
2F370
2F371
2F372
2F373
2F374
2F375
2F376
2F377
2F378
2F379
2F37A
2F37B
2F37C
2F37D
2F37E
2F37F
2F380
2F381
2F382
2F383
2F384
2F385
2F386
2F387
2F388
2F389
2F38A
2F38B
2F38C
2F38D
2F38E
2F38F
2F390
2F3A9
2F3AA
2F3B3
2F458
2F937
G. Entries sorted by Address
Name
PUTXMIN
PUTYMAX
PUTYMIN
RECORDX&YC%
REMAP
RIGHTCOL
Rows8-15
SCROLLDOWN
SCROLLLEFT
SCROLLRIGHT
SCROLLUP
SENDACK
SENDEOT
SENDERROR
SENDNAK
SENDNULLACK
SENDPKT
SendSetup
SetCursor
SetDA123NoCh
SetDA2OKTemp
SetIOPARErr
SETLOOPENV
SetServMode
SORTASLOW
STOALM
SysSTO
TOD>t$
TOGGLELINE#3
TOP16
TOP8
TOPROW
TRPACKETFAIL
UARTBUFLEN
VerifyTOD
VERSTRING
WINDOWBOT?
WINDOWLEFT?
WINDOWRIGHT?
WINDOWTOP?
xnsgeneral
xsngeneral
xssgeneral
STOALLF
STOALLF2
AsnKey
SETIVLERR
%0
Page
316
317
317
279
279
279
280
280
279
304
276
275
158, 181
172
174
167
173
92
279
279
279
172
181
280
280
280
280
77
77
176
176
208
158
28
Addr.
2F94C
2F961
2F976
2F98B
2F9A0
2F9B5
2F9CA
2F9DF
2F9F4
2FA09
2FA1E
2FA33
2FA48
2FA5D
2FA72
2FA87
2FA9C
2FAB1
2FAC6
2FADB
2FAF5
2FB0A
2FB1F
2FB34
2FB49
2FB63
2FB7D
2FB97
2FBB1
2FBCB
2FBE5
2FBFF
2FC19
2FC7D
2FC92
2FCA7
2FCBC
2FCD1
2FCE6
2FCFB
2FD10
2FD25
2FD3A
2FD4F
2FD64
2FD79
2FD8E
2FDA3
Name
%1
%2
%3
%4
%5
%6
%7
%8
%9
%-1
%-2
%-3
%-4
%-5
%-6
%-7
%-8
%-9
%PI
%%PI
%MAXREAL
%-MAXREAL
%MINREAL
%-MINREAL
%%0
%%1
%%2
%%3
%%4
%%5
%%.1
%%.5
%%10
%1200
%2400
%4800
%9600
%15360
%11
%12
%13
%14
%15
%16
%17
%18
%19
%20
Page
28
28
28
28
28
28
28
28
28
28
28
28
28
28
28
28
28
28
28
30
30
28
28
28
30
30
30
30
30
30
30
30
30
29
29
29
29
29
28
28
29
29
29
29
29
29
29
29
2F366 – 30663
Addr.
2FDB8
2FDCD
2FDE2
2FDF7
2FE0C
2FE21
2FE36
2FE4B
2FE60
2FE75
2FE8A
2FE9F
2FEB4
2FEC9
2FEDE
2FF9B
2FFAC
2FFBD
2FFDB
2FFEF
3000D
30017
30040
3005E
30077
3008B
300B3
300C7
300E0
300F9
30112
30123
30145
30156
30173
30184
301A6
301BA
301CE
301E2
301F6
3020A
3025C
3026A
30275
30280
3028B
30296
Name
%21
%22
%23
%24
%25
%26
%27
%28
%29
%30
%31
%32
%33
%34
%35
%%>%
%>%%
SETDEG
SETRAD
SETGRAD
%D>R
PI/180
%R>D
%>HMS
%HMS>
%HMS+
%HMS%%MAX
%MAX
%MIN
%%0<
%0<
%%0=
%0=
%%0>
%0>
%%0<>
%0<>
%%0>=
%0>=
%%0<=
%%<
%<
%%>
%>
%%>=
%>=
%%<=
575
Page
29
29
29
29
29
29
29
29
29
29
29
29
29
29
29
31
31
178
178
178
33
30
33
172
172
172
172
34
33
33
35
35
35
35
35
35
35
35, 135
35
35
35
35
35
35
35
35
35
35
Addr.
302A1
302AC
302B7
302C2
302DB
302EB
302FB
3030B
3031B
3032E
3033A
30346
3035F
3036C
30385
303A7
303B4
303D3
303E9
303F6
3041B
3044A
3045B
3046C
3047D
30489
3049A
304D5
304E1
304F4
30507
3051A
3052D
30546
30559
3056C
3057F
30592
305A5
305C7
305DA
305F1
30602
30612
3062B
30642
30653
30663
Name
%<=
%=
%<>
%SGN
%%ABS
%ABS
%%CHS
%CHS
%MANTISSA
%%+
%%%>%%%+
%%%*
%*
%OF
%%/
%/
%T
%CH
%%ˆ
%ˆ
%NROOT
%%1/
%>%%1/
%1/
%%SQRT
%>%%SQRT
%SQRT
%%EXP
%EXP
%EXPM1
%%LN
%LN
%LOG
%%LNP1
%LNP1
%ALOG
%MOD
%SIN
%%SIN
%%SINDEG
%%SINRAD
%COS
%%COS
%%COSDEG
%%COSRAD
Page
35
35
35
32
34
32
34
32
32
33
33
31
31
31
33
31
33
34
32
33
33
34
32
33
34
32
32
34
32
32
34
32
32
34
32
32
34
32
32
32
32
34
34
34
32
34
34
34
576
Addr.
3067C
30693
306AC
306C3
306DC
306F3
3070C
30723
3073A
30746
30757
30767
30780
30799
307B2
307C5
307D8
307EB
307FE
30811
30824
30837
3084D
30860
30912
30938
3094B
3095E
30971
30984
30984
309AD
30A2F
30A66
30AAF
30BEA
30CC7
30CEB
30DC8
30E47
30E5B
30E79
30E83
30EA6
30EB0
30EDD
30F14
30F28
G. Entries sorted by Address
Name
%TAN
%%TANRAD
%ASIN
%%ASINRAD
%ACOS
%%ACOSRAD
%ATAN
%ANGLE
%%ANGLE
%>%%ANGLE
%%ANGLEDEG
%%ANGLERAD
%%SINH
%SINH
%%COSH
%COSH
%TANH
%ASINH
%ACOSH
%ATANH
%EXPONENT
%NFACT
%COMB
%PERM
%%H>HMS
%FP
%IP
%CEIL
%FLOOR
%%FLOOR
%%INT
%RAN
%RANDOMIZE
DORANDOMIZE
%FACT
%%7
%%12
%%60
%%.4
2%>%%
2%%>%
%REC>%POL
%%R>P
%POL>%REC
%%P>R
%SPH>%REC
RNDXY
TRCXY
Page
32
34
32
34
32
34
32
32
34
32
34
34
34
32
34
32
32
32
32
32
32
33
33
33
172
32
32
32
32
34
34
33
33
33
33
30
30
30
30
31
31
33
34
33
34
33
32
32
Addr.
31066
31123
31219
3125D
313D3
314CA
314E4
31518
31532
31568
315BB
317EE
31994
319C1
33107
33107
33107
33111
33111
33111
33111
3311B
3311B
3311B
33125
33125
33125
3312F
3312F
3312F
33139
33139
33139
33143
33143
33143
33143
3314D
3314D
3314D
33157
33157
33157
33161
33161
33161
3316B
3316B
Name
aMODF
aH>HMS
Y<=X
TST15
RNDC[B]
GETAB1
GETAB0
GETCD0
PUTAB0
1/X15
ADDF
SQRF
DIV2
CLRFRC
any
ZERO
BINT0
real
MEMERR
ONE
BINT1
cmp
TWO
BINT2
THREE
str
BINT3
BINT4
FOUR
arry
FIVE
list
BINT5
id
SIX
idnt
BINT6
SEVEN
BINT7
lam
seco
BINT8
EIGHT
NINE
symb
BINT9
BINT10
sym
Page
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
3067C – 3330F
Addr.
3316B
33175
33175
33175
3317F
3317F
3317F
33189
33189
33189
33193
33193
33193
33193
3319D
3319D
3319D
331A7
331A7
331A7
331B1
331B1
331B1
331B1
331BB
331BB
331C5
331C5
331CF
331CF
331D9
331D9
331E3
331E3
331ED
331ED
331F7
331F7
33201
33201
3320B
3320B
3320B
33215
33215
3321F
3321F
33229
Name
TEN
hxs
BINT11
ELEVEN
grob
TWELVE
BINT12
TAGGED
BINT13
THIRTEEN
FOURTEEN
BINT14
EXT
unitob
FIFTEEN
rompointer
BINT15
SIXTEEN
REALOB
BINT16
2REAL
REALREAL
SEVENTEEN
BINT17
BINT18
EIGHTEEN
BINT19
NINETEEN
BINT20
TWENTY
TWENTYONE
BINT21
BINT22
TWENTYTWO
BINT23
TWENTYTHREE
BINT24
TWENTYFOUR
BINT25
TWENTYFIVE
TWENTYSIX
REALSYM
BINT26
TWENTYSEVEN
BINT27
BINT28
TWENTYEIGHT
TWENTYNINE
577
Page
10
10
10
10
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
Addr.
33229
33233
33233
33233
3323D
3323D
33247
33247
33251
33251
3325B
3325B
33265
33265
3326F
3326F
33279
33279
33283
33283
3328D
3328D
33297
33297
33297
332A1
332A1
332AB
332AB
332B5
332B5
332BF
332BF
332C9
332C9
332D3
332D3
332DD
332DD
332E7
332E7
332F1
332F1
332FB
332FB
33305
33305
3330F
Name
BINT29
THIRTY
REALEXT
BINT30
THIRTYONE
BINT31
BINT32
THIRTYTWO
THIRTYTHREE
BINT33
THIRTYFOUR
BINT34
THIRTYFIVE
BINT35
TTHIRTYSIX
BINT36
THIRTYSEVEN
BINT37
THIRTYEIGHT
BINT38
BINT39
THIRTYNINE
FORTY
FOURTY
BINT40
BINT41
FORTYONE
FORTYTWO
BINT42
FORTYTHREE
BINT43
BINT44
FORTYFOUR
FORTYFIVE
BINT45
BINT46
FORTYSIX
FORTYSEVEN
BINT47
FORTYEIGHT
BINT48
FORTYNINE
BINT49
FIFTY
BINT50
BINT51
FIFTYONE
FIFTYTWO
Page
11
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
13
13
13
13
13
578
Addr.
3330F
33319
33319
33319
33319
33323
33323
3332D
3332D
33337
33337
33341
33341
3334B
3334B
33355
33355
3335F
3335F
33369
33369
33373
33373
3337D
3337D
33387
33387
33387
33387
33391
33391
3339B
3339B
333A5
333A5
333AF
333AF
333B9
333B9
333C3
333C3
333CD
333D7
333E1
333EB
333EB
333F5
333FF
G. Entries sorted by Address
Name
BINT52
STRLIST
THREEFIVE
FIFTYTHREE
BINT53
FIFTYFOUR
BINT54
BINT55
FIFTYFIVE
BINT56
FIFTYSIX
BINT57
FIFTYSEVEN
FIFTYEIGHT
BINT58
FIFTYNINE
BINT59
BINT60
SIXTY
BINT61
SIXTYONE
BINT62
SIXTYTWO
SIXTYTHREE
BINT63
YHI
SIXTYFOUR
BINT64
BINT40h
ARRYREAL
BINT65
FOURTWO
BINT66
BINT67
FOURTHREE
BINT68
SIXTYEIGHT
FOURFIVE
BINT69
BINT70
SEVENTY
BINT71
BINT72
BINT73
BINT74
SEVENTYFOUR
BINT75
BINT76
Page
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
13
14
14
14
14
14
14
14
14
14
14
14
14
14
Addr.
33409
33413
3341D
3341D
33427
33427
33431
33431
33431
3343B
3343B
33445
33445
3344F
3344F
33459
33459
33463
33463
3346D
3346D
33477
33481
3348B
33495
33495
3349F
334A9
334B3
334BD
334C7
334C7
334D1
334D1
334DB
334E5
334EF
334EF
334F9
33503
3350D
33517
33521
3352B
33535
3353F
33549
33553
Name
BINT77
BINT78
BINT79
SEVENTYNINE
EIGHTY
BINT80
LISTREAL
EIGHTYONE
BINT81
BINT82
LISTCMP
BINT83
FIVETHREE
BINT84
FIVEFOUR
BINT85
2LIST
FIVESIX
BINT86
LISTLAM
BINT87
BINT88
BINT89
BINT90
BINT91
BINT_91d
BINT92
BINT93
BINT94
BINT95
BINT_96d
BINT96
BINT97
IDREAL
BINT98
BINT99
BINT100
ONEHUNDRED
BINT101
BINT102
BINT103
BINT104
BINT105
BINT106
BINT107
BINT108
BINT109
BINT110
Page
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
3330F – 338A5
Addr.
3355D
3355D
33567
33571
3357B
33585
33585
3358F
3358F
33599
335A3
335AD
335B7
335C1
335CB
335CB
335D5
335DF
335E9
335F3
335FD
33607
33607
33611
3361B
3361B
3361B
3361B
33625
33625
33625
33625
3362F
33639
33643
3364D
33657
33661
3366B
33675
3367F
33689
33693
3369D
336A7
336B1
336BB
336C5
Name
char
BINT111
BINT112
BINT113
BINT114
BINT115
BINT_115d
BINT116
BINT_116d
BINT117
BINT118
BINT119
BINT120
BINT121
BINT122
BINT_122d
BINT123
BINT124
BINT125
BINT126
BINT127
BINT128
BINT80h
BINT129
BINT130
BINT130d
BINT_130d
XHI-1
XHI
BINT_131d
BINT131d
BINT131
#8F
SYMBREAL
#92
#9A
SYMBUNIT
backup
SYMOB
SYMREAL
#A2
#A5
SYMID
SYMLAM
#A9
SYMSYM
SYMEXT
HXSREAL
579
Page
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
Addr.
336CF
336D9
336E3
336ED
336F7
33701
3370B
33715
3371F
33729
33733
3373D
33747
33751
3375B
33765
3376F
33779
33783
3378D
33797
337A1
337AB
337B5
337BF
337C9
337D3
337DD
337E7
337F1
337FB
33805
3380F
33819
33823
3382D
33837
33841
3384B
33855
3385F
33869
33873
3387D
33887
33891
3389B
338A5
Name
2HXS
BINTC0h
2GROB
TAGGEDANY
EXTREAL
EXTSYM
2EXT
ROMPANY
BINT253
BINT255d
REALOBOB
#_102
#SyntaxErr
BINT_263d
#110
3REAL
Err#Kill
Err#NoLstStk
#NoRoomForSt
#132
REALSTRSTR
#134
#135
#136
#137
#138
#139
#13A
#13B
#13D
#13E
INTEGER337
#200
Err#NoLstArg
STRREALREAL
ARRYREALREAL
#412
#444
ARRYLISTREAL
#452
#510
#511
#550
IDREALOB
IDLISTOB
#700
#861
#862
Page
16
16
16
16
16
16
16
16
16
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
18
18
18
18
18
18
19
19
19
19
580
Addr.
338AF
338B9
338C3
338CD
338D7
338E1
338EB
338F5
338FF
33909
33913
3391D
33927
33931
3393B
33945
3394F
33959
33963
3396D
33977
33981
3398B
33995
3399F
339A9
339BE
339D3
339E8
339FD
33A12
33A27
33A3C
33A51
33A5D
33A6B
33A77
33A83
33A8F
33A9B
33AA7
33AB3
33ABF
33ACB
33AD7
33AE3
33AEF
33AFB
G. Entries sorted by Address
Name
#865
#86E
ATTNERR
#A11
#A12
#A1A
#A21
#A22
#A2A
#A61
#A62
#A65
#A6E
#AA1
#AA2
#AAA
#C06
#C07
#C08
Connecting
#C0B
#CAlarmErr
EXTOBOB
#EXITERR
MINUSONE
%e
%.5
%-.5
%10
%180
%200
%360
%400
tok]
lbrac
tok[
tok{
tok}
toksharp
tokuscore
tok$
tok&
tokESC
tok>>
tok<<
tokexponent
tokanglesign
tokSIGMA
Page
19
19
19
19
19
19
19
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
21
21
28
28
28
28
29
29
29
29
45
45
44
45
45
45
45
45
44
45
44
44
45
45
Addr.
33B07
33B13
33B39
33B45
33B55
33B55
33B61
33B79
33B85
33B91
33B9D
33BA9
33BB5
33BC1
33BCD
33BD9
33BE5
33BF1
33BFD
33C09
33C15
33C21
33C2D
33C3F
33C4D
33C59
33C65
33C71
33C7D
33C89
33C95
33CA1
33CAD
33CB9
33D2B
33D32
33D39
33D40
33D47
33D4E
33D55
33D5C
33D63
33D6A
33D71
33D78
33D7F
33D86
Name
tokWHERE
14SPACES$
NEWLINE$
$DER
tok_
SPACE$
tokUNKNOWN
tokquote
tok'
tok,
tok.
tok;
toklparen
tokrparen
tokˆ
tok*
tok/
tok+
toktok=
tokSQRT
tokDER
tokCTGROB
tokCTSTR
tok0
tok1
tok2
tok3
tok4
tok5
tok6
tok7
tok8
tok9
CHR_00
CHR_...
CHR_DblQuote
CHR_#
CHR_*
CHR_+
CHR_,
CHR_CHR_.
CHR_/
CHR_0
CHR_1
CHR_2
CHR_3
Page
45
45
43
45
43
43
45
45
44
44
44
45
45
45
45
45
45
45
44
44
45
45
45
45
44
44
45
45
45
45
45
45
44
44
41
41
41
41
41
41
41
41
41
41
41
41
41
41
338AF – 34088
Addr.
33D8D
33D94
33D9B
33DA2
33DA9
33DB0
33DB7
33DBE
33DC5
33DCC
33DD3
33DDA
33DE1
33DE8
33DEF
33DF6
33DFD
33E04
33E0B
33E12
33E19
33E20
33E27
33E2E
33E35
33E3C
33E43
33E4A
33E51
33E58
33E5F
33E66
33E6D
33E74
33E7B
33E82
33E89
33E90
33E97
33E9E
33EA5
33EAC
33EB3
33EBA
33EC1
33EC8
33ECF
33ED6
Name
CHR_4
CHR_5
CHR_6
CHR_7
CHR_8
CHR_9
CHR_:
CHR_;
CHR_<
CHR_=
CHR_>
CHR_A
CHR_B
CHR_C
CHR_D
CHR_E
CHR_F
CHR_G
CHR_H
CHR_I
CHR_J
CHR_K
CHR_L
CHR_M
CHR_N
CHR_O
CHR_P
CHR_Q
CHR_R
CHR_S
CHR_T
CHR_U
CHR_V
CHR_W
CHR_X
CHR_Y
CHR_Z
CHR_a
CHR_b
CHR_c
CHR_d
CHR_e
CHR_f
CHR_g
CHR_h
CHR_i
CHR_j
CHR_k
581
Page
41
41
41
41
41
41
41
41
41
41
41
41
41
41
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
42
Addr.
33EDD
33EE4
33EEB
33EF2
33EF9
33F00
33F07
33F0E
33F15
33F1C
33F23
33F2A
33F31
33F38
33F3F
33F46
33F4D
33F54
33F5B
33F62
33F69
33F70
33F77
33F7E
33F85
33F8C
33F93
33F9A
33FA1
33FA8
33FAF
33FB6
33FBD
33FC4
33FCB
33FD2
33FE2
33FF2
34002
34010
3401E
3402C
3403A
34048
34056
34064
34076
34088
Name
CHR_l
CHR_m
CHR_n
CHR_o
CHR_p
CHR_q
CHR_r
CHR_s
CHR_t
CHR_u
CHR_v
CHR_w
CHR_x
CHR_y
CHR_z
CHR_->
CHR_<<
CHR_>>
CHR_Angle
CHR_Deriv
CHR_Integral
CHR_LeftPar
CHR_Newline
CHR_Pi
CHR_RightPar
CHR_Sigma
CHR_Space
CHR_UndScore
CHR_[
CHR_]
CHR_{
CHR_}
CHR_<=
CHR_>=
CHR_<>
$_R<<
$_R<Z
$_XYZ
$_<<>>
$_{}
$_[]
$_''
$_::
$_LRParens
$_2DQ
$_ECHO
$_EXIT
$_Undefined
Page
42
43
43
43
43
43
43
43
43
43
43
43
43
43
43
43
43
43
43
43
43
41
41
43
41
43
41
42
42
42
43
43
43
43
43
44
44
44
44
44
44
44
44
44
44
44
44
44
582
Addr.
340A4
340B4
34144
3416E
3416E
34195
34195
341A8
341A8
341BA
341BA
341BA
341D2
341D2
341D7
341D7
341DC
341E8
341F4
3421A
3421A
3422B
3422B
3422B
3423A
3423A
3423A
34257
34257
34281
34281
342BB
342BB
342EA
342EA
3432C
34331
34331
34331
34357
34357
3438D
3438D
343BD
343BD
343BD
343CF
343CF
G. Entries sorted by Address
Name
$_RAD
$_GRAD
RSWAP
XYZ>YXZ
ROTSWAP
XYZ>ZY
ROTDROPSWAP
XYZ>YZ
ROTDROP
UNROTSWAP
XYZ>ZYX
SWAPROT
3DROP
XYZ>
XYZW>
4DROP
5DROP
6DROP
7DROP
SWAPDROP
XY>Y
3UNROLL
UNROT
XYZ>ZXY
XYZW>YZWX
FOURROLL
4ROLL
5ROLL
FIVEROLL
6ROLL
SIXROLL
EIGHTROLL
8ROLL
SEVENROLL
7ROLL
DUP4UNROLL
FOURUNROLL
4UNROLL
XYZW>WXYZ
5UNROLL
FIVEUNROLL
SIXUNROLL
6UNROLL
XYZ>Z
UNROT2DROP
ROTROT2DROP
4UNROLL3DROP
XYZW>W
Page
44
44
129
107
107
107
107
107
107
107, 108
107, 108
107, 108
106
106
106
106
106
106
106
107
107
108, 108
108, 108
108, 108
107
107
107
108
108
108
108
108
108
108
108
106
108
108
108
109
109
109
109
107, 108
107, 108
107, 108
108
108
Addr.
343E1
343F3
34405
34417
34431
34436
34451
34465
34474
34485
3448A
3448F
34494
34499
3449E
344A3
344A8
344CB
344DD
344F2
34504
34517
3452B
3453D
34552
34564
3457F
3457F
34611
34616
3461B
34620
34625
3462A
3462F
34634
34639
3463E
34643
34648
3464D
34652
34657
3465C
34661
34666
3466B
34670
Name
2RDROP
3RDROP
#-PICK
#+PICK
DUP#1+PICK
#1+PICK
#2+PICK
#3+PICK
#4+PICK
3PICK
4PICK
5PICK
6PICK
7PICK
8PICK
9PICK
10PICK
#-ROLL
#+ROLL
#1+ROLL
get1
#2+ROLL
#-UNROLL
#+UNROLL
#1+UNROLL
#2+UNROLL
DUPUNROT
SWAPOVER
1PUTLAM
1GETLAM
2PUTLAM
2GETLAM
3PUTLAM
3GETLAM
4PUTLAM
4GETLAM
5PUTLAM
5GETLAM
6PUTLAM
6GETLAM
7PUTLAM
7GETLAM
8PUTLAM
8GETLAM
9PUTLAM
9GETLAM
10PUTLAM
10GETLAM
Page
129
129
110
110
77, 106
109
109
109
110
109
109
109
109
109
109
109
109
108
108
108
77
108
109
109
109
109
106, 107
106, 107
118
117
118
117
118
117
118
117
118
117
118
117
118
117
118
117
118
117
118
117
340A4 – 350C3
Addr.
34675
3467A
3467F
34684
34689
3468E
34693
34698
3469D
346A2
346A7
346AC
346B1
346B6
346BB
346C0
346C5
346CA
346CF
346D4
346D9
346DE
346E3
346E8
346ED
346F2
346F7
346FC
34701
34706
3470B
34710
34715
3471A
34797
347AB
3483E
348D2
348E2
348F7
348FC
3490E
34920
34939
3494E
3495D
34976
34985
Name
11PUTLAM
11GETLAM
12PUTLAM
12GETLAM
13PUTLAM
13GETLAM
14PUTLAM
14GETLAM
15PUTLAM
15GETLAM
16PUTLAM
16GETLAM
17PUTLAM
17GETLAM
18PUTLAM
18GETLAM
19PUTLAM
19GETLAM
20PUTLAM
20GETLAM
21PUTLAM
21GETLAM
22PUTLAM
22GETLAM
23PUTLAM
23GETLAM
24PUTLAM
24GETLAM
25PUTLAM
25GETLAM
26PUTLAM
26GETLAM
27PUTLAM
27GETLAM
DUP4PUTLAM
DUPTEMPENV
GETLAMPAIR
#=case
OVER#=case
DUP#0=case
#0=case
DUP#0=csedrp
EQcasedrop
#=casedrop
NOTcasedrop
casedrop
NOTcase2drop
case2drop
583
Page
118
118
118
118
118
118
118
118
118
118
118
118
118
118
118
118
118
118
118
118
119
118
119
118
119
118
119
118
119
118
119
118
119
118
119
119
119
141
141
141
141
141
144
141
139
139
139
139
Addr.
34999
349B1
349C6
349D6
349EA
349F9
34A13
34A22
34A31
34A46
34A59
34A7E
34A92
34AA1
34AAD
34ABE
34AD3
34AF4
34B3E
34B4F
34BAB
34BBB
34BD8
34BEF
34C82
34D00
34D51
34D58
34EBE
34FA6
34FC0
34FCD
34FE6
35018
35037
3503C
35046
3504B
35082
35087
35091
35096
350A0
350A5
350AF
350B4
350BE
350C3
Name
EQcase
caseDROP
NOTcaseDROP
case2DROP
NOTcase2DROP
case
NOTcase
IT
GOTO
?GOTO
NOT?GOTO
#0=?SEMI
NOT?SEMI
?SEMI
SEMILOOP
ITE_DROP
COLA_EVAL
COLARPITE
ITE
2'RCOLARPITE
2@REVAL
3@REVAL
NOT?DROP
ticR
EXPAND
CACHE
SAVELAM
SAVESTACK
DUMP
undo
DUPROM-WORD?
ROM-WORD?
Rom-Word?
2SWAP
DUPTYPECHAR?
TYPECHAR?
DUPTYPEIDNT?
TYPEIDNT?
DUPTYPEFLASHPTR?
TYPEFLASHPTR?
DUPTYPEZINT?
TYPEZINT?
DUPTYPELNGREAL?
TYPELNGREAL?
DUPTYPELNGCMP?
TYPELNGCMP?
DUPTYPEFONT?
TYPEFONT?
Page
144
139
139
140
140
139
139
138
129
129
129
141
137
137
151
139
131
138
139
138
128
128
138
128
48, 57
117
117
117
117
100
100
107
200
200
199
199
200
200
200
200
200
200
200
200
200
200
584
Addr.
350CD
350D2
350DC
350E1
350EB
350F0
350F5
350FA
350FF
35109
35109
3510E
35118
35118
3511D
35127
3512C
35136
35136
3513B
35145
3514A
35154
35159
35163
35168
35172
35172
35177
35181
35186
35190
35190
35195
3519F
351A4
351AE
351B3
351FA
35268
35280
35289
35292
352AD
352BD
352E0
352F1
352FE
G. Entries sorted by Address
Name
DUPTYPEAPLET?
TYPEAPLET?
DUPTYPELAM?
TYPELAM?
DUPTYPEBINT?
TYPEBINT?
#37258
DUPTYPEHSTR?
TYPEHSTR?
DTYPECSTR?
DUPTYPECSTR?
TYPECSTR?
DTYPEREAL?
DUPTYPEREAL?
TYPEREAL?
DUPTYPECMP?
TYPECMP?
DUPTYPEARRY?
DTYPEARRY?
TYPEARRY?
DUPTYPEROMP?
TYPEROMP?
DUPTYPERRP?
TYPERRP?
DUPTYPESYMB?
TYPESYMB?
DTYPECOL?
DUPTYPECOL?
TYPECOL?
DUPTYPEGROB?
TYPEGROB?
DUPTYPELIST?
DTYPELIST?
TYPELIST?
DUPTYPETAG?
TYPETAGGED?
DUPTYPEEXT?
TYPEEXT?
OverWrF/TLp
OVER#=
DROPTRUE
DROPFALSE
TYPERARRY?
TYPECARRY?
DUP#0=
#3=
#2=
#1=
Page
200
200
199
199
200
200
21
199
199
199
199
199
199
199
199
199
199
199
199
199
200
200
200
200
199
199
200
200
200
199
199
199
199
199
200
200
200
200
25
136
136
199
199
25
25
25
25
Addr.
3530D
3531C
3532B
3533C
35346
35369
353CD
353EB
353F7
354CB
354CB
35511
3551D
35552
3558C
355A5
355D0
355D5
355DA
355DF
355FD
35602
35607
3560C
35611
35616
3561B
35620
3562A
35675
3569B
356B8
356D5
35703
3570C
35715
3571E
35733
3574D
3574D
3574D
3576E
3579C
357BB
357CE
357E2
357FC
3581F
Name
#1<>
DUP#1=
DUP#0<>
!insert$
SWAP&$
!!append$?
!append$
!!insert$
!!append$
'RSaveRomWrd
'RSAVEWORD
#MIN
#MAX
#-#2/
DROPZERO
2DROP00
#6#5#4#3#3+
#4+
#5+
#6+
#7+
#8+
#9+
#10+
#12+
#10*
#8*
#6*
5skipcola
3skipcola
2skipcola
skipcola
DUP#2+
DROPSWAP
XYZ>Y
ROT2DROP
DROPSWAPDROP
SWAPDUP
ROTDUP
SWAP#DROPDUP
DUPLEN$
#+DUP
#-DUP
Page
25
26
26
49
49
49
49
49
49
197
197
25
25
24
21
21
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
131
131
131
131
24
106
106, 107
106, 107
106, 107
107
107
24
106
47
24
24
350CD – 36043
Addr.
35830
35841
35857
35872
35872
35872
3588B
358A7
358C2
358DC
358F8
35912
3592B
3592B
35956
3596D
3597F
35994
359AD
359C8
359E3
359F7
35A10
35A29
35A56
35A5B
35A88
35AAB
35AE2
35B32
35B46
35B82
35B96
35BAF
35BC3
35BD7
35BEB
35BFF
35C18
35C2C
35C40
35C54
35C68
35C7C
35C90
35CA4
35CB8
35CCC
Name
#1+DUP
#1-DUP
SWAPDROPDUP
SWAPDROPSWAP
XYZ>ZX
UNROTDROP
4ROLLDROP
5ROLLDROP
2DUP#<
2DUP#=
2DUP#>
DUP#1+
SWAP#1+
SWP1+
DUP#1DROPONE
RDROPCOLA
COLACOLA
COLAcase
COLANOTcase
ORcase
REQcase
REQcasedrop
SAFESTO
DUPSAFE@
SAFE@
?>ROMPTR
?ROMPTR>
MACRODCMP
2DROPFALSE
PALPTRDCMP
palrompdcmp
#0=UNTIL
INCOMPDROP
NTHCOMPDROP
APPEND_SPACE
7UNROLL
RESOROMP
%10*
DUP@
DUPROMPTR@
#=ITE
INNERDUP
NOTAND
TOTEMPSWAP
ROT2DUP
ROTAND
ROTOVER
585
Page
24
24
107
107, 108
107, 108
107, 108
107
108
25
25
25
24
24, 77
24, 77
24
21
129
131
140
140
139
144
144
167
166
166
100
100
136
55
151
71
69
49
109
100
31
166
100
141
71
136
171
107
136
107
Addr.
35CE0
35CF4
35D08
35D1C
35D30
35D30
35D44
35D58
35D6C
35D6C
35D80
35D94
35DA8
35DBC
35DDA
35DEE
35E07
35E07
35E20
35E20
35E39
35E4D
35E61
35E75
35E89
35EA2
35EB6
35ECA
35EDE
35EF2
35F06
35F1A
35F2E
35F42
35F56
35F6A
35F7E
35F97
35FB0
35FB0
35FC4
35FD8
35FF3
36007
3601B
3602F
36043
36043
Name
DUPDUP
OVERDUP
COERCEDUP
UNROTDUP
2DUPSWAP
DUP3PICK
4UNROLLDUP
NTHCOMDDUP
OVERSWAP
OVERUNROT
ROLLSWAP
NULL$SWAP
SUB$SWAP
%MAXorder
?SKIPSWAP
1ABNDSWAP
ROT+SWAP
ROT#+SWAP
4PICK#+SWAP
4PICK+SWAP
#+SWAP
#-SWAP
#1+SWAP
ZEROSWAP
#1-1SWAP
ONESWAP
COERCESWAP
%>%%SWAP
%%*SWAP
XYZ>ZTRUE
4ROLLSWAP
3PICKSWAP
4PICKSWAP
1GETSWAP
?SWAP
!append$SWAP
NOT?SWAPDROP
?SWAPDROP
N+1DROP
#1+NDROP
ROLLDROP
MDIMSDROP
DUPROT
DROPROT
#1-ROT
%%*ROT
FOURROLLROT
4ROLLROT
Page
106
109
22
108
106, 106
106, 106
108
69
109, 109
109, 109
108
46
48
33
138
119
25
25
25
25
24
24
24
22
24
22
22
31
33
136
107
109
109
119
138
49
138
138
75, 106
75, 106
108
64
106
106
24
33
108
108
586
Addr.
36057
3606B
3607F
36093
360A7
360BB
360CF
360E3
360F7
3610B
3611F
36133
36147
3615B
3616F
36183
3619E
361B2
361C6
361DA
361DA
361EE
36202
36216
3622A
3623E
36252
36266
3627A
3628E
362A2
362A2
362B6
362CA
362DE
362F2
36306
3631A
3632E
36342
3635B
3636F
36383
3639C
363B5
363CE
363E2
363FB
G. Entries sorted by Address
Name
4UNROLLROT
DROPOVER
EQOVER
#+OVER
#-OVER
ZEROOVER
UNROTOVER
4ROLLOVER
3PICKOVER
4PICKOVER
DUPPICK
DUPROLL
OVER#2+UNROL
8UNROLL
10UNROLL
OVERARSIZE
'ERRJMP
caseERRJMP
?CARCOMP
NEWLINE$&$
NEWLINE&$
#1-{}N
TWO{}N
THREE{}N
DUPINCOMP
SWAPINCOMP
DUPNULL$?
DUPNULLCOMP?
DUPLENCOMP
#1-SUB$
1_#1-SUB$
1_#1-SUB
LAST$
#1+LAST$
DUP$>ID
SWAP%>C%
'NOP
::NEVAL
2GETEVAL
DROPRDROP
SWAPCOLA
XYZ>ZCOLA
#0=?SKIP
#1=?SKIP
#=?SKIP
ONE_EQ
#>?SKIP
COLASKIP
Page
108
106
137
24
24
22
108
108
109
109
106
106
77
109
109
64
130
146
68
47
47
72
72
72
71
71
55
68
68
48
48
48
48
48
116
37
130
74
119
129
131
131
141
142
140
25
140
131
Addr.
3640F
36428
36441
3645A
3646E
36482
36496
364AF
364C8
364E1
364FF
36513
36518
3652C
36540
36540
36554
36554
36568
3657C
36590
365B3
365CC
365E5
365F9
3660D
36621
36635
3663A
3664E
36662
36676
36694
366A8
366BC
366D0
366E9
366FD
36711
36725
36739
36739
3674D
3674D
36761
36775
36789
3679D
Name
NOT_UNTIL
NOT_WHILE
DUP#0<>WHILE
DUPINDEX@
SWAPINDEX@
OVERINDEX@
SWAPLOOP
DROPLOOP
DUP#0_DO
toLEN_DO
1GETABND
DUP1LAMBIND
1LAMBIND
caseTRUE
TrueFalse
TRUEFALSE
FalseTrue
FALSETRUE
ZEROFALSE
ONEFALSE
#=casedrpfls
casedrpfls
case2drpfls
caseFALSE
ORNOT
EQUALNOT
2DUPEQ
DUPEQ:
EQ:
EQOR
EQUALOR
2#0=OR
OVER#0=
OVER#<
#<3
DUP#<7
INNER#1=
#5=
#2<>
OVER#>
ONE#>
#>1
DUP3PICK#+
2DUP#+
ROT#+
OVER#+
3PICK#+
4PICK#+
Page
151
151
151
152
152
152
151
151
151
151
119
116
116
140
136
136
136
136
22
22
141
139
140
140
136
137
137
137
137
137
137
26
25
25
25
26
71
25
25
26
25
25
24
24
24
24
25
25
36057 – 36F79
Addr.
367B1
367C5
367D9
367ED
36801
36815
36815
36829
3683D
36851
36851
36851
36865
36883
368B5
368C9
368E7
368FB
36914
3692D
36946
3695A
3696E
36982
36996
369AA
369BE
369D2
369E6
369FF
36A13
36A27
36A4A
36A63
36A77
36A8B
36AA4
36ABD
36AD6
36AEA
36AFE
36B12
36B12
36B26
36B3A
36B53
36B67
36B7B
Name
ROT#OVER#INDEX@#SWAPOVER#ROT#1+
#-+1
#1SWAP#1DROP#1#1-+
#+-1
$1-+
COLAITE
ERROROUT
SWAP2DUP
RSKIP
GROB!ZERODRP
casedrptru
NOTcaseTRUE
?SEMIDROP
SWAPUnDROP
SWAPUnNDROP
DUP'
SWAP'
DROP'
OVER'
STO'
TRUE'
ONEFALSE'
FALSE'
#1+'
'R'R
'RRDROP
ONECOLA
dvarlsBIND
'LAMLNAMESTO
'xDEREQ
DUPNULL{}?
DUPZERO
DUPONE
SWAPONE
ONEONE
ONEDUP
DUPTWO
NOTcsdrpfls
caseSIZEERR
NcaseSIZEERR
CKREAL
587
Page
24
24
152
24
24
23
23
24
24
23
23
23
139
156
107
129
91
139
140
138
77
76
130
130
130
130
130
130
130
130
130
128
128
131
117
168
131
72
21
21
21
21
21
21
139
146
146
198
Addr.
36BAA
36BBE
36BD2
36BE6
36BFA
36C0E
36C22
36C36
36C4F
36C4F
36C68
36C7C
36C90
36C90
36CA4
36CB8
36CCC
36CE0
36CF4
36D08
36D21
36D3A
36D4E
36D62
36D76
36D8A
36D9E
36DB2
36DCB
36DDF
36DF3
36E07
36E43
36E57
36E6B
36E7F
36E93
36EA7
36EBB
36ED4
36EED
36F01
36F15
36F29
36F3D
36F51
36F65
36F79
Name
NcaseTYPEERR
'x*
'xDER
%%/>%
UNCOERCE%%
DUP%0=
SWAP%%/
caseDrpBadKy
caseDEADKEY
caseDoBadKey
GROBDIMw
%%*UNROT
XYZW>YWZX
SWAP4ROLL
2DUP5ROLL
SWAP3PICK
3PICK3PICK
SWAP4PICK
OVER5PICK
EQUALcasedrp
DUP#0=csDROP
jEQcase
ANDcase
EQUALcase
#<case
#1=case
#<>case
#>2case
#>case
j%0=case
REALcase
dARRYcase
dLISTcase
EditExstCase
ANDNOTcase
EQUALNOTcase
dIDNTNcase
dREALNcase
EQIT
DUP#0=IT
ANDITE
EQITE
#0=ITE
#<ITE
#>ITE
DUP#0=ITE
UserITE
SysITE
Page
146
130
130
34
31
35
34
146
146
146
90
33
107
107
106
107
109
109
109
144
142
144
139
144
141
142
141
142
141
142
145
145
145
146
139
144
145
145
144
141
139
144
141
141
141
141
146
146
588
Addr.
36F8D
36FA6
36FBA
36FCE
36FCE
36FE2
36FF6
3700A
3701E
37032
37046
3705A
37073
37087
3709B
3709B
370AF
370C3
37104
37118
3712C
3714A
37186
371B3
371F9
3721C
37258
37287
37294
37305
37315
37328
3733A
3734A
3735C
3736E
37380
37394
373A8
374BE
3760D
37685
376B7
376C1
376EE
37702
37752
3776B
G. Entries sorted by Address
Name
top&Cr
metaROTDUP
ROTUntop&
roll2top&
rolltwotop&
plDRPpZparg
&$SWAP
SWAPCKREF
pZpargSWAPUn
DROPNDROP
2OVER
?Ob>Seco
Ob>Seco
2Ob>Seco
ZEROISTOPSTO
ExitAtLOOP
RclHiddenVar
WithHidden
StoHiddenVar
PuHiddenVar
SaveVarRes
SetHiddenRes
RestVarRes
Embedded?
UStackDepth
Sig?ErrJmp
DupAndThen
ZEROZERO
#ZERO#ONE
#ZERO#SEVEN
#ONE#27
#TWO#ONE
#TWO#TWO
#TWO#FOUR
#THREE#FOUR
#FIVE#FOUR
ZEROZEROZERO
ZEROZEROONE
ZEROZEROTWO
SWAPDROPTRUE
SubMetaOb
SubMetaOb1
matchob?
matchob?Lp
POSCOMP
nextpos
#=POSCOMP
EQUALPOSCOMP
Page
76
76
76
76
88
49
171
88
75, 106
109
73
73
73
152
152
170
170
170
170
169
170
169
69
158
21
21
21
21
21
21
21
21
21
21
21
21
136
77
77
69
69
69
69
Addr.
37784
37798
377C5
377DE
37829
378FA
378FA
37906
37906
37AA5
37ABE
37AEB
37B04
37B54
37C06
37F48
37F7F
3805D
3807D
38093
380DB
38105
3816B
38195
381AB
38252
38266
38275
3831C
3851F
387AC
3880D
38837
3885C
38999
389B9
389D4
389EF
38A14
38A2F
38A54
38ABA
38B28
38B43
38BAE
38BBF
38C00
38C1B
Name
NTHOF
Find1stTrue
Lookup
Lookup.1
EQLookup
POS$
POSCHR
POSCHRREV
POS$REV
CHR>$
STRIPTAGS
STRIPTAGSl2
TAGOBS
NEXTCOMPOB
>LASTRAM-WORD
xIF
xTHEN
xELSE
xIFEND
xALG->
xWHILE
xREPEAT
xDO
xUNTIL
xSTART
xSTARTVAR
#FFFF
#BB
xNEXT
xSTEP
xIFERR
xHALT
xSILENT'
xRPN->
x>>ABND
x<<
x>>
x'
xENDTIC
xWHILEEND
xENDDO
xERRTHEN
xCASE
xTHENCASE
xDIR
xPROMPT
DISPST2&FREEZE
xGROB
Page
69
70
70
70
70
47
47
47
47
47
61
62
61
70
462
473
458
475
469
457
474
471
459
21
16
465
472
462
461
465
458
455
467
282
36F8D – 3A57C
Addr.
38C2C
38D2F
38D72
38D83
38D94
38DE1
38E01
38E21
38E41
38E61
38E81
38EA1
38EC1
38EE1
38F01
38F21
38F41
38F81
38FB5
38FD7
3900B
3905D
39078
39093
390AE
390C9
390E4
39104
39124
39144
39164
3918E
391AE
391D8
391F8
39218
39238
39277
39332
393CA
393EA
39405
39420
3943B
39456
39480
394AA
394C8
Name
xEVAL>
xNOEVAL>
xSTRUCT>
x<STRUCT
xSTRUCT->
xASR
xRL
xRLB
xRR
xRRB
xSL
xSLB
xSR
xSRB
xR>B
xB>R
xCONVERT
xUVAL
x>UNIT
xUBASE
xUFACT
xTIME
xDATE
xTICKS
xWSLOG
xACKALL
xACK
xSETDATE
xSETTIME
xCLKADJ
xSTOALARM
xRCLALARM
xFINDALARM
xDELALARM
xTSTR
xDDAYS
xDATE+
#B437D
?GETMSG
xCRDIR
xPATH
xHOME
xUPDIR
xVARS
xTVARS
xBYTES
xNEWOB
INHARDROM?
589
Page
454
469
469
470
470
471
471
471
471
468
454
456
474
474
474
474
473
456
473
475
453
453
456
473
455
472
468
459
457
474
456
456
21
157
456
466
461
474
475
474
455
465
179
Addr.
394F1
3950C
39527
3955B
39576
39591
395AC
395F3
396A4
39705
39725
39745
39765
39785
397E5
39819
39839
39854
3989C
398B9
39976
39A07
39A6C
39AC7
39AE4
39B01
39B1E
39B3B
39B58
39C8B
39C9F
39CB3
39CD5
39CFC
39DE8
39E6B
39F49
3A097
3A12D
3A1C2
3A200
3A278
3A32B
3A390
3A3EE
3A442
3A4EF
3A57C
Name
xKILL
xOFF
xDOERR
xERR0
xERRN
xERRM
xEVAL
xIFTE
xIFT
xSYSEVAL
xDISP
xFREEZE
xBEEP
x>NUM
xLAST
xWAIT
xCLLCD
xKEY
xCONT
x=
xNEG
xABS
xCONJ
xPI
xMAXR
xMINR
xCONSTANTe
xi
x+
SWAP>HCOMP
$&ob
ob&$
xNEGNEG
xx*
#A4
x/
xˆ
#4FF
#304
rpnXROOT
xXROOT
xINV
xARG
xSIGN
xSQRT
xSQ
xSIN
Page
463
465
457
458
458
458
458
462
462
473
457
460
454
465
463
475
455
463
456
476
465
453
456
466
464
465
458
462
476
68
53
53
476
476
16
476
477
18
17
476
462
453
471
475
471
471
590
Addr.
3A5D0
3A624
3A678
3A6C2
3A70C
3A756
3A7DC
3A844
3A88E
3A8D8
3A94F
3A9B7
3AA01
3AA73
3AAE5
3AB2F
3AB6F
3ABAF
3ABFD
3AC3D
3AC87
3ACD1
3AD1B
3AD65
3ADA5
3AE2B
3AEB1
3AF3E
3AFCB
3B02E
3B06E
3B0AE
3B0EC
3B10C
3B12C
3B14C
3B16C
3B193
3B1BA
3B1E1
3B208
3B22F
3B251
3B2DC
3B362
3B3E6
3B401
3B423
G. Entries sorted by Address
Name
xCOS
xTAN
xSINH
xCOSH
xTANH
xASIN
xACOS
xATAN
xASINH
xACOSH
xATANH
xEXP
xLN
xLOG
xALOG
xLNP1
xEXPM
xFACT
preFACT
xIP
xFP
xFLOOR
xCEIL
xXPON
xMAX
xMIN
xRND
xTRNC
xMOD
xMANT
xD>R
xR>D
x>HMS
xHMS>
xHMS+
xHMSxRNRM
xCNRM
xDET
xDOT
xCROSS
xRSD
x%
x%T
x%CH
xRAND
xRDZ
xCOMB
Page
456
473
471
456
473
454
453
454
454
453
454
459
464
464
453
464
459
475
462
459
459
455
476
464
465
469
474
465
464
458
468
461
461
461
461
469
455
457
458
456
470
476
474
455
468
469
456
Addr.
3B477
3B4C9
3B4E9
3B509
3B529
3B549
3B564
3B57F
3B59A
3B5BA
3B5DA
3B5FA
3B615
3B635
3B655
3B670
3B68B
3B6A6
3B6C1
3B6FA
3B715
3B749
3B76C
3B7AD
3B7D2
3B7ED
3B819
3B87E
3B8D7
3B8F5
3B904
3B913
3B928
3B93D
3B952
3B967
3B976
3B9D2
3B9FA
3BA09
3BA18
3BA2D
3BAC1
3BADA
3BAF5
3BB1F
3BB94
3BBBE
Name
xPERM
xSF
xCF
xFS?
xFC?
xDEG
xRAD
xGRAD
xFIX
xSCI
xENG
xSTD
xFS?C
xFC?C
xBIN
xDEC
xHEX
xOCT
xSTWS
xRCWS
xRCLF
xSTOF
DOSTOALLF2
#BBBB
x>LIST
xR>C
xRE
xIM
xSUB
#C55
#C22
#455
#411
#415
#451
#855
#822
xREPL
#313
#515
#454
#414
xLIST>
INNERCOMP>%
xC>R
xSIZE
xPOS
x>STR
Page
466
471
455
460
459
456
468
460
459
470
458
472
460
459
454
456
461
465
472
468
468
472
176
20
464
468
469
462
472
20
20
18
17
17
18
19
19
469
17
18
18
17
463
71
456
471
467
472
3A5D0 – 3D1C7
Addr.
3BBD9
3BBF9
3BC19
3BC39
3BC43
3BD4C
3BD65
3BDB2
3BDE6
3BE38
3BE9B
3BEC5
3BEEC
3BF77
3C02E
3C084
3C0BF
3C10F
3C11E
3C139
3C16B
3C17A
3C1C7
3C22D
3C2AC
3C2D6
3C30A
3C33E
3C372
3C392
3C3B2
3C3DC
3C41A
3C444
3C464
3C484
3C49F
3C4BA
3C4D5
3C4F5
3C51F
3C553
3C56E
3C58E
3C5AE
3C5C9
3C5E4
3C60E
Name
xSTR>
xNUM
xCHR
xTYPE
XEQTYPE
#AF
#CF
xVTYPE
xEQ>
xOBJ>
x>ARRY
xARRY>
xRDM
xCON
xIDN
xTRN
xPUT
#450
#410
xPUTI
#750
#710
xGET
xGETI
xV>
x>V2
x>V3
xINDEP
xPMIN
xPMAX
xAXES
xCENTR
xRES
x*H
x*W
xDRAW
xAUTO
xDRAX
xSCALE
xPDIM
xDEPND
xERASE
xPX>C
xC>PX
xGRAPH
xLABEL
xPVIEW
xPIXON
591
Page
472
465
455
474
199
16
16
475
458
465
454
454
468
456
462
474
467
17
17
467
19
19
460
460
475
475
475
462
466
466
454
455
469
470
470
458
454
458
470
466
457
458
467
456
460
463
467
466
Addr.
3C638
3C662
3C68C
3C6B6
3C6E0
3C70A
3C72A
3C74A
3C7D8
3C7E2
3C800
3C81E
3C83C
3C866
3C881
3C8A1
3C8C6
3C8D0
3C8DF
3C8FA
3C915
3C935
3C955
3C967
3C979
3C98B
3C99D
3C9AF
3C9C1
3C9D3
3C9E5
3CA07
3CA8D
3CB13
3CB7A
3CBF6
3CD21
3CE42
3CEE1
3CF80
3D01F
3D0BC
3D0D7
3D0F2
3D10D
3D128
3D143
3D1C7
Name
xPIXOFF
xPIX?
xLINE
xTLINE
xBOX
xBLANK
xPICT
xGOR
xGXOR
#C5C
#C2C
#85C
#82C
xLCD>
x>LCD
x>GROB
xARC
#2111
#5B11
xTEXT
xXRNG
xYRNG
xFUNCTION
xCONIC
xPOLAR
xPARAMETRIC
xTRUTH
xSCATTER
xHISTOGRAM
xBAR
xSAME
xAND
xOR
xNOT
xXOR
x==
x#?
x<
x>
x<=?
x>=?
xOLDPRT
xPR1
xPRSTC
xPRST
xCR
xPRVAR
xDELAY
Page
466
466
463
473
454
454
466
460
461
20
20
19
19
463
463
460
453
20
20
473
476
476
460
456
466
466
474
461
454
470
453
466
465
475
476
476
476
476
476
476
467
467
456
467
457
592
Addr.
3D1E7
3D202
3D258
3D2B4
3D393
3D3AE
3D3CE
3D434
3D47E
3D503
3D50D
3D51C
3D52B
3D56B
3D605
3D6F6
3D7AC
3D81D
3DA3E
3DA63
3DAD0
3DB04
3DB62
3DBCA
3DBEA
3DC05
3DC20
3DC3B
3DC56
3DC71
3DC8C
3DCA7
3DCC7
3DCE2
3DCFD
3DD18
3DD33
3DD4E
3DD6E
3DD8E
3DDA9
3DDC4
3DDEE
3DE09
3DE24
3DE3F
3DE5A
3DE75
G. Entries sorted by Address
Name
xPRLCD
x∂
xDER
CKSYMBTYPE
xRCEQ
xSTEQ
xROOT
x
xINTEGRAL
xSUM
#A110
#AA10
#A1A0
x|
xWHERE
xQUOTE
xAPPLY
xFCNAPPLY
x->Q
x->QPI
xMATCHUP
xMATCHDN
xFORMUNIT
xPREDIV
xDUP
xDUP2
xSWAP
xDROP
xDROP2
xROT
xOVER
xDEPTH
xDROPN
xDUPN
xPICK
xROLL
xROLLD
xCLEAR
xSTOSIGMA
xCLSIGMA
xRCLSIGMA
xSIGMA+
xSIGMAxNSIGMA
xCORR
xCOV
xSUMX
xSUMY
Page
467
457
199
468
472
469
462
460
20
20
20
460
468
453
468
468
464
475
468
458
458
473
458
458
469
466
457
458
458
466
469
469
455
472
455
468
460
460
465
456
456
461
461
Addr.
3DE90
3DEAB
3DEC6
3DEE1
3DEFC
3DF17
3DF32
3DF4D
3DF68
3DF83
3DFDD
3DFFD
3E01D
3E03D
3E05D
3E07D
3E09D
3E0BD
3E0DD
3E0FD
3E127
3E156
3E171
3E17B
3E196
3E1CA
3E1EF
3E214
3E239
3E25E
3E283
3E2C1
3E331
3E35B
3E385
3E3AF
3E406
3E46C
3E4D2
3E54C
3E576
3E5A0
3E5E9
3E632
3E648
3E66F
3E696
3E6CA
Name
xSUMX2
xSUMY2
xSUMXY
xMAXSIGMA
xMEAN
xMINSIGMA
xSDEV
xTOT
xVAR
xLR
xPREDV
xPREDY
xPREDX
xXCOL
xYCOL
xUTPC
xUTPN
xUTPF
xUTPT
xSIGMACOL
xSCLSIGMA
xSIGMALINE
xBINS
#111
xBARPLOT
xHISTPLOT
xSCATRPLOT
xLINFIT
xLOGFIT
xEXPFIT
xPWRFIT
xBESTFIT
xSINV
xSNEG
xSCONJ
xSTO+
xSTOxSTO/
xSTO*
xINCR
xDECR
xCOLCT
xEXPAN
xRULES
xISOL
xQUAD
xSHOW
xTAYLR
Page
461
461
461
464
464
464
470
473
475
464
467
467
467
475
476
474
474
474
474
455
470
460
454
17
454
461
470
463
464
459
454
471
471
470
472
472
472
472
462
456
455
459
462
468
471
473
3D1E7 – 077002
Addr.
3E6F1
3E739
3E743
3E759
3E7DA
3E7E9
3E7FF
3E823
3E85C
3E87C
3E8C1
3E8F0
3E91A
3E97B
3E9D4
3EA01
3EA2E
3EA49
3EAA7
3EAC7
3EAE7
3EAFB
3EB16
3EB2C
3EB42
3EB64
3EB84
3EC35
3EC55
3EC75
3EC95
3ECB0
3ECE4
3ED22
3ED56
3ED76
3ED91
3EDAC
3EDCC
3EDEC
3EE0C
3EE2C
3EE47
3EE62
3EE82
3EE9D
3EEBD
3EEE7
Name
xRCL
xSTO
#9FD
#8FD
#C8
#9F1
#8F1
xSTO>
xDEFINE
xPURGE
xMEM
xORDER
xCLUSR
xTMENU
xMENU
CST
xRCLMENU
xPVARS
xPGDIR
xARCHIVE
xRESTORE
#9F
xMERGE
xFREE
xLIBS
xATTACH
xDETACH
xXMIT
xSRECV
xOPENIO
xCLOSEIO
xSEND
xKGET
xRECN
xRECV
xFINISH
xSERVER
xCKSM
xBAUD
xPARITY
xTRANSIO
xKERRM
xBUFLEN
xSTIME
xSBRK
xPKT
xINPUT
xASN
593
Page
468
472
19
19
16
19
19
167, 472
456
467
464
466
455
473
464
293
468
467
466
453
469
16
463
454
457
475
471
466
455
471
463
469
469
459
471
455
454
466
474
463
454
472
470
466
462
454
Addr.
3EF07
3EF3B
3EF79
3EFB1
3EFEF
3F007
3F033
3F053
3F070
3F0B7
3F0FC
3F11C
3F218
3F22E
3F249
3F264
3F27F
3F29A
3F2B5
3F2DF
3F481
3F495
4EA22
4EA37
4EA4C
4EA61
4EA76
80058
800F5
806FD
8071B
80EDC
80F02
80F5A
81006
860B8
860CC
004002
005002
007002
02E002
070002
072002
073002
074002
075002
076002
077002
Name
xSTOKEYS
xDELKEYS
xRCLKEYS
x->TAG
xDTAG
xINT
xANS
x;
xR>I
xI>R
xNOVAL
xCMDAPPLY
xRPL>
xUNROT
xUNPICK
xNIP
xPICK3
xDUPDUP
xNDUPN
xFAST3D
COERCE2
UNCOERCE2
%TICKSsec
%TICKSmin
%TICKShour
%TICKSday
%TICKSweek
NEXTIRQ
IRAMBUFF
EDITLINE
CONTEXT
DEPTHSAVE
SystemFlags
LASTARGCOUNT
IOCsave
CurROMBank2
FlashROMTAB2
ˆRunChooseSimple
ˆsysCHOOSE
ˆCk&DoMsgBox
ˆDoAlert
ˆChoose2
ˆChoose3
ˆChoose3Save
ˆChoose3Index
ˆChooseDefHandler
ˆChoose3CANCL
ˆChoose3OK
Page
472
457
468
473
458
462
453
469
462
465
474
474
465
466
458
465
459
22
31
29
29
29
29
30
244
233
283
282
233
233
233
233
233
234
234
594
Addr.
088002
089002
09D002
09E002
09F002
0A0002
0AE002
0AF002
0B0002
0B1002
0B2002
0B3002
0B4002
0B5002
0BB002
0BC002
0BD002
0BE002
06C003
06D003
06E003
09A003
0A4003
0A5003
0A6003
0A7003
0AB003
0AC003
001004
002004
003004
004004
005004
006004
007004
008004
009004
00A004
00B004
00C004
00D004
00E004
00F004
010004
011004
012004
013004
014004
G. Entries sorted by Address
Name
ˆSaveHARDBUFF
ˆRestoreHARDBUFF
ˆDoCKeyOK
ˆDoCKeyCancel
ˆDoCKeyCheck
ˆDoCKeyChAll
ˆDoMKeyOK
ˆDoKeyCancel
ˆDoCKeyUnChAll
ˆLEDispItem
ˆLEDispList
ˆLEDispPrompt
ˆDoKeyOK
ˆDoKeyEdit
ˆGetFieldVals
ˆIFEDispField
ˆDOTVARS{}
ˆChangeFocus
ˆlaDELROW
ˆlaINSROW
ˆlaGPROW
ˆWRAP$
ˆBRdone
ˆBRDispItems
ˆBRinverse
ˆBRViewItem
ˆBRGetItem
ˆSWAPROWS
ˆFSTR1
ˆFSTR2
ˆFSTR3
ˆFSTR4
ˆFSTR5
ˆFSTR6
ˆFSTR7
ˆFSTR8
ˆFSTR9
ˆFSTR10
ˆFSTR11
ˆFSTR12
ˆFSTR13
ˆalgparse
ˆalgunwrap
ˆEQW3
ˆEQW3Edit
ˆEQW3StartEdit
ˆEQW3ViewMargin
ˆEQW3ViewLeftX
Page
234
234
244
244
244
244
244
245
245
244
169
48
344
54
54
54
54
54
55
55
55
311
Addr.
015004
016004
017004
018004
019004
01A004
01B004
01C004
01D004
01E004
01F004
020004
021004
022004
023004
024004
025004
026004
027004
028004
029004
02A004
02B004
02C004
02D004
02E004
02F004
030004
031004
032004
033004
034004
035004
036004
037004
038004
039004
03A004
03B004
03C004
03D004
03F004
040004
041004
042004
043004
044004
045004
Name
ˆEQW3ViewRightX
ˆEQW3ViewLeft
ˆEQW3ViewRight
ˆEQW3ViewRightRPL
ˆEQW3GROB
ˆEQW3GROBStk
ˆEQW3CursorOn
ˆEQW3CursorOff
ˆEQW3Code
ˆEQW3GROBsys
ˆEQW3GROBmini
ˆIfMain
ˆIfSetFieldVisible
ˆIfSetSelected
ˆIfSetGrob
ˆIfSetFieldValue
ˆIfSetCurrentFieldValue
ˆIfGetFieldValue
ˆIfGetCurrentFieldValue
ˆIfGetFieldMessageHan..
ˆIfGetFieldType
ˆIfGetFieldObjectsType
ˆIfGetFieldDecompObject
ˆIfGetFieldChooseData
ˆIfGetFieldChooseDecomp
ˆIfGetFieldResetValue
ˆIfSetFieldResetValue
ˆIfGetFieldInternalVa..
ˆIfDisplayFromData
ˆIfGetNbFields
ˆIfCheckSetValue
ˆIfCheckFieldtype
ˆIfReset
ˆIfSetField
ˆIfKeyChoose
ˆIfKeyEdit
ˆIfKeyTypes
ˆIfKeyCalc
ˆIfKeyInvertCheck
ˆIfONKeyPress
ˆIfEnterKeyPress
ˆIfSetHelpString
ˆIfSetTitle
ˆIfSetTitle2
ˆIfMain2
ˆIfPutFieldsOnStack
ˆIfSetFieldPos
ˆIfGetFieldPos
Page
98
98
98
98
257
258
258
258
258
258
258
258
258
258
258
258
258
259
259
259
259
259
259
259
259
259
259
259
260
260
260
260
260
260
260
260
261
261
261
261
088002 – 0DD006
Addr.
046004
047004
048004
049004
04A004
04B004
04C004
04D004
04E004
067004
068004
069004
06D004
06E004
06F004
070004
08E006
08F006
090006
091006
092006
093006
094006
095006
096006
097006
098006
099006
09A006
09B006
09C006
09D006
09E006
09F006
0A0006
0A1006
0A2006
0A3006
0A4006
0A5006
0A6006
0A7006
0A8006
0A9006
0AA006
0AB006
0AC006
0AD006
Name
ˆIfDisplayFromData2
ˆIfSetAllLabelsMessages
ˆIfSetAllHelpStrings
595
Page
261
261
ˆIfCreateTitleGrob
ˆIfInitDepth
ˆIfTet
261
ˆIfGetPrlgFromTypes
ˆIsUncompressDataString
259
261
ˆKeyLookup
ˆFiler
ˆArbo
ˆRENAME
ˆFILER_MANAGER
ˆFILER_MANAGERTYPE
ˆFontBrowser
ˆBrowseMem.1
ˆBerlekampP
ˆBerlekamp
ˆErrInfRes
ˆErrUndefRes
ˆErrBadDim
ˆALG48MSOLV
ˆGMSOLV
ˆGBASIS
ˆGSOLVE
ˆGFACTOR
ˆGREDUCE
ˆREDUCE
ˆFASTREDUCE
ˆONE{}POLY
ˆTWO{}POLY
ˆTHREE{}POLY
ˆTWO::POLY
ˆ::POLY
ˆ{}POLY
ˆ>TPOLY
ˆ>HPOLY
ˆ>TPOLYN
ˆ>HPOLYN
ˆMKPOLY
ˆONE>POLY
ˆ>POLY
ˆALG48FCTR?
ˆMFactTriv
ˆCheckPNoExt
ˆPPP
ˆPFactor
ˆPSqff
188
188
188
373
373
403
403
403
384
384
384
384
384
384
384
377
377
377
377
377
377
377
378
378
378
378
378
377
374
374
374
374
374
374
Addr.
0AE006
0AF006
0B0006
0B1006
0B2006
0B3006
0B4006
0B5006
0B6006
0B7006
0B8006
0B9006
0BA006
0BB006
0BC006
0BD006
0BE006
0BF006
0C0006
0C1006
0C2006
0C3006
0C4006
0C5006
0C6006
0C7006
0C8006
0C9006
0CA006
0CB006
0CC006
0CD006
0CE006
0CF006
0D0006
0D1006
0D2006
0D3006
0D4006
0D5006
0D6006
0D7006
0D8006
0D9006
0DA006
0DB006
0DC006
0DD006
Name
ˆPHFctr
ˆPHFctr1
ˆPHFctr0
ˆDeCntMulti
ˆDoLS
ˆPNFctr
ˆPSQFF
ˆLiftZAdic
ˆLFCProd
ˆUFactor
ˆUFactor1
ˆMonicLf
ˆDemonicLf
ˆLiftLinear
ˆLiftGeneral
ˆUFactorDeg2
ˆCombineFac
ˆCombProd
ˆCombInit
ˆCombNext
ˆRmCombNext
ˆPFactTriv
ˆVarFactor
ˆPFactPowCnt
ˆPDivLk
ˆPrime+
ˆPrimeˆZFactor
ˆNFactor
ˆNFactorSpc
ˆDupTypeS?
ˆSFactor
ˆSPollard
ˆBFactor
ˆBrentPow
ˆZPrime?
ˆZIsPrime?
ˆSIsPrime?
ˆBIsPrime?
ˆBRabin
ˆZTrialDiv2
ˆZTrialPrime?
ˆZTrialDiv
ˆQMod
ˆQMODSYMext
ˆModPow
ˆZQUOText
ˆZMod
Page
374
374
374
375
375
375
375
375
375
375
375
375
375
376
376
376
376
376
376
376
376
376
376
377
377
332
332
330
330
330
335
330
331
331
331
331
331
331
332
332
332
332
332
372
329
596
Addr.
0DE006
0DF006
0E0006
0E1006
0E2006
0E3006
0E4006
0E5006
0E6006
0E7006
0E8006
0E9006
0EA006
0EB006
0EC006
0ED006
0EE006
0EF006
0F0006
0F1006
0F2006
0F3006
0F4006
0F5006
0F6006
0F7006
0F8006
0F9006
0FA006
0FB006
0FC006
0FD006
0FE006
0FF006
100006
101006
102006
103006
104006
105006
106006
107006
108006
109006
10A006
10B006
10C006
10D006
G. Entries sorted by Address
Name
ˆZDIVext
ˆQRoot
ˆZSQRT
ˆPEvalMod
ˆQAddMod
ˆQSubMod
ˆQMulMod
ˆQDivMod
ˆQInvMod
ˆQGcdMod
ˆQGcdExMod
ˆIsV>V?
ˆPEvalFast?
ˆPZadic
ˆGCDHEUext
ˆH>Z
ˆ#>Z
ˆZ2BIN
ˆCOERCE2Z
ˆZ>S
ˆS>Z
ˆS>Z?
ˆZ>ZH
ˆR>Z
ˆZ>R
ˆDupQIsZero?
ˆQIsZero?
ˆDupZIsOne?
ˆZIsOne?
ˆDupZIsNeg?
ˆZIsNeg?
ˆListPos
ˆAppendList
ˆContains?
ˆSortList
ˆZTrim
ˆZAbs
ˆPNMax
ˆLISTMAXext
ˆZNMax
ˆZNMin
ˆZNLT?
ˆDISTDIVext
ˆDupZIsTwo?
ˆDupZIsEven?
ˆUnivar?
ˆSUnivar?
ˆZBits
Page
329
395
395
395
395
395
395
396
399
380
399
399
328
327
22
22
46
328
328
328
327
31
334
334
334
334
334
334
69
73
137
73
329
329
379
399
329
329
334
372
334
334
380
380
329
Addr.
10E006
10F006
110006
111006
112006
113006
114006
115006
116006
117006
118006
119006
11A006
11B006
11C006
11D006
11E006
11F006
120006
121006
122006
123006
124006
125006
126006
127006
128006
129006
12A006
12B006
12C006
12D006
12E006
12F006
130006
131006
132006
133006
134006
135006
136006
137006
138006
139006
13A006
13B006
13C006
13D006
Name
ˆZBit?
ˆLOPMext
ˆSWAPRMULT
ˆQMul
ˆRMULText
ˆRASOP
ˆSWAPRSUB
ˆQSub
ˆRSUBext
ˆSWAPRADD
ˆQAdd
ˆRADDext
ˆSWAPRDIV
ˆRDIVext
ˆQDiv
ˆR15SIMP
ˆPPow#
ˆRP#
ˆMPext
ˆMP0
ˆMPEXEC
ˆRPext
ˆPREPARext
ˆx+ext
ˆx-ext
ˆx*ext
ˆx=ext
ˆx/ext
ˆ2SYMBINCOMP
ˆxˆext
ˆEXPANDˆ
ˆaddtXROOT
ˆxssSYMXROOT
ˆaddtMIN
ˆxssSYMMIN
ˆaddtMAX
ˆxssSYMMAX
ˆaddt<
ˆxssSYM<?
ˆaddt<=
ˆxssSYM<=?
ˆaddt>
ˆxssSYM>?
ˆaddt>=
ˆxssSYM>=?
ˆaddt==
ˆxssSYM=?
ˆaddt!=
Page
329
421
371
371
371
372
371
371
371
371
371
371
372
372
371
372
372
423
372
422
347
347
347
350
347
72, 325
347
347
362
362
362
363
363
363
363
363
363
0DE006 – 19D006
Addr.
13E006
13F006
140006
141006
142006
143006
144006
145006
146006
147006
148006
149006
14A006
14B006
14C006
14D006
14E006
14F006
150006
151006
152006
153006
154006
155006
156006
157006
158006
159006
15A006
15B006
15C006
15D006
15E006
15F006
160006
161006
162006
163006
164006
165006
166006
167006
168006
169006
16A006
16B006
16C006
16D006
Name
ˆxssSYM#?
ˆaddt%
ˆxssSYM%
ˆaddt%CH
ˆxssSYM%CH
ˆaddt%T
ˆxssSYM%T
ˆaddtMOD
ˆxssSYMMOD
ˆaddtTRNC
ˆxssSYMTRCXY
ˆaddtRND
ˆxssSYMRNDXY
ˆaddtCOMB
ˆxssSYMCOMB
ˆaddtPERM
ˆxssSYMPERM
ˆaddtOR
ˆxssSYMOR
ˆaddtAND
ˆxssSYMAND
ˆaddtXOR
ˆxssSYMXOR
ˆ2LAMBIND
ˆ3LAMBIND
ˆSYMBINCOMP
ˆCKINNERCOMP
ˆDUPCKLEN{}
ˆCKCARCOMP
ˆCARCOMPext
ˆRISCH13
ˆCXRIext
ˆRIXCext
ˆIRXCext
ˆIRXC2
ˆSWAPNDXF
ˆNDXFext
ˆSWAPFXND
ˆFXNDext
ˆQXNDext
ˆNDXQext
ˆTYPEIRRQ?
ˆDTYPEIRRQ?
ˆBESTMATRIXTYPE
ˆ{}TO[]
ˆ[]TO{}
ˆDUPNULL[]?
ˆMDIMS
597
Page
363
363
363
363
363
363
363
363
363
363
363
116
116
72, 325, 359
72
72
73
372
387
333
37
37
379
379
380
380
421
421
326, 421
326, 421
65
338
338
339
64
Addr.
16E006
16F006
170006
171006
172006
173006
174006
175006
176006
177006
178006
179006
17A006
17B006
17C006
17D006
17E006
17F006
180006
181006
182006
183006
184006
185006
186006
187006
188006
189006
18A006
18B006
18C006
18D006
18E006
18F006
190006
191006
192006
193006
194006
195006
196006
197006
198006
199006
19A006
19B006
19C006
19D006
Name
ˆDIMLIMITS
ˆCKSAMESIZE
ˆDTYPENDO?
ˆDTYPFMAT?
ˆCKNUMARRY
ˆ2DMATRIX?
ˆMATRIXDIM
ˆSAMEMATRIX
ˆSAMEMATSCTYPE
ˆCKMATRIXELEM
ˆMATRIX2ARRAY
ˆMATRIX2LIST
ˆLIST2MATRIX
ˆLENMATRIX
ˆXEQARRY>
ˆMATEXPLODE
ˆARRAY2MATRIX
ˆXEQ>ARRY
ˆXEQ>ARRAY1
ˆCKALG
ˆTYPEZ?
ˆDUPTYPEZ?
ˆCK1Z
ˆCK2Z
ˆCK3Z
ˆCK1Cext
ˆC2C%%
ˆZZ2C%%ext
ˆZ2%%
ˆC%>C%%
ˆE%%>C%%
ˆR2Zext
ˆZ2Sext
ˆCKFPOLYext
ˆCK2FPOLY
ˆIDNTLAM?
ˆFLOAT?
ˆCKSYMREALCMP
ˆTYPEIDNTLAM?
ˆREAL?
ˆTYPEREALZINT?
ˆOBJ2REAL
ˆMETAINT?
ˆMETAPOSINT?
ˆOBJINT?
ˆOBJPOSINT?
ˆCKINT>0
ˆZ>#
Page
64
339
339
201
65
339
341
338
338
326
65
338
338
343
65
339
338
65
201
200
200
198, 328
198, 328
198, 328
201, 333
37
37
31
37
37
328
328
326
326
201
201
201
199
201
201
31
78, 334
78, 334
334
334
334
22
598
Addr.
19E006
19F006
1A0006
1A1006
1A2006
1A3006
1A4006
1A5006
1A6006
1A7006
1A8006
1A9006
1AA006
1AB006
1AC006
1AD006
1AE006
1AF006
1B0006
1B1006
1B2006
1B3006
1B4006
1B5006
1B6006
1B7006
1B8006
1B9006
1BA006
1BB006
1BC006
1BD006
1BE006
1BF006
1C0006
1C1006
1C2006
1C3006
1C4006
1C5006
1C6006
1C7006
1C8006
1C9006
1CA006
1CB006
1CC006
1CD006
G. Entries sorted by Address
Name
ˆCLEANIDLAM
ˆssSYMDER
ˆSYMDER
ˆDERIVext
ˆsiSYMDER
ˆDERIVIDNT
ˆDERIVIDNT1
ˆDERIV
ˆMETADERIV
ˆDO>STRID
ˆMETADEROP
ˆMETADER+
ˆMETADERˆMETADER*
ˆMETADER/
ˆMETADERˆ
ˆMETADERFCN
ˆMETADERDER
ˆMETADERI4
ˆMETADERI3
ˆMETADERIFTE
ˆDERARG
ˆMETADEREXP
ˆMETADERLN
ˆMETADERLNP1
ˆMETADERLOG
ˆMETADERALOG
ˆMETADERABS
ˆMETADERINV
ˆMETADERNEG
ˆMETADERSQRT
ˆMETADER&NEG
ˆMETADERSQ
ˆMETADERSIN
ˆMETADERCOS
ˆMETADERTAN
ˆMETADERSINH
ˆMETADERCOSH
ˆMETADERTANH
ˆMETADERASIN
ˆMETADERACOS
ˆMETADERATAN
ˆMETADERASH
ˆMETADERACH
ˆMETADERATH
ˆpshder*
ˆSQRTINVpshd*
ˆckaddt*
Page
326
387
388
388
388
388
54
388
388
388
388
388
388
388
388
388
388
390
388
388
388
389
389
389
389
389
389
388
389
389
389
389
389
389
389
389
389
389
389
389
390
390
390
361
Addr.
1CE006
1CF006
1D0006
1D1006
1D2006
1D3006
1D4006
1D5006
1D6006
1D7006
1D8006
1D9006
1DA006
1DB006
1DC006
1DD006
1DE006
1DF006
1E0006
1E1006
1E2006
1E3006
1E4006
1E5006
1E6006
1E7006
1E8006
1E9006
1EA006
1EB006
1EC006
1ED006
1EE006
1EF006
1F0006
1F1006
1F2006
1F3006
1F4006
1F5006
1F6006
1F7006
1F8006
1F9006
1FA006
1FB006
1FC006
1FD006
Name
ˆckaddt+
ˆckaddtˆVERNUMext
ˆMENUXYext
ˆSAVECASFLAGS
ˆSAFEPURGE
ˆRESTORECASFLAGS
ˆCASFLAGEVAL
ˆFLAGEXPAND
ˆEXPANDBOTH
ˆFLAGFACTOR
ˆFLAGLISTEXEC
ˆFLAGSYMBEXEC
ˆFLAGIDNTEXEC
ˆFLAGINTVX
ˆDERVX
ˆSOLVEXFLOAT
ˆSYMLIMIT
ˆFLAGMATRIXLIMIT
ˆTAYLOR0
ˆFLAGSERIES
ˆPLOTSTK
ˆPLOTADD
ˆFLAGIBP
ˆFLAGPREVAL
ˆMATRIXRISCH
ˆFLAGRISCH
ˆFLAGDERIV
ˆFLAGLAP
ˆFLAGILAP
ˆFLAGDESOLVE
ˆFLAGLDSSOLV
ˆFLAGLDECSOLV
ˆFLAGTEXPAND
ˆFLAGLIN
ˆFLAGTSIMP
ˆFLAGLNCOLLECT
ˆFLAGEXPLN
ˆFLAGSINCOS
ˆFLAGTLIN
ˆFLAGTCOLLECT
ˆFLAGTRIG
ˆFLAGTRIGCOS
ˆFLAGTRIGSIN
ˆFLAGTRIGTAN
ˆFLAGTAN2SC
ˆFLAGHALFTAN
ˆFLAGTAN2SC2
Page
360
361
408
409
408
167
408
408
411
411
411
411
411
411
412
412
412
412
412
412
412
412
412
412
412
412
412
412
412
412
412
412
413
413
413
413
413
413
413
413
413
413
413
413
413
19E006 – 25D006
Addr.
1FE006
1FF006
200006
201006
202006
203006
204006
205006
206006
207006
208006
209006
20A006
20B006
20C006
20D006
20E006
20F006
210006
211006
212006
213006
214006
215006
216006
217006
218006
219006
21A006
21B006
21C006
21D006
21E006
21F006
220006
221006
222006
223006
224006
225006
226006
227006
228006
229006
22A006
22B006
22C006
22D006
Name
ˆFLAGATAN2S
ˆFLAGASIN2T
ˆFLAGASIN2C
ˆFLAGACOS2S
ˆCK&CONVINT
ˆCK&CONV2INT
ˆCONVBACK2INT
ˆCONVBACKINT
ˆSTEPIDIV2
ˆFLAGDIV2
ˆFLAGGCD
ˆPEGCD
ˆIEGCD
ˆABCUV
ˆIABCUV
ˆFLAGLGCD
ˆFLAGLCM
ˆFLAGSIMP2
ˆFLAGPARTFRAC
ˆFLAGPROPFRAC
ˆFLAGPTAYL
ˆFLAGHORNER
ˆEULER
ˆPA2B2
ˆFLAGCHINREM
ˆICHINREM
ˆISPRIME
ˆSOLVE1EQ
ˆSOLVEMANYEQ
ˆZEROS1EQ
ˆZEROSMANYEQ
ˆFCOEF
ˆFROOTS
ˆFACTORS
ˆDIVIS
ˆSTUDMULT
ˆSTUDDIV
ˆrref
ˆFLAGQXA
ˆFLAGAXQ
ˆFLAGGAUSS
ˆFLAGSYLVESTER
ˆPCAR
ˆMADNOCK
ˆSYSTEM
ˆVANDERMONDE
ˆHILBERTNOCK
ˆFLAGJORDAN
599
Page
413
413
413
413
328
328
328
328
413
413
413
414
414
414
414
414
414
414
414
414
414
414
330
414
414
411
414
414
414
415
415
415
415
415
415
345
346
346
346
346
415
415
415
415
345
Addr.
22E006
22F006
230006
231006
232006
233006
234006
235006
236006
237006
238006
239006
23A006
23B006
23C006
23D006
23E006
23F006
240006
241006
242006
243006
244006
245006
246006
247006
248006
249006
24A006
24B006
24C006
24D006
24E006
24F006
250006
251006
252006
253006
254006
255006
256006
257006
258006
259006
25A006
25B006
25C006
25D006
Name
ˆCURL
ˆDIVERGENCE
ˆLAPLACIAN
ˆHESSIAN
ˆHERMITE
ˆTCHEBNOCK
ˆLEGENDRE
ˆLAGRANGE
ˆFOURIER
ˆSIGNE
ˆTABVAR
ˆFLAGDIVPC
ˆFLAGTRUNC
ˆFLAGSEVAL
ˆXNUM
ˆREORDER
ˆUSERLVAR
ˆUSERLIDNT
ˆEXLR
ˆADDTMOD
ˆMADDTMOD
ˆSUBTMOD
ˆMSUBTMOD
ˆMULTMOD
ˆMAT*SCMOD
ˆSC*MATMOD
ˆMAT*MATMOD
ˆDIVMOD
ˆGCD1MOD
ˆINVMOD
ˆMINVMOD
ˆFLAGDIV2MOD
ˆFLAGPOWMOD
ˆFLAGMPOWMOD
ˆEXPAMOD
ˆFLAGEXPAMOD
ˆFLAGFACTORMOD
ˆMFACTORMOD
ˆRREFMOD
ˆKEYEVAL
ˆLIFCext
ˆEvalNoCKx*
ˆEvalNoCKx+
ˆEvalNoCKxˆEvalNoCKx/
ˆEvalNoCKxˆ
ˆEvalNoCKxCHS
ˆEvalNoCKxINV
Page
415
415
415
415
415
415
415
415
415
400
415
416
416
416
416
416
416
416
356
416
416
416
416
416
395
395
208
395
417
417
417
417
417
417
417
600
Addr.
25E006
25F006
260006
261006
262006
263006
264006
265006
266006
267006
268006
269006
26A006
26B006
26C006
26D006
26E006
26F006
270006
271006
272006
273006
274006
275006
276006
277006
278006
279006
27A006
27B006
27C006
27D006
27E006
27F006
280006
281006
282006
283006
284006
285006
286006
287006
288006
289006
28A006
28B006
28C006
28D006
G. Entries sorted by Address
Name
ˆEvalNoCKxMOD
ˆEvalNoCKxPERM
ˆEvalNoCKxCOMB
ˆEvalNoCKxOR
ˆEvalNoCKxAND
ˆEvalNoCKxXOR
ˆEvalNoCKxXROOT
ˆTABVALext
ˆTOLISText
ˆFROMLISText
ˆPFEXECext
ˆLOP1ext
ˆLOPAext
ˆLISTSECOext
ˆrpnQOBJext
ˆCK1TONOext
ˆCOLCext
ˆSYMCOLCT
ˆCOLC1
ˆCOLC2
ˆMULMULText
ˆMETAMULMULT
ˆMETAMM2
ˆCOMPLISText
ˆMETACOMPRIM
ˆMETACOMP0
ˆMETACOMP1
ˆADDLISText
ˆDIVISext
ˆFACT1ext
ˆFACTOext
ˆZFACTO
ˆSOLVext
ˆFRND
ˆBICARREE?
ˆREALBICAR
ˆFEVIDENText
ˆEVIDENText
ˆEVIDSOLV
ˆDEG2ext
ˆMETADEG2
ˆMETADEG1
ˆDEG1
ˆFDEG2ext
ˆPIext
ˆRACTOFACext
ˆFACTORACext
ˆRFACText
Page
417
418
418
418
418
418
418
418
418
418
421
421
421
421
423
421
355
381
381
381
381
381
381
381
381
381
381
382
382
382
382
377
382
382
382
382
382
382
382
73
383
383
383
Addr.
28E006
28F006
290006
291006
292006
293006
294006
295006
296006
297006
298006
299006
29A006
29B006
29D006
29E006
29F006
2A0006
2A1006
2A2006
2A3006
2A4006
2A5006
2A6006
2A7006
2A8006
2A9006
2AA006
2AB006
2AC006
2AD006
2AE006
2AF006
2B0006
2B1006
2B2006
2B3006
2B4006
2B5006
2B6006
2B7006
2B8006
2B9006
2BA006
2BB006
2BC006
2BD006
2BE006
Name
ˆRFACT2ext
ˆRFACTSTEP3
ˆRFACTSTEP5
ˆMETASOLV
ˆMETASOLVOUT
ˆMETASOLV2
ˆMETASOLV4
ˆADDMULTIPL
ˆFACTOOBJext
ˆSLVARext
ˆSIMPLIFY
ˆSIMP1ext
ˆSYMEXPAN
ˆSIMPVAR
ˆSIMPIDNT
ˆRCLALLIDNT
ˆRCL1IDNT
ˆSIMPSYMBS
ˆSYMINTEGRAL
ˆSIMPUSERFCN
ˆEVALUSERFCN
ˆSIMP|
ˆDENOLCMext
ˆMETADENOLCM
ˆSWPSIMPNDXF
ˆSIMPNDXFext
ˆSIMPext
ˆSIMPEXTOK
ˆMAKEPROFOND
ˆSLOWSIMP2L
ˆSIMPGCDext
ˆSIMP3ext
ˆSIMP3LISText
ˆSIMP3LSTSLOW
ˆLPGCDext
ˆSLOWGCDext
ˆQGcd
ˆGCDext
ˆCGCDext
ˆCMODext
ˆZGCDext
ˆZGcd
ˆTSIMP2ext
ˆTSIMPext
ˆTSIMP3ext
ˆLASTCOMP
ˆSQFF2ext
ˆPPZ
Page
383
383
383
383
383
383
384
384
353
354
354
354
354
423
424
354
354
354
354
358
358
424
424
354
378
354
354
358
358
358
333
424
329
329
354
354
355
68
424
424
25E006 – 31E006
Addr.
2BF006
2C0006
2C1006
2C2006
2C3006
2C4006
2C5006
2C6006
2C7006
2C8006
2C9006
2CA006
2CB006
2CC006
2CD006
2CE006
2CF006
2D0006
2D1006
2D2006
2D3006
2D4006
2D5006
2D6006
2D7006
2D8006
2D9006
2DA006
2DB006
2DC006
2DD006
2DE006
2DF006
2E0006
2E1006
2E2006
2E3006
2E4006
2E5006
2E6006
2E7006
2E8006
2E9006
2EA006
2EB006
2EC006
2ED006
2EE006
Name
ˆPZHSTR
ˆHORNER1ext
ˆPEval
ˆRISCHext
ˆrisch/
ˆrischABS
ˆIBP
ˆSQRT_IN?
ˆIS_SQRT?
ˆXROOT_IN?
ˆIS_XROOT?
ˆSTOPRIMIT
ˆCONTAINS_LN?
ˆISNT_IDNT?
ˆRISCHPF
ˆRISCHRAT
ˆrischlogpart
ˆPREVALext
ˆWARNSING
ˆINText
ˆINT3
ˆFOURIERext
ˆ3DUP
ˆ#3+ROLL
ˆ2DROPTRUE
ˆIRRQ#ULTIMATE
ˆLESSCOMPLEX?
ˆLISTIRRQ
ˆLIST1i-1-i
ˆLIST10-10
ˆTABLECOSext
ˆTABLETANext
ˆDROPZ1
ˆDROPZ0
ˆTESTINFINI
ˆINFINIext
ˆMINUSINFext
ˆPLUSINFext
ˆ?ext
ˆPOSINFext
ˆPOSUNDEFext
ˆpisur2
ˆpisur-2
ˆpi
ˆmetapi
ˆ'xPI
ˆmetai
ˆ'xi
601
Page
424
424
424
390
424
424
424
424
424
390
390
390
390
424
106
108
136
422
424
422
425
425
327
327
419
419
419
419
419
419
420
420
420
420
420
420
420
420
Addr.
2EF006
2F0006
2F1006
2F2006
2F3006
2F4006
2F5006
2F6006
2F7006
2F8006
2F9006
2FA006
2FB006
2FC006
2FD006
2FE006
2FF006
300006
301006
302006
303006
304006
305006
306006
307006
308006
309006
30A006
30B006
30C006
30D006
30E006
30F006
310006
311006
312006
313006
314006
315006
316006
317006
318006
319006
31A006
31B006
31C006
31D006
31E006
Name
ˆipi
ˆmetaipi
ˆmeta-pi
ˆmetapi/2
ˆmetapi/4
ˆmeta-pi/2
ˆmeta-pi/4
ˆpifois2
ˆdeuxipi
ˆmetapi*2
ˆbase_ln
ˆmeta_e
ˆNEXTPext
ˆINSERT{}N
ˆCOMPRIMext
ˆTCOLLECT
ˆSIGMAEXPext
ˆLINEXPext
ˆSIGMAEXP2ext
ˆTCHEBext
ˆSINEXPA
ˆMETASINEXPA
ˆSINEXPA+
ˆSINEXPAˆSINEXPA*
ˆSINEXPA*1
ˆCOSEXPA
ˆMETACOSEXPA
ˆCOSEXPA+
ˆCOSEXPAˆCOSEXPA*
ˆCOSEXPA*1
ˆEXPEXPA
ˆMETAEXPEXPA
ˆEXPEXPA+
ˆEXPEXPAˆEXPEXPA*
ˆEXPEXPANEG
ˆEXPEXPA*1
ˆLNEXPA
ˆMETALNEXPA
ˆLNEXPA*
ˆLNEXPA/
ˆLNEXPAˆ
ˆLINEXPA
ˆMTRIG2SYMB
ˆLNCOLCext
ˆMETATANEXPA
Page
420
420
420
420
420
420
420
420
420
420
420
420
72
72
73
355
355
355
355
378
355
368
368
368
369
369
355
369
369
369
369
369
355
369
369
369
369
369
369
355
369
369
369
369
355
355
355
369
602
Addr.
31F006
320006
321006
322006
323006
324006
325006
326006
327006
328006
329006
32A006
32B006
32C006
32D006
32E006
32F006
330006
331006
332006
333006
334006
335006
336006
337006
338006
339006
33A006
33B006
33C006
33D006
33E006
33F006
340006
341006
342006
343006
344006
345006
346006
347006
348006
349006
34A006
34B006
34C006
34D006
34E006
G. Entries sorted by Address
Name
ˆTEXPAext
ˆMAT+
ˆMADD
ˆMATˆMSUB
ˆVADD
ˆVSUB
ˆMAT*
ˆMMMULT
ˆMVMULT
ˆSCL*MAT
ˆMAT*SCL
ˆVPMULT
ˆMATˆ
ˆMATCROSS
ˆMATDOT
ˆRNDARRY
ˆTRCARRY
ˆYext
ˆMAT/SCL
ˆMAT/
ˆMATCHS
ˆMATSQUARE
ˆMATCONJ
ˆMATRE
ˆMATIM
ˆMATTRACE
ˆMATTRN
ˆMATTRAN
ˆmattran
ˆmattrn
ˆMATSUB
ˆsubmeta
ˆMATREPL
ˆMATREDIM
ˆVRRDM
ˆVRRDMmeta
ˆMATRANM
ˆDIMRANM
ˆMATDET
ˆMATRDET
ˆMATFNORM
ˆMATRNORM
ˆMATCNORM
ˆMATRREF
ˆMATREF
ˆMATRANK
ˆMATINV
Page
356
339
339
339
339
339
339
339
339
339
339
339
339
340
340
340
340
340
65
340
340
340
340
340
340
340
340
340
65
340
340
343
78
343
337
338
338
337
337
340
340
340
340
340
341
341
341
340
Addr.
34F006
350006
351006
352006
353006
354006
355006
356006
357006
358006
359006
35A006
35B006
35C006
35D006
35E006
35F006
360006
361006
362006
363006
364006
365006
366006
367006
368006
369006
36A006
36B006
36C006
36D006
36E006
36F006
370006
371006
372006
373006
374006
375006
376006
377006
378006
379006
37A006
37B006
37C006
37D006
37E006
Name
ˆMATREFRREF
ˆINXREDext
ˆMETAMATRED
ˆMETAPIVOT
ˆPIVOTNORM
ˆPIVOTFLOAT
ˆSYSText
ˆSTOSYSText
ˆMAKESYSText
ˆVARGENext
ˆNULLVECTOR?
ˆFINDELN
ˆPULLEL[S]
ˆBANGARRY
ˆPUT[]
ˆARSIZE
ˆMATRIX>DIAG
ˆMATRIXDIAG>
ˆla+ELEMsym
ˆINSERTROW[]
ˆinsertrow[]
ˆINSERTCOL[]
ˆINSERT[]ROW[]
ˆINSERT[]COL[]
ˆMATRIXRCI
ˆMATRIXRCIJ
ˆMATRIXCSWAP
ˆMATRIXRSWAP
ˆMATRIX-ROW
ˆMETAMAT-ROW
ˆMATRIX-COL
ˆMETAMATCSWAP
ˆMETAMATRSWAP
ˆSTOMAText
ˆMATIDN
ˆMATCON
ˆMAKEARRY
ˆOBJDIMS2MAT
ˆLCPROG2M
ˆMAKE2DMATRIX
ˆmake2dmatrix
ˆADDMATOBJext
ˆVUNARYOP
ˆVBINARYOP
ˆPEVAL
ˆMATEGVL
ˆROOTM2ROOT
ˆMADJ
Page
341
341
341
341
341
342
342
342
339
342
342
343
343
64
343
343
343
343
343
344
344
344
341
341
344
344
344
344
344
344
344
344
337
337
337
337
337
337
337
345
345
345
345
345
385
345
31F006 – 3DE006
Addr.
37F006
380006
381006
382006
383006
384006
385006
386006
387006
388006
389006
38A006
38B006
38C006
38D006
38E006
38F006
390006
391006
392006
393006
394006
395006
396006
397006
398006
399006
39A006
39B006
39C006
39D006
39E006
39F006
3A0006
3A1006
3A2006
3A3006
3A4006
3A5006
3A6006
3A7006
3A8006
3A9006
3AA006
3AB006
3AC006
3AD006
3AE006
Name
ˆMATEGV
ˆJORDAN
ˆQXA
ˆAXQ
ˆGAUSS
ˆSYLVESTER
ˆmetasplit
ˆm-1&m+1
ˆmeta1/meta
ˆ1&meta
ˆmeta/2
ˆaddt2
ˆaddt/
ˆmeta2*
ˆmeta1-sq
ˆmetasq+1
ˆmetasq-1
ˆmeta-1
ˆNDROPZERO
ˆ2DROPZ0
ˆmetaadd
ˆmetasub
ˆmetamult
ˆmetadiv
ˆmetaˆ
ˆaddtˆ
ˆmetapow
ˆmetafraction?
ˆmetaxroot
ˆtop&addt*
ˆtop&addt/
ˆaddti
ˆmetaEQUAL?
ˆ2metaundef#
ˆ1metaundef#
ˆmetaundef
ˆ2metainf#
ˆ1metainf#
ˆmetainftype
ˆunsignedinf
ˆplusinf
ˆNDROPplusinf
ˆminusinf
ˆNDROPminusinf
ˆMetaAdd
ˆxssSYM+
ˆMetaSub
ˆxssSYM-
603
Page
345
345
345
345
346
346
78
359
359
359
359
359
359
359
360
360
360
360
76
327
360
360
361
361
361
360
361
370
362
360
360
360
78
367
367
367
368
367
368
368
368
368
368
368
360
361
Addr.
3AF006
3B0006
3B1006
3B2006
3B3006
3B4006
3B5006
3B6006
3B7006
3B8006
3B9006
3BA006
3BB006
3BC006
3BD006
3BE006
3BF006
3C0006
3C1006
3C2006
3C3006
3C4006
3C5006
3C6006
3C7006
3C8006
3C9006
3CA006
3CB006
3CC006
3CD006
3CE006
3CF006
3D0006
3D1006
3D2006
3D3006
3D4006
3D5006
3D6006
3D7006
3D8006
3D9006
3DA006
3DB006
3DC006
3DD006
3DE006
Name
ˆMetaMul
ˆxssSYM*
ˆMetaDiv
ˆxssSYM/
ˆNDROPZ0
ˆNDROPZ1
ˆMetaPow
ˆxssSYMˆ
ˆMetaNeg
ˆxSYMCHS
ˆmetaneg
ˆmetackneg
ˆmetasimp
ˆmetapi?
ˆmetaCOMPARE
ˆSTRICTmetaCOMPARE
ˆEQUALPOSMETA
ˆEQUALPOS2META
ˆvgerxssSYMSUM
ˆDISTRIB/
ˆmetareal?
ˆModExpa
ˆModAdd
ˆModSub
ˆModMul
ˆModDiv
ˆModDiv2
ˆModInv
ˆModGcd
ˆModLGCD
ˆModLOPD
ˆMODULOMODext
ˆMODULOMAText
ˆMod
ˆModFctr
ˆPARTFRAC
ˆINPARTFRAC
ˆPARTFRACRAT
ˆPFext
ˆIEGCDext
ˆREGCDext
ˆEGCDext
ˆINEGCD
ˆEGCDSWAP
ˆEGCDNEWG
ˆPDer
ˆINTEGRext
ˆLRDMext
Page
361
361
327
327
362
362
362
362
368
370
370
370
78
78
394
368
370
372
372
373
373
373
373
373
373
329
391
391
330
380
380
330
387
391
378
604
Addr.
3DF006
3E0006
3E1006
3E2006
3E3006
3E4006
3E5006
3E6006
3E7006
3E8006
3E9006
3EA006
3EB006
3EC006
3ED006
3EE006
3EF006
3F0006
3F1006
3F2006
3F3006
3F4006
3F5006
3F6006
3F7006
3F8006
3F9006
3FA006
3FB006
3FC006
3FD006
3FE006
3FF006
400006
401006
402006
403006
404006
405006
406006
407006
408006
409006
40A006
40B006
40C006
40D006
40E006
G. Entries sorted by Address
Name
ˆRRDMext
ˆDEGREext
ˆFHORNER
ˆHORNext
ˆHORN1
ˆMHORNext
ˆPTAYLext
ˆLAGRANGEext
ˆPSEUDOPREP
ˆPSEUDODIV
ˆIDIV2
ˆBESTDIV2
ˆCDIV2ext
ˆQUOText
ˆNEWDIVext
ˆQDivRem
ˆDIV2LISText
ˆDIVOBJext
ˆDIVMETAOBJ
ˆLOPDext
ˆQUOTOBJext
ˆDIVISIBLE?
ˆQDiv?
ˆFastDiv?
ˆPOTENCEext
ˆPDIV2ext
ˆPSetSign
ˆPLCZ
ˆHSECO2RCext
ˆSECO2CMPext
ˆSECO2CMPPOL
ˆSECO2CMPCART
ˆVALOBJext
ˆR2SYM
ˆVAL2ext
ˆINVAL2
ˆMETAVAL2
ˆVAL1
ˆVAL1M
ˆaddt0meta
ˆHALFTAN
ˆCOS2TAN/2
ˆcos2tan/2
ˆ1-xˆ2/1+xˆ2
ˆSIN2TAN/2
ˆsin2tan/2
ˆ2x/1+xˆ2
ˆTAN2TAN/2
Page
378
378
378
378
378
372
379
422
357
357
357
357
372
372
420
88, 361
420
357
357
357
357
358
372
372
422
422
423
325
423
423
423
423
423
77
356
351
365
365
351
365
365
351
Addr.
40F006
410006
411006
412006
413006
414006
415006
416006
417006
418006
419006
41A006
41B006
41C006
41D006
41E006
41F006
420006
421006
422006
423006
424006
425006
426006
427006
428006
429006
42A006
42B006
42C006
42D006
42E006
42F006
430006
431006
432006
433006
434006
435006
436006
437006
438006
439006
43A006
43B006
43C006
43D006
43E006
Name
ˆtan2tan/2
ˆaddtTAN/2
ˆTRIGTAN
ˆCOS2TAN
ˆcos2tan
ˆSIN2TAN
ˆsin2tan
ˆTRIGext
ˆHYP2EXPext
ˆEXPLNext
ˆSERIESEXPLN
ˆLNP12LN
ˆLOG2LN
ˆALOG2EXP
ˆEXPM2EXP
ˆSQRT2LNEXP
ˆsqrt2lnexp
ˆTAN2EXP
ˆtan2exp
ˆASIN2LN
ˆasin2ln
ˆACOS2LN
ˆacos2ln
ˆTAN2SCext
ˆTAN2SC
ˆsin/cos
ˆSIN2TCext
ˆSIN2TC
ˆcos*tan
ˆCOS2ext
ˆsqrt1-sinˆ2
ˆSIN2ext
ˆsqrt1-cosˆ2
ˆATAN2Sext
ˆATAN2ASIN
ˆatan2asin
ˆASIN2Text
ˆASIN2ATAN
ˆasin2atan
ˆASIN2Cext
ˆASIN2ACOS
ˆpi/2-acos
ˆpi/2-meta
ˆACOS2Sext
ˆpi/2-asin
ˆACOS2ASIN
ˆATAN2LNext
ˆatan2ln
Page
366
366
356
351
366
351
366
356
356
356
356
351
351
351
351
351
351
351
366
351
366
351
366
356
351
366
356
351
366
351
366
351
366
356
352
366
356
352
366
357
352
366
366
357
366
352
352
366
3DF006 – 49F006
Addr.
43F006
440006
441006
442006
443006
444006
445006
446006
447006
448006
449006
44A006
44B006
44C006
44D006
44E006
44F006
450006
451006
452006
453006
454006
455006
456006
458006
459006
45A006
45B006
45C006
45D006
45E006
45F006
460006
461006
462006
463006
464006
465006
466006
467006
468006
469006
46A006
46B006
46C006
46D006
46E006
46F006
Name
ˆTAN2SC2ext
ˆTAN2SC2
ˆ2*1-cos/sin
ˆTAN2CS2
ˆ2*sin/1+cos
ˆSIN2EXPext
ˆsin2exp
ˆCOS2EXPext
ˆcos2exp
ˆSINH2EXPext
ˆsinh2exp
ˆCOSH2EXPext
ˆcosh2exp
ˆTANH2EXPext
ˆtanh2exp
ˆASINH2LNext
ˆasinh2ln
ˆACOSH2LNext
ˆacosh2ln
ˆATANH2LNext
ˆatanh2ln
ˆXROOT2ext
ˆxroot2expln
ˆLN2ext
ˆexp2sincos
ˆmetai*
ˆLN2ATAN
ˆVAR=LIST
ˆIDNTEXEC
ˆSYMISOL
ˆSYMQFORM
ˆLISTEXEC
ˆLISTEXEC1
ˆSECOEXEC
ˆEQUATION?
ˆUSERFCN?
ˆSYMBEXEC
ˆMEVALext
ˆCASNUMEVAL
ˆCASCOMPEVAL
ˆREPLACE2BY1
ˆNR_REPLACE
ˆSYMBWHERE
ˆCASCRUNCH
ˆAPPROXCOMPEVAL
ˆLIMIText
ˆREWRITEIFINF
ˆSYMTAYLOR
605
Page
357
352
366
352
367
352
367
352
367
352
367
352
367
352
367
352
367
352
367
352
367
352
367
357
367
360
352
353
423
421
421
421
86
86
353
353
353
353
353
353
353
353
386
Addr.
470006
471006
472006
473006
474006
475006
476006
477006
478006
479006
47A006
47B006
47C006
47D006
47E006
47F006
480006
481006
482006
483006
484006
485006
486006
487006
488006
489006
48A006
48B006
48C006
48D006
48E006
48F006
490006
491006
492006
493006
494006
495006
496006
497006
498006
499006
49A006
49B006
49C006
49D006
49E006
49F006
Name
ˆSYMPAPRX
ˆTRUNCDL
ˆLIMSERIES!
ˆLIMITX!
ˆLIMITNOVX!
ˆLIMERR0!
ˆLIMERR1!
ˆLIMIT!
ˆLIMSTEP1!
ˆLIMSTEP2!
ˆLIMSTEP3!
ˆLIMSTEP4!
ˆLIMLIM!
ˆn{}N
ˆLIMLIM1!
ˆLIMCMPL!
ˆLIMEQUFR!
ˆLIMEQU!
ˆLIMEQU0!
ˆLIM+-!
ˆLIMERR10!
ˆLIMNEG!
ˆLIMRAC!
ˆLIMINV!
ˆLIM/!
ˆLIMPOW!
ˆLIMSQ!
ˆLIM*!
ˆLIMDIVPC!
ˆDIVPC!
ˆLIMPROFEND!
ˆLIMPROF!
ˆLIM%#!
ˆLIMPROF0!
ˆLIMPROF1!
ˆLIMPROF2!
ˆLIMINVLN!
ˆLIMLN!
ˆLIMEXP!
ˆLIMSINCOS!
ˆLIMATAN!
ˆLIMASIN!
ˆLIMSQRT!
ˆLIMFLOOR!
ˆLIMABS!
ˆLPROF!
ˆLIM#VARX!
ˆLIMBETA!
Page
386
386
386
386
386
386
386
386
387
387
387
387
387
606
Addr.
4A0006
4A1006
4A2006
4A3006
4A4006
4A5006
4A6006
4A7006
4A8006
4A9006
4AA006
4AB006
4AC006
4AD006
4AE006
4AF006
4B0006
4B1006
4B2006
4B3006
4B4006
4B5006
4B6006
4B7006
4B8006
4B9006
4BA006
4BB006
4BC006
4BD006
4BE006
4BF006
4C0006
4C1006
4C2006
4C3006
4C4006
4C5006
4C6006
4C7006
4C8006
4C9006
4CA006
4CB006
4CC006
4CD006
4CE006
4CF006
G. Entries sorted by Address
Name
ˆLIMALPHA!
ˆHORNEXP!
ˆHORNCOS!
ˆHORNSIN!
ˆLIMSC0!
ˆLIMSC1!
ˆHORNATAN!
ˆLIMATAS!
ˆHORNASIN!
ˆHORNASIN1!
ˆHORNLN!
ˆLNOBJ!
ˆNEWLIMHORN
ˆLIMHORN!
ˆLRDM!
ˆLIMDL!
ˆLIMDLINF!
ˆLIMINFSIGN!
ˆLIMMAX!
ˆLIMCOMP!
ˆVARCOMP2!
ˆLIMSORT!
ˆVARCOMP!
ˆVARCOMPLN!
ˆVARCOMP3!
ˆVARCOMP31!
ˆVARCOMP32!
ˆVARCOMP33!
ˆLIMERR6!
ˆLIMVALOBJ!
ˆLIMVAL!
ˆEQUIV!
ˆLVARXNX2!
ˆSIMP1!
ˆFindCurVar
ˆLIMVAR!
ˆVAR%
ˆISOL1
ˆISOLALL
ˆISOL2ext
ˆBEZOUTMSOLV
ˆROOT{}N
ˆMHORNER
ˆMHORNER1
ˆSQFFext
ˆMSQFF
ˆ%1TWO
ˆMZSQFF
Page
387
387
387
387
387
387
387
387
387
396
396
396
396
396
396
396
396
396
396
396
Addr.
4D0006
4D1006
4D2006
4D3006
4D4006
4D5006
4D6006
4D7006
4D8006
4D9006
4DA006
4DB006
4DC006
4DD006
4DE006
4DF006
4E0006
4E1006
4E2006
4E3006
4E4006
4E5006
4E6006
4E7006
4E8006
4E9006
4EA006
4EB006
4EC006
4ED006
4EE006
4EF006
4F0006
4F1006
4F2006
4F3006
4F4006
4F5006
4F6006
4F7006
4F8006
4F9006
4FA006
4FB006
4FC006
4FD006
4FE006
4FF006
Name
ˆMZSQFF1
ˆMSECOSQFF
ˆMLISTSQFF
ˆMETASQFFext
ˆSECOSQFFext
ˆCSQFFext
ˆSUMSQRext
ˆVXXLext
ˆMETALISTVXXL
ˆVXXLFext
ˆVXXL1ext
ˆVXXL0
ˆVXXL2NR
ˆVXXL2
ˆLIDNText
ˆLVARXNXext
ˆISPOLYNOMIAL?
ˆ2POLYNOMIAL?
ˆVXINDEP?
ˆLVARXNX2ext
ˆRLVARext
ˆLLVARDext
ˆVXLVARext
ˆLVARext
ˆVX>LVARext
ˆVX>
ˆVX!
ˆprepvarlist
ˆLIDNTLVAR
ˆLISTOPRAC
ˆLISTOPext
ˆLISTOPSQRT
ˆLVARDext
ˆ>VARLIST
ˆDEPTHext
ˆDEPTHOBJext
ˆTRIMext
ˆPTrim
ˆTRIMOBJext
ˆNEWTRIMext
ˆ>POLYTRIM
ˆELMGext
ˆSWAPRNEG
ˆQNeg
ˆRNEGext
ˆSWAPRRE
ˆRREext
ˆSWAPRIM
Page
396
425
397
397
333, 422
333
333
325
325
325
326
326
326
326
397
397
397
397
397
397
397
397
397
398
398
398
73
398
398
398
398
398
398
398
378
378
398
399
399
399
348
347
347
348
348
348
4A0006 – 55F006
Addr.
500006
501006
502006
503006
504006
505006
506006
507006
508006
509006
50A006
50B006
50C006
50D006
50E006
50F006
510006
511006
512006
513006
514006
515006
516006
517006
518006
519006
51A006
51B006
51C006
51D006
51E006
51F006
520006
521006
522006
523006
524006
525006
526006
527006
528006
529006
52A006
52B006
52C006
52D006
52E006
52F006
Name
ˆRIMext
ˆxREext
ˆxSYMRE
ˆxIMext
ˆxSYMIM
ˆRCONJext
ˆaddtCONJ
ˆxSYMCONJ
ˆQCONJext
ˆQABSext
ˆRABSext
ˆZABS
ˆCZABS
ˆxABSext
ˆaddtABS
ˆxSYMABS
ˆaddtABSEXACT
ˆaddtSIGN
ˆxSYMSIGN
ˆaddtARG
ˆxSYMARG
ˆARG2
ˆINTERNALARG2
ˆQUADRANT
ˆCNORMext
ˆCXIRext
ˆQNORMext
ˆSXSQRext
ˆXSQRext
ˆCK%%SQRT
ˆC%%SQRT
ˆZINTSQRT
ˆSHALT
ˆCKLN
ˆxLNext
ˆaddtLN
ˆxSYMLN
ˆEXPANDLN
ˆCMPLXLN
ˆLNATANext
ˆREALLN
ˆxEXPext
ˆxINVext
ˆxvext
ˆxCOSext
ˆxSINext
ˆxTANext
ˆxCOSHext
607
Page
348
348
362
348
362
348
363
422
422
348
329
37
348
362
362
362
362
38
38
333
422
348
348
34
38
348
349
363
349
349
349
349
349
348
348
349
349
349
349
Addr.
530006
531006
532006
533006
534006
535006
536006
537006
538006
539006
53A006
53B006
53C006
53D006
53E006
53F006
540006
541006
542006
543006
544006
545006
546006
547006
548006
549006
54A006
54B006
54C006
54D006
54E006
54F006
550006
551006
552006
553006
554006
555006
556006
557006
558006
559006
55A006
55B006
55C006
55D006
55E006
55F006
Name
ˆxSINHext
ˆxTANHext
ˆxASINext
ˆxACOSext
ˆxATANext
ˆaddtCOS
ˆxSYMCOS
ˆaddtSIN
ˆxSYMSIN
ˆaddtTAN
ˆxSYMTAN
ˆaddtSINACOS
ˆaddtASIN
ˆxSYMASIN
ˆaddtACOS
ˆxSYMACOS
ˆaddtATAN
ˆxSYMATAN
ˆaddtSINH
ˆxSYMSINH
ˆaddtCOSH
ˆxSYMCOSH
ˆaddtTANH
ˆxSYMTANH
ˆxATANHext
ˆaddtATANH
ˆxSYMATANH
ˆxASINHext
ˆaddtASINH
ˆxSYMASINH
ˆxACOSHext
ˆaddtACOSH
ˆxSYMACOSH
ˆaddtSQRT
ˆxSYMSQRT
ˆxSQext
ˆaddtSQ
ˆxSYMSQ
ˆaddtINV
ˆxSYMINV
ˆaddtEXP
ˆxSYMEXP
ˆaddtD->R
ˆxSYMD>R
ˆaddtR->D
ˆxSYMR>D
ˆaddtFLOOR
ˆxSYMFLOOR
Page
350
350
349
349
349
363
349
364
349
364
349
364
364
349
364
349
364
349
364
350
364
349
364
350
350
364
350
350
364
350
349
364
350
364
348
348
364
348
364
348
364
364
364
365
365
350
608
Addr.
560006
561006
562006
563006
564006
565006
566006
567006
568006
569006
56A006
56B006
56C006
56D006
56E006
56F006
570006
571006
572006
573006
574006
575006
576006
577006
578006
579006
57A006
57B006
57C006
57D006
57E006
57F006
580006
581006
582006
583006
584006
585006
586006
587006
588006
589006
58A006
58B006
58C006
58D006
58E006
58F006
G. Entries sorted by Address
Name
ˆaddtCEIL
ˆxSYMCEIL
ˆaddtIP
ˆxSYMIP
ˆaddtFP
ˆxSYMFP
ˆaddtXPON
ˆxSYMXPON
ˆaddtMANT
ˆxSYMMANT
ˆaddtLNP1
ˆxSYMLNP1
ˆaddtLOG
ˆxSYMLOG
ˆaddtALOG
ˆxSYMALOG
ˆaddtEXPM
ˆxSYMEXPM1
ˆfactorial
ˆfacts
ˆaddtFACT
ˆxSYMFACT
ˆfactzint
ˆaddtNOT
ˆxSYMNOT
ˆVerbose1
ˆVerbose2
ˆVerbose3
ˆVerboseN
ˆGETERABLEMSG
ˆERABLEERROR
ˆCANTFACTOR
ˆTRANSCERROR
ˆNONUNARYERR
ˆINTERNALERR
ˆINVALIDOP
ˆISOLERR
ˆNONINTERR
ˆINTVARERR
ˆZ>#ERR
ˆZ<0ERR
ˆVXINDEPERR
ˆNONPOLYSYST
ˆCOMPLEXERR
ˆVALMUSTBE0
ˆSWITCHNOTALLOWED
ˆERR$EVALext
ˆSys1IT
Page
365
350
365
350
365
350
365
350
365
350
365
350
365
350
365
350
365
350
350
350
365
350
330
365
350
417
417
417
417
403
403
403
403
403
403
403
404
404
404
404
404
404
404
404
404
404
404
404
Addr.
001007
002007
003007
004007
005007
006007
007007
008007
009007
00A007
00B007
00C007
00D007
073007
074007
075007
076007
077007
078007
079007
07A007
07B007
07C007
07D007
07E007
07F007
080007
081007
082007
083007
084007
085007
086007
087007
088007
089007
08A007
08B007
08C007
08D007
08E007
08F007
090007
091007
092007
093007
094007
095007
Name
ˆListToArry
ˆArryToMatrix
ˆArryToList
ˆDIMS
ˆRunDoOldMatrix
ˆRunDoNewMatrix
ˆDoNewMatrixReal
ˆDoNewMatrixCplx
ˆDoOldMatrixReal
ˆDoOldMatrixCplx
Page
65
65
338
ˆDoNewMatrixRealOrCplx
ˆDEB.MATRIX
ˆDEB.MATRIXTYPE
ˆQpiZ
ˆQPI
ˆQpiSym
ˆQpiArry
ˆQpiList
ˆQpi
ˆQpi%
ˆGetRoot
ˆApprox
ˆ#FACT
ˆCHECKSING
ˆDESOLVE
ˆODE_INT
ˆLINSOLV
ˆLDECSOLV
ˆLDEGENE
ˆLDEPART
ˆLDSSOLVext
ˆODETYPESTO
ˆODE_SEPAR
ˆLAPext
ˆILAPext
ˆILAPRAText
ˆILAPDELTA
ˆILAPEXP
ˆILAPEXPSC
ˆMENUext
ˆWRITEMENU
ˆCFGDISPLAY
ˆNEWVX
ˆNEWMODULO
ˆSWITCHON
ˆSWITCHOFF
ˆFLAGNAME
ˆCOMPLEXON
418
418
419
419
419
419
419
419
419
330
402
391
390
342
391
391
391
391
391
392
392
392
392
409
293
405
405
405
405
405
405
406
560006 – 0F5007
Addr.
096007
097007
098007
099007
09A007
09B007
09C007
09D007
09E007
09F007
0A0007
0A1007
0A2007
0A3007
0A4007
0A5007
0A6007
0A7007
0A8007
0A9007
0AA007
0AB007
0AC007
0AD007
0AE007
0AF007
0B0007
0B1007
0B2007
0B3007
0B4007
0B5007
0B6007
0B7007
0B8007
0B9007
0BA007
0BB007
0BC007
0BD007
0BE007
0BF007
0C0007
0C1007
0C2007
0C3007
0C4007
0C5007
Name
ˆCOMPLEXOFF
ˆEXACTON
ˆEXACTOFF
ˆCOMPLEXMODE
ˆSETCOMPLEX
ˆCOMPLEX?
ˆREALMODE
ˆCLRCOMPLEX
ˆEXACTMODE
ˆSETEXACT
ˆNUMMODE
ˆCLREXACT
ˆEXACT?
ˆSTEPBYSTEP
ˆNOSTEPBYSTEP
ˆVERBOSEMODE
ˆSILENTMODE
ˆRECURMODE
ˆNONRECMODE
ˆPLUSAT0
ˆSETPLUSAT0
ˆPLUSATINFTY
ˆCLRPLUSAT0
ˆSPARSEDATA
ˆFULLDATA
ˆRIGORMODE
ˆSLOPPYMODE
ˆSLOPPY?
ˆMENUCHOOSE?
ˆMENUCHOOSE
ˆMENUGENE1
ˆMENUBASE1
ˆMENUCMPLX1
ˆMENUTRIG1
ˆMENUMAT1
ˆMENUARIT1
ˆMENUSOLVE1
ˆMENUEXPLN1
ˆMENUDIFF1
ˆPROMPTSTO1
ˆXGROBext
ˆGROBADDext
ˆDISPLAYext
ˆSCROLLext
ˆRCLMODULO
ˆRCLPERIOD
ˆRCLVX
ˆSTOVX
609
Page
406
406
406
406
406
406
406
406
406
406
406
406
406
407
407
407
407
407
407
407
407
407
407
407
407
407
407
408
409
409
409
409
409
409
409
409
410
410
410
167
98
92
98
281
408
408
408
408
Addr.
0C6007
0C7007
0C8007
0C9007
0CA007
0CB007
0CC007
0CD007
0CE007
0CF007
0D0007
0D1007
0D2007
0D3007
0D4007
0D5007
0D6007
0D7007
0D8007
0D9007
0DA007
0DB007
0DC007
0DD007
0DE007
0DF007
0E0007
0E1007
0E2007
0E3007
0E4007
0E5007
0E6007
0E7007
0E8007
0E9007
0EA007
0EB007
0EC007
0ED007
0EE007
0EF007
0F0007
0F1007
0F2007
0F3007
0F4007
0F5007
Name
ˆSTOMODULO
ˆRCLEPS
ˆISIDREAL?
ˆADDTOREAL
ˆRESETCASCFG
ˆFRACPARITY
ˆPOLYPARITY
ˆPARITYTEST
ˆCOSTEST
ˆSHRINKEVEN
ˆSINTEST
ˆSHRINK2SYM
ˆSHRINKSYM
ˆSHRINK2ASYM
ˆSHRINKASYM
ˆFR2ND%
ˆPOLYSYM
ˆPOLYASYM
ˆP2P#
ˆNDEvalN/D
ˆPEvalN/D
ˆPOSITIFext
ˆSIGNE1ext
ˆSIGNEext
ˆSIGNUNDEF
ˆSIGNPLUS
ˆSIGNMOINS
ˆSIGNELN
ˆSIGNEEXP
ˆSIGNESIN
ˆSIGNECOS
ˆSIGNETAN
ˆSIGNEATAN
ˆSIGNESQRT
ˆSUBSIGNE
ˆSIGNERIGHT
ˆSIGNELEFT
ˆ>SIGNE
ˆSIGNE>
ˆSIGNMULText
ˆZSIGNECK
ˆSIGNEERROR
ˆZSIGNE
ˆzsigne
ˆPASCAL_NEXTLINE
ˆDELTAPSOLVE
ˆSOLVEMETASYST
ˆREDUCEMETASYST
Page
408
408
408
408
408
425
380
379
379
379
379
379
425
380
380
374
394
394
401
400
400
400
400
401
401
401
401
401
401
401
401
401
401
401
401
401
401
404
401
402
385
385
342
342
610
Addr.
0F6007
0F7007
0F8007
0F9007
0FA007
0FB007
0FC007
0FD007
0FE007
0FF007
100007
101007
102007
103007
104007
105007
106007
107007
108007
109007
10A007
10B007
10C007
10D007
10E007
10F007
110007
111007
112007
113007
114007
115007
116007
117007
118007
119007
11A007
11C007
1DC007
1DD007
0000AB
0010AB
0020AB
0030AB
0040AB
0050AB
0060AB
0070AB
G. Entries sorted by Address
Name
ˆREDUCEMETAPSYST
ˆSOLVECRAMER
ˆQUOTExSIGMA
ˆSUM
ˆFLAGSUM
ˆSUMVX
ˆFLAGSUMVX
ˆRATSUM
ˆFTAYL
ˆCSTFRACTION?
ˆNONRATSUM
ˆLINEARAPPLY
ˆlinearapply
ˆmeta_cst?
ˆHYPERGEO
ˆfk+1/fk
ˆA/B2PQR
ˆGOSPER?
ˆZEILBERGER
ˆSYMPSI
ˆsympsi
ˆSYMPSIN
ˆsympsin
ˆIBERNOULLI
ˆFLAGRESULTANT
ˆRESULTANT
ˆRESULTANTLP
ˆRESPSHIFTQ
ˆADDONEVAR
ˆIROOTS
ˆTYPEGAUSSINT?
ˆDTYPEGAUSSINT?
ˆDUPTYPEGAUSSINT?
ˆPPZZ
ˆDISTRIB*
ˆNONALGERR
ˆALGCASCOMPEVAL
ˆ%%PSI
ˆPUSHFLAGS
ˆPOPFLAGS
xXVOL
xYVOL
xZVOL
xXXRNG
xYYRNG
xEYEPT
xNUMX
xNUMY
Page
342
342
393
393
393
393
393
393
425
393
393
425
425
393
393
394
394
380
379
379
379
379
382
200, 333
200, 333
201, 333
424
368
404
353
394
405
405
476
476
477
476
477
459
465
465
Addr.
0080AB
0090AB
00A0AB
00B0AB
00C0AB
00D0AB
00E0AB
00F0AB
0110AB
0120AB
0130AB
0150AB
0160AB
0170AB
0180AB
0190AB
01A0AB
01B0AB
01C0AB
01D0AB
01F0AB
0200AB
0210AB
0220AB
0230AB
0240AB
0250AB
0260AB
0270AB
0280AB
0290AB
02A0AB
02B0AB
02C0AB
02D0AB
02E0AB
02F0AB
0300AB
0310AB
0320AB
0330AB
0340AB
0350AB
0360AB
0370AB
0380AB
0390AB
03A0AB
Name
xWIREFRAME
xPARSURFACE
xGRIDMAP
xYSLICE
xSLOPEFIELD
xPCONTOUR
xDIFFEQ
xVERSION
xRECT
xCYLIN
xSPHERE
xLININ
xLIBEVAL
xFLASHEVAL
xCONLIB
xCONST
xFFT
xIFFT
xNDIST
xPSDEV
xPCOV
xRKF
xRKFSTEP
xRKFERR
xRRK
xRRKSTEP
xRSBERR
xCOND
xTRACE
xSRAD
xSNRM
xRANK
xLSQ
xEGV
xEGVL
xSVD
xSVL
xLU
xQR
xLQ
xSCHUR
xRREF
xRANM
x→ROW
xROW→
x→COL
xCOL→
x→DIAG
Page
475
466
460
476
471
466
457
475
469
456
471
463
463
459
456
456
459
462
465
467
466
469
469
469
470
470
470
456
474
471
471
468
464
458
458
473
473
464
468
464
470
470
468
470
470
455
455
457
0F6007 – 0630B3
Addr.
03B0AB
03C0AB
03D0AB
03E0AB
03F0AB
0400AB
0440AB
0450AB
0460AB
0470AB
0480AB
0490AB
04A0AB
04B0AB
04C0AB
04D0AB
04E0AB
04F0AB
0500AB
0520AB
0530AB
0540AB
0550AB
0560AB
0570AB
0580AB
0590AB
05A0AB
05B0AB
05D0AB
05E0AB
05F0AB
0600AB
0610AB
0620AB
0630AB
0640AB
0650AB
0660AB
0670AB
0680AB
0690AB
06A0AB
06B0AB
06C0AB
06D0AB
06E0AB
06F0AB
Name
xDIAG→
xROWxROW+
xCOLxCOL+
xRSWP
xPROOT
xPCOEF
xPEVAL
xTVM
xTVMBEG
xTVMEND
xTVMROOT
xAMORT
xINFORM
xCHOOSE
xMSGBOX
xXSEND
xXRECV
xTAIL
xSEQ
xDOSUBS
xΔLIST
xNSUB
xENDSUB
xSTREAM
xΣLIST
xΠLIST
xDOLIST
xREVLIST
xSORT
xZFACTOR
xFANNING
xDARCY
xF0λ
xSIDENS
xTDELTA
xTINC
xgmol
xlbmol
xrpm
xdB
xPINIT
xDRAW3DMATRIX
x→KEYTIME
xKEYTIME→
xXSERV
xROMUPLOAD
611
Page
457
470
470
455
455
470
467
466
466
474
474
474
474
453
462
455
465
476
476
473
471
458
460
465
458
472
461
466
457
469
471
477
459
456
459
471
473
473
456
466
458
463
463
476
469
Addr.
0700AB
0710AB
0720AB
0730AB
0740AB
0750AB
0760AB
0770AB
0050B0
0060B0
0860B0
0870B0
0C80B0
0D80B0
0DE0B0
0000B1
0040B1
0000B3
0050B3
0060B3
0070B3
0150B3
0190B3
0220B3
0230B3
0240B3
0250B3
0260B3
0280B3
0290B3
02F0B3
0370B3
0380B3
03B0B3
03C0B3
03D0B3
03E0B3
03F0B3
04B0B3
0520B3
0530B3
0540B3
0590B3
05A0B3
05B0B3
05C0B3
05F0B3
0630B3
Name
xXGET
xXPUT
xMSOLVR
xMINIT
xMITM
xMUSER
xMCALC
xMROOT
˜IFMenuRow1
˜IFMenuRow2
˜grobAlertIcon
˜grobCheckKey
˜gFldVal
˜sFldVal
˜nNullBind
˜DoMsgBox
˜MsgBoxMenu
˜Choose
˜ChooseMenu0
˜ChooseMenu1
˜ChooseMenu2
˜BBMoveTo
˜BBRecalOff&Disp
˜BBRunEntryProc
˜BBReReadPageSize
˜BBReReadHeight
˜BBReReadCoords
˜BBReReadWidth
˜BBRunENTERAction
˜BBRunCanclAction
˜BBReDrawBackgr
˜BBGetNGrob
˜BBGetNStr
˜BBRereadChkEnbl
˜BBRereadFullScr
˜BReReadMenus
˜BBReReadNElems
˜BBGetN
˜BBIsChecked?
˜BBUpArrow
˜BBDownArrow
˜BBSpace
˜BBPgDown
˜BBPgUp
˜BBEmpty?
˜BBGetDefltHeight
˜$>grobOrGROB
˜ChooseSimple
Page
475
476
465
465
465
465
464
465
257
257
90
90
117
283
244
244
244
244
245
245
245
245
245
245
245
245
245
245
245
245
246
246
246
246
246
246
246
246
246
246
246
246
246
96
244
612
Addr.
0000DD
0010DD
0020DD
0030DD
0040DD
0050DD
0060DD
0070DD
0080DD
0090DD
00A0DD
00B0DD
00C0DD
00D0DD
00E0DD
00F0DD
0100DD
0110DD
0120DD
0130DD
0140DD
0150DD
0160DD
0000DE
0010DE
0020DE
0030DE
0040DE
0050DE
0060DE
0070DE
0080DE
0090DE
00A0DE
00B0DE
00C0DE
00D0DE
00E0DE
00F0DE
0100DE
0110DE
0120DE
0130DE
0140DE
0150DE
0160DE
0170DE
0180DE
G. Entries sorted by Address
Name
x→LANGUAGE
xLANGUAGE→
x→FONT
xFONT→
x→HEADER
xHEADER→
x→NDISP
xEDIT
xVISIT
xEDITB
xVISITB
xEQW
xFILER
xFONT8
xFONT7
xFONT6
xSREPL
x→MINIFONT
xMINIFONT→
xRENAME
xUFL1→MINIF
xDBUG
xDISPXY
xADDTOREAL
xSIGMAVX
xSIGMA
xPsi
xPSI
xRESULTANT
xIBERNOULLI
xGAMMA
xqr
xGRAMSCHMIDT
xSYST2MAT
xCHOLESKY
xDIAGMAP
xISOM
xMKISOM
xKER
xIMAGE
xBASIS
xIBASIS
xAUGMENT
xPMINI
xCYCLOTOMIC
xSTURM
xSTURMAB
xFDISTRIB
Page
463
463
459
459
461
461
465
458
475
458
475
458
459
459
459
459
471
464
465
469
474
456
457
453
471
471
467
467
469
461
460
Addr.
0190DE
01A0DE
01B0DE
01C0DE
01D0DE
01E0DE
01F0DE
0200DE
0210DE
0220DE
0230DE
0240DE
0250DE
0260DE
0270DE
0280DE
0290DE
02A0DE
02B0DE
02C0DE
02D0DE
02E0DE
02F0DE
0300DE
0310DE
0320DE
0330DE
0340DE
0350DE
0360DE
0370DE
0380DE
0390DE
03F0DE
0400DE
0030E0
0100E0
0130E0
0180E0
0190E0
0120E4
0110E7
02E0E7
02F0E7
01E0E8
000100
001100
002100
Name
xDISTRIB
xEXP2POW
xPOWEXPAND
xTAN2CS2
xCIRC
xC2P
xP2C
xMSLV
xDOMAIN
xSIMPLIFY
xDROITE
xSTORE
xDEF
xASSUME
xUNASSUME
xREWRITE
xINTEGER
xCONSTANTS
xHYPERBOLIC
xMODULAR
xPOLYNOMIAL
xTESTS
xMATHS
xCOLLECT
xUNASSIGN
xHELP
xCASCMD
xPUSH
xPOP
xDEGREE
xDEDICACE
xPOTENTIAL
xVPOTENTIAL
xRCLVX
xSTOVX
˜BRStoC1
˜BRbrowse
˜BRoutput
˜BRRclCurRow
˜BRRclC1
˜MESRclEqn
˜UTVUNS1Arg
˜PCunpack
˜UTTYPEEXT0?
˜INTEMPOB?
x→H
xH→
x→A
Page
473
455
455
471
455
455
468
472
246
171
478
478
478
0000DD – 03C314
Addr.
003100
004100
005100
006100
007100
008100
009100
00A100
00B100
00C100
00D100
00E100
00F100
010100
011100
012100
013100
014100
015100
016100
017100
018100
019100
01A100
01B100
01C100
01D100
01E100
01F100
020100
021100
001102
002102
003102
004102
000314
001314
002314
003314
004314
005314
006314
007314
008314
009314
00A314
00B314
00C314
Name
xA→
xA→H
xH→A
x→CD
xCD→
xS→H
xH→S
x→LST
x→ALG
x→PRG
xCOMP→
x→RAM
xSREV
xPOKE
xPEEK
xAPEEK
xR˜SB
xSB˜B
xLR˜R
xS˜N
xLC˜C
xASM→
xBetaTesting
xCRLIB
xCRC
xMAKESTR
xSERIAL
xASM
xER
x→S2
xXLIB˜
xGETADR
xGETNAME
xGETNAMES
xGETNEAR
˜xEXPAND
˜xFACTOR
˜xSUBST
˜xDERVX
˜xINTVX
˜xLIMIT
˜xTAYLOR0
˜xSERIES
˜xSOLVEVX
˜xPLOT
˜xPLOTADD
˜xIBP
˜xPREVAL
613
Page
478
478
478
478
478
478
478
478
478
478
478
478
478
478
478
478
478
479
479
479
479
479
479
479
479
479
479
479
479
479
479
479
479
479
479
459
459
472
457
462
463
473
471
471
466
461
467
Addr.
00D314
00E314
00F314
010314
011314
012314
013314
014314
015314
016314
017314
018314
019314
01A314
01B314
01C314
01D314
01E314
01F314
020314
021314
022314
023314
024314
025314
026314
027314
028314
029314
02A314
02B314
02C314
02D314
02E314
02F314
030314
031314
032314
033314
034314
035314
036314
037314
038314
039314
03A314
03B314
03C314
Name
˜xRISCH
˜xDERIV
˜xDESOLVE
˜xLAP
˜xILAP
˜xLDEC
˜xTEXPAND
˜xLIN
˜xTSIMP
˜xLNCOLLECT
˜xEXPLN
˜xSINCOS
˜xTLIN
˜xTCOLLECT
˜xTRIG
˜xTRIGCOS
˜xTRIGSIN
˜xTRIGTAN
˜xTAN2SC
˜xHALFTAN
˜xTAN2SC2
˜xATAN2S
˜xASIN2T
˜xASIN2C
˜xACOS2S
˜xDIV2
˜xIDIV2
˜xQUOT
˜xIQUOT
˜xREMAINDER
˜xIREMAINDER
˜xGCD
˜xLCM
˜xEGCD
˜xIEGCD
˜xABCUV
˜xIABCUV
˜xLGCD
˜xSIMP2
˜xPARTFRAC
˜xPROPFRAC
˜xPTAYL
˜xHORNER
˜xEULER
˜xPA2B2
˜xCHINREM
˜xICHINREM
˜xISPRIME?
Page
469
457
457
463
462
463
473
463
474
464
459
471
473
473
474
474
474
474
473
461
473
454
454
454
453
457
461
468
462
469
462
460
463
458
462
453
461
463
471
466
467
467
461
458
466
455
461
462
614
Addr.
03D314
03E314
03F314
040314
041314
042314
043314
044314
045314
046314
047314
048314
049314
04A314
04B314
04C314
04D314
04E314
04F314
050314
051314
052314
053314
054314
055314
056314
057314
058314
059314
05A314
05B314
05C314
05D314
05E314
05F314
060314
061314
062314
063314
064314
065314
G. Entries sorted by Address
Name
˜xNEXTPRIME
˜xPREVPRIME
˜xSOLVE
˜xZEROS
˜xFCOEF
˜xFROOTS
˜xFACTORS
˜xDIVIS
˜xTRAN
˜xHADAMARD
˜xrref
˜xREF
˜xAXM
˜xAXL
˜xQXA
˜xAXQ
˜xGAUSS
˜xSYLVESTER
˜xPCAR
˜xJORDAN
˜xMAD
˜xLINSOLVE
˜xVANDERMONDE
˜xHILBERT
˜xLCXM
˜xDIV
˜xCURL
˜xLAPL
˜xHESS
˜xLEGENDRE
˜xTCHEBYCHEFF
˜xHERMITE
˜xLAGRANGE
˜xFOURIER
˜xSIGNTAB
˜xTABVAR
˜xTABVAL
˜xDIVPC
˜xTRUNC
˜xSEVAL
˜xTEVAL
Page
465
467
471
477
459
460
459
457
474
461
470
469
454
454
468
454
460
473
466
463
464
463
475
461
463
457
456
463
461
463
473
461
463
459
471
473
473
457
474
471
473
Addr.
066314
067314
068314
069314
06A314
06B314
06C314
06D314
06E314
06F314
070314
071314
072314
073314
074314
075314
076314
077314
078314
079314
07A314
07B314
07C314
07D314
07E314
07F314
080314
080314
081314
082314
083314
084314
085314
086314
087314
088314
089314
08A314
08B314
08C314
Name
˜xMAP
˜xXNUM
˜xXQ
˜xREORDER
˜xLVAR
˜xFXND
˜xEXLR
˜xLNAME
˜xADDTMOD
˜xSUBTMOD
˜xMULTMOD
˜xDIVMOD
˜xDIV2MOD
˜xPOWMOD
˜xINVMOD
˜xGCDMOD
˜xEXPANDMOD
˜xFACTORMOD
˜xRREFMOD
˜xMODSTO
˜xMENUXY
˜xKEYEVAL
˜xGROBADD
˜xSCROLL
˜xCASCFG
˜xMAIN
˜xBASE
xALGB
˜xCMPLX
˜xTRIGO
˜xMATR
˜xDIFF
˜xARIT
˜xSOLVER
˜xEXP&LN
˜xEPSX0
˜x?
˜x∞
˜xPROMPTSTO
˜xVER
Page
464
475
476
469
464
460
459
464
453
473
465
457
457
467
462
460
459
459
470
465
464
463
460
470
455
454
454
455
474
457
453
471
458
462
467
475