[Lcdproc] imon and horizontal progress bar
Otto Kolsi
otto@kolsi.fi
Sat Oct 7 19:24:02 2006
Hi,
Peter Marschall wrote:
> I am also wondering a bit about the cell size you give for the imon
> driver. According to the sources the cell width is fixed to 5 pixels.
I'm a little puzzled with this too. I can also see the fixed 5 pixel
definition in the code, but for some reason when I run LCDd and connect
with telnet and execute hello, LCDd reports back cellwidth 8. But it's
working fine now with the fix below, so I'm not sure if I'm going to dig
this any deeper.
> So, if you speak a little C, then you might want to have a look at the
> imon_hbar() function in the file server/drivers/imon.c.
> It should be modeled loosely after the hbar function in the curses driver.
Well, I think I've nailed it down. In imon.c in imon_hbar() this
statement is flawed:
pixels -= p->cellwidth * pos;
This decrement in every round should be done from the original pixels
value calculated at the beginning of the function, not to decrease from
the already decreased value.
Here's one possible way to fix the for() loop in imon_hbar():
for (pos = 0; pos < len; pos++) {
if (pixels - (p->cellwidth * pos) >= p->cellwidth) {
/* write a "full" block to the screen... */
//drvthis->icon (drvthis, x+pos, y, ICON_BLOCK_FILLED);
imon_chr (drvthis, x+pos, y, '#');
}
else if (pixels - (p->cellwidth * pos) > 0) {
/* write a "partial" block to the screen... */
imon_chr (drvthis, x+pos, y, '-');
break;
}
else {
; // write nothing (not even a space)
}
}
--
Otto