On Wed, 13 Jul 2005 10:30:45 +1000, Shane Ginnane <[EMAIL PROTECTED]>
wrote:
>Roland (of all people !!!) had an issue with non-displayable chars causing
>a screen erasure.
>So to avoid similar problems, maybe you'd like to use the following instead
>- thanks again to Mark for the function, which was unashamedly stolen from
>IPLINFO.
>
>Shane ...
>
>/* REXX */
>NUMERIC DIGITS 16 /* handle big addresses */
>CVT = C2d(Storage(10,4)) /* point to CVT */
>ECVT = C2d(Storage(D2x(CVT + 140),4)) /* point to CVTECVT */
>CTBL = C2d(Storage(D2x(ECVT + 204),4)) /* pt to Cust anchor tbl*/
>say '*** Customer Anchor Table listing - used slots ***'
>say '*** note: slots are counted from 1 to correlate with ShowzOS ***'
>say
> Do I = 0 to 1023
> ptr = (CTBL + (4*I))
> TST = C2d(Storage(D2x(ptr),4))
> If (TST <> '0') then do
> isvcode = storage(D2x(TST),32)
> call XLATE_NONDISP isvcode
> isvcode = RESULT
> /* remove the +1 from the following to use zero based slot counting */
> say 'Slot: 'I+1' ISV text: ' isvcode
> end
> End
>exit
>
>XLATE_NONDISP: /* translate non-display characters to a "." */
>Arg XLATEPRM
>XLATELEN = Length(XLATEPRM) /* length of parm passed to routine */
>Do J = 1 to XLATELEN /* check each byte for non-display chars */
> If Substr(XLATEPRM,J,1) < '40'x then , /* and replace each char */
> XLATEPRM = OVERLAY('.',XLATEPRM,I) /* that is non-displayable */
>End /* with a period (.) */
>Return XLATEPRM
>
You left out a line of code (not sure why). x'FF' will also cause
problems.
XLATE_NONDISP: /* translate non-display characters to a "." */
Arg XLATEPRM
XLATELEN = Length(XLATEPRM) /* length of parm passed to routine */
Do I = 1 to XLATELEN /* check each byte for */
If Substr(XLATEPRM,I,1) < '40'x | , /* non-display characters */
Substr(XLATEPRM,I,1) = 'FF'x then , /* and replace each char */
XLATEPRM = OVERLAY('.',XLATEPRM,I) /* that is non-displayable */
End /* with a period (.) */
Return XLATEPRM
I think x'00' is valid also but I never change IPLINFO. If you
check the archives I think STK ..er SUN Paul (AKA gil) gave me
this alternative once:
XLATE_NONDISP: /* translate non-display characters to a "." */
Return(translate( arg(1), left('',64,'.') xrange('40'x,'FF'x), ,
xrange('00'x,'FF'x) ) )
Mark
--
Mark Zelden
Sr. Software and Systems Architect
Zurich North America and Farmers Insurance Group
mailto: [EMAIL PROTECTED]
Systems Programming expert at http://Search390.com/ateExperts/
Mark's MVS Utilities: http://home.flash.net/~mzelden/mvsutil.html
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html