(svn r2195) Add CmdFailed() as the One True Way(tm) to check if a command failed.
authortron
Thu, 14 Apr 2005 11:17:36 +0000
changeset 1691 fcd9fefaed02
parent 1690 4dfe8cbf0fba
child 1692 2587eee1c632
(svn r2195) Add CmdFailed() as the One True Way(tm) to check if a command failed.
command.c
command.h
rail_cmd.c
--- a/command.c	Thu Apr 14 09:58:04 2005 +0000
+++ b/command.c	Thu Apr 14 11:17:36 2005 +0000
@@ -349,7 +349,7 @@
 	// only execute the test call if it's toplevel, or we're not execing.
 	if (_docommand_recursive == 1 || !(flags & DC_EXEC) || (flags & DC_FORCETEST) ) {
 		res = proc(x, y, flags&~DC_EXEC, p1, p2);
-		if ((uint32)res >> 16 == 0x8000) {
+		if (CmdFailed(res)) {
 			if (res & 0xFFFF) _error_message = res & 0xFFFF;
 			goto error;
 		}
@@ -368,7 +368,7 @@
 	/* Execute the command here. All cost-relevant functions set the expenses type
 	 * themselves with "SET_EXPENSES_TYPE(...);" at the beginning of the function */
 	res = proc(x, y, flags, p1, p2);
-	if ((uint32)res >> 16 == 0x8000) {
+	if (CmdFailed(res)) {
 		if (res & 0xFFFF) _error_message = res & 0xFFFF;
 error:
 		_docommand_recursive--;
@@ -443,7 +443,7 @@
 	if (_shift_pressed && _current_player == _local_player && !(cmd & (CMD_NETWORK_COMMAND | CMD_SHOW_NO_ERROR))) {
 		// estimate the cost.
 		res = proc(x, y, flags, p1, p2);
-		if ((uint32)res >> 16 == 0x8000) {
+		if (CmdFailed(res)) {
 			if (res & 0xFFFF) _error_message = res & 0xFFFF;
 			ShowErrorMessage(_error_message, _error_message_2, x, y);
 		} else {
@@ -458,7 +458,7 @@
 	if (!((cmd & CMD_NO_TEST_IF_IN_NETWORK) && _networking)) {
 		// first test if the command can be executed.
 		res = proc(x,y, flags, p1, p2);
-		if ((uint32)res >> 16 == 0x8000) {
+		if (CmdFailed(res)) {
 			if (res & 0xFFFF) _error_message = res & 0xFFFF;
 			goto show_error;
 		}
@@ -489,7 +489,7 @@
 	if (!notest && !((cmd & CMD_NO_TEST_IF_IN_NETWORK) && _networking)) {
 		assert(res == res2); // sanity check
 	} else {
-		if ((uint32)res2 >> 16 == 0x8000) {
+		if (CmdFailed(res)) {
 			if (res2 & 0xFFFF) _error_message = res2 & 0xFFFF;
 			goto show_error;
 		}
--- a/command.h	Thu Apr 14 09:58:04 2005 +0000
+++ b/command.h	Thu Apr 14 11:17:36 2005 +0000
@@ -177,6 +177,12 @@
 //#define return_cmd_error(errcode) do { _error_message=(errcode); return CMD_ERROR; } while(0)
 #define return_cmd_error(errcode) do { return CMD_ERROR | (errcode); } while (0)
 
+static inline bool CmdFailed(int32 res)
+{
+	// lower 16bits are the StringID of the possible error
+	return res <= (CMD_ERROR | INVALID_STRING_ID);
+}
+
 /* command.c */
 int32 DoCommand(int x, int y, uint32 p1, uint32 p2, uint32 flags, uint procc);
 int32 DoCommandByTile(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc);
--- a/rail_cmd.c	Thu Apr 14 09:58:04 2005 +0000
+++ b/rail_cmd.c	Thu Apr 14 11:17:36 2005 +0000
@@ -307,7 +307,7 @@
 			switch (m5 & 0x38) { // what's under the bridge?
 				case 0x00: // clear land
 					ret = CheckRailSlope(tileh, rail_bit, 0, tile);
-					if (ret & CMD_ERROR) return ret;
+					if (CmdFailed(ret)) return ret;
 					cost += ret;
 
 					if (flags & DC_EXEC) {
@@ -340,7 +340,7 @@
 			}
 
 			ret = CheckRailSlope(tileh, rail_bit, m5 & RAIL_BIT_MASK, tile);
-			if (ret & CMD_ERROR) return ret;
+			if (CmdFailed(ret)) return ret;
 			cost += ret;
 
 			if (flags & DC_EXEC) _map5[tile] = m5 | rail_bit;
@@ -370,11 +370,11 @@
 
 		default:
 			ret = CheckRailSlope(tileh, rail_bit, 0, tile);
-			if (ret & CMD_ERROR) return ret;
+			if (CmdFailed(ret)) return ret;
 			cost += ret;
 
 			ret = DoCommandByTile(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
-			if (ret == CMD_ERROR) return ret;
+			if (CmdFailed(ret)) return ret;
 			cost += ret;
 
 			if (flags & DC_EXEC) {