diff options
Diffstat (limited to 'engines/glk/alan2')
-rw-r--r-- | engines/glk/alan2/decode.cpp | 4 | ||||
-rw-r--r-- | engines/glk/alan2/decode.h | 17 | ||||
-rw-r--r-- | engines/glk/alan2/parse.cpp | 30 | ||||
-rw-r--r-- | engines/glk/alan2/parse.h | 73 |
4 files changed, 87 insertions, 37 deletions
diff --git a/engines/glk/alan2/decode.cpp b/engines/glk/alan2/decode.cpp index aaf297b759..3a93d1d3a8 100644 --- a/engines/glk/alan2/decode.cpp +++ b/engines/glk/alan2/decode.cpp @@ -92,8 +92,6 @@ int Decode::decodeChar() { return symbol - 1; } -// Save so much about the decoding process, so it is possible to restore -// and continue later. DecodeInfo *Decode::pushDecode() { DecodeInfo *info = new DecodeInfo(); @@ -107,8 +105,6 @@ DecodeInfo *Decode::pushDecode() { return info; } -// Restore enough info about the decoding process, so it is possible to -// continue after having decoded something else void Decode::popDecode (DecodeInfo *info) { _txtFile->seek(info->fpos, SEEK_CUR); _decodeBuffer = info->buffer; diff --git a/engines/glk/alan2/decode.h b/engines/glk/alan2/decode.h index 1361badfa1..75a35dc945 100644 --- a/engines/glk/alan2/decode.h +++ b/engines/glk/alan2/decode.h @@ -31,22 +31,33 @@ namespace Glk { namespace Alan2 { // Structure for saved decode info -typedef struct DecodeInfo { +struct DecodeInfo { long fpos; int buffer; int bits; CodeValue value; CodeValue high; CodeValue low; -} DecodeInfo; +}; class Decode { public: Decode(Common::File *txtFile, Aword *freq): _txtFile(txtFile), _freq(freq) {} void startDecoding(); int decodeChar(); + + /** + * Save so much about the decoding process, so it is possible to restore + * and continue later. + */ DecodeInfo *pushDecode(); + + /** + * Restore enough info about the decoding process, so it is possible to + * continue after having decoded something else. + */ void popDecode(DecodeInfo *info); + int inputBit(); private: @@ -64,6 +75,6 @@ private: }; } // End of namespace Alan2 -} // Engine of namespace GLK +} // End of namespace Glk #endif diff --git a/engines/glk/alan2/parse.cpp b/engines/glk/alan2/parse.cpp index 789080f936..45fac67f4f 100644 --- a/engines/glk/alan2/parse.cpp +++ b/engines/glk/alan2/parse.cpp @@ -216,7 +216,6 @@ void Parser::scan() { } while (!eol); } -// Search for a non-verb command void Parser::nonverb() { if (isDir(wrds[wrdidx])) { wrdidx++; @@ -264,7 +263,6 @@ Abool Parser::isHere(Aword id) { // ---------------------------------------------------------------------------- -// Build a list of objects matching 'all' void Parser::buildall(ParamElem list[]) { int o, i = 0; bool found = false; @@ -310,7 +308,6 @@ void Parser::listIntersection(ParamElem a[], ParamElem b[]) { a[last].code = EOF; } -// Copy the refs (in dictionary) to a paramList void Parser::listCopyFromDictionary(ParamElem p[], Aword r[]) { int i; @@ -331,7 +328,6 @@ int Parser::listLength(ParamElem a[]) { return (i); } -// Compact a list, i.e remove any NULL elements void Parser::listCompact(ParamElem a[]) { int i, j; @@ -342,7 +338,6 @@ void Parser::listCompact(ParamElem a[]) { a[i].code = EOF; } -// Merge the paramElems of one list into the first void Parser::listMerge(ParamElem a[], ParamElem b[]) { int i, last; @@ -356,7 +351,6 @@ void Parser::listMerge(ParamElem a[], ParamElem b[]) { } } -// Subtract two lists void Parser::listSubtract(ParamElem a[], ParamElem b[]) { for (int i = 0; a[i].code != EOF; i++) if (listContains(b, a[i].code)) @@ -365,7 +359,6 @@ void Parser::listSubtract(ParamElem a[], ParamElem b[]) { listCompact(a); } -// Match an unambigous object reference void Parser::unambig(ParamElem plst[]) { int i; bool found = false; // Adjective or noun found? @@ -485,7 +478,6 @@ void Parser::unambig(ParamElem plst[]) { } } -// Match a simple verb command void Parser::simple(ParamElem olst[]) { static ParamElem *tlst = NULL; int savidx = wrdidx; @@ -541,7 +533,6 @@ void Parser::simple(ParamElem olst[]) { } } -// Match a complex verb command void Parser::complex(ParamElem olst[]) { // Above this procedure we can use the is* tests, but not below since // they work on words.Below all is converted to indices into the @@ -595,8 +586,6 @@ bool Parser::claCheck(ClaElem *cla) { return ok; } -// In case the syntax did not indicate omnipotent powers (allowed -// access to remote object), we need to remove non - present parameters void Parser::resolve(ParamElem plst[]) { if (allLength > 0) return; // ALL has already done this @@ -642,13 +631,6 @@ bool Parser::endOfTable(ChkElem *addr) { return *x == EOF; } -/** - * Find the verb alternative wanted in a verb list and return - * the address to it. - * - * @param vrbsadr Address to start of list - * @param param Which parameter to match - */ AltElem *Parser::findalt(Aword vrbsadr, Aword param) { VrbElem *vrb; AltElem *alt; @@ -668,12 +650,6 @@ AltElem *Parser::findalt(Aword vrbsadr, Aword param) { return NULL; } -/** - * Tries a check, returns TRUE if it passed, FALSE otherwise - * - * @param adr ACODE address to check table - * @param act Act if it fails? - */ bool Parser::trycheck(Aaddr adr, bool act) { ChkElem *chk = (ChkElem *)addrTo(adr); @@ -694,7 +670,6 @@ bool Parser::trycheck(Aaddr adr, bool act) { } } -// Check if current action is possible according to the CHECKs. bool Parser::possible() { AltElem *alt[MAXPARAMS + 2]; // List of alt-pointers, one for each param int i; // Parameter index @@ -903,7 +878,6 @@ void Parser::tryMatch(ParamElem mlst[]) { plural = anyPlural; // Remember that we found plural objects } -// Find the verb class (not used currently) and 'tryMatch()' void Parser::match(ParamElem *mlst) { tryMatch(mlst); // try to understand what the user said @@ -913,8 +887,6 @@ void Parser::match(ParamElem *mlst) { wrdidx++; // If so skip the AND } -// Execute all activities commanded.Handles possible multiple actions -// such as THEM or lists of objects. void Parser::action(ParamElem plst[]) { int i, mpos; char marker[10]; @@ -977,4 +949,4 @@ void Parser::parse() { } } // End of namespace Alan2 -} // Engine of namespace GLK +} // End of namespace Glk diff --git a/engines/glk/alan2/parse.h b/engines/glk/alan2/parse.h index 4642e74ee0..7198b2d555 100644 --- a/engines/glk/alan2/parse.h +++ b/engines/glk/alan2/parse.h @@ -43,35 +43,106 @@ private: char *gettoken(char *tokenBuffer); void agetline(); void scan(); + + /** + * Search for a non-verb command + */ void nonverb(); + Abool objhere(Aword obj); Aword acthere(Aword act); Abool isHere(Aword id); + + /** + * Build a list of objects matching 'all' + */ void buildall(ParamElem list[]); + void listCopy(ParamElem a[], ParamElem b[]); bool listContains(ParamElem l[], Aword e); void listIntersection(ParamElem a[], ParamElem b[]); + + /** + * Copy the refs (in dictionary) to a paramList + */ void listCopyFromDictionary(ParamElem p[], Aword r[]); + int listLength(ParamElem a[]); + + /** + * Compact a list, i.e remove any NULL elements + */ void listCompact(ParamElem a[]); + + /** + * Merge the paramElems of one list into the first + */ void listMerge(ParamElem a[], ParamElem b[]); + + /** + * Subtract two lists + */ void listSubtract(ParamElem a[], ParamElem b[]); + + /** + * Match an unambigous object reference + */ void unambig(ParamElem plst[]); + + /** + * Match a simple verb command + */ void simple(ParamElem olst[]); + + /** + * Match a complex verb command + */ void complex(ParamElem olst[]); + bool claCheck(ClaElem *cla); + + /** + * In case the syntax did not indicate omnipotent powers (allowed + * access to remote object), we need to remove non - present parameters + */ void resolve(ParamElem plst[]); + bool endOfTable(StxElem *addr); bool endOfTable(ElmElem *addr); bool endOfTable(ClaElem *addr); bool endOfTable(VrbElem *addr); bool endOfTable(AltElem *addr); bool endOfTable(ChkElem *addr); + + /** + * Find the verb alternative wanted in a verb list and return + * the address to it. + * + * @param vrbsadr Address to start of list + * @param param Which parameter to match + */ AltElem *findalt(Aword vrbsadr, Aword param); + + /** + * Tries a check, returns TRUE if it passed, FALSE otherwise + * + * @param adr ACODE address to check table + * @param act Act if it fails? + */ bool trycheck(Aaddr adr, bool act); + + /** + * Check if current action is possible according to the CHECKs. + */ bool possible(); + void tryMatch(ParamElem mlst[]); void match(ParamElem *mlst); + + /** + * Execute all activities commanded. Handles possible multiple actions + * such as THEM or lists of objects. + */ void action(ParamElem plst[]); // TODO: Initialize / move these @@ -107,6 +178,6 @@ private: }; } // End of namespace Alan2 -} // Engine of namespace GLK +} // End of namespace Glk #endif |