xref: /xnu-10063.121.3/osfmk/console/art/progress.m (revision 2c2f96dc2b9a4408a43d3150ae9c105355ca3daa)
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