diff --git a/.gitattributes b/.gitattributes
index 51419715a8..f420ac4fdb 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1115,6 +1115,26 @@ examples/bitbutton.lpi svneol=native#text/plain
examples/bitbutton.pp svneol=native#text/pascal
examples/checkbox.lpi svneol=native#text/plain
examples/checkbox.pp svneol=native#text/pascal
+examples/cleandir/README.TXT svneol=native#text/plain
+examples/cleandir/cleandir.lpi svneol=native#text/plain
+examples/cleandir/cleandir.lpr svneol=native#text/plain
+examples/cleandir/cleandirs.lpi svneol=native#text/plain
+examples/cleandir/cleandirs.lpr svneol=native#text/plain
+examples/cleandir/confcleandirs.lpi svneol=native#text/plain
+examples/cleandir/confcleandirs.lpr svneol=native#text/plain
+examples/cleandir/dircleaner.pp svneol=native#text/plain
+examples/cleandir/frmlog.lfm svneol=native#text/plain
+examples/cleandir/frmlog.lrs svneol=native#text/plain
+examples/cleandir/frmlog.pp svneol=native#text/plain
+examples/cleandir/frmmain.lfm svneol=native#text/plain
+examples/cleandir/frmmain.lrs svneol=native#text/plain
+examples/cleandir/frmmain.pp svneol=native#text/plain
+examples/cleandir/svccleandirs.lfm svneol=native#text/plain
+examples/cleandir/svccleandirs.lrs svneol=native#text/plain
+examples/cleandir/svccleandirs.pp svneol=native#text/plain
+examples/cleandir/svcmap.lfm svneol=native#text/plain
+examples/cleandir/svcmap.lrs svneol=native#text/plain
+examples/cleandir/svcmap.pp svneol=native#text/plain
examples/codepageconverter/codepages.ini svneol=native#text/plain
examples/codepageconverter/filefind/filefind.lrs svneol=native#text/pascal
examples/codepageconverter/filefind/filefind.pas svneol=native#text/pascal
diff --git a/examples/cleandir/README.TXT b/examples/cleandir/README.TXT
new file mode 100644
index 0000000000..cf2a534d9d
--- /dev/null
+++ b/examples/cleandir/README.TXT
@@ -0,0 +1,107 @@
+This is the cleandirs demonstration program for Lazarus.
+
+It demonstrates 3 things:
+
+1. How to use services and the TEventLog component (cleandirs)
+2. How to use RTTI controls (confcleandirs)
+3. How to write a TCustomApplication descendent (cleandir)
+
+These are actually 3 programs:
+
+cleandir:
+=========
+
+A command-line tool. It will clean all directories according to
+the configuration file given. If no configuration file is specified,
+it will look for one in the standard user-specific and global locations.
+
+cleandirs:
+==========
+a service application (daemon) that can be installed and run as a service.
+It performs the same action as the cleandir program, at a given time of
+the day. It cleans only standard directories specified in the configuration
+file.
+
+confcleandirs:
+==============
+
+A GUI program that can be created to create a configuration file
+for the cleandirs and cleandir program. it can be used to (test)
+run the algorithm as well, and shows the log in a window.
+
+The configuration works as follows:
+
+Directories:
+------------
+ Directories that should be cleaned.
+ Each directory can be enabled or disabled.
+ If the recurse flag is set, subdirectories will be checked as well.
+
+Locations:
+----------
+ Locations where files should be moved to.
+ The tool can create subdirectories of the given location, using
+ file extension, year, month, day, date, hour min and time:
+ for instance extension, year, month will create a subdirectory
+ doc/2007/10
+ if a file with extension .doc is moved to this location in october of 2007.
+
+Actions:
+--------
+ A set of actions to be performed on the files:
+
+Location:
+ File will be copied to the location.
+ This is the name of one of the locations defined above.
+Extensions:
+ A space separated list of extensions to apply the action on.
+ The extensions should not have the initial dot character.
+ e.g.:
+ zip gz z bz2 rar
+ will match all archives
+Casesensitive:
+ Are extensions case-sensitive ?
+Delete:
+ File will be deleted after it was succesfully copied.
+Compress:
+ File will be compressed (like gzip).
+MincompressSize:
+ File will only be compressed if it's size is larger than the value indicated here.
+
+Global options:
+---------------
+LogOnly:
+ Only log the actions, do not actually execute them.
+ (this can only be set in code, it is set automatically when testing)
+
+Log All Files:
+ Check if you want the tool to show all files it encounters while
+ checking the directories
+
+All Actions:
+ By default, only the first matching action is executed. If this
+ option is set, then all actions that match the file are executed.
+
+ If one of the actions has the "Delete" flag set, the file will be
+ deleted only after all actions were tried.
+
+Stop On Error:
+ No further files will be treated.
+ Default is to continue with the next file in case of error.
+
+The service can be installed on windows with
+cleandirs --install --config=c:\path\to\config\file.cfg
+it can then be controlled from the service manager.
+
+Running on linux happens wih
+cleandirs -r -c path/to/config/file.cfg
+
+If no config file is specified, a file named CleanDirs.cfg (case sensitive)
+is searched
+- in /etc or in ~/.config/ for unix
+- in c:\documents and settings\username\local settings\
+ or next to the application binary in Windows.
+
+Enjoy !
+
+Michael.
diff --git a/examples/cleandir/cleandir.lpi b/examples/cleandir/cleandir.lpi
new file mode 100644
index 0000000000..a95679ff1b
--- /dev/null
+++ b/examples/cleandir/cleandir.lpi
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/cleandir/cleandir.lpr b/examples/cleandir/cleandir.lpr
new file mode 100644
index 0000000000..25a56da78e
--- /dev/null
+++ b/examples/cleandir/cleandir.lpr
@@ -0,0 +1,200 @@
+{ Directory cleaner - command-line interface
+
+ Copyright (C) 2007 Michael Van Canneyt michael@freepascal.org
+
+ This source is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ details.
+
+ A copy of the GNU General Public License is available on the World Wide Web
+ at . You can also obtain it by writing
+ to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ MA 02111-1307, USA.
+}
+program cleandir;
+
+{$mode objfpc}{$H+}
+
+uses
+ Classes,
+ SysUtils,
+ CustApp,
+ dircleaner;
+
+ResourceString
+ SErrNoConfig = 'No configuration file found.';
+ SErrInvalidConfig = 'Configuration file "%s" does not exist.';
+ SErrNoDirectories = 'No directories to clean';
+ SUsage0 = 'Usage: %s [options] directory1 ... directoryN';
+ SUsage1 = 'Where options is one or more of:';
+ SUsageh = '-h --help This help message';
+ SUsagec = '-c --config=file Filename for configuration data';
+ SUsagev = '-v --verbose Log more messages';
+ SUsagel = '-l --logonly Only log actions, do not execute commands';
+ SUsageq = '-q --quiet Do not log actions (disables -l)';
+ SUsages = '-s --stoponerror Stop at the first error.';
+ SUsager = '-r --recurse Recurse directories specified on command-line';
+ SUsaged = '-d --standarddirs Clean standard dirs from configuration file';
+
+
+
+
+Type
+
+ { TCleanDirs }
+ TRunMode = (rmHelp,rmExecute);
+
+ TCleanDir = Class (TCustomApplication)
+ private
+ FCleaner: TCleanDirs;
+ Function ProcessCommandLine : TRunMode;
+ Public
+ Constructor Create(AOwner : TComponent); override;
+ Procedure DoRun; override;
+ Procedure Usage;
+ Procedure OnLog(Msg : String);
+ Property Cleaner : TCleanDirs Read FCleaner;
+ end;
+
+{ TCleanDir }
+
+Var
+ Application : TCleanDir;
+
+function TCleanDir.ProcessCommandLine: TRunMode;
+
+Const
+ OptCount = 8;
+ Opts : Array[1..OptCount] of string =
+ ('help','config','verbose','logonly','quiet',
+ 'stoponerror','recurse','standarddirs');
+ OptChars = 'hcvlqsrd';
+
+Var
+ FN : String;
+ OptL,Dirs : TStrings;
+ I : integer;
+
+begin
+ Result:=rmHelp;
+ If HasOption('h','help') then
+ Exit;
+ Dirs:=TStringList.Create;
+ try
+ OptL:=TStringList.Create;
+ try
+ For I:=1 to OptCount do
+ OptL.Add(Opts[i]);
+ FN:=CheckOptions(OptChars,OptL,Nil,Dirs);
+ finally
+ OptL.Free;
+ end;
+ If (FN<>'') then
+ begin
+ Writeln(StdErr,FN);
+ Exit;
+ end;
+ FN:='';
+ If HasOption('c','config') then
+ begin
+ FN:=Self.GetOptionValue('c','config');
+ If Not FileExists(FN) then
+ begin
+ Writeln(StdErr,format(SErrInvalidConfig,[FN]));
+ Exit;
+ end;
+ end
+ else
+ begin
+ FN:=GetAppConfigFile(false,false);
+ If Not FileExists(FN) then
+ begin
+ FN:=GetAppConfigFile(True,false);
+ If Not FileExists(FN) then
+ FN:='';
+ end;
+ If (FN='') then
+ begin
+ Writeln(StdErr,SErrNoConfig);
+ Exit;
+ end;
+ end;
+ FCleaner.LoadFromFile(FN);
+ If Not HasOption('q','quiet') then
+ begin
+ FCleaner.OnLog:=@Self.OnLog;
+ FCleaner.LogAllFiles:=HasOption('v','verbose');
+ FCleaner.LogOnly:=HasOption('l','logonly');
+ end;
+ If Hasoption('s','stoponerror') then
+ FCleaner.StopOnError:=True;
+ if Not HasOption('d','standarddirs') then
+ FCleaner.Directories.Clear;
+ If (Dirs.Count>0) then
+ begin
+ For I:=0 to Dirs.Count-1 do
+ With FCleaner.Directories.AddDirectory do
+ begin
+ Path:=Dirs[i];
+ Enabled:=True;
+ Recurse:=HasOption('r','recurse');
+ end;
+ end;
+ If (FCleaner.Directories.Count=0) then
+ Writeln(StdErr,SErrNoDirectories)
+ else
+ Result:=rmExecute;
+ Finally
+ Dirs.Free;
+ end;
+end;
+
+constructor TCleanDir.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FCleaner:=TCleanDirs.Create(Self);
+ StopOnException:=True;
+end;
+
+procedure TCleanDir.DoRun;
+begin
+ Case ProcessCommandLine of
+ rmHelp : Usage;
+ rmExecute : FCleaner.Execute;
+ end;
+ Terminate;
+end;
+
+procedure TCleanDir.Usage;
+begin
+ Writeln(Format(SUsage0,[ExtractFileName(paramstr(0))]));
+ Writeln(SUsage1);
+ Writeln(SUsagec);
+ Writeln(SUsaged);
+ Writeln(SUsageh);
+ Writeln(SUsagel);
+ Writeln(SUsageq);
+ Writeln(SUsager);
+ Writeln(SUsages);
+ Writeln(SUsagev);
+end;
+
+procedure TCleanDir.OnLog(Msg: String);
+begin
+ Writeln(Msg);
+end;
+
+begin
+ OnGetApplicationName:=@CleanDirApp;
+ Application:=TCleandir.Create(nil);
+ Application.Title:='cleandisk';
+ Application.Run;
+ Application.Free;
+end.
+
diff --git a/examples/cleandir/cleandirs.lpi b/examples/cleandir/cleandirs.lpi
new file mode 100644
index 0000000000..a22559c2b3
--- /dev/null
+++ b/examples/cleandir/cleandirs.lpi
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/cleandir/cleandirs.lpr b/examples/cleandir/cleandirs.lpr
new file mode 100644
index 0000000000..9518a921fe
--- /dev/null
+++ b/examples/cleandir/cleandirs.lpr
@@ -0,0 +1,37 @@
+{ Directory cleaning service
+
+ Copyright (C) 2007 Michael Van Canneyt michael@freepascal.org
+
+ This source is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ details.
+
+ A copy of the GNU General Public License is available on the World Wide Web
+ at . You can also obtain it by writing
+ to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ MA 02111-1307, USA.
+}
+
+Program cleandirs;
+
+Uses
+{$IFDEF UNIX}{$IFDEF UseCThreads}
+ cthreads,
+{$ENDIF}{$ENDIF}
+ lazdaemon,
+ daemonapp,
+ sysutils
+ { add your units here }, svcmap, svccleandirs, dircleaner;
+
+begin
+ OnGetApplicationName:=@CleanDirApp;
+ Application.Title:='Directory Cleaning service';
+ Application.Initialize;
+ Application.Run;
+end.
diff --git a/examples/cleandir/confcleandirs.lpi b/examples/cleandir/confcleandirs.lpi
new file mode 100644
index 0000000000..fbc884d294
--- /dev/null
+++ b/examples/cleandir/confcleandirs.lpi
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/cleandir/confcleandirs.lpr b/examples/cleandir/confcleandirs.lpr
new file mode 100644
index 0000000000..414b4ab3b5
--- /dev/null
+++ b/examples/cleandir/confcleandirs.lpr
@@ -0,0 +1,24 @@
+program confcleandirs;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$IFDEF UNIX}{$IFDEF UseCThreads}
+ cthreads,
+ {$ENDIF}{$ENDIF}
+ Interfaces, // this includes the LCL widgetset
+ Forms
+ { add your units here },
+ sysutils,
+ dircleaner, frmmain, frmlog;
+{$ifdef win32}
+{$R manifest.res}
+{$R confcleandirs.res}
+{$endif}
+begin
+ Application.Title:='Configure directory cleaner';
+ Application.Initialize;
+ Application.CreateForm(TMainForm, MainForm);
+ Application.Run;
+end.
+
diff --git a/examples/cleandir/dircleaner.pp b/examples/cleandir/dircleaner.pp
new file mode 100644
index 0000000000..1669202cd2
--- /dev/null
+++ b/examples/cleandir/dircleaner.pp
@@ -0,0 +1,1077 @@
+{ Directory cleaning component
+
+ Copyright (C) 2007 Michael Van Canneyt
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version with the following modification:
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent modules,and
+ to copy and distribute the resulting executable under terms of your choice,
+ provided that you also meet, for each linked independent module, the terms
+ and conditions of the license of that module. An independent module is a
+ module which is not derived from or based on this library. If you modify
+ this library, you may extend this exception to your version of the library,
+ but you are not obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
+ for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+}
+unit dircleaner;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, inicol, inifiles;
+
+Type
+ TSubDir = (sdExtension,sdYear,sdMonth,sdDay,sdDate,sdHour,sdMin,sdTime);
+ TSubDirs = Set of TSubDir;
+
+ { TLocation }
+
+ TLocation = Class(TNamedIniCollectionItem)
+ private
+ FBasePath: String;
+ FSubDirs: TSubDirs;
+ procedure SetSubDirs(const AValue: TSubDirs);
+ Public
+ Function GetLocation(AExtension : String;ATime : TDateTime) : String;
+ Procedure Assign(Source : TPersistent); override;
+ Procedure SaveToIni(Ini: TCustomInifile; Section : String); override;
+ Procedure LoadFromIni(Ini: TCustomInifile; Section : String); override;
+ Published
+ Property BasePath : String Read FBasePath Write FBasePath;
+ Property SubDirs : TSubDirs Read FSubDirs Write SetSubDirs;
+ end;
+
+ { TLocations }
+
+ TLocations = Class(TNamedIniCollection)
+ private
+ function GetLocation(Index : Integer): TLocation;
+ procedure SetLocation(Index : Integer; const AValue: TLocation);
+ Public
+ Constructor Create;
+ Function AddLocation : TLocation;
+ Function LocationByName(AName : String) : TLocation;
+ Property Locations [Index : Integer] : TLocation Read GetLocation Write SetLocation; Default;
+ end;
+
+ { TFileAction }
+
+ TFileAction = Class(TNamedIniCollectionItem)
+ private
+ FCaseSensitive: Boolean;
+ FCompress: Boolean;
+ FDelete: Boolean;
+ FExtensions: String;
+ FLocation: TLocation;
+ FLocationName: String;
+ FMinCompressSize: Integer;
+ FWorkExt : String;
+ Public
+ Procedure Prepare;
+ Function FileNameFits(AFileName : String) : Boolean;
+ Property Location : TLocation Read FLocation Write FLocation;
+ Procedure SaveToIni(Ini: TCustomInifile; Section : String); override;
+ Procedure LoadFromIni(Ini: TCustomInifile; Section : String); override;
+ Procedure Assign(Source : TPersistent); override;
+ Published
+ Property LocationName : String Read FLocationName Write FLocationName;
+ Property Extensions : String Read FExtensions Write FExtensions;
+ Property Delete : Boolean Read FDelete Write FDelete;
+ Property Compress : Boolean Read FCompress write FCompress;
+ Property CaseSensitive : Boolean Read FCaseSensitive Write FCaseSensitive;
+ Property MinCompressSize : Integer Read FMinCompressSize Write FMinCompressSize; // In Kb.
+ end;
+
+ { TFileActions }
+
+ TFileActions = Class(TNamedIniCollection)
+ private
+ function GetAction(Index : Integer): TFileAction;
+ procedure SetAction(Index : Integer; const AValue: TFileAction);
+ Public
+ Constructor Create;
+ Procedure Prepare;
+ Function AddFileAction : TFileAction;
+ Procedure BindLocations(Locations : TLocations);
+ Property FileActions [Index : Integer] : TFileAction Read GetAction Write SetAction; Default;
+ end;
+
+ { TDirectory }
+
+ TDirectory = Class(TNamedIniCollectionItem)
+ private
+ FEnabled: Boolean;
+ FPath: String;
+ FRecurse: Boolean;
+ Public
+ Procedure Assign(Source : TPersistent); override;
+ Procedure SaveToIni(Ini: TCustomInifile; Section : String); override;
+ Procedure LoadFromIni(Ini: TCustomInifile; Section : String); override;
+ Published
+ Property Path : String Read FPath Write FPath;
+ Property Enabled : Boolean Read FEnabled Write FEnabled;
+ Property Recurse : Boolean Read FRecurse Write FRecurse;
+ end;
+
+
+ { TDirectories }
+
+ TDirectories = Class(TNamedIniCollection)
+ private
+ function GetDir(Index : Integer): TDirectory;
+ procedure SetDir(Index : Integer; const AValue: TDirectory);
+ Public
+ Constructor Create;
+ Function AddDirectory : TDirectory;
+ Property Directories [Index : Integer] : TDirectory Read GetDir Write SetDir; Default;
+ end;
+
+ { TCleanDirs }
+ TLogEvent = Procedure(Msg : String) of Object;
+
+ TScheduleMode = (smDaily,smHourly);
+
+ TScheduleDay = (sdMonday,sdTuesDay,sdWednesday,sdThursDay,sdFriday,sdSaturday,sdSunday);
+ TScheduleDays = set of TScheduleDay;
+
+ TCleanDirs = Class(TComponent)
+ private
+ FAllFileActions: Boolean;
+ FCancelled: Boolean;
+ FConfigFile: String;
+ FDailyAt: TDateTime;
+ FDirectories: TDirectories;
+ FEndTime: TDateTime;
+ FFileActions: TFileActions;
+ FHourlyAt: Integer;
+ FLocations: TLocations;
+ FLogAllFiles: Boolean;
+ FlogEvent: TLogEvent;
+ FLogOnly: Boolean;
+ FScheduleDays: TScheduleDays;
+ FScheduleMode: TScheduleMode;
+ FStopOnError: Boolean;
+ FCreatedDirs : TStrings;
+ FStartTime : TDateTime;
+ function NeedDirectory(D: String): Boolean;
+ procedure SetDirectories(const AValue: TDirectories);
+ procedure SetFileActions(const AValue: TFileActions);
+ procedure SetLocations(const AValue: TLocations);
+ Protected
+ Procedure LogAction(Const Msg : String);
+ Procedure LogAction(Const Fmt: String; Args : Array of const);
+ Function CreateLocation(L : TLocation; AExtension : String) : boolean; virtual;
+ Procedure DoCleanDir(Dir : String; Recurse : Boolean); virtual;
+ function DoCompressFile(const AFileName, ADestDir: String): Boolean;
+ function DoCopyFile(const AFileName, ADestDir: String): Boolean;
+ function DoDeleteFile(const AFileName: String): Boolean; virtual; // Returns true
+ function DoFileAction(F: TFileAction; const AFileName: String): Boolean; virtual;
+ Property CreatedDirs : TStrings Read FCreatedDirs;
+ Public
+ Constructor Create(AOwner : TComponent); override;
+ Destructor Destroy; override;
+ Function CleanFile(const AFileName: String): Boolean;
+ procedure CleanDirectory(D: TDirectory);
+ Procedure Execute;
+ Procedure Cancel;
+ Procedure LoadFromIni(Ini : TCustomInifile); virtual;
+ Procedure SaveToIni(Ini : TCustomInifile); virtual;
+ Procedure LoadFromFile(AFileName : String);
+ Procedure SaveToFile(AFileName : String);
+ Property StartTime : TDateTime Read FStartTime;
+ Property EndTime : TDateTime Read FEndTime;
+ Property ConfigFile : String Read FConfigFile;
+ Property Cancelled : Boolean Read FCancelled;
+ Published
+ Property Directories : TDirectories Read FDirectories Write SetDirectories;
+ Property FileActions : TFileActions Read FFileActions Write SetFileActions;
+ Property Locations : TLocations Read FLocations Write SetLocations;
+ Property LogOnly : Boolean Read FLogOnly Write FLogOnly;
+ Property OnLog : TLogEvent Read FlogEvent Write FLogEvent;
+ Property StopOnError : Boolean Read FStopOnError Write FStopOnError;
+ Property AllFileActions : Boolean Read FAllFileActions Write FAllFileActions;
+ Property LogAllFiles : Boolean Read FLogAllFiles Write FLogAllFiles;
+ // Scheduling
+ Property ScheduleMode : TScheduleMode Read FScheduleMode Write FScheduleMode;
+ Property ScheduleDays : TScheduleDays Read FScheduleDays Write FScheduleDays;
+ Property DailyAt : TDateTime Read FDailyAt Write FDailyAt;
+ Property HourlyAt : Integer Read FHourlyAt Write FHourlyAt;
+ end;
+
+ EDiskClean = Class(Exception);
+
+// Auxiliary functions
+Function UserDir : String;
+Function CleanDirApp : String; // Can be used to force single app name
+
+Var
+ LogOnly : Boolean;
+ LogEvent : TLogEvent;
+
+implementation
+
+uses
+{$ifdef mswindows}
+ shfolder,
+{$endif}
+ zstream,
+ typinfo;
+
+ResourceString
+ SCleanDirApp = 'CleanDirs';
+ SNewDirectory = 'New directory';
+ SNewLocation = 'New Location';
+ SNewFileAction = 'New Action';
+ SCreatingDir = 'Creating directory "%s".';
+ SErrCreateDir = 'Could not create directory "%s".';
+ SErrUnknownLocation = 'Unknown location : "%s"';
+ SSkippingDir = 'Skipping disabled directory "%s": %s';
+ SNoSuchDir = 'Directory does not exist: %s';
+ SCleaningDir = 'Cleaning directory: %s';
+ SDeleteFailed = 'Failed to delete file: %s';
+ SDeletingFile = 'Deleting file: %s';
+ SCopyFailed = 'Failed to copy file "%s" to "%s": %s';
+ SCopyingFile = 'Copying file "%s" to directory: %s';
+ SCompressingFile = 'Compressing file %s to directory: %s';
+ SCompressFailed = 'Failed to compress file "%s" to "%s": %s';
+ SUsercancelled = 'User cancelled';
+ SConsideringFile = 'Considering file: %s';
+ SFileFitsAction = 'File %s fits action %s';
+
+{ ---------------------------------------------------------------------
+ Auxiliary functions
+ ---------------------------------------------------------------------}
+
+Function UserDir : String;
+
+{$ifdef mswindows}
+Var
+ PATH : Array[0..MAX_PATH] of char;
+{$endif}
+
+begin
+{$ifdef mswindows}
+ Path[0]:=#0;
+ SHGetFolderPath(0,CSIDL_PERSONAL,0,@PATH);
+ Result:=StrPas(Path);
+{$else}
+ Result:=GetEnvironmentVariable('HOME');
+{$endif}
+end;
+
+{ TLocation }
+
+
+procedure TLocation.SetSubDirs(const AValue: TSubDirs);
+
+Var
+ V : TSubDirs;
+
+begin
+ V:=AValue;
+ If (sdDate in V) then
+ V:=V-[sdYear,sdMonth,sdDay];
+ If (sdTime in AValue) then
+ V:=V-[sdHour,sdMin];
+ FSubDirs:=V;
+end;
+
+
+function TLocation.GetLocation(AExtension: String;ATime : TDateTime): String;
+
+begin
+ Result:=IncludeTrailingPathDelimiter(BasePath);
+ If (sdExtension in SubDirs) then
+ begin
+ If (Length(AExtension)>0) then
+ If AExtension[1]='.' then
+ Delete(AExtension,1,1);
+ Result:=Result+AExtension+PathDelim;
+ end;
+ if (sdDate in SubDirs) then
+ Result:=Result+FormatDateTime('yyyy-mm-dd',ATime)+PathDelim
+ else
+ begin
+ if (sdYear in SubDirs) then
+ Result:=Result+FormatDateTime('yyyy',ATime)+PathDelim;
+ if (sdMonth in SubDirs) then
+ Result:=Result+FormatDateTime('mm',ATime)+PathDelim;
+ if (sdDay in SubDirs) then
+ Result:=Result+FormatDateTime('dd',ATime)+PathDelim;
+ end;
+ if (sdTime in SubDirs) then
+ Result:=Result+FormatDateTime('hh-nn',ATime)+PathDelim
+ else
+ begin
+ if (sdHour in SubDirs) then
+ Result:=Result+FormatDateTime('hh',ATime)+PathDelim;
+ if (sdMin in SubDirs) then
+ Result:=Result+FormatDateTime('nn',ATime)+PathDelim;
+ end;
+end;
+
+procedure TLocation.Assign(Source: TPersistent);
+
+Var
+ L : TLocation;
+
+begin
+ if (Source is TLocation) then
+ begin
+ L:=TLocation(Source);
+ Name:=L.Name;
+ BasePath:=L.BasePath;
+ SubDirs:=L.SubDirs;
+ end
+ else
+ inherited Assign(Source);
+end;
+
+procedure TLocation.SaveToIni(Ini: TCustomInifile; Section: String);
+
+Var
+ S : String;
+
+begin
+ With Ini do
+ begin
+ WriteString(Section,'BasePath',BasePath);
+ S:=SetToString(FindPropInfo(Self,'Subdirs'),Integer(SubDirs));
+ WriteString(Section,'Subdirs',S);
+ end;
+end;
+
+procedure TLocation.LoadFromIni(Ini: TCustomInifile; Section: String);
+
+Var
+ S : String;
+ P : PPropInfo;
+
+begin
+ With Ini do
+ begin
+ BasePath:=ReadString(Section,'BasePath',BasePath);
+ P:=FindPropInfo(Self,'Subdirs');
+ S:=SetToString(P,Integer(SubDirs));
+ S:=ReadString(Section,'Subdirs',S);
+ SubDirs:=TSubDirs(StringToSet(P,S));
+ end;
+end;
+
+{ TLocations }
+
+function TLocations.GetLocation(Index : Integer): TLocation;
+begin
+ Result:=TLocation(Items[Index]);
+end;
+
+procedure TLocations.SetLocation(Index : Integer; const AValue: TLocation);
+begin
+ Items[Index]:=AValue;
+end;
+
+constructor TLocations.Create;
+begin
+ Inherited Create(TLocation);
+ FPrefix:='Location';
+ FSectionPrefix:='Location';
+end;
+
+function TLocations.AddLocation: TLocation;
+
+Var
+ I : Integer;
+ N : String;
+
+begin
+ Result:=Add as TLocation;
+ I:=1;
+ N:=SNewLocation;
+ While Self.IndexOfName(N)<>-1 do
+ begin
+ Inc(I);
+ N:=SNewLocation+IntToStr(I);
+ end;
+ Result.Name:=N;
+end;
+
+function TLocations.LocationByName(AName: String): TLocation;
+begin
+ Result:=TLocation(FindByName(AName));
+ If (Result=Nil) then
+ Raise EDiskClean.CreateFmt(SErrUnknownLocation,[AName]);
+end;
+
+{ TFileAction }
+
+
+procedure TFileAction.Prepare;
+begin
+ FWorkExt:=' '+FExtensions+' ';
+ If Not CaseSensitive then
+ FWorkExt:=UpperCase(FWorkExt);
+end;
+
+function TFileAction.FileNameFits(AFileName: String): Boolean;
+
+Var
+ Ext : String;
+
+begin
+ Ext:=ExtractFileExt(AFileName);
+ system.Delete(Ext,1,1);
+ if Not CaseSensitive then
+ Ext:=UpperCase(Ext);
+ FileNameFits:=Pos(Ext,FWorkExt)<>0;
+end;
+
+procedure TFileAction.SaveToIni(Ini: TCustomInifile; Section: String);
+begin
+ With Ini do
+ begin
+ WriteString(Section,'Location',LocationName);
+ WriteString(Section,'Extensions',Extensions);
+ WriteBool(Section,'Delete',Delete);
+ WriteBool(Section,'Compress',Compress);
+ WriteBool(Section,'CaseSensitive',CaseSensitive);
+ WriteInteger(Section,'MinCompressSize',MinCompressSize);
+ end;
+end;
+
+procedure TFileAction.LoadFromIni(Ini: TCustomInifile; Section: String);
+begin
+ With Ini do
+ begin
+ LocationName:=ReadString(Section,'Location',LocationName);
+ Extensions:=ReadString(Section,'Extensions',Extensions);
+ Delete:=ReadBool(Section,'Delete',Delete);
+ Compress:=ReadBool(Section,'Compress',Compress);
+ CaseSensitive:=ReadBool(Section,'CaseSensitive',CaseSensitive);
+ MinCompressSize:=ReadInteger(Section,'MinCompressSize',MinCompressSize);
+ end;
+end;
+
+procedure TFileAction.Assign(Source: TPersistent);
+
+Var
+ A : TFileAction;
+
+begin
+ if (Source is TFileAction) then
+ begin
+ A:=TFileAction(Source);
+ LocationName:=A.LocationName;
+ Location:=A.Location;
+ Extensions:=A.Extensions;
+ Delete:=A.Delete;
+ Compress:=A.Compress;
+ CaseSensitive:=A.CaseSensitive;
+ MinCompressSize:=A.MinCompressSize;
+ end
+ else
+ inherited Assign(Source);
+end;
+
+{ TFileActions }
+
+function TFileActions.GetAction(Index : Integer): TFileAction;
+begin
+ Result:=TFileAction(Items[Index]);
+end;
+
+procedure TFileActions.SetAction(Index : Integer; const AValue: TFileAction);
+begin
+ Items[Index]:=AValue;
+end;
+
+constructor TFileActions.Create;
+begin
+ Inherited Create(TFileAction);
+ FPrefix:='Action';
+ FSectionPrefix:='Action';
+end;
+
+procedure TFileActions.Prepare;
+
+Var
+ I : Integer;
+
+begin
+ For I:=0 to Count-1 do
+ GetAction(I).Prepare;
+end;
+
+function TFileActions.AddFileAction: TFileAction;
+
+Var
+ I : Integer;
+ N : String;
+
+begin
+ Result:=Add as TFileAction;
+ I:=1;
+ N:=SNewFileAction;
+ While Self.IndexOfName(N)<>-1 do
+ begin
+ Inc(I);
+ N:=SNewFileAction+IntToStr(I);
+ end;
+ Result.Name:=N;
+end;
+
+procedure TFileActions.BindLocations(Locations: TLocations);
+
+Var
+ I : Integer;
+ A : TFileAction;
+
+begin
+ For I:=0 to Count-1 do
+ begin
+ A:=GetAction(I);
+ If (A.LocationName<>'') then
+ A.Location:=Locations.LocationByName(A.LocationName);
+ end;
+end;
+
+{ TDirectory }
+
+procedure TDirectory.Assign(Source: TPersistent);
+
+Var
+ D : TDirectory;
+
+begin
+ If (Source is TDirectory) then
+ begin
+ D:=TDirectory(Source);
+ Path:=D.Path;
+ Enabled:=D.Enabled;
+ Recurse:=D.Recurse;
+ end
+ else
+ inherited Assign(Source);
+end;
+
+procedure TDirectory.SaveToIni(Ini: TCustomInifile; Section: String);
+begin
+ With Ini do
+ begin
+ WriteString(Section,'Path',Path);
+ WriteBool(Section,'Enabled',Enabled);
+ WriteBool(Section,'Recurse',Recurse);
+ end;
+end;
+
+procedure TDirectory.LoadFromIni(Ini: TCustomInifile; Section: String);
+begin
+ With Ini do
+ begin
+ Path:=ReadString(Section,'Path',Path);
+ Enabled:=ReadBool(Section,'Enabled',Enabled);
+ recurse:=ReadBool(Section,'Recurse',Recurse);
+ end;
+end;
+
+{ TDirectories }
+
+function TDirectories.GetDir(Index : Integer): TDirectory;
+begin
+ Result:=TDirectory(Items[Index])
+end;
+
+procedure TDirectories.SetDir(Index : Integer; const AValue: TDirectory);
+begin
+ Items[Index]:=AVAlue;
+end;
+
+constructor TDirectories.Create;
+begin
+ FPrefix:='Directory';
+ FSectionPrefix:='Directory';
+ Inherited Create(TDirectory);
+end;
+
+function TDirectories.AddDirectory: TDirectory;
+
+Var
+ I : Integer;
+ N : String;
+
+begin
+ Result:=Add as TDirectory;
+ I:=1;
+ N:=SNewDirectory;
+ While Self.IndexOfName(N)<>-1 do
+ begin
+ Inc(I);
+ N:=SNewDirectory+IntToStr(I);
+ end;
+ Result.Name:=N;
+end;
+
+{ TCleanDirs }
+
+procedure TCleanDirs.SetDirectories(const AValue: TDirectories);
+begin
+ if FDirectories=AValue then
+ exit;
+ If AValue=Nil then
+ FDirectories.Clear
+ else
+ FDirectories.Assign(AValue);
+end;
+
+procedure TCleanDirs.SetFileActions(const AValue: TFileActions);
+begin
+ if FFileActions=AValue then
+ exit;
+ if (AValue=Nil) then
+ FFileActions.Clear
+ else
+ FFileActions.Assign(AValue);
+end;
+
+procedure TCleanDirs.SetLocations(const AValue: TLocations);
+begin
+ if FLocations=AValue then exit;
+ If (AValue=Nil) then
+ FLocations.Clear
+ else
+ FLocations.Assign(AValue);
+end;
+
+Function TCleanDirs.NeedDirectory(D : String) : Boolean;
+
+Var
+ L : TStringList;
+
+begin
+ Result:=Not DirectoryExists(D);
+ If Result and LogOnly then
+ begin
+ If (FCreatedDirs=Nil) then
+ begin
+ L:=TStringList.Create;
+ L.Sorted:=True;
+ FCreatedDirs:=L;
+ end;
+ Result:=FCreatedDirs.IndexOf(D)=-1;
+ end;
+end;
+
+Function TCleanDirs.CreateLocation(L: TLocation; AExtension: String) : Boolean;
+
+Var
+ D,Msg : String;
+
+begin
+ if Cancelled then
+ Exit;
+ Result:=True;
+ D:=L.GetLocation(AExtension,FStartTime);
+ If NeedDirectory(D) then
+ begin
+ LogAction(SCreatingDir,[D]);
+ If LogOnly then
+ FCreatedDirs.Add(D)
+ else
+ begin
+ Result:=ForceDirectories(D);
+ If Not Result then
+ begin
+ Msg:=Format(SErrCreateDir,[D]);
+ LogAction(Msg);
+ if StopOnError then
+ Raise EDiskClean.Create(Msg)
+ end;
+ end;
+ end;
+end;
+
+Function TCleanDirs.DoDeleteFile(Const AFileName : String) : Boolean;
+
+Var
+ Msg : String;
+
+begin
+ LogAction(SDeletingFile,[AFileName]);
+ if Cancelled then
+ Exit;
+ Result:=LogOnly;
+ If Result then
+ Exit;
+ Result:=DeleteFile(AFileName);
+ If Not Result then
+ begin
+ Msg:=Format(SDeleteFailed,[AFileName]);
+ LogAction(Msg);
+ If StopOnError then
+ Raise EDiskClean.Create(Msg);
+ end;
+end;
+
+Function TCleanDirs.DoCompressFile(Const AFileName,ADestDir : String) : Boolean;
+
+Var
+ DestFile : String;
+ F1 : TFileStream;
+ F2 : TGZFileStream;
+
+begin
+ LogAction(SCompressingFile,[AFileName,ADestDir]);
+ if Cancelled then
+ Exit;
+ Result:=LogOnly;
+ If Result then
+ Exit;
+ DestFile:=IncludeTrailingPathDelimiter(ADestDir)+ExtractFileName(AFileName)+'.gz';
+ Try
+ F1:=TFileStream.Create(AFileName,fmOpenRead);
+ Try
+ F2:=TGZFileStream.Create(DestFile,gzOpenWrite);
+ Try
+ F2.CopyFrom(F1,0);
+ Finally
+ F2.Free;
+ end;
+ finally
+ F1.Free;
+ end;
+ Result:=True;
+ except
+ On E : Exception do
+ begin
+ If StopOnError then
+ Raise
+ Else
+ LogAction(SCompressFailed,[AFileName,ADestDir,E.Message]);
+ end;
+ end;
+end;
+
+Function TCleanDirs.DoCopyFile(Const AFileName,ADestDir : String) : Boolean;
+
+Var
+ DestFile : String;
+ F1,F2 : TFileStream;
+
+begin
+ LogAction(SCopyingFile,[AFileName,ADestDir]);
+ if Cancelled then
+ Exit;
+ Result:=LogOnly;
+ If Result then
+ Exit;
+ DestFile:=IncludeTrailingPathDelimiter(ADestDir)+ExtractFileName(AFileName);
+ Try
+ F1:=TFileStream.Create(AFileName,fmOpenRead);
+ Try
+ F2:=TFileStream.Create(DestFile,fmCreate);
+ Try
+ F2.CopyFrom(F1,0);
+ Finally
+ F2.Free;
+ end;
+ finally
+ F1.Free;
+ end;
+ Result:=True;
+ except
+ On E : Exception do
+ begin
+ If StopOnError then
+ Raise
+ Else
+ LogAction(SCopyFailed,[AFileName,ADestDir,E.Message]);
+ end;
+ end;
+end;
+
+
+Function TCleanDirs.DoFileAction(F: TFileAction; Const AFileName : String) : Boolean;
+
+ Function NeedCompress : boolean;
+
+ Var
+ Info : TSearchRec;
+
+ begin
+ Result:=F.Compress;
+ If Result and (F.MinCompressSize>0) then
+ begin
+ Result:=FindFirst(AFileName,faAnyFile,Info)=0;
+ If Result then
+ Result:=Info.Size>(F.MinCompressSize*1024);
+ end;
+ end;
+
+Var
+ Ext : String;
+ Dir : String;
+
+begin
+ if Cancelled then
+ Exit;
+ Ext:=ExtractFileExt(AFileName);
+ If (F.Location<>Nil) and CreateLocation(F.Location,Ext) then
+ begin
+ Dir:=F.Location.GetLocation(Ext,FStartTime);
+ If NeedCompress then
+ Result:=DoCompressFile(AFileName,Dir)
+ else
+ Result:=DoCopyFile(AfileName,Dir);
+ end;
+end;
+
+Function TCleanDirs.CleanFile(Const AFileName : String) : Boolean;
+
+Var
+ I : Integer;
+ F : TFileAction;
+ D : Boolean;
+
+begin
+ if Cancelled then
+ Exit;
+ if LogAllFiles then
+ LogAction(SConsideringFile,[AFileName]);
+ I:=0;
+ D:=False;
+ While (I0);
+ finally
+ FindClose(Info);
+ end;
+ If Recurse then
+ If FindFirst(Dir+'*',faDirectory,Info)=0 then
+ try
+ repeat
+ If (Info.Attr=faDirectory) and
+ Not ((info.Name='.') or (Info.Name='..')) then
+ DoCleanDir(Dir+Info.Name,Recurse);
+ until (FindNext(Info)<>0);
+ finally
+ FindClose(Info);
+ end;
+end;
+
+constructor TCleanDirs.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FLocations:=TLocations.Create;
+ FDirectories:=TDirectories.Create;
+ FFileActions:=TFileActions.Create;
+end;
+
+destructor TCleanDirs.Destroy;
+begin
+ FreeAndNil(FLocations);
+ FreeAndNil(FDirectories);
+ FreeAndNIl(FFileActions);
+ inherited Destroy;
+end;
+
+procedure TCleanDirs.CleanDirectory(D : TDirectory);
+
+Var
+ Dir : String;
+ Msg : String;
+
+begin
+ Dir:=D.Path;
+ If Not DirectoryExists(Dir) then
+ begin
+ Msg:=format(SNoSuchDir,[Dir]);
+ LogAction(Msg);
+ If StopOnError then
+ Raise EDiskClean.Create(Msg);
+ end
+ else
+ DoCleanDir(Dir,D.Recurse);
+end;
+
+procedure TCleanDirs.Execute;
+
+Var
+ I : Integer;
+ D : TDirectory;
+
+begin
+ FStartTime:=Now;
+ Try
+ FileActions.Prepare;
+ FileActions.BindLocations(FLocations);
+ I:=0;
+ While (I0) then
+ ScheduleDays:=ScheduleDays + [Sd];
+ DailyAt:=ReadTime('Schedule','DailyAt',DailyAt);
+ HourlyAt:=ReadInteger('Schedule','HourlyAt',HourlyAt);
+ end;
+end;
+
+procedure TCleanDirs.SaveToIni(Ini: TCustomInifile);
+
+Var
+ SD : TScheduleDay;
+ O : Integer;
+
+begin
+ FLocations.SaveToIni(Ini,'Locations');
+ FDirectories.SaveToIni(Ini,'Directories');
+ FFileActions.SaveToIni(Ini,'FileActions');
+ With Ini do
+ begin
+ WriteBool('Global','LogAllFiles',LogAllFiles);
+ WriteBool('Global','StopOnError',StopOnError);
+ WriteBool('Global','LogOnly',LogOnly);
+ WriteInteger('Schedule','Mode',Ord(ScheduleMode));
+ O:=0;
+ For sd:=Low(TScheduleDay) to High(TScheduleDay) do
+ if sd in ScheduleDays then
+ O:=O or (1 shl ord(sd));
+ WriteInteger('Schedule','Days',O);
+ WriteTime('Schedule','DailyAt',DailyAt);
+ WriteInteger('Schedule','HourlyAt',HourlyAt);
+ end;
+end;
+
+
+procedure TCleanDirs.LoadFromFile(AFileName: String);
+
+Var
+ Ini : TMemIniFile;
+
+begin
+ Ini:=TMemInifile.Create(AFileName);
+ try
+ LoadFromIni(Ini);
+ FConfigFile:=AFileName;
+ finally
+ Ini.Free;
+ end;
+end;
+
+procedure TCleanDirs.SaveToFile(AFileName: String);
+Var
+ Ini : TMemIniFile;
+
+begin
+ Ini:=TMemInifile.Create(AFileName);
+ try
+ Ini.CacheUpdates:=True;
+ SaveToIni(Ini);
+ Ini.UpdateFile;
+ FConfigFile:=AFileName;
+ finally
+ Ini.Free;
+ end;
+end;
+
+Procedure TCleanDirs.LogAction(Const Msg: String);
+begin
+ If Assigned(FLogEvent) then
+ FLogEvent(Msg);
+end;
+
+
+Procedure TCleanDirs.LogAction(Const Fmt: String; Args : Array of const);
+
+begin
+ LogAction(Format(Fmt,Args));
+end;
+
+Function CleanDirApp : String;
+
+begin
+ Result:=SCleanDirApp;
+end;
+
+end.
+
diff --git a/examples/cleandir/frmlog.lfm b/examples/cleandir/frmlog.lfm
new file mode 100644
index 0000000000..7465a93460
--- /dev/null
+++ b/examples/cleandir/frmlog.lfm
@@ -0,0 +1,61 @@
+object LogForm: TLogForm
+ Left = 426
+ Height = 351
+ Top = 183
+ Width = 460
+ HorzScrollBar.Page = 459
+ VertScrollBar.Page = 350
+ ActiveControl = BClose
+ Caption = 'Output of execution'
+ ClientHeight = 351
+ ClientWidth = 460
+ OnShow = FormShow
+ object Label1: TLabel
+ Left = 8
+ Height = 16
+ Top = 8
+ Width = 312
+ AutoSize = False
+ Caption = 'Actions:'
+ ParentColor = False
+ end
+ object BClose: TButton
+ Left = 373
+ Height = 25
+ Top = 318
+ Width = 75
+ Anchors = [akRight, akBottom]
+ BorderSpacing.InnerBorder = 4
+ Caption = '&Cancel'
+ OnClick = BCloseClick
+ TabOrder = 0
+ end
+ object LBLog: TListBox
+ Left = 8
+ Height = 280
+ Top = 32
+ Width = 440
+ Anchors = [akTop, akLeft, akRight, akBottom]
+ TabOrder = 1
+ TopIndex = -1
+ end
+ object BSave: TButton
+ Left = 8
+ Height = 25
+ Top = 318
+ Width = 75
+ Anchors = [akLeft, akBottom]
+ BorderSpacing.InnerBorder = 4
+ Caption = '&Save'
+ OnClick = BSaveClick
+ TabOrder = 2
+ end
+ object SDlog: TSaveDialog
+ Title = 'Save file as'
+ Filter = 'Log files|*.log|Text files|*.txt|All files|*.*'
+ FilterIndex = 0
+ Options = [ofPathMustExist, ofEnableSizing, ofViewDetail]
+ left = 96
+ top = 320
+ end
+end
diff --git a/examples/cleandir/frmlog.lrs b/examples/cleandir/frmlog.lrs
new file mode 100644
index 0000000000..86172d1401
--- /dev/null
+++ b/examples/cleandir/frmlog.lrs
@@ -0,0 +1,20 @@
+LazarusResources.Add('TLogForm','FORMDATA',[
+ 'TPF0'#8'TLogForm'#7'LogForm'#4'Left'#3#170#1#6'Height'#3'_'#1#3'Top'#3#183#0
+ +#5'Width'#3#204#1#18'HorzScrollBar.Page'#3#203#1#18'VertScrollBar.Page'#3'^'
+ +#1#13'ActiveControl'#7#6'BClose'#7'Caption'#6#19'Output of execution'#12'Cli'
+ +'entHeight'#3'_'#1#11'ClientWidth'#3#204#1#6'OnShow'#7#8'FormShow'#0#6'TLabe'
+ +'l'#6'Label1'#4'Left'#2#8#6'Height'#2#16#3'Top'#2#8#5'Width'#3'8'#1#8'AutoSi'
+ +'ze'#8#7'Caption'#6#8'Actions:'#11'ParentColor'#8#0#0#7'TButton'#6'BClose'#4
+ +'Left'#3'u'#1#6'Height'#2#25#3'Top'#3'>'#1#5'Width'#2'K'#7'Anchors'#11#7'akR'
+ +'ight'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#7'&Cance'
+ +'l'#7'OnClick'#7#11'BCloseClick'#8'TabOrder'#2#0#0#0#8'TListBox'#5'LBLog'#4
+ +'Left'#2#8#6'Height'#3#24#1#3'Top'#2' '#5'Width'#3#184#1#7'Anchors'#11#5'akT'
+ +'op'#6'akLeft'#7'akRight'#8'akBottom'#0#8'TabOrder'#2#1#8'TopIndex'#2#255#0#0
+ +#7'TButton'#5'BSave'#4'Left'#2#8#6'Height'#2#25#3'Top'#3'>'#1#5'Width'#2'K'#7
+ +'Anchors'#11#6'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7'Cap'
+ +'tion'#6#5'&Save'#7'OnClick'#7#10'BSaveClick'#8'TabOrder'#2#2#0#0#11'TSaveDi'
+ +'alog'#5'SDlog'#5'Title'#6#12'Save file as'#6'Filter'#6'.Log files|*.log|Tex'
+ +'t files|*.txt|All files|*.*'#11'FilterIndex'#2#0#7'Options'#11#15'ofPathMus'
+ +'tExist'#14'ofEnableSizing'#12'ofViewDetail'#0#4'left'#2'`'#3'top'#3'@'#1#0#0
+ +#0
+]);
diff --git a/examples/cleandir/frmlog.pp b/examples/cleandir/frmlog.pp
new file mode 100644
index 0000000000..f381d25fe1
--- /dev/null
+++ b/examples/cleandir/frmlog.pp
@@ -0,0 +1,118 @@
+{ Directory cleaning component logging window
+
+ Copyright (C) 2007 Michael Van Canneyt michael@freepascal.org
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version with the following modification:
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent modules,and
+ to copy and distribute the resulting executable under terms of your choice,
+ provided that you also meet, for each linked independent module, the terms
+ and conditions of the license of that module. An independent module is a
+ module which is not derived from or based on this library. If you modify
+ this library, you may extend this exception to your version of the library,
+ but you are not obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
+ for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+}
+
+unit frmlog;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, dircleaner;
+
+type
+
+ { TLogForm }
+
+ TLogForm = class(TForm)
+ BClose: TButton;
+ BSave: TButton;
+ Label1: TLabel;
+ LBLog: TListBox;
+ SDlog: TSaveDialog;
+ procedure BCloseClick(Sender: TObject);
+ procedure BSaveClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ private
+ FCleaner: TCleanDirs;
+ FRunning : Boolean;
+ procedure SetCleaner(const AValue: TCleanDirs);
+ { private declarations }
+ public
+ { public declarations }
+ Procedure OnLog(Msg : String);
+ Property Cleaner : TCleanDirs Read FCleaner Write SetCleaner;
+ end;
+
+var
+ LogForm: TLogForm;
+
+implementation
+
+resourcestring
+ SClose = '&Close';
+
+ { TLogForm }
+
+procedure TLogForm.BSaveClick(Sender: TObject);
+begin
+ If SDLog.execute then
+ LBLog.Items.SaveToFile(SDLog.FileName);
+end;
+
+procedure TLogForm.BCloseClick(Sender: TObject);
+begin
+ if FRunning then
+ FCleaner.Cancel
+ else
+ Close;
+end;
+
+procedure TLogForm.FormShow(Sender: TObject);
+begin
+ FRunning:=True;
+ Try
+ FCleaner.execute;
+ BClose.Caption:=SClose;
+ Finally
+ FRunning:=False;
+ end;
+end;
+
+procedure TLogForm.SetCleaner(const AValue: TCleanDirs);
+begin
+ if FCleaner=AValue then exit;
+ FCleaner:=AValue;
+ If Assigned(FCleaner) then
+ FCleaner.OnLog:=@Self.OnLog;
+end;
+
+procedure TLogForm.OnLog(Msg: String);
+begin
+ LBLog.Items.Add(Msg);
+ Application.ProcessMessages;
+end;
+
+initialization
+ {$I frmlog.lrs}
+
+end.
+
diff --git a/examples/cleandir/frmmain.lfm b/examples/cleandir/frmmain.lfm
new file mode 100644
index 0000000000..ee62f85a2f
--- /dev/null
+++ b/examples/cleandir/frmmain.lfm
@@ -0,0 +1,1966 @@
+object MainForm: TMainForm
+ Left = 635
+ Height = 432
+ Top = 338
+ Width = 571
+ HorzScrollBar.Page = 570
+ VertScrollBar.Page = 405
+ ActiveControl = EDailyAt
+ Caption = 'Configure Directory Cleaner'
+ ClientHeight = 406
+ ClientWidth = 571
+ Menu = MMMain
+ OnCloseQuery = FormCloseQuery
+ OnShow = FormShow
+ object TBMain: TToolBar
+ Height = 26
+ Width = 571
+ Caption = 'TBMain'
+ Images = ILMain
+ TabOrder = 0
+ object TBQuit: TToolButton
+ Left = 1
+ Top = 2
+ Action = AQuit
+ end
+ object ToolButton2: TToolButton
+ Left = 24
+ Top = 2
+ Width = 23
+ Caption = 'ToolButton2'
+ Style = tbsSeparator
+ end
+ object TBNew: TToolButton
+ Left = 47
+ Top = 2
+ Action = ANew
+ end
+ object TBOpen: TToolButton
+ Left = 70
+ Top = 2
+ Action = AOpen
+ end
+ object TBSave: TToolButton
+ Left = 93
+ Top = 2
+ Action = ASave
+ end
+ object ToolButton1: TToolButton
+ Left = 116
+ Top = 2
+ Width = 23
+ Caption = 'ToolButton1'
+ Style = tbsSeparator
+ end
+ object TBNewItem: TToolButton
+ Left = 139
+ Top = 2
+ Action = ANewItem
+ end
+ object TBDeleteItem: TToolButton
+ Left = 162
+ Top = 2
+ Action = ADeleteItem
+ end
+ end
+ object PCConfig: TPageControl
+ Height = 380
+ Top = 26
+ Width = 571
+ ActivePage = TSScheduling
+ Align = alClient
+ TabIndex = 3
+ TabOrder = 1
+ OnChange = PCConfigChange
+ OnPageChanged = PCConfigChange
+ object TSOptions: TTabSheet
+ Caption = 'Options'
+ ClientHeight = 380
+ ClientWidth = 571
+ object LVDirectories: TListView
+ Height = 214
+ Top = 50
+ Width = 571
+ Align = alClient
+ Columns = <
+ item
+ Caption = 'Enabled'
+ end
+ item
+ Caption = 'Recurse'
+ end
+ item
+ Caption = 'Name'
+ Width = 120
+ end
+ item
+ Caption = 'Path'
+ end>
+ ReadOnly = True
+ RowSelect = True
+ TabOrder = 0
+ ViewStyle = vsReport
+ OnSelectItem = LVDirectoriesSelectItem
+ end
+ object PDirectories: TPanel
+ Height = 116
+ Top = 264
+ Width = 571
+ Align = alBottom
+ BevelOuter = bvLowered
+ ClientHeight = 116
+ ClientWidth = 571
+ TabOrder = 1
+ object Label1: TLabel
+ Left = 4
+ Height = 21
+ Top = 10
+ Width = 80
+ Alignment = taRightJustify
+ AutoSize = False
+ Caption = '&Name'
+ FocusControl = EDirName
+ Layout = tlCenter
+ ParentColor = False
+ end
+ object Label2: TLabel
+ Left = 4
+ Height = 19
+ Top = 44
+ Width = 80
+ Alignment = taRightJustify
+ AutoSize = False
+ Caption = '&Path'
+ FocusControl = EDirPath
+ Layout = tlCenter
+ ParentColor = False
+ end
+ object SBDirPath: TSpeedButton
+ Left = 533
+ Height = 22
+ Top = 41
+ Width = 23
+ Anchors = [akTop, akRight]
+ Color = clBtnFace
+ Glyph.Data = {
+ 610C00002F2A2058504D202A2F0A7374617469632063686172202A6772617068
+ 69635B5D203D207B0A223136203136203135392032222C0A222E2E2063204E6F
+ 6E65222C0A222E2C20632023363336433735222C0A222E2D2063202335373546
+ 3638222C0A222E2A20632023354236333643222C0A222E612063202333413346
+ 3435222C0A222E6220632023383038433938222C0A222E632063202338333846
+ 3943222C0A222E6420632023343734443534222C0A222E652063202337343746
+ 3841222C0A222E6620632023333233373342222C0A222E672063202335363545
+ 3636222C0A222E6820632023364637383835222C0A222E692063202333393346
+ 3438222C0A222E6A20632023373137443842222C0A222E6B2063202334303441
+ 3536222C0A222E6C20632023373438333932222C0A222E6D2063202334303437
+ 3446222C0A222E6E20632023333433393345222C0A222E6F2063202334443534
+ 3542222C0A222E7020632023393041304230222C0A222E712063202335313544
+ 3639222C0A222E7220632023363537343836222C0A222E732063202334453538
+ 3633222C0A222E7420632023383839384141222C0A222E752063202334413531
+ 3541222C0A222E7620632023313131333136222C0A222E772063202335383631
+ 3639222C0A222E7820632023343834463536222C0A222E792063202332433246
+ 3332222C0A222E7A20632023324433303334222C0A222E412063202333433432
+ 3436222C0A222E4220632023333333383344222C0A222E432063202330383039
+ 3041222C0A222E4420632023443942343334222C0A222E452063202345314332
+ 3545222C0A222E4620632023453243333630222C0A222E472063202345324333
+ 3546222C0A222E4820632023444242363343222C0A222E492063202341464239
+ 4334222C0A222E4A20632023384439414137222C0A222E4B2063202334303435
+ 3437222C0A222E4C20632023353535423633222C0A222E4D2063202341344146
+ 4242222C0A222E4E20632023384239384136222C0A222E4F2063202332313234
+ 3237222C0A222E5020632023444142333336222C0A222E512063202346454645
+ 4644222C0A222E5220632023464646464645222C0A222E532063202346464645
+ 4645222C0A222E5420632023464646454644222C0A222E552063202346424637
+ 4541222C0A222E5620632023354636383731222C0A222E572063202341424236
+ 4331222C0A222E5820632023363637303739222C0A222E592063202335343534
+ 3441222C0A222E5A20632023413639353543222C0A222E302063202335443636
+ 3645222C0A222E3120632023413542314244222C0A222E322063202336413734
+ 3745222C0A222E3320632023314231443230222C0A222E342063202344414146
+ 3335222C0A222E3520632023464546434637222C0A222E362063202346384534
+ 3845222C0A222E3720632023463544453931222C0A222E382063202346354530
+ 3946222C0A222E3920632023463645314143222C0A222E402063202346454642
+ 4546222C0A222E2320632023353435423633222C0A222E3B2063202335453637
+ 3730222C0A222E3A20632023334234303434222C0A222E3D2063202341434141
+ 4133222C0A222E2B20632023344535353543222C0A222E252063202337463841
+ 3936222C0A222E2420632023313331343136222C0A222E282063202344414141
+ 3336222C0A222E2920632023464446414631222C0A222E5B2063202346354445
+ 3934222C0A222E5D20632023463444433933222C0A222C2E2063202346324435
+ 3831222C0A222C2C20632023453943303630222C0A222C2D2063202345314145
+ 3446222C0A222C2A20632023444139343335222C0A222C612063202331313133
+ 3135222C0A222C6220632023303330343034222C0A222C632063202344414142
+ 3335222C0A222C6420632023464246364538222C0A222C652063202345414335
+ 3745222C0A222C6620632023453341453542222C0A222C672063202345314138
+ 3531222C0A222C6820632023453441463630222C0A222C692063202346444641
+ 4542222C0A222C6A20632023464546414543222C0A222C6B2063202346434635
+ 4535222C0A222C6C20632023464346364535222C0A222C6D2063202346434635
+ 4534222C0A222C6E20632023444141363337222C0A222C6F2063202346464644
+ 4638222C0A222C7020632023464646444636222C0A222C712063202346464643
+ 4635222C0A222C7220632023464546414538222C0A222C732063202346414543
+ 4146222C0A222C7420632023463845333837222C0A222C752063202346374530
+ 3744222C0A222C7620632023463644443732222C0A222C772063202346354442
+ 3638222C0A222C7820632023464446394539222C0A222C792063202344414131
+ 3336222C0A222C7A20632023464546434636222C0A222C412063202346434632
+ 4338222C0A222C4220632023464245464239222C0A222C432063202346414543
+ 4143222C0A222C4420632023463845343843222C0A222C452063202346384533
+ 3841222C0A222C4620632023463745313832222C0A222C472063202346374446
+ 3739222C0A222C4820632023463644443644222C0A222C492063202346354441
+ 3631222C0A222C4A20632023463444373537222C0A222C4B2063202346444638
+ 4537222C0A222C4C20632023444139413336222C0A222C4D2063202346444641
+ 4632222C0A222C4E20632023464145444233222C0A222C4F2063202346394539
+ 4134222C0A222C5020632023463845363935222C0A222C512063202346374532
+ 3835222C0A222C5220632023463745313831222C0A222C532063202346374530
+ 3741222C0A222C5420632023463644443646222C0A222C552063202346354441
+ 3632222C0A222C5620632023463344363534222C0A222C572063202346324433
+ 3437222C0A222C5820632023464446394538222C0A222C592063202346454641
+ 4546222C0A222C5A20632023463945394131222C0A222C302063202346384535
+ 3931222C0A222C3120632023463644453732222C0A222C322063202346354441
+ 3633222C0A222C3320632023463444373534222C0A222C342063202346334433
+ 3437222C0A222C3520632023463244303339222C0A222C362063202346314344
+ 3245222C0A222C3720632023463043423236222C0A222C382063202346424632
+ 4341222C0A222C3920632023443938453333222C0A222C402063202346414630
+ 4443222C0A222C2320632023463444444137222C0A222C3B2063202346344442
+ 3945222C0A222C3A20632023463344413936222C0A222C3D2063202346334438
+ 3845222C0A222C2B20632023463344373836222C0A222C252063202346324434
+ 3746222C0A222C2420632023463244333739222C0A222C282063202346314432
+ 3732222C0A222C2920632023463144303643222C0A222C5B2063202346314346
+ 3639222C0A222C5D20632023463845414332222C0A222D2E2063202344383838
+ 3244222C0A222D2C20632023443838373244222C0A222D2D2063202344383836
+ 3243222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2C2E2D2E2E2E2A
+ 2E612E2E2E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E622E632E61
+ 2E2E2E642E652E662E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E67
+ 2E682E692E6A2E6B2E6C2E6D2E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E
+ 2E6E2E6F2E702E712E722E732E742E752E76222C0A222E2E2E2E2E2E2E2E2E2E
+ 2E2E2E2E2E672E772E782E792E2E2E7A2E412E422E43222C0A222E442E452E46
+ 2E462E462E472E482E2C2E492E4A2E4B2E2E2E4C2E4D2E4E2E4F222C0A222E50
+ 2E512E522E532E542E522E552E562E572E582E592E5A2E302E312E322E33222C
+ 0A222E342E352E362E372E382E392E402E232E4A2E3B2E3A2E3D2E2B2E252E67
+ 2E24222C0A222E282E292E5B2E5D2C2E2C2C2C2D2C2A2C2A2C2A2C2A2C2A2C2A
+ 2C2A2C612C62222C0A222C632C642C652C662C672C682C692C6A2C6B2C6C2C6D
+ 2C6D2E522C2A2E2E2E2E222C0A222C6E2E522C6F2C702C712C722C732E362C74
+ 2C752C762C772C782C2A2E2E2E2E222C0A222C792C7A2C412C422C432C442C45
+ 2C462C472C482C492C4A2C4B2C2A2E2E2E2E222C0A222C4C2C4D2C4E2C4F2C50
+ 2C512C522C532C542C552C562C572C582C2A2E2E2E2E222C0A222C2A2C592C5A
+ 2C302C522C312C322C332C342C352C362C372C382C2A2E2E2E2E222C0A222C39
+ 2C402C232C3B2C3A2C3D2C2B2C252C242C282C292C5B2C5D2C392E2E2E2E222C
+ 0A222E2E2D2E2D2C2D2E2D2E2D2E2D2E2D2E2D2E2D2E2D2E2D2C2D2E2D2D2E2E
+ 2E2E227D0A
+ }
+ NumGlyphs = 0
+ OnClick = SBDirPathClick
+ end
+ object CBDirEnabled: TTICheckBox
+ Left = 94
+ Height = 22
+ Top = 72
+ Width = 70
+ Caption = '&Enabled'
+ Link.TIPropertyName = 'Enabled'
+ OnEditingDone = DirectoryChanged
+ TabOrder = 0
+ end
+ object CBDirRecurse: TTICheckBox
+ Left = 94
+ Height = 22
+ Top = 96
+ Width = 70
+ Caption = '&Recurse'
+ Link.TIPropertyName = 'Recurse'
+ OnEditingDone = DirectoryChanged
+ TabOrder = 1
+ end
+ object EDirName: TTIEdit
+ Left = 94
+ Height = 23
+ Top = 8
+ Width = 200
+ Link.TIPropertyName = 'Name'
+ OnEditingDone = DirectoryChanged
+ TabOrder = 2
+ end
+ object EDirPath: TTIEdit
+ Left = 94
+ Height = 23
+ Top = 40
+ Width = 437
+ Anchors = [akTop, akLeft, akRight]
+ Link.TIPropertyName = 'Path'
+ OnEditingDone = DirectoryChanged
+ TabOrder = 3
+ end
+ end
+ object POptions: TPanel
+ Height = 50
+ Width = 571
+ Align = alTop
+ BevelOuter = bvNone
+ ClientHeight = 50
+ ClientWidth = 571
+ TabOrder = 2
+ object Label3: TLabel
+ Height = 24
+ Top = 26
+ Width = 571
+ Align = alBottom
+ Alignment = taCenter
+ AutoSize = False
+ Caption = 'Directories to clean:'
+ Layout = tlCenter
+ ParentColor = False
+ end
+ object CBStopOnError: TTICheckBox
+ Left = 14
+ Height = 20
+ Top = 2
+ Width = 103
+ Caption = 'Stop on errors'
+ Link.TIPropertyName = 'StopOnError'
+ OnChange = OptionsChanged
+ TabOrder = 0
+ end
+ object CBAllFileActions: TTICheckBox
+ Left = 190
+ Height = 20
+ Top = 2
+ Width = 184
+ Caption = 'Execute all matching actions'
+ Link.TIPropertyName = 'AllFileActions'
+ OnChange = OptionsChanged
+ TabOrder = 1
+ end
+ object CBLogAllFiles: TTICheckBox
+ Left = 406
+ Height = 20
+ Top = 2
+ Width = 88
+ Caption = 'Log all files'
+ Link.TIPropertyName = 'LogAllFiles'
+ OnChange = OptionsChanged
+ TabOrder = 2
+ end
+ end
+ end
+ object TSLocations: TTabSheet
+ Caption = 'Locations'
+ ClientHeight = 380
+ ClientWidth = 571
+ object PLocation: TPanel
+ Height = 188
+ Top = 192
+ Width = 571
+ Align = alBottom
+ BevelOuter = bvLowered
+ ClientHeight = 188
+ ClientWidth = 571
+ TabOrder = 0
+ object LELocationName: TLabel
+ Left = 4
+ Height = 21
+ Top = 13
+ Width = 76
+ Alignment = taRightJustify
+ AutoSize = False
+ Caption = '&Name'
+ Layout = tlCenter
+ ParentColor = False
+ end
+ object Label4: TLabel
+ Left = 4
+ Height = 23
+ Top = 48
+ Width = 76
+ Alignment = taRightJustify
+ AutoSize = False
+ Caption = '&Path'
+ Layout = tlCenter
+ ParentColor = False
+ end
+ object SBLocationPath: TSpeedButton
+ Left = 524
+ Height = 22
+ Top = 49
+ Width = 23
+ Anchors = [akTop, akRight]
+ Color = clBtnFace
+ Glyph.Data = {
+ 610C00002F2A2058504D202A2F0A7374617469632063686172202A6772617068
+ 69635B5D203D207B0A223136203136203135392032222C0A222E2E2063204E6F
+ 6E65222C0A222E2C20632023363336433735222C0A222E2D2063202335373546
+ 3638222C0A222E2A20632023354236333643222C0A222E612063202333413346
+ 3435222C0A222E6220632023383038433938222C0A222E632063202338333846
+ 3943222C0A222E6420632023343734443534222C0A222E652063202337343746
+ 3841222C0A222E6620632023333233373342222C0A222E672063202335363545
+ 3636222C0A222E6820632023364637383835222C0A222E692063202333393346
+ 3438222C0A222E6A20632023373137443842222C0A222E6B2063202334303441
+ 3536222C0A222E6C20632023373438333932222C0A222E6D2063202334303437
+ 3446222C0A222E6E20632023333433393345222C0A222E6F2063202334443534
+ 3542222C0A222E7020632023393041304230222C0A222E712063202335313544
+ 3639222C0A222E7220632023363537343836222C0A222E732063202334453538
+ 3633222C0A222E7420632023383839384141222C0A222E752063202334413531
+ 3541222C0A222E7620632023313131333136222C0A222E772063202335383631
+ 3639222C0A222E7820632023343834463536222C0A222E792063202332433246
+ 3332222C0A222E7A20632023324433303334222C0A222E412063202333433432
+ 3436222C0A222E4220632023333333383344222C0A222E432063202330383039
+ 3041222C0A222E4420632023443942343334222C0A222E452063202345314332
+ 3545222C0A222E4620632023453243333630222C0A222E472063202345324333
+ 3546222C0A222E4820632023444242363343222C0A222E492063202341464239
+ 4334222C0A222E4A20632023384439414137222C0A222E4B2063202334303435
+ 3437222C0A222E4C20632023353535423633222C0A222E4D2063202341344146
+ 4242222C0A222E4E20632023384239384136222C0A222E4F2063202332313234
+ 3237222C0A222E5020632023444142333336222C0A222E512063202346454645
+ 4644222C0A222E5220632023464646464645222C0A222E532063202346464645
+ 4645222C0A222E5420632023464646454644222C0A222E552063202346424637
+ 4541222C0A222E5620632023354636383731222C0A222E572063202341424236
+ 4331222C0A222E5820632023363637303739222C0A222E592063202335343534
+ 3441222C0A222E5A20632023413639353543222C0A222E302063202335443636
+ 3645222C0A222E3120632023413542314244222C0A222E322063202336413734
+ 3745222C0A222E3320632023314231443230222C0A222E342063202344414146
+ 3335222C0A222E3520632023464546434637222C0A222E362063202346384534
+ 3845222C0A222E3720632023463544453931222C0A222E382063202346354530
+ 3946222C0A222E3920632023463645314143222C0A222E402063202346454642
+ 4546222C0A222E2320632023353435423633222C0A222E3B2063202335453637
+ 3730222C0A222E3A20632023334234303434222C0A222E3D2063202341434141
+ 4133222C0A222E2B20632023344535353543222C0A222E252063202337463841
+ 3936222C0A222E2420632023313331343136222C0A222E282063202344414141
+ 3336222C0A222E2920632023464446414631222C0A222E5B2063202346354445
+ 3934222C0A222E5D20632023463444433933222C0A222C2E2063202346324435
+ 3831222C0A222C2C20632023453943303630222C0A222C2D2063202345314145
+ 3446222C0A222C2A20632023444139343335222C0A222C612063202331313133
+ 3135222C0A222C6220632023303330343034222C0A222C632063202344414142
+ 3335222C0A222C6420632023464246364538222C0A222C652063202345414335
+ 3745222C0A222C6620632023453341453542222C0A222C672063202345314138
+ 3531222C0A222C6820632023453441463630222C0A222C692063202346444641
+ 4542222C0A222C6A20632023464546414543222C0A222C6B2063202346434635
+ 4535222C0A222C6C20632023464346364535222C0A222C6D2063202346434635
+ 4534222C0A222C6E20632023444141363337222C0A222C6F2063202346464644
+ 4638222C0A222C7020632023464646444636222C0A222C712063202346464643
+ 4635222C0A222C7220632023464546414538222C0A222C732063202346414543
+ 4146222C0A222C7420632023463845333837222C0A222C752063202346374530
+ 3744222C0A222C7620632023463644443732222C0A222C772063202346354442
+ 3638222C0A222C7820632023464446394539222C0A222C792063202344414131
+ 3336222C0A222C7A20632023464546434636222C0A222C412063202346434632
+ 4338222C0A222C4220632023464245464239222C0A222C432063202346414543
+ 4143222C0A222C4420632023463845343843222C0A222C452063202346384533
+ 3841222C0A222C4620632023463745313832222C0A222C472063202346374446
+ 3739222C0A222C4820632023463644443644222C0A222C492063202346354441
+ 3631222C0A222C4A20632023463444373537222C0A222C4B2063202346444638
+ 4537222C0A222C4C20632023444139413336222C0A222C4D2063202346444641
+ 4632222C0A222C4E20632023464145444233222C0A222C4F2063202346394539
+ 4134222C0A222C5020632023463845363935222C0A222C512063202346374532
+ 3835222C0A222C5220632023463745313831222C0A222C532063202346374530
+ 3741222C0A222C5420632023463644443646222C0A222C552063202346354441
+ 3632222C0A222C5620632023463344363534222C0A222C572063202346324433
+ 3437222C0A222C5820632023464446394538222C0A222C592063202346454641
+ 4546222C0A222C5A20632023463945394131222C0A222C302063202346384535
+ 3931222C0A222C3120632023463644453732222C0A222C322063202346354441
+ 3633222C0A222C3320632023463444373534222C0A222C342063202346334433
+ 3437222C0A222C3520632023463244303339222C0A222C362063202346314344
+ 3245222C0A222C3720632023463043423236222C0A222C382063202346424632
+ 4341222C0A222C3920632023443938453333222C0A222C402063202346414630
+ 4443222C0A222C2320632023463444444137222C0A222C3B2063202346344442
+ 3945222C0A222C3A20632023463344413936222C0A222C3D2063202346334438
+ 3845222C0A222C2B20632023463344373836222C0A222C252063202346324434
+ 3746222C0A222C2420632023463244333739222C0A222C282063202346314432
+ 3732222C0A222C2920632023463144303643222C0A222C5B2063202346314346
+ 3639222C0A222C5D20632023463845414332222C0A222D2E2063202344383838
+ 3244222C0A222D2C20632023443838373244222C0A222D2D2063202344383836
+ 3243222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2C2E2D2E2E2E2A
+ 2E612E2E2E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E622E632E61
+ 2E2E2E642E652E662E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E67
+ 2E682E692E6A2E6B2E6C2E6D2E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E
+ 2E6E2E6F2E702E712E722E732E742E752E76222C0A222E2E2E2E2E2E2E2E2E2E
+ 2E2E2E2E2E672E772E782E792E2E2E7A2E412E422E43222C0A222E442E452E46
+ 2E462E462E472E482E2C2E492E4A2E4B2E2E2E4C2E4D2E4E2E4F222C0A222E50
+ 2E512E522E532E542E522E552E562E572E582E592E5A2E302E312E322E33222C
+ 0A222E342E352E362E372E382E392E402E232E4A2E3B2E3A2E3D2E2B2E252E67
+ 2E24222C0A222E282E292E5B2E5D2C2E2C2C2C2D2C2A2C2A2C2A2C2A2C2A2C2A
+ 2C2A2C612C62222C0A222C632C642C652C662C672C682C692C6A2C6B2C6C2C6D
+ 2C6D2E522C2A2E2E2E2E222C0A222C6E2E522C6F2C702C712C722C732E362C74
+ 2C752C762C772C782C2A2E2E2E2E222C0A222C792C7A2C412C422C432C442C45
+ 2C462C472C482C492C4A2C4B2C2A2E2E2E2E222C0A222C4C2C4D2C4E2C4F2C50
+ 2C512C522C532C542C552C562C572C582C2A2E2E2E2E222C0A222C2A2C592C5A
+ 2C302C522C312C322C332C342C352C362C372C382C2A2E2E2E2E222C0A222C39
+ 2C402C232C3B2C3A2C3D2C2B2C252C242C282C292C5B2C5D2C392E2E2E2E222C
+ 0A222E2E2D2E2D2C2D2E2D2E2D2E2D2E2D2E2D2E2D2E2D2E2D2C2D2E2D2D2E2E
+ 2E2E227D0A
+ }
+ NumGlyphs = 0
+ OnClick = SBLocationPathClick
+ end
+ object ELocationBaseDir: TTIEdit
+ Left = 86
+ Height = 23
+ Top = 48
+ Width = 432
+ Link.TIPropertyName = 'BasePath'
+ OnEditingDone = LocationChanged
+ TabOrder = 1
+ end
+ object ELocationName: TTIEdit
+ Left = 86
+ Height = 23
+ Top = 13
+ Width = 184
+ Link.TIPropertyName = 'Name'
+ OnEditingDone = LocationChanged
+ TabOrder = 0
+ end
+ object CGLocationSubdirs: TTICheckGroup
+ Left = 86
+ Height = 100
+ Top = 80
+ Width = 344
+ Caption = 'Create subdirectories from'
+ ColumnLayout = clVerticalThenHorizontal
+ Columns = 2
+ Link.TIPropertyName = 'SubDirs'
+ Link.AliasValuesStrings = (
+ 'sdExtension=Extension'
+ 'sdYear=Year'
+ 'sdMonth=Month'
+ 'sdDay=Day'
+ 'sdDate=Date'
+ 'sdHour=Hour'
+ 'sdMin=Min'
+ 'sdTime=Time'
+ )
+ OnEditingDone = LocationChanged
+ end
+ end
+ object LVLocations: TListView
+ Height = 192
+ Width = 571
+ Align = alClient
+ Columns = <
+ item
+ Caption = 'Name'
+ Width = 120
+ end
+ item
+ Caption = 'Path'
+ Width = 200
+ end
+ item
+ Caption = 'Subdirs'
+ end>
+ ReadOnly = True
+ RowSelect = True
+ TabOrder = 1
+ ViewStyle = vsReport
+ OnSelectItem = LVLocationsSelectItem
+ end
+ end
+ object TSFileActions: TTabSheet
+ Caption = 'Actions'
+ ClientHeight = 380
+ ClientWidth = 571
+ object LVFileActions: TListView
+ Height = 216
+ Width = 571
+ Align = alClient
+ Columns = <
+ item
+ Caption = 'Name'
+ Width = 100
+ end
+ item
+ Caption = 'Extensions'
+ Width = 100
+ end
+ item
+ Caption = 'Location'
+ end
+ item
+ Caption = 'Delete'
+ end
+ item
+ Caption = 'Compress'
+ end
+ item
+ Caption = 'MinCompressSize'
+ end
+ item
+ Caption = 'Case sensitive'
+ end>
+ ReadOnly = True
+ RowSelect = True
+ TabOrder = 0
+ ViewStyle = vsReport
+ OnSelectItem = LVFileActionsSelectItem
+ end
+ object PFileAction: TPanel
+ Height = 164
+ Top = 216
+ Width = 571
+ Align = alBottom
+ BevelOuter = bvLowered
+ ClientHeight = 164
+ ClientWidth = 571
+ TabOrder = 1
+ object LSEFileActionMinCompressSize: TLabel
+ Left = 214
+ Height = 20
+ Top = 131
+ Width = 85
+ Alignment = taRightJustify
+ AutoSize = False
+ Caption = '&Minimum size'
+ FocusControl = SEFileActionMinCompressSize
+ Layout = tlCenter
+ ParentColor = False
+ end
+ object Label5: TLabel
+ Left = 15
+ Height = 23
+ Top = 8
+ Width = 70
+ Alignment = taRightJustify
+ AutoSize = False
+ Caption = '&Name'
+ Layout = tlCenter
+ ParentColor = False
+ end
+ object Label6: TLabel
+ Left = 15
+ Height = 23
+ Top = 40
+ Width = 70
+ Alignment = taRightJustify
+ AutoSize = False
+ Caption = '&Extensions'
+ Layout = tlCenter
+ ParentColor = False
+ end
+ object Label7: TLabel
+ Left = 13
+ Height = 25
+ Top = 72
+ Width = 72
+ Alignment = taRightJustify
+ AutoSize = False
+ Caption = 'Location'
+ Layout = tlCenter
+ ParentColor = False
+ end
+ object EFileActionName: TTIEdit
+ Left = 92
+ Height = 23
+ Top = 8
+ Width = 178
+ Link.TIPropertyName = 'Name'
+ OnEditingDone = ActionChanged
+ TabOrder = 0
+ end
+ object EFileActionExtensions: TTIEdit
+ Left = 92
+ Height = 23
+ Top = 40
+ Width = 178
+ Link.TIPropertyName = 'Extensions'
+ OnEditingDone = ActionChanged
+ TabOrder = 1
+ end
+ object CBFileActionDelete: TTICheckBox
+ Left = 92
+ Height = 22
+ Top = 104
+ Width = 60
+ Caption = '&Delete'
+ Link.TIPropertyName = 'Delete'
+ OnEditingDone = ActionChanged
+ TabOrder = 2
+ end
+ object CBFileActionCompress: TTICheckBox
+ Left = 92
+ Height = 22
+ Top = 131
+ Width = 79
+ Caption = '&Compress'
+ Link.TIPropertyName = 'Compress'
+ OnChange = CBFileActionCompressChange
+ TabOrder = 3
+ end
+ object SEFileActionMinCompressSize: TTISpinEdit
+ Left = 302
+ Height = 23
+ Top = 128
+ Width = 50
+ Link.TIElementName = 'MinCompressSize'
+ MaxValue = 10000
+ OnEditingDone = ActionChanged
+ TabOrder = 4
+ UseRTTIMinMax = False
+ end
+ object CBFileActionLocationName: TTIComboBox
+ Left = 92
+ Height = 25
+ Top = 72
+ Width = 100
+ AutoDropDown = True
+ Link.TIPropertyName = 'LocationName'
+ MaxLength = 0
+ OnEditingDone = ActionChanged
+ Sorted = True
+ Style = csDropDownList
+ TabOrder = 5
+ end
+ end
+ end
+ object TSScheduling: TTabSheet
+ Caption = 'Scheduling'
+ ClientHeight = 350
+ ClientWidth = 567
+ object LEDailyAt: TLabel
+ Left = 14
+ Height = 23
+ Top = 130
+ Width = 56
+ Alignment = taRightJustify
+ AutoSize = False
+ Caption = 'Daily at'
+ Layout = tlCenter
+ ParentColor = False
+ end
+ object LSEHourlyAt: TLabel
+ Left = 14
+ Height = 23
+ Top = 170
+ Width = 56
+ Alignment = taRightJustify
+ AutoSize = False
+ Caption = 'Hourly at'
+ Layout = tlCenter
+ ParentColor = False
+ end
+ object RGScheduleMode: TTIRadioGroup
+ Left = 14
+ Height = 108
+ Top = 10
+ Width = 168
+ Caption = 'Schedule service'
+ ChildSizing.LeftRightSpacing = 6
+ ChildSizing.TopBottomSpacing = 6
+ ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
+ ChildSizing.EnlargeVertical = crsHomogenousChildResize
+ ChildSizing.ShrinkHorizontal = crsScaleChilds
+ ChildSizing.ShrinkVertical = crsScaleChilds
+ ChildSizing.Layout = cclLeftToRightThenTopToBottom
+ ChildSizing.ControlsPerLine = 1
+ Link.TIPropertyName = 'ScheduleMode'
+ Link.AliasValuesStrings = (
+ 'smDaily=Daily'
+ 'smHourly=Hourly'
+ )
+ OnEditingDone = ScheduleModeChanged
+ end
+ object EDailyAt: TTIEdit
+ Left = 86
+ Height = 23
+ Top = 130
+ Width = 80
+ Link.TIPropertyName = 'DailyAt'
+ OnEditingDone = OptionsChanged
+ TabOrder = 1
+ end
+ object SEHourlyAt: TTISpinEdit
+ Left = 86
+ Height = 23
+ Top = 170
+ Width = 50
+ Link.TIPropertyName = 'HourlyAt'
+ MaxValue = 59
+ OnEditingDone = OptionsChanged
+ TabOrder = 2
+ end
+ object CGScheduleDays: TTICheckGroup
+ Left = 198
+ Height = 108
+ Top = 10
+ Width = 312
+ Caption = 'Days of week to run service'
+ ColumnLayout = clVerticalThenHorizontal
+ Columns = 2
+ Link.TIPropertyName = 'ScheduleDays'
+ Link.AliasValuesStrings = (
+ 'sdMonday=Monday'
+ 'sdTuesday=Tuesday'
+ 'sdWednesday=Wednesday'
+ 'sdThursday=Thursday'
+ 'sdFriday=Friday'
+ 'sdSaturday=Saturday'
+ 'sdSunday=Sunday'
+ )
+ OnEditingDone = OptionsChanged
+ end
+ end
+ end
+ object MMMain: TMainMenu
+ Images = ILMain
+ left = 80
+ top = 64
+ object MFile: TMenuItem
+ Caption = '&File'
+ object MNew: TMenuItem
+ Action = ANew
+ Bitmap.Data = {
+ E10C00002F2A2058504D202A2F0A7374617469632063686172202A6772617068
+ 69635B5D203D207B0A223136203136203136372032222C0A222E2E2063204E6F
+ 6E65222C0A222E2C20632023344438424338222C0A222E2D2063202334463843
+ 4338222C0A222E2A20632023344638444338222C0A222E612063202334463843
+ 4339222C0A222E6220632023344638424337222C0A222E632063202334423839
+ 4335222C0A222E6420632023334237364334222C0A222E652063202334393835
+ 4334222C0A222E6620632023454346324637222C0A222E672063202345454634
+ 4638222C0A222E6820632023454446344638222C0A222E692063202345444633
+ 4638222C0A222E6A20632023454346324638222C0A222E6B2063202344374536
+ 4632222C0A222E6C20632023374442324532222C0A222E6D2063202336353934
+ 4442222C0A222E6E20632023344238384335222C0A222E6F2063202346324636
+ 4641222C0A222E7020632023433745304641222C0A222E712063202343394531
+ 4642222C0A222E7220632023433945324642222C0A222E732063202343384530
+ 4642222C0A222E7420632023433544464639222C0A222E752063202343314442
+ 4638222C0A222E7620632023423844364634222C0A222E772063202346384642
+ 4646222C0A222E7820632023423444384636222C0A222E792063202337444230
+ 4531222C0A222E7A20632023363439324442222C0A222E412063202334433839
+ 4336222C0A222E4220632023463146354639222C0A222E432063202343444533
+ 4643222C0A222E4420632023434545334642222C0A222E452063202343444533
+ 4642222C0A222E4620632023434245324642222C0A222E472063202343384530
+ 4639222C0A222E4820632023433244434638222C0A222E492063202342414436
+ 4635222C0A222E4A20632023463846424644222C0A222E4B2063202343444536
+ 4643222C0A222E4C20632023433945354641222C0A222E4D2063202338344236
+ 4532222C0A222E4E20632023343237394246222C0A222E4F2063202334423839
+ 4336222C0A222E5020632023434645334643222C0A222E512063202344304534
+ 4642222C0A222E5220632023434645344643222C0A222E532063202343414531
+ 4641222C0A222E5420632023433444444639222C0A222E552063202342434439
+ 4636222C0A222E5620632023444645394634222C0A222E572063202346334637
+ 4642222C0A222E5820632023453945464635222C0A222E592063202334353745
+ 4332222C0A222E5A20632023463046344639222C0A222E302063202344334536
+ 4643222C0A222E3120632023443445364643222C0A222E322063202344334537
+ 4644222C0A222E3320632023443145344643222C0A222E342063202343384530
+ 4641222C0A222E3520632023424244364635222C0A222E362063202342354434
+ 4633222C0A222E3720632023423344324631222C0A222E382063202346304634
+ 4638222C0A222E3920632023343638324334222C0A222E402063202334413838
+ 4336222C0A222E2320632023454646344639222C0A222E3B2063202344374537
+ 4645222C0A222E3A20632023443645374644222C0A222E3D2063202344354537
+ 4644222C0A222E2B20632023443445364644222C0A222E252063202344324536
+ 4643222C0A222E2420632023434345314642222C0A222E282063202343374446
+ 4641222C0A222E2920632023424444414636222C0A222E5B2063202342424438
+ 4636222C0A222E5D20632023454646344641222C0A222C2E2063202334363833
+ 4336222C0A222C2C20632023343938384336222C0A222C2D2063202345444634
+ 4639222C0A222C2A20632023443845384645222C0A222C612063202344374538
+ 4645222C0A222C6220632023443645374645222C0A222C632063202344334535
+ 4644222C0A222C6420632023433344444639222C0A222C652063202345444634
+ 4641222C0A222C6620632023343538324336222C0A222C672063202334373834
+ 4336222C0A222C6820632023454346334639222C0A222C692063202344364538
+ 4645222C0A222C6A20632023434345334642222C0A222C6B2063202343364446
+ 4641222C0A222C6C20632023454146324641222C0A222C6D2063202334323830
+ 4336222C0A222C6E20632023343538324335222C0A222C6F2063202345424632
+ 4638222C0A222C7020632023443545364644222C0A222C712063202343444532
+ 4643222C0A222C7220632023434245314642222C0A222C732063202346324637
+ 4642222C0A222C7420632023334637434335222C0A222C752063202334323830
+ 4335222C0A222C7620632023453846314638222C0A222C772063202344354535
+ 4645222C0A222C7820632023443345354643222C0A222C792063202343454532
+ 4643222C0A222C7A20632023434345324643222C0A222C412063202343394530
+ 4642222C0A222C4220632023433845314642222C0A222C432063202346374641
+ 4644222C0A222C4420632023334237364331222C0A222C452063202334303743
+ 4334222C0A222C4620632023453646304637222C0A222C472063202335354234
+ 4638222C0A222C4820632023353642344637222C0A222C492063202335344235
+ 4637222C0A222C4A20632023353342344638222C0A222C4B2063202335334232
+ 4638222C0A222C4C20632023353242334637222C0A222C4D2063202335314232
+ 4637222C0A222C4E20632023344642324637222C0A222C4F2063202346354639
+ 4643222C0A222C5020632023333636464246222C0A222C512063202333433738
+ 4331222C0A222C5220632023453345444637222C0A222C532063202336454332
+ 4644222C0A222C5420632023413044384646222C0A222C552063202339454437
+ 4646222C0A222C5620632023394244364646222C0A222C572063202339384437
+ 4646222C0A222C5820632023393644364646222C0A222C592063202339354436
+ 4646222C0A222C5A20632023393444354646222C0A222C302063202339334434
+ 4646222C0A222C3120632023363542454642222C0A222C322063202346344637
+ 4642222C0A222C3320632023333136374242222C0A222C342063202333383731
+ 4246222C0A222C3520632023444645424635222C0A222C362063202336384246
+ 4644222C0A222C3720632023363742444643222C0A222C382063202336344245
+ 4643222C0A222C3920632023363242444643222C0A222C402063202336334244
+ 4642222C0A222C2320632023363142434642222C0A222C3B2063202336304245
+ 4643222C0A222C3A20632023363242434643222C0A222C3D2063202332443634
+ 4239222C0A222C2B20632023333336394243222C0A222C252063202345414631
+ 4638222C0A222C2420632023444645434637222C0A222C282063202344454542
+ 4636222C0A222C2920632023444545414636222C0A222C5B2063202344434541
+ 4636222C0A222C5D20632023454246334641222C0A222D2E2063202346334637
+ 4643222C0A222D2C20632023463446384643222C0A222D2D2063202346444645
+ 4645222C0A222D2A20632023324136304237222C0A222D612063202333303635
+ 4241222C0A222D6220632023333136364242222C0A222D632063202333303636
+ 4241222C0A222D6420632023324636354241222C0A222D652063202332453635
+ 4239222C0A222D6620632023324536344239222C0A222D672063202332433632
+ 4237222C0A222E2E2E2E2E2C2E2D2E2D2E2D2E2D2E2A2E612E622E632E642E2E
+ 2E2E2E2E2E2E222C0A222E2E2E652E662E672E682E692E692E692E6A2E662E6B
+ 2E6C2E6D2E2E2E2E2E2E222C0A222E2E2E6E2E6F2E702E712E722E732E742E75
+ 2E762E772E782E792E7A2E2E2E2E222C0A222E2E2E412E422E432E442E452E46
+ 2E472E482E492E4A2E4B2E4C2E4D2E4E2E2E222C0A222E2E2E4F2E422E502E51
+ 2E522E432E532E542E552E562E662E572E582E592E2E222C0A222E2E2E4F2E5A
+ 2E302E312E322E332E452E342E482E352E362E372E382E392E2E222C0A222E2E
+ 2E402E232E3B2E3A2E3D2E2B2E252E242E282E482E292E5B2E5D2C2E2E2E222C
+ 0A222E2E2C2C2C2D2C2A2C2A2C612C622C632E332E242E702C642E482C652C66
+ 2E2E222C0A222E2E2C672C682C692C612E3A2E3A2E3D2C632E512C6A2E282C6B
+ 2C6C2C6D2E2E222C0A222E2E2C6E2C6F2C622E3A2E3A2E3A2C702C632E332C71
+ 2C722E712C732C742E2E222C0A222E2E2C752C762C772C632C632C782C782E33
+ 2C792C7A2C412C422C432C442E2E222C0A222E2E2C452C462C472C482C492C4A
+ 2C4B2C4C2C4C2C4D2C4E2C4E2C4F2C502E2E222C0A222E2E2C512C522C532C54
+ 2C552C562C572C582C592C5A2C302C312C322C332E2E222C0A222E2E2C342C35
+ 2C362C372C312C382C382C392C402C232C3B2C3A2E4A2C3D2E2E222C0A222E2E
+ 2C2B2C252C242C282C292C5B2C5B2C5D2C5D2C6C2D2E2D2C2D2D2D2A2E2E222C
+ 0A222E2E2E2E2D612D622D632D632D632D612D642D652D652D662D662D672E2E
+ 2E2E227D0A
+ }
+ OnClick = ANewExecute
+ end
+ object MIOpen: TMenuItem
+ Action = AOpen
+ Bitmap.Data = {
+ 610D00002F2A2058504D202A2F0A7374617469632063686172202A6772617068
+ 69635B5D203D207B0A223136203136203137352032222C0A222E2E2063204E6F
+ 6E65222C0A222E2C20632023394443334541222C0A222E2D2063202339364246
+ 4536222C0A222E2A20632023393242424534222C0A222E612063202336434130
+ 4431222C0A222E6220632023364439454430222C0A222E632063202335463936
+ 4343222C0A222E6420632023393642454535222C0A222E652063202346454646
+ 4646222C0A222E6620632023453946334644222C0A222E672063202345414633
+ 4644222C0A222E6820632023453846324643222C0A222E692063202345334546
+ 4641222C0A222E6A20632023453746324641222C0A222E6B2063202338384242
+ 4541222C0A222E6C20632023353538354346222C0A222E6D2063202339334242
+ 4534222C0A222E6E20632023454446354645222C0A222E6F2063202343354445
+ 4643222C0A222E7020632023433745304642222C0A222E712063202343324443
+ 4639222C0A222E7220632023423444334635222C0A222E732063202346334639
+ 4645222C0A222E7420632023433445324641222C0A222E752063202339334331
+ 4543222C0A222E7620632023343837444333222C0A222E772063202346304636
+ 4645222C0A222E7820632023434445324643222C0A222E792063202343444533
+ 4643222C0A222E7A20632023433844464641222C0A222E412063202342434439
+ 4637222C0A222E4220632023444445394635222C0A222E432063202345424633
+ 4641222C0A222E4420632023463346384642222C0A222E452063202335333833
+ 4341222C0A222E4620632023463146374645222C0A222E472063202344324535
+ 4643222C0A222E4820632023443145344643222C0A222E492063202343434532
+ 4642222C0A222E4A20632023433444444639222C0A222E4B2063202342424437
+ 4636222C0A222E4C20632023414644314633222C0A222E4D2063202345344546
+ 4641222C0A222E4E20632023353838374343222C0A222E4F2063202344394234
+ 3334222C0A222E5020632023453143323545222C0A222E512063202345324333
+ 3630222C0A222E5220632023453243333546222C0A222E532063202339314242
+ 4534222C0A222E5420632023463246374646222C0A222E552063202344354537
+ 4645222C0A222E5620632023443145354644222C0A222E572063202343414530
+ 4641222C0A222E5820632023433444454639222C0A222E592063202345374632
+ 4644222C0A222E5A20632023353738374343222C0A222E302063202344414233
+ 3336222C0A222E3120632023464546454644222C0A222E322063202346464646
+ 4645222C0A222E3320632023464646454645222C0A222E342063202346464645
+ 4644222C0A222E3520632023393142414534222C0A222E362063202346304637
+ 4646222C0A222E3720632023443545374646222C0A222E382063202344364537
+ 4644222C0A222E3920632023443445364644222C0A222E402063202344304534
+ 4643222C0A222E2320632023434245334642222C0A222E3B2063202343324443
+ 4641222C0A222E3A20632023453846334645222C0A222E3D2063202335363836
+ 4343222C0A222E2B20632023444141463335222C0A222E252063202346454643
+ 4637222C0A222E2420632023463845343845222C0A222E282063202346354445
+ 3931222C0A222E2920632023463545303946222C0A222E5B2063202346364531
+ 4143222C0A222E5D20632023353238344341222C0A222C2E2063202346314637
+ 4646222C0A222C2C20632023443945394646222C0A222C2D2063202344424541
+ 4646222C0A222C2A20632023443745374646222C0A222C612063202344324535
+ 4646222C0A222C6220632023434245324646222C0A222C632063202335353835
+ 4342222C0A222C6420632023444141413336222C0A222C652063202346444641
+ 4631222C0A222C6620632023463544453934222C0A222C672063202346344443
+ 3933222C0A222C6820632023453942433634222C0A222C692063202344413934
+ 3335222C0A222C6A20632023454646364642222C0A222C6B2063202335353833
+ 4343222C0A222C6C20632023444141423335222C0A222C6D2063202346424636
+ 4538222C0A222C6E20632023453742433730222C0A222C6F2063202345324141
+ 3535222C0A222C7020632023453041353444222C0A222C712063202345424339
+ 3931222C0A222C7220632023454646334641222C0A222C732063202346444645
+ 4644222C0A222C7420632023464346444646222C0A222C752063202346434644
+ 4645222C0A222C7620632023464246434645222C0A222C772063202346444645
+ 4645222C0A222C7820632023453846324546222C0A222C792063202335363831
+ 4345222C0A222C7A20632023444141363337222C0A222C412063202346464644
+ 4638222C0A222C4220632023464646444636222C0A222C432063202346464643
+ 4635222C0A222C4420632023464546434633222C0A222C452063202346344534
+ 3941222C0A222C4620632023463745363941222C0A222C472063202346364536
+ 3942222C0A222C4820632023463545353944222C0A222C492063202346354535
+ 3945222C0A222C4A20632023463445353946222C0A222C4B2063202346384633
+ 4441222C0A222C4C20632023454546344644222C0A222C4D2063202335343830
+ 4341222C0A222C4E20632023444141313336222C0A222C4F2063202346454643
+ 4636222C0A222C5020632023463845353934222C0A222C512063202346384535
+ 3933222C0A222C5220632023463845353931222C0A222C532063202345394442
+ 3933222C0A222C5420632023453344373933222C0A222C552063202344434432
+ 3933222C0A222C5620632023443743453930222C0A222C572063202343464338
+ 3843222C0A222C5820632023433643313836222C0A222C592063202344364438
+ 4339222C0A222C5A20632023343437344335222C0A222C302063202335333746
+ 4341222C0A222C3120632023444139413336222C0A222C322063202346444641
+ 4632222C0A222C3320632023463845363934222C0A222C342063202346384535
+ 3932222C0A222C3520632023463845353930222C0A222C362063202346384533
+ 3842222C0A222C3720632023463745323836222C0A222C382063202346374531
+ 3746222C0A222C3920632023463644453737222C0A222C402063202346364443
+ 3643222C0A222C2320632023463444393545222C0A222C3B2063202346334435
+ 3446222C0A222C3A20632023464246324343222C0A222C3D2063202346454641
+ 4546222C0A222C2B20632023463845343846222C0A222C252063202346384533
+ 3839222C0A222C2420632023463745313832222C0A222C282063202346374446
+ 3741222C0A222C2920632023463644453731222C0A222C5B2063202346354442
+ 3637222C0A222C5D20632023463444383542222C0A222D2E2063202346334434
+ 3444222C0A222D2C20632023463244313430222C0A222D2D2063202346424632
+ 4341222C0A222D2A20632023443938453333222C0A222D612063202346414630
+ 4443222C0A222D6220632023463645313938222C0A222D632063202346364530
+ 3935222C0A222D6420632023463644463932222C0A222D652063202346354445
+ 3845222C0A222D6620632023463544433839222C0A222D672063202346344441
+ 3835222C0A222D6820632023463444393830222C0A222D692063202346334437
+ 3741222C0A222D6A20632023463344353734222C0A222D6B2063202346324433
+ 3730222C0A222D6C20632023463845414332222C0A222D6D2063202344383836
+ 3243222C0A222D6E20632023443838383244222C0A222D6F2063202344383837
+ 3244222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2C2E2D2E2A2E2A2E612E622E63
+ 2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E642E652E662E672E68
+ 2E692E6A2E6B2E6C2E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E6D2E6E2E6F
+ 2E702E712E722E732E742E752E76222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2A
+ 2E772E782E792E7A2E412E422E432E442E45222C0A222E2E2E2E2E2E2E2E2E2E
+ 2E2E2E2A2E462E472E482E492E4A2E4B2E4C2E4D2E4E222C0A222E4F2E502E51
+ 2E512E512E522E532E542E552E552E562E572E582E412E592E5A222C0A222E30
+ 2E312E322E332E342E322E352E362E372E382E392E402E232E3B2E3A2E3D222C
+ 0A222E2B2E252E242E282E292E5B2E5D2C2E2C2C2C2D2C2C2C2A2C612C622C2E
+ 2C63222C0A222C642C652C662C672C682C692C692C692C692C692C692C692C69
+ 2C692C6A2C6B222C0A222C6C2C6D2C6E2C6F2C702C712C722C732C742C742C75
+ 2C762C772C692C782C79222C0A222C7A2E322C412C422C432C442C452C462C47
+ 2C482C492C4A2C4B2C692C4C2C4D222C0A222C4E2C4F2C502C512C512C522C53
+ 2C542C552C562C572C582C592C692C5A2C30222C0A222C312C322C332C342C35
+ 2C362C372C382C392C402C232C3B2C3A2C692E2E2E2E222C0A222C692C3D2C51
+ 2C2B2C252C242C282C292C5B2C5D2D2E2D2C2D2D2C692E2E2E2E222C0A222D2A
+ 2D612D622D632D642D652D662D672D682D692D6A2D6B2D6C2C692E2E2E2E222C
+ 0A222D6D2D6E2D6F2D6E2D6E2D6E2D6E2D6E2D6E2D6E2D6E2D6F2D6E2D6D2E2E
+ 2E2E227D0A
+ }
+ OnClick = AOpenExecute
+ end
+ object MISave: TMenuItem
+ Action = ASave
+ Bitmap.Data = {
+ 010C00002F2A2058504D202A2F0A7374617469632063686172202A6772617068
+ 69635B5D203D207B0A223136203136203135332032222C0A222E2E2063204E6F
+ 6E65222C0A222E2C20632023333636424243222C0A222E2D2063202333363642
+ 4242222C0A222E2A20632023333636414242222C0A222E612063202333393643
+ 4243222C0A222E6220632023334236454244222C0A222E632063202333413644
+ 4242222C0A222E6420632023333836424242222C0A222E652063202333453730
+ 4242222C0A222E6620632023443145304636222C0A222E672063202344314530
+ 4637222C0A222E6820632023463846424645222C0A222E692063202346374642
+ 4645222C0A222E6A20632023463646394644222C0A222E6B2063202346304635
+ 4643222C0A222E6C20632023454146304641222C0A222E6D2063202345444632
+ 4642222C0A222E6E20632023463746414644222C0A222E6F2063202345424631
+ 4642222C0A222E7020632023444645394638222C0A222E712063202342444430
+ 4543222C0A222E7220632023354538394339222C0A222E732063202344314446
+ 4636222C0A222E7420632023383041414539222C0A222E752063202346364641
+ 4645222C0A222E7620632023463646414644222C0A222E772063202336343843
+ 4338222C0A222E7820632023454546334642222C0A222E792063202345414631
+ 4642222C0A222E7A20632023463246364643222C0A222E412063202346314636
+ 4643222C0A222E4220632023453245434639222C0A222E432063202344424537
+ 4638222C0A222E4420632023424144304545222C0A222E452063202344304446
+ 4636222C0A222E4620632023374541384538222C0A222E472063202345394631
+ 4641222C0A222E4820632023454546344642222C0A222E492063202345384630
+ 4641222C0A222E4A20632023444445384638222C0A222E4B2063202344424536
+ 4637222C0A222E4C20632023374141334531222C0A222E4D2063202343334435
+ 4546222C0A222E4E20632023333536394237222C0A222E4F2063202343434444
+ 4635222C0A222E5020632023374541384537222C0A222E512063202336363844
+ 4339222C0A222E5220632023453946304641222C0A222E532063202346334638
+ 4644222C0A222E5420632023463846414645222C0A222E552063202345464634
+ 4643222C0A222E5620632023444645394639222C0A222E572063202344424537
+ 4637222C0A222E5820632023443945354637222C0A222E592063202337384132
+ 4530222C0A222E5A20632023413943324537222C0A222E302063202333353638
+ 4236222C0A222E3120632023433944434634222C0A222E322063202337444137
+ 4537222C0A222E3320632023453145434639222C0A222E342063202345334544
+ 4639222C0A222E3520632023454546344643222C0A222E362063202346334637
+ 4644222C0A222E3720632023453545444641222C0A222E382063202344384535
+ 4636222C0A222E3920632023373741304445222C0A222E402063202341344245
+ 4534222C0A222E2320632023333436374234222C0A222E3B2063202343374439
+ 4634222C0A222E3A20632023374441364536222C0A222E3D2063202336353844
+ 4339222C0A222E2B20632023363738454339222C0A222E252063202336433932
+ 4342222C0A222E2420632023364439324342222C0A222E282063202336393930
+ 4341222C0A222E2920632023363538434338222C0A222E5B2063202337343943
+ 4441222C0A222E5D20632023394642414531222C0A222C2E2063202333343636
+ 4233222C0A222C2C20632023433544384632222C0A222C2D2063202337424134
+ 4533222C0A222C2A20632023374141334533222C0A222C612063202337414134
+ 4533222C0A222C6220632023374241344532222C0A222C632063202337424133
+ 4532222C0A222C6420632023374241334531222C0A222C652063202337394132
+ 4531222C0A222C6620632023373741304446222C0A222C672063202337363946
+ 4445222C0A222C6820632023373439454444222C0A222C692063202337323943
+ 4442222C0A222C6A20632023373439444443222C0A222C6B2063202339414235
+ 4444222C0A222C6C20632023333436354231222C0A222C6D2063202343324435
+ 4632222C0A222C6E20632023373841314530222C0A222C6F2063202337353945
+ 4445222C0A222C7020632023373339424441222C0A222C712063202337333942
+ 4439222C0A222C7220632023393542304441222C0A222C732063202333333634
+ 4146222C0A222C7420632023424544324630222C0A222C752063202337414133
+ 4532222C0A222C7620632023373739464445222C0A222C772063202337363946
+ 4444222C0A222C7820632023373239424439222C0A222C792063202337313939
+ 4438222C0A222C7A20632023373039394436222C0A222C412063202338454142
+ 4435222C0A222C4220632023333336334144222C0A222C432063202333363641
+ 4241222C0A222C4420632023424244304546222C0A222C452063202337414132
+ 4532222C0A222C4620632023364439364433222C0A222C472063202338414137
+ 4432222C0A222C4820632023333236324142222C0A222C492063202342384345
+ 4546222C0A222C4A20632023463746414645222C0A222C4B2063202338384330
+ 3632222C0A222C4C20632023364139334346222C0A222C4D2063202338344133
+ 4345222C0A222C4E20632023333236314141222C0A222C4F2063202333383643
+ 4242222C0A222C5020632023423643434545222C0A222C512063202337414132
+ 4531222C0A222C5220632023433244434246222C0A222C532063202336383930
+ 4344222C0A222C5420632023383139454343222C0A222C552063202333323631
+ 4138222C0A222C5620632023333736424241222C0A222C572063202342334341
+ 4544222C0A222C5820632023374141324530222C0A222C592063202336353844
+ 4341222C0A222C5A20632023374339424339222C0A222C302063202333313630
+ 4137222C0A222C3120632023333536414241222C0A222C322063202341444336
+ 4542222C0A222C3320632023414443354541222C0A222C342063202337433941
+ 4338222C0A222C3520632023373939384337222C0A222C362063202333353639
+ 4239222C0A222C3720632023333536394238222C0A222C382063202333353638
+ 4237222C0A222C3920632023333536384235222C0A222C402063202333343636
+ 4232222C0A222C2320632023333336354230222C0A222C3B2063202333333634
+ 4145222C0A222C3A20632023333236334143222C0A222C3D2063202333323632
+ 4141222C0A222C2B20632023333236314139222C0A222C252063202333313630
+ 4138222C0A222C2420632023333136304136222C0A222C282063202333313631
+ 4138222C0A222E2E2E2C2E2C2E2C2E2C2E2D2E2D2E2A2E2A2E612E622E632E64
+ 2E652E2E2E2E222C0A222E2C2E662E672E682E692E6A2E6B2E6C2E6D2E6A2E6E
+ 2E6F2E702E712E722E2E222C0A222E2C2E732E742E752E762E772E782E792E7A
+ 2E682E412E422E432E442E712E65222C0A222E2C2E452E462E412E412E772E47
+ 2E482E6E2E6A2E492E4A2E4B2E4C2E4D2E4E222C0A222E2C2E4F2E502E492E49
+ 2E512E522E532E542E552E562E572E582E592E5A2E30222C0A222E2D2E312E32
+ 2E332E332E342E352E6E2E362E372E572E582E382E392E402E23222C0A222E2D
+ 2E3B2E3A2E772E3D2E2B2E252E242E282E292E772E772E772E5B2E5D2C2E222C
+ 0A222E2A2C2C2C2D2C2A2C612C622C632C642C652C662C672C682C692C6A2C6B
+ 2C6C222C0A222E2A2C6D2C2A2C2A2C632C632C622C652C6E2E392C6F2C6A2C70
+ 2C712C722C73222C0A222E2A2C742C752C752E4C2C632C642C6E2C762C772C6A
+ 2C782C792C7A2C412C42222C0A222C432C442C452E682E682E682E682E682E68
+ 2E682E682E682E682C462C472C48222C0A222E642C492C652C4A2C4B2C4B2C4B
+ 2C4B2C4B2C4B2C4B2C4B2E6A2C4C2C4D2C4E222C0A222C4F2C502C512C4A2C52
+ 2C522C522C522C522C522C522C522E6A2C532C542C55222C0A222C562C572C58
+ 2C4A2C4B2C4B2C4B2C4B2C4B2C4B2C4B2C4B2E6A2C592C5A2C30222C0A222C31
+ 2C322C332E682E682E682E682E682E682E682E682E682E682C342C352C30222C
+ 0A222C432C362C372C382C392E232C402C232C3B2C3A2C3D2C2B2C252C302C24
+ 2C28227D0A
+ }
+ OnClick = ASaveExecute
+ end
+ object MISaveAs: TMenuItem
+ Action = ASaveAs
+ OnClick = ASaveAsExecute
+ end
+ object MISep1: TMenuItem
+ Caption = '-'
+ end
+ object MIQuit: TMenuItem
+ Action = AQuit
+ Bitmap.Data = {
+ 910D00002F2A2058504D202A2F0A7374617469632063686172202A6772617068
+ 69635B5D203D207B0A223136203136203137382032222C0A222E2E2063204E6F
+ 6E65222C0A222E2C20632023443439433644222C0A222E2D2063202344323941
+ 3641222C0A222E2A20632023434639373636222C0A222E612063202344363945
+ 3730222C0A222E6220632023444142313835222C0A222E632063202342393931
+ 3541222C0A222E6420632023434239333630222C0A222E652063202338303830
+ 3830222C0A222E6620632023374537453745222C0A222E672063202337433743
+ 3743222C0A222E6820632023374137413741222C0A222E692063202337373737
+ 3737222C0A222E6A20632023373537353735222C0A222E6B2063202337323732
+ 3732222C0A222E6C20632023443439453731222C0A222E6D2063202344363945
+ 3646222C0A222E6E20632023444342323837222C0A222E6F2063202345384433
+ 4142222C0A222E7020632023453644304139222C0A222E712063202342383930
+ 3538222C0A222E7220632023433638453539222C0A222E732063202337443744
+ 3744222C0A222E7420632023393939393939222C0A222E752063202339413941
+ 3941222C0A222E7620632023394239423942222C0A222E772063202344333944
+ 3646222C0A222E7820632023453744314141222C0A222E792063202345374431
+ 4142222C0A222E7A20632023453143373938222C0A222E412063202344454332
+ 3931222C0A222E4220632023423738463536222C0A222E432063202343313839
+ 3532222C0A222E4420632023353939313532222C0A222E452063202339393941
+ 3939222C0A222E4620632023394339433943222C0A222E472063202344303941
+ 3643222C0A222E4820632023453543454137222C0A222E492063202344464331
+ 3846222C0A222E4A20632023444342443839222C0A222E4B2063202344434244
+ 3842222C0A222E4C20632023423638443533222C0A222E4D2063202342433834
+ 3442222C0A222E4E20632023343538413344222C0A222E4F2063202334463841
+ 3439222C0A222E5020632023394439443944222C0A222E512063202343433936
+ 3636222C0A222E5220632023453343424132222C0A222E532063202344414239
+ 3833222C0A222E5420632023444142393834222C0A222E552063202342353842
+ 3531222C0A222E5620632023423637453433222C0A222E572063202334443934
+ 3434222C0A222E5820632023344239313432222C0A222E592063202334383844
+ 3346222C0A222E5A20632023343538393344222C0A222E302063202336354134
+ 3544222C0A222E3120632023363141303541222C0A222E322063202334423833
+ 3435222C0A222E3320632023394539453945222C0A222E342063202343393932
+ 3630222C0A222E3520632023453243373945222C0A222E362063202344414238
+ 3833222C0A222E3720632023443742343744222C0A222E382063202344374233
+ 3745222C0A222E3920632023423438393446222C0A222E402063202342313739
+ 3342222C0A222E2320632023344139303431222C0A222E3B2063202339464432
+ 3934222C0A222E3A20632023394144303931222C0A222E3D2063202339364344
+ 3844222C0A222E2B20632023393243423839222C0A222E252063202338444338
+ 3834222C0A222E2420632023353839383531222C0A222E282063202334363743
+ 3431222C0A222E2920632023394639463946222C0A222E5B2063202343343845
+ 3541222C0A222E5D20632023453043333938222C0A222C2E2063202344374233
+ 3743222C0A222C2C20632023443641463734222C0A222C2D2063202345444334
+ 3545222C0A222C2A20632023423338383442222C0A222C612063202341423733
+ 3334222C0A222C6220632023343638423345222C0A222C632063202339394345
+ 3846222C0A222C6420632023383743363744222C0A222C652063202338314333
+ 3738222C0A222C6620632023374343303733222C0A222C672063202337434330
+ 3734222C0A222C6820632023383143323739222C0A222C692063202334463930
+ 3439222C0A222C6A20632023353737463534222C0A222C6B2063202342463839
+ 3534222C0A222C6C20632023444442463934222C0A222C6D2063202344344144
+ 3735222C0A222C6E20632023453142383633222C0A222C6F2063202346464434
+ 3442222C0A222C7020632023423838423432222C0A222C712063202341363645
+ 3243222C0A222C7220632023343238373342222C0A222C732063202338384336
+ 3830222C0A222C7420632023383343333742222C0A222C752063202337464331
+ 3737222C0A222C7620632023344438463437222C0A222C772063202333463734
+ 3342222C0A222C7820632023413141314131222C0A222C792063202342413834
+ 3443222C0A222C7A20632023444242423844222C0A222C412063202344314138
+ 3645222C0A222C4220632023443141363636222C0A222C432063202344464234
+ 3546222C0A222C4420632023423138353437222C0A222C452063202341313639
+ 3235222C0A222C4620632023334538323337222C0A222C472063202333423745
+ 3334222C0A222C4820632023333737393331222C0A222C492063202333343735
+ 3245222C0A222C4A20632023353039313439222C0A222C4B2063202334433846
+ 3436222C0A222C4C20632023334437333339222C0A222C4D2063202341324132
+ 4132222C0A222C4E20632023423437453435222C0A222C4F2063202344394237
+ 3838222C0A222C5020632023434641333637222C0A222C512063202343433945
+ 3631222C0A222C5220632023434339463633222C0A222C532063202342313833
+ 3435222C0A222C5420632023394336343146222C0A222C552063202336303630
+ 3630222C0A222C5620632023413041304130222C0A222C572063202334313736
+ 3344222C0A222C5820632023333937313336222C0A222C592063202341334133
+ 4133222C0A222C5A20632023423037393344222C0A222C302063202344374233
+ 3832222C0A222C3120632023434339463632222C0A222C322063202343393941
+ 3541222C0A222C3320632023434139423545222C0A222C342063202341463831
+ 3433222C0A222C3520632023393836303139222C0A222C362063202335433543
+ 3543222C0A222C3720632023343037333343222C0A222C382063202341314131
+ 4130222C0A222C3920632023413441344134222C0A222C402063202341413734
+ 3336222C0A222C2320632023443441463744222C0A222C3B2063202343393941
+ 3542222C0A222C3A20632023433739353534222C0A222C3D2063202343383936
+ 3538222C0A222C2B20632023414538303431222C0A222C252063202339343543
+ 3133222C0A222C2420632023353835383538222C0A222C282063202341354135
+ 4135222C0A222C2920632023413536463246222C0A222C5B2063202344324142
+ 3738222C0A222C5D20632023443341423738222C0A222D2E2063202344314137
+ 3733222C0A222D2C20632023434441303639222C0A222D2D2063202341453746
+ 3430222C0A222D2A20632023393135393046222C0A222D612063202337313731
+ 3731222C0A222D6220632023353435343534222C0A222D632063202335313531
+ 3531222C0A222D6420632023344634463446222C0A222D652063202334433443
+ 3443222C0A222D6620632023344134413441222C0A222D672063202334373437
+ 3437222C0A222D6820632023343534353435222C0A222D692063202339443637
+ 3235222C0A222D6A20632023413837343332222C0A222D6B2063202341463743
+ 3344222C0A222D6C20632023423538343437222C0A222D6D2063202342413841
+ 3445222C0A222D6E20632023414437453345222C0A222D6F2063202338463537
+ 3043222C0A222D7020632023393235413130222C0A222D712063202339303538
+ 3044222C0A222D7220632023393235433133222C0A222E2E2E2E2E2E2E2E2E2E
+ 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2C2E2D2E2A222C0A222E2E2E2E2E2E
+ 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E612E2C2E622E632E64222C0A222E2E
+ 2E2E2E652E662E672E682E692E6A2E6B2E6C2E6D2E6E2E6F2E702E712E72222C
+ 0A222E2E2E2E2E732E742E742E752E752E762E762E772E782E792E7A2E412E42
+ 2E43222C0A222E2E2E2E2E682E742E442E452E762E462E462E472E482E492E4A
+ 2E4B2E4C2E4D222C0A222E2E2E2E2E692E752E4E2E4F2E462E502E502E512E52
+ 2E4A2E532E542E552E56222C0A222E572E582E592E5A2E302E312E322E332E33
+ 2E342E352E362E372E382E392E40222C0A222E232E3B2E3A2E3D2E2B2E252E24
+ 2E282E292E5B2E5D2C2E2C2C2C2D2C2A2C61222C0A222C622C632C642C652C66
+ 2C672C682C692C6A2C6B2C6C2C6D2C6E2C6F2C702C71222C0A222C722E2B2E25
+ 2C732C742C752C762C772C782C792C7A2C412C422C432C442C45222C0A222C46
+ 2C472C482C492C4A2C4B2C4C2C782C4D2C4E2C4F2C502C512C522C532C54222C
+ 0A222E2E2E2E2C552C562C572C582C4D2C4D2C592C5A2C302C312C322C332C34
+ 2C35222C0A222E2E2E2E2C362C782C372C382C592C592C392C402C232C3B2C3A
+ 2C3D2C2B2C25222C0A222E2E2E2E2C242C4D2C4D2C592C392C392C282C292C5B
+ 2C5D2D2E2D2C2D2D2D2A222C0A222E742D612D622D632D642D652D662D672D68
+ 2D692D6A2D6B2D6C2D6D2D6E2D6F222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E
+ 2E2E2E2E2E2E2E2E2E2E2D702D712D722D6F227D0A
+ }
+ OnClick = AQuitExecute
+ end
+ end
+ object MItems: TMenuItem
+ Caption = '&Items'
+ object MINewItem: TMenuItem
+ Action = ANewItem
+ Bitmap.Data = {
+ 36050000424D3605000000000000360400002800000010000000100000000100
+ 0800000000000001000000000000000000000000000000000000000000000000
+ 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA
+ A6000020400000206000002080000020A0000020C0000020E000004000000040
+ 20000040400000406000004080000040A0000040C0000040E000006000000060
+ 20000060400000606000006080000060A0000060C0000060E000008000000080
+ 20000080400000806000008080000080A0000080C0000080E00000A0000000A0
+ 200000A0400000A0600000A0800000A0A00000A0C00000A0E00000C0000000C0
+ 200000C0400000C0600000C0800000C0A00000C0C00000C0E00000E0000000E0
+ 200000E0400000E0600000E0800000E0A00000E0C00000E0E000400000004000
+ 20004000400040006000400080004000A0004000C0004000E000402000004020
+ 20004020400040206000402080004020A0004020C0004020E000404000004040
+ 20004040400040406000404080004040A0004040C0004040E000406000004060
+ 20004060400040606000406080004060A0004060C0004060E000408000004080
+ 20004080400040806000408080004080A0004080C0004080E00040A0000040A0
+ 200040A0400040A0600040A0800040A0A00040A0C00040A0E00040C0000040C0
+ 200040C0400040C0600040C0800040C0A00040C0C00040C0E00040E0000040E0
+ 200040E0400040E0600040E0800040E0A00040E0C00040E0E000800000008000
+ 20008000400080006000800080008000A0008000C0008000E000802000008020
+ 20008020400080206000802080008020A0008020C0008020E000804000008040
+ 20008040400080406000804080008040A0008040C0008040E000806000008060
+ 20008060400080606000806080008060A0008060C0008060E000808000008080
+ 20008080400080806000808080008080A0008080C0008080E00080A0000080A0
+ 200080A0400080A0600080A0800080A0A00080A0C00080A0E00080C0000080C0
+ 200080C0400080C0600080C0800080C0A00080C0C00080C0E00080E0000080E0
+ 200080E0400080E0600080E0800080E0A00080E0C00080E0E000C0000000C000
+ 2000C0004000C0006000C0008000C000A000C000C000C000E000C0200000C020
+ 2000C0204000C0206000C0208000C020A000C020C000C020E000C0400000C040
+ 2000C0404000C0406000C0408000C040A000C040C000C040E000C0600000C060
+ 2000C0604000C0606000C0608000C060A000C060C000C060E000C0800000C080
+ 2000C0804000C0806000C0808000C080A000C080C000C080E000C0A00000C0A0
+ 2000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0E000C0C00000C0C0
+ 2000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0A000808080000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00F6F6F6F6F6F6
+ F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F618181800F6F6F6F6F6F6F6F6F6F6F6
+ 181802180010F6F6F6F6F6F6F6F6F61802022828181800F6F6F6F6F6F6F60202
+ 2828302802181800F6F6F6F6F6F600022830BA3028021800F6F6F6F6F6F6FB28
+ 30BAFA2828280218F6F6F600F6F60030BA00BABA28282802F6F6F6FB00F6FB28
+ 00FBBABABABA2828F6F6F6F6FB000000FBBABABABABABA78F6F6F600F6FBFBFB
+ 7800000079B9B9F6F6F6F6FBF6FBFBFBB9FBFBFBFA79F6F6F6F6F6F600FBFBFB
+ 00F6B9B9F6F6F6F6F6F6F600FBF600F6FB00F6F6F6F6F6F6F6F6F6FBF6F6FBF6
+ F6FBF6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6
+ }
+ OnClick = ANewItemExecute
+ end
+ object MIDeleteItem: TMenuItem
+ Action = ADeleteItem
+ Bitmap.Data = {
+ 36050000424D3605000000000000360400002800000010000000100000000100
+ 0800000000000001000000000000000000000000000000000000000000000000
+ 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA
+ A6000020400000206000002080000020A0000020C0000020E000004000000040
+ 20000040400000406000004080000040A0000040C0000040E000006000000060
+ 20000060400000606000006080000060A0000060C0000060E000008000000080
+ 20000080400000806000008080000080A0000080C0000080E00000A0000000A0
+ 200000A0400000A0600000A0800000A0A00000A0C00000A0E00000C0000000C0
+ 200000C0400000C0600000C0800000C0A00000C0C00000C0E00000E0000000E0
+ 200000E0400000E0600000E0800000E0A00000E0C00000E0E000400000004000
+ 20004000400040006000400080004000A0004000C0004000E000402000004020
+ 20004020400040206000402080004020A0004020C0004020E000404000004040
+ 20004040400040406000404080004040A0004040C0004040E000406000004060
+ 20004060400040606000406080004060A0004060C0004060E000408000004080
+ 20004080400040806000408080004080A0004080C0004080E00040A0000040A0
+ 200040A0400040A0600040A0800040A0A00040A0C00040A0E00040C0000040C0
+ 200040C0400040C0600040C0800040C0A00040C0C00040C0E00040E0000040E0
+ 200040E0400040E0600040E0800040E0A00040E0C00040E0E000800000008000
+ 20008000400080006000800080008000A0008000C0008000E000802000008020
+ 20008020400080206000802080008020A0008020C0008020E000804000008040
+ 20008040400080406000804080008040A0008040C0008040E000806000008060
+ 20008060400080606000806080008060A0008060C0008060E000808000008080
+ 20008080400080806000808080008080A0008080C0008080E00080A0000080A0
+ 200080A0400080A0600080A0800080A0A00080A0C00080A0E00080C0000080C0
+ 200080C0400080C0600080C0800080C0A00080C0C00080C0E00080E0000080E0
+ 200080E0400080E0600080E0800080E0A00080E0C00080E0E000C0000000C000
+ 2000C0004000C0006000C0008000C000A000C000C000C000E000C0200000C020
+ 2000C0204000C0206000C0208000C020A000C020C000C020E000C0400000C040
+ 2000C0404000C0406000C0408000C040A000C040C000C040E000C0600000C060
+ 2000C0604000C0606000C0608000C060A000C060C000C060E000C0800000C080
+ 2000C0804000C0806000C0808000C080A000C080C000C080E000C0A00000C0A0
+ 2000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0E000C0C00000C0C0
+ 2000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0A000808080000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00F6F6F6F6F6F6
+ F6F6F6F6F6F6F6F6F6F6F6F6F9F9010A00F6F6F600F9F900F6F6F6F6F6F9F9F9
+ 0100F6000DF900F6F6F6F6F6F6F6F9F9F90100F9F953F6F6F6F6F6F6F6F6F65C
+ F9F9F9F954F6F6F6F6F6F6F6F6F65C00F9F9F9F90052F6F6F6F6F6F6F65D00F9
+ F91266F9F90049F6F6F6F6F6F600F9F967BF675EF9F900F6F6F6F6F600F9F967
+ BF6F66665EF9F9F6F6F6F6F6F9F967BF67BFBF665E66F9F6F6F6F6F6F65D5D6F
+ BFBFBFBFBF5E66F6F6F6F6F6F66FBFBFBFBFBFBFBFBF6FF6F6F6F6F6F6F66F6F
+ 777777777777F6F6F6F6F6F6F6F6F677776F6F6F77F6F6F6F6F6F6F6F6F6F6F6
+ F67777F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6
+ }
+ OnClick = ADeleteItemExecute
+ end
+ end
+ object MRun: TMenuItem
+ Caption = '&Run'
+ object MITest: TMenuItem
+ Action = ATest
+ OnClick = ATestExecute
+ end
+ object MIRun: TMenuItem
+ Action = AExecute
+ OnClick = ATestExecute
+ end
+ end
+ end
+ object ALMain: TActionList
+ Images = ILMain
+ left = 80
+ top = 96
+ object ANew: TAction
+ Category = 'File'
+ Caption = '&New'
+ DisableIfNoHandler = True
+ ImageIndex = 0
+ OnExecute = ANewExecute
+ ShortCut = 16462
+ end
+ object AOpen: TAction
+ Category = 'File'
+ Caption = '&Open'
+ DisableIfNoHandler = True
+ ImageIndex = 1
+ OnExecute = AOpenExecute
+ ShortCut = 16463
+ end
+ object ASave: TAction
+ Category = 'File'
+ Caption = '&Save'
+ DisableIfNoHandler = True
+ ImageIndex = 2
+ OnExecute = ASaveExecute
+ OnUpdate = ASaveUpdate
+ ShortCut = 16467
+ end
+ object ASaveAs: TAction
+ Category = 'File'
+ Caption = 'Save &as'
+ DisableIfNoHandler = True
+ OnExecute = ASaveAsExecute
+ end
+ object AQuit: TAction
+ Category = 'File'
+ Caption = '&Quit'
+ DisableIfNoHandler = True
+ ImageIndex = 3
+ OnExecute = AQuitExecute
+ ShortCut = 16465
+ end
+ object ANewItem: TAction
+ Category = 'Items'
+ Caption = '&New'
+ DisableIfNoHandler = True
+ ImageIndex = 4
+ OnExecute = ANewItemExecute
+ ShortCut = 16449
+ end
+ object ADeleteItem: TAction
+ Category = 'Items'
+ Caption = '&Delete'
+ DisableIfNoHandler = True
+ ImageIndex = 5
+ OnExecute = ADeleteItemExecute
+ OnUpdate = ADeleteItemUpdate
+ ShortCut = 16452
+ end
+ object ATest: TAction
+ Category = 'Execute'
+ Caption = '&Test configuration'
+ DisableIfNoHandler = True
+ OnExecute = ATestExecute
+ ShortCut = 16468
+ end
+ object AExecute: TAction
+ Category = 'Execute'
+ Caption = '&Run with configuration'
+ DisableIfNoHandler = True
+ OnExecute = ATestExecute
+ OnUpdate = AExecuteUpdate
+ ShortCut = 16453
+ end
+ end
+ object SDConfig: TSaveDialog
+ Title = 'Save configuration file as'
+ Filter = 'Configuration files|*.cfg|All files|*.*'
+ FilterIndex = 0
+ Options = [ofOverwritePrompt, ofPathMustExist, ofEnableSizing, ofViewDetail]
+ left = 120
+ top = 64
+ end
+ object ODConfig: TOpenDialog
+ Title = 'Open existing configuration file'
+ Filter = 'Configuration files|*.cfg|All files|*.*'
+ FilterIndex = 0
+ Options = [ofFileMustExist, ofEnableSizing, ofViewDetail]
+ left = 120
+ top = 96
+ end
+ object ILMain: TImageList
+ left = 42
+ top = 66
+ Bitmap = {
+ 6C69060000001000000010000000E10C00002F2A2058504D202A2F0A73746174
+ 69632063686172202A677261706869635B5D203D207B0A223136203136203136
+ 372032222C0A222E2E2063204E6F6E65222C0A222E2C20632023344438424338
+ 222C0A222E2D20632023344638434338222C0A222E2A20632023344638444338
+ 222C0A222E6120632023344638434339222C0A222E6220632023344638424337
+ 222C0A222E6320632023344238394335222C0A222E6420632023334237364334
+ 222C0A222E6520632023343938354334222C0A222E6620632023454346324637
+ 222C0A222E6720632023454546344638222C0A222E6820632023454446344638
+ 222C0A222E6920632023454446334638222C0A222E6A20632023454346324638
+ 222C0A222E6B20632023443745364632222C0A222E6C20632023374442324532
+ 222C0A222E6D20632023363539344442222C0A222E6E20632023344238384335
+ 222C0A222E6F20632023463246364641222C0A222E7020632023433745304641
+ 222C0A222E7120632023433945314642222C0A222E7220632023433945324642
+ 222C0A222E7320632023433845304642222C0A222E7420632023433544464639
+ 222C0A222E7520632023433144424638222C0A222E7620632023423844364634
+ 222C0A222E7720632023463846424646222C0A222E7820632023423444384636
+ 222C0A222E7920632023374442304531222C0A222E7A20632023363439324442
+ 222C0A222E4120632023344338394336222C0A222E4220632023463146354639
+ 222C0A222E4320632023434445334643222C0A222E4420632023434545334642
+ 222C0A222E4520632023434445334642222C0A222E4620632023434245324642
+ 222C0A222E4720632023433845304639222C0A222E4820632023433244434638
+ 222C0A222E4920632023424144364635222C0A222E4A20632023463846424644
+ 222C0A222E4B20632023434445364643222C0A222E4C20632023433945354641
+ 222C0A222E4D20632023383442364532222C0A222E4E20632023343237394246
+ 222C0A222E4F20632023344238394336222C0A222E5020632023434645334643
+ 222C0A222E5120632023443045344642222C0A222E5220632023434645344643
+ 222C0A222E5320632023434145314641222C0A222E5420632023433444444639
+ 222C0A222E5520632023424344394636222C0A222E5620632023444645394634
+ 222C0A222E5720632023463346374642222C0A222E5820632023453945464635
+ 222C0A222E5920632023343537454332222C0A222E5A20632023463046344639
+ 222C0A222E3020632023443345364643222C0A222E3120632023443445364643
+ 222C0A222E3220632023443345374644222C0A222E3320632023443145344643
+ 222C0A222E3420632023433845304641222C0A222E3520632023424244364635
+ 222C0A222E3620632023423544344633222C0A222E3720632023423344324631
+ 222C0A222E3820632023463046344638222C0A222E3920632023343638324334
+ 222C0A222E4020632023344138384336222C0A222E2320632023454646344639
+ 222C0A222E3B20632023443745374645222C0A222E3A20632023443645374644
+ 222C0A222E3D20632023443545374644222C0A222E2B20632023443445364644
+ 222C0A222E2520632023443245364643222C0A222E2420632023434345314642
+ 222C0A222E2820632023433744464641222C0A222E2920632023424444414636
+ 222C0A222E5B20632023424244384636222C0A222E5D20632023454646344641
+ 222C0A222C2E20632023343638334336222C0A222C2C20632023343938384336
+ 222C0A222C2D20632023454446344639222C0A222C2A20632023443845384645
+ 222C0A222C6120632023443745384645222C0A222C6220632023443645374645
+ 222C0A222C6320632023443345354644222C0A222C6420632023433344444639
+ 222C0A222C6520632023454446344641222C0A222C6620632023343538324336
+ 222C0A222C6720632023343738344336222C0A222C6820632023454346334639
+ 222C0A222C6920632023443645384645222C0A222C6A20632023434345334642
+ 222C0A222C6B20632023433644464641222C0A222C6C20632023454146324641
+ 222C0A222C6D20632023343238304336222C0A222C6E20632023343538324335
+ 222C0A222C6F20632023454246324638222C0A222C7020632023443545364644
+ 222C0A222C7120632023434445324643222C0A222C7220632023434245314642
+ 222C0A222C7320632023463246374642222C0A222C7420632023334637434335
+ 222C0A222C7520632023343238304335222C0A222C7620632023453846314638
+ 222C0A222C7720632023443545354645222C0A222C7820632023443345354643
+ 222C0A222C7920632023434545324643222C0A222C7A20632023434345324643
+ 222C0A222C4120632023433945304642222C0A222C4220632023433845314642
+ 222C0A222C4320632023463746414644222C0A222C4420632023334237364331
+ 222C0A222C4520632023343037434334222C0A222C4620632023453646304637
+ 222C0A222C4720632023353542344638222C0A222C4820632023353642344637
+ 222C0A222C4920632023353442354637222C0A222C4A20632023353342344638
+ 222C0A222C4B20632023353342324638222C0A222C4C20632023353242334637
+ 222C0A222C4D20632023353142324637222C0A222C4E20632023344642324637
+ 222C0A222C4F20632023463546394643222C0A222C5020632023333636464246
+ 222C0A222C5120632023334337384331222C0A222C5220632023453345444637
+ 222C0A222C5320632023364543324644222C0A222C5420632023413044384646
+ 222C0A222C5520632023394544374646222C0A222C5620632023394244364646
+ 222C0A222C5720632023393844374646222C0A222C5820632023393644364646
+ 222C0A222C5920632023393544364646222C0A222C5A20632023393444354646
+ 222C0A222C3020632023393344344646222C0A222C3120632023363542454642
+ 222C0A222C3220632023463446374642222C0A222C3320632023333136374242
+ 222C0A222C3420632023333837314246222C0A222C3520632023444645424635
+ 222C0A222C3620632023363842464644222C0A222C3720632023363742444643
+ 222C0A222C3820632023363442454643222C0A222C3920632023363242444643
+ 222C0A222C4020632023363342444642222C0A222C2320632023363142434642
+ 222C0A222C3B20632023363042454643222C0A222C3A20632023363242434643
+ 222C0A222C3D20632023324436344239222C0A222C2B20632023333336394243
+ 222C0A222C2520632023454146314638222C0A222C2420632023444645434637
+ 222C0A222C2820632023444545424636222C0A222C2920632023444545414636
+ 222C0A222C5B20632023444345414636222C0A222C5D20632023454246334641
+ 222C0A222D2E20632023463346374643222C0A222D2C20632023463446384643
+ 222C0A222D2D20632023464446454645222C0A222D2A20632023324136304237
+ 222C0A222D6120632023333036354241222C0A222D6220632023333136364242
+ 222C0A222D6320632023333036364241222C0A222D6420632023324636354241
+ 222C0A222D6520632023324536354239222C0A222D6620632023324536344239
+ 222C0A222D6720632023324336324237222C0A222E2E2E2E2E2C2E2D2E2D2E2D
+ 2E2D2E2A2E612E622E632E642E2E2E2E2E2E2E2E222C0A222E2E2E652E662E67
+ 2E682E692E692E692E6A2E662E6B2E6C2E6D2E2E2E2E2E2E222C0A222E2E2E6E
+ 2E6F2E702E712E722E732E742E752E762E772E782E792E7A2E2E2E2E222C0A22
+ 2E2E2E412E422E432E442E452E462E472E482E492E4A2E4B2E4C2E4D2E4E2E2E
+ 222C0A222E2E2E4F2E422E502E512E522E432E532E542E552E562E662E572E58
+ 2E592E2E222C0A222E2E2E4F2E5A2E302E312E322E332E452E342E482E352E36
+ 2E372E382E392E2E222C0A222E2E2E402E232E3B2E3A2E3D2E2B2E252E242E28
+ 2E482E292E5B2E5D2C2E2E2E222C0A222E2E2C2C2C2D2C2A2C2A2C612C622C63
+ 2E332E242E702C642E482C652C662E2E222C0A222E2E2C672C682C692C612E3A
+ 2E3A2E3D2C632E512C6A2E282C6B2C6C2C6D2E2E222C0A222E2E2C6E2C6F2C62
+ 2E3A2E3A2E3A2C702C632E332C712C722E712C732C742E2E222C0A222E2E2C75
+ 2C762C772C632C632C782C782E332C792C7A2C412C422C432C442E2E222C0A22
+ 2E2E2C452C462C472C482C492C4A2C4B2C4C2C4C2C4D2C4E2C4E2C4F2C502E2E
+ 222C0A222E2E2C512C522C532C542C552C562C572C582C592C5A2C302C312C32
+ 2C332E2E222C0A222E2E2C342C352C362C372C312C382C382C392C402C232C3B
+ 2C3A2E4A2C3D2E2E222C0A222E2E2C2B2C252C242C282C292C5B2C5B2C5D2C5D
+ 2C6C2D2E2D2C2D2D2D2A2E2E222C0A222E2E2E2E2D612D622D632D632D632D61
+ 2D642D652D652D662D662D672E2E2E2E227D0A610D00002F2A2058504D202A2F
+ 0A7374617469632063686172202A677261706869635B5D203D207B0A22313620
+ 3136203137352032222C0A222E2E2063204E6F6E65222C0A222E2C2063202339
+ 4443334541222C0A222E2D20632023393642464536222C0A222E2A2063202339
+ 3242424534222C0A222E6120632023364341304431222C0A222E622063202336
+ 4439454430222C0A222E6320632023354639364343222C0A222E642063202339
+ 3642454535222C0A222E6520632023464546464646222C0A222E662063202345
+ 3946334644222C0A222E6720632023454146334644222C0A222E682063202345
+ 3846324643222C0A222E6920632023453345464641222C0A222E6A2063202345
+ 3746324641222C0A222E6B20632023383842424541222C0A222E6C2063202335
+ 3538354346222C0A222E6D20632023393342424534222C0A222E6E2063202345
+ 4446354645222C0A222E6F20632023433544454643222C0A222E702063202343
+ 3745304642222C0A222E7120632023433244434639222C0A222E722063202342
+ 3444334635222C0A222E7320632023463346394645222C0A222E742063202343
+ 3445324641222C0A222E7520632023393343314543222C0A222E762063202334
+ 3837444333222C0A222E7720632023463046364645222C0A222E782063202343
+ 4445324643222C0A222E7920632023434445334643222C0A222E7A2063202343
+ 3844464641222C0A222E4120632023424344394637222C0A222E422063202344
+ 4445394635222C0A222E4320632023454246334641222C0A222E442063202346
+ 3346384642222C0A222E4520632023353338334341222C0A222E462063202346
+ 3146374645222C0A222E4720632023443245354643222C0A222E482063202344
+ 3145344643222C0A222E4920632023434345324642222C0A222E4A2063202343
+ 3444444639222C0A222E4B20632023424244374636222C0A222E4C2063202341
+ 4644314633222C0A222E4D20632023453445464641222C0A222E4E2063202335
+ 3838374343222C0A222E4F20632023443942343334222C0A222E502063202345
+ 3143323545222C0A222E5120632023453243333630222C0A222E522063202345
+ 3243333546222C0A222E5320632023393142424534222C0A222E542063202346
+ 3246374646222C0A222E5520632023443545374645222C0A222E562063202344
+ 3145354644222C0A222E5720632023434145304641222C0A222E582063202343
+ 3444454639222C0A222E5920632023453746324644222C0A222E5A2063202335
+ 3738374343222C0A222E3020632023444142333336222C0A222E312063202346
+ 4546454644222C0A222E3220632023464646464645222C0A222E332063202346
+ 4646454645222C0A222E3420632023464646454644222C0A222E352063202339
+ 3142414534222C0A222E3620632023463046374646222C0A222E372063202344
+ 3545374646222C0A222E3820632023443645374644222C0A222E392063202344
+ 3445364644222C0A222E4020632023443045344643222C0A222E232063202343
+ 4245334642222C0A222E3B20632023433244434641222C0A222E3A2063202345
+ 3846334645222C0A222E3D20632023353638364343222C0A222E2B2063202344
+ 4141463335222C0A222E2520632023464546434637222C0A222E242063202346
+ 3845343845222C0A222E2820632023463544453931222C0A222E292063202346
+ 3545303946222C0A222E5B20632023463645314143222C0A222E5D2063202335
+ 3238344341222C0A222C2E20632023463146374646222C0A222C2C2063202344
+ 3945394646222C0A222C2D20632023444245414646222C0A222C2A2063202344
+ 3745374646222C0A222C6120632023443245354646222C0A222C622063202343
+ 4245324646222C0A222C6320632023353538354342222C0A222C642063202344
+ 4141413336222C0A222C6520632023464446414631222C0A222C662063202346
+ 3544453934222C0A222C6720632023463444433933222C0A222C682063202345
+ 3942433634222C0A222C6920632023444139343335222C0A222C6A2063202345
+ 4646364642222C0A222C6B20632023353538334343222C0A222C6C2063202344
+ 4141423335222C0A222C6D20632023464246364538222C0A222C6E2063202345
+ 3742433730222C0A222C6F20632023453241413535222C0A222C702063202345
+ 3041353444222C0A222C7120632023454243393931222C0A222C722063202345
+ 4646334641222C0A222C7320632023464446454644222C0A222C742063202346
+ 4346444646222C0A222C7520632023464346444645222C0A222C762063202346
+ 4246434645222C0A222C7720632023464446454645222C0A222C782063202345
+ 3846324546222C0A222C7920632023353638314345222C0A222C7A2063202344
+ 4141363337222C0A222C4120632023464646444638222C0A222C422063202346
+ 4646444636222C0A222C4320632023464646434635222C0A222C442063202346
+ 4546434633222C0A222C4520632023463445343941222C0A222C462063202346
+ 3745363941222C0A222C4720632023463645363942222C0A222C482063202346
+ 3545353944222C0A222C4920632023463545353945222C0A222C4A2063202346
+ 3445353946222C0A222C4B20632023463846334441222C0A222C4C2063202345
+ 4546344644222C0A222C4D20632023353438304341222C0A222C4E2063202344
+ 4141313336222C0A222C4F20632023464546434636222C0A222C502063202346
+ 3845353934222C0A222C5120632023463845353933222C0A222C522063202346
+ 3845353931222C0A222C5320632023453944423933222C0A222C542063202345
+ 3344373933222C0A222C5520632023444344323933222C0A222C562063202344
+ 3743453930222C0A222C5720632023434643383843222C0A222C582063202343
+ 3643313836222C0A222C5920632023443644384339222C0A222C5A2063202334
+ 3437344335222C0A222C3020632023353337464341222C0A222C312063202344
+ 4139413336222C0A222C3220632023464446414632222C0A222C332063202346
+ 3845363934222C0A222C3420632023463845353932222C0A222C352063202346
+ 3845353930222C0A222C3620632023463845333842222C0A222C372063202346
+ 3745323836222C0A222C3820632023463745313746222C0A222C392063202346
+ 3644453737222C0A222C4020632023463644433643222C0A222C232063202346
+ 3444393545222C0A222C3B20632023463344353446222C0A222C3A2063202346
+ 4246324343222C0A222C3D20632023464546414546222C0A222C2B2063202346
+ 3845343846222C0A222C2520632023463845333839222C0A222C242063202346
+ 3745313832222C0A222C2820632023463744463741222C0A222C292063202346
+ 3644453731222C0A222C5B20632023463544423637222C0A222C5D2063202346
+ 3444383542222C0A222D2E20632023463344343444222C0A222D2C2063202346
+ 3244313430222C0A222D2D20632023464246324341222C0A222D2A2063202344
+ 3938453333222C0A222D6120632023464146304443222C0A222D622063202346
+ 3645313938222C0A222D6320632023463645303935222C0A222D642063202346
+ 3644463932222C0A222D6520632023463544453845222C0A222D662063202346
+ 3544433839222C0A222D6720632023463444413835222C0A222D682063202346
+ 3444393830222C0A222D6920632023463344373741222C0A222D6A2063202346
+ 3344353734222C0A222D6B20632023463244333730222C0A222D6C2063202346
+ 3845414332222C0A222D6D20632023443838363243222C0A222D6E2063202344
+ 3838383244222C0A222D6F20632023443838373244222C0A222E2E2E2E2E2E2E
+ 2E2E2E2E2E2E2C2E2D2E2A2E2A2E612E622E632E2E2E2E2E2E222C0A222E2E2E
+ 2E2E2E2E2E2E2E2E2E2E642E652E662E672E682E692E6A2E6B2E6C2E2E222C0A
+ 222E2E2E2E2E2E2E2E2E2E2E2E2E6D2E6E2E6F2E702E712E722E732E742E752E
+ 76222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2A2E772E782E792E7A2E412E422E
+ 432E442E45222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2A2E462E472E482E492E
+ 4A2E4B2E4C2E4D2E4E222C0A222E4F2E502E512E512E512E522E532E542E552E
+ 552E562E572E582E412E592E5A222C0A222E302E312E322E332E342E322E352E
+ 362E372E382E392E402E232E3B2E3A2E3D222C0A222E2B2E252E242E282E292E
+ 5B2E5D2C2E2C2C2C2D2C2C2C2A2C612C622C2E2C63222C0A222C642C652C662C
+ 672C682C692C692C692C692C692C692C692C692C692C6A2C6B222C0A222C6C2C
+ 6D2C6E2C6F2C702C712C722C732C742C742C752C762C772C692C782C79222C0A
+ 222C7A2E322C412C422C432C442C452C462C472C482C492C4A2C4B2C692C4C2C
+ 4D222C0A222C4E2C4F2C502C512C512C522C532C542C552C562C572C582C592C
+ 692C5A2C30222C0A222C312C322C332C342C352C362C372C382C392C402C232C
+ 3B2C3A2C692E2E2E2E222C0A222C692C3D2C512C2B2C252C242C282C292C5B2C
+ 5D2D2E2D2C2D2D2C692E2E2E2E222C0A222D2A2D612D622D632D642D652D662D
+ 672D682D692D6A2D6B2D6C2C692E2E2E2E222C0A222D6D2D6E2D6F2D6E2D6E2D
+ 6E2D6E2D6E2D6E2D6E2D6E2D6F2D6E2D6D2E2E2E2E227D0A010C00002F2A2058
+ 504D202A2F0A7374617469632063686172202A677261706869635B5D203D207B
+ 0A223136203136203135332032222C0A222E2E2063204E6F6E65222C0A222E2C
+ 20632023333636424243222C0A222E2D20632023333636424242222C0A222E2A
+ 20632023333636414242222C0A222E6120632023333936434243222C0A222E62
+ 20632023334236454244222C0A222E6320632023334136444242222C0A222E64
+ 20632023333836424242222C0A222E6520632023334537304242222C0A222E66
+ 20632023443145304636222C0A222E6720632023443145304637222C0A222E68
+ 20632023463846424645222C0A222E6920632023463746424645222C0A222E6A
+ 20632023463646394644222C0A222E6B20632023463046354643222C0A222E6C
+ 20632023454146304641222C0A222E6D20632023454446324642222C0A222E6E
+ 20632023463746414644222C0A222E6F20632023454246314642222C0A222E70
+ 20632023444645394638222C0A222E7120632023424444304543222C0A222E72
+ 20632023354538394339222C0A222E7320632023443144464636222C0A222E74
+ 20632023383041414539222C0A222E7520632023463646414645222C0A222E76
+ 20632023463646414644222C0A222E7720632023363438434338222C0A222E78
+ 20632023454546334642222C0A222E7920632023454146314642222C0A222E7A
+ 20632023463246364643222C0A222E4120632023463146364643222C0A222E42
+ 20632023453245434639222C0A222E4320632023444245374638222C0A222E44
+ 20632023424144304545222C0A222E4520632023443044464636222C0A222E46
+ 20632023374541384538222C0A222E4720632023453946314641222C0A222E48
+ 20632023454546344642222C0A222E4920632023453846304641222C0A222E4A
+ 20632023444445384638222C0A222E4B20632023444245364637222C0A222E4C
+ 20632023374141334531222C0A222E4D20632023433344354546222C0A222E4E
+ 20632023333536394237222C0A222E4F20632023434344444635222C0A222E50
+ 20632023374541384537222C0A222E5120632023363638444339222C0A222E52
+ 20632023453946304641222C0A222E5320632023463346384644222C0A222E54
+ 20632023463846414645222C0A222E5520632023454646344643222C0A222E56
+ 20632023444645394639222C0A222E5720632023444245374637222C0A222E58
+ 20632023443945354637222C0A222E5920632023373841324530222C0A222E5A
+ 20632023413943324537222C0A222E3020632023333536384236222C0A222E31
+ 20632023433944434634222C0A222E3220632023374441374537222C0A222E33
+ 20632023453145434639222C0A222E3420632023453345444639222C0A222E35
+ 20632023454546344643222C0A222E3620632023463346374644222C0A222E37
+ 20632023453545444641222C0A222E3820632023443845354636222C0A222E39
+ 20632023373741304445222C0A222E4020632023413442454534222C0A222E23
+ 20632023333436374234222C0A222E3B20632023433744394634222C0A222E3A
+ 20632023374441364536222C0A222E3D20632023363538444339222C0A222E2B
+ 20632023363738454339222C0A222E2520632023364339324342222C0A222E24
+ 20632023364439324342222C0A222E2820632023363939304341222C0A222E29
+ 20632023363538434338222C0A222E5B20632023373439434441222C0A222E5D
+ 20632023394642414531222C0A222C2E20632023333436364233222C0A222C2C
+ 20632023433544384632222C0A222C2D20632023374241344533222C0A222C2A
+ 20632023374141334533222C0A222C6120632023374141344533222C0A222C62
+ 20632023374241344532222C0A222C6320632023374241334532222C0A222C64
+ 20632023374241334531222C0A222C6520632023373941324531222C0A222C66
+ 20632023373741304446222C0A222C6720632023373639464445222C0A222C68
+ 20632023373439454444222C0A222C6920632023373239434442222C0A222C6A
+ 20632023373439444443222C0A222C6B20632023394142354444222C0A222C6C
+ 20632023333436354231222C0A222C6D20632023433244354632222C0A222C6E
+ 20632023373841314530222C0A222C6F20632023373539454445222C0A222C70
+ 20632023373339424441222C0A222C7120632023373339424439222C0A222C72
+ 20632023393542304441222C0A222C7320632023333336344146222C0A222C74
+ 20632023424544324630222C0A222C7520632023374141334532222C0A222C76
+ 20632023373739464445222C0A222C7720632023373639464444222C0A222C78
+ 20632023373239424439222C0A222C7920632023373139394438222C0A222C7A
+ 20632023373039394436222C0A222C4120632023384541424435222C0A222C42
+ 20632023333336334144222C0A222C4320632023333636414241222C0A222C44
+ 20632023424244304546222C0A222C4520632023374141324532222C0A222C46
+ 20632023364439364433222C0A222C4720632023384141374432222C0A222C48
+ 20632023333236324142222C0A222C4920632023423843454546222C0A222C4A
+ 20632023463746414645222C0A222C4B20632023383843303632222C0A222C4C
+ 20632023364139334346222C0A222C4D20632023383441334345222C0A222C4E
+ 20632023333236314141222C0A222C4F20632023333836434242222C0A222C50
+ 20632023423643434545222C0A222C5120632023374141324531222C0A222C52
+ 20632023433244434246222C0A222C5320632023363839304344222C0A222C54
+ 20632023383139454343222C0A222C5520632023333236314138222C0A222C56
+ 20632023333736424241222C0A222C5720632023423343414544222C0A222C58
+ 20632023374141324530222C0A222C5920632023363538444341222C0A222C5A
+ 20632023374339424339222C0A222C3020632023333136304137222C0A222C31
+ 20632023333536414241222C0A222C3220632023414443364542222C0A222C33
+ 20632023414443354541222C0A222C3420632023374339414338222C0A222C35
+ 20632023373939384337222C0A222C3620632023333536394239222C0A222C37
+ 20632023333536394238222C0A222C3820632023333536384237222C0A222C39
+ 20632023333536384235222C0A222C4020632023333436364232222C0A222C23
+ 20632023333336354230222C0A222C3B20632023333336344145222C0A222C3A
+ 20632023333236334143222C0A222C3D20632023333236324141222C0A222C2B
+ 20632023333236314139222C0A222C2520632023333136304138222C0A222C24
+ 20632023333136304136222C0A222C2820632023333136314138222C0A222E2E
+ 2E2C2E2C2E2C2E2C2E2D2E2D2E2A2E2A2E612E622E632E642E652E2E2E2E222C
+ 0A222E2C2E662E672E682E692E6A2E6B2E6C2E6D2E6A2E6E2E6F2E702E712E72
+ 2E2E222C0A222E2C2E732E742E752E762E772E782E792E7A2E682E412E422E43
+ 2E442E712E65222C0A222E2C2E452E462E412E412E772E472E482E6E2E6A2E49
+ 2E4A2E4B2E4C2E4D2E4E222C0A222E2C2E4F2E502E492E492E512E522E532E54
+ 2E552E562E572E582E592E5A2E30222C0A222E2D2E312E322E332E332E342E35
+ 2E6E2E362E372E572E582E382E392E402E23222C0A222E2D2E3B2E3A2E772E3D
+ 2E2B2E252E242E282E292E772E772E772E5B2E5D2C2E222C0A222E2A2C2C2C2D
+ 2C2A2C612C622C632C642C652C662C672C682C692C6A2C6B2C6C222C0A222E2A
+ 2C6D2C2A2C2A2C632C632C622C652C6E2E392C6F2C6A2C702C712C722C73222C
+ 0A222E2A2C742C752C752E4C2C632C642C6E2C762C772C6A2C782C792C7A2C41
+ 2C42222C0A222C432C442C452E682E682E682E682E682E682E682E682E682E68
+ 2C462C472C48222C0A222E642C492C652C4A2C4B2C4B2C4B2C4B2C4B2C4B2C4B
+ 2C4B2E6A2C4C2C4D2C4E222C0A222C4F2C502C512C4A2C522C522C522C522C52
+ 2C522C522C522E6A2C532C542C55222C0A222C562C572C582C4A2C4B2C4B2C4B
+ 2C4B2C4B2C4B2C4B2C4B2E6A2C592C5A2C30222C0A222C312C322C332E682E68
+ 2E682E682E682E682E682E682E682E682C342C352C30222C0A222C432C362C37
+ 2C382C392E232C402C232C3B2C3A2C3D2C2B2C252C302C242C28227D0A910D00
+ 002F2A2058504D202A2F0A7374617469632063686172202A677261706869635B
+ 5D203D207B0A223136203136203137382032222C0A222E2E2063204E6F6E6522
+ 2C0A222E2C20632023443439433644222C0A222E2D2063202344323941364122
+ 2C0A222E2A20632023434639373636222C0A222E612063202344363945373022
+ 2C0A222E6220632023444142313835222C0A222E632063202342393931354122
+ 2C0A222E6420632023434239333630222C0A222E652063202338303830383022
+ 2C0A222E6620632023374537453745222C0A222E672063202337433743374322
+ 2C0A222E6820632023374137413741222C0A222E692063202337373737373722
+ 2C0A222E6A20632023373537353735222C0A222E6B2063202337323732373222
+ 2C0A222E6C20632023443439453731222C0A222E6D2063202344363945364622
+ 2C0A222E6E20632023444342323837222C0A222E6F2063202345384433414222
+ 2C0A222E7020632023453644304139222C0A222E712063202342383930353822
+ 2C0A222E7220632023433638453539222C0A222E732063202337443744374422
+ 2C0A222E7420632023393939393939222C0A222E752063202339413941394122
+ 2C0A222E7620632023394239423942222C0A222E772063202344333944364622
+ 2C0A222E7820632023453744314141222C0A222E792063202345374431414222
+ 2C0A222E7A20632023453143373938222C0A222E412063202344454332393122
+ 2C0A222E4220632023423738463536222C0A222E432063202343313839353222
+ 2C0A222E4420632023353939313532222C0A222E452063202339393941393922
+ 2C0A222E4620632023394339433943222C0A222E472063202344303941364322
+ 2C0A222E4820632023453543454137222C0A222E492063202344464331384622
+ 2C0A222E4A20632023444342443839222C0A222E4B2063202344434244384222
+ 2C0A222E4C20632023423638443533222C0A222E4D2063202342433834344222
+ 2C0A222E4E20632023343538413344222C0A222E4F2063202334463841343922
+ 2C0A222E5020632023394439443944222C0A222E512063202343433936363622
+ 2C0A222E5220632023453343424132222C0A222E532063202344414239383322
+ 2C0A222E5420632023444142393834222C0A222E552063202342353842353122
+ 2C0A222E5620632023423637453433222C0A222E572063202334443934343422
+ 2C0A222E5820632023344239313432222C0A222E592063202334383844334622
+ 2C0A222E5A20632023343538393344222C0A222E302063202336354134354422
+ 2C0A222E3120632023363141303541222C0A222E322063202334423833343522
+ 2C0A222E3320632023394539453945222C0A222E342063202343393932363022
+ 2C0A222E3520632023453243373945222C0A222E362063202344414238383322
+ 2C0A222E3720632023443742343744222C0A222E382063202344374233374522
+ 2C0A222E3920632023423438393446222C0A222E402063202342313739334222
+ 2C0A222E2320632023344139303431222C0A222E3B2063202339464432393422
+ 2C0A222E3A20632023394144303931222C0A222E3D2063202339364344384422
+ 2C0A222E2B20632023393243423839222C0A222E252063202338444338383422
+ 2C0A222E2420632023353839383531222C0A222E282063202334363743343122
+ 2C0A222E2920632023394639463946222C0A222E5B2063202343343845354122
+ 2C0A222E5D20632023453043333938222C0A222C2E2063202344374233374322
+ 2C0A222C2C20632023443641463734222C0A222C2D2063202345444334354522
+ 2C0A222C2A20632023423338383442222C0A222C612063202341423733333422
+ 2C0A222C6220632023343638423345222C0A222C632063202339394345384622
+ 2C0A222C6420632023383743363744222C0A222C652063202338314333373822
+ 2C0A222C6620632023374343303733222C0A222C672063202337434330373422
+ 2C0A222C6820632023383143323739222C0A222C692063202334463930343922
+ 2C0A222C6A20632023353737463534222C0A222C6B2063202342463839353422
+ 2C0A222C6C20632023444442463934222C0A222C6D2063202344344144373522
+ 2C0A222C6E20632023453142383633222C0A222C6F2063202346464434344222
+ 2C0A222C7020632023423838423432222C0A222C712063202341363645324322
+ 2C0A222C7220632023343238373342222C0A222C732063202338384336383022
+ 2C0A222C7420632023383343333742222C0A222C752063202337464331373722
+ 2C0A222C7620632023344438463437222C0A222C772063202333463734334222
+ 2C0A222C7820632023413141314131222C0A222C792063202342413834344322
+ 2C0A222C7A20632023444242423844222C0A222C412063202344314138364522
+ 2C0A222C4220632023443141363636222C0A222C432063202344464234354622
+ 2C0A222C4420632023423138353437222C0A222C452063202341313639323522
+ 2C0A222C4620632023334538323337222C0A222C472063202333423745333422
+ 2C0A222C4820632023333737393331222C0A222C492063202333343735324522
+ 2C0A222C4A20632023353039313439222C0A222C4B2063202334433846343622
+ 2C0A222C4C20632023334437333339222C0A222C4D2063202341324132413222
+ 2C0A222C4E20632023423437453435222C0A222C4F2063202344394237383822
+ 2C0A222C5020632023434641333637222C0A222C512063202343433945363122
+ 2C0A222C5220632023434339463633222C0A222C532063202342313833343522
+ 2C0A222C5420632023394336343146222C0A222C552063202336303630363022
+ 2C0A222C5620632023413041304130222C0A222C572063202334313736334422
+ 2C0A222C5820632023333937313336222C0A222C592063202341334133413322
+ 2C0A222C5A20632023423037393344222C0A222C302063202344374233383222
+ 2C0A222C3120632023434339463632222C0A222C322063202343393941354122
+ 2C0A222C3320632023434139423545222C0A222C342063202341463831343322
+ 2C0A222C3520632023393836303139222C0A222C362063202335433543354322
+ 2C0A222C3720632023343037333343222C0A222C382063202341314131413022
+ 2C0A222C3920632023413441344134222C0A222C402063202341413734333622
+ 2C0A222C2320632023443441463744222C0A222C3B2063202343393941354222
+ 2C0A222C3A20632023433739353534222C0A222C3D2063202343383936353822
+ 2C0A222C2B20632023414538303431222C0A222C252063202339343543313322
+ 2C0A222C2420632023353835383538222C0A222C282063202341354135413522
+ 2C0A222C2920632023413536463246222C0A222C5B2063202344324142373822
+ 2C0A222C5D20632023443341423738222C0A222D2E2063202344314137373322
+ 2C0A222D2C20632023434441303639222C0A222D2D2063202341453746343022
+ 2C0A222D2A20632023393135393046222C0A222D612063202337313731373122
+ 2C0A222D6220632023353435343534222C0A222D632063202335313531353122
+ 2C0A222D6420632023344634463446222C0A222D652063202334433443344322
+ 2C0A222D6620632023344134413441222C0A222D672063202334373437343722
+ 2C0A222D6820632023343534353435222C0A222D692063202339443637323522
+ 2C0A222D6A20632023413837343332222C0A222D6B2063202341463743334422
+ 2C0A222D6C20632023423538343437222C0A222D6D2063202342413841344522
+ 2C0A222D6E20632023414437453345222C0A222D6F2063202338463537304322
+ 2C0A222D7020632023393235413130222C0A222D712063202339303538304422
+ 2C0A222D7220632023393235433133222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E
+ 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2C2E2D2E2A222C0A222E2E2E2E2E2E2E2E2E
+ 2E2E2E2E2E2E2E2E2E2E2E2E2E2E612E2C2E622E632E64222C0A222E2E2E2E2E
+ 652E662E672E682E692E6A2E6B2E6C2E6D2E6E2E6F2E702E712E72222C0A222E
+ 2E2E2E2E732E742E742E752E752E762E762E772E782E792E7A2E412E422E4322
+ 2C0A222E2E2E2E2E682E742E442E452E762E462E462E472E482E492E4A2E4B2E
+ 4C2E4D222C0A222E2E2E2E2E692E752E4E2E4F2E462E502E502E512E522E4A2E
+ 532E542E552E56222C0A222E572E582E592E5A2E302E312E322E332E332E342E
+ 352E362E372E382E392E40222C0A222E232E3B2E3A2E3D2E2B2E252E242E282E
+ 292E5B2E5D2C2E2C2C2C2D2C2A2C61222C0A222C622C632C642C652C662C672C
+ 682C692C6A2C6B2C6C2C6D2C6E2C6F2C702C71222C0A222C722E2B2E252C732C
+ 742C752C762C772C782C792C7A2C412C422C432C442C45222C0A222C462C472C
+ 482C492C4A2C4B2C4C2C782C4D2C4E2C4F2C502C512C522C532C54222C0A222E
+ 2E2E2E2C552C562C572C582C4D2C4D2C592C5A2C302C312C322C332C342C3522
+ 2C0A222E2E2E2E2C362C782C372C382C592C592C392C402C232C3B2C3A2C3D2C
+ 2B2C25222C0A222E2E2E2E2C242C4D2C4D2C592C392C392C282C292C5B2C5D2D
+ 2E2D2C2D2D2D2A222C0A222E742D612D622D632D642D652D662D672D682D692D
+ 6A2D6B2D6C2D6D2D6E2D6F222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E
+ 2E2E2E2E2E2E2E2D702D712D722D6F227D0A36050000424D3605000000000000
+ 3604000028000000100000001000000001000800000000000001000000000000
+ 0000000000000000000000000000000000008000008000000080800080000000
+ 8000800080800000C0C0C000C0DCC000F0CAA600002040000020600000208000
+ 0020A0000020C0000020E0000040000000402000004040000040600000408000
+ 0040A0000040C0000040E0000060000000602000006040000060600000608000
+ 0060A0000060C0000060E0000080000000802000008040000080600000808000
+ 0080A0000080C0000080E00000A0000000A0200000A0400000A0600000A08000
+ 00A0A00000A0C00000A0E00000C0000000C0200000C0400000C0600000C08000
+ 00C0A00000C0C00000C0E00000E0000000E0200000E0400000E0600000E08000
+ 00E0A00000E0C00000E0E0004000000040002000400040004000600040008000
+ 4000A0004000C0004000E0004020000040202000402040004020600040208000
+ 4020A0004020C0004020E0004040000040402000404040004040600040408000
+ 4040A0004040C0004040E0004060000040602000406040004060600040608000
+ 4060A0004060C0004060E0004080000040802000408040004080600040808000
+ 4080A0004080C0004080E00040A0000040A0200040A0400040A0600040A08000
+ 40A0A00040A0C00040A0E00040C0000040C0200040C0400040C0600040C08000
+ 40C0A00040C0C00040C0E00040E0000040E0200040E0400040E0600040E08000
+ 40E0A00040E0C00040E0E0008000000080002000800040008000600080008000
+ 8000A0008000C0008000E0008020000080202000802040008020600080208000
+ 8020A0008020C0008020E0008040000080402000804040008040600080408000
+ 8040A0008040C0008040E0008060000080602000806040008060600080608000
+ 8060A0008060C0008060E0008080000080802000808040008080600080808000
+ 8080A0008080C0008080E00080A0000080A0200080A0400080A0600080A08000
+ 80A0A00080A0C00080A0E00080C0000080C0200080C0400080C0600080C08000
+ 80C0A00080C0C00080C0E00080E0000080E0200080E0400080E0600080E08000
+ 80E0A00080E0C00080E0E000C0000000C0002000C0004000C0006000C0008000
+ C000A000C000C000C000E000C0200000C0202000C0204000C0206000C0208000
+ C020A000C020C000C020E000C0400000C0402000C0404000C0406000C0408000
+ C040A000C040C000C040E000C0600000C0602000C0604000C0606000C0608000
+ C060A000C060C000C060E000C0800000C0802000C0804000C0806000C0808000
+ C080A000C080C000C080E000C0A00000C0A02000C0A04000C0A06000C0A08000
+ C0A0A000C0A0C000C0A0E000C0C00000C0C02000C0C04000C0C06000C0C08000
+ C0C0A000F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF000000
+ FF00FF00FFFF0000FFFFFF00F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6
+ F6F6F618181800F6F6F6F6F6F6F6F6F6F6F6181802180010F6F6F6F6F6F6F6F6
+ F61802022828181800F6F6F6F6F6F6F602022828302802181800F6F6F6F6F6F6
+ 00022830BA3028021800F6F6F6F6F6F6FB2830BAFA2828280218F6F6F600F6F6
+ 0030BA00BABA28282802F6F6F6FB00F6FB2800FBBABABABA2828F6F6F6F6FB00
+ 0000FBBABABABABABA78F6F6F600F6FBFBFB7800000079B9B9F6F6F6F6FBF6FB
+ FBFBB9FBFBFBFA79F6F6F6F6F6F600FBFBFB00F6B9B9F6F6F6F6F6F6F600FBF6
+ 00F6FB00F6F6F6F6F6F6F6F6F6FBF6F6FBF6F6FBF6F6F6F6F6F6F6F6F6F6F6F6
+ F6F6F6F6F6F6F6F6F6F6F6F636050000424D3605000000000000360400002800
+ 0000100000001000000001000800000000000001000000000000000000000000
+ 0000000000000000000000008000008000000080800080000000800080008080
+ 0000C0C0C000C0DCC000F0CAA6000020400000206000002080000020A0000020
+ C0000020E00000400000004020000040400000406000004080000040A0000040
+ C0000040E00000600000006020000060400000606000006080000060A0000060
+ C0000060E00000800000008020000080400000806000008080000080A0000080
+ C0000080E00000A0000000A0200000A0400000A0600000A0800000A0A00000A0
+ C00000A0E00000C0000000C0200000C0400000C0600000C0800000C0A00000C0
+ C00000C0E00000E0000000E0200000E0400000E0600000E0800000E0A00000E0
+ C00000E0E00040000000400020004000400040006000400080004000A0004000
+ C0004000E00040200000402020004020400040206000402080004020A0004020
+ C0004020E00040400000404020004040400040406000404080004040A0004040
+ C0004040E00040600000406020004060400040606000406080004060A0004060
+ C0004060E00040800000408020004080400040806000408080004080A0004080
+ C0004080E00040A0000040A0200040A0400040A0600040A0800040A0A00040A0
+ C00040A0E00040C0000040C0200040C0400040C0600040C0800040C0A00040C0
+ C00040C0E00040E0000040E0200040E0400040E0600040E0800040E0A00040E0
+ C00040E0E00080000000800020008000400080006000800080008000A0008000
+ C0008000E00080200000802020008020400080206000802080008020A0008020
+ C0008020E00080400000804020008040400080406000804080008040A0008040
+ C0008040E00080600000806020008060400080606000806080008060A0008060
+ C0008060E00080800000808020008080400080806000808080008080A0008080
+ C0008080E00080A0000080A0200080A0400080A0600080A0800080A0A00080A0
+ C00080A0E00080C0000080C0200080C0400080C0600080C0800080C0A00080C0
+ C00080C0E00080E0000080E0200080E0400080E0600080E0800080E0A00080E0
+ C00080E0E000C0000000C0002000C0004000C0006000C0008000C000A000C000
+ C000C000E000C0200000C0202000C0204000C0206000C0208000C020A000C020
+ C000C020E000C0400000C0402000C0404000C0406000C0408000C040A000C040
+ C000C040E000C0600000C0602000C0604000C0606000C0608000C060A000C060
+ C000C060E000C0800000C0802000C0804000C0806000C0808000C080A000C080
+ C000C080E000C0A00000C0A02000C0A04000C0A06000C0A08000C0A0A000C0A0
+ C000C0A0E000C0C00000C0C02000C0C04000C0C06000C0C08000C0C0A000F0FB
+ FF00A4A0A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF
+ 0000FFFFFF00F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F9F9010A00F6F6F6
+ 00F9F900F6F6F6F6F6F9F9F90100F6000DF900F6F6F6F6F6F6F6F9F9F90100F9
+ F953F6F6F6F6F6F6F6F6F65CF9F9F9F954F6F6F6F6F6F6F6F6F65C00F9F9F9F9
+ 0052F6F6F6F6F6F6F65D00F9F91266F9F90049F6F6F6F6F6F600F9F967BF675E
+ F9F900F6F6F6F6F600F9F967BF6F66665EF9F9F6F6F6F6F6F9F967BF67BFBF66
+ 5E66F9F6F6F6F6F6F65D5D6FBFBFBFBFBF5E66F6F6F6F6F6F66FBFBFBFBFBFBF
+ BFBF6FF6F6F6F6F6F6F66F6F777777777777F6F6F6F6F6F6F6F6F677776F6F6F
+ 77F6F6F6F6F6F6F6F6F6F6F6F67777F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6
+ F6F6F6F6F6F6
+ }
+ end
+ object SDDir: TSelectDirectoryDialog
+ Title = 'Select Directory'
+ FilterIndex = 0
+ left = 162
+ top = 66
+ end
+end
diff --git a/examples/cleandir/frmmain.lrs b/examples/cleandir/frmmain.lrs
new file mode 100644
index 0000000000..f2ce11b911
--- /dev/null
+++ b/examples/cleandir/frmmain.lrs
@@ -0,0 +1,953 @@
+LazarusResources.Add('TMainForm','FORMDATA',[
+ 'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3'{'#2#6'Height'#3#176#1#3'Top'#3'R'#1
+ +#5'Width'#3';'#2#18'HorzScrollBar.Page'#3':'#2#18'VertScrollBar.Page'#3#149#1
+ +#13'ActiveControl'#7#8'EDailyAt'#7'Caption'#6#27'Configure Directory Cleaner'
+ +#12'ClientHeight'#3#150#1#11'ClientWidth'#3';'#2#4'Menu'#7#6'MMMain'#12'OnCl'
+ +'oseQuery'#7#14'FormCloseQuery'#6'OnShow'#7#8'FormShow'#0#8'TToolBar'#6'TBMa'
+ +'in'#6'Height'#2#26#5'Width'#3';'#2#7'Caption'#6#6'TBMain'#6'Images'#7#6'ILM'
+ +'ain'#8'TabOrder'#2#0#0#11'TToolButton'#6'TBQuit'#4'Left'#2#1#3'Top'#2#2#6'A'
+ +'ction'#7#5'AQuit'#0#0#11'TToolButton'#11'ToolButton2'#4'Left'#2#24#3'Top'#2
+ +#2#5'Width'#2#23#7'Caption'#6#11'ToolButton2'#5'Style'#7#12'tbsSeparator'#0#0
+ +#11'TToolButton'#5'TBNew'#4'Left'#2'/'#3'Top'#2#2#6'Action'#7#4'ANew'#0#0#11
+ +'TToolButton'#6'TBOpen'#4'Left'#2'F'#3'Top'#2#2#6'Action'#7#5'AOpen'#0#0#11
+ +'TToolButton'#6'TBSave'#4'Left'#2']'#3'Top'#2#2#6'Action'#7#5'ASave'#0#0#11
+ +'TToolButton'#11'ToolButton1'#4'Left'#2't'#3'Top'#2#2#5'Width'#2#23#7'Captio'
+ +'n'#6#11'ToolButton1'#5'Style'#7#12'tbsSeparator'#0#0#11'TToolButton'#9'TBNe'
+ +'wItem'#4'Left'#3#139#0#3'Top'#2#2#6'Action'#7#8'ANewItem'#0#0#11'TToolButto'
+ +'n'#12'TBDeleteItem'#4'Left'#3#162#0#3'Top'#2#2#6'Action'#7#11'ADeleteItem'#0
+ +#0#0#12'TPageControl'#8'PCConfig'#6'Height'#3'|'#1#3'Top'#2#26#5'Width'#3';'
+ +#2#10'ActivePage'#7#12'TSScheduling'#5'Align'#7#8'alClient'#8'TabIndex'#2#3#8
+ +'TabOrder'#2#1#8'OnChange'#7#14'PCConfigChange'#13'OnPageChanged'#7#14'PCCon'
+ +'figChange'#0#9'TTabSheet'#9'TSOptions'#7'Caption'#6#7'Options'#12'ClientHei'
+ +'ght'#3'|'#1#11'ClientWidth'#3';'#2#0#9'TListView'#13'LVDirectories'#6'Heigh'
+ +'t'#3#214#0#3'Top'#2'2'#5'Width'#3';'#2#5'Align'#7#8'alClient'#7'Columns'#14
+ +#1#7'Caption'#6#7'Enabled'#0#1#7'Caption'#6#7'Recurse'#0#1#7'Caption'#6#4'Na'
+ +'me'#5'Width'#2'x'#0#1#7'Caption'#6#4'Path'#0#0#8'ReadOnly'#9#9'RowSelect'#9
+ +#8'TabOrder'#2#0#9'ViewStyle'#7#8'vsReport'#12'OnSelectItem'#7#23'LVDirector'
+ +'iesSelectItem'#0#0#6'TPanel'#12'PDirectories'#6'Height'#2't'#3'Top'#3#8#1#5
+ +'Width'#3';'#2#5'Align'#7#8'alBottom'#10'BevelOuter'#7#9'bvLowered'#12'Clien'
+ +'tHeight'#2't'#11'ClientWidth'#3';'#2#8'TabOrder'#2#1#0#6'TLabel'#6'Label1'#4
+ +'Left'#2#4#6'Height'#2#21#3'Top'#2#10#5'Width'#2'P'#9'Alignment'#7#14'taRigh'
+ +'tJustify'#8'AutoSize'#8#7'Caption'#6#5'&Name'#12'FocusControl'#7#8'EDirName'
+ +#6'Layout'#7#8'tlCenter'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2
+ +#4#6'Height'#2#19#3'Top'#2','#5'Width'#2'P'#9'Alignment'#7#14'taRightJustify'
+ +#8'AutoSize'#8#7'Caption'#6#5'&Path'#12'FocusControl'#7#8'EDirPath'#6'Layout'
+ +#7#8'tlCenter'#11'ParentColor'#8#0#0#12'TSpeedButton'#9'SBDirPath'#4'Left'#3
+ +#21#2#6'Height'#2#22#3'Top'#2')'#5'Width'#2#23#7'Anchors'#11#5'akTop'#7'akRi'
+ +'ght'#0#5'Color'#7#9'clBtnFace'#10'Glyph.Data'#10'e'#12#0#0'a'#12#0#0'/* XPM'
+ +' */'#10'static char *graphic[] = {'#10'"16 16 159 2",'#10'".. c None",'#10
+ +'"., c #636C75",'#10'".- c #575F68",'#10'".* c #5B636C",'#10'".a c #3A3F45",'
+ +#10'".b c #808C98",'#10'".c c #838F9C",'#10'".d c #474D54",'#10'".e c #747F8'
+ +'A",'#10'".f c #32373B",'#10'".g c #565E66",'#10'".h c #6F7885",'#10'".i c #'
+ +'393F48",'#10'".j c #717D8B",'#10'".k c #404A56",'#10'".l c #748392",'#10'".'
+ +'m c #40474F",'#10'".n c #34393E",'#10'".o c #4D545B",'#10'".p c #90A0B0",'
+ +#10'".q c #515D69",'#10'".r c #657486",'#10'".s c #4E5863",'#10'".t c #8898A'
+ +'A",'#10'".u c #4A515A",'#10'".v c #111316",'#10'".w c #586169",'#10'".x c #'
+ +'484F56",'#10'".y c #2C2F32",'#10'".z c #2D3034",'#10'".A c #3C4246",'#10'".'
+ +'B c #33383D",'#10'".C c #08090A",'#10'".D c #D9B434",'#10'".E c #E1C25E",'
+ +#10'".F c #E2C360",'#10'".G c #E2C35F",'#10'".H c #DBB63C",'#10'".I c #AFB9C'
+ +'4",'#10'".J c #8D9AA7",'#10'".K c #404547",'#10'".L c #555B63",'#10'".M c #'
+ +'A4AFBB",'#10'".N c #8B98A6",'#10'".O c #212427",'#10'".P c #DAB336",'#10'".'
+ +'Q c #FEFEFD",'#10'".R c #FFFFFE",'#10'".S c #FFFEFE",'#10'".T c #FFFEFD",'
+ +#10'".U c #FBF7EA",'#10'".V c #5F6871",'#10'".W c #ABB6C1",'#10'".X c #66707'
+ +'9",'#10'".Y c #54544A",'#10'".Z c #A6955C",'#10'".0 c #5D666E",'#10'".1 c #'
+ +'A5B1BD",'#10'".2 c #6A747E",'#10'".3 c #1B1D20",'#10'".4 c #DAAF35",'#10'".'
+ +'5 c #FEFCF7",'#10'".6 c #F8E48E",'#10'".7 c #F5DE91",'#10'".8 c #F5E09F",'
+ +#10'".9 c #F6E1AC",'#10'".@ c #FEFBEF",'#10'".# c #545B63",'#10'".; c #5E677'
+ +'0",'#10'".: c #3B4044",'#10'".= c #ACAAA3",'#10'".+ c #4E555C",'#10'".% c #'
+ +'7F8A96",'#10'".$ c #131416",'#10'".( c #DAAA36",'#10'".) c #FDFAF1",'#10'".'
+ +'[ c #F5DE94",'#10'".] c #F4DC93",'#10'",. c #F2D581",'#10'",, c #E9C060",'
+ +#10'",- c #E1AE4F",'#10'",* c #DA9435",'#10'",a c #111315",'#10'",b c #03040'
+ +'4",'#10'",c c #DAAB35",'#10'",d c #FBF6E8",'#10'",e c #EAC57E",'#10'",f c #'
+ +'E3AE5B",'#10'",g c #E1A851",'#10'",h c #E4AF60",'#10'",i c #FDFAEB",'#10'",'
+ +'j c #FEFAEC",'#10'",k c #FCF5E5",'#10'",l c #FCF6E5",'#10'",m c #FCF5E4",'
+ +#10'",n c #DAA637",'#10'",o c #FFFDF8",'#10'",p c #FFFDF6",'#10'",q c #FFFCF'
+ +'5",'#10'",r c #FEFAE8",'#10'",s c #FAECAF",'#10'",t c #F8E387",'#10'",u c #'
+ ,'F7E07D",'#10'",v c #F6DD72",'#10'",w c #F5DB68",'#10'",x c #FDF9E9",'#10'",'
+ +'y c #DAA136",'#10'",z c #FEFCF6",'#10'",A c #FCF2C8",'#10'",B c #FBEFB9",'
+ +#10'",C c #FAECAC",'#10'",D c #F8E48C",'#10'",E c #F8E38A",'#10'",F c #F7E18'
+ +'2",'#10'",G c #F7DF79",'#10'",H c #F6DD6D",'#10'",I c #F5DA61",'#10'",J c #'
+ +'F4D757",'#10'",K c #FDF8E7",'#10'",L c #DA9A36",'#10'",M c #FDFAF2",'#10'",'
+ +'N c #FAEDB3",'#10'",O c #F9E9A4",'#10'",P c #F8E695",'#10'",Q c #F7E285",'
+ +#10'",R c #F7E181",'#10'",S c #F7E07A",'#10'",T c #F6DD6F",'#10'",U c #F5DA6'
+ +'2",'#10'",V c #F3D654",'#10'",W c #F2D347",'#10'",X c #FDF9E8",'#10'",Y c #'
+ +'FEFAEF",'#10'",Z c #F9E9A1",'#10'",0 c #F8E591",'#10'",1 c #F6DE72",'#10'",'
+ +'2 c #F5DA63",'#10'",3 c #F4D754",'#10'",4 c #F3D347",'#10'",5 c #F2D039",'
+ +#10'",6 c #F1CD2E",'#10'",7 c #F0CB26",'#10'",8 c #FBF2CA",'#10'",9 c #D98E3'
+ +'3",'#10'",@ c #FAF0DC",'#10'",# c #F4DDA7",'#10'",; c #F4DB9E",'#10'",: c #'
+ +'F3DA96",'#10'",= c #F3D88E",'#10'",+ c #F3D786",'#10'",% c #F2D47F",'#10'",'
+ +'$ c #F2D379",'#10'",( c #F1D272",'#10'",) c #F1D06C",'#10'",[ c #F1CF69",'
+ +#10'",] c #F8EAC2",'#10'"-. c #D8882D",'#10'"-, c #D8872D",'#10'"-- c #D8862'
+ +'C",'#10'"...................,.-...*.a....",'#10'".................b.c.a...d'
+ +'.e.f..",'#10'".................g.h.i.j.k.l.m..",'#10'"...............n.o.p.'
+ +'q.r.s.t.u.v",'#10'"...............g.w.x.y...z.A.B.C",'#10'".D.E.F.F.F.G.H.,'
+ +'.I.J.K...L.M.N.O",'#10'".P.Q.R.S.T.R.U.V.W.X.Y.Z.0.1.2.3",'#10'".4.5.6.7.8.'
+ +'9.@.#.J.;.:.=.+.%.g.$",'#10'".(.).[.],.,,,-,*,*,*,*,*,*,*,a,b",'#10'",c,d,e'
+ +',f,g,h,i,j,k,l,m,m.R,*....",'#10'",n.R,o,p,q,r,s.6,t,u,v,w,x,*....",'#10'",'
+ +'y,z,A,B,C,D,E,F,G,H,I,J,K,*....",'#10'",L,M,N,O,P,Q,R,S,T,U,V,W,X,*....",'
+ +#10'",*,Y,Z,0,R,1,2,3,4,5,6,7,8,*....",'#10'",9,@,#,;,:,=,+,%,$,(,),[,],9...'
+ +'.",'#10'"..-.-,-.-.-.-.-.-.-.-.-,-.--...."}'#10#9'NumGlyphs'#2#0#7'OnClick'
+ +#7#14'SBDirPathClick'#0#0#11'TTICheckBox'#12'CBDirEnabled'#4'Left'#2'^'#6'He'
+ +'ight'#2#22#3'Top'#2'H'#5'Width'#2'F'#7'Caption'#6#8'&Enabled'#19'Link.TIPro'
+ +'pertyName'#6#7'Enabled'#13'OnEditingDone'#7#16'DirectoryChanged'#8'TabOrder'
+ +#2#0#0#0#11'TTICheckBox'#12'CBDirRecurse'#4'Left'#2'^'#6'Height'#2#22#3'Top'
+ +#2'`'#5'Width'#2'F'#7'Caption'#6#8'&Recurse'#19'Link.TIPropertyName'#6#7'Rec'
+ +'urse'#13'OnEditingDone'#7#16'DirectoryChanged'#8'TabOrder'#2#1#0#0#7'TTIEdi'
+ +'t'#8'EDirName'#4'Left'#2'^'#6'Height'#2#23#3'Top'#2#8#5'Width'#3#200#0#19'L'
+ +'ink.TIPropertyName'#6#4'Name'#13'OnEditingDone'#7#16'DirectoryChanged'#8'Ta'
+ +'bOrder'#2#2#0#0#7'TTIEdit'#8'EDirPath'#4'Left'#2'^'#6'Height'#2#23#3'Top'#2
+ +'('#5'Width'#3#181#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#19'Link.T'
+ +'IPropertyName'#6#4'Path'#13'OnEditingDone'#7#16'DirectoryChanged'#8'TabOrde'
+ +'r'#2#3#0#0#0#6'TPanel'#8'POptions'#6'Height'#2'2'#5'Width'#3';'#2#5'Align'#7
+ +#5'alTop'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#2'2'#11'ClientWidth'#3
+ +';'#2#8'TabOrder'#2#2#0#6'TLabel'#6'Label3'#6'Height'#2#24#3'Top'#2#26#5'Wid'
+ +'th'#3';'#2#5'Align'#7#8'alBottom'#9'Alignment'#7#8'taCenter'#8'AutoSize'#8#7
+ +'Caption'#6#21'Directories to clean:'#6'Layout'#7#8'tlCenter'#11'ParentColor'
+ +#8#0#0#11'TTICheckBox'#13'CBStopOnError'#4'Left'#2#14#6'Height'#2#20#3'Top'#2
+ +#2#5'Width'#2'g'#7'Caption'#6#14'Stop on errors'#19'Link.TIPropertyName'#6#11
+ +'StopOnError'#8'OnChange'#7#14'OptionsChanged'#8'TabOrder'#2#0#0#0#11'TTIChe'
+ +'ckBox'#16'CBAllFileActions'#4'Left'#3#190#0#6'Height'#2#20#3'Top'#2#2#5'Wid'
+ +'th'#3#184#0#7'Caption'#6#28'Execute all matching actions'#19'Link.TIPropert'
+ +'yName'#6#14'AllFileActions'#8'OnChange'#7#14'OptionsChanged'#8'TabOrder'#2#1
+ +#0#0#11'TTICheckBox'#13'CBLogAllFiles'#4'Left'#3#150#1#6'Height'#2#20#3'Top'
+ +#2#2#5'Width'#2'X'#7'Caption'#6#13'Log all files'#19'Link.TIPropertyName'#6
+ +#11'LogAllFiles'#8'OnChange'#7#14'OptionsChanged'#8'TabOrder'#2#2#0#0#0#0#9
+ +'TTabSheet'#11'TSLocations'#7'Caption'#6#9'Locations'#12'ClientHeight'#3'|'#1
+ +#11'ClientWidth'#3';'#2#0#6'TPanel'#9'PLocation'#6'Height'#3#188#0#3'Top'#3
+ +#192#0#5'Width'#3';'#2#5'Align'#7#8'alBottom'#10'BevelOuter'#7#9'bvLowered'
+ +#12'ClientHeight'#3#188#0#11'ClientWidth'#3';'#2#8'TabOrder'#2#0#0#6'TLabel'
+ +#14'LELocationName'#4'Left'#2#4#6'Height'#2#21#3'Top'#2#13#5'Width'#2'L'#9'A'
+ +'lignment'#7#14'taRightJustify'#8'AutoSize'#8#7'Caption'#6#5'&Name'#6'Layout'
+ +#7#8'tlCenter'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#2#4#6'Heigh'
+ +'t'#2#23#3'Top'#2'0'#5'Width'#2'L'#9'Alignment'#7#14'taRightJustify'#8'AutoS'
+ +'ize'#8#7'Caption'#6#5'&Path'#6'Layout'#7#8'tlCenter'#11'ParentColor'#8#0#0
+ +#12'TSpeedButton'#14'SBLocationPath'#4'Left'#3#12#2#6'Height'#2#22#3'Top'#2
+ +'1'#5'Width'#2#23#7'Anchors'#11#5'akTop'#7'akRight'#0#5'Color'#7#9'clBtnFace'
+ +#10'Glyph.Data'#10'e'#12#0#0'a'#12#0#0'/* XPM */'#10'static char *graphic[] '
+ +'= {'#10'"16 16 159 2",'#10'".. c None",'#10'"., c #636C75",'#10'".- c #575F'
+ +'68",'#10'".* c #5B636C",'#10'".a c #3A3F45",'#10'".b c #808C98",'#10'".c c '
+ +'#838F9C",'#10'".d c #474D54",'#10'".e c #747F8A",'#10'".f c #32373B",'#10'"'
+ ,'.g c #565E66",'#10'".h c #6F7885",'#10'".i c #393F48",'#10'".j c #717D8B",'
+ +#10'".k c #404A56",'#10'".l c #748392",'#10'".m c #40474F",'#10'".n c #34393'
+ +'E",'#10'".o c #4D545B",'#10'".p c #90A0B0",'#10'".q c #515D69",'#10'".r c #'
+ +'657486",'#10'".s c #4E5863",'#10'".t c #8898AA",'#10'".u c #4A515A",'#10'".'
+ +'v c #111316",'#10'".w c #586169",'#10'".x c #484F56",'#10'".y c #2C2F32",'
+ +#10'".z c #2D3034",'#10'".A c #3C4246",'#10'".B c #33383D",'#10'".C c #08090'
+ +'A",'#10'".D c #D9B434",'#10'".E c #E1C25E",'#10'".F c #E2C360",'#10'".G c #'
+ +'E2C35F",'#10'".H c #DBB63C",'#10'".I c #AFB9C4",'#10'".J c #8D9AA7",'#10'".'
+ +'K c #404547",'#10'".L c #555B63",'#10'".M c #A4AFBB",'#10'".N c #8B98A6",'
+ +#10'".O c #212427",'#10'".P c #DAB336",'#10'".Q c #FEFEFD",'#10'".R c #FFFFF'
+ +'E",'#10'".S c #FFFEFE",'#10'".T c #FFFEFD",'#10'".U c #FBF7EA",'#10'".V c #'
+ +'5F6871",'#10'".W c #ABB6C1",'#10'".X c #667079",'#10'".Y c #54544A",'#10'".'
+ +'Z c #A6955C",'#10'".0 c #5D666E",'#10'".1 c #A5B1BD",'#10'".2 c #6A747E",'
+ +#10'".3 c #1B1D20",'#10'".4 c #DAAF35",'#10'".5 c #FEFCF7",'#10'".6 c #F8E48'
+ +'E",'#10'".7 c #F5DE91",'#10'".8 c #F5E09F",'#10'".9 c #F6E1AC",'#10'".@ c #'
+ +'FEFBEF",'#10'".# c #545B63",'#10'".; c #5E6770",'#10'".: c #3B4044",'#10'".'
+ +'= c #ACAAA3",'#10'".+ c #4E555C",'#10'".% c #7F8A96",'#10'".$ c #131416",'
+ +#10'".( c #DAAA36",'#10'".) c #FDFAF1",'#10'".[ c #F5DE94",'#10'".] c #F4DC9'
+ +'3",'#10'",. c #F2D581",'#10'",, c #E9C060",'#10'",- c #E1AE4F",'#10'",* c #'
+ +'DA9435",'#10'",a c #111315",'#10'",b c #030404",'#10'",c c #DAAB35",'#10'",'
+ +'d c #FBF6E8",'#10'",e c #EAC57E",'#10'",f c #E3AE5B",'#10'",g c #E1A851",'
+ +#10'",h c #E4AF60",'#10'",i c #FDFAEB",'#10'",j c #FEFAEC",'#10'",k c #FCF5E'
+ +'5",'#10'",l c #FCF6E5",'#10'",m c #FCF5E4",'#10'",n c #DAA637",'#10'",o c #'
+ +'FFFDF8",'#10'",p c #FFFDF6",'#10'",q c #FFFCF5",'#10'",r c #FEFAE8",'#10'",'
+ +'s c #FAECAF",'#10'",t c #F8E387",'#10'",u c #F7E07D",'#10'",v c #F6DD72",'
+ +#10'",w c #F5DB68",'#10'",x c #FDF9E9",'#10'",y c #DAA136",'#10'",z c #FEFCF'
+ +'6",'#10'",A c #FCF2C8",'#10'",B c #FBEFB9",'#10'",C c #FAECAC",'#10'",D c #'
+ +'F8E48C",'#10'",E c #F8E38A",'#10'",F c #F7E182",'#10'",G c #F7DF79",'#10'",'
+ +'H c #F6DD6D",'#10'",I c #F5DA61",'#10'",J c #F4D757",'#10'",K c #FDF8E7",'
+ +#10'",L c #DA9A36",'#10'",M c #FDFAF2",'#10'",N c #FAEDB3",'#10'",O c #F9E9A'
+ +'4",'#10'",P c #F8E695",'#10'",Q c #F7E285",'#10'",R c #F7E181",'#10'",S c #'
+ +'F7E07A",'#10'",T c #F6DD6F",'#10'",U c #F5DA62",'#10'",V c #F3D654",'#10'",'
+ +'W c #F2D347",'#10'",X c #FDF9E8",'#10'",Y c #FEFAEF",'#10'",Z c #F9E9A1",'
+ +#10'",0 c #F8E591",'#10'",1 c #F6DE72",'#10'",2 c #F5DA63",'#10'",3 c #F4D75'
+ +'4",'#10'",4 c #F3D347",'#10'",5 c #F2D039",'#10'",6 c #F1CD2E",'#10'",7 c #'
+ +'F0CB26",'#10'",8 c #FBF2CA",'#10'",9 c #D98E33",'#10'",@ c #FAF0DC",'#10'",'
+ +'# c #F4DDA7",'#10'",; c #F4DB9E",'#10'",: c #F3DA96",'#10'",= c #F3D88E",'
+ +#10'",+ c #F3D786",'#10'",% c #F2D47F",'#10'",$ c #F2D379",'#10'",( c #F1D27'
+ +'2",'#10'",) c #F1D06C",'#10'",[ c #F1CF69",'#10'",] c #F8EAC2",'#10'"-. c #'
+ +'D8882D",'#10'"-, c #D8872D",'#10'"-- c #D8862C",'#10'"...................,.'
+ +'-...*.a....",'#10'".................b.c.a...d.e.f..",'#10'"................'
+ +'.g.h.i.j.k.l.m..",'#10'"...............n.o.p.q.r.s.t.u.v",'#10'"...........'
+ +'....g.w.x.y...z.A.B.C",'#10'".D.E.F.F.F.G.H.,.I.J.K...L.M.N.O",'#10'".P.Q.R'
+ +'.S.T.R.U.V.W.X.Y.Z.0.1.2.3",'#10'".4.5.6.7.8.9.@.#.J.;.:.=.+.%.g.$",'#10'".'
+ +'(.).[.],.,,,-,*,*,*,*,*,*,*,a,b",'#10'",c,d,e,f,g,h,i,j,k,l,m,m.R,*....",'
+ +#10'",n.R,o,p,q,r,s.6,t,u,v,w,x,*....",'#10'",y,z,A,B,C,D,E,F,G,H,I,J,K,*...'
+ +'.",'#10'",L,M,N,O,P,Q,R,S,T,U,V,W,X,*....",'#10'",*,Y,Z,0,R,1,2,3,4,5,6,7,8'
+ +',*....",'#10'",9,@,#,;,:,=,+,%,$,(,),[,],9....",'#10'"..-.-,-.-.-.-.-.-.-.-'
+ +'.-,-.--...."}'#10#9'NumGlyphs'#2#0#7'OnClick'#7#19'SBLocationPathClick'#0#0
+ +#7'TTIEdit'#16'ELocationBaseDir'#4'Left'#2'V'#6'Height'#2#23#3'Top'#2'0'#5'W'
+ +'idth'#3#176#1#19'Link.TIPropertyName'#6#8'BasePath'#13'OnEditingDone'#7#15
+ +'LocationChanged'#8'TabOrder'#2#1#0#0#7'TTIEdit'#13'ELocationName'#4'Left'#2
+ +'V'#6'Height'#2#23#3'Top'#2#13#5'Width'#3#184#0#19'Link.TIPropertyName'#6#4
+ +'Name'#13'OnEditingDone'#7#15'LocationChanged'#8'TabOrder'#2#0#0#0#13'TTIChe'
+ +'ckGroup'#17'CGLocationSubdirs'#4'Left'#2'V'#6'Height'#2'd'#3'Top'#2'P'#5'Wi'
+ +'dth'#3'X'#1#7'Caption'#6#26'Create subdirectories from'#12'ColumnLayout'#7
+ +#24'clVerticalThenHorizontal'#7'Columns'#2#2#19'Link.TIPropertyName'#6#7'Sub'
+ +'Dirs'#23'Link.AliasValuesStrings'#1#6#21'sdExtension=Extension'#6#11'sdYear'
+ +'=Year'#6#13'sdMonth=Month'#6#9'sdDay=Day'#6#11'sdDate=Date'#6#11'sdHour=Hou'
+ +'r'#6#9'sdMin=Min'#6#11'sdTime=Time'#0#13'OnEditingDone'#7#15'LocationChange'
+ +'d'#0#0#0#9'TListView'#11'LVLocations'#6'Height'#3#192#0#5'Width'#3';'#2#5'A'
+ +'lign'#7#8'alClient'#7'Columns'#14#1#7'Caption'#6#4'Name'#5'Width'#2'x'#0#1#7
+ +'Caption'#6#4'Path'#5'Width'#3#200#0#0#1#7'Caption'#6#7'Subdirs'#0#0#8'ReadO'
+ +'nly'#9#9'RowSelect'#9#8'TabOrder'#2#1#9'ViewStyle'#7#8'vsReport'#12'OnSelec'
+ ,'tItem'#7#21'LVLocationsSelectItem'#0#0#0#9'TTabSheet'#13'TSFileActions'#7'C'
+ +'aption'#6#7'Actions'#12'ClientHeight'#3'|'#1#11'ClientWidth'#3';'#2#0#9'TLi'
+ +'stView'#13'LVFileActions'#6'Height'#3#216#0#5'Width'#3';'#2#5'Align'#7#8'al'
+ +'Client'#7'Columns'#14#1#7'Caption'#6#4'Name'#5'Width'#2'd'#0#1#7'Caption'#6
+ +#10'Extensions'#5'Width'#2'd'#0#1#7'Caption'#6#8'Location'#0#1#7'Caption'#6#6
+ +'Delete'#0#1#7'Caption'#6#8'Compress'#0#1#7'Caption'#6#15'MinCompressSize'#0
+ +#1#7'Caption'#6#14'Case sensitive'#0#0#8'ReadOnly'#9#9'RowSelect'#9#8'TabOrd'
+ +'er'#2#0#9'ViewStyle'#7#8'vsReport'#12'OnSelectItem'#7#23'LVFileActionsSelec'
+ +'tItem'#0#0#6'TPanel'#11'PFileAction'#6'Height'#3#164#0#3'Top'#3#216#0#5'Wid'
+ +'th'#3';'#2#5'Align'#7#8'alBottom'#10'BevelOuter'#7#9'bvLowered'#12'ClientHe'
+ +'ight'#3#164#0#11'ClientWidth'#3';'#2#8'TabOrder'#2#1#0#6'TLabel'#28'LSEFile'
+ +'ActionMinCompressSize'#4'Left'#3#214#0#6'Height'#2#20#3'Top'#3#131#0#5'Widt'
+ +'h'#2'U'#9'Alignment'#7#14'taRightJustify'#8'AutoSize'#8#7'Caption'#6#13'&Mi'
+ +'nimum size'#12'FocusControl'#7#27'SEFileActionMinCompressSize'#6'Layout'#7#8
+ +'tlCenter'#11'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Left'#2#15#6'Height'#2
+ +#23#3'Top'#2#8#5'Width'#2'F'#9'Alignment'#7#14'taRightJustify'#8'AutoSize'#8
+ +#7'Caption'#6#5'&Name'#6'Layout'#7#8'tlCenter'#11'ParentColor'#8#0#0#6'TLabe'
+ +'l'#6'Label6'#4'Left'#2#15#6'Height'#2#23#3'Top'#2'('#5'Width'#2'F'#9'Alignm'
+ +'ent'#7#14'taRightJustify'#8'AutoSize'#8#7'Caption'#6#11'&Extensions'#6'Layo'
+ +'ut'#7#8'tlCenter'#11'ParentColor'#8#0#0#6'TLabel'#6'Label7'#4'Left'#2#13#6
+ +'Height'#2#25#3'Top'#2'H'#5'Width'#2'H'#9'Alignment'#7#14'taRightJustify'#8
+ +'AutoSize'#8#7'Caption'#6#8'Location'#6'Layout'#7#8'tlCenter'#11'ParentColor'
+ +#8#0#0#7'TTIEdit'#15'EFileActionName'#4'Left'#2'\'#6'Height'#2#23#3'Top'#2#8
+ +#5'Width'#3#178#0#19'Link.TIPropertyName'#6#4'Name'#13'OnEditingDone'#7#13'A'
+ +'ctionChanged'#8'TabOrder'#2#0#0#0#7'TTIEdit'#21'EFileActionExtensions'#4'Le'
+ +'ft'#2'\'#6'Height'#2#23#3'Top'#2'('#5'Width'#3#178#0#19'Link.TIPropertyName'
+ +#6#10'Extensions'#13'OnEditingDone'#7#13'ActionChanged'#8'TabOrder'#2#1#0#0
+ +#11'TTICheckBox'#18'CBFileActionDelete'#4'Left'#2'\'#6'Height'#2#22#3'Top'#2
+ +'h'#5'Width'#2'<'#7'Caption'#6#7'&Delete'#19'Link.TIPropertyName'#6#6'Delete'
+ +#13'OnEditingDone'#7#13'ActionChanged'#8'TabOrder'#2#2#0#0#11'TTICheckBox'#20
+ +'CBFileActionCompress'#4'Left'#2'\'#6'Height'#2#22#3'Top'#3#131#0#5'Width'#2
+ +'O'#7'Caption'#6#9'&Compress'#19'Link.TIPropertyName'#6#8'Compress'#8'OnChan'
+ +'ge'#7#26'CBFileActionCompressChange'#8'TabOrder'#2#3#0#0#11'TTISpinEdit'#27
+ +'SEFileActionMinCompressSize'#4'Left'#3'.'#1#6'Height'#2#23#3'Top'#3#128#0#5
+ +'Width'#2'2'#18'Link.TIElementName'#6#15'MinCompressSize'#8'MaxValue'#3#16
+ +''''#13'OnEditingDone'#7#13'ActionChanged'#8'TabOrder'#2#4#13'UseRTTIMinMax'
+ +#8#0#0#11'TTIComboBox'#24'CBFileActionLocationName'#4'Left'#2'\'#6'Height'#2
+ +#25#3'Top'#2'H'#5'Width'#2'd'#12'AutoDropDown'#9#19'Link.TIPropertyName'#6#12
+ +'LocationName'#9'MaxLength'#2#0#13'OnEditingDone'#7#13'ActionChanged'#6'Sort'
+ +'ed'#9#5'Style'#7#14'csDropDownList'#8'TabOrder'#2#5#0#0#0#0#9'TTabSheet'#12
+ +'TSScheduling'#7'Caption'#6#10'Scheduling'#12'ClientHeight'#3'^'#1#11'Client'
+ +'Width'#3'7'#2#0#6'TLabel'#9'LEDailyAt'#4'Left'#2#14#6'Height'#2#23#3'Top'#3
+ +#130#0#5'Width'#2'8'#9'Alignment'#7#14'taRightJustify'#8'AutoSize'#8#7'Capti'
+ +'on'#6#8'Daily at'#6'Layout'#7#8'tlCenter'#11'ParentColor'#8#0#0#6'TLabel'#11
+ +'LSEHourlyAt'#4'Left'#2#14#6'Height'#2#23#3'Top'#3#170#0#5'Width'#2'8'#9'Ali'
+ +'gnment'#7#14'taRightJustify'#8'AutoSize'#8#7'Caption'#6#9'Hourly at'#6'Layo'
+ +'ut'#7#8'tlCenter'#11'ParentColor'#8#0#0#13'TTIRadioGroup'#14'RGScheduleMode'
+ +#4'Left'#2#14#6'Height'#2'l'#3'Top'#2#10#5'Width'#3#168#0#7'Caption'#6#16'Sc'
+ +'hedule service'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBott'
+ +'omSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildRes'
+ +'ize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'Chil'
+ +'dSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertica'
+ +'l'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopTo'
+ +'Bottom'#27'ChildSizing.ControlsPerLine'#2#1#19'Link.TIPropertyName'#6#12'Sc'
+ +'heduleMode'#23'Link.AliasValuesStrings'#1#6#13'smDaily=Daily'#6#15'smHourly'
+ +'=Hourly'#0#13'OnEditingDone'#7#19'ScheduleModeChanged'#0#0#7'TTIEdit'#8'EDa'
+ +'ilyAt'#4'Left'#2'V'#6'Height'#2#23#3'Top'#3#130#0#5'Width'#2'P'#19'Link.TIP'
+ +'ropertyName'#6#7'DailyAt'#13'OnEditingDone'#7#14'OptionsChanged'#8'TabOrder'
+ +#2#1#0#0#11'TTISpinEdit'#10'SEHourlyAt'#4'Left'#2'V'#6'Height'#2#23#3'Top'#3
+ +#170#0#5'Width'#2'2'#19'Link.TIPropertyName'#6#8'HourlyAt'#8'MaxValue'#2';'
+ +#13'OnEditingDone'#7#14'OptionsChanged'#8'TabOrder'#2#2#0#0#13'TTICheckGroup'
+ +#14'CGScheduleDays'#4'Left'#3#198#0#6'Height'#2'l'#3'Top'#2#10#5'Width'#3'8'
+ +#1#7'Caption'#6#27'Days of week to run service'#12'ColumnLayout'#7#24'clVert'
+ +'icalThenHorizontal'#7'Columns'#2#2#19'Link.TIPropertyName'#6#12'ScheduleDay'
+ ,'s'#23'Link.AliasValuesStrings'#1#6#15'sdMonday=Monday'#6#17'sdTuesday=Tuesd'
+ +'ay'#6#21'sdWednesday=Wednesday'#6#19'sdThursday=Thursday'#6#15'sdFriday=Fri'
+ +'day'#6#19'sdSaturday=Saturday'#6#15'sdSunday=Sunday'#0#13'OnEditingDone'#7
+ +#14'OptionsChanged'#0#0#0#0#9'TMainMenu'#6'MMMain'#6'Images'#7#6'ILMain'#4'l'
+ +'eft'#2'P'#3'top'#2'@'#0#9'TMenuItem'#5'MFile'#7'Caption'#6#5'&File'#0#9'TMe'
+ +'nuItem'#4'MNew'#6'Action'#7#4'ANew'#11'Bitmap.Data'#10#229#12#0#0#225#12#0#0
+ +'/* XPM */'#10'static char *graphic[] = {'#10'"16 16 167 2",'#10'".. c None"'
+ +','#10'"., c #4D8BC8",'#10'".- c #4F8CC8",'#10'".* c #4F8DC8",'#10'".a c #4F'
+ +'8CC9",'#10'".b c #4F8BC7",'#10'".c c #4B89C5",'#10'".d c #3B76C4",'#10'".e '
+ +'c #4985C4",'#10'".f c #ECF2F7",'#10'".g c #EEF4F8",'#10'".h c #EDF4F8",'#10
+ +'".i c #EDF3F8",'#10'".j c #ECF2F8",'#10'".k c #D7E6F2",'#10'".l c #7DB2E2",'
+ +#10'".m c #6594DB",'#10'".n c #4B88C5",'#10'".o c #F2F6FA",'#10'".p c #C7E0F'
+ +'A",'#10'".q c #C9E1FB",'#10'".r c #C9E2FB",'#10'".s c #C8E0FB",'#10'".t c #'
+ +'C5DFF9",'#10'".u c #C1DBF8",'#10'".v c #B8D6F4",'#10'".w c #F8FBFF",'#10'".'
+ +'x c #B4D8F6",'#10'".y c #7DB0E1",'#10'".z c #6492DB",'#10'".A c #4C89C6",'
+ +#10'".B c #F1F5F9",'#10'".C c #CDE3FC",'#10'".D c #CEE3FB",'#10'".E c #CDE3F'
+ +'B",'#10'".F c #CBE2FB",'#10'".G c #C8E0F9",'#10'".H c #C2DCF8",'#10'".I c #'
+ +'BAD6F5",'#10'".J c #F8FBFD",'#10'".K c #CDE6FC",'#10'".L c #C9E5FA",'#10'".'
+ +'M c #84B6E2",'#10'".N c #4279BF",'#10'".O c #4B89C6",'#10'".P c #CFE3FC",'
+ +#10'".Q c #D0E4FB",'#10'".R c #CFE4FC",'#10'".S c #CAE1FA",'#10'".T c #C4DDF'
+ +'9",'#10'".U c #BCD9F6",'#10'".V c #DFE9F4",'#10'".W c #F3F7FB",'#10'".X c #'
+ +'E9EFF5",'#10'".Y c #457EC2",'#10'".Z c #F0F4F9",'#10'".0 c #D3E6FC",'#10'".'
+ +'1 c #D4E6FC",'#10'".2 c #D3E7FD",'#10'".3 c #D1E4FC",'#10'".4 c #C8E0FA",'
+ +#10'".5 c #BBD6F5",'#10'".6 c #B5D4F3",'#10'".7 c #B3D2F1",'#10'".8 c #F0F4F'
+ +'8",'#10'".9 c #4682C4",'#10'".@ c #4A88C6",'#10'".# c #EFF4F9",'#10'".; c #'
+ +'D7E7FE",'#10'".: c #D6E7FD",'#10'".= c #D5E7FD",'#10'".+ c #D4E6FD",'#10'".'
+ +'% c #D2E6FC",'#10'".$ c #CCE1FB",'#10'".( c #C7DFFA",'#10'".) c #BDDAF6",'
+ +#10'".[ c #BBD8F6",'#10'".] c #EFF4FA",'#10'",. c #4683C6",'#10'",, c #4988C'
+ +'6",'#10'",- c #EDF4F9",'#10'",* c #D8E8FE",'#10'",a c #D7E8FE",'#10'",b c #'
+ +'D6E7FE",'#10'",c c #D3E5FD",'#10'",d c #C3DDF9",'#10'",e c #EDF4FA",'#10'",'
+ +'f c #4582C6",'#10'",g c #4784C6",'#10'",h c #ECF3F9",'#10'",i c #D6E8FE",'
+ +#10'",j c #CCE3FB",'#10'",k c #C6DFFA",'#10'",l c #EAF2FA",'#10'",m c #4280C'
+ +'6",'#10'",n c #4582C5",'#10'",o c #EBF2F8",'#10'",p c #D5E6FD",'#10'",q c #'
+ +'CDE2FC",'#10'",r c #CBE1FB",'#10'",s c #F2F7FB",'#10'",t c #3F7CC5",'#10'",'
+ +'u c #4280C5",'#10'",v c #E8F1F8",'#10'",w c #D5E5FE",'#10'",x c #D3E5FC",'
+ +#10'",y c #CEE2FC",'#10'",z c #CCE2FC",'#10'",A c #C9E0FB",'#10'",B c #C8E1F'
+ +'B",'#10'",C c #F7FAFD",'#10'",D c #3B76C1",'#10'",E c #407CC4",'#10'",F c #'
+ +'E6F0F7",'#10'",G c #55B4F8",'#10'",H c #56B4F7",'#10'",I c #54B5F7",'#10'",'
+ +'J c #53B4F8",'#10'",K c #53B2F8",'#10'",L c #52B3F7",'#10'",M c #51B2F7",'
+ +#10'",N c #4FB2F7",'#10'",O c #F5F9FC",'#10'",P c #366FBF",'#10'",Q c #3C78C'
+ +'1",'#10'",R c #E3EDF7",'#10'",S c #6EC2FD",'#10'",T c #A0D8FF",'#10'",U c #'
+ +'9ED7FF",'#10'",V c #9BD6FF",'#10'",W c #98D7FF",'#10'",X c #96D6FF",'#10'",'
+ +'Y c #95D6FF",'#10'",Z c #94D5FF",'#10'",0 c #93D4FF",'#10'",1 c #65BEFB",'
+ +#10'",2 c #F4F7FB",'#10'",3 c #3167BB",'#10'",4 c #3871BF",'#10'",5 c #DFEBF'
+ +'5",'#10'",6 c #68BFFD",'#10'",7 c #67BDFC",'#10'",8 c #64BEFC",'#10'",9 c #'
+ +'62BDFC",'#10'",@ c #63BDFB",'#10'",# c #61BCFB",'#10'",; c #60BEFC",'#10'",'
+ +': c #62BCFC",'#10'",= c #2D64B9",'#10'",+ c #3369BC",'#10'",% c #EAF1F8",'
+ +#10'",$ c #DFECF7",'#10'",( c #DEEBF6",'#10'",) c #DEEAF6",'#10'",[ c #DCEAF'
+ +'6",'#10'",] c #EBF3FA",'#10'"-. c #F3F7FC",'#10'"-, c #F4F8FC",'#10'"-- c #'
+ +'FDFEFE",'#10'"-* c #2A60B7",'#10'"-a c #3065BA",'#10'"-b c #3166BB",'#10'"-'
+ +'c c #3066BA",'#10'"-d c #2F65BA",'#10'"-e c #2E65B9",'#10'"-f c #2E64B9",'
+ +#10'"-g c #2C62B7",'#10'".....,.-.-.-.-.*.a.b.c.d........",'#10'"...e.f.g.h.'
+ +'i.i.i.j.f.k.l.m......",'#10'"...n.o.p.q.r.s.t.u.v.w.x.y.z....",'#10'"...A.B'
+ +'.C.D.E.F.G.H.I.J.K.L.M.N..",'#10'"...O.B.P.Q.R.C.S.T.U.V.f.W.X.Y..",'#10'".'
+ +'..O.Z.0.1.2.3.E.4.H.5.6.7.8.9..",'#10'"...@.#.;.:.=.+.%.$.(.H.).[.],...",'
+ +#10'"..,,,-,*,*,a,b,c.3.$.p,d.H,e,f..",'#10'"..,g,h,i,a.:.:.=,c.Q,j.(,k,l,m.'
+ +'.",'#10'"..,n,o,b.:.:.:,p,c.3,q,r.q,s,t..",'#10'"..,u,v,w,c,c,x,x.3,y,z,A,B'
+ +',C,D..",'#10'"..,E,F,G,H,I,J,K,L,L,M,N,N,O,P..",'#10'"..,Q,R,S,T,U,V,W,X,Y,'
+ +'Z,0,1,2,3..",'#10'"..,4,5,6,7,1,8,8,9,@,#,;,:.J,=..",'#10'"..,+,%,$,(,),[,['
+ +',],],l-.-,---*..",'#10'"....-a-b-c-c-c-a-d-e-e-f-f-g...."}'#10#7'OnClick'#7
+ +#11'ANewExecute'#0#0#9'TMenuItem'#6'MIOpen'#6'Action'#7#5'AOpen'#11'Bitmap.D'
+ +'ata'#10'e'#13#0#0'a'#13#0#0'/* XPM */'#10'static char *graphic[] = {'#10'"1'
+ +'6 16 175 2",'#10'".. c None",'#10'"., c #9DC3EA",'#10'".- c #96BFE6",'#10'"'
+ +'.* c #92BBE4",'#10'".a c #6CA0D1",'#10'".b c #6D9ED0",'#10'".c c #5F96CC",'
+ ,#10'".d c #96BEE5",'#10'".e c #FEFFFF",'#10'".f c #E9F3FD",'#10'".g c #EAF3F'
+ +'D",'#10'".h c #E8F2FC",'#10'".i c #E3EFFA",'#10'".j c #E7F2FA",'#10'".k c #'
+ +'88BBEA",'#10'".l c #5585CF",'#10'".m c #93BBE4",'#10'".n c #EDF5FE",'#10'".'
+ +'o c #C5DEFC",'#10'".p c #C7E0FB",'#10'".q c #C2DCF9",'#10'".r c #B4D3F5",'
+ +#10'".s c #F3F9FE",'#10'".t c #C4E2FA",'#10'".u c #93C1EC",'#10'".v c #487DC'
+ +'3",'#10'".w c #F0F6FE",'#10'".x c #CDE2FC",'#10'".y c #CDE3FC",'#10'".z c #'
+ +'C8DFFA",'#10'".A c #BCD9F7",'#10'".B c #DDE9F5",'#10'".C c #EBF3FA",'#10'".'
+ +'D c #F3F8FB",'#10'".E c #5383CA",'#10'".F c #F1F7FE",'#10'".G c #D2E5FC",'
+ +#10'".H c #D1E4FC",'#10'".I c #CCE2FB",'#10'".J c #C4DDF9",'#10'".K c #BBD7F'
+ +'6",'#10'".L c #AFD1F3",'#10'".M c #E4EFFA",'#10'".N c #5887CC",'#10'".O c #'
+ +'D9B434",'#10'".P c #E1C25E",'#10'".Q c #E2C360",'#10'".R c #E2C35F",'#10'".'
+ +'S c #91BBE4",'#10'".T c #F2F7FF",'#10'".U c #D5E7FE",'#10'".V c #D1E5FD",'
+ +#10'".W c #CAE0FA",'#10'".X c #C4DEF9",'#10'".Y c #E7F2FD",'#10'".Z c #5787C'
+ +'C",'#10'".0 c #DAB336",'#10'".1 c #FEFEFD",'#10'".2 c #FFFFFE",'#10'".3 c #'
+ +'FFFEFE",'#10'".4 c #FFFEFD",'#10'".5 c #91BAE4",'#10'".6 c #F0F7FF",'#10'".'
+ +'7 c #D5E7FF",'#10'".8 c #D6E7FD",'#10'".9 c #D4E6FD",'#10'".@ c #D0E4FC",'
+ +#10'".# c #CBE3FB",'#10'".; c #C2DCFA",'#10'".: c #E8F3FE",'#10'".= c #5686C'
+ +'C",'#10'".+ c #DAAF35",'#10'".% c #FEFCF7",'#10'".$ c #F8E48E",'#10'".( c #'
+ +'F5DE91",'#10'".) c #F5E09F",'#10'".[ c #F6E1AC",'#10'".] c #5284CA",'#10'",'
+ +'. c #F1F7FF",'#10'",, c #D9E9FF",'#10'",- c #DBEAFF",'#10'",* c #D7E7FF",'
+ +#10'",a c #D2E5FF",'#10'",b c #CBE2FF",'#10'",c c #5585CB",'#10'",d c #DAAA3'
+ +'6",'#10'",e c #FDFAF1",'#10'",f c #F5DE94",'#10'",g c #F4DC93",'#10'",h c #'
+ +'E9BC64",'#10'",i c #DA9435",'#10'",j c #EFF6FB",'#10'",k c #5583CC",'#10'",'
+ +'l c #DAAB35",'#10'",m c #FBF6E8",'#10'",n c #E7BC70",'#10'",o c #E2AA55",'
+ +#10'",p c #E0A54D",'#10'",q c #EBC991",'#10'",r c #EFF3FA",'#10'",s c #FDFEF'
+ +'D",'#10'",t c #FCFDFF",'#10'",u c #FCFDFE",'#10'",v c #FBFCFE",'#10'",w c #'
+ +'FDFEFE",'#10'",x c #E8F2EF",'#10'",y c #5681CE",'#10'",z c #DAA637",'#10'",'
+ +'A c #FFFDF8",'#10'",B c #FFFDF6",'#10'",C c #FFFCF5",'#10'",D c #FEFCF3",'
+ +#10'",E c #F4E49A",'#10'",F c #F7E69A",'#10'",G c #F6E69B",'#10'",H c #F5E59'
+ +'D",'#10'",I c #F5E59E",'#10'",J c #F4E59F",'#10'",K c #F8F3DA",'#10'",L c #'
+ +'EEF4FD",'#10'",M c #5480CA",'#10'",N c #DAA136",'#10'",O c #FEFCF6",'#10'",'
+ +'P c #F8E594",'#10'",Q c #F8E593",'#10'",R c #F8E591",'#10'",S c #E9DB93",'
+ +#10'",T c #E3D793",'#10'",U c #DCD293",'#10'",V c #D7CE90",'#10'",W c #CFC88'
+ +'C",'#10'",X c #C6C186",'#10'",Y c #D6D8C9",'#10'",Z c #4474C5",'#10'",0 c #'
+ +'537FCA",'#10'",1 c #DA9A36",'#10'",2 c #FDFAF2",'#10'",3 c #F8E694",'#10'",'
+ +'4 c #F8E592",'#10'",5 c #F8E590",'#10'",6 c #F8E38B",'#10'",7 c #F7E286",'
+ +#10'",8 c #F7E17F",'#10'",9 c #F6DE77",'#10'",@ c #F6DC6C",'#10'",# c #F4D95'
+ +'E",'#10'",; c #F3D54F",'#10'",: c #FBF2CC",'#10'",= c #FEFAEF",'#10'",+ c #'
+ +'F8E48F",'#10'",% c #F8E389",'#10'",$ c #F7E182",'#10'",( c #F7DF7A",'#10'",'
+ +') c #F6DE71",'#10'",[ c #F5DB67",'#10'",] c #F4D85B",'#10'"-. c #F3D44D",'
+ +#10'"-, c #F2D140",'#10'"-- c #FBF2CA",'#10'"-* c #D98E33",'#10'"-a c #FAF0D'
+ +'C",'#10'"-b c #F6E198",'#10'"-c c #F6E095",'#10'"-d c #F6DF92",'#10'"-e c #'
+ +'F5DE8E",'#10'"-f c #F5DC89",'#10'"-g c #F4DA85",'#10'"-h c #F4D980",'#10'"-'
+ +'i c #F3D77A",'#10'"-j c #F3D574",'#10'"-k c #F2D370",'#10'"-l c #F8EAC2",'
+ +#10'"-m c #D8862C",'#10'"-n c #D8882D",'#10'"-o c #D8872D",'#10'"...........'
+ +'..,.-.*.*.a.b.c......",'#10'".............d.e.f.g.h.i.j.k.l..",'#10'"......'
+ +'.......m.n.o.p.q.r.s.t.u.v",'#10'".............*.w.x.y.z.A.B.C.D.E",'#10'".'
+ +'............*.F.G.H.I.J.K.L.M.N",'#10'".O.P.Q.Q.Q.R.S.T.U.U.V.W.X.A.Y.Z",'
+ +#10'".0.1.2.3.4.2.5.6.7.8.9.@.#.;.:.=",'#10'".+.%.$.(.).[.],.,,,-,,,*,a,b,.,'
+ +'c",'#10'",d,e,f,g,h,i,i,i,i,i,i,i,i,i,j,k",'#10'",l,m,n,o,p,q,r,s,t,t,u,v,w'
+ +',i,x,y",'#10'",z.2,A,B,C,D,E,F,G,H,I,J,K,i,L,M",'#10'",N,O,P,Q,Q,R,S,T,U,V,'
+ +'W,X,Y,i,Z,0",'#10'",1,2,3,4,5,6,7,8,9,@,#,;,:,i....",'#10'",i,=,Q,+,%,$,(,)'
+ +',[,]-.-,--,i....",'#10'"-*-a-b-c-d-e-f-g-h-i-j-k-l,i....",'#10'"-m-n-o-n-n-'
+ +'n-n-n-n-n-n-o-n-m...."}'#10#7'OnClick'#7#12'AOpenExecute'#0#0#9'TMenuItem'#6
+ +'MISave'#6'Action'#7#5'ASave'#11'Bitmap.Data'#10#5#12#0#0#1#12#0#0'/* XPM */'
+ +#10'static char *graphic[] = {'#10'"16 16 153 2",'#10'".. c None",'#10'"., c'
+ +' #366BBC",'#10'".- c #366BBB",'#10'".* c #366ABB",'#10'".a c #396CBC",'#10
+ +'".b c #3B6EBD",'#10'".c c #3A6DBB",'#10'".d c #386BBB",'#10'".e c #3E70BB",'
+ +#10'".f c #D1E0F6",'#10'".g c #D1E0F7",'#10'".h c #F8FBFE",'#10'".i c #F7FBF'
+ +'E",'#10'".j c #F6F9FD",'#10'".k c #F0F5FC",'#10'".l c #EAF0FA",'#10'".m c #'
+ +'EDF2FB",'#10'".n c #F7FAFD",'#10'".o c #EBF1FB",'#10'".p c #DFE9F8",'#10'".'
+ +'q c #BDD0EC",'#10'".r c #5E89C9",'#10'".s c #D1DFF6",'#10'".t c #80AAE9",'
+ +#10'".u c #F6FAFE",'#10'".v c #F6FAFD",'#10'".w c #648CC8",'#10'".x c #EEF3F'
+ +'B",'#10'".y c #EAF1FB",'#10'".z c #F2F6FC",'#10'".A c #F1F6FC",'#10'".B c #'
+ ,'E2ECF9",'#10'".C c #DBE7F8",'#10'".D c #BAD0EE",'#10'".E c #D0DFF6",'#10'".'
+ +'F c #7EA8E8",'#10'".G c #E9F1FA",'#10'".H c #EEF4FB",'#10'".I c #E8F0FA",'
+ +#10'".J c #DDE8F8",'#10'".K c #DBE6F7",'#10'".L c #7AA3E1",'#10'".M c #C3D5E'
+ +'F",'#10'".N c #3569B7",'#10'".O c #CCDDF5",'#10'".P c #7EA8E7",'#10'".Q c #'
+ +'668DC9",'#10'".R c #E9F0FA",'#10'".S c #F3F8FD",'#10'".T c #F8FAFE",'#10'".'
+ +'U c #EFF4FC",'#10'".V c #DFE9F9",'#10'".W c #DBE7F7",'#10'".X c #D9E5F7",'
+ +#10'".Y c #78A2E0",'#10'".Z c #A9C2E7",'#10'".0 c #3568B6",'#10'".1 c #C9DCF'
+ +'4",'#10'".2 c #7DA7E7",'#10'".3 c #E1ECF9",'#10'".4 c #E3EDF9",'#10'".5 c #'
+ +'EEF4FC",'#10'".6 c #F3F7FD",'#10'".7 c #E5EDFA",'#10'".8 c #D8E5F6",'#10'".'
+ +'9 c #77A0DE",'#10'".@ c #A4BEE4",'#10'".# c #3467B4",'#10'".; c #C7D9F4",'
+ +#10'".: c #7DA6E6",'#10'".= c #658DC9",'#10'".+ c #678EC9",'#10'".% c #6C92C'
+ +'B",'#10'".$ c #6D92CB",'#10'".( c #6990CA",'#10'".) c #658CC8",'#10'".[ c #'
+ +'749CDA",'#10'".] c #9FBAE1",'#10'",. c #3466B3",'#10'",, c #C5D8F2",'#10'",'
+ +'- c #7BA4E3",'#10'",* c #7AA3E3",'#10'",a c #7AA4E3",'#10'",b c #7BA4E2",'
+ +#10'",c c #7BA3E2",'#10'",d c #7BA3E1",'#10'",e c #79A2E1",'#10'",f c #77A0D'
+ +'F",'#10'",g c #769FDE",'#10'",h c #749EDD",'#10'",i c #729CDB",'#10'",j c #'
+ +'749DDC",'#10'",k c #9AB5DD",'#10'",l c #3465B1",'#10'",m c #C2D5F2",'#10'",'
+ +'n c #78A1E0",'#10'",o c #759EDE",'#10'",p c #739BDA",'#10'",q c #739BD9",'
+ +#10'",r c #95B0DA",'#10'",s c #3364AF",'#10'",t c #BED2F0",'#10'",u c #7AA3E'
+ +'2",'#10'",v c #779FDE",'#10'",w c #769FDD",'#10'",x c #729BD9",'#10'",y c #'
+ +'7199D8",'#10'",z c #7099D6",'#10'",A c #8EABD5",'#10'",B c #3363AD",'#10'",'
+ +'C c #366ABA",'#10'",D c #BBD0EF",'#10'",E c #7AA2E2",'#10'",F c #6D96D3",'
+ +#10'",G c #8AA7D2",'#10'",H c #3262AB",'#10'",I c #B8CEEF",'#10'",J c #F7FAF'
+ +'E",'#10'",K c #88C062",'#10'",L c #6A93CF",'#10'",M c #84A3CE",'#10'",N c #'
+ +'3261AA",'#10'",O c #386CBB",'#10'",P c #B6CCEE",'#10'",Q c #7AA2E1",'#10'",'
+ +'R c #C2DCBF",'#10'",S c #6890CD",'#10'",T c #819ECC",'#10'",U c #3261A8",'
+ +#10'",V c #376BBA",'#10'",W c #B3CAED",'#10'",X c #7AA2E0",'#10'",Y c #658DC'
+ +'A",'#10'",Z c #7C9BC9",'#10'",0 c #3160A7",'#10'",1 c #356ABA",'#10'",2 c #'
+ +'ADC6EB",'#10'",3 c #ADC5EA",'#10'",4 c #7C9AC8",'#10'",5 c #7998C7",'#10'",'
+ +'6 c #3569B9",'#10'",7 c #3569B8",'#10'",8 c #3568B7",'#10'",9 c #3568B5",'
+ +#10'",@ c #3466B2",'#10'",# c #3365B0",'#10'",; c #3364AE",'#10'",: c #3263A'
+ +'C",'#10'",= c #3262AA",'#10'",+ c #3261A9",'#10'",% c #3160A8",'#10'",$ c #'
+ +'3160A6",'#10'",( c #3161A8",'#10'"...,.,.,.,.-.-.*.*.a.b.c.d.e....",'#10'".'
+ +',.f.g.h.i.j.k.l.m.j.n.o.p.q.r..",'#10'".,.s.t.u.v.w.x.y.z.h.A.B.C.D.q.e",'
+ +#10'".,.E.F.A.A.w.G.H.n.j.I.J.K.L.M.N",'#10'".,.O.P.I.I.Q.R.S.T.U.V.W.X.Y.Z.'
+ +'0",'#10'".-.1.2.3.3.4.5.n.6.7.W.X.8.9.@.#",'#10'".-.;.:.w.=.+.%.$.(.).w.w.w'
+ +'.[.],.",'#10'".*,,,-,*,a,b,c,d,e,f,g,h,i,j,k,l",'#10'".*,m,*,*,c,c,b,e,n.9,'
+ +'o,j,p,q,r,s",'#10'".*,t,u,u.L,c,d,n,v,w,j,x,y,z,A,B",'#10'",C,D,E.h.h.h.h.h'
+ +'.h.h.h.h.h,F,G,H",'#10'".d,I,e,J,K,K,K,K,K,K,K,K.j,L,M,N",'#10'",O,P,Q,J,R,'
+ +'R,R,R,R,R,R,R.j,S,T,U",'#10'",V,W,X,J,K,K,K,K,K,K,K,K.j,Y,Z,0",'#10'",1,2,3'
+ +'.h.h.h.h.h.h.h.h.h.h,4,5,0",'#10'",C,6,7,8,9.#,@,#,;,:,=,+,%,0,$,("}'#10#7
+ +'OnClick'#7#12'ASaveExecute'#0#0#9'TMenuItem'#8'MISaveAs'#6'Action'#7#7'ASav'
+ +'eAs'#7'OnClick'#7#14'ASaveAsExecute'#0#0#9'TMenuItem'#6'MISep1'#7'Caption'#6
+ +#1'-'#0#0#9'TMenuItem'#6'MIQuit'#6'Action'#7#5'AQuit'#11'Bitmap.Data'#10#149
+ +#13#0#0#145#13#0#0'/* XPM */'#10'static char *graphic[] = {'#10'"16 16 178 2'
+ +'",'#10'".. c None",'#10'"., c #D49C6D",'#10'".- c #D29A6A",'#10'".* c #CF97'
+ +'66",'#10'".a c #D69E70",'#10'".b c #DAB185",'#10'".c c #B9915A",'#10'".d c '
+ +'#CB9360",'#10'".e c #808080",'#10'".f c #7E7E7E",'#10'".g c #7C7C7C",'#10'"'
+ +'.h c #7A7A7A",'#10'".i c #777777",'#10'".j c #757575",'#10'".k c #727272",'
+ +#10'".l c #D49E71",'#10'".m c #D69E6F",'#10'".n c #DCB287",'#10'".o c #E8D3A'
+ +'B",'#10'".p c #E6D0A9",'#10'".q c #B89058",'#10'".r c #C68E59",'#10'".s c #'
+ +'7D7D7D",'#10'".t c #999999",'#10'".u c #9A9A9A",'#10'".v c #9B9B9B",'#10'".'
+ +'w c #D39D6F",'#10'".x c #E7D1AA",'#10'".y c #E7D1AB",'#10'".z c #E1C798",'
+ +#10'".A c #DEC291",'#10'".B c #B78F56",'#10'".C c #C18952",'#10'".D c #59915'
+ +'2",'#10'".E c #999A99",'#10'".F c #9C9C9C",'#10'".G c #D09A6C",'#10'".H c #'
+ +'E5CEA7",'#10'".I c #DFC18F",'#10'".J c #DCBD89",'#10'".K c #DCBD8B",'#10'".'
+ +'L c #B68D53",'#10'".M c #BC844B",'#10'".N c #458A3D",'#10'".O c #4F8A49",'
+ +#10'".P c #9D9D9D",'#10'".Q c #CC9666",'#10'".R c #E3CBA2",'#10'".S c #DAB98'
+ +'3",'#10'".T c #DAB984",'#10'".U c #B58B51",'#10'".V c #B67E43",'#10'".W c #'
+ +'4D9444",'#10'".X c #4B9142",'#10'".Y c #488D3F",'#10'".Z c #45893D",'#10'".'
+ +'0 c #65A45D",'#10'".1 c #61A05A",'#10'".2 c #4B8345",'#10'".3 c #9E9E9E",'
+ +#10'".4 c #C99260",'#10'".5 c #E2C79E",'#10'".6 c #DAB883",'#10'".7 c #D7B47'
+ +'D",'#10'".8 c #D7B37E",'#10'".9 c #B4894F",'#10'".@ c #B1793B",'#10'".# c #'
+ +'4A9041",'#10'".; c #9FD294",'#10'".: c #9AD091",'#10'".= c #96CD8D",'#10'".'
+ ,'+ c #92CB89",'#10'".% c #8DC884",'#10'".$ c #589851",'#10'".( c #467C41",'
+ +#10'".) c #9F9F9F",'#10'".[ c #C48E5A",'#10'".] c #E0C398",'#10'",. c #D7B37'
+ +'C",'#10'",, c #D6AF74",'#10'",- c #EDC45E",'#10'",* c #B3884B",'#10'",a c #'
+ +'AB7334",'#10'",b c #468B3E",'#10'",c c #99CE8F",'#10'",d c #87C67D",'#10'",'
+ +'e c #81C378",'#10'",f c #7CC073",'#10'",g c #7CC074",'#10'",h c #81C279",'
+ +#10'",i c #4F9049",'#10'",j c #577F54",'#10'",k c #BF8954",'#10'",l c #DDBF9'
+ +'4",'#10'",m c #D4AD75",'#10'",n c #E1B863",'#10'",o c #FFD44B",'#10'",p c #'
+ +'B88B42",'#10'",q c #A66E2C",'#10'",r c #42873B",'#10'",s c #88C680",'#10'",'
+ +'t c #83C37B",'#10'",u c #7FC177",'#10'",v c #4D8F47",'#10'",w c #3F743B",'
+ +#10'",x c #A1A1A1",'#10'",y c #BA844C",'#10'",z c #DBBB8D",'#10'",A c #D1A86'
+ +'E",'#10'",B c #D1A666",'#10'",C c #DFB45F",'#10'",D c #B18547",'#10'",E c #'
+ +'A16925",'#10'",F c #3E8237",'#10'",G c #3B7E34",'#10'",H c #377931",'#10'",'
+ +'I c #34752E",'#10'",J c #509149",'#10'",K c #4C8F46",'#10'",L c #3D7339",'
+ +#10'",M c #A2A2A2",'#10'",N c #B47E45",'#10'",O c #D9B788",'#10'",P c #CFA36'
+ +'7",'#10'",Q c #CC9E61",'#10'",R c #CC9F63",'#10'",S c #B18345",'#10'",T c #'
+ +'9C641F",'#10'",U c #606060",'#10'",V c #A0A0A0",'#10'",W c #41763D",'#10'",'
+ +'X c #397136",'#10'",Y c #A3A3A3",'#10'",Z c #B0793D",'#10'",0 c #D7B382",'
+ +#10'",1 c #CC9F62",'#10'",2 c #C99A5A",'#10'",3 c #CA9B5E",'#10'",4 c #AF814'
+ +'3",'#10'",5 c #986019",'#10'",6 c #5C5C5C",'#10'",7 c #40733C",'#10'",8 c #'
+ +'A1A1A0",'#10'",9 c #A4A4A4",'#10'",@ c #AA7436",'#10'",# c #D4AF7D",'#10'",'
+ +'; c #C99A5B",'#10'",: c #C79554",'#10'",= c #C89658",'#10'",+ c #AE8041",'
+ +#10'",% c #945C13",'#10'",$ c #585858",'#10'",( c #A5A5A5",'#10'",) c #A56F2'
+ +'F",'#10'",[ c #D2AB78",'#10'",] c #D3AB78",'#10'"-. c #D1A773",'#10'"-, c #'
+ +'CDA069",'#10'"-- c #AE7F40",'#10'"-* c #91590F",'#10'"-a c #717171",'#10'"-'
+ +'b c #545454",'#10'"-c c #515151",'#10'"-d c #4F4F4F",'#10'"-e c #4C4C4C",'
+ +#10'"-f c #4A4A4A",'#10'"-g c #474747",'#10'"-h c #454545",'#10'"-i c #9D672'
+ +'5",'#10'"-j c #A87432",'#10'"-k c #AF7C3D",'#10'"-l c #B58447",'#10'"-m c #'
+ +'BA8A4E",'#10'"-n c #AD7E3E",'#10'"-o c #8F570C",'#10'"-p c #925A10",'#10'"-'
+ +'q c #90580D",'#10'"-r c #925C13",'#10'"...........................,.-.*",'
+ +#10'".......................a.,.b.c.d",'#10'".....e.f.g.h.i.j.k.l.m.n.o.p.q.'
+ +'r",'#10'".....s.t.t.u.u.v.v.w.x.y.z.A.B.C",'#10'".....h.t.D.E.v.F.F.G.H.I.J'
+ +'.K.L.M",'#10'".....i.u.N.O.F.P.P.Q.R.J.S.T.U.V",'#10'".W.X.Y.Z.0.1.2.3.3.4.'
+ +'5.6.7.8.9.@",'#10'".#.;.:.=.+.%.$.(.).[.],.,,,-,*,a",'#10'",b,c,d,e,f,g,h,i'
+ +',j,k,l,m,n,o,p,q",'#10'",r.+.%,s,t,u,v,w,x,y,z,A,B,C,D,E",'#10'",F,G,H,I,J,'
+ +'K,L,x,M,N,O,P,Q,R,S,T",'#10'"....,U,V,W,X,M,M,Y,Z,0,1,2,3,4,5",'#10'"....,6'
+ +',x,7,8,Y,Y,9,@,#,;,:,=,+,%",'#10'"....,$,M,M,Y,9,9,(,),[,]-.-,---*",'#10'".'
+ +'t-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o",'#10'"........................-p-q-r-o"}'
+ +#10#7'OnClick'#7#12'AQuitExecute'#0#0#0#9'TMenuItem'#6'MItems'#7'Caption'#6#6
+ +'&Items'#0#9'TMenuItem'#9'MINewItem'#6'Action'#7#8'ANewItem'#11'Bitmap.Data'
+ +#10':'#5#0#0'6'#5#0#0'BM6'#5#0#0#0#0#0#0'6'#4#0#0'('#0#0#0#16#0#0#0#16#0#0#0
+ +#1#0#8#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0
+ +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#192#220
+ +#192#0#240#202#166#0#0' @'#0#0' `'#0#0' '#128#0#0' '#160#0#0' '#192#0#0' '
+ +#224#0#0'@'#0#0#0'@ '#0#0'@@'#0#0'@`'#0#0'@'#128#0#0'@'#160#0#0'@'#192#0#0'@'
+ +#224#0#0'`'#0#0#0'` '#0#0'`@'#0#0'``'#0#0'`'#128#0#0'`'#160#0#0'`'#192#0#0'`'
+ +#224#0#0#128#0#0#0#128' '#0#0#128'@'#0#0#128'`'#0#0#128#128#0#0#128#160#0#0
+ +#128#192#0#0#128#224#0#0#160#0#0#0#160' '#0#0#160'@'#0#0#160'`'#0#0#160#128#0
+ +#0#160#160#0#0#160#192#0#0#160#224#0#0#192#0#0#0#192' '#0#0#192'@'#0#0#192'`'
+ +#0#0#192#128#0#0#192#160#0#0#192#192#0#0#192#224#0#0#224#0#0#0#224' '#0#0#224
+ +'@'#0#0#224'`'#0#0#224#128#0#0#224#160#0#0#224#192#0#0#224#224#0'@'#0#0#0'@'
+ +#0' '#0'@'#0'@'#0'@'#0'`'#0'@'#0#128#0'@'#0#160#0'@'#0#192#0'@'#0#224#0'@ '#0
+ +#0'@ '#0'@ @'#0'@ `'#0'@ '#128#0'@ '#160#0'@ '#192#0'@ '#224#0'@@'#0#0'@@ '
+ +#0'@@@'#0'@@`'#0'@@'#128#0'@@'#160#0'@@'#192#0'@@'#224#0'@`'#0#0'@` '#0'@`@'
+ +#0'@``'#0'@`'#128#0'@`'#160#0'@`'#192#0'@`'#224#0'@'#128#0#0'@'#128' '#0'@'
+ +#128'@'#0'@'#128'`'#0'@'#128#128#0'@'#128#160#0'@'#128#192#0'@'#128#224#0'@'
+ +#160#0#0'@'#160' '#0'@'#160'@'#0'@'#160'`'#0'@'#160#128#0'@'#160#160#0'@'#160
+ +#192#0'@'#160#224#0'@'#192#0#0'@'#192' '#0'@'#192'@'#0'@'#192'`'#0'@'#192#128
+ +#0'@'#192#160#0'@'#192#192#0'@'#192#224#0'@'#224#0#0'@'#224' '#0'@'#224'@'#0
+ +'@'#224'`'#0'@'#224#128#0'@'#224#160#0'@'#224#192#0'@'#224#224#0#128#0#0#0
+ +#128#0' '#0#128#0'@'#0#128#0'`'#0#128#0#128#0#128#0#160#0#128#0#192#0#128#0
+ +#224#0#128' '#0#0#128' '#0#128' @'#0#128' `'#0#128' '#128#0#128' '#160#0#128
+ +' '#192#0#128' '#224#0#128'@'#0#0#128'@ '#0#128'@@'#0#128'@`'#0#128'@'#128#0
+ +#128'@'#160#0#128'@'#192#0#128'@'#224#0#128'`'#0#0#128'` '#0#128'`@'#0#128'`'
+ +'`'#0#128'`'#128#0#128'`'#160#0#128'`'#192#0#128'`'#224#0#128#128#0#0#128#128
+ ,' '#0#128#128'@'#0#128#128'`'#0#128#128#128#0#128#128#160#0#128#128#192#0#128
+ +#128#224#0#128#160#0#0#128#160' '#0#128#160'@'#0#128#160'`'#0#128#160#128#0
+ +#128#160#160#0#128#160#192#0#128#160#224#0#128#192#0#0#128#192' '#0#128#192
+ +'@'#0#128#192'`'#0#128#192#128#0#128#192#160#0#128#192#192#0#128#192#224#0
+ +#128#224#0#0#128#224' '#0#128#224'@'#0#128#224'`'#0#128#224#128#0#128#224#160
+ +#0#128#224#192#0#128#224#224#0#192#0#0#0#192#0' '#0#192#0'@'#0#192#0'`'#0#192
+ +#0#128#0#192#0#160#0#192#0#192#0#192#0#224#0#192' '#0#0#192' '#0#192' @'#0
+ +#192' `'#0#192' '#128#0#192' '#160#0#192' '#192#0#192' '#224#0#192'@'#0#0#192
+ +'@ '#0#192'@@'#0#192'@`'#0#192'@'#128#0#192'@'#160#0#192'@'#192#0#192'@'#224
+ +#0#192'`'#0#0#192'` '#0#192'`@'#0#192'``'#0#192'`'#128#0#192'`'#160#0#192'`'
+ +#192#0#192'`'#224#0#192#128#0#0#192#128' '#0#192#128'@'#0#192#128'`'#0#192
+ +#128#128#0#192#128#160#0#192#128#192#0#192#128#224#0#192#160#0#0#192#160' '#0
+ +#192#160'@'#0#192#160'`'#0#192#160#128#0#192#160#160#0#192#160#192#0#192#160
+ +#224#0#192#192#0#0#192#192' '#0#192#192'@'#0#192#192'`'#0#192#192#128#0#192
+ +#192#160#0#240#251#255#0#164#160#160#0#128#128#128#0#0#0#255#0#0#255#0#0#0
+ +#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#246#246#246#246
+ +#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246
+ +#24#24#24#0#246#246#246#246#246#246#246#246#246#246#246#24#24#2#24#0#16#246
+ +#246#246#246#246#246#246#246#246#24#2#2'(('#24#24#0#246#246#246#246#246#246
+ +#246#2#2'((0('#2#24#24#0#246#246#246#246#246#246#0#2'(0'#186'0('#2#24#0#246
+ +#246#246#246#246#246#251'(0'#186#250'((('#2#24#246#246#246#0#246#246#0'0'#186
+ +#0#186#186'((('#2#246#246#246#251#0#246#251'('#0#251#186#186#186#186'(('#246
+ +#246#246#246#251#0#0#0#251#186#186#186#186#186#186'x'#246#246#246#0#246#251
+ +#251#251'x'#0#0#0'y'#185#185#246#246#246#246#251#246#251#251#251#185#251#251
+ +#251#250'y'#246#246#246#246#246#246#0#251#251#251#0#246#185#185#246#246#246
+ +#246#246#246#246#0#251#246#0#246#251#0#246#246#246#246#246#246#246#246#246
+ +#251#246#246#251#246#246#251#246#246#246#246#246#246#246#246#246#246#246#246
+ +#246#246#246#246#246#246#246#246#246#246#246#246#7'OnClick'#7#15'ANewItemExe'
+ +'cute'#0#0#9'TMenuItem'#12'MIDeleteItem'#6'Action'#7#11'ADeleteItem'#11'Bitm'
+ +'ap.Data'#10':'#5#0#0'6'#5#0#0'BM6'#5#0#0#0#0#0#0'6'#4#0#0'('#0#0#0#16#0#0#0
+ +#16#0#0#0#1#0#8#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#128#0#0#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0
+ +#192#220#192#0#240#202#166#0#0' @'#0#0' `'#0#0' '#128#0#0' '#160#0#0' '#192#0
+ +#0' '#224#0#0'@'#0#0#0'@ '#0#0'@@'#0#0'@`'#0#0'@'#128#0#0'@'#160#0#0'@'#192#0
+ +#0'@'#224#0#0'`'#0#0#0'` '#0#0'`@'#0#0'``'#0#0'`'#128#0#0'`'#160#0#0'`'#192#0
+ +#0'`'#224#0#0#128#0#0#0#128' '#0#0#128'@'#0#0#128'`'#0#0#128#128#0#0#128#160
+ +#0#0#128#192#0#0#128#224#0#0#160#0#0#0#160' '#0#0#160'@'#0#0#160'`'#0#0#160
+ +#128#0#0#160#160#0#0#160#192#0#0#160#224#0#0#192#0#0#0#192' '#0#0#192'@'#0#0
+ +#192'`'#0#0#192#128#0#0#192#160#0#0#192#192#0#0#192#224#0#0#224#0#0#0#224' '
+ +#0#0#224'@'#0#0#224'`'#0#0#224#128#0#0#224#160#0#0#224#192#0#0#224#224#0'@'#0
+ +#0#0'@'#0' '#0'@'#0'@'#0'@'#0'`'#0'@'#0#128#0'@'#0#160#0'@'#0#192#0'@'#0#224
+ +#0'@ '#0#0'@ '#0'@ @'#0'@ `'#0'@ '#128#0'@ '#160#0'@ '#192#0'@ '#224#0'@@'#0
+ +#0'@@ '#0'@@@'#0'@@`'#0'@@'#128#0'@@'#160#0'@@'#192#0'@@'#224#0'@`'#0#0'@` '
+ +#0'@`@'#0'@``'#0'@`'#128#0'@`'#160#0'@`'#192#0'@`'#224#0'@'#128#0#0'@'#128' '
+ +#0'@'#128'@'#0'@'#128'`'#0'@'#128#128#0'@'#128#160#0'@'#128#192#0'@'#128#224
+ +#0'@'#160#0#0'@'#160' '#0'@'#160'@'#0'@'#160'`'#0'@'#160#128#0'@'#160#160#0
+ +'@'#160#192#0'@'#160#224#0'@'#192#0#0'@'#192' '#0'@'#192'@'#0'@'#192'`'#0'@'
+ +#192#128#0'@'#192#160#0'@'#192#192#0'@'#192#224#0'@'#224#0#0'@'#224' '#0'@'
+ +#224'@'#0'@'#224'`'#0'@'#224#128#0'@'#224#160#0'@'#224#192#0'@'#224#224#0#128
+ +#0#0#0#128#0' '#0#128#0'@'#0#128#0'`'#0#128#0#128#0#128#0#160#0#128#0#192#0
+ +#128#0#224#0#128' '#0#0#128' '#0#128' @'#0#128' `'#0#128' '#128#0#128' '#160
+ +#0#128' '#192#0#128' '#224#0#128'@'#0#0#128'@ '#0#128'@@'#0#128'@`'#0#128'@'
+ +#128#0#128'@'#160#0#128'@'#192#0#128'@'#224#0#128'`'#0#0#128'` '#0#128'`@'#0
+ +#128'``'#0#128'`'#128#0#128'`'#160#0#128'`'#192#0#128'`'#224#0#128#128#0#0
+ +#128#128' '#0#128#128'@'#0#128#128'`'#0#128#128#128#0#128#128#160#0#128#128
+ +#192#0#128#128#224#0#128#160#0#0#128#160' '#0#128#160'@'#0#128#160'`'#0#128
+ +#160#128#0#128#160#160#0#128#160#192#0#128#160#224#0#128#192#0#0#128#192' '#0
+ +#128#192'@'#0#128#192'`'#0#128#192#128#0#128#192#160#0#128#192#192#0#128#192
+ +#224#0#128#224#0#0#128#224' '#0#128#224'@'#0#128#224'`'#0#128#224#128#0#128
+ +#224#160#0#128#224#192#0#128#224#224#0#192#0#0#0#192#0' '#0#192#0'@'#0#192#0
+ +'`'#0#192#0#128#0#192#0#160#0#192#0#192#0#192#0#224#0#192' '#0#0#192' '#0
+ +#192' @'#0#192' `'#0#192' '#128#0#192' '#160#0#192' '#192#0#192' '#224#0#192
+ +'@'#0#0#192'@ '#0#192'@@'#0#192'@`'#0#192'@'#128#0#192'@'#160#0#192'@'#192#0
+ +#192'@'#224#0#192'`'#0#0#192'` '#0#192'`@'#0#192'``'#0#192'`'#128#0#192'`'
+ ,#160#0#192'`'#192#0#192'`'#224#0#192#128#0#0#192#128' '#0#192#128'@'#0#192
+ +#128'`'#0#192#128#128#0#192#128#160#0#192#128#192#0#192#128#224#0#192#160#0#0
+ +#192#160' '#0#192#160'@'#0#192#160'`'#0#192#160#128#0#192#160#160#0#192#160
+ +#192#0#192#160#224#0#192#192#0#0#192#192' '#0#192#192'@'#0#192#192'`'#0#192
+ +#192#128#0#192#192#160#0#240#251#255#0#164#160#160#0#128#128#128#0#0#0#255#0
+ +#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#246
+ +#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#249#249
+ +#1#10#0#246#246#246#0#249#249#0#246#246#246#246#246#249#249#249#1#0#246#0#13
+ +#249#0#246#246#246#246#246#246#246#249#249#249#1#0#249#249'S'#246#246#246#246
+ +#246#246#246#246#246'\'#249#249#249#249'T'#246#246#246#246#246#246#246#246
+ +#246'\'#0#249#249#249#249#0'R'#246#246#246#246#246#246#246']'#0#249#249#18'f'
+ +#249#249#0'I'#246#246#246#246#246#246#0#249#249'g'#191'g^'#249#249#0#246#246
+ +#246#246#246#0#249#249'g'#191'off^'#249#249#246#246#246#246#246#249#249'g'
+ +#191'g'#191#191'f^f'#249#246#246#246#246#246#246']]o'#191#191#191#191#191'^f'
+ +#246#246#246#246#246#246'o'#191#191#191#191#191#191#191#191'o'#246#246#246
+ +#246#246#246#246'oowwwwww'#246#246#246#246#246#246#246#246#246'wwooow'#246
+ +#246#246#246#246#246#246#246#246#246#246#246'ww'#246#246#246#246#246#246#246
+ +#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#7'OnClick'#7
+ +#18'ADeleteItemExecute'#0#0#0#9'TMenuItem'#4'MRun'#7'Caption'#6#4'&Run'#0#9
+ +'TMenuItem'#6'MITest'#6'Action'#7#5'ATest'#7'OnClick'#7#12'ATestExecute'#0#0
+ +#9'TMenuItem'#5'MIRun'#6'Action'#7#8'AExecute'#7'OnClick'#7#12'ATestExecute'
+ +#0#0#0#0#11'TActionList'#6'ALMain'#6'Images'#7#6'ILMain'#4'left'#2'P'#3'top'
+ +#2'`'#0#7'TAction'#4'ANew'#8'Category'#6#4'File'#7'Caption'#6#4'&New'#18'Dis'
+ +'ableIfNoHandler'#9#10'ImageIndex'#2#0#9'OnExecute'#7#11'ANewExecute'#8'Shor'
+ +'tCut'#3'N@'#0#0#7'TAction'#5'AOpen'#8'Category'#6#4'File'#7'Caption'#6#5'&O'
+ +'pen'#18'DisableIfNoHandler'#9#10'ImageIndex'#2#1#9'OnExecute'#7#12'AOpenExe'
+ +'cute'#8'ShortCut'#3'O@'#0#0#7'TAction'#5'ASave'#8'Category'#6#4'File'#7'Cap'
+ +'tion'#6#5'&Save'#18'DisableIfNoHandler'#9#10'ImageIndex'#2#2#9'OnExecute'#7
+ +#12'ASaveExecute'#8'OnUpdate'#7#11'ASaveUpdate'#8'ShortCut'#3'S@'#0#0#7'TAct'
+ +'ion'#7'ASaveAs'#8'Category'#6#4'File'#7'Caption'#6#8'Save &as'#18'DisableIf'
+ +'NoHandler'#9#9'OnExecute'#7#14'ASaveAsExecute'#0#0#7'TAction'#5'AQuit'#8'Ca'
+ +'tegory'#6#4'File'#7'Caption'#6#5'&Quit'#18'DisableIfNoHandler'#9#10'ImageIn'
+ +'dex'#2#3#9'OnExecute'#7#12'AQuitExecute'#8'ShortCut'#3'Q@'#0#0#7'TAction'#8
+ +'ANewItem'#8'Category'#6#5'Items'#7'Caption'#6#4'&New'#18'DisableIfNoHandler'
+ +#9#10'ImageIndex'#2#4#9'OnExecute'#7#15'ANewItemExecute'#8'ShortCut'#3'A@'#0
+ +#0#7'TAction'#11'ADeleteItem'#8'Category'#6#5'Items'#7'Caption'#6#7'&Delete'
+ +#18'DisableIfNoHandler'#9#10'ImageIndex'#2#5#9'OnExecute'#7#18'ADeleteItemEx'
+ +'ecute'#8'OnUpdate'#7#17'ADeleteItemUpdate'#8'ShortCut'#3'D@'#0#0#7'TAction'
+ +#5'ATest'#8'Category'#6#7'Execute'#7'Caption'#6#19'&Test configuration'#18'D'
+ +'isableIfNoHandler'#9#9'OnExecute'#7#12'ATestExecute'#8'ShortCut'#3'T@'#0#0#7
+ +'TAction'#8'AExecute'#8'Category'#6#7'Execute'#7'Caption'#6#23'&Run with con'
+ +'figuration'#18'DisableIfNoHandler'#9#9'OnExecute'#7#12'ATestExecute'#8'OnUp'
+ +'date'#7#14'AExecuteUpdate'#8'ShortCut'#3'E@'#0#0#0#11'TSaveDialog'#8'SDConf'
+ +'ig'#5'Title'#6#26'Save configuration file as'#6'Filter'#6'''Configuration f'
+ +'iles|*.cfg|All files|*.*'#11'FilterIndex'#2#0#7'Options'#11#17'ofOverwriteP'
+ +'rompt'#15'ofPathMustExist'#14'ofEnableSizing'#12'ofViewDetail'#0#4'left'#2
+ +'x'#3'top'#2'@'#0#0#11'TOpenDialog'#8'ODConfig'#5'Title'#6' Open existing co'
+ +'nfiguration file'#6'Filter'#6'''Configuration files|*.cfg|All files|*.*'#11
+ +'FilterIndex'#2#0#7'Options'#11#15'ofFileMustExist'#14'ofEnableSizing'#12'of'
+ +'ViewDetail'#0#4'left'#2'x'#3'top'#2'`'#0#0#10'TImageList'#6'ILMain'#4'left'
+ +#2'*'#3'top'#2'B'#6'Bitmap'#10'f>'#0#0'li'#6#0#0#0#16#0#0#0#16#0#0#0#225#12#0
+ +#0'/* XPM */'#10'static char *graphic[] = {'#10'"16 16 167 2",'#10'".. c Non'
+ +'e",'#10'"., c #4D8BC8",'#10'".- c #4F8CC8",'#10'".* c #4F8DC8",'#10'".a c #'
+ +'4F8CC9",'#10'".b c #4F8BC7",'#10'".c c #4B89C5",'#10'".d c #3B76C4",'#10'".'
+ +'e c #4985C4",'#10'".f c #ECF2F7",'#10'".g c #EEF4F8",'#10'".h c #EDF4F8",'
+ +#10'".i c #EDF3F8",'#10'".j c #ECF2F8",'#10'".k c #D7E6F2",'#10'".l c #7DB2E'
+ +'2",'#10'".m c #6594DB",'#10'".n c #4B88C5",'#10'".o c #F2F6FA",'#10'".p c #'
+ +'C7E0FA",'#10'".q c #C9E1FB",'#10'".r c #C9E2FB",'#10'".s c #C8E0FB",'#10'".'
+ +'t c #C5DFF9",'#10'".u c #C1DBF8",'#10'".v c #B8D6F4",'#10'".w c #F8FBFF",'
+ +#10'".x c #B4D8F6",'#10'".y c #7DB0E1",'#10'".z c #6492DB",'#10'".A c #4C89C'
+ +'6",'#10'".B c #F1F5F9",'#10'".C c #CDE3FC",'#10'".D c #CEE3FB",'#10'".E c #'
+ +'CDE3FB",'#10'".F c #CBE2FB",'#10'".G c #C8E0F9",'#10'".H c #C2DCF8",'#10'".'
+ +'I c #BAD6F5",'#10'".J c #F8FBFD",'#10'".K c #CDE6FC",'#10'".L c #C9E5FA",'
+ +#10'".M c #84B6E2",'#10'".N c #4279BF",'#10'".O c #4B89C6",'#10'".P c #CFE3F'
+ ,'C",'#10'".Q c #D0E4FB",'#10'".R c #CFE4FC",'#10'".S c #CAE1FA",'#10'".T c #'
+ +'C4DDF9",'#10'".U c #BCD9F6",'#10'".V c #DFE9F4",'#10'".W c #F3F7FB",'#10'".'
+ +'X c #E9EFF5",'#10'".Y c #457EC2",'#10'".Z c #F0F4F9",'#10'".0 c #D3E6FC",'
+ +#10'".1 c #D4E6FC",'#10'".2 c #D3E7FD",'#10'".3 c #D1E4FC",'#10'".4 c #C8E0F'
+ +'A",'#10'".5 c #BBD6F5",'#10'".6 c #B5D4F3",'#10'".7 c #B3D2F1",'#10'".8 c #'
+ +'F0F4F8",'#10'".9 c #4682C4",'#10'".@ c #4A88C6",'#10'".# c #EFF4F9",'#10'".'
+ +'; c #D7E7FE",'#10'".: c #D6E7FD",'#10'".= c #D5E7FD",'#10'".+ c #D4E6FD",'
+ +#10'".% c #D2E6FC",'#10'".$ c #CCE1FB",'#10'".( c #C7DFFA",'#10'".) c #BDDAF'
+ +'6",'#10'".[ c #BBD8F6",'#10'".] c #EFF4FA",'#10'",. c #4683C6",'#10'",, c #'
+ +'4988C6",'#10'",- c #EDF4F9",'#10'",* c #D8E8FE",'#10'",a c #D7E8FE",'#10'",'
+ +'b c #D6E7FE",'#10'",c c #D3E5FD",'#10'",d c #C3DDF9",'#10'",e c #EDF4FA",'
+ +#10'",f c #4582C6",'#10'",g c #4784C6",'#10'",h c #ECF3F9",'#10'",i c #D6E8F'
+ +'E",'#10'",j c #CCE3FB",'#10'",k c #C6DFFA",'#10'",l c #EAF2FA",'#10'",m c #'
+ +'4280C6",'#10'",n c #4582C5",'#10'",o c #EBF2F8",'#10'",p c #D5E6FD",'#10'",'
+ +'q c #CDE2FC",'#10'",r c #CBE1FB",'#10'",s c #F2F7FB",'#10'",t c #3F7CC5",'
+ +#10'",u c #4280C5",'#10'",v c #E8F1F8",'#10'",w c #D5E5FE",'#10'",x c #D3E5F'
+ +'C",'#10'",y c #CEE2FC",'#10'",z c #CCE2FC",'#10'",A c #C9E0FB",'#10'",B c #'
+ +'C8E1FB",'#10'",C c #F7FAFD",'#10'",D c #3B76C1",'#10'",E c #407CC4",'#10'",'
+ +'F c #E6F0F7",'#10'",G c #55B4F8",'#10'",H c #56B4F7",'#10'",I c #54B5F7",'
+ +#10'",J c #53B4F8",'#10'",K c #53B2F8",'#10'",L c #52B3F7",'#10'",M c #51B2F'
+ +'7",'#10'",N c #4FB2F7",'#10'",O c #F5F9FC",'#10'",P c #366FBF",'#10'",Q c #'
+ +'3C78C1",'#10'",R c #E3EDF7",'#10'",S c #6EC2FD",'#10'",T c #A0D8FF",'#10'",'
+ +'U c #9ED7FF",'#10'",V c #9BD6FF",'#10'",W c #98D7FF",'#10'",X c #96D6FF",'
+ +#10'",Y c #95D6FF",'#10'",Z c #94D5FF",'#10'",0 c #93D4FF",'#10'",1 c #65BEF'
+ +'B",'#10'",2 c #F4F7FB",'#10'",3 c #3167BB",'#10'",4 c #3871BF",'#10'",5 c #'
+ +'DFEBF5",'#10'",6 c #68BFFD",'#10'",7 c #67BDFC",'#10'",8 c #64BEFC",'#10'",'
+ +'9 c #62BDFC",'#10'",@ c #63BDFB",'#10'",# c #61BCFB",'#10'",; c #60BEFC",'
+ +#10'",: c #62BCFC",'#10'",= c #2D64B9",'#10'",+ c #3369BC",'#10'",% c #EAF1F'
+ +'8",'#10'",$ c #DFECF7",'#10'",( c #DEEBF6",'#10'",) c #DEEAF6",'#10'",[ c #'
+ +'DCEAF6",'#10'",] c #EBF3FA",'#10'"-. c #F3F7FC",'#10'"-, c #F4F8FC",'#10'"-'
+ +'- c #FDFEFE",'#10'"-* c #2A60B7",'#10'"-a c #3065BA",'#10'"-b c #3166BB",'
+ +#10'"-c c #3066BA",'#10'"-d c #2F65BA",'#10'"-e c #2E65B9",'#10'"-f c #2E64B'
+ +'9",'#10'"-g c #2C62B7",'#10'".....,.-.-.-.-.*.a.b.c.d........",'#10'"...e.f'
+ +'.g.h.i.i.i.j.f.k.l.m......",'#10'"...n.o.p.q.r.s.t.u.v.w.x.y.z....",'#10'".'
+ +'..A.B.C.D.E.F.G.H.I.J.K.L.M.N..",'#10'"...O.B.P.Q.R.C.S.T.U.V.f.W.X.Y..",'
+ +#10'"...O.Z.0.1.2.3.E.4.H.5.6.7.8.9..",'#10'"...@.#.;.:.=.+.%.$.(.H.).[.],..'
+ +'.",'#10'"..,,,-,*,*,a,b,c.3.$.p,d.H,e,f..",'#10'"..,g,h,i,a.:.:.=,c.Q,j.(,k'
+ +',l,m..",'#10'"..,n,o,b.:.:.:,p,c.3,q,r.q,s,t..",'#10'"..,u,v,w,c,c,x,x.3,y,'
+ +'z,A,B,C,D..",'#10'"..,E,F,G,H,I,J,K,L,L,M,N,N,O,P..",'#10'"..,Q,R,S,T,U,V,W'
+ +',X,Y,Z,0,1,2,3..",'#10'"..,4,5,6,7,1,8,8,9,@,#,;,:.J,=..",'#10'"..,+,%,$,(,'
+ +'),[,[,],],l-.-,---*..",'#10'"....-a-b-c-c-c-a-d-e-e-f-f-g...."}'#10'a'#13#0
+ +#0'/* XPM */'#10'static char *graphic[] = {'#10'"16 16 175 2",'#10'".. c Non'
+ +'e",'#10'"., c #9DC3EA",'#10'".- c #96BFE6",'#10'".* c #92BBE4",'#10'".a c #'
+ +'6CA0D1",'#10'".b c #6D9ED0",'#10'".c c #5F96CC",'#10'".d c #96BEE5",'#10'".'
+ +'e c #FEFFFF",'#10'".f c #E9F3FD",'#10'".g c #EAF3FD",'#10'".h c #E8F2FC",'
+ +#10'".i c #E3EFFA",'#10'".j c #E7F2FA",'#10'".k c #88BBEA",'#10'".l c #5585C'
+ +'F",'#10'".m c #93BBE4",'#10'".n c #EDF5FE",'#10'".o c #C5DEFC",'#10'".p c #'
+ +'C7E0FB",'#10'".q c #C2DCF9",'#10'".r c #B4D3F5",'#10'".s c #F3F9FE",'#10'".'
+ +'t c #C4E2FA",'#10'".u c #93C1EC",'#10'".v c #487DC3",'#10'".w c #F0F6FE",'
+ +#10'".x c #CDE2FC",'#10'".y c #CDE3FC",'#10'".z c #C8DFFA",'#10'".A c #BCD9F'
+ +'7",'#10'".B c #DDE9F5",'#10'".C c #EBF3FA",'#10'".D c #F3F8FB",'#10'".E c #'
+ +'5383CA",'#10'".F c #F1F7FE",'#10'".G c #D2E5FC",'#10'".H c #D1E4FC",'#10'".'
+ +'I c #CCE2FB",'#10'".J c #C4DDF9",'#10'".K c #BBD7F6",'#10'".L c #AFD1F3",'
+ +#10'".M c #E4EFFA",'#10'".N c #5887CC",'#10'".O c #D9B434",'#10'".P c #E1C25'
+ +'E",'#10'".Q c #E2C360",'#10'".R c #E2C35F",'#10'".S c #91BBE4",'#10'".T c #'
+ +'F2F7FF",'#10'".U c #D5E7FE",'#10'".V c #D1E5FD",'#10'".W c #CAE0FA",'#10'".'
+ +'X c #C4DEF9",'#10'".Y c #E7F2FD",'#10'".Z c #5787CC",'#10'".0 c #DAB336",'
+ +#10'".1 c #FEFEFD",'#10'".2 c #FFFFFE",'#10'".3 c #FFFEFE",'#10'".4 c #FFFEF'
+ +'D",'#10'".5 c #91BAE4",'#10'".6 c #F0F7FF",'#10'".7 c #D5E7FF",'#10'".8 c #'
+ +'D6E7FD",'#10'".9 c #D4E6FD",'#10'".@ c #D0E4FC",'#10'".# c #CBE3FB",'#10'".'
+ +'; c #C2DCFA",'#10'".: c #E8F3FE",'#10'".= c #5686CC",'#10'".+ c #DAAF35",'
+ +#10'".% c #FEFCF7",'#10'".$ c #F8E48E",'#10'".( c #F5DE91",'#10'".) c #F5E09'
+ +'F",'#10'".[ c #F6E1AC",'#10'".] c #5284CA",'#10'",. c #F1F7FF",'#10'",, c #'
+ +'D9E9FF",'#10'",- c #DBEAFF",'#10'",* c #D7E7FF",'#10'",a c #D2E5FF",'#10'",'
+ ,'b c #CBE2FF",'#10'",c c #5585CB",'#10'",d c #DAAA36",'#10'",e c #FDFAF1",'
+ +#10'",f c #F5DE94",'#10'",g c #F4DC93",'#10'",h c #E9BC64",'#10'",i c #DA943'
+ +'5",'#10'",j c #EFF6FB",'#10'",k c #5583CC",'#10'",l c #DAAB35",'#10'",m c #'
+ +'FBF6E8",'#10'",n c #E7BC70",'#10'",o c #E2AA55",'#10'",p c #E0A54D",'#10'",'
+ +'q c #EBC991",'#10'",r c #EFF3FA",'#10'",s c #FDFEFD",'#10'",t c #FCFDFF",'
+ +#10'",u c #FCFDFE",'#10'",v c #FBFCFE",'#10'",w c #FDFEFE",'#10'",x c #E8F2E'
+ +'F",'#10'",y c #5681CE",'#10'",z c #DAA637",'#10'",A c #FFFDF8",'#10'",B c #'
+ +'FFFDF6",'#10'",C c #FFFCF5",'#10'",D c #FEFCF3",'#10'",E c #F4E49A",'#10'",'
+ +'F c #F7E69A",'#10'",G c #F6E69B",'#10'",H c #F5E59D",'#10'",I c #F5E59E",'
+ +#10'",J c #F4E59F",'#10'",K c #F8F3DA",'#10'",L c #EEF4FD",'#10'",M c #5480C'
+ +'A",'#10'",N c #DAA136",'#10'",O c #FEFCF6",'#10'",P c #F8E594",'#10'",Q c #'
+ +'F8E593",'#10'",R c #F8E591",'#10'",S c #E9DB93",'#10'",T c #E3D793",'#10'",'
+ +'U c #DCD293",'#10'",V c #D7CE90",'#10'",W c #CFC88C",'#10'",X c #C6C186",'
+ +#10'",Y c #D6D8C9",'#10'",Z c #4474C5",'#10'",0 c #537FCA",'#10'",1 c #DA9A3'
+ +'6",'#10'",2 c #FDFAF2",'#10'",3 c #F8E694",'#10'",4 c #F8E592",'#10'",5 c #'
+ +'F8E590",'#10'",6 c #F8E38B",'#10'",7 c #F7E286",'#10'",8 c #F7E17F",'#10'",'
+ +'9 c #F6DE77",'#10'",@ c #F6DC6C",'#10'",# c #F4D95E",'#10'",; c #F3D54F",'
+ +#10'",: c #FBF2CC",'#10'",= c #FEFAEF",'#10'",+ c #F8E48F",'#10'",% c #F8E38'
+ +'9",'#10'",$ c #F7E182",'#10'",( c #F7DF7A",'#10'",) c #F6DE71",'#10'",[ c #'
+ +'F5DB67",'#10'",] c #F4D85B",'#10'"-. c #F3D44D",'#10'"-, c #F2D140",'#10'"-'
+ +'- c #FBF2CA",'#10'"-* c #D98E33",'#10'"-a c #FAF0DC",'#10'"-b c #F6E198",'
+ +#10'"-c c #F6E095",'#10'"-d c #F6DF92",'#10'"-e c #F5DE8E",'#10'"-f c #F5DC8'
+ +'9",'#10'"-g c #F4DA85",'#10'"-h c #F4D980",'#10'"-i c #F3D77A",'#10'"-j c #'
+ +'F3D574",'#10'"-k c #F2D370",'#10'"-l c #F8EAC2",'#10'"-m c #D8862C",'#10'"-'
+ +'n c #D8882D",'#10'"-o c #D8872D",'#10'".............,.-.*.*.a.b.c......",'
+ +#10'".............d.e.f.g.h.i.j.k.l..",'#10'".............m.n.o.p.q.r.s.t.u.'
+ +'v",'#10'".............*.w.x.y.z.A.B.C.D.E",'#10'".............*.F.G.H.I.J.K'
+ +'.L.M.N",'#10'".O.P.Q.Q.Q.R.S.T.U.U.V.W.X.A.Y.Z",'#10'".0.1.2.3.4.2.5.6.7.8.'
+ +'9.@.#.;.:.=",'#10'".+.%.$.(.).[.],.,,,-,,,*,a,b,.,c",'#10'",d,e,f,g,h,i,i,i'
+ +',i,i,i,i,i,i,j,k",'#10'",l,m,n,o,p,q,r,s,t,t,u,v,w,i,x,y",'#10'",z.2,A,B,C,'
+ +'D,E,F,G,H,I,J,K,i,L,M",'#10'",N,O,P,Q,Q,R,S,T,U,V,W,X,Y,i,Z,0",'#10'",1,2,3'
+ +',4,5,6,7,8,9,@,#,;,:,i....",'#10'",i,=,Q,+,%,$,(,),[,]-.-,--,i....",'#10'"-'
+ +'*-a-b-c-d-e-f-g-h-i-j-k-l,i....",'#10'"-m-n-o-n-n-n-n-n-n-n-n-o-n-m...."}'
+ +#10#1#12#0#0'/* XPM */'#10'static char *graphic[] = {'#10'"16 16 153 2",'#10
+ +'".. c None",'#10'"., c #366BBC",'#10'".- c #366BBB",'#10'".* c #366ABB",'#10
+ +'".a c #396CBC",'#10'".b c #3B6EBD",'#10'".c c #3A6DBB",'#10'".d c #386BBB",'
+ +#10'".e c #3E70BB",'#10'".f c #D1E0F6",'#10'".g c #D1E0F7",'#10'".h c #F8FBF'
+ +'E",'#10'".i c #F7FBFE",'#10'".j c #F6F9FD",'#10'".k c #F0F5FC",'#10'".l c #'
+ +'EAF0FA",'#10'".m c #EDF2FB",'#10'".n c #F7FAFD",'#10'".o c #EBF1FB",'#10'".'
+ +'p c #DFE9F8",'#10'".q c #BDD0EC",'#10'".r c #5E89C9",'#10'".s c #D1DFF6",'
+ +#10'".t c #80AAE9",'#10'".u c #F6FAFE",'#10'".v c #F6FAFD",'#10'".w c #648CC'
+ +'8",'#10'".x c #EEF3FB",'#10'".y c #EAF1FB",'#10'".z c #F2F6FC",'#10'".A c #'
+ +'F1F6FC",'#10'".B c #E2ECF9",'#10'".C c #DBE7F8",'#10'".D c #BAD0EE",'#10'".'
+ +'E c #D0DFF6",'#10'".F c #7EA8E8",'#10'".G c #E9F1FA",'#10'".H c #EEF4FB",'
+ +#10'".I c #E8F0FA",'#10'".J c #DDE8F8",'#10'".K c #DBE6F7",'#10'".L c #7AA3E'
+ +'1",'#10'".M c #C3D5EF",'#10'".N c #3569B7",'#10'".O c #CCDDF5",'#10'".P c #'
+ +'7EA8E7",'#10'".Q c #668DC9",'#10'".R c #E9F0FA",'#10'".S c #F3F8FD",'#10'".'
+ +'T c #F8FAFE",'#10'".U c #EFF4FC",'#10'".V c #DFE9F9",'#10'".W c #DBE7F7",'
+ +#10'".X c #D9E5F7",'#10'".Y c #78A2E0",'#10'".Z c #A9C2E7",'#10'".0 c #3568B'
+ +'6",'#10'".1 c #C9DCF4",'#10'".2 c #7DA7E7",'#10'".3 c #E1ECF9",'#10'".4 c #'
+ +'E3EDF9",'#10'".5 c #EEF4FC",'#10'".6 c #F3F7FD",'#10'".7 c #E5EDFA",'#10'".'
+ +'8 c #D8E5F6",'#10'".9 c #77A0DE",'#10'".@ c #A4BEE4",'#10'".# c #3467B4",'
+ +#10'".; c #C7D9F4",'#10'".: c #7DA6E6",'#10'".= c #658DC9",'#10'".+ c #678EC'
+ +'9",'#10'".% c #6C92CB",'#10'".$ c #6D92CB",'#10'".( c #6990CA",'#10'".) c #'
+ +'658CC8",'#10'".[ c #749CDA",'#10'".] c #9FBAE1",'#10'",. c #3466B3",'#10'",'
+ +', c #C5D8F2",'#10'",- c #7BA4E3",'#10'",* c #7AA3E3",'#10'",a c #7AA4E3",'
+ +#10'",b c #7BA4E2",'#10'",c c #7BA3E2",'#10'",d c #7BA3E1",'#10'",e c #79A2E'
+ +'1",'#10'",f c #77A0DF",'#10'",g c #769FDE",'#10'",h c #749EDD",'#10'",i c #'
+ +'729CDB",'#10'",j c #749DDC",'#10'",k c #9AB5DD",'#10'",l c #3465B1",'#10'",'
+ +'m c #C2D5F2",'#10'",n c #78A1E0",'#10'",o c #759EDE",'#10'",p c #739BDA",'
+ +#10'",q c #739BD9",'#10'",r c #95B0DA",'#10'",s c #3364AF",'#10'",t c #BED2F'
+ +'0",'#10'",u c #7AA3E2",'#10'",v c #779FDE",'#10'",w c #769FDD",'#10'",x c #'
+ +'729BD9",'#10'",y c #7199D8",'#10'",z c #7099D6",'#10'",A c #8EABD5",'#10'",'
+ +'B c #3363AD",'#10'",C c #366ABA",'#10'",D c #BBD0EF",'#10'",E c #7AA2E2",'
+ ,#10'",F c #6D96D3",'#10'",G c #8AA7D2",'#10'",H c #3262AB",'#10'",I c #B8CEE'
+ +'F",'#10'",J c #F7FAFE",'#10'",K c #88C062",'#10'",L c #6A93CF",'#10'",M c #'
+ +'84A3CE",'#10'",N c #3261AA",'#10'",O c #386CBB",'#10'",P c #B6CCEE",'#10'",'
+ +'Q c #7AA2E1",'#10'",R c #C2DCBF",'#10'",S c #6890CD",'#10'",T c #819ECC",'
+ +#10'",U c #3261A8",'#10'",V c #376BBA",'#10'",W c #B3CAED",'#10'",X c #7AA2E'
+ +'0",'#10'",Y c #658DCA",'#10'",Z c #7C9BC9",'#10'",0 c #3160A7",'#10'",1 c #'
+ +'356ABA",'#10'",2 c #ADC6EB",'#10'",3 c #ADC5EA",'#10'",4 c #7C9AC8",'#10'",'
+ +'5 c #7998C7",'#10'",6 c #3569B9",'#10'",7 c #3569B8",'#10'",8 c #3568B7",'
+ +#10'",9 c #3568B5",'#10'",@ c #3466B2",'#10'",# c #3365B0",'#10'",; c #3364A'
+ +'E",'#10'",: c #3263AC",'#10'",= c #3262AA",'#10'",+ c #3261A9",'#10'",% c #'
+ +'3160A8",'#10'",$ c #3160A6",'#10'",( c #3161A8",'#10'"...,.,.,.,.-.-.*.*.a.'
+ +'b.c.d.e....",'#10'".,.f.g.h.i.j.k.l.m.j.n.o.p.q.r..",'#10'".,.s.t.u.v.w.x.y'
+ +'.z.h.A.B.C.D.q.e",'#10'".,.E.F.A.A.w.G.H.n.j.I.J.K.L.M.N",'#10'".,.O.P.I.I.'
+ +'Q.R.S.T.U.V.W.X.Y.Z.0",'#10'".-.1.2.3.3.4.5.n.6.7.W.X.8.9.@.#",'#10'".-.;.:'
+ +'.w.=.+.%.$.(.).w.w.w.[.],.",'#10'".*,,,-,*,a,b,c,d,e,f,g,h,i,j,k,l",'#10'".'
+ +'*,m,*,*,c,c,b,e,n.9,o,j,p,q,r,s",'#10'".*,t,u,u.L,c,d,n,v,w,j,x,y,z,A,B",'
+ +#10'",C,D,E.h.h.h.h.h.h.h.h.h.h,F,G,H",'#10'".d,I,e,J,K,K,K,K,K,K,K,K.j,L,M,'
+ +'N",'#10'",O,P,Q,J,R,R,R,R,R,R,R,R.j,S,T,U",'#10'",V,W,X,J,K,K,K,K,K,K,K,K.j'
+ +',Y,Z,0",'#10'",1,2,3.h.h.h.h.h.h.h.h.h.h,4,5,0",'#10'",C,6,7,8,9.#,@,#,;,:,'
+ +'=,+,%,0,$,("}'#10#145#13#0#0'/* XPM */'#10'static char *graphic[] = {'#10'"'
+ +'16 16 178 2",'#10'".. c None",'#10'"., c #D49C6D",'#10'".- c #D29A6A",'#10
+ +'".* c #CF9766",'#10'".a c #D69E70",'#10'".b c #DAB185",'#10'".c c #B9915A",'
+ +#10'".d c #CB9360",'#10'".e c #808080",'#10'".f c #7E7E7E",'#10'".g c #7C7C7'
+ +'C",'#10'".h c #7A7A7A",'#10'".i c #777777",'#10'".j c #757575",'#10'".k c #'
+ +'727272",'#10'".l c #D49E71",'#10'".m c #D69E6F",'#10'".n c #DCB287",'#10'".'
+ +'o c #E8D3AB",'#10'".p c #E6D0A9",'#10'".q c #B89058",'#10'".r c #C68E59",'
+ +#10'".s c #7D7D7D",'#10'".t c #999999",'#10'".u c #9A9A9A",'#10'".v c #9B9B9'
+ +'B",'#10'".w c #D39D6F",'#10'".x c #E7D1AA",'#10'".y c #E7D1AB",'#10'".z c #'
+ +'E1C798",'#10'".A c #DEC291",'#10'".B c #B78F56",'#10'".C c #C18952",'#10'".'
+ +'D c #599152",'#10'".E c #999A99",'#10'".F c #9C9C9C",'#10'".G c #D09A6C",'
+ +#10'".H c #E5CEA7",'#10'".I c #DFC18F",'#10'".J c #DCBD89",'#10'".K c #DCBD8'
+ +'B",'#10'".L c #B68D53",'#10'".M c #BC844B",'#10'".N c #458A3D",'#10'".O c #'
+ +'4F8A49",'#10'".P c #9D9D9D",'#10'".Q c #CC9666",'#10'".R c #E3CBA2",'#10'".'
+ +'S c #DAB983",'#10'".T c #DAB984",'#10'".U c #B58B51",'#10'".V c #B67E43",'
+ +#10'".W c #4D9444",'#10'".X c #4B9142",'#10'".Y c #488D3F",'#10'".Z c #45893'
+ +'D",'#10'".0 c #65A45D",'#10'".1 c #61A05A",'#10'".2 c #4B8345",'#10'".3 c #'
+ +'9E9E9E",'#10'".4 c #C99260",'#10'".5 c #E2C79E",'#10'".6 c #DAB883",'#10'".'
+ +'7 c #D7B47D",'#10'".8 c #D7B37E",'#10'".9 c #B4894F",'#10'".@ c #B1793B",'
+ +#10'".# c #4A9041",'#10'".; c #9FD294",'#10'".: c #9AD091",'#10'".= c #96CD8'
+ +'D",'#10'".+ c #92CB89",'#10'".% c #8DC884",'#10'".$ c #589851",'#10'".( c #'
+ +'467C41",'#10'".) c #9F9F9F",'#10'".[ c #C48E5A",'#10'".] c #E0C398",'#10'",'
+ +'. c #D7B37C",'#10'",, c #D6AF74",'#10'",- c #EDC45E",'#10'",* c #B3884B",'
+ +#10'",a c #AB7334",'#10'",b c #468B3E",'#10'",c c #99CE8F",'#10'",d c #87C67'
+ +'D",'#10'",e c #81C378",'#10'",f c #7CC073",'#10'",g c #7CC074",'#10'",h c #'
+ +'81C279",'#10'",i c #4F9049",'#10'",j c #577F54",'#10'",k c #BF8954",'#10'",'
+ +'l c #DDBF94",'#10'",m c #D4AD75",'#10'",n c #E1B863",'#10'",o c #FFD44B",'
+ +#10'",p c #B88B42",'#10'",q c #A66E2C",'#10'",r c #42873B",'#10'",s c #88C68'
+ +'0",'#10'",t c #83C37B",'#10'",u c #7FC177",'#10'",v c #4D8F47",'#10'",w c #'
+ +'3F743B",'#10'",x c #A1A1A1",'#10'",y c #BA844C",'#10'",z c #DBBB8D",'#10'",'
+ +'A c #D1A86E",'#10'",B c #D1A666",'#10'",C c #DFB45F",'#10'",D c #B18547",'
+ +#10'",E c #A16925",'#10'",F c #3E8237",'#10'",G c #3B7E34",'#10'",H c #37793'
+ +'1",'#10'",I c #34752E",'#10'",J c #509149",'#10'",K c #4C8F46",'#10'",L c #'
+ +'3D7339",'#10'",M c #A2A2A2",'#10'",N c #B47E45",'#10'",O c #D9B788",'#10'",'
+ +'P c #CFA367",'#10'",Q c #CC9E61",'#10'",R c #CC9F63",'#10'",S c #B18345",'
+ +#10'",T c #9C641F",'#10'",U c #606060",'#10'",V c #A0A0A0",'#10'",W c #41763'
+ +'D",'#10'",X c #397136",'#10'",Y c #A3A3A3",'#10'",Z c #B0793D",'#10'",0 c #'
+ +'D7B382",'#10'",1 c #CC9F62",'#10'",2 c #C99A5A",'#10'",3 c #CA9B5E",'#10'",'
+ +'4 c #AF8143",'#10'",5 c #986019",'#10'",6 c #5C5C5C",'#10'",7 c #40733C",'
+ +#10'",8 c #A1A1A0",'#10'",9 c #A4A4A4",'#10'",@ c #AA7436",'#10'",# c #D4AF7'
+ +'D",'#10'",; c #C99A5B",'#10'",: c #C79554",'#10'",= c #C89658",'#10'",+ c #'
+ +'AE8041",'#10'",% c #945C13",'#10'",$ c #585858",'#10'",( c #A5A5A5",'#10'",'
+ +') c #A56F2F",'#10'",[ c #D2AB78",'#10'",] c #D3AB78",'#10'"-. c #D1A773",'
+ +#10'"-, c #CDA069",'#10'"-- c #AE7F40",'#10'"-* c #91590F",'#10'"-a c #71717'
+ +'1",'#10'"-b c #545454",'#10'"-c c #515151",'#10'"-d c #4F4F4F",'#10'"-e c #'
+ ,'4C4C4C",'#10'"-f c #4A4A4A",'#10'"-g c #474747",'#10'"-h c #454545",'#10'"-'
+ +'i c #9D6725",'#10'"-j c #A87432",'#10'"-k c #AF7C3D",'#10'"-l c #B58447",'
+ +#10'"-m c #BA8A4E",'#10'"-n c #AD7E3E",'#10'"-o c #8F570C",'#10'"-p c #925A1'
+ +'0",'#10'"-q c #90580D",'#10'"-r c #925C13",'#10'"..........................'
+ +'.,.-.*",'#10'".......................a.,.b.c.d",'#10'".....e.f.g.h.i.j.k.l.'
+ +'m.n.o.p.q.r",'#10'".....s.t.t.u.u.v.v.w.x.y.z.A.B.C",'#10'".....h.t.D.E.v.F'
+ +'.F.G.H.I.J.K.L.M",'#10'".....i.u.N.O.F.P.P.Q.R.J.S.T.U.V",'#10'".W.X.Y.Z.0.'
+ +'1.2.3.3.4.5.6.7.8.9.@",'#10'".#.;.:.=.+.%.$.(.).[.],.,,,-,*,a",'#10'",b,c,d'
+ +',e,f,g,h,i,j,k,l,m,n,o,p,q",'#10'",r.+.%,s,t,u,v,w,x,y,z,A,B,C,D,E",'#10'",'
+ +'F,G,H,I,J,K,L,x,M,N,O,P,Q,R,S,T",'#10'"....,U,V,W,X,M,M,Y,Z,0,1,2,3,4,5",'
+ +#10'"....,6,x,7,8,Y,Y,9,@,#,;,:,=,+,%",'#10'"....,$,M,M,Y,9,9,(,),[,]-.-,---'
+ +'*",'#10'".t-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o",'#10'"........................-p'
+ +'-q-r-o"}'#10'6'#5#0#0'BM6'#5#0#0#0#0#0#0'6'#4#0#0'('#0#0#0#16#0#0#0#16#0#0#0
+ +#1#0#8#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0
+ +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#192#220
+ +#192#0#240#202#166#0#0' @'#0#0' `'#0#0' '#128#0#0' '#160#0#0' '#192#0#0' '
+ +#224#0#0'@'#0#0#0'@ '#0#0'@@'#0#0'@`'#0#0'@'#128#0#0'@'#160#0#0'@'#192#0#0'@'
+ +#224#0#0'`'#0#0#0'` '#0#0'`@'#0#0'``'#0#0'`'#128#0#0'`'#160#0#0'`'#192#0#0'`'
+ +#224#0#0#128#0#0#0#128' '#0#0#128'@'#0#0#128'`'#0#0#128#128#0#0#128#160#0#0
+ +#128#192#0#0#128#224#0#0#160#0#0#0#160' '#0#0#160'@'#0#0#160'`'#0#0#160#128#0
+ +#0#160#160#0#0#160#192#0#0#160#224#0#0#192#0#0#0#192' '#0#0#192'@'#0#0#192'`'
+ +#0#0#192#128#0#0#192#160#0#0#192#192#0#0#192#224#0#0#224#0#0#0#224' '#0#0#224
+ +'@'#0#0#224'`'#0#0#224#128#0#0#224#160#0#0#224#192#0#0#224#224#0'@'#0#0#0'@'
+ +#0' '#0'@'#0'@'#0'@'#0'`'#0'@'#0#128#0'@'#0#160#0'@'#0#192#0'@'#0#224#0'@ '#0
+ +#0'@ '#0'@ @'#0'@ `'#0'@ '#128#0'@ '#160#0'@ '#192#0'@ '#224#0'@@'#0#0'@@ '
+ +#0'@@@'#0'@@`'#0'@@'#128#0'@@'#160#0'@@'#192#0'@@'#224#0'@`'#0#0'@` '#0'@`@'
+ +#0'@``'#0'@`'#128#0'@`'#160#0'@`'#192#0'@`'#224#0'@'#128#0#0'@'#128' '#0'@'
+ +#128'@'#0'@'#128'`'#0'@'#128#128#0'@'#128#160#0'@'#128#192#0'@'#128#224#0'@'
+ +#160#0#0'@'#160' '#0'@'#160'@'#0'@'#160'`'#0'@'#160#128#0'@'#160#160#0'@'#160
+ +#192#0'@'#160#224#0'@'#192#0#0'@'#192' '#0'@'#192'@'#0'@'#192'`'#0'@'#192#128
+ +#0'@'#192#160#0'@'#192#192#0'@'#192#224#0'@'#224#0#0'@'#224' '#0'@'#224'@'#0
+ +'@'#224'`'#0'@'#224#128#0'@'#224#160#0'@'#224#192#0'@'#224#224#0#128#0#0#0
+ +#128#0' '#0#128#0'@'#0#128#0'`'#0#128#0#128#0#128#0#160#0#128#0#192#0#128#0
+ +#224#0#128' '#0#0#128' '#0#128' @'#0#128' `'#0#128' '#128#0#128' '#160#0#128
+ +' '#192#0#128' '#224#0#128'@'#0#0#128'@ '#0#128'@@'#0#128'@`'#0#128'@'#128#0
+ +#128'@'#160#0#128'@'#192#0#128'@'#224#0#128'`'#0#0#128'` '#0#128'`@'#0#128'`'
+ +'`'#0#128'`'#128#0#128'`'#160#0#128'`'#192#0#128'`'#224#0#128#128#0#0#128#128
+ +' '#0#128#128'@'#0#128#128'`'#0#128#128#128#0#128#128#160#0#128#128#192#0#128
+ +#128#224#0#128#160#0#0#128#160' '#0#128#160'@'#0#128#160'`'#0#128#160#128#0
+ +#128#160#160#0#128#160#192#0#128#160#224#0#128#192#0#0#128#192' '#0#128#192
+ +'@'#0#128#192'`'#0#128#192#128#0#128#192#160#0#128#192#192#0#128#192#224#0
+ +#128#224#0#0#128#224' '#0#128#224'@'#0#128#224'`'#0#128#224#128#0#128#224#160
+ +#0#128#224#192#0#128#224#224#0#192#0#0#0#192#0' '#0#192#0'@'#0#192#0'`'#0#192
+ +#0#128#0#192#0#160#0#192#0#192#0#192#0#224#0#192' '#0#0#192' '#0#192' @'#0
+ +#192' `'#0#192' '#128#0#192' '#160#0#192' '#192#0#192' '#224#0#192'@'#0#0#192
+ +'@ '#0#192'@@'#0#192'@`'#0#192'@'#128#0#192'@'#160#0#192'@'#192#0#192'@'#224
+ +#0#192'`'#0#0#192'` '#0#192'`@'#0#192'``'#0#192'`'#128#0#192'`'#160#0#192'`'
+ +#192#0#192'`'#224#0#192#128#0#0#192#128' '#0#192#128'@'#0#192#128'`'#0#192
+ +#128#128#0#192#128#160#0#192#128#192#0#192#128#224#0#192#160#0#0#192#160' '#0
+ +#192#160'@'#0#192#160'`'#0#192#160#128#0#192#160#160#0#192#160#192#0#192#160
+ +#224#0#192#192#0#0#192#192' '#0#192#192'@'#0#192#192'`'#0#192#192#128#0#192
+ +#192#160#0#240#251#255#0#164#160#160#0#128#128#128#0#0#0#255#0#0#255#0#0#0
+ +#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#246#246#246#246
+ +#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246
+ +#24#24#24#0#246#246#246#246#246#246#246#246#246#246#246#24#24#2#24#0#16#246
+ +#246#246#246#246#246#246#246#246#24#2#2'(('#24#24#0#246#246#246#246#246#246
+ +#246#2#2'((0('#2#24#24#0#246#246#246#246#246#246#0#2'(0'#186'0('#2#24#0#246
+ +#246#246#246#246#246#251'(0'#186#250'((('#2#24#246#246#246#0#246#246#0'0'#186
+ +#0#186#186'((('#2#246#246#246#251#0#246#251'('#0#251#186#186#186#186'(('#246
+ +#246#246#246#251#0#0#0#251#186#186#186#186#186#186'x'#246#246#246#0#246#251
+ +#251#251'x'#0#0#0'y'#185#185#246#246#246#246#251#246#251#251#251#185#251#251
+ +#251#250'y'#246#246#246#246#246#246#0#251#251#251#0#246#185#185#246#246#246
+ +#246#246#246#246#0#251#246#0#246#251#0#246#246#246#246#246#246#246#246#246
+ +#251#246#246#251#246#246#251#246#246#246#246#246#246#246#246#246#246#246#246
+ ,#246#246#246#246#246#246#246#246#246#246#246#246'6'#5#0#0'BM6'#5#0#0#0#0#0#0
+ +'6'#4#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0#8#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128#0#0#0#128#0#128
+ +#0#128#128#0#0#192#192#192#0#192#220#192#0#240#202#166#0#0' @'#0#0' `'#0#0' '
+ +#128#0#0' '#160#0#0' '#192#0#0' '#224#0#0'@'#0#0#0'@ '#0#0'@@'#0#0'@`'#0#0'@'
+ +#128#0#0'@'#160#0#0'@'#192#0#0'@'#224#0#0'`'#0#0#0'` '#0#0'`@'#0#0'``'#0#0'`'
+ +#128#0#0'`'#160#0#0'`'#192#0#0'`'#224#0#0#128#0#0#0#128' '#0#0#128'@'#0#0#128
+ +'`'#0#0#128#128#0#0#128#160#0#0#128#192#0#0#128#224#0#0#160#0#0#0#160' '#0#0
+ +#160'@'#0#0#160'`'#0#0#160#128#0#0#160#160#0#0#160#192#0#0#160#224#0#0#192#0
+ +#0#0#192' '#0#0#192'@'#0#0#192'`'#0#0#192#128#0#0#192#160#0#0#192#192#0#0#192
+ +#224#0#0#224#0#0#0#224' '#0#0#224'@'#0#0#224'`'#0#0#224#128#0#0#224#160#0#0
+ +#224#192#0#0#224#224#0'@'#0#0#0'@'#0' '#0'@'#0'@'#0'@'#0'`'#0'@'#0#128#0'@'#0
+ +#160#0'@'#0#192#0'@'#0#224#0'@ '#0#0'@ '#0'@ @'#0'@ `'#0'@ '#128#0'@ '#160#0
+ +'@ '#192#0'@ '#224#0'@@'#0#0'@@ '#0'@@@'#0'@@`'#0'@@'#128#0'@@'#160#0'@@'#192
+ +#0'@@'#224#0'@`'#0#0'@` '#0'@`@'#0'@``'#0'@`'#128#0'@`'#160#0'@`'#192#0'@`'
+ +#224#0'@'#128#0#0'@'#128' '#0'@'#128'@'#0'@'#128'`'#0'@'#128#128#0'@'#128#160
+ +#0'@'#128#192#0'@'#128#224#0'@'#160#0#0'@'#160' '#0'@'#160'@'#0'@'#160'`'#0
+ +'@'#160#128#0'@'#160#160#0'@'#160#192#0'@'#160#224#0'@'#192#0#0'@'#192' '#0
+ +'@'#192'@'#0'@'#192'`'#0'@'#192#128#0'@'#192#160#0'@'#192#192#0'@'#192#224#0
+ +'@'#224#0#0'@'#224' '#0'@'#224'@'#0'@'#224'`'#0'@'#224#128#0'@'#224#160#0'@'
+ +#224#192#0'@'#224#224#0#128#0#0#0#128#0' '#0#128#0'@'#0#128#0'`'#0#128#0#128
+ +#0#128#0#160#0#128#0#192#0#128#0#224#0#128' '#0#0#128' '#0#128' @'#0#128' `'
+ +#0#128' '#128#0#128' '#160#0#128' '#192#0#128' '#224#0#128'@'#0#0#128'@ '#0
+ +#128'@@'#0#128'@`'#0#128'@'#128#0#128'@'#160#0#128'@'#192#0#128'@'#224#0#128
+ +'`'#0#0#128'` '#0#128'`@'#0#128'``'#0#128'`'#128#0#128'`'#160#0#128'`'#192#0
+ +#128'`'#224#0#128#128#0#0#128#128' '#0#128#128'@'#0#128#128'`'#0#128#128#128
+ +#0#128#128#160#0#128#128#192#0#128#128#224#0#128#160#0#0#128#160' '#0#128#160
+ +'@'#0#128#160'`'#0#128#160#128#0#128#160#160#0#128#160#192#0#128#160#224#0
+ +#128#192#0#0#128#192' '#0#128#192'@'#0#128#192'`'#0#128#192#128#0#128#192#160
+ +#0#128#192#192#0#128#192#224#0#128#224#0#0#128#224' '#0#128#224'@'#0#128#224
+ +'`'#0#128#224#128#0#128#224#160#0#128#224#192#0#128#224#224#0#192#0#0#0#192#0
+ +' '#0#192#0'@'#0#192#0'`'#0#192#0#128#0#192#0#160#0#192#0#192#0#192#0#224#0
+ +#192' '#0#0#192' '#0#192' @'#0#192' `'#0#192' '#128#0#192' '#160#0#192' '
+ +#192#0#192' '#224#0#192'@'#0#0#192'@ '#0#192'@@'#0#192'@`'#0#192'@'#128#0#192
+ +'@'#160#0#192'@'#192#0#192'@'#224#0#192'`'#0#0#192'` '#0#192'`@'#0#192'``'#0
+ +#192'`'#128#0#192'`'#160#0#192'`'#192#0#192'`'#224#0#192#128#0#0#192#128' '#0
+ +#192#128'@'#0#192#128'`'#0#192#128#128#0#192#128#160#0#192#128#192#0#192#128
+ +#224#0#192#160#0#0#192#160' '#0#192#160'@'#0#192#160'`'#0#192#160#128#0#192
+ +#160#160#0#192#160#192#0#192#160#224#0#192#192#0#0#192#192' '#0#192#192'@'#0
+ +#192#192'`'#0#192#192#128#0#192#192#160#0#240#251#255#0#164#160#160#0#128#128
+ +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255
+ +#255#255#0#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246
+ +#246#246#249#249#1#10#0#246#246#246#0#249#249#0#246#246#246#246#246#249#249
+ +#249#1#0#246#0#13#249#0#246#246#246#246#246#246#246#249#249#249#1#0#249#249
+ +'S'#246#246#246#246#246#246#246#246#246'\'#249#249#249#249'T'#246#246#246#246
+ +#246#246#246#246#246'\'#0#249#249#249#249#0'R'#246#246#246#246#246#246#246']'
+ +#0#249#249#18'f'#249#249#0'I'#246#246#246#246#246#246#0#249#249'g'#191'g^'
+ +#249#249#0#246#246#246#246#246#0#249#249'g'#191'off^'#249#249#246#246#246#246
+ +#246#249#249'g'#191'g'#191#191'f^f'#249#246#246#246#246#246#246']]o'#191#191
+ +#191#191#191'^f'#246#246#246#246#246#246'o'#191#191#191#191#191#191#191#191
+ +'o'#246#246#246#246#246#246#246'oowwwwww'#246#246#246#246#246#246#246#246#246
+ +'wwooow'#246#246#246#246#246#246#246#246#246#246#246#246'ww'#246#246#246#246
+ +#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246#246
+ +#0#0#22'TSelectDirectoryDialog'#5'SDDir'#5'Title'#6#16'Select Directory'#11
+ +'FilterIndex'#2#0#4'left'#3#162#0#3'top'#2'B'#0#0#0
+]);
diff --git a/examples/cleandir/frmmain.pp b/examples/cleandir/frmmain.pp
new file mode 100644
index 0000000000..dede1291ee
--- /dev/null
+++ b/examples/cleandir/frmmain.pp
@@ -0,0 +1,1047 @@
+{ Directory cleaning component configuration window
+
+ Copyright (C) 2007 Michael Van Canneyt michael@freepascal.org
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version with the following modification:
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent modules,and
+ to copy and distribute the resulting executable under terms of your choice,
+ provided that you also meet, for each linked independent module, the terms
+ and conditions of the license of that module. An independent module is a
+ module which is not derived from or based on this library. If you modify
+ this library, you may extend this exception to your version of the library,
+ but you are not obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
+ for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+}
+
+
+unit frmmain;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Menus,
+ ActnList, ComCtrls, ExtDlgs, ExtCtrls, RTTICtrls, StdCtrls, Buttons, dircleaner,
+ RTTIGrids;
+
+type
+
+ { TMainForm }
+
+ TMainForm = class(TForm)
+ AExecute: TAction;
+ ATest: TAction;
+ ADeleteItem: TAction;
+ ANewItem: TAction;
+ AQuit: TAction;
+ ASaveAs: TAction;
+ ASave: TAction;
+ AOpen: TAction;
+ ANew: TAction;
+ ALMain: TActionList;
+ ILMain: TImageList;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
+ Label4: TLabel;
+ Label5: TLabel;
+ Label6: TLabel;
+ Label7: TLabel;
+ LEDailyAt: TLabel;
+ LSEHourlyAt: TLabel;
+ LSEFileActionMinCompressSize: TLabel;
+ LELocationName: TLabel;
+ LVFileActions: TListView;
+ LVLocations: TListView;
+ LVDirectories: TListView;
+ MIRun: TMenuItem;
+ MITest: TMenuItem;
+ MRun: TMenuItem;
+ MIDeleteItem: TMenuItem;
+ MINewItem: TMenuItem;
+ MItems: TMenuItem;
+ MIQuit: TMenuItem;
+ MISep1: TMenuItem;
+ MISaveAs: TMenuItem;
+ MISave: TMenuItem;
+ MIOpen: TMenuItem;
+ MNew: TMenuItem;
+ MFile: TMenuItem;
+ MMMain: TMainMenu;
+ ODConfig: TOpenDialog;
+ PFileAction: TPanel;
+ PLocation: TPanel;
+ PCConfig: TPageControl;
+ POptions: TPanel;
+ PDirectories: TPanel;
+ SBLocationPath: TSpeedButton;
+ SDConfig: TSaveDialog;
+ SDDir: TSelectDirectoryDialog;
+ SBDirPath: TSpeedButton;
+ CBDirEnabled: TTICheckBox;
+ CBDirRecurse: TTICheckBox;
+ CBStopOnError: TTICheckBox;
+ CBAllFileActions: TTICheckBox;
+ EDirName: TTIEdit;
+ EDirPath: TTIEdit;
+ ELocationName: TTIEdit;
+ ELocationBaseDir: TTIEdit;
+ CGLocationSubdirs: TTICheckGroup;
+ CBFileActionDelete: TTICheckBox;
+ CBFileActionCompress: TTICheckBox;
+ CBFileActionLocationName: TTIComboBox;
+ EFileActionName: TTIEdit;
+ EFileActionExtensions: TTIEdit;
+ SEFileActionMinCompressSize: TTISpinEdit;
+ CBLogAllFiles: TTICheckBox;
+ CGScheduleDays: TTICheckGroup;
+ EDailyAt: TTIEdit;
+ RGScheduleMode: TTIRadioGroup;
+ SEHourlyAt: TTISpinEdit;
+ TSScheduling: TTabSheet;
+ ToolButton1: TToolButton;
+ TBNewItem: TToolButton;
+ TBDeleteItem: TToolButton;
+ TSLocations: TTabSheet;
+ TSFileActions: TTabSheet;
+ TSOptions: TTabSheet;
+ TBMain: TToolBar;
+ TBQuit: TToolButton;
+ ToolButton2: TToolButton;
+ TBNew: TToolButton;
+ TBOpen: TToolButton;
+ TBSave: TToolButton;
+ procedure ADeleteItemExecute(Sender: TObject);
+ procedure ADeleteItemUpdate(Sender: TObject);
+ procedure AExecuteUpdate(Sender: TObject);
+ procedure ANewExecute(Sender: TObject);
+ procedure ANewItemExecute(Sender: TObject);
+ procedure AOpenExecute(Sender: TObject);
+ procedure AQuitExecute(Sender: TObject);
+ procedure ASaveAsExecute(Sender: TObject);
+ procedure ASaveExecute(Sender: TObject);
+ procedure ASaveUpdate(Sender: TObject);
+ procedure ATestExecute(Sender: TObject);
+ procedure ActionChanged(Sender: TObject);
+ procedure CBFileActionCompressChange(Sender: TObject);
+ procedure DirectoryChanged(Sender: TObject);
+ procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
+ procedure FormShow(Sender: TObject);
+ procedure LocationChanged(Sender: TObject);
+ procedure LVDirectoriesSelectItem(Sender: TObject; Item: TListItem;
+ Selected: Boolean);
+ procedure LVFileActionsSelectItem(Sender: TObject; Item: TListItem;
+ Selected: Boolean);
+ procedure LVLocationsSelectItem(Sender: TObject; Item: TListItem;
+ Selected: Boolean);
+ procedure OptionsChanged(Sender: TObject);
+ procedure PCConfigChange(Sender: TObject);
+ procedure RGScheduleModeClick(Sender: TObject);
+ procedure SBDirPathClick(Sender: TObject);
+ procedure SBLocationPathClick(Sender: TObject);
+ procedure ScheduleModeChanged(Sender: TObject);
+ private
+ { private declarations }
+ FCleaner : TCleanDirs;
+ // For easy access
+ FLocations : TLocations;
+ FDirectories : TDirectories;
+ FFileActions : TFileActions;
+ // Currently shown
+ FLocation : TLocation;
+ FDirectory : TDirectory;
+ FFileAction : TFileAction;
+ // Tracking changes
+ FLocationChanged,
+ FDirectoryChanged,
+ FFileActionChanged,
+ FOptionChanged : Boolean;
+ procedure CheckScheduleMode;
+ procedure RunConfig(ACleaner: TCleanDirs; TestOnly: Boolean);
+ Procedure SaveCurrentRTTI;
+ procedure CheckInit;
+ procedure ClearChanged;
+ Function DataModified : Boolean;
+ procedure CheckCompressMinSize;
+ function CheckSave: Boolean;
+ procedure DeleteDirectory;
+ procedure DeleteFileAction;
+ procedure DeleteItem;
+ function DeleteListItem(LV: TListView): TListItem;
+ procedure DeleteLocation;
+ function HaveDirectory: Boolean;
+ function HaveFileAction: Boolean;
+ function HaveItem: Boolean;
+ function HaveLocation: Boolean;
+ procedure LoadFile(AFileName: String);
+ procedure NewConfig;
+ procedure NewItem;
+ procedure NewDirectory;
+ procedure NewFileAction;
+ procedure NewLocation;
+ function OpenFile: Boolean;
+ procedure RefreshDirectoryItem(LI: TListItem);
+ procedure RefreshFileActionItem(LI: TListItem);
+ procedure RefreshLocationItem(LI: TListItem);
+ function SaveData: Boolean;
+ function SaveDataAs: Boolean;
+ Function Selectdir(Current : String) : String;
+ procedure ShowDirectoryItem(LI: TListItem);
+ procedure ShowFileActionItem(LI: TListItem);
+ procedure ShowLocationItem(LI: TListItem);
+ procedure UpdateActionLocations(Loc: TLocations);
+ public
+ { public declarations }
+ Procedure ShowDiskCleaner(ACleaner : TCleanDirs);
+ Procedure ShowLocations(ALocations : TLocations);
+ Procedure ShowDirectories(ADirectories : TDirectories);
+ Procedure ShowFileActions(AFileActions : TFileActions);
+ end;
+
+var
+ MainForm: TMainForm;
+
+implementation
+
+uses
+ frmLog,
+ typinfo;
+
+ResourceString
+ SYes = 'Yes';
+ SNo = 'No';
+ SSubdirExtension = 'Extension';
+ SSubdirYear = 'Year';
+ SSubdirMonth = 'Month';
+ SSubdirDay = 'Day';
+ SSubdirDate = 'Date';
+ SSubdirHour = 'Hour';
+ SSubdirMin = 'Min';
+ SSubdirTime = 'Time';
+ SDataChanged = 'The configuration has changed. Save changes ?';
+
+
+Function BoolStr(B : Boolean) : String;
+
+begin
+ if B then
+ Result:=SYes
+ else
+ Result:=SNo;
+end;
+
+Function SubdirsToStr(S : TSubDirs) : String;
+
+ Procedure AddToResult(Const ToAdd: String);
+
+ begin
+ If (Result<>'') then
+ Result:=Result+',';
+ Result:=Result+ToAdd
+
+ end;
+
+Var
+ D : TSubDir;
+ A : String;
+
+begin
+ Result:='';
+ For D:=Low(TSubDir) to High(TSubDir) do
+ If D in S then
+ begin
+ case D of
+ sdExtension : A:=SSubDirExtension;
+ sdYear : A:=SSubDirYear;
+ sdMonth : A:=SSubDirMonth;
+ sdDay : A:=SSubDirDay;
+ sdDate : A:=SSubDirDate;
+ sdHour : A:=SSubDirHour;
+ sdMin : A:=SSubDirMin;
+ sdTime : A:=SSubDirTime;
+ else
+ A:='?';
+ end;
+ AddToResult(A);
+ end;
+end;
+
+{ TMainForm }
+
+procedure TMainForm.ANewExecute(Sender: TObject);
+begin
+ NewConfig;
+end;
+
+procedure TMainForm.ADeleteItemExecute(Sender: TObject);
+begin
+ DeleteItem;
+end;
+
+procedure TMainForm.ADeleteItemUpdate(Sender: TObject);
+begin
+ (Sender as Taction).Enabled:=HaveItem;
+end;
+
+procedure TMainForm.AExecuteUpdate(Sender: TObject);
+begin
+ (Sender as Taction).Enabled:=(FCleaner<>Nil) and (FFileActions.Count>0);
+end;
+
+procedure TMainForm.ANewItemExecute(Sender: TObject);
+begin
+ NewItem;
+end;
+
+procedure TMainForm.AOpenExecute(Sender: TObject);
+begin
+ OpenFile;
+end;
+
+procedure TMainForm.AQuitExecute(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TMainForm.ASaveAsExecute(Sender: TObject);
+begin
+ SaveDataAs;
+end;
+
+procedure TMainForm.ASaveExecute(Sender: TObject);
+begin
+ SaveData;
+end;
+
+procedure TMainForm.ASaveUpdate(Sender: TObject);
+begin
+ (Sender as Taction).Enabled:=DataModified;
+end;
+
+procedure TMainForm.ATestExecute(Sender: TObject);
+begin
+ RunConfig(FCleaner,(Sender=ATest));
+end;
+
+procedure TMainForm.ActionChanged(Sender: TObject);
+begin
+ FFileActionChanged:=True;
+end;
+
+
+procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: boolean);
+begin
+ CanClose:=CheckSave;
+end;
+
+procedure TMainForm.FormShow(Sender: TObject);
+begin
+ CheckInit;
+end;
+
+Function TMainForm.Selectdir(Current : String) : String;
+
+begin
+ With SDDir do
+ begin
+ If (Current<>'') then
+ InitialDir:=Current
+ else
+ InitialDir:=UserDir;
+ If Execute then
+ Result:=FileName
+ else
+ Result:=Current;
+ end;
+end;
+
+{ ---------------------------------------------------------------------
+ Config file management;
+ ---------------------------------------------------------------------}
+
+procedure TMainForm.NewConfig;
+
+begin
+ If Not CheckSave Then
+ Exit;
+ FreeAndNil(FCleaner);
+ ShowDiskCleaner(TCleanDirs.Create(Self));
+end;
+
+procedure TMainForm.ShowDiskCleaner(ACleaner: TCleanDirs);
+begin
+ FCleaner:=ACleaner;
+ CBStopOnError.Link.TIObject:=FCleaner;
+ CBAllFileActions.Link.TIObject:=FCleaner;
+ CBLogAllFiles.Link.TIObject:=FCleaner;
+ RGScheduleMode.link.TIObject:=FCLeaner;
+ CGScheduleDays.link.TIObject:=FCLeaner;
+ EDailyAt.Link.TIObject:=FCleaner;
+ SEHourlyAt.Link.TIObject:=FCleaner;
+ ShowDirectories(FCleaner.Directories);
+ ShowLocations(FCleaner.Locations);
+ ShowFileActions(FCleaner.FileActions);
+ ClearChanged;
+end;
+
+Procedure TMainForm.ClearChanged;
+
+begin
+ FLocationChanged:=False;
+ FDirectoryChanged:=False;
+ FFileActionChanged:=False;
+ FOptionChanged:=False;
+end;
+
+procedure TMainForm.SaveCurrentRTTI;
+
+Var
+ C : TWinControl;
+ L : TPropertyLink;
+
+begin
+ C:=Self.ActiveControl;
+ If Assigned(C) then
+ begin
+ If IsPublishedProp(C,'Link') then
+ begin
+ L:=GetObjectProp(C,'Link',TPropertyLink) as TPropertyLink;
+ L.SaveToProperty;
+ end;
+ end;
+end;
+
+function TMainForm.DataModified: Boolean;
+begin
+ Result:=FOptionChanged
+ or FDirectoryChanged
+ or FFileActionChanged
+ or FLocationChanged;
+end;
+
+
+Function TMainForm.CheckSave : Boolean; // Return true if all OK, false if cancelled
+
+begin
+ SaveCurrentRTTI;
+ Result:=Not DataModified;
+ If Not Result then
+ begin
+ Result:=True;
+ case MessageDlg(SDataChanged,mtWarning,[mbYes,mbNo,mbCancel],0) of
+ mrYes : Result:=SaveData;
+ mrCancel : Result:=False;
+ end;
+ end;
+end;
+
+Function TMainForm.SaveData : Boolean;
+
+begin
+ If (FCleaner.ConfigFile<>'') then
+ begin
+ FCleaner.SaveToFile(FCleaner.ConfigFile);
+ ClearChanged;
+ end
+ else
+ Result:=SaveDataAs;
+end;
+
+Function TMainForm.SaveDataAs : Boolean;
+
+begin
+ With SDConfig do
+ begin
+ FileName:=FCleaner.ConfigFile;
+ Result:=Execute;
+ If Result then
+ begin
+ FCleaner.SaveToFile(FileName);
+ ClearChanged;
+ end;
+ end;
+end;
+
+Function TMainForm.OpenFile : Boolean;
+
+begin
+ Result:=CheckSave;
+ If Result then
+ With ODConfig do
+ begin
+ Result:=Execute;
+ If Result then
+ LoadFile(FileName);
+ end;
+end;
+
+procedure TMainForm.LoadFile(AFileName : String);
+
+Var
+ D : TCleanDirs;
+
+begin
+ D:=TCleanDirs.Create(Self);
+ Try
+ D.LoadFromFile(AFileName);
+ except
+ D.Free;
+ Raise;
+ end;
+ FreeAndNil(FCleaner);
+ ShowDiskCleaner(D);
+end;
+
+procedure TMainForm.CheckInit;
+
+begin
+ If (Application.ParamCount>0) and FileExists(Application.Params[1]) then
+ LoadFile(Application.Params[1])
+ else
+ NewConfig;
+end;
+
+procedure TMainForm.NewItem;
+
+Var
+ TS : TTabSheet;
+
+begin
+ SaveCurrentRTTI;
+ TS:=PCConfig.ActivePage;
+ If (TS=TSOptions) then
+ NewDirectory
+ else If (TS=TSLocations) then
+ NewLocation
+ else if (TS=TSFileActions) then
+ NewFileAction;
+end;
+
+procedure TMainForm.DeleteItem;
+
+Var
+ TS : TTabSheet;
+
+begin
+ TS:=PCConfig.ActivePage;
+ If (TS=TSOptions) then
+ DeleteDirectory
+ else If (TS=TSLocations) then
+ DeleteLocation
+ else if (TS=TSFileActions) then
+ DeleteFileAction;
+end;
+
+Function TMainForm.HaveItem : Boolean;
+
+Var
+ TS : TTabSheet;
+
+begin
+ Result:=False;
+ TS:=PCConfig.ActivePage;
+ If (TS=TSOptions) then
+ Result:=HaveDirectory
+ else If (TS=TSLocations) then
+ Result:=HaveLocation
+ else if (TS=TSFileActions) then
+ Result:=HaveFileAction
+end;
+
+procedure TMainForm.OptionsChanged(Sender: TObject);
+begin
+ FOptionChanged:=True;
+end;
+
+procedure TMainForm.PCConfigChange(Sender: TObject);
+begin
+ If (PCConfig.ActivePage=TSFileActions) and Assigned(FLocations) then
+ UpdateActionLocations(FLocations);
+end;
+
+procedure TMainForm.RGScheduleModeClick(Sender: TObject);
+begin
+
+end;
+
+procedure TMainForm.RunConfig(ACleaner : TCleanDirs; TestOnly : Boolean);
+
+Var
+ LO : Boolean;
+ F : TLogForm;
+
+begin
+ LO:=ACleaner.LogOnly;
+ try
+ ACleaner.LogOnly:=TestOnly;
+ F:=TLogForm.Create(Self);
+ try
+ F.Cleaner:=ACleaner;
+ F.ShowModal;
+ finally
+ F.Free;
+ end;
+ finally
+ ACleaner.LogOnly:=LO;
+ end;
+end;
+
+procedure TMainForm.ScheduleModeChanged(Sender: TObject);
+begin
+ CheckScheduleMode;
+ OptionsChanged(Sender);
+end;
+
+procedure TMainForm.CheckScheduleMode;
+
+Var
+ D : Boolean;
+
+
+begin
+ D:=(RGScheduleMode.ItemIndex=0);
+ EDailyAt.Enabled:=D;
+ SEHourlyAt.Enabled:=Not D;
+end;
+
+
+{ ---------------------------------------------------------------------
+ Directories
+ ---------------------------------------------------------------------}
+
+
+procedure TMainForm.ShowDirectories(ADirectories: TDirectories);
+
+Var
+ LI : TListItem;
+ D : TDirectory;
+ I : Integer;
+
+begin
+ FDirectories:=ADirectories;
+ With LVDirectories do
+ begin
+ BeginUpdate;
+ Try
+ Items.Clear;
+ For I:=0 to FDirectories.Count-1 do
+ begin
+ D:=FDirectories[i];
+ LI:=LVDirectories.Items.Add;
+ LI.Data:=D;
+ RefreshDirectoryItem(LI);
+ end;
+ If (LVDirectories.Items.Count>0) then
+ ShowDirectoryItem(LVDirectories.Items[i])
+ else
+ ShowDirectoryItem(Nil)
+ Finally
+ EndUpdate;
+ end;
+ end;
+end;
+
+
+procedure TMainForm.LVDirectoriesSelectItem(Sender: TObject; Item: TListItem;
+ Selected: Boolean);
+begin
+ If Selected then
+ ShowDirectoryItem(Item)
+ else
+ ShowDirectoryItem(Nil);
+end;
+
+
+
+procedure TMainForm.RefreshDirectoryItem(LI: TListItem);
+
+Var
+ D : TDirectory;
+
+begin
+ If Not Assigned(Li) then
+ Exit;
+ D:=TDirectory(LI.Data);
+ LI.Caption:=BoolStr(D.Enabled);
+ LI.SubItems.Clear;
+ LI.SubItems.Add(BoolStr(D.Recurse));
+ LI.SubItems.Add(D.Name);
+ LI.SubItems.Add(D.Path);
+end;
+
+
+procedure TMainForm.ShowDirectoryItem(LI: TListItem);
+
+begin
+ If (LI=Nil) then
+ FDirectory:=Nil
+ else
+ FDirectory:=TDirectory(LI.Data);
+ EDirName.Link.TIObject:=FDirectory;
+ EDirPath.Link.TIObject:=FDirectory;
+ CBDirEnabled.Link.TIObject:=FDirectory;
+ CBDirRecurse.link.TIOBject:=FDirectory;
+end;
+
+
+procedure TMainForm.NewDirectory;
+
+Var
+ D : TDirectory;
+ LI : TListItem;
+
+begin
+ RefreshDirectoryItem(LVDirectories.Selected);
+ D:=FDirectories.AddDirectory;
+ LI:=LVDirectories.Items.Add;
+ LI.Data:=D;
+ LVDirectories.Selected:=LI;
+ RefreshDirectoryItem(LI);
+ ShowDirectoryItem(LI);
+ FDirectoryChanged:=True;
+end;
+
+
+Function TMainForm.DeleteListItem(LV : TListView) : TListItem;
+
+Var
+ LI : TListItem;
+ I : Integer;
+
+begin
+ Result:=Nil;
+ LI:=LV.Selected;
+ if (Li<>Nil) then
+ begin
+ I:=LI.Index;
+ LI.Free;
+ If (I>=LV.Items.Count) then
+ Dec(I);
+ If (INil);
+end;
+
+procedure TMainForm.DirectoryChanged(Sender: TObject);
+begin
+ RefreshDirectoryItem(LVDirectories.Selected);
+ FDirectoryChanged:=True;
+end;
+
+
+procedure TMainForm.SBDirPathClick(Sender: TObject);
+
+begin
+ If Assigned(FDirectory) then
+ begin
+ FDirectory.Path:=SelectDir(FDirectory.Path);
+ EDirPath.Link.LoadFromProperty;
+ end;
+end;
+
+{ ---------------------------------------------------------------------
+ Locations
+ ---------------------------------------------------------------------}
+
+procedure TMainForm.LVLocationsSelectItem(Sender: TObject; Item: TListItem;
+ Selected: Boolean);
+begin
+ If Selected then
+ ShowLocationItem(Item)
+ else
+ ShowLocationItem(Nil)
+end;
+
+procedure TMainForm.LocationChanged(Sender: TObject);
+begin
+ RefreshLocationItem(LVLocations.Selected);
+ FLocationChanged:=True;
+end;
+
+
+procedure TMainForm.SBLocationPathClick(Sender: TObject);
+begin
+ If Assigned(FLocation) then
+ begin
+ FLocation.BasePath:=SelectDir(FLocation.BasePath);
+ ELocationBaseDir.Link.LoadFromProperty;
+ end;
+end;
+
+
+
+procedure TMainForm.ShowLocations(ALocations: TLocations);
+
+Var
+ LI : TListItem;
+ L : TLocation;
+ I : Integer;
+
+begin
+ FLocations:=ALocations;
+ With LVLocations do
+ begin
+ BeginUpdate;
+ Try
+ Items.Clear;
+ For I:=0 to FLocations.Count-1 do
+ begin
+ L:=FLocations[i];
+ LI:=LVLocations.Items.Add;
+ LI.Data:=L;
+ RefreshLocationItem(LI);
+ end;
+ If (LVLocations.Items.Count>0) then
+ ShowLocationItem(LVLocations.Items[i])
+ else
+ ShowLocationItem(Nil)
+ Finally
+ EndUpdate;
+ end;
+ end;
+ UpdateActionLocations(ALocations);
+end;
+
+procedure TMainForm.RefreshLocationItem(LI: TListItem);
+
+Var
+ L : TLocation;
+
+begin
+ If Not Assigned(Li) then
+ Exit;
+ L:=TLocation(LI.Data);
+ LI.Caption:=L.Name;
+ LI.SubItems.Clear;
+ LI.SubItems.Add(L.BasePath);
+ LI.SubItems.Add(SubdirsToStr(L.SubDirs));
+end;
+
+
+procedure TMainForm.ShowLocationItem(LI: TListItem);
+
+begin
+ If (LI=Nil) then
+ FLocation:=Nil
+ else
+ FLocation:=TLocation(LI.Data);
+ ELocationName.Link.TIObject:=FLocation;
+ ELocationBaseDir.Link.TIObject:=FLocation;
+ CGLocationSubdirs.Link.TIObject:=FLocation;
+end;
+
+procedure TMainForm.UpdateActionLocations(Loc : TLocations);
+
+Var
+ I,J : Integer;
+
+begin
+ With CBFileActionLocationName.Items do
+ begin
+ BeginUpdate;
+ Try
+ Clear;
+ For I:=0 to Loc.Count-1 do
+ begin
+ Writeln('Adding ',Loc[i].Name);
+ J:=Add(Loc[i].Name);
+ Objects[J]:=Loc[i];
+ end;
+ Finally
+ EndUpdate;
+ end;
+ end;
+end;
+
+procedure TMainForm.NewLocation;
+
+Var
+ D : TLocation;
+ LI : TListItem;
+
+begin
+ RefreshLocationItem(LVLocations.Selected);
+ D:=FLocations.AddLocation;
+ LI:=LVLocations.Items.Add;
+ LI.Data:=D;
+ LVLocations.Selected:=LI;
+ ShowLocationItem(LI);
+end;
+
+procedure TMainForm.DeleteLocation;
+
+begin
+ FreeAndNil(FLocation);
+ ShowDirectoryItem(DeleteListItem(LVLocations));
+end;
+
+Function TMainForm.HaveLocation : Boolean;
+
+begin
+ Result:=(FLocation<>Nil)
+end;
+
+{ ---------------------------------------------------------------------
+ FileActions
+ ---------------------------------------------------------------------}
+
+procedure TMainForm.LVFileActionsSelectItem(Sender: TObject; Item: TListItem;
+ Selected: Boolean);
+begin
+ If Selected then
+ ShowFileActionItem(Item)
+ else
+ ShowFileActionItem(Nil)
+end;
+
+procedure TMainForm.CBFileActionCompressChange(Sender: TObject);
+begin
+ ActionChanged(Sender);
+ CheckCompressMinSize;
+end;
+
+
+procedure TMainForm.ShowFileActions(AFileActions: TFileActions);
+
+Var
+ LI : TListItem;
+ A : TFileAction;
+ I : Integer;
+
+begin
+ FFileActions:=AFileActions;
+ With LVFileActions do
+ begin
+ BeginUpdate;
+ Try
+ Items.Clear;
+ For I:=0 to FFileActions.Count-1 do
+ begin
+ A:=FFileActions[i];
+ LI:=LVFileActions.Items.Add;
+ LI.Data:=A;
+ RefreshFileActionItem(LI);
+ end;
+ If (LVFileActions.Items.Count>0) then
+ ShowFileActionItem(LVFileActions.Items[i])
+ else
+ ShowFileActionItem(Nil)
+ Finally
+ EndUpdate;
+ end;
+ end;
+end;
+
+procedure TMainForm.RefreshFileActionItem(LI: TListItem);
+
+Var
+ A : TFileAction;
+
+begin
+ If Not Assigned(Li) then
+ Exit;
+ A:=TFileAction(LI.Data);
+ LI.Caption:=A.Name;
+ LI.SubItems.Clear;
+ LI.SubItems.Add(A.Extensions);
+ LI.SubItems.Add(A.LocationName);
+ LI.SubItems.Add(BoolStr(A.Delete));
+ LI.SubItems.Add(BoolStr(A.Compress));
+ LI.SubItems.Add(IntToStr(A.MinCompressSize));
+ LI.SubItems.Add(BoolStr(A.CaseSensitive));
+end;
+
+
+procedure TMainForm.ShowFileActionItem(LI: TListItem);
+
+begin
+ If (LI=Nil) then
+ FFileAction:=Nil
+ else
+ FFileAction:=TFileAction(LI.Data);
+ EFileActionName.Link.TIObject:=FFileAction;
+ EFileActionExtensions.Link.TIObject:=FFileAction;
+ CBFileActionLocationName.Link.TIObject:=FFileAction;
+ // Bug in control: the items list is cleared !!
+// UpdateActionLocations(FLocations);
+ CBFileActionDelete.Link.TIObject:=FFileAction;
+ CBFileActionCompress.Link.TIObject:=FFileAction;
+ SEFileActionMinCompressSize.Link.TIObject:=FFileAction;
+ CheckCompressMinSize;
+end;
+
+procedure TMainForm.CheckCompressMinSize;
+
+begin
+ With SEFileActionMinCompressSize do
+ begin
+ Enabled:=CBFileActionCompress.State=cbChecked;
+ If Not enabled then
+ SEFileActionMinCompressSize.Value:=0;
+ LSEFileActionMinCompressSize.Enabled:=Enabled;
+ end;
+end;
+
+procedure TMainForm.NewFileAction;
+
+Var
+ D : TFileAction;
+ LI : TListItem;
+
+begin
+ RefreshFileActionItem(LVFileActions.Selected);
+ D:=FFileActions.AddFileAction;
+ LI:=LVFileActions.Items.Add;
+ LI.Data:=D;
+ LVFileActions.Selected:=LI;
+ ShowFileActionItem(LI);
+end;
+
+procedure TMainForm.DeleteFileAction;
+
+begin
+ FreeAndNil(FFileAction);
+ ShowDirectoryItem(DeleteListItem(LVFileActions));
+end;
+
+Function TMainForm.HaveFileAction : Boolean;
+
+begin
+ Result:=(FFileAction<>Nil)
+end;
+
+initialization
+ {$I frmmain.lrs}
+
+end.
+
diff --git a/examples/cleandir/svccleandirs.lfm b/examples/cleandir/svccleandirs.lfm
new file mode 100644
index 0000000000..37b31e530a
--- /dev/null
+++ b/examples/cleandir/svccleandirs.lfm
@@ -0,0 +1,12 @@
+object CleanDirsDaemon: TCleanDirsDaemon
+ OnCreate = CleanDirsDaemonCreate
+ OnStart = CleanDirsDaemonStart
+ OnStop = CleanDirsDaemonStop
+ OnExecute = CleanDirsDaemonExecute
+ left = 604
+ top = 402
+ Height = 0
+ HorizontalOffset = 0
+ VerticalOffset = 0
+ Width = 0
+end
diff --git a/examples/cleandir/svccleandirs.lrs b/examples/cleandir/svccleandirs.lrs
new file mode 100644
index 0000000000..13fac2e029
--- /dev/null
+++ b/examples/cleandir/svccleandirs.lrs
@@ -0,0 +1,9 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TCleanDirsDaemon','FORMDATA',[
+ 'TPF0'#16'TCleanDirsDaemon'#15'CleanDirsDaemon'#8'OnCreate'#7#21'CleanDirsDae'
+ +'monCreate'#7'OnStart'#7#20'CleanDirsDaemonStart'#6'OnStop'#7#19'CleanDirsDa'
+ +'emonStop'#9'OnExecute'#7#22'CleanDirsDaemonExecute'#4'left'#3'\'#2#3'top'#3
+ +#146#1#6'Height'#2#0#16'HorizontalOffset'#2#0#14'VerticalOffset'#2#0#5'Width'
+ +#2#0#0#0
+]);
diff --git a/examples/cleandir/svccleandirs.pp b/examples/cleandir/svccleandirs.pp
new file mode 100644
index 0000000000..cf0a323dc6
--- /dev/null
+++ b/examples/cleandir/svccleandirs.pp
@@ -0,0 +1,326 @@
+{ Directory cleaning service - service module
+
+ Copyright (C) 2007 Michael Van Canneyt
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version with the following modification:
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent modules,and
+ to copy and distribute the resulting executable under terms of your choice,
+ provided that you also meet, for each linked independent module, the terms
+ and conditions of the license of that module. An independent module is a
+ module which is not derived from or based on this library. If you modify
+ this library, you may extend this exception to your version of the library,
+ but you are not obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
+ for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+}
+unit svccleandirs;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, LResources, daemonapp, eventlog, dircleaner;
+
+type
+ { TCleanDirsThread }
+
+ TCleanDirsThread = Class(TThread)
+ Private
+ FConfigFile : String;
+ FLog : TEventLog;
+ FCleaner : TCleanDirs;
+ procedure DoClean(T: TDateTime);
+ procedure DoLog(Msg: String);
+ function GetNextTime(LastTime: TDateTime): TDateTime;
+ procedure SetupCleaner;
+ Public
+ Constructor Create(AConfigFile : String; ALog : TEventLog; ATerminate : TNotifyEvent);
+ Procedure Execute; override;
+ end;
+
+ { TCleanDirsDaemon }
+
+ TCleanDirsDaemon = class(TDaemon)
+ procedure CleanDirsDaemonCreate(Sender: TObject);
+ procedure CleanDirsDaemonExecute(Sender: TCustomDaemon);
+ procedure CleanDirsDaemonStart(Sender: TCustomDaemon; var OK: Boolean);
+ procedure CleanDirsDaemonStop(Sender: TCustomDaemon; var OK: Boolean);
+ private
+ { private declarations }
+ FConfigFile : String;
+ FThread : TCleanDirsThread;
+ FLog : TEventLog;
+ procedure StartLog;
+ procedure ThreadStopped(Sender: TObject);
+ public
+ { public declarations }
+ end;
+
+
+var
+ CleanDirsDaemon: TCleanDirsDaemon;
+
+implementation
+
+uses dateutils;
+
+resourcestring
+ SStartExecute = 'Start cleaning directories for schedule time: %s';
+ SEndExecute = 'End of cleaning directories for schedule time: %s. Duration: %s';
+ SErrCleaning = 'An error occurred when cleaning: %s';
+ SNextCleanTime = 'Next cleaning run: %s';
+ SRunningDailyAt = 'Running in daily mode, clean time: %s';
+ SRunningHourlyAt = 'Running in hourly mode, at minute: %d';
+ SErrNoConfigFile = 'No configuration file found !';
+
+// Include windows messages for eventlog component.
+{$ifdef mswindows}
+{$r fclel.res}
+{$endif}
+
+procedure RegisterDaemon;
+begin
+ RegisterDaemonClass(TCleanDirsDaemon)
+end;
+
+{ TCleanDirsDaemon }
+
+procedure TCleanDirsDaemon.StartLog;
+begin
+ FLog:=Self.Logger;
+ If (FConfigFile='') then
+ Flog.Error(SErrNoConfigFile);
+end;
+
+
+procedure TCleanDirsDaemon.CleanDirsDaemonCreate(Sender: TObject);
+begin
+ If Application.Hasoption('c','config') then
+ begin
+ FConfigFile:=Application.GetOptionValue('c','config');
+ end
+ else
+ begin
+ FConfigFile:=GetAppConfigFile(false,false);
+ If Not FileExists(FConfigFile) then
+ begin
+ FConfigFile:=GetAppConfigFile(True,false);
+ If Not FileExists(FConfigFile) then
+ FConfigFile:='';
+ end;
+ end;
+end;
+
+procedure TCleanDirsDaemon.CleanDirsDaemonExecute(Sender: TCustomDaemon);
+begin
+
+end;
+
+procedure TCleanDirsDaemon.ThreadStopped(Sender : TObject);
+
+begin
+ FThread:=Nil;
+end;
+
+procedure TCleanDirsDaemon.CleanDirsDaemonStart(Sender: TCustomDaemon;
+ var OK: Boolean);
+
+begin
+ StartLog;
+ { Start should return immediatly. Therefor, a thread is started if
+ one is not yet running. Usually, here one opens a TCP/IP socket
+ and starts listening }
+ OK:=(FThread=Nil) and (FConfigFile<>'');
+ If OK then
+ FThread:=TCleanDirsThread.Create(FConfigFile,FLog,@ThreadStopped);
+end;
+
+procedure TCleanDirsDaemon.CleanDirsDaemonStop(Sender: TCustomDaemon;
+ var OK: Boolean);
+
+Var
+ I : Integer;
+
+begin
+ If Assigned(FThread) then
+ begin
+ FThread.Terminate;
+ I:=0;
+ // Wait at most 5 seconds.
+ While (FThread<>Nil) and (I<50) do
+ begin
+ Sleep(100);
+ ReportStatus;
+ end;
+ // Let the thread die silently.
+ If (FThread<>Nil) then
+ FThread.OnTerminate:=Nil;
+ end;
+ OK:=FThread=Nil;
+end;
+
+{ TCleanDirsThread }
+
+constructor TCleanDirsThread.Create(AConfigFile: String; ALog: TEventLog; ATerminate : TNotifyEvent);
+begin
+ FConfigFile:=AConfigFile;
+ FLog:=Alog;
+ FreeOnTerminate:=False;
+ OnTerminate:=ATerminate;
+ Inherited Create(False);
+end;
+
+procedure TCleanDirsThread.DoLog(Msg : String);
+
+begin
+ If Assigned(FLog) then
+ FLog.Info(Msg);
+ If Terminated then
+ FCleaner.Cancel;
+end;
+
+Function TCleanDirsThread.GetNextTime (LastTime : TDateTime) : TDateTime;
+
+
+ // Number of days to add till day is in allowed days.
+ Function NextOKDay(D : TDateTime) : Integer;
+
+ Const
+ ScheduleDays : array [1..7] of TScheduleDay
+ = (sdMonday,sdTuesday,sdwednesday,sdThursday,
+ sdFriday,sdSaturday,sdSunday);
+
+ begin
+ Result:=0;
+ If FCleaner.ScheduleDays<>[] then
+ While Not (ScheduleDays[DayOfTheWeek(D+Result)] in FCleaner.ScheduleDays) do
+ Inc(Result);
+ end;
+
+Var
+ DT : TDateTime;
+ h,m,s,ms : Word;
+
+begin
+ Case FCleaner.ScheduleMode of
+ smDaily: begin
+ Result:=Date;
+ // Too late for today.
+ if (Time>FCleaner.DailyAt) then
+ Result:=Result+1;
+ Result:=Result+NextOKDay(Result)+FCleaner.DailyAt
+ end;
+ smHourly : begin
+ DT:=Now;
+ H:=NextOKDay(DT);
+ If (H<>0) then
+ Result:=Date+H+EncodeTime(0,FCleaner.HourlyAt,0,0)
+ else
+ begin // Still today
+ DecodeTime(DT,H,M,S,MS);
+ Result:=Date;
+ If (M>=FCleaner.HourlyAt) then
+ begin // Next hour
+ H:=H+1;
+ If (H=24) then
+ begin
+ H:=0; // Tomorrow, check next day OK.
+ Result:=Result+1+NextOKDay(Result+1);
+ end;
+ end;
+ DT:=EncodeTime(H,FCleaner.HourlyAt,0,0);
+ Result:=Result+DT;
+ end;
+ end;
+ end;
+ DoLog(Format(SNextCleanTime,[DateTimeToStr(Result)]));
+end;
+
+procedure TCleanDirsThread.DoClean(T : TDateTime);
+
+Var
+ S,ST : String;
+ DT : TDateTime;
+
+begin
+ try
+ S:=DateTimeToStr(T);
+ DoLog(Format(SStartExecute,[S]));
+ // FCleaner.Execute;
+ DT:=FCleaner.EndTime-FCleaner.StartTime;
+ ST:=TimeToStr(DT);
+ DoLog(Format(SEndExecute,[S,ST]));
+ except
+ On E : Exception do
+ If Assigned(FLog) then
+ FLog.Error(SErrCleaning,[E.Message]);
+ end;
+end;
+
+procedure TCleanDirsThread.SetupCleaner;
+
+begin
+ FCleaner.OnLog:=@Self.DoLog;
+ FCleaner.LoadFromFile(FConfigFile);
+ If FCleaner.ScheduleMode=smDaily then
+ DoLog(Format(SRunningDailyAt,[TimeToStr(FCleaner.DailyAt)]))
+ else
+ DoLog(Format(SRunningHourlyAt,[FCleaner.HourlyAt]));
+end;
+
+procedure TCleanDirsThread.Execute;
+
+ Function GetDelta (T : TDateTime) : Int64;
+
+ begin
+ Result:=SecondsBetween(Now,T)*1000;
+ If (Result>3000) then
+ Result:=3000;
+ end;
+
+Var
+ T : TDateTime;
+ Delta : Int64;
+
+begin
+ FCleaner:=TCleanDirs.Create(Nil);
+ try
+ SetupCleaner;
+ T:=Now;
+ Repeat
+ T:=GetNextTime(T);
+ Repeat
+ Delta:=GetDelta(T); // 3 seconds or less
+ If Not Terminated then
+ Sleep(Delta);
+ Until (Now>=T) or Terminated;
+ If Not Terminated then
+ DoClean(T);
+ Until Terminated;
+ finally
+ FreeAndNil(FCleaner);
+ end;
+end;
+
+initialization
+ {$I svccleandirs.lrs}
+
+
+ RegisterDaemon;
+end.
+
diff --git a/examples/cleandir/svcmap.lfm b/examples/cleandir/svcmap.lfm
new file mode 100644
index 0000000000..5709269099
--- /dev/null
+++ b/examples/cleandir/svcmap.lfm
@@ -0,0 +1,13 @@
+object CleanDirServiceMapper: TCleanDirServiceMapper
+ DaemonDefs = <
+ item
+ DaemonClassName = 'TCleanDirsDaemon'
+ Name = 'CleanDirs'
+ DisplayName = 'Clean directories service'
+ Options = [doAllowPause]
+ WinBindings.Dependencies = <>
+ WinBindings.StartType = stAuto
+ end>
+ left = 426
+ top = 183
+end
diff --git a/examples/cleandir/svcmap.lrs b/examples/cleandir/svcmap.lrs
new file mode 100644
index 0000000000..78b9621092
--- /dev/null
+++ b/examples/cleandir/svcmap.lrs
@@ -0,0 +1,9 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TCleanDirServiceMapper','FORMDATA',[
+ 'TPF0'#22'TCleanDirServiceMapper'#21'CleanDirServiceMapper'#10'DaemonDefs'#14
+ +#1#15'DaemonClassName'#6#16'TCleanDirsDaemon'#4'Name'#6#9'CleanDirs'#11'Disp'
+ +'layName'#6#25'Clean directories service'#7'Options'#11#12'doAllowPause'#0#24
+ +'WinBindings.Dependencies'#14#0#21'WinBindings.StartType'#7#6'stAuto'#0#0#4
+ +'left'#3#170#1#3'top'#3#183#0#0#0
+]);
diff --git a/examples/cleandir/svcmap.pp b/examples/cleandir/svcmap.pp
new file mode 100644
index 0000000000..924cca883a
--- /dev/null
+++ b/examples/cleandir/svcmap.pp
@@ -0,0 +1,63 @@
+{ Directory cleaning service - Service mapper.
+
+ Copyright (C) 2007 Michael Van Canneyt
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version with the following modification:
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent modules,and
+ to copy and distribute the resulting executable under terms of your choice,
+ provided that you also meet, for each linked independent module, the terms
+ and conditions of the license of that module. An independent module is a
+ module which is not derived from or based on this library. If you modify
+ this library, you may extend this exception to your version of the library,
+ but you are not obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
+ for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+}
+unit svcmap;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, LResources, daemonapp;
+
+type
+ TCleanDirServiceMapper = class(TDaemonMapper)
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ CleanDirServiceMapper: TCleanDirServiceMapper;
+
+implementation
+
+procedure RegisterMapper;
+begin
+ RegisterDaemonMapper(TCleanDirServiceMapper)
+end;
+
+initialization
+ {$I svcmap.lrs}
+
+
+ RegisterMapper;
+end.
+