halflife25-sdk/public/FileSystem.h
2024-08-20 19:58:27 -07:00

194 lines
7.5 KiB
C++
Raw Permalink Blame History

//========= Copyright <20> 1996-2001, Valve LLC, All rights reserved. ============
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================
#ifndef FILESYSTEM_H
#define FILESYSTEM_H
#ifdef _WIN32
#pragma once
#endif
#include "archtypes.h" // DAL
#include "interface.h"
//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
typedef void * FileHandle_t;
typedef int FileFindHandle_t;
typedef int WaitForResourcesHandle_t;
//-----------------------------------------------------------------------------
// Enums used by the interface
//-----------------------------------------------------------------------------
#ifndef FILESYSTEM_INTERNAL_H
typedef enum
{
FILESYSTEM_SEEK_HEAD = 0,
FILESYSTEM_SEEK_CURRENT,
FILESYSTEM_SEEK_TAIL,
} FileSystemSeek_t;
enum
{
FILESYSTEM_INVALID_FIND_HANDLE = -1
};
typedef enum
{
// Don't print anything
FILESYSTEM_WARNING_QUIET = 0,
// On shutdown, report names of files left unclosed
FILESYSTEM_WARNING_REPORTUNCLOSED,
// Report number of times a file was opened, closed
FILESYSTEM_WARNING_REPORTUSAGE,
// Report all open/close events to console ( !slow! )
FILESYSTEM_WARNING_REPORTALLACCESSES
} FileWarningLevel_t;
#define FILESYSTEM_INVALID_HANDLE ( FileHandle_t )0
#endif
// turn off any windows defines
#undef GetCurrentDirectory
//-----------------------------------------------------------------------------
// Purpose: Main file system interface
//-----------------------------------------------------------------------------
class IFileSystem : public IBaseInterface
{
public:
// Mount and unmount the filesystem
virtual void Mount(void) = 0;
virtual void Unmount(void) = 0;
// Remove all search paths (including write path?)
virtual void RemoveAllSearchPaths( void ) = 0;
// Add paths in priority order (mod dir, game dir, ....)
// If one or more .pak files are in the specified directory, then they are
// added after the file system path
// If the path is the relative path to a .bsp file, then any previous .bsp file
// override is cleared and the current .bsp is searched for an embedded PAK file
// and this file becomes the highest priority search path ( i.e., it's looked at first
// even before the mod's file system path ).
virtual void AddSearchPath( const char *pPath, const char *pathID ) = 0;
virtual bool RemoveSearchPath( const char *pPath ) = 0;
// Deletes a file
virtual void RemoveFile( const char *pRelativePath, const char *pathID ) = 0;
// this isn't implementable on STEAM as is.
virtual void CreateDirHierarchy( const char *path, const char *pathID ) = 0;
// File I/O and info
virtual bool FileExists( const char *pFileName ) = 0;
virtual bool IsDirectory( const char *pFileName ) = 0;
// opens a file
// if pathID is NULL, all paths will be searched for the file
virtual FileHandle_t Open( const char *pFileName, const char *pOptions, const char *pathID = 0L ) = 0;
virtual void Close( FileHandle_t file ) = 0;
virtual void Seek( FileHandle_t file, int pos, FileSystemSeek_t seekType ) = 0;
virtual unsigned int Tell( FileHandle_t file ) = 0;
virtual unsigned int Size( FileHandle_t file ) = 0;
virtual unsigned int Size( const char *pFileName ) = 0;
virtual long GetFileTime( const char *pFileName ) = 0;
virtual void FileTimeToString( char* pStrip, int maxCharsIncludingTerminator, long fileTime ) = 0;
virtual bool IsOk( FileHandle_t file ) = 0;
virtual void Flush( FileHandle_t file ) = 0;
virtual bool EndOfFile( FileHandle_t file ) = 0;
virtual int Read( void* pOutput, int size, FileHandle_t file ) = 0;
virtual int Write( void const* pInput, int size, FileHandle_t file ) = 0;
virtual char *ReadLine( char *pOutput, int maxChars, FileHandle_t file ) = 0;
virtual int FPrintf( FileHandle_t file, char *pFormat, ... ) = 0;
// direct filesystem buffer access
// returns a handle to a buffer containing the file data
// this is the optimal way to access the complete data for a file,
// since the file preloader has probably already got it in memory
virtual void *GetReadBuffer( FileHandle_t file, int *outBufferSize, bool failIfNotInCache ) = 0;
virtual void ReleaseReadBuffer( FileHandle_t file, void *readBuffer ) = 0;
// FindFirst/FindNext
virtual const char *FindFirst( const char *pWildCard, FileFindHandle_t *pHandle, const char *pathID = 0L ) = 0;
virtual const char *FindNext( FileFindHandle_t handle ) = 0;
virtual bool FindIsDirectory( FileFindHandle_t handle ) = 0;
virtual void FindClose( FileFindHandle_t handle ) = 0;
virtual void GetLocalCopy( const char *pFileName ) = 0;
virtual const char *GetLocalPath( const char *pFileName, char *pLocalPath, int localPathBufferSize ) = 0;
// Note: This is sort of a secondary feature; but it's really useful to have it here
virtual char *ParseFile( char* pFileBytes, char* pToken, bool* pWasQuoted ) = 0;
// Returns true on success ( based on current list of search paths, otherwise false if
// it can't be resolved )
virtual bool FullPathToRelativePath( const char *pFullpath, char *pRelative ) = 0;
// Gets the current working directory
virtual bool GetCurrentDirectory( char* pDirectory, int maxlen ) = 0;
// Dump to printf/OutputDebugString the list of files that have not been closed
virtual void PrintOpenedFiles( void ) = 0;
virtual void SetWarningFunc( void (*pfnWarning)( const char *fmt, ... ) ) = 0;
virtual void SetWarningLevel( FileWarningLevel_t level ) = 0;
virtual void LogLevelLoadStarted( const char *name ) = 0;
virtual void LogLevelLoadFinished( const char *name ) = 0;
virtual int HintResourceNeed( const char *hintlist, int forgetEverything ) = 0;
virtual int PauseResourcePreloading( void ) = 0;
virtual int ResumeResourcePreloading( void ) = 0;
virtual int SetVBuf( FileHandle_t stream, char *buffer, int mode, long size ) = 0;
virtual void GetInterfaceVersion( char *p, int maxlen ) = 0;
virtual bool IsFileImmediatelyAvailable(const char *pFileName) = 0;
// starts waiting for resources to be available
// returns FILESYSTEM_INVALID_HANDLE if there is nothing to wait on
virtual WaitForResourcesHandle_t WaitForResources( const char *resourcelist ) = 0;
// get progress on waiting for resources; progress is a float [0, 1], complete is true on the waiting being done
// returns false if no progress is available
// any calls after complete is true or on an invalid handle will return false, 0.0f, true
virtual bool GetWaitForResourcesProgress( WaitForResourcesHandle_t handle, float *progress /* out */ , bool *complete /* out */ ) = 0;
// cancels a progress call
virtual void CancelWaitForResources( WaitForResourcesHandle_t handle ) = 0;
// returns true if the appID has all its caches fully preloaded
virtual bool IsAppReadyForOfflinePlay( int appID ) = 0;
// interface for custom pack files > 4Gb
virtual bool AddPackFile( const char *fullpath, const char *pathID ) = 0;
// open a file but force the data to come from the steam cache, NOT from disk
virtual FileHandle_t OpenFromCacheForRead( const char *pFileName, const char *pOptions, const char *pathID = 0L ) = 0;
virtual void AddSearchPathNoWrite( const char *pPath, const char *pathID ) = 0;
//
// ABOVE: Pre-25th anniversary interface
//
virtual long GetFileModificationTime(const char* pFileName) = 0;
};
// Steam3/Src compat
#define IBaseFileSystem IFileSystem
#define FILESYSTEM_INTERFACE_VERSION "VFileSystem009"
#endif // FILESYSTEM_H