parent
e71c9f3ddb
commit
65af5a9649
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
||||||
|
{
|
||||||
|
char* ip = get_ip_address(&(global->monitor->data));
|
||||||
g_snprintf(caption, sizeof(caption),
|
g_snprintf(caption, sizeof(caption),
|
||||||
_("Average of last %d measures:\n"
|
_("<< %s >> (%s)\nAverage of last %d measures:\n"
|
||||||
"Incoming: %s kByte/s\nOutgoing: %s kByte/s\nTotal: %s kByte/s"),
|
"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]);
|
HISTSIZE_CALCULATE, buffer[IN], buffer[OUT], buffer[TOT]);
|
||||||
gtk_tooltips_set_tip(tooltips, GTK_WIDGET(global->monitor->ebox), caption, NULL);
|
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");
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue