Subversion Repositories Kolibri OS

Rev

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

  1. ;;      h2d2b v0.3 system colors by Leency  ;;
  2. ;;      21.08.2011                          ;;
  3.  
  4. ;;      hex2dec2bin 0.2 by Alexei Ershov    ;;
  5. ;;      16.11.2006                          ;;
  6.  
  7. use32
  8.     org 0x0
  9.     db  'MENUET01'
  10.     dd  0x01,start,i_end,e_end,e_end,0,0
  11.  
  12. include '../../../proc32.inc'
  13. include '../../../macros.inc' ; ìàêðîñû îáëåã÷àþò æèçíü àññåìáëåðùèêîâ!
  14.  
  15.  
  16. start:
  17. red:
  18.  
  19.     call draw_window
  20.  
  21. still:
  22.     mcall 10            ; ôóíêöèÿ 10 - æäàòü ñîáûòèÿ
  23.  
  24.     cmp  eax,1          ; ïåðåðèñîâàòü îêíî ?
  25.     je   red            ; åñëè äà - íà ìåòêó red
  26.     cmp  eax,2          ; íàæàòà êëàâèøà ?
  27.     je   key            ; åñëè äà - íà key
  28.     cmp  eax,3          ; íàæàòà êíîïêà ?
  29.     je   button         ; åñëè äà - íà button
  30.  
  31.     jmp  still          ; åñëè äðóãîå ñîáûòèå - â íà÷àëî öèêëà
  32.  
  33. ;---------------------------------------------------------------------
  34.  
  35. key:                   ; íàæàòà êëàâèøà íà êëàâèàòóðå
  36.     mov   eax, 2
  37.     mcall
  38.     mov   edi, [index]
  39.     cmp   edi, string1
  40.     jz    no_back
  41.  
  42.     cmp   ah, 8
  43.     jnz   no_back
  44.  
  45.     dec   edi
  46.     mov   byte [edi], ' '
  47.     mov   [index], edi
  48.     call  Draw_String
  49.     jmp   still
  50. no_back:
  51.     cmp   ah, 13
  52.     jz    read_str
  53.  
  54.     cmp   edi, string1_end
  55.     jae   still
  56.     mov   al, ah
  57.     stosb
  58.     mov   [index], edi
  59.     call  Draw_String
  60.     jmp  still          ; âåðíóòüñÿ ê íà÷àëó öèêëà
  61.  
  62. read_str:
  63.     dec   edi
  64.     mov   esi, string1
  65.  
  66.     call  GetBase
  67.  
  68.     xor   ecx, ecx
  69.     inc   ecx           ; ecx = 1
  70.  
  71. make_bin:
  72.     xor   eax, eax
  73.  
  74. next_digit:
  75.     xor   edx, edx
  76.     cmp   edi, esi
  77.     jb    .done
  78.  
  79.     mov   dl, [edi]
  80.     cmp   dl, '-'
  81.     jne   @f
  82.     neg   eax
  83.     jmp   .done
  84. @@:
  85.     cmp   dl, 'F'
  86.     jbe   @f
  87.     and   dl, 11011111b
  88. @@:
  89.     sub   dl, '0'
  90.     cmp   dl, 9
  91.     jbe   @f
  92.     sub   dl, 'A'-'9'-1
  93. @@:
  94.     cmp   dl, bl
  95.     jb    @f
  96.     ; Çäåñü îáðàáîòàòü îøèáêó
  97.  
  98.     jmp   .done
  99. @@:
  100.     push  ecx
  101.     xchg  eax, ecx
  102.     mul   edx ;        edx:eax = eax * edx
  103.     add   ecx, eax
  104.     pop   eax
  105.     mul   ebx
  106.     xchg  eax, ecx
  107.     dec   edi
  108.     jmp   next_digit
  109.  
  110. .done:
  111.    mov    [num], eax    ; ñîõðàíÿåì ââåäåííîå ÷èñëî
  112.    xor    eax, eax
  113.    mov    al, ' '
  114.    mov    edi, string1
  115.    mov    [index], edi
  116.    mov    ecx, string1_end-string1
  117.    rep    stosb         ; ñòèðàåì ââåäåííóþ ñòðîêó
  118.    jmp    red
  119.  
  120. ;---------------------------------------------------------------------
  121.  
  122.   button:
  123.     mcall 17            ; 17 - ïîëó÷èòü èäåíòèôèêàòîð íàæàòîé êíîïêè
  124.     cmp   ah, 1         ; åñëè ÍÅ íàæàòà êíîïêà ñ íîìåðîì 1,
  125.     jne   @f
  126.     mcall -1
  127. @@:
  128.     cmp   ah, 2
  129.     jne   @f
  130.     shl   [num], 1
  131.     jmp   red
  132. @@:
  133.     cmp   ah, 3
  134.     jne   @f
  135.     shr   [num], 1
  136.     jmp   red
  137. @@:
  138.     cmp   ah, 4
  139.     jne   still
  140.     sar   [num], 1
  141.     jmp   red
  142.  
  143. ;------------------------------------------------
  144.     draw_window:
  145. ;------------------------------------------------
  146.         mcall   48, 3, sys_colors, 40
  147.  
  148.     mcall 12, 1
  149.         mov     edx, 0x14000000
  150.         or      edx, [sys_colors.work]
  151.         ;mov    esi, 0x80000000
  152.         ;or     esi, [sys_colors.grab_text]
  153.     mcall 0, 200*65536+300, 200*65536+175, ,,title
  154.  
  155.        
  156.     mcall  8, 15      *65536+ 38, 90*65536+ 15, 2, [sys_colors.work_button] ; êíîïêà shl
  157.     mcall  ,                   ,110*65536+ 15,  ,          ; êíîïêà sal
  158.     mcall  , (300-53)*65536+ 38, 90*65536+ 15, 3,          ; êíîïêà shr
  159.     mcall  ,                   ,110*65536+ 15, 4,          ; êíîïêà sar
  160.  
  161.         mov     ecx, 0x80000000
  162.         or      ecx, [sys_colors.work_text]
  163.     mcall  4, 15*65536+30,   , binstr,
  164.     mcall  , 15*65536+44,   , decstr,
  165.     mcall  , 15*65536+58,   ,sdecstr,
  166.     mcall  , 15*65536+72,   , hexstr,
  167.     mcall  , 15*65536+150,  , numstr,
  168.  
  169.         mov     ecx, 0x80000000
  170.         or      ecx, [sys_colors.work_button_text]
  171.     mcall  ,       26*65536+94,         , shlstr,3
  172.     mcall  , (300-42)*65536+94,         , shrstr,
  173.     mcall  ,       26*65536+114,        , salstr,
  174.     mcall  , (300-42)*65536+114,        , sarstr,
  175.     mov    ecx, [num]
  176.  
  177.        
  178.     mcall  47, 8*65536+256,,240*65536+72,[sys_colors.work_text]    ; 16-íàÿ
  179.     mcall    , 10*65536,   ,228*65536+44,     ; 10-íàÿ
  180.     mcall    , 8*65536+512,,240*65536+30,     ; 2-íàÿ
  181.     ror    ecx, 8
  182.     mcall    ,            ,,(240-56)*65536+30,
  183.     ror    ecx, 8
  184.     mcall    ,            ,,(240-56*2)*65536+30,
  185.     ror    ecx, 8
  186.     mcall    ,            ,,(240-56*3)*65536+30,
  187.     ror    ecx, 8
  188.     mov    [minus], '+'
  189.     jnc    @f
  190.     mov    [minus], '-'
  191.     neg    ecx
  192. @@:
  193.     mcall   ,  10*65536,,228*65536+58,        ; 10-íàÿ ñî çíàêîì
  194.     mcall  4, 222*65536+58, 0, minus, 1
  195.     mcall 38, 15*65536+300-15, 137*65536+137, [sys_colors.work_graph]
  196.     call   Draw_String
  197.     mcall 12, 2                    ; ôóíêöèÿ 12: ñîîáùèòü ÎÑ îá îòðèñîâêå îêíà
  198.  
  199. ret
  200.  
  201. ;-------------------------------------------------
  202.     Draw_String:
  203. ;-------------------------------------------------
  204.  
  205.      mcall   4, 60*65536+150, 0x40A40473, \
  206.              string1,string1_end-string1,0x00AABBCC
  207.      ret
  208.  
  209. ;-------------------------------------------------
  210.     GetBase:
  211. ;-------------------------------------------------
  212.     mov   ebx, 10
  213.     cmp   edi, esi
  214.     jb    .done
  215.  
  216.     mov   al, [edi]
  217.     cmp   al, 'H'
  218.     jbe   @f
  219.     and   al, 11011111b
  220. @@:
  221.     cmp   al, 'H'
  222.     jne   @f
  223.     mov   ebx, 16
  224.     dec   edi
  225.     jmp   .done
  226.  
  227. @@:
  228.     cmp   al, 'D'
  229.     jne   @f
  230.     mov   ebx, 10
  231.     dec   edi
  232.     jmp   .done
  233.  
  234. @@:
  235.     cmp   al, 'B'
  236.     jne   .done
  237.     mov   ebx, 2
  238.     dec   edi
  239.  
  240. .done:
  241. ret
  242.  
  243. ;-------------------------------------------------
  244. string1:
  245.   db  34 dup(' ')
  246. string1_end:
  247.   index dd string1
  248.   num   dd  0
  249.  
  250.  
  251.  title db 'hex2dec2bin 0.3',0
  252.  minus  db '-',0
  253.  numstr db 'Number:',0
  254.  hexstr db 'hex:',0
  255.  binstr db 'bin:',0
  256.  decstr db 'dec:',0
  257. sdecstr db 'signed dec:',0
  258.  shlstr db 'shl',0
  259.  salstr db 'sal',0
  260.  shrstr db 'shr',0
  261.  sarstr db 'sar',0
  262.  
  263. i_end:
  264.  sys_colors             system_colors
  265.  rb 0x400                                       ;stack
  266.  
  267. e_end:                             ; ìåòêà êîíöà ïðîãðàììû
  268.