From 880072d723823194b1e71c3e78e2ca3a4568c51e Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Sat, 30 Jul 2011 11:32:58 +0200 Subject: [PATCH 01/29] MML/Core: Clean up os_linux. --- Units/MMLCore/os_linux.pas | 105 ++++++++++++++++++++----------------- 1 file changed, 56 insertions(+), 49 deletions(-) diff --git a/Units/MMLCore/os_linux.pas b/Units/MMLCore/os_linux.pas index 94bdeed..54dce59 100644 --- a/Units/MMLCore/os_linux.pas +++ b/Units/MMLCore/os_linux.pas @@ -20,15 +20,21 @@ Linux OS specific implementation for Mufasa Macro Library } -{$mode objfpc}{$H+} +{$mode objfpc}{$H+} unit os_linux; +{ + TODO's: + - Allow selecting a different X display + - Fix keyboard layout / SendString +} + interface uses Classes, SysUtils, mufasatypes, xlib, x, xutil, IOManager, XKeyInput, ctypes, xtest, syncobjs, mufasabase; - + type TNativeWindow = x.TWindow; @@ -43,7 +49,7 @@ interface TWindow = class(TWindow_Abstract) public - constructor Create(display: PDisplay; screennum: integer; window: x.TWindow); + constructor Create(display: PDisplay; screennum: integer; window: x.TWindow); destructor Destroy; override; procedure GetTargetDimensions(out w, h: integer); override; procedure GetTargetPosition(out left, top: integer); override; @@ -89,7 +95,7 @@ interface { X Error Handler } oldXHandler: TXErrorHandler; end; - + TIOManager = class(TIOManager_Abstract) public constructor Create; @@ -109,7 +115,7 @@ interface end; function MufasaXErrorHandler(para1:PDisplay; para2:PXErrorEvent):cint; cdecl; - + implementation uses GraphType, interfacebase, lcltype; @@ -126,7 +132,7 @@ implementation { This is extremely hacky, but also very useful. We have to install a X error handler, because otherwise X - will terminate out entire app on error. + will terminate our entire app on error. Since we want the right thread to recieve the right error, we have to fiddle a bit with threadvars, mutexes / semaphores. @@ -207,8 +213,8 @@ implementation end; { See if the semaphores / CS are initialised } - constructor TWindow.Create(display: PDisplay; screennum: integer; window: x.TWindow); - begin + constructor TWindow.Create(display: PDisplay; screennum: integer; window: x.TWindow); + begin inherited Create; self.display:= display; self.screennum:= screennum; @@ -227,8 +233,8 @@ implementation finally ErrorCS.Leave; end; - end; - + end; + destructor TWindow.Destroy; var erh: TXErrorHandler; @@ -304,8 +310,8 @@ implementation if ReceivedError then raise Exception.Create('Error: ActivateClient: ' + GetError); end; - - function TWindow.ReturnData(xs, ys, width, height: Integer): TRetData; + + function TWindow.ReturnData(xs, ys, width, height: Integer): TRetData; var w,h: integer; begin @@ -334,8 +340,8 @@ implementation dirty:= true; //XSetErrorHandler(Old_Handler); end; - - procedure TWindow.FreeReturnData; + + procedure TWindow.FreeReturnData; begin if dirty then begin @@ -413,40 +419,41 @@ implementation result := xmask and ButtonP > 0; end; -procedure TWindow.SendString(str: string); -var - I, L: Integer; - K: Byte; - HoldShift: Boolean; -begin - HoldShift := False; - L := Length(str); - for I := 1 to L do + { TODO: Check if this supports multiple keyboard layouts, probably not } + procedure TWindow.SendString(str: string); + var + I, L: Integer; + K: Byte; + HoldShift: Boolean; begin - if (((str[I] >= 'A') and (str[I] <= 'Z')) or - ((str[I] >= '!') and (str[I] <= '&')) or - ((str[I] >= '(') and (str[I] <= '+')) or - (str[I] = ':') or - ((str[I] >= '<') and (str[I] <= '@')) or - ((str[I] >= '^') and (str[I] <= '_')) or - ((str[I] >= '{') and (str[I] <= '~'))) then + HoldShift := False; + L := Length(str); + for I := 1 to L do begin - HoldKey(VK_SHIFT); - HoldShift := True; - end; - - K := GetKeyCode(str[I]); - HoldKey(K); - Sleep(20); - ReleaseKey(K); - - if (HoldShift) then - begin - HoldShift := False; - ReleaseKey(VK_SHIFT); + if (((str[I] >= 'A') and (str[I] <= 'Z')) or + ((str[I] >= '!') and (str[I] <= '&')) or + ((str[I] >= '(') and (str[I] <= '+')) or + (str[I] = ':') or + ((str[I] >= '<') and (str[I] <= '@')) or + ((str[I] >= '^') and (str[I] <= '_')) or + ((str[I] >= '{') and (str[I] <= '~'))) then + begin + HoldKey(VK_SHIFT); + HoldShift := True; + end; + + K := GetKeyCode(str[I]); + HoldKey(K); + Sleep(20); + ReleaseKey(K); + + if (HoldShift) then + begin + HoldShift := False; + ReleaseKey(VK_SHIFT); + end; end; end; -end; procedure TWindow.HoldKey(key: integer); begin @@ -474,7 +481,7 @@ end; Raise Exception.CreateFMT('GetSimpleKeyCode - char (%s) is not in A..z',[c]); end end; - + { ***implementation*** IOManager } constructor TIOManager.Create; @@ -499,17 +506,17 @@ end; { Get the Desktop Window } desktop:= RootWindow(display,screennum) end; - - procedure TIOManager.NativeFree; + + procedure TIOManager.NativeFree; begin XCloseDisplay(display); end; - + procedure TIOManager.SetDesktop; begin SetBothTargets(TWindow.Create(display, screennum, desktop)); end; - + function TIOManager.SetTarget(target: x.TWindow): integer; begin result := SetBothTargets(TWindow.Create(display, screennum, target)) From 841f228a0fd2d8ba8660c9863818e4aa29c80e73 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Sat, 30 Jul 2011 13:46:10 +0200 Subject: [PATCH 02/29] Tests: Add BmpBench. --- Tests/PS/bmpbench.simba | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Tests/PS/bmpbench.simba diff --git a/Tests/PS/bmpbench.simba b/Tests/PS/bmpbench.simba new file mode 100644 index 0000000..dc9acea --- /dev/null +++ b/Tests/PS/bmpbench.simba @@ -0,0 +1,34 @@ +program new; +//http://farm4.static.flickr.com/3067/2612399892_7df428d482.jpg +{Make the above bitmap your target} +var + Bmp : integer; + x,y : integer; + w,h : integer; + t, i, c: integer; +begin + Bmp := createBitmap(15, 10); + FastDrawClear(bmp, clRed); + GetClientDimensions(w,h); + writeln(w); + writeln(h); + + for c := 0 to 2 do + begin + writeln('cts: ' + inttostr(c)); + setcolortolerancespeed(c); + + t:=getsystemtime; + for i := 0 to 100 do + findBitmapToleranceIn(bmp,x,y,0,0,w-1,h-1,10); + writeln((getsystemtime-t) / 100.0); + if findBitmapToleranceIn(bmp,x,y,0,0,w-1,h-1,200) then + writeln('found'); + end; + + {if FindBitmapToleranceIn(bmp,x,y,0,0,w-1,h-1,300) then + begin + writeln('found'); + MoveMouse(x,y); + end;} +end. From 353d1f393d617db3eeef34cd77b12984ce4e16e3 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Sat, 30 Jul 2011 14:31:54 +0200 Subject: [PATCH 03/29] Lape: Update head. --- Units/lape | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Units/lape b/Units/lape index 940053e..b24c52b 160000 --- a/Units/lape +++ b/Units/lape @@ -1 +1 @@ -Subproject commit 940053e16d79c3d76b6b70d6a1bf56507ad0e627 +Subproject commit b24c52b9748c6f9f3e91a7a86f727022bf2fd6ce From a8664b3c573e6f76f3557e7ece056dc7d5dc640c Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Sun, 31 Jul 2011 13:56:47 +0200 Subject: [PATCH 04/29] Extensions: Add extension auto updater. --- Extensions/extension.sex | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Extensions/extension.sex diff --git a/Extensions/extension.sex b/Extensions/extension.sex new file mode 100644 index 0000000..ce79e60 --- /dev/null +++ b/Extensions/extension.sex @@ -0,0 +1,15 @@ +program ExtUpdater; +{$I ..\Extensions\Updater.sei} + +procedure Init; +var + EXT: integer; +begin + Settings.GetKeyValueDef('Extensions_Visible', 'false'); //Default Menu to be hidden =) + AddUpdater('Extensions', 'http://wizzup.org/static/srl/exten.tar.bz2', + 'http://wizzup.org/static/srl/exten_version', ScriptPath + {$IFDEF WINDOWS}'\' {$ELSE}'/'{$ENDIF}, True, True, EXT); +end; + +function GetName: string; begin Result := 'Extensions Updater'; end; +function GetVersion: string; begin Result := '0.1'; end; +begin end. From 00531f5e4a9e036436d0a8ee0d11d40ed145c867 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Sun, 31 Jul 2011 15:30:08 +0200 Subject: [PATCH 05/29] Setup: Add extension.sex to installer. --- Install/windows/Setup.iss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Install/windows/Setup.iss b/Install/windows/Setup.iss index 3318fa5..32173a0 100644 --- a/Install/windows/Setup.iss +++ b/Install/windows/Setup.iss @@ -30,11 +30,12 @@ Name: "{app}\Extensions" Name: "{app}\Includes" Name: "{app}\Plugins" Name: "{app}\Scripts" -Name: "{app}\Scripts\Tests" +; Name: "{app}\Scripts\Tests" [Files] Source: "C:\Simba\Simba.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Simba\Extensions\srl.sex"; DestDir: "{app}\Extensions"; Flags: ignoreversion +Source: "C:\Simba\Extensions\extension.sex"; DestDir: "{app}\Extensions"; Flags: ignoreversion Source: "C:\Simba\Extensions\msi.sex"; DestDir: "{app}\Extensions"; Flags: ignoreversion Source: "C:\Simba\Extensions\associate.sex"; DestDir: "{app}\Extensions"; Flags: ignoreversion Source: "C:\Simba\Extensions\dtm_editor.sex"; DestDir: "{app}\Extensions"; Flags: ignoreversion From b301172600f9acec8b441d60cf40759e53f60f86 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Sun, 31 Jul 2011 16:49:16 +0200 Subject: [PATCH 06/29] Simba: INCLUDE_ONCE and INCLUDE fixes. --- Units/MMLAddon/mmlpsthread.pas | 32 ++++++++++++++++++++++++-- Units/PascalScript/uPSComponent.pas | 19 +++++++++++++++ Units/PascalScript/uPSPreProcessor.pas | 7 +++++- 3 files changed, 55 insertions(+), 3 deletions(-) diff --git a/Units/MMLAddon/mmlpsthread.pas b/Units/MMLAddon/mmlpsthread.pas index 292444c..08be9ce 100644 --- a/Units/MMLAddon/mmlpsthread.pas +++ b/Units/MMLAddon/mmlpsthread.pas @@ -185,6 +185,7 @@ type function RequireFile(Sender: TObject; const OriginFileName: String; var FileName, OutPut: string): Boolean; function FileAlreadyIncluded(Sender: TObject; FileName: string): Boolean; + function OnIncludingFile(Sender: TObject; FileName: string): Boolean; procedure OnCompImport(Sender: TObject; x: TPSPascalCompiler); procedure OnExecImport(Sender: TObject; se: TPSExec; x: TPSRuntimeClassImporter); @@ -425,7 +426,9 @@ begin Exit; end; filename := path;//Yeah! - Includes.Add(path); + + if Includes.IndexOf(path) = -1 then + Includes.Add(path); try f:= TFileStream.Create(UTF8ToSys(Path), fmOpenRead); @@ -615,6 +618,7 @@ begin PSScript.UsePreProcessor:= True; PSScript.CompilerOptions := PSScript.CompilerOptions + [icBooleanShortCircuit]; PSScript.OnNeedFile := @RequireFile; + PSScript.OnIncludingFile := @OnIncludingFile; PSScript.OnFileAlreadyIncluded := @FileAlreadyIncluded; PSScript.OnProcessDirective:=@OnProcessDirective; PSScript.OnProcessUnknowDirective:=@PSScriptProcessUnknownDirective; @@ -742,9 +746,12 @@ var path: string; i: integer; begin + { XXX/TODO: Why not just use path := ExpandFileNameUTF8(FileName); } path := FindFile(Filename,[ScriptPath,IncludePath]); + path := ExpandFileNameUTF8(path); + if (path <> '') then - if Includes.Find(path,i) then + if Includes.IndexOf(path) <> -1 then begin {$IFDEF SIMBA_VERBOSE} psWriteln('Include_Once file already included:' + Path); @@ -753,10 +760,31 @@ begin Exit; end; + {$IFDEF SIMBA_VERBOSE} + writeln('OnFileAlreadyIncluded, Adding: ' + path); + {$ENDIF} Includes.Add(path); Result := False; end; +function TPSThread.OnIncludingFile(Sender: TObject; FileName: string): Boolean; +var + path: string; +begin + path := FindFile(Filename,[ScriptPath,IncludePath]); + path := ExpandFileNameUTF8(path); + + if Includes.IndexOf(path) = -1 then + begin + {$IFDEF SIMBA_VERBOSE} + writeln('OnIncludingFile, Adding: ' + path); + {$ENDIF} + Includes.Add(path); + end; + + Result := True; // Not used +end; + procedure SIRegister_Mufasa(cl: TPSPascalCompiler); begin SIRegister_MML(cl); diff --git a/Units/PascalScript/uPSComponent.pas b/Units/PascalScript/uPSComponent.pas index 78166a6..232a68a 100644 --- a/Units/PascalScript/uPSComponent.pas +++ b/Units/PascalScript/uPSComponent.pas @@ -95,6 +95,7 @@ type { Added by Wizzup } TPSOnFileAlreadyIncluded = function (Sender: TObject; FileName: tbtstring): Boolean of object; + TPSOnIncludingFile = function (Sender: TObject; FileName: tbtstring): Boolean of object; { Wizzup out } TPSOnProcessDirective = procedure ( @@ -127,6 +128,7 @@ type FOnNeedFile: TPSOnNeedFile; { Added by Wizzup } FOnFileAlreadyIncluded: TPSOnFileAlreadyIncluded; + FOnIncludingFile: TPSOnIncludingFile; { Wizzup out } FUsePreProcessor: Boolean; FDefines: TStrings; @@ -162,6 +164,7 @@ type function DoOnNeedFile (Sender: TObject; const OrginFileName: tbtstring; var FileName, Output: tbtstring): Boolean; virtual; { Added by Wizzup } function DoOnFileAlreadyIncluded (Sender: TObject; FileName: tbtstring): Boolean; virtual; + function DoOnIncludingFile (Sender: TObject; FileName: tbtstring): Boolean; virtual; { Wizzup out } function DoOnUnknowUses (Sender: TPSPascalCompiler; const Name: tbtstring): Boolean; virtual; // return true if processed procedure DoOnCompImport; virtual; @@ -300,6 +303,7 @@ type { Added by Wizzup } property OnFileAlreadyIncluded: TPSOnFileAlreadyIncluded read FOnFileAlreadyIncluded write FOnFileAlreadyIncluded; + property OnIncludingFile: TPSOnIncludingFile read FOnIncludingFile write FOnIncludingFile; { Wizzup out } property Defines: TStrings read FDefines write SetDefines; @@ -557,6 +561,11 @@ function CEOnFileAlreadyIncluded(Sender: TPSPreProcessor; FileName: tbtstring): begin Result := TPSScript (Sender.ID).DoOnFileAlreadyIncluded(Sender.ID, Filename); end; + +function CEOnIncludingFile(Sender: TPSPreProcessor; FileName: tbtstring): Boolean; +begin + Result := TPSScript (Sender.ID).DoOnIncludingFile(Sender.ID, Filename); +end; { Wizzup out } procedure CompTranslateLineInfo(Sender: TPSPascalCompiler; var Pos, Row, Col: Cardinal; var Name: tbtstring); @@ -675,6 +684,7 @@ begin { Added by Wizzup } FPP.OnFileAlreadyIncluded:= CEOnFileAlreadyIncluded; + FPP.OnIncludingFile:= CEOnIncludingFile; { Wizzup out } FDefines := TStringList.Create; @@ -1088,6 +1098,15 @@ begin else Result := False; end; + +function TPSScript.DoOnIncludingFile(Sender: TObject; + FileName: tbtstring): Boolean; +begin + If Assigned (OnIncludingFile) then + Result := OnIncludingFile(Sender, FileName) + else + Result := False; +end; { Wizzup out } function TPSScript.DoOnUnknowUses(Sender: TPSPascalCompiler; diff --git a/Units/PascalScript/uPSPreProcessor.pas b/Units/PascalScript/uPSPreProcessor.pas index c71e912..0867db1 100644 --- a/Units/PascalScript/uPSPreProcessor.pas +++ b/Units/PascalScript/uPSPreProcessor.pas @@ -17,6 +17,7 @@ type { Added by Wizzup } TPSOnFileAlreadyIncluded = function (Sender: TPSPreProcessor; FileName: tbtstring): Boolean; + TPSOnIncludingFile = function (Sender: TPSPreProcessor; FileName: tbtstring): Boolean; { Wizzup out } TPSOnProcessDirective = procedure ( @@ -99,6 +100,7 @@ type FOnNeedFile: TPSOnNeedFile; { Added by Wizzup } FOnFileAlreadyIncluded: TPSOnFileAlreadyIncluded; + FOnIncludingFile: TPSOnIncludingFile; { Wizzup out } FAddedPosition: Cardinal; FDefineState: TPSDefineStates; @@ -120,6 +122,7 @@ type { Added by Wizzup } property OnFileAlreadyIncluded: TPSOnFileAlreadyIncluded read FOnFileAlreadyIncluded write FOnFileAlreadyIncluded; + property OnIncludingFile: TPSOnIncludingFile read FOnIncludingFile write FOnIncludingFile; { Wizzup out } property Defines: TStringList read FDefines write FDefines; @@ -633,6 +636,8 @@ begin begin if FDefineState.DoWrite then begin + if assigned(@OnIncludingFile) then + OnIncludingFile(self, s); FAddedPosition := 0; IntPreProcess(Level +1, FileName, s, Dest); FCurrentLineInfo.Current := current; @@ -646,7 +651,7 @@ begin raise EPSPreProcessor.CreateFmt(RPS_IncludeOnceNotFound, [FileName, OrgFileName]) else begin - if not OnFileAlreadyIncluded(Self, FileName) then + if not OnFileAlreadyIncluded(Self, s) then begin FAddedPosition := 0; IntPreProcess(Level +1, FileName, s, Dest); From cf41d95f534712d145bbfe2f22fcac9748fb3eab Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Sun, 31 Jul 2011 17:36:34 +0200 Subject: [PATCH 07/29] Simba: Fix recursive INCLUDE_ONCE. --- Units/MMLAddon/mmlpsthread.pas | 25 +++++++++++++++++-------- Units/PascalScript/uPSComponent.pas | 24 ++++++++++++------------ Units/PascalScript/uPSPreProcessor.pas | 8 ++++---- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/Units/MMLAddon/mmlpsthread.pas b/Units/MMLAddon/mmlpsthread.pas index 08be9ce..6f194f7 100644 --- a/Units/MMLAddon/mmlpsthread.pas +++ b/Units/MMLAddon/mmlpsthread.pas @@ -184,8 +184,8 @@ type procedure OnCompile(Sender: TPSScript); function RequireFile(Sender: TObject; const OriginFileName: String; var FileName, OutPut: string): Boolean; - function FileAlreadyIncluded(Sender: TObject; FileName: string): Boolean; - function OnIncludingFile(Sender: TObject; FileName: string): Boolean; + function FileAlreadyIncluded(Sender: TObject; OrgFileName, FileName: string): Boolean; + function OnIncludingFile(Sender: TObject; OrgFileName, FileName: string): Boolean; procedure OnCompImport(Sender: TObject; x: TPSPascalCompiler); procedure OnExecImport(Sender: TObject; se: TPSExec; x: TPSRuntimeClassImporter); @@ -741,20 +741,24 @@ begin '{$IFDEF __REMOVE_IS_INCLUDE}{$UNDEF IS_INCLUDE}{$ENDIF}'; end; -function TPSThread.FileAlreadyIncluded(Sender: TObject; FileName: string): Boolean; +function TPSThread.FileAlreadyIncluded(Sender: TObject; OrgFileName, FileName: string): Boolean; var path: string; i: integer; begin - { XXX/TODO: Why not just use path := ExpandFileNameUTF8(FileName); } - path := FindFile(Filename,[ScriptPath,IncludePath]); + path := FindFile(filename,[includepath,ScriptPath,IncludeTrailingPathDelimiter(ExtractFileDir(OrgFileName))]); + if path = '' then + begin + Result := True; + Exit; + end; path := ExpandFileNameUTF8(path); if (path <> '') then if Includes.IndexOf(path) <> -1 then begin {$IFDEF SIMBA_VERBOSE} - psWriteln('Include_Once file already included:' + Path); + writeln('Include_Once file already included:' + Path); {$ENDIF} Result := True; Exit; @@ -767,11 +771,16 @@ begin Result := False; end; -function TPSThread.OnIncludingFile(Sender: TObject; FileName: string): Boolean; +function TPSThread.OnIncludingFile(Sender: TObject; OrgFileName, FileName: string): Boolean; var path: string; begin - path := FindFile(Filename,[ScriptPath,IncludePath]); + path := FindFile(filename,[includepath,ScriptPath,IncludeTrailingPathDelimiter(ExtractFileDir(OrgFileName))]); + if path = '' then + begin + Result := True; + Exit; + end; path := ExpandFileNameUTF8(path); if Includes.IndexOf(path) = -1 then diff --git a/Units/PascalScript/uPSComponent.pas b/Units/PascalScript/uPSComponent.pas index 232a68a..9aad121 100644 --- a/Units/PascalScript/uPSComponent.pas +++ b/Units/PascalScript/uPSComponent.pas @@ -94,8 +94,8 @@ type TPSOnNeedFile = function (Sender: TObject; const OrginFileName: tbtstring; var FileName, Output: tbtstring): Boolean of object; { Added by Wizzup } - TPSOnFileAlreadyIncluded = function (Sender: TObject; FileName: tbtstring): Boolean of object; - TPSOnIncludingFile = function (Sender: TObject; FileName: tbtstring): Boolean of object; + TPSOnFileAlreadyIncluded = function (Sender: TObject; OrgFileName, FileName: tbtstring): Boolean of object; + TPSOnIncludingFile = function (Sender: TObject; OrgFileName, FileName: tbtstring): Boolean of object; { Wizzup out } TPSOnProcessDirective = procedure ( @@ -163,8 +163,8 @@ type //--jgv new function DoOnNeedFile (Sender: TObject; const OrginFileName: tbtstring; var FileName, Output: tbtstring): Boolean; virtual; { Added by Wizzup } - function DoOnFileAlreadyIncluded (Sender: TObject; FileName: tbtstring): Boolean; virtual; - function DoOnIncludingFile (Sender: TObject; FileName: tbtstring): Boolean; virtual; + function DoOnFileAlreadyIncluded (Sender: TObject; OrgFileName, FileName: tbtstring): Boolean; virtual; + function DoOnIncludingFile (Sender: TObject; OrgFileName, FileName: tbtstring): Boolean; virtual; { Wizzup out } function DoOnUnknowUses (Sender: TPSPascalCompiler; const Name: tbtstring): Boolean; virtual; // return true if processed procedure DoOnCompImport; virtual; @@ -557,14 +557,14 @@ begin end; { Added by Wizzup } -function CEOnFileAlreadyIncluded(Sender: TPSPreProcessor; FileName: tbtstring): Boolean; +function CEOnFileAlreadyIncluded(Sender: TPSPreProcessor; OrgFileName, FileName: tbtstring): Boolean; begin - Result := TPSScript (Sender.ID).DoOnFileAlreadyIncluded(Sender.ID, Filename); + Result := TPSScript (Sender.ID).DoOnFileAlreadyIncluded(Sender.ID, OrgFileName, Filename); end; -function CEOnIncludingFile(Sender: TPSPreProcessor; FileName: tbtstring): Boolean; +function CEOnIncludingFile(Sender: TPSPreProcessor; OrgFileName, FileName: tbtstring): Boolean; begin - Result := TPSScript (Sender.ID).DoOnIncludingFile(Sender.ID, Filename); + Result := TPSScript (Sender.ID).DoOnIncludingFile(Sender.ID, OrgFileName, Filename); end; { Wizzup out } @@ -1091,19 +1091,19 @@ end; { Added by Wizzup } function TPSScript.DoOnFileAlreadyIncluded(Sender: TObject; - FileName: tbtstring): Boolean; + OrgFileName, FileName: tbtstring): Boolean; begin If Assigned (OnFileAlreadyIncluded) then - Result := OnFileAlreadyIncluded(Sender, FileName) + Result := OnFileAlreadyIncluded(Sender, OrgFileName, FileName) else Result := False; end; function TPSScript.DoOnIncludingFile(Sender: TObject; - FileName: tbtstring): Boolean; + OrgFileName, FileName: tbtstring): Boolean; begin If Assigned (OnIncludingFile) then - Result := OnIncludingFile(Sender, FileName) + Result := OnIncludingFile(Sender, OrgFileName, FileName) else Result := False; end; diff --git a/Units/PascalScript/uPSPreProcessor.pas b/Units/PascalScript/uPSPreProcessor.pas index 0867db1..0dc4438 100644 --- a/Units/PascalScript/uPSPreProcessor.pas +++ b/Units/PascalScript/uPSPreProcessor.pas @@ -16,8 +16,8 @@ type TPSOnNeedFile = function (Sender: TPSPreProcessor; const callingfilename: tbtstring; var FileName, Output: tbtstring): Boolean; { Added by Wizzup } - TPSOnFileAlreadyIncluded = function (Sender: TPSPreProcessor; FileName: tbtstring): Boolean; - TPSOnIncludingFile = function (Sender: TPSPreProcessor; FileName: tbtstring): Boolean; + TPSOnFileAlreadyIncluded = function (Sender: TPSPreProcessor; OrgFileName, FileName: tbtstring): Boolean; + TPSOnIncludingFile = function (Sender: TPSPreProcessor; OrgFileName, FileName: tbtstring): Boolean; { Wizzup out } TPSOnProcessDirective = procedure ( @@ -637,7 +637,7 @@ begin if FDefineState.DoWrite then begin if assigned(@OnIncludingFile) then - OnIncludingFile(self, s); + OnIncludingFile(self , Filename, s); FAddedPosition := 0; IntPreProcess(Level +1, FileName, s, Dest); FCurrentLineInfo.Current := current; @@ -651,7 +651,7 @@ begin raise EPSPreProcessor.CreateFmt(RPS_IncludeOnceNotFound, [FileName, OrgFileName]) else begin - if not OnFileAlreadyIncluded(Self, s) then + if not OnFileAlreadyIncluded(Self, FileName, s) then begin FAddedPosition := 0; IntPreProcess(Level +1, FileName, s, Dest); From a20a31a250eadf19fe64504989e02d9dbd8410a8 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Sun, 31 Jul 2011 17:44:17 +0200 Subject: [PATCH 08/29] Simba: Fix FindFile return value. --- Units/MMLCore/files.pas | 1 + 1 file changed, 1 insertion(+) diff --git a/Units/MMLCore/files.pas b/Units/MMLCore/files.pas index dfcc473..18d2aaf 100644 --- a/Units/MMLCore/files.pas +++ b/Units/MMLCore/files.pas @@ -128,6 +128,7 @@ begin; exit; end; end; + result := ''; end; constructor TMFiles.Create(Owner : TObject); From 26a627e7b54fdfba466375ca9b69ac42b9882cb6 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Mon, 1 Aug 2011 16:25:41 +0200 Subject: [PATCH 09/29] MML/Finder: Fix leak in FindBitmapSpiralTolerance. Effectively only leaked on non-Windows platforms. --- Units/MMLCore/finder.pas | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Units/MMLCore/finder.pas b/Units/MMLCore/finder.pas index d9eef25..bb97efe 100644 --- a/Units/MMLCore/finder.pas +++ b/Units/MMLCore/finder.pas @@ -1692,6 +1692,8 @@ begin end; //We did find the Bmp, otherwise we would be at the part below + TClient(Client).IOManager.FreeReturnData; + x := ClientTPA[i].x + xs; y := ClientTPA[i].y + ys; result := true; From 9eee19a3afe62391e6f44b0efeab9259c9f95408 Mon Sep 17 00:00:00 2001 From: Bentzilla Date: Sun, 31 Jul 2011 11:28:09 -0400 Subject: [PATCH 10/29] DebugImage always on top, Search box hint, Disable update button once successfully updated --- Projects/Simba/about.pas | 1 + Projects/Simba/debugimage.pas | 1 + Projects/Simba/framefunctionlist.lfm | 16 +++++++++------- Projects/Simba/updateform.pas | 3 ++- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Projects/Simba/about.pas b/Projects/Simba/about.pas index 9a2a30b..2d6838d 100644 --- a/Projects/Simba/about.pas +++ b/Projects/Simba/about.pas @@ -65,6 +65,7 @@ begin AboutMemo.Lines.Add(format('You are currently using version: %d',[SimbaUnit.SimbaVersion])); AboutMemo.Lines.Add(''); AboutMemo.Lines.Add('Please report bugs at: http://bugs.villavu.com/'); + AboutMemo.Enabled := False; end; procedure TAboutForm.OkButtonClick(Sender: TObject); diff --git a/Projects/Simba/debugimage.pas b/Projects/Simba/debugimage.pas index f96ab0c..a103a26 100644 --- a/Projects/Simba/debugimage.pas +++ b/Projects/Simba/debugimage.pas @@ -110,6 +110,7 @@ begin Width := DispSize.x; Height := DispSize.y; end; + FormStyle := fsStayOnTop; end; initialization diff --git a/Projects/Simba/framefunctionlist.lfm b/Projects/Simba/framefunctionlist.lfm index b419ecc..f74beb5 100644 --- a/Projects/Simba/framefunctionlist.lfm +++ b/Projects/Simba/framefunctionlist.lfm @@ -12,11 +12,11 @@ object FunctionListFrame: TFunctionListFrame DesignTop = 200 object FunctionList: TTreeView Left = 0 - Height = 483 - Top = 18 + Height = 479 + Top = 20 Width = 182 Align = alClient - DefaultItemHeight = 15 + DefaultItemHeight = 17 ReadOnly = True ScrollBars = ssAutoBoth TabOrder = 0 @@ -28,16 +28,19 @@ object FunctionListFrame: TFunctionListFrame end object editSearchList: TEdit Left = 0 - Height = 21 - Top = 501 + Height = 23 + Hint = 'Search ...' + Top = 499 Width = 182 Align = alBottom OnChange = editSearchListChange + ParentShowHint = False + ShowHint = True TabOrder = 1 end object FunctionListLabel: TLabel Left = 2 - Height = 14 + Height = 16 Top = 2 Width = 178 Align = alTop @@ -55,7 +58,6 @@ object FunctionListFrame: TFunctionListFrame Top = 2 Width = 16 Anchors = [akTop, akRight] - Color = clBtnFace Flat = True Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 diff --git a/Projects/Simba/updateform.pas b/Projects/Simba/updateform.pas index c38d1bd..1f3566b 100644 --- a/Projects/Simba/updateform.pas +++ b/Projects/Simba/updateform.pas @@ -251,7 +251,8 @@ begin end; end; FDone := True; - Self.UpdateButton.Caption := 'Update!'; + Self.UpdateButton.Caption := 'Updated!'; + Self.UpdateButton.Enabled := False; Self.CloseButton.Enabled := true; FUpdating:= false; end; From aaafd6b0c1ab958e5b4dffe43b700887a869a4f6 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Mon, 1 Aug 2011 16:30:10 +0200 Subject: [PATCH 11/29] Simba: Aboutform Disabled -> ReadOnly. --- Projects/Simba/about.pas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Projects/Simba/about.pas b/Projects/Simba/about.pas index 2d6838d..16b5778 100644 --- a/Projects/Simba/about.pas +++ b/Projects/Simba/about.pas @@ -65,7 +65,7 @@ begin AboutMemo.Lines.Add(format('You are currently using version: %d',[SimbaUnit.SimbaVersion])); AboutMemo.Lines.Add(''); AboutMemo.Lines.Add('Please report bugs at: http://bugs.villavu.com/'); - AboutMemo.Enabled := False; + AboutMemo.ReadOnly:= True; end; procedure TAboutForm.OkButtonClick(Sender: TObject); From f0fca408fd4a93e37e38cf4104c9d3c3ccb7c6d6 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Thu, 4 Aug 2011 00:18:31 +0200 Subject: [PATCH 12/29] Installer: Add settings.xml --- Install/windows/Setup.iss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Install/windows/Setup.iss b/Install/windows/Setup.iss index 32173a0..b93cd8c 100644 --- a/Install/windows/Setup.iss +++ b/Install/windows/Setup.iss @@ -44,6 +44,9 @@ Source: "C:\Simba\Extensions\paster.sex"; DestDir: "{app}\Extensions"; Flags: ig Source: "C:\Simba\Extensions\CRov.sex"; DestDir: "{app}\Extensions"; Flags: ignoreversion Source: "C:\Simba\Extensions\Updater.sei"; DestDir: "{app}\Extensions"; Flags: ignoreversion Source: "C:\Simba\Includes\mml.simba"; DestDir: "{app}\Includes"; Flags: ignoreversion +Source: "C:\Simba\settings.xml"; DestDir: "{app}\"; Flags: ignoreversion +; XXX Make sure to use a MINIMAL settings.xml XXX + ; Source: "C:\Simba\Fonts\*"; DestDir: "{app}\Fonts"; Flags: ignoreversion recursesubdirs createallsubdirs ; Source: "C:\Simba\Tests\PS\*"; DestDir:"{app}\Scripts\Tests"; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files From d25b86624d5e3c8237de4f4a54f4a9dfdea1f6de Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Thu, 4 Aug 2011 00:59:19 +0200 Subject: [PATCH 13/29] Simba: Bump version to 971 for next release. Which would be 0.97.1... :-) --- Projects/Simba/simbaunit.pas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Projects/Simba/simbaunit.pas b/Projects/Simba/simbaunit.pas index eac81c7..0a828a2 100644 --- a/Projects/Simba/simbaunit.pas +++ b/Projects/Simba/simbaunit.pas @@ -62,7 +62,7 @@ uses settings, updater; const - SimbaVersion = 970; + SimbaVersion = 971; interp_PS = 0; //PascalScript interp_RT = 1; //RUTIS From 93f44aa95ec82b3b0b1cf7d347979e49edb48dd9 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Thu, 4 Aug 2011 13:21:32 +0200 Subject: [PATCH 14/29] Installer: Comment settings.xml copy again. --- Install/windows/Setup.iss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Install/windows/Setup.iss b/Install/windows/Setup.iss index b93cd8c..59e92cd 100644 --- a/Install/windows/Setup.iss +++ b/Install/windows/Setup.iss @@ -44,7 +44,7 @@ Source: "C:\Simba\Extensions\paster.sex"; DestDir: "{app}\Extensions"; Flags: ig Source: "C:\Simba\Extensions\CRov.sex"; DestDir: "{app}\Extensions"; Flags: ignoreversion Source: "C:\Simba\Extensions\Updater.sei"; DestDir: "{app}\Extensions"; Flags: ignoreversion Source: "C:\Simba\Includes\mml.simba"; DestDir: "{app}\Includes"; Flags: ignoreversion -Source: "C:\Simba\settings.xml"; DestDir: "{app}\"; Flags: ignoreversion +; Source: "C:\Simba\settings.xml"; DestDir: "{app}\"; Flags: ignoreversion ; XXX Make sure to use a MINIMAL settings.xml XXX ; Source: "C:\Simba\Fonts\*"; DestDir: "{app}\Fonts"; Flags: ignoreversion recursesubdirs createallsubdirs From 058f6bef699fdee7b7e19cea8dc80ee4d1333e9b Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Thu, 4 Aug 2011 13:23:14 +0200 Subject: [PATCH 15/29] Simba: Bump version to 972. --- Projects/Simba/simbaunit.pas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Projects/Simba/simbaunit.pas b/Projects/Simba/simbaunit.pas index 0a828a2..4872c7a 100644 --- a/Projects/Simba/simbaunit.pas +++ b/Projects/Simba/simbaunit.pas @@ -62,7 +62,7 @@ uses settings, updater; const - SimbaVersion = 971; + SimbaVersion = 972; interp_PS = 0; //PascalScript interp_RT = 1; //RUTIS From 4be1b4009d42ee215db3d5c108653c7249dfdab8 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Sun, 7 Aug 2011 21:28:21 +0200 Subject: [PATCH 16/29] Revert "Should compile with latest LCL, donno if it works, but meh, just graphic components." This reverts commit 981ec3760a5fdde59fcde6038e968b9cbd43a354. --- Units/PascalScript/uPSI_ComCtrls.pas | 2 +- Units/PascalScript/uPSR_extctrls.pas | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Units/PascalScript/uPSI_ComCtrls.pas b/Units/PascalScript/uPSI_ComCtrls.pas index b1d2ca4..d6c6b61 100644 --- a/Units/PascalScript/uPSI_ComCtrls.pas +++ b/Units/PascalScript/uPSI_ComCtrls.pas @@ -311,7 +311,7 @@ begin T := Self.TabIndex; end; (*----------------------------------------------------------------------------*) procedure TTabControlNoteBookStringsNoteBook_R(Self: TTabControlNoteBookStrings; var T: TNoteBook); -begin T := TNoteBook(Self.NoteBook); end; +begin T := Self.NoteBook; end; (*----------------------------------------------------------------------------*) procedure TTabControlStringsTabWidth_W(Self: TTabControlStrings; const T: Smallint); diff --git a/Units/PascalScript/uPSR_extctrls.pas b/Units/PascalScript/uPSR_extctrls.pas index 080a8b1..c332bf5 100644 --- a/Units/PascalScript/uPSR_extctrls.pas +++ b/Units/PascalScript/uPSR_extctrls.pas @@ -85,14 +85,14 @@ procedure RIRegisterTPANEL(Cl: TPSRuntimeClassImporter); begin Cl.Add(TPANEL); end; -procedure TPagePageIndex_R(Self: TCustomPage; var T: INTEGER); begin T := Self.PageIndex; end; -procedure TPagePageIndex_W(Self: TCustomPage; T: INTEGER); begin Self.PageIndex := T; end; -procedure TPageOnShow_R(Self: TCustomPage; var T: TNotifyEvent); begin T := Self.OnShow; end; -procedure TPageOnShow_W(Self: TCustomPage; T: TNotifyEvent); begin Self.OnShow := T; end; +procedure TPagePageIndex_R(Self: TPAGE; var T: INTEGER); begin T := Self.PageIndex; end; +procedure TPagePageIndex_W(Self: TPAGE; T: INTEGER); begin Self.PageIndex := T; end; +procedure TPageOnShow_R(Self: TPAGE; var T: TNotifyEvent); begin T := Self.OnShow; end; +procedure TPageOnShow_W(Self: TPAGE; T: TNotifyEvent); begin Self.OnShow := T; end; {$IFNDEF CLX} procedure RIRegisterTPAGE(Cl: TPSRuntimeClassImporter); begin - with Cl.Add(TCustomPage) do + with Cl.Add(TPAGE) do begin RegisterPropertyHelper(@TPagePageIndex_R,@TPagePageIndex_W,'PageIndex'); RegisterEventPropertyHelper(@TPageOnShow_R,@TPageOnShow_W,'OnShow'); @@ -106,7 +106,7 @@ begin with Cl.Add(TNOTEBOOK) do begin {$IFDEF FPC} -// RegisterMethod(@TNoteBook.TabIndexAtClientPos,'TABINDEXATCLIENTPOS'); + RegisterMethod(@TNoteBook.TabIndexAtClientPos,'TABINDEXATCLIENTPOS'); {$ENDIF} RegisterPropertyHelper(@TNoteBookPageCount_R,nil,'PAGECOUNT'); end; From 96025597f93c8cad33cc8be691d8924b5d66ff8d Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Tue, 9 Aug 2011 20:31:57 +0200 Subject: [PATCH 17/29] Add SMARTLoader example. --- Projects/SMARTLoader/project1.lpi | 154 ++++++++++++++++++++++++++++++ Projects/SMARTLoader/project1.lpr | 95 ++++++++++++++++++ 2 files changed, 249 insertions(+) create mode 100644 Projects/SMARTLoader/project1.lpi create mode 100644 Projects/SMARTLoader/project1.lpr diff --git a/Projects/SMARTLoader/project1.lpi b/Projects/SMARTLoader/project1.lpi new file mode 100644 index 0000000..fcb7cbb --- /dev/null +++ b/Projects/SMARTLoader/project1.lpi @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/SMARTLoader/project1.lpr b/Projects/SMARTLoader/project1.lpr new file mode 100644 index 0000000..eee6b3a --- /dev/null +++ b/Projects/SMARTLoader/project1.lpr @@ -0,0 +1,95 @@ +program project1; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Classes, SysUtils, CustApp, + { you can add units after this } + dynlibs; + +const libSmart = 'smart'; + + +procedure std_setup (ServerURL, SecondParam: PChar; sizeX, sizeY: Integer; SomeStr: PChar); cdecl; external libSmart; + + +type + + { TMyApplication } + + TMyApplication = class(TCustomApplication) + protected + procedure DoRun; override; + public + constructor Create(TheOwner: TComponent); override; + destructor Destroy; override; + procedure WriteHelp; virtual; + end; + + +procedure LoadSmart; +begin + std_setup('http://world19.runescape.com/', 'plugin.js?param=o0,a1,m0', 765, 503, 's'); +end; + +{ TMyApplication } + +procedure TMyApplication.DoRun; +var + ErrorMsg: String; +begin + // quick check parameters + ErrorMsg:=CheckOptions('h','help'); + if ErrorMsg<>'' then begin + ShowException(Exception.Create(ErrorMsg)); + Terminate; + Exit; + end; + + // parse parameters + if HasOption('h','help') then begin + WriteHelp; + Terminate; + Exit; + end; + + LoadSmart; + sleep(100000); + + { add your program here } + + // stop program loop + Terminate; +end; + +constructor TMyApplication.Create(TheOwner: TComponent); +begin + inherited Create(TheOwner); + StopOnException:=True; +end; + +destructor TMyApplication.Destroy; +begin + inherited Destroy; +end; + +procedure TMyApplication.WriteHelp; +begin + { add your help code here } + writeln('Usage: ',ExeName,' -h'); +end; + +var + Application: TMyApplication; + +//{$R *.res} + +begin + Application:=TMyApplication.Create(nil); + Application.Run; + Application.Free; +end. + From 23e518f531f28a477d0a105627829eb3abad2d27 Mon Sep 17 00:00:00 2001 From: Cohen Adair Date: Fri, 12 Aug 2011 00:39:54 -0400 Subject: [PATCH 18/29] MML: Changed PointToBox parameters to be more clear --- Units/MMLAddon/PSInc/Wrappers/math.inc | 10 +++++----- Units/MMLAddon/PSInc/psexportedmethods.inc | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Units/MMLAddon/PSInc/Wrappers/math.inc b/Units/MMLAddon/PSInc/Wrappers/math.inc index 67ec9ca..f257bee 100644 --- a/Units/MMLAddon/PSInc/Wrappers/math.inc +++ b/Units/MMLAddon/PSInc/Wrappers/math.inc @@ -172,12 +172,12 @@ begin; result := (((x >= Box.x1) and(x <= Box.x2)) and ((y >= box.y1) and (y <= box.y2))); end; -function ps_PointToBox(PT1,PT2 : TPoint) : TBox; extdecl; +function ps_PointToBox(topLeft,bottomRight: TPoint): TBox; extdecl; begin; - result.x1 := PT1.x; - result.y1 := PT1.y; - result.x2 := PT2.x; - result.y2 := PT2.y; + result.x1 := topLeft.x; + result.y1 := topLeft.y; + result.x2 := bottomRight.x; + result.y2 := bottomRight.y; end; function ps_PointInBox(PT : TPoint; Box: TBox): Boolean; extdecl; diff --git a/Units/MMLAddon/PSInc/psexportedmethods.inc b/Units/MMLAddon/PSInc/psexportedmethods.inc index 42b7b3c..3cdedd5 100644 --- a/Units/MMLAddon/PSInc/psexportedmethods.inc +++ b/Units/MMLAddon/PSInc/psexportedmethods.inc @@ -69,7 +69,7 @@ AddFunction(@ps_iAbs,'function iAbs(a : integer) : integer;'); AddFunction(@ps_ArcTan2,'function ArcTan2(y,x : extended) : extended;'); AddFunction(@ps_IntToBox,'function IntToBox(xs,ys,xe,ye : integer) : TBox;'); AddFunction(@ps_IntInBox,'function IntInBox(x, y: Integer; Box: TBox): Boolean;'); -AddFunction(@ps_PointToBox,'function PointToBox(PT1,PT2 : TPoint): TBox;'); +AddFunction(@ps_PointToBox,'function PointToBox(topLeft,bottomRight: TPoint): TBox;'); AddFunction(@ps_PointInBox,'function PointInBox(PT : TPoint; Box: TBox): Boolean;'); AddFunction(@ps_sqr,'function Sqr(e : extended) : extended;'); AddFunction(@ps_point,'function Point(x,y:integer) : TPoint;'); From 41e580273c0f8f08482e9bbdccaf22568b41d781 Mon Sep 17 00:00:00 2001 From: Thomas Augood Date: Mon, 15 Aug 2011 20:09:14 +0200 Subject: [PATCH 19/29] Add initial TPA documentation. Squashed commit of the following: commit 489e0f1fa95fc73f7754700200636839015ffdf7 Author: Merlijn Wajer Date: Mon Aug 15 20:08:39 2011 +0200 TPA: Remove notes. commit 1417e3e27653a6722c5b58b8f71a5c81fad1cbb2 Merge: 9602559 ae099c2 Author: Merlijn Wajer Date: Mon Aug 15 19:55:48 2011 +0200 Merge remote branch 'shuttleu/master' into doc commit ae099c2eebb63347e882d795968e27ef01bff78a Author: Thomas Augood Date: Sun Aug 14 20:17:34 2011 +0100 almost all documentation is done now commit c95a3931bc16f329e6ca2cca04da3da15a2bb344 Author: Thomas Augood Date: Sun Aug 14 19:31:36 2011 +0100 more documentation, dont know what the wrap functions do though commit 0295de8499878b813119d08d67e6724c0f0151d9 Author: Thomas Augood Date: Sun Aug 14 18:28:11 2011 +0100 done some documentation Signed-off-by: Merlijn Wajer --- Doc/sphinx/scriptref/tpa.rst | 156 +++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) diff --git a/Doc/sphinx/scriptref/tpa.rst b/Doc/sphinx/scriptref/tpa.rst index 271ee2e..e3e755c 100644 --- a/Doc/sphinx/scriptref/tpa.rst +++ b/Doc/sphinx/scriptref/tpa.rst @@ -11,6 +11,8 @@ Quicksort procedure Quicksort(var Arr : TIntegerArray); +Sorts a TIntegerArray using the Quicksort algorithm + tSwap ----- @@ -19,6 +21,8 @@ tSwap procedure tSwap(var a, b: TPoint); +Swaps the values of a and b around + tpaSwap ------- @@ -27,6 +31,8 @@ tpaSwap procedure tpaSwap(var a, b: TPointArray); +Swaps the values of a and b around + SwapE ----- @@ -35,6 +41,8 @@ SwapE procedure SwapE(var a, b: Extended); +Swaps the values of a and b around + RAaSTPAEx --------- @@ -43,6 +51,7 @@ RAaSTPAEx procedure RAaSTPAEx(var a: TPointArray; const w, h: Integer); +Leaves one point per box with side lengths W and H to the TPA RAaSTPA ------- @@ -51,6 +60,8 @@ RAaSTPA procedure RAaSTPA(var a: TPointArray; const Dist: Integer); +Leaves one point per box with the side length Dist + NearbyPointInArrayEx -------------------- @@ -59,6 +70,8 @@ NearbyPointInArrayEx function NearbyPointInArrayEx(const P: TPoint; w, h:Integer;const a: TPointArray): Boolean; +Returns true if the point P is near a point in the TPA a with the + NearbyPointInArray ------------------ @@ -67,6 +80,8 @@ NearbyPointInArray function NearbyPointInArray(const P: TPoint; Dist:Integer;const a: TPointArray): Boolean; +Returns true if the point P is near a point in the TPA a with the + QuickTPASort ------------ @@ -91,6 +106,8 @@ SortTPAFrom procedure SortTPAFrom(var a: TPointArray; const From: TPoint); +Sorts the TPA a from the TPoint From + SortATPAFrom ------------ @@ -99,6 +116,8 @@ SortATPAFrom procedure SortATPAFrom(var a: T2DPointArray; const From: TPoint); +Sorts the T2DPointArray a from the TPoint From + SortATPAFromFirstPoint ---------------------- @@ -115,6 +134,8 @@ InvertTPA procedure InvertTPA(var a: TPointArray); +Reverses the TPA + InvertATPA ---------- @@ -123,6 +144,8 @@ InvertATPA procedure InvertATPA(var a: T2DPointArray); +Reverses the T2dPointArray + MiddleTPAEx ----------- @@ -131,6 +154,8 @@ MiddleTPAEx function MiddleTPAEx(const TPA: TPointArray; var x, y: Integer): Boolean; +Stores the middle point from the TPA in x and y + MiddleTPA --------- @@ -139,6 +164,8 @@ MiddleTPA function MiddleTPA(const tpa: TPointArray): TPoint; +Returns the middle TPA in the result + SortATPASize ------------ @@ -147,6 +174,8 @@ SortATPASize procedure SortATPASize(var a: T2DPointArray; const BigFirst: Boolean); +Sorts the T2dPointArray from largest to smallest if BigFirst is true or smallest to largest if BigFirst is false + SortATPAFromSize ---------------- @@ -155,6 +184,8 @@ SortATPAFromSize procedure SortATPAFromSize(var a: T2DPointArray; const Size: Integer; CloseFirst: Boolean); +Sorts the T2DPointArray from Size by the closest first if CloseFirst is true + InIntArrayEx ------------ @@ -163,6 +194,8 @@ InIntArrayEx function InIntArrayEx(const a: TIntegerArray; var Where: Integer; const Number: Integer): Boolean; +Returns true if Number was found in the TIntegerArray a and returns its location in Where + InIntArray ---------- @@ -171,6 +204,8 @@ InIntArray function InIntArray(const a: TIntegerArray; Number: Integer): Boolean; +Returns true if Number is found in the TintegerArray a + ClearSameIntegers ----------------- @@ -179,6 +214,8 @@ ClearSameIntegers procedure ClearSameIntegers(var a: TIntegerArray); +Deletes the indexes in the TintegerArray a which are duplicated + ClearSameIntegersAndTPA ----------------------- @@ -187,6 +224,8 @@ ClearSameIntegersAndTPA procedure ClearSameIntegersAndTPA(var a: TIntegerArray; var p: TPointArray); +Deletes the indexes in the TIntegerArray a and TPointArray p which are duplicated + SplitTPAEx ---------- @@ -195,6 +234,8 @@ SplitTPAEx function SplitTPAEx(const arr: TPointArray; w, h: Integer): T2DPointArray; +Splits the points with max X and Y distances W and H to their + SplitTPA -------- @@ -203,6 +244,8 @@ SplitTPA function SplitTPA(const arr: TPointArray; Dist: Integer): T2DPointArray; +Splits the points with max distance Dist to their own TPointArrays + FloodFillTPA ------------ @@ -219,6 +262,9 @@ FilterPointsPie procedure FilterPointsPie(var Points: TPointArray; const SD, ED, MinR, MaxR: Extended; Mx, My: Integer); +Removes the points that are in the TPointArray Points that are not within the the degrees SD (Strat Degrees) and + ED (End Degrees) and the radius' MinR (Min Radius) and MaxR (Max Radius) from the origin Mx and My + FilterPointsLine ---------------- @@ -227,6 +273,8 @@ FilterPointsLine procedure FilterPointsLine(var Points: TPointArray; Radial: Extended; Radius, MX, MY: Integer); +Returns the result in the TPointArray Points. Returns the points from the TPointArray Points that are on the line Radial from the center mx, my that is with the radius Radius + FilterPointsDist ---------------- @@ -235,6 +283,9 @@ FilterPointsDist procedure FilterPointsDist(var Points: TPointArray; const MinDist, MaxDist: Extended; Mx, My: Integer); +Removes the points from the TPointArray Points that are not within the radius MinDist (Min Distance) and MaxDist + from the origin Mx and My + GetATPABounds ------------- @@ -243,6 +294,8 @@ GetATPABounds function GetATPABounds(const ATPA: T2DPointArray): TBox; +Returns the boundaries of the T2DPointArray ATPA as a TBox + GetTPABounds ------------ @@ -251,6 +304,8 @@ GetTPABounds function GetTPABounds(const TPA: TPointArray): TBox; +Returns the boundaries of the TPointArray TPA as a TBox + FindTPAinTPA ------------ @@ -259,6 +314,8 @@ FindTPAinTPA function FindTPAinTPA(const SearchTPA, TotalTPA: TPointArray; var Matches: TPointArray): Boolean; +Looks for the TPoints from SearchTPA inside TotalTPA and stores the matches inside the TPointArray Matches + GetSamePointsATPA ----------------- @@ -267,6 +324,8 @@ GetSamePointsATPA function GetSamePointsATPA(const ATPA : T2DPointArray; var Matches : TPointArray) : boolean; +Finds duplicate Points inside the T2DPointArray ATPA and stores the results inside the TPointArray Matches + FindTextTPAinTPA ---------------- @@ -275,6 +334,8 @@ FindTextTPAinTPA function FindTextTPAinTPA(Height : integer;const SearchTPA, TotalTPA: TPointArray; var Matches: TPointArray): Boolean; +Looks for the TPoints from SearchTPA inside TotalTPA with a maximum y distance of Height and stores the matches inside the TPointArray Matches + SortCircleWise -------------- @@ -283,6 +344,8 @@ SortCircleWise procedure SortCircleWise(var tpa: TPointArray; const cx, cy, StartDegree: Integer; SortUp, ClockWise: Boolean); +Sorts the TPointArray tpa from the point cx, cy if Sortup is true. Starting at StartDegree going clockwise if Clockwise is True + LinearSort ---------- @@ -291,6 +354,8 @@ LinearSort procedure LinearSort(var tpa: TPointArray; cx, cy, sd: Integer; SortUp: Boolean); +Sorts the TPointArray tpa from cx, cy if Sortup is true on the degree angle sd + RotatePoint ----------- @@ -299,6 +364,8 @@ RotatePoint function RotatePoint(Const p: TPoint; angle, mx, my: Extended): TPoint; +Rotates the TPoint p around the center mx, my with the angle + ChangeDistPT ------------ @@ -307,6 +374,8 @@ ChangeDistPT function ChangeDistPT(const PT : TPoint; mx,my : integer; newdist : extended) : TPoint; +Returns a TPoint with the distance newdist from the point mx, my based on the position of the TPoint TP + ChangeDistTPA ------------- @@ -315,6 +384,8 @@ ChangeDistTPA function ChangeDistTPA(var TPA : TPointArray; mx,my : integer; newdist : extended) : boolean; +Returns the result in the TPointArray TPA with the distance newdist from mx, my based on the current position TPA + FindGapsTPA ----------- @@ -323,6 +394,8 @@ FindGapsTPA function FindGapsTPA(const TPA: TPointArray; MinPixels: Integer): T2DPointArray; +Finds the possible gaps in the TPointArray TPA and results the gaps as a T2DPointArray. Considers as a gap if the gap length is >= MinPixels + RemoveDistTPointArray --------------------- @@ -331,6 +404,8 @@ RemoveDistTPointArray function RemoveDistTPointArray(x, y, dist: Integer;const ThePoints: TPointArray; RemoveHigher: Boolean): TPointArray; +Finds the possible gaps in the TPointArray TPA and removes the gaps. Considers as a gap if the gap length is >= MinPixels + CombineTPA ---------- @@ -339,6 +414,8 @@ CombineTPA function CombineTPA(const Ar1, Ar2: TPointArray): TPointArray; +Attaches the TPointArray Ar2 onto the end of Ar1 and returns it as the result + ReArrangeandShortenArrayEx -------------------------- @@ -347,6 +424,8 @@ ReArrangeandShortenArrayEx function ReArrangeandShortenArrayEx(const a: TPointArray; w, h: Integer): TPointArray; +Results the TPointArray a with one point per box with side lengths W and H left + ReArrangeandShortenArray ------------------------ @@ -355,6 +434,8 @@ ReArrangeandShortenArray function ReArrangeandShortenArray(const a: TPointArray; Dist: Integer): TPointArray; +Results the TPointArray a with one point per box with side length Dist left + TPAtoATPAEx ----------- @@ -363,6 +444,8 @@ TPAtoATPAEx function TPAtoATPAEx(const TPA: TPointArray; w, h: Integer): T2DPointArray; +Splits the TPA to boxes with sidelengths W and H and results them as a T2DPointArray + TPAtoATPA --------- @@ -371,6 +454,8 @@ TPAtoATPA function TPAtoATPA(const TPA: TPointArray; Dist: Integer): T2DPointArray; +Splits the TPA to boxes with sidelength Dist and results them as a T2DPointArray + CombineIntArray --------------- @@ -379,6 +464,8 @@ CombineIntArray function CombineIntArray(const Ar1, Ar2: TIntegerArray): TIntegerArray; +Attaches the TIntegerArray Ar2 onto the end of Ar1 and returns it as the result + MergeATPA --------- @@ -387,6 +474,8 @@ MergeATPA function MergeATPA(const ATPA : T2DPointArray) : TPointArray; +Combines all the TPointArrays from the T2DPointArray ATPA into the result + AppendTPA --------- @@ -395,6 +484,8 @@ AppendTPA procedure AppendTPA(var TPA: TPointArray; const ToAppend: TPointArray); +Attaches the TPointArray ToAppend onto the end of TPA + TPAFromBox ---------- @@ -403,6 +494,8 @@ TPAFromBox function TPAFromBox(const Box : TBox) : TPointArray; +Create a TPointArray from the top left and the bottom right of the TBox Box + RotatePoints ------------ @@ -411,6 +504,8 @@ RotatePoints function RotatePoints(Const P: TPointArray; A, cx, cy: Extended): TPointArray ; +Rotates the TPointArray P around the center cx, cy with the angle a + FindTPAEdges ------------ @@ -419,6 +514,8 @@ FindTPAEdges function FindTPAEdges(const p: TPointArray): TPointArray; +Returns a TPointArray of the edge points of the TPointArray p + ClearTPAFromTPA --------------- @@ -427,6 +524,8 @@ ClearTPAFromTPA function ClearTPAFromTPA(const arP, ClearPoints: TPointArray): TPointArray; +Removes the points in TPointArray ClearPoints from arP + ReturnPointsNotInTPA -------------------- @@ -435,6 +534,8 @@ ReturnPointsNotInTPA function ReturnPointsNotInTPA(Const TotalTPA: TPointArray; const Box: TBox): TPointArray; +All the points from the TPointArray TotalTPA that are not in the TBox Box are returned in the TPointArray Res + PointInTPA ---------- @@ -443,6 +544,8 @@ PointInTPA function PointInTPA(p: TPoint;const arP: TPointArray): Boolean; +Returns true if the TPoint p is found in the TPointArray arP + ClearDoubleTPA -------------- @@ -451,6 +554,8 @@ ClearDoubleTPA procedure ClearDoubleTPA(var TPA: TPointArray); +Deletes duplicate TPAs int he TPointArray TPA + TPACountSort ------------ @@ -475,6 +580,8 @@ InvertTIA procedure InvertTIA(var tI: TIntegerArray); +Reverses the TIntegerArray tI + SumIntegerArray --------------- @@ -483,6 +590,8 @@ SumIntegerArray function SumIntegerArray(const Ints : TIntegerArray): Integer; +Retuns the sum of all the integers in the TIntegerArray Ints + AverageTIA ---------- @@ -491,6 +600,8 @@ AverageTIA function AverageTIA(const tI: TIntegerArray): Integer; +Gives an average of the sum of the integers in the TIntegerArray tI + AverageExtended --------------- @@ -499,6 +610,8 @@ AverageExtended function AverageExtended(const tE: TExtendedArray): Extended; +Gives an average of the sum of the extendeds in the TExtendedArray tI + SplitTPAExWrap -------------- @@ -507,6 +620,8 @@ SplitTPAExWrap procedure SplitTPAExWrap(const arr: TPointArray; w, h: Integer; var res : T2DPointArray); +Splits the points with max X and Y distances W and H to their and returns the result in the T2DPointArray Res + SplitTPAWrap ------------ @@ -515,6 +630,8 @@ SplitTPAWrap procedure SplitTPAWrap(const arr: TPointArray; Dist: Integer; var res: T2DPointArray); +Splits the points with max distance Dist to their own TPointArrays and returns the result in the T2DPointArray Res + FindGapsTPAWrap --------------- @@ -523,6 +640,8 @@ FindGapsTPAWrap procedure FindGapsTPAWrap(const TPA: TPointArray; MinPixels: Integer; var Res : T2DPointArray); +Finds the possible gaps in the TPointArray TPA and the result is returned in the T2DPointArray Res. Considers as a gap if the gap length is >= MinPixels + RemoveDistTPointArrayWrap ------------------------- @@ -531,6 +650,8 @@ RemoveDistTPointArrayWrap procedure RemoveDistTPointArrayWrap(x, y, dist: Integer;const ThePoints: TPointArray; RemoveHigher: Boolean; var Res : TPointArray); +Finds the possible gaps in the TPointArray TPA and removes the gaps. Considers as a gap if the gap length is >= MinPixels and returns the result in the TPointArray Res + CombineTPAWrap -------------- @@ -539,6 +660,8 @@ CombineTPAWrap procedure CombineTPAWrap(const Ar1, Ar2: TPointArray; var Res : TPointArray); +Attaches the TPointArray Ar2 onto the end of Ar1 and returns the result in the TPointArray Res + ReArrangeandShortenArrayExWrap ------------------------------ @@ -547,6 +670,8 @@ ReArrangeandShortenArrayExWrap procedure ReArrangeandShortenArrayExWrap(const a: TPointArray; w, h: Integer; var Res : TPointArray); +Results the TPointArray a with one point per box with side lengths W and H left and puts the result in Res + ReArrangeandShortenArrayWrap ---------------------------- @@ -555,6 +680,8 @@ ReArrangeandShortenArrayWrap procedure ReArrangeandShortenArrayWrap(const a: TPointArray; Dist: Integer; var Res : TPointArray); +Results the TPointArray a with one point per box with side length Dist left and puts the result in Res + TPAtoATPAExWrap --------------- @@ -563,6 +690,8 @@ TPAtoATPAExWrap procedure TPAtoATPAExWrap(const TPA: TPointArray; w, h: Integer; var Res : T2DPointArray); +Splits the TPA to boxes with sidelengths W and H and results them as a T2DPointArray in Res + TPAtoATPAWrap ------------- @@ -571,6 +700,8 @@ TPAtoATPAWrap procedure TPAtoATPAWrap(const TPA: TPointArray; Dist: Integer; var Res : T2DPointArray); +Splits the TPA to boxes with sidelength Dist and results them as a T2DPointArray in Res + CombineIntArrayWrap ------------------- @@ -579,6 +710,8 @@ CombineIntArrayWrap procedure CombineIntArrayWrap(const Ar1, Ar2: TIntegerArray; var Res : TIntegerArray); +Attaches the TIntegerArray Ar2 onto the end of Ar1 and returns it in the TIntegerArray Res + ReturnPointsNotInTPAWrap ------------------------ @@ -587,6 +720,8 @@ ReturnPointsNotInTPAWrap procedure ReturnPointsNotInTPAWrap(Const TotalTPA: TPointArray; const Box: TBox; var Res : TPointArray); +All the points from the TPointArray TotalTPA that are not in the TBox Box are returned in the TPointArray Res + MergeATPAWrap ------------- @@ -595,6 +730,8 @@ MergeATPAWrap procedure MergeATPAWrap(const ATPA : T2DPointArray; var Res: TPointArray); +Combines all the TPointArrays from the T2DPointArray ATPA into the TPointArray Res + TPAFromBoxWrap -------------- @@ -603,6 +740,8 @@ TPAFromBoxWrap procedure TPAFromBoxWrap(const Box : TBox; var Res : TPointArray); +Create a TPointArray from the top left and the bottom right of the TBox Box and returns the result in Res + RotatePointsWrap ---------------- @@ -611,6 +750,8 @@ RotatePointsWrap procedure RotatePointsWrap(Const P: TPointArray; A, cx, cy: Extended; var Res : TPointArray); +Rotates the TPointArray P around the center cx, cy with the angle a and returns the result in Res + FindTPAEdgesWrap ---------------- @@ -619,6 +760,8 @@ FindTPAEdgesWrap procedure FindTPAEdgesWrap(const p: TPointArray; var Res : TPointArray); +Returns a TPointArray of the edge points of the TPointArray p and returns the result in the TPointArray Res + ClearTPAFromTPAWrap ------------------- @@ -627,6 +770,8 @@ ClearTPAFromTPAWrap procedure ClearTPAFromTPAWrap(const arP, ClearPoints: TPointArray; var Res : TPointArray); +Removes the points in TPointArray ClearPoints from arP and returns the results in Res + SameTPA ------- @@ -635,6 +780,8 @@ SameTPA function SameTPA(const aTPA, bTPA: TPointArray): Boolean; +Returns true if the TPointArray aTPA is the same as bTPA + TPAInATPA --------- @@ -643,6 +790,8 @@ TPAInATPA function TPAInATPA(const TPA: TPointArray;const InATPA: T2DPointArray; var Index: LongInt): Boolean; +Returns true if the TPointArray TPA is found in the T2DPointArray InATPA and stores the index in Index + OffsetTPA --------- @@ -651,6 +800,8 @@ OffsetTPA procedure OffsetTPA(var TPA : TPointArray; const Offset : TPoint); +Offsets all the TPAs int the TPointArray TPA but the TPoint Offset + OffsetATPA ---------- @@ -659,6 +810,8 @@ OffsetATPA procedure OffsetATPA(var ATPA : T2DPointArray; const Offset : TPoint); +Offsets all the TPAs int the T2DPointArray ATPA but the TPoint Offset + CopyTPA ------- @@ -667,6 +820,8 @@ CopyTPA function CopyTPA(const TPA : TPointArray) : TPointArray; +Returns the TPointArray TPA + CopyATPA -------- @@ -675,4 +830,5 @@ CopyATPA function CopyATPA(const ATPA : T2DPointArray) : T2DPointArray; +Returns the T2DPointArray ATPA From 65c4fdbd0819ca4ed2d103e567deefc7984c9f06 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Wed, 17 Aug 2011 00:11:11 +0200 Subject: [PATCH 20/29] Documentation: Updated TODO. --- Doc/sphinx/TODO | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/Doc/sphinx/TODO b/Doc/sphinx/TODO index 387d933..2943474 100644 --- a/Doc/sphinx/TODO +++ b/Doc/sphinx/TODO @@ -1,5 +1,27 @@ -# Change a minus to a plus when something is being worked on. -# Remove it when you are done. +Check scriptref/dtm.rst, it look overly complicated with all the different +types. (MDTM, DDTM, TSDTM).... +Add examples to files in scriptref: + + - [ ] bitmaps.rst + - [ ] colourconverting.rst + - [ ] colourfinding.rst + - [ ] dtm.rst + - [ ] files.rst + - [/] mouseandkeyboard.rst + - [ ] ocr.rst + - [ ] sound.rst + - [ ] string.rst + - [ ] tpa.rst + - [ ] web.rst + - [ ] window.rst + +# ADDING CONTENT + +- Create a list of Simba Extensions. If the extension has a doc on it's own, + dont forget to link to it. +- Write mmlref / article (only for developers of Simba) +- Write tutorial? +- Write about Simba Stable/Unstable. # GENERAL @@ -12,13 +34,3 @@ seems to use it). - Find stuff to add to this list. -# ADDING CONTENT - -- Create a list of Simba Extensions. If the extension has a doc on it's own, - dont forget to link to it. -- Create scriptref/ articles. A lot of functionality that Simba exposes to the - Scripters is currently not documented. -- Write mmlref/ article (only for developers of Simba) -- Write tutorial? -- Fix up articles? -- Write about Simba Stable/Unstable. From c899b4e61b581d73a067d43733be38a54023b45f Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Sat, 20 Aug 2011 11:45:04 +0200 Subject: [PATCH 21/29] Simba: Fix mistake in web.rst --- Doc/sphinx/scriptref/web.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Doc/sphinx/scriptref/web.rst b/Doc/sphinx/scriptref/web.rst index c8fb0d6..94ef451 100644 --- a/Doc/sphinx/scriptref/web.rst +++ b/Doc/sphinx/scriptref/web.rst @@ -142,6 +142,8 @@ GetRawHeaders returns a string of headers from the specified client. Socket Functions ---------------- +Simba's Socket Functions. Examples required; if you have one, please let u know. + CreateSocket ~~~~~~~~~~~~ @@ -190,7 +192,6 @@ ListenSocket ListenSocket allows for a client socket to accept connections. - AcceptSocket ~~~~~~~~~~~~ @@ -249,15 +250,15 @@ SendSocket SendSocket sends a string of data to a bound client socket. -SetTimeout +SetSocketTimeout ~~~~~~~~~~ .. code-block:: pascal - procedure SetTimeout(Client, Time: integer); + procedure SetSocketTimeout(Client, Time: integer); SetTimeout sets a maximum amount of time for a bound client socket to wait for -data from another socket. +data from another socket. Time is in *milliseconds*. SocketInfo ~~~~~~~~~~ From b1f02535ffaee4fbac87cbf220a426d8bfedc976 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Tue, 30 Aug 2011 10:36:57 +0200 Subject: [PATCH 22/29] Update TODO files. Will get to some more Simba work in a week or two. --- TODO | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/TODO b/TODO index ba1abf6..dc43666 100644 --- a/TODO +++ b/TODO @@ -3,31 +3,24 @@ Simple stuff, not required, may not be possible/useful: - Coloured writeln [ ] - Make an TAction for the Colour Picker. [ ] - Portable install (needs fiddling with settings and such) [ ] + - Settings rewrite [ ] - --no-extensions flag for Simba. [ ] +- CTS/finder speedups and changes [X] -- CTS/finder speedups and changes [ ] - General ideas: - - everything subprocedure (lots of code) - - - jit + comparison function (per cts) generated, call in loop - - - comparison function (per cts), not generated, call in loop - - - JIT (Generate comparison functions) [ ] - Comparison functions for HSL/XYZ/L*a*b should check for match on each component before calculating the next. (see FindColorsToleranceOptimised) - - Pass color information in struct [ ] + - Pass color information in struct [X] - Precalculate screen bitmap in current cts / keep a cache - to save comparisons [ ] - - Add CTS 3 [ ] - - Add a direct RGB -> CIE L*a*b conversion [ ] - - Make sure colour conversions are inline [ ] + to save comparisons [X] + - Add CTS 3 [/] + - Add a direct RGB -> CIE L*a*b conversion [/] - More documentation: - - Cover all functions by at least mentioning the definition [ ] + - Cover all functions by at least mentioning the definition [/] + - Imported functions as well? - Write tutorial [ ] - In depth documentation per function [ ] @@ -36,17 +29,17 @@ Simple stuff, not required, may not be possible/useful: - Lape! [ ] - Integrate script manager [ ] - - Basic support. (Install scripts) [ ] - - Update functionality [ ] - - Uninstall scripts [ ] - - Better storage / more stable storage [ ] - - Pretty GUI [ ] - - Merging / storing usernames when updating [ ] + - Basic support. (Install scripts) [X] + - Update functionality [X] + - Uninstall scripts [X] + - Better storage / more stable storage [?] + - Pretty GUI [/] + - Merging / storing usernames when updating [?] - Make Simba more ``modular'': - Fonts [ ] - - Interpreters [ ] + - Interpreters [/] - Code completion/hints [ ] - - Extensions [ ] + - Extensions [X] - Interpreter system overhaul? [ ] From ab08afd9c1c750b363685bc025bfaf791ccf9dad Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Thu, 22 Sep 2011 01:29:52 +0200 Subject: [PATCH 23/29] Fix spelling mistakes. --- Projects/Simba/psextension.pas | 2 +- Projects/Simba/simbaunit.pas | 2 +- Projects/Simba/updateform.pas | 3 ++- Units/MMLAddon/mmlpsthread.pas | 4 ++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Projects/Simba/psextension.pas b/Projects/Simba/psextension.pas index 7a7a2f3..f794ea3 100644 --- a/Projects/Simba/psextension.pas +++ b/Projects/Simba/psextension.pas @@ -399,7 +399,7 @@ begin end; if InitScript then - mDebugLn('Init procedure succesfully called') + mDebugLn('Init procedure successfully called') else mDebugLn('Init procedure didn''t execute right, or couldn''t be found'); Enabled:= FWorking; diff --git a/Projects/Simba/simbaunit.pas b/Projects/Simba/simbaunit.pas index 4872c7a..4b3e0f5 100644 --- a/Projects/Simba/simbaunit.pas +++ b/Projects/Simba/simbaunit.pas @@ -3172,7 +3172,7 @@ begin Idler; if UnTarrer.Result then begin; - FormWriteln('Succesfully installed the new fonts!'); + FormWriteln('Successfully installed the new fonts!'); SetSetting('Settings/Fonts/Version',IntToStr(LatestVersion),true); if Assigned(self.OCR_Fonts) then self.OCR_Fonts.Free; diff --git a/Projects/Simba/updateform.pas b/Projects/Simba/updateform.pas index 1f3566b..4fa8ee3 100644 --- a/Projects/Simba/updateform.pas +++ b/Projects/Simba/updateform.pas @@ -241,7 +241,8 @@ begin FCancelling := False; FCancelled := True; DownloadSpeed.Visible := false; - Self.UpdateLog.Lines.Add('Download stopped at '+inttostr(DownloadProgress.Position)+'%... Simba did not succesfully update.'); + Self.UpdateLog.Lines.Add('Download stopped at '+inttostr(DownloadProgress.Position)+ + '%... Simba did not successfully update.'); // more detailed info mDebugLn('EXCEPTION IN UPDATEFORM: We either hit Cancel, or something went wrong with files'); if FileExists(Updater.BasePath + Updater.ReplacementFile + '_') then diff --git a/Units/MMLAddon/mmlpsthread.pas b/Units/MMLAddon/mmlpsthread.pas index 6f194f7..fb3f1a5 100644 --- a/Units/MMLAddon/mmlpsthread.pas +++ b/Units/MMLAddon/mmlpsthread.pas @@ -964,7 +964,7 @@ begin if PSScript.Compile then begin OutputMessages; - psWriteln('Compiled succesfully in ' + IntToStr(GetTickCount - Starttime) + ' ms.'); + psWriteln('Compiled successfully in ' + IntToStr(GetTickCount - Starttime) + ' ms.'); if CompileOnly then exit; // if not (ScriptState = SCompiling) then @@ -1208,7 +1208,7 @@ begin RUTIS.Compile; if not RUTIS.CompilerError then begin - psWriteln('Compiled succesfully in ' + IntToStr(GetTickCount - Starttime) + ' ms.'); + psWriteln('Compiled successfully in ' + IntToStr(GetTickCount - Starttime) + ' ms.'); if CompileOnly then exit; RUTIS.Run; From d6117264d278cecabf7efaa281716484192c641c Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Wed, 28 Sep 2011 13:12:12 +0200 Subject: [PATCH 24/29] Bitmaps.rst: fix typo. --- Doc/sphinx/scriptref/bitmaps.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/sphinx/scriptref/bitmaps.rst b/Doc/sphinx/scriptref/bitmaps.rst index cedf21c..b2c5c7e 100644 --- a/Doc/sphinx/scriptref/bitmaps.rst +++ b/Doc/sphinx/scriptref/bitmaps.rst @@ -33,7 +33,7 @@ function. Word of caution on bitmap creation ---------------------------------- -Bitmaps in Simba are internally all instances of *TMufasBitmap*. Scripts should +Bitmaps in Simba are internally all instances of *TMufasaBitmap*. Scripts should generally access bitmaps using their *handle*: an integer. All functions referenced here either require a bitmap *handle* or return one. From c7a6f55b662547f31ce7dff0f76c32fb47fcacff Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Wed, 28 Sep 2011 13:17:01 +0200 Subject: [PATCH 25/29] Bitmaps.rst: Change code examples a bit. --- Doc/sphinx/scriptref/bitmaps.rst | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Doc/sphinx/scriptref/bitmaps.rst b/Doc/sphinx/scriptref/bitmaps.rst index b2c5c7e..5475b03 100644 --- a/Doc/sphinx/scriptref/bitmaps.rst +++ b/Doc/sphinx/scriptref/bitmaps.rst @@ -18,10 +18,12 @@ an integer: .. code-block:: pascal var bmp, x, y: integer; - bmp := CreateBitmap(10, 10); // Create a bitmap of size (10, 10) - if FindBitmapIn(bmp, x, y, 0, 0, 300, 300) then - writeln('Found it!'); - FreeBitmap(bmp); // Don't forget to free it when we are done. + begin + bmp := CreateBitmap(10, 10); // Create a bitmap of size (10, 10) + if FindBitmapIn(bmp, x, y, 0, 0, 300, 300) then + writeln('Found it!'); + FreeBitmap(bmp); // Don't forget to free it when we are done. + end; Note that the previous example doesn't make a lot of sense as the bitmap has only been created and not filled with any colours, they are as of yet, @@ -46,7 +48,9 @@ free it again) .. code-block:: pascal var bmp: TMufasaBitmap; - bmp := TMufasBitmap.Create; + begin + bmp := TMufasBitmap.Create; + end; Because there is no way to get a *handle* to this bitmap; as it will not be managed by Simba internally. (All Bitmaps created by *CreateBitmap* are managed @@ -75,10 +79,12 @@ then call this function to get the class reference. var bmp: TMufasaBitmap; bmph: integer; - bmph := CreateBitmap(100, 100); - bmp := GetMufasaBitmap(bmph); + begin; + bmph := CreateBitmap(100, 100); + bmp := GetMufasaBitmap(bmph); - bmp.SetSize(150,150); // also changes bmph, as they are the same bitmap. + bmp.SetSize(150,150); // also changes bmph, as they are the same bitmap. + end; .. _scriptref-createbitmapstring: From b11cf8bd531febb65a2b20735269a4e60980faca Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Wed, 28 Sep 2011 23:00:21 +0200 Subject: [PATCH 26/29] Resolve bug #222. --- Projects/Simba/settings_const.inc | 55 ++++++++ Projects/Simba/simbaunit.pas | 203 ++++++++++++++++-------------- 2 files changed, 163 insertions(+), 95 deletions(-) create mode 100644 Projects/Simba/settings_const.inc diff --git a/Projects/Simba/settings_const.inc b/Projects/Simba/settings_const.inc new file mode 100644 index 0000000..ca26c13 --- /dev/null +++ b/Projects/Simba/settings_const.inc @@ -0,0 +1,55 @@ +ssCheckUpdate = 'Settings/Updater/CheckForUpdates'; +ssCheckUpdateMinutes = 'Settings/Updater/CheckEveryXMinutes'; +ssUpdaterLink = 'Settings/Updater/RemoteLink'; +ssUpdaterVersionLink = 'Settings/Updater/RemoteVersionLink'; + +ssLoadFontsOnStart = 'Settings/Fonts/LoadOnStartUp'; +ssFontsVersion = 'Settings/Fonts/Version'; +ssFontsLink = 'Settings/Fonts/UpdateLink'; +ssFontsVersionLink = 'Settings/Fonts/VersionLink'; +ssFontsPath = 'Settings/Fonts/Path'; + +ssIncludesPath = 'Settings/Includes/Path'; +ssInterpreterType = 'Settings/Interpreter/Type'; + +ssTabsOpenNextOnClose = 'Settings/Tabs/OpenNextOnClose'; +ssTabsOpenScriptInNewTab = 'Settings/Tabs/OpenScriptInNewTab'; +ssTabsCheckBeforeOpen = 'Settings/Tabs/CheckTabsBeforeOpen'; + +ssColourPickerShowHistoryOnPick = 'Settings/ColourPicker/ShowHistoryOnPick'; +ssColourPickerAddToHistoryOnPick = 'Settings/ColourPicker/AddToHistoryOnPick'; + + +ssScriptsPath = 'Settings/Scripts/Path'; + +ssCodeHintsShowAutomatically = 'Settings/CodeHints/ShowAutomatically'; +ssCodeCompletionShowAutomatically = 'Settings/CodeCompletion/ShowAutomatically'; +ssExtensionsFileExtension = 'Settings/Extensions/FileExtension'; + + +ssSourceEditorLazColors = 'Settings/SourceEditor/LazColors'; +ssSourceEditorDefScriptPath = 'Settings/SourceEditor/DefScriptPath'; + +ssNewsLink = 'Settings/News/URL'; +ssPluginsPath = 'Settings/Plugins/Path'; + +ssExtensionsExtensionN = 'Extensions/Extension'; +ssExtensionsPath = 'Settings/Extensions/Path'; +ssExtensionsCount = 'Extensions/ExtensionCount'; + +ssTrayAlwaysVisible = 'Settings/Tray/AlwaysVisible'; + +ssConsoleVisible = 'LastConfig/Console/Visible'; + +ssMainFormPosition = 'LastConfig/MainForm/Position'; +ssMainFormState = 'LastConfig/MainForm/State'; +ssMainFormNormalSize = 'Settings/MainForm/NormalSize'; + +ssFunctionListShown = 'LastConfig/MainForm/FunctionListShown'; +ssFunctionListShowOnStart = 'Settings/FunctionList/ShowOnStart'; + +ssMaxRecentFiles = 'Settings/General/MaxRecentFiles'; +ssRecentFiles = 'LastConfig/MainForm/RecentFiles'; +ssRecentFilesCount = 'LastConfig/MainForm/RecentFiles/Count'; +ssRecentFileN = 'LastConfig/MainForm/RecentFiles/File'; + diff --git a/Projects/Simba/simbaunit.pas b/Projects/Simba/simbaunit.pas index 4b3e0f5..b263436 100644 --- a/Projects/Simba/simbaunit.pas +++ b/Projects/Simba/simbaunit.pas @@ -82,6 +82,8 @@ const shortcut_PickColourKey = VK_P; {$ENDIF} + {$I settings_const.inc} + type { TMufasaTab } @@ -768,7 +770,7 @@ end; function TSimbaForm.GetInterpreter: Integer; begin - result := StrToIntDef(LoadSettingDef('Settings/Interpreter/Type','0'),0); + result := StrToIntDef(LoadSettingDef(ssInterpreterType, '0'),0); if (result < 0) or (result > 2) then begin SetInterpreter(0); @@ -778,12 +780,12 @@ end; function TSimbaForm.GetDefScriptPath: string; begin - result :=LoadSettingDef('Settings/SourceEditor/DefScriptPath', ExpandFileName(MainDir+DS+'default.simba')); + result :=LoadSettingDef(ssSourceEditorDefScriptPath, ExpandFileName(MainDir+DS+'default.simba')); end; function TSimbaForm.GetScriptPath: string; begin - result :=IncludeTrailingPathDelimiter(LoadSettingDef('Settings/Scripts/Path', ExpandFileName(MainDir+DS+'Scripts' + DS))); + result :=IncludeTrailingPathDelimiter(LoadSettingDef(ssScriptsPath, ExpandFileName(MainDir+DS+'Scripts' + DS))); end; procedure TSimbaForm.HandleOpenFileData; @@ -992,7 +994,7 @@ var begin UpdateTimer.Interval:= MaxInt; FontUpdate; - chk := LowerCase(LoadSettingDef('Settings/Updater/CheckForUpdates','True')); + chk := LowerCase(LoadSettingDef(ssCheckUpdate, 'True')); if chk <> 'true' then Exit; @@ -1008,7 +1010,7 @@ begin mDebugLn(format('Current Simba version: %d',[SimbaVersion])); mDebugLn('Latest Simba Version: ' + IntToStr(LatestVersion)); end; - time := StrToIntDef(LoadSettingDef('Settings/Updater/CheckEveryXMinutes','30'),30); + time := StrToIntDef(LoadSettingDef(ssCheckUpdateMinutes, '30'),30); UpdateTimer.Interval:= time {mins} * 60 {secs} * 1000 {ms};//Every half hour end; @@ -1154,7 +1156,7 @@ begin OldIndex := PageControl1.TabIndex; if TabIndex = OldIndex then begin; - if lowercase(LoadSettingDef('Settings/Tabs/OpenNextOnClose','False')) = 'false' then + if lowercase(LoadSettingDef(ssTabsOpenNextOnClose, 'False')) = 'false' then OldIndex := LastTab //We are closing the 'current' tab, lets go back in history else OldIndex := Min(Tabs.Count - 1,OldIndex + 1); @@ -1364,43 +1366,52 @@ procedure TSimbaForm.CreateDefaultEnvironment; var PluginsPath,extensionsPath : string; begin - CreateSetting('Settings/Updater/CheckForUpdates','True'); - CreateSetting('Settings/Updater/CheckEveryXMinutes','30'); - CreateSetting('Settings/Interpreter/Type', '0'); - CreateSetting('Settings/Fonts/LoadOnStartUp', 'True'); - CreateSetting('Settings/Fonts/Version','-1'); - CreateSetting('Settings/Tabs/OpenNextOnClose','False'); - CreateSetting('Settings/Tabs/OpenScriptInNewTab','True'); - CreateSetting('Settings/Tabs/CheckTabsBeforeOpen','True'); - CreateSetting('Settings/ColourPicker/ShowHistoryOnPick', 'True'); - CreateSetting('Settings/General/MaxRecentFiles','10'); - CreateSetting('Settings/MainForm/NormalSize','739:555'); - CreateSetting('Settings/FunctionList/ShowOnStart','True'); - CreateSetting('Settings/CodeHints/ShowAutomatically','True'); - CreateSetting('Settings/CodeCompletion/ShowAutomatically','True'); - CreateSetting('Settings/SourceEditor/LazColors','True'); - {$IFDEF USE_EXTENSIONS}CreateSetting('Settings/Extensions/FileExtension','sex');{$ENDIF} + CreateSetting(ssCheckUpdate, 'True'); + CreateSetting(ssCheckUpdateMinutes, '30'); + CreateSetting(ssInterpreterType, '0'); + CreateSetting(ssLoadFontsOnStart, 'True'); + CreateSetting(ssFontsVersion, '-1'); + CreateSetting(ssTabsOpenNextOnClose, 'False'); + CreateSetting(ssTabsOpenScriptInNewTab, 'True'); + CreateSetting(ssTabsCheckBeforeOpen, 'True'); + CreateSetting(ssColourPickerShowHistoryOnPick, 'True'); + CreateSetting(ssMaxRecentFiles, '10'); + CreateSetting(ssMainFormNormalSize, '739:555'); + CreateSetting(ssFunctionListShowOnStart, 'True'); + CreateSetting(ssCodeHintsShowAutomatically, 'True'); + CreateSetting(ssCodeCompletionShowAutomatically, 'True'); + CreateSetting(ssSourceEditorLazColors, 'True'); - CreateSetting('Settings/Updater/RemoteLink',SimbaURL + 'Simba'{$IFDEF WINDOWS} +'.exe'{$ENDIF}); - CreateSetting('Settings/Updater/RemoteVersionLink',SimbaURL + 'Version'); - CreateSetting('Settings/Fonts/VersionLink', FontURL + 'Version'); - CreateSetting('Settings/Fonts/UpdateLink', FontURL + 'Fonts.tar.bz2'); + {$IFDEF USE_EXTENSIONS} + CreateSetting(ssExtensionsFileExtension, 'sex'); + {$ENDIF} - CreateSetting('Settings/News/URL', 'http://simba.villavu.com/bin/news'); + CreateSetting(ssUpdaterLink, SimbaURL + 'Simba'{$IFDEF WINDOWS} +'.exe'{$ENDIF}); + CreateSetting(ssUpdaterVersionLink, SimbaURL + 'Version'); + CreateSetting(ssFontsVersionLink, FontURL + 'Version'); + CreateSetting(ssFontsLink, FontURL + 'Fonts.tar.bz2'); + + CreateSetting(ssNewsLink, 'http://simba.villavu.com/bin/news'); {Creates the paths and returns the path} - PluginsPath := CreateSetting('Settings/Plugins/Path', ExpandFileName(MainDir+ DS+ 'Plugins' + DS)); + PluginsPath := CreateSetting(ssPluginsPath, ExpandFileName(MainDir + DS + 'Plugins' + DS)); + {$IFDEF USE_EXTENSIONS} - extensionsPath := CreateSetting('Settings/Extensions/Path',ExpandFileName(MainDir +DS + 'Extensions' + DS)); - CreateSetting('Extensions/ExtensionCount','0'); + extensionsPath := CreateSetting(ssExtensionsPath, + ExpandFileName(MainDir +DS + 'Extensions' + DS)); + CreateSetting(ssExtensionsCount, '0'); {$ENDIF} - CreateSetting('LastConfig/MainForm/Position',''); - CreateSetting('LastConfig/MainForm/State','Normal'); + + CreateSetting(ssMainFormPosition, ''); + CreateSetting(ssMainFormState, 'Normal'); + {$ifdef MSWindows} - CreateSetting('LastConfig/Console/Visible','False'); + CreateSetting(ssConsoleVisible, 'False'); ShowConsole(False); {$endif} - CreateSetting('Settings/Tray/AlwaysVisible', 'True'); + + CreateSetting(ssTrayAlwaysVisible, 'True'); + if not DirectoryExists(IncludePath) then CreateDir(IncludePath); if not DirectoryExists(FontPath) then @@ -1429,7 +1440,7 @@ var i,ii : integer; begin self.BeginFormUpdate; - str := LoadSettingDef('LastConfig/MainForm/Position',''); + str := LoadSettingDef(ssMainFormPosition, ''); if str <> '' then begin; Data := Explode(':',str); @@ -1440,36 +1451,38 @@ begin Self.Width:= StrToIntDef(Data[2],self.width); Self.Height:= StrToIntDef(Data[3],self.height); end; - str := lowercase(LoadSettingDef('LastConfig/MainForm/State','Normal')); + str := lowercase(LoadSettingDef(ssMainFormState, 'Normal')); if str = 'maximized' then self.windowstate := wsMaximized else // if str = 'normal' then Self.WindowState := wsNormal; - if SettingExists('LastConfig/MainForm/RecentFiles/Count') then + if SettingExists(ssRecentFilesCount) then begin; - ii := StrToIntDef(LoadSettingDef('LastConfig/MainForm/RecentFiles/Count','-1'),-1); + ii := StrToIntDef(LoadSettingDef(ssRecentFilesCount, '-1'), -1); for i := 0 to ii do begin - str := LoadSettingDef('LastConfig/MainForm/RecentFiles/File' + inttostr(I),''); + str := LoadSettingDef(ssRecentFileN + inttostr(I),''); if str <> '' then AddRecentFile(str); end; end; - str := LowerCase(LoadSettingDef('Settings/FunctionList/ShowOnStart','True')); - str2 := lowercase(LoadSettingDef('LastConfig/MainForm/FunctionListShown','')); + str := LowerCase(LoadSettingDef(ssFunctionListShowOnStart, 'True')); + str2 := lowercase(LoadSettingDef(ssFunctionListShown, '')); if (str = 'true') or (str2 = 'true') then FunctionListShown(True) else FunctionListShown(false); + {$ifdef MSWindows} - str := LowerCase(LoadSettingDef('LastConfig/Console/Visible','True')); + str := LowerCase(LoadSettingDef(ssConsoleVisible, 'True')); if str = 'true' then ShowConsole(True) else ShowConsole(false); {$endif} - if Lowercase(LoadSettingDef('Settings/Tray/AlwaysVisible', 'True')) <> 'true' then + + if Lowercase(LoadSettingDef(ssTrayAlwaysVisible, 'True')) <> 'true' then begin MTrayIcon.Hide; writeln('Hiding tray.'); @@ -1488,36 +1501,36 @@ begin with SettingsForm.Settings do begin if Self.WindowState = wsMaximized then - SetSetting('LastConfig/MainForm/State','maximized') + SetSetting(ssMainFormState, 'maximized') else begin; //Only save the form position if its not maximized. - SetSetting('LastConfig/MainForm/State','normal'); + SetSetting(ssMainFormState, 'normal'); Data := ConvArr([inttostr(Self.left),inttostr(self.top),inttostr(self.width),inttostr(self.height)]); - SetSetting('LastConfig/MainForm/Position', Implode(':',Data )); + SetSetting(ssMainFormPosition, Implode(':',Data )); end; - DeleteKey('LastConfig/MainForm/RecentFiles'); + DeleteKey(ssRecentFiles); if RecentFiles.Count > 0 then begin - SetSetting('LastConfig/MainForm/RecentFiles/Count',inttostr(RecentFiles.Count)); + SetSetting(ssRecentFiles + '/Count', inttostr(RecentFiles.Count)); SetLength(data,RecentFiles.Count); for i := 0 to RecentFiles.Count - 1 do - SetSetting('LastConfig/MainForm/RecentFiles/File'+inttostr(i),RecentFiles[i]); + SetSetting(ssRecentFileN + inttostr(i),RecentFiles[i]); end; if MenuItemFunctionList.Checked then - SetSetting('LastConfig/MainForm/FunctionListShown','True') + SetSetting(ssFunctionListShown, 'True') else - SetSetting('LastConfig/MainForm/FunctionListShown','False'); + SetSetting(ssFunctionListShown, 'False'); {$ifdef MSWindows} if ConsoleVisible then - SetSetting('LastConfig/Console/Visible','True') + SetSetting(ssConsoleVisible, 'True') else - SetSetting('LastConfig/Console/Visible','False'); + SetSetting(ssConsoleVisible, 'False'); {$endif} {$IFDEF USE_EXTENSIONS} - SetSetting('Extensions/ExtensionCount',inttostr(ExtManager.Extensions.Count)); + SetSetting(ssExtensionsCount, inttostr(ExtManager.Extensions.Count)); for i := 0 to ExtManager.Extensions.Count-1 do begin; - path :='Extensions/Extension' + inttostr(I); + path := ssExtensionsExtensionN + inttostr(I); SetSetting(Path + '/Path',TVirtualSimbaExtension(ExtManager.Extensions[i]).Filename); SetSetting(Path + '/Enabled',BoolToStr(TVirtualSimbaExtension(ExtManager.Extensions[i]).Enabled,True)); end; @@ -1539,7 +1552,7 @@ var result := false; if (number < 0) or (number >= extCount) then exit; - path := 'Extensions/Extension' + inttostr(number); + path := ssExtensionsExtensionN + inttostr(number); if SettingExists(Path) = false then exit; ExtPath := LoadSettingDef(Path + '/Path',''); @@ -1555,11 +1568,11 @@ var i : integer; path : string; begin; - path := 'Extensions/Extension'; + path := ssExtensionsExtensionN; SettingsForm.Settings.DeleteKey(path + inttostr(number)); for i := number + 1 to extCount - 1 do SettingsForm.Settings.RenameKey(path + inttostr(i),'Extension' + inttostr(i-1)); - SetSetting('Extensions/ExtensionCount',inttostr(extCount - 1),true); + SetSetting(ssExtensionsCount, inttostr(extCount - 1),true); dec(extCount); end; @@ -1567,13 +1580,13 @@ var str,str2 : string; i : integer; begin - extCount := StrToIntDef(LoadSettingDef('Extensions/ExtensionCount/','0'),0); + extCount := StrToIntDef(LoadSettingDef(ssExtensionsCount, '0'),0); for i := 0 to extCount - 1 do while (i < extCount) and not LoadExtension(i) do DeleteExtension(i); - SetSetting('Extensions/ExtensionCount',inttostr(extCount)); - str := LoadSettingDef('Settings/Extensions/Path',ExpandFileName(MainDir +DS + 'Extensions' + DS)); - str2 := LoadSettingDef('Settings/Extensions/FileExtension','sex'); + SetSetting(ssExtensionsCount, inttostr(extCount)); + str := LoadSettingDef(ssExtensionsPath, ExpandFileName(MainDir +DS + 'Extensions' + DS)); + str2 := LoadSettingDef(ssExtensionsFileExtension, 'sex'); ExtManager.LoadPSExtensionsDir(str,str2); {$ELSE} begin @@ -1585,7 +1598,7 @@ var MaxRecentFiles : integer; Len,i : integer; begin - MaxRecentFiles:= StrToIntDef(LoadSettingDef('Settings/General/MaxRecentFiles','10'),10); + MaxRecentFiles:= StrToIntDef(LoadSettingDef(ssMaxRecentFiles, '10'), 10); i := RecentFiles.IndexOf(filename); if i <> -1 then RecentFiles.Delete(i); @@ -1674,7 +1687,7 @@ begin if selector.haspicked then Thread.Client.IOManager.SetTarget(Selector.LastPick); - loadFontsOnScriptStart := (lowercase(LoadSettingDef('Settings/Fonts/LoadOnStartUp', 'True')) = 'true'); + loadFontsOnScriptStart := (lowercase(LoadSettingDef(ssLoadFontsOnStart, 'True')) = 'true'); if (loadFontsOnScriptStart) then begin @@ -1930,12 +1943,12 @@ var SizeStr : string; Data : TStringArray; begin - SizeStr := LoadSettingDef('Settings/MainForm/NormalSize','739:555'); + SizeStr := LoadSettingDef(ssMainFormNormalSize, '739:555'); Data := Explode(':',SizeStr); if length(Data) = 2 then begin - Self.Width:= StrToIntDef(Data[0],739); - Self.Height:= StrToIntDef(Data[1],555); + Self.Width:= StrToIntDef(Data[0], 739); + Self.Height:= StrToIntDef(Data[1], 555); end else begin; self.width := 739; @@ -2812,7 +2825,7 @@ end; procedure TSimbaForm.MTrayIconClick(Sender: TObject); begin self.Show; - if Lowercase(LoadSettingDef('Settings/Tray/AlwaysVisible', 'True')) <> 'true' then + if Lowercase(LoadSettingDef(ssTrayAlwaysVisible, 'True')) <> 'true' then MTrayIcon.Hide; if Self.CanFocus then self.SetFocus; @@ -2822,7 +2835,7 @@ function TSimbaForm.GetSimbaNews: String; var t: TDownloadThread; begin - t := TDownloadThread.Create(LoadSettingDef('Settings/News/URL', 'http://Simba.villavu.com/bin/news'), + t := TDownloadThread.Create(LoadSettingDef(ssNewsLink, 'http://Simba.villavu.com/bin/news'), @Result); t.Resume; while not t.done do @@ -2834,13 +2847,13 @@ end; procedure TSimbaForm.SetDefScriptPath(const AValue: string); begin - SetSetting('Settings/SourceEditor/DefScriptPath',AValue,True); + SetSetting(ssSourceEditorDefScriptPath, AValue,True); end; {$IFDEF USE_EXTENSIONS} procedure TSimbaForm.SetExtPath(const AValue: string); begin - SetSetting('Settings/Extensions/Path',AValue,true); + SetSetting(ssExtensionsPath, AValue,true); end; {$ENDIF} @@ -2881,10 +2894,10 @@ begin cobj := TColourPickerObject.Create(c, Classes.Point(x,y), ''); { TODO: This should be no problem if the form is hidden? } - if lowercase(LoadSettingDef('Settings/ColourPicker/AddToHistoryOnPick', 'True')) = 'true' then + if lowercase(LoadSettingDef(ssColourPickerAddToHistoryOnPick, 'True')) = 'true' then ColourHistoryForm.AddColObj(cobj, true); - if lowercase(LoadSettingDef('Settings/ColourPicker/ShowHistoryOnPick', 'True')) = 'true' then + if lowercase(LoadSettingDef(ssColourPickerShowHistoryOnPick, 'True')) = 'true' then ColourHistoryForm.Show; FormWritelnEx('Picked colour: ' + inttostr(c) + ' at (' + inttostr(x) + ', ' + inttostr(y) + ')'); @@ -3004,34 +3017,34 @@ end; function TSimbaForm.GetShowParamHintAuto: boolean; begin - Result := LowerCase(LoadSettingDef('Settings/CodeHints/ShowAutomatically','True')) = 'true'; + Result := LowerCase(LoadSettingDef(ssCodeHintsShowAutomatically, 'True')) = 'true'; end; function TSimbaForm.GetShowCodeCompletionAuto: boolean; begin - Result := LowerCase(LoadSettingDef('Settings/CodeCompletion/ShowAutomatically','True')) = 'true'; + Result := LowerCase(LoadSettingDef(ssCodeCompletionShowAutomatically, 'True')) = 'true'; end; procedure TSimbaForm.SetFontPath(const AValue: String); begin - SetSetting('Settings/Fonts/Path',AValue,true); + SetSetting(ssFontsPath, AValue,true); end; function TSimbaForm.GetFontPath: String; begin - Result := IncludeTrailingPathDelimiter(LoadSettingDef('Settings/Fonts/Path', ExpandFileName(MainDir+DS+'Fonts' + DS))); + Result := IncludeTrailingPathDelimiter(LoadSettingDef(ssFontsPath, ExpandFileName(MainDir+DS+'Fonts' + DS))); end; {$IFDEF USE_EXTENSIONS} function TSimbaForm.GetExtPath: string; begin - Result := IncludeTrailingPathDelimiter(LoadSettingDef('Settings/Extensions/Path', ExpandFileName(MainDir+DS+'Extensions' + DS))); + Result := IncludeTrailingPathDelimiter(LoadSettingDef(ssExtensionsPath, ExpandFileName(MainDir+DS+'Extensions' + DS))); end; {$ENDIF} function TSimbaForm.GetHighlighter: TSynCustomHighlighter; begin - if lowercase(LoadSettingDef('Settings/SourceEditor/LazColors','True')) = 'true' then + if lowercase(LoadSettingDef(ssSourceEditorLazColors, 'True')) = 'true' then result := LazHighlighter else result := SCARHighlighter; @@ -3039,17 +3052,17 @@ end; function TSimbaForm.GetIncludePath: String; begin - Result := IncludeTrailingPathDelimiter(LoadSettingDef('Settings/Includes/Path', ExpandFileName(MainDir+DS+'Includes' + DS))); + Result := IncludeTrailingPathDelimiter(LoadSettingDef(ssIncludesPath, ExpandFileName(MainDir+DS+'Includes' + DS))); end; function TSimbaForm.GetPluginPath: string; begin - Result := IncludeTrailingPathDelimiter(LoadSettingDef('Settings/Plugins/Path', ExpandFileName(MainDir+DS+'Plugins' + DS))); + Result := IncludeTrailingPathDelimiter(LoadSettingDef(ssPluginsPath, ExpandFileName(MainDir+DS+'Plugins' + DS))); end; procedure TSimbaForm.SetIncludePath(const AValue: String); begin - SetSetting('Settings/Includes/Path',AValue,true); + SetSetting(ssIncludesPath, AValue,true); end; procedure TSimbaForm.SetInterpreter(const AValue: Integer); @@ -3061,7 +3074,7 @@ begin with CurrScript.Synedit do if (Lines.text = DefaultScript) and not(CanUndo or CanRedo) then UpdateCurrScript := true; - SetSetting('Settings/Interpreter/Type',Inttostr(AValue),true); + SetSetting(ssInterpreterType, Inttostr(AValue),true); UpdateInterpreter; if UpdateCurrScript then CurrScript.SynEdit.Lines.text := DefaultScript; @@ -3069,12 +3082,12 @@ end; procedure TSimbaForm.SetPluginPath(const AValue: string); begin - SetSetting('Settings/Plugins/Path',AValue,true); + SetSetting(ssPluginsPath, AValue,true); end; procedure TSimbaForm.SetScriptPath(const AValue: string); begin - SetSetting('Settings/Scripts/Path',AValue,True); + SetSetting(ssScriptsPath, AValue,True); end; procedure TSimbaForm.SetScriptState(const State: TScriptState); @@ -3147,12 +3160,12 @@ begin if UpdatingFonts then exit; UpdatingFonts := True; - CurrVersion := StrToIntDef(LoadSettingDef('Settings/Fonts/Version','-1'),-1); + CurrVersion := StrToIntDef(LoadSettingDef(ssFontsVersion, '-1'), -1); LatestVersion := SimbaUpdateForm.GetLatestFontVersion; if LatestVersion > CurrVersion then begin; formWriteln(format('New fonts available. Current version: %d. Latest version: %d',[CurrVersion,LatestVersion])); - FontDownload := TDownloadThread.Create(LoadSettingDef('Settings/Fonts/UpdateLink',FontURL + 'Fonts.tar.bz2'), + FontDownload := TDownloadThread.Create(LoadSettingDef(ssFontsLink, FontURL + 'Fonts.tar.bz2'), @Fonts); FontDownload.resume; while FontDownload.Done = false do @@ -3173,7 +3186,7 @@ begin if UnTarrer.Result then begin; FormWriteln('Successfully installed the new fonts!'); - SetSetting('Settings/Fonts/Version',IntToStr(LatestVersion),true); + SetSetting(ssFontsVersion, IntToStr(LatestVersion),true); if Assigned(self.OCR_Fonts) then self.OCR_Fonts.Free; FormWriteln('Freeing the current fonts. Creating new ones now'); @@ -3202,12 +3215,12 @@ end; procedure TSimbaForm.SetShowParamHintAuto(const AValue: boolean); begin - SetSetting('Settings/CodeHints/ShowAutomatically', Booltostr(AValue,true)); + SetSetting(ssCodeHintsShowAutomatically, Booltostr(AValue,true)); end; procedure TSimbaForm.SetShowCodeCompletionAuto(const AValue: boolean); begin - SetSetting('Settings/CodeCompletion/ShowAutomatically', Booltostr(AValue,true)); + SetSetting(ssCodeCompletionShowAutomatically, Booltostr(AValue,true)); end; {$ifdef mswindows} @@ -3335,7 +3348,7 @@ var OpenInNewTab : boolean; begin Result := False; - OpenInNewTab:= (LowerCase(LoadSettingDef('Settings/Tabs/OpenScriptInNewTab','True')) = 'true'); + OpenInNewTab:= (LowerCase(LoadSettingDef(ssTabsOpenScriptInNewTab, 'True')) = 'true'); if not OpenInNewTab then if CanExitOrOpen = false then Exit; @@ -3347,7 +3360,7 @@ begin InitialDir := ScriptDir; Options := [ofAllowMultiSelect, ofExtensionDifferent, ofPathMustExist, ofFileMustExist, ofEnableSizing, ofViewDetail]; Filter:= 'Simba Files|*.simba;*.simb;*.cogat;*.mufa;*.txt' + - {$IFDEF USE_EXTENSIONS}';*.' + LoadSettingDef('Settings/Extensions/FileExtension', 'sex') + {$ENDIF} + {$IFDEF USE_EXTENSIONS}';*.' + LoadSettingDef(ssExtensionsFileExtension, 'sex') + {$ENDIF} '|Any files|*.*'; if Execute then begin @@ -3376,11 +3389,11 @@ begin if AlwaysOpenInNewTab then OpenInNewTab := true else - OpenInNewTab:= (LowerCase(LoadSettingDef('Settings/Tabs/OpenScriptInNewTab','True')) = 'true'); + OpenInNewTab:= (LowerCase(LoadSettingDef(ssTabsOpenScriptInNewTab,'True')) = 'true'); if CheckOtherTabs then CheckTabsFirst := True else - CheckTabsFirst := (Lowercase(LoadSettingDef('Settings/Tabs/CheckTabsBeforeOpen','True')) = 'true'); + CheckTabsFirst := (Lowercase(LoadSettingDef(ssTabsCheckBeforeOpen, 'True')) = 'true'); if FileExistsUTF8(FileName) then begin; if CheckTabsFirst then @@ -3455,7 +3468,7 @@ begin else InitialDir := ScriptDir; filter := 'Simba Files|*.simba;*.simb;*.cogat;*.mufa;*.txt' + - {$IFDEF USE_EXTENSIONS}';*.' + LoadSettingDef('Settings/Extensions/FileExtension','sex') + {$ENDIF} + {$IFDEF USE_EXTENSIONS}';*.' + LoadSettingDef(ssExtensionsFileExtension, 'sex') + {$ENDIF} '|Any files|*.*'; if Execute then begin; From 2833b60142da3e6cf5bf5f2a539f8fff6f5635c7 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Wed, 28 Sep 2011 23:23:33 +0200 Subject: [PATCH 27/29] Clean up settings_const.inc a bit more. --- Projects/Simba/settings_const.inc | 99 ++++++++++++++++++------------- 1 file changed, 59 insertions(+), 40 deletions(-) diff --git a/Projects/Simba/settings_const.inc b/Projects/Simba/settings_const.inc index ca26c13..04ba393 100644 --- a/Projects/Simba/settings_const.inc +++ b/Projects/Simba/settings_const.inc @@ -1,55 +1,74 @@ -ssCheckUpdate = 'Settings/Updater/CheckForUpdates'; -ssCheckUpdateMinutes = 'Settings/Updater/CheckEveryXMinutes'; -ssUpdaterLink = 'Settings/Updater/RemoteLink'; -ssUpdaterVersionLink = 'Settings/Updater/RemoteVersionLink'; +ssSettings = 'Settings/'; +ssLastConfig = 'LastConfig/'; -ssLoadFontsOnStart = 'Settings/Fonts/LoadOnStartUp'; -ssFontsVersion = 'Settings/Fonts/Version'; -ssFontsLink = 'Settings/Fonts/UpdateLink'; -ssFontsVersionLink = 'Settings/Fonts/VersionLink'; -ssFontsPath = 'Settings/Fonts/Path'; +ssUpdater = 'Updater/'; +ssFonts = 'Fonts/'; +ssIncludes = 'Includes/'; +ssInterpreter = 'Interpreter/'; +ssTabs = 'Tabs/'; +ssColourPicker = 'ColourPicker/'; +ssScripts = 'Scripts/'; +ssExtensions = 'Extensions/'; +ssMainForm = 'MainForm/'; +ssSourceEditor = 'SourceEditor/'; +ssTray = 'Tray/'; +ssConsole = 'Console/'; +ssNews = 'News/'; +ssPlugins = 'Plugins/'; -ssIncludesPath = 'Settings/Includes/Path'; -ssInterpreterType = 'Settings/Interpreter/Type'; - -ssTabsOpenNextOnClose = 'Settings/Tabs/OpenNextOnClose'; -ssTabsOpenScriptInNewTab = 'Settings/Tabs/OpenScriptInNewTab'; -ssTabsCheckBeforeOpen = 'Settings/Tabs/CheckTabsBeforeOpen'; - -ssColourPickerShowHistoryOnPick = 'Settings/ColourPicker/ShowHistoryOnPick'; -ssColourPickerAddToHistoryOnPick = 'Settings/ColourPicker/AddToHistoryOnPick'; +ssCheckUpdate = ssSettings + ssUpdater + 'CheckForUpdates'; +ssCheckUpdateMinutes = ssSettings + ssUpdater + 'CheckEveryXMinutes'; +ssUpdaterLink = ssSettings + ssUpdater + 'RemoteLink'; +ssUpdaterVersionLink = ssSettings + ssUpdater + 'RemoteVersionLink'; -ssScriptsPath = 'Settings/Scripts/Path'; +ssLoadFontsOnStart = ssSettings + ssFonts + 'LoadOnStartUp'; +ssFontsVersion = ssSettings + ssFonts + 'Version'; +ssFontsLink = ssSettings + ssFonts + 'UpdateLink'; +ssFontsVersionLink = ssSettings + ssFonts + 'VersionLink'; +ssFontsPath = ssSettings + ssFonts + 'Path'; -ssCodeHintsShowAutomatically = 'Settings/CodeHints/ShowAutomatically'; -ssCodeCompletionShowAutomatically = 'Settings/CodeCompletion/ShowAutomatically'; -ssExtensionsFileExtension = 'Settings/Extensions/FileExtension'; +ssIncludesPath = ssSettings + ssIncludes + 'Path'; +ssInterpreterType = ssSettings + ssInterpreter + 'Type'; + +ssTabsOpenNextOnClose = ssSettings + ssTabs + 'OpenNextOnClose'; +ssTabsOpenScriptInNewTab = ssSettings + ssTabs + 'OpenScriptInNewTab'; +ssTabsCheckBeforeOpen = ssSettings + ssTabs + 'CheckTabsBeforeOpen'; + +ssColourPickerShowHistoryOnPick = ssSettings + ssColourPicker + 'ShowHistoryOnPick'; +ssColourPickerAddToHistoryOnPick = ssSettings + ssColourPicker + 'AddToHistoryOnPick'; -ssSourceEditorLazColors = 'Settings/SourceEditor/LazColors'; -ssSourceEditorDefScriptPath = 'Settings/SourceEditor/DefScriptPath'; +ssScriptsPath = ssSettings + ssScripts + 'Path'; -ssNewsLink = 'Settings/News/URL'; -ssPluginsPath = 'Settings/Plugins/Path'; +ssCodeHintsShowAutomatically = ssSettings + 'CodeHints/ShowAutomatically'; +ssCodeCompletionShowAutomatically = ssSettings + 'CodeCompletion/ShowAutomatically'; -ssExtensionsExtensionN = 'Extensions/Extension'; -ssExtensionsPath = 'Settings/Extensions/Path'; -ssExtensionsCount = 'Extensions/ExtensionCount'; -ssTrayAlwaysVisible = 'Settings/Tray/AlwaysVisible'; +ssSourceEditorLazColors = ssSettings + ssSourceEditor + 'LazColors'; +ssSourceEditorDefScriptPath = ssSettings + ssSourceEditor + 'DefScriptPath'; -ssConsoleVisible = 'LastConfig/Console/Visible'; +ssNewsLink = ssSettings + ssNews + 'URL'; +ssPluginsPath = ssSettings + ssPlugins + 'Path'; -ssMainFormPosition = 'LastConfig/MainForm/Position'; -ssMainFormState = 'LastConfig/MainForm/State'; -ssMainFormNormalSize = 'Settings/MainForm/NormalSize'; +ssExtensionsExtensionN = ssExtensions + 'Extension'; +ssExtensionsPath = ssSettings + ssExtensions + 'Path'; +ssExtensionsCount = ssExtensions + 'ExtensionCount'; +ssExtensionsFileExtension = ssSettings + ssExtensions + 'FileExtension'; -ssFunctionListShown = 'LastConfig/MainForm/FunctionListShown'; -ssFunctionListShowOnStart = 'Settings/FunctionList/ShowOnStart'; +ssTrayAlwaysVisible = ssSettings + ssTray + 'AlwaysVisible'; -ssMaxRecentFiles = 'Settings/General/MaxRecentFiles'; -ssRecentFiles = 'LastConfig/MainForm/RecentFiles'; -ssRecentFilesCount = 'LastConfig/MainForm/RecentFiles/Count'; -ssRecentFileN = 'LastConfig/MainForm/RecentFiles/File'; +ssConsoleVisible = ssLastConfig + ssConsole + 'Visible'; + +ssMainFormPosition = ssLastConfig + ssMainForm + 'Position'; +ssMainFormState = ssLastConfig + ssMainForm + 'State'; +ssMainFormNormalSize = ssSettings + ssMainForm + 'NormalSize'; +ssFunctionListShown = ssLastConfig + ssMainForm + 'FunctionListShown'; + +ssFunctionListShowOnStart = ssSettings + 'FunctionList/ShowOnStart'; + +ssMaxRecentFiles = ssSettings + 'General/MaxRecentFiles'; +ssRecentFiles = ssLastConfig + ssMainForm + 'RecentFiles'; +ssRecentFilesCount = ssLastConfig + ssMainForm + 'RecentFiles/Count'; +ssRecentFileN = ssLastConfig + ssMainForm + 'RecentFiles/File'; From 5e7cf81f13b156e8d4f0703321bf479789bd9496 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Fri, 30 Sep 2011 02:33:16 +0200 Subject: [PATCH 28/29] Resolve bug #309. --- Units/MMLAddon/PSInc/Wrappers/file.inc | 5 +++++ Units/MMLAddon/PSInc/psexportedmethods.inc | 1 + 2 files changed, 6 insertions(+) diff --git a/Units/MMLAddon/PSInc/Wrappers/file.inc b/Units/MMLAddon/PSInc/Wrappers/file.inc index f2b1589..ff88571 100644 --- a/Units/MMLAddon/PSInc/Wrappers/file.inc +++ b/Units/MMLAddon/PSInc/Wrappers/file.inc @@ -101,6 +101,11 @@ begin result := GetDirectories(path); end; +function ps_DeleteFile(const Filename: string): Boolean; extdecl; +begin + Result := DeleteFileUTF8(Filename); +end; + procedure ps_WriteINI(const Section, KeyName, NewString, FileName: string);extdecl; var tempini : TIniFile; diff --git a/Units/MMLAddon/PSInc/psexportedmethods.inc b/Units/MMLAddon/PSInc/psexportedmethods.inc index 3cdedd5..0884b66 100644 --- a/Units/MMLAddon/PSInc/psexportedmethods.inc +++ b/Units/MMLAddon/PSInc/psexportedmethods.inc @@ -156,6 +156,7 @@ AddFunction(@ps_FileExists,'function FileExists (const FileName : string ) : Boo AddFunction(@ps_ForceDirectores,'function ForceDirectories(const dir : string) : boolean;'); AddFunction(@ps_GetFiles,'function GetFiles(const Path, Ext : string) : TStringArray;'); AddFunction(@ps_GetDirectories,'function GetDirectories(const path : string) : TStringArray;'); +AddFunction(@ps_DeleteFile, 'function DeleteFile(const Filename: string): Boolean;'); AddFunction(@ps_WriteINI,'procedure WriteINI(const Section, KeyName, NewString, FileName: string);'); AddFunction(@ps_ReadINI,'function ReadINI(const Section, KeyName, FileName: string): string;'); AddFunction(@ps_DeleteINI,'procedure DeleteINI(const Section, KeyName, FileName: string);'); From e60a542c457b993a752748dddc811089edd1eed7 Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Sun, 2 Oct 2011 00:45:20 +0200 Subject: [PATCH 29/29] Filewall can now hook into DeleteFile. --- Units/MMLAddon/PSInc/Wrappers/file.inc | 2 +- Units/MMLCore/files.pas | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Units/MMLAddon/PSInc/Wrappers/file.inc b/Units/MMLAddon/PSInc/Wrappers/file.inc index ff88571..60b6579 100644 --- a/Units/MMLAddon/PSInc/Wrappers/file.inc +++ b/Units/MMLAddon/PSInc/Wrappers/file.inc @@ -103,7 +103,7 @@ end; function ps_DeleteFile(const Filename: string): Boolean; extdecl; begin - Result := DeleteFileUTF8(Filename); + Result := CurrThread.Client.MFiles.DeleteFile(Filename); end; procedure ps_WriteINI(const Section, KeyName, NewString, FileName: string);extdecl; diff --git a/Units/MMLCore/files.pas b/Units/MMLCore/files.pas index 18d2aaf..06d0d9b 100644 --- a/Units/MMLCore/files.pas +++ b/Units/MMLCore/files.pas @@ -45,6 +45,7 @@ type function OpenFile(Path: string; Shared: Boolean): Integer; function RewriteFile(Path: string; Shared: Boolean): Integer; function AppendFile(Path: string): Integer; + function DeleteFile(Filename: string): Boolean; procedure CloseFile(FileNum: Integer); function EndOfFile(FileNum: Integer): Boolean; function FileSizeMuf(FileNum: Integer): LongInt; @@ -334,6 +335,21 @@ begin end; end; + +function TMFiles.DeleteFile(Filename: string): Boolean; +var + Continue : Boolean; +begin + if Assigned(WriteFileEvent) then + begin; + Continue := true; + WriteFileEvent(Self, Filename, continue); + if not Continue then + exit(False); + end; + Result := DeleteFileUTF8(Filename); +end; + {/\ Free's the given File at the given index. /\}