Subversion Repositories Kolibri OS

Rev

Rev 259 | Go to most recent revision | Details | Last modification | View Log | RSS feed

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