Subversion Repositories Kolibri OS

Rev

Rev 4943 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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