M1.2 adds RexxProbe, a small native Shell utility for sending one command to an ARexx public port and reporting the reply in a scriptable form.
RexxProbe PORT COMMAND opens rexxsyslib.library, creates a private reply port and a RexxMsg, requests RXFF_RESULT, resolves the destination public port, sends the message and waits for the reply.
The shared helper lives in src/common/arexx.c with its public interface in include/abbstools/arexx.h.
Result handling follows ARexx ownership rules:
rm_Result1 == 0: a non-zerorm_Result2is treated as a returned result Argstring, copied into the boundedAbtRexxResult.textbuffer, then released withDeleteArgstring().rm_Result1 != 0:rm_Result2is retained as the numeric secondary result/error value.- Returned result text is bounded to 255 characters plus NUL;
truncatedreports clipping.
Successful remote command:
PORT=<port>
COMMAND=<command>
RESULT1=0
RESULT=<text>
TRUNCATED=0|1
Remote command error:
PORT=<port>
COMMAND=<command>
RESULT1=<primary>
RESULT2=<secondary>
Local setup failures use stable symbolic output:
- missing public port:
PORT_NOT_FOUND, Shell RC 10 - local ARexx setup failure:
AREXX_SETUP_ERROR, Shell RC 20
A remote ARexx error maps to ABBSTools warning RC 5 while preserving the remote primary and secondary codes in the output.
M1.2 intentionally does not implement a hard timeout after PutMsg().
Before delivery, a missing destination port is detected immediately and returns RC 10. After a message has been delivered, ownership is shared with the receiving task until it replies. Abandoning and freeing the message on a timer would be unsafe because the receiver may still hold the message pointer. Therefore M1.2 waits for the ARexx host reply with WaitPort().
A future cancellable/timeout-capable transport must introduce an explicit protocol or ownership-safe cancellation mechanism rather than freeing an outstanding message.
Automated qualification consists of:
- static M1.2 repository checks;
- Bebbo
m68k-amigaos-gcccross-build with-m68000 -noixemuland warnings treated as errors; - an FS-UAE + AROS capability/runtime gate for
RexxProbe.
The first AROS run on 2026-09-09 executed the native RexxProbe binary but returned rexxsyslib.library failed to load. Inspection of the same AROS boot-ISO environment showed that rexxsyslib.library is not present in that minimal core image. This is therefore classified as an environment limitation, not a RexxProbe runtime PASS or a RexxProbe regression.
The CI gate now checks the extracted AROS image before execution. If rexxsyslib.library is absent it records STATUS=SKIP, REASON=AROS_BOOT_ISO_NO_REXXSYSLIB and exits successfully so unrelated AROS qualification remains useful. If the library is present, the gate executes RexxProbe against a deliberately nonexistent port and requires PORT_NOT_FOUND with guest Shell RC 10.
M1.2 runtime qualification remains open until RexxProbe is exercised in an environment that actually provides rexxsyslib.library. End-to-end qualification against a deterministic ARexx host and final compatibility qualification on the intended AmigaOS 2.04 baseline remain separate release gates.