Releases: c3d/db48x
Release list
Release 0.7.12 "Multiply" - Multiple equations
This release focuses on the equation solver, notably in interaction with the equation library. The goal is to get one step closer to the equation library in the HP50G, including the ability to have graphical illustration and multiple equations.
WARNING: The pictures that are integrated in the help are not correctly packaged in this release
YouTube demo: https://youtu.be/5iSjn6pGhqA
Features
- doc: Add documentation for the equation library
- doc: Add images from HP50G equation library (to be used later)
- doc: Some help for the elastic buckling equations.
- equations: Accept lists of equations in library
- help: Add documentation for the various constants
- help: Do not exit help when opening URLs or missing topics
- lists: Add a setting to evaluate list as programs
- menu: Add menu entries for solver imprecision and iterations
- solver: Add support for multiple equation solving
- ui: Add settings to hide/show empty menus and clear menu on EXIT
- units: Add flow units (per user request) in Fluid section of units
Bug fixes
- blitter: Adjust the right margin
- blitter: Base horizontal adjust on scanline, not width
- characters: Display correct content for built-in menus
- constants: Close current file while parsing values
- constants: Update some outdated values
- doc: Show help for equations and constants
- help: Do not try to load PNG images
- rewrites: Avoid contradictory rules when reordering constants
- solver: Work correctly with units (when in variables but not equation)
Improvements
- build: Shorten the size of the version abbrev
- config: Use config files only for user configuration
- doc: Record performance data about unit conversion
- help: Avoid slowing down when scrolling through pages of help
- help: Record position for history even without a
\n - simulator: Add tweak to show RPL object details
- tests: Increase wait time for tests with blinking cursor
- units: Do not simplify while in unit mode
Full Changelog: v0.7.11...v0.7.12
Release 0.7.11 "Rest" - Refine interactive stack, graphics in help
This release is a refinement minor release. The primary focus is the interactive stack, which now lets you edit items, sort either according to memory representation or by value, display information about objects, and jump directly to a given stack level using digits.
The simple random number generator implemented in 0.7.10 was replaced with an additive congruential random number generator (ACORN), which can be configured in number of bits and number of iterations. A side effect is that there is now regression testing for single-variable statistics.
The history feature was also improved by automatically enabling the EditMenu when selecting history, and then having the (unshifted) word left and word right commands automatically cycle through history if used at beginning or end of the editing buffer.
Features
- help: Add ability to display BMP images in help files
- images: Convert help images to BMP
- ui: Add
Editfeature to interactive stack - ui: Add history menu entries to
EditMenu - ui: Accept
UNDOwhile in interactive stack mode - ui: Have word previous/next cycle through history
- ui: Accept digits to select stack level in interactive stack
- random: ACORN random number generator
Bug fixes
- editor: Fix spacing after number followed by
-sign - ui: Do not set the
editingfield from interactive stack - ui: Replace interactive stack "Edit" with "Echo"
- ui: Block user input while using interactive stack
- ui: Do not draw menu markers when displaying interactive stack
- runtime: Avoid crash running above allocated memory in
move_globals
Enhancements
- ui: Reorganize code handling interactive stack keys
- help: Adjust help area to new height for menus
Signed-off-by: Christophe de Dinechin christophe@dinechin.org
Full Changelog: v0.7.10...v0.7.11
Release 0.7.10 "Hospitality" - Interactive stack
This release primarily adds the "interactive stack" feature of HP calculators.
Features
- stack: Interactive stack and associated menu
- functions: Very basic random number generator
- demo: Add
CountPrimesandRandomPlotexamples
Bug fixes
- menus: Do not execute if-then-else and similar
- expressions: Avoid error testing for zero/one in power operator
- condidionals: Avoid infinite loop evaluating condition
- menu: Insert
iferr-then-elsecorrectly from menu - constants: Skip menu entries
Improvements
- menus: Reorganize stack menu to put
DupandDropon first page - menu: Add error functions to
Debugmenu
Full Changelog: v0.7.9...v0.7.10
Release 0.7.9 "Just Asleep" - Online WASM simulator
This release includes a number of bug fixes, facilitates build from scratch by
third-parties, and delivers a WASM-based simulator that runs on the
https://48calc.org web site.
Features
- menu: Add
Purgeto theClearThingsMenu - purge: Add support for lists
- units: Accept units for
sqrt,cbrtandxroot - wasm: Add variant for
48calc.org - wasm: Implement WASM support
Bug fixes
- complex: Give
Syntax errorfor phasor without an angle - dms/hms: Parse empty numbers in DMS entry
- dms/hms: Protect display against bad input
- editor: Make sure we reposition after shift-up and shift-down
- parser: Parse degrees as an angle unit in phasors
- simulator: Avoid high CPU usage when a timer is active
- simulator: Use the correct color for firmware text
- ui: Compute the correct refresh rate even when nothing is displayed
- ui: Create a non-empty dirty rectangle when clearing annunciators
- ui: Do not refresh beyond LCD size
- ui: Ensure we redraw the shift region to clear busy
- units: Disable simplification during unit definition evaluation
Improvements
- build: Fix the clean build
- object: Remove defaults for
as_uint32and similar - parser: Cache parser::length when possible
- parser: Merge the
parser::endandparser::lengthfields - parser: Optimize integer parsing early exit
- simulator: Avoid
Cancelin file save dialog - simulator: Use
httpsas a protocol for git submodules - tests: Add support for degrees sign
- tests: Add test for polar angle conversion.
- units: Add
factoringvariable to limit simplifications - wasm: Add link to deployed WASM simulator in the README
- wasm: Add script to add COOP / COEP headers
- wasm: Run the RPL thread in a separate thread
Full Changelog: v0.7.8...v0.7.9
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
2Xas 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
xrootarguments in algebraic parsing
Improvements
- editor: Shift-up returns to beginning of line if on first row
- errors: Add
error_saveclass, use it inconstant::value - expressions: Use the
SaveAutoSimplifyclass insimplify_products - units: Split
EngtoElecandVisc
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
ASNasAsNumber(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
abswith|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
tevaltakes less than 100ms - equations: Rename
PerfectGasequation toIdealGas - menus: Adjust size of menus to make descenders visible
- solver: Replace
SolverPrecisionwithSolverImprecision
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
lnameandxvarscommands - arithmetic: Implement
div2command - variables: Implement
varsandtvarscommands
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
sqandcubed - Conversion functions
→PolyandPoly→to convert to and from polynomials - Optional case-sensitive symbol matching
- Algebra configuration directory (like
CASDIRon HP calculators) - rewrites: Replace
rewritecommand with HP-compatible↑Matchand↓Match - rewrites: Add
ExplicitWildcardsoption 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:
Purgenow resets system flags to default value
Bug fixes
- editor: Fix unresponsive keys after using
EXITkey 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
modandremin rendering - graph: Do not add parentheses for
X*(Y/Z) - functions: Make percentage operations binary functions
- functions: Turn
minandmaxinto algebraic functions - cycle: For expressions, cycle graphic/text rendering correctly
- menus: Replace
EquationsMenuwithExpressionMenuin other menus - ui: Insert space when inserting array inside function
Improvements
- menus: Updates to
PolynomialMenuto enter polynomials and for conversions - menus: Add product and sum to symbolic and algebra menus
- menus: Make
ToolsMenuselectSymbolicMenufor 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
3iandi3in 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
sumandproductfunctions - functions: Add combinations and permutations
- functions: Implement number rounding operations (
rndandtrnc) - 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,pixoffandpix?commands - graphics: Store and recall BMP files with
stoandrcl - graphics:
ToGrobcommand converting object to graphic - logical: Add
SetBit,ClearBitandFlipBitcommands - memory: Implement the
Clone(NewOb) function - menus: Add
log2andexp2toExpLogMenu - menus: Place
ListMenuas 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
IncrementandDecrement
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
printfrespects 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
Walkdemo - 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
.tgzfile - 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
SelfInsertwith\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
-soption 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
NumericalResultsflag for comparisons - constants: Fix parsing of constants, equations and library items
- sto: Repair
file existserror 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
candRas 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_mis 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
ulargeoverload 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_uint32andas_uint64consistent 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