Bernhard Reutner-Fischer ha scritto:
On Wed, Sep 24, 2008 at 11:21:49PM +0200, Michele Sanges wrote:

please fix that typo:

s/dinamically/dynamically/g

+#if ENABLE_FONTMAP_DINAMICALLY_LOADED

Done.

diff -urP /tmp/acroread_0_0/busybox-1.12.0/miscutils/fbsplash.cfg 
busybox-1.12.0/miscutils/fbsplash.cfg
--- /tmp/acroread_0_0/busybox-1.12.0/miscutils/fbsplash.cfg     2008-08-06 
00:56:08.000000000 +0200
+++ busybox-1.12.0/miscutils/fbsplash.cfg       2008-09-21 15:35:41.000000000 
+0200

wouldn't it be better to move this .cfg into examples/ ?

Moved.

Do you think you can create a directory 'examples/fbsplash' and put in it the .cfg file and the 'fbsplash_fontmap' binary file, sent in my previous email?

Thanks. Regards.

--
Michele Sanges


diff -urP /tmp/acroread_0_0/busybox-1.12.0/examples/fbsplash.cfg 
busybox-1.12.0/examples/fbsplash.cfg
--- /tmp/acroread_0_0/busybox-1.12.0/examples/fbsplash.cfg      1970-01-01 
01:00:00.000000000 +0100
+++ busybox-1.12.0/examples/fbsplash.cfg        2008-09-21 15:35:41.000000000 
+0200
@@ -0,0 +1,19 @@
+# progress bar position
+BAR_LEFT=170
+BAR_TOP=300
+BAR_WIDTH=300
+BAR_HEIGHT=20
+# progress bar color
+BAR_R=80
+BAR_G=80
+BAR_B=130
+# the below settings are active only if you enable the option 
FBSPLASH_TEXT_RENDERING
+# text position
+TEXT_LEFT=100
+TEXT_TOP=350
+# text color
+TEXT_R=80
+TEXT_G=80
+TEXT_B=130
+# text size (1 to 4)
+TEXT_SIZE=2
diff -urP /tmp/acroread_0_0/busybox-1.12.0/include/usage.h 
busybox-1.12.0/include/usage.h
--- /tmp/acroread_0_0/busybox-1.12.0/include/usage.h    2008-08-20 
00:05:31.000000000 +0200
+++ busybox-1.12.0/include/usage.h      2008-09-21 23:58:08.000000000 +0200
@@ -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 \
        "COMMAND [BRIDGE [INTERFACE]]"
diff -urP /tmp/acroread_0_0/busybox-1.12.0/miscutils/Config.in 
busybox-1.12.0/miscutils/Config.in
--- /tmp/acroread_0_0/busybox-1.12.0/miscutils/Config.in        2008-08-06 
00:56:08.000000000 +0200
+++ busybox-1.12.0/miscutils/Config.in  2008-09-25 16:59:55.000000000 +0200
@@ -223,6 +223,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
+       bool "hardcoded"
+       help
+         The font map is hard-coded to use the default font map.
+         Adds about 1.6Kb.
+
+config FONTMAP_DYNAMICALLY_LOADED
+       bool "dynamically loaded"
+       help
+         The font map is dynamically loaded from a file.
+         Adds about 700 byte.
+endchoice
+
 config INOTIFYD
        bool "inotifyd"
        default n
diff -urP /tmp/acroread_0_0/busybox-1.12.0/miscutils/fbsplash.c 
busybox-1.12.0/miscutils/fbsplash.c
--- /tmp/acroread_0_0/busybox-1.12.0/miscutils/fbsplash.c       2008-08-06 
00:56:08.000000000 +0200
+++ busybox-1.12.0/miscutils/fbsplash.c 2008-09-25 17:23:15.000000000 +0200
@@ -1,7 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * Copyright (C) 2008 Michele Sanges <[EMAIL PROTECTED]>,
- * <[EMAIL PROTECTED]>
+ * Copyright (C) 2008 Michele Sanges <[EMAIL PROTECTED]>
  *
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  *
@@ -14,11 +13,13 @@
  *      -s path_to_image_file (can be "-" for stdin)
  *      -i path_to_cfg_file
  *      -f path_to_fifo (can be "-" for stdin)
+ *      -m font map file
  * - if you want to run it only in presence of a kernel parameter
  *   (for example fbsplash=on), use:
  *   grep -q "fbsplash=on" </proc/cmdline && setsid fbsplash [params]
  * - commands for fifo:
  *   "NN" (ASCII decimal number) - percentage to show on progress bar.
+ *   "write:string to print" - print the string after the word "write:"
  *   "exit" (or just close fifo) - well you guessed it.
  */
 
@@ -38,7 +39,7 @@
        FILE *logfile_fd;       // log file
 #endif
        unsigned char *addr;    // pointer to framebuffer memory
-       unsigned ns[7];         // n-parameters
+       unsigned ns[13];        // n-parameters
        const char *image_filename;
        struct fb_var_screeninfo scr_var;
        struct fb_fix_screeninfo scr_fix;
@@ -55,6 +56,12 @@
 #define nbar_colr      ns[4]   // progress bar color red component
 #define nbar_colg      ns[5]   // progress bar color green component
 #define nbar_colb      ns[6]   // progress bar color blue component
+#define text_posx      ns[7]   // text horizontal position
+#define text_posy      ns[8]   // text vertical position
+#define text_colr      ns[9]   // text color red component
+#define text_colg      ns[10]  // text color green component
+#define text_colb      ns[11]  // text color blue component
+#define text_size      ns[12]  // text size (1 to 4)
 
 #if DEBUG
 #define DEBUG_MESSAGE(strMessage, args...) \
@@ -66,6 +73,206 @@
 #define DEBUG_MESSAGE(...) ((void)0)
 #endif
 
+#if ENABLE_FBSPLASH_TEXT_RENDERING
+
+#if ENABLE_FONTMAP_HARDCODED
+static char fontmap[95][12] = {
+ //space (32) 
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
+ // ! (33) 
+{0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x80,0x00,0x00,0x00,0x00},
+ //" (34) 
+{0x00,0xA0,0xA0,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
+ //# (35) 
+{0x00,0x24,0x24,0x7E,0x28,0xFC,0x48,0x48,0x00,0x00,0x00,0x00},
+ //$ (36) 
+{0x00,0x20,0x78,0xA0,0x60,0x30,0x28,0xF0,0x20,0x20,0x00,0x00},
+ //% (37) 
+{0x00,0x64,0x98,0x98,0x7E,0x19,0x19,0x26,0x00,0x00,0x00,0x00},
+ //& (38) 
+{0x00,0x60,0x90,0x90,0x68,0x90,0x98,0x64,0x00,0x00,0x00,0x00},
+ //' (39) 
+{0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
+ //( (40) 
+{0x00,0x20,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x40,0x20,0x00},
+ //) (41) 
+{0x00,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x00},
+ //* (42) 
+{0x00,0x20,0xA8,0x70,0xA8,0x20,0x00,0x00,0x00,0x00,0x00,0x00},
+ //+ (43) 
+{0x00,0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00,0x00,0x00,0x00},
+ //, (44) 
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x80,0x00},
+ //- (45) 
+{0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00},
+ //. (112) 
+{0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00},
+ // / (47) 
+{0x00,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x80,0x80,0x00,0x00},
+ //0 (48) 
+{0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x60,0x00,0x00,0x00,0x00},
+ //1 (49) 
+{0x00,0x40,0xC0,0x40,0x40,0x40,0x40,0xE0,0x00,0x00,0x00,0x00},
+ //2 (50) 
+{0x00,0xE0,0x10,0x10,0x20,0x40,0x80,0xF0,0x00,0x00,0x00,0x00},
+ //3 (51) 
+{0x00,0xE0,0x10,0x10,0x60,0x10,0x10,0xE0,0x00,0x00,0x00,0x00},
+ //4 (52) 
+{0x00,0x10,0x30,0x50,0x90,0xF8,0x10,0x10,0x00,0x00,0x00,0x00},
+ //5 (53) 
+{0x00,0xF0,0x80,0x80,0xE0,0x10,0x10,0xE0,0x00,0x00,0x00,0x00},
+ //6 (54) 
+{0x00,0x60,0x80,0x80,0xE0,0x90,0x90,0x60,0x00,0x00,0x00,0x00},
+ //7 (55) 
+{0x00,0xF0,0x10,0x20,0x20,0x40,0x40,0x80,0x00,0x00,0x00,0x00},
+ //8 (56) 
+{0x00,0x60,0x90,0x90,0x60,0x90,0x90,0x60,0x00,0x00,0x00,0x00},
+ //9 (57) 
+{0x00,0x60,0x90,0x90,0x70,0x10,0x10,0x60,0x00,0x00,0x00,0x00},
+ //: (58) 
+{0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x00},
+ //; (59) 
+{0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x40,0x40,0x80},
+ //< (60) 
+{0x00,0x00,0x00,0x08,0x70,0x80,0x70,0x08,0x00,0x00,0x00,0x00},
+ //= (61) 
+{0x00,0x00,0x00,0x00,0xFC,0x00,0xFC,0x00,0x00,0x00,0x00,0x00},
+ //> (62) 
+{0x00,0x00,0x00,0x80,0x70,0x08,0x70,0x80,0x00,0x00,0x00,0x00},
+ //? (63) 
+{0x00,0xE0,0x10,0x10,0x20,0x40,0x00,0x40,0x00,0x00,0x00,0x00},
+ //@ (64) 
+{0x00,0x38,0x44,0x9A,0xAA,0xAA,0x9C,0x40,0x38,0x00,0x00,0x00},
+ //A (65) 
+{0x00,0x30,0x30,0x48,0x48,0xFC,0x84,0x84,0x00,0x00,0x00,0x00},
+ //B (66) 
+{0x00,0xE0,0x90,0x90,0xF0,0x88,0x88,0xF0,0x00,0x00,0x00,0x00},
+ //C (67) 
+{0x00,0x38,0x44,0x80,0x80,0x80,0x44,0x38,0x00,0x00,0x00,0x00},
+ //D (68) 
+{0x00,0xF0,0x88,0x84,0x84,0x84,0x88,0xF0,0x00,0x00,0x00,0x00},
+ //E (69) 
+{0x00,0xF8,0x80,0x80,0xF0,0x80,0x80,0xF8,0x00,0x00,0x00,0x00},
+ //F (70) 
+{0x00,0xF8,0x80,0x80,0xF0,0x80,0x80,0x80,0x00,0x00,0x00,0x00},
+ //G (71) 
+{0x00,0x38,0x44,0x80,0x9C,0x84,0x44,0x3C,0x00,0x00,0x00,0x00},
+ //H (72) 
+{0x00,0x84,0x84,0x84,0xFC,0x84,0x84,0x84,0x00,0x00,0x00,0x00},
+ //I (73) 
+{0x00,0xE0,0x40,0x40,0x40,0x40,0x40,0xE0,0x00,0x00,0x00,0x00},
+ //J (74) 
+{0x00,0x60,0x20,0x20,0x20,0x20,0x20,0xC0,0x00,0x00,0x00,0x00},
+ //K (75) 
+{0x00,0x88,0x90,0xA0,0xC0,0xA0,0x90,0x88,0x00,0x00,0x00,0x00},
+ //L (76) 
+{0x00,0x80,0x80,0x80,0x80,0x80,0x80,0xF0,0x00,0x00,0x00,0x00},
+ //M (77) 
+{0x00,0xC6,0xC6,0xAA,0xAA,0x92,0x92,0x82,0x00,0x00,0x00,0x00},
+ //N (78) 
+{0x00,0x84,0xC4,0xA4,0x94,0x8C,0x84,0x84,0x00,0x00,0x00,0x00},
+ //O (79) 
+{0x00,0x38,0x44,0x82,0x82,0x82,0x44,0x38,0x00,0x00,0x00,0x00},
+ //P (80) 
+{0x00,0xF0,0x88,0x88,0x88,0xF0,0x80,0x80,0x00,0x00,0x00,0x00},
+ //Q (81) 
+{0x00,0x38,0x44,0x82,0x82,0x82,0x44,0x38,0x08,0x06,0x00,0x00},
+ //R (82) 
+{0x00,0xF0,0x88,0x88,0xF0,0xA0,0x90,0x88,0x00,0x00,0x00,0x00},
+ //S (83) 
+{0x00,0x78,0x80,0x80,0x70,0x08,0x08,0xF0,0x00,0x00,0x00,0x00},
+ //T (84) 
+{0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00},
+ //U (85) 
+{0x00,0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x00,0x00,0x00,0x00},
+ //V (86) 
+{0x00,0x84,0x84,0x84,0x48,0x48,0x30,0x30,0x00,0x00,0x00,0x00},
+ //W (87) 
+{0x00,0x92,0x92,0xAA,0xAA,0xAA,0x44,0x44,0x00,0x00,0x00,0x00},
+ //X (88) 
+{0x00,0x90,0x90,0x60,0x60,0x60,0x90,0x90,0x00,0x00,0x00,0x00},
+ //Y (89) 
+{0x00,0x88,0x50,0x50,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00},
+ //Z (90) 
+{0x00,0xF0,0x10,0x20,0x40,0x40,0x80,0xF0,0x00,0x00,0x00,0x00},
+ //[ (91) 
+{0x00,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x00},
+ //\ (92) 
+{0x00,0x80,0x80,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x00,0x00},
+ //] (93) 
+{0x00,0xC0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xC0,0x00},
+ //^ (94) 
+{0x00,0x20,0x50,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
+ //_ (95) 
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00},
+ //  (32) 
+{0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
+ //a (97) 
+{0x00,0x00,0x00,0x60,0x10,0x70,0x90,0x70,0x00,0x00,0x00,0x00},
+ //b (98) 
+{0x80,0x80,0x80,0xE0,0x90,0x90,0x90,0xE0,0x00,0x00,0x00,0x00},
+ //c (99) 
+{0x00,0x00,0x00,0x60,0x80,0x80,0x80,0x60,0x00,0x00,0x00,0x00},
+ //d (100) 
+{0x10,0x10,0x10,0x70,0x90,0x90,0x90,0x70,0x00,0x00,0x00,0x00},
+ //e (101) 
+{0x00,0x00,0x00,0x60,0x90,0xF0,0x80,0x70,0x00,0x00,0x00,0x00},
+ //f (102) 
+{0x60,0x80,0x80,0xE0,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00},
+ //g (103) 
+{0x00,0x00,0x00,0x70,0x90,0x90,0x90,0x70,0x10,0x60,0x00,0x00},
+ //h (104) 
+{0x80,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0x00,0x00,0x00,0x00},
+ //i (105) 
+{0x00,0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00},
+ //j (106) 
+{0x00,0x40,0x00,0xC0,0x40,0x40,0x40,0x40,0x40,0x80,0x00,0x00},
+ //k (107) 
+{0x80,0x80,0x80,0x90,0xA0,0xC0,0xA0,0x90,0x00,0x00,0x00,0x00},
+ //l (108) 
+{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00},
+ //m (109) 
+{0x00,0x00,0x00,0xEC,0x92,0x92,0x92,0x92,0x00,0x00,0x00,0x00},
+ //n (110) 
+{0x00,0x00,0x00,0xE0,0x90,0x90,0x90,0x90,0x00,0x00,0x00,0x00},
+ //o (111) 
+{0x00,0x00,0x00,0x60,0x90,0x90,0x90,0x60,0x00,0x00,0x00,0x00},
+ //p (112) 
+{0x00,0x00,0x00,0xE0,0x90,0x90,0x90,0xE0,0x80,0x80,0x00,0x00},
+ //q (113) 
+{0x00,0x00,0x00,0x70,0x90,0x90,0x90,0x70,0x10,0x10,0x00,0x00},
+ //r (114) 
+{0x00,0x00,0x00,0xA0,0xC0,0x80,0x80,0x80,0x00,0x00,0x00,0x00},
+ //s (115) 
+{0x00,0x00,0x00,0xE0,0x80,0x40,0x20,0xE0,0x00,0x00,0x00,0x00},
+ //t (116) 
+{0x00,0x00,0x80,0xC0,0x80,0x80,0x80,0x40,0x00,0x00,0x00,0x00},
+ //u (117) 
+{0x00,0x00,0x00,0x90,0x90,0x90,0x90,0x70,0x00,0x00,0x00,0x00},
+ //v (118) 
+{0x00,0x00,0x00,0x88,0x50,0x50,0x50,0x20,0x00,0x00,0x00,0x00},
+ //w (119) 
+{0x00,0x00,0x00,0x92,0x92,0xAA,0x6C,0x44,0x00,0x00,0x00,0x00},
+ //x (120) 
+{0x00,0x00,0x00,0xA0,0x40,0x40,0x40,0xA0,0x00,0x00,0x00,0x00},
+ //y (121) 
+{0x00,0x00,0x00,0x88,0x50,0x50,0x50,0x20,0x20,0x40,0x00,0x00},
+ //z (122) 
+{0x00,0x00,0x00,0xE0,0x20,0x40,0x80,0xE0,0x00,0x00,0x00,0x00},
+ //{ (123) 
+{0x00,0x20,0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x20,0x00},
+ //| (124) 
+{0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00},
+ //} (125) 
+{0x00,0x80,0x40,0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x80,0x00},
+ //~ (126) 
+{0x00,0x60,0x90,0x90,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00}};
+
+#else
+       static char (*fontmap)[12];
+#endif
+#endif
+
 
 /**
  *     Open and initialize the framebuffer device
@@ -213,9 +420,13 @@
 
 
 /**
- *     Draw image from PPM file
+ *     Draws a PPM image.
+ * \param nXPos horizontal position from which draw the image.
+ * \param nYPos vertical position from which draw the image. With nXPos=-1 and 
nYPos=-1, draws the full image.
+ * \param nXDim horizontal dimension of the image section to draw.
+ * \param nYDim vertical dimension of the image section to draw.
  */
-static void fb_drawimage(void)
+static void fb_drawimage(int nXPos, int nYPos, int nXDim, int nYDim)
 {
        char head[256];
        char s[80];
@@ -254,13 +465,29 @@
                height = G.scr_var.yres;
 
        pixline = xmalloc(line_size);
-       for (j = 0; j < height; j++) {
-               unsigned char *pixel = pixline;
-               DATA *src = (DATA *)(G.addr + j * G.scr_fix.line_length);
+
+       if (nYPos == -1) {
+               nYPos = 0;
+       }
+       else {
+               fseek(theme_file, line_size * nYPos, SEEK_CUR);
+               height = nYPos + nYDim;
+       }
+
+       if (nXPos == -1) {
+               nXPos = 0;
+       }
+       else {
+               width = nXPos + nXDim;
+       }
+
+       for (j = nYPos; j < height; j++) {
+               unsigned char *pixel = pixline + 3 * nXPos;
+               DATA *src = (DATA *)(G.addr + (j * G.scr_var.xres + nXPos) * 
BYTES_PER_PIXEL);
 
                if (fread(pixline, 1, line_size, theme_file) != line_size)
                        bb_error_msg_and_die("bad PPM file '%s'", 
G.image_filename);
-               for (i = 0; i < width; i++) {
+               for (i = nXPos; i < width; i++) {
                        unsigned thispix;
                        thispix = (((unsigned)pixel[0] << 8) & 0xf800)
                                | (((unsigned)pixel[1] << 3) & 0x07e0)
@@ -274,6 +501,73 @@
 }
 
 
+#if ENABLE_FBSPLASH_TEXT_RENDERING
+/**
+ *     Draws a single character on framebuffer.
+ * \param nXPos horizontal position from which draw the character.
+ * \param nYPos vertical position from which draw the character.
+ * \param nCharSize character scale factor [1..4].
+ * \param nChar character to draw.
+ */
+static void fb_drawchar(int nXPos, int nYPos, int nCharSize, int nChar)
+{
+       unsigned char nred, ngreen, nblue;
+       DATA *ptr, thispix;
+
+       nred = G.text_colr;
+       ngreen = G.text_colg;
+       nblue = G.text_colb;
+
+       nred   >>= 3;  // 5-bit red
+       ngreen >>= 2;  // 6-bit green
+       nblue  >>= 3;  // 5-bit blue
+       thispix = nblue + (ngreen << 5) + (nred << (5+6));
+
+       for (int nHeight = 0; nHeight < 12 * nCharSize; nHeight++) {
+               for (int nWidth = 0; nWidth < 8 * nCharSize; nWidth++) {
+                       if ((fontmap[nChar - 32][nHeight / nCharSize] & (0x80 
>> (nWidth / nCharSize))) != 0) {
+                               ptr = (DATA*)(G.addr + ((nYPos + nHeight) * 
G.scr_var.xres + (nXPos + nWidth)) * BYTES_PER_PIXEL);
+                               *ptr = thispix;
+                       }
+               }
+       }
+}
+
+
+/**
+ *     Draws a string on framebuffer.
+ * \param *strString pointer to the string.
+ */
+static void fb_drawstring(char *strString)
+{
+       int nCharSize;
+       static int nOldCharSize = -1;
+       static int nOldStringSize = -1;         // in pixel
+
+       // size check
+       nCharSize = G.text_size;
+       if (nCharSize < 1)
+               nCharSize = 1;
+       else if (nCharSize > 4)
+               nCharSize = 4;
+
+       // redraws the portion of image interested to the old write operation
+       if (nOldStringSize != -1) {
+               fb_drawimage(G.text_posx, G.text_posy, nOldStringSize, 12 * 
nCharSize);
+       }
+
+       // new write operation
+       for (int nCharNum = 0; nCharNum < strlen(strString); nCharNum++) {
+               char c = *(strString + nCharNum);
+               fb_drawchar(G.text_posx + 8 * nCharSize * nCharNum, 
G.text_posy, nCharSize, c);
+       }
+
+       nOldCharSize = nCharSize;
+       nOldStringSize = 8 * nCharSize * strlen(strString);
+}
+
+#endif
+
 /**
  *     Parse configuration file
  * \param *cfg_filename name of the configuration file
@@ -284,6 +578,7 @@
                "BAR_WIDTH\0" "BAR_HEIGHT\0"
                "BAR_LEFT\0" "BAR_TOP\0"
                "BAR_R\0" "BAR_G\0" "BAR_B\0"
+               "TEXT_LEFT\0" "TEXT_TOP\0" "TEXT_R\0" "TEXT_G\0" "TEXT_B\0" 
"TEXT_SIZE\0"
 #if DEBUG
                "DEBUG\0"
 #endif
@@ -296,10 +591,10 @@
                int i = index_in_strings(param_names, token[0]);
                if (i < 0)
                        bb_error_msg_and_die("syntax error: '%s'", token[0]);
-               if (i >= 0 && i < 7)
+               if (i >= 0 && i < 13)
                        G.ns[i] = val;
 #if DEBUG
-               if (i == 7) {
+               if (i == 13) {
                        G.bdebug_messages = val;
                        if (G.bdebug_messages)
                                G.logfile_fd = 
xfopen_for_write("/tmp/fbsplash.log");
@@ -313,7 +608,11 @@
 int fbsplash_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int fbsplash_main(int argc UNUSED_PARAM, char **argv)
 {
+#if ENABLE_FONTMAP_DYNAMICALLY_LOADED
+       const char *fontmap_filename = NULL;
+#endif
        const char *fb_device, *cfg_filename, *fifo_filename;
+
        FILE *fp = fp; // for compiler
        char *num_buf;
        unsigned num;
@@ -325,9 +624,21 @@
        fb_device = "/dev/fb0";
        cfg_filename = NULL;
        fifo_filename = NULL;
+
+#if ENABLE_FONTMAP_DYNAMICALLY_LOADED
+       bCursorOff = 1 & getopt32(argv, "cs:d:i:f:m:",
+                       &G.image_filename, &fb_device, &cfg_filename, 
&fifo_filename, &fontmap_filename);
+
+       if (fontmap_filename) {
+               FILE *fontmap_fd = xfopen_stdin(fontmap_filename);
+               fontmap = xzalloc(sizeof(fontmap[0]) * 95);
+               fread(fontmap[0], 1, sizeof(fontmap[0]) * 95, fontmap_fd);
+               fclose_if_not_stdin(fontmap_fd);
+       }
+#else
        bCursorOff = 1 & getopt32(argv, "cs:d:i:f:",
                        &G.image_filename, &fb_device, &cfg_filename, 
&fifo_filename);
-
+#endif
        // parse configuration file
        if (cfg_filename)
                init(cfg_filename);
@@ -343,7 +654,7 @@
                full_write(STDOUT_FILENO, "\x1b" "[?25l", 6);
        }
 
-       fb_drawimage();
+       fb_drawimage(-1, -1, -1, -1);
 
        if (!fifo_filename)
                return EXIT_SUCCESS;
@@ -374,6 +685,18 @@
                        DEBUG_MESSAGE("exit");
                        break;
                }
+#if ENABLE_FBSPLASH_TEXT_RENDERING
+               else if (strncmp(num_buf, "write:", 6) == 0) {
+#if ENABLE_FONTMAP_DYNAMICALLY_LOADED
+                       if (fontmap_filename) {
+#endif
+                               fb_drawstring(num_buf + 6);
+                               continue;
+#if ENABLE_FONTMAP_DYNAMICALLY_LOADED
+                       }
+#endif
+               }
+#endif
                num = atoi(num_buf);
                if (isdigit(num_buf[0]) && (num <= 100)) {
 #if DEBUG
@@ -386,6 +709,10 @@
                free(num_buf);
        }
 
+#if ENABLE_FONTMAP_DYNAMICALLY_LOADED
+       free(fontmap);
+#endif
+
        if (bCursorOff) // restore cursor
                full_write(STDOUT_FILENO, "\x1b" "[?25h", 6);
 
Only in /tmp/acroread_0_0/busybox-1.12.0/miscutils: fbsplash.cfg
_______________________________________________
busybox mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/busybox

Reply via email to