📄 mbisolib.pas
字号:
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 + -