/* Based on code from: Marin Lazar Sr. DB / UNIX Admin Somerville NOTE: Modified by Speedy Mercer from Check Format to output either Currency or Decimal syntax on a single line. USAGE: DEF VAR textamt AS CHARACTER. RUN NumToText.p ("12345678.90", "Currency", OUTPUT textamt). DISP textamt FORMAT "x(120)". */ DEFINE INPUT PARAMETER pcAmount AS DECIMAL FORMAT ">>>,>>>,>>9.99" INIT 999999999.99 NO-UNDO. DEFINE INPUT PARAMETER pcType AS CHARACTER NO-UNDO. DEFINE OUTPUT PARAMETER vcResult AS CHARACTER FORMAT "x(120)" NO-UNDO. DEFINE VARIABLE vcTextAmt1 AS CHARACTER FORMAT "x(60)". DEFINE VARIABLE vcTextAmt2 AS CHARACTER FORMAT "x(60)". DEFINE VARIABLE vcTxtHUNDREDS as CHARACTER EXTENT 4 initial [ "Billion", "Million", "Thousand", "Hundred"]. DEFINE VARIABLE viNumHUNDREDS as INTEGER EXTENT 4 initial [ 1000000000, 1000000, 1000, 1]. DEFINE VARIABLE vcTxtTENS as CHARACTER EXTENT 10 initial [ "", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"]. DEFINE VARIABLE vcTxtUNITS as CHARACTER EXTENT 20 initial [ "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen","Eighteen", "Nineteen"]. DEFINE VARIABLE vdNumber as decimal FORMAT "->,>>>,>>>,>>9.99". DEFINE VARIABLE viDecimalAmt as INTEGER. DEFINE VARIABLE i as INTEGER. DEFINE VARIABLE x as INTEGER. DEFINE VARIABLE h as INTEGER. DEFINE VARIABLE t as INTEGER. DEFINE VARIABLE u as INTEGER. ASSIGN vdNumber = pcAmount. IF vdNumber < 0 THEN ASSIGN vcResult = vcResult + "Negative " vdNumber = - vdNumber. ASSIGN viDecimalAmt = (vdNumber - TRUNCATE(vdNumber, 0)) * 100 vdNumber = TRUNCATE(vdNumber, 0). IF vdNumber = 0 THEN ASSIGN vcResult = vcResult + vcTxtUNITS[1] + " ". DO i = 1 TO 4: ASSIGN x = TRUNCATE(vdNumber / viNumHUNDREDS[i], 0). IF x = 0 THEN DO: ASSIGN vdNumber = vdNumber MOD viNumHUNDREDS[i]. next. END. ASSIGN h = TRUNCATE(x / 100, 0) x = x MOD 100 t = TRUNCATE(x / 10, 0) u = x MOD 10. IF t = 1 THEN ASSIGN u = u + 10 t = 0. IF h > 0 THEN ASSIGN vcResult = vcResult + vcTxtUNITS[h + 1] + " " + vcTxtHUNDREDS[4] + " ". IF t > 0 THEN ASSIGN vcResult = vcResult + vcTxtTENS[t + 1] vcResult = vcResult + IF u > 0 THEN "-" ELSE " ". IF u > 0 THEN ASSIGN vcResult = vcResult + vcTxtUNITS[u + 1] + " ". IF i < 4 THEN ASSIGN vcResult = vcResult + vcTxtHUNDREDS[i] + " ". ASSIGN vdNumber = vdNumber MOD viNumHUNDREDS[i]. END. IF pcType = "Currency" THEN DO: ASSIGN vcResult = vcResult + "Dollars AND ". IF viDecimalAmt = 0 THEN ASSIGN vcResult = vcResult + "No Cents". ELSE ASSIGN vcResult = vcResult + string(viDecimalAmt, "99") + " Cents". END. ELSE vcResult = vcResult + " POINT " + string(viDecimalAmt, "99").