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