(svn r18) -Feature Safeguard against invalid values in Patches window. Values will stick to their defined min and max values
authordarkvater
Tue, 10 Aug 2004 21:41:17 +0000
changeset 17 2a3a095d9aec
parent 16 5ee72235b403
child 18 7428dd7c5732
(svn r18) -Feature Safeguard against invalid values in Patches window. Values will stick to their defined min and max values
settings_gui.c
--- a/settings_gui.c	Tue Aug 10 21:29:47 2004 +0000
+++ b/settings_gui.c	Tue Aug 10 21:41:17 2004 +0000
@@ -779,18 +779,52 @@
 	return 0;
 }
 
-static void WritePE(const PatchEntry *pe, int32 val)
-{
-	switch(pe->type) {
-	case PE_BOOL: *(bool*)pe->variable = (bool)val; break;
-	case PE_BYTE: *(byte*)pe->variable = (byte)val; break;
-	case PE_UINT8: *(uint8*)pe->variable = (uint8)val; break;
-	case PE_INT16: *(int16*)pe->variable = (int16)val; break;
-	case PE_UINT16: *(uint16*)pe->variable = (uint16)val; break;
-	case PE_INT32: *(int32*)pe->variable = val; break;
-	default:
-		NOT_REACHED();
-	}
+static void WritePE(const PatchEntry *pe, int32 val)
+{
+	switch(pe->type) {
+	case PE_BOOL: *(bool*)pe->variable = (bool)val; break;
+	case PE_BYTE: if ((byte)val > (byte)pe->max) 
+									*(byte*)pe->variable = (byte)pe->max;
+								else if ((byte)val < (byte)pe->min)
+									*(byte*)pe->variable = (byte)pe->min;
+								else
+									*(byte*)pe->variable = (byte)val;
+								break;
+
+	case PE_UINT8: if ((uint8)val > (uint8)pe->max) 
+									*(uint8*)pe->variable = (uint8)pe->max;
+								else if ((uint8)val < (uint8)pe->min)
+									*(uint8*)pe->variable = (uint8)pe->min;
+								else
+									*(uint8*)pe->variable = (uint8)val; 
+								break;
+
+	case PE_INT16: if ((int16)val > (int16)pe->max) 
+									*(int16*)pe->variable = (int16)pe->max;
+								else if ((int16)val < (int16)pe->min)
+									*(int16*)pe->variable = (int16)pe->min;
+								else
+									*(int16*)pe->variable = (int16)val; 
+								break;
+
+	case PE_UINT16: if ((uint16)val > (uint16)pe->max) 
+									*(uint16*)pe->variable = (uint16)pe->max;
+								else if ((uint16)val < (uint16)pe->min)
+									*(uint16*)pe->variable = (uint16)pe->min;
+								else
+									*(uint16*)pe->variable = (uint16)val; 
+								break;
+
+	case PE_INT32: if ((int32)val > (int32)pe->max) 
+									*(int32*)pe->variable = (int32)pe->max;
+								else if ((int32)val < (int32)pe->min)
+									*(int32*)pe->variable = (int32)pe->min;
+								else
+									*(int32*)pe->variable = val; 
+								break;
+	default:
+		NOT_REACHED();
+	}
 }
 
 static void PatchesSelectionWndProc(Window *w, WindowEvent *e)