/*
** Command & Conquer Generals(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see .
*/
//****************************************************************************
// C O N F I D E N T I A L -- W E S T W O O D S T U D I O S
//****************************************************************************
//
// Project name: Blade Runner CD-ROM Windows 95
//
// File name: WND_FILE.H
//
// Source code: WND_FILE.CPP
//
// Compatibility: Microsoft Visual C++ 4.0
// Borland C++ 5.0
// Watcom C++ 10.6
//
// Start Date: See comments in version control log
// Last Update: See comments in version control log
//
// Programmer(s): Michael Legg
// Mike Grayford
// James McNeill
//
//****************************************************************************
#pragma once
#ifndef WND_FILE_H
#define WND_FILE_H
//------------------------------------------------------------------------------
// include files...
//------------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#define BOOL int
#define ASSERT(x) assert(x)
#define VERIFY(X) assert(X)
//------------------------------------------------------------------------------
// defines...
//------------------------------------------------------------------------------
//
// it's one or the other!
//
#define SUPPORT_STREAMS TRUE // Normally this!
#define SUPPORT_HANDLES FALSE // This is a test!
#define MODE_READ_ONLY 0
#define MODE_WRITE_ONLY 1
#define MODE_READ_AND_WRITE 2
#define MODE_WRITE_TRUNCATE MODE_WRITE_ONLY
#define MODE_WRITE_APPEND 3
#define MODE_WRITE_UPDATE 4
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
// #define INVALID_FILE_HANDLE -1
#define INVALID_FILE_HANDLE INVALID_HANDLE_VALUE
#define MAX_PATH_SIZE _MAX_PATH
#define STRING_IT(a) #a
#define TOKEN_IT(a) STRING_IT(,##a)
#define MESSAGE(a) message (__FILE__ "(" TOKEN_IT(__LINE__) ") : " a)
//#pragma MESSAGE("What does it do?")
#ifdef _DEBUG
void __cdecl Msg( int line, char *file, char *fmt, ... );
void __cdecl Msg( int line, char *filename, wchar_t *fmt, unsigned int codepage=1252, ... );
void Delete_Msg_File( void );
#else
#define Msg
#define Delete_Msg_File()
#endif
//------------------------------------------------------------------------------
// file class definition
//------------------------------------------------------------------------------
class StandardFileClass
{
public:
//
// public class functions...
//
StandardFileClass();
~StandardFileClass();
bool Open ( const char *file_name, int open_mode );
bool Close ( void );
int Read ( void *buffer, unsigned long int bytes_to_read );
int Write ( void *buffer, unsigned long int bytes_to_write );
bool Seek ( int distance, int seek_file_position );
int Tell ( void );
int Query_Size ( void );
bool Query_Open ( void );
char * Query_Name_String ( void );
int End_Of_File ( void );
int Flush ( void );
#if( SUPPORT_STREAMS )
FILE *Query_File_Stream_Pointer( void );
#endif
private:
//
// private class functions...
//
void Reset( void );
//
// private class data...
//
#if( SUPPORT_HANDLES )
HANDLE File_Handle;
#endif
#if( SUPPORT_STREAMS )
//--------------------------------------------------------------------
// The _stat structure, defined in SYS\STAT.H, includes these fields.
// st_atime Time of last access of file ( time_t ).
// st_ctime Time of creation of file ( time_t ).
// st_dev Drive number of the disk containing the file (same as st_rdev).
// st_rdev Drive number of the disk containing the file (same as st_dev).
// st_mode Bit mask for file-mode information.
// _S_IFDIR bit is set if path specifies a directory;
// _S_IFREG bit is set if path specifies an ordinary file or a device.
// User read/write bits are set according to the file's permission
// mode; user execute bits are set according to the filename extension.
// st_mtime Time of last modification of file.
// st_nlink Always 1 on non-NTFS file systems.
// st_size Size of the file in bytes; a 64-bit integer for _stati64 and _wstati64
//--------------------------------------------------------------------
FILE *File_Stream_Ptr;
struct stat File_Statistics;
#endif
char File_Name[ MAX_PATH_SIZE ];
bool Currently_Open;
};
//------------------------------------------------------------------------------
// non-class public functions...
//------------------------------------------------------------------------------
#if( SUPPORT_HANDLES )
HANDLE Open_File( char const *file_name, int mode );
bool Close_File( HANDLE handle );
int Read_File( HANDLE handle,
void *buffer,
unsigned long int bytes_to_read );
int Write_File( HANDLE handle,
void const *buffer,
unsigned long int bytes_to_write );
bool Seek_File( HANDLE handle,
int distance,
int seek_file_location );
int Tell_File( HANDLE handle );
int File_Size( HANDLE handle );
//
// include path in name
//
bool Full_Path_File_Exists( char const *file_name );
//
// don't include path in name
//
bool HD_File_Exists( char const *file_name );
bool CD_File_Exists( char const *file_name );
// bool Find_File( char const *file_name );
#endif
#if( SUPPORT_STREAMS )
//
// include path in name
//
bool Full_Path_File_Exists( char const *file_name );
//
// don't include path in name
//
bool HD_File_Exists( char const *file_name );
bool CD_File_Exists( char const *file_name );
// bool Find_File( char const *file_name );
#endif
#endif // WND_FILE_H