From f58e010de1827838bab6969b5d180f1b3f38ba66 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 28 Jul 1999 23:11:17 +0000 Subject: [PATCH] * fixes from gabor --- ide/text/fpdebug.pas | 63 ++++++++++++++++++++++++------------------- ide/text/fpdesk.pas | 9 ++++--- ide/text/fpmdebug.inc | 21 +++++++++++++-- ide/text/fpmrun.inc | 32 +++++++++++----------- ide/text/fpmsrch.inc | 7 +++-- ide/text/fpsymbol.pas | 13 +++++---- ide/text/fptools.pas | 11 +++++--- ide/text/fpvars.pas | 29 +++++++++++--------- ide/text/weditor.pas | 45 ++++++++++++++++++++----------- 9 files changed, 142 insertions(+), 88 deletions(-) diff --git a/ide/text/fpdebug.pas b/ide/text/fpdebug.pas index 67cbd5e3ae..7158775f13 100644 --- a/ide/text/fpdebug.pas +++ b/ide/text/fpdebug.pas @@ -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 diff --git a/ide/text/fpdesk.pas b/ide/text/fpdesk.pas index 36ebd6fffe..93e51f5e22 100644 --- a/ide/text/fpdesk.pas +++ b/ide/text/fpdesk.pas @@ -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 diff --git a/ide/text/fpmdebug.inc b/ide/text/fpmdebug.inc index 0b3ea4bdd8..8d3ac796cc 100644 --- a/ide/text/fpmdebug.inc +++ b/ide/text/fpmdebug.inc @@ -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 diff --git a/ide/text/fpmrun.inc b/ide/text/fpmrun.inc index 136f201965..dba5558bd7 100644 --- a/ide/text/fpmrun.inc +++ b/ide/text/fpmrun.inc @@ -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 diff --git a/ide/text/fpmsrch.inc b/ide/text/fpmsrch.inc index 31ac767c72..383380618e 100644 --- a/ide/text/fpmsrch.inc +++ b/ide/text/fpmsrch.inc @@ -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 diff --git a/ide/text/fpsymbol.pas b/ide/text/fpsymbol.pas index 16bbd0c002..5a18d407ba 100644 --- a/ide/text/fpsymbol.pas +++ b/ide/text/fpsymbol.pas @@ -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 diff --git a/ide/text/fptools.pas b/ide/text/fptools.pas index 2f97e179b0..0056f98c05 100644 --- a/ide/text/fptools.pas +++ b/ide/text/fptools.pas @@ -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 diff --git a/ide/text/fpvars.pas b/ide/text/fpvars.pas index 7e631cdb64..f01247f046 100644 --- a/ide/text/fpvars.pas +++ b/ide/text/fpvars.pas @@ -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 diff --git a/ide/text/weditor.pas b/ide/text/weditor.pas index 0262b19236..c34917c356 100644 --- a/ide/text/weditor.pas +++ b/ide/text/weditor.pas @@ -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))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