home *** CD-ROM | disk | FTP | other *** search
- (*
- 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.