unsigned char lut[256][3];
unsigned char *screen_deflated;
int deflated_size;
- unsigned char *image;
+ unsigned char *image = NULL;
unsigned char *outpos;
static const unsigned char png[] = {137, 80, 78, 71, 13, 10, 26, 10};
static unsigned char idat[] = {'I', 'D', 'A', 'T'};
strm.next_in = screen_conv;
toalloc = 0;
+ strm.avail_out = 0;
screen_deflated = NULL;
flush = Z_NO_FLUSH;
deflateEnd(&strm);
-
image = malloc(sizeof(png) +
sizeof(ihdr) + 8 + /* 8 = length, csum */
sizeof(idat) + deflated_size + 8 +
}
outpos = image;
+
+ /* PNG signature */
memcpy(outpos, png, sizeof(png));
outpos += sizeof(png);
+ /* IHDR */
l = htonl(sizeof(ihdr) - 4); /* "IHDR" is not counted */
memcpy(outpos, &l, sizeof(l));
outpos += sizeof(l);
memcpy(outpos, &l, sizeof(l));
outpos += sizeof(l);
+ /* IDAT */
l = htonl(deflated_size);
memcpy(outpos, &l, sizeof(l));
outpos += sizeof(l);
memcpy(outpos, &l, sizeof(l));
outpos += sizeof(l);
+ /* IEND */
l = htonl(sizeof(iend) - 4); /* "IEND" is not counted */
memcpy(outpos, &l, sizeof(l));
outpos += sizeof(l);
char filename[256];
unsigned char *png;
int imglen;
+ int ret;
int l;
int fd;
pid_t display;
printf ("hmm. didnt' get %d bytes, but %d\n\n", sizeof(screen), l);
}
+ png = lcd2png(screen, &imglen);
+
+ lt = time(NULL);
strftime(filename, sizeof(filename), "screen_%Y%m%d-%H%M%S.png", localtime(<));
fd=open(filename, O_CREAT|O_WRONLY, 0644);
- png = lcd2png(screen, &imglen);
- write(fd, png, imglen);
+ if (fd == -1) {
+ perror("open");
+ exit(EXIT_FAILURE);
+ }
+
+ while(imglen > 0) {
+ ret = write(fd, png, imglen);
+ if (ret == -1) {
+ perror("write");
+ exit(EXIT_FAILURE);
+ }
+ imglen -= ret;
+ }
close(fd);
+ free(png);
printf("Waveform saved as %s\n", filename);