+static const struct pivot_table *
+get_first_table (const struct spv_reader *spv)
+{
+ struct spv_item **items;
+ size_t n_items;
+ spv_select (spv, criteria, n_criteria, &items, &n_items);
+
+ for (size_t i = 0; i < n_items; i++)
+ if (spv_item_is_table (items[i]))
+ {
+ free (items);
+ return spv_item_get_table (items[i]);
+ }
+
+ free (items);
+ return NULL;
+}
+
+static void
+run_get_table_look (int argc UNUSED, char **argv)
+{
+ struct spv_reader *spv;
+ char *err = spv_open (argv[1], &spv);
+ if (err)
+ error (1, 0, "%s", err);
+
+ const struct pivot_table *table = get_first_table (spv);
+ if (!table)
+ error (1, 0, "%s: no tables found", argv[1]);
+
+ err = spv_table_look_write (argv[2], pivot_table_get_look (table));
+ if (err)
+ error (1, 0, "%s", err);
+
+ spv_close (spv);
+}
+
+static void
+run_convert_table_look (int argc UNUSED, char **argv)
+{
+ struct pivot_table_look *look;
+ char *err = spv_table_look_read (argv[1], &look);
+ if (err)
+ error (1, 0, "%s", err);
+
+ err = spv_table_look_write (argv[2], look);
+ if (err)
+ error (1, 0, "%s", err);
+
+ pivot_table_look_uninit (look);
+ free (look);
+}
+