/* * Copyright (C) 2010-2014 Karel Zak * * This file may be redistributed under the terms of the * GNU Lesser General Public License. */ #include #include #include #include #include #include #include #include #include "c.h" #include "nls.h" #include "strutils.h" #include "xalloc.h" #include "libsmartcols.h" enum { COL_NAME, COL_DESC, COL_FOO, COL_LIKE, COL_TEXT }; /* add columns to the @tb */ static void setup_columns(struct libscols_table *tb) { if (!scols_table_new_column(tb, "NAME", 0, SCOLS_FL_TREE)) goto fail; if (!scols_table_new_column(tb, "DESC", 0, 0)) goto fail; if (!scols_table_new_column(tb, "FOO", 0, SCOLS_FL_WRAP)) goto fail; if (!scols_table_new_column(tb, "LIKE", 0, SCOLS_FL_RIGHT)) goto fail; if (!scols_table_new_column(tb, "TEXT", 0, SCOLS_FL_WRAP)) goto fail; return; fail: scols_unref_table(tb); err(EXIT_FAILURE, "failed to create output columns"); } static char *gen_text(const char *prefix, const char *sub_prefix, char *buf, size_t sz) { int x = snprintf(buf, sz, "%s-%s-", prefix, sub_prefix); for ( ; (size_t)x < sz - 1; x++) buf[x] = *prefix; buf[x++] = 'x'; buf[x] = '\0'; return buf; } static struct libscols_line * add_line( struct libscols_table *tb, struct libscols_line *parent, const char *prefix) { char buf[BUFSIZ]; struct libscols_line *ln = scols_table_new_line(tb, parent); if (!ln) err(EXIT_FAILURE, "failed to create output line"); if (scols_line_set_data(ln, COL_NAME, gen_text(prefix, "N", buf, 15))) goto fail; if (scols_line_set_data(ln, COL_DESC, gen_text(prefix, "D", buf, 10))) goto fail; if (scols_line_set_data(ln, COL_FOO, gen_text(prefix, "U", buf, 55))) goto fail; if (scols_line_set_data(ln, COL_LIKE, "1")) goto fail; if (scols_line_set_data(ln, COL_TEXT, gen_text(prefix, "T", buf, 50))) goto fail; return ln; fail: scols_unref_table(tb); err(EXIT_FAILURE, "failed to create output line"); } int main(int argc, char *argv[]) { struct libscols_table *tb; struct libscols_line *ln, *xln; setlocale(LC_ALL, ""); /* just to have enable UTF8 chars */ scols_init_debug(0); tb = scols_new_table(); if (!tb) err(EXIT_FAILURE, "failed to create output table"); scols_table_enable_colors(tb, isatty(STDOUT_FILENO)); setup_columns(tb); ln = add_line(tb, NULL, "A"); add_line(tb, ln, "aa"); add_line(tb, ln, "ab"); ln = add_line(tb, NULL, "B"); xln = add_line(tb, ln, "ba"); add_line(tb, xln, "baa"); add_line(tb, xln, "bab"); add_line(tb, ln, "bb"); scols_print_table(tb); scols_unref_table(tb); return EXIT_SUCCESS; }