The book also has examples and you will find full samples in the SCBCSAMP data set.

http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zos.r9.cbcpx01/cbcpg18096.htm

On 2/05/2012 9:58 AM, Charles Mills wrote:
Thanks!

Charles

-----Original Message-----
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@bama.ua.edu] On Behalf
Of Bernd Oppolzer
Sent: Tuesday, May 01, 2012 6:09 PM
To: IBM-MAIN@bama.ua.edu
Subject: Re: Does C/LE open of DD:ddname(member) use SVC 99 or FIND?

Thank you!

Here is an excerpt of a C program which reads a directory of a PDS and
inserts the member names into an AVL tree (the insert is not shown, it is
done by a function call - see below).

Kind regards

Bernd



static int lese_memberliste (char *parm_infile,
                               baumMEMknoten **pres)

/************************************************/
/*   Funktion zum Lesen einer Memberliste       */
/*   einer PO-Datei; die Membernamen werden     */
/*   in einen AVL-Baum eingetragen              */
/************************************************/

{
     FILE *direct;
     char buf [256];
     int x;
     char *cp;
     int laenge;
     unsigned long ttrc;
     int ttr;
     int anz_bytes;
     int eof;
     int rc = 0;

     char mem_high [8];

     baumMEMknoten *proot = NULL;
     baumMEMknoten *pneu;
     int hchanged;
     membname m;

     eof = 0;

     memset (mem_high, 0xff, 8);

     /************************************************/
     /*   raus, wenn Directory nicht aufgeht         */
     /************************************************/

     direct = fopen (parm_infile, "rb");
     if (direct == NULL)
        RETURN_VALUE 8;

     for (;;)
     {
        /************************************************/
        /*   naechsten Directory-Block einlesen         */
        /************************************************/

        memset (buf, 0x00, 256);
        x = fread (buf, 1, 256, direct);
        if (x == 0)
           break;

#ifdef TEST

        printf ("[cp2970] \n");
        printf ("[cp2970] Rueckgabe von fread = %d\n", x);
        printf ("[cp2970] \n");

        dump (buf, buf + x - 1, stdout);

#endif

        cp = buf + 2;
        laenge = *((short *) buf) - 2;

        while (laenge>  0)
        {
           /************************************************/
           /*   naehere Info hierzu in den IBM-Brosch.     */
           /*   zum Aufbau der PO-Directories.             */
           /************************************************/

           if (memcmp (cp, mem_high, 8) == 0)
           {
              eof = 1;
              break;
           }

           /************************************************/
           /*   Laenge des Eintrags in Halbworten steht    */
           /*   in den Bits 3 bis 7 des TTRC-Wortes        */
           /************************************************/

           ttrc = *((unsigned long *) (cp + 8));
           ttr = ttrc>>  8;
           anz_bytes = (ttrc&  0x1f) * 2;

#ifdef TEST

           printf ("[cp2970] Member %-8.8s  TTR %06X  Laenge/Bytes %d\n",
                   cp, ttr, anz_bytes);

#endif

           if (memcmp (cp, "ED", 2) == 0)
           {
              memcpy (m.name, cp, 8);

              hchanged = 0;
              pneu = baumMEMsuche (&m,&proot,&hchanged, 1);
              pneu ->  obj = atoi (cp + 2);
           }

           cp += (anz_bytes + 12);
           laenge -= (anz_bytes + 12);
        }

        if (eof)
           break;
     }

     fclose (direct);

     *pres = proot;

     RETURN_VALUE rc;
}




Am 01.05.2012 23:52, schrieb John Gilmore:
The point here is not what some particular routine oor utility may do
or permit.  It is what can be done ab initio by an programmer who
wants to do it using the HLASM or some particular SLPL .

z/OS MVS does permit one to open a PDS as a PS data set in a routine
written in assembly language or PL/I, and what one then gets with
successive reads are its successive directory blocks.

I have done this many times without incident, but I do not of course
recommend it to novices.

I have not myself done it in C; but Bernd Oppolzer is a careful,
highly reliable reporter of his experience; and I am thus sure that it
can be done in C too.

John Gilmore, Ashland, MA 01721 - USA

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions, send
email to lists...@bama.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions, send email
to lists...@bama.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@bama.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@bama.ua.edu with the message: INFO IBM-MAIN

Reply via email to