Subversion Repositories Kolibri OS

Rev

Rev 4328 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;Огромная благодарность Maxxxx32, Diamond, Heavyiron
  2. ;и другим программистам, а также
  3. ;Теплову Алексею (<Lrz> 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:
  350.