Changeset 74


Ignore:
Timestamp:
Jan 11, 2007, 11:45:20 PM (18 years ago)
Author:
alloc
Message:
 
Location:
oup/current
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • oup/current/Code/Exporters.pas

    r46 r74  
    66
    77procedure ExportDatFile(fileid: LongWord; filename: String);
     8procedure ExportRawFiles(fileid: LongWord; filename: String);
    89procedure ExportRawFile(fileid: LongWord; dat_offset: LongWord; filename: String);
    9 
    10 function ExportSNDD(fileid: LongWord; filename: String; convert: Boolean): Integer;
    11 function ExportTRAC(fileid: LongWord; filename: String; convert: Boolean): Integer;
    12 function ExportTXAN(fileid: LongWord; filename: String; convert: Boolean): Integer;
    13 function ExportTXMB(fileid: LongWord; filename: String; convert: Boolean): Integer;
    14 function ExportTXMP(fileid: LongWord; filename: String; convert: Boolean): Integer;
    15 
    16 var
    17   ExportHandlers: array[1..1] of TExportHandlers = (
    18     //    (Ext:'ABNA'; needed:False),
    19     //(Ext:'AGDB'; needed:False),
    20     (Ext: 'SNDD'; needed: True; Handler: ExportSNDD)
    21 {    (Ext:'TRAC'; needed:True; Handler:ExportTRAC),
    22     (Ext:'TXAN'; needed:True; Handler:ExportTXAN),
    23     (Ext:'TXMB'; needed:True; Handler:ExportTXMB),
    24     (Ext:'TXMP'; needed:True; Handler:ExportTXMP)
    25 });
     10function ExportConverted(fileid: LongWord; filename: String): Integer;
     11
     12function ExportSNDD(fileid: LongWord; filename: String): Integer;
     13function ExportTRAC(fileid: LongWord; filename: String): Integer;
     14function ExportTXAN(fileid: LongWord; filename: String): Integer;
     15function ExportImage(fileid: LongWord; filename: String): Integer;
     16
     17var
     18  ExportHandlers: array[1..3] of TExportHandlers = (
     19//    (Ext:'ABNA'; needed:False),
     20//    (Ext:'AGDB'; needed:False),
     21    (Ext: 'SNDD'; needed: True; Handler: ExportSNDD),
     22//    (Ext:'TRAC'; needed:True; Handler:ExportTRAC),
     23//    (Ext:'TXAN'; needed:True; Handler:ExportTXAN),
     24    (Ext:'TXMB'; needed:True; Handler:ExportImage),
     25    (Ext:'TXMP'; needed:True; Handler:ExportImage)
     26);
    2627
    2728
     
    3031
    3132uses Functions, DataStructures, OniDataClass;
    32 
    3333
    3434
     
    5454
    5555
    56 
     56procedure ExportRawFiles(fileid: LongWord; filename: String);
     57var
     58  i: Integer;
     59  rawlist: TRawList;
     60begin
     61  rawlist := OniDataConnection.GetRawList(fileid);
     62  if Length(rawlist) > 0 then
     63    for i := 0 to High(rawlist) do
     64      ExportRawFile(fileid, rawlist[i].src_offset, filename);
     65end;
    5766
    5867procedure ExportRawFile(fileid: LongWord; dat_offset: LongWord; filename: String);
     
    7786end;
    7887
     88function ExportConverted(fileid: LongWord; filename: String): Integer;
     89var
     90  i: Integer;
     91  fileinfo: TFileInfo;
     92begin
     93  fileinfo := OniDataConnection.GetFileInfo(fileid);
     94  if Length(ExportHandlers) > 0 then
     95    for i := 0 to High(ExportHandlers) do
     96      if ExportHandlers[i].Ext = fileinfo.Extension then
     97        ExportHandlers[i].Handler(fileid, filename);
     98end;
     99
    79100
    80101
    81102
    82103function ExportSNDD;
    83 {  CONST
    84     WAVheader:Array[0..0] OF Byte=(
    85         Ord('R'),Ord('I'),Ord('F'),Ord('F'),0,0,0,0,Ord('W'),Ord('A'),Ord('V'),Ord('E'),
    86         Ord('f'),Ord('m'),Ord('t'),Ord(' '),24,0,0,0,
    87       );
    88 }  type
    89   TDatData = record
     104type
     105  TDatData = packed record
    90106    {0x00}
    91     _fileid:   LongWord;
    92     level:     LongWord;
    93     Flag:      LongWord;
    94     FormatTag: Word;
    95     ChanNo:    Word;
     107    _fileid:         LongWord;
     108    level:           LongWord;
     109    FormatSize:      LongWord;
     110    AudioFormat:    Word;
     111    NumChannels:     Word;
    96112    {0x10}
    97     SampleRate: LongWord;
    98     BytesPSec: LongWord;
    99     BPSample:  LongWord;
    100     BitsPS:    LongWord;
    101     {0x20}
    102     Unknown:   array[1..7] of LongWord;
    103     Unknown2:  Word;
     113    SampleRate:      LongWord;
     114    ByteRate:        LongWord;
     115    BlockAlign:      Word;
     116    BitsPerSample:   Word;
     117    {0x1C}
     118    SizeExtHeader:   Word;
     119    SamplesPerBlock: Word;
     120    NumCoefficients: Word;
     121    Coefficients:    array[0..6] of LongWord;
     122    {0x3E}
     123    Duration:        Word;
    104124    {0x40}
    105     RawSize:   LongWord;
    106     RawPos:    LongWord;
    107   end;
    108 var
    109   filestream: TFileStream;
    110 
     125    RawSize:         LongWord;
     126    RawPos:          LongWord;
     127  end;
     128var
     129  filestream: TFileStream;
    111130  DatData:     TDatData;
     131  i: Integer;
     132  Data: Tdata;
     133
    112134  //Wave Header Stuff
    113   ASCII_Group: LongWord; //"RIFF"
    114   WAV_Len:     LongWord;
    115   ASCII_WAV:   LongWord; //"WAVE"
    116   ASCII_FMT:   LongWord; //"fmt "
    117   WAV_FMT_Len: LongWord;
    118   ASCII_DATA:  LongWord; //"data"
    119   WAV_FolLen:  LongWord;
    120 
    121   Data: Tdata;
     135  ASCII_RIFF:   LongWord; //"RIFF"
     136  WAVE_Len:     LongWord;
     137  ASCII_WAVE:   LongWord; //"WAVE"
     138  ASCII_FMT:    LongWord; //"fmt "
     139  WAVE_FMT_Len: LongWord;
     140  ASCII_DATA:   LongWord; //"data"
     141  WAVE_DataLen:  LongWord;
    122142begin
    123143  Result := export_noerror;
     
    126146  begin
    127147    //Initializing Header vars
    128     ASCII_Group := 1179011410; // 'RIFF'
    129     WAV_Len     := RAWSize + 70;
    130     ASCII_WAV   := 1163280727;  // 'WAVE'
    131     ASCII_FMT   := 544501094;   // 'fmt '
    132     WAV_FMT_Len := 50;          // 50 bytes
    133     ASCII_DATA  := 1635017060;  // 'data'
    134     WAV_FolLen := RAWSize;
     148    ASCII_RIFF  := 1179011410; // 'RIFF'
     149    WAVE_Len     := RAWSize + 70;
     150    ASCII_WAVE   := 1163280727;  // 'WAVE'
     151    ASCII_FMT    := 544501094;   // 'fmt '
     152    WAVE_FMT_Len := 50;          // 50 bytes
     153    ASCII_DATA   := 1635017060;  // 'data'
     154    WAVE_DataLen := RAWSize;
    135155    SetLength(Data, RAWSize);
    136156    OniDataConnection.LoadRawFile(fileid, $44, Data);
    137157
    138     filestream := TFileStream.Create(filename + '.raw', fmCreate);
     158    //Now start packing this into a neat wave...
     159    filestream := TFileStream.Create(filename + '.wav', fmCreate);
     160    filestream.Write(ASCII_RIFF, SizeOf(ASCII_RIFF));
     161    filestream.Write(WAVE_Len, SizeOf(WAVE_Len));
     162    filestream.Write(ASCII_WAVE, SizeOf(ASCII_WAVE));
     163    filestream.Write(ASCII_FMT, SizeOf(ASCII_FMT));
     164    filestream.Write(WAVE_FMT_Len, SizeOf(WAVE_FMT_Len));
     165    filestream.Write(AudioFormat, SizeOf(AudioFormat));
     166    filestream.Write(NumChannels, SizeOf(NumChannels));
     167    filestream.Write(Samplerate, SizeOf(Samplerate));
     168    filestream.Write(ByteRate, SizeOf(ByteRate));
     169    filestream.Write(BlockAlign, SizeOf(BlockAlign));
     170    filestream.Write(BitsPerSample, SizeOf(BitsPerSample));
     171    filestream.Write(SizeExtHeader, SizeOf(SizeExtHeader));
     172    filestream.Write(SamplesPerBlock, SizeOf(SamplesPerBlock));
     173    filestream.Write(NumCoefficients, SizeOf(NumCoefficients));
     174    for i := 0 to High(Coefficients) do
     175      filestream.Write(Coefficients[i], SizeOf(Coefficients[i]));
     176    filestream.Write(ASCII_DATA, SizeOf(ASCII_DATA));
     177    filestream.Write(WAVE_DataLen, SizeOf(WAVE_DataLen));
    139178    filestream.Write(Data[0], Length(Data));
    140179    filestream.Free;
    141 
    142     if convert then
    143     begin
    144       //Now start packing this into a neat wave...
    145       filestream := TFileStream.Create(filename + '.wav', fmCreate);
    146       filestream.Write(ASCII_Group, SizeOf(ASCII_Group));
    147       filestream.Write(WAV_Len, SizeOf(WAV_Len));
    148       filestream.Write(ASCII_WAV, SizeOf(ASCII_WAV));
    149       filestream.Write(ASCII_FMT, SizeOf(ASCII_FMT));
    150       filestream.Write(WAV_FMT_Len, SizeOf(WAV_FMT_Len));
    151       filestream.Write(ChanNo, SizeOf(ChanNo));
    152       filestream.Write(Samplerate, SizeOf(Samplerate));
    153       filestream.Write(BytesPSec, SizeOf(BytesPSec));
    154       filestream.Write(BPSample, SizeOf(BPSample));
    155       filestream.Write(BitsPS, SizeOf(BitsPS));
    156       filestream.Write(Unknown[1], SizeOf(Unknown));
    157       filestream.Write(Unknown2, SizeOf(Unknown2));
    158       filestream.Write(ASCII_DATA, SizeOf(ASCII_DATA));
    159       filestream.Write(WAV_FolLen, SizeOf(WAV_FolLen));
    160       filestream.Write(Data[0], Length(Data));
    161       filestream.Free;
    162     end;
    163180  end;
    164181end;
     
    214231
    215232
    216 function ExportTXMB;
    217 var
    218   filestream: TFileStream;
    219   //    img:TImgPackage;
    220   Data: Tdata;
    221 begin
    222   Result := export_noerror;
    223   if convert then
    224   begin
    225 {      img:=LoadTXMBconnected(fileid);
    226       data:=ImgdataToBmp(img.imgx,img.imgy,img.imgdepth,img.storetype,img.imgdata);
    227       filestream:=TFileStream.Create(filename+'.bmp',fmCreate);
    228       filestream.Write(data[0],Length(data));
    229       filestream.Free;
    230 }    end;
    231 end;
    232 
    233 
    234 
    235 
    236 function ExportTXMP;
    237 var
    238   filestream: TFileStream;
    239   //    img:TImgPackage;
    240 begin
    241   Result := export_noerror;
    242 {    img:=LoadImgData(fileid);
    243 
    244     filestream:=TFileStream.Create(filename+'.raw',fmCreate);
    245     filestream.Write(img.imgdata[0],Length(img.imgdata));
    246     filestream.Free;
    247 
    248     IF convert THEN BEGIN
    249       img.imgdata:=ImgdataToBMP(img.imgx,img.imgy,img.imgdepth,img.storetype,img.imgdata);
    250       filestream:=TFileStream.Create(filename+'.bmp',fmCreate);
    251       filestream.Write(img.imgdata[0],Length(img.imgdata));
    252       filestream.Free;
    253     END;
    254 }  end;
     233function ExportImage;
     234var
     235  filestream: TFileStream;
     236  img: TOniImage;
     237  data: Tdata;
     238begin
     239  Result := export_noerror;
     240
     241  img := TOniImage.Create;
     242  img.Load(fileid);
     243  data := img.GetAsBMP;
     244  img.Free;
     245
     246  filestream:=TFileStream.Create(filename+'.bmp',fmCreate);
     247  filestream.Write(data[0],Length(data));
     248  filestream.Free;
     249end;
    255250
    256251end.
  • oup/current/Code/Functions.pas

    r46 r74  
    44
    55uses Classes, Dialogs, SysUtils, StrUtils, Math, Data;
    6 
    7 type
    8   TExportSet = set of (DO_dat, DO_raw, DO_convert, DO_toone);
    96
    107function BoolToStr(bool: Boolean): String;
     
    1613function DataToBin(Data: Tdata): String;
    1714function BinToInt(bin: String): Byte;
    18 
    19 function ExportFile(fileid: LongWord; filename: String; settings: TExportSet;
    20   path: String): Integer;
    2115
    2216function StringSmaller(string1, string2: String): Boolean;
     
    324318
    325319
    326 
    327 function ExportFile(fileid: LongWord; filename: String; settings: TExportSet;
    328   path: String): Integer;
    329 var
    330   i: Byte;
    331   extension: String;
    332   rawlist: TRawList;
    333 begin
    334   Result    := export_noerror;
    335   extension := RightStr(filename, 4);
    336   if DO_toone in settings then
    337   begin
    338     ExportDatFile(fileid, path + '\' + GetWinFileName(filename));
    339   end
    340   else
    341   begin
    342     if DO_dat in settings then
    343       ExportDatFile(fileid, path + '\' + GetWinFileName(filename));
    344     if DO_raw in settings then
    345     begin
    346       rawlist := OniDataConnection.GetRawList(fileid);
    347       if Length(rawlist) > 0 then
    348       begin
    349         for i := 0 to High(rawlist) do
    350         begin
    351           ExportRawFile(fileid, rawlist[i].src_offset, path + '\' +
    352             GetWinFileName(filename));
    353         end;
    354       end;
    355     end;
    356   end;
    357 end;
    358 
    359 
    360 
    361 
    362320function Explode(_string: String; delimiter: Char): TStringArray;
    363321var
  • oup/current/Data.pas

    r46 r74  
    7171    Ext:     String[4];
    7272    needed:  Boolean;
    73     Handler: function(fileid: LongWord; filename: String; convert: Boolean): Integer;
     73    Handler: function(fileid: LongWord; filename: String): Integer;
    7474  end;
    7575
  • oup/current/OniUnPacker.dpr

    r56 r74  
    1919  Extractor in 'Tools\Extractor.pas' {Form_ToolTemplate3},
    2020  RawEdit in 'Tools\RawEdit.pas' {Form_ToolTemplate4},
    21   TxmpReplace in 'Tools\TxmpReplace.pas' {Form_ToolTemplate5};
     21  TxmpReplace in 'Tools\TxmpReplace.pas' {Form_ToolTemplate5},
     22  FolderBrowser in 'Code\FolderBrowser.pas';
    2223
    2324{$R *.res}
  • oup/current/Tools/Extractor.dfm

    r46 r74  
    11inherited Form_Extractor: TForm_Extractor
    22  Caption = 'Extractor'
     3  ClientHeight = 491
     4  ExplicitWidth = 500
     5  ExplicitHeight = 518
    36  PixelsPerInch = 96
    47  TextHeight = 13
    58  inherited Splitter1: TSplitter
    69    Left = 483
     10    Height = 491
    711    Align = alRight
    812    Visible = False
     
    1216  end
    1317  inherited panel_files: TPanel
    14     Width = 184
    15     Align = alClient
    16     ExplicitWidth = 184
     18    Width = 333
     19    Height = 491
     20    ExplicitWidth = 333
     21    ExplicitHeight = 491
    1722    inherited filelist: TListBox
    18       Width = 184
    19       ExplicitWidth = 184
     23      Width = 333
     24      Height = 362
     25      ExplicitWidth = 333
     26      ExplicitHeight = 362
    2027    end
    2128    inherited panel_extension: TPanel
    22       Width = 184
    23       ExplicitWidth = 184
     29      Width = 333
     30      ExplicitWidth = 333
    2431      inherited combo_extension: TComboBox
    25         Width = 176
    26         ExplicitWidth = 176
     32        Width = 325
     33        ExplicitWidth = 325
     34      end
     35      inherited check_zerobyte: TCheckBox
     36        Visible = False
    2737      end
    2838      inherited edit_filtername: TEdit
    29         Width = 176
    30         ExplicitWidth = 176
     39        Width = 325
     40        ExplicitWidth = 325
    3141      end
    3242    end
    3343  end
    3444  inherited content: TPanel
    35     Left = 184
    36     Width = 299
    37     Align = alRight
    38     ExplicitLeft = 184
    39     ExplicitWidth = 299
     45    Left = 333
     46    Width = 150
     47    Height = 491
     48    ExplicitLeft = 333
     49    ExplicitWidth = 150
     50    ExplicitHeight = 491
    4051    object group_extract: TGroupBox
    41       Left = 3
    42       Top = 0
    43       Width = 296
    44       Height = 423
    45       Align = alRight
     52      AlignWithMargins = True
     53      Left = 6
     54      Top = 3
     55      Width = 138
     56      Height = 374
     57      Margins.Left = 6
     58      Margins.Right = 6
     59      Align = alClient
    4660      Caption = '2. Select extract-method'
    4761      TabOrder = 0
    48       object group_singlefiles: TGroupBox
    49         AlignWithMargins = True
     62      DesignSize = (
     63        138
     64        374)
     65      object label_export_sel: TLabel
     66        Left = 7
     67        Top = 18
     68        Width = 62
     69        Height = 20
     70        AutoSize = False
     71        Caption = 'Export ...'
     72      end
     73      object label_path: TLabel
     74        Left = 7
     75        Top = 136
     76        Width = 30
     77        Height = 18
     78        AutoSize = False
     79        Caption = 'Path:'
     80      end
     81      object check_dat: TCheckBox
     82        Left = 7
     83        Top = 75
     84        Width = 121
     85        Height = 18
     86        Anchors = [akLeft, akTop, akRight]
     87        Caption = 'Export .dat-entries'
     88        Checked = True
     89        State = cbChecked
     90        TabOrder = 0
     91      end
     92      object check_raw: TCheckBox
     93        Left = 7
     94        Top = 94
     95        Width = 121
     96        Height = 18
     97        Anchors = [akLeft, akTop, akRight]
     98        Caption = 'Export .raw-entries'
     99        TabOrder = 1
     100      end
     101      object check_convert: TCheckBox
     102        Left = 7
     103        Top = 112
     104        Width = 121
     105        Height = 18
     106        Anchors = [akLeft, akTop, akRight]
     107        Caption = 'Convert files'
     108        TabOrder = 2
     109      end
     110      object radio_selected: TRadioButton
     111        Left = 7
     112        Top = 36
     113        Width = 113
     114        Height = 17
     115        Caption = 'selected files'
     116        Checked = True
     117        TabOrder = 3
     118        TabStop = True
     119      end
     120      object radio_all: TRadioButton
     121        Left = 7
     122        Top = 52
     123        Width = 113
     124        Height = 17
     125        Caption = 'all files in list'
     126        TabOrder = 4
     127      end
     128      object edit_path: TEdit
     129        Left = 36
     130        Top = 133
     131        Width = 28
     132        Height = 21
     133        Anchors = [akLeft, akTop, akRight]
     134        ReadOnly = True
     135        TabOrder = 5
     136        Text = 'C:\'
     137        OnClick = btn_pathClick
     138      end
     139      object btn_path: TButton
     140        Left = 70
     141        Top = 133
     142        Width = 62
     143        Height = 21
     144        Anchors = [akTop, akRight]
     145        Caption = 'Select...'
     146        TabOrder = 6
     147        OnClick = btn_pathClick
     148      end
     149      object btn_export: TButton
     150        Left = 7
     151        Top = 180
     152        Width = 75
     153        Height = 25
     154        Caption = 'Export!'
     155        TabOrder = 7
     156        OnClick = btn_exportClick
     157      end
     158    end
     159    object group_progress: TGroupBox
     160      AlignWithMargins = True
     161      Left = 6
     162      Top = 381
     163      Width = 138
     164      Height = 104
     165      Margins.Left = 6
     166      Margins.Top = 1
     167      Margins.Right = 6
     168      Margins.Bottom = 6
     169      Align = alBottom
     170      Caption = 'Progress ...'
     171      TabOrder = 1
     172      Visible = False
     173      DesignSize = (
     174        138
     175        104)
     176      object lbl_progress: TLabel
     177        Left = 8
     178        Top = 40
     179        Width = 265
     180        Height = 17
     181        AutoSize = False
     182        Caption = 'Files done: 0/0'
     183      end
     184      object lbl_estimated: TLabel
     185        Left = 8
     186        Top = 56
     187        Width = 265
     188        Height = 17
     189        AutoSize = False
     190        Caption = 'Estimated finishing time: 00:00:00'
     191      end
     192      object progress: TProgressBar
    50193        Left = 8
    51194        Top = 16
    52         Width = 280
    53         Height = 185
    54         Margins.Left = 6
    55         Margins.Top = 1
    56         Margins.Right = 6
    57         Align = alTop
    58         Caption = 'Write data into single files'
     195        Width = 122
     196        Height = 17
     197        Anchors = [akLeft, akTop, akRight]
     198        Smooth = True
    59199        TabOrder = 0
    60         object btn_sel_dat: TButton
    61           Left = 8
    62           Top = 16
    63           Width = 129
    64           Height = 49
    65           Caption = 'Selected files (dat contents only)'
    66           TabOrder = 0
    67           WordWrap = True
    68           OnClick = Extract
    69         end
    70         object btn_sel_datraw: TButton
    71           Left = 8
    72           Top = 72
    73           Width = 129
    74           Height = 49
    75           Caption = 'Selected files (dat+raw)'
    76           TabOrder = 1
    77           WordWrap = True
    78           OnClick = Extract
    79         end
    80         object btn_sel_datraw_convert: TButton
    81           Left = 8
    82           Top = 128
    83           Width = 129
    84           Height = 49
    85           Caption = 'Selected files (dat+raw) (with convert if possible)'
    86           TabOrder = 2
    87           WordWrap = True
    88           OnClick = Extract
    89         end
    90         object btn_all_dat: TButton
    91           Left = 144
    92           Top = 16
    93           Width = 129
    94           Height = 49
    95           Caption = 'All files in list (dat contents only)'
    96           TabOrder = 3
    97           WordWrap = True
    98           OnClick = Extract
    99         end
    100         object btn_all_datraw: TButton
    101           Left = 144
    102           Top = 72
    103           Width = 129
    104           Height = 49
    105           Caption = 'All files in list (dat+raw)'
    106           TabOrder = 4
    107           WordWrap = True
    108           OnClick = Extract
    109         end
    110         object btn_all_datraw_convert: TButton
    111           Left = 144
    112           Top = 128
    113           Width = 129
    114           Height = 49
    115           BiDiMode = bdLeftToRight
    116           Caption = 'All files in list (dat+raw) (with convert if possible)'
    117           ParentBiDiMode = False
    118           TabOrder = 5
    119           WordWrap = True
    120           OnClick = Extract
    121         end
    122       end
    123       object group_onefile: TGroupBox
    124         AlignWithMargins = True
    125         Left = 8
    126         Top = 205
    127         Width = 280
    128         Height = 73
    129         Margins.Left = 6
    130         Margins.Top = 1
    131         Margins.Right = 6
    132         Align = alTop
    133         Caption = 'Write data into one file'
     200      end
     201      object btn_abort: TButton
     202        Left = 8
     203        Top = 72
     204        Width = 97
     205        Height = 23
     206        Caption = 'Abort'
     207        Enabled = False
    134208        TabOrder = 1
    135         object btn_sel_files_toone: TButton
    136           Left = 8
    137           Top = 16
    138           Width = 129
    139           Height = 49
    140           Caption = 'Selected files (dat contents only)'
    141           TabOrder = 0
    142           WordWrap = True
    143           OnClick = Extract
    144         end
    145         object btn_all_files_toone: TButton
    146           Left = 144
    147           Top = 16
    148           Width = 129
    149           Height = 49
    150           Caption = 'All files in list (dat contents only)'
    151           TabOrder = 1
    152           WordWrap = True
    153           OnClick = Extract
    154         end
    155       end
    156       object group_progress: TGroupBox
    157         AlignWithMargins = True
    158         Left = 8
    159         Top = 282
    160         Width = 280
    161         Height = 132
    162         Margins.Left = 6
    163         Margins.Top = 1
    164         Margins.Right = 6
    165         Margins.Bottom = 7
    166         Align = alClient
    167         Caption = 'Progress ...'
    168         TabOrder = 2
    169         Visible = False
    170         object lbl_progress: TLabel
    171           Left = 8
    172           Top = 40
    173           Width = 265
    174           Height = 17
    175           AutoSize = False
    176           Caption = 'Files done: 0/0'
    177         end
    178         object lbl_estimated: TLabel
    179           Left = 8
    180           Top = 56
    181           Width = 265
    182           Height = 17
    183           AutoSize = False
    184           Caption = 'Estimated finishing time: 00:00:00'
    185         end
    186         object progress: TProgressBar
    187           Left = 8
    188           Top = 16
    189           Width = 265
    190           Height = 17
    191           Smooth = True
    192           TabOrder = 0
    193         end
    194         object btn_abort: TButton
    195           Left = 8
    196           Top = 72
    197           Width = 97
    198           Height = 23
    199           Caption = 'Abort'
    200           Enabled = False
    201           TabOrder = 1
    202           OnClick = btn_abortClick
    203         end
    204       end
    205     end
    206   end
    207   object saved: TSaveDialog [3]
    208     Left = 448
    209     Top = 328
     209        OnClick = btn_abortClick
     210      end
     211    end
    210212  end
    211213end
  • oup/current/Tools/Extractor.pas

    r46 r74  
    33uses
    44  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    5   Dialogs, Template, StdCtrls, ExtCtrls, ComCtrls, Menus, Buttons;
     5  Dialogs, Template, StdCtrls, ExtCtrls, ComCtrls, Menus, Buttons, StrUtils;
    66
    77type
    88  TForm_Extractor = class(TForm_ToolTemplate)
    99    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     btn_sel_files_toone: TButton;
    18     btn_all_files_toone: TButton;
    19     group_onefile: TGroupBox;
     10    check_dat: TCheckBox;
     11    check_raw: TCheckBox;
     12    check_convert: TCheckBox;
     13    radio_selected: TRadioButton;
     14    label_export_sel: TLabel;
     15    radio_all: TRadioButton;
     16    label_path: TLabel;
     17    edit_path: TEdit;
     18    btn_path: TButton;
     19    btn_export: TButton;
    2020    group_progress: TGroupBox;
    2121    lbl_progress: TLabel;
     
    2323    progress: TProgressBar;
    2424    btn_abort: TButton;
    25     saved: TSaveDialog;
    2625    procedure FormCreate(Sender: TObject);
    27     procedure Extract(Sender: TObject);
    2826    procedure btn_abortClick(Sender: TObject);
     27    procedure btn_pathClick(Sender: TObject);
     28    procedure btn_exportClick(Sender: TObject);
    2929  private
    3030  public
     
    3636implementation
    3737{$R *.dfm}
    38 uses Main, Functions, Data, OniDataClass;
     38uses Main, Functions, Data, OniDataClass, FolderBrowser, Exporters;
     39
    3940
    4041procedure TForm_Extractor.FormCreate(Sender: TObject);
     
    4243  inherited;
    4344  Self.AllowMultiSelect := True;
    44 
    45   btn_sel_dat.Caption    := 'Selected files' + CrLf + '(dat contents only)';
    46   btn_sel_datraw.Caption := 'Selected files' + CrLf + '(dat+raw contents)';
    47   btn_sel_datraw_convert.Caption :=
    48     'Selected files' + CrLf + '(dat+raw contents)' + CrLf + '(with convert if possible)';
    49   btn_all_dat.Caption    := 'All files in list' + CrLf + '(dat contents only)';
    50   btn_all_datraw.Caption := 'All files in list' + CrLf + '(dat+raw contents)';
    51   btn_all_datraw_convert.Caption :=
    52     'All files in list' + CrLf + '(dat+raw contents)' + CrLf + '(with convert if possible)';
    53   btn_sel_files_toone.Caption := 'Selected files' + CrLf + '(dat contents only)';
    54   btn_all_files_toone.Caption := 'All files in list' + CrLf + '(dat contents only)';
     45  edit_path.Text := AppSettings.ExtractPath;
    5546end;
    5647
     
    6051end;
    6152
    62 procedure TForm_Extractor.Extract(Sender: TObject);
     53procedure TForm_Extractor.btn_pathClick(Sender: TObject);
    6354var
    64   sel_only:  Boolean;
    65   dat_only:  Boolean;
    66   convert:   Boolean;
    67   one_file:  Boolean;
    68   settings:  TExportSet;
     55  fb: TFolderBrowser;
     56begin
     57  inherited;
     58
     59  fb := TFolderBrowser.Create(Handle, 'Please select a folder where you want ' +
     60        'the files to be stored...', edit_path.Text, False, True);
     61  if fb.Execute then
     62  begin
     63    edit_path.Text := fb.SelectedItem;
     64    AppSettings.ExtractPath := edit_path.Text;
     65  end;
     66  fb.Free;
     67end;
     68
     69procedure TForm_Extractor.btn_exportClick(Sender: TObject);
     70var
     71  begintime: Double;
    6972  files:     LongWord;
    7073  i, done:   LongWord;
    71   begintime: Double;
     74  selonly:   Boolean;
     75  fileid:    LongWord;
     76  filename:  String;
     77  path:      String;
    7278begin
    73   sel_only := Pos('sel', TButton(Sender).Name) > 0;
    74   dat_only := not (Pos('datraw', TButton(Sender).Name) > 0);
    75   convert  := Pos('convert', TButton(Sender).Name) > 0;
    76   one_file := Pos('toone', TButton(Sender).Name) > 0;
    77   if dat_only then
    78     settings := [DO_dat]
    79   else
    80     settings := [DO_dat, DO_raw];
    81   if convert then
    82     settings := settings + [DO_convert];
    83   if one_file then
    84     settings := settings + [DO_toone];
     79  inherited;
     80  panel_files.Enabled := False;
     81  group_extract.Enabled := False;
     82  group_progress.Visible := True;
     83
     84  path := edit_path.Text;
     85  if not EndsText('\', path) then
     86    path := path + '\';
     87
     88  begintime := Time;
     89  lbl_estimated.Caption := 'Estimated finishing time: unknown';
    8590  progress.Position := 0;
    8691
    87   if saved.Execute then
     92  selonly := radio_selected.Checked;
     93
     94  if selonly then
     95    files := filelist.SelCount
     96  else
     97    files := filelist.Count;
     98
     99  lbl_progress.Caption := 'Files done: 0/' + IntToStr(files);
     100  progress.Max := files;
     101  done  := 0;
     102
     103  for i := 0 to filelist.Count - 1 do
    88104  begin
    89     begintime := Time;
    90     group_progress.Visible := True;
    91     panel_files.Enabled := False;
    92     group_singlefiles.Enabled := False;
    93     group_onefile.Enabled := False;
    94     lbl_estimated.Caption := 'Estimated finishing time: unknown';
    95     if one_file then
     105    if (selonly and filelist.Selected[i]) or not selonly then
    96106    begin
    97       if FileExists(saved.FileName) then
    98       begin
    99         if MessageBox(Self.Handle, PChar(
    100           'File already exists. Do you want to overwrite it?'), PChar('Warning!'), MB_YESNO) =
    101           ID_YES then
    102         begin
    103           DeleteFile(saved.FileName);
    104         end
    105         else
    106         begin
    107           group_progress.Visible    := False;
    108           panel_files.Enabled      := True;
    109           group_singlefiles.Enabled := True;
    110           group_onefile.Enabled     := True;
    111           Exit;
    112         end;
    113       end;
    114       i := FileCreate(saved.FileName);
    115       FileClose(i);
    116       i := 0;
     107      fileid := OniDataConnection.ExtractFileID(filelist.Items.Strings[i]);
     108      filename := GetWinFilename(filelist.Items.Strings[i]);
     109      if check_dat.Checked then
     110        ExportDatFile(fileid, path + filename);
     111      if check_raw.Checked then
     112        ExportRawFiles(fileid, path + filename);
     113      if check_convert.Checked then
     114        ExportConverted(fileid, path + filename);
     115      Inc(done);
    117116    end;
    118     if sel_only then
    119     begin
    120       files := filelist.SelCount;
    121       lbl_progress.Caption := 'Files done: 0/' + IntToStr(files);
    122       progress.Max := files;
    123       done  := 0;
    124       for i := 0 to filelist.Count - 1 do
    125       begin
    126         if filelist.Selected[i] then
    127         begin
    128           if one_file then
    129           begin
    130             ExportFile(OniDataConnection.ExtractFileID(
    131               filelist.Items.Strings[filelist.ItemIndex]), ExtractFileName(saved.FileName),
    132               settings, ExtractFileDir(saved.FileName));
    133           end
    134           else
    135           begin
    136             ExportFile(OniDataConnection.ExtractFileID(
    137               filelist.Items.Strings[filelist.ItemIndex]), filelist.Items.Strings[i], settings, 'D:');
    138           end;
    139           Inc(done);
    140         end;
    141         if ((done mod 10) = 0) and (done >= 50) then
    142           lbl_estimated.Caption := 'Estimated finishing time: ' + TimeToStr(
     117    if ((done mod 10) = 0) and (done >= 50) then
     118      lbl_estimated.Caption := 'Estimated finishing time: ' + TimeToStr(
    143119            (Time - begintime) / done * files + begintime);
    144         if (i mod 10) = 0 then
    145         begin
    146           progress.Position    := done;
    147           lbl_progress.Caption := 'Files done: ' + IntToStr(done) + '/' + IntToStr(files);
    148           Application.ProcessMessages;
    149         end;
    150       end;
    151     end
    152     else
    153     begin
    154       files := filelist.Count;
    155       lbl_progress.Caption := 'Files done: 0/' + IntToStr(files);
    156       progress.Max := files;
    157       for i := 0 to filelist.Count - 1 do
    158       begin
    159         if one_file then
    160         begin
    161           ExportFile(OniDataConnection.ExtractFileID(
    162             filelist.Items.Strings[filelist.ItemIndex]), ExtractFileName(saved.FileName),
    163             settings, ExtractFileDir(saved.FileName));
    164         end
    165         else
    166         begin
    167           ExportFile(OniDataConnection.ExtractFileID(
    168             filelist.Items.Strings[filelist.ItemIndex]), filelist.Items.Strings[i], settings, 'D:');
    169         end;
    170         if ((i mod 10) = 0) and (i >= 50) then
    171           lbl_estimated.Caption := 'Estimated finishing time: ' + TimeToStr(
    172             (Time - begintime) / i * files + begintime);
    173         if (i mod 5) = 0 then
    174         begin
    175           progress.Position    := i;
    176           lbl_progress.Caption := 'Files done: ' + IntToStr(i) + '/' + IntToStr(files);
    177           Application.ProcessMessages;
    178         end;
    179       end;
    180     end;
    181     group_progress.Visible    := False;
    182     panel_files.Enabled      := True;
    183     group_singlefiles.Enabled := True;
    184     group_onefile.Enabled     := True;
     120
     121    progress.Position    := done;
     122    lbl_progress.Caption := 'Files done: ' + IntToStr(done) + '/' + IntToStr(files);
     123    Application.ProcessMessages;
    185124  end;
     125
     126  panel_files.Enabled := True;
     127  group_extract.Enabled := True;
     128  group_progress.Visible := False;
    186129end;
     130
    187131
    188132begin
Note: See TracChangeset for help on using the changeset viewer.