tool/Command.cpp
changeset 1156 ecaf2a896ea3
parent 1155 bd4e5b544473
child 1157 04d1c950cf9d
--- a/tool/Command.cpp	Mon Jul 28 08:45:28 2008 +0000
+++ b/tool/Command.cpp	Mon Jul 28 09:12:21 2008 +0000
@@ -159,6 +159,69 @@
     return list;
 }
 
+/*****************************************************************************/
+
+bool operator<(
+        const ec_ioctl_config_t &a,
+        const ec_ioctl_config_t &b
+        )
+{
+    return a.alias < b.alias
+        || (a.alias == b.alias && a.position < b.position);
+}
+
+/*****************************************************************************/
+
+Command::ConfigList Command::selectedConfigs(MasterDevice &m)
+{
+    unsigned int i;
+    int effAlias;
+    ec_ioctl_master_t master;
+    ec_ioctl_config_t config;
+    ConfigList list;
+    stringstream err;
+
+    m.getMaster(&master);
+
+    // Assume alias 0 if only position is given.
+    if (alias == -1 && position != -1) {
+        effAlias = 0;
+    } else {
+        effAlias = alias;
+    }
+
+    if (effAlias == -1) { // no alias given
+        if (position == -1) { // no alias and position given
+            // all items
+            for (i = 0; i < master.config_count; i++) {
+                m.getConfig(&config, i);
+                list.push_back(config);
+            }
+        }
+    } else { // alias given
+        if (position == -1) { // alias, but no position given
+            // take all items with a given alias
+            for (i = 0; i < master.config_count; i++) {
+                m.getConfig(&config, i);
+                if (config.alias == effAlias) {
+                    list.push_back(config);
+                }
+            }
+        } else { // alias and position given
+            for (i = 0; i < master.config_count; i++) {
+                m.getConfig(&config, i);
+                if (config.alias == effAlias && config.position == position) {
+                    list.push_back(config);
+                    break; // there can be at most one matching
+                }
+            }
+        }
+    }
+
+    list.sort();
+    return list;
+}
+
 /****************************************************************************/
 
 string Command::alStateString(uint8_t state)