mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 22:19:18 +02:00
lazres: add an ability to generate an .rc script if output file has .rc extension
git-svn-id: trunk@42939 -
This commit is contained in:
parent
6954ac1f4b
commit
1a5fff7c4d
140
tools/lazres.pp
140
tools/lazres.pp
@ -58,13 +58,94 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure OutputLRSFile(BinFilename, ResourceName: String; ResMemStream: TMemoryStream);
|
||||||
var
|
var
|
||||||
ResourceFilename,FullResourceFilename,BinFilename,BinExt,ResourceName,ResourceType:String;
|
BinExt,ResourceType: String;
|
||||||
a:integer;
|
BinFileStream: TFileStream;
|
||||||
ResFileStream,BinFileStream:TFileStream;
|
BinMemStream: TMemoryStream;
|
||||||
ResMemStream,BinMemStream:TMemoryStream;
|
begin
|
||||||
|
dbgout(BinFilename);
|
||||||
|
try
|
||||||
|
BinFileStream:=TFileStream.Create(UTF8ToSys(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
|
||||||
|
debugln(' ERROR: no resourcename');
|
||||||
|
halt(2);
|
||||||
|
end;
|
||||||
|
dbgout(' ResourceName=''', ResourceName, ''' Type=''', ResourceType, '''');
|
||||||
|
LFMtoLRSstream(BinMemStream,ResMemStream);
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
ResourceType := trim(copy(BinExt,2,length(BinExt)-1));
|
||||||
|
if ResourceName='' then begin
|
||||||
|
ResourceName := ExtractFileName(BinFilename);
|
||||||
|
ResourceName := trim(copy(ResourceName,1
|
||||||
|
,length(ResourceName)-length(BinExt)));
|
||||||
|
end;
|
||||||
|
if ResourceName='' then begin
|
||||||
|
debugln(' ERROR: no resourcename');
|
||||||
|
halt(2);
|
||||||
|
end;
|
||||||
|
dbgout(' ResourceName=''', ResourceName, ''' Type=''', ResourceType+'''');
|
||||||
|
BinaryToLazarusResourceCode(BinMemStream,ResMemStream
|
||||||
|
,ResourceName,ResourceType);
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
BinFileStream.Free;
|
||||||
|
BinMemStream.Free;
|
||||||
|
end;
|
||||||
|
except
|
||||||
|
debugln(' ERROR: unable to read file ''', BinFilename, '''');
|
||||||
|
halt(3);
|
||||||
|
end;
|
||||||
|
debugln('');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure OutputRCFile(FileName, ResourceName: String; ResMemStream: TMemoryStream);
|
||||||
|
|
||||||
|
procedure WriteResource(ResourceType: String);
|
||||||
|
var
|
||||||
|
S: String;
|
||||||
|
begin
|
||||||
|
S := Format('%s %s "%s"'#$D#$A, [ResourceName, ResourceType, FileName]);
|
||||||
|
ResMemStream.Write(PChar(@S[1])^, Length(S));
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
FileExt: String;
|
||||||
|
begin
|
||||||
|
FileExt := UpperCase(ExtractFileExt(FileName));
|
||||||
|
if ResourceName = '' then
|
||||||
|
begin
|
||||||
|
ResourceName := ExtractFileName(FileName);
|
||||||
|
ResourceName := Trim(Copy(ResourceName, 1, Length(ResourceName) - Length(FileExt)));
|
||||||
|
end;
|
||||||
|
case FileExt of
|
||||||
|
'.BMP': WriteResource('BITMAP');
|
||||||
|
'.CUR': WriteResource('CURSOR');
|
||||||
|
'.ICO': WriteResource('ICON');
|
||||||
|
else
|
||||||
|
WriteResource('RCDATA');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
a: Integer;
|
||||||
|
ResourceFilename,FullResourceFilename:String;
|
||||||
|
ResFileStream:TFileStream;
|
||||||
|
ResMemStream:TMemoryStream;
|
||||||
FileList:TStringList;
|
FileList:TStringList;
|
||||||
S: String;
|
S: String;
|
||||||
|
IsRCFile: Boolean;
|
||||||
begin
|
begin
|
||||||
if ParamCount<2 then begin
|
if ParamCount<2 then begin
|
||||||
debugln('Usage: ',ExtractFileName(ParamStrUTF8(0))
|
debugln('Usage: ',ExtractFileName(ParamStrUTF8(0))
|
||||||
@ -125,55 +206,14 @@ begin
|
|||||||
debugln('ERROR: unable to create file ''', ResourceFilename, '''');
|
debugln('ERROR: unable to create file ''', ResourceFilename, '''');
|
||||||
halt(1);
|
halt(1);
|
||||||
end;
|
end;
|
||||||
|
IsRCFile := LowerCase(ExtractFileExt(ResourceFilename)) = '.rc';
|
||||||
ResMemStream:=TMemoryStream.Create;
|
ResMemStream:=TMemoryStream.Create;
|
||||||
try
|
try
|
||||||
for a:=0 to FileList.Count-1 do begin
|
for a:=0 to FileList.Count-1 do begin
|
||||||
BinFilename:=FileList.Names[a];
|
if IsRCFile then
|
||||||
dbgout(BinFilename);
|
OutputRCFile(FileList.Names[a], trim(FileList.ValueFromIndex[a]), ResMemStream)
|
||||||
try
|
else
|
||||||
BinFileStream:=TFileStream.Create(UTF8ToSys(BinFilename),fmOpenRead);
|
OutputLRSFile(FileList.Names[a], trim(FileList.ValueFromIndex[a]), ResMemStream);
|
||||||
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
|
|
||||||
debugln(' ERROR: no resourcename');
|
|
||||||
halt(2);
|
|
||||||
end;
|
|
||||||
dbgout(' ResourceName=''', ResourceName, ''' Type=''', ResourceType, '''');
|
|
||||||
LFMtoLRSstream(BinMemStream,ResMemStream);
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
ResourceType := trim(copy(BinExt,2,length(BinExt)-1));
|
|
||||||
ResourceName := trim(FileList.ValueFromIndex[a]);
|
|
||||||
if ResourceName='' then begin
|
|
||||||
ResourceName := ExtractFileName(BinFilename);
|
|
||||||
ResourceName := trim(copy(ResourceName,1
|
|
||||||
,length(ResourceName)-length(BinExt)));
|
|
||||||
end;
|
|
||||||
if ResourceName='' then begin
|
|
||||||
debugln(' ERROR: no resourcename');
|
|
||||||
halt(2);
|
|
||||||
end;
|
|
||||||
dbgout(' ResourceName=''', ResourceName, ''' Type=''', ResourceType+'''');
|
|
||||||
BinaryToLazarusResourceCode(BinMemStream,ResMemStream
|
|
||||||
,ResourceName,ResourceType);
|
|
||||||
end;
|
|
||||||
finally
|
|
||||||
BinFileStream.Free;
|
|
||||||
BinMemStream.Free;
|
|
||||||
end;
|
|
||||||
except
|
|
||||||
debugln(' ERROR: unable to read file ''', BinFilename, '''');
|
|
||||||
halt(3);
|
|
||||||
end;
|
|
||||||
debugln('');
|
|
||||||
end;
|
end;
|
||||||
ResMemStream.Position:=0;
|
ResMemStream.Position:=0;
|
||||||
ResFileStream.CopyFrom(ResMemStream,ResMemStream.Size);
|
ResFileStream.CopyFrom(ResMemStream,ResMemStream.Size);
|
||||||
|
Loading…
Reference in New Issue
Block a user