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