ironwork 0.4.1
Summary
ironwork 0.4.1 publishes what 0.4.0 built to npm, crates.io and PyPI, says through its exit status who ended a run, and runs CICS LINK and XCTL closer to CICS.
- Exit codes:
run,cicsandjobpass a RETURN-CODE of 0 to 238 through and keep 239 and above for ironwork: 240 an abend, 241 no program to run, 242 a code-generation refusal, 243 a VM stop, 244 a construct ironwork does not run, 245 an unreadable source, JCL or module, 246 usage, 255 a panic. - cobolwork's convention:
--exit-codegives cobolwork's verdict codes in place of the band. - CICS: LINK and XCTL raise LENGERR for a COMMAREA length outside 0 to 32763 and for a COMMAREA with no address, and each LINK or XCTL run unit has its own FUNCTION RANDOM sequence and RETURN-CODE.
- VM and lowering: SEARCH ALL keys, floating-point EXEC CICS options and unsubscripted SQL indicator arrays give the interpreter's results on the VM.
Limit: 0.4.0 is on GitHub only; its npm job failed on a path in the release workflow, and crates.io and PyPI waited behind it.
Changed
ironwork run,cicsandjobexit with a code in a band ironwork reserves when ironwork, not the program, ends the run. A RETURN-CODE of 0 to 238 is the exit status. 239 is a RETURN-CODE outside 0 to 238 or of 239, whose value standard error and the evidence journal give. 240 is an abend, 241 a compile that gives no program to run, 242 a code-generation refusal, 243 a VM stop, 244 a construct ironwork does not run (the IRONWORK, EXEC and JAVA abends, and JCL refused before any step), 245 an unreadable source, JCL or module, 246 usage and 255 a panic. A job exits as its first step that ended without a return code says; COND and IF see the step return codes they saw before.--exit-codegives cobolwork's verdict convention instead: 0 for RETURN-CODE 0, 1 another, 2 usage or unreadable input, 3 an abend, 4 refused, 5 stopped, 70 internal.ironwork checkandcompilekeep IBM's compile return codes, andcompare,dumpandfuzztheir own.- EXEC CICS LINK and XCTL raise LENGERR, RESP2 11, for a COMMAREA length below 0 or above 32763, and RESP2 26 for a COMMAREA with no address, such as DFHCOMMAREA in a program given none; that used to abend ASRA. RETURN raises RESP2 26 too. A LINK or XCTL to a program that cannot be found gives PGMIDERR with RESP2 1. Without a COMMAREA, EIBCALEN is 0 (C103, C128).
- Under CICS, each LINK, XCTL or HANDLE ABEND PROGRAM run unit has its own FUNCTION RANDOM sequence, and a LINKed program's RETURN-CODE starts at 0 and comes back to the LINK in RESP2 and EIBRESP2 (Language Reference p. 621; Language Environment "Finding the return and reason code from the enclave"; C104, C105). Pointers SET TO ENTRY stay valid across the task (C106).
Fixed
- SEARCH ALL compares a zoned key with its WHEN value as a relation does, so the VM finds the occurrence the interpreter finds when the key holds invalid zoned data or a signed key runs under NOZWB.
- An EXEC CICS option read as an integer, such as
LENGTH(FUNCTION NUMVAL(...)), takes a floating-point value's whole part on the VM as on the interpreter, and lowering refuses a FUNCTION whose arguments hold a floating-point expression, where the two executors would differ. - A host structure's indicator array named without a subscript, as
:CLS:CLS-INDnamesCLS-IND OCCURS 3, is its first element, as Db2 for z/OS reads it. The interpreter abended IRONWORK at the first row and lowering refused the program. - The release workflow publishes the npm tarball by a file path, so a tag's run reaches npm, crates.io and PyPI.
Upgrading
- Scripts that read
ironwork run's exit status: an abend now exits 240, not 16, and a RETURN-CODE of 239 or more exits 239. Use--exit-codefor cobolwork's verdict codes. - Under CICS, a program that relied on an out-of-range COMMAREA length running, or on RANDOM or RETURN-CODE carrying across a LINK, now sees LENGERR or a fresh value.
- Load modules from 0.4.0 run unchanged; the format is still 0.3.
Install
ironwork for COBOL 0.4.1. Builds for Linux (static), macOS and Windows, and the npm package @portll/ironwork. The ironwork-tls archives are the same builds with TLS for --sql-db (rustls, sslmode=verify-full). The Python package is on PyPI as ironwork, and the crates are on crates.io. Each file carries SLSA build provenance: gh attestation verify -R Portll/ironwork.