Releases: c3d/db48x
Release 0.8.3 "Blindness" - User mode and custom header
This release focuses on various user interface aspects.
Features
- User mode, key assignment,
ASN
,STOKEYS
,RCLKEYS
,DELKEYS
. Unlike HP calculators, key assignments are per directory, with inner directories inheriting the key assignments from the enclosing directories. - Add
Header
command to customize the header. For example, you can now show the path in the header, or any relevant information. This customization can be done per-directory. - Implement
Menu
,TMenu
andRclMenu
commands - help: Automatically create links for references to RPL words. When we have
sin
in the Markdown file, the calculator will
automatically insert a hyperlink to the corresponding entry. Note that this only applies to the calculator, not to the GitHub rendering of the Markdown files. - Display object type in the
Info
box of the interactive stack. - Fallback graphic rendering of objects to text when the usual heuristics did not allow the graphics to fit in the alloted pixel space. For example, a fraction that does not fit will now display using the textual form if that particular form can fit in the given box.
Bug fixes
- Fix a bug that could cause the text editor cursor to move past the end of the editor when inserting text, possibly causing memory corruption.
- The
Show
command will now show all digits, and render fractions using multiple lines for the numerator and denominator so as to be
able to show more digits in a readable way. - When terminating a command using auto-completion in the
Catalog
feature, the command that was entered is now present in the
command-line history. - Arithmetic operations that combine text or lists and unit objects now behave correctly. For example, adding a unit to a list appends
like any other object. - Move updir if evaluating an updir directory, instead of corrupting the directory stack.
- Clear transient object if entering the interactive stack, e.g. when exploring the interactive stack while in the
SolvingMenu
and solving an equation, and correctly update the transient object when switching menus. - Render vectors as RPL code in the equation examples.
- Correctly redraw the text editor when using the interactive stack
Echo
feature with stack items spanning multiple lines - Fix minor typos in the equations documentation.
Improvements
- tests: Only evaluate after parsing RPL examples in the documentation when the stack is not empty
- The
Wait
command now returns a key code in the same style as HP calculators, i.e. with row, column and plane. Also, like HP calculators, it processes shift keys and returns a plane, instead of returning the keycode of the shift key. - Capitalize
Path
,CrDir
,Home
,UpDir
so that their rendering in compatibility mode with theCmd
setting looks better. - Add
DB48X_SPEEDUP
environment variable support in the simulator. - documentation: Update Authors section
Full Changelog: v0.8.2...v0.8.3
Release 0.8.2 "Honor Seats" - Equation Library Examples, Assignments
This release is focusing on the testing, validation and usability of the equation library contributed by Jean Wilson. To that effect, it introduces a new kind of objects, assignments, that only exist on the DB48x and have no direct equivalent on original HP calculators. It also completes the support for library equations in the Root
command.
Here is an example that illustrates these capabilities, testing the Ohm’s Law & Power
equation in the library:
V=240_V I=32_A
@ Expecting [ R=7.5 Ω P=7 680. W ]
'ROOT(ⒺOhm’s Law & Power;[R;P];[1_Ω;1_W])'
If you are reading this release note directly on the calculator, you can simply click ENTER
while the text above shows up, and it will be copied in your editor. You can change the values of the input variables to explore various possibilities.
In this example, V=24_V
is an assignment object that assigns the value 24_V
to the global variable named V
. It is almost equivalent to 24_V 'V' STO V
, except that the value placed on the stack is the assignment object itself. In other words, evaluating V=24_V
places V=24_V
on the stack. This makes it easy to edit or evaluate assignments on the stack using the interactive stack. In particular, you can select an assignment on the stack wiht the interactive stack and use the Eval
(F3) function to restore the variable to the value in the assignment.
The ROOT
command in the example illustrates how you can directly use equations in the equation library as argument to Root
, and use the multiple-equation solver to solve for more than one variable at a time.
All the examples in the on-line help are now also tested automatically, in order to ensure that all the given examples give the expected results.
Features
- Implement
CustomMenu
, whicih is toggled by successive presses on the VAR key. An example is shown in theDemo.48s
file. The
content of theCST
orCustomMenu
variable is used to define this menu. - The documentation now contains numerous executable examples. These examples are identified by a Markdown code block with the
rpl
syntax colorization indicator. They can be executed directly from the on-line help on the calculator by hitting ENTER while the code block is shown on the screen. - The test suite automatically tests all the documentation examples.
- New equation sets:
Light Propagation
andUltrarelativistic Cases
- Four new equations in
Energy & Momentum
equation set - Assignment objects in the form
Name=Value
, e.g.A=3
. - The solver now emits assignment objects for the solution
▶
command to store while keeping value on stack. As an extension relative to the HP50G, this command also works inside RPL algebraic
expressions. For example3▶A
stores3
inA
and returns the value inA
. The command is calledCopy
(the HP50G ARM calls it
▶ (Store))- The
Root
command now accepts library equations as input. - Arrays and lists are now accepted in algebraic expressions, using
;
as a separator between values. For example,'[1;2;3]+[4;5;6]'
adds two vectors using an algebraic notation. Vectors can contain algebraic expressions. For example'[x+1;y+2;z=3]'
is a valid
vector expression. - The solver now accepts algebraic input, including for the multiple equation solver using vectors as input.
- Ad
RombergPlot
example to Library and Demo file. This example shows how theIntegrate
command evaluates the underlying function. - menus: Add
XRng
andYRng
to thePlotMenu
Bug fixes
- Fix a sign bug in the
Simple Slope
equation - Fix "Too many open files" error while saving constants
- Avoid infinite loop for unterminated
case
statement - What follows a unit in an algebraic expression is no longer ignored.
'330_m-20_m'
was incorrectly interpreted as'330_m'
, now
correctly computes'310_m'
. - Fix and document the
Integrate
imprecision and iteration settings. - text: Respect display settings in
→Str
. For example,3 FIX 0.1 →Str
now returns"0.100"
and not"0.1"
, like on HP calculators - Repair parsing of HP-style complex numbers, e.g.
(12;3)
- Refactoring of object insertion in text editor to fix various bugs, including the
Echo
command in the interactive stack inserting the
object at the end of the text editor instead of at the cursor position. - Do not issue
Invalid digit for base
on the console parsing1E-10
- Fix null-dereference issue in
to_decimal_if_big
, which could be triggered if interrupting anIntegrate
command using the EXIT key. - Avoid occasional garbage at right of menu area
- simulator: Ensure Copy correctly quotes equations
- Move image for E Field Finite Line to right section
Improvements
- Add references to keyboard overlays in the documentation
- Add documentation for the
Root
command - Improve the way we generate the image files in the Makefile
- Improve solver behaviour when a solution is not found. Notably, the solver is more likely to converge towards an extremum, and is more likely to find complex roots.
Full Changelog: v0.8.1...v0.8.2
Release 0.8.1 "Sale" - Multi-equation solver
Features
- Multiple-equation solver (HP's MES), solves for variables one at a time
- The
|
operator (akawhere
) applies to library equations - The
|
operator respects variables with units in expressions - simulator: Add support for copy and paste (to/from simulator)
- Add support for cylindrical and spherical 2D and 3D vectors
- Positional graphic combination operations (e.g.
GraphicRatio
) - Switch to Greek or Cyrillic keyboard maps based on character menu
- Add EDIT menu commands to transient alpha (e.g. ▶F3 is Word→)
- Index the help file for performance (about 5x faster on DM42)
- Accept verbatim code and RPL code snippets in the help file
- Parse and show help topics taking all aliases into account
- Convert lists and equations to RPL programs with
→Program
Bug fixes
- Show tagged values for vectors and matrices
- Update the target global variable after running
root
- Show all variables in the
SolvingMenu
(with a settings to control it) - Unit-related commands accept tagged objects and expression-enclosed units
- Add angular units (e.g. radians) in angular equations
- Correct unit for
V
inCantilever Shear
(wasn
instead ofN
) Purge
now correctly restores UI patterns settings- Add missing font parameter to
→Grob
(HP calculator compatibility) - Include equations and xlibs to list of symbolic objects
- Fix precision loss for
atan
,acos
andasin
for some values - Add angles for
atan2
when using hardware-accelerated floating-point - Remove spaces and separators in the names of library equations
- keyboard: Replace ASN with ->NUM
- Preserve trailing decimal separator in
FIX
mode withNoTrailingDecimal
- Fix backspace and delete operation around number separators
- Fix the definition of
cosh
for complex values (was computingsinh
) - Accept uppercase and lowercase
.48s
when saving/restoring state - Accept both
Ω
orΩ
as spellings for Ohm (different Unicode) - Only update the state file when disk operations are successful
Improvements
- Add
arcsin
,arccos
andarctan
spellings - solver: Reorganize solver code
- documentation: Udpate equation documentation with examples
- Save UI patterns as hexadecimal numbers (also in
Modes
command) - Use only tabs in library.csv
- Keep cursor at end of buffer when moving through history with word right
- Clear selection when BSP is used with a non-empty selection
- Ensure
debug_printf
always refreshes the screen - Switch to binary search for command parsing (~100x faster)
- Rename some statistical functions for consistency
- Fix the list of authors in the online help
- doc: Update performance data
Full Changelog: v0.8.0...v0.8.1
Release 0.8.0 "Gabriel" - Symbolic operations, equations and library
This release adds symbolic integration, differentiation and equation solving, delivers an extensive equation library, and improves the library feature to enable large library objects to be defined in separate files and optimize execution speed for library items. It also improves the rendering of complex equations and fixes a number of crashes or user-interface problems.
Features
- Symbolic integration,
Primitive
command,'∫X(sin(X))'
syntax
'∫X(sin(2*X+3)-X)'
evaluates as'-cos(2*X+3)/2-x²/2'
- Symbolic differentiation,
Derivative
command,∂X(sin(X))
syntax
'∂X(sin(2*X+3)-X)'
evaluates as'2·cos(2*X+3)-1'
- Symbolic equation resolution,
ISOL
(Isolate
) command
'sin(2*X+3)=A' 'X' ISOL
gives'X=(sin⁻¹ A+2*i1*π-3)/2'
- Apply arithmetic and functions on both sides of equations like
A=B
'A=B' sin 1 +
results in'sin A+1=sin B+1'
- Add possibility to define library objects in separate files
The various demos from previous releases are now also in the library - commands: Add
→Prog
command to convert expressions to RPL programs
'sin(2*X-Y)' →Prog
gives« 2 X × Y - sin »
- Accelerate evaluation of library entries
Invoking a library object is as fast as if it was on the stack.
Notice that this is faster than global objects that require lookup. - Add
Obj→
support for user-defined function calls
'F(A;B;C)' Obj→ DROP Obj→
gives[F A B C]
.
The first call toObj→
expands the expression, leaving an isolated
function call on the stack, which the secondObj→
expands. - Automatically convert polynomial objects to expressions when needed
- Many improvements to the equation library contributed by Jean Wilson
- Document the equation library variables in the help file
- Add classical/relativistic Kinetic Energy comparison demo
This was suggested by Jean Wilson as an illustration - parser: Parse and convert HP syntax for
|
Typing'A(X;Y)|(X=1;Y=2)'
converts to'A(X;Y)|X=1|Y=2'
Bug fixes
- Improve graphical rendering of some complex expressions
- Render
sqrt
as√
and notsquareroot
in HP compatibility mode - Do not draw parentheses around
|x|
when renderingabs
- Redefine
rpm
asturn/min
(unit consistency of rotational speed) - Avoid crash in
for
loop if termination condition fails to evaluate - Fix rendering and saving of directories
- Do not leave incorrect stack content when running
Obj→
on text - Make size consistent in vectors containing tagged objects
- Accept tagged objects as input in algebraic functions
- Avoid parsing error for
1,234
when.
is the decimal separator - Debug output related to expressions is no longer labelled "equations"
- Fix unit error in Drift Speed & Current Density
- Cut the size of the build version ID to avoid DMCP buffer overflows
- Avoid possible corruption when an error occurs in a program
- Improve error messages for file errors, e.g. when loading a state
- Move cursor at correct position after numbers when entering units
- Reject multiple consecutive units, e.g.
1_m_s
- Fix issue where we insert
=
incorrectly on the command line - Address simulator warning about potential buffer overflow
Improvements
- tests: Add tests for the newly added library entries
- primitive: Add test suite for symbolic integration
- tests: Add test suite for symbolic differentiation
- Factor out code to expand objects on the stack
make install
now Installs from distribution files- demo: Reorganize demo files as directories
- tests: Add test for
Obj→
on various object types - tests: Factor out code checking state of the complete stack
- tests: Avoid emitting something that looks like compilation errors
- Update demo file
- Improve definition of atomic mass unit, add
Da
(Dalton) alias - expressions: Optimize the way to split an equation
- tests: Adjust tests after changes in
SymbolicMenu
Full Changelog: v0.7.18...v0.8.0
Release 0.7.18 "Who" - Subst, Where, Apply
This release implements the Apply
, Subst
and |
(Where
) commands.
Features
- ui: Allow Shift-SPC to enter
=
in an expression - Implement
subst
andwhere
- Implement the
Apply
command - Implement the
EQNLIB
command - Add
CONSTANTS
as a way to select mathematical constants menu - Add
CONLIB
as an alias forConstantsMenu
.
Bug fixes
- solver: Adjust detection of "epsilon" for large values
- ttf2font: Flip x coordinates for dense fonts
Improvements
- doc: List commands that will never be implemented
Release 0.7.17 "Open" - DoSubs, DoList, entering units
This release adds DoSubs
, DoList
, NSub
and EndSub
commands, and fixes related issues that were found with the associated examples in the HP50G Advanced Reference Manual.
Features
- lists: Implement
DoList
,DoSubs
,NSub
andEndSub
- units: Add usual "big" units to
Computing
units menu (e.g. KB, MB) - graphics: Add
Freeze
command - ui: Make it easier to enter units
- expressions: Accept algebraic forms for
integrate
androot
- expressions: Graphical rendering of integrals
Bug fixes
- case: Preserve the code for the default case (which was lost before)
- parser: Parse arg-less alegbraic commmands such as
NSub
- equations: Fix syntax errors in built-in equations, e.g. missing parentheses
- equations: Replace variables that match DB48X command names, e.g.
Re
- equations: Replace imperial units with SI units, e.g.
in
withcm
- units: Reject user-defined functions in unit expressions
- constants: Fix definition for the
qε0
constant
Improvements
- Update help about equations with some additional material
- tests: Run through all the builtin equations
- ui: Do not insert an extra space before parentheses in equation
- simulator: Add macOS icons for DB48X and DB50X
- font: Record saved font with
v
update
Full Changelog: v0.7.16...v0.7.17
Release 0.7.16 "Clean" - New commands
The focus of this release is on new commands, notably for matrix and vector operations. This release also ships with a DM48X-specific keymap, which fixes a problem with teh file selector on the DM32. The equation library has been extended with numerous equations, but they are not fully validated yet.
Features
con
,idn
andranm
matrix generation commandsArray→
and→Array
commands to convert array to/from stackdot
product andcross
product commands for vectorsDispXY
styled text rendering commandDupDup
command duplicating top item twice- Add a large number of equations to equation library
Bug fixes
- Fix
decimal::to_bignum
for small magnitudes - Return angle unit for
atan2
andarg
commands - The
for
loop on lists no longer ends leaving the debugger active - Interactive stack
DropN
command returns to level 1 - Fix file selector's "New file" on DM32 so that ENTER terminates it
- A few fixes in equations in the equation library
Improvements
- Improve graphical rendering of expressions such as multiplication operators
- doc: Update status
- font: Fix
v
glyph vertical placement, add dot and cross glyphs - ttf2font: Add additional verbose info about source data
- Add
CONSTANTS
as an alias forConstantsMenu
- Replace documentation references to
EEX
with×10ⁿ
- Optimize parsing of real numbers in parentheses
Full Changelog: v0.7.15...v0.7.16
Release 0.7.15 "Teaching" - Bug fixes notably on iOS
This release mostly focuses on issues exposed by the iOS releases.
Bug fixes
- ios: Fix a screen refresh bug delaying the display of computation results
- ios: Increase user-accesssible memory for DB50X to match the DM32
- files: Avoid opening two files when a loaded file contains units/constants
- units: Restrict unit expressions further, e.g. forbid
1_km^s
- build: Do not add unwanted macOS-specific files in release tar files
- build: Remove irrelevant help file from releae tar file
- constants: Fix numerical value for G constant
- tests: Rename
M
demo helper toD
, since we useM
in symbolic tests - makefile: Add
mv
echo to targets doing image comparison - units: Use pi constant in definition of radians unit
- parser: Detect syntax error on
(inv(x))
in non-expression mode - units: Avoid infinite loop for bad unit exponents
- files: Avoid crash in
file_closer
if file does not exist - tests: Add DMS/HMS operations to math demo
- tests: Add keyboard shortcuts to launch the demos
Full Changelog: v0.7.14...v0.7.15
v0.7.14: Release 0.7.14 "Kids" - Equation-related bug fixes
This release fixes a number of issues that were discovered primarily through the Columns and Beams equations.
Features
- trigonometrics: Add conversion from non-standard angles, so that
cos(1_turn)
gives the correct result. - debug: Debug on error with
DebugOnError
andKillOnError
settings. This makes it easier to debug an RPL program, by making it possible to single-step around the instruction that generated the error. - tests: Add three 30 second demo of DB48X features. These are to generate marketing videos for the iPhone version on the Apple store (to be done).
Bug fixes
- ui: Keep a GC pointer in
draw_object
to avoid a memory crash - equations: Add missing units in some equations, e.g.
I
andA
in second equation of Coilumns and Beams - equations: Add explicit
radian
unit in Eccentric Columnscos
, which ensures we get the correct result from the HP50G manual even
when in Degrees mode. - units: Correctly factor out non-integral powers, so that we can compute
1/sqrt(epsilon_0*mu_0)
and get the correct result. - catalog: Display commands that begin with selection first, so that
FORE
showsForeground
beforeAlphaForeground
. - stats: When computing a sum, evaluate the expression on all terms. The result for
Variance
with single variables was wrong because the first term was computed incorrectly due to a misguided optimization. - graphics: Error out in
RGBPattern
for negative input. The negative values were generating an error, but it was not reported, so the next
command was likely to report it. - help: Render shift keys correctly in the color version. The bitmap was interpreted as containing color data. Colorize it instead.
Improvements
- ui: Select orange as background color during search. The previous setting of showing seardch using white foreground on a white
background was probably pushing the notion of "blind search" a bit too far.
Full Changelog: v0.7.13...v0.7.14
Release 0.7.13 "Murderers" - Solver improvements
Release 0.7.13 "Murderers" - Solver improvements
This releases focuses on improvements to the solver, with the completion of the Columns and Beams section from the HP50G equation library.
Features
- equations: Add remaining equations from "Columns and Beams"
- loops: For loops on lists and arrays
- menus: Add
R→D
,D→R
,→Polar
and→Rectangular
- menus: Automatically select tools menu for library equations
- units: Allow
ubase
to work on expressions - units: Graphic rendering of units
Bug fixes
- 48calc.org: Fix mouse click position
#ABC #DEF -
now correctly produces a based number with >64-bit wordsize- conditionals: Parse and evaluate
IFTE
correctly - equations: Fix Elastic Buckling
- files: Avoid crash in
file_closer
if file was not open - istack: Enable Swap feature on top two levels
- menu: Update SolvingMenu when updating VariablesMenu
- parser: Deal with negation more "normally", parse
-a²
correctly - solver: Compute units correctly for inputs
- solver: Do not change unit when storing in a solver variable
- solver: Emit correct error message in
EvalEq
if missing variables - solver: Preserve errors reported by underlying function
- units: Do not evaluate/render units with names
- units: No longer read variables
m
ands
while processing1_m/s
- units: Simplify units that convert to real numbers
Improvements
- Update .gitignore
- build: Add BMP files to the distribution
- complex: Optimize exit conditions for parentheses
- solver: Add test for equation library
- solver: Add tests for solving with units
- solver: Improve behaviour of
EvalEq
- solver: Keep units and constants as-is in equation
- solver: Make precision relative to equation sides magnitude
- stack: Show vectors vertically by default
- ui: Do not persistently hide stack with current equation
- units: Keep power integral, i.e. avoid getting
1_m^2.0/s
- units: Strip tags from unit conversion functions
- units: The
EvalEq
command should not evaluate dates - wasm: Add logos to the repository
Full Changelog: v0.7.12...v0.7.13