Subversion Repositories Kolibri OS

Rev

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

  1. ;;      h2d2b v0.5 big fonts by Leency      ;;
  2. ;;      09.11.2016                          ;;
  3.  
  4. ;;      h2d2b v0.4 use editbox by IgorA     ;;
  5. ;;      30.08.2011                          ;;
  6.  
  7. ;;      h2d2b v0.3 system colors by Leency  ;;
  8. ;;      21.08.2011                          ;;
  9.  
  10. ;;      hex2dec2bin 0.2 by Alexei Ershov    ;;
  11. ;;      16.11.2006                          ;;
  12.  
  13. WIN_W = 364
  14.  
  15. use32
  16.     org 0x0
  17.     db  'MENUET01'
  18.     dd  0x01,start,i_end,e_end,e_end,0,sys_path
  19.  
  20. include '../../../proc32.inc'
  21. include '../../../macros.inc' ; макросы облегчают жизнь ассемблерщиков!
  22. include '../../../develop/libraries/box_lib/load_lib.mac'
  23. include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
  24. include 'lang.inc'
  25.  
  26. @use_library
  27.  
  28. start:
  29.         load_libraries l_libs_start,l_libs_end
  30.         ;проверка на сколько удачно загузилась наша библиотека
  31.         mov     ebp,lib_0
  32.         cmp     dword [ebp+ll_struc_size-4],0
  33.         jz      @f
  34.                 mcall -1 ;exit not correct
  35.         @@:
  36.         mcall 40,0x80000027
  37.         mcall 48, 3, sys_colors, 40
  38.         edit_boxes_set_sys_color edit1,editboxes_end,sys_colors
  39.  
  40. red:
  41.     call draw_window
  42.  
  43. still:
  44.     mcall 10            ; функция 10 - ждать события
  45.  
  46.     cmp  eax,1          ; перерисовать окно ?
  47.     je   red            ; если да - на метку red
  48.     cmp  eax,2          ; нажата клавиша ?
  49.     je   key            ; если да - на key
  50.     cmp  eax,3          ; нажата кнопка ?
  51.     je   button         ; если да - на button
  52.     cmp  eax,6
  53.     je   mouse
  54.  
  55.     jmp  still          ; если другое событие - в начало цикла
  56.  
  57. ;---------------------------------------------------------------------
  58.  
  59. key:                   ; нажата клавиша на клавиатуре
  60.     mcall 2
  61.         cmp ah,13 ;обработка кнопки Enter
  62.         je @f
  63.                 stdcall [edit_box_key], dword edit1
  64.                 jmp still
  65.         @@:
  66.         mov edi,string1
  67.         add edi,[edit1.size] ;устанавливаем в edi конец строки
  68.         jmp read_str
  69.     jmp still           ; вернуться к началу цикла
  70.  
  71. read_str:
  72.     dec   edi
  73.     mov   esi, string1
  74.  
  75.     call  GetBase
  76.  
  77.     xor   ecx, ecx
  78.     inc   ecx           ; ecx = 1
  79.  
  80. make_bin:
  81.     xor   eax, eax
  82.  
  83. next_digit:
  84.     xor   edx, edx
  85.     cmp   edi, esi
  86.     jb    .done
  87.  
  88.     mov   dl, [edi]
  89.     cmp   dl, '-'
  90.     jne   @f
  91.     neg   eax
  92.     jmp   .done
  93. @@:
  94.     cmp   dl, 'F'
  95.     jbe   @f
  96.     and   dl, 11011111b
  97. @@:
  98.     sub   dl, '0'
  99.     cmp   dl, 9
  100.     jbe   @f
  101.     sub   dl, 'A'-'9'-1
  102. @@:
  103.     cmp   dl, bl
  104.     jb    @f
  105.     ; Здесь обработать ошибку
  106.  
  107.     jmp   .done
  108. @@:
  109.     push  ecx
  110.     xchg  eax, ecx
  111.     mul   edx ;        edx:eax = eax * edx
  112.     add   ecx, eax
  113.     pop   eax
  114.     mul   ebx
  115.     xchg  eax, ecx
  116.     dec   edi
  117.     jmp   next_digit
  118.  
  119. .done:
  120.    mov    [num], eax    ; сохраняем введенное число
  121.    jmp    red
  122.  
  123. ;---------------------------------------------------------------------
  124.  
  125. button:
  126.         mcall 17                ; 17 - получить идентификатор нажатой кнопки
  127.         cmp   ah, 1     ; если НЕ нажата кнопка с номером 1,
  128.         jne   @f
  129.                 mcall -1
  130.         @@:
  131.         cmp ah, 2
  132.         jne @f
  133.                 shl [num], 1
  134.                 jmp red
  135.         @@:
  136.         cmp ah, 3
  137.         jne @f
  138.                 shr [num], 1
  139.                 jmp red
  140.         @@:
  141.         cmp ah, 4
  142.         jne @f
  143.                 sar [num], 1
  144.                 jmp red
  145.         @@:
  146.         cmp ah, 5
  147.         jne @f
  148.                 mov edi,string1
  149.                 add edi,[edit1.size] ;устанавливаем в edi конец строки
  150.                 jmp read_str
  151.                 ;jmp red
  152.         @@:
  153.         jmp still
  154.  
  155. mouse:
  156.         stdcall [edit_box_mouse], edit1
  157.         jmp still
  158.  
  159. ;------------------------------------------------
  160.     draw_window:
  161. ;------------------------------------------------
  162.         mcall   48, 3, sys_colors, 40
  163.  
  164.     mcall 12, 1
  165.         mov     edx, 0x14000000
  166.         or      edx, [sys_colors.work]
  167.         ;mov    esi, 0x80000000
  168.         ;or     esi, [sys_colors.grab_text]
  169.     mcall 0, 200*65536+WIN_W, 200*65536+179, ,,title
  170.  
  171.        
  172.     mcall  8,         15*65536+42,106*65536+ 21, 2, [sys_colors.work_button] ; кнопка shl
  173.     mcall   ,         70*65536+42,             ,  , ; кнопка sal
  174.     mcall   , (WIN_W-55)*65536+42,             , 3, ; кнопка shr
  175.     mcall   ,(WIN_W-111)*65536+42,             , 4, ; кнопка sar
  176.     mcall   , (WIN_W-72)*65536+58,145*65536+ 21, 5, ; кнопка Ok
  177.  
  178.         mov     ecx, 0x90000000
  179.         or      ecx, [sys_colors.work_text]
  180.     mcall  4, 15*65536+30,   , binstr,
  181.     mcall   , 15*65536+46,   , decstr,
  182.     mcall   , 15*65536+62,   ,sdecstr,
  183.     mcall   , 15*65536+78,   , hexstr,
  184.     mcall   , 15*65536+150,  , numstr,
  185.  
  186.         mov     ecx, 0x90000000
  187.         or      ecx, [sys_colors.work_button_text]
  188.     mcall  , 23*65536+109, , shl_sal_sar_shr_button_caption
  189.         mcall  , (WIN_W-59)*65536+149,  , Okstr,
  190.     mov    ecx, [num]
  191.  
  192.         mov esi, [sys_colors.work_text]
  193.         or  esi, 0x90000000
  194.  
  195.     mcall  47, 10*65536,   ,(WIN_W-92)*65536+62,    ; 10-ная со знаком
  196.         BIN_LINE_BLOCK_W = 76
  197.     mcall 47, 8*65536+512,,(WIN_W-BIN_LINE_BLOCK_W)*65536+30 ; 2-ная   
  198.     ror    ecx, 8
  199.         mov    edx, (WIN_W-BIN_LINE_BLOCK_W*2)*65536+30
  200.         mcall
  201.     ror    ecx, 8
  202.     mov    edx, (WIN_W-BIN_LINE_BLOCK_W*3)*65536+30
  203.         mcall
  204.     ror    ecx, 8
  205.     mov    edx, (WIN_W-BIN_LINE_BLOCK_W*4)*65536+30
  206.         mcall
  207.     ror    ecx, 8
  208.     mov    [minus], '+'
  209.     jnc    @f
  210.     mov    [minus], '-'
  211.     neg    ecx
  212. @@:
  213.     mcall   , 10*65536,   ,(WIN_W-92)*65536+46,    ; 10-ная
  214.         mcall   , 8*65536+256,,(WIN_W-76)*65536+78,    ; 16-ная
  215.     mcall  4, (WIN_W-102)*65536+58, 0x90000000, minus, 1
  216.     mcall 38, 15*65536+WIN_W-15, 137*65536+137, [sys_colors.work_graph]
  217.         stdcall [edit_box_draw], edit1
  218.     mcall 12, 2                    ; функция 12: сообщить ОС об отрисовке окна
  219.  
  220. ret
  221.  
  222.  
  223. ;-------------------------------------------------
  224.     GetBase:
  225. ;-------------------------------------------------
  226.     mov   ebx, 10
  227.     cmp   edi, esi
  228.     jb    .done
  229.  
  230.     mov   al, [edi]
  231.     cmp   al, 'H'
  232.     jbe   @f
  233.     and   al, 11011111b
  234. @@:
  235.     cmp   al, 'H'
  236.     jne   @f
  237.     mov   ebx, 16
  238.     dec   edi
  239.     jmp   .done
  240.  
  241. @@:
  242.     cmp   al, 'D'
  243.     jne   @f
  244.     mov   ebx, 10
  245.     dec   edi
  246.     jmp   .done
  247.  
  248. @@:
  249.     cmp   al, 'B'
  250.     jne   .done
  251.     mov   ebx, 2
  252.     dec   edi
  253.  
  254. .done:
  255. ret
  256.  
  257. ;-------------------------------------------------
  258. string1:
  259.   db  34 dup(' ')
  260. string1_end:
  261.   num   dd  0
  262.  
  263.  
  264.  title db 'hex2dec2bin 0.5',0
  265.  minus  db '-',0
  266.  hexstr db 'hex:',0
  267.  binstr db 'bin:',0
  268.  decstr db 'dec:',0
  269.  sdecstr db 'signed dec:',0
  270.  shl_sal_sar_shr_button_caption db 'shl    sal                    sar    shr',0
  271.  
  272. if lang eq ru
  273.         numstr db 'Число:',0
  274.         Okstr db 'Ввод',0
  275.         head_f_i:
  276.         head_f_l db 'Системная ошибка',0
  277. else
  278.         numstr db 'Number:',0
  279.         Okstr db 'Enter',0
  280.         head_f_i:
  281.         head_f_l db 'System error',0
  282. end if
  283.  
  284. mouse_dd dd 0
  285. edit1 edit_box (WIN_W-67-82), 67, 146, 0xffffff, 0xff, 0x80ff, 0, 0x90000000, (string1_end-string1), string1 , mouse_dd, ed_focus+ed_always_focus
  286.  
  287. editboxes_end:
  288.  
  289. system_dir_0 db '/sys/lib/'
  290. lib_name_0 db 'box_lib.obj',0
  291. err_msg_found_lib_0 db 'Не найдена библиотека ',39,'box_lib.obj',39,0
  292. err_msg_import_0 db 'Ошибка при импорте библиотеки ',39,'box_lib',39,0
  293.  
  294. l_libs_start:
  295.         lib_0 l_libs lib_name_0, sys_path, library_path, system_dir_0,\
  296.                 err_msg_found_lib_0,head_f_l,import_box_lib,err_msg_import_0,head_f_i
  297. l_libs_end:
  298.  
  299. align 4
  300. import_box_lib:
  301.         ;dd sz_init1
  302.         edit_box_draw dd sz_edit_box_draw
  303.         edit_box_key dd sz_edit_box_key
  304.         edit_box_mouse dd sz_edit_box_mouse
  305.         ;edit_box_set_text dd sz_edit_box_set_text
  306. dd 0,0
  307.         ;sz_init1 db 'lib_init',0
  308.         sz_edit_box_draw db 'edit_box',0
  309.         sz_edit_box_key db 'edit_box_key',0
  310.         sz_edit_box_mouse db 'edit_box_mouse',0
  311.         ;sz_edit_box_set_text db 'edit_box_set_text',0
  312.  
  313. i_end:
  314.  sys_colors             system_colors
  315.  rb 0x400                                       ;stack
  316.  sys_path rb 4096
  317.  library_path rb 4096
  318. e_end:                             ; метка конца программы
  319.