All pastes #1267292 Raw Edit

Anonymous

public text v1 · immutable
#1267292 ·published 2008-11-26 05:54 UTC
rendered paste body
--- hot-babe.c	2004-12-05 17:59:38.000000000 -0500
+++ hot-babe.c.old	1969-12-31 19:00:00.000000000 -0500
@@ -1,509 +0,0 @@
-/* Hot-babe 
- * Copyright (C) 2002 DindinX <David@dindinx.org>
- * Copyright (C) 2002 Bruno Bellamy.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the artistic License
- *
- * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES
- * OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. See the
- * Artistic License for more details.
- *
- * this code is using some ideas from wmbubble (timecop@japan.co.jp)
- *
- */
-
-/* general includes */
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#ifdef __FreeBSD__
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <sys/types.h>
-#include <sys/sysctl.h>
-#ifndef CPUSTATES                                                              
-#include <sys/dkstat.h>
-#endif
-#endif                                                                         
-
-/* x11 includes */
-#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#include "loader.h"
-
-static int system_cpu(void);
-static void hotbabe_setup_samples(void);
-static void hotbabe_update(void);
-static void create_hotbabe_window(void);
-static void print_usage(void);
-
-/* global variables */
-
-typedef struct
-{
-  /* X11 stuff */
-  GdkWindow *win;        /* main window */
-  HotBabeAnim anim;
-  gint x,y;
-  guchar **pixels;
-  guchar *dest;
-
-  int samples;
-
-  /* CPU percentage stuff.  soon to go away */
-  int loadIndex;
-  u_int64_t *load, *total;
-  guint threshold;
-
-  /* optional stuff */
-  gboolean incremental;
-  gboolean noNice;
-  guint    delay;  
-} HotBabeData;
-
-HotBabeData bm;
-
-#if 0
-/* FIXME New BSD and Solaris code.. to check.
- * doesn't work with Linux (getloadavg return 1.000) */
-static int system_cpu(void)
-{
-  int rc;
-  double loadavg[15];
-  rc=getloadavg(loadavg, 1); 
-  while( rc-- )
-    printf( "load = %f\n", loadavg[rc] );
-  rc=100*loadavg[0];
-  return rc;
-}
-#endif
-
-/* returns current CPU load in percent, 0 to 256 */
-static int system_cpu(void)
-{
-  unsigned int  cpuload;
-  int           i;
-#ifdef __linux__
-  u_int64_t     load, total, oload, ototal;
-  u_int64_t     ab, ac, ad, ae;
-  FILE         *stat;
-#endif
-#ifdef __FreeBSD__
-  long load, total, oload, ototal;
-  long ab, ac, ad, ae;
-  long cp_time[CPUSTATES];
-  size_t len = sizeof(cp_time);
-#endif
-
-#ifdef __linux__
-  stat = fopen("/proc/stat", "r");
-  fscanf(stat, "%*s %Ld %Ld %Ld %Ld", &ab, &ac, &ad, &ae);
-  fclose(stat);
-#endif
-#ifdef __FreeBSD__
-  if (sysctlbyname("kern.cp_time", &cp_time, &len, NULL, 0) < 0)
-    (void)fprintf(stderr, "Cannot get kern.cp_time");
-
-  ab = cp_time[CP_USER];
-  ac = cp_time[CP_NICE];
-  ad = cp_time[CP_SYS];
-  ae = cp_time[CP_IDLE];
-#endif
-
-
-  /* Find out the CPU load */
-  /* user + sys = load
-   * total = total */
-  load = ab + ad;  /* cpu.user + cpu.sys; */
-  if(!bm.noNice) load += ac;
-  total = ab + ac + ad + ae;  /* cpu.total; */
-
-  i = bm.loadIndex;
-  oload = bm.load[i];
-  ototal = bm.total[i];
-
-  bm.load[i] = load;
-  bm.total[i] = total;
-  bm.loadIndex = (i + 1) % bm.samples;
-
-  /*
-   *   Because the load returned from libgtop is a value accumulated
-   *   over time, and not the current load, the current load percentage
-   *   is calculated as the extra amount of work that has been performed
-   *   since the last sample. yah, right, what the fuck does that mean?
-   */
-  if (ototal == 0 || total==ototal)    /* ototal == 0 means that this is the first time we get here */
-    cpuload = 0;
-  else
-    cpuload = (256 * (load - oload)) / (total - ototal);
-
-  return cpuload;
-}
-
-GdkPixmap     *pixmap;
-GdkGC *gc;
-
-/* This is the function that actually creates the display widgets */
-static void create_hotbabe_window(void)
-{
-#define MASK GDK_BUTTON_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK
-  GdkWindowAttr  attr;
-  GdkBitmap     *mask;
-  GdkScreen *defscrn;
-
-  bm.anim.width = gdk_pixbuf_get_width(bm.anim.pixbuf[0]);
-  bm.anim.height = gdk_pixbuf_get_height(bm.anim.pixbuf[0]);
-  defscrn=gdk_screen_get_default();
-
-  attr.width = bm.anim.width;
-  attr.height = bm.anim.height;
-  if( bm.x < 0 ) bm.x += 1 + gdk_screen_get_width(defscrn) - attr.width;
-  if( bm.y < 0 ) bm.y += 1 + gdk_screen_get_height(defscrn) - attr.height;
-  attr.x = bm.x;
-  attr.y = bm.y;
-  attr.title = "hot-babe";
-  attr.event_mask = MASK;
-  attr.wclass = GDK_INPUT_OUTPUT;
-  attr.visual = gdk_visual_get_system();
-  attr.colormap = gdk_colormap_get_system();
-  attr.wmclass_name = "hot-babe";
-  attr.wmclass_class = "hot-babe";
-  attr.window_type = GDK_WINDOW_TOPLEVEL;
-
-  bm.win = gdk_window_new(NULL, &attr,
-      GDK_WA_TITLE | GDK_WA_WMCLASS |
-      GDK_WA_VISUAL | GDK_WA_COLORMAP |
-      GDK_WA_X | GDK_WA_Y);
-  if (!bm.win)
-  {
-    fprintf(stderr, "Cannot make toplevel window\n");
-    exit (-1);
-  }
-  gdk_window_set_decorations(bm.win, 0);
-  gdk_window_set_skip_taskbar_hint(bm.win, TRUE);
-  gdk_window_set_skip_pager_hint(bm.win, TRUE); 
-  gdk_window_set_type_hint(bm.win, GDK_WINDOW_TYPE_HINT_DOCK);
-//  gdk_window_set_keep_below(bm.win, TRUE);
-
-  gdk_pixbuf_render_pixmap_and_mask( bm.anim.pixbuf[bm.anim.samples-1], &pixmap, &mask, 127 );
-
-  gdk_window_shape_combine_mask(bm.win, mask, 0, 0);
-  gdk_pixbuf_render_pixmap_and_mask( bm.anim.pixbuf[0], &pixmap, &mask, 127 );
-  gdk_window_set_back_pixmap(bm.win, pixmap, False);
-
-  gdk_window_show(bm.win);
-
-  gc = gdk_gc_new (pixmap);
-#undef MASK
-}
-
-static void hotbabe_update(void)
-{
-  guint   loadPercentage;
-  static guint   old_percentage = 0;
-  guint   i;
-  guchar *pixels1, *pixels2, *src1, *src2, *dest;
-  static gint    robinet = 0;
-
-  /* Find out the CPU load */
-  loadPercentage = system_cpu();
-
-  if (bm.threshold)
-  {
-    if (loadPercentage < bm.threshold || bm.threshold>255)
-      loadPercentage = 0;
-    else
-      loadPercentage = (loadPercentage-bm.threshold)*256/(256-bm.threshold);
-  }
-
-  robinet +=loadPercentage/50-3;
-
-  robinet = CLAMP(robinet, 0, 256);
-
-  if (bm.incremental)
-    loadPercentage = robinet;
-
-  if (loadPercentage != old_percentage)
-  {
-    gint range = 256  / (bm.anim.samples-1);
-    gint index = loadPercentage/range;
-
-    old_percentage = loadPercentage;
-    if  (index>bm.anim.samples-1) index = bm.anim.samples-1;
-    pixels1 = bm.pixels[index];
-    if (index  == bm.anim.samples-1) pixels2 = bm.pixels[index];
-    else pixels2 = bm.pixels[index+1];
-
-    loadPercentage = loadPercentage % range;
-    dest = bm.dest; src1 = pixels1; src2 = pixels2;
-    for (i=0  ;  i<bm.anim.height*bm.anim.width ;  i++)
-    {
-      guint val, j;
-
-      if (src1[3])
-      {
-        for (j=0;j<3;j++)
-        {
-          val = ((guint)*(src2++))*loadPercentage+((guint)*(src1++))*(range-loadPercentage);
-          *(dest++) = val/range;
-          //*(dest++) = (val >> 6);  // bad hack!
-        }
-        src1++;
-        src2++;
-      } else
-      {
-        src1+=4;src2+=4;dest+=3;
-      }
-    }
-
-    gdk_draw_rgb_image(pixmap, gc, 0, 0, bm.anim.width, bm.anim.height, GDK_RGB_DITHER_NONE,
-        bm.dest, 3 * bm.anim.width);
-    gdk_window_set_back_pixmap(bm.win, pixmap, False);
-    gdk_window_clear(bm.win);
-  }
-}
-
-static void hotbabe_setup_samples(void)
-{
-  int       i;
-  u_int64_t load = 0, total = 0;
-
-  bm.loadIndex = 0;
-  bm.load = malloc(bm.samples * sizeof(u_int64_t));
-  bm.total = malloc(bm.samples * sizeof(u_int64_t));
-  for (i = 0; i < bm.samples;i++)
-  {
-    bm.load[i] = load;
-    bm.total[i] = total;
-  }
-}
-
-static void print_version(void)
-{
-  g_print("hot-babe version " VERSION "\n\n");
-}
-
-static void print_usage(void)
-{
-  g_print("Usage: hot-babe [OPTIONS]\n\n");
-  g_print("OPTIONS are from the following:\n\n");
-  g_print(" -t, --threshold n    use only the first picture before n%%.\n");
-  g_print(" -i, --incremental    incremental (slow) mode.\n");
-  g_print(" -d, --delay  n       update every n millisecondes.\n");
-  g_print(" -h, --help           show this message and exit.\n");
-  g_print(" -N, --noNice         don't count nice time in usage.\n");
-  g_print(" -n, --nice  n        set self-nice to n.\n");
-  g_print("     --dir directory  use images from directory.\n");
-  g_print("     --geometry {+|-}x{+|-}y  position the hot-babe.\n");
-  g_print(" -v, --version        show version and exit.\n");
-}
-
-void parse_geometry( char *arg )
-{
-  char sign[2];
-  guint val[2];
-  int i = 0;
-  
-  i = sscanf( arg, "%c%u%c%u", &sign[0], &val[0], &sign[1], &val[1] );
-  if( i != 4 )
-    return;
-  
-  if( sign[0] == '+' ) bm.x = val[0];
-  if( sign[0] == '-' ) bm.x = -1-val[0];
-  if( sign[1] == '+' ) bm.y = val[1];
-  if( sign[1] == '-' ) bm.y = -1-val[1];
-}
-
-int main(int argc, char **argv)
-{
-  GdkEvent *event;
-
-  gint      i;
-  gchar *dir;
-  char conf[256];
-  FILE *f;
-
-  /* initialize GDK */
-  if (!gdk_init_check(&argc, &argv))
-  {
-    fprintf(stderr,
-        "GDK init failed, bye bye.  Check \"DISPLAY\" variable.\n");
-    exit(-1);
-  }
-  gdk_rgb_init();
-
-  /* zero data structure */
-  memset(&bm, 0, sizeof(bm));
-
-  bm.samples     = 16;
-  bm.incremental = FALSE;
-  bm.delay       = 15000;
-  bm.noNice      = FALSE;
-  bm.x = -1;
-  bm.y = -1;
-
-  dir            = NULL;
-
-
-  snprintf( conf, 256, "%s/.hot-babe/config", g_get_home_dir() );
-  f = fopen( conf, "r" );
-  if( f )
-  {
-    char line[256], *l;
-    guint uval;
-    gint val;
-    char sval[260];
-
-    while( (l=fgets( line, 255, f )) )
-    {
-      while( *l )
-      {
-        if( *l == '\n' || *l == '#' ) *l = 0;
-        l++;
-      }
-      if( !*line ) continue;
-
-      if( sscanf( line, "threshold %u", &uval ) == 1 )
-      {
-        bm.threshold = uval*256/100;
-        bm.threshold = MIN (255, bm.threshold);
-      } else if ( !strcmp(line, "incremental") )
-      {
-        bm.incremental = TRUE;
-      } else if (!strcmp(line, "noNice") )
-      {
-        bm.noNice = TRUE;
-      } else if ( sscanf( line, "nice %d", &val) == 1 )
-      {
-        nice( val );
-      } else if ( sscanf( line, "delay %u", &uval) == 1 )
-      {
-        bm.delay = uval*1000;
-      } else if ( sscanf( line, "dir %s", sval) == 1)
-      {
-        dir = strdup( sval );
-      } else if ( sscanf( line, "geometry %s", sval) == 1)
-      {
-        parse_geometry( sval );
-      }
-    }
-    fclose(f);
-  }
-
-  for (i=1 ; i<argc ; i++)
-  {
-    if (!strcmp(argv[i], "--threshold") || !strcmp(argv[i], "-t"))
-    {
-      i++;
-      if  (i<argc)
-      {
-        bm.threshold = atoi(argv[i])*256/100;
-        bm.threshold = MIN (255, bm.threshold);
-      }        
-    } else if (!strcmp(argv[i], "--version") || !strcmp(argv[i], "-v"))
-    {
-      print_version();
-      exit(0);
-    } else if (!strcmp(argv[i], "--help") || !strcmp(argv[i], "-h"))
-    {
-      print_usage();
-      exit(0);
-    } else if (!strcmp(argv[i], "--incremental") || !strcmp(argv[i], "-i"))
-    {
-      bm.incremental = TRUE;
-    } else if (!strcmp(argv[i], "--noNice") || !strcmp(argv[i], "-N"))
-    {
-      bm.noNice = TRUE;
-    } else if (!strcmp(argv[i], "--nice") || !strcmp(argv[i], "-n"))
-    {
-      i++;
-      if  (i<argc)
-      {
-        nice( atoi(argv[i]) );
-      }
-    } else if (!strcmp(argv[i], "--delay") || !strcmp(argv[i], "-d"))
-    {
-      i++;
-      if  (i<argc)
-      {
-        bm.delay = atoi(argv[i])*1000;
-      }        
-    } else if (!strcmp(argv[i], "--dir"))
-    {
-      i++;
-      if  (i<argc)
-      {
-        dir = argv[i];
-      }        
-    } else if (!strcmp(argv[i], "--geometry"))
-    {
-      i++;
-      if  (i<argc)
-      {
-        parse_geometry( argv[i] );
-      }        
-    }
-  }
-
-  if( dir != NULL ) {
-    char path[256], home[256];
-    snprintf( path, 256, PREFIX "/share/hot-babe/%s", dir );
-    snprintf( home, 256, "%s/.hot-babe/%s", g_get_home_dir(), dir );
-    if( load_anim( &bm.anim, path ) &&
-        load_anim( &bm.anim, home ) &&
-        load_anim( &bm.anim, dir ) ) {
-      fprintf( stderr, "Can't find pictures\n" );
-      return 1;
-    }
-  } else {
-    if( load_anim( &bm.anim, PREFIX "/share/hot-babe/hb01" ) &&
-        load_anim( &bm.anim, "hb01" ) ) {
-      fprintf( stderr, "Can't find pictures\n" );
-      return 1;
-    }
-  }
-  create_hotbabe_window();
-
-  bm.pixels = malloc( sizeof(guchar*) * bm.anim.samples );
-  for( i = 0 ; i < bm.anim.samples ; i++ )
-    bm.pixels[i] = gdk_pixbuf_get_pixels( bm.anim.pixbuf[i] );
-  bm.dest = malloc( bm.anim.width * bm.anim.height * 3 );
-
-  hotbabe_setup_samples();
-
-  while (1)
-  {
-    while (gdk_events_pending())
-    {
-      event = gdk_event_get();
-      if (event)
-      {
-        switch (event->type)
-        {
-          case GDK_DESTROY:
-            gdk_exit(0);
-            exit(0);
-            break;
-          case GDK_BUTTON_PRESS:
-            if (event->button.button == 3)
-            {
-              exit(0);
-              break;
-            }
-            break;
-          default:
-            break;
-        }
-      }
-    }
-    usleep(bm.delay);
-    hotbabe_update();
-  }
-  return 0;
-}
-