[Back to DOS SWAG index] [Back to Main SWAG index] [Original]
program TName; { to test the TrueName function }
function TrueName(var P: string): string; assembler;
{ returns TrueName just like the DOS command does }
{ if error, returns a zero length string }
{ will probably crash for DOS versions < 3.0 }
{ donated to the Public Domain by Bj”rn Felten @ 2:203/208 }
asm
push ds
lds si,P
@strip:
inc si { skip length byte ... }
cmp byte ptr [si],' '
jle @strip { ... and trailing white space }
les di,@Result
inc di { leave room for byte count }
mov ah,60h { undocumented DOS call }
int 21h
pop ds
jc @error
mov cx,80 { convert ASCIZ to Pascal string }
xor ax,ax
repnz scasb { find trailing zero }
mov ax,80
sub ax,cx { get length byte }
jmp @ret
@error:
xor ax,ax { return zero length string }
@ret:
les di,@Result
stosb
end;
var S:string;
begin
S:=paramstr(1);
if paramcount<>1 then
writeln('Usage: tname <filename>')
else
writeln('TrueName of ',S,' is ',TrueName(S))
end.
[Back to DOS SWAG index] [Back to Main SWAG index] [Original]