External Assembler REXX Function

80 views
Skip to first unread message

Dave Clark

unread,
Feb 1, 2022, 3:36:56 PM2/1/22
to ASSEMBL...@listserv.uga.edu
Thank you all for your help over the many message threads I have
started since joining this list.

The external assembler REXX function I am working on is so that I
don't have to depend upon the built-in REXX VSAMIO function. I don't like
all the conversion, concatenation, and parsing I have to do to make VSAMIO
work. I miss record layouts. My plan is to have my function provide all
of the key and record building and extracting from and into REXX stem
variables based on key and record layouts provided by the caller in the
same stem variable.

So, I have OPEN, CLOSE, and random catalog reads working so far.
The OPEN syntax I support is as follows.

Call RXVSAMIO ddname, 'OPEN'
<, 'INPUT'|'UPDATE'|'OUTPUT'|'APPEND'|'RESET'
<, 'SEQUENCE'|'RANDOM'|'DYNAMIC' > >;

But, I have also built in the ability to retrieve dataset
attributes and statistics -- and that is what you guys (and VSE-L) have
been helping me with. Now with the following REXX statements:

rprtdbs. = '';
Call RXVSAMIO 'rprtdbs', 'attrs';

I get all of the following variables and values created (comments
added manually). As you can see, I keep the numeric data REXX readable. I
will do the same thing with key and record values from the caller's
perspective. All conversions will be handled internally.

RPRTDBS._DDN = RPRTDBS
RPRTDBS._LFN = ATTRS /* Last Function Request */
RPRTDBS._LFM = /* Last Failing Macro */
RPRTDBS._RC = 0 /* VSAM Return Code */
RPRTDBS._EC = 0 /* VSAM Error Code */

RPRTDBS._DSN = DAPSCO.REPORT.DATABASE
RPRTDBS._CATLBL = DAPDCAT
RPRTDBS._CATDSN = DAPSCO.DAPD.CATALOG
RPRTDBS._TYP = XLDS
RPRTDBS._RMX = 2047 /* Record Max Length */
RPRTDBS._RAV = 1845 /* Record Average Length */
RPRTDBS._KMX = 17 /* Key Max Length */
RPRTDBS._RKP = 0 /* Relative Key Position */

RPRTDBS._CREA = 20220123 /* Creation Date */
RPRTDBS._EXPD = 20220123 /* Expiration Date */
RPRTDBS._TSTP = 20220201 030354 /* Last Update Date/Time */
RPRTDBS._SHRO = 4 3 /* Share Options */

RPRTDBS._DATA = DAPSCO.REPORT.DATABASE.DATA
RPRTDBS._DCSZ = 26624 /* DATA CI Size */
RPRTDBS._DEXC = 1384210 /* DATA Number of EXCPs */
RPRTDBS._DEXT = 18 /* DATA Number of Extents */
RPRTDBS._DCIS = 22940 /* DATA CI Splits */
RPRTDBS._DCAS = 2612 /* DATA CA Splits */
RPRTDBS._DFSP = 0 6 /* DATA Freespace CI/CA Pct */
RPRTDBS._DHAL = 1796040 /* DATA High Alloc RBA/CI */
RPRTDBS._DHUS = 1718610 /* DATA High Used RBA/CI */
RPRTDBS._DTAL = CYL /* DATA Allocation Type */
RPRTDBS._DPAL = 3326 /* DATA Primary Alloc */
RPRTDBS._DSAL = 0 /* DATA Secondary Alloc */
RPRTDBS._DVOL = IDD240 IDD241 IDD242 IDD243 IDD250 IDD251 IDD252 IDD253
IDD410 IDD411
IDD412 IDD413 IDD460 IDD461 IDD462 IDD463 IDD490 IDD491
IDD492 IDD493

RPRTDBS._INDX = DAPSCO.REPORT.DATABASE.INDEX
RPRTDBS._ICSZ = 1024 /* INDEX CI Size */
RPRTDBS._IEXC = 1029854 /* INDEX Number of EXCPs */
RPRTDBS._IEXT = 10 /* INDEX Number of Extents */
RPRTDBS._ILVL = 4 /* INDEX Number of Levels */
RPRTDBS._ISSR = 0 /* INDEX Sequence-Set RBA */
RPRTDBS._IHLR = 9507840 /* INDEX High level RBA */
RPRTDBS._IHAL = 60825600 /* INDEX High Alloc RBA */
RPRTDBS._IHUS = 59622400 /* INDEX High Used RBA */
RPRTDBS._ITAL = CYL /* INDEX Allocation Type */
RPRTDBS._IPAL = 12 /* INDEX Primary Alloc */
RPRTDBS._ISAL = 0 /* INDEX Secondary Alloc */
RPRTDBS._IVOL = IDD240 IDD241 IDD242 IDD243 IDD250 IDD251 IDD252 IDD253
IDD410 IDD411
IDD412 IDD413 IDD460 IDD461 IDD462 IDD463 IDD490 IDD491
IDD492 IDD493

RPRTDBS._COMP = 0 /* Compressed? */
RPRTDBS._ERAS = 0 /* Erase? */
RPRTDBS._IMBD = 0 /* Imbed? */
RPRTDBS._ORDR = 0 /* Ordered */
RPRTDBS._RCVR = 0 /* Recover? */
RPRTDBS._REPL = 0 /* Replicate? */
RPRTDBS._REUS = 0 /* Reuse? */
RPRTDBS._SPAN = 0 /* Spanned? */
RPRTDBS._WCHK = 0 /* WriteCheck? */

RPRTDBS._RECS = 23305031 /* Total Records */
RPRTDBS._ADDS = 142063 /* Records Inserted */
RPRTDBS._DELS = 5973 /* Records Deleted */
RPRTDBS._UPDS = 0 /* Records Updated */
RPRTDBS._GETS = 462689 /* Records Retrieved */


Sincerely,

Dave Clark
--
Winsupply Group Services
3110 Kettering Boulevard
Dayton, Ohio 45439 USA
(937) 294-5331



*********************************************************************************************
This email message and any attachments is for use only by the named
addressee(s) and may contain confidential, privileged and/or proprietary
information. If you have received this message in error, please
immediately notify the sender and delete and destroy the message and all
copies. All unauthorized direct or indirect use or disclosure of this
message is strictly prohibited. No right to confidentiality or privilege
is waived or lost by any error in transmission.
*********************************************************************************************

Schmitt, Michael

unread,
Feb 1, 2022, 3:43:22 PM2/1/22
to ASSEMBL...@listserv.uga.edu
> The external assembler REXX function I am working on is so that I
don't have to depend upon the built-in REXX VSAMIO function.

Why does VSE get VSAMIO but MVS doesn't?

I could understand if REXX in VM was more advanced, but VSE??

Dave Clark

unread,
Feb 1, 2022, 3:50:12 PM2/1/22
to ASSEMBL...@listserv.uga.edu
"IBM Mainframe Assembler List" <ASSEMBL...@LISTSERV.UGA.EDU> wrote on
02/01/2022 03:42:51 PM:
> > The external assembler REXX function I am working on is so that I
> don't have to depend upon the built-in REXX VSAMIO function.
>
> Why does VSE get VSAMIO but MVS doesn't?
>
> I could understand if REXX in VM was more advanced, but VSE??


Sorry. ;-) I thought you guys would already have something like
REXX VSAMIO. It is an add-on provided by the IBM VSE group. They have
provided many add-ons for various things in the VSE environment.

But you guys have something that you can use with the ADDRESS
command to access DFSMS AMS data, yes?


Sincerely,

Dave Clark
--
int.ext: 91078
direct: (937) 531-6378
home: (937) 751-3300

Schmitt, Michael

unread,
Feb 1, 2022, 3:59:56 PM2/1/22
to ASSEMBL...@listserv.uga.edu
We have the REXX Catalog Search Interface (CSI), via IGGCSI00. But we can't do VSAM I/O from REXX, using standard out-of-the-box TSO. There's probably something in SHARE. Or vendor products.

As far as I know.

-----Original Message-----
From: IBM Mainframe Assembler List <ASSEMBL...@LISTSERV.UGA.EDU> On Behalf Of Dave Clark

Farley, Peter x23353

unread,
Feb 1, 2022, 4:09:37 PM2/1/22
to ASSEMBL...@listserv.uga.edu
RXVSAM at below link I believe provides that for z/OS and possibly z/VM, not sure about z/VM though.

https://sourceforge.net/projects/rxvsam/files/

Peter

-----Original Message-----
From: IBM Mainframe Assembler List <ASSEMBL...@LISTSERV.UGA.EDU> On Behalf Of Schmitt, Michael
Sent: Tuesday, February 1, 2022 3:59 PM
To: ASSEMBL...@LISTSERV.UGA.EDU
Subject: Re: External Assembler REXX Function

We have the REXX Catalog Search Interface (CSI), via IGGCSI00. But we can't do VSAM I/O from REXX, using standard out-of-the-box TSO. There's probably something in SHARE. Or vendor products.

As far as I know.

-----Original Message-----
From: IBM Mainframe Assembler List <ASSEMBL...@LISTSERV.UGA.EDU> On Behalf Of Dave Clark
Sent: Tuesday, February 1, 2022 2:50 PM
To: ASSEMBL...@LISTSERV.UGA.EDU
Subject: Re: External Assembler REXX Function

"IBM Mainframe Assembler List" <ASSEMBL...@LISTSERV.UGA.EDU> wrote on
02/01/2022 03:42:51 PM:
> > The external assembler REXX function I am working on is so that I
> don't have to depend upon the built-in REXX VSAMIO function.
>
> Why does VSE get VSAMIO but MVS doesn't?
>
> I could understand if REXX in VM was more advanced, but VSE??


Sorry. ;-) I thought you guys would already have something like
REXX VSAMIO. It is an add-on provided by the IBM VSE group. They have provided many add-ons for various things in the VSE environment.

But you guys have something that you can use with the ADDRESS command to access DFSMS AMS data, yes?


Sincerely,

Dave Clark
--

This message and any attachments are intended only for the use of the addressee and may contain information that is privileged and confidential. If the reader of the message is not the intended recipient or an authorized representative of the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by e-mail and delete the message and any attachments from your system.

Tony Thigpen

unread,
Feb 1, 2022, 4:47:23 PM2/1/22
to ASSEMBL...@listserv.uga.edu
VSAM IO for VSE/REXX is an IBM item.

VSE REXX has a few things that z/OS does not. It's come up in the past,
I just can't remember the details.

VSE also had NJE over IP a long time before z/OS.

VSAM shareoption-4 really works correctly in VSE but was never fully
implemented in z/OS. (I long time ago, I talked to an ex-IBM person that
was on the OS/390(?) VSAM team. They ran out of time so they documented
a work-around. When it was time to finish the project, someone decided
that "it was good enough" and no more time would be spent on making it
work.)

As someone who has converted sites from VSE to z/OS, VSE/Power supports
"channel-12" on all devices, even spooled devices, but JES2 only
supports "channel-12" on real devices, not spooled devices. This caused
a lot of problems at one shop I converted.

VSE has had JCL "GOTO" since "whenever", but JES2 did not have it for a
long time. (And don't get me started on z/OS JCL's 'backward' condition
code processing.)

Just like many big brothers think of their little brother is a 'turd',
most z/OS sysprogs are blind to what z/VSE can really do.

Tony Thigpen

Dave Clark wrote on 2/1/22 15:50:

Willy Jensen

unread,
Feb 1, 2022, 5:16:46 PM2/1/22
to ASSEMBL...@listserv.uga.edu
RXVSAM can be found at https://www.cbttape.org/ file 268.
RXVSAMBA, which does I/O to/from VSAM by REXX stems, can be found at https://www.cbttape.org/ file 669.

Willy

-----Oprindelig meddelelse-----
Fra: IBM Mainframe Assembler List <ASSEMBL...@LISTSERV.UGA.EDU> På vegne af Farley, Peter x23353
Sendt: 1. februar 2022 22:09
Til: ASSEMBL...@LISTSERV.UGA.EDU
Emne: Re: External Assembler REXX Function

Paul Gilmartin

unread,
Feb 1, 2022, 5:36:27 PM2/1/22
to ASSEMBL...@listserv.uga.edu
On Feb 1, 2022, at 14:47:15, Tony Thigpen wrote:
> ...
> VSE has had JCL "GOTO" since "whenever", but JES2 did not have it for a long time.
>
Perhaps not even yet. I can't find GOTO in the JCL Ref. What JES2 manual should
I search. Can you code loops with it?

> ... (And don't get me started on z/OS JCL's 'backward' condition code processing.)
>
I've long assumed that designers recruited from Assembler developers thought in terms
of "branch around".

And I understand that VSE places the DD (DTF?) statements before the EXEC. That
properly reflects the order of processing: ALLOCATE first, then ATTACH. That's
how it's done in CLIST; Rexx; etc.

But DTF DI? The attributes it requires seem very device-specific; not independent.

--
gil

Bernd Oppolzer

unread,
Feb 1, 2022, 7:25:27 PM2/1/22
to ASSEMBL...@listserv.uga.edu
Am 01.02.2022 um 23:36 schrieb Paul Gilmartin:
> On Feb 1, 2022, at 14:47:15, Tony Thigpen wrote:
>> ...
>> VSE has had JCL "GOTO" since "whenever", but JES2 did not have it for a long time.
>>
> Perhaps not even yet. I can't find GOTO in the JCL Ref. What JES2 manual should
> I search. Can you code loops with it?

No.

VSE's GOTO can only be used to GO forward.

If the target of GOTO is not unique in the job stream
(which in our case - CA VOLLIE - can easily occur, because
jobs can contain sub-jobs via -INC and the sub-jobs can
have GOTOs, too, maybe with the same labels)
then GOTO goes to the next matching label :-)

GOTO, BTW, is very helpful, if you have a large job which ABENDs somewhere
in the middle, and you have to restart it later at a certain step :-)

HTH, kind regards

Bernd

Bernd Oppolzer

unread,
Feb 1, 2022, 7:30:04 PM2/1/22
to ASSEMBL...@listserv.uga.edu
And, BTW, the DD statement is called "DLBL" in VSE.
And yes, it is coded before the EXEC statement.

Kind regards

Bernd

Seymour J Metz

unread,
Feb 1, 2022, 7:54:10 PM2/1/22
to ASSEMBL...@listserv.uga.edu
What happened to TLBL?


--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3

________________________________________
From: IBM Mainframe Assembler List [ASSEMBL...@LISTSERV.UGA.EDU] on behalf of Bernd Oppolzer [bernd.o...@T-ONLINE.DE]
Sent: Tuesday, February 1, 2022 7:29 PM
To: ASSEMBL...@LISTSERV.UGA.EDU
Subject: Re: External Assembler REXX Function

Seymour J Metz

unread,
Feb 1, 2022, 7:55:22 PM2/1/22
to ASSEMBL...@listserv.uga.edu
MVS has that; it's called step restart.


--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3

________________________________________
From: IBM Mainframe Assembler List [ASSEMBL...@LISTSERV.UGA.EDU] on behalf of Bernd Oppolzer [bernd.o...@T-ONLINE.DE]
Sent: Tuesday, February 1, 2022 7:25 PM
To: ASSEMBL...@LISTSERV.UGA.EDU
Subject: Re: External Assembler REXX Function

Dave Clark

unread,
Feb 2, 2022, 9:17:47 AM2/2/22
to ASSEMBL...@listserv.uga.edu
"IBM Mainframe Assembler List" <ASSEMBL...@LISTSERV.UGA.EDU> wrote on
02/01/2022 07:54:05 PM:
> What happened to TLBL?


It still exists but not a lot of tape processing these days.
Nightly system backups is the only job still using tape labels here.
During the day many jobs backup to disk, instead.

Paul Gilmartin

unread,
Feb 2, 2022, 9:29:08 AM2/2/22
to ASSEMBL...@listserv.uga.edu
On Feb 1, 2022, at 17:55:18, Seymour J Metz wrote:
>
> MVS has that; it's called step restart.
>
Eek! I've never had occasion to use that, so I wonder:
o If the restarted step is in range of IF-THEN, are steps in
the matching ELSE-ENDIF skipped?
o What is the behavior of IF or COND mentioning status of
bypassed steps?
o Are allocations or ENQs for bypassed steps performed?
o Referbacks to passed catalogued or temp DSNs in bypassed steps?
O Are SETs bypassed?


>> On Feb 1, 2022, at 14:47:15, Tony Thigpen wrote:
>>> ...
>>> VSE has had JCL "GOTO" since "whenever", but JES2 did not have it for a long time.

--
gil
\

Seymour J Metz

unread,
Feb 2, 2022, 11:45:00 AM2/2/22
to ASSEMBL...@listserv.uga.edu
I would expect the Initiator to skip them. IF/THEN/ELSE is equivalent to a bunch of COND= parameters on the individual EXEC statements. There is no allocation for skipped steps.

There are no SYSDSN ENQs for individual steps; the ENQ is done at the beginning of the job, although there may be multiple DEQs.

I'm not sured about referbacks.

SET is done at conversion time; I would expect them to be honored.

Of course, noting beats experimentation and sending an RCF on any points that seem to be missing or unclear.


--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3

________________________________________
From: IBM Mainframe Assembler List [ASSEMBL...@LISTSERV.UGA.EDU] on behalf of Paul Gilmartin [00000014e0e4a59...@LISTSERV.UGA.EDU]
Sent: Wednesday, February 2, 2022 9:29 AM
To: ASSEMBL...@LISTSERV.UGA.EDU
Subject: Re: External Assembler REXX Function

Reply all
Reply to author
Forward
0 new messages