source: oup/releases/0.25a/Unit11_extractor.pas @ 25

Last change on this file since 25 was 25, checked in by alloc, 16 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.