xref: /rk3399_rockchip-uboot/tools/easylogo/easylogo.c (revision edfed1d91df2b2670a812ca9d1a1f9faae7dba47)
1fe8c2806Swdenk /*
2fe8c2806Swdenk ** Easylogo TGA->header converter
3fe8c2806Swdenk ** ==============================
4fe8c2806Swdenk ** (C) 2000 by Paolo Scaffardi (arsenio@tin.it)
5fe8c2806Swdenk ** AIRVENT SAM s.p.a - RIMINI(ITALY)
6fe8c2806Swdenk **
7fe8c2806Swdenk ** This is still under construction!
8fe8c2806Swdenk */
9fe8c2806Swdenk 
10*edfed1d9SMike Frysinger #include <getopt.h>
11*edfed1d9SMike Frysinger #include <stdbool.h>
12fe8c2806Swdenk #include <stdio.h>
1338d299c2SMike Frysinger #include <stdlib.h>
1438d299c2SMike Frysinger #include <string.h>
15fe8c2806Swdenk 
16fe8c2806Swdenk #pragma pack(1)
17fe8c2806Swdenk 
18fe8c2806Swdenk /*#define ENABLE_ASCII_BANNERS */
19fe8c2806Swdenk 
20fe8c2806Swdenk typedef struct {
21fe8c2806Swdenk 	unsigned char id;
22fe8c2806Swdenk 	unsigned char ColorMapType;
23fe8c2806Swdenk 	unsigned char ImageTypeCode;
24fe8c2806Swdenk 	unsigned short ColorMapOrigin;
25fe8c2806Swdenk 	unsigned short ColorMapLenght;
26fe8c2806Swdenk 	unsigned char ColorMapEntrySize;
27fe8c2806Swdenk 	unsigned short ImageXOrigin;
28fe8c2806Swdenk 	unsigned short ImageYOrigin;
29fe8c2806Swdenk 	unsigned short ImageWidth;
30fe8c2806Swdenk 	unsigned short ImageHeight;
31fe8c2806Swdenk 	unsigned char ImagePixelSize;
32fe8c2806Swdenk 	unsigned char ImageDescriptorByte;
33fe8c2806Swdenk } tga_header_t;
34fe8c2806Swdenk 
35fe8c2806Swdenk typedef struct {
36fe8c2806Swdenk 	unsigned char r, g, b;
37fe8c2806Swdenk } rgb_t;
38fe8c2806Swdenk 
39fe8c2806Swdenk typedef struct {
40fe8c2806Swdenk 	unsigned char b, g, r;
41fe8c2806Swdenk } bgr_t;
42fe8c2806Swdenk 
43fe8c2806Swdenk typedef struct {
44fe8c2806Swdenk 	unsigned char Cb, y1, Cr, y2;
45fe8c2806Swdenk } yuyv_t;
46fe8c2806Swdenk 
47fe8c2806Swdenk typedef struct {
486007f325SWolfgang Denk 	void *data, *palette;
496007f325SWolfgang Denk 	int width, height, pixels, bpp, pixel_size, size, palette_size, yuyv;
50fe8c2806Swdenk } image_t;
51fe8c2806Swdenk 
52fe8c2806Swdenk void StringUpperCase (char *str)
53fe8c2806Swdenk {
54fe8c2806Swdenk 	int count = strlen (str);
55fe8c2806Swdenk 	char c;
56fe8c2806Swdenk 
576007f325SWolfgang Denk 	while (count--) {
58fe8c2806Swdenk 		c = *str;
59fe8c2806Swdenk 		if ((c >= 'a') && (c <= 'z'))
60fe8c2806Swdenk 			*str = 'A' + (c - 'a');
61fe8c2806Swdenk 		str++;
62fe8c2806Swdenk 	}
63fe8c2806Swdenk }
64fe8c2806Swdenk 
65fe8c2806Swdenk void StringLowerCase (char *str)
66fe8c2806Swdenk {
67fe8c2806Swdenk 	int count = strlen (str);
68fe8c2806Swdenk 	char c;
69fe8c2806Swdenk 
706007f325SWolfgang Denk 	while (count--) {
71fe8c2806Swdenk 		c = *str;
72fe8c2806Swdenk 		if ((c >= 'A') && (c <= 'Z'))
73fe8c2806Swdenk 			*str = 'a' + (c - 'A');
74fe8c2806Swdenk 		str++;
75fe8c2806Swdenk 	}
76fe8c2806Swdenk }
77fe8c2806Swdenk void pixel_rgb_to_yuyv (rgb_t * rgb_pixel, yuyv_t * yuyv_pixel)
78fe8c2806Swdenk {
79fe8c2806Swdenk 	unsigned int pR, pG, pB;
80fe8c2806Swdenk 
81fe8c2806Swdenk 	/* Transform (0-255) components to (0-100) */
82fe8c2806Swdenk 	pR = rgb_pixel->r * 100 / 255;
83fe8c2806Swdenk 	pG = rgb_pixel->g * 100 / 255;
84fe8c2806Swdenk 	pB = rgb_pixel->b * 100 / 255;
85fe8c2806Swdenk 
86fe8c2806Swdenk 	/* Calculate YUV values (0-255) from RGB beetween 0-100 */
87fe8c2806Swdenk 	yuyv_pixel->y1 = yuyv_pixel->y2 = 209 * (pR + pG + pB) / 300 + 16;
88fe8c2806Swdenk 	yuyv_pixel->Cb = pB - (pR / 4) - (pG * 3 / 4) + 128;
89fe8c2806Swdenk 	yuyv_pixel->Cr = pR - (pG * 3 / 4) - (pB / 4) + 128;
90fe8c2806Swdenk 
91fe8c2806Swdenk 	return;
92fe8c2806Swdenk }
93fe8c2806Swdenk 
94fe8c2806Swdenk void printlogo_rgb (rgb_t * data, int w, int h)
95fe8c2806Swdenk {
96fe8c2806Swdenk 	int x, y;
976007f325SWolfgang Denk 
986007f325SWolfgang Denk 	for (y = 0; y < h; y++) {
99fe8c2806Swdenk 		for (x = 0; x < w; x++, data++)
1006007f325SWolfgang Denk 			if ((data->r <
1016007f325SWolfgang Denk 			     30) /*&&(data->g == 0)&&(data->b == 0) */ )
102fe8c2806Swdenk 				printf (" ");
103fe8c2806Swdenk 			else
104fe8c2806Swdenk 				printf ("X");
105fe8c2806Swdenk 		printf ("\n");
106fe8c2806Swdenk 	}
107fe8c2806Swdenk }
108fe8c2806Swdenk 
109fe8c2806Swdenk void printlogo_yuyv (unsigned short *data, int w, int h)
110fe8c2806Swdenk {
111fe8c2806Swdenk 	int x, y;
1126007f325SWolfgang Denk 
1136007f325SWolfgang Denk 	for (y = 0; y < h; y++) {
114fe8c2806Swdenk 		for (x = 0; x < w; x++, data++)
115fe8c2806Swdenk 			if (*data == 0x1080)	/* Because of inverted on i386! */
116fe8c2806Swdenk 				printf (" ");
117fe8c2806Swdenk 			else
118fe8c2806Swdenk 				printf ("X");
119fe8c2806Swdenk 		printf ("\n");
120fe8c2806Swdenk 	}
121fe8c2806Swdenk }
122fe8c2806Swdenk 
123fc6414ecSMike Frysinger static inline unsigned short le16_to_cpu (unsigned short val)
124fc6414ecSMike Frysinger {
125fc6414ecSMike Frysinger 	union {
126fc6414ecSMike Frysinger 		unsigned char pval[2];
127fc6414ecSMike Frysinger 		unsigned short val;
128fc6414ecSMike Frysinger 	} swapped;
1296007f325SWolfgang Denk 
130fc6414ecSMike Frysinger 	swapped.val = val;
131fc6414ecSMike Frysinger 	return (swapped.pval[1] << 8) + swapped.pval[0];
132fc6414ecSMike Frysinger }
133fc6414ecSMike Frysinger 
134fe8c2806Swdenk int image_load_tga (image_t * image, char *filename)
135fe8c2806Swdenk {
136fe8c2806Swdenk 	FILE *file;
137fe8c2806Swdenk 	tga_header_t header;
138fe8c2806Swdenk 	int i;
139fe8c2806Swdenk 	unsigned char app;
140fe8c2806Swdenk 	rgb_t *p;
141fe8c2806Swdenk 
142fe8c2806Swdenk 	if ((file = fopen (filename, "rb")) == NULL)
143fe8c2806Swdenk 		return -1;
144fe8c2806Swdenk 
145fe8c2806Swdenk 	fread (&header, sizeof (header), 1, file);
146fe8c2806Swdenk 
147fc6414ecSMike Frysinger 	/* byte swap: tga is little endian, host is ??? */
148fc6414ecSMike Frysinger 	header.ColorMapOrigin = le16_to_cpu (header.ColorMapOrigin);
149fc6414ecSMike Frysinger 	header.ColorMapLenght = le16_to_cpu (header.ColorMapLenght);
150fc6414ecSMike Frysinger 	header.ImageXOrigin = le16_to_cpu (header.ImageXOrigin);
151fc6414ecSMike Frysinger 	header.ImageYOrigin = le16_to_cpu (header.ImageYOrigin);
152fc6414ecSMike Frysinger 	header.ImageWidth = le16_to_cpu (header.ImageWidth);
153fc6414ecSMike Frysinger 	header.ImageHeight = le16_to_cpu (header.ImageHeight);
154fc6414ecSMike Frysinger 
155fe8c2806Swdenk 	image->width = header.ImageWidth;
156fe8c2806Swdenk 	image->height = header.ImageHeight;
157fe8c2806Swdenk 
158fe8c2806Swdenk 	switch (header.ImageTypeCode) {
159fe8c2806Swdenk 	case 2:		/* Uncompressed RGB */
160fe8c2806Swdenk 		image->yuyv = 0;
161fe8c2806Swdenk 		image->palette_size = 0;
162fe8c2806Swdenk 		image->palette = NULL;
163fe8c2806Swdenk 		break;
164fe8c2806Swdenk 
165fe8c2806Swdenk 	default:
166fe8c2806Swdenk 		printf ("Format not supported!\n");
167fe8c2806Swdenk 		return -1;
168fe8c2806Swdenk 	}
169fe8c2806Swdenk 
170fe8c2806Swdenk 	image->bpp = header.ImagePixelSize;
171fe8c2806Swdenk 	image->pixel_size = ((image->bpp - 1) / 8) + 1;
172fe8c2806Swdenk 	image->pixels = image->width * image->height;
173fe8c2806Swdenk 	image->size = image->pixels * image->pixel_size;
174fe8c2806Swdenk 	image->data = malloc (image->size);
175fe8c2806Swdenk 
1766007f325SWolfgang Denk 	if (image->bpp != 24) {
177fe8c2806Swdenk 		printf ("Bpp not supported: %d!\n", image->bpp);
178fe8c2806Swdenk 		return -1;
179fe8c2806Swdenk 	}
180fe8c2806Swdenk 
181fe8c2806Swdenk 	fread (image->data, image->size, 1, file);
182fe8c2806Swdenk 
183fe8c2806Swdenk /* Swapping R and B values */
184fe8c2806Swdenk 
185fe8c2806Swdenk 	p = image->data;
1866007f325SWolfgang Denk 	for (i = 0; i < image->pixels; i++, p++) {
187fe8c2806Swdenk 		app = p->r;
188fe8c2806Swdenk 		p->r = p->b;
189fe8c2806Swdenk 		p->b = app;
190fe8c2806Swdenk 	}
191fe8c2806Swdenk 
192fe8c2806Swdenk /* Swapping image */
193fe8c2806Swdenk 
1946007f325SWolfgang Denk 	if (!(header.ImageDescriptorByte & 0x20)) {
195fe8c2806Swdenk 		unsigned char *temp = malloc (image->size);
196fe8c2806Swdenk 		int linesize = image->pixel_size * image->width;
197fe8c2806Swdenk 		void *dest = image->data,
198fe8c2806Swdenk 			*source = temp + image->size - linesize;
199fe8c2806Swdenk 
200fe8c2806Swdenk 		printf ("S");
2016007f325SWolfgang Denk 		if (temp == NULL) {
202fe8c2806Swdenk 			printf ("Cannot alloc temp buffer!\n");
203fe8c2806Swdenk 			return -1;
204fe8c2806Swdenk 		}
205fe8c2806Swdenk 
206fe8c2806Swdenk 		memcpy (temp, image->data, image->size);
2076007f325SWolfgang Denk 		for (i = 0; i < image->height;
2086007f325SWolfgang Denk 		     i++, dest += linesize, source -= linesize)
209fe8c2806Swdenk 			memcpy (dest, source, linesize);
210fe8c2806Swdenk 
211fe8c2806Swdenk 		free (temp);
212fe8c2806Swdenk 	}
213fe8c2806Swdenk #ifdef ENABLE_ASCII_BANNERS
214fe8c2806Swdenk 	printlogo_rgb (image->data, image->width, image->height);
215fe8c2806Swdenk #endif
216fe8c2806Swdenk 
217fe8c2806Swdenk 	fclose (file);
218fe8c2806Swdenk 	return 0;
219fe8c2806Swdenk }
220fe8c2806Swdenk 
221*edfed1d9SMike Frysinger void image_free (image_t * image)
222fe8c2806Swdenk {
223fe8c2806Swdenk 	free (image->data);
224fe8c2806Swdenk 	free (image->palette);
225fe8c2806Swdenk }
226fe8c2806Swdenk 
227fe8c2806Swdenk int image_rgb_to_yuyv (image_t * rgb_image, image_t * yuyv_image)
228fe8c2806Swdenk {
229fe8c2806Swdenk 	rgb_t *rgb_ptr = (rgb_t *) rgb_image->data;
230fe8c2806Swdenk 	yuyv_t yuyv;
231fe8c2806Swdenk 	unsigned short *dest;
232fe8c2806Swdenk 	int count = 0;
233fe8c2806Swdenk 
234fe8c2806Swdenk 	yuyv_image->pixel_size = 2;
235fe8c2806Swdenk 	yuyv_image->bpp = 16;
236fe8c2806Swdenk 	yuyv_image->yuyv = 1;
237fe8c2806Swdenk 	yuyv_image->width = rgb_image->width;
238fe8c2806Swdenk 	yuyv_image->height = rgb_image->height;
239fe8c2806Swdenk 	yuyv_image->pixels = yuyv_image->width * yuyv_image->height;
240fe8c2806Swdenk 	yuyv_image->size = yuyv_image->pixels * yuyv_image->pixel_size;
2416007f325SWolfgang Denk 	dest = (unsigned short *) (yuyv_image->data =
2426007f325SWolfgang Denk 				   malloc (yuyv_image->size));
243fe8c2806Swdenk 	yuyv_image->palette = 0;
244fe8c2806Swdenk 	yuyv_image->palette_size = 0;
245fe8c2806Swdenk 
2466007f325SWolfgang Denk 	while ((count++) < rgb_image->pixels) {
247fe8c2806Swdenk 		pixel_rgb_to_yuyv (rgb_ptr++, &yuyv);
248fe8c2806Swdenk 
249fe8c2806Swdenk 		if ((count & 1) == 0)	/* Was == 0 */
250fe8c2806Swdenk 			memcpy (dest, ((void *) &yuyv) + 2, sizeof (short));
251fe8c2806Swdenk 		else
252fe8c2806Swdenk 			memcpy (dest, (void *) &yuyv, sizeof (short));
253fe8c2806Swdenk 
254fe8c2806Swdenk 		dest++;
255fe8c2806Swdenk 	}
256fe8c2806Swdenk 
257fe8c2806Swdenk #ifdef ENABLE_ASCII_BANNERS
2586007f325SWolfgang Denk 	printlogo_yuyv (yuyv_image->data, yuyv_image->width,
2596007f325SWolfgang Denk 			yuyv_image->height);
260fe8c2806Swdenk #endif
261fe8c2806Swdenk 	return 0;
262fe8c2806Swdenk }
263fe8c2806Swdenk 
264fe8c2806Swdenk int image_save_header (image_t * image, char *filename, char *varname)
265fe8c2806Swdenk {
266fe8c2806Swdenk 	FILE *file = fopen (filename, "w");
267fe8c2806Swdenk 	char app[256], str[256] = "", def_name[64];
268fe8c2806Swdenk 	int count = image->size, col = 0;
269fe8c2806Swdenk 	unsigned char *dataptr = image->data;
2706007f325SWolfgang Denk 
271fe8c2806Swdenk 	if (file == NULL)
272fe8c2806Swdenk 		return -1;
273fe8c2806Swdenk 
27447cd00faSwdenk 	/*  Author information */
2756007f325SWolfgang Denk 	fprintf (file,
2766007f325SWolfgang Denk 		 "/*\n * Generated by EasyLogo, (C) 2000 by Paolo Scaffardi\n *\n");
2776007f325SWolfgang Denk 	fprintf (file,
2786007f325SWolfgang Denk 		 " * To use this, include it and call: easylogo_plot(screen,&%s, width,x,y)\n *\n",
2796007f325SWolfgang Denk 		 varname);
2806007f325SWolfgang Denk 	fprintf (file,
2816007f325SWolfgang Denk 		 " * Where:\t'screen'\tis the pointer to the frame buffer\n");
282fe8c2806Swdenk 	fprintf (file, " *\t\t'width'\tis the screen width\n");
283fe8c2806Swdenk 	fprintf (file, " *\t\t'x'\t\tis the horizontal position\n");
284fe8c2806Swdenk 	fprintf (file, " *\t\t'y'\t\tis the vertical position\n */\n\n");
285fe8c2806Swdenk 
286fe8c2806Swdenk 	/*	Headers */
287fe8c2806Swdenk 	fprintf (file, "#include <video_easylogo.h>\n\n");
288fe8c2806Swdenk 	/*	Macros */
289fe8c2806Swdenk 	strcpy (def_name, varname);
290fe8c2806Swdenk 	StringUpperCase (def_name);
2916007f325SWolfgang Denk 	fprintf (file, "#define	DEF_%s_WIDTH\t\t%d\n", def_name,
2926007f325SWolfgang Denk 		 image->width);
2936007f325SWolfgang Denk 	fprintf (file, "#define	DEF_%s_HEIGHT\t\t%d\n", def_name,
2946007f325SWolfgang Denk 		 image->height);
2956007f325SWolfgang Denk 	fprintf (file, "#define	DEF_%s_PIXELS\t\t%d\n", def_name,
2966007f325SWolfgang Denk 		 image->pixels);
297fe8c2806Swdenk 	fprintf (file, "#define	DEF_%s_BPP\t\t%d\n", def_name, image->bpp);
2986007f325SWolfgang Denk 	fprintf (file, "#define	DEF_%s_PIXEL_SIZE\t%d\n", def_name,
2996007f325SWolfgang Denk 		 image->pixel_size);
3006007f325SWolfgang Denk 	fprintf (file, "#define	DEF_%s_SIZE\t\t%d\n\n", def_name,
3016007f325SWolfgang Denk 		 image->size);
302fe8c2806Swdenk 	/*  Declaration */
3036007f325SWolfgang Denk 	fprintf (file, "unsigned char DEF_%s_DATA[DEF_%s_SIZE] = {\n",
3046007f325SWolfgang Denk 		 def_name, def_name);
305fe8c2806Swdenk 
306fe8c2806Swdenk 	/*	Data */
307fe8c2806Swdenk 	while (count)
308fe8c2806Swdenk 		switch (col) {
309fe8c2806Swdenk 		case 0:
310fe8c2806Swdenk 			sprintf (str, " 0x%02x", *dataptr++);
311fe8c2806Swdenk 			col++;
312fe8c2806Swdenk 			count--;
313fe8c2806Swdenk 			break;
314fe8c2806Swdenk 
315fe8c2806Swdenk 		case 16:
316fe8c2806Swdenk 			fprintf (file, "%s", str);
317fe8c2806Swdenk 			if (count > 0)
318fe8c2806Swdenk 				fprintf (file, ",");
319fe8c2806Swdenk 			fprintf (file, "\n");
320fe8c2806Swdenk 
321fe8c2806Swdenk 			col = 0;
322fe8c2806Swdenk 			break;
323fe8c2806Swdenk 
324fe8c2806Swdenk 		default:
325fe8c2806Swdenk 			strcpy (app, str);
326fe8c2806Swdenk 			sprintf (str, "%s, 0x%02x", app, *dataptr++);
327fe8c2806Swdenk 			col++;
328fe8c2806Swdenk 			count--;
329fe8c2806Swdenk 			break;
330fe8c2806Swdenk 		}
331fe8c2806Swdenk 
332fe8c2806Swdenk 	if (col)
333fe8c2806Swdenk 		fprintf (file, "%s\n", str);
334fe8c2806Swdenk 
335fe8c2806Swdenk 	/* 	End of declaration */
336fe8c2806Swdenk 	fprintf (file, "};\n\n");
337fe8c2806Swdenk 	/*	Variable */
338fe8c2806Swdenk 	fprintf (file, "fastimage_t %s = {\n", varname);
339fe8c2806Swdenk 	fprintf (file, "		DEF_%s_DATA,\n", def_name);
340fe8c2806Swdenk 	fprintf (file, "		DEF_%s_WIDTH,\n", def_name);
341fe8c2806Swdenk 	fprintf (file, "		DEF_%s_HEIGHT,\n", def_name);
342fe8c2806Swdenk 	fprintf (file, "		DEF_%s_BPP,\n", def_name);
343fe8c2806Swdenk 	fprintf (file, "		DEF_%s_PIXEL_SIZE,\n", def_name);
344fe8c2806Swdenk 	fprintf (file, "		DEF_%s_SIZE\n};\n", def_name);
345fe8c2806Swdenk 
346fe8c2806Swdenk 	fclose (file);
347fe8c2806Swdenk 
348fe8c2806Swdenk 	return 0;
349fe8c2806Swdenk }
350fe8c2806Swdenk 
351fe8c2806Swdenk #define DEF_FILELEN	256
352fe8c2806Swdenk 
353*edfed1d9SMike Frysinger static void usage (int exit_status)
354*edfed1d9SMike Frysinger {
355*edfed1d9SMike Frysinger 	puts (
356*edfed1d9SMike Frysinger 		"EasyLogo 1.0 (C) 2000 by Paolo Scaffardi\n"
357*edfed1d9SMike Frysinger 		"\n"
358*edfed1d9SMike Frysinger 		"Syntax:	easylogo [options] inputfile [outputvar [outputfile]]\n"
359*edfed1d9SMike Frysinger 		"\n"
360*edfed1d9SMike Frysinger 		"Options:\n"
361*edfed1d9SMike Frysinger 		"  -r     Output RGB instead of YUYV\n"
362*edfed1d9SMike Frysinger 		"  -h     Help output\n"
363*edfed1d9SMike Frysinger 		"\n"
364*edfed1d9SMike Frysinger 		"Where: 'inputfile'   is the TGA image to load\n"
365*edfed1d9SMike Frysinger 		"       'outputvar'   is the variable name to create\n"
366*edfed1d9SMike Frysinger 		"       'outputfile'  is the output header file (default is 'inputfile.h')"
367*edfed1d9SMike Frysinger 	);
368*edfed1d9SMike Frysinger 	exit (exit_status);
369*edfed1d9SMike Frysinger }
370*edfed1d9SMike Frysinger 
371fe8c2806Swdenk int main (int argc, char *argv[])
372fe8c2806Swdenk {
373*edfed1d9SMike Frysinger 	int c;
374*edfed1d9SMike Frysinger 	bool use_rgb = false;
3756007f325SWolfgang Denk 	char inputfile[DEF_FILELEN],
3766007f325SWolfgang Denk 		outputfile[DEF_FILELEN], varname[DEF_FILELEN];
377fe8c2806Swdenk 
378fe8c2806Swdenk 	image_t rgb_logo, yuyv_logo;
379fe8c2806Swdenk 
380*edfed1d9SMike Frysinger 	while ((c = getopt(argc, argv, "hr")) > 0) {
381*edfed1d9SMike Frysinger 		switch (c) {
382*edfed1d9SMike Frysinger 		case 'h':
383*edfed1d9SMike Frysinger 			usage (0);
384fe8c2806Swdenk 			break;
385*edfed1d9SMike Frysinger 		case 'r':
386*edfed1d9SMike Frysinger 			use_rgb = true;
387*edfed1d9SMike Frysinger 			puts ("Using 24-bit RGB Output Fromat");
388*edfed1d9SMike Frysinger 			break;
389fe8c2806Swdenk 		default:
390*edfed1d9SMike Frysinger 			usage (1);
391*edfed1d9SMike Frysinger 			break;
392fe8c2806Swdenk 		}
393*edfed1d9SMike Frysinger 	}
394*edfed1d9SMike Frysinger 
395*edfed1d9SMike Frysinger 	c = argc - optind;
396*edfed1d9SMike Frysinger 	if (c > 4 || c < 1)
397*edfed1d9SMike Frysinger 		usage (1);
398*edfed1d9SMike Frysinger 
399*edfed1d9SMike Frysinger 	strcpy (inputfile, argv[optind]);
400*edfed1d9SMike Frysinger 
401*edfed1d9SMike Frysinger 	if (c > 1)
402*edfed1d9SMike Frysinger 		strcpy (varname, argv[optind + 1]);
403*edfed1d9SMike Frysinger 	else {
404*edfed1d9SMike Frysinger 		/* transform "input.tga" to just "input" */
405*edfed1d9SMike Frysinger 		char *dot;
406*edfed1d9SMike Frysinger 		strcpy (varname, inputfile);
407*edfed1d9SMike Frysinger 		dot = strchr (varname, '.');
408*edfed1d9SMike Frysinger 		if (dot)
409*edfed1d9SMike Frysinger 			*dot = '\0';
410*edfed1d9SMike Frysinger 	}
411*edfed1d9SMike Frysinger 
412*edfed1d9SMike Frysinger 	if (c > 2)
413*edfed1d9SMike Frysinger 		strcpy (outputfile, argv[optind + 2]);
414*edfed1d9SMike Frysinger 	else {
415*edfed1d9SMike Frysinger 		/* just append ".h" to input file name */
416*edfed1d9SMike Frysinger 		strcpy (outputfile, inputfile);
417*edfed1d9SMike Frysinger 		strcat (outputfile, ".h");
418*edfed1d9SMike Frysinger 	}
419*edfed1d9SMike Frysinger 
420*edfed1d9SMike Frysinger 	/* Make sure the output is sent as soon as we printf() */
421*edfed1d9SMike Frysinger 	setbuf(stdout, NULL);
422fe8c2806Swdenk 
423fe8c2806Swdenk 	printf ("Doing '%s' (%s) from '%s'...",
424fe8c2806Swdenk 		outputfile, varname, inputfile);
425fe8c2806Swdenk 
426fe8c2806Swdenk 	/* Import TGA logo */
427fe8c2806Swdenk 
428fe8c2806Swdenk 	printf ("L");
4296007f325SWolfgang Denk 	if (image_load_tga (&rgb_logo, inputfile) < 0) {
430fe8c2806Swdenk 		printf ("input file not found!\n");
431fe8c2806Swdenk 		exit (1);
432fe8c2806Swdenk 	}
433fe8c2806Swdenk 
434*edfed1d9SMike Frysinger 	/* Convert it to YUYV format if wanted */
435fe8c2806Swdenk 
436*edfed1d9SMike Frysinger 	if (!use_rgb) {
437fe8c2806Swdenk 		printf ("C");
438fe8c2806Swdenk 		image_rgb_to_yuyv (&rgb_logo, &yuyv_logo);
439*edfed1d9SMike Frysinger 	}
440fe8c2806Swdenk 
441fe8c2806Swdenk 	/* Save it into a header format */
442fe8c2806Swdenk 
443fe8c2806Swdenk 	printf ("S");
444*edfed1d9SMike Frysinger 	image_save_header (use_rgb ? &rgb_logo : &yuyv_logo, outputfile, varname);
445fe8c2806Swdenk 
446fe8c2806Swdenk 	/* Free original image and copy */
447fe8c2806Swdenk 
448fe8c2806Swdenk 	image_free (&rgb_logo);
449*edfed1d9SMike Frysinger 	if (!use_rgb)
450fe8c2806Swdenk 		image_free (&yuyv_logo);
451fe8c2806Swdenk 
452fe8c2806Swdenk 	printf ("\n");
453fe8c2806Swdenk 
454fe8c2806Swdenk 	return 0;
455fe8c2806Swdenk }
456