1       ! SPELL.BAS -- SUBROUTINE TO SPELL OUT AMOUNTS OF MONEY FOR CHECKS
10      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
11      !    A CONTRIBUTION TO THE ALPHA MICRO COMMUNITY FROM ONE OF    !
12      !     THE OLDEST SOURCES OF QUALITY CUSTOM SOFTWARE FOR THE     !
13      !        BEST MICROCOMPUTER ON THE MARKET - ALPHA MICRO!        !
14      !        BY: SOFTWARE SYSTEMS CONSULTING INCORPORATED           !
15      !            2701 SPRING GROVE AV, CINCINNATI, OH 45225         !
16      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
999     ! The following MAP statements must appear in the program
1000    MAP1    SPELL
1010            MAP3    SPL'AMT,B,5     !The amount to be spelled (*100)
1020            MAP3    SPL'ZRO,S,11
1030            MAP3    SPL'THR,S
1040                    MAP5    SPL'ONE,S,1
1050                    MAP5    SPL'TWO,S
1060                            MAP7    SPL'TEN,S,1
1070                            MAP7    SPL'UNT,S,1
1080            MAP3    SPL'OUT,S,134   !The resulting spelled out amount
1090            MAP3    SPL'UNIT(9),S,5
1100            MAP3    SPL'TENS(9),S,7
1110            MAP3    SPL'TEEN(9),S,9
1120            MAP3    SPL'ORD(4),S,8
9999    ! The following block of statements must be executed one time
10000 SPELL'INIT:
10010   FOR I=1 TO 9:READ SPL'UNIT(I),SPL'TENS(I),SPL'TEEN(I):NEXT I
10020   DATA "ONE","TEN","ELEVEN","TWO","TWENTY","TWELVE"
10030   DATA "THREE","THIRTY","THIRTEEN","FOUR","FORTY","FOURTEEN"
10040   DATA "FIVE","FIFTY","FIFTEEN","SIX","SIXTY","SIXTEEN"
10050   DATA "SEVEN","SEVENTY","SEVENTEEN","EIGHT","EIGHTY","EIGHTEEN"
10060   DATA "NINE","NINETY","NINETEEN"
10070   FOR I=1 TO 4:READ SPL'ORD(I):NEXT I
10080   DATA "MILLION","THOUSAND","DOLLARS","CENTS"
19000   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
19010   ! The MAP statements above and the SPELL'INIT code must !
19020   ! occur towards the front of your program.  To use this !
19030   ! subroutine you set SPL'AMT equal to the number of     !
19040   ! pennies equivalent to the amount that you need spelled!
19050   ! and then GOSUB SPELLER.  The spelled out amount will  !
19060   ! appear in SPL'OUT.  For example, the sequence         !
19070   ! SPL'AMT=1001:GOSUB SPELLER:PRINT SPL'OUT will print   !
19080   ! TEN DOLLARS AND ONE CENT on your terminal.            !
19090   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
20000 SPELLER:  SPL'AMT=ABS(SPL'AMT):SPL'ZRO=SPL'AMT USING "#ZZZZZZZZZZ"
20010   IF SPL'ZRO[1,-3]="000000000" THEN SPL'OUT="NO DOLLARS ":GOTO SPE'CENT
20020   SPL'OUT="":K=1
20030   FOR I=1 TO 3:SPL'THR=SPL'ZRO[K;3]:GOSUB SPE'THR:K=K+3:NEXT I
20040   IF SPL'ZRO[1,-3]="000000001" THEN SPL'OUT=SPL'OUT[1,-3]+" "
20050 SPE'CENT: SPL'OUT=SPL'OUT+"AND ":I=4:K=3*I-2
20060   SPL'THR="0"+SPL'ZRO[K;2]
20070   IF SPL'THR="000" THEN SPL'OUT=SPL'OUT+"NO CENTS":RETURN
20080   GOSUB SPE'THR
20090   IF SPL'THR="001" THEN I=-3 ELSE I=-2
20100   SPL'OUT=SPL'OUT[1,I]:RETURN
20110 SPE'THR:  IF SPL'THR="000" AND I<3 THEN RETURN
20120   IF SPL'ONE#"0" THEN SPL'OUT=SPL'OUT+SPL'UNIT(SPL'ONE)+" HUNDRED "
20130   IF SPL'TWO>"10" AND SPL'TWO<"20" GOTO SPE'TEEN
20140   IF SPL'TEN#"0" THEN SPL'OUT=SPL'OUT+SPL'TENS(SPL'TEN)+" "
20150   IF SPL'UNT#"0" THEN SPL'OUT=SPL'OUT+SPL'UNIT(SPL'UNT)+" "
20160   GOTO SPE'ORD
20170 SPE'TEEN: SPL'OUT=SPL'OUT+SPL'TEEN(SPL'UNT)+" "
20180 SPE'ORD:  SPL'OUT=SPL'OUT+SPL'ORD(I)+" ":RETURN