Cristi Terpea schrieb:
What am I doing wrong?

I really don't know ;)  But why don't you use a little ASM routine?

*
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!)      X
               NAB=NO,               NAB NOT USED                      X
               MAIN=NO,              NO MAINPROG                       X
               EXPORT=NO,            DONT EXPORT ENTRYPOINT            X
               BASE=R11              BASE
*
         USING CEECAA,R12            COMMON ANCHOR AREA
         USING CEEDSA,R13            DSA + LOCAL (DYNAM.) VARIABLES
*----------------------------------------------------------------------
         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
*----------------------------------------------------------------------




So... now you can invoke OBTAIN from C by

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);
}



This is how it works for me in a multithreaded application written in C...


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

Reply via email to