Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | daniel-mar | 1 | (******************************************************************) |
2 | (* SFX for DelZip v1.9 *) |
||
3 | (* Copyright 2002-2004, 2008 *) |
||
4 | (* *) |
||
5 | (* written by Markus Stephany *) |
||
6 | (* modified by Russell Peters, Roger Aelbrecht |
||
7 | This library is free software; you can redistribute it and/or |
||
8 | modify it under the terms of the GNU Lesser General Public |
||
9 | License as published by the Free Software Foundation; either |
||
10 | version 2.1 of the License, or (at your option) any later version. |
||
11 | |||
12 | This library is distributed in the hope that it will be useful, |
||
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||
15 | Lesser General Public License (licence.txt) for more details. |
||
16 | |||
17 | You should have received a copy of the GNU Lesser General Public |
||
18 | License along with this library; if not, write to the Free Software |
||
19 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
||
20 | |||
21 | contact: problems AT delphizip DOT org |
||
22 | updates: http://www.delphizip.org |
||
23 | |||
24 | modified 30-Jan-2008 |
||
25 | ---------------------------------------------------------------------------*) |
||
26 | unit ZMSFXDefs19; |
||
27 | |||
28 | { |
||
29 | this unit contains most definitions, constants and types used |
||
30 | by the sfx binary of delzip. |
||
31 | |||
32 | } |
||
33 | |||
34 | interface |
||
35 | |||
36 | uses |
||
37 | Messages, Windows; |
||
38 | |||
39 | //{$I DELVER.INC} |
||
40 | {$I ..\ZipVers19.inc} |
||
41 | |||
42 | { Dialog Control-IDs } |
||
43 | const |
||
44 | // buttons !! don't change the order of the first two buttons (SFXDialogs.pas, FileExistsDialogProc) |
||
45 | ID_BTN_YES = 1; // yes/ok-buttons |
||
46 | ID_BTN_NO = 2; // no/cancel-buttons |
||
47 | |||
48 | ID_BTN_ABOUT = 103; // about-button |
||
49 | ID_BTN_BROWSE = 104; // browse for extraction path |
||
50 | ID_BTN_SHOWFILES = 105; // enlarge dialog to show files list box |
||
51 | |||
52 | // edit box |
||
53 | ID_EDITBOX = 201; // path/password edit |
||
54 | |||
55 | // check boxes |
||
56 | ID_CB_NOASK = 301; // file already exist : don't ask again checkbox |
||
57 | ID_CB_RUN = 302; // after extraction, run/install... |
||
58 | |||
59 | // files list view |
||
60 | ID_LV_FILES = 401; // file list view |
||
61 | |||
62 | // lines/edges (gui enhancements) |
||
63 | ID_EDGE_BOTTOM = 502; // lower |
||
64 | |||
65 | // other STATICs |
||
66 | ID_ST_EXTRACTTO = 601; // "extract to" |
||
67 | ID_ST_OVWGROUP = 602; // "existing files:..." |
||
68 | ID_ST_FILES = 501; // "Files:" |
||
69 | |||
70 | // radio buttons !! don't change the order! |
||
71 | ID_RB_OVERWRITE = 701; // overwrite existing files |
||
72 | ID_RB_SKIP = 702; // do not overwrite existing files |
||
73 | ID_RB_CONFIRM = 703; // ask before overwriting |
||
74 | |||
75 | // progress bar |
||
76 | ID_PRG_EXTRACT = 801; // extraction progress |
||
77 | |||
78 | // language combo |
||
79 | ID_LANG_COMBO = 901; |
||
80 | ID_LANG_SELECT = 903; |
||
81 | |||
82 | const |
||
83 | // max password length |
||
84 | MAX_PASSWORD = 80; |
||
85 | |||
86 | const |
||
87 | // request value for Dialogs for setting strings |
||
88 | SFX_DLG_MAIN = 1;//$400; |
||
89 | SFX_DLG_FILE = 2;//$800; |
||
90 | SFX_DLG_PWRD = 3;//$C00; |
||
91 | SFX_DLG_LANG = 4; |
||
92 | |||
93 | // SFX_DLG_MASK = $C00; |
||
94 | |||
95 | type |
||
96 | // crc table type |
||
97 | TCRC32Table = array[0..256] of Cardinal; |
||
98 | |||
99 | const |
||
100 | // window size--must be a power OF two, and at least 32k |
||
101 | WSIZE = 32768; |
||
102 | RAND_HEAD_LEN = 12; |
||
103 | CRC_MASK = HIGH(Cardinal); |
||
104 | // CRC_MASK = {$IFNDEF DELPHI3UP}Cardinal(-1){$ELSE}$FFFFFFFF{$ENDIF}; |
||
105 | SFXSpanTypeNone = 0; |
||
106 | SFXSpanTypeSpanned = 1; |
||
107 | SFXSpanTypeMultiVol = 2; |
||
108 | SFXSpanTypeUnknown = -1; |
||
109 | |||
110 | const |
||
111 | { DEFLATE stuff } |
||
112 | // Tables for deflate from PKZIP's appnote.txt. |
||
113 | |||
114 | // Copy lengths FOR literal codes 257..285 |
||
115 | cplens: array[0..30] of word = (3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, |
||
116 | 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0); |
||
117 | |||
118 | // Copy offsets FOR distance codes 0..29 |
||
119 | cpdist: array[0..29] of word = (1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, |
||
120 | 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, |
||
121 | 8193, 12289, 16385, 24577); |
||
122 | |||
123 | // Extra bits FOR literal codes 257..285 |
||
124 | cplext: array[0..30] of byte = (0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, |
||
125 | 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99); { 99==invalid } |
||
126 | |||
127 | // Extra bits FOR distance codes |
||
128 | cpdext: array[0..29] of byte = (0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, |
||
129 | 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13); |
||
130 | |||
131 | // AND'ing with mask[n] masks the lower n bits |
||
132 | maskr: array[0..16] of word = ($0000, $0001, $0003, $0007, $000F, $001F, |
||
133 | $003F, $007F, $00FF, $01FF, $03FF, $07FF, $0FFF, $1FFF, $3FFF, $7FFF, $FFFF); |
||
134 | |||
135 | lbits = 9; |
||
136 | dbits = 6; |
||
137 | N_MAX = 288; |
||
138 | |||
139 | type |
||
140 | PT = ^Thuft; |
||
141 | Thuft = packed record |
||
142 | e, |
||
143 | b: shortint; |
||
144 | n: word; |
||
145 | Next: PT; |
||
146 | end; |
||
147 | |||
148 | BufPtr = ^BufType; |
||
149 | BufType = array[0..WSIZE] of byte; |
||
150 | |||
151 | const |
||
152 | { SHBrowseForFolder definitions and functions } |
||
153 | BFFM_INITIALIZED = 1; |
||
154 | {$IFDEF UNICODE} |
||
155 | BFFM_SETSELECTION = WM_USER + 103; |
||
156 | {$ELSE} |
||
157 | BFFM_SETSELECTION = WM_USER + 102; |
||
158 | {$ENDIF} |
||
159 | BFFM_SELCHANGED = 2; |
||
160 | BIF_RETURNONLYFSDIRS = 1; |
||
161 | BIF_NEWDIALOGSTYLE = $40; |
||
162 | BIF_EDITBOX = $10; |
||
163 | BIF_USENEWUI = (BIF_NEWDIALOGSTYLE or BIF_EDITBOX); |
||
164 | |||
165 | type |
||
166 | // browsecallback |
||
167 | TFNBFFCallBack = function(Wnd: HWND; uMsg: UINT; |
||
168 | lParam, lpData: LPARAM): integer; stdcall; |
||
169 | |||
170 | // TSHItemID -- Item ID |
||
171 | TSHItemID = packed record { mkid } |
||
172 | cb: word; { Size of the ID (including cb itself) } |
||
173 | abID: array[0..0] of byte; { The item ID (variable length) } |
||
174 | end; |
||
175 | |||
176 | // TItemIDList -- List if item IDs (combined with 0-terminator) |
||
177 | pItemIDList = ^TItemIDList; |
||
178 | TItemIDList = packed record { idl } |
||
179 | mkid: TSHItemID; |
||
180 | end; |
||
181 | |||
182 | TBrowseInfo = packed record |
||
183 | hwndOwner: HWND; |
||
184 | pidlRoot: pItemIDList; |
||
185 | // pszDisplayName: pAnsiChar; { Return display name of item selected. } |
||
186 | // lpszTitle: pAnsiChar; { text to go in the banner over the tree. } |
||
187 | pszDisplayName: pChar; { Return display name of item selected. } |
||
188 | lpszTitle: pChar; { text to go in the banner over the tree. } |
||
189 | ulFlags: UINT; { Flags that control the return stuff } |
||
190 | lpfn: TFNBFFCallBack; |
||
191 | lParam: LPARAM; { extra info that's passed back in callbacks } |
||
192 | iImage: integer; { output var: where to return the Image index. } |
||
193 | end; |
||
194 | |||
195 | |||
196 | // {$IFDEF DELPHI3UP} |
||
197 | // Lucjan Lukasik |
||
198 | { IMalloc interface } |
||
199 | |||
200 | IMalloc = interface(IUnknown) |
||
201 | ['{00000002-0000-0000-C000-000000000046}'] |
||
202 | function Alloc(cb: longint): Pointer; stdcall; |
||
203 | function Realloc(pv: Pointer; cb: longint): Pointer; stdcall; |
||
204 | procedure Free(pv: Pointer); stdcall; |
||
205 | function GetSize(pv: Pointer): longint; stdcall; |
||
206 | function DidAlloc(pv: Pointer): integer; stdcall; |
||
207 | procedure HeapMinimize; stdcall; |
||
208 | end; |
||
209 | // {$ENDIF} |
||
210 | |||
211 | PSHFileInfo = ^TSHFileInfo; |
||
212 | TSHFileInfo = record |
||
213 | hIcon: HICON; |
||
214 | iIcon: Integer; |
||
215 | dwAttributes: Cardinal; |
||
216 | szDisplayName: array [0..MAX_PATH-1] of Char; |
||
217 | szTypeName: array [0..79] of Char; |
||
218 | end; |
||
219 | const |
||
220 | SHGFI_SYSICONINDEX = $000004000; |
||
221 | SHGFI_SELECTED = $000010000; |
||
222 | SHGFI_SMALLICON = $000000001; |
||
223 | SHGFI_SHELLICONSIZE = $000000004; |
||
224 | SHGFI_USEFILEATTRIBUTES = $000000010; |
||
225 | |||
226 | //{$ENDIF} |
||
227 | const |
||
228 | // progressbar defs |
||
229 | PBM_SETRANGE = WM_USER + 1; |
||
230 | PBM_SETPOS = WM_USER + 2; |
||
231 | |||
232 | { strings } |
||
233 | Chr_DirSep = '\'; |
||
234 | |||
235 | {! do not localize dialog resource names below !} |
||
236 | { dialog resource names } |
||
237 | Str_Dlg_Main = 'MAINDIALOG'; // main dialog res |
||
238 | Str_Dlg_Password = 'PASSWD'; // password input box |
||
239 | Str_Dlg_FileExists = 'FILEEXIST'; // overwrite file confirmation dialog |
||
240 | Str_Dlg_Language = 'LANGS'; // languages dialog res |
||
241 | {! do not localize dialog resource names above !} |
||
242 | |||
243 | // stuff different between delphi versions |
||
244 | type |
||
245 | //{$IFDEF DELPHI4UP} // may be incorrect (DELPHI3UP?) |
||
246 | //{$IFDEF VERD4up} |
||
247 | TWriteFileWritten = Cardinal; |
||
248 | //{$ELSE} |
||
249 | // TWriteFileWritten = Integer; |
||
250 | //{$ENDIF} |
||
251 | |||
252 | // stuff not defined in delphi 2 |
||
253 | //{$I missing_types.inc} |
||
254 | |||
255 | |||
256 | // list view definitions |
||
257 | const |
||
258 | LVFI_STRING = $0002; |
||
259 | |||
260 | LVCFMT_LEFT = $0000; |
||
261 | LVCFMT_RIGHT = $0001; |
||
262 | LVCFMT_CENTER = $0002; |
||
263 | LVCFMT_JUSTIFYMASK = $0003; |
||
264 | |||
265 | LVCF_FMT = $0001; |
||
266 | LVCF_WIDTH = $0002; |
||
267 | LVCF_TEXT = $0004; |
||
268 | LVCF_SUBITEM = $0008; |
||
269 | LVCF_IMAGE = $0010; |
||
270 | LVCF_ORDER = $0020; |
||
271 | |||
272 | LVSIL_SMALL = 1; |
||
273 | |||
274 | LVS_EX_FULLROWSELECT = $00000020; |
||
275 | |||
276 | LVN_FIRST = 0-100; |
||
277 | LVN_ITEMCHANGING = LVN_FIRST-0; |
||
278 | LVN_ITEMCHANGED = LVN_FIRST-1; |
||
279 | |||
280 | LVM_FIRST = $1000; |
||
281 | LVM_SETIMAGELIST = LVM_FIRST + 3; |
||
282 | LVM_GETITEMCOUNT = LVM_FIRST + 4; |
||
283 | LVM_GETITEMA = LVM_FIRST + 5; |
||
284 | LVM_GETITEMW = LVM_FIRST + 75; |
||
285 | LVM_SETITEMA = LVM_FIRST + 6; |
||
286 | LVM_SETITEMW = LVM_FIRST + 76; |
||
287 | LVM_INSERTITEMA = LVM_FIRST + 7; |
||
288 | LVM_INSERTITEMW = LVM_FIRST + 77; |
||
289 | LVM_FINDITEMA = LVM_FIRST + 13; |
||
290 | LVM_FINDITEMW = LVM_FIRST + 83; |
||
291 | LVM_ENSUREVISIBLE = LVM_FIRST + 19; |
||
292 | LVM_SETCOLUMNA = LVM_FIRST + 26; |
||
293 | LVM_SETCOLUMNW = LVM_FIRST + 96; |
||
294 | LVM_INSERTCOLUMNA = LVM_FIRST + 27; |
||
295 | LVM_INSERTCOLUMNW = LVM_FIRST + 97; |
||
296 | LVM_SETITEMSTATE = LVM_FIRST + 43; |
||
297 | LVM_GETITEMSTATE = LVM_FIRST + 44; |
||
298 | LVM_GETITEMTEXTA = LVM_FIRST + 45; |
||
299 | LVM_GETITEMTEXTW = LVM_FIRST + 115; |
||
300 | LVM_GETSELECTEDCOUNT = LVM_FIRST + 50; |
||
301 | LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54; |
||
302 | {$IFDEF UNICODE} |
||
303 | LVM_GETITEM = LVM_GETITEMW; |
||
304 | LVM_SETITEM = LVM_SETITEMW; |
||
305 | LVM_INSERTITEM = LVM_INSERTITEMW; |
||
306 | LVM_FINDITEM = LVM_FINDITEMW; |
||
307 | LVM_SETCOLUMN = LVM_SETCOLUMNW; |
||
308 | LVM_INSERTCOLUMN = LVM_INSERTCOLUMNW; |
||
309 | LVM_GETITEMTEXT = LVM_GETITEMTEXTW; |
||
310 | {$ELSE} |
||
311 | LVM_GETITEM = LVM_GETITEMA; |
||
312 | LVM_SETITEM = LVM_SETITEMA; |
||
313 | LVM_INSERTITEM = LVM_INSERTITEMA; |
||
314 | LVM_FINDITEM = LVM_FINDITEMA; |
||
315 | LVM_SETCOLUMN = LVM_SETCOLUMNA; |
||
316 | LVM_INSERTCOLUMN = LVM_INSERTCOLUMNA; |
||
317 | LVM_GETITEMTEXT = LVM_GETITEMTEXTA; |
||
318 | {$ENDIF} |
||
319 | |||
320 | CCM_FIRST = $2000; { Common control shared messages } |
||
321 | CCM_SETUNICODEFORMAT = CCM_FIRST + 5; |
||
322 | CCM_GETUNICODEFORMAT = CCM_FIRST + 6; |
||
323 | |||
324 | type |
||
325 | PLVColumn = ^TLVColumn; |
||
326 | TLVCOLUMN = packed record |
||
327 | mask: Cardinal; |
||
328 | fmt: Integer; |
||
329 | cx: Integer; |
||
330 | pszText: PChar; |
||
331 | cchTextMax: Integer; |
||
332 | iSubItem: Integer; |
||
333 | iImage: Integer; |
||
334 | iOrder: Integer; |
||
335 | end; |
||
336 | |||
337 | PLVFindInfo = ^TLVFindInfo; |
||
338 | TLVFindInfo = packed record |
||
339 | flags: UINT; |
||
340 | psz: PChar; |
||
341 | lParam: LPARAM; |
||
342 | pt: TPoint; |
||
343 | vkDirection: UINT; |
||
344 | end; |
||
345 | |||
346 | |||
347 | const |
||
348 | LVIF_TEXT = $0001; |
||
349 | LVIF_IMAGE = $0002; |
||
350 | LVIF_PARAM = $0004; |
||
351 | LVIF_STATE = $0008; |
||
352 | |||
353 | LVIS_SELECTED = $0002; |
||
354 | |||
355 | ICC_LISTVIEW_CLASSES = $00000001; // listview, header |
||
356 | ICC_TREEVIEW_CLASSES = $00000002; // treeview, tooltips |
||
357 | ICC_BAR_CLASSES = $00000004; // toolbar, statusbar, trackbar, tooltips |
||
358 | ICC_TAB_CLASSES = $00000008; // tab, tooltips |
||
359 | ICC_UPDOWN_CLASS = $00000010; // updown |
||
360 | ICC_PROGRESS_CLASS = $00000020; // progress |
||
361 | ICC_HOTKEY_CLASS = $00000040; // hotkey |
||
362 | ICC_ANIMATE_CLASS = $00000080; // animate |
||
363 | ICC_WIN95_CLASSES = $000000FF; |
||
364 | ICC_DATE_CLASSES = $00000100; // month picker, date picker, time picker, updown |
||
365 | ICC_USEREX_CLASSES = $00000200; // comboex |
||
366 | ICC_COOL_CLASSES = $00000400; // rebar (coolbar) control |
||
367 | ICC_STANDARD_CLASSES = $00004000; |
||
368 | |||
369 | type |
||
370 | PLVItem = ^TLVItem; |
||
371 | TLVITEM = packed record |
||
372 | mask: Cardinal; |
||
373 | iItem: Integer; |
||
374 | iSubItem: Integer; |
||
375 | state: Cardinal; |
||
376 | stateMask: Cardinal; |
||
377 | pszText: PChar; |
||
378 | cchTextMax: Integer; |
||
379 | iImage: Integer; |
||
380 | lParam: LPARAM; |
||
381 | iIndent: Integer; |
||
382 | |||
383 | // iGroupId: Integer; |
||
384 | // cColumns: Integer;{ tile view columns } |
||
385 | // puColumns: PUINT; |
||
386 | end; |
||
387 | |||
388 | PNMListView = ^TNMListView; |
||
389 | TNMListView = packed record |
||
390 | hdr: TNMHDR; |
||
391 | iItem: Integer; |
||
392 | iSubItem: Integer; |
||
393 | uNewState: UINT; |
||
394 | uOldState: UINT; |
||
395 | uChanged: UINT; |
||
396 | ptAction: TPoint; |
||
397 | lParam: LPARAM; |
||
398 | end; |
||
399 | |||
400 | PCCInitCommonControlsEx = ^TCCInitCommonControlsEx; |
||
401 | TCCInitCommonControlsEx = packed record |
||
402 | dwSize: DWORD; |
||
403 | dwICC: DWORD; |
||
404 | end; |
||
405 | |||
406 | { api definitions } |
||
407 | // initialize common controls (progress bar) |
||
408 | //procedure InitCommonControls; stdcall; external 'comctl32.dll' Name 'InitCommonControls'; |
||
409 | function InitCommonControlsEx(const IntCtrls : PCCINITCOMMONCONTROLSEX): LongBool; stdcall; |
||
410 | external 'comctl32.dll' Name 'InitCommonControlsEx'; |
||
411 | |||
412 | {$IFDEF UNICODE} |
||
413 | // needed by ShBrowseForFolder |
||
414 | function SHBrowseForFolder(var lpbi: TBrowseInfo): pItemIDList; stdcall; |
||
415 | external 'shell32.dll' Name 'SHBrowseForFolderW'; |
||
416 | |||
417 | function SHGetPathFromIDList(pidl: pItemIDList; pszPath: PChar): BOOL; |
||
418 | stdcall; external 'shell32.dll' Name 'SHGetPathFromIDListW'; |
||
419 | {$ELSE} |
||
420 | function SHBrowseForFolder(var lpbi: TBrowseInfo): pItemIDList; stdcall; |
||
421 | external 'shell32.dll' Name 'SHBrowseForFolderA'; |
||
422 | |||
423 | function SHGetPathFromIDList(pidl: pItemIDList; pszPath: PAnsiChar): BOOL; |
||
424 | stdcall; external 'shell32.dll' Name 'SHGetPathFromIDListA'; |
||
425 | {$ENDIF} |
||
426 | |||
427 | //{$IFDEF DELPHI3UP} |
||
428 | function SHGetMalloc(var ppMalloc: IMalloc): HResult; stdcall; |
||
429 | external 'shell32.dll' Name 'SHGetMalloc'; // Lucjan Lukasik |
||
430 | //{$ENDIF} |
||
431 | |||
432 | {$IFDEF UNICODE} |
||
433 | function SHGetFileInfo(pszPath: PChar; dwFileAttributes: DWORD; |
||
434 | var psfi: TSHFileInfo; cbFileInfo, uFlags: Cardinal): DWORD; stdcall; |
||
435 | external 'shell32.dll' name 'SHGetFileInfoW'; |
||
436 | {$ELSE} |
||
437 | function SHGetFileInfo(pszPath: PAnsiChar; dwFileAttributes: DWORD; |
||
438 | var psfi: TSHFileInfo; cbFileInfo, uFlags: Cardinal): DWORD; stdcall; |
||
439 | external 'shell32.dll' name 'SHGetFileInfoA'; |
||
440 | {$ENDIF} |
||
441 | |||
442 | function ShellExecute(hWnd: HWND; Operation, FileName, Parameters, Directory: PChar; |
||
443 | ShowCmd: integer): HINST; stdcall; external 'shell32.dll' Name 'ShellExecuteA'; |
||
444 | |||
445 | implementation |
||
446 | |||
447 | end. |