[yocto] [psplash][PATCH] Add option to read message from file

Richard Leitner - SKIDATA Richard.Leitner at skidata.com
Tue Oct 1 05:50:43 PDT 2013


Add an option to read the displayed message from a file.
Additionally the maximum length for the read string can be defined.
The string will then be cut after the given number of chars.
It is also possible to define a prefix which is displayed in front
of the read file content.

If no file is defined a hardcoded message (using MSG like before)
can be displayed.

For these changes the following defines were introduced:
MSG_FILE_PATH ...... path to the file
MSG_FILE_MAX_LEN ... number of chars read from file
MSG_FILE_PREFIX .... text displayed in front of the file content

Signed-off-by: Richard Leitner <richard.leitner at skidata.com>
---
 psplash.c |   41 ++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 40 insertions(+), 1 deletion(-)

diff --git a/psplash.c b/psplash.c
index 09cf0d0..093a99a 100644
--- a/psplash.c
+++ b/psplash.c
@@ -23,6 +23,20 @@
 #include "psplash-bar-img.h"
 #include "radeon-font.h"
 
+/* Here you can define a message which will be displayed above the
+ * progress bar.
+ * The message can be either read from a file:
+ *    Set MSG_FILE_PATH (and if needed MSG_FILE_{MAX_LEN,PREFIX})
+ *    to display the first MSG_FILE_MAX_LEN characters
+ *    of the first line from MSG_FILE_PATH as message.
+ *    Additionally the content of MSG_FILE_PREFIX will be displayed
+ *    before the read message. */
+#define MSG_FILE_PATH ""
+#define MSG_FILE_MAX_LEN 32
+#define MSG_FILE_PREFIX ""
+/* Or a fixed string can be used:
+ *    If MSG_FILE is not set or not readable
+ *    the content of MSG will be used as message. */
 #define MSG ""
 
 void
@@ -204,6 +218,8 @@ main (int argc, char** argv)
   int        pipe_fd, i = 0, angle = 0, ret = 0;
   PSplashFB *fb;
   bool       disable_console_switch = FALSE;
+  FILE      *fd_msg;
+  char      *str_msg;
   
   signal(SIGHUP, psplash_exit);
   signal(SIGINT, psplash_exit);
@@ -287,7 +303,30 @@ main (int argc, char** argv)
 
   psplash_draw_progress (fb, 0);
 
-  psplash_draw_msg (fb, MSG);
+  /* Draw message from file or defined MSG */
+  fd_msg = fopen (MSG_FILE_PATH, "r");
+  if (fd_msg==NULL) {
+    psplash_draw_msg (fb, MSG);
+  } else {
+    str_msg = (char*) malloc (
+              (MSG_FILE_MAX_LEN + strlen(MSG_FILE_PREFIX) + 1)*sizeof(char));
+    if (str_msg != NULL && fgets (str_msg, MSG_FILE_MAX_LEN, fd_msg)!=NULL) {
+      if (strlen (MSG_FILE_PREFIX) > 0) {
+        /* if MSG_FILE_PREFIX is set, prepend it to str_msg */
+        memmove (str_msg + strlen(MSG_FILE_PREFIX) + 1, str_msg, strlen(str_msg));
+        strcpy (str_msg, MSG_FILE_PREFIX);
+		/* replace \0 after MSG_FILE_PREFIX with a space */
+        str_msg[strlen(MSG_FILE_PREFIX)] = ' ';
+      }
+      psplash_draw_msg (fb, str_msg);
+      free (str_msg);
+    } else {
+      /* MSG_FILE_PATH is empty (or malloc failed)
+	   *    so display MSG_FILE_PREFIX only */
+      psplash_draw_msg (fb, MSG_FILE_PREFIX);
+    }
+    fclose (fd_msg);
+  }
 
   psplash_main (fb, pipe_fd, 0);
 
-- 
1.7.10.4




More information about the yocto mailing list