mirror of
https://github.com/shawns-valve/halflife.git
synced 2024-11-28 23:12:31 +00:00
189 lines
7.4 KiB
C
189 lines
7.4 KiB
C
|
//========= 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;
|
|||
|
};
|
|||
|
|
|||
|
// Steam3/Src compat
|
|||
|
#define IBaseFileSystem IFileSystem
|
|||
|
|
|||
|
#define FILESYSTEM_INTERFACE_VERSION "VFileSystem009"
|
|||
|
|
|||
|
#endif // FILESYSTEM_H
|