unsigned char *pixline;
unsigned i, j, width, height, line_size;
- theme_file = xfopen_stdin(G.image_filename);
+ if (LONE_DASH(G.image_filename))
+ theme_file = stdin;
+ else {
+ int fd = open_zipped(G.image_filename);
+ if (fd < 0)
+ bb_simple_perror_msg_and_die(G.image_filename);
+ theme_file = xfdopen_for_read(fd);
+ }
head = xmalloc(256);
- // parse ppm header
+ /* parse ppm header
+ * - A ppm image’s magic number is the two characters "P6".
+ * - Whitespace (blanks, TABs, CRs, LFs).
+ * - A width, formatted as ASCII characters in decimal.
+ * - Whitespace.
+ * - A height, again in ASCII decimal.
+ * - Whitespace.
+ * - The maximum color value (Maxval), again in ASCII decimal. Must be
+ * less than 65536.
+ * - Newline or other single whitespace character.
+ * - A raster of Width * Height pixels in triplets of rgb
+ * in pure binary by 1 (or not implemented 2) bytes.
+ */
while (1) {
if (fgets(head, 256, theme_file) == NULL
/* do not overrun the buffer */
|| strlen(bb_common_bufsiz1) >= sizeof(bb_common_bufsiz1) - 256)
bb_error_msg_and_die("bad PPM file '%s'", G.image_filename);
- ptr = memchr(head, '#', 256);
+ ptr = memchr(skip_whitespace(head), '#', 256);
if (ptr != NULL)
*ptr = 0; /* ignore comments */
strcat(bb_common_bufsiz1, head);
if (ENABLE_FEATURE_CLEAN_UP)
free(head);
-
+ if (width != G.scr_var.xres || height != G.scr_var.yres)
+ bb_error_msg_and_die("PPM %dx%d does not match screen %dx%d",
+ width, height, G.scr_var.xres, G.scr_var.yres);
line_size = width*3;
if (width > G.scr_var.xres)
width = G.scr_var.xres;
num = atoi(num_buf);
if (isdigit(num_buf[0]) && (num <= 100)) {
#if DEBUG
- char strVal[10];
- sprintf(strVal, "%d", num);
- DEBUG_MESSAGE(strVal);
+ DEBUG_MESSAGE(itoa(num));
#endif
fb_drawprogressbar(num);
}