structs.h

/* This is free software.  See LICENSE for terms.
 * Copyright 2004 - 2015, Patricia Kirk.
 */

#ifndef STRUCTS_H
#define STRUCTS_H

#include <X11/xpm.h>

#include "salmon.h"

struct global {
    int		running;		/* restrict samcon changes */
    int		iconic;			/* start as an icon */
    int		iconized;		/* current iconic state */
    int		withdrawn;		/* for windowmaker */
    int		refresh;		/* interval in seconds to check the data */
    int		xmag;			/* full window size in 64x64 pixel multiples */
    int		daemonize;		/* Run in background */
    int		logbeep;		/* make noise at message logging */
    long	boottime;		/* boot time in seconds */
    int		effectiveuid;		/* May be root */
    int		realuid;		/* Real user id */
    int		settime;		/* Reset wall clock at startup */
    pid_t	ppid;			/* id of parent process */
    pid_t	cpid;			/* id of child process */
    int		updaterequest;		/* Call to Redraw() required. */
    int 	isize;			/* Width and height of icon. */
    int 	psize;			/* Width and height of one panel. */
    int 	msize;			/* Width and height of main window. */
    int		linecount;		/* total number of display lines */
    int		lines[4][2];		/* Line count per panel and line numbers */
    int 	localhost;		/* running on the local host. */
    int 	panel;			/* instrument panel mode. */
    int		split;			/* separate usage by cpu */
    int		ncpu;			/* number of cpu's */
    int		pixmap;			/* use an alternate background pixmap. */
    int		moongraphic;		/* display graphic moon phase */
    int		phasecalc;		/* moon phase calculator */
    time_t	phasetime;		/* time of next/previous quarter */
    int		calendar;		/* calendar function */
    int		volconn;		/* latch left and right volume */
    int		pingsock;		/* The IPPROTO_ICMP ping socket */
    int		timeport;		/* Time service port */
    int		timesock;		/* Time service socket */
    int		timepoll;		/* time client poll rate. */
    int		timelog;		/* write all time activity to salmon.log */
    int		timeserver;		/* this host is the master time keeper */
    char	*timehost;		/* master time keeper name */
    int		ctlport;		/* control port. */
    int		ctlsock;		/* control socket. */
    int		execport;		/* execute port. */
    int		execsock;		/* execute socket. */
    int		execstop;		/* exit at execute call. */
    int		execlog;		/* Log remote execute activity. */
    char	*network;		/* restrict time and remote execute service to this network */
    int		poweroff;		/* shutdown at low power. */
    int		powertime;		/* time in minutes for shutdown command */
    int		powerlog;		/* write power state changes to salmon.log */
    char	*powercmd;		/* command to execute at low power shutdown */
    int		clickoff;		/* shutdown at pointer event */
    int		clicktime;		/* minutes to delay at pointer shutdown */
    int		clicksound;		/* make a noise at pointer shutdown */
    int		thermoff;		/* shutdown at critical over temp */
    int		thermtime;		/* thermal shutdown delay in minutes */
    int		thermlog;		/* write temp zone changes to salmon.log */
    char	*thermcmd;		/* command to execute at thermal shutdown */
    int		stepsock;		/* afterstep socket */
    char	*stepfile;		/* file name of afterstep socket */
    char	*appname;		/* name of app as seen by X windows */
    char	*display;		/* name and display number of X server */
    char	*position;		/* location of full window on screen */
    char	*cfgfile;		/* configuration file to use, global or personal */
    char	*cmdfile;		/* file to use for commands, user spec */
    char	*datadir;		/* graphics and sound file location */
    char	*tempdir;		/* resize file location */
    char	*unzip;			/* pixmap unzip command */
    char	*resize;		/* pixmap resize command */
    char	*tiler;			/* tile repeat command */
    char	*talker;		/* speech synthesizer command */
    char	*audiocmd;		/* command to use to make noise */
    char	*audiodev;		/* device to send noise to */
    char	*mixer;			/* audio volume control command */
    char	*hostname;		/* Localhost name, base name only. */
    char	*ostype;
    char	*osvers;
};

/* pixlist[0] is the background color or pixmap.
 * pixlist[1] is the global foreground color.
 * pixlist[2] is the shutdown warning color.
 * Any additional pixstacks are specific colors
 * for one or more lines.
 */
struct pixstack {
    struct	pixstack *next;
    int			index;
    char		*colorname;
    Pixmap		mask;
    Pixmap		pixmap;
    XpmAttributes	attributes;
};

struct lineopts {
    struct	lineopts *next;
    struct	lineopts *prev;
    int		index;			/* Numerical type. */
    int		panel;			/* Panel number, 1 - 4. */
    int		linenum;		/* Line number, 1 - 6 */
    int		upper;			/* Upper limit for clicks. */
    int		lower;			/* Lower limit for clicks. */
    int		left;			/* Left limit for clicks. */
    int		right;			/* Right limit for clicks. */
    int		color;			/* May be reset to current status. */
    int		color1;			/* Color index on pixstack. */
    int		color2;			/* Color index on pixstack. */
    int		color3;			/* Color index on pixstack. */
    int		sound;			/* Number of first audio file. */
    int		sound1;			/* Number of second audio file. */
    int		warn;			/* Warning temperature or battery level. */
    int		crit;			/* Cricital temperature or battery level. */
    char	*type;			/* Type of information, ie, memfree, device, tzone etc. */
    char	*argument;		/* Type option argument ie. tzone, time format etc. */
    char	*command;		/* Click or time out command to execute. */
    char	*status;		/* Current status. */
    char	*value;			/* Current value. */
    char	*buffer;		/* Temporary manipulation buffer */
    char	*setting;		/* Various line type specific info. */
};

struct pingsent {
    struct	pingsent *next;		/* Pings are removed when returned or at timeout. */
    struct	pingsent *prev;
    struct	lineopts *line;		/* Line this ping is associated with */
    time_t	expire;			/* Time to stop waiting for a return */
    int		sequence;		/* Sequence number of this ping */
    int		address;		/* Address of host */
};

struct data {
    double	memtotal;		/* total memory */
    double	memused;		/* used memory */
    double	memfree;		/* free memory */
    double	swaptotal;		/* total swap space */
    double	swapused;		/* used swap space */
    double	swapfree;		/* free swap space */
    int		swapdev;		/* number of swap devices */
    float	loads[3];		/* one, five and fifteen minute loads */
    float	states[5];		/* total usage split */
    float	**splits;		/* per cpu usage splits */
    int		proc[2];		/* number of running and active processes */
    int		volume[2];		/* left and right audio volume */
    double	share;			/* shared memory */
    double	buffer;			/* buffer memory */
    double	cache;			/* cached memory */
    long	uptime;			/* time in seconds since boot */
    float	phase;			/* moon phase percent */
    int		power;			/* ac line on or time remaining on battery */
    int		maxtherm;		/* last thermal zone (0 - n) */
    int		**zones;		/* thermal zone temperatures */
    int		pixmap;			/* moon phase pixmap */
    long	timeofdata;		/* last resort check for updaterequest */
};

#endif	/* STRUCTS_H */
* * o * *