+ useunicodefunctions flag added

git-svn-id: trunk@9483 -
This commit is contained in:
florian 2007-12-16 17:48:20 +00:00
parent 3036e1052f
commit e7caecb584

View File

@ -17,6 +17,8 @@ unit Video;
interface
{$i videoh.inc}
const
useunicodefunctions : boolean = false;
implementation
@ -25,6 +27,278 @@ uses
{$i video.inc}
type
tunicodecharmappingflag = (umf_noinfo,umf_leadbyte,umf_undefined,
umf_unused);
punicodecharmapping = ^tunicodecharmapping;
tunicodecharmapping = record
unicode : word;
flag : tunicodecharmappingflag;
reserved : byte;
end;
const
mapcp850 : array[0..255] of tunicodecharmapping = (
(unicode : 0; flag : umf_noinfo; reserved : 0),
(unicode : 1; flag : umf_noinfo; reserved : 0),
(unicode : 2; flag : umf_noinfo; reserved : 0),
(unicode : 3; flag : umf_noinfo; reserved : 0),
(unicode : 4; flag : umf_noinfo; reserved : 0),
(unicode : 5; flag : umf_noinfo; reserved : 0),
(unicode : 6; flag : umf_noinfo; reserved : 0),
(unicode : 7; flag : umf_noinfo; reserved : 0),
(unicode : 8; flag : umf_noinfo; reserved : 0),
(unicode : 9; flag : umf_noinfo; reserved : 0),
(unicode : 10; flag : umf_noinfo; reserved : 0),
(unicode : 11; flag : umf_noinfo; reserved : 0),
(unicode : 12; flag : umf_noinfo; reserved : 0),
(unicode : 13; flag : umf_noinfo; reserved : 0),
(unicode : 14; flag : umf_noinfo; reserved : 0),
(unicode : 15; flag : umf_noinfo; reserved : 0),
(unicode : 16; flag : umf_noinfo; reserved : 0),
(unicode : 17; flag : umf_noinfo; reserved : 0),
(unicode : 18; flag : umf_noinfo; reserved : 0),
(unicode : 19; flag : umf_noinfo; reserved : 0),
(unicode : 20; flag : umf_noinfo; reserved : 0),
(unicode : 21; flag : umf_noinfo; reserved : 0),
(unicode : 22; flag : umf_noinfo; reserved : 0),
(unicode : 23; flag : umf_noinfo; reserved : 0),
(unicode : 24; flag : umf_noinfo; reserved : 0),
(unicode : 25; flag : umf_noinfo; reserved : 0),
(unicode : 26; flag : umf_noinfo; reserved : 0),
(unicode : 27; flag : umf_noinfo; reserved : 0),
(unicode : 28; flag : umf_noinfo; reserved : 0),
(unicode : 29; flag : umf_noinfo; reserved : 0),
(unicode : 30; flag : umf_noinfo; reserved : 0),
(unicode : 31; flag : umf_noinfo; reserved : 0),
(unicode : 32; flag : umf_noinfo; reserved : 0),
(unicode : 33; flag : umf_noinfo; reserved : 0),
(unicode : 34; flag : umf_noinfo; reserved : 0),
(unicode : 35; flag : umf_noinfo; reserved : 0),
(unicode : 36; flag : umf_noinfo; reserved : 0),
(unicode : 37; flag : umf_noinfo; reserved : 0),
(unicode : 38; flag : umf_noinfo; reserved : 0),
(unicode : 39; flag : umf_noinfo; reserved : 0),
(unicode : 40; flag : umf_noinfo; reserved : 0),
(unicode : 41; flag : umf_noinfo; reserved : 0),
(unicode : 42; flag : umf_noinfo; reserved : 0),
(unicode : 43; flag : umf_noinfo; reserved : 0),
(unicode : 44; flag : umf_noinfo; reserved : 0),
(unicode : 45; flag : umf_noinfo; reserved : 0),
(unicode : 46; flag : umf_noinfo; reserved : 0),
(unicode : 47; flag : umf_noinfo; reserved : 0),
(unicode : 48; flag : umf_noinfo; reserved : 0),
(unicode : 49; flag : umf_noinfo; reserved : 0),
(unicode : 50; flag : umf_noinfo; reserved : 0),
(unicode : 51; flag : umf_noinfo; reserved : 0),
(unicode : 52; flag : umf_noinfo; reserved : 0),
(unicode : 53; flag : umf_noinfo; reserved : 0),
(unicode : 54; flag : umf_noinfo; reserved : 0),
(unicode : 55; flag : umf_noinfo; reserved : 0),
(unicode : 56; flag : umf_noinfo; reserved : 0),
(unicode : 57; flag : umf_noinfo; reserved : 0),
(unicode : 58; flag : umf_noinfo; reserved : 0),
(unicode : 59; flag : umf_noinfo; reserved : 0),
(unicode : 60; flag : umf_noinfo; reserved : 0),
(unicode : 61; flag : umf_noinfo; reserved : 0),
(unicode : 62; flag : umf_noinfo; reserved : 0),
(unicode : 63; flag : umf_noinfo; reserved : 0),
(unicode : 64; flag : umf_noinfo; reserved : 0),
(unicode : 65; flag : umf_noinfo; reserved : 0),
(unicode : 66; flag : umf_noinfo; reserved : 0),
(unicode : 67; flag : umf_noinfo; reserved : 0),
(unicode : 68; flag : umf_noinfo; reserved : 0),
(unicode : 69; flag : umf_noinfo; reserved : 0),
(unicode : 70; flag : umf_noinfo; reserved : 0),
(unicode : 71; flag : umf_noinfo; reserved : 0),
(unicode : 72; flag : umf_noinfo; reserved : 0),
(unicode : 73; flag : umf_noinfo; reserved : 0),
(unicode : 74; flag : umf_noinfo; reserved : 0),
(unicode : 75; flag : umf_noinfo; reserved : 0),
(unicode : 76; flag : umf_noinfo; reserved : 0),
(unicode : 77; flag : umf_noinfo; reserved : 0),
(unicode : 78; flag : umf_noinfo; reserved : 0),
(unicode : 79; flag : umf_noinfo; reserved : 0),
(unicode : 80; flag : umf_noinfo; reserved : 0),
(unicode : 81; flag : umf_noinfo; reserved : 0),
(unicode : 82; flag : umf_noinfo; reserved : 0),
(unicode : 83; flag : umf_noinfo; reserved : 0),
(unicode : 84; flag : umf_noinfo; reserved : 0),
(unicode : 85; flag : umf_noinfo; reserved : 0),
(unicode : 86; flag : umf_noinfo; reserved : 0),
(unicode : 87; flag : umf_noinfo; reserved : 0),
(unicode : 88; flag : umf_noinfo; reserved : 0),
(unicode : 89; flag : umf_noinfo; reserved : 0),
(unicode : 90; flag : umf_noinfo; reserved : 0),
(unicode : 91; flag : umf_noinfo; reserved : 0),
(unicode : 92; flag : umf_noinfo; reserved : 0),
(unicode : 93; flag : umf_noinfo; reserved : 0),
(unicode : 94; flag : umf_noinfo; reserved : 0),
(unicode : 95; flag : umf_noinfo; reserved : 0),
(unicode : 96; flag : umf_noinfo; reserved : 0),
(unicode : 97; flag : umf_noinfo; reserved : 0),
(unicode : 98; flag : umf_noinfo; reserved : 0),
(unicode : 99; flag : umf_noinfo; reserved : 0),
(unicode : 100; flag : umf_noinfo; reserved : 0),
(unicode : 101; flag : umf_noinfo; reserved : 0),
(unicode : 102; flag : umf_noinfo; reserved : 0),
(unicode : 103; flag : umf_noinfo; reserved : 0),
(unicode : 104; flag : umf_noinfo; reserved : 0),
(unicode : 105; flag : umf_noinfo; reserved : 0),
(unicode : 106; flag : umf_noinfo; reserved : 0),
(unicode : 107; flag : umf_noinfo; reserved : 0),
(unicode : 108; flag : umf_noinfo; reserved : 0),
(unicode : 109; flag : umf_noinfo; reserved : 0),
(unicode : 110; flag : umf_noinfo; reserved : 0),
(unicode : 111; flag : umf_noinfo; reserved : 0),
(unicode : 112; flag : umf_noinfo; reserved : 0),
(unicode : 113; flag : umf_noinfo; reserved : 0),
(unicode : 114; flag : umf_noinfo; reserved : 0),
(unicode : 115; flag : umf_noinfo; reserved : 0),
(unicode : 116; flag : umf_noinfo; reserved : 0),
(unicode : 117; flag : umf_noinfo; reserved : 0),
(unicode : 118; flag : umf_noinfo; reserved : 0),
(unicode : 119; flag : umf_noinfo; reserved : 0),
(unicode : 120; flag : umf_noinfo; reserved : 0),
(unicode : 121; flag : umf_noinfo; reserved : 0),
(unicode : 122; flag : umf_noinfo; reserved : 0),
(unicode : 123; flag : umf_noinfo; reserved : 0),
(unicode : 124; flag : umf_noinfo; reserved : 0),
(unicode : 125; flag : umf_noinfo; reserved : 0),
(unicode : 126; flag : umf_noinfo; reserved : 0),
(unicode : 127; flag : umf_noinfo; reserved : 0),
(unicode : 199; flag : umf_noinfo; reserved : 0),
(unicode : 252; flag : umf_noinfo; reserved : 0),
(unicode : 233; flag : umf_noinfo; reserved : 0),
(unicode : 226; flag : umf_noinfo; reserved : 0),
(unicode : 228; flag : umf_noinfo; reserved : 0),
(unicode : 224; flag : umf_noinfo; reserved : 0),
(unicode : 229; flag : umf_noinfo; reserved : 0),
(unicode : 231; flag : umf_noinfo; reserved : 0),
(unicode : 234; flag : umf_noinfo; reserved : 0),
(unicode : 235; flag : umf_noinfo; reserved : 0),
(unicode : 232; flag : umf_noinfo; reserved : 0),
(unicode : 239; flag : umf_noinfo; reserved : 0),
(unicode : 238; flag : umf_noinfo; reserved : 0),
(unicode : 236; flag : umf_noinfo; reserved : 0),
(unicode : 196; flag : umf_noinfo; reserved : 0),
(unicode : 197; flag : umf_noinfo; reserved : 0),
(unicode : 201; flag : umf_noinfo; reserved : 0),
(unicode : 230; flag : umf_noinfo; reserved : 0),
(unicode : 198; flag : umf_noinfo; reserved : 0),
(unicode : 244; flag : umf_noinfo; reserved : 0),
(unicode : 246; flag : umf_noinfo; reserved : 0),
(unicode : 242; flag : umf_noinfo; reserved : 0),
(unicode : 251; flag : umf_noinfo; reserved : 0),
(unicode : 249; flag : umf_noinfo; reserved : 0),
(unicode : 255; flag : umf_noinfo; reserved : 0),
(unicode : 214; flag : umf_noinfo; reserved : 0),
(unicode : 220; flag : umf_noinfo; reserved : 0),
(unicode : 248; flag : umf_noinfo; reserved : 0),
(unicode : 163; flag : umf_noinfo; reserved : 0),
(unicode : 216; flag : umf_noinfo; reserved : 0),
(unicode : 215; flag : umf_noinfo; reserved : 0),
(unicode : 402; flag : umf_noinfo; reserved : 0),
(unicode : 225; flag : umf_noinfo; reserved : 0),
(unicode : 237; flag : umf_noinfo; reserved : 0),
(unicode : 243; flag : umf_noinfo; reserved : 0),
(unicode : 250; flag : umf_noinfo; reserved : 0),
(unicode : 241; flag : umf_noinfo; reserved : 0),
(unicode : 209; flag : umf_noinfo; reserved : 0),
(unicode : 170; flag : umf_noinfo; reserved : 0),
(unicode : 186; flag : umf_noinfo; reserved : 0),
(unicode : 191; flag : umf_noinfo; reserved : 0),
(unicode : 174; flag : umf_noinfo; reserved : 0),
(unicode : 172; flag : umf_noinfo; reserved : 0),
(unicode : 189; flag : umf_noinfo; reserved : 0),
(unicode : 188; flag : umf_noinfo; reserved : 0),
(unicode : 161; flag : umf_noinfo; reserved : 0),
(unicode : 171; flag : umf_noinfo; reserved : 0),
(unicode : 187; flag : umf_noinfo; reserved : 0),
(unicode : 9617; flag : umf_noinfo; reserved : 0),
(unicode : 9618; flag : umf_noinfo; reserved : 0),
(unicode : 9619; flag : umf_noinfo; reserved : 0),
(unicode : 9474; flag : umf_noinfo; reserved : 0),
(unicode : 9508; flag : umf_noinfo; reserved : 0),
(unicode : 193; flag : umf_noinfo; reserved : 0),
(unicode : 194; flag : umf_noinfo; reserved : 0),
(unicode : 192; flag : umf_noinfo; reserved : 0),
(unicode : 169; flag : umf_noinfo; reserved : 0),
(unicode : 9571; flag : umf_noinfo; reserved : 0),
(unicode : 9553; flag : umf_noinfo; reserved : 0),
(unicode : 9559; flag : umf_noinfo; reserved : 0),
(unicode : 9565; flag : umf_noinfo; reserved : 0),
(unicode : 162; flag : umf_noinfo; reserved : 0),
(unicode : 165; flag : umf_noinfo; reserved : 0),
(unicode : 9488; flag : umf_noinfo; reserved : 0),
(unicode : 9492; flag : umf_noinfo; reserved : 0),
(unicode : 9524; flag : umf_noinfo; reserved : 0),
(unicode : 9516; flag : umf_noinfo; reserved : 0),
(unicode : 9500; flag : umf_noinfo; reserved : 0),
(unicode : 9472; flag : umf_noinfo; reserved : 0),
(unicode : 9532; flag : umf_noinfo; reserved : 0),
(unicode : 227; flag : umf_noinfo; reserved : 0),
(unicode : 195; flag : umf_noinfo; reserved : 0),
(unicode : 9562; flag : umf_noinfo; reserved : 0),
(unicode : 9556; flag : umf_noinfo; reserved : 0),
(unicode : 9577; flag : umf_noinfo; reserved : 0),
(unicode : 9574; flag : umf_noinfo; reserved : 0),
(unicode : 9568; flag : umf_noinfo; reserved : 0),
(unicode : 9552; flag : umf_noinfo; reserved : 0),
(unicode : 9580; flag : umf_noinfo; reserved : 0),
(unicode : 164; flag : umf_noinfo; reserved : 0),
(unicode : 240; flag : umf_noinfo; reserved : 0),
(unicode : 208; flag : umf_noinfo; reserved : 0),
(unicode : 202; flag : umf_noinfo; reserved : 0),
(unicode : 203; flag : umf_noinfo; reserved : 0),
(unicode : 200; flag : umf_noinfo; reserved : 0),
(unicode : 305; flag : umf_noinfo; reserved : 0),
(unicode : 205; flag : umf_noinfo; reserved : 0),
(unicode : 206; flag : umf_noinfo; reserved : 0),
(unicode : 207; flag : umf_noinfo; reserved : 0),
(unicode : 9496; flag : umf_noinfo; reserved : 0),
(unicode : 9484; flag : umf_noinfo; reserved : 0),
(unicode : 9608; flag : umf_noinfo; reserved : 0),
(unicode : 9604; flag : umf_noinfo; reserved : 0),
(unicode : 166; flag : umf_noinfo; reserved : 0),
(unicode : 204; flag : umf_noinfo; reserved : 0),
(unicode : 9600; flag : umf_noinfo; reserved : 0),
(unicode : 211; flag : umf_noinfo; reserved : 0),
(unicode : 223; flag : umf_noinfo; reserved : 0),
(unicode : 212; flag : umf_noinfo; reserved : 0),
(unicode : 210; flag : umf_noinfo; reserved : 0),
(unicode : 245; flag : umf_noinfo; reserved : 0),
(unicode : 213; flag : umf_noinfo; reserved : 0),
(unicode : 181; flag : umf_noinfo; reserved : 0),
(unicode : 254; flag : umf_noinfo; reserved : 0),
(unicode : 222; flag : umf_noinfo; reserved : 0),
(unicode : 218; flag : umf_noinfo; reserved : 0),
(unicode : 219; flag : umf_noinfo; reserved : 0),
(unicode : 217; flag : umf_noinfo; reserved : 0),
(unicode : 253; flag : umf_noinfo; reserved : 0),
(unicode : 221; flag : umf_noinfo; reserved : 0),
(unicode : 175; flag : umf_noinfo; reserved : 0),
(unicode : 180; flag : umf_noinfo; reserved : 0),
(unicode : 173; flag : umf_noinfo; reserved : 0),
(unicode : 177; flag : umf_noinfo; reserved : 0),
(unicode : 8215; flag : umf_noinfo; reserved : 0),
(unicode : 190; flag : umf_noinfo; reserved : 0),
(unicode : 182; flag : umf_noinfo; reserved : 0),
(unicode : 167; flag : umf_noinfo; reserved : 0),
(unicode : 247; flag : umf_noinfo; reserved : 0),
(unicode : 184; flag : umf_noinfo; reserved : 0),
(unicode : 176; flag : umf_noinfo; reserved : 0),
(unicode : 168; flag : umf_noinfo; reserved : 0),
(unicode : 183; flag : umf_noinfo; reserved : 0),
(unicode : 185; flag : umf_noinfo; reserved : 0),
(unicode : 179; flag : umf_noinfo; reserved : 0),
(unicode : 178; flag : umf_noinfo; reserved : 0),
(unicode : 9632; flag : umf_noinfo; reserved : 0),
(unicode : 160; flag : umf_noinfo; reserved : 0)
);
const
LastCursorType: word = crUnderline;
OrigScreen: PVideoBuf = nil;
@ -261,11 +535,6 @@ begin
UpdateScreen(true);
end;
{$IFDEF FPC}
function WriteConsoleOutput(hConsoleOutput:HANDLE; lpBuffer:pointer; dwBufferSize:COORD; dwBufferCoord:COORD;
var lpWriteRegion:SMALL_RECT):WINBOOL; stdcall;external 'kernel32' name 'WriteConsoleOutputA';
{$ENDIF}
procedure SysUpdateScreen(Force: Boolean);
type TmpRec = Array[0..(1024*32) - 1] of TCharInfo;
@ -338,11 +607,14 @@ begin
if LineCounter>y2 then
y2:=LineCounter;
end;
LineBuf^[BufCounter].UniCodeChar := Widechar(WordRec(VideoBuf^[BufCounter]).One);
if useunicodefunctions then
LineBuf^[BufCounter].UniCodeChar := Widechar(mapcp850[WordRec(VideoBuf^[BufCounter]).One].unicode)
else
LineBuf^[BufCounter].UniCodeChar := Widechar(WordRec(VideoBuf^[BufCounter]).One);
{ If (WordRec(VideoBuf^[BufCounter]).Two and $80)<>0 then
LineBuf^[BufCounter].Attributes := $100+WordRec(VideoBuf^[BufCounter]).Two
else }
LineBuf^[BufCounter].Attributes := WordRec(VideoBuf^[BufCounter]).Two;
LineBuf^[BufCounter].Attributes := WordRec(VideoBuf^[BufCounter]).Two;
Inc(BufCounter);
end; { for }
@ -377,7 +649,10 @@ begin
writeln('X2: ',x2);
writeln('Y2: ',y2);
}
WriteConsoleOutput(TextRec(Output).Handle, LineBuf, BufSize, BufCoord, WriteRegion);
if useunicodefunctions then
WriteConsoleOutputW(TextRec(Output).Handle, LineBuf, BufSize, BufCoord, WriteRegion)
else
WriteConsoleOutput(TextRec(Output).Handle, LineBuf, BufSize, BufCoord, WriteRegion);
Dispose(LineBuf);
move(VideoBuf^,OldVideoBuf^,VideoBufSize);