Sorry to belabor this thread but for the sake of future Googlers felt I needed to say that a global IEABRCX DEFINE is probably a necessary part of this solution. GTTERM contains the common BAL 1,*+12 type formulation and that will not work when moved to GETMAIN storage without either converting the BAL to a relative branch (as IEABRCX does) or some cleverness with USING.
Charles -----Original Message----- From: IBM Mainframe Discussion List [mailto:[email protected]] On Behalf Of Charles Mills Sent: Wednesday, May 20, 2015 5:14 PM To: [email protected] Subject: Re: Where can a running TSO program get its "terminal name" Thanks all for your suggestions. In the hope of helping a future Googler, here is "How to Use GTTERM from an AMODE 31 Program." I don't claim this method is novel or optimal, just that it works. BTW, I am using the GTTERM now primarily for the other information it returns like the IP address. I get the terminal name from ACEETRID. I built a "model" GTTERM. This is assembled like a constant, not in the line of executable code. GTTERMmdl EQU * GTTERM PRMSZE=(R2), TERMSIZE, mandatory + TERMID=(R4) TERMWORK BSM 0,R11 Return in 31-bit mode GTTERMmdl_len EQU *-GTTERMmdl The module already had a GETMAIN for a save area and other (small) reentrant storage. I changed the GETMAIN to LOC=BELOW and added the following to the reentrant storage: DS 0H Align GTTERMarea DS XL(GTTERMmdl_len) GTTERM moved here TERMSIZE DS H GTTERM terminal size TERMWORK DS CL39 GTTERM return area In the executable code, I move the "model" GTTERM into the GETMAIN area and BASSM to it MVC GTTERMarea,GTTERMmdl MVC TERMWORK(6),=C'CODEPG' LA R2,TERMSIZE LA R4,TERMWORK LA R15,GTTERMarea BASSM R11,R15 I have not done extensive testing but this does all seem to work. ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
