diff -r bd4e5b544473 -r ecaf2a896ea3 tool/Command.cpp --- 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)