Subversion Repositories Kolibri OS

Rev

Rev 178 | Rev 297 | Go to most recent revision | Details | Compare with Previous | 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]
259 mikedld 88
	mov	edx,[cl_3d_inset]
178 heavyiron 89
	call	draw_framerect
90
 
91
	call	textbox.get_width
92
	mov	esi,eax
93
	mov	edi,eax
94
 
95
	cmp	ebp,[focused_tb]
96
	je	@f
97
	mov	ebx,dword[tbox.x]
98
	mov	bx,[tbox.y+2]
99
	movzx	eax,[tbox.height-2]
100
	shr	eax,1
101
	add	eax,4*65536-4
102
	add	ebx,eax
103
	lea	edx,[tbox.text]
104
;       movzx   esi,[tbox.length]
105
	mcall	4,,[color_tbl+4*0];[sc.work_text]
106
	ret
107
 
108
    @@: movzx	eax,[tb.pos.x]
109
	cmp	al,[tb.sel.x]
110
	je	@f
111
	sub	al,[tbox.ofs.x]
112
	jz	@f
113
	movzx	ebx,[tb.sel.x]
114
	sub	bl,[tbox.ofs.x]
115
	jge	.lp1
116
	xor	ebx,ebx
117
  .lp1: push	eax ebx
118
	sub	eax,ebx
119
	mov	ecx,edi
120
	sub	ecx,ebx
121
	cmp	eax,ecx
122
	jbe	.lp2
123
	mov	eax,ecx
124
  .lp2: imul	eax,6
125
	imul	ebx,6
126
	movzx	ecx,[tbox.x+2]
127
	add	ecx,3
128
;       sub     eax,ebx
129
	add	ebx,ecx
130
	shl	ebx,16
131
	add	ebx,eax
132
	movzx	ecx,[tbox.height-2]
133
	shr	ecx,1
134
	add	cx,[tbox.y+2]
135
	shl	ecx,16
136
	add	ecx,-5*65536+10
137
	mcall	13,,,[color_tbl+4*7];0x0000007F
138
 
139
	mov	esi,[esp]
140
	lea	edx,[tbox.text]
141
	movzx	eax,[tbox.ofs.x]
142
	add	edx,eax
143
	mov	ebx,dword[tbox.x]
144
	mov	bx,[tbox.y+2]
145
	movzx	eax,[tbox.height-2]
146
	shr	eax,1
147
	add	eax,4*65536-4
148
	add	ebx,eax
149
	mov	eax,4
150
	or	esi,esi
151
	jz	.lp3
152
	mcall	,,[color_tbl+4*0];[sc.work_text]
153
  .lp3: sub	edi,esi
154
	jnz	.lp4
155
	add	esp,8
156
	jmp	.exit
157
  .lp4:
158
	add	edx,esi
159
	imul	esi,6*65536
160
	add	ebx,esi
161
	pop	ecx esi
162
	sub	esi,ecx
163
	cmp	esi,edi
164
	jbe	.lp5
165
	mov	esi,edi
166
  .lp5:
167
	mcall	,,[color_tbl+4*6];0x00FFFFFF
168
	sub	edi,esi
169
	jz	.exit
170
	add	edx,esi
171
	imul	esi,6*65536
172
	add	ebx,esi
173
	lea	ecx,[tbox.text]
174
;        sub     ecx,edx
175
;        add     edi,ecx
176
	mcall	,,[color_tbl+4*0],,edi;[sc.work_text],,edi
177
	jmp	.exit
178
 
179
    @@: lea	edx,[tbox.text]
180
	movzx	eax,[tbox.ofs.x]
181
	add	edx,eax
182
	mov	ebx,dword[tbox.x]
183
	mov	bx,[tbox.y+2]
184
	movzx	eax,[tbox.height-2]
185
	shr	eax,1
186
	add	eax,4*65536-4
187
	add	ebx,eax
188
	movzx	eax,[tbox.ofs.x]
189
	call	textbox.get_width
190
	mov	esi,eax
191
	mcall	4,,[color_tbl+4*0];[sc.work_text]
192
 
193
  .exit:
194
	movzx	ebx,[tbox.pos.x]
195
	movzx	eax,[tbox.ofs.x]
196
	sub	ebx,eax
197
	imul	ebx,6
198
	movzx	eax,[tbox.x+2]
199
	add	eax,3
200
	add	ebx,eax
201
	push	bx
202
	shl	ebx,16
203
	pop	bx
204
	movzx	ecx,[tbox.height-2]
205
	shr	ecx,1
206
	add	cx,[tbox.y+2]
207
	push	cx
208
	shl	ecx,16
209
	pop	cx
210
	add	ecx,-5*65536+4
211
	mcall	38,,,0x01000000
212
	add	ebx,0x00010001
213
	mcall
214
	ret
215
endf
216
 
217
func textbox.key
218
	mov	ebp,[focused_tb]
219
	mov	esi,accel_table_textbox
220
  .acc: cmp	ebx,[esi]
221
	jne	@f
222
	call	dword[esi+4]
223
	jmp	.exit.2
224
    @@: add	esi,8
225
	cmp	byte[esi],0
226
	jne	.acc
227
 
228
	test	byte[shi+2],0x06
229
	jnz	.exit
230
	cmp	[tbox.length],255
231
	je	.exit
232
 
233
	movzx	eax,[chr]
234
	movzx	eax,[eax+key0]
235
	or	al,al
236
	jz	.exit
237
	mov	al,[eax+key1]
238
	cmp	[tb_casesen],0
239
	je	@f
240
	cmp	al,$60
241
	jle	@f
242
	add	al,[add_table-$60+eax]
243
    @@:
244
	call	textbox.delete_selection
245
 
246
	mov	ecx,255
247
	sub	cl,[tbox.pos.x]
248
	lea	edi,[tbox.text]
249
	add	edi,255
250
	lea	esi,[edi-1]
251
	std
252
	rep	movsb
253
	stosb
254
	cld
255
	inc	[tbox.length]
256
	call	key.tb.right
257
 
258
  .exit.2:
259
	call	textbox.draw
260
  .exit:
261
	ret
262
endf
263
 
264
textbox.mouse:
265
	ret
266
 
267
func key.tb.bkspace
268
	call	textbox.delete_selection
269
	jnc	@f
270
 
271
	cmp	[tbox.pos.x],0
272
	je	@f
273
	call	key.tb.left
274
	jmp	key.tb.del.direct
275
 
276
    @@: ret
277
endf
278
 
279
func key.tb.home
280
	xor	al,al
281
	mov	[tbox.pos.x],al
282
	mov	[tbox.sel.x],al
283
	mov	[tbox.ofs.x],al
284
	ret
285
endf
286
 
287
func key.tb.left
288
	mov	al,[tbox.pos.x]
289
	mov	[tbox.sel.x],al
290
	dec	al
291
	js	@f
292
	mov	[tbox.pos.x],al
293
	mov	[tbox.sel.x],al
294
	cmp	[tbox.ofs.x],al
295
	jl	@f
296
	sub	[tbox.ofs.x],8
297
	jge	@f
298
	mov	[tbox.ofs.x],0
299
    @@: ret
300
endf
301
 
302
func key.tb.right
303
	call	textbox.get_width
304
	mov	bl,[tbox.pos.x]
305
	mov	[tbox.sel.x],bl
306
	inc	bl
307
	cmp	bl,[tbox.length]
308
	ja	@f
309
	mov	[tbox.pos.x],bl
310
	mov	[tbox.sel.x],bl
311
	sub	bl,[tbox.ofs.x]
312
	cmp	bl,al
313
	jbe	@f
314
	inc	[tbox.ofs.x]
315
    @@: ret
316
endf
317
 
318
func key.tb.end
319
	call	textbox.get_width
320
	movzx	ebx,[tbox.length]
321
	mov	[tbox.pos.x],bl
322
	mov	[tbox.sel.x],bl
323
	sub	ebx,eax
324
	jge	@f
325
	xor	bl,bl
326
    @@: mov	[tbox.ofs.x],bl
327
	ret
328
endf
329
 
330
func key.tb.del
331
	call	textbox.delete_selection
332
	jnc	@f
333
  .direct:
334
	movzx	ecx,[tbox.length]
335
	sub	cl,[tbox.pos.x]
336
	jz	@f
337
	lea	eax,[tbox.text]
338
	movzx	edi,[tbox.pos.x]
339
	add	edi,eax
340
	lea	esi,[edi+1]
341
	dec	[tbox.length]
342
	cld
343
	rep	movsb
344
 
345
    @@: ret
346
endf
347
 
348
func key.tb.shift_home
349
	xor	al,al
350
	mov	[tbox.pos.x],al
351
	mov	[tbox.ofs.x],al
352
	ret
353
endf
354
 
355
func key.tb.shift_left
356
	mov	al,[tbox.pos.x]
357
	dec	al
358
	js	@f
359
	mov	[tbox.pos.x],al
360
	cmp	[tbox.ofs.x],al
361
	jl	@f
362
	sub	[tbox.ofs.x],8
363
	jge	@f
364
	mov	[tbox.ofs.x],0
365
    @@: ret
366
endf
367
 
368
func key.tb.shift_right
369
	call	textbox.get_width
370
	mov	bl,[tbox.pos.x]
371
	inc	bl
372
	cmp	bl,[tbox.length]
373
	ja	@f
374
	mov	[tbox.pos.x],bl
375
	sub	bl,[tbox.ofs.x]
376
	cmp	bl,al
377
	jbe	@f
378
	inc	[tbox.ofs.x]
379
    @@: ret
380
endf
381
 
382
func key.tb.shift_end
383
	call	textbox.get_width
384
	movzx	ebx,[tbox.length]
385
	mov	[tbox.pos.x],bl
386
	sub	ebx,eax
387
	jge	@f
388
	xor	bl,bl
389
    @@: mov	[tbox.ofs.x],bl
390
	ret
391
endf