53 lines
1.7 KiB
ObjectPascal
53 lines
1.7 KiB
ObjectPascal
// Copyright (c) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
|
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
|
uses System,
|
|
System.Resources,
|
|
System.Reflection,
|
|
System.Globalization,
|
|
System.Threading,
|
|
System.IO,
|
|
System.IO.Compression;
|
|
|
|
procedure Make(filename,resname,outputfilename: string);
|
|
begin
|
|
var fs:FileStream;
|
|
var br:BinaryReader;
|
|
var w:ResourceWriter;
|
|
try
|
|
var infile := new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
|
|
var data := new byte[infile.Length];
|
|
infile.Read(data, 0, data.Length);
|
|
infile.Close();
|
|
var ms := new MemoryStream();
|
|
var compressedStream := new GZipStream(ms, CompressionMode.Compress, true);
|
|
compressedStream.Write(data, 0, data.Length);
|
|
compressedStream.Close;
|
|
ms.Position := 0;
|
|
br := new BinaryReader(ms);
|
|
var arr := br.ReadBytes(integer(br.BaseStream.Length));
|
|
w := new ResourceWriter(outputfilename);
|
|
w.AddResource(resname, arr);
|
|
w.Generate;
|
|
Console.WriteLine('Input file size={0}byte', data.Length);
|
|
Console.WriteLine('Output file size={0}byte', arr.Length);
|
|
var c: real := data.Length;
|
|
c := c / 100;
|
|
c := 100 - arr.Length / c;
|
|
Console.WriteLine('Compression={0}%', Convert.ToInt32(c));
|
|
except
|
|
on e:Exception do Console.WriteLine(e);
|
|
end;
|
|
if fs <> nil then begin
|
|
fs.Close;
|
|
w.Close;
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
if CommandLineArgs.Length < 3 then
|
|
Console.WriteLine('use: ResXMaker filename resname outputfilename')
|
|
else begin
|
|
Console.WriteLine('ResMaker: FILE->RESX (c) DarkStar 2008 ');
|
|
Make(CommandLineArgs[0],CommandLineArgs[1],CommandLineArgs[2]);
|
|
end;
|
|
end. |