Показать сообщение отдельно
Старый 19.12.2002, 12:39     # 5
eXtreme
Guest
 
Сообщения: n/a

Post

Если нужен оригинал, идите на хоумпагу автора текста.

Код:
{*************************************************************}
{            Russian Code Tables unit for Delphi 16/32        }
{ Version:   1.0                                              }
{ Author:    Aleksey Kuznetsov                                }
{ E-Mail:    aleksey@utilmind.com                             }
{ Home Page: http://www.utilmind.com                          }
{*************************************************************}

unit RussianCodeTables;

interface

function DOSToWin(St: String): String;
function WinToDOS(St: String): String;

implementation

const
  DOS_2_Win: Array[$80..$FF] of Byte = (
   $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF,
   $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF,
   $E0,$E1,$E2,$E3,$E4,$E5,$E6,$E7,$E8,$E9,$EA,$EB,$EC,$ED,$EE,$EF,
   $B0,$B1,$B2,$A6,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$AC,
   $C0,$C1,$C2,$C3,$C4,$86,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF,
   $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$87,$D9,$DA,$DB,$DC,$DD,$DE,$DF,
   $F0,$F1,$F2,$F3,$F4,$F5,$F6,$F7,$F8,$F9,$FA,$FB,$FC,$FD,$FE,$FF,
   $A8,$B8,$AA,$BA,$AF,$BF,$A1,$A2,$B0,$F9,$B7,$FB,$B9,$A4,$FE,$A0);

  Win_2_DOS: Array[$80..$FF] of Byte = (
   $3f,$3f,$27,$3f,$22,$3a,$c5,$d8,$3f,$25,$3f,$3c,$3f,$3f,$3f,$3f,
   $3f,$27,$27,$22,$22,$07,$2d,$2d,$3f,$54,$3f,$3e,$3f,$3f,$3f,$3f,
   $ff,$f6,$f7,$3f,$fd,$3f,$b3,$15,$f0,$63,$f2,$3c,$bf,$2d,$52,$f4,
   $f8,$2b,$49,$69,$3f,$e7,$14,$fa,$f1,$fc,$f3,$3e,$3f,$3f,$3f,$f5,
   $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f,
   $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f,
   $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af,
   $e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef);

function DOSToWin(St: String): String;
var
  i: Integer;
begin
  i := Length(St);
  if i <> 0 then
   for i := 1 to i do
    if byte(St[i]) > $7F then
     St[i] := char(DOS_2_Win[byte(St[i])]);
  Result := St;
end;

function WinToDOS(St: String): String;
var
  i: Integer;
begin
  i := Length(St);
  if i <> 0 then
   for i := 1 to i do
    if byte(St[i]) > $7F then
     St[i] := char(Win_2_DOS[byte(St[i])]);
  Result := St;
end;

end.