163 lines
4.9 KiB
ObjectPascal

// Free Pascal interface unit for UnRAR.dll
//
// Ported to Free Pascal by Alexey Fayans, fidonet: 2:5030/1997, e-mail: shad@shad.pp.ru
{$IFNDEF NO_SMART_LINK}
{$SMARTLINK ON}
{$ENDIF}
{$MODE objfpc}
{$CALLING stdcall}
{$PACKRECORDS C}
unit UnRAR;
interface
uses Windows;
const
ERAR_END_ARCHIVE = 10;
ERAR_NO_MEMORY = 11;
ERAR_BAD_DATA = 12;
ERAR_BAD_ARCHIVE = 13;
ERAR_UNKNOWN_FORMAT = 14;
ERAR_EOPEN = 15;
ERAR_ECREATE = 16;
ERAR_ECLOSE = 17;
ERAR_EREAD = 18;
ERAR_EWRITE = 19;
ERAR_SMALL_BUF = 20;
ERAR_UNKNOWN = 21;
RAR_OM_LIST = 0;
RAR_OM_EXTRACT = 1;
RAR_SKIP = 0;
RAR_TEST = 1;
RAR_EXTRACT = 2;
RAR_VOL_ASK = 0;
RAR_VOL_NOTIFY = 1;
RAR_DLL_VERSION = 3;
UCM_CHANGEVOLUME = 0;
UCM_PROCESSDATA = 1;
UCM_NEEDPASSWORD = 2;
type
PRARHeaderData = ^TRARHeaderData;
TRARHeaderData = record
ArcName: array[0..259] of Char;
FileName: array[0..259] of Char;
Flags: UInt;
PackSize: UInt;
UnpSize: UInt;
HostOS: UInt;
FileCRC: UInt;
FileTime: UInt;
UnpVer: UInt;
Method: UInt;
FileAttr: UInt;
CmtBuf: PChar;
CmtBufSize: UInt;
CmtSize: UInt;
CmtState: UInt;
end;
PRARHeaderDataEx = ^TRARHeaderDataEx;
TRARHeaderDataEx = record
ArcName: array [0..1023] of Char;
ArcNameW: array [0..1023] of WideChar;
FileName: array [0..1023] of Char;
FileNameW: array [0..1023] of WideChar;
Flags: UInt;
PackSize: UInt;
PackSizeHigh: UInt;
UnpSize: UInt;
UnpSizeHigh: UInt;
HostOS: UInt;
FileCRC: UInt;
FileTime: UInt;
UnpVer: UInt;
Method: UInt;
FileAttr: UInt;
CmtBuf: PChar;
CmtBufSize: UInt;
CmtSize: UInt;
CmtState: UInt;
Reserved: array [0..1023] of UInt;
end;
PRAROpenArchiveData = ^TRAROpenArchiveData;
TRAROpenArchiveData = record
ArcName: PChar;
OpenMode: UInt;
OpenResult: UInt;
CmtBuf: PChar;
CmtBufSize: UInt;
CmtSize: UInt;
CmtState: UInt;
end;
PRAROpenArchiveDataEx = ^TRAROpenArchiveDataEx;
TRAROpenArchiveDataEx = record
ArcName: PChar;
ArcNameW: PWideChar;
OpenMode: UInt;
OpenResult: UInt;
CmtBuf: PChar;
CmtBufSize: UInt;
CmtSize: UInt;
CmtState: UInt;
Flags: UInt;
Reserved: array [0..31] of UInt;
end;
TUnrarCallback = function(Msg: UInt; UserData, P1, P2: Longint): Integer;
function RAROpenArchive(ArchiveData: PRAROpenArchiveData): THandle;
function RAROpenArchiveEx(ArchiveData: PRAROpenArchiveDataEx): THandle;
function RARCloseArchive(hArcData: THandle): Integer;
function RARReadHeader(hArcData: THandle; HeaderData: PRARHeaderData): Integer;
function RARReadHeaderEx(hArcData: THandle; HeaderData: PRARHeaderDataEx): Integer;
function RARProcessFile(hArcData: THandle; Operation: Integer; DestPath, DestName: PChar): Integer;
function RARProcessFileW(hArcData: THandle; Operation: Integer; DestPath, DestName: PWideChar): Integer;
procedure RARSetCallback(hArcData: THandle; UnrarCallback: TUnrarCallback; UserData: Longint);
procedure RARSetPassword(hArcData: THandle; Password: PChar);
// obsolete functions
type
TChangeVolProc = function(ArcName: PChar; Mode: Integer): Integer;
TProcessDataProc = function(Addr: PUChar; Size: Integer): Integer;
procedure RARSetChangeVolProc(hArcData: THandle; ChangeVolProc: TChangeVolProc);
procedure RARSetProcessDataProc(hArcData: THandle; ProcessDataProc: TProcessDataProc);
implementation
function RAROpenArchive(ArchiveData: PRAROpenArchiveData): THandle;
external 'unrar.dll' name 'RAROpenArchive';
function RAROpenArchiveEx(ArchiveData: PRAROpenArchiveDataEx): THandle;
external 'unrar.dll' name 'RAROpenArchiveEx';
function RARCloseArchive(hArcData: THandle): Integer;
external 'unrar.dll' name 'RARCloseArchive';
function RARReadHeader(hArcData: THandle; HeaderData: PRARHeaderData): Integer;
external 'unrar.dll' name 'RARReadHeader';
function RARReadHeaderEx(hArcData: THandle; HeaderData: PRARHeaderDataEx): Integer;
external 'unrar.dll' name 'RARReadHeaderEx';
function RARProcessFile(hArcData: THandle; Operation: Integer; DestPath, DestName: PChar): Integer;
external 'unrar.dll' name 'RARProcessFile';
function RARProcessFileW(hArcData: THandle; Operation: Integer; DestPath, DestName: PWideChar): Integer;
external 'unrar.dll' name 'RARProcessFileW';
procedure RARSetCallback(hArcData: THandle; UnrarCallback: TUnrarCallback; UserData: Longint);
external 'unrar.dll' name 'RARSetCallback';
procedure RARSetPassword(hArcData: THandle; Password: PChar);
external 'unrar.dll' name 'RARSetPassword';
procedure RARSetChangeVolProc(hArcData: THandle; ChangeVolProc: TChangeVolProc);
external 'unrar.dll' name 'RARSetChangeVolProc';
procedure RARSetProcessDataProc(hArcData: THandle; ProcessDataProc: TProcessDataProc);
external 'unrar.dll' name 'RARSetProcessDataProc';
end.