1*37da2899SCharles.Forsyth #include "lib9.h"
2*37da2899SCharles.Forsyth #include "draw.h"
3*37da2899SCharles.Forsyth
4*37da2899SCharles.Forsyth Point
stringsubfont(Image * b,Point p,Image * color,Subfont * f,char * cs)5*37da2899SCharles.Forsyth stringsubfont(Image *b, Point p, Image *color, Subfont *f, char *cs)
6*37da2899SCharles.Forsyth {
7*37da2899SCharles.Forsyth int w, width;
8*37da2899SCharles.Forsyth uchar *s;
9*37da2899SCharles.Forsyth Rune c;
10*37da2899SCharles.Forsyth Fontchar *i;
11*37da2899SCharles.Forsyth
12*37da2899SCharles.Forsyth s = (uchar*)cs;
13*37da2899SCharles.Forsyth for(; c=*s; p.x+=width){
14*37da2899SCharles.Forsyth width = 0;
15*37da2899SCharles.Forsyth if(c < Runeself)
16*37da2899SCharles.Forsyth s++;
17*37da2899SCharles.Forsyth else{
18*37da2899SCharles.Forsyth w = chartorune(&c, (char*)s);
19*37da2899SCharles.Forsyth if(w == 0){
20*37da2899SCharles.Forsyth s++;
21*37da2899SCharles.Forsyth continue;
22*37da2899SCharles.Forsyth }
23*37da2899SCharles.Forsyth s += w;
24*37da2899SCharles.Forsyth }
25*37da2899SCharles.Forsyth if(c >= f->n)
26*37da2899SCharles.Forsyth continue;
27*37da2899SCharles.Forsyth i = f->info+c;
28*37da2899SCharles.Forsyth width = i->width;
29*37da2899SCharles.Forsyth draw(b, Rect(p.x+i->left, p.y+i->top, p.x+i->left+(i[1].x-i[0].x), p.y+i->bottom),
30*37da2899SCharles.Forsyth color, f->bits, Pt(i->x, i->top));
31*37da2899SCharles.Forsyth }
32*37da2899SCharles.Forsyth return p;
33*37da2899SCharles.Forsyth }
34*37da2899SCharles.Forsyth
35*37da2899SCharles.Forsyth Point
strsubfontwidth(Subfont * f,char * cs)36*37da2899SCharles.Forsyth strsubfontwidth(Subfont *f, char *cs)
37*37da2899SCharles.Forsyth {
38*37da2899SCharles.Forsyth Rune c;
39*37da2899SCharles.Forsyth Point p;
40*37da2899SCharles.Forsyth uchar *s;
41*37da2899SCharles.Forsyth Fontchar *i;
42*37da2899SCharles.Forsyth int w, width;
43*37da2899SCharles.Forsyth
44*37da2899SCharles.Forsyth p = Pt(0, f->height);
45*37da2899SCharles.Forsyth s = (uchar*)cs;
46*37da2899SCharles.Forsyth for(; c=*s; p.x+=width){
47*37da2899SCharles.Forsyth width = 0;
48*37da2899SCharles.Forsyth if(c < Runeself)
49*37da2899SCharles.Forsyth s++;
50*37da2899SCharles.Forsyth else{
51*37da2899SCharles.Forsyth w = chartorune(&c, (char*)s);
52*37da2899SCharles.Forsyth if(w == 0){
53*37da2899SCharles.Forsyth s++;
54*37da2899SCharles.Forsyth continue;
55*37da2899SCharles.Forsyth }
56*37da2899SCharles.Forsyth s += w;
57*37da2899SCharles.Forsyth }
58*37da2899SCharles.Forsyth if(c >= f->n)
59*37da2899SCharles.Forsyth continue;
60*37da2899SCharles.Forsyth i = f->info+c;
61*37da2899SCharles.Forsyth width = i->width;
62*37da2899SCharles.Forsyth }
63*37da2899SCharles.Forsyth return p;
64*37da2899SCharles.Forsyth }
65