Subversion Repositories Kolibri OS

Rev

Rev 4328 | Go to most recent revision | Details | Compare with Previous | 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
 
4328 yogev_ezra 15
include '../../macros.inc'
16
include '../../develop/libraries/box_lib/load_lib.mac'
17
include 'lang.inc'
4327 yogev_ezra 18
 
19
@use_library
20
 
21
align 4
22
start:
23
 
24
  mov eax,40
25
  mov ebx,0x25 ;маска ожидаемых событий
26
  mcall
27
 
28
  sys_load_library  msgbox_name, cur_dir_path, library_path, system_path, \
29
    err_message_found_lib, head_f_l, msgbox_lib_import, err_message_import, head_f_i
30
 
31
 
32
red_win:
33
  mcall 12,1
34
 
35
  xor eax,eax
36
  mov ebx,50*65536+200
37
  mov ecx,30*65536+170
38
  mov edx,0xffffd0
39
  or  edx,0x33000000
40
  mov edi,hed
41
  mcall
42
 
43
  mov eax,8 ;кнопка
44
  mov ebx,10*65536+30
45
  mov ecx,110*65536+20
46
  mov edx,7
47
  mov esi,0xffd040
48
  mcall
49
 
50
  mov ebx,10*65536+30
51
  mov ecx,85*65536+20
52
  mov edx,6
53
  mcall
54
 
55
  mov ebx,10*65536+30
56
  mov ecx,60*65536+20
57
  mov edx,5
58
  mcall
59
 
60
  mov ebx,10*65536+30
61
  mov ecx,35*65536+20
62
  mov edx,4
63
  mcall
64
 
65
  mov ebx,10*65536+30
66
  mov ecx,10*65536+20
67
  mov edx,3
68
  mcall
69
 
70
  mov eax,4 ;рисование текста
71
  mov ebx,50*65536+115
72
  mov ecx,0x4000d0
73
  or  ecx,0x80000000
74
  mov edx,txt140
75
  mcall
76
 
77
  mov ebx,50*65536+90
78
  mov edx,txt139
79
  mcall
80
 
81
  mov ebx,50*65536+65
82
  mov edx,txt138
83
  mcall
84
 
85
  mov ebx,50*65536+40
86
  mov edx,txt137
87
  mcall
88
 
89
  mov ebx,50*65536+15
90
  mov edx,txt136
91
  mcall
92
 
93
  push eax ebx ecx edx esi
94
  ;line numbers
95
  mov eax,47
96
  mov esi,0xd00000
97
  mov ebx,0x10000 ;format
98
 
99
  ; --- draw codes ---
100
  xor ecx,ecx
101
  mov cl,byte[msgbox_1]
102
  mov dx,25
103
  shl edx,16
104
  mov dx,15
105
  int 0x40
106
 
107
  mov cl,byte[msgbox_2]
108
  add dx,25
109
  int 0x40
110
 
111
  mov cl,byte[msgbox_3]
112
  add dx,25
113
  int 0x40
114
 
115
  mov cl,byte[msgbox_4]
116
  add dx,25
117
  int 0x40
118
 
119
  mov cl,byte[msgbox_5]
120
  add dx,25
121
  int 0x40
122
 
123
  pop esi edx ecx ebx eax
124
  call draw_square
125
  mcall 12,2
126
 
127
still:
128
  mov eax,10
129
  mcall
130
 
131
  cmp al,1 ;изм. положение окна
132
  jz red_win
133
  cmp al,3
134
  jz button
135
  jmp still
136
 
137
button:
138
  mcall 17 ;получить код нажатой кнопки
139
 
140
  cmp ah,3
141
  jz  but_1
142
  cmp ah,4
143
  jz  but_2
144
  cmp ah,5
145
  jz  but_3
146
  cmp ah,6
147
  jz  but_4
148
  cmp ah,7
149
  jz  but_5
150
 
151
  cmp ah,1
152
  jne still
153
.exit:
154
  mcall -1 ;выход из программы
155
 
156
but_1:
157
  push thread
158
  push msgbox_1
159
  call [mb_create]
160
  jmp still
161
 
162
but_2:
163
  push thread
164
  push msgbox_2
165
  call [mb_create]
166
    ;mov eax,5
167
    ;mov ebx,50
168
    ;int 0x40
169
  push msgbox_2_funct
170
  call [mb_setfunctions]
171
  jmp still
172
 
173
but_3:
174
  push thread
175
  push msgbox_3
176
  call [mb_create]
177
  jmp still
178
 
179
but_4:
180
  push thread
181
  push msgbox_4
182
  call [mb_create]
183
  jmp still
184
 
185
but_5:
186
  push thread
187
  push msgbox_5
188
  call [mb_create]
189
 
190
  mcall 5,100 ;stop program
191
 
192
  push msgbox_5_2
193
  call [mb_reinit]
194
 
195
  jmp still
196
 
4328 yogev_ezra 197
if lang eq ru
4327 yogev_ezra 198
  txt136 db 'простое',0
199
  txt137 db '3 кнопки',0
200
  txt138 db '3 строки',0
201
  txt139 db 'большое',0
202
  txt140 db 'mb_reinit',0
4328 yogev_ezra 203
  hed db 'Пример использования MsgBox',0
204
else
205
  txt136 db 'Simple',0
206
  txt137 db '3 buttons',0
207
  txt138 db '3 lines',0
208
  txt139 db 'Big',0
209
  txt140 db 'mb_reinit',0
210
  hed db 'MsgBox usage example',0
211
end if
4327 yogev_ezra 212
;sc system_colors
213
 
214
 
215
;---------------------------------------------------------------------
216
msgbox_1:
217
  dw 0
218
  db 'MBox',0 ;+2 = +MB_TEXT_OFFSET
4328 yogev_ezra 219
if lang eq ru
4327 yogev_ezra 220
  db 'Пример',0
221
  db 'Вижу',0 ;button1
4328 yogev_ezra 222
else
223
  db 'Example',0
224
  db 'I see!',0 ;button1
4330 yogev_ezra 225
end if
226
  db 0
4327 yogev_ezra 227
msgbox_2:
228
  dw 0
4328 yogev_ezra 229
  db 'MBox 3 buttons',0 ;+2 = +MB_TEXT_OFFSET
230
if lang eq ru
4327 yogev_ezra 231
  db 'Пример с 3-мя кнопками',0
232
  db 'Да',0 ;button1
233
  db 'Отмена',0 ;button2
234
  db 'Помощь',0 ;button3
4328 yogev_ezra 235
else
236
  db '3 buttons example',0
237
  db 'Yes',0 ;button1
238
  db 'Cancel',0 ;button2
239
  db 'Help',0 ;button3
240
end if
4327 yogev_ezra 241
  db 0
242
msgbox_2_funct:
243
  dd 0
244
  dd 0
245
  dd fun_show_help
246
 
247
msgbox_3:
248
  dw 0
249
  db 'MBox 3 lines',0 ;+2 = +MB_TEXT_OFFSET
4328 yogev_ezra 250
if lang eq ru
4327 yogev_ezra 251
  db 'Строка 1',13,'Строка 2',13,'Строка 3',0
252
  db '2009 г.',0 ;button1
4328 yogev_ezra 253
else
254
  db 'Line 1',13,'Line 2',13,'Line 3',0
255
  db 'Year 2009',0 ;button1
256
end if
4327 yogev_ezra 257
  db 0
258
msgbox_4:
259
  dw 0
4328 yogev_ezra 260
if lang eq ru
4327 yogev_ezra 261
  db 'Введите день',0 ;+2 = +MB_TEXT_OFFSET
4328 yogev_ezra 262
else
263
  db 'Select day',0 ;+2 = +MB_TEXT_OFFSET
264
end if
4327 yogev_ezra 265
  db '  @@@@@@@@@@@@            @@@@@@@@',13
266
  db ' @............@          @........@',13
267
  db '@..............@        @..........@',13
268
  db '@.......@@@.....@      @......@.....@',13
269
  db '@.......@  @.....@@@@@@......@@......@',13
270
  db '@......@   @.................@@.......@',13
271
  db ' @....@   @.....@@......@@....@.......@',13
272
  db '  @..@    @.........@.........@......@',13
273
  db '   @@     @...................@@....@',13
274
  db '           @.......@@@.......@  @..@',13
275
  db '            @...............@    @@',13
276
  db '            @...............@',13
277
  db '           @.................@',13
278
  db '          @...................@',13
279
  db '         @.....................@',13
280
  db '        @.......@@......@@......@  @@',13
281
  db '       @......@....@..@....@.....@@..@',13
282
  db '       @......@....@..@....@.........@',13
283
  db '        @@@@@@@@@@@@@@@@@@@@@@@@@@@@@',0
4328 yogev_ezra 284
if lang eq ru
4327 yogev_ezra 285
  db 'Пн',0
286
  db 'Вт',0
287
  db 'Ср',0
288
  db 'Чт',0
289
  db 'Пт',0
290
  db 'Сб',0
291
  db 'Воскресение',0
4328 yogev_ezra 292
else
293
  db 'Sun',0
294
  db 'Mon',0
295
  db 'Tue',0
296
  db 'Wed',0
297
  db 'Thu',0
298
  db 'Fri',0
299
  db 'Sat',0
300
end if
4327 yogev_ezra 301
  db 0
302
msgbox_5:
303
  dw 0
4328 yogev_ezra 304
if lang eq ru
4327 yogev_ezra 305
  db 'Сообщение',0 ;+2 = +MB_TEXT_OFFSET
306
  db 'Выполняю процесс ...',0
307
  db 'Остановить',0
308
  db 'Прервать',0
4328 yogev_ezra 309
else
310
  db 'Message',0 ;+2 = +MB_TEXT_OFFSET
311
  db 'Running process ...',0
312
  db 'Stop',0
313
  db 'Abort',0
314
end if
4327 yogev_ezra 315
  db 0
316
msgbox_5_2:
317
  dw 0
4328 yogev_ezra 318
if lang eq ru
4327 yogev_ezra 319
  db 'Сообщение',0 ;+2 = +MB_TEXT_OFFSET
320
  db 'Все закончено',0
321
  db 'Закрыть окно',0
4328 yogev_ezra 322
else
323
  db 'Message',0 ;+2 = +MB_TEXT_OFFSET
324
  db 'All finished',0
325
  db 'Close window',0
326
end if
4327 yogev_ezra 327
  db 0
328
 
329
;--------------------------------------------------
330
align 4
331
msgbox_lib_import:
332
  mb_create dd amb_create
333
  mb_reinit dd amb_reinit
334
  mb_setfunctions dd amb_setfunctions
335
  dd 0,0
336
  amb_create db 'mb_create',0
337
  amb_reinit db 'mb_reinit',0
338
  amb_setfunctions db 'mb_setfunctions',0
339
;--------------------------------------------------
340
system_path db '/sys/lib/'
341
msgbox_name db 'msgbox.obj',0
342
err_message_found_lib db 'Sorry I cannot load library msgbox.obj',0
343
head_f_i:
344
head_f_l db 'System error',0
345
err_message_import db 'Error on load import library msgbox.obj',0
346
;--------------------------------------------------
347
 
348
draw_square:
349
  cmp byte[sh_help],0
350
  je @f
351
    push eax ebx ecx edx
4330 yogev_ezra 352
    mov eax,13 ;рисование прямоугольника
4327 yogev_ezra 353
    mov ebx,105*65536+70
354
    mov ecx,15*65536+50
355
    mov edx,0x8080ff
356
    int 0x40
357
 
358
    mov eax,4 ;рисование текста
359
    mov ebx,110*65536+25
360
    mov ecx,0xffffff
361
    mov edx,txt_help
362
    mov esi,9
363
    mcall
364
 
365
    mov eax,47
366
    mov esi,0xffff
367
    mov ebx,0x10000 ;format
368
    xor ecx,ecx
369
    mov cl,byte[sh_help]
370
    mov dx,150
371
    shl edx,16
372
    mov dx,40
373
    int 0x40
374
 
375
    pop edx ecx ebx eax
376
  @@:
377
  ret
378
fun_show_help:
379
  inc byte[sh_help]
380
  cmp byte[sh_help],10
381
  jne @f
382
    mov byte[sh_help],0
383
  @@:
384
  call draw_square
385
  ret
386
sh_help db 0
4328 yogev_ezra 387
if lang eq ru
4327 yogev_ezra 388
txt_help db 'Помощь...'
4328 yogev_ezra 389
else
390
txt_help db 'Help...'
391
end if
4327 yogev_ezra 392
 
393
i_end: ;конец кода
394
    rb 1024
395
  thread:
396
    rb 1024
397
stacktop:
398
  cur_dir_path:
399
    rb 4096
400
  library_path:
401
    rb 4096
402
  file_info:
403
    rb 40
404
mem: