diff --git a/programs/cmm/lib/font.h b/programs/cmm/lib/font.h index 6d95081de9..fd675d1bfc 100644 --- a/programs/cmm/lib/font.h +++ b/programs/cmm/lib/font.h @@ -22,7 +22,9 @@ dword size_file; byte load(...); byte symbol(word x;byte s;dword c); + byte symbol_size(byte s); dword text(word x,y;dword text,c;byte size); + dword text_width(dword text1;byte size); dword textarea(word x,y;dword text,c;byte size); byte changeSIZE(byte size); void PixelRGB(word x,y); @@ -70,10 +72,52 @@ FONT font = 0; } :proc_info Form_SELF_FONTS; -:dword FONT::text(word x,y;dword text1,c;byte size) +:dword FONT::text_width(dword text1;byte size) { dword len=0; IF(size)IF(!changeSIZE(size))return 0; + WHILE(DSBYTE[text1]) + { + len += symbol_size(DSBYTE[text1]); + text1++; + } + return len; +} +:byte FONT::symbol_size(byte s) +{ + dword xi,yi; + dword tmp,_; + dword iii; + byte rw=0; + IF(s==32)return width/4; + IF(s==9)return width; + yi = 0; + iii = 0; + tmp = 4*block*s; + tmp +=data; + WHILE(yi>= 1; + ELSE + { + tmp += 4; + _ = DSDWORD[tmp]; + } + IF(_&1) IF(xi>rw)rw=xi; + xi++; + iii++; + } + yi++; + } + return rw; +} +:dword FONT::text(word x,y;dword text1,c;byte size) +{ + signed len=0; + IF(size)IF(!changeSIZE(size))return 0; GetProcessInfo(#Form_SELF_FONTS, SelfInfo); IF(y>Form_SELF_FONTS.cheight) return 0; IF(x>Form_SELF_FONTS.cwidth) return 0; @@ -86,14 +130,14 @@ FONT font = 0; b = AL; width_buffer = width; width_buffer *= strlen(text1); - IF(!buffer_size)buffer = malloc(width_buffer*height); - ELSE IF(buffer_sizerw)rw=xi; ___x = x+xi; - IF(___x