Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | daniel-mar | 1 | (******************************************************************) |
2 | (* SFX for DelZip v1.8 *) |
||
3 | (* Copyright 2002-2004, 2008 *) |
||
4 | (* *) |
||
5 | (* written by Markus Stephany *) |
||
6 | (* modified by Russell Peters, Roger Aelbrecht |
||
7 | Copyright (C) 2009, 2010 by Russell J. Peters, Roger Aelbrecht, |
||
8 | Eric W. Engler and Chris Vleghert. |
||
9 | |||
10 | This file is part of TZipMaster Version 1.9. |
||
11 | |||
12 | TZipMaster is free software: you can redistribute it and/or modify |
||
13 | it under the terms of the GNU Lesser General Public License as published by |
||
14 | the Free Software Foundation, either version 3 of the License, or |
||
15 | (at your option) any later version. |
||
16 | |||
17 | TZipMaster is distributed in the hope that it will be useful, |
||
18 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
19 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
20 | GNU Lesser General Public License for more details. |
||
21 | |||
22 | You should have received a copy of the GNU Lesser General Public License |
||
23 | along with TZipMaster. If not, see <http://www.gnu.org/licenses/>. |
||
24 | |||
25 | contact: problems@delphizip.org (include ZipMaster in the subject). |
||
26 | updates: http://www.delphizip.org |
||
27 | DelphiZip maillist subscribe at http://www.freelists.org/list/delphizip |
||
28 | |||
29 | modified 30-Jan-2008 |
||
30 | ---------------------------------------------------------------------------*) |
||
31 | unit ZMSFXStrings19; |
||
32 | |||
33 | { |
||
34 | this unit contains localized strings |
||
35 | |||
36 | } |
||
37 | |||
38 | interface |
||
39 | |||
40 | uses Windows; |
||
41 | |||
42 | const |
||
43 | SFX_LVC_Filename = 1;//1024; // 'Filename'; |
||
44 | SFX_LVC_Filesize = 2;//1025; // 'Size'; |
||
45 | |||
46 | // error messages |
||
47 | SFX_Err_CannotCloseFile = 3;//1040; // 'Cannot close ><'; |
||
48 | SFX_Err_Archive = 5;//1041; // 'Error reading archive ><'; |
||
49 | SFX_Err_InvalidFileName = 6;//1042; // 'Invalid filename.'; |
||
50 | SFX_Err_Directory = 7;//1043; // 'Error in directory ><'; |
||
51 | SFX_Err_ZipUnknownComp = 8;//1044; // 'Unknown compression type'; |
||
52 | SFX_Err_ArchiveCorrupted = 9;//1045; // 'Archive corrupted, please try to download this file again.'; |
||
53 | SFX_Err_CannotOpenFile = 10;//1046; // 'Cannot open ><'; |
||
54 | SFX_Err_CannotWriteFile = 11;//1047; // 'Cannot write to ><'; |
||
55 | SFX_Err_Run_Run = 12;//1048; // 'Couldn''t run >< ><'; |
||
56 | SFX_Err_Run_Inst = 13;//1049; // 'Couldn''t install >< ><'; |
||
57 | SFX_Err_CRC32 = 14;//1050; // 'CRC32 Error in ><'; |
||
58 | // SFX_Err_BadFilename = 15; |
||
59 | |||
60 | // messages |
||
61 | SFX_Msg_RunCheckBox_Run = 16;//1072; // 'After extraction, run: >< ><'; |
||
62 | SFX_Msg_RunCheckBox_Inst = 17;//1073; // 'After extraction, install: >< ><'; |
||
63 | SFX_Msg_FileExists = 18;//1074; // '>< already exists, overwrite ?'; |
||
64 | SFX_Msg_AllExtracted = 19;//1075; // 'All files have been extracted.'; |
||
65 | SFX_Msg_SelNotExtracted = 20;//1076; // 'The selected file(s) couldn''t get extracted.'; |
||
66 | SFX_Msg_SomeNotExtracted = 21;//1077; // 'Some file(s) couldn''t get extracted.'; |
||
67 | SFX_Msg_QueryCancel = 22;//1078; // 'Do you want to cancel extraction?'; |
||
68 | SFX_Msg_InsertDiskVolume = 23;//1079; // 'Please insert disk volume >< in drive ><'; |
||
69 | |||
70 | // about text |
||
71 | // SFX_Msg_About = 1088; |
||
72 | SFX_MSG_ABOUT0 = 60; |
||
73 | SFX_MSG_ABOUT1 = 61; |
||
74 | SFX_MSG_AUTHORS = 62;//1089;//'The authors'; |
||
75 | SFX_MSG_ABOUT2 = 63; |
||
76 | SFX_MSG_CREDITS = 64;//1090;//'Credits to'; |
||
77 | SFX_MSG_ABOUT3 = 65; |
||
78 | SFX_MSG_TRANSLATION = 66;//1091;//' '; |
||
79 | |||
80 | // message / dialog box titles |
||
81 | SFX_Cap_Err = 28;//1104; // 'Error...'; |
||
82 | SFX_Cap_App = 29;//1105; // 'DelZip Self-Extractor'; |
||
83 | SFX_Cap_Browse = 30;//1106; // 'Please choose the destination directory'; |
||
84 | SFX_Cap_About = 31;//1107; // 'About DelZip Self-Extractor...'; |
||
85 | SFX_Cap_Finished = 32;//1108; // 'Finished.'; |
||
86 | SFX_Cap_Password = 33;//1109; // 'Enter password for ><:'; |
||
87 | // Main Dialog buttons |
||
88 | SFX_Btn_Start = 34;//1120; // 1 |
||
89 | SFX_Btn_Close = 35;//1121; // 2 |
||
90 | SFX_Btn_About = 36;//1122; // 103 |
||
91 | SFX_Btn_Files = 37;//1123; // 501 |
||
92 | SFX_Btn_Existing = 38;//1124; // 602 |
||
93 | SFX_Btn_ShowFiles = 39;//1125; // 105 |
||
94 | SFX_Btn_ExtractTo = 40;//1126; // 601 |
||
95 | SFX_Btn_OvrAsk = 41;//1127; // 703 |
||
96 | SFX_Btn_OvrSkip = 42;//1128; // 702 |
||
97 | SFX_Btn_OvrAll = 43;//1129; // 701 |
||
98 | // FileExists Dialog |
||
99 | SFX_Btn_Yes = 44;//1136; // 1 |
||
100 | SFX_Btn_No = 46;//1137; // 2 |
||
101 | SFX_Btn_DontAsk = 47;//1138; // 301 |
||
102 | // Password Dialog |
||
103 | SFX_Btn_Ok = 48;//1152; // 1 |
||
104 | SFX_Btn_Cancel = 49;//1153; // 2 |
||
105 | // Dialog titles |
||
106 | SFX_Ttl_Main = 50;//1068; |
||
107 | SFX_Ttl_File = 51;//1069; |
||
108 | SFX_Ttl_PWrd = 52;//1070; |
||
109 | // Language Dialog |
||
110 | SFX_Btn_Select = 53;//1085; |
||
111 | |||
112 | |||
113 | Var |
||
114 | VRec_DefStrings: PByte = nil; // pointer to table of strings |
||
115 | VRec_Strings: PByte = nil; // pointer to table of strings |
||
116 | |||
117 | const |
||
118 | MaxStringLen = MAX_PATH * 2; |
||
119 | |||
120 | procedure SetDlgStrings(Dlg: hWnd; val: cardinal); |
||
121 | function SFXString(id: integer): string; |
||
122 | |||
123 | function To_Str(CP: Integer; Source: pAnsiChar; len: integer; IsName: Boolean; |
||
124 | var Bad: boolean): string; |
||
125 | |||
126 | // table format - ident: byte, strng[]: byte, 0: byte; ...;0 |
||
127 | function LoadSFXStr(ptbl: pByte; ident: Byte): String; |
||
128 | |||
129 | implementation |
||
130 | |||
131 | uses |
||
132 | ZMSFXDefs19; |
||
133 | |||
134 | type |
||
135 | IdTbleRec2 = packed record |
||
136 | DlgId: byte; |
||
137 | Ctrl: word; |
||
138 | StrId: byte; |
||
139 | end; |
||
140 | |||
141 | const |
||
142 | SOFF = 0;//1024; |
||
143 | IdTbl1: array [0..22] of IdTbleRec2 = ( |
||
144 | (DlgID: SFX_DLG_MAIN; Ctrl: 0; StrId: SFX_Ttl_Main - SOFF), |
||
145 | (DlgID: SFX_DLG_MAIN; Ctrl: 1; StrId: SFX_Btn_Start - SOFF), |
||
146 | (DlgID: SFX_DLG_MAIN; Ctrl: 2; StrId: SFX_Btn_Close - SOFF), |
||
147 | (DlgID: SFX_DLG_MAIN; Ctrl: 103; StrId: SFX_Btn_About - SOFF), |
||
148 | (DlgID: SFX_DLG_MAIN; Ctrl: 501; StrId: SFX_Btn_Files - SOFF), |
||
149 | (DlgID: SFX_DLG_MAIN; Ctrl: 602; StrId: SFX_Btn_Existing - SOFF), |
||
150 | (DlgID: SFX_DLG_MAIN; Ctrl: 601; StrId: SFX_Btn_ExtractTo - SOFF), |
||
151 | (DlgID: SFX_DLG_MAIN; Ctrl: 105; StrId: SFX_Btn_ShowFiles - SOFF), |
||
152 | (DlgID: SFX_DLG_MAIN; Ctrl: 703; StrId: SFX_Btn_OVRAsk - SOFF), |
||
153 | (DlgID: SFX_DLG_MAIN; Ctrl: 702; StrId: SFX_Btn_OVRSkip - SOFF), |
||
154 | (DlgID: SFX_DLG_MAIN; Ctrl: 701; StrId: SFX_Btn_OVRAll - SOFF), |
||
155 | (DlgID: SFX_DLG_FILE; Ctrl: 0; StrId: SFX_Ttl_File - SOFF), |
||
156 | (DlgID: SFX_DLG_FILE; Ctrl: 1; StrId: SFX_Btn_Yes - SOFF), |
||
157 | (DlgID: SFX_DLG_FILE; Ctrl: 2; StrId: SFX_Btn_No - SOFF), |
||
158 | (DlgID: SFX_DLG_FILE; Ctrl: 301; StrId: SFX_Btn_DontAsk - SOFF), |
||
159 | (DlgID: SFX_DLG_PWRD; Ctrl: 0; StrId: SFX_Ttl_PWrd - SOFF), |
||
160 | (DlgID: SFX_DLG_PWRD; Ctrl: 1; StrId: SFX_Btn_Ok - SOFF), |
||
161 | (DlgID: SFX_DLG_PWRD; Ctrl: 2; StrId: SFX_Btn_Cancel - SOFF), |
||
162 | (DlgID: SFX_DLG_LANG; Ctrl: 0; StrId: SFX_Ttl_Main - SOFF), |
||
163 | (DlgID: SFX_DLG_LANG; Ctrl: 1; StrId: SFX_Btn_Ok - SOFF), |
||
164 | (DlgID: SFX_DLG_LANG; Ctrl: 2; StrId: SFX_Btn_Close - SOFF), |
||
165 | (DlgID: SFX_DLG_LANG; Ctrl: ID_LANG_SELECT; StrId: SFX_Btn_Select - SOFF), |
||
166 | (DlgID: 0; Ctrl: 0; StrId: 0) |
||
167 | ); |
||
168 | |||
169 | procedure SetDlgStrings(Dlg: hWnd; val: cardinal); |
||
170 | var |
||
171 | d: cardinal; |
||
172 | i: cardinal; |
||
173 | s: string; |
||
174 | x: cardinal; |
||
175 | begin |
||
176 | i := 0; |
||
177 | repeat |
||
178 | d := IdTbl1[i].DlgId; |
||
179 | if d = val then |
||
180 | begin |
||
181 | s := SFXString(IdTbl1[i].StrId + SOFF); |
||
182 | if s <> '' then |
||
183 | begin |
||
184 | x := IdTbl1[i].Ctrl; |
||
185 | if x = 0 then |
||
186 | SetWindowText(Dlg, pChar(s)) |
||
187 | else |
||
188 | SetDlgItemText(Dlg, x, PChar(s)); |
||
189 | end; |
||
190 | end; |
||
191 | Inc(i); |
||
192 | until (d = 0) or (d > val); |
||
193 | end; |
||
194 | |||
195 | function StrHasExt(Source: pAnsiChar; len: integer): Boolean; |
||
196 | var |
||
197 | c: AnsiChar; |
||
198 | i: integer; |
||
199 | begin |
||
200 | Result := false; |
||
201 | if len < 0 then |
||
202 | len := 4096; |
||
203 | for i := 1 to Len do |
||
204 | begin |
||
205 | c := Source^; |
||
206 | if c = #0 then |
||
207 | break; |
||
208 | if (c > #126) {or (c < #31)} then |
||
209 | begin |
||
210 | Result := True; |
||
211 | break; |
||
212 | end; |
||
213 | inc(Source); |
||
214 | end; |
||
215 | end; |
||
216 | |||
217 | |||
218 | function To_Str(CP: Integer; Source: pAnsiChar; len: integer; IsName: Boolean; |
||
219 | var Bad: boolean): string; |
||
220 | const |
||
221 | WC_NO_BEST_FIT_CHARS = $00000400; // do not use best fit chars |
||
222 | var |
||
223 | {$IFNDEF UNICODE} |
||
224 | buffer: array [0..(MaxStringLen + 3)] of widechar; |
||
225 | cnt: integer; |
||
226 | flg: cardinal; |
||
227 | notsup: longBool; |
||
228 | {$ENDIF} |
||
229 | wcnt: integer; |
||
230 | begin |
||
231 | Result := ''; |
||
232 | Bad := false; // hopefully |
||
233 | if Source^ = #0 then |
||
234 | exit; |
||
235 | {$IFNDEF UNICODE} |
||
236 | if (CP = 0) and (len > 0) then |
||
237 | begin |
||
238 | SetLength(Result, len); |
||
239 | Move(Source^, PChar(Result)^, len); |
||
240 | exit; |
||
241 | end; |
||
242 | wcnt := MultiByteToWideChar(CP, 0, Source, len, nil, 0); |
||
243 | if (wcnt > 0) and (wcnt < MaxStringLen) then |
||
244 | begin |
||
245 | wcnt := MultiByteToWideChar(CP, 0, Source, len, |
||
246 | pWideChar(@buffer[0]), MaxStringLen); |
||
247 | if wcnt > 0 then |
||
248 | begin |
||
249 | buffer[wcnt] := #0; |
||
250 | if IsName then |
||
251 | flg := WC_NO_BEST_FIT_CHARS |
||
252 | else |
||
253 | flg := 0; |
||
254 | cnt := WideCharToMultiByte(0, flg, pWideChar(@buffer[0]), |
||
255 | wcnt + 1, nil, 0, nil, @notsup); |
||
256 | Bad := IsName and notsup; |
||
257 | if (cnt > 0) then |
||
258 | begin |
||
259 | SetLength(Result, cnt); |
||
260 | cnt := WideCharToMultiByte(0, flg, pWideChar(@buffer[0]), |
||
261 | wcnt + 1, PAnsiChar(Result), cnt, nil, nil); |
||
262 | if cnt = 0 then |
||
263 | Bad := True |
||
264 | else |
||
265 | Result := PAnsiChar(Result); |
||
266 | end; |
||
267 | end; |
||
268 | end; |
||
269 | {$ELSE} |
||
270 | wcnt := MultiByteToWideChar(CP, 0, Source, len, nil, 0); |
||
271 | if (wcnt > 0) then |
||
272 | begin |
||
273 | SetLength(Result, wcnt); |
||
274 | wcnt := MultiByteToWideChar(CP, 0, Source, len, PChar(Result), wcnt); |
||
275 | if (wcnt > 0) then |
||
276 | Result := PWideChar(Result); // don't want end 0 |
||
277 | end |
||
278 | else |
||
279 | Bad := True; |
||
280 | {$ENDIF} |
||
281 | end; |
||
282 | |||
283 | |||
284 | // table format - ident: byte, strng[]: byte, 0: byte; ...;0 |
||
285 | function LoadSFXStr(ptbl: pByte; ident: Byte): String; |
||
286 | var |
||
287 | bad: Boolean; |
||
288 | id: Byte; |
||
289 | begin |
||
290 | Result := ''; |
||
291 | if (ptbl = nil) or (ident = 0) then |
||
292 | exit; |
||
293 | id := ptbl^; |
||
294 | while (id <> 0) and (id <> ident) do |
||
295 | begin |
||
296 | while ptbl^ <> 0 do |
||
297 | inc(ptbl); |
||
298 | inc(ptbl); |
||
299 | id := ptbl^; |
||
300 | end; |
||
301 | if id = ident then |
||
302 | begin |
||
303 | inc(ptbl); |
||
304 | Result := To_Str(CP_UTF8, pAnsiChar(ptbl), -1, false, bad); |
||
305 | end; |
||
306 | end; |
||
307 | |||
308 | function SFXString(id: integer): string; |
||
309 | begin |
||
310 | Result := ''; |
||
311 | if VRec_Strings <> nil then |
||
312 | Result := LoadSFXStr(VRec_Strings, id); |
||
313 | if Result = '' then |
||
314 | // Result := LoadSFXStr(@StrBlok, {true,} id); |
||
315 | begin |
||
316 | if VRec_DefStrings <> nil then |
||
317 | Result := LoadSFXStr(VRec_DefStrings, id) |
||
318 | else |
||
319 | begin |
||
320 | MessageBox(0, 'Missing resource!', 'DelphiZip SFX', MB_ICONSTOP or MB_TASKMODAL); |
||
321 | Halt(2); |
||
322 | end; |
||
323 | end; |
||
324 | end; |
||
325 | |||
326 | end. |