131337658SMarcel Moolenaar /*
231337658SMarcel Moolenaar * Copyright (c) 2014, Juniper Networks, Inc.
331337658SMarcel Moolenaar * All rights reserved.
431337658SMarcel Moolenaar * This SOFTWARE is licensed under the LICENSE provided in the
531337658SMarcel Moolenaar * ../Copyright file. By downloading, installing, copying, or otherwise
631337658SMarcel Moolenaar * using the SOFTWARE, you agree to be bound by the terms of that
731337658SMarcel Moolenaar * LICENSE.
831337658SMarcel Moolenaar * Phil Shafer, July 2014
931337658SMarcel Moolenaar */
1031337658SMarcel Moolenaar
1131337658SMarcel Moolenaar #include <stdio.h>
1231337658SMarcel Moolenaar #include <stdlib.h>
1331337658SMarcel Moolenaar #include <string.h>
1431337658SMarcel Moolenaar
1531337658SMarcel Moolenaar #include "xo.h"
1631337658SMarcel Moolenaar
1731337658SMarcel Moolenaar xo_info_t info[] = {
1831337658SMarcel Moolenaar { "employee", "object", "Employee data" },
1931337658SMarcel Moolenaar { "first-name", "string", "First name of employee" },
2031337658SMarcel Moolenaar { "last-name", "string", "Last name of employee" },
2131337658SMarcel Moolenaar { "department", "number", "Department number" },
2231337658SMarcel Moolenaar { "percent-time", "number", "Percentage of full & part time (%)" },
2331337658SMarcel Moolenaar };
2431337658SMarcel Moolenaar int info_count = (sizeof(info) / sizeof(info[0]));
2531337658SMarcel Moolenaar
2631337658SMarcel Moolenaar int
main(int argc,char ** argv)2731337658SMarcel Moolenaar main (int argc, char **argv)
2831337658SMarcel Moolenaar {
2931337658SMarcel Moolenaar struct employee {
3031337658SMarcel Moolenaar const char *e_first;
3131337658SMarcel Moolenaar const char *e_nic;
3231337658SMarcel Moolenaar const char *e_last;
3331337658SMarcel Moolenaar unsigned e_dept;
3431337658SMarcel Moolenaar unsigned e_percent;
3531337658SMarcel Moolenaar } employees[] = {
3631337658SMarcel Moolenaar { "Jim", "რეგტ", "გთხოვთ ახ", 431, 90 },
3731337658SMarcel Moolenaar { "Terry", "<one", "Οὐχὶ ταὐτὰ παρίσταταί μοι Jones", 660, 90 },
3831337658SMarcel Moolenaar { "Leslie", "Les", "Patterson", 341,60 },
3931337658SMarcel Moolenaar { "Ashley", "Ash", "Meter & Smith", 1440, 40 },
4031337658SMarcel Moolenaar { "0123456789", "0123456789", "012345678901234567890", 1440, 40 },
4131337658SMarcel Moolenaar { "ახლა", "გაიარო", "საერთაშორისო", 123, 90 },
4231337658SMarcel Moolenaar { NULL, NULL }
4331337658SMarcel Moolenaar }, *ep = employees;
4431337658SMarcel Moolenaar int rc;
4531337658SMarcel Moolenaar
4631337658SMarcel Moolenaar argc = xo_parse_args(argc, argv);
4731337658SMarcel Moolenaar if (argc < 0)
4831337658SMarcel Moolenaar return 1;
4931337658SMarcel Moolenaar
5031337658SMarcel Moolenaar xo_set_info(NULL, info, info_count);
5131337658SMarcel Moolenaar xo_set_flags(NULL, XOF_COLUMNS);
5231337658SMarcel Moolenaar
5331337658SMarcel Moolenaar xo_open_container("employees");
5431337658SMarcel Moolenaar
55a0f704ffSMarcel Moolenaar xo_open_list("test");
56a0f704ffSMarcel Moolenaar xo_open_instance("test");
57a0f704ffSMarcel Moolenaar xo_emit("{ek:filename/%s}", NULL);
58a0f704ffSMarcel Moolenaar xo_close_instance("test");
59a0f704ffSMarcel Moolenaar xo_close_list("test");
60a0f704ffSMarcel Moolenaar
6131337658SMarcel Moolenaar rc = xo_emit("Οὐχὶ ταὐτὰ παρίσταταί μοι {:v1/%s}, {:v2/%s}\n",
6231337658SMarcel Moolenaar "γιγνώσκειν", "ὦ ἄνδρες ᾿Αθηναῖοι");
6331337658SMarcel Moolenaar rc = xo_emit("{:columns/%d}\n", rc);
6431337658SMarcel Moolenaar xo_emit("{:columns/%d}\n", rc);
6531337658SMarcel Moolenaar
6631337658SMarcel Moolenaar rc = xo_emit("გთხოვთ {:v1/%s} {:v2/%s}\n",
6731337658SMarcel Moolenaar "ახლავე გაიაროთ რეგისტრაცია",
6831337658SMarcel Moolenaar "Unicode-ის მეათე საერთაშორისო");
6931337658SMarcel Moolenaar xo_emit("{:columns/%d}\n", rc);
7031337658SMarcel Moolenaar
7131337658SMarcel Moolenaar
7231337658SMarcel Moolenaar rc = xo_emit("{T:First Name/%-25s}{T:Last Name/%-14s}"
7331337658SMarcel Moolenaar "{T:/%-12s}{T:Time (%)}\n", "Department");
7431337658SMarcel Moolenaar xo_emit("{:columns/%d}\n", rc);
75*545ddfbeSMarcel Moolenaar
76*545ddfbeSMarcel Moolenaar xo_open_list("employee");
7731337658SMarcel Moolenaar for ( ; ep->e_first; ep++) {
7831337658SMarcel Moolenaar xo_open_instance("employee");
7931337658SMarcel Moolenaar rc = xo_emit("{[:-25}{:first-name/%s} ({:nic-name/\"%s\"}){]:}"
8031337658SMarcel Moolenaar "{:last-name/%-14..14s/%s}"
8131337658SMarcel Moolenaar "{:department/%8u/%u}{:percent-time/%8u/%u}\n",
8231337658SMarcel Moolenaar ep->e_first, ep->e_nic, ep->e_last, ep->e_dept, ep->e_percent);
8331337658SMarcel Moolenaar xo_emit("{:columns/%d}\n", rc);
8431337658SMarcel Moolenaar if (ep->e_percent > 50) {
8531337658SMarcel Moolenaar xo_attr("full-time", "%s", "honest & for true");
8631337658SMarcel Moolenaar xo_emit("{e:benefits/%s}", "full");
8731337658SMarcel Moolenaar }
8831337658SMarcel Moolenaar xo_close_instance("employee");
8931337658SMarcel Moolenaar }
9031337658SMarcel Moolenaar
9131337658SMarcel Moolenaar xo_close_list("employee");
9231337658SMarcel Moolenaar xo_close_container("employees");
9331337658SMarcel Moolenaar
9431337658SMarcel Moolenaar xo_finish();
9531337658SMarcel Moolenaar
9631337658SMarcel Moolenaar return 0;
9731337658SMarcel Moolenaar }
98