sdk-world v2026.11.05
PS2 SDK - world tier (copyleft-allowed, non-essential packages)
Loading...
Searching...
No Matches
aafont.c
1#include <stdio.h>
2#include <ctype.h>
3#include "config.h"
4#include "aalib.h"
5#include "aaint.h"
6
7static double DIMC,CONSTANT;
8#define isset(n,i) (((i)&1<<(n))!=0)
9#define canset(n,i) (!isset(n,i)&&isset(n-1,i))
10#define MUL 8
11
12static struct aa_font *currfont;
13static void values(int c, int *v1, int *v2, int *v3, int *v4)
14{
15 int i;
16 int attr = c / 256;
17 unsigned const char *font;
18 font = currfont->data;
19 font = currfont->data;
20 c = c % 256;
21 c = c * currfont->height;
22 *v1 = 0;
23 *v2 = 0;
24 *v3 = 0;
25 *v4 = 0;
26 for (i = 0; i < currfont->height / 2; i++) {
27 *v1 += (isset(0, font[c + i]) +
28 isset(1, font[c + i]) +
29 isset(2, font[c + i]) +
30 isset(3, font[c + i]));
31 *v2 += (isset(4, font[c + i]) +
32 isset(5, font[c + i]) +
33 isset(6, font[c + i]) +
34 isset(7, font[c + i]));
35 }
36 for (; i < currfont->height; i++) {
37 *v3 += (isset(0, font[c + i]) +
38 isset(1, font[c + i]) +
39 isset(2, font[c + i]) +
40 isset(3, font[c + i]));
41 *v4 += (isset(4, font[c + i]) +
42 isset(5, font[c + i]) +
43 isset(6, font[c + i]) +
44 isset(7, font[c + i]));
45 }
46 (*v1) *= MUL;
47 (*v2) *= MUL;
48 (*v3) *= MUL;
49 (*v4) *= MUL;
50 switch (attr) {
51 case AA_REVERSE:
52 *v1 = currfont->height * 2 * MUL - *v1;
53 *v2 = currfont->height * 2 * MUL - *v2;
54 *v3 = currfont->height * 2 * MUL - *v3;
55 *v4 = currfont->height * 2 * MUL - *v4;
56 break;
57 case AA_DIM:
58 *v1 = (*v1 + 1) / DIMC;
59 *v2 = (*v2 + 1) / DIMC;
60 *v3 = (*v3 + 1) / DIMC;
61 *v4 = (*v4 + 1) / DIMC;
62 break;
63 case AA_BOLD:
64 *v1 = *v1 * CONSTANT;
65 *v2 = *v2 * CONSTANT;
66 *v3 = *v3 * CONSTANT;
67 *v4 = *v4 * CONSTANT;
68 break;
69 case AA_BOLDFONT:
70 for (i = 0; i < currfont->height / 2; i++) {
71 *v1 += ((isset(0, font[c + i]) +
72 canset(1, font[c + i]) +
73 canset(2, font[c + i]) +
74 canset(3, font[c + i]))) * MUL;
75 *v2 += ((isset(4, font[c + i]) +
76 canset(5, font[c + i]) +
77 canset(6, font[c + i]) +
78 canset(7, font[c + i]))) * MUL;
79 }
80 for (; i < currfont->height; i++) {
81 *v3 += ((isset(0, font[c + i]) +
82 canset(1, font[c + i]) +
83 canset(2, font[c + i]) +
84 canset(3, font[c + i]))) * MUL;
85 *v4 += ((isset(4, font[c + i]) +
86 canset(5, font[c + i]) +
87 canset(6, font[c + i]) +
88 canset(7, font[c + i]))) * MUL;
89 }
90 }
91}
92void aa_calcparams(struct aa_font *font, struct parameters *parameters, int supported,double dimmul, double boldmul)
93{
94 int i;
95 int ma1 = 0, ma2 = 0, ma3 = 0, ma4 = 0, msum = 0;
96 int mi1 = 50000, mi2 = 50000, mi3 = 50000, mi4 = 50000, misum = 50000;
97 int v1, v2, v3, v4, sum;
98 DIMC=dimmul;
99 CONSTANT=boldmul;
100 currfont = font;
101 for (i = 0; i < NCHARS; i++) {
102 if (!ALOWED(i, supported))
103 continue;
104 values(i, &v1, &v2, &v3, &v4);
105 if (v1 > ma1)
106 ma1 = v1;
107 if (v2 > ma2)
108 ma2 = v2;
109 if (v3 > ma3)
110 ma3 = v3;
111 if (v4 > ma4)
112 ma4 = v4;
113 if (v1 + v2 + v3 + v4 > msum)
114 msum = v1 + v2 + v3 + v4;
115 if (v1 < mi1)
116 mi1 = v1;
117 if (v2 < mi2)
118 mi2 = v2;
119 if (v3 < mi3)
120 mi3 = v3;
121 if (v4 < mi4)
122 mi4 = v4;
123 if (v1 + v2 + v3 + v4 < misum)
124 misum = v1 + v2 + v3 + v4;
125 }
126 msum -= misum;
127#if 0
128 ma1 -= mi1;
129 ma2 -= mi2;
130 ma3 -= mi3;
131 ma4 -= mi4;
132#else
133 mi1 = misum / 4;
134 mi2 = misum / 4;
135 mi3 = misum / 4;
136 mi4 = misum / 4;
137 ma1 = msum / 4;
138 ma2 = msum / 4;
139 ma3 = msum / 4;
140 ma4 = msum / 4;
141#endif
142 for (i = 0; i < NCHARS; i++) {
143 if (!ALOWED1(i, supported))
144 continue;
145 values(i, &v1, &v2, &v3, &v4);
146 sum = ((double) (v1 + v2 + v3 + v4 - misum) * (1020 / (double) msum) + 0.5);
147 v1 = ((double) (v1 - mi1) * (255 / (double) ma1) + 0.5);
148 v2 = ((double) (v2 - mi2) * (255 / (double) ma2) + 0.5);
149 v3 = ((double) (v3 - mi3) * (255 / (double) ma3) + 0.5);
150 v4 = ((double) (v4 - mi4) * (255 / (double) ma4) + 0.5);
151#if 0
152 sum = v1 + v2 + v3 + v4;
153#endif
154 if (v1 > 255)
155 v1 = 255;
156 if (v2 > 255)
157 v2 = 255;
158 if (v3 > 255)
159 v3 = 255;
160 if (v4 > 255)
161 v4 = 255;
162 if (v1 < 0)
163 v1 = 0;
164 if (v2 < 0)
165 v2 = 0;
166 if (v3 < 0)
167 v3 = 0;
168 if (v4 < 0)
169 v4 = 0;
170 parameters[i].p[0] = v1;
171 parameters[i].p[1] = v2;
172 parameters[i].p[2] = v3;
173 parameters[i].p[3] = v4;
174 parameters[i].p[4] = sum;
175 }
176}