'===========================================================================
' Subject: CONVERT NUMBERS INTO WORDS         Date: 10-14-00 (07:43)       
'  Author: Don Schullian                      Code: PBCC                   
'  Origin: d83@DASoftVSS.com                Packet: PBCC.ABC
'===========================================================================
'    ----------------------------                         PowerBASICcc v2
' ---|          DASoft          |------------------------------------------
'    ----------------------------    Public Domain       DATE: 2000-10-14
'    | FILE NAME   Val2Wrds.bas |       code by
'    | DIRECTORY                |  Don Schullian, Jr.
'    ----------------------------
'  PURPOSE: convert numbers into words for check printing, etc.
'   PARAMS: Number# incoming - any valid number
'  RETURNS: the number in text
'           eg: fValue2Words$ ( 100.10 ) returns
'              "ONE HUNDRED DOLLARS AND 10 CENTS"
'   NOTE: the function is not set-up to handle negative numbers as they
'          would not appear on a check
' -------------------------------------------------------------------------

DECLARE FUNCTION fValue2Words (BYVAL Number AS DOUBLE) AS STRING

FUNCTION fValue2Words ( BYVAL Number AS DOUBLE ) EXPORT AS STRING

  DIM Cma  AS LOCAL STRING
  DIM I    AS LOCAL LONG
  DIM Last AS LOCAL LONG
  DIM Nbr  AS LOCAL STRING
  DIM Pce  AS LOCAL LONG
  DIM Temp AS LOCAL STRING
  DIM V    AS LOCAL LONG

  Nbr  = FORMAT$( Number, "###############,.##" )         ' a number to work with
  I    = LEN(Nbr) - 2                                     ' decimal location
  IF ASC(Nbr,I) = 44 THEN Cma = "." ELSE Cma = ","        ' if decimal is a "." then.....
  Last = PARSECOUNT( Nbr, Cma )                           ' # of pieces
  '-------------------------------------------------------'
  FOR Pce = 1 TO Last                                     ' from left to right
    V = VAL( PARSE$(Nbr, Cma, Pce) )                      ' get the 000
    IF V = 0 THEN ITERATE                                 ' nada!
    IF V > 99 THEN                                        ' hundreds position
      I = ( V  \  100 )                                   '   # of hundreds
      V = ( V MOD 100 )                                   '   > 100
      Temp = Temp & READ$(I) & READ$(33)                  '   add words
    END IF                                                '
    IF ( V > 10 ) AND ( V < 20 ) THEN                     ' teens
        Temp = Temp & READ$(V)                            '   add words
      ELSEIF V > 0 THEN                                   ' anything left?
        IF V > 9 THEN                                     ' tens
          I = ( V  \  10 )                                '   # of tens - 1
          V = ( V MOD 10 )                                '   strip tens
          Temp = Temp & READ$(I+19)                       '   add words
        END IF                                            '
        IF V > 0 THEN Temp = Temp & READ$(V)              ' ones
    END IF                                                '
    IF Pce = Last THEN EXIT FOR                           ' all done
    Temp = Temp & READ$(Last - Pce + 28)                  ' thousands/mills/etc
  NEXT                                                    '
  '-------------------------------------------------------'
  IF LEN(Temp) = 0 THEN Temp = READ$(36)                  ' no ones!
  Temp = Temp & READ$(34) & RIGHT$(Nbr,2) & READ$(35)     ' add decimals
  '-------------------------------------------------------'-----------------------
  FUNCTION = Temp                                         ' RETURN STRING
                                                          '-----------------------
  DATA "ONE ", "TWO ", "THREE ", "FOUR ", "FIVE ", "SIX " '
  DATA "SEVEN ", "EIGHT ", "NINE ", "", "ELEVEN "         '
  DATA "TWELVE ", "THIRTEEN ", "FOURTEEN ", "FIFTEEN "    '
  DATA "SIXTEEN ", "SEVENTEEN ", "EIGHTEEN ", "NINETEEN " '
  DATA "TEN ", "TWENTY ", "THIRTY ", "FORTY ", "FIFTY "   '
  DATA "SIXTY ", "SEVENTY ", "EIGHTY ", "NINETY "         '
  DATA "THOUSAND ", "MILLION ", "BILLION ", "TRILLION "   '
  DATA "HUNDRED ", "DOLLARS AND ", " CENTS", "00 "        '

END FUNCTION
'
'---------------------------------------------------------------------------------
'
FUNCTION PBmain ()

  PRINT fValue2Words(32421009.34)
  PRINT
  PRINT fValue2Words(900132924462342.00)
  PRINT
  PRINT fValue2Words(123.10)

  WAITKEY$

END FUNCTION
