* fixed typo in fread func, thx bLuma!

* added new funcs: freadline, fseekr, fseekw
This commit is contained in:
false_genesis 2007-12-27 15:03:18 +00:00
parent 134cd66130
commit 40cef66995
3 changed files with 69 additions and 1 deletions

View File

@ -176,6 +176,9 @@ void DefScriptPackage::_InitFunctions(void)
AddFunc("fwritebb",&DefScriptPackage::func_fwritebb); AddFunc("fwritebb",&DefScriptPackage::func_fwritebb);
AddFunc("fsize",&DefScriptPackage::func_fsize); AddFunc("fsize",&DefScriptPackage::func_fsize);
AddFunc("fexists",&DefScriptPackage::func_fileexists); // name alternative for "fileexists" AddFunc("fexists",&DefScriptPackage::func_fileexists); // name alternative for "fileexists"
AddFunc("freadline",&DefScriptPackage::func_freadline);
AddFunc("fseekw",&DefScriptPackage::func_fseekw);
AddFunc("fseekr",&DefScriptPackage::func_fseekr);
} }
void DefScriptPackage::AddFunc(std::string n,DefReturnResult (DefScriptPackage::*f)(CmdSet& Set), bool esc) void DefScriptPackage::AddFunc(std::string n,DefReturnResult (DefScriptPackage::*f)(CmdSet& Set), bool esc)

View File

@ -270,6 +270,9 @@ private:
DefReturnResult DefScriptPackage::func_freadbb(CmdSet&); DefReturnResult DefScriptPackage::func_freadbb(CmdSet&);
DefReturnResult DefScriptPackage::func_fwritebb(CmdSet&); DefReturnResult DefScriptPackage::func_fwritebb(CmdSet&);
DefReturnResult DefScriptPackage::func_fsize(CmdSet&); DefReturnResult DefScriptPackage::func_fsize(CmdSet&);
DefReturnResult DefScriptPackage::func_freadline(CmdSet&);
DefReturnResult DefScriptPackage::func_fseekw(CmdSet&);
DefReturnResult DefScriptPackage::func_fseekr(CmdSet&);
// setup own function declarations here // setup own function declarations here
# include "DefScriptInterfaceInclude.h" # include "DefScriptInterfaceInclude.h"

View File

@ -113,7 +113,7 @@ DefReturnResult DefScriptPackage::func_fwrite(CmdSet& Set)
DefReturnResult DefScriptPackage::func_fread(CmdSet& Set) DefReturnResult DefScriptPackage::func_fread(CmdSet& Set)
{ {
std::fstream *fh = files.GetNoCreate(_NormalizeVarName(Set.arg[1],Set.myname)); std::fstream *fh = files.GetNoCreate(_NormalizeVarName(Set.arg[0],Set.myname));
if(fh && fh->is_open()) if(fh && fh->is_open())
{ {
uint64 bytes; uint64 bytes;
@ -288,3 +288,65 @@ DefReturnResult DefScriptPackage::func_fsize(CmdSet& Set)
f.close(); f.close();
return toString((uint64)(end_pos - begin_pos)); return toString((uint64)(end_pos - begin_pos));
} }
DefReturnResult DefScriptPackage::func_freadline(CmdSet& Set)
{
std::fstream *fh = files.GetNoCreate(_NormalizeVarName(Set.defaultarg,Set.myname));
if(fh && fh->is_open())
{
char c;
std::string line;
line.reserve(30); // rough guess to speedup appending
while(!fh->eof())
{
c = fh->get();
if(c == '\n' || fh->eof())
return line;
else
line += c;
}
}
return "";
}
DefReturnResult DefScriptPackage::func_fseekw(CmdSet& Set)
{
std::fstream *fh = files.GetNoCreate(_NormalizeVarName(Set.arg[0],Set.myname));
if(fh && fh->is_open())
{
std::string w = stringToLower(Set.arg[1]);
uint32 pos = (uint32)toUint64(Set.defaultarg);
if(w.empty() || w == "begin")
{
fh->seekp(pos, std::ios_base::beg);
return true;
}
else if(w == "end")
{
fh->seekp(pos, std::ios_base::end);
return true;
}
}
return false;
}
DefReturnResult DefScriptPackage::func_fseekr(CmdSet& Set)
{
std::fstream *fh = files.GetNoCreate(_NormalizeVarName(Set.arg[0],Set.myname));
if(fh && fh->is_open())
{
std::string w = stringToLower(Set.arg[1]);
uint32 pos = (uint32)toUint64(Set.defaultarg);
if(w.empty() || w == "begin")
{
fh->seekg(pos, std::ios_base::beg);
return true;
}
else if(w == "end")
{
fh->seekg(pos, std::ios_base::end);
return true;
}
}
return false;
}