MainframeSupports
tip week 31/2007:

Some years ago I had a calculator in my palmtop computer which was able to perform calculations in hex. Then my palmtop broke down and I bought a new one which turned out to have a calculator without hex calculations. Then I invented the program presented in this tip and now I do not use external calculators any more.

My idea is to exploit all the many functions implemented in REXX. Especially REXX has a lot of functions for conversions. And REXX can perform ordinary calculations as well. The only thing missing now is the easiest possible way to translate an expression into a result. I call the following REXX for SAY because it SAYs the result of any REXX expression not only a limited subset:

/* REXX */
ARG EXPRESSION
INTERPRET 'X = ' !! EXPRESSION
CALL ISPF_MESSAGE 'X = ' !! X, 'THE RESULT IS ' !! X
EXIT
ISPF_MESSAGE:
  PARSE ARG ZERRSM, ZERRLM
  ZERRALRM = 'YES'
  ZERRHM = '*'
  ADDRESS ISPEXEC "SETMSG MSG(ISRZ002)"
RETURN

The trick is to use the REXX statement INTERPRET which performs the result of the expression after keyword INTERPRET as a REXX statement. If I want to know what the hexadecimal value of ABCD is in decimal I simply execute the command TSO SAY X2D(ABCD) and the result is presented to me in the upper right corner of my ISPF screen. I can also perform calculations like 720*1348 or 27998%80*80. By the way % in REXX performs integer division.

You can execute SAY using any valid REXX expression which may be stored in X. If your input is a nonvalid REXX expression unable to be stored in X the REXX will fail miserably. If you are a clever REXX progammer you know how to trap the error from INTERPRET and return an error message explaining the situation, but I get along fine without.

Previous tip in english        Sidste danske tip        Tip list