``````{
Thomas.Papiernik@Thalma.fr says...
I try to find pascal source to convert numbers to letters like
100 to one hundred

{ Copyright 1988, 1995 Roger E. Donais              <RDonais@gnn.com> }

{ =================================================================== }
{ Returns lowercase ordinal for values 1st, 2nd, 3rd, etc             }
{ =================================================================== }
FUNCTION OrdNum{ (No: Word): String };
CONST Suffix: Array[0..9] of Array [1..2] of Char =
('th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th');
BEGIN
If (No > 10) and (No < 20) Then
OrdNum := Ascii(No,1)+'th'
Else
OrdNum := Ascii(No,1)+Suffix[No Mod 10];
END;

{ =================================================================== }
{ Returns lowercase ordinal for values "first" to "ninety-ninth"      }
{ Returns OrnNum() (0th, 100th, 101st, etc) for out-of-range values.  }
{ =================================================================== }
FUNCTION Ordinal{ (No: Integer): String };

CONST Lo: Array[1..19] of String[11] =
( 'first',     'second',     'third',     'fourth',    'fifth',
'sixth',     'seventh',    'eighth',    'ninth',     'tenth',
'eleventh',  'twelfth',    'thirteenth','fourteenth','fifteenth',
'sixteenth', 'seventeenth','eighteenth','nineteenth');

Ten: Array[2..9] of String[5] =
( 'twen', 'thir',  'for',  'fif',
'six',  'seven', 'eigh', 'nine');

BEGIN
If (No < 1) or (No > 99) Then
Ordinal := OrdNum(No)
Else
If No < 20 Then
Ordinal := Lo[No]
Else
If No mod 10 = 0 Then
Ordinal := Ten[No div 10] + 'tieth'
Else Ordinal := Ten[No div No] + 'ty-' + Lo[No mod 10];
END;

{ =================================================================== }
{ Returns lowercase number for values 0..MAX_WORD, as "zero", "one",  }
{ two, ..., "sixty-five thousand five hundred sixty five.             }
{ =================================================================== }
FUNCTION Number(No: Word): String;

Function Num(No: Word): String;
{ --------------------------------------------------------------- }
CONST Lo: Array[1..19] of String[ 9] =
( 'one',     'two',      'three',   'four',    'five',
'six',     'seven',    'eight',   'nine',    'ten',
'eleven',  'twelve',   'thirteen','fourteen','fifteen',
'sixteen', 'seventeen','eighteen','nineteen');

Ten: Array[2..9] of String[5] =
( 'twen', 'thir',  'for',  'fif',
'six',  'seven', 'eigh', 'nine');
Begin
If No < 20 Then Begin
If No <> 0 Then
Num := Lo[No]
End Else
If No mod 10 = 0 Then
Num := Ten[No div 10] + 'ty'
Else Num := Ten[No div 10] + 'ty-' + Lo[No mod 10];
End;

VAR s: String;
BEGIN
If No = 0 Then
Number := 'zero'
Else Begin
s := '';
If No >= 2000 Then Begin
s := Num(No div 1000)+ ' thousand ';
No := No mod 1000;
End;
If No >= 1000 Then Begin
s := s + Num(No div 100) + ' hundred ';
No := No mod 100;
End;
s := Ftrim(s + Num(No));
End;
Number := s;
END;

``````