From d28d17b6c6dd6596816514c1eb5dbb6805d0bbb4 Mon Sep 17 00:00:00 2001 From: pierre Date: Mon, 22 Jan 2007 04:15:20 +0000 Subject: [PATCH] * added checks for windows calls and better set console mode for windows git-svn-id: trunk@6122 - --- ide/fpusrscr.pas | 61 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/ide/fpusrscr.pas b/ide/fpusrscr.pas index 35ca245fa9..167d336c77 100644 --- a/ide/fpusrscr.pas +++ b/ide/fpusrscr.pas @@ -222,6 +222,10 @@ type ConsoleMode,IdeMode : Dword; IdeScreenMode : TVideoMode; procedure BufferCopy(src,dest : THandle); +{$ifdef debug} + procedure Complain(St : string); + Procedure SetConsoleMode(FH : Handle;Mode : DWord); +{$endif debug} end; {$endif} @@ -982,8 +986,12 @@ end; { Seems to be missing in windows unit PM } const - ENABLE_INSERT_MODE = $20; + ENABLE_INSERT_MODE = $20; ENABLE_QUICK_EDIT_MODE = $40; + ENABLE_EXTENDED_FLAGS = $80; + ENABLE_AUTO_POSITION = $100; + + procedure UpdateFileHandles; begin @@ -1021,6 +1029,7 @@ begin GetConsoleMode(GetStdHandle(cardinal(Std_Input_Handle)), @ConsoleMode); IdeMode:=ConsoleMode; {$ifdef debug} + Complain('Starting ConsoleMode is $'+hexstr(ConsoleMode,8)); {define Windowsbigwin} {$endif debug} {$ifdef Windowsbigwin} @@ -1265,9 +1274,17 @@ end; { dummy for Windows as the Buffer screen do hold all the info } procedure TWindowsScreen.SaveIDEScreen; +var + NowIdeMode : Dword; begin IdeScreenMode:=ScreenMode; - GetConsoleMode(GetStdHandle(cardinal(Std_Input_Handle)), @IdeMode); + GetConsoleMode(GetStdHandle(cardinal(Std_Input_Handle)), @NowIdeMode); +{$ifdef debug} + Complain('IDE ConsoleMode is $'+hexstr(NowIdeMode,8)); + if NowIdeMode<>IdeMode then + Complain('is not equal to IDEMode $'+hexstr(IdeMode,8)); +{$endif debug} + IdeMode:=NowIdeMode; { set the dummy buffer as active already now PM } SetStdHandle(cardinal(Std_Output_Handle),DummyScreenBufferHandle); UpdateFileHandles; @@ -1278,6 +1295,9 @@ end; procedure TWindowsScreen.SaveConsoleScreen; begin GetConsoleMode(GetStdHandle(cardinal(Std_Input_Handle)), @ConsoleMode); +{$ifdef debug} + Complain('ConsoleMode now is $'+hexstr(ConsoleMode,8)); +{$endif debug} { set the dummy buffer as active already now PM } SetStdHandle(cardinal(Std_Output_Handle),DummyScreenBufferHandle); UpdateFileHandles; @@ -1307,7 +1327,9 @@ begin { Needed to force InitSystemMsg to use the right console handle } DoneEvents; InitEvents; - IdeMode:=(IdeMode or ENABLE_MOUSE_INPUT or ENABLE_WINDOW_INPUT) + IdeMode:=({IdeMode or }ENABLE_MOUSE_INPUT or + ENABLE_WINDOW_INPUT or + ENABLE_EXTENDED_FLAGS) and not (ENABLE_PROCESSED_INPUT or ENABLE_LINE_INPUT or ENABLE_ECHO_INPUT or @@ -1340,6 +1362,39 @@ begin IDEActive:=true; end; +{$ifdef debug} + +procedure TWindowsScreen.Complain(St : string); +begin + if IDEActive then + DebugMessage('',St,0,0) + else + Writeln(stderr,St); +end; + +procedure TWindowsScreen.SetConsoleMode(FH : Handle;Mode: DWord); +var + Test: DWord; +begin + If not Windows.SetConsoleMode(FH,Mode) then + begin + Complain('SetConsoleMode call failed GetLastError='+IntToStr(GetLastError)); + end + else + begin + if not GetConsoleMode(FH,Test) then + begin + Complain('GetConsoleMode call failed GetLastError='+IntToStr(GetLastError)); + end + else if (Test<>Mode) then + begin + Complain('GetConsoleMode result '+IntToStr(Test)+' <> '+ + IntToStr(Mode)); + end; + end; +end; +{$endif DEBUG} + {$endif} {****************************************************************************