]> git.draconx.ca Git - fvwmconf.git/blobdiff - scripts/C/xaspect.c
Extend xaspect to support showing screen dimensions as well.
[fvwmconf.git] / scripts / C / xaspect.c
index e10f50637f211db421b6006d8a8e985af619b901..3e07caac52727d80b63c5cce18d7e6bd8a83aad8 100644 (file)
@@ -2,6 +2,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <math.h>
+#include <inttypes.h>
 #include <xcb/xcb.h>
 
 #define MKASPECT(w, h) { (double)w/h, #w ":" #h }
@@ -57,17 +58,38 @@ char *testaspect(xcb_screen_t *screen)
        return best;
 }
 
+struct options {
+       char *displayname;
+       int showdimensions;
+} *parseoptions(int argc, char **argv)
+{
+       static struct options opts = { 0 };
+       int i;
+
+       for (i = 1; i < argc; i++) {
+               if (strcmp(argv[i], "-display") == 0) {
+                       if (++i < argc) {
+                               opts.displayname = argv[i];
+                               continue;
+                       }
+                       fprintf(stderr, "-display requires an argument\n");
+               } else if (strcmp(argv[i], "-dimensions") == 0) {
+                       opts.showdimensions = 1;
+               }
+       }
+
+       return &opts;
+}
+
 int main(int argc, char **argv)
 {
        xcb_connection_t *display;
        xcb_screen_t     *screen;
-       char *dpynam = NULL;
        int screen_num;
 
-       if (argc > 2 && strcmp(argv[1], "-display") == 0)
-               dpynam = argv[2];
+       struct options *opts = parseoptions(argc, argv);
        
-       display = xcb_connect(dpynam, &screen_num);
+       display = xcb_connect(opts->displayname, &screen_num);
        if (xcb_connection_has_error(display)) {
                fprintf(stderr, "Failed to open display.\n");
                xcb_disconnect(display);
@@ -81,6 +103,10 @@ int main(int argc, char **argv)
                return EXIT_FAILURE;
        }
 
+       if (opts->showdimensions) {
+               printf("%" PRIu16 "x%" PRIu16 "-",
+                      screen->width_in_pixels, screen->height_in_pixels);
+       }
        printf("%s\n", testaspect(screen));
 
        xcb_disconnect(display);