Subversion Repositories Kolibri OS

Rev

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

  1.     VERSION equ "0.3ΔΉ"
  2.     use32
  3.     org     0
  4.     db      'MENUET01'
  5.     dd      1, main, dataend, memory, stacktop, 0, 0
  6.  
  7.     include "../../proc32.inc"
  8.     include "../../macros.inc"
  9.     include "../../dll.inc"
  10.     include "../../develop/libraries/box_lib/trunk/box_lib.mac"
  11.   ;  include "../../debug.inc"
  12.     include "parser.inc"
  13.  
  14.  ;===============================
  15.  
  16.     sz_head db "Calc+ [v", VERSION, "]", 0
  17.     buttons db "789456123()%^-+/*0"
  18.     edb1    edit_box 184, 8, 12, 0, 0, 0, 0, 0, 500, \
  19.                      exp, group, ed_always_focus + ed_focus, 0, 0
  20.  
  21.  imports:
  22.     library gui, "box_lib.obj"
  23.     import  gui, editbox.draw,  "edit_box",     \
  24.                  editbox.key,   "edit_box_key", \
  25.                  editbox.mouse, "edit_box_mouse"
  26.  
  27.  ;===============================
  28.  
  29.  main:
  30.     mov     [ans.buffer], word "0"
  31.     mov     [ans.size], 15
  32.  
  33.     mcall   40, 100111b
  34.     mcall   48, 3, scn, 192
  35.  
  36.     m2m     [edb1.color],              [scn.gui_face]
  37.     m2m     [edb1.shift_color],        [scn.gui_select]
  38.     m2m     [edb1.focus_border_color], [scn.gui_face]
  39.     m2m     [edb1.text_color],         [scn.gui_fctext]
  40.  
  41.     mcall   68, 11
  42.     stdcall dll.Load, imports
  43.  
  44.  ;----------------------
  45.  
  46.  update:
  47.     mcall   23, 5
  48.  
  49.     cmp     eax, EV_REDRAW
  50.     je      ev_redraw
  51.     cmp     eax, EV_KEY
  52.     je      ev_key
  53.     cmp     eax, EV_BUTTON
  54.     je      ev_button
  55.     cmp     eax, EV_MOUSE
  56.     je      ev_mouse
  57.  
  58.     dec     [timer]
  59.     cmp     [timer], 0
  60.     je      calc
  61.  
  62.     jmp     update
  63.  
  64.  ;----------------------
  65.  
  66.  ev_redraw:
  67.     mov     edx, [scn.win_body]
  68.     or      edx, 0x34 shl 24
  69.     mcall    0, <100, 236>, <100, 164>, , , sz_head
  70.  
  71.     call    draw_textbox
  72.  
  73.     mov     [but_id], 0x4000000A
  74.     mov     [txt_id], buttons
  75.     mov     [txt_x], 16
  76.     mov     [but_w], 38
  77.     stdcall draw_button,   4,  42
  78.     stdcall draw_button,  46,  42
  79.     stdcall draw_button,  88,  42
  80.     stdcall draw_button,   4,  66
  81.     stdcall draw_button,  46,  66
  82.     stdcall draw_button,  88,  66
  83.     stdcall draw_button,   4,  90
  84.     stdcall draw_button,  46,  90
  85.     stdcall draw_button,  88,  90
  86.     stdcall draw_button,  88, 114
  87.  
  88.     stdcall draw_button, 144,  42
  89.     stdcall draw_button, 186,  42
  90.     stdcall draw_button, 144,  66
  91.     stdcall draw_button, 186,  66
  92.     stdcall draw_button, 144,  90
  93.     stdcall draw_button, 186,  90
  94.     stdcall draw_button, 144, 114
  95.     stdcall draw_button, 186, 114
  96.  
  97.     mov     [txt_x], 37
  98.     mov     [but_w], 80
  99.     stdcall draw_button,   4, 114
  100.  
  101.     jmp     update
  102.  
  103.  ;----------------------
  104.  
  105.  ev_key:
  106.     mov     [timer], 10
  107.  
  108.     mcall   2
  109.     cmp     ah, 27
  110.     je      exit
  111.     invoke  editbox.key, edb1
  112.     jmp     update
  113.  
  114.  ;----------------------
  115.  
  116.  ev_button:
  117.     mov     [timer], 10
  118.  
  119.     mcall   17
  120.  
  121.     cmp     ah, 1
  122.     je      exit
  123.  
  124.     cmp     ah, 2
  125.     jne     .not_copy
  126.  
  127.  .copy:
  128.  
  129.     mov     eax, exp
  130.     mov     ebx, ans.buffer
  131.     mov     ecx, 0
  132.   @@:
  133.     mov     dl, [ebx]
  134.     mov     [eax], dl
  135.     inc     eax
  136.     inc     ebx
  137.     inc     ecx
  138.     cmp     [eax - 1], byte 0
  139.     jne     @b
  140.  
  141.     dec     ecx
  142.     mov     [edb1.size], ecx
  143.     m2m     [edb1.pos], [edb1.size]
  144.  
  145.     jmp     .redraw
  146.  
  147.  .not_copy:
  148.  
  149.     cmp     ah, 19
  150.     jne     .not_del
  151.  
  152.  .del:
  153.  
  154.     cmp     [edb1.pos], 0
  155.     je      update
  156.     mov     eax, exp
  157.     add     eax, [edb1.pos]
  158.     dec     eax
  159.     mov     ebx, exp
  160.     add     ebx, [edb1.size]
  161.     inc     ebx
  162.   @@:
  163.     cmp     eax, ebx
  164.     je      @f
  165.     mov     cl, [eax + 1]
  166.     mov     [eax], cl
  167.     inc     eax
  168.     jmp     @b
  169.   @@:
  170.     dec     [edb1.pos]
  171.     dec     [edb1.size]
  172.     m2m     [edb1.shift], [edb1.pos]
  173.     jmp     .redraw
  174.  
  175.  .not_del:
  176.  
  177.     cmp     ah, 10
  178.     jl      update
  179.     cmp     ah, 50
  180.     jg      update
  181.  
  182.     movzx   eax, ah
  183.     add     eax, buttons
  184.     sub     eax, 10
  185.     mov     al, [eax]
  186.  
  187.     mov     ebx, exp
  188.     add     ebx, [edb1.size]
  189.     mov     ecx, exp
  190.     add     ecx, [edb1.pos]
  191.   @@:
  192.     cmp     ebx, ecx
  193.     je      @f
  194.     mov     dl, [ebx - 1]
  195.     mov     [ebx], dl
  196.     dec     ebx
  197.     jmp     @b
  198.   @@:
  199.  
  200.     mov     [ebx], al
  201.     inc     [edb1.size]
  202.     inc     [edb1.pos]
  203.  
  204.  .redraw:
  205.     call    draw_textbox
  206.     jmp     update
  207.  
  208.  ;----------------------
  209.  
  210.  ev_mouse:
  211.     mcall   2
  212.  
  213.     invoke  editbox.mouse, edb1
  214.     jmp     update
  215.  
  216.  ;----------------------
  217.  
  218.  exit:
  219.     mcall   -1
  220.  
  221.  ;----------------------
  222.  
  223.  calc:
  224.     stdcall parse
  225.     cmp     [error_n], 0
  226.     jne     .error
  227.  
  228.     stdcall convert_to_str, eax, ans.buffer
  229.     imul    eax, 6
  230.     add     eax, 9
  231.     mov     [ans.size], eax
  232.     jmp     .redraw
  233.  
  234.  .error:
  235.     cmp     [error_n], 1
  236.     je      .err_1
  237.     cmp     [error_n], 4
  238.     je      .err_4
  239.  
  240.     mov     [ans.buffer +  0], dword "Expe"
  241.     mov     [ans.buffer +  4], dword "cted"
  242.     mov     [ans.buffer +  8], dword " ')'"
  243.     mov     [ans.buffer + 12], byte 0
  244.     mov     [ans.size], 81
  245.  
  246.     cmp     [error_n], 2
  247.     je      .redraw
  248.     cmp     [error_n], 3
  249.     je      .err_3
  250.  .err_1:
  251.     mov     [ans.buffer +  0], dword "Div."
  252.     mov     [ans.buffer +  4], dword " by "
  253.     mov     [ans.buffer +  8], byte  "0"
  254.     mov     [ans.buffer +  9], byte 0
  255.     mov     [ans.size], 63
  256.     jmp     .redraw
  257.  .err_4:
  258.     mov     [ans.buffer +  0], dword "Inpu"
  259.     mov     [ans.buffer +  4], dword "t er"
  260.     mov     [ans.buffer +  8], dword "rror"
  261.     mov     [ans.buffer + 12], byte 0
  262.     mov     [ans.size], 81
  263.     jmp     .redraw
  264.  .err_3:
  265.     mov     [ans.buffer + 10], byte "("
  266.     jmp     .redraw
  267.  
  268.  .redraw:
  269.     call    draw_textbox
  270.     jmp     update
  271.  
  272.  ;----------------------
  273.  
  274.  proc draw_button, x, y
  275.     mcall   13, <[x], [but_w]>, <[y], 20>, [scn.gui_frame]
  276.  
  277.     add     ebx, 1 shl 16
  278.     add     ecx, 1 shl 16
  279.     sub     ebx, 2
  280.     sub     ecx, 2
  281.     mcall   , , , [scn.3d_light]
  282.  
  283.     add     ebx, 1 shl 16
  284.     add     ecx, 1 shl 16
  285.     dec     ebx
  286.     dec     ecx
  287.     mcall   , , , [scn.3d_dark]
  288.  
  289.     dec     ebx
  290.     dec     ecx
  291.     mcall   , , , [scn.win_face]
  292.  
  293.     mcall   1, [x], [y], [scn.win_body]
  294.  
  295.     add     ebx, [but_w]
  296.     dec     ebx
  297.     mcall
  298.  
  299.     add     ecx, 20
  300.     dec     ecx
  301.     mcall
  302.  
  303.     sub     ebx, [but_w]
  304.     inc     ebx
  305.     mcall
  306.  
  307.     mov     ebx, [x]
  308.     inc     ebx
  309.     shl     ebx, 16
  310.     add     ebx, [but_w]
  311.     sub     ebx, 3
  312.     mov     ecx, [y]
  313.     inc     ecx
  314.     shl     ecx, 16
  315.     add     ecx, 20
  316.     sub     ecx, 3
  317.     mov     edx, [but_id]
  318.     mcall   8
  319.  
  320.     mov     ebx, [x]
  321.     add     ebx, [txt_x]
  322.     shl     ebx, 16
  323.     add     ebx, [y]
  324.     add     ebx, 7
  325.     mcall   4, , [scn.win_text], [txt_id], 1
  326.  
  327.     inc     dword [txt_id]
  328.     inc     dword [but_id]
  329.  
  330.     ret
  331.  endp
  332.  
  333.  ;----------------------
  334.  
  335.  proc draw_textbox
  336.     mcall   13, <  4, 220>, <  8,  23>, [scn.gui_frame]
  337.     mov     edx, [scn.gui_face]
  338.     cmp     [error_n], 0
  339.     je      @f
  340.     mov     edx, 0xFFAAAA
  341.   @@:
  342.     mcall   13, <  5, 218>, <  9, 21>
  343.     mcall     , <  5, 218>, <  9,  1>, [scn.3d_face]
  344.     mcall     , <  5,   1>, < 10, 20>
  345.     mcall     , <  5, 218>, < 31,  1>, [scn.3d_light]
  346.  
  347.     mov     ebx, 224
  348.     sub     ebx, [ans.size]
  349.     shl     ebx, 16
  350.     inc     ebx
  351.     mcall     ,           , < 9, 21>, [scn.gui_frame]
  352.     add     ebx, [ans.size]
  353.     add     ebx, 1 shl 16
  354.     sub     ebx, 3
  355.     mcall     ,           ,         , [scn.3d_light]
  356.     cmp     [error_n], 0
  357.     jne     .btn_not
  358.     mcall   8, , , 0x40000002
  359.  .btn_not:
  360.     add     ebx, 1 shl 16
  361.     add     ecx, 1 shl 16
  362.     dec     ebx
  363.     dec     ecx
  364.     mcall   13,           ,         , [scn.win_face]
  365.     shr     ecx, 16
  366.     mov     bx, cx
  367.     add     ebx, 3 shl 16 + 6
  368.     mov     ecx, [scn.win_text]
  369.     or      ecx, 1b shl 31
  370.     mcall   4, , , ans.buffer
  371.  
  372.     mcall    1,   4,  8, [scn.win_body]
  373.     mcall     , 223
  374.     mcall     ,    , 30, [scn.3d_light]
  375.     mcall     ,   4
  376.  
  377.     mov     ebx, 214
  378.     sub     ebx, [ans.size]
  379.     cmp     ebx, 24
  380.     jg      @f
  381.     mov     ebx, 24
  382.   @@:
  383.     mov     [edb1.width], ebx
  384.     m2m     [edb1.color],              [scn.gui_face]
  385.     m2m     [edb1.focus_border_color], [scn.gui_face]
  386.     cmp     [error_n],  0
  387.     je      @f
  388.     mov     [edb1.color],              0xFFAAAA
  389.     mov     [edb1.focus_border_color], 0xFFAAAA
  390.   @@:
  391.     invoke  editbox.draw, edb1
  392.  
  393.     ret
  394.  endp
  395.  
  396.  ;----------------------
  397.  
  398.  dataend:
  399.  
  400.  ;===============================
  401.  
  402.             rb 2048
  403.  stacktop:
  404.  
  405.  exp        rb 512
  406.  exp_pos    rd 1
  407.  exp_lvl    rd 1
  408.  group      rd 1
  409.  
  410.  ans.buffer:rb 512
  411.  ans.size   rd 1
  412.  error_n    rd 1
  413.  
  414.  scn        sys_colors_new
  415.  timer      rd 1
  416.  but_id     rd 1
  417.  but_w      rd 1
  418.  txt_id     rd 1
  419.  txt_x      rd 1
  420.  
  421.  memory:
  422.