[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]