Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
4327 yogev_ezra 1
;Огромная благодарность Maxxxx32, Diamond, Heavyiron
2
;и другим программистам, а также
3
;Теплову Алексею ( www.lrz.land.ru)
4
use32
5
  org 0x0
6
  db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
7
  dd 0x1
8
  dd start
9
  dd i_end ; размер приложения
10
  dd mem
11
  dd stacktop
12
  dd 0x0 ;library_path
13
  dd cur_dir_path
14
 
15
include 'macros.inc'
16
include 'load_lib.mac'
17
 
18
@use_library
19
 
20
align 4
21
start:
22
 
23
  mov eax,40
24
  mov ebx,0x25 ;маска ожидаемых событий
25
  mcall
26
 
27
  sys_load_library  msgbox_name, cur_dir_path, library_path, system_path, \
28
    err_message_found_lib, head_f_l, msgbox_lib_import, err_message_import, head_f_i
29
 
30
 
31
red_win:
32
  mcall 12,1
33
 
34
  xor eax,eax
35
  mov ebx,50*65536+200
36
  mov ecx,30*65536+170
37
  mov edx,0xffffd0
38
  or  edx,0x33000000
39
  mov edi,hed
40
  mcall
41
 
42
  mov eax,8 ;кнопка
43
  mov ebx,10*65536+30
44
  mov ecx,110*65536+20
45
  mov edx,7
46
  mov esi,0xffd040
47
  mcall
48
 
49
  mov ebx,10*65536+30
50
  mov ecx,85*65536+20
51
  mov edx,6
52
  mcall
53
 
54
  mov ebx,10*65536+30
55
  mov ecx,60*65536+20
56
  mov edx,5
57
  mcall
58
 
59
  mov ebx,10*65536+30
60
  mov ecx,35*65536+20
61
  mov edx,4
62
  mcall
63
 
64
  mov ebx,10*65536+30
65
  mov ecx,10*65536+20
66
  mov edx,3
67
  mcall
68
 
69
  mov eax,4 ;рисование текста
70
  mov ebx,50*65536+115
71
  mov ecx,0x4000d0
72
  or  ecx,0x80000000
73
  mov edx,txt140
74
  mcall
75
 
76
  mov ebx,50*65536+90
77
  mov edx,txt139
78
  mcall
79
 
80
  mov ebx,50*65536+65
81
  mov edx,txt138
82
  mcall
83
 
84
  mov ebx,50*65536+40
85
  mov edx,txt137
86
  mcall
87
 
88
  mov ebx,50*65536+15
89
  mov edx,txt136
90
  mcall
91
 
92
  push eax ebx ecx edx esi
93
  ;line numbers
94
  mov eax,47
95
  mov esi,0xd00000
96
  mov ebx,0x10000 ;format
97
 
98
  ; --- draw codes ---
99
  xor ecx,ecx
100
  mov cl,byte[msgbox_1]
101
  mov dx,25
102
  shl edx,16
103
  mov dx,15
104
  int 0x40
105
 
106
  mov cl,byte[msgbox_2]
107
  add dx,25
108
  int 0x40
109
 
110
  mov cl,byte[msgbox_3]
111
  add dx,25
112
  int 0x40
113
 
114
  mov cl,byte[msgbox_4]
115
  add dx,25
116
  int 0x40
117
 
118
  mov cl,byte[msgbox_5]
119
  add dx,25
120
  int 0x40
121
 
122
  pop esi edx ecx ebx eax
123
  call draw_square
124
  mcall 12,2
125
 
126
still:
127
  mov eax,10
128
  mcall
129
 
130
  cmp al,1 ;изм. положение окна
131
  jz red_win
132
  cmp al,3
133
  jz button
134
  jmp still
135
 
136
button:
137
  mcall 17 ;получить код нажатой кнопки
138
 
139
  cmp ah,3
140
  jz  but_1
141
  cmp ah,4
142
  jz  but_2
143
  cmp ah,5
144
  jz  but_3
145
  cmp ah,6
146
  jz  but_4
147
  cmp ah,7
148
  jz  but_5
149
 
150
  cmp ah,1
151
  jne still
152
.exit:
153
  mcall -1 ;выход из программы
154
 
155
but_1:
156
  push thread
157
  push msgbox_1
158
  call [mb_create]
159
  jmp still
160
 
161
but_2:
162
  push thread
163
  push msgbox_2
164
  call [mb_create]
165
    ;mov eax,5
166
    ;mov ebx,50
167
    ;int 0x40
168
  push msgbox_2_funct
169
  call [mb_setfunctions]
170
  jmp still
171
 
172
but_3:
173
  push thread
174
  push msgbox_3
175
  call [mb_create]
176
  jmp still
177
 
178
but_4:
179
  push thread
180
  push msgbox_4
181
  call [mb_create]
182
  jmp still
183
 
184
but_5:
185
  push thread
186
  push msgbox_5
187
  call [mb_create]
188
 
189
  mcall 5,100 ;stop program
190
 
191
  push msgbox_5_2
192
  call [mb_reinit]
193
 
194
  jmp still
195
 
196
 
197
  txt136 db 'простое',0
198
  txt137 db '3 кнопки',0
199
  txt138 db '3 строки',0
200
  txt139 db 'большое',0
201
  txt140 db 'mb_reinit',0
202
 
203
hed db 'Пример использования MsgBox',0
204
;sc system_colors
205
 
206
 
207
;---------------------------------------------------------------------
208
msgbox_1:
209
  dw 0
210
  db 'MBox',0 ;+2 = +MB_TEXT_OFFSET
211
  db 'Пример',0
212
  db 'Вижу',0 ;button1
213
  db 0
214
msgbox_2:
215
  dw 0
216
  db 'MBox 3 but',0 ;+2 = +MB_TEXT_OFFSET
217
  db 'Пример с 3-мя кнопками',0
218
  db 'Да',0 ;button1
219
  db 'Отмена',0 ;button2
220
  db 'Помощь',0 ;button3
221
  db 0
222
msgbox_2_funct:
223
  dd 0
224
  dd 0
225
  dd fun_show_help
226
 
227
msgbox_3:
228
  dw 0
229
  db 'MBox 3 lines',0 ;+2 = +MB_TEXT_OFFSET
230
  db 'Строка 1',13,'Строка 2',13,'Строка 3',0
231
  db '2009 г.',0 ;button1
232
  db 0
233
msgbox_4:
234
  dw 0
235
  db 'Введите день',0 ;+2 = +MB_TEXT_OFFSET
236
  db '  @@@@@@@@@@@@            @@@@@@@@',13
237
  db ' @............@          @........@',13
238
  db '@..............@        @..........@',13
239
  db '@.......@@@.....@      @......@.....@',13
240
  db '@.......@  @.....@@@@@@......@@......@',13
241
  db '@......@   @.................@@.......@',13
242
  db ' @....@   @.....@@......@@....@.......@',13
243
  db '  @..@    @.........@.........@......@',13
244
  db '   @@     @...................@@....@',13
245
  db '           @.......@@@.......@  @..@',13
246
  db '            @...............@    @@',13
247
  db '            @...............@',13
248
  db '           @.................@',13
249
  db '          @...................@',13
250
  db '         @.....................@',13
251
  db '        @.......@@......@@......@  @@',13
252
  db '       @......@....@..@....@.....@@..@',13
253
  db '       @......@....@..@....@.........@',13
254
  db '        @@@@@@@@@@@@@@@@@@@@@@@@@@@@@',0
255
  db 'Пн',0
256
  db 'Вт',0
257
  db 'Ср',0
258
  db 'Чт',0
259
  db 'Пт',0
260
  db 'Сб',0
261
  db 'Воскресение',0
262
  db 0
263
msgbox_5:
264
  dw 0
265
  db 'Сообщение',0 ;+2 = +MB_TEXT_OFFSET
266
  db 'Выполняю процесс ...',0
267
  db 'Остановить',0
268
  db 'Прервать',0
269
  db 0
270
msgbox_5_2:
271
  dw 0
272
  db 'Сообщение',0 ;+2 = +MB_TEXT_OFFSET
273
  db 'Все закончено',0
274
  db 'Закрыть окно',0
275
  db 0
276
 
277
;--------------------------------------------------
278
align 4
279
msgbox_lib_import:
280
  mb_create dd amb_create
281
  mb_reinit dd amb_reinit
282
  mb_setfunctions dd amb_setfunctions
283
  dd 0,0
284
  amb_create db 'mb_create',0
285
  amb_reinit db 'mb_reinit',0
286
  amb_setfunctions db 'mb_setfunctions',0
287
;--------------------------------------------------
288
system_path db '/sys/lib/'
289
msgbox_name db 'msgbox.obj',0
290
err_message_found_lib db 'Sorry I cannot load library msgbox.obj',0
291
head_f_i:
292
head_f_l db 'System error',0
293
err_message_import db 'Error on load import library msgbox.obj',0
294
;--------------------------------------------------
295
 
296
draw_square:
297
  cmp byte[sh_help],0
298
  je @f
299
    push eax ebx ecx edx
300
    mov eax,13 ;Ёшёютрэшх яЁ ьюєуюы№эшър
301
    mov ebx,105*65536+70
302
    mov ecx,15*65536+50
303
    mov edx,0x8080ff
304
    int 0x40
305
 
306
    mov eax,4 ;рисование текста
307
    mov ebx,110*65536+25
308
    mov ecx,0xffffff
309
    mov edx,txt_help
310
    mov esi,9
311
    mcall
312
 
313
    mov eax,47
314
    mov esi,0xffff
315
    mov ebx,0x10000 ;format
316
    xor ecx,ecx
317
    mov cl,byte[sh_help]
318
    mov dx,150
319
    shl edx,16
320
    mov dx,40
321
    int 0x40
322
 
323
    pop edx ecx ebx eax
324
  @@:
325
  ret
326
fun_show_help:
327
  inc byte[sh_help]
328
  cmp byte[sh_help],10
329
  jne @f
330
    mov byte[sh_help],0
331
  @@:
332
  call draw_square
333
  ret
334
sh_help db 0
335
txt_help db 'Помощь...'
336
 
337
 
338
i_end: ;конец кода
339
    rb 1024
340
  thread:
341
    rb 1024
342
stacktop:
343
  cur_dir_path:
344
    rb 4096
345
  library_path:
346
    rb 4096
347
  file_info:
348
    rb 40
349
mem: