- if (!best || fabs(aspects[i].ratio - ratio) < diff) {
- best = aspects[i].name;
- diff = fabs(aspects[i].ratio - ratio);
+ double t = (double) aspects[i].num / aspects[i].denom;
+ double cmp;
+
+ cmp = fabs(r - t);
+ if (cmp < d) {
+ *out = aspects[i];
+ d = cmp;
+ }
+
+ cmp = fabs(r - 1/t);
+ if (cmp < d) {
+ out->num = aspects[i].denom;
+ out->denom = aspects[i].num;
+ d = cmp;
+ }
+ }
+}
+
+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;