From f1263d3f88621e115a842184ba5bf7a9a1911c67 Mon Sep 17 00:00:00 2001
From: Robert F-C <rfairliecuninghame@yahoo.com>
Date: Sat, 2 Mar 2013 16:12:11 +1100
Subject: [PATCH] Further reduce code by using precompiler logic

---
 Marlin/Configuration_adv.h |  2 +-
 Marlin/temperature.cpp     | 29 ++++++++++++++---------------
 2 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index a65c69dee2..a21a7a42f8 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -86,7 +86,7 @@
 //===========================================================================
 
 // This defines the number of extruders
-#define EXTRUDERS 1
+#define EXTRUDERS 2
 
 #define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing
 
diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp
index 75012cff06..0dc334e09d 100644
--- a/Marlin/temperature.cpp
+++ b/Marlin/temperature.cpp
@@ -400,12 +400,13 @@ void manage_heater()
 
   } // End extruder for loop
   
-  #if EXTRUDER_0_AUTO_FAN_PIN > -1
+  #if EXTRUDER_0_AUTO_FAN_PIN > -1 || EXTRUDER_1_AUTO_FAN_PIN > -1 || EXTRUDER_2_AUTO_FAN_PIN > -1
+    bool newFanState;
+    #if EXTRUDER_0_AUTO_FAN_PIN > -1
     // check the extruder 0 setting (and any ganged auto fan outputs)
-    bool newFanState = (EXTRUDER_0_AUTO_FAN_PIN > -1 && 
-        (current_temperature[0] > EXTRUDER_AUTO_FAN_TEMPERATURE || 
+    newFanState = (current_temperature[0] > EXTRUDER_AUTO_FAN_TEMPERATURE || 
             (EXTRUDER_0_AUTO_FAN_PIN == EXTRUDER_1_AUTO_FAN_PIN && current_temperature[1] > EXTRUDER_AUTO_FAN_TEMPERATURE) || 
-            (EXTRUDER_0_AUTO_FAN_PIN == EXTRUDER_2_AUTO_FAN_PIN && current_temperature[2] > EXTRUDER_AUTO_FAN_TEMPERATURE)));
+            (EXTRUDER_0_AUTO_FAN_PIN == EXTRUDER_2_AUTO_FAN_PIN && current_temperature[2] > EXTRUDER_AUTO_FAN_TEMPERATURE));
     if ((extruderAutoFanState & 1) != newFanState) // store state in first bit
     {
         int newFanSpeed = (newFanState ? EXTRUDER_AUTO_FAN_SPEED : 0);
@@ -416,12 +417,11 @@ void manage_heater()
         analogWrite(EXTRUDER_0_AUTO_FAN_PIN, newFanSpeed);
         extruderAutoFanState = newFanState | (extruderAutoFanState & ~1);
     }
-  #endif //EXTRUDER_0_AUTO_FAN_PIN > -1
-  #if EXTRUDER_1_AUTO_FAN_PIN > -1
+    #endif //EXTRUDER_0_AUTO_FAN_PIN > -1
+    #if EXTRUDER_1_AUTO_FAN_PIN > -1 && EXTRUDER_1_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN
     // check the extruder 1 setting (except when extruder 1 is the same as 0)
-    newFanState = (EXTRUDER_1_AUTO_FAN_PIN > -1 && EXTRUDER_1_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN &&
-        (current_temperature[1] > EXTRUDER_AUTO_FAN_TEMPERATURE ||
-            (EXTRUDER_1_AUTO_FAN_PIN == EXTRUDER_2_AUTO_FAN_PIN && current_temperature[2] > EXTRUDER_AUTO_FAN_TEMPERATURE)));
+    newFanState = (current_temperature[1] > EXTRUDER_AUTO_FAN_TEMPERATURE ||
+            (EXTRUDER_1_AUTO_FAN_PIN == EXTRUDER_2_AUTO_FAN_PIN && current_temperature[2] > EXTRUDER_AUTO_FAN_TEMPERATURE));
     if ((extruderAutoFanState & 2) != (newFanState<<1)) // use second bit
     {
         int newFanSpeed = (newFanState ? EXTRUDER_AUTO_FAN_SPEED : 0);
@@ -432,12 +432,10 @@ void manage_heater()
         analogWrite(EXTRUDER_1_AUTO_FAN_PIN, newFanSpeed);
         extruderAutoFanState = (newFanState<<1) | (extruderAutoFanState & ~2);
     }
-  #endif //EXTRUDER_1_AUTO_FAN_PIN > -1
-  #if EXTRUDER_2_AUTO_FAN_PIN > -1
+    #endif //EXTRUDER_1_AUTO_FAN_PIN > -1
+    #if EXTRUDER_2_AUTO_FAN_PIN > -1 && EXTRUDER_2_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN && EXTRUDER_2_AUTO_FAN_PIN != EXTRUDER_1_AUTO_FAN_PIN
     // check the extruder 2 setting (except when extruder 2 is the same as 1 or 0)
-    newFanState = (EXTRUDER_2_AUTO_FAN_PIN > -1 && 
-            EXTRUDER_2_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN && EXTRUDER_2_AUTO_FAN_PIN != EXTRUDER_1_AUTO_FAN_PIN &&
-        current_temperature[2] > EXTRUDER_AUTO_FAN_TEMPERATURE);
+    newFanState = (current_temperature[2] > EXTRUDER_AUTO_FAN_TEMPERATURE);
     if ((extruderAutoFanState & 4) != (newFanState<<2)) // use third bit
     {
         int newFanSpeed = (newFanState ? EXTRUDER_AUTO_FAN_SPEED : 0);
@@ -448,7 +446,8 @@ void manage_heater()
         analogWrite(EXTRUDER_2_AUTO_FAN_PIN, newFanSpeed);
         extruderAutoFanState = (newFanState<<2) | (extruderAutoFanState & ~4);
     }
-  #endif //EXTRUDER_2_AUTO_FAN_PIN > -1
+    #endif //EXTRUDER_2_AUTO_FAN_PIN > -1
+  #endif // any AUTO_FAN_PIN enabled  
 
   #ifndef PIDTEMPBED
   if(millis() - previous_millis_bed_heater < BED_CHECK_INTERVAL)