[comp.lang.asm370] HNDEXT macro

STELIOS@GRCRUN11.BITNET (Stelios Fragakis) (08/30/90)

On SC24-5284-0 (CMS Macros and Functios References) page 73, note 7 says:

7.  It is your responsibility to issue a HNDEXT CLR in the application that
    issued a HNDEXT SET,address. Under certain environments, no
    cleanup is performed by DMSINT after the execution of the program.

My question  is whats the "certain"  enviroment mentioned above. I  want to be
able to keep the  HNDEXT active for a while (say 4  minutes) after the program
has terminated. Any danger on that ?

- Stelios

RZA31LH@DB0ADW11.BITNET (Lutz Hamann) (08/31/90)

On Thu, 30 Aug 90 09:36:59 LCL Stelios Fragakis said:

>On SC24-5284-0 (CMS Macros and Functios References) page 73, note 7 says:
>
>7.  It is your responsibility to issue a HNDEXT CLR in the application that
>    issued a HNDEXT SET,address. Under certain environments, no
>    cleanup is performed by DMSINT after the execution of the program.
>
For instance, when you terminate the programm using 'HX'. On our computer
the interrupt-handling routine is in this case still active (but we have
an early release of VM/SP, may be not 100% compatible with the IBM-Original).


>My question  is whats the "certain"  enviroment mentioned above. I  want to be
>able to keep the  HNDEXT active for a while (say 4  minutes) after the program
>has terminated. Any danger on that ?
>
It depends on what you will do in this 4 minutes or where the interrupt-
handling routine was loaded. If it was nearby address x'20000', than better
do nothing (no xedit, no call of user-programs). If it is a nucleus extention,
it should work (if the extention was not dropped).

                                              Bye  Lutz

P.S. Question please only through the list (we're not yet in the BITEARN NODES)

KXH105@PSUVM.BITNET ("Ken Hornstein 862-7007", 814) (02/20/91)

Hi.  I've written some code that I'm sending to other sites, but I'm running
into a problem with my use of the HNDEXT macro.  What I'm currently doing is
this:

             HNDEXT SET,(R4)

Which works fine on our ESA system, XA systems, and some other CMS systems.
But other sites generate a P-list which looks like this:

             DC   CL8'TRAP'
             DC   A((R4))

Which isn't what I want to do at all :-(  I've tried using the MF=L form,
but it seems like the sites that generate the lousy P-lists also don't
recognize MF=L as a valid parameter.  I'd hard-code the P-list myself,
except that XA uses something else to trap externals instead of TRAP, and I'd
like to use it also.

Any suggestions?   Do I just have to send people an update file with a fix,
or is there a  way to make this assemble at all sites without any changes?

Thanks!

---
Build a system that even a fool can use and only a fool will want to use it.

Ken Hornstein       kxh105@psuvm.psu.edu      Phone: 814/862-7007

FERZAN@TREARN.BITNET (OR) (02/20/91)

              IF YOU WANT TO USE YOUR EXTERNAL INTERRUPT ROUTINE,
              YOU CAN USE DIRECTLY EXTOPSW AND EXTNPSW,
              THIS WAY RUNS AT ALL S/370 BASED SYSTEMS

news@ucf1vm.BITNET (02/21/91)

I know that this may sound dumb, but try using (4) instead of (R4);
I have found that this works with SOME of the IBM macros.

VSLAWR@WEIZMANN.BITNET ("Lawrence S. Kalman") (02/21/91)

On Wed, 20 Feb 91 00:35:00 EST Ken Hornstein (814) 862-7007 said:
>Hi.  I've written some code that I'm sending to other sites, but I'm running
>into a problem with my use of the HNDEXT macro.  What I'm currently doing is
>this:
>
>             HNDEXT SET,(R4)
>
>Which works fine on our ESA system, XA systems, and some other CMS systems.
>But other sites generate a P-list which looks like this:
>
>             DC   CL8'TRAP'
>             DC   A((R4))

You have encountered the thorny problem of incompatibility between systems.
The valid format of the HNDEXT macro in CMS 5 and earlier releases (I can't
speak for CMS 6) is much more restrictive, as it provides only

              HNDEXT SET,address
         or   HNDEXT CLR

and <address> must be a reference to storage.  (Note that it could be an
external reference.)  There is no provision for register specification of the
address, list and execute forms, or any of the other goodies provided in CMS
5.6.

Assuming that the address in R4 is dynamically obtained, you are caught between
a rock and a hard place.  You have to resort to what is known as "dual
pathing".  This can be done either at the source or execution level.  If at
the source level, you will want to insert conditional assembly statements
which will cause the selection of the appropriate statements based on the
level of CMS.  If at the execution level, you can determine under which level
of CMS the program is running (see the CMSLEVEL macro - the value is stored at
CMSPROG in NUCON) and execute one of two paths accordingly.  Of course, either
choice requires access to the documentation and the ability to test on all the
systems for which you want to provide support ;-(.

- Lawrence