diff options
| -rw-r--r-- | engines/mohawk/livingbooks.h | 3 | ||||
| -rw-r--r-- | engines/mohawk/livingbooks_code.cpp | 43 | ||||
| -rw-r--r-- | engines/mohawk/livingbooks_code.h | 2 | 
3 files changed, 46 insertions, 2 deletions
| diff --git a/engines/mohawk/livingbooks.h b/engines/mohawk/livingbooks.h index 1ab6e4d89c..cde6357788 100644 --- a/engines/mohawk/livingbooks.h +++ b/engines/mohawk/livingbooks.h @@ -424,6 +424,9 @@ public:  	Common::List<LBItem *>::iterator _iterator; +	// TODO: make private +	Common::HashMap<Common::String, LBValue, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _variables; +  protected:  	MohawkEngine_LivingBooks *_vm;  	LBPage *_page; diff --git a/engines/mohawk/livingbooks_code.cpp b/engines/mohawk/livingbooks_code.cpp index 8e7c69b070..e821e7e54d 100644 --- a/engines/mohawk/livingbooks_code.cpp +++ b/engines/mohawk/livingbooks_code.cpp @@ -847,8 +847,8 @@ CodeCommandInfo generalCommandInfo[NUM_GENERAL_COMMANDS] = {  	{ "deleteAt", &LBCode::cmdDeleteAt },  	{ "clearList", &LBCode::cmdUnimplemented },  	{ "setWorld", 0 }, -	{ "setProperty", 0 }, -	{ "getProperty", 0 }, +	{ "setProperty", &LBCode::cmdSetProperty }, +	{ "getProperty", &LBCode::cmdGetProperty },  	{ "copyList", 0 },  	{ "invoke", 0 },  	{ "exec", &LBCode::cmdExec }, @@ -1189,6 +1189,45 @@ void LBCode::cmdDeleteAt(const Common::Array<LBValue> ¶ms) {  	params[0].list->array.remove_at(params[1].integer - 1);  } +void LBCode::cmdSetProperty(const Common::Array<LBValue> ¶ms) { +	if (params.size() < 2 || params.size() > 3) +		error("incorrect number of parameters (%d) to setProperty", params.size()); + +	Common::String name; +	LBValue val; +	LBItem *target = _currSource; +	if (params.size() == 3) { +		target = resolveItem(params[0]); +		if (!target) +			error("attempted setProperty on invalid item (%s)", params[0].toString().c_str()); +		name = params[1].toString(); +		val = params[2]; +	} else { +		name = params[0].toString(); +		val = params[1]; +	} + +	target->_variables[name] = val; +} + +void LBCode::cmdGetProperty(const Common::Array<LBValue> ¶ms) { +	if (params.size() < 1 || params.size() > 2) +		error("incorrect number of parameters (%d) to getProperty", params.size()); + +	Common::String name; +	LBItem *target = _currSource; +	if (params.size() == 2) { +		target = resolveItem(params[0]); +		if (!target) +			error("attempted getProperty on invalid item (%s)", params[0].toString().c_str()); +		name = params[1].toString(); +	} else { +		name = params[0].toString(); +	} + +	_stack.push(target->_variables[name]); +} +  void LBCode::cmdExec(const Common::Array<LBValue> ¶ms) {  	if (params.size() != 1)  		error("incorrect number of parameters (%d) to exec", params.size()); diff --git a/engines/mohawk/livingbooks_code.h b/engines/mohawk/livingbooks_code.h index 2cb1994492..a8d5e2d2dc 100644 --- a/engines/mohawk/livingbooks_code.h +++ b/engines/mohawk/livingbooks_code.h @@ -270,6 +270,8 @@ public:  	void cmdSetAt(const Common::Array<LBValue> ¶ms);  	void cmdListLen(const Common::Array<LBValue> ¶ms);  	void cmdDeleteAt(const Common::Array<LBValue> ¶ms); +	void cmdSetProperty(const Common::Array<LBValue> ¶ms); +	void cmdGetProperty(const Common::Array<LBValue> ¶ms);  	void cmdExec(const Common::Array<LBValue> ¶ms);  	void cmdReturn(const Common::Array<LBValue> ¶ms);  	void cmdSetPlayParams(const Common::Array<LBValue> ¶ms); | 
