Calculating a Remainder in CL

Article ID: 18508

Q: Does CL have an equivalent of RPG's MVR op-code?

A: I'm not aware of an equivalent to MVR in CL, but don't let that stop you! You can calculate a remainder with multiplication and subtraction, as shown in this sample program:

PGM

   DCL VAR(&A)      TYPE(*DEC) LEN(2 0) VALUE(25)
   DCL VAR(&B)      TYPE(*DEC) LEN(2 0) VALUE(7)
   DCL VAR(&RESULT) TYPE(*DEC) LEN(2 0)
   DCL VAR(&WORK)   TYPE(*DEC) LEN(2 0)
   DCL VAR(&REM)    TYPE(*DEC) LEN(2 0)
   DCL VAR(&CHAR1)  TYPE(*CHAR) LEN(2)
   DCL VAR(&CHAR2)  TYPE(*CHAR) LEN(2)

   CHGVAR VAR(&RESULT) VALUE(&A / &B)

   CHGVAR VAR(&WORK) VALUE(&RESULT * &B)
   CHGVAR VAR(&REM)  VALUE(&A - &WORK)

   CHGVAR VAR(&CHAR1) VALUE(&RESULT)
   CHGVAR VAR(&CHAR2) VALUE(&REM)

   SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) +
             MSGDTA('25 / 7 IS' *BCAT &CHAR1 *BCAT 'WITH A +
             REMAINDER OF' *BCAT &CHAR2) +
             TOPGMQ(*PRV) MSGTYPE(*COMP)
ENDPGM

ProVIP Sponsors

ProVIP Sponsors