Subversion Repositories Kolibri OS

Rev

Rev 4330 | 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
8236 IgorA 5
  org 0
4327 yogev_ezra 6
  db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
8236 IgorA 7
  dd 0,start,i_end,mem,stacktop,0,cur_dir_path
4327 yogev_ezra 8
 
8236 IgorA 9
include '../../KOSfuncs.inc'
4328 yogev_ezra 10
include '../../macros.inc'
8236 IgorA 11
include '../../proc32.inc'
12
include '../../load_lib.mac'
4328 yogev_ezra 13
include 'lang.inc'
4327 yogev_ezra 14
 
15
@use_library
16
 
17
align 4
18
start:
8236 IgorA 19
  mcall SF_SET_EVENTS_MASK,0x25 ;маска ожидаемых событий
4327 yogev_ezra 20
 
8236 IgorA 21
  sys_load_library  msgbox_name, library_path, system_path, msgbox_lib_import
4327 yogev_ezra 22
 
23
 
24
red_win:
8236 IgorA 25
  mcall SF_REDRAW,SSF_BEGIN_DRAW
4327 yogev_ezra 26
 
27
  xor eax,eax
28
  mov ebx,50*65536+200
29
  mov ecx,30*65536+170
30
  mov edx,0xffffd0
31
  or  edx,0x33000000
32
  mov edi,hed
33
  mcall
34
 
8236 IgorA 35
  mov eax,SF_DEFINE_BUTTON
4327 yogev_ezra 36
  mov ebx,10*65536+30
37
  mov ecx,110*65536+20
38
  mov edx,7
39
  mov esi,0xffd040
40
  mcall
41
 
42
  mov ebx,10*65536+30
43
  mov ecx,85*65536+20
44
  mov edx,6
45
  mcall
46
 
47
  mov ebx,10*65536+30
48
  mov ecx,60*65536+20
49
  mov edx,5
50
  mcall
51
 
52
  mov ebx,10*65536+30
53
  mov ecx,35*65536+20
54
  mov edx,4
55
  mcall
56
 
57
  mov ebx,10*65536+30
58
  mov ecx,10*65536+20
59
  mov edx,3
60
  mcall
61
 
62
  mov eax,4 ;рисование текста
63
  mov ebx,50*65536+115
64
  mov ecx,0x4000d0
65
  or  ecx,0x80000000
8236 IgorA 66
  mov edx,txt5
4327 yogev_ezra 67
  mcall
68
 
69
  mov ebx,50*65536+90
8236 IgorA 70
  mov edx,txt4
4327 yogev_ezra 71
  mcall
72
 
73
  mov ebx,50*65536+65
8236 IgorA 74
  mov edx,txt3
4327 yogev_ezra 75
  mcall
76
 
77
  mov ebx,50*65536+40
8236 IgorA 78
  mov edx,txt2
4327 yogev_ezra 79
  mcall
80
 
81
  mov ebx,50*65536+15
8236 IgorA 82
  mov edx,txt1
4327 yogev_ezra 83
  mcall
84
 
85
  push eax ebx ecx edx esi
86
  ;line numbers
8236 IgorA 87
  mov eax,SF_DRAW_NUMBER
4327 yogev_ezra 88
  mov esi,0xd00000
89
  mov ebx,0x10000 ;format
90
 
91
  ; --- draw codes ---
92
  xor ecx,ecx
93
  mov cl,byte[msgbox_1]
94
  mov dx,25
95
  shl edx,16
96
  mov dx,15
97
  int 0x40
98
 
99
  mov cl,byte[msgbox_2]
100
  add dx,25
101
  int 0x40
102
 
103
  mov cl,byte[msgbox_3]
104
  add dx,25
105
  int 0x40
106
 
107
  mov cl,byte[msgbox_4]
108
  add dx,25
109
  int 0x40
110
 
111
  mov cl,byte[msgbox_5]
112
  add dx,25
113
  int 0x40
114
 
115
  pop esi edx ecx ebx eax
116
  call draw_square
8236 IgorA 117
  mcall SF_REDRAW,SSF_END_DRAW
4327 yogev_ezra 118
 
8236 IgorA 119
align 4
4327 yogev_ezra 120
still:
8236 IgorA 121
  mcall SF_WAIT_EVENT
4327 yogev_ezra 122
 
123
  cmp al,1 ;изм. положение окна
124
  jz red_win
125
  cmp al,3
126
  jz button
127
  jmp still
128
 
129
button:
8236 IgorA 130
  mcall SF_GET_BUTTON
4327 yogev_ezra 131
 
132
  cmp ah,3
133
  jz  but_1
134
  cmp ah,4
135
  jz  but_2
136
  cmp ah,5
137
  jz  but_3
138
  cmp ah,6
139
  jz  but_4
140
  cmp ah,7
141
  jz  but_5
142
 
143
  cmp ah,1
144
  jne still
145
.exit:
8236 IgorA 146
  mcall SF_TERMINATE_PROCESS
4327 yogev_ezra 147
 
148
but_1:
8236 IgorA 149
  stdcall [mb_create],msgbox_1,thread
4327 yogev_ezra 150
  jmp still
151
 
152
but_2:
8236 IgorA 153
  stdcall [mb_create],msgbox_2,thread
154
  stdcall [mb_setfunctions],msgbox_2_funct
4327 yogev_ezra 155
  jmp still
156
 
157
but_3:
8236 IgorA 158
  stdcall [mb_create],msgbox_3,thread
4327 yogev_ezra 159
  jmp still
160
 
161
but_4:
8236 IgorA 162
  stdcall [mb_create],msgbox_4,thread
4327 yogev_ezra 163
  jmp still
164
 
165
but_5:
8236 IgorA 166
  stdcall [mb_create],msgbox_5,thread
167
  mcall SF_SLEEP,100 ;stop program
168
  stdcall [mb_reinit],msgbox_5_2
4327 yogev_ezra 169
  jmp still
170
 
4328 yogev_ezra 171
if lang eq ru
8236 IgorA 172
  txt1 db 'простое',0
173
  txt2 db '3 кнопки',0
174
  txt3 db '3 строки',0
175
  txt4 db 'большое',0
176
  txt5 db 'mb_reinit',0
4328 yogev_ezra 177
  hed db 'Пример использования MsgBox',0
178
else
8236 IgorA 179
  txt1 db 'Simple',0
180
  txt2 db '3 buttons',0
181
  txt3 db '3 lines',0
182
  txt4 db 'Big',0
183
  txt5 db 'mb_reinit',0
4328 yogev_ezra 184
  hed db 'MsgBox usage example',0
8236 IgorA 185
end if
4327 yogev_ezra 186
;sc system_colors
187
 
188
 
189
;---------------------------------------------------------------------
190
msgbox_1:
191
  dw 0
192
  db 'MBox',0 ;+2 = +MB_TEXT_OFFSET
4328 yogev_ezra 193
if lang eq ru
4327 yogev_ezra 194
  db 'Пример',0
195
  db 'Вижу',0 ;button1
4328 yogev_ezra 196
else
197
  db 'Example',0
198
  db 'I see!',0 ;button1
4330 yogev_ezra 199
end if
200
  db 0
4327 yogev_ezra 201
msgbox_2:
202
  dw 0
4328 yogev_ezra 203
  db 'MBox 3 buttons',0 ;+2 = +MB_TEXT_OFFSET
204
if lang eq ru
4327 yogev_ezra 205
  db 'Пример с 3-мя кнопками',0
206
  db 'Да',0 ;button1
207
  db 'Отмена',0 ;button2
208
  db 'Помощь',0 ;button3
4328 yogev_ezra 209
else
210
  db '3 buttons example',0
211
  db 'Yes',0 ;button1
212
  db 'Cancel',0 ;button2
213
  db 'Help',0 ;button3
214
end if
4327 yogev_ezra 215
  db 0
216
msgbox_2_funct:
8236 IgorA 217
  dd 0,0,fun_show_help
4327 yogev_ezra 218
 
219
msgbox_3:
220
  dw 0
221
  db 'MBox 3 lines',0 ;+2 = +MB_TEXT_OFFSET
4328 yogev_ezra 222
if lang eq ru
4327 yogev_ezra 223
  db 'Строка 1',13,'Строка 2',13,'Строка 3',0
8236 IgorA 224
  db '2020 г.',0 ;button1
4328 yogev_ezra 225
else
226
  db 'Line 1',13,'Line 2',13,'Line 3',0
8236 IgorA 227
  db 'Year 2020',0 ;button1
228
end if
4327 yogev_ezra 229
  db 0
230
msgbox_4:
231
  dw 0
4328 yogev_ezra 232
if lang eq ru
4327 yogev_ezra 233
  db 'Введите день',0 ;+2 = +MB_TEXT_OFFSET
4328 yogev_ezra 234
else
235
  db 'Select day',0 ;+2 = +MB_TEXT_OFFSET
236
end if
4327 yogev_ezra 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 '       @......@....@..@....@.........@',13
255
  db '        @@@@@@@@@@@@@@@@@@@@@@@@@@@@@',0
4328 yogev_ezra 256
if lang eq ru
8236 IgorA 257
  db 'Пн',0,'Вт',0,'Ср',0,'Чт',0,'Пт',0,'Сб',0,'Воскресение',0
4328 yogev_ezra 258
else
8236 IgorA 259
  db 'Sun',0,'Mon',0,'Tue',0,'Wed',0,'Thu',0,'Fri',0,'Sat',0
4328 yogev_ezra 260
end if
4327 yogev_ezra 261
  db 0
262
msgbox_5:
263
  dw 0
4328 yogev_ezra 264
if lang eq ru
4327 yogev_ezra 265
  db 'Сообщение',0 ;+2 = +MB_TEXT_OFFSET
266
  db 'Выполняю процесс ...',0
267
  db 'Остановить',0
268
  db 'Прервать',0
4328 yogev_ezra 269
else
270
  db 'Message',0 ;+2 = +MB_TEXT_OFFSET
271
  db 'Running process ...',0
272
  db 'Stop',0
8236 IgorA 273
  db 'Terminate',0
4328 yogev_ezra 274
end if
4327 yogev_ezra 275
  db 0
276
msgbox_5_2:
277
  dw 0
4328 yogev_ezra 278
if lang eq ru
4327 yogev_ezra 279
  db 'Сообщение',0 ;+2 = +MB_TEXT_OFFSET
280
  db 'Все закончено',0
281
  db 'Закрыть окно',0
4328 yogev_ezra 282
else
283
  db 'Message',0 ;+2 = +MB_TEXT_OFFSET
284
  db 'All finished',0
285
  db 'Close window',0
286
end if
4327 yogev_ezra 287
  db 0
288
 
289
;--------------------------------------------------
290
align 4
291
msgbox_lib_import:
292
  mb_create dd amb_create
293
  mb_reinit dd amb_reinit
294
  mb_setfunctions dd amb_setfunctions
295
  dd 0,0
296
  amb_create db 'mb_create',0
297
  amb_reinit db 'mb_reinit',0
298
  amb_setfunctions db 'mb_setfunctions',0
299
;--------------------------------------------------
300
system_path db '/sys/lib/'
301
msgbox_name db 'msgbox.obj',0
302
;--------------------------------------------------
303
 
304
draw_square:
305
  cmp byte[sh_help],0
306
  je @f
307
    push eax ebx ecx edx
8236 IgorA 308
    mcall SF_DRAW_RECT, 105*65536+70, 15*65536+50, 0x8080ff
309
    mcall SF_DRAW_TEXT, 110*65536+25, 0xffffff, txt_help
4327 yogev_ezra 310
 
311
    mov esi,0xffff
312
    mov ebx,0x10000 ;format
8236 IgorA 313
    movzx ecx,byte[sh_help]
314
    mov edx,(150 shl 16)+40
315
    mcall SF_DRAW_NUMBER
4327 yogev_ezra 316
 
317
    pop edx ecx ebx eax
318
  @@:
319
  ret
320
fun_show_help:
321
  inc byte[sh_help]
322
  cmp byte[sh_help],10
323
  jne @f
324
    mov byte[sh_help],0
325
  @@:
326
  call draw_square
327
  ret
328
sh_help db 0
4328 yogev_ezra 329
if lang eq ru
4327 yogev_ezra 330
txt_help db 'Помощь...'
4328 yogev_ezra 331
else
332
txt_help db 'Help...'
333
end if
4327 yogev_ezra 334
 
8236 IgorA 335
align 16
4327 yogev_ezra 336
i_end: ;конец кода
337
    rb 1024
338
  thread:
339
    rb 1024
340
stacktop:
341
  cur_dir_path:
342
    rb 4096
343
  library_path:
344
    rb 4096
345
  file_info:
346
    rb 40
347
mem: