From 97946042ed941d902b82a49cbc8c8e38cae6155f Mon Sep 17 00:00:00 2001
From: Mattias Andrée <maandree@operamail.com>
Date: Tue, 3 Jun 2014 05:21:46 +0200
Subject: test: m + select crtc
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Mattias Andrée <maandree@operamail.com>
---
 src/test/test.c | 131 +++++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 111 insertions(+), 20 deletions(-)

(limited to 'src')

diff --git a/src/test/test.c b/src/test/test.c
index 79672c2..f5f5c42 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -20,6 +20,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
+#include <string.h>
 
 
 #if LIBGAMMA_ERROR_MIN < -46
@@ -100,31 +101,46 @@ static void method_availability(void)
 }
 
 
+static void list_default_sites(void)
+{
+  int method;
+  for (method = 0; method < LIBGAMMA_METHOD_COUNT; method++)
+    if (libgamma_is_method_available(method))
+      {
+	printf("Default site for %s:\n", method_name(method));
+	printf("  Variable: %s\n", libgamma_method_default_site_variable(method));
+	printf("  Site name: %s\n", libgamma_method_default_site(method));
+	printf("\n");
+      }
+}
+
+
 static void method_capabilities(void)
 {
   libgamma_method_capabilities_t caps;
   int method;
   for (method = 0; method < LIBGAMMA_METHOD_COUNT; method++)
-    {
-      printf("Capabilities of %s:\n", method_name(method));
-      libgamma_method_capabilities(&caps, method);
-      
-      printf("  %s: %X\n", "CRTC information",      caps.crtc_information);
-      printf("  %s: %s\n", "Default site known",    caps.default_site_known            ? "yes" : "no");
-      printf("  %s: %s\n", "Multiple sites",        caps.multiple_sites                ? "yes" : "no");
-      printf("  %s: %s\n", "Multiple partitions",   caps.multiple_partitions           ? "yes" : "no");
-      printf("  %s: %s\n", "Multiple crtcs",        caps.multiple_crtcs                ? "yes" : "no");
-      printf("  %s: %s\n", "Graphics cards",        caps.partitions_are_graphics_cards ? "yes" : "no");
-      printf("  %s: %s\n", "Site restore",          caps.site_restore                  ? "yes" : "no");
-      printf("  %s: %s\n", "Partition restore",     caps.partition_restore             ? "yes" : "no");
-      printf("  %s: %s\n", "CRTC restore",          caps.crtc_restore                  ? "yes" : "no");
-      printf("  %s: %s\n", "Identical gamma sizes", caps.identical_gamma_sizes         ? "yes" : "no");
-      printf("  %s: %s\n", "Fixed gamma size",      caps.fixed_gamma_size              ? "yes" : "no");
-      printf("  %s: %s\n", "Fixed gamma depth",     caps.fixed_gamma_depth             ? "yes" : "no");
-      printf("  %s: %s\n", "Real method",           caps.real                          ? "yes" : "no");
-      printf("  %s: %s\n", "Fake method",           caps.fake                          ? "yes" : "no");
-      printf("\n");
-    }
+    if (libgamma_is_method_available(method))
+      {
+	printf("Capabilities of %s:\n", method_name(method));
+	libgamma_method_capabilities(&caps, method);
+	
+	printf("  %s: %X\n", "CRTC information",      caps.crtc_information);
+	printf("  %s: %s\n", "Default site known",    caps.default_site_known            ? "yes" : "no");
+	printf("  %s: %s\n", "Multiple sites",        caps.multiple_sites                ? "yes" : "no");
+	printf("  %s: %s\n", "Multiple partitions",   caps.multiple_partitions           ? "yes" : "no");
+	printf("  %s: %s\n", "Multiple crtcs",        caps.multiple_crtcs                ? "yes" : "no");
+	printf("  %s: %s\n", "Graphics cards",        caps.partitions_are_graphics_cards ? "yes" : "no");
+	printf("  %s: %s\n", "Site restore",          caps.site_restore                  ? "yes" : "no");
+	printf("  %s: %s\n", "Partition restore",     caps.partition_restore             ? "yes" : "no");
+	printf("  %s: %s\n", "CRTC restore",          caps.crtc_restore                  ? "yes" : "no");
+	printf("  %s: %s\n", "Identical gamma sizes", caps.identical_gamma_sizes         ? "yes" : "no");
+	printf("  %s: %s\n", "Fixed gamma size",      caps.fixed_gamma_size              ? "yes" : "no");
+	printf("  %s: %s\n", "Fixed gamma depth",     caps.fixed_gamma_depth             ? "yes" : "no");
+	printf("  %s: %s\n", "Real method",           caps.real                          ? "yes" : "no");
+	printf("  %s: %s\n", "Fake method",           caps.fake                          ? "yes" : "no");
+	printf("\n");
+      }
 }
 
 
@@ -161,11 +177,86 @@ static void error_test(void)
 
 int main(void)
 {
+  int method;
+  char* site;
+  char* tmp;
+  char buf[256];
+  libgamma_site_state_t site_state;
+  libgamma_partition_state_t part_state;
+  libgamma_crtc_state_t crtc_state;
+  int r;
+  
   list_methods_lists();
   method_availability();
+  list_default_sites();
   method_capabilities();
   error_test();
   
+  printf("Select adjustment method:\n");
+  for (method = 0; method < LIBGAMMA_METHOD_COUNT; method++)
+    printf("    %i:  %s\n", method, method_name(method));
+  printf("> ");
+  fflush(stdout);
+  fgets(buf, sizeof(buf) / sizeof(char), stdin);
+  method = atoi(buf);
+  
+  printf("Select site: ");
+  fflush(stdout);
+  fgets(buf, sizeof(buf) / sizeof(char), stdin);
+  tmp = strchr(buf, '\n');
+  if (tmp != NULL)
+    *tmp = '\0';
+  if (buf[0] == '\0')
+    site = NULL;
+  else
+    {
+      site = malloc((strlen(buf) + 1) * sizeof(char));
+      memcpy(site, buf, strlen(buf) + 1);
+    }
+  
+  if ((r = libgamma_site_initialise(&site_state, method, site)))
+    {
+      free(site);
+      return libgamma_perror("error", r), 1;
+    }
+  
+  if (site_state.partitions_available == 0)
+    {
+      libgamma_site_destroy(&site_state);
+      return printf("No partitions found\n"), 1;
+    }
+  
+  printf("Select partition [0, %lu]: ", site_state.partitions_available - 1);
+  fflush(stdout);
+  fgets(buf, sizeof(buf) / sizeof(char), stdin);
+  
+  if ((r = libgamma_partition_initialise(&part_state, &site_state, (size_t)atoll(buf))))
+    {
+      libgamma_site_destroy(&site_state);
+      return libgamma_perror("error", r), 1;
+    }
+  
+  if (part_state.crtcs_available == 0)
+    {
+      libgamma_partition_destroy(&part_state);
+      libgamma_site_destroy(&site_state);
+      return printf("No CRTC:s found\n"), 1;
+    }
+  
+  printf("Select CRTC [0, %lu]: ", part_state.crtcs_available - 1);
+  fflush(stdout);
+  fgets(buf, sizeof(buf) / sizeof(char), stdin);
+  
+  if ((r = libgamma_crtc_initialise(&crtc_state, &part_state, (size_t)atoll(buf))))
+    {
+      libgamma_partition_destroy(&part_state);
+      libgamma_site_destroy(&site_state);
+      return libgamma_perror("error", r), 1;
+    }
+  
+  libgamma_crtc_destroy(&crtc_state);
+  libgamma_partition_destroy(&part_state);
+  libgamma_site_destroy(&site_state);
   return 0;
 }
 
-- 
cgit v1.2.3-70-g09d2