diff --git a/applications/pyramidtiff/pyramidtiff.lpi b/applications/pyramidtiff/pyramidtiff.lpi index c190747a0..f1f05ce39 100644 --- a/applications/pyramidtiff/pyramidtiff.lpi +++ b/applications/pyramidtiff/pyramidtiff.lpi @@ -31,16 +31,13 @@ - + - - - - + diff --git a/applications/pyramidtiff/pyramidtiff.lpr b/applications/pyramidtiff/pyramidtiff.lpr index ba8caf2bc..8606c1d87 100644 --- a/applications/pyramidtiff/pyramidtiff.lpr +++ b/applications/pyramidtiff/pyramidtiff.lpr @@ -1,3 +1,8 @@ +{ Author: Mattias Gaertner mattias@freepascal.org + + License: + Modified LGPL2 like FCL +} program pyramidtiff; {$mode objfpc}{$H+} @@ -6,7 +11,7 @@ uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} - Classes, SysUtils, math, LazFileUtils, CodeToolsStructs, CustApp, + Classes, SysUtils, math, LazFileUtils, AvgLvlTree, CustApp, FPimage, FPReadJPEG, FPReadPNG, FPReadBMP, FPImgCanv, FPCanvas, MTProcs, PyTiGraphics, FPReadTiff, FPTiffCmn, FPWriteTiff; @@ -14,6 +19,13 @@ const Version = '1.1'; type + { TFilenameToStringTree } + + TFilenameToStringTree = class(TStringToStringTree) + public + constructor Create; + end; + { TPyramidTiffer } TPyramidTiffer = class(TCustomApplication) @@ -22,7 +34,6 @@ type FMinSize: Word; FOutputPath: string; FQuiet: boolean; - //FSkipCheck: boolean; FTileHeight: Word; FTileWidth: Word; FVerbose: boolean; @@ -39,11 +50,11 @@ type procedure ReadConfig; function CheckIfFileIsPyramidTiled(Filename: string; out ErrorMsg: string): boolean; function CheckIfStreamIsPyramidTiled(s: TStream; out ErrorMsg: string): boolean; - function GetReaderClass(Filename: string): TFPCustomImageReaderClass; - function ConvertDir(InputDir, OutputDir: string; out ErrorMsg: string): boolean; - procedure ConvertFilesParallel(Index: PtrInt; Data: Pointer; {%H-}Item: TMultiThreadProcItem); - function ConvertFile(InputFilename, OutputFilename: string; out ErrorMsg: string): boolean; - function Convert(Img: TFPCompactImgBase; OutputFilename: string; out ErrorMsg: string): boolean; + function GetReaderClass(Filename: string): TFPCustomImageReaderClass; // worker thread + function ConvertDir(InputDir, OutputDir: string; out ErrorMsg: string): boolean; // main thread + procedure ConvertFilesParallel(Index: PtrInt; Data: Pointer; {%H-}Item: TMultiThreadProcItem); // worker thread + function ConvertFile(InputFilename, OutputFilename: string; out ErrorMsg: string): boolean; // worker thread + function Convert(Img: TFPCompactImgBase; OutputFilename: string; out ErrorMsg: string): boolean; // worker thread public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; @@ -52,7 +63,6 @@ type property TileWidth: Word read FTileWidth write FTileWidth; property TileHeight: Word read FTileHeight write FTileHeight; property MinSize: Word read FMinSize write FMinSize; - //property SkipCheck: boolean read FSkipCheck write FSkipCheck; property Verbose: boolean read FVerbose write FVerbose; property Quiet: boolean read FQuiet write FQuiet; property InputPath: string read FInputPath write FInputPath; @@ -105,6 +115,26 @@ begin Result:=l; end; +function CompareFilenameAndFilenameToStringTreeItem(Key, Data: Pointer + ): integer; +begin + Result:=CompareFilenames(String(Key),PStringToStringItem(Data)^.Name); +end; + +function CompareFilenameToStringItems(Data1, Data2: Pointer): integer; +begin + Result:=CompareFilenames(PStringToStringItem(Data1)^.Name, + PStringToStringItem(Data2)^.Name); +end; + +{ TFilenameToStringTree } + +constructor TFilenameToStringTree.Create; +begin + SetCompareFuncs(@CompareFilenameToStringItems, + @CompareFilenameAndFilenameToStringTreeItem,false); +end; + { TMyCanvas } procedure TMyCanvas.DoCopyRect(x, y: integer; canvas: TFPCustomCanvas; @@ -285,7 +315,7 @@ var ErrorMsg:=CheckOptions(ShortOpts,LongOptions,Opts,NonOpts); if ErrorMsg<>'' then begin ShowException(Exception.Create(ErrorMsg)); - Halt; + Halt(1); end; for i:=0 to NonOpts.Count-1 do if NonOpts[i]<>'' then @@ -306,13 +336,13 @@ begin // parse parameters if HasOption('h','help') then begin WriteHelp(true); - Halt; + Halt(1); end; // parse parameters if HasOption('V','version') then begin writeln(Version); - Halt; + Halt(0); end; finally LongOptions.Free; @@ -433,8 +463,8 @@ function TPyramidTiffer.ConvertDir(InputDir, OutputDir: string; out ErrorMsg: string): boolean; var FileInfo: TSearchRec; - Files: TFilenameToStringTree; - Item: PStringToStringTreeItem; + Files: TStringToStringTree; + Item: PStringToStringItem; InputFile: String; OutputFile: String; FileList: TStringList; @@ -443,7 +473,7 @@ begin ErrorMsg:=''; InputDir:=AppendPathDelim(InputDir); OutputDir:=AppendPathDelim(OutputDir); - Files:=TFilenameToStringTree.Create(false); + Files:=TStringToStringTree.Create(false); FileList:=TStringList.Create; try if FindFirstUTF8(InputDir+AllFilesMask,faAnyFile,FileInfo)=0 then begin