TAA Tools
CLCLRGVAR       CALCULATE LARGE VARIABLE               TAACLUB

The Calculate Large Variable  command allows CL to work  with character
variables that  exceed 15 bytes in length and  contain up to 30 digits.
Simple  operations  of Add,  Sub, Multiply,  and Divide  are supported.
Any values  placed  in  the Factors  are  right  aligned.   The  return
result must  be specified  as *CHAR LEN(30)  and will be  right aligned
by  default with  leading blanks.   A return  value exists  for a minus
sign.

See also the EDTLRGVAR tool command.

Some system  functions  now  return  large  size  variables  containing
decimal  values that  exceed the  largest size  that CL  supports as  a
*DEC  type which is  15 digits.   CLCLRGVAR allows operations  on these
large variables.

Either or both  factors may contain  a leading or  trailing minus  sign
(but both  may not  be in  the same  factor).   CLCLRGVAR right  aligns
both factors.   Leading blanks  are treated as zeros  (including an all
blank  value).   No embedded  characters of  blank or minus  may exist.
No decimal  point  may exist.    The result  field can  hold  up to  30
digits.

A typical series of commands would be:

             DCL       &FACTOR1 *CHAR LEN(31)
             DCL       &FACTOR2 *CHAR LEN(31)
             DCL       &RESULT *CHAR LEN(30)
              .
             CHGVAR    &FACTOR1 nnn
             CHGVAR    &FACTOR2 nnn
             CLCLRGVAR OPER(*ADD) FACTOR1(&FACTOR1) FACTOR2(&FACTOR2)
                         RESULT(&RESULT)

The factor values  would be right adjusted and  ensured to contain only
valid  digits.  A leading  or trailing minus would  indicate a negative
value.

If a negative result exists, the SIGN return variable will be '-'.

If OPER(*DIV)  is  used,  the  optional  return  variable  REMNDR  will
contain the remainder.

Factor examples (b = blank)
---------------------------

             Valid             Invalid      Invalid reason
             -----             -------      --------------

            3bbbbb              2b1         Embedded blank
           23-bbbb              2A3         Non digit
          -2323bbb              -2-         Multiple minus signs
                 4              -bb23       Embedded blanks
                4-              1.23        Decimal point
             bbbbb              000-4       Embedded minus
                                    -       Only a minus sign

Decimal overflow
----------------

No check is  made for a decimal  overflow.  If it  occurs, the overflow
is  truncated.   You must  ensure that  your values  will not  cause an
overflow.

CLCLRGVAR escape messages you can monitor for
---------------------------------------------

      TAA9891    An attempt to divide by 0

Escape messages from based on functions will be re-sent.

CLCLRGVAR Command parameters                          *CMD
----------------------------

   OPER          The operation to be performed.

                   *ADD     Adds Factor 1 to Factor 2
                   *SUB     Subtracts Factor 2 from Factor 1
                   *MULT    Multiplies Factor 1 by Factor 2
                   *DIV     Divides Factor 1 by Factor 2
                              See optional REMNDR parameter also

   FACTOR1       The Factor  1 value.   It  must be  declared as  *CHAR
                 LEN(31), but cannot  contain more than 30 digits.   It
                 may  contain leading or  trailing blanks or  a leading
                 or  trailing minus sign.   The value  is right aligned
                 before performing any  calculations.  Embedded  blanks
                 are not valid nor is a decimal notation.

   FACTOR2       The  Factor 2  value.   It must  be declared  as *CHAR
                 LEN(31),  but cannot contain more than  30 digits.  It
                 may contain leading  or trailing  blanks or a  leading
                 or trailing  minus sign.   The value is  right aligned
                 before  performing any calculations.   Embedded blanks
                 are not valid nor is a decimal notation.

   RESULT        The Result of  the calculation.   This  is a  required
                 return  variable  that  must  be   declared  as  *CHAR
                 LEN(30).     The  value  will  be   right  aligned  by
                 default,  preceded by leading  blanks, and will always
                 be positive.   Negative  values are  indicated in  the
                 SIGN  return parameter.   If the  result is  zero, one
                 zero will be returned.

   ALIGNRES      Whether  to align the  result to the left  or right in
                 the RESULT  return variable.   *RIGHT  is the  default
                 to align  to the  right.   *LEFT may  be specified  to
                 align to the left.

   SIGN          An  optional  return variable  that  will  contain the
                 sign  of  the  result  (and  the  remainder  if  any).
                 Either  blank  (plus)   or  '-'  for  minus   will  be
                 returned.     If  specified,  the   variable  must  be
                 declared as *CHAR LEN(1).

   REMNDR        An  optional  return  variable that  will  contain the
                 remainder if  OPER(*DIV)  is used.    If the  OPER  is
                 other  than  *DIV,  blanks   will  be  returned.    If
                 specified,  the  variable must  be  declared  as *CHAR
                 LEN(30).

                 The value is  right aligned with  leading blanks.   If
                 a divide  produces a 0 remainder,  a single 0  will be
                 returned right adjusted.

                 Note  that the  value will  always be  plus.   Use the
                 SIGN return variable to determine the true sign.


Restrictions
------------

Because CLCLRGVAR returns  values, the command  may only be  used in  a
CL like program.

No check is  made for a decimal overflow.   If it occurs,  the overflow
is  truncated.   You must  ensure that  your values  will not  cause an
overflow.

Prerequisites
-------------

The following TAA Tools must be on your system:

     ADJVAR          Adjust variable
     SNDESCINF       Send escape information
     SNDESCMSG       Send escape message

Implementation
--------------

None, the tool is ready to use.

Objects used by the tool
------------------------

   Object        Type    Attribute      Src member    Src file
   ------        ----    ---------      ----------    ----------

   CLCLRGVAR     *CMD                   TAACLUB       QATTCMD
   TAACLUBC      *PGM       CLP         TAACLUBC      QATTCL
   TAACLUBR      *PGM       RPG         TAACLUBR      QATTCL
					

Added to TAA Productivity tools January 15, 2013


Home Page Up to Top