Go Back   FileForums > Game Backup > PC Games > PC Games - CD/DVD Conversions > Conversion Tutorials

Reply
 
Thread Tools Display Modes
  #1  
Old 12-10-2023, 02:52
BLACKFIRE69's Avatar
BLACKFIRE69 BLACKFIRE69 is offline
Registered User
 
Join Date: Mar 2019
Location: In the Hell
Posts: 670
Thanks: 471
Thanked 2,394 Times in 544 Posts
BLACKFIRE69 is on a distinguished road
Talking FXPacker v2.0 - A Data Protector for InnoSetup

FXPacker API


Introduction:

FXPacker started as a side project to 'FMXInno', primarily dedicated to safeguarding various data types, such as (graphical content: images, music, text, etc.), used in the installer from unauthorized access.


Changes:

This is Version 2. Let's review the changes it introduces.

Code:
1. Improved speed and reliability compared to previous versions.
   -- Note: This may cause compatibility issues with previous versions.

2. Now supports larger files.
   -- Please ensure that the total size of the files remains below 800 MB. 
      (Total_File_Size * 2 + Extra should be less than 2 GB)

3. Added new events: 
   -- OnProgress, OnDataSaving, OnItemUnpack, OnEncrypt, OnDecrypt.

4. Introduced additional functions.
   -- For a better understanding of how to use these functions, 
      refer to the examples provided in the attachment.

Simple Example:

Code:
Pack:

var
  FXOk: Boolean;
  BufferA: AnsiString;
  BufferW: WideString;
  Count: Cardinal;
  FSize: Integer;
  LPtr: Longint;

begin
  FXOk := FXPckrInit('@#123_Test', ExpandConstant('{src}\MySetup.exe'), False);

  if FXOk then
  begin
    // Img1
    FXPckrAddFile(ExpandConstant('{src}\Files\Img1.png'));
 
    // Img2
    FileSize(ExpandConstant('{src}\Files\Img2.png'), FSize);
    SetLength(BufferA, FSize);
    FXFileToBuffer1A(ExpandConstant('{src}\Files\Img2.png'), BufferA);
    FXPckrAddFromBuffer1A('Img2.png', BufferA);

    // Save
    FXPckrSave(ExpandConstant('{src}\Setup.dat'));
  end;


  { CleanUp }
  FXPckrFree;
end;

Code:
Unpack:

var
  FXOk: Boolean;
  BufferA: AnsiString;
  BufferW: WideString;
  Count: Cardinal;
  FSize: Integer;
  LPtr: Longint;

begin
  FXOk := FXUnPckrInit(ExpandConstant('{src}\Setup.dat'), '@#123_Test');

  if not FXOk then
  begin
    ShowErr('Failed to initialize the setup. The installation process cannot continue.');
  end else
  begin
    // Img1
    FXUnPckrExtract('Img1.png', ExpandConstant('{src}'));

    // Img2
    FSize := FXUnPckrExtractFileSize('Img2.png');
    SetLength(BufferA, FSize);
    FXUnPckrExtractToBuffer1A('Img2.png', BufferA);
  end;


  { CleanUp }
  FXUnPckrFree;
end;

Functions / Methods:

Code:
{ Pckr }
function FXPckrInit(const Password, ExeFile: WideString; DebugMode: Boolean): Boolean;
function FXPckrAddFile(const FileName: WideString): Boolean;
function FXPckrAddFromStream(const DisplayFilename: WideString; Source: TStream): Boolean;
function FXPckrAddFromBuffer1A(const DisplayFilename: WideString; const Buffer: AnsiString): Boolean;
function FXPckrAddFromBuffer1W(const DisplayFilename: WideString; const Buffer: WideString): Boolean;
function FXPckrAddFromBuffer2A(const DisplayFilename: WideString; const Buffer: PAnsiChar; const Count: Cardinal): Boolean;
function FXPckrAddFromBuffer2W(const DisplayFilename: WideString; const Buffer: PWideChar; const Count: Cardinal): Boolean;
function FXPckrAddFromBuffer3AW(const DisplayFilename: WideString; const Buffer: Longint; const Count: Cardinal): Boolean;
procedure FXPckrSave(const DestPackfile: WideString);
procedure FXPckrFree;

{ Unpckr }
function FXUnPckrInit(const PackFile, Password: WideString): Boolean;
function FXUnPckrFileExist(const DisplayFilename: WideString): Boolean;
function FXUnPckrExtract(const DisplayFilename, DestPath: WideString): Boolean;
function FXUnPckrExtractToStream(const DisplayFilename: WideString; Dest: TStream): Boolean;
function FXUnPckrExtractToBuffer1A(const DisplayFilename: WideString; var Buffer: AnsiString): Boolean;
function FXUnPckrExtractToBuffer1W(const DisplayFilename: WideString; var Buffer: WideString): Boolean;
function FXUnPckrExtractToBuffer2A(const DisplayFilename: WideString; const Buffer: PAnsiChar; var Count: Cardinal): Boolean;
function FXUnPckrExtractToBuffer2W(const DisplayFilename: WideString; const Buffer: PWideChar; var Count: Cardinal): Boolean;
function FXUnPckrExtractToBuffer3AW(const DisplayFilename: WideString; const Buffer: Longint; var Count: Cardinal): Boolean;
function FXUnPckrExtractFileSize(const DisplayFilename: WideString): Cardinal;
procedure FXUnPckrFree;
Code:
{ Extra }
function FXBufferToFile1A(const Buffer: AnsiString; const OutFile: WideString): Boolean;
function FXBufferToFile1W(const Buffer: WideString; const OutFile: WideString): Boolean;
function FXBufferToFile2A(const Buffer: PAnsiChar; const Count: Cardinal; const OutFile: WideString): Boolean;
function FXBufferToFile2W(const Buffer: PWideChar; const Count: Cardinal; const OutFile: WideString): Boolean;
function FXBufferToFile3AW(const Buffer: Longint; const Count: Cardinal; const OutFile: WideString): Boolean;

function FXFileToBuffer1A(const FileName: WideString; var Buffer: AnsiString): Boolean;
function FXFileToBuffer1W(const FileName: WideString; var Buffer: WideString): Boolean;
function FXFileToBuffer2A(const FileName: WideString; const Buffer: PAnsiChar; var Count: Cardinal): Boolean;
function FXFileToBuffer2W(const FileName: WideString; const Buffer: PWideChar; var Count: Cardinal): Boolean;
function FXFileToBuffer3AW(const FileName: WideString; const Buffer: Longint; var Count: Cardinal): Boolean;

function FXCastStringToIntegerA(var S: AnsiString): LongInt;
function FXCastStringToIntegerW(var S: WideString): LongInt;
function FXCastIntegerToStringA(const L: LongInt): AnsiString;
function FXCastIntegerToStringW(const L: LongInt): WideString;
function FXAnsiBufferToStr(const ABuffer: AnsiString): WideString;

function FXFreeBufferA(const Buffer: PAnsiChar): Integer;
function FXFreeBufferW(const Buffer: PWideChar): Integer;

{ Events }
procedure FXArchiveOnProgress(Callback: TArchiveOnProg);
procedure FXArchiveOnSaving(Callback: TArchiveOnProg);
procedure FXPackItemOnProgress(Callback: TItemOnProg);
procedure FXUnpackItemOnProgress(Callback: TItemOnProg);
procedure FXEncryptOnProgress(Callback: TCryptOnProg);
procedure FXDecryptOnProgress(Callback: TCryptOnProg);

.
Attached Images
File Type: png 00.png (22.7 KB, 119 views)
File Type: png 01.png (30.8 KB, 119 views)
Attached Files
File Type: rar FXPckr v2.0 + Examples [2023-Oct-15].rar (1.40 MB, 45 views)

Last edited by BLACKFIRE69; 14-10-2023 at 23:26. Reason: Added the latest update.
Reply With Quote
The Following 7 Users Say Thank You to BLACKFIRE69 For This Useful Post:
Behnam2018 (13-10-2023), Cesar82 (12-10-2023), hitman797 (12-10-2023), Lord.Freddy (12-10-2023), nordi (02-02-2024), ScOOt3r (12-10-2023), yasserdivar (15-10-2023)
Sponsored Links
  #2  
Old 12-10-2023, 11:58
BLACKFIRE69's Avatar
BLACKFIRE69 BLACKFIRE69 is offline
Registered User
 
Join Date: Mar 2019
Location: In the Hell
Posts: 670
Thanks: 471
Thanked 2,394 Times in 544 Posts
BLACKFIRE69 is on a distinguished road
Arrow Update

Code:
* Added missing event 'FXPackItemOnProgress'.
  -- procedure FXPackItemOnProgress(Callback: TItemOnProg);
Reply With Quote
The Following 4 Users Say Thank You to BLACKFIRE69 For This Useful Post:
Behnam2018 (13-10-2023), Cesar82 (12-10-2023), hitman797 (12-10-2023), Lord.Freddy (12-10-2023)
  #3  
Old 13-10-2023, 08:56
BLACKFIRE69's Avatar
BLACKFIRE69 BLACKFIRE69 is offline
Registered User
 
Join Date: Mar 2019
Location: In the Hell
Posts: 670
Thanks: 471
Thanked 2,394 Times in 544 Posts
BLACKFIRE69 is on a distinguished road
Arrow Optional Update

Optional Update:


Code:
* Included FastMM for improved memory management. 
    -- FastMM - Github
* Reduced the file size for enhanced performance and efficiency. 
    -- 211kb  >>  139kb

Last edited by BLACKFIRE69; 14-10-2023 at 23:23.
Reply With Quote
The Following 4 Users Say Thank You to BLACKFIRE69 For This Useful Post:
Behnam2018 (13-10-2023), hitman797 (13-10-2023), Lord.Freddy (13-10-2023), ScOOt3r (13-10-2023)
  #4  
Old 14-10-2023, 23:23
BLACKFIRE69's Avatar
BLACKFIRE69 BLACKFIRE69 is offline
Registered User
 
Join Date: Mar 2019
Location: In the Hell
Posts: 670
Thanks: 471
Thanked 2,394 Times in 544 Posts
BLACKFIRE69 is on a distinguished road
Arrow FXPackerApi - Updates

Updates available! - [2023-Oct-15]


Code:
FXPackerApi v2.0:

* Now supports threading.
  -- It'll no longer affect the main thread of the client app (setup.exe) 
     and will run in its own thread, preventing client app freezing.

* Added a new function.
  -- function FXGetItemFileName(const Item: Longint): WideString;


FXPacker GUI v2.0:

* Updated to FXPackerApi v2.0.
* Added the ability to include entire directories, including subdirectories.
* Now you can remove multiple items at once.
* Added a feature to prevent adding duplicate items.

.
Attached Images
File Type: png 00.png (22.7 KB, 118 views)
Attached Files
File Type: rar FXPckr v2.0 + Examples [2023-Oct-15].rar (1.40 MB, 13 views)
Reply With Quote
The Following 4 Users Say Thank You to BLACKFIRE69 For This Useful Post:
audiofeel (15-10-2023), Cesar82 (15-10-2023), hitman797 (15-10-2023), Lord.Freddy (15-10-2023)
  #5  
Old 15-10-2023, 10:36
Cesar82's Avatar
Cesar82 Cesar82 is online now
Registered User
 
Join Date: May 2011
Location: Brazil
Posts: 1,023
Thanks: 1,728
Thanked 2,185 Times in 746 Posts
Cesar82 is on a distinguished road
@BLACKFIRE69, Thank you very much for the updates.
Maybe you can include an additional function...
function FXPckrAddFileList(const FileList: WideString): Boolean;

Usage like this:
Code:
StrList := TStringList.Create;
try
    StrList.LoadFromFile(ExpandConatant('{src}\FileList.txt'));
    FXPckrAddFileList(StrList.Text);
finally
   StrList.Free;
end;
You could also store files with a folder structure inside Data.dat.
To do this, use the character "|" as an option to inform the destination path in the internal structure of Data.dat. If "|" does not exist, add as a file without a subfolder in the internal structure of the items.
Code:
FXPckrAddFile('C:\my_test\filetest.txt|my_test\file_name.txt');
This would allow using files with the same names for different cases.
Thanks!
Reply With Quote
The Following User Says Thank You to Cesar82 For This Useful Post:
hitman797 (15-10-2023)
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
SuperREP (SREP) Full Info! yasitha Conversion Tutorials 26 08-01-2019 19:49
PSX Modchip FAQ Ne0 PSX Games 1 07-08-2009 09:18
QUERY: editing CloneCD images & best for game data & music CDs andwan0 CD/DVD Software & Utilities 2 18-05-2009 19:13
CD/DVD Data Recovery 123walter CD/DVD Software & Utilities 1 05-08-2005 22:53
99min CD-R's, my great experience w/Audio & Data abbadon CD/DVD Recordable Media 10 16-05-2002 00:16



All times are GMT -7. The time now is 16:23.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.
Copyright 2000-2020, FileForums @ https://fileforums.com