Subversion Repositories Kolibri OS

Rev

Rev 4939 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4939 Rev 4943
1
VERSION equ "0.4Å"
1
VERSION equ "0.5"
2
 
2
 
3
    use32
3
    use32
4
    org     0
4
    org     0
5
    db	    'MENUET01'
5
    db	    'MENUET01'
6
    dd	    1, main, dataend, memory, stacktop, 0, 0
6
    dd	    1, main, dataend, memory, stacktop, 0, 0
7
 
7
 
8
    include "../../proc32.inc"
8
    include "../../proc32.inc"
9
    include "../../macros.inc"
9
    include "../../macros.inc"
10
    include "../../dll.inc"
10
    include "../../dll.inc"
11
    include "../../develop/libraries/box_lib/trunk/box_lib.mac"
11
    include "../../develop/libraries/box_lib/trunk/box_lib.mac"
12
;    include "../../debug.inc"
12
  ;  include "../../debug.inc"
13
    include "parser.inc"
13
    include "parser.inc"
14
 
14
 
15
 ;===============================
15
 ;===============================
-
 
16
 
-
 
17
    LIST_ITEM_SIZE   equ 16
-
 
18
    LIST_ITEM_COUNT  equ 6
-
 
19
    LIST_SIZE	     equ LIST_ITEM_SIZE * LIST_ITEM_COUNT
-
 
20
    LIST_ITEM_COLOR1 equ dword [scn.btn_face]
-
 
21
    LIST_ITEM_COLOR2 equ dword [scn.win_face]
-
 
22
    LIST_ITEM_TEXT1  equ dword [scn.btn_text]
-
 
23
    LIST_ITEM_TEXT2  equ dword [scn.win_text]
-
 
24
    LIST_ITEM_Y      equ LIST_ITEM_SIZE / 2 - 3
-
 
25
 
-
 
26
    KEYB_SIZE	     equ 140
16
 
27
 
17
    sz_cont db "?#"
28
    sz_cont db "Keyboard ", 0x10
-
 
29
    sz_head db "Calc+ [v", VERSION, "]", 0
18
    sz_head db "Calc+ [v", VERSION, "]", 0
30
    btn_clr db ""
19
;    buttons db "789456123()%^-+/*0"
31
    buttons db "|%^*/-+)(=7894561230"
20
    edb1    edit_box 184, 8, 12, 0, 0, 0, 0, 0, 500, \
32
    edb1    edit_box 0, 8, 12, 0, 0, 0, 0, 0, 480, \
21
		     exp, group, ed_always_focus + ed_focus, 0, 0
33
		     exp, group, ed_always_focus + ed_focus, 0, 0
22
 
34
 
23
 imports:
35
 imports:
24
    library gui, "box_lib.obj"
36
    library gui, "box_lib.obj"
25
    import  gui, editbox.draw,	"edit_box",	\
37
    import  gui, editbox.draw,	"edit_box",	\
26
		 editbox.key,	"edit_box_key", \
38
		 editbox.key,	"edit_box_key", \
27
		 editbox.mouse, "edit_box_mouse"
39
		 editbox.mouse, "edit_box_mouse"
28
 
40
 
29
 ;===============================
41
 ;===============================
30
 
42
 
31
 main:
43
 main:
32
    mov     [ans.buffer], dword "= 0"
44
    mov     [ans.buffer], dword "= 0"
33
    mov     [ans.size], 3 * 6 + 9
45
    mov     [ans.size], 3 * 6 + 9
34
 
46
 
35
    mcall   40, 100111b
47
    mcall   40, 100111b
36
    mcall   48, 3, scn, 192
48
    mcall   48, 3, scn, 192
37
 
49
 
38
 
50
 
39
    m2m     [edb1.color],	       [scn.gui_face]
51
    m2m     [edb1.color],	       [scn.gui_face]
40
    m2m     [edb1.shift_color],        [scn.gui_select]
52
    m2m     [edb1.shift_color],        [scn.gui_select]
41
    m2m     [edb1.focus_border_color], [scn.gui_face]
53
    m2m     [edb1.focus_border_color], [scn.gui_face]
42
    m2m     [edb1.text_color],	       [scn.gui_text]
54
    m2m     [edb1.text_color],	       [scn.gui_text]
43
 
55
 
44
    mcall   68, 11
56
    mcall   68, 11
45
    stdcall dll.Load, imports
57
    stdcall dll.Load, imports
46
 
58
 
47
 ;----------------------
59
 ;----------------------
48
 
60
 
49
 update:
61
 update:
50
    mcall   23, 5
62
    mcall   23, 5
51
 
63
 
52
    cmp     eax, EV_REDRAW
64
    cmp     eax, EV_REDRAW
53
    je	    ev_redraw
65
    je	    ev_redraw
54
    cmp     eax, EV_KEY
66
    cmp     eax, EV_KEY
55
    je	    ev_key
67
    je	    ev_key
56
    cmp     eax, EV_BUTTON
68
    cmp     eax, EV_BUTTON
57
    je	    ev_button
69
    je	    ev_button
58
    cmp     eax, EV_MOUSE
70
    cmp     eax, EV_MOUSE
59
    je	    ev_mouse
71
    je	    ev_mouse
60
 
-
 
61
    dec     [timer]
-
 
62
    cmp     [timer], 0
-
 
63
    je	    calc
-
 
64
 
72
 
65
    jmp     update
73
    jmp     update
66
 
74
 
67
 ;----------------------
75
 ;----------------------
68
 
76
 
69
 ev_redraw:
77
 ev_redraw:
70
    mov     edx, [scn.win_body]
-
 
71
    or	    edx, 0x34 shl 24
-
 
72
    mcall   0, <100, 236 + 100>, <100, 164 - 102>, , , sz_head
-
 
73
 
-
 
74
    mcall   8, <275, 12>, <-17, 12>, 2 + 1 shl 30
-
 
75
    sub     ebx, 12 shl 16
-
 
76
    inc     edx
-
 
77
    mcall
78
    mcall   12, 1
-
 
79
 
78
 
80
 ; WINDOW
79
    mcall   4, <279, -14>, [scn.win_title], sz_cont, 1
81
    mov     edx, [scn.win_face]
80
    add     ebx, 1 shl 16
82
    or	    edx, 0x34 shl 24
-
 
83
    mcall   0, <100, 236 + 100 - 50 - 25>, <100, 66 + LIST_SIZE>, , , sz_head
-
 
84
 
81
    mcall
85
 ; TOOLBAR
82
 
86
    mov     ebx, (275 - 50 - 25 - 50) shl 16 + 64
-
 
87
    cmp     [keyb], byte 1
83
    sub     ebx, 13 shl 16
88
    jne     @f
-
 
89
    add     ebx, KEYB_SIZE shl 16
-
 
90
  @@:
-
 
91
    mcall   8, , <-17, 12>, 2 + 1 shl 30
-
 
92
    add     ebx, 4 shl 16 - (64 + 14)
84
    inc     edx
93
    mcall   4, , [scn.win_title], sz_cont, 10
-
 
94
 
-
 
95
 ; CONTENT
85
    mcall
-
 
86
 
-
 
87
    call    draw_textbox
-
 
88
 
96
    call    draw_textbox
89
;    mov     [but_id], 0x0000000A
-
 
90
;    mov     [txt_id], buttons
-
 
91
;    mov     [txt_x], 16
-
 
92
;    mov     [but_w], 38
-
 
93
;    stdcall draw_button,   4,  42
-
 
94
;    stdcall draw_button,  46,  42
-
 
95
;    stdcall draw_button,  88,  42
-
 
96
;    stdcall draw_button,   4,  66
-
 
97
;    stdcall draw_button,  46,  66
-
 
98
;    stdcall draw_button,  88,  66
-
 
99
;    stdcall draw_button,   4,  90
-
 
100
;    stdcall draw_button,  46,  90
-
 
101
;    stdcall draw_button,  88,  90
-
 
102
;    stdcall draw_button,  88, 114
-
 
103
;
-
 
104
;    stdcall draw_button, 144,  42
-
 
105
;    stdcall draw_button, 186,  42
-
 
106
;    stdcall draw_button, 144,  66
-
 
107
;    stdcall draw_button, 186,  66
-
 
108
;    stdcall draw_button, 144,  90
-
 
109
;    stdcall draw_button, 186,  90
-
 
110
;    stdcall draw_button, 144, 114
-
 
111
;    stdcall draw_button, 186, 114
-
 
112
 
97
    call    draw_keyb
113
;    mov     [txt_x], 37
98
    call    draw_list
114
;    mov     [but_w], 80
99
 
115
;    stdcall draw_button,   4, 114
100
    mcall   12, 2
116
 
101
 
117
    jmp     update
102
    jmp     update
118
 
103
 
119
 ;----------------------
104
 ;----------------------
120
 
105
 
121
 ev_key:
106
 ev_key:
122
    mov     [timer], 10
-
 
123
 
-
 
124
    mcall   2
107
    mcall   2
125
    cmp     ah, 27
108
    cmp     ah, 27
126
    je	    exit
109
    je	    exit
127
    cmp     ah, 13
110
    cmp     ah, 13
128
    je	    calc
111
    je	    calc
129
    invoke  editbox.key, edb1
112
    invoke  editbox.key, edb1
130
    jmp     update
113
    jmp     update
131
 
114
 
132
 ;----------------------
115
 ;----------------------
133
 
116
 
134
 ev_button:
117
 ev_button:
135
    mov     [timer], 10
-
 
136
 
-
 
137
    mcall   17
118
    mcall   17
-
 
119
 
138
 
120
 ; EXIT
139
    cmp     ah, 1
121
    cmp     ah, 1
140
    je	    exit
122
    je	    exit
-
 
123
 
141
 
124
 ; DELETE
142
    cmp     ah, 19
125
    cmp     ah, 4
143
    jne     .not_del
-
 
144
 .del:
126
    jne     .not_del
145
    cmp     [edb1.pos], 0
127
    cmp     [edb1.pos], 0
146
    je	    update
128
    je	    update
147
    mov     eax, exp
129
    mov     eax, exp
148
    add     eax, [edb1.pos]
130
    add     eax, [edb1.pos]
149
    dec     eax
131
    dec     eax
150
    mov     ebx, exp
132
    mov     ebx, exp
151
    add     ebx, [edb1.size]
133
    add     ebx, [edb1.size]
152
    inc     ebx
134
    inc     ebx
153
  @@:
135
  @@:
154
    cmp     eax, ebx
136
    cmp     eax, ebx
155
    je	    @f
137
    je	    @f
156
    mov     cl, [eax + 1]
138
    mov     cl, [eax + 1]
157
    mov     [eax], cl
139
    mov     [eax], cl
158
    inc     eax
140
    inc     eax
159
    jmp     @b
141
    jmp     @b
160
  @@:
142
  @@:
161
    dec     [edb1.pos]
143
    dec     [edb1.pos]
162
    dec     [edb1.size]
144
    dec     [edb1.size]
163
    m2m     [edb1.shift], [edb1.pos]
145
    m2m     [edb1.shift], [edb1.pos]
164
    jmp     .redraw
146
    jmp     .redraw
165
 .not_del:
147
 .not_del:
-
 
148
 
166
 
149
 ; SHOW/HIDE KEYBOARD
-
 
150
    cmp     ah, 2
-
 
151
    jne     .not_keyb
-
 
152
 
-
 
153
    cmp     [keyb], byte 0
-
 
154
    je	    .open
-
 
155
 
-
 
156
    mcall   67, -1, -1, 286 - 25, -1
-
 
157
    mov     [keyb], 0
-
 
158
    mov     [sz_cont + 9], byte 0x10
-
 
159
    jmp     ev_redraw
-
 
160
 
-
 
161
 .open:
-
 
162
    mcall   67, -1, -1, 286 - 25 + KEYB_SIZE, -1
-
 
163
    mov     [keyb], 1
-
 
164
    mov     [sz_cont + 9], byte 0x11
-
 
165
    jmp     ev_redraw
167
;    cmp     ah, 10
166
 
-
 
167
    jmp     update
-
 
168
 .not_keyb:
-
 
169
 
168
;    jl      update
170
 ; CALCULATE
169
;    cmp     ah, 50
171
    cmp     ah, 19
-
 
172
    je	    calc
-
 
173
 
-
 
174
 ; LIST
-
 
175
    cmp     ah, 0x60
170
;    jg      update
176
    jl	    .not_list
-
 
177
 
171
;
178
    sub     ah, 0x60
-
 
179
    movzx   ebx, ah
172
;    movzx   eax, ah
180
    imul    ebx, 512
173
;    add     eax, buttons
181
    add     ebx, history
174
;    sub     eax, 10
182
    add     ebx, 482
175
;    mov     al, [eax]
183
    stdcall str_len, ebx
176
;
184
 
177
;    mov     ebx, exp
185
    mov     edx, exp
-
 
186
    add     edx, [edb1.size]
178
;    add     ebx, [edb1.size]
187
    add     edx, eax
179
;    mov     ecx, exp
188
    mov     edi, exp
180
;    add     ecx, [edb1.pos]
189
    add     edi, [edb1.pos]
181
;  @@:
190
  @@:
182
;    cmp     ebx, ecx
191
    cmp     edx, edi
-
 
192
    je	    @f
-
 
193
    mov     esi, edx
-
 
194
    sub     esi, eax
183
;    je      @f
195
    push    eax
184
;    mov     dl, [ebx - 1]
196
    mov     al, [esi]
-
 
197
    mov     [edx], al
185
;    mov     [ebx], dl
198
    pop     eax
186
;    dec     ebx
199
    dec     edx
187
;    jmp     @b
200
    jmp     @b
-
 
201
  @@:
188
;  @@:
202
    add     [edb1.size], eax
-
 
203
 
-
 
204
  @@:
-
 
205
    cmp     eax, 0
-
 
206
    je	    @f
189
;
207
    mov     cl, [ebx]
190
;    mov     [ebx], al
208
    mov     [edi], cl
-
 
209
    inc     edi
-
 
210
    inc     ebx
191
;    inc     [edb1.size]
211
    dec     eax
-
 
212
    inc     [edb1.pos]
-
 
213
    jmp     @b
-
 
214
  @@:
-
 
215
 
-
 
216
    jmp     .redraw
-
 
217
 .not_list:
-
 
218
 
-
 
219
 ; KEYBOARD
-
 
220
    cmp     ah, 10
-
 
221
    jl	    update
-
 
222
    cmp     ah, 50
-
 
223
    jg	    update
-
 
224
    mov     dh, ah
-
 
225
 
-
 
226
    mov     ebx, exp
-
 
227
    add     ebx, [edb1.size]
-
 
228
    mov     ecx, exp
-
 
229
    add     ecx, [edb1.pos]
-
 
230
    cmp     dh, 30
-
 
231
    jl	    @f
-
 
232
    add     ebx, 2
-
 
233
  @@:
-
 
234
    cmp     ebx, ecx
-
 
235
    je	    @f
-
 
236
    mov     dl, [ebx - 1]
-
 
237
    mov     [ebx], dl
-
 
238
    dec     ebx
-
 
239
    jmp     @b
-
 
240
  @@:
-
 
241
 
-
 
242
    movzx   eax, dh
-
 
243
    add     eax, buttons
-
 
244
    sub     eax, 10
-
 
245
    mov     al, [eax]
-
 
246
 
-
 
247
    mov     [ebx], al
-
 
248
    inc     [edb1.size]
-
 
249
    inc     [edb1.pos]
-
 
250
    cmp     dh, 30
-
 
251
    jl	    @f
-
 
252
    add     [edb1.size], 2
192
;    inc     [edb1.pos]
253
    add     [edb1.pos], 2
193
 
254
  @@:
194
 .redraw:
255
 .redraw:
195
    call    draw_textbox
256
    call    draw_textbox
196
    jmp     update
257
    jmp     update
197
 
258
 
198
 ;----------------------
259
 ;----------------------
199
 
260
 
200
 ev_mouse:
261
 ev_mouse:
201
    mcall   2
262
    mcall   2
202
 
263
 
203
    invoke  editbox.mouse, edb1
264
    invoke  editbox.mouse, edb1
204
    jmp     update
265
    jmp     update
205
 
266
 
206
 ;----------------------
267
 ;----------------------
207
 
268
 
208
 exit:
269
 exit:
209
    mcall   -1
270
    mcall   -1
210
 
271
 
211
 ;----------------------
272
 ;----------------------
212
 
273
 
213
 calc:
274
 calc:
214
    stdcall parse
275
    stdcall parse
215
    cmp     [error_n], 0
276
    cmp     [error_n], 0
216
    jne     .error
277
    jne     .error
217
 
278
 
218
    mov     [ans.buffer], word "= "
279
    mov     [ans.buffer], word "= "
219
 
280
 
220
    stdcall convert_to_str, eax, ans.buffer + 2
281
    stdcall convert_to_str, eax, ans.buffer + 2
221
    add     eax, 2
282
    add     eax, 2
-
 
283
    mov     edi, eax
222
    imul    eax, 6
284
    imul    eax, 6
223
    add     eax, 9
285
    add     eax, 9
224
    mov     [ans.size], eax
286
    mov     [ans.size], eax
-
 
287
 
-
 
288
 ; HISTORY
-
 
289
    mov     ecx, LIST_ITEM_COUNT - 1
-
 
290
    mov     eax, history
-
 
291
    add     eax, (LIST_ITEM_COUNT - 1) * 512
-
 
292
  @@:
-
 
293
    mov     ebx, eax
-
 
294
    sub     ebx, 512
-
 
295
    stdcall str_cpy, ebx, eax
-
 
296
    add     ebx, 480
-
 
297
    add     eax, 480
-
 
298
    stdcall str_cpy, ebx, eax
-
 
299
    sub     ebx, 480
-
 
300
    sub     eax, 480
-
 
301
    mov     esi, [ebx + 508]
-
 
302
    mov     [eax + 508], esi
-
 
303
    sub     eax, 512
-
 
304
    loop    @b
-
 
305
 
-
 
306
    stdcall str_cpy, exp, history
-
 
307
    stdcall str_cpy, ans.buffer, history + 480
-
 
308
    mov     esi, [ans.size]
-
 
309
    mov     dword[history + 508], esi
-
 
310
    not     [his_even]
-
 
311
 
-
 
312
 ; Check length
-
 
313
    mov     esi, 37
-
 
314
    sub     esi, edi
-
 
315
    stdcall str_len, exp
-
 
316
    sub     esi, eax
-
 
317
    cmp     esi, 0
-
 
318
    jg	    .redraw
-
 
319
 
-
 
320
    mov     ebx, history
-
 
321
    add     ebx, eax
-
 
322
    add     ebx, esi
-
 
323
    mov     [ebx], dword ".."
-
 
324
 
225
    jmp     .redraw
325
    jmp     .redraw
-
 
326
 
-
 
327
 ; ERRORS
226
 
328
 
227
 .error:
329
 .error:
228
    cmp     [error_n], 1
330
    cmp     [error_n], 1
229
    je	    .err_1
331
    je	    .err_1
230
    cmp     [error_n], 4
332
    cmp     [error_n], 4
231
    je	    .err_4
333
    je	    .err_4
232
 
334
 
233
    mov     [ans.buffer +  0], dword "Expe"
335
    mov     [ans.buffer +  0], dword "Expe"
234
    mov     [ans.buffer +  4], dword "cted"
336
    mov     [ans.buffer +  4], dword "cted"
235
    mov     [ans.buffer +  8], dword " ')'"
337
    mov     [ans.buffer +  8], dword " ')'"
236
    mov     [ans.buffer + 12], byte 0
338
    mov     [ans.buffer + 12], byte 0
237
    mov     [ans.size], 81
339
    mov     [ans.size], 81
238
 
340
 
239
    cmp     [error_n], 2
341
    cmp     [error_n], 2
240
    je	    .redraw
342
    je	    .redraw
241
    cmp     [error_n], 3
343
    cmp     [error_n], 3
242
    je	    .err_3
344
    je	    .err_3
-
 
345
    cmp     [error_n], 5
-
 
346
    je	    .err_5
243
 .err_1:
347
 .err_1:
244
    mov     [ans.buffer +  0], dword "Div."
348
    mov     [ans.buffer +  0], dword "Div."
245
    mov     [ans.buffer +  4], dword " by "
349
    mov     [ans.buffer +  4], dword " by "
246
    mov     [ans.buffer +  8], byte  "0"
350
    mov     [ans.buffer +  8], byte  "0"
247
    mov     [ans.buffer +  9], byte 0
351
    mov     [ans.buffer +  9], byte 0
248
    mov     [ans.size], 63
352
    mov     [ans.size], 63
249
    jmp     .redraw
353
    jmp     .redraw
250
 .err_4:
354
 .err_4:
251
    mov     [ans.buffer +  0], dword "Inpu"
355
    mov     [ans.buffer +  0], dword "Inpu"
252
    mov     [ans.buffer +  4], dword "t er"
356
    mov     [ans.buffer +  4], dword "t er"
253
    mov     [ans.buffer +  8], dword "rror"
357
    mov     [ans.buffer +  8], dword "rror"
254
    mov     [ans.buffer + 12], byte 0
358
    mov     [ans.buffer + 12], byte 0
255
    mov     [ans.size], 81
359
    mov     [ans.size], 81
256
    jmp     .redraw
360
    jmp     .redraw
257
 .err_3:
361
 .err_3:
258
    mov     [ans.buffer + 10], byte "("
362
    mov     [ans.buffer + 10], byte "("
259
    jmp     .redraw
363
    jmp     .redraw
-
 
364
 .err_5:
-
 
365
    mov     [ans.buffer + 10], byte "|"
-
 
366
    jmp     .redraw
260
 
367
 
261
 .redraw:
368
 .redraw:
262
    call    draw_textbox
369
    call    draw_textbox
-
 
370
    call    draw_list
263
    jmp     update
371
    jmp     update
264
 
372
 
265
 ;----------------------
373
 ;----------------------
266
 
374
 
267
; proc draw_button, x, y
375
 proc draw_button, x, y
268
;    mcall   8, <[x], [but_w]>, <[y], 20>, [but_id], [scn.btn_face]
376
    mcall   8, <[x], 30>, <[y], 21>, [but_id], [but_c]
269
;
377
 
270
;    mcall   1, [x], [y], [scn.win_face]
378
    mov     ebx, [x]
271
;    add     ebx, [but_w]
-
 
272
;    mcall
379
    mov     esi, [txt_size]
273
;    add     ecx, 20
-
 
274
;    mcall
380
    imul    esi, 3
275
;    sub     ebx, [but_w]
-
 
276
;    mcall
-
 
277
;
381
    mov     edi, 16
278
;    mov     ebx, [x]
382
    sub     edi, esi
279
;    add     ebx, [txt_x]
383
    add     ebx, edi
280
;    shl     ebx, 16
384
    shl     ebx, 16
281
;    add     ebx, [y]
385
    add     ebx, [y]
282
;    add     ebx, 7
386
    add     ebx, 7
283
;    mcall   4, , [scn.win_text], [txt_id], 1
387
    mcall   4, , [but_tc], [txt_id], [txt_size]
284
;
388
 
-
 
389
    mov     eax, [txt_size]
285
;    inc     dword [txt_id]
390
    add     [txt_id], eax
286
;    inc     dword [but_id]
391
    inc     dword [but_id]
287
;
392
 
288
;    ret
393
    ret
289
; endp
394
 endp
290
 
395
 
291
 ;----------------------
396
 ;----------------------
292
 
397
 
293
 proc draw_textbox
398
 proc draw_textbox
294
    mcall   13, <4, 320>, <  8,  23>, [scn.gui_frame]
399
    mcall   13, <4, 320 - 50 - 25>, <  8,  23>, [scn.gui_frame]
295
    mov     edx, [scn.gui_face]
400
    mov     edx, [scn.gui_face]
296
    cmp     [error_n], 0
401
    cmp     [error_n], 0
297
    je	    @f
402
    je	    @f
298
    mov     edx, 0xFFAAAA
403
    mov     edx, 0xFFAAAA
299
  @@:
404
  @@:
300
    mcall   13, <  5, 318>, <  9, 21>
405
    mcall   13, <  5, 318 - 50 - 25>, <  9, 21>
301
    mcall     , <  5, 318>, <  9,  1>, [scn.3d_face]
406
    mcall     , <  5, 318 - 50 - 25>, <  9,  1>, [scn.3d_face]
302
    mcall     , <  5,	1>, < 10, 20>
407
    mcall     , <  5,	1>, < 10, 20>
303
    mcall     , <  5, 318>, < 31,  1>, [scn.3d_light]
408
    mcall     , <  5, 318 - 50 - 25>, < 31,  1>, [scn.3d_light]
304
 
409
 
305
    mov      ebx, 328
410
    mov      ebx, 328 - 16 - 50 - 25
306
    sub      ebx, [ans.size]
411
    sub      ebx, [ans.size]
307
    shl      ebx, 16
412
    shl      ebx, 16
308
    add      ebx, 16
413
    add      ebx, 16
309
    mov      ecx, [scn.gui_intext]
414
    mov      ecx, [scn.gui_intext]
310
    or	     ecx, 1 shl 31
415
    or	     ecx, 1 shl 31
311
    mcall    4, , , ans.buffer
416
    mcall    4, , , ans.buffer
-
 
417
 
-
 
418
    mov      ecx, [scn.gui_text]
-
 
419
    mcall     , <310 - 50 - 25, 16>, , btn_clr, 1
-
 
420
    add      ebx, 1 shl 16
-
 
421
    mcall
-
 
422
 
-
 
423
    mcall    8, <305 - 50 - 25, 17>, <9, 20>, 0x40000004
312
 
424
 
313
    mcall    1,   4,  8, [scn.win_body]
425
    mcall    1,   4,  8, [scn.win_body]
314
    mcall     , 323
426
    mcall     , 323 - 50 - 25
315
    mcall     ,    , 30, [scn.3d_light]
427
    mcall     ,    , 30, [scn.3d_light]
316
    mcall     ,   4
428
    mcall     ,   4
317
 
429
 
318
    mov     ebx, 318
430
    mov     ebx, 318 - 16 - 50 - 25
319
    sub     ebx, [ans.size]
431
    sub     ebx, [ans.size]
320
    cmp     ebx, 24
432
    cmp     ebx, 24
321
    jg	    @f
433
    jg	    @f
322
    mov     ebx, 24
434
    mov     ebx, 24
323
  @@:
435
  @@:
324
    mov     [edb1.width], ebx
436
    mov     [edb1.width], ebx
325
    m2m     [edb1.color],	       [scn.gui_face]
437
    m2m     [edb1.color],	       [scn.gui_face]
326
    m2m     [edb1.focus_border_color], [scn.gui_face]
438
    m2m     [edb1.focus_border_color], [scn.gui_face]
327
    cmp     [error_n],	0
439
    cmp     [error_n],	0
328
    je	    @f
440
    je	    @f
329
    mov     [edb1.color],	       0xFFAAAA
441
    mov     [edb1.color],	       0xFFAAAA
330
    mov     [edb1.focus_border_color], 0xFFAAAA
442
    mov     [edb1.focus_border_color], 0xFFAAAA
331
  @@:
443
  @@:
332
    invoke  editbox.draw, edb1
444
    invoke  editbox.draw, edb1
333
 
445
 
334
    ret
446
    ret
335
 endp
447
 endp
336
 
448
 
337
 ;----------------------
449
 ;----------------------
-
 
450
 
-
 
451
 proc draw_keyb
-
 
452
    cmp     [keyb], byte 0
-
 
453
    je	    @f
-
 
454
 
-
 
455
    mov     [txt_size], 1
-
 
456
    mov     [but_id], 0x0000000A
-
 
457
    mov     [txt_id], buttons
-
 
458
 
-
 
459
    mov     eax, [scn.win_face]
-
 
460
    mov     [but_c], eax
-
 
461
    mov     eax, [scn.win_text]
-
 
462
    mov     [but_tc], eax
-
 
463
    stdcall draw_button,   4 + 278 - 25,  42 - 25 - 8
-
 
464
    stdcall draw_button,  37 + 278 - 25,  42 - 25 - 8
-
 
465
    stdcall draw_button,  70 + 278 - 25,  42 - 25 - 8
-
 
466
    stdcall draw_button, 103 + 278 - 25,  42 - 25 - 8
-
 
467
    stdcall draw_button, 103 + 278 - 25,  66 - 25 - 8
-
 
468
    stdcall draw_button, 103 + 278 - 25,  90 - 25 - 8
-
 
469
    stdcall draw_button, 103 + 278 - 25, 114 - 25 - 8
-
 
470
    stdcall draw_button,  70 + 278 - 25, 139 - 25 - 8
-
 
471
    stdcall draw_button,  37 + 278 - 25, 139 - 25 - 8
-
 
472
 
-
 
473
    mov     eax, [scn.btn_inface]
-
 
474
    mov     [but_c], eax
-
 
475
    mov     eax, [scn.btn_intext]
-
 
476
    mov     [but_tc], eax
-
 
477
    stdcall draw_button, 103 + 278 - 25, 139 - 25 - 8
-
 
478
 
-
 
479
    mov     eax, [scn.btn_face]
-
 
480
    mov     [but_c], eax
-
 
481
    mov     eax, [scn.btn_text]
-
 
482
    mov     [but_tc], eax
-
 
483
    stdcall draw_button,   4 + 278 - 25,  66 - 25 - 8
-
 
484
    stdcall draw_button,  37 + 278 - 25,  66 - 25 - 8
-
 
485
    stdcall draw_button,  70 + 278 - 25,  66 - 25 - 8
-
 
486
    stdcall draw_button,   4 + 278 - 25,  90 - 25 - 8
-
 
487
    stdcall draw_button,  37 + 278 - 25,  90 - 25 - 8
-
 
488
    stdcall draw_button,  70 + 278 - 25,  90 - 25 - 8
-
 
489
    stdcall draw_button,   4 + 278 - 25, 114 - 25 - 8
-
 
490
    stdcall draw_button,  37 + 278 - 25, 114 - 25 - 8
-
 
491
    stdcall draw_button,  70 + 278 - 25, 114 - 25 - 8
-
 
492
    stdcall draw_button,   4 + 278 - 25, 139 - 25 - 8
-
 
493
 
-
 
494
  @@:
-
 
495
    ret
-
 
496
 endp
-
 
497
 
-
 
498
 ;----------------------
-
 
499
 
-
 
500
 proc draw_list
-
 
501
  ; BACKGROUND
-
 
502
    mov     edi, LIST_ITEM_COUNT
-
 
503
    mov     eax, 13
-
 
504
    mov     ebx, 4 shl 16 + 320 - 50 - 25
-
 
505
    mov     ecx, 37 shl 16 + LIST_ITEM_SIZE
-
 
506
    mov     edx, LIST_ITEM_COLOR1
-
 
507
    cmp     [his_even], byte 0
-
 
508
    je	    @f
-
 
509
    mov     edx, LIST_ITEM_COLOR2
-
 
510
  @@:
-
 
511
    mcall
-
 
512
    add     ecx, LIST_ITEM_SIZE shl 16
-
 
513
    cmp     edx, LIST_ITEM_COLOR1
-
 
514
    je	    .set_color_to_2
-
 
515
    mov     edx, LIST_ITEM_COLOR1
-
 
516
    jmp     .next
-
 
517
 .set_color_to_2:
-
 
518
    mov     edx, LIST_ITEM_COLOR2
-
 
519
 .next:
-
 
520
    dec     edi
-
 
521
    cmp     edi, 0
-
 
522
    jne     @b
-
 
523
 
-
 
524
  ; BUTTONS
-
 
525
    mov     edi, LIST_ITEM_COUNT
-
 
526
    mov     eax, 8
-
 
527
    mov     ebx, 4 shl 16 + 320 - 50 - 25
-
 
528
    mov     ecx, 37 shl 16 + LIST_ITEM_SIZE
-
 
529
    mov     edx, 0x40000060
-
 
530
  @@:
-
 
531
    mcall
-
 
532
    add     ecx, LIST_ITEM_SIZE shl 16
-
 
533
    inc     edx
-
 
534
    dec     edi
-
 
535
    cmp     edi, 0
-
 
536
    jne     @b
-
 
537
 
-
 
538
  ; TEXT
-
 
539
    mov     edi, LIST_ITEM_COUNT
-
 
540
    mov     eax, 4
-
 
541
    mov     ebx, 8 shl 16 + 37 + LIST_ITEM_Y
-
 
542
    mov     ecx, LIST_ITEM_TEXT1
-
 
543
    cmp     [his_even], byte 0
-
 
544
    je	    @f
-
 
545
    mov     ecx, LIST_ITEM_TEXT2
-
 
546
  @@:
-
 
547
    or	    ecx, 1 shl 31
-
 
548
    mov     edx, history
-
 
549
  @@:
-
 
550
    mcall
-
 
551
 
-
 
552
    push    ebx
-
 
553
    add     ebx, (320 - 50 - 25) shl 16
-
 
554
    mov     esi, [edx + 508]
-
 
555
    shl     esi, 16
-
 
556
    sub     ebx, esi
-
 
557
    add     edx, 480
-
 
558
    mcall
-
 
559
    pop     ebx
-
 
560
 
-
 
561
    add     edx, 32
-
 
562
    add     ebx, LIST_ITEM_SIZE
-
 
563
 
-
 
564
    and     ecx, 0xFFFFFF
-
 
565
    cmp     ecx, LIST_ITEM_TEXT2
-
 
566
    je	    .set_color_to_2_txt
-
 
567
    mov     ecx, LIST_ITEM_TEXT2
-
 
568
    jmp     .next_txt
-
 
569
 .set_color_to_2_txt:
-
 
570
    mov     ecx, LIST_ITEM_TEXT1
-
 
571
 .next_txt:
-
 
572
    or	    ecx, 1 shl 31
-
 
573
 
-
 
574
    dec     edi
-
 
575
    cmp     edi, 0
-
 
576
    jne     @b
-
 
577
 
-
 
578
    ret
-
 
579
 endp
-
 
580
 
-
 
581
 ;----------------------
-
 
582
 
-
 
583
 proc str_len uses ebx, str
-
 
584
    xor     eax, eax
-
 
585
    mov     ebx, [str]
-
 
586
  @@:
-
 
587
    cmp     [ebx], byte 0
-
 
588
    je	    @f
-
 
589
    inc     eax
-
 
590
    inc     ebx
-
 
591
    jmp     @b
-
 
592
  @@:
-
 
593
 
-
 
594
    ret
-
 
595
 endp
-
 
596
 
-
 
597
 ;----------------------
-
 
598
 
-
 
599
 proc str_cpy uses eax ebx ecx, from, to
-
 
600
    mov     eax, [from]
-
 
601
    mov     ebx, [to]
-
 
602
  @@:
-
 
603
    cmp     [eax], byte 0
-
 
604
    je	    @f
-
 
605
    mov     cl, [eax]
-
 
606
    mov     [ebx], cl
-
 
607
    inc     eax
-
 
608
    inc     ebx
-
 
609
    jmp     @b
-
 
610
  @@:
-
 
611
    mov     [ebx], byte 0
-
 
612
    ret
-
 
613
 endp
-
 
614
 
-
 
615
 ;----------------------
338
 
616
 
339
 dataend:
617
 dataend:
340
 
618
 
341
 ;===============================
619
 ;===============================
342
 
620
 
343
	    rb 2048
621
	    rb 2048
344
 stacktop:
622
 stacktop:
345
 
623
 
346
 exp	    rb 512
624
 exp	    rb 480
347
 exp_pos    rd 1
625
 exp_pos    rd 1
-
 
626
 exp_lvl    rd 1
348
 exp_lvl    rd 1
627
 abs_lvl    rd 1
349
 group	    rd 1
628
 group	    rd 1
350
 
629
 
351
 ans.buffer:rb 512
630
 ans.buffer:rb 480
352
 ans.size   rd 1
631
 ans.size   rd 1
353
 error_n    rd 1
632
 error_n    rd 1
354
 
633
 
355
 scn	    sys_colors_new
634
 scn	    sys_colors_new
356
 timer	    rd 1
635
 timer	    rd 1
357
 but_id     rd 1
636
 but_id     rd 1
358
 but_w	    rd 1
637
 but_c	    rd 1
-
 
638
 but_tc     rd 1
359
 txt_id     rd 1
639
 txt_id     rd 1
360
 txt_x	    rd 1
640
 txt_size   rd 1
-
 
641
 keyb	    rb 1
-
 
642
 
-
 
643
 his_even   rb 1
-
 
644
 history    rb 512 * LIST_ITEM_COUNT
-
 
645
	    rb 512
361
 
646
 
362
 memory:
647
 memory: