File: /usr/src/linux/drivers/video/fonts.c

1     /*
2      * linux/drivers/video/fonts.c -- `Soft' font definitions
3      *
4      *    Created 1995 by Geert Uytterhoeven
5      *    Rewritten 1998 by Martin Mares <mj@ucw.cz>
6      *
7      *	2001 - Documented with DocBook
8      *	- Brad Douglas <brad@neruo.com>
9      *
10      * This file is subject to the terms and conditions of the GNU General Public
11      * License.  See the file COPYING in the main directory of this archive
12      * for more details.
13      */
14     
15     
16     #include <linux/config.h>
17     #include <linux/types.h>
18     #include <linux/string.h>
19     #if defined(__mc68000__) || defined(CONFIG_APUS)
20     #include <asm/setup.h>
21     #endif
22     #include <video/font.h>
23     
24     #define NO_FONTS
25     
26     static struct fbcon_font_desc *fbcon_fonts[] = {
27     #ifdef CONFIG_FONT_8x8
28     #undef NO_FONTS
29         &font_vga_8x8,
30     #endif
31     #ifdef CONFIG_FONT_8x16
32     #undef NO_FONTS
33         &font_vga_8x16,
34     #endif
35     #ifdef CONFIG_FONT_6x11
36     #if defined(CONFIG_FBCON_MAC) || defined(CONFIG_FB_SBUS)
37     #undef NO_FONTS
38     #endif
39         &font_vga_6x11,
40     #endif
41     #ifdef CONFIG_FONT_SUN8x16
42     #undef NO_FONTS
43         &font_sun_8x16,
44     #endif
45     #ifdef CONFIG_FONT_SUN12x22
46     #if defined(CONFIG_FB_SBUS) || defined(CONFIG_FBCON_CFB8) || defined(CONFIG_FBCON_CFB16) || defined(CONFIG_FBCON_CFB24) || defined(CONFIG_FBCON_CFB32)
47     #undef NO_FONTS
48     #endif
49         &font_sun_12x22,
50     #endif
51     #ifdef CONFIG_FONT_ACORN_8x8
52     #undef NO_FONTS
53         &font_acorn_8x8,
54     #endif
55     #ifdef CONFIG_FONT_PEARL_8x8
56     #undef NO_FONTS
57         &font_pearl_8x8,
58     #endif
59     };
60     
61     #define num_fonts (sizeof(fbcon_fonts)/sizeof(*fbcon_fonts))
62     
63     #ifdef NO_FONTS
64     #error No fonts configured.
65     #endif
66     
67     
68     /**
69      *	fbcon_find_font - find a font
70      *	@name: string name of a font
71      *
72      *	Find a specified font with string name @name.
73      *
74      *	Returns %NULL if no font found, or a pointer to the
75      *	specified font.
76      *
77      */
78     
79     struct fbcon_font_desc *fbcon_find_font(char *name)
80     {
81        unsigned int i;
82     
83        for (i = 0; i < num_fonts; i++)
84           if (!strcmp(fbcon_fonts[i]->name, name))
85     	  return fbcon_fonts[i];
86        return NULL;
87     }
88     
89     
90     /**
91      *	fbcon_get_default_font - get default font
92      *	@xres: screen size of X
93      *	@yres: screen size of Y
94      *
95      *	Get the default font for a specified screen size.
96      *	Dimensions are in pixels.
97      *
98      *	Returns %NULL if no font is found, or a pointer to the
99      *	chosen font.
100      *
101      */
102     
103     struct fbcon_font_desc *fbcon_get_default_font(int xres, int yres)
104     {
105         int i, c, cc;
106         struct fbcon_font_desc *f, *g;
107     
108         g = NULL;
109         cc = -10000;
110         for(i=0; i<num_fonts; i++) {
111     	f = fbcon_fonts[i];
112     	c = f->pref;
113     #if defined(__mc68000__) || defined(CONFIG_APUS)
114     #ifdef CONFIG_FONT_PEARL_8x8
115     	if (MACH_IS_AMIGA && f->idx == PEARL8x8_IDX)
116     	    c = 100;
117     #endif
118     #ifdef CONFIG_FONT_6x11
119     	if (MACH_IS_MAC && xres < 640 && f->idx == VGA6x11_IDX)
120     	    c = 100;
121     #endif
122     #endif
123     	if ((yres < 400) == (f->height <= 8))
124     	    c += 1000;
125     	if (c > cc) {
126     	    cc = c;
127     	    g = f;
128     	}
129         }
130         return g;
131     }
132