From ff62d833c90da343d899df90d029f6d9575dedcb Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Sat, 28 Mar 2009 18:26:20 +0000 Subject: [PATCH] fixed: calculating the size of the main window now it looks good on MS Vista and when a user changes size of some widgets such as a border, font size, etc. added: spanish language to the setup (installer) added: the setup will remove mingwm10.dll if it exists in the program directory added: on display tab: we can select 'deg' 'rad' or 'grad' for calculating in such functions: sin,cos,tan,cot,asin,acos,atan,acot added: macro TTCALC_CONVERT if not defined there will not be a convert tab (the convert tab is not finished) added: a new icon with following dimensions: '48x48' '32x32' '16x16' removed: parameter for gcc: -mthreads with -mthreads it is possible (on windows) to release some kind of 'destructors' belonging to a thread when the specific thread exists (it prevents some kind of memory leaks) in the TTCalc when the second thread exists then there is the end of the program and we can not use '-mthreads' removed: file TODO (I didn't use the file) git-svn-id: svn://ttmath.org/publicrep/ttcalc/trunk@114 e52654a7-88a9-db11-a3e9-0013d4bc506e --- CHANGELOG | 165 +++++++----- COPYRIGHT | 2 +- README | 38 +-- TODO | 6 - help/arithmetic_functions.html | 416 ++++++++++++++--------------- help/bitwise_functions.html | 98 +++---- help/help.hhp | 48 ++-- help/index.hhk | 18 +- help/index.html | 92 +++---- help/logical_functions.html | 204 +++++++------- help/operators_priority.html | 70 ++--- help/styles.css | 96 +++---- help/tips.html | 104 ++++---- help/toc.hhc | 92 +++---- help/userfunctions.html | 70 ++--- help/values_and_std_operators.html | 130 ++++----- res/icon02.ico | Bin 0 -> 7406 bytes setup/COPYRIGHT | 2 +- setup/innosetup.iss | 93 ++++--- setup/ttcalc.ini | 21 -- src/Makefile | 4 +- src/Makefile.dep | 5 +- src/Makefileportable | 2 +- src/convert.cpp | 2 +- src/languages.cpp | 9 +- src/languages.h | 1 + src/mainwindow.cpp | 72 +++-- src/parsermanager.cpp | 17 +- src/parsermanager.h | 2 +- src/programresources.cpp | 31 ++- src/programresources.h | 9 + src/resource.h | 5 +- src/resource.rc | 44 ++- src/tabs.cpp | 48 +++- src/winmain.cpp | 3 +- 35 files changed, 1077 insertions(+), 942 deletions(-) delete mode 100644 TODO create mode 100644 res/icon02.ico delete mode 100644 setup/ttcalc.ini diff --git a/CHANGELOG b/CHANGELOG index ea7ac88..758fb8b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,69 +1,114 @@ +Version 0.8.3 prerelease + * fixed: calculating the size of the main window + now it looks good on MS Vista and when a user changes size of some + widgets such as a border, font size, etc. + * changed: variables and functions are case-sensitive now, e.g. + 'x' is not the same as 'X' + * changed: precision: + small - the same as previous + medium - 288 bits for the mantissa, 64 bits for the exponent + big - 864 bits for the mantissa, 128 bits for the exponent + previous were: + medium - 192 bits for the mantissa, 64 bits for the exponent + big - 288 bits for the mantissa, 96 bits for the exponent + * added: when a user presses CTRL+C then the result will be + copied into the clipboard (if the current control which + has a focus is not an edit control, or if it is an edit + but has no selection) + * added: when a user presses CTRL+V then the text from the clipboard + will be copied into the edit control + (the focus can be anywhere but it cannot be on another edit control) + * added: 'decimal point' option on the display tab + * added: variables and functions can have underline characters + in their names + * added: from TTMath 0.8.3: a short form of multiplication + (without the '*' character) e.g. '5y' + (it's used only if the second parameter is a variable + or function) + * added: 'remove trailing zeroes' option on 'display' tab + * added: new language: spanish + translation made by Alejandro S. Valdezate + alesanval at gmail dot com + * added: spanish language to the setup (installer) + * added: the setup will remove mingwm10.dll if it exists in the program + directory + * added: on display tab: we can select 'deg' 'rad' or 'grad' for calculating + in such functions: sin,cos,tan,cot,asin,acos,atan,acot + * removed: 'cut off last non valid digits' on 'rounding' option + on 'display' tab + + Version 0.8.2 portable (2007.07.01): - * added: the portable version of the program TTCalc - it uses *.ini config file from the same folder where - is the executable file, and it's much smaller in size - (in the portable version there's only one kind - of precision and the program is packed with UPX - - the Ultimate Packer for eXecutables) - there are no other differences between version 0.8.1 and this one - + * added: the portable version of the program TTCalc + it uses *.ini config file from the same folder where + is the executable file, and it's much smaller in size + (in the portable version there's only one kind + of precision and the program is packed with UPX - + the Ultimate Packer for eXecutables) + there are no other differences between version 0.8.1 and this one + + Version 0.8.1 (2007.04.17): - * changed: on win9x the configuration file is in a folder like: - "c:\windows\data application\ttcalc\" now - * changed: the program uses the TTMath 0.8.1 now - * added: from TTMath 0.8.1: - root(x, index), bitand(x,y), bitor(x,y), bitxor(x,y) - /band(x,y), bor(x,y), bxor(x,y)/ - asinh(x), acosh(x), atanh(x), acoth(x) /atgh(x), actgh(x)/ - * changed: from TTMath 0.8.1: calculations are much faster now - especially the factorial() function - * changed: from TTMath 0.8.1: the way of parsing operators - + * changed: on win9x the configuration file is in a folder like: + "c:\windows\data application\ttcalc\" now + * changed: the program uses the TTMath 0.8.1 now + * added: from TTMath 0.8.1: + root(x, index), bitand(x,y), bitor(x,y), bitxor(x,y) + /band(x,y), bor(x,y), bxor(x,y)/ + asinh(x), acosh(x), atanh(x), acoth(x) /atgh(x), actgh(x)/ + * changed: from TTMath 0.8.1: calculations are much faster now + especially the factorial() function + * changed: from TTMath 0.8.1: the way of parsing operators + + Version 0.8.0 (2007.04.02): - * added: the del key deletes a variable or a function now - (if the focus is on the list) - * added: a user can change the names of variables or functions now - * changed: the program uses TTMath 0.8.0 now - * added: functions: from TTMath 0.8.0: - DegToDeg(deg, min, sec), DegToRad(deg), DegToRad(deg, min, sec), - RadToDeg(rad), Ceil(x), Floor(x), Sqrt(x), Sinh(x), Cosh(x), - Tanh(x) /Tgh(x)/, Coth(x) /Ctgh(x)/ - * added: a help - * changed: from TTMath 0.8.0: - renamed: CTan() into Cot() or Ctg() - renamed: ACTan() into ACot() or ACtg() - Factorial() has a history log now (it can remember last - 10 calculated values) - * fixed: the vertical size of the main window when a user uses a different - size of the window caption (especially under the Windows XP Luna) - * fixed: on Windows 9x: the program hung when a user clicks on a control - on the first tab - * fixed: when a user started navigating from the keyboard the program showed - a wrong variable or a funtion in the edit dialog + * added: the del key deletes a variable or a function now + (if the focus is on the list) + * added: a user can change the names of variables or functions now + * changed: the program uses TTMath 0.8.0 now + * added: functions: from TTMath 0.8.0: + DegToDeg(deg, min, sec), DegToRad(deg), DegToRad(deg, min, sec), + RadToDeg(rad), Ceil(x), Floor(x), Sqrt(x), Sinh(x), Cosh(x), + Tanh(x) /Tgh(x)/, Coth(x) /Ctgh(x)/ + * added: help + * changed: from TTMath 0.8.0: + renamed: CTan() into Cot() or Ctg() + renamed: ACTan() into ACot() or ACtg() + Factorial() has a history log now (it can remember last + 10 calculated values) + * fixed: the vertical size of the main window when a user uses a different + size of the window caption (especially under the Windows XP Luna) + * fixed: on Windows 9x: the program hung when a user clicks on a control + on the first tab + * fixed: when a user started navigating from the keyboard the program showed + a wrong variable or a funtion in the edit dialog + Version 0.7.3 (2007.03.08): - * added: the program shows some kind of errors itself - * added: checking whether an user has inserted a correct value of a variable - or a function - * fixed: navigation from the keyboard - * changed: the esc key selects the entire input text now (in the input edit) - * added: a test when the program is being starded which checks if the - coordinates of the main window actually pointing at the valid area (for - example when someone took his configuration file into a new computer and - the new computer has a smaller screen) + * added: the program shows some kind of errors itself + * added: checking whether an user has inserted a correct value of a variable + or a function + * fixed: navigation from the keyboard + * changed: the esc key selects the entire input text now (in the input edit) + * added: a test when the program is being starded which checks if the + coordinates of the main window actually pointing at the valid area (for + example when someone took his configuration file into a new computer and + the new computer has a smaller screen) + Version 0.7.2 (2007.02.28): - * added buttons Sgn and Mod - * the button 'err' is active when there's actually an error now - * added buttons: ASin, ACos, ATan, ACTan - * fixed: the program didn't save the current language into the configuration file - * fixed: the second thread didn't read the main window correctly and it caused - small problems when an user was typing into the first edit control + * added: buttons Sgn and Mod + * changed: the button 'err' is active when there's actually an error now + * added: buttons: ASin, ACos, ATan, ACTan + * fixed: the program didn't save the current language into the configuration file + * fixed: the second thread didn't read the main window correctly and it caused + small problems when an user was typing into the first edit control + Version 0.7.1 (2007.02.08): - * added a button 'err' (error) on the first tab - * the input edit can have 2048 characters now - * added remembering the vertical size into the config file - * fixed a problem with the 'tab' key - * added a message 'Calculating...' when an user clicks on the 'err' button - during calculating something + * added: button 'err' (error) on the first tab + * changed: the input edit can have 2048 characters now + * added: remembering the vertical size into the config file + * fixed: a problem with the 'tab' key + * added: a message 'Calculating...' when an user clicks on the 'err' button + during calculating something diff --git a/COPYRIGHT b/COPYRIGHT index a99db80..0e1660a 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -1,4 +1,4 @@ -Copyright (c) 2006-2007, Tomasz Sowa +Copyright (c) 2006-2009, Tomasz Sowa All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/README b/README index 21f9eaa..2055703 100644 --- a/README +++ b/README @@ -1,19 +1,19 @@ -TTCalc - -TTCalc is a mathematical calculator. It has a nice user interface, -formulas for calculating can be inserted by using a keyboard or a mouse. -The result is automatically shown in a second window without using any -additional keys such as 'equal'. The program possess trigonometric -functions, inverse trigonometric functions, hyperbolic functions, -logical operators, logarithms, functions for converting between degrees -and radians and so on. Additionally the program allows the user to -define his own variables and functions. Calculations are performed by -using floating point numbers with three kind of precision, the biggest -has 288 bits for its mantissa and 96 bits for its exponent that is -about 2.551...e+11925026709067095507636213441 with 85 valid decimal -digits. The program independently allows to insert and display values -with the base (radix) from two to sixteen. - -Author: Tomasz Sowa -Project page: http://sourceforge.net/projects/ttcalc -Licence: BSD (open source) +TTCalc + +TTCalc is an open source mathematical calculator. It features arithmetical +functions, trigonometric functions, inverse trigonometric functions, +hyperbolic functions, inverse hyperbolic functions, logical operators, +logarithms, functions for converting between degrees and radians and +so on. Additionally the program allows a user to define his own +variables and functions. + +The program possess an easy to use interface. Calculations are performed +by using floating point numbers with three kind of precision, the biggest +has 864 bits for its mantissa and 128 bits for its exponent that is about +6.7....e+51217599719369681875006054625051616609 with 258 valid decimal digits. +TTCalc independently allows to insert and display values with the base +(radix) from two to sixteen. + +Author: Tomasz Sowa +Project page: http://ttcalc.sourceforge.net/ +Licence: BSD (open source) diff --git a/TODO b/TODO deleted file mode 100644 index cd23d1b..0000000 --- a/TODO +++ /dev/null @@ -1,6 +0,0 @@ -TODO TTCalc -=========== - - - - diff --git a/help/arithmetic_functions.html b/help/arithmetic_functions.html index 0f8e0c7..78bd8dc 100644 --- a/help/arithmetic_functions.html +++ b/help/arithmetic_functions.html @@ -1,208 +1,208 @@ - - - - - - TTCalc - arithmetic functions - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Arithmetic functions

- -

Note: If a function takes more than one argument, the arguments are separated with semicolon ';'.

- -
-
ln(x)
-
This function calculates the natural logarithm of x,
e.g. ln(123)=4.812...
- -
log(x; base)
-
This function calculates the logarithm of x with a base equal 'base'
log(123; 4)=3.471...
- -
exp(x)
-
This function calculates the exponent of x
exp(20)=e^20=485165195.409...
- -
sin(x)
-
This function returns the sine of x.
For example sin(0.8)=0.717...
The argument x is in radians, if you want to calculate -with degrees use the degtorad(x) function first e.g. sin(degtorad(30))=0.5 calculates the sine of 30 degrees.
- -
cos(x)
-
Cosine of x
cos(1.3)=0.267...
The argument x is in radians.
- -
tan(x) or tg(x)
-
Tangent of x
tan(3.6)=0.493...
The argument x is in radians.
- -
cot(x) or ctg(x)
-
Cotangent of x
cot(2.3)=-0.893...
The argument x is in radians.
- -
asin(x)
-
Inverse sine (arc sine) of x
e.g. asin(0.7)=0.775...
The result is in radians. If you want the result to be in degrees use -radtodeg function e.g. radtodeg(asin(0,5))=30
- -
acos(x)
-
Inverse cosine (arc cosine) of x
acos(0.9)=0.451...
The result is in radians.
- -
atan(x) or atg(x)
-
Inverse tangent (arc tangent) of x
atan(3.3)=1.276...
The result is in radians.
- -
acot(x) or actg(x)
-
Inverse cotangent (arc cotangent) of x
acot(10)=0.099...
The result is in radians.
- -
sinh(x)
-
This function returns hyperbolic sine of x
sinh(12)=81377.395...
- -
cosh(x)
-
Hyperbolic cosine of x
cosh(8.5)=2457.384...
- -
tanh(x) or tgh(x)
-
Hyperbolic tangent of x
tanh(0.67)=0.584...
- -
coth(x) or ctgh(x)
-
Hyperbolic cotangent of x
coth(1.67)=1.073...
- -
asinh(x)
-
This function returns inverse hyperbolic sine of x
asinh(3.6)=1.992...
- -
acosh(x)
-
This function returns inverse hyperbolic cosine of x
acosh(2.23)=1.440...
- -
atanh(x) or atgh(x)
-
This function returns inverse hyperbolic tangent of x
atanh(0.67)=0.810...
- -
acoth(x) or actgh(x)
-
This function returns inverse hyperbolic cotangent of x
acoth(1.23)=1.135...
- -
DegToDeg(deg; min; sec)
-
This function converts degrees from the long format with degres, minutes and seconds into only degrees.
-For example degtodeg(12; 30; 0)=12.5
- -
DegToRad(deg)
-
This function converts degrees into radians
degtorad(12.5)=0.218166...
- -
DegToRad(deg; min; sec)
-
This function converts degrees in the long format (degrees, minutes, seconds) to radians.
For example -degtorad(12; 30; 0)=0.218166...
- -
RadToDeg(rad)
-
This function converts radians into degrees
radtodeg(pi)=180
- -
sqrt(x)
-
Sqrt returns the square root of x
sqrt(9)=3
- -
root(x ; n)
-
The nth root of a 'x', 'n' must be integer and not negative, if 'n' is zero the result is one, -if 'x' is zero the result is zero and we assume that the root(0;0) is not defined, e.g.
-root(8;3)=2
-root(-8;3)=-2 -
- -
factorial(x)
-
The factorial function
factorial(6)=1*2*3*4*5*6=720
- -
abs(x)
-
The absolute value of x
abs(-10)=10
- -
sgn(x)
-
This function returns the sign of x that means when the x is positive the result is 1, when the x is negative -the result is -1 and when the x is zero the result is zero too
-sgn(-10)=-1
-sgn(0)=0
-sgn(5)=1
- -
mod(x,y)
-
Mod returns the remainder from the division x by y
mod(10; 2.2)=1.2 because 10=2.2*4 + 1.2
- -
int(x)
-
This method returns only the integer part of x.
int(2.7)=2
- -
round(x)
-
This method rounds the value of x to the nearest integer
-round(2.8)=3
-round(2.2)=2
-round(2)=2
-round(-4.8)=-5
-round(-4.1)=-4
- -
ceil(x)
-
This function returns a value representing the smallest integer that is greater than or equal to x
-ceil(2.8)=3
-ceil(2.2)=3
-ceil(2)=2
-ceil(-4.8)=-4
-ceil(-4.1)=-4
- -
floor(x)
-
This function returns a value representing the largest integer that is less than or equal to x
-floor(2.8)=2
-floor(2.2)=2
-floor(2)=2
-floor(-4.8)=-5
-floor(-4.1)=-5
- -
max(x1; x2; ...)
-
This functions takes any number of arguments. It returns the max value of them. If there aren't arguments -the function returns the max value which can be held in this precision.
- -
min(x1; x2; ...)
-
This functions takes any number of arguments. It returns the min value of them. If there aren't arguments -the function returns the min value which can be held in this precision.
- -
sum(x1; x2; ...)
-
This functions takes one or more arguments. It returns the sum of them.
- -
avg(x1; x2; ...)
-
This functions takes one or more arguments. It returns the arithmetic mean. (The sum divided by -the number of arguments)
- -
- - - + + + + + + TTCalc - arithmetic functions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Arithmetic functions

+ +

Note: If a function takes more than one argument, the arguments are separated with semicolon ';'.

+ +
+
ln(x)
+
This function calculates the natural logarithm of x,
e.g. ln(123)=4.812...
+ +
log(x; base)
+
This function calculates the logarithm of x with a base equal 'base'
log(123; 4)=3.471...
+ +
exp(x)
+
This function calculates the exponent of x
exp(20)=e^20=485165195.409...
+ +
sin(x)
+
This function returns the sine of x.
For example sin(0.8)=0.717...
The argument x is in radians, if you want to calculate +with degrees use the degtorad(x) function first e.g. sin(degtorad(30))=0.5 calculates the sine of 30 degrees.
+ +
cos(x)
+
Cosine of x
cos(1.3)=0.267...
The argument x is in radians.
+ +
tan(x) or tg(x)
+
Tangent of x
tan(3.6)=0.493...
The argument x is in radians.
+ +
cot(x) or ctg(x)
+
Cotangent of x
cot(2.3)=-0.893...
The argument x is in radians.
+ +
asin(x)
+
Inverse sine (arc sine) of x
e.g. asin(0.7)=0.775...
The result is in radians. If you want the result to be in degrees use +radtodeg function e.g. radtodeg(asin(0,5))=30
+ +
acos(x)
+
Inverse cosine (arc cosine) of x
acos(0.9)=0.451...
The result is in radians.
+ +
atan(x) or atg(x)
+
Inverse tangent (arc tangent) of x
atan(3.3)=1.276...
The result is in radians.
+ +
acot(x) or actg(x)
+
Inverse cotangent (arc cotangent) of x
acot(10)=0.099...
The result is in radians.
+ +
sinh(x)
+
This function returns hyperbolic sine of x
sinh(12)=81377.395...
+ +
cosh(x)
+
Hyperbolic cosine of x
cosh(8.5)=2457.384...
+ +
tanh(x) or tgh(x)
+
Hyperbolic tangent of x
tanh(0.67)=0.584...
+ +
coth(x) or ctgh(x)
+
Hyperbolic cotangent of x
coth(1.67)=1.073...
+ +
asinh(x)
+
This function returns inverse hyperbolic sine of x
asinh(3.6)=1.992...
+ +
acosh(x)
+
This function returns inverse hyperbolic cosine of x
acosh(2.23)=1.440...
+ +
atanh(x) or atgh(x)
+
This function returns inverse hyperbolic tangent of x
atanh(0.67)=0.810...
+ +
acoth(x) or actgh(x)
+
This function returns inverse hyperbolic cotangent of x
acoth(1.23)=1.135...
+ +
DegToDeg(deg; min; sec)
+
This function converts degrees from the long format with degres, minutes and seconds into only degrees.
+For example degtodeg(12; 30; 0)=12.5
+ +
DegToRad(deg)
+
This function converts degrees into radians
degtorad(12.5)=0.218166...
+ +
DegToRad(deg; min; sec)
+
This function converts degrees in the long format (degrees, minutes, seconds) to radians.
For example +degtorad(12; 30; 0)=0.218166...
+ +
RadToDeg(rad)
+
This function converts radians into degrees
radtodeg(pi)=180
+ +
sqrt(x)
+
Sqrt returns the square root of x
sqrt(9)=3
+ +
root(x ; n)
+
The nth root of a 'x', 'n' must be integer and not negative, if 'n' is zero the result is one, +if 'x' is zero the result is zero and we assume that the root(0;0) is not defined, e.g.
+root(8;3)=2
+root(-8;3)=-2 +
+ +
factorial(x)
+
The factorial function
factorial(6)=1*2*3*4*5*6=720
+ +
abs(x)
+
The absolute value of x
abs(-10)=10
+ +
sgn(x)
+
This function returns the sign of x that means when the x is positive the result is 1, when the x is negative +the result is -1 and when the x is zero the result is zero too
+sgn(-10)=-1
+sgn(0)=0
+sgn(5)=1
+ +
mod(x,y)
+
Mod returns the remainder from the division x by y
mod(10; 2.2)=1.2 because 10=2.2*4 + 1.2
+ +
int(x)
+
This method returns only the integer part of x.
int(2.7)=2
+ +
round(x)
+
This method rounds the value of x to the nearest integer
+round(2.8)=3
+round(2.2)=2
+round(2)=2
+round(-4.8)=-5
+round(-4.1)=-4
+ +
ceil(x)
+
This function returns a value representing the smallest integer that is greater than or equal to x
+ceil(2.8)=3
+ceil(2.2)=3
+ceil(2)=2
+ceil(-4.8)=-4
+ceil(-4.1)=-4
+ +
floor(x)
+
This function returns a value representing the largest integer that is less than or equal to x
+floor(2.8)=2
+floor(2.2)=2
+floor(2)=2
+floor(-4.8)=-5
+floor(-4.1)=-5
+ +
max(x1; x2; ...)
+
This functions takes any number of arguments. It returns the max value of them. If there aren't arguments +the function returns the max value which can be held in this precision.
+ +
min(x1; x2; ...)
+
This functions takes any number of arguments. It returns the min value of them. If there aren't arguments +the function returns the min value which can be held in this precision.
+ +
sum(x1; x2; ...)
+
This functions takes one or more arguments. It returns the sum of them.
+ +
avg(x1; x2; ...)
+
This functions takes one or more arguments. It returns the arithmetic mean. (The sum divided by +the number of arguments)
+ +
+ + + diff --git a/help/bitwise_functions.html b/help/bitwise_functions.html index f656f45..87d09d8 100644 --- a/help/bitwise_functions.html +++ b/help/bitwise_functions.html @@ -1,49 +1,49 @@ - - - - - - TTCalc - bitwise functions - - - - - - - - - - - - - - -

Bitwise functions

- -

-There are bitwise functions in the program but they can operate only on non-negative values. -We don't define the BitNot() function too. -

- - -
- -
BitAnd(x ; y) or band(x ; y)
-
Bitwise AND. For example:
-bitand(6; 2) = bitand(&110 ; &10) = &10 = 2
-bitand(6.5; 2.5) = bitand(&110.1 ; &10.1) = &10.1 = 2.5
- -
BitOr(x ; y) or bor(x ; y)
-
Bitwise OR. For example:
-bitor(6; 1) = bitor(&110 ; &1) = &111 = 7
-bitor(6.5; 1.5) = bitor(&110.1 ; &1.1) = &111.1 = 7.5
- -
BitXor(x ; y) or bxor(x ; y)
-
Bitwise XOR. For example:
-bitxor(6; 3) = bitxor(&110 ; &11) = &101 = 5
-bitxor(6.5; 3.5) = bitxor(&110.1 ; &11.1) = &101.0 = 5
- -
- - - + + + + + + TTCalc - bitwise functions + + + + + + + + + + + + + + +

Bitwise functions

+ +

+There are bitwise functions in the program but they can operate only on non-negative values. +We don't define the BitNot() function too. +

+ + +
+ +
BitAnd(x ; y) or band(x ; y)
+
Bitwise AND. For example:
+bitand(6; 2) = bitand(&110 ; &10) = &10 = 2
+bitand(6.5; 2.5) = bitand(&110.1 ; &10.1) = &10.1 = 2.5
+ +
BitOr(x ; y) or bor(x ; y)
+
Bitwise OR. For example:
+bitor(6; 1) = bitor(&110 ; &1) = &111 = 7
+bitor(6.5; 1.5) = bitor(&110.1 ; &1.1) = &111.1 = 7.5
+ +
BitXor(x ; y) or bxor(x ; y)
+
Bitwise XOR. For example:
+bitxor(6; 3) = bitxor(&110 ; &11) = &101 = 5
+bitxor(6.5; 3.5) = bitxor(&110.1 ; &11.1) = &101.0 = 5
+ +
+ + + diff --git a/help/help.hhp b/help/help.hhp index 98e4330..52d8aa4 100644 --- a/help/help.hhp +++ b/help/help.hhp @@ -1,24 +1,24 @@ -[OPTIONS] -Auto Index=Yes -Compatibility=1.1 or later -Compiled file=..\..\output\ttcalc.chm -Contents file=toc.hhc -Default topic=index.html -Display compile progress=No -Index file=index.hhk -Language=0x809 Angielski (Wielka Brytania) -Title=TTCalc - - -[FILES] -values_and_std_operators.html -arithmetic_functions.html -logical_functions.html -operators_priority.html -userfunctions.html -index.html -tips.html -bitwise_functions.html - -[INFOTYPES] - +[OPTIONS] +Auto Index=Yes +Compatibility=1.1 or later +Compiled file=..\..\output\ttcalc.chm +Contents file=toc.hhc +Default topic=index.html +Display compile progress=No +Index file=index.hhk +Language=0x809 Angielski (Wielka Brytania) +Title=TTCalc + + +[FILES] +values_and_std_operators.html +arithmetic_functions.html +logical_functions.html +operators_priority.html +userfunctions.html +index.html +tips.html +bitwise_functions.html + +[INFOTYPES] + diff --git a/help/index.hhk b/help/index.hhk index 2e24f6f..c0ba08a 100644 --- a/help/index.hhk +++ b/help/index.hhk @@ -1,9 +1,9 @@ - - - - - - -
    -
- + + + + + + +
    +
+ diff --git a/help/index.html b/help/index.html index 134b753..db87aa0 100644 --- a/help/index.html +++ b/help/index.html @@ -1,47 +1,47 @@ - - - - - - TTCalc - - - - - - - - - - - - - -

TTCalc

- -

-TTCalc is a mathematical calculator. It has a nice user interface, formulas for -calculating can be inserted by using a keyboard or a mouse. The result is automatically -shown in a second window without using any additional keys such as 'equal'. The -program possess trigonometric functions, inverse trigonometric functions, hyperbolic -functions, logical operators, logarithms, functions for converting between degrees and -radians and so on. Additionally the program allows the user to define his own -variables and functions. Calculations are performed by using floating point numbers -with three kind of precision, the biggest has 288 bits for its mantissa and 96 bits -for its exponent that is about 2.551...e+11925026709067095507636213441 with 85 valid -decimal digits. The program independently allows to insert and display values with -the base (radix) from two to sixteen. -

- - - - - - - - -
Author:Tomasz Sowa
Contact:t.sowa@slimaczek.pl
Licence:BSD (open source)
Operating systems:Microsoft Windows 9x/Me/NT/2000/XP (Vista was not tested)
Interface:English, Polish
Project page:http://sourceforge.net/projects/ttcalc
- - - + + + + + + TTCalc + + + + + + + + + + + + + +

TTCalc

+ +

+TTCalc is a mathematical calculator. It has a nice user interface, formulas for +calculating can be inserted by using a keyboard or a mouse. The result is automatically +shown in a second window without using any additional keys such as 'equal'. The +program possess trigonometric functions, inverse trigonometric functions, hyperbolic +functions, logical operators, logarithms, functions for converting between degrees and +radians and so on. Additionally the program allows the user to define his own +variables and functions. Calculations are performed by using floating point numbers +with three kind of precision, the biggest has 288 bits for its mantissa and 96 bits +for its exponent that is about 2.551...e+11925026709067095507636213441 with 85 valid +decimal digits. The program independently allows to insert and display values with +the base (radix) from two to sixteen. +

+ + + + + + + + +
Author:Tomasz Sowa
Contact:t.sowa@slimaczek.pl
Licence:BSD (open source)
Operating systems:Microsoft Windows 9x/Me/NT/2000/XP (Vista was not tested)
Interface:English, Polish
Project page:http://sourceforge.net/projects/ttcalc
+ + + \ No newline at end of file diff --git a/help/logical_functions.html b/help/logical_functions.html index dd28307..a72daaa 100644 --- a/help/logical_functions.html +++ b/help/logical_functions.html @@ -1,103 +1,103 @@ - - - - - - TTCalc - comparative and logical operators and functions - - - - - - - - - - - - - - - - - - - - - - -

Comparative and logical operators and functions

- -

-We assume that the logical false is represented by zero and the logical true is represented by the -value different from zero. Note: If a function takes more than one argument, the arguments are separated with semicolon ';'. -

- - -
- -
x < y
-
This operator returns one if x is lower than y else it returns zero. For example:
-4 < 10 = 1
-6 < 2 = 0
- -
x > y
-
This operator returns one if x is greater than y else it returns zero. For example:
-5 > 2 = 1
-5 > 8 = 0
- -
x <= y
-
This operator returns one if x is lower than or equal to y else it returns zero. For example:
-4 <= 4 = 1
-7 <= 2 = 0
- -
x >= y
-
This operator returns one if x is greater than or equal to y else it returns zero. For example:
-5 >= 5 = 1
-3 >= 4 = 0
- -
x == y
-
This operator returns one if x is equal y else it returns zero. For example:
-4 == 4 = 1
-6 == 2 = 0
- -
x != y
-
This operator returns one if x is different from y else it returns zero. For example:
-5 != 2 = 1
-5 != 5 = 0
- -
x && y (logical and)
-
This operator returns one if both x and y are different from zero else it returns zero. For example:
-4 && 10 = 1
-6 && 0 = 0
-0 && 0 = 0
- -
x || y (logical or)
-
This operator returns one either if x or y are different from zero else it returns zero. For example:
-5 || 2 = 1
-0 || 3 = 1
-0 || 0 = 0
- -
if(condition; if_true; if_false)
-
If the 'condition' is true (different from zero) the function returns 'if_true' else it returns 'if_false', e.g.
-if( 0 ; 20 ; 30) = 30
-if( 1 ; 20 ; 30) = 20
-if( 4<5 ; 10 ; 50) = 10
-if( 6>10 ; 200 ; 100) = 100
- -
and(x ; y)
-
This function does the same thing as the logical operator 'and' (&&)
- -
or(x ; y)
-
This function does the same thing as the logical operator 'or' (||)
- -
not(x)
-
If the x is true (different from zero) this function returns zero, otherwise it returns one, e.g.
-not(15)=0
-not(0)=1
- -
- - - + + + + + + TTCalc - comparative and logical operators and functions + + + + + + + + + + + + + + + + + + + + + + +

Comparative and logical operators and functions

+ +

+We assume that the logical false is represented by zero and the logical true is represented by the +value different from zero. Note: If a function takes more than one argument, the arguments are separated with semicolon ';'. +

+ + +
+ +
x < y
+
This operator returns one if x is lower than y else it returns zero. For example:
+4 < 10 = 1
+6 < 2 = 0
+ +
x > y
+
This operator returns one if x is greater than y else it returns zero. For example:
+5 > 2 = 1
+5 > 8 = 0
+ +
x <= y
+
This operator returns one if x is lower than or equal to y else it returns zero. For example:
+4 <= 4 = 1
+7 <= 2 = 0
+ +
x >= y
+
This operator returns one if x is greater than or equal to y else it returns zero. For example:
+5 >= 5 = 1
+3 >= 4 = 0
+ +
x == y
+
This operator returns one if x is equal y else it returns zero. For example:
+4 == 4 = 1
+6 == 2 = 0
+ +
x != y
+
This operator returns one if x is different from y else it returns zero. For example:
+5 != 2 = 1
+5 != 5 = 0
+ +
x && y (logical and)
+
This operator returns one if both x and y are different from zero else it returns zero. For example:
+4 && 10 = 1
+6 && 0 = 0
+0 && 0 = 0
+ +
x || y (logical or)
+
This operator returns one either if x or y are different from zero else it returns zero. For example:
+5 || 2 = 1
+0 || 3 = 1
+0 || 0 = 0
+ +
if(condition; if_true; if_false)
+
If the 'condition' is true (different from zero) the function returns 'if_true' else it returns 'if_false', e.g.
+if( 0 ; 20 ; 30) = 30
+if( 1 ; 20 ; 30) = 20
+if( 4<5 ; 10 ; 50) = 10
+if( 6>10 ; 200 ; 100) = 100
+ +
and(x ; y)
+
This function does the same thing as the logical operator 'and' (&&)
+ +
or(x ; y)
+
This function does the same thing as the logical operator 'or' (||)
+ +
not(x)
+
If the x is true (different from zero) this function returns zero, otherwise it returns one, e.g.
+not(15)=0
+not(0)=1
+ +
+ + + \ No newline at end of file diff --git a/help/operators_priority.html b/help/operators_priority.html index f0f1ae7..f074353 100644 --- a/help/operators_priority.html +++ b/help/operators_priority.html @@ -1,35 +1,35 @@ - - - - - - TTCalc - operators priority - - - - - - - - -

Operators Priority

- -

Below is a list of operators priority. At the top are operators with higher precedence.

- - - - - - - - - - - - - - -
OperatorDescriptionSample
( )parentheses for grouping an expression(1+3)*4
- + # &unary minus and plus, and operators for changing the base (radix)-10
without an operatorshort form of multiplicating (only if the second argument is a variable or function)3y
^powering3^2
* /multiplication and division10*20
+ -addition and subtraction10-30
== != < > <= >=comparative operators4<5
&&logical and3>2 && 3<10
||logical or3>2 || 3<10
- - - + + + + + + TTCalc - operators priority + + + + + + + + +

Operators Priority

+ +

Below is a list of operators priority. At the top are operators with higher precedence.

+ + + + + + + + + + + + + + +
OperatorDescriptionSample
( )parentheses for grouping an expression(1+3)*4
- + # &unary minus and plus, and operators for changing the base (radix)-10
without an operatorshort form of multiplicating (only if the second argument is a variable or function)3y
^powering3^2
* /multiplication and division10*20
+ -addition and subtraction10-30
== != < > <= >=comparative operators4<5
&&logical and3>2 && 3<10
||logical or3>2 || 3<10
+ + + diff --git a/help/styles.css b/help/styles.css index 434e079..93a6dd1 100644 --- a/help/styles.css +++ b/help/styles.css @@ -1,48 +1,48 @@ -html * { -margin: 0; -border: 0; -padding: 0; -} - - -html, body { -font-size: 14px; -font-family: Tahoma, Arial, Sans-serif; -} - -body { -margin: 0 0 20px 20px; -} - -h1 { -font-size: 2em; -font-family: Arial, Tahoma, Sans-serif; -margin: 1.4em 0 1em 0; -} - -p { -margin: 1em 0 1em 0; -} - -dt { -font-size: 1.4em; -margin-top: 1em; -} - - -dd { -padding: 0.3em 0 0 2em; -} - -thead { -font-size: 1.2em; -} - -td { -padding: 0 2em 0 0; -} - - - - - +html * { +margin: 0; +border: 0; +padding: 0; +} + + +html, body { +font-size: 14px; +font-family: Tahoma, Arial, Sans-serif; +} + +body { +margin: 0 0 20px 20px; +} + +h1 { +font-size: 2em; +font-family: Arial, Tahoma, Sans-serif; +margin: 1.4em 0 1em 0; +} + +p { +margin: 1em 0 1em 0; +} + +dt { +font-size: 1.4em; +margin-top: 1em; +} + + +dd { +padding: 0.3em 0 0 2em; +} + +thead { +font-size: 1.2em; +} + +td { +padding: 0 2em 0 0; +} + + + + + diff --git a/help/tips.html b/help/tips.html index 3c20e36..e82efc0 100644 --- a/help/tips.html +++ b/help/tips.html @@ -1,53 +1,53 @@ - - - - - - TTCalc - tips - - - - - - - - - - - - - - -

Tips

- -

-If you want to clear the input edit or if you want to put something in and the focus is -somewhere on the tabs just type ESC, the entire edit will be selected and have a focus. -

- -

-If you want to insert a value with a base (radix) 2 or 16 use the unary operator & (for the base 2) -or # (for the base 16). -For example &10=2 (decimal), #10=16 (decimal). When you're using these operators -then 'input' mode on the 'display' tab is ignored. -

- -

-You can calculate more than one formula at the same time. To achive this use a semicolon -in the global space, for example type '2+4 ; 5*10' and the result will be '6   50'. -

- -

-You can use CTRL+C to copy the result from the output edit into the clipboard -(if a control which has a focus is not an edit control, or if it is an edit but -has no selection) -

- -

-Also you can use CTRL+V to paste a text from the clipboard into the input control -(if a focus is not on another edit control) -

- - - + + + + + + TTCalc - tips + + + + + + + + + + + + + + +

Tips

+ +

+If you want to clear the input edit or if you want to put something in and the focus is +somewhere on the tabs just type ESC, the entire edit will be selected and have a focus. +

+ +

+If you want to insert a value with a base (radix) 2 or 16 use the unary operator & (for the base 2) +or # (for the base 16). +For example &10=2 (decimal), #10=16 (decimal). When you're using these operators +then 'input' mode on the 'display' tab is ignored. +

+ +

+You can calculate more than one formula at the same time. To achive this use a semicolon +in the global space, for example type '2+4 ; 5*10' and the result will be '6   50'. +

+ +

+You can use CTRL+C to copy the result from the output edit into the clipboard +(if a control which has a focus is not an edit control, or if it is an edit but +has no selection) +

+ +

+Also you can use CTRL+V to paste a text from the clipboard into the input control +(if a focus is not on another edit control) +

+ + + \ No newline at end of file diff --git a/help/toc.hhc b/help/toc.hhc index 39860e3..d930afb 100644 --- a/help/toc.hhc +++ b/help/toc.hhc @@ -1,46 +1,46 @@ - - - - - - - - - -
    -
  • - - - -
      -
    • - - - -
    • - - - -
    • - - - -
    • - - - -
    • - - - -
    • - - - -
    • - - - -
    -
- + + + + + + + + + +
    +
  • + + + +
      +
    • + + + +
    • + + + +
    • + + + +
    • + + + +
    • + + + +
    • + + + +
    • + + + +
    +
+ diff --git a/help/userfunctions.html b/help/userfunctions.html index 53c7f17..fa7c7e8 100644 --- a/help/userfunctions.html +++ b/help/userfunctions.html @@ -1,36 +1,36 @@ - - - - - - TTCalc - user defined variables and functions - - - - - - - - - -

User defined variables and functions

- -

-You are allowed to define your own variables and functions. As a name of a variable or a function -can be a name consists of letters, digits or an underline character but the first character must be a letter. -From version 0.8.3 names are case-sensitive that means 'name' is not the same as 'NaMe'. For example these -are correct names: a, b, c3, MyName, etc. During defining variables and functions you can call another -variables and functions but you cannot call a variable or a function twice. Recurrence calling are not allowed. -

- -

-Functions can get maximum 9 parameters. You have to specify how many parameters your function takes and -you can refer to them by using the variable 'x' with a number from 1 to 9 ('x' without a number means 'x1'). -For example you can define a function 'xy' as 'x1*x2' (of course without apostrophes), set the 'parameters' on 2 -and then put into the edit box an expression 'xy(10;20)', the result will be 200. Note that we use a semicolon -to separate arguments in a function. -

- - - + + + + + + TTCalc - user defined variables and functions + + + + + + + + + +

User defined variables and functions

+ +

+You are allowed to define your own variables and functions. As a name of a variable or a function +can be a name consists of letters, digits or an underline character but the first character must be a letter. +From version 0.8.3 names are case-sensitive that means 'name' is not the same as 'NaMe'. For example these +are correct names: a, b, c3, MyName, etc. During defining variables and functions you can call another +variables and functions but you cannot call a variable or a function twice. Recurrence calling are not allowed. +

+ +

+Functions can get maximum 9 parameters. You have to specify how many parameters your function takes and +you can refer to them by using the variable 'x' with a number from 1 to 9 ('x' without a number means 'x1'). +For example you can define a function 'xy' as 'x1*x2' (of course without apostrophes), set the 'parameters' on 2 +and then put into the edit box an expression 'xy(10;20)', the result will be 200. Note that we use a semicolon +to separate arguments in a function. +

+ + + \ No newline at end of file diff --git a/help/values_and_std_operators.html b/help/values_and_std_operators.html index 3e90621..a8f6a40 100644 --- a/help/values_and_std_operators.html +++ b/help/values_and_std_operators.html @@ -1,65 +1,65 @@ - - - - - - TTCalc - numbers, standard operators and built-in variables - - - - - - - - - - - - - - - - - - -

Numbers

- -You can type numbers directly using a keyboard or insert them by a mouse. This is a simple edit window, -you can use arrow keys etc. and copy&paste a text by using standard shortcuts such as CTRL+C and CTRL+V. -As the decimal point can be either a comma or a dot that means 1,234 is the same as 1.234. - -

Standard operators

- -
-
^
-
Powering
- -
*
-
Multiplication
- -
/
-
Division
- -
+
-
Addition
- -
-
-
Subtraction
- -
- -

Of course you can use the parentheses ( and ). Look at the operators priority as well.

- -

Built-in variables

- -

You can use following variables, just type its name into the edit window.

-
-
e
-
The base of the natural logarithm.
e = 2.718...
- -
pi
-
The ratio of a circle's circumference to its diameter.
pi=3.141...
-
- - - + + + + + + TTCalc - numbers, standard operators and built-in variables + + + + + + + + + + + + + + + + + + +

Numbers

+ +You can type numbers directly using a keyboard or insert them by a mouse. This is a simple edit window, +you can use arrow keys etc. and copy&paste a text by using standard shortcuts such as CTRL+C and CTRL+V. +As the decimal point can be either a comma or a dot that means 1,234 is the same as 1.234. + +

Standard operators

+ +
+
^
+
Powering
+ +
*
+
Multiplication
+ +
/
+
Division
+ +
+
+
Addition
+ +
-
+
Subtraction
+ +
+ +

Of course you can use the parentheses ( and ). Look at the operators priority as well.

+ +

Built-in variables

+ +

You can use following variables, just type its name into the edit window.

+
+
e
+
The base of the natural logarithm.
e = 2.718...
+ +
pi
+
The ratio of a circle's circumference to its diameter.
pi=3.141...
+
+ + + diff --git a/res/icon02.ico b/res/icon02.ico new file mode 100644 index 0000000000000000000000000000000000000000..efa8fd27d35f07bd1c1b6a84f9279367e7b54f83 GIT binary patch literal 7406 zcmeHLdvH|c760AGKC{VY_wMGkNeCd}3Sk7pI|9*h1s9q?-D=+!$Z(I zLJM^!rnLj@NK5(Db|$ z+`D_f?|07mo%5aVp0fco7#KSi{Pg2U4lofwSy|@U51i&)Zm#>h+ym^%2W(;}0*9B# zU2639_M)1~s;jF}?Ku48wfzvU@9}yC;8pEx=f%0Q>PxA)GJhokS0eBcj6mo^4{gx+ zKxKl}%|Q~{ir2&2K2G>ve0s8E4o-0gMD~INDFVS zX8aZ(d;wiIf@VNC@{uuC0^F#KMz5x8vZ}y-uj_$FCX_@UURMZHCq=I=9;?-Uhefvt zFiTwh0r8dGX`Xi)^ZR(~_t#ZUDUUMHPlx6Mey?UwRgkO(@WOV0kfvqm5#SY1jJzy=1`Lo z1PPMQ2oC1ox5yoE@ydXb;myk}AfA%S$IK@eWXA^ZBI8r%ky{{mpX7sNgUAWI53kE3 zwJ|Iz8@L6A?(s6(9Q1+QL>Gt4U*k7%!B2Y(C<9~m$5P1{UO636h6|UkD|`&4XVL69?eVs2t34u zkYz3zT7Y-)D{~5jwm7H6$uom@^WTk+1d2%~`UNM*3_e4L2Kqv*;wb551h|I!we-bap?S-^%=?h)lVBw*HuGH1s(D@R zcdEzqAS)0=I6DWCa4vGQ!w3blz;_CmIgsD6JV3~^;wa3^M9R ze%XjmSp+=T3$5X4m}S=iyZ%mHuLB!jhB1B#v909sFUBDc zMI$FeZ+Q*I}BVBtkH96{csTHxNlFlK4`zZ7P{7??w*Li^+| zfqlKmo%;a19uI(H8hOu5%#RIP@Yoq!RDA()#$?k&5ZF+QdlfWGiC7}wSV zdwXGA^9h)_LtsRPA!wCxuPsDxTo0pcI{o}CjEN1oCG5A5@ZE~NR)Cfx4gtx6`Mohid=c2%4P(by=1UB*yb{Es`6%T%NR*92sJy!dJRNmw?&uyK%vBgOp?o6K`!}eB^ah6%-;+u8O>2|t0 znwqybPVL-umw3=Ii_X@(YuP95D*D!)YU)Zgt=yCDI-FTQN;1w88Yl`Shx2=?rrX)L zJKZ=-*4x`V8f5*QWR+bRvNj8G@@cM3pXhX2j&*f)9XrTiIB%=~<7_Z;m> zw=g;@Pj{wCP}XfLSthz_TO1mg)Of75{q*tU#~UX#rIdd18$y20!nuxfctg#M#+%za zWRq4dd_8r};vQ961q@z3?fIj^Hx&gbJ9wVN~h8bo6{+0Mr+DZL+$mO?grVRP^XhRLXT55ttXChG&lF8 zYDC=40LvOL`XmUACm)w_a>E*D%J$6uo@9Pp=dP#r9Boje`Be9KE2OrcHv*Q_ND#@* z9qFF&ecA<7RGyr-%*{XrN)3N4lN=cpcDZFO*<9la_Y8j_X8j%S?mHD3-2-oe|IIh)Q*wEg@w!}}VzAE$ z_{94L{V-C`D16p zzx)|!EoWK(-&XZoTi*#^!?%$)VLmZgkbbBr976Q^RjM}NzIRxM*e|d@kaxOKaT~z; zgso=~xv?3AN-t|G>xk3`={Kaekh+eIr&(|Iu?|+Urar`;^FQ(&(Vh%*!9zQFa2ZvV6URBWQ}AU)u(S@AM!b1?F;0` z{zQ5r)>`cBq3-ukFuEGqejnpe%Q`p>n)4*Nk>|EQsh&Vv^bJ)HvEe0vy@fVo6Jo_S zaNt*oc}G%;t4R=lf+_02(uT|?tP6l z?j`m^D_9>(VX!ALv*N1PGN!C#Jug%>Q);R7p2h4Zy?1>d`pDVPq`#W9oR}ikW6A`g zFhQ&!j*tfu7?N&9D{h;)m#gQD=!F|wY z?*$%WPd8;1!r>Saw9EevAi;jrn%)R=({F%vFEaK$h*m8{u@wP-%psmlj_gMx$xX=R z6`!yGiNsLke$@jpm9LEda0J3?7-$0T(pwx0@;^t{?W``bT$#!_yn)H%_$M+8WpH zKhXAA*a+nf+ds8pf5Y0f^>#%;U0p%N(6-6;{Gn?aAFwM%?BcUsF*&c{&aGSPhuR}{ z8G)uD_N1jvOV_VT?$29X7oHxi7&S3zS8yC?J4AaCn*#IN+S=?2u@`PFwhs)wwZ8uD ohR?JLzi=WFGetMainWindow(); + GetWindowRect(main, &r_main); - GetPrgRes()->SetYSizeNormal ( 225 + cy_add + cy_caption * 2); - GetPrgRes()->SetYSizeCompact( 59 + cy_add + cy_caption ); - GetPrgRes()->SetXSizeMin ( 4 + cx_add ); + HWND output_edit = GetDlgItem(main, IDC_OUTPUT_EDIT); + GetWindowRect(output_edit, &r_edit2); + + int cy_compact = (r_edit2.bottom - r_main.top) + GetSystemMetrics(SM_CYSIZEFRAME); + int cy_normal = (r_tab.bottom - r_tab.top) + (r_tab.top - r_main.top) + GetSystemMetrics(SM_CYSIZEFRAME) + 8; + int cx = r_tab.right - r_tab.left + 2 * GetSystemMetrics(SM_CXSIZEFRAME); + + GetPrgRes()->SetYSizeNormal ( cy_normal ); + GetPrgRes()->SetYSizeCompact( cy_compact ); + GetPrgRes()->SetXSizeMin ( cx ); } @@ -456,14 +458,18 @@ DLGTEMPLATE * tab1template = (DLGTEMPLATE*)LockResource(tab1global); int frame_cx = GetSystemMetrics(SM_CXEDGE); int frame_cy = GetSystemMetrics(SM_CYEDGE); - int caption_cy = GetSystemMetrics(SM_CYCAPTION)+10; // the caption plus some white space + int space = 10; // some more space between the tab items and child tabs + + RECT tab_item_r; + TabCtrl_GetItemRect(hTab, 0, &tab_item_r); + int tab_item = tab_item_r.bottom; RECT r; GetWindowRect(hTab, &r); - SetWindowPos(hDialog, HWND_TOP, frame_cx, frame_cy + caption_cy, + SetWindowPos(hDialog, HWND_TOP, frame_cx, frame_cy + tab_item + space, r.right-r.left- 2*frame_cx, - r.bottom-r.top- 2*frame_cy - caption_cy, 0); + r.bottom-r.top- 2*frame_cy - tab_item - space, 0); return hDialog; } @@ -492,18 +498,24 @@ TCITEM tab_item; // the name of a tab we'll set when we call the 'SetLanguage()' function tab_item.mask = 0; - tab_standard = 0; - tab_variables = 1; - tab_functions = 2; + int tab_inc = 0; + + tab_standard = tab_inc++; + tab_variables = tab_inc++; + tab_functions = tab_inc++; #ifndef TTCALC_PORTABLE - tab_precision = 3; - tab_display = 4; - tab_convert = 5; + tab_precision = tab_inc++; #else tab_precision = -1; // this one will not be used - tab_display = 3; - tab_convert = 4; + #endif + + tab_display = tab_inc++; + + #ifdef TTCALC_CONVERT + tab_convert = tab_inc++; + #else + tab_convert = -1; #endif // this insertion must be in the ascending order @@ -517,7 +529,10 @@ TCITEM tab_item; #endif TabCtrl_InsertItem(hTab, tab_display, &tab_item); + + #ifdef TTCALC_CONVERT TabCtrl_InsertItem(hTab, tab_convert, &tab_item); + #endif WmInitDialogCreateTab(hTab, tab_standard, IDD_DIALOG_STANDARD, TabWindowProc); WmInitDialogCreateTab(hTab, tab_variables, IDD_DIALOG_VARIABLES, TabWindowProc); @@ -528,7 +543,10 @@ TCITEM tab_item; #endif WmInitDialogCreateTab(hTab, tab_display, IDD_DIALOG_DISPLAY, TabWindowProc); + + #ifdef TTCALC_CONVERT WmInitDialogCreateTab(hTab, tab_convert, IDD_DIALOG_CONVERT, TabWindowProc); + #endif SetSizeOfDialogs(); @@ -540,7 +558,10 @@ TCITEM tab_item; #endif SendMessage(GetPrgRes()->GetTabWindow(tab_display), WM_INIT_TAB_DISPLAY, 0,0); + + #ifdef TTCALC_CONVERT SendMessage(GetPrgRes()->GetTabWindow(tab_convert), WM_INIT_TAB_CONVERT, 0,0); + #endif TabWindowFunctions::SetLanguage(hTab); @@ -559,7 +580,7 @@ HWND hTab = GetDlgItem(hWnd,IDC_TAB); WmInitDialogCalculateMainWindowSize(hTab); WmInitDialogCreateAndInitTabs(hTab); - HICON program_icon = LoadIcon(GetPrgRes()->GetInstance(),MAKEINTRESOURCE(IDI_ICON1)); + HICON program_icon = LoadIcon(GetPrgRes()->GetInstance(),MAKEINTRESOURCE(IDI_ICON2)); if( program_icon ) SendMessage(hWnd,WM_SETICON,ICON_BIG,(LPARAM)program_icon); @@ -616,7 +637,6 @@ MINMAXINFO * lpmmi = (LPMINMAXINFO) lParam; if( GetPrgRes()->GetView() == ProgramResources::view_normal ) { lpmmi->ptMinTrackSize.y = GetPrgRes()->GetYSizeNormal(); - //lpmmi->ptMaxTrackSize.y = cy_normalny; } else {// kompaktowy diff --git a/src/parsermanager.cpp b/src/parsermanager.cpp index 3d8158d..dd71f54 100644 --- a/src/parsermanager.cpp +++ b/src/parsermanager.cpp @@ -95,16 +95,19 @@ ttmath::ErrorCode ParserManager::Parse() { case 0: parser1.SetBase(base_input); + parser1.SetDegRadGrad(angle_deg_rad_grad); code = parser1.Parse(buffer); break; case 1: parser2.SetBase(base_input); + parser2.SetDegRadGrad(angle_deg_rad_grad); code = parser2.Parse(buffer); break; default: parser3.SetBase(base_input); + parser3.SetDegRadGrad(angle_deg_rad_grad); code = parser3.Parse(buffer); break; } @@ -112,6 +115,7 @@ ttmath::ErrorCode ParserManager::Parse() #else parser1.SetBase(base_input); + parser1.SetDegRadGrad(angle_deg_rad_grad); code = parser1.Parse(buffer); #endif @@ -145,12 +149,13 @@ unsigned int i; base_input = GetPrgRes()->GetBaseInput(); base_output = GetPrgRes()->GetBaseOutput(); - always_scientific = GetPrgRes()->GetDisplayAlwaysScientific(); - when_scientific = GetPrgRes()->GetDisplayWhenScientific(); - rounding = GetPrgRes()->GetDisplayRounding(); - precision = GetPrgRes()->GetPrecision(); - remove_zeroes = GetPrgRes()->GetRemovingZeroes(); - country = GetPrgRes()->GetLanguages()->GetCurrentLanguage(); + always_scientific = GetPrgRes()->GetDisplayAlwaysScientific(); + when_scientific = GetPrgRes()->GetDisplayWhenScientific(); + rounding = GetPrgRes()->GetDisplayRounding(); + precision = GetPrgRes()->GetPrecision(); + remove_zeroes = GetPrgRes()->GetRemovingZeroes(); + angle_deg_rad_grad = GetPrgRes()->GetDegRadGrad(); + country = GetPrgRes()->GetLanguages()->GetCurrentLanguage(); conv_type = GetPrgRes()->GetConvert()->GetCurrentType(); GetPrgRes()->GetConvert()->GetCurrentUnit(conv_type, conv_input_unit, conv_output_unit); diff --git a/src/parsermanager.h b/src/parsermanager.h index 073e60e..b48b9f3 100644 --- a/src/parsermanager.h +++ b/src/parsermanager.h @@ -136,7 +136,7 @@ private: Languages::Country country; ttmath::ErrorCode code; char decimal_point; - + int angle_deg_rad_grad; /* some buffers which we use in some method in the second thread, diff --git a/src/programresources.cpp b/src/programresources.cpp index 098aa77..b7edf56 100644 --- a/src/programresources.cpp +++ b/src/programresources.cpp @@ -208,6 +208,25 @@ bool ProgramResources::GetRemovingZeroes() return remove_zeroes; } + +void ProgramResources::SetDegRadGrad(int angle) +{ + if( angle < 0 || angle > 2 ) + angle = 1; + + angle_deg_rad_grad = angle; +} + + + +int ProgramResources::GetDegRadGrad() +{ + return angle_deg_rad_grad; +} + + + + void ProgramResources::SetDisplayAlwaysScientific(bool a) { display_always_scientific = a; @@ -426,13 +445,14 @@ ProgramResources::ProgramResources() y_size_compact = 0; x_size_min = 0; - // !!! wrzucic do kontruktora Convert + // !!! put into Convert constructor + #ifdef TTCALC_CONVERT convert.Init(); + #endif decimal_point = 0; - - + angle_deg_rad_grad = 1; // rad is default } @@ -649,6 +669,7 @@ std::string ini_value[20]; iparser.Associate( "global|language", &ini_value[13] ); iparser.Associate( "global|disp.dec.point", &ini_value[14] ); iparser.Associate( "global|disp.remove.zeroes", &ini_value[15] ); + iparser.Associate( "global|disp.deg_rad_grad", &ini_value[16] ); iparser.Associate( "variables", &temp_variables ); iparser.Associate( "functions", &temp_functions ); @@ -704,7 +725,7 @@ std::string ini_value[20]; languages.SetCurrentLanguage(Languages::en); SetDecimalPoint( atoi(ini_value[14].c_str()) ); - + SetDegRadGrad( atoi(ini_value[16].c_str()) ); if( err != IniParser::err_ok ) bad_line = iparser.GetBadLine(); @@ -742,6 +763,8 @@ std::ofstream file( configuration_file.c_str() ); file << "disp.rounding = " << display_rounding << std::endl; file << "disp.remove.zeroes = " << (int)remove_zeroes << std::endl; file << "disp.dec.point = " << decimal_point << std::endl; + file << "disp.deg_rad_grad = " << angle_deg_rad_grad << std::endl; + file << "\n[variables]\n"; diff --git a/src/programresources.h b/src/programresources.h index d67684c..0c3a376 100644 --- a/src/programresources.h +++ b/src/programresources.h @@ -293,6 +293,14 @@ public: bool GetRemovingZeroes(); + /*! + setting and returning the unit of angle in which sin/cos/tan/ctg (arc sin...) operate + 0 - deg + 1 - red + 2 - grad + */ + void SetDegRadGrad(int angle); + int GetDegRadGrad(); private: @@ -340,6 +348,7 @@ private: int display_when_scientific; int display_rounding; bool remove_zeroes; + int angle_deg_rad_grad; int bad_line; diff --git a/src/resource.h b/src/resource.h index a22a907..50156ee 100644 --- a/src/resource.h +++ b/src/resource.h @@ -62,7 +62,8 @@ #define IDR_MENU 200 #define IDC_TAB 1010 -#define IDI_ICON1 104 +#define IDI_ICON2 104 +#define IDI_ICON1 105 #define IDC_INPUT_EDIT 1000 #define IDC_OUTPUT_EDIT 1001 @@ -165,6 +166,8 @@ #define IDC_LABEL_DECIMAL_POINT 1169 #define IDC_COMBO_DECIMAL_POINT 1170 #define IDC_CHECK_REMOVE_ZEROES 1171 +#define IDC_LABEL_DISPLAY_DEG_RAD_GRAD 1172 +#define IDC_COMBO_DEG_RAD_GRAD 1173 // convert tab diff --git a/src/resource.rc b/src/resource.rc index 7672f8d..0154d33 100644 --- a/src/resource.rc +++ b/src/resource.rc @@ -4,7 +4,10 @@ LANGUAGE LANG_POLISH, 1 -104 ICON "..\\res\\icon01.ico" +104 ICON "..\\res\\icon02.ico" + +LANGUAGE LANG_POLISH, 2 +105 ICON "..\\res\\icon01.ico" #include "resource.h" @@ -56,10 +59,11 @@ FONT 8, "Ms Shell Dlg" BEGIN CONTROL "",1000,"EDIT",ES_AUTOHSCROLL |ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,0,6,260,14 CONTROL "",1001,"EDIT",ES_READONLY |ES_AUTOHSCROLL |ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,0,21,260,14 - CONTROL "",1010,"SysTabControl32",WS_CHILD |WS_TABSTOP |WS_GROUP| WS_VISIBLE ,0,39,261,110, WS_EX_CONTROLPARENT + CONTROL "",1010,"SysTabControl32",WS_CHILD |WS_TABSTOP |WS_GROUP| WS_VISIBLE ,0,39,261,106, WS_EX_CONTROLPARENT END + 102 DIALOG DISCARDABLE 0, 0, 358, 61 STYLE DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU @@ -181,22 +185,29 @@ STYLE DS_3DLOOK | DS_FIXEDSYS | WS_CHILD | WS_CAPTION | WS_GROUP | CAPTION "tab5" FONT 8, "Ms Shell Dlg" BEGIN - COMBOBOX 1156,58,5,69,200,CBS_DROPDOWNLIST | WS_GROUP | + COMBOBOX 1156,58,5,58,200,CBS_DROPDOWNLIST | WS_GROUP | WS_TABSTOP - COMBOBOX 1157,58,19,69,200,CBS_DROPDOWNLIST | WS_TABSTOP - LTEXT "Input",1162,11,7,27,8 - LTEXT "Output",1163,11,22,29,8 - LTEXT "Rounding",1164,11,36,43,8 - LTEXT "Decimal point",1169,178,21,68,8 - COMBOBOX 1170,143,19,29,62,CBS_DROPDOWNLIST | WS_TABSTOP + COMBOBOX 1157,58,19,58,200,CBS_DROPDOWNLIST | WS_TABSTOP + CONTROL "Input",1162,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,11,7, + 43,8 + CONTROL "Output",1163,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,11, + 22,43,8 + COMBOBOX 1159,58,33,58,200,CBS_DROPDOWNLIST | WS_TABSTOP + CONTROL "Rounding",1164,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,11, + 36,43,8 + COMBOBOX 1173,213,5,38,54,CBS_DROPDOWNLIST | WS_TABSTOP + CONTROL "sin/cos asin/acos",1172,"Static",SS_LEFTNOWORDWRAP | + WS_GROUP,137,7,73,8 + COMBOBOX 1170,213,19,38,62,CBS_DROPDOWNLIST | WS_TABSTOP + CONTROL "Decimal point",1169,"Static",SS_LEFTNOWORDWRAP | + WS_GROUP,137,22,73,8 CONTROL "remove trailing zeroes",1171,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,143,35,111,10 - COMBOBOX 1159,58,33,69,200,CBS_DROPDOWNLIST | WS_TABSTOP + BS_LEFTTEXT | BS_LEFT | WS_TABSTOP,136,36,115,10 CONTROL "Always",1160,"Button",BS_AUTORADIOBUTTON | BS_LEFT | - WS_GROUP | WS_TABSTOP,19,65,44,10 + WS_GROUP | WS_TABSTOP,19,65,54,10 CONTROL "When the exponent is greater than:",1161,"Button", - BS_AUTORADIOBUTTON | BS_LEFT,77,65,130,10 - EDITTEXT 1166,211,63,29,14,ES_NUMBER | WS_GROUP + BS_AUTORADIOBUTTON | BS_LEFT,77,65,138,10 + EDITTEXT 1166,217,63,29,14,ES_NUMBER | WS_GROUP CONTROL "",1165,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS,201,73,11,14 GROUPBOX "Print scientific value",1168,11,51,240,31 @@ -204,6 +215,9 @@ END + +#ifdef TTCALC_CONVERT + 115 DIALOG DISCARDABLE 0, 0, 260, 90 STYLE DS_3DLOOK | DS_FIXEDSYS | WS_CHILD | WS_CAPTION | WS_GROUP | WS_TABSTOP @@ -234,6 +248,8 @@ BEGIN BS_AUTOCHECKBOX | WS_TABSTOP,162,74,88,10 END +#endif + #ifndef TTCALC_PORTABLE 200 DIALOG DISCARDABLE 0, 0, 349, 202 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | diff --git a/src/tabs.cpp b/src/tabs.cpp index 1626297..5b00c43 100644 --- a/src/tabs.cpp +++ b/src/tabs.cpp @@ -413,7 +413,6 @@ int i; SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_ROUNDING, CB_RESETCONTENT, 0, 0); -// SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_ROUNDING, CB_ADDSTRING, 0, (LPARAM)GetPrgRes()->GetLanguages()->GuiMessage(Languages::combo_rounding_cut_last_digits) ); SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_ROUNDING, CB_ADDSTRING, 0, (LPARAM)GetPrgRes()->GetLanguages()->GuiMessage(Languages::combo_rounding_none) ); SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_ROUNDING, CB_ADDSTRING, 0, (LPARAM)GetPrgRes()->GetLanguages()->GuiMessage(Languages::combo_rounding_integer) ); @@ -447,6 +446,8 @@ int i; SetDlgItemText(hWnd, IDC_LABEL_DECIMAL_POINT, GetPrgRes()->GetLanguages()->GuiMessage(Languages::display_decimal_point)); SetDlgItemText(hWnd, IDC_CHECK_REMOVE_ZEROES, GetPrgRes()->GetLanguages()->GuiMessage(Languages::check_remove_zeroes)); + + SetDlgItemText(hWnd, IDC_LABEL_DISPLAY_DEG_RAD_GRAD, GetPrgRes()->GetLanguages()->GuiMessage(Languages::display_deg_red_grad)); } @@ -669,17 +670,17 @@ TCITEM tab; TabCtrl_SetItem(hTab,tab_functions, &tab); #ifndef TTCALC_PORTABLE - tab.pszText = const_cast( GetPrgRes()->GetLanguages()->GuiMessage(Languages::tab_precision) ); TabCtrl_SetItem(hTab,tab_precision, &tab); - #endif tab.pszText = const_cast( GetPrgRes()->GetLanguages()->GuiMessage(Languages::tab_display) ); TabCtrl_SetItem(hTab,tab_display, &tab); + #ifdef TTCALC_CONVERT tab.pszText = const_cast( GetPrgRes()->GetLanguages()->GuiMessage(Languages::tab_convert) ); TabCtrl_SetItem(hTab,tab_convert, &tab); + #endif SetLanguageTabStandard( GetPrgRes()->GetTabWindow(tab_standard) ); SetLanguageTabVariables( GetPrgRes()->GetTabWindow(tab_variables) ); @@ -690,7 +691,10 @@ TCITEM tab; #endif SetLanguageTabDisplay( GetPrgRes()->GetTabWindow(tab_display) ); + + #ifdef TTCALC_CONVERT SetLanguageTabConvert( GetPrgRes()->GetTabWindow(tab_convert) ); + #endif InvalidateRect(hTab, 0, false); } @@ -818,6 +822,18 @@ BOOL WmTabCommand_RemoveZeroesChanged(HWND hWnd, UINT message, WPARAM wParam, LP return true; } +BOOL WmTabCommand_DisplayDegRadGradChanged(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + if( HIWORD(wParam) != CBN_SELCHANGE ) + return false; + + GetPrgRes()->GetThreadController()->StopCalculating(); + GetPrgRes()->SetDegRadGrad( (int)SendDlgItemMessage(hWnd, IDC_COMBO_DEG_RAD_GRAD, CB_GETCURSEL, 0, 0) ); + GetPrgRes()->GetThreadController()->StartCalculating(); + +return true; +} + void SetDisablingDisplayWhenScientific(HWND hWnd) { @@ -981,8 +997,7 @@ void CreateTabCommandMessagesTable(Messages & cmessages) cmessages.Associate(IDC_RADIO_DISPLAY_NOT_ALWAYS_SCIENTIFIC, WmTabCommand_SetDisplayNotAlwaysScientific); cmessages.Associate(IDC_EDIT_DISPLAY_WHEN_SCIENTIFIC, WmTabCommand_SetDisplayWhenScientific); cmessages.Associate(IDC_COMBO_DECIMAL_POINT, WmTabCommand_DisplayDecimalPointChanged); - - + cmessages.Associate(IDC_COMBO_DEG_RAD_GRAD, WmTabCommand_DisplayDegRadGradChanged); } @@ -1245,6 +1260,15 @@ char buffer[20]; if( GetPrgRes()->GetRemovingZeroes() ) CheckDlgButton(hWnd, IDC_CHECK_REMOVE_ZEROES, BST_CHECKED); + + + SendDlgItemMessage(hWnd, IDC_COMBO_DEG_RAD_GRAD, CB_ADDSTRING, 0, (LPARAM)"deg"); + SendDlgItemMessage(hWnd, IDC_COMBO_DEG_RAD_GRAD, CB_ADDSTRING, 0, (LPARAM)"rad"); + SendDlgItemMessage(hWnd, IDC_COMBO_DEG_RAD_GRAD, CB_ADDSTRING, 0, (LPARAM)"grad"); + + SendDlgItemMessage(hWnd, IDC_COMBO_DEG_RAD_GRAD, CB_SETCURSEL, GetPrgRes()->GetDegRadGrad(), 0); + + return true; } @@ -1283,10 +1307,6 @@ BOOL WmNotify(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) NMHDR * pnmh = (LPNMHDR) lParam; HWND var_list = GetDlgItem(hWnd,IDC_VARIABLES_LIST); HWND fun_list = GetDlgItem(hWnd,IDC_FUNCTIONS_LIST); -HWND conv_list1 = GetDlgItem(hWnd,IDC_LIST_UNIT_TYPE); -HWND conv_list2b = GetDlgItem(hWnd,IDC_LIST_UNIT_INPUT2); -HWND conv_list3b = GetDlgItem(hWnd,IDC_LIST_UNIT_OUTPUT2); - if( pnmh->hwndFrom == var_list ) @@ -1337,6 +1357,11 @@ HWND conv_list3b = GetDlgItem(hWnd,IDC_LIST_UNIT_OUTPUT2); } +#ifdef TTCALC_CONVERT +HWND conv_list1 = GetDlgItem(hWnd,IDC_LIST_UNIT_TYPE); +HWND conv_list2b = GetDlgItem(hWnd,IDC_LIST_UNIT_INPUT2); +HWND conv_list3b = GetDlgItem(hWnd,IDC_LIST_UNIT_OUTPUT2); + if( pnmh->hwndFrom==conv_list1 || pnmh->hwndFrom==conv_list2b || pnmh->hwndFrom==conv_list3b ) { if( pnmh->code == LVN_ITEMCHANGED ) @@ -1355,7 +1380,7 @@ HWND conv_list3b = GetDlgItem(hWnd,IDC_LIST_UNIT_OUTPUT2); } } } - +#endif return false; } @@ -1375,7 +1400,10 @@ void CreateTabMessagesTable(Messages & messages) #endif messages.Associate(WM_INIT_TAB_DISPLAY, WmInitTabDisplay); + + #ifdef TTCALC_CONVERT messages.Associate(WM_INIT_TAB_CONVERT, WmInitTabConvert); + #endif messages.Associate(WM_NOTIFY, WmNotify); } diff --git a/src/winmain.cpp b/src/winmain.cpp index faa763f..5961da1 100644 --- a/src/winmain.cpp +++ b/src/winmain.cpp @@ -46,7 +46,6 @@ #include - /*! the application starts here */ @@ -72,7 +71,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) if( !GetPrgRes()->GetThreadController()->Init() ) return ShowError( Languages::cant_init_calculations ); - unsigned int thread_id; + unsigned int thread_id; uintptr_t thread_handle; if( (thread_handle = _beginthreadex(0,0,CalculationsProcedure, 0, 0, &thread_id)) == 0 ) return ShowError( Languages::cant_create_thread );