This is good feedback and definitely worthy of a requirement, so consider opening one. I'll direct my IPCS content developers to this thread as a heads up.

-Sue Shumway

On 06/04/18 11:28 AM, Don Poitras wrote:
In article <1599371286812594.wa.zos.jes2gmail....@listserv.ua.edu> you wrote:
Thanks Wayne,
The reason for the request is like you said, the DOC is quite lacking.  You can 
get some info from reading the macros but that's really not how DOC should be 
done.
The only three that I've had issues with are ADPLSEQS, ADPLSMAP and maybe 
ADPLSSYM.  With the little doc/examples and the macros, and help from IBMers 
who are no longer there, I've got these working great.  I've even created a 
program to take a listing of a DSECT and build format models to be used with 
ADPLSFMT.
Wayne, if you don't mind, could you send me a sample of your code that accesses 
64-bit storage?  I'd like to do that as well.
Thanks.
Dan

Like Wayne, I can't post the whole program and when I did this, I
needed access to C header files, so I wrote our verb exit in C and
call the LE program as a subtask of the assembler IPCS exit entry.
The C program posts the assembler mother do call the IPCS router.
I used the same names when I mapped the C headers as were in the
assembler dsects, so this should give you what you need:

---
static void imemcpy(void *buffer, long dumpadr, long len)
{
    if (p->padpl->adplflag & adplsyno)    // if user wants out, let him go
      longjmp(buf, 1);

    if (len > 8192)
    {
      iprintf("imemcpy len > 8192");
      abort();
    }
    memcpy(p->pesr, p->pesri, sizeof(ESSY)); // init before use
    memcpy(p->pxssp, p->pxsspi, sizeof(XSSP)); // init before use
    memcpy(p->pesr->esrast, esrastcv, 2); // type of memory CPU ASID
    p->pesr->esras2 = homeasid;           // home asid
    memcpy(p->pesr->esrlad, &dumpadr, 8); // dump area address
    memcpy(p->pesr->esrdle, &len, 8);     // dump area length

    p->pxssp->xssppfl1 |= xsspbit64;      // indicate BLSRESSY structs should 
be returned in ABITS=64 format
    p->pxssp->xsspcode = xsspacc;         // access storage
    p->pxssp->xsspesr = p->pesr;          // equate symbol record addr
    p->pxssp->xsspbuf = p->cmd.cmd;       // user buffer address
    memcpy(p->pxssp->xsspmodn, "SASIPCS ", 8); // name of requestor

    p->parm[0] = (ptr32) p->padpl;        // adpl address
    p->service = adplssym;                // symbol service
    p->parm[1] = (ptr32) &p->service;
    p->parm[2] = (ptr32) p->pxssp;        // symbol service parms

    p->cecb = 0;                          // clear my ecb
    POST(&p->aecb, 0);                    // post mom to call ipcs router
    WAIT1(&p->cecb);                      // wait for mom
    if (p->cecb != 0x40000000)            // if error, exit
    {
      memset(buffer, 0, len);
      memcpy(buffer, "FAIL", 4);
    }
    else
      memcpy(buffer, p->cmd.cmd, len);      // return to caller
}
---

Someday, I think I'll create a version of this I can put on the CBT tape. It
was a lot of work to figure out and I think should be easier to use than it
is.


--
Sue Shumway
z/OS Product Documentation Lead
IBM Poughkeepsie
chale...@us.ibm.com

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

Reply via email to