doveadm-print-tab.c revision 80fbf2394fb1071e2bcc50a8c1da1fe876a961a2
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen/* Copyright (c) 2010-2012 Dovecot authors, see the included COPYING file */
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen#include "lib.h"
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen#include "array.h"
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen#include "doveadm-print-private.h"
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen#include <stdio.h>
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainenstruct doveadm_print_tab_context {
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen unsigned int header_idx, header_count;
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen unsigned int header_written:1;
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen};
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainenstatic struct doveadm_print_tab_context ctx;
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainenstatic void
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainendoveadm_print_tab_header(const struct doveadm_print_header *hdr)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen{
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen if (ctx.header_count++ > 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen printf("\t");
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen printf("%s", hdr->title);
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen}
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainenstatic void doveadm_print_tab_print(const char *value)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen{
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen if (!ctx.header_written) {
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen printf("\n");
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen ctx.header_written = TRUE;
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen }
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen if (ctx.header_idx > 0)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen printf("\t");
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen printf("%s", value);
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
505031653de36a8ec45a45e23a42937966327618Timo Sirainen if (++ctx.header_idx == ctx.header_count) {
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen ctx.header_idx = 0;
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen printf("\n");
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen }
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen}
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainenstatic void
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainendoveadm_print_tab_print_stream(const unsigned char *value, size_t size)
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen{
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen if (size == 0) {
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen doveadm_print_tab_print("");
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen return;
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen }
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen if (!ctx.header_written) {
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen printf("\n");
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen ctx.header_written = TRUE;
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen }
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen if (ctx.header_idx > 0)
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen printf("\t");
80fbf2394fb1071e2bcc50a8c1da1fe876a961a2Timo Sirainen fwrite(value, 1, size, stdout);
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen}
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen
09304bdc1e5e416aa343802732a15064f49495ccTimo Sirainenstatic void doveadm_print_tab_flush(void)
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen{
09304bdc1e5e416aa343802732a15064f49495ccTimo Sirainen if (!ctx.header_written) {
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen printf("\n");
09304bdc1e5e416aa343802732a15064f49495ccTimo Sirainen ctx.header_written = TRUE;
09304bdc1e5e416aa343802732a15064f49495ccTimo Sirainen }
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen}
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainenstruct doveadm_print_vfuncs doveadm_print_tab_vfuncs = {
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen "tab",
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen NULL,
09304bdc1e5e416aa343802732a15064f49495ccTimo Sirainen NULL,
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen doveadm_print_tab_header,
09304bdc1e5e416aa343802732a15064f49495ccTimo Sirainen doveadm_print_tab_print,
528bfe84f996046645103de898564ef5bcb5edadTimo Sirainen doveadm_print_tab_print_stream,
09304bdc1e5e416aa343802732a15064f49495ccTimo Sirainen doveadm_print_tab_flush
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen};