BinCueImage.pas
上传用户:wanyu_2000
上传日期:2021-02-21
资源大小:527k
文件大小:4k
源码类别:

DVD

开发平台:

Delphi

  1. {-----------------------------------------------------------------------------
  2.  Unit Name: BinCueImage
  3.  Author:    Paul Fisher
  4.  Purpose:   Class for a BIN/CUE disk at once (DAO) image
  5.  History:
  6. -----------------------------------------------------------------------------}
  7. unit BinCueImage;
  8. interface
  9. uses
  10.   Classes, CustomImage, SysUtils, SCSIDefs, Resources, CovertFuncs, BinCueReader;
  11. const
  12.       CUE_OK               = 0;
  13.       CUE_CUEMISSING       = 1;
  14.       CUE_BINMISSING       = 2;
  15.       CUE_CUEFILEEXPECTED  = 3;
  16.       CUE_BINFILEEXPECTED  = 4;
  17.       CUE_BINARYEXPECTED   = 5;
  18.       CUE_TRACKEXPECTED    = 6;
  19.       CUE_TRACKNUMEXPECTED = 7;
  20.       CUE_INDEXEXPECTED    = 8;
  21.       CUE_INDEXNUMEXPECTED = 9;
  22.       CUE_INDEXMSFEXPECTED = 10;
  23.       CUE_UNKNOWN_ERROR    = 11;
  24. type
  25.     TBinCueImage = class(TCustomImage)
  26.   private
  27.       FErrorString: string;
  28.       FErrorCode: Integer;
  29.       FCUEFileName : String;
  30.       FBINFileName : String;
  31.       FSectorSize : Integer;
  32.       FDataBlock  : Integer;
  33.       FTrackMode  : Integer;
  34.       CueFileReader: TBinCueReader;
  35.       FATIPCueList : TATIPCueList;
  36.       procedure AutoInitialize;
  37.       procedure AutoDestroy;
  38.       Function GetBinFileSize : Integer;
  39.       Procedure ConvertTrackMode(BINMode : Integer);
  40.       Procedure ReadCueFile;
  41.   Public
  42.       constructor Create(CUEFileName : String);
  43.       destructor Destroy; override;
  44.       function SetupBINCUEImage : Integer;
  45.       property CUEFileName: String read FCUEFileName;
  46.       Property BINFileName: String read FBINFileName;
  47.       Property BINFileSize: Integer read GetBinFileSize;
  48.       Property ATIPCueList : TATIPCueList Read FATIPCueList;
  49.       property SectorSize : Integer Read FSectorSize;
  50.       property DataBlock  : Integer Read FDataBlock;
  51.       property TrackMode  : Integer Read FTrackMode;
  52.     end;
  53. implementation
  54. Procedure TBinCueImage.ConvertTrackMode(BINMode : Integer);
  55. begin
  56.      if (BINMode > 5) then FTrackMode := CDR_MODE_DATA
  57.         else
  58.            FTrackMode := CDR_MODE_DATA;//CDR_MODE_DAO_96;
  59.      Case BINMode of
  60.         1 : Begin FSectorSize := 2352; FDataBlock := RAW_DATA_BLOCK; end;   //Audio
  61.         2 : Begin FSectorSize := 2352; FDataBlock := MODE_1; end;           //'MODE1 / 2352';
  62.         3 : Begin FSectorSize := 2352; FDataBlock := MODE_2; end;           //'MODE2 / 2352';
  63.         4 : Begin FSectorSize := 2352; FDataBlock := MODE_2_XA_FORM_1; end; //'MODE2 FORM1 / 2352';
  64.         5 : Begin FSectorSize := 2352; FDataBlock := MODE_2_XA_FORM_2; end; //'MODE2 FORM2 / 2352';
  65.         6 : Begin FSectorSize := 2048; FDataBlock := MODE_1; end;           //'MODE1 / 2048';
  66.         7 : Begin FSectorSize := 2048; FDataBlock := MODE_2; end;           //'MODE2 / 2048';
  67.      end;
  68. end;
  69. procedure TBinCueImage.AutoInitialize;
  70. begin
  71.    FErrorCode := 0;
  72.    FErrorString := '';
  73.    FCUEFileName := '';
  74.    FBINFileName := '';
  75.    ImageType := ITBinCueImage;
  76.    CueFileReader := TBinCueReader.Create;
  77. end;
  78. procedure TBinCueImage.AutoDestroy;
  79. begin
  80.   CueFileReader.free;
  81. end;
  82. Function TBinCueImage.GetBinFileSize: Integer;
  83. begin
  84.    Result := 0;
  85.    if FBINFileName = '' then exit;
  86.    if FileExists(FBINFileName) then
  87.         Result := GetFileSize(FBINFileName) div (1024*1024);
  88. end;
  89. Procedure TBinCueImage.ReadCueFile;
  90. begin
  91.   FErrorCode := CueFileReader.OpenCueFile(FCueFileName);
  92.   if FErrorCode <> CUE_OK then
  93.   begin
  94.       FErrorString := resOpenCUEError;
  95.   end;
  96. end;
  97. function TBinCueImage.SetupBINCUEImage : Integer;
  98. var
  99.      Path : String;
  100. begin
  101.      ReadCueFile;
  102.      Path := extractfilepath(FCueFileName);
  103.      FBINFileName := Path + CueFileReader.BinFileName;
  104.      FATIPCueList := CueFileReader.ATIPCueList;
  105.      ConvertTrackMode(FATIPCueList.BurnMode);
  106.      Result := 0;
  107. end;
  108. constructor TBinCueImage.Create(CUEFileName : String);
  109. begin
  110.    inherited Create;
  111.    AutoInitialize;
  112.    FCUEFileName := CUEFileName;
  113. end;
  114. destructor TBinCueImage.Destroy;
  115. begin
  116.    AutoDestroy;
  117.    inherited Destroy;
  118. end;
  119. end.