#include #include #include "images.h" //----------------------------------------------------------------------------- // This will be the plot function out of your graphics library // #define PLOT(x, y, c) \ do { \ printf("%s", (c ? "#" : ".")); \ if(x == img->w - 1) printf("\n"); \ } while(0) //+============================================================================ // The pain we endure to avoid code duplication cleanly // #define PLOTBYTE(b) \ do { \ for(uint8_t m = 0x80; m; m >>= 1) { \ PLOT(x, y, (b & m)); \ if(((++x) == img->w) && !(x = 0) && ((++y) == img->h)) break; \ } \ } while(0) void show(const image_t* img) { // Some variables const uint8_t* bp = img->data; unsigned int x = 0; unsigned int y = 0; // Compressed if(img->c) { for(unsigned int i = 0; i < img->len; i++, bp++) { // Compressed data? {tag, length, value} if(*bp == img->tag) { for(uint16_t c = 0; c < bp[1]; c++) PLOTBYTE(bp[2]); bp += 3 - 1; i += 3 - 1; // Uncompressed byte } else { PLOTBYTE(*bp); } } // Not compressed } else { for(unsigned int i = 0; i < img->len; i++, bp++) PLOTBYTE(*bp); } } #undef PLOTBYTE //+============================================================================ int main(void) { show(&img_zzz); return 0; }