diff --git a/src/ddcctl.m b/src/ddcctl.m index 2a258d5..b9f5907 100644 --- a/src/ddcctl.m +++ b/src/ddcctl.m @@ -214,11 +214,13 @@ int main(int argc, const char * argv[]) // Defaults NSString *screenName = @""; NSUInteger displayId = -1; + const char *displayUid = NULL; NSUInteger command_interval = 100000; BOOL dump_values = NO; NSString *HelpString = @"Usage:\n" @"ddcctl \t-d <1-..> [display#]\n" + @"\t-di <0-..> [display id (overrides -d if specified)]\n" @"\t-w <0-..> [delay in usecs between settings]\n" @"\t-W <0-..> [timeout in nanosecs for replies]\n" @"\n" @@ -261,6 +263,12 @@ int main(int argc, const char * argv[]) displayId = atoi(argv[i]); } + else if (!strcmp(argv[i], "-di")) { + i++; + if (i >= argc) break; + displayUid = argv[i]; + } + else if (!strcmp(argv[i], "-b")) { i++; if (i >= argc) break; @@ -400,6 +408,30 @@ int main(int argc, const char * argv[]) } } + if (displayUid != NULL) { + char *endptr; + uint uid = strtol(displayUid, &endptr, 10); + if (endptr == displayUid) { + NSLog(@"Display ID needs to be numeric"); + exit(1); + } + int i = 1; + bool found = false; + for (NSNumber *dispId in _displayIDs) + { + if (uid == dispId.unsignedIntegerValue) { + displayId = i; + found = true; + break; + } + ++i; + } + if (!found) { + NSLog(@"Display ID %d not found", uid); + exit(1); + } + } + if (0 >= displayId || displayId > [_displayIDs count]) { // no display id given, nothing left to do! NSLog(@"%@", HelpString);