brintos

brintos / linux-shallow public Read only

0
0
Text · 3.1 KiB · 47e3495 Raw
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