diff options
author | B. Watson <urchlay@slackware.uk> | 2024-05-16 01:43:09 -0400 |
---|---|---|
committer | B. Watson <urchlay@slackware.uk> | 2024-05-16 01:43:09 -0400 |
commit | a4cc3ad3504d634e379369862c9f9fd8eed379f3 (patch) | |
tree | 7b6f55c352a4ca62dddaa1b4a6854799111d2d2f /jindroush/lib/cfile.cpp | |
parent | b33c25d1363110e6e4a714530f460b0ff951f56b (diff) | |
download | bw-atari8-tools-a4cc3ad3504d634e379369862c9f9fd8eed379f3.tar.gz |
Add Jindrich Kubec's tools.
Diffstat (limited to 'jindroush/lib/cfile.cpp')
-rw-r--r-- | jindroush/lib/cfile.cpp | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/jindroush/lib/cfile.cpp b/jindroush/lib/cfile.cpp new file mode 100644 index 0000000..97a78d2 --- /dev/null +++ b/jindroush/lib/cfile.cpp @@ -0,0 +1,139 @@ +// 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 2 of the License, or +// 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, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// + +#include "cfile.h" + +CFile::CFile() +{ + m_bOpened = FALSE; + m_hFile = 0; + m_bIsDirty = FALSE; +} + +CFile::~CFile() +{ + Close(); +} + +//opens file for reading, binary +BOOL CFile::Open( char* szName ) +{ + if ( m_bOpened ) + return FALSE; + + m_hFile = open( szName, O_BINARY | O_RDONLY ); + + if ( m_hFile == -1 ) + { + m_hFile = 0; + + //printf( "CFile::Open %s Err:%d\n", szName, errno ); + + return FALSE; + } + + m_bOpened = TRUE; + + m_lLength = lseek( m_hFile, 0, SEEK_END ); + lseek( m_hFile, 0, SEEK_SET ); + + return TRUE; + +} + +//creates new file, opened for rdwr, binary, deletes existing +BOOL CFile::Create( char* szName ) +{ + if ( m_bOpened ) + return FALSE; + + m_bIsDirty = FALSE; + m_hFile = open( szName, O_BINARY | O_RDWR | O_CREAT | O_TRUNC, 0666 ); + + if ( m_hFile == -1 ) + { + m_hFile = 0; + return FALSE; + } + + m_bOpened = TRUE; + + m_lLength = lseek( m_hFile, 0, SEEK_END ); + lseek( m_hFile, 0, SEEK_SET ); + + return TRUE; + +} + +//reads iBytesToRead bytes to buffer +BOOL CFile::Read( void* pBuff, int iBytesToRead, int* piBytesRead ) +{ + if ( !m_bOpened ) + return FALSE; + + m_bIsDirty = FALSE; + int iBytesRead = read( m_hFile, pBuff, iBytesToRead ); + + if ( piBytesRead ) + *piBytesRead = iBytesRead; + + if ( -1 == iBytesRead ) + return FALSE; + + m_lCurrPtr = tell( m_hFile ); + + return TRUE; +} + +//writes iBytesToWrite from buffer +//TODO:check for file being opened for writing +BOOL CFile::Write( void* pBuff, int iBytesToWrite, int* piBytesWritten ) +{ + if ( !m_bOpened ) + return FALSE; + + int iBytesWritten = write( m_hFile, pBuff, iBytesToWrite ); + + if ( piBytesWritten ) + *piBytesWritten = iBytesWritten; + + if ( -1 == iBytesWritten ) + return FALSE; + + m_lCurrPtr = tell( m_hFile ); + m_bIsDirty = TRUE; + + return TRUE; +} + +//seek +BOOL CFile::Seek( long lPos, int iType ) +{ + m_lCurrPtr = lseek( m_hFile, lPos, iType ); + + return TRUE; +} + +//closes the file +void CFile::Close() +{ + if ( m_hFile ) + close( m_hFile ); + + m_bIsDirty = FALSE; + m_hFile = 0; + m_bOpened = FALSE; +} + |