@ -7,6 +7,8 @@
* * This is still under construction !
*/
# include <getopt.h>
# include <stdbool.h>
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
@ -216,15 +218,10 @@ int image_load_tga (image_t * image, char *filename)
return 0 ;
}
int image_free ( image_t * image )
void image_free ( image_t * image )
{
if ( image - > data ! = NULL )
free ( image - > data ) ;
if ( image - > palette ! = NULL )
free ( image - > palette ) ;
return 0 ;
free ( image - > data ) ;
free ( image - > palette ) ;
}
int image_rgb_to_yuyv ( image_t * rgb_image , image_t * yuyv_image )
@ -353,59 +350,76 @@ int image_save_header (image_t * image, char *filename, char *varname)
# define DEF_FILELEN 256
static void usage ( int exit_status )
{
puts (
" EasyLogo 1.0 (C) 2000 by Paolo Scaffardi \n "
" \n "
" Syntax: easylogo [options] inputfile [outputvar [outputfile]] \n "
" \n "
" Options: \n "
" -r Output RGB instead of YUYV \n "
" -h Help output \n "
" \n "
" Where: 'inputfile' is the TGA image to load \n "
" 'outputvar' is the variable name to create \n "
" 'outputfile' is the output header file (default is 'inputfile.h') "
) ;
exit ( exit_status ) ;
}
int main ( int argc , char * argv [ ] )
{
int c ;
bool use_rgb = false ;
char inputfile [ DEF_FILELEN ] ,
outputfile [ DEF_FILELEN ] , varname [ DEF_FILELEN ] ;
image_t rgb_logo , yuyv_logo ;
switch ( argc ) {
case 2 :
case 3 :
case 4 :
strcpy ( inputfile , argv [ 1 ] ) ;
if ( argc > 2 )
strcpy ( varname , argv [ 2 ] ) ;
else {
char * dot = strchr ( inputfile , ' . ' ) ;
int pos = dot - inputfile ;
if ( dot ) {
strncpy ( varname , inputfile , pos ) ;
varname [ pos ] = 0 ;
}
}
if ( argc > 3 )
strcpy ( outputfile , argv [ 3 ] ) ;
else {
char * dot = strchr ( varname , ' . ' ) ;
int pos = dot - varname ;
if ( dot ) {
char app [ DEF_FILELEN ] ;
strncpy ( app , varname , pos ) ;
app [ pos ] = 0 ;
sprintf ( outputfile , " %s.h " , app ) ;
}
while ( ( c = getopt ( argc , argv , " hr " ) ) > 0 ) {
switch ( c ) {
case ' h ' :
usage ( 0 ) ;
break ;
case ' r ' :
use_rgb = true ;
puts ( " Using 24-bit RGB Output Fromat " ) ;
break ;
default :
usage ( 1 ) ;
break ;
}
break ;
default :
printf ( " EasyLogo 1.0 (C) 2000 by Paolo Scaffardi \n \n " ) ;
}
printf ( " Syntax: easylogo inputfile [outputvar {outputfile}] \n " ) ;
printf ( " \n " ) ;
printf ( " Where: 'inputfile' is the TGA image to load \n " ) ;
printf ( " 'outputvar' is the variable name to create \n " ) ;
printf ( " 'outputfile' is the output header file (default is 'inputfile.h') \n " ) ;
c = argc - optind ;
if ( c > 4 | | c < 1 )
usage ( 1 ) ;
strcpy ( inputfile , argv [ optind ] ) ;
if ( c > 1 )
strcpy ( varname , argv [ optind + 1 ] ) ;
else {
/* transform "input.tga" to just "input" */
char * dot ;
strcpy ( varname , inputfile ) ;
dot = strchr ( varname , ' . ' ) ;
if ( dot )
* dot = ' \0 ' ;
}
return - 1 ;
if ( c > 2 )
strcpy ( outputfile , argv [ optind + 2 ] ) ;
else {
/* just append ".h" to input file name */
strcpy ( outputfile , inputfile ) ;
strcat ( outputfile , " .h " ) ;
}
/* Make sure the output is sent as soon as we printf() */
setbuf ( stdout , NULL ) ;
printf ( " Doing '%s' (%s) from '%s'... " ,
outputfile , varname , inputfile ) ;
@ -417,20 +431,23 @@ int main (int argc, char *argv[])
exit ( 1 ) ;
}
/* Convert it to YUYV format */
/* Convert it to YUYV format if wanted */
printf ( " C " ) ;
image_rgb_to_yuyv ( & rgb_logo , & yuyv_logo ) ;
if ( ! use_rgb ) {
printf ( " C " ) ;
image_rgb_to_yuyv ( & rgb_logo , & yuyv_logo ) ;
}
/* Save it into a header format */
printf ( " S " ) ;
image_save_header ( & yuyv_logo , outputfile , varname ) ;
image_save_header ( use_rgb ? & rgb_logo : & yuyv_logo , outputfile , varname ) ;
/* Free original image and copy */
image_free ( & rgb_logo ) ;
image_free ( & yuyv_logo ) ;
if ( ! use_rgb )
image_free ( & yuyv_logo ) ;
printf ( " \n " ) ;