Hey,
One quick look, you're calling call_obtain with 3 arguments.. although
it's got only two. Another thing, don't bother setting 44 spaces, this
will be done in call_obtain.
int main()
{
call_obtain("DATASET","VOLUME");
}
Best regards,
Cristi Terpea
Barkow, Eileen wrote:
here goes - the c program (cotasm.c) was also copied from a post (i
think Crista's) and added the main section.
i thought i knew a little C from studying Microsoft's c# for Windows,
but when i look at c, c++ on the mainframe I know next to nothing - c#
is completely different. That is why i got interested in this topic.
actually, i get the same type of abend (segmentation violation) trying
to run some of the jni examples i have found (using c and java),
although some do work and others abend. and the abends happen when
running both batch and under OMVS. i have not yet looked up what the
segmentation violation abend means.
ctoasm.c
int OBTAIN(unsigned long[]);
#pragma linkage(OBTAIN, OS)
#pragma pack(1) /* 1 byte alignment */
typedef struct
{
char Ds1FmtId;
char Ds1Dssn[6];
unsigned short Ds1VolSq;
char Ds1CreDt[3];
char Ds1ExpDt[3];
unsigned char Ds1NoEpv;
unsigned char Ds1NoBdb;
unsigned char Ds1Flag1;
char Ds1SysCd[13];
char Ds1RefDt[3];
unsigned char Ds1SmsFg;
unsigned char Ds1ScXft;
unsigned short Ds1ScXtv;
unsigned char Ds1DsOrg[2];
unsigned char Ds1RecFm;
unsigned char Ds1OptCd;
unsigned short Ds1BlkL;
unsigned short Ds1LrecL;
unsigned char Ds1KeyL;
unsigned short Ds1Rkp;
unsigned char Ds1DsInd;
unsigned char Ds1ScAl1;
unsigned char Ds1ScAl3[3];
unsigned char Ds1LstAr[3];
unsigned short Ds1TrBal;
unsigned char Reserved;
unsigned char Ds1Tthi;
unsigned char Ds1Ext1[10];
unsigned char Ds1Ext2[10];
unsigned char Ds1Ext3[10];
unsigned char Ds1PtrDs[5];
char Filler[44];
} DSCB;
#pragma pack() /* default alignment */
int call_obtain(char *Dsn, char *VolSer) {
int Rc;
unsigned long Parm[4];
char ParmDsn[44];
char ParmVolSer[6];
DSCB Dscb;
memset(ParmDsn, ' ', 44);
memcpy(ParmDsn, Dsn, strlen(Dsn));
memset(ParmVolSer, ' ', 6);
memcpy(ParmVolSer, VolSer, strlen(VolSer)); /*should be 6 always!*/
Parm[0] = 0xC1000000;
Parm[1] = (unsigned long) ParmDsn;
Parm[2] = (unsigned long) ParmVolSer;
Parm[3] = (unsigned long) &Dscb;
if((Rc = OBTAIN(&Parm[0])) != 0)
return(Rc);
/* do something with DSCB */
return(0);
}
int main()
{
char dsname[44], volume[6];
memset(&dsname,' ',44);
,Command ===>,
memcpy(&dsname, "XCICS.EILEEN.PDSE", 17);
memset(&volume,' ', 6);
memcpy(&volume, "CICH92", 6);
memset(&work,' ',140);
call_obtain(dsname,volume,work);
}
**assembler program obtasm.s
********************************* Top of Data *************
*
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4 PARMS
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11 BASE
R12 EQU 12 LE/370 COMMON ANCHOR AREA (CAA)
R13 EQU 13 LE/370 DYNAMIC SAVE AREA (DSA)
R14 EQU 14
R15 EQU 15
*
PARM DSECT
PARM_FLG DS F FUNCTION-CODE HEX'C1000000'
PARM_DSN DS F ADDR OF DSN (44 BYTES)
PARM_VOL DS F ADDR OF VOLSER (6 BYTES)
PARM_WRK DS F ADDR OF 140 BYTE WORK/RETURN-AREA
*
*
OBTAIN CEEENTRY PPA=MAINPPA, ADDR OF PROGRAM PROLOG AREA X
AUTO=WORKSIZE, SIZE OF DSECT (-> SAVEAREA!)
XX
NAB=NO, NAB NOT USED
XX
MAIN=NO, NO MAINPROG
XX
EXPORT=NO, DONT EXPORT ENTRYPOINT
XX
BASE=R11 BASE
*
USING CEECAA,R12 COMMON ANCHOR AREA
USING CEEDSA,R13 DSA + LOCAL (DYNAM.) VARIABLES
*----------------------------------------------------------------------
,Command ===>, ,Scroll ==
L R4,0(R1) LOAD ADDR OF PARMS
USING PARM,R4 ADDRESS PARMS
*
OBTAIN PARM INVOKE OBTAIN
ST R15,RETCODE SAVE RC
*
CEETERM RC=RETCODE
*----------------------------------------------------------------------
MAINPPA CEEPPA PROGRAM PROLOG AREA
LTORG
*----------------------------------------------------------------------
CEEDSA DSECT: DYNAMIC SAVE AREA
RETCODE DS F RETURNCODE
DS 0D ENSURE ALIGNMENT!!!
WORKSIZE EQU *-CEEDSA
*----------------------------------------------------------------------
CEECAA DSECT: COMMON ANCHOR AREA
CEEEDB DSECT: ENCLAVE DATA BLOCK
END
to compile: (get no errors)
c++ -v -o ctoasm ctoasm.c obtasm.s
when run:
$ ctoasm
CEE3204S The system detected a protection exception (System Completion
Code=0C4)
.
From compile unit OBTAIN at entry point OBTAIN at compile unit
offset +
00000086 at entry offset +00000086 at
address 18BEA116.
<> LEAID ENTERED (LEVEL 04/01/2008 AT 12.32)
<> LEAID PROCESSING COMPLETE. RC=0
[1] + Done(139) ctoasm
83886348 Segmentation violation ./ctoasm
$
-----Original Message-----
From: IBM Mainframe Discussion List [mailto:ibm-m...@bama.ua.edu] On
Behalf Of Michael Knigge
Sent: Thursday, May 14, 2009 4:47 PM
To: IBM-MAIN@bama.ua.edu
Subject: Re: C/C++ Calling OBTAIN / IGC0002G
Barkow, Eileen schrieb:
i tried to use the assembler code given in a previous post and got
about
the same 0c4 abend i got using OBTAIN in c.
can you give me a copy of the assembler code that worked.
The code posted is the code that works.
Give use your code (asm + c) and your compiler+asm+link options and I'll
compare them with mine... maybe we can see what is going wrong....
Bye,
Michael
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html
--
Terpea Cristian
Senior Software Developer
Fortech SRL
Str. C-tin Brancoveanu nr. 6
Cluj-Napoca, 400467
Romania
Tel: +40 264 453 303
Fax: +40 264 438 217
Email: cristian.ter...@fortech.ro
Web: www.fortech.ro
________________________________________________________________________
The information contained in this message is confidential and may be
legally privileged.The information transmitted is intended only for
the person or entity to which it is addressed and may contain
confidential and/or privileged material. If you are not the intended
recipient, you are hereby notified that any review, retransmission,
dissemination or other use of, or taking of any action in reliance
upon this information is strictly prohibited and may be unlawful.
If you received this in error, please contact the sender and delete
the material from any computer. Fortech SRL excludes the liability for
any damage which might result from this e-mail message.
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html