Subversion Repositories Kolibri OS

Rev

Rev 4330 | 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 0
  6.   db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
  7.   dd 0,start,i_end,mem,stacktop,0,cur_dir_path
  8.  
  9. include '../../KOSfuncs.inc'
  10. include '../../macros.inc'
  11. include '../../proc32.inc'
  12. include '../../load_lib.mac'
  13. include 'lang.inc'
  14.  
  15. @use_library
  16.  
  17. align 4
  18. start:
  19.   mcall SF_SET_EVENTS_MASK,0x25 ;маска ожидаемых событий
  20.  
  21.   sys_load_library  msgbox_name, library_path, system_path, msgbox_lib_import
  22.  
  23.  
  24. red_win:
  25.   mcall SF_REDRAW,SSF_BEGIN_DRAW
  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.  
  35.   mov eax,SF_DEFINE_BUTTON
  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
  66.   mov edx,txt5
  67.   mcall
  68.  
  69.   mov ebx,50*65536+90
  70.   mov edx,txt4
  71.   mcall
  72.  
  73.   mov ebx,50*65536+65
  74.   mov edx,txt3
  75.   mcall
  76.  
  77.   mov ebx,50*65536+40
  78.   mov edx,txt2
  79.   mcall
  80.  
  81.   mov ebx,50*65536+15
  82.   mov edx,txt1
  83.   mcall
  84.  
  85.   push eax ebx ecx edx esi
  86.   ;line numbers
  87.   mov eax,SF_DRAW_NUMBER
  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
  117.   mcall SF_REDRAW,SSF_END_DRAW
  118.  
  119. align 4
  120. still:
  121.   mcall SF_WAIT_EVENT
  122.  
  123.   cmp al,1 ;изм. положение окна
  124.   jz red_win
  125.   cmp al,3
  126.   jz button
  127.   jmp still
  128.  
  129. button:
  130.   mcall SF_GET_BUTTON
  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:
  146.   mcall SF_TERMINATE_PROCESS
  147.  
  148. but_1:
  149.   stdcall [mb_create],msgbox_1,thread
  150.   jmp still
  151.  
  152. but_2:
  153.   stdcall [mb_create],msgbox_2,thread
  154.   stdcall [mb_setfunctions],msgbox_2_funct
  155.   jmp still
  156.  
  157. but_3:
  158.   stdcall [mb_create],msgbox_3,thread
  159.   jmp still
  160.  
  161. but_4:
  162.   stdcall [mb_create],msgbox_4,thread
  163.   jmp still
  164.  
  165. but_5:
  166.   stdcall [mb_create],msgbox_5,thread
  167.   mcall SF_SLEEP,100 ;stop program
  168.   stdcall [mb_reinit],msgbox_5_2
  169.   jmp still
  170.  
  171. if lang eq ru
  172.   txt1 db 'простое',0
  173.   txt2 db '3 кнопки',0
  174.   txt3 db '3 строки',0
  175.   txt4 db 'большое',0
  176.   txt5 db 'mb_reinit',0
  177.   hed db 'Пример использования MsgBox',0
  178. else
  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
  184.   hed db 'MsgBox usage example',0
  185. end if 
  186. ;sc system_colors
  187.  
  188.  
  189. ;---------------------------------------------------------------------
  190. msgbox_1:
  191.   dw 0
  192.   db 'MBox',0 ;+2 = +MB_TEXT_OFFSET
  193. if lang eq ru
  194.   db 'Пример',0
  195.   db 'Вижу',0 ;button1
  196. else
  197.   db 'Example',0
  198.   db 'I see!',0 ;button1
  199. end if
  200.   db 0
  201. msgbox_2:
  202.   dw 0
  203.   db 'MBox 3 buttons',0 ;+2 = +MB_TEXT_OFFSET
  204. if lang eq ru
  205.   db 'Пример с 3-мя кнопками',0
  206.   db 'Да',0 ;button1
  207.   db 'Отмена',0 ;button2
  208.   db 'Помощь',0 ;button3
  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
  215.   db 0
  216. msgbox_2_funct:
  217.   dd 0,0,fun_show_help
  218.  
  219. msgbox_3:
  220.   dw 0
  221.   db 'MBox 3 lines',0 ;+2 = +MB_TEXT_OFFSET
  222. if lang eq ru
  223.   db 'Строка 1',13,'Строка 2',13,'Строка 3',0
  224.   db '2020 г.',0 ;button1
  225. else
  226.   db 'Line 1',13,'Line 2',13,'Line 3',0
  227.   db 'Year 2020',0 ;button1
  228. end if 
  229.   db 0
  230. msgbox_4:
  231.   dw 0
  232. if lang eq ru
  233.   db 'Введите день',0 ;+2 = +MB_TEXT_OFFSET
  234. else
  235.   db 'Select day',0 ;+2 = +MB_TEXT_OFFSET
  236. end if
  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
  256. if lang eq ru
  257.   db 'Пн',0,'Вт',0,'Ср',0,'Чт',0,'Пт',0,'Сб',0,'Воскресение',0
  258. else
  259.   db 'Sun',0,'Mon',0,'Tue',0,'Wed',0,'Thu',0,'Fri',0,'Sat',0
  260. end if
  261.   db 0
  262. msgbox_5:
  263.   dw 0
  264. if lang eq ru
  265.   db 'Сообщение',0 ;+2 = +MB_TEXT_OFFSET
  266.   db 'Выполняю процесс ...',0
  267.   db 'Остановить',0
  268.   db 'Прервать',0
  269. else
  270.   db 'Message',0 ;+2 = +MB_TEXT_OFFSET
  271.   db 'Running process ...',0
  272.   db 'Stop',0
  273.   db 'Terminate',0
  274. end if
  275.   db 0
  276. msgbox_5_2:
  277.   dw 0
  278. if lang eq ru
  279.   db 'Сообщение',0 ;+2 = +MB_TEXT_OFFSET
  280.   db 'Все закончено',0
  281.   db 'Закрыть окно',0
  282. else
  283.   db 'Message',0 ;+2 = +MB_TEXT_OFFSET
  284.   db 'All finished',0
  285.   db 'Close window',0
  286. end if
  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
  308.     mcall SF_DRAW_RECT, 105*65536+70, 15*65536+50, 0x8080ff
  309.     mcall SF_DRAW_TEXT, 110*65536+25, 0xffffff, txt_help
  310.  
  311.     mov esi,0xffff
  312.     mov ebx,0x10000 ;format
  313.     movzx ecx,byte[sh_help]
  314.     mov edx,(150 shl 16)+40
  315.     mcall SF_DRAW_NUMBER
  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
  329. if lang eq ru
  330. txt_help db 'Помощь...'
  331. else
  332. txt_help db 'Help...'
  333. end if
  334.  
  335. align 16
  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:
  348.