unit Data;

interface

uses Classes, Graphics;

const
  Version: String   = 'v0.33a';
  DBVersion: String = '0.3';
  CrLf: String[2]   = #13 + #10;

type
  TData = array of Byte;

  THeader = packed record
    Ident:      array[0..$13] of Byte;
    Files:      LongWord;
    NamedFiles: LongWord;
    Extensions: LongWord;
    DataAddr:   LongWord;
    DataSize:   LongWord;
    NamesAddr:  LongWord;
    NamesSize:  LongWord;
    Ident2:     array[0..$F] of Byte;
  end;
  TFilesMap = array of packed record
    Extension: array[0..$3] of Char;
    DataAddr:  LongWord;
    NameAddr:  LongWord;
    FileSize:  LongWord;
    FileType:  LongWord;
  end;

  TFileInfo = packed record
    ID:      Integer;
    FileName: String;
    FileNameHex: String;
    Extension: String[4];
    Name:    String;
    Size:    LongWord;
    FileType: LongWord;
    DatAddr: LongWord;
    opened:  Boolean;
  end;
  TFiles = array of TFileInfo;

  TNamedFilesMap = array of packed record
    FileNumber: LongWord;
    blubb:      LongWord;
  end;
  TExtensionsMap = array of packed record
    Ident:     array[0..$7] of Byte;
    Extension: array[0..$3] of Char;
    ExtCount:  LongWord;
  end;

  TLevelInfo = record
    Ident: array[0..$13] of Byte;
    LevelNumber: Byte;
  end;

  TAppSettings = record
    DatPath:     String[250];
    ExtractPath: String[250];
    FilenumbersAsHex: Boolean;
    CharSet:     TFontCharSet;
    HideUnusedData: Boolean;
  end;

  TExportHandlers = record
    Ext:     String[4];
    needed:  Boolean;
    Handler: function(fileid: LongWord; filename: String): Integer;
  end;

  TStringArray = array of String;
  TExtList     = array of record
    Ext:   String;
    Count: LongWord;
  end;

  TRawInfo = record
    src_id:     LongWord;
    src_offset: LongWord;
    raw_addr:   LongWord;
    raw_size:   LongWord;
    loc_sep:    Boolean;
  end;
  TRawList = array of TRawInfo;

  TDatLinks = array of record
    Src_Offset: LongWord;
    Target:     LongWord;
  end;

  TToolList = array of record
    context: String;
    name: String;
    exts: String;
  end;

  TSortType = (stIDAsc, stIDDesc, stNameAsc, stNameDesc, stExtAsc, stExtDesc);

var
{
  opened_state:Byte=0;
  dat_filename:String='';
  raw_filename:String='';
  dat_os_mac:Boolean=False;
  dat_header:Theader;
  dat_filesmap:Tfilesmap;
  dat_files:Tfiles;
  dat_namedfilesmap:Tnamedfilesmap;
  dat_extensionsmap:Textensionsmap;
}
  AppSettings:     TAppSettings;
  AppSettingsFile: file of TAppSettings;
{
  database_level:LongWord;
  database_ident:Array[0..$13] of Byte;
}
const
{  header_ident1_pc:Array[0..$13] of Byte=
      ($1F,$27,$DC,$33,$DF,$BC,$03,$00,$31,$33,$52,$56,$40,$00,$14,$00,$10,$00,$08,$00);
  header_ident1_mac:Array[0..$13] of Byte=
      ($61,$30,$C1,$23,$DF,$BC,$03,$00,$31,$33,$52,$56,$40,$00,$14,$00,$10,$00,$08,$00);
  header_ident2:Array[0..$F] of Byte=
      ($99,$CF,$40,$00,$90,$4F,$63,$00,$F4,$55,$5F,$00,$90,$4F,$63,$00);
}
  export_noerror: Integer = 0;
  export_nohandler: Integer = 1;
  export_handlererror: Integer = 2;
  export_error: Integer = 3;
{
  opened_nothing:Byte=0;
  opened_dat:Byte=1;
  opened_db:Byte=2;
}
implementation

end.
