Changes in DBCS string behavior
As of z/OS® V1R8, I/O checks the value of MB_CUR_MAX to determine whether to interpret DBCS characters within a file.
When MB_CUR_MAX is 4, you can no longer place control characters
in the middle of output DBCS strings for interpretation. Control
characters within DBCS strings are treated as DBCS data. This is
true for terminals as well. Previous products split the DBCS string
at the '\n' (new-line) control character
position by adding an SI (Shift In) control character at the new-line
position, displaying the line on the terminal, and then adding an
SO (Shift Out) control character before the data following the new-line
character. If MB_CUR_MAX is 1, the library interprets control
characters within any string, but does not interpret DBCS strings.
SO and SI characters are treated as ordinary characters.
When you are writing DBCS data to text files, if there are multiple SO (Shift Out) control-character write operations with no intervening SI (Shift In) control character, the library discards the SO characters, and marks that a truncation error has occurred. Previous products allowed multiple SO control-character write operations with no intervening SI control character without issuing an error condition.
When you are writing DBCS data to text files and specify an odd number of DBCS bytes before an SI control character, the last DBCS character is padded with a X'FE' byte. If a SIGIOERR handler exists, it is triggered. Previous products allowed incorrectly placed SI control-character write operations to complete without any indication of an error.
Now, when an SO has been issued to indicate the beginning of a DBCS string within a text file, the DBCS must terminate within the record. The record will have both an SO and an SI.