2005-04-17 02:20:36 +04:00
/*
2013-06-09 13:46:43 +04:00
* ` Soft ' font definitions
2005-04-17 02:20:36 +04:00
*
* 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>
2008-02-06 12:36:29 +03:00
# if defined(__mc68000__)
2005-04-17 02:20:36 +04:00
# include <asm/setup.h>
# endif
# include <linux/font.h>
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
2019-06-18 23:34:23 +03:00
& font_vga_8x8 ,
2005-04-17 02:20:36 +04:00
# endif
# ifdef CONFIG_FONT_8x16
2019-06-18 23:34:23 +03:00
& font_vga_8x16 ,
2005-04-17 02:20:36 +04:00
# endif
# ifdef CONFIG_FONT_6x11
2019-06-18 23:34:23 +03:00
& font_vga_6x11 ,
2005-04-17 02:20:36 +04:00
# endif
2005-06-22 04:17:06 +04:00
# ifdef CONFIG_FONT_7x14
2019-06-18 23:34:23 +03:00
& font_7x14 ,
2005-06-22 04:17:06 +04:00
# endif
2005-04-17 02:20:36 +04:00
# ifdef CONFIG_FONT_SUN8x16
2019-06-18 23:34:23 +03:00
& font_sun_8x16 ,
2005-04-17 02:20:36 +04:00
# endif
# ifdef CONFIG_FONT_SUN12x22
2019-06-18 23:34:23 +03:00
& font_sun_12x22 ,
2005-04-17 02:20:36 +04:00
# endif
2005-06-22 04:17:06 +04:00
# ifdef CONFIG_FONT_10x18
2019-06-18 23:34:23 +03:00
& font_10x18 ,
2005-06-22 04:17:06 +04:00
# endif
2005-04-17 02:20:36 +04:00
# ifdef CONFIG_FONT_ACORN_8x8
2019-06-18 23:34:23 +03:00
& font_acorn_8x8 ,
2005-04-17 02:20:36 +04:00
# endif
# ifdef CONFIG_FONT_PEARL_8x8
2019-06-18 23:34:23 +03:00
& font_pearl_8x8 ,
2005-04-17 02:20:36 +04:00
# endif
# ifdef CONFIG_FONT_MINI_4x6
2019-06-18 23:34:23 +03:00
& font_mini_4x6 ,
2005-04-17 02:20:36 +04:00
# endif
2014-09-09 15:46:28 +04:00
# ifdef CONFIG_FONT_6x10
2019-06-18 23:34:23 +03:00
& font_6x10 ,
2014-09-09 15:46:28 +04:00
# endif
2018-12-06 02:56:37 +03:00
# ifdef CONFIG_FONT_TER16x32
2019-06-18 23:34:23 +03:00
& font_ter_16x32 ,
2018-12-06 02:56:37 +03:00
# endif
2020-08-20 11:21:37 +03:00
# ifdef CONFIG_FONT_6x8
& font_6x8 ,
# endif
2005-04-17 02:20:36 +04:00
} ;
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
{
2019-06-18 23:34:23 +03:00
unsigned int i ;
2005-04-17 02:20:36 +04:00
2019-06-18 23:34:24 +03:00
BUILD_BUG_ON ( ! num_fonts ) ;
2019-06-18 23:34:23 +03:00
for ( i = 0 ; i < num_fonts ; i + + )
if ( ! strcmp ( fonts [ i ] - > name , name ) )
return fonts [ i ] ;
return NULL ;
2005-04-17 02:20:36 +04:00
}
2019-06-18 23:34:23 +03:00
EXPORT_SYMBOL ( find_font ) ;
2005-04-17 02:20:36 +04:00
/**
* get_default_font - get default font
* @ xres : screen size of X
* @ yres : screen size of Y
2024-03-16 03:10:21 +03:00
* @ font_w : bit array of supported widths ( 1 - FB_MAX_BLIT_WIDTH )
* @ font_h : bit array of supported heights ( 1 - FB_MAX_BLIT_HEIGHT )
2005-04-17 02:20:36 +04:00
*
* Get the default font for a specified screen size .
* Dimensions are in pixels .
*
2024-03-16 03:10:21 +03:00
* font_w or font_h being NULL means all values are supported .
*
2005-04-17 02:20:36 +04:00
* Returns % NULL if no font is found , or a pointer to the
* chosen font .
*
*/
2024-03-16 03:10:21 +03:00
const struct font_desc * get_default_font ( int xres , int yres ,
unsigned long * font_w ,
unsigned long * font_h )
2005-04-17 02:20:36 +04:00
{
2019-06-18 23:34:25 +03:00
int i , c , cc , res ;
2019-06-18 23:34:23 +03:00
const struct font_desc * f , * g ;
g = NULL ;
cc = - 10000 ;
for ( i = 0 ; i < num_fonts ; i + + ) {
f = fonts [ i ] ;
c = f - > pref ;
2008-02-06 12:36:29 +03:00
# if defined(__mc68000__)
2005-04-17 02:20:36 +04:00
# ifdef CONFIG_FONT_PEARL_8x8
2019-06-18 23:34:23 +03:00
if ( MACH_IS_AMIGA & & f - > idx = = PEARL8x8_IDX )
c = 100 ;
2005-04-17 02:20:36 +04:00
# endif
# ifdef CONFIG_FONT_6x11
2019-06-18 23:34:23 +03:00
if ( MACH_IS_MAC & & xres < 640 & & f - > idx = = VGA6x11_IDX )
c = 100 ;
2005-04-17 02:20:36 +04:00
# endif
# endif
2019-06-18 23:34:23 +03:00
if ( ( yres < 400 ) = = ( f - > height < = 8 ) )
c + = 1000 ;
2007-05-08 11:39:11 +04:00
2019-06-18 23:34:25 +03:00
/* prefer a bigger font for high resolution */
res = ( xres / f - > width ) * ( yres / f - > height ) / 1000 ;
if ( res > 20 )
c + = 20 - res ;
2024-03-16 03:10:21 +03:00
if ( ( ! font_w | | test_bit ( f - > width - 1 , font_w ) ) & &
( ! font_h | | test_bit ( f - > height - 1 , font_h ) ) )
2019-06-18 23:34:23 +03:00
c + = 1000 ;
2007-05-08 11:39:11 +04:00
2019-06-18 23:34:23 +03:00
if ( c > cc ) {
cc = c ;
g = f ;
}
2005-04-17 02:20:36 +04:00
}
2019-06-18 23:34:23 +03:00
return g ;
2005-04-17 02:20:36 +04:00
}
EXPORT_SYMBOL ( get_default_font ) ;
MODULE_AUTHOR ( " James Simmons <jsimmons@users.sf.net> " ) ;
MODULE_DESCRIPTION ( " Console Fonts " ) ;
MODULE_LICENSE ( " GPL " ) ;