@ -1,5 +1,10 @@
# include "compiler.h"
enum {
MODE_GEN_INFO ,
MODE_GEN_DATA
} ;
typedef struct bitmap_s { /* bitmap description */
uint16_t width ;
uint16_t height ;
@ -9,6 +14,11 @@ typedef struct bitmap_s { /* bitmap description */
# define DEFAULT_CMAP_SIZE 16 /* size of default color map */
void usage ( const char * prog )
{
fprintf ( stderr , " Usage: %s [--gen-info|--gen-data] file \n " , prog ) ;
}
/*
* Neutralize little endians .
*/
@ -39,21 +49,52 @@ int error (char * msg, FILE *fp)
exit ( EXIT_FAILURE ) ;
}
void gen_info ( bitmap_t * b , uint16_t n_colors )
{
printf ( " /* \n "
" * Automatically generated by \" tools/bmp_logo \" \n "
" * \n "
" * DO NOT EDIT \n "
" * \n "
" */ \n \n \n "
" #ifndef __BMP_LOGO_H__ \n "
" #define __BMP_LOGO_H__ \n \n "
" #define BMP_LOGO_WIDTH \t \t %d \n "
" #define BMP_LOGO_HEIGHT \t \t %d \n "
" #define BMP_LOGO_COLORS \t \t %d \n "
" #define BMP_LOGO_OFFSET \t \t %d \n \n "
" extern unsigned short bmp_logo_palette[]; \n "
" extern unsigned char bmp_logo_bitmap[]; \n \n "
" #endif /* __BMP_LOGO_H__ */ \n " ,
b - > width , b - > height , n_colors ,
DEFAULT_CMAP_SIZE ) ;
}
int main ( int argc , char * argv [ ] )
{
int i , x ;
int mode , i , x ;
FILE * fp ;
bitmap_t bmp ;
bitmap_t * b = & bmp ;
uint16_t data_offset , n_colors ;
if ( argc < 2 ) {
fprintf ( stderr , " Usage: %s file \n " , argv [ 0 ] ) ;
if ( argc < 3 ) {
usage ( argv [ 0 ] ) ;
exit ( EXIT_FAILURE ) ;
}
if ( ( fp = fopen ( argv [ 1 ] , " rb " ) ) = = NULL ) {
perror ( argv [ 1 ] ) ;
if ( ! strcmp ( argv [ 1 ] , " --gen-info " ) )
mode = MODE_GEN_INFO ;
else if ( ! strcmp ( argv [ 1 ] , " --gen-data " ) )
mode = MODE_GEN_DATA ;
else {
usage ( argv [ 0 ] ) ;
exit ( EXIT_FAILURE ) ;
}
fp = fopen ( argv [ 2 ] , " rb " ) ;
if ( ! fp ) {
perror ( argv [ 2 ] ) ;
exit ( EXIT_FAILURE ) ;
}
@ -92,28 +133,26 @@ int main (int argc, char *argv[])
n_colors = 256 - DEFAULT_CMAP_SIZE ;
}
printf ( " /* \n "
if ( mode = = MODE_GEN_INFO ) {
gen_info ( b , n_colors ) ;
goto out ;
}
printf ( " /* \n "
" * Automatically generated by \" tools/bmp_logo \" \n "
" * \n "
" * DO NOT EDIT \n "
" * \n "
" */ \n \n \n "
" #ifndef __BMP_LOGO_H__ \n "
" #define __BMP_LOGO_H__ \n \n "
" #define BMP_LOGO_WIDTH \t \t %d \n "
" #define BMP_LOGO_HEIGHT \t \t %d \n "
" #define BMP_LOGO_COLORS \t \t %d \n "
" #define BMP_LOGO_OFFSET \t \t %d \n "
" \n " ,
b - > width , b - > height , n_colors ,
DEFAULT_CMAP_SIZE ) ;
" #ifndef __BMP_LOGO_DATA_H__ \n "
" #define __BMP_LOGO_DATA_H__ \n \n " ) ;
/* allocate memory */
if ( ( b - > data = ( uint8_t * ) malloc ( b - > width * b - > height ) ) = = NULL )
error ( " Error allocating memory for file " , fp ) ;
/* read and print the palette information */
printf ( " unsigned short bmp_logo_palette[] = { \n " ) ;
printf ( " unsigned short bmp_logo_palette[] = { \n " ) ;
for ( i = 0 ; i < n_colors ; + + i ) {
b - > palette [ ( int ) ( i * 3 + 2 ) ] = fgetc ( fp ) ;
@ -137,14 +176,13 @@ int main (int argc, char *argv[])
printf ( " \n " ) ;
printf ( " }; \n " ) ;
printf ( " \n " ) ;
printf ( " unsigned char bmp_logo_bitmap[] = { \n " ) ;
printf ( " unsigned char bmp_logo_bitmap[] = { \n " ) ;
for ( i = ( b - > height - 1 ) * b - > width ; i > = 0 ; i - = b - > width ) {
for ( x = 0 ; x < b - > width ; x + + ) {
b - > data [ ( uint16_t ) i + x ] = ( uint8_t ) fgetc ( fp ) \
+ DEFAULT_CMAP_SIZE ;
}
}
fclose ( fp ) ;
for ( i = 0 ; i < ( b - > height * b - > width ) ; + + i ) {
if ( ( i % 8 ) = = 0 )
@ -156,8 +194,10 @@ int main (int argc, char *argv[])
}
printf ( " \n "
" }; \n \n "
" #endif /* __BMP_LOGO_H__ */ \n "
" #endif /* __BMP_LOGO_DATA_ H__ */ \n "
) ;
return ( 0 ) ;
out :
fclose ( fp ) ;
return 0 ;
}