|
There is not a straight forward replacement in free-format for the Z-ADD
opcode. An example of this is splitting a dollar amount into the whole
dollar value and the cents value and storing them as separate fields.
The following example shows just how simple it is in [old] fixed-column
RPG:
D DLRAMT S 10s 2 Inz(876.54)
D DOLLARS S 4p 0
D CENTS S 2p 2
C Z-ADD DLRAMT DOLLARS
C Z-ADD DLRAMT CENTS
Now, DOLLARS contains the value 876, and CENTS contains the value .54.
That was easy because Z-ADD opcode does not throw errors when the receiver
is too small to hold the full result. Instead, it truncates in a way that
RPG programmers have been able to exploit. Now so with EVAL.
Now for the [new] free-format RPGLE version.
dcl-s DLRAMT zoned(10:2) inz(876.54);
dcl-s DOLLARS packed(4);
dcl-s CENTS packed(2:2);
DOLLARS = %dec(dlrAmt:13:0);
CENTS = %dec(%subst(%editc(dlrAmt:'X'):9:2):2:0) / 100;
Again, DOLLARS = 876, and CENTS = .54.
That was easy, too ... sort of.
MOVE is worse. There are 18 different types of conversions for MOVE.
Stephen West
Software Engineer
Stillwater Insurance Group
12500 I Street, Suite 100 Omaha, NE 68137
W: (402)599-8325 | C(402)659-0452
Stephen.West@xxxxxxxxxxxxxxxxxxxxxxx
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.