#include
#include
#include
#include
static int timer ;
void cb_quit ()
{
gtk_timeout_remove (timer );
gtk_main_quit ();
}
float
cal_load (void )
{
FILE * fp ;
static long pre_user, pre_nice, pre_system, pre_idle; //in order to extend easily later, i defined four vars separately
long user, nice, system, idle ;
long d_user, d_nice, d_system, d_idle ;
static long total ;
float scale ;
char buf[1024 ];
if ((fp = fopen ("/proc/stat", "r")) != NULL ){
while (fgets (buf, sizeof(buf), fp )){
if( *buf == 'c' && *(buf+1) == 'p' ) break;
}
fclose (fp );
}
else
return 0.0 ;
sscanf(buf, "cpu %ld %ld %ld %ld", &user, &nice, &system, &idle );
// calculate delta value
d_user = user - pre_user ;
d_nice = nice - pre_nice ;
d_system = system - pre_system ;
d_idle = idle - pre_idle ;
total = d_user + d_nice + d_system + d_idle ;
if (total < 1) total = 1 ;
scale = 1.0 / total ;
pre_user = user ;
pre_nice = nice ;
pre_system = system ;
pre_idle = idle ;
return (d_user + d_nice + d_system) * scale ;
}
gint Repaint (gpointer da )
{
GtkWidget * drawing_area = (GtkWidget *)da ;
GdkDrawable * drawable = drawing_area->window ;
GdkGC *gc_chart, *gc_text ;
GdkColor color ;
static unsigned coory[201 ];
int da_width, da_height ;
int x ;
float load ;
char buf[30 ];
// set chart green
gc_chart = gdk_gc_new (drawing_area->window );
color.red = 0 ;
color.green = 0xffff ;
color.blue = 0 ;
gdk_gc_set_rgb_fg_color(gc_chart, &color );
// set text red
gc_text = gdk_gc_new (drawing_area->window );
color.red = 0xffff ;
color.green = 0 ;
color.blue = 0 ;
gdk_gc_set_rgb_fg_color(gc_text, &color );
// getting size of drawing area
da_width = drawing_area->allocation.width ;
da_height = drawing_area->allocation.height ;
gdk_draw_rectangle (drawable, drawing_area->style->white_gc ,
TRUE ,
0,0 ,
da_width ,
da_height );
// chart cpu load
for (x=0; x<200; x ++)
coory[x] = coory[x+1 ];
load = cal_load ();
coory[x] = (int)(load * da_height );
for(x=0;x<da_width;x ++){
gdk_draw_line (drawable, gc_chart, x, da_height, x, da_height - coory[x+1 ]);
}
// following code for drawing text
sprintf (buf, "Cpu load: %.1f%%", load * 100 );
PangoLayout *layout = gtk_widget_create_pango_layout( da, buf );
PangoFontDescription *fontdesc = pango_font_description_from_string( "Luxi Mono 12" );
pango_layout_set_font_description( layout, fontdesc );
gdk_draw_layout( drawable ,
gc_text ,
5, 5, layout );
pango_font_description_free( fontdesc );
g_object_unref( layout );
g_object_unref( G_OBJECT(gc_chart ) );
g_object_unref( G_OBJECT(gc_text ) );
return TRUE ;
}
int
main(int argc, char *argv [])
{
GtkWidget *window ;
GtkWidget *drawing_area ;
gtk_init (&argc, &argv );
window = gtk_window_new (GTK_WINDOW_TOPLEVEL );
gtk_window_set_title (GTK_WINDOW(window), "Cpu Load" );
drawing_area = gtk_drawing_area_new ();
gtk_container_add (GTK_CONTAINER(window), drawing_area );
gtk_signal_connect(GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC(cb_quit), NULL );
g_signal_connect( drawing_area, "expose_event" ,
G_CALLBACK(Repaint), NULL );
gtk_drawing_area_size (GTK_DRAWING_AREA(drawing_area), 200, 100 );
gtk_widget_show (drawing_area );
gtk_widget_show(window );
timer = gtk_timeout_add (1000, Repaint, (gpointer) drawing_area );
gtk_main ();
return 0 ;
}
#include
#include
#include
static int timer ;
void cb_quit ()
{
gtk_timeout_remove (timer );
gtk_main_quit ();
}
float
cal_load (void )
{
FILE * fp ;
static long pre_user, pre_nice, pre_system, pre_idle; //in order to extend easily later, i defined four vars separately
long user, nice, system, idle ;
long d_user, d_nice, d_system, d_idle ;
static long total ;
float scale ;
char buf[1024 ];
if ((fp = fopen ("/proc/stat", "r")) != NULL ){
while (fgets (buf, sizeof(buf), fp )){
if( *buf == 'c' && *(buf+1) == 'p' ) break;
}
fclose (fp );
}
else
return 0.0 ;
sscanf(buf, "cpu %ld %ld %ld %ld", &user, &nice, &system, &idle );
// calculate delta value
d_user = user - pre_user ;
d_nice = nice - pre_nice ;
d_system = system - pre_system ;
d_idle = idle - pre_idle ;
total = d_user + d_nice + d_system + d_idle ;
if (total < 1) total = 1 ;
scale = 1.0 / total ;
pre_user = user ;
pre_nice = nice ;
pre_system = system ;
pre_idle = idle ;
return (d_user + d_nice + d_system) * scale ;
}
gint Repaint (gpointer da )
{
GtkWidget * drawing_area = (GtkWidget *)da ;
GdkDrawable * drawable = drawing_area->window ;
GdkGC *gc_chart, *gc_text ;
GdkColor color ;
static unsigned coory[201 ];
int da_width, da_height ;
int x ;
float load ;
char buf[30 ];
// set chart green
gc_chart = gdk_gc_new (drawing_area->window );
color.red = 0 ;
color.green = 0xffff ;
color.blue = 0 ;
gdk_gc_set_rgb_fg_color(gc_chart, &color );
// set text red
gc_text = gdk_gc_new (drawing_area->window );
color.red = 0xffff ;
color.green = 0 ;
color.blue = 0 ;
gdk_gc_set_rgb_fg_color(gc_text, &color );
// getting size of drawing area
da_width = drawing_area->allocation.width ;
da_height = drawing_area->allocation.height ;
gdk_draw_rectangle (drawable, drawing_area->style->white_gc ,
TRUE ,
0,0 ,
da_width ,
da_height );
// chart cpu load
for (x=0; x<200; x ++)
coory[x] = coory[x+1 ];
load = cal_load ();
coory[x] = (int)(load * da_height );
for(x=0;x<da_width;x ++){
gdk_draw_line (drawable, gc_chart, x, da_height, x, da_height - coory[x+1 ]);
}
// following code for drawing text
sprintf (buf, "Cpu load: %.1f%%", load * 100 );
PangoLayout *layout = gtk_widget_create_pango_layout( da, buf );
PangoFontDescription *fontdesc = pango_font_description_from_string( "Luxi Mono 12" );
pango_layout_set_font_description( layout, fontdesc );
gdk_draw_layout( drawable ,
gc_text ,
5, 5, layout );
pango_font_description_free( fontdesc );
g_object_unref( layout );
g_object_unref( G_OBJECT(gc_chart ) );
g_object_unref( G_OBJECT(gc_text ) );
return TRUE ;
}
int
main(int argc, char *argv [])
{
GtkWidget *window ;
GtkWidget *drawing_area ;
gtk_init (&argc, &argv );
window = gtk_window_new (GTK_WINDOW_TOPLEVEL );
gtk_window_set_title (GTK_WINDOW(window), "Cpu Load" );
drawing_area = gtk_drawing_area_new ();
gtk_container_add (GTK_CONTAINER(window), drawing_area );
gtk_signal_connect(GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC(cb_quit), NULL );
g_signal_connect( drawing_area, "expose_event" ,
G_CALLBACK(Repaint), NULL );
gtk_drawing_area_size (GTK_DRAWING_AREA(drawing_area), 200, 100 );
gtk_widget_show (drawing_area );
gtk_widget_show(window );
timer = gtk_timeout_add (1000, Repaint, (gpointer) drawing_area );
gtk_main ();
return 0 ;
}