From cca85c4bf9d4a866c81c7d40685064d28f509c1a Mon Sep 17 00:00:00 2001 From: Darren Banfi <33876110+boingball@users.noreply.github.com> Date: Fri, 4 Sep 2026 09:55:18 +0100 Subject: [PATCH 1/8] fix: test selected printer unit --- src/MintPrintSettings.c | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/src/MintPrintSettings.c b/src/MintPrintSettings.c index 7591079..99ceba2 100644 --- a/src/MintPrintSettings.c +++ b/src/MintPrintSettings.c @@ -177,11 +177,19 @@ static int mp_test_print_extra_pages_requested = 0; static BOOL mp_test_print_skip_config_save = FALSE; static BOOL mp_test_suite_capture_mode = FALSE; +/* printer.device always loads MintPRINT's live Unit0 profile. A normal Test + * Print made while another GUI profile is selected therefore needs the same + * one-job override used by the regression suite; otherwise its page says + * "Unit1" while the job is actually sent to Unit0. */ +#define MP_TEST_PRINT_CONFIG ((CONST_STRPTR)"T:MintPRINT-testsuite.cfg") + // Saved printer profiles: ENV:MintPRINT/Unit0 .. Unit(MAX_UNITS-1). Only // Unit0 is what the driver actually reads at print time; the others are // switchable GUI-side profiles (e.g. for a second/third network printer). #define MAX_UNITS 8 +static BOOL mp_copy_file(CONST_STRPTR src, CONST_STRPTR dst); + /* A few pixels below the Test Print/Debug/Save/Exit row (216+12 tall, * itself 4px below Keep Spooled Jobs/View Spooler at 198) for even spacing - see * WA_InnerHeight in main() for why raising this also raises that: the @@ -2060,14 +2068,30 @@ static BOOL mintprint_test_page(struct Window *win) { return FALSE; } - /* Ordinary Test Print tests what the user is looking at and makes it - * live Unit0. The regression suite supplies its one-shot T: config - * directly and MUST NOT overwrite the user's persistent Unit0 while it - * cycles synthetic matrix values through these same in-memory fields. */ + /* Save the profile being viewed. The driver itself always reads Unit0, + * so for Unit1..7 copy that saved profile to its existing one-job T: + * override. DriverOpen consumes and deletes the override after loading + * it, leaving the user's active Unit0 completely unchanged. The + * regression suite supplies its own override and skips this block. */ if (!mp_test_print_skip_config_save && !save_driver_config(win)) { - printf("Test Print: could not save Unit0 settings\n"); + printf("Test Print: could not save Unit%d settings\n", current_unit_index); return FALSE; } + if (!mp_test_print_skip_config_save && current_unit_index != 0) { + char selected_config[64]; + + unit_config_path(current_unit_index, FALSE, selected_config, + sizeof(selected_config)); + if (!mp_copy_file((CONST_STRPTR)selected_config, + MP_TEST_PRINT_CONFIG)) { + printf("Test Print: could not prepare Unit%d for this test\n", + current_unit_index); + DeleteFile(MP_TEST_PRINT_CONFIG); + return FALSE; + } + printf("Test Print: using Unit%d for this job; Unit0 remains active\n", + current_unit_index); + } have_installed_ver = mp_read_driver_version(MINTPRINT_DRIVER_DEST, &installed_ver); @@ -2235,6 +2259,8 @@ static BOOL mintprint_test_page(struct Window *win) { if (OpenDevice((CONST_STRPTR)"printer.device", 0, (struct IORequest *)test_print_job.request, 0) != 0) { printf("Test Print: could not open printer.device\n"); + if (!mp_test_print_skip_config_save && current_unit_index != 0) + DeleteFile(MP_TEST_PRINT_CONFIG); mp_test_print_release(win); return FALSE; } From 64566cae54aa9e2154c3f8399288ec7636a9af1a Mon Sep 17 00:00:00 2001 From: Darren Banfi <33876110+boingball@users.noreply.github.com> Date: Fri, 4 Sep 2026 09:55:20 +0100 Subject: [PATCH 2/8] fix: test selected printer unit --- docs/MintPrintSettings.guide | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/MintPrintSettings.guide b/docs/MintPrintSettings.guide index 8c22b20..a45373c 100644 --- a/docs/MintPrintSettings.guide +++ b/docs/MintPrintSettings.guide @@ -519,6 +519,11 @@ a printer actually produces physical output before trying a real application - MultiView and Test Print both provide a much simpler baseline than a strip-printing application like Wordworth. +When Unit1 through Unit7 is selected, Test Print uses that profile for +this one job without replacing the active Unit0 profile. Normal +application printing continues to use Unit0 until you explicitly click +Activate. + An IPP job reporting success, or even a completed job state, is not by itself proof of a physical page - some printer firmware accepts a job and silently discards it. Treat an actual sheet of paper as the From 90adaf4ac66289554bd49dff70f15d0f8dd7408d Mon Sep 17 00:00:00 2001 From: Darren Banfi <33876110+boingball@users.noreply.github.com> Date: Fri, 4 Sep 2026 09:55:21 +0100 Subject: [PATCH 3/8] fix: test selected printer unit --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 85895db..4eb96b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,10 @@ to this page; replace that summary when preparing the next release. ## Unreleased +- **Test Print now honours the selected printer profile (issue #75).** + Testing Unit1 through Unit7 uses that profile for the one test job while + leaving the active Unit0 printer unchanged. + - **Engine-aware 360/720 DPI support (driver 41.19, issue #95).** Settings now accepts reported 360 and 720 DPI square modes and keeps generic printer resolutions separate from PWG Raster and Apple Raster capabilities. This prevents a generic high-resolution mode from being offered to a raster decoder that did not advertise it, while preserving the existing marked 300* compatibility override for confirmed printers. Asymmetric modes such as 1440x720 remain intentionally hidden until MintPRINT can represent independent X/Y DPI. - **Large jobs tolerate slow printer back-pressure (driver 41.18).** The From bc87fb67d9f4fc16338669198890f5f453c9607b Mon Sep 17 00:00:00 2001 From: Darren Banfi <33876110+boingball@users.noreply.github.com> Date: Sat, 5 Sep 2026 00:04:29 +0100 Subject: [PATCH 4/8] Fix activation fallback for saved printer profiles --- src/MintPrintSettings.c | 50 ++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/src/MintPrintSettings.c b/src/MintPrintSettings.c index 99ceba2..fd79e3f 100644 --- a/src/MintPrintSettings.c +++ b/src/MintPrintSettings.c @@ -1024,6 +1024,37 @@ static BOOL unit_file_exists(int idx) { return FALSE; } +/* Return a readable saved profile path, preferring the live ENV copy and + * falling back to ENVARC for profiles created by older builds or systems + * where the volatile ENV copy has been flushed. */ +static BOOL unit_config_source_path(int idx, char *out, int out_size) { + BPTR lock; + char path[64]; + + if (!out || out_size <= 0) return FALSE; + out[0] = '\0'; + + unit_config_path(idx, FALSE, path, sizeof(path)); + lock = Lock((CONST_STRPTR)path, ACCESS_READ); + if (lock) { + UnLock(lock); + strncpy(out, path, out_size - 1); + out[out_size - 1] = '\0'; + return TRUE; + } + + unit_config_path(idx, TRUE, path, sizeof(path)); + lock = Lock((CONST_STRPTR)path, ACCESS_READ); + if (lock) { + UnLock(lock); + strncpy(out, path, out_size - 1); + out[out_size - 1] = '\0'; + return TRUE; + } + + return FALSE; +} + /* Peeks just the MODEL= line out of a saved unit file, without disturbing * any of the live GUI/driver-config state. Used to label the Unit dropdown. */ static void peek_unit_model(int idx, char *out, int out_size) { @@ -2080,9 +2111,9 @@ static BOOL mintprint_test_page(struct Window *win) { if (!mp_test_print_skip_config_save && current_unit_index != 0) { char selected_config[64]; - unit_config_path(current_unit_index, FALSE, selected_config, - sizeof(selected_config)); - if (!mp_copy_file((CONST_STRPTR)selected_config, + if (!unit_config_source_path(current_unit_index, selected_config, + sizeof(selected_config)) || + !mp_copy_file((CONST_STRPTR)selected_config, MP_TEST_PRINT_CONFIG)) { printf("Test Print: could not prepare Unit%d for this test\n", current_unit_index); @@ -10269,19 +10300,22 @@ void process_window_events(struct Window *win) { custom_printf("Unit%d has no saved settings yet - nothing to activate.\n", current_unit_index); } else { - char src_env[64], src_envarc[64]; + char src_config[64]; char dst_env[64], dst_envarc[64]; BOOL ok; - unit_config_path(current_unit_index, FALSE, src_env, sizeof(src_env)); - unit_config_path(current_unit_index, TRUE, src_envarc, sizeof(src_envarc)); unit_config_path(0, FALSE, dst_env, sizeof(dst_env)); unit_config_path(0, TRUE, dst_envarc, sizeof(dst_envarc)); ok = ensure_config_dir((CONST_STRPTR)"ENV:MintPRINT") && ensure_config_dir((CONST_STRPTR)"ENVARC:MintPRINT") && - mp_copy_file((CONST_STRPTR)src_env, (CONST_STRPTR)dst_env) && - mp_copy_file((CONST_STRPTR)src_envarc, (CONST_STRPTR)dst_envarc); + unit_config_source_path(current_unit_index, + src_config, + sizeof(src_config)) && + mp_copy_file((CONST_STRPTR)src_config, + (CONST_STRPTR)dst_env) && + mp_copy_file((CONST_STRPTR)src_config, + (CONST_STRPTR)dst_envarc); if (ok) { char src_cache_env[64], src_cache_envarc[64]; From f76b9c41dbd28b0e70577bed3aa42db853db9245 Mon Sep 17 00:00:00 2001 From: Darren Banfi <33876110+boingball@users.noreply.github.com> Date: Sat, 5 Sep 2026 00:08:14 +0100 Subject: [PATCH 5/8] Bump MintPRINT release to 1.3.2 --- src/MintPrintSettings.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MintPrintSettings.c b/src/MintPrintSettings.c index fd79e3f..a6799bf 100644 --- a/src/MintPrintSettings.c +++ b/src/MintPrintSettings.c @@ -203,7 +203,7 @@ static BOOL mp_copy_file(CONST_STRPTR src, CONST_STRPTR dst); // Define the USED macro for GCC #define USED __attribute__((used)) -#define MINTPRINT_SETTINGS_VERSION "1.3.1" +#define MINTPRINT_SETTINGS_VERSION "1.3.2" #define MINTPRINT_DRIVER_DEST ((CONST_STRPTR)"DEVS:Printers/MintPRINT") /* MintPrint Settings now ships as a single drawer containing both bundled @@ -229,7 +229,7 @@ static BOOL mp_read_driver_version(CONST_STRPTR path, struct MPDriverVersion *ou /* Visible both to AmigaOS's Version command and in the About requester. */ static const char USED mintprint_version[] = - "$VER: MintPrintSettings " MINTPRINT_SETTINGS_VERSION " (03.09.2026)"; + "$VER: MintPrintSettings " MINTPRINT_SETTINGS_VERSION " (04.09.2026)"; // Simple extension check BOOL has_extension(const char *filename, const char *ext) { From 76ac769b4aa0d7ba1b4250f5cf1a0e285cd8bef6 Mon Sep 17 00:00:00 2001 From: Darren Banfi <33876110+boingball@users.noreply.github.com> Date: Sat, 5 Sep 2026 00:08:15 +0100 Subject: [PATCH 6/8] Bump MintPRINT release to 1.3.2 --- CHANGELOG.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4eb96b2..c8e765f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,14 +12,19 @@ Keep the full version-by-version history here. The front page and Aminet readme should carry only a short summary of the latest version, with a link to this page; replace that summary when preparing the next release. -[Unreleased](#unreleased) | [1.3.1](#131) | [1.3.0](#130) | [1.2.7](#127) | [1.2.6](#126) | [1.2.5](#125) | [1.2.4](#124) | [1.2.3](#123) | [1.2.2](#122) | [1.2.1](#121) | [1.2.0](#120) | [1.1.0](#110) | [1.0.3b](#103b) | [1.0.3](#103) | [1.0.2](#102) | [1.0.0](#100) +[1.3.2](#132) | [1.3.1](#131) | [1.3.0](#130) | [1.2.7](#127) | [1.2.6](#126) | [1.2.5](#125) | [1.2.4](#124) | [1.2.3](#123) | [1.2.2](#122) | [1.2.1](#121) | [1.2.0](#120) | [1.1.0](#110) | [1.0.3b](#103b) | [1.0.3](#103) | [1.0.2](#102) | [1.0.0](#100) -## Unreleased +## 1.3.2 + +MintPRINT 1.3.2 is a corrective release for selected-unit testing and +saved-printer activation, with the latest printer compatibility fixes. - **Test Print now honours the selected printer profile (issue #75).** Testing Unit1 through Unit7 uses that profile for the one test job while leaving the active Unit0 printer unchanged. - +- **Activation handles legacy saved profiles.** Unit activation now accepts a + profile present in either ENV: or ENVARC:, copying the readable source into + both Unit0 locations instead of failing with "could not copy Unit1 to Unit0". - **Engine-aware 360/720 DPI support (driver 41.19, issue #95).** Settings now accepts reported 360 and 720 DPI square modes and keeps generic printer resolutions separate from PWG Raster and Apple Raster capabilities. This prevents a generic high-resolution mode from being offered to a raster decoder that did not advertise it, while preserving the existing marked 300* compatibility override for confirmed printers. Asymmetric modes such as 1440x720 remain intentionally hidden until MintPRINT can represent independent X/Y DPI. - **Large jobs tolerate slow printer back-pressure (driver 41.18).** The From 1b736532b704365a3d0b6a1d5f4706485bee4b9e Mon Sep 17 00:00:00 2001 From: Darren Banfi <33876110+boingball@users.noreply.github.com> Date: Sat, 5 Sep 2026 00:08:16 +0100 Subject: [PATCH 7/8] Bump MintPRINT release to 1.3.2 --- Aminet/MintPRINT.readme | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Aminet/MintPRINT.readme b/Aminet/MintPRINT.readme index 81b233a..10a61f7 100644 --- a/Aminet/MintPRINT.readme +++ b/Aminet/MintPRINT.readme @@ -2,7 +2,7 @@ Short: IPP/AirPrint driver and setup tool Author: Darren Banfi (boingball) Uploader: boingball@gmail.com Type: driver/print -Version: 1.3.1 +Version: 1.3.2 Requires: 68000+; AmigaOS 2.04+; TCP/IP stack providing bsdsocket.library Architecture: m68k-amigaos >= 2.04 @@ -224,10 +224,13 @@ cross-project collaboration: sharing compatibility findings and recent fixes, allowing MintPRINT's implementation to be compared against AmiAirPrint, and helping identify gaps in classic application and printer compatibility. -What's new in 1.3.1 +What's new in 1.3.2 ------------------- - - Final driver revision 41.17. + - Final driver revision 41.19. + - Test Print uses the selected Unit1-Unit7 profile for that one job without + replacing the active Unit0 printer. + - Activating a saved unit accepts profiles stored in either ENV: or ENVARC:. - Query Printer selections for media/tray, colour, quality and scaling now save correctly, including on the AmigaOS 2.x-compatible event path. - View Spooler now shows the current RAM/T: job and retains a failed rendered From 7fc5550b6cab0ca545929a8b1833ff3ce37f7062 Mon Sep 17 00:00:00 2001 From: Darren Banfi <33876110+boingball@users.noreply.github.com> Date: Sat, 5 Sep 2026 00:08:17 +0100 Subject: [PATCH 8/8] Bump MintPRINT release to 1.3.2 --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 49b9aa3..a7b7070 100644 --- a/README.md +++ b/README.md @@ -31,9 +31,13 @@ MintPrint Settings for setup, discovery and test printing. image -## What's new in 1.3.1 +## What's new in 1.3.2 -- **Final driver revision 41.17.** +- **Final driver revision 41.19.** +- **Selected-unit Test Print:** testing Unit1-Unit7 uses that profile for the + one job without replacing the active Unit0 printer. +- **Reliable unit activation:** profiles stored in either ENV: or ENVARC: can + now be activated successfully. - **Query results now save correctly:** media/tray, colour, quality and scaling choices selected by **Query Printer** are synchronised with the Unit config, including on the AmigaOS 2.x-compatible event path.