Implemented display of IP address, minor code cleanup

(Old svn revision: 337)
master
Bernhard Walle 2005-02-04 18:12:01 +00:00
parent e71c9f3ddb
commit 65af5a9649
7 changed files with 307 additions and 193 deletions

View File

@ -1,32 +1,25 @@
/* XFce 4 - Netload Plugin /*
* Copyright (c) 2003 Bernhard Walle <bernhard.walle@gmx.de> * Id: $Id: commandline.c,v 1.2 2005/02/04 18:12:01 bwalle Exp $
* -------------------------------------------------------------------------------------------------
* *
* Id: $Id: commandline.c,v 1.1 2003/08/31 12:45:25 bwalle Exp $ * This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; You may only use
* version 2 of the License, you have no option to use any other version.
* *
* This program is free software; you can redistribute it and/or modify * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* it under the terms of the GNU General Public License as published by * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
* the Free Software Foundation; either version 2 of the License, or * the GNU General Public License for more details.
* (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * You should have received a copy of the GNU General Public License along with this program; if
* but WITHOUT ANY WARRANTY; without even the implied warranty of * not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * -------------------------------------------------------------------------------------------------
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
/* /*
* This is just a command-line wrapper for the operating-system specific code in wormulon/. * This is just a command-line wrapper for the operating-system specific code in wormulon/.
* I wrote it because with this I'm able to test on systems with no GUI. Since I'm only running * I wrote it because with this I'm able to test on systems with no GUI. Since I'm only running
* Linux but develop for other Operating systems this is important! * Linux but develop for other Operating systems this is important!
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include <config.h> #include <config.h>
#endif #endif
@ -43,13 +36,16 @@
netdata data; netdata data;
/* ---------------------------------------------------------------------------------------------- */
void sig_end_handler (int sig) void sig_end_handler (int sig)
{ {
close_netload(&data); close_netload(&data);
exit(0); exit(0);
} }
int main (int argc, char* argv[])
/* ---------------------------------------------------------------------------------------------- */
int main(int argc, char* argv[])
{ {
unsigned long in, out, tot; unsigned long in, out, tot;
char* device; char* device;
@ -80,7 +76,8 @@ int main (int argc, char* argv[])
format_with_thousandssep(bufIn, 20, (double)in, 2); format_with_thousandssep(bufIn, 20, (double)in, 2);
format_with_thousandssep(bufOut, 20, (double)in, 2); format_with_thousandssep(bufOut, 20, (double)in, 2);
format_with_thousandssep(bufTot, 20, (double)in, 2); format_with_thousandssep(bufTot, 20, (double)in, 2);
printf("Current netload:\nIN : %s\nOUT: %s\nTOT: %s\n", bufIn, bufOut, bufTot); printf("Current netload:\nIN : %s\nOUT: %s\nTOT: %s\nIP: %s\n",
bufIn, bufOut, bufTot, get_ip_address(&data));
sleep(1); sleep(1);
} }

View File

@ -1,25 +1,21 @@
/* XFce 4 - Netload Plugin /*
* Copyright (c) 2003 Bernhard Walle <bernhard.walle@gmx.de> * Id: $Id: net.c,v 1.7 2005/02/04 18:12:01 bwalle Exp $
* -------------------------------------------------------------------------------------------------
* *
* Id: $Id: net.c,v 1.6 2003/09/13 12:30:49 bwalle Exp $ * This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; You may only use
* version 2 of the License, you have no option to use any other version.
* *
* This program is free software; you can redistribute it and/or modify * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* it under the terms of the GNU General Public License as published by * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
* the Free Software Foundation; either version 2 of the License, or * the GNU General Public License for more details.
* (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * You should have received a copy of the GNU General Public License along with this program; if
* but WITHOUT ANY WARRANTY; without even the implied warranty of * not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * -------------------------------------------------------------------------------------------------
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
/* /*
* This is just a wrapper between the netload-plugin and the wormulon source. * This is just a wrapper between the netload-plugin and the wormulon source.
* Wormulon is a small command-line util which displays the netload. You can find it * Wormulon is a small command-line util which displays the netload. You can find it
@ -29,8 +25,6 @@
* number of operating systems quickly without a library! Without him only * number of operating systems quickly without a library! Without him only
* Linux and FreeBSD (with foreign code from IceWM) would be supported. * Linux and FreeBSD (with foreign code from IceWM) would be supported.
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include <config.h> #include <config.h>
#endif #endif
@ -41,33 +35,37 @@
#include "wormulon.h" #include "wormulon.h"
#include "slurm.h" /* slurm structs */ #include "slurm.h" /* slurm structs */
#include <sys/types.h>
#ifdef __HPUX__ #ifdef __HPUX__
#include "wormulon/hpux.h" # include "wormulon/hpux.h"
#include "wormulon/hpux.c" # include "wormulon/hpux.c"
#elif __APPLE__ #elif __APPLE__
#include "src/macos.h" # include "src/macos.h"
#include "src/macos.c" # include "src/macos.c"
#elif __FreeBSD__ #elif __FreeBSD__
#include "wormulon/freebsd.h" # include "wormulon/freebsd.h"
#include "wormulon/freebsd.c" # include "wormulon/freebsd.c"
#elif __linux__ #elif __linux__
#include "wormulon/linux.h" # include "wormulon/linux.h"
#include "wormulon/linux.c" # include "wormulon/linux.c"
#elif __OpenBSD__ || __MicroBSD__ #elif __OpenBSD__ || __MicroBSD__
#include "wormulon/openbsd.h" # include "wormulon/openbsd.h"
#include "wormulon/openbsd.c" # include "wormulon/openbsd.c"
#elif __NetBSD__ #elif __NetBSD__
#include "wormulon/netbsd.h" # include "wormulon/netbsd.h"
#include "wormulon/netbsd.c" # include "wormulon/netbsd.c"
#elif __Solaris__ #elif __Solaris__
#include "wormulon/solaris.h" # include "wormulon/solaris.h"
#include "wormulon/solaris.c" # include "wormulon/solaris.c"
#else #else
/* should not get here */ /* should not get here */
#error "OS not supported" # error "OS not supported"
#endif #endif
/* ---------------------------------------------------------------------------------------------- */
int init_netload(netdata* data, const char* device) int init_netload(netdata* data, const char* device)
{ {
memset( data, 0, sizeof(netdata) ); memset( data, 0, sizeof(netdata) );
@ -77,11 +75,14 @@ int init_netload(netdata* data, const char* device)
return TRUE; return TRUE;
} }
strncpy( data->ifdata.if_name, device, 9 ); strncpy( data->ifdata.if_name, device, INTERFACE_NAME_LENGTH);
data->ifdata.if_name[9] = '\0'; data->ifdata.if_name[INTERFACE_NAME_LENGTH] = '\0';
init_osspecific( data ); init_osspecific( data );
data->ip_address[0] = 0;
data->ip_update_count = 0;
if (checkinterface(data) != TRUE) if (checkinterface(data) != TRUE)
{ {
data->correct_interface = FALSE; data->correct_interface = FALSE;
@ -103,20 +104,15 @@ int init_netload(netdata* data, const char* device)
} }
/** /* ---------------------------------------------------------------------------------------------- */
* Gets the current netload.
* @param in Will be filled with the "in"-load.
* @param out Will be filled with the "out"-load.
* @param tot Will be filled with the "total"-load.
*/
void get_current_netload(netdata* data, unsigned long *in, unsigned long *out, unsigned long *tot) void get_current_netload(netdata* data, unsigned long *in, unsigned long *out, unsigned long *tot)
{ {
struct timeval curr_time; struct timeval curr_time;
double delta_t; double delta_t;
if( ! data->correct_interface ) if (! data->correct_interface)
{ {
if( in != NULL && out != NULL && tot != NULL ) if (in != NULL && out != NULL && tot != NULL)
{ {
*in = *out = *tot = 0; *in = *out = *tot = 0;
} }
@ -147,7 +143,7 @@ void get_current_netload(netdata* data, unsigned long *in, unsigned long *out, u
data->cur_out = (int)( (data->stats.tx_bytes - data->backup_out) / delta_t + 0.5); data->cur_out = (int)( (data->stats.tx_bytes - data->backup_out) / delta_t + 0.5);
} }
if( in != NULL && out != NULL && tot != NULL ) if (in != NULL && out != NULL && tot != NULL)
{ {
*in = data->cur_in; *in = data->cur_in;
*out = data->cur_out; *out = data->cur_out;
@ -163,6 +159,58 @@ void get_current_netload(netdata* data, unsigned long *in, unsigned long *out, u
data->prev_time.tv_usec = curr_time.tv_usec; data->prev_time.tv_usec = curr_time.tv_usec;
} }
/* ---------------------------------------------------------------------------------------------- */
char* get_name(netdata* data)
{
return data->ifdata.if_name;
}
/* ---------------------------------------------------------------------------------------------- */
char* get_ip_address(netdata* data)
{
int sockfd;
struct ifreq ifr;
struct sockaddr_in *p_sa;
/* use cached value if possible and if the update count is non-zero */
if (data->ip_address && data->ip_update_count > 0)
{
data->ip_update_count--;
return data->ip_address;
}
/* get the value from the operating system */
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("Error in socket");
return NULL;
}
snprintf(ifr.ifr_name, IF_NAMESIZE, data->ifdata.if_name);
if (ioctl(sockfd, SIOCGIFADDR, &ifr) != 0)
{
perror("Error in ictl(sockfd)");
return NULL;
}
p_sa = (struct sockaddr_in*) &ifr.ifr_addr;
if (!inet_ntop(AF_INET, &p_sa->sin_addr, data->ip_address, IP_ADDRESS_LENGTH))
{
perror("Error in inet_ntop");
return NULL;
}
/* now updated */
data->ip_update_count = IP_UPDATE_INTERVAL;
return data->ip_address;
}
/* ---------------------------------------------------------------------------------------------- */
void close_netload(netdata* data) void close_netload(netdata* data)
{ {
/* We need not code here */ /* We need not code here */

View File

@ -1,60 +1,53 @@
/* XFce 4 - Netload Plugin /*
* Copyright (c) 2003 Bernhard Walle <bernhard.walle@gmx.de> * Id: $Id: net.h,v 1.8 2005/02/04 18:12:01 bwalle Exp $
* -------------------------------------------------------------------------------------------------
* *
* Id: $Id: net.h,v 1.7 2003/09/13 12:30:49 bwalle Exp $ * This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; You may only use
* version 2 of the License, you have no option to use any other version.
* *
* This program is free software; you can redistribute it and/or modify * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* it under the terms of the GNU General Public License as published by * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
* the Free Software Foundation; either version 2 of the License, or * the GNU General Public License for more details.
* (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * You should have received a copy of the GNU General Public License along with this program; if
* but WITHOUT ANY WARRANTY; without even the implied warranty of * not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * -------------------------------------------------------------------------------------------------
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifndef NET_H #ifndef NET_H
#define NET_H #define NET_H
/* ----------------------- Some defines here ------------------------------- */
#if defined (__sun__)
#define __Solaris__ 1
#endif
#include "os.h" #include "os.h"
#include "slurm.h" #include "slurm.h"
#define MSGSIZE 1024 #define MSGSIZE 1024
#define IP_UPDATE_INTERVAL 20
#define IP_ADDRESS_LENGTH 64
#define INTERFACE_NAME_LENGTH 9
#ifndef gettext_noop #ifndef gettext_noop
#define gettext_noop(String) String #define gettext_noop(String) String
#endif #endif
/** errorcodes */ /** errorcodes */
typedef enum { typedef enum
UNKNOWN_ERROR, /* 0 */ {
PROC_DEVICE_NOT_FOUND, /* 1 */ UNKNOWN_ERROR,
INTERFACE_NOT_FOUND /* 2 */ PROC_DEVICE_NOT_FOUND,
INTERFACE_NOT_FOUND
} errorcode_t; } errorcode_t;
/* /**
* We need this because we cannot use static variables. Using of static variables allows * We need this because we cannot use static variables. Using of static variables allows
* us not to use several instances of the plugin. * us not to use several instances of the plugin.
* I know that this change makes it a bit incompatible with wormulon, but that's the * I know that this change makes it a bit incompatible with wormulon, but that's the
* price to pay ... * price to pay ...
*/ */
typedef struct typedef struct
{ {
char old_interface[9]; char old_interface[INTERFACE_NAME_LENGTH];
double backup_in; double backup_in;
errorcode_t errorcode; errorcode_t errorcode;
double backup_out; double backup_out;
@ -63,6 +56,8 @@ typedef struct
struct timeval prev_time; struct timeval prev_time;
int correct_interface; /* treated as boolean */ int correct_interface; /* treated as boolean */
IfData ifdata; IfData ifdata;
char ip_address[IP_ADDRESS_LENGTH];
int ip_update_count;
DataStats stats; DataStats stats;
#ifdef __HPUX__ #ifdef __HPUX__
int wait_pcks_counter; int wait_pcks_counter;
@ -111,6 +106,21 @@ int init_netload(netdata* data, const char* device);
*/ */
void get_current_netload(netdata* data, unsigned long *in, unsigned long *out, unsigned long *tot); void get_current_netload(netdata* data, unsigned long *in, unsigned long *out, unsigned long *tot);
/**
* Returns the name of the network interface.
* @param data object
* @return The name. String resides in data and you don't have to free the string.
* On error, returns NULL.
*/
char* get_name(netdata* data);
/**
* Returns the IP address of the network interface
* @param data object
* @return the IP address as string, NULL on error.
*/
char* get_ip_address(netdata* data);
/** /**
* Should be called to do cleanup work. * Should be called to do cleanup work.
*/ */

View File

@ -1,23 +1,20 @@
/* XFce 4 - Netload Plugin /*
* Copyright (c) 2003 Bernhard Walle <bernhard.walle@gmx.de> * Id: $Id: netload.c,v 1.12 2005/02/04 18:12:01 bwalle Exp $
* -------------------------------------------------------------------------------------------------
* *
* Id: $Id: netload.c,v 1.11 2005/01/10 13:43:01 bwalle Exp $ * This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; You may only use
* version 2 of the License, you have no option to use any other version.
* *
* This program is free software; you can redistribute it and/or modify * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* it under the terms of the GNU General Public License as published by * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
* the Free Software Foundation; either version 2 of the License, or * the GNU General Public License for more details.
* (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * You should have received a copy of the GNU General Public License along with this program; if
* but WITHOUT ANY WARRANTY; without even the implied warranty of * not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * -------------------------------------------------------------------------------------------------
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include <config.h> #include <config.h>
#endif #endif
@ -133,7 +130,7 @@ typedef struct
} t_global_monitor; } t_global_monitor;
/* ---------------------------------------------------------------------------------------------- */
static gboolean update_monitors(t_global_monitor *global) static gboolean update_monitors(t_global_monitor *global)
{ {
char buffer[SUM+1][BUFSIZ]; char buffer[SUM+1][BUFSIZ];
@ -188,29 +185,28 @@ static gboolean update_monitors(t_global_monitor *global)
} }
#ifdef DEBUG #ifdef DEBUG
switch( i ) switch (i)
{ {
case IN: case IN:
fprintf( stderr, "input: Max = %lu\n", global->monitor->net_max[i] ); fprintf(stderr, "input: Max = %lu\n", global->monitor->net_max[i]);
break; break;
case OUT: case OUT:
fprintf( stderr, "output: Max = %lu\n", global->monitor->net_max[i] ); fprintf(stderr, "output: Max = %lu\n", global->monitor->net_max[i]);
break; break;
case TOT: case TOT:
fprintf( stderr, "total: Max = %lu\n", global->monitor->net_max[i] ); fprintf(stderr, "total: Max = %lu\n", global->monitor->net_max[i]);
break; break;
} }
#endif /* DEBUG */ #endif /* DEBUG */
temp = (double)display[i] / global->monitor->net_max[i]; temp = (double)display[i] / global->monitor->net_max[i];
if( temp > 1 ) if (temp > 1)
{ {
temp = 1.0; temp = 1.0;
} }
else if( temp < 0 ) else if (temp < 0)
{ {
temp = 0.0; temp = 0.0;
} }
@ -221,22 +217,28 @@ static gboolean update_monitors(t_global_monitor *global)
format_with_thousandssep( buffer[TOT], BUFSIZ, (display[IN]+display[OUT]) / 1024.0, 2 ); format_with_thousandssep( buffer[TOT], BUFSIZ, (display[IN]+display[OUT]) / 1024.0, 2 );
g_snprintf(caption, sizeof(caption), {
_("Average of last %d measures:\n" char* ip = get_ip_address(&(global->monitor->data));
"Incoming: %s kByte/s\nOutgoing: %s kByte/s\nTotal: %s kByte/s"), g_snprintf(caption, sizeof(caption),
HISTSIZE_CALCULATE, buffer[IN], buffer[OUT], buffer[TOT]); _("<< %s >> (%s)\nAverage of last %d measures:\n"
gtk_tooltips_set_tip(tooltips, GTK_WIDGET(global->monitor->ebox), caption, NULL); "Incoming: %s kByte/s\nOutgoing: %s kByte/s\nTotal: %s kByte/s"),
get_name(&(global->monitor->data)), ip ? ip : _("no IP address"),
HISTSIZE_CALCULATE, buffer[IN], buffer[OUT], buffer[TOT]);
gtk_tooltips_set_tip(tooltips, GTK_WIDGET(global->monitor->ebox), caption, NULL);
}
XFCE_PANEL_UNLOCK(); XFCE_PANEL_UNLOCK();
return TRUE; return TRUE;
} }
/* ---------------------------------------------------------------------------------------------- */
static void run_update (t_global_monitor *global) static void run_update (t_global_monitor *global)
{ {
if( global->timeout_id > 0 ) if (global->timeout_id > 0)
{ {
g_source_remove (global->timeout_id); g_source_remove(global->timeout_id);
global->timeout_id = 0; global->timeout_id = 0;
} }
@ -247,6 +249,8 @@ static void run_update (t_global_monitor *global)
} }
} }
/* ---------------------------------------------------------------------------------------------- */
static t_global_monitor * monitor_new(void) static t_global_monitor * monitor_new(void)
{ {
t_global_monitor *global; t_global_monitor *global;
@ -339,6 +343,8 @@ static t_global_monitor * monitor_new(void)
return global; return global;
} }
/* ---------------------------------------------------------------------------------------------- */
static void monitor_set_orientation (Control * ctrl, int orientation) static void monitor_set_orientation (Control * ctrl, int orientation)
{ {
t_global_monitor *global = ctrl->data; t_global_monitor *global = ctrl->data;
@ -432,6 +438,8 @@ static void monitor_set_orientation (Control * ctrl, int orientation)
run_update( global ); run_update( global );
} }
/* ---------------------------------------------------------------------------------------------- */
static gboolean monitor_control_new(Control *ctrl) static gboolean monitor_control_new(Control *ctrl)
{ {
t_global_monitor *global; t_global_monitor *global;
@ -451,6 +459,7 @@ static gboolean monitor_control_new(Control *ctrl)
} }
/* ---------------------------------------------------------------------------------------------- */
static void monitor_free(Control *ctrl) static void monitor_free(Control *ctrl)
{ {
t_global_monitor *global; t_global_monitor *global;
@ -474,6 +483,8 @@ static void monitor_free(Control *ctrl)
close_netload( &(global->monitor->data) ); close_netload( &(global->monitor->data) );
} }
/* ---------------------------------------------------------------------------------------------- */
static void setup_monitor(t_global_monitor *global, gboolean supress_warnings) static void setup_monitor(t_global_monitor *global, gboolean supress_warnings)
{ {
GtkRcStyle *rc; GtkRcStyle *rc;
@ -542,6 +553,8 @@ static void setup_monitor(t_global_monitor *global, gboolean supress_warnings)
} }
/* ---------------------------------------------------------------------------------------------- */
static void monitor_read_config(Control *ctrl, xmlNodePtr node) static void monitor_read_config(Control *ctrl, xmlNodePtr node)
{ {
xmlChar *value; xmlChar *value;
@ -621,6 +634,7 @@ static void monitor_read_config(Control *ctrl, xmlNodePtr node)
} }
/* ---------------------------------------------------------------------------------------------- */
static void monitor_write_config(Control *ctrl, xmlNodePtr parent) static void monitor_write_config(Control *ctrl, xmlNodePtr parent)
{ {
xmlNodePtr root; xmlNodePtr root;
@ -674,6 +688,8 @@ static void monitor_write_config(Control *ctrl, xmlNodePtr parent)
root = xmlNewTextChild(parent, NULL, MONITOR_ROOT, NULL); root = xmlNewTextChild(parent, NULL, MONITOR_ROOT, NULL);
} }
/* ---------------------------------------------------------------------------------------------- */
static void monitor_attach_callback(Control *ctrl, const gchar *signal, GCallback cb, gpointer data) static void monitor_attach_callback(Control *ctrl, const gchar *signal, GCallback cb, gpointer data)
{ {
t_global_monitor *global; t_global_monitor *global;
@ -683,6 +699,7 @@ static void monitor_attach_callback(Control *ctrl, const gchar *signal, GCallbac
} }
/* ---------------------------------------------------------------------------------------------- */
static void monitor_set_size(Control *ctrl, int size) static void monitor_set_size(Control *ctrl, int size)
{ {
/* do the resize */ /* do the resize */
@ -712,6 +729,7 @@ static void monitor_set_size(Control *ctrl, int size)
} }
/* ---------------------------------------------------------------------------------------------- */
static void monitor_apply_options_cb(GtkWidget *button, t_global_monitor *global) static void monitor_apply_options_cb(GtkWidget *button, t_global_monitor *global)
{ {
gint i; gint i;
@ -752,6 +770,7 @@ static void monitor_apply_options_cb(GtkWidget *button, t_global_monitor *global
} }
/* ---------------------------------------------------------------------------------------------- */
static void label_changed(GtkWidget *button, t_global_monitor *global) static void label_changed(GtkWidget *button, t_global_monitor *global)
{ {
if (global->monitor->options.label_text) if (global->monitor->options.label_text)
@ -769,6 +788,7 @@ static void label_changed(GtkWidget *button, t_global_monitor *global)
} }
/* ---------------------------------------------------------------------------------------------- */
static void max_label_changed(GtkWidget *button, t_global_monitor *global) static void max_label_changed(GtkWidget *button, t_global_monitor *global)
{ {
gint i; gint i;
@ -786,6 +806,7 @@ static void max_label_changed(GtkWidget *button, t_global_monitor *global)
} }
/* ---------------------------------------------------------------------------------------------- */
static void network_changed(GtkWidget *button, t_global_monitor *global) static void network_changed(GtkWidget *button, t_global_monitor *global)
{ {
if (global->monitor->options.network_device) if (global->monitor->options.network_device)
@ -803,6 +824,7 @@ static void network_changed(GtkWidget *button, t_global_monitor *global)
} }
/* ---------------------------------------------------------------------------------------------- */
static void label_toggled(GtkWidget *check_button, t_global_monitor *global) static void label_toggled(GtkWidget *check_button, t_global_monitor *global)
{ {
global->monitor->options.use_label = global->monitor->options.use_label =
@ -818,6 +840,8 @@ static void label_toggled(GtkWidget *check_button, t_global_monitor *global)
#endif #endif
} }
/* ---------------------------------------------------------------------------------------------- */
static void max_label_toggled(GtkWidget *check_button, t_global_monitor *global) static void max_label_toggled(GtkWidget *check_button, t_global_monitor *global)
{ {
gint i; gint i;
@ -843,6 +867,7 @@ static void max_label_toggled(GtkWidget *check_button, t_global_monitor *global)
} }
/* ---------------------------------------------------------------------------------------------- */
static gboolean expose_event_cb(GtkWidget *widget, GdkEventExpose *event) static gboolean expose_event_cb(GtkWidget *widget, GdkEventExpose *event)
{ {
if (widget->window) if (widget->window)
@ -862,6 +887,7 @@ static gboolean expose_event_cb(GtkWidget *widget, GdkEventExpose *event)
} }
/* ---------------------------------------------------------------------------------------------- */
static void change_color(GtkWidget *button, t_global_monitor *global, gint type) static void change_color(GtkWidget *button, t_global_monitor *global, gint type)
{ {
GtkWidget *dialog; GtkWidget *dialog;
@ -896,18 +922,21 @@ static void change_color(GtkWidget *button, t_global_monitor *global, gint type)
} }
/* ---------------------------------------------------------------------------------------------- */
static void change_color_in(GtkWidget *button, t_global_monitor *global) static void change_color_in(GtkWidget *button, t_global_monitor *global)
{ {
change_color(button, global, IN); change_color(button, global, IN);
} }
/* ---------------------------------------------------------------------------------------------- */
static void change_color_out(GtkWidget *button, t_global_monitor *global) static void change_color_out(GtkWidget *button, t_global_monitor *global)
{ {
change_color(button, global, OUT); change_color(button, global, OUT);
} }
/* ---------------------------------------------------------------------------------------------- */
static void monitor_create_options(Control *control, GtkContainer *container, GtkWidget *done) static void monitor_create_options(Control *control, GtkContainer *container, GtkWidget *done)
{ {
t_global_monitor *global; t_global_monitor *global;
@ -1148,6 +1177,7 @@ static void monitor_create_options(Control *control, GtkContainer *container, Gt
} }
/* ---------------------------------------------------------------------------------------------- */
G_MODULE_EXPORT void xfce_control_class_init(ControlClass *cc) G_MODULE_EXPORT void xfce_control_class_init(ControlClass *cc)
{ {
xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");

View File

@ -1,13 +1,20 @@
/****************************************************************************** /*
* Id: $Id: os.h,v 1.4 2005/02/04 18:12:01 bwalle Exp $
* -------------------------------------------------------------------------------------------------
* *
* os.h * This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; You may only use
* version 2 of the License, you have no option to use any other version.
* *
* include OS-dependent headers * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
* the GNU General Public License for more details.
* *
****************************************************************************** * You should have received a copy of the GNU General Public License along with this program; if
* This file is from Wormulon. Id: os.h,v 1.3 2003/08/14 10:58:30 hscholz Exp * not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*****************************************************************************/ *
* -------------------------------------------------------------------------------------------------
*/
#ifndef _OS_H #ifndef _OS_H
#define _OS_H #define _OS_H
@ -39,32 +46,32 @@
#include <sys/mib.h> #include <sys/mib.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <net/if.h> #include <net/if.h>
+#elif __APPLE__ /* Mac OS X */ #elif __APPLE__ /* Mac OS X */
+#include <stdio.h> #include <stdio.h>
+#include <stdlib.h> #include <stdlib.h>
+#include <stdarg.h> #include <stdarg.h>
+#include <unistd.h> #include <unistd.h>
+#include <string.h> #include <string.h>
+#include <time.h> #include <time.h>
+#include <ctype.h> #include <ctype.h>
+#include <signal.h> #include <signal.h>
+#include <curses.h> #include <curses.h>
+#include <ifaddrs.h> #include <ifaddrs.h>
+#include <sys/param.h> #include <sys/param.h>
+#include <sys/sysctl.h> #include <sys/sysctl.h>
+#include <sys/wait.h> #include <sys/wait.h>
+#include <sys/stat.h> #include <sys/stat.h>
+#include <sys/ioctl.h> #include <sys/ioctl.h>
+#include <sys/types.h> #include <sys/types.h>
+#include <sys/socket.h> #include <sys/socket.h>
+#include <sys/time.h> #include <sys/time.h>
+#include <netinet/in.h> #include <netinet/in.h>
+#include <net/route.h> #include <net/route.h>
+#include <net/if_dl.h> #include <net/if_dl.h>
+#include <net/if.h> #include <net/if.h>
+#include <net/if_media.h> #include <net/if_media.h>
+#include <net/if_mib.h> #include <net/if_mib.h>
+#include <arpa/inet.h> #include <arpa/inet.h>
#elif __FreeBSD__ /* F R E E B S D */ #elif __FreeBSD__ /* F R E E B S D */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>

View File

@ -1,22 +1,20 @@
/* XFce 4 - Netload Plugin /*
* Copyright (c) 2003 Bernhard Walle <bernhard.walle@gmx.de> * Id: $Id: utils.c,v 1.3 2005/02/04 18:12:01 bwalle Exp $
* -------------------------------------------------------------------------------------------------
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify it under the terms of the
* it under the terms of the GNU General Public License as published by * GNU General Public License as published by the Free Software Foundation; You may only use
* the Free Software Foundation; either version 2 of the License, or * version 2 of the License, you have no option to use any other version.
* (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* but WITHOUT ANY WARRANTY; without even the implied warranty of * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * the GNU General Public License for more details.
* GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License along with this program; if
* along with this program; if not, write to the Free Software * not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
* -------------------------------------------------------------------------------------------------
*/ */
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <limits.h> #include <limits.h>
@ -30,14 +28,15 @@
#define BUFSIZ 512 #define BUFSIZ 512
#endif #endif
/* ---------------------------------------------------------------------------------------------- */
unsigned long min_array( unsigned long array[], int size ) unsigned long min_array( unsigned long array[], int size )
{ {
int i; int i;
unsigned long min = array[0]; unsigned long min = array[0];
for( i = 1; i < size; i++ ) for (i = 1; i < size; i++)
{ {
if( array[i] < min ) if (array[i] < min)
{ {
min = array[i]; min = array[i];
} }
@ -46,22 +45,26 @@ unsigned long min_array( unsigned long array[], int size )
} }
/* ---------------------------------------------------------------------------------------------- */
unsigned long max_array( unsigned long array[], int size ) unsigned long max_array( unsigned long array[], int size )
{ {
int i; int i;
unsigned long max = array[0]; unsigned long max = array[0];
for( i = 1; i < size; i++ ) for (i = 1; i < size; i++)
{ {
if( array[i] > max ) if( array[i] > max )
{ {
max = array[i]; max = array[i];
} }
} }
return max; return max;
} }
char* format_with_thousandssep( char* string, int stringsize, double number, int digits )
/* ---------------------------------------------------------------------------------------------- */
char* format_with_thousandssep(char* string, int stringsize, double number, int digits)
{ {
char* str = string; char* str = string;
char buffer[BUFSIZ], formatstring[BUFSIZ]; char buffer[BUFSIZ], formatstring[BUFSIZ];
@ -73,13 +76,13 @@ char* format_with_thousandssep( char* string, int stringsize, double number, int
/* sensible value for digits */ /* sensible value for digits */
if( digits < 0 || digits >= 10 ) if (digits < 0 || digits >= 10)
{ {
digits = 2; digits = 2;
} }
snprintf( formatstring, BUFSIZ, "%%.%df", digits ); snprintf(formatstring, BUFSIZ, "%%.%df", digits);
snprintf( buffer, BUFSIZ, formatstring, number ); snprintf(buffer, BUFSIZ, formatstring, number);
/* get the number of integer characters */ /* get the number of integer characters */
count = numberOfIntegerChars = ( digits > 0 count = numberOfIntegerChars = ( digits > 0
@ -95,21 +98,22 @@ char* format_with_thousandssep( char* string, int stringsize, double number, int
/* insert the thousands separator */ /* insert the thousands separator */
while( *bufptr != 0 && *bufptr != localeinfo->decimal_point[0] ) while (*bufptr != 0 && *bufptr != localeinfo->decimal_point[0])
{ {
if( count % grouping == 0 && count != numberOfIntegerChars ) if (count % grouping == 0 && count != numberOfIntegerChars)
{ {
for( i = 0; i < strlen( localeinfo->thousands_sep ); i++ ) for (i = 0; i < strlen( localeinfo->thousands_sep ); i++)
{ {
*str++ = localeinfo->thousands_sep[i]; *str++ = localeinfo->thousands_sep[i];
} }
} }
*str++ = *bufptr++; *str++ = *bufptr++;
count--; count--;
} }
/* Copy the rest */ /* Copy the rest */
while( digits > 0 && *bufptr != 0 ) while (digits > 0 && *bufptr != 0)
{ {
*str++ = *bufptr++; *str++ = *bufptr++;
} }
@ -119,3 +123,4 @@ char* format_with_thousandssep( char* string, int stringsize, double number, int
return string; return string;
} }

View File

@ -1,4 +1,21 @@
/* XFce 4 - Netload Plugin
* Copyright (c) 2003 Bernhard Walle <bernhard.walle@gmx.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* -------------------------------------------------------------------------------------------------
*/
#ifndef UTILS_H #ifndef UTILS_H
#define UTILS_H #define UTILS_H