'File source from Holyguard.net
' Set, get, reset or check a file's attribute(s) :)
' Note: Code provided as-is.
$IFNDEF WIN32
SHOWMESSAGE "Umm, you can't use fileAttribs.inc on platforms other than Windows 9x.": END
$ENDIF
$IFNDEF __FILEATTRIBS_INC: $DEFINE __FILEATTRIBS_INC
$IFNDEF __RQINC
'-- Define all the File Attribute constants here if RapidQ.inc isn't included
CONST faReadOnly = 1
CONST faHidden = 2
CONST faSysFile = 4
CONST faVolumeID = 8
CONST faDirectory = 16
CONST faArchive = 32
CONST faAnyFile = 63
CONST faNormal = 128
CONST faTmpFile = 256
CONST faCompressed = 2048
$ENDIF
DECLARE FUNCTION ChMod LIB "kernel32" ALIAS "SetFileAttributesA" _
(lpFileName AS STRING, dwFileAttributes AS DWORD) AS LONG
DECLARE FUNCTION GetMod LIB "kernel32" ALIAS "GetFileAttributesA" _
(lpFileName AS STRING) AS LONG
DECLARE FUNCTIONI CanAccess(...) AS LONG
DECLARE FUNCTION RstMod(lpFileName AS STRING) AS LONG
' A better Access function, implemented in Rapid-Q
DIM CanAccess.ENOFILE AS LONG
FUNCTIONI CanAccess(...) AS LONG: CanAccess.ENOFILE=0
DIM lpFileName AS STRING, dwFileAttributes AS DWORD
lpFileName=PARAMSTR$(1): dwFileAttributes=PARAMVAL(1)
IF dwFileAttributes=0 THEN dwFileAttributes=faNormal
IF GetMod(lpFileName)=dwFileAttributes THEN
' Access mode matches dwFileAttributes
Result=1 ' True; this is its attribute
ELSE
' Not its attribute. Let's find out why...
IF FILEEXISTS(lpFileName)=0 THEN ' Oh, okay. File doesn't exist
CanAccess.ENOFILE=1: Result=0
ELSE
Result=0 ' Well, it just didn't match
END IF
END IF
END FUNCTIONI
' Resets file attributes to faNormal, restoring normal access
' R(e)s(e)t[File]Mod(e)
DIM RstMod.ENOFILE AS LONG
FUNCTION RstMod(lpFileName AS STRING) AS LONG: RstMod.ENOFILE=0
IF FILEEXISTS(lpFileName)=0 THEN
Result=0: RstMod.ENOFILE=1
ELSE
IF ChMod(lpFileName, faNormal)=0 THEN
Result=0 ' For some reason we're not able to change the access mode, but it _does_ exist. Maybe it's locked
ELSE
Result=1
END IF
END IF
END FUNCTION
$ENDIF