1277353Smarcel/*
2277353Smarcel * Copyright (c) 2015, Juniper Networks, Inc.
3277353Smarcel * All rights reserved.
4277353Smarcel * This SOFTWARE is licensed under the LICENSE provided in the
5277353Smarcel * ../Copyright file. By downloading, installing, copying, or otherwise
6277353Smarcel * using the SOFTWARE, you agree to be bound by the terms of that
7277353Smarcel * LICENSE.
8277353Smarcel * Phil Shafer, July 2015
9277353Smarcel */
10277353Smarcel
11277353Smarcel#include <stdio.h>
12277353Smarcel#include <stdlib.h>
13277353Smarcel#include <string.h>
14277353Smarcel#include <unistd.h>
15277353Smarcel#include <errno.h>
16277353Smarcel
17277353Smarcel#include "xo.h"
18277353Smarcel
19277353Smarcelint
20277353Smarcelmain (int argc, char **argv)
21277353Smarcel{
22277353Smarcel    struct item {
23277353Smarcel	const char *i_title;
24277353Smarcel	int i_count;
25277353Smarcel    };
26277353Smarcel    struct item list[] = {
27277353Smarcel	{ "gum", 1412 },
28277353Smarcel	{ "rope", 85 },
29277353Smarcel	{ "ladder", 0 },
30277353Smarcel	{ "bolt", 4123 },
31277353Smarcel	{ "water", 17 },
32277353Smarcel	{ NULL, 0 }
33277353Smarcel    };
34277353Smarcel    struct item *ip;
35277353Smarcel    int i;
36277353Smarcel
37277353Smarcel    argc = xo_parse_args(argc, argv);
38277353Smarcel    if (argc < 0)
39277353Smarcel	return 1;
40277353Smarcel
41277353Smarcel    for (argc = 1; argv[argc]; argc++) {
42277353Smarcel	if (strcmp(argv[argc], "xml") == 0)
43277353Smarcel	    xo_set_style(NULL, XO_STYLE_XML);
44277353Smarcel	else if (strcmp(argv[argc], "json") == 0)
45277353Smarcel	    xo_set_style(NULL, XO_STYLE_JSON);
46277353Smarcel	else if (strcmp(argv[argc], "text") == 0)
47277353Smarcel	    xo_set_style(NULL, XO_STYLE_TEXT);
48277353Smarcel	else if (strcmp(argv[argc], "html") == 0)
49277353Smarcel	    xo_set_style(NULL, XO_STYLE_HTML);
50277353Smarcel	else if (strcmp(argv[argc], "pretty") == 0)
51277353Smarcel	    xo_set_flags(NULL, XOF_PRETTY);
52277353Smarcel	else if (strcmp(argv[argc], "xpath") == 0)
53277353Smarcel	    xo_set_flags(NULL, XOF_XPATH);
54277353Smarcel	else if (strcmp(argv[argc], "info") == 0)
55277353Smarcel	    xo_set_flags(NULL, XOF_INFO);
56277353Smarcel        else if (strcmp(argv[argc], "error") == 0) {
57277353Smarcel            close(-1);
58277353Smarcel            xo_err(1, "error detected");
59277353Smarcel        }
60277353Smarcel    }
61277353Smarcel
62277353Smarcel    xo_set_flags(NULL, XOF_KEYS);
63277353Smarcel    xo_set_program("test");
64277353Smarcel
65277353Smarcel    xo_open_container_h(NULL, "top");
66277353Smarcel
67277353Smarcel    xo_open_container("data");
68277353Smarcel    xo_open_container("contents");
69277353Smarcel
70277353Smarcel    xo_emit("{T:Item/%-10s}{T:Count/%12s}\n");
71277353Smarcel
72277353Smarcel    for (ip = list; ip->i_title; ip++) {
73277353Smarcel	xo_emit("Name: {l:name/%-10s/%s}\n", ip->i_title);
74277353Smarcel    }
75277353Smarcel
76277353Smarcel    xo_close_container("contents");
77277353Smarcel
78277353Smarcel    xo_emit("\n\n");
79277353Smarcel    xo_open_container("contents");
80277353Smarcel
81277353Smarcel    xo_emit("{T:Item/%-10s}{T:Count/%12s}\n");
82277353Smarcel
83277353Smarcel    for (ip = list; ip->i_title; ip++) {
84277353Smarcel	xo_emit("Name: {l:item/%-10s/%s}\n", ip->i_title);
85277353Smarcel    }
86277353Smarcel
87277353Smarcel    xo_close_container("contents");
88277353Smarcel
89277353Smarcel    xo_emit("\n\n");
90277353Smarcel
91277353Smarcel    xo_open_container("contents");
92277353Smarcel    xo_emit("{T:Test/%-10s}{T:Three/%12s}\n");
93277353Smarcel
94277353Smarcel    xo_open_list("item");
95277353Smarcel    for (ip = list; ip->i_title; ip++) {
96277353Smarcel	xo_emit("Name: {l:item/%-10s/%s}\n", ip->i_title);
97277353Smarcel    }
98277353Smarcel    xo_emit("{Lwc:/Total:}{:total}\n", "six");
99277353Smarcel
100277353Smarcel    xo_emit("{:one}", "one");
101277353Smarcel    xo_emit("{l:two}", "two");
102277353Smarcel    xo_emit("{:three}", "three");
103277353Smarcel
104277353Smarcel
105277353Smarcel    xo_close_container("contents");
106277353Smarcel
107277353Smarcel    xo_emit("\n\n");
108277353Smarcel
109277353Smarcel    xo_close_container_h(NULL, "top");
110277353Smarcel
111277353Smarcel    xo_finish();
112277353Smarcel
113277353Smarcel    return 0;
114277353Smarcel}
115