Change output format from dzen2 to i3bar
[sysstatus.git] / src / common / common.c
1 #include <assert.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <sys/types.h>
5
6 #include "common.h"
7
8
9 static int linebuf_sane(GlobalData *g)
10 {
11   return (g->linelen < g->linemax);
12 }
13
14
15 void line_clear(GlobalData *g)
16 {
17   assert(g->linemax > 0);
18
19   g->line[0] = '\0';
20   g->linelen = 0;
21   g->firstItemDone = 0;
22
23   line_append_str(g, "[");
24 }
25
26
27 void line_append_strn(GlobalData *g, char *string, size_t len)
28 {
29   assert(linebuf_sane(g));
30
31   if (g->linemax <= g->linelen + len) {
32     /* Buffer full. Tough luck. */
33     return;
34   }
35
36   memcpy(&g->line[g->linelen], string, len);
37   g->linelen += len;
38   g->line[g->linelen] = '\0';
39 }
40
41
42 void line_append_str(GlobalData *g, char *string)
43 {
44   line_append_strn(g, string, strlen(string));
45 }
46
47
48
49 void line_append_item(GlobalData *g, StatusItem *s)
50 {
51   if (g->firstItemDone) {
52     line_append_str(g, ",");
53   }
54   g->firstItemDone = 1;
55
56   line_append_str(g, "{");
57
58   if (s->color) {
59     line_append_str(g, "\"color\":\"");
60     line_append_str(g, s->color);
61     line_append_str(g, "\",");
62   }
63
64   line_append_str(g, "\"full_text\":\"");
65   assert(s->text);
66   line_append_str(g, s->text);
67   line_append_str(g, "\"");
68
69   line_append_str(g, "}");
70 }
71
72
73 void line_print(GlobalData *g)
74 {
75   line_append_str(g, "],");
76   puts(g->line);
77 }
78
79
80 void statusitem_init(StatusItem *s)
81 {
82   s->color = NULL;
83   s->text = NULL;
84 }