Index: trunk/ppMerge/src/ppMergeOptions.c
===================================================================
--- trunk/ppMerge/src/ppMergeOptions.c	(revision 15953)
+++ trunk/ppMerge/src/ppMergeOptions.c	(revision 16842)
@@ -10,4 +10,6 @@
 #include "ppMerge.h"
 #include "ppMergeOptions.h"
+
+#define ARRAY_BUFFER 4                  // Number of values to add at once
 
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -34,5 +36,5 @@
     options->zero = false;
     options->scale = false;
-    options->darktime = false;
+    options->dark = false;
     options->fringe = false;
     options->shutter = false;
@@ -65,4 +67,5 @@
     options->badMask = 0x00;
     options->growPixels = 0;
+    options->darkOrdinates = NULL;
     return options;
 }
@@ -174,5 +177,5 @@
             options->zero = false;
             options->scale = false;
-            options->darktime = false;
+            options->dark = false;
             options->fringe = false;
             options->shutter = false;
@@ -181,5 +184,5 @@
             options->zero = false;
             options->scale = false;
-            options->darktime = true;
+            options->dark = true;
             options->fringe = false;
             options->shutter = false;
@@ -188,5 +191,5 @@
             options->zero = false;
             options->scale = true;
-            options->darktime = false;
+            options->dark = false;
             options->fringe = false;
             options->shutter = false;
@@ -195,5 +198,5 @@
             options->zero = false;
             options->scale = true;
-            options->darktime = false;
+            options->dark = false;
             options->fringe = false;
             options->shutter = false;
@@ -202,5 +205,5 @@
             options->zero = false;
             options->scale = true;
-            options->darktime = false;
+            options->dark = false;
             options->fringe = false;
             options->shutter = false;
@@ -209,5 +212,5 @@
             options->zero = true;
             options->scale = true;
-            options->darktime = false;
+            options->dark = false;
             options->fringe = true;
             options->shutter = false;
@@ -216,5 +219,5 @@
             options->zero = false;
             options->scale = false;
-            options->darktime = false;
+            options->dark = false;
             options->fringe = false;
             options->shutter = true;
@@ -225,5 +228,5 @@
             options->zero = false;
             options->scale = false;
-            options->darktime = false;
+            options->dark = false;
             options->fringe = false;
             options->shutter = false;
@@ -255,12 +258,7 @@
 
 #if 0
-    // Or you can set them individually
-    OPTION_PARSE(options->zero,     config->arguments, "-zero",    Bool);
-    OPTION_PARSE(options->scale,    config->arguments, "-scale",   Bool);
-    OPTION_PARSE(options->darktime, config->arguments, "-exptime", Bool);
-#endif
-
     // Number of on/off images
     OPTION_PARSE(options->onOff, config->arguments, "-onoff", S32);
+#endif
 
     // Masking options
@@ -268,4 +266,49 @@
     options->badMask = pmConfigMask("BAD", config);
 
+    if (options->dark) {
+        psMetadata *ordinates = psMetadataLookupMetadata(NULL, recipe, "DARK.ORDINATES"); // Ordinates info
+        options->darkOrdinates = psArrayAllocEmpty(psListLength(ordinates->list));
+
+        psMetadataIterator *iter = psMetadataIteratorAlloc(ordinates, PS_LIST_HEAD, NULL); // Iterator
+        psMetadataItem *item;           // Item from iteration
+        while ((item = psMetadataGetAndIncrement(iter))) {
+            int order = 0;              // Polynomial order
+            bool scale = false;         // Scale values?
+            float min = NAN, max = NAN; // Minimum and maximum values for scaling
+            switch (item->type) {
+              case PS_TYPE_S32:
+                order = item->data.S32;
+                break;
+              case PS_DATA_METADATA:
+                order = psMetadataLookupS32(NULL, item->data.md, "ORDER");
+                bool mdok;                  // Status of MD lookup
+                scale = psMetadataLookupBool(&mdok, item->data.md, "SCALE");
+                min = psMetadataLookupF32(&mdok, item->data.md, "MIN");
+                max = psMetadataLookupF32(&mdok, item->data.md, "MAX");
+                break;
+              default:
+                psError(PS_ERR_BAD_PARAMETER_TYPE, true,
+                        "Type of DARK.ORDINATES entry %s (%x) is not METADATA or S32",
+                        item->name, item->type);
+                psFree(options);
+                return false;
+            }
+            if (order <= 0) {
+                psError(PS_ERR_BAD_PARAMETER_VALUE, true, "ORDER not positive (%d) for DARK.ORDINATES %s",
+                        order, item->name);
+                psFree(options);
+                return false;
+            }
+
+            pmDarkOrdinate *ord = pmDarkOrdinateAlloc(item->name, order);
+            ord->scale = scale;
+            ord->min = min;
+            ord->max = max;
+            psArrayAdd(options->darkOrdinates, options->darkOrdinates->n, ord);
+            psFree(ord);
+        }
+        psFree(iter);
+    }
+
     return options;
 }
