Jon's suggestion of using the DCLEN built-in seems the way to go, maybe 
together with the DEQUOTE built-in.

Quick test:
Stmt   Source Statement                            
   1 T        CSect                                
   2          using t,15                           
   4          Macro                                
   5          testk &t                             
   6 &l       seta  dclen('&t')                    
   7          mnote *,'len=&l'                     
   8          mend                                 
  10          testk 'Testing an unquoted string'   
  11+*,len=28                                      
  13          testk 'Testing a ''quoted'' string'  
  14+*,len=27                                      
  16          testk  Testing_a_non_en_closed_string
  17+*,len=30                                      
  19          end                                  

Willy 


-----Oprindelig meddelelse-----
Fra: IBM Mainframe Assembler List <[email protected]> På vegne af 
Jon Perryman
Sendt: 10. juni 2024 07:36
Til: [email protected]
Emne: Re: Count attribute (K’)

On Sun, 9 Jun 2024 17:29:22 -0500, Janko Kalinic <[email protected]> 
wrote:

>   3 &NAME    M$TX  &TEXT

Handling of variables on the macro prototype statement is different than SETC. 
Quoting is one of the peculiarities. 

>   6 &NAME    DC    AL2(&A,0),C&TEXT
>  11+USFG81   DC    AL2(25,0),C'X''08'' PDSE DATA SET'

You know that &TEXT is not considered a quoted variable because C&TEXT retained 
the leading/trailing quotes instead of dropping them.

>   5 &A       SETA  K'&TEXT-2+4

Using K' is not an acceptable solution for this problem because the count does 
not always match the length of the constant. There are multiple solutions. If I 
remember correctly, you can use DCLEN(C&TEXT) but when dealing with less 
experienced programmers, I suggest using something like the following because 
your intentions are obvious in the listing & it guarantees you are not impacted 
by MACRO quirks.

&NAME    M$TX  &TEXT
&NAME    DC    AL2(&NAME._E-&NAME,0),C&TEXT
&NAME._E EQU *

Reply via email to