This commit is contained in:
parent
7551b4f12e
commit
8788076d39
37 changed files with 11186 additions and 0 deletions
337
Utils/Libs/GinLib/script.cpp
Normal file
337
Utils/Libs/GinLib/script.cpp
Normal file
|
@ -0,0 +1,337 @@
|
|||
/*=========================================================================
|
||||
|
||||
FILENAME.CPP
|
||||
|
||||
Author: Gary Liddon @
|
||||
Created:
|
||||
Project:
|
||||
Purpose:
|
||||
|
||||
Copyright (c) 1998 G R Liddon
|
||||
|
||||
===========================================================================*/
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Includes
|
||||
-------- */
|
||||
|
||||
#include "script.h"
|
||||
|
||||
/* Std Lib
|
||||
------- */
|
||||
|
||||
/* Glib
|
||||
---- */
|
||||
|
||||
/* Local
|
||||
----- */
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Tyepdefs && Defines
|
||||
------------------- */
|
||||
using namespace std;
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Structure defintions
|
||||
-------------------- */
|
||||
const int DEFAULT_LINE_LENGTH=8192;
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function Prototypes
|
||||
------------------- */
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Vars
|
||||
---- */
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Data
|
||||
---- */
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
ScriptFile::ScriptFile(void)
|
||||
{
|
||||
m_isOpen=false;
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
ScriptFile::~ScriptFile(void)
|
||||
{
|
||||
close();
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void ScriptFile::close(void)
|
||||
{
|
||||
if (m_isOpen)
|
||||
m_inStream.close();
|
||||
|
||||
m_isOpen=false;
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void ScriptFile::open(char const * fileName)
|
||||
{
|
||||
if (m_isOpen)
|
||||
close();
|
||||
|
||||
m_inStream.open(fileName,ios::binary|ios::in);
|
||||
|
||||
if (m_inStream)
|
||||
{
|
||||
m_fileName=fileName;
|
||||
|
||||
}
|
||||
else
|
||||
GObject::Error(ERR_FATAL,"unable to open script file %s",fileName);
|
||||
|
||||
m_isOpen=true;
|
||||
m_lineCount=0;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void ScriptFile::scriptError(void)
|
||||
{
|
||||
GObject::Error(ERR_FATAL,"Ill formatted script file %s, line %d",(char const *)m_fileName,m_lineCount);
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function: ak
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void ScriptFile::checkIsOpen(void)
|
||||
{
|
||||
if (!m_isOpen)
|
||||
GObject::Error(ERR_FATAL,"file operation needed by ScriptFile but no file is open");
|
||||
}
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
bool ScriptFile::getNextNonBlankLine(char * line,int lineLen)
|
||||
{
|
||||
checkIsOpen();
|
||||
|
||||
do
|
||||
{
|
||||
if (m_inStream.eof())
|
||||
return(false);
|
||||
|
||||
m_inStream.getline(line,lineLen);
|
||||
|
||||
|
||||
int lineLength;
|
||||
|
||||
lineLength=strlen(line);
|
||||
|
||||
for (int f=0;f<lineLength;f++)
|
||||
{
|
||||
if (line[f] == ';')
|
||||
line[f]=0;
|
||||
}
|
||||
|
||||
if (strlen(line))
|
||||
line[strlen(line)-1]=0;
|
||||
|
||||
m_lineCount++;
|
||||
|
||||
// stripTrailingSpace(line);
|
||||
}
|
||||
while (!strlen(line));
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
bool ScriptFile::nextLineIsCommand(void)
|
||||
{
|
||||
checkIsOpen();
|
||||
|
||||
bool retVal;
|
||||
streampos thisPos;
|
||||
const int lineLength=DEFAULT_LINE_LENGTH;
|
||||
char line[lineLength];
|
||||
int oldLineCount;
|
||||
|
||||
oldLineCount=m_lineCount;
|
||||
|
||||
retVal=false;
|
||||
|
||||
thisPos=m_inStream.tellg();
|
||||
|
||||
if (getNextNonBlankLine(line,lineLength))
|
||||
{
|
||||
stripTrailingSpace(line);
|
||||
retVal=isCommand(line);
|
||||
}
|
||||
|
||||
m_inStream.seekg(thisPos);
|
||||
|
||||
m_lineCount=oldLineCount;
|
||||
|
||||
return(retVal);
|
||||
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
GString ScriptFile::peekNextCommand(void)
|
||||
{
|
||||
checkIsOpen();
|
||||
|
||||
GString retStr;
|
||||
|
||||
if (nextLineIsCommand())
|
||||
{
|
||||
const int lineLength=DEFAULT_LINE_LENGTH;
|
||||
char line[lineLength];
|
||||
int oldLineCount;
|
||||
streampos thisPos;
|
||||
|
||||
oldLineCount=m_lineCount;
|
||||
|
||||
thisPos=m_inStream.tellg();
|
||||
|
||||
getNextNonBlankLine(line,lineLength);
|
||||
stripTrailingSpace(line);
|
||||
retStr=getCommandString(line);
|
||||
|
||||
m_inStream.seekg(thisPos);
|
||||
|
||||
m_lineCount=oldLineCount;
|
||||
}
|
||||
|
||||
return(retStr);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void ScriptFile::stripTrailingSpace(char * line)
|
||||
{
|
||||
if (strlen(line))
|
||||
{
|
||||
bool done=false;
|
||||
|
||||
|
||||
for (int f=strlen(line)-1;f<=0 && !done ;f--)
|
||||
{
|
||||
if ((!isspace(line[f])) )
|
||||
done=true;
|
||||
else
|
||||
line[f]=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
GString ScriptFile::getCommandString(char * com)
|
||||
{
|
||||
char * newStr;
|
||||
|
||||
newStr=strdup(com);
|
||||
|
||||
newStr[strlen(newStr)-1]=0;
|
||||
GString retStr(&newStr[1]);
|
||||
|
||||
free(newStr);
|
||||
|
||||
return(retStr);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
bool ScriptFile::isCommand(char * line)
|
||||
{
|
||||
return ((line[0]=='[') && (line[strlen(line)-1]==']'));
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
GString ScriptFile::getNextLine(void)
|
||||
{
|
||||
const int lineLength=DEFAULT_LINE_LENGTH;
|
||||
char line[lineLength];
|
||||
|
||||
getNextNonBlankLine(line,lineLength);
|
||||
|
||||
return(line);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
bool ScriptFile::eof(void)
|
||||
{
|
||||
checkIsOpen();
|
||||
return(m_inStream.eof());
|
||||
}
|
||||
|
||||
/*===========================================================================
|
||||
end */
|
Loading…
Add table
Add a link
Reference in a new issue