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

Reply via email to