Subversion Repositories Kolibri OS

Rev

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

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