Compiler Library/XL Reference Manual (32650-90029)

4-: 18
SYSTEM INTRINSIC HPPACADDD, HPPACCVAD, HPPACCVBD, HPPACCVDA
INTEGER*2 ZERO
INTEGER YEAR
CHARACTER*15 YEARLY (1977:1979) ! 15-digit numbers in ASCII
CHARACTER*15 ASCII_SUM
CHARACTER*8 PACKED_SUM ! 8-character field holds
CHARACTER*8 PACKED_TEMP ! 15 digits and sign
DATA YEARLY/ ! Annual appropriations, in cents
1 '046655980996406',
2 '050778229148999',
3 '056396083378825'/
DATA ZERO/0/
CALL HPPACCVBD (PACKED_SUM, 15, ! Initialize sum
> ZERO, 1)
DO YEAR = 1977, 1979
PRINT *, YEAR, ' ', YEARLY (YEAR) ! Echo annual data
CALL HPPACCVAD (PACKED_TEMP, 15, ! Convert ASCII to decimal
> YEARLY (YEAR), 15)
CALL HPPACADDD (PACKED_SUM, 15, ! Add to sum
> PACKED_TEMP, 15)
END DO
CALL HPPACCVDA (ASCII_SUM, 15, ! Convert sum to ASCII,
> PACKED_SUM, 1) ! suppressing plus sign
PRINT *, 'Total ', ASCII_SUM
STOP
END
SPL/V Example
<<
* This program calculates total appropriations by the
* United States federal government for the years 1977-1979
>>
BEGIN
BYTE ARRAY YEARLY (0:44) := << Annual appropriations, in cents >>
"046655980996406",
"050778229148999",
"056396083378825";
INTEGER ZERO:=0, YEAR;
BYTE ARRAY PACKED'SUM (0:7); << 8-character field holds >>
BYTE ARRAY PACKED'TEMP (0:7); << 15 digits and sign >>
BYTE ARRAY ASCII'SUM (0:14); << 15-digit number in ASCII >>
ARRAY PRINT'BUFFER'W (0:10);
BYTE ARRAY PRINT'BUFFER'B (*) = PRINT'BUFFER'W;
INTRINSIC ASCII, PRINT;
<< Initialize sum >>
TOS := @PACKED'SUM; TOS := 15;
TOS := @ZERO; TOS := 1;
ASSEMBLE (CVBD);
FOR YEAR := 1977 UNTIL 1979 DO
BEGIN
<< Echo annual data >>