Test ran at 2025-09-14 12:58:24.954072+00:00 SOLUTION: hp41cx_tools=1.7.1: Cross-platform tools to supercharge your HP-41CX emulator experience Origin: source archive hp41cx_tools-1.7.1.tgz at https://sourceforge.net/projects/calculator-scripts/files/Alire/hp41cx_tools-1.7.1.tgz with hashes sha256:aed1b078137880fef793e782b4aba996a26a922b0c60e926ae9f9e3ac0a39626, sha512:05fa1ad84cf67a5c61666901a55df9d6bcbdda9c8db6f6aeeff00774893b325d18f8089ffc2c3d62094df4bb371c85ff2c811e1b5b3eb6034c69e0fe2c1ae525 Properties: Author: Martin Krischik Build Switches: Description: Cross-platform tools to supercharge your HP-41CX emulator experience Executable: hp41cx_tools-main Executable: hp41cx_tools-dm41_to_px41 Executable: hp41cx_tools-px41_to_dm41 Executable: hp41cx_tools-unicode_to_dm41 Executable: hp41cx_tools-unicode_to_px41 License: GPL-3.0-or-later Long_Description: ## HP-41CX Emulator Tools Step into the golden era of retro computing with **hp41cx_tools**, a versatile suite that turbocharges your HP-41CX emulator adventures! Unlike many tools shackled to Windows, this toolkit runs flawlessly on **macOS**, **Linux**, and **Windows**, making it the ultimate companion for enthusiasts using the iconic [PX-41CX](https://paxer.net/PX-41CX/) from Paxer or the sleek [DM41X](https://www.swissmicros.com/product/dm41x) from SwissMicros. Channel your inner 1980s programming wizard and master memory dumps and FOCAL source code with ease. Built with the precision of **Ada 2022** for unshakeable reliability, these tools decode and convert data with the finesse of the HP-41CX's legendary keystrokes. Paired with intuitive **ZShell scripts** for macOS and Linux, the suite streamlines complex workflows, whether you're on a modern MacBook, a Linux workstation, or a Windows PC. This cross-platform prowess ensures every retro computing fan can join the fun, no matter their setup. ### Key Features - **Memory Dump Decoder**: Transform raw HP-41CX emulator memory dumps into readable FOCAL source code with pinpoint accuracy. - **Source Code Converter**: Seamlessly convert between PX-41CX and DM41X FOCAL code styles, bridging emulator ecosystems. - **Unicode Support**: Convert Unicode-encoded FOCAL programs to PX-41CX or DM41X formats, blending vintage charm with modern workflows. - **Cross-Platform Power**: Runs natively on macOS, Linux, and Windows-unlike many Windows-only alternatives. - **Open Source**: Hosted on [SourceForge](https://sourceforge.net/p/calculator-scripts/code/ci/master/tree/Tools/hp41cx_tools/src/), ready for you to hack, extend, and share with the retro computing community. - **Comprehensive Docs**: Explore detailed guides via [GNATdoc](https://calculator-scripts.sourceforge.io/gnatdoc/hp41cx-tools). ### Why You'll Love It Relive the thrill of programming the HP-41CX, the calculator that defined a generation of scientific and hobbyist triumphs. Whether you're decoding vintage memory dumps or crafting new FOCAL programs, **hp41cx_tools** brings the past to life with unmatched versatility. Join the retro computing revolution and make your emulator sing-on any desktop OS! Maintainer: Martin Krischik Maintainers_Logins: krischik Name: hp41cx_tools Tag: calculator Tag: tools Tag: retrocomputing Tag: ada-2022 Tag: hp-41cx Tag: dm41x Tag: px41cx Tag: cross-platform Version: 1.7.1 Website: https://calculator-scripts.sourceforge.io/hp41cx-tools/ Dependencies (direct): adacl^6.3.0 adacl_regexp^6.3.0 adacl_sar^6.3.0 Dependencies (solution): adacl=6.3.0 adacl_regexp=6.3.0 adacl_sar=6.3.0 aunit=25.0.0 Dependencies (graph): adacl=6.3.0 --> aunit=25.0.0 (25.0.0) adacl_regexp=6.3.0 --> adacl=6.3.0 (^6.3.0) adacl_sar=6.3.0 --> adacl=6.3.0 (^6.3.0) hp41cx_tools=1.7.1 --> adacl=6.3.0 (^6.3.0) hp41cx_tools=1.7.1 --> adacl_regexp=6.3.0 (^6.3.0) hp41cx_tools=1.7.1 --> adacl_sar=6.3.0 (^6.3.0) LOG: [alr test] Testing hp41cx_tools=1.7.1 [alr test] Spawning retrieval for remote crate: alr -d -n get hp41cx_tools=1.7.1 Note: Deploying hp41cx_tools=1.7.1... ######################################################################## 100.0% ######################################################################## 100.0% ######################################################################## 100.0% #=#=# ######################################################################## 100.0% ##=#=# ##-=#=-# ######################################################################## 100.0% Note: Deploying aunit=25.0.0... #=#=# ##O#-# Note: Deploying adacl=6.3.0... #=#=# ######################################################################## 100.0% ######################################################################## 100.0% ######################################################################## 100.0% ######################################################################## 100.0% ##O#-# ######################################################################## 100.0% Note: Deploying adacl_regexp=6.3.0... ######################################################################## 100.0% ######################################################################## 100.0% ######################################################################## 100.0% ######################################################################## 100.0% #=#=# ##=#=# ##=O#- # ########### 15.8% ############################################################### 87.6% ######################################################################## 100.0% Note: Deploying adacl_sar=6.3.0... ######################################################################## 100.0% ######################################################################## 100.0% ######################################################################## 100.0% ######################################################################## 100.0% #=#=# ##=#=# ##=O#- # #-#O=# # #=#=-# # -#O#- # # -=#=# # # ######################################################################## 100.0% hp41cx_tools=1.7.1 successfully retrieved. Dependencies were solved as follows: + adacl 6.3.0 (new) + adacl_regexp 6.3.0 (new) + adacl_sar 6.3.0 (new) + aunit 25.0.0 (new,indirect) [alr test] Spawning default test for remote crate: alr -d -n build --release -- -cargs:Ada -gnatwn Note: Alire has selected automatically this toolchain: gprbuild=25.0.1 gnat_native=15.2.1 You can select a different toolchain at any time with `alr toolchain --select` Download will start now: Note: Deploying gprbuild=25.0.1... #=#=# ################# 24.7% #################################################### 72.6% ######################################################################## 100.0% Note: gprbuild=25.0.1 installed successfully. Note: Deploying gnat_native=15.2.1... #=#=# 0.1% ## 3.5% ###### 9.7% ########### 16.6% ################ 22.7% ##################### 29.3% ######################### 35.5% ############################## 42.2% ################################### 48.7% ####################################### 55.2% ############################################ 61.5% ################################################# 68.1% ##################################################### 74.4% ########################################################## 80.9% ############################################################## 87.3% ################################################################### 93.8% ######################################################################## 100.0% Note: gnat_native=15.2.1 installed successfully. Note: Building hp41cx_tools=1.7.1/hp41cx_tools.gpr... Setup [mkdir] object directory for project AUnit [mkdir] library directory for project AUnit [mkdir] object directory for project AdaCL [mkdir] library directory for project AdaCL [mkdir] object directory for project AdaCL_RegExp [mkdir] library directory for project AdaCL_RegExp [mkdir] object directory for project AdaCL_SAR [mkdir] library directory for project AdaCL_SAR [mkdir] object directory for project HP41CX_Tools [mkdir] exec directory for project HP41CX_Tools Compile [Ada] hp41cx_tools-main.adb [Ada] hp41cx_tools-dm41_to_px41.adb [Ada] hp41cx_tools-px41_to_dm41.adb [Ada] hp41cx_tools-unicode_to_dm41.adb [Ada] hp41cx_tools-unicode_to_px41.adb [Ada] adacl_sar_config.ads [Ada] adacl-sar-filter-replace-text.adb [Ada] adacl-wide_sar-line.ads [Ada] adacl-wide_wide_sar-line-write_file.adb [Ada] adacl-wide_wide_sar-line-read_file.adb [Ada] adacl-wide_wide_sar-filter-remove-line.adb [Ada] adacl-sar-filter-replace.ads [Ada] adacl-sar-filter-filter_line.adb [Ada] adacl-wide_sar-filters-search-includes.adb [Ada] adacl-sar-filters-search-includes.adb [Ada] adacl-wide_sar-filter-remove-line.adb [Ada] adacl-sar-filter-list.ads [Ada] adacl-wide_wide_sar-filter-replace-indent.adb [Ada] adacl-wide_sar-line-write_file.adb [Ada] adacl-wide_sar-filter-remove-tab.adb [Ada] adacl-wide_sar-filter-replace-indent.adb [Ada] adacl-wide_sar-line-list.ads [Ada] adacl-sar-filter-replace-indent.adb [Ada] adacl-wide_sar-filters-search.adb [Ada] adacl-sar-filters-search.adb [Ada] adacl-wide_sar-filter.adb [Ada] adacl-sar-filter-insert.adb [Ada] adacl-wide_sar.ads [Ada] adacl-wide_wide_sar-filter-remove.ads [Ada] adacl-wide_wide_sar-filter-insert-text.adb [Ada] adacl-wide_wide_sar.ads [Ada] adacl-sar-filter-insert-text.adb [Ada] adacl-sar-filter.adb [Ada] adacl-sar-filter-remove-tab.adb [Ada] adacl-wide_wide_sar-filters.adb [Ada] adacl-sar-filter-filter_after_last.adb [Ada] adacl-wide_sar-filter-insert.adb [Ada] adacl-wide_sar-filter-trim.adb [Ada] adacl-wide_wide_sar-filter-remove-comment.adb [Ada] adacl-wide_sar-filter-replace.ads [Ada] adacl-sar-filters.adb [Ada] adacl-wide_wide_sar-filter.adb [Ada] adacl-wide_sar-filter-remove.ads [Ada] adacl-sar-filter-filter_before_first.adb [Ada] adacl-wide_sar-filter-insert-text.adb [Ada] adacl-wide_wide_sar-filter-list.ads [Ada] adacl-wide_sar-line-read_file.adb [Ada] adacl-sar-filter-filter_lines.adb [Ada] adacl-wide_wide_sar-filter-replace.ads [Ada] adacl-wide_sar-filter-replace-text.adb [Ada] adacl-sar-line-write_file.adb [Ada] adacl-wide_wide_sar-filter-filter_line.adb [Ada] adacl-wide_sar-filters.adb [Ada] adacl-wide_wide_sar-filter-filter_lines.adb [Ada] adacl-sar-line.ads [Ada] adacl-wide_sar-filter-filter_lines.adb [Ada] adacl-sar-filter-insert-line.adb [Ada] adacl-sar-line-read_file.adb [Ada] adacl-sar-filter-trim.adb [Ada] adacl-wide_wide_sar-filter-insert-line.adb [Ada] adacl-wide_wide_sar-filter-trim.adb [Ada] adacl-wide_wide_sar-filter-insert.adb [Ada] adacl-sar-filter-remove-comment.adb [Ada] adacl-wide_wide_sar-filter-remove-tab.adb [Ada] adacl-wide_sar-filters-search-excludes.adb [Ada] adacl-sar-filter-remove-line.adb [Ada] adacl-wide_sar-filter-insert-line.adb [Ada] adacl-sar-filters-search-excludes.adb [Ada] adacl-wide_wide_sar-line.ads [Ada] adacl-wide_sar-filter-filter_line.adb [Ada] adacl-wide_wide_sar-filters-search-includes.adb [Ada] adacl-sar-filter-remove.ads [Ada] adacl-sar.ads [Ada] adacl-wide_wide_sar-filters-search-excludes.adb [Ada] adacl-wide_wide_sar-filter-filter_before_first.adb [Ada] adacl-wide_wide_sar-filters-search.adb [Ada] adacl-wide_sar-filter-remove-comment.adb [Ada] adacl-wide_sar-filter-filter_before_first.adb [Ada] adacl-wide_wide_sar-filter-replace-text.adb [Ada] adacl-sar-line-list.ads [Ada] adacl-wide_sar-filter-filter_after_last.adb [Ada] adacl-wide_wide_sar-line-list.ads [Ada] adacl-wide_wide_sar-filter-filter_after_last.adb [Ada] adacl-wide_sar-filter-list.ads [Ada] adacl_regexp_config.ads [Ada] adacl-generic_strings-regexp.adb [Ada] adacl-generic_strings-hash.adb [Ada] adacl-wide_wide_strings-spitbol-table_boolean.ads [Ada] adacl-wide_strings-spitbol-table_boolean.ads [Ada] adacl-strings-spitbol-table_boolean.ads [Ada] adacl-generic_strings.ads [Ada] adacl-strings-spitbol-table_vstring.ads [Ada] adacl-wide_strings-spitbol-table_vstring.ads [Ada] adacl-wide_strings-regexp.ads [Ada] adacl-wide_wide_strings-spitbol-patterns.adb [Ada] adacl-wide_wide_strings-spitbol-table_integer.ads [Ada] adacl-wide_strings-spitbol.adb [Ada] adacl-strings-regexp.ads [Ada] adacl-wide_strings-spitbol-patterns.adb [Ada] adacl-wide_strings-spitbol-table_integer.ads [Ada] adacl-wide_wide_strings-spitbol-table_vstring.ads [Ada] adacl-strings-spitbol-table_integer.ads [Ada] adacl-strings-spitbol.adb [Ada] adacl-wide_wide_strings-regexp.ads [Ada] adacl-strings-spitbol-patterns.adb [Ada] adacl-wide_wide_strings-spitbol.adb [Ada] aunit-io.ads [Ada] aunit-memory-utils.adb [Ada] aunit-memory.adb [Ada] aunit-time_measure.adb [Ada] aunit-reporter-text.adb [Ada] aunit-reporter-xml.adb [Ada] aunit-reporter-gnattest.adb [Ada] aunit-reporter-junit.adb [Ada] ada_containers-aunit_lists.adb [Ada] ada_containers.ads [Ada] aunit-assertions.adb [Ada] aunit-test_filters.adb [Ada] aunit-test_caller.adb [Ada] aunit-test_results.adb [Ada] aunit-test_suites.adb [Ada] aunit-tests.ads [Ada] aunit-test_fixtures.adb [Ada] aunit.adb [Ada] aunit-reporter.adb [Ada] aunit-test_cases.adb [Ada] aunit-run.adb [Ada] aunit-simple_test_cases.adb [Ada] aunit-options.ads [Ada] adacl_config.ads [Ada] adacl-os-low_level.ads [Ada] adacl-os-to_utf_string.adb [Ada] adacl-os-to_wide_wide_string.adb [Ada] adacl-pointer-unique.ads [Ada] adacl-assert-vectors.adb [Ada] adacl-wide_wide_strings.adb [Ada] adacl-wide_strings-hex.adb [Ada] adacl-assert-decimal.adb [Ada] adacl-wide_strings-io.adb [Ada] adacl-assert-pointer.adb [Ada] adacl-pointer-holder.adb [Ada] adacl-assert-fixed.adb [Ada] adacl-assert.adb [Ada] adacl-pointer-shared.ads [Ada] adacl-test_cases-parameters.adb [Ada] adacl-os.ads [Ada] adacl.ads [Ada] adacl-pointer.ads [Ada] adacl-strings-vectors.ads [Ada] adacl-command_line.ads [Ada] adacl-command_line-getopt.adb [Ada] adacl-test_cases.ads [Ada] adacl-strings-io.adb [Ada] adacl-trace.adb [Ada] adacl-wide_wide_strings-hex.adb [Ada] adacl-wide_wide_strings-io.adb [Ada] adacl-assert-discrete.adb [Ada] adacl-pointer-unique_with_delete.adb [Ada] adacl-wide_strings.adb [Ada] adacl-wide_strings-vectors.ads [Ada] adacl-base.ads [Ada] adacl-pointer-element.adb [Ada] adacl-queue.adb [Ada] adacl-assert-indefinite_vectors.adb [Ada] adacl-assert-arrays.adb [Ada] adacl-wide_wide_strings-vectors.ads [Ada] adacl-strings.adb [Ada] adacl-pointer-shared_with_delete.adb [Ada] adacl-trace-assert.ads [Ada] adacl-assert-float.adb [Ada] adacl-strings-hex.adb [Ada] adacl-calendar.adb [Ada] adacl-limited_base.ads [Ada] hp41cx_tools.ads [Ada] hp41cx_tools-filter.adb [Ada] hp41cx_tools-commandline.adb [Ada] hp41cx_tools-converter.adb [Ada] hp41cx_tools-decoder.adb [Ada] hp41cx_tools-registers.adb [Ada] hp41cx_tools_config.ads [Ada] hp41cx_tools-alarm.adb Build Libraries [gprlib] aunit.lexch [gprlib] AdaCL.lexch [archive] libaunit.a [index] libaunit.a [gprlib] AdaCL_RegExp.lexch [archive] libAdaCL.a [index] libAdaCL.a [gprlib] AdaCL_SAR.lexch [archive] libAdaCL_SAR.a [archive] libAdaCL_RegExp.a [index] libAdaCL_RegExp.a [index] libAdaCL_SAR.a Bind [gprbind] hp41cx_tools-main.bexch [Ada] hp41cx_tools-main.ali [gprbind] hp41cx_tools-dm41_to_px41.bexch [Ada] hp41cx_tools-dm41_to_px41.ali [gprbind] hp41cx_tools-px41_to_dm41.bexch [Ada] hp41cx_tools-px41_to_dm41.ali [gprbind] hp41cx_tools-unicode_to_dm41.bexch [Ada] hp41cx_tools-unicode_to_dm41.ali [gprbind] hp41cx_tools-unicode_to_px41.bexch [Ada] hp41cx_tools-unicode_to_px41.ali Link [link] hp41cx_tools-main.adb [link] hp41cx_tools-dm41_to_px41.adb [link] hp41cx_tools-px41_to_dm41.adb [link] hp41cx_tools-unicode_to_dm41.adb [link] hp41cx_tools-unicode_to_px41.adb Success: Build finished successfully in 54.95 seconds. Found declared GPR file: hp41cx_tools.gpr [alr test] Test completed SUCCESSFULLY