2005-04-17 02:20:36 +04:00
/*
* linux / drivers / video / fonts . c - - ` Soft ' font definitions
*
* Created 1995 by Geert Uytterhoeven
* Rewritten 1998 by Martin Mares < mj @ ucw . cz >
*
* 2001 - Documented with DocBook
* - Brad Douglas < brad @ neruo . com >
*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file COPYING in the main directory of this archive
* for more details .
*/
# include <linux/module.h>
# include <linux/types.h>
# include <linux/string.h>
# if defined(__mc68000__) || defined(CONFIG_APUS)
# include <asm/setup.h>
# endif
# include <linux/font.h>
# define NO_FONTS
2005-09-13 12:25:44 +04:00
static const struct font_desc * fonts [ ] = {
2005-04-17 02:20:36 +04:00
# ifdef CONFIG_FONT_8x8
# undef NO_FONTS
& font_vga_8x8 ,
# endif
# ifdef CONFIG_FONT_8x16
# undef NO_FONTS
& font_vga_8x16 ,
# endif
# ifdef CONFIG_FONT_6x11
# undef NO_FONTS
& font_vga_6x11 ,
# endif
2005-06-22 04:17:06 +04:00
# ifdef CONFIG_FONT_7x14
# undef NO_FONTS
& font_7x14 ,
# endif
2005-04-17 02:20:36 +04:00
# ifdef CONFIG_FONT_SUN8x16
# undef NO_FONTS
& font_sun_8x16 ,
# endif
# ifdef CONFIG_FONT_SUN12x22
# undef NO_FONTS
& font_sun_12x22 ,
# endif
2005-06-22 04:17:06 +04:00
# ifdef CONFIG_FONT_10x18
# undef NO_FONTS
& font_10x18 ,
# endif
2005-04-17 02:20:36 +04:00
# ifdef CONFIG_FONT_ACORN_8x8
# undef NO_FONTS
& font_acorn_8x8 ,
# endif
# ifdef CONFIG_FONT_PEARL_8x8
# undef NO_FONTS
& font_pearl_8x8 ,
# endif
# ifdef CONFIG_FONT_MINI_4x6
# undef NO_FONTS
& font_mini_4x6 ,
# endif
} ;
2006-03-27 13:17:39 +04:00
# define num_fonts ARRAY_SIZE(fonts)
2005-04-17 02:20:36 +04:00
# ifdef NO_FONTS
# error No fonts configured.
# endif
/**
* find_font - find a font
* @ name : string name of a font
*
* Find a specified font with string name @ name .
*
* Returns % NULL if no font found , or a pointer to the
* specified font .
*
*/
2005-09-13 12:25:44 +04:00
const struct font_desc * find_font ( const char * name )
2005-04-17 02:20:36 +04:00
{
unsigned int i ;
for ( i = 0 ; i < num_fonts ; i + + )
if ( ! strcmp ( fonts [ i ] - > name , name ) )
return fonts [ i ] ;
return NULL ;
}
/**
* get_default_font - get default font
* @ xres : screen size of X
* @ yres : screen size of Y
2007-05-08 11:39:11 +04:00
* @ font_w : bit array of supported widths ( 1 - 32 )
* @ font_h : bit array of supported heights ( 1 - 32 )
2005-04-17 02:20:36 +04:00
*
* Get the default font for a specified screen size .
* Dimensions are in pixels .
*
* Returns % NULL if no font is found , or a pointer to the
* chosen font .
*
*/
2007-05-08 11:39:11 +04:00
const struct font_desc * get_default_font ( int xres , int yres , u32 font_w ,
u32 font_h )
2005-04-17 02:20:36 +04:00
{
int i , c , cc ;
2005-09-13 12:25:44 +04:00
const struct font_desc * f , * g ;
2005-04-17 02:20:36 +04:00
g = NULL ;
cc = - 10000 ;
for ( i = 0 ; i < num_fonts ; i + + ) {
f = fonts [ i ] ;
c = f - > pref ;
# if defined(__mc68000__) || defined(CONFIG_APUS)
# ifdef CONFIG_FONT_PEARL_8x8
if ( MACH_IS_AMIGA & & f - > idx = = PEARL8x8_IDX )
c = 100 ;
# endif
# ifdef CONFIG_FONT_6x11
if ( MACH_IS_MAC & & xres < 640 & & f - > idx = = VGA6x11_IDX )
c = 100 ;
# endif
# endif
if ( ( yres < 400 ) = = ( f - > height < = 8 ) )
c + = 1000 ;
2007-05-08 11:39:11 +04:00
2007-07-31 11:37:36 +04:00
if ( ( font_w & ( 1 < < ( f - > width - 1 ) ) ) & &
( font_h & ( 1 < < ( f - > height - 1 ) ) ) )
2007-05-08 11:39:11 +04:00
c + = 1000 ;
2005-04-17 02:20:36 +04:00
if ( c > cc ) {
cc = c ;
g = f ;
}
}
return g ;
}
EXPORT_SYMBOL ( find_font ) ;
EXPORT_SYMBOL ( get_default_font ) ;
MODULE_AUTHOR ( " James Simmons <jsimmons@users.sf.net> " ) ;
MODULE_DESCRIPTION ( " Console Fonts " ) ;
MODULE_LICENSE ( " GPL " ) ;