123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744 |
- {
- $Id$
- This file is part of the Free Pascal Integrated Development Environment
- Copyright (c) 1998 by Berczi Gabor
- Tool support for the IDE
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- unit FPTools;
- interface
- uses Objects,Drivers,Dialogs,Validate,
- FPViews;
- type
- PTool = ^TTool;
- TTool = object(TObject)
- constructor Init(const ATitle, AProgramPath, ACommandLine: string; AHotKey: word);
- function GetTitle: string; virtual;
- procedure GetParams(var ATitle, AProgramPath, ACommandLine: string; var AHotKey: word); virtual;
- procedure SetParams(const ATitle, AProgramPath, ACommandLine: string; const AHotKey: word); virtual;
- destructor Done; virtual;
- private
- Title : PString;
- ProgramPath : PString;
- CommandLine : PString;
- HotKey : word;
- end;
- PToolCollection = ^TToolCollection;
- TToolCollection = object(TCollection)
- function At(Index: sw_Integer): PTool;
- end;
- PToolListBox = ^TToolListBox;
- TToolListBox = object(TAdvancedListBox)
- function GetText(Item: sw_integer; MaxLen: Integer): String; virtual;
- end;
- PToolParamValidator = ^TToolParamValidator;
- TToolParamValidator = object(TValidator)
- function IsValid(const S: string): Boolean; virtual;
- procedure Error; virtual;
- private
- ErrorPos: integer;
- end;
- PToolItemDialog = ^TToolItemDialog;
- TToolItemDialog = object(TCenterDialog)
- constructor Init(ATool: PTool);
- function Execute: Word; virtual;
- private
- Tool : PTool;
- TitleIL : PInputLine;
- ProgramIL: PInputLine;
- ParamIL : PInputLine;
- HotKeyRB : PRadioButtons;
- end;
- PToolsDialog = ^TToolsDialog;
- TToolsDialog = object(TCenterDialog)
- constructor Init;
- function Execute: Word; virtual;
- procedure HandleEvent(var Event: TEvent); virtual;
- private
- ToolsLB : PToolListBox;
- procedure Add;
- procedure Edit;
- procedure Delete;
- end;
- procedure InitTools;
- function GetToolCount: integer;
- function GetToolName(Idx: integer): string;
- function AddTool(Title, ProgramPath, Params: string; HotKey: word): integer;
- procedure GetToolParams(Idx: integer; var Title, ProgramPath, Params: string; var HotKey: word);
- procedure SetToolParams(Idx: integer; Title, ProgramPath, Params: string; HotKey: word);
- procedure DoneTools;
- function GetHotKeyName(Key: word): string;
- function ParseToolParams(var Params: string; CheckOnly: boolean): integer;
- implementation
- uses Dos,
- Commands,Views,App,MsgBox,
- FPConst,FPVars,FPUtils;
- type
- THotKeyDef = record
- Name : string[12];
- KeyCode : word;
- end;
- const
- HotKeys : array[0..9] of THotKeyDef =
- ( (Name : '~U~nassigned' ; KeyCode : kbNoKey ),
- (Name : 'Shift+F~2~' ; KeyCode : kbShiftF2 ),
- (Name : 'Shift+F~3~' ; KeyCode : kbShiftF3 ),
- (Name : 'Shift+F~4~' ; KeyCode : kbShiftF4 ),
- (Name : 'Shift+F~5~' ; KeyCode : kbShiftF5 ),
- (Name : 'Shift+F~6~' ; KeyCode : kbShiftF6 ),
- (Name : 'Shift+F~7~' ; KeyCode : kbShiftF7 ),
- (Name : 'Shift+F~8~' ; KeyCode : kbShiftF8 ),
- (Name : 'Shift+F~9~' ; KeyCode : kbShiftF9 ),
- (Name : 'Shift+F~1~0' ; KeyCode : kbShiftF10));
- Tools : PToolCollection = nil;
- function GetHotKeyCount: integer;
- begin
- GetHotKeyCount:=ord(High(HotKeys))-ord(Low(HotKeys))+1;
- end;
- function GetHotKeyNameByIdx(Idx: integer): string;
- begin
- GetHotKeyNameByIdx:=HotKeys[Idx].Name;
- end;
- function HotKeyToIdx(Key: word): integer;
- var Count,I: integer;
- Found: boolean;
- begin
- Count:=GetHotKeyCount; Found:=false;
- I:=0;
- while (I<Count) and (Found=false) do
- begin
- Found:=HotKeys[I].KeyCode=Key;
- if Found=false then
- Inc(I);
- end;
- if Found=false then I:=-1;
- HotKeyToIdx:=I;
- end;
- function IdxToHotKey(Idx: integer): word;
- var Count: integer;
- Key: word;
- begin
- Count:=GetHotKeyCount;
- if (0<=Idx) and (Idx<Count) then
- Key:=HotKeys[Idx].KeyCode
- else
- Key:=kbNoKey;
- IdxToHotKey:=Key;
- end;
- function GetHotKeyName(Key: word): string;
- var Idx: integer;
- S: string;
- begin
- Idx:=HotKeyToIdx(Key);
- if Idx=0 then S:='' else
- if Idx=-1 then S:='???' else
- S:=GetHotKeyNameByIdx(Idx);
- GetHotKeyName:=S;
- end;
- constructor TTool.Init(const ATitle, AProgramPath, ACommandLine: string; AHotKey: word);
- begin
- inherited Init;
- SetParams(ATitle,AProgramPath,ACommandLine,AHotKey);
- end;
- function TTool.GetTitle: string;
- begin
- GetTitle:=KillTilde(GetStr(Title));
- end;
- procedure TTool.GetParams(var ATitle, AProgramPath, ACommandLine: string; var AHotKey: word);
- begin
- ATitle:=GetStr(Title); AProgramPath:=GetStr(ProgramPath);
- ACommandLine:=GetStr(CommandLine);
- AHotKey:=HotKey;
- end;
- procedure TTool.SetParams(const ATitle, AProgramPath, ACommandLine: string; const AHotKey: word);
- begin
- if Title<>nil then DisposeStr(Title); Title:=nil;
- if ProgramPath<>nil then DisposeStr(ProgramPath); ProgramPath:=nil;
- if CommandLine<>nil then DisposeStr(CommandLine); CommandLine:=nil;
- Title:=NewStr(ATitle); ProgramPath:=NewStr(AProgramPath);
- CommandLine:=NewStr(ACommandLine);
- HotKey:=AHotKey;
- end;
- destructor TTool.Done;
- begin
- inherited Done;
- if Title<>nil then DisposeStr(Title);
- if ProgramPath<>nil then DisposeStr(ProgramPath);
- if CommandLine<>nil then DisposeStr(CommandLine);
- end;
- function TToolCollection.At(Index: sw_Integer): PTool;
- begin
- At:=inherited At(Index);
- end;
- function TToolListBox.GetText(Item: sw_integer; MaxLen: Integer): String;
- var S: string;
- P: PTool;
- begin
- P:=List^.At(Item);
- S:=P^.GetTitle;
- GetText:=copy(S,1,MaxLen);
- end;
- procedure InitTools;
- begin
- if Tools<>nil then DoneTools;
- New(Tools, Init(10,20));
- end;
- function GetToolCount: integer;
- var Count: integer;
- begin
- if Tools=nil then Count:=0 else
- Count:=Tools^.Count;
- GetToolCount:=Count;
- end;
- function GetToolName(Idx: integer): string;
- var S1,S2: string;
- W: word;
- begin
- GetToolParams(Idx,S1,S2,S2,W);
- GetToolName:=KillTilde(S1);
- end;
- function AddTool(Title, ProgramPath, Params: string; HotKey: word): integer;
- var P: PTool;
- begin
- if Tools=nil then InitTools;
- New(P, Init(Title,ProgramPath,Params,HotKey));
- Tools^.Insert(P);
- AddTool:=Tools^.IndexOf(P);
- end;
- procedure GetToolParams(Idx: integer; var Title, ProgramPath, Params: string; var HotKey: word);
- var P: PTool;
- begin
- P:=Tools^.At(Idx);
- P^.GetParams(Title,ProgramPath,Params,HotKey);
- end;
- procedure SetToolParams(Idx: integer; Title, ProgramPath, Params: string; HotKey: word);
- var P: PTool;
- begin
- P:=Tools^.At(Idx);
- P^.GetParams(Title,ProgramPath,Params,HotKey);
- end;
- procedure DoneTools;
- begin
- if Tools<>nil then Dispose(Tools, Done); Tools:=nil;
- end;
- procedure TToolParamValidator.Error;
- begin
- MsgParms[1].Long:=ErrorPos;
- ErrorBox(^C'Error parsing parameters line at line position %d.',@MsgParms);
- end;
- function TToolParamValidator.IsValid(const S: string): Boolean;
- var P: string;
- begin
- P:=S;
- ErrorPos:=ParseToolParams(P,true);
- IsValid:=ErrorPos=0;
- end;
- constructor TToolItemDialog.Init(ATool: PTool);
- var R,R2,R3: TRect;
- Items: PSItem;
- I: integer;
- KeyCount: integer;
- begin
- KeyCount:=GetHotKeyCount;
- R.Assign(0,0,60,Max(3+KeyCount,12));
- inherited Init(R,'Modify/New Tool');
- Tool:=ATool;
- GetExtent(R); R.Grow(-3,-2); R3.Copy(R);
- Inc(R.A.Y); R.B.Y:=R.A.Y+1; R.B.X:=R.A.X+36;
- New(TitleIL, Init(R, 128)); Insert(TitleIL);
- R2.Copy(R); R2.Move(-1,-1); Insert(New(PLabel, Init(R2, '~T~itle', TitleIL)));
- R.Move(0,3);
- New(ProgramIL, Init(R, 128)); Insert(ProgramIL);
- R2.Copy(R); R2.Move(-1,-1); Insert(New(PLabel, Init(R2, 'Program ~p~ath', ProgramIL)));
- R.Move(0,3);
- New(ParamIL, Init(R, 128)); Insert(ParamIL);
- ParamIL^.SetValidator(New(PToolParamValidator, Init));
- R2.Copy(R); R2.Move(-1,-1); Insert(New(PLabel, Init(R2, 'Command ~l~ine', ParamIL)));
- R.Copy(R3); Inc(R.A.X,38); R.B.Y:=R.A.Y+KeyCount;
- Items:=nil;
- for I:=KeyCount-1 downto 0 do
- Items:=NewSItem(GetHotKeyNameByIdx(I), Items);
- New(HotKeyRB, Init(R, Items));
- Insert(HotKeyRB);
- InsertButtons(@Self);
- TitleIL^.Select;
- end;
- function TToolItemDialog.Execute: Word;
- var R: word;
- S1,S2,S3: string;
- W: word;
- L: longint;
- begin
- Tool^.GetParams(S1,S2,S3,W);
- TitleIL^.SetData(S1); ProgramIL^.SetData(S2); ParamIL^.SetData(S3);
- L:=HotKeyToIdx(W); if L=-1 then L:=255;
- HotKeyRB^.SetData(L);
- R:=inherited Execute;
- if R=cmOK then
- begin
- TitleIL^.GetData(S1); ProgramIL^.GetData(S2); ParamIL^.GetData(S3);
- HotKeyRB^.GetData(L); W:=IdxToHotKey(L);
- Tool^.SetParams(S1,S2,S3,W);
- end;
- Execute:=R;
- end;
- constructor TToolsDialog.Init;
- var R,R2,R3: TRect;
- SB: PScrollBar;
- begin
- R.Assign(0,0,46,16);
- inherited Init(R,'Tools');
- GetExtent(R); R.Grow(-3,-2); Inc(R.A.Y); R3.Copy(R); Dec(R.B.X,12);
- R2.Copy(R); R2.Move(1,0); R2.A.X:=R2.B.X-1;
- New(SB, Init(R2)); Insert(SB);
- New(ToolsLB, Init(R,1,SB));
- Insert(ToolsLB);
- R2.Copy(R); R2.Move(0,-1); R2.B.Y:=R2.A.Y+1; Dec(R2.A.X);
- Insert(New(PLabel, Init(R2, '~P~rogram titles', ToolsLB)));
- R.Copy(R3); R.A.X:=R.B.X-10; R.B.Y:=R.A.Y+2;
- Insert(New(PButton, Init(R, 'O~K~', cmOK, bfNormal)));
- R.Move(0,2);
- Insert(New(PButton, Init(R, '~E~dit', cmEditItem, bfDefault)));
- R.Move(0,2);
- Insert(New(PButton, Init(R, '~N~ew', cmAddItem, bfNormal)));
- R.Move(0,2);
- Insert(New(PButton, Init(R, '~D~elete', cmDeleteItem, bfNormal)));
- R.Move(0,2);
- Insert(New(PButton, Init(R, 'Cancel', cmCancel, bfNormal)));
- SelectNext(false);
- end;
- procedure TToolsDialog.HandleEvent(var Event: TEvent);
- var DontClear: boolean;
- begin
- case Event.What of
- evKeyDown :
- begin
- DontClear:=false;
- case Event.KeyCode of
- kbIns :
- Message(@Self,evCommand,cmAddItem,nil);
- kbDel :
- Message(@Self,evCommand,cmDeleteItem,nil);
- else DontClear:=true;
- end;
- if DontClear=false then ClearEvent(Event);
- end;
- evBroadcast :
- case Event.Command of
- cmListItemSelected :
- if Event.InfoPtr=pointer(ToolsLB) then
- Message(@Self,evCommand,cmEditItem,nil);
- end;
- evCommand :
- begin
- DontClear:=false;
- case Event.Command of
- cmAddItem : Add;
- cmDeleteItem : Delete;
- cmEditItem : Edit;
- else DontClear:=true;
- end;
- if DontClear=false then ClearEvent(Event);
- end;
- end;
- inherited HandleEvent(Event);
- end;
- function TToolsDialog.Execute: Word;
- var R: word;
- C: PToolCollection;
- I: integer;
- S1,S2,S3: string;
- W: word;
- begin
- New(C, Init(10,20));
- if Tools<>nil then
- for I:=0 to Tools^.Count-1 do
- begin
- Tools^.At(I)^.GetParams(S1,S2,S3,W);
- C^.Insert(New(PTool, Init(S1,S2,S3,W)));
- end;
- ToolsLB^.NewList(C);
- R:=inherited Execute;
- if R=cmOK then
- begin
- if Tools<>nil then Dispose(Tools, Done);
- Tools:=C;
- Message(Application,evBroadcast,cmUpdateTools,nil);
- end
- else
- Dispose(C, Done);
- Execute:=R;
- end;
- procedure TToolsDialog.Add;
- var P: PTool;
- IC: boolean;
- S1,S2,S3: string;
- W: word;
- begin
- if ToolsLB^.Range>=MaxToolCount then
- begin InformationBox(^C'Can''t install more tools...',nil); Exit; end;
- IC:=ToolsLB^.Range=0;
- if IC=false then
- begin
- P:=ToolsLB^.List^.At(ToolsLB^.Focused);
- P^.GetParams(S1,S2,S3,W);
- end
- else
- begin
- S1:=''; S2:=''; S3:=''; W:=0;
- end;
- New(P, Init(S1,S2,S3,W));
- if Application^.ExecuteDialog(New(PToolItemDialog, Init(P)), nil)=cmOK then
- begin
- ToolsLB^.List^.Insert(P);
- ToolsLB^.SetRange(ToolsLB^.List^.Count);
- ReDraw;
- end
- else
- Dispose(P, Done);
- end;
- procedure TToolsDialog.Edit;
- var P: PTool;
- begin
- if ToolsLB^.Range=0 then Exit;
- P:=ToolsLB^.List^.At(ToolsLB^.Focused);
- Application^.ExecuteDialog(New(PToolItemDialog, Init(P)), nil);
- ReDraw;
- end;
- procedure TToolsDialog.Delete;
- begin
- if ToolsLB^.Range=0 then Exit;
- ToolsLB^.List^.AtFree(ToolsLB^.Focused);
- ToolsLB^.SetRange(ToolsLB^.List^.Count);
- ReDraw;
- end;
- procedure ReplaceStr(var S: string; const What,NewS: string);
- var I : integer;
- begin
- repeat
- I:=Pos(What,S);
- if I>0 then
- begin
- Delete(S,I,length(What));
- Insert(NewS,S,I);
- end;
- until I=0;
- end;
- procedure ReplaceStrI(var S: string; What: string; const NewS: string);
- var I : integer;
- UpcaseS: string;
- begin
- UpcaseS:=UpcaseStr(S); What:=UpcaseStr(What);
- repeat
- I:=Pos(What,UpcaseS);
- if I>0 then
- begin
- Delete(S,I,length(What));
- Insert(NewS,S,I);
- end;
- until I=0;
- end;
- function ParseToolParams(var Params: string; CheckOnly: boolean): integer;
- var Err: integer;
- W: PSourceWindow;
- procedure ParseParams(Pass: integer);
- var I: integer;
- function IsAlpha(Ch: char): boolean;
- begin
- IsAlpha:=(Upcase(Ch) in['A'..'Z','_','$']);
- end;
- function ReplacePart(StartP,EndP: integer; const S: string): integer;
- begin
- Params:=copy(Params,1,StartP-1)+S+copy(Params,EndP+1,255);
- ReplacePart:=length(S)-(EndP-StartP+1);
- end;
- function Consume(Ch: char): boolean;
- var OK: boolean;
- begin
- OK:=Params[I]=Ch;
- if OK then Inc(I);
- Consume:=OK;
- end;
- function ReadTill(var S: string; C: char): boolean;
- var Found: boolean;
- begin
- Found:=false; S:='';
- while (I<=length(Params)) and (Found=false) do
- begin
- Found:=Params[I]=C;
- if Found=false then
- begin
- S:=S+Params[I];
- Inc(I);
- end;
- end;
- ReadTill:=Found;
- end;
- var C,PrevC: char;
- WordS: string;
- LastWordStart: integer;
- L: longint;
- S: string;
- D: DirStr; N: NameStr; E: ExtStr;
- begin
- I:=1; WordS:=''; LastWordStart:=I; PrevC:=' ';
- while (I<=length(Params)+1) and (Err=0) do
- begin
- if I<=length(Params) then C:=Params[I];
- if (I<=length(Params)) and IsAlpha(C) then
- begin
- if (I=1) or (IsAlpha(PrevC)=false) then
- begin WordS:=''; LastWordStart:=I; end;
- { if IsAlpha(C) then ForceConcat:=false;}
- WordS:=WordS+C;
- end
- else
- begin
- WordS:=UpcaseStr(Trim(WordS));
- if WordS<>'' then
- if (WordS='$COL') then
- begin
- if (Pass=1) then
- begin
- if W=nil then L:=0 else
- L:=W^.Editor^.CurPos.X+1;
- I:=I+ReplacePart(LastWordStart,I-1,IntToStr(L));
- end;
- end else
- if (WordS='$CONFIG') then
- begin
- if (Pass=1) then
- I:=I+ReplacePart(LastWordStart,I-1,INIPath);
- end else
- if (WordS='$DIR') then
- begin
- if (Pass=2) then
- if Consume('(')=false then Err:=I else
- if ReadTill(S,')')=false then Err:=I else
- begin
- Consume(')');
- FSplit(S,D,N,E);
- I:=I+ReplacePart(LastWordStart,I-1,D);
- end;
- end else
- if (WordS='$DRIVE') then
- begin
- if (Pass=2) then
- if Consume('(')=false then Err:=I else
- if ReadTill(S,')')=false then Err:=I else
- begin
- Consume(')');
- FSplit(S,D,N,E);
- L:=Pos(':',D); if L=0 then L:=-1;
- D:=copy(D,1,L+1);
- I:=I+ReplacePart(LastWordStart,I-1,D);
- end;
- end else
- if (WordS='$EDNAME') then
- begin
- if (Pass=1) then
- begin
- if W=nil then S:='' else
- S:=W^.Editor^.FileName;
- I:=I+ReplacePart(LastWordStart,I-1,S);
- end;
- end else
- if (WordS='$EXENAME') then
- begin
- if (Pass=1) then
- I:=I+ReplacePart(LastWordStart,I-1,EXEFile);
- end else
- if (WordS='$EXT') then
- begin
- if (Pass=2) then
- if Consume('(')=false then Err:=I else
- if ReadTill(S,')')=false then Err:=I else
- begin
- Consume(')');
- FSplit(S,D,N,E); E:=copy(E,2,255);
- I:=I+ReplacePart(LastWordStart,I-1,E);
- end;
- end else
- if (WordS='$LINE') then
- begin
- if (Pass=1) then
- begin
- if W=nil then L:=0 else
- L:=W^.Editor^.CurPos.Y+1;
- I:=I+ReplacePart(LastWordStart,I-1,IntToStr(L));
- end;
- end else
- if (WordS='$NAME') then
- begin
- if (Pass=2) then
- if Consume('(')=false then Err:=I else
- if ReadTill(S,')')=false then Err:=I else
- begin
- Consume(')');
- FSplit(S,D,N,E);
- I:=I+ReplacePart(LastWordStart,I-1,N);
- end;
- end else
- if (WordS='$NAMEEXT') then
- begin
- if (Pass=2) then
- if Consume('(')=false then Err:=I else
- if ReadTill(S,')')=false then Err:=I else
- begin
- Consume(')');
- FSplit(S,D,N,E);
- I:=I+ReplacePart(LastWordStart,I-1,N+E);
- end;
- end else
- if (WordS='$NOSWAP') then
- begin
- if (Pass=1) then
- begin
- I:=I+ReplacePart(LastWordStart,I-1,'');
- end;
- end else
- if (WordS='$PROMPT') then
- begin
- if (Pass=3) then
- begin
- I:=I+ReplacePart(LastWordStart,I-1,'');
- if CheckOnly=false then
- begin
- S:=copy(Params,I+1,255);
- if InputBox('Program Arguments', '~E~nter program argument',
- S,255-I+1)=cmOK then
- begin
- ReplacePart(LastWordStart,255,S);
- I:=255;
- end
- else
- Err:=-1;
- end;
- end;
- end else
- if (WordS='$SAVE') then
- begin
- if (Pass=0) then
- if (Params[I]=' ') and (I<=255) then Params[I]:='_';
- end else
- if (WordS='$SAVE_ALL') then
- begin
- if (Pass=2) then
- begin
- I:=I+ReplacePart(LastWordStart,I-1,'');
- Message(Application,evCommand,cmSaveAll,nil);
- end;
- end else
- if (WordS='$SAVE_CUR') then
- begin
- if (Pass=2) then
- begin
- I:=I+ReplacePart(LastWordStart,I-1,'');
- Message(W,evCommand,cmSave,nil);
- end;
- end else
- if (WordS='$SAVE_PROMPT') then
- begin
- if (Pass=2) then
- begin
- I:=I+ReplacePart(LastWordStart,I-1,'');
- if W<>nil then
- if W^.Editor^.SaveAsk=false then
- Err:=-1;
- end;
- end else
- if copy(WordS,1,1)='$' then
- Err:=LastWordStart;
- WordS:='';
- end;
- PrevC:=C;
- Inc(I);
- end;
- end;
- var Pass: integer;
- begin
- W:=FirstEditorWindow;
- Err:=0;
- for Pass:=0 to 3 do
- begin
- ParseParams(Pass);
- if Err<>0 then Break;
- end;
- ParseToolParams:=Err;
- end;
- END.
- {
- $Log$
- Revision 1.1 1999-01-21 11:54:25 peter
- + tools menu
- + speedsearch in symbolbrowser
- * working run command
- Revision 1.0 1999/01/16 10:43:31 gabor
- Original implementation
- }
|