SBSPSS/Utils/GinExp/ExpFileIo.cpp
2001-01-12 22:40:39 +00:00

263 lines
5.2 KiB
C++

/*=========================================================================
FILEIO.CPP
Author: Tim Swann @ CLIMAX
Created:
Project:
Purpose:
Copyright (c) 1998 Climax Development Ltd
===========================================================================*/
/*----------------------------------------------------------------------
Includes
-------- */
#include "AsciiExp.h"
#include "ExpFileIO.h"
/* Std Lib
------- */
/* Glib
---- */
/* Local
----- */
/* Graphics
-------- */
/*----------------------------------------------------------------------
Tyepdefs && Defines
------------------- */
/*----------------------------------------------------------------------
Structure defintions
-------------------- */
/*----------------------------------------------------------------------
Positional Vars
--------------- */
/*----------------------------------------------------------------------
Function Prototypes
------------------- */
/*----------------------------------------------------------------------
Vars
---- */
/*----------------------------------------------------------------------
Data
---- */
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void FIO_Stripfileinfo(char * Name, char * fname, char * ext, char * dir, char * drive)
{
char tdrive[_MAX_DRIVE];
char tdir[_MAX_DIR];
char tfname[_MAX_FNAME];
char text[_MAX_EXT];
_splitpath(Name, tdrive, tdir, tfname, text);
if (fname)
strcpy(fname, tfname);
if (ext)
strcpy(ext, text);
if (dir)
strcpy(dir, tdir);
if (drive)
strcpy(drive, tdrive);
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
bool FIO_FileExists(const char * Name)
{
int hFile;
/* Open input file */
hFile = _open(Name, _O_RDONLY | _O_BINARY);
if(hFile != -1)
{
_close(hFile); // file close
return(TRUE);
}
else
{
return(FALSE);
}
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void * FIO_Read(char const * Name, int Offset)
{
int hFile;
long filelen;
void * pAddr;
long pos;
/* Open input file */
hFile = _open(Name, _O_RDONLY | _O_BINARY);
if(hFile != -1)
{
filelen = FIO_FileLen(Name); // length of file
pAddr = malloc(filelen); // allocate mainmemory
pos = _lseek( hFile, Offset, SEEK_SET );
if( pos == -1 ) assert(!"File seek");
filelen -= pos;
_read(hFile, pAddr, filelen); // read in file
_close(hFile); // file close
}
else
{
assert(0);
}
return pAddr;
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
bool FIO_ReadAtAddr(char const * Name, unsigned char * Dest, int Len, int Offset)
{
int hFile;
long filelen;
long pos;
/* Open input file */
hFile = _open(Name, _O_RDONLY | _O_BINARY);
if(hFile != -1)
{
filelen = FIO_FileLen(Name); // length of file
if (Len && (Len < filelen)) filelen = Len;
pos = _lseek( hFile, Offset, SEEK_SET );
if( pos == -1 ) assert(!"File seek");
_read(hFile, Dest, filelen); // read in file
_close(hFile); // file close
}
else
{
assert(0);
}
return TRUE;
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
int FIO_FileLen(const char * Name)
{
int hFile;
int filelen = 0;
/* Open input file */
hFile = _open(Name, _O_RDONLY | _O_BINARY);
if(hFile != -1)
{
filelen = _filelength(hFile); // length of file
_close(hFile); // file close
}
return filelen;
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
bool FIO_Save(const char * Name,unsigned char * Addr,int Len)
{
HANDLE hFile;
UINT fResult;
DWORD nWrited;
/* Open output file */
hFile = CreateFile( Name, /* output filename */
GENERIC_WRITE, /* mode = write */
0, /* share mode = not share */
NULL, /* security attribute = cancel */
CREATE_ALWAYS, /* create file always */
FILE_ATTRIBUTE_NORMAL, /* file attribute = normal */
NULL /* template file = non */
);
if(hFile)
{
fResult = WriteFile(hFile, /* IN : file handle */
Addr, /* IN : pointer to write data */
(DWORD)Len, /* IN : number of data in bytes */
&nWrited, /* OUT : number of data just writed */
NULL /* IN : pointer to OVERLAPPED structure */
);
CloseHandle(hFile); /* close file */
if(fResult == FALSE)
assert(!("SaveFile: ERROR Can not write file %s",Name));
}
else
{
return FALSE;
}
return TRUE;
}
/*===========================================================================
end */