#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 }
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);
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);