From 426359fa52bcb5fa1d45411d76c1ebd216b69801 Mon Sep 17 00:00:00 2001 From: marc Date: Sun, 22 Jul 2007 15:58:44 +0000 Subject: [PATCH] * Modified patch from Laurent Jacques git-svn-id: trunk@11594 - --- tools/lazres.pp | 166 +++++++++++++++++++++++++++--------------------- 1 file changed, 95 insertions(+), 71 deletions(-) diff --git a/tools/lazres.pp b/tools/lazres.pp index 8f9207bb1c..8129d62482 100644 --- a/tools/lazres.pp +++ b/tools/lazres.pp @@ -80,89 +80,113 @@ begin end; var - ResourceFilename,BinFilename,BinExt,ResourceName,ResourceType:String; + ResourceFilename,FullResourceFilename,BinFilename,BinExt,ResourceName,ResourceType:String; a:integer; ResFileStream,BinFileStream:TFileStream; ResMemStream,BinMemStream:TMemoryStream; - + FileList:TStringList; + S: String; begin if ParamCount<2 then begin writeln('Usage: ',ExtractFileName(ParamStr(0)) ,' resourcefilename filename1 [filename2 ... filenameN]'); + writeln(' ',ExtractFileName(ParamStr(0)) + ,' resourcefilename @filelist'); exit; end; - - // check that all resources exists and are not the destination file - for a:=2 to ParamCount do begin - if not FileExists(ParamStr(a)) then begin - writeln('ERROR: file not found: ',ParamStr(a)); - exit; - end; - if ExpandFileName(ParamStr(a))=ExpandFileName(ParamStr(1)) then begin - writeln('ERROR: resourcefilename = file',a); - exit; - end; - end; - - ResourceFilename:=ParamStr(1); + FileList:=TStringList.Create; try - ResFileStream:=TFileStream.Create(ResourceFilename,fmCreate); - except - writeln('ERROR: unable to create file '''+ResourceFilename+''''); - halt(1); - end; - ResMemStream:=TMemoryStream.Create; - try - for a:=2 to ParamCount do begin - BinFilename:=ParamStr(a); - write(BinFilename); - try - BinFileStream:=TFileStream.Create(BinFilename,fmOpenRead); - BinMemStream:=TMemoryStream.Create; - try - BinMemStream.CopyFrom(BinFileStream,BinFileStream.Size); - BinMemStream.Position:=0; - BinExt:=uppercase(ExtractFileExt(BinFilename)); - if (BinExt='.LFM') or (BinExt='.DFM') or (BinExt='.XFM') then begin - ResourceType:='FORMDATA'; - ConvertFormToText(BinMemStream); - ResourceName:=FindLFMClassName(BinMemStream); - if ResourceName='' then begin - writeln(' ERROR: no resourcename'); - halt(2); - end; - write(' ResourceName='''+ResourceName - +''' Type='''+ResourceType+''''); - LFMtoLRSstream(BinMemStream,ResMemStream); - end else begin - ResourceType:=copy(BinExt,2,length(BinExt)-1); - ResourceName:=ExtractFileName(BinFilename); - ResourceName:=copy(ResourceName,1 - ,length(ResourceName)-length(BinExt)); - if ResourceName='' then begin - writeln(' ERROR: no resourcename'); - halt(2); - end; - write( - ' ResourceName='''+ResourceName+''' Type='''+ResourceType+''''); - BinaryToLazarusResourceCode(BinMemStream,ResMemStream - ,ResourceName,ResourceType); - end; - finally - BinFileStream.Free; - BinMemStream.Free; - end; - except - writeln(' ERROR: unable to read file '''+BinFilename+''''); - halt(3); + if ParamStr(2)[1] = '@' then + begin + S := ParamStr(2); + Delete(S, 1, 1); + if not FileExists(S) then + begin + writeln('ERROR: file list not found: ', S); + exit; + end; + FileList.LoadFromFile(S); + end + else for a:=2 to ParamCount do FileList.Add(ParamStr(a)); + + ResourceFilename := ParamStr(1); + FullResourceFilename := ExpandFileName(ResourceFilename); + // check that all resources exists and are not the destination file + for a:=0 to FileList.Count-1 do begin + S := FileList[a]; + if not FileExists(S) + then begin + writeln('ERROR: file not found: ', S); + exit; + end; + if ExpandFileName(S) = FullResourceFilename + then begin + writeln('ERROR: resourcefilename = file', a); + exit; end; - writeln(''); end; - ResMemStream.Position:=0; - ResFileStream.CopyFrom(ResMemStream,ResMemStream.Size); - finally - ResMemStream.Free; - ResFileStream.Free; + + try + ResFileStream:=TFileStream.Create(ResourceFilename,fmCreate); + except + writeln('ERROR: unable to create file ''', ResourceFilename, ''''); + halt(1); + end; + ResMemStream:=TMemoryStream.Create; + try + for a:=0 to FileList.Count-1 do begin + BinFilename:=FileList[a]; + write(BinFilename); + try + BinFileStream:=TFileStream.Create(BinFilename,fmOpenRead); + BinMemStream:=TMemoryStream.Create; + try + BinMemStream.CopyFrom(BinFileStream,BinFileStream.Size); + BinMemStream.Position:=0; + BinExt:=uppercase(ExtractFileExt(BinFilename)); + if (BinExt='.LFM') or (BinExt='.DFM') or (BinExt='.XFM') + then begin + ResourceType:='FORMDATA'; + ConvertFormToText(BinMemStream); + ResourceName:=FindLFMClassName(BinMemStream); + if ResourceName='' then begin + writeln(' ERROR: no resourcename'); + halt(2); + end; + write(' ResourceName=''', ResourceName, ''' Type=''', ResourceType, ''''); + LFMtoLRSstream(BinMemStream,ResMemStream); + end + else begin + ResourceType:=copy(BinExt,2,length(BinExt)-1); + ResourceName:=ExtractFileName(BinFilename); + ResourceName:=copy(ResourceName,1 + ,length(ResourceName)-length(BinExt)); + if ResourceName='' then begin + writeln(' ERROR: no resourcename'); + halt(2); + end; + write(' ResourceName=''', ResourceName, ''' Type=''', ResourceType+''''); + BinaryToLazarusResourceCode(BinMemStream,ResMemStream + ,ResourceName,ResourceType); + end; + finally + BinFileStream.Free; + BinMemStream.Free; + end; + except + writeln(' ERROR: unable to read file ''', BinFilename, ''''); + halt(3); + end; + writeln(''); + end; + ResMemStream.Position:=0; + ResFileStream.CopyFrom(ResMemStream,ResMemStream.Size); + finally + ResMemStream.Free; + ResFileStream.Free; + end; + finally + FileList.Free; end; end.