Re: New Metal C standalone product for z/OS

2018-07-20 Thread M. Ray Mullins
One thing to remember about CDSECT is that it's reading ADATA, and 
conditionals tailor what's in there, just like the assembled source. 
I've been playing with it lately for a SHARE presentation (hint), and 
I've become very familiar with its output and idiosyncrasies.


On 2018-07-18 16:22, Charles Mills wrote:

Hmmm. I have not encountered that as a limitation.

CDSECT is not a macro (in the HLASM sense) converter; it is a DSECT
converter. If you had some sort of a multi-platform HLASM macro (z/OS and
VSE? 31- and 64-bit? MVS and z/OS?) it would be lovely to think it would
generate a corresponding multi-platform header with ifdef's for AIF's but it
does not. I guess it would make sense, but it does not do that. You would
indeed have to generate two structs and ifdef between them.

It generates pretty much vanilla C. If you had two platforms that both
needed headers corresponding to a Z DSECT I suspect its output could be made
to work for both. In fact, I am that audience: I generate headers and use
them in "production" on z/OS; and for compilation and very-alpha testing on
Visual Studio.

The only tweaking I have had to do is with the syntax of #pragma pack: it
generates pack(packed)/pack(reset) and Visual Studio wants
pack(push)/pack(1)/pack(pop).

It is not a perfect "automated" tool. I would not expect to push 100 DSECTs
through CDSECT and have all 100 be usable without manual intervention. But
it's a darned sight easier and more accurate than hand conversion. Believe
me -- I have tried.

One thing CDSECT does not attempt to do itself is naming. It would take some
cleverness on the user's part to create a job or script that would push a
PDS with members MYMACRO1, MYMACRO2, etc. through CDSECT and come out
automatically with mymacro1.h, mymacro2.h, etc. I always do them one at a
time. My output is always named MYUSRID.CDSECT and I manually copy that and
rename it to whatever.h.

Charles


-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU]
On Behalf Of Paul Gilmartin
Sent: Wednesday, July 18, 2018 3:33 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

On 2018-07-18, at 16:24:33, Charles Mills wrote:


CDSECT cares only about assembled code and labels. I believe conditional
assembly instructions are ignored (but not their effect, of course -- it's
usual input is an assembled macro such as DCBD). CDSECT does not to my
knowledge generate #ifdefs. I think #pragma packed() is its only C

macro

output.
  

Given the intense use that both C and Assembler make of conditional
compilation to support multiple target environments, this is an
onerous limitation.  I'm imagining assembling a DSECT for each
target; running CDSECT for each, then concatenating the outputs
separated by #ifdef ... #endif.

Hmmm... Doesn't diff(1) have the ability to generate such #ifdefs?

-- gil


--
M. Ray Mullins
Roseville, CA, USA
http://www.catherdersoftware.com/
http://www.z390.org/

German is essentially a form of assembly language consisting entirely of far 
calls heavily accented with throaty guttural sounds. ---ilvi
French is essentially German with messed-up pronunciation and spelling.  
--Robert B Wilson
English is essentially French converted to 7-bit ASCII.  ---Christophe Pierret 
[for Alain LaBonté]


Re: New Metal C standalone product for z/OS

2018-07-19 Thread Kirk Wolf
FWIW, the IBM Record Generator for Java (formerly: JZOS RecordGenerator)
also processes ADATA records from either COBOL and HLASM and will generate
Java mapping classes.

https://www.ibm.com/support/knowledgecenter/en/SSMQ4D_3.0.0/documentation/recgen_overview.html

It also has a feature where you can parse the ADATA and generate an XML
description of the ADATA.  This might be interesting to leverage to
generate mappings for other languages.   You might also want process this
to specify alternate types over the data.


Kirk Wolf
Dovetailed Technologies
http://dovetail.com

On Wed, Jul 18, 2018 at 5:00 PM, Paul Gilmartin <
0014e0e4a59b-dmarc-requ...@listserv.uga.edu> wrote:

> On 2018-07-18, at 11:42:43, Charles Mills wrote:
> >
> > Going from structs to DSECTs would make a lot of sense except that there
> is
> > no C equivalent of SYSADATA, so the utility would have to have its own
> > built-in (partial) C compiler. Going from PL/X to DSECTs (or C headers!)
> > makes a lot of (technical) sense.
> >
> I hadn't understood that CDESECT exploited SYSADATA.  That's
> a great advantage.
>
> > Generally. Of course HLASM is all but untyped. A might mean an integer
> > constant, especially since A supports expressions while F somewhat
> > inexplicably does not. You can code A(BUFF_LEN+7) but not F'BUFF_LEN+7'.
> >
> OTOH,
>DC  F'-2147483648'  assembles successfully, while
>DC  A(-2147483648)  gets a syntax error.
>
> A designer's perverse notion of completeness?
>
> -- gil
>


Re: New Metal C standalone product for z/OS

2018-07-19 Thread Seymour J Metz
Many things that are easily thought will get you in trouble if you think them. 
Understand the difference or get bitten; your choice.


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


From: IBM Mainframe Assembler List  on behalf 
of Tony Thigpen 
Sent: Wednesday, July 18, 2018 4:20 PM
To: ASSEMBLER-LIST@listserv.uga.edu
Subject: Re: New Metal C standalone product for z/OS

c pointers are easily thought of as just automatic 'using' statements.

Tony Thigpen

Steve Thompson wrote on 07/18/2018 03:54 PM:
> * TYPEing
>
>DC  0F,A(BUFF_LEN+7)  Get The Charles Constant...
>
> The type of the LABEL is "F" not "A" and you got what you needed. yes?
>
> This is typically done for certain "ASSIST" type macros that I've used
> in the past where they check what the label is  (IF, DO, DOWHILE,
> SELECT, etc.).
>
> Meanwhile, I'm thinking a bit about c and learning it. I still remember
> that c's pointers are about as obtuse as they get... But I'm told once
> you get past that, c becomes easy :)
>
> Regards,
> Steve Thompson
>
> On 07/18/2018 01:42 PM, Charles Mills wrote:
>> It *does* get alignment right. CDSECT's output does not depend on
>> "inherent"
>> C alignment. Char[8] and uint64_t both end up in the same place. It
>> constructs the struct using the SYSADATA offsets. It inserts its own
>> padding
>> where necessary. It emits #pragma pack(packed).
>>
>> Going from structs to DSECTs would make a lot of sense except that
>> there is
>> no C equivalent of SYSADATA, so the utility would have to have its own
>> built-in (partial) C compiler. Going from PL/X to DSECTs (or C headers!)
>> makes a lot of (technical) sense.
>>
>> I fail to see how  is any clearer than A, unless you happen to be
>> coming from a C-only background. Neither one is clear if you don't
>> know what
>> it means. A means "32-bit pointer."
>>
>> Generally. Of course HLASM is all but untyped. A might mean an integer
>> constant, especially since A supports expressions while F somewhat
>> inexplicably does not. You can code A(BUFF_LEN+7) but not F'BUFF_LEN+7'.
>>
>> Charles
>>
>>
>> -Original Message-
>> From: IBM Mainframe Assembler List
>> [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU]
>> On Behalf Of Paul Gilmartin
>> Sent: Wednesday, July 18, 2018 10:10 AM
>> To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
>> Subject: Re: New Metal C standalone product for z/OS
>>
>> On 2018-07-17, at 18:04:14, Charles Mills wrote:
>>
>>> One annoying thing also is that it is non-trivial to use a text
>>> editor to
>> find and convert all
>>>
>>> char foo[8];
>>> to
>>> uint64_t foo;
>>>
>>> It would be easier if the c syntax were char[8] foo; then getting to
>> uint64_t foo; would be trivial.
>> It seems the designers were fixated on making declarators look
>> like member references.
>>
>>> -Original Message-
>>> From: Charles Mills
>>> Sent: Tuesday, July 17, 2018 4:57 PM
>>>
>>> Well, the problem of course is that assembler is not strongly typed. You
>> can code
>>>
>>> BUFFADDR DS CL4 (or even 4C) and it works just fine for assembler, but
>> what is poor CDSECT supposed to do.
>>>
>>> Last I knew, it did all FD and AD as char[8] which IMHO is pretty d@mned
>> stupid. But it is syntactically valid and the storage layout is correct.
>> Subject to bouldary alignment.
>>
>> A more useful design would code the data area descriptions initially
>> as C structs and supply an ASTRUCT utility to convert to DSECTS.
>>
>> I believe I'd name it DESTRUCT.
>>
>> Or, an assembler programmer with foresight could have employed SETC
>> symbols such as:
>>  &__ptr32  SETC A
>>  POINTER  DC  &__ptr32(symbol)
>> ...
>> Providing some guidance for a CDSECT utility and clarity for the
>> reader of the source.  (IMO, "&__ptr32" conveys better information
>> than "A".  I'm not advocating Hungarian Notation.)
>>
>> (This solves nothing for legacy source code.)
>>
>> -- gil
>>
>
>


Re: New Metal C standalone product for z/OS

2018-07-19 Thread Paul Gilmartin
On 2018-07-18, at 21:45:38, Robin Vowels wrote:

> From: "Paul Gilmartin" <0014e0e4a59b-dmarc-requ...@listserv.uga.edu>
> Sent: Thursday, July 19, 2018 8:00 AM
> 
>>> Generally. Of course HLASM is all but untyped. A might mean an integer
>>> constant, especially since A supports expressions while F somewhat
>>> inexplicably does not. You can code A(BUFF_LEN+7) but not F'BUFF_LEN+7'.
>>> 
>> OTOH,
>>  DC  F'-2147483648'  assembles successfully, while
>>  DC  A(-2147483648)  gets a syntax error.
> 
> Well, it should get some kind of error.
>  
What error do you perceive here?  What I see is that an overflow occurred
evaluating a 31-bit signed integer expression.

-- gil


Re: New Metal C standalone product for z/OS

2018-07-19 Thread Jonathan Scott
Gil wrote:
>DC  F'-2147483648'  assembles successfully, while
>DC  A(-2147483648)  gets a syntax error.
>
> A designer's perverse notion of completeness?

The parsing of F-type values was modified to support unsigned
values (prefixed with U) which means that it was also able to
support values outside the normal range before applying the
specified sign.

The parsing of self-defining decimal constants in any other
context currently parses them as unsigned 31-bit values, with any
sign being taken as a separate unary operator applied afterwards.

Some years ago I prototyped a change to HLASM which supports
signed self-defining decimal constants, so a unary minus
preceding a decimal digit is taken to be part of the value (both
for assembler expressions and for conditional assembly
expressions) which means that decimal self-defining constants
could cover the full range, just like the other types (hex,
binary and character).  The main benefit in practice was that the
largest negative number was then allowed in expressions.
However, that development item was shelved for some reason,
probably mostly due to nervousness about potential
incompatibility, although we could not come up with a realistic
example of such a problem.  I do remember being quite irritated
with running into a silly problem in testing due to the
historical oddity (which definitely cannot be fixed for
compatibility reasons) that substitution of a SETA symbol loses
any minus sign, requiring the use of the SIGNED built-in function
to transfer the signed value via a SETC symbol!

I'll try to revisit that item some time to evaluate whether it
might be a good idea to complete it.

Jonathan Scott, HLASM
IBM Hursley, UK


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Robin Vowels

From: "Paul Gilmartin" <0014e0e4a59b-dmarc-requ...@listserv.uga.edu>
Sent: Thursday, July 19, 2018 8:00 AM


Generally. Of course HLASM is all but untyped. A might mean an integer
constant, especially since A supports expressions while F somewhat
inexplicably does not. You can code A(BUFF_LEN+7) but not F'BUFF_LEN+7'.
 

OTOH,
  DC  F'-2147483648'  assembles successfully, while
  DC  A(-2147483648)  gets a syntax error.


Well, it should get some kind of error.


A designer's perverse notion of completeness?


---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Charles Mills
Not sure that anyone on this list gives a darn but just in case, here is a
concrete example. I picked the COM DSECT (MODIFY and STOP interface for
started tasks) -- it's small and people should be somewhat familiar with it.
It's here:
https://www.ibm.com/support/knowledgecenter/SSLTBW_2.3.0/com.ibm.zos.v2r3.ie
ad100/COM.htm 

Here is the CDSECT output (depending on options). Notice that it lost
COMTOKEN -- thought only the flag bit was significant.

#pragma pack(packed)

 

#ifndef __iezcom__

#define __iezcom__

 

struct iezcom {

  void  *comecbpt;  /* -PTR TO ECB FOR STOP OR
MODIFY COMMAND */
  void  *comcibpt;  /* -PTR TO COMMAND INPUT BUFFER
(CIB) */
  intcomtokhr  : 1, /* -BIT = 1 INDICATES A TOKEN
PRESENT */
  : 31;

  };

 

#endif

 

#pragma pack(reset)


Charles


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Charles Mills
Hmmm. I have not encountered that as a limitation.

CDSECT is not a macro (in the HLASM sense) converter; it is a DSECT
converter. If you had some sort of a multi-platform HLASM macro (z/OS and
VSE? 31- and 64-bit? MVS and z/OS?) it would be lovely to think it would
generate a corresponding multi-platform header with ifdef's for AIF's but it
does not. I guess it would make sense, but it does not do that. You would
indeed have to generate two structs and ifdef between them.

It generates pretty much vanilla C. If you had two platforms that both
needed headers corresponding to a Z DSECT I suspect its output could be made
to work for both. In fact, I am that audience: I generate headers and use
them in "production" on z/OS; and for compilation and very-alpha testing on
Visual Studio.

The only tweaking I have had to do is with the syntax of #pragma pack: it
generates pack(packed)/pack(reset) and Visual Studio wants
pack(push)/pack(1)/pack(pop).

It is not a perfect "automated" tool. I would not expect to push 100 DSECTs
through CDSECT and have all 100 be usable without manual intervention. But
it's a darned sight easier and more accurate than hand conversion. Believe
me -- I have tried.

One thing CDSECT does not attempt to do itself is naming. It would take some
cleverness on the user's part to create a job or script that would push a
PDS with members MYMACRO1, MYMACRO2, etc. through CDSECT and come out
automatically with mymacro1.h, mymacro2.h, etc. I always do them one at a
time. My output is always named MYUSRID.CDSECT and I manually copy that and
rename it to whatever.h.

Charles


-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU]
On Behalf Of Paul Gilmartin
Sent: Wednesday, July 18, 2018 3:33 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

On 2018-07-18, at 16:24:33, Charles Mills wrote:

> CDSECT cares only about assembled code and labels. I believe conditional
> assembly instructions are ignored (but not their effect, of course -- it's
> usual input is an assembled macro such as DCBD). CDSECT does not to my
> knowledge generate #ifdefs. I think #pragma packed() is its only C
macro
> output.
>  
Given the intense use that both C and Assembler make of conditional
compilation to support multiple target environments, this is an
onerous limitation.  I'm imagining assembling a DSECT for each
target; running CDSECT for each, then concatenating the outputs
separated by #ifdef ... #endif.

Hmmm... Doesn't diff(1) have the ability to generate such #ifdefs?

-- gil


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Paul Gilmartin
On 2018-07-18, at 16:24:33, Charles Mills wrote:

> CDSECT cares only about assembled code and labels. I believe conditional
> assembly instructions are ignored (but not their effect, of course -- it's
> usual input is an assembled macro such as DCBD). CDSECT does not to my
> knowledge generate #ifdefs. I think #pragma packed() is its only C macro
> output.
>  
Given the intense use that both C and Assembler make of conditional
compilation to support multiple target environments, this is an
onerous limitation.  I'm imagining assembling a DSECT for each
target; running CDSECT for each, then concatenating the outputs
separated by #ifdef ... #endif.

Hmmm... Doesn't diff(1) have the ability to generate such #ifdefs?

-- gil


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Charles Mills
CDSECT cares only about assembled code and labels. I believe conditional
assembly instructions are ignored (but not their effect, of course -- it's
usual input is an assembled macro such as DCBD). CDSECT does not to my
knowledge generate #ifdefs. I think #pragma packed() is its only C macro
output.

Charles


-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU]
On Behalf Of Paul Gilmartin
Sent: Wednesday, July 18, 2018 5:15 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

On 2018-07-18, at 14:54:39, Charles Mills wrote:
> 
> Yes, assembler has types. A macro that cares can tell the difference among
FOO DS C, FOO DS A, and FOO DS F -- but few macros and fewer instructions
care. ...
>  
It's been a while since I tried it, but using AIF to select among three
such alternatives may yield unexpected resuts.  Lookahead can make it worse.

Given such complexity, will CDSECT realize the AIFs as #ifdefs?  Probably
not because SYSADATA doesn't reflect the AIFs.

-- gil


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Paul Gilmartin
On 2018-07-18, at 14:54:39, Charles Mills wrote:
> 
> Yes, assembler has types. A macro that cares can tell the difference among 
> FOO DS C, FOO DS A, and FOO DS F -- but few macros and fewer instructions 
> care. ...
>  
It's been a while since I tried it, but using AIF to select among three
such alternatives may yield unexpected resuts.  Lookahead can make it worse.

Given such complexity, will CDSECT realize the AIFs as #ifdefs?  Probably
not because SYSADATA doesn't reflect the AIFs.

-- gil


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Paul Gilmartin
On 2018-07-18, at 13:54:01, Steve Thompson wrote:
> 
> Meanwhile, I'm thinking a bit about c and learning it. I still remember that 
> c's pointers are about as obtuse as they get... But I'm told once you get 
> past that, c becomes easy :)
>  
No, merely the next lesson is no harder.

-- gil


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Charles Mills
Gödel would be proud.

Charles


-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU]
On Behalf Of Paul Gilmartin
Sent: Wednesday, July 18, 2018 5:00 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

On 2018-07-18, at 11:42:43, Charles Mills wrote:
> 
> Going from structs to DSECTs would make a lot of sense except that there
is
> no C equivalent of SYSADATA, so the utility would have to have its own
> built-in (partial) C compiler. Going from PL/X to DSECTs (or C headers!)
> makes a lot of (technical) sense. 
>  
I hadn't understood that CDESECT exploited SYSADATA.  That's
a great advantage.

> Generally. Of course HLASM is all but untyped. A might mean an integer
> constant, especially since A supports expressions while F somewhat
> inexplicably does not. You can code A(BUFF_LEN+7) but not F'BUFF_LEN+7'.
>  
OTOH,
   DC  F'-2147483648'  assembles successfully, while
   DC  A(-2147483648)  gets a syntax error.

A designer's perverse notion of completeness?

-- gil


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Steve Smith
Various observations and assertions:

HLASM has very weak typing.  On the other hand, it doesn't claim to be a
compiler.
On the other other hand, you'd think that by now maybe there would be an
option to flag something like L R1,=H'2', and not just because you were
unlucky with alignment.

The new register symbol attribute facility is fatuous.

C, imho, suffers from apparently being designed to the first principle that
every keystroke the programmer has to make kills a puppy.

Both programmers and compiler writers would have enormously benefited from
the simple expedient of the 'DCL' keyword (well, 'dcl', of course) like
PL/I has.

Every "special" character (operator) in C is overloaded.  That C compilers
actually work will always amaze me.

sas


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Paul Gilmartin
On 2018-07-18, at 11:42:43, Charles Mills wrote:
> 
> Going from structs to DSECTs would make a lot of sense except that there is
> no C equivalent of SYSADATA, so the utility would have to have its own
> built-in (partial) C compiler. Going from PL/X to DSECTs (or C headers!)
> makes a lot of (technical) sense. 
>  
I hadn't understood that CDESECT exploited SYSADATA.  That's
a great advantage.

> Generally. Of course HLASM is all but untyped. A might mean an integer
> constant, especially since A supports expressions while F somewhat
> inexplicably does not. You can code A(BUFF_LEN+7) but not F'BUFF_LEN+7'.
>  
OTOH,
   DC  F'-2147483648'  assembles successfully, while
   DC  A(-2147483648)  gets a syntax error.

A designer's perverse notion of completeness?

-- gil


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Charles Mills
c pointers are like USING if you had as many registers as you wanted.

The biggest problem I had with making the leap from assembler to C was the 
concept that 

char foo; declares a variable but char bar[n]; is an address, and the corollary 
that bar is not the same thing as bar[0]. In HLASM an array and its first 
element are the same thing.

Charles


-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU] On 
Behalf Of Tony Thigpen
Sent: Wednesday, July 18, 2018 1:20 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

c pointers are easily thought of as just automatic 'using' statements.

Tony Thigpen

Steve Thompson wrote on 07/18/2018 03:54 PM:
> * TYPEing
> 
>DC  0F,A(BUFF_LEN+7)  Get The Charles Constant...
> 
> The type of the LABEL is "F" not "A" and you got what you needed. yes?
> 
> This is typically done for certain "ASSIST" type macros that I've used 
> in the past where they check what the label is  (IF, DO, DOWHILE, 
> SELECT, etc.).
> 
> Meanwhile, I'm thinking a bit about c and learning it. I still remember 
> that c's pointers are about as obtuse as they get... But I'm told once 
> you get past that, c becomes easy :)


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Charles Mills
By "HLASM is not really typed" I mean that subject only to alignment L 0,FOO 
assembles without complaint whether FOO is a character, a halfword, a word, or 
a doubleword, and therefore it is hard for software to make guesses about the 
usage of FOO based on its declaration.

Yes, assembler has types. A macro that cares can tell the difference among FOO 
DS C, FOO DS A, and FOO DS F -- but few macros and fewer instructions care. The 
closest that HLASM comes to real typing is when you declare a register to be an 
AR or a GPR or whatever, and the assembler balks if you use it incorrectly.

Charles


-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU] On 
Behalf Of Steve Thompson
Sent: Wednesday, July 18, 2018 12:54 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

* TYPEing

   DC  0F,A(BUFF_LEN+7)  Get The Charles Constant...

The type of the LABEL is "F" not "A" and you got what you needed. 
yes?

This is typically done for certain "ASSIST" type macros that I've 
used in the past where they check what the label is  (IF, DO, 
DOWHILE, SELECT, etc.).

Meanwhile, I'm thinking a bit about c and learning it. I still 
remember that c's pointers are about as obtuse as they get... But 
I'm told once you get past that, c becomes easy :)

Regards,
Steve Thompson

On 07/18/2018 01:42 PM, Charles Mills wrote:
> It *does* get alignment right. CDSECT's output does not depend on "inherent"
> C alignment. Char[8] and uint64_t both end up in the same place. It
> constructs the struct using the SYSADATA offsets. It inserts its own padding
> where necessary. It emits #pragma pack(packed).
> 
> Going from structs to DSECTs would make a lot of sense except that there is
> no C equivalent of SYSADATA, so the utility would have to have its own
> built-in (partial) C compiler. Going from PL/X to DSECTs (or C headers!)
> makes a lot of (technical) sense.
> 
> I fail to see how  is any clearer than A, unless you happen to be
> coming from a C-only background. Neither one is clear if you don't know what
> it means. A means "32-bit pointer."
> 
> Generally. Of course HLASM is all but untyped. A might mean an integer
> constant, especially since A supports expressions while F somewhat
> inexplicably does not. You can code A(BUFF_LEN+7) but not F'BUFF_LEN+7'.
> 
> Charles
> 
> 
> -Original Message-
> From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU]
> On Behalf Of Paul Gilmartin
> Sent: Wednesday, July 18, 2018 10:10 AM
> To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
> Subject: Re: New Metal C standalone product for z/OS
> 
> On 2018-07-17, at 18:04:14, Charles Mills wrote:
> 
>> One annoying thing also is that it is non-trivial to use a text editor to
> find and convert all
>>
>> char foo[8];
>> to
>> uint64_t foo;
>>
>> It would be easier if the c syntax were char[8] foo; then getting to
> uint64_t foo; would be trivial.
>>   
> It seems the designers were fixated on making declarators look
> like member references.
> 
>> -Original Message-
>> From: Charles Mills
>> Sent: Tuesday, July 17, 2018 4:57 PM
>>
>> Well, the problem of course is that assembler is not strongly typed. You
> can code
>>
>> BUFFADDR DS CL4 (or even 4C) and it works just fine for assembler, but
> what is poor CDSECT supposed to do.
>>
>> Last I knew, it did all FD and AD as char[8] which IMHO is pretty d@mned
> stupid. But it is syntactically valid and the storage layout is correct.
>>   
> Subject to bouldary alignment.
> 
> A more useful design would code the data area descriptions initially
> as C structs and supply an ASTRUCT utility to convert to DSECTS.
> 
> I believe I'd name it DESTRUCT.
> 
> Or, an assembler programmer with foresight could have employed SETC
> symbols such as:
>  &__ptr32  SETC A
>  
>  POINTER  DC  &__ptr32(symbol)
> ...
> Providing some guidance for a CDSECT utility and clarity for the
> reader of the source.  (IMO, "&__ptr32" conveys better information
> than "A".  I'm not advocating Hungarian Notation.)
> 
> (This solves nothing for legacy source code.)
> 
> -- gil
> 


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Tony Thigpen

c pointers are easily thought of as just automatic 'using' statements.

Tony Thigpen

Steve Thompson wrote on 07/18/2018 03:54 PM:

* TYPEing

   DC  0F,A(BUFF_LEN+7)  Get The Charles Constant...

The type of the LABEL is "F" not "A" and you got what you needed. yes?

This is typically done for certain "ASSIST" type macros that I've used 
in the past where they check what the label is  (IF, DO, DOWHILE, 
SELECT, etc.).


Meanwhile, I'm thinking a bit about c and learning it. I still remember 
that c's pointers are about as obtuse as they get... But I'm told once 
you get past that, c becomes easy :)


Regards,
Steve Thompson

On 07/18/2018 01:42 PM, Charles Mills wrote:
It *does* get alignment right. CDSECT's output does not depend on 
"inherent"

C alignment. Char[8] and uint64_t both end up in the same place. It
constructs the struct using the SYSADATA offsets. It inserts its own 
padding

where necessary. It emits #pragma pack(packed).

Going from structs to DSECTs would make a lot of sense except that 
there is

no C equivalent of SYSADATA, so the utility would have to have its own
built-in (partial) C compiler. Going from PL/X to DSECTs (or C headers!)
makes a lot of (technical) sense.

I fail to see how  is any clearer than A, unless you happen to be
coming from a C-only background. Neither one is clear if you don't 
know what

it means. A means "32-bit pointer."

Generally. Of course HLASM is all but untyped. A might mean an integer
constant, especially since A supports expressions while F somewhat
inexplicably does not. You can code A(BUFF_LEN+7) but not F'BUFF_LEN+7'.

Charles


-Original Message-
From: IBM Mainframe Assembler List 
[mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU]

On Behalf Of Paul Gilmartin
Sent: Wednesday, July 18, 2018 10:10 AM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

On 2018-07-17, at 18:04:14, Charles Mills wrote:

One annoying thing also is that it is non-trivial to use a text 
editor to

find and convert all


char foo[8];
to
uint64_t foo;

It would be easier if the c syntax were char[8] foo; then getting to

uint64_t foo; would be trivial.
It seems the designers were fixated on making declarators look
like member references.


-Original Message-
From: Charles Mills
Sent: Tuesday, July 17, 2018 4:57 PM

Well, the problem of course is that assembler is not strongly typed. You

can code


BUFFADDR DS CL4 (or even 4C) and it works just fine for assembler, but

what is poor CDSECT supposed to do.


Last I knew, it did all FD and AD as char[8] which IMHO is pretty d@mned

stupid. But it is syntactically valid and the storage layout is correct.
Subject to bouldary alignment.

A more useful design would code the data area descriptions initially
as C structs and supply an ASTRUCT utility to convert to DSECTS.

I believe I'd name it DESTRUCT.

Or, an assembler programmer with foresight could have employed SETC
symbols such as:
 &__ptr32  SETC A
 POINTER  DC  &__ptr32(symbol)
...
Providing some guidance for a CDSECT utility and clarity for the
reader of the source.  (IMO, "&__ptr32" conveys better information
than "A".  I'm not advocating Hungarian Notation.)

(This solves nothing for legacy source code.)

-- gil






Re: New Metal C standalone product for z/OS

2018-07-18 Thread Steve Thompson

* TYPEing

   DC  0F,A(BUFF_LEN+7)  Get The Charles Constant...

The type of the LABEL is "F" not "A" and you got what you needed. 
yes?


This is typically done for certain "ASSIST" type macros that I've 
used in the past where they check what the label is  (IF, DO, 
DOWHILE, SELECT, etc.).


Meanwhile, I'm thinking a bit about c and learning it. I still 
remember that c's pointers are about as obtuse as they get... But 
I'm told once you get past that, c becomes easy :)


Regards,
Steve Thompson

On 07/18/2018 01:42 PM, Charles Mills wrote:

It *does* get alignment right. CDSECT's output does not depend on "inherent"
C alignment. Char[8] and uint64_t both end up in the same place. It
constructs the struct using the SYSADATA offsets. It inserts its own padding
where necessary. It emits #pragma pack(packed).

Going from structs to DSECTs would make a lot of sense except that there is
no C equivalent of SYSADATA, so the utility would have to have its own
built-in (partial) C compiler. Going from PL/X to DSECTs (or C headers!)
makes a lot of (technical) sense.

I fail to see how  is any clearer than A, unless you happen to be
coming from a C-only background. Neither one is clear if you don't know what
it means. A means "32-bit pointer."

Generally. Of course HLASM is all but untyped. A might mean an integer
constant, especially since A supports expressions while F somewhat
inexplicably does not. You can code A(BUFF_LEN+7) but not F'BUFF_LEN+7'.

Charles


-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU]
On Behalf Of Paul Gilmartin
Sent: Wednesday, July 18, 2018 10:10 AM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

On 2018-07-17, at 18:04:14, Charles Mills wrote:


One annoying thing also is that it is non-trivial to use a text editor to

find and convert all


char foo[8];
to
uint64_t foo;

It would be easier if the c syntax were char[8] foo; then getting to

uint64_t foo; would be trivial.
  

It seems the designers were fixated on making declarators look
like member references.


-Original Message-
From: Charles Mills
Sent: Tuesday, July 17, 2018 4:57 PM

Well, the problem of course is that assembler is not strongly typed. You

can code


BUFFADDR DS CL4 (or even 4C) and it works just fine for assembler, but

what is poor CDSECT supposed to do.


Last I knew, it did all FD and AD as char[8] which IMHO is pretty d@mned

stupid. But it is syntactically valid and the storage layout is correct.
  

Subject to bouldary alignment.

A more useful design would code the data area descriptions initially
as C structs and supply an ASTRUCT utility to convert to DSECTS.

I believe I'd name it DESTRUCT.

Or, an assembler programmer with foresight could have employed SETC
symbols such as:
 &__ptr32  SETC A
 
 POINTER  DC  &__ptr32(symbol)

...
Providing some guidance for a CDSECT utility and clarity for the
reader of the source.  (IMO, "&__ptr32" conveys better information
than "A".  I'm not advocating Hungarian Notation.)

(This solves nothing for legacy source code.)

-- gil



Re: New Metal C standalone product for z/OS

2018-07-18 Thread Charles Mills
It *does* get alignment right. CDSECT's output does not depend on "inherent"
C alignment. Char[8] and uint64_t both end up in the same place. It
constructs the struct using the SYSADATA offsets. It inserts its own padding
where necessary. It emits #pragma pack(packed).

Going from structs to DSECTs would make a lot of sense except that there is
no C equivalent of SYSADATA, so the utility would have to have its own
built-in (partial) C compiler. Going from PL/X to DSECTs (or C headers!)
makes a lot of (technical) sense. 

I fail to see how  is any clearer than A, unless you happen to be
coming from a C-only background. Neither one is clear if you don't know what
it means. A means "32-bit pointer." 

Generally. Of course HLASM is all but untyped. A might mean an integer
constant, especially since A supports expressions while F somewhat
inexplicably does not. You can code A(BUFF_LEN+7) but not F'BUFF_LEN+7'.

Charles


-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU]
On Behalf Of Paul Gilmartin
Sent: Wednesday, July 18, 2018 10:10 AM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

On 2018-07-17, at 18:04:14, Charles Mills wrote:

> One annoying thing also is that it is non-trivial to use a text editor to
find and convert all
> 
> char foo[8];
> to 
> uint64_t foo;
> 
> It would be easier if the c syntax were char[8] foo; then getting to
uint64_t foo; would be trivial.
>  
It seems the designers were fixated on making declarators look
like member references.

> -Original Message-
> From: Charles Mills
> Sent: Tuesday, July 17, 2018 4:57 PM
> 
> Well, the problem of course is that assembler is not strongly typed. You
can code
> 
> BUFFADDR DS CL4 (or even 4C) and it works just fine for assembler, but
what is poor CDSECT supposed to do.
> 
> Last I knew, it did all FD and AD as char[8] which IMHO is pretty d@mned
stupid. But it is syntactically valid and the storage layout is correct.
>  
Subject to bouldary alignment.

A more useful design would code the data area descriptions initially
as C structs and supply an ASTRUCT utility to convert to DSECTS.

I believe I'd name it DESTRUCT.

Or, an assembler programmer with foresight could have employed SETC
symbols such as:
&__ptr32  SETC A

POINTER  DC  &__ptr32(symbol)
...
Providing some guidance for a CDSECT utility and clarity for the
reader of the source.  (IMO, "&__ptr32" conveys better information
than "A".  I'm not advocating Hungarian Notation.)

(This solves nothing for legacy source code.)

-- gil


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Paul Gilmartin
On 2018-07-17, at 18:04:14, Charles Mills wrote:

> One annoying thing also is that it is non-trivial to use a text editor to 
> find and convert all
> 
> char foo[8];
> to 
> uint64_t foo;
> 
> It would be easier if the c syntax were char[8] foo; then getting to uint64_t 
> foo; would be trivial.
>  
It seems the designers were fixated on making declarators look
like member references.

> -Original Message-
> From: Charles Mills
> Sent: Tuesday, July 17, 2018 4:57 PM
> 
> Well, the problem of course is that assembler is not strongly typed. You can 
> code
> 
> BUFFADDR DS CL4 (or even 4C) and it works just fine for assembler, but what 
> is poor CDSECT supposed to do.
> 
> Last I knew, it did all FD and AD as char[8] which IMHO is pretty d@mned 
> stupid. But it is syntactically valid and the storage layout is correct.
>  
Subject to bouldary alignment.

A more useful design would code the data area descriptions initially
as C structs and supply an ASTRUCT utility to convert to DSECTS.

I believe I'd name it DESTRUCT.

Or, an assembler programmer with foresight could have employed SETC
symbols such as:
&__ptr32  SETC A

POINTER  DC  &__ptr32(symbol)
...
Providing some guidance for a CDSECT utility and clarity for the
reader of the source.  (IMO, "&__ptr32" conveys better information
than "A".  I'm not advocating Hungarian Notation.)

(This solves nothing for legacy source code.)

-- gil


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Charles Mills
Thanks. (I'm a lazy son of a gun!)

Charles


-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU] On 
Behalf Of Walt Farrell
Sent: Wednesday, July 18, 2018 6:50 AM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

On Tue, 17 Jul 2018 17:04:14 -0700, Charles Mills  wrote:

>One annoying thing also is that it is non-trivial to use a text editor to find 
>and convert all
>
>char foo[8];
>to 
>uint64_t foo;
>
>It would be easier if the c syntax were char[8] foo; then getting to uint64_t 
>foo; would be trivial.
>
>I guess if I were handier with regex it would be a piece of cake. I should 
>just figure it out once and then I would have it.

One possibility for a regex (only minimally tested):
  Search expression: char +(\w(\w|\d)*)\[8\];
  Replace expression: uint64_t \1;

That should search for:
(a) the string "char" followed by 1 or more spaces
(b) followed by a "word" character (things like a-z, A-Z, _) followed by 0 or 
more word characters or digits
(c) followed by the string "[8];"

The replacement is then the string "uint64_t " followed by whatever was matched 
in (b) followed by ";".

The only questionable part I can think of is in (b), which needs to match all 
the legal characters in the variable name. Rather than trusting to the 
definition of \w one could instead use: ([a-zA-Z_][a-zA-z0-9_]*) 

And then one can add any additional characters between the [] that may be legal 
in variable names but that aren't covered in \w. Some might need to be escaped 
with \ if they happen to be significant in regular expressions.

Also, some regex engines have somewhat differnt syntaxes, so the final version 
might depend on what your text editor implements, but something as basic as 
this one should be fairly robust.

-- 
Walt


Re: New Metal C standalone product for z/OS

2018-07-18 Thread Walt Farrell
On Tue, 17 Jul 2018 17:04:14 -0700, Charles Mills  wrote:

>One annoying thing also is that it is non-trivial to use a text editor to find 
>and convert all
>
>char foo[8];
>to 
>uint64_t foo;
>
>It would be easier if the c syntax were char[8] foo; then getting to uint64_t 
>foo; would be trivial.
>
>I guess if I were handier with regex it would be a piece of cake. I should 
>just figure it out once and then I would have it.

One possibility for a regex (only minimally tested):
  Search expression: char +(\w(\w|\d)*)\[8\];
  Replace expression: uint64_t \1;

That should search for:
(a) the string "char" followed by 1 or more spaces
(b) followed by a "word" character (things like a-z, A-Z, _) followed by 0 or 
more word characters or digits
(c) followed by the string "[8];"

The replacement is then the string "uint64_t " followed by whatever was matched 
in (b) followed by ";".

The only questionable part I can think of is in (b), which needs to match all 
the legal characters in the variable name. Rather than trusting to the 
definition of \w one could instead use: ([a-zA-Z_][a-zA-z0-9_]*) 

And then one can add any additional characters between the [] that may be legal 
in variable names but that aren't covered in \w. Some might need to be escaped 
with \ if they happen to be significant in regular expressions.

Also, some regex engines have somewhat differnt syntaxes, so the final version 
might depend on what your text editor implements, but something as basic as 
this one should be fairly robust.

-- 
Walt


Re: New Metal C standalone product for z/OS

2018-07-17 Thread Charles Mills
One annoying thing also is that it is non-trivial to use a text editor to find 
and convert all

char foo[8];
to 
uint64_t foo;

It would be easier if the c syntax were char[8] foo; then getting to uint64_t 
foo; would be trivial.

I guess if I were handier with regex it would be a piece of cake. I should just 
figure it out once and then I would have it.

Charles


-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU] On 
Behalf Of Charles Mills
Sent: Tuesday, July 17, 2018 4:57 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

Well, the problem of course is that assembler is not strongly typed. You can 
code

BUFFADDR DS CL4 (or even 4C) and it works just fine for assembler, but what is 
poor CDSECT supposed to do.

Last I knew, it did all FD and AD as char[8] which IMHO is pretty d@mned 
stupid. But it is syntactically valid and the storage layout is correct.

Charles


-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU] On 
Behalf Of Farley, Peter x23353
Sent: Tuesday, July 17, 2018 4:19 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

And of course I confused my assembler and my C.  I meant to say ". . . address 
variables as "void *" and __PTR32 or __PTR64 as needed . . . ".  CDSECT (at 
least as of V2.1) has a bad habit of translating some assembler address 
variable definitions as "char[4}" or "char[8]".  I haven't exercised CDSECT 
V2.2 yet, it will be interesting to see what it does with those kind of 
definitions.


Re: New Metal C standalone product for z/OS

2018-07-17 Thread Charles Mills
Well, the problem of course is that assembler is not strongly typed. You can 
code

BUFFADDR DS CL4 (or even 4C) and it works just fine for assembler, but what is 
poor CDSECT supposed to do.

Last I knew, it did all FD and AD as char[8] which IMHO is pretty d@mned 
stupid. But it is syntactically valid and the storage layout is correct.

Charles


-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU] On 
Behalf Of Farley, Peter x23353
Sent: Tuesday, July 17, 2018 4:19 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

And of course I confused my assembler and my C.  I meant to say ". . . address 
variables as "void *" and __PTR32 or __PTR64 as needed . . . ".  CDSECT (at 
least as of V2.1) has a bad habit of translating some assembler address 
variable definitions as "char[4}" or "char[8]".  I haven't exercised CDSECT 
V2.2 yet, it will be interesting to see what it does with those kind of 
definitions.


Re: New Metal C standalone product for z/OS

2018-07-17 Thread Farley, Peter x23353
And of course I confused my assembler and my C.  I meant to say ". . . address 
variables as "void *" and __PTR32 or __PTR64 as needed . . . ".  CDSECT (at 
least as of V2.1) has a bad habit of translating some assembler address 
variable definitions as "char[4}" or "char[8]".  I haven't exercised CDSECT 
V2.2 yet, it will be interesting to see what it does with those kind of 
definitions.

Peter

-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU] On 
Behalf Of Farley, Peter x23353
Sent: Tuesday, July 17, 2018 6:58 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

Indeed, that is true.  And it is even possible (and not terribly hard) to 
automate a process to "massage" the CDSECT output to make it far more palatable 
and sensible (e.g., define known address variables as A or AD as needed, add 
__PTR32 or __PTR64 where needed, and even fix "bugs" in the (mis-)definitions).

Peter

-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU] On 
Behalf Of Charles Mills
Sent: Tuesday, July 17, 2018 6:34 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

EDCDSECT, sometimes called just CDSECT, a part of the XLC compiler, does a very 
adequate job of converting assembler DSECTs, including from z/OS macros, to C 
headers. Are they pretty? No. Do they "make sense"? Oftentimes not. Are they 
ideal? No. But they are syntactically correct and 99% of the time the storage 
layout is correct, and they do the job.

Charles


-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU] On 
Behalf Of Ze'ev Atlas
Sent: Tuesday, July 17, 2018 3:16 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

Actually, I would say it is the other way around.  It is relatively easy to 
create a set of structurea that resemble the control blocks and traverse 
around, providing that IBM create the appropriate header files and maintain 
them (most of us are capable of translating the macros to C headers, but 
maintence would be a nigtmare.)OTH, I won't be comfortable relying on some home 
grown assembler code.  I think that if IBM true to the stated goal they should 
supply a small set of key liw level system callsZA

Sent from Yahoo Mail on Android 
 
  On Tue, Jul 17, 2018 at 1:27 PM, Paul 
Gilmartin<0014e0e4a59b-dmarc-requ...@listserv.uga.edu> wrote:   On 
2018-07-17, at 10:45:20, John McKown wrote:
> 
> http://www-01.ibm.com/common/ssi/ShowDoc.wss?docURL=/common/ssi/rep_ca
> /6/897/ENUS218-326/index.html⟨=en_locale=en
> ...
> Enterprise Metal C for z/OS is the newest, stand-alone offering for 
> the IBM family of development tools. Enterprise Metal C for z/OS 
> delivers a high-level language alternative to having to write programs 
> in High Level Assembler (HLASM). The ability to write programs in 
> HLASM is a specialized skill for the z/OS platform and developers with 
> expertise in assembler skills are difficult to find. Developers can 
> use C syntax instead to develop systems programs. This eliminates the 
> need to manage the use of registers and to manually tune assembler 
> instruction sequences. Enterprise Metal C for z/OS does this for developers.
>  
What about availability of equivalent of macros for SVC and PC interfaces and 
control block mapping?  Embedded assembler code might suffice for SVC and PC; 
it's less comfortable to rely on embedded assembler to access control block 
fields.

IBM made a serious mistake in not making PL/S a product a half-century ago.

--


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.

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.


Re: New Metal C standalone product for z/OS

2018-07-17 Thread Farley, Peter x23353
Indeed, that is true.  And it is even possible (and not terribly hard) to 
automate a process to "massage" the CDSECT output to make it far more palatable 
and sensible (e.g., define known address variables as A or AD as needed, add 
__PTR32 or __PTR64 where needed, and even fix "bugs" in the (mis-)definitions).

Peter

-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU] On 
Behalf Of Charles Mills
Sent: Tuesday, July 17, 2018 6:34 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

EDCDSECT, sometimes called just CDSECT, a part of the XLC compiler, does a very 
adequate job of converting assembler DSECTs, including from z/OS macros, to C 
headers. Are they pretty? No. Do they "make sense"? Oftentimes not. Are they 
ideal? No. But they are syntactically correct and 99% of the time the storage 
layout is correct, and they do the job.

Charles


-Original Message-
From: IBM Mainframe Assembler List [mailto:ASSEMBLER-LIST@LISTSERV.UGA.EDU] On 
Behalf Of Ze'ev Atlas
Sent: Tuesday, July 17, 2018 3:16 PM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: New Metal C standalone product for z/OS

Actually, I would say it is the other way around.  It is relatively easy to 
create a set of structurea that resemble the control blocks and traverse 
around, providing that IBM create the appropriate header files and maintain 
them (most of us are capable of translating the macros to C headers, but 
maintence would be a nigtmare.)OTH, I won't be comfortable relying on some home 
grown assembler code.  I think that if IBM true to the stated goal they should 
supply a small set of key liw level system callsZA

Sent from Yahoo Mail on Android 
 
  On Tue, Jul 17, 2018 at 1:27 PM, Paul 
Gilmartin<0014e0e4a59b-dmarc-requ...@listserv.uga.edu> wrote:   On 
2018-07-17, at 10:45:20, John McKown wrote:
> 
> http://www-01.ibm.com/common/ssi/ShowDoc.wss?docURL=/common/ssi/rep_ca/6/897/ENUS218-326/index.html⟨=en_locale=en
> ...
> Enterprise Metal C for z/OS is the newest, stand-alone offering for the IBM
> family of development tools. Enterprise Metal C for z/OS delivers a
> high-level language alternative to having to write programs in High Level
> Assembler (HLASM). The ability to write programs in HLASM is a specialized
> skill for the z/OS platform and developers with expertise in assembler
> skills are difficult to find. Developers can use C syntax instead to
> develop systems programs. This eliminates the need to manage the use of
> registers and to manually tune assembler instruction sequences. Enterprise
> Metal C for z/OS does this for developers.
>  
What about availability of equivalent of macros for SVC and PC interfaces
and control block mapping?  Embedded assembler code might suffice for
SVC and PC; it's less comfortable to rely on embedded assembler to access
control block fields.

IBM made a serious mistake in not making PL/S a product a half-century ago.

--


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.


Re: New Metal C standalone product for z/OS

2018-07-17 Thread Paul Gilmartin
On 2018-07-17, at 16:33:55, Charles Mills wrote:

> EDCDSECT, sometimes called just CDSECT, a part of the XLC compiler, does a 
> very adequate job of converting assembler DSECTs, including from z/OS macros, 
> to C headers. Are they pretty? No. Do they "make sense"? Oftentimes not. Are 
> they ideal? No. But they are syntactically correct and 99% of the time the 
> storage layout is correct, and they do the job.
>  
I understand that nowadays new CSECTs are coded in PL/S and translated
automatically into assembler.  PL/S to C might be a better fit tnan
assembler to C.

There have been cases where syntax errors percolated into assembler;
only the PL/S is tested by IBM.

-- gil


Re: New Metal C standalone product for z/OS

2018-07-17 Thread Ze'ev Atlas
Actually, I would say it is the other way around.  It is relatively easy to 
create a set of structurea that resemble the control blocks and traverse 
around, providing that IBM create the appropriate header files and maintain 
them (most of us are capable of translating the macros to C headers, but 
maintence would be a nigtmare.)OTH, I won't be comfortable relying on some home 
grown assembler code.  I think that if IBM true to the stated goal they should 
supply a small set of key liw level system callsZA

Sent from Yahoo Mail on Android 
 
  On Tue, Jul 17, 2018 at 1:27 PM, Paul 
Gilmartin<0014e0e4a59b-dmarc-requ...@listserv.uga.edu> wrote:   On 
2018-07-17, at 10:45:20, John McKown wrote:
> 
> http://www-01.ibm.com/common/ssi/ShowDoc.wss?docURL=/common/ssi/rep_ca/6/897/ENUS218-326/index.html⟨=en_locale=en
> ...
> Enterprise Metal C for z/OS is the newest, stand-alone offering for the IBM
> family of development tools. Enterprise Metal C for z/OS delivers a
> high-level language alternative to having to write programs in High Level
> Assembler (HLASM). The ability to write programs in HLASM is a specialized
> skill for the z/OS platform and developers with expertise in assembler
> skills are difficult to find. Developers can use C syntax instead to
> develop systems programs. This eliminates the need to manage the use of
> registers and to manually tune assembler instruction sequences. Enterprise
> Metal C for z/OS does this for developers.
>  
What about availability of equivalent of macros for SVC and PC interfaces
and control block mapping?  Embedded assembler code might suffice for
SVC and PC; it's less comfortable to rely on embedded assembler to access
control block fields.

IBM made a serious mistake in not making PL/S a product a half-century ago.

-- gil  


Re: New Metal C standalone product for z/OS

2018-07-17 Thread John McKown
On Tue, Jul 17, 2018 at 12:40 PM Gord Tomlin <
gt.ibm.li...@actionsoftware.com> wrote:

> On 2018-07-17 12:45, John McKown wrote:
> I don't see anything in the announcement that suggests any new
> functionality has been added to Metal C.
>

​I think that the main push is that Metal C can be ordered as a stand alone
product, separate from XLC. I would hope at a substantially reduced price.​



>
> --
>
> --
>
> 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/
>


-- 
There is no such thing as the Cloud. It is just somebody else’s computer.

Maranatha! <><
John McKown


Re: New Metal C standalone product for z/OS

2018-07-17 Thread Gord Tomlin

On 2018-07-17 12:45, John McKown wrote:

Looks like IBM is really trying to eliminate HLASM programming in the user
community. Or, perhaps, extend the community to include C "systems"
programmers (like with a UNIX background).

http://www-01.ibm.com/common/ssi/ShowDoc.wss?docURL=/common/ssi/rep_ca/6/897/ENUS218-326/index.html=en_locale=en

IBM Enterprise Metal C for z/OS Trial, V3.1 is an evaluation release of the
Enterprise Metal C for z/OS, V3.1 product that is available with a 90-day
evaluation license at no charge for non-production use. It is available
from IBM Shopz.

Enterprise Metal C for z/OS is the newest, stand-alone offering for the IBM
family of development tools. Enterprise Metal C for z/OS delivers a
high-level language alternative to having to write programs in High Level
Assembler (HLASM). The ability to write programs in HLASM is a specialized
skill for the z/OS platform and developers with expertise in assembler
skills are difficult to find. Developers can use C syntax instead to
develop systems programs. This eliminates the need to manage the use of
registers and to manually tune assembler instruction sequences. Enterprise
Metal C for z/OS does this for developers.

Enterprise Metal C for z/OS allows developers to create high-performing,
low-level, free-standing applications. The generated optimized HLASM source
code is independent of the Language Environment runtime, and the C runtime
is not required for execution. The resulting programs seamlessly integrate
with the HLASM code base to provide direct access to z/OS System Services.

Enterprise Metal C for z/OS takes advantage of IBM optimization technology
to generate high-performance, optimized code. Develop applications with
Enterprise Metal C once, and then recompile to optimize for future
advancements of IBM z/Architecture® systems.


I don't see anything in the announcement that suggests any new 
functionality has been added to Metal C.


--

--

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/


Re: New Metal C standalone product for z/OS

2018-07-17 Thread Paul Gilmartin
On 2018-07-17, at 10:45:20, John McKown wrote:
> 
> http://www-01.ibm.com/common/ssi/ShowDoc.wss?docURL=/common/ssi/rep_ca/6/897/ENUS218-326/index.html=en_locale=en
> ...
> Enterprise Metal C for z/OS is the newest, stand-alone offering for the IBM
> family of development tools. Enterprise Metal C for z/OS delivers a
> high-level language alternative to having to write programs in High Level
> Assembler (HLASM). The ability to write programs in HLASM is a specialized
> skill for the z/OS platform and developers with expertise in assembler
> skills are difficult to find. Developers can use C syntax instead to
> develop systems programs. This eliminates the need to manage the use of
> registers and to manually tune assembler instruction sequences. Enterprise
> Metal C for z/OS does this for developers.
>  
What about availability of equivalent of macros for SVC and PC interfaces
and control block mapping?  Embedded assembler code might suffice for
SVC and PC; it's less comfortable to rely on embedded assembler to access
control block fields.

IBM made a serious mistake in not making PL/S a product a half-century ago.

-- gil