|
@@ -56,16 +56,6 @@ begin
|
|
InternalError(Format('Cannot call "%s" function during Uninstall', [C]));
|
|
InternalError(Format('Cannot call "%s" function during Uninstall', [C]));
|
|
end;
|
|
end;
|
|
|
|
|
|
-function StackGetAnsiString(Stack: TPSStack; ItemNo: LongInt): AnsiString;
|
|
|
|
-begin
|
|
|
|
- Result := Stack.GetAnsiString(ItemNo);
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
-procedure StackSetAnsiString(Stack: TPSStack; ItemNo: LongInt; const Data: AnsiString);
|
|
|
|
-begin
|
|
|
|
- Stack.SetAnsiString(ItemNo, Data);
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
function GetMainForm: TMainForm;
|
|
function GetMainForm: TMainForm;
|
|
begin
|
|
begin
|
|
Result := MainForm;
|
|
Result := MainForm;
|
|
@@ -129,25 +119,26 @@ end;
|
|
type
|
|
type
|
|
TPSStackHelper = class helper for TPSStack
|
|
TPSStackHelper = class helper for TPSStack
|
|
private
|
|
private
|
|
- function GetArray(const ItemNo: LongInt; out N: Integer): TPSVariantIFC;
|
|
|
|
- function SetArray(const ItemNo: LongInt; const N: Integer): TPSVariantIFC; overload;
|
|
|
|
|
|
+ function GetArray(const ItemNo: Longint; out N: Integer): TPSVariantIFC;
|
|
|
|
+ function SetArray(const ItemNo: Longint; const N: Integer): TPSVariantIFC; overload;
|
|
public
|
|
public
|
|
type
|
|
type
|
|
TArrayOfInteger = array of Integer;
|
|
TArrayOfInteger = array of Integer;
|
|
TArrayOfString = array of String;
|
|
TArrayOfString = array of String;
|
|
function GetIntArray(const ItemNo: Longint): TArrayOfInteger;
|
|
function GetIntArray(const ItemNo: Longint): TArrayOfInteger;
|
|
|
|
+ function GetProc(const ItemNo: Longint; const Exec: TPSExec): TMethod;
|
|
function GetStringArray(const ItemNo: Longint): TArrayOfString;
|
|
function GetStringArray(const ItemNo: Longint): TArrayOfString;
|
|
- procedure SetArray(const ItemNo: LongInt; const Data: TArray<String>); overload;
|
|
|
|
|
|
+ procedure SetArray(const ItemNo: Longint; const Data: TArray<String>); overload;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TPSStackHelper.GetArray(const ItemNo: LongInt;
|
|
|
|
|
|
+function TPSStackHelper.GetArray(const ItemNo: Longint;
|
|
out N: Integer): TPSVariantIFC;
|
|
out N: Integer): TPSVariantIFC;
|
|
begin
|
|
begin
|
|
Result := NewTPSVariantIFC(Items[ItemNo], True);
|
|
Result := NewTPSVariantIFC(Items[ItemNo], True);
|
|
N := PSDynArrayGetLength(Pointer(Result.Dta^), Result.aType);
|
|
N := PSDynArrayGetLength(Pointer(Result.Dta^), Result.aType);
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TPSStackHelper.SetArray(const ItemNo: LongInt;
|
|
|
|
|
|
+function TPSStackHelper.SetArray(const ItemNo: Longint;
|
|
const N: Integer): TPSVariantIFC;
|
|
const N: Integer): TPSVariantIFC;
|
|
begin
|
|
begin
|
|
Result := NewTPSVariantIFC(Items[ItemNo], True);
|
|
Result := NewTPSVariantIFC(Items[ItemNo], True);
|
|
@@ -163,6 +154,13 @@ begin
|
|
Result[I] := VNGetInt(PSGetArrayField(Arr, I));
|
|
Result[I] := VNGetInt(PSGetArrayField(Arr, I));
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function TPSStackHelper.GetProc(const ItemNo: Longint; const Exec: TPSExec): TMethod;
|
|
|
|
+begin
|
|
|
|
+ var P := PPSVariantProcPtr(Items[ItemNo]);
|
|
|
|
+ { ProcNo 0 means nil was passed by the script and GetProcAsMethod will then return a (nil, nil) TMethod }
|
|
|
|
+ Result := Exec.GetProcAsMethod(P.ProcNo);
|
|
|
|
+end;
|
|
|
|
+
|
|
function TPSStackHelper.GetStringArray(const ItemNo: Longint): TArrayOfString;
|
|
function TPSStackHelper.GetStringArray(const ItemNo: Longint): TArrayOfString;
|
|
begin
|
|
begin
|
|
var N: Integer;
|
|
var N: Integer;
|
|
@@ -172,7 +170,7 @@ begin
|
|
Result[I] := VNGetString(PSGetArrayField(Arr, I));
|
|
Result[I] := VNGetString(PSGetArrayField(Arr, I));
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TPSStackHelper.SetArray(const ItemNo: LongInt; const Data: TArray<String>);
|
|
|
|
|
|
+procedure TPSStackHelper.SetArray(const ItemNo: Longint; const Data: TArray<String>);
|
|
begin
|
|
begin
|
|
var N := System.Length(Data);
|
|
var N := System.Length(Data);
|
|
var Arr := SetArray(ItemNo, N);
|
|
var Arr := SetArray(ItemNo, N);
|
|
@@ -291,7 +289,7 @@ begin
|
|
NewOutputMsgMemoPage.Description := Stack.GetString(PStart-3);
|
|
NewOutputMsgMemoPage.Description := Stack.GetString(PStart-3);
|
|
GetWizardForm.AddPage(NewOutputMsgMemoPage, Stack.GetInt(PStart-1));
|
|
GetWizardForm.AddPage(NewOutputMsgMemoPage, Stack.GetInt(PStart-1));
|
|
NewOutputMsgMemoPage.Initialize(Stack.GetString(PStart-4),
|
|
NewOutputMsgMemoPage.Initialize(Stack.GetString(PStart-4),
|
|
- StackGetAnsiString(Stack, PStart-5));
|
|
|
|
|
|
+ Stack.GetAnsiString(PStart-5));
|
|
except
|
|
except
|
|
NewOutputMsgMemoPage.Free;
|
|
NewOutputMsgMemoPage.Free;
|
|
raise;
|
|
raise;
|
|
@@ -328,20 +326,13 @@ begin
|
|
end else if Proc.Name = 'CREATEDOWNLOADPAGE' then begin
|
|
end else if Proc.Name = 'CREATEDOWNLOADPAGE' then begin
|
|
if IsUninstaller then
|
|
if IsUninstaller then
|
|
NoUninstallFuncError(Proc.Name);
|
|
NoUninstallFuncError(Proc.Name);
|
|
- var P: PPSVariantProcPtr := Stack.Items[PStart-3];
|
|
|
|
- var OnDownloadProgress: TOnDownloadProgress;
|
|
|
|
- { ProcNo 0 means nil was passed by the script }
|
|
|
|
- if P.ProcNo <> 0 then
|
|
|
|
- OnDownloadProgress := TOnDownloadProgress(Caller.GetProcAsMethod(P.ProcNo))
|
|
|
|
- else
|
|
|
|
- OnDownloadProgress := nil;
|
|
|
|
var NewDownloadPage := TDownloadWizardPage.Create(GetWizardForm);
|
|
var NewDownloadPage := TDownloadWizardPage.Create(GetWizardForm);
|
|
try
|
|
try
|
|
NewDownloadPage.Caption := Stack.GetString(PStart-1);
|
|
NewDownloadPage.Caption := Stack.GetString(PStart-1);
|
|
NewDownloadPage.Description := Stack.GetString(PStart-2);
|
|
NewDownloadPage.Description := Stack.GetString(PStart-2);
|
|
GetWizardForm.AddPage(NewDownloadPage, -1);
|
|
GetWizardForm.AddPage(NewDownloadPage, -1);
|
|
NewDownloadPage.Initialize;
|
|
NewDownloadPage.Initialize;
|
|
- NewDownloadPage.OnDownloadProgress := OnDownloadProgress;
|
|
|
|
|
|
+ NewDownloadPage.OnDownloadProgress := TOnDownloadProgress(Stack.GetProc(PStart-3, Caller));
|
|
except
|
|
except
|
|
NewDownloadPage.Free;
|
|
NewDownloadPage.Free;
|
|
raise;
|
|
raise;
|
|
@@ -350,20 +341,13 @@ begin
|
|
end else if Proc.Name = 'CREATEEXTRACTIONPAGE' then begin
|
|
end else if Proc.Name = 'CREATEEXTRACTIONPAGE' then begin
|
|
if IsUninstaller then
|
|
if IsUninstaller then
|
|
NoUninstallFuncError(Proc.Name);
|
|
NoUninstallFuncError(Proc.Name);
|
|
- var P: PPSVariantProcPtr := Stack.Items[PStart-3];
|
|
|
|
- var OnExtractionProgress: TOnExtractionProgress;
|
|
|
|
- { ProcNo 0 means nil was passed by the script }
|
|
|
|
- if P.ProcNo <> 0 then
|
|
|
|
- OnExtractionProgress := TOnExtractionProgress(Caller.GetProcAsMethod(P.ProcNo))
|
|
|
|
- else
|
|
|
|
- OnExtractionProgress := nil;
|
|
|
|
var NewExtractionPage := TExtractionWizardPage.Create(GetWizardForm);
|
|
var NewExtractionPage := TExtractionWizardPage.Create(GetWizardForm);
|
|
try
|
|
try
|
|
NewExtractionPage.Caption := Stack.GetString(PStart-1);
|
|
NewExtractionPage.Caption := Stack.GetString(PStart-1);
|
|
NewExtractionPage.Description := Stack.GetString(PStart-2);
|
|
NewExtractionPage.Description := Stack.GetString(PStart-2);
|
|
GetWizardForm.AddPage(NewExtractionPage, -1);
|
|
GetWizardForm.AddPage(NewExtractionPage, -1);
|
|
NewExtractionPage.Initialize;
|
|
NewExtractionPage.Initialize;
|
|
- NewExtractionPage.OnExtractionProgress := OnExtractionProgress;
|
|
|
|
|
|
+ NewExtractionPage.OnExtractionProgress := TOnExtractionProgress(Stack.GetProc(PStart-3, Caller));
|
|
except
|
|
except
|
|
NewExtractionPage.Free;
|
|
NewExtractionPage.Free;
|
|
raise;
|
|
raise;
|
|
@@ -727,7 +711,7 @@ begin
|
|
if RegQueryValueEx(K, PChar(N), nil, @Typ, nil, @Size) = ERROR_SUCCESS then begin
|
|
if RegQueryValueEx(K, PChar(N), nil, @Typ, nil, @Size) = ERROR_SUCCESS then begin
|
|
SetLength(DataS, Size);
|
|
SetLength(DataS, Size);
|
|
if RegQueryValueEx(K, PChar(N), nil, @Typ, @DataS[1], @Size) = ERROR_SUCCESS then begin
|
|
if RegQueryValueEx(K, PChar(N), nil, @Typ, @DataS[1], @Size) = ERROR_SUCCESS then begin
|
|
- StackSetAnsiString(Stack, PStart-4, DataS);
|
|
|
|
|
|
+ Stack.SetAnsiString(PStart-4, DataS);
|
|
Stack.SetBool(PStart, True);
|
|
Stack.SetBool(PStart, True);
|
|
end else
|
|
end else
|
|
Stack.SetBool(PStart, False);
|
|
Stack.SetBool(PStart, False);
|
|
@@ -803,7 +787,7 @@ begin
|
|
S := Stack.GetString(PStart-2);
|
|
S := Stack.GetString(PStart-2);
|
|
if RegCreateKeyExView(RegView, RootKey, PChar(S), 0, nil, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, nil, K, nil) = ERROR_SUCCESS then begin
|
|
if RegCreateKeyExView(RegView, RootKey, PChar(S), 0, nil, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, nil, K, nil) = ERROR_SUCCESS then begin
|
|
N := Stack.GetString(PStart-3);
|
|
N := Stack.GetString(PStart-3);
|
|
- DataS := StackGetAnsiString(Stack, PStart-4);
|
|
|
|
|
|
+ DataS := Stack.GetAnsiString(PStart-4);
|
|
if RegSetValueEx(K, PChar(N), 0, REG_BINARY, @DataS[1], Length(DataS)) = ERROR_SUCCESS then
|
|
if RegSetValueEx(K, PChar(N), 0, REG_BINARY, @DataS[1], Length(DataS)) = ERROR_SUCCESS then
|
|
Stack.SetBool(PStart, True)
|
|
Stack.SetBool(PStart, True)
|
|
else
|
|
else
|
|
@@ -852,14 +836,7 @@ begin
|
|
end else if Proc.Name = 'EXTRACTTEMPORARYFILES' then begin
|
|
end else if Proc.Name = 'EXTRACTTEMPORARYFILES' then begin
|
|
Stack.SetInt(PStart, ExtractTemporaryFiles(Stack.GetString(PStart-1)));
|
|
Stack.SetInt(PStart, ExtractTemporaryFiles(Stack.GetString(PStart-1)));
|
|
end else if Proc.Name = 'DOWNLOADTEMPORARYFILE' then begin
|
|
end else if Proc.Name = 'DOWNLOADTEMPORARYFILE' then begin
|
|
- var P: PPSVariantProcPtr := Stack.Items[PStart-4];
|
|
|
|
- var OnDownloadProgress: TOnDownloadProgress;
|
|
|
|
- { ProcNo 0 means nil was passed by the script }
|
|
|
|
- if P.ProcNo <> 0 then
|
|
|
|
- OnDownloadProgress := TOnDownloadProgress(Caller.GetProcAsMethod(P.ProcNo))
|
|
|
|
- else
|
|
|
|
- OnDownloadProgress := nil;
|
|
|
|
- Stack.SetInt64(PStart, DownloadTemporaryFile(Stack.GetString(PStart-1), Stack.GetString(PStart-2), Stack.GetString(PStart-3), OnDownloadProgress));
|
|
|
|
|
|
+ Stack.SetInt64(PStart, DownloadTemporaryFile(Stack.GetString(PStart-1), Stack.GetString(PStart-2), Stack.GetString(PStart-3), TOnDownloadProgress(Stack.GetProc(PStart-4, Caller))));
|
|
end else if Proc.Name = 'SETDOWNLOADCREDENTIALS' then begin
|
|
end else if Proc.Name = 'SETDOWNLOADCREDENTIALS' then begin
|
|
SetDownloadCredentials(Stack.GetString(PStart),Stack.GetString(PStart-1));
|
|
SetDownloadCredentials(Stack.GetString(PStart),Stack.GetString(PStart-1));
|
|
end else if Proc.Name = 'DOWNLOADTEMPORARYFILESIZE' then begin
|
|
end else if Proc.Name = 'DOWNLOADTEMPORARYFILESIZE' then begin
|
|
@@ -1015,19 +992,19 @@ begin
|
|
end else if Proc.Name = 'GETMD5OFFILE' then begin
|
|
end else if Proc.Name = 'GETMD5OFFILE' then begin
|
|
Stack.SetString(PStart, MD5DigestToString(GetMD5OfFile(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1))));
|
|
Stack.SetString(PStart, MD5DigestToString(GetMD5OfFile(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1))));
|
|
end else if Proc.Name = 'GETMD5OFSTRING' then begin
|
|
end else if Proc.Name = 'GETMD5OFSTRING' then begin
|
|
- Stack.SetString(PStart, MD5DigestToString(GetMD5OfAnsiString(StackGetAnsiString(Stack, PStart-1))));
|
|
|
|
|
|
+ Stack.SetString(PStart, MD5DigestToString(GetMD5OfAnsiString(Stack.GetAnsiString(PStart-1))));
|
|
end else if Proc.Name = 'GETMD5OFUNICODESTRING' then begin
|
|
end else if Proc.Name = 'GETMD5OFUNICODESTRING' then begin
|
|
Stack.SetString(PStart, MD5DigestToString(GetMD5OfUnicodeString(Stack.GetString(PStart-1))));
|
|
Stack.SetString(PStart, MD5DigestToString(GetMD5OfUnicodeString(Stack.GetString(PStart-1))));
|
|
end else if Proc.Name = 'GETSHA1OFFILE' then begin
|
|
end else if Proc.Name = 'GETSHA1OFFILE' then begin
|
|
Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfFile(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1))));
|
|
Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfFile(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1))));
|
|
end else if Proc.Name = 'GETSHA1OFSTRING' then begin
|
|
end else if Proc.Name = 'GETSHA1OFSTRING' then begin
|
|
- Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfAnsiString(StackGetAnsiString(Stack, PStart-1))));
|
|
|
|
|
|
+ Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfAnsiString(Stack.GetAnsiString(PStart-1))));
|
|
end else if Proc.Name = 'GETSHA1OFUNICODESTRING' then begin
|
|
end else if Proc.Name = 'GETSHA1OFUNICODESTRING' then begin
|
|
Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfUnicodeString(Stack.GetString(PStart-1))));
|
|
Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfUnicodeString(Stack.GetString(PStart-1))));
|
|
end else if Proc.Name = 'GETSHA256OFFILE' then begin
|
|
end else if Proc.Name = 'GETSHA256OFFILE' then begin
|
|
Stack.SetString(PStart, SHA256DigestToString(GetSHA256OfFile(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1))));
|
|
Stack.SetString(PStart, SHA256DigestToString(GetSHA256OfFile(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1))));
|
|
end else if Proc.Name = 'GETSHA256OFSTRING' then begin
|
|
end else if Proc.Name = 'GETSHA256OFSTRING' then begin
|
|
- Stack.SetString(PStart, SHA256DigestToString(GetSHA256OfAnsiString(StackGetAnsiString(Stack, PStart-1))));
|
|
|
|
|
|
+ Stack.SetString(PStart, SHA256DigestToString(GetSHA256OfAnsiString(Stack.GetAnsiString(PStart-1))));
|
|
end else if Proc.Name = 'GETSHA256OFUNICODESTRING' then begin
|
|
end else if Proc.Name = 'GETSHA256OFUNICODESTRING' then begin
|
|
Stack.SetString(PStart, SHA256DigestToString(GetSHA256OfUnicodeString(Stack.GetString(PStart-1))));
|
|
Stack.SetString(PStart, SHA256DigestToString(GetSHA256OfUnicodeString(Stack.GetString(PStart-1))));
|
|
end else if Proc.Name = 'GETSPACEONDISK' then begin
|
|
end else if Proc.Name = 'GETSPACEONDISK' then begin
|
|
@@ -1066,16 +1043,14 @@ begin
|
|
end else if (Proc.Name = 'EXEC') or (Proc.Name = 'EXECASORIGINALUSER') or
|
|
end else if (Proc.Name = 'EXEC') or (Proc.Name = 'EXECASORIGINALUSER') or
|
|
(Proc.Name = 'EXECANDLOGOUTPUT') or (Proc.Name = 'EXECANDCAPTUREOUTPUT') then begin
|
|
(Proc.Name = 'EXECANDLOGOUTPUT') or (Proc.Name = 'EXECANDCAPTUREOUTPUT') then begin
|
|
var RunAsOriginalUser := Proc.Name = 'EXECASORIGINALUSER';
|
|
var RunAsOriginalUser := Proc.Name = 'EXECASORIGINALUSER';
|
|
- var Method: TMethod;
|
|
|
|
|
|
+ var Method: TMethod; { Must stay alive until OutputReader is freed }
|
|
var OutputReader: TCreateProcessOutputReader := nil;
|
|
var OutputReader: TCreateProcessOutputReader := nil;
|
|
try
|
|
try
|
|
if Proc.Name = 'EXECANDLOGOUTPUT' then begin
|
|
if Proc.Name = 'EXECANDLOGOUTPUT' then begin
|
|
- var P: PPSVariantProcPtr := Stack.Items[PStart-7];
|
|
|
|
- { ProcNo 0 means nil was passed by the script }
|
|
|
|
- if P.ProcNo <> 0 then begin
|
|
|
|
- Method := Caller.GetProcAsMethod(P.ProcNo); { This is a TOnLog }
|
|
|
|
- OutputReader := TCreateProcessOutputReader.Create(ExecAndLogOutputLogCustom, NativeInt(@Method));
|
|
|
|
- end else if GetLogActive then
|
|
|
|
|
|
+ Method := Stack.GetProc(PStart-7, Caller);
|
|
|
|
+ if Method.Code <> nil then
|
|
|
|
+ OutputReader := TCreateProcessOutputReader.Create(ExecAndLogOutputLogCustom, NativeInt(@Method))
|
|
|
|
+ else if GetLogActive then
|
|
OutputReader := TCreateProcessOutputReader.Create(ExecAndLogOutputLog, 0);
|
|
OutputReader := TCreateProcessOutputReader.Create(ExecAndLogOutputLog, 0);
|
|
end else if Proc.Name = 'EXECANDCAPTUREOUTPUT' then
|
|
end else if Proc.Name = 'EXECANDCAPTUREOUTPUT' then
|
|
OutputReader := TCreateProcessOutputReader.Create(ExecAndLogOutputLog, 0, omCapture);
|
|
OutputReader := TCreateProcessOutputReader.Create(ExecAndLogOutputLog, 0, omCapture);
|
|
@@ -1349,9 +1324,9 @@ begin
|
|
end else if Proc.Name = 'GET8087CW' then begin
|
|
end else if Proc.Name = 'GET8087CW' then begin
|
|
Stack.SetInt(PStart, Get8087CW);
|
|
Stack.SetInt(PStart, Get8087CW);
|
|
end else if Proc.Name = 'UTF8ENCODE' then begin
|
|
end else if Proc.Name = 'UTF8ENCODE' then begin
|
|
- StackSetAnsiString(Stack, PStart, Utf8Encode(Stack.GetString(PStart-1)));
|
|
|
|
|
|
+ Stack.SetAnsiString(PStart, Utf8Encode(Stack.GetString(PStart-1)));
|
|
end else if Proc.Name = 'UTF8DECODE' then begin
|
|
end else if Proc.Name = 'UTF8DECODE' then begin
|
|
- Stack.SetString(PStart, UTF8ToString(StackGetAnsiString(Stack, PStart-1)));
|
|
|
|
|
|
+ Stack.SetString(PStart, UTF8ToString(Stack.GetAnsiString(PStart-1)));
|
|
end else
|
|
end else
|
|
Result := False;
|
|
Result := False;
|
|
end;
|
|
end;
|
|
@@ -1676,13 +1651,13 @@ begin
|
|
end else if Proc.Name = 'CREATEMUTEX' then begin
|
|
end else if Proc.Name = 'CREATEMUTEX' then begin
|
|
Windows.CreateMutex(nil, False, PChar(Stack.GetString(PStart)));
|
|
Windows.CreateMutex(nil, False, PChar(Stack.GetString(PStart)));
|
|
end else if Proc.Name = 'OEMTOCHARBUFF' then begin
|
|
end else if Proc.Name = 'OEMTOCHARBUFF' then begin
|
|
- S := StackGetAnsiString(Stack, PStart);
|
|
|
|
|
|
+ S := Stack.GetAnsiString(PStart);
|
|
OemToCharBuffA(PAnsiChar(S), PAnsiChar(S), Length(S));
|
|
OemToCharBuffA(PAnsiChar(S), PAnsiChar(S), Length(S));
|
|
- StackSetAnsiString(Stack, PStart, S);
|
|
|
|
|
|
+ Stack.SetAnsiString(PStart, S);
|
|
end else if Proc.Name = 'CHARTOOEMBUFF' then begin
|
|
end else if Proc.Name = 'CHARTOOEMBUFF' then begin
|
|
- S := StackGetAnsiString(Stack, PStart);
|
|
|
|
|
|
+ S := Stack.GetAnsiString(PStart);
|
|
CharToOemBuffA(PAnsiChar(S), PAnsiChar(S), Length(S));
|
|
CharToOemBuffA(PAnsiChar(S), PAnsiChar(S), Length(S));
|
|
- StackSetAnsiString(Stack, PStart, S);
|
|
|
|
|
|
+ Stack.SetAnsiString(PStart, S);
|
|
end else
|
|
end else
|
|
Result := False;
|
|
Result := False;
|
|
end;
|
|
end;
|
|
@@ -2037,13 +2012,13 @@ begin
|
|
end else if Proc.Name = 'SETPREVIOUSDATA' then begin
|
|
end else if Proc.Name = 'SETPREVIOUSDATA' then begin
|
|
Stack.SetBool(PStart, SetCodePreviousData(Stack.GetInt(PStart-1), Stack.GetString(PStart-2), Stack.GetString(PStart-3)));
|
|
Stack.SetBool(PStart, SetCodePreviousData(Stack.GetInt(PStart-1), Stack.GetString(PStart-2), Stack.GetString(PStart-3)));
|
|
end else if Proc.Name = 'LOADSTRINGFROMFILE' then begin
|
|
end else if Proc.Name = 'LOADSTRINGFROMFILE' then begin
|
|
- AnsiS := StackGetAnsiString(Stack, PStart-2);
|
|
|
|
|
|
+ AnsiS := Stack.GetAnsiString(PStart-2);
|
|
Stack.SetBool(PStart, LoadStringFromFile(Stack.GetString(PStart-1), AnsiS, fsRead));
|
|
Stack.SetBool(PStart, LoadStringFromFile(Stack.GetString(PStart-1), AnsiS, fsRead));
|
|
- StackSetAnsiString(Stack, PStart-2, AnsiS);
|
|
|
|
|
|
+ Stack.SetAnsiString(PStart-2, AnsiS);
|
|
end else if Proc.Name = 'LOADSTRINGFROMLOCKEDFILE' then begin
|
|
end else if Proc.Name = 'LOADSTRINGFROMLOCKEDFILE' then begin
|
|
- AnsiS := StackGetAnsiString(Stack, PStart-2);
|
|
|
|
|
|
+ AnsiS := Stack.GetAnsiString(PStart-2);
|
|
Stack.SetBool(PStart, LoadStringFromFile(Stack.GetString(PStart-1), AnsiS, fsReadWrite));
|
|
Stack.SetBool(PStart, LoadStringFromFile(Stack.GetString(PStart-1), AnsiS, fsReadWrite));
|
|
- StackSetAnsiString(Stack, PStart-2, AnsiS);
|
|
|
|
|
|
+ Stack.SetAnsiString(PStart-2, AnsiS);
|
|
end else if Proc.Name = 'LOADSTRINGSFROMFILE' then begin
|
|
end else if Proc.Name = 'LOADSTRINGSFROMFILE' then begin
|
|
Arr := NewTPSVariantIFC(Stack[PStart-2], True);
|
|
Arr := NewTPSVariantIFC(Stack[PStart-2], True);
|
|
Stack.SetBool(PStart, LoadStringsFromFile(Stack.GetString(PStart-1), @Arr, fsRead));
|
|
Stack.SetBool(PStart, LoadStringsFromFile(Stack.GetString(PStart-1), @Arr, fsRead));
|
|
@@ -2051,7 +2026,7 @@ begin
|
|
Arr := NewTPSVariantIFC(Stack[PStart-2], True);
|
|
Arr := NewTPSVariantIFC(Stack[PStart-2], True);
|
|
Stack.SetBool(PStart, LoadStringsFromFile(Stack.GetString(PStart-1), @Arr, fsReadWrite));
|
|
Stack.SetBool(PStart, LoadStringsFromFile(Stack.GetString(PStart-1), @Arr, fsReadWrite));
|
|
end else if Proc.Name = 'SAVESTRINGTOFILE' then begin
|
|
end else if Proc.Name = 'SAVESTRINGTOFILE' then begin
|
|
- Stack.SetBool(PStart, SaveStringToFile(Stack.GetString(PStart-1), StackGetAnsiString(Stack, PStart-2), Stack.GetBool(PStart-3)));
|
|
|
|
|
|
+ Stack.SetBool(PStart, SaveStringToFile(Stack.GetString(PStart-1), Stack.GetAnsiString(PStart-2), Stack.GetBool(PStart-3)));
|
|
end else if Proc.Name = 'SAVESTRINGSTOFILE' then begin
|
|
end else if Proc.Name = 'SAVESTRINGSTOFILE' then begin
|
|
Arr := NewTPSVariantIFC(Stack[PStart-2], True);
|
|
Arr := NewTPSVariantIFC(Stack[PStart-2], True);
|
|
Stack.SetBool(PStart, SaveStringsToFile(Stack.GetString(PStart-1), @Arr, Stack.GetBool(PStart-3), False, False));
|
|
Stack.SetBool(PStart, SaveStringsToFile(Stack.GetString(PStart-1), @Arr, Stack.GetBool(PStart-3), False, False));
|
|
@@ -2084,14 +2059,7 @@ begin
|
|
var AscendingTrySizes := Stack.GetIntArray(PStart-4);
|
|
var AscendingTrySizes := Stack.GetIntArray(PStart-4);
|
|
Stack.SetBool(PStart, TBitmapImage(Stack.GetClass(PStart-1)).InitializeFromIcon(0, PChar(Stack.GetString(PStart-2)), Stack.GetInt(PStart-3), AscendingTrySizes));
|
|
Stack.SetBool(PStart, TBitmapImage(Stack.GetClass(PStart-1)).InitializeFromIcon(0, PChar(Stack.GetString(PStart-2)), Stack.GetInt(PStart-3), AscendingTrySizes));
|
|
end else if Proc.Name = 'EXTRACT7ZIPARCHIVE' then begin
|
|
end else if Proc.Name = 'EXTRACT7ZIPARCHIVE' then begin
|
|
- var P: PPSVariantProcPtr := Stack.Items[PStart-3];
|
|
|
|
- var OnExtractionProgress: TOnExtractionProgress;
|
|
|
|
- { ProcNo 0 means nil was passed by the script }
|
|
|
|
- if P.ProcNo <> 0 then
|
|
|
|
- OnExtractionProgress := TOnExtractionProgress(Caller.GetProcAsMethod(P.ProcNo))
|
|
|
|
- else
|
|
|
|
- OnExtractionProgress := nil;
|
|
|
|
- Extract7ZipArchive(Stack.GetString(PStart), Stack.GetString(PStart-1), Stack.GetBool(PStart-2), OnExtractionProgress);
|
|
|
|
|
|
+ Extract7ZipArchive(Stack.GetString(PStart), Stack.GetString(PStart-1), Stack.GetBool(PStart-2), TOnExtractionProgress(Stack.GetProc(PStart-3, Caller)));
|
|
end else if Proc.Name = 'DEBUGGING' then begin
|
|
end else if Proc.Name = 'DEBUGGING' then begin
|
|
Stack.SetBool(PStart, Debugging);
|
|
Stack.SetBool(PStart, Debugging);
|
|
end else if Proc.Name = 'STRINGJOIN' then begin
|
|
end else if Proc.Name = 'STRINGJOIN' then begin
|