aboutsummaryrefslogtreecommitdiffstats
path: root/src/vppinfra/format_table.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vppinfra/format_table.h')
-rw-r--r--src/vppinfra/format_table.h118
1 files changed, 118 insertions, 0 deletions
diff --git a/src/vppinfra/format_table.h b/src/vppinfra/format_table.h
new file mode 100644
index 00000000000..4f4a7724b0e
--- /dev/null
+++ b/src/vppinfra/format_table.h
@@ -0,0 +1,118 @@
+/*
+ Copyright (c) 2020 Damjan Marion
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef __format_table_h__
+#define __format_table_h__
+
+typedef enum
+{
+ TTAF_RESET = (1 << 0),
+ TTAF_BOLD = (1 << 1),
+ TTAF_DIM = (1 << 2),
+ TTAF_UNDERLINE = (1 << 3),
+ TTAF_FG_COLOR_SET = (1 << 4),
+ TTAF_BG_COLOR_SET = (1 << 5),
+ TTAF_FG_COLOR_BRIGHT = (1 << 6),
+ TTAF_BG_COLOR_BRIGHT = (1 << 7),
+} table_text_attr_flags_t;
+
+typedef enum
+{
+ TTAC_BLACK = 0,
+ TTAC_RED = 1,
+ TTAC_GREEN = 2,
+ TTAC_YELLOW = 3,
+ TTAC_BLUE = 4,
+ TTAC_MAGENTA = 5,
+ TTAC_CYAN = 6,
+ TTAC_WHITE = 7,
+ TTAC_BRIGHT_BLACK = 8,
+ TTAC_BRIGHT_RED = 9,
+ TTAC_BRIGHT_GREEN = 10,
+ TTAC_BRIGHT_YELLOW = 11,
+ TTAC_BRIGHT_BLUE = 12,
+ TTAC_BRIGHT_MAGENTA = 13,
+ TTAC_BRIGHT_CYAN = 14,
+ TTAC_BRIGHT_WHITE = 15,
+} table_text_attr_color_t;
+
+typedef enum
+{
+ TTAA_DEFAULT = 0,
+ TTAA_LEFT = 1,
+ TTAA_RIGHT = 2,
+ TTAA_CENTER = 3,
+} table_text_attr_align_t;
+
+typedef struct
+{
+ union
+ {
+ struct
+ {
+ table_text_attr_flags_t flags : 16;
+ table_text_attr_color_t fg_color : 4;
+ table_text_attr_color_t bg_color : 4;
+ table_text_attr_align_t align : 4;
+ };
+ u32 as_u32;
+ };
+} table_text_attr_t;
+
+typedef struct
+{
+ table_text_attr_t attr;
+ u8 *text;
+} table_cell_t;
+
+typedef struct
+{
+ u8 no_ansi : 1;
+ u8 *title;
+ table_cell_t **cells;
+ int *row_sizes;
+ int n_header_cols;
+ int n_header_rows;
+ int n_footer_cols;
+ table_text_attr_t default_title;
+ table_text_attr_t default_body;
+ table_text_attr_t default_header_col;
+ table_text_attr_t default_header_row;
+} table_t;
+
+__clib_export format_function_t format_table;
+
+__clib_export void table_format_title (table_t *t, char *fmt, ...);
+__clib_export void table_format_cell (table_t *t, int c, int r, char *fmt,
+ ...);
+__clib_export void table_set_cell_align (table_t *t, int c, int r,
+ table_text_attr_align_t a);
+__clib_export void table_set_cell_fg_color (table_t *t, int c, int r,
+ table_text_attr_color_t v);
+__clib_export void table_set_cell_bg_color (table_t *t, int c, int r,
+ table_text_attr_color_t v);
+__clib_export void table_free (table_t *t);
+__clib_export void table_add_header_col (table_t *t, int n_strings, ...);
+__clib_export void table_add_header_row (table_t *t, int n_strings, ...);
+
+#endif