IDENTIFICATION DIVISION.
*
PROGRAM-ID. DOLLARS.
*
DATE-WRITTEN. 05/27/96.
*
* *******************************
* * *
* * Judson D. McClendon *
* * Sun Valley Systems *
* * 329 37th Court N.E. *
* * Birmingham, AL 35215 *
* * 205-853-8440 *
* * *
* *******************************
*
ENVIRONMENT DIVISION.
*
CONFIGURATION SECTION.
*
INPUT-OUTPUT SECTION.
*
FILE-CONTROL.
*
*
I-O-CONTROL.
*
DATA DIVISION.
*
FILE SECTION.
*
*
WORKING-STORAGE SECTION.
*
77 WS-AMOUNT PIC S9(15)V9(02) COMP VALUE 0.
*
*
*
******************************************************************
* *
* M O N E Y W O R K A R E A *
* *
******************************************************************
*
01 MONEY-WORK-AREA.
03 MW-AMOUNT PIC 9(15)V9(02).
03 MW-AMOUNT-R REDEFINES MW-AMOUNT.
05 MW-AMOUNT-DOLLARS PIC 9(15).
05 MW-AMOUNT-DOLLARS-R REDEFINES MW-AMOUNT-DOLLARS.
07 MW-AMOUNT-TRILLIONS PIC 9(03).
07 MW-AMOUNT-BILLIONS PIC 9(03).
07 MW-AMOUNT-MILLIONS PIC 9(03).
07 MW-AMOUNT-THOUSANDS PIC 9(03).
07 MW-AMOUNT-ONES PIC 9(03).
05 MW-AMOUNT-CENTS PIC 9(02).
*
03 MW-WORK PIC 9(03).
03 MW-WORK-R1 REDEFINES MW-WORK.
05 MW-WORK-HUNDREDS PIC 9(01).
05 MW-WORK-TENS PIC 9(01).
05 MW-WORK-ONES PIC 9(01).
03 MW-WORK-R2 REDEFINES MW-WORK.
05 FILLER PIC 9(01).
05 MW-WORK-TEENS PIC 9(02).
*
78 MW-MCLIM VALUE 50.
03 MW-MONEY.
05 MW-MONEY-CHAR PIC X(01)
OCCURS MW-MCLIM TIMES.
03 MW-MCX PIC 9(02) COMP VALUE 0.
*
78 MW-MLLIM VALUE 6.
03 MW-MONEY-LINES.
* 05 MW-MONEY-LINE PIC X(MW-MCLIM)
05 MW-MONEY-LINE PIC X(50)
OCCURS MW-MLLIM TIMES.
03 MW-MLX PIC 9(02) COMP VALUE 0.
*
03 MW-WORD-TEXT.
05 MW-WORD-SIZE PIC 9(01).
05 MW-WORD.
07 MW-WORD-CHAR PIC X(01)
OCCURS 9 TIMES.
03 MW-WCX PIC 9(02) COMP VALUE 0.
*
03 MW-IX1 PIC 9(02) COMP VALUE 0.
03 MW-IX2 PIC 9(02) COMP VALUE 0.
*
*
03 MW-ONES-VALUES.
05 FILLER PIC X(10) VALUE "3ONE ".
05 FILLER PIC X(10) VALUE "3TWO ".
05 FILLER PIC X(10) VALUE "5THREE ".
05 FILLER PIC X(10) VALUE "4FOUR ".
05 FILLER PIC X(10) VALUE "4FIVE ".
05 FILLER PIC X(10) VALUE "3SIX ".
05 FILLER PIC X(10) VALUE "5SEVEN ".
05 FILLER PIC X(10) VALUE "5EIGHT ".
05 FILLER PIC X(10) VALUE "4NINE ".
05 FILLER PIC X(10) VALUE "3TEN ".
05 FILLER PIC X(10) VALUE "6ELEVEN ".
05 FILLER PIC X(10) VALUE "6TWELVE ".
05 FILLER PIC X(10) VALUE "8THIRTEEN ".
05 FILLER PIC X(10) VALUE "8FOURTEEN ".
05 FILLER PIC X(10) VALUE "7FIFTEEN ".
05 FILLER PIC X(10) VALUE "7SIXTEEN ".
05 FILLER PIC X(10) VALUE "9SEVENTEEN".
05 FILLER PIC X(10) VALUE "8EIGHTEEN ".
05 FILLER PIC X(10) VALUE "8NINETEEN ".
*
03 MW-ONES-VALUE REDEFINES MW-ONES-VALUES
PIC X(10)
OCCURS 19 TIMES.
*
*
03 MW-TENS-VALUES.
05 FILLER PIC X(08) VALUE "3TEN ".
05 FILLER PIC X(08) VALUE "6TWENTY ".
05 FILLER PIC X(08) VALUE "6THIRTY ".
05 FILLER PIC X(08) VALUE "5FORTY ".
05 FILLER PIC X(08) VALUE "5FIFTY ".
05 FILLER PIC X(08) VALUE "5SIXTY ".
05 FILLER PIC X(08) VALUE "7SEVENTY".
05 FILLER PIC X(08) VALUE "6EIGHTY ".
05 FILLER PIC X(08) VALUE "6NINETY ".
*
03 MW-TENS-VALUE REDEFINES MW-TENS-VALUES
PIC X(08)
OCCURS 9 TIMES.
*
PROCEDURE DIVISION.
*
000000-CONTROL.
*
DISPLAY " ".
*
PERFORM 000100-PROCESS
THRU 000100-EXIT.
*
000000-EXIT.
STOP RUN.
*
*
* P R O C E S S
*
000100-PROCESS.
*
DISPLAY "C O N V E R T E D D O L L A R A M O U N T"
AT LINE 1 COL 1
WITH ERASE EOS.
DISPLAY MW-MONEY-LINE(1)
AT LINE 3 COL 1.
DISPLAY MW-MONEY-LINE(2)
AT LINE 4 COL 1.
DISPLAY MW-MONEY-LINE(3)
AT LINE 5 COL 1.
DISPLAY MW-MONEY-LINE(4)
AT LINE 6 COL 1.
DISPLAY MW-MONEY-LINE(5)
AT LINE 7 COL 1.
DISPLAY MW-MONEY-LINE(6)
AT LINE 8 COL 1.
*
DISPLAY "Enter up to tttbbbmmmtttooo.cc (< 0 to exit): "
AT LINE 10 COL 1.
*
MOVE ZERO TO WS-AMOUNT.
ACCEPT WS-AMOUNT.
IF (WS-AMOUNT < 0)
GO TO 000100-EXIT.
*
MOVE WS-AMOUNT TO MW-AMOUNT.
PERFORM 001000-MONEY
THRU 001000-EXIT.
*
GO TO 000100-PROCESS.
*
000100-EXIT.
EXIT.
*
*
*
******************************************************************
* *
* M O N E Y *
* *
* *
* CONVERTS A NUMERIC MONEY AMOUNT INTO ONE OR MORE TEXT *
* LINES FOR PRINTING ON CHECKS FOR SECURITY. AMOUNTS UP *
* TO $999,999,999,999,999.99 CAN BE CONVERTED. *
* *
* USAGE: MOVE <AMOUNT> TO MW-AMOUNT. *
* PERFORM 001000-MONEY *
* THRU 001000-EXIT. *
* *
* RESULT: MW-MONEY-LINES = TEXT AMOUNT CENTERED ON EACH LINE *
* *
******************************************************************
*
001000-MONEY.
*
MOVE SPACES TO MW-MONEY.
MOVE 1 TO MW-MCX.
MOVE SPACES TO MW-MONEY-LINES.
MOVE 1 TO MW-MLX.
*
IF (MW-AMOUNT-TRILLIONS NOT ZERO)
MOVE MW-AMOUNT-TRILLIONS TO MW-WORK
PERFORM 001100-THREE-DIGITS
THRU 001100-EXIT
MOVE "8TRILLION" TO MW-WORD-TEXT
PERFORM 001400-MOVE-WORD
THRU 001400-EXIT.
*
IF (MW-AMOUNT-BILLIONS NOT ZERO)
MOVE MW-AMOUNT-BILLIONS TO MW-WORK
PERFORM 001100-THREE-DIGITS
THRU 001100-EXIT
MOVE "7BILLION" TO MW-WORD-TEXT
PERFORM 001400-MOVE-WORD
THRU 001400-EXIT.
*
IF (MW-AMOUNT-MILLIONS NOT ZERO)
MOVE MW-AMOUNT-MILLIONS TO MW-WORK
PERFORM 001100-THREE-DIGITS
THRU 001100-EXIT
MOVE "7MILLION" TO MW-WORD-TEXT
PERFORM 001400-MOVE-WORD
THRU 001400-EXIT.
*
IF (MW-AMOUNT-THOUSANDS NOT ZERO)
MOVE MW-AMOUNT-THOUSANDS TO MW-WORK
PERFORM 001100-THREE-DIGITS
THRU 001100-EXIT
MOVE "8THOUSAND" TO MW-WORD-TEXT
PERFORM 001400-MOVE-WORD
THRU 001400-EXIT.
*
IF (MW-AMOUNT-ONES NOT ZERO)
MOVE MW-AMOUNT-ONES TO MW-WORK
PERFORM 001100-THREE-DIGITS
THRU 001100-EXIT.
*
IF (MW-AMOUNT-DOLLARS ZERO)
MOVE "2NO" TO MW-WORD-TEXT
PERFORM 001400-MOVE-WORD
THRU 001400-EXIT.
*
IF (MW-AMOUNT-DOLLARS = 1)
MOVE "6DOLLAR" TO MW-WORD-TEXT
ELSE
MOVE "7DOLLARS" TO MW-WORD-TEXT.
PERFORM 001400-MOVE-WORD
THRU 001400-EXIT.
*
MOVE "3AND" TO MW-WORD-TEXT.
PERFORM 001400-MOVE-WORD
THRU 001400-EXIT.
*
IF (MW-AMOUNT-CENTS = 0)
MOVE "2NO" TO MW-WORD-TEXT
PERFORM 001400-MOVE-WORD
THRU 001400-EXIT
ELSE
MOVE MW-AMOUNT-CENTS TO MW-WORK
PERFORM 001200-TWO-DIGITS
THRU 001200-EXIT.
*
IF (MW-AMOUNT-CENTS = 1)
MOVE "6CENT**" TO MW-WORD-TEXT
ELSE
MOVE "7CENTS**" TO MW-WORD-TEXT.
PERFORM 001400-MOVE-WORD
THRU 001400-EXIT.
*
COMPUTE MW-IX1 = (MW-MCLIM - MW-MCX) / 2 + 1 .
STRING MW-MONEY DELIMITED BY SIZE
INTO MW-MONEY-LINE(MW-MLX)
WITH POINTER MW-IX1.
*
001000-EXIT.
EXIT.
*
*
* C O N V E R T T H R E E D I G I T S
*
001100-THREE-DIGITS.
*
IF (MW-WORK-HUNDREDS > 0)
MOVE MW-ONES-VALUE(MW-WORK-HUNDREDS) TO MW-WORD-TEXT
PERFORM 001400-MOVE-WORD
THRU 001400-EXIT
MOVE "7HUNDRED" TO MW-WORD-TEXT
PERFORM 001400-MOVE-WORD
THRU 001400-EXIT.
*
PERFORM 001200-TWO-DIGITS
THRU 001200-EXIT.
*
001100-EXIT.
EXIT.
*
*
* C O N V E R T T W O D I G I T S
*
001200-TWO-DIGITS.
*
IF (MW-WORK-TEENS > 0)
IF (MW-WORK-TEENS < 20)
MOVE MW-ONES-VALUE(MW-WORK-TEENS) TO MW-WORD-TEXT
PERFORM 001400-MOVE-WORD
THRU 001400-EXIT
ELSE
PERFORM 001300-TENS-ONES
THRU 001300-EXIT.
*
001200-EXIT.
EXIT.
*
*
* C O N V E R T T E N S / O N E S
*
001300-TENS-ONES.
*
IF (MW-WORK-TENS > 0)
MOVE MW-TENS-VALUE(MW-WORK-TENS) TO MW-WORD-TEXT
PERFORM 001400-MOVE-WORD
THRU 001400-EXIT.
*
IF (MW-WORK-ONES > 0)
MOVE MW-ONES-VALUE(MW-WORK-ONES) TO MW-WORD-TEXT
PERFORM 001400-MOVE-WORD
THRU 001400-EXIT.
*
001300-EXIT.
EXIT.
*
*
* M O V E I N N E W W O R D
*
001400-MOVE-WORD.
*
COMPUTE MW-IX2 = MW-MCX + MW-WORD-SIZE + 3 .
IF (MW-IX2 > MW-MCLIM)
STRING "**" DELIMITED BY SIZE
INTO MW-MONEY
WITH POINTER MW-MCX
COMPUTE MW-IX1 = (MW-MCLIM - MW-MCX) / 2 + 1
STRING MW-MONEY DELIMITED BY SIZE
INTO MW-MONEY-LINE(MW-MLX)
WITH POINTER MW-IX1
ADD 1 TO MW-MLX
MOVE SPACES TO MW-MONEY
MOVE 1 TO MW-MCX.
*
IF (MW-MCX = 1)
STRING "**" DELIMITED BY SIZE
INTO MW-MONEY POINTER MW-MCX
ELSE
ADD 1 TO MW-MCX.
*
STRING MW-WORD DELIMITED BY SPACE
INTO MW-MONEY
WITH POINTER MW-MCX.
*
001400-EXIT.
EXIT.
[ Dauer der Verarbeitung: 0.4 Sekunden
(vorverarbeitet)
]
|