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