Paul Gilmartin wrote:
 
| This is a joke, right?
 
It is not a joke.  My suggestion was carefully qualified. In what I called a 
fill-in-the-blanks situation the scheme I proposed it is eminently feasible.
 
Consider the skeletal macro
 
|         macro
|         EDITLITK &literal=,                                                   
                 *
|                   &outGBLCid=
| . . . 
|         mexit
|         mend

Was the parameter supplied?  The statements
 
|&in      setb    (t'&literal ne 'O')                 --value supplied?
|           aif       (&in).literal_in                    --if so, examine 
itabort setb 1                                        --|&abort setb 1          
                               --no, set quit switch
|         mnote . . .
|         ago     .after_literal
|.literal_in anop
|&kl      seta    k'&literal                            --get byte count
| . . .
|&id_ok setb   ISSYM(&outGBLCid)
|           aif     (&id_ok).id_ok                     --if so, ok
|&abort  setb  1                                        --no, set quit switch
|           mnote . . . 
|            ago    .after_outGBLCid
|.id_ok   anop
|            gblc  &(&outGBLCid)
| . . . 
| . . .
|&lit       setc  '&literal'                              --make editable copy 
of input
| . . . 
| . . .
| . . .
|&(&outGBLCid) setc '&lit'                          --externalize edited value
|            mexit
|            mend               
 
In such an exercise the data type of the value of &parameter can be determined, 
often now using BIFs like ISBIN, ISDEC, ISHEX, even ISSYM, or in extenso using 
one's own trivial service macros.
 
It can then be altered by padding it, as others have suggested; or again an 
additional innocuous literal having a complementary length can be added to the 
literal pool following it.  (I forbear to demonstrate how this can be done, but 
I suspect that here again I should perhaps "string things out for the 
delectation of . . . ".) 
 
Such schemes permit 'customers'  to continue to use literals.  They even permit 
marginal or dubious literals to be edited or repaired.  They are workaday 
facilities for those of us who have elected to master the the facilities of the 
macro language and to use them effectively.
 
This is as good a place as any to deal with Paul Gilmartin's (not, I hope, very 
serious) sally about such constructs as

|paul     DC  0CL4'Paul'
 
In it neither the 0 repetition factor nor the explicit byte length 4 determines 
the alignment of paul.  The data-type specifier, C here, does that.
 
Moreover, in exactly the tenuous but not spurious sense in which 0 is a 
multiple of 16 it is also a multiple of 1, 2, 4, 8, and indeed any integer.  
Division by zero is in fact interdicted for just this reason.  
 
For the benefit of those who need such guidance I will in future mark any 
jocular technical suggestions I make here with the delimiters
 
|<technical joke begins>
| . . . 
|<technical joke ends> 
 
 I promise to be parsimonious in my use of them.  My contributions here are 
anyway not usually jocular.  They are typically informed by the bleak 
perception that a significant fraction of the problems raised here are 
pseudo-problems, artefacts of radical if perhaps excusable ignorance.
 
Let me very much more specific about this.  The HLASM is imperfect.  There are 
many ways in which it could be improved or extended.  That said, it is also a 
powerful and expressive vehicle.  Too many contributors here are too ready to 
impute their own inadequacies to it: Extend it please, in this or that ad hoc 
way, so that my problem of the moment will go away.  
 
They would usually do much better to explore how the facilities it already 
makes available can be used to address that problem. 

John Gilmore Ashland, MA 01721-1817 USA




                                          

Reply via email to