Rev 259 | Rev 617 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
178 | heavyiron | 1 | virtual at ebp |
2 | tbox TBOX |
||
3 | end virtual |
||
4 | |||
5 | tb.pos.x db ? |
||
6 | tb.sel.x db ? |
||
7 | tb.sel.selected db ? |
||
8 | |||
9 | func textbox.get_width |
||
10 | push ebx edx |
||
297 | mikedld | 11 | movzx eax,[tbox.width] |
178 | heavyiron | 12 | add eax,-6 |
13 | xor edx,edx |
||
14 | mov ebx,6 |
||
15 | div ebx |
||
16 | movzx ebx,[tbox.length] |
||
17 | cmp eax,ebx |
||
18 | jle @f |
||
19 | mov eax,ebx |
||
20 | @@: pop edx ebx |
||
21 | ret |
||
22 | endf |
||
23 | |||
24 | func textbox.delete_selection |
||
25 | cmp [tb.sel.selected],0 |
||
26 | je .exit.2 |
||
27 | pushad |
||
28 | movzx ecx,[tbox.length] |
||
29 | sub cl,[tb.sel.x] |
||
30 | lea eax,[tbox.text] |
||
31 | movzx esi,[tb.pos.x] |
||
32 | movzx edi,[tb.sel.x] |
||
33 | add esi,eax |
||
34 | add edi,eax |
||
35 | mov eax,esi |
||
36 | sub eax,edi |
||
37 | sub [tbox.length],al |
||
38 | cld |
||
39 | rep movsb |
||
40 | |||
41 | .exit: |
||
42 | mov al,[tb.sel.x] |
||
43 | mov [tbox.pos.x],al |
||
44 | mov [tbox.sel.x],al |
||
45 | popad |
||
46 | clc |
||
47 | ret |
||
48 | |||
49 | .exit.2: |
||
50 | stc |
||
51 | ret |
||
52 | endf |
||
53 | |||
54 | func textbox.draw ; TBOX* ebp |
||
55 | call textbox.get_width |
||
56 | movzx ebx,[tbox.pos.x] |
||
57 | sub bl,[tbox.ofs.x] |
||
58 | sub ebx,eax |
||
59 | jle @f |
||
60 | mov bl,[tbox.pos.x] |
||
61 | sub bl,al |
||
62 | mov [tbox.ofs.x],bl |
||
63 | @@: |
||
64 | mov [tb.sel.selected],0 |
||
65 | mov al,[tbox.pos.x] |
||
66 | mov ah,[tbox.sel.x] |
||
67 | cmp al,ah |
||
68 | je @f |
||
69 | inc [tb.sel.selected] |
||
70 | ja @f |
||
71 | xchg al,ah |
||
72 | @@: mov [tb.pos.x],al |
||
73 | mov [tb.sel.x],ah |
||
74 | |||
297 | mikedld | 75 | mcall 13,dword[tbox.width],dword[tbox.height],[color_tbl.back] |
259 | mikedld | 76 | mov edx,[cl_3d_inset] |
178 | heavyiron | 77 | call draw_framerect |
78 | |||
79 | call textbox.get_width |
||
80 | mov esi,eax |
||
81 | mov edi,eax |
||
82 | |||
83 | cmp ebp,[focused_tb] |
||
84 | je @f |
||
297 | mikedld | 85 | mov ebx,dword[tbox.x-2] |
86 | mov bx,[tbox.y] |
||
87 | movzx eax,[tbox.height] |
||
178 | heavyiron | 88 | shr eax,1 |
89 | add eax,4*65536-4 |
||
90 | add ebx,eax |
||
91 | lea edx,[tbox.text] |
||
297 | mikedld | 92 | mcall 4,,[color_tbl.text] |
178 | heavyiron | 93 | ret |
94 | |||
95 | @@: movzx eax,[tb.pos.x] |
||
96 | cmp al,[tb.sel.x] |
||
97 | je @f |
||
98 | sub al,[tbox.ofs.x] |
||
99 | jz @f |
||
100 | movzx ebx,[tb.sel.x] |
||
101 | sub bl,[tbox.ofs.x] |
||
102 | jge .lp1 |
||
103 | xor ebx,ebx |
||
104 | .lp1: push eax ebx |
||
105 | sub eax,ebx |
||
106 | mov ecx,edi |
||
107 | sub ecx,ebx |
||
108 | cmp eax,ecx |
||
109 | jbe .lp2 |
||
110 | mov eax,ecx |
||
111 | .lp2: imul eax,6 |
||
112 | imul ebx,6 |
||
297 | mikedld | 113 | movzx ecx,[tbox.x] |
178 | heavyiron | 114 | add ecx,3 |
115 | add ebx,ecx |
||
116 | shl ebx,16 |
||
117 | add ebx,eax |
||
297 | mikedld | 118 | movzx ecx,[tbox.height] |
178 | heavyiron | 119 | shr ecx,1 |
297 | mikedld | 120 | add cx,[tbox.y] |
178 | heavyiron | 121 | shl ecx,16 |
122 | add ecx,-5*65536+10 |
||
297 | mikedld | 123 | mcall 13,,,[color_tbl.back.sel] |
178 | heavyiron | 124 | |
125 | mov esi,[esp] |
||
126 | lea edx,[tbox.text] |
||
127 | movzx eax,[tbox.ofs.x] |
||
128 | add edx,eax |
||
297 | mikedld | 129 | mov ebx,dword[tbox.x-2] |
130 | mov bx,[tbox.y] |
||
131 | movzx eax,[tbox.height] |
||
178 | heavyiron | 132 | shr eax,1 |
133 | add eax,4*65536-4 |
||
134 | add ebx,eax |
||
135 | mov eax,4 |
||
136 | or esi,esi |
||
137 | jz .lp3 |
||
297 | mikedld | 138 | mcall ,,[color_tbl.text] |
178 | heavyiron | 139 | .lp3: sub edi,esi |
140 | jnz .lp4 |
||
141 | add esp,8 |
||
142 | jmp .exit |
||
143 | .lp4: |
||
144 | add edx,esi |
||
145 | imul esi,6*65536 |
||
146 | add ebx,esi |
||
147 | pop ecx esi |
||
148 | sub esi,ecx |
||
149 | cmp esi,edi |
||
150 | jbe .lp5 |
||
151 | mov esi,edi |
||
152 | .lp5: |
||
297 | mikedld | 153 | mcall ,,[color_tbl.text.sel] |
178 | heavyiron | 154 | sub edi,esi |
155 | jz .exit |
||
156 | add edx,esi |
||
157 | imul esi,6*65536 |
||
158 | add ebx,esi |
||
159 | lea ecx,[tbox.text] |
||
297 | mikedld | 160 | mcall ,,[color_tbl.text],,edi |
178 | heavyiron | 161 | jmp .exit |
162 | |||
163 | @@: lea edx,[tbox.text] |
||
164 | movzx eax,[tbox.ofs.x] |
||
165 | add edx,eax |
||
297 | mikedld | 166 | mov ebx,dword[tbox.x-2] |
167 | mov bx,[tbox.y] |
||
168 | movzx eax,[tbox.height] |
||
178 | heavyiron | 169 | shr eax,1 |
170 | add eax,4*65536-4 |
||
171 | add ebx,eax |
||
172 | movzx eax,[tbox.ofs.x] |
||
173 | call textbox.get_width |
||
174 | mov esi,eax |
||
297 | mikedld | 175 | mcall 4,,[color_tbl.text] |
178 | heavyiron | 176 | |
177 | .exit: |
||
178 | movzx ebx,[tbox.pos.x] |
||
179 | movzx eax,[tbox.ofs.x] |
||
180 | sub ebx,eax |
||
181 | imul ebx,6 |
||
297 | mikedld | 182 | movzx eax,[tbox.x] |
178 | heavyiron | 183 | add eax,3 |
184 | add ebx,eax |
||
185 | push bx |
||
186 | shl ebx,16 |
||
187 | pop bx |
||
297 | mikedld | 188 | movzx ecx,[tbox.height] |
178 | heavyiron | 189 | shr ecx,1 |
297 | mikedld | 190 | add cx,[tbox.y] |
178 | heavyiron | 191 | push cx |
192 | shl ecx,16 |
||
193 | pop cx |
||
194 | add ecx,-5*65536+4 |
||
195 | mcall 38,,,0x01000000 |
||
196 | add ebx,0x00010001 |
||
197 | mcall |
||
198 | ret |
||
199 | endf |
||
200 | |||
201 | func textbox.key |
||
202 | mov ebp,[focused_tb] |
||
203 | mov esi,accel_table_textbox |
||
204 | .acc: cmp ebx,[esi] |
||
205 | jne @f |
||
206 | call dword[esi+4] |
||
207 | jmp .exit.2 |
||
208 | @@: add esi,8 |
||
209 | cmp byte[esi],0 |
||
210 | jne .acc |
||
211 | |||
212 | test byte[shi+2],0x06 |
||
213 | jnz .exit |
||
214 | cmp [tbox.length],255 |
||
215 | je .exit |
||
216 | |||
217 | movzx eax,[chr] |
||
218 | movzx eax,[eax+key0] |
||
219 | or al,al |
||
220 | jz .exit |
||
221 | mov al,[eax+key1] |
||
222 | cmp [tb_casesen],0 |
||
223 | je @f |
||
224 | cmp al,$60 |
||
225 | jle @f |
||
226 | add al,[add_table-$60+eax] |
||
227 | @@: |
||
228 | call textbox.delete_selection |
||
229 | |||
230 | mov ecx,255 |
||
231 | sub cl,[tbox.pos.x] |
||
232 | lea edi,[tbox.text] |
||
233 | add edi,255 |
||
234 | lea esi,[edi-1] |
||
235 | std |
||
236 | rep movsb |
||
237 | stosb |
||
238 | cld |
||
239 | inc [tbox.length] |
||
240 | call key.tb.right |
||
241 | |||
242 | .exit.2: |
||
243 | call textbox.draw |
||
244 | .exit: |
||
245 | ret |
||
246 | endf |
||
247 | |||
248 | textbox.mouse: |
||
249 | ret |
||
250 | |||
251 | func key.tb.bkspace |
||
252 | call textbox.delete_selection |
||
253 | jnc @f |
||
254 | |||
255 | cmp [tbox.pos.x],0 |
||
256 | je @f |
||
257 | call key.tb.left |
||
258 | jmp key.tb.del.direct |
||
259 | |||
260 | @@: ret |
||
261 | endf |
||
262 | |||
263 | func key.tb.home |
||
264 | xor al,al |
||
265 | mov [tbox.pos.x],al |
||
266 | mov [tbox.sel.x],al |
||
267 | mov [tbox.ofs.x],al |
||
268 | ret |
||
269 | endf |
||
270 | |||
271 | func key.tb.left |
||
272 | mov al,[tbox.pos.x] |
||
273 | mov [tbox.sel.x],al |
||
274 | dec al |
||
275 | js @f |
||
276 | mov [tbox.pos.x],al |
||
277 | mov [tbox.sel.x],al |
||
278 | cmp [tbox.ofs.x],al |
||
279 | jl @f |
||
280 | sub [tbox.ofs.x],8 |
||
281 | jge @f |
||
282 | mov [tbox.ofs.x],0 |
||
283 | @@: ret |
||
284 | endf |
||
285 | |||
286 | func key.tb.right |
||
287 | call textbox.get_width |
||
288 | mov bl,[tbox.pos.x] |
||
289 | mov [tbox.sel.x],bl |
||
290 | inc bl |
||
291 | cmp bl,[tbox.length] |
||
292 | ja @f |
||
293 | mov [tbox.pos.x],bl |
||
294 | mov [tbox.sel.x],bl |
||
295 | sub bl,[tbox.ofs.x] |
||
296 | cmp bl,al |
||
297 | jbe @f |
||
298 | inc [tbox.ofs.x] |
||
299 | @@: ret |
||
300 | endf |
||
301 | |||
302 | func key.tb.end |
||
303 | call textbox.get_width |
||
304 | movzx ebx,[tbox.length] |
||
305 | mov [tbox.pos.x],bl |
||
306 | mov [tbox.sel.x],bl |
||
307 | sub ebx,eax |
||
308 | jge @f |
||
309 | xor bl,bl |
||
310 | @@: mov [tbox.ofs.x],bl |
||
311 | ret |
||
312 | endf |
||
313 | |||
314 | func key.tb.del |
||
315 | call textbox.delete_selection |
||
316 | jnc @f |
||
317 | .direct: |
||
318 | movzx ecx,[tbox.length] |
||
319 | sub cl,[tbox.pos.x] |
||
320 | jz @f |
||
321 | lea eax,[tbox.text] |
||
322 | movzx edi,[tbox.pos.x] |
||
323 | add edi,eax |
||
324 | lea esi,[edi+1] |
||
325 | dec [tbox.length] |
||
326 | cld |
||
327 | rep movsb |
||
328 | |||
329 | @@: ret |
||
330 | endf |
||
331 | |||
332 | func key.tb.shift_home |
||
333 | xor al,al |
||
334 | mov [tbox.pos.x],al |
||
335 | mov [tbox.ofs.x],al |
||
336 | ret |
||
337 | endf |
||
338 | |||
339 | func key.tb.shift_left |
||
340 | mov al,[tbox.pos.x] |
||
341 | dec al |
||
342 | js @f |
||
343 | mov [tbox.pos.x],al |
||
344 | cmp [tbox.ofs.x],al |
||
345 | jl @f |
||
346 | sub [tbox.ofs.x],8 |
||
347 | jge @f |
||
348 | mov [tbox.ofs.x],0 |
||
349 | @@: ret |
||
350 | endf |
||
351 | |||
352 | func key.tb.shift_right |
||
353 | call textbox.get_width |
||
354 | mov bl,[tbox.pos.x] |
||
355 | inc bl |
||
356 | cmp bl,[tbox.length] |
||
357 | ja @f |
||
358 | mov [tbox.pos.x],bl |
||
359 | sub bl,[tbox.ofs.x] |
||
360 | cmp bl,al |
||
361 | jbe @f |
||
362 | inc [tbox.ofs.x] |
||
363 | @@: ret |
||
364 | endf |
||
365 | |||
366 | func key.tb.shift_end |
||
367 | call textbox.get_width |
||
368 | movzx ebx,[tbox.length] |
||
369 | mov [tbox.pos.x],bl |
||
370 | sub ebx,eax |
||
371 | jge @f |
||
372 | xor bl,bl |
||
373 | @@: mov [tbox.ofs.x],bl |
||
374 | ret |
||
375 | endf |