//
// TextRW BN 3-Mai-98
//
//
//
//
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdio.h>
#include <string.h>

#include "WinMain.h"
#include "System.h"
#include "File.h"
#include "TextRW.h"

#define __CFILE__ "TextRW"
char TEXTRW_acString[1024];

// *****************************************************************
// Open
// *****************************************************************
TextFileRW::Open (char *acDatei)
{
int nRet=FALSE;


if((nDateiHandle = f_open(acDatei))!=FALSE){
lDateiPositioninZeichen = 0;
lDateiPositioninZeilen = 0;
InsertMode = FALSE;
CRMode = TRUE;
nRet = TRUE;
} else {
sprintf(TEXTRW_acString, "Can not open %s(1).", acDatei);
AusnahmeFehler(TEXTRW_acString, __CFILE__, __LINE__);
}
return(nRet);
}

// *****************************************************************
// CreateOpen
// *****************************************************************
TextFileRW::CreateOpen (char *acDatei)
{
int nRet=FALSE;


f_kill(acDatei);
if((nDateiHandle = f_opencreate(acDatei))!=FALSE){
lDateiPositioninZeilen = 0;
lDateiPositioninZeichen = 0;
nRet = TRUE;
} else {
sprintf(TEXTRW_acString, "Can not open %s(2).", acDatei);
AusnahmeFehler(TEXTRW_acString, __CFILE__, __LINE__);
}
return(nRet);
}

// *****************************************************************
// Close
// *****************************************************************
TextFileRW::Close (void)
{
int nRet=FALSE;


if(f_close(nDateiHandle)==TRUE){
nDateiHandle = 0;
lDateiPositioninZeichen = 0;
lDateiPositioninZeilen = 0;
nRet = TRUE;
}
return(nRet);
}

// *****************************************************************
// ReadChars
// *****************************************************************
TextFileRW::ReadChars (char *acText, int nLaenge)
{
int nRet=FALSE;
int i;


if(f_read(nDateiHandle, acText, nLaenge)==TRUE){
i = 0;
while(i<nLaenge - 1){
if(acText[i + 0]==13 && acText[i + 1]==10){
memset(acText + i, 0, nLaenge - i);
i = nLaenge;
}
i++;
}
nRet = TRUE;
}
return(nRet);
}

// *****************************************************************
// WriteChars
// *****************************************************************
TextFileRW::WriteChars (char *acText, int nLaenge)
{
int nRet=FALSE;
char CR[2];


CR[0] = 13;
CR[1] = 10;
if(f_write(nDateiHandle, acText, nLaenge)==TRUE){
if(CRMode==TRUE){
if(f_write(nDateiHandle, CR, sizeof(CR))==TRUE){
nRet = TRUE;
}
}
}
return(nRet);
}

// *****************************************************************
// ReadTextRow
// *****************************************************************
TextFileRW::ReadTextRow (char *acText)
{
int nRet=FALSE;
int i;
int nWeiter;


nWeiter = FALSE;
i = 0;
while(f_read(nDateiHandle, acText + i, 1)==TRUE && nWeiter==FALSE){
if(i>0){
if(acText[i - 1]==13 && acText[i + 0]==10){
nWeiter = TRUE;
}
}
i++;
nRet = TRUE;
}
memset(acText + i, 0, 1);
return(nRet);
}

// *****************************************************************
// WriteTextRow
// *****************************************************************
TextFileRW::WriteTextRow (char *acText)
{
int nRet=FALSE;
char CR[2];


CR[0] = 13;
CR[1] = 10;
if(f_write(nDateiHandle, acText, strlen(acText))==TRUE){
if(CRMode==TRUE){
if(f_write(nDateiHandle, CR, sizeof(CR))==TRUE){
nRet = TRUE;
}
}
}
return(nRet);
}

// *****************************************************************
// GetPositionCountChars
// *****************************************************************
TextFileRW::GetPositionCountChars (void)
{
return(lDateiPositioninZeichen);
}

// *****************************************************************
// GetPositionCountRows
// *****************************************************************
TextFileRW::GetPositionCountRows (void)
{
return(lDateiPositioninZeilen);
}

// *****************************************************************
// SetPositionCountChars
// *****************************************************************
TextFileRW::SetPositionCountChars (long lPosition)
{
int nRet=FALSE;


if(f_seek(nDateiHandle, lPosition)==TRUE){
lDateiPositioninZeichen = lPosition;
nRet = TRUE;
}
return(nRet);
}

// *****************************************************************
// SetPositionCountRows
// *****************************************************************
TextFileRW::SetPositionCountRows (long lPosition)
{
int nRet=FALSE;


if(f_seek(nDateiHandle, lPosition)==TRUE){
lDateiPositioninZeilen = lPosition;
nRet = TRUE;
}
return(nRet);
}

// *****************************************************************
// SetPositionFileBegin
// *****************************************************************
TextFileRW::SetPositionFileBegin (void)
{
int nRet=FALSE;


if(f_seek(nDateiHandle, 0)==TRUE){
lDateiPositioninZeichen = 0;
lDateiPositioninZeilen = 0;
nRet = TRUE;
}
return(nRet);
}

// *****************************************************************
// SetPositionFileEnd
// *****************************************************************
TextFileRW::SetPositionFileEnd (void)
{
int nRet=FALSE;
long lWert;


if(lWert = (f_seek_eof(nDateiHandle))!=FALSE){
lDateiPositioninZeichen = lWert;
lDateiPositioninZeilen = lWert;
nRet = TRUE;
}
return(nRet);
}

// *****************************************************************
// SetInsertMode
// *****************************************************************
TextFileRW::SetInsertMode (int nFlag)
{
int nRet=TRUE;


InsertMode = nFlag;
return(nRet);
}

// *****************************************************************
// SetInsertMode
// *****************************************************************
TextFileRW::SetCR (int nFlag)
{
int nRet=TRUE;


CRMode = nFlag;
return(nRet);
}

// *****************************************************************
// ReadAll
// *****************************************************************
TextFileRW::ReadAll (char *acText)
{
int nRet=FALSE;


if(f_read(nDateiHandle, acText, filelength(nDateiHandle))==TRUE){
nRet = TRUE;
}
return(nRet);
}

// *****************************************************************
// GetFileSize
// *****************************************************************
TextFileRW::GetFileSize (void)
{
return(filelength(nDateiHandle));
}