update to 0.7.9
This commit is contained in:
165
io/IOArchive.pas
165
io/IOArchive.pas
@@ -1,165 +0,0 @@
|
||||
unit IOArchive;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Threading, Utils, SynCommons, SynCrypto, ParseClass, ParseExpr,
|
||||
IOUtils,
|
||||
WinAPI.Windows, WinAPI.ShlObj,
|
||||
System.SysUtils, System.Classes, System.SyncObjs, System.Math, System.Types,
|
||||
System.StrUtils, System.RTLConsts, System.TimeSpan, System.Diagnostics,
|
||||
System.IOUtils, System.Generics.Defaults, System.Generics.Collections;
|
||||
|
||||
type
|
||||
PEncodeOptions = ^TEncodeOptions;
|
||||
|
||||
TEncodeOptions = record
|
||||
|
||||
end;
|
||||
|
||||
PDecodeOptions = ^TDecodeOptions;
|
||||
|
||||
TDecodeOptions = record
|
||||
|
||||
end;
|
||||
|
||||
procedure PrintHelp;
|
||||
procedure Parse(ParamArg: TArray<string>; out Options: TEncodeOptions);
|
||||
overload;
|
||||
procedure Parse(ParamArg: TArray<string>; out Options: TDecodeOptions);
|
||||
overload;
|
||||
procedure Encode(Input: TArray<string>; Output: TStream;
|
||||
Options: TEncodeOptions);
|
||||
procedure Decode(Input: TStream; Output: String; Options: TDecodeOptions);
|
||||
|
||||
implementation
|
||||
|
||||
procedure PrintHelp;
|
||||
var
|
||||
I, J: Integer;
|
||||
S: string;
|
||||
begin
|
||||
WriteLn(ErrOutput, 'archive - convert a group of files into an archive');
|
||||
WriteLn(ErrOutput, '');
|
||||
WriteLn(ErrOutput, 'Usage:');
|
||||
WriteLn(ErrOutput, ' xtool archive files1 files2... archive');
|
||||
WriteLn(ErrOutput, '');
|
||||
WriteLn(ErrOutput, '');
|
||||
end;
|
||||
|
||||
procedure Parse(ParamArg: TArray<string>; out Options: TEncodeOptions);
|
||||
var
|
||||
ArgParse: TArgParser;
|
||||
ExpParse: TExpressionParser;
|
||||
S: String;
|
||||
begin
|
||||
ArgParse := TArgParser.Create(ParamArg);
|
||||
ExpParse := TExpressionParser.Create;
|
||||
try
|
||||
S := '';
|
||||
finally
|
||||
ArgParse.Free;
|
||||
ExpParse.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Parse(ParamArg: TArray<string>; out Options: TDecodeOptions);
|
||||
var
|
||||
ArgParse: TArgParser;
|
||||
ExpParse: TExpressionParser;
|
||||
S: String;
|
||||
begin
|
||||
ArgParse := TArgParser.Create(ParamArg);
|
||||
ExpParse := TExpressionParser.Create;
|
||||
try
|
||||
S := '';
|
||||
finally
|
||||
ArgParse.Free;
|
||||
ExpParse.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Encode(Input: TArray<string>; Output: TStream;
|
||||
Options: TEncodeOptions);
|
||||
var
|
||||
I, J: Integer;
|
||||
K: Word;
|
||||
I64: Int64;
|
||||
BaseDir: String;
|
||||
LList: TArray<String>;
|
||||
LBytes: TBytes;
|
||||
FStream: TFileStream;
|
||||
begin
|
||||
I := XTOOL_ARCH;
|
||||
Output.WriteBuffer(I, I.Size);
|
||||
for I := Low(Input) to High(Input) do
|
||||
begin
|
||||
if FileExists(Input[I]) then
|
||||
BaseDir := ExtractFilePath(TPath.GetFullPath(Input[I]))
|
||||
else if DirectoryExists(Input[I]) then
|
||||
BaseDir := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input[I]))
|
||||
else
|
||||
BaseDir := ExtractFilePath(TPath.GetFullPath(Input[I]));
|
||||
LList := GetFileList([Input[I]], True);
|
||||
if Length(LList) > 0 then
|
||||
begin
|
||||
J := Length(LList);
|
||||
Output.WriteBuffer(J, J.Size);
|
||||
for J := Low(LList) to High(LList) do
|
||||
begin
|
||||
LBytes := BytesOf(ReplaceText(LList[I], BaseDir, ''));
|
||||
K := Length(LBytes);
|
||||
Output.WriteBuffer(K, K.Size);
|
||||
Output.WriteBuffer(LBytes[0], K);
|
||||
I64 := FileSize(LList[I]);
|
||||
Output.WriteBuffer(I64, I64.Size);
|
||||
FStream := TFileStream.Create(LList[I], fmShareDenyNone);
|
||||
try
|
||||
CopyStreamEx(FStream, Output, I64);
|
||||
finally
|
||||
FStream.Free;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
J := J.MinValue;
|
||||
Output.WriteBuffer(J, J.Size);
|
||||
end;
|
||||
|
||||
procedure Decode(Input: TStream; Output: String; Options: TDecodeOptions);
|
||||
var
|
||||
I, J: Integer;
|
||||
K: Word;
|
||||
I64: Int64;
|
||||
S: String;
|
||||
BaseDir: String;
|
||||
LBytes: TBytes;
|
||||
FStream: TFileStream;
|
||||
begin
|
||||
BaseDir := IncludeTrailingPathDelimiter(Output);
|
||||
Input.ReadBuffer(I, I.Size);
|
||||
while I >= 0 do
|
||||
begin
|
||||
for J := 1 to I do
|
||||
begin
|
||||
Input.ReadBuffer(K, K.Size);
|
||||
if Length(LBytes) < K then
|
||||
SetLength(LBytes, K);
|
||||
FillChar(LBytes[0], Length(LBytes), 0);
|
||||
Input.ReadBuffer(LBytes[0], K);
|
||||
S := BaseDir + StringOf(LBytes);
|
||||
if not DirectoryExists(ExtractFilePath(S)) then
|
||||
ForceDirectories(ExtractFilePath(S));
|
||||
Input.ReadBuffer(I64, I64.Size);
|
||||
FStream := TFileStream.Create(S, fmCreate);
|
||||
try
|
||||
CopyStreamEx(Input, FStream, I64);
|
||||
finally
|
||||
FStream.Free;
|
||||
end;
|
||||
end;
|
||||
Input.ReadBuffer(I, I.Size);
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
@@ -88,7 +88,7 @@ var
|
||||
LBytes: TBytes;
|
||||
LFilename: String;
|
||||
BaseDir1, BaseDir2: String;
|
||||
SS1, SS2: TSharedMemoryStream;
|
||||
SS1, SS2: TFileStreamEx;
|
||||
begin
|
||||
if FileExists(Input2) then
|
||||
BaseDir1 := ExtractFilePath(TPath.GetFullPath(Input2))
|
||||
@@ -111,10 +111,7 @@ begin
|
||||
end;
|
||||
SetLength(LBytes, I);
|
||||
Input1.ReadBuffer(LBytes[0], I);
|
||||
SS1 := TSharedMemoryStream.Create
|
||||
(LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
|
||||
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF2)),
|
||||
BaseDir2 + StringOf(LBytes));
|
||||
SS1 := TFileStreamEx.Create(BaseDir2 + StringOf(LBytes));
|
||||
try
|
||||
Input1.ReadBuffer(I, I.Size);
|
||||
for J := 0 to I - 1 do
|
||||
@@ -123,12 +120,10 @@ begin
|
||||
LFilename := BaseDir1 + LEntry.Filename;
|
||||
if FileExists(LFilename) then
|
||||
begin
|
||||
SS2 := TSharedMemoryStream.Create
|
||||
(LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
|
||||
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF2)), LFilename);
|
||||
SS2 := TFileStreamEx.Create(LFilename);
|
||||
try
|
||||
Move(SS2.Memory^, (PByte(SS1.Memory) + LEntry.Position)^,
|
||||
Min(SS2.Size, LEntry.Size));
|
||||
SS1.Position := LEntry.Position;
|
||||
SS2.CopyTo(SS1, Min(SS2.Size, LEntry.Size));
|
||||
finally
|
||||
SS2.Free;
|
||||
end;
|
||||
|
@@ -105,7 +105,7 @@ var
|
||||
PEntry: PEntryStruct1;
|
||||
LBytes: TBytes;
|
||||
FStream: TFileStream;
|
||||
SStream: TSharedMemoryStream;
|
||||
SStream: TFileStreamEx;
|
||||
OStream, MStream: TMemoryStream;
|
||||
DataStore: TDataStore1;
|
||||
Tasks: TArray<TTask>;
|
||||
@@ -305,16 +305,14 @@ begin
|
||||
end;
|
||||
if Found2 then
|
||||
begin
|
||||
SStream := TSharedMemoryStream.Create
|
||||
(LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
|
||||
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF2)), LList[I]);
|
||||
SStream := TFileStreamEx.Create(LList[I]);
|
||||
try
|
||||
for J := PInteger(PByte(MStream.Memory) + CountPos)^ - 1 downto 0 do
|
||||
begin
|
||||
PEntry := PEntryStruct1(PByte(MStream.Memory) + CountPos +
|
||||
Integer.Size) + J;
|
||||
FillChar((PByte(SStream.Memory) + PEntry.Position)^,
|
||||
PEntry.Size, 0);
|
||||
SStream.Position := PEntry.Position;
|
||||
SStream.Fill(0, PEntry.Size);
|
||||
end;
|
||||
finally
|
||||
SStream.Free;
|
||||
|
@@ -64,7 +64,7 @@ begin
|
||||
WriteLn(ErrOutput, '');
|
||||
WriteLn(ErrOutput, '');
|
||||
WriteLn(ErrOutput, 'Parameters:');
|
||||
WriteLn(ErrOutput, ' -c# - chunk size [16mb]');
|
||||
WriteLn(ErrOutput, ' -c# - chunk size [64mb]');
|
||||
WriteLn(ErrOutput, ' -t# - number of working threads [50p]');
|
||||
WriteLn(ErrOutput, '');
|
||||
end;
|
||||
@@ -79,7 +79,7 @@ begin
|
||||
ArgParse := TArgParser.Create(ParamArg);
|
||||
ExpParse := TExpressionParser.Create;
|
||||
try
|
||||
S := ArgParse.AsString('-c', 0, '16mb');
|
||||
S := ArgParse.AsString('-c', 0, '64mb');
|
||||
S := ReplaceText(S, 'KB', '* 1024^1');
|
||||
S := ReplaceText(S, 'MB', '* 1024^2');
|
||||
S := ReplaceText(S, 'GB', '* 1024^3');
|
||||
@@ -191,7 +191,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
threadvar TFS: TFileStream;
|
||||
threadvar TFS: TFileStreamEx;
|
||||
|
||||
procedure Callback(const Buffer: Pointer; Size: Integer);
|
||||
begin
|
||||
@@ -200,7 +200,7 @@ end;
|
||||
|
||||
procedure ExecThread(X, Ctx, WorkDir, State: IntPtr);
|
||||
var
|
||||
SS: TSharedMemoryStream;
|
||||
SS: TFileStreamEx;
|
||||
Res: Boolean;
|
||||
begin
|
||||
Res := False;
|
||||
@@ -212,22 +212,18 @@ begin
|
||||
Res := Utils.Exec(Exec, Param, PString(WorkDir)^);
|
||||
STDIN_MODE:
|
||||
begin
|
||||
SS := TSharedMemoryStream.Create
|
||||
(LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
|
||||
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF2)),
|
||||
IncludeTrailingPathDelimiter(PString(WorkDir)^) + InFile);
|
||||
SS := TFileStreamEx.Create
|
||||
(IncludeTrailingPathDelimiter(PString(WorkDir)^) + InFile);
|
||||
try
|
||||
Res := ExecStdin(Exec, Param, PString(WorkDir)^,
|
||||
SS.Memory, SS.Size);
|
||||
Res := ExecStdin(Exec, Param, PString(WorkDir)^, SS);
|
||||
finally
|
||||
SS.Free;
|
||||
end;
|
||||
end;
|
||||
STDOUT_MODE:
|
||||
begin
|
||||
TFS := TFileStream.Create
|
||||
(IncludeTrailingPathDelimiter(PString(WorkDir)^) + OutFile,
|
||||
fmCreate);
|
||||
TFS := TFileStreamEx.Create
|
||||
(IncludeTrailingPathDelimiter(PString(WorkDir)^) + OutFile);
|
||||
try
|
||||
Res := ExecStdout(Exec, Param, PString(WorkDir)^, Callback);
|
||||
finally
|
||||
@@ -236,16 +232,12 @@ begin
|
||||
end;
|
||||
STDIO_MODE:
|
||||
begin
|
||||
SS := TSharedMemoryStream.Create
|
||||
(LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
|
||||
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF2)),
|
||||
IncludeTrailingPathDelimiter(PString(WorkDir)^) + InFile);
|
||||
TFS := TFileStream.Create
|
||||
(IncludeTrailingPathDelimiter(PString(WorkDir)^) + OutFile,
|
||||
fmCreate);
|
||||
SS := TFileStreamEx.Create
|
||||
(IncludeTrailingPathDelimiter(PString(WorkDir)^) + InFile);
|
||||
TFS := TFileStreamEx.Create
|
||||
(IncludeTrailingPathDelimiter(PString(WorkDir)^) + OutFile);
|
||||
try
|
||||
Res := ExecStdio(Exec, Param, PString(WorkDir)^, SS.Memory,
|
||||
SS.Size, Callback);
|
||||
Res := ExecStdio(Exec, Param, PString(WorkDir)^, SS, Callback);
|
||||
finally
|
||||
SS.Free;
|
||||
TFS.Free;
|
||||
@@ -269,8 +261,8 @@ var
|
||||
B: Byte;
|
||||
S: String;
|
||||
First, Done: Boolean;
|
||||
FStream: TFileStream;
|
||||
SStream: TSharedMemoryStream;
|
||||
FStream: TFileStreamEx;
|
||||
SStream: TFileStreamEx;
|
||||
LCtx: TCtx;
|
||||
WorkDir: TArray<String>;
|
||||
Tasks: TArray<TTask>;
|
||||
@@ -282,8 +274,8 @@ var
|
||||
DeleteFile(IncludeTrailingPathDelimiter(WorkDir[X]) + LCtx.OutFile);
|
||||
if not Done then
|
||||
begin
|
||||
FStream := TFileStream.Create(IncludeTrailingPathDelimiter(WorkDir[X]) +
|
||||
LCtx.InFile, fmCreate);
|
||||
FStream := TFileStreamEx.Create(IncludeTrailingPathDelimiter(WorkDir[X]) +
|
||||
LCtx.InFile);
|
||||
try
|
||||
Done := CopyStream(Input, FStream, Options.ChunkSize) = 0;
|
||||
finally
|
||||
@@ -339,9 +331,7 @@ begin
|
||||
S := IncludeTrailingPathDelimiter(WorkDir[I]) + LCtx.InFile;
|
||||
B := 1;
|
||||
end;
|
||||
SStream := TSharedMemoryStream.Create
|
||||
(LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
|
||||
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF2)), S);
|
||||
SStream := TFileStreamEx.Create(S);
|
||||
try
|
||||
Output.WriteBuffer(B, B.Size);
|
||||
I64 := SStream.Size;
|
||||
@@ -374,8 +364,8 @@ var
|
||||
I: Integer;
|
||||
S: String;
|
||||
First, Done: Boolean;
|
||||
FStream: TFileStream;
|
||||
SStream: TSharedMemoryStream;
|
||||
FStream: TFileStreamEx;
|
||||
SStream: TFileStreamEx;
|
||||
LCtx: TCtx;
|
||||
WorkDir: TArray<String>;
|
||||
Tasks: TArray<TTask>;
|
||||
@@ -395,8 +385,8 @@ var
|
||||
Input.ReadBuffer(I64, I64.Size);
|
||||
if I64 >= 0 then
|
||||
begin
|
||||
FStream := TFileStream.Create(IncludeTrailingPathDelimiter(WorkDir[X]) +
|
||||
LCtx.InFile, fmCreate);
|
||||
FStream := TFileStreamEx.Create
|
||||
(IncludeTrailingPathDelimiter(WorkDir[X]) + LCtx.InFile);
|
||||
try
|
||||
if B = 0 then
|
||||
CopyStreamEx(Input, FStream, I64)
|
||||
@@ -453,9 +443,7 @@ begin
|
||||
S := IncludeTrailingPathDelimiter(WorkDir[I]) + LCtx.OutFile
|
||||
else
|
||||
raise Exception.CreateRes(@SWriteError);
|
||||
SStream := TSharedMemoryStream.Create
|
||||
(LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
|
||||
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF2)), S);
|
||||
SStream := TFileStreamEx.Create(S);
|
||||
try
|
||||
CopyStreamEx(SStream, Output, SStream.Size);
|
||||
finally
|
||||
|
@@ -105,7 +105,6 @@ var
|
||||
PEntry: PEntryStruct1;
|
||||
LBytes: TBytes;
|
||||
FStream: TFileStream;
|
||||
SStream: TSharedMemoryStream;
|
||||
OStream, MStream: TMemoryStream;
|
||||
DataStore: TDataStore1;
|
||||
Tasks: TArray<TTask>;
|
||||
|
@@ -122,7 +122,7 @@ var
|
||||
LBytes: TBytes;
|
||||
LEntry: TEntryStruct2;
|
||||
FStream: TFileStream;
|
||||
SStream1, SStream2: TSharedMemoryStream;
|
||||
//SStream1, SStream2: TSharedMemoryStream;
|
||||
Tasks: TArray<TTask>;
|
||||
CS: TCriticalSection;
|
||||
TempDir: String;
|
||||
@@ -192,7 +192,7 @@ begin
|
||||
end
|
||||
else
|
||||
begin
|
||||
SStream1 := TSharedMemoryStream.Create
|
||||
{ SStream1 := TSharedMemoryStream.Create
|
||||
(LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
|
||||
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF2)), LFilename);
|
||||
SStream2 := TSharedMemoryStream.Create
|
||||
@@ -205,7 +205,7 @@ begin
|
||||
finally
|
||||
SStream1.Free;
|
||||
SStream2.Free;
|
||||
end;
|
||||
end; }
|
||||
if not B then
|
||||
if InRange(FileSize(BaseDir2 + LList2[I]), Options.MinSize,
|
||||
Options.MaxSize) then
|
||||
@@ -243,7 +243,7 @@ begin
|
||||
Y, Z: Integer;
|
||||
S1, S2: String;
|
||||
A: Boolean;
|
||||
SS0, SS1, SS2: TSharedMemoryStream;
|
||||
//SS0, SS1, SS2: TSharedMemoryStream;
|
||||
Res: NativeUInt;
|
||||
begin
|
||||
Z := Length(LList2);
|
||||
@@ -256,7 +256,7 @@ begin
|
||||
S2 := Input1
|
||||
else
|
||||
S2 := BaseDir1 + LList2[Y];
|
||||
SS0 := TSharedMemoryStream.Create
|
||||
{ SS0 := TSharedMemoryStream.Create
|
||||
(LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
|
||||
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF2)), S1);
|
||||
SS1 := TSharedMemoryStream.Create
|
||||
@@ -276,7 +276,7 @@ begin
|
||||
SS0.Free;
|
||||
SS1.Free;
|
||||
SS2.Free;
|
||||
end;
|
||||
end; }
|
||||
if not A then
|
||||
DeleteFile(S1);
|
||||
CS.Acquire;
|
||||
@@ -351,7 +351,7 @@ var
|
||||
BaseDir: String;
|
||||
LEntry: TEntryStruct2;
|
||||
FStream: TFileStream;
|
||||
SStream0, SStream1, SStream2: TSharedMemoryStream;
|
||||
//SStream0, SStream1, SStream2: TSharedMemoryStream;
|
||||
Res: NativeUInt;
|
||||
begin
|
||||
if FileExists(Output) then
|
||||
@@ -363,7 +363,7 @@ begin
|
||||
S1 := IncludeTrailingPathDelimiter(GetCurrentDir) +
|
||||
LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
|
||||
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF3));
|
||||
SStream0 := TSharedMemoryStream.Create
|
||||
{ SStream0 := TSharedMemoryStream.Create
|
||||
(LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
|
||||
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF2)), S1);
|
||||
try
|
||||
@@ -425,7 +425,7 @@ begin
|
||||
SStream0.Free;
|
||||
if FileExists(S1) then
|
||||
TFile.Delete(S1);
|
||||
end;
|
||||
end; }
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@@ -108,7 +108,7 @@ var
|
||||
PEntry: PEntryStruct1;
|
||||
LBytes: TBytes;
|
||||
FStream: TFileStream;
|
||||
SStream1, SStream2: TSharedMemoryStream;
|
||||
SStream1, SStream2: TFileStreamEx;
|
||||
OStream, MStream: TMemoryStream;
|
||||
DataStore: TDataStore1;
|
||||
Tasks: TArray<TTask>;
|
||||
@@ -311,9 +311,7 @@ begin
|
||||
end;
|
||||
if Found2 then
|
||||
begin
|
||||
SStream1 := TSharedMemoryStream.Create
|
||||
(LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
|
||||
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF2)), LList[I]);
|
||||
SStream1 := TFileStreamEx.Create(LList[I]);
|
||||
try
|
||||
for J := PInteger(PByte(MStream.Memory) + CountPos)^ - 1 downto 0 do
|
||||
begin
|
||||
@@ -325,14 +323,10 @@ begin
|
||||
LFilename := BaseDir1 + PEntry^.Filename;
|
||||
if FileExists(LFilename) then
|
||||
begin
|
||||
SStream2 := TSharedMemoryStream.Create
|
||||
(LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
|
||||
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF2)),
|
||||
LFilename);
|
||||
SStream2 := TFileStreamEx.Create(LFilename);
|
||||
try
|
||||
Move(SStream2.Memory^,
|
||||
(PByte(SStream1.Memory) + PEntry.Position)^,
|
||||
Min(SStream1.Size, SStream2.Size));
|
||||
SStream1.Position := PEntry.Position;
|
||||
SStream2.CopyTo(SStream1, Min(SStream1.Size, SStream2.Size));
|
||||
finally
|
||||
SStream2.Free;
|
||||
end;
|
||||
|
@@ -9,9 +9,7 @@ uses
|
||||
|
||||
const
|
||||
XTOOL_IODEC = $314C5458;
|
||||
XTOOL_PATCH = $324C5458;
|
||||
XTOOL_ARCH = $334C5458;
|
||||
XTOOL_EXEC = $344C5458;
|
||||
XTOOL_EXEC = $324C5458;
|
||||
XTOOL_MAPSUF1 = '-tmp';
|
||||
XTOOL_MAPSUF2 = '_mapped.io';
|
||||
XTOOL_MAPSUF3 = '.tmp';
|
||||
|
Reference in New Issue
Block a user