Subversion Repositories Kolibri OS

Rev

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

  1. ;;   Calculator for MenuetOS (c) Ville Turjanmaa
  2. ;;  
  3. ;;   Compile with FASM
  4. ;;  
  5. ;;   Pavel Rymovski (Heavyiron) - version for KolibriOS
  6. ;;
  7. ;; What's new:
  8. ;;   Calc 1.1
  9. ;;           1) changed design
  10. ;;           2) new procedure of draw window (10 decimal digits, 23 binary, "+" not displayed now)
  11. ;;           3) window with skin
  12. ;;   Calc 1.2
  13. ;;           1)added some useful functions, such as arcsin, arccos, arctg, 1/x, x^2
  14. ;;   Calc 1.31
  15. ;;           1)optimised program
  16. ;;           2)new type of window (you need kernel 114 revision or higher)
  17. ;;   Calc 1.32
  18. ;;           1)fixed arccos
  19.  
  20.  
  21. appname equ 'Calc '
  22. version    equ '1.32'
  23.  
  24. use32
  25.                org    0x0
  26.                db    'MENUET01'            ; 8 byte id
  27.                dd     0x01                      ; header version
  28.                dd     START                    ; start of code
  29.                dd     I_END                    ; size of image
  30.                dd     0x1000                  ; memory for app
  31.                dd     0x1000                  ; esp
  32.                dd     0x0,0x0                 ; I_Param , I_Icon
  33.  
  34. include '..\..\..\macros.inc'
  35.  
  36. START:
  37.  
  38.     mov  eax,48
  39.     mov  ebx,3
  40.     mov  ecx,sc
  41.     mov  edx,sizeof.system_colors
  42.     mcall
  43.  
  44.  red:
  45.     call draw_window
  46.  
  47.  still:  
  48.     push 10
  49.     pop eax
  50.     mcall
  51.  
  52.     dec eax
  53.     jz red
  54.     dec eax
  55.     jz key
  56.  
  57.   button:
  58.     mov  al,17      ; ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
  59.     mcall
  60.     shr  eax,8
  61.     jmp  testbut
  62.  
  63.   key:        
  64.     mov  al,2       ; ¯®«ãç¨âì ASCII-ª®¤ ­ ¦ â®© ª« ¢¨è¨
  65.     mcall
  66.     shr  eax,8
  67.     mov  edi,asci   ; ¯¥à¥¢®¤ ASCII ¢ ¨¤¥­â¨ä¨ª â®à ª­®¯ª¨
  68.     mov  ecx,18
  69.     cld
  70.     repne scasb
  71.     jne  still
  72.     sub  edi,asci
  73.     dec  edi
  74.     mov  esi,butid
  75.     add  esi,edi
  76.     lodsb
  77.      
  78.   testbut:
  79.     cmp  eax,1      ; ª­®¯ª  1 - § ªàë⨥ ¯à®£à ¬¬ë
  80.     jne  noclose
  81.     or   eax,-1
  82.     mcall
  83.  
  84.   noclose:
  85.     cmp  eax,2
  86.     jne  no_reset
  87.     call clear_all
  88.     jmp  still
  89.  
  90.   no_reset:
  91.     finit
  92.     mov  ebx,muuta1  ; ¥à¥¢®¤ ¢ ä®à¬ â FPU
  93.     mov  esi,18
  94.     call atof
  95.     fstp [trans1]
  96.     mov  ebx,muuta2
  97.     mov  esi,18
  98.     call atof
  99.     fst  [trans2]
  100.    
  101.     cmp  eax,33
  102.     jne  no_sign
  103.     cmp  [dsign],byte '-'
  104.     jne  no_m
  105.     mov  [dsign],byte '+'
  106.     call print_display
  107.     jmp  still
  108.  
  109.   no_m:
  110.     mov  [dsign],byte '-'
  111.     call print_display
  112.     jmp  still
  113.  
  114.   no_sign:
  115.     cmp  eax,3
  116.     jne  no_display_change
  117.     inc  [display_type]
  118.     cmp  [display_type],2
  119.     jbe  display_continue
  120.     mov  [display_type],0
  121.  
  122.   display_continue:
  123.     mov  eax,[display_type]
  124.     mov  eax,[multipl+eax*4]
  125.     mov  [entry_multiplier],eax
  126.     call print_display
  127.     jmp  still
  128.  
  129.   no_display_change:
  130.     cmp  eax,6
  131.     jb   no_a_f
  132.     cmp  eax,11
  133.     jg   no_a_f
  134.     add  eax,4
  135.     call number_entry
  136.     jmp  still
  137.    
  138.    no_a_f:
  139.     cmp  eax,12
  140.     jb   no_13
  141.     cmp  eax,14
  142.     jg   no_13
  143.     sub  eax,11
  144.     call number_entry
  145.     jmp  still
  146.    
  147.    no_13:
  148.     cmp  eax,19
  149.     jb   no_46
  150.     cmp  eax,21
  151.     jg   no_46
  152.     sub  eax,15
  153.     call number_entry
  154.     jmp  still
  155.    
  156.    no_46:
  157.     cmp  eax,26
  158.     jb   no_79
  159.     cmp  eax,28
  160.     jg   no_79
  161.     sub  eax,19
  162.     call number_entry
  163.     jmp  still
  164.    
  165.    no_79:
  166.     cmp  eax,34
  167.     jne  no_0
  168.     xor  eax,eax
  169.     call number_entry
  170.     jmp  still
  171.    
  172.    no_0:
  173.     cmp  eax,35
  174.     jne  no_id
  175.     inc  [id]
  176.     and  [id],1
  177.     mov  [new_dec],100000
  178.     jmp  still
  179.  
  180.   no_id:
  181.     cmp  eax,17
  182.     jne  no_sin
  183.     fld  [trans1]
  184.     fsin
  185.     jmp  show_result
  186.  
  187.   no_sin:
  188.     cmp  eax,18
  189.     jne  no_asin
  190.     fld  [trans1]
  191.     fld  st0
  192.     fmul st,st1
  193.     fld1
  194.     fsubrp  st1,st0
  195.     fsqrt
  196.     fpatan
  197.     jmp  show_result
  198.  
  199.   no_asin:
  200.     cmp  eax,16
  201.     jne  no_int
  202.     fld  [trans1]
  203.     frndint
  204.     jmp  show_result
  205.  
  206.   no_int:
  207.     cmp  eax,23
  208.     jne  no_1x
  209.     fld1
  210.     fdiv [trans1]
  211.     jmp  show_result
  212.    
  213.   no_1x:  
  214.     cmp  eax,24
  215.     jne  no_cos
  216.     fld  [trans1]
  217.     fcos
  218.     jmp  show_result
  219.  
  220.   no_cos:
  221.     cmp  eax,25
  222.     jne  no_acos
  223.     fld  [trans1]
  224.     fld st0
  225.     fmul st,st1
  226.     fld1
  227.     fsubrp st1,st0
  228.     fsqrt
  229.     fxch st1
  230.     fpatan
  231.     jmp  show_result
  232.  
  233.   no_acos:  
  234.     cmp  eax,30
  235.     jne  no_x2
  236.     fld  [trans1]
  237.     fmul st,st0
  238.     jmp  show_result
  239.    
  240.   no_x2:  
  241.     cmp  eax,31
  242.     jne  no_tan
  243.     fld  [trans1]
  244.     fptan
  245.     fstp st2
  246.     jmp  show_result
  247.  
  248.   no_tan:
  249.     cmp  eax,32
  250.     jne  no_atan
  251.     fld  [trans1]
  252.     fld1
  253.     fpatan
  254.     jmp  show_result
  255.    
  256.    no_atan:
  257.     cmp  eax,38
  258.     jne  no_pi
  259.     fldpi
  260.     jmp  show_result
  261.    
  262.    no_pi:
  263.     cmp  eax,37
  264.     jne  no_sqrt
  265.     fld  [trans1]
  266.     fsqrt
  267.     jmp  show_result
  268.  
  269.   no_sqrt:
  270.     cmp  eax,15
  271.     jne  no_add
  272.     call calculate
  273.     call new_entry
  274.     mov  [calc],'+'
  275.     jmp  still
  276.  
  277.   no_add:
  278.     cmp  eax,22
  279.     jne  no_sub
  280.     call calculate
  281.     call new_entry
  282.     mov  [calc],'-'
  283.     jmp  still
  284.  
  285.   no_sub:
  286.     cmp  eax,29
  287.     jne  no_div
  288.     call calculate
  289.     call new_entry
  290.     mov  [calc],'/'
  291.     jmp  still
  292.  
  293.   no_div:
  294.     cmp  eax,36
  295.     jne  no_mul
  296.     call calculate
  297.     mov  [calc],'*'
  298.     call new_entry
  299.     jmp  still
  300.  
  301.   no_mul:
  302.     cmp    eax,39
  303.     jne    no_calc
  304.     call   calculate
  305.     jmp    still
  306.  
  307.   no_calc:
  308.     jmp  still
  309.  
  310.   show_result:
  311.     call   ftoa
  312.     call   print_display
  313.     jmp    still
  314.  
  315. error:
  316.     jmp  still
  317.  
  318. calculate:
  319.     pusha
  320.     cmp  [calc],' '
  321.     je   no_calculation
  322.     cmp  [calc],'/'
  323.     jne  no_cdiv
  324.     fdiv [trans1]
  325.  
  326.   no_cdiv:
  327.     cmp  [calc],'*'
  328.     jne  no_cmul
  329.     fmul [trans1]
  330.  
  331.   no_cmul:
  332.     cmp  [calc],'+'
  333.     jne  no_cadd
  334.     fadd [trans1]
  335.  
  336.   no_cadd:
  337.     cmp  [calc],'-'
  338.     jne  no_cdec
  339.     fsub [trans1]
  340.  
  341.   no_cdec:
  342.     call   ftoa
  343.    
  344.   no_calculation:
  345.     call   print_display
  346.     popa
  347.     ret
  348.  
  349. number_entry:
  350.  
  351.     pusha
  352.  
  353.     cmp  eax,[entry_multiplier]
  354.     jge  no_entry
  355.     cmp  [id],1
  356.     je   decimal_entry
  357.     mov  ebx,[integer]
  358.     test ebx,0xF0000000
  359.     jnz  no_entry
  360.     mov  ebx,eax
  361.     mov  eax,[integer]
  362.     mov  ecx,[entry_multiplier]
  363.     mul  ecx
  364.     add  eax,ebx
  365.     mov  [integer],eax
  366.     call print_display
  367.     call to_muuta
  368.     popa
  369.     ret
  370.  
  371.   decimal_entry:
  372.  
  373.     imul eax,[new_dec]
  374.     add  [decimal],eax
  375.     mov  eax,[new_dec]
  376.     xor  edx,edx
  377.     mov  ebx,[entry_multiplier]
  378.     div  ebx
  379.     mov  [new_dec],eax
  380.     call print_display
  381.     call to_muuta
  382.     popa
  383.     ret
  384.  
  385.   no_entry:
  386.  
  387.     call print_display
  388.     call to_muuta
  389.     popa
  390.     ret
  391.  
  392.  to_muuta:
  393.  
  394.     pusha
  395.     mov  al,[dsign]
  396.     mov  esi,muuta0
  397.     mov  edi,muuta1
  398.     mov  ecx,18
  399.     cld
  400.     rep  movsb
  401.     mov  [muuta1],al
  402.     mov  edi,muuta1+10     ; 楫®¥
  403.     mov  eax,[integer]
  404.  
  405.   new_to_muuta1:
  406.  
  407.     mov  ebx,10
  408.     xor  edx,edx
  409.     div  ebx
  410.     mov  [edi],dl
  411.     add  [edi],byte 48
  412.     dec  edi
  413.     cmp  edi,muuta1+1
  414.     jge  new_to_muuta1
  415.     mov  edi,muuta1+17     ; ¤à®¡­®¥
  416.     mov  eax,[decimal]
  417.  
  418.   new_to_muuta2:
  419.    
  420.     mov  ebx,10
  421.     xor  edx,edx
  422.     div  ebx
  423.     mov  [edi],dl
  424.     add  [edi],byte 48
  425.     dec  edi
  426.     cmp  edi,muuta1+12
  427.     jge  new_to_muuta2
  428.     popa
  429.     ret
  430.  
  431. new_entry:
  432.  
  433.     pusha
  434.     mov  esi,muuta1
  435.     mov  edi,muuta2
  436.     mov  ecx,18
  437.     cld
  438.     rep  movsb
  439.     mov  esi,muuta0
  440.     mov  edi,muuta1
  441.     mov  ecx,18
  442.     cld
  443.     rep  movsb
  444.     mov  [integer],0
  445.     mov  [decimal],0
  446.     mov  [id],0
  447.     mov  [new_dec],100000
  448.     mov  [sign],byte '+'
  449.     popa
  450.     ret
  451.  
  452.  
  453. ftoa:                         ; fpu st0 -> [integer],[decimal]
  454.     pusha
  455.     fst    [tmp2]
  456.     fstcw  [controlWord]      ; set truncate integer mode
  457.     mov    ax,[controlWord]
  458.     mov    [tmp], ax
  459.     or     [tmp], word 0x0c00
  460.     fldcw  [tmp]
  461.     ftst                      ; test if st0 is negative
  462.     fstsw  ax
  463.     and    ax, 0x4500
  464.     mov    [sign], 0
  465.     cmp    ax, 0x0100
  466.     jne    no_neg
  467.     mov    [sign],1
  468.  
  469.   no_neg:
  470.     fld    [tmp2]
  471.     cmp    byte [sign], 0     ; change fraction to positive
  472.     je     no_neg2
  473.     fchs
  474.  
  475.   no_neg2:
  476.     fadd   [smallValueForRounding]
  477.     fist   [integer]
  478.     fisub  [integer]
  479.     mov    [res],0     ; convert 6 decimal numbers
  480.     mov    edi,6
  481.  
  482.    newd:
  483.     fimul  [kymppi]
  484.     fist   [decimal]
  485.     mov    ebx,[res]
  486.     imul   ebx,10
  487.     mov    [res],ebx
  488.     mov    eax,[decimal]
  489.     add    [res],eax
  490.     fisub  [decimal]
  491.     fst    [tmp2]
  492.     ftst
  493.     fstsw  ax
  494.     test   ax,1
  495.     jnz    real_done
  496.     fld    [tmp2]
  497.     dec    edi
  498.     jz     real_done
  499.     jmp    newd
  500.  
  501.   real_done:
  502.     fldcw  [controlWord]
  503.     mov    eax,[res]
  504.     mov    [decimal],eax
  505.     cmp    [integer],0x80000000
  506.     jne    no_error
  507.     call   clear_all
  508.     mov    [calc],'E'
  509.  
  510.   no_error:
  511.     mov    [dsign],byte '+'
  512.     cmp    [sign],byte 0      ; convert negative result
  513.     je     no_negative
  514. ;    mov    eax,[integer]
  515. ;    not    eax
  516. ;    inc    eax
  517. ;    mov    [integer],eax
  518.     mov    [dsign],byte '-'
  519.  
  520.   no_negative:
  521.     call   to_muuta
  522.     popa
  523.     ret
  524.  
  525.  
  526. atof:
  527.     push ax
  528.     push di
  529.     fldz
  530.     mov di, 0
  531.     cmp si, 0
  532.     je .error            ; Jump if string has 0 length.
  533.     mov byte [sign], 0
  534.     cmp byte [bx], '+'   ; Take care of leading '+' or '-'.
  535.     jne .noPlus
  536.     inc di
  537.     jmp .noMinus
  538.  
  539.   .noPlus:
  540.     cmp byte [bx], '-'
  541.     jne .noMinus
  542.     mov byte [sign], 1   ; Number is negative.
  543.     inc di
  544.  
  545.   .noMinus:
  546.     cmp si, di
  547.     je .error
  548.     call atof_convertWholePart
  549.     jc .error
  550.     call atof_convertFractionalPart
  551.     jc .error
  552.     cmp byte [sign], 0
  553.     je .dontNegate
  554.     fchs    ; Negate value
  555.  
  556.   .dontNegate:
  557.     mov bh, 0    ; Set bh to indicate the string is a valid number.
  558.     jmp .exit
  559.  
  560.   .error:
  561.     mov bh, 1    ; Set error code.
  562.    ; fstp st0    ; Pop top of fpu stack.
  563.  
  564.   .exit:
  565.     pop di
  566.     pop ax
  567.     ret
  568.  
  569. atof_convertWholePart:
  570.  
  571.     ; Convert the whole number part (the part preceding the decimal
  572.     ; point) by reading a digit at a time, multiplying the current
  573.     ; value by 10, and adding the digit.
  574.  
  575. .mainLoop:
  576.     mov al, [bx + di]
  577.     cmp al, '.'
  578.     je .exit
  579.     cmp al, '0'       ; Make sure character is a digit.
  580.     jb .error
  581.     cmp al, '9'
  582.     ja .error
  583.  
  584.     ; Convert single character to digit and save to memory for
  585.     ; transfer to the FPU.
  586.  
  587.     sub al, '0'
  588.     mov ah, 0
  589.     mov [tmp], ax
  590.  
  591.     ; Multiply current value by 10 and add in digit.
  592.  
  593.     fmul dword [ten]
  594.     fiadd word [tmp]
  595.     inc di
  596.     cmp si, di         ; Jump if end of string has been reached.
  597.     je .exit
  598.     jmp .mainLoop
  599.  
  600.   .error:
  601.     stc                ; Set error (carry) flag.
  602.     ret
  603.  
  604.   .exit:
  605.     clc                ; Clear error (carry) flag.
  606.     ret
  607.  
  608.  
  609. atof_convertFractionalPart:
  610.     fld1               ; Load 1 to TOS.  This will be the value of the decimal place.
  611.  
  612.   .mainLoop:
  613.     cmp si, di         ; Jump if end of string has been reached.
  614.     je .exit
  615.     inc di             ; Move past the decimal point.
  616.     cmp si, di         ; Jump if end of string has been reached.
  617.     je .exit
  618.     mov al, [bx + di]
  619.     cmp al, '0'        ; Make sure character is a digit.
  620.     jb .error
  621.     cmp al, '9'
  622.     ja .error
  623.     fdiv dword [ten]   ; Next decimal place
  624.     sub al, '0'
  625.     mov ah, 0
  626.     mov [tmp], ax
  627.  
  628.     ; Load digit, multiply by value for appropriate decimal place,
  629.     ; and add to current total.
  630.  
  631.     fild  word [tmp]
  632.     fmul  st0, st1
  633.     faddp st2, st0
  634.     jmp .mainLoop
  635.  
  636.   .error:
  637.     stc           ; Set error (carry) flag.
  638.     fstp st0    ; Pop top of fpu stack.
  639.     ret
  640.  
  641.   .exit:
  642.     clc              ; Clear error (carry) flag.
  643.     fstp st0    ; Pop top of fpu stack.
  644.     ret
  645.  
  646. ;   *********************************************
  647. ;   ******* WINDOW DEFINITIONS AND DRAW *********
  648. ;   *********************************************
  649.  
  650. draw_window:
  651.    
  652.     mov  eax,12
  653.     mov  ebx,1
  654.     mcall
  655.                                    
  656.     xor  eax,eax                    
  657.     mov  ebx,200 shl 16+255        
  658.     mov  ecx,200 shl 16+180
  659.     mov  edx,[sc.work]
  660.     or   edx,0x34000000
  661.     mov  edi,title
  662.     mcall
  663.  
  664.     mov  eax,8
  665.     mov  ebx,19 shl 16+28
  666.     mov  ecx,49 shl 16+18
  667.     mov  edx,6
  668.     mov  esi,[sc.work_button]
  669.     mov  edi,7
  670.   newbutton:
  671.     dec  edi
  672.     jnz  no_new_row
  673.     mov  edi,7
  674.     mov  ebx,19 shl 16+28
  675.     add  ecx,20 shl 16
  676.   no_new_row:
  677.     mcall
  678.     add  ebx,30 shl 16
  679.     inc  edx
  680.     cmp  edx,39
  681.     jbe  newbutton
  682.  
  683.     mcall  ,199 shl 16+28,49 shl 16+18,2               ; 'C'
  684.     mcall  ,220 shl 16+8,7 shl 16+8,3                     ; 'dec-bin-hex'
  685.  
  686.     mov  eax,4
  687.     mov  ebx,27 shl 16+54
  688.     mov  ecx,[sc.work_button_text]
  689.     mov  edx,text
  690.     mov  esi,33
  691.   newline:
  692.     mcall
  693.     add  ebx,20
  694.     add  edx,33
  695.     cmp  [edx],byte 'x'
  696.     jne  newline
  697.    
  698.     call print_display
  699.    
  700.     mov  eax,12
  701.     mov  ebx,2
  702.     mcall
  703.  
  704.     ret
  705.  
  706. print_display:
  707.     pusha
  708.     mcall 13,18 shl 16+210,19 shl 16+13,0xffffff
  709.  
  710.     mov  eax,4
  711.     mov  ebx,135 shl 16+7
  712.     mov  ecx,[sc.work_text]
  713.     or   ecx,0x40000000
  714.     mov  edx,calc
  715.     mov  esi,1
  716.     mov  edi,[sc.work]
  717.     mcall
  718.  
  719.     mov  ebx,198 shl 16+8
  720.     mov  edx,[display_type]
  721.     shl  edx,2
  722.     add  edx,display_type_text
  723.     mov  esi,3
  724.     mov  edi,[sc.work]
  725.     mcall
  726.    
  727.     cmp  [dsign],byte '+'
  728.     je   positive
  729.     mov  ebx,23 shl 16+22
  730.     mov  ecx,0x0
  731.     mov  edx,dsign
  732.     mov  esi,1
  733.     mcall  
  734.  
  735. positive:  
  736.     cmp  [display_type],0
  737.     jne  no_display_decimal
  738.     cmp  [decimal],0
  739.     je   whole
  740.  
  741.     mov  ebx,180 shl 16+22
  742.     mov  ecx,0x0
  743.     mov  edx,dot
  744.     mov  esi,1
  745.     mcall
  746.    
  747.     mov  eax,47
  748.     mov  ebx,10 shl 16
  749.     mov  ecx,[integer]
  750.     mov  edx,120 shl 16+22
  751.     mov  esi,0x0
  752.     mcall    
  753.    
  754.     mov  ebx,6 shl 16
  755.     mov  ecx,[decimal]
  756.     mov  edx,187 shl 16+22    
  757.     mov  esi,0x0
  758.     mcall
  759.  
  760.     popa
  761.     ret
  762.    
  763. whole:
  764.     mov  ebx,220 shl 16+22
  765.     mov  ecx,0x0
  766.     mov  edx,dot
  767.     mov  esi,1
  768.     mcall
  769.  
  770.     cmp  [integer],0
  771.     je  null
  772.  
  773.     mov  eax,47
  774.     mov  ebx,10 shl 16
  775.     mov  ecx,[integer]
  776.     mov  edx,160 shl 16+22
  777.     mov  esi,0x0
  778.     mcall
  779.  
  780.     popa
  781.     ret
  782.              
  783.   no_display_decimal:
  784.     cmp  [display_type],1
  785.     jne  no_display_hexadecimal
  786.     cmp  [integer],0
  787.     je  null
  788.    
  789.     mov  eax,47
  790.     mov  ebx,256+8 shl 16
  791.     mov  ecx,[integer]
  792.     mov  edx,173 shl 16+22
  793.     mov  esi,0x0
  794.     mcall
  795.  
  796.     popa
  797.     ret
  798.  
  799.   no_display_hexadecimal:
  800.     cmp  [integer],0
  801.     je  null
  802.  
  803.     mov  eax,47
  804.     mov  ebx,2*256+32 shl 16
  805.     mov  ecx,[integer]
  806.     mov  edx,32 shl 16+22
  807.     mov  esi,0x0
  808.     mcall
  809.  
  810.     popa
  811.     ret
  812.  
  813.   null:
  814.     mov  eax,47
  815.     mov  ebx,1 shl 16
  816.     mov  ecx,0
  817.     mov  edx,214 shl 16+22
  818.     mov  esi,0x0
  819.     mcall
  820.  
  821.     popa
  822.     ret
  823.  
  824. clear_all:
  825.     pusha
  826.     mov  [calc],' '
  827.     mov  [integer],0
  828.     mov  [decimal],0
  829.     mov  [id],0
  830.     mov  [dsign],byte '+'
  831.     mov  esi,muuta0
  832.     mov  edi,muuta1
  833.     mov  ecx,18
  834.     cld
  835.     rep  movsb
  836.     mov  esi,muuta0
  837.     mov  edi,muuta2
  838.     mov  ecx,18
  839.     cld
  840.     rep  movsb
  841.     call print_display
  842.     popa
  843.     ret
  844.  
  845.  
  846. ;data
  847.  
  848. title db appname,version,0
  849.  
  850. display_type       dd  0    ; 0 = decimal, 1 = hexadecimal, 2= binary
  851. entry_multiplier   dd  10
  852. display_type_text  db  'dec hex bin'
  853.  
  854. dot           db  '.'
  855. calc          db  ' '
  856. integer       dd  0
  857. decimal       dd  0
  858. kymppi        dd  10
  859. ten           dd  10.0,0
  860. tmp           dw  1,0
  861. sign          db  1,0
  862. tmp2          dq  0x0,0
  863. exp           dd  0x0,0
  864. new_dec       dd  100000,0
  865. id            db  0x0,0
  866. res           dd  0
  867. trans1        dq  0
  868. trans2        dq  0
  869. controlWord   dw  1
  870. smallValueForRounding dq 0.0000005 ; 1/2 from last significant digit
  871. multipl:      dd  10,16,2
  872.  
  873. dsign:
  874. muuta1        db  '+0000000000.000000'
  875. muuta2        db  '+0000000000.000000'
  876. muuta0        db  '+0000000000.000000'
  877.  
  878. text:
  879.     db ' A    B    C    D    E    F    C '
  880.     db ' 1    2    3    +   Int  Sin Asin'
  881.     db ' 4    5    6    -   1/x  Cos Acos'
  882.     db ' 7    8    9    /   x^2  Tan Atan'
  883.     db '+/-   0    .    *   Sqr  Pi    = '
  884.     db 'x'
  885.  
  886. asci:  db 49,50,51,52,53,54,55,56,57,48,43,61,45,42,47,44,46,27
  887. butid: db 12,13,14,19,20,21,26,27,28,34,15,39,22,36,29,35,35,1
  888.  
  889. I_END:
  890.  
  891. sc     system_colors