1 #ifndef _UNRAR_DLL_
2 #define _UNRAR_DLL_
3 
4 #pragma pack(push, 1)
5 
6 #define ERAR_SUCCESS             0
7 #define ERAR_END_ARCHIVE        10
8 #define ERAR_NO_MEMORY          11
9 #define ERAR_BAD_DATA           12
10 #define ERAR_BAD_ARCHIVE        13
11 #define ERAR_UNKNOWN_FORMAT     14
12 #define ERAR_EOPEN              15
13 #define ERAR_ECREATE            16
14 #define ERAR_ECLOSE             17
15 #define ERAR_EREAD              18
16 #define ERAR_EWRITE             19
17 #define ERAR_SMALL_BUF          20
18 #define ERAR_UNKNOWN            21
19 #define ERAR_MISSING_PASSWORD   22
20 #define ERAR_EREFERENCE         23
21 #define ERAR_BAD_PASSWORD       24
22 
23 #define RAR_OM_LIST              0
24 #define RAR_OM_EXTRACT           1
25 #define RAR_OM_LIST_INCSPLIT     2
26 
27 #define RAR_SKIP              0
28 #define RAR_TEST              1
29 #define RAR_EXTRACT           2
30 
31 #define RAR_VOL_ASK           0
32 #define RAR_VOL_NOTIFY        1
33 
34 #define RAR_DLL_VERSION       8
35 
36 #define RAR_HASH_NONE         0
37 #define RAR_HASH_CRC32        1
38 #define RAR_HASH_BLAKE2       2
39 
40 
41 #ifdef _UNIX
42 #define CALLBACK
43 #define PASCAL
44 #define LONG long
45 #define HANDLE void *
46 #define LPARAM long
47 #define UINT unsigned int
48 #endif
49 
50 #define RHDF_SPLITBEFORE 0x01
51 #define RHDF_SPLITAFTER  0x02
52 #define RHDF_ENCRYPTED   0x04
53 #define RHDF_SOLID       0x10
54 #define RHDF_DIRECTORY   0x20
55 
56 
57 struct RARHeaderData
58 {
59   char         ArcName[260];
60   char         FileName[260];
61   unsigned int Flags;
62   unsigned int PackSize;
63   unsigned int UnpSize;
64   unsigned int HostOS;
65   unsigned int FileCRC;
66   unsigned int FileTime;
67   unsigned int UnpVer;
68   unsigned int Method;
69   unsigned int FileAttr;
70   char         *CmtBuf;
71   unsigned int CmtBufSize;
72   unsigned int CmtSize;
73   unsigned int CmtState;
74 };
75 
76 
77 struct RARHeaderDataEx
78 {
79   char         ArcName[1024];
80   wchar_t      ArcNameW[1024];
81   char         FileName[1024];
82   wchar_t      FileNameW[1024];
83   unsigned int Flags;
84   unsigned int PackSize;
85   unsigned int PackSizeHigh;
86   unsigned int UnpSize;
87   unsigned int UnpSizeHigh;
88   unsigned int HostOS;
89   unsigned int FileCRC;
90   unsigned int FileTime;
91   unsigned int UnpVer;
92   unsigned int Method;
93   unsigned int FileAttr;
94   char         *CmtBuf;
95   unsigned int CmtBufSize;
96   unsigned int CmtSize;
97   unsigned int CmtState;
98   unsigned int DictSize;
99   unsigned int HashType;
100   char         Hash[32];
101   unsigned int RedirType;
102   wchar_t      *RedirName;
103   unsigned int RedirNameSize;
104   unsigned int DirTarget;
105   unsigned int MtimeLow;
106   unsigned int MtimeHigh;
107   unsigned int CtimeLow;
108   unsigned int CtimeHigh;
109   unsigned int AtimeLow;
110   unsigned int AtimeHigh;
111   unsigned int Reserved[988];
112 };
113 
114 
115 struct RAROpenArchiveData
116 {
117   char         *ArcName;
118   unsigned int OpenMode;
119   unsigned int OpenResult;
120   char         *CmtBuf;
121   unsigned int CmtBufSize;
122   unsigned int CmtSize;
123   unsigned int CmtState;
124 };
125 
126 typedef int (CALLBACK *UNRARCALLBACK)(UINT msg,LPARAM UserData,LPARAM P1,LPARAM P2);
127 
128 #define ROADF_VOLUME       0x0001
129 #define ROADF_COMMENT      0x0002
130 #define ROADF_LOCK         0x0004
131 #define ROADF_SOLID        0x0008
132 #define ROADF_NEWNUMBERING 0x0010
133 #define ROADF_SIGNED       0x0020
134 #define ROADF_RECOVERY     0x0040
135 #define ROADF_ENCHEADERS   0x0080
136 #define ROADF_FIRSTVOLUME  0x0100
137 
138 #define ROADOF_KEEPBROKEN  0x0001
139 
140 struct RAROpenArchiveDataEx
141 {
142   char         *ArcName;
143   wchar_t      *ArcNameW;
144   unsigned int  OpenMode;
145   unsigned int  OpenResult;
146   char         *CmtBuf;
147   unsigned int  CmtBufSize;
148   unsigned int  CmtSize;
149   unsigned int  CmtState;
150   unsigned int  Flags;
151   UNRARCALLBACK Callback;
152   LPARAM        UserData;
153   unsigned int  OpFlags;
154   wchar_t      *CmtBufW;
155   unsigned int  Reserved[25];
156 };
157 
158 enum UNRARCALLBACK_MESSAGES {
159   UCM_CHANGEVOLUME,UCM_PROCESSDATA,UCM_NEEDPASSWORD,UCM_CHANGEVOLUMEW,
160   UCM_NEEDPASSWORDW
161 };
162 
163 typedef int (PASCAL *CHANGEVOLPROC)(char *ArcName,int Mode);
164 typedef int (PASCAL *PROCESSDATAPROC)(unsigned char *Addr,int Size);
165 
166 #ifdef __cplusplus
167 extern "C" {
168 #endif
169 
170 HANDLE PASCAL RAROpenArchive(struct RAROpenArchiveData *ArchiveData);
171 HANDLE PASCAL RAROpenArchiveEx(struct RAROpenArchiveDataEx *ArchiveData);
172 int    PASCAL RARCloseArchive(HANDLE hArcData);
173 int    PASCAL RARReadHeader(HANDLE hArcData,struct RARHeaderData *HeaderData);
174 int    PASCAL RARReadHeaderEx(HANDLE hArcData,struct RARHeaderDataEx *HeaderData);
175 int    PASCAL RARProcessFile(HANDLE hArcData,int Operation,char *DestPath,char *DestName);
176 int    PASCAL RARProcessFileW(HANDLE hArcData,int Operation,wchar_t *DestPath,wchar_t *DestName);
177 void   PASCAL RARSetCallback(HANDLE hArcData,UNRARCALLBACK Callback,LPARAM UserData);
178 void   PASCAL RARSetChangeVolProc(HANDLE hArcData,CHANGEVOLPROC ChangeVolProc);
179 void   PASCAL RARSetProcessDataProc(HANDLE hArcData,PROCESSDATAPROC ProcessDataProc);
180 void   PASCAL RARSetPassword(HANDLE hArcData,char *Password);
181 int    PASCAL RARGetDllVersion();
182 
183 #ifdef __cplusplus
184 }
185 #endif
186 
187 #pragma pack(pop)
188 
189 #endif
190