29 font->
height = char_height;
61 file = fopen(path,
"r");
66 printf(
"Error opening %s.\n", path);
71 fseek(file, 0, SEEK_END);
73 fseek(file, 0, SEEK_SET);
75 ini = (
char *)malloc(size);
79 printf(
"Error allocated %d bytes of memory.\n", size);
84 fread(ini, size, 1, file);
101 temp1 = strtok(temp0,
"=");
104 printf(
"Error parsing number of chars.\n");
107 temp0 += strlen(temp1)+1;
111 temp1 = strtok(temp0,
"=");
114 printf(
"Error parsing space width.\n");
117 temp0 += strlen(temp1)+1;
127 printf(
"Error allocated %d bytes of memory.\n",
sizeof(
short)*font->
totalchars);
152 temp1 = strtok(temp0,
"=");
156 printf(
"Error parsing Char for char %d.\n", i);
162 temp0 += strlen(temp1)+1;
165 temp1 = strtok(temp0,
"=");
169 printf(
"Error parsing A for char %d.\n", i);
175 temp0 += strlen(temp1)+1;
178 temp1 = strtok(temp0,
"=");
182 printf(
"Error parsing B for char %d.\n", i);
188 temp0 += strlen(temp1)+1;
191 temp1 = strtok(temp0,
"=");
195 printf(
"Error parsing C for char %d.\n", i);
201 temp0 += strlen(temp1)+1;
204 temp1 = strtok(temp0,
"=");
208 printf(
"Error parsing ox for char %d.\n", i);
214 temp0 += strlen(temp1)+1;
217 temp1 = strtok(temp0,
"=");
221 printf(
"Error parsing oy for char %d.\n", i);
227 temp0 += strlen(temp1)+1;
230 temp1 = strtok(temp0,
"=");
234 printf(
"Error parsing Wid for char %d.\n", i);
240 temp0 += strlen(temp1)+1;
243 temp1 = strtok(temp0,
"=");
247 printf(
"Error parsing Hgt for char %d.\n", i);
253 temp0 += strlen(temp1)+1;
256 temp1 = strtok(temp0,
"=");
260 printf(
"Error parsing X1 for char %d.\n", i);
266 temp0 += strlen(temp1)+1;
269 temp1 = strtok(temp0,
"=");
273 printf(
"Error parsing Y1 for char %d.\n", i);
279 temp0 += strlen(temp1)+1;
282 temp1 = strtok(temp0,
"=");
286 printf(
"Error parsing X2 for char %d.\n", i);
292 temp0 += strlen(temp1)+1;
295 temp1 = strtok(temp0,
"=");
299 printf(
"Error parsing Y2 for char %d.\n", i);
305 temp0 += strlen(temp1)+1;
345 int length = strlen((
const char *)in);
347 for (i = 0; i < length; i++)
358 out[j] = (in[i++] & 0x1f)<<6;
359 out[j++] += (in[i] & 0x3f);
361 else if ((in[i] > 0xDF) && (in[i] < 0xF0))
363 out[j] = (in[i++] & 0xF)<<12;
364 out[j] += (in[i++] & 0x3f)<<6;
365 out[j++] += (in[i] & 0x3f);
367 else if ((in[i] > 0xEF) && (in[i] < 0xF5))
405 for (i = 0; i < num; i++)
408 while (in[i] ==
'\n' || in[i] ==
'\t' || in[i] ==
' ')
432 #define DRAW_ST_REGLIST \
433 ((u64)GIF_REG_ST) << 0 | \
434 ((u64)GIF_REG_XYZ2) << 4
461 unsigned short curchar = 0;
467 unsigned short utf8[2048];
469 memset(utf8,0,
sizeof(
short)*2048);
503 for (i = 0; i < length; i++)
510 x_orig[line] = v_pos.
x;
519 x_orig[line] = v_pos.
x;
529 for (i = 0; i < length; i++)
536 x_orig[line] = v_pos.
x - line_num[line]*font->
scale;
544 if (utf8[i] ==
SPACE)
556 x_orig[line] = v_pos.
x - line_num[line]*font->
scale;
566 for (i = 0; i < length; i++)
573 x_orig[line] = v_pos.
x - (line_num[line]*font->
scale)/2.0f;
581 if (utf8[i] ==
SPACE)
593 x_orig[line] = v_pos.
x - (line_num[line]*font->
scale)/2.0f;
609 for (j = 0; j < length; j++)
618 v_pos.
x = x_orig[line];
624 if (utf8[j] ==
SPACE)
qword_t * draw_prim_start(qword_t *q, int context, prim_t *prim, color_t *color)
qword_t * draw_prim_end(qword_t *q, int nreg, u64 reglist)
qword_t * fontstudio_print_string(qword_t *q, int context, const unsigned char *str, int alignment, vertex_t *v0, color_t *c0, fsfont_t *font)
int decode_unicode(const unsigned char *in, unsigned short *out)
int fontstudio_parse_ini(fsfont_t *font, char *ini, float tex_width, float tex_height)
fsfont_t * fontstudio_init(int char_height)
void fontstudio_free(fsfont_t *font)
void convert_to_index(unsigned short *in, int num, fsfont_t *font)
unsigned short get_char(unsigned short c, fsfont_t *font)
void fontstudio_unload_ini(fsfont_t *font)
qword_t * draw_fontstudio_char(qword_t *q, unsigned int c, vertex_t *v0, fsfont_t *font)
char * fontstudio_load_ini(const char *path)