Rev 5778 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5778 | Rev 5782 | ||
---|---|---|---|
Line 7... | Line 7... | ||
7 | 7 | ||
8 | #ifndef INCLUDE_IO_H |
8 | #ifndef INCLUDE_IO_H |
9 | #include "../lib/io.h" |
9 | #include "../lib/io.h" |
Line 10... | Line -... | ||
10 | #endif |
- | |
11 | - | ||
12 | - | ||
13 | #define CP866 0 |
- | |
14 | #define ANSI 1 |
10 | #endif |
15 | 11 | ||
16 | :struct __SIZE |
12 | :struct __SIZE |
17 | { |
13 | { |
18 | word width,height; |
14 | word width,height; |
Line 36... | Line 32... | ||
36 | dword size_file; |
32 | dword size_file; |
37 | byte load(...); |
33 | byte load(...); |
38 | byte symbol(word x;byte s;dword c); |
34 | byte symbol(word x;byte s;dword c); |
39 | byte symbol_size(byte s); |
35 | byte symbol_size(byte s); |
40 | dword prepare(word x,y;dword text1); |
36 | dword prepare(word x,y;dword text1); |
- | 37 | void prepare_buf(word x,y,w,h;dword text1); |
|
41 | void show(word x,y); |
38 | void show(word x,y); |
42 | byte textcenter(word x,y,w,h;dword txt); |
39 | byte textcenter(word x,y,w,h;dword txt); |
43 | dword getsize(dword text1); |
40 | dword getsize(dword text1); |
44 | dword textarea(word x,y;dword text,c); |
41 | dword textarea(word x,y;dword text,c); |
45 | byte changeSIZE(); |
42 | byte changeSIZE(); |
46 | void PixelRGB(word x,y); |
43 | void PixelRGB(word x,y); |
47 | dword GetPixel(word x,y); |
44 | //dword GetPixel(word x,y); |
48 | dword tmp_y,tmp_height,tmp_x; |
- | |
49 | byte no_bg_copy; |
45 | byte no_bg_copy; |
50 | dword bg_color; |
46 | dword bg_color; |
51 | }; |
47 | }; |
52 | FONT font = 0; |
48 | FONT font = 0; |
53 | 49 | /* |
|
54 | :dword FONT::GetPixel(word x,y) |
50 | :dword FONT::GetPixel(word x,y) |
55 | { |
51 | { |
56 | dword tmp; |
- | |
57 | tmp = y*size.width*3; |
52 | dword tmp = y*size.width*3; |
58 | tmp += x*3; |
- | |
59 | tmp += buffer; |
53 | tmp += x*3 + buffer; |
60 | r = DSBYTE[tmp]; |
54 | r = DSBYTE[tmp]; |
61 | tmp++; |
- | |
62 | g = DSBYTE[tmp]; |
55 | g = DSBYTE[tmp+1]; |
63 | tmp++; |
- | |
64 | b = DSBYTE[tmp]; |
56 | b = DSBYTE[tmp+2]; |
65 | } |
57 | }*/ |
66 | :void FONT::PixelRGB(dword x,y) |
58 | :void FONT::PixelRGB(dword x,y) |
67 | { |
59 | { |
68 | dword tmp; |
- | |
69 | tmp = y*size.width*3; |
60 | dword tmp = y*size.width*3; |
70 | tmp += x*3; |
- | |
71 | tmp += buffer; |
61 | tmp += x*3 + buffer; |
72 | - | ||
73 | DSBYTE[tmp] = r; |
62 | DSBYTE[tmp] = r; |
74 | tmp++; |
- | |
75 | DSBYTE[tmp] = g; |
63 | DSBYTE[tmp+1] = g; |
76 | tmp++; |
- | |
77 | DSBYTE[tmp] = b; |
64 | DSBYTE[tmp+2] = b; |
78 | } |
65 | } |
79 | :byte FONT::changeSIZE() |
66 | :byte FONT::changeSIZE() |
80 | { |
67 | { |
81 | dword TMP_DATA; |
68 | dword TMP_DATA; |
82 | dword ofs; |
69 | dword ofs; |
Line 161... | Line 148... | ||
161 | ELSE IF(s==241)s=184; //yo |
148 | ELSE IF(s==241)s=184; //yo |
162 | ELSE IF(s==240)s=168; //YO |
149 | ELSE IF(s==240)s=168; //YO |
163 | } |
150 | } |
164 | yi = 0; |
151 | yi = 0; |
165 | iii = 0; |
152 | iii = 0; |
166 | tmp = 4*block*s; |
153 | tmp = 4*block*s + data; |
167 | tmp +=data; |
- | |
168 | while(yi |
154 | while(yi |
169 | { |
155 | { |
170 | xi = 0; |
156 | xi = 0; |
171 | WHILE(xi |
157 | WHILE(xi |
172 | { |
158 | { |
Line 197... | Line 183... | ||
197 | } |
183 | } |
198 | :dword FONT::prepare(word x,y;dword text1) |
184 | :dword FONT::prepare(word x,y;dword text1) |
199 | { |
185 | { |
200 | signed len=0; |
186 | signed len=0; |
201 | dword c; |
187 | dword c; |
202 | word _tmp_h; |
- | |
203 | c = color; |
188 | c = color; |
204 | IF(!text1)return false; |
189 | IF(!text1)return false; |
205 | IF(size.text)IF(!changeSIZE())return false; |
190 | IF(size.text)IF(!changeSIZE())return false; |
206 | GetProcessInfo(#Form_SELF_FONTS, SelfInfo); |
191 | GetProcessInfo(#Form_SELF_FONTS, SelfInfo); |
207 | IF(y>Form_SELF_FONTS.cheight) return false; |
192 | IF(y>Form_SELF_FONTS.cheight) return false; |
Line 212... | Line 197... | ||
212 | c>>=16; |
197 | c>>=16; |
213 | AX = c; |
198 | AX = c; |
214 | b = AL; |
199 | b = AL; |
215 | getsize(text1); |
200 | getsize(text1); |
216 | y -= size.offset_y; |
201 | y -= size.offset_y; |
217 | tmp_y = y; |
- | |
Line 218... | Line 202... | ||
218 | 202 | ||
219 | EDX = size.width*size.height*3; |
203 | EDX = size.width*size.height*3; |
220 | IF(!buffer_size) |
204 | IF(!buffer_size) |
221 | { |
205 | { |
Line 318... | Line 302... | ||
318 | if(_&1) |
302 | if(_&1) |
319 | { |
303 | { |
320 | IF(xi>rw)rw=xi; |
304 | IF(xi>rw)rw=xi; |
321 | ___x = x+xi; |
305 | ___x = x+xi; |
322 | IF(italic)___x+=math.ceil(ital); |
306 | IF(italic)___x+=math.ceil(ital); |
323 | if(___x |
- | |
324 | { |
- | |
325 | PixelRGB(___x,TMP); |
307 | PixelRGB(___x,TMP); |
326 | _TMP_WEIGHT = size.TMP_WEIGHT; |
308 | _TMP_WEIGHT = size.TMP_WEIGHT; |
327 | WHILE(_TMP_WEIGHT) |
309 | WHILE(_TMP_WEIGHT) |
328 | { |
310 | { |
329 | IF(weight) PixelRGB(___x+_TMP_WEIGHT,TMP); |
311 | IF(weight) PixelRGB(___x+_TMP_WEIGHT,TMP); |
330 | _TMP_WEIGHT--; |
312 | _TMP_WEIGHT--; |
331 | } |
313 | } |
332 | } |
314 | } |
333 | } |
- | |
334 | xi++; |
315 | xi++; |
335 | iii++; |
316 | iii++; |
336 | } |
317 | } |
337 | yi++; |
318 | yi++; |
338 | IF(italic) ital-=size.offset_i; |
319 | IF(italic) ital-=size.offset_i; |
339 | } |
320 | } |
340 | return rw; |
321 | return rw; |
341 | } |
322 | } |
342 | :byte FONT::load(dword path) |
323 | :byte FONT::load(dword path) |
343 | { |
324 | { |
344 | dword tmp; |
- | |
345 | buffer_size = 0; |
325 | buffer_size = 0; |
346 | IF(data)free(data); |
326 | IF(data)free(data); |
347 | if (!io.readKPACK(path)) |
- | |
348 | { |
- | |
349 | debug("Error while loading font: "); |
327 | if (!io.readKPACK(path)) { debug("Error while loading font: "); debugln(path); return false; } |
350 | debugln(path); |
- | |
351 | return false; |
- | |
352 | } |
- | |
353 | begin = tmp = data = io.buffer_data; |
328 | begin = data = io.buffer_data; |
354 | size_file = io.FILES_SIZE; |
329 | size_file = io.FILES_SIZE; |
355 | tmp +=size_file; |
330 | EBX = begin + size_file; |
356 | tmp--; |
- | |
357 | height = DSBYTE[tmp]; |
331 | height = DSBYTE[EBX - 1]; |
358 | tmp--; |
- | |
359 | width = DSBYTE[tmp]; |
332 | width = DSBYTE[EBX - 2]; |
360 | block = math.ceil(height*width/32); |
333 | block = math.ceil(height*width/32); |
361 | return true; |
334 | return true; |
362 | } |
335 | } |
Line -... | Line 336... | ||
- | 336 | ||
- | 337 | :void FONT::prepare_buf(word x,y,w,h; dword text1) |
|
- | 338 | { |
|
- | 339 | signed len=0; |
|
- | 340 | dword c; |
|
- | 341 | c = color; |
|
- | 342 | IF(!text1)return; |
|
- | 343 | IF(size.text)IF(!changeSIZE())return; |
|
- | 344 | GetProcessInfo(#Form_SELF_FONTS, SelfInfo); |
|
- | 345 | AX = c; r = AL; g = AH; c>>=16; AX = c; b = AL; |
|
- | 346 | getsize(text1); |
|
- | 347 | y -= size.offset_y; |
|
- | 348 | ||
- | 349 | size.width = w; |
|
- | 350 | size.height = y; |
|
- | 351 | EDX = size.width*size.height*3; |
|
- | 352 | IF(!buffer_size) |
|
- | 353 | { |
|
- | 354 | buffer_size = EDX; |
|
- | 355 | buffer = malloc(buffer_size); |
|
- | 356 | EBX = bg_color; |
|
- | 357 | EDI = buffer; |
|
- | 358 | EAX = buffer_size+EDI; |
|
- | 359 | WHILE (EDI |
|
- | 360 | { |
|
- | 361 | ESDWORD[EDI] = EBX; |
|
- | 362 | $add edi,3 |
|
- | 363 | } |
|
- | 364 | } |
|
- | 365 | WHILE(DSBYTE[text1]) |
|
- | 366 | { |
|
- | 367 | x+=symbol(x,DSBYTE[text1]); |
|
- | 368 | IF(weight)x+=math.ceil(size.text/17); |
|
- | 369 | text1++; |
|
- | 370 | } |
|
- | 371 | return; |
|
- | 372 | } |
|
- | 373 | ||
363 | 374 | ||
364 | #endif |
375 | #endif |