1*2c2f96dcSApple OSS Distributions// 2*2c2f96dcSApple OSS Distributions//cc progress.m -framework AppKit -Wall; ./a.out >/tmp/xx.c; cc /tmp/xx.c -Wall; cat /tmp/xx.c 3*2c2f96dcSApple OSS Distributions 4*2c2f96dcSApple OSS Distributions#import <Foundation/Foundation.h> 5*2c2f96dcSApple OSS Distributions#import <AppKit/AppKit.h> 6*2c2f96dcSApple OSS Distributions#import <stdlib.h> 7*2c2f96dcSApple OSS Distributions#import <stdint.h> 8*2c2f96dcSApple OSS Distributions#include <getopt.h> 9*2c2f96dcSApple OSS Distributions#import <string.h> 10*2c2f96dcSApple OSS Distributions 11*2c2f96dcSApple OSS Distributions 12*2c2f96dcSApple OSS Distributions#define MAX_COLORS 256 13*2c2f96dcSApple OSS Distributions 14*2c2f96dcSApple OSS Distributionstypedef struct { 15*2c2f96dcSApple OSS Distributions uint8_t r; 16*2c2f96dcSApple OSS Distributions uint8_t g; 17*2c2f96dcSApple OSS Distributions uint8_t b; 18*2c2f96dcSApple OSS Distributions} pixel_t; 19*2c2f96dcSApple OSS Distributions 20*2c2f96dcSApple OSS Distributionsstatic uint32_t clut_size = 0; 21*2c2f96dcSApple OSS Distributionsstatic pixel_t clut[MAX_COLORS]; 22*2c2f96dcSApple OSS Distributions 23*2c2f96dcSApple OSS Distributionsstatic uint8_t 24*2c2f96dcSApple OSS Distributionslookup_color(uint8_t r, uint8_t g, uint8_t b) 25*2c2f96dcSApple OSS Distributions{ 26*2c2f96dcSApple OSS Distributions unsigned int i; 27*2c2f96dcSApple OSS Distributions 28*2c2f96dcSApple OSS Distributions for (i = 0; i < clut_size; i++) { 29*2c2f96dcSApple OSS Distributions if (clut[i].r == r && 30*2c2f96dcSApple OSS Distributions clut[i].g == g && 31*2c2f96dcSApple OSS Distributions clut[i].b == b) { 32*2c2f96dcSApple OSS Distributions return i; 33*2c2f96dcSApple OSS Distributions } 34*2c2f96dcSApple OSS Distributions } 35*2c2f96dcSApple OSS Distributions if (clut_size >= MAX_COLORS) { 36*2c2f96dcSApple OSS Distributions printf("Image must have no more than 256 unique pixel colors\n"); 37*2c2f96dcSApple OSS Distributions exit(1); 38*2c2f96dcSApple OSS Distributions } 39*2c2f96dcSApple OSS Distributions clut[clut_size].r = r; 40*2c2f96dcSApple OSS Distributions clut[clut_size].g = g; 41*2c2f96dcSApple OSS Distributions clut[clut_size].b = b; 42*2c2f96dcSApple OSS Distributions 43*2c2f96dcSApple OSS Distributions return (uint8_t)clut_size++; 44*2c2f96dcSApple OSS Distributions} 45*2c2f96dcSApple OSS Distributions 46*2c2f96dcSApple OSS Distributionsvoid print_buffer (uint8_t * buffer, size_t width, size_t height, size_t row) 47*2c2f96dcSApple OSS Distributions{ 48*2c2f96dcSApple OSS Distributions printf("{"); 49*2c2f96dcSApple OSS Distributions for (int y = 0; y < height; y++) 50*2c2f96dcSApple OSS Distributions { 51*2c2f96dcSApple OSS Distributions printf("\n "); 52*2c2f96dcSApple OSS Distributions for (int x = 0; x < width; x++) 53*2c2f96dcSApple OSS Distributions { 54*2c2f96dcSApple OSS Distributions printf("0x%02x,", buffer[x + y*row]); 55*2c2f96dcSApple OSS Distributions } 56*2c2f96dcSApple OSS Distributions } 57*2c2f96dcSApple OSS Distributions printf("\n}"); 58*2c2f96dcSApple OSS Distributions} 59*2c2f96dcSApple OSS Distributions 60*2c2f96dcSApple OSS Distributionsint onefile(const char * filename, int w, int h) 61*2c2f96dcSApple OSS Distributions{ 62*2c2f96dcSApple OSS Distributions int size; 63*2c2f96dcSApple OSS Distributions uint8_t color; 64*2c2f96dcSApple OSS Distributions 65*2c2f96dcSApple OSS Distributions FILE *file; 66*2c2f96dcSApple OSS Distributions if ((file = fopen(filename, "r")) == NULL) { 67*2c2f96dcSApple OSS Distributions fclose(file); 68*2c2f96dcSApple OSS Distributions printf ("ERROR!!! can not open resource file [%s]\n", filename); 69*2c2f96dcSApple OSS Distributions return 1; 70*2c2f96dcSApple OSS Distributions } 71*2c2f96dcSApple OSS Distributions fclose(file); 72*2c2f96dcSApple OSS Distributions 73*2c2f96dcSApple OSS Distributions NSString* filePath = [NSString stringWithUTF8String:filename]; 74*2c2f96dcSApple OSS Distributions NSData* fileData = [NSData dataWithContentsOfFile:filePath]; 75*2c2f96dcSApple OSS Distributions NSBitmapImageRep* bitmapImageRep = [[NSBitmapImageRep alloc] initWithData:fileData]; 76*2c2f96dcSApple OSS Distributions NSSize imageSize = [bitmapImageRep size]; 77*2c2f96dcSApple OSS Distributions 78*2c2f96dcSApple OSS Distributions size_t image_length = (int)imageSize.width * (int)imageSize.height; 79*2c2f96dcSApple OSS Distributions uint8_t* uncompressed_color_buffer = malloc(image_length); 80*2c2f96dcSApple OSS Distributions uint8_t* uncompressed_alpha_buffer = malloc(image_length); 81*2c2f96dcSApple OSS Distributions 82*2c2f96dcSApple OSS Distributions bzero(clut, sizeof(clut)); 83*2c2f96dcSApple OSS Distributions 84*2c2f96dcSApple OSS Distributions clut_size = 0; 85*2c2f96dcSApple OSS Distributions size = 0; 86*2c2f96dcSApple OSS Distributions 87*2c2f96dcSApple OSS Distributions for (int y = 0; y < imageSize.height; y++) { 88*2c2f96dcSApple OSS Distributions for (int x = 0; x < imageSize.width; x++) { 89*2c2f96dcSApple OSS Distributions NSUInteger pixel[4] = {}; 90*2c2f96dcSApple OSS Distributions [bitmapImageRep getPixel:pixel atX:x y:y]; 91*2c2f96dcSApple OSS Distributions 92*2c2f96dcSApple OSS Distributions color = lookup_color((uint8_t)pixel[0], 93*2c2f96dcSApple OSS Distributions (uint8_t)pixel[1], 94*2c2f96dcSApple OSS Distributions (uint8_t)pixel[2]); 95*2c2f96dcSApple OSS Distributions 96*2c2f96dcSApple OSS Distributions assert(color <= 1); 97*2c2f96dcSApple OSS Distributions uint8_t alpha = pixel[3]; 98*2c2f96dcSApple OSS Distributions assert((alpha != 0) == color); 99*2c2f96dcSApple OSS Distributions 100*2c2f96dcSApple OSS Distributions alpha = 255 - alpha; 101*2c2f96dcSApple OSS Distributions 102*2c2f96dcSApple OSS Distributions uncompressed_color_buffer[size] = color; 103*2c2f96dcSApple OSS Distributions uncompressed_alpha_buffer[size] = alpha; 104*2c2f96dcSApple OSS Distributions size++; 105*2c2f96dcSApple OSS Distributions } 106*2c2f96dcSApple OSS Distributions } 107*2c2f96dcSApple OSS Distributions 108*2c2f96dcSApple OSS Distributions assert(clut_size == 2); 109*2c2f96dcSApple OSS Distributions assert(clut[0].r == 0); 110*2c2f96dcSApple OSS Distributions assert(clut[0].g == 0); 111*2c2f96dcSApple OSS Distributions assert(clut[0].b == 0); 112*2c2f96dcSApple OSS Distributions assert(clut[1].r == 0xff); 113*2c2f96dcSApple OSS Distributions assert(clut[1].g == 0xff); 114*2c2f96dcSApple OSS Distributions assert(clut[1].b == 0xff); 115*2c2f96dcSApple OSS Distributions 116*2c2f96dcSApple OSS Distributions printf("\n"); 117*2c2f96dcSApple OSS Distributions 118*2c2f96dcSApple OSS Distributions assert(w <= imageSize.width); 119*2c2f96dcSApple OSS Distributions assert(h <= imageSize.height); 120*2c2f96dcSApple OSS Distributions 121*2c2f96dcSApple OSS Distributions print_buffer (uncompressed_alpha_buffer, w, h, imageSize.width); 122*2c2f96dcSApple OSS Distributions 123*2c2f96dcSApple OSS Distributions if (uncompressed_color_buffer != NULL) { 124*2c2f96dcSApple OSS Distributions free (uncompressed_color_buffer); 125*2c2f96dcSApple OSS Distributions } 126*2c2f96dcSApple OSS Distributions if (uncompressed_alpha_buffer != NULL) { 127*2c2f96dcSApple OSS Distributions free (uncompressed_alpha_buffer); 128*2c2f96dcSApple OSS Distributions } 129*2c2f96dcSApple OSS Distributions 130*2c2f96dcSApple OSS Distributions return 0; 131*2c2f96dcSApple OSS Distributions} 132*2c2f96dcSApple OSS Distributions 133*2c2f96dcSApple OSS Distributions 134*2c2f96dcSApple OSS Distributionsint main (int argc, char * argv[]) 135*2c2f96dcSApple OSS Distributions{ 136*2c2f96dcSApple OSS Distributions printf("#include <stdint.h>\n\n"); 137*2c2f96dcSApple OSS Distributions 138*2c2f96dcSApple OSS Distributions 139*2c2f96dcSApple OSS Distributions printf("\nstatic const unsigned char progressmeter_leftcap1x[2][%d * %d] = {", 9, 18); 140*2c2f96dcSApple OSS Distributions onefile("ProgressBarFullLeftEndCap.png", 9, 18); 141*2c2f96dcSApple OSS Distributions printf(","); 142*2c2f96dcSApple OSS Distributions onefile("ProgressBarEmptyLeftEndCap.png", 9, 18); 143*2c2f96dcSApple OSS Distributions printf("};\n"); 144*2c2f96dcSApple OSS Distributions 145*2c2f96dcSApple OSS Distributions printf("\nstatic const unsigned char progressmeter_leftcap2x[2][4 * %d * %d] = {", 9, 18); 146*2c2f96dcSApple OSS Distributions onefile("[email protected]", 2*9, 2*18); 147*2c2f96dcSApple OSS Distributions printf(","); 148*2c2f96dcSApple OSS Distributions onefile("[email protected]", 2*9, 2*18); 149*2c2f96dcSApple OSS Distributions printf("};\n"); 150*2c2f96dcSApple OSS Distributions 151*2c2f96dcSApple OSS Distributions printf("\nstatic const unsigned char progressmeter_middle1x[2][%d * %d] = {", 1, 18); 152*2c2f96dcSApple OSS Distributions onefile("ProgressBarFullMiddle.png", 1, 18); 153*2c2f96dcSApple OSS Distributions printf(","); 154*2c2f96dcSApple OSS Distributions onefile("ProgressBarEmptyMiddle.png", 1, 18); 155*2c2f96dcSApple OSS Distributions printf("};\n"); 156*2c2f96dcSApple OSS Distributions 157*2c2f96dcSApple OSS Distributions printf("\nstatic const unsigned char progressmeter_middle2x[2][2 * %d * %d] = {", 1, 18); 158*2c2f96dcSApple OSS Distributions onefile("[email protected]", 1, 2*18); 159*2c2f96dcSApple OSS Distributions printf(","); 160*2c2f96dcSApple OSS Distributions onefile("[email protected]", 1, 2*18); 161*2c2f96dcSApple OSS Distributions printf("};\n"); 162*2c2f96dcSApple OSS Distributions 163*2c2f96dcSApple OSS Distributions printf("\nstatic const unsigned char progressmeter_rightcap1x[2][%d * %d] = {", 9, 18); 164*2c2f96dcSApple OSS Distributions onefile("ProgressBarFullRightEndCap.png", 9, 18); 165*2c2f96dcSApple OSS Distributions printf(","); 166*2c2f96dcSApple OSS Distributions onefile("ProgressBarEmptyRightEndCap.png", 9, 18); 167*2c2f96dcSApple OSS Distributions printf("};\n"); 168*2c2f96dcSApple OSS Distributions 169*2c2f96dcSApple OSS Distributions printf("\nstatic const unsigned char progressmeter_rightcap2x[2][4 * %d * %d] = {", 9, 18); 170*2c2f96dcSApple OSS Distributions onefile("[email protected]", 2*9, 2*18); 171*2c2f96dcSApple OSS Distributions printf(","); 172*2c2f96dcSApple OSS Distributions onefile("[email protected]", 2*9, 2*18); 173*2c2f96dcSApple OSS Distributions printf("};\n"); 174*2c2f96dcSApple OSS Distributions 175*2c2f96dcSApple OSS Distributions 176*2c2f96dcSApple OSS Distributions} 177*2c2f96dcSApple OSS Distributions 178