1 #ifndef _UNRAR_DLL_
2 #define _UNRAR_DLL_
3 
4 #pragma pack(1)
5 
6 #define ERAR_END_ARCHIVE        10
7 #define ERAR_NO_MEMORY          11
8 #define ERAR_BAD_DATA           12
9 #define ERAR_BAD_ARCHIVE        13
10 #define ERAR_UNKNOWN_FORMAT     14
11 #define ERAR_EOPEN              15
12 #define ERAR_ECREATE            16
13 #define ERAR_ECLOSE             17
14 #define ERAR_EREAD              18
15 #define ERAR_EWRITE             19
16 #define ERAR_SMALL_BUF          20
17 #define ERAR_UNKNOWN            21
18 #define ERAR_MISSING_PASSWORD   22
19 
20 #define RAR_OM_LIST              0
21 #define RAR_OM_EXTRACT           1
22 #define RAR_OM_LIST_INCSPLIT     2
23 
24 #define RAR_SKIP              0
25 #define RAR_TEST              1
26 #define RAR_EXTRACT           2
27 
28 #define RAR_VOL_ASK           0
29 #define RAR_VOL_NOTIFY        1
30 
31 #define RAR_DLL_VERSION       5
32 
33 #ifdef _UNIX
34 #define CALLBACK
35 #define PASCAL
36 #define LONG long
37 #define HANDLE void *
38 #define LPARAM long
39 #define UINT unsigned int
40 #endif
41 
42 struct RARHeaderData
43 {
44   char         ArcName[260];
45   char         FileName[260];
46   unsigned int Flags;
47   unsigned int PackSize;
48   unsigned int UnpSize;
49   unsigned int HostOS;
50   unsigned int FileCRC;
51   unsigned int FileTime;
52   unsigned int UnpVer;
53   unsigned int Method;
54   unsigned int FileAttr;
55   char         *CmtBuf;
56   unsigned int CmtBufSize;
57   unsigned int CmtSize;
58   unsigned int CmtState;
59 };
60 
61 
62 struct RARHeaderDataEx
63 {
64   char         ArcName[1024];
65   wchar_t      ArcNameW[1024];
66   char         FileName[1024];
67   wchar_t      FileNameW[1024];
68   unsigned int Flags;
69   unsigned int PackSize;
70   unsigned int PackSizeHigh;
71   unsigned int UnpSize;
72   unsigned int UnpSizeHigh;
73   unsigned int HostOS;
74   unsigned int FileCRC;
75   unsigned int FileTime;
76   unsigned int UnpVer;
77   unsigned int Method;
78   unsigned int FileAttr;
79   char         *CmtBuf;
80   unsigned int CmtBufSize;
81   unsigned int CmtSize;
82   unsigned int CmtState;
83   unsigned int Reserved[1024];
84 };
85 
86 
87 struct RAROpenArchiveData
88 {
89   char         *ArcName;
90   unsigned int OpenMode;
91   unsigned int OpenResult;
92   char         *CmtBuf;
93   unsigned int CmtBufSize;
94   unsigned int CmtSize;
95   unsigned int CmtState;
96 };
97 
98 typedef int (CALLBACK *UNRARCALLBACK)(UINT msg,LPARAM UserData,LPARAM P1,LPARAM P2);
99 
100 struct RAROpenArchiveDataEx
101 {
102   char         *ArcName;
103   wchar_t      *ArcNameW;
104   unsigned int  OpenMode;
105   unsigned int  OpenResult;
106   char         *CmtBuf;
107   unsigned int  CmtBufSize;
108   unsigned int  CmtSize;
109   unsigned int  CmtState;
110   unsigned int  Flags;
111   UNRARCALLBACK Callback;
112   LPARAM        UserData;
113   unsigned int  Reserved[28];
114 };
115 
116 enum UNRARCALLBACK_MESSAGES {
117   UCM_CHANGEVOLUME,UCM_PROCESSDATA,UCM_NEEDPASSWORD
118 };
119 
120 typedef int (PASCAL *CHANGEVOLPROC)(char *ArcName,int Mode);
121 typedef int (PASCAL *PROCESSDATAPROC)(unsigned char *Addr,int Size);
122 
123 #ifdef __cplusplus
124 extern "C" {
125 #endif
126 
127 HANDLE PASCAL RAROpenArchive(struct RAROpenArchiveData *ArchiveData);
128 HANDLE PASCAL RAROpenArchiveEx(struct RAROpenArchiveDataEx *ArchiveData);
129 int    PASCAL RARCloseArchive(HANDLE hArcData);
130 int    PASCAL RARReadHeader(HANDLE hArcData,struct RARHeaderData *HeaderData);
131 int    PASCAL RARReadHeaderEx(HANDLE hArcData,struct RARHeaderDataEx *HeaderData);
132 int    PASCAL RARProcessFile(HANDLE hArcData,int Operation,char *DestPath,char *DestName);
133 int    PASCAL RARProcessFileW(HANDLE hArcData,int Operation,wchar_t *DestPath,wchar_t *DestName);
134 void   PASCAL RARSetCallback(HANDLE hArcData,UNRARCALLBACK Callback,LPARAM UserData);
135 void   PASCAL RARSetChangeVolProc(HANDLE hArcData,CHANGEVOLPROC ChangeVolProc);
136 void   PASCAL RARSetProcessDataProc(HANDLE hArcData,PROCESSDATAPROC ProcessDataProc);
137 void   PASCAL RARSetPassword(HANDLE hArcData,char *Password);
138 int    PASCAL RARGetDllVersion();
139 
140 #ifdef __cplusplus
141 }
142 #endif
143 
144 #pragma pack()
145 
146 #endif
147