* fixes from gabor

This commit is contained in:
peter 1999-07-28 23:11:17 +00:00
parent cb52b0ac0a
commit f58e010de1
9 changed files with 142 additions and 88 deletions

View File

@ -231,7 +231,7 @@ procedure DoneGDBWindow;
procedure InitBreakpoints;
procedure DoneBreakpoints;
procedure InitWatches;
procedure DoneWatches;
procedure DoneWatches;
implementation
@ -315,10 +315,14 @@ end;
procedure TDebugController.Continue;
begin
{$ifdef NODEBUG}
NoDebugger;
{$else}
if not debuggee_started then
Run
else
inherited Continue;
{$endif NODEBUG}
end;
procedure TDebugController.UntilReturn;
@ -921,26 +925,26 @@ begin
end;
(* function TBreakpointListBox.AddModuleName(const Name: string): PString;
var P: PString;
var P: PString;
begin
if ModuleNames<>nil then
P:=ModuleNames^.Add(Name)
else
P:=nil;
P:=nil;
AddModuleName:=P;
end; *)
function TBreakpointListBox.GetText(Item,MaxLen: Sw_Integer): String;
var P: PBreakpointItem;
S: string;
S: string;
begin
P:=List^.At(Item);
P:=List^.At(Item);
S:=P^.GetText(MaxLen);
GetText:=copy(S,1,MaxLen);
end;
procedure TBreakpointListBox.Clear;
begin
begin
if assigned(List) then
Dispose(List, Done);
List:=nil;
@ -1058,12 +1062,12 @@ var
B: TDrawBuffer;
Text: String;
SCOff: Byte;
TC: byte;
procedure MT(var C: word); begin if TC<>0 then C:=(C and $ff0f) or (TC and $f0); end;
TC: byte;
procedure MT(var C: word); begin if TC<>0 then C:=(C and $ff0f) or (TC and $f0); end;
begin
if (Owner<>nil) then TC:=ord(Owner^.GetColor(6)) else TC:=0;
if State and (sfSelected + sfActive) = (sfSelected + sfActive) then
begin
begin
NormalColor := GetColor(1);
FocusedColor := GetColor(3);
SelectedColor := GetColor(4);
@ -1073,19 +1077,19 @@ begin
SelectedColor := GetColor(4);
end;
if Transparent then
begin MT(NormalColor); MT(SelectedColor); end;
begin MT(NormalColor); MT(SelectedColor); end;
if NoSelection then
SelectedColor:=NormalColor;
if HScrollBar <> nil then Indent := HScrollBar^.Value
else Indent := 0;
ColWidth := Size.X div NumCols + 1;
for I := 0 to Size.Y - 1 do
ColWidth := Size.X div NumCols + 1;
for I := 0 to Size.Y - 1 do
begin
for J := 0 to NumCols-1 do
begin
Item := J*Size.Y + I + TopItem;
CurCol := J*ColWidth;
if (State and (sfSelected + sfActive) = (sfSelected + sfActive)) and
if (State and (sfSelected + sfActive) = (sfSelected + sfActive)) and
(Focused = Item) and (Range > 0) then
begin
Color := FocusedColor;
@ -1094,15 +1098,15 @@ begin
end
else if (Item < Range) and IsSelected(Item) then
begin
Color := SelectedColor;
SCOff := 2;
Color := SelectedColor;
SCOff := 2;
end
else
begin
Color := NormalColor;
begin
Color := NormalColor;
SCOff := 4;
end;
MoveChar(B[CurCol], ' ', Color, ColWidth);
MoveChar(B[CurCol], ' ', Color, ColWidth);
if Item < Range then
begin
Text := GetText(Item, ColWidth + Indent);
@ -1212,8 +1216,8 @@ end;
procedure TBreakpointsWindow.ClearBreakpoints;
begin
BreakLB^.Clear;
ReDraw;
end;
ReDraw;
end;
procedure TBreakpointsWindow.ReloadBreakpoints;
procedure InsertInBreakLB(P : PBreakpoint);
@ -1231,10 +1235,10 @@ procedure TBreakpointsWindow.SizeLimits(var Min, Max: TPoint);
begin
inherited SizeLimits(Min,Max);
Min.X:=40; Min.Y:=18;
end;
end;
procedure TBreakpointsWindow.Close;
begin
begin
Hide;
end;
@ -1273,7 +1277,7 @@ procedure TBreakpointsWindow.Update;
begin
ClearBreakpoints;
ReloadBreakpoints;
end;
end;
destructor TBreakpointsWindow.Done;
begin
@ -1733,8 +1737,8 @@ begin
end;
end;
inherited HandleEvent(Event);
end;
end;
(* constructor TWatchesListBox.Load(var S: TStream);
procedure TWatchesListBox.Store(var S: TStream); *)
destructor TWatchesListBox.Done;
@ -1778,7 +1782,7 @@ end;
Dispose(WLB,done);
inherited done;
end;
{****************************************************************************
TWatchItemDialog
@ -1948,7 +1952,10 @@ end.
{
$Log$
Revision 1.22 1999-07-12 13:14:15 pierre
Revision 1.23 1999-07-28 23:11:17 peter
* fixes from gabor
Revision 1.22 1999/07/12 13:14:15 pierre
* LineEnd bug corrected, now goes end of text even if selected
+ Until Return for debugger
+ Code for Quit inside GDB Window

View File

@ -90,7 +90,7 @@ begin
{$ifndef DEV}Exit;{$endif}
F^.CreateResource(resDesktopFlags,rcBinary,0);
F^.AddResourceEntry(resDesktopFlags,langDefault,0,@DesktopFileFlags,
F^.AddResourceEntry(resDesktopFlags,langDefault,0,DesktopFileFlags,
SizeOf(DesktopFileFlags));
end;
@ -107,7 +107,7 @@ begin
{$ifndef DEV}Exit;{$endif}
New(F, LoadFile(DesktopPath));
OK:=true;
end;
function SaveDesktop: boolean;
@ -137,7 +137,10 @@ end;
END.
{
$Log$
Revision 1.5 1999-06-30 23:58:13 pierre
Revision 1.6 1999-07-28 23:11:18 peter
* fixes from gabor
Revision 1.5 1999/06/30 23:58:13 pierre
+ BreakpointsList Window implemented
with Edit/New/Delete functions
+ Individual breakpoint dialog with support for all types

View File

@ -43,11 +43,14 @@ end;
procedure TIDEApp.DoShowCallStack;
begin
NotImplemented;
NotImplemented;
end;
procedure TIDEApp.DoShowBreakpointList;
begin
{$ifdef NODEBUG}
NoDebugger;
{$else}
If assigned(BreakpointsWindow) then
begin
BreakpointsWindow^.Update;
@ -59,10 +62,14 @@ begin
New(BreakpointsWindow,Init);
Desktop^.Insert(BreakpointsWindow);
end;
{$endif NODEBUG}
end;
procedure TIDEApp.DoShowWatches;
begin
{$ifdef NODEBUG}
NoDebugger;
{$else}
If assigned(WatchesWindow) then
begin
WatchesWindow^.Update;
@ -73,9 +80,15 @@ begin
New(WatchesWindow,Init);
Desktop^.Insert(WatchesWindow);
end;
{$endif NODEBUG}
end;
procedure TIDEApp.DoAddWatch;
{$ifdef NODEBUG}
begin
NoDebugger;
end;
{$else}
var
P: PWatch;
EditorWindow : PSourceWindow;
@ -95,10 +108,14 @@ begin
else
dispose(P,Done);
end;
{$endif NODEBUG}
{
$Log$
Revision 1.6 1999-07-10 01:24:19 pierre
Revision 1.7 1999-07-28 23:11:19 peter
* fixes from gabor
Revision 1.6 1999/07/10 01:24:19 pierre
+ First implementation of watches window
Revision 1.5 1999/06/30 23:58:17 pierre

View File

@ -82,22 +82,21 @@ begin
if not debugger^.debuggee_started then
Debugger^.StartTrace
else
Debugger^.TraceStep;
{ I think we should not try to go deeper !
if the source is not found PM }
While (Debugger^.InvalidSourceLine and
Debugger^.TraceStep;
{ I think we should not try to go deeper !
if the source is not found PM }
While (Debugger^.InvalidSourceLine and
Debugger^.debuggee_started and
not Debugger^.error) do
begin
Inc(Debugger^.HiddenStepsCount);
Debugger^.TraceNext;
end;
Debugger^.AnnotateError;
{$else NODEBUG}
NoDebugger;
{$endif NODEBUG}
end;
begin
Inc(Debugger^.HiddenStepsCount);
Debugger^.TraceNext;
end;
Debugger^.AnnotateError;
{$else NODEBUG}
NoDebugger;
{$endif NODEBUG}
end;
procedure TIDEApp.DoRun;
begin
@ -239,7 +238,10 @@ end;
{
$Log$
Revision 1.16 1999-07-12 13:14:19 pierre
Revision 1.17 1999-07-28 23:11:20 peter
* fixes from gabor
Revision 1.16 1999/07/12 13:14:19 pierre
* LineEnd bug corrected, now goes end of text even if selected
+ Until Return for debugger
+ Code for Quit inside GDB Window

View File

@ -95,7 +95,7 @@ begin
OpenSymbolBrowser(0,0,'Units','Global scope',nil,S,nil,nil,nil);
end;
function SymbolDialog(const S : string) : PDialog;
function SymbolDialog(S : string) : PDialog;
var D: PDialog;
R,R1,R2: TRect;
IL: PInputLine;
@ -137,7 +137,10 @@ end;
{
$Log$
Revision 1.10 1999-06-29 12:49:55 pierre
Revision 1.11 1999-07-28 23:11:21 peter
* fixes from gabor
Revision 1.10 1999/06/29 12:49:55 pierre
* SearchSymbol works
Revision 1.9 1999/06/28 19:32:22 peter

View File

@ -193,7 +193,7 @@ begin
Dispose(ModulesCollection,done);
ModulesCollection:=nil;
end;
end;
end;
function NewBrowserTabItem(ASign: char; ALink: PView; ANext: PBrowserTabItem): PBrowserTabItem;
var P: PBrowserTabItem;
@ -681,7 +681,7 @@ end;
destructor TSymbolInheritanceView.Done;
begin
{ do not dispose,
belongs to a symbolcollection (PM)
belongs to a symbolcollection (PM)
if assigned(Root) then
dispose(Root,done); }
Inherited Done;
@ -737,10 +737,10 @@ begin
if P=nil then Exit;
S:=PObjectSymbol(P)^.Symbol;
{ this happens for the top objects view (PM) }
if S=nil then exit;
if S^.Ancestor=nil then Anc:=nil else
Anc:=SearchObjectForSymbol(S^.Ancestor);
OpenSymbolBrowser(Origin.X-1,FOC-Delta.Y+1,
@ -1160,7 +1160,10 @@ end;
END.
{
$Log$
Revision 1.17 1999-06-28 12:35:05 pierre
Revision 1.18 1999-07-28 23:11:22 peter
* fixes from gabor
Revision 1.17 1999/06/28 12:35:05 pierre
+ CloseAllBrowsers needed before compilation to avoid problems
+ ModulesCollection and GlobalsCollection to avoid memory leaks

View File

@ -111,7 +111,7 @@ type
constructor Load(var S: TStream);
procedure Store(var S: TStream);
destructor Done; virtual;
procedure FocusItem(i : sw_integer);
procedure FocusItem(i : sw_integer);
procedure SizeLimits(var Min, Max: TPoint); virtual;
private
MsgLB : PToolMessageListBox;
@ -1440,8 +1440,8 @@ end;
procedure TMessagesWindow.FocusItem(i : sw_integer);
begin
MsgLB^.FocusItem(i);
end;
end;
procedure TMessagesWindow.HandleEvent(var Event: TEvent);
begin
case Event.What of
@ -1505,7 +1505,10 @@ end;
END.
{
$Log$
Revision 1.11 1999-07-12 13:14:21 pierre
Revision 1.12 1999-07-28 23:11:24 peter
* fixes from gabor
Revision 1.11 1999/07/12 13:14:21 pierre
* LineEnd bug corrected, now goes end of text even if selected
+ Until Return for debugger
+ Code for Quit inside GDB Window

View File

@ -33,19 +33,19 @@ type
const ClipboardWindow : PClipboardWindow = nil;
CalcWindow : PCalculator = nil;
RecentFileCount : integer = 0;
OpenExts : string[80] = '*.pas;*.pp;*.inc';
HighlightExts : string[80] = '*.pas;*.pp;*.inc';
OpenExts : string{$ifdef GABOR}[24]{$endif} = '*.pas;*.pp;*.inc';
HighlightExts : string{$ifdef GABOR}[24]{$endif} = '*.pas;*.pp;*.inc';
TabsPattern : string{$ifdef GABOR}[30]{$endif} = 'make*;make*.*';
SourceDirs : string{$ifdef GABOR}[30]{$endif} = '';
PrimaryFile : string{$ifdef GABOR}[80]{$endif} = '';
PrimaryFileMain : string{$ifdef GABOR}[80]{$endif} = '';
PrimaryFile : string{$ifdef GABOR}[60]{$endif} = '';
PrimaryFileMain : string{$ifdef GABOR}[60]{$endif} = '';
PrimaryFileSwitches : string{$ifdef GABOR}[30]{$endif} = '';
PrimaryFilePara : string = '';
PrimaryFilePara : string{$ifdef GABOR}[40]{$endif} = '';
GDBOutputFile : string{$ifdef GABOR}[30]{$endif} = 'gdb$$$.txt';
IsEXECompiled : boolean = false;
LinkAfter : boolean = true;
MainFile : string{$ifdef GABOR}[80]{$endif} = '';
EXEFile : string{$ifdef GABOR}[80]{$endif} = '';
MainFile : string{$ifdef GABOR}[60]{$endif} = '';
EXEFile : string{$ifdef GABOR}[60]{$endif} = '';
CompilationPhase : TCompPhase = cpNothing;
ProgramInfoWindow: PProgramInfoWindow = nil;
GDBWindow : PGDBWindow = nil;
@ -55,16 +55,16 @@ const ClipboardWindow : PClipboardWindow = nil;
HeapView : PFPHeapView = nil;
HelpFiles : WUtils.PUnsortedStringCollection = nil;
ShowStatusOnError: boolean = true;
StartupDir : string = '.'+DirSep;
IDEDir : string = '.'+DirSep;
INIPath : string = ININame;
SwitchesPath : string = SwitchesName;
StartupDir : string{$ifdef GABOR}[50]{$endif} = '.'+DirSep;
IDEDir : string{$ifdef GABOR}[50]{$endif} = '.'+DirSep;
INIPath : string{$ifdef GABOR}[50]{$endif} = ININame;
SwitchesPath : string{$ifdef GABOR}[50]{$endif} = SwitchesName;
CtrlMouseAction : integer = acTopicSearch;
AltMouseAction : integer = acBrowseSymbol;
StartupOptions : longint = 0;
LastExitCode : integer = 0;
ASCIIChart : PFPASCIIChart = nil;
DesktopPath : string = DesktopName;
DesktopPath : string{$ifdef GABOR}[50]{$endif} = DesktopName;
DesktopFileFlags : longint = dfHistoryLists+dfOpenWindows;
DesktopLocation : byte = dlConfigFileDir;
AutoSaveOptions : longint = asEnvironment+asDesktop;
@ -83,7 +83,10 @@ implementation
END.
{
$Log$
Revision 1.19 1999-07-10 01:24:21 pierre
Revision 1.20 1999-07-28 23:11:25 peter
* fixes from gabor
Revision 1.19 1999/07/10 01:24:21 pierre
+ First implementation of watches window
Revision 1.18 1999/06/30 23:58:19 pierre

View File

@ -2047,7 +2047,7 @@ end;
procedure TCodeEditor.JumpSelStart;
begin
if ValidBlock then
SetCurPtr(SelStart.X,SelEnd.X);
SetCurPtr(SelStart.X,SelStart.Y);
end;
procedure TCodeEditor.JumpSelEnd;
@ -2514,7 +2514,7 @@ begin
S:=GetLineText(CurPos.Y);
if CharIdxToLinePos(CurPos.Y,length(S))<CurPos.X then
begin
S:=S+CharStr(' ',CurPos.X-CharIdxToLinePos(CurPos.Y,length(S))-1);
S:=S+CharStr(' ',CurPos.X-CharIdxToLinePos(CurPos.Y,length(S)){-1});
SetLineText(CurPos.Y,S);
end;
CI:=LinePosToCharIdx(CurPos.Y,CurPos.X);
@ -2734,7 +2734,7 @@ var S: string;
((AreaStart.Y<Y) and (Y<AreaEnd.Y)) or
((AreaEnd.Y=Y) and (X<=AreaEnd.X));
end;
var CurDY: sw_integer;
begin
Inc(SearchRunCount);
@ -2800,6 +2800,7 @@ begin
Owner^.Lock;
if InArea(X,Y) then
repeat
CurDY:=DY;
S:=GetDisplayText(Y);
P:=ContainsText(FindStr,S,X+1);
Found:=P<>0;
@ -2817,6 +2818,11 @@ begin
LeftOK:=(A.X<=0) or (not( (S[A.X] in AlphaChars) or (S[A.X] in NumberChars) ));
RightOK:=(B.X>=length(S)) or (not( (S[B.X+1] in AlphaChars) or (S[B.X+1] in NumberChars) ));
Found:=LeftOK and RightOK;
if Found=false then
begin
CurDY:=0;
X:=B.X+1;
end;
end;
if Found then
@ -2862,9 +2868,9 @@ begin
end;
end;
if CanExit=false then
if (CanExit=false) and (CurDY<>0) then
begin
inc(Y,DY);
inc(Y,CurDY);
if SForward then
X:=0
else
@ -2982,17 +2988,21 @@ var
var MatchedSymbol: boolean;
MatchingSymbol: string;
function MatchesAnySpecSymbol(const What: string; SClass: TSpecSymbolClass; PartialMatch: boolean): boolean;
function MatchesAnySpecSymbol(What: string; SClass: TSpecSymbolClass; PartialMatch, CaseInsensitive: boolean): boolean;
var S: string;
I: Sw_integer;
Match,Found: boolean;
begin
Found:=false;
if CaseInsensitive then
What:=UpcaseStr(What);
if What<>'' then
for I:=1 to GetSpecSymbolCount(SClass) do
begin
SymbolIndex:=I;
S:=GetSpecSymbol(SClass,I-1);
if CaseInsensitive then
S:=UpcaseStr(S);
if PartialMatch then Match:=MatchSymbol(What,S)
else Match:=What=S;
if Match then
@ -3004,48 +3014,48 @@ var
function IsCommentPrefix: boolean;
begin
IsCommentPrefix:=MatchesAnySpecSymbol(SymbolConcat,ssCommentPrefix,true);
IsCommentPrefix:=MatchesAnySpecSymbol(SymbolConcat,ssCommentPrefix,true,false);
end;
function IsSingleLineCommentPrefix: boolean;
begin
IsSingleLineCommentPrefix:=MatchesAnySpecSymbol(SymbolConcat,ssCommentSingleLinePrefix,true);
IsSingleLineCommentPrefix:=MatchesAnySpecSymbol(SymbolConcat,ssCommentSingleLinePrefix,true,false);
end;
function IsCommentSuffix: boolean;
begin
IsCommentSuffix:=(MatchesAnySpecSymbol(SymbolConcat,ssCommentSuffix,true))
IsCommentSuffix:=(MatchesAnySpecSymbol(SymbolConcat,ssCommentSuffix,true,false))
and (CurrentCommentType=SymbolIndex);
end;
function IsStringPrefix: boolean;
begin
IsStringPrefix:=MatchesAnySpecSymbol(SymbolConcat,ssStringPrefix,true);
IsStringPrefix:=MatchesAnySpecSymbol(SymbolConcat,ssStringPrefix,true,false);
end;
function IsStringSuffix: boolean;
begin
IsStringSuffix:=MatchesAnySpecSymbol(SymbolConcat,ssStringSuffix,true);
IsStringSuffix:=MatchesAnySpecSymbol(SymbolConcat,ssStringSuffix,true,false);
end;
function IsDirectivePrefix: boolean;
begin
IsDirectivePrefix:=MatchesAnySpecSymbol(SymbolConcat,ssDirectivePrefix,true);
IsDirectivePrefix:=MatchesAnySpecSymbol(SymbolConcat,ssDirectivePrefix,true,false);
end;
function IsDirectiveSuffix: boolean;
begin
IsDirectiveSuffix:=MatchesAnySpecSymbol(SymbolConcat,ssDirectiveSuffix,true);
IsDirectiveSuffix:=MatchesAnySpecSymbol(SymbolConcat,ssDirectiveSuffix,true,false);
end;
function IsAsmPrefix(const WordS: string): boolean;
begin
IsAsmPrefix:=MatchesAnySpecSymbol(WordS,ssAsmPrefix,false);
IsAsmPrefix:=MatchesAnySpecSymbol(WordS,ssAsmPrefix,false,true);
end;
function IsAsmSuffix(const WordS: string): boolean;
begin
IsAsmSuffix:=MatchesAnySpecSymbol(WordS,ssAsmSuffix,false);
IsAsmSuffix:=MatchesAnySpecSymbol(WordS,ssAsmSuffix,false,true);
end;
function GetCharClass(C: char): TCharClass;
@ -3949,7 +3959,10 @@ end;
END.
{
$Log$
Revision 1.38 1999-07-12 13:14:24 pierre
Revision 1.39 1999-07-28 23:11:26 peter
* fixes from gabor
Revision 1.38 1999/07/12 13:14:24 pierre
* LineEnd bug corrected, now goes end of text even if selected
+ Until Return for debugger
+ Code for Quit inside GDB Window