171 lines
5.5 KiB
Plaintext
171 lines
5.5 KiB
Plaintext
{*******************************************************}
|
|
{ }
|
|
{ Tocsg.Fasoo.Global }
|
|
{ }
|
|
{ Copyright (C) 2025 kku }
|
|
{ }
|
|
{*******************************************************}
|
|
|
|
unit Tocsg.Fasoo.Global;
|
|
|
|
interface
|
|
|
|
uses
|
|
System.SysUtils, Winapi.Windows;
|
|
|
|
const
|
|
DLL_FSG_NAME = 'FasooPackagerADK_DLL.dll';
|
|
|
|
FASOO_OK = 0;
|
|
|
|
// Error
|
|
FASOO_INVALID_PARAM = 4;
|
|
FASOO_FILE_NOT_EXIST = 20;
|
|
FASOO_FILE_SIZE_ZERO = 21;
|
|
|
|
// Etc
|
|
FASOO_PACKAGED_FILE = 26;
|
|
FASOO_NOT_PACKAGED_FILE = 29;
|
|
FASOO_MARKANY_PACKAGED_FILE = 101;
|
|
FASOO_FSN_PACKAGED_FILE = 103;
|
|
FASOO_INCAPS_PACKAGED_FILE = 104;
|
|
FASOO_WRAPSODY_PACKAGED_FILE = 105;
|
|
FASOO_NX10_PACKAGED_FILE = 106;
|
|
|
|
type
|
|
TWorkPackager_new = function: Pointer; stdcall;
|
|
TWorkPackager_clear_all = procedure(pk: Pointer); stdcall;
|
|
TGetFileType_r = function(sEncPath: PAnsiChar): Integer; stdcall;
|
|
TGetFileTypeW_r = function(pk: Pointer; sEncPath: PAnsiChar): Integer; stdcall;
|
|
TSetOverWriteFlag = procedure(pk: Pointer; nFlag: Integer); stdcall;
|
|
TGetFileHeader_r = function(pk: Pointer; sEncPath: PAnsiChar): PAnsiChar; stdcall;
|
|
TGetFileHeaderW_r = function(pk: Pointer; sEncPath: PAnsiChar): PWideChar; stdcall;
|
|
TDoExtract_r = function(pk: Pointer; sHomeDir, sServerID, sEncPath, sDecPath: PAnsiChar): Integer; stdcall;
|
|
|
|
//function WorkPackager_new: Pointer;
|
|
//procedure WorkPackager_clear_all(pk: Pointer);
|
|
function InitFasooGlobalProcedure: Boolean;
|
|
function GetFileType_r(sEncPath: String): Integer;
|
|
function GetFileTypeW_r(sEncPath: String): Integer;
|
|
procedure SetOverWriteFlag(nFlag: Integer);
|
|
function GetFileHeader_r(sEncPath: String): String;
|
|
function GetFileHeaderW_r(sEncPath: String): String;
|
|
function DoExtract_r(sHomeDir, sServerID, sEncPath, sDecPath: String): Integer;
|
|
|
|
implementation
|
|
|
|
uses
|
|
Tocsg.Path, Tocsg.Trace;
|
|
|
|
var
|
|
_pk: Pointer = nil;
|
|
_fnWorkPackager_new: TWorkPackager_new = nil;
|
|
_fnWorkPackager_clear_all: TWorkPackager_clear_all = nil;
|
|
_fnGetFileType_r: TGetFileType_r = nil;
|
|
_fnGetFileTypeW_r: TGetFileTypeW_r = nil;
|
|
_fnSetOverWriteFlag: TSetOverWriteFlag = nil;
|
|
_fnGetFileHeader_r: TGetFileHeader_r = nil;
|
|
_fnGetFileHeaderW_r: TGetFileHeaderW_r = nil;
|
|
_fnDoExtract_r: TDoExtract_r = nil;
|
|
|
|
function InitFasooGlobalProcedure: Boolean;
|
|
var
|
|
hFs: THandle;
|
|
sDllPath: String;
|
|
begin
|
|
if _pk = nil then
|
|
begin
|
|
sDllPath := GetRunExePathDir + DLL_FSG_NAME;
|
|
if not FileExists(sDllPath) then
|
|
sDllPath := GetRunExePathDir + 'conf\' + DLL_FSG_NAME;
|
|
if FileExists(sDllPath) then
|
|
begin
|
|
hFs := LoadLibrary(PChar(sDllPath));
|
|
if hFs <> 0 then
|
|
begin
|
|
@_fnWorkPackager_new := GetProcAddress(hFs, 'WorkPackager_new');
|
|
@_fnWorkPackager_clear_all := GetProcAddress(hFs, 'WorkPackager_clear_all');
|
|
@_fnGetFileType_r := GetProcAddress(hFs, 'GetFileType_r');
|
|
@_fnGetFileTypeW_r := GetProcAddress(hFs, 'GetFileTypeW_r');
|
|
@_fnSetOverWriteFlag := GetProcAddress(hFs, 'SetOverWriteFlag');
|
|
@_fnGetFileHeader_r := GetProcAddress(hFs, 'GetFileHeader_r');
|
|
@_fnGetFileHeaderW_r := GetProcAddress(hFs, 'GetFileHeaderW_r');
|
|
@_fnDoExtract_r := GetProcAddress(hFs, 'DoExtract_r');
|
|
|
|
if Assigned(_fnWorkPackager_new) then
|
|
_pk := _fnWorkPackager_new;
|
|
end;
|
|
end;
|
|
end;
|
|
Result := _pk <> nil;
|
|
end;
|
|
|
|
function WorkPackager_new: Pointer;
|
|
begin
|
|
if InitFasooGlobalProcedure and Assigned(_fnWorkPackager_new) then
|
|
Result := _fnWorkPackager_new
|
|
else Result := nil;
|
|
end;
|
|
|
|
procedure WorkPackager_clear_all(pk: Pointer);
|
|
begin
|
|
if pk = nil then
|
|
exit;
|
|
|
|
if InitFasooGlobalProcedure and Assigned(_fnWorkPackager_clear_all) then
|
|
_fnWorkPackager_clear_all(pk);
|
|
end;
|
|
|
|
function GetFileType_r(sEncPath: String): Integer;
|
|
begin
|
|
if InitFasooGlobalProcedure and Assigned(_fnGetFileType_r) then
|
|
Result := _fnGetFileType_r(PAnsiChar(AnsiString(sEncPath)))
|
|
else Result := -1;
|
|
end;
|
|
|
|
function GetFileTypeW_r(sEncPath: String): Integer;
|
|
begin
|
|
if InitFasooGlobalProcedure and Assigned(_fnGetFileTypeW_r) then
|
|
Result := _fnGetFileTypeW_r(_pk, PAnsiChar(AnsiString(sEncPath)))
|
|
else Result := -1;
|
|
end;
|
|
|
|
// Target 파일이 존재할 경우 덮어쓰기 유무 설정
|
|
// 0: 덮어쓰지 않음, 1: 덮어씀
|
|
procedure SetOverWriteFlag(nFlag: Integer);
|
|
begin
|
|
if InitFasooGlobalProcedure and Assigned(_fnSetOverWriteFlag) then
|
|
_fnSetOverWriteFlag(_pk, nFlag);
|
|
end;
|
|
|
|
function GetFileHeader_r(sEncPath: String): String;
|
|
begin
|
|
if InitFasooGlobalProcedure and Assigned(_fnGetFileHeader_r) then
|
|
Result := AnsiString(_fnGetFileHeader_r(_pk, PAnsiChar(AnsiString(sEncPath))))
|
|
else Result := '';
|
|
end;
|
|
|
|
function GetFileHeaderW_r(sEncPath: String): String;
|
|
begin
|
|
if InitFasooGlobalProcedure and Assigned(_fnGetFileHeaderW_r) then
|
|
Result := _fnGetFileHeaderW_r(_pk, PAnsiChar(AnsiString(sEncPath)))
|
|
else Result := '';
|
|
end;
|
|
|
|
function DoExtract_r(sHomeDir, sServerID, sEncPath, sDecPath: String): Integer;
|
|
begin
|
|
if InitFasooGlobalProcedure and Assigned(_fnDoExtract_r) then
|
|
Result := _fnDoExtract_r(_pk, PAnsiChar(AnsiString(sHomeDir)), PAnsiChar(AnsiString(sServerID)),
|
|
PAnsiChar(AnsiString(sEncPath)), PAnsiChar(AnsiString(sDecPath)))
|
|
else Result := -1;
|
|
end;
|
|
|
|
end.
|
|
|
|
finalization
|
|
if (_pk <> nil) and Assigned(WorkPackager_clear_all) then
|
|
begin
|
|
WorkPackager_clear_all(_pk);
|
|
_pk := nil;
|
|
end;
|