This patch adds an option to read the displayed message from a file.
Additionally the maximum length for the read string can be defined.
If both, a message (STARTUP_MSG) and a file (STARTUP_MSG_FILE) are
defined the content of the file will be appended to the message.
The string will be cutted after the given maximum number of chars.

For these changes the following defines were introduced:
  PSPLASH_STARTUP_MSG_MAX_LEN ... maximum lenght of the complete message
  PSPLASH_STARTUP_MSG_FILE ...... path to the file to read

Signed-off-by: Richard Leitner <richard.leit...@skidata.com>
---
 psplash-config.h |  5 +++++
 psplash.c        | 29 ++++++++++++++++++++++++++++-
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/psplash-config.h b/psplash-config.h
index 82bb76d..7fa44fa 100644
--- a/psplash-config.h
+++ b/psplash-config.h
@@ -21,6 +21,11 @@
 
 /* Text to output on program start; if undefined, output nothing */
 #define PSPLASH_STARTUP_MSG ""
+#define PSPLASH_STARTUP_MSG_MAX_LEN 32
+
+/* File to read and display its first line on program start;
+ * if undefined, output nothing; if MSG is defined also, append to it */
+#define PSPLASH_STARTUP_MSG_FILE ""
 
 /* Bool indicating if the image is fullscreen, as opposed to split screen */
 #define PSPLASH_IMG_FULLSCREEN 0
diff --git a/psplash.c b/psplash.c
index 04d3d49..b7d2d28 100644
--- a/psplash.c
+++ b/psplash.c
@@ -208,6 +208,9 @@ main (int argc, char** argv)
   int        pipe_fd, i = 0, angle = 0, ret = 0;
   PSplashFB *fb;
   bool       disable_console_switch = FALSE;
+  char       msg[PSPLASH_STARTUP_MSG_MAX_LEN];
+  int        msglen;
+  FILE      *fd_msg;
   
   signal(SIGHUP, psplash_exit);
   signal(SIGINT, psplash_exit);
@@ -298,9 +301,33 @@ main (int argc, char** argv)
 
   psplash_draw_progress (fb, 0);
 
+  memset(msg, 0, PSPLASH_STARTUP_MSG_MAX_LEN);
+  msglen = 0;
 #ifdef PSPLASH_STARTUP_MSG
-  psplash_draw_msg (fb, PSPLASH_STARTUP_MSG);
+  snprintf(msg, PSPLASH_STARTUP_MSG_MAX_LEN, "%s", PSPLASH_STARTUP_MSG);
+  msglen = strlen(msg);
 #endif
+#ifdef PSPLASH_STARTUP_MSG_FILE
+  fd_msg = fopen (PSPLASH_STARTUP_MSG_FILE, "r");
+  if (fd_msg)
+    {
+      if (msglen == 0)
+        {
+          fgets (msg, PSPLASH_STARTUP_MSG_MAX_LEN, fd_msg);
+        }
+      else
+        {
+          fgets (&msg[msglen + 1], PSPLASH_STARTUP_MSG_MAX_LEN - msglen - 1, 
fd_msg);
+          msg[msglen] = ' ';
+        }
+      fclose (fd_msg);
+    }
+  msglen = strlen(msg);
+#endif
+
+  /* draw message if we have one */
+  if (msglen > 0)
+    psplash_draw_msg (fb, msg);
 
   psplash_main (fb, pipe_fd, 0);
 
-- 
2.1.4

-- 
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to