Subversion Repositories Kolibri OS

Rev

Rev 822 | Rev 974 | 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.     mov  eax,48
  657.     mov  ebx,3
  658.     mov  ecx,sc
  659.     mov  edx,sizeof.system_colors
  660.     mcall
  661.  
  662.     xor  eax,eax                    
  663.     mov  ebx,200 shl 16+255        
  664.     mov  ecx,200 shl 16+180
  665.     mov  edx,[sc.work]
  666.     or   edx,0x34000000
  667.     mov  edi,title
  668.     mcall
  669.  
  670.     mov  eax,8
  671.     mov  ebx,19 shl 16+28
  672.     mov  ecx,49 shl 16+18
  673.     mov  edx,6
  674.     mov  esi,[sc.work_button]
  675.     mov  edi,7
  676.   newbutton:
  677.     dec  edi
  678.     jnz  no_new_row
  679.     mov  edi,7
  680.     mov  ebx,19 shl 16+28
  681.     add  ecx,20 shl 16
  682.   no_new_row:
  683.     mcall
  684.     add  ebx,30 shl 16
  685.     inc  edx
  686.     cmp  edx,39
  687.     jbe  newbutton
  688.  
  689.     mcall  ,199 shl 16+28,49 shl 16+18,2               ; 'C'
  690.     mcall  ,220 shl 16+8,7 shl 16+8,3                     ; 'dec-bin-hex'
  691.  
  692.     mov  eax,4
  693.     mov  ebx,27 shl 16+54
  694.     mov  ecx,[sc.work_button_text]
  695.     mov  edx,text
  696.     mov  esi,33
  697.   newline:
  698.     mcall
  699.     add  ebx,20
  700.     add  edx,33
  701.     cmp  [edx],byte 'x'
  702.     jne  newline
  703.    
  704.     call print_display
  705.    
  706.     mov  eax,12
  707.     mov  ebx,2
  708.     mcall
  709.  
  710.     ret
  711.  
  712. print_display:
  713.     pusha
  714.     mcall 13,18 shl 16+210,19 shl 16+13,0xffffff
  715.  
  716.     mov  eax,4
  717.     mov  ebx,135 shl 16+7
  718.     mov  ecx,[sc.work_text]
  719.     or   ecx,0x40000000
  720.     mov  edx,calc
  721.     mov  esi,1
  722.     mov  edi,[sc.work]
  723.     mcall
  724.  
  725.     mov  ebx,198 shl 16+8
  726.     mov  edx,[display_type]
  727.     shl  edx,2
  728.     add  edx,display_type_text
  729.     mov  esi,3
  730.     mov  edi,[sc.work]
  731.     mcall
  732.    
  733.     cmp  [dsign],byte '+'
  734.     je   positive
  735.     mov  ebx,23 shl 16+22
  736.     mov  ecx,0x0
  737.     mov  edx,dsign
  738.     mov  esi,1
  739.     mcall  
  740.  
  741. positive:  
  742.     cmp  [display_type],0
  743.     jne  no_display_decimal
  744.     cmp  [decimal],0
  745.     je   whole
  746.  
  747.     mov  ebx,180 shl 16+22
  748.     mov  ecx,0x0
  749.     mov  edx,dot
  750.     mov  esi,1
  751.     mcall
  752.    
  753.     mov  eax,47
  754.     mov  ebx,10 shl 16
  755.     mov  ecx,[integer]
  756.     mov  edx,120 shl 16+22
  757.     mov  esi,0x0
  758.     mcall    
  759.    
  760.     mov  ebx,6 shl 16
  761.     mov  ecx,[decimal]
  762.     mov  edx,187 shl 16+22    
  763.     mov  esi,0x0
  764.     mcall
  765.  
  766.     popa
  767.     ret
  768.    
  769. whole:
  770.     mov  ebx,220 shl 16+22
  771.     mov  ecx,0x0
  772.     mov  edx,dot
  773.     mov  esi,1
  774.     mcall
  775.  
  776.     cmp  [integer],0
  777.     je  null
  778.  
  779.     mov  eax,47
  780.     mov  ebx,10 shl 16
  781.     mov  ecx,[integer]
  782.     mov  edx,160 shl 16+22
  783.     mov  esi,0x0
  784.     mcall
  785.  
  786.     popa
  787.     ret
  788.              
  789.   no_display_decimal:
  790.     cmp  [display_type],1
  791.     jne  no_display_hexadecimal
  792.     cmp  [integer],0
  793.     je  null
  794.    
  795.     mov  eax,47
  796.     mov  ebx,256+8 shl 16
  797.     mov  ecx,[integer]
  798.     mov  edx,173 shl 16+22
  799.     mov  esi,0x0
  800.     mcall
  801.  
  802.     popa
  803.     ret
  804.  
  805.   no_display_hexadecimal:
  806.     cmp  [integer],0
  807.     je  null
  808.  
  809.     mov  eax,47
  810.     mov  ebx,2*256+32 shl 16
  811.     mov  ecx,[integer]
  812.     mov  edx,32 shl 16+22
  813.     mov  esi,0x0
  814.     mcall
  815.  
  816.     popa
  817.     ret
  818.  
  819.   null:
  820.     mov  eax,47
  821.     mov  ebx,1 shl 16
  822.     mov  ecx,0
  823.     mov  edx,214 shl 16+22
  824.     mov  esi,0x0
  825.     mcall
  826.  
  827.     popa
  828.     ret
  829.  
  830. clear_all:
  831.     pusha
  832.     mov  [calc],' '
  833.     mov  [integer],0
  834.     mov  [decimal],0
  835.     mov  [id],0
  836.     mov  [dsign],byte '+'
  837.     mov  esi,muuta0
  838.     mov  edi,muuta1
  839.     mov  ecx,18
  840.     cld
  841.     rep  movsb
  842.     mov  esi,muuta0
  843.     mov  edi,muuta2
  844.     mov  ecx,18
  845.     cld
  846.     rep  movsb
  847.     call print_display
  848.     popa
  849.     ret
  850.  
  851.  
  852. ;data
  853.  
  854. title db appname,version,0
  855.  
  856. display_type       dd  0    ; 0 = decimal, 1 = hexadecimal, 2= binary
  857. entry_multiplier   dd  10
  858. display_type_text  db  'dec hex bin'
  859.  
  860. dot           db  '.'
  861. calc          db  ' '
  862. integer       dd  0
  863. decimal       dd  0
  864. kymppi        dd  10
  865. ten           dd  10.0,0
  866. tmp           dw  1,0
  867. sign          db  1,0
  868. tmp2          dq  0x0,0
  869. exp           dd  0x0,0
  870. new_dec       dd  100000,0
  871. id            db  0x0,0
  872. res           dd  0
  873. trans1        dq  0
  874. trans2        dq  0
  875. controlWord   dw  1
  876. smallValueForRounding dq 0.0000005 ; 1/2 from last significant digit
  877. multipl:      dd  10,16,2
  878.  
  879. dsign:
  880. muuta1        db  '+0000000000.000000'
  881. muuta2        db  '+0000000000.000000'
  882. muuta0        db  '+0000000000.000000'
  883.  
  884. text:
  885.     db ' A    B    C    D    E    F    C '
  886.     db ' 1    2    3    +   Int  Sin Asin'
  887.     db ' 4    5    6    -   1/x  Cos Acos'
  888.     db ' 7    8    9    /   x^2  Tan Atan'
  889.     db '+/-   0    .    *   Sqr  Pi    = '
  890.     db 'x'
  891.  
  892. asci:  db 49,50,51,52,53,54,55,56,57,48,43,61,45,42,47,44,46,27
  893. butid: db 12,13,14,19,20,21,26,27,28,34,15,39,22,36,29,35,35,1
  894.  
  895. I_END:
  896.  
  897. sc     system_colors
  898.