Releases: c3d/db48x
Release 0.7.8 "Mustard" - Constants in equations
This release keeps marching towards full support for an equation library.
The primary focus was support for constants in equations, including constants with units like the speed of light, as well as fixing various user-reported issues.
Features
- cycle: Apply to value of tagged object
- equations: Add units to built-in equations
- equations: Adjust menu label to remove units
- equations: Strip units but not constants when rendering
- expressions: Treat
2X
as an implicit product - solver: Strip units from constants
- units: Unit prefix should preserve the tag
Bug fixes
- clearlcd: Fix erasure of screen when not in graphics mode
- constants: Count number of menu entries correctly for builtin menus
- decimal: Accept leading
.
or,
for decimal values - expressions: Parse negation after parentheses
- sum: Do not accept a non-name in a sum or product
- type: Return a type value for decimals
- ui: Fix insertion/editing of infix with alphabetic names
- units: Do not read units from variable if they exist
- xroot: Reverse
xroot
arguments in algebraic parsing
Improvements
- editor: Shift-up returns to beginning of line if on first row
- errors: Add
error_save
class, use it inconstant::value
- expressions: Use the
SaveAutoSimplify
class insimplify_products
- units: Split
Eng
toElec
andVisc
Full Changelog: v0.7.7...v0.7.8
Release 0.7.7 "Forgiving" - Units in equations
This release keeps marching towards full support for an equation library. The primary focus was support for units in equations.
New features
- solver: Accept equations in solver menu
- solver: Add shortcut to solve an equation from the library
- solver: Display the current equation above the stack
- solver: Solve expressions containing units
- solver: Add units for solver variables when entering them
- equations: Add option to list variables with units
- programs: Enforce numerical values for solver / plotter
- constants: Implement programmatic lookup
- fonts: Add support for fixed-width digits
- keyboard: Interpret
ASN
asAsNumber
(convert to decimal) - complex: Allow insertion of angle while entering phasors
- complex: Implement auto-complex promotion
- graph: Render abs(X) with bars (e.g. |X|)
- functions: Automatic simplification of expressions
Bug fixes
- arithmetic: Avoid null-dereference in complex operations
- help: Close help file if topic not found
- solver: Do not store tag for tagged values
- graph: Gracefully fallback if fraction integral part does not render
- units: Avoid null-dereference if unit simplification fails
- units: Count parentheses while parsing units
- put: Fix null-dereference checking the index
- fractions: Do not render two negative signs in graphical mode
Improvements
- cycle: Update behaviour for several data types
- menu: Replace
abs
with|z|
in complex menu - ui: Micro-optimization to avoid reading object type twice
- parser: Accelerate and improve object parsing
- recorder: Add recorder entries for evaluation
- build: Remove any leftover references to Intel decimal library
- tests: Add
▶
entry in tests - tests: Increase default wait time to 1000ms
- tests: do not error out if
teval
takes less than 100ms - equations: Rename
PerfectGas
equation toIdealGas
- menus: Adjust size of menus to make descenders visible
- solver: Replace
SolverPrecision
withSolverImprecision
Release 0.7.6 "United" - Equation Solving Menu
This release is primarily about implementing a dynamic solving menu that makes it easier to solve equations with multiple variables. This is roughly equivalent to the "Solve Equation" application in the HP50G.
New features
- solver: Implement solving menu
- tag: Graphic rendering for tagged objects
- lists: Implement
lname
andxvars
commands - arithmetic: Implement
div2
command - variables: Implement
vars
andtvars
commands
Bug fixes
- render: Avoid errors while rendering / graphing
- expressions: Avoid consuming stack levels for invalid expressions
- symbols: Avoid ignoring the list of bad characters in symbols
- command: Fix for
x!
parsing - stack: Correctly set clipping for stack index
- doc: Fix typo in release note
Improvements
- menus: Add
PixOn
,PixOff
,Pix?
andPixC?
toGraphicsMenu
Release 0.7.5 "Perfect Joy" - Polynomials and symbolic rewrites
This release contains a lot of groundwork in preparation for future work on symbolic expressions, symbolic solving and symbolic integration, as well as to improve compatibility with HP calculators. In particular, rewrite
has been replaced with the HP equivalents, ↑Match
and ↓Match
, allowing top-down and bottom-up replacement, as well as support for conditions. Also, these commands return the number of replacements performed instead of just 0
or 1
.
The other major user-visible new feature is the addition of a polynomials data type, which does not exist on HP calculators, exposing polynomial features in a way that is more consistent with the spirit of RPL. For example, Euclidean division of polynomials can be achieved using the regular /
operation on polynomials instead of requiring a dedicated DIV2
command.
New features
- Support for polynomials as a data type, including Euclidean division
- Arithmetic operations on polynomials, including
sq
andcubed
- Conversion functions
→Poly
andPoly→
to convert to and from polynomials - Optional case-sensitive symbol matching
- Algebra configuration directory (like
CASDIR
on HP calculators) - rewrites: Replace
rewrite
command with HP-compatible↑Match
and↓Match
- rewrites: Add
ExplicitWildcards
option to match HP syntax (&A
) - rewrites: Add rules to expand powers
- rewrites: Add support for conditions when matching patterns
- rewrites: Add support for step-by-step rewrites
- rewrites: Add support for bottom-up rewrites
- flags:
Purge
now resets system flags to default value
Bug fixes
- editor: Fix unresponsive keys after using
EXIT
key while searching - complex: Avoid emitting syntax errors while parsing
- rewrites: Avoid potential garbage collection corruption problem
- rewrites: Disable auto-simplification during rewrites
- rewrites: Factor out rewrite loop
- expressions: Encode expressions with type ID >= 128 correctly
- arithmetic: Add space around
mod
andrem
in rendering - graph: Do not add parentheses for
X*(Y/Z)
- functions: Make percentage operations binary functions
- functions: Turn
min
andmax
into algebraic functions - cycle: For expressions, cycle graphic/text rendering correctly
- menus: Replace
EquationsMenu
withExpressionMenu
in other menus - ui: Insert space when inserting array inside function
Improvements
- menus: Updates to
PolynomialMenu
to enter polynomials and for conversions - menus: Add product and sum to symbolic and algebra menus
- menus: Make
ToolsMenu
selectSymbolicMenu
for symbols - expressions: Reorganize the code for rewrites
- rewrites: Add recorders for rewrites that are actually done
- tests: Some adjustments on color images
- rewrites: Convert algebraics into expression as needed
- complex: Parse
3i
andi3
in addition toi
- tests: Add support for more characters
- simulator: Separator color and dm32 support
- graph: Add space when rendering simple function
- keyboard: Updated SVG files with latest menu labeling changes
Release 0.7.4 "Flesh" - Polishing and refinements
This release is mostly about polishing various aspects of the implementation to make it more convenient and more efficient. It also adds user-defined functions parsing and evaluation, pixel-manipulation commands, bit operations on binary numbers, memory operations like sto+
or incr
, loading and saving BMP files, color support in the simulator, and more.
New features
- editor: Implement configurable word wrapping
- expressions: Add code for n-ary functions like
sum
- expressions: Parse user-function calls like
F(1;2;3;4)
- expressions: Ensure funcall objects are evaluated immediately
- functions: Add
sum
andproduct
functions - functions: Add combinations and permutations
- functions: Implement number rounding operations (
rnd
andtrnc
) - graph: Add graphical rendering for
cbrt
(cube root) andxroot
- graph: Graphical rendering of combinations, permutations
- graph: Graphical rendering of sum and product
- graphics: Add
pixon
,pixoff
andpix?
commands - graphics: Store and recall BMP files with
sto
andrcl
- graphics:
ToGrob
command converting object to graphic - logical: Add
SetBit
,ClearBit
andFlipBit
commands - memory: Implement the
Clone
(NewOb
) function - menus: Add
log2
andexp2
toExpLogMenu
- menus: Place
ListMenu
as a keyboard-accesisble menu - parsing: Parse n-ary functions
- program: Add vertical program rendering mode
- stack: Display error message emitted during stack rendering
- ui: Add colorization parameters for the user interface
- ui: Add some colorization
- variables: Add
Sto+
,Rcl+
and other variable arithmetic - variables: Implement
Increment
andDecrement
Bug fixes
- decimal: Fix precision when computing gamma/lgamma
- decimal: Fix rounding bug when rounding increases exponent
- doc: Add missing dependencies on Fedora (submitted by @vkadlcik)
- files: Do not error when opening constants/equation/library files
- files: Open only one configuration file at a time
- graphics: Fix bug drawing a line of width 0
- graphics: Use foreground color for parenthese and ratio
- lists: Separate list sum/product from regular sum/product
- renderer: Make sure
printf
respects target buffer size - simulator: process double-clicks correctly (submitted by @kjellc)
- tests: Change the height of ignored header
Improvements
- command: Factor out arity for all commands
- constants: Report parse error location for invalid constants
- demo: Add HP-48 style slow walk to
Walk
demo - demo: Modernize the code a little
- demo: Modify performance benchmarks to use
TEval
- demo: Replace imaginary unit constant
- doc: Remove reference to Intel Decimal Library
- files: Convert all file names to lowercase (Linux support)
- functions: Make it possible to interrupt a running sum/product
- graph: Improve rendering of
exp
,exp2
,exp10
- graphics: Separate color conversion step
- help: Do not display command name while editing
- ids: Make room for a few additional 1-byte commands
- locals: Document the absence of compiled local variables
- makefile: Add configuration files to the release
.tgz
file - parsing: Make the error message for sub-expressions more local
- readme: Remove reference to DM42 from top-level readme
- simulator: Avoid crash rendering %t in recorder
- simulator: Convert simulator code to support color
- simulator: Replicate open files limitations
- simulator: Separate db50x and db48x builds
- tests: Add colorized images to testing
- tests: Avoid occasional errors on some long-running tests
- ui: Define cursor position in
SelfInsert
with\t
- ui: Ignore EXIT, BSP and ENTER keys when clearing error
New Contributors
Full Changelog: v0.7.3...v0.7.4
Release 0.7.3 "Perfume" - Mostly bug fixes
This release is mostly about bug fixes, improving the build on simulator, and accelerating the test suite while keeping it stable.
New features
- simulator: Add F8 key to save state in the simulator
- errors: Add a beep when an error is shown
- linux: Add
-s
option for screen scaling (when Qt gets scaling wrong) - equations: Get library equation value for plotter, solver and integrator
- characters: Add constant, equation and lib markers to RPL menu
- characters: Add music-related characters and character menu
- commands: Add missing stack commands (nip, pick3, ndupn, unrot, unpick)
Bug fixes
- variables: Clone purged objects on stack after
Purge
- units: unit * symbolic is preserved as is (e.g.
'A'_m
) - compare: Enforce the
NumericalResults
flag for comparisons - constants: Fix parsing of constants, equations and library items
- sto: Repair
file exists
error storing to a source file - simulator: Do not try to create directory if it exists
- Report file errors, e.g. permissions or I/O errors
- equations: Mark
c
andR
as constants in equations - simulator: Double clicks are now considered as virtual keyboard touches
- ui: Emit only one beep, not two, for a syntax error on the command line
- ui: Avoid rare null-dereference crash when menu label is not set
- complex: Report a syntax error if the second half is empty
- utf8: Do not accept constant/equation/library codepoint in names
- units: Multiplying by
1_m
is OK even with algebraic - tests: Avoid case where CLEAR does not clear errors
- audio: Improve audio reliability on the simulator
- linux: Rewrite the audio-generation code to avoid crashes
- linux: Avoid infinite recursion in the tests
- linux: Fix warnings about unused variables
- linux: Avoid warnings about null pointer in strcmp
- linux: Avoid build error due to bad
ularge
overload in settings - linux: Fix type issue for the Insert function (reported as a warning)
- linux: Remove warning about mixing enums and integers
- linux: Avoid error on printf format
- linux: Avoid warnings about type qualifiers
- linux: Remove warnings about incompatible function casts
- linux: Address warnings about missing initializers
- linux: Fix warning about prinf formats
- linux: Address warning about signed vs unsigned
- linux: Remove warning about fall-through switch statement
- linux: Remove warnings about unused arguments
- tests: Repair several tests that were unstable due to scrolling images
- tests: Increase memory size to avoid occasional out of memory failures
- object: Make
as_uint32
andas_uint64
consistent for negative input
Improvements
- ui: Emulate HP48/HP50G behavior for errors (do not require key to continue)
- simulator: Add I/O wrapper around file state save/restore
- dmcp: Remove double return in the code
- simulator: Accept numeric keys in DMCP menus
- doc: Add Kjell Christenson to list of authors
- tests: Run command-line tests silently
- tests: Clear settings the fast way for quick tests
- dmcp: Do not treat the buzzer as a recorder error (avoid message noise)
- simulator: Ensure error messages show up in a recorder dump
- tests: Increase memory size to avoid failing tests
- tests: Increase delay waiting for function plots to appear
- tests: Refactor test suite interaction with RPL thread to accelerate it
- tests: Add a delay before launching the test thread to load initial state
- tests: Add missing reference picture for
char-menu
Release 0.7.2 "Light" - Libraries, Characters menu
This release introduces four relatively significant features:
- An Equation Library
- A more general Library
- Character menus
- A character modification catalog
There are also a number of bug fixes and improvements.
Features
-
The Equation Library is similar in principle to what is found in the HP50G. It is intended to store equations covering a variety of topics. The Equation Library is accessible using the EQS key (🟦 '()'). It is presently only very sparsely populated, but a future release should add the equations listed in Chapter 5 of the HP50G Advanced User's Reference Manual. Elements of the Equation Library appear as named Equation Objects. The Equation Library is configured by file
config/equations.csv
. -
The Library is similar to the Equation Library, but for all kinds of objects such as programs or code snippets. The Library is accessible using the LIB key (🟦 VAR). It can be used to customize your calculator, and is intended to play the roles of the
CST
variable (quick access to common features) and Library Objects / XLIB (external extensions to RPL). Elements of the Library appear as named Library Objects. The Library is configured by fileconfig/library.csv
. -
The Characters Menu lets you enter Unicode characters easily, by presenting various classes of characters, such as
RPL
,Greek
orPunct
. The Characters Menus is accessible using the CHAR key (🟦 2). It can be used to enter international characters (e.g. Greek or Cyrillic), as well as special characters such as arrows or blocks. The Characters Menu is configured by fileconfig/characters.csv
. -
The Characters Catalog appears when the
Catalog
is active and the cursor is inside some text object. It gives you access to characters that are visually close to the character on the left of the cursor. For example, after typingA
, the presented choices includeÀ
,a
orα
. The Characters Catalog is configured by fileconfig/characters.csv
. -
compare: Add comparisons for
true
andfalse
values -
Add
TEVAL
command (timed evaluation)
Bug fixes
- Do not add unnecessary parentheses in ratios, e.g.
(A+B)/(X-Y)
- Make sure we can save back the configuration files correctly
- Improve access path checks to accept
config:constants.csv
. - Avoid syntax error in
1/(1+x)
due to1/
being seen as a fraction - unitfile: Remove slight risk of bad menu display after garbage collection
- date/time: Make sure we save the stack and last args for
Date
,Time
, ... - parser: Skip spacing when parsing numbers (to parse back
→Text
result) - time: Fix rendering of DMS time in lists, matrices, vectors
- catalog: Fix a subtle bug on DM32 leading to a crash using the catalog
Improvements
- constants: Get values of special
π
ande
by name - constants: Add prefix in editor to identify constants, equations and xlib
- constants: Represent constants with an index for memory and performance
- constants: Parse units containing text
- constants: Allow
RCL
to recall a constant value - units: Direct insertion of units after numbers
- menu: Update
Roll
andRollDown
menu entries - show: Show all decimals for decimal values
- help: Display the correct on-line help topic for constants
- catalog: Use less memory for the sorted IDs
- integrate: Use numerical computations for faster convergence
- locals: Improve error message for bad locals
- graph: Improve graphical rendering of constants (bold) and equations
- graph: Do not add unnecessary parentheses in ratios
- tests: Add tests for characters menu/catalog
- tests: Fix the
.
vs0.
test - ui: Do not enter DMS inside text
- tests: Display disabled tests in gray
- catalog: Keep a single spelling, e.g. no
add
duplicates - tests: Add extra delay in the wait for update
- makefile: Add dependency of 'all' to the decimal constants
- save: Improve rendering control when saving files
- stack: Do not save stack in plot, integration or solver
- debug: Disable debugging when launching a program from function key
- simulator: Avoid piling up QT draw requests
- doc: Update performance numbers for 1M loops
- simulator: Add sound support
- simulator: Lazy screen refresh
- dmcp: Add UI refresh callback
- simulator: Move QT-dependent code out of dmcp.cpp
- Add reduced font
- runtime: Various changes to isolate QT build from the rest
Release 0.7.1 "Whip" - Bug fixes
Inserting variables, constants or units in a program was broken!
Also a few less critical fixes.
Bug fixes
- decimal: Apply
MinimumSignificantDigits
toSig
modes - tests: Fix missing
]
at end of vector - ui: Insert commands for unit conversions, constants and variables
- tests: Adjust help screen snapshot for authors
- menus: Do not clip text for hierarchical menus
- constants: Do not use units that don't parse correctly
- dmcp: Day of week convention adjustment
- help: Fix YouTube video preview
Full Changelog: v0.7.0...v0.7.1
Release 0.7.0 "Temple" - Graphics Equation Rendering
This release introduces a few major improvements, including graphical rendering of equations and matrices, the Show
command to display large objects full-screen, customizable constants, and date-related operations.
New features
- Graphical rendering of equations, fractions, matrices, vectors and lists. In graphical rendering mode, variables are showin in italics.
- Constants in the
ConstantsMenu
, split into categories, and loading from an optionalconfig/constants.csv
file, in a way similar to what existed for units. - Inverse trigonometric functions (
asin
,acos
andatan
) now produce unit objects with the current angle mode as a unit. This can be configured by theSetAngleUnits
/NoAngleUnits
flags. Cycle
(EEX key) now cycles between angle units.R→D
andD→R
commands to convert between degree and radian in a purely numerical way (no unit). This is for compatibility with HP.- Add
→Deg
,→Rad
,→Grad
,→πr
commands, which convert a number to the target unit using current angle mode, and convert an angle to the target angle unit. - Conversion from DMS to HMS and from HMS to DMS
- Rendering of dates:
19681205_date
renders asFri 5/Dec/1968
, with a format configuration using the same flags as for the header. Note that the date format isYYYYMMDD
, not the same as on HP calculators. This allowsYYYYMMDD.hhmmss
for dates with time. Date
andTime
command to return the current date and time. Additionally,DateTime
returns both date and time, andChronoTime
returns the time with 1/100s precision.→Date
and→Time
commands to set the system date and timeDate+
,DDays
and date arithmetic using+
or-
, using day units for the results. As an extension relative to HP calculators, these will accept fractional days, or other time units. For example, adding1000000_s
to19681205_date
generates a date with time result,Tue 16/Dec/1968, 13:46:40
JulianDayNumber
andDateFromJulianDayNumber
commands to convert between dates and Julian day numbers. These commands also accept fractional input.Show
command showing a full-screen graphical rendering of the result on the stack. The resut is size-adjusted. For example, you can display all digits in200!
. If the result does not fit on the screen, you can scroll using the ◀︎ and ▶︎, as well as 8, 6, 4 and 2. The maximum pixel size forShow
is set byMaxW
(default is the width of the LCD), the maximum height is set byMaxH
(default is 2048 pixels).AutoScaleStack
andNoAutoScaleStack
settings to automatically adjust the font size for the stack elements.- Support for system flags -20 to -26 (infinite results, overflow and underflow).
Bug fixes
- simulator: Adjust DMCP month off-by-one error
- Repair insertion of
while
loops and similar commands on the command line - Use stack format when drawing an object with
DrawText
(DISP
) - Arithmetic on unit objects no longer auto-simplifies, e.g.
1_s 1_s -
returns0_s
and not0
. - Perform computations for
→Q
using integer values, which avoids an issue where increasing the number of iterations with an unachievable precision could prodduce1/1
as the fractional result. - Repair auto-simplification for
i*i=-1
- Display a negative mixed fraction as
-1 1/3
and not1 -1/3
. - Do not insert
()
after a multiplication in algebraic mode - Accept units and tagged objects in
PolarToReal
andRealToPolar
- Accept angle units as input for
→DMS
- Off-by-one clipping error in header, erasing the shift annunciator
- Fix help for
FC?
(incorrectly stating that it tested for flat set) - Lookup units and constants in a case sensitive way
- Fix labels for
ExpFit
andLinFit
inRegressionMenu
.
Improvements
- tests: Adjust tests to match bugs fixed in v0.6.5
- dms: Accept entering minutes without third dot, e.g.
1.2.3 ENTER
- menus: Split the Time, Date and Alarm menus
- Split rendered objects at space boundaries. This notably ensures that large numbers are split at digit grouping boundaries, and makes it possible to display larger programs on the stack. The rendering of programs and matrices/vectors/lists has also been fine-tuned.
- The "white circle" glyph has a thicker border, makes it more readable in menus.
- doc: Update the list of unimplemented features
- menus: Draw a white circle for disabled flags, and allow the menu function to toggle the flag. This made it possible to reduce the number of menu entries for flag-heavy menus.
- Mixed fractions are now the default, as opposed to improper fractions
- doc: Improve the quickstart guide
- doc: Improve the documentation for sin, cos and tan
- tests: Make it possible to interrupt a running test
- help: Skip HTML tags, e.g.
- simulator: Add screenshot capability, and reduce window height
- menus:
ToolsMenu
selects time, date or angle menu based on units
Full Changelog: v0.6.5...v0.7.0
Release 0.6.5 "Testimony": Small bug fixes
This release does not contain much because FOSDEM took a lot of energy.
New features
- menu: Connect
ceil
andfloor
functions - Add real to polar conversions
- units: Add
dms
unit to angles menu
Bug fixes
- decimal: Compute
ln(0.002)
correctly - integer: Do not parse degree sign if in a complex
- units: Fix parsing of angle units
- font: Add radian glyph
Full Changelog: v0.6.4...v0.6.5