aboutsummaryrefslogtreecommitdiff
path: root/engines/hugo/parser.h
diff options
context:
space:
mode:
authorArnaud Boutonné2010-10-10 07:43:42 +0000
committerArnaud Boutonné2010-10-10 07:43:42 +0000
commitced1aba1eac0e8e7891ad44f09ff0877a4fbb3da (patch)
tree08bcecac119f950b978408f7f14ae757f81da251 /engines/hugo/parser.h
parent582bd9a395e13881d96ea7c7cc54d3469d696565 (diff)
downloadscummvm-rg350-ced1aba1eac0e8e7891ad44f09ff0877a4fbb3da.tar.gz
scummvm-rg350-ced1aba1eac0e8e7891ad44f09ff0877a4fbb3da.tar.bz2
scummvm-rg350-ced1aba1eac0e8e7891ad44f09ff0877a4fbb3da.zip
HUGO: New parser for H1 Dos and H2 Dos.
Add specific parser functions for H1 Dos and H2 Dos svn-id: r53106
Diffstat (limited to 'engines/hugo/parser.h')
-rw-r--r--engines/hugo/parser.h54
1 files changed, 46 insertions, 8 deletions
diff --git a/engines/hugo/parser.h b/engines/hugo/parser.h
index 8d2b326d5d..96e5085050 100644
--- a/engines/hugo/parser.h
+++ b/engines/hugo/parser.h
@@ -44,39 +44,77 @@ enum seqTextParser {
class Parser {
public:
Parser(HugoEngine &vm);
+ virtual ~Parser();
bool isWordPresent(char **wordArr);
void charHandler();
void command(const char *format, ...);
void keyHandler(uint16 nChar, uint16 nFlags);
- void lineHandler();
+ virtual void lineHandler() = 0;
protected:
HugoEngine &_vm;
+protected:
+ bool isCarrying(uint16 wordIndex);
+
+ char *findNoun();
+ char *findVerb();
+
+ void dropObject(object_t *obj);
+ void takeObject(object_t *obj);
+ void showTakeables();
+
private:
char _ringBuffer[32]; // Ring buffer
uint16 _putIndex;
uint16 _getIndex; // Index into ring buffer
bool _checkDoubleF1Fl; // Flag used to display user help or instructions
+ void showDosInventory();
+};
+
+class Parser_v1w : public Parser {
+public:
+ Parser_v1w(HugoEngine &vm);
+ ~Parser_v1w();
+
+ virtual void lineHandler();
+
+private:
bool isBackgroundWord(objectList_t obj);
- bool isCarrying(uint16 wordIndex);
bool isCatchallVerb(objectList_t obj);
bool isGenericVerb(object_t *obj, char *comment);
bool isNear(object_t *obj, char *verb, char *comment);
bool isObjectVerb(object_t *obj, char *comment);
+};
- char *findNoun();
- char *findVerb();
+class Parser_v1d : public Parser {
+public:
+ Parser_v1d(HugoEngine &vm);
+ ~Parser_v1d();
+
+ void lineHandler();
+
+protected:
+ char *findNextNoun(char *noun);
+ bool isNear(char *verb, char *noun, object_t *obj, char *comment);
+ bool isGenericVerb(char *word, object_t *obj);
+ bool isObjectVerb(char *word, object_t *obj);
+ bool isBackgroundWord(char *noun, char *verb, objectList_t obj);
+ bool isCatchallVerb(bool test_noun, char *noun, char *verb, objectList_t obj);
- void dropObject(object_t *obj);
- void showDosInventory();
- void showTakeables();
- void takeObject(object_t *obj);
};
+class Parser_v2d : public Parser_v1d {
+public:
+ Parser_v2d(HugoEngine &vm);
+ ~Parser_v2d();
+
+ void lineHandler();
+};
+
} // End of namespace Hugo
#endif //HUGO_PARSER_H