Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-22 Thread Paul Gilmartin
On Wed, 22 Dec 2021 19:00:25 +, Farley, Peter x23353  wrote:

>Love to, if I had the unix file space to load it (my personal HFS is quite 
>small and not expandable).
>
The "*New file system support to access z/OS data sets*" mentioned yesterday by
WJS and David Crayford might provide a circumvention if the API is faithful 
enough.

>But I am working on bringing management around to more flexible thinking about 
>the wisdom and TCO of providing availability to programmer tools beyond TN3270 
>and TSO/JCL.

-- gil

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-22 Thread Farley, Peter x23353
Love to, if I had the unix file space to load it (my personal HFS is quite 
small and not expandable).

But I am working on bringing management around to more flexible thinking about 
the wisdom and TCO of providing availability to programmer tools beyond TN3270 
and TSO/JCL.

Peter

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Gord Tomlin
Sent: Wednesday, December 22, 2021 10:19 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

On 2021-12-22 01:36 AM, Farley, Peter x23353 wrote:
> Not that I much like the z/OS shell implementation, but I could learn to use 
> it effectively if I had reliable access.

Would you be allowed to use Rocket's port of bash?

--

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.


--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: zXplore [was:[RE: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS]

2021-12-22 Thread Farley, Peter x23353
> TN3270?  ssh?  IND$FILE?  FTP?  sftp?  ...

No TN3270 or IND$FILE at all yet -- but there are hints that it may yet be 
provided.  For the rest or your questions, the VSCode interface provides all 
you need - ssh login to z/OS shell and all that provides, dataset access in the 
VSCode environment (via the zowe extension) to all classic and Unix datasets on 
their mainframe instance that you have permission to see, job submission 
directly from the VSCode interface via right-click menu on the member/file to 
be submitted and job retrieval (all JES output datasets together or separately, 
just like SDSF capabilities).  Also DB2 interfaces, and several exercises 
running and logging into docker images of z/Linux running from the LinuxOne IBM 
cloud site.  Even an Ansible exercise, which was intriguing.

Python 3 is installed and usable from the z/OS Unix shell (not sure whose 
version though, IBM or Rocket, but probably IBM's given this is IBM setting it 
up and controlling it).

There is direct (creation / edit/view / deletion) of (datasets / files / 
members) available from the VSCode interface via right-click, so ftp of any 
kind is not usually needed, but I also haven't tried ftp to their system.  It 
may or may not be there.

The zowe cli also provides create/access/delete capabilities to MVS and Unix 
datasets, job submission and retrieval (from/to local PC files) in a Command 
window.  The zowe cli provides direct dataset upload and download too.  It also 
provides direct execution of Rexx scripts.

Installing VSCode and the zowe interface does require installing node.js on 
your PC.  That is apparently a zowe requirement, not VSCode.

Try it, you may find that you like it.  You may even learn new things (I have, 
and I am quite enjoying it).

Peter

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Paul Gilmartin
Sent: Wednesday, December 22, 2021 1:23 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

On Wed, 22 Dec 2021 18:02:27 +, Farley, Peter x23353 wrote:

>This is an explanatory page describing the resource and providing links to the 
>actual zXplore site:
>
>https://urldefense.com/v3/__https://www.ibm.com/it-infrastructure/z/edu
>cation/zxplore__;!!Ebr-cpPeAnfNniQ8HSAI-g_K5b7VKg!eQGlg68gps4qwx75L523M
>jGq-AaV1-08oQr5938woimwFXT_UMfQHVMbKxH07oigkHuCWA$
>
>This is the site itself:
>
>https://urldefense.com/v3/__https://ibmzxplore.influitive.com/__;!!Ebr-
>cpPeAnfNniQ8HSAI-g_K5b7VKg!eQGlg68gps4qwx75L523MjGq-AaV1-08oQr5938woimw
>FXT_UMfQHVMbKxH07ogizLQ8cA$
> 
I found those with Google, but thanks.

>... (no TSO or ISPF access at this time, for instance).  ...
>
But they mention JCL and Rexx.  OK.  I can edit JCL with vi by ssh to z/OS 
UNIX, submit with allocated INTRDR, and fetch the output with Rexx SDSF API.  
But I doubt that's what you mean.

TN3270?  ssh?  IND$FILE?  FTP?  sftp?  ...

Thanks,
gil
--

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.


--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-22 Thread Paul Gilmartin
On Wed, 22 Dec 2021 18:02:27 +, Farley, Peter x23353 wrote:

>This is an explanatory page describing the resource and providing links to the 
>actual zXplore site:
>
>https://www.ibm.com/it-infrastructure/z/education/zxplore
>
>This is the site itself:
>
>https://ibmzxplore.influitive.com/
> 
I found those with Google, but thanks.

>... (no TSO or ISPF access at this time, for instance).  ...
>
But they mention JCL and Rexx.  OK.  I can edit JCL with vi by ssh to z/OS UNIX,
submit with allocated INTRDR, and fetch the output with Rexx SDSF API.  But
I doubt that's what you mean.

TN3270?  ssh?  IND$FILE?  FTP?  sftp?  ...

Thanks,
gil

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-22 Thread Farley, Peter x23353
This is an explanatory page describing the resource and providing links to the 
actual zXplore site:

https://www.ibm.com/it-infrastructure/z/education/zxplore

This is the site itself:

https://ibmzxplore.influitive.com/

It is IBM's replacement for their "Master the Mainframe" learning environment.

The "challenges" are relatively simple but still a bit of fun for those of us 
with lots of z/OS experience.  The learning curve for me was the VSCode 
interface to zowe, but having learned quite a bit about it while using the site 
I found that environment very useful and functional.

No particularly burdensome T&C's but it is designed for learning, not for 
unfettered development (no TSO or ISPF access at this time, for instance).  
There are limits to how much of the z/OS resources you can use, and there are 
warnings that abusers will be banned.

It runs at the Dallas RDP center, so there are also bi-weekly maintenance 
windows of about 6 hours on a weekend.

Peter

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Paul Gilmartin
Sent: Wednesday, December 22, 2021 8:37 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

EXTERNAL EMAIL

On Wed, 22 Dec 2021 06:36:16 +, Farley, Peter x23353 wrote:
>
>... the IBM student site zXplore.  
> 
I hadn't heard of this before.  What are its capabilities?  T&C?

Thanks,
gil
--

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.


--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-22 Thread Gord Tomlin

On 2021-12-22 01:36 AM, Farley, Peter x23353 wrote:

Not that I much like the z/OS shell implementation, but I could learn to use it 
effectively if I had reliable access.


Would you be allowed to use Rocket's port of bash?

--

Regards, Gord Tomlin
Action Software International
(a division of Mazda Computer Corporation)
Tel: (905) 470-7113, Fax: (905) 470-6507
Support: https://actionsoftware.com/support/

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-22 Thread Paul Gilmartin
On Wed, 22 Dec 2021 06:36:16 +, Farley, Peter x23353 wrote:
>
>... the IBM student site zXplore.  
> 
I hadn't heard of this before.  What are its capabilities?  T&C?

Thanks,
gil

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-21 Thread Farley, Peter x23353
No, awk functions do NOT need to be declared in the BEGIN rule.

Functions can be defined anywhere including between rules, before the first 
BEGIN rule, after the END rule, or after the last rule in the input if there is 
no END rule.

Some time ago I wrote quite a complex set of awk programs that I used at home 
for managing my personal finance information (not trading, just banking and 
budgeting).  I used @include quite frequently in those programs.

My major reason for using PDSE members is lack of good support for non-3270 
telnet connections to my employer's systems.  3270 screen access is all I have 
that is reliable and easy to use.  No NFS access either, only ftp.  Not that I 
much like the z/OS shell implementation, but I could learn to use it 
effectively if I had reliable access.

I was recently introduced to the zowe cli and the zowe VSCode interface on the 
IBM student site zXplore.  Great tools.  Now if only I could convince the 
Powers that we need it.

One can dream.

Peter

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Paul Gilmartin
Sent: Tuesday, December 21, 2021 8:40 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

On Wed, 22 Dec 2021 00:20:19 +, Farley, Peter x23353 wrote:

>I keep various awk "function packages" in separate members in the PDS.  Each 
>one has functions I may use in the real program, which is always the last one 
>in the concatenation.
> ...
>Also, z/OS awk does not (I think) support the gawk "@include" functionality 
>that allows one to keep such function packages in separate files but not have 
>to mention them on the awk command line (multiple "-f" parameters and file 
>names on the awk command line does effectively the same thing as the 
>concatenated DD I use).
>
Do awk functions need to be declared in the BEGIN rule?  I've always done so.
I've never written awk so complex that I felt need for "@include".  If I did I 
think I'd just wrap the awk in a shell script and embed the functions with "$( 
... )".

What advantage do you see in PDSE members over UNIX directory members which I 
find more natural and portable to my desktop.

For Rexx I've used DD concatenation and copied the result to a temp PDS(E) with 
IEBGENER or REPRO in an IKJ* driver.  It's convenient that each function can 
contain a test driver which is bypassed by the RETURN in the main program which 
is often a SYSIN.  Again, I find UNIX members more convenient because I can 
test each function-member with a single command; no JCL or SDSF needed.

>... Typical JCL example:
>
>//AWKSPLIT EXEC PGM=BPXBATSL,MEMLIMIT=256M,  
>// PARM='PGM /bin/awk --f //DD:SCRIPT //DD:TEXTIN'
>//STDOUT   DD  DISP=(NEW,CATLG,CATLG),   
>// DSN=output.qsam.file,.name,  
>// UNIT=TEST,SPACE=(CYL,(1,1),RLSE), 
>// DSORG=PS,RECFM=VB,LRECL=8004,BLKSIZE=0,BUFNO=31   
>//STDERR   DD  SYSOUT=*  
>//SCRIPT   DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(CSVSPLIT)   
>// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(STRFUNCS)   
>// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(STRFTIME)   
>// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(MKTIME) 
>// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(NEWTESTS)   
>//TEXTIN   DD  DISP=SHR,DSN=input.qsam.or.pds.with.member.name,  
>// BUFNO=31  
>//STDINDD  DUMMY 
>//   
>
>My awk scripts are kept in a normal PDSE created using the IBM1047 code page 
>(ISPF terminal type 28, 3278L1).

Thanks,
gil

--
For IBM-MAIN subscribe / signoff / archive access instructions, send email to 
lists...@listserv.ua.edu with the message: INFO IBM-MAIN

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.


--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-21 Thread Paul Gilmartin
On Wed, 22 Dec 2021 00:20:19 +, Farley, Peter x23353 wrote:

>I keep various awk "function packages" in separate members in the PDS.  Each 
>one has functions I may use in the real program, which is always the last one 
>in the concatenation.
> ...
>Also, z/OS awk does not (I think) support the gawk "@include" functionality 
>that allows one to keep such function packages in separate files but not have 
>to mention them on the awk command line (multiple "-f" parameters and file 
>names on the awk command line does effectively the same thing as the 
>concatenated DD I use).
>
Do awk functions need to be declared in the BEGIN rule?  I've always done so.
I've never written awk so complex that I felt need for "@include".  If I did I 
think
I'd just wrap the awk in a shell script and embed the functions with "$( ... )".

What advantage do you see in PDSE members over UNIX directory members
which I find more natural and portable to my desktop.

For Rexx I've used DD concatenation and copied the result to a temp PDS(E)
with IEBGENER or REPRO in an IKJ* driver.  It's convenient that each function
can contain a test driver which is bypassed by the RETURN in the main program
which is often a SYSIN.  Again, I find UNIX members more convenient because
I can test each function-member with a single command; no JCL or SDSF needed.

>... Typical JCL example:
>
>//AWKSPLIT EXEC PGM=BPXBATSL,MEMLIMIT=256M,  
>// PARM='PGM /bin/awk --f //DD:SCRIPT //DD:TEXTIN'
>//STDOUT   DD  DISP=(NEW,CATLG,CATLG),   
>// DSN=output.qsam.file,.name,  
>// UNIT=TEST,SPACE=(CYL,(1,1),RLSE), 
>// DSORG=PS,RECFM=VB,LRECL=8004,BLKSIZE=0,BUFNO=31   
>//STDERR   DD  SYSOUT=*  
>//SCRIPT   DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(CSVSPLIT)   
>// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(STRFUNCS)   
>// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(STRFTIME)   
>// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(MKTIME) 
>// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(NEWTESTS)   
>//TEXTIN   DD  DISP=SHR,DSN=input.qsam.or.pds.with.member.name,  
>// BUFNO=31  
>//STDINDD  DUMMY 
>//   
>
>My awk scripts are kept in a normal PDSE created using the IBM1047 code page 
>(ISPF terminal type 28, 3278L1).

Thanks,
gil

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-21 Thread Nash, Jonathan S.
Interesting .

Thank you..

I should take a look at gawk on linux
and I should probably learn python...


-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Farley, Peter x23353
Sent: Tuesday, December 21, 2021 7:20 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: [EXTERNAL] Re: AWK ? - Re: Top 8 Reasons for using Python instead of 
REXX for z/OS

I keep various awk "function packages" in separate members in the PDS.  Each 
one has functions I may use in the real program, which is always the last one 
in the concatenation.

CSVSPLIT has an awk field-splitter function for input CSV-format files that I 
wrote decades ago.  STRFUNCS has a few string functions like LTrim, RTrim, 
Trim, Center, LPad, RPad, etc. that I have found useful at various times over 
the years.

The two *TIME members in the SCRIPT DD  have crude awk-language implementations 
of the gawk standard functions with that name because z/OS awk does not have 
them and I needed a minimal crude implementation for a data generation project 
I needed to do.

Also, z/OS awk does not (I think) support the gawk "@include" functionality 
that allows one to keep such function packages in separate files but not have 
to mention them on the awk command line (multiple "-f" parameters and file 
names on the awk command line does effectively the same thing as the 
concatenated DD I use).

HTH

Peter

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Nash, Jonathan S.
Sent: Tuesday, December 21, 2021 2:54 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

OMG I got it to work !!

Thank you very much !!

Why did your JCL have so many members in the SCRIPT DD ? I put member in with a 
simple AWK program .

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Farley, Peter x23353
Sent: Tuesday, December 21, 2021 10:46 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: [EXTERNAL] Re: AWK ? - Re: Top 8 Reasons for using Python instead of 
REXX for z/OS

Technically you are correct - I depend on the undocumented fact that the awk 
implementation on z/OS Unix uses the fopen() function which supports DD 
statement file descriptions (//DD:ddname).  Given IBM's legendary support for 
backwards compatibility, I sincerely doubt they will ever change this, though 
of course they certainly could.  I only use awk in non-production test jobs for 
research and test data generation for regression tests, so no business impact 
if ever this changed.

Typical JCL example:

//AWKSPLIT EXEC PGM=BPXBATSL,MEMLIMIT=256M,  
// PARM='PGM /bin/awk --f //DD:SCRIPT //DD:TEXTIN'
//STDOUT   DD  DISP=(NEW,CATLG,CATLG),   
// DSN=output.qsam.file,.name,  
// UNIT=TEST,SPACE=(CYL,(1,1),RLSE), 
// DSORG=PS,RECFM=VB,LRECL=8004,BLKSIZE=0,BUFNO=31   
//STDERR   DD  SYSOUT=*  
//SCRIPT   DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(CSVSPLIT)   
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(STRFUNCS)   
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(STRFTIME)   
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(MKTIME) 
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(NEWTESTS)   
//TEXTIN   DD  DISP=SHR,DSN=input.qsam.or.pds.with.member.name,  
// BUFNO=31  
//STDINDD  DUMMY 
//   

My awk scripts are kept in a normal PDSE created using the IBM1047 code page 
(ISPF terminal type 28, 3278L1).

HTH

Peter

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Paul Gilmartin
Sent: Sunday, December 19, 2021 3:07 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

EXTERNAL EMAIL

On Sun, 19 Dec 2021 19:13:53 +, Farley, Peter x23353   wrote:

>I have been using awk from JCL using DD's as script source, input and output 
>files for years now.  There is no issue using awk in normal JCL.  I even use a 
>gawk script for decoding CSV input that I wrote literally decades ago in my 
>JCL-invoked awk steps.
> 
Does IBM support all that, or are you relying on "unpredictable" behavior?

>JCL examples available on request.
>
Please.  Especially "using DD's as script source".  (Or do you just copy to a 
UNIX temporary file?)

Thanks,
gil
--

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 h

Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-21 Thread Farley, Peter x23353
I keep various awk "function packages" in separate members in the PDS.  Each 
one has functions I may use in the real program, which is always the last one 
in the concatenation.

CSVSPLIT has an awk field-splitter function for input CSV-format files that I 
wrote decades ago.  STRFUNCS has a few string functions like LTrim, RTrim, 
Trim, Center, LPad, RPad, etc. that I have found useful at various times over 
the years.

The two *TIME members in the SCRIPT DD  have crude awk-language implementations 
of the gawk standard functions with that name because z/OS awk does not have 
them and I needed a minimal crude implementation for a data generation project 
I needed to do.

Also, z/OS awk does not (I think) support the gawk "@include" functionality 
that allows one to keep such function packages in separate files but not have 
to mention them on the awk command line (multiple "-f" parameters and file 
names on the awk command line does effectively the same thing as the 
concatenated DD I use).

HTH

Peter

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Nash, Jonathan S.
Sent: Tuesday, December 21, 2021 2:54 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

OMG I got it to work !!

Thank you very much !!

Why did your JCL have so many members in the SCRIPT DD ? I put member in with a 
simple AWK program .

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Farley, Peter x23353
Sent: Tuesday, December 21, 2021 10:46 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: [EXTERNAL] Re: AWK ? - Re: Top 8 Reasons for using Python instead of 
REXX for z/OS

Technically you are correct - I depend on the undocumented fact that the awk 
implementation on z/OS Unix uses the fopen() function which supports DD 
statement file descriptions (//DD:ddname).  Given IBM's legendary support for 
backwards compatibility, I sincerely doubt they will ever change this, though 
of course they certainly could.  I only use awk in non-production test jobs for 
research and test data generation for regression tests, so no business impact 
if ever this changed.

Typical JCL example:

//AWKSPLIT EXEC PGM=BPXBATSL,MEMLIMIT=256M,  
// PARM='PGM /bin/awk --f //DD:SCRIPT //DD:TEXTIN'
//STDOUT   DD  DISP=(NEW,CATLG,CATLG),   
// DSN=output.qsam.file,.name,  
// UNIT=TEST,SPACE=(CYL,(1,1),RLSE), 
// DSORG=PS,RECFM=VB,LRECL=8004,BLKSIZE=0,BUFNO=31   
//STDERR   DD  SYSOUT=*  
//SCRIPT   DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(CSVSPLIT)   
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(STRFUNCS)   
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(STRFTIME)   
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(MKTIME) 
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(NEWTESTS)   
//TEXTIN   DD  DISP=SHR,DSN=input.qsam.or.pds.with.member.name,  
// BUFNO=31  
//STDINDD  DUMMY 
//   

My awk scripts are kept in a normal PDSE created using the IBM1047 code page 
(ISPF terminal type 28, 3278L1).

HTH

Peter

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Paul Gilmartin
Sent: Sunday, December 19, 2021 3:07 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

EXTERNAL EMAIL

On Sun, 19 Dec 2021 19:13:53 +, Farley, Peter x23353   wrote:

>I have been using awk from JCL using DD's as script source, input and output 
>files for years now.  There is no issue using awk in normal JCL.  I even use a 
>gawk script for decoding CSV input that I wrote literally decades ago in my 
>JCL-invoked awk steps.
> 
Does IBM support all that, or are you relying on "unpredictable" behavior?

>JCL examples available on request.
>
Please.  Especially "using DD's as script source".  (Or do you just copy to a 
UNIX temporary file?)

Thanks,
gil
--

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.


--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-21 Thread Paul Gilmartin
On Tue, 21 Dec 2021 14:57:35 -0500, Phil Smith III wrote:

>Remember that things like awk and sed and Python may have assumptions about
>character order that can bite in nasty ways. Not a reason to eschew them,
>but a source of surprises, especially if testing is superficial (i.e., it
>may "work" but then do the wrong thing in real-world cases).
>
The character types and character ranges ("A-Z") may help.  Or aggravate.

There's a strong argument here for compiling such utilities in Enhanced ASCII
mode and relying  on I/O autoconversion.

I've long noticed that while LC_COLLATE="en_CA" yields plausible results,
LC_COLLATE="en_US" behaves more like "C".  I once went to SR on this,
but I used Linux behavior as a reference.  "Rejected.  Linux is ASCII; MVS
is EBCDIC.  Now, the misbehavior is probably grandfathered in for
"compatibility".

>Making System/360 100% ASCII instead of the "It can do ASCII PSW bit that
>nobody ever used" is definitely on my time-machine task list.
>


-- gil

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-21 Thread Phil Smith III
Remember that things like awk and sed and Python may have assumptions about
character order that can bite in nasty ways. Not a reason to eschew them,
but a source of surprises, especially if testing is superficial (i.e., it
may "work" but then do the wrong thing in real-world cases).

 

Making System/360 100% ASCII instead of the "It can do ASCII PSW bit that
nobody ever used" is definitely on my time-machine task list.


--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-21 Thread Nash, Jonathan S.

OMG I got it to work !!

Thank you very much !!

Why did your JCL have so many members in
the SCRIPT DD ? I put member in with a 
simple AWK program .



-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Farley, Peter x23353
Sent: Tuesday, December 21, 2021 10:46 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: [EXTERNAL] Re: AWK ? - Re: Top 8 Reasons for using Python instead of 
REXX for z/OS

Technically you are correct - I depend on the undocumented fact that the awk 
implementation on z/OS Unix uses the fopen() function which supports DD 
statement file descriptions (//DD:ddname).  Given IBM's legendary support for 
backwards compatibility, I sincerely doubt they will ever change this, though 
of course they certainly could.  I only use awk in non-production test jobs for 
research and test data generation for regression tests, so no business impact 
if ever this changed.

Typical JCL example:

//AWKSPLIT EXEC PGM=BPXBATSL,MEMLIMIT=256M,  
// PARM='PGM /bin/awk --f //DD:SCRIPT //DD:TEXTIN'
//STDOUT   DD  DISP=(NEW,CATLG,CATLG),   
// DSN=output.qsam.file,.name,  
// UNIT=TEST,SPACE=(CYL,(1,1),RLSE), 
// DSORG=PS,RECFM=VB,LRECL=8004,BLKSIZE=0,BUFNO=31   
//STDERR   DD  SYSOUT=*  
//SCRIPT   DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(CSVSPLIT)   
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(STRFUNCS)   
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(STRFTIME)   
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(MKTIME) 
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(NEWTESTS)   
//TEXTIN   DD  DISP=SHR,DSN=input.qsam.or.pds.with.member.name,  
// BUFNO=31  
//STDINDD  DUMMY 
//   

My awk scripts are kept in a normal PDSE created using the IBM1047 code page 
(ISPF terminal type 28, 3278L1).

HTH

Peter

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Paul Gilmartin
Sent: Sunday, December 19, 2021 3:07 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

EXTERNAL EMAIL

On Sun, 19 Dec 2021 19:13:53 +, Farley, Peter x23353   wrote:

>I have been using awk from JCL using DD's as script source, input and output 
>files for years now.  There is no issue using awk in normal JCL.  I even use a 
>gawk script for decoding CSV input that I wrote literally decades ago in my 
>JCL-invoked awk steps.
> 
Does IBM support all that, or are you relying on "unpredictable" behavior?

>JCL examples available on request.
>
Please.  Especially "using DD's as script source".  (Or do you just copy to a 
UNIX temporary file?)

Thanks,
gil
--

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.


--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-21 Thread Kirk Wolf
Very nice Peter.  I also like using awk in JCL with datasets, although I prefer 
just to put the scripts in zFS, like source code :-)

Much of my use of awk are small, quick, and dirty.It's often mixed in with 
pipes of other shell commands.  It's nice to be able to put your shell and awk 
code inline in the JCL :

// EXEC  PGM=COZBATCH  friends don't let friends use BPXBATCH :-)
//INPUT  DD DISP=SHR,DSN=...
//STDOUT DD ...
//STDIN  DD *
   awk  '
...
...
'  //DD:INPUT
//
 
BTW:  z/OS awk is really disappointing to use if you are accustomed to using 
gawk on linux.   
I look forward to trying David Crayford's new port of gawk.

Kirk Wolf
Dovetailed Technologies
http://dovetail.com

Co:Z is available free under the terms of our Community License.
http://dovetail.com/support.html


On Tue, Dec 21, 2021, at 9:46 AM, Farley, Peter x23353 wrote:
> Technically you are correct - I depend on the undocumented fact that the awk 
> implementation on z/OS Unix uses the fopen() function which supports DD 
> statement file descriptions (//DD:ddname).  Given IBM's legendary support for 
> backwards compatibility, I sincerely doubt they will ever change this, though 
> of course they certainly could.  I only use awk in non-production test jobs 
> for research and test data generation for regression tests, so no business 
> impact if ever this changed.
> 
> Typical JCL example:
> 
> //AWKSPLIT EXEC PGM=BPXBATSL,MEMLIMIT=256M,  
> // PARM='PGM /bin/awk --f //DD:SCRIPT //DD:TEXTIN'
> //STDOUT   DD  DISP=(NEW,CATLG,CATLG),   
> // DSN=output.qsam.file,.name,  
> // UNIT=TEST,SPACE=(CYL,(1,1),RLSE), 
> // DSORG=PS,RECFM=VB,LRECL=8004,BLKSIZE=0,BUFNO=31   
> //STDERR   DD  SYSOUT=*  
> //SCRIPT   DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(CSVSPLIT)   
> // DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(STRFUNCS)   
> // DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(STRFTIME)   
> // DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(MKTIME) 
> // DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(NEWTESTS)   
> //TEXTIN   DD  DISP=SHR,DSN=input.qsam.or.pds.with.member.name,  
> // BUFNO=31  
> //STDINDD  DUMMY 
> //   
> 
> My awk scripts are kept in a normal PDSE created using the IBM1047 code page 
> (ISPF terminal type 28, 3278L1).
> 
> HTH
> 
> Peter
> 
> -Original Message-
> From: IBM Mainframe Discussion List  On Behalf Of 
> Paul Gilmartin
> Sent: Sunday, December 19, 2021 3:07 PM
> To: IBM-MAIN@LISTSERV.UA.EDU
> Subject: Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for 
> z/OS
> 
> EXTERNAL EMAIL
> 
> On Sun, 19 Dec 2021 19:13:53 +, Farley, Peter x23353   wrote:
> 
> >I have been using awk from JCL using DD's as script source, input and output 
> >files for years now.  There is no issue using awk in normal JCL.  I even use 
> >a gawk script for decoding CSV input that I wrote literally decades ago in 
> >my JCL-invoked awk steps.
> > 
> Does IBM support all that, or are you relying on "unpredictable" behavior?
> 
> >JCL examples available on request.
> >
> Please.  Especially "using DD's as script source".  (Or do you just copy to a 
> UNIX temporary file?)
> 
> Thanks,
> gil
> --
> 
> 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.
> 
> 
> --
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
> 

Kirk Wolf
Dovetailed Technologies
http://dovetail.com

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-21 Thread Farley, Peter x23353
Technically you are correct - I depend on the undocumented fact that the awk 
implementation on z/OS Unix uses the fopen() function which supports DD 
statement file descriptions (//DD:ddname).  Given IBM's legendary support for 
backwards compatibility, I sincerely doubt they will ever change this, though 
of course they certainly could.  I only use awk in non-production test jobs for 
research and test data generation for regression tests, so no business impact 
if ever this changed.

Typical JCL example:

//AWKSPLIT EXEC PGM=BPXBATSL,MEMLIMIT=256M,  
// PARM='PGM /bin/awk --f //DD:SCRIPT //DD:TEXTIN'
//STDOUT   DD  DISP=(NEW,CATLG,CATLG),   
// DSN=output.qsam.file,.name,  
// UNIT=TEST,SPACE=(CYL,(1,1),RLSE), 
// DSORG=PS,RECFM=VB,LRECL=8004,BLKSIZE=0,BUFNO=31   
//STDERR   DD  SYSOUT=*  
//SCRIPT   DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(CSVSPLIT)   
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(STRFUNCS)   
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(STRFTIME)   
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(MKTIME) 
// DD  DISP=SHR,DSN=TSOUSER.TEST.AWK(NEWTESTS)   
//TEXTIN   DD  DISP=SHR,DSN=input.qsam.or.pds.with.member.name,  
// BUFNO=31  
//STDINDD  DUMMY 
//   

My awk scripts are kept in a normal PDSE created using the IBM1047 code page 
(ISPF terminal type 28, 3278L1).

HTH

Peter

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Paul Gilmartin
Sent: Sunday, December 19, 2021 3:07 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

EXTERNAL EMAIL

On Sun, 19 Dec 2021 19:13:53 +, Farley, Peter x23353   wrote:

>I have been using awk from JCL using DD's as script source, input and output 
>files for years now.  There is no issue using awk in normal JCL.  I even use a 
>gawk script for decoding CSV input that I wrote literally decades ago in my 
>JCL-invoked awk steps.
> 
Does IBM support all that, or are you relying on "unpredictable" behavior?

>JCL examples available on request.
>
Please.  Especially "using DD's as script source".  (Or do you just copy to a 
UNIX temporary file?)

Thanks,
gil
--

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.


--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Bob Bridges
Regina REXX is the first (and probably only) product I ever installed at an
employer's site; mostly I figure it's best just to use what's already there
when writing tools.  But one day I heard my boss talking on the phone about
a difficult task:  In order to hunt for viri in the system, they would
occasionally get a big chunk of firewall logs, import it into Excel and try
to use Excel formulae to isolate one type of error message about a certain
packet being forbidden.  Then they tried to analyze the numbers.  If one IP
address sends one packet to another IP address, not suspicious.  If one
address sends ten thousand packets to one IP address, probably no problem.
But if one address sends one packet to each of ten thousand addresses, we
have ourselves a virus, folks!

The problem is that Excel formulae are not at their best trying to isolate
this one kind of message, and then parse the various parts of it.  REXX is.
So my boss let me install Regina REXX on my PC, and in an hour or three I
had a program that would read 2MB of firewall logs, pick out and parse the
right messages, and create an Excel workbook that identified the culprits in
20 seconds or less.  Much better.

One of the small triumphs I enjoy remembering.

---
Bob Bridges, robhbrid...@gmail.com, cell 336 382-7313

/* Consumer skepticism makes quality products.  This may be why governments
and churches and school systems do not exhibit unseemly zeal in encouraging
critical thought.  They know they themselves are vulnerable.  -Carl Sagan,
from "Broca's Brain" */

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of
Seymour J Metz
Sent: Sunday, December 19, 2021 18:46

I use OREXX for ArcaOS and OOREXX for Linux (I have Regina but rarely
use it.).

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread David Crayford
If you have a C compiler you can build gawk from source. David Pitts 
ported it years ago.


On 20/12/21 3:13 am, Farley, Peter x23353 wrote:

I have been using awk from JCL using DD's as script source, input and output 
files for years now.  There is no issue using awk in normal JCL.  I even use a 
gawk script for decoding CSV input that I wrote literally decades ago in my 
JCL-invoked awk steps.

JCL examples available on request.

Mind you, I'd far prefer a gawk implementation than the very limited POSIX awk 
that is currently shipped with z/OS.  Having to write my own time functions to 
try to match the ones supplied by gawk was painful, and the crude versions I 
managed to cobble together for a very business-specific function are far from 
complete or acceptable for general use.

I haven't yet seen gawk on Rocket's ported tools page though (Hey Rocket: Hint! 
Hint!).

Peter

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Nash, Jonathan S.
Sent: Sunday, December 19, 2021 10:28 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

Id rather have easy access to AWK than python :-)

On the zos side without any USS involvement..

--

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.


--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Seymour J Metz
> The previous ply was comparing Rexx to JCL, not OREXX, but OK:

Yes, but I didn't want somebody to take "REXX" as including OREXX or OOREXX

> Rexx compound symbols are associative arrays. 

No, but you can use a bunch of compound symbols to simulate an associative 
array, That touches on one of the incompatibilities. The following has 
different semantics in [O[OREXX and REXX:

A. = B.

> Rexx poses a challenge for "iterate over". 

The phrase "iterate over" is a term of art, not the [O]OREXX syntax, and in 
OOREXX the code

A. = 'Preset"
Nil = ''; A.Nil = 'wombat'
drop A.42
do I over A
   say 'A;i'='A[i]
   end

will write one line: "A.=wombat". In practice I would have written A[] = 
'Preset' and A[Nil]='wombat', which are equivalent to what you wrote.   

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


From: IBM Mainframe Discussion List [IBM-MAIN@LISTSERV.UA.EDU] on behalf of 
Paul Gilmartin [000433f07816-dmarc-requ...@listserv.ua.edu]
Sent: Sunday, December 19, 2021 2:55 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

On Sun, 19 Dec 2021 18:34:55 +, Seymour J Metz wrote:

>> Similarly, I'd like to have easy access to ISPF without any TSO
>> involvement, and without allocating a bunch of DDNAMEs.
>
>What's wrong with batch TMP? CMS?
>
>> Rexx lacks:
>> o Ability to invoke a mixture of authorized and non-authorized programs from 
>> the same script.
>
>Maybe in IRXJCL et al, but not in TSO.
>
Cumbersome in IRXJCL; eeven worse in OMVS.

>> Any additions to the list?
>
>REXX, as opposed to OREXX, only has call by value.
>
The previous ply was comparing Rexx to JCL, not OREXX, but OK:

>REXX, as opposed to OREXX, lacks arrays and iteration over arrays, although 
>compound variable pick up some of the slack.
>
Rexx compound symbols are associative arrays.  What's wrong with that?
Although they're limited to one-dimensional.  Does OREXX support
multi-dimensional?

Rexx poses a challenge for "iterate over".  How does  OREXX iterate
over A. after:
A. = 'Preset"
Nil = ''; A.Nil = 'wombat'
drop A.42

I doubt that the shareware STEMPUSH(?) and STEMPULL(?) can
do this preserving full information.  II think it's a deficiency of IRXEXCOM.

-- gil

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Seymour J Metz
> I like TSO-REXX's associative arrays,

Well, alternative to associative arrays.

> I've just been over the types of arrays in the documentation
> and, again, I can tell I don't understand all the nuances. 

I try to learn new languages incrementally. I learn classes and methods as I 
need them. E.g., I use sets but have never found a need to use bags.

> "Iterate over"; is that the same as VB's "For Each [item] In [collection]"? 

Yes. It gives you an index for each iteration.

> All the above is based on the assumption that when y'all say OREXX you mean 
> the open-source ooREXX

No, when I say OREXX I mean OREXX, but AFAIK, OOREXX inherited everything in 
OREXX except the SOM and WPS classes, and OOREXX has things that aren't in 
OREXX. I use OREXX for ArcaOS and OOREXX for Linux (I have Regina but rarely 
use it.).

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


From: IBM Mainframe Discussion List [IBM-MAIN@LISTSERV.UA.EDU] on behalf of Bob 
Bridges [robhbrid...@gmail.com]
Sent: Sunday, December 19, 2021 5:50 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

I heard about ooREXX years ago and thought about it a long time, but kept 
putting it off because it wasn't something I could use to write tools for 
clients.  (For them I pretty much have to limit myself to TSO-REXX, VBA and 
VBScript.)  But a year or two ago I ran into a task that I tried first to do in 
VBA, and finally gave it up and downloaded a copy of ooREXX.  ooREXX turned out 
to be much more complex than I expected, and I had to take a day or two off or 
maybe three to study it first; it has much more to know about than TSO-REXX.  
But it's a lot more powerful, too.

One of the things I especially noticed is the many types of arrays.  I like 
TSO-REXX's associative arrays, and if we have to limit ourselves to only one 
that's what I'd choose.  I can pretend it's a numeric array and it'll mostly 
work, so I'm not complaining.  (And you can, with a very little work, make it 
do multiple dimensions.)  But ooREXX has a lot more variety.  I've just been 
over the types of arrays in the documentation and, again, I can tell I don't 
understand all the nuances.  But there are indeed arrays with multiple 
dimensions, and circular arrays (in which you can add items up to the defined 
limit and after that they start over, replacing older items), and arrays that 
are LIFO or FIFO queues, and one type of collection that it says here can have 
the same item in it more than once, and the usual associative arrays, and a few 
things that are described in the documentation as being like this other type 
except [unintelligible differences that don't sound different].  For those who 
have used ooREXX longer than I have, please feel free to correct and extend.  I 
look forward to understanding all the differences, someday.

"Iterate over"; is that the same as VB's "For Each [item] In [collection]"?  
Yes, ooREXX has a flavor of the DO statement that handles that.  There are also 
methods that return an array of all the indices currently defined in a 
collection, which would give you another way of doing the same thing.

All the above is based on the assumption that when y'all say OREXX you mean the 
open-source ooREXX available from 
https://secure-web.cisco.com/16A9JpceaePfqxEO8nBTw4VNu45KOPPsT7UW0ka8OiFSfq6h7tTwpWFqpuAzJp2UcPOpeNEfAdJT90RGC02iBFwnR4-9AEkZH-k4oHTV58JucnYgXH0HwsSwe11q5imiu5I4ZDyNpB7KoRRsL3BcFWNYUw9K26YxcIMDHuaMf2ju8FmNGLpn1CzkWdcOrsteINUaJ0Tpk7sUp51zSKL5C7jDYC-Ta_Fhyp8JWn88bXJZWoMexX4AsFIoHLWZBWhPhtmgCs7yNvV2Yp3BzGI2Qw-ugydy8c0MU9u8wyWxS2A-KdDYSzVPuPUPIL1eLGg3Gbb09DbJXf4P0luKtP9L_S2Uys4NbEFRqxT3pmDOC8UksAROP-dPJvBMECq3qcKUiMRaoi1WvBJug-TPJgU202H1DtDKtQSPrLorLnAx21Rn-ti7o6DGIJ8ufBRzh1T4U/https%3A%2F%2Fwww.oorexx.org%2F.
  If it's something different, never mind.

---
Bob Bridges, robhbrid...@gmail.com, cell 336 382-7313

/* To err is human, but it feels divine.  -Mae West */

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Paul Gilmartin
Sent: Sunday, December 19, 2021 14:55

Rexx compound symbols are associative arrays.  What's wrong with that?
Although they're limited to one-dimensional.  Does OREXX support 
multi-dimensional?

Rexx poses a challenge for "iterate over".  How does  OREXX iterate over A. 
after:
A. = 'Preset"
Nil = ''; A.Nil = 'wombat'
drop A.42

I doubt that the shareware STEMPUSH(?) and STEMPULL(?) can do this preserving 
full information.  II think it's a deficiency of IRXEXCOM.

--- On Sun, 19 Dec 2021 18:34:55 +, Seymour J Metz wrote:
>REXX, as opposed to OREXX, lacks arrays and iteration over arrays, although 
>compound variable pick up some o

Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Paul Gilmartin
On Sun, 19 Dec 2021 22:12:02 +, Jeremy Nicoll wrote:

>On Sun, 19 Dec 2021, at 20:18, Paul Gilmartin wrote:
>> On Sun, 19 Dec 2021 20:05:01 +, Jeremy Nicoll wrote:
>>>
>> No.  See: 
>
>I don't see any justification there for the use of the noun "ply" to
>mean something in a prior part of a discussion.  Nor at
>
Not necessarily "prior", possibly subsequent.

>https://www.etymonline.com/word/ply
>...
>I'm not quibbling that use of "ply", (a layer of cloth, wood, a thread in
>eg wool or twine)...   I again don't see any justification for your use,
>which - even if it's reasonable in an archaic fashion - is very odd in
>modern use, especially on an IT mail-list.
> 
Or: 

-- gil

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Bob Bridges
I heard about ooREXX years ago and thought about it a long time, but kept 
putting it off because it wasn't something I could use to write tools for 
clients.  (For them I pretty much have to limit myself to TSO-REXX, VBA and 
VBScript.)  But a year or two ago I ran into a task that I tried first to do in 
VBA, and finally gave it up and downloaded a copy of ooREXX.  ooREXX turned out 
to be much more complex than I expected, and I had to take a day or two off or 
maybe three to study it first; it has much more to know about than TSO-REXX.  
But it's a lot more powerful, too.

One of the things I especially noticed is the many types of arrays.  I like 
TSO-REXX's associative arrays, and if we have to limit ourselves to only one 
that's what I'd choose.  I can pretend it's a numeric array and it'll mostly 
work, so I'm not complaining.  (And you can, with a very little work, make it 
do multiple dimensions.)  But ooREXX has a lot more variety.  I've just been 
over the types of arrays in the documentation and, again, I can tell I don't 
understand all the nuances.  But there are indeed arrays with multiple 
dimensions, and circular arrays (in which you can add items up to the defined 
limit and after that they start over, replacing older items), and arrays that 
are LIFO or FIFO queues, and one type of collection that it says here can have 
the same item in it more than once, and the usual associative arrays, and a few 
things that are described in the documentation as being like this other type 
except [unintelligible differences that don't sound different].  For those who 
have used ooREXX longer than I have, please feel free to correct and extend.  I 
look forward to understanding all the differences, someday.

"Iterate over"; is that the same as VB's "For Each [item] In [collection]"?  
Yes, ooREXX has a flavor of the DO statement that handles that.  There are also 
methods that return an array of all the indices currently defined in a 
collection, which would give you another way of doing the same thing.

All the above is based on the assumption that when y'all say OREXX you mean the 
open-source ooREXX available from https://www.oorexx.org/.  If it's something 
different, never mind.

---
Bob Bridges, robhbrid...@gmail.com, cell 336 382-7313

/* To err is human, but it feels divine.  -Mae West */

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Paul Gilmartin
Sent: Sunday, December 19, 2021 14:55

Rexx compound symbols are associative arrays.  What's wrong with that?
Although they're limited to one-dimensional.  Does OREXX support 
multi-dimensional?

Rexx poses a challenge for "iterate over".  How does  OREXX iterate over A. 
after:
A. = 'Preset"
Nil = ''; A.Nil = 'wombat'
drop A.42

I doubt that the shareware STEMPUSH(?) and STEMPULL(?) can do this preserving 
full information.  II think it's a deficiency of IRXEXCOM.

--- On Sun, 19 Dec 2021 18:34:55 +, Seymour J Metz wrote:
>REXX, as opposed to OREXX, lacks arrays and iteration over arrays, although 
>compound variable pick up some of the slack.

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Jeremy Nicoll
On Sun, 19 Dec 2021, at 20:18, Paul Gilmartin wrote:
> On Sun, 19 Dec 2021 20:05:01 +, Jeremy Nicoll wrote:
>>
>>> The previous ply ...
>>
>>Every time I see this use of "ply" I think it's weird.  It seems a
>> sort of back-formation from "reply".
>>
> No.  See: 

I don't see any justification there for the use of the noun "ply" to
mean something in a prior part of a discussion.  Nor at 

https://www.etymonline.com/word/ply


>>It's not, as far as I know, valid in UK English.  Is it valid anywhere
>>else?
>>
> 
> ply noun
> plural plies
> Definition of ply (Entry 2 of 3)
> 1a : one of several layers (as of cloth) usually sewn or laminated 
> together

I'm not quibbling that use of "ply", (a layer of cloth, wood, a thread in 
eg wool or twine)...   I again don't see any justification for your use, 
which - even if it's reasonable in an archaic fashion - is very odd in 
modern use, especially on an IT mail-list.

Do you not think this might be hard for people whose first language
is neither contemporary English nor anything mediaeval to understand?   

-- 
Jeremy Nicoll - my opinions are my own.

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Paul Gilmartin
On Sun, 19 Dec 2021 20:05:01 +, Jeremy Nicoll wrote:
>
>> The previous ply ...
>
>Every time I see this use of "ply" I think it's weird.  It seems a sort of
>back-formation from "reply".
>
No.  See: 

>It's not, as far as I know, valid in UK English.  Is it valid anywhere else?
>

ply noun
plural plies
Definition of ply (Entry 2 of 3)
1a : one of several layers (as of cloth) usually sewn or laminated together

-- gil

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Paul Gilmartin
On Sun, 19 Dec 2021 19:13:53 +, Farley, Peter x23353   wrote:

>I have been using awk from JCL using DD's as script source, input and output 
>files for years now.  There is no issue using awk in normal JCL.  I even use a 
>gawk script for decoding CSV input that I wrote literally decades ago in my 
>JCL-invoked awk steps.
> 
Does IBM support all that, or are you relying on "unpredictable" behavior?

>JCL examples available on request.
>
Please.  Especially "using DD's as script source".  (Or do you just copy to a 
UNIX temporary file?)

Thanks,
gil

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Jeremy Nicoll
On Sun, 19 Dec 2021, at 19:55, Paul Gilmartin wrote:

> The previous ply was comparing Rexx to JCL, not OREXX, but OK:

Every time I see this use of "ply" I think it's weird.  It seems a sort of 
back-formation from "reply".  

It's not, as far as I know, valid in UK English.  Is it valid anywhere else?

-- 
Jeremy Nicoll - my opinions are my own.

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Nash, Jonathan S.

Please send some JCL examples for using AWK
outside of USS with zos sequential files.

Thank you very much !

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Farley, Peter x23353
Sent: Sunday, December 19, 2021 2:14 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: [EXTERNAL] Re: AWK ? - Re: Top 8 Reasons for using Python instead of 
REXX for z/OS

I have been using awk from JCL using DD's as script source, input and output 
files for years now.  There is no issue using awk in normal JCL.  I even use a 
gawk script for decoding CSV input that I wrote literally decades ago in my 
JCL-invoked awk steps.

JCL examples available on request.

Mind you, I'd far prefer a gawk implementation than the very limited POSIX awk 
that is currently shipped with z/OS.  Having to write my own time functions to 
try to match the ones supplied by gawk was painful, and the crude versions I 
managed to cobble together for a very business-specific function are far from 
complete or acceptable for general use.

I haven't yet seen gawk on Rocket's ported tools page though (Hey Rocket: Hint! 
Hint!).

Peter

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Nash, Jonathan S.
Sent: Sunday, December 19, 2021 10:28 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

Id rather have easy access to AWK than python :-)

On the zos side without any USS involvement..

--

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.


--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Paul Gilmartin
On Sun, 19 Dec 2021 18:34:55 +, Seymour J Metz wrote:

>> Similarly, I'd like to have easy access to ISPF without any TSO
>> involvement, and without allocating a bunch of DDNAMEs.
>
>What's wrong with batch TMP? CMS?
>  
>> Rexx lacks:
>> o Ability to invoke a mixture of authorized and non-authorized programs from 
>> the same script.
>
>Maybe in IRXJCL et al, but not in TSO.
> 
Cumbersome in IRXJCL; eeven worse in OMVS.

>> Any additions to the list?
>
>REXX, as opposed to OREXX, only has call by value.
> 
The previous ply was comparing Rexx to JCL, not OREXX, but OK:

>REXX, as opposed to OREXX, lacks arrays and iteration over arrays, although 
>compound variable pick up some of the slack.
> 
Rexx compound symbols are associative arrays.  What's wrong with that?
Although they're limited to one-dimensional.  Does OREXX support
multi-dimensional?

Rexx poses a challenge for "iterate over".  How does  OREXX iterate
over A. after:
A. = 'Preset"
Nil = ''; A.Nil = 'wombat'
drop A.42

I doubt that the shareware STEMPUSH(?) and STEMPULL(?) can
do this preserving full information.  II think it's a deficiency of IRXEXCOM.

-- gil

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Farley, Peter x23353
I have been using awk from JCL using DD's as script source, input and output 
files for years now.  There is no issue using awk in normal JCL.  I even use a 
gawk script for decoding CSV input that I wrote literally decades ago in my 
JCL-invoked awk steps.

JCL examples available on request.

Mind you, I'd far prefer a gawk implementation than the very limited POSIX awk 
that is currently shipped with z/OS.  Having to write my own time functions to 
try to match the ones supplied by gawk was painful, and the crude versions I 
managed to cobble together for a very business-specific function are far from 
complete or acceptable for general use.

I haven't yet seen gawk on Rocket's ported tools page though (Hey Rocket: Hint! 
Hint!).

Peter

-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Nash, Jonathan S.
Sent: Sunday, December 19, 2021 10:28 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

Id rather have easy access to AWK than python :-)

On the zos side without any USS involvement..

--

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.


--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Seymour J Metz
> Similarly, I'd like to have easy access to ISPF without any TSO
> involvement, and without allocating a bunch of DDNAMEs.

What's wrong with batch TMP? CMS?

> Rexx lacks:
> o Ability to invoke a mixture of authorized and non-authorized programs from 
> the same script.

Maybe in IRXJCL et al, but not in TSO.

> Any additions to the list?

REXX, as opposed to OREXX, only has call by value.

REXX exception handling is clumsy

REXX, as opposed to OREXX, lacks OO facilities.

REXX, as opposed to OREXX, lacks arrays and iteration over arrays, although 
compound variable pick up some of the slack.

REXX lacks regexen and the regexen in OOREX V5 are fairly basic. However, there 
is PCRE.


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


From: IBM Mainframe Discussion List [IBM-MAIN@LISTSERV.UA.EDU] on behalf of 
Paul Gilmartin [000433f07816-dmarc-requ...@listserv.ua.edu]
Sent: Sunday, December 19, 2021 11:56 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

On Sun, 19 Dec 2021 15:28:09 +, Nash, Jonathan S. wrote:
>
>Id rather have easy access to AWK than python :-)
>
I've never found it difficult to access awk.

>On the zos side without any USS involvement..
>
Similarly, I'd like to have easy access to ISPF without any TSO
involvement, and without allocating a bunch of DDNAMEs.


>> Interestingly, as a Rexx fan, I tried people to move from JCL to Rexx
>
Rexx lacks:
o Ability to invoke a mixture of authorized and non-authorized programs from 
the same script.
o Ability to ENQ multiple DSNs in an atomic operation, avoiding deadlock.

Any suggested mitigations?  Any additions to the list?

-- gil

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


Re: AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Paul Gilmartin
On Sun, 19 Dec 2021 15:28:09 +, Nash, Jonathan S. wrote:
>
>Id rather have easy access to AWK than python :-)
>
I've never found it difficult to access awk.

>On the zos side without any USS involvement..
>
Similarly, I'd like to have easy access to ISPF without any TSO
involvement, and without allocating a bunch of DDNAMEs.


>> Interestingly, as a Rexx fan, I tried people to move from JCL to Rexx
>
Rexx lacks:
o Ability to invoke a mixture of authorized and non-authorized programs from 
the same script.
o Ability to ENQ multiple DSNs in an atomic operation, avoiding deadlock.

Any suggested mitigations?  Any additions to the list?

-- gil

--
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


AWK ? - Re: Top 8 Reasons for using Python instead of REXX for z/OS

2021-12-19 Thread Nash, Jonathan S.

Id rather have easy access to AWK than python :-)

On the zos side without any USS involvement..


-Original Message-
From: IBM Mainframe Discussion List  On Behalf Of 
Seymour J Metz
Sent: Sunday, December 19, 2021 10:09 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: [EXTERNAL] Re: Top 8 Reasons for using Python instead of REXX for z/OS

> Interestingly, as a Rexx fan, I tried people to move from JCL to Rexx

Isn't that like convincing people to move from a hammer to a screwdriver? They 
have different purposes, and neither can do the job the other was created for. 
It is not at all unusual to have a batch job that, among other things, runs 
REXX code.

> Introducing one more ‘official’ scripting language would fragment the 
> landscape even more.

I would love to see IBM integrate and support all of the common open source 
languages fully on TSO, as long as it isn't at the expense of the languages 
they currently support.

>  People more respectful to their own traditions and intellectual property 
> would have
> updated Rexx to the current ANSI standard,
> and would have introduced the object oriented variant decades ago.

Absolutely.


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


From: IBM Mainframe Discussion List [IBM-MAIN@LISTSERV.UA.EDU] on behalf of 
René Jansen [rene.vincent.jan...@gmail.com]
Sent: Sunday, December 19, 2021 8:40 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: Top 8 Reasons for using Python instead of REXX for z/OS

My impression is that this sudden ‘article’ is linked to this ‘modernise the 
mainframe’ effort. It is funny that you mention Yaml because of course that is 
one of the fashionable formats that will have their 14 days of fame - "what 
should the interface be ? “ GML, HTML, XML, JSON, and now YAML. The fact that 
no-one made a Rexx library for that yet, indicates that is not often used. If 
you then look at the source in Python, it would be clear that it was better 
done in Rexx.

The argument that more libraries is better should have skyrocketed NetRexx: you 
can script in it, and it has all those Java libraries available and for free.

The thing people - and the IBM managers guiding this - should realise, is that 
attacking Rexx does not help the ‘modernise the mainframe’ effort at all. Rexx 
is a language with a loyal following, and you should not offend those people. 
On other platforms, there is a plethora of scripting languages available, and 
if it is not there, it is one command to the package manager away - sudo [apt | 
yum} install regina-rexx - and you are underway. The mainframe is of course a 
different animal where the choice is limited. Now producing propaganda for 
Python causes friction in companies running z/OS - there is infrastructure 
management that decides what is run where, and there will be a group very 
unhappy that they cannot run Python yet, and another group that will be unhappy 
because they now have to do Python when that moment has arrived. There is no 
package repository for people to make their choices. If you are serious about 
modernising, I would respectfully suggest to solve that problem first: maybe 
more people would like Perl, Ruby, Lua, Scala, Kotlin. Like there were recent 
effort by IBM with PHP and Swift that apparently got nowhere. And maybe to use 
just the one library you did not include in this Python distro, whichever that 
may be.

But wait: then it would not be the mainframe anymore, that controlled 
environment that people trust. In the coming years, you will regret that 
choice, when one of the Python libraries sprouts a ‘log4j’.

The other thing is: when introducing one more scripting language, all the Rexx 
execs will not be gone overnight (even if attempted, that would be a senseless, 
equity destroying act). When Rexx appeared, on TSO, somewhere in 1988/1989, 
there already was a lot of CLIST, and I had to maintain more of those than I 
cared for. Some of them became Rexx execs, but most of these were from IBM or 
vendor companies. And of course there still is JCL - that spectre of a 
proto-scripting language. Interestingly, as a Rexx fan, I tried people to move 
from JCL to Rexx (superior control structures, parameters, etc) for years, but 
really nobody bought into that. It seems that JCL, with all its shortcomings, 
contributes to that safe feeling of stability the platform offers.

Introducing one more ‘official’ scripting language would fragment the landscape 
even more. Now people new on the platform would have to learn CLIST, Rexx, JCL 
*and* Python. It would complicate the situation for new people on the 
workforce, who would probably be better off learning COBOL or Java. I am not a 
stakeholder in this, and I wish IBM all kinds of luck with it, but I do object 
to a ‘blog’ about Rexx filled with falsehoods. People more respectful to their 
own traditions and intellectual property would have updated Rexx to the current 
ANSI standard, and would have in