open-insight/LSL2/STPROC/FILE_SERVICES.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

154 lines
5.8 KiB
Plaintext

Function File_Services(@Service, @Params)
/************************************************************************************************
This program is proprietary and is not to be used by or disclosed to others, nor is it to
be copied without written permission from SRP Computer Solutions, Inc.
Name : File_Services
Description : Service module input / output operations.
Notes : For more information visit https://docs.microsoft.com/en-us/windows/win32/api/fileapi/
For a list of Windows error messages visit:
https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499-
Parameters :
Service [in] -- Name of the service being requested
Params [in/out] -- Service specific parameters
Response [out] -- Response to be sent back to the requesting procedure
Metadata :
History : (Date, Initials, Notes)
09/04/20 djs Original programmer
09/21/20 djs Added CopyFile and GetFileSize services.
************************************************************************************************/
#pragma precomp SRP_PreCompiler
$insert SERVICE_SETUP
$insert LOGICAL
$insert FILE_SERVICES_EQUATES
Declare function SRPWinAPI_CreateFile, SRPWinAPI_GetFileSize, SRPWinAPI_CopyFile, Direxists, DirList, SRP_Datetime, Dir
Declare subroutine SRPWinAPI_CloseHandle
GoToService else
Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
end
Return Response or ""
//-----------------------------------------------------------------------------
// Service Parameter Options
//-----------------------------------------------------------------------------
Options DESIRED_ACCESS = GENERIC_READ$, GENERIC_WRITE$, GENERIC_EXECUTE$, GENERIC_ALL$
Options SHARE_MODE = FILE_SHARE_NONE$, FILE_SHARE_DELETE$, FILE_SHARE_READ$, FILE_SHARE_WRITE$
Options CREATION_DISPOSITION = CREATE_ALWAYS$, CREATE_NEW$, OPEN_ALWAYS$, OPEN_EXISTING$, TRUNCATE_EXISTING$
Options FILE_ATTRIBUTES = FILE_ATTRIBUTE_ARCHIVE$, FILE_ATTRIBUTE_ENCRYPTED$, FILE_ATTRIBUTE_HIDDEN$, FILE_ATTRIBUTE_NORMAL$, FILE_ATTRIBUTE_OFFLINE$, FILE_ATTRIBUTE_READONLY$ FILE_ATTRIBUTE_SYSTEM$, FILE_ATTRIBUTE_TEMPORARY$
//-----------------------------------------------------------------------------
// SERVICES
//-----------------------------------------------------------------------------
Service LockFile(FilePath, DesiredAccess = DESIRED_ACCESS, ShareMode = SHARE_MODE, CreationDisposition = CREATION_DISPOSITION, FileAttributes = FILE_ATTRIBUTES)
If FileAttributes EQ '' then FileAttribute = FILE_ATTRIBUTE_NORMAL$
SecurityAttributes = 0 ; // Pointer to security structure - not utilized by this service module at this time
TemplateFile = 0 ; // Handle to a template file - not utilized by this service module at this time
FileHandle = SRPWinAPI_CreateFile(FilePath, DesiredAccess, ShareMode, SecurityAttributes, CreationDisposition, FileAttributes, TemplateFile)
Response = FileHandle
End Service
Service UnlockFile(FileHandle)
SRPWinAPI_CloseHandle(FileHandle)
* Sleepery(30000)
End Service
Service GetFileSize(FileHandle)
UnusedPointer = ''
Response = SRPWinAPI_GetFileSize(FileHandle, UnusedPointer)
end service
Service CopyFile(SourceFilepath, DestFilepath)
SourceFilepath := \00\
DestFilepath := \00\
Response = SRPWinAPI_CopyFile(GetPointer(SourceFilepath), GetPointer(DestFilepath), 0)
end service
Service CheckFileExtension(FilePath, ExpectedExtension)
If ExpectedExtension NE '' then
If ExpectedExtension[1,1] NE '.' then
ExpectedExtension = '.' : ExpectedExtension
end
ExtensionLen = Len(ExpectedExtension)
If FilePath NE '' then
LastCharPos = Len(FilePath)
CompareValue = FilePath[LastCharPos - (ExtensionLen - 1), ExtensionLen]
If CompareValue EQ ExpectedExtension then
Response = True$
end else
Response = False$
end
end else
Error_Services('Add', 'Error in FILE_SERVICES -> CheckFileExtension, File path not provided.')
end
end else
Error_Services('Add', 'Error in FILE_SERVICES -> CheckFileExtension, Comparison extension not provided.')
end
end service
Service GetDirFileCount(Dir)
Response = 0
If dir NE '' then
If DirExists(Dir) then
InitDir Dir:'\*.*'
FileList = DirList()
Response = DCount(FileList, @FM)
end else
Error_Services('Add', 'Error in File_Services -> GetDirFileCount: Directory does not exist.')
end
end else
Error_Services('Add', 'Error in File_Services -> GetDirFileCount: No directory specified.')
end
end service
Service GetDirOldestFileDate(Dir)
Response = ''
If dir NE '' then
If DirExists(Dir) then
InitDir Dir:'\*.*'
FileList = DirList()
OldestFileDate = ''
for each File in FileList using @FM
If File NE '' then
FilePath = Dir : '\' : File
FileInfo = Dir(FilePath)
FileDate = FileInfo<2>
FileTime = FileInfo<3>
FileDTM = SRP_Datetime('Combine', FileDate, FileTime)
If FileDTM LT OldestFileDate OR OldestFileDate EQ '' then OldestFileDate = FileDTM
end
Next File
Response = OldestFileDate
end else
Error_Services('Add', 'Error in File_Services -> GetDirOldestFileDate: Directory does not exist.')
end
end else
Error_Services('Add', 'Error in File_Services -> GetDirOldestFileDate: No directory specified.')
end
end service