[Back to DIRS SWAG index] [Back to Main SWAG index] [Original]
{******************************************************************
* Create a function for returning a fully qualified path/file *
* string, with the *'s replaced by the appropriate number of ?'s.*
* *
* (C) Daniel A. Bronstein, Michigan State University, 1991. *
* May be used freely with acknowledgement. *
*****************************************************************}
unit qualify;
Interface
uses dos; {for pathstr definition}
function fqualify(var ps:pathstr):pathstr;
Implementation
{$F+} {Far call so loading of the variable is simplified for asm.}
function fqualify(var ps:pathstr):pathstr;
begin
asm
push ds {Save DS, else will crash after exit}
push si {and just to be safe, save SI too.}
lds si,ps {Load address of pathstring,}
xor ax,ax {clear AX,}
cld {set direction flag and}
lodsb {get length byte, incrementing SI.}
mov bx,ax {Move length to BX and add}
mov byte ptr[si+bx],0 {a #0 to end to create ASCIIZ string.}
les di,@result {Load address of the output string}
mov bx,di {and save it in BX.}
inc di {Point past length byte of result}
mov ah,60h {and call DOS function 60h.}
int 21h
jnc @ok {If no carry then ok, else return}
mov byte ptr[es:bx],0 {a 0 length string.}
jmp @xit
@ok:
xor cx,cx {Clear CX and}
@0loop:
inc di {loop until find end of returned}
inc cx {ASCIIZ string.}
cmp byte ptr[es:di],0 {**Note that on 286 & 386 inc/cmp is faster}
jne @0loop {**than CMPSB, so used here.}
mov byte ptr[es:bx],cl {Set the length byte of the result.}
@xit:
pop si {Restore SI and}
pop ds {DS, then}
end; {exit.}
end;
{$F-}
begin
end.
{ ================================== DEMO ============================}
PROGRAM Qualtest;
USES DOS, Qualify;
VAR
MyString, YourString : PathStr;
BEGIN
MyString := 'Foo*.*';
YourString := FQualify(MyString);
Writeln(YourString);
Readln;
END.
[Back to DIRS SWAG index] [Back to Main SWAG index] [Original]