Write a class with a streampos, if u want one I made u can use it:
// NOTE There may be a few bugs... made thsi in a hurry
Code:
#include <windows.h>
#include <fstream.h>
#include <stdio.h>
#define SEEK_BEG 10
#define SEEK_POS 5
class string
{private:
char *str;
int cstreampos;
public:
bool checkwhite(char t);
void clear();
void seek(int to,int op);
int tell();
string operator<<(char *add);
string operator<<(float addf);
string operator<<(string unused);
string operator>>(char *get);
string operator>>(float &getf);
string operator>>(string unused);
void getLine(char *out,unsigned int size,char end);
char *GetDat();
};
bool string::checkwhite(char t)
{
switch(t)
{
case ' ': return true;
case '\r': return true;
case '\n': return true;
case '\t': return true;
case '\0': return true;
default: return false;
}
}
void string::clear()
{
ZeroMemory((void*)this,sizeof(string));
str = new char[1];
sprintf(str,"");
}
void string::seek(int to,int op)
{
if( (op == SEEK_POS) || (op == NULL) )
{
cstreampos = to;
}
else if( op == SEEK_END )
{
cstreampos = strlen(str);
}
else if( op == SEEK_BEG )
{
cstreampos = 0;
}
}
int string::tell()
{
return cstreampos;
}
string string::operator <<(char *add)
{
char *bin = str;
str = new char[strlen(add)+strlen(bin)];
for( unsigned int sloop = 0 ; sloop<strlen(bin) ; sloop++ )
{
str[sloop] = bin[sloop];
}
for( sloop = strlen(bin) ; sloop<strlen(add)+strlen(bin) ; sloop++ )
{
str[sloop] = add[sloop-strlen(bin)];
cstreampos++;
}
str[strlen(add)+strlen(bin)] = '\0';
delete[] bin;
string unused;
ZeroMemory((void*)&unused,sizeof(string));
return unused;
}
string string::operator <<(float addf)
{
MessageBox(NULL,"A float","af",MB_OK);
char *bin = str;
str = new char[sizeof(float)+strlen(bin)];
char *add = (char*)&addf;
for( unsigned int sloop = 0 ; sloop<strlen(bin) ; sloop++ )
{
str[sloop] = bin[sloop];
}
for( sloop = strlen(bin) ; sloop<sizeof(float)+strlen(bin) ; sloop++ )
{
str[sloop] = add[sloop-strlen(bin)];
cstreampos++;
}
str[sizeof(float)+strlen(bin)] = '\0';
delete[] bin;
string unused;
ZeroMemory((void*)&unused,sizeof(string));
return unused;
}
string string::operator >>(char *get)
{
sprintf(get,"");
for( unsigned int sloop = cstreampos ; checkwhite(str[sloop]) ; sloop++ );
for( ; !checkwhite(str[sloop]) ; sloop++ )get[sloop-cstreampos] = str[sloop];
string unused;
ZeroMemory((void*)&unused,sizeof(string));
return unused;
}
string string::operator >>(float &getf)
{
ZeroMemory((void*)&getf,sizeof(float));
char *get = (char*)&getf;
for( unsigned int sloop = cstreampos ; checkwhite(str[sloop]) ; sloop++ );
for( ; (sloop-cstreampos)<sizeof(float) ; sloop++ )get[sloop-cstreampos] = str[sloop];
string unused;
ZeroMemory((void*)&unused,sizeof(string));
return unused;
}
void string::getLine(char *out,unsigned int size,char end)
{
sprintf(out,"");
for( unsigned int sloop = cstreampos ; ((sloop-cstreampos)<size) && (str[sloop] != end ) ; sloop++ )out[sloop-cstreampos] = str[sloop];
}
char *string::GetDat()
{
char *ret = new char[strlen(str)];
ZeroMemory((void*)ret,strlen(str));
sprintf(ret,str);
return ret;
}
SPH
// I also expect this will also jsut give you the idea, and u write ur own