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

📄 mbisolib.pas

📁 刻录机源码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  Done: boolean;
  Jump, I, J: integer;
  AA, BB: PDirEntry;
begin
  Jump := N;
  while (Jump > 1) do
  begin
    Jump := Jump div 2;
    repeat
      Done := true;
      for J := 1 to (N - Jump) do
      begin
        I := J + Jump;
        AA := A[J];
        BB := A[I];
        if (AA.Depth > BB.Depth) then
        begin
          Swap(A[J], A[I]);
          Done := false
        end;
      end;
    until Done;
  end;
  for i:=0 to N do
  begin
    AA := A[i];
    AA.Number := i+1;
  end;
end;

procedure SortNumber(var A : array of Pointer; N : integer);
var
  Done: boolean;
  Jump, I, J: integer;
  AA, BB: PDirEntry;
begin
  Jump := N;
  while (Jump > 1) do
  begin
    Jump := Jump div 2;
    repeat
      Done := true;
      for J := 1 to (N - Jump) do
      begin
        I := J + Jump;
        AA := A[J];
        BB := A[I];
        if (AA.Number > BB.Number) then
        begin
          Swap(A[J], A[I]);
          Done := false
        end;
      end;
    until Done;
  end;
  for i:=0 to N do
  begin
    AA := A[i];
    AA.Number := i+1;
  end;
end;

procedure SortParent(var A : array of Pointer; N : integer);
var
  Done: boolean;
  Jump, I, J: integer;
  AA, BB: PDirEntry;
begin
  Jump := N;
  while (Jump > 1) do
  begin
    Jump := Jump div 2;
    repeat
      Done := true;
      for J := 1 to (N - Jump) do
      begin
        I := J + Jump;
        AA := A[J];
        BB := A[I];
        if (AA.Parent.Number > BB.Parent.Number) then
        begin
          Swap(A[J], A[I]);
          Done := false
        end;
      end;
    until Done;
  end;
  for i:=0 to N do
  begin
    AA := A[i];
    AA.Number := i+1;
  end;
end;

function IntToStrF(i, l: Integer): String;
var
  s: string;
begin
  s := '%.'+IntToStr(l)+'d ';
  result := Format(s,[ i ]);
end;

procedure SortLN(var A : array of Pointer; N : integer; Joliet: Boolean);
var
  Done: boolean;
  Jump, I, J: integer;
  AA, BB: PDirEntry;
  sa, sb: string;
begin

  Jump := N;
  while (Jump > 1) do
  begin
    Jump := Jump div 2;
    repeat
      Done := true;
      for J := 1 to (N - Jump) do
      begin
        I := J + Jump;
        AA := A[J];
        BB := A[I];
        if Joliet then
        begin
          sa := IntToStrF(AA.Depth, 4)+FileName(AA.LongName);
          sb := IntToStrF(BB.Depth, 4)+FileName(BB.LongName);
        end
        else
        begin
          sa := IntToStrF(AA.Depth, 4)+FileName(AA.ShortName);
          sb := IntToStrF(BB.Depth, 4)+FileName(BB.ShortName);
        end;
        if (SA > SB) then
        begin
          Swap(A[J], A[I]);
          Done := false
        end;
      end;
    until Done;
  end;
  for i:=0 to N do
  begin
    AA := A[i];
    AA.Number := i+1;
  end;
end;

procedure SortPN(var A : array of Pointer; N : integer; Joliet: Boolean);
var
  Done: boolean;
  Jump, I, J: integer;
  AA, BB: PDirEntry;
  s, sa, sb: string;
begin
  s := '                                                                                                                                                                                                                                                               ';
  Jump := N;
  while (Jump > 1) do
  begin
    Jump := Jump div 2;
    repeat
      Done := true;
      for J := 1 to (N - Jump) do
      begin
        I := J + Jump;
        AA := A[J];
        BB := A[I];
        if Joliet then
        begin
          sa := IntToStrF(AA.Parent.Number, 4)+FileName(AA.LongName);
          sb := IntToStrF(BB.Parent.Number, 4)+FileName(BB.LongName);
        end
        else
        begin
          sa := IntToStrF(AA.Parent.Number, 4)+FileName(AA.ShortName);
          sb := IntToStrF(BB.Parent.Number, 4)+FileName(BB.ShortName);
        end;
        if (SA > SB) then
        begin
          Swap(A[J], A[I]);
          Done := false
        end;
      end;
    until Done;
  end;
  for i := 0 to N do
  begin
    AA := A[i];
    AA.Number := i + 1;
  end;
end;

function Sectors2(var P: PFileEntry): Int64;
var
  bytes: Int64;
begin
  bytes := p.FileSize;
  if bytes = 0 then
  begin
    result := 0;
    exit;
  end;
  if bytes mod (DefaultSectorSize+276) = 0 then
    Result := bytes div (DefaultSectorSize+276)
  else
    Result := (bytes div (DefaultSectorSize+276))+1;
  p.FileSize := Result * 2048;
  p.FileSizeJ := Result * 2048;
  if Result < 150 then Result := 150;
  p.SpaceReqOnDisc := Result * (DefaultSectorSize);
end;

function Sectors(bytes: Int64): Int64;
begin
  if bytes = 0 then
  begin
    result := 0;
    exit;
  end;
  if bytes mod DefaultSectorSize = 0 then
    Result := bytes div DefaultSectorSize
  else
    Result := (bytes div DefaultSectorSize)+1
end;

function YearOf(const AValue: TDateTime): Word;
var
  LMonth, LDay: Word;
begin
  DecodeDate(AValue, Result, LMonth, LDay);
end;

function MonthOf(const AValue: TDateTime): Word;
var
  LYear, LDay: Word;
begin
  DecodeDate(AValue, LYear, Result, LDay);
end;

function DayOf(const AValue: TDateTime): Word;
var
  LYear, LMonth: Word;
begin
  DecodeDate(AValue, LYear, LMonth, Result);
end;

function HourOf(const AValue: TDateTime): Word;
var
  LMinute, LSecond, LMilliSecond: Word;
begin
  DecodeTime(AValue, Result, LMinute, LSecond, LMilliSecond);
end;

function MinuteOf(const AValue: TDateTime): Word;
var
  LHour, LSecond, LMilliSecond: Word;
begin
  DecodeTime(AValue, LHour, Result, LSecond, LMilliSecond);
end;

function SecondOf(const AValue: TDateTime): Word;
var
  LHour, LMinute, LMilliSecond: Word;
begin
  DecodeTime(AValue, LHour, LMinute, Result, LMilliSecond);
end;

procedure SetDateTime(Time: TDateTime; var d: TDirectoryDescriptor);
begin
  d.Year := LoByte(YearOf(Time)-1900);
  d.Month := LoByte(MonthOf(Time));
  d.Day := LoByte(DayOf(Time));
  d.Hour := LoByte(HourOf(Time));
  d.Min := LoByte(MinuteOf(Time));
  d.Sec := LoByte(SecondOf(Time));
  d.TimeDiffernce := TimeZoneDiff;
end;

function MSF2LBA(h, m, s, f: Byte): Cardinal;
begin
  result := (h * 60 * 60 * 75) + (m * 60 * 75)+(s * 75) + (f);
end;

function  IntToDec(i: Int64; n: Integer=2; pad: String = '0'): String;
var
  s1, s2: String;
  l, j: Integer;
begin
  s1 := IntToStr(i);
  l := Length(s1);
  for j:=l to n-1 do
    s2 := s2 + Pad;
  result := s2+s1;
end;

function ExtractLastDir(Path: String): String;
var
  i, j: Integer;
begin
  j := 1;
  for i := Length(Path)-1 downto 1 do
  if path[i] = '\' then
  begin
    j:=i;
    Break;
  end;
  result := Copy(path, j, Length(Path));
end;
{
var
  ii, i: Integer;
label SkipMore;
begin
  ii := Length(Path)-1;
  for i:= Length(Path)-1 downto 1 do
  begin
    if path[i] = '\' then goto SkipMore;
    dec(ii);
  end;
SkipMore:
  result := Copy(path, ii, Length(Path));
end;                                     }

end.




 

⌨️ 快捷键说明

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