Subversion Repositories Kolibri OS

Rev

Rev 4327 | 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 '../../develop/libraries/box_lib/load_lib.mac'
  17. include 'lang.inc'
  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.  
  197. if lang eq ru
  198.   txt136 db 'простое',0
  199.   txt137 db '3 кнопки',0
  200.   txt138 db '3 строки',0
  201.   txt139 db 'большое',0
  202.   txt140 db 'mb_reinit',0
  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  
  212. ;sc system_colors
  213.  
  214.  
  215. ;---------------------------------------------------------------------
  216. msgbox_1:
  217.   dw 0
  218.   db 'MBox',0 ;+2 = +MB_TEXT_OFFSET
  219. if lang eq ru
  220.   db 'Пример',0
  221.   db 'Вижу',0 ;button1
  222.   db 0
  223. else
  224.   db 'Example',0
  225.   db 'I see!',0 ;button1
  226. end if  
  227. msgbox_2:
  228.   dw 0
  229.   db 'MBox 3 buttons',0 ;+2 = +MB_TEXT_OFFSET
  230. if lang eq ru
  231.   db 'Пример с 3-мя кнопками',0
  232.   db 'Да',0 ;button1
  233.   db 'Отмена',0 ;button2
  234.   db 'Помощь',0 ;button3
  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
  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
  250. if lang eq ru
  251.   db 'Строка 1',13,'Строка 2',13,'Строка 3',0
  252.   db '2009 г.',0 ;button1
  253. else
  254.   db 'Line 1',13,'Line 2',13,'Line 3',0
  255.   db 'Year 2009',0 ;button1
  256. end if  
  257.   db 0
  258. msgbox_4:
  259.   dw 0
  260. if lang eq ru
  261.   db 'Введите день',0 ;+2 = +MB_TEXT_OFFSET
  262. else
  263.   db 'Select day',0 ;+2 = +MB_TEXT_OFFSET
  264. end if
  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
  284. if lang eq ru
  285.   db 'Пн',0
  286.   db 'Вт',0
  287.   db 'Ср',0
  288.   db 'Чт',0
  289.   db 'Пт',0
  290.   db 'Сб',0
  291.   db 'Воскресение',0
  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
  301.   db 0
  302. msgbox_5:
  303.   dw 0
  304. if lang eq ru
  305.   db 'Сообщение',0 ;+2 = +MB_TEXT_OFFSET
  306.   db 'Выполняю процесс ...',0
  307.   db 'Остановить',0
  308.   db 'Прервать',0
  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
  315.   db 0
  316. msgbox_5_2:
  317.   dw 0
  318. if lang eq ru
  319.   db 'Сообщение',0 ;+2 = +MB_TEXT_OFFSET
  320.   db 'Все закончено',0
  321.   db 'Закрыть окно',0
  322. else
  323.   db 'Message',0 ;+2 = +MB_TEXT_OFFSET
  324.   db 'All finished',0
  325.   db 'Close window',0
  326. end if
  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
  352.     mov eax,13 ;Ёшёютрэшх яЁ ьюєуюы№эшър
  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
  387. if lang eq ru
  388. txt_help db 'Помощь...'
  389. else
  390. txt_help db 'Help...'
  391. end if
  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:
  405.