Am 20.03.2015 um 13:54 schrieb John McKown:
On Fri, Mar 20, 2015 at 7:17 AM, Bernd Oppolzer
<[email protected]> wrote:
Yes, my present solution only delivers the first DSN,
which was sufficient given the needs of the project in the past
(it was clear there, that there was always only one dataset allocated
to the interesting DDNAME).

I get the JFCB address from the SWA token in the TIOT (after locating
the entry with the specified DDNAME) using SWAREQ, and if I read my
coding correctly, this JFCB address points directly to the (first) DSNAME.

Maybe someone could point out, how

- I could decide, if it is really a DSN that is allocated to this DDNAME
(and not,
for example, DD * or SYSOUT)

- and: how I could proceed to the other DSNAMEs probably present in the
concatenation

No need of source code; some kind of description would be sufficient.
I believe, that it should be possible to do the rest in C again, no
ASSEMBLER needed.

Thank you, kind regards

Bernd
As nasty as it would be, I'd be inclined to chain chase and find
things in the TIOT. Hum, except I don't know if it is even possible to
chain chase to get to XTIOT entries. It will be nice to be able to
embed ASM code in non-Metal C in z/OS 2.2.



don't know much about XTIOT at the moment, but here is the C coding to
search the TIOT for a given DDNAME (no ASSEMBLER needed):


static char *adressiere_tcb (void)

/************************************************/
/*                                              */
/*   Ueber die TIOT (Task-IO-Table)             */
/*   werden die DDNamen und die                 */
/*   zugeordneten DSNamen gesucht               */
/*                                              */
/************************************************/

{
   char ***cvt_pointer;
   char **tcb_tabelle;

   cvt_pointer = *((char ****) 16);
   tcb_tabelle = *cvt_pointer;
   return *(tcb_tabelle + 1);
}


This function returns the address of your own TCB.
There are easier ways to do this, but it works this way.


static char *check_ddname (char *ddname)

/************************************************/
/*                                              */
/*   Vorgegebener DDName wird gesucht           */
/*                                              */
/************************************************/

{
   char *adresse_tcb;
   char *adresse_tiot;
   char *laenge_tiot;
   char *ddname_tiot;

   adresse_tcb = adressiere_tcb ();
   adresse_tiot = *(((char **) adresse_tcb) + 3);

   for (laenge_tiot = adresse_tiot + 24;
        *laenge_tiot != 0;
        laenge_tiot += *laenge_tiot)
   {
      ddname_tiot = laenge_tiot + 4;

      if (memcmp (ddname_tiot, ddname, 8) == 0)
      {
         return ddname_tiot;
      }
   }

   return NULL;
}


This function searches the TIOT for the given DDNAME
and it returns a pointer to the DDNAME entry in the TIOT,
if the DDNAME could be found, and NULL, if not.

Sorry for the German variable names and comments.

Kind regards

Bernd

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to