On Mon, Jan 12, 2009 at 09:30:19PM +0100, Michele Sanges wrote:
> This patch for the fbsplash applet, adds the ability to render text
> messages on top of the displayed image.
>
> The sintax for the new option is the following:
> echo write:this is the message to print > fbfifo
>
> By means of the fbsplash.cfg file it's also possible to specify the  
> position, the color and the size of the text displayed.
>
> I also attach a font map file, to use with the -m option if you don't  
> want to compile the applet with the hardcoded fonts.
>
> Oh yes, the patch is the same I have sent three or four times last year
> :-) I hope to be more lucky.

You forgot to mention size(1) figures and/or scripts/bloat-o-meter output
for your patch.

While looking over the current fbsplash, i came up with the attached
patch to shrink it (untested):

$ ./scripts/bloat-o-meter _bb_un.oorig busybox_unstripped
function                                             old     new   delta
fbsplash_main                                        595     985    +390
fb_drawimage                                         493       -    -493
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/0 up/down: 390/-493)         Total: -103 bytes

$ size miscutils/fbsplash.o*
   text    data     bss     dec     hex filename
   2019       0       0    2019     7e3 miscutils/fbsplash.o.oorig
   1857       0       0    1857     741 miscutils/fbsplash.o.new


Can you please have a look at the patch and perhaps test it?

See below for some comments on your patch..

>diff -urP busybox-1.13.2_originale/include/usage.h 
>busybox-1.13.2_fbsplash/include/usage.h
>--- busybox-1.13.2_originale/include/usage.h   2008-11-09 18:28:17.000000000 
>+0100
>+++ busybox-1.13.2_fbsplash/include/usage.h    2009-01-12 16:29:40.000000000 
>+0100
>@@ -128,7 +128,7 @@
>        "bar"
> 
> #define fbsplash_trivial_usage \
>-       "-s IMGFILE [-c] [-d DEV] [-i INIFILE] [-f CMD]"
>+       "-s IMGFILE [-c] [-d DEV] [-i INIFILE] [-f CMD] [-m FONTMAPFILE]"
> #define fbsplash_full_usage "\n\n" \
>        "Options:\n" \
>      "\n      -s      Image" \
>@@ -137,8 +137,10 @@
>      "\n      -i      Config file (var=value):" \
>      "\n                      BAR_LEFT,BAR_TOP,BAR_WIDTH,BAR_HEIGHT" \
>      "\n                      BAR_R,BAR_G,BAR_B" \
>+     "\n                      
>TEXT_LEFT,TEXT_TOP,TEXT_R,TEXT_G,TEXT_B,TEXT_SIZE" \
>      "\n      -f      Control pipe (else exit after drawing image)" \
>-     "\n                      commands: 'NN' (% for progress bar) or 'exit'" \
>+     "\n      -m      Font map file" \
>+     "\n                      commands: 'NN' (% for progress bar), 
>'write:string to print' or 'exit'"
> 
> #define brctl_trivial_usage \

Somebody goofed with the alphabetical ordering in usage.h, it seems.
Can you please have a look if fbsplash's helptext is really in the
correct place here?


>diff -urP busybox-1.13.2_originale/miscutils/Config.in 
>busybox-1.13.2_fbsplash/miscutils/Config.in
>--- busybox-1.13.2_originale/miscutils/Config.in       2008-11-09 
>18:28:17.000000000 +0100
>+++ busybox-1.13.2_fbsplash/miscutils/Config.in        2009-01-12 
>16:32:17.000000000 +0100
>@@ -238,6 +238,34 @@
>           "NN" (ASCII decimal number) - percentage to show on progress bar
>           "exit" - well you guessed it
> 
>+config FBSPLASH_TEXT_RENDERING
>+      bool "text rendering"
>+      default n
>+      depends on FBSPLASH
>+      help
>+        This option adds the ability to print text messages on the
>+        image displayed by the fbsplash applet.
>+        - command for fifo:
>+          "write:string to print" - print the string after the word "write:"
>+
>+choice
>+      prompt "Choose the font map"
>+      depends on FBSPLASH_TEXT_RENDERING
>+      default FONTMAP_HARDCODED
>+
>+config FONTMAP_HARDCODED

there is FBSPLASH missing in that symbol name. Better use
config FBSPLASH_FONTMAP_HARDCODED

>+      bool "hardcoded"
>+      help
>+        The font map is hard-coded to use the default font map.
>+        Adds about 1.6Kb.
>+
>+config FONTMAP_DYNAMICALLY_LOADED

same here.
Index: miscutils/fbsplash.c
===================================================================
--- miscutils/fbsplash.c	(revision 25074)
+++ miscutils/fbsplash.c	(working copy)
@@ -87,7 +87,7 @@ static void fb_open(const char *strfb_de
 			* BYTES_PER_PIXEL /*(G.scr_var.bits_per_pixel / 8)*/ ,
 			PROT_WRITE, MAP_SHARED, fbfd, 0);
 	if (G.addr == MAP_FAILED)
-		bb_perror_msg_and_die("can't mmap %s", strfb_device);
+		bb_perror_msg_and_die("mmap");
 	close(fbfd);
 }
 
@@ -121,7 +121,7 @@ static void fb_drawrectangle(void)
 	// vertical lines
 	ptr1 = (DATA*)(G.addr + (G.nbar_posy * G.scr_var.xres + G.nbar_posx) * BYTES_PER_PIXEL);
 	ptr2 = (DATA*)(G.addr + (G.nbar_posy * G.scr_var.xres + G.nbar_posx + G.nbar_width - 1) * BYTES_PER_PIXEL);
-	cnt = G.nbar_posy + G.nbar_height - 1 - G.nbar_posy;
+	cnt = G.nbar_height - 1 /* HUH?!  G.nbar_posy + G.nbar_height - 1 - G.nbar_posy*/;
 	do {
 		*ptr1 = thispix; ptr1 += G.scr_var.xres;
 		*ptr2 = thispix; ptr2 += G.scr_var.xres;
@@ -216,18 +216,18 @@ static void fb_drawprogressbar(unsigned 
  */
 static void fb_drawimage(void)
 {
-	char head[256];
-	char s[80];
-	FILE *theme_file;
+	RESERVE_CONFIG_BUFFER(head, 256);
+	RESERVE_CONFIG_BUFFER(s, 80);
+	int theme_file;
 	unsigned char *pixline;
 	unsigned i, j, width, height, line_size;
 
 	memset(head, 0, sizeof(head));
-	theme_file = xfopen_stdin(G.image_filename);
+	theme_file = open_or_warn_stdin(G.image_filename);
 
 	// parse ppm header
 	while (1) {
-		if (fgets(s, sizeof(s), theme_file) == NULL)
+		if (safe_read(theme_file, s, sizeof(s)) <= 0)
 			bb_error_msg_and_die("bad PPM file '%s'", G.image_filename);
 
 		if (s[0] == '#')
@@ -257,7 +257,7 @@ static void fb_drawimage(void)
 		unsigned char *pixel = pixline;
 		DATA *src = (DATA *)(G.addr + j * G.scr_fix.line_length);
 
-		if (fread(pixline, 1, line_size, theme_file) != line_size)
+		if (safe_read(theme_file, pixline, line_size) != line_size)
 			bb_error_msg_and_die("bad PPM file '%s'", G.image_filename);
 		for (i = 0; i < width; i++) {
 			unsigned thispix;
@@ -268,8 +268,12 @@ static void fb_drawimage(void)
 			pixel += 3;
 		}
 	}
-	free(pixline);
-	fclose(theme_file);
+	if (ENABLE_FEATURE_CLEAN_UP) {
+		free(pixline);
+		RELEASE_CONFIG_BUFFER(s);
+		RELEASE_CONFIG_BUFFER(head);
+	}
+	close(theme_file);
 }
 
 
@@ -294,7 +298,7 @@ static void init(const char *cfg_filenam
 		unsigned val = xatoi_u(token[1]);
 		int i = index_in_strings(param_names, token[0]);
 		if (i < 0)
-			bb_error_msg_and_die("syntax error: '%s'", token[0]);
+			bb_error_msg_and_die("syntax error: %s", token[0]);
 		if (i >= 0 && i < 7)
 			G.ns[i] = val;
 #if DEBUG
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to