⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iso9660microudfprimaryvolclass.pas

📁 用于CD/DVD烧录的Delphi源码,包括source和demo
💻 PAS
字号:
{-----------------------------------------------------------------------------
 Unit Name: ISO9660MicroUDFPrimaryVolClass
 Author:    Dancemammal, Daniel Mann / Thomas Koos (original class structure)
 Purpose:  Primary Volume Descriptor Class
 History:  First Code Release
-----------------------------------------------------------------------------}


Unit ISO9660MicroUDFPrimaryVolClass;

Interface

Uses
  SysUtils,
  Classes,
  CovertFuncs,
  ISO9660MicroUDFClassTypes;


Type
  TPrimaryVolumeDescriptor = Class
  Private
    Function  GetString(Const AIndex : Integer): String;
    Procedure SetString(const AIndex : Integer; Const Value: String);
  Protected
    FDescriptor : TVolumeDescriptor;
    LastErrorString : String;
  Public
    Constructor Create; Overload; Virtual;
    Constructor Create(Const APrimaryVolumeDescriptor : TVolumeDescriptor); Overload; Virtual;
    Destructor  Destroy; Override;
    Function GetLastError : String;
  Published
    Property  Descriptor : TVolumeDescriptor  Read  fDescriptor;
    Property  SystemIdentifier            : String   Index 0  Read  GetString Write SetString;
    Property  VolumeIdentifier            : String   Index 1  Read  GetString Write SetString;
    Property  VolumeSetIdentifier         : String   Index 2  Read  GetString Write SetString;
    Property  PublisherIdentifier         : String   Index 3  Read  GetString Write SetString;
    Property  DataPreparerIdentifier      : String   Index 4  Read  GetString Write SetString;
    Property  ApplicationIdentifier       : String   Index 5  Read  GetString Write SetString;
    Property  CopyrightFileIdentifier     : String   Index 6  Read  GetString Write SetString;
    Property  AbstractFileIdentifier      : String   Index 7  Read  GetString Write SetString;
    Property  BibliographicFileIdentifier : String   Index 8  Read  GetString Write SetString;
    Property  VolumeCreationDateAndTime   : TVolumeDateTime   Read  fDescriptor.Primary.VolumeCreationDateAndTime
                                                              Write fDescriptor.Primary.VolumeCreationDateAndTime;
    Property  VolumeModificationDateAndTime : TVolumeDateTime
                                                              Read  fDescriptor.Primary.VolumeModificationDateAndTime
                                                              Write fDescriptor.Primary.VolumeModificationDateAndTime;
    Property  VolumeExpirationDateAndTime : TVolumeDateTime   Read  fDescriptor.Primary.VolumeExpirationDateAndTime
                                                              Write fDescriptor.Primary.VolumeExpirationDateAndTime;
    Property  VolumeEffectiveDateAndTime  : TVolumeDateTime   Read  fDescriptor.Primary.VolumeEffectiveDateAndTime
                                                              Write fDescriptor.Primary.VolumeEffectiveDateAndTime;
    Property  VolumeSetSize               : TBothEndianWord   Read  fDescriptor.Primary.VolumeSetSize
                                                              Write fDescriptor.Primary.VolumeSetSize;
    Property  VolumeSequenceNumber        : TBothEndianWord   Read  fDescriptor.Primary.VolumeSequenceNumber
                                                              Write fDescriptor.Primary.VolumeSequenceNumber;
    Property  LogicalBlockSize            : TBothEndianWord   Read  fDescriptor.Primary.LogicalBlockSize
                                                              Write fDescriptor.Primary.LogicalBlockSize;
    Property  PathTableSize               : TBothEndianDWord  Read  fDescriptor.Primary.PathTableSize
                                                              Write fDescriptor.Primary.PathTableSize;
    Property  VolumeSpaceSize             : TBothEndianDWord  Read  fDescriptor.Primary.VolumeSpaceSize
                                                              Write fDescriptor.Primary.VolumeSpaceSize;
                                                              
    Property  RootDirectory               : TRootDirectoryRecord
                                                              Read  fDescriptor.Primary.RootDirectory
                                                              Write fDescriptor.Primary.RootDirectory;

    Property  LocationOfTypeLPathTable    : LongWord          Read  fDescriptor.Primary.LocationOfTypeLPathTable
                                                              Write fDescriptor.Primary.LocationOfTypeLPathTable;
    Property  LocationOfOptionalTypeLPathTable : LongWord     Read  fDescriptor.Primary.LocationOfOptionalTypeLPathTable
                                                              Write fDescriptor.Primary.LocationOfOptionalTypeLPathTable;
    Property  LocationOfTypeMPathTable    : LongWord          Read  fDescriptor.Primary.LocationOfTypeMPathTable
                                                              Write fDescriptor.Primary.LocationOfTypeMPathTable;
    Property  LocationOfOptionalTypeMPathTable : LongWord     Read  fDescriptor.Primary.LocationOfOptionalTypeMPathTable
                                                              Write fDescriptor.Primary.LocationOfOptionalTypeMPathTable;
  End;



Implementation





Constructor TPrimaryVolumeDescriptor.Create;
Begin
  Inherited Create;
  FillChar(FDescriptor, SizeOf(FDescriptor), 0);
  FDescriptor.DescriptorType := vdtPVD;
  FDescriptor.Primary.SystemIdentifier        := ISO_SYSTEM_ID;
  FDescriptor.Primary.StandardIdentifier      := ISO_STANDARD_ID;
  FDescriptor.Primary.VolumeDescriptorVersion := 1;
  FDescriptor.Primary.VolumeSetSize           := BuildBothEndianWord(1);
  FDescriptor.Primary.ApplicationIdentifier   := ISO_LIBRARY_ID;
  FillChar(FDescriptor.Primary.PublisherIdentifier,length(FDescriptor.Primary.PublisherIdentifier),$20);
  FillChar(FDescriptor.Primary.DataPreparerIdentifier,length(FDescriptor.Primary.DataPreparerIdentifier),$20);
  FillChar(FDescriptor.Primary.PublisherIdentifier,length(FDescriptor.Primary.PublisherIdentifier),$20);
  FillChar(FDescriptor.Primary.VolumeSetIdentifier,length(FDescriptor.Primary.VolumeSetIdentifier),$20);
  FDescriptor.Primary.FileStructureVersion    := $01;
  FDescriptor.Primary.VolumeCreationDateAndTime := BuildVolumeDateTime(NOW,0);
  FDescriptor.Primary.VolumeModificationDateAndTime := BuildVolumeDateTime(NOW,0);
  FDescriptor.Primary.LogicalBlockSize              := BuildBothEndianWord(2048);
  FDescriptor.Primary.VolumeSequenceNumber          := BuildBothEndianWord(1);
  FDescriptor.Primary.VolumeSetSize                 := BuildBothEndianWord(1);

  FDescriptor.Primary.LocationOfTypeLPathTable      := 257;
  FDescriptor.Primary.LocationOfOptionalTypeLPathTable := 0;
  FDescriptor.Primary.LocationOfTypeMPathTable      := SwapDWord(258);
  FDescriptor.Primary.LocationOfOptionalTypeMPathTable := 0;

  FillChar(FDescriptor.Primary.EscapeSequences,32,0);

  FDescriptor.Primary.EscapeSequences[0] := '%';
  FDescriptor.Primary.EscapeSequences[1] := '/';
  FDescriptor.Primary.EscapeSequences[2] := 'E';
End;




Constructor TPrimaryVolumeDescriptor.Create(Const APrimaryVolumeDescriptor: TVolumeDescriptor);
Begin
  Inherited Create;
  If ( APrimaryVolumeDescriptor.DescriptorType <> vdtPVD ) Then
    LastErrorString := ('MisMatched Primary Volume Descriptor');
  fDescriptor := APrimaryVolumeDescriptor;
End;


Destructor TPrimaryVolumeDescriptor.Destroy;
Begin
  Inherited Destroy;
End;


Function TPrimaryVolumeDescriptor.GetLastError : String;
begin
    Result := LastErrorString;
end;


Function TPrimaryVolumeDescriptor.GetString(Const AIndex : Integer): String;
Begin
  Case AIndex Of
    0 : Result := fDescriptor.Primary.SystemIdentifier;
    1 : Result := fDescriptor.Primary.VolumeIdentifier;
    2 : Result := fDescriptor.Primary.VolumeSetIdentifier;
    3 : Result := fDescriptor.Primary.PublisherIdentifier;
    4 : Result := fDescriptor.Primary.DataPreparerIdentifier;
    5 : Result := fDescriptor.Primary.ApplicationIdentifier;
    6 : Result := fDescriptor.Primary.CopyrightFileIdentifier;
    7 : Result := fDescriptor.Primary.AbstractFileIdentifier;
    8 : Result := fDescriptor.Primary.BibliographicFileIdentifier;
  End;
End;



Procedure TPrimaryVolumeDescriptor.SetString(Const AIndex: Integer; Const Value: String);
Begin

  Case AIndex Of
    0 : StrPCopy(fDescriptor.Primary.SystemIdentifier,
                  Copy(Value, 1, Length(fDescriptor.Primary.SystemIdentifier)));
    1 : StrPCopy(fDescriptor.Primary.VolumeIdentifier,
                  Copy(Value, 1, Length(fDescriptor.Primary.VolumeIdentifier)));
    2 : StrPCopy(fDescriptor.Primary.VolumeSetIdentifier,
                  Copy(Value, 1, Length(fDescriptor.Primary.VolumeSetIdentifier)));
    3 : StrPCopy(fDescriptor.Primary.PublisherIdentifier,
                  Copy(Value, 1, Length(fDescriptor.Primary.PublisherIdentifier)));
    4 : StrPCopy(fDescriptor.Primary.DataPreparerIdentifier,
                  Copy(Value, 1, Length(fDescriptor.Primary.DataPreparerIdentifier)));
    5 : StrPCopy(fDescriptor.Primary.ApplicationIdentifier,
                  Copy(Value, 1, Length(fDescriptor.Primary.ApplicationIdentifier)));
    6 : StrPCopy(fDescriptor.Primary.CopyrightFileIdentifier,
                  Copy(Value, 1, Length(fDescriptor.Primary.CopyrightFileIdentifier)));
    7 : StrPCopy(fDescriptor.Primary.AbstractFileIdentifier,
                  Copy(Value, 1, Length(fDescriptor.Primary.AbstractFileIdentifier)));
    8 : StrPCopy(fDescriptor.Primary.BibliographicFileIdentifier,
                  Copy(Value, 1, Length(fDescriptor.Primary.BibliographicFileIdentifier)));
  End;
End;


End.


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -