Let swapbar work in shell
[monky] / src / text_object.h
1 /* Conky, a system monitor, based on torsmo
2  *
3  * Any original torsmo code is licensed under the BSD license
4  *
5  * All code written since the fork of torsmo is licensed under the GPL
6  *
7  * Please see COPYING for details
8  *
9  * Copyright (c) 2004, Hannu Saransaari and Lauri Hakkarainen
10  * Copyright (c) 2005-2009 Brenden Matthews, Philip Kovacs, et. al.
11  *      (see AUTHORS)
12  * All rights reserved.
13  *
14  * This program is free software: you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License as published by
16  * the Free Software Foundation, either version 3 of the License, or
17  * (at your option) any later version.
18  *
19  * This program is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  * GNU General Public License for more details.
23  * You should have received a copy of the GNU General Public License
24  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
25  *
26  */
27 #ifndef _TEXT_OBJECT_H
28 #define _TEXT_OBJECT_H
29
30 #include "config.h"             /* for the defines */
31 #include "timed_thread.h"       /* timed_thread */
32
33 #ifdef TCP_PORT_MONITOR
34 #include "tcp-portmon.h"        /* tcp_port_monitor_data */
35 #endif
36
37 #include "mail.h"               /* local_mail_s */
38 #include "fs.h"                 /* struct fs_stat */
39
40 #ifdef NVIDIA
41 #include "nvidia.h"             /* nvidia_s */
42 #endif
43
44 enum text_object_type {
45         OBJ_addr,
46 #if defined(__linux__)
47         OBJ_addrs,
48 #endif /* __linux__ */
49 #ifndef __OpenBSD__
50         OBJ_acpiacadapter,
51         OBJ_adt746xcpu,
52         OBJ_adt746xfan,
53         OBJ_acpifan,
54         OBJ_acpitemp,
55         OBJ_battery,
56         OBJ_battery_time,
57         OBJ_battery_percent,
58 #ifdef X11
59         OBJ_battery_bar,
60 #endif
61         OBJ_battery_short,
62 #endif /* !__OpenBSD__ */
63         OBJ_buffers,
64         OBJ_cached,
65         OBJ_color,
66         OBJ_color0,
67         OBJ_color1,
68         OBJ_color2,
69         OBJ_color3,
70         OBJ_color4,
71         OBJ_color5,
72         OBJ_color6,
73         OBJ_color7,
74         OBJ_color8,
75         OBJ_color9,
76         OBJ_conky_version,
77         OBJ_conky_build_date,
78         OBJ_conky_build_arch,
79         OBJ_font,
80         OBJ_cpu,
81 #ifdef X11
82         OBJ_cpugauge,
83         OBJ_cpubar,
84         OBJ_cpugraph,
85         OBJ_loadgraph,
86 #endif
87         OBJ_diskio,
88         OBJ_diskio_read,
89         OBJ_diskio_write,
90 #ifdef X11
91         OBJ_diskiograph,
92         OBJ_diskiograph_read,
93         OBJ_diskiograph_write,
94 #endif
95         OBJ_downspeed,
96         OBJ_downspeedf,
97 #ifdef X11
98         OBJ_downspeedgraph,
99 #endif
100         OBJ_else,
101         OBJ_endif,
102         OBJ_eval,
103         OBJ_image,
104         OBJ_exec,
105         OBJ_execi,
106         OBJ_texeci,
107         OBJ_execbar,
108 #ifdef X11
109         OBJ_execgauge,
110         OBJ_execgraph,
111         OBJ_execibar,
112         OBJ_execigraph,
113         OBJ_execigauge,
114 #endif
115         OBJ_execp,
116         OBJ_execpi,
117         OBJ_freq,
118         OBJ_freq_g,
119 #ifdef X11
120         OBJ_fs_bar,
121         OBJ_fs_bar_free,
122 #endif
123         OBJ_fs_free,
124         OBJ_fs_free_perc,
125         OBJ_fs_size,
126         OBJ_fs_type,
127         OBJ_fs_used,
128         OBJ_fs_used_perc,
129         OBJ_goto,
130         OBJ_tab,
131         OBJ_hr,
132         OBJ_offset,
133         OBJ_voffset,
134         OBJ_alignr,
135         OBJ_alignc,
136         OBJ_i2c,
137         OBJ_platform,
138         OBJ_hwmon,
139 #if defined(__linux__)
140         OBJ_disk_protect,
141         OBJ_i8k_version,
142         OBJ_i8k_bios,
143         OBJ_i8k_serial,
144         OBJ_i8k_cpu_temp,
145         OBJ_i8k_left_fan_status,
146         OBJ_i8k_right_fan_status,
147         OBJ_i8k_left_fan_rpm,
148         OBJ_i8k_right_fan_rpm,
149         OBJ_i8k_ac_status,
150         OBJ_i8k_buttons_status,
151 #if defined(IBM)
152         OBJ_ibm_fan,
153         OBJ_ibm_temps,
154         OBJ_ibm_volume,
155         OBJ_ibm_brightness,
156         OBJ_smapi,
157 #ifdef X11
158         OBJ_smapi_bat_bar,
159 #endif /* X11 */
160         OBJ_smapi_bat_perc,
161         OBJ_smapi_bat_temp,
162         OBJ_smapi_bat_power,
163         OBJ_if_smapi_bat_installed,
164 #endif /* IBM */
165         /* information from sony_laptop kernel module
166          * /sys/devices/platform/sony-laptop */
167         OBJ_sony_fanspeed,
168         OBJ_if_gw,
169         OBJ_ioscheduler,
170         OBJ_gw_iface,
171         OBJ_gw_ip,
172         OBJ_laptop_mode,
173         OBJ_pb_battery,
174         OBJ_voltage_mv,
175         OBJ_voltage_v,
176         OBJ_wireless_essid,
177         OBJ_wireless_mode,
178         OBJ_wireless_bitrate,
179         OBJ_wireless_ap,
180         OBJ_wireless_link_qual,
181         OBJ_wireless_link_qual_max,
182         OBJ_wireless_link_qual_perc,
183 #ifdef X11
184         OBJ_wireless_link_bar,
185 #endif /* X11 */
186 #endif /* __linux__ */
187 #if defined(__FreeBSD__) || defined(__linux__)
188         OBJ_if_up,
189 #endif
190         OBJ_if_empty,
191         OBJ_if_match,
192         OBJ_if_existing,
193         OBJ_if_mounted,
194         OBJ_if_running,
195         OBJ_if_updatenr,
196         OBJ_top,
197         OBJ_top_mem,
198         OBJ_top_time,
199         OBJ_tail,
200         OBJ_head,
201         OBJ_lines,
202         OBJ_words,
203         OBJ_kernel,
204         OBJ_loadavg,
205         OBJ_machine,
206         OBJ_mails,
207         OBJ_new_mails,
208         OBJ_seen_mails,
209         OBJ_unseen_mails,
210         OBJ_flagged_mails,
211         OBJ_unflagged_mails,
212         OBJ_forwarded_mails,
213         OBJ_unforwarded_mails,
214         OBJ_replied_mails,
215         OBJ_unreplied_mails,
216         OBJ_draft_mails,
217         OBJ_trashed_mails,
218         OBJ_mboxscan,
219         OBJ_mem,
220         OBJ_memeasyfree,
221         OBJ_memfree,
222 #ifdef X11
223         OBJ_memgauge,
224         OBJ_memgraph,
225 #endif /* X11 */
226         OBJ_membar,
227         OBJ_memmax,
228         OBJ_memperc,
229         OBJ_mixer,
230         OBJ_mixerl,
231         OBJ_mixerr,
232 #ifdef X11
233         OBJ_mixerbar,
234         OBJ_mixerlbar,
235         OBJ_mixerrbar,
236 #endif /* X11 */
237         OBJ_if_mixer_mute,
238 #ifdef X11
239         OBJ_monitor,
240         OBJ_monitor_number,
241 #endif /* X11 */
242         OBJ_nameserver,
243         OBJ_nodename,
244         OBJ_nvidia,
245         OBJ_pre_exec,
246         OBJ_processes,
247         OBJ_running_processes,
248         OBJ_shadecolor,
249         OBJ_outlinecolor,
250         OBJ_stippled_hr,
251         OBJ_swap,
252         OBJ_swapbar,
253         OBJ_swapmax,
254         OBJ_swapperc,
255         OBJ_sysname,
256         OBJ_text,
257         OBJ_time,
258         OBJ_utime,
259         OBJ_tztime,
260         OBJ_totaldown,
261         OBJ_totalup,
262         OBJ_updates,
263         OBJ_upspeed,
264         OBJ_upspeedf,
265 #ifdef X11
266         OBJ_upspeedgraph,
267 #endif /* X11 */
268         OBJ_uptime,
269         OBJ_uptime_short,
270         OBJ_user_names,
271         OBJ_user_terms,
272         OBJ_user_times,
273         OBJ_user_number,
274         OBJ_imap_messages,
275         OBJ_imap_unseen,
276         OBJ_pop3_unseen,
277         OBJ_pop3_used,
278 #if (defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
279                 || defined(__OpenBSD__)) && (defined(i386) || defined(__i386__))
280         OBJ_apm_adapter,
281         OBJ_apm_battery_time,
282         OBJ_apm_battery_life,
283 #endif /* __FreeBSD__ __OpenBSD__ */
284 #ifdef __OpenBSD__
285         OBJ_obsd_sensors_temp,
286         OBJ_obsd_sensors_fan,
287         OBJ_obsd_sensors_volt,
288         OBJ_obsd_vendor,
289         OBJ_obsd_product,
290 #endif /* __OpenBSD__ */
291 #ifdef MPD
292         OBJ_mpd_title,
293         OBJ_mpd_artist,
294         OBJ_mpd_album,
295         OBJ_mpd_random,
296         OBJ_mpd_repeat,
297         OBJ_mpd_vol,
298         OBJ_mpd_bitrate,
299         OBJ_mpd_status,
300 #ifdef X11
301         OBJ_mpd_bar,
302 #endif
303         OBJ_mpd_elapsed,
304         OBJ_mpd_length,
305         OBJ_mpd_track,
306         OBJ_mpd_name,
307         OBJ_mpd_file,
308         OBJ_mpd_percent,
309         OBJ_mpd_smart,
310         OBJ_if_mpd_playing,
311 #endif
312 #ifdef MOC
313         OBJ_moc_state,
314         OBJ_moc_file,
315         OBJ_moc_title,
316         OBJ_moc_artist,
317         OBJ_moc_song,
318         OBJ_moc_album,
319         OBJ_moc_totaltime,
320         OBJ_moc_timeleft,
321         OBJ_moc_curtime,
322         OBJ_moc_bitrate,
323         OBJ_moc_rate,
324 #endif
325 #ifdef XMMS2
326         OBJ_xmms2_artist,
327         OBJ_xmms2_album,
328         OBJ_xmms2_title,
329         OBJ_xmms2_genre,
330         OBJ_xmms2_comment,
331         OBJ_xmms2_url,
332         OBJ_xmms2_date,
333         OBJ_xmms2_tracknr,
334         OBJ_xmms2_bitrate,
335         OBJ_xmms2_id,
336         OBJ_xmms2_duration,
337         OBJ_xmms2_elapsed,
338         OBJ_xmms2_size,
339         OBJ_xmms2_percent,
340         OBJ_xmms2_status,
341 #ifdef X11
342         OBJ_xmms2_bar,
343 #endif
344         OBJ_xmms2_smart,
345         OBJ_xmms2_playlist,
346         OBJ_xmms2_timesplayed,
347         OBJ_if_xmms2_connected,
348 #endif
349 #ifdef AUDACIOUS
350         OBJ_audacious_status,
351         OBJ_audacious_title,
352         OBJ_audacious_length,
353         OBJ_audacious_length_seconds,
354         OBJ_audacious_position,
355         OBJ_audacious_position_seconds,
356         OBJ_audacious_bitrate,
357         OBJ_audacious_frequency,
358         OBJ_audacious_channels,
359         OBJ_audacious_filename,
360         OBJ_audacious_playlist_length,
361         OBJ_audacious_playlist_position,
362         OBJ_audacious_main_volume,
363 #ifdef X11
364         OBJ_audacious_bar,
365 #endif
366 #endif
367 #ifdef BMPX
368         OBJ_bmpx_title,
369         OBJ_bmpx_artist,
370         OBJ_bmpx_album,
371         OBJ_bmpx_track,
372         OBJ_bmpx_uri,
373         OBJ_bmpx_bitrate,
374 #endif
375 #ifdef EVE
376         OBJ_eve,
377 #endif
378 #ifdef RSS
379         OBJ_rss,
380 #endif
381 #ifdef HAVE_LUA
382         OBJ_lua,
383         OBJ_lua_parse,
384         OBJ_lua_read_parse,
385 #ifdef X11
386         OBJ_lua_bar,
387         OBJ_lua_graph,
388         OBJ_lua_gauge,
389 #endif /* X11 */
390 #endif /* HAVE_LUA */
391 #ifdef TCP_PORT_MONITOR
392         OBJ_tcp_portmon,
393 #endif
394 #ifdef HAVE_ICONV
395         OBJ_iconv_start,
396         OBJ_iconv_stop,
397 #endif
398 #ifdef HDDTEMP
399         OBJ_hddtemp,
400 #endif
401         OBJ_scroll,
402         OBJ_combine,
403         OBJ_entropy_avail,
404         OBJ_entropy_poolsize,
405 #ifdef X11
406         OBJ_entropy_bar,
407 #endif
408 #ifdef APCUPSD
409         OBJ_apcupsd,
410         OBJ_apcupsd_name,
411         OBJ_apcupsd_model,
412         OBJ_apcupsd_upsmode,
413         OBJ_apcupsd_cable,
414         OBJ_apcupsd_status,
415         OBJ_apcupsd_linev,
416         OBJ_apcupsd_load,
417 #ifdef X11
418         OBJ_apcupsd_loadbar,
419         OBJ_apcupsd_loadgraph,
420         OBJ_apcupsd_loadgauge,
421 #endif
422         OBJ_apcupsd_charge,
423         OBJ_apcupsd_timeleft,
424         OBJ_apcupsd_temp,
425         OBJ_apcupsd_lastxfer,
426 #endif
427 };
428
429 struct text_object {
430         struct text_object *next, *prev;        /* doubly linked list of text objects */
431         struct text_object *sub;                /* for objects parsing text into objects */
432         union {
433                 char *s;                /* some string */
434                 int i;                  /* some integer */
435                 long l;                 /* some other integer */
436                 unsigned int sensor;
437                 struct net_stat *net;
438                 struct fs_stat *fs;
439                 struct diskio_stat *diskio;
440                 unsigned char loadavg[3];
441                 unsigned int cpu_index;
442                 struct mail_s *mail;
443
444                 struct {
445                         char *args;
446                         char *output;
447                 } mboxscan;
448
449                 struct {
450                         char *tz;       /* timezone variable */
451                         char *fmt;      /* time display formatting */
452                 } tztime;
453
454 #ifdef X11
455                 struct {
456                         struct fs_stat *fs;
457                         int w, h;
458                 } fsbar;                /* 3 */
459
460                 struct {
461                         int l;
462                         int w, h;
463                 } mixerbar;             /* 3 */
464 #endif
465
466                 struct {
467                         int fd;
468                         int arg;
469                         char devtype[256];
470                         char type[64];
471                         float factor, offset;
472                 } sysfs;
473
474                 struct {
475                         struct text_object *next;
476                         char *s;
477                         int i;
478                         char *str;
479                 } ifblock;
480
481                 struct {
482                         int num;
483                         int type;
484                         int was_parsed;
485                         char *s;
486                 } top;
487
488                 struct {
489                         int wantedlines;
490                         int readlines;
491                         char *logfile;
492                         double last_update;
493                         float interval;
494                         char *buffer;
495                         /* If not -1, a file descriptor to read from when
496                          * logfile is a FIFO. */
497                         int fd;
498                 } tail;
499
500                 struct {
501                         double last_update;
502                         float interval;
503                         char *cmd;
504                         char *buffer;
505                         double data;
506                 } execi;                /* 5 */
507
508                 struct {
509                         float interval;
510                         char *cmd;
511                         char *buffer;
512                         double data;
513                         timed_thread *p_timed_thread;
514                 } texeci;
515
516                 struct {
517                         int a, b;
518                 } pair;                 /* 2 */
519 #ifdef TCP_PORT_MONITOR
520                 struct tcp_port_monitor_data tcp_port_monitor;
521 #endif
522 #ifdef HDDTEMP
523                 struct {
524                         char *addr;
525                         int port;
526                         char *dev;
527                         double update_time;
528                         char *temp;
529                 } hddtemp;              /* 2 */
530 #endif
531 #ifdef EVE
532                 struct {
533                         char *apikey;
534                         char *charid;
535                         char *userid;
536                 } eve;
537 #endif
538 #ifdef RSS
539                 struct {
540                         char *uri;
541                         char *action;
542                         int act_par;
543                         int delay;
544                         unsigned int nrspaces;
545                 } rss;
546 #endif
547                 struct {
548                         char *text;
549                         unsigned int show;
550                         unsigned int step;
551                         unsigned int start;
552                 } scroll;
553
554                 struct {
555                         char *left;
556                         char *seperation;
557                         char *right;
558                 } combine;
559
560                 struct local_mail_s local_mail;
561 #ifdef NVIDIA
562                 struct nvidia_s nvidia;
563 #endif /* NVIDIA */
564
565         } data;
566         int type;
567         int a, b;
568         long line;
569         unsigned int c, d, e;
570         float f;
571         char char_a, char_b;
572 };
573
574 /* text object list helpers */
575 int append_object(struct text_object *root, struct text_object *obj);
576
577 /* ifblock helpers
578  *
579  * Opaque is a pointer to the address of the ifblock stack's top object.
580  * Calling clients should pass the address of a defined void pointer which
581  * was initialised to NULL (empty stack).
582  * */
583 int obj_be_ifblock_if(void **opaque, struct text_object *);
584 int obj_be_ifblock_else(void **opaque, struct text_object *);
585 int obj_be_ifblock_endif(void **opaque, struct text_object *);
586 int ifblock_stack_empty(void **opaque);
587
588 #endif /* _TEXT_OBJECT_H */