There's no 'trick' to sawing a pretty lady in half if you know how to do it. 
Ed's analysis of the patch-area logic is spot on, but he is an ISV in control 
of his own code. If this was an installation exit, I'd fix it myself, but the 
module is provided source-free by a vendor. If Ed had a similar problem with a 
product like, say, CICS, he'd be in the same fix we're in. I’m not wedded to 
S-CONs, but they can simplify life in managing patch areas. 

This particular 'usermod' has been utilized here for decades. Failing to 
implement the function altogether would impact hundreds of call center customer 
support folks. I'd hate to sully the mainframe's rep by admitting that we're 
not smart enough to keep it alive. 

.
.
J.O.Skip Robinson
Southern California Edison Company
Electric Dragon Team Paddler 
SHARE MVS Program Co-Manager
323-715-0595 Mobile
626-543-6132 Office ⇐=== NEW
robin...@sce.com


-----Original Message-----
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On Behalf 
Of Ed Jaffe
Sent: Tuesday, July 24, 2018 9:33 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: (External):Re: Adding a patch area

On 7/24/2018 7:12 PM, Jesse 1 Robinson wrote:
> Yeah, touché. S-CON is an assembler thing. EXPAND is a binder thing. Have not 
> experimented with getting them to work together. Hoping the vendor will fix 
> this at the source.

You're probably thinking of the ancient technique of assembling S-CONs into a 
patch area covered by a base register to aid in patch writing. 
There's no trick to it. If you defined for example 10S(*) at offset +10 from 
the start of your USING domain and the base was R11 you got:

B010 B012 B014 B016 B018 B01A B01C B01E B020 B022 assembled at that location.

You would then branch to the patch area when needed to fix a problem without 
reassembling. For example, if your code at +4E0 into the program
was:

04E0 1B12          SR  1,2
04E2 5A10 AFB0     A   1,FIELD1
04E6 5010 AFB0     ST  1,FIELD1

and you needed to insert another subtract after the SR, you could patch that in 
pretty easily. Something like:

VER 0010 B010,B012,B014,B016,B018
VER 04E2 5A10,AFB0 A   1,FIELD1
REP 0010 5B10,AFB4 S   1,FIELD2
REP 0014 5A10,AFB0 A   1,FIELD1
REP 0018 07FE      BR  14
REP 04E2 45E0,B010 BAL 14,patch

These days anything produced by a modern compiler and any serious, hand-written 
assembler code written in the last 20 years likely no longer uses those 
highly-restrictive S/360 programming techniques (aka "stone knives and bear 
skins") where a base register gave you a mere 4K of *forward* addressability 
PER REGISTER!

100% of our in-house-developed products use relative-to-PSW branching -- 
usually short (+/- 64K branch range) and sometimes long (+/- 2G branch
range) -- exclusively for intra-CSECT branching. (Since z/OS 1.7 you've been 
able to use relative branches for inter-CSECT branches as well, but we do do 
that.) We use long (20-bit) displacement instructions (+/- 512K range per base 
register) for storage references as well.

Patch areas still make sense, but S-CONs surely don't unless the patch area is 
defined as part of the program literals -- and THAT would be a tremendous waste 
of a precious 4K base register resource.

Some things are best forgotten. After writing this, I wish I had followed my 
own advice... LOL

--
Phoenix Software International
Edward E. Jaffe
831 Parkview Drive North
El Segundo, CA 90245
https://www.phoenixsoftware.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