157 lines · c
1/*2 * `Soft' font definitions3 *4 * Created 1995 by Geert Uytterhoeven5 * Rewritten 1998 by Martin Mares <mj@ucw.cz>6 *7 * 2001 - Documented with DocBook8 * - Brad Douglas <brad@neruo.com>9 *10 * This file is subject to the terms and conditions of the GNU General Public11 * License. See the file COPYING in the main directory of this archive12 * for more details.13 */14 15#include <linux/module.h>16#include <linux/types.h>17#include <linux/string.h>18#if defined(__mc68000__)19#include <asm/setup.h>20#endif21#include <linux/font.h>22 23static const struct font_desc *fonts[] = {24#ifdef CONFIG_FONT_8x825 &font_vga_8x8,26#endif27#ifdef CONFIG_FONT_8x1628 &font_vga_8x16,29#endif30#ifdef CONFIG_FONT_6x1131 &font_vga_6x11,32#endif33#ifdef CONFIG_FONT_7x1434 &font_7x14,35#endif36#ifdef CONFIG_FONT_SUN8x1637 &font_sun_8x16,38#endif39#ifdef CONFIG_FONT_SUN12x2240 &font_sun_12x22,41#endif42#ifdef CONFIG_FONT_10x1843 &font_10x18,44#endif45#ifdef CONFIG_FONT_ACORN_8x846 &font_acorn_8x8,47#endif48#ifdef CONFIG_FONT_PEARL_8x849 &font_pearl_8x8,50#endif51#ifdef CONFIG_FONT_MINI_4x652 &font_mini_4x6,53#endif54#ifdef CONFIG_FONT_6x1055 &font_6x10,56#endif57#ifdef CONFIG_FONT_TER16x3258 &font_ter_16x32,59#endif60#ifdef CONFIG_FONT_6x861 &font_6x8,62#endif63};64 65#define num_fonts ARRAY_SIZE(fonts)66 67#ifdef NO_FONTS68#error No fonts configured.69#endif70 71 72/**73 * find_font - find a font74 * @name: string name of a font75 *76 * Find a specified font with string name @name.77 *78 * Returns %NULL if no font found, or a pointer to the79 * specified font.80 *81 */82const struct font_desc *find_font(const char *name)83{84 unsigned int i;85 86 BUILD_BUG_ON(!num_fonts);87 for (i = 0; i < num_fonts; i++)88 if (!strcmp(fonts[i]->name, name))89 return fonts[i];90 return NULL;91}92EXPORT_SYMBOL(find_font);93 94 95/**96 * get_default_font - get default font97 * @xres: screen size of X98 * @yres: screen size of Y99 * @font_w: bit array of supported widths (1 - FB_MAX_BLIT_WIDTH)100 * @font_h: bit array of supported heights (1 - FB_MAX_BLIT_HEIGHT)101 *102 * Get the default font for a specified screen size.103 * Dimensions are in pixels.104 *105 * font_w or font_h being NULL means all values are supported.106 *107 * Returns %NULL if no font is found, or a pointer to the108 * chosen font.109 *110 */111const struct font_desc *get_default_font(int xres, int yres,112 unsigned long *font_w,113 unsigned long *font_h)114{115 int i, c, cc, res;116 const struct font_desc *f, *g;117 118 g = NULL;119 cc = -10000;120 for (i = 0; i < num_fonts; i++) {121 f = fonts[i];122 c = f->pref;123#if defined(__mc68000__)124#ifdef CONFIG_FONT_PEARL_8x8125 if (MACH_IS_AMIGA && f->idx == PEARL8x8_IDX)126 c = 100;127#endif128#ifdef CONFIG_FONT_6x11129 if (MACH_IS_MAC && xres < 640 && f->idx == VGA6x11_IDX)130 c = 100;131#endif132#endif133 if ((yres < 400) == (f->height <= 8))134 c += 1000;135 136 /* prefer a bigger font for high resolution */137 res = (xres / f->width) * (yres / f->height) / 1000;138 if (res > 20)139 c += 20 - res;140 141 if ((!font_w || test_bit(f->width - 1, font_w)) &&142 (!font_h || test_bit(f->height - 1, font_h)))143 c += 1000;144 145 if (c > cc) {146 cc = c;147 g = f;148 }149 }150 return g;151}152EXPORT_SYMBOL(get_default_font);153 154MODULE_AUTHOR("James Simmons <jsimmons@users.sf.net>");155MODULE_DESCRIPTION("Console Fonts");156MODULE_LICENSE("GPL");157