How C and REXX Mess Things Up
Code pages only change characters that aren't needed when programming or administering the mainframe. Is it correct? NO. That works for traditional z/OS features, and programming languages such as COBOL and PL/1.But there are a couple of exceptions, and you can safely bet that more will follow.
Take REXX for example.
A common thing to do in REXX is concatenate two strings. This is done using the two vertical bars ('||'). For example, our sample REXX to get z/OS information has the line:
Say 'z/OS version:' zos_ver || '.' || zos_rel
The bad news is that the vertical bar character '|' isn't one of those 'standard' EBCDIC characters. So a vertical bar in EBCDIC 0037 looks like an exclamation mark (!) in Sweden. The REXX interpreter doesn't care what this character looks like, as long as it has a code of 79. So if you're in Sweden and using EBCDIC 0278, the above line becomes:
Say 'z/OS version:' zos_ver !! '.' !! zos_rel
C is another problem child. It uses funky characters like the square brackets '[]', curly brackets '{}' and broken vertical bar '¦'. These move around (or disappear) depending on your code page. But with C there's another catch: it's designed to use EBCDIC 1047, not EBCDIC 0037. So if you're using arrays in C, the line:
char cvtstuff[140];
is fine if you're using IBM1047. For IBM0037, it becomes:
char cvtstuffÝ140´
If you're using EBCDIC 0050, another common EBCDIC code page, it becomes:
char cvtstuffÝ140"
No comments:
Post a Comment