source: oup/releases/0.23a/Unit11_extractor.pas@ 710

Last change on this file since 710 was 23, checked in by alloc, 18 years ago
File size: 8.0 KB
Line 
1UNIT Unit11_extractor;
2INTERFACE
3USES
4 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
5 Dialogs, StdCtrls, ExtCtrls, StrUtils, ComCtrls;
6TYPE
7 TForm11 = Class(TForm)
8 group_select: TGroupBox;
9 group_extract: TGroupBox;
10 group_singlefiles: TGroupBox;
11 btn_sel_dat: TButton;
12 btn_sel_datraw: TButton;
13 btn_sel_datraw_convert: TButton;
14 btn_all_dat: TButton;
15 btn_all_datraw: TButton;
16 btn_all_datraw_convert: TButton;
17 group_onefile: TGroupBox;
18 btn_sel_files_toone: TButton;
19 btn_all_files_toone: TButton;
20 group_progress: TGroupBox;
21 progress: TProgressBar;
22 lbl_progress: TLabel;
23 lbl_estimated: TLabel;
24 btn_abort: TButton;
25 saved: TSaveDialog;
26 panel_extension: TPanel;
27 lbl_filter: TLabel;
28 combo_extension: TComboBox;
29 check_zerobyte: TCheckBox;
30 edit_filtername: TEdit;
31 check_filtername: TCheckBox;
32 list: TListBox;
33 PROCEDURE LoadFileNames;
34 PROCEDURE check_filternameClick(Sender: TObject);
35 PROCEDURE check_zerobyteClick(Sender: TObject);
36 PROCEDURE combo_extensionClick(Sender: TObject);
37 PROCEDURE panel_extensionResize(Sender: TObject);
38 PROCEDURE Recreatelist;
39
40 PROCEDURE FormCreate(Sender: TObject);
41 PROCEDURE FormActivate(Sender: TObject);
42 PROCEDURE FormClose(Sender: TObject; var Action: TCloseAction);
43 PROCEDURE FormResize(Sender: TObject);
44 PROCEDURE Extract(Sender: TObject);
45 PRIVATE
46 PUBLIC
47 END;
48
49VAR
50 Form11: TForm11;
51
52IMPLEMENTATION
53{$R *.dfm}
54USES Unit1_main, Unit2_functions, Unit3_data;
55
56
57PROCEDURE TForm11.Recreatelist;
58 VAR
59 i:LongWord;
60 exts:TStringList;
61 BEGIN
62 combo_extension.Items.Clear;
63 combo_extension.Items.Add('_All files_ ('{+IntToStr(dat_header.Files)}+')');
64 exts:=GetExtensionsList;
65 FOR i:=0 TO High(exts) DO
66 combo_extension.Items.Add(exts[i]);
67 combo_extension.ItemIndex:=0;
68 combo_extensionClick(Self);
69 END;
70
71PROCEDURE TForm11.LoadFileNames;
72 VAR
73 Extension:String[4];
74 no_zero_bytes:Boolean;
75 pattern:String;
76 files:TStringList;
77 i:LongWord;
78 BEGIN
79 Extension:=MidStr(combo_extension.Items.Strings[combo_extension.ItemIndex],1,4);
80 no_zero_bytes:=NOT check_zerobyte.Checked;
81 pattern:='';
82 IF check_filtername.Checked THEN pattern:=edit_filtername.Text;
83 IF Extension='_All' THEN Extension:='';
84
85 files:=GetFilesList(extension,pattern,no_zero_bytes);
86 list.Items.Clear;
87 IF Length(files)>0 THEN
88 FOR i:=0 TO High(files) DO
89 list.Items.Add(files[i]);
90 END;
91
92PROCEDURE TForm11.panel_extensionResize(Sender: TObject);
93 BEGIN
94 combo_extension.Width:=panel_extension.Width-5;
95 edit_filtername.Width:=panel_extension.Width-5;
96 END;
97
98PROCEDURE TForm11.combo_extensionClick(Sender: TObject);
99 BEGIN
100 LoadFileNames;
101 END;
102
103PROCEDURE TForm11.check_zerobyteClick(Sender: TObject);
104 VAR
105 i:Byte;
106 BEGIN
107 LoadFileNames;
108 END;
109
110PROCEDURE TForm11.check_filternameClick(Sender: TObject);
111 BEGIN
112 edit_filtername.Enabled:=NOT check_filtername.Checked;
113 LoadFileNames;
114 END;
115
116
117
118PROCEDURE TForm11.FormResize(Sender: TObject);
119 BEGIN
120 IF Self.Width>=450 THEN BEGIN
121 END ELSE Self.Width:=450;
122 IF Self.Height>=400 THEN BEGIN
123 group_progress.Height:=group_extract.Height-293;
124 END ELSE Self.Height:=400;
125 END;
126
127PROCEDURE TForm11.FormClose(Sender: TObject; var Action: TCloseAction);
128 BEGIN
129 Action:=caFree;
130 Form1.close_window(Self.Name);
131 END;
132
133PROCEDURE TForm11.FormActivate(Sender: TObject);
134 BEGIN
135 Form1.SetActiveWindow(Self.Name);
136 END;
137
138PROCEDURE TForm11.FormCreate(Sender: TObject);
139 BEGIN
140 btn_sel_dat.Caption:= 'Selected files'+CrLf+'(dat contents only)';
141 btn_sel_datraw.Caption:= 'Selected files'+CrLf+'(dat+raw contents)';
142 btn_sel_datraw_convert.Caption:='Selected files'+CrLf+'(dat+raw contents)'+CrLf+'(with convert if possible)';
143 btn_all_dat.Caption:= 'All files in list'+CrLf+'(dat contents only)';
144 btn_all_datraw.Caption:= 'All files in list'+CrLf+'(dat+raw contents)';
145 btn_all_datraw_convert.Caption:='All files in list'+CrLf+'(dat+raw contents)'+CrLf+'(with convert if possible)';
146 btn_sel_files_toone.Caption:= 'Selected files'+CrLf+'(dat contents only)';
147 btn_all_files_toone.Caption:= 'All files in list'+CrLf+'(dat contents only)';
148 END;
149
150PROCEDURE TForm11.Extract(Sender: TObject);
151 VAR
152 sel_only:Boolean;
153 dat_only:Boolean;
154 convert:Boolean;
155 one_file:Boolean;
156 settings:TExportSet;
157 files:LongWord;
158 i,done:LongWord;
159 begintime:Double;
160 BEGIN
161 sel_only:=Pos('sel',TButton(Sender).Name)>0;
162 dat_only:=NOT (Pos('datraw',TButton(Sender).Name)>0);
163 convert:=Pos('convert',TButton(Sender).Name)>0;
164 one_file:=Pos('toone',TButton(Sender).Name)>0;
165 IF dat_only THEN settings:=[DO_dat]
166 ELSE settings:=[DO_dat,DO_raw];
167 IF convert THEN settings:=settings+[DO_convert];
168 IF one_file THEN settings:=settings+[DO_toone];
169 progress.Position:=0;
170
171 IF saved.Execute THEN BEGIN
172 begintime:=Time;
173 group_progress.Visible:=True;
174 group_select.Enabled:=False;
175 group_singlefiles.Enabled:=False;
176 group_onefile.Enabled:=False;
177 lbl_estimated.Caption:='Estimated finishing time: unknown';
178 IF one_file THEN BEGIN
179 IF FileExists(saved.FileName) THEN BEGIN
180 IF MessageBox(Self.Handle,PChar('File already exists. Do you want to overwrite it?'),PChar('Warning!'),MB_YESNO)=ID_YES THEN BEGIN
181 DeleteFile(saved.FileName);
182 END ELSE BEGIN
183 group_progress.Visible:=False;
184 group_select.Enabled:=True;
185 group_singlefiles.Enabled:=True;
186 group_onefile.Enabled:=True;
187 Exit;
188 END;
189 END;
190 i:=FileCreate(saved.FileName);
191 FileClose(i);
192 i:=0;
193 END;
194 IF sel_only THEN BEGIN
195 files:=list.SelCount;
196 lbl_progress.Caption:='Files done: 0/'+IntToStr(files);
197 progress.Max:=files;
198 done:=0;
199 FOR i:=0 TO list.Count-1 DO BEGIN
200 IF list.Selected[i] THEN BEGIN
201 IF one_file THEN BEGIN
202 ExportFile(StrToInt(MidStr(list.Items.Strings[i],1,5)),ExtractFileName(saved.FileName),settings,ExtractFileDir(saved.FileName));
203 END ELSE BEGIN
204 ExportFile(StrToInt(MidStr(list.Items.Strings[i],1,5)),list.Items.Strings[i],settings,'D:');
205 END;
206 Inc(done);
207 END;
208 IF ((done MOD 10)=0) AND (done>=50) THEN
209 lbl_estimated.Caption:='Estimated finishing time: '+TimeToStr((Time-begintime)/done*files+begintime);
210 IF (i MOD 10)=0 THEN BEGIN
211 progress.Position:=done;
212 lbl_progress.Caption:='Files done: '+IntToStr(done)+'/'+IntToStr(files);
213 Application.ProcessMessages;
214 END;
215 END;
216 END ELSE BEGIN
217 files:=list.Count;
218 lbl_progress.Caption:='Files done: 0/'+IntToStr(files);
219 progress.Max:=files;
220 FOR i:=0 TO list.Count-1 DO BEGIN
221 IF one_file THEN BEGIN
222 ExportFile(StrToInt(MidStr(list.Items.Strings[i],1,5)),ExtractFileName(saved.FileName),settings,ExtractFileDir(saved.FileName));
223 END ELSE BEGIN
224 ExportFile(StrToInt(MidStr(list.Items.Strings[i],1,5)),list.Items.Strings[i],settings,'D:');
225 END;
226 IF ((i MOD 10)=0) AND (i>=50) THEN
227 lbl_estimated.Caption:='Estimated finishing time: '+TimeToStr((Time-begintime)/i*files+begintime);
228 IF (i MOD 5)=0 THEN BEGIN
229 progress.Position:=i;
230 lbl_progress.Caption:='Files done: '+IntToStr(i)+'/'+IntToStr(files);
231 Application.ProcessMessages;
232 END;
233 END;
234 END;
235 group_progress.Visible:=False;
236 group_select.Enabled:=True;
237 group_singlefiles.Enabled:=True;
238 group_onefile.Enabled:=True;
239 END;
240 END;
241
242END.
Note: See TracBrowser for help on using the repository browser.