Beispiel #1
0
static void drawruntime (const char *upsrunts, const char *lowbatts)
{
    gdImagePtr	    im;
    char	   utiltxt[16];
    int 	   uoutpos, lowbattpos;
    double	   upsrunt;
    double	   lowbatt;
    int step, maxt;

    upsrunt = strtod(upsrunts, NULL);
    lowbatt = strtod(lowbatts, NULL);

    im = InitImage();

    step = (int)(upsrunt + 4) / 5;
    if (step <= 0)
       step = 1;		   /* make sure we have a positive step */
    DrawText(im, 0, step);

    maxt = step * 5;
    uoutpos = 300 - (int)(upsrunt * 300 ) / maxt;
    lowbattpos = 300 - (int)(lowbatt * 300) / maxt;

    gdImageFilledRectangle(im, 50, lowbattpos, 150, 300, red);

    gdImageFilledRectangle(im, 75, uoutpos, 125, 300, black);

    (void) snprintf(utiltxt, sizeof(utiltxt), "%.1f mins", upsrunt);
    gdImageString(im, gdFontLarge, 65, 320, (unsigned char *)utiltxt, black); 
 
    TermImage(im);
}
Beispiel #2
0
static void drawbattcap(const char *battcaps, const char *minbchgs)
{
    gdImagePtr	    im;
    char	   batttxt[16];
    int 	   battpos;
    double	   battcap;
    int 	   minbchgpos;
    double	   minbchg;

    battcap = strtod(battcaps, NULL);
    minbchg = strtod(minbchgs, NULL);

    im = InitImage();

    DrawText(im, 0, 20);

    minbchgpos = (int)(300 - (minbchg * 3));
    gdImageFilledRectangle(im, 50, minbchgpos, 150, 300, red);

    battpos = (int)(300 - (battcap * 3));
    gdImageFilledRectangle(im, 75, battpos, 125, 300, black);

    (void) snprintf(batttxt, sizeof(batttxt), "%.1f %%", battcap);
    gdImageString(im, gdFontLarge, 70, 320, (unsigned char *)batttxt, black);

    TermImage(im);
}
Beispiel #3
0
/*
 * Input Voltage */
static void drawutility (const char *utilitys, const char *translos,
    const char *transhis) 
{
    gdImagePtr	    im;
    char	   utiltxt[16];
    int 	   utilpos, translopos, transhipos;
    double	   utility, translo, transhi;
    int 	   minv, deltav;

    utility = strtod(utilitys, NULL);
    translo = strtod(translos, NULL);
    transhi = strtod(transhis, NULL);

    im = InitImage();

    if (utility > 180) {	      /* Europe 230V */
       minv = 200;
       deltav = 75;
    } else if (utility > 110) {       /* US 110-120 V */
       minv = 90;
       deltav = 50;
    } else if (utility > 95) {	      /* Japan 100V */
       minv = 80;
       deltav = 50;
    } else {			      /* No voltage */
       minv = 0;
       deltav = 50;
    }

    DrawText(im, minv, deltav/5);
    utilpos = (int)(300 - (((utility - minv) / deltav) * 300) );
    translopos = (int)(300 - (((translo - minv) / deltav) * 300) );
    transhipos = (int)(300 - (((transhi - minv) / deltav) * 300) );

    gdImageFilledRectangle(im, 50, 0, 150, transhipos, red);
    gdImageFilledRectangle(im, 50, translopos, 150, 300, red);

    gdImageFilledRectangle (im, 75, utilpos, 125, 300, black);

    (void) snprintf (utiltxt, sizeof(utiltxt), "%.1f VAC", utility);
    gdImageString (im, gdFontLarge, 65, 320, (unsigned char *)utiltxt, black); 

    TermImage(im);
}
Beispiel #4
0
/*
 * Output Voltage
 */
static void drawupsout (const char *upsouts) 
{
    gdImagePtr	    im;
    char	   utiltxt[16];
    int 	   uoutpos;
    double	   upsout;
    int 	   minv, deltav;

    upsout = strtod(upsouts, NULL);

    im = InitImage();

    if (upsout > 180) {
       minv = 200;
       deltav = 75;
    } else if (upsout > 110) {
       minv = 90;
       deltav = 50;
    } else if (upsout > 95) {
       minv = 80;
       deltav = 50;
    } else {
       minv = 0;
       deltav = 50;
    }
    
    DrawText(im, minv, deltav/5);
    uoutpos = (int)(300 - (((upsout - minv) / deltav) * 300) );

    gdImageFilledRectangle(im, 75, uoutpos, 125, 300, black);

    (void) snprintf(utiltxt, sizeof(utiltxt), "%.1f VAC", upsout);
    gdImageString(im, gdFontLarge, 65, 320, (unsigned char *)utiltxt, black); 

    TermImage(im);
}
Beispiel #5
0
static void drawupsload(const char *upsloads) 
{
    gdImagePtr	    im;
    char	   loadtxt[16];
    int 	   loadpos;
    double	   upsload;

    upsload = strtod(upsloads, NULL);

    im = InitImage();

    DrawText(im, 0, 25);

    gdImageFilledRectangle (im, 50, 0, 150, 60, red);
    gdImageFilledRectangle (im, 50, 60, 150, 300, green); 

    loadpos = (int)(300 - ((upsload / 125) * 300));
    gdImageFilledRectangle(im, 75, loadpos, 125, 300, black);

    (void) snprintf(loadtxt, sizeof(loadtxt), "%.1f %%", upsload);
    gdImageString(im, gdFontLarge, 70, 320, (unsigned char *)loadtxt, black);

    TermImage(im);
}
Beispiel #6
0
int
main(int argc, char **argv)
{
    int len;
    char buf[1024 + 128];
#ifdef W3MIMGDISPLAY_SETUID
    uid_t runner_uid = getuid();
    uid_t owner_uid = geteuid();

    /* swap real and effective */
    setreuid(owner_uid, runner_uid);
#endif
    GetOption(argc, argv);
    if (!defined_debug)
	freopen(DEV_NULL_PATH, "w", stderr);

#ifdef W3MIMGDISPLAY_SETUID
    /* 
     * back real and effective
     * run w3mimg_open() in setuid privileges
     */
    setreuid(runner_uid, owner_uid);
#endif
    w_op = w3mimg_open();
#ifdef W3MIMGDISPLAY_SETUID
    /* make sure drop privileges now */
    setreuid(runner_uid, runner_uid);
#endif
    if (w_op == NULL)
	exit(1);
    if (defined_x)
	w_op->offset_x = offset_x;
    if (defined_y)
	w_op->offset_y = offset_y;

    w_op->max_anim = maxAnim;
    w_op->clear_margin = clearMargin;

    if (defined_test) {
	printf("%d %d\n", w_op->width - w_op->offset_x,
	       w_op->height - w_op->offset_y);
	w_op->close(w_op);
	exit(0);
    }

    if (defined_size) {
	if (w_op->init(w_op)) {
	    W3MImage img;
	    int w, h;
	    if (w_op->get_image_size(w_op, &img, defined_size, &w, &h))
		printf("%d %d\n", w, h);
	}
	w_op->close(w_op);
	exit(0);
    }

    w_op->set_background(w_op, background);

    while (fgets(buf, sizeof(buf), stdin) != NULL) {
	if (!(isdigit(buf[0]) && buf[1] == ';')) {
	    fputc('\n', stdout);
	    fflush(stdout);
	    continue;
	}
	len = strlen(buf);
	if (buf[len - 1] == '\n') {
	    buf[--len] = '\0';
	    if (buf[len - 1] == '\r')
		buf[--len] = '\0';
	}
	/*
	 * w3mimg protocol
	 *  0  1  2 ....
	 * +--+--+--+--+ ...... +--+--+
	 * |op|; |args             |\n|
	 * +--+--+--+--+ .......+--+--+
	 *
	 * args is separeted by ';'
	 * op   args
	 *  0;  params          draw image
	 *  1;  params          redraw image
	 *  2;  -none-          terminate drawing
	 *  3;  -none-          sync drawing
	 *  4;  -none-          nop, sync communication
	 *                      response '\n'
	 *  5;  path            get size of image,
	 *                      response "<width> <height>\n"
	 *  6;  params(6)       clear image
	 *  7;  gif		: once
         *  8;  gif		: infinite
	 *
	 * params
	 *      <n>;<x>;<y>;<w>;<h>;<sx>;<sy>;<sw>;<sh>;<path>
	 * params(6)
	 *      <x>;<y>;<w>;<h>
	 * gif
	 *      <n>;<x>;<y>;<w>;<h>;<sx>;<sy>;<sw>;<sh>;<path> //n->0 loop, >0 number of times loop
	 *   
	 */
	switch (buf[0]) {
	case '0':
	    DrawImage(&buf[2], 0);
	    break;
	case '1':
	    DrawImage(&buf[2], 1);
	    break;
	case '2':
	    TermImage();
	    break;
	case '3':
	    w_op->sync(w_op);
	    break;
	case '4':
	    fputs("\n", stdout);
	    fflush(stdout);
	    break;
	case '5':
	    if (w_op->init(w_op)) {
		W3MImage img;
		int w, h;
		if (w_op->get_image_size(w_op, &img, &buf[2], &w, &h)) {
		    fprintf(stdout, "%d %d\n", w, h);
		    fflush(stdout);
		}
		else {
		    fprintf(stdout, "\n");
		    fflush(stdout);
		}
	    }
	    else {
		fprintf(stdout, "\n");
		fflush(stdout);
	    }
	    break;
	case '6':
	    ClearImage(&buf[2]);
	    break;
	case '7':
		{
		printf("single\n");
        	gif_info *gAnimate;
        	gAnimate=malloc(sizeof(gif_info));

		int i;
		if((i=gif_animate(&buf[2],gAnimate,1))) return i;
		break;
		}
	case '8':
		{
        	gif_info *gAnimate;
        	gAnimate=malloc(sizeof(gif_info));

		int i;
		if((i=gif_animate(&buf[2],gAnimate,0))) return i;
		break;
		}
	}
    }
    TermImage();
    w_op->close(w_op);
    exit(0);
}
Beispiel #7
0
static void drawbattvolt(const char *battvolts, const char *nombattvs) 
{
    gdImagePtr	    im;
    char	   batttxt[16];
    int 	   battpos;
    int 	   hipos, lowpos;
    double	   battvolt;
    double	   nombattv;
    double	   hip, lowp;	   /* hi and low red line conditions */
    int 	   minv, maxv, deltav;

    im = InitImage();

    battvolt = strtod(battvolts, NULL);
    nombattv = strtod(nombattvs, NULL);

    /* NOTE, if you tweek minv and maxv, ensure that the difference
     * is evenly divisible by 5 or the scales will be wrong!!!	 
     */
    switch ((int)nombattv) {
       case 12:
	  minv = 3;
	  maxv = 18;
	  hip = 12 + 3; 	   /* high redline -- guess */
	  lowp = 12 - 3;	   /* low redline -- guess */
	  break;
       case 24: 
	  minv = 15;
	  maxv = 30;
	  hip = 24 + 5;
	  lowp = 24 - 5;
	  break;
       case 48:
	  minv = 30;
	  maxv = 60;
	  hip = 48 + 7;
	  lowp = 48 - 7;
	  break;
       default:
	  minv = 0;
	  maxv = (int)(battvolt/10 + 1) * 10;
	  hip = battvolt + 5;
	  lowp = battvolt - 5;
	  break;
    }
    deltav = maxv - minv;

    DrawText(im, minv, (deltav)/5);


    /* Do proper scaling of battery voltage and redline positions */
    battpos = (int)(300 - (((battvolt - minv) / deltav ) * 300));
    hipos = (int)( 300 - (((hip - minv) / deltav) * 300) );
    lowpos = (int)( 300 - (((lowp - minv) / deltav) * 300) );

    gdImageFilledRectangle (im, 50, 0, 150, hipos, red);
    gdImageFilledRectangle (im, 50, lowpos, 150, 300, red);


    gdImageFilledRectangle (im, 75, battpos, 125, 300, black);

    (void) snprintf (batttxt, sizeof(batttxt), "%.1f VDC", battvolt);
    gdImageString(im, gdFontLarge, 70, 320, (unsigned char *)batttxt, black);

    TermImage(im);
}