1 &ANALYZE-SUSPEND _VERSION-NUMBER UIB_v8r12
3 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Include
4 /*--------------------------------------------------------------------------
15 ------------------------------------------------------------------------*/
16 /* This .W file was created with the Progress UIB.
*/
17 /*----------------------------------------------------------------------*/
19 /* *************************** Definitions
************************** */
21 /* _UIB-CODE-BLOCK-END
*/
25 &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
27 /* ******************** Preprocessor Definitions
******************** */
31 /* _UIB-PREPROCESSOR-BLOCK-END
*/
36 /* *********************** Procedure Settings
************************ */
38 &ANALYZE-SUSPEND _PROCEDURE-SETTINGS
39 /* Settings for
THIS-PROCEDURE
43 Add Fields to
: Neither
44 Other Settings
: INCLUDE-ONLY
46 &ANALYZE-RESUME _END-PROCEDURE-SETTINGS
48 /* ************************* Create Window
************************** */
50 &ANALYZE-SUSPEND _CREATE-WINDOW
51 /* DESIGN Window definition
(used by the UIB
)
52 CREATE WINDOW Include
ASSIGN
55 /* END WINDOW DEFINITION
*/
62 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Include
65 /* *************************** Main Block
*************************** */
67 /* _UIB-CODE-BLOCK-END
*/
71 /* ********************** Internal Procedures
*********************** */
73 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE amount-to-word Include
74 PROCEDURE amount-to-word
:
75 /*------------------------------------------------------------------------------
76 Purpose
: Converts a decimal monetary amount to words
79 ------------------------------------------------------------------------------*/
81 DEF INPUT PARAMETER amount
AS DEC NO-UNDO.
82 DEF OUTPUT PARAMETER words
AS CHAR NO-UNDO.
84 DEF VAR dollars
AS INT NO-UNDO.
85 DEF VAR cents
AS INT NO-UNDO.
87 DEF VAR dwords
AS CHAR NO-UNDO.
88 DEF VAR cwords
AS CHAR NO-UNDO.
90 dollars
= TRUNCATE( amount
, 0 ).
91 cents
= (amount
- dollars
) * 100.
93 RUN num-to-word
( dollars
, OUTPUT dwords
).
94 RUN num-to-word
( cents
, OUTPUT cwords
).
99 words
= dwords
+ " dollar" + IF dollars
= 1 THEN "" ELSE "s".
101 words
= words
+ " and " + cwords
+ " cent" + IF cents
= 1 THEN "" ELSE "s".
102 words
= words
+ " only".
107 words
= cwords
+ " cent" + IF cents
= 1 THEN "" ELSE "s".
108 words
= words
+ " only".
111 words
= TRIM( words
).
115 /* _UIB-CODE-BLOCK-END
*/
119 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE date-to-word Include
120 PROCEDURE date-to-word
:
121 /*------------------------------------------------------------------------------
122 Purpose
: Converts a date to a word
125 ------------------------------------------------------------------------------*/
127 DEF INPUT PARAMETER in-date
AS DATE NO-UNDO.
128 DEF OUTPUT PARAMETER words
AS CHAR NO-UNDO.
130 DEF VAR dd
AS INT NO-UNDO.
131 DEF VAR mm
AS INT NO-UNDO.
132 DEF VAR yy
AS INT NO-UNDO.
134 DEF VAR dd-suffix
AS CHAR NO-UNDO.
135 DEF VAR mword
AS CHAR NO-UNDO.
138 mm
= MONTH( in-date
).
139 yy
= YEAR( in-date
).
142 IF dd
= 11 OR dd
= 12 OR dd
= 13 THEN "th" ELSE
143 IF dd
MODULO 10 = 1 THEN "st" ELSE
144 IF dd
MODULO 10 = 2 THEN "nd" ELSE
145 IF dd
MODULO 10 = 3 THEN "rd" ELSE "th".
148 WHEN 1 THEN mword
= "January".
149 WHEN 2 THEN mword
= "February".
150 WHEN 3 THEN mword
= "March".
151 WHEN 4 THEN mword
= "April".
152 WHEN 5 THEN mword
= "May".
153 WHEN 6 THEN mword
= "June".
154 WHEN 7 THEN mword
= "July".
155 WHEN 8 THEN mword
= "August".
156 WHEN 9 THEN mword
= "September".
157 WHEN 10 THEN mword
= "October".
158 WHEN 11 THEN mword
= "November".
159 WHEN 12 THEN mword
= "December".
162 words
= STRING( dd
) + dd-suffix
+ ' '
+ mword
+ '
, '
+ STRING( yy
).
166 /* _UIB-CODE-BLOCK-END
*/
170 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE num-to-word Include
171 PROCEDURE num-to-word
:
172 /*------------------------------------------------------------------------------
173 Purpose
: Converts a number to a word
176 ------------------------------------------------------------------------------*/
178 DEF INPUT PARAMETER number
AS INT NO-UNDO.
179 DEF OUTPUT PARAMETER words
AS CHAR NO-UNDO.
181 DEF VAR ones
AS INT NO-UNDO.
182 DEF VAR hundreds
AS INT NO-UNDO.
183 DEF VAR thousands
AS INT NO-UNDO.
184 DEF VAR millions
AS INT NO-UNDO.
186 DEF VAR oword
AS CHAR NO-UNDO.
187 DEF VAR hword
AS CHAR NO-UNDO.
188 DEF VAR tword
AS CHAR NO-UNDO.
189 DEF VAR mword
AS CHAR NO-UNDO.
191 IF number
<=0 THEN RETURN.
193 ones
= number
MODULO 100.
194 hundreds
= INT( DEC(number
) / 100 - 0.5 ) MODULO 10.
195 thousands
= INT( DEC(number
) / 1000 - 0.5 ) MODULO 1000.
196 millions
= INT( DEC(number
) / 1000000 - 0.5 ).
201 RUN num-to-word
( millions
, OUTPUT mword
).
202 words
= mword
+ " million ".
205 IF thousands
> 0 THEN
207 RUN num-to-word
( thousands
, OUTPUT tword
).
208 words
= words
+ tword
+ " thousand ".
213 RUN num-to-word
( hundreds
, OUTPUT hword
).
214 words
= words
+ hword
+ " hundred ".
219 IF number
> 100 THEN words
= words
+ "and ".
220 DEF VAR digit
AS INT NO-UNDO.
222 digit
= INT( DEC(ones
) / 10 - 0.5 ).
225 IF digit
= 2 THEN "twenty " ELSE
226 IF digit
= 3 THEN "thirty " ELSE
227 IF digit
= 4 THEN "forty " ELSE
228 IF digit
= 5 THEN "fifty " ELSE
229 IF digit
= 6 THEN "sixty " ELSE
230 IF digit
= 7 THEN "seventy " ELSE
231 IF digit
= 8 THEN "eighty " ELSE
232 IF digit
= 9 THEN "ninety " ELSE "".
234 digit
= IF digit
= 1 THEN ones
ELSE ones
MODULO 10.
237 WHEN 1 THEN oword
= oword
+ "one".
238 WHEN 2 THEN oword
= oword
+ "two".
239 WHEN 3 THEN oword
= oword
+ "three".
240 WHEN 4 THEN oword
= oword
+ "four".
241 WHEN 5 THEN oword
= oword
+ "five".
242 WHEN 6 THEN oword
= oword
+ "six".
243 WHEN 7 THEN oword
= oword
+ "seven".
244 WHEN 8 THEN oword
= oword
+ "eight".
245 WHEN 9 THEN oword
= oword
+ "nine".
246 WHEN 10 THEN oword
= oword
+ "ten".
247 WHEN 11 THEN oword
= oword
+ "eleven".
248 WHEN 12 THEN oword
= oword
+ "twelve".
249 WHEN 13 THEN oword
= oword
+ "thirteen".
250 WHEN 14 THEN oword
= oword
+ "fourteen".
251 WHEN 15 THEN oword
= oword
+ "fifteen".
252 WHEN 16 THEN oword
= oword
+ "sixteen".
253 WHEN 17 THEN oword
= oword
+ "seventeen".
254 WHEN 18 THEN oword
= oword
+ "eighteen".
255 WHEN 19 THEN oword
= oword
+ "nineteen".
258 words
= words
+ oword.
262 words
= TRIM( words
).
266 /* _UIB-CODE-BLOCK-END
*/
270 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE word-wrap Include
271 PROCEDURE word-wrap
:
272 /*------------------------------------------------------------------------------
274 ------------------------------------------------------------------------------*/
275 DEF INPUT PARAMETER in-word
AS CHAR NO-UNDO.
276 DEF INPUT PARAMETER wrap-width
AS INT NO-UNDO.
277 DEF OUTPUT PARAMETER result
AS CHAR NO-UNDO.
279 DEF VAR words-left
AS CHAR NO-UNDO.
280 DEF VAR idx
AS INT NO-UNDO.
281 DEF VAR idx2
AS INT NO-UNDO.
283 words-left
= in-word.
284 DO WHILE LENGTH( words-left
) > wrap-width
:
285 idx
= R-INDEX( words-left
, " ", wrap-width
).
286 IF idx
= 0 THEN idx
= wrap-width.
287 idx2
= INDEX( words-left
, "~n").
289 IF idx2
<> 0 AND idx2
< idx
THEN DO:
291 result
= result
+ SUBSTR( words-left
, 1, idx
).
294 result
= result
+ TRIM(SUBSTR( words-left
, 1, idx
- 1)) + "~n".
296 words-left
= SUBSTR( words-left
, idx
+ 1).
298 result
= result
+ words-left.
302 /* _UIB-CODE-BLOCK-END
*/