#define DEBUG #include #include #include "config.h" #include "aalib.h" #include "aaint.h" /*#define CONSTANT 2.8 */ /*#define DIMC 5.2 */ /*#define DIMC 6.55 */ #if 0 #if 1 #define DIMC 5.3 #define CONSTANT 2.7 #else #define DIMC 1.71 #define CONSTANT 1.43 #endif #endif struct aa_font *aa_fonts[] = { &font8, &font9, &font14, &font16, &fontX13, &fontX13B, &fontX16, &fontline, &fontgl, &fontcourier, NULL }; static double DIMC,CONSTANT; #define isset(n,i) (((i)&1<<(n))!=0) #define canset(n,i) (!isset(n,i)&&isset(n-1,i)) #define MUL 8 /*#define NCHARS (255*NATTRS) */ static struct aa_font *currfont; static void values(int c, int *v1, int *v2, int *v3, int *v4) { int i; int attr = c / 256; unsigned CONST char *font; // debugStr("Entering values"); font = currfont->data; font = currfont->data; c = c % 256; c = c * currfont->height; *v1 = 0; *v2 = 0; *v3 = 0; *v4 = 0; for (i = 0; i < currfont->height / 2; i++) { *v1 += (isset(0, font[c + i]) + isset(1, font[c + i]) + isset(2, font[c + i]) + isset(3, font[c + i])); *v2 += (isset(4, font[c + i]) + isset(5, font[c + i]) + isset(6, font[c + i]) + isset(7, font[c + i])); } for (; i < currfont->height; i++) { *v3 += (isset(0, font[c + i]) + isset(1, font[c + i]) + isset(2, font[c + i]) + isset(3, font[c + i])); *v4 += (isset(4, font[c + i]) + isset(5, font[c + i]) + isset(6, font[c + i]) + isset(7, font[c + i])); } (*v1) *= MUL; (*v2) *= MUL; (*v3) *= MUL; (*v4) *= MUL; // debugStr("Entering switch in values"); switch (attr) { case AA_REVERSE: *v1 = currfont->height * 2 * MUL - *v1; *v2 = currfont->height * 2 * MUL - *v2; *v3 = currfont->height * 2 * MUL - *v3; *v4 = currfont->height * 2 * MUL - *v4; break; case AA_DIM: *v1 = (*v1 + 1) / DIMC; *v2 = (*v2 + 1) / DIMC; *v3 = (*v3 + 1) / DIMC; *v4 = (*v4 + 1) / DIMC; break; case AA_BOLD: *v1 = *v1 * CONSTANT; *v2 = *v2 * CONSTANT; *v3 = *v3 * CONSTANT; *v4 = *v4 * CONSTANT; break; case AA_BOLDFONT: for (i = 0; i < currfont->height / 2; i++) { *v1 += ((isset(0, font[c + i]) + canset(1, font[c + i]) + canset(2, font[c + i]) + canset(3, font[c + i]))) * MUL; *v2 += ((isset(4, font[c + i]) + canset(5, font[c + i]) + canset(6, font[c + i]) + canset(7, font[c + i]))) * MUL; } for (; i < currfont->height; i++) { *v3 += ((isset(0, font[c + i]) + canset(1, font[c + i]) + canset(2, font[c + i]) + canset(3, font[c + i]))) * MUL; *v4 += ((isset(4, font[c + i]) + canset(5, font[c + i]) + canset(6, font[c + i]) + canset(7, font[c + i]))) * MUL; } } // debugStr("Exiting values"); } void aa_calcparams(struct aa_font *font, struct parameters *parameters, int supported,double dimmul, double boldmul) { int i; int ma1 = 0, ma2 = 0, ma3 = 0, ma4 = 0, msum = 0; int mi1 = 50000, mi2 = 50000, mi3 = 50000, mi4 = 50000, misum = 50000; int v1, v2, v3, v4, sum; debugStr("Entering aa_calcparams"); DIMC=dimmul; CONSTANT=boldmul; currfont = font; for (i = 0; i < NCHARS; i++) { if (!ALOWED(i, supported)) continue; values(i, &v1, &v2, &v3, &v4); if (v1 > ma1) ma1 = v1; if (v2 > ma2) ma2 = v2; if (v3 > ma3) ma3 = v3; if (v4 > ma4) ma4 = v4; if (v1 + v2 + v3 + v4 > msum) msum = v1 + v2 + v3 + v4; if (v1 < mi1) mi1 = v1; if (v2 < mi2) mi2 = v2; if (v3 < mi3) mi3 = v3; if (v4 < mi4) mi4 = v4; if (v1 + v2 + v3 + v4 < misum) misum = v1 + v2 + v3 + v4; } msum -= misum; mi1 = misum / 4; mi2 = misum / 4; mi3 = misum / 4; mi4 = misum / 4; ma1 = msum / 4; ma2 = msum / 4; ma3 = msum / 4; ma4 = msum / 4; for (i = 0; i < NCHARS; i++) { if (!ALOWED1(i, supported)) continue; values(i, &v1, &v2, &v3, &v4); sum = ((double) (v1 + v2 + v3 + v4 - misum) * (1020 / (double) msum) + 0.5); v1 = ((double) (v1 - mi1) * (255 / (double) ma1) + 0.5); v2 = ((double) (v2 - mi2) * (255 / (double) ma2) + 0.5); v3 = ((double) (v3 - mi3) * (255 / (double) ma3) + 0.5); v4 = ((double) (v4 - mi4) * (255 / (double) ma4) + 0.5); if (v1 > 255) v1 = 255; if (v2 > 255) v2 = 255; if (v3 > 255) v3 = 255; if (v4 > 255) v4 = 255; if (v1 < 0) v1 = 0; if (v2 < 0) v2 = 0; if (v3 < 0) v3 = 0; if (v4 < 0) v4 = 0; parameters[i].p[0] = v1; parameters[i].p[1] = v2; parameters[i].p[2] = v3; parameters[i].p[3] = v4; parameters[i].p[4] = sum; } debugStr("Exiting aa_calcparams"); }