I’ve been looking at porting pymqi, the Python MQ interface to z/OS.
The biggest challenges where nothing to do with Pymqi.
So if you are bored after Christmas and want something stimulating… here are a few questions for you… The answers are below. I tried getting them displayed upside down, like all quality magazines; but that was too difficult.
Question 1. C question
I’ve reduced the problem I experienced,down to
int main()
{
if ( 1==0 ) return 8;
int rc;
*=ERROR===========> CCN3275 Unexpected text 'int' encountered.
}
Hint: it works in a batch compile, using EDCCB
Question 2 binding in Unix Services
/bin/xlc a.o -L. -o b.so -Wl,INFO //’COLIN.MQ924.SCSQDEFS(CSQBRR2X)’ -Wl,dll c.x
Gave
FSUM3218 xlc: File //’COLIN.MQ924.SCSQDEFS(CSQBRR2X)’ contains an incorrect file suffix.
What do I need to do to fix it?
Question 3. Strange bind messages
Before I found the solution to problem number 2, I put the bind statements into a Unix Services file.
Using this gave me
IEW2326E 1221 THE FOLLOWING INVALID RECORD HAS BEEN SEEN:
=”lm-source” *Copyright
IEW2326E 1221 THE FOLLOWING INVALID RECORD HAS BEEN SEEN:
IBM Corp. 2009, 2016 All Rights Reserved.
This bind statement was
cc -o mqsamp -W l,DYNAM=DLL,LP64 c.o mq.o
it worked without the mq.o
The mq.o file had
* <copyright * * notice="lm-source" * * (C) Copyright IBM Corp. 2009, 2016 All Rights Reserved. * * </copyright> *
Answer
- Using the cc compiler, it defaults to #pragma Langlvl(stdc89) which supports the c89 level of C. This says all variable declarations must come before any logic. This is relaxed in the c99 level, so specifying #pragma Langlvl(stdc99) cures it. You can also specify LANGLVL(EXTENDED) in the cc statement
- To include datasets in some of the binder options you need host file: filename with .OBJ suffix (object host file for the binder/IPA Link). When I used /bin/xlc a.o … -Wl,INFO //’COLIN.MQ924.SCSQDEFS.OBJ(CSQBRR2X)’ … it worked.
- The binder is not good at files in Unix Services, it likes records which are fixed block 80. The mq.o file had trailing blanks removed, and this confused it. I had to use a PDSE to get it to work.