unit doscp857;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LConvEncoding;
function UTF8ToCP857(const s:string):string; // Turkish
implementation
function UnicodeToCP857(Unicode: cardinal): integer;
begin
case Unicode of
0..127: Result:=Unicode;
$00c7 : result:=$80 ; //LATIN CAPITAL LETTER C WITH CEDILLA
$00fc : result:=$81 ; //LATIN SMALL LETTER U WITH DIAERESIS
$00e9 : result:=$82 ; //LATIN SMALL LETTER E WITH ACUTE
$00e2 : result:=$83 ; //LATIN SMALL LETTER A WITH CIRCUMFLEX
$00e4 : result:=$84 ; //LATIN SMALL LETTER A WITH DIAERESIS
$00e0 : result:=$85 ; //LATIN SMALL LETTER A WITH GRAVE
$00e5 : result:=$86 ; //LATIN SMALL LETTER A WITH RING ABOVE
$00e7 : result:=$87 ; //LATIN SMALL LETTER C WITH CEDILLA
$00ea : result:=$88 ; //LATIN SMALL LETTER E WITH CIRCUMFLEX
$00eb : result:=$89 ; //LATIN SMALL LETTER E WITH DIAERESIS
$00e8 : result:=$8a ; //LATIN SMALL LETTER E WITH GRAVE
$00ef : result:=$8b ; //LATIN SMALL LETTER I WITH DIAERESIS
$00ee : result:=$8c ; //LATIN SMALL LETTER I WITH CIRCUMFLEX
$0131 : result:=$8d ; //LATIN SMALL LETTER DOTLESS I
$00c4 : result:=$8e ; //LATIN CAPITAL LETTER A WITH DIAERESIS
$00c5 : result:=$8f ; //LATIN CAPITAL LETTER A WITH RING ABOVE
$00c9 : result:=$90 ; //LATIN CAPITAL LETTER E WITH ACUTE
$00e6 : result:=$91 ; //LATIN SMALL LIGATURE AE
$00c6 : result:=$92 ; //LATIN CAPITAL LIGATURE AE
$00f4 : result:=$93 ; //LATIN SMALL LETTER O WITH CIRCUMFLEX
$00f6 : result:=$94 ; //LATIN SMALL LETTER O WITH DIAERESIS
$00f2 : result:=$95 ; //LATIN SMALL LETTER O WITH GRAVE
$00fb : result:=$96 ; //LATIN SMALL LETTER U WITH CIRCUMFLEX
$00f9 : result:=$97 ; //LATIN SMALL LETTER U WITH GRAVE
$0130 : result:=$98 ; //LATIN CAPITAL LETTER I WITH DOT ABOVE
$00d6 : result:=$99 ; //LATIN CAPITAL LETTER O WITH DIAERESIS
$00dc : result:=$9a ; //LATIN CAPITAL LETTER U WITH DIAERESIS
$00f8 : result:=$9b ; //LATIN SMALL LETTER O WITH STROKE
$00a3 : result:=$9c ; //POUND SIGN
$00d8 : result:=$9d ; //LATIN CAPITAL LETTER O WITH STROKE
$015e : result:=$9e ; //LATIN CAPITAL LETTER S WITH CEDILLA
$015f : result:=$9f ; //LATIN SMALL LETTER S WITH CEDILLA
$00e1 : result:=$a0 ; //LATIN SMALL LETTER A WITH ACUTE
$00ed : result:=$a1 ; //LATIN SMALL LETTER I WITH ACUTE
$00f3 : result:=$a2 ; //LATIN SMALL LETTER O WITH ACUTE
$00fa : result:=$a3 ; //LATIN SMALL LETTER U WITH ACUTE
$00f1 : result:=$a4 ; //LATIN SMALL LETTER N WITH TILDE
$00d1 : result:=$a5 ; //LATIN CAPITAL LETTER N WITH TILDE
$011e : result:=$a6 ; //LATIN CAPITAL LETTER G WITH BREVE
$011f : result:=$a7 ; //LATIN SMALL LETTER G WITH BREVE
$00bf : result:=$a8 ; //INVERTED QUESTION MARK
$00ae : result:=$a9 ; //REGISTERED SIGN
$00ac : result:=$aa ; //NOT SIGN
$00bd : result:=$ab ; //VULGAR FRACTION ONE HALF
$00bc : result:=$ac ; //VULGAR FRACTION ONE QUARTER
$00a1 : result:=$ad ; //INVERTED EXCLAMATION MARK
$00ab : result:=$ae ; //LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
$00bb : result:=$af ; //RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
$2591 : result:=$b0 ; //LIGHT SHADE
$2592 : result:=$b1 ; //MEDIUM SHADE
$2593 : result:=$b2 ; //DARK SHADE
$2502 : result:=$b3 ; //BOX DRAWINGS LIGHT VERTICAL
$2524 : result:=$b4 ; //BOX DRAWINGS LIGHT VERTICAL AND LEFT
$00c1 : result:=$b5 ; //LATIN CAPITAL LETTER A WITH ACUTE
$00c2 : result:=$b6 ; //LATIN CAPITAL LETTER A WITH CIRCUMFLEX
$00c0 : result:=$b7 ; //LATIN CAPITAL LETTER A WITH GRAVE
$00a9 : result:=$b8 ; //COPYRIGHT SIGN
$2563 : result:=$b9 ; //BOX DRAWINGS DOUBLE VERTICAL AND LEFT
$2551 : result:=$ba ; //BOX DRAWINGS DOUBLE VERTICAL
$2557 : result:=$bb ; //BOX DRAWINGS DOUBLE DOWN AND LEFT
$255d : result:=$bc ; //BOX DRAWINGS DOUBLE UP AND LEFT
$00a2 : result:=$bd ; //CENT SIGN
$00a5 : result:=$be ; //YEN SIGN
$2510 : result:=$bf ; //BOX DRAWINGS LIGHT DOWN AND LEFT
$2514 : result:=$c0 ; //BOX DRAWINGS LIGHT UP AND RIGHT
$2534 : result:=$c1 ; //BOX DRAWINGS LIGHT UP AND HORIZONTAL
$252c : result:=$c2 ; //BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
$251c : result:=$c3 ; //BOX DRAWINGS LIGHT VERTICAL AND RIGHT
$2500 : result:=$c4 ; //BOX DRAWINGS LIGHT HORIZONTAL
$253c : result:=$c5 ; //BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
$00e3 : result:=$c6 ; //LATIN SMALL LETTER A WITH TILDE
$00c3 : result:=$c7 ; //LATIN CAPITAL LETTER A WITH TILDE
$255a : result:=$c8 ; //BOX DRAWINGS DOUBLE UP AND RIGHT
$2554 : result:=$c9 ; //BOX DRAWINGS DOUBLE DOWN AND RIGHT
$2569 : result:=$ca ; //BOX DRAWINGS DOUBLE UP AND HORIZONTAL
$2566 : result:=$cb ; //BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
$2560 : result:=$cc ; //BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
$2550 : result:=$cd ; //BOX DRAWINGS DOUBLE HORIZONTAL
$256c : result:=$ce ; //BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
$00a4 : result:=$cf ; //CURRENCY SIGN
$00ba : result:=$d0 ; //MASCULINE ORDINAL INDICATOR
$00aa : result:=$d1 ; //FEMININE ORDINAL INDICATOR
$00ca : result:=$d2 ; //LATIN CAPITAL LETTER E WITH CIRCUMFLEX
$00cb : result:=$d3 ; //LATIN CAPITAL LETTER E WITH DIAERESIS
$00c8 : result:=$d4 ; //LATIN CAPITAL LETTER E WITH GRAVE
$00cd : result:=$d6 ; //LATIN CAPITAL LETTER I WITH ACUTE
$00ce : result:=$d7 ; //LATIN CAPITAL LETTER I WITH CIRCUMFLEX
$00cf : result:=$d8 ; //LATIN CAPITAL LETTER I WITH DIAERESIS
$2518 : result:=$d9 ; //BOX DRAWINGS LIGHT UP AND LEFT
$250c : result:=$da ; //BOX DRAWINGS LIGHT DOWN AND RIGHT
$2588 : result:=$db ; //FULL BLOCK
$2584 : result:=$dc ; //LOWER HALF BLOCK
$00a6 : result:=$dd ; //BROKEN BAR
$00cc : result:=$de ; //LATIN CAPITAL LETTER I WITH GRAVE
$2580 : result:=$df ; //UPPER HALF BLOCK
$00d3 : result:=$e0 ; //LATIN CAPITAL LETTER O WITH ACUTE
$00df : result:=$e1 ; //LATIN SMALL LETTER SHARP S
$00d4 : result:=$e2 ; //LATIN CAPITAL LETTER O WITH CIRCUMFLEX
$00d2 : result:=$e3 ; //LATIN CAPITAL LETTER O WITH GRAVE
$00f5 : result:=$e4 ; //LATIN SMALL LETTER O WITH TILDE
$00d5 : result:=$e5 ; //LATIN CAPITAL LETTER O WITH TILDE
$00b5 : result:=$e6 ; //MICRO SIGN
$00d7 : result:=$e8 ; //MULTIPLICATION SIGN
$00da : result:=$e9 ; //LATIN CAPITAL LETTER U WITH ACUTE
$00db : result:=$ea ; //LATIN CAPITAL LETTER U WITH CIRCUMFLEX
$00d9 : result:=$eb ; //LATIN CAPITAL LETTER U WITH GRAVE
$00ec : result:=$ec ; //LATIN SMALL LETTER I WITH GRAVE
$00ff : result:=$ed ; //LATIN SMALL LETTER Y WITH DIAERESIS
$00af : result:=$ee ; //MACRON
$00b4 : result:=$ef ; //ACUTE ACCENT
$00ad : result:=$f0 ; //SOFT HYPHEN
$00b1 : result:=$f1 ; //PLUS-MINUS SIGN
$00be : result:=$f3 ; //VULGAR FRACTION THREE QUARTERS
$00b6 : result:=$f4 ; //PILCROW SIGN
$00a7 : result:=$f5 ; //SECTION SIGN
$00f7 : result:=$f6 ; //DIVISION SIGN
$00b8 : result:=$f7 ; //CEDILLA
$00b0 : result:=$f8 ; //DEGREE SIGN
$00a8 : result:=$f9 ; //DIAERESIS
$00b7 : result:=$fa ; //MIDDLE DOT
$00b9 : result:=$fb ; //SUPERSCRIPT ONE
$00b3 : result:=$fc ; //SUPERSCRIPT THREE
$00b2 : result:=$fd ; //SUPERSCRIPT TWO
$25a0 : result:=$fe ; //BLACK SQUARE
$00a0 : result:=$ff ; //NO-BREAK SPACE end;
else result:=-1;
end;
end;
function UTF8ToCP857(const s:string):string;
begin
Result:=UTF8ToSingleByte(s,@UnicodeToCP857);
end;
end.