1 /* -*- mode: c; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: t -*-
2 * vim: ts=4 sw=4 noet ai cindent syntax=c
4 * Conky, a system monitor, based on torsmo
6 * Any original torsmo code is licensed under the BSD license
8 * All code written since the fork of torsmo is licensed under the GPL
10 * Please see COPYING for details
12 * Copyright (c) 2004, Hannu Saransaari and Lauri Hakkarainen
13 * Copyright (c) 2005-2009 Brenden Matthews, Philip Kovacs, et. al.
15 * All rights reserved.
17 * This program is free software: you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation, either version 3 of the License, or
20 * (at your option) any later version.
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
26 * You should have received a copy of the GNU General Public License
27 * along with this program. If not, see <http://www.gnu.org/licenses/>.
31 #include "text_object.h"
35 char *tz; /* timezone variable */
36 char *fmt; /* time display formatting */
39 void scan_time(struct text_object *obj, const char *arg)
41 obj->data.opaque = strndup(arg ? arg : "%F %T", text_buffer_size);
44 void scan_tztime(struct text_object *obj, const char *arg)
46 char buf1[256], buf2[256], *fmt, *tz;
51 int nArgs = sscanf(arg, "%255s %255[^\n]", buf1, buf2);
61 ts = malloc(sizeof(struct tztime_s));
62 memset(ts, 0, sizeof(struct tztime_s));
63 ts->fmt = strndup(fmt ? fmt : "%F %T", text_buffer_size);
64 ts->tz = tz ? strndup(tz, text_buffer_size) : NULL;
65 obj->data.opaque = ts;
68 void print_time(struct text_object *obj, char *p, int p_max_size)
70 time_t t = time(NULL);
71 struct tm *tm = localtime(&t);
73 setlocale(LC_TIME, "");
74 strftime(p, p_max_size, (char *)obj->data.opaque, tm);
77 void print_utime(struct text_object *obj, char *p, int p_max_size)
79 time_t t = time(NULL);
80 struct tm *tm = gmtime(&t);
82 setlocale(LC_TIME, "");
83 strftime(p, p_max_size, (char *)obj->data.opaque, tm);
86 void print_tztime(struct text_object *obj, char *p, int p_max_size)
91 struct tztime_s *ts = obj->data.opaque;
98 setenv("TZ", ts->tz, 1);
104 setlocale(LC_TIME, "");
105 strftime(p, p_max_size, ts->fmt, tm);
107 setenv("TZ", oldTZ, 1);
112 // Needless to free oldTZ since getenv gives ptr to static data
115 void free_time(struct text_object *obj)
117 if (!obj->data.opaque)
119 free(obj->data.opaque);
120 obj->data.opaque = NULL;
123 void free_tztime(struct text_object *obj)
125 struct tztime_s *ts = obj->data.opaque;
135 free(obj->data.opaque);
136 obj->data.opaque = NULL;