1*31337658SMarcel Moolenaar /*
2*31337658SMarcel Moolenaar * Copyright (c) 2014, Juniper Networks, Inc.
3*31337658SMarcel Moolenaar * All rights reserved.
4*31337658SMarcel Moolenaar * This SOFTWARE is licensed under the LICENSE provided in the
5*31337658SMarcel Moolenaar * ../Copyright file. By downloading, installing, copying, or otherwise
6*31337658SMarcel Moolenaar * using the SOFTWARE, you agree to be bound by the terms of that
7*31337658SMarcel Moolenaar * LICENSE.
8*31337658SMarcel Moolenaar * Phil Shafer, July 2014
9*31337658SMarcel Moolenaar */
10*31337658SMarcel Moolenaar
11*31337658SMarcel Moolenaar #include <stdio.h>
12*31337658SMarcel Moolenaar #include <stdlib.h>
13*31337658SMarcel Moolenaar #include <string.h>
14*31337658SMarcel Moolenaar
15*31337658SMarcel Moolenaar #include "xo.h"
16*31337658SMarcel Moolenaar
17*31337658SMarcel Moolenaar xo_info_t info[] = {
18*31337658SMarcel Moolenaar { "employee", "object", "Employee data" },
19*31337658SMarcel Moolenaar { "first-name", "string", "First name of employee" },
20*31337658SMarcel Moolenaar { "last-name", "string", "Last name of employee" },
21*31337658SMarcel Moolenaar { "department", "number", "Department number" },
22*31337658SMarcel Moolenaar };
23*31337658SMarcel Moolenaar int info_count = (sizeof(info) / sizeof(info[0]));
24*31337658SMarcel Moolenaar
25*31337658SMarcel Moolenaar int
main(int argc,char ** argv)26*31337658SMarcel Moolenaar main (int argc, char **argv)
27*31337658SMarcel Moolenaar {
28*31337658SMarcel Moolenaar struct employee {
29*31337658SMarcel Moolenaar const char *e_first;
30*31337658SMarcel Moolenaar const char *e_last;
31*31337658SMarcel Moolenaar unsigned e_dept;
32*31337658SMarcel Moolenaar } employees[] = {
33*31337658SMarcel Moolenaar { "Terry", "Jones", 660 },
34*31337658SMarcel Moolenaar { "Leslie", "Patterson", 341 },
35*31337658SMarcel Moolenaar { "Ashley", "Smith", 1440 },
36*31337658SMarcel Moolenaar { NULL, NULL }
37*31337658SMarcel Moolenaar }, *ep = employees;
38*31337658SMarcel Moolenaar
39*31337658SMarcel Moolenaar argc = xo_parse_args(argc, argv);
40*31337658SMarcel Moolenaar if (argc < 0)
41*31337658SMarcel Moolenaar return 1;
42*31337658SMarcel Moolenaar
43*31337658SMarcel Moolenaar xo_set_info(NULL, info, info_count);
44*31337658SMarcel Moolenaar
45*31337658SMarcel Moolenaar xo_set_flags(NULL, XOF_DTRT);
46*31337658SMarcel Moolenaar
47*31337658SMarcel Moolenaar xo_open_container("employees");
48*31337658SMarcel Moolenaar xo_open_list("employee");
49*31337658SMarcel Moolenaar
50*31337658SMarcel Moolenaar for ( ; ep->e_first; ep++) {
51*31337658SMarcel Moolenaar xo_open_instance("employee");
52*31337658SMarcel Moolenaar xo_emit("{:first-name} {:last-name} works in dept #{:department/%u}\n",
53*31337658SMarcel Moolenaar ep->e_first, ep->e_last, ep->e_dept);
54*31337658SMarcel Moolenaar xo_close_instance_d();
55*31337658SMarcel Moolenaar }
56*31337658SMarcel Moolenaar
57*31337658SMarcel Moolenaar xo_close_list_d();
58*31337658SMarcel Moolenaar xo_close_container_d();
59*31337658SMarcel Moolenaar
60*31337658SMarcel Moolenaar xo_finish();
61*31337658SMarcel Moolenaar
62*31337658SMarcel Moolenaar return 0;
63*31337658SMarcel Moolenaar }
64