In article <[email protected]> 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.
--
Don Poitras - SAS Development - SAS Institute Inc. - SAS Campus Drive
[email protected] (919) 531-5637 Cary, NC 27513
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN