diff --git a/Extensions/test.pas b/Extensions/test.pas
deleted file mode 100644
index 4b6a49b..0000000
--- a/Extensions/test.pas
+++ /dev/null
@@ -1,16 +0,0 @@
-program new;
-
-{ Creating TForm crashed for me, but probably because I'm on Linux x86_64 }
-procedure init;
-
-//var
-// a: TForm;
-begin
- createf;
-// a := TForm.Create(nil);
-// a.ShowModal;
-// a.Free;
-end;
-
-begin
-end.
diff --git a/Extensions/test.sex b/Extensions/test.sex
new file mode 100644
index 0000000..d4d1000
--- /dev/null
+++ b/Extensions/test.sex
@@ -0,0 +1,35 @@
+program new;
+
+procedure init;
+begin;
+ Writeln('init your extension here');
+end;
+
+procedure free;
+begin
+ Writeln('Free your extension here');
+end;
+
+procedure Attach;
+begin;
+ Writeln('Your extension has been enabled, do stuff here');
+end;
+
+Procedure Detach;
+begin
+ Writeln('Your extension has ben disabled, do stuff here');
+end;
+
+//Called to retrieve the name of your extension
+function GetName : string;
+begin;
+ result := 'Test Extension';
+end;
+
+//Called to retrieve the version of your extension
+function GetVersion : string;
+begin;
+ result := '1.1b';
+end;
+begin
+end.
diff --git a/Extensions/test2.sex b/Extensions/test2.sex
new file mode 100644
index 0000000..6af8172
--- /dev/null
+++ b/Extensions/test2.sex
@@ -0,0 +1,53 @@
+program new;
+var
+ MenuItem,MenuItem2 : TMenuItem;
+ Started : Boolean;
+
+procedure OnClick(sender : TObject);
+begin;
+ Writeln('Hey you clicked the test menu item!');
+end;
+procedure init;
+begin;
+ MenuItem := TMenuItem.Create(Simba_MainMenu);
+ MenuItem.Caption := 'Test';
+ Simba_MainMenu.Items.Add(menuItem);
+ MenuItem2 := TMenuItem.Create(MenuItem);
+ MenuItem2.Caption := 'Test!';
+ MenuItem2.OnClick := @OnClick;
+ MenuItem.Add(MenuItem2);
+ Started := True;
+end;
+
+procedure Free;
+begin
+ if Started then
+ begin;
+ //MenuItem.Free; {Doesn't work in PS somehow}
+ //MenuItem2.Free;
+ end;
+end;
+
+procedure Attach;
+begin;
+ //Menuitem.Visible := True;
+end;
+
+Procedure Detach;
+begin
+ //Menuitem.Visible := False;
+end;
+
+//Called to retrieve the name of your extension
+function GetName : string;
+begin;
+ result := 'Add submenu';
+end;
+
+//Called to retrieve the version of your extension
+function GetVersion : string;
+begin;
+ result := '1.0';
+end;
+begin
+end.
diff --git a/Extensions/test3.sex b/Extensions/test3.sex
new file mode 100644
index 0000000..5ebaa9a
--- /dev/null
+++ b/Extensions/test3.sex
@@ -0,0 +1,35 @@
+program new;
+
+procedure init;
+begin;
+ Writeln('init your extension here');
+end;
+
+procedure free;
+begin
+ Writeln('Free your extension here');
+end;
+
+procedure Attach;
+begin;
+ Writeln('Your extension has been enabled, do stuff here');
+end;
+
+Procedure Detach;
+begin
+ Writeln('Your extension has ben disabled, do stuff here');
+end;
+
+//Called to retrieve the name of your extension
+function GetName : string;
+begin;
+ result := 'Leet Extension';
+end;
+
+//Called to retrieve the version of your extension
+function GetVersion : string;
+begin;
+ result := '0.001';
+end;
+begin
+end.
diff --git a/Projects/SAMufasaGUI/extensionmanager.pas b/Projects/SAMufasaGUI/extensionmanager.pas
index 213b615..631ba5e 100644
--- a/Projects/SAMufasaGUI/extensionmanager.pas
+++ b/Projects/SAMufasaGUI/extensionmanager.pas
@@ -5,46 +5,132 @@ unit extensionmanager;
interface
uses
- Classes, SysUtils;
+ Classes, SysUtils,virtualextension,psextension,mufasabase,mufasatypes;
type
-
+ TExtension = TVirtualSimbaExtension;
(**
- TExtensionManager holds a list of VirtualExtensions, and
+ TExtensionManager holds a list of TExtension, and
has functions to easily handle hooks.
*)
+ { TExtensionManager }
+
TExtensionManager = class(TObject)
- public
- constructor Create;
- destructor Destroy; override;
private
- Extensions: TList;
+ FOnChange: TNotifyEvent;
+ procedure SetOnchange(const AValue: TNotifyEvent);
public
- function HandleHook(HookName: String; Args: Array of Variant): Variant;
+ constructor Create;
+ destructor Destroy; override;
+ public
+ Extensions: TList;
+ StartDisabled : boolean;
+ property OnChange : TNotifyEvent read FOnChange write SetOnchange;
+ function GetExtensionIndex(Filename : string) : integer;
+ function LoadPSExtension(Filename : string) : boolean;
+ function LoadPSExtensionsDir(Directory,ext : string) : boolean;
+ function HandleHook(HookName: String; Args: Array of Variant): Variant;
end;
-
+var
+ ExtManager : TExtensionManager;
implementation
uses
- pseventextension, virtualextension;
+ TestUnit;
+procedure TExtensionManager.SetOnchange(const AValue: TNotifyEvent);
+var
+ i : integer;
+begin
+ for i := 0 to Extensions.Count - 1 do
+ TExtension(Extensions[i]).OnChange := AValue;;
+ FOnChange:=AValue;
+end;
constructor TExtensionManager.Create;
begin
+ inherited Create;
Extensions := TList.Create;
+ StartDisabled := True;
end;
destructor TExtensionManager.Destroy;
var
i: Integer;
begin
- {
for i := 0 to Extensions.Count - 1 do
- TVirtualSimbaExtension(Extensions.Items[i]).Free;
- }
+ TExtension(Extensions.Items[i]).Free;
Extensions.Free;
+ inherited Destroy;
+end;
+
+function TExtensionManager.GetExtensionIndex(Filename: string): integer;
+var
+ i : integer;
+begin
+ for i := 0 to Extensions.Count - 1 do
+ if CompareText(TExtension(Extensions[i]).Filename,filename) = 0 then
+ exit(i);
+ result := -1;
+end;
+
+function TExtensionManager.LoadPSExtension(Filename: string): boolean;
+var
+ Ext : TExtension;
+begin
+ if GetExtensionIndex(filename) <> -1 then
+ exit(true);
+ Result := False;
+ try
+ Ext := TSimbaPSExtension.Create(filename,startdisabled);
+ result := TSimbaPSExtension(ext).Working;
+ Extensions.Add(ext);
+ ext.OnChange:= FOnChange;
+ if assigned(FOnChange) then
+ FOnChange(Self);
+ except
+ on e : exception do
+ formWritelnex(format('Error in LoadPSExtension(%s): %s',[FileName, e.message]));
+ end;
+end;
+
+function GetFiles(Path, Ext: string): TstringArray;
+var
+ SearchRec : TSearchRec;
+ c : integer;
+begin
+ c := 0;
+ if FindFirst(Path + '*.' + ext, faAnyFile, SearchRec) = 0 then
+ begin
+ repeat
+ inc(c);
+ SetLength(Result,c);
+ Result[c-1] := SearchRec.Name;
+ until FindNext(SearchRec) <> 0;
+ SysUtils.FindClose(SearchRec);
+ end;
+end;
+
+function TExtensionManager.LoadPSExtensionsDir(Directory,ext: string): boolean;
+var
+ Files : TstringArray;
+ i : integer;
+ tempevent : TNotifyEvent;
+begin
+ result := false;
+ if not DirectoryExists(directory) then
+ exit;
+ tempevent := FOnChange;
+ FOnChange := nil;
+ Directory := IncludeTrailingPathDelimiter(directory);
+ Files := GetFiles(Directory,ext);
+ for i := 0 to high(Files) do
+ result := result or LoadPSExtension(Directory + files[i]);
+ FOnChange := Tempevent;
+ if Assigned(FOnChange) then
+ FOnChange(self);
end;
// How do we return more than one result?
@@ -53,11 +139,13 @@ var
i: Integer;
begin
for i := 0 to Extensions.Count -1 do
- if TVirtualSimbaExtension(Extensions.Items[i]).HookExists(HookName) then
- if TVirtualSimbaExtension(Extensions.Items[i]).ExecuteHook(HookName, Args, Result) <> 0 then
- begin
- // Not succesfull.
- end;
+ with TExtension(Extensions[i]) do
+ if Enabled then
+ if HookExists(HookName) then
+ if ExecuteHook(HookName, Args, Result) <> 0 then
+ begin
+ // Not succesfull.
+ end;
end;
end.
diff --git a/Projects/SAMufasaGUI/extensionmanagergui.lfm b/Projects/SAMufasaGUI/extensionmanagergui.lfm
new file mode 100644
index 0000000..e3c0084
--- /dev/null
+++ b/Projects/SAMufasaGUI/extensionmanagergui.lfm
@@ -0,0 +1,74 @@
+object ExtensionsForm: TExtensionsForm
+ Left = 200
+ Height = 256
+ Top = 139
+ Width = 389
+ Caption = 'ExtensionsForm'
+ ClientHeight = 256
+ ClientWidth = 389
+ OnCreate = FormCreate
+ LCLVersion = '0.9.29'
+ object ExtensionsBox: TGroupBox
+ Left = 0
+ Height = 256
+ Top = 0
+ Width = 389
+ Align = alClient
+ Caption = 'Extensions'
+ ClientHeight = 238
+ ClientWidth = 385
+ TabOrder = 0
+ object ExtensionsList: TListView
+ Left = 6
+ Height = 192
+ Top = 8
+ Width = 371
+ Align = alCustom
+ Anchors = [akTop, akLeft, akRight, akBottom]
+ Columns = <
+ item
+ Caption = 'Extensions'
+ MinWidth = 90
+ Width = 90
+ end
+ item
+ Caption = 'Name'
+ MinWidth = 75
+ Width = 150
+ end
+ item
+ AutoSize = True
+ Caption = 'Version'
+ MinWidth = 60
+ Width = 60
+ end>
+ HideSelection = False
+ ItemIndex = -1
+ ReadOnly = True
+ RowSelect = True
+ TabOrder = 0
+ ViewStyle = vsReport
+ OnAdvancedCustomDrawItem = ExtensionsListAdvancedCustomDrawItem
+ OnSelectItem = ExtensionsListSelectItem
+ end
+ object Button: TButton
+ Left = 302
+ Height = 25
+ Top = 208
+ Width = 75
+ Caption = 'Refresh'
+ OnClick = ButtonClick
+ TabOrder = 1
+ end
+ object ExtEnabled: TCheckBox
+ Left = 6
+ Height = 17
+ Top = 208
+ Width = 72
+ Caption = 'ExtEnabled'
+ OnChange = ExtEnabledChange
+ TabOrder = 2
+ Visible = False
+ end
+ end
+end
diff --git a/Projects/SAMufasaGUI/extensionmanagergui.lrs b/Projects/SAMufasaGUI/extensionmanagergui.lrs
new file mode 100644
index 0000000..33e7bcb
--- /dev/null
+++ b/Projects/SAMufasaGUI/extensionmanagergui.lrs
@@ -0,0 +1,23 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TExtensionsForm','FORMDATA',[
+ 'TPF0'#15'TExtensionsForm'#14'ExtensionsForm'#4'Left'#3#200#0#6'Height'#3#0#1
+ +#3'Top'#3#139#0#5'Width'#3#133#1#7'Caption'#6#14'ExtensionsForm'#12'ClientHe'
+ +'ight'#3#0#1#11'ClientWidth'#3#133#1#8'OnCreate'#7#10'FormCreate'#10'LCLVers'
+ +'ion'#6#6'0.9.29'#0#9'TGroupBox'#13'ExtensionsBox'#4'Left'#2#0#6'Height'#3#0
+ +#1#3'Top'#2#0#5'Width'#3#133#1#5'Align'#7#8'alClient'#7'Caption'#6#10'Extens'
+ +'ions'#12'ClientHeight'#3#238#0#11'ClientWidth'#3#129#1#8'TabOrder'#2#0#0#9
+ +'TListView'#14'ExtensionsList'#4'Left'#2#6#6'Height'#3#192#0#3'Top'#2#8#5'Wi'
+ +'dth'#3's'#1#5'Align'#7#8'alCustom'#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRig'
+ +'ht'#8'akBottom'#0#7'Columns'#14#1#7'Caption'#6#10'Extensions'#8'MinWidth'#2
+ +'Z'#5'Width'#2'Z'#0#1#7'Caption'#6#4'Name'#8'MinWidth'#2'K'#5'Width'#3#150#0
+ +#0#1#8'AutoSize'#9#7'Caption'#6#7'Version'#8'MinWidth'#2'<'#5'Width'#2'<'#0#0
+ +#13'HideSelection'#8#9'ItemIndex'#2#255#8'ReadOnly'#9#9'RowSelect'#9#8'TabOr'
+ +'der'#2#0#9'ViewStyle'#7#8'vsReport'#24'OnAdvancedCustomDrawItem'#7'$Extensi'
+ +'onsListAdvancedCustomDrawItem'#12'OnSelectItem'#7#24'ExtensionsListSelectIt'
+ +'em'#0#0#7'TButton'#6'Button'#4'Left'#3'.'#1#6'Height'#2#25#3'Top'#3#208#0#5
+ +'Width'#2'K'#7'Caption'#6#7'Refresh'#7'OnClick'#7#11'ButtonClick'#8'TabOrder'
+ +#2#1#0#0#9'TCheckBox'#10'ExtEnabled'#4'Left'#2#6#6'Height'#2#17#3'Top'#3#208
+ +#0#5'Width'#2'H'#7'Caption'#6#10'ExtEnabled'#8'OnChange'#7#16'ExtEnabledChan'
+ +'ge'#8'TabOrder'#2#2#7'Visible'#8#0#0#0#0
+]);
diff --git a/Projects/SAMufasaGUI/extensionmanagergui.pas b/Projects/SAMufasaGUI/extensionmanagergui.pas
new file mode 100644
index 0000000..d3417ea
--- /dev/null
+++ b/Projects/SAMufasaGUI/extensionmanagergui.pas
@@ -0,0 +1,137 @@
+unit extensionmanagergui;
+
+{$mode objfpc}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, ComCtrls, Grids,extensionmanager;
+
+type
+
+ { TExtensionsForm }
+
+ TExtensionsForm = class(TForm)
+ Button: TButton;
+ ExtEnabled: TCheckBox;
+ ExtensionsBox: TGroupBox;
+ ExtensionsList: TListView;
+ procedure ButtonClick(Sender: TObject);
+ procedure ExtEnabledChange(Sender: TObject);
+ procedure ExtensionsListAdvancedCustomDrawItem(Sender: TCustomListView;
+ Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
+ var DefaultDraw: Boolean);
+ procedure ExtensionsListSelectItem(Sender: TObject; Item: TListItem;
+ Selected: Boolean);
+ procedure FormCreate(Sender: TObject);
+ private
+ { private declarations }
+ procedure Refresh;
+ public
+ procedure OnChangeExtensions(Sender: TObject);
+ end;
+
+var
+ ExtensionsForm: TExtensionsForm;
+
+implementation
+uses
+ virtualextension;
+
+{ TExtensionsForm }
+
+procedure TExtensionsForm.ButtonClick(Sender: TObject);
+begin
+ Refresh;
+end;
+
+procedure TExtensionsForm.ExtEnabledChange(Sender: TObject);
+begin
+ if ExtensionsList.Selected <> nil then
+ with TVirtualSimbaExtension(ExtManager.Extensions[ExtensionsList.Selected.Index]) do
+ begin;
+ Enabled:= ExtEnabled.Checked;
+ ExtEnabled.Checked := Enabled;
+ end;
+end;
+
+procedure TExtensionsForm.ExtensionsListAdvancedCustomDrawItem(
+ Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
+ Stage: TCustomDrawStage; var DefaultDraw: Boolean);
+begin
+ if TVirtualSimbaExtension(ExtManager.Extensions[Item.Index]).Enabled then
+ Sender.Canvas.Brush.Color := $CCFFCC//$7AFF95
+ else
+ sender.canvas.brush.color := $CCCCFF//$FF3D64;
+end;
+
+procedure TExtensionsForm.ExtensionsListSelectItem(Sender: TObject;
+ Item: TListItem; Selected: Boolean);
+var
+ str : string;
+begin
+ if Selected = true then
+ begin
+ extEnabled.Visible := true;
+ with TVirtualSimbaExtension(ExtManager.Extensions[Item.Index]) do
+ begin
+ OnChange:= nil;
+ ExtEnabled.Checked := Enabled;
+ Onchange := @OnChangeExtensions;
+ str := GetName;
+ if str = '' then
+ str := ExtractFileName(Filename);
+ ExtEnabled.Caption:= 'Enable: ' + str;
+ end;
+ end else
+ ExtEnabled.Visible := false;
+end;
+
+procedure TExtensionsForm.FormCreate(Sender: TObject);
+begin
+ ExtManager.OnChange:= @OnChangeExtensions;
+ Refresh;
+end;
+
+procedure TExtensionsForm.Refresh;
+var
+ i , sel: integer;
+ Extensions : TList;
+ str : string;
+begin
+ sel := -1;
+ if ExtensionsList.Selected <> nil then
+ sel := ExtensionsList.Selected.Index;
+ ExtensionsList.Clear;
+ Extensions := ExtManager.Extensions;
+ for i := 0 to Extensions.Count - 1 do
+ begin
+ with TVirtualSimbaExtension(Extensions[i]),ExtensionsList.Items.Add do
+ begin
+ Caption:= ExtractFileName(FileName);
+ str := GetName;
+ if str = '' then
+ str := caption; //Could not retrieve the name
+ SubItems.Add(str);
+ str := GetVersion;
+ if str = '' then
+ str := 'NA'; //Could not retrieve the version
+ SubItems.Add(str);
+ end;
+ end;
+ if sel <> -1 then
+ if sel < extensions.count then
+ ExtensionsList.Selected := ExtensionsList.Items[sel];
+end;
+
+procedure TExtensionsForm.OnChangeExtensions(Sender: TObject);
+begin
+ Refresh;
+end;
+
+initialization
+ {$I extensionmanagergui.lrs}
+
+end.
+
diff --git a/Projects/SAMufasaGUI/project1.lpi b/Projects/SAMufasaGUI/project1.lpi
index 4d2258d..25e7330 100644
--- a/Projects/SAMufasaGUI/project1.lpi
+++ b/Projects/SAMufasaGUI/project1.lpi
@@ -39,7 +39,7 @@
-
+
@@ -164,10 +164,9 @@
-
+
-
-
+
@@ -208,31 +207,22 @@
-
+
-
-
-
-
+
-
+
+
+
+
-
-
-
-
-
-
-
-
-
diff --git a/Projects/SAMufasaGUI/project1.lpr b/Projects/SAMufasaGUI/project1.lpr
index 5ce9fc7..35bface 100644
--- a/Projects/SAMufasaGUI/project1.lpr
+++ b/Projects/SAMufasaGUI/project1.lpr
@@ -33,7 +33,7 @@ uses
{$ENDIF}{$ENDIF}
Interfaces, Forms, testunit, colourhistory, About, internets, debugimage,
framefunctionlist, simpleanalyzer, updater, updateform, simbasettings,
-libloader, mufasabase;
+libloader, mufasabase, extensionmanagergui;
{$R project1.res}
@@ -46,6 +46,7 @@ begin
Application.CreateForm(TAboutForm, AboutForm);
Application.CreateForm(TDebugImgForm, DebugImgForm);
Application.CreateForm(TSimbaUpdateForm, SimbaUpdateForm);
+ Application.CreateForm(TExtensionsForm, ExtensionsForm);
// Application.CreateForm(TSettingsForm, SettingsForm); Done in FormCreate of MainForm
Application.Run;
end.
diff --git a/Projects/SAMufasaGUI/pseventextension.pas b/Projects/SAMufasaGUI/pseventextension.pas
deleted file mode 100644
index 3687bb6..0000000
--- a/Projects/SAMufasaGUI/pseventextension.pas
+++ /dev/null
@@ -1,219 +0,0 @@
-unit pseventextension;
-
-{$mode objfpc}
-
-interface
-
-uses
- Classes, SysUtils, virtualextension,
- uPSComponent,uPSCompiler, uPSRuntime, uPSPreProcessor,forms;
-
-
-
-type
-
- { TSimbaPSEventExtension }
-
- TSimbaPSEventExtension = class(TVirtualSimbaExtension)
- public
- constructor Create(FileName: String);
- destructor Destroy; override;
- private
- PSInstance: TPSScript;
- FEnabled: Boolean;
- Script: TStringList;
-
- private
- function InitScript: Boolean;
- procedure OutputMessages;
-
- public
- function HookExists(HookName: String): Boolean; override;
- function ExecuteHook(HookName: String; fArgs: Array of Variant; out OutVariant): Integer;
- protected
- procedure RegisterPSCComponents(Sender: TObject; x: TPSPascalCompiler);
- procedure RegisterPSRComponents(Sender: TObject; se: TPSExec; x: TPSRuntimeClassImporter);
- procedure RegisterMyMethods(Sender: TPSScript);
- procedure OnPSExecute(Sender: TPSScript);
-
- end;
-
-
-implementation
-uses
- uPSC_std, uPSC_controls,uPSC_classes,uPSC_graphics,uPSC_stdctrls,uPSC_forms,
- uPSC_extctrls,uPSC_menus, //Compile libs
- uPSR_std, uPSR_controls,uPSR_classes,uPSR_graphics,uPSR_stdctrls,uPSR_forms,
- uPSR_extctrls,uPSR_menus, //Runtime-libs
- testunit//Writeln
- ;
-
-procedure createf;
-var
- a: TForm;
-begin
- a:=TForm.Create(nil);
- a.ShowModal;
- a.Free;
-end;
-
-
-function TSimbaPSEventExtension.HookExists(HookName: String): Boolean;
-begin
- { FIXME: Free the .data ? }
- Exit(PSInstance.GetProcMethod('init').Data <> nil);
-end;
-
-function TSimbaPSEventExtension.ExecuteHook(HookName: String; fArgs: Array of Variant; out OutVariant): Integer;
-
-begin
-
- result := 0;
- try
- PSInstance.ExecuteFunction([], HookName);
- except
- result := 1;
- end;
-end;
-
-constructor TSimbaPSEventExtension.Create(FileName: String);
-var
- fStr:TFileStream;
-
-begin
- inherited create;
-
- try
- Script := TStringList.Create;
- fStr := TFileStream.Create(FileName, fmOpenRead);
- Script.LoadFromStream(fStr);
- fStr.Free;
- except
- raise Exception.CreateFmt('File %s could not be read', [FileName]);
- end;
-
- FEnabled := False;
-
- { Create script, and see if the extension is valid. (If it compiles) }
-
- PSInstance := TPSScript.Create(nil);
-
- PSInstance.Script := Self.Script;
- PSInstance.OnCompImport:=@RegisterPSCComponents;
- PSInstance.OnExecImport:=@RegisterPSRComponents;
- PSInstance.OnCompile:=@RegisterMyMethods;
- PSInstance.OnExecute:=@OnPSExecute;
-
- formWritelnEx(Format('%s: Script: %s', [FileName, Self.Script.Text]));
-
- try
- FEnabled := PSInstance.Compile;
- finally
- if FEnabled then
- formWritelnEx('Extension Enabled')
- else
- begin
- formWritelnEx('Extension Disabled - Did not compile');
- OutputMessages;
- end;
- end;
-
- FEnabled := InitScript();
- if FEnabled then
- formWritelnEx('It exists')
- else
- formWritelnEx('It does not exist - or something went wrong while executing it.');
-end;
-
-function TSimbaPSEventExtension.InitScript: Boolean;
-begin
- if not HookExists('init') then
- exit(false);
-
- result := true;
- try
- PSInstance.ExecuteFunction([], 'init');
- except
- result := false;
- end;
-end;
-
-
-procedure TSimbaPSEventExtension.RegisterMyMethods(Sender: TPSScript);
-begin
- Sender.AddFunction(@createf, 'procedure createf;');
- Sender.AddFunction(@formWritelnEx,'procedure Writeln(s : string)');
- Sender.AddRegisteredVariable('Simba','TForm');
- Sender.AddRegisteredVariable('Simba_MainMenu','TMainMenu');
-end;
-
-procedure TSimbaPSEventExtension.OnPSExecute(Sender: TPSScript);
-begin
- Sender.SetVarToInstance('simba',Form1);
- Sender.SetVarToInstance('Simba_MainMenu',Form1.MainMenu);
-end;
-
-procedure TSimbaPSEventExtension.RegisterPSCComponents(Sender: TObject; x: TPSPascalCompiler);
-begin
- SIRegister_Std(x);
- SIRegister_Classes(x, True);
- SIRegister_Controls(x);
- SIRegister_Graphics(x, True);
- SIRegister_stdctrls(x);
- SIRegister_Forms(x);
- SIRegister_ExtCtrls(x);
- SIRegister_Menus(x);
-end;
-
-procedure TSimbaPSEventExtension.RegisterPSRComponents(Sender: TObject; se: TPSExec; x: TPSRuntimeClassImporter);
-begin
- RIRegister_Std(x);
- RIRegister_Classes(x, True);
- RIRegister_Controls(x);
- RIRegister_Graphics(x, True);
- RIRegister_stdctrls(x);
- RIRegister_Forms(x);
- RIRegister_ExtCtrls(x);
- RIRegister_Menus(x);
-end;
-
-destructor TSimbaPSEventExtension.Destroy;
-begin
- if Assigned(PSInstance) then
- FreeAndNil(PSInstance);
-
-
- formWritelnEx('Closing extension');
-
- inherited;
-end;
-
-
-procedure TSimbaPSEventExtension.OutputMessages;
-var
- l: Longint;
- b: Boolean;
-begin
- b := False;
- for l := 0 to PSInstance.CompilerMessageCount - 1 do
- begin
- if (not b) and (PSInstance.CompilerMessages[l] is TIFPSPascalCompilerError) then
- begin
- b := True;
- with PSInstance.CompilerMessages[l] do
- formWritelnEx(MessageToString);
- {if OnError <> nil then
- with PSInstance.CompilerMessages[l] do
- HandleError(Row, Col, Pos, MessageToString,errCompile, ModuleName)
- else }
- formWritelnEx(PSInstance.CompilerErrorToStr(l) + ' at line ' + inttostr(PSInstance.CompilerMessages[l].Row));
- end else
- formWritelnEx(PSInstance.CompilerErrorToStr(l) + ' at line ' + inttostr(PSInstance.CompilerMessages[l].Row));
-
- end;
-end;
-
-
-
-end.
-
diff --git a/Projects/SAMufasaGUI/psextension.pas b/Projects/SAMufasaGUI/psextension.pas
new file mode 100644
index 0000000..0624949
--- /dev/null
+++ b/Projects/SAMufasaGUI/psextension.pas
@@ -0,0 +1,229 @@
+unit psextension;
+
+{$mode objfpc}
+
+interface
+
+uses
+ Classes, SysUtils,mufasabase, virtualextension,
+ uPSComponent,uPSCompiler, uPSRuntime, uPSPreProcessor,forms;
+
+
+
+type
+
+ { TSimbaPSExtension }
+
+ TSimbaPSExtension = class(TVirtualSimbaExtension)
+ public
+ constructor Create(FileStr: String; StartDisabled : boolean = false);
+ destructor Destroy; override;
+ private
+ PSInstance: TPSScript;
+ FWorking: Boolean;
+ Script: TStringList;
+ procedure StartExtension;
+ private
+ function FreeScript: boolean;
+ function InitScript: Boolean;
+ procedure OutputMessages;
+
+ public
+ function HookExists(HookName: String): Boolean;override;
+ function ExecuteHook(HookName: String; fArgs: Array of Variant; out OutVariant : Variant): Integer;override;
+ property Working : boolean read FWorking;
+ protected
+ procedure RegisterPSCComponents(Sender: TObject; x: TPSPascalCompiler);
+ procedure RegisterPSRComponents(Sender: TObject; se: TPSExec; x: TPSRuntimeClassImporter);
+ procedure RegisterMyMethods(Sender: TPSScript);
+ procedure OnPSExecute(Sender: TPSScript);
+ procedure SetEnabled(bool : boolean);override;
+ end;
+
+
+implementation
+uses
+ uPSC_std, uPSC_controls,uPSC_classes,uPSC_graphics,uPSC_stdctrls,uPSC_forms,
+ uPSC_extctrls,uPSC_menus, //Compile libs
+ uPSR_std, uPSR_controls,uPSR_classes,uPSR_graphics,uPSR_stdctrls,uPSR_forms,
+ uPSR_extctrls,uPSR_menus, //Runtime-libs
+ testunit//Writeln
+ ;
+
+function TSimbaPSExtension.HookExists(HookName: String): Boolean;
+begin
+ Result := False;
+ if FWorking then
+ if PSInstance.Exec.GetProc(HookName) <> InvalidVal then
+ result := True;
+end;
+
+function TSimbaPSExtension.ExecuteHook(HookName: String; fArgs: Array of Variant; out OutVariant : Variant): Integer;
+begin
+ result := SExt_error;
+ if not FWorking then
+ exit;
+ try
+ outvariant := PSInstance.ExecuteFunction(fArgs, HookName);
+ result := SExt_ok;
+ except
+ on e : exception do
+ formWritelnEx(format('Error in Simba extension (%s): %s',[Self.GetName,e.message]));
+ end;
+end;
+
+constructor TSimbaPSExtension.Create(FileStr: String; StartDisabled: boolean = false);
+begin
+ inherited create;
+ FWorking := False;
+ FileName := FileStr;
+ try
+ Script := TStringList.Create;
+ Script.LoadFromFile(FileName);
+ except
+ raise Exception.CreateFmt('File %s could not be read', [FileName]);
+ end;
+ FEnabled := false;
+ PSInstance := nil;
+ if not StartDisabled then
+ StartExtension;
+end;
+
+function TSimbaPSExtension.InitScript: Boolean;
+begin
+ if not HookExists('init') then
+ exit(false);
+ result := true;
+ try
+ PSInstance.ExecuteFunction([], 'init');
+ except
+ result := false;
+ end;
+end;
+
+function TSimbaPSExtension.FreeScript: boolean;
+var
+ bla : variant;
+begin
+ if not HookExists('Free') then
+ exit(false);
+ result := ExecuteHook('Free',[],bla) = SExt_ok;
+end;
+
+
+procedure TSimbaPSExtension.RegisterMyMethods(Sender: TPSScript);
+begin
+ Sender.AddFunction(@formWritelnEx,'procedure Writeln(s : string)');
+ Sender.AddRegisteredVariable('Simba','TForm');
+ Sender.AddRegisteredVariable('Simba_MainMenu','TMainMenu');
+end;
+
+procedure TSimbaPSExtension.OnPSExecute(Sender: TPSScript);
+begin
+ Sender.SetVarToInstance('simba',Form1);
+ Sender.SetVarToInstance('Simba_MainMenu',Form1.MainMenu);
+end;
+
+procedure TSimbaPSExtension.SetEnabled(bool: boolean);
+var
+ temp : variant;
+begin
+ if bool <> FEnabled then
+ begin
+ if bool then
+ begin;
+ if not assigned(PSInstance) then //We enable it for the first time, calls SetEnabled.
+ StartExtension
+ else
+ begin
+ if not FWorking then
+ Exit;
+ if hookexists('attach') then
+ ExecuteHook('attach',[],temp);
+ end;
+ end else
+ if HookExists('detach') then
+ ExecuteHook('detach',[],temp);
+ end;
+ inherited SetEnabled(bool);
+end;
+
+procedure TSimbaPSExtension.RegisterPSCComponents(Sender: TObject; x: TPSPascalCompiler);
+begin
+ SIRegister_Std(x);
+ SIRegister_Classes(x, True);
+ SIRegister_Controls(x);
+ SIRegister_Graphics(x, True);
+ SIRegister_stdctrls(x);
+ SIRegister_Forms(x);
+ SIRegister_ExtCtrls(x);
+ SIRegister_Menus(x);
+end;
+
+procedure TSimbaPSExtension.RegisterPSRComponents(Sender: TObject; se: TPSExec; x: TPSRuntimeClassImporter);
+begin
+ RIRegister_Std(x);
+ RIRegister_Classes(x, True);
+ RIRegister_Controls(x);
+ RIRegister_Graphics(x, True);
+ RIRegister_stdctrls(x);
+ RIRegister_Forms(x);
+ RIRegister_ExtCtrls(x);
+ RIRegister_Menus(x);
+end;
+
+destructor TSimbaPSExtension.Destroy;
+begin
+ FreeScript;
+ if Assigned(PSInstance) then
+ FreeAndNil(PSInstance);
+ inherited;
+end;
+
+procedure TSimbaPSExtension.StartExtension;
+begin
+ if assigned(PSInstance) then
+ exit;//Already started..
+ { Create script, and see if the extension is valid. (If it compiles) }
+ PSInstance := TPSScript.Create(nil);
+
+ PSInstance.Script := Self.Script;
+ PSInstance.OnCompImport:=@RegisterPSCComponents;
+ PSInstance.OnExecImport:=@RegisterPSRComponents;
+ PSInstance.OnCompile:=@RegisterMyMethods;
+ PSInstance.OnExecute:=@OnPSExecute;
+
+ formWritelnEx(Format('Loading extension %s', [FileName]));
+ try
+ FWorking := PSInstance.Compile;
+ except
+ on e : exception do
+ FormWritelnEx(format('Error in Simba extension (%s) : %s',[FileName,e.message]));
+ end;
+ if FWorking then
+ formWritelnEx('Extension Enabled')
+ else
+ begin
+ formWritelnEx('Extension Disabled - Did not compile');
+ OutputMessages;
+ end;
+
+ if InitScript then
+ mDebugLn('Init procedure succesfully called')
+ else
+ mDebugLn('Init procedure didn''t execute right, or couldn''t be found');
+ Enabled:= FWorking;
+end;
+
+procedure TSimbaPSExtension.OutputMessages;
+var
+ l: Longint;
+begin
+ for l := 0 to PSInstance.CompilerMessageCount - 1 do
+ formWritelnEx(PSInstance.CompilerErrorToStr(l) + ' at line ' + inttostr(PSInstance.CompilerMessages[l].Row));
+end;
+
+
+
+end.
+
diff --git a/Projects/SAMufasaGUI/testunit.lfm b/Projects/SAMufasaGUI/testunit.lfm
index 23d7da5..69af4a6 100644
--- a/Projects/SAMufasaGUI/testunit.lfm
+++ b/Projects/SAMufasaGUI/testunit.lfm
@@ -1239,17 +1239,21 @@ object Form1: TForm1
object MenuView: TMenuItem
Caption = '&View'
object MenuItemColourHistory: TMenuItem
- Caption = 'View &Colour History'
+ Caption = '&Colour History'
OnClick = MenuItemColourHistoryClick
end
object MenuItemDebugImage: TMenuItem
- Caption = 'View &Debug Image'
+ Caption = '&Debug Image'
OnClick = MenuItemDebugImageClick
end
object MenuItemFunctionList: TMenuItem
- Caption = 'View &Function List'
+ Caption = '&Function List'
OnClick = MenuItemFunctionListClick
end
+ object MenuItemExtensions: TMenuItem
+ Caption = '&Extensions'
+ OnClick = MenuItemExtensionsClick
+ end
end
object MenuTools: TMenuItem
Caption = '&Tools'
diff --git a/Projects/SAMufasaGUI/testunit.lrs b/Projects/SAMufasaGUI/testunit.lrs
index d57c778..39c8eb8 100644
--- a/Projects/SAMufasaGUI/testunit.lrs
+++ b/Projects/SAMufasaGUI/testunit.lrs
@@ -1059,346 +1059,347 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#10'ImageIndex'#2#7#7'OnClick'#7#17'Ac'
+'tionStopExecute'#0#0#0#9'TMenuItem'#8'MenuView'#7'Caption'#6#5'&View'#0#9'T'
- +'MenuItem'#21'MenuItemColourHistory'#7'Caption'#6#20'View &Colour History'#7
- +'OnClick'#7#26'MenuItemColourHistoryClick'#0#0#9'TMenuItem'#18'MenuItemDebug'
- +'Image'#7'Caption'#6#17'View &Debug Image'#7'OnClick'#7#23'MenuItemDebugImag'
- +'eClick'#0#0#9'TMenuItem'#20'MenuItemFunctionList'#7'Caption'#6#19'View &Fun'
- +'ction List'#7'OnClick'#7#25'MenuItemFunctionListClick'#0#0#0#9'TMenuItem'#9
- +'MenuTools'#7'Caption'#6#6'&Tools'#0#9'TMenuItem'#24'MenuitemFillFunctionLis'
- +'t'#7'Caption'#6#19'&Fill Function List'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0
- +'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4
- +#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0'9'#134'@'#3'4~:x'#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0'A'#145'I'#156';'#136'B'#210#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0'N'#163'W'#144'f'#176'n'#255'a'#170'h'#255'='#139'D'#255'7'#131'>'
- +#255'2{7'#255',t2'#234'''m,'#183'#f''p'#31'a#'#29#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0'['#180'e'#132's'#189'|'#255#150
- +#209#159#255#148#207#156#255#143#205#150#255#138#202#145#255#133#199#139#255
- +'z'#190#129#255'e'#173'l'#255'K'#146'Q'#255'$h)'#176' c$9'#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0'`'#188'l'#138'y'#196#131#255#158#215
- +#167#255#155#212#164#255#151#210#159#255#146#207#154#255#141#204#149#255#136
- +#202#144#255'z'#194#130#255'~'#196#133#255']'#164'c'#255'&k*'#176'"e%'#29#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'b'#190'm'#147'{'#199#133
- +#255'w'#194#129#255'T'#171'^'#255'N'#163'W'#255'I'#155'Q'#255'c'#172'k'#255
- +#131#195#139#255#135#201#143#255#130#198#137#255'P'#151'V'#255'''m,p'#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'c'#192'n'#159
- +'_'#187'j'#210#255#255#255#0#255#255#255#0#255#255#255#0'K'#158'S'#141'E'#150
- +'M'#225#134#198#142#255#136#201#143#255'o'#179'v'#255'.v3'#183'E'#150'Ma?'
- +#142'Fa9'#134'@a4~:a.v3ag'#198's'#3'd'#194'p{'#255#255#255#0#255#255#255#0
- ,#255#255#255#0#255#255#255#0'M'#161'U'#131'G'#153'O'#237'A'#145'I'#246';'#136
- +'B'#248'5'#128'<'#232'M'#161'U'#232'G'#153'O'#248'A'#145'I'#246';'#136'B'#237
- +'5'#128'<'#131#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#30'_!'
- +'{'#27'['#30#3'T'#171'^aN'#163'WaI'#155'QaC'#147'Ka='#139'DaT'#171'^'#183#128
- +#195#137#255#141#204#149#255#131#196#138#255'='#139'D'#225'7'#131'>'#141#255
- +#255#255#0#255#255#255#0#255#255#255#0'#f'''#210#31'a#'#159#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'['#180'epu'#191'~'#255
- +#152#210#161#255#148#207#156#255#134#199#141#255'^'#167'e'#255'9'#134'@'#255
- +'4~:'#255'.v3'#255'I'#144'O'#255'E'#139'J'#255' c$'#147#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0'`'#188'l'#29'\'#182'g'#176#133#201#142#255
- +#155#212#164#255#143#206#152#255#146#207#154#255#141#204#149#255#136#202#144
- +#255#131#198#139#255'~'#196#133#255'y'#193#127#255'G'#141'L'#255'"e%'#138#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'b'#190'm9^'#185'h'#176
- +'y'#195#131#255#137#202#146#255#148#208#156#255#149#209#158#255#144#207#153
- +#255#140#203#148#255#135#201#143#255#128#196#135#255'N'#149'T'#255'''m,'#132
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'c'#192
- +'n'#29'_'#187'jp['#180'e'#183'V'#173'_'#234'P'#166'Z'#255'K'#158'S'#255'E'
- +#150'M'#255'`'#168'h'#255'['#162'b'#255'4~:'#144#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- +#255#0'G'#153'O'#210'A'#145'I'#156#255#255#255#0#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- +#255#0'N'#163'WxI'#155'Q'#3#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#8'ShortCut'#3'Q@'#7'OnClick'#7#29'MenuitemFillFunctionL'
- +'istClick'#0#0#9'TMenuItem'#16'UpdateMenuButton'#7'Caption'#6#7'&Update'#11
- +'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0
- +#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255
+ +'MenuItem'#21'MenuItemColourHistory'#7'Caption'#6#15'&Colour History'#7'OnCl'
+ +'ick'#7#26'MenuItemColourHistoryClick'#0#0#9'TMenuItem'#18'MenuItemDebugImag'
+ +'e'#7'Caption'#6#12'&Debug Image'#7'OnClick'#7#23'MenuItemDebugImageClick'#0
+ +#0#9'TMenuItem'#20'MenuItemFunctionList'#7'Caption'#6#14'&Function List'#7'O'
+ +'nClick'#7#25'MenuItemFunctionListClick'#0#0#9'TMenuItem'#18'MenuItemExtensi'
+ +'ons'#7'Caption'#6#11'&Extensions'#7'OnClick'#7#23'MenuItemExtensionsClick'#0
+ +#0#0#9'TMenuItem'#9'MenuTools'#7'Caption'#6#6'&Tools'#0#9'TMenuItem'#24'Menu'
+ +'itemFillFunctionList'#7'Caption'#6#19'&Fill Function List'#11'Bitmap.Data'
+ +#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0
+ +#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'9'#134'@'#3'4~:x'#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#156';'#136'B'#210#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#138
- +#255#139#0#138#255#244#0#138#255#139#0#138#255#150#0#138#255#255#0#138#255
- +#150#0#138#255#249#0#138#255#218#0#138#255#199#0#138#255#141#0#138#255#246#0
- +#138#255#152#0#138#255#150#0#138#255#255#0#138#255#150#255#255#255#0#0#138
- +#255#244#244#250#255#255#0#138#255#244'w'#193#255#255#255#255#255#255'w'#193
- +#255#255#249#252#255#255#218#238#255#255#199#229#255#255#0#138#255#246#246
- +#251#255#255#152#208#255#255'o'#189#255#255#255#255#255#255#0#138#255#255#255
- +#255#255#0#0#138#255#244#244#250#255#255#0#138#255#244#238#247#255#255#244
- +#250#255#255'w'#193#255#255#232#244#255#255#0#138#255#232#0#138#255#199#3#139
- +#255#255#249#252#255#255#183#222#255#255#170#216#255#255#251#253#255#255''''
- +#156#255#255#0#138#255'Q'#0#138#255#244#244#250#255#255#153#208#255#255'w'
- +#193#255#255#244#250#255#255'w'#193#255#255#249#252#255#255#218#238#255#255
- +#199#229#255#255#159#211#255#255#228#243#255#255#220#239#255#255#227#242#255
- +#255#205#232#255#255#186#223#255#255#0#138#255#186#0#138#255#246#246#251#255
- +#255#238#247#255#255#0#138#255#244#244#250#255#255'w'#193#255#255#232#244#255
- +#255#0#138#255#232#12#144#255#255#237#247#255#255'x'#193#255#255#187#224#255
- +#255#187#224#255#255'V'#177#255#255#227#242#255#255#0#138#255#227#0#138#255
- +#238#238#247#255#255'D'#169#255#255#0#138#255#232#232#244#255#255'D'#169#255
- +#255#244#250#255#255#218#238#255#255#203#231#255#255#171#216#255#255#12#144
- +#255#255'f'#185#255#255'f'#185#255#255#0#138#255#215#215#237#255#255#24#149
- +#255#255#0#138#255#133#0#138#255#238#0#138#255#133#0#138#255#127#0#138#255
- +#232#0#138#255#139#0#138#255#244#0#138#255#218#0#138#255#203#0#138#255#171#0
- ,#138#255'B'#0#138#255'f'#0#138#255'f'#0#138#255'n'#0#138#255#215#0#138#255'n'
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#7'OnClick'#7#21'UpdateMenuButtonClick'#0#0#9'TMenuItem'#16'MenuItemDivider9'
- +#7'Caption'#6#1'-'#0#0#9'TMenuItem'#22'MenuItemSettingsButton'#7'Caption'#6#8
- +'Settings'#7'OnClick'#7#27'MenuItemSettingsButtonClick'#0#0#9'TMenuItem'#17
- +'MenuItemDivider10'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#18'MenuItemExportHTML'
- +#7'Caption'#6#22'&Export script as HTML'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0
- +'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4
- +#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#205'n#'#255#201'e'#27#255#200'`'#26
- +#255#198'Y'#24#255#194'S'#23#255#192'N'#22#255#189'G'#21#255#187'A'#21#255
- +#185'>'#20#255#183'9'#19#255#182'5'#18#255#180'3'#18#255#180'3'#18#255#180'3'
- +#18#255#180'3'#18#255#180'3'#18#255#210'w5'#255#228#175#135#255#227#171#129
- +#255#225#168'{'#255#223#163'v'#255#222#161'q'#255#220#157'm'#255#219#153'h'
- +#255#218#151'c'#255#217#148'^'#255#215#145'['#255#215#143'W'#255#213#141'T'
- +#255#213#140'S'#255#213#140'S'#255#180'3'#18#255#214#132'C'#255#231#181#144
- +#255#224#163't'#255#222#158'n'#255#220#154'g'#255#219#149'`'#255#217#145'Z'
- +#255#215#141'S'#255#213#137'M'#255#211#133'H'#255#210#129'C'#255#208'~>'#255
- +#207'{9'#255#206'y5'#255#213#141'T'#255#180'3'#18#255#219#142'S'#255#234#187
- +#153#255#252#246#242#255#225#166'y'#255#252#245#241#255#221#157'k'#255#252
- +#246#242#255#218#148'^'#255#247#233#222#255#214#140'Q'#255#239#209#186#255
- +#222#164'w'#255#253#250#247#255#247#232#221#255#215#143'Y'#255#182'5'#18#255
- +#225#151'b'#255#236#193#161#255#252#247#243#255#229#173#132#255#252#246#242
- +#255#225#164'w'#255#252#247#243#255#221#155'i'#255#248#235#224#255#240#211
- +#190#255#243#222#206#255#224#169#127#255#250#240#233#255#210#131'D'#255#217
- +#148'^'#255#183'<'#19#255#226#160'n'#255#238#199#168#255#254#253#252#255#253
- +#247#243#255#254#250#248#255#227#172#129#255#252#247#244#255#224#163't'#255
- +#249#236#227#255#250#242#235#255#253#248#244#255#227#174#134#255#250#241#234
- +#255#213#137'M'#255#218#153'f'#255#189'C'#21#255#230#167'y'#255#240#203#176
- +#255#253#248#245#255#234#186#152#255#253#248#244#255#231#179#140#255#253#248
- +#245#255#227#170#128#255#249#238#229#255#238#205#180#255#253#248#245#255#229
- +#179#142#255#253#249#246#255#216#143'W'#255#221#158'm'#255#192'N'#22#255#234
- +#171#128#255#242#207#181#255#252#244#238#255#236#191#159#255#251#243#237#255
- +#253#248#244#255#253#247#244#255#252#247#243#255#244#219#201#255#231#180#142
- +#255#247#230#218#255#227#173#131#255#246#228#214#255#219#151'b'#255#223#163
- +'v'#255#196'Y'#24#255#234#171#128#255#243#208#183#255#239#198#169#255#239#196
- +#166#255#238#194#162#255#236#191#158#255#235#188#152#255#233#184#147#255#232
- +#180#142#255#230#176#136#255#227#172#129#255#226#167'{'#255#224#163't'#255
- +#222#158'n'#255#226#170#128#255#201'b'#26#255#234#171#128#255#243#208#183#255
- +#243#208#183#255#243#208#183#255#242#208#183#255#241#206#179#255#240#203#176
- +#255#239#201#172#255#238#198#168#255#237#194#163#255#235#192#158#255#234#187
- +#153#255#232#183#148#255#230#180#143#255#228#176#137#255#205'n#'#255#234#171
- +#128#255#234#171#128#255#234#171#128#255#234#171#128#255#234#171#128#255#234
- +#171#128#255#232#169'|'#255#230#164'w'#255#226#160'p'#255#226#155'k'#255#225
- +#151'b'#255#221#144'Y'#255#217#139'R'#255#216#133'I'#255#214#128'>'#255#210
- +'w5'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#255#255#255#0#255#255#255#0'N'#163'W'#144'f'#176'n'#255'a'#170'h'#255'='#139
+ +'D'#255'7'#131'>'#255'2{7'#255',t2'#234'''m,'#183'#f''p'#31'a#'#29#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'['#180'e'#132
+ +'s'#189'|'#255#150#209#159#255#148#207#156#255#143#205#150#255#138#202#145
+ +#255#133#199#139#255'z'#190#129#255'e'#173'l'#255'K'#146'Q'#255'$h)'#176' c$'
+ +'9'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'`'#188'l'#138'y'
+ +#196#131#255#158#215#167#255#155#212#164#255#151#210#159#255#146#207#154#255
+ +#141#204#149#255#136#202#144#255'z'#194#130#255'~'#196#133#255']'#164'c'#255
+ +'&k*'#176'"e%'#29#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'b'
+ +#190'm'#147'{'#199#133#255'w'#194#129#255'T'#171'^'#255'N'#163'W'#255'I'#155
+ +'Q'#255'c'#172'k'#255#131#195#139#255#135#201#143#255#130#198#137#255'P'#151
+ +'V'#255'''m,p'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'c'#192'n'#159'_'#187'j'#210#255#255#255#0#255#255#255#0#255#255
+ +#255#0'K'#158'S'#141'E'#150'M'#225#134#198#142#255#136#201#143#255'o'#179'v'
+ ,#255'.v3'#183'E'#150'Ma?'#142'Fa9'#134'@a4~:a.v3ag'#198's'#3'd'#194'p{'#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'U'#131'G'#153'O'
+ +#237'A'#145'I'#246';'#136'B'#248'5'#128'<'#232'M'#161'U'#232'G'#153'O'#248'A'
+ +#145'I'#246';'#136'B'#237'5'#128'<'#131#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#30'_!{'#27'['#30#3'T'#171'^aN'#163'WaI'#155'QaC'#147'Ka'
+ +'='#139'DaT'#171'^'#183#128#195#137#255#141#204#149#255#131#196#138#255'='
+ +#139'D'#225'7'#131'>'#141#255#255#255#0#255#255#255#0#255#255#255#0'#f'''#210
+ +#31'a#'#159#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'['#180'epu'#191'~'#255#152#210#161#255#148#207#156#255#134#199#141#255
+ +'^'#167'e'#255'9'#134'@'#255'4~:'#255'.v3'#255'I'#144'O'#255'E'#139'J'#255' '
+ +'c$'#147#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'`'#188'l'#29
+ +'\'#182'g'#176#133#201#142#255#155#212#164#255#143#206#152#255#146#207#154
+ +#255#141#204#149#255#136#202#144#255#131#198#139#255'~'#196#133#255'y'#193
+ +#127#255'G'#141'L'#255'"e%'#138#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'b'#190'm9^'#185'h'#176'y'#195#131#255#137#202#146#255#148#208#156
+ +#255#149#209#158#255#144#207#153#255#140#203#148#255#135#201#143#255#128#196
+ +#135#255'N'#149'T'#255'''m,'#132#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0'c'#192'n'#29'_'#187'jp['#180'e'#183'V'#173'_'
+ +#234'P'#166'Z'#255'K'#158'S'#255'E'#150'M'#255'`'#168'h'#255'['#162'b'#255'4'
+ +'~:'#144#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#210'A'#145'I'#156#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0'N'#163'WxI'#155'Q'#3#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#8'ShortCut'#3'Q@'#7'OnC'
+ +'lick'#7#29'MenuitemFillFunctionListClick'#0#0#9'TMenuItem'#16'UpdateMenuBut'
+ +'ton'#7'Caption'#6#7'&Update'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0
+ +#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0
+ +#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#7'OnClick'#7#23'MenuItemExportHTMLClick'#0#0#0#9'TMenuItem'#8'MenuHel'
- +'p'#7'Caption'#6#5'&Help'#0#9'TMenuItem'#13'MenuItemAbout'#7'Caption'#6#6'&A'
- +'bout'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0
- +#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0
- +#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#173'tD#'#172
- +'rA}'#170'p?'#219#168'm<'#243#167'k:'#243#165'i7'#219#164'h5}'#163'f3#'#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#181'~QS'#179'|N'#230#215#187#163#255#233#218#202#255#236
- +#224#209#255#236#224#209#255#232#216#200#255#211#181#156#255#167'l:'#230#166
- +'j8S'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#189#137'_S'#187#135'['#244#231#213#196#255#229#210#191#255#201#166#133#255
- +#184#142'g'#255#182#138'e'#255#197#161#128#255#224#204#186#255#227#208#190
- +#255#171'p@'#244#169'n=S'#255#255#255#0#255#255#255#0#255#255#255#0#198#149
- +'m"'#195#146'j'#229#234#216#201#255#227#205#186#255#192#148'k'#255#186#140'b'
- +#255#207#176#148#255#207#176#148#255#183#137'_'#255#178#135'a'#255#218#192
- +#170#255#228#209#192#255#174'uF'#229#173'sC"'#255#255#255#0#255#255#255#0#204
- +#158'x~'#228#204#185#255#234#214#197#255#199#153'q'#255#191#144'f'#255#191
- +#144'f'#255#247#241#236#255#246#240#234#255#183#137'_'#255#183#137'_'#255#181
- +#137'c'#255#226#206#187#255#217#189#166#255#178'{M~'#255#255#255#0#255#255
- +#255#0#211#167#132#219#239#225#211#255#217#181#149#255#199#152'l'#255#195#149
- +'i'#255#193#147'g'#255#191#144'f'#255#191#144'f'#255#187#139'c'#255#185#138
- +'c'#255#184#138'b'#255#203#167#134#255#234#220#204#255#184#131'W'#219#255#255
- +#255#0#255#255#255#0#217#176#143#246#242#228#217#255#209#165'z'#255#197#153
- +'k'#255#196#151'j'#255#196#150'i'#255#250#246#242#255#243#234#225#255#194#149
- +'m'#255#190#143'e'#255#190#143'd'#255#192#149'm'#255#239#227#213#255#191#140
- +'a'#246#255#255#255#0#255#255#255#0#224#185#153#246#242#229#218#255#209#166
- +'~'#255#204#157'q'#255#199#154'l'#255#197#152'k'#255#226#204#182#255#248#243
- +#238#255#246#238#232#255#217#189#161#255#194#148'h'#255#197#155'q'#255#240
- +#226#214#255#197#149'l'#246#255#255#255#0#255#255#255#0#230#193#163#219#243
- +#229#217#255#223#187#158#255#207#160'u'#255#205#158'r'#255#245#235#227#255
- +#228#203#180#255#231#211#191#255#251#248#246#255#229#211#191#255#196#152'k'
- +#255#214#180#145#255#238#224#210#255#204#158'x'#219#255#255#255#0#255#255#255
- +#0#235#201#173'~'#244#227#212#255#239#220#205#255#213#168'~'#255#208#160'w'
- +#255#251#248#245#255#252#248#245#255#252#248#245#255#251#248#245#255#209#168
- +#129#255#207#164'{'#255#234#213#195#255#234#212#194#255#210#167#131'~'#255
- +#255#255#0#255#255#255#0#241#208#181'"'#239#206#179#229#246#233#221#255#236
- +#216#198#255#215#172#129#255#220#187#154#255#246#236#227#255#245#236#226#255
- +#228#200#174#255#210#167'{'#255#230#206#186#255#241#226#213#255#219#179#145
- +#229#217#176#142'"'#255#255#255#0#255#255#255#0#255#255#255#0#244#212#187'S'
- +#242#210#184#244#247#234#223#255#238#222#208#255#227#193#167#255#216#174#137
- +#255#215#172#134#255#221#187#156#255#235#214#199#255#243#230#217#255#227#190
- +#159#244#225#187#156'S'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
- +#0#255#255#255#0#246#216#191'S'#245#214#189#230#249#233#220#255#246#232#221
- +#255#243#229#218#255#243#229#218#255#245#231#220#255#245#228#214#255#235#200
- +#172#230#233#198#169'S'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
- +#0#255#255#255#0#255#255#255#0#255#255#255#0#249#219#196'#'#248#218#194'}'
- +#247#216#192#219#246#215#190#243#244#213#188#243#243#211#185#219#241#209#183
- +'}'#240#207#180'#'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
- +#7'OnClick'#7#18'MenuItemAboutClick'#0#0#9'TMenuItem'#16'MenuItemHandbook'#7
- +'Caption'#6#9'&Handbook'#7'OnClick'#7#21'MenuItemHandbookClick'#0#0#9'TMenuI'
- +'tem'#17'MenuItemReportBug'#7'Caption'#6#13'&Report a Bug'#11'Bitmap.Data'#10
- +':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0
- ,' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'2'#138#197#236'0'#135#196
- +#246'/'#133#195#246'-'#131#194#246'*'#128#187#255')~'#186#255'(}'#191#246'&{'
- +#190#246'%y'#189#246'#w'#189#246'"v'#188#195#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0'8'#145#201#228#221#236#246#255#189#238
- +#249#255#172#234#248#255#171#234#248#255#171#234#248#255#171#234#248#255#173
- +#234#248#255#212#243#251#255#164#200#228#255'&{'#190#171#255#255#255#0#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'3'#135#129#200#142#194
- +#225#255#151#232#249#255'a'#220#246#255'['#219#245#255'2'#136#194#255'['#219
- +#245#255'j'#222#246#255#177#231#246#255'-'#131#194#233'+'#129#193'*'#255#255
- +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*{.'#193'+z2'#255'J'#159#188
- +#255#171#219#239#255't'#224#247#255'X'#218#245#255'X'#218#245#255']'#219#245
- +#255#144#230#248#255#146#193#225#255'/'#132#176#144#255#255#255#0#255#255#255
- +#0#255#255#255#0#255#255#255#0'/'#135'3'#193' t#'#255#148#192#157#255'b'#172
- +#153#255'{'#189#223#255#162#234#249#255'a'#220#246#255'1'#135#194#255'w'#225
- +#247#255#182#222#240#255'8'#144#188#233'8'#145#201#13#255#255#255#0#255#255
- +#255#0#255#255#255#0'5'#146':'#135'-'#140'2'#255'w'#181#130#255'M'#158'T'#255
- +'y'#179#141#255'M'#167#174#255#172#217#236#255#130#227#248#255'3'#136#194#255
- +#172#237#250#255'C'#158#207#254'A'#155#206'S'#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0'2'#149'7'#245'b'#173'h'#255'w'#190#145#255'D'#160']'
- +#255'K'#159'S'#255'r'#180#153#255'Q'#174#207#255#180#235#248#255#142#230#248
- +#255#181#221#238#255'>'#150#159#255'+xM'#23#255#255#255#0' f#|'#255#255#255#0
- +#255#255#255#0'3'#156'8'#248'R'#169'Y'#255'm'#188#140#255'M'#170'p'#255'B'
- +#159'\'#255'L'#162'T'#255'm'#187#184#255#164#215#235#255#220#244#251#255'U'
- +#176#211#255'/'#130'N'#255'$s('#254'#p'''#255'"l&'#255#255#255#255#0'4'#164
- +'9'#199'3'#161'8'#255'3'#158'8'#255#148#207#172#255'\'#180'~'#255'N'#172'r'
- +#255'A'#161']'#255'O'#167'^'#255'`'#187#210#255#171#219#237#255'l'#186#189
- +#255'*~-'#255'&y*'#244'%v)m'#255#255#255#0'7'#173'<'#250'6'#170';'#255'5'#167
- +':'#162'8'#165'>'#234'P'#173'V'#255#141#204#165#255'^'#181#128#255'O'#173's'
- +#255'B'#163']'#255'U'#177#134#255'i'#192#211#255#138#191#155#255')'#131'.'
- +#255'%Y;'#175#255#255#255#0#255#255#255#0'8'#177'>'#241'7'#175'=#'#255#255
- +#255#0#255#255#255#0'4'#166':'#254'9'#165'?'#255#144#206#168#255'b'#185#132
- +#255'X'#178'{'#255'`'#178'v'#255'8'#151'>'#255')'#137'-'#255'W'#164'b'#255'&'
- +'PD'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
- +#0'7'#174'=A6'#171'<'#255'8'#169'>'#240'E'#172'K'#255#158#212#173#255#164#215
- +#184#255#133#195#142#255'('#143'-'#255'O'#183'_'#255#151#200#170#255','#141
- +'1'#255'+'#137'0'#255'*'#133'.'#255#255#255#255#0#255#255#255#0#255#255#255#0
- +'8'#179'>'#240'8'#177'='#248#255#255#255#0'8'#172'='#241'5'#168':'#255'4'#165
- +'9'#255'4'#161'9'#255'r'#194'~'#255#175#227#194#255'_'#140'x'#255'2eMu'#255
- +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0':'#183'@'
- +#255'9'#181'?t'#255#255#255#0#255#255#255#0'7'#173'<'#248'6'#170';'#237'F'
- +#127'f'#165':'#134'P'#247'3'#157':'#254';qX'#137#255#255#255#0#255#255#255#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0';'#187'A#'#255#255
- +#255#0#255#255#255#0#255#255#255#0'8'#178'>'#255'7'#175'='#178'N'#142'j"5'
- +#169';e4'#166':'#242#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
- +#255#255#0#255#255#255#0':'#183'?'#255'9'#180'?A'#255#255#255#0'7'#174'=R6'
- +#172'<'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#7'OnClic'
- +'k'#7#22'MenuItemReportBugClick'#0#0#0#0#10'TImageList'#17'Mufasa_Image_List'
- +#4'left'#3#192#1#3'top'#3#144#0#6'Bitmap'#10#14'p'#0#0'Li'#28#0#0#0#16#0#0#0
- +#16#0#0#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'
- +#0'BBB'#0'BBB'#0#161'UB'#255#161'UB'#255#161'UB'#255'BBB'#14'BBB'#0'BBB'#0'B'
- +'BB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255
- +#255#218#208#255#208'^B'#255#161'UB'#255#161'UB'#255'BBB'#0'BBB'#0'BBB'#0'BB'
- +'B'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255#255#218#208#255
- +#208'^B'#255#208'^B'#255#161'UB'#255#161'UB'#255'BBB'#0'BBB'#0'BBB'#0'BBB'#0
- +'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255#161'UB'#255#255#218#208#255#208'^B'
- +#255#208'^B'#255#161'UB'#255#161'UB'#255#161'UB'#255'BBB'#0'BBB'#0'BBB'#0'BB'
- +'B'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255#255#218#208#255#161'UB'#255#208'^B'
- +#255#208'^B'#255#161'UB'#255#161'UB'#255#161'UB'#255'BBBcBBB'#0'BBB'#0'BBB'#0
- +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'BBB'#11#161'UB'#255
- +#255#218#208#255#161'UB'#255#208'^B'#255#161'UB'#255#161'UB'#255'BBBcBBBLBBB'
- +#0'BBB'#0'BBB'#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#131
- +#131#131#255#255#255#255#255#161'UB'#255#255#218#208#255#161'UB'#255#161'UB'
- ,#255'BBBcBBBLBBB'#25'BBB'#0'BBB'#0'BBB'#0#255#255#255#0#255#255#255#0#255#255
- +#255#0#131#131#131#255#255#255#255#255#229#229#229#255#161#161#161#255#161'U'
- +'B'#255#255#218#208#255#161'UB'#255'BBBXBBB'#28'BBB'#3'BBB'#0'BBB'#0'BBB'#0
- +#255#255#255#0#255#255#255#0#131#131#131#255#255#255#255#255#229#229#229#255
- +#161#161#161#255#131#131#131#255'BBBc'#161'UB'#255'BBB`BBBJBBB'#14'BBB'#0'BB'
- +'B'#0'BBB'#0'BBB'#0#255#255#255#0#131#131#131#255#255#255#255#255#229#229#229
- +#255#161#161#161#255#131#131#131#255'BBBcBBBLBBB''BBB>BBB'#25'BBB'#3'BBB'#0
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#0#138#255#139#0#138#255#244#0#138#255#139#0#138#255
+ +#150#0#138#255#255#0#138#255#150#0#138#255#249#0#138#255#218#0#138#255#199#0
+ +#138#255#141#0#138#255#246#0#138#255#152#0#138#255#150#0#138#255#255#0#138
+ +#255#150#255#255#255#0#0#138#255#244#244#250#255#255#0#138#255#244'w'#193#255
+ +#255#255#255#255#255'w'#193#255#255#249#252#255#255#218#238#255#255#199#229
+ +#255#255#0#138#255#246#246#251#255#255#152#208#255#255'o'#189#255#255#255#255
+ +#255#255#0#138#255#255#255#255#255#0#0#138#255#244#244#250#255#255#0#138#255
+ +#244#238#247#255#255#244#250#255#255'w'#193#255#255#232#244#255#255#0#138#255
+ +#232#0#138#255#199#3#139#255#255#249#252#255#255#183#222#255#255#170#216#255
+ +#255#251#253#255#255''''#156#255#255#0#138#255'Q'#0#138#255#244#244#250#255
+ +#255#153#208#255#255'w'#193#255#255#244#250#255#255'w'#193#255#255#249#252
+ +#255#255#218#238#255#255#199#229#255#255#159#211#255#255#228#243#255#255#220
+ +#239#255#255#227#242#255#255#205#232#255#255#186#223#255#255#0#138#255#186#0
+ +#138#255#246#246#251#255#255#238#247#255#255#0#138#255#244#244#250#255#255'w'
+ +#193#255#255#232#244#255#255#0#138#255#232#12#144#255#255#237#247#255#255'x'
+ +#193#255#255#187#224#255#255#187#224#255#255'V'#177#255#255#227#242#255#255#0
+ +#138#255#227#0#138#255#238#238#247#255#255'D'#169#255#255#0#138#255#232#232
+ +#244#255#255'D'#169#255#255#244#250#255#255#218#238#255#255#203#231#255#255
+ +#171#216#255#255#12#144#255#255'f'#185#255#255'f'#185#255#255#0#138#255#215
+ +#215#237#255#255#24#149#255#255#0#138#255#133#0#138#255#238#0#138#255#133#0
+ ,#138#255#127#0#138#255#232#0#138#255#139#0#138#255#244#0#138#255#218#0#138
+ +#255#203#0#138#255#171#0#138#255'B'#0#138#255'f'#0#138#255'f'#0#138#255'n'#0
+ +#138#255#215#0#138#255'n'#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#7'OnClick'#7#21'UpdateMenuButtonClick'#0#0#9'TMenuI'
+ +'tem'#16'MenuItemDivider9'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#22'MenuItemSet'
+ +'tingsButton'#7'Caption'#6#8'Settings'#7'OnClick'#7#27'MenuItemSettingsButto'
+ +'nClick'#0#0#9'TMenuItem'#17'MenuItemDivider10'#7'Caption'#6#1'-'#0#0#9'TMen'
+ +'uItem'#18'MenuItemExportHTML'#7'Caption'#6#22'&Export script as HTML'#11'Bi'
+ +'tmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0
+ +#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#205'n'
+ +'#'#255#201'e'#27#255#200'`'#26#255#198'Y'#24#255#194'S'#23#255#192'N'#22#255
+ +#189'G'#21#255#187'A'#21#255#185'>'#20#255#183'9'#19#255#182'5'#18#255#180'3'
+ +#18#255#180'3'#18#255#180'3'#18#255#180'3'#18#255#180'3'#18#255#210'w5'#255
+ +#228#175#135#255#227#171#129#255#225#168'{'#255#223#163'v'#255#222#161'q'#255
+ +#220#157'm'#255#219#153'h'#255#218#151'c'#255#217#148'^'#255#215#145'['#255
+ +#215#143'W'#255#213#141'T'#255#213#140'S'#255#213#140'S'#255#180'3'#18#255
+ +#214#132'C'#255#231#181#144#255#224#163't'#255#222#158'n'#255#220#154'g'#255
+ +#219#149'`'#255#217#145'Z'#255#215#141'S'#255#213#137'M'#255#211#133'H'#255
+ +#210#129'C'#255#208'~>'#255#207'{9'#255#206'y5'#255#213#141'T'#255#180'3'#18
+ +#255#219#142'S'#255#234#187#153#255#252#246#242#255#225#166'y'#255#252#245
+ +#241#255#221#157'k'#255#252#246#242#255#218#148'^'#255#247#233#222#255#214
+ +#140'Q'#255#239#209#186#255#222#164'w'#255#253#250#247#255#247#232#221#255
+ +#215#143'Y'#255#182'5'#18#255#225#151'b'#255#236#193#161#255#252#247#243#255
+ +#229#173#132#255#252#246#242#255#225#164'w'#255#252#247#243#255#221#155'i'
+ +#255#248#235#224#255#240#211#190#255#243#222#206#255#224#169#127#255#250#240
+ +#233#255#210#131'D'#255#217#148'^'#255#183'<'#19#255#226#160'n'#255#238#199
+ +#168#255#254#253#252#255#253#247#243#255#254#250#248#255#227#172#129#255#252
+ +#247#244#255#224#163't'#255#249#236#227#255#250#242#235#255#253#248#244#255
+ +#227#174#134#255#250#241#234#255#213#137'M'#255#218#153'f'#255#189'C'#21#255
+ +#230#167'y'#255#240#203#176#255#253#248#245#255#234#186#152#255#253#248#244
+ +#255#231#179#140#255#253#248#245#255#227#170#128#255#249#238#229#255#238#205
+ +#180#255#253#248#245#255#229#179#142#255#253#249#246#255#216#143'W'#255#221
+ +#158'm'#255#192'N'#22#255#234#171#128#255#242#207#181#255#252#244#238#255#236
+ +#191#159#255#251#243#237#255#253#248#244#255#253#247#244#255#252#247#243#255
+ +#244#219#201#255#231#180#142#255#247#230#218#255#227#173#131#255#246#228#214
+ +#255#219#151'b'#255#223#163'v'#255#196'Y'#24#255#234#171#128#255#243#208#183
+ +#255#239#198#169#255#239#196#166#255#238#194#162#255#236#191#158#255#235#188
+ +#152#255#233#184#147#255#232#180#142#255#230#176#136#255#227#172#129#255#226
+ +#167'{'#255#224#163't'#255#222#158'n'#255#226#170#128#255#201'b'#26#255#234
+ +#171#128#255#243#208#183#255#243#208#183#255#243#208#183#255#242#208#183#255
+ +#241#206#179#255#240#203#176#255#239#201#172#255#238#198#168#255#237#194#163
+ +#255#235#192#158#255#234#187#153#255#232#183#148#255#230#180#143#255#228#176
+ +#137#255#205'n#'#255#234#171#128#255#234#171#128#255#234#171#128#255#234#171
+ +#128#255#234#171#128#255#234#171#128#255#232#169'|'#255#230#164'w'#255#226
+ +#160'p'#255#226#155'k'#255#225#151'b'#255#221#144'Y'#255#217#139'R'#255#216
+ +#133'I'#255#214#128'>'#255#210'w5'#255#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#7'OnClick'#7#23'MenuItemExportHTMLCli'
+ +'ck'#0#0#0#9'TMenuItem'#8'MenuHelp'#7'Caption'#6#5'&Help'#0#9'TMenuItem'#13
+ +'MenuItemAbout'#7'Caption'#6#6'&About'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0
+ +'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4
+ +#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#173'tD#'#172'rA}'#170'p?'#219#168'm<'#243#167'k:'#243
+ +#165'i7'#219#164'h5}'#163'f3#'#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#181'~QS'#179'|N'#230#215
+ +#187#163#255#233#218#202#255#236#224#209#255#236#224#209#255#232#216#200#255
+ +#211#181#156#255#167'l:'#230#166'j8S'#255#255#255#0#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#189#137'_S'#187#135'['#244#231#213#196#255#229
+ +#210#191#255#201#166#133#255#184#142'g'#255#182#138'e'#255#197#161#128#255
+ +#224#204#186#255#227#208#190#255#171'p@'#244#169'n=S'#255#255#255#0#255#255
+ +#255#0#255#255#255#0#198#149'm"'#195#146'j'#229#234#216#201#255#227#205#186
+ +#255#192#148'k'#255#186#140'b'#255#207#176#148#255#207#176#148#255#183#137'_'
+ +#255#178#135'a'#255#218#192#170#255#228#209#192#255#174'uF'#229#173'sC"'#255
+ +#255#255#0#255#255#255#0#204#158'x~'#228#204#185#255#234#214#197#255#199#153
+ +'q'#255#191#144'f'#255#191#144'f'#255#247#241#236#255#246#240#234#255#183#137
+ +'_'#255#183#137'_'#255#181#137'c'#255#226#206#187#255#217#189#166#255#178'{M'
+ +'~'#255#255#255#0#255#255#255#0#211#167#132#219#239#225#211#255#217#181#149
+ +#255#199#152'l'#255#195#149'i'#255#193#147'g'#255#191#144'f'#255#191#144'f'
+ +#255#187#139'c'#255#185#138'c'#255#184#138'b'#255#203#167#134#255#234#220#204
+ +#255#184#131'W'#219#255#255#255#0#255#255#255#0#217#176#143#246#242#228#217
+ +#255#209#165'z'#255#197#153'k'#255#196#151'j'#255#196#150'i'#255#250#246#242
+ +#255#243#234#225#255#194#149'm'#255#190#143'e'#255#190#143'd'#255#192#149'm'
+ +#255#239#227#213#255#191#140'a'#246#255#255#255#0#255#255#255#0#224#185#153
+ +#246#242#229#218#255#209#166'~'#255#204#157'q'#255#199#154'l'#255#197#152'k'
+ +#255#226#204#182#255#248#243#238#255#246#238#232#255#217#189#161#255#194#148
+ +'h'#255#197#155'q'#255#240#226#214#255#197#149'l'#246#255#255#255#0#255#255
+ +#255#0#230#193#163#219#243#229#217#255#223#187#158#255#207#160'u'#255#205#158
+ +'r'#255#245#235#227#255#228#203#180#255#231#211#191#255#251#248#246#255#229
+ +#211#191#255#196#152'k'#255#214#180#145#255#238#224#210#255#204#158'x'#219
+ +#255#255#255#0#255#255#255#0#235#201#173'~'#244#227#212#255#239#220#205#255
+ +#213#168'~'#255#208#160'w'#255#251#248#245#255#252#248#245#255#252#248#245
+ +#255#251#248#245#255#209#168#129#255#207#164'{'#255#234#213#195#255#234#212
+ +#194#255#210#167#131'~'#255#255#255#0#255#255#255#0#241#208#181'"'#239#206
+ +#179#229#246#233#221#255#236#216#198#255#215#172#129#255#220#187#154#255#246
+ +#236#227#255#245#236#226#255#228#200#174#255#210#167'{'#255#230#206#186#255
+ +#241#226#213#255#219#179#145#229#217#176#142'"'#255#255#255#0#255#255#255#0
+ +#255#255#255#0#244#212#187'S'#242#210#184#244#247#234#223#255#238#222#208#255
+ +#227#193#167#255#216#174#137#255#215#172#134#255#221#187#156#255#235#214#199
+ +#255#243#230#217#255#227#190#159#244#225#187#156'S'#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#246#216#191'S'#245#214#189#230
+ +#249#233#220#255#246#232#221#255#243#229#218#255#243#229#218#255#245#231#220
+ +#255#245#228#214#255#235#200#172#230#233#198#169'S'#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#249
+ +#219#196'#'#248#218#194'}'#247#216#192#219#246#215#190#243#244#213#188#243
+ +#243#211#185#219#241#209#183'}'#240#207#180'#'#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#7'OnClick'#7#18'MenuItemAboutClick'#0#0#9'TMenu'
+ +'Item'#16'MenuItemHandbook'#7'Caption'#6#9'&Handbook'#7'OnClick'#7#21'MenuIt'
+ +'emHandbookClick'#0#0#9'TMenuItem'#17'MenuItemReportBug'#7'Caption'#6#13'&Re'
+ ,'port a Bug'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0
+ +'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0
+ +#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'2'#138#197#236'0'#135#196#246'/'#133#195#246'-'#131#194#246'*'#128#187
+ +#255')~'#186#255'(}'#191#246'&{'#190#246'%y'#189#246'#w'#189#246'"v'#188#195
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'8'#145
+ +#201#228#221#236#246#255#189#238#249#255#172#234#248#255#171#234#248#255#171
+ +#234#248#255#171#234#248#255#173#234#248#255#212#243#251#255#164#200#228#255
+ +'&{'#190#171#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'3'#135#129#200#142#194#225#255#151#232#249#255'a'#220#246#255'['#219
+ +#245#255'2'#136#194#255'['#219#245#255'j'#222#246#255#177#231#246#255'-'#131
+ +#194#233'+'#129#193'*'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#0'*{.'#193'+z2'#255'J'#159#188#255#171#219#239#255't'#224#247#255'X'#218#245
+ +#255'X'#218#245#255']'#219#245#255#144#230#248#255#146#193#225#255'/'#132#176
+ +#144#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'/'#135'3'#193' '
+ +'t#'#255#148#192#157#255'b'#172#153#255'{'#189#223#255#162#234#249#255'a'#220
+ +#246#255'1'#135#194#255'w'#225#247#255#182#222#240#255'8'#144#188#233'8'#145
+ +#201#13#255#255#255#0#255#255#255#0#255#255#255#0'5'#146':'#135'-'#140'2'#255
+ +'w'#181#130#255'M'#158'T'#255'y'#179#141#255'M'#167#174#255#172#217#236#255
+ +#130#227#248#255'3'#136#194#255#172#237#250#255'C'#158#207#254'A'#155#206'S'
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'2'#149'7'#245'b'#173
+ +'h'#255'w'#190#145#255'D'#160']'#255'K'#159'S'#255'r'#180#153#255'Q'#174#207
+ +#255#180#235#248#255#142#230#248#255#181#221#238#255'>'#150#159#255'+xM'#23
+ +#255#255#255#0' f#|'#255#255#255#0#255#255#255#0'3'#156'8'#248'R'#169'Y'#255
+ +'m'#188#140#255'M'#170'p'#255'B'#159'\'#255'L'#162'T'#255'm'#187#184#255#164
+ +#215#235#255#220#244#251#255'U'#176#211#255'/'#130'N'#255'$s('#254'#p'''#255
+ +'"l&'#255#255#255#255#0'4'#164'9'#199'3'#161'8'#255'3'#158'8'#255#148#207#172
+ +#255'\'#180'~'#255'N'#172'r'#255'A'#161']'#255'O'#167'^'#255'`'#187#210#255
+ +#171#219#237#255'l'#186#189#255'*~-'#255'&y*'#244'%v)m'#255#255#255#0'7'#173
+ +'<'#250'6'#170';'#255'5'#167':'#162'8'#165'>'#234'P'#173'V'#255#141#204#165
+ +#255'^'#181#128#255'O'#173's'#255'B'#163']'#255'U'#177#134#255'i'#192#211#255
+ +#138#191#155#255')'#131'.'#255'%Y;'#175#255#255#255#0#255#255#255#0'8'#177'>'
+ +#241'7'#175'=#'#255#255#255#0#255#255#255#0'4'#166':'#254'9'#165'?'#255#144
+ +#206#168#255'b'#185#132#255'X'#178'{'#255'`'#178'v'#255'8'#151'>'#255')'#137
+ +'-'#255'W'#164'b'#255'&PD'#219#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0'7'#174'=A6'#171'<'#255'8'#169'>'#240'E'#172'K'#255
+ +#158#212#173#255#164#215#184#255#133#195#142#255'('#143'-'#255'O'#183'_'#255
+ +#151#200#170#255','#141'1'#255'+'#137'0'#255'*'#133'.'#255#255#255#255#0#255
+ +#255#255#0#255#255#255#0'8'#179'>'#240'8'#177'='#248#255#255#255#0'8'#172'='
+ +#241'5'#168':'#255'4'#165'9'#255'4'#161'9'#255'r'#194'~'#255#175#227#194#255
+ +'_'#140'x'#255'2eMu'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0':'#183'@'#255'9'#181'?t'#255#255#255#0#255#255#255#0'7'#173'<'
+ +#248'6'#170';'#237'F'#127'f'#165':'#134'P'#247'3'#157':'#254';qX'#137#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +';'#187'A#'#255#255#255#0#255#255#255#0#255#255#255#0'8'#178'>'#255'7'#175'='
+ +#178'N'#142'j"5'#169';e4'#166':'#242#255#255#255#0#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0':'#183'?'#255'9'#180'?A'#255#255#255#0
+ +'7'#174'=R6'#172'<'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#0#7'OnClick'#7#22'MenuItemReportBugClick'#0#0#0#0#10'TImageList'#17'Mufasa_'
+ +'Image_List'#4'left'#3#192#1#3'top'#3#144#0#6'Bitmap'#10#14'p'#0#0'Li'#28#0#0
+ +#0#16#0#0#0#16#0#0#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0
+ +'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255#161'UB'#255#161'UB'#255'BBB'#14'BBB'
+ +#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161
+ +'UB'#255#255#218#208#255#208'^B'#255#161'UB'#255#161'UB'#255'BBB'#0'BBB'#0'B'
+ +'BB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255#255#218
+ +#208#255#208'^B'#255#208'^B'#255#161'UB'#255#161'UB'#255'BBB'#0'BBB'#0'BBB'#0
+ +'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255#161'UB'#255#255#218#208#255
+ +#208'^B'#255#208'^B'#255#161'UB'#255#161'UB'#255#161'UB'#255'BBB'#0'BBB'#0'B'
+ +'BB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255#255#218#208#255#161'UB'#255
+ +#208'^B'#255#208'^B'#255#161'UB'#255#161'UB'#255#161'UB'#255'BBBcBBB'#0'BBB'
+ +#0'BBB'#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'BBB'#11#161
+ +'UB'#255#255#218#208#255#161'UB'#255#208'^B'#255#161'UB'#255#161'UB'#255'BBB'
+ +'cBBBLBBB'#0'BBB'#0'BBB'#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ ,#255#0#131#131#131#255#255#255#255#255#161'UB'#255#255#218#208#255#161'UB'
+ +#255#161'UB'#255'BBBcBBBLBBB'#25'BBB'#0'BBB'#0'BBB'#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#131#131#131#255#255#255#255#255#229#229#229#255#161#161
+ +#161#255#161'UB'#255#255#218#208#255#161'UB'#255'BBBXBBB'#28'BBB'#3'BBB'#0'B'
+ +'BB'#0'BBB'#0#255#255#255#0#255#255#255#0#131#131#131#255#255#255#255#255#229
+ +#229#229#255#161#161#161#255#131#131#131#255'BBBc'#161'UB'#255'BBB`BBBJBBB'
+ +#14'BBB'#0'BBB'#0'BBB'#0'BBB'#0#255#255#255#0#131#131#131#255#255#255#255#255
+ +#229#229#229#255#161#161#161#255#131#131#131#255'BBBcBBBLBBB''BBB>BBB'#25'BB'
+ +'B'#3'BBB'#0'BBB'#0'BBB'#0'BBB'#0#131#131#131#255#255#255#255#255#229#229#229
+ +#255#161#161#161#255#131#131#131#255'BBBcBBBLBBB'#25'BBB'#6'BBB'#11'BBB'#2'B'
+ +'BB'#0'BBB'#0'BBB'#0'BBB'#0#131#131#131#255#255#255#255#255#229#229#229#255
+ +#161#161#161#255#131#131#131#255'BBBcBBBLBBB'#25'BBB'#3'BBB'#0'BBB'#0'BBB'#0
+'BBB'#0'BBB'#0'BBB'#0#131#131#131#255#255#255#255#255#229#229#229#255#161#161
- +#161#255#131#131#131#255'BBBcBBBLBBB'#25'BBB'#6'BBB'#11'BBB'#2'BBB'#0'BBB'#0
- +'BBB'#0'BBB'#0#131#131#131#255#255#255#255#255#229#229#229#255#161#161#161
- +#255#131#131#131#255'BBBcBBBLBBB'#25'BBB'#3'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'
- +#0'BBB'#0#131#131#131#255#255#255#255#255#229#229#229#255#161#161#161#255#131
- +#131#131#255'BBBcBBBLBBB'#25'BBB'#3'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0
- +'BBB'#0#131#131#131#255#229#229#229#255#161#161#161#255#131#131#131#255'BBBc'
- +'BBBLBBB'#25'BBB'#3#255#255#255#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0
- +#131#131#131#255#229#229#229#255#131#131#131#255#131#131#131#255'BBBcBBBLBBB'
- +#25'BBB'#3#255#255#255#0#255#255#255#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BB'
- +'B'#0#131#131#131#255#131#131#131#255'BBB`BBBXBBBJBBB'#25'BBB'#3'BBB'#0'BBB'
- +#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#0#0#0#0#0#0#0#0#225#238
- +#225#255#197#220#197#255#219#233#219#255#244#249#244#255#0#0#0#0#0#0#0#0#0#0
+ +#161#255#131#131#131#255'BBBcBBBLBBB'#25'BBB'#3'BBB'#0'BBB'#0'BBB'#0'BBB'#0
+ +'BBB'#0'BBB'#0'BBB'#0#131#131#131#255#229#229#229#255#161#161#161#255#131#131
+ +#131#255'BBBcBBBLBBB'#25'BBB'#3#255#255#255#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BB'
+ +'B'#0'BBB'#0#131#131#131#255#229#229#229#255#131#131#131#255#131#131#131#255
+ +'BBBcBBBLBBB'#25'BBB'#3#255#255#255#0#255#255#255#0'BBB'#0'BBB'#0'BBB'#0'BBB'
+ +#0'BBB'#0'BBB'#0#131#131#131#255#131#131#131#255'BBB`BBBXBBBJBBB'#25'BBB'#3
+ +'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#0#0#0#0#0#0#0
+ +#0#225#238#225#255#197#220#197#255#219#233#219#255#244#249#244#255#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
- +#174#213#176#255#214#248#225#255#207#250#221#255#181#248#204#255'x'#216#145
- +#255'@'#139'@'#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
- +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#202#225#202#255#197#247#213#255#156#244#185
- +#255'}'#228#159#255#10'Y'#12#255#0#0#0#191#0#0#0#0#195#196#237#255#0#0#0#0#0
- +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#149#196#149#255#187#243#206
- +#255#157#240#186#255'k'#212#142#255'N'#154'h'#255#10'D'#10#255#0#0#0#191#0#0
- +#0#0#221#221#246#255'RW'#199#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#132
- +#195#132#255#134#227#165#255'l'#224#146#255'K'#170'k'#255#1'/'#1#255'*Y:'#255
- +'6U6'#255#0#0#0#191#0#0#0#0#0#0#0#0#177#180#234#255'=F'#197#255#0#0#0#0#0#0#0
- +#0#0#0#0#0#232#243#232#255#136#221#159#255'D'#207'r'#255'&'#142'I'#255'4;4'
- +#255'1:1'#255'!>+'#255'[r['#255#0#0#0#191#0#0#0#0#0#0#0#0#224#225#247#255'!6'
- +#211#255#130#132#185#255#0#0#0#0#0#0#0#0'a'#177'a'#255'7'#198'^'#255'$'#153
- +'J'#255'0I0'#255#0#0#0#191#0#0#0#191#9'@'#9#255#0#0#0#191#0#0#0#191#0#0#0#0#0
- +#0#0#0#151#157#232#255#0#25#192#255#21#25'g'#255#0#0#0#0#0#0#0#0#27#142#27
- +#255#22#139'.'#255';^;'#255#0#0#0#191#0#0#0#191#0#0#0#0#0#0#0#0'x'#135#241
- +#255#0#0#0#0#0#0#0#0#185#191#246#255#0','#241#255#0#20'}'#255#17#20'4'#255#0
- +#0#0#0#0#0#0#0'd'#140'd'#255#21'W"'#255'?D?'#255#0#0#0#191#0#0#0#0#0#0#0#0
- +#194#201#249#255#161#189#254#255#235#237#253#255#233#235#253#255'3d'#254#255
- +#2' '#147#255#0#11'<'#255'99?'#255#0#0#0#0#0#0#0#0#0#0#0#0#2'.'#3#255'$5$'
- +#255#0#0#0#191#0#0#0#0#0#0#0#0#133#151#250#255#142#182#255#255'hz'#238#255'p'
- +#155#251#255#17'5'#156#255#3#18'A'#255#6#10'3'#255#0#0#0#191#0#0#0#0#0#0#0#0
- +#0#0#0#0#0#0#0#0#2''''#2#255'DLD'#255#0#0#0#0#0#0#0#0#16'2'#251#255'r'#178
- +#255#255'c'#161#245#255'6\'#154#255#19'"A'#255#5#11'7'#255#0#0#0#191#0#0#0
- +#191#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'=Q='#255#0#0#0#191#0#0#0#0#9'2'
- +#181#255'S~'#161#255'5Rq'#255#26'+A'#255#23#28';'#255#0#0#0#191#0#0#0#191#0#0
- +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#191#0#0#0#0#23'$e'
- +#255#30'/A'#255'(6A'#255#30'/A'#255#20'$A'#255#1#9'7'#255#0#0#0#0#0#0#0#0#0#0
- +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
- +#191'::@'#255'%(='#255#6#13'8'#255'%(='#255#0#0#0#191#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#174#213#176#255#214#248#225#255#207#250#221#255#181#248#204#255'x'
+ +#216#145#255'@'#139'@'#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#202#225#202#255#197#247#213#255#156
+ +#244#185#255'}'#228#159#255#10'Y'#12#255#0#0#0#191#0#0#0#0#195#196#237#255#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#149#196#149#255#187
+ +#243#206#255#157#240#186#255'k'#212#142#255'N'#154'h'#255#10'D'#10#255#0#0#0
+ +#191#0#0#0#0#221#221#246#255'RW'#199#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#132#195#132#255#134#227#165#255'l'#224#146#255'K'#170'k'#255#1'/'#1#255
+ +'*Y:'#255'6U6'#255#0#0#0#191#0#0#0#0#0#0#0#0#177#180#234#255'=F'#197#255#0#0
+ +#0#0#0#0#0#0#0#0#0#0#232#243#232#255#136#221#159#255'D'#207'r'#255'&'#142'I'
+ +#255'4;4'#255'1:1'#255'!>+'#255'[r['#255#0#0#0#191#0#0#0#0#0#0#0#0#224#225
+ +#247#255'!6'#211#255#130#132#185#255#0#0#0#0#0#0#0#0'a'#177'a'#255'7'#198'^'
+ +#255'$'#153'J'#255'0I0'#255#0#0#0#191#0#0#0#191#9'@'#9#255#0#0#0#191#0#0#0
+ +#191#0#0#0#0#0#0#0#0#151#157#232#255#0#25#192#255#21#25'g'#255#0#0#0#0#0#0#0
+ +#0#27#142#27#255#22#139'.'#255';^;'#255#0#0#0#191#0#0#0#191#0#0#0#0#0#0#0#0
+ +'x'#135#241#255#0#0#0#0#0#0#0#0#185#191#246#255#0','#241#255#0#20'}'#255#17
+ +#20'4'#255#0#0#0#0#0#0#0#0'd'#140'd'#255#21'W"'#255'?D?'#255#0#0#0#191#0#0#0
+ +#0#0#0#0#0#194#201#249#255#161#189#254#255#235#237#253#255#233#235#253#255'3'
+ +'d'#254#255#2' '#147#255#0#11'<'#255'99?'#255#0#0#0#0#0#0#0#0#0#0#0#0#2'.'#3
+ +#255'$5$'#255#0#0#0#191#0#0#0#0#0#0#0#0#133#151#250#255#142#182#255#255'hz'
+ +#238#255'p'#155#251#255#17'5'#156#255#3#18'A'#255#6#10'3'#255#0#0#0#191#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#2''''#2#255'DLD'#255#0#0#0#0#0#0#0#0#16'2'#251#255
+ +'r'#178#255#255'c'#161#245#255'6\'#154#255#19'"A'#255#5#11'7'#255#0#0#0#191#0
+ +#0#0#191#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'=Q='#255#0#0#0#191#0#0#0#0#9
+ +'2'#181#255'S~'#161#255'5Rq'#255#26'+A'#255#23#28';'#255#0#0#0#191#0#0#0#191
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#191#0#0#0#0#23
+ +'$e'#255#30'/A'#255'(6A'#255#30'/A'#255#20'$A'#255#1#9'7'#255#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#191'::@'#255'%(='#255#6#13'8'#255'%(='#255#0#0#0#191#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
- +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
@@ -1408,8 +1409,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#167#128#195'l'#179#146#255#168#213#195#255#197#230#219#255'q'#183#151#255
+#198#230#220#255#169#214#196#255'o'#181#148#255'V'#167#128#198'V'#167#128#30
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'R'#162'}'#27'S'#163
- +'~'#228#143#198#174#255#200#232#223#255#223#242#236#255#249#253#251#255'w'
- ,#184#153#255#248#252#251#255#220#241#235#255#199#231#222#255#147#200#178#255
+ ,'~'#228#143#198#174#255#200#232#223#255#223#242#236#255#249#253#251#255'w'
+ +#184#153#255#248#252#251#255#220#241#235#255#199#231#222#255#147#200#178#255
+'U'#164#128#232'R'#162'}'#30#255#255#255#0#255#255#255#0#255#255#255#0'M'#157
+'x'#192#140#195#171#255#195#230#220#255#245#251#249#255#197#230#220#255#157
+#213#197#255'\'#170#135#255#159#214#197#255#201#232#223#255#244#250#249#255
@@ -1472,8 +1473,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#221#255#225#205#180#255#177#141']'#191#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#3#13#140#31#27'&'#167#153'*4'#186#204#17#28#157#137#187#152'i'#204#240#224
- +#208#255#183#145'_'#197#143']'#20#11#255#255#255#0#255#255#255#0#255#255#255
- ,#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#3#13#140#31',5'
+ ,#208#255#183#145'_'#197#143']'#20#11#255#255#255#0#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#3#13#140#31',5'
+#185#215''#202#242'?L'#215#255#216#188#154#255#246#234#225#255
+#187#146'Z'#191#148'b'#24';'#145'a'#26#1#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#29'('#169#156';F'#204#255#8
@@ -1536,8 +1537,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#238#238#0#238#238#238#0#238#238#238#0#153'nL'#255#171'qC'#255#172'rD'#255
+#153'nL'#255#251#227#188#0#251#227#188#0#153'nL'#255#171'qC'#255#172'rD'#255
+#153'nL'#255#0#0#0#0#0#0#0#0#0#0#0#0#153'nL'#0#153'nL'#0#153'nL'#0#162'f7'
- +#255#220#191#164#255#223#198#175#255#162'f7'#255#153'nL'#0#153'nL'#0#162'f7'
- ,#255#220#191#164#255#223#198#175#255#162'f7'#255#0#0#0#0#0#0#0#0#0#0#0#0#164
+ ,#255#220#191#164#255#223#198#175#255#162'f7'#255#153'nL'#0#153'nL'#0#162'f7'
+ +#255#220#191#164#255#223#198#175#255#162'f7'#255#0#0#0#0#0#0#0#0#0#0#0#0#164
+'e4'#0#164'e4'#0#164'e4'#0#164'e4'#255#221#188#157#255#231#209#188#255#164'e'
+'4'#255#164'e4'#0#164'e4'#0#164'e4'#255#221#188#157#255#231#209#188#255#164
+'e4'#255#0#0#0#0#0#0#0#0#0#0#0#0#164'e4'#0#164'e4'#0#164'e4'#0#164'e4'#255
@@ -1600,8 +1601,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#22'|G'#255#136#156#146#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#4's:'#255#131#220#175#255#17#195'i'#255#26#204's'#255'i'#223#163#255
+'Z'#194#141#255#19'vC'#255#158#167#163#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
- +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#9'w?'#255#131#219#174#255#31#198'q'#255'r'#222
- ,#167#255'K'#178#127#255#23'tE'#255#168#173#170#255#0#0#0#0#0#0#0#0#0#0#0#0#0
+ ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#9'w?'#255#131#219#174#255#31#198'q'#255'r'#222
+ +#167#255'K'#178#127#255#23'tE'#255#168#173#170#255#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#4's:'#255#130#216#172#255'v'
+#214#166#255'<'#157'j'#255'''tL'#255#172#174#173#255#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#4's:'#255'z'#207#164
@@ -1664,8 +1665,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#135#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15'6'
+#157#188#1')'#154#255#3'0'#166#255#4'%'#145#254#5'('#137#255#1#23'u'#255#1'1'
+#171#254#1''''#145#255#7#30'j'#171#0#0#0#0#3#27'm'#0#0#0#0#0#0#0#0#0#127'rf'
- +#0#0#0#0#0#0#9#154#1#3'2'#172#226#15':'#133#241#11'v'#234#255#11'~'#240#255
- ,#18'\'#171#255#9'q'#229#255#3'('#148#255#0','#162#254#0#25'm'#255#5#27'k'#221
+ ,#0#0#0#0#0#0#9#154#1#3'2'#172#226#15':'#133#241#11'v'#234#255#11'~'#240#255
+ +#18'\'#171#255#9'q'#229#255#3'('#148#255#0','#162#254#0#25'm'#255#5#27'k'#221
+#19'&f"'#0#0#0#0#0#0#0#0'sf['#6'uli'#29'gkz!'#8'A'#183#239#19'~'#236#255#12
+#137#255#254#23'p'#207#255'*x'#200#255#10'{'#243#255#5'K'#186#255#0'+'#160
+#255#4'*'#131#255#0#25'm'#254#2#23'f'#255#17#29'_$tz'#137#6'pjd*xdW(Td'#130
@@ -1728,8 +1729,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#0#255#255#255#0#197#128'B'#247#248#241#232#255#254#229#213#255#253#229#211
+#255#253#229#211#255#252#229#211#255#252#229#211#255#252#228#209#255#252#226
+#206#255#252#226#204#255#251#224#201#255#251#225#200#255#253#250#247#255#193
- +'v;'#247#255#255#255#0#255#255#255#0#196'|@'#247#247#240#230#255#248#180'U'
- ,#255#247#180'V'#255#247#181'T'#255#248#180'S'#255#248#178'S'#255#247#179'R'
+ ,'v;'#247#255#255#255#0#255#255#255#0#196'|@'#247#247#240#230#255#248#180'U'
+ +#255#247#180'V'#255#247#181'T'#255#248#180'S'#255#248#178'S'#255#247#179'R'
+#255#247#179'R'#255#247#178'Q'#255#247#178'O'#255#247#178'O'#255#252#249#245
+#255#191'o6'#247#255#255#255#0#255#255#255#0#193'x<'#247#247#237#227#255#253
+#194'n'#255#255#216#160#255#255#215#158#255#255#214#155#255#255#215#152#255
@@ -1792,8 +1793,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#0'3'#142#217#251#220#240#250#255#152#225#246#255#149#224#246#255#146#223#246
+#255#142#222#245#255#137#220#245#255#133#218#244#255#128#217#244#255'z'#215
+#243#255't'#213#243#255'p'#211#242#255#194#234#248#255'5'#148#218#255#255#255
- +#255#0#255#255#255#0','#134#216#209'-'#136#216#247'-'#135#216#247'-'#136#216
- ,#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216
+ ,#255#0#255#255#255#0','#134#216#209'-'#136#216#247'-'#135#216#247'-'#136#216
+ +#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216
+#247'-'#136#216#247'-'#136#216#247'-'#135#216#247'-'#136#216#247','#134#216
+#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152'* c'#152
+#255' c'#152#255' c'#152#255' c'#152#255' c'#152#255' c'#152#240#255#255#255
@@ -1856,8 +1857,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#250#255' '#227#250#255'1'#225#246#255#173#243#251#255#0#160#196#255#5'y}'#17
+#0#0#0#0#255#255#255#0#0#0#0#0#5'y}2'#19#163#193#228'A'#206#227#254'i'#231
+#246#255'6'#217#236#255#22#205#227#255')'#219#241#255'/'#224#245#255')'#219
- +#241#255'2'#226#247#255'/'#224#246#255#173#243#251#255#0#160#196#255#5'y}'#10
- ,#255#255#255#0#5'y}'#10#22#161#189#202'@'#205#225#255'6'#217#236#255#29#210
+ ,#241#255'2'#226#247#255'/'#224#246#255#173#243#251#255#0#160#196#255#5'y}'#10
+ +#255#255#255#0#5'y}'#10#22#161#189#202'@'#205#225#255'6'#217#236#255#29#210
+#232#255#29#210#232#255#29#210#232#255')'#219#241#255'/'#224#245#255'2'#226
+#247#255'2'#226#247#255'2'#226#248#255'/'#224#246#255#173#243#251#255#0#160
+#196#255#255#255#255#0#21#160#188#203#27#171#197#248'j'#229#243#255#11#200
@@ -1920,8 +1921,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#0#0#0#0#0#0#0#0#255#255#255#0#0#0#0#11#0#0#0'#'#0#0#0'#'#0#0#0#11#0#0#0#0#0
+#0#0#11#0#0#0';'#0#0#159#255#0#0#0#167#0#0#0#131#0#0#0';'#0#0#0#11#0#0#0#0#0
+#0#0#0#0#0#0#0#188'k6q'#188'k6'#144#188'k6'#204#188'k6'#238#188'k6'#250#187
- +'k6'#254#187'k6'#255#187'j6'#255#187'j6'#255#188'l9'#255#189'n;'#255#187'm:'
- ,#255#187'k8'#239#187'p>'#203#182'i5T'#255#255#255#0#188'k6'#155#246#224#209
+ ,'k6'#254#187'k6'#255#187'j6'#255#187'j6'#255#188'l9'#255#189'n;'#255#187'm:'
+ +#255#187'k8'#239#187'p>'#203#182'i5T'#255#255#255#0#188'k6'#155#246#224#209
+#255#247#224#209#255#254#251#248#255#254#251#247#255#253#249#246#255#252#245
+#240#255#250#240#234#255#251#242#237#255#253#249#246#255#253#250#247#255#251
+#241#235#255#248#233#223#254#236#208#189#251#201#137'^'#236#181'i5c'#188'k6'
@@ -1984,8 +1985,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255
+#255#255#255'UUUgQQQh'#253#253#253#255#252#252#252#255#252#252#252#255#252
+#252#252#255#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252#255
- +#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252
- ,#255#253#253#253#255'QQQhMMMj'#250#250#250#255#248#248#248#255#248#248#248
+ ,#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252
+ +#255#253#253#253#255'QQQhMMMj'#250#250#250#255#248#248#248#255#248#248#248
+#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248
+#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248
+#248#248#255#250#250#250#255'MMMjIIIl'#247#247#247#255#244#244#244#255#244
@@ -2048,8 +2049,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#255'888s222v'#234#234#234#255#226#226#226#255#226#226#226#255#226#226#226
+#255#226#226#226#255#226#226#226#255#226#226#226#255#226#226#226#255'[['#190
+#255'--'#179#255'--'#179#255'--'#179#255'--'#179#255'//'#181#255#17#17#129
- +#200'''''''{'#235#235#235#255#231#231#231#255#231#231#231#255#231#231#231#255
- ,#231#231#231#255#231#231#231#255#231#231#231#255#231#231#231#255'//'#167#255
+ ,#200'''''''{'#235#235#235#255#231#231#231#255#231#231#231#255#231#231#231#255
+ +#231#231#231#255#231#231#231#255#231#231#231#255#231#231#231#255'//'#167#255
+'^^'#247#255'^^'#247#255'^^'#247#255'^^'#247#255'^^'#247#255#5#5#139#229#13
+#13#13'g'#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16
+#16#16#133#16#16#16#133#16#16#16#133#4#4'['#207#2#2's'#231#2#2's'#231#2#2's'
@@ -2112,8 +2113,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#210#232#255'6'#217#236#255'@'#205#225#255#22#161#189#202#5'y}'#10#0#0#0#0#5
+'y~'#17#0#160#196#255'y'#237#251#255'2'#226#248#255','#223#244#255#4#192#214
+#255#4#192#214#255#4#192#214#255#29#210#232#255#29#210#232#255#29#210#232#255
- +#11#200#223#255'j'#229#243#255#27#171#197#248#21#160#188#203#0#0#0#0#0#0#0#0
- ,#5'y}'#17#0#160#196#255'v'#237#251#255#4#195#218#255'v'#237#251#255'i'#234
+ ,#11#200#223#255'j'#229#243#255#27#171#197#248#21#160#188#203#0#0#0#0#0#0#0#0
+ +#5'y}'#17#0#160#196#255'v'#237#251#255#4#195#218#255'v'#237#251#255'i'#234
+#249#255'i'#234#249#255'i'#234#249#255'i'#234#249#255#5#221#247#255#10#200
+#223#255#7#194#216#255'o'#220#235#255#27#163#191#244#0#0#0#0#0#0#0#0#0#0#0#0
+#5'y}'#17#0#160#196#255'v'#237#251#255'v'#237#251#255#0#160#196#255#0#160#196
@@ -2176,8 +2177,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#23#0#0#0#12#0#0#0#2#255#255#255#0'TTT'#0'T'
+'TT'#0'TTT'#0'UUU"UUUYUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUYUUU"TTT'#0'RRR'
+#0'RRR'#0'RRR['#198#198#198#212#219#219#219#255#214#214#214#255#209#209#209
- +#255#203#204#204#255#199#199#199#255#198#196#196#255#200#197#197#255#206#198
- ,#198#255#212#201#201#255#196#183#183#212'RRR[UUU'#0'TTT'#0'PPP'#0'PPPi'#187
+ ,#255#203#204#204#255#199#199#199#255#198#196#196#255#200#197#197#255#206#198
+ +#198#255#212#201#201#255#196#183#183#212'RRR[UUU'#0'TTT'#0'PPP'#0'PPPi'#187
+#187#187#255#185#185#185#255#182#182#182#255#180#180#180#255#176#176#176#255
+#173#173#173#255#169#169#169#255#166#166#166#255#162#162#162#255#160#160#160
+#255#157#157#157#255#3#3#3'fUUU'#0'UUU'#0'UUU'#0'TTTg'#255#255#255#255#255
@@ -2240,8 +2241,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#141'e'#255#243#205#176#255#255#255#255#255#227#199#179#255#255#255#255#255
+#255#255#255#255#255#255#255#255#255#255#255#255#234#191#161#255#201#137'`'
+#255#255#255#255#0#255#255#255#0#196#129'T'#201#234#182#151#201#206#152's'
- +#248#234#190#161#248#199#134'['#255#239#192#158#255#255#255#255#255#204#147
- ,'n'#255#255#255#255#255#255#255#255#255#255#251#247#255#255#248#241#255#228
+ ,#248#234#190#161#248#199#134'['#255#239#192#158#255#255#255#255#255#204#147
+ +'n'#255#255#255#255#255#255#255#255#255#255#251#247#255#255#248#241#255#228
+#175#140#255#199#138'a'#255#255#255#255#0#255#255#255#0#195#127'Q'#201#239
+#182#154#201#204#150'o'#248#214#182#145#248#200#136']'#255#239#191#161#255
+#253#252#250#255#254#252#251#255#254#253#253#255#254#253#252#255#253#251#250
@@ -2304,8 +2305,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#145#255#255#247#240#255#255#231#213#255#253#231#214#255#253#230#212#255#252
+#228#208#255#251#227#203#255#250#220#194#255#254#243#232#255#204#134'V'#254
+#199'yJ'#185#200'yK'#206#200'uE'#221#199'uE'#212#200'uE'#212#199'uE'#212#202
- +#132'R'#255#255#247#241#255#255#233#217#255#255#234#219#255#255#233#217#255
- ,#255#231#215#255#255#229#210#255#255#226#203#255#255#247#241#255#203#133'U'
+ ,#132'R'#255#255#247#241#255#255#233#217#255#255#234#219#255#255#233#217#255
+ +#255#231#215#255#255#229#210#255#255#226#203#255#255#247#241#255#203#133'U'
+#254#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#204#131'R'#251#251#245#238#255#255#233#217#255#255#234#219#255
+#255#233#217#255#255#231#215#255#255#229#210#255#255#226#203#255#251#246#239
@@ -2368,8 +2369,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+'ttk'#255'ttk'#255'ttk'#255'ttk'#255'ff]'#255'ZZP'#199'ZZP'#139'F'#255#143#206#153#255'}'#198#135
- +#255'x'#195#129#255's'#192'|'#255't'#192'|'#255'y'#194#129#255'I'#144'O'#255
- ,'T'#127'W'#255'T'#137#191#255#148#191#221#255'u'#173#212#255'c'#184#225#255
+ ,#255'x'#195#129#255's'#192'|'#255't'#192'|'#255'y'#194#129#255'I'#144'O'#255
+ +'T'#127'W'#255'T'#137#191#255#148#191#221#255'u'#173#212#255'c'#184#225#255
+'K'#212#255#255'B'#139#184#255',n'#166#234';'#135'B'#255#137#203#146#255#132
+#200#141#255#128#198#136#255'{'#195#131#255'w'#193#127#255'G'#143'M'#255';t?'
+#255#161#161#161#255'L'#132#186#255#141#187#219#255'n'#168#209#255'f'#166#209
@@ -2496,8 +2497,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1'0'#2
+#2#2#239#21#21#21#255':::'#255'```'#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1' '#2#2#2#207
- +#20#20#20#255'999'#207#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
- ,#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ ,#20#20#20#255'999'#207#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0'UUU"UUUYUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUU'
+'fUUUYUUU"RRR['#198#198#198#212#220#220#220#255#216#217#217#255#213#213#213
@@ -2560,8 +2561,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#212#151#0#0#0#0#0#0#0#0#0#5#20#147#255#6#21#146#255#7#22#147#255#6#19#151
+#255#6#18#154#255#6#18#151#255#3#18#144#255#2#22#141#255#1#23#135#255#0#17'|'
+#255#8#24'y'#255#3#15'f'#255#9#17'a'#255#15#21']'#255#27#28'T'#255'^Qh'#170#0
- +#0#0#0#0#0#0#0#188#173#160#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#252#212#151#2
- ,#251#211#150#0#6#21#148#255#5#21#145#255#5#21#146#255#6#18#151#255#5#17#152
+ ,#0#0#0#0#0#0#0#188#173#160#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#252#212#151#2
+ +#251#211#150#0#6#21#148#255#5#21#145#255#5#21#146#255#6#18#151#255#5#17#152
+#255#4#17#150#255#5#20#145#255#4#26#138#255#14'+'#142#255#2#25'w'#255#1#20'k'
+#255#2#17'a'#255#8#18'\'#255#14#23']'#255#21'!_'#255'33Q'#230#255#255#255#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#8#23#150#255#4
@@ -2624,8 +2625,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#255#14#27#148#255#13#22#140#255#15#23#142#254#12#24#146#255#27#30#140#255'4'
+'(s'#227'bF]'#28#0#0#0#0#0#0#0#0#0#0#0#0't}~'#0#0#0#0#0#0#0#0#0#239#171'P'#1
+#233#168'L'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#158'ma'#0#0#0#255#0#0#0
- +#0#0'?!S#-!o}''&s'#190'/''{'#221'2'#31'z'#231'/$t'#210'<6c'#141'{jW'#25#0#0#0
- ,#0'jM_'#0#0#0#0#0#243#174'Q'#0#0#0#0#0#0#0#0#0#241#173'Q'#0#0#0#0#0#0#0#0#0#0
+ ,#0#0'?!S#-!o}''&s'#190'/''{'#221'2'#31'z'#231'/$t'#210'<6c'#141'{jW'#25#0#0#0
+ +#0'jM_'#0#0#0#0#0#243#174'Q'#0#0#0#0#0#0#0#0#0#241#173'Q'#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#132'Za'#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#187'tV'#14#145'\Z'#29#255#243'L'#6#0#0#0#0#0#0#0#0#146'xp'#0#243
+#174'R'#0#243#174'R'#0#0#0#0#0#0#0#0#0#0#0#0#0#242#174'R'#0#0#0#0#0#241#173
@@ -2688,8 +2689,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#154#154#255#155#155#155#255#155#155#155#255'o'#157#211#255#170#209#231#255
+#171#209#231#255#152#199#225#255#145#194#222#255'V'#143#183#255'R'#137#193
+#234#255#255#255#0#255#255#255#0#128#128#128#255'~~~'#255'|||'#255'zzz'#255
- +'www'#255'uuu'#255'rrr'#255'q'#158#212#255'o'#158#214#255#135#178#220#255#171
- ,#211#232#255#169#208#230#255'X'#144#184#255'Y'#142#198#234#255#255#255#0#255
+ ,'www'#255'uuu'#255'rrr'#255'q'#158#212#255'o'#158#214#255#135#178#220#255#171
+ +#211#232#255#169#208#230#255'X'#144#184#255'Y'#142#198#234#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'p'#158#214#219
+'m'#156#212#255#133#177#218#255'Z'#145#185#255'`'#147#203#234#255#255#255#0
@@ -2752,8 +2753,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#0#0#0#9#0#0#0#22#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26
- +#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#22#0#0#0#9#13#13
- ,#13'g'#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16
+ ,#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#22#0#0#0#9#13#13
+ +#13'g'#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16
+#16#133#16#16#16#133#16#16#16#133#4#4'['#207#2#2's'#231#2#2's'#231#2#2's'#231
+#2#2's'#231#2#2's'#231#2#2'X'#176'''''''{'#235#235#235#255#231#231#231#255
+#231#231#231#255#231#231#231#255#231#231#231#255#231#231#231#255#231#231#231
@@ -2816,8 +2817,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#9'OnExecute'#7#18'ActionPauseExecute'#0#0#7'TAction'#16'ActionStopScript'#7
+'Caption'#6#5'&Stop'#9'OnExecute'#7#17'ActionStopExecute'#8'ShortCut'#2'q'#0
+#0#7'TAction'#13'ActionSaveAll'#7'Caption'#6#8'Save All'#10'ImageIndex'#2#21
- +#9'OnExecute'#7#20'ActionSaveAllExecute'#8'ShortCut'#3'S`'#0#0#7'TAction'#16
- ,'ActionClearDebug'#7'Caption'#6#5'Clear'#10'ImageIndex'#2#4#9'OnExecute'#7#23
+ ,#9'OnExecute'#7#20'ActionSaveAllExecute'#8'ShortCut'#3'S`'#0#0#7'TAction'#16
+ +'ActionClearDebug'#7'Caption'#6#5'Clear'#10'ImageIndex'#2#4#9'OnExecute'#7#23
+'ActionClearDebugExecute'#0#0#7'TAction'#15'ActionFindStart'#7'Caption'#6#9
+'&Find ...'#10'ImageIndex'#2#26#9'OnExecute'#7#22'ActionFindstartExecute'#8
+'ShortCut'#3'F@'#0#0#7'TAction'#9'ActionCut'#7'Caption'#6#4'Cu&t'#10'ImageIn'
@@ -2880,8 +2881,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+'%'#228#251#255#0#160#196#255#0#160#196#255#19#161#190#231#21#159#187#207#27
+#161#187#164#6'z|'#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#5'y}'#17#0#160#196#255#173#243#251#255#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0
- +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
- ,#0#0#0#157#191#20#0#160#196#255#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#157#191#20#0#160#196#255#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#7'OnClick'#7#17'ActionUndoExecute'#0#0#9'TMenuItem'#13
@@ -2944,8 +2945,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'2<'#195#236'#.'#173#175
+#255#255#255#0#26'%'#168#153'BP'#210#255#203#163'u'#254'AO'#214#255#22'!'#163
+#157'/9'#192#212'.8'#190#223#2#13#139#10#255#255#255#0#255#255#255#0#255#255
- +#255#0#255#255#255#0#255#255#255#0#29'('#169#156';F'#204#255#8#18#144':'#7#17
- ,#144'S;H'#212#255#219#189#156#255#238#204#166#255'@L'#222#255':C'#209#255#15
+ ,#255#0#255#255#255#0#255#255#255#0#29'('#169#156';F'#204#255#8#18#144':'#7#17
+ +#144'S;H'#212#255#219#189#156#255#238#204#166#255'@L'#222#255':C'#209#255#15
+#25#152'i'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#3#13#140#31',5'#185#215''#202#242'?L'#215
+#255#216#188#154#255#246#234#225#255#187#146'Z'#191#148'b'#24';'#145'a'#26#1
@@ -3008,8 +3009,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#135'X'#254#202#132'R'#219#255#247#241#222#255#233#217#222#255#234#219#222
+#255#233#217#222#255#231#215#222#228#187#146#255#254#246#240#255#252#226#205
+#255#252#227#205#255#250#223#200#255#247#217#188#255#245#233#221#255#250#243
- +#235#255#251#248#243#255#202#131'S'#254#203#133'S'#219#255#247#240#222#255
- ,#231#213#222#253#231#214#222#253#230#212#222#252#228#208#222#228#187#147#255
+ ,#235#255#251#248#243#255#202#131'S'#254#203#133'S'#219#255#247#240#222#255
+ +#231#213#222#253#231#214#222#253#230#212#222#252#228#208#222#228#187#147#255
+#254#245#237#255#252#222#197#255#251#224#199#255#249#220#194#255#245#211#180
+#255#254#249#243#255#250#226#196#255#236#193#147#255#195'}H'#147#203#134'T'
+#219#255#247#242#222#254#231#213#222#254#231#213#222#253#229#209#222#250#224
@@ -3072,8 +3073,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#152#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152#255
+#127#191#228#255'i'#178#222#255'J'#155#218#255'D'#151#220#255'C'#150#220#255
+'B'#150#220#255'B'#149#220#255'A'#149#219#255'Q'#158#214#255'l'#178#222#255
- +' c'#152#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152
- ,#224'q'#179#219#254'~'#191#228#255'N'#157#223#255#181#238#253#255'u'#212#240
+ ,' c'#152#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152
+ +#224'q'#179#219#254'~'#191#228#255'N'#157#223#255#181#238#253#255'u'#212#240
+#255'u'#212#240#255#181#238#253#255'K'#155#222#255'n'#180#224#255'm'#179#223
+#249' c'#152#243#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'
+#152'2 c'#152#178' c'#152#255'7u'#164#255#182#239#254#255#128#219#243#255#128
@@ -3136,8 +3137,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+'Action'#7#13'ActionReplace'#7'Caption'#6#7'Replace'#7'OnClick'#7#20'ActionR'
+'eplaceExecute'#0#0#0#14'TReplaceDialog'#10'dlgReplace'#7'Options'#11#6'frDo'
+'wn'#10'frFindNext'#12'frHideUpDown'#0#6'OnFind'#7#14'dlgReplaceFind'#9'OnRe'
- +'place'#7#17'dlgReplaceReplace'#4'left'#3'`'#2#3'top'#2'h'#0#0#6'TTimer'#11
- ,'UpdateTimer'#8'Interval'#3#16''''#4'left'#3'`'#2#3'top'#3#144#0#0#0#6'TTime'
+ ,'place'#7#17'dlgReplaceReplace'#4'left'#3'`'#2#3'top'#2'h'#0#0#6'TTimer'#11
+ +'UpdateTimer'#8'Interval'#3#16''''#4'left'#3'`'#2#3'top'#3#144#0#0#0#6'TTime'
+'r'#10'MouseTimer'#8'Interval'#2'd'#7'OnTimer'#7#17'ChangeMouseStatus'#4'lef'
+'t'#3#192#1#3'top'#3#200#0#0#0#6'TTimer'#9'NewsTimer'#8'Interval'#3#244#1#7
+'OnTimer'#7#14'NewsTimerTimer'#4'left'#3#232#1#3'top'#3#200#0#0#0#0
diff --git a/Projects/SAMufasaGUI/testunit.pas b/Projects/SAMufasaGUI/testunit.pas
index ab8e0d4..1a4fc72 100644
--- a/Projects/SAMufasaGUI/testunit.pas
+++ b/Projects/SAMufasaGUI/testunit.pas
@@ -41,7 +41,7 @@ uses
SynExportHTML, SynEditKeyCmds, SynEditHighlighter,
SynEditMarkupHighAll, LMessages, Buttons,
stringutil,mufasatypesutil,mufasabase,
- about, framefunctionlist, ocr, updateform, simbasettings, pseventextension,
+ about, framefunctionlist, ocr, updateform, simbasettings, psextension, virtualextension,
extensionmanager;
const
@@ -102,6 +102,7 @@ type
MenuFile: TMenuItem;
MenuEdit: TMenuItem;
MenuHelp: TMenuItem;
+ MenuItemExtensions: TMenuItem;
MenuItemSettingsButton: TMenuItem;
MenuItemDivider10: TMenuItem;
MenuTools: TMenuItem;
@@ -251,6 +252,7 @@ type
procedure FunctionListChange(Sender: TObject; Node: TTreeNode);
procedure FunctionListEnter(Sender: TObject);
procedure FunctionListExit(Sender: TObject);
+ procedure MenuItemExtensionsClick(Sender: TObject);
procedure MenuItemHandbookClick(Sender: TObject);
procedure MenuItemColourHistoryClick(Sender: TObject);
procedure dlgReplaceFind(Sender: TObject);
@@ -397,6 +399,7 @@ uses
lclintf,
syncobjs, // for the critical sections
debugimage,
+ extensionmanagergui,
colourhistory,
math;
@@ -902,7 +905,7 @@ end;
procedure TForm1.CreateDefaultEnvironment;
var
- IncludePath,FontPath,PluginsPath : string;
+ IncludePath,FontPath,PluginsPath,extensionsPath : string;
begin
CreateSetting('Settings/Updater/CheckForUpdates','True');
CreateSetting('Settings/Updater/CheckEveryXMinutes','30');
@@ -949,6 +952,7 @@ begin
includePath:= CreateSetting('Settings/Includes/Path', ExpandFileName(MainDir+DS+'Includes' + DS));
fontPath := CreateSetting('Settings/Fonts/Path', ExpandFileName(MainDir+DS+ 'Fonts' + DS));
PluginsPath := CreateSetting('Settings/Plugins/Path', ExpandFileName(MainDir+ DS+ 'Plugins' + DS));
+ extensionsPath := CreateSetting('Settings/Extensions/Path',ExpandFileName(MainDir +DS + 'Extensions' + DS));
CreateSetting('LastConfig/MainForm/Position','');
CreateSetting('LastConfig/MainForm/State','Normal');
{$ifdef MSWindows}
@@ -961,15 +965,18 @@ begin
CreateDir(FontPath);
if not DirectoryExists(PluginsPath) then
CreateDir(PluginsPath);
+ if not DirectoryExists(extensionsPath) then
+ CreateDir(extensionsPath);
SettingsForm.SettingsTreeView.Items.GetFirstNode.Expand(false);
SettingsForm.SaveCurrent;
+ LoadFormSettings;
end;
procedure TForm1.LoadFormSettings;
var
str,str2 : string;
Data : TStringArray;
- i : integer;
+ i,ii : integer;
begin
str := LoadSettingDef('LastConfig/MainForm/Position','');
if str <> '' then
@@ -1009,6 +1016,18 @@ begin
else
ShowConsole(false);
{$endif}
+ str := LoadSettingDef('Settings/Extensions/Path',ExpandFileName(MainDir +DS + 'Extensions' + DS));
+ str2 := LoadSettingDef('Settings/Extensions/FileExtension','sex');
+ ExtManager.LoadPSExtensionsDir(str,str2);
+ str := LoadSettingDef('LastConfig/Extensions/EnabledExts','');
+ if str <> '' then
+ begin
+ data := Explode(';',str);
+ for i := 0 to high(data) do
+ for ii := 0 to ExtManager.Extensions.Count - 1 do
+ if data[i] = TVirtualSimbaExtension(ExtManager.Extensions[ii]).Filename then
+ TVirtualSimbaExtension(ExtManager.Extensions[ii]).Enabled := true;
+ end;
end;
procedure TForm1.SaveFormSettings;
@@ -1032,7 +1051,8 @@ begin
for i := 0 to high(data) do //First entry should be the last-opened
data[high(data) - i] := RecentFiles[i];
SetKeyValue('LastConfig/MainForm/RecentFiles',implode(';',data));
- end;
+ end else
+ SetKeyValue('LastConfig/MainForm/RecentFiles','');
if MenuItemFunctionList.Checked then
SetKeyValue('LastConfig/MainForm/FunctionListShown','True')
else
@@ -1043,6 +1063,18 @@ begin
else
SetKeyValue('LastConfig/Console/Visible','false');
{$endif}
+ if ExtManager.Extensions.Count > 0 then
+ begin
+ SetLength(data,0);
+ for i := 0 to ExtManager.Extensions.Count-1 do
+ if TVirtualSimbaExtension(ExtManager.Extensions[i]).Enabled then
+ begin
+ setlength(data,length(data)+1);
+ data[high(data)] := TVirtualSimbaExtension(ExtManager.Extensions[i]).FileName;
+ end;
+ SetKeyValue('LastConfig/Extensions/EnabledExts',Implode(';',data));
+ end else
+ SetKeyValue('LastConfig/Extensions/EnabledExts','');
SaveToXML(SimbaSettingsFile);
end;
end;
@@ -1572,6 +1604,11 @@ begin
// StatusBar.Panels[2].Text:= '';
end;
+procedure TForm1.MenuItemExtensionsClick(Sender: TObject);
+begin
+ ExtensionsForm.Show;
+end;
+
procedure TForm1.MenuItemHandbookClick(Sender: TObject);
begin
OpenURL('http://vila.villavu.com/mufasa/mufasa_ps_handbook/');
@@ -1667,6 +1704,8 @@ begin
TT_Console.Visible:= false;
{$endif}
InitmDebug;
+ ExtManager := TExtensionManager.Create;
+ ExtManager.StartDisabled:= True;
if FileExists(SimbaSettingsFile) then
begin
Application.CreateForm(TSettingsForm,SettingsForm);
@@ -1704,6 +1743,7 @@ begin
FirstRun := true;//Our next run is the first run.
HandleParameters;
TT_Update.Visible:= false;
+
end;
procedure TForm1.FormDestroy(Sender: TObject);
@@ -1722,6 +1762,7 @@ begin
SetLength(DebugStream, 0);
RecentFiles.Free;
DebugCriticalSection.Free;
+ ExtManager.free;
{$ifdef MSWindows}
if not UnRegisterHotkey(Self.Handle,0) then
mDebugLn('Unable to unregister ctrl + alt + s as global hotkey');
diff --git a/Projects/SAMufasaGUI/virtualextension.pas b/Projects/SAMufasaGUI/virtualextension.pas
index d41d92d..c286a65 100644
--- a/Projects/SAMufasaGUI/virtualextension.pas
+++ b/Projects/SAMufasaGUI/virtualextension.pas
@@ -8,18 +8,27 @@ uses
Classes, SysUtils;
type
+ { TVirtualSimbaExtension }
+
TVirtualSimbaExtension = class(TObject)
+ protected
+ FName: String;
+ FVersion : string;
+ FFilename : string;
+ FEnabled : boolean;
+ procedure SetEnabled(bool : boolean); virtual;
public
+ OnChange : TNotifyEvent;
{ Must be implemented }
function HookExists(HookName: String): Boolean; virtual; abstract;
{ No Custom Arguments just yet... }
- function ExecuteHook(HookName: String; fArgs: Array of Variant; out OutVariant): Integer; virtual; abstract;
- private
- FName: String;
-
- property GetName: String read Fname;
+ function ExecuteHook(HookName: String; fArgs: Array of Variant; out OutVariant : variant): Integer; virtual; abstract;
+ function GetName : string;
+ function GetVersion : String;
+ property Filename : string read FFilename write FFilename;
+ property Enabled : boolean read FEnabled write SetEnabled;
end;
@@ -33,7 +42,9 @@ type
ArgumentCount: Integer;
end;
-var
+const
+ SExt_ok = 0;
+ SExt_error = 1;
EventHooks: Array [0..7] of TEventHook =
( (HookName : 'onScriptCompile' ; ArgumentCount : 1),
(HookName : 'onScriptStart' ; ArgumentCount : 1),
@@ -46,5 +57,48 @@ var
implementation
+{ TVirtualSimbaExtension }
+
+procedure TVirtualSimbaExtension.SetEnabled(bool: boolean);
+begin
+ if assigned(OnChange) then
+ OnChange(self);
+ FEnabled:= bool;
+end;
+
+function TVirtualSimbaExtension.GetName: string;
+var
+ OutPut : Variant;
+begin
+ Result := '';
+ if FName <> '' then
+ Result := FName
+ else if self.HookExists('GetName') then
+ begin;
+ if ExecuteHook('GetName',[],OutPut) <> SExt_ok then
+ FName := ''
+ else
+ FName := OutPut;
+ result := FName;
+ end;
+end;
+
+function TVirtualSimbaExtension.GetVersion: String;
+var
+ OutPut : Variant;
+begin
+ Result := '';
+ if FVersion <> '' then
+ Result := FVersion
+ else if self.HookExists('GetVersion') then
+ begin;
+ if ExecuteHook('GetVersion',[],OutPut) <> SExt_ok then
+ FVersion := ''
+ else
+ FVersion := Output;
+ result := FVersion;
+ end;
+end;
+
end.
diff --git a/Units/MMLAddon/stringutil.pas b/Units/MMLAddon/stringutil.pas
index 9558571..4a22a96 100644
--- a/Units/MMLAddon/stringutil.pas
+++ b/Units/MMLAddon/stringutil.pas
@@ -20,6 +20,7 @@ function Implode(Glue: string;Pieces: TStringArray): string;
var
I, Len : integer;
begin
+ Result := '';
Len := high(Pieces);
if (Len < 0) then
exit;
diff --git a/Units/PascalScript/uPSR_menus.pas b/Units/PascalScript/uPSR_menus.pas
index 6e2600a..1920d16 100644
--- a/Units/PascalScript/uPSR_menus.pas
+++ b/Units/PascalScript/uPSR_menus.pas
@@ -441,7 +441,7 @@ begin
RegisterPropertyHelper(@TMENUITEMRADIOITEM_R,@TMENUITEMRADIOITEM_W,'RADIOITEM');
RegisterPropertyHelper(@TMENUITEMSHORTCUT_R,@TMENUITEMSHORTCUT_W,'SHORTCUT');
RegisterPropertyHelper(@TMENUITEMVISIBLE_R,@TMENUITEMVISIBLE_W,'VISIBLE');
- RegisterEventPropertyHelper(@TMENUITEMONCLICK_R,@TMENUITEMONCLICK_W,'ONCLICK');
+// RegisterEventPropertyHelper(@TMENUITEMONCLICK_R,@TMENUITEMONCLICK_W,'ONCLICK');
end;
end;