program CheckRideResourceZipper;
{$mode objfpc}{$H+}
{$APPTYPE CONSOLE}
//Handy for error messages in resourcezipper
{$DEFINE CONSOLE}
uses {$IFDEF UNIX} {$IFDEF UseCThreads}
cthreads, {$ENDIF} {$ENDIF}
Classes,
Interfaces, // this includes the LCL widgetset
SysUtils,
Forms {for application support},
checkrideutil {for future work with unzipping from resources},
resourcezipper;
var
OurResourceZipper: TResourceZipper;
FMustWriteCheckRideResource: boolean;
FMustWriteCheckRideHelpResource: boolean;
FMustWriteAllResources: boolean;
FExeDirectory: string;
procedure ShowCommandLineHelp;
begin
writeln(ExtractFileName(Application.ExeName) + ' [options]');
writeln('-h or --help : help');
writeln('-o
or --outputdirectory= : output directory');
writeln('--writeresourcecheck : add zip as "poor man''s resource"');
writeln(' to the ' +
CheckRideExe + ' executable.');
writeln('--writeresourcehelp : add zip as "poor man''s resource"');
writeln(' to the ' +
CheckRideHelperExe + ' executable.');
writeln(' to the both executable.');
end;
procedure OptionsAndInit;
var
ErrorMessage: string;
begin
Application.CaseSensitiveOptions := False; //accept upper and lowercase
ErrorMessage := Application.CheckOptions('ho:',
'help outputdirectory: writeallresources writeresourcecheck writeresourcehelp');
if Length(ErrorMessage) > 0 then
begin
writeln(ErrorMessage);
ShowCommandLineHelp;
halt(1); //invalid options
end;
if (Application.HasOption('h', 'help')) or (Application.HasOption('?')) then
begin
ShowCommandLineHelp;
halt(0);
end;
FExeDirectory := '';
if Application.HasOption('o', 'outputdirectory') then
begin
//Get absolute path
//Trailed separator apparently not attached by ExpandFileName
// We write zips to output, this helps in troubleshooting.
FExeDirectory := ExpandFileName(
Trim(Application.GetOptionValue('o', 'outputdirectory')));
OurResourceZipper.ZipDirectory := FExeDirectory;
end;
if Application.HasOption('writeresourcecheck') then
begin
FMustWriteCheckRideResource := True;
end
else
begin
FMustWriteCheckRideResource := False;
end;
if Application.HasOption('writeallresources') then
begin
FMustWriteAllResources := True;
end
else
begin
FMustWriteAllResources := False;
end;
if Application.HasOption('writeresourcehelp') then
begin
FMustWriteCheckRideHelpResource := True;
end
else
begin
FMustWriteCheckRideHelpResource := False;
end;
end;
begin
OurResourceZipper := TResourceZipper.Create;
try
writeln(ExtractFileName(Application.ExeName) +
': zip CheckRide files for use into resource; optionally write resource.');
writeln('***NOTE: please update and recompile CheckRideResourceZipper.lpr');
writeln(' whenever you need files added to the resource.');
//Setup
OptionsAndInit; //Check what users asked us to do.
//Create zip(s), append to executable(s):
if (FMustWriteCheckRideResource or FMustWriteAllResources) then
begin
OurResourceZipper.Executable := FExeDirectory + CheckRideExe;
OurResourceZipper.WriteCheckRideResource;
end;
if (FMustWriteCheckRideHelpResource or FMustWriteAllResources) then
begin
OurResourceZipper.Executable := FExeDirectory + CheckRideHelperExe;
OurResourceZipper.WriteCheckRideHelperResource;
end;
finally
OurResourceZipper.Free;
end;
end.