diff options
author | Arnaud Boutonné | 2010-10-10 07:43:42 +0000 |
---|---|---|
committer | Arnaud Boutonné | 2010-10-10 07:43:42 +0000 |
commit | ced1aba1eac0e8e7891ad44f09ff0877a4fbb3da (patch) | |
tree | 08bcecac119f950b978408f7f14ae757f81da251 /engines/hugo/parser.h | |
parent | 582bd9a395e13881d96ea7c7cc54d3469d696565 (diff) | |
download | scummvm-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.h | 54 |
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 |