summaryrefslogtreecommitdiffstats
path: root/src/CBot/CBotProgram.cpp
diff options
context:
space:
mode:
authorKrzysztof H <krzys_h@interia.pl>2012-03-09 17:08:05 +0100
committerKrzysztof H <krzys_h@interia.pl>2012-03-09 17:08:05 +0100
commit84d1f79fdf02e0010e4b2d118458e8cd8ce0dd71 (patch)
tree842825145ada8e6f53d1de9f100383cc028d2b46 /src/CBot/CBotProgram.cpp
parenta4c804b49ec872b71bd5a0167c3ad45704a3cc30 (diff)
downloadcolobot-84d1f79fdf02e0010e4b2d118458e8cd8ce0dd71.tar.gz
colobot-84d1f79fdf02e0010e4b2d118458e8cd8ce0dd71.tar.bz2
colobot-84d1f79fdf02e0010e4b2d118458e8cd8ce0dd71.zip
Added license info using a small program SrcHead.
Diffstat (limited to 'src/CBot/CBotProgram.cpp')
-rw-r--r--src/CBot/CBotProgram.cpp143
1 files changed, 78 insertions, 65 deletions
diff --git a/src/CBot/CBotProgram.cpp b/src/CBot/CBotProgram.cpp
index ba14f89..1b770e8 100644
--- a/src/CBot/CBotProgram.cpp
+++ b/src/CBot/CBotProgram.cpp
@@ -1,5 +1,18 @@
-//////////////////////////////////////////////////////////////////////
-// gestion de base d'un programme CBot
+// * This file is part of the COLOBOT source code
+// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
+// *
+// * This program is free software: you can redistribute it and/or modify
+// * it under the terms of the GNU General Public License as published by
+// * the Free Software Foundation, either version 3 of the License, or
+// * (at your option) any later version.
+// *
+// * This program is distributed in the hope that it will be useful,
+// * but WITHOUT ANY WARRANTY; without even the implied warranty of
+// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// * GNU General Public License for more details.
+// *
+// * You should have received a copy of the GNU General Public License
+// * along with this program. If not, see .
#include "CBot.h"
#include <stdio.h>
@@ -54,8 +67,8 @@ BOOL CBotProgram::Compile( const char* program, CBotStringArray& ListFonctions,
Stop();
// delete m_pClass;
- m_pClass->Purge(); // purge les anciennes définitions des classes
- // mais sans détruire l'object
+ m_pClass->Purge(); // purge les anciennes d�finitions des classes
+ // mais sans d�truire l'object
m_pClass = NULL;
delete m_Prog; m_Prog= NULL;
@@ -71,12 +84,12 @@ BOOL CBotProgram::Compile( const char* program, CBotStringArray& ListFonctions,
CBotCStack* pStack = new CBotCStack(NULL);
- CBotToken* p = pBaseToken->GivNext(); // saute le 1er token (séparateur)
+ CBotToken* p = pBaseToken->GivNext(); // saute le 1er token (s�parateur)
- pStack->SetBotCall(this); // défini les routines utilisables
+ pStack->SetBotCall(this); // d�fini les routines utilisables
CBotCall::SetPUser(pUser);
- // fait une première passe rapide juste pour prendre les entêtes de routines et de classes
+ // fait une premi�re passe rapide juste pour prendre les ent�tes de routines et de classes
while ( pStack->IsOk() && p != NULL && p->GivType() != 0)
{
if ( IsOfType(p, ID_SEP) ) continue; // des point-virgules qui trainent
@@ -107,7 +120,7 @@ BOOL CBotProgram::Compile( const char* program, CBotStringArray& ListFonctions,
// CBotFunction* temp = NULL;
CBotFunction* next = m_Prog; // reprend la liste
- p = pBaseToken->GivNext(); // revient au début
+ p = pBaseToken->GivNext(); // revient au d�but
while ( pStack->IsOk() && p != NULL && p->GivType() != 0 )
{
@@ -117,7 +130,7 @@ BOOL CBotProgram::Compile( const char* program, CBotStringArray& ListFonctions,
( p->GivType() == ID_PUBLIC && p->GivNext()->GivType() == ID_CLASS ))
{
m_bCompileClass = TRUE;
- CBotClass::Compile(p, pStack); // complète la définition de la classe
+ CBotClass::Compile(p, pStack); // compl�te la d�finition de la classe
}
else
{
@@ -129,7 +142,7 @@ BOOL CBotProgram::Compile( const char* program, CBotStringArray& ListFonctions,
}
}
-// delete m_Prog; // la liste de la 1ère passe
+// delete m_Prog; // la liste de la 1�re passe
// m_Prog = temp; // la liste de la seconde passe
if ( !pStack->IsOk() )
@@ -171,12 +184,12 @@ BOOL CBotProgram::Start(const char* name)
#if STACKMEM
m_pStack = CBotStack::FirstStack();
#else
- m_pStack = new CBotStack(NULL); // crée une pile d'exécution
+ m_pStack = new CBotStack(NULL); // cr�e une pile d'ex�cution
#endif
m_pStack->SetBotCall(this); // bases pour les routines
- return TRUE; // on est prêt pour un Run()
+ return TRUE; // on est pr�t pour un Run()
}
BOOL CBotProgram::GetPosition(const char* name, int& start, int& stop, CBotGet modestart, CBotGet modestop)
@@ -204,13 +217,13 @@ BOOL CBotProgram::Run(void* pUser, int timer)
if (m_pInstance != NULL && m_pInstance->m_pUserPtr != NULL)
pUser = m_pInstance->m_pUserPtr;
- m_pStack->Reset(pUser); // vide l'éventuelle erreur précédente, et remet le timer
+ m_pStack->Reset(pUser); // vide l'�ventuelle erreur pr�c�dente, et remet le timer
if ( timer >= 0 ) m_pStack->SetTimer(timer);
m_pStack->SetBotCall(this); // bases pour les routines
#if STACKRUN
- // reprend l'exécution sur le haut de la pile
+ // reprend l'ex�cution sur le haut de la pile
ok = m_pStack->Execute();
if ( ok )
{
@@ -221,7 +234,7 @@ BOOL CBotProgram::Run(void* pUser, int timer)
ppVar[2] = NULL;
ok = m_pRun->Execute(ppVar, m_pStack, m_pInstance);
#else
- // revient sur l'exécution normale
+ // revient sur l'ex�cution normale
ok = m_pRun->Execute(NULL, m_pStack, m_pInstance);
#endif
}
@@ -229,7 +242,7 @@ BOOL CBotProgram::Run(void* pUser, int timer)
ok = m_pRun->Execute(NULL, m_pStack, m_pInstance);
#endif
- // terminé sur une erreur ?
+ // termin� sur une erreur ?
if (!ok && !m_pStack->IsOk())
{
m_ErrorCode = m_pStack->GivError(m_ErrorStart, m_ErrorEnd);
@@ -239,10 +252,10 @@ BOOL CBotProgram::Run(void* pUser, int timer)
delete m_pStack;
#endif
m_pStack = NULL;
- return TRUE; // exécution terminée !!
+ return TRUE; // ex�cution termin�e !!
}
- if ( ok ) m_pRun = NULL; // plus de fonction en exécution
+ if ( ok ) m_pRun = NULL; // plus de fonction en ex�cution
return ok;
error:
@@ -332,7 +345,7 @@ CBotString CBotProgram::GivErrorText(int code)
if (TextError.IsEmpty())
{
char buf[100];
- sprintf(buf, "Exception numéro %d.", code);
+ sprintf(buf, "Exception num�ro %d.", code);
TextError = buf;
}
return TextError;
@@ -348,7 +361,7 @@ BOOL CBotProgram::AddFunction(const char* name,
BOOL rExec (CBotVar* pVar, CBotVar* pResult, int& Exception, void* pUser),
CBotTypResult rCompile (CBotVar* &pVar, void* pUser))
{
- // mémorise les pointeurs aux deux fonctions
+ // m�morise les pointeurs aux deux fonctions
return CBotCall::AddFunction(name, rExec, rCompile);
}
@@ -531,12 +544,12 @@ BOOL CBotProgram::RestoreState(FILE* pf)
#endif
m_pStack = NULL;
- // récupère la pile depuis l'enregistrement
- // utilise un pointeur NULL (m_pStack) mais c'est ok comme ça
+ // r�cup�re la pile depuis l'enregistrement
+ // utilise un pointeur NULL (m_pStack) mais c'est ok comme �a
if (!m_pStack->RestoreState(pf, m_pStack)) return FALSE;
m_pStack->SetBotCall(this); // bases pour les routines
- // rétabli certains états dans la pile selon la structure
+ // r�tabli certains �tats dans la pile selon la structure
m_pRun->RestoreState(NULL, m_pStack, m_pInstance);
return TRUE;
}
@@ -584,16 +597,16 @@ BOOL CBotCall::AddFunction(const char* name,
{
if ( p->GivName() == name )
{
- // libère une fonction qu'on redéfini
+ // lib�re une fonction qu'on red�fini
if ( pp ) pp->m_next = p->m_next;
else m_ListCalls = p->m_next;
pp = p;
p = p->m_next;
- pp->m_next = NULL; // ne pas détruire la suite de la liste
+ pp->m_next = NULL; // ne pas d�truire la suite de la liste
delete pp;
continue;
}
- pp = p; // pointeur précédent
+ pp = p; // pointeur pr�c�dent
p = p->m_next;
}
@@ -607,7 +620,7 @@ BOOL CBotCall::AddFunction(const char* name,
// transforme le tableau de pointeurs aux variables
-// en une liste de variables chaînées
+// en une liste de variables cha�n�es
CBotVar* MakeListVars(CBotVar** ppVars, BOOL bSetVal=FALSE)
{
int i = 0;
@@ -631,8 +644,8 @@ CBotVar* MakeListVars(CBotVar** ppVars, BOOL bSetVal=FALSE)
return pVar;
}
-// trouve un appel acceptable selon le nom de la procédure
-// et les paramètres donnés
+// trouve un appel acceptable selon le nom de la proc�dure
+// et les param�tres donn�s
CBotTypResult CBotCall::CompileCall(CBotToken* &p, CBotVar** ppVar, CBotCStack* pStack, long& nIdent)
{
@@ -649,7 +662,7 @@ CBotTypResult CBotCall::CompileCall(CBotToken* &p, CBotVar** ppVar, CBotCStack*
CBotTypResult r = pt->m_rComp(pVar2, m_pUser);
int ret = r.GivType();
- // si une classe est retournée, c'est en fait un pointeur
+ // si une classe est retourn�e, c'est en fait un pointeur
if ( ret == CBotTypClass ) r.SetType( ret = CBotTypPointer );
if ( ret > 20 )
@@ -730,19 +743,19 @@ int CBotCall::DoCall(long& nIdent, CBotToken* token, CBotVar** ppVar, CBotStack*
fund:
#if !STACKRUN
- // fait la liste des paramètres selon le contenu de la pile (pStackVar)
+ // fait la liste des param�tres selon le contenu de la pile (pStackVar)
CBotVar* pVar = MakeListVars(ppVar, TRUE);
CBotVar* pVarToDelete = pVar;
- // crée une variable pour le résultat
+ // cr�e une variable pour le r�sultat
CBotVar* pResult = rettype.Eq(0) ? NULL : CBotVar::Create("", rettype);
CBotVar* pRes = pResult;
int Exception = 0;
int res = pt->m_rExec(pVar, pResult, Exception, pStack->GivPUser());
- if ( pResult != pRes ) delete pRes; // si résultat différent rendu
+ if ( pResult != pRes ) delete pRes; // si r�sultat diff�rent rendu
delete pVarToDelete;
if (res == FALSE)
@@ -768,12 +781,12 @@ fund:
CBotStack* pile = pStack->AddStackEOX(pt);
if ( pile == EOX ) return TRUE;
- // fait la liste des paramètres selon le contenu de la pile (pStackVar)
+ // fait la liste des param�tres selon le contenu de la pile (pStackVar)
CBotVar* pVar = MakeListVars(ppVar, TRUE);
CBotVar* pVarToDelete = pVar;
- // crée une variable pour le résultat
+ // cr�e une variable pour le r�sultat
CBotVar* pResult = rettype.Eq(0) ? NULL : CBotVar::Create("", rettype);
pile->SetVar( pVar );
@@ -834,12 +847,12 @@ BOOL CBotCall::Run(CBotStack* pStack)
{
pStack->SetError(Exception);
}
- if ( pResult != pRes ) delete pResult; // si résultat différent rendu
+ if ( pResult != pRes ) delete pResult; // si r�sultat diff�rent rendu
return FALSE;
}
if ( pResult != NULL ) pStack->SetCopyVar( pResult );
- if ( pResult != pRes ) delete pResult; // si résultat différent rendu
+ if ( pResult != pRes ) delete pResult; // si r�sultat diff�rent rendu
return TRUE;
}
@@ -865,8 +878,8 @@ CBotCallMethode::~CBotCallMethode()
m_next = NULL;
}
-// trouve un appel acceptable selon le nom de la procédure
-// et les paramètres donnés
+// trouve un appel acceptable selon le nom de la proc�dure
+// et les param�tres donn�s
CBotTypResult CBotCallMethode::CompileCall(const char* name, CBotVar* pThis,
CBotVar** ppVar, CBotCStack* pStack,
@@ -926,7 +939,7 @@ int CBotCallMethode::DoCall(long& nIdent, const char* name, CBotVar* pThis, CBot
{
if ( pt->m_nFuncIdent == nIdent )
{
- // fait la liste des paramètres selon le contenu de la pile (pStackVar)
+ // fait la liste des param�tres selon le contenu de la pile (pStackVar)
CBotVar* pVar = MakeListVars(ppVars, TRUE);
CBotVar* pVarToDelete = pVar;
@@ -959,7 +972,7 @@ int CBotCallMethode::DoCall(long& nIdent, const char* name, CBotVar* pThis, CBot
{
if ( pt->m_name == name )
{
- // fait la liste des paramètres selon le contenu de la pile (pStackVar)
+ // fait la liste des param�tres selon le contenu de la pile (pStackVar)
CBotVar* pVar = MakeListVars(ppVars, TRUE);
CBotVar* pVarToDelete = pVar;
@@ -1025,10 +1038,10 @@ BOOL rCBotDebug( CBotVar* pVar, CBotVar* pResult, int& ex, void* pUser )
CBotTypResult cCBotDebug( CBotVar* &pVar, void* pUser )
{
- // pas de paramètre
+ // pas de param�tre
if ( pVar != NULL ) return CBotTypResult( TX_OVERPARAM );
- // la fonction retourne un résultat "string"
+ // la fonction retourne un r�sultat "string"
return CBotTypResult( CBotTypString );
}
@@ -1037,10 +1050,10 @@ CBotTypResult cCBotDebug( CBotVar* &pVar, void* pUser )
void CBotProgram::Init()
{
- CBotToken::DefineNum( "CBotErrOpenPar", 5000) ; // manque la parenthèse ouvrante
- CBotToken::DefineNum( "CBotErrClosePar", 5001) ; // manque la parenthèse fermante
- CBotToken::DefineNum( "CBotErrNotBoolean", 5002) ; // l'expression doit être un boolean
- CBotToken::DefineNum( "CBotErrUndefVar", 5003) ; // variable non déclarée
+ CBotToken::DefineNum( "CBotErrOpenPar", 5000) ; // manque la parenth�se ouvrante
+ CBotToken::DefineNum( "CBotErrClosePar", 5001) ; // manque la parenth�se fermante
+ CBotToken::DefineNum( "CBotErrNotBoolean", 5002) ; // l'expression doit �tre un boolean
+ CBotToken::DefineNum( "CBotErrUndefVar", 5003) ; // variable non d�clar�e
CBotToken::DefineNum( "CBotErrBadLeft", 5004) ; // assignation impossible ( 5 = ... )
CBotToken::DefineNum( "CBotErrNoTerminator", 5005) ;// point-virgule attendu
CBotToken::DefineNum( "CBotErrCaseOut", 5006) ; // case en dehors d'un switch
@@ -1048,8 +1061,8 @@ void CBotProgram::Init()
CBotToken::DefineNum( "CBotErrElseWhitoutIf", 5009) ;// else sans if correspondant
CBotToken::DefineNum( "CBotErrOpenBlock", 5010) ; // manque " { "
CBotToken::DefineNum( "CBotErrBadType1", 5011) ; // mauvais type pour l'assignation
- CBotToken::DefineNum( "CBotErrRedefVar", 5012) ; // redéfinition de la variable
- CBotToken::DefineNum( "CBotErrBadType2", 5013) ; // 2 opérandes de type incompatibles
+ CBotToken::DefineNum( "CBotErrRedefVar", 5012) ; // red�finition de la variable
+ CBotToken::DefineNum( "CBotErrBadType2", 5013) ; // 2 op�randes de type incompatibles
CBotToken::DefineNum( "CBotErrUndefCall", 5014) ; // routine inconnue
CBotToken::DefineNum( "CBotErrNoDoubleDots", 5015) ;// " : " attendu
CBotToken::DefineNum( "CBotErrBreakOutside", 5017) ;// break en dehors d'une boucle
@@ -1058,28 +1071,28 @@ void CBotProgram::Init()
CBotToken::DefineNum( "CBotErrNoCase", 5020) ; // manque " case "
CBotToken::DefineNum( "CBotErrBadNum", 5021) ; // nombre attendu
CBotToken::DefineNum( "CBotErrVoid", 5022) ; // " void " pas possible ici
- CBotToken::DefineNum( "CBotErrNoType", 5023) ; // déclaration de type attendue
+ CBotToken::DefineNum( "CBotErrNoType", 5023) ; // d�claration de type attendue
CBotToken::DefineNum( "CBotErrNoVar", 5024) ; // nom de variable attendu
CBotToken::DefineNum( "CBotErrNoFunc", 5025) ; // nom de fonction attendu
- CBotToken::DefineNum( "CBotErrOverParam", 5026) ; // trop de paramètres
- CBotToken::DefineNum( "CBotErrRedefFunc", 5027) ; // cette fonction existe déjà
- CBotToken::DefineNum( "CBotErrLowParam", 5028) ; // pas assez de paramètres
- CBotToken::DefineNum( "CBotErrBadParam", 5029) ; // mauvais types de paramètres
- CBotToken::DefineNum( "CBotErrNbParam", 5030) ; // mauvais nombre de paramètres
- CBotToken::DefineNum( "CBotErrUndefItem", 5031) ; // élément n'existe pas dans la classe
+ CBotToken::DefineNum( "CBotErrOverParam", 5026) ; // trop de param�tres
+ CBotToken::DefineNum( "CBotErrRedefFunc", 5027) ; // cette fonction existe d�j�
+ CBotToken::DefineNum( "CBotErrLowParam", 5028) ; // pas assez de param�tres
+ CBotToken::DefineNum( "CBotErrBadParam", 5029) ; // mauvais types de param�tres
+ CBotToken::DefineNum( "CBotErrNbParam", 5030) ; // mauvais nombre de param�tres
+ CBotToken::DefineNum( "CBotErrUndefItem", 5031) ; // �l�ment n'existe pas dans la classe
CBotToken::DefineNum( "CBotErrUndefClass", 5032) ; // variable n'est pas une classe
- CBotToken::DefineNum( "CBotErrNoConstruct", 5033) ; // pas de constructeur approprié
- CBotToken::DefineNum( "CBotErrRedefClass", 5034) ; // classe existe déjà
+ CBotToken::DefineNum( "CBotErrNoConstruct", 5033) ; // pas de constructeur appropri�
+ CBotToken::DefineNum( "CBotErrRedefClass", 5034) ; // classe existe d�j�
CBotToken::DefineNum( "CBotErrCloseIndex", 5035) ; // " ] " attendu
- CBotToken::DefineNum( "CBotErrReserved", 5036) ; // mot réservé (par un DefineNum)
+ CBotToken::DefineNum( "CBotErrReserved", 5036) ; // mot r�serv� (par un DefineNum)
-// voici la liste des erreurs pouvant être retournées par le module
-// pour l'exécution
+// voici la liste des erreurs pouvant �tre retourn�es par le module
+// pour l'ex�cution
- CBotToken::DefineNum( "CBotErrZeroDiv", 6000) ; // division par zéro
- CBotToken::DefineNum( "CBotErrNotInit", 6001) ; // variable non initialisée
- CBotToken::DefineNum( "CBotErrBadThrow", 6002) ; // throw d'une valeur négative
- CBotToken::DefineNum( "CBotErrNoRetVal", 6003) ; // fonction n'a pas retourné de résultat
+ CBotToken::DefineNum( "CBotErrZeroDiv", 6000) ; // division par z�ro
+ CBotToken::DefineNum( "CBotErrNotInit", 6001) ; // variable non initialis�e
+ CBotToken::DefineNum( "CBotErrBadThrow", 6002) ; // throw d'une valeur n�gative
+ CBotToken::DefineNum( "CBotErrNoRetVal", 6003) ; // fonction n'a pas retourn� de r�sultat
CBotToken::DefineNum( "CBotErrNoRun", 6004) ; // Run() sans fonction active
CBotToken::DefineNum( "CBotErrUndefFunc", 6005) ; // appel d'une fonction qui n'existe plus