Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Каждый кто пишет на паскале обязан знать что такое SWAG (этот пример из свага 6летней давности) 21.08.01 00:07 Число просмотров: 1915
Автор: free Статус: Незарегистрированный пользователь
|
> В BP7.0 > Можно ли сделать подержку длинных имён файлов? > (LFN)
Найди и скачай SWAG из Сети. и 99% вопросов отпадут сами собой.
Я ваще удивляюсь - как можно писАть на паскале и не иметь SWAG'a ?????
;-\
type
TSearchRec = record
attr : longint;
creation : comp;
lastaccess : comp;
lastmodification : comp;
highfilesize : longint;
lowfilesize : longint;
reserved : comp;
name : array[0..259] of char;
shortname : array[0..13] of char;
handle : word;
end;
const
faReadOnly = $01;
faHidden = $02;
faSysFile = $04;
faVolumeID = $08;
faDirectory = $10;
faArchive = $20;
faAnyFile = $3F;
function findfirst(filespec:string;attr:word;var S:TSearchRec):integer;
begin
filespec := filespec + #0;
S.attr := attr;
asm
push ds
push ss
pop ds
lea dx,filespec+1
les di,S
mov ax,$714e
mov cx,attr
mov si,0
int $21
les di,S
mov word ptr es:[di+TSearchRec.handle], ax
jc @1
xor ax,ax
@1:
mov @result,ax
pop ds
end;
end;
function FindNext(var S:TSearchRec):integer;
begin
asm
mov ax,$714f
mov si,0
les di,S
mov bx,word ptr es:[di+TSearchRec.Handle]
int $21
jc @1
xor ax,ax
@1:
mov @result,ax
end;
end;
function FindClose(var S:TSearchRec):integer;
begin
asm
mov ax,$71a1
les di,S
mov bx,word ptr es:[di+TSearchRec.Handle]
int $21
jc @1
xor ax,ax
@1:
mov @result,ax
end;
end;
procedure ShowLongNames(const path:string);
var
S : TSearchRec;
Res : Integer;
begin
Res := findfirst(path+'\*.*',faAnyFile-faVolumeID,S);
while Res = 0 do
begin
with S do
begin
if (S.Attr and faDirectory) <> 0 then
begin
if (StrComp(Name,'.') <> 0) and (StrComp(Name,'..') <> 0) then
begin
if ShortName[0] <> #0 then
ShowLongNames(path+'\'+StrPas(ShortName))
else
ShowLongNames(path+'\'+StrPas(Name));
end;
end;
if ShortName[0] <> #0 then
writeln('ren ',path+'\'+StrPas(ShortName),' "',name,'"');
end;
Res := FindNext(S);
end;
FindClose(S);
end;
var
x : integer;
begin
showlongnames('D:');
end.
|
|
|