Skip to content
Tags give the ability to mark specific points in history as being important
  • v0.7.6
    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` and `xvars` commands
    * arithmetic: Implement `div2` command
    * variables: Implement `vars` and `tvars` 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?` and `PixC?` to `GraphicsMenu`
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.7.5
    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` and `cubed`
    * Conversion functions `→Poly` and `Poly→` 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` and `rem` in rendering
    * graph: Do not add parentheses for `X*(Y/Z)`
    * functions: Make percentage operations binary functions
    * functions: Turn `min` and `max` into algebraic functions
    * cycle: For expressions, cycle graphic/text rendering correctly
    * menus: Replace `EquationsMenu` with `ExpressionMenu` 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` select `SymbolicMenu` 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` and `i3` in addition to `i`
    * 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
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.7.4
    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` and `product` functions
    * functions: Add combinations and permutations
    * functions: Implement number rounding operations (`rnd` and `trnc`)
    * graph: Add graphical rendering for `cbrt` (cube root) and `xroot`
    * graph: Graphical rendering of combinations, permutations
    * graph: Graphical rendering of sum and product
    * graphics: Add `pixon`, `pixoff` and `pix?` commands
    * graphics: Store and recall BMP files with `sto` and `rcl`
    * graphics: `ToGrob` command converting object to graphic
    * logical: Add `SetBit`, `ClearBit` and `FlipBit` commands
    * memory: Implement the `Clone` (`NewOb`) function
    * menus: Add `log2` and `exp2` to `ExpLogMenu`
    * 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` and `Decrement`
    
    **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
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.7.3
    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` and `R` 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` and `as_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`
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.7.2
    Release 0.7.2 "Light" - Libraries, Characters menu
    
    This release introduces four relatively significant features:
    
    1. An Equation Library
    2. A more general Library
    3. Character menus
    4. 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 file `config/library.csv`.
    
    * The *Characters Menu* lets you enter Unicode characters easily, by presenting
      various classes of characters, such as `RPL`, `Greek` or `Punct`.
      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 file `config/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
      typing `A`, the presented choices include `À`, `a` or `α`.
      The Characters Catalog is configured by file `config/characters.csv`.
    
    * compare: Add comparisons for `true` and `false` 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 to `1/` 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 `π` and `e` 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` and `RollDown` 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 `.` vs `0.` 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
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.7.1
    Release 0.7.1 "Whip" - Quick bug fixes
    
    Inserting variables, constants or units in a program was broken.
    Also a few less critical fixes.
    
    == Bug fixes ==
    
    * decimal: Apply `MinimumSignificantDigits` to `Sig` 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
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.7.0
    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 optional `config/constants.csv` file, in a way
      similar to what existed for units.
    * Inverse trigonometric functions (`asin`, `acos` and `atan`) now
      produce unit objects with the current angle mode as a unit. This can
      be configured by the `SetAngleUnits` / `NoAngleUnits` flags.
    * `Cycle` (EEX key) now cycles between angle units.
    * `R→D` and `D→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 as `Fri 5/Dec/1968`,
      with a format configuration using the same flags as for the header.
      Note that the date format is `YYYYMMDD`, _not_ the same as on HP
      calculators. This allows `YYYYMMDD.hhmmss` for dates with time.
    * `Date` and `Time` command to return the current date and time.
      Additionally, `DateTime` returns both date and time, and
      `ChronoTime` returns the time with 1/100s precision.
    * `→Date` and `→Time` commands to set the system date and time
    * `Date+`, `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,
      adding `1000000_s` to `19681205_date` generates a date with time
      result, `Tue 16/Dec/1968, 13:46:40`
    * `JulianDayNumber` and `DateFromJulianDayNumber` 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 in `200!`. 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 for `Show` is set by `MaxW`
      (default is the width of the LCD), the maximum height is set by
      `MaxH` (default is 2048 pixels).
    * `AutoScaleStack` and `NoAutoScaleStack` 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 -` returns `0_s` and not `0`.
    * Perform computations for `→Q` using integer values, which avoids an
      issue where increasing the number of iterations with an unachievable
      precision could prodduce `1/1` as the fractional result.
    * Repair auto-simplification for `i*i=-1`
    * Display a negative mixed fraction as `-1 1/3` and not `1 -1/3`.
    * Do not insert `()` after a multiplication in algebraic mode
    * Accept units and tagged objects in `PolarToReal` and `RealToPolar`
    * 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` and `LinFit` in `RegressionMenu`.
    
    == 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, adding videos and screenshots
    * doc: Improve the documentation for sin, cos and tan
    * tests: Make it possible to interrupt a running test
    * help: Skip HTML tags, e.g. <video>
    * simulator: Add screenshot capability, and reduce window height
    * menus: `ToolsMenu` selects time, date or angle menu based on units
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.6.5
    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` and `floor` 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
    
  • v0.6.4
    Release 0.6.4 "Healing": Testing and fixes
    
    This release focuses on heavy testing of the new variable-precision
    decimal stack. Adding tests also means finding bugs.
    
    Another significant change is support for fixed-precision
    hardware-accelerated floating point, using 32-bit and 64-bit IEEE754
    binary floating-point representation. Since this uses a binary format,
    some decimal values do not map to decimal correctly. For example,
    displaying 1.2 with a large number of decimals will show residue,
    because 1.2 does not have an exact (zero-terminated) representation in
    binary.
    
    New features:
    
    * plotting: Make refresh rate configurable
    * menu: Add `/` key to `FractionsMenu`
    * hwfp: Add support for hardware-accelerated floating-point
    * menus: Add hardware floating-point flag to `MathModesMenu`
    * ui: Allow multiple uses of `.` to insert DMS separators
    * HMS: Editing of HMS values in HMS format
    
    Bug fixes:
    
    * stats: Fix crash on `variance` with single-column statistics
    * algebraic: Clear error before evaluating the function
    * functions: Correctly emit a type error for non-algebraics
    * ui: Make sure we save stack if closing the editor
    * logical: Fix mask for rotate left with 64-bit size
    * logical: Make sure we save args for single-argument logicals
    * flags: Update flags on `FlipFlag`, consume them from `BinaryToFlags`
    * stack: Show multi-line objects correctly
    * lists: Returns `Bad argument value` for index with bad arguments
    * lists: Return an empty list for tail of empty list
    * arithmetic: `→Frac` should not error on integers
    * power: Do not shut down during `WAIT` if on USB power
    
    Improvements:
    
    * menu: Shorten the labels `→QIter` and `→QPrec` to avoid scrolling
    * stack: Avoid running same code twice on simulator
    * ids: Add aliases for hardware floating point
    * functions: Optimize abs and neg
    * ui: Replace calls to `rt.insert` with calls to `insert`
    * menu: Reorganize fractions menu
    * dms: Do the DMS conversion using fractions
    * list: Adjust multi-line rendering
    * copyright: Update copyright to 2024
    * text: Return null text when indexing past end of text
    
    Testing:
    
    * tests: Increase the delay for help to draw
    * tests: Add tests for hardware-accelerated floating-point
    * tests: Add shifts and rotate tests
    * tests: Check flag functions
    * tests: Test DMS and HMS operations
    * tests: Add test for `integrate` using decimal values
    * tests: Test multi-line stack display
    * tests: Add tests for `GETI`
    * tests: Min and max commands
    * tests: Repair last regression test
    * tests: Check behaviour of 0^0
    * tests: Avoid string overflow in case of very long message
    
  • v0.6.3
    Release 0.6.3 "Come and See": Repair test suite
    
    The focus of this release was to reactivate the test suite and fix the
    problems that were found activating it.
    
    [![Recording of a full run of the test suite](https://img.youtube.com/vi/aHW2GcX5S6o/maxresdefault.jpg)](https://www.youtube.com/watch?v=aHW2GcX5S6o&list=PLz1qkflzABy-Cs1R07zGB8A9K5Yjolmlf)
    
    New features:
    
    - HMS and DMS operations
    - unit: Rendering of `dms` and `hms` units
    - Allow `·` as a multiplication sign in equations
    - ui: Display 'E' cursor inside parentheses
    - graphics: Accept based integers as position for `DrawText`
    - complex: Add setting to switch between `2+3i` and `2+i3`.
    
    Bug fixes:
    
    - decimal: Fix precision loss for addition with carry
    - Base: limit range of bases to 2-36
    - files: Do not add a trailing zero when reading a text file
    - decimal: Adjust `MinimumSignificantDigits` behaviour
    - units: Do not auto-simplify `1.0` during conversion
    - decimal: Normalize parsed numbers
    - solver: Fix sign error in epsilon exponent for solve/integrate
    - parser: Accept `x!` as input
    - simulator: Avoid faulty break-through in switch statement
    - complex: Make tag higher-priority than complex
    - editor: Adjust cursor and select correctly during replace
    - decimal: Fix display of 0.2 in NoTrailingDecimal mode
    - complex: Save `this` in a GC pointer when it can move
    - arithmetic: Do not fail because of surrounding error
    - decimal: Clamp int32 conversions from decimal
    - commands: Parse `exp10` correctly in expressions
    - decimal: Avoid infinite loop computing `expm1`
    - ids: Do not allow parsing of structures
    - dmcp: Make sure the tests don't block on `wait_for_key`
    - decimal: Use correct angle unit for negative gamma values
    
    Improvements:
    
    - settings: Add classes that save/restore a given setting
    - Add `XSHIFT` to shift to XSHIFT state directly
    - Add NOSHIFT constant to simplify test writing
    - ui: Add a variant of `close_editor` without trailing zero
    - decimal: Cache gamma_ck values (accelerate gamma and lgamma)
    - Replace magic constant `-1` with `EXIT_PGM`
    - doc: Record performance data for 1000 iterations of SumTest
    - decimal: Add tracing for gamma / lgamma function
    
    New tests:
    
    - Add tests for arithmetic truncation on short bitsizes
    - Add tests for on-line help
    - Add test for plotting flags
    - Add test for Unicode to text conversions
    - Add test for rectangular complex display options
    - Add tests for plot scaling functions
    - Add tests for the sorting functions
    - Add test for parsing text with quotes inside
    - Add test for file-based `STO` and `RCL`
    - Add test for 2^256 computation (buf #460)
    - Fix indentation of `[PASS]` or `[FAIL]` for UTF8 characters
    - Add tests for units and conversions
    - Add a keyboard test checking the single-colon insert in text
    - Add test for i*i=-1 auto-simplification
    - Add basic test for numerical integration
    - Add test for fraction formats
    - Add solver test
    - Add missing tests
    - Add test for immediate `STO` (#390)
    - Add tests for the `Cycle` command
    - Add test for catalog feature
    - Add test for "smart" keyboard shortcuts introduced in 0.4.6
    - Add regression test for #371
    - Add tests for editor operations
    - Test stack operations
    - Add test for `GXor`, `GOr` and `GAnd`
    - Add test for `ResetModes`
    - Add plotting test for every decimal function
    - Add image checking for graphical tests
    - Add tests for graphic and text drawing commands
    - Make it possible to individually run tests.
    - Add plotting tests
    - Add test parsing the various spellings for commands
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.6.2
    Release 0.6.2 "Kephas": Restoring the test suite
    
    The focus of this release was to complete the transition to the
    variable-precision decimal code. The full regression test suite was
    restored, with only two tests still failing (complex `asin` and
    `asinh`). The two missing functions, `Gamma` and `LogGamma`, were
    implemented. This also exposed many bugs that were fixed.
    
    New features:
    
    * `NumberedVariables` setting to allow `0 STO` to ease RPN transcoding (#690)
    * `ClearStack` (CLEAR) command
    * Variable-precision `gamma` and `lgamma` functions (#710)
    
    Bug fixes:
    
    * Do not leave bad expression on stack after error (#663)
    * Reject unit conversion between undefined units (#664)
    * Accept names of menus on the command line (#669)
    * tests: CLEAR clears stack and errors (#672)
    * The `:` characters now starts a tag on empty command line (#673)
    * Do not evaluate tagged objects too early (#674)
    * test: Entry and editing of equations (#677)
    * test: `type` returns negative values in "detailed" mode (#678)
    * Run loop end pointer not GC-adjusted for last allocated object (#679)
    * Do not erase alpha indicator when clearing busy cursor (#680)
    * Do not emit trailing space when rounding `1.999` to `2.` (#687)
    * Allow expression rewrites to deal with `pow` (#694)
    * Reject `«` character in symbols and commands (#695)
    * Rendering of spacing for decimal numbers (#699)
    * Improve precision of `atan` function
    * Rendering of `+` and `-` operators in compatibility modes (#700)
    * Rounding of decimal numbers no longer generates bad characters (#702)
    * No longer error out rendering symbolic complex (#703)
    * Parse complex numbers correctly inside equations (#704)
    * Ensure `sqrt(-1)` has a zero real part (#705)
    * Do not drop last digit of decimal subtraction (#706)
    * Evaluate expressions during expression pattern matching (#708)
    * `LastMenu` executes immediately while editing (#711)
    * Add back missing angle glyphs in font (#712)
    * Return correct angle quadrant for `atan2` (#715)
    * `Get` no longer rejects arrays as index values (#718)
    * `Get` returns correct error for bad argument types (#718)
    
    Improvements:
    
    * Update `.gitignore` entry
    * Automated testing of setting flags (#657)
    * Automated testing of non-flag settings (#670)
    * Test fixed-base based numbers using HP-compatible lowercase notation (#675)
    * Test fraction rendering using fancy digits (#676)
    * Add test for "compatible" variant of `type` command (#678)
    * test: Recover from error during data entry (#681)
    * Increase default `MaxNumberBits` to 4096 (#686)
    * tests: Add test for cube root of -8 (#685)
    * tests: Data entry for `Σ`, `∏` and `∆` (#689)
    * Restrict `STO` to names, natural numbers and specific IDs (#688)
    * doc: Document flas file access for `STO` and `RCL` (#691)
    * list: Optimize iterators to avoid copies (#692)
    * tests: spacing-independent testing of structure rendering (#693)
    * tests: adjust test suite for variable-precision decimals (#696)
    * tests: Automatically exit if `-T` option is given (#697)
    * tests: Check we don't accept `.` as meaning `0.` for RPL compatibility
    * Add `modulus` alias back for `abs` (#707)
    * Improve convergence speed and accuracy for logarithms
    * Add `decimal::make` to minimize risk of sign errors
    * Display stack level at top of stack level, not bottom (#709)
    * Improve complex `sqrt` accuracy on real axis (#714)
    * tests: Test decimal functions at full 34 digits precision (#716)
    * Complex `sqrt` and `cbrt` with full precision (#717)
    * tests: Take into account additional expression simplifications
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.6.1
    Release 0.6.1 "Happy New Year": Quick bug fixes
    
    A few quick bug fixes that make DB48X a bit more usable.
    
    **New features**
    
    * Setting to display `2+i3` instead of `2+3i` (#660)
    * HMS and DMS operations (#654)
    * Special `1_dms` and `1_hms` units rendering in DMS / HMS (#650)
    
    **Bug fixes**
    
    * Improve behavior of `+/-` key while editing (#658)
    * Do not accept base 37 (#656)
    * Insert `for` statement in program instead of executing it (#655)
    * Hide trailing decimal separator for decimals with integer values (#653)
    * Fix display of `19.8` with `0 FIX` (#652)
    * Implement true decimal to integer conversion (#648)
    
    **Improvements**
    
    * doc: Record performance data for 0.6.0
    * doc: Update status file
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.6.0
    Release 0.6.0 "Christmas": Introducing variable precision
    
    This release was a bit longer in coming than earlier ones, because we are about
    to reach the limits of what can fit on a DM42. This release uses 711228 bytes
    out of the 716800 (99.2%).
    
    Without the Intel Decimal Library code, we use only 282980 bytes. This means
    that the Intel Decimal Library code uses 60.2% of the total code space. Being
    able to move further requires a rather radical rethinking of the project, where
    we replace the Intel Decimal Library with size-optimized decimal code.
    
    As a result, release 0.6.0 introduces a new table-free and variable-precision
    implementation of decimal computations. In this release, most operations are
    implemented, but some features are still missing (e.g. Gamma function). This
    release will be simultaneous with 0.5.2, which is functionally equivalent but
    still uses the Intel Decimal library. The new implementation is much more
    compact, allowing us to return to normal optimizations for the DM42 and regain
    some of the lost performance. On the other hand, having to switch to a table
    free implementation means that it's significantly slower than the Intel Decimal
    Library. The upside of course is that you can compute with decimal numbers that
    have up to 9999 digits, and a decimal exponent that can be up to 2^60
    (1 152 921 504 606 846 976).
    
    **New features**
    
    Variable precision decimal floating point implementation for arithmetic,
    trigonometrics, logs, exponential and integer factorial. Other functions may
    still return "unimplemented error".
    
    **Bug fixes**
    
    None. If anything, this release introduces bugs in computations and performance
    regressions. However, it frees *a lot* of space for further DM42 development.
    
    **Improvements**
    
    The `Precision` setting now sets the number of digits with a granularity of one,
    between 3 and 9999. Ideal use of memory is with multiples of 12 digits, e.g. 12,
    24 or 36 digits, where decimal packing does not cause lost bits.
    
    **Regressions**
    
    In addition to lower performance and unimplemented functions, this version no
    longer builds a compatible QSPI. This means that returning to the DM42 requires
    flashing *both* the QSPI and the PGM file.
    
  • v0.5.2
    Release 0.5.2 "Christmas Eve": Reaching hard limits on the DM42
    
    This release was a bit longer in coming than earlier ones, because we are about
    to reach the limits of what can fit on a DM42. This release uses 711228 bytes
    out of the 716800 (99.2%).
    
    Without the Intel Decimal Library code, we use only 282980 bytes. This means
    that the Intel Decimal Library code uses 60.2% of the total code space. Being
    able to move further requires a rather radical rethinking of the project, where
    we replace the Intel Decimal Library with size-optimized decimal code.
    
    As a result, release 0.5.2 will be the last one using the Intel Decimal Library,
    and is release in parallel with 0.6.0, which switches to a table-free and
    variable-precisions implementation of decimal code that uses much less code
    space. The two releases should otherwise be functionally identical
    
    **New features**
    
    * Shift and rotate instructions (#622)
    * Add `CompatibleTypes` and `DetsailedTypes` setting to control `Type` results
    * Recognize HP-compatible negative values for flags, e.g. `-64 SF` (#625)
    * Add settings to control multiline result and stack display (#634)
    
    **Bug fixes**
    
    * Truncate to `WordSize` the small results of binary operations (#624)
    * Fix day-of-week shortcut in simulator
    * Avoid double-evaluation of immediate commands when there is no help
    * Generate an error when selecting base 1 (#628)
    * Avoid `Number too big` error on based nunbers
    * Correctly garbage-collect menu entries (#630)
    * Select default settings that allow solver to find solutions (#627)
    * Fix display of decimal numbers (broken by multi-line display)
    * Fix rendering of menu entries for `Fix`, `Std`, etc
    * Detect non-finite results in arithmetic, e.g. `(-8)^0.3`m (#635, #639)
    * Fix range-checking for `Dig` to allow `-1` value
    * Accept large values for `Fix`, `Sci` and `Eng` (for variable precision)
    * Restore missing last entry in built-in units menu (#638)
    * Accept `Hz` and non-primary units as input for `ConvertToUnitPrefix` (#640)
    * Fix LEB128 encoding for signed value 64 and similar (#642)
    * Do not parse `IfThenElse` as a command
    * Do not consider `E` as a digit in decimal numbers (#643)
    * Do not parse `min` as a function in units, but as minute (#644)
    
    **Improvements**
    
    * Add `OnesComplement` flag for binary operation (not used yet)
    * Add `ComplexResults` (-103) flag (not used yet)
    * Accept negative values for `B→R` (according to `WordSize`)
    * Add documentation for `STO` and `RCL` accessing flash storage
    * Mention `True` and `False` in documentation
    * Rename `MaxBigNumBits` to `MaxNumberBits`
    * Return HP-compatible values from `Type` function
    * Minor optimization of flags implementation
    * Catalog auto-completion now suggests all possible spellings (#626)
    * Add aliases for `CubeRoot` and `Hypothenuse`
    * Align based number promotion rules to HP calculators (#629)
    * Expand the range of garbage collector integrity check on simulator
    * Show command according to preferences in error messages (#633)
    * Avoid crash in `debug_printf` if used before font initialization
    * Update performance data in documentation
    * Add ability to disable any reference to Intel Decimal Floating-point library
    * Simplify C++ notations for safe pointers (`+x` and `operartor bool()`)
    * Fix link to old `db48x` project in `README.md`
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.5.1
    Release 0.5.1 "Talents": More RPL commands
    
    This release focuses on rounding up various useful RPL commands
    and bringing RPL a bit closer to feature-complete.
    
    New features:
    * Portable bit pattern generation commands, `gray` and `rgb` (#617)
    * Add support for packed bitmaps (#555)
    * Implement RPL `case` statement, extended with `case when` (#374)
    * `Beep` command (#50)
    * `List→` command (#573)
    * `Size` command (#588)
    * `Str→` command (#590)
    * `Obj→` command (#596)
    * Add flag to control if `0^0` returns `1` or undefined behaviour (#598)
    * Unicode-based `Num` and `Chr` commands, `Text→Code` and `Code→Text` (#597)
    * `IP` and `FP` commands (#601)
    * Percentage operations `%`, `%CH` and `%T` (#602)
    * `Min` and `Max` operations (#603)
    * `Floor` and `Ceil` operations (#605)
    * `Get` with a name argument (#609)
    * `Put` command (#610)
    * `Head` and `Tail` commands (#614)
    * `Map`, `Reduce` and `Filter` commands (#613)
    
    Bug fixes:
    * Ensure rounded rectangles stay within their boundaries (#618)
    * Prevent auto-power-off for long-running programs (#587)
    * Fix old-style RPL shortcuts for `FS?C` and the like
    * Add `FF` shortcut for `FlipFlag`
    * Fix rendering of `<`, `>`, etc in old-style RPL compatibility mode (#595)
    * Update various menus
    * Evaluate program arguments in `IFT` and `IFTE` (#592)
    * Evaluate algebraic expressions in `if`, `while` and `case` (#593)
    * Load variables from state file in correct order (#591)
    * Avoid truncation of state file when ASCII conversions occur (#589)
    * Clear debugging state more completely after `kill` (#600)
    * `Wait` no longer makes it harder to stop a program (#619)
    * `mod` no longer gives wrong result for negative fractions and bignums (#606)
    * No longer strip tags in non-numeric arithmetic operations (#607)
    
    Improvements:
    * Small updates to demo file
    * A long `Wait` command allows the calculator to switch off (#620)
    * Centering of variable names in `VariablesMenu` (#610)
    * Makefile `check-ids` target to check if commands are in help or menus (#615)
    
  • v0.5.0
    Release 0.5.0: Statistics and flags
    
    This release provides statistics functions, scatter and bar plots, and flags.
    
    **New features**:
    
    * Statistics (#495) and linear regression (#569)
    * File-based statistics (#571)
    * `Sort`, `QuickSort`, `ReverseSort`, `ReverseQuickSort` and `RevList` (#572)
    * Flags, i.e. `CF`, `SF`, `FS?`, etc (#43)
    * Plot scaling commands such as `SCALE`, `CENTR`, `XRNG`, ... (#582)
    * Add `CurveFilling` and `DrawPlotAxes` setting flags (#580)
    * `ScatterPlot` (#577) and `BarPlot` (#579)
    
    **Bugs**:
    
    * Save settings enumerations as portable text (#565)
    * Avoid infinite loop when reading at end of help file
    * Repair behaviour of `-1 DIG`, broken by settings improvements
    * Fix definition of `rpm` in units and units file
    * Crash in `list::map` when called function errors out (#570)
    * Fix editor horizontal movement when inserting commands (#576)
    * Repair plotting demo (#583)
    * Fix vertical position of axes in `DrawAxes` (#584)
    * Very long drawing loop if `ppar` axes are backwards (#585)
    
    **Improvements**:
    
    * Sets editor selection correctly for command-line errors
    * Ability to parse command and setting names in quotes, e.g. `'Radians'`
    * Insert command names inside quotes (#575)
    * Update documentation of implemented features (#569)
    * Make `PlotParameters` a keyword (#578)
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.4.12
    Release v0.4.12: Emergency bug fixes, filesystem access
    
    A few quick bug fixes related to issues found in 0.4.11.
    
    New features:
    
    * `STO` and `RCL` to file (#375)
    * Parsing of text containing quotes (#562)
    
    Improvements:
    
    * Rework file load/save dialog boxes
    * Preliminary plumbing for statistics functions
    
    Bugs:
    
    * Error loading state files that contain directories (#559)
    * Font setting for result was taken from editor font (#560)
    * Crash running the `Shapes` demo (#563)
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.4.11
    Release 0.4.11: Debugging, Units, Settings
    
    This release implements debugging, infinite RPL recursion, mixed
    fractions, customizable units cycling, and restores missing entries in
    the units menu.
    
    New features:
    
    * Allow customization of `Cycle` for units (#534)
    * Allow infinite recursion in RPL code (#537)
    * RPL program and expression debugging (#552) including after EXIT
    * Mixed fractions such as `1 1/3` (#554)
    * `BeepOn` and `SilentBeepOn` features (#280)
    * `ScreenCapture` and keyboard shortcut (#434)
    
    Bugs:
    
    * Accept `2.3 FIX` and `#0 Background` (#557)
    * Do not parse `67.200525` as a `decimal32` (#551)
    * Bump low battery voltage to 2.550V (#553)
    
    Improvements:
    
    * Catalog shows all commands *containing* typed text (#556)
    * Reorganize the units menu (#550) and restore missing units
    * Remember menu page for `LastMenu` (#545)
    * `SPC` key inserts `;` when inside parenthese (#499)
    * Settings are now entirely defined by `ids.tbl` (#294)
    * Improve user interface code consistency
    * Improve GC handling of "just-past-end-of-object" pointers
    * Remove the `execute()` RPL callback, rely on `evaluate()`
    * Optimize allocation of 1-byte vs 2-byte opcodes
    * Render `abs` as `abs` and not `norm` (accept `norm` while parsing)
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.4.10
    Release 0.4.10: Unit files and performance
    
    This release focuses on display performance optimization and support
    for unit data files.
    
    New features:
    * Cycle command for units (#517)
    * Possibility to load units from `config/units.csv` file (#496, #544)
    * Internal: `debug_printf` facility (#541)
    * `ShowBuiltinUnits` and `HideBuiltinUnits` settings (#542)
    * Provide `config/units.csv` example file (#543)
    * Build units menu from units file (#544)
    
    Bugs:
    * Possible memory corruption in expressions
    * Calculator lock-up trying with unit conversions in numeric mode (#529)
    * Numerator and divisor no longer truncated to 32-bit (#539)
    * Correctly save `LastArg` for interactive operations (#540)
    
    Improvements:
    * Optimize the font cache, makes stack drawing faster in SCI mode (#526)
    * Add `TypeName` to object menu (#527)
    * Regroup units in units menu by scale (#528)
    * Status of implementation and performance data in documentation (#530)
    * Performance: Reduce frequency of busy cursor drawing (#531)
    * Performance: Reimplement range-based type checkig (#532)
    * Performance: Focused -O3 optimizations on DM42 (#533)
    * Makefile: Install target installs demo and config (#547)
    * Garbage collector for menu labels (#548)
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
    
  • v0.4.9
    Release 0.4.9 - Full support for units (All Saints Edition)
    
    This release focuses on support for units, but also adds a large number of other
    fixes and improvements.
    
    New features:
    
    * Power-off message indicating low-battery situation (#521)
    * Add `ConvertToUnixPrefix` command and SI prefix menu keys (#513)
    * Recognize all units that exist in the HP48, and a few more (#491)
    * `UFACT` (`FactorUnit`) command (#512)
    * Unit simplification, e.g. turn `1_m^2*s/s/m` into `1_m` (#506)
    * Converting unity units to numbers (#502)
    * `→Unit` command (#501)
    * `UnitValue` (`UVAL`) command (#493)
    * Implement "kibibytes" (`KiB`) and power-of-two SI prefixes (#492)
    * Unit arithmetic (#481)
    * Add `B->R` and `R->B` to `BasesMenu` (#488)
    * Implement term reordering capability in `rewrite` (#484)
    * `BaseUnits` (`UBase`) command (#483)
    * Unit parsing for complex units, e.g. `1_cm^2` (#482)
    * Unit arithmetic (#481) including automatic conversions (#480)
    * `Convert` command (#480)
    * Implement the `Cycle` command for unit objects
    * Add `Å` character for angstroem (#477)
    * Add `Merge state` to `State` system menu (#475)
    * Use Unicode font to display the name of a program when executing it (#469)
    * Allow incremental search to find digits and Unicode (#468)
    * Add tool glyph to user interface font
    
    Bug fixes:
    
    * Do not parse symbols beyond input buffer (#524)
    * Parse unit menu entries as expressions, not symbols (#523)
    * Fix reduced-precision arithmetic (#521)
    * Do not parse empty denominator as zero, e.g. `2/s` (#520)
    * Do not parse a fraction inside a power, e.g. `X^2/3` (#519)
    * Convert fractions to decimal in numeric mode (#516)
    * Do not emit `mantissa_error` for valid numbers (#515)
    * Apply negation correctly on unit objects (#500)
    * Do not emit separator after trailing 0 in integer decimals (#489)
    * Do not emit extra spacing before decimal separator (#485)
    * Fix stack depth in one error case of `evaluate_function()`
    * Fix display of next/previous icons for large menus (#478)
    * Clear settings when loading a state (#474)
    * Fix separators in whole part of decimal numbers when setting is not 3 (#464)
    * Parse `(sin x)²+(cos x)²` correctly, as well as HP67 Mach example (#427)
    
    Improvements:
    
    * Rename `equation` as `expression` (#518) and `labelText` as `label_text`
    * Do not update `LastArg` except for command line (#511)
    * ToolsMenu: Connect units to the `UnitsConversionMenu` (#514)
    * Display unit using `/` and `·`, e.g. `1_m·s^2/A` (#507)
    * Show units menu for inverse units as `mm⁻¹` (#503)
    * Display battery level more accurately, i.e. consider 2.6V "low" (#476)
    * No longer acccept empty equations or parentheses, e.g. `1+()` (#487)
    * Make `StandardDisplay` mode obey `MinimumSignificantDigits` (#462)
    * Add algebraic evaluation function for easier evaluation in C++ code
    * Reimplement `unit` type as a derivative of `complex` (#471)
    * documentation: Use `🟨` and `🟦` for more commands (#467)
    * Swap `Search` and `Copy` commands in `EditorMenu` (#466)
    * `STO` stores variables at beginning of directory (#462)
    * documentation: Add quickstart guide, used for video recording
    * documentation: Add links to YouTube videos
    * documentation: Add release notes
    * documentation: Some typos and other improvements
    * documentation: Rework section on keyboard mappings
    
    Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>