[Back to FILES SWAG index] [Back to Main SWAG index] [Original]
(*
In an earlier release of SWAG Andrew Eigus provided code for a fast
'FileExist' function.
The function however has a potential bug in that the filename passed
into the function must be ASCIIZ (null terminated) to work correctly.
It will also return a TRUE result for a directory name or the volume ID.
My 'EntryExists' function below includes the extra code to convert the
filename to ASCIIZ and has been optimised for speed slightly by replacing
the Jump instruction.
My 'FileExists' function below is an extended version which returns TRUE
for files only (not a directory entry or volume ID).
*)
FUNCTION EntryExists(FileName : String) : Boolean; ASSEMBLER;
ASM
PUSH DS {Save DS }
LDS SI,Filename {DS:SI => Filename }
XOR BX,BX {Clear BX }
MOV BL,[SI] {BX = Length(Filename) }
INC SI {DS:SI => Filename[1] }
MOV DX,SI {DS:DX => Filename[1] }
MOV [SI+BX],BH {Append Ascii 0 to Filename }
MOV AX,4300h {Get Attribute Function Code }
INT 21h {Get File Attributes }
MOV AL,BH {Set Default Result to FALSE }
CMC {Toggle Carry Flag }
ADC AL,AL {Change Result to TRUE if Failed }
POP DS {Restore DS }
END; {EntryExists}
FUNCTION FileExists(FileName : String) : Boolean; ASSEMBLER;
ASM
PUSH DS {Save DS }
LDS SI,Filename {DS:SI => Filename }
XOR BX,BX {Clear BX }
MOV BL,[SI] {BX = Length(Filename) }
INC SI {DS:SI => Filename[1] }
MOV DX,SI {DS:DX => Filename[1] }
MOV [SI+BX],BH {Append Ascii 0 to Filename }
MOV AX,4300h {Get Attribute Function Code }
INT 21h {Get File Attributes }
MOV AL,BH {Default Result = FALSE }
ADC CL,CL {Attribute * 2 + Carry Flag }
AND CL,31h {Directory or VolumeID or Failed }
JNZ @@Done {Yes - Exit }
INC AL {No - Change Result to TRUE }
@@Done:
POP DS {Restore DS }
END; {FileExists}
CONST
Found : ARRAY[Boolean] OF String[10] = ('Not Found', 'Found');
VAR
FileName : String;
BEGIN
Write('Enter file name to search: ');
ReadLn(FileName);
WriteLn('File "', FileName, '" ', Found[EntryExists(FileName)], '.');
END.
[Back to FILES SWAG index] [Back to Main SWAG index] [Original]